diff --git a/.browserslistrc b/.browserslistrc
new file mode 100644
index 00000000..427441dc
--- /dev/null
+++ b/.browserslistrc
@@ -0,0 +1,17 @@
+# 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
+
+# For the full list of supported browsers by the Angular framework, please see:
+# https://angular.io/guide/browser-support
+
+# You can see what browsers were selected by your queries by running:
+# npx browserslist
+
+last 1 Chrome version
+last 1 Firefox version
+last 2 Edge major versions
+last 2 Safari major versions
+last 2 iOS major versions
+Firefox ESR
+not IE 11 # Angular supports IE 11 only as an opt-in. To opt-in, remove the 'not' prefix on this line.
diff --git a/.editorconfig b/.editorconfig
new file mode 100644
index 00000000..59d9a3a3
--- /dev/null
+++ b/.editorconfig
@@ -0,0 +1,16 @@
+# 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
+
+[*.ts]
+quote_type = single
+
+[*.md]
+max_line_length = off
+trim_trailing_whitespace = false
diff --git a/.eslintignore b/.eslintignore
new file mode 100644
index 00000000..42da9d3f
--- /dev/null
+++ b/.eslintignore
@@ -0,0 +1,34 @@
+_cli-tpl/
+dist/
+coverage/
+
+# Logs
+logs
+*.log
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+
+# Dependency directories
+node_modules/
+
+# TypeScript cache
+*.tsbuildinfo
+
+# Optional npm cache directory
+.npm
+
+# Optional eslint cache
+.eslintcache
+
+# Yarn Integrity file
+.yarn-integrity
+
+# dotenv environment variables file
+.env
+.env.test
+
+.cache/
+
+# yarn v2
+.yarn
diff --git a/.eslintrc.js b/.eslintrc.js
new file mode 100644
index 00000000..78aaeb78
--- /dev/null
+++ b/.eslintrc.js
@@ -0,0 +1,126 @@
+const prettierConfig = require('./.prettierrc.js');
+
+module.exports = {
+ root: true,
+ parserOptions: { ecmaVersion: 2021 },
+ overrides: [
+ {
+ files: ['*.ts'],
+ parser: '@typescript-eslint/parser',
+ parserOptions: {
+ tsconfigRootDir: __dirname,
+ project: ['tsconfig.json'],
+ createDefaultProgram: true
+ },
+ plugins: ['@typescript-eslint', 'jsdoc', 'import'],
+ extends: [
+ 'plugin:@angular-eslint/recommended',
+ 'plugin:@angular-eslint/template/process-inline-templates',
+ 'plugin:prettier/recommended'
+ ],
+ rules: {
+ 'prettier/prettier': ['error', prettierConfig],
+ 'jsdoc/newline-after-description': 1,
+ '@angular-eslint/component-class-suffix': [
+ 'error',
+ {
+ suffixes: ['Directive', 'Component', 'Base', 'Widget']
+ }
+ ],
+ '@angular-eslint/directive-class-suffix': [
+ 'error',
+ {
+ suffixes: ['Directive', 'Component', 'Base', 'Widget']
+ }
+ ],
+ '@angular-eslint/component-selector': [
+ 'off',
+ {
+ type: ['element', 'attribute'],
+ prefix: ['app', 'test'],
+ style: 'kebab-case'
+ }
+ ],
+ '@angular-eslint/directive-selector': [
+ 'off',
+ {
+ type: 'attribute',
+ prefix: ['app']
+ }
+ ],
+ '@angular-eslint/no-attribute-decorator': 'error',
+ '@angular-eslint/no-conflicting-lifecycle': 'off',
+ '@angular-eslint/no-forward-ref': 'off',
+ '@angular-eslint/no-host-metadata-property': 'off',
+ '@angular-eslint/no-lifecycle-call': 'off',
+ '@angular-eslint/no-pipe-impure': 'error',
+ '@angular-eslint/prefer-output-readonly': 'error',
+ '@angular-eslint/use-component-selector': 'off',
+ '@angular-eslint/use-component-view-encapsulation': 'off',
+ '@angular-eslint/no-input-rename': 'off',
+ '@angular-eslint/no-output-native': 'off',
+ '@typescript-eslint/array-type': [
+ 'error',
+ {
+ default: 'array-simple'
+ }
+ ],
+ '@typescript-eslint/ban-types': [
+ 'off',
+ {
+ types: {
+ String: {
+ message: 'Use string instead.'
+ },
+ Number: {
+ message: 'Use number instead.'
+ },
+ Boolean: {
+ message: 'Use boolean instead.'
+ },
+ Function: {
+ message: 'Use specific callable interface instead.'
+ }
+ }
+ }
+ ],
+ 'import/no-duplicates': 'error',
+ 'import/no-unused-modules': 'error',
+ 'import/no-unassigned-import': 'error',
+ 'import/order': [
+ 'error',
+ {
+ alphabetize: { order: 'asc', caseInsensitive: false },
+ 'newlines-between': 'always',
+ groups: ['external', 'internal', ['parent', 'sibling', 'index']],
+ pathGroups: [],
+ pathGroupsExcludedImportTypes: []
+ }
+ ],
+ '@typescript-eslint/no-this-alias': 'error',
+ '@typescript-eslint/member-ordering': 'off',
+ 'no-irregular-whitespace': 'error',
+ 'no-multiple-empty-lines': 'error',
+ 'no-sparse-arrays': 'error',
+ 'prefer-object-spread': 'error',
+ 'prefer-template': 'error',
+ 'prefer-const': 'off',
+ 'max-len': 'off'
+ }
+ },
+ {
+ files: ['*.html'],
+ extends: ['plugin:@angular-eslint/template/recommended'],
+ rules: {}
+ },
+ {
+ files: ['*.html'],
+ excludedFiles: ['*inline-template-*.component.html'],
+ extends: ['plugin:prettier/recommended'],
+ rules: {
+ 'prettier/prettier': ['error', { parser: 'angular' }],
+ '@angular-eslint/template/eqeqeq': 'off'
+ }
+ }
+ ]
+};
diff --git a/.gitignore b/.gitignore
index 08b25532..b5af4d96 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1,50 @@
-node_modules
+# See http://help.github.com/ignore-files/ for more about ignoring files.
+
+# compiled output
+/dist
+/tmp
+/out-tsc
+# /src/assets/color.less
+delon-builds
+scripts/var.less
+# src/assets/style.dark.css
+# src/assets/style.compact.css
+
+# dependencies
+/node_modules
+/yarn.lock
+
+# IDEs and editors
+/.idea
+.project
+.classpath
+.c9/
+*.launch
+.settings/
+*.sublime-workspace
+
+# IDE - VSCode
+.vscode/*
+.vscode
+!.vscode/settings.json
+!.vscode/tasks.json
+!.vscode/launch.json
+!.vscode/extensions.json
+
+# misc
+/.sass-cache
+/connect.lock
+/coverage
+/libpeerconnection.log
+npm-debug.log
+testem.log
+/typings
+yarn-error.log
+/_all.less
+
+# e2e
+/e2e/*.map
+
+# System Files
+.DS_Store
+Thumbs.db
diff --git a/.husky/.gitignore b/.husky/.gitignore
new file mode 100644
index 00000000..31354ec1
--- /dev/null
+++ b/.husky/.gitignore
@@ -0,0 +1 @@
+_
diff --git a/.npmignore b/.npmignore
new file mode 100644
index 00000000..3e1f42ec
--- /dev/null
+++ b/.npmignore
@@ -0,0 +1,5 @@
+.github
+node_modules
+
+dist
+tmp
diff --git a/.nvmrc b/.nvmrc
new file mode 100644
index 00000000..5c088ddb
--- /dev/null
+++ b/.nvmrc
@@ -0,0 +1 @@
+12.14.1
diff --git a/.prettierignore b/.prettierignore
new file mode 100644
index 00000000..d250447c
--- /dev/null
+++ b/.prettierignore
@@ -0,0 +1,18 @@
+# add files you wish to ignore here
+**/*.md
+**/*.svg
+**/test.ts
+
+.stylelintrc
+.prettierrc
+
+src/assets/*
+src/index.html
+node_modules/
+.vscode/
+coverage/
+dist/
+package.json
+tslint.json
+
+_cli-tpl/**/*
diff --git a/.prettierrc.js b/.prettierrc.js
new file mode 100644
index 00000000..26ba9009
--- /dev/null
+++ b/.prettierrc.js
@@ -0,0 +1,13 @@
+module.exports = {
+ singleQuote: true,
+ useTabs: false,
+ printWidth: 140,
+ tabWidth: 2,
+ semi: true,
+ htmlWhitespaceSensitivity: 'strict',
+ arrowParens: 'avoid',
+ bracketSpacing: true,
+ proseWrap: 'preserve',
+ trailingComma: 'none',
+ endOfLine: 'lf'
+};
diff --git a/.stylelintrc b/.stylelintrc
new file mode 100644
index 00000000..86e9c6a3
--- /dev/null
+++ b/.stylelintrc
@@ -0,0 +1,28 @@
+{
+ "extends": [
+ "stylelint-config-standard",
+ "stylelint-config-rational-order",
+ "stylelint-config-prettier"
+ ],
+ "plugins": [
+ "stylelint-order",
+ "stylelint-declaration-block-no-ignored-properties"
+ ],
+ "rules": {
+ "no-descending-specificity": null,
+ "plugin/declaration-block-no-ignored-properties": true,
+ "selector-type-no-unknown": null,
+ "selector-pseudo-element-no-unknown": [
+ true,
+ {
+ "ignorePseudoElements": [
+ "ng-deep"
+ ]
+ }
+ ],
+ "at-rule-no-unknown": null
+ },
+ "ignoreFiles": [
+ "src/assets/**/*"
+ ]
+}
diff --git a/.vscode/settings.json b/.vscode/settings.json
new file mode 100644
index 00000000..a1c49108
--- /dev/null
+++ b/.vscode/settings.json
@@ -0,0 +1,3 @@
+{
+ "compile-hero.disable-compile-files-on-did-save-code": true
+}
\ No newline at end of file
diff --git a/_cli-tpl/README.md b/_cli-tpl/README.md
new file mode 100644
index 00000000..409ebc52
--- /dev/null
+++ b/_cli-tpl/README.md
@@ -0,0 +1 @@
+[Document](https://ng-alain.com/cli/generate#Custom-template-page)
diff --git a/_cli-tpl/grid/__path__/__name@dasherize@if-flat__/__name@dasherize__.component.html b/_cli-tpl/grid/__path__/__name@dasherize@if-flat__/__name@dasherize__.component.html
new file mode 100644
index 00000000..8a7009bc
--- /dev/null
+++ b/_cli-tpl/grid/__path__/__name@dasherize@if-flat__/__name@dasherize__.component.html
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/_cli-tpl/grid/__path__/__name@dasherize@if-flat__/__name@dasherize__.component.spec.ts b/_cli-tpl/grid/__path__/__name@dasherize@if-flat__/__name@dasherize__.component.spec.ts
new file mode 100644
index 00000000..5b408fb6
--- /dev/null
+++ b/_cli-tpl/grid/__path__/__name@dasherize@if-flat__/__name@dasherize__.component.spec.ts
@@ -0,0 +1,24 @@
+import { waitForAsync, ComponentFixture, TestBed } from '@angular/core/testing';
+import { <%= componentName %> } from './<%= dasherize(name) %>.component';
+
+describe('<%= componentName %>', () => {
+ let component: <%= componentName %>;
+ let fixture: ComponentFixture<<%= componentName %>>;
+
+ beforeEach(waitForAsync(() => {
+ TestBed.configureTestingModule({
+ declarations: [ <%= componentName %> ]
+ })
+ .compileComponents();
+ }));
+
+ beforeEach(() => {
+ fixture = TestBed.createComponent(<%= componentName %>);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/_cli-tpl/grid/__path__/__name@dasherize@if-flat__/__name@dasherize__.component.ts b/_cli-tpl/grid/__path__/__name@dasherize@if-flat__/__name@dasherize__.component.ts
new file mode 100644
index 00000000..b9cf8f2b
--- /dev/null
+++ b/_cli-tpl/grid/__path__/__name@dasherize@if-flat__/__name@dasherize__.component.ts
@@ -0,0 +1,18 @@
+import { Component, OnInit<% if(!!viewEncapsulation) { %>, ViewEncapsulation<% }%><% if(changeDetection !== 'Default') { %>, ChangeDetectionStrategy<% }%> } from '@angular/core';
+import { _HttpClient } from '@delon/theme';
+import { NzMessageService } from 'ng-zorro-antd/message';
+
+@Component({
+ selector: '<%= selector %>',
+ templateUrl: './<%= dasherize(name) %>.component.html',<% if(!inlineStyle) { %><% } else { %>
+ styleUrls: ['./<%= dasherize(name) %>.component.<%= styleext %>']<% } %><% if(!!viewEncapsulation) { %>,
+ encapsulation: ViewEncapsulation.<%= viewEncapsulation %><% } if (changeDetection !== 'Default') { %>,
+ changeDetection: ChangeDetectionStrategy.<%= changeDetection %><% } %>
+})
+export class <%= componentName %> implements OnInit {
+
+ constructor(private http: _HttpClient, private msg: NzMessageService) { }
+
+ ngOnInit() { }
+
+}
diff --git a/_cli-tpl/list/__path__/__name@dasherize@if-flat__/__name@dasherize__.component.html b/_cli-tpl/list/__path__/__name@dasherize@if-flat__/__name@dasherize__.component.html
new file mode 100644
index 00000000..aef86ebd
--- /dev/null
+++ b/_cli-tpl/list/__path__/__name@dasherize@if-flat__/__name@dasherize__.component.html
@@ -0,0 +1,3 @@
+
+
+
diff --git a/_cli-tpl/list/__path__/__name@dasherize@if-flat__/__name@dasherize__.component.spec.ts b/_cli-tpl/list/__path__/__name@dasherize@if-flat__/__name@dasherize__.component.spec.ts
new file mode 100644
index 00000000..c7a520ca
--- /dev/null
+++ b/_cli-tpl/list/__path__/__name@dasherize@if-flat__/__name@dasherize__.component.spec.ts
@@ -0,0 +1,24 @@
+import { async, ComponentFixture, TestBed } from '@angular/core/testing';
+import { <%= componentName %> } from './<%= dasherize(name) %>.component';
+
+describe('<%= componentName %>', () => {
+ let component: <%= componentName %>;
+ let fixture: ComponentFixture<<%= componentName %>>;
+
+ beforeEach(async(() => {
+ TestBed.configureTestingModule({
+ declarations: [ <%= componentName %> ]
+ })
+ .compileComponents();
+ }));
+
+ beforeEach(() => {
+ fixture = TestBed.createComponent(<%= componentName %>);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/_cli-tpl/list/__path__/__name@dasherize@if-flat__/__name@dasherize__.component.ts b/_cli-tpl/list/__path__/__name@dasherize@if-flat__/__name@dasherize__.component.ts
new file mode 100644
index 00000000..b9cf8f2b
--- /dev/null
+++ b/_cli-tpl/list/__path__/__name@dasherize@if-flat__/__name@dasherize__.component.ts
@@ -0,0 +1,18 @@
+import { Component, OnInit<% if(!!viewEncapsulation) { %>, ViewEncapsulation<% }%><% if(changeDetection !== 'Default') { %>, ChangeDetectionStrategy<% }%> } from '@angular/core';
+import { _HttpClient } from '@delon/theme';
+import { NzMessageService } from 'ng-zorro-antd/message';
+
+@Component({
+ selector: '<%= selector %>',
+ templateUrl: './<%= dasherize(name) %>.component.html',<% if(!inlineStyle) { %><% } else { %>
+ styleUrls: ['./<%= dasherize(name) %>.component.<%= styleext %>']<% } %><% if(!!viewEncapsulation) { %>,
+ encapsulation: ViewEncapsulation.<%= viewEncapsulation %><% } if (changeDetection !== 'Default') { %>,
+ changeDetection: ChangeDetectionStrategy.<%= changeDetection %><% } %>
+})
+export class <%= componentName %> implements OnInit {
+
+ constructor(private http: _HttpClient, private msg: NzMessageService) { }
+
+ ngOnInit() { }
+
+}
diff --git a/_cli-tpl/test/__path__/__name@dasherize@if-flat__/__name@dasherize__.component.html.template b/_cli-tpl/test/__path__/__name@dasherize@if-flat__/__name@dasherize__.component.html.template
new file mode 100644
index 00000000..3f210156
--- /dev/null
+++ b/_cli-tpl/test/__path__/__name@dasherize@if-flat__/__name@dasherize__.component.html.template
@@ -0,0 +1 @@
+
diff --git a/_cli-tpl/test/__path__/__name@dasherize@if-flat__/__name@dasherize__.component.spec.ts.template b/_cli-tpl/test/__path__/__name@dasherize@if-flat__/__name@dasherize__.component.spec.ts.template
new file mode 100644
index 00000000..c7a520ca
--- /dev/null
+++ b/_cli-tpl/test/__path__/__name@dasherize@if-flat__/__name@dasherize__.component.spec.ts.template
@@ -0,0 +1,24 @@
+import { async, ComponentFixture, TestBed } from '@angular/core/testing';
+import { <%= componentName %> } from './<%= dasherize(name) %>.component';
+
+describe('<%= componentName %>', () => {
+ let component: <%= componentName %>;
+ let fixture: ComponentFixture<<%= componentName %>>;
+
+ beforeEach(async(() => {
+ TestBed.configureTestingModule({
+ declarations: [ <%= componentName %> ]
+ })
+ .compileComponents();
+ }));
+
+ beforeEach(() => {
+ fixture = TestBed.createComponent(<%= componentName %>);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/_cli-tpl/test/__path__/__name@dasherize@if-flat__/__name@dasherize__.component.ts.template b/_cli-tpl/test/__path__/__name@dasherize@if-flat__/__name@dasherize__.component.ts.template
new file mode 100644
index 00000000..b9cf8f2b
--- /dev/null
+++ b/_cli-tpl/test/__path__/__name@dasherize@if-flat__/__name@dasherize__.component.ts.template
@@ -0,0 +1,18 @@
+import { Component, OnInit<% if(!!viewEncapsulation) { %>, ViewEncapsulation<% }%><% if(changeDetection !== 'Default') { %>, ChangeDetectionStrategy<% }%> } from '@angular/core';
+import { _HttpClient } from '@delon/theme';
+import { NzMessageService } from 'ng-zorro-antd/message';
+
+@Component({
+ selector: '<%= selector %>',
+ templateUrl: './<%= dasherize(name) %>.component.html',<% if(!inlineStyle) { %><% } else { %>
+ styleUrls: ['./<%= dasherize(name) %>.component.<%= styleext %>']<% } %><% if(!!viewEncapsulation) { %>,
+ encapsulation: ViewEncapsulation.<%= viewEncapsulation %><% } if (changeDetection !== 'Default') { %>,
+ changeDetection: ChangeDetectionStrategy.<%= changeDetection %><% } %>
+})
+export class <%= componentName %> implements OnInit {
+
+ constructor(private http: _HttpClient, private msg: NzMessageService) { }
+
+ ngOnInit() { }
+
+}
diff --git a/_mock/README.md b/_mock/README.md
new file mode 100644
index 00000000..d30e74ab
--- /dev/null
+++ b/_mock/README.md
@@ -0,0 +1 @@
+[Document](https://ng-alain.com/mock)
diff --git a/_mock/_api.ts b/_mock/_api.ts
new file mode 100644
index 00000000..7448a9f1
--- /dev/null
+++ b/_mock/_api.ts
@@ -0,0 +1,265 @@
+import { MockRequest, MockStatusError } from '@delon/mock';
+
+// region: mock data
+
+const titles = ['Alipay', 'Angular', 'Ant Design', 'Ant Design Pro', 'Bootstrap', 'React', 'Vue', 'Webpack'];
+
+const avatars = [
+ 'https://gw.alipayobjects.com/zos/rmsportal/WdGqmHpayyMjiEhcKoVE.png', // Alipay
+ 'https://gw.alipayobjects.com/zos/rmsportal/zOsKZmFRdUtvpqCImOVY.png', // Angular
+ 'https://gw.alipayobjects.com/zos/rmsportal/dURIMkkrRFpPgTuzkwnB.png', // Ant Design
+ 'https://gw.alipayobjects.com/zos/rmsportal/sfjbOqnsXXJgNCjCzDBL.png', // Ant Design Pro
+ 'https://gw.alipayobjects.com/zos/rmsportal/siCrBXXhmvTQGWPNLBow.png', // Bootstrap
+ 'https://gw.alipayobjects.com/zos/rmsportal/kZzEzemZyKLKFsojXItE.png', // React
+ 'https://gw.alipayobjects.com/zos/rmsportal/ComBAopevLwENQdKWiIn.png', // Vue
+ 'https://gw.alipayobjects.com/zos/rmsportal/nxkuOJlFJuAUhzlMTCEe.png', // Webpack
+];
+const covers = [
+ 'https://gw.alipayobjects.com/zos/rmsportal/HrxcVbrKnCJOZvtzSqjN.png',
+ 'https://gw.alipayobjects.com/zos/rmsportal/alaPpKWajEbIYEUvvVNf.png',
+ 'https://gw.alipayobjects.com/zos/rmsportal/RLwlKSYGSXGHuWSojyvp.png',
+ 'https://gw.alipayobjects.com/zos/rmsportal/gLaIAoVWTtLbBWZNYEMg.png',
+];
+const desc = [
+ '那是一种内在的东西, 他们到达不了,也无法触及的',
+ '希望是一个好东西,也许是最好的,好东西是不会消亡的',
+ '生命就像一盒巧克力,结果往往出人意料',
+ '城镇中有那么多的酒馆,她却偏偏走进了我的酒馆',
+ '那时候我只会想自己想要什么,从不想自己拥有什么',
+];
+
+const user = ['卡色', 'cipchk', '付小小', '曲丽丽', '林东东', '周星星', '吴加好', '朱偏右', '鱼酱', '乐哥', '谭小仪', '仲尼'];
+
+// endregion
+
+function getFakeList(count: number = 20): any[] {
+ const list: any[] = [];
+ for (let i = 0; i < count; i += 1) {
+ list.push({
+ id: `fake-list-${i}`,
+ owner: user[i % 10],
+ title: titles[i % 8],
+ avatar: avatars[i % 8],
+ cover: parseInt((i / 4).toString(), 10) % 2 === 0 ? covers[i % 4] : covers[3 - (i % 4)],
+ status: ['active', 'exception', 'normal'][i % 3],
+ percent: Math.ceil(Math.random() * 50) + 50,
+ logo: avatars[i % 8],
+ href: 'https://ant.design',
+ updatedAt: new Date(new Date().getTime() - 1000 * 60 * 60 * 2 * i),
+ createdAt: new Date(new Date().getTime() - 1000 * 60 * 60 * 2 * i),
+ subDescription: desc[i % 5],
+ description:
+ '在中台产品的研发过程中,会出现不同的设计规范和实现方式,但其中往往存在很多类似的页面和组件,这些类似的组件会被抽离成一套标准规范。',
+ activeUser: Math.ceil(Math.random() * 100000) + 100000,
+ newUser: Math.ceil(Math.random() * 1000) + 1000,
+ star: Math.ceil(Math.random() * 100) + 100,
+ like: Math.ceil(Math.random() * 100) + 100,
+ message: Math.ceil(Math.random() * 10) + 10,
+ content:
+ '段落示意:蚂蚁金服设计平台 ant.design,用最小的工作量,无缝接入蚂蚁金服生态,提供跨越设计与开发的体验解决方案。蚂蚁金服设计平台 ant.design,用最小的工作量,无缝接入蚂蚁金服生态,提供跨越设计与开发的体验解决方案。',
+ members: [
+ {
+ avatar: 'https://gw.alipayobjects.com/zos/rmsportal/ZiESqWwCXBRQoaPONSJe.png',
+ name: '曲丽丽',
+ },
+ {
+ avatar: 'https://gw.alipayobjects.com/zos/rmsportal/tBOxZPlITHqwlGjsJWaF.png',
+ name: '王昭君',
+ },
+ {
+ avatar: 'https://gw.alipayobjects.com/zos/rmsportal/sBxjgqiuHMGRkIjqlQCd.png',
+ name: '董娜娜',
+ },
+ ],
+ });
+ }
+
+ return list;
+}
+
+function getNotice(): any[] {
+ return [
+ {
+ id: 'xxx1',
+ title: titles[0],
+ logo: avatars[0],
+ description: '那是一种内在的东西, 他们到达不了,也无法触及的',
+ updatedAt: new Date(),
+ member: '科学搬砖组',
+ href: '',
+ memberLink: '',
+ },
+ {
+ id: 'xxx2',
+ title: titles[1],
+ logo: avatars[1],
+ description: '希望是一个好东西,也许是最好的,好东西是不会消亡的',
+ updatedAt: new Date('2017-07-24'),
+ member: '全组都是吴彦祖',
+ href: '',
+ memberLink: '',
+ },
+ {
+ id: 'xxx3',
+ title: titles[2],
+ logo: avatars[2],
+ description: '城镇中有那么多的酒馆,她却偏偏走进了我的酒馆',
+ updatedAt: new Date(),
+ member: '中二少女团',
+ href: '',
+ memberLink: '',
+ },
+ {
+ id: 'xxx4',
+ title: titles[3],
+ logo: avatars[3],
+ description: '那时候我只会想自己想要什么,从不想自己拥有什么',
+ updatedAt: new Date('2017-07-23'),
+ member: '程序员日常',
+ href: '',
+ memberLink: '',
+ },
+ {
+ id: 'xxx5',
+ title: titles[4],
+ logo: avatars[4],
+ description: '凛冬将至',
+ updatedAt: new Date('2017-07-23'),
+ member: '高逼格设计天团',
+ href: '',
+ memberLink: '',
+ },
+ {
+ id: 'xxx6',
+ title: titles[5],
+ logo: avatars[5],
+ description: '生命就像一盒巧克力,结果往往出人意料',
+ updatedAt: new Date('2017-07-23'),
+ member: '骗你来学计算机',
+ href: '',
+ memberLink: '',
+ },
+ ];
+}
+
+function getActivities(): any[] {
+ return [
+ {
+ id: 'trend-1',
+ updatedAt: new Date(),
+ user: {
+ name: '林东东',
+ avatar: avatars[0],
+ },
+ group: {
+ name: '高逼格设计天团',
+ link: 'http://github.com/',
+ },
+ project: {
+ name: '六月迭代',
+ link: 'http://github.com/',
+ },
+ template: '在 @{group} 新建项目 @{project}',
+ },
+ {
+ id: 'trend-2',
+ updatedAt: new Date(),
+ user: {
+ name: '付小小',
+ avatar: avatars[1],
+ },
+ group: {
+ name: '高逼格设计天团',
+ link: 'http://github.com/',
+ },
+ project: {
+ name: '六月迭代',
+ link: 'http://github.com/',
+ },
+ template: '在 @{group} 新建项目 @{project}',
+ },
+ {
+ id: 'trend-3',
+ updatedAt: new Date(),
+ user: {
+ name: '曲丽丽',
+ avatar: avatars[2],
+ },
+ group: {
+ name: '中二少女团',
+ link: 'http://github.com/',
+ },
+ project: {
+ name: '六月迭代',
+ link: 'http://github.com/',
+ },
+ template: '在 @{group} 新建项目 @{project}',
+ },
+ {
+ id: 'trend-4',
+ updatedAt: new Date(),
+ user: {
+ name: '周星星',
+ avatar: avatars[3],
+ },
+ project: {
+ name: '5 月日常迭代',
+ link: 'http://github.com/',
+ },
+ template: '将 @{project} 更新至已发布状态',
+ },
+ {
+ id: 'trend-5',
+ updatedAt: new Date(),
+ user: {
+ name: '朱偏右',
+ avatar: avatars[4],
+ },
+ project: {
+ name: '工程效能',
+ link: 'http://github.com/',
+ },
+ comment: {
+ name: '留言',
+ link: 'http://github.com/',
+ },
+ template: '在 @{project} 发布了 @{comment}',
+ },
+ {
+ id: 'trend-6',
+ updatedAt: new Date(),
+ user: {
+ name: '乐哥',
+ avatar: avatars[5],
+ },
+ group: {
+ name: '程序员日常',
+ link: 'http://github.com/',
+ },
+ project: {
+ name: '品牌迭代',
+ link: 'http://github.com/',
+ },
+ template: '在 @{group} 新建项目 @{project}',
+ },
+ ];
+}
+
+export const APIS = {
+ '/api/list': (req: MockRequest) => getFakeList(req.queryString.count),
+ '/api/notice': () => getNotice(),
+ '/api/activities': () => getActivities(),
+ 'POST /api/auth/refresh': { msg: 'ok', token: 'new-token-by-refresh' },
+ '/api/401': () => {
+ throw new MockStatusError(401);
+ },
+ '/api/403': () => {
+ throw new MockStatusError(403);
+ },
+ '/api/404': () => {
+ throw new MockStatusError(404);
+ },
+ '/api/500': () => {
+ throw new MockStatusError(500);
+ },
+};
diff --git a/_mock/_chart.ts b/_mock/_chart.ts
new file mode 100644
index 00000000..dfb3602a
--- /dev/null
+++ b/_mock/_chart.ts
@@ -0,0 +1,205 @@
+import { format } from 'date-fns';
+import * as Mock from 'mockjs';
+
+// region: mock data
+
+const visitData: any[] = [];
+const beginDay = new Date().getTime();
+
+const fakeY = [7, 5, 4, 2, 4, 7, 5, 6, 5, 9, 6, 3, 1, 5, 3, 6, 5];
+for (let i = 0; i < fakeY.length; i += 1) {
+ visitData.push({
+ x: format(new Date(beginDay + 1000 * 60 * 60 * 24 * i), 'yyyy-MM-dd'),
+ y: fakeY[i],
+ });
+}
+
+const visitData2: any[] = [];
+const fakeY2 = [1, 6, 4, 8, 3, 7, 2];
+for (let i = 0; i < fakeY2.length; i += 1) {
+ visitData2.push({
+ x: format(new Date(beginDay + 1000 * 60 * 60 * 24 * i), 'yyyy-MM-dd'),
+ y: fakeY2[i],
+ });
+}
+
+const salesData: any[] = [];
+for (let i = 0; i < 12; i += 1) {
+ salesData.push({
+ x: `${i + 1}月`,
+ y: Math.floor(Math.random() * 1000) + 200,
+ });
+}
+const searchData: any[] = [];
+for (let i = 0; i < 50; i += 1) {
+ searchData.push({
+ index: i + 1,
+ keyword: `搜索关键词-${i}`,
+ count: Math.floor(Math.random() * 1000),
+ range: Math.floor(Math.random() * 100),
+ status: Math.floor((Math.random() * 10) % 2),
+ });
+}
+const salesTypeData = [
+ {
+ x: '家用电器',
+ y: 4544,
+ },
+ {
+ x: '食用酒水',
+ y: 3321,
+ },
+ {
+ x: '个护健康',
+ y: 3113,
+ },
+ {
+ x: '服饰箱包',
+ y: 2341,
+ },
+ {
+ x: '母婴产品',
+ y: 1231,
+ },
+ {
+ x: '其他',
+ y: 1231,
+ },
+];
+
+const salesTypeDataOnline = [
+ {
+ x: '家用电器',
+ y: 244,
+ },
+ {
+ x: '食用酒水',
+ y: 321,
+ },
+ {
+ x: '个护健康',
+ y: 311,
+ },
+ {
+ x: '服饰箱包',
+ y: 41,
+ },
+ {
+ x: '母婴产品',
+ y: 121,
+ },
+ {
+ x: '其他',
+ y: 111,
+ },
+];
+
+const salesTypeDataOffline = [
+ {
+ x: '家用电器',
+ y: 99,
+ },
+ {
+ x: '个护健康',
+ y: 188,
+ },
+ {
+ x: '服饰箱包',
+ y: 344,
+ },
+ {
+ x: '母婴产品',
+ y: 255,
+ },
+ {
+ x: '其他',
+ y: 65,
+ },
+];
+
+const offlineData: any[] = [];
+for (let i = 0; i < 10; i += 1) {
+ offlineData.push({
+ name: `门店${i}`,
+ cvr: Math.ceil(Math.random() * 9) / 10,
+ });
+}
+const offlineChartData: any[] = [];
+for (let i = 0; i < 20; i += 1) {
+ offlineChartData.push({
+ time: new Date().getTime() + 1000 * 60 * 30 * i,
+ y1: Math.floor(Math.random() * 100) + 10,
+ y2: Math.floor(Math.random() * 100) + 10,
+ });
+}
+
+const radarOriginData = [
+ {
+ name: '个人',
+ ref: 10,
+ koubei: 8,
+ output: 4,
+ contribute: 5,
+ hot: 7,
+ },
+ {
+ name: '团队',
+ ref: 3,
+ koubei: 9,
+ output: 6,
+ contribute: 3,
+ hot: 1,
+ },
+ {
+ name: '部门',
+ ref: 4,
+ koubei: 1,
+ output: 6,
+ contribute: 5,
+ hot: 7,
+ },
+];
+
+//
+const radarData: any[] = [];
+const radarTitleMap: any = {
+ ref: '引用',
+ koubei: '口碑',
+ output: '产量',
+ contribute: '贡献',
+ hot: '热度',
+};
+radarOriginData.forEach((item: any) => {
+ Object.keys(item).forEach((key) => {
+ if (key !== 'name') {
+ radarData.push({
+ name: item.name,
+ label: radarTitleMap[key],
+ value: item[key],
+ });
+ }
+ });
+});
+
+// endregion
+
+export const CHARTS = {
+ '/chart': JSON.parse(
+ JSON.stringify({
+ visitData,
+ visitData2,
+ salesData,
+ searchData,
+ offlineData,
+ offlineChartData,
+ salesTypeData,
+ salesTypeDataOnline,
+ salesTypeDataOffline,
+ radarData,
+ }),
+ ),
+ '/chart/visit': JSON.parse(JSON.stringify(visitData)),
+ '/chart/tags': Mock.mock({
+ 'list|100': [{ name: '@city', 'value|1-100': 150 }],
+ }),
+};
diff --git a/_mock/_file-manager.ts b/_mock/_file-manager.ts
new file mode 100644
index 00000000..a2a835d7
--- /dev/null
+++ b/_mock/_file-manager.ts
@@ -0,0 +1,126 @@
+import { MockRequest, MockStatusError } from '@delon/mock';
+import { deepCopy } from '@delon/util';
+import { Random } from 'mockjs';
+
+import { genMp } from './utils';
+
+interface FileItem {
+ id?: number;
+ parent_id?: number;
+ type?: 'folder' | 'file';
+ title?: string;
+ mp?: string;
+ ext?: string;
+ size?: number;
+ width?: number;
+ height?: number;
+ created?: Date;
+}
+
+let point = 1;
+let DATA: FileItem[] = [];
+DATA = DATA.concat(...genFolds(0, 3), ...genFiles(1, 6), ...genFiles(2, 3), ...genFiles(0, 1, 'zip'), ...genFiles(0, 10));
+
+function genFolds(parent_id: number, count: number): FileItem[] {
+ return new Array(count).fill({}).map(() => {
+ return {
+ id: point++,
+ parent_id,
+ type: 'folder',
+ ext: 'folder',
+ title: Random.ctitle(3, 5),
+ created: new Date()
+ } as FileItem;
+ });
+}
+
+function genFiles(parent_id: number, count: number, ext: string = 'png'): FileItem[] {
+ return new Array(count).fill({}).map(() => {
+ return {
+ id: point++,
+ parent_id,
+ type: 'file',
+ title: `${Random.ctitle(3, 5)}.${ext}`,
+ mp: genMp(),
+ is_img: ext === 'png',
+ ext,
+ size: Random.natural(10, 10000),
+ width: Random.natural(100, 1000),
+ height: Random.natural(100, 1000),
+ created: new Date()
+ } as FileItem;
+ });
+}
+
+function get(params: any): any {
+ let ret = deepCopy(DATA) as FileItem[];
+ const parent_id = +(params.parent_id || '0');
+ ret = ret.filter(data => data.parent_id === parent_id);
+ if (params.type) {
+ ret = ret.filter(data => data.type!.indexOf(params.type) > -1);
+ }
+ if (params.q) {
+ ret = ret.filter(data => data.title!.indexOf(params.q) > -1);
+ }
+ return ret;
+}
+
+function getIdx(id: number): number {
+ id = +id;
+ const idx = DATA.findIndex(w => w.id === id);
+ if (idx === -1) {
+ throw new MockStatusError(404);
+ }
+ return idx;
+}
+
+export const FILES = {
+ '/file/folder': () => deepCopy(DATA).filter((w: any) => w.type === 'folder'),
+ '/file': (req: MockRequest) => {
+ const pi = +(req.queryString.pi || 1);
+ const ps = +(req.queryString.ps || 10);
+ const data = get(req.queryString);
+ return {
+ total: data.length,
+ list: data.slice((pi - 1) * ps, pi * ps)
+ };
+ },
+ 'POST /file': (req: MockRequest) => {
+ const file = req.body.get('file') as File;
+ const parent_id = +req.body.get('parent_id');
+ const item = Object.assign(genFiles(req.body.parent_id, 1)[0], {
+ parent_id,
+ title: file.name,
+ size: file.size
+ });
+ DATA.push(item);
+ return { msg: 'ok', item };
+ },
+ '/file/:id': (req: MockRequest) => {
+ const idx = getIdx(req.params.id || 0);
+ const item = { ...DATA[idx], ...req.body };
+ return item;
+ },
+ 'POST /file/rename': (req: MockRequest) => {
+ const idx = getIdx(req.body.id || 0);
+ DATA[idx].title = req.body.title;
+ return { msg: 'ok', item: DATA[idx] };
+ },
+ 'POST /file/move': (req: MockRequest) => {
+ const idx = getIdx(req.body.id || 0);
+ DATA[idx].parent_id = req.body.moveId;
+ return { msg: 'ok', item: DATA[idx] };
+ },
+ 'POST /file/copy/:id': (req: MockRequest) => {
+ const idx = getIdx(req.params.id || 0);
+ const item = { ...DATA[idx], id: point++ };
+ item.title += ' - Copy';
+ DATA.push(item);
+ return { msg: 'ok', item };
+ },
+ 'DELETE /file/:id': (req: MockRequest) => {
+ const idx = getIdx(req.params.id || 0);
+ DATA.splice(idx, 1);
+ return { msg: 'ok' };
+ }
+};
diff --git a/_mock/_forum.ts b/_mock/_forum.ts
new file mode 100644
index 00000000..a44198f8
--- /dev/null
+++ b/_mock/_forum.ts
@@ -0,0 +1,258 @@
+import { MockRequest, MockStatusError } from '@delon/mock';
+import { deepCopy } from '@delon/util';
+import { Random } from 'mockjs';
+import { genLabel, genMp } from './utils';
+
+let id = 1;
+const CATEGORY = [
+ {
+ id: 1,
+ title: 'General',
+ list: [
+ {
+ id: 1,
+ title: 'Getting started',
+ threads: Random.natural(1, 20),
+ replies: Random.natural(6, 100),
+ last: {
+ id: id++,
+ mp: genMp(),
+ title: Random.title(5, 10),
+ user_name: Random.name(),
+ time: '1d ago',
+ },
+ },
+ {
+ id: 2,
+ title: 'Announcements',
+ threads: Random.natural(1, 20),
+ replies: Random.natural(6, 100),
+ last: {
+ id: id++,
+ mp: genMp(),
+ title: Random.title(5, 10),
+ user_name: Random.name(),
+ time: '1d ago',
+ },
+ },
+ {
+ id: 3,
+ title: 'Guides',
+ threads: Random.natural(1, 20),
+ replies: Random.natural(6, 100),
+ last: {
+ id: id++,
+ mp: genMp(),
+ title: Random.title(5, 10),
+ user_name: Random.name(),
+ time: '1d ago',
+ },
+ },
+ ],
+ },
+ {
+ id: 2,
+ title: 'Shopping',
+ list: [
+ {
+ id: 4,
+ title: 'Guides',
+ threads: Random.natural(1, 20),
+ replies: Random.natural(6, 100),
+ last: {
+ id: id++,
+ mp: genMp(),
+ title: Random.title(5, 10),
+ user_name: Random.name(),
+ time: '1d ago',
+ },
+ },
+ {
+ id: 5,
+ title: 'Payments',
+ threads: Random.natural(1, 20),
+ replies: Random.natural(6, 100),
+ last: {
+ id: id++,
+ mp: genMp(),
+ title: Random.title(5, 10),
+ user_name: Random.name(),
+ time: '1d ago',
+ },
+ },
+ {
+ id: 6,
+ title: 'Products',
+ threads: Random.natural(1, 20),
+ replies: Random.natural(6, 100),
+ last: {
+ id: id++,
+ mp: genMp(),
+ title: Random.title(5, 10),
+ user_name: Random.name(),
+ time: '1d ago',
+ },
+ },
+ {
+ id: 7,
+ title: 'Refund',
+ threads: Random.natural(1, 20),
+ replies: Random.natural(6, 100),
+ last: {
+ id: id++,
+ mp: genMp(),
+ title: Random.title(5, 10),
+ user_name: Random.name(),
+ time: '1d ago',
+ },
+ },
+ ],
+ },
+ {
+ id: 3,
+ title: 'Support',
+ list: [
+ {
+ id: 8,
+ title: 'Common questions',
+ threads: Random.natural(1, 20),
+ replies: Random.natural(6, 100),
+ },
+ {
+ id: 9,
+ title: 'Site issues',
+ threads: Random.natural(1, 20),
+ replies: Random.natural(6, 100),
+ last: {
+ id: id++,
+ mp: genMp(),
+ title: Random.title(5, 10),
+ user_name: Random.name(),
+ time: '1d ago',
+ },
+ },
+ ],
+ },
+];
+
+const THREAD: any[] = new Array(20).fill({}).map((v, idx) => ({
+ id: id++,
+ title: Random.title(5, 10),
+ replies: Random.natural(1, 1000),
+ label: idx % 2 === 0 && Random.boolean() ? genLabel() : null,
+ category_id: Random.natural(1, 9),
+ last: {
+ id: id++,
+ mp: genMp(),
+ title: Random.title(5, 10),
+ user_name: Random.name(),
+ time: '1d ago',
+ },
+}));
+
+const REPLIES: any[] = new Array(20).fill({}).map((v, idx) => ({
+ id: id++,
+ content: Random.paragraph(),
+ user: {
+ name: Random.name(),
+ mp: genMp(),
+ posts: Random.natural(0, 1000),
+ },
+ time: Random.time(),
+ like: Random.natural(0, 100),
+ dislike: Random.natural(0, 10),
+}));
+
+function get(params: any): any {
+ let ret = deepCopy(THREAD);
+ if (params.q) {
+ ret = ret.filter((data: any) => data.name.indexOf(params.q) > -1);
+ }
+ return ret;
+}
+
+function getIdx(itemId: number): number {
+ itemId = +itemId;
+ const idx = THREAD.findIndex((w) => w.id === itemId);
+ if (idx === -1) {
+ throw new MockStatusError(404);
+ }
+ return idx;
+}
+
+function getCate(itemId: number): any {
+ let item: any;
+ const category: any = deepCopy(CATEGORY).find((w: any) => {
+ item = w.list.find((l: any) => l.id === itemId);
+ if (item) {
+ return true;
+ }
+ return false;
+ });
+ delete category.list;
+ return item;
+}
+
+export const FORUMS = {
+ '/forum/category': CATEGORY,
+ '/forum/thread/:id': (req: MockRequest) => {
+ // list
+ const pi = +(req.queryString.pi || 1);
+ const ps = +(req.queryString.ps || 10);
+ const data = get(req.queryString);
+ return {
+ category: getCate(+req.params.id),
+ total: data.length,
+ list: data.slice((pi - 1) * ps, pi * ps),
+ };
+ },
+ '/forum/:id': (req: MockRequest) => {
+ const idx = getIdx(req.params.id || 0);
+ const item = {
+ ...THREAD[idx],
+ time: '3 days ago',
+ like: Random.natural(0, 100),
+ view: Random.natural(0, 10000),
+ user: {
+ name: Random.name(),
+ mp: genMp(),
+ posts: Random.natural(0, 1000),
+ },
+ desc:
+ '
' +
+ new Array(Random.natural(1, 3))
+ .fill('')
+ .map((v) => Random.paragraph())
+ .join('
') +
+ '
',
+ };
+ item.category = getCate(item.category_id);
+ return item;
+ },
+ '/forum/:id/replies': (req: MockRequest) => {
+ const pi = +(req.queryString.pi || 1);
+ const ps = +(req.queryString.ps || 10);
+ return {
+ total: REPLIES.length,
+ list: REPLIES.slice((pi - 1) * ps, pi * ps),
+ };
+ },
+
+ 'POST /forum': (req: MockRequest) => {
+ const itemId = req.body.id || 0;
+ if (itemId > 0) {
+ const idx = getIdx(itemId);
+ THREAD[idx] = { ...THREAD[idx], ...req.body };
+ return { msg: 'ok', item: THREAD[idx] };
+ }
+
+ const item = { ...req.body, id: THREAD.sort((a, b) => b.id - a.id)[0].id + 1 };
+ THREAD.push(item);
+ return { msg: 'ok', item };
+ },
+ 'DELETE /forum/:id': (req: MockRequest) => {
+ const idx = getIdx(req.params.id || 0);
+ THREAD.splice(idx, 1);
+ return { msg: 'ok' };
+ },
+};
diff --git a/_mock/_geo.ts b/_mock/_geo.ts
new file mode 100644
index 00000000..f52cf882
--- /dev/null
+++ b/_mock/_geo.ts
@@ -0,0 +1,76 @@
+import { MockRequest } from '@delon/mock';
+
+const DATA = [
+ {
+ name: '上海',
+ id: '310000',
+ },
+ {
+ name: '市辖区',
+ id: '310100',
+ },
+ {
+ name: '北京',
+ id: '110000',
+ },
+ {
+ name: '市辖区',
+ id: '110100',
+ },
+ {
+ name: '浙江省',
+ id: '330000',
+ },
+ {
+ name: '杭州市',
+ id: '330100',
+ },
+ {
+ name: '宁波市',
+ id: '330200',
+ },
+ {
+ name: '温州市',
+ id: '330300',
+ },
+ {
+ name: '嘉兴市',
+ id: '330400',
+ },
+ {
+ name: '湖州市',
+ id: '330500',
+ },
+ {
+ name: '绍兴市',
+ id: '330600',
+ },
+ {
+ name: '金华市',
+ id: '330700',
+ },
+ {
+ name: '衢州市',
+ id: '330800',
+ },
+ {
+ name: '舟山市',
+ id: '330900',
+ },
+ {
+ name: '台州市',
+ id: '331000',
+ },
+ {
+ name: '丽水市',
+ id: '331100',
+ },
+];
+
+export const GEOS = {
+ '/geo/province': () => DATA.filter(w => w.id.endsWith('0000')),
+ '/geo/:id': (req: MockRequest) => {
+ const pid = (req.params.id || '310000').slice(0, 2);
+ return DATA.filter(w => w.id.slice(0, 2) === pid && !w.id.endsWith('0000'));
+ },
+};
diff --git a/_mock/_img.ts b/_mock/_img.ts
new file mode 100644
index 00000000..2f8ff63a
--- /dev/null
+++ b/_mock/_img.ts
@@ -0,0 +1,103 @@
+import { MockRequest, MockStatusError } from '@delon/mock';
+import { deepCopy } from '@delon/util';
+import { genMp } from './utils';
+
+interface ImgCat {
+ id: number;
+ parent_id: number;
+ title: string;
+}
+interface Img {
+ cat_id: number;
+ id: number;
+ title: string;
+ mp: string;
+ size: number;
+ width: number;
+ height: number;
+ created: Date;
+}
+
+const CAT: ImgCat[] = [
+ { id: 1, parent_id: 0, title: '店铺' },
+ { id: 2, parent_id: 1, title: '产品图' },
+ { id: 3, parent_id: 1, title: '品牌图' },
+ { id: 4, parent_id: 0, title: '营销' },
+ { id: 5, parent_id: 4, title: '双11' },
+ { id: 6, parent_id: 4, title: '日常' },
+ { id: 7, parent_id: 0, title: '其他' },
+];
+const DATA: Img[] = [];
+
+for (let i = 1; i <= 50; i += 1) {
+ DATA.push(gen(i));
+}
+
+function gen(i: number): any {
+ return {
+ cat_id: [1, 2, 3, 4, 5, 6, 7][Math.floor(Math.random() * 10) % 7],
+ id: i * 10000,
+ title: `title ${i}`,
+ mp: genMp(),
+ size: Math.floor(Math.random() * 1000) % 1000,
+ width: Math.floor(Math.random() * 1000) % 1000,
+ height: Math.floor(Math.random() * 1000) % 1000,
+ created: new Date(),
+ };
+}
+
+function get(params: any): any {
+ let ret = deepCopy(DATA);
+ const cat_id = +(params.cat_id || '0');
+ if (cat_id > 0) {
+ ret = ret.filter((data: any) => data.cat_id === cat_id);
+ }
+ if (params.q) {
+ ret = ret.filter((data: any) => data.title.indexOf(params.q) > -1);
+ }
+ return ret;
+}
+
+function getIdx(id: number): number {
+ id = +id;
+ const idx = DATA.findIndex((w) => w.id === id);
+ if (idx === -1) {
+ throw new MockStatusError(404);
+ }
+ return idx;
+}
+
+export const IMGS = {
+ '/img/cat': () => deepCopy(CAT),
+ '/img': (req: MockRequest) => {
+ const pi = +(req.queryString.pi || 1);
+ const ps = +(req.queryString.ps || 10);
+ const data = get(req.queryString);
+ return {
+ total: data.length,
+ list: data.slice((pi - 1) * ps, pi * ps),
+ };
+ },
+ 'POST /img': (req: MockRequest) => {
+ const id = req.body.id || 0;
+ if (id > 0) {
+ const idx = getIdx(id);
+ DATA[idx] = { ...DATA[idx], ...req.body };
+ return { msg: 'ok', item: DATA[idx] };
+ }
+
+ const item = Object.assign(gen(DATA.sort((a, b) => b.id - a.id)[0].id + 1), req.body);
+ DATA.push(item);
+ return { msg: 'ok', item };
+ },
+ '/img/:id': (req: MockRequest) => {
+ const idx = getIdx(req.params.id || 0);
+ const item = { ...DATA[idx], ...req.body };
+ return item;
+ },
+ 'DELETE /img/:id': (req: MockRequest) => {
+ const idx = getIdx(req.params.id || 0);
+ DATA.splice(idx, 1);
+ return { msg: 'ok' };
+ },
+};
diff --git a/_mock/_log.ts b/_mock/_log.ts
new file mode 100644
index 00000000..b65269b3
--- /dev/null
+++ b/_mock/_log.ts
@@ -0,0 +1,62 @@
+import { MockRequest, MockStatusError } from '@delon/mock';
+import { deepCopy } from '@delon/util';
+
+const DATA: any[] = [];
+
+for (let i = 1; i <= 20; i += 1) {
+ DATA.push({
+ id: i,
+ name: 'cms',
+ level: ['error', 'warning', 'info'][Math.floor(Math.random() * 10) % 3],
+ path: `/home/${i}`,
+ title: `未知报告 ${i}`,
+ data: `Uncaught Error: test-${i}\nat :1:7\nat :1:7\nat :1:7`,
+ created: new Date(),
+ });
+}
+
+function getIdx(id: number): number {
+ const idx = DATA.findIndex((w) => w.id === id);
+ if (idx === -1) {
+ throw new MockStatusError(404);
+ }
+ return idx;
+}
+
+function get(params: any): any {
+ let ret = deepCopy(DATA);
+ if (params.q) {
+ ret = ret.filter((data: any) => data.title.indexOf(params.q) > -1);
+ }
+ if (params.level) {
+ ret = ret.filter((data: any) => data.level.indexOf(params.level) > -1);
+ }
+ return ret;
+}
+
+function del(params: any): any {
+ const id = params.id || 0;
+ if (id > 0) {
+ DATA.splice(getIdx(id), 1);
+ } else {
+ get(params).forEach((w: any) => {
+ del({ id: w.id });
+ });
+ }
+}
+
+export const LOGS = {
+ '/log': (req: MockRequest) => {
+ const pi = +(req.queryString.pi || 1);
+ const ps = +(req.queryString.ps || 10);
+ const data = get(req.queryString);
+ return {
+ total: data.length,
+ list: data.slice((pi - 1) * ps, pi * ps),
+ };
+ },
+ 'DELETE /log': (req: MockRequest) => {
+ del(req.queryString);
+ return { msg: 'ok' };
+ },
+};
diff --git a/_mock/_menu.ts b/_mock/_menu.ts
new file mode 100644
index 00000000..a3818413
--- /dev/null
+++ b/_mock/_menu.ts
@@ -0,0 +1,109 @@
+import { MockRequest, MockStatusError } from '@delon/mock';
+import { Menu } from '@delon/theme';
+import { deepCopy } from '@delon/util';
+
+const DATA: Menu[] = [
+ {
+ id: 1,
+ parent_id: 0,
+ text: '主导航',
+ i18n: 'menu.main',
+ group: true,
+ hideInBreadcrumb: true,
+ },
+ {
+ id: 2,
+ parent_id: 1,
+ text: '仪表盘',
+ i18n: 'menu.dashboard',
+ icon: 'dashboard',
+ },
+ {
+ id: 3,
+ parent_id: 2,
+ text: '分析页',
+ link: '/dashboard/analysis',
+ i18n: 'menu.dashboard.analysis',
+ },
+ {
+ id: 4,
+ parent_id: 2,
+ text: '监控页',
+ link: '/dashboard/monitor',
+ i18n: 'menu.dashboard.monitor',
+ },
+ {
+ id: 5,
+ parent_id: 2,
+ text: '工作台',
+ link: '/dashboard/workplace',
+ i18n: 'menu.dashboard.workplace',
+ },
+ {
+ id: 6,
+ parent_id: 0,
+ text: 'Pro',
+ i18n: 'menu.pro',
+ group: true,
+ hideInBreadcrumb: true,
+ },
+ {
+ id: 7,
+ parent_id: 6,
+ text: 'Form Page',
+ i18n: 'menu.form',
+ link: '/pro/form',
+ icon: 'anticon anticon-edit',
+ hideInBreadcrumb: true,
+ },
+ {
+ id: 8,
+ parent_id: 6,
+ text: 'Basic Form',
+ link: '/pro/form/basic-form',
+ i18n: 'menu.form.basicform',
+ shortcut: true,
+ },
+ {
+ id: 9,
+ parent_id: 6,
+ text: 'Step Form',
+ link: '/pro/form/step-form',
+ i18n: 'menu.form.stepform',
+ },
+];
+
+function getIdx(id: number): number {
+ id = +id;
+ const idx = DATA.findIndex((w) => w.id === id);
+ if (idx === -1) {
+ throw new MockStatusError(404);
+ }
+ return idx;
+}
+
+export const MENUS = {
+ '/menus': () => deepCopy(DATA),
+ 'POST /menus': (req: MockRequest) => {
+ const id = req.body.id || 0;
+ if (id > 0) {
+ const idx = getIdx(id);
+ DATA[idx] = { ...DATA[idx], ...req.body };
+ return { msg: 'ok', item: DATA[idx] };
+ }
+
+ const item = { ...req.body, id: DATA.sort((a, b) => b.id - a.id)[0].id + 1 };
+ DATA.push(item);
+ return { msg: 'ok', item };
+ },
+ 'DELETE /menus/:id': (req: MockRequest) => {
+ const idx = getIdx(req.params.id || 0);
+ DATA.splice(idx, 1);
+ return { msg: 'ok' };
+ },
+ 'POST /menus/move': (req: MockRequest) => {
+ const idx = getIdx(req.body.from || 0);
+ DATA[idx].parent_id = req.body.to || 0;
+ return { msg: 'ok', item: DATA[idx] };
+ },
+};
diff --git a/_mock/_other.ts b/_mock/_other.ts
new file mode 100644
index 00000000..bb99bc87
--- /dev/null
+++ b/_mock/_other.ts
@@ -0,0 +1,917 @@
+import { MockRequest, MockStatusError } from '@delon/mock';
+import { deepCopy } from '@delon/util';
+import format from 'date-fns/format';
+import getDaysInMonth from 'date-fns/getDaysInMonth';
+import startOfMonth from 'date-fns/startOfMonth';
+import { Random } from 'mockjs';
+
+import { genArr, genBigMp, genColorName, genData, genLabel, genMp, genName, genTag } from './utils';
+
+let ID = 1;
+const DATA: any = {
+ kanban: null,
+ task: null,
+ email: null,
+ project: null,
+ client: null,
+ contact: null,
+ pricing: null,
+ billing: null,
+ course: null,
+ chat: null,
+ gallery: null,
+ article: null,
+ voting: null,
+ invoice: null,
+ faq: null,
+ calendar: null,
+ quick: null,
+ dd: null
+};
+
+function getIdx(type: string, id: number): number {
+ id = +id;
+ const idx = DATA[type].findIndex((w: any) => w.id === id);
+ if (idx === -1) {
+ throw new MockStatusError(404);
+ }
+ return idx;
+}
+
+function save(type: string, body: any): any {
+ const id = body.id || 0;
+ if (id > 0) {
+ const idx = getIdx(type, id);
+ DATA[type][idx] = { ...DATA[type][idx], ...body };
+ return { msg: 'ok', item: DATA[type][idx], type: 'edit' };
+ }
+
+ const item = { ...body, id: DATA[type].sort((a: any, b: any) => b.id - a.id)[0].id + 1 };
+ (DATA[type] as any[]).splice(0, 0, item);
+ return { msg: 'ok', item, type: 'add' };
+}
+
+function del(type: string, p: any): any {
+ const cid = +(p.cid || '0');
+ let list: any[] = DATA[type];
+ if (cid > 0) {
+ list = DATA[type].find((w: any) => w.id === cid).list;
+ }
+
+ const idx = list.findIndex(w => w.id === p.id);
+ list.splice(idx, 1);
+ return { msg: 'ok' };
+}
+
+function genHtml(): string {
+ return `${new Array(Random.natural(1, 3))
+ .fill('')
+ .map(v => Random.sentence())
+ .join('
')}
`;
+}
+
+function attachements(): any {
+ return new Array(Random.natural(2, 6)).fill({}).map((v, idx) => {
+ const item = {
+ url: Random.url(),
+ type: genArr(['jpg', 'zip', 'pdf']),
+ filename: Random.name(false),
+ size: genArr(['100KB', '980KB', '1.56MB'])
+ };
+ if (item.type === 'jpg') {
+ item.url = genBigMp();
+ }
+ return item;
+ });
+}
+
+function genPage(type: string, queryString: any, qField: string = 'name'): any {
+ const pi = +(queryString.pi || 1);
+ const ps = +(queryString.ps || 10);
+ // data
+ let data = deepCopy(DATA[type]);
+ if (queryString.q) {
+ data = data.filter((data: any) => data[qField].indexOf(queryString.q) > -1);
+ }
+ return {
+ total: data.length,
+ list: data.slice((pi - 1) * ps, pi * ps)
+ };
+}
+
+// #region kanban
+
+function kanbanList(): any {
+ if (DATA.kanban) {
+ return DATA.kanban;
+ }
+ const res: any[] = [
+ {
+ id: 1,
+ title: 'To Do',
+ list: [],
+ color: '#fadb14',
+ icon: 'warning'
+ },
+ { id: 2, title: 'In progress', color: '#1890ff', icon: 'tool', list: [] },
+ { id: 3, title: 'Done', color: '#52c41a', icon: 'check-circle', list: [] },
+ { id: 4, title: 'Gone', color: '#f5222d', icon: 'delete', list: [] }
+ ];
+ for (const i of res) {
+ i.list = new Array(Random.natural(2, 6)).fill({}).map((v, idx) => ({
+ id: idx + 1,
+ title: Random.ctitle(3, 4),
+ content: Random.ctitle(0, 50),
+ attachement: Random.boolean() && Random.boolean() && Random.boolean()
+ }));
+ }
+ // new
+ if (res[0].list.length > 0) {
+ res[0].list[Random.natural(0, res[0].list.length - 1)].label = {
+ color: 'green',
+ text: 'Clients'
+ };
+ }
+ if (res[1].list.length > 0) {
+ res[1].list[Random.natural(0, res[1].list.length - 1)].label = {
+ color: 'red',
+ text: 'Important'
+ };
+ }
+ if (res[2].list.length > 0) {
+ res[2].list[Random.natural(0, res[2].list.length - 1)].label = {
+ color: 'blue',
+ text: 'Other'
+ };
+ }
+ // labels
+ DATA.kanban = res;
+ return res;
+}
+
+// #endregion
+
+// #region task
+
+function taskList(): any {
+ if (DATA.task) {
+ return DATA.task;
+ }
+ const res: any[] = [
+ { id: 1, title: 'Today', list: [] },
+ { id: 2, title: 'Tomorrow', list: [] },
+ { id: 3, title: 'Next week', list: [] }
+ ];
+ for (const i of res) {
+ i.list = new Array(Random.natural(2, 8)).fill({}).map((v, idx) => ({
+ id: idx + 1,
+ title: Random.ctitle(3, 16),
+ due: i.id === 1 && Random.boolean() ? `${Random.natural(1, 59)} ${Random.boolean() ? 'mins' : 'hours'} left` : null
+ }));
+ }
+ // new
+ if (res[0].list.length > 0) {
+ res[0].list[Random.natural(0, res[0].list.length - 1)].label = {
+ color: 'green',
+ text: 'Clients'
+ };
+ }
+ if (res[1].list.length > 0) {
+ res[1].list[Random.natural(0, res[1].list.length - 1)].label = {
+ color: 'red',
+ text: 'Important'
+ };
+ res[0].list[Random.natural(0, res[0].list.length - 1)].done = true;
+ }
+ if (res[2].list.length > 0) {
+ res[2].list[Random.natural(0, res[2].list.length - 1)].label = {
+ color: 'blue',
+ text: 'Other'
+ };
+ res[0].list[Random.natural(0, res[0].list.length - 1)].done = true;
+ }
+ // labels
+ DATA.task = res;
+ return res;
+}
+
+// #endregion
+
+// #region email
+
+function emailList(queryString: any): any {
+ if (DATA.email) {
+ return genPage('email', queryString, 'subject');
+ }
+ const res: any[] = new Array(20).fill({}).map((v, idx) => ({
+ id: ID++,
+ from: Random.email(),
+ from_name: genName(),
+ to: Random.email(),
+ to_name: Random.name(),
+ cc: [Random.email(), Random.email()],
+ subject: Random.title(1, 6),
+ body: Random.paragraph(),
+ read: idx % 2 === 0 && Random.boolean(),
+ star: Random.boolean(),
+ label: genLabel(),
+ attach: idx % 3 === 0 && Random.boolean(),
+ time: `1${Random.boolean() ? 'h' : 'd'} ago`
+ }));
+ // labels
+ DATA.email = res;
+ return genPage('email', queryString, 'subject');
+}
+
+function emailGet(id: number): any {
+ const idx = getIdx('email', id || 0);
+ const item = { ...DATA.email[idx], mp: genMp(), desc: genHtml(), attachements: attachements() };
+ return item;
+}
+// #endregion
+
+// #region project
+
+function projectList(): any {
+ if (DATA.project) {
+ return DATA.project;
+ }
+ const res: any[] = new Array(5).fill({}).map((v, idx) => ({
+ id: idx + 1,
+ title: genArr(['UI update', 'Web Design', 'Pro Design', 'Ng Alain', 'Delon', 'SEO']),
+ status: idx % 2 ? genArr(['active', 'pending', 'complete']) : 'active',
+ task: {
+ process: Random.natural(1, 100),
+ opened: Random.natural(1, 100),
+ completed: Random.natural(1, 100)
+ },
+ remark: Random.title(5, 10),
+ created: Random.date(),
+ deadline: Random.date(),
+ tean: new Array(Random.natural(1, 6)).fill({}).map(() => ({
+ name: genName(),
+ mp: genMp()
+ })),
+ leaders: new Array(Random.natural(1, 2)).fill({}).map(() => ({
+ name: genName(),
+ mp: genMp()
+ })),
+ participants: new Array(Random.natural(1, 6)).fill({}).map(() => ({
+ name: Random.name(),
+ mp: genMp()
+ }))
+ }));
+ // labels
+ DATA.project = res;
+ return res;
+}
+
+function projectGet(id: number): any {
+ const idx = getIdx('project', id || 0);
+ const item = {
+ ...DATA.project[idx],
+ user_name: genName(),
+ desc: genHtml(),
+ attachements: attachements(),
+ tasks: DATA.task,
+ discussions: new Array(Random.natural(3, 8)).fill({}).map((v, idx) => ({
+ id: idx + 1,
+ user_avatar: genMp(),
+ user_name: genName(),
+ time: Random.datetime(),
+ content: Random.paragraph(1, 1)
+ })),
+ activities: new Array(Random.natural(3, 12)).fill({}).map((v, idx) => ({
+ id: idx + 1,
+ user_avatar: genMp(),
+ user_name: genName(),
+ time: Random.datetime(),
+ type: idx % 2 === 0 ? genArr(['add', 'completed', 'assigned']) : 'push',
+ commit: Random.natural(10000, 99999),
+ assigne_name: Random.name(),
+ message: Random.title()
+ }))
+ };
+ return item;
+}
+
+// #endregion
+
+// #region billing
+
+function billingList(queryString: any): any {
+ if (DATA.billing) {
+ return genPage('billing', queryString, 'client');
+ }
+ const res: any[] = new Array(11).fill({}).map((v, idx) => ({
+ id: idx + 1,
+ order: `FR0${Random.natural(10, 99)}`,
+ client: genArr(['Google', 'Alibaba', 'Tencent']),
+ fee: Random.float(0, 9.0),
+ amount: Random.float(0.1, 99999.0),
+ date: Random.now('day'),
+ status: idx % 2 ? genArr(['Completed', 'Pending', 'Rejected']) : 'Completed',
+ auth_code: Random.natural(100000000),
+ address: (Random as any).county(true),
+ first_name: Random.first(),
+ last_name: Random.last(),
+ country: 'China'
+ }));
+ // labels
+ DATA.billing = res;
+ return genPage('billing', queryString, 'client');
+}
+
+function billingGet(id: number): any {
+ const idx = getIdx('billing', id || 0);
+ const item = {
+ ...DATA.billing[idx],
+ messages: new Array(Random.natural(0, 5)).fill({}).map((v, idx) => ({
+ id: idx + 1,
+ time: `${Random.natural(1, 6)} day ago`,
+ message: Random.paragraph(1, 1)
+ }))
+ };
+ return item;
+}
+
+// #endregion
+
+// #region contact
+
+function contactList(queryString: any): any {
+ if (DATA.contact) {
+ return genPage('contact', queryString, 'contact');
+ }
+ const res: any[] = new Array(11).fill({}).map((v, idx) => ({
+ id: idx + 1,
+ mp: genMp(),
+ name: genName(),
+ user_name: Random.name(false),
+ company: Random.title(1, 3),
+ email: Random.email(),
+ tel: Random.natural(10000000000, 16000000000)
+ }));
+ // labels
+ DATA.contact = res;
+ return genPage('contact', queryString, 'company');
+}
+
+// #endregion
+
+// #region pricing
+
+function pricingList(): any {
+ if (DATA.pricing) {
+ return DATA.pricing;
+ }
+ const res: any = {
+ prices: [
+ {
+ id: 1,
+ title: 'Basic',
+ icon: 'shop',
+ mo: 12,
+ yr: 12 * 12,
+ user: 5,
+ project: 5,
+ space: '100GB'
+ },
+ {
+ id: 2,
+ title: 'Company',
+ icon: 'bank',
+ mo: 25,
+ yr: 25 * 12,
+ user: 30,
+ project: 150,
+ space: '300GB'
+ },
+ {
+ id: 3,
+ title: 'Enterprise',
+ icon: 'crown',
+ mo: 50,
+ yr: 50 * 12,
+ user: -1,
+ project: -1,
+ space: '1000GB'
+ }
+ ],
+ faq: [
+ {
+ q: 'Can I cancel at anytime?',
+ a: 'Yes, you can cancel anytime no questions are asked while you cancel but we would highly appreciate if you will give us some feedback.'
+ },
+ {
+ q: 'My team has credits. How do we use them?',
+ a: 'Once your team signs up for a subscription plan. enim eiusmod high life accusamus eoset dignissimos.'
+ },
+ {
+ q: `How does Front's pricing work?`,
+ a: 'Our subscriptions are tiered. based on the number of people enim eiusmod high life accusamus terry richardson ad squid.'
+ },
+ {
+ q: 'How secure is Front?',
+ a: 'Protecting the data you trust to Front is our first priority. at vero eoset dignissimos ducimus qui blanditiis.'
+ },
+ {
+ q: 'Do you offer discounts?',
+ a: `We've built in discounts at each tier for teams. leggings occaecat craft beer farm-to-table. raw denim aesthetic synth nesciunt.`
+ },
+ {
+ q: 'What is your refund policy?',
+ a: 'We do not offer refunds apart leggings occaecat craft beer farm-to-table. raw leggings occaecat craft.'
+ }
+ ]
+ };
+ // labels
+ DATA.pricing = res;
+ return res;
+}
+
+// #endregion
+
+// #region client
+
+function clientList(queryString: any): any {
+ if (DATA.client) {
+ return genPage('client', queryString, 'company');
+ }
+ const res: any[] = new Array(11).fill({}).map((v, idx) => ({
+ id: idx + 1,
+ mp: genMp(),
+ name: genName(),
+ user_name: Random.name(false),
+ company: Random.title(1, 3),
+ email: Random.email(),
+ tel: Random.natural(10000000000, 16000000000),
+ status: idx % 2 ? genArr(['active', 'pending', 'progress']) : 'active'
+ }));
+ // labels
+ DATA.client = res;
+ return genPage('client', queryString, 'company');
+}
+
+function clientGet(id: number): any {
+ const idx = getIdx('client', id || 0);
+ const item = {
+ ...DATA.client[idx],
+ messages: new Array(Random.natural(0, 5)).fill({}).map((v, idx) => ({
+ id: idx + 1,
+ time: `${Random.natural(1, 6)} day ago`,
+ message: Random.paragraph(1, 1)
+ }))
+ };
+ return item;
+}
+
+// #endregion
+
+// #region course
+
+function courseList(queryString: any): any {
+ if (DATA.course) {
+ return genPage('course', queryString, 'title');
+ }
+ const res: any[] = new Array(10).fill({}).map((v, idx) => ({
+ id: idx + 1,
+ mp: genBigMp(),
+ tags: genTag(),
+ price: idx === 0 ? 0 : Random.natural(0, 100),
+ title: Random.title(2, 5),
+ remark: Random.paragraph(1, 1),
+ star: genArr([4, 4.5, 5]),
+ hour: Random.natural(10, 99)
+ }));
+ // labels
+ DATA.course = res;
+ return genPage('course', queryString, 'title');
+}
+
+// #endregion
+
+// #region chat
+
+function chatList(): any {
+ if (DATA.chat) {
+ return DATA.chat;
+ }
+ const res: any = {
+ users: new Array(10).fill({}).map((v, idx) => ({
+ id: idx + 1,
+ mp: genMp(),
+ name: genName(),
+ count: idx % 3 === 0 ? Random.natural(0, 5) : 0,
+ online: idx < 5 ? true : false,
+ unread: Random.boolean() && Random.boolean() ? Random.natural(0, 5) : 0
+ }))
+ };
+ // labels
+ DATA.chat = res;
+ return res;
+}
+
+// #endregion
+
+// #region gallery
+
+function galleryList(): any {
+ if (DATA.gallery) {
+ return DATA.gallery;
+ }
+ const res: any = new Array(16).fill({}).map((v, idx) => ({
+ id: idx + 1,
+ url: genBigMp(),
+ title: Random.title(),
+ type: genArr(['Nature', 'Beach', 'Animal', 'Other'])
+ }));
+ // labels
+ DATA.gallery = res;
+ return res;
+}
+
+// #endregion
+
+// #region article
+
+function articleList(queryString: any): any {
+ if (DATA.article) {
+ return genPage('article', queryString, 'title');
+ }
+ const res: any[] = new Array(11).fill({}).map((v, idx) => ({
+ id: idx + 1,
+ mp: genMp(),
+ name: genName(),
+ title: Random.ctitle(),
+ likes: Random.natural(0, 1000),
+ comments: Random.natural(0, 1000),
+ created: Random.now('day'),
+ status: idx % 2 ? genArr(['Published', 'Draft', 'Deleted']) : 'Published'
+ }));
+ // labels
+ DATA.article = res;
+ return genPage('article', queryString, 'title');
+}
+
+function articleGet(id: number): any {
+ const idx = getIdx('article', id || 0);
+ const item = { ...DATA.article[idx] };
+ return item;
+}
+
+// #endregion
+
+// #region voting
+
+function votingList(queryString: any): any {
+ if (DATA.voting) {
+ return genPage('voting', queryString, 'title');
+ }
+ const res: any[] = new Array(11).fill({}).map((v, idx) => ({
+ id: idx + 1,
+ voting: Random.integer(-10, 10000),
+ title: Random.title(5, 10),
+ content: Random.paragraph(),
+ likes: Random.natural(0, 1000),
+ created: Random.now('day')
+ }));
+ // labels
+ DATA.voting = res;
+ return genPage('voting', queryString, 'title');
+}
+
+function votingSave(req: any): any {
+ const idx = getIdx('voting', req.id || 0);
+ DATA.voting[idx].value += req.voting;
+ return { msg: 'ok', item: DATA.voting[idx] };
+}
+
+// #endregion
+
+// #region voting
+
+function invoice(): any {
+ if (DATA.invoice) {
+ return deepCopy(DATA.invoice);
+ }
+ const res: any = {
+ id: Random.integer(10000, 99999),
+ zone: 'Mountain View, CA 94043 United States',
+ address: '1600 Amphitheatre Parkway',
+ tel: '15900000000, +86 (021) 99999999',
+ date: genData(0),
+ to: {
+ company: 'XXX Company LTD',
+ zone: 'Mountain View, CA 94043 United States',
+ address: '1600 Amphitheatre Parkway',
+ tel: '15900000000, +86 (021) 99999999',
+ email: 'cipchk@qq.com'
+ },
+ payment: {
+ total: 0,
+ bank: 'XXXX Bank',
+ country: 'China',
+ city: 'Shang Hai',
+ address: 'xxx xxxx',
+ code: '012384'
+ },
+ wares: [
+ {
+ id: 1,
+ title: Random.title(),
+ remark: Random.title(),
+ price: +Random.float(0.1, 999).toFixed(2),
+ num: +Random.natural(1, 10)
+ },
+ {
+ id: 2,
+ title: Random.title(),
+ remark: Random.title(),
+ price: +Random.float(0.1, 999).toFixed(2),
+ num: +Random.natural(1, 10)
+ }
+ ],
+ note: Random.paragraph()
+ };
+ // total
+ res.wares.forEach((i: any) => {
+ i.total = +(i.price * i.num).toFixed(2);
+ });
+ res.tax_rate = 0.2;
+ res.total = +(res.wares as any[]).reduce((a, b) => (a += b.total), 0).toFixed(2);
+ res.tax = +(res.total * 0.2).toFixed(2);
+ res.payment_total = +(res.total + res.tax).toFixed(2);
+ DATA.invoice = res;
+
+ return deepCopy(DATA.invoice);
+}
+
+// #endregion
+
+// #region faq
+
+function faq(): any {
+ if (DATA.faq) {
+ return deepCopy(DATA.faq);
+ }
+ DATA.faq = new Array(6).fill({}).map((v, idx) => ({
+ title: `Knowledge ${idx + 1}`,
+ icon: 'question-circle',
+ primary: idx < 3,
+ remark: 'The list of FAQ',
+ children: new Array(Random.natural(3, 6)).fill({}).map((v, idx) => ({
+ active: idx === 0,
+ q: 'What is a product key?',
+ a: genHtml()
+ }))
+ }));
+
+ return deepCopy(DATA.faq);
+}
+
+// #endregion
+
+// #region calendar
+
+function calendar(req: any): any {
+ const cur = new Date(+req.time || new Date());
+ const startDate = startOfMonth(cur);
+ const max = getDaysInMonth(cur);
+ const start = format(startDate, 'yyyy-MM');
+ const now = format(new Date(), 'yyyy-MM-dd');
+ return [
+ {
+ id: 1,
+ title: 'All Day Event',
+ start: `${start}-1`,
+ className: 'fc-event-danger fc-event-fill-warning'
+ },
+ {
+ id: 2,
+ title: 'Reporting',
+ start: `${start}-7T13:30:00`,
+ end: `${start}-7`,
+ className: 'fc-event-success'
+ },
+ {
+ id: 3,
+ title: 'Company Trip',
+ start: `${start}-12`,
+ end: `${start}-14`,
+ className: 'fc-event-primary'
+ },
+ {
+ id: 4,
+ title: 'Product Release',
+ start: `${start}-3`,
+ end: `${start}-5`,
+ className: 'fc-event-light fc-event-fill-primary'
+ },
+ {
+ id: 5,
+ title: 'Repeating Event',
+ start: `${start}-09T16:00:00`,
+ className: 'fc-event-purple'
+ },
+ { id: 6, title: 'Repeating Event', start: `${start}-11T16:00:00` },
+ {
+ id: 7,
+ title: 'Meeting',
+ start: `${now}T10:00:00`,
+ end: `${now}T11:30:00`
+ },
+ { id: 8, title: 'Lunch', start: `${now}T12:00:00` },
+ {
+ id: 9,
+ title: 'Meeting',
+ start: `${now}T14:00:00`,
+ className: 'fc-event-warning'
+ },
+ {
+ id: 10,
+ title: 'Happy Hour',
+ start: `${now}T17:30:00`,
+ className: 'fc-event-success'
+ },
+ {
+ id: 11,
+ title: 'Dinner',
+ start: `${now}T18:30:00`,
+ className: 'fc-event-fill-danger fc-event-light'
+ },
+ {
+ id: 12,
+ title: 'Birthday Party',
+ start: `${now}T21:00:00`,
+ className: 'fc-event-primary'
+ },
+ {
+ id: 13,
+ title: 'Click for Ng Alain',
+ url: 'https://ng-alain.com',
+ start: `${start}-27`,
+ className: 'fc-event-fill-success fc-event-light'
+ },
+ {
+ id: 14,
+ title: 'Repeating Event',
+ start: `${start}-09T08:00:00`,
+ className: 'fc-event-magenta'
+ }
+ ];
+}
+
+// #endregion
+
+// #region quick
+
+function quick(): any {
+ if (DATA.quick) {
+ return deepCopy(DATA.quick);
+ }
+ DATA.quick = {
+ notifications: new Array(6).fill({}).map(() => ({
+ dot: genArr([
+ { icon: 'warning', bg: 'error' },
+ { icon: 'pie-chart', bg: 'primary' },
+ { icon: 'message', bg: 'success' },
+ { icon: 'bell', bg: 'cyan' }
+ ]),
+ content: Random.title(5, 15),
+ time: genArr(['01:01 PM', '09:00 AM', '18:56']),
+ tags: genTag().join(',')
+ })),
+ actions: new Array(6).fill({}).map(() => ({
+ bg: genColorName(),
+ title: Random.title(2, 3),
+ content: Random.title(5, 15)
+ })),
+ settings: {
+ notification: true,
+ audit_log: false,
+ new_order: false,
+ tracking_order: false,
+ reports_order: true,
+ new_customer: true,
+ reporting_customer: true
+ }
+ };
+
+ return deepCopy(DATA.quick);
+}
+
+// #endregion
+
+// #region dd
+
+function ddList(): any {
+ if (DATA.dd) {
+ return DATA.dd;
+ }
+ DATA.dd = [
+ {
+ name: 'total-sales',
+ title: '总数-总销售额',
+ enabled: true,
+ params: { title: '总销售额', total: 100, week: 10, day: 11, daySales: 1000 }
+ },
+ {
+ name: 'total-sales',
+ title: '总数-总订单量',
+ enabled: false,
+ params: { title: '总订单量', total: 5500, week: 320, day: 5, daySales: 5422 }
+ },
+ {
+ name: 'total-sales',
+ title: '总数-总用户量',
+ enabled: false,
+ params: { title: '总用户量', total: 500, week: 80, day: 23, daySales: 6666 }
+ },
+ {
+ name: 'total-sales',
+ title: '总数-其他',
+ enabled: false,
+ params: { title: '其他', total: 200, week: 80, day: 23, daySales: 77777 }
+ },
+ {
+ name: 'visits',
+ title: '访问量',
+ enabled: true,
+ params: { url: '/chart' }
+ },
+ {
+ name: 'effect',
+ title: '访问量',
+ enabled: true,
+ params: { percent: 66, week: 11, day: 23 }
+ },
+ {
+ name: 'gauge',
+ title: '核销率',
+ enabled: true
+ },
+ {
+ name: 'radar',
+ title: '指数',
+ enabled: true,
+ params: { title: '贡献指数', url: '/chart' }
+ },
+ {
+ name: 'activities',
+ title: '动态',
+ enabled: true,
+ params: { title: '动态', url: '/api/activities' }
+ }
+ ];
+ return DATA.dd;
+}
+
+function ddSave(req: any): any {
+ DATA.dd = req;
+ return { msg: 'ok' };
+}
+
+// #endregion
+
+export const OTHERS = {
+ '/kanban-board': kanbanList(),
+ 'DELETE /kanban-board': (req: MockRequest) => del('kanban', req.queryString),
+ '/task': taskList(),
+ 'DELETE /task': (req: MockRequest) => del('task', req.queryString),
+ '/email': (req: MockRequest) => emailList(req.queryString),
+ '/email/:id': (req: MockRequest) => emailGet(+req.params.id),
+ 'DELETE /email': (req: MockRequest) => del('email', req.queryString),
+ '/project': projectList(),
+ '/project/:id': (req: MockRequest) => projectGet(+req.params.id),
+ 'DELETE /project': (req: MockRequest) => del('project', req.queryString),
+ '/client': (req: MockRequest) => clientList(req.queryString),
+ '/client/:id': (req: MockRequest) => clientGet(+req.params.id),
+ '/contact': (req: MockRequest) => contactList(req.queryString),
+ 'DELETE /contact': (req: MockRequest) => del('contact', req.queryString),
+ '/pricing': () => pricingList(),
+ '/billing': (req: MockRequest) => billingList(req.queryString),
+ '/course': (req: MockRequest) => courseList(req.queryString),
+ '/chat': () => chatList(),
+ '/chat/message': () => {
+ const item: any = {
+ type: Random.boolean() && Random.boolean() ? 'image' : 'text',
+ dir: Random.boolean() ? 'left' : 'right'
+ };
+ item.msg = item.type === 'text' ? Random.paragraph(1, 1) : genBigMp();
+ return item;
+ },
+ '/gallery': () => galleryList(),
+ '/article': (req: MockRequest) => articleList(req.queryString),
+ '/article/:id': (req: MockRequest) => articleGet(+req.params.id),
+ 'DELETE /article': (req: MockRequest) => del('article', req.queryString),
+ 'POST /article': (req: MockRequest) => save('article', req.body),
+ '/voting': (req: MockRequest) => votingList(req.queryString),
+ 'POST /voting': (req: MockRequest) => votingSave(req.body),
+ '/invoice': () => invoice(),
+ '/faq': () => faq(),
+ '/calendar': (req: MockRequest) => calendar(req.queryString),
+ '/quick': () => quick(),
+ '/dd': () => ddList(),
+ 'POST /dd': (req: MockRequest) => ddSave(req.body)
+};
diff --git a/_mock/_permission.ts b/_mock/_permission.ts
new file mode 100644
index 00000000..be8b61cb
--- /dev/null
+++ b/_mock/_permission.ts
@@ -0,0 +1,58 @@
+import { MockRequest, MockStatusError } from '@delon/mock';
+import { deepCopy } from '@delon/util';
+
+interface Permission {
+ id: number;
+ parent_id: number;
+ text: string;
+}
+
+export const PermissionData: Permission[] = [
+ { id: 1, parent_id: 0, text: '超级权限' },
+ { id: 2, parent_id: 0, text: '系统' },
+ { id: 3, parent_id: 2, text: '员工' },
+ { id: 4, parent_id: 2, text: '菜单' },
+ { id: 5, parent_id: 2, text: '权限' },
+ { id: 6, parent_id: 0, text: '订单' },
+ { id: 7, parent_id: 6, text: '列表' },
+ { id: 8, parent_id: 6, text: '导入订单' },
+ { id: 9, parent_id: 6, text: '打印快递单' },
+ { id: 10, parent_id: 9, text: '批量打印' },
+ { id: 11, parent_id: 6, text: '发货' },
+ { id: 12, parent_id: 11, text: '批量发货' },
+];
+
+function getIdx(id: number): number {
+ id = +id;
+ const idx = PermissionData.findIndex((w) => w.id === id);
+ if (idx === -1) {
+ throw new MockStatusError(404);
+ }
+ return idx;
+}
+
+export const PERMISSION = {
+ '/permission': () => deepCopy(PermissionData),
+ 'POST /permission': (req: MockRequest) => {
+ const id = req.body.id || 0;
+ if (id > 0) {
+ const idx = getIdx(id);
+ PermissionData[idx] = { ...PermissionData[idx], ...req.body };
+ return { msg: 'ok', item: PermissionData[idx] };
+ }
+
+ const item = { ...req.body, id: PermissionData.sort((a, b) => b.id - a.id)[0].id + 1 };
+ PermissionData.push(item);
+ return { msg: 'ok', item };
+ },
+ 'DELETE /permission/:id': (req: MockRequest) => {
+ const idx = getIdx(req.params.id || 0);
+ PermissionData.splice(idx, 1);
+ return { msg: 'ok' };
+ },
+ 'POST /permission/move': (req: MockRequest) => {
+ const idx = getIdx(req.body.from || 0);
+ PermissionData[idx].parent_id = req.body.to || 0;
+ return { msg: 'ok', item: PermissionData[idx] };
+ },
+};
diff --git a/_mock/_pois.ts b/_mock/_pois.ts
new file mode 100644
index 00000000..ad4c9b01
--- /dev/null
+++ b/_mock/_pois.ts
@@ -0,0 +1,61 @@
+export const POIS = {
+ '/pois': {
+ total: 2,
+ list: [
+ {
+ id: 10000,
+ user_id: 1,
+ name: '测试品牌',
+ branch_name: '测试分店',
+ geo: 310105,
+ country: '中国',
+ province: '上海',
+ city: '上海市',
+ district: '长宁区',
+ address: '中山公园',
+ tel: '15900000000',
+ categories: '美食,粤菜,湛江菜',
+ lng: 121.41707989151003,
+ lat: 31.218656214644792,
+ recommend: '推荐品',
+ special: '特色服务',
+ introduction: '商户简介',
+ open_time: '营业时间',
+ avg_price: 260,
+ reason: null,
+ status: 1,
+ status_str: '待审核',
+ status_wx: 1,
+ modified: 1505826527288,
+ created: 1505826527288,
+ },
+ {
+ id: 10001,
+ user_id: 2,
+ name: '测试品牌2',
+ branch_name: '测试分店2',
+ geo: 310105,
+ country: '中国',
+ province: '上海',
+ city: '上海市',
+ district: '长宁区',
+ address: '中山公园',
+ tel: '15900000000',
+ categories: '美食,粤菜,湛江菜',
+ lng: 121.41707989151003,
+ lat: 31.218656214644792,
+ recommend: '推荐品',
+ special: '特色服务',
+ introduction: '商户简介',
+ open_time: '营业时间',
+ avg_price: 260,
+ reason: null,
+ status: 1,
+ status_str: '待审核',
+ status_wx: 1,
+ modified: 1505826527288,
+ created: 1505826527288,
+ },
+ ],
+ },
+};
diff --git a/_mock/_profile.ts b/_mock/_profile.ts
new file mode 100644
index 00000000..888f5573
--- /dev/null
+++ b/_mock/_profile.ts
@@ -0,0 +1,152 @@
+const basicGoods = [
+ {
+ id: '1234561',
+ name: '矿泉水 550ml',
+ barcode: '12421432143214321',
+ price: '2.00',
+ num: '1',
+ amount: '2.00',
+ },
+ {
+ id: '1234562',
+ name: '凉茶 300ml',
+ barcode: '12421432143214322',
+ price: '3.00',
+ num: '2',
+ amount: '6.00',
+ },
+ {
+ id: '1234563',
+ name: '好吃的薯片',
+ barcode: '12421432143214323',
+ price: '7.00',
+ num: '4',
+ amount: '28.00',
+ },
+ {
+ id: '1234564',
+ name: '特别好吃的蛋卷',
+ barcode: '12421432143214324',
+ price: '8.50',
+ num: '3',
+ amount: '25.50',
+ },
+];
+
+const basicProgress = [
+ {
+ key: '1',
+ time: '2017-10-01 14:10',
+ rate: '联系客户',
+ status: 'processing',
+ operator: '取货员 ID1234',
+ cost: '5mins',
+ },
+ {
+ key: '2',
+ time: '2017-10-01 14:05',
+ rate: '取货员出发',
+ status: 'success',
+ operator: '取货员 ID1234',
+ cost: '1h',
+ },
+ {
+ key: '3',
+ time: '2017-10-01 13:05',
+ rate: '取货员接单',
+ status: 'success',
+ operator: '取货员 ID1234',
+ cost: '5mins',
+ },
+ {
+ key: '4',
+ time: '2017-10-01 13:00',
+ rate: '申请审批通过',
+ status: 'success',
+ operator: '系统',
+ cost: '1h',
+ },
+ {
+ key: '5',
+ time: '2017-10-01 12:00',
+ rate: '发起退货申请',
+ status: 'success',
+ operator: '用户',
+ cost: '5mins',
+ },
+];
+
+const advancedOperation1 = [
+ {
+ key: 'op1',
+ type: '订购关系生效',
+ name: '曲丽丽',
+ status: 'agree',
+ updatedAt: '2017-10-03 19:23:12',
+ memo: '-',
+ },
+ {
+ key: 'op2',
+ type: '财务复审',
+ name: '付小小',
+ status: 'reject',
+ updatedAt: '2017-10-03 19:23:12',
+ memo: '不通过原因',
+ },
+ {
+ key: 'op3',
+ type: '部门初审',
+ name: '周毛毛',
+ status: 'agree',
+ updatedAt: '2017-10-03 19:23:12',
+ memo: '-',
+ },
+ {
+ key: 'op4',
+ type: '提交订单',
+ name: '林东东',
+ status: 'agree',
+ updatedAt: '2017-10-03 19:23:12',
+ memo: '很棒',
+ },
+ {
+ key: 'op5',
+ type: '创建订单',
+ name: '汗牙牙',
+ status: 'agree',
+ updatedAt: '2017-10-03 19:23:12',
+ memo: '-',
+ },
+];
+
+const advancedOperation2 = [
+ {
+ key: 'op1',
+ type: '订购关系生效',
+ name: '曲丽丽',
+ status: 'agree',
+ updatedAt: '2017-10-03 19:23:12',
+ memo: '-',
+ },
+];
+
+const advancedOperation3 = [
+ {
+ key: 'op1',
+ type: '创建订单',
+ name: '汗牙牙',
+ status: 'agree',
+ updatedAt: '2017-10-03 19:23:12',
+ memo: '-',
+ },
+];
+
+export const PROFILES = {
+ 'GET /profile/progress': basicProgress,
+ 'GET /profile/goods': basicGoods,
+ 'GET /profile/advanced': {
+ advancedOperation1,
+ advancedOperation2,
+ advancedOperation3,
+ },
+};
diff --git a/_mock/_role.ts b/_mock/_role.ts
new file mode 100644
index 00000000..84afc1e4
--- /dev/null
+++ b/_mock/_role.ts
@@ -0,0 +1,73 @@
+import { MockRequest, MockStatusError } from '@delon/mock';
+import { deepCopy } from '@delon/util';
+
+interface Permission {
+ id: number;
+ parent_id: number;
+ text: string;
+ permission: number[];
+}
+
+export const RuleData: Permission[] = [
+ { id: 1, parent_id: 0, text: '管理', permission: [1] },
+ { id: 2, parent_id: 0, text: '仓储', permission: [] },
+ { id: 3, parent_id: 0, text: '营销', permission: [] },
+ { id: 4, parent_id: 0, text: '第三方', permission: [7] },
+ {
+ id: 5,
+ parent_id: 2,
+ text: '仓储经理',
+ permission: [6, 7, 8, 9, 10, 11, 12],
+ },
+ { id: 6, parent_id: 2, text: '出库员', permission: [6, 7, 9, 10, 11, 12] },
+ { id: 7, parent_id: 2, text: '入库员', permission: [6, 7] },
+ { id: 8, parent_id: 3, text: '市场经理', permission: [6, 7] },
+ { id: 9, parent_id: 3, text: '销售人员', permission: [6, 7] },
+];
+
+function get(params: any): any {
+ let ret = deepCopy(RuleData);
+ if (params.q) {
+ ret = ret.filter((data: any) => data.text.indexOf(params.q) > -1);
+ }
+ const p = +(params.permission || '0');
+ if (p > 0) {
+ ret = ret.filter((data: any) => data.permission.includes(p));
+ }
+ return ret;
+}
+
+function getIdx(id: number): number {
+ id = +id;
+ const idx = RuleData.findIndex((w) => w.id === id);
+ if (idx === -1) {
+ throw new MockStatusError(404);
+ }
+ return idx;
+}
+
+export const ROLES_PRO = {
+ '/role': (req: MockRequest) => get(req.queryString),
+ 'POST /role': (req: MockRequest) => {
+ const id = req.body.id || 0;
+ if (id > 0) {
+ const idx = getIdx(id);
+ RuleData[idx] = { ...RuleData[idx], ...req.body };
+ return { msg: 'ok', item: RuleData[idx] };
+ }
+
+ const item = { ...req.body, id: RuleData.sort((a, b) => b.id - a.id)[0].id + 1 };
+ RuleData.push(item);
+ return { msg: 'ok', item };
+ },
+ 'DELETE /role/:id': (req: MockRequest) => {
+ const idx = getIdx(req.params.id || 0);
+ RuleData.splice(idx, 1);
+ return { msg: 'ok' };
+ },
+ 'POST /role/move': (req: MockRequest) => {
+ const idx = getIdx(req.body.from || 0);
+ RuleData[idx].parent_id = req.body.to || 0;
+ return { msg: 'ok', item: RuleData[idx] };
+ },
+};
diff --git a/_mock/_rule.ts b/_mock/_rule.ts
new file mode 100644
index 00000000..4a145ba3
--- /dev/null
+++ b/_mock/_rule.ts
@@ -0,0 +1,83 @@
+import { HttpRequest } from '@angular/common/http';
+import { MockRequest } from '@delon/mock';
+
+const list: any[] = [];
+
+for (let i = 0; i < 46; i += 1) {
+ list.push({
+ key: i,
+ disabled: i % 6 === 0,
+ href: 'https://ant.design',
+ avatar: [
+ 'https://gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png',
+ 'https://gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png'
+ ][i % 2],
+ no: `TradeCode ${i}`,
+ title: `一个任务名称 ${i}`,
+ owner: '曲丽丽',
+ description: '这是一段描述',
+ callNo: Math.floor(Math.random() * 1000),
+ status: Math.floor(Math.random() * 10) % 4,
+ updatedAt: new Date(`2017-07-${i < 18 ? '0' + (Math.floor(i / 2) + 1) : Math.floor(i / 2) + 1}`),
+ createdAt: new Date(`2017-07-${i < 18 ? '0' + (Math.floor(i / 2) + 1) : Math.floor(i / 2) + 1}`),
+ progress: Math.ceil(Math.random() * 100)
+ });
+}
+
+function getRule(params: any): any {
+ let ret = [...list];
+ if (params.sorter) {
+ const s = params.sorter.split('_');
+ ret = ret.sort((prev, next) => {
+ if (s[1] === 'descend') {
+ return next[s[0]] - prev[s[0]];
+ }
+ return prev[s[0]] - next[s[0]];
+ });
+ }
+ if (params.statusList && params.statusList.length > 0) {
+ ret = ret.filter(data => params.statusList.indexOf(data.status) > -1);
+ }
+ if (params.no) {
+ ret = ret.filter(data => data.no.indexOf(params.no) > -1);
+ }
+ return { data: { records: ret, total: ret.length }, success: true };
+}
+
+function removeRule(nos: string): any {
+ nos.split(',').forEach(no => {
+ const idx = list.findIndex(w => w.no === no);
+ if (idx !== -1) {
+ list.splice(idx, 1);
+ }
+ });
+
+ return { data: true, success: true };
+}
+
+function saveRule(description: string): void {
+ const i = Math.ceil(Math.random() * 10000);
+ list.unshift({
+ key: i,
+ href: 'https://ant.design',
+ avatar: [
+ 'https://gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png',
+ 'https://gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png'
+ ][i % 2],
+ no: `TradeCode ${i}`,
+ title: `一个任务名称 ${i}`,
+ owner: '曲丽丽',
+ description,
+ callNo: Math.floor(Math.random() * 1000),
+ status: Math.floor(Math.random() * 10) % 2,
+ updatedAt: new Date(),
+ createdAt: new Date(),
+ progress: Math.ceil(Math.random() * 100)
+ });
+}
+
+export const RULES = {
+ 'POST /rule': (req: MockRequest) => getRule(req.queryString),
+ 'POST /delete/rule': (req: MockRequest) => removeRule(req.body.nos)
+ // 'POST /rule': (req: MockRequest) => saveRule(req.body.description)
+};
diff --git a/_mock/_trade.ts b/_mock/_trade.ts
new file mode 100644
index 00000000..6290e476
--- /dev/null
+++ b/_mock/_trade.ts
@@ -0,0 +1,172 @@
+import { MockRequest, MockStatusError } from '@delon/mock';
+import { deepCopy } from '@delon/util';
+import { Random } from 'mockjs';
+
+import { genMp, genName } from './utils';
+
+interface Trade {
+ id: number;
+ buyer_id: number;
+ buyer_nick: string;
+ price: number;
+ discount_fee: number;
+ post_fee: number;
+ payment: number;
+ pay_time?: Date;
+ status: number;
+ status_str: string;
+ logistics_name?: string;
+ logistics_no?: string;
+ finished?: Date;
+ created: Date;
+ wares: TradeWare[];
+ memo?: string;
+ [key: string]: any;
+}
+
+interface TradeWare {
+ ware_id: number;
+ sku_id: number;
+ num: number;
+ price: number;
+ mp: string;
+ title: string;
+}
+
+const DATA: Trade[] = [];
+const STATUS: { [key: string]: string } = {
+ CANCELED: '取消',
+ WAIT_BUYER_PAY: '等待买家付款',
+ WAIT_PAY_CONFIRM: '支付确认中',
+ WAIT_SELLER_STOCK_OUT: '等待出库',
+ WAIT_GOODS_RECEIVE_CONFIRM: '等待确认收货',
+ FINISHED: '交易成功'
+};
+
+for (let i = 1; i <= 30; i += 1) {
+ const buyer_nick = genName();
+ const status: any = Object.keys(STATUS)[Random.natural(0, 5)];
+ let pay_time: Date | null = null;
+ let finished: Date | null = null;
+ if (status !== 'WAIT_BUYER_PAY' || status !== 'CANCELED') {
+ pay_time = new Date();
+ }
+ if (status !== 'FINISHED') {
+ finished = new Date();
+ }
+ const price = Random.natural(100, 10000);
+ const discount_fee = Random.natural(0, 100);
+ const post_fee = Random.natural(6, 20);
+
+ DATA.push({
+ id: 10000 * i,
+ buyer_id: Random.natural(10000, 100000),
+ buyer_nick,
+ buyer_tel: Random.natural(10000000000, 19999999999),
+ buyer_adr: Random.city(true),
+ buyer_message: Random.title(5, 20),
+ price,
+ discount_fee,
+ post_fee,
+ payment: price - discount_fee + post_fee,
+ pay_time,
+ finished,
+ status,
+ status_str: STATUS[status],
+ logistics_name: '',
+ logistics_no: '',
+ created: new Date(),
+ wares: genWare(Random.natural(1, 5))
+ } as any);
+}
+
+function genWare(count: number): TradeWare[] {
+ return new Array(count).fill({}).map((v, idx) => ({
+ ware_id: Random.natural(10000, 10020),
+ sku_id: (idx + 1) * 1000,
+ num: Random.natural(1, 10),
+ price: Random.natural(10, 500),
+ mp: genMp(),
+ title: Random.ctitle(5, 10)
+ }));
+}
+
+function get(params: any): any {
+ let ret = deepCopy(DATA);
+ if (params.sorter) {
+ const s = params.sorter.split('_');
+ ret = ret.sort((prev: any, next: any) => {
+ if (s[1] === 'descend') {
+ return next[s[0]] - prev[s[0]];
+ }
+ return prev[s[0]] - next[s[0]];
+ });
+ }
+ if (params.id) {
+ ret = ret.filter((data: any) => data.id == params.id);
+ }
+ if (params.statusList && params.statusList.length > 0) {
+ ret = ret.filter((data: any) => params.statusList.indexOf(data.status) > -1);
+ }
+ if (params.ware_id) {
+ ret = ret.filter((data: any) => data.wares.find((w: any) => w.ware_id == params.ware_id));
+ }
+ if (params.buyer_nick) {
+ ret = ret.filter((data: any) => data.buyer_nick.indexOf(params.buyer_nick) > -1);
+ }
+ return ret;
+}
+
+function getIdx(id: number): number {
+ id = +id;
+ const idx = DATA.findIndex(w => w.id === id);
+ if (idx === -1) {
+ throw new MockStatusError(404);
+ }
+ return idx;
+}
+
+export const TRADES = {
+ '/trade': (req: MockRequest) => {
+ const pi = +(req.queryString.pi || 1);
+ const ps = +(req.queryString.ps || 10);
+ const data = get(req.queryString);
+ return {
+ total: data.length,
+ list: data.slice((pi - 1) * ps, pi * ps)
+ };
+ },
+ 'POST /trade': (req: MockRequest) => {
+ const id = req.body.id || 0;
+ if (id > 0) {
+ const idx = getIdx(id);
+ DATA[idx] = { ...DATA[idx], ...req.body };
+ return { msg: 'ok', item: DATA[idx] };
+ }
+
+ const item = { ...req.body, id: DATA.sort((a, b) => b.id - a.id)[0].id + 1 };
+ DATA.push(item);
+ return { msg: 'ok', item };
+ },
+ '/trade/:id': (req: MockRequest) => {
+ const idx = getIdx(req.params.id || 0);
+ const item = { ...DATA[idx] };
+ return item;
+ },
+ 'DELETE /trade/:id': (req: MockRequest) => {
+ const idx = getIdx(req.params.id || 0);
+ DATA.splice(idx, 1);
+ return { msg: 'ok' };
+ },
+ 'POST /trade/status': (req: MockRequest) => {
+ const idx = getIdx(req.body.id || 0);
+ DATA[idx].status = req.body.status;
+ DATA[idx].status_str = STATUS[req.body.status];
+ return { msg: 'ok', item: DATA[idx] };
+ },
+ 'POST /trade/memo': (req: MockRequest) => {
+ const idx = getIdx(req.body.id || 0);
+ DATA[idx].memo = req.body.memo;
+ return { msg: 'ok', item: DATA[idx] };
+ }
+};
diff --git a/_mock/_user-pro.ts b/_mock/_user-pro.ts
new file mode 100644
index 00000000..3909efb4
--- /dev/null
+++ b/_mock/_user-pro.ts
@@ -0,0 +1,91 @@
+import { MockRequest, MockStatusError } from '@delon/mock';
+import { deepCopy } from '@delon/util';
+import { Random } from 'mockjs';
+import { genName } from './utils';
+import { RuleData } from './_role';
+
+interface UserPro {
+ id: number;
+ name: string;
+ userName: string;
+ email: string;
+ verified: boolean;
+ status: 'active' | 'banned' | 'deleted';
+ role?: any;
+ permission?: any[];
+ created: Date;
+}
+
+const DATA: UserPro[] = [];
+
+for (let i = 1; i <= 20; i += 1) {
+ const name = genName();
+ DATA.push({
+ id: i,
+ name,
+ userName: `user name ${i}`,
+ email: `${name}` + ['@qq.com', '@gmail.com', '@163.com'][Math.floor(Math.random() * 10) % 3],
+ verified: [true, false][Math.floor(Math.random() * 10) % 2],
+ status: ['active', 'banned', 'deleted'][Math.floor(Math.random() * 10) % 3] as any,
+ role: deepCopy(RuleData[Random.natural(0, RuleData.length - 1)]),
+ permission: [],
+ created: new Date(),
+ });
+}
+
+function get(params: any): any {
+ let ret = deepCopy(DATA);
+ if (params.q) {
+ ret = ret.filter((data: any) => data.name.indexOf(params.q) > -1);
+ }
+ if (params.email) {
+ ret = ret.filter((data: any) => data.email.indexOf(params.email) > -1);
+ }
+ return ret;
+}
+
+function getIdx(id: number): number {
+ id = +id;
+ const idx = DATA.findIndex((w) => w.id === id);
+ if (idx === -1) {
+ throw new MockStatusError(404);
+ }
+ return idx;
+}
+
+export const USERS_PRO = {
+ '/user-pro': (req: MockRequest) => {
+ const pi = +(req.queryString.pi || 1);
+ const ps = +(req.queryString.ps || 10);
+ const data = get(req.queryString);
+ return {
+ total: data.length,
+ list: data.slice((pi - 1) * ps, pi * ps),
+ };
+ },
+ 'POST /user-pro': (req: MockRequest) => {
+ const id = req.body.id || 0;
+ // fix role data
+ req.body.role = RuleData.find((w) => w.id === req.body.role.id);
+
+ if (id > 0) {
+ const idx = getIdx(id);
+ DATA[idx] = { ...DATA[idx], ...req.body };
+ return { msg: 'ok', item: DATA[idx] };
+ }
+
+ const item = { ...req.body, id: DATA.sort((a, b) => b.id - a.id)[0].id + 1 };
+ DATA.push(item);
+ return { msg: 'ok', item };
+ },
+ '/user-pro/:id': (req: MockRequest) => {
+ const idx = getIdx(req.params.id || 0);
+ const item = { ...DATA[idx], ...req.body };
+ return item;
+ },
+ 'DELETE /user-pro/:id': (req: MockRequest) => {
+ const idx = getIdx(req.params.id || 0);
+ DATA.splice(idx, 1);
+ return { msg: 'ok' };
+ },
+};
diff --git a/_mock/_user.ts b/_mock/_user.ts
new file mode 100644
index 00000000..386ffd1b
--- /dev/null
+++ b/_mock/_user.ts
@@ -0,0 +1,122 @@
+import { MockRequest } from '@delon/mock';
+
+const list: any[] = [];
+const total = 50;
+
+for (let i = 0; i < total; i += 1) {
+ list.push({
+ id: i + 1,
+ disabled: i % 6 === 0,
+ href: 'https://ant.design',
+ avatar: [
+ 'https://gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png',
+ 'https://gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png',
+ ][i % 2],
+ no: `TradeCode ${i}`,
+ title: `一个任务名称 ${i}`,
+ owner: '曲丽丽',
+ description: '这是一段描述',
+ callNo: Math.floor(Math.random() * 1000),
+ status: Math.floor(Math.random() * 10) % 4,
+ updatedAt: new Date(`2017-07-${Math.floor(i / 2) + 1}`),
+ createdAt: new Date(`2017-07-${Math.floor(i / 2) + 1}`),
+ progress: Math.ceil(Math.random() * 100),
+ });
+}
+
+function genData(params: any): { total: number; list: any[] } {
+ let ret = [...list];
+ const pi = +params.pi;
+ const ps = +params.ps;
+ const start = (pi - 1) * ps;
+
+ if (params.no) {
+ ret = ret.filter((data) => data.no.indexOf(params.no) > -1);
+ }
+
+ return { total: ret.length, list: ret.slice(start, ps * pi) };
+}
+
+function saveData(id: number, value: any): { msg: string } {
+ const item = list.find((w) => w.id === id);
+ if (!item) {
+ return { msg: '无效用户信息' };
+ }
+ Object.assign(item, value);
+ return { msg: 'ok' };
+}
+
+export const USERS = {
+ '/user': (req: MockRequest) => genData(req.queryString),
+ '/user/:id': (req: MockRequest) => list.find((w) => w.id === +req.params.id),
+ 'POST /user/:id': (req: MockRequest) => saveData(+req.params.id, req.body),
+ '/user/current': {
+ name: 'Cipchk',
+ avatar: 'https://gw.alipayobjects.com/zos/rmsportal/BiazfanxmamNRoxxVxka.png',
+ userid: '00000001',
+ email: 'cipchk@qq.com',
+ signature: '海纳百川,有容乃大',
+ title: '交互专家',
+ group: '蚂蚁金服-某某某事业群-某某平台部-某某技术部-UED',
+ tags: [
+ {
+ key: '0',
+ label: '很有想法的',
+ },
+ {
+ key: '1',
+ label: '专注撩妹',
+ },
+ {
+ key: '2',
+ label: '帅~',
+ },
+ {
+ key: '3',
+ label: '通吃',
+ },
+ {
+ key: '4',
+ label: '专职后端',
+ },
+ {
+ key: '5',
+ label: '海纳百川',
+ },
+ ],
+ notifyCount: 12,
+ country: 'China',
+ geographic: {
+ province: {
+ label: '上海',
+ key: '330000',
+ },
+ city: {
+ label: '市辖区',
+ key: '330100',
+ },
+ },
+ address: 'XX区XXX路 XX 号',
+ phone: '你猜-你猜你猜猜猜',
+ },
+ 'POST /user/avatar': 'ok',
+ 'POST /login/account': (req: MockRequest) => {
+ const data = req.body;
+ if (!(data.userName === 'admin' || data.userName === 'user') || data.password !== 'ng-alain.com') {
+ return { msg: `Invalid username or password(admin/ng-alain.com)` };
+ }
+ return {
+ msg: 'ok',
+ user: {
+ token: '123456789',
+ name: data.userName,
+ email: `${data.userName}@qq.com`,
+ id: 10000,
+ time: +new Date(),
+ },
+ };
+ },
+ 'POST /register': {
+ msg: 'ok',
+ },
+};
diff --git a/_mock/_ware.ts b/_mock/_ware.ts
new file mode 100644
index 00000000..e52d4fdb
--- /dev/null
+++ b/_mock/_ware.ts
@@ -0,0 +1,163 @@
+import { MockRequest, MockStatusError } from '@delon/mock';
+import { deepCopy } from '@delon/util';
+import { genMp } from './utils';
+
+interface UserPro {
+ cid: number;
+ cname: string;
+ id: number;
+ name: string;
+ mp: string;
+ stock: number;
+ outer_id: string;
+ market_price: number;
+ price: number;
+ sale_num: number;
+ status: string;
+ modified: Date;
+ [key: string]: any;
+}
+
+const DATA: UserPro[] = [];
+
+for (let i = 1; i <= 20; i += 1) {
+ const name = ['HUAWEI Mate 20 Pro', '小米MAX3', 'IPhone X', 'Gree 8,000 BTU Portable Air Conditioner'][
+ Math.floor(Math.random() * 10) % 4
+ ];
+ DATA.push({
+ cid: i * 1000,
+ cname: '',
+ id: i + 10000,
+ name,
+ mp: genMp(),
+ stock: Math.floor(Math.random() * 1000) % 1000,
+ outer_id: `S50-${Math.floor(Math.random() * 100) % 100}`,
+ market_price: Math.floor(Math.random() * 1000) % 1000,
+ price: Math.floor(Math.random() * 1000) % 1000,
+ sale_num: Math.floor(Math.random() * 200) % 200,
+ modified: new Date(),
+ status: ['CUSTORMER_DOWN', 'ON_SALE', 'AUDIT_AWAIT', 'DELETED'][Math.floor(Math.random() * 10) % 4],
+ brand: 1,
+ place: 1,
+ });
+}
+
+function get(params: any): any {
+ let ret = deepCopy(DATA);
+ if (params.q) {
+ ret = ret.filter((data: any) => data.name.indexOf(params.q) > -1);
+ }
+ if (params.email) {
+ ret = ret.filter((data: any) => data.email.indexOf(params.email) > -1);
+ }
+ return ret;
+}
+
+function getIdx(id: number): number {
+ id = +id;
+ const idx = DATA.findIndex((w) => w.id === id);
+ if (idx === -1) {
+ throw new MockStatusError(404);
+ }
+ return idx;
+}
+
+export const WARES = {
+ '/ware': (req: MockRequest) => {
+ const pi = +(req.queryString.pi || 1);
+ const ps = +(req.queryString.ps || 10);
+ const data = get(req.queryString);
+ return {
+ total: data.length,
+ list: data.slice((pi - 1) * ps, pi * ps),
+ };
+ },
+ 'POST /ware': (req: MockRequest) => {
+ const id = req.body.id || 0;
+ if (id > 0) {
+ const idx = getIdx(id);
+ DATA[idx] = { ...DATA[idx], ...req.body };
+ return { msg: 'ok', item: DATA[idx] };
+ }
+
+ const item = { ...req.body, id: DATA.sort((a, b) => b.id - a.id)[0].id + 1 };
+ DATA.push(item);
+ return { msg: 'ok', item };
+ },
+ '/ware/:id': (req: MockRequest) => {
+ const idx = getIdx(req.params.id || 0);
+ const item = {
+ id: 0,
+ brand: 1,
+ is_7return: true,
+ prop: {
+ 1: '是',
+ 2: '24天',
+ 3: '0.5克',
+ },
+ place: 1,
+ weight: 10,
+ skus: [
+ {
+ id: 10001,
+ attributes: '1:10',
+ names: [`红色`, `S`],
+ price: 1000,
+ stock: 10,
+ },
+ {
+ id: 10002,
+ attributes: '1:11',
+ names: [`红色`, `M`],
+ price: 1000,
+ stock: 11,
+ },
+ {
+ id: 10003,
+ attributes: '3:10',
+ names: [`蓝色1`, `S`],
+ price: 1000,
+ stock: 12,
+ },
+ {
+ id: 10004,
+ attributes: '3:11',
+ names: [`蓝色1`, `M`],
+ price: 1000,
+ stock: 13,
+ },
+ ],
+ imgs: {
+ 0: ['https://randomuser.me/api/portraits/lego/0.jpg'],
+ 1: ['https://randomuser.me/api/portraits/lego/1.jpg'],
+ 3: ['https://randomuser.me/api/portraits/lego/3.jpg'],
+ },
+ desc: `Test
`,
+ ...(DATA[idx] as any),
+ };
+ return item;
+ },
+ 'DELETE /ware/:id': (req: MockRequest) => {
+ const idx = getIdx(req.params.id || 0);
+ DATA.splice(idx, 1);
+ return { msg: 'ok' };
+ },
+ 'POST /ware/status': (req: MockRequest) => {
+ const idx = getIdx(req.body.id || 0);
+ const item = DATA[idx];
+ item.status = req.body.status;
+ return { msg: 'ok', item };
+ },
+ '/ware/cat': [
+ { id: 1, name: '颜色', value: '红色', color: '#f5222d', type: 'color' },
+ { id: 2, name: '颜色', value: '绿色', color: '#a0d911', type: 'color' },
+ { id: 3, name: '颜色', value: '蓝色', color: '#1890ff', type: 'color' },
+ { id: 4, name: '颜色', value: '洋红', color: '#eb2f96', type: 'color' },
+ { id: 10, name: '尺寸', value: 'S', type: 'size' },
+ { id: 11, name: '尺寸', value: 'M', type: 'size' },
+ { id: 12, name: '尺寸', value: 'L', type: 'size' },
+ { id: 13, name: '尺寸', value: 'XL', type: 'size' },
+ { id: 14, name: '尺寸', value: 'XXL', type: 'size' },
+ { id: 15, name: '尺寸', value: 'XXXL', type: 'size' },
+ ],
+};
diff --git a/_mock/index.ts b/_mock/index.ts
new file mode 100644
index 00000000..69e1167a
--- /dev/null
+++ b/_mock/index.ts
@@ -0,0 +1,21 @@
+export * from './_profile';
+export * from './_rule';
+export * from './_api';
+export * from './_chart';
+export * from './_pois';
+export * from './_user';
+export * from './_geo';
+
+export * from './_file-manager';
+export * from './_img';
+export * from './_log';
+export * from './_menu';
+export * from './_permission';
+export * from './_role';
+export * from './_user-pro';
+export * from './utils';
+
+export * from './_forum';
+export * from './_other';
+export * from './_trade';
+export * from './_ware';
diff --git a/_mock/utils.ts b/_mock/utils.ts
new file mode 100644
index 00000000..71a98721
--- /dev/null
+++ b/_mock/utils.ts
@@ -0,0 +1,160 @@
+import addDays from 'date-fns/addDays';
+import format from 'date-fns/format';
+import { Random } from 'mockjs';
+
+export const COLOR_NAMES = ['red', 'volcano', 'orange', 'gold', 'yellow', 'lime', 'green', 'cyan', 'blue', 'geekblue', 'purple', 'magenta'];
+
+export function genName(): any {
+ return genArr(['asdf', 'cipchk', '卡色']);
+}
+
+export function genProvince(): any {
+ return genArr([
+ '台湾',
+ '河北',
+ '山西',
+ '内蒙古',
+ '辽宁',
+ '吉林',
+ '黑龙江',
+ '江苏',
+ '浙江',
+ '安徽',
+ '福建',
+ '江西',
+ '山东',
+ '河南',
+ '湖北',
+ '湖南',
+ '广东',
+ '广西',
+ '海南',
+ '四川',
+ '贵州',
+ '云南',
+ '西藏',
+ '陕西',
+ '甘肃',
+ '青海',
+ '宁夏',
+ '新疆',
+ '北京',
+ '天津',
+ '上海',
+ '重庆',
+ '香港',
+ '澳门',
+ ]);
+}
+
+export function genArr(arr: any[], count: number = 1): any {
+ if (count === 1) {
+ return arr[Random.natural(0, arr.length - 1)];
+ }
+ return new Array(count <= -1 ? Random.natural(0, -count) : count).fill({}).map(() => {
+ return arr[Random.natural(0, arr.length - 1)];
+ });
+}
+
+export function genColorName(): any {
+ return genArr(COLOR_NAMES);
+}
+
+export function genLabel(): any {
+ return genArr([
+ {
+ color: 'green',
+ text: 'Clients',
+ },
+ {
+ color: 'red',
+ text: 'Important',
+ },
+ {
+ color: 'blue',
+ text: 'Other',
+ },
+ ]);
+}
+
+/** 生成头像,`id` 只能0-8 */
+export function genMp(id?: number): string {
+ return `https://randomuser.me/api/portraits/lego/${typeof id === 'undefined' ? Random.natural(0, 8) : id}.jpg`;
+}
+
+export function genBigMp(): string {
+ return `./assets/tmp/img-big/${Random.natural(1, 8)}.jpg`;
+}
+
+export function genTag(num: number = -3): any {
+ return genArr(['Angular', 'Node', 'HTML5', 'Less', 'Db', 'Python', 'Go'], num);
+}
+
+export function addDate(days: number): Date {
+ return addDays(new Date(), days);
+}
+
+export function genData(days: number, dateFormat: string = 'yyyy-MM-dd'): string {
+ return format(addDate(days), dateFormat);
+}
+
+export function rudeCopy(obj: any): string {
+ return JSON.parse(JSON.stringify(obj));
+}
+
+export function genContent(): string {
+ return `
+ 主标题
+ 次标题
+ 段落,${Random.cparagraph(1, 1)}
+
段落,${Random.paragraph(1, 1)}
+
列表
+
+ -
+
段落,${Random.paragraph(1, 1)}
+
+
+ -
+
段落,${Random.paragraph(1, 1)}
+
+ -
+
段落,${Random.paragraph(1, 1)}
+
+
+ 图像
+ })
+ 表格
+
+
+
+ | 列 |
+ 列 |
+ 列 |
+
+
+
+
+ | 列 |
+ 列 |
+ 列 |
+
+
+ | 列 |
+ 列 |
+ 列 |
+
+
+ | 列 |
+ 列 |
+ 列 |
+
+
+
+ `;
+}
diff --git a/angular.json b/angular.json
new file mode 100644
index 00000000..8bf0b9cb
--- /dev/null
+++ b/angular.json
@@ -0,0 +1,179 @@
+{
+ "$schema": "./node_modules/@angular/cli/lib/config/schema.json",
+ "cli": {
+ "analytics": "0398a482-260e-4ce3-b33e-91ecf55f0703"
+ },
+ "version": 1,
+ "newProjectRoot": "projects",
+ "projects": {
+ "ng-alain": {
+ "projectType": "application",
+ "root": "",
+ "sourceRoot": "src",
+ "prefix": "app",
+ "schematics": {
+ "@schematics/angular:component": {
+ "style": "less"
+ },
+ "@schematics/angular:application": {
+ "strict": true
+ }
+ },
+ "architect": {
+ "build": {
+ "builder": "@angular-devkit/build-angular:browser",
+ "options": {
+ "outputPath": "dist",
+ "index": "src/index.html",
+ "main": "src/main.ts",
+ "tsConfig": "tsconfig.app.json",
+ "polyfills": "src/polyfills.ts",
+ "assets": [
+ "src/assets",
+ "src/favicon.ico"
+ ],
+ "styles": [
+ "node_modules/perfect-scrollbar/css/perfect-scrollbar.css",
+ "node_modules/quill/dist/quill.snow.css",
+ "src/styles.less",
+ {
+ "input": "src/styles/default.less",
+ "bundleName": "default",
+ "inject": false
+ },
+ {
+ "input": "src/styles/compact.less",
+ "bundleName": "compact",
+ "inject": false
+ }
+ ],
+
+ "scripts": [
+ "node_modules/quill/dist/quill.min.js",
+ "node_modules/perfect-scrollbar/dist/perfect-scrollbar.js",
+ "node_modules/qrious/dist/qrious.min.js"
+ ],
+ "allowedCommonJsDependencies": [
+ "ajv",
+ "ajv-formats"
+ ]
+ },
+ "configurations": {
+ "production": {
+ "fileReplacements": [{
+ "replace": "src/environments/environment.ts",
+ "with": "src/environments/environment.prod.ts"
+ }],
+ "outputHashing": "all",
+ "budgets": [{
+ "type": "initial",
+ "maximumWarning": "4mb",
+ "maximumError": "10mb"
+ }]
+ },
+ "dev": {
+ "fileReplacements": [{
+ "replace": "src/environments/environment.ts",
+ "with": "src/environments/eascs/environment.dev.ts"
+ }],
+ "outputHashing": "all",
+ "budgets": [{
+ "type": "initial",
+ "maximumWarning": "4mb",
+ "maximumError": "10mb"
+ }]
+ },
+ "test": {
+ "fileReplacements": [{
+ "replace": "src/environments/environment.ts",
+ "with": "src/environments/eascs/environment.test.ts"
+ }],
+ "outputHashing": "all",
+ "budgets": [{
+ "type": "initial",
+ "maximumWarning": "4mb",
+ "maximumError": "10mb"
+ }]
+ },
+ "development": {
+ "buildOptimizer": false,
+ "optimization": false,
+ "vendorChunk": true,
+ "extractLicenses": false,
+ "sourceMap": true,
+ "namedChunks": true
+ }
+ },
+ "defaultConfiguration": "production"
+ },
+ "serve": {
+ "builder": "@angular-devkit/build-angular:dev-server",
+ "options": {
+ "browserTarget": "ng-alain:build",
+ "proxyConfig": "proxy.conf.js"
+ },
+ "configurations": {
+ "production": {
+ "browserTarget": "ng-alain:build:production"
+ },
+ "dev": {
+ "browserTarget": "app:build:dev"
+ },
+ "development": {
+ "browserTarget": "ng-alain:build:development"
+ }
+ },
+ "defaultConfiguration": "development"
+ },
+ "extract-i18n": {
+ "builder": "@angular-devkit/build-angular:extract-i18n",
+ "options": {
+ "browserTarget": "ng-alain:build"
+ }
+ },
+ "test": {
+ "builder": "@angular-devkit/build-angular:karma",
+ "options": {
+ "main": "src/test.ts",
+ "polyfills": "src/polyfills.ts",
+ "karmaConfig": "karma.conf.js",
+ "tsConfig": "tsconfig.spec.json",
+ "scripts": [
+ "node_modules/quill/dist/quill.min.js",
+ "node_modules/perfect-scrollbar/dist/perfect-scrollbar.js"
+ ],
+ "styles": [],
+ "assets": [
+ "src/assets"
+ ]
+ }
+ },
+ "lint": {
+ "builder": "@angular-eslint/builder:lint",
+ "options": {
+ "lintFilePatterns": [
+ "src/**/*.ts",
+ "src/**/*.html"
+ ]
+ }
+ },
+ "e2e": {
+ "builder": "@angular-devkit/build-angular:protractor",
+ "options": {
+ "protractorConfig": "e2e/protractor.conf.js",
+ "devServerTarget": "ng-alain:serve"
+ },
+ "configurations": {
+ "production": {
+ "devServerTarget": "ng-alain:serve:production"
+ },
+ "dev": {
+ "devServerTarget": "app:build:dev"
+ }
+ }
+ }
+ }
+ }
+ },
+ "defaultProject": "ng-alain"
+}
diff --git a/e2e/protractor.conf.js b/e2e/protractor.conf.js
new file mode 100644
index 00000000..73e4e680
--- /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 00000000..df95215f
--- /dev/null
+++ b/e2e/src/app.e2e-spec.ts
@@ -0,0 +1,28 @@
+import { browser, logging } from 'protractor';
+import { AppPage } from './app.po';
+
+describe('workspace-project App', () => {
+ let page: AppPage;
+
+ beforeEach(() => {
+ page = new AppPage();
+ });
+
+ it('should display welcome message', () => {
+ page.navigateTo();
+ expect(page.getTitleText()).toEqual('Welcome to ng8!');
+ });
+
+ 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 00000000..08b20ffd
--- /dev/null
+++ b/e2e/src/app.po.ts
@@ -0,0 +1,11 @@
+import { browser, by, element } from 'protractor';
+
+export class AppPage {
+ navigateTo(): Promise {
+ return browser.get(browser.baseUrl) as Promise;
+ }
+
+ getTitleText(): Promise {
+ return element(by.css('app-root h1')).getText() as Promise;
+ }
+}
diff --git a/e2e/tsconfig.json b/e2e/tsconfig.json
new file mode 100644
index 00000000..eddd492c
--- /dev/null
+++ b/e2e/tsconfig.json
@@ -0,0 +1,10 @@
+/* To learn more about this file see: https://angular.io/config/tsconfig. */
+{
+ "extends": "../tsconfig.json",
+ "compilerOptions": {
+ "outDir": "../out-tsc/e2e",
+ "module": "commonjs",
+ "target": "es2018",
+ "types": ["jasmine", "jasminewd2", "node"]
+ }
+}
diff --git a/karma.conf.js b/karma.conf.js
new file mode 100644
index 00000000..224f06eb
--- /dev/null
+++ b/karma.conf.js
@@ -0,0 +1,38 @@
+// 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'),
+ reports: ['html', 'lcovonly', 'text-summary'],
+ fixWebpackSourcePaths: true
+ },
+ reporters: ['progress', 'kjhtml'],
+ port: 9876,
+ colors: true,
+ logLevel: config.LOG_INFO,
+ autoWatch: true,
+ browsers: ['Chrome'],
+ customLaunchers: {
+ ChromeHeadlessCI: {
+ base: 'ChromeHeadless',
+ flags: ['--no-sandbox']
+ }
+ },
+ singleRun: false,
+ restartOnFileChange: true
+ });
+};
diff --git a/ng-alain.json b/ng-alain.json
new file mode 100644
index 00000000..2aecd66e
--- /dev/null
+++ b/ng-alain.json
@@ -0,0 +1,17 @@
+{
+ "$schema": "./node_modules/ng-alain/schema.json",
+ "theme": {
+ "additionalThemeVars": [
+ "./src/app/layout/pro/styles/theme-#NAME#.less",
+ "./src/styles/fix/theme-#NAME#.less"
+ ],
+ "list": [
+ {
+ "theme": "dark"
+ },
+ {
+ "theme": "compact"
+ }
+ ]
+ }
+}
diff --git a/package-lock.json b/package-lock.json
new file mode 100644
index 00000000..93e9c26a
--- /dev/null
+++ b/package-lock.json
@@ -0,0 +1,24327 @@
+{
+ "name": "tms-obc-web",
+ "version": "0.0.0",
+ "lockfileVersion": 1,
+ "requires": true,
+ "dependencies": {
+ "@agm/core": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmmirror.com/@agm/core/download/@agm/core-1.1.0.tgz",
+ "integrity": "sha1-b43LrAaPaB/k+psKDL9mBYgCWRE=",
+ "requires": {
+ "tslib": "^1.9.0"
+ },
+ "dependencies": {
+ "tslib": {
+ "version": "1.14.1",
+ "resolved": "https://registry.nlark.com/tslib/download/tslib-1.14.1.tgz?cache=0&sync_timestamp=1628722556410&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ftslib%2Fdownload%2Ftslib-1.14.1.tgz",
+ "integrity": "sha1-zy04vcNKE0vK8QkcQfZhni9nLQA="
+ }
+ }
+ },
+ "@amap/amap-jsapi-loader": {
+ "version": "1.0.1",
+ "resolved": "https://registry.nlark.com/@amap/amap-jsapi-loader/download/@amap/amap-jsapi-loader-1.0.1.tgz",
+ "integrity": "sha1-nsS01dJGfqxFH2yFLjXbaen58MA="
+ },
+ "@ampproject/remapping": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmmirror.com/@ampproject/remapping/download/@ampproject/remapping-1.0.1.tgz",
+ "integrity": "sha1-E5jnPlZ8KnmS32VUwVu5Som2i6I=",
+ "dev": true,
+ "requires": {
+ "@jridgewell/resolve-uri": "1.0.0",
+ "sourcemap-codec": "1.4.8"
+ }
+ },
+ "@angular-devkit/architect": {
+ "version": "0.1202.13",
+ "resolved": "https://registry.npmmirror.com/@angular-devkit/architect/download/@angular-devkit/architect-0.1202.13.tgz",
+ "integrity": "sha1-ubiD1i9iimsxzgcdqR4mj2HaAO8=",
+ "dev": true,
+ "requires": {
+ "@angular-devkit/core": "12.2.13",
+ "rxjs": "6.6.7"
+ }
+ },
+ "@angular-devkit/build-angular": {
+ "version": "12.2.13",
+ "resolved": "https://registry.npmmirror.com/@angular-devkit/build-angular/download/@angular-devkit/build-angular-12.2.13.tgz",
+ "integrity": "sha1-9VZNPsnbEylWRzu5BLs1kEgvWzY=",
+ "dev": true,
+ "requires": {
+ "@ampproject/remapping": "1.0.1",
+ "@angular-devkit/architect": "0.1202.13",
+ "@angular-devkit/build-optimizer": "0.1202.13",
+ "@angular-devkit/build-webpack": "0.1202.13",
+ "@angular-devkit/core": "12.2.13",
+ "@babel/core": "7.14.8",
+ "@babel/generator": "7.14.8",
+ "@babel/helper-annotate-as-pure": "7.14.5",
+ "@babel/plugin-proposal-async-generator-functions": "7.14.7",
+ "@babel/plugin-transform-async-to-generator": "7.14.5",
+ "@babel/plugin-transform-runtime": "7.14.5",
+ "@babel/preset-env": "7.14.8",
+ "@babel/runtime": "7.14.8",
+ "@babel/template": "7.14.5",
+ "@discoveryjs/json-ext": "0.5.3",
+ "@jsdevtools/coverage-istanbul-loader": "3.0.5",
+ "@ngtools/webpack": "12.2.13",
+ "ansi-colors": "4.1.1",
+ "babel-loader": "8.2.2",
+ "browserslist": "^4.9.1",
+ "cacache": "15.2.0",
+ "caniuse-lite": "^1.0.30001032",
+ "circular-dependency-plugin": "5.2.2",
+ "copy-webpack-plugin": "9.0.1",
+ "core-js": "3.16.0",
+ "critters": "0.0.12",
+ "css-loader": "6.2.0",
+ "css-minimizer-webpack-plugin": "3.0.2",
+ "esbuild": "0.13.8",
+ "esbuild-wasm": "0.13.8",
+ "find-cache-dir": "3.3.1",
+ "glob": "7.1.7",
+ "https-proxy-agent": "5.0.0",
+ "inquirer": "8.1.2",
+ "karma-source-map-support": "1.4.0",
+ "less": "4.1.1",
+ "less-loader": "10.0.1",
+ "license-webpack-plugin": "2.3.20",
+ "loader-utils": "2.0.0",
+ "mini-css-extract-plugin": "2.4.2",
+ "minimatch": "3.0.4",
+ "open": "8.2.1",
+ "ora": "5.4.1",
+ "parse5-html-rewriting-stream": "6.0.1",
+ "piscina": "3.1.0",
+ "postcss": "8.3.6",
+ "postcss-import": "14.0.2",
+ "postcss-loader": "6.1.1",
+ "postcss-preset-env": "6.7.0",
+ "regenerator-runtime": "0.13.9",
+ "resolve-url-loader": "4.0.0",
+ "rxjs": "6.6.7",
+ "sass": "1.36.0",
+ "sass-loader": "12.1.0",
+ "semver": "7.3.5",
+ "source-map-loader": "3.0.0",
+ "source-map-support": "0.5.19",
+ "style-loader": "3.2.1",
+ "stylus": "0.54.8",
+ "stylus-loader": "6.1.0",
+ "terser": "5.7.1",
+ "terser-webpack-plugin": "5.1.4",
+ "text-table": "0.2.0",
+ "tree-kill": "1.2.2",
+ "tslib": "2.3.0",
+ "webpack": "5.50.0",
+ "webpack-dev-middleware": "5.0.0",
+ "webpack-dev-server": "3.11.2",
+ "webpack-merge": "5.8.0",
+ "webpack-subresource-integrity": "1.5.2"
+ },
+ "dependencies": {
+ "esbuild": {
+ "version": "0.13.8",
+ "resolved": "https://registry.npmmirror.com/esbuild/download/esbuild-0.13.8.tgz",
+ "integrity": "sha1-vXzFG4gasGd4n4jhe6ynRyTB7E8=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "esbuild-android-arm64": "0.13.8",
+ "esbuild-darwin-64": "0.13.8",
+ "esbuild-darwin-arm64": "0.13.8",
+ "esbuild-freebsd-64": "0.13.8",
+ "esbuild-freebsd-arm64": "0.13.8",
+ "esbuild-linux-32": "0.13.8",
+ "esbuild-linux-64": "0.13.8",
+ "esbuild-linux-arm": "0.13.8",
+ "esbuild-linux-arm64": "0.13.8",
+ "esbuild-linux-mips64le": "0.13.8",
+ "esbuild-linux-ppc64le": "0.13.8",
+ "esbuild-netbsd-64": "0.13.8",
+ "esbuild-openbsd-64": "0.13.8",
+ "esbuild-sunos-64": "0.13.8",
+ "esbuild-windows-32": "0.13.8",
+ "esbuild-windows-64": "0.13.8",
+ "esbuild-windows-arm64": "0.13.8"
+ }
+ },
+ "tslib": {
+ "version": "2.3.0",
+ "resolved": "https://registry.nlark.com/tslib/download/tslib-2.3.0.tgz?cache=0&sync_timestamp=1628722556410&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ftslib%2Fdownload%2Ftslib-2.3.0.tgz",
+ "integrity": "sha1-gDuM2rPhK6WBpMpByIObuw2ssJ4=",
+ "dev": true
+ }
+ }
+ },
+ "@angular-devkit/build-optimizer": {
+ "version": "0.1202.13",
+ "resolved": "https://registry.npmmirror.com/@angular-devkit/build-optimizer/download/@angular-devkit/build-optimizer-0.1202.13.tgz",
+ "integrity": "sha1-fwsTNozCoIsfR4mrEpahYJ9QSeo=",
+ "dev": true,
+ "requires": {
+ "source-map": "0.7.3",
+ "tslib": "2.3.0",
+ "typescript": "4.3.5"
+ },
+ "dependencies": {
+ "tslib": {
+ "version": "2.3.0",
+ "resolved": "https://registry.nlark.com/tslib/download/tslib-2.3.0.tgz?cache=0&sync_timestamp=1628722556410&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ftslib%2Fdownload%2Ftslib-2.3.0.tgz",
+ "integrity": "sha1-gDuM2rPhK6WBpMpByIObuw2ssJ4=",
+ "dev": true
+ }
+ }
+ },
+ "@angular-devkit/build-webpack": {
+ "version": "0.1202.13",
+ "resolved": "https://registry.npmmirror.com/@angular-devkit/build-webpack/download/@angular-devkit/build-webpack-0.1202.13.tgz",
+ "integrity": "sha1-h1+flne7EAVrUiMJZdwvAL0wid0=",
+ "dev": true,
+ "requires": {
+ "@angular-devkit/architect": "0.1202.13",
+ "rxjs": "6.6.7"
+ }
+ },
+ "@angular-devkit/core": {
+ "version": "12.2.13",
+ "resolved": "https://registry.npmmirror.com/@angular-devkit/core/download/@angular-devkit/core-12.2.13.tgz",
+ "integrity": "sha1-2zkp0b/OcQELN/t8Tmwz74Ck818=",
+ "dev": true,
+ "requires": {
+ "ajv": "8.6.2",
+ "ajv-formats": "2.1.0",
+ "fast-json-stable-stringify": "2.1.0",
+ "magic-string": "0.25.7",
+ "rxjs": "6.6.7",
+ "source-map": "0.7.3"
+ },
+ "dependencies": {
+ "ajv": {
+ "version": "8.6.2",
+ "resolved": "https://registry.npmmirror.com/ajv/download/ajv-8.6.2.tgz?cache=0&sync_timestamp=1637522259668&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fajv%2Fdownload%2Fajv-8.6.2.tgz",
+ "integrity": "sha1-L7ReDl/LwIEzJsHD2lNdGIG7BXE=",
+ "dev": true,
+ "requires": {
+ "fast-deep-equal": "^3.1.1",
+ "json-schema-traverse": "^1.0.0",
+ "require-from-string": "^2.0.2",
+ "uri-js": "^4.2.2"
+ }
+ },
+ "ajv-formats": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmmirror.com/ajv-formats/download/ajv-formats-2.1.0.tgz",
+ "integrity": "sha1-lur4PjjTIQi2bYKpywz6JIhs3+s=",
+ "dev": true,
+ "requires": {
+ "ajv": "^8.0.0"
+ }
+ }
+ }
+ },
+ "@angular-devkit/schematics": {
+ "version": "12.2.13",
+ "resolved": "https://registry.npmmirror.com/@angular-devkit/schematics/download/@angular-devkit/schematics-12.2.13.tgz",
+ "integrity": "sha1-ZGTYb6PM0O+16tRseTzvnsRcd1g=",
+ "dev": true,
+ "requires": {
+ "@angular-devkit/core": "12.2.13",
+ "ora": "5.4.1",
+ "rxjs": "6.6.7"
+ }
+ },
+ "@angular-eslint/builder": {
+ "version": "12.3.1",
+ "resolved": "https://registry.npmmirror.com/@angular-eslint/builder/download/@angular-eslint/builder-12.3.1.tgz",
+ "integrity": "sha1-4KZ2ipx+4jYjseNjoj5ZozO22r4=",
+ "dev": true,
+ "requires": {
+ "@nrwl/devkit": ">= 12.0.0 < 13.0.0"
+ }
+ },
+ "@angular-eslint/eslint-plugin": {
+ "version": "12.3.1",
+ "resolved": "https://registry.npmmirror.com/@angular-eslint/eslint-plugin/download/@angular-eslint/eslint-plugin-12.3.1.tgz",
+ "integrity": "sha1-AKxE1ZhthhE9ZaU3N0bh/CL9hwI=",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/experimental-utils": "4.28.2"
+ }
+ },
+ "@angular-eslint/eslint-plugin-template": {
+ "version": "12.3.1",
+ "resolved": "https://registry.npmmirror.com/@angular-eslint/eslint-plugin-template/download/@angular-eslint/eslint-plugin-template-12.3.1.tgz",
+ "integrity": "sha1-MyYM1TVt9dt+J3GUQ+q89sIU4y4=",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/experimental-utils": "4.28.2",
+ "aria-query": "^4.2.2",
+ "axobject-query": "^2.2.0"
+ }
+ },
+ "@angular-eslint/schematics": {
+ "version": "12.3.1",
+ "resolved": "https://registry.npmmirror.com/@angular-eslint/schematics/download/@angular-eslint/schematics-12.3.1.tgz",
+ "integrity": "sha1-mQYKZP1t02/7TF4lS4VWL00BUNk=",
+ "dev": true,
+ "requires": {
+ "@angular-eslint/eslint-plugin": "12.3.1",
+ "@angular-eslint/eslint-plugin-template": "12.3.1",
+ "ignore": "5.1.8",
+ "strip-json-comments": "3.1.1",
+ "tmp": "0.2.1"
+ },
+ "dependencies": {
+ "ignore": {
+ "version": "5.1.8",
+ "resolved": "https://registry.npmmirror.com/ignore/download/ignore-5.1.8.tgz?cache=0&sync_timestamp=1635926632542&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fignore%2Fdownload%2Fignore-5.1.8.tgz",
+ "integrity": "sha1-8VCotQo0KJsz4i9YiavU2AFvDlc=",
+ "dev": true
+ },
+ "tmp": {
+ "version": "0.2.1",
+ "resolved": "https://registry.nlark.com/tmp/download/tmp-0.2.1.tgz",
+ "integrity": "sha1-hFf8MDfc9HGcJRNnoa9lAO4czxQ=",
+ "dev": true,
+ "requires": {
+ "rimraf": "^3.0.0"
+ }
+ }
+ }
+ },
+ "@angular-eslint/template-parser": {
+ "version": "12.3.1",
+ "resolved": "https://registry.npmmirror.com/@angular-eslint/template-parser/download/@angular-eslint/template-parser-12.3.1.tgz",
+ "integrity": "sha1-Vh/hvT+0pNdcxVNm0ngYvKIiBMk=",
+ "dev": true,
+ "requires": {
+ "eslint-scope": "^5.1.0"
+ }
+ },
+ "@angular/animations": {
+ "version": "12.2.13",
+ "resolved": "https://registry.npmmirror.com/@angular/animations/download/@angular/animations-12.2.13.tgz",
+ "integrity": "sha1-kJt5xWqFuzHAYF7UGYUDQLVYC+k=",
+ "requires": {
+ "tslib": "^2.2.0"
+ }
+ },
+ "@angular/cdk": {
+ "version": "12.2.13",
+ "resolved": "https://registry.npmmirror.com/@angular/cdk/download/@angular/cdk-12.2.13.tgz",
+ "integrity": "sha512-zSKRhECyFqhingIeyRInIyTvYErt4gWo+x5DQr0b7YLUbU8DZSwWnG4w76Ke2s4U8T7ry1jpJBHoX/e8YBpGMg==",
+ "requires": {
+ "parse5": "^5.0.0",
+ "tslib": "^2.2.0"
+ }
+ },
+ "@angular/cli": {
+ "version": "12.2.13",
+ "resolved": "https://registry.npmmirror.com/@angular/cli/download/@angular/cli-12.2.13.tgz",
+ "integrity": "sha1-ylhsFKb4O7Q5CHW+Cg+nCbmirik=",
+ "dev": true,
+ "requires": {
+ "@angular-devkit/architect": "0.1202.13",
+ "@angular-devkit/core": "12.2.13",
+ "@angular-devkit/schematics": "12.2.13",
+ "@schematics/angular": "12.2.13",
+ "@yarnpkg/lockfile": "1.1.0",
+ "ansi-colors": "4.1.1",
+ "debug": "4.3.2",
+ "ini": "2.0.0",
+ "inquirer": "8.1.2",
+ "jsonc-parser": "3.0.0",
+ "npm-package-arg": "8.1.5",
+ "npm-pick-manifest": "6.1.1",
+ "open": "8.2.1",
+ "ora": "5.4.1",
+ "pacote": "11.3.5",
+ "resolve": "1.20.0",
+ "semver": "7.3.5",
+ "symbol-observable": "4.0.0",
+ "uuid": "8.3.2"
+ },
+ "dependencies": {
+ "uuid": {
+ "version": "8.3.2",
+ "resolved": "https://registry.npmmirror.com/uuid/download/uuid-8.3.2.tgz",
+ "integrity": "sha1-gNW1ztJxu5r2xEXyGhoExgbO++I=",
+ "dev": true
+ }
+ }
+ },
+ "@angular/common": {
+ "version": "12.2.13",
+ "resolved": "https://registry.npmmirror.com/@angular/common/download/@angular/common-12.2.13.tgz",
+ "integrity": "sha1-/lL/roZowd7EGybNw6dJEBOZ4f4=",
+ "requires": {
+ "tslib": "^2.2.0"
+ }
+ },
+ "@angular/compiler": {
+ "version": "12.2.13",
+ "resolved": "https://registry.npmmirror.com/@angular/compiler/download/@angular/compiler-12.2.13.tgz",
+ "integrity": "sha1-fu9v24G53m/Q4s3aKtighMHZU1s=",
+ "requires": {
+ "tslib": "^2.2.0"
+ }
+ },
+ "@angular/compiler-cli": {
+ "version": "12.2.13",
+ "resolved": "https://registry.npmmirror.com/@angular/compiler-cli/download/@angular/compiler-cli-12.2.13.tgz",
+ "integrity": "sha1-PORjJj6AqGHhSvLtO6gVmAYOPOA=",
+ "dev": true,
+ "requires": {
+ "@babel/core": "^7.8.6",
+ "@babel/types": "^7.8.6",
+ "canonical-path": "1.0.0",
+ "chokidar": "^3.0.0",
+ "convert-source-map": "^1.5.1",
+ "dependency-graph": "^0.11.0",
+ "magic-string": "^0.25.0",
+ "minimist": "^1.2.0",
+ "reflect-metadata": "^0.1.2",
+ "semver": "^7.0.0",
+ "source-map": "^0.6.1",
+ "sourcemap-codec": "^1.4.8",
+ "tslib": "^2.2.0",
+ "yargs": "^17.0.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.nlark.com/ansi-styles/download/ansi-styles-4.3.0.tgz",
+ "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=",
+ "dev": true,
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
+ },
+ "cliui": {
+ "version": "7.0.4",
+ "resolved": "https://registry.nlark.com/cliui/download/cliui-7.0.4.tgz",
+ "integrity": "sha1-oCZe5lVHb8gHrqnfPfjfd4OAi08=",
+ "dev": true,
+ "requires": {
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.0",
+ "wrap-ansi": "^7.0.0"
+ }
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npm.taobao.org/color-convert/download/color-convert-2.0.1.tgz",
+ "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=",
+ "dev": true,
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npm.taobao.org/color-name/download/color-name-1.1.4.tgz",
+ "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=",
+ "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
+ },
+ "wrap-ansi": {
+ "version": "7.0.0",
+ "resolved": "https://registry.nlark.com/wrap-ansi/download/wrap-ansi-7.0.0.tgz?cache=0&sync_timestamp=1631557327268&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fwrap-ansi%2Fdownload%2Fwrap-ansi-7.0.0.tgz",
+ "integrity": "sha1-Z+FFz/UQpqaYS98RUpEdadLrnkM=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ }
+ },
+ "y18n": {
+ "version": "5.0.8",
+ "resolved": "https://registry.npm.taobao.org/y18n/download/y18n-5.0.8.tgz?cache=0&sync_timestamp=1617822684820&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fy18n%2Fdownload%2Fy18n-5.0.8.tgz",
+ "integrity": "sha1-f0k00PfKjFb5UxSTndzS3ZHOHVU=",
+ "dev": true
+ },
+ "yargs": {
+ "version": "17.2.1",
+ "resolved": "https://registry.npmmirror.com/yargs/download/yargs-17.2.1.tgz",
+ "integrity": "sha1-4slbl5ag4ffzv0QnhjtC4EGBkeo=",
+ "dev": true,
+ "requires": {
+ "cliui": "^7.0.2",
+ "escalade": "^3.1.1",
+ "get-caller-file": "^2.0.5",
+ "require-directory": "^2.1.1",
+ "string-width": "^4.2.0",
+ "y18n": "^5.0.5",
+ "yargs-parser": "^20.2.2"
+ }
+ },
+ "yargs-parser": {
+ "version": "20.2.9",
+ "resolved": "https://registry.npmmirror.com/yargs-parser/download/yargs-parser-20.2.9.tgz?cache=0&sync_timestamp=1637031053426&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fyargs-parser%2Fdownload%2Fyargs-parser-20.2.9.tgz",
+ "integrity": "sha1-LrfcOwKJcY/ClfNidThFxBoMlO4=",
+ "dev": true
+ }
+ }
+ },
+ "@angular/core": {
+ "version": "12.2.13",
+ "resolved": "https://registry.npmmirror.com/@angular/core/download/@angular/core-12.2.13.tgz?cache=0&sync_timestamp=1637205149537&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40angular%2Fcore%2Fdownload%2F%40angular%2Fcore-12.2.13.tgz",
+ "integrity": "sha1-/ECsvc7lxYeL0kndwNZDvnJAdsM=",
+ "requires": {
+ "tslib": "^2.2.0"
+ }
+ },
+ "@angular/forms": {
+ "version": "12.2.13",
+ "resolved": "https://registry.npmmirror.com/@angular/forms/download/@angular/forms-12.2.13.tgz",
+ "integrity": "sha1-TekOiJkcJ0tdXjqwMAJn4WG6ePI=",
+ "requires": {
+ "tslib": "^2.2.0"
+ }
+ },
+ "@angular/language-service": {
+ "version": "12.2.13",
+ "resolved": "https://registry.npmmirror.com/@angular/language-service/download/@angular/language-service-12.2.13.tgz",
+ "integrity": "sha1-MmBFoyj4qWIocDfXqFvoEgB0Qhw=",
+ "dev": true
+ },
+ "@angular/platform-browser": {
+ "version": "12.2.13",
+ "resolved": "https://registry.npmmirror.com/@angular/platform-browser/download/@angular/platform-browser-12.2.13.tgz",
+ "integrity": "sha1-dp+xSLIShmPWtAXSpBAj8s2qHJU=",
+ "requires": {
+ "tslib": "^2.2.0"
+ }
+ },
+ "@angular/platform-browser-dynamic": {
+ "version": "12.2.13",
+ "resolved": "https://registry.npmmirror.com/@angular/platform-browser-dynamic/download/@angular/platform-browser-dynamic-12.2.13.tgz",
+ "integrity": "sha1-nuYwn1EdpBnV2AoagnmtyAbpLwQ=",
+ "requires": {
+ "tslib": "^2.2.0"
+ }
+ },
+ "@angular/router": {
+ "version": "12.2.13",
+ "resolved": "https://registry.npmmirror.com/@angular/router/download/@angular/router-12.2.13.tgz",
+ "integrity": "sha1-5bk5qWdfnUg0/uPnXrjQQO9js7U=",
+ "requires": {
+ "tslib": "^2.2.0"
+ }
+ },
+ "@ant-design/colors": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npm.taobao.org/@ant-design/colors/download/@ant-design/colors-5.1.1.tgz",
+ "integrity": "sha1-gAshhrHifmZDLmfQPtlq8+IdiUA=",
+ "requires": {
+ "@ctrl/tinycolor": "^3.3.1"
+ }
+ },
+ "@ant-design/icons-angular": {
+ "version": "12.0.3",
+ "resolved": "https://registry.npmmirror.com/@ant-design/icons-angular/download/@ant-design/icons-angular-12.0.3.tgz",
+ "integrity": "sha1-Ppmqmc7ruXg4Sikm0G2hnAQ/xL0=",
+ "requires": {
+ "@ant-design/colors": "^5.0.0",
+ "tslib": "^2.0.0"
+ }
+ },
+ "@antv/adjust": {
+ "version": "0.2.3",
+ "resolved": "https://registry.nlark.com/@antv/adjust/download/@antv/adjust-0.2.3.tgz",
+ "integrity": "sha1-w4hKaAwyZMwSXX8qtTmOihwLlAE=",
+ "requires": {
+ "@antv/util": "~2.0.0",
+ "tslib": "^1.10.0"
+ },
+ "dependencies": {
+ "tslib": {
+ "version": "1.14.1",
+ "resolved": "https://registry.nlark.com/tslib/download/tslib-1.14.1.tgz?cache=0&sync_timestamp=1628722556410&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ftslib%2Fdownload%2Ftslib-1.14.1.tgz",
+ "integrity": "sha1-zy04vcNKE0vK8QkcQfZhni9nLQA="
+ }
+ }
+ },
+ "@antv/attr": {
+ "version": "0.3.2",
+ "resolved": "https://registry.nlark.com/@antv/attr/download/@antv/attr-0.3.2.tgz",
+ "integrity": "sha1-5YZrZIcMYvOpwluKYfZUuiv9oFE=",
+ "requires": {
+ "@antv/color-util": "^2.0.1",
+ "@antv/util": "~2.0.0",
+ "tslib": "^1.10.0"
+ },
+ "dependencies": {
+ "tslib": {
+ "version": "1.14.1",
+ "resolved": "https://registry.nlark.com/tslib/download/tslib-1.14.1.tgz?cache=0&sync_timestamp=1628722556410&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ftslib%2Fdownload%2Ftslib-1.14.1.tgz",
+ "integrity": "sha1-zy04vcNKE0vK8QkcQfZhni9nLQA="
+ }
+ }
+ },
+ "@antv/color-util": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmmirror.com/@antv/color-util/download/@antv/color-util-2.0.6.tgz",
+ "integrity": "sha1-XhKbuc4/K5MJtSECs9ySlDDMwBY=",
+ "requires": {
+ "@antv/util": "^2.0.9",
+ "tslib": "^2.0.3"
+ }
+ },
+ "@antv/component": {
+ "version": "0.8.20",
+ "resolved": "https://registry.npmmirror.com/@antv/component/download/@antv/component-0.8.20.tgz",
+ "integrity": "sha1-l/Daoi83aKNd4zzQ2cWP8yzspBc=",
+ "requires": {
+ "@antv/color-util": "^2.0.3",
+ "@antv/dom-util": "~2.0.1",
+ "@antv/g-base": "0.5.6",
+ "@antv/matrix-util": "^3.1.0-beta.1",
+ "@antv/path-util": "~2.0.7",
+ "@antv/scale": "~0.3.1",
+ "@antv/util": "~2.0.0",
+ "fecha": "~4.2.0",
+ "tslib": "^2.0.3"
+ },
+ "dependencies": {
+ "@antv/g-base": {
+ "version": "0.5.6",
+ "resolved": "https://registry.npmmirror.com/@antv/g-base/download/@antv/g-base-0.5.6.tgz",
+ "integrity": "sha1-2W2l+/bF+LBzBydR4V5e7HCzk/w=",
+ "requires": {
+ "@antv/event-emitter": "^0.1.1",
+ "@antv/g-math": "^0.1.6",
+ "@antv/matrix-util": "^3.1.0-beta.1",
+ "@antv/path-util": "~2.0.5",
+ "@antv/util": "~2.0.0",
+ "@types/d3-timer": "^2.0.0",
+ "d3-ease": "^1.0.5",
+ "d3-interpolate": "^1.3.2",
+ "d3-timer": "^1.0.9",
+ "detect-browser": "^5.1.0",
+ "tslib": "^2.0.3"
+ }
+ }
+ }
+ },
+ "@antv/coord": {
+ "version": "0.3.1",
+ "resolved": "https://registry.nlark.com/@antv/coord/download/@antv/coord-0.3.1.tgz",
+ "integrity": "sha1-mC4mHYoeBqGY61GOp6zCDth1oBk=",
+ "requires": {
+ "@antv/matrix-util": "^3.1.0-beta.2",
+ "@antv/util": "~2.0.12",
+ "tslib": "^2.1.0"
+ }
+ },
+ "@antv/data-set": {
+ "version": "0.11.8",
+ "resolved": "https://registry.npm.taobao.org/@antv/data-set/download/@antv/data-set-0.11.8.tgz",
+ "integrity": "sha1-dBPpAGJIY9Wl87RoQf0An8TypP8=",
+ "requires": {
+ "@antv/hierarchy": "^0.6.0",
+ "@antv/util": "^2.0.0",
+ "d3-composite-projections": "^1.2.0",
+ "d3-dsv": "^1.0.5",
+ "d3-geo": "~1.6.4",
+ "d3-geo-projection": "~2.1.2",
+ "d3-hexjson": "^1.0.1",
+ "d3-hierarchy": "^1.1.5",
+ "d3-sankey": "^0.9.1",
+ "d3-voronoi": "^1.1.2",
+ "dagre": "^0.8.2",
+ "point-at-length": "^1.0.2",
+ "regression": "^2.0.0",
+ "simple-statistics": "^6.1.0",
+ "topojson-client": "^3.0.0",
+ "wolfy87-eventemitter": "^5.1.0"
+ }
+ },
+ "@antv/dom-util": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmmirror.com/@antv/dom-util/download/@antv/dom-util-2.0.3.tgz",
+ "integrity": "sha1-y9FYsciODopNhlhxpZabEZBVT/U=",
+ "requires": {
+ "tslib": "^2.0.3"
+ }
+ },
+ "@antv/event-emitter": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npm.taobao.org/@antv/event-emitter/download/@antv/event-emitter-0.1.2.tgz",
+ "integrity": "sha1-oXt8uG5tBxiA3Gv7IydW+IYk7Lw="
+ },
+ "@antv/g-base": {
+ "version": "0.5.9",
+ "resolved": "https://registry.npmmirror.com/@antv/g-base/download/@antv/g-base-0.5.9.tgz",
+ "integrity": "sha1-WNDhHYUVetoUCPvfJPT0aPQOWc0=",
+ "requires": {
+ "@antv/event-emitter": "^0.1.1",
+ "@antv/g-math": "^0.1.6",
+ "@antv/matrix-util": "^3.1.0-beta.1",
+ "@antv/path-util": "~2.0.5",
+ "@antv/util": "~2.0.0",
+ "@types/d3-timer": "^2.0.0",
+ "d3-ease": "^1.0.5",
+ "d3-interpolate": "^1.3.2",
+ "d3-timer": "^1.0.9",
+ "detect-browser": "^5.1.0",
+ "tslib": "^2.0.3"
+ }
+ },
+ "@antv/g-canvas": {
+ "version": "0.5.12",
+ "resolved": "https://registry.npmmirror.com/@antv/g-canvas/download/@antv/g-canvas-0.5.12.tgz",
+ "integrity": "sha1-L8QNztaZTwdPIjQeZdVve71Sdfc=",
+ "requires": {
+ "@antv/g-base": "^0.5.3",
+ "@antv/g-math": "^0.1.6",
+ "@antv/matrix-util": "^3.1.0-beta.1",
+ "@antv/path-util": "~2.0.5",
+ "@antv/util": "~2.0.0",
+ "gl-matrix": "^3.0.0",
+ "tslib": "^2.0.3"
+ }
+ },
+ "@antv/g-math": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmmirror.com/@antv/g-math/download/@antv/g-math-0.1.7.tgz",
+ "integrity": "sha1-bsJ2kmn3zLZ+WBQNVznfdARswE4=",
+ "requires": {
+ "@antv/util": "~2.0.0",
+ "gl-matrix": "^3.0.0"
+ }
+ },
+ "@antv/g-svg": {
+ "version": "0.5.6",
+ "resolved": "https://registry.npmmirror.com/@antv/g-svg/download/@antv/g-svg-0.5.6.tgz",
+ "integrity": "sha1-cLL6mAxDGzmtPFtLU+NqHWCVfWU=",
+ "requires": {
+ "@antv/g-base": "^0.5.3",
+ "@antv/g-math": "^0.1.6",
+ "@antv/util": "~2.0.0",
+ "detect-browser": "^5.0.0",
+ "tslib": "^2.0.3"
+ }
+ },
+ "@antv/g2": {
+ "version": "4.1.34",
+ "resolved": "https://registry.npmmirror.com/@antv/g2/download/@antv/g2-4.1.34.tgz",
+ "integrity": "sha1-aqcaCcJAuSkUvGZvESMQqrwOPhY=",
+ "requires": {
+ "@antv/adjust": "^0.2.1",
+ "@antv/attr": "^0.3.1",
+ "@antv/color-util": "^2.0.2",
+ "@antv/component": "^0.8.19",
+ "@antv/coord": "^0.3.0",
+ "@antv/dom-util": "^2.0.2",
+ "@antv/event-emitter": "~0.1.0",
+ "@antv/g-base": "~0.5.6",
+ "@antv/g-canvas": "~0.5.10",
+ "@antv/g-svg": "~0.5.6",
+ "@antv/matrix-util": "^3.1.0-beta.3",
+ "@antv/path-util": "^2.0.15",
+ "@antv/scale": "^0.3.14",
+ "@antv/util": "~2.0.5",
+ "tslib": "^2.0.0"
+ }
+ },
+ "@antv/hierarchy": {
+ "version": "0.6.8",
+ "resolved": "https://registry.nlark.com/@antv/hierarchy/download/@antv/hierarchy-0.6.8.tgz",
+ "integrity": "sha1-t3xJCpwt1toYbLrO4OeIe4wbP6Q=",
+ "requires": {
+ "@antv/util": "^2.0.7"
+ }
+ },
+ "@antv/matrix-util": {
+ "version": "3.1.0-beta.3",
+ "resolved": "https://registry.npmmirror.com/@antv/matrix-util/download/@antv/matrix-util-3.1.0-beta.3.tgz",
+ "integrity": "sha1-4GHej6e+BGBaFVxpzFzpCC7t3e4=",
+ "requires": {
+ "@antv/util": "^2.0.9",
+ "gl-matrix": "^3.4.3",
+ "tslib": "^2.0.3"
+ }
+ },
+ "@antv/path-util": {
+ "version": "2.0.15",
+ "resolved": "https://registry.npmmirror.com/@antv/path-util/download/@antv/path-util-2.0.15.tgz",
+ "integrity": "sha1-pvaR38i3vOW+fwqrtb1hSWQyVjE=",
+ "requires": {
+ "@antv/matrix-util": "^3.0.4",
+ "@antv/util": "^2.0.9",
+ "tslib": "^2.0.3"
+ },
+ "dependencies": {
+ "@antv/matrix-util": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmmirror.com/@antv/matrix-util/download/@antv/matrix-util-3.0.4.tgz",
+ "integrity": "sha1-6hPxWKovtLovuNa2tWHsRn6jrCA=",
+ "requires": {
+ "@antv/util": "^2.0.9",
+ "gl-matrix": "^3.3.0",
+ "tslib": "^2.0.3"
+ }
+ }
+ }
+ },
+ "@antv/scale": {
+ "version": "0.3.14",
+ "resolved": "https://registry.npmmirror.com/@antv/scale/download/@antv/scale-0.3.14.tgz",
+ "integrity": "sha1-Bxj4ZRNo5cmNtWEgZRMqjIu83kg=",
+ "requires": {
+ "@antv/util": "~2.0.3",
+ "fecha": "~4.2.0",
+ "tslib": "^2.0.0"
+ }
+ },
+ "@antv/util": {
+ "version": "2.0.17",
+ "resolved": "https://registry.npmmirror.com/@antv/util/download/@antv/util-2.0.17.tgz",
+ "integrity": "sha1-6O9CrKeJKBWyKSafPdEMazx1l6k=",
+ "requires": {
+ "csstype": "^3.0.8",
+ "tslib": "^2.0.3"
+ }
+ },
+ "@assemblyscript/loader": {
+ "version": "0.10.1",
+ "resolved": "https://registry.npmmirror.com/@assemblyscript/loader/download/@assemblyscript/loader-0.10.1.tgz",
+ "integrity": "sha1-cORWePBscvouNQ6FU+xKTXK5LgY=",
+ "dev": true
+ },
+ "@babel/code-frame": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmmirror.com/@babel/code-frame/download/@babel/code-frame-7.16.0.tgz?cache=0&sync_timestamp=1635561808745&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40babel%2Fcode-frame%2Fdownload%2F%40babel%2Fcode-frame-7.16.0.tgz",
+ "integrity": "sha1-DfyAMJvuyEEeZecGRhxAiwu5tDE=",
+ "dev": true,
+ "requires": {
+ "@babel/highlight": "^7.16.0"
+ }
+ },
+ "@babel/compat-data": {
+ "version": "7.16.4",
+ "resolved": "https://registry.npmmirror.com/@babel/compat-data/download/@babel/compat-data-7.16.4.tgz",
+ "integrity": "sha512-1o/jo7D+kC9ZjHX5v+EHrdjl3PhxMrLSOTGsOdHJ+KL8HCaEK6ehrVL2RS6oHDZp+L7xLirLrPmQtEng769J/Q==",
+ "dev": true
+ },
+ "@babel/core": {
+ "version": "7.14.8",
+ "resolved": "https://registry.npmmirror.com/@babel/core/download/@babel/core-7.14.8.tgz?cache=0&sync_timestamp=1635561804981&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40babel%2Fcore%2Fdownload%2F%40babel%2Fcore-7.14.8.tgz",
+ "integrity": "sha1-IM33yEtdhtg/rIcQqLxgWnuj8BA=",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.14.5",
+ "@babel/generator": "^7.14.8",
+ "@babel/helper-compilation-targets": "^7.14.5",
+ "@babel/helper-module-transforms": "^7.14.8",
+ "@babel/helpers": "^7.14.8",
+ "@babel/parser": "^7.14.8",
+ "@babel/template": "^7.14.5",
+ "@babel/traverse": "^7.14.8",
+ "@babel/types": "^7.14.8",
+ "convert-source-map": "^1.7.0",
+ "debug": "^4.1.0",
+ "gensync": "^1.0.0-beta.2",
+ "json5": "^2.1.2",
+ "semver": "^6.3.0",
+ "source-map": "^0.5.0"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz?cache=0&sync_timestamp=1616463540350&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-6.3.0.tgz",
+ "integrity": "sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0=",
+ "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.14.8",
+ "resolved": "https://registry.npmmirror.com/@babel/generator/download/@babel/generator-7.14.8.tgz?cache=0&sync_timestamp=1635561809489&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40babel%2Fgenerator%2Fdownload%2F%40babel%2Fgenerator-7.14.8.tgz",
+ "integrity": "sha1-v4b9avls87dDlajKQJUV+JQj4HA=",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.14.8",
+ "jsesc": "^2.5.1",
+ "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.14.5",
+ "resolved": "https://registry.npmmirror.com/@babel/helper-annotate-as-pure/download/@babel/helper-annotate-as-pure-7.14.5.tgz?cache=0&sync_timestamp=1635561802239&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40babel%2Fhelper-annotate-as-pure%2Fdownload%2F%40babel%2Fhelper-annotate-as-pure-7.14.5.tgz",
+ "integrity": "sha1-e/R47Dtxcm1WqMpXdbBG/CmHnmE=",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.14.5"
+ }
+ },
+ "@babel/helper-builder-binary-assignment-operator-visitor": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmmirror.com/@babel/helper-builder-binary-assignment-operator-visitor/download/@babel/helper-builder-binary-assignment-operator-visitor-7.16.0.tgz",
+ "integrity": "sha1-8aaGuS2nlAIMJlguuFLprM0NeII=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-explode-assignable-expression": "^7.16.0",
+ "@babel/types": "^7.16.0"
+ }
+ },
+ "@babel/helper-compilation-targets": {
+ "version": "7.16.3",
+ "resolved": "https://registry.npmmirror.com/@babel/helper-compilation-targets/download/@babel/helper-compilation-targets-7.16.3.tgz?cache=0&sync_timestamp=1636495290322&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40babel%2Fhelper-compilation-targets%2Fdownload%2F%40babel%2Fhelper-compilation-targets-7.16.3.tgz",
+ "integrity": "sha512-vKsoSQAyBmxS35JUOOt+07cLc6Nk/2ljLIHwmq2/NM6hdioUaqEXq/S+nXvbvXbZkNDlWOymPanJGOc4CBjSJA==",
+ "dev": true,
+ "requires": {
+ "@babel/compat-data": "^7.16.0",
+ "@babel/helper-validator-option": "^7.14.5",
+ "browserslist": "^4.17.5",
+ "semver": "^6.3.0"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz?cache=0&sync_timestamp=1616463540350&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-6.3.0.tgz",
+ "integrity": "sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0=",
+ "dev": true
+ }
+ }
+ },
+ "@babel/helper-create-class-features-plugin": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmmirror.com/@babel/helper-create-class-features-plugin/download/@babel/helper-create-class-features-plugin-7.16.0.tgz?cache=0&sync_timestamp=1635561800206&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40babel%2Fhelper-create-class-features-plugin%2Fdownload%2F%40babel%2Fhelper-create-class-features-plugin-7.16.0.tgz",
+ "integrity": "sha1-CQ1NFms0KgOp/sN+9P1a65x8aks=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-annotate-as-pure": "^7.16.0",
+ "@babel/helper-function-name": "^7.16.0",
+ "@babel/helper-member-expression-to-functions": "^7.16.0",
+ "@babel/helper-optimise-call-expression": "^7.16.0",
+ "@babel/helper-replace-supers": "^7.16.0",
+ "@babel/helper-split-export-declaration": "^7.16.0"
+ },
+ "dependencies": {
+ "@babel/helper-annotate-as-pure": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmmirror.com/@babel/helper-annotate-as-pure/download/@babel/helper-annotate-as-pure-7.16.0.tgz?cache=0&sync_timestamp=1635561802239&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40babel%2Fhelper-annotate-as-pure%2Fdownload%2F%40babel%2Fhelper-annotate-as-pure-7.16.0.tgz",
+ "integrity": "sha1-mh8OvNpT2aLQAQjEzqzmpdXx8I0=",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.16.0"
+ }
+ }
+ }
+ },
+ "@babel/helper-create-regexp-features-plugin": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmmirror.com/@babel/helper-create-regexp-features-plugin/download/@babel/helper-create-regexp-features-plugin-7.16.0.tgz",
+ "integrity": "sha1-BrI0jON/zMT14Y3NjXUFPyp8RP8=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-annotate-as-pure": "^7.16.0",
+ "regexpu-core": "^4.7.1"
+ },
+ "dependencies": {
+ "@babel/helper-annotate-as-pure": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmmirror.com/@babel/helper-annotate-as-pure/download/@babel/helper-annotate-as-pure-7.16.0.tgz?cache=0&sync_timestamp=1635561802239&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40babel%2Fhelper-annotate-as-pure%2Fdownload%2F%40babel%2Fhelper-annotate-as-pure-7.16.0.tgz",
+ "integrity": "sha1-mh8OvNpT2aLQAQjEzqzmpdXx8I0=",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.16.0"
+ }
+ }
+ }
+ },
+ "@babel/helper-define-polyfill-provider": {
+ "version": "0.2.4",
+ "resolved": "https://registry.npmmirror.com/@babel/helper-define-polyfill-provider/download/@babel/helper-define-polyfill-provider-0.2.4.tgz",
+ "integrity": "sha1-iGeu150+psreQPgB77esXGaRaxA=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-compilation-targets": "^7.13.0",
+ "@babel/helper-module-imports": "^7.12.13",
+ "@babel/helper-plugin-utils": "^7.13.0",
+ "@babel/traverse": "^7.13.0",
+ "debug": "^4.1.1",
+ "lodash.debounce": "^4.0.8",
+ "resolve": "^1.14.2",
+ "semver": "^6.1.2"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz?cache=0&sync_timestamp=1616463540350&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-6.3.0.tgz",
+ "integrity": "sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0=",
+ "dev": true
+ }
+ }
+ },
+ "@babel/helper-explode-assignable-expression": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmmirror.com/@babel/helper-explode-assignable-expression/download/@babel/helper-explode-assignable-expression-7.16.0.tgz?cache=0&sync_timestamp=1635567805771&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40babel%2Fhelper-explode-assignable-expression%2Fdownload%2F%40babel%2Fhelper-explode-assignable-expression-7.16.0.tgz",
+ "integrity": "sha1-dTAXM3oV9G+cCfZ0z/EM7pudd3g=",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.16.0"
+ }
+ },
+ "@babel/helper-function-name": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmmirror.com/@babel/helper-function-name/download/@babel/helper-function-name-7.16.0.tgz?cache=0&sync_timestamp=1635561947831&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40babel%2Fhelper-function-name%2Fdownload%2F%40babel%2Fhelper-function-name-7.16.0.tgz",
+ "integrity": "sha1-t90Hl9ALv+5PB+nE6lsOMMi7FIE=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-get-function-arity": "^7.16.0",
+ "@babel/template": "^7.16.0",
+ "@babel/types": "^7.16.0"
+ },
+ "dependencies": {
+ "@babel/template": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmmirror.com/@babel/template/download/@babel/template-7.16.0.tgz?cache=0&sync_timestamp=1635561799475&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40babel%2Ftemplate%2Fdownload%2F%40babel%2Ftemplate-7.16.0.tgz",
+ "integrity": "sha1-0Wo16/TNdOICCDNW+rId2JNj3dY=",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.16.0",
+ "@babel/parser": "^7.16.0",
+ "@babel/types": "^7.16.0"
+ }
+ }
+ }
+ },
+ "@babel/helper-get-function-arity": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmmirror.com/@babel/helper-get-function-arity/download/@babel/helper-get-function-arity-7.16.0.tgz?cache=0&sync_timestamp=1635561948623&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40babel%2Fhelper-get-function-arity%2Fdownload%2F%40babel%2Fhelper-get-function-arity-7.16.0.tgz",
+ "integrity": "sha1-AIjHSGspqctdlIsaHeRttm4InPo=",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.16.0"
+ }
+ },
+ "@babel/helper-hoist-variables": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmmirror.com/@babel/helper-hoist-variables/download/@babel/helper-hoist-variables-7.16.0.tgz?cache=0&sync_timestamp=1635561801635&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40babel%2Fhelper-hoist-variables%2Fdownload%2F%40babel%2Fhelper-hoist-variables-7.16.0.tgz",
+ "integrity": "sha1-TJAjwvHe9+KP9G/B2802o5vqqBo=",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.16.0"
+ }
+ },
+ "@babel/helper-member-expression-to-functions": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmmirror.com/@babel/helper-member-expression-to-functions/download/@babel/helper-member-expression-to-functions-7.16.0.tgz?cache=0&sync_timestamp=1635561802435&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40babel%2Fhelper-member-expression-to-functions%2Fdownload%2F%40babel%2Fhelper-member-expression-to-functions-7.16.0.tgz",
+ "integrity": "sha1-KShwQO/Rl8d2Nu91GI6B2ovM1aQ=",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.16.0"
+ }
+ },
+ "@babel/helper-module-imports": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmmirror.com/@babel/helper-module-imports/download/@babel/helper-module-imports-7.16.0.tgz?cache=0&sync_timestamp=1635561800759&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40babel%2Fhelper-module-imports%2Fdownload%2F%40babel%2Fhelper-module-imports-7.16.0.tgz",
+ "integrity": "sha1-kFOOYLZy7PG0SPX09UM9N+eaPsM=",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.16.0"
+ }
+ },
+ "@babel/helper-module-transforms": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmmirror.com/@babel/helper-module-transforms/download/@babel/helper-module-transforms-7.16.0.tgz?cache=0&sync_timestamp=1635561798763&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40babel%2Fhelper-module-transforms%2Fdownload%2F%40babel%2Fhelper-module-transforms-7.16.0.tgz",
+ "integrity": "sha1-HIKo3UyzRXdQLr0pCWmbGUw+m7U=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-module-imports": "^7.16.0",
+ "@babel/helper-replace-supers": "^7.16.0",
+ "@babel/helper-simple-access": "^7.16.0",
+ "@babel/helper-split-export-declaration": "^7.16.0",
+ "@babel/helper-validator-identifier": "^7.15.7",
+ "@babel/template": "^7.16.0",
+ "@babel/traverse": "^7.16.0",
+ "@babel/types": "^7.16.0"
+ },
+ "dependencies": {
+ "@babel/template": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmmirror.com/@babel/template/download/@babel/template-7.16.0.tgz?cache=0&sync_timestamp=1635561799475&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40babel%2Ftemplate%2Fdownload%2F%40babel%2Ftemplate-7.16.0.tgz",
+ "integrity": "sha1-0Wo16/TNdOICCDNW+rId2JNj3dY=",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.16.0",
+ "@babel/parser": "^7.16.0",
+ "@babel/types": "^7.16.0"
+ }
+ }
+ }
+ },
+ "@babel/helper-optimise-call-expression": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmmirror.com/@babel/helper-optimise-call-expression/download/@babel/helper-optimise-call-expression-7.16.0.tgz?cache=0&sync_timestamp=1635561802051&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40babel%2Fhelper-optimise-call-expression%2Fdownload%2F%40babel%2Fhelper-optimise-call-expression-7.16.0.tgz",
+ "integrity": "sha1-zs2xRdcMVAlrFWT46fEM19GTszg=",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.16.0"
+ }
+ },
+ "@babel/helper-plugin-utils": {
+ "version": "7.14.5",
+ "resolved": "https://registry.nlark.com/@babel/helper-plugin-utils/download/@babel/helper-plugin-utils-7.14.5.tgz",
+ "integrity": "sha1-WsgizpfuxGdBq3ClF5ceRDpwxak=",
+ "dev": true
+ },
+ "@babel/helper-remap-async-to-generator": {
+ "version": "7.16.4",
+ "resolved": "https://registry.npmmirror.com/@babel/helper-remap-async-to-generator/download/@babel/helper-remap-async-to-generator-7.16.4.tgz",
+ "integrity": "sha512-vGERmmhR+s7eH5Y/cp8PCVzj4XEjerq8jooMfxFdA5xVtAk9Sh4AQsrWgiErUEBjtGrBtOFKDUcWQFW4/dFwMA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-annotate-as-pure": "^7.16.0",
+ "@babel/helper-wrap-function": "^7.16.0",
+ "@babel/types": "^7.16.0"
+ },
+ "dependencies": {
+ "@babel/helper-annotate-as-pure": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmmirror.com/@babel/helper-annotate-as-pure/download/@babel/helper-annotate-as-pure-7.16.0.tgz?cache=0&sync_timestamp=1635561802239&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40babel%2Fhelper-annotate-as-pure%2Fdownload%2F%40babel%2Fhelper-annotate-as-pure-7.16.0.tgz",
+ "integrity": "sha1-mh8OvNpT2aLQAQjEzqzmpdXx8I0=",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.16.0"
+ }
+ }
+ }
+ },
+ "@babel/helper-replace-supers": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmmirror.com/@babel/helper-replace-supers/download/@babel/helper-replace-supers-7.16.0.tgz?cache=0&sync_timestamp=1635561801283&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40babel%2Fhelper-replace-supers%2Fdownload%2F%40babel%2Fhelper-replace-supers-7.16.0.tgz",
+ "integrity": "sha1-cwVejTz5vLqN21XK2T/tyGD2jxc=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-member-expression-to-functions": "^7.16.0",
+ "@babel/helper-optimise-call-expression": "^7.16.0",
+ "@babel/traverse": "^7.16.0",
+ "@babel/types": "^7.16.0"
+ }
+ },
+ "@babel/helper-simple-access": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmmirror.com/@babel/helper-simple-access/download/@babel/helper-simple-access-7.16.0.tgz?cache=0&sync_timestamp=1635561801108&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40babel%2Fhelper-simple-access%2Fdownload%2F%40babel%2Fhelper-simple-access-7.16.0.tgz",
+ "integrity": "sha1-IdaidiDjg+N1NM9sELugGab5BRc=",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.16.0"
+ }
+ },
+ "@babel/helper-skip-transparent-expression-wrappers": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmmirror.com/@babel/helper-skip-transparent-expression-wrappers/download/@babel/helper-skip-transparent-expression-wrappers-7.16.0.tgz",
+ "integrity": "sha1-DuM4gHAUfDrgUeSH7KPrsOLouwk=",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.16.0"
+ }
+ },
+ "@babel/helper-split-export-declaration": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmmirror.com/@babel/helper-split-export-declaration/download/@babel/helper-split-export-declaration-7.16.0.tgz?cache=0&sync_timestamp=1635561801459&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40babel%2Fhelper-split-export-declaration%2Fdownload%2F%40babel%2Fhelper-split-export-declaration-7.16.0.tgz",
+ "integrity": "sha1-KWcvQ2Y+k23zcKrrIr7ds7rsdDg=",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.16.0"
+ }
+ },
+ "@babel/helper-validator-identifier": {
+ "version": "7.15.7",
+ "resolved": "https://registry.nlark.com/@babel/helper-validator-identifier/download/@babel/helper-validator-identifier-7.15.7.tgz",
+ "integrity": "sha1-Ig35k7/pBKSmsCq08zhaXr9uI4k=",
+ "dev": true
+ },
+ "@babel/helper-validator-option": {
+ "version": "7.14.5",
+ "resolved": "https://registry.nlark.com/@babel/helper-validator-option/download/@babel/helper-validator-option-7.14.5.tgz",
+ "integrity": "sha1-bnKh//GNXfy4eOHmLxoCHEty1aM=",
+ "dev": true
+ },
+ "@babel/helper-wrap-function": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmmirror.com/@babel/helper-wrap-function/download/@babel/helper-wrap-function-7.16.0.tgz",
+ "integrity": "sha1-s88xivzndN/nW4Z2fNbWjzSC5Xw=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-function-name": "^7.16.0",
+ "@babel/template": "^7.16.0",
+ "@babel/traverse": "^7.16.0",
+ "@babel/types": "^7.16.0"
+ },
+ "dependencies": {
+ "@babel/template": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmmirror.com/@babel/template/download/@babel/template-7.16.0.tgz?cache=0&sync_timestamp=1635561799475&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40babel%2Ftemplate%2Fdownload%2F%40babel%2Ftemplate-7.16.0.tgz",
+ "integrity": "sha1-0Wo16/TNdOICCDNW+rId2JNj3dY=",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.16.0",
+ "@babel/parser": "^7.16.0",
+ "@babel/types": "^7.16.0"
+ }
+ }
+ }
+ },
+ "@babel/helpers": {
+ "version": "7.16.3",
+ "resolved": "https://registry.npmmirror.com/@babel/helpers/download/@babel/helpers-7.16.3.tgz?cache=0&sync_timestamp=1636495281937&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40babel%2Fhelpers%2Fdownload%2F%40babel%2Fhelpers-7.16.3.tgz",
+ "integrity": "sha512-Xn8IhDlBPhvYTvgewPKawhADichOsbkZuzN7qz2BusOM0brChsyXMDJvldWaYMMUNiCQdQzNEioXTp3sC8Nt8w==",
+ "dev": true,
+ "requires": {
+ "@babel/template": "^7.16.0",
+ "@babel/traverse": "^7.16.3",
+ "@babel/types": "^7.16.0"
+ },
+ "dependencies": {
+ "@babel/template": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmmirror.com/@babel/template/download/@babel/template-7.16.0.tgz?cache=0&sync_timestamp=1635561799475&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40babel%2Ftemplate%2Fdownload%2F%40babel%2Ftemplate-7.16.0.tgz",
+ "integrity": "sha1-0Wo16/TNdOICCDNW+rId2JNj3dY=",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.16.0",
+ "@babel/parser": "^7.16.0",
+ "@babel/types": "^7.16.0"
+ }
+ }
+ }
+ },
+ "@babel/highlight": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmmirror.com/@babel/highlight/download/@babel/highlight-7.16.0.tgz?cache=0&sync_timestamp=1635562526459&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40babel%2Fhighlight%2Fdownload%2F%40babel%2Fhighlight-7.16.0.tgz",
+ "integrity": "sha1-bOsysspLj182H7f9gh4/3fShclo=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-validator-identifier": "^7.15.7",
+ "chalk": "^2.0.0",
+ "js-tokens": "^4.0.0"
+ }
+ },
+ "@babel/parser": {
+ "version": "7.16.4",
+ "resolved": "https://registry.npmmirror.com/@babel/parser/download/@babel/parser-7.16.4.tgz",
+ "integrity": "sha512-6V0qdPUaiVHH3RtZeLIsc+6pDhbYzHR8ogA8w+f+Wc77DuXto19g2QUwveINoS34Uw+W8/hQDGJCx+i4n7xcng==",
+ "dev": true
+ },
+ "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmmirror.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/download/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.16.0.tgz",
+ "integrity": "sha1-NYly6qsAb16wgmGDsMk8vK8T4eI=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.14.5",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0",
+ "@babel/plugin-proposal-optional-chaining": "^7.16.0"
+ }
+ },
+ "@babel/plugin-proposal-async-generator-functions": {
+ "version": "7.14.7",
+ "resolved": "https://registry.npmmirror.com/@babel/plugin-proposal-async-generator-functions/download/@babel/plugin-proposal-async-generator-functions-7.14.7.tgz",
+ "integrity": "sha1-eEpIw9jtBz9lrc8wtXvL9sgRms4=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.14.5",
+ "@babel/helper-remap-async-to-generator": "^7.14.5",
+ "@babel/plugin-syntax-async-generators": "^7.8.4"
+ }
+ },
+ "@babel/plugin-proposal-class-properties": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmmirror.com/@babel/plugin-proposal-class-properties/download/@babel/plugin-proposal-class-properties-7.16.0.tgz",
+ "integrity": "sha1-wClhgmfd68coD6KG4PjKKieKLRo=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-create-class-features-plugin": "^7.16.0",
+ "@babel/helper-plugin-utils": "^7.14.5"
+ }
+ },
+ "@babel/plugin-proposal-class-static-block": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmmirror.com/@babel/plugin-proposal-class-static-block/download/@babel/plugin-proposal-class-static-block-7.16.0.tgz",
+ "integrity": "sha1-UpaULFZNgUTIPuo0fQqooLiRcOc=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-create-class-features-plugin": "^7.16.0",
+ "@babel/helper-plugin-utils": "^7.14.5",
+ "@babel/plugin-syntax-class-static-block": "^7.14.5"
+ }
+ },
+ "@babel/plugin-proposal-dynamic-import": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmmirror.com/@babel/plugin-proposal-dynamic-import/download/@babel/plugin-proposal-dynamic-import-7.16.0.tgz",
+ "integrity": "sha1-eD7KYdUFJiAvmylglUU5d+iGWfE=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.14.5",
+ "@babel/plugin-syntax-dynamic-import": "^7.8.3"
+ }
+ },
+ "@babel/plugin-proposal-export-namespace-from": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmmirror.com/@babel/plugin-proposal-export-namespace-from/download/@babel/plugin-proposal-export-namespace-from-7.16.0.tgz",
+ "integrity": "sha1-nAHe5Auda4R7ZWqvSjl2pxdA8iI=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.14.5",
+ "@babel/plugin-syntax-export-namespace-from": "^7.8.3"
+ }
+ },
+ "@babel/plugin-proposal-json-strings": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmmirror.com/@babel/plugin-proposal-json-strings/download/@babel/plugin-proposal-json-strings-7.16.0.tgz",
+ "integrity": "sha1-yuNale0dKn+inE3EFUC4SnLpqyU=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.14.5",
+ "@babel/plugin-syntax-json-strings": "^7.8.3"
+ }
+ },
+ "@babel/plugin-proposal-logical-assignment-operators": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmmirror.com/@babel/plugin-proposal-logical-assignment-operators/download/@babel/plugin-proposal-logical-assignment-operators-7.16.0.tgz",
+ "integrity": "sha1-pxG4zrP/3dPviNOknobb08x9s/0=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.14.5",
+ "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4"
+ }
+ },
+ "@babel/plugin-proposal-nullish-coalescing-operator": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmmirror.com/@babel/plugin-proposal-nullish-coalescing-operator/download/@babel/plugin-proposal-nullish-coalescing-operator-7.16.0.tgz",
+ "integrity": "sha1-ROHM4I/iQnSCz0RqkbtFFSjtBZY=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.14.5",
+ "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3"
+ }
+ },
+ "@babel/plugin-proposal-numeric-separator": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmmirror.com/@babel/plugin-proposal-numeric-separator/download/@babel/plugin-proposal-numeric-separator-7.16.0.tgz",
+ "integrity": "sha1-XUGOT7v4ubfQMSXTpScwQzo3NzQ=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.14.5",
+ "@babel/plugin-syntax-numeric-separator": "^7.10.4"
+ }
+ },
+ "@babel/plugin-proposal-object-rest-spread": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmmirror.com/@babel/plugin-proposal-object-rest-spread/download/@babel/plugin-proposal-object-rest-spread-7.16.0.tgz",
+ "integrity": "sha1-X7MvbZJNbmcSgQNipg4SomCYcuY=",
+ "dev": true,
+ "requires": {
+ "@babel/compat-data": "^7.16.0",
+ "@babel/helper-compilation-targets": "^7.16.0",
+ "@babel/helper-plugin-utils": "^7.14.5",
+ "@babel/plugin-syntax-object-rest-spread": "^7.8.3",
+ "@babel/plugin-transform-parameters": "^7.16.0"
+ }
+ },
+ "@babel/plugin-proposal-optional-catch-binding": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmmirror.com/@babel/plugin-proposal-optional-catch-binding/download/@babel/plugin-proposal-optional-catch-binding-7.16.0.tgz",
+ "integrity": "sha1-WRAIWBGrTCiwDW6/+kqwJ00eXxY=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.14.5",
+ "@babel/plugin-syntax-optional-catch-binding": "^7.8.3"
+ }
+ },
+ "@babel/plugin-proposal-optional-chaining": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmmirror.com/@babel/plugin-proposal-optional-chaining/download/@babel/plugin-proposal-optional-chaining-7.16.0.tgz",
+ "integrity": "sha1-VtvDlwglaDYI6e+1XqgsKi1sjcA=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.14.5",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0",
+ "@babel/plugin-syntax-optional-chaining": "^7.8.3"
+ }
+ },
+ "@babel/plugin-proposal-private-methods": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmmirror.com/@babel/plugin-proposal-private-methods/download/@babel/plugin-proposal-private-methods-7.16.0.tgz",
+ "integrity": "sha1-tNr7nHF+QwHFd2sw0IDWODyJr/Y=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-create-class-features-plugin": "^7.16.0",
+ "@babel/helper-plugin-utils": "^7.14.5"
+ }
+ },
+ "@babel/plugin-proposal-private-property-in-object": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmmirror.com/@babel/plugin-proposal-private-property-in-object/download/@babel/plugin-proposal-private-property-in-object-7.16.0.tgz",
+ "integrity": "sha1-aek1ssXHnSSIES2IbwxOJ5D+528=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-annotate-as-pure": "^7.16.0",
+ "@babel/helper-create-class-features-plugin": "^7.16.0",
+ "@babel/helper-plugin-utils": "^7.14.5",
+ "@babel/plugin-syntax-private-property-in-object": "^7.14.5"
+ },
+ "dependencies": {
+ "@babel/helper-annotate-as-pure": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmmirror.com/@babel/helper-annotate-as-pure/download/@babel/helper-annotate-as-pure-7.16.0.tgz?cache=0&sync_timestamp=1635561802239&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40babel%2Fhelper-annotate-as-pure%2Fdownload%2F%40babel%2Fhelper-annotate-as-pure-7.16.0.tgz",
+ "integrity": "sha1-mh8OvNpT2aLQAQjEzqzmpdXx8I0=",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.16.0"
+ }
+ }
+ }
+ },
+ "@babel/plugin-proposal-unicode-property-regex": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmmirror.com/@babel/plugin-proposal-unicode-property-regex/download/@babel/plugin-proposal-unicode-property-regex-7.16.0.tgz",
+ "integrity": "sha1-iQSC38XqN45C4Zpx5wlyjKvxhhI=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-create-regexp-features-plugin": "^7.16.0",
+ "@babel/helper-plugin-utils": "^7.14.5"
+ }
+ },
+ "@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-class-properties": {
+ "version": "7.12.13",
+ "resolved": "https://registry.nlark.com/@babel/plugin-syntax-class-properties/download/@babel/plugin-syntax-class-properties-7.12.13.tgz",
+ "integrity": "sha1-tcmHJ0xKOoK4lxR5aTGmtTVErhA=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.12.13"
+ }
+ },
+ "@babel/plugin-syntax-class-static-block": {
+ "version": "7.14.5",
+ "resolved": "https://registry.nlark.com/@babel/plugin-syntax-class-static-block/download/@babel/plugin-syntax-class-static-block-7.14.5.tgz",
+ "integrity": "sha1-GV34mxRrS3izv4l/16JXyEZZ1AY=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.14.5"
+ }
+ },
+ "@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-export-namespace-from": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-export-namespace-from/download/@babel/plugin-syntax-export-namespace-from-7.8.3.tgz",
+ "integrity": "sha1-AolkqbqA28CUyRXEh618TnpmRlo=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.3"
+ }
+ },
+ "@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-logical-assignment-operators": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-logical-assignment-operators/download/@babel/plugin-syntax-logical-assignment-operators-7.10.4.tgz",
+ "integrity": "sha1-ypHvRjA1MESLkGZSusLp/plB9pk=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.10.4"
+ }
+ },
+ "@babel/plugin-syntax-nullish-coalescing-operator": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-nullish-coalescing-operator/download/@babel/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz",
+ "integrity": "sha1-Fn7XA2iIYIH3S1w2xlqIwDtm0ak=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ }
+ },
+ "@babel/plugin-syntax-numeric-separator": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-numeric-separator/download/@babel/plugin-syntax-numeric-separator-7.10.4.tgz",
+ "integrity": "sha1-ubBws+M1cM2f0Hun+pHA3Te5r5c=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.10.4"
+ }
+ },
+ "@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-optional-chaining": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-optional-chaining/download/@babel/plugin-syntax-optional-chaining-7.8.3.tgz",
+ "integrity": "sha1-T2nCq5UWfgGAzVM2YT+MV4j31Io=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ }
+ },
+ "@babel/plugin-syntax-private-property-in-object": {
+ "version": "7.14.5",
+ "resolved": "https://registry.nlark.com/@babel/plugin-syntax-private-property-in-object/download/@babel/plugin-syntax-private-property-in-object-7.14.5.tgz",
+ "integrity": "sha1-DcZnHsDqIrbpShEU+FeXDNOd4a0=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.14.5"
+ }
+ },
+ "@babel/plugin-syntax-top-level-await": {
+ "version": "7.14.5",
+ "resolved": "https://registry.nlark.com/@babel/plugin-syntax-top-level-await/download/@babel/plugin-syntax-top-level-await-7.14.5.tgz",
+ "integrity": "sha1-wc/a3DWmRiQAAfBhOCR7dBw02Uw=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.14.5"
+ }
+ },
+ "@babel/plugin-transform-arrow-functions": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-arrow-functions/download/@babel/plugin-transform-arrow-functions-7.16.0.tgz",
+ "integrity": "sha1-lRcG+LRJyDTtB71HTAkkyUS5Wo4=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.14.5"
+ }
+ },
+ "@babel/plugin-transform-async-to-generator": {
+ "version": "7.14.5",
+ "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-async-to-generator/download/@babel/plugin-transform-async-to-generator-7.14.5.tgz",
+ "integrity": "sha1-cseJCE2PIJSsuUVjOUPvhEPTnmc=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-module-imports": "^7.14.5",
+ "@babel/helper-plugin-utils": "^7.14.5",
+ "@babel/helper-remap-async-to-generator": "^7.14.5"
+ }
+ },
+ "@babel/plugin-transform-block-scoped-functions": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-block-scoped-functions/download/@babel/plugin-transform-block-scoped-functions-7.16.0.tgz",
+ "integrity": "sha1-xhh2MjOtAoR4BavKxMNFzp3nFF0=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.14.5"
+ }
+ },
+ "@babel/plugin-transform-block-scoping": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-block-scoping/download/@babel/plugin-transform-block-scoping-7.16.0.tgz",
+ "integrity": "sha1-vPQz+0gv6MPTtOimaxxKjnfTfBY=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.14.5"
+ }
+ },
+ "@babel/plugin-transform-classes": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-classes/download/@babel/plugin-transform-classes-7.16.0.tgz",
+ "integrity": "sha1-VM9f8LIkLGVz11PNS/xwd6iygvU=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-annotate-as-pure": "^7.16.0",
+ "@babel/helper-function-name": "^7.16.0",
+ "@babel/helper-optimise-call-expression": "^7.16.0",
+ "@babel/helper-plugin-utils": "^7.14.5",
+ "@babel/helper-replace-supers": "^7.16.0",
+ "@babel/helper-split-export-declaration": "^7.16.0",
+ "globals": "^11.1.0"
+ },
+ "dependencies": {
+ "@babel/helper-annotate-as-pure": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmmirror.com/@babel/helper-annotate-as-pure/download/@babel/helper-annotate-as-pure-7.16.0.tgz?cache=0&sync_timestamp=1635561802239&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40babel%2Fhelper-annotate-as-pure%2Fdownload%2F%40babel%2Fhelper-annotate-as-pure-7.16.0.tgz",
+ "integrity": "sha1-mh8OvNpT2aLQAQjEzqzmpdXx8I0=",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.16.0"
+ }
+ }
+ }
+ },
+ "@babel/plugin-transform-computed-properties": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-computed-properties/download/@babel/plugin-transform-computed-properties-7.16.0.tgz",
+ "integrity": "sha1-4MOFUH0h4bCwdtZr7W1SMbhRELc=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.14.5"
+ }
+ },
+ "@babel/plugin-transform-destructuring": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-destructuring/download/@babel/plugin-transform-destructuring-7.16.0.tgz",
+ "integrity": "sha1-rT1+dFhK1epOrbHmZCFGxZDe4zw=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.14.5"
+ }
+ },
+ "@babel/plugin-transform-dotall-regex": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-dotall-regex/download/@babel/plugin-transform-dotall-regex-7.16.0.tgz",
+ "integrity": "sha1-ULqwDBCEthYtClioGAMc9XeY4G8=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-create-regexp-features-plugin": "^7.16.0",
+ "@babel/helper-plugin-utils": "^7.14.5"
+ }
+ },
+ "@babel/plugin-transform-duplicate-keys": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-duplicate-keys/download/@babel/plugin-transform-duplicate-keys-7.16.0.tgz",
+ "integrity": "sha1-i8LiGBPj6J5eW/O2CqX8RYV1oXY=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.14.5"
+ }
+ },
+ "@babel/plugin-transform-exponentiation-operator": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-exponentiation-operator/download/@babel/plugin-transform-exponentiation-operator-7.16.0.tgz",
+ "integrity": "sha1-oYDNKIHjUzzvnTkB5I2tD77/S+Q=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-builder-binary-assignment-operator-visitor": "^7.16.0",
+ "@babel/helper-plugin-utils": "^7.14.5"
+ }
+ },
+ "@babel/plugin-transform-for-of": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-for-of/download/@babel/plugin-transform-for-of-7.16.0.tgz",
+ "integrity": "sha1-96us7RVSYOJGE1m7x8ckispea9I=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.14.5"
+ }
+ },
+ "@babel/plugin-transform-function-name": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-function-name/download/@babel/plugin-transform-function-name-7.16.0.tgz",
+ "integrity": "sha1-AuNpnChMYmIjZZn3UQZcXV8fQA4=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-function-name": "^7.16.0",
+ "@babel/helper-plugin-utils": "^7.14.5"
+ }
+ },
+ "@babel/plugin-transform-literals": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-literals/download/@babel/plugin-transform-literals-7.16.0.tgz",
+ "integrity": "sha1-eXEeZw/86zG9KYIp1Q82IfeYDKw=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.14.5"
+ }
+ },
+ "@babel/plugin-transform-member-expression-literals": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-member-expression-literals/download/@babel/plugin-transform-member-expression-literals-7.16.0.tgz",
+ "integrity": "sha1-UlG0zOAer4MUQD0hrtsmnXn15ks=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.14.5"
+ }
+ },
+ "@babel/plugin-transform-modules-amd": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-modules-amd/download/@babel/plugin-transform-modules-amd-7.16.0.tgz",
+ "integrity": "sha1-CavUHhjc9P1HnFmMHO97056xM34=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-module-transforms": "^7.16.0",
+ "@babel/helper-plugin-utils": "^7.14.5",
+ "babel-plugin-dynamic-import-node": "^2.3.3"
+ }
+ },
+ "@babel/plugin-transform-modules-commonjs": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-modules-commonjs/download/@babel/plugin-transform-modules-commonjs-7.16.0.tgz",
+ "integrity": "sha1-rdWOY4yN3Eh1vZqey1xZRhP2ySI=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-module-transforms": "^7.16.0",
+ "@babel/helper-plugin-utils": "^7.14.5",
+ "@babel/helper-simple-access": "^7.16.0",
+ "babel-plugin-dynamic-import-node": "^2.3.3"
+ }
+ },
+ "@babel/plugin-transform-modules-systemjs": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-modules-systemjs/download/@babel/plugin-transform-modules-systemjs-7.16.0.tgz",
+ "integrity": "sha1-qSzyQK/rYF9MoWZwRTAkQl5CHqQ=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-hoist-variables": "^7.16.0",
+ "@babel/helper-module-transforms": "^7.16.0",
+ "@babel/helper-plugin-utils": "^7.14.5",
+ "@babel/helper-validator-identifier": "^7.15.7",
+ "babel-plugin-dynamic-import-node": "^2.3.3"
+ }
+ },
+ "@babel/plugin-transform-modules-umd": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-modules-umd/download/@babel/plugin-transform-modules-umd-7.16.0.tgz",
+ "integrity": "sha1-GV8mwq1tajkbcIgO/84YzmJeBqc=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-module-transforms": "^7.16.0",
+ "@babel/helper-plugin-utils": "^7.14.5"
+ }
+ },
+ "@babel/plugin-transform-named-capturing-groups-regex": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-named-capturing-groups-regex/download/@babel/plugin-transform-named-capturing-groups-regex-7.16.0.tgz",
+ "integrity": "sha1-09thzF1bl5hlWZZ81eqD5cMglso=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-create-regexp-features-plugin": "^7.16.0"
+ }
+ },
+ "@babel/plugin-transform-new-target": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-new-target/download/@babel/plugin-transform-new-target-7.16.0.tgz",
+ "integrity": "sha1-r4I6tXb3UiFaSZN3eaQcplglqzU=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.14.5"
+ }
+ },
+ "@babel/plugin-transform-object-super": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-object-super/download/@babel/plugin-transform-object-super-7.16.0.tgz",
+ "integrity": "sha1-+yDVgG3GSRoGKWrBTqjo1v7dpys=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.14.5",
+ "@babel/helper-replace-supers": "^7.16.0"
+ }
+ },
+ "@babel/plugin-transform-parameters": {
+ "version": "7.16.3",
+ "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-parameters/download/@babel/plugin-transform-parameters-7.16.3.tgz?cache=0&sync_timestamp=1636495301748&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40babel%2Fplugin-transform-parameters%2Fdownload%2F%40babel%2Fplugin-transform-parameters-7.16.3.tgz",
+ "integrity": "sha512-3MaDpJrOXT1MZ/WCmkOFo7EtmVVC8H4EUZVrHvFOsmwkk4lOjQj8rzv8JKUZV4YoQKeoIgk07GO+acPU9IMu/w==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.14.5"
+ }
+ },
+ "@babel/plugin-transform-property-literals": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-property-literals/download/@babel/plugin-transform-property-literals-7.16.0.tgz",
+ "integrity": "sha1-qVxVIYmpagAFn2d23E4A42kMeNE=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.14.5"
+ }
+ },
+ "@babel/plugin-transform-regenerator": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-regenerator/download/@babel/plugin-transform-regenerator-7.16.0.tgz",
+ "integrity": "sha1-6u5CLISwIy0Drqfbmcl97q9hJaQ=",
+ "dev": true,
+ "requires": {
+ "regenerator-transform": "^0.14.2"
+ }
+ },
+ "@babel/plugin-transform-reserved-words": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-reserved-words/download/@babel/plugin-transform-reserved-words-7.16.0.tgz",
+ "integrity": "sha1-//S53LGeEmGTlL2hctFPLQTAN5w=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.14.5"
+ }
+ },
+ "@babel/plugin-transform-runtime": {
+ "version": "7.14.5",
+ "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-runtime/download/@babel/plugin-transform-runtime-7.14.5.tgz",
+ "integrity": "sha1-MEkdrUnGBZ+Pj6XuiJagCJ6YdSM=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-module-imports": "^7.14.5",
+ "@babel/helper-plugin-utils": "^7.14.5",
+ "babel-plugin-polyfill-corejs2": "^0.2.2",
+ "babel-plugin-polyfill-corejs3": "^0.2.2",
+ "babel-plugin-polyfill-regenerator": "^0.2.2",
+ "semver": "^6.3.0"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz?cache=0&sync_timestamp=1616463540350&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-6.3.0.tgz",
+ "integrity": "sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0=",
+ "dev": true
+ }
+ }
+ },
+ "@babel/plugin-transform-shorthand-properties": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-shorthand-properties/download/@babel/plugin-transform-shorthand-properties-7.16.0.tgz",
+ "integrity": "sha1-CQNy4xQffMMk7XCz2vU3nfL6OE0=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.14.5"
+ }
+ },
+ "@babel/plugin-transform-spread": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-spread/download/@babel/plugin-transform-spread-7.16.0.tgz",
+ "integrity": "sha1-0hygmbvVOrMHqGIeAZp70PQM3Ps=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.14.5",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0"
+ }
+ },
+ "@babel/plugin-transform-sticky-regex": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-sticky-regex/download/@babel/plugin-transform-sticky-regex-7.16.0.tgz",
+ "integrity": "sha1-w16jGgLYa+SF9qpRAYS2d6kXOP0=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.14.5"
+ }
+ },
+ "@babel/plugin-transform-template-literals": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-template-literals/download/@babel/plugin-transform-template-literals-7.16.0.tgz",
+ "integrity": "sha1-qOztOo57ji1A7E7EVIpFkSYw0wI=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.14.5"
+ }
+ },
+ "@babel/plugin-transform-typeof-symbol": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-typeof-symbol/download/@babel/plugin-transform-typeof-symbol-7.16.0.tgz",
+ "integrity": "sha1-ixmiRMb4ydZo3Kam91Stbq0RKPI=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.14.5"
+ }
+ },
+ "@babel/plugin-transform-unicode-escapes": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-unicode-escapes/download/@babel/plugin-transform-unicode-escapes-7.16.0.tgz",
+ "integrity": "sha1-GjVAZLTEVmOjIzT0b6DPYQC1sfM=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.14.5"
+ }
+ },
+ "@babel/plugin-transform-unicode-regex": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-unicode-regex/download/@babel/plugin-transform-unicode-regex-7.16.0.tgz",
+ "integrity": "sha1-KTuAlQF3yMha7eh87ygCWfuZVAI=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-create-regexp-features-plugin": "^7.16.0",
+ "@babel/helper-plugin-utils": "^7.14.5"
+ }
+ },
+ "@babel/preset-env": {
+ "version": "7.14.8",
+ "resolved": "https://registry.npmmirror.com/@babel/preset-env/download/@babel/preset-env-7.14.8.tgz",
+ "integrity": "sha1-JUlC9cqAzKvPuyqfUkx0vKV0AFs=",
+ "dev": true,
+ "requires": {
+ "@babel/compat-data": "^7.14.7",
+ "@babel/helper-compilation-targets": "^7.14.5",
+ "@babel/helper-plugin-utils": "^7.14.5",
+ "@babel/helper-validator-option": "^7.14.5",
+ "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.14.5",
+ "@babel/plugin-proposal-async-generator-functions": "^7.14.7",
+ "@babel/plugin-proposal-class-properties": "^7.14.5",
+ "@babel/plugin-proposal-class-static-block": "^7.14.5",
+ "@babel/plugin-proposal-dynamic-import": "^7.14.5",
+ "@babel/plugin-proposal-export-namespace-from": "^7.14.5",
+ "@babel/plugin-proposal-json-strings": "^7.14.5",
+ "@babel/plugin-proposal-logical-assignment-operators": "^7.14.5",
+ "@babel/plugin-proposal-nullish-coalescing-operator": "^7.14.5",
+ "@babel/plugin-proposal-numeric-separator": "^7.14.5",
+ "@babel/plugin-proposal-object-rest-spread": "^7.14.7",
+ "@babel/plugin-proposal-optional-catch-binding": "^7.14.5",
+ "@babel/plugin-proposal-optional-chaining": "^7.14.5",
+ "@babel/plugin-proposal-private-methods": "^7.14.5",
+ "@babel/plugin-proposal-private-property-in-object": "^7.14.5",
+ "@babel/plugin-proposal-unicode-property-regex": "^7.14.5",
+ "@babel/plugin-syntax-async-generators": "^7.8.4",
+ "@babel/plugin-syntax-class-properties": "^7.12.13",
+ "@babel/plugin-syntax-class-static-block": "^7.14.5",
+ "@babel/plugin-syntax-dynamic-import": "^7.8.3",
+ "@babel/plugin-syntax-export-namespace-from": "^7.8.3",
+ "@babel/plugin-syntax-json-strings": "^7.8.3",
+ "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4",
+ "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3",
+ "@babel/plugin-syntax-numeric-separator": "^7.10.4",
+ "@babel/plugin-syntax-object-rest-spread": "^7.8.3",
+ "@babel/plugin-syntax-optional-catch-binding": "^7.8.3",
+ "@babel/plugin-syntax-optional-chaining": "^7.8.3",
+ "@babel/plugin-syntax-private-property-in-object": "^7.14.5",
+ "@babel/plugin-syntax-top-level-await": "^7.14.5",
+ "@babel/plugin-transform-arrow-functions": "^7.14.5",
+ "@babel/plugin-transform-async-to-generator": "^7.14.5",
+ "@babel/plugin-transform-block-scoped-functions": "^7.14.5",
+ "@babel/plugin-transform-block-scoping": "^7.14.5",
+ "@babel/plugin-transform-classes": "^7.14.5",
+ "@babel/plugin-transform-computed-properties": "^7.14.5",
+ "@babel/plugin-transform-destructuring": "^7.14.7",
+ "@babel/plugin-transform-dotall-regex": "^7.14.5",
+ "@babel/plugin-transform-duplicate-keys": "^7.14.5",
+ "@babel/plugin-transform-exponentiation-operator": "^7.14.5",
+ "@babel/plugin-transform-for-of": "^7.14.5",
+ "@babel/plugin-transform-function-name": "^7.14.5",
+ "@babel/plugin-transform-literals": "^7.14.5",
+ "@babel/plugin-transform-member-expression-literals": "^7.14.5",
+ "@babel/plugin-transform-modules-amd": "^7.14.5",
+ "@babel/plugin-transform-modules-commonjs": "^7.14.5",
+ "@babel/plugin-transform-modules-systemjs": "^7.14.5",
+ "@babel/plugin-transform-modules-umd": "^7.14.5",
+ "@babel/plugin-transform-named-capturing-groups-regex": "^7.14.7",
+ "@babel/plugin-transform-new-target": "^7.14.5",
+ "@babel/plugin-transform-object-super": "^7.14.5",
+ "@babel/plugin-transform-parameters": "^7.14.5",
+ "@babel/plugin-transform-property-literals": "^7.14.5",
+ "@babel/plugin-transform-regenerator": "^7.14.5",
+ "@babel/plugin-transform-reserved-words": "^7.14.5",
+ "@babel/plugin-transform-shorthand-properties": "^7.14.5",
+ "@babel/plugin-transform-spread": "^7.14.6",
+ "@babel/plugin-transform-sticky-regex": "^7.14.5",
+ "@babel/plugin-transform-template-literals": "^7.14.5",
+ "@babel/plugin-transform-typeof-symbol": "^7.14.5",
+ "@babel/plugin-transform-unicode-escapes": "^7.14.5",
+ "@babel/plugin-transform-unicode-regex": "^7.14.5",
+ "@babel/preset-modules": "^0.1.4",
+ "@babel/types": "^7.14.8",
+ "babel-plugin-polyfill-corejs2": "^0.2.2",
+ "babel-plugin-polyfill-corejs3": "^0.2.2",
+ "babel-plugin-polyfill-regenerator": "^0.2.2",
+ "core-js-compat": "^3.15.0",
+ "semver": "^6.3.0"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz?cache=0&sync_timestamp=1616463540350&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-6.3.0.tgz",
+ "integrity": "sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0=",
+ "dev": true
+ }
+ }
+ },
+ "@babel/preset-modules": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmmirror.com/@babel/preset-modules/download/@babel/preset-modules-0.1.5.tgz",
+ "integrity": "sha1-75Odbn8miCfhhBY43G/5VRXhFdk=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/plugin-proposal-unicode-property-regex": "^7.4.4",
+ "@babel/plugin-transform-dotall-regex": "^7.4.4",
+ "@babel/types": "^7.4.4",
+ "esutils": "^2.0.2"
+ }
+ },
+ "@babel/runtime": {
+ "version": "7.14.8",
+ "resolved": "https://registry.npmmirror.com/@babel/runtime/download/@babel/runtime-7.14.8.tgz?cache=0&sync_timestamp=1636495277831&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40babel%2Fruntime%2Fdownload%2F%40babel%2Fruntime-7.14.8.tgz",
+ "integrity": "sha1-cRmlb0IQGIUmlCkLn5FICXORtEY=",
+ "dev": true,
+ "requires": {
+ "regenerator-runtime": "^0.13.4"
+ }
+ },
+ "@babel/runtime-corejs3": {
+ "version": "7.16.3",
+ "resolved": "https://registry.npmmirror.com/@babel/runtime-corejs3/download/@babel/runtime-corejs3-7.16.3.tgz?cache=0&sync_timestamp=1636495298551&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40babel%2Fruntime-corejs3%2Fdownload%2F%40babel%2Fruntime-corejs3-7.16.3.tgz",
+ "integrity": "sha512-IAdDC7T0+wEB4y2gbIL0uOXEYpiZEeuFUTVbdGq+UwCcF35T/tS8KrmMomEwEc5wBbyfH3PJVpTSUqrhPDXFcQ==",
+ "dev": true,
+ "requires": {
+ "core-js-pure": "^3.19.0",
+ "regenerator-runtime": "^0.13.4"
+ }
+ },
+ "@babel/template": {
+ "version": "7.14.5",
+ "resolved": "https://registry.npmmirror.com/@babel/template/download/@babel/template-7.14.5.tgz?cache=0&sync_timestamp=1635561799475&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40babel%2Ftemplate%2Fdownload%2F%40babel%2Ftemplate-7.14.5.tgz",
+ "integrity": "sha1-qbydizM1T/blWpxg0RCSAKaJdPQ=",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.14.5",
+ "@babel/parser": "^7.14.5",
+ "@babel/types": "^7.14.5"
+ }
+ },
+ "@babel/traverse": {
+ "version": "7.16.3",
+ "resolved": "https://registry.npmmirror.com/@babel/traverse/download/@babel/traverse-7.16.3.tgz?cache=0&sync_timestamp=1636495280926&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40babel%2Ftraverse%2Fdownload%2F%40babel%2Ftraverse-7.16.3.tgz",
+ "integrity": "sha512-eolumr1vVMjqevCpwVO99yN/LoGL0EyHiLO5I043aYQvwOJ9eR5UsZSClHVCzfhBduMAsSzgA/6AyqPjNayJag==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.16.0",
+ "@babel/generator": "^7.16.0",
+ "@babel/helper-function-name": "^7.16.0",
+ "@babel/helper-hoist-variables": "^7.16.0",
+ "@babel/helper-split-export-declaration": "^7.16.0",
+ "@babel/parser": "^7.16.3",
+ "@babel/types": "^7.16.0",
+ "debug": "^4.1.0",
+ "globals": "^11.1.0"
+ },
+ "dependencies": {
+ "@babel/generator": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmmirror.com/@babel/generator/download/@babel/generator-7.16.0.tgz?cache=0&sync_timestamp=1635561809489&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40babel%2Fgenerator%2Fdownload%2F%40babel%2Fgenerator-7.16.0.tgz",
+ "integrity": "sha1-1A89HVB15i01ALzLZ/PaqKlSZbI=",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.16.0",
+ "jsesc": "^2.5.1",
+ "source-map": "^0.5.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/types": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmmirror.com/@babel/types/download/@babel/types-7.16.0.tgz?cache=0&sync_timestamp=1635561799958&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40babel%2Ftypes%2Fdownload%2F%40babel%2Ftypes-7.16.0.tgz",
+ "integrity": "sha1-2zsxOAT5aq3Qt3bEgj4SetZyibo=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-validator-identifier": "^7.15.7",
+ "to-fast-properties": "^2.0.0"
+ }
+ },
+ "@csstools/convert-colors": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npm.taobao.org/@csstools/convert-colors/download/@csstools/convert-colors-1.4.0.tgz",
+ "integrity": "sha1-rUldxBsS511YjG24uYNPCPoTHrc=",
+ "dev": true
+ },
+ "@ctrl/tinycolor": {
+ "version": "3.4.0",
+ "resolved": "https://registry.nlark.com/@ctrl/tinycolor/download/@ctrl/tinycolor-3.4.0.tgz",
+ "integrity": "sha1-w8WuVDyJfKqcKmhjC+01W+X5mQ8="
+ },
+ "@delon/abc": {
+ "version": "12.4.2",
+ "resolved": "https://registry.npmmirror.com/@delon/abc/download/@delon/abc-12.4.2.tgz",
+ "integrity": "sha512-K38WW6n7Kp5hYNrPoDfblJcPb5XF4apvbHlR76FLtkCjSpvNzRIKXi0DJJzmRchBOSHPvUYFk5EUGbgQSDe75w==",
+ "requires": {
+ "@delon/acl": "^12.4.2",
+ "@delon/theme": "^12.4.2",
+ "@delon/util": "^12.4.2",
+ "file-saver": "^2.0.5",
+ "isutf8": "^3.1.1",
+ "jszip": "^3.7.1",
+ "ngx-countdown": "^12.0.1",
+ "tslib": "^2.2.0",
+ "xlsx": "^0.17.1"
+ }
+ },
+ "@delon/acl": {
+ "version": "12.4.2",
+ "resolved": "https://registry.npmmirror.com/@delon/acl/download/@delon/acl-12.4.2.tgz",
+ "integrity": "sha512-EPGwYZjZV05xZR9tRg5i1G00Zyp/VH8nO3H+Kze8fCrQsfc5tAxYXAFzpV3s003rzYQrW1mWLEge73IDVjIs1Q==",
+ "requires": {
+ "@delon/util": "^12.4.2",
+ "tslib": "^2.2.0"
+ }
+ },
+ "@delon/auth": {
+ "version": "12.4.2",
+ "resolved": "https://registry.npmmirror.com/@delon/auth/download/@delon/auth-12.4.2.tgz",
+ "integrity": "sha512-2g+rQXrebAn5qDjM++GloPqRxVgxfy+kFcRKnpC8nOwoyIb9vDDf0sqcFUioLqugmJ7d7fGdROWCBuBWB5NMJQ==",
+ "requires": {
+ "@delon/util": "^12.4.2",
+ "tslib": "^2.2.0"
+ }
+ },
+ "@delon/cache": {
+ "version": "12.4.2",
+ "resolved": "https://registry.npmmirror.com/@delon/cache/download/@delon/cache-12.4.2.tgz",
+ "integrity": "sha512-n9iu6lg/jdaDqRN1J3CQNz9heigH/xrHQYsHkjOWbwASA6rssP12ThvIvcuEClhKpxQrdCx6rGdg26TP1JSOvA==",
+ "requires": {
+ "@delon/util": "^12.4.2",
+ "tslib": "^2.2.0"
+ }
+ },
+ "@delon/chart": {
+ "version": "12.4.2",
+ "resolved": "https://registry.npmmirror.com/@delon/chart/download/@delon/chart-12.4.2.tgz",
+ "integrity": "sha512-Z4lzKqEJfhePFWPSL0s2DUedOLtNj/2kcAvBqTtGW+VAzs7bYC+izIrHFNR03Qr0+DJtFeZk6kuuD2jhpfszzQ==",
+ "requires": {
+ "@antv/data-set": "^0.11.8",
+ "@antv/g2": "^4.1.24",
+ "@delon/theme": "^12.4.2",
+ "@delon/util": "^12.4.2",
+ "echarts": "^5.1.2",
+ "tslib": "^2.2.0"
+ }
+ },
+ "@delon/form": {
+ "version": "12.4.2",
+ "resolved": "https://registry.npmmirror.com/@delon/form/download/@delon/form-12.4.2.tgz",
+ "integrity": "sha512-8/YCWqBhAdI8jGpfMrwgLDvSLtmXar9Y6iRq7eHAgD1PhF12vB4x0tIZtwU2AVWp7VOCC5ySKX003N2LYQkHTw==",
+ "requires": {
+ "@delon/acl": "^12.4.2",
+ "@delon/theme": "^12.4.2",
+ "@delon/util": "^12.4.2",
+ "ajv": "^8.6.2",
+ "ajv-formats": "^2.1.1",
+ "tslib": "^2.2.0"
+ }
+ },
+ "@delon/mock": {
+ "version": "12.4.2",
+ "resolved": "https://registry.npmmirror.com/@delon/mock/download/@delon/mock-12.4.2.tgz",
+ "integrity": "sha512-DF1cPvajHgg09dlvzsbjWGrs3+9imMZgvytWky7K2UNhWc8Yr1240Qhq1vyDNiJMp0ZfMCqTPk9B9PBH+kxp3Q==",
+ "requires": {
+ "@delon/util": "^12.4.2",
+ "@types/mockjs": "^1.0.4",
+ "mockjs": "^1.1.0",
+ "tslib": "^2.2.0"
+ }
+ },
+ "@delon/testing": {
+ "version": "12.4.2",
+ "resolved": "https://registry.npmmirror.com/@delon/testing/download/@delon/testing-12.4.2.tgz",
+ "integrity": "sha512-3LiUmHZMZfH/EfiYC8D1OJrHhvyhqD5n1RWQ7Fhqn8RSk7lODRU9dehiVWzJXutHkPVjktdsiOGJvJSq7wfPaw==",
+ "dev": true,
+ "requires": {
+ "tslib": "^2.2.0"
+ }
+ },
+ "@delon/theme": {
+ "version": "12.4.2",
+ "resolved": "https://registry.npmmirror.com/@delon/theme/download/@delon/theme-12.4.2.tgz",
+ "integrity": "sha512-SV2TnUMv1rHWEJ2w9SnFCryv5HHt2Bh0nL/YpqkFw3XzB/FaOXFvKsL/iM6G/vwC5/ms6E/81STSN6sVkPEfyQ==",
+ "requires": {
+ "@delon/acl": "^12.4.2",
+ "@delon/util": "^12.4.2",
+ "ng-zorro-antd": "^12.0.1",
+ "tslib": "^2.2.0"
+ }
+ },
+ "@delon/util": {
+ "version": "12.4.2",
+ "resolved": "https://registry.npmmirror.com/@delon/util/download/@delon/util-12.4.2.tgz",
+ "integrity": "sha512-dIF2Gkgj/XkFaAe4MGzSM5M+fyVR3BGEDfragADb3/2DiMPqMiiUPgPVi3e/cqdRuBWdkj2yMtIbI3l5aM3AeQ==",
+ "requires": {
+ "extend": "^3.0.2",
+ "tslib": "^2.2.0"
+ }
+ },
+ "@discoveryjs/json-ext": {
+ "version": "0.5.3",
+ "resolved": "https://registry.nlark.com/@discoveryjs/json-ext/download/@discoveryjs/json-ext-0.5.3.tgz",
+ "integrity": "sha1-kEIPn5xtOYfxdqGafY52QnGi9V0=",
+ "dev": true
+ },
+ "@es-joy/jsdoccomment": {
+ "version": "0.10.8",
+ "resolved": "https://registry.npmmirror.com/@es-joy/jsdoccomment/download/@es-joy/jsdoccomment-0.10.8.tgz",
+ "integrity": "sha1-sxUoh+JSRkEO1OpWmlWSbsE7KwU=",
+ "dev": true,
+ "requires": {
+ "comment-parser": "1.2.4",
+ "esquery": "^1.4.0",
+ "jsdoc-type-pratt-parser": "1.1.1"
+ },
+ "dependencies": {
+ "jsdoc-type-pratt-parser": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmmirror.com/jsdoc-type-pratt-parser/download/jsdoc-type-pratt-parser-1.1.1.tgz",
+ "integrity": "sha1-EP5eQJujjeIqSLVVWYlVom/wFg8=",
+ "dev": true
+ }
+ }
+ },
+ "@eslint/eslintrc": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmmirror.com/@eslint/eslintrc/download/@eslint/eslintrc-0.4.3.tgz",
+ "integrity": "sha1-nkKYHvA1vrPdSa3ResuW6P9vOUw=",
+ "dev": true,
+ "requires": {
+ "ajv": "^6.12.4",
+ "debug": "^4.1.1",
+ "espree": "^7.3.0",
+ "globals": "^13.9.0",
+ "ignore": "^4.0.6",
+ "import-fresh": "^3.2.1",
+ "js-yaml": "^3.13.1",
+ "minimatch": "^3.0.4",
+ "strip-json-comments": "^3.1.1"
+ },
+ "dependencies": {
+ "ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmmirror.com/ajv/download/ajv-6.12.6.tgz?cache=0&sync_timestamp=1637522259668&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fajv%2Fdownload%2Fajv-6.12.6.tgz",
+ "integrity": "sha1-uvWmLoArB9l3A0WG+MO69a3ybfQ=",
+ "dev": true,
+ "requires": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ }
+ },
+ "globals": {
+ "version": "13.12.0",
+ "resolved": "https://registry.npmmirror.com/globals/download/globals-13.12.0.tgz?cache=0&sync_timestamp=1635390798667&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fglobals%2Fdownload%2Fglobals-13.12.0.tgz",
+ "integrity": "sha1-TXM3YDBCMKAILtluIeXFZfiYCJ4=",
+ "dev": true,
+ "requires": {
+ "type-fest": "^0.20.2"
+ }
+ },
+ "ignore": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmmirror.com/ignore/download/ignore-4.0.6.tgz?cache=0&sync_timestamp=1635926632542&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fignore%2Fdownload%2Fignore-4.0.6.tgz",
+ "integrity": "sha1-dQ49tYYgh7RzfrrIIH/9HvJ7Jfw=",
+ "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
+ },
+ "type-fest": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmmirror.com/type-fest/download/type-fest-0.20.2.tgz?cache=0&sync_timestamp=1637149878210&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Ftype-fest%2Fdownload%2Ftype-fest-0.20.2.tgz",
+ "integrity": "sha1-G/IH9LKPkVg2ZstfvTJ4hzAc1fQ=",
+ "dev": true
+ }
+ }
+ },
+ "@exodus/schemasafe": {
+ "version": "1.0.0-rc.6",
+ "resolved": "https://registry.npmmirror.com/@exodus/schemasafe/download/@exodus/schemasafe-1.0.0-rc.6.tgz",
+ "integrity": "sha1-eYX2gVZM/0/667WJbrS+IK86rno=",
+ "dev": true
+ },
+ "@fullcalendar/common": {
+ "version": "5.10.1",
+ "resolved": "https://registry.npmmirror.com/@fullcalendar/common/download/@fullcalendar/common-5.10.1.tgz",
+ "integrity": "sha1-oBmVF0OFInekCV5Tb9dxb2+Fuao=",
+ "requires": {
+ "tslib": "^2.1.0"
+ }
+ },
+ "@fullcalendar/core": {
+ "version": "5.10.1",
+ "resolved": "https://registry.npmmirror.com/@fullcalendar/core/download/@fullcalendar/core-5.10.1.tgz",
+ "integrity": "sha1-BcdlPlAEFJpjvLA+nciwSRhspQs=",
+ "requires": {
+ "@fullcalendar/common": "~5.10.1",
+ "preact": "^10.0.5",
+ "tslib": "^2.1.0"
+ }
+ },
+ "@fullcalendar/daygrid": {
+ "version": "5.10.1",
+ "resolved": "https://registry.npmmirror.com/@fullcalendar/daygrid/download/@fullcalendar/daygrid-5.10.1.tgz",
+ "integrity": "sha1-ve5PWDZP2rYxsqv4tWCUq1d28gM=",
+ "requires": {
+ "@fullcalendar/common": "~5.10.1",
+ "tslib": "^2.1.0"
+ }
+ },
+ "@fullcalendar/interaction": {
+ "version": "5.10.1",
+ "resolved": "https://registry.npmmirror.com/@fullcalendar/interaction/download/@fullcalendar/interaction-5.10.1.tgz",
+ "integrity": "sha1-36dLXFC71WCOtQrqtuV5yNIMs2c=",
+ "requires": {
+ "@fullcalendar/common": "~5.10.1",
+ "tslib": "^2.1.0"
+ }
+ },
+ "@fullcalendar/list": {
+ "version": "5.10.1",
+ "resolved": "https://registry.npmmirror.com/@fullcalendar/list/download/@fullcalendar/list-5.10.1.tgz",
+ "integrity": "sha1-hQWq4JhFuC9b22JRvaD51jQu+dk=",
+ "requires": {
+ "@fullcalendar/common": "~5.10.1",
+ "tslib": "^2.1.0"
+ }
+ },
+ "@fullcalendar/timegrid": {
+ "version": "5.10.1",
+ "resolved": "https://registry.npmmirror.com/@fullcalendar/timegrid/download/@fullcalendar/timegrid-5.10.1.tgz",
+ "integrity": "sha1-+n/rkJv1merBRmuecMDVbODRrvw=",
+ "requires": {
+ "@fullcalendar/common": "~5.10.1",
+ "@fullcalendar/daygrid": "~5.10.1",
+ "tslib": "^2.1.0"
+ }
+ },
+ "@humanwhocodes/config-array": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmmirror.com/@humanwhocodes/config-array/download/@humanwhocodes/config-array-0.5.0.tgz",
+ "integrity": "sha1-FAeWfUxu7Nc4j4Os8er00Mbljvk=",
+ "dev": true,
+ "requires": {
+ "@humanwhocodes/object-schema": "^1.2.0",
+ "debug": "^4.1.1",
+ "minimatch": "^3.0.4"
+ }
+ },
+ "@humanwhocodes/object-schema": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmmirror.com/@humanwhocodes/object-schema/download/@humanwhocodes/object-schema-1.2.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40humanwhocodes%2Fobject-schema%2Fdownload%2F%40humanwhocodes%2Fobject-schema-1.2.1.tgz",
+ "integrity": "sha1-tSBSnsIdjllFoYUd/Rwy6U45/0U=",
+ "dev": true
+ },
+ "@istanbuljs/schema": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npm.taobao.org/@istanbuljs/schema/download/@istanbuljs/schema-0.1.3.tgz",
+ "integrity": "sha1-5F44TkuOwWvOL9kDr3hFD2v37Jg=",
+ "dev": true
+ },
+ "@jridgewell/resolve-uri": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmmirror.com/@jridgewell/resolve-uri/download/@jridgewell/resolve-uri-1.0.0.tgz",
+ "integrity": "sha1-P99XmPC0npAVWJb2KR3xhurAbIM=",
+ "dev": true
+ },
+ "@jsdevtools/coverage-istanbul-loader": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmmirror.com/@jsdevtools/coverage-istanbul-loader/download/@jsdevtools/coverage-istanbul-loader-3.0.5.tgz",
+ "integrity": "sha1-KkvGXQJx341ENZgttK812BdU7iY=",
+ "dev": true,
+ "requires": {
+ "convert-source-map": "^1.7.0",
+ "istanbul-lib-instrument": "^4.0.3",
+ "loader-utils": "^2.0.0",
+ "merge-source-map": "^1.1.0",
+ "schema-utils": "^2.7.0"
+ }
+ },
+ "@mrmlnc/readdir-enhanced": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npm.taobao.org/@mrmlnc/readdir-enhanced/download/@mrmlnc/readdir-enhanced-2.2.1.tgz",
+ "integrity": "sha1-UkryQNGjYFJ7cwR17PoTRKpUDd4=",
+ "dev": true,
+ "requires": {
+ "call-me-maybe": "^1.0.1",
+ "glob-to-regexp": "^0.3.0"
+ },
+ "dependencies": {
+ "glob-to-regexp": {
+ "version": "0.3.0",
+ "resolved": "https://registry.nlark.com/glob-to-regexp/download/glob-to-regexp-0.3.0.tgz",
+ "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=",
+ "dev": true
+ }
+ }
+ },
+ "@ng-util/lazy": {
+ "version": "11.2.0",
+ "resolved": "https://registry.npmmirror.com/@ng-util/lazy/download/@ng-util/lazy-11.2.0.tgz",
+ "integrity": "sha1-bASRAM2HQyIdK05rpo8OWaRORqo=",
+ "requires": {
+ "tslib": "^2.0.0"
+ }
+ },
+ "@ng-util/util": {
+ "version": "11.2.0",
+ "resolved": "https://registry.npmmirror.com/@ng-util/util/download/@ng-util/util-11.2.0.tgz",
+ "integrity": "sha1-cSnnS9aO51W82M1330b2MEKlY4g=",
+ "requires": {
+ "tslib": "^2.0.0"
+ }
+ },
+ "@ngtools/webpack": {
+ "version": "12.2.13",
+ "resolved": "https://registry.npmmirror.com/@ngtools/webpack/download/@ngtools/webpack-12.2.13.tgz",
+ "integrity": "sha1-RNcR7fo50XWi1lWqXG+ZaN/tzDU=",
+ "dev": true
+ },
+ "@nodelib/fs.scandir": {
+ "version": "2.1.5",
+ "resolved": "https://registry.nlark.com/@nodelib/fs.scandir/download/@nodelib/fs.scandir-2.1.5.tgz?cache=0&sync_timestamp=1622792655677&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40nodelib%2Ffs.scandir%2Fdownload%2F%40nodelib%2Ffs.scandir-2.1.5.tgz",
+ "integrity": "sha1-dhnC6yGyVIP20WdUi0z9WnSIw9U=",
+ "dev": true,
+ "requires": {
+ "@nodelib/fs.stat": "2.0.5",
+ "run-parallel": "^1.1.9"
+ }
+ },
+ "@nodelib/fs.stat": {
+ "version": "2.0.5",
+ "resolved": "https://registry.nlark.com/@nodelib/fs.stat/download/@nodelib/fs.stat-2.0.5.tgz",
+ "integrity": "sha1-W9Jir5Tp0lvR5xsF3u1Eh2oiLos=",
+ "dev": true
+ },
+ "@nodelib/fs.walk": {
+ "version": "1.2.8",
+ "resolved": "https://registry.nlark.com/@nodelib/fs.walk/download/@nodelib/fs.walk-1.2.8.tgz?cache=0&sync_timestamp=1625795692378&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40nodelib%2Ffs.walk%2Fdownload%2F%40nodelib%2Ffs.walk-1.2.8.tgz",
+ "integrity": "sha1-6Vc36LtnRt3t9pxVaVNJTxlv5po=",
+ "dev": true,
+ "requires": {
+ "@nodelib/fs.scandir": "2.1.5",
+ "fastq": "^1.6.0"
+ }
+ },
+ "@npmcli/git": {
+ "version": "2.1.0",
+ "resolved": "https://registry.nlark.com/@npmcli/git/download/@npmcli/git-2.1.0.tgz",
+ "integrity": "sha1-L7134UdTAkfTfzJZMNRXs+volPY=",
+ "dev": true,
+ "requires": {
+ "@npmcli/promise-spawn": "^1.3.2",
+ "lru-cache": "^6.0.0",
+ "mkdirp": "^1.0.4",
+ "npm-pick-manifest": "^6.1.1",
+ "promise-inflight": "^1.0.1",
+ "promise-retry": "^2.0.1",
+ "semver": "^7.3.5",
+ "which": "^2.0.2"
+ },
+ "dependencies": {
+ "which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npm.taobao.org/which/download/which-2.0.2.tgz",
+ "integrity": "sha1-fGqN0KY2oDJ+ELWckobu6T8/UbE=",
+ "dev": true,
+ "requires": {
+ "isexe": "^2.0.0"
+ }
+ }
+ }
+ },
+ "@npmcli/installed-package-contents": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npm.taobao.org/@npmcli/installed-package-contents/download/@npmcli/installed-package-contents-1.0.7.tgz",
+ "integrity": "sha1-q3QIxhR5EblwqKviYc5RIjKj9Po=",
+ "dev": true,
+ "requires": {
+ "npm-bundled": "^1.1.1",
+ "npm-normalize-package-bin": "^1.0.1"
+ }
+ },
+ "@npmcli/move-file": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npm.taobao.org/@npmcli/move-file/download/@npmcli/move-file-1.1.2.tgz",
+ "integrity": "sha1-GoLD43L3yuklPrZtclQ9a4aFxnQ=",
+ "dev": true,
+ "requires": {
+ "mkdirp": "^1.0.4",
+ "rimraf": "^3.0.2"
+ }
+ },
+ "@npmcli/node-gyp": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmmirror.com/@npmcli/node-gyp/download/@npmcli/node-gyp-1.0.3.tgz",
+ "integrity": "sha1-qRLmN0GP/F8ts3XpO4WDdpGkOjM=",
+ "dev": true
+ },
+ "@npmcli/promise-spawn": {
+ "version": "1.3.2",
+ "resolved": "https://registry.nlark.com/@npmcli/promise-spawn/download/@npmcli/promise-spawn-1.3.2.tgz",
+ "integrity": "sha1-QtTlao6SdPuhgNq8CupuOPKSdPU=",
+ "dev": true,
+ "requires": {
+ "infer-owner": "^1.0.4"
+ }
+ },
+ "@npmcli/run-script": {
+ "version": "1.8.6",
+ "resolved": "https://registry.npmmirror.com/@npmcli/run-script/download/@npmcli/run-script-1.8.6.tgz",
+ "integrity": "sha1-GDFIAqZmCw1Lqkw6/n8a052MKLc=",
+ "dev": true,
+ "requires": {
+ "@npmcli/node-gyp": "^1.0.2",
+ "@npmcli/promise-spawn": "^1.3.2",
+ "node-gyp": "^7.1.0",
+ "read-package-json-fast": "^2.0.1"
+ }
+ },
+ "@nrwl/devkit": {
+ "version": "12.10.0",
+ "resolved": "https://registry.npmmirror.com/@nrwl/devkit/download/@nrwl/devkit-12.10.0.tgz",
+ "integrity": "sha1-z0od+xA2ISGFVI1oKWrCbkmKQcQ=",
+ "dev": true,
+ "requires": {
+ "@nrwl/tao": "12.10.0",
+ "ejs": "^3.1.5",
+ "ignore": "^5.0.4",
+ "rxjs": "^6.5.4",
+ "semver": "7.3.4",
+ "tslib": "^2.0.0"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "7.3.4",
+ "resolved": "https://registry.npm.taobao.org/semver/download/semver-7.3.4.tgz?cache=0&sync_timestamp=1616463540350&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-7.3.4.tgz",
+ "integrity": "sha1-J6qn0uTKdkUvmNOt0JOnLJQ+3Jc=",
+ "dev": true,
+ "requires": {
+ "lru-cache": "^6.0.0"
+ }
+ }
+ }
+ },
+ "@nrwl/tao": {
+ "version": "12.10.0",
+ "resolved": "https://registry.npmmirror.com/@nrwl/tao/download/@nrwl/tao-12.10.0.tgz",
+ "integrity": "sha1-KM+72mb18QpJF98OcLlNBDNOFig=",
+ "dev": true,
+ "requires": {
+ "chalk": "4.1.0",
+ "enquirer": "~2.3.6",
+ "fs-extra": "^9.1.0",
+ "jsonc-parser": "3.0.0",
+ "nx": "12.10.0",
+ "rxjs": "^6.5.4",
+ "rxjs-for-await": "0.0.2",
+ "semver": "7.3.4",
+ "tmp": "~0.2.1",
+ "tslib": "^2.0.0",
+ "yargs-parser": "20.0.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.nlark.com/ansi-styles/download/ansi-styles-4.3.0.tgz",
+ "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=",
+ "dev": true,
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
+ },
+ "chalk": {
+ "version": "4.1.0",
+ "resolved": "https://registry.nlark.com/chalk/download/chalk-4.1.0.tgz?cache=0&sync_timestamp=1627646697260&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fchalk%2Fdownload%2Fchalk-4.1.0.tgz",
+ "integrity": "sha1-ThSHCmGNni7dl92DRf2dncMVZGo=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ }
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npm.taobao.org/color-convert/download/color-convert-2.0.1.tgz",
+ "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=",
+ "dev": true,
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npm.taobao.org/color-name/download/color-name-1.1.4.tgz",
+ "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=",
+ "dev": true
+ },
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.nlark.com/has-flag/download/has-flag-4.0.0.tgz?cache=0&sync_timestamp=1626715907927&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fhas-flag%2Fdownload%2Fhas-flag-4.0.0.tgz",
+ "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=",
+ "dev": true
+ },
+ "semver": {
+ "version": "7.3.4",
+ "resolved": "https://registry.npm.taobao.org/semver/download/semver-7.3.4.tgz?cache=0&sync_timestamp=1616463540350&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-7.3.4.tgz",
+ "integrity": "sha1-J6qn0uTKdkUvmNOt0JOnLJQ+3Jc=",
+ "dev": true,
+ "requires": {
+ "lru-cache": "^6.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmmirror.com/supports-color/download/supports-color-7.2.0.tgz",
+ "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=",
+ "dev": true,
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ },
+ "tmp": {
+ "version": "0.2.1",
+ "resolved": "https://registry.nlark.com/tmp/download/tmp-0.2.1.tgz",
+ "integrity": "sha1-hFf8MDfc9HGcJRNnoa9lAO4czxQ=",
+ "dev": true,
+ "requires": {
+ "rimraf": "^3.0.0"
+ }
+ },
+ "yargs-parser": {
+ "version": "20.0.0",
+ "resolved": "https://registry.npmmirror.com/yargs-parser/download/yargs-parser-20.0.0.tgz?cache=0&sync_timestamp=1637031053426&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fyargs-parser%2Fdownload%2Fyargs-parser-20.0.0.tgz",
+ "integrity": "sha1-xlodqql3rWPOvdUhWRR7eJpOGak=",
+ "dev": true
+ }
+ }
+ },
+ "@schematics/angular": {
+ "version": "12.2.13",
+ "resolved": "https://registry.npmmirror.com/@schematics/angular/download/@schematics/angular-12.2.13.tgz",
+ "integrity": "sha1-W/PntpmkLX/X96oSu+RTTmcecgE=",
+ "dev": true,
+ "requires": {
+ "@angular-devkit/core": "12.2.13",
+ "@angular-devkit/schematics": "12.2.13",
+ "jsonc-parser": "3.0.0"
+ }
+ },
+ "@stylelint/postcss-css-in-js": {
+ "version": "0.37.2",
+ "resolved": "https://registry.npm.taobao.org/@stylelint/postcss-css-in-js/download/@stylelint/postcss-css-in-js-0.37.2.tgz?cache=0&sync_timestamp=1599097529607&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40stylelint%2Fpostcss-css-in-js%2Fdownload%2F%40stylelint%2Fpostcss-css-in-js-0.37.2.tgz",
+ "integrity": "sha1-flqErRgfQjSiSAgDQipHuHSa89I=",
+ "dev": true,
+ "requires": {
+ "@babel/core": ">=7.9.0"
+ }
+ },
+ "@stylelint/postcss-markdown": {
+ "version": "0.36.2",
+ "resolved": "https://registry.npmmirror.com/@stylelint/postcss-markdown/download/@stylelint/postcss-markdown-0.36.2.tgz",
+ "integrity": "sha1-ClQMRpL43N/BPI41LBfnv+4rs5E=",
+ "dev": true,
+ "requires": {
+ "remark": "^13.0.0",
+ "unist-util-find-all-after": "^3.0.2"
+ }
+ },
+ "@swimlane/ngx-charts": {
+ "version": "18.0.1",
+ "resolved": "https://registry.npmmirror.com/@swimlane/ngx-charts/download/@swimlane/ngx-charts-18.0.1.tgz",
+ "integrity": "sha1-hMmZbVpmWQ2RHI4hj/snYYgMIs8=",
+ "requires": {
+ "@types/d3-shape": "^2.0.0",
+ "d3-array": "^2.9.1",
+ "d3-brush": "^2.1.0",
+ "d3-color": "^2.0.0",
+ "d3-format": "^2.0.0",
+ "d3-hierarchy": "^2.0.0",
+ "d3-interpolate": "^2.0.1",
+ "d3-scale": "^3.2.3",
+ "d3-selection": "^2.0.0",
+ "d3-shape": "^2.0.0",
+ "d3-time-format": "^3.0.0",
+ "d3-transition": "^2.0.0",
+ "tslib": "^2.0.0"
+ },
+ "dependencies": {
+ "d3-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.nlark.com/d3-color/download/d3-color-2.0.0.tgz?cache=0&sync_timestamp=1622917832534&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fd3-color%2Fdownload%2Fd3-color-2.0.0.tgz",
+ "integrity": "sha1-jWJcq0Ltm49gGhdgo4n36pGJ1i4="
+ },
+ "d3-hierarchy": {
+ "version": "2.0.0",
+ "resolved": "https://registry.nlark.com/d3-hierarchy/download/d3-hierarchy-2.0.0.tgz",
+ "integrity": "sha1-2riKWMo+ehvGyrOQ6JZn/MbSAhg="
+ },
+ "d3-interpolate": {
+ "version": "2.0.1",
+ "resolved": "https://registry.nlark.com/d3-interpolate/download/d3-interpolate-2.0.1.tgz",
+ "integrity": "sha1-mL5JnPuKO5TU/2FpAFAaZKvJEWM=",
+ "requires": {
+ "d3-color": "1 - 2"
+ }
+ },
+ "d3-shape": {
+ "version": "2.1.0",
+ "resolved": "https://registry.nlark.com/d3-shape/download/d3-shape-2.1.0.tgz?cache=0&sync_timestamp=1622917833478&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fd3-shape%2Fdownload%2Fd3-shape-2.1.0.tgz",
+ "integrity": "sha1-O2qCzK+8Rd5VtX/PlWxYTe07Zm8=",
+ "requires": {
+ "d3-path": "1 - 2"
+ }
+ }
+ }
+ },
+ "@tootallnate/once": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmmirror.com/@tootallnate/once/download/@tootallnate/once-1.1.2.tgz",
+ "integrity": "sha1-zLkURTYBeaBOf+av94wA/8Hur4I=",
+ "dev": true
+ },
+ "@trysound/sax": {
+ "version": "0.2.0",
+ "resolved": "https://registry.nlark.com/@trysound/sax/download/@trysound/sax-0.2.0.tgz",
+ "integrity": "sha1-zMqrdYr1Z2Hre/N69vA/Mm3XmK0=",
+ "dev": true
+ },
+ "@types/component-emitter": {
+ "version": "1.2.11",
+ "resolved": "https://registry.npmmirror.com/@types/component-emitter/download/@types/component-emitter-1.2.11.tgz",
+ "integrity": "sha1-UNR9QrNHJTgXo5cJ/vA85moQhQY=",
+ "dev": true
+ },
+ "@types/cookie": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmmirror.com/@types/cookie/download/@types/cookie-0.4.1.tgz",
+ "integrity": "sha1-v9AsHyIkVnZ2wVRRmfh8OoYdh40=",
+ "dev": true
+ },
+ "@types/cors": {
+ "version": "2.8.12",
+ "resolved": "https://registry.npmmirror.com/@types/cors/download/@types/cors-2.8.12.tgz",
+ "integrity": "sha1-ayxRCnrXA56Y57jT1lmPQ1nlwIA=",
+ "dev": true
+ },
+ "@types/d3-geo": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/@types/d3-geo/-/d3-geo-3.0.2.tgz",
+ "integrity": "sha512-DbqK7MLYA8LpyHQfv6Klz0426bQEf7bRTvhMy44sNGVyZoWn//B0c+Qbeg8Osi2Obdc9BLLXYAKpyWege2/7LQ==",
+ "dev": true,
+ "requires": {
+ "@types/geojson": "*"
+ }
+ },
+ "@types/d3-path": {
+ "version": "2.0.1",
+ "resolved": "https://registry.nlark.com/@types/d3-path/download/@types/d3-path-2.0.1.tgz",
+ "integrity": "sha1-ygPfqLlNit2XrQzZfpbiAGtHY8s="
+ },
+ "@types/d3-sankey": {
+ "version": "0.11.2",
+ "resolved": "https://registry.npmjs.org/@types/d3-sankey/-/d3-sankey-0.11.2.tgz",
+ "integrity": "sha512-U6SrTWUERSlOhnpSrgvMX64WblX1AxX6nEjI2t3mLK2USpQrnbwYYK+AS9SwiE7wgYmOsSSKoSdr8aoKBH0HgQ==",
+ "dev": true,
+ "requires": {
+ "@types/d3-shape": "^1"
+ },
+ "dependencies": {
+ "@types/d3-path": {
+ "version": "1.0.9",
+ "resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-1.0.9.tgz",
+ "integrity": "sha512-NaIeSIBiFgSC6IGUBjZWcscUJEq7vpVu7KthHN8eieTV9d9MqkSOZLH4chq1PmcKy06PNe3axLeKmRIyxJ+PZQ==",
+ "dev": true
+ },
+ "@types/d3-shape": {
+ "version": "1.3.8",
+ "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-1.3.8.tgz",
+ "integrity": "sha512-gqfnMz6Fd5H6GOLYixOZP/xlrMtJms9BaS+6oWxTKHNqPGZ93BkWWupQSCYm6YHqx6h9wjRupuJb90bun6ZaYg==",
+ "dev": true,
+ "requires": {
+ "@types/d3-path": "^1"
+ }
+ }
+ }
+ },
+ "@types/d3-shape": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmmirror.com/@types/d3-shape/download/@types/d3-shape-2.1.3.tgz",
+ "integrity": "sha1-NdOXueaHq6oN6CNDslC5iXuMrPM=",
+ "requires": {
+ "@types/d3-path": "^2"
+ }
+ },
+ "@types/d3-timer": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmmirror.com/@types/d3-timer/download/@types/d3-timer-2.0.1.tgz",
+ "integrity": "sha1-/7ZiDSkGJPNyaqNiwMiktEyNcgA="
+ },
+ "@types/eslint": {
+ "version": "8.2.0",
+ "resolved": "https://registry.npmmirror.com/@types/eslint/download/@types/eslint-8.2.0.tgz",
+ "integrity": "sha512-74hbvsnc+7TEDa1z5YLSe4/q8hGYB3USNvCuzHUJrjPV6hXaq8IXcngCrHkuvFt0+8rFz7xYXrHgNayIX0UZvQ==",
+ "dev": true,
+ "requires": {
+ "@types/estree": "*",
+ "@types/json-schema": "*"
+ }
+ },
+ "@types/eslint-scope": {
+ "version": "3.7.1",
+ "resolved": "https://registry.npmmirror.com/@types/eslint-scope/download/@types/eslint-scope-3.7.1.tgz",
+ "integrity": "sha1-jcOQp7T53Z8ShGKe/OmC5BYSEW4=",
+ "dev": true,
+ "requires": {
+ "@types/eslint": "*",
+ "@types/estree": "*"
+ }
+ },
+ "@types/estree": {
+ "version": "0.0.50",
+ "resolved": "https://registry.npmmirror.com/@types/estree/download/@types/estree-0.0.50.tgz",
+ "integrity": "sha1-Hgyqk2TT/M0pMcPtlv2+ql1MyoM=",
+ "dev": true
+ },
+ "@types/file-saver": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmmirror.com/@types/file-saver/download/@types/file-saver-2.0.4.tgz",
+ "integrity": "sha512-sPZYQEIF/SOnLAvaz9lTuydniP+afBMtElRTdYkeV1QtEgvtJ7qolCPjly6O32QI8CbEmP5O/fztMXEDWfEcrg==",
+ "dev": true
+ },
+ "@types/geojson": {
+ "version": "7946.0.8",
+ "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.8.tgz",
+ "integrity": "sha512-1rkryxURpr6aWP7R786/UQOkJ3PcpQiWkAXBmdWc7ryFWqN6a4xfK7BtjXvFBKO9LjQ+MWQSWxYeZX1OApnArA==",
+ "dev": true
+ },
+ "@types/glob": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmmirror.com/@types/glob/download/@types/glob-7.2.0.tgz?cache=0&sync_timestamp=1637267477186&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40types%2Fglob%2Fdownload%2F%40types%2Fglob-7.2.0.tgz",
+ "integrity": "sha1-vBtb86qS8lvV3TnzXFc2G9zlsus=",
+ "dev": true,
+ "requires": {
+ "@types/minimatch": "*",
+ "@types/node": "*"
+ }
+ },
+ "@types/jasmine": {
+ "version": "3.8.2",
+ "resolved": "https://registry.npmmirror.com/@types/jasmine/download/@types/jasmine-3.8.2.tgz",
+ "integrity": "sha1-J6sKqsKVgby95XdOGEP5Dfl3B44=",
+ "dev": true
+ },
+ "@types/jasminewd2": {
+ "version": "2.0.10",
+ "resolved": "https://registry.npmmirror.com/@types/jasminewd2/download/@types/jasminewd2-2.0.10.tgz",
+ "integrity": "sha1-rjHCN6pkIb3jDxBYsdIPRXflREM=",
+ "dev": true,
+ "requires": {
+ "@types/jasmine": "*"
+ }
+ },
+ "@types/js-base64": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmmirror.com/@types/js-base64/download/@types/js-base64-3.3.1.tgz",
+ "integrity": "sha1-NsLW3BJid+oopNBZnQyvv1R7UeY=",
+ "dev": true,
+ "requires": {
+ "js-base64": "*"
+ }
+ },
+ "@types/json-schema": {
+ "version": "7.0.9",
+ "resolved": "https://registry.npmmirror.com/@types/json-schema/download/@types/json-schema-7.0.9.tgz",
+ "integrity": "sha1-l+3JA36gw4WFMgsolk3eOznkZg0=",
+ "dev": true
+ },
+ "@types/json5": {
+ "version": "0.0.29",
+ "resolved": "https://registry.npm.taobao.org/@types/json5/download/@types/json5-0.0.29.tgz",
+ "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=",
+ "dev": true
+ },
+ "@types/mdast": {
+ "version": "3.0.10",
+ "resolved": "https://registry.npmmirror.com/@types/mdast/download/@types/mdast-3.0.10.tgz",
+ "integrity": "sha1-RyQkSoKkWYiEy76bz9c9/5J+6K8=",
+ "dev": true,
+ "requires": {
+ "@types/unist": "*"
+ }
+ },
+ "@types/minimatch": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmmirror.com/@types/minimatch/download/@types/minimatch-3.0.5.tgz",
+ "integrity": "sha1-EAHMXmo3BLg8I2An538vWOoBD0A=",
+ "dev": true
+ },
+ "@types/minimist": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmmirror.com/@types/minimist/download/@types/minimist-1.2.2.tgz",
+ "integrity": "sha1-7nceK6Sz3Fs3KTXVSf2WF780W4w=",
+ "dev": true
+ },
+ "@types/mockjs": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmmirror.com/@types/mockjs/download/@types/mockjs-1.0.4.tgz",
+ "integrity": "sha1-5waVHV4ztPCku3Ox+LEk4m8IHeA="
+ },
+ "@types/node": {
+ "version": "12.20.37",
+ "resolved": "https://registry.npmmirror.com/@types/node/download/@types/node-12.20.37.tgz",
+ "integrity": "sha512-i1KGxqcvJaLQali+WuypQnXwcplhtNtjs66eNsZpp2P2FL/trJJxx/VWsM0YCL2iMoIJrbXje48lvIQAQ4p2ZA==",
+ "dev": true
+ },
+ "@types/normalize-package-data": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmmirror.com/@types/normalize-package-data/download/@types/normalize-package-data-2.4.1.tgz",
+ "integrity": "sha1-0zV0eaD9/dWQf+Z+F+CoXJBuEwE=",
+ "dev": true
+ },
+ "@types/parse-json": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmmirror.com/@types/parse-json/download/@types/parse-json-4.0.0.tgz?cache=0&sync_timestamp=1637284065529&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40types%2Fparse-json%2Fdownload%2F%40types%2Fparse-json-4.0.0.tgz",
+ "integrity": "sha1-L4u0QUNNFjs1+4/9zNcTiSf/uMA=",
+ "dev": true
+ },
+ "@types/q": {
+ "version": "0.0.32",
+ "resolved": "https://registry.npmmirror.com/@types/q/download/@types/q-0.0.32.tgz",
+ "integrity": "sha1-vShOV8hPEyXacCur/IKlMoGQwMU=",
+ "dev": true
+ },
+ "@types/selenium-webdriver": {
+ "version": "3.0.19",
+ "resolved": "https://registry.npmmirror.com/@types/selenium-webdriver/download/@types/selenium-webdriver-3.0.19.tgz",
+ "integrity": "sha1-KOzt528VsTVTtOhgdNTPmgu+ScQ=",
+ "dev": true
+ },
+ "@types/source-list-map": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmmirror.com/@types/source-list-map/download/@types/source-list-map-0.1.2.tgz?cache=0&sync_timestamp=1637284095686&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40types%2Fsource-list-map%2Fdownload%2F%40types%2Fsource-list-map-0.1.2.tgz",
+ "integrity": "sha1-AHiDYGP/rxdBI0m7o2QIfgrALsk=",
+ "dev": true
+ },
+ "@types/swagger-schema-official": {
+ "version": "2.0.21",
+ "resolved": "https://registry.nlark.com/@types/swagger-schema-official/download/@types/swagger-schema-official-2.0.21.tgz",
+ "integrity": "sha1-VoEqhtzVe6YOXFFwXulqKy3Js3Q=",
+ "dev": true
+ },
+ "@types/unist": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmmirror.com/@types/unist/download/@types/unist-2.0.6.tgz?cache=0&sync_timestamp=1637284126736&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40types%2Funist%2Fdownload%2F%40types%2Funist-2.0.6.tgz",
+ "integrity": "sha1-JQp7FsO5H2cqJFUuxkZ47rHToI0=",
+ "dev": true
+ },
+ "@types/vfile": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npm.taobao.org/@types/vfile/download/@types/vfile-3.0.2.tgz",
+ "integrity": "sha1-GcGM0jLfEc5vpq2AJZvIbDZrCbk=",
+ "dev": true,
+ "requires": {
+ "@types/node": "*",
+ "@types/unist": "*",
+ "@types/vfile-message": "*"
+ }
+ },
+ "@types/vfile-message": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npm.taobao.org/@types/vfile-message/download/@types/vfile-message-2.0.0.tgz",
+ "integrity": "sha1-aQ5Grw/fwfn6rgDNBJzIiJV5J9U=",
+ "dev": true,
+ "requires": {
+ "vfile-message": "*"
+ }
+ },
+ "@types/webpack-sources": {
+ "version": "0.1.9",
+ "resolved": "https://registry.nlark.com/@types/webpack-sources/download/@types/webpack-sources-0.1.9.tgz",
+ "integrity": "sha1-2mmwbrNPZDLmZYrLWmiTxV2YOSA=",
+ "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
+ }
+ }
+ },
+ "@typescript-eslint/eslint-plugin": {
+ "version": "4.29.3",
+ "resolved": "https://registry.npmmirror.com/@typescript-eslint/eslint-plugin/download/@typescript-eslint/eslint-plugin-4.29.3.tgz",
+ "integrity": "sha1-lcuAKai9i9nH9KuVB0p8shFa3vo=",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/experimental-utils": "4.29.3",
+ "@typescript-eslint/scope-manager": "4.29.3",
+ "debug": "^4.3.1",
+ "functional-red-black-tree": "^1.0.1",
+ "regexpp": "^3.1.0",
+ "semver": "^7.3.5",
+ "tsutils": "^3.21.0"
+ },
+ "dependencies": {
+ "@typescript-eslint/experimental-utils": {
+ "version": "4.29.3",
+ "resolved": "https://registry.npmmirror.com/@typescript-eslint/experimental-utils/download/@typescript-eslint/experimental-utils-4.29.3.tgz",
+ "integrity": "sha1-UuQ3ponM3vc+g8UQazQkCnBvFeE=",
+ "dev": true,
+ "requires": {
+ "@types/json-schema": "^7.0.7",
+ "@typescript-eslint/scope-manager": "4.29.3",
+ "@typescript-eslint/types": "4.29.3",
+ "@typescript-eslint/typescript-estree": "4.29.3",
+ "eslint-scope": "^5.1.1",
+ "eslint-utils": "^3.0.0"
+ }
+ },
+ "@typescript-eslint/scope-manager": {
+ "version": "4.29.3",
+ "resolved": "https://registry.npmmirror.com/@typescript-eslint/scope-manager/download/@typescript-eslint/scope-manager-4.29.3.tgz",
+ "integrity": "sha1-SX3sZvOiLkWfbjBs8UAh5A7Ibhk=",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/types": "4.29.3",
+ "@typescript-eslint/visitor-keys": "4.29.3"
+ }
+ },
+ "@typescript-eslint/types": {
+ "version": "4.29.3",
+ "resolved": "https://registry.npmmirror.com/@typescript-eslint/types/download/@typescript-eslint/types-4.29.3.tgz",
+ "integrity": "sha1-15gMSa72Q9CviVTJ8U9la3/RYBc=",
+ "dev": true
+ },
+ "@typescript-eslint/typescript-estree": {
+ "version": "4.29.3",
+ "resolved": "https://registry.npmmirror.com/@typescript-eslint/typescript-estree/download/@typescript-eslint/typescript-estree-4.29.3.tgz",
+ "integrity": "sha1-G6+tYQAVxN7TXIWnC2Ii+q1Zi0A=",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/types": "4.29.3",
+ "@typescript-eslint/visitor-keys": "4.29.3",
+ "debug": "^4.3.1",
+ "globby": "^11.0.3",
+ "is-glob": "^4.0.1",
+ "semver": "^7.3.5",
+ "tsutils": "^3.21.0"
+ }
+ },
+ "@typescript-eslint/visitor-keys": {
+ "version": "4.29.3",
+ "resolved": "https://registry.npmmirror.com/@typescript-eslint/visitor-keys/download/@typescript-eslint/visitor-keys-4.29.3.tgz",
+ "integrity": "sha1-xpF2CgC9hr+DINKpCpPYbTIvGr8=",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/types": "4.29.3",
+ "eslint-visitor-keys": "^2.0.0"
+ }
+ }
+ }
+ },
+ "@typescript-eslint/experimental-utils": {
+ "version": "4.28.2",
+ "resolved": "https://registry.npmmirror.com/@typescript-eslint/experimental-utils/download/@typescript-eslint/experimental-utils-4.28.2.tgz",
+ "integrity": "sha1-Tr3sBqEIiOkybh1R2BrVKjYb0LA=",
+ "dev": true,
+ "requires": {
+ "@types/json-schema": "^7.0.7",
+ "@typescript-eslint/scope-manager": "4.28.2",
+ "@typescript-eslint/types": "4.28.2",
+ "@typescript-eslint/typescript-estree": "4.28.2",
+ "eslint-scope": "^5.1.1",
+ "eslint-utils": "^3.0.0"
+ }
+ },
+ "@typescript-eslint/parser": {
+ "version": "4.29.3",
+ "resolved": "https://registry.npmmirror.com/@typescript-eslint/parser/download/@typescript-eslint/parser-4.29.3.tgz",
+ "integrity": "sha1-KsJVNfNMDpj1DA5rKMZ5wjV9RfI=",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/scope-manager": "4.29.3",
+ "@typescript-eslint/types": "4.29.3",
+ "@typescript-eslint/typescript-estree": "4.29.3",
+ "debug": "^4.3.1"
+ },
+ "dependencies": {
+ "@typescript-eslint/scope-manager": {
+ "version": "4.29.3",
+ "resolved": "https://registry.npmmirror.com/@typescript-eslint/scope-manager/download/@typescript-eslint/scope-manager-4.29.3.tgz",
+ "integrity": "sha1-SX3sZvOiLkWfbjBs8UAh5A7Ibhk=",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/types": "4.29.3",
+ "@typescript-eslint/visitor-keys": "4.29.3"
+ }
+ },
+ "@typescript-eslint/types": {
+ "version": "4.29.3",
+ "resolved": "https://registry.npmmirror.com/@typescript-eslint/types/download/@typescript-eslint/types-4.29.3.tgz",
+ "integrity": "sha1-15gMSa72Q9CviVTJ8U9la3/RYBc=",
+ "dev": true
+ },
+ "@typescript-eslint/typescript-estree": {
+ "version": "4.29.3",
+ "resolved": "https://registry.npmmirror.com/@typescript-eslint/typescript-estree/download/@typescript-eslint/typescript-estree-4.29.3.tgz",
+ "integrity": "sha1-G6+tYQAVxN7TXIWnC2Ii+q1Zi0A=",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/types": "4.29.3",
+ "@typescript-eslint/visitor-keys": "4.29.3",
+ "debug": "^4.3.1",
+ "globby": "^11.0.3",
+ "is-glob": "^4.0.1",
+ "semver": "^7.3.5",
+ "tsutils": "^3.21.0"
+ }
+ },
+ "@typescript-eslint/visitor-keys": {
+ "version": "4.29.3",
+ "resolved": "https://registry.npmmirror.com/@typescript-eslint/visitor-keys/download/@typescript-eslint/visitor-keys-4.29.3.tgz",
+ "integrity": "sha1-xpF2CgC9hr+DINKpCpPYbTIvGr8=",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/types": "4.29.3",
+ "eslint-visitor-keys": "^2.0.0"
+ }
+ }
+ }
+ },
+ "@typescript-eslint/scope-manager": {
+ "version": "4.28.2",
+ "resolved": "https://registry.npmmirror.com/@typescript-eslint/scope-manager/download/@typescript-eslint/scope-manager-4.28.2.tgz",
+ "integrity": "sha1-RR3OkDA6POKDdQERSV00ycIE5RA=",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/types": "4.28.2",
+ "@typescript-eslint/visitor-keys": "4.28.2"
+ }
+ },
+ "@typescript-eslint/types": {
+ "version": "4.28.2",
+ "resolved": "https://registry.npmmirror.com/@typescript-eslint/types/download/@typescript-eslint/types-4.28.2.tgz",
+ "integrity": "sha1-5rniNODppmxNJbq4gWYekUeCI7U=",
+ "dev": true
+ },
+ "@typescript-eslint/typescript-estree": {
+ "version": "4.28.2",
+ "resolved": "https://registry.npmmirror.com/@typescript-eslint/typescript-estree/download/@typescript-eslint/typescript-estree-4.28.2.tgz",
+ "integrity": "sha1-aAEpsqKFKJoV58YQjIRzmt86eYw=",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/types": "4.28.2",
+ "@typescript-eslint/visitor-keys": "4.28.2",
+ "debug": "^4.3.1",
+ "globby": "^11.0.3",
+ "is-glob": "^4.0.1",
+ "semver": "^7.3.5",
+ "tsutils": "^3.21.0"
+ }
+ },
+ "@typescript-eslint/visitor-keys": {
+ "version": "4.28.2",
+ "resolved": "https://registry.npmmirror.com/@typescript-eslint/visitor-keys/download/@typescript-eslint/visitor-keys-4.28.2.tgz",
+ "integrity": "sha1-v1akAIV7totZsxHm0KX771w7UTA=",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/types": "4.28.2",
+ "eslint-visitor-keys": "^2.0.0"
+ }
+ },
+ "@webassemblyjs/ast": {
+ "version": "1.11.1",
+ "resolved": "https://registry.nlark.com/@webassemblyjs/ast/download/@webassemblyjs/ast-1.11.1.tgz",
+ "integrity": "sha1-K/12fq4aaZb0Mv9+jX/HVnnAtqc=",
+ "dev": true,
+ "requires": {
+ "@webassemblyjs/helper-numbers": "1.11.1",
+ "@webassemblyjs/helper-wasm-bytecode": "1.11.1"
+ }
+ },
+ "@webassemblyjs/floating-point-hex-parser": {
+ "version": "1.11.1",
+ "resolved": "https://registry.nlark.com/@webassemblyjs/floating-point-hex-parser/download/@webassemblyjs/floating-point-hex-parser-1.11.1.tgz?cache=0&sync_timestamp=1625473945010&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40webassemblyjs%2Ffloating-point-hex-parser%2Fdownload%2F%40webassemblyjs%2Ffloating-point-hex-parser-1.11.1.tgz",
+ "integrity": "sha1-9sYacF8P16auyqToGY8j2dwXnk8=",
+ "dev": true
+ },
+ "@webassemblyjs/helper-api-error": {
+ "version": "1.11.1",
+ "resolved": "https://registry.nlark.com/@webassemblyjs/helper-api-error/download/@webassemblyjs/helper-api-error-1.11.1.tgz?cache=0&sync_timestamp=1625473943740&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40webassemblyjs%2Fhelper-api-error%2Fdownload%2F%40webassemblyjs%2Fhelper-api-error-1.11.1.tgz",
+ "integrity": "sha1-GmMZLYeI5cASgAump6RscFKI/RY=",
+ "dev": true
+ },
+ "@webassemblyjs/helper-buffer": {
+ "version": "1.11.1",
+ "resolved": "https://registry.nlark.com/@webassemblyjs/helper-buffer/download/@webassemblyjs/helper-buffer-1.11.1.tgz",
+ "integrity": "sha1-gyqQDrREiEzemnytRn+BUA9eWrU=",
+ "dev": true
+ },
+ "@webassemblyjs/helper-numbers": {
+ "version": "1.11.1",
+ "resolved": "https://registry.nlark.com/@webassemblyjs/helper-numbers/download/@webassemblyjs/helper-numbers-1.11.1.tgz",
+ "integrity": "sha1-ZNgdohn7u6HjvRv8dPboxOEKYq4=",
+ "dev": true,
+ "requires": {
+ "@webassemblyjs/floating-point-hex-parser": "1.11.1",
+ "@webassemblyjs/helper-api-error": "1.11.1",
+ "@xtuc/long": "4.2.2"
+ }
+ },
+ "@webassemblyjs/helper-wasm-bytecode": {
+ "version": "1.11.1",
+ "resolved": "https://registry.nlark.com/@webassemblyjs/helper-wasm-bytecode/download/@webassemblyjs/helper-wasm-bytecode-1.11.1.tgz",
+ "integrity": "sha1-8ygkHkHnsZnQsgwY6IQpxEMyleE=",
+ "dev": true
+ },
+ "@webassemblyjs/helper-wasm-section": {
+ "version": "1.11.1",
+ "resolved": "https://registry.nlark.com/@webassemblyjs/helper-wasm-section/download/@webassemblyjs/helper-wasm-section-1.11.1.tgz?cache=0&sync_timestamp=1625473968654&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40webassemblyjs%2Fhelper-wasm-section%2Fdownload%2F%40webassemblyjs%2Fhelper-wasm-section-1.11.1.tgz",
+ "integrity": "sha1-Ie4GWntjXzGec48N1zv72igcCXo=",
+ "dev": true,
+ "requires": {
+ "@webassemblyjs/ast": "1.11.1",
+ "@webassemblyjs/helper-buffer": "1.11.1",
+ "@webassemblyjs/helper-wasm-bytecode": "1.11.1",
+ "@webassemblyjs/wasm-gen": "1.11.1"
+ }
+ },
+ "@webassemblyjs/ieee754": {
+ "version": "1.11.1",
+ "resolved": "https://registry.nlark.com/@webassemblyjs/ieee754/download/@webassemblyjs/ieee754-1.11.1.tgz?cache=0&sync_timestamp=1625473943048&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40webassemblyjs%2Fieee754%2Fdownload%2F%40webassemblyjs%2Fieee754-1.11.1.tgz",
+ "integrity": "sha1-ljkp6bvQVwnn4SJDoJkYCBKZJhQ=",
+ "dev": true,
+ "requires": {
+ "@xtuc/ieee754": "^1.2.0"
+ }
+ },
+ "@webassemblyjs/leb128": {
+ "version": "1.11.1",
+ "resolved": "https://registry.nlark.com/@webassemblyjs/leb128/download/@webassemblyjs/leb128-1.11.1.tgz?cache=0&sync_timestamp=1625473945849&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40webassemblyjs%2Fleb128%2Fdownload%2F%40webassemblyjs%2Fleb128-1.11.1.tgz",
+ "integrity": "sha1-zoFLRVdOk9drrh+yZEq5zdlSeqU=",
+ "dev": true,
+ "requires": {
+ "@xtuc/long": "4.2.2"
+ }
+ },
+ "@webassemblyjs/utf8": {
+ "version": "1.11.1",
+ "resolved": "https://registry.nlark.com/@webassemblyjs/utf8/download/@webassemblyjs/utf8-1.11.1.tgz?cache=0&sync_timestamp=1625473943764&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40webassemblyjs%2Futf8%2Fdownload%2F%40webassemblyjs%2Futf8-1.11.1.tgz",
+ "integrity": "sha1-0fi3ZDaefG5rrjUOhU3smlnwo/8=",
+ "dev": true
+ },
+ "@webassemblyjs/wasm-edit": {
+ "version": "1.11.1",
+ "resolved": "https://registry.nlark.com/@webassemblyjs/wasm-edit/download/@webassemblyjs/wasm-edit-1.11.1.tgz",
+ "integrity": "sha1-rSBuv0v5WgWM6YgKjAksXeyBk9Y=",
+ "dev": true,
+ "requires": {
+ "@webassemblyjs/ast": "1.11.1",
+ "@webassemblyjs/helper-buffer": "1.11.1",
+ "@webassemblyjs/helper-wasm-bytecode": "1.11.1",
+ "@webassemblyjs/helper-wasm-section": "1.11.1",
+ "@webassemblyjs/wasm-gen": "1.11.1",
+ "@webassemblyjs/wasm-opt": "1.11.1",
+ "@webassemblyjs/wasm-parser": "1.11.1",
+ "@webassemblyjs/wast-printer": "1.11.1"
+ }
+ },
+ "@webassemblyjs/wasm-gen": {
+ "version": "1.11.1",
+ "resolved": "https://registry.nlark.com/@webassemblyjs/wasm-gen/download/@webassemblyjs/wasm-gen-1.11.1.tgz",
+ "integrity": "sha1-hsXqMEhJdZt9iMR6MvTwOa48j3Y=",
+ "dev": true,
+ "requires": {
+ "@webassemblyjs/ast": "1.11.1",
+ "@webassemblyjs/helper-wasm-bytecode": "1.11.1",
+ "@webassemblyjs/ieee754": "1.11.1",
+ "@webassemblyjs/leb128": "1.11.1",
+ "@webassemblyjs/utf8": "1.11.1"
+ }
+ },
+ "@webassemblyjs/wasm-opt": {
+ "version": "1.11.1",
+ "resolved": "https://registry.nlark.com/@webassemblyjs/wasm-opt/download/@webassemblyjs/wasm-opt-1.11.1.tgz",
+ "integrity": "sha1-ZXtMIgL0zzs0X4pMZGHIwkGJhfI=",
+ "dev": true,
+ "requires": {
+ "@webassemblyjs/ast": "1.11.1",
+ "@webassemblyjs/helper-buffer": "1.11.1",
+ "@webassemblyjs/wasm-gen": "1.11.1",
+ "@webassemblyjs/wasm-parser": "1.11.1"
+ }
+ },
+ "@webassemblyjs/wasm-parser": {
+ "version": "1.11.1",
+ "resolved": "https://registry.nlark.com/@webassemblyjs/wasm-parser/download/@webassemblyjs/wasm-parser-1.11.1.tgz",
+ "integrity": "sha1-hspzRTT0F+m9PGfHocddi+QfsZk=",
+ "dev": true,
+ "requires": {
+ "@webassemblyjs/ast": "1.11.1",
+ "@webassemblyjs/helper-api-error": "1.11.1",
+ "@webassemblyjs/helper-wasm-bytecode": "1.11.1",
+ "@webassemblyjs/ieee754": "1.11.1",
+ "@webassemblyjs/leb128": "1.11.1",
+ "@webassemblyjs/utf8": "1.11.1"
+ }
+ },
+ "@webassemblyjs/wast-printer": {
+ "version": "1.11.1",
+ "resolved": "https://registry.nlark.com/@webassemblyjs/wast-printer/download/@webassemblyjs/wast-printer-1.11.1.tgz",
+ "integrity": "sha1-0Mc77ajuxUJvEK6O9VzuXnCEwvA=",
+ "dev": true,
+ "requires": {
+ "@webassemblyjs/ast": "1.11.1",
+ "@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
+ },
+ "abab": {
+ "version": "2.0.5",
+ "resolved": "https://registry.nlark.com/abab/download/abab-2.0.5.tgz",
+ "integrity": "sha1-wLZ4+zLWD8EhnHhNaoJv44Wut5o=",
+ "dev": true
+ },
+ "abbrev": {
+ "version": "1.1.1",
+ "resolved": "https://registry.nlark.com/abbrev/download/abbrev-1.1.1.tgz",
+ "integrity": "sha1-+PLIh60Qv2f2NPAFtph/7TF5qsg=",
+ "dev": true
+ },
+ "abs-svg-path": {
+ "version": "0.1.1",
+ "resolved": "https://registry.nlark.com/abs-svg-path/download/abs-svg-path-0.1.1.tgz",
+ "integrity": "sha1-32Acjo0roQ1KdtYl4japo5wnI78="
+ },
+ "accepts": {
+ "version": "1.3.7",
+ "resolved": "https://registry.nlark.com/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": "8.6.0",
+ "resolved": "https://registry.npmmirror.com/acorn/download/acorn-8.6.0.tgz?cache=0&sync_timestamp=1637225522161&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Facorn%2Fdownload%2Facorn-8.6.0.tgz",
+ "integrity": "sha512-U1riIR+lBSNi3IbxtaHOIKdH8sLFv3NYfNv8sg7ZsNhcfl4HF2++BfqqrNAxoCLQW1iiylOj76ecnaUxz+z9yw==",
+ "dev": true
+ },
+ "acorn-import-assertions": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmmirror.com/acorn-import-assertions/download/acorn-import-assertions-1.8.0.tgz?cache=0&sync_timestamp=1633349660084&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Facorn-import-assertions%2Fdownload%2Facorn-import-assertions-1.8.0.tgz",
+ "integrity": "sha1-uitZOc5iwjjbbZPYHJsRGym4Vek=",
+ "dev": true
+ },
+ "acorn-jsx": {
+ "version": "5.3.2",
+ "resolved": "https://registry.nlark.com/acorn-jsx/download/acorn-jsx-5.3.2.tgz?cache=0&sync_timestamp=1625793240297&other_urls=https%3A%2F%2Fregistry.nlark.com%2Facorn-jsx%2Fdownload%2Facorn-jsx-5.3.2.tgz",
+ "integrity": "sha1-ftW7VZCLOy8bxVxq8WU7rafweTc=",
+ "dev": true
+ },
+ "adjust-sourcemap-loader": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npm.taobao.org/adjust-sourcemap-loader/download/adjust-sourcemap-loader-4.0.0.tgz?cache=0&sync_timestamp=1603701108010&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fadjust-sourcemap-loader%2Fdownload%2Fadjust-sourcemap-loader-4.0.0.tgz",
+ "integrity": "sha1-/EoP0ID30QRx8wpzIPJVYK3ijJk=",
+ "dev": true,
+ "requires": {
+ "loader-utils": "^2.0.0",
+ "regex-parser": "^2.2.11"
+ }
+ },
+ "adler-32": {
+ "version": "1.2.0",
+ "resolved": "https://registry.nlark.com/adler-32/download/adler-32-1.2.0.tgz",
+ "integrity": "sha1-aj5r8KY5ALoVZSgIyxXGgT0aXyU=",
+ "requires": {
+ "exit-on-epipe": "~1.0.1",
+ "printj": "~1.1.0"
+ }
+ },
+ "adm-zip": {
+ "version": "0.4.16",
+ "resolved": "https://registry.npmmirror.com/adm-zip/download/adm-zip-0.4.16.tgz",
+ "integrity": "sha1-z0xQj9/6sCwmnLx/RxqHXwVXA2U=",
+ "dev": true
+ },
+ "agent-base": {
+ "version": "6.0.2",
+ "resolved": "https://registry.nlark.com/agent-base/download/agent-base-6.0.2.tgz",
+ "integrity": "sha1-Sf/1hXfP7j83F2/qtMIuAPhtf3c=",
+ "dev": true,
+ "requires": {
+ "debug": "4"
+ }
+ },
+ "agentkeepalive": {
+ "version": "4.1.4",
+ "resolved": "https://registry.npm.taobao.org/agentkeepalive/download/agentkeepalive-4.1.4.tgz?cache=0&sync_timestamp=1612490497760&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fagentkeepalive%2Fdownload%2Fagentkeepalive-4.1.4.tgz",
+ "integrity": "sha1-2SgCikhiyxFxjlUieHLoQqRMlFs=",
+ "dev": true,
+ "requires": {
+ "debug": "^4.1.0",
+ "depd": "^1.1.2",
+ "humanize-ms": "^1.2.1"
+ }
+ },
+ "aggregate-error": {
+ "version": "3.1.0",
+ "resolved": "https://registry.nlark.com/aggregate-error/download/aggregate-error-3.1.0.tgz?cache=0&sync_timestamp=1622604530325&other_urls=https%3A%2F%2Fregistry.nlark.com%2Faggregate-error%2Fdownload%2Faggregate-error-3.1.0.tgz",
+ "integrity": "sha1-kmcP9Q9TWb23o+DUDQ7DDFc3aHo=",
+ "dev": true,
+ "requires": {
+ "clean-stack": "^2.0.0",
+ "indent-string": "^4.0.0"
+ }
+ },
+ "ajv": {
+ "version": "8.8.2",
+ "resolved": "https://registry.npmmirror.com/ajv/download/ajv-8.8.2.tgz?cache=0&sync_timestamp=1637522259668&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fajv%2Fdownload%2Fajv-8.8.2.tgz",
+ "integrity": "sha512-x9VuX+R/jcFj1DHo/fCp99esgGDWiHENrKxaCENuCxpoMCmAt/COCGVDwA7kleEpEzJjDnvh3yGoOuLu0Dtllw==",
+ "requires": {
+ "fast-deep-equal": "^3.1.1",
+ "json-schema-traverse": "^1.0.0",
+ "require-from-string": "^2.0.2",
+ "uri-js": "^4.2.2"
+ }
+ },
+ "ajv-errors": {
+ "version": "1.0.1",
+ "resolved": "https://registry.nlark.com/ajv-errors/download/ajv-errors-1.0.1.tgz",
+ "integrity": "sha1-81mGrOuRr63sQQL72FAUlQzvpk0=",
+ "dev": true
+ },
+ "ajv-formats": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmmirror.com/ajv-formats/download/ajv-formats-2.1.1.tgz",
+ "integrity": "sha1-bmaUAGWet0lzu/LjMycYCgmWtSA=",
+ "requires": {
+ "ajv": "^8.0.0"
+ }
+ },
+ "ajv-keywords": {
+ "version": "3.5.2",
+ "resolved": "https://registry.npmmirror.com/ajv-keywords/download/ajv-keywords-3.5.2.tgz",
+ "integrity": "sha1-MfKdpatuANHC0yms97WSlhTVAU0=",
+ "dev": true
+ },
+ "alphanum-sort": {
+ "version": "1.0.2",
+ "resolved": "https://registry.nlark.com/alphanum-sort/download/alphanum-sort-1.0.2.tgz",
+ "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=",
+ "dev": true
+ },
+ "amdefine": {
+ "version": "1.0.1",
+ "resolved": "https://registry.nlark.com/amdefine/download/amdefine-1.0.1.tgz",
+ "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=",
+ "dev": true
+ },
+ "ansi-colors": {
+ "version": "4.1.1",
+ "resolved": "https://registry.nlark.com/ansi-colors/download/ansi-colors-4.1.1.tgz",
+ "integrity": "sha1-y7muJWv3UK8eqzRPIpqif+lLo0g=",
+ "dev": true
+ },
+ "ansi-escapes": {
+ "version": "4.3.2",
+ "resolved": "https://registry.nlark.com/ansi-escapes/download/ansi-escapes-4.3.2.tgz?cache=0&sync_timestamp=1618847144938&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fansi-escapes%2Fdownload%2Fansi-escapes-4.3.2.tgz",
+ "integrity": "sha1-ayKR0dt9mLZSHV8e+kLQ86n+tl4=",
+ "dev": true,
+ "requires": {
+ "type-fest": "^0.21.3"
+ }
+ },
+ "ansi-html": {
+ "version": "0.0.7",
+ "resolved": "https://registry.nlark.com/ansi-html/download/ansi-html-0.0.7.tgz",
+ "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=",
+ "dev": true
+ },
+ "ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.nlark.com/ansi-regex/download/ansi-regex-5.0.1.tgz?cache=0&sync_timestamp=1631634988487&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fansi-regex%2Fdownload%2Fansi-regex-5.0.1.tgz",
+ "integrity": "sha1-CCyyyJyf6GWaMRpTvWpNxTAdswQ=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.nlark.com/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.2",
+ "resolved": "https://registry.npm.taobao.org/anymatch/download/anymatch-3.1.2.tgz?cache=0&sync_timestamp=1617747502795&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fanymatch%2Fdownload%2Fanymatch-3.1.2.tgz",
+ "integrity": "sha1-wFV8CWrzLxBhmPT04qODU343hxY=",
+ "dev": true,
+ "requires": {
+ "normalize-path": "^3.0.0",
+ "picomatch": "^2.0.4"
+ }
+ },
+ "aproba": {
+ "version": "1.2.0",
+ "resolved": "https://registry.nlark.com/aproba/download/aproba-1.2.0.tgz",
+ "integrity": "sha1-aALmJk79GMeQobDVF/DyYnvyyUo=",
+ "dev": true
+ },
+ "are-we-there-yet": {
+ "version": "1.1.7",
+ "resolved": "https://registry.nlark.com/are-we-there-yet/download/are-we-there-yet-1.1.7.tgz",
+ "integrity": "sha1-sVR0qTKtq0/4pQ2a36fk6SbyEUY=",
+ "dev": true,
+ "requires": {
+ "delegates": "^1.0.0",
+ "readable-stream": "^2.0.6"
+ }
+ },
+ "arg": {
+ "version": "4.1.3",
+ "resolved": "https://registry.nlark.com/arg/download/arg-4.1.3.tgz?cache=0&sync_timestamp=1629166537485&other_urls=https%3A%2F%2Fregistry.nlark.com%2Farg%2Fdownload%2Farg-4.1.3.tgz",
+ "integrity": "sha1-Jp/HrVuOQstjyJbVZmAXJhwUQIk=",
+ "dev": true
+ },
+ "argparse": {
+ "version": "1.0.10",
+ "resolved": "https://registry.nlark.com/argparse/download/argparse-1.0.10.tgz",
+ "integrity": "sha1-vNZ5HqWuCXJeF+WtmIE0zUCz2RE=",
+ "dev": true,
+ "requires": {
+ "sprintf-js": "~1.0.2"
+ }
+ },
+ "aria-query": {
+ "version": "4.2.2",
+ "resolved": "https://registry.npmmirror.com/aria-query/download/aria-query-4.2.2.tgz?cache=0&sync_timestamp=1633308188641&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Faria-query%2Fdownload%2Faria-query-4.2.2.tgz",
+ "integrity": "sha1-DSymyazrVriXfp/tau1+FbvS+Ds=",
+ "dev": true,
+ "requires": {
+ "@babel/runtime": "^7.10.2",
+ "@babel/runtime-corejs3": "^7.10.2"
+ }
+ },
+ "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.nlark.com/arr-flatten/download/arr-flatten-1.1.0.tgz?cache=0&sync_timestamp=1618846805394&other_urls=https%3A%2F%2Fregistry.nlark.com%2Farr-flatten%2Fdownload%2Farr-flatten-1.1.0.tgz",
+ "integrity": "sha1-NgSLv/TntH4TZkQxbJlmnqWukfE=",
+ "dev": true
+ },
+ "arr-union": {
+ "version": "3.1.0",
+ "resolved": "https://registry.nlark.com/arr-union/download/arr-union-3.1.0.tgz",
+ "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",
+ "dev": true
+ },
+ "array-find-index": {
+ "version": "1.0.2",
+ "resolved": "https://registry.nlark.com/array-find-index/download/array-find-index-1.0.2.tgz",
+ "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=",
+ "dev": true
+ },
+ "array-flatten": {
+ "version": "2.1.2",
+ "resolved": "https://registry.nlark.com/array-flatten/download/array-flatten-2.1.2.tgz",
+ "integrity": "sha1-JO+AoowaiTYX4hSbDG0NeIKTsJk=",
+ "dev": true
+ },
+ "array-includes": {
+ "version": "3.1.4",
+ "resolved": "https://registry.npmmirror.com/array-includes/download/array-includes-3.1.4.tgz?cache=0&sync_timestamp=1633411556939&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Farray-includes%2Fdownload%2Farray-includes-3.1.4.tgz",
+ "integrity": "sha1-9bSTFix2DzU5Yx8AW6K7Rqy0W6k=",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.19.1",
+ "get-intrinsic": "^1.1.1",
+ "is-string": "^1.0.7"
+ }
+ },
+ "array-union": {
+ "version": "2.1.0",
+ "resolved": "https://registry.nlark.com/array-union/download/array-union-2.1.0.tgz",
+ "integrity": "sha1-t5hCCtvrHego2ErNii4j0+/oXo0=",
+ "dev": true
+ },
+ "array-uniq": {
+ "version": "1.0.3",
+ "resolved": "https://registry.nlark.com/array-uniq/download/array-uniq-1.0.3.tgz?cache=0&sync_timestamp=1622605321175&other_urls=https%3A%2F%2Fregistry.nlark.com%2Farray-uniq%2Fdownload%2Farray-uniq-1.0.3.tgz",
+ "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=",
+ "dev": true
+ },
+ "array-unique": {
+ "version": "0.3.2",
+ "resolved": "https://registry.nlark.com/array-unique/download/array-unique-0.3.2.tgz",
+ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
+ "dev": true
+ },
+ "array.prototype.flat": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmmirror.com/array.prototype.flat/download/array.prototype.flat-1.2.5.tgz",
+ "integrity": "sha1-B+CXXYS7x8SM0YedYJ5oJZjTPhM=",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.19.0"
+ }
+ },
+ "arrify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.nlark.com/arrify/download/arrify-1.0.1.tgz?cache=0&sync_timestamp=1619599497996&other_urls=https%3A%2F%2Fregistry.nlark.com%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
+ },
+ "asn1": {
+ "version": "0.2.6",
+ "resolved": "https://registry.npmmirror.com/asn1/download/asn1-0.2.6.tgz?cache=0&sync_timestamp=1635986760581&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fasn1%2Fdownload%2Fasn1-0.2.6.tgz",
+ "integrity": "sha1-DTp7tuZOAqkMAwOzHykoaOoJoI0=",
+ "dev": true,
+ "requires": {
+ "safer-buffer": "~2.1.0"
+ }
+ },
+ "assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.nlark.com/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
+ },
+ "astral-regex": {
+ "version": "2.0.0",
+ "resolved": "https://registry.nlark.com/astral-regex/download/astral-regex-2.0.0.tgz",
+ "integrity": "sha1-SDFDxWeu7UeFdZwIZXhtx319LjE=",
+ "dev": true
+ },
+ "async": {
+ "version": "2.6.3",
+ "resolved": "https://registry.npmmirror.com/async/download/async-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.nlark.com/async-limiter/download/async-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
+ },
+ "at-least-node": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npm.taobao.org/at-least-node/download/at-least-node-1.0.0.tgz",
+ "integrity": "sha1-YCzUtG6EStTv/JKoARo8RuAjjcI=",
+ "dev": true
+ },
+ "atob": {
+ "version": "2.1.2",
+ "resolved": "https://registry.nlark.com/atob/download/atob-2.1.2.tgz",
+ "integrity": "sha1-bZUX654DDSQ2ZmZR6GvZ9vE1M8k=",
+ "dev": true
+ },
+ "autoprefixer": {
+ "version": "9.8.8",
+ "resolved": "https://registry.npmmirror.com/autoprefixer/download/autoprefixer-9.8.8.tgz?cache=0&sync_timestamp=1635421245353&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fautoprefixer%2Fdownload%2Fautoprefixer-9.8.8.tgz",
+ "integrity": "sha1-/UvUWVOF+m8GWZ3nSaTV96R0lXo=",
+ "dev": true,
+ "requires": {
+ "browserslist": "^4.12.0",
+ "caniuse-lite": "^1.0.30001109",
+ "normalize-range": "^0.1.2",
+ "num2fraction": "^1.2.2",
+ "picocolors": "^0.2.1",
+ "postcss": "^7.0.32",
+ "postcss-value-parser": "^4.1.0"
+ },
+ "dependencies": {
+ "picocolors": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmmirror.com/picocolors/download/picocolors-0.2.1.tgz",
+ "integrity": "sha1-VwZw95NkaFHRuhNZlpYqutWHhZ8=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "7.0.39",
+ "resolved": "https://registry.npmmirror.com/postcss/download/postcss-7.0.39.tgz",
+ "integrity": "sha1-liQ3XZZWMOLh8sAqk1yCpZy0gwk=",
+ "dev": true,
+ "requires": {
+ "picocolors": "^0.2.1",
+ "source-map": "^0.6.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
+ }
+ }
+ },
+ "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.11.0",
+ "resolved": "https://registry.npm.taobao.org/aws4/download/aws4-1.11.0.tgz?cache=0&sync_timestamp=1604101244098&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Faws4%2Fdownload%2Faws4-1.11.0.tgz",
+ "integrity": "sha1-1h9G2DslGSUOJ4Ta9bCUeai0HFk=",
+ "dev": true
+ },
+ "axios": {
+ "version": "0.21.4",
+ "resolved": "https://registry.npmmirror.com/axios/download/axios-0.21.4.tgz?cache=0&sync_timestamp=1635213960429&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Faxios%2Fdownload%2Faxios-0.21.4.tgz",
+ "integrity": "sha1-xnuQ3AVo5cHPKwuFjEO6KOLtpXU=",
+ "dev": true,
+ "requires": {
+ "follow-redirects": "^1.14.0"
+ }
+ },
+ "axobject-query": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmmirror.com/axobject-query/download/axobject-query-2.2.0.tgz?cache=0&sync_timestamp=1633307441530&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Faxobject-query%2Fdownload%2Faxobject-query-2.2.0.tgz",
+ "integrity": "sha1-lD1H4QwLcEqkInXiDt83ImSJib4=",
+ "dev": true
+ },
+ "babel-loader": {
+ "version": "8.2.2",
+ "resolved": "https://registry.npmmirror.com/babel-loader/download/babel-loader-8.2.2.tgz?cache=0&sync_timestamp=1634769717079&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fbabel-loader%2Fdownload%2Fbabel-loader-8.2.2.tgz",
+ "integrity": "sha1-k2POhMEMmkDmx1N0jhRBtgyKC4E=",
+ "dev": true,
+ "requires": {
+ "find-cache-dir": "^3.3.1",
+ "loader-utils": "^1.4.0",
+ "make-dir": "^3.1.0",
+ "schema-utils": "^2.6.5"
+ },
+ "dependencies": {
+ "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"
+ }
+ },
+ "loader-utils": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmmirror.com/loader-utils/download/loader-utils-1.4.0.tgz?cache=0&sync_timestamp=1636687869321&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Floader-utils%2Fdownload%2Floader-utils-1.4.0.tgz",
+ "integrity": "sha1-xXm140yzSxp07cbB+za/o3HVphM=",
+ "dev": true,
+ "requires": {
+ "big.js": "^5.2.2",
+ "emojis-list": "^3.0.0",
+ "json5": "^1.0.1"
+ }
+ }
+ }
+ },
+ "babel-plugin-dynamic-import-node": {
+ "version": "2.3.3",
+ "resolved": "https://registry.nlark.com/babel-plugin-dynamic-import-node/download/babel-plugin-dynamic-import-node-2.3.3.tgz?cache=0&sync_timestamp=1618847141951&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fbabel-plugin-dynamic-import-node%2Fdownload%2Fbabel-plugin-dynamic-import-node-2.3.3.tgz",
+ "integrity": "sha1-hP2hnJduxcbe/vV/lCez3vZuF6M=",
+ "dev": true,
+ "requires": {
+ "object.assign": "^4.1.0"
+ }
+ },
+ "babel-plugin-polyfill-corejs2": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmmirror.com/babel-plugin-polyfill-corejs2/download/babel-plugin-polyfill-corejs2-0.2.3.tgz?cache=0&sync_timestamp=1636799838015&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fbabel-plugin-polyfill-corejs2%2Fdownload%2Fbabel-plugin-polyfill-corejs2-0.2.3.tgz",
+ "integrity": "sha1-btjjCYGwYvj+asqIc6N+vMjMHA8=",
+ "dev": true,
+ "requires": {
+ "@babel/compat-data": "^7.13.11",
+ "@babel/helper-define-polyfill-provider": "^0.2.4",
+ "semver": "^6.1.1"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz?cache=0&sync_timestamp=1616463540350&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-6.3.0.tgz",
+ "integrity": "sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0=",
+ "dev": true
+ }
+ }
+ },
+ "babel-plugin-polyfill-corejs3": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmmirror.com/babel-plugin-polyfill-corejs3/download/babel-plugin-polyfill-corejs3-0.2.5.tgz?cache=0&sync_timestamp=1636799836766&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fbabel-plugin-polyfill-corejs3%2Fdownload%2Fbabel-plugin-polyfill-corejs3-0.2.5.tgz",
+ "integrity": "sha1-J3mEahahZSJEriaLHpBq2hB/r5I=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-define-polyfill-provider": "^0.2.2",
+ "core-js-compat": "^3.16.2"
+ }
+ },
+ "babel-plugin-polyfill-regenerator": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmmirror.com/babel-plugin-polyfill-regenerator/download/babel-plugin-polyfill-regenerator-0.2.3.tgz?cache=0&sync_timestamp=1636799764770&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fbabel-plugin-polyfill-regenerator%2Fdownload%2Fbabel-plugin-polyfill-regenerator-0.2.3.tgz",
+ "integrity": "sha1-LpgI9QJ8QzbJlJkrSKQmJYDLjW0=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-define-polyfill-provider": "^0.2.4"
+ }
+ },
+ "bail": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmmirror.com/bail/download/bail-1.0.5.tgz?cache=0&sync_timestamp=1636274515578&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fbail%2Fdownload%2Fbail-1.0.5.tgz",
+ "integrity": "sha1-tvoTNASjksvB+MS/Y/WVM1Hnp3Y=",
+ "dev": true
+ },
+ "balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npm.taobao.org/balanced-match/download/balanced-match-1.0.2.tgz",
+ "integrity": "sha1-6D46fj8wCzTLnYf2FfoMvzV2kO4=",
+ "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.nlark.com/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.nlark.com/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.nlark.com/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": "1.0.1",
+ "resolved": "https://registry.nlark.com/base64-arraybuffer/download/base64-arraybuffer-1.0.1.tgz?cache=0&sync_timestamp=1628588917496&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fbase64-arraybuffer%2Fdownload%2Fbase64-arraybuffer-1.0.1.tgz",
+ "integrity": "sha1-h70TUlYm20qYOOAKUIwrc+/PNIw=",
+ "dev": true
+ },
+ "base64-js": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npm.taobao.org/base64-js/download/base64-js-1.5.1.tgz",
+ "integrity": "sha1-GxtEAWClv3rUC2UPCVljSBkDkwo=",
+ "dev": true
+ },
+ "base64id": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npm.taobao.org/base64id/download/base64id-2.0.0.tgz",
+ "integrity": "sha1-J3Csa8R9MSr5eov5pjQ0LgzSXLY=",
+ "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"
+ }
+ },
+ "big.js": {
+ "version": "5.2.2",
+ "resolved": "https://registry.nlark.com/big.js/download/big.js-5.2.2.tgz",
+ "integrity": "sha1-ZfCvOC9Xi83HQr2cKB6cstd2gyg=",
+ "dev": true
+ },
+ "binary-extensions": {
+ "version": "2.2.0",
+ "resolved": "https://registry.nlark.com/binary-extensions/download/binary-extensions-2.2.0.tgz",
+ "integrity": "sha1-dfUC7q+f/eQvyYgpZFvk6na9ni0=",
+ "dev": true
+ },
+ "bl": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npm.taobao.org/bl/download/bl-4.1.0.tgz?cache=0&sync_timestamp=1617381897308&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbl%2Fdownload%2Fbl-4.1.0.tgz",
+ "integrity": "sha1-RRU1JkGCvsL7vIOmKrmM8R2fezo=",
+ "dev": true,
+ "requires": {
+ "buffer": "^5.5.0",
+ "inherits": "^2.0.4",
+ "readable-stream": "^3.4.0"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npm.taobao.org/readable-stream/download/readable-stream-3.6.0.tgz",
+ "integrity": "sha1-M3u9o63AcGvT4CRCaihtS0sskZg=",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ }
+ }
+ }
+ },
+ "blocking-proxy": {
+ "version": "1.0.1",
+ "resolved": "https://registry.nlark.com/blocking-proxy/download/blocking-proxy-1.0.1.tgz",
+ "integrity": "sha1-gdb9H+E6TA1pV99/kbdemNrEDLI=",
+ "dev": true,
+ "requires": {
+ "minimist": "^1.2.0"
+ }
+ },
+ "body-parser": {
+ "version": "1.19.0",
+ "resolved": "https://registry.nlark.com/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.npmmirror.com/bytes/download/bytes-3.1.0.tgz?cache=0&sync_timestamp=1637015110760&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fbytes%2Fdownload%2Fbytes-3.1.0.tgz",
+ "integrity": "sha1-9s95M6Ng4FiPqf3oVlHNx/gF0fY=",
+ "dev": true
+ },
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmmirror.com/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.npmmirror.com/ms/download/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ }
+ }
+ },
+ "bonjour": {
+ "version": "3.5.0",
+ "resolved": "https://registry.nlark.com/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.nlark.com/boolbase/download/boolbase-1.0.0.tgz",
+ "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=",
+ "dev": true
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.nlark.com/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"
+ }
+ },
+ "browserslist": {
+ "version": "4.18.1",
+ "resolved": "https://registry.npmmirror.com/browserslist/download/browserslist-4.18.1.tgz",
+ "integrity": "sha512-8ScCzdpPwR2wQh8IT82CA2VgDwjHyqMovPBZSNH54+tm4Jk2pCuv90gmAdH6J84OCRWi0b4gMe6O6XPXuJnjgQ==",
+ "dev": true,
+ "requires": {
+ "caniuse-lite": "^1.0.30001280",
+ "electron-to-chromium": "^1.3.896",
+ "escalade": "^3.1.1",
+ "node-releases": "^2.0.1",
+ "picocolors": "^1.0.0"
+ }
+ },
+ "browserstack": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npm.taobao.org/browserstack/download/browserstack-1.6.1.tgz",
+ "integrity": "sha1-4FH5cz7DtQdlnzlcekdlobHjWLM=",
+ "dev": true,
+ "requires": {
+ "https-proxy-agent": "^2.2.1"
+ },
+ "dependencies": {
+ "agent-base": {
+ "version": "4.3.0",
+ "resolved": "https://registry.nlark.com/agent-base/download/agent-base-4.3.0.tgz",
+ "integrity": "sha1-gWXwHENgCbzK0LHRIvBe13Dvxu4=",
+ "dev": true,
+ "requires": {
+ "es6-promisify": "^5.0.0"
+ }
+ },
+ "debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmmirror.com/debug/download/debug-3.2.7.tgz",
+ "integrity": "sha1-clgLfpFF+zm2Z2+cXl+xALk0F5o=",
+ "dev": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "https-proxy-agent": {
+ "version": "2.2.4",
+ "resolved": "https://registry.nlark.com/https-proxy-agent/download/https-proxy-agent-2.2.4.tgz",
+ "integrity": "sha1-TuenN6vZJniik9mzShr00NCMeHs=",
+ "dev": true,
+ "requires": {
+ "agent-base": "^4.3.0",
+ "debug": "^3.1.0"
+ }
+ }
+ }
+ },
+ "btoa": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npm.taobao.org/btoa/download/btoa-1.2.1.tgz",
+ "integrity": "sha1-AamQn4ssk/a/aAuiYTHrMPf6PXM=",
+ "dev": true
+ },
+ "buffer": {
+ "version": "5.7.1",
+ "resolved": "https://registry.nlark.com/buffer/download/buffer-5.7.1.tgz",
+ "integrity": "sha1-umLnwTEzBTWCGXFghRqPZI6Z7tA=",
+ "dev": true,
+ "requires": {
+ "base64-js": "^1.3.1",
+ "ieee754": "^1.1.13"
+ }
+ },
+ "buffer-from": {
+ "version": "1.1.2",
+ "resolved": "https://registry.nlark.com/buffer-from/download/buffer-from-1.1.2.tgz",
+ "integrity": "sha1-KxRqb9cugLT1XSVfNe1Zo6mkG9U=",
+ "dev": true
+ },
+ "buffer-indexof": {
+ "version": "1.1.1",
+ "resolved": "https://registry.nlark.com/buffer-indexof/download/buffer-indexof-1.1.1.tgz",
+ "integrity": "sha1-Uvq8xqYG0aADAoAmSO9o9jnaJow=",
+ "dev": true
+ },
+ "builtins": {
+ "version": "1.0.3",
+ "resolved": "https://registry.nlark.com/builtins/download/builtins-1.0.3.tgz",
+ "integrity": "sha1-y5T662HIaWRR2zZTThQi+U8K7og=",
+ "dev": true
+ },
+ "bytes": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmmirror.com/bytes/download/bytes-3.0.0.tgz?cache=0&sync_timestamp=1637015110760&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fbytes%2Fdownload%2Fbytes-3.0.0.tgz",
+ "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=",
+ "dev": true
+ },
+ "cacache": {
+ "version": "15.2.0",
+ "resolved": "https://registry.nlark.com/cacache/download/cacache-15.2.0.tgz",
+ "integrity": "sha1-c69193xY5y2MYwp6KFjLGO9SM4k=",
+ "dev": true,
+ "requires": {
+ "@npmcli/move-file": "^1.0.1",
+ "chownr": "^2.0.0",
+ "fs-minipass": "^2.0.0",
+ "glob": "^7.1.4",
+ "infer-owner": "^1.0.4",
+ "lru-cache": "^6.0.0",
+ "minipass": "^3.1.1",
+ "minipass-collect": "^1.0.2",
+ "minipass-flush": "^1.0.5",
+ "minipass-pipeline": "^1.2.2",
+ "mkdirp": "^1.0.3",
+ "p-map": "^4.0.0",
+ "promise-inflight": "^1.0.1",
+ "rimraf": "^3.0.2",
+ "ssri": "^8.0.1",
+ "tar": "^6.0.2",
+ "unique-filename": "^1.1.1"
+ }
+ },
+ "cache-base": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmmirror.com/cache-base/download/cache-base-1.0.1.tgz?cache=0&sync_timestamp=1636237266442&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fcache-base%2Fdownload%2Fcache-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"
+ }
+ },
+ "call-bind": {
+ "version": "1.0.2",
+ "resolved": "https://registry.nlark.com/call-bind/download/call-bind-1.0.2.tgz",
+ "integrity": "sha1-sdTonmiBGcPJqQOtMKuy9qkZvjw=",
+ "requires": {
+ "function-bind": "^1.1.1",
+ "get-intrinsic": "^1.0.2"
+ }
+ },
+ "call-me-maybe": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npm.taobao.org/call-me-maybe/download/call-me-maybe-1.0.1.tgz",
+ "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=",
+ "dev": true
+ },
+ "caller-callsite": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmmirror.com/caller-callsite/download/caller-callsite-2.0.0.tgz?cache=0&sync_timestamp=1633617041481&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fcaller-callsite%2Fdownload%2Fcaller-callsite-2.0.0.tgz",
+ "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=",
+ "dev": true,
+ "requires": {
+ "callsites": "^2.0.0"
+ },
+ "dependencies": {
+ "callsites": {
+ "version": "2.0.0",
+ "resolved": "https://registry.nlark.com/callsites/download/callsites-2.0.0.tgz?cache=0&sync_timestamp=1628464722297&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcallsites%2Fdownload%2Fcallsites-2.0.0.tgz",
+ "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=",
+ "dev": true
+ }
+ }
+ },
+ "caller-path": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmmirror.com/caller-path/download/caller-path-2.0.0.tgz?cache=0&sync_timestamp=1633674209796&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fcaller-path%2Fdownload%2Fcaller-path-2.0.0.tgz",
+ "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=",
+ "dev": true,
+ "requires": {
+ "caller-callsite": "^2.0.0"
+ }
+ },
+ "callsites": {
+ "version": "3.1.0",
+ "resolved": "https://registry.nlark.com/callsites/download/callsites-3.1.0.tgz?cache=0&sync_timestamp=1628464722297&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcallsites%2Fdownload%2Fcallsites-3.1.0.tgz",
+ "integrity": "sha1-s2MKvYlDQy9Us/BRkjjjPNffL3M=",
+ "dev": true
+ },
+ "camelcase": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmmirror.com/camelcase/download/camelcase-5.3.1.tgz?cache=0&sync_timestamp=1636945205805&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fcamelcase%2Fdownload%2Fcamelcase-5.3.1.tgz",
+ "integrity": "sha1-48mzFWnhBoEd8kL3FXJaH0xJQyA=",
+ "dev": true
+ },
+ "camelcase-keys": {
+ "version": "6.2.2",
+ "resolved": "https://registry.npmmirror.com/camelcase-keys/download/camelcase-keys-6.2.2.tgz?cache=0&sync_timestamp=1633332959770&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fcamelcase-keys%2Fdownload%2Fcamelcase-keys-6.2.2.tgz",
+ "integrity": "sha1-XnVda6UaoiPsfT1S8ld4IQ+dw8A=",
+ "dev": true,
+ "requires": {
+ "camelcase": "^5.3.1",
+ "map-obj": "^4.0.0",
+ "quick-lru": "^4.0.1"
+ }
+ },
+ "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.30001283",
+ "resolved": "https://registry.npmmirror.com/caniuse-lite/download/caniuse-lite-1.0.30001283.tgz",
+ "integrity": "sha512-9RoKo841j1GQFSJz/nCXOj0sD7tHBtlowjYlrqIUS812x9/emfBLBt6IyMz1zIaYc/eRL8Cs6HPUVi2Hzq4sIg==",
+ "dev": true
+ },
+ "canonical-path": {
+ "version": "1.0.0",
+ "resolved": "https://registry.nlark.com/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
+ },
+ "ccount": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npm.taobao.org/ccount/download/ccount-1.1.0.tgz",
+ "integrity": "sha1-JGaH3rtgFHNRMb6KurLZOJj40EM=",
+ "dev": true
+ },
+ "cfb": {
+ "version": "1.2.1",
+ "resolved": "https://registry.nlark.com/cfb/download/cfb-1.2.1.tgz",
+ "integrity": "sha1-IJQp5MaO/TBkH2/HSy1gKL0gJAI=",
+ "requires": {
+ "adler-32": "~1.3.0",
+ "crc-32": "~1.2.0",
+ "printj": "~1.3.0"
+ },
+ "dependencies": {
+ "adler-32": {
+ "version": "1.3.0",
+ "resolved": "https://registry.nlark.com/adler-32/download/adler-32-1.3.0.tgz",
+ "integrity": "sha1-PK0bcc36afbIqR8+NhXTGk/e3HI=",
+ "requires": {
+ "printj": "~1.2.2"
+ },
+ "dependencies": {
+ "printj": {
+ "version": "1.2.3",
+ "resolved": "https://registry.nlark.com/printj/download/printj-1.2.3.tgz",
+ "integrity": "sha1-LPsrGSoeU4XbvltGZYrDSqgoUIo="
+ }
+ }
+ },
+ "printj": {
+ "version": "1.3.0",
+ "resolved": "https://registry.nlark.com/printj/download/printj-1.3.0.tgz",
+ "integrity": "sha1-kBipGKeQ5DcH8QYl1uEBh6Nnz/Y="
+ }
+ }
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.nlark.com/chalk/download/chalk-2.4.2.tgz?cache=0&sync_timestamp=1627646697260&other_urls=https%3A%2F%2Fregistry.nlark.com%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"
+ }
+ },
+ "character-entities": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmmirror.com/character-entities/download/character-entities-1.2.4.tgz?cache=0&sync_timestamp=1635869177182&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fcharacter-entities%2Fdownload%2Fcharacter-entities-1.2.4.tgz",
+ "integrity": "sha1-4Sw5Obfq9OWxXnrUxeKOHUjFsWs=",
+ "dev": true
+ },
+ "character-entities-html4": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmmirror.com/character-entities-html4/download/character-entities-html4-1.1.4.tgz",
+ "integrity": "sha1-DmSwo3U92/H9wETF/QHQGZoC4SU=",
+ "dev": true
+ },
+ "character-entities-legacy": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmmirror.com/character-entities-legacy/download/character-entities-legacy-1.1.4.tgz?cache=0&sync_timestamp=1635911795757&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fcharacter-entities-legacy%2Fdownload%2Fcharacter-entities-legacy-1.1.4.tgz",
+ "integrity": "sha1-lLwYRdznClu50uzHSHJWYSk9j8E=",
+ "dev": true
+ },
+ "character-reference-invalid": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmmirror.com/character-reference-invalid/download/character-reference-invalid-1.1.4.tgz?cache=0&sync_timestamp=1636446246852&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fcharacter-reference-invalid%2Fdownload%2Fcharacter-reference-invalid-1.1.4.tgz",
+ "integrity": "sha1-CDMpzaDq4nKrPbvzfpo4LBOvFWA=",
+ "dev": true
+ },
+ "chardet": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmmirror.com/chardet/download/chardet-0.7.0.tgz?cache=0&sync_timestamp=1634639141514&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fchardet%2Fdownload%2Fchardet-0.7.0.tgz",
+ "integrity": "sha1-kAlISfCTfy7twkJdDSip5fDLrZ4=",
+ "dev": true
+ },
+ "chokidar": {
+ "version": "3.5.2",
+ "resolved": "https://registry.npmmirror.com/chokidar/download/chokidar-3.5.2.tgz",
+ "integrity": "sha1-26OXb8rbAW9m/TZQIdkWANAcHnU=",
+ "dev": true,
+ "requires": {
+ "anymatch": "~3.1.2",
+ "braces": "~3.0.2",
+ "fsevents": "~2.3.2",
+ "glob-parent": "~5.1.2",
+ "is-binary-path": "~2.1.0",
+ "is-glob": "~4.0.1",
+ "normalize-path": "~3.0.0",
+ "readdirp": "~3.6.0"
+ },
+ "dependencies": {
+ "glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmmirror.com/glob-parent/download/glob-parent-5.1.2.tgz?cache=0&sync_timestamp=1632953810778&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fglob-parent%2Fdownload%2Fglob-parent-5.1.2.tgz",
+ "integrity": "sha1-hpgyxYA0/mikCTwX3BXoNA2EAcQ=",
+ "dev": true,
+ "requires": {
+ "is-glob": "^4.0.1"
+ }
+ }
+ }
+ },
+ "chownr": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npm.taobao.org/chownr/download/chownr-2.0.0.tgz",
+ "integrity": "sha1-Fb++U9LqtM9w8YqM1o6+Wzyx3s4=",
+ "dev": true
+ },
+ "chrome-trace-event": {
+ "version": "1.0.3",
+ "resolved": "https://registry.nlark.com/chrome-trace-event/download/chrome-trace-event-1.0.3.tgz",
+ "integrity": "sha1-EBXs7UdB4V0GZkqVfbv1DQQeJqw=",
+ "dev": true
+ },
+ "circular-dependency-plugin": {
+ "version": "5.2.2",
+ "resolved": "https://registry.npm.taobao.org/circular-dependency-plugin/download/circular-dependency-plugin-5.2.2.tgz",
+ "integrity": "sha1-Oeg2B52x088vmI3EjFGIpEBYtgA=",
+ "dev": true
+ },
+ "class-utils": {
+ "version": "0.3.6",
+ "resolved": "https://registry.nlark.com/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.nlark.com/define-property/download/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ }
+ }
+ },
+ "clean-css": {
+ "version": "3.4.28",
+ "resolved": "https://registry.npmmirror.com/clean-css/download/clean-css-3.4.28.tgz?cache=0&sync_timestamp=1634992314911&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fclean-css%2Fdownload%2Fclean-css-3.4.28.tgz",
+ "integrity": "sha1-vxlF6C/ICPVWlebd6uwBQA79A/8=",
+ "dev": true,
+ "requires": {
+ "commander": "2.8.x",
+ "source-map": "0.4.x"
+ },
+ "dependencies": {
+ "commander": {
+ "version": "2.8.1",
+ "resolved": "https://registry.npmmirror.com/commander/download/commander-2.8.1.tgz",
+ "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=",
+ "dev": true,
+ "requires": {
+ "graceful-readlink": ">= 1.0.0"
+ }
+ },
+ "source-map": {
+ "version": "0.4.4",
+ "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.4.4.tgz",
+ "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=",
+ "dev": true,
+ "requires": {
+ "amdefine": ">=0.0.4"
+ }
+ }
+ }
+ },
+ "clean-stack": {
+ "version": "2.2.0",
+ "resolved": "https://registry.nlark.com/clean-stack/download/clean-stack-2.2.0.tgz?cache=0&sync_timestamp=1622605328444&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fclean-stack%2Fdownload%2Fclean-stack-2.2.0.tgz",
+ "integrity": "sha1-7oRy27Ep5yezHooQpCfe6d/kAIs=",
+ "dev": true
+ },
+ "cli-cursor": {
+ "version": "3.1.0",
+ "resolved": "https://registry.nlark.com/cli-cursor/download/cli-cursor-3.1.0.tgz?cache=0&sync_timestamp=1629747506749&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcli-cursor%2Fdownload%2Fcli-cursor-3.1.0.tgz",
+ "integrity": "sha1-JkMFp65JDR0Dvwybp8kl0XU68wc=",
+ "dev": true,
+ "requires": {
+ "restore-cursor": "^3.1.0"
+ }
+ },
+ "cli-spinners": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmmirror.com/cli-spinners/download/cli-spinners-2.6.1.tgz?cache=0&sync_timestamp=1633109609172&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fcli-spinners%2Fdownload%2Fcli-spinners-2.6.1.tgz",
+ "integrity": "sha1-rclU6+KBw3pjGb+kAebdJIj/tw0=",
+ "dev": true
+ },
+ "cli-truncate": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmmirror.com/cli-truncate/download/cli-truncate-2.1.0.tgz",
+ "integrity": "sha1-w54ovwXtzeW+O5iZKiLe7Vork8c=",
+ "dev": true,
+ "requires": {
+ "slice-ansi": "^3.0.0",
+ "string-width": "^4.2.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.nlark.com/ansi-styles/download/ansi-styles-4.3.0.tgz",
+ "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=",
+ "dev": true,
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npm.taobao.org/color-convert/download/color-convert-2.0.1.tgz",
+ "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=",
+ "dev": true,
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npm.taobao.org/color-name/download/color-name-1.1.4.tgz",
+ "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=",
+ "dev": true
+ },
+ "slice-ansi": {
+ "version": "3.0.0",
+ "resolved": "https://registry.nlark.com/slice-ansi/download/slice-ansi-3.0.0.tgz",
+ "integrity": "sha1-Md3BCTCht+C2ewjJbC9Jt3p4l4c=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.0.0",
+ "astral-regex": "^2.0.0",
+ "is-fullwidth-code-point": "^3.0.0"
+ }
+ }
+ }
+ },
+ "cli-width": {
+ "version": "3.0.0",
+ "resolved": "https://registry.nlark.com/cli-width/download/cli-width-3.0.0.tgz",
+ "integrity": "sha1-ovSEN6LKqaIkNueUvwceyeYc7fY=",
+ "dev": true
+ },
+ "cliui": {
+ "version": "5.0.0",
+ "resolved": "https://registry.nlark.com/cliui/download/cliui-5.0.0.tgz",
+ "integrity": "sha1-3u/P2y6AB4SqNPRvoI4GhRx7u8U=",
+ "dev": true,
+ "requires": {
+ "string-width": "^3.1.0",
+ "strip-ansi": "^5.2.0",
+ "wrap-ansi": "^5.1.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "4.1.0",
+ "resolved": "https://registry.nlark.com/ansi-regex/download/ansi-regex-4.1.0.tgz?cache=0&sync_timestamp=1631634988487&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fansi-regex%2Fdownload%2Fansi-regex-4.1.0.tgz",
+ "integrity": "sha1-i5+PCM8ay4Q3Vqg5yox+MWjFGZc=",
+ "dev": true
+ },
+ "emoji-regex": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmmirror.com/emoji-regex/download/emoji-regex-7.0.3.tgz?cache=0&sync_timestamp=1632751333727&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Femoji-regex%2Fdownload%2Femoji-regex-7.0.3.tgz",
+ "integrity": "sha1-kzoEBShgyF6DwSJHnEdIqOTHIVY=",
+ "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
+ },
+ "string-width": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmmirror.com/string-width/download/string-width-3.1.0.tgz?cache=0&sync_timestamp=1632421013520&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fstring-width%2Fdownload%2Fstring-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.npmmirror.com/strip-ansi/download/strip-ansi-5.2.0.tgz?cache=0&sync_timestamp=1632420562057&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-5.2.0.tgz",
+ "integrity": "sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^4.1.0"
+ }
+ }
+ }
+ },
+ "clone": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npm.taobao.org/clone/download/clone-2.1.2.tgz",
+ "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18="
+ },
+ "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"
+ }
+ },
+ "clone-regexp": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npm.taobao.org/clone-regexp/download/clone-regexp-2.2.0.tgz?cache=0&sync_timestamp=1617892092032&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fclone-regexp%2Fdownload%2Fclone-regexp-2.2.0.tgz",
+ "integrity": "sha1-fWXgCIXNh5ZAXDWnN+eoa3Qp428=",
+ "dev": true,
+ "requires": {
+ "is-regexp": "^2.0.0"
+ },
+ "dependencies": {
+ "is-regexp": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npm.taobao.org/is-regexp/download/is-regexp-2.1.0.tgz",
+ "integrity": "sha1-zXNKVoZOI7lWv058ZsOWpMCyLC0=",
+ "dev": true
+ }
+ }
+ },
+ "code-point-at": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmmirror.com/code-point-at/download/code-point-at-1.1.0.tgz",
+ "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
+ "dev": true
+ },
+ "codepage": {
+ "version": "1.15.0",
+ "resolved": "https://registry.nlark.com/codepage/download/codepage-1.15.0.tgz?cache=0&sync_timestamp=1627596487574&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcodepage%2Fdownload%2Fcodepage-1.15.0.tgz",
+ "integrity": "sha1-LgBRkCSzlCTsZu6z7AcifmkmGKs="
+ },
+ "collapse-white-space": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npm.taobao.org/collapse-white-space/download/collapse-white-space-1.0.6.tgz?cache=0&sync_timestamp=1615197514795&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcollapse-white-space%2Fdownload%2Fcollapse-white-space-1.0.6.tgz",
+ "integrity": "sha1-5jYpwAFmZXkgYNu+t5xCI50sUoc=",
+ "dev": true
+ },
+ "collection-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.nlark.com/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-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
+ },
+ "colord": {
+ "version": "2.9.1",
+ "resolved": "https://registry.npmmirror.com/colord/download/colord-2.9.1.tgz?cache=0&sync_timestamp=1634659871445&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fcolord%2Fdownload%2Fcolord-2.9.1.tgz",
+ "integrity": "sha1-yWHqDv61fJ8PSDRFjybLnMSj+Q4=",
+ "dev": true
+ },
+ "colorette": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmmirror.com/colorette/download/colorette-1.4.0.tgz",
+ "integrity": "sha1-UZD7uHJ2JZqGrXAL/yxtb6o/ykA=",
+ "dev": true
+ },
+ "colors": {
+ "version": "1.4.0",
+ "resolved": "https://registry.nlark.com/colors/download/colors-1.4.0.tgz",
+ "integrity": "sha1-xQSRR51MG9rtLJztMs98fcI2D3g=",
+ "dev": true
+ },
+ "combined-stream": {
+ "version": "1.0.8",
+ "resolved": "https://registry.nlark.com/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.npmmirror.com/commander/download/commander-2.20.3.tgz",
+ "integrity": "sha1-/UhehMA+tIgcIHIrpIA16FMa6zM="
+ },
+ "comment-parser": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmmirror.com/comment-parser/download/comment-parser-1.2.4.tgz?cache=0&sync_timestamp=1637132117502&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fcomment-parser%2Fdownload%2Fcomment-parser-1.2.4.tgz",
+ "integrity": "sha1-SJ8+5V39GEpuS/+zG6uihEU8t2A=",
+ "dev": true
+ },
+ "commondir": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npm.taobao.org/commondir/download/commondir-1.0.1.tgz",
+ "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=",
+ "dev": true
+ },
+ "component-emitter": {
+ "version": "1.3.0",
+ "resolved": "https://registry.nlark.com/component-emitter/download/component-emitter-1.3.0.tgz",
+ "integrity": "sha1-FuQHD7qK4ptnnyIVhT7hgasuq8A=",
+ "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"
+ }
+ },
+ "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.npmmirror.com/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.npmmirror.com/ms/download/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ }
+ }
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.nlark.com/concat-map/download/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+ "dev": true
+ },
+ "connect": {
+ "version": "3.7.0",
+ "resolved": "https://registry.nlark.com/connect/download/connect-3.7.0.tgz?cache=0&sync_timestamp=1618847040246&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fconnect%2Fdownload%2Fconnect-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.npmmirror.com/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.npmmirror.com/ms/download/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ }
+ }
+ },
+ "connect-history-api-fallback": {
+ "version": "1.6.0",
+ "resolved": "https://registry.nlark.com/connect-history-api-fallback/download/connect-history-api-fallback-1.6.0.tgz?cache=0&sync_timestamp=1618847040596&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fconnect-history-api-fallback%2Fdownload%2Fconnect-history-api-fallback-1.6.0.tgz",
+ "integrity": "sha1-izIIk1kwjRERFdgcrT/Oq4iPl7w=",
+ "dev": true
+ },
+ "console-control-strings": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npm.taobao.org/console-control-strings/download/console-control-strings-1.1.0.tgz",
+ "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=",
+ "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.8.0",
+ "resolved": "https://registry.nlark.com/convert-source-map/download/convert-source-map-1.8.0.tgz?cache=0&sync_timestamp=1624045508580&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fconvert-source-map%2Fdownload%2Fconvert-source-map-1.8.0.tgz",
+ "integrity": "sha1-8zc8MtIbTXgN2ABFFGhPt5HKQ2k=",
+ "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.nlark.com/cookie-signature/download/cookie-signature-1.0.6.tgz",
+ "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=",
+ "dev": true
+ },
+ "copy-anything": {
+ "version": "2.0.3",
+ "resolved": "https://registry.nlark.com/copy-anything/download/copy-anything-2.0.3.tgz",
+ "integrity": "sha1-hCQHugJGaw34RIGbvjuuu+XUXYc=",
+ "dev": true,
+ "requires": {
+ "is-what": "^3.12.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": "9.0.1",
+ "resolved": "https://registry.npmmirror.com/copy-webpack-plugin/download/copy-webpack-plugin-9.0.1.tgz?cache=0&sync_timestamp=1637161330355&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fcopy-webpack-plugin%2Fdownload%2Fcopy-webpack-plugin-9.0.1.tgz",
+ "integrity": "sha1-tx0hmRWZ9hpO4AunkIe4uiebu1k=",
+ "dev": true,
+ "requires": {
+ "fast-glob": "^3.2.5",
+ "glob-parent": "^6.0.0",
+ "globby": "^11.0.3",
+ "normalize-path": "^3.0.0",
+ "p-limit": "^3.1.0",
+ "schema-utils": "^3.0.0",
+ "serialize-javascript": "^6.0.0"
+ },
+ "dependencies": {
+ "ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmmirror.com/ajv/download/ajv-6.12.6.tgz?cache=0&sync_timestamp=1637522259668&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fajv%2Fdownload%2Fajv-6.12.6.tgz",
+ "integrity": "sha1-uvWmLoArB9l3A0WG+MO69a3ybfQ=",
+ "dev": true,
+ "requires": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ }
+ },
+ "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
+ },
+ "p-limit": {
+ "version": "3.1.0",
+ "resolved": "https://registry.nlark.com/p-limit/download/p-limit-3.1.0.tgz?cache=0&sync_timestamp=1628812766275&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fp-limit%2Fdownload%2Fp-limit-3.1.0.tgz",
+ "integrity": "sha1-4drMvnjQ0TiMoYxk/qOOPlfjcGs=",
+ "dev": true,
+ "requires": {
+ "yocto-queue": "^0.1.0"
+ }
+ },
+ "schema-utils": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmmirror.com/schema-utils/download/schema-utils-3.1.1.tgz?cache=0&sync_timestamp=1637075888461&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fschema-utils%2Fdownload%2Fschema-utils-3.1.1.tgz",
+ "integrity": "sha1-vHTEtraZXB2I92qLd76nIZ4MgoE=",
+ "dev": true,
+ "requires": {
+ "@types/json-schema": "^7.0.8",
+ "ajv": "^6.12.5",
+ "ajv-keywords": "^3.5.2"
+ }
+ }
+ }
+ },
+ "core-js": {
+ "version": "3.16.0",
+ "resolved": "https://registry.npmmirror.com/core-js/download/core-js-3.16.0.tgz",
+ "integrity": "sha1-HUb7M3ILwfp/kNIEMfNqVUCFiYY=",
+ "dev": true
+ },
+ "core-js-compat": {
+ "version": "3.19.1",
+ "resolved": "https://registry.npmmirror.com/core-js-compat/download/core-js-compat-3.19.1.tgz?cache=0&sync_timestamp=1635883123462&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fcore-js-compat%2Fdownload%2Fcore-js-compat-3.19.1.tgz",
+ "integrity": "sha1-/lmPGpvzcxDXfDgTlo6ffHu5lHY=",
+ "dev": true,
+ "requires": {
+ "browserslist": "^4.17.6",
+ "semver": "7.0.0"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npm.taobao.org/semver/download/semver-7.0.0.tgz?cache=0&sync_timestamp=1616463540350&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-7.0.0.tgz",
+ "integrity": "sha1-XzyjV2HkfgWyBsba/yz4FPAxa44=",
+ "dev": true
+ }
+ }
+ },
+ "core-js-pure": {
+ "version": "3.19.1",
+ "resolved": "https://registry.npmmirror.com/core-js-pure/download/core-js-pure-3.19.1.tgz?cache=0&sync_timestamp=1635883214117&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fcore-js-pure%2Fdownload%2Fcore-js-pure-3.19.1.tgz",
+ "integrity": "sha1-7f/B/HY0AApVugXpWz8P6Vh6WqQ=",
+ "dev": true
+ },
+ "core-util-is": {
+ "version": "1.0.3",
+ "resolved": "https://registry.nlark.com/core-util-is/download/core-util-is-1.0.3.tgz",
+ "integrity": "sha1-pgQtNjTCsn6TKPg3uWX6yDgI24U="
+ },
+ "cors": {
+ "version": "2.8.5",
+ "resolved": "https://registry.npm.taobao.org/cors/download/cors-2.8.5.tgz",
+ "integrity": "sha1-6sEdpRWS3Ya58G9uesKTs9+HXSk=",
+ "dev": true,
+ "requires": {
+ "object-assign": "^4",
+ "vary": "^1"
+ }
+ },
+ "cosmiconfig": {
+ "version": "7.0.1",
+ "resolved": "https://registry.nlark.com/cosmiconfig/download/cosmiconfig-7.0.1.tgz",
+ "integrity": "sha1-cU11ZSLKzoZ4Z8y0R0xdAbuuXW0=",
+ "dev": true,
+ "requires": {
+ "@types/parse-json": "^4.0.0",
+ "import-fresh": "^3.2.1",
+ "parse-json": "^5.0.0",
+ "path-type": "^4.0.0",
+ "yaml": "^1.10.0"
+ }
+ },
+ "crc-32": {
+ "version": "1.2.0",
+ "resolved": "https://registry.nlark.com/crc-32/download/crc-32-1.2.0.tgz",
+ "integrity": "sha1-yy224puIUI4y2d0OwWk+e0Ghggg=",
+ "requires": {
+ "exit-on-epipe": "~1.0.1",
+ "printj": "~1.1.0"
+ }
+ },
+ "critters": {
+ "version": "0.0.12",
+ "resolved": "https://registry.npmmirror.com/critters/download/critters-0.0.12.tgz",
+ "integrity": "sha1-MrqodSbgU6QbZ+GZIWc+2SJk4qs=",
+ "dev": true,
+ "requires": {
+ "chalk": "^4.1.0",
+ "css-select": "^4.1.3",
+ "parse5": "^6.0.1",
+ "parse5-htmlparser2-tree-adapter": "^6.0.1",
+ "postcss": "^8.3.7",
+ "pretty-bytes": "^5.3.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.nlark.com/ansi-styles/download/ansi-styles-4.3.0.tgz",
+ "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=",
+ "dev": true,
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
+ },
+ "chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.nlark.com/chalk/download/chalk-4.1.2.tgz?cache=0&sync_timestamp=1627646697260&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fchalk%2Fdownload%2Fchalk-4.1.2.tgz",
+ "integrity": "sha1-qsTit3NKdAhnrrFr8CqtVWoeegE=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ }
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npm.taobao.org/color-convert/download/color-convert-2.0.1.tgz",
+ "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=",
+ "dev": true,
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npm.taobao.org/color-name/download/color-name-1.1.4.tgz",
+ "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=",
+ "dev": true
+ },
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.nlark.com/has-flag/download/has-flag-4.0.0.tgz?cache=0&sync_timestamp=1626715907927&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fhas-flag%2Fdownload%2Fhas-flag-4.0.0.tgz",
+ "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=",
+ "dev": true
+ },
+ "parse5": {
+ "version": "6.0.1",
+ "resolved": "https://registry.nlark.com/parse5/download/parse5-6.0.1.tgz",
+ "integrity": "sha1-4aHAhcVps9wIMhGE8Zo5zCf3wws=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "8.4.1",
+ "resolved": "https://registry.npmmirror.com/postcss/download/postcss-8.4.1.tgz",
+ "integrity": "sha512-WqLs/TTzXdG+/A4ZOOK9WDZiikrRaiA+eoEb/jz2DT9KUhMNHgP7yKPO8vwi62ZCsb703Gwb7BMZwDzI54Y2Ag==",
+ "dev": true,
+ "requires": {
+ "nanoid": "^3.1.30",
+ "picocolors": "^1.0.0",
+ "source-map-js": "^1.0.1"
+ }
+ },
+ "supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmmirror.com/supports-color/download/supports-color-7.2.0.tgz",
+ "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=",
+ "dev": true,
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ }
+ }
+ },
+ "cross-spawn": {
+ "version": "6.0.5",
+ "resolved": "https://registry.npm.taobao.org/cross-spawn/download/cross-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?cache=0&sync_timestamp=1616463540350&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-5.7.1.tgz",
+ "integrity": "sha1-qVT5Ma66UI0we78Gnv8MAclhFvc=",
+ "dev": true
+ }
+ }
+ },
+ "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-blank-pseudo": {
+ "version": "0.1.4",
+ "resolved": "https://registry.nlark.com/css-blank-pseudo/download/css-blank-pseudo-0.1.4.tgz?cache=0&sync_timestamp=1631804332345&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcss-blank-pseudo%2Fdownload%2Fcss-blank-pseudo-0.1.4.tgz",
+ "integrity": "sha1-3979MlS/ioICeZNnTM81SDv8s8U=",
+ "dev": true,
+ "requires": {
+ "postcss": "^7.0.5"
+ },
+ "dependencies": {
+ "picocolors": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmmirror.com/picocolors/download/picocolors-0.2.1.tgz",
+ "integrity": "sha1-VwZw95NkaFHRuhNZlpYqutWHhZ8=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "7.0.39",
+ "resolved": "https://registry.npmmirror.com/postcss/download/postcss-7.0.39.tgz",
+ "integrity": "sha1-liQ3XZZWMOLh8sAqk1yCpZy0gwk=",
+ "dev": true,
+ "requires": {
+ "picocolors": "^0.2.1",
+ "source-map": "^0.6.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
+ }
+ }
+ },
+ "css-declaration-sorter": {
+ "version": "6.1.3",
+ "resolved": "https://registry.nlark.com/css-declaration-sorter/download/css-declaration-sorter-6.1.3.tgz",
+ "integrity": "sha1-6YUuTPlAunn1CdlCWxN9H5RDjcI=",
+ "dev": true,
+ "requires": {
+ "timsort": "^0.3.0"
+ }
+ },
+ "css-has-pseudo": {
+ "version": "0.10.0",
+ "resolved": "https://registry.nlark.com/css-has-pseudo/download/css-has-pseudo-0.10.0.tgz",
+ "integrity": "sha1-PGQqs0yiQsWcQaEl35EFhB9pZu4=",
+ "dev": true,
+ "requires": {
+ "postcss": "^7.0.6",
+ "postcss-selector-parser": "^5.0.0-rc.4"
+ },
+ "dependencies": {
+ "cssesc": {
+ "version": "2.0.0",
+ "resolved": "https://registry.nlark.com/cssesc/download/cssesc-2.0.0.tgz",
+ "integrity": "sha1-OxO9G7HLNuG8taTc0n9UxdyzVwM=",
+ "dev": true
+ },
+ "picocolors": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmmirror.com/picocolors/download/picocolors-0.2.1.tgz",
+ "integrity": "sha1-VwZw95NkaFHRuhNZlpYqutWHhZ8=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "7.0.39",
+ "resolved": "https://registry.npmmirror.com/postcss/download/postcss-7.0.39.tgz",
+ "integrity": "sha1-liQ3XZZWMOLh8sAqk1yCpZy0gwk=",
+ "dev": true,
+ "requires": {
+ "picocolors": "^0.2.1",
+ "source-map": "^0.6.1"
+ }
+ },
+ "postcss-selector-parser": {
+ "version": "5.0.0",
+ "resolved": "https://registry.nlark.com/postcss-selector-parser/download/postcss-selector-parser-5.0.0.tgz?cache=0&sync_timestamp=1620752939806&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpostcss-selector-parser%2Fdownload%2Fpostcss-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"
+ }
+ },
+ "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-line-break": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/css-line-break/-/css-line-break-2.1.0.tgz",
+ "integrity": "sha512-FHcKFCZcAha3LwfVBhCQbW2nCNbkZXn7KVUJcsT5/P8YmfsVja0FMPJr0B903j/E69HUphKiV9iQArX8SDYA4w==",
+ "requires": {
+ "utrie": "^1.0.2"
+ }
+ },
+ "css-loader": {
+ "version": "6.2.0",
+ "resolved": "https://registry.npmmirror.com/css-loader/download/css-loader-6.2.0.tgz?cache=0&sync_timestamp=1635967924209&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fcss-loader%2Fdownload%2Fcss-loader-6.2.0.tgz",
+ "integrity": "sha1-lmPZRDhB3pV6PLm86i7aZbM3cHE=",
+ "dev": true,
+ "requires": {
+ "icss-utils": "^5.1.0",
+ "postcss": "^8.2.15",
+ "postcss-modules-extract-imports": "^3.0.0",
+ "postcss-modules-local-by-default": "^4.0.0",
+ "postcss-modules-scope": "^3.0.0",
+ "postcss-modules-values": "^4.0.0",
+ "postcss-value-parser": "^4.1.0",
+ "semver": "^7.3.5"
+ }
+ },
+ "css-minimizer-webpack-plugin": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmmirror.com/css-minimizer-webpack-plugin/download/css-minimizer-webpack-plugin-3.0.2.tgz",
+ "integrity": "sha1-j6298QEoy0Aie/8nWku0dBJTQkU=",
+ "dev": true,
+ "requires": {
+ "cssnano": "^5.0.6",
+ "jest-worker": "^27.0.2",
+ "p-limit": "^3.0.2",
+ "postcss": "^8.3.5",
+ "schema-utils": "^3.0.0",
+ "serialize-javascript": "^6.0.0",
+ "source-map": "^0.6.1"
+ },
+ "dependencies": {
+ "ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmmirror.com/ajv/download/ajv-6.12.6.tgz?cache=0&sync_timestamp=1637522259668&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fajv%2Fdownload%2Fajv-6.12.6.tgz",
+ "integrity": "sha1-uvWmLoArB9l3A0WG+MO69a3ybfQ=",
+ "dev": true,
+ "requires": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ }
+ },
+ "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
+ },
+ "p-limit": {
+ "version": "3.1.0",
+ "resolved": "https://registry.nlark.com/p-limit/download/p-limit-3.1.0.tgz?cache=0&sync_timestamp=1628812766275&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fp-limit%2Fdownload%2Fp-limit-3.1.0.tgz",
+ "integrity": "sha1-4drMvnjQ0TiMoYxk/qOOPlfjcGs=",
+ "dev": true,
+ "requires": {
+ "yocto-queue": "^0.1.0"
+ }
+ },
+ "schema-utils": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmmirror.com/schema-utils/download/schema-utils-3.1.1.tgz?cache=0&sync_timestamp=1637075888461&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fschema-utils%2Fdownload%2Fschema-utils-3.1.1.tgz",
+ "integrity": "sha1-vHTEtraZXB2I92qLd76nIZ4MgoE=",
+ "dev": true,
+ "requires": {
+ "@types/json-schema": "^7.0.8",
+ "ajv": "^6.12.5",
+ "ajv-keywords": "^3.5.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
+ }
+ }
+ },
+ "css-parse": {
+ "version": "2.0.0",
+ "resolved": "https://registry.nlark.com/css-parse/download/css-parse-2.0.0.tgz",
+ "integrity": "sha1-pGjuZnwW2BzPBcWMONKpfHgNv9Q=",
+ "dev": true,
+ "requires": {
+ "css": "^2.0.0"
+ }
+ },
+ "css-prefers-color-scheme": {
+ "version": "3.1.1",
+ "resolved": "https://registry.nlark.com/css-prefers-color-scheme/download/css-prefers-color-scheme-3.1.1.tgz?cache=0&sync_timestamp=1631886210994&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcss-prefers-color-scheme%2Fdownload%2Fcss-prefers-color-scheme-3.1.1.tgz",
+ "integrity": "sha1-b4MKJxQZnU8NDQu4onkW7WXP8fQ=",
+ "dev": true,
+ "requires": {
+ "postcss": "^7.0.5"
+ },
+ "dependencies": {
+ "picocolors": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmmirror.com/picocolors/download/picocolors-0.2.1.tgz",
+ "integrity": "sha1-VwZw95NkaFHRuhNZlpYqutWHhZ8=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "7.0.39",
+ "resolved": "https://registry.npmmirror.com/postcss/download/postcss-7.0.39.tgz",
+ "integrity": "sha1-liQ3XZZWMOLh8sAqk1yCpZy0gwk=",
+ "dev": true,
+ "requires": {
+ "picocolors": "^0.2.1",
+ "source-map": "^0.6.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
+ }
+ }
+ },
+ "css-select": {
+ "version": "4.1.3",
+ "resolved": "https://registry.nlark.com/css-select/download/css-select-4.1.3.tgz?cache=0&sync_timestamp=1622994276976&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcss-select%2Fdownload%2Fcss-select-4.1.3.tgz",
+ "integrity": "sha1-pwRA9wMX8maRGK10/xBeZYSccGc=",
+ "dev": true,
+ "requires": {
+ "boolbase": "^1.0.0",
+ "css-what": "^5.0.0",
+ "domhandler": "^4.2.0",
+ "domutils": "^2.6.0",
+ "nth-check": "^2.0.0"
+ }
+ },
+ "css-tree": {
+ "version": "1.1.3",
+ "resolved": "https://registry.nlark.com/css-tree/download/css-tree-1.1.3.tgz",
+ "integrity": "sha1-60hw+2/XcHMn7JXC/yqwm16NuR0=",
+ "dev": true,
+ "requires": {
+ "mdn-data": "2.0.14",
+ "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-what": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmmirror.com/css-what/download/css-what-5.1.0.tgz",
+ "integrity": "sha1-P3tweq32M7r2LCzrhXm1RbtA9/4=",
+ "dev": true
+ },
+ "cssdb": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npm.taobao.org/cssdb/download/cssdb-4.4.0.tgz",
+ "integrity": "sha1-O/LypowQ9cagir2SN4Mx7oA83bA=",
+ "dev": true
+ },
+ "cssesc": {
+ "version": "3.0.0",
+ "resolved": "https://registry.nlark.com/cssesc/download/cssesc-3.0.0.tgz",
+ "integrity": "sha1-N3QZGZA7hoVl4cCep0dEXNGJg+4=",
+ "dev": true
+ },
+ "cssnano": {
+ "version": "5.0.11",
+ "resolved": "https://registry.npmmirror.com/cssnano/download/cssnano-5.0.11.tgz?cache=0&sync_timestamp=1637085734194&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fcssnano%2Fdownload%2Fcssnano-5.0.11.tgz",
+ "integrity": "sha512-5SHM31NAAe29jvy0MJqK40zZ/8dGlnlzcfHKw00bWMVFp8LWqtuyPSFwbaoIoxvt71KWJOfg8HMRGrBR3PExCg==",
+ "dev": true,
+ "requires": {
+ "cssnano-preset-default": "^5.1.7",
+ "is-resolvable": "^1.1.0",
+ "lilconfig": "^2.0.3",
+ "yaml": "^1.10.2"
+ }
+ },
+ "cssnano-preset-default": {
+ "version": "5.1.7",
+ "resolved": "https://registry.npmmirror.com/cssnano-preset-default/download/cssnano-preset-default-5.1.7.tgz?cache=0&sync_timestamp=1637084922741&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fcssnano-preset-default%2Fdownload%2Fcssnano-preset-default-5.1.7.tgz",
+ "integrity": "sha512-bWDjtTY+BOqrqBtsSQIbN0RLGD2Yr2CnecpP0ydHNafh9ZUEre8c8VYTaH9FEbyOt0eIfEUAYYk5zj92ioO8LA==",
+ "dev": true,
+ "requires": {
+ "css-declaration-sorter": "^6.0.3",
+ "cssnano-utils": "^2.0.1",
+ "postcss-calc": "^8.0.0",
+ "postcss-colormin": "^5.2.1",
+ "postcss-convert-values": "^5.0.2",
+ "postcss-discard-comments": "^5.0.1",
+ "postcss-discard-duplicates": "^5.0.1",
+ "postcss-discard-empty": "^5.0.1",
+ "postcss-discard-overridden": "^5.0.1",
+ "postcss-merge-longhand": "^5.0.4",
+ "postcss-merge-rules": "^5.0.3",
+ "postcss-minify-font-values": "^5.0.1",
+ "postcss-minify-gradients": "^5.0.3",
+ "postcss-minify-params": "^5.0.2",
+ "postcss-minify-selectors": "^5.1.0",
+ "postcss-normalize-charset": "^5.0.1",
+ "postcss-normalize-display-values": "^5.0.1",
+ "postcss-normalize-positions": "^5.0.1",
+ "postcss-normalize-repeat-style": "^5.0.1",
+ "postcss-normalize-string": "^5.0.1",
+ "postcss-normalize-timing-functions": "^5.0.1",
+ "postcss-normalize-unicode": "^5.0.1",
+ "postcss-normalize-url": "^5.0.3",
+ "postcss-normalize-whitespace": "^5.0.1",
+ "postcss-ordered-values": "^5.0.2",
+ "postcss-reduce-initial": "^5.0.1",
+ "postcss-reduce-transforms": "^5.0.1",
+ "postcss-svgo": "^5.0.3",
+ "postcss-unique-selectors": "^5.0.2"
+ }
+ },
+ "cssnano-utils": {
+ "version": "2.0.1",
+ "resolved": "https://registry.nlark.com/cssnano-utils/download/cssnano-utils-2.0.1.tgz",
+ "integrity": "sha1-hmCqKzfthp0uLyKRgZapqLZJjOI=",
+ "dev": true
+ },
+ "csso": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npm.taobao.org/csso/download/csso-4.2.0.tgz?cache=0&sync_timestamp=1606408777341&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcsso%2Fdownload%2Fcsso-4.2.0.tgz",
+ "integrity": "sha1-6jpWE0bo3J9UbW/r7dUBh884lSk=",
+ "dev": true,
+ "requires": {
+ "css-tree": "^1.1.2"
+ }
+ },
+ "csstype": {
+ "version": "3.0.10",
+ "resolved": "https://registry.npmmirror.com/csstype/download/csstype-3.0.10.tgz?cache=0&sync_timestamp=1637224507298&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fcsstype%2Fdownload%2Fcsstype-3.0.10.tgz",
+ "integrity": "sha512-2u44ZG2OcNUO9HDp/Jl8C07x6pU/eTR3ncV91SiK3dhG9TWvRVsCoJw14Ckx5DgWkzGA3waZWO3d7pgqpUI/XA=="
+ },
+ "currently-unhandled": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npm.taobao.org/currently-unhandled/download/currently-unhandled-0.4.1.tgz",
+ "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=",
+ "dev": true,
+ "requires": {
+ "array-find-index": "^1.0.1"
+ }
+ },
+ "custom-event": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmmirror.com/custom-event/download/custom-event-1.0.1.tgz",
+ "integrity": "sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU=",
+ "dev": true
+ },
+ "d3-array": {
+ "version": "2.12.1",
+ "resolved": "https://registry.npmmirror.com/d3-array/download/d3-array-2.12.1.tgz",
+ "integrity": "sha1-4gtBqvzf/fXVCSgATs7PgVpGXoE=",
+ "requires": {
+ "internmap": "^1.0.0"
+ }
+ },
+ "d3-brush": {
+ "version": "2.1.0",
+ "resolved": "https://registry.nlark.com/d3-brush/download/d3-brush-2.1.0.tgz",
+ "integrity": "sha1-ra37sQTok3rxQumm4gKDJvBHEGU=",
+ "requires": {
+ "d3-dispatch": "1 - 2",
+ "d3-drag": "2",
+ "d3-interpolate": "1 - 2",
+ "d3-selection": "2",
+ "d3-transition": "2"
+ }
+ },
+ "d3-collection": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npm.taobao.org/d3-collection/download/d3-collection-1.0.7.tgz",
+ "integrity": "sha1-NJvSqpl32wcQkcExRNXk8WtbMQ4="
+ },
+ "d3-color": {
+ "version": "1.4.1",
+ "resolved": "https://registry.nlark.com/d3-color/download/d3-color-1.4.1.tgz?cache=0&sync_timestamp=1622917832534&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fd3-color%2Fdownload%2Fd3-color-1.4.1.tgz",
+ "integrity": "sha1-xSACv4hGraRCTVXZeYL+8m6zvIo="
+ },
+ "d3-composite-projections": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npm.taobao.org/d3-composite-projections/download/d3-composite-projections-1.4.0.tgz",
+ "integrity": "sha1-J7GC+mNaWGk0n+kRzgGAuXTRfxI=",
+ "requires": {
+ "d3-geo": "^2.0.1",
+ "d3-path": "^2.0.0"
+ },
+ "dependencies": {
+ "d3-geo": {
+ "version": "2.0.2",
+ "resolved": "https://registry.nlark.com/d3-geo/download/d3-geo-2.0.2.tgz",
+ "integrity": "sha1-wGXBtx/oxfG+ZX5fQ9m90BA4PEA=",
+ "requires": {
+ "d3-array": "^2.5.0"
+ }
+ }
+ }
+ },
+ "d3-dispatch": {
+ "version": "2.0.0",
+ "resolved": "https://registry.nlark.com/d3-dispatch/download/d3-dispatch-2.0.0.tgz?cache=0&sync_timestamp=1622918261265&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fd3-dispatch%2Fdownload%2Fd3-dispatch-2.0.0.tgz",
+ "integrity": "sha1-ihjhb3bdP8rvQhY8l7kmqptV588="
+ },
+ "d3-drag": {
+ "version": "2.0.0",
+ "resolved": "https://registry.nlark.com/d3-drag/download/d3-drag-2.0.0.tgz",
+ "integrity": "sha1-nq8EbOntHCXIhmGRHB1aTY636m0=",
+ "requires": {
+ "d3-dispatch": "1 - 2",
+ "d3-selection": "2"
+ }
+ },
+ "d3-dsv": {
+ "version": "1.2.0",
+ "resolved": "https://registry.nlark.com/d3-dsv/download/d3-dsv-1.2.0.tgz",
+ "integrity": "sha1-nV91w6X4q9YR900/WEew1DOLiFw=",
+ "requires": {
+ "commander": "2",
+ "iconv-lite": "0.4",
+ "rw": "1"
+ }
+ },
+ "d3-ease": {
+ "version": "1.0.7",
+ "resolved": "https://registry.nlark.com/d3-ease/download/d3-ease-1.0.7.tgz",
+ "integrity": "sha1-moNIkO+LiujFWLL+Vb1X9Zk7heI="
+ },
+ "d3-format": {
+ "version": "2.0.0",
+ "resolved": "https://registry.nlark.com/d3-format/download/d3-format-2.0.0.tgz",
+ "integrity": "sha1-oQvMD5hsNytym6RHOCQTqr9bB2c="
+ },
+ "d3-geo": {
+ "version": "1.6.4",
+ "resolved": "https://registry.nlark.com/d3-geo/download/d3-geo-1.6.4.tgz",
+ "integrity": "sha1-8g4eRhyxhF9ai+Vatvh2VCp+MZk=",
+ "requires": {
+ "d3-array": "1"
+ },
+ "dependencies": {
+ "d3-array": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmmirror.com/d3-array/download/d3-array-1.2.4.tgz",
+ "integrity": "sha1-Y1zk1e6nWfb2BYY9vPww7cc39x8="
+ }
+ }
+ },
+ "d3-geo-projection": {
+ "version": "2.1.2",
+ "resolved": "https://registry.nlark.com/d3-geo-projection/download/d3-geo-projection-2.1.2.tgz",
+ "integrity": "sha1-ffjh6dBG1jHGUJ9+UxNX1K3CSqM=",
+ "requires": {
+ "commander": "2",
+ "d3-array": "1",
+ "d3-geo": "^1.1.0"
+ },
+ "dependencies": {
+ "d3-array": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmmirror.com/d3-array/download/d3-array-1.2.4.tgz",
+ "integrity": "sha1-Y1zk1e6nWfb2BYY9vPww7cc39x8="
+ }
+ }
+ },
+ "d3-hexjson": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npm.taobao.org/d3-hexjson/download/d3-hexjson-1.1.1.tgz?cache=0&sync_timestamp=1605174916023&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fd3-hexjson%2Fdownload%2Fd3-hexjson-1.1.1.tgz",
+ "integrity": "sha1-oeJk/5A7sJuPj0vFnHJEepH0YP4=",
+ "requires": {
+ "d3-array": "1"
+ },
+ "dependencies": {
+ "d3-array": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmmirror.com/d3-array/download/d3-array-1.2.4.tgz",
+ "integrity": "sha1-Y1zk1e6nWfb2BYY9vPww7cc39x8="
+ }
+ }
+ },
+ "d3-hierarchy": {
+ "version": "1.1.9",
+ "resolved": "https://registry.nlark.com/d3-hierarchy/download/d3-hierarchy-1.1.9.tgz",
+ "integrity": "sha1-L2vuJMqupD+Nw3VF+gFihVlkeoM="
+ },
+ "d3-interpolate": {
+ "version": "1.4.0",
+ "resolved": "https://registry.nlark.com/d3-interpolate/download/d3-interpolate-1.4.0.tgz",
+ "integrity": "sha1-Um554tgNqjg/ngwcHH3MDwWD6Yc=",
+ "requires": {
+ "d3-color": "1"
+ }
+ },
+ "d3-path": {
+ "version": "2.0.0",
+ "resolved": "https://registry.nlark.com/d3-path/download/d3-path-2.0.0.tgz?cache=0&sync_timestamp=1622917833000&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fd3-path%2Fdownload%2Fd3-path-2.0.0.tgz",
+ "integrity": "sha1-VdhqwTGgVIra4kHuv7VrRYLdCdg="
+ },
+ "d3-sankey": {
+ "version": "0.9.1",
+ "resolved": "https://registry.nlark.com/d3-sankey/download/d3-sankey-0.9.1.tgz",
+ "integrity": "sha1-uFAUWjKEERY23eyQ39qMZJGb7k4=",
+ "requires": {
+ "d3-array": "1",
+ "d3-collection": "1",
+ "d3-shape": "^1.2.0"
+ },
+ "dependencies": {
+ "d3-array": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmmirror.com/d3-array/download/d3-array-1.2.4.tgz",
+ "integrity": "sha1-Y1zk1e6nWfb2BYY9vPww7cc39x8="
+ }
+ }
+ },
+ "d3-scale": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmmirror.com/d3-scale/download/d3-scale-3.3.0.tgz",
+ "integrity": "sha1-KMYAsp9H5bnNLfl0nCBnJ5ZiA/M=",
+ "requires": {
+ "d3-array": "^2.3.0",
+ "d3-format": "1 - 2",
+ "d3-interpolate": "1.2.0 - 2",
+ "d3-time": "^2.1.1",
+ "d3-time-format": "2 - 3"
+ }
+ },
+ "d3-selection": {
+ "version": "2.0.0",
+ "resolved": "https://registry.nlark.com/d3-selection/download/d3-selection-2.0.0.tgz",
+ "integrity": "sha1-lKEWOOohQbdWX4g3gNq8fvamEGY="
+ },
+ "d3-shape": {
+ "version": "1.3.7",
+ "resolved": "https://registry.nlark.com/d3-shape/download/d3-shape-1.3.7.tgz?cache=0&sync_timestamp=1622917833478&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fd3-shape%2Fdownload%2Fd3-shape-1.3.7.tgz",
+ "integrity": "sha1-32OAG+B7yYa8VPY3ibT+UCmStdc=",
+ "requires": {
+ "d3-path": "1"
+ },
+ "dependencies": {
+ "d3-path": {
+ "version": "1.0.9",
+ "resolved": "https://registry.nlark.com/d3-path/download/d3-path-1.0.9.tgz?cache=0&sync_timestamp=1622917833000&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fd3-path%2Fdownload%2Fd3-path-1.0.9.tgz",
+ "integrity": "sha1-SMBQux/owmJJOoyvVSTj6VkXAc8="
+ }
+ }
+ },
+ "d3-time": {
+ "version": "2.1.1",
+ "resolved": "https://registry.nlark.com/d3-time/download/d3-time-2.1.1.tgz?cache=0&sync_timestamp=1622916838153&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fd3-time%2Fdownload%2Fd3-time-2.1.1.tgz",
+ "integrity": "sha1-6dioqIaR9FSOaMoIXl/5VnJKZoI=",
+ "requires": {
+ "d3-array": "2"
+ }
+ },
+ "d3-time-format": {
+ "version": "3.0.0",
+ "resolved": "https://registry.nlark.com/d3-time-format/download/d3-time-format-3.0.0.tgz",
+ "integrity": "sha1-34BWyDZZ4B8grF2l/ernwI1fG7Y=",
+ "requires": {
+ "d3-time": "1 - 2"
+ }
+ },
+ "d3-timer": {
+ "version": "1.0.10",
+ "resolved": "https://registry.nlark.com/d3-timer/download/d3-timer-1.0.10.tgz",
+ "integrity": "sha1-3+dripF0iDGxO22ceT/71QjdneU="
+ },
+ "d3-transition": {
+ "version": "2.0.0",
+ "resolved": "https://registry.nlark.com/d3-transition/download/d3-transition-2.0.0.tgz",
+ "integrity": "sha1-Nm73DCLviNHjQQX1B1FpkaKRyUw=",
+ "requires": {
+ "d3-color": "1 - 2",
+ "d3-dispatch": "1 - 2",
+ "d3-ease": "1 - 2",
+ "d3-interpolate": "1 - 2",
+ "d3-timer": "1 - 2"
+ }
+ },
+ "d3-voronoi": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npm.taobao.org/d3-voronoi/download/d3-voronoi-1.1.4.tgz",
+ "integrity": "sha1-3Tx412U9K7NZKErkeGRdlZRMgpc="
+ },
+ "dagre": {
+ "version": "0.8.5",
+ "resolved": "https://registry.nlark.com/dagre/download/dagre-0.8.5.tgz",
+ "integrity": "sha1-ujCwBV2sErbB/MJHgXRCd30Gr+4=",
+ "requires": {
+ "graphlib": "^2.1.8",
+ "lodash": "^4.17.15"
+ }
+ },
+ "dashdash": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npm.taobao.org/dashdash/download/dashdash-1.14.1.tgz?cache=0&sync_timestamp=1601073454623&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdashdash%2Fdownload%2Fdashdash-1.14.1.tgz",
+ "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "^1.0.0"
+ }
+ },
+ "date-fns": {
+ "version": "2.26.0",
+ "resolved": "https://registry.npmmirror.com/date-fns/download/date-fns-2.26.0.tgz?cache=0&sync_timestamp=1637308994584&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fdate-fns%2Fdownload%2Fdate-fns-2.26.0.tgz",
+ "integrity": "sha512-VQI812dRi3cusdY/fhoBKvc6l2W8BPWU1FNVnFH9Nttjx4AFBRzfSVb/Eyc7jBT6e9sg1XtAGsYpBQ6c/jygbg=="
+ },
+ "date-format": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npm.taobao.org/date-format/download/date-format-3.0.0.tgz",
+ "integrity": "sha1-64eANlx9KxURB4+0keZHl4DzrZU=",
+ "dev": true
+ },
+ "debug": {
+ "version": "4.3.2",
+ "resolved": "https://registry.npmmirror.com/debug/download/debug-4.3.2.tgz",
+ "integrity": "sha1-8KScGKyHeeMdSgxgKd+3aHPHQos=",
+ "dev": true,
+ "requires": {
+ "ms": "2.1.2"
+ }
+ },
+ "decamelize": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmmirror.com/decamelize/download/decamelize-1.2.0.tgz?cache=0&sync_timestamp=1633055756574&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fdecamelize%2Fdownload%2Fdecamelize-1.2.0.tgz",
+ "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
+ "dev": true
+ },
+ "decamelize-keys": {
+ "version": "1.1.0",
+ "resolved": "https://registry.nlark.com/decamelize-keys/download/decamelize-keys-1.1.0.tgz",
+ "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=",
+ "dev": true,
+ "requires": {
+ "decamelize": "^1.1.0",
+ "map-obj": "^1.0.0"
+ },
+ "dependencies": {
+ "map-obj": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmmirror.com/map-obj/download/map-obj-1.0.1.tgz?cache=0&sync_timestamp=1634552719803&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fmap-obj%2Fdownload%2Fmap-obj-1.0.1.tgz",
+ "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=",
+ "dev": true
+ }
+ }
+ },
+ "decode-uri-component": {
+ "version": "0.2.0",
+ "resolved": "https://registry.nlark.com/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.nlark.com/deep-equal/download/deep-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"
+ }
+ },
+ "deep-is": {
+ "version": "0.1.4",
+ "resolved": "https://registry.nlark.com/deep-is/download/deep-is-0.1.4.tgz",
+ "integrity": "sha1-pvLc5hL63S7x9Rm3NVHxfoUZmDE=",
+ "dev": true
+ },
+ "default-gateway": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmmirror.com/default-gateway/download/default-gateway-4.2.0.tgz",
+ "integrity": "sha1-FnEEx1AMIRX23WmwpTa7jtcgVSs=",
+ "dev": true,
+ "requires": {
+ "execa": "^1.0.0",
+ "ip-regex": "^2.1.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-lazy-prop": {
+ "version": "2.0.0",
+ "resolved": "https://registry.nlark.com/define-lazy-prop/download/define-lazy-prop-2.0.0.tgz",
+ "integrity": "sha1-P3rkIRKbyqrJvHSQXJigAJ7J7n8=",
+ "dev": true
+ },
+ "define-properties": {
+ "version": "1.1.3",
+ "resolved": "https://registry.nlark.com/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.nlark.com/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.nlark.com/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.nlark.com/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": {
+ "array-union": {
+ "version": "1.0.2",
+ "resolved": "https://registry.nlark.com/array-union/download/array-union-1.0.2.tgz",
+ "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=",
+ "dev": true,
+ "requires": {
+ "array-uniq": "^1.0.1"
+ }
+ },
+ "globby": {
+ "version": "6.1.0",
+ "resolved": "https://registry.nlark.com/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.npmmirror.com/p-map/download/p-map-2.1.0.tgz?cache=0&sync_timestamp=1635931861684&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fp-map%2Fdownload%2Fp-map-2.1.0.tgz",
+ "integrity": "sha1-MQko/u+cnsxltosXaTAYpmXOoXU=",
+ "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"
+ }
+ }
+ }
+ },
+ "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
+ },
+ "delegates": {
+ "version": "1.0.0",
+ "resolved": "https://registry.nlark.com/delegates/download/delegates-1.0.0.tgz",
+ "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=",
+ "dev": true
+ },
+ "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.11.0",
+ "resolved": "https://registry.nlark.com/dependency-graph/download/dependency-graph-0.11.0.tgz",
+ "integrity": "sha1-rAzn7WilTaIhZahel6AdU/XrLic=",
+ "dev": true
+ },
+ "desandro-matches-selector": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npm.taobao.org/desandro-matches-selector/download/desandro-matches-selector-2.0.2.tgz",
+ "integrity": "sha1-cXvu1NwT59jzdi9wem1YpndCGOE="
+ },
+ "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-browser": {
+ "version": "5.2.1",
+ "resolved": "https://registry.nlark.com/detect-browser/download/detect-browser-5.2.1.tgz?cache=0&sync_timestamp=1631836807281&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fdetect-browser%2Fdownload%2Fdetect-browser-5.2.1.tgz",
+ "integrity": "sha1-uIT42E6PM7uHT/7RC0vuomEz/NE="
+ },
+ "detect-node": {
+ "version": "2.1.0",
+ "resolved": "https://registry.nlark.com/detect-node/download/detect-node-2.1.0.tgz?cache=0&sync_timestamp=1621146954463&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fdetect-node%2Fdownload%2Fdetect-node-2.1.0.tgz",
+ "integrity": "sha1-yccHdaScPQO8LAbZpzvlUPl4+LE=",
+ "dev": true
+ },
+ "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": "4.0.2",
+ "resolved": "https://registry.npm.taobao.org/diff/download/diff-4.0.2.tgz",
+ "integrity": "sha1-YPOuy4nV+uUgwRqhnvwruYKq3n0=",
+ "dev": true
+ },
+ "dir-glob": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npm.taobao.org/dir-glob/download/dir-glob-3.0.1.tgz",
+ "integrity": "sha1-Vtv3PZkqSpO6FYT0U0Bj/S5BcX8=",
+ "dev": true,
+ "requires": {
+ "path-type": "^4.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.4",
+ "resolved": "https://registry.nlark.com/dns-packet/download/dns-packet-1.3.4.tgz",
+ "integrity": "sha1-40VQZYJKJQe6iGxVqJljuxB97G8=",
+ "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"
+ }
+ },
+ "doctrine": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npm.taobao.org/doctrine/download/doctrine-3.0.0.tgz",
+ "integrity": "sha1-rd6+rXKmV023g2OdyHoSF3OXOWE=",
+ "dev": true,
+ "requires": {
+ "esutils": "^2.0.2"
+ }
+ },
+ "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": "1.3.2",
+ "resolved": "https://registry.nlark.com/dom-serializer/download/dom-serializer-1.3.2.tgz?cache=0&sync_timestamp=1621256830355&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fdom-serializer%2Fdownload%2Fdom-serializer-1.3.2.tgz",
+ "integrity": "sha1-YgZDfTLO767HFhgDIwx6ILwbTZE=",
+ "dev": true,
+ "requires": {
+ "domelementtype": "^2.0.1",
+ "domhandler": "^4.2.0",
+ "entities": "^2.0.0"
+ }
+ },
+ "domelementtype": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npm.taobao.org/domelementtype/download/domelementtype-2.2.0.tgz?cache=0&sync_timestamp=1617298545989&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdomelementtype%2Fdownload%2Fdomelementtype-2.2.0.tgz",
+ "integrity": "sha1-mgtsJ4LtahxzI9QiZxg9+b2LHVc=",
+ "dev": true
+ },
+ "domhandler": {
+ "version": "4.2.2",
+ "resolved": "https://registry.nlark.com/domhandler/download/domhandler-4.2.2.tgz?cache=0&sync_timestamp=1630246778110&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fdomhandler%2Fdownload%2Fdomhandler-4.2.2.tgz",
+ "integrity": "sha1-6CXXIdGahrjCAaNSZOImxnjudV8=",
+ "dev": true,
+ "requires": {
+ "domelementtype": "^2.2.0"
+ }
+ },
+ "domutils": {
+ "version": "2.8.0",
+ "resolved": "https://registry.nlark.com/domutils/download/domutils-2.8.0.tgz?cache=0&sync_timestamp=1630106606599&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fdomutils%2Fdownload%2Fdomutils-2.8.0.tgz",
+ "integrity": "sha1-RDfe9dtuLR9dbuhZvZXKfQIEgTU=",
+ "dev": true,
+ "requires": {
+ "dom-serializer": "^1.0.1",
+ "domelementtype": "^2.2.0",
+ "domhandler": "^4.2.0"
+ }
+ },
+ "dot-prop": {
+ "version": "5.3.0",
+ "resolved": "https://registry.nlark.com/dot-prop/download/dot-prop-5.3.0.tgz",
+ "integrity": "sha1-kMzOcIzZzYLMTcjD3dmr3VWyDog=",
+ "dev": true,
+ "requires": {
+ "is-obj": "^2.0.0"
+ },
+ "dependencies": {
+ "is-obj": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npm.taobao.org/is-obj/download/is-obj-2.0.0.tgz",
+ "integrity": "sha1-Rz+wXZc3BeP9liBUUBjKjiLvSYI=",
+ "dev": true
+ }
+ }
+ },
+ "duplexer": {
+ "version": "0.1.2",
+ "resolved": "https://registry.nlark.com/duplexer/download/duplexer-0.1.2.tgz",
+ "integrity": "sha1-Or5DrvODX4rgd9E23c4PJ2sEAOY=",
+ "dev": true
+ },
+ "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": "5.2.2",
+ "resolved": "https://registry.npmmirror.com/echarts/download/echarts-5.2.2.tgz",
+ "integrity": "sha1-7DyLKhUcu6cbo8LHz5svIEfOQ3A=",
+ "requires": {
+ "tslib": "2.3.0",
+ "zrender": "5.2.1"
+ },
+ "dependencies": {
+ "tslib": {
+ "version": "2.3.0",
+ "resolved": "https://registry.nlark.com/tslib/download/tslib-2.3.0.tgz?cache=0&sync_timestamp=1628722556410&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ftslib%2Fdownload%2Ftslib-2.3.0.tgz",
+ "integrity": "sha1-gDuM2rPhK6WBpMpByIObuw2ssJ4="
+ }
+ }
+ },
+ "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
+ },
+ "ejs": {
+ "version": "3.1.6",
+ "resolved": "https://registry.npmmirror.com/ejs/download/ejs-3.1.6.tgz",
+ "integrity": "sha1-W/0KBol0O7UmizVQzO7rvBcCgio=",
+ "dev": true,
+ "requires": {
+ "jake": "^10.6.1"
+ }
+ },
+ "electron-to-chromium": {
+ "version": "1.4.3",
+ "resolved": "https://registry.npmmirror.com/electron-to-chromium/download/electron-to-chromium-1.4.3.tgz",
+ "integrity": "sha512-hfpppjYhqIZB8jrNb0rNceQRkSnBN7QJl3W26O1jUv3F3BkQknqy1YTqVXkFnIcFtBc3Qnv5M7r5Lez2iOLgZA==",
+ "dev": true
+ },
+ "emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmmirror.com/emoji-regex/download/emoji-regex-8.0.0.tgz?cache=0&sync_timestamp=1632751333727&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Femoji-regex%2Fdownload%2Femoji-regex-8.0.0.tgz",
+ "integrity": "sha1-6Bj9ac5cz8tARZT4QpY79TFkzDc=",
+ "dev": true
+ },
+ "emojis-list": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npm.taobao.org/emojis-list/download/emojis-list-3.0.0.tgz",
+ "integrity": "sha1-VXBmIEatKeLpFucariYKvf9Pang=",
+ "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.13",
+ "resolved": "https://registry.npmmirror.com/encoding/download/encoding-0.1.13.tgz",
+ "integrity": "sha1-VldK/deR9UqOmyeFwFgqLSYhD6k=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "iconv-lite": "^0.6.2"
+ },
+ "dependencies": {
+ "iconv-lite": {
+ "version": "0.6.3",
+ "resolved": "https://registry.nlark.com/iconv-lite/download/iconv-lite-0.6.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ficonv-lite%2Fdownload%2Ficonv-lite-0.6.3.tgz",
+ "integrity": "sha1-pS+AvzjaGVLrXGgXkHGYcaGnJQE=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "safer-buffer": ">= 2.1.2 < 3.0.0"
+ }
+ }
+ }
+ },
+ "end-of-stream": {
+ "version": "1.4.4",
+ "resolved": "https://registry.npm.taobao.org/end-of-stream/download/end-of-stream-1.4.4.tgz",
+ "integrity": "sha1-WuZKX0UFe682JuwU2gyl5LJDHrA=",
+ "dev": true,
+ "requires": {
+ "once": "^1.4.0"
+ }
+ },
+ "engine.io": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmmirror.com/engine.io/download/engine.io-6.1.0.tgz?cache=0&sync_timestamp=1636357215103&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fengine.io%2Fdownload%2Fengine.io-6.1.0.tgz",
+ "integrity": "sha512-ErhZOVu2xweCjEfYcTdkCnEYUiZgkAcBBAhW4jbIvNG8SLU3orAqoJCiytZjYF7eTpVmmCrLDjLIEaPlUAs1uw==",
+ "dev": true,
+ "requires": {
+ "@types/cookie": "^0.4.1",
+ "@types/cors": "^2.8.12",
+ "@types/node": ">=10.0.0",
+ "accepts": "~1.3.4",
+ "base64id": "2.0.0",
+ "cookie": "~0.4.1",
+ "cors": "~2.8.5",
+ "debug": "~4.3.1",
+ "engine.io-parser": "~5.0.0",
+ "ws": "~8.2.3"
+ },
+ "dependencies": {
+ "cookie": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npm.taobao.org/cookie/download/cookie-0.4.1.tgz",
+ "integrity": "sha1-r9cT/ibr0hupXOth+agRblClN9E=",
+ "dev": true
+ },
+ "ws": {
+ "version": "8.2.3",
+ "resolved": "https://registry.npmmirror.com/ws/download/ws-8.2.3.tgz",
+ "integrity": "sha1-Y6VkVtsbBDZ9C3IaC4DK5ti+y7o=",
+ "dev": true
+ }
+ }
+ },
+ "engine.io-parser": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmmirror.com/engine.io-parser/download/engine.io-parser-5.0.2.tgz?cache=0&sync_timestamp=1636871351259&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fengine.io-parser%2Fdownload%2Fengine.io-parser-5.0.2.tgz",
+ "integrity": "sha512-wuiO7qO/OEkPJSFueuATIXtrxF7/6GTbAO9QLv7nnbjwZ5tYhLm9zxvLwxstRs0dcT0KUlWTjtIOs1T86jt12g==",
+ "dev": true,
+ "requires": {
+ "base64-arraybuffer": "~1.0.1"
+ }
+ },
+ "enhanced-resolve": {
+ "version": "5.8.3",
+ "resolved": "https://registry.nlark.com/enhanced-resolve/download/enhanced-resolve-5.8.3.tgz",
+ "integrity": "sha1-bVUtRlzOBCP1s9cYUR6lOCansvA=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.2.4",
+ "tapable": "^2.2.0"
+ }
+ },
+ "enquirer": {
+ "version": "2.3.6",
+ "resolved": "https://registry.npm.taobao.org/enquirer/download/enquirer-2.3.6.tgz",
+ "integrity": "sha1-Kn/l3WNKHkElqXXsmU/1RW3Dc00=",
+ "dev": true,
+ "requires": {
+ "ansi-colors": "^4.1.1"
+ }
+ },
+ "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.2.0",
+ "resolved": "https://registry.nlark.com/entities/download/entities-2.2.0.tgz?cache=0&sync_timestamp=1628508189267&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fentities%2Fdownload%2Fentities-2.2.0.tgz",
+ "integrity": "sha1-CY3JDruD2N/6CJ1VJWs1HTTE2lU=",
+ "dev": true
+ },
+ "env-paths": {
+ "version": "2.2.1",
+ "resolved": "https://registry.nlark.com/env-paths/download/env-paths-2.2.1.tgz?cache=0&sync_timestamp=1630095479786&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fenv-paths%2Fdownload%2Fenv-paths-2.2.1.tgz",
+ "integrity": "sha1-QgOZ1BbOH76bwKB8Yvpo1n/Q+PI=",
+ "dev": true
+ },
+ "err-code": {
+ "version": "2.0.3",
+ "resolved": "https://registry.nlark.com/err-code/download/err-code-2.0.3.tgz",
+ "integrity": "sha1-I8Lzt1b/38YI0w4nyalBAkgH5/k=",
+ "dev": true
+ },
+ "errno": {
+ "version": "0.1.8",
+ "resolved": "https://registry.nlark.com/errno/download/errno-0.1.8.tgz",
+ "integrity": "sha1-i7Ppx9Rjvkl2/4iPdrSAnrwugR8=",
+ "dev": true,
+ "requires": {
+ "prr": "~1.0.1"
+ }
+ },
+ "error-ex": {
+ "version": "1.3.2",
+ "resolved": "https://registry.nlark.com/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.19.1",
+ "resolved": "https://registry.npmmirror.com/es-abstract/download/es-abstract-1.19.1.tgz?cache=0&sync_timestamp=1633234313248&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fes-abstract%2Fdownload%2Fes-abstract-1.19.1.tgz",
+ "integrity": "sha1-1IhXlodpFpWd547aoN9FZicRXsM=",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "es-to-primitive": "^1.2.1",
+ "function-bind": "^1.1.1",
+ "get-intrinsic": "^1.1.1",
+ "get-symbol-description": "^1.0.0",
+ "has": "^1.0.3",
+ "has-symbols": "^1.0.2",
+ "internal-slot": "^1.0.3",
+ "is-callable": "^1.2.4",
+ "is-negative-zero": "^2.0.1",
+ "is-regex": "^1.1.4",
+ "is-shared-array-buffer": "^1.0.1",
+ "is-string": "^1.0.7",
+ "is-weakref": "^1.0.1",
+ "object-inspect": "^1.11.0",
+ "object-keys": "^1.1.1",
+ "object.assign": "^4.1.2",
+ "string.prototype.trimend": "^1.0.4",
+ "string.prototype.trimstart": "^1.0.4",
+ "unbox-primitive": "^1.0.1"
+ }
+ },
+ "es-module-lexer": {
+ "version": "0.7.1",
+ "resolved": "https://registry.npmmirror.com/es-module-lexer/download/es-module-lexer-0.7.1.tgz?cache=0&sync_timestamp=1633645560577&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fes-module-lexer%2Fdownload%2Fes-module-lexer-0.7.1.tgz",
+ "integrity": "sha1-wsjg9G8t8GJ0za8N0/OzPgoLJn0=",
+ "dev": true
+ },
+ "es-to-primitive": {
+ "version": "1.2.1",
+ "resolved": "https://registry.nlark.com/es-to-primitive/download/es-to-primitive-1.2.1.tgz",
+ "integrity": "sha1-5VzUyc3BiLzvsDs2bHNjI/xciYo=",
+ "dev": true,
+ "requires": {
+ "is-callable": "^1.1.4",
+ "is-date-object": "^1.0.1",
+ "is-symbol": "^1.0.2"
+ }
+ },
+ "es6-promise": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npm.taobao.org/es6-promise/download/es6-promise-3.3.1.tgz",
+ "integrity": "sha1-oIzd6EzNvzTQJ6FFG8kdS80ophM=",
+ "dev": true
+ },
+ "es6-promisify": {
+ "version": "5.0.0",
+ "resolved": "https://registry.nlark.com/es6-promisify/download/es6-promisify-5.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fes6-promisify%2Fdownload%2Fes6-promisify-5.0.0.tgz",
+ "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=",
+ "dev": true,
+ "requires": {
+ "es6-promise": "^4.0.3"
+ },
+ "dependencies": {
+ "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
+ }
+ }
+ },
+ "esbuild-android-arm64": {
+ "version": "0.13.8",
+ "resolved": "https://registry.npmmirror.com/esbuild-android-arm64/download/esbuild-android-arm64-0.13.8.tgz?cache=0&sync_timestamp=1637462928775&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fesbuild-android-arm64%2Fdownload%2Fesbuild-android-arm64-0.13.8.tgz",
+ "integrity": "sha1-wg6HXDyYFksf+6myhje9+W9ennw=",
+ "dev": true,
+ "optional": true
+ },
+ "esbuild-darwin-64": {
+ "version": "0.13.8",
+ "resolved": "https://registry.npmmirror.com/esbuild-darwin-64/download/esbuild-darwin-64-0.13.8.tgz",
+ "integrity": "sha1-9G5rRx3b9iJlI0gIpqGqkd8YpBc=",
+ "dev": true,
+ "optional": true
+ },
+ "esbuild-darwin-arm64": {
+ "version": "0.13.8",
+ "resolved": "https://registry.npmmirror.com/esbuild-darwin-arm64/download/esbuild-darwin-arm64-0.13.8.tgz",
+ "integrity": "sha1-qZEVemAT+s1PLhQVm32lJibJAVQ=",
+ "dev": true,
+ "optional": true
+ },
+ "esbuild-freebsd-64": {
+ "version": "0.13.8",
+ "resolved": "https://registry.npmmirror.com/esbuild-freebsd-64/download/esbuild-freebsd-64-0.13.8.tgz",
+ "integrity": "sha1-MBYB0uRDrUWJYONZtAKhfZUAvp0=",
+ "dev": true,
+ "optional": true
+ },
+ "esbuild-freebsd-arm64": {
+ "version": "0.13.8",
+ "resolved": "https://registry.npmmirror.com/esbuild-freebsd-arm64/download/esbuild-freebsd-arm64-0.13.8.tgz",
+ "integrity": "sha1-A5pjrMEuwIkgBsFH6iIeVfkSWp8=",
+ "dev": true,
+ "optional": true
+ },
+ "esbuild-linux-32": {
+ "version": "0.13.8",
+ "resolved": "https://registry.npmmirror.com/esbuild-linux-32/download/esbuild-linux-32-0.13.8.tgz",
+ "integrity": "sha1-xTe2fX5pS2C/onhlgUEoOMa6AoQ=",
+ "dev": true,
+ "optional": true
+ },
+ "esbuild-linux-64": {
+ "version": "0.13.8",
+ "resolved": "https://registry.npmmirror.com/esbuild-linux-64/download/esbuild-linux-64-0.13.8.tgz",
+ "integrity": "sha1-AJL8igZAAad3v6DjtCW7i+j5bmo=",
+ "dev": true,
+ "optional": true
+ },
+ "esbuild-linux-arm": {
+ "version": "0.13.8",
+ "resolved": "https://registry.npmmirror.com/esbuild-linux-arm/download/esbuild-linux-arm-0.13.8.tgz",
+ "integrity": "sha1-rWNPlr8pdVNpB665/bdaMZT03c4=",
+ "dev": true,
+ "optional": true
+ },
+ "esbuild-linux-arm64": {
+ "version": "0.13.8",
+ "resolved": "https://registry.npmmirror.com/esbuild-linux-arm64/download/esbuild-linux-arm64-0.13.8.tgz?cache=0&sync_timestamp=1637498766925&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fesbuild-linux-arm64%2Fdownload%2Fesbuild-linux-arm64-0.13.8.tgz",
+ "integrity": "sha1-XNPyu5JCEpcUgujbwlxK/QmygRA=",
+ "dev": true,
+ "optional": true
+ },
+ "esbuild-linux-mips64le": {
+ "version": "0.13.8",
+ "resolved": "https://registry.npmmirror.com/esbuild-linux-mips64le/download/esbuild-linux-mips64le-0.13.8.tgz",
+ "integrity": "sha1-V4V+3+v5v2V2bci+FjfyF5yZBXI=",
+ "dev": true,
+ "optional": true
+ },
+ "esbuild-linux-ppc64le": {
+ "version": "0.13.8",
+ "resolved": "https://registry.npmmirror.com/esbuild-linux-ppc64le/download/esbuild-linux-ppc64le-0.13.8.tgz?cache=0&sync_timestamp=1637462927819&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fesbuild-linux-ppc64le%2Fdownload%2Fesbuild-linux-ppc64le-0.13.8.tgz",
+ "integrity": "sha1-/bgqBZpbhrsQ+0IJG0689Ii5zUY=",
+ "dev": true,
+ "optional": true
+ },
+ "esbuild-netbsd-64": {
+ "version": "0.13.8",
+ "resolved": "https://registry.npmmirror.com/esbuild-netbsd-64/download/esbuild-netbsd-64-0.13.8.tgz",
+ "integrity": "sha1-14eecSPTssBHVOzovQYapoZt7v8=",
+ "dev": true,
+ "optional": true
+ },
+ "esbuild-openbsd-64": {
+ "version": "0.13.8",
+ "resolved": "https://registry.npmmirror.com/esbuild-openbsd-64/download/esbuild-openbsd-64-0.13.8.tgz?cache=0&sync_timestamp=1637462928360&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fesbuild-openbsd-64%2Fdownload%2Fesbuild-openbsd-64-0.13.8.tgz",
+ "integrity": "sha1-iLKAtssKP2rbYKvyf8UGxQajXPA=",
+ "dev": true,
+ "optional": true
+ },
+ "esbuild-sunos-64": {
+ "version": "0.13.8",
+ "resolved": "https://registry.npmmirror.com/esbuild-sunos-64/download/esbuild-sunos-64-0.13.8.tgz?cache=0&sync_timestamp=1637498783394&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fesbuild-sunos-64%2Fdownload%2Fesbuild-sunos-64-0.13.8.tgz",
+ "integrity": "sha1-Iprnx3AxlqWKzQ8Cka2b69qBXWM=",
+ "dev": true,
+ "optional": true
+ },
+ "esbuild-wasm": {
+ "version": "0.13.8",
+ "resolved": "https://registry.npmmirror.com/esbuild-wasm/download/esbuild-wasm-0.13.8.tgz",
+ "integrity": "sha1-80E0wYf/z8ItR26SWRf3C6tA+LA=",
+ "dev": true
+ },
+ "esbuild-windows-32": {
+ "version": "0.13.8",
+ "resolved": "https://registry.npmmirror.com/esbuild-windows-32/download/esbuild-windows-32-0.13.8.tgz",
+ "integrity": "sha1-iS0JPjKiHAyRNeWg/9w4Cutw52M=",
+ "dev": true,
+ "optional": true
+ },
+ "esbuild-windows-64": {
+ "version": "0.13.8",
+ "resolved": "https://registry.npmmirror.com/esbuild-windows-64/download/esbuild-windows-64-0.13.8.tgz?cache=0&sync_timestamp=1637462927131&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fesbuild-windows-64%2Fdownload%2Fesbuild-windows-64-0.13.8.tgz",
+ "integrity": "sha1-fe/Y15rju35vU7ZacZC+fa+QFoY=",
+ "dev": true,
+ "optional": true
+ },
+ "esbuild-windows-arm64": {
+ "version": "0.13.8",
+ "resolved": "https://registry.npmmirror.com/esbuild-windows-arm64/download/esbuild-windows-arm64-0.13.8.tgz",
+ "integrity": "sha1-5ZrgBElv2KWrZ7/HlFouR0gNb7k=",
+ "dev": true,
+ "optional": true
+ },
+ "escalade": {
+ "version": "3.1.1",
+ "resolved": "https://registry.nlark.com/escalade/download/escalade-3.1.1.tgz",
+ "integrity": "sha1-2M/ccACWXFoBdLSoLqpcBVJ0LkA=",
+ "dev": true
+ },
+ "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?cache=0&sync_timestamp=1618677243201&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fescape-string-regexp%2Fdownload%2Fescape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+ "dev": true
+ },
+ "eslint": {
+ "version": "7.32.0",
+ "resolved": "https://registry.npmmirror.com/eslint/download/eslint-7.32.0.tgz?cache=0&sync_timestamp=1637475730061&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Feslint%2Fdownload%2Feslint-7.32.0.tgz",
+ "integrity": "sha1-xtMooUvj+wjI0dIeEsAv23oqgS0=",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "7.12.11",
+ "@eslint/eslintrc": "^0.4.3",
+ "@humanwhocodes/config-array": "^0.5.0",
+ "ajv": "^6.10.0",
+ "chalk": "^4.0.0",
+ "cross-spawn": "^7.0.2",
+ "debug": "^4.0.1",
+ "doctrine": "^3.0.0",
+ "enquirer": "^2.3.5",
+ "escape-string-regexp": "^4.0.0",
+ "eslint-scope": "^5.1.1",
+ "eslint-utils": "^2.1.0",
+ "eslint-visitor-keys": "^2.0.0",
+ "espree": "^7.3.1",
+ "esquery": "^1.4.0",
+ "esutils": "^2.0.2",
+ "fast-deep-equal": "^3.1.3",
+ "file-entry-cache": "^6.0.1",
+ "functional-red-black-tree": "^1.0.1",
+ "glob-parent": "^5.1.2",
+ "globals": "^13.6.0",
+ "ignore": "^4.0.6",
+ "import-fresh": "^3.0.0",
+ "imurmurhash": "^0.1.4",
+ "is-glob": "^4.0.0",
+ "js-yaml": "^3.13.1",
+ "json-stable-stringify-without-jsonify": "^1.0.1",
+ "levn": "^0.4.1",
+ "lodash.merge": "^4.6.2",
+ "minimatch": "^3.0.4",
+ "natural-compare": "^1.4.0",
+ "optionator": "^0.9.1",
+ "progress": "^2.0.0",
+ "regexpp": "^3.1.0",
+ "semver": "^7.2.1",
+ "strip-ansi": "^6.0.0",
+ "strip-json-comments": "^3.1.0",
+ "table": "^6.0.9",
+ "text-table": "^0.2.0",
+ "v8-compile-cache": "^2.0.3"
+ },
+ "dependencies": {
+ "@babel/code-frame": {
+ "version": "7.12.11",
+ "resolved": "https://registry.npmmirror.com/@babel/code-frame/download/@babel/code-frame-7.12.11.tgz?cache=0&sync_timestamp=1635561808745&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40babel%2Fcode-frame%2Fdownload%2F%40babel%2Fcode-frame-7.12.11.tgz",
+ "integrity": "sha1-9K1DWqJj25NbjxDyxVLSP7cWpj8=",
+ "dev": true,
+ "requires": {
+ "@babel/highlight": "^7.10.4"
+ }
+ },
+ "ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmmirror.com/ajv/download/ajv-6.12.6.tgz?cache=0&sync_timestamp=1637522259668&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fajv%2Fdownload%2Fajv-6.12.6.tgz",
+ "integrity": "sha1-uvWmLoArB9l3A0WG+MO69a3ybfQ=",
+ "dev": true,
+ "requires": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ }
+ },
+ "ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.nlark.com/ansi-styles/download/ansi-styles-4.3.0.tgz",
+ "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=",
+ "dev": true,
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
+ },
+ "chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.nlark.com/chalk/download/chalk-4.1.2.tgz?cache=0&sync_timestamp=1627646697260&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fchalk%2Fdownload%2Fchalk-4.1.2.tgz",
+ "integrity": "sha1-qsTit3NKdAhnrrFr8CqtVWoeegE=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ }
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npm.taobao.org/color-convert/download/color-convert-2.0.1.tgz",
+ "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=",
+ "dev": true,
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npm.taobao.org/color-name/download/color-name-1.1.4.tgz",
+ "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=",
+ "dev": true
+ },
+ "cross-spawn": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npm.taobao.org/cross-spawn/download/cross-spawn-7.0.3.tgz",
+ "integrity": "sha1-9zqFudXUHQRVUcF34ogtSshXKKY=",
+ "dev": true,
+ "requires": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ }
+ },
+ "escape-string-regexp": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npm.taobao.org/escape-string-regexp/download/escape-string-regexp-4.0.0.tgz?cache=0&sync_timestamp=1618677243201&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fescape-string-regexp%2Fdownload%2Fescape-string-regexp-4.0.0.tgz",
+ "integrity": "sha1-FLqDpdNz49MR5a/KKc9b+tllvzQ=",
+ "dev": true
+ },
+ "eslint-utils": {
+ "version": "2.1.0",
+ "resolved": "https://registry.nlark.com/eslint-utils/download/eslint-utils-2.1.0.tgz?cache=0&sync_timestamp=1620975524854&other_urls=https%3A%2F%2Fregistry.nlark.com%2Feslint-utils%2Fdownload%2Feslint-utils-2.1.0.tgz",
+ "integrity": "sha1-0t5eA0JOcH3BDHQGjd7a5wh0Gyc=",
+ "dev": true,
+ "requires": {
+ "eslint-visitor-keys": "^1.1.0"
+ },
+ "dependencies": {
+ "eslint-visitor-keys": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmmirror.com/eslint-visitor-keys/download/eslint-visitor-keys-1.3.0.tgz",
+ "integrity": "sha1-MOvR73wv3/AcOk8VEESvJfqwUj4=",
+ "dev": true
+ }
+ }
+ },
+ "glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmmirror.com/glob-parent/download/glob-parent-5.1.2.tgz?cache=0&sync_timestamp=1632953810778&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fglob-parent%2Fdownload%2Fglob-parent-5.1.2.tgz",
+ "integrity": "sha1-hpgyxYA0/mikCTwX3BXoNA2EAcQ=",
+ "dev": true,
+ "requires": {
+ "is-glob": "^4.0.1"
+ }
+ },
+ "globals": {
+ "version": "13.12.0",
+ "resolved": "https://registry.npmmirror.com/globals/download/globals-13.12.0.tgz?cache=0&sync_timestamp=1635390798667&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fglobals%2Fdownload%2Fglobals-13.12.0.tgz",
+ "integrity": "sha1-TXM3YDBCMKAILtluIeXFZfiYCJ4=",
+ "dev": true,
+ "requires": {
+ "type-fest": "^0.20.2"
+ }
+ },
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.nlark.com/has-flag/download/has-flag-4.0.0.tgz?cache=0&sync_timestamp=1626715907927&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fhas-flag%2Fdownload%2Fhas-flag-4.0.0.tgz",
+ "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=",
+ "dev": true
+ },
+ "ignore": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmmirror.com/ignore/download/ignore-4.0.6.tgz?cache=0&sync_timestamp=1635926632542&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fignore%2Fdownload%2Fignore-4.0.6.tgz",
+ "integrity": "sha1-dQ49tYYgh7RzfrrIIH/9HvJ7Jfw=",
+ "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
+ },
+ "path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npm.taobao.org/path-key/download/path-key-3.1.1.tgz?cache=0&sync_timestamp=1617971632960&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpath-key%2Fdownload%2Fpath-key-3.1.1.tgz",
+ "integrity": "sha1-WB9q3mWMu6ZaDTOA3ndTKVBU83U=",
+ "dev": true
+ },
+ "shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npm.taobao.org/shebang-command/download/shebang-command-2.0.0.tgz",
+ "integrity": "sha1-zNCvT4g1+9wmW4JGGq8MNmY/NOo=",
+ "dev": true,
+ "requires": {
+ "shebang-regex": "^3.0.0"
+ }
+ },
+ "shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.nlark.com/shebang-regex/download/shebang-regex-3.0.0.tgz?cache=0&sync_timestamp=1628896299850&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fshebang-regex%2Fdownload%2Fshebang-regex-3.0.0.tgz",
+ "integrity": "sha1-rhbxZE2HPsrYQ7AwexQzYtTEIXI=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmmirror.com/supports-color/download/supports-color-7.2.0.tgz",
+ "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=",
+ "dev": true,
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ },
+ "type-fest": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmmirror.com/type-fest/download/type-fest-0.20.2.tgz?cache=0&sync_timestamp=1637149878210&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Ftype-fest%2Fdownload%2Ftype-fest-0.20.2.tgz",
+ "integrity": "sha1-G/IH9LKPkVg2ZstfvTJ4hzAc1fQ=",
+ "dev": true
+ },
+ "which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npm.taobao.org/which/download/which-2.0.2.tgz",
+ "integrity": "sha1-fGqN0KY2oDJ+ELWckobu6T8/UbE=",
+ "dev": true,
+ "requires": {
+ "isexe": "^2.0.0"
+ }
+ }
+ }
+ },
+ "eslint-config-prettier": {
+ "version": "8.3.0",
+ "resolved": "https://registry.nlark.com/eslint-config-prettier/download/eslint-config-prettier-8.3.0.tgz",
+ "integrity": "sha1-90cbILb+ipqSVMxoRFQgKIai3Xo=",
+ "dev": true
+ },
+ "eslint-import-resolver-node": {
+ "version": "0.3.6",
+ "resolved": "https://registry.nlark.com/eslint-import-resolver-node/download/eslint-import-resolver-node-0.3.6.tgz?cache=0&sync_timestamp=1629046642917&other_urls=https%3A%2F%2Fregistry.nlark.com%2Feslint-import-resolver-node%2Fdownload%2Feslint-import-resolver-node-0.3.6.tgz",
+ "integrity": "sha1-QEi5WDldqJZoJSAB29nsprg7rL0=",
+ "dev": true,
+ "requires": {
+ "debug": "^3.2.7",
+ "resolve": "^1.20.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmmirror.com/debug/download/debug-3.2.7.tgz",
+ "integrity": "sha1-clgLfpFF+zm2Z2+cXl+xALk0F5o=",
+ "dev": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ }
+ }
+ },
+ "eslint-module-utils": {
+ "version": "2.7.1",
+ "resolved": "https://registry.npmmirror.com/eslint-module-utils/download/eslint-module-utils-2.7.1.tgz?cache=0&sync_timestamp=1634151608499&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Feslint-module-utils%2Fdownload%2Feslint-module-utils-2.7.1.tgz",
+ "integrity": "sha1-tDUAHJ+N1Kt/bQ78rkuWltTCS3w=",
+ "dev": true,
+ "requires": {
+ "debug": "^3.2.7",
+ "find-up": "^2.1.0",
+ "pkg-dir": "^2.0.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmmirror.com/debug/download/debug-3.2.7.tgz",
+ "integrity": "sha1-clgLfpFF+zm2Z2+cXl+xALk0F5o=",
+ "dev": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "find-up": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmmirror.com/find-up/download/find-up-2.1.0.tgz?cache=0&sync_timestamp=1633618766404&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Ffind-up%2Fdownload%2Ffind-up-2.1.0.tgz",
+ "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
+ "dev": true,
+ "requires": {
+ "locate-path": "^2.0.0"
+ }
+ },
+ "locate-path": {
+ "version": "2.0.0",
+ "resolved": "https://registry.nlark.com/locate-path/download/locate-path-2.0.0.tgz?cache=0&sync_timestamp=1629895724478&other_urls=https%3A%2F%2Fregistry.nlark.com%2Flocate-path%2Fdownload%2Flocate-path-2.0.0.tgz",
+ "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
+ "dev": true,
+ "requires": {
+ "p-locate": "^2.0.0",
+ "path-exists": "^3.0.0"
+ }
+ },
+ "p-limit": {
+ "version": "1.3.0",
+ "resolved": "https://registry.nlark.com/p-limit/download/p-limit-1.3.0.tgz?cache=0&sync_timestamp=1628812766275&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fp-limit%2Fdownload%2Fp-limit-1.3.0.tgz",
+ "integrity": "sha1-uGvV8MJWkJEcdZD8v8IBDVSzzLg=",
+ "dev": true,
+ "requires": {
+ "p-try": "^1.0.0"
+ }
+ },
+ "p-locate": {
+ "version": "2.0.0",
+ "resolved": "https://registry.nlark.com/p-locate/download/p-locate-2.0.0.tgz",
+ "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
+ "dev": true,
+ "requires": {
+ "p-limit": "^1.1.0"
+ }
+ },
+ "p-try": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmmirror.com/p-try/download/p-try-1.0.0.tgz?cache=0&sync_timestamp=1633364462890&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fp-try%2Fdownload%2Fp-try-1.0.0.tgz",
+ "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
+ "dev": true
+ },
+ "path-exists": {
+ "version": "3.0.0",
+ "resolved": "https://registry.nlark.com/path-exists/download/path-exists-3.0.0.tgz",
+ "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
+ "dev": true
+ },
+ "pkg-dir": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmmirror.com/pkg-dir/download/pkg-dir-2.0.0.tgz?cache=0&sync_timestamp=1633498116014&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fpkg-dir%2Fdownload%2Fpkg-dir-2.0.0.tgz",
+ "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=",
+ "dev": true,
+ "requires": {
+ "find-up": "^2.1.0"
+ }
+ }
+ }
+ },
+ "eslint-plugin-import": {
+ "version": "2.24.2",
+ "resolved": "https://registry.npmmirror.com/eslint-plugin-import/download/eslint-plugin-import-2.24.2.tgz?cache=0&sync_timestamp=1636529205526&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Feslint-plugin-import%2Fdownload%2Feslint-plugin-import-2.24.2.tgz",
+ "integrity": "sha1-LIzS40HziFkY7ifRhHmRCt57tNo=",
+ "dev": true,
+ "requires": {
+ "array-includes": "^3.1.3",
+ "array.prototype.flat": "^1.2.4",
+ "debug": "^2.6.9",
+ "doctrine": "^2.1.0",
+ "eslint-import-resolver-node": "^0.3.6",
+ "eslint-module-utils": "^2.6.2",
+ "find-up": "^2.0.0",
+ "has": "^1.0.3",
+ "is-core-module": "^2.6.0",
+ "minimatch": "^3.0.4",
+ "object.values": "^1.1.4",
+ "pkg-up": "^2.0.0",
+ "read-pkg-up": "^3.0.0",
+ "resolve": "^1.20.0",
+ "tsconfig-paths": "^3.11.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmmirror.com/debug/download/debug-2.6.9.tgz",
+ "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "doctrine": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npm.taobao.org/doctrine/download/doctrine-2.1.0.tgz",
+ "integrity": "sha1-XNAfwQFiG0LEzX9dGmYkNxbT850=",
+ "dev": true,
+ "requires": {
+ "esutils": "^2.0.2"
+ }
+ },
+ "find-up": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmmirror.com/find-up/download/find-up-2.1.0.tgz?cache=0&sync_timestamp=1633618766404&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Ffind-up%2Fdownload%2Ffind-up-2.1.0.tgz",
+ "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
+ "dev": true,
+ "requires": {
+ "locate-path": "^2.0.0"
+ }
+ },
+ "locate-path": {
+ "version": "2.0.0",
+ "resolved": "https://registry.nlark.com/locate-path/download/locate-path-2.0.0.tgz?cache=0&sync_timestamp=1629895724478&other_urls=https%3A%2F%2Fregistry.nlark.com%2Flocate-path%2Fdownload%2Flocate-path-2.0.0.tgz",
+ "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
+ "dev": true,
+ "requires": {
+ "p-locate": "^2.0.0",
+ "path-exists": "^3.0.0"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmmirror.com/ms/download/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ },
+ "p-limit": {
+ "version": "1.3.0",
+ "resolved": "https://registry.nlark.com/p-limit/download/p-limit-1.3.0.tgz?cache=0&sync_timestamp=1628812766275&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fp-limit%2Fdownload%2Fp-limit-1.3.0.tgz",
+ "integrity": "sha1-uGvV8MJWkJEcdZD8v8IBDVSzzLg=",
+ "dev": true,
+ "requires": {
+ "p-try": "^1.0.0"
+ }
+ },
+ "p-locate": {
+ "version": "2.0.0",
+ "resolved": "https://registry.nlark.com/p-locate/download/p-locate-2.0.0.tgz",
+ "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
+ "dev": true,
+ "requires": {
+ "p-limit": "^1.1.0"
+ }
+ },
+ "p-try": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmmirror.com/p-try/download/p-try-1.0.0.tgz?cache=0&sync_timestamp=1633364462890&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fp-try%2Fdownload%2Fp-try-1.0.0.tgz",
+ "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
+ "dev": true
+ },
+ "path-exists": {
+ "version": "3.0.0",
+ "resolved": "https://registry.nlark.com/path-exists/download/path-exists-3.0.0.tgz",
+ "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
+ "dev": true
+ }
+ }
+ },
+ "eslint-plugin-jsdoc": {
+ "version": "36.0.8",
+ "resolved": "https://registry.npmmirror.com/eslint-plugin-jsdoc/download/eslint-plugin-jsdoc-36.0.8.tgz",
+ "integrity": "sha1-zXL3ZZPI+zNiN0sAUtTUmycRQIo=",
+ "dev": true,
+ "requires": {
+ "@es-joy/jsdoccomment": "0.10.8",
+ "comment-parser": "1.2.4",
+ "debug": "^4.3.2",
+ "esquery": "^1.4.0",
+ "jsdoc-type-pratt-parser": "^1.1.1",
+ "lodash": "^4.17.21",
+ "regextras": "^0.8.0",
+ "semver": "^7.3.5",
+ "spdx-expression-parse": "^3.0.1"
+ }
+ },
+ "eslint-plugin-prefer-arrow": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npm.taobao.org/eslint-plugin-prefer-arrow/download/eslint-plugin-prefer-arrow-1.2.3.tgz?cache=0&sync_timestamp=1611628691162&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-plugin-prefer-arrow%2Fdownload%2Feslint-plugin-prefer-arrow-1.2.3.tgz",
+ "integrity": "sha1-5/uz+kzYT/EBW5xRrYZVDlUEEEE=",
+ "dev": true
+ },
+ "eslint-plugin-prettier": {
+ "version": "3.4.1",
+ "resolved": "https://registry.npmmirror.com/eslint-plugin-prettier/download/eslint-plugin-prettier-3.4.1.tgz",
+ "integrity": "sha1-6d2yAO+289Bf/oOxZlpxavSjh+U=",
+ "dev": true,
+ "requires": {
+ "prettier-linter-helpers": "^1.0.0"
+ }
+ },
+ "eslint-scope": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmmirror.com/eslint-scope/download/eslint-scope-5.1.1.tgz?cache=0&sync_timestamp=1637466929956&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Feslint-scope%2Fdownload%2Feslint-scope-5.1.1.tgz",
+ "integrity": "sha1-54blmmbLkrP2wfsNUIqrF0hI9Iw=",
+ "dev": true,
+ "requires": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^4.1.1"
+ }
+ },
+ "eslint-utils": {
+ "version": "3.0.0",
+ "resolved": "https://registry.nlark.com/eslint-utils/download/eslint-utils-3.0.0.tgz?cache=0&sync_timestamp=1620975524854&other_urls=https%3A%2F%2Fregistry.nlark.com%2Feslint-utils%2Fdownload%2Feslint-utils-3.0.0.tgz",
+ "integrity": "sha1-iuuvrOc0W7M1WdsKHxOh0tSMNnI=",
+ "dev": true,
+ "requires": {
+ "eslint-visitor-keys": "^2.0.0"
+ }
+ },
+ "eslint-visitor-keys": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmmirror.com/eslint-visitor-keys/download/eslint-visitor-keys-2.1.0.tgz",
+ "integrity": "sha1-9lMoJZMFknOSyTjtROsKXJsr0wM=",
+ "dev": true
+ },
+ "espree": {
+ "version": "7.3.1",
+ "resolved": "https://registry.npmmirror.com/espree/download/espree-7.3.1.tgz?cache=0&sync_timestamp=1637466456948&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fespree%2Fdownload%2Fespree-7.3.1.tgz",
+ "integrity": "sha1-8t8zC3Usb1UBn4vYm3ZgA5wbu7Y=",
+ "dev": true,
+ "requires": {
+ "acorn": "^7.4.0",
+ "acorn-jsx": "^5.3.1",
+ "eslint-visitor-keys": "^1.3.0"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "7.4.1",
+ "resolved": "https://registry.npmmirror.com/acorn/download/acorn-7.4.1.tgz?cache=0&sync_timestamp=1637225522161&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Facorn%2Fdownload%2Facorn-7.4.1.tgz",
+ "integrity": "sha1-/q7SVZc9LndVW4PbwIhRpsY1IPo=",
+ "dev": true
+ },
+ "eslint-visitor-keys": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmmirror.com/eslint-visitor-keys/download/eslint-visitor-keys-1.3.0.tgz",
+ "integrity": "sha1-MOvR73wv3/AcOk8VEESvJfqwUj4=",
+ "dev": true
+ }
+ }
+ },
+ "esprima": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npm.taobao.org/esprima/download/esprima-4.0.1.tgz",
+ "integrity": "sha1-E7BM2z5sXRnfkatph6hpVhmwqnE=",
+ "dev": true
+ },
+ "esquery": {
+ "version": "1.4.0",
+ "resolved": "https://registry.nlark.com/esquery/download/esquery-1.4.0.tgz",
+ "integrity": "sha1-IUj/w4uC6McFff7UhCWz5h8PJKU=",
+ "dev": true,
+ "requires": {
+ "estraverse": "^5.1.0"
+ },
+ "dependencies": {
+ "estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmmirror.com/estraverse/download/estraverse-5.3.0.tgz?cache=0&sync_timestamp=1635237716974&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Festraverse%2Fdownload%2Festraverse-5.3.0.tgz",
+ "integrity": "sha1-LupSkHAvJquP5TcDcP+GyWXSESM=",
+ "dev": true
+ }
+ }
+ },
+ "esrecurse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npm.taobao.org/esrecurse/download/esrecurse-4.3.0.tgz",
+ "integrity": "sha1-eteWTWeauyi+5yzsY3WLHF0smSE=",
+ "dev": true,
+ "requires": {
+ "estraverse": "^5.2.0"
+ },
+ "dependencies": {
+ "estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmmirror.com/estraverse/download/estraverse-5.3.0.tgz?cache=0&sync_timestamp=1635237716974&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Festraverse%2Fdownload%2Festraverse-5.3.0.tgz",
+ "integrity": "sha1-LupSkHAvJquP5TcDcP+GyWXSESM=",
+ "dev": true
+ }
+ }
+ },
+ "estraverse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmmirror.com/estraverse/download/estraverse-4.3.0.tgz?cache=0&sync_timestamp=1635237716974&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Festraverse%2Fdownload%2Festraverse-4.3.0.tgz",
+ "integrity": "sha1-OYrT88WiSUi+dyXoPRGn3ijNvR0=",
+ "dev": true
+ },
+ "esutils": {
+ "version": "2.0.3",
+ "resolved": "https://registry.nlark.com/esutils/download/esutils-2.0.3.tgz",
+ "integrity": "sha1-dNLrTeC42hKTcRkQ1Qd1ubcQ72Q=",
+ "dev": true
+ },
+ "eta": {
+ "version": "1.12.3",
+ "resolved": "https://registry.nlark.com/eta/download/eta-1.12.3.tgz",
+ "integrity": "sha1-KYLQit++85+fpQ4vvULXM35zOLE=",
+ "dev": true
+ },
+ "etag": {
+ "version": "1.8.1",
+ "resolved": "https://registry.nlark.com/etag/download/etag-1.8.1.tgz?cache=0&sync_timestamp=1618847044821&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fetag%2Fdownload%2Fetag-1.8.1.tgz",
+ "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=",
+ "dev": true
+ },
+ "ev-emitter": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npm.taobao.org/ev-emitter/download/ev-emitter-1.1.1.tgz",
+ "integrity": "sha1-jxiwzlx2pdGAF/ccCnlcZbkTjyo="
+ },
+ "eventemitter-asyncresource": {
+ "version": "1.0.0",
+ "resolved": "https://registry.nlark.com/eventemitter-asyncresource/download/eventemitter-asyncresource-1.0.0.tgz",
+ "integrity": "sha1-c0/y5Ev0SOYn93SPkF1r3Ve9tls=",
+ "dev": true
+ },
+ "eventemitter3": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npm.taobao.org/eventemitter3/download/eventemitter3-2.0.3.tgz",
+ "integrity": "sha1-teEHm1n7XhuidxwKmTvgYKWMmbo="
+ },
+ "events": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmmirror.com/events/download/events-3.3.0.tgz",
+ "integrity": "sha1-Mala0Kkk4tLEGagTrrLE6HjqdAA=",
+ "dev": true
+ },
+ "eventsource": {
+ "version": "1.1.0",
+ "resolved": "https://registry.nlark.com/eventsource/download/eventsource-1.1.0.tgz",
+ "integrity": "sha1-AOjKfJIQnpSw3fMtrGd9hBAoz68=",
+ "dev": true,
+ "requires": {
+ "original": "^1.0.0"
+ }
+ },
+ "execa": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmmirror.com/execa/download/execa-1.0.0.tgz?cache=0&sync_timestamp=1637147245057&other_urls=https%3A%2F%2Fregistry.npmmirror.com%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"
+ }
+ },
+ "execall": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npm.taobao.org/execall/download/execall-2.0.0.tgz?cache=0&sync_timestamp=1617892843041&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fexecall%2Fdownload%2Fexecall-2.0.0.tgz",
+ "integrity": "sha1-FqBrX+UJnffQC+XZwG7s3tFmO0U=",
+ "dev": true,
+ "requires": {
+ "clone-regexp": "^2.1.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
+ },
+ "exit-on-epipe": {
+ "version": "1.0.1",
+ "resolved": "https://registry.nlark.com/exit-on-epipe/download/exit-on-epipe-1.0.1.tgz",
+ "integrity": "sha1-C92S6H1ShdJn2qgXHQ6wYVlolpI="
+ },
+ "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.npmmirror.com/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.nlark.com/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.nlark.com/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.npmmirror.com/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.nlark.com/array-flatten/download/array-flatten-1.1.1.tgz",
+ "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=",
+ "dev": true
+ },
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmmirror.com/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.npmmirror.com/ms/download/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ }
+ }
+ },
+ "extend": {
+ "version": "3.0.2",
+ "resolved": "https://registry.nlark.com/extend/download/extend-3.0.2.tgz",
+ "integrity": "sha1-+LETa0Bx+9jrFAr/hYsQGewpFfo="
+ },
+ "extend-shallow": {
+ "version": "3.0.2",
+ "resolved": "https://registry.nlark.com/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.nlark.com/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.nlark.com/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.nlark.com/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.nlark.com/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.nlark.com/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.nlark.com/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.npmmirror.com/extsprintf/download/extsprintf-1.3.0.tgz?cache=0&sync_timestamp=1635889740043&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fextsprintf%2Fdownload%2Fextsprintf-1.3.0.tgz",
+ "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=",
+ "dev": true
+ },
+ "fast-deep-equal": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npm.taobao.org/fast-deep-equal/download/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha1-On1WtVnWy8PrUSMlJE5hmmXGxSU="
+ },
+ "fast-diff": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npm.taobao.org/fast-diff/download/fast-diff-1.1.2.tgz",
+ "integrity": "sha1-S2LEK44D3j+EhGC2OQeZIGldAVQ="
+ },
+ "fast-glob": {
+ "version": "3.2.7",
+ "resolved": "https://registry.nlark.com/fast-glob/download/fast-glob-3.2.7.tgz?cache=0&sync_timestamp=1625773305786&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ffast-glob%2Fdownload%2Ffast-glob-3.2.7.tgz",
+ "integrity": "sha1-/Wy3otfpqnp4RhEehaGW1rL3ZqE=",
+ "dev": true,
+ "requires": {
+ "@nodelib/fs.stat": "^2.0.2",
+ "@nodelib/fs.walk": "^1.2.3",
+ "glob-parent": "^5.1.2",
+ "merge2": "^1.3.0",
+ "micromatch": "^4.0.4"
+ },
+ "dependencies": {
+ "glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmmirror.com/glob-parent/download/glob-parent-5.1.2.tgz?cache=0&sync_timestamp=1632953810778&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fglob-parent%2Fdownload%2Fglob-parent-5.1.2.tgz",
+ "integrity": "sha1-hpgyxYA0/mikCTwX3BXoNA2EAcQ=",
+ "dev": true,
+ "requires": {
+ "is-glob": "^4.0.1"
+ }
+ }
+ }
+ },
+ "fast-json-stable-stringify": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npm.taobao.org/fast-json-stable-stringify/download/fast-json-stable-stringify-2.1.0.tgz",
+ "integrity": "sha1-h0v2nG9ATCtdmcSBNBOZ/VWJJjM=",
+ "dev": true
+ },
+ "fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npm.taobao.org/fast-levenshtein/download/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
+ "dev": true
+ },
+ "fast-safe-stringify": {
+ "version": "2.1.1",
+ "resolved": "https://registry.nlark.com/fast-safe-stringify/download/fast-safe-stringify-2.1.1.tgz?cache=0&sync_timestamp=1631085668938&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ffast-safe-stringify%2Fdownload%2Ffast-safe-stringify-2.1.1.tgz",
+ "integrity": "sha1-xAaoO25w2eNc47MKgRQd8wrrqIQ=",
+ "dev": true
+ },
+ "fastest-levenshtein": {
+ "version": "1.0.12",
+ "resolved": "https://registry.npm.taobao.org/fastest-levenshtein/download/fastest-levenshtein-1.0.12.tgz",
+ "integrity": "sha1-mZD306iMxan/0fF0V0UlFwDUl+I=",
+ "dev": true
+ },
+ "fastq": {
+ "version": "1.13.0",
+ "resolved": "https://registry.nlark.com/fastq/download/fastq-1.13.0.tgz",
+ "integrity": "sha1-YWdg+Ip1Jr38WWt8q4wYk4w2uYw=",
+ "dev": true,
+ "requires": {
+ "reusify": "^1.0.4"
+ }
+ },
+ "faye-websocket": {
+ "version": "0.11.4",
+ "resolved": "https://registry.nlark.com/faye-websocket/download/faye-websocket-0.11.4.tgz",
+ "integrity": "sha1-fw2Sdc/dhqHJY9yLZfzEUe3Lsdo=",
+ "dev": true,
+ "requires": {
+ "websocket-driver": ">=0.5.1"
+ }
+ },
+ "fecha": {
+ "version": "4.2.1",
+ "resolved": "https://registry.nlark.com/fecha/download/fecha-4.2.1.tgz",
+ "integrity": "sha1-CoOtj4bvYqCR4iu1oDnNA9I+7M4="
+ },
+ "figures": {
+ "version": "3.2.0",
+ "resolved": "https://registry.nlark.com/figures/download/figures-3.2.0.tgz?cache=0&sync_timestamp=1625254307578&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ffigures%2Fdownload%2Ffigures-3.2.0.tgz",
+ "integrity": "sha1-YlwYvSk8YE3EqN2y/r8MiDQXRq8=",
+ "dev": true,
+ "requires": {
+ "escape-string-regexp": "^1.0.5"
+ }
+ },
+ "file-entry-cache": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npm.taobao.org/file-entry-cache/download/file-entry-cache-6.0.1.tgz?cache=0&sync_timestamp=1613794272556&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffile-entry-cache%2Fdownload%2Ffile-entry-cache-6.0.1.tgz",
+ "integrity": "sha1-IRst2WWcsDlLBz5zI6w8kz1SICc=",
+ "dev": true,
+ "requires": {
+ "flat-cache": "^3.0.4"
+ }
+ },
+ "file-saver": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npm.taobao.org/file-saver/download/file-saver-2.0.5.tgz",
+ "integrity": "sha1-1hz+LOBZ9BTYmendbUEH7iVnDDg="
+ },
+ "filelist": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npm.taobao.org/filelist/download/filelist-1.0.2.tgz",
+ "integrity": "sha1-gCAvIUYtTRwuIUEZsYB8G8A4Dls=",
+ "dev": true,
+ "requires": {
+ "minimatch": "^3.0.4"
+ }
+ },
+ "fill-range": {
+ "version": "7.0.1",
+ "resolved": "https://registry.nlark.com/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.npmmirror.com/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.npmmirror.com/ms/download/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ }
+ }
+ },
+ "find-cache-dir": {
+ "version": "3.3.1",
+ "resolved": "https://registry.nlark.com/find-cache-dir/download/find-cache-dir-3.3.1.tgz?cache=0&sync_timestamp=1630260009898&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ffind-cache-dir%2Fdownload%2Ffind-cache-dir-3.3.1.tgz",
+ "integrity": "sha1-ibM/rUpGcNqpT4Vff74x1thP6IA=",
+ "dev": true,
+ "requires": {
+ "commondir": "^1.0.1",
+ "make-dir": "^3.0.2",
+ "pkg-dir": "^4.1.0"
+ }
+ },
+ "find-up": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmmirror.com/find-up/download/find-up-4.1.0.tgz?cache=0&sync_timestamp=1633618766404&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Ffind-up%2Fdownload%2Ffind-up-4.1.0.tgz",
+ "integrity": "sha1-l6/n1s3AvFkoWEt8jXsW6KmqXRk=",
+ "dev": true,
+ "requires": {
+ "locate-path": "^5.0.0",
+ "path-exists": "^4.0.0"
+ }
+ },
+ "fizzy-ui-utils": {
+ "version": "2.0.7",
+ "resolved": "https://registry.npm.taobao.org/fizzy-ui-utils/download/fizzy-ui-utils-2.0.7.tgz",
+ "integrity": "sha1-ffRdzE6zdKCLZdObuaS+7fczBQU=",
+ "requires": {
+ "desandro-matches-selector": "^2.0.0"
+ }
+ },
+ "flat-cache": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npm.taobao.org/flat-cache/download/flat-cache-3.0.4.tgz",
+ "integrity": "sha1-YbAzgwKy/p+Vfcwy/CqH8cMEixE=",
+ "dev": true,
+ "requires": {
+ "flatted": "^3.1.0",
+ "rimraf": "^3.0.2"
+ }
+ },
+ "flatted": {
+ "version": "3.2.4",
+ "resolved": "https://registry.npmmirror.com/flatted/download/flatted-3.2.4.tgz?cache=0&sync_timestamp=1636473847692&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fflatted%2Fdownload%2Fflatted-3.2.4.tgz",
+ "integrity": "sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw==",
+ "dev": true
+ },
+ "flatten": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmmirror.com/flatten/download/flatten-1.0.3.tgz",
+ "integrity": "sha1-wSg6yfJ7Noq8HjbR/3sEUBowNWs=",
+ "dev": true
+ },
+ "follow-redirects": {
+ "version": "1.14.5",
+ "resolved": "https://registry.npmmirror.com/follow-redirects/download/follow-redirects-1.14.5.tgz?cache=0&sync_timestamp=1635857764332&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Ffollow-redirects%2Fdownload%2Ffollow-redirects-1.14.5.tgz",
+ "integrity": "sha1-8JpYSJgdPHcrU5Iwl3hSP42Fw4E=",
+ "dev": true
+ },
+ "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.nlark.com/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.2.0",
+ "resolved": "https://registry.nlark.com/forwarded/download/forwarded-0.2.0.tgz?cache=0&sync_timestamp=1622503408398&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fforwarded%2Fdownload%2Fforwarded-0.2.0.tgz",
+ "integrity": "sha1-ImmTZCiq1MFcfr6XeahL8LKoGBE=",
+ "dev": true
+ },
+ "frac": {
+ "version": "1.1.2",
+ "resolved": "https://registry.nlark.com/frac/download/frac-1.1.2.tgz",
+ "integrity": "sha1-PXT39keMiKG1AgMG10fcYxPHTQs="
+ },
+ "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
+ },
+ "fs-extra": {
+ "version": "9.1.0",
+ "resolved": "https://registry.nlark.com/fs-extra/download/fs-extra-9.1.0.tgz",
+ "integrity": "sha1-WVRGDHZKjaIJS6NVS/g55rmnyG0=",
+ "dev": true,
+ "requires": {
+ "at-least-node": "^1.0.0",
+ "graceful-fs": "^4.2.0",
+ "jsonfile": "^6.0.1",
+ "universalify": "^2.0.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-monkey": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npm.taobao.org/fs-monkey/download/fs-monkey-1.0.3.tgz?cache=0&sync_timestamp=1617593290175&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffs-monkey%2Fdownload%2Ffs-monkey-1.0.3.tgz",
+ "integrity": "sha1-rjrJLVO7Mo7+DpodlUH2rY1I4tM=",
+ "dev": true
+ },
+ "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.3.2",
+ "resolved": "https://registry.npmmirror.com/fsevents/download/fsevents-2.3.2.tgz",
+ "integrity": "sha1-ilJveLj99GI7cJ4Ll1xSwkwC/Ro=",
+ "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="
+ },
+ "functional-red-black-tree": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npm.taobao.org/functional-red-black-tree/download/functional-red-black-tree-1.0.1.tgz",
+ "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=",
+ "dev": true
+ },
+ "gauge": {
+ "version": "2.7.4",
+ "resolved": "https://registry.npmmirror.com/gauge/download/gauge-2.7.4.tgz?cache=0&sync_timestamp=1636989373302&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fgauge%2Fdownload%2Fgauge-2.7.4.tgz",
+ "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=",
+ "dev": 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"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.nlark.com/ansi-regex/download/ansi-regex-2.1.1.tgz?cache=0&sync_timestamp=1631634988487&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fansi-regex%2Fdownload%2Fansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "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=",
+ "dev": true,
+ "requires": {
+ "number-is-nan": "^1.0.0"
+ }
+ },
+ "string-width": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmmirror.com/string-width/download/string-width-1.0.2.tgz?cache=0&sync_timestamp=1632421013520&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fstring-width%2Fdownload%2Fstring-width-1.0.2.tgz",
+ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+ "dev": true,
+ "requires": {
+ "code-point-at": "^1.0.0",
+ "is-fullwidth-code-point": "^1.0.0",
+ "strip-ansi": "^3.0.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmmirror.com/strip-ansi/download/strip-ansi-3.0.1.tgz?cache=0&sync_timestamp=1632420562057&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ }
+ }
+ },
+ "gensync": {
+ "version": "1.0.0-beta.2",
+ "resolved": "https://registry.npm.taobao.org/gensync/download/gensync-1.0.0-beta.2.tgz",
+ "integrity": "sha1-MqbudsPX9S1GsrGuXZP+qFgKJeA=",
+ "dev": true
+ },
+ "get-caller-file": {
+ "version": "2.0.5",
+ "resolved": "https://registry.nlark.com/get-caller-file/download/get-caller-file-2.0.5.tgz",
+ "integrity": "sha1-T5RBKoLbMvNuOwuXQfipf+sDH34=",
+ "dev": true
+ },
+ "get-intrinsic": {
+ "version": "1.1.1",
+ "resolved": "https://registry.nlark.com/get-intrinsic/download/get-intrinsic-1.1.1.tgz",
+ "integrity": "sha1-FfWfN2+FXERpY5SPDSTNNje0q8Y=",
+ "requires": {
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "has-symbols": "^1.0.1"
+ }
+ },
+ "get-own-enumerable-property-symbols": {
+ "version": "3.0.2",
+ "resolved": "https://registry.nlark.com/get-own-enumerable-property-symbols/download/get-own-enumerable-property-symbols-3.0.2.tgz",
+ "integrity": "sha1-tf3nfyLL4185C04ImSLFC85u9mQ=",
+ "dev": true
+ },
+ "get-size": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npm.taobao.org/get-size/download/get-size-2.0.3.tgz",
+ "integrity": "sha1-VKHQJWsg6nrGRlFnViAnaZQa0u8="
+ },
+ "get-stdin": {
+ "version": "8.0.0",
+ "resolved": "https://registry.nlark.com/get-stdin/download/get-stdin-8.0.0.tgz",
+ "integrity": "sha1-y61qc/63X27rIrqeAfiaooqpelM=",
+ "dev": true
+ },
+ "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-symbol-description": {
+ "version": "1.0.0",
+ "resolved": "https://registry.nlark.com/get-symbol-description/download/get-symbol-description-1.0.0.tgz",
+ "integrity": "sha1-f9uByQAQH71WTdXxowr1qtweWNY=",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "get-intrinsic": "^1.1.1"
+ }
+ },
+ "get-value": {
+ "version": "2.0.6",
+ "resolved": "https://registry.nlark.com/get-value/download/get-value-2.0.6.tgz",
+ "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=",
+ "dev": true
+ },
+ "getpass": {
+ "version": "0.1.7",
+ "resolved": "https://registry.nlark.com/getpass/download/getpass-0.1.7.tgz",
+ "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "^1.0.0"
+ }
+ },
+ "gl-matrix": {
+ "version": "3.4.3",
+ "resolved": "https://registry.npmmirror.com/gl-matrix/download/gl-matrix-3.4.3.tgz",
+ "integrity": "sha1-/BGR6DIACf1NIOkzlZXGBB3cIsk="
+ },
+ "glob": {
+ "version": "7.1.7",
+ "resolved": "https://registry.npmmirror.com/glob/download/glob-7.1.7.tgz",
+ "integrity": "sha1-Oxk+kjPwHULQs/eClLvutBj5SpA=",
+ "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": "6.0.2",
+ "resolved": "https://registry.npmmirror.com/glob-parent/download/glob-parent-6.0.2.tgz?cache=0&sync_timestamp=1632953810778&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fglob-parent%2Fdownload%2Fglob-parent-6.0.2.tgz",
+ "integrity": "sha1-bSN9mQg5UMeSkPJMdkKj3poo+eM=",
+ "dev": true,
+ "requires": {
+ "is-glob": "^4.0.3"
+ }
+ },
+ "glob-to-regexp": {
+ "version": "0.4.1",
+ "resolved": "https://registry.nlark.com/glob-to-regexp/download/glob-to-regexp-0.4.1.tgz",
+ "integrity": "sha1-x1KXCHyFG5pXi9IX3VmpL1n+VG4=",
+ "dev": true
+ },
+ "global-modules": {
+ "version": "2.0.0",
+ "resolved": "https://registry.nlark.com/global-modules/download/global-modules-2.0.0.tgz",
+ "integrity": "sha1-mXYFrSNF8n9RU5vqJldEISFcd4A=",
+ "dev": true,
+ "requires": {
+ "global-prefix": "^3.0.0"
+ }
+ },
+ "global-prefix": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npm.taobao.org/global-prefix/download/global-prefix-3.0.0.tgz",
+ "integrity": "sha1-/IX3MGTfafUEIfR/iD/luRO6m5c=",
+ "dev": true,
+ "requires": {
+ "ini": "^1.3.5",
+ "kind-of": "^6.0.2",
+ "which": "^1.3.1"
+ },
+ "dependencies": {
+ "ini": {
+ "version": "1.3.8",
+ "resolved": "https://registry.nlark.com/ini/download/ini-1.3.8.tgz",
+ "integrity": "sha1-op2kJbSIBvNHZ6Tvzjlyaa8oQyw=",
+ "dev": true
+ }
+ }
+ },
+ "globals": {
+ "version": "11.12.0",
+ "resolved": "https://registry.npmmirror.com/globals/download/globals-11.12.0.tgz?cache=0&sync_timestamp=1635390798667&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fglobals%2Fdownload%2Fglobals-11.12.0.tgz",
+ "integrity": "sha1-q4eVM4hooLq9hSV1gBjCp+uVxC4=",
+ "dev": true
+ },
+ "globby": {
+ "version": "11.0.4",
+ "resolved": "https://registry.nlark.com/globby/download/globby-11.0.4.tgz",
+ "integrity": "sha1-LLr/d8Lypi5x6bKBOme5ejowAaU=",
+ "dev": true,
+ "requires": {
+ "array-union": "^2.1.0",
+ "dir-glob": "^3.0.1",
+ "fast-glob": "^3.1.1",
+ "ignore": "^5.1.4",
+ "merge2": "^1.3.0",
+ "slash": "^3.0.0"
+ }
+ },
+ "globjoin": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npm.taobao.org/globjoin/download/globjoin-0.1.4.tgz",
+ "integrity": "sha1-L0SUrIkZ43Z8XLtpHp9GMyQoXUM=",
+ "dev": true
+ },
+ "gonzales-pe": {
+ "version": "4.3.0",
+ "resolved": "https://registry.nlark.com/gonzales-pe/download/gonzales-pe-4.3.0.tgz",
+ "integrity": "sha1-/p3sXzxVfurQn/hoxlgmvlTQZ7M=",
+ "dev": true,
+ "requires": {
+ "minimist": "^1.2.5"
+ }
+ },
+ "graceful-fs": {
+ "version": "4.2.8",
+ "resolved": "https://registry.npmmirror.com/graceful-fs/download/graceful-fs-4.2.8.tgz",
+ "integrity": "sha1-5BK40z9eAGWTy9PO5t+fLOu+gCo=",
+ "dev": true
+ },
+ "graceful-readlink": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npm.taobao.org/graceful-readlink/download/graceful-readlink-1.0.1.tgz",
+ "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=",
+ "dev": true
+ },
+ "graphlib": {
+ "version": "2.1.8",
+ "resolved": "https://registry.npm.taobao.org/graphlib/download/graphlib-2.1.8.tgz",
+ "integrity": "sha1-V2HUFHN4cAhMkux7XbywWSydNdo=",
+ "requires": {
+ "lodash": "^4.17.15"
+ }
+ },
+ "gzip-size": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmmirror.com/gzip-size/download/gzip-size-6.0.0.tgz",
+ "integrity": "sha1-BlNn/VDCOcBnHLy61b4+LusQ5GI=",
+ "dev": true,
+ "requires": {
+ "duplexer": "^0.1.2"
+ }
+ },
+ "handle-thing": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npm.taobao.org/handle-thing/download/handle-thing-2.0.1.tgz",
+ "integrity": "sha1-hX95zjWVgMNA1DCBzGSJcNC7I04=",
+ "dev": true
+ },
+ "har-schema": {
+ "version": "2.0.0",
+ "resolved": "https://registry.nlark.com/har-schema/download/har-schema-2.0.0.tgz",
+ "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=",
+ "dev": true
+ },
+ "har-validator": {
+ "version": "5.1.5",
+ "resolved": "https://registry.npmmirror.com/har-validator/download/har-validator-5.1.5.tgz",
+ "integrity": "sha1-HwgDufjLIMD6E4It8ezds2veHv0=",
+ "dev": true,
+ "requires": {
+ "ajv": "^6.12.3",
+ "har-schema": "^2.0.0"
+ },
+ "dependencies": {
+ "ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmmirror.com/ajv/download/ajv-6.12.6.tgz?cache=0&sync_timestamp=1637522259668&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fajv%2Fdownload%2Fajv-6.12.6.tgz",
+ "integrity": "sha1-uvWmLoArB9l3A0WG+MO69a3ybfQ=",
+ "dev": true,
+ "requires": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ }
+ },
+ "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
+ }
+ }
+ },
+ "hard-rejection": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npm.taobao.org/hard-rejection/download/hard-rejection-2.1.0.tgz",
+ "integrity": "sha1-HG7aXBaFxjlCdm15u0Cudzzs2IM=",
+ "dev": true
+ },
+ "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.nlark.com/has-ansi/download/has-ansi-2.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fhas-ansi%2Fdownload%2Fhas-ansi-2.0.0.tgz",
+ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.nlark.com/ansi-regex/download/ansi-regex-2.1.1.tgz?cache=0&sync_timestamp=1631634988487&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fansi-regex%2Fdownload%2Fansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ }
+ }
+ },
+ "has-bigints": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npm.taobao.org/has-bigints/download/has-bigints-1.0.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhas-bigints%2Fdownload%2Fhas-bigints-1.0.1.tgz",
+ "integrity": "sha1-ZP5qywIGc+O3jbA1pa9pqp0HsRM=",
+ "dev": true
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.nlark.com/has-flag/download/has-flag-3.0.0.tgz?cache=0&sync_timestamp=1626715907927&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fhas-flag%2Fdownload%2Fhas-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "dev": true
+ },
+ "has-symbols": {
+ "version": "1.0.2",
+ "resolved": "https://registry.nlark.com/has-symbols/download/has-symbols-1.0.2.tgz",
+ "integrity": "sha1-Fl0wcMADCXUqEjakeTMeOsVvFCM="
+ },
+ "has-tostringtag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.nlark.com/has-tostringtag/download/has-tostringtag-1.0.0.tgz?cache=0&sync_timestamp=1628196402801&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fhas-tostringtag%2Fdownload%2Fhas-tostringtag-1.0.0.tgz",
+ "integrity": "sha1-fhM4GKfTlHNPlB5zw9P5KR5liyU=",
+ "requires": {
+ "has-symbols": "^1.0.2"
+ }
+ },
+ "has-unicode": {
+ "version": "2.0.1",
+ "resolved": "https://registry.nlark.com/has-unicode/download/has-unicode-2.0.1.tgz",
+ "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=",
+ "dev": true
+ },
+ "has-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.nlark.com/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.nlark.com/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.nlark.com/kind-of/download/kind-of-4.0.0.tgz",
+ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "hash.js": {
+ "version": "1.1.7",
+ "resolved": "https://registry.nlark.com/hash.js/download/hash.js-1.1.7.tgz?cache=0&sync_timestamp=1622643346539&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fhash.js%2Fdownload%2Fhash.js-1.1.7.tgz",
+ "integrity": "sha1-C6vKU46NTuSg+JiNaIZlN6ADz0I=",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.3",
+ "minimalistic-assert": "^1.0.1"
+ }
+ },
+ "hdr-histogram-js": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npm.taobao.org/hdr-histogram-js/download/hdr-histogram-js-2.0.1.tgz",
+ "integrity": "sha1-7LH/K8thgcPpP/SvlHLCjH6XKE4=",
+ "dev": true,
+ "requires": {
+ "@assemblyscript/loader": "^0.10.1",
+ "base64-js": "^1.2.0",
+ "pako": "^1.0.3"
+ }
+ },
+ "hdr-histogram-percentiles-obj": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npm.taobao.org/hdr-histogram-percentiles-obj/download/hdr-histogram-percentiles-obj-3.0.0.tgz",
+ "integrity": "sha1-lAn03gwt2njmHeLZ14senzy6KDw=",
+ "dev": true
+ },
+ "hosted-git-info": {
+ "version": "4.0.2",
+ "resolved": "https://registry.nlark.com/hosted-git-info/download/hosted-git-info-4.0.2.tgz",
+ "integrity": "sha1-XkJVB+7eT+qEa3Ji8IOEVsQgmWE=",
+ "dev": true,
+ "requires": {
+ "lru-cache": "^6.0.0"
+ }
+ },
+ "hpack.js": {
+ "version": "2.1.6",
+ "resolved": "https://registry.nlark.com/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"
+ }
+ },
+ "html-entities": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npm.taobao.org/html-entities/download/html-entities-1.4.0.tgz?cache=0&sync_timestamp=1617031468383&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhtml-entities%2Fdownload%2Fhtml-entities-1.4.0.tgz",
+ "integrity": "sha1-z70bAdKvr5rcobEK59/6uYxx0tw=",
+ "dev": true
+ },
+ "html-escaper": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npm.taobao.org/html-escaper/download/html-escaper-2.0.2.tgz?cache=0&sync_timestamp=1613643546928&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhtml-escaper%2Fdownload%2Fhtml-escaper-2.0.2.tgz",
+ "integrity": "sha1-39YAJ9o2o238viNiYsAKWCJoFFM=",
+ "dev": true
+ },
+ "html-tags": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npm.taobao.org/html-tags/download/html-tags-3.1.0.tgz",
+ "integrity": "sha1-e15vfmZen7QfMAB+2eDUHpf7IUA=",
+ "dev": true
+ },
+ "html2canvas": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/html2canvas/-/html2canvas-1.4.1.tgz",
+ "integrity": "sha512-fPU6BHNpsyIhr8yyMpTLLxAbkaK8ArIBcmZIRiBLiDhjeqvXolaEmDGmELFuX9I4xDcaKKcJl+TKZLqruBbmWA==",
+ "requires": {
+ "css-line-break": "^2.1.0",
+ "text-segmentation": "^1.0.3"
+ }
+ },
+ "htmlparser2": {
+ "version": "3.10.1",
+ "resolved": "https://registry.npmmirror.com/htmlparser2/download/htmlparser2-3.10.1.tgz?cache=0&sync_timestamp=1636640940074&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fhtmlparser2%2Fdownload%2Fhtmlparser2-3.10.1.tgz",
+ "integrity": "sha1-vWedw/WYl7ajS7EHSchVu1OpOS8=",
+ "dev": true,
+ "requires": {
+ "domelementtype": "^1.3.1",
+ "domhandler": "^2.3.0",
+ "domutils": "^1.5.1",
+ "entities": "^1.1.1",
+ "inherits": "^2.0.1",
+ "readable-stream": "^3.1.1"
+ },
+ "dependencies": {
+ "dom-serializer": {
+ "version": "0.2.2",
+ "resolved": "https://registry.nlark.com/dom-serializer/download/dom-serializer-0.2.2.tgz?cache=0&sync_timestamp=1621256830355&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fdom-serializer%2Fdownload%2Fdom-serializer-0.2.2.tgz",
+ "integrity": "sha1-GvuB9TNxcXXUeGVd68XjMtn5u1E=",
+ "dev": true,
+ "requires": {
+ "domelementtype": "^2.0.1",
+ "entities": "^2.0.0"
+ },
+ "dependencies": {
+ "domelementtype": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npm.taobao.org/domelementtype/download/domelementtype-2.2.0.tgz?cache=0&sync_timestamp=1617298545989&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdomelementtype%2Fdownload%2Fdomelementtype-2.2.0.tgz",
+ "integrity": "sha1-mgtsJ4LtahxzI9QiZxg9+b2LHVc=",
+ "dev": true
+ },
+ "entities": {
+ "version": "2.2.0",
+ "resolved": "https://registry.nlark.com/entities/download/entities-2.2.0.tgz?cache=0&sync_timestamp=1628508189267&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fentities%2Fdownload%2Fentities-2.2.0.tgz",
+ "integrity": "sha1-CY3JDruD2N/6CJ1VJWs1HTTE2lU=",
+ "dev": true
+ }
+ }
+ },
+ "domelementtype": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npm.taobao.org/domelementtype/download/domelementtype-1.3.1.tgz?cache=0&sync_timestamp=1617298545989&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdomelementtype%2Fdownload%2Fdomelementtype-1.3.1.tgz",
+ "integrity": "sha1-0EjESzew0Qp/Kj1f7j9DM9eQSB8=",
+ "dev": true
+ },
+ "domhandler": {
+ "version": "2.4.2",
+ "resolved": "https://registry.nlark.com/domhandler/download/domhandler-2.4.2.tgz?cache=0&sync_timestamp=1630246778110&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fdomhandler%2Fdownload%2Fdomhandler-2.4.2.tgz",
+ "integrity": "sha1-iAUJfpM9ZehVRvcm1g9euItE+AM=",
+ "dev": true,
+ "requires": {
+ "domelementtype": "1"
+ }
+ },
+ "domutils": {
+ "version": "1.7.0",
+ "resolved": "https://registry.nlark.com/domutils/download/domutils-1.7.0.tgz?cache=0&sync_timestamp=1630106606599&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fdomutils%2Fdownload%2Fdomutils-1.7.0.tgz",
+ "integrity": "sha1-Vuo0HoNOBuZ0ivehyyXaZ+qfjCo=",
+ "dev": true,
+ "requires": {
+ "dom-serializer": "0",
+ "domelementtype": "1"
+ }
+ },
+ "entities": {
+ "version": "1.1.2",
+ "resolved": "https://registry.nlark.com/entities/download/entities-1.1.2.tgz?cache=0&sync_timestamp=1628508189267&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fentities%2Fdownload%2Fentities-1.1.2.tgz",
+ "integrity": "sha1-vfpzUplmTfr9NFKe1PhSKidf6lY=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npm.taobao.org/readable-stream/download/readable-stream-3.6.0.tgz",
+ "integrity": "sha1-M3u9o63AcGvT4CRCaihtS0sskZg=",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ }
+ }
+ }
+ },
+ "http-cache-semantics": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npm.taobao.org/http-cache-semantics/download/http-cache-semantics-4.1.0.tgz",
+ "integrity": "sha1-SekcXL82yblLz81xwj1SSex045A=",
+ "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.npmmirror.com/http-errors/download/http-errors-1.7.2.tgz?cache=0&sync_timestamp=1636932182141&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fhttp-errors%2Fdownload%2Fhttp-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.nlark.com/inherits/download/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ }
+ }
+ },
+ "http-parser-js": {
+ "version": "0.5.3",
+ "resolved": "https://registry.npm.taobao.org/http-parser-js/download/http-parser-js-0.5.3.tgz",
+ "integrity": "sha1-AdJwnHnUFpi7AdTezF6dpOSgM9k=",
+ "dev": true
+ },
+ "http-proxy": {
+ "version": "1.18.1",
+ "resolved": "https://registry.npm.taobao.org/http-proxy/download/http-proxy-1.18.1.tgz",
+ "integrity": "sha1-QBVB8FNIhLv5UmAzTnL4juOXZUk=",
+ "dev": true,
+ "requires": {
+ "eventemitter3": "^4.0.0",
+ "follow-redirects": "^1.0.0",
+ "requires-port": "^1.0.0"
+ },
+ "dependencies": {
+ "eventemitter3": {
+ "version": "4.0.7",
+ "resolved": "https://registry.npm.taobao.org/eventemitter3/download/eventemitter3-4.0.7.tgz",
+ "integrity": "sha1-Lem2j2Uo1WRO9cWVJqG0oHMGFp8=",
+ "dev": true
+ }
+ }
+ },
+ "http-proxy-agent": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmmirror.com/http-proxy-agent/download/http-proxy-agent-4.0.1.tgz",
+ "integrity": "sha1-ioyO9/WTLM+VPClsqCkblap0qjo=",
+ "dev": true,
+ "requires": {
+ "@tootallnate/once": "1",
+ "agent-base": "6",
+ "debug": "4"
+ }
+ },
+ "http-proxy-middleware": {
+ "version": "0.19.1",
+ "resolved": "https://registry.nlark.com/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"
+ },
+ "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.nlark.com/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.nlark.com/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.nlark.com/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.nlark.com/kind-of/download/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "micromatch": {
+ "version": "3.1.10",
+ "resolved": "https://registry.nlark.com/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"
+ }
+ },
+ "to-regex-range": {
+ "version": "2.1.1",
+ "resolved": "https://registry.nlark.com/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"
+ }
+ }
+ }
+ },
+ "http-signature": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmmirror.com/http-signature/download/http-signature-1.2.0.tgz?cache=0&sync_timestamp=1637178646601&other_urls=https%3A%2F%2Fregistry.npmmirror.com%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"
+ }
+ },
+ "http2-client": {
+ "version": "1.3.5",
+ "resolved": "https://registry.nlark.com/http2-client/download/http2-client-1.3.5.tgz",
+ "integrity": "sha1-IMnckJ48yYKE3SCvJDLFJAht8YE=",
+ "dev": true
+ },
+ "https-proxy-agent": {
+ "version": "5.0.0",
+ "resolved": "https://registry.nlark.com/https-proxy-agent/download/https-proxy-agent-5.0.0.tgz",
+ "integrity": "sha1-4qkFQqu2inYuCghQ9sntrf2FBrI=",
+ "dev": true,
+ "requires": {
+ "agent-base": "6",
+ "debug": "4"
+ }
+ },
+ "human-signals": {
+ "version": "2.1.0",
+ "resolved": "https://registry.nlark.com/human-signals/download/human-signals-2.1.0.tgz?cache=0&sync_timestamp=1624364695595&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fhuman-signals%2Fdownload%2Fhuman-signals-2.1.0.tgz",
+ "integrity": "sha1-3JH8ukLk0G5Kuu0zs+ejwC9RTqA=",
+ "dev": true
+ },
+ "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"
+ }
+ },
+ "husky": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmmirror.com/husky/download/husky-6.0.0.tgz",
+ "integrity": "sha1-gQ8RhprfUWBMMupXftvDd9f5MZ4=",
+ "dev": true
+ },
+ "iconv-lite": {
+ "version": "0.4.24",
+ "resolved": "https://registry.nlark.com/iconv-lite/download/iconv-lite-0.4.24.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ficonv-lite%2Fdownload%2Ficonv-lite-0.4.24.tgz",
+ "integrity": "sha1-ICK0sl+93CHS9SSXSkdKr+czkIs=",
+ "requires": {
+ "safer-buffer": ">= 2.1.2 < 3"
+ }
+ },
+ "icss-utils": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npm.taobao.org/icss-utils/download/icss-utils-5.1.0.tgz",
+ "integrity": "sha1-xr5oWKvQE9do6YNmrkfiXViHsa4=",
+ "dev": true
+ },
+ "ieee754": {
+ "version": "1.2.1",
+ "resolved": "https://registry.nlark.com/ieee754/download/ieee754-1.2.1.tgz",
+ "integrity": "sha1-jrehCmP/8l0VpXsAFYbRd9Gw01I=",
+ "dev": true
+ },
+ "ignore": {
+ "version": "5.1.9",
+ "resolved": "https://registry.npmmirror.com/ignore/download/ignore-5.1.9.tgz?cache=0&sync_timestamp=1635926632542&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fignore%2Fdownload%2Fignore-5.1.9.tgz",
+ "integrity": "sha1-nsGly+jhRG7GDUQgBg1Dqm5zgvs=",
+ "dev": true
+ },
+ "ignore-walk": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmmirror.com/ignore-walk/download/ignore-walk-3.0.4.tgz",
+ "integrity": "sha1-yaCfabfHtHml10rBo8DUI20qYzU=",
+ "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=1618422657851&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.nlark.com/immediate/download/immediate-3.0.6.tgz",
+ "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps="
+ },
+ "import-fresh": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npm.taobao.org/import-fresh/download/import-fresh-3.3.0.tgz?cache=0&sync_timestamp=1608469532269&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fimport-fresh%2Fdownload%2Fimport-fresh-3.3.0.tgz",
+ "integrity": "sha1-NxYsJfy566oublPVtNiM4X2eDCs=",
+ "dev": true,
+ "requires": {
+ "parent-module": "^1.0.0",
+ "resolve-from": "^4.0.0"
+ }
+ },
+ "import-lazy": {
+ "version": "4.0.0",
+ "resolved": "https://registry.nlark.com/import-lazy/download/import-lazy-4.0.0.tgz",
+ "integrity": "sha1-6OtidIOgpD2jwD8+NVSL5csMwVM=",
+ "dev": true
+ },
+ "import-local": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmmirror.com/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"
+ },
+ "dependencies": {
+ "find-up": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmmirror.com/find-up/download/find-up-3.0.0.tgz?cache=0&sync_timestamp=1633618766404&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Ffind-up%2Fdownload%2Ffind-up-3.0.0.tgz",
+ "integrity": "sha1-SRafHXmTQwZG2mHsxa41XCHJe3M=",
+ "dev": true,
+ "requires": {
+ "locate-path": "^3.0.0"
+ }
+ },
+ "locate-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.nlark.com/locate-path/download/locate-path-3.0.0.tgz?cache=0&sync_timestamp=1629895724478&other_urls=https%3A%2F%2Fregistry.nlark.com%2Flocate-path%2Fdownload%2Flocate-path-3.0.0.tgz",
+ "integrity": "sha1-2+w7OrdZdYBxtY/ln8QYca8hQA4=",
+ "dev": true,
+ "requires": {
+ "p-locate": "^3.0.0",
+ "path-exists": "^3.0.0"
+ }
+ },
+ "p-locate": {
+ "version": "3.0.0",
+ "resolved": "https://registry.nlark.com/p-locate/download/p-locate-3.0.0.tgz",
+ "integrity": "sha1-Mi1poFwCZLJZl9n0DNiokasAZKQ=",
+ "dev": true,
+ "requires": {
+ "p-limit": "^2.0.0"
+ }
+ },
+ "path-exists": {
+ "version": "3.0.0",
+ "resolved": "https://registry.nlark.com/path-exists/download/path-exists-3.0.0.tgz",
+ "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
+ "dev": true
+ },
+ "pkg-dir": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmmirror.com/pkg-dir/download/pkg-dir-3.0.0.tgz?cache=0&sync_timestamp=1633498116014&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fpkg-dir%2Fdownload%2Fpkg-dir-3.0.0.tgz",
+ "integrity": "sha1-J0kCDyOe2ZCIGx9xIQ1R62UjvqM=",
+ "dev": true,
+ "requires": {
+ "find-up": "^3.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.nlark.com/indent-string/download/indent-string-4.0.0.tgz?cache=0&sync_timestamp=1622604582006&other_urls=https%3A%2F%2Fregistry.nlark.com%2Findent-string%2Fdownload%2Findent-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
+ },
+ "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.nlark.com/inherits/download/inherits-2.0.4.tgz",
+ "integrity": "sha1-D6LGT5MpF8NDOg3tVTY6rjdBa3w="
+ },
+ "ini": {
+ "version": "2.0.0",
+ "resolved": "https://registry.nlark.com/ini/download/ini-2.0.0.tgz",
+ "integrity": "sha1-5f1Vbs3VcmvpePoQAYYurLCpS8U=",
+ "dev": true
+ },
+ "inquirer": {
+ "version": "8.1.2",
+ "resolved": "https://registry.npmmirror.com/inquirer/download/inquirer-8.1.2.tgz?cache=0&sync_timestamp=1633472964335&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Finquirer%2Fdownload%2Finquirer-8.1.2.tgz",
+ "integrity": "sha1-ZbIE0s1/tjQA7dkl3+Qouv1CLj0=",
+ "dev": true,
+ "requires": {
+ "ansi-escapes": "^4.2.1",
+ "chalk": "^4.1.1",
+ "cli-cursor": "^3.1.0",
+ "cli-width": "^3.0.0",
+ "external-editor": "^3.0.3",
+ "figures": "^3.0.0",
+ "lodash": "^4.17.21",
+ "mute-stream": "0.0.8",
+ "ora": "^5.3.0",
+ "run-async": "^2.4.0",
+ "rxjs": "^7.2.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0",
+ "through": "^2.3.6"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.nlark.com/ansi-styles/download/ansi-styles-4.3.0.tgz",
+ "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=",
+ "dev": true,
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
+ },
+ "chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.nlark.com/chalk/download/chalk-4.1.2.tgz?cache=0&sync_timestamp=1627646697260&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fchalk%2Fdownload%2Fchalk-4.1.2.tgz",
+ "integrity": "sha1-qsTit3NKdAhnrrFr8CqtVWoeegE=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ }
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npm.taobao.org/color-convert/download/color-convert-2.0.1.tgz",
+ "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=",
+ "dev": true,
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npm.taobao.org/color-name/download/color-name-1.1.4.tgz",
+ "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=",
+ "dev": true
+ },
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.nlark.com/has-flag/download/has-flag-4.0.0.tgz?cache=0&sync_timestamp=1626715907927&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fhas-flag%2Fdownload%2Fhas-flag-4.0.0.tgz",
+ "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=",
+ "dev": true
+ },
+ "rxjs": {
+ "version": "7.4.0",
+ "resolved": "https://registry.npmmirror.com/rxjs/download/rxjs-7.4.0.tgz?cache=0&sync_timestamp=1633554235070&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Frxjs%2Fdownload%2Frxjs-7.4.0.tgz",
+ "integrity": "sha1-oSpE1+6/AW9f8kQbh/KMmlHOvGg=",
+ "dev": true,
+ "requires": {
+ "tslib": "~2.1.0"
+ }
+ },
+ "supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmmirror.com/supports-color/download/supports-color-7.2.0.tgz",
+ "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=",
+ "dev": true,
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ },
+ "tslib": {
+ "version": "2.1.0",
+ "resolved": "https://registry.nlark.com/tslib/download/tslib-2.1.0.tgz?cache=0&sync_timestamp=1628722556410&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ftslib%2Fdownload%2Ftslib-2.1.0.tgz",
+ "integrity": "sha1-2mCGDxwuyqVwOrfTm8Bba/mIuXo=",
+ "dev": true
+ }
+ }
+ },
+ "internal-ip": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmmirror.com/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"
+ }
+ },
+ "internal-slot": {
+ "version": "1.0.3",
+ "resolved": "https://registry.nlark.com/internal-slot/download/internal-slot-1.0.3.tgz",
+ "integrity": "sha1-c0fjB97uovqsKsYgXUvH00ln9Zw=",
+ "dev": true,
+ "requires": {
+ "get-intrinsic": "^1.1.0",
+ "has": "^1.0.3",
+ "side-channel": "^1.0.4"
+ }
+ },
+ "internmap": {
+ "version": "1.0.1",
+ "resolved": "https://registry.nlark.com/internmap/download/internmap-1.0.1.tgz?cache=0&sync_timestamp=1632108258638&other_urls=https%3A%2F%2Fregistry.nlark.com%2Finternmap%2Fdownload%2Finternmap-1.0.1.tgz",
+ "integrity": "sha1-ABfMijuZYF8DAvKxmNJy4BXl35U="
+ },
+ "ip": {
+ "version": "1.1.5",
+ "resolved": "https://registry.nlark.com/ip/download/ip-1.1.5.tgz",
+ "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=",
+ "dev": true
+ },
+ "ip-regex": {
+ "version": "2.1.0",
+ "resolved": "https://registry.nlark.com/ip-regex/download/ip-regex-2.1.0.tgz",
+ "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=",
+ "dev": true
+ },
+ "ipaddr.js": {
+ "version": "1.9.1",
+ "resolved": "https://registry.nlark.com/ipaddr.js/download/ipaddr.js-1.9.1.tgz",
+ "integrity": "sha1-v/OFQ+64mEglB5/zoqjmy9RngbM=",
+ "dev": true
+ },
+ "is-absolute-url": {
+ "version": "3.0.3",
+ "resolved": "https://registry.nlark.com/is-absolute-url/download/is-absolute-url-3.0.3.tgz",
+ "integrity": "sha1-lsaiK2ojkpsR6gr7GDbDatSl1pg=",
+ "dev": true
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.nlark.com/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.nlark.com/kind-of/download/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-alphabetical": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmmirror.com/is-alphabetical/download/is-alphabetical-1.0.4.tgz",
+ "integrity": "sha1-nn1rlJFr4iFTdF0YTCmMv5hqaG0=",
+ "dev": true
+ },
+ "is-alphanumeric": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npm.taobao.org/is-alphanumeric/download/is-alphanumeric-1.0.0.tgz",
+ "integrity": "sha1-Spzvcdr0wAHB2B1j0UDPU/1oifQ=",
+ "dev": true
+ },
+ "is-alphanumerical": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmmirror.com/is-alphanumerical/download/is-alphanumerical-1.0.4.tgz?cache=0&sync_timestamp=1636009316820&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fis-alphanumerical%2Fdownload%2Fis-alphanumerical-1.0.4.tgz",
+ "integrity": "sha1-frmiQx+FX2se8aeOMm31FWlsTb8=",
+ "dev": true,
+ "requires": {
+ "is-alphabetical": "^1.0.0",
+ "is-decimal": "^1.0.0"
+ }
+ },
+ "is-arguments": {
+ "version": "1.1.1",
+ "resolved": "https://registry.nlark.com/is-arguments/download/is-arguments-1.1.1.tgz?cache=0&sync_timestamp=1628201919104&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fis-arguments%2Fdownload%2Fis-arguments-1.1.1.tgz",
+ "integrity": "sha1-FbP4j9oB8ql/7ITKdhpWDxI++ps=",
+ "requires": {
+ "call-bind": "^1.0.2",
+ "has-tostringtag": "^1.0.0"
+ }
+ },
+ "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-bigint": {
+ "version": "1.0.4",
+ "resolved": "https://registry.nlark.com/is-bigint/download/is-bigint-1.0.4.tgz?cache=0&sync_timestamp=1628747504782&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fis-bigint%2Fdownload%2Fis-bigint-1.0.4.tgz",
+ "integrity": "sha1-CBR6GHW8KzIAXUHM2Ckd/8ZpHfM=",
+ "dev": true,
+ "requires": {
+ "has-bigints": "^1.0.1"
+ }
+ },
+ "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-boolean-object": {
+ "version": "1.1.2",
+ "resolved": "https://registry.nlark.com/is-boolean-object/download/is-boolean-object-1.1.2.tgz",
+ "integrity": "sha1-XG3CACRt2TIa5LiFoRS7H3X2Nxk=",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "has-tostringtag": "^1.0.0"
+ }
+ },
+ "is-buffer": {
+ "version": "1.1.6",
+ "resolved": "https://registry.nlark.com/is-buffer/download/is-buffer-1.1.6.tgz",
+ "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=",
+ "dev": true
+ },
+ "is-callable": {
+ "version": "1.2.4",
+ "resolved": "https://registry.nlark.com/is-callable/download/is-callable-1.2.4.tgz",
+ "integrity": "sha1-RzAdWN0CWUB4ZVR4U99tYf5HGUU=",
+ "dev": true
+ },
+ "is-core-module": {
+ "version": "2.8.0",
+ "resolved": "https://registry.npmmirror.com/is-core-module/download/is-core-module-2.8.0.tgz?cache=0&sync_timestamp=1634237061095&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fis-core-module%2Fdownload%2Fis-core-module-2.8.0.tgz",
+ "integrity": "sha1-AyEzbD0JJeSX/Zf12VyxFKXM1Ug=",
+ "dev": true,
+ "requires": {
+ "has": "^1.0.3"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.nlark.com/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.nlark.com/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.5",
+ "resolved": "https://registry.nlark.com/is-date-object/download/is-date-object-1.0.5.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fis-date-object%2Fdownload%2Fis-date-object-1.0.5.tgz",
+ "integrity": "sha1-CEHVU25yTCVZe/bqYuG9OCmN8x8=",
+ "requires": {
+ "has-tostringtag": "^1.0.0"
+ }
+ },
+ "is-decimal": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmmirror.com/is-decimal/download/is-decimal-1.0.4.tgz?cache=0&sync_timestamp=1636008973005&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fis-decimal%2Fdownload%2Fis-decimal-1.0.4.tgz",
+ "integrity": "sha1-ZaOllYocW2OnBuGzM9fNn2MNP6U=",
+ "dev": true
+ },
+ "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.nlark.com/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-docker": {
+ "version": "2.2.1",
+ "resolved": "https://registry.nlark.com/is-docker/download/is-docker-2.2.1.tgz?cache=0&sync_timestamp=1630451108035&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fis-docker%2Fdownload%2Fis-docker-2.2.1.tgz",
+ "integrity": "sha1-M+6r4jz+hvFL3kQIoCwM+4U6zao=",
+ "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.nlark.com/is-extglob/download/is-extglob-2.1.1.tgz",
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+ "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
+ },
+ "is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmmirror.com/is-glob/download/is-glob-4.0.3.tgz",
+ "integrity": "sha1-ZPYeQsu7LuwgcanawLKLoeZdUIQ=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "^2.1.1"
+ }
+ },
+ "is-hexadecimal": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmmirror.com/is-hexadecimal/download/is-hexadecimal-1.0.4.tgz?cache=0&sync_timestamp=1636011536406&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fis-hexadecimal%2Fdownload%2Fis-hexadecimal-1.0.4.tgz",
+ "integrity": "sha1-zDXJdYjaS9Saju3WvECC1E3LI6c=",
+ "dev": true
+ },
+ "is-interactive": {
+ "version": "1.0.0",
+ "resolved": "https://registry.nlark.com/is-interactive/download/is-interactive-1.0.0.tgz",
+ "integrity": "sha1-zqbmrlyHCnsKAAQHC3tYfgJSkS4=",
+ "dev": true
+ },
+ "is-lambda": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npm.taobao.org/is-lambda/download/is-lambda-1.0.1.tgz",
+ "integrity": "sha1-PZh3iZ5qU+/AFgUEzeFfgubwYdU=",
+ "dev": true
+ },
+ "is-negative-zero": {
+ "version": "2.0.1",
+ "resolved": "https://registry.nlark.com/is-negative-zero/download/is-negative-zero-2.0.1.tgz",
+ "integrity": "sha1-PedGwY3aIxkkGlNnWQjY92bxHCQ=",
+ "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-number-object": {
+ "version": "1.0.6",
+ "resolved": "https://registry.nlark.com/is-number-object/download/is-number-object-1.0.6.tgz",
+ "integrity": "sha1-anqvg4x/BoalC0VT9+VKlklOifA=",
+ "dev": true,
+ "requires": {
+ "has-tostringtag": "^1.0.0"
+ }
+ },
+ "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.nlark.com/is-path-cwd/download/is-path-cwd-2.2.0.tgz?cache=0&sync_timestamp=1628686555851&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fis-path-cwd%2Fdownload%2Fis-path-cwd-2.2.0.tgz",
+ "integrity": "sha1-Z9Q7gmZKe1GR/ZEZEn6zAASKn9s=",
+ "dev": true
+ },
+ "is-path-in-cwd": {
+ "version": "2.1.0",
+ "resolved": "https://registry.nlark.com/is-path-in-cwd/download/is-path-in-cwd-2.1.0.tgz?cache=0&sync_timestamp=1620047389319&other_urls=https%3A%2F%2Fregistry.nlark.com%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.nlark.com/is-path-inside/download/is-path-inside-2.1.0.tgz?cache=0&sync_timestamp=1620046845369&other_urls=https%3A%2F%2Fregistry.nlark.com%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?cache=0&sync_timestamp=1618601044820&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-plain-obj%2Fdownload%2Fis-plain-obj-1.1.0.tgz",
+ "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=",
+ "dev": true
+ },
+ "is-plain-object": {
+ "version": "2.0.4",
+ "resolved": "https://registry.nlark.com/is-plain-object/download/is-plain-object-2.0.4.tgz?cache=0&sync_timestamp=1618846974259&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fis-plain-object%2Fdownload%2Fis-plain-object-2.0.4.tgz",
+ "integrity": "sha1-LBY7P6+xtgbZ0Xko8FwqHDjgdnc=",
+ "dev": true,
+ "requires": {
+ "isobject": "^3.0.1"
+ }
+ },
+ "is-regex": {
+ "version": "1.1.4",
+ "resolved": "https://registry.nlark.com/is-regex/download/is-regex-1.1.4.tgz?cache=0&sync_timestamp=1628221905423&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fis-regex%2Fdownload%2Fis-regex-1.1.4.tgz",
+ "integrity": "sha1-7vVmPNWfpMCuM5UFMj32hUuxWVg=",
+ "requires": {
+ "call-bind": "^1.0.2",
+ "has-tostringtag": "^1.0.0"
+ }
+ },
+ "is-regexp": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npm.taobao.org/is-regexp/download/is-regexp-1.0.0.tgz",
+ "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=",
+ "dev": true
+ },
+ "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-shared-array-buffer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmmirror.com/is-shared-array-buffer/download/is-shared-array-buffer-1.0.1.tgz",
+ "integrity": "sha1-l7DIX72stZycRG/mU7gs8rW3z+Y=",
+ "dev": true
+ },
+ "is-stream": {
+ "version": "1.1.0",
+ "resolved": "https://registry.nlark.com/is-stream/download/is-stream-1.1.0.tgz",
+ "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
+ "dev": true
+ },
+ "is-string": {
+ "version": "1.0.7",
+ "resolved": "https://registry.nlark.com/is-string/download/is-string-1.0.7.tgz",
+ "integrity": "sha1-DdEr8gBvJVu1j2lREO/3SR7rwP0=",
+ "dev": true,
+ "requires": {
+ "has-tostringtag": "^1.0.0"
+ }
+ },
+ "is-supported-regexp-flag": {
+ "version": "1.0.1",
+ "resolved": "https://registry.nlark.com/is-supported-regexp-flag/download/is-supported-regexp-flag-1.0.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fis-supported-regexp-flag%2Fdownload%2Fis-supported-regexp-flag-1.0.1.tgz",
+ "integrity": "sha1-Ie4WUY0sHdPt0+mg1X5QIHrDZMo=",
+ "dev": true
+ },
+ "is-symbol": {
+ "version": "1.0.4",
+ "resolved": "https://registry.nlark.com/is-symbol/download/is-symbol-1.0.4.tgz?cache=0&sync_timestamp=1620501174327&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fis-symbol%2Fdownload%2Fis-symbol-1.0.4.tgz",
+ "integrity": "sha1-ptrJO2NbBjymhyI23oiRClevE5w=",
+ "dev": true,
+ "requires": {
+ "has-symbols": "^1.0.2"
+ }
+ },
+ "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-unicode-supported": {
+ "version": "0.1.0",
+ "resolved": "https://registry.nlark.com/is-unicode-supported/download/is-unicode-supported-0.1.0.tgz?cache=0&sync_timestamp=1625294161966&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fis-unicode-supported%2Fdownload%2Fis-unicode-supported-0.1.0.tgz",
+ "integrity": "sha1-PybHaoCVk7Ur+i7LVxDtJ3m1Iqc=",
+ "dev": true
+ },
+ "is-weakref": {
+ "version": "1.0.1",
+ "resolved": "https://registry.nlark.com/is-weakref/download/is-weakref-1.0.1.tgz",
+ "integrity": "sha1-hC26TsF/qayYUN8tbvvBc3J08qI=",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.0"
+ }
+ },
+ "is-what": {
+ "version": "3.14.1",
+ "resolved": "https://registry.npmmirror.com/is-what/download/is-what-3.14.1.tgz?cache=0&sync_timestamp=1634283360064&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fis-what%2Fdownload%2Fis-what-3.14.1.tgz",
+ "integrity": "sha1-4SIvRt3ahd6tD9HJ3xMXYOd3VcE=",
+ "dev": true
+ },
+ "is-whitespace-character": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmmirror.com/is-whitespace-character/download/is-whitespace-character-1.0.4.tgz",
+ "integrity": "sha1-CFjt2UqVWUx8ndC1wXTsbkXuSqc=",
+ "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-word-character": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmmirror.com/is-word-character/download/is-word-character-1.0.4.tgz",
+ "integrity": "sha1-zg5zIW+YWZBgWS9i/zE1TdvrAjA=",
+ "dev": true
+ },
+ "is-wsl": {
+ "version": "2.2.0",
+ "resolved": "https://registry.nlark.com/is-wsl/download/is-wsl-2.2.0.tgz",
+ "integrity": "sha1-dKTHbnfKn9P5MvKQwX6jJs0VcnE=",
+ "dev": true,
+ "requires": {
+ "is-docker": "^2.0.0"
+ }
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npm.taobao.org/isarray/download/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
+ },
+ "isbinaryfile": {
+ "version": "4.0.8",
+ "resolved": "https://registry.nlark.com/isbinaryfile/download/isbinaryfile-4.0.8.tgz",
+ "integrity": "sha1-XTS5SGW9SUZjPsx4oCb8dsWxH88=",
+ "dev": true
+ },
+ "isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npm.taobao.org/isexe/download/isexe-2.0.0.tgz",
+ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
+ "dev": true
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npm.taobao.org/isobject/download/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ },
+ "isstream": {
+ "version": "0.1.2",
+ "resolved": "https://registry.nlark.com/isstream/download/isstream-0.1.2.tgz",
+ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
+ "dev": true
+ },
+ "istanbul-lib-coverage": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmmirror.com/istanbul-lib-coverage/download/istanbul-lib-coverage-3.2.0.tgz?cache=0&sync_timestamp=1634527189737&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fistanbul-lib-coverage%2Fdownload%2Fistanbul-lib-coverage-3.2.0.tgz",
+ "integrity": "sha1-GJ55CdCjn6Wj361bA/cZR3cBkdM=",
+ "dev": true
+ },
+ "istanbul-lib-instrument": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmmirror.com/istanbul-lib-instrument/download/istanbul-lib-instrument-4.0.3.tgz",
+ "integrity": "sha1-hzxv/4l0UBGCIndGlqPyiQLXfB0=",
+ "dev": true,
+ "requires": {
+ "@babel/core": "^7.7.5",
+ "@istanbuljs/schema": "^0.1.2",
+ "istanbul-lib-coverage": "^3.0.0",
+ "semver": "^6.3.0"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz?cache=0&sync_timestamp=1616463540350&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-6.3.0.tgz",
+ "integrity": "sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0=",
+ "dev": true
+ }
+ }
+ },
+ "istanbul-lib-report": {
+ "version": "3.0.0",
+ "resolved": "https://registry.nlark.com/istanbul-lib-report/download/istanbul-lib-report-3.0.0.tgz",
+ "integrity": "sha1-dRj+UupE3jcvRgp2tezan/tz2KY=",
+ "dev": true,
+ "requires": {
+ "istanbul-lib-coverage": "^3.0.0",
+ "make-dir": "^3.0.0",
+ "supports-color": "^7.1.0"
+ },
+ "dependencies": {
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.nlark.com/has-flag/download/has-flag-4.0.0.tgz?cache=0&sync_timestamp=1626715907927&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fhas-flag%2Fdownload%2Fhas-flag-4.0.0.tgz",
+ "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmmirror.com/supports-color/download/supports-color-7.2.0.tgz",
+ "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=",
+ "dev": true,
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ }
+ }
+ },
+ "istanbul-lib-source-maps": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmmirror.com/istanbul-lib-source-maps/download/istanbul-lib-source-maps-4.0.1.tgz",
+ "integrity": "sha1-iV86cJ/PujTG3lpCk5Ai8+Q1hVE=",
+ "dev": true,
+ "requires": {
+ "debug": "^4.1.1",
+ "istanbul-lib-coverage": "^3.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
+ }
+ }
+ },
+ "istanbul-reports": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmmirror.com/istanbul-reports/download/istanbul-reports-3.0.5.tgz?cache=0&sync_timestamp=1634144713451&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fistanbul-reports%2Fdownload%2Fistanbul-reports-3.0.5.tgz",
+ "integrity": "sha1-olgBB+cSeeptZh3e3pKf/G1pM4Q=",
+ "dev": true,
+ "requires": {
+ "html-escaper": "^2.0.0",
+ "istanbul-lib-report": "^3.0.0"
+ }
+ },
+ "isutf8": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmmirror.com/isutf8/download/isutf8-3.1.1.tgz",
+ "integrity": "sha1-PyrHf0mv+yOuVIE9oaSrRKrfHXs="
+ },
+ "jake": {
+ "version": "10.8.2",
+ "resolved": "https://registry.nlark.com/jake/download/jake-10.8.2.tgz",
+ "integrity": "sha1-68nehVgWCmbYLQ6txqLlj7xQCns=",
+ "dev": true,
+ "requires": {
+ "async": "0.9.x",
+ "chalk": "^2.4.2",
+ "filelist": "^1.0.1",
+ "minimatch": "^3.0.4"
+ },
+ "dependencies": {
+ "async": {
+ "version": "0.9.2",
+ "resolved": "https://registry.npmmirror.com/async/download/async-0.9.2.tgz",
+ "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=",
+ "dev": true
+ }
+ }
+ },
+ "jasmine": {
+ "version": "2.8.0",
+ "resolved": "https://registry.npmmirror.com/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.npmmirror.com/jasmine-core/download/jasmine-core-2.8.0.tgz",
+ "integrity": "sha1-vMl5rh+f0FcB5F5S5l06XWPxok4=",
+ "dev": true
+ }
+ }
+ },
+ "jasmine-core": {
+ "version": "3.8.0",
+ "resolved": "https://registry.npmmirror.com/jasmine-core/download/jasmine-core-3.8.0.tgz",
+ "integrity": "sha1-gVOZquWqXZvusSYoBfmBuZ/8m/A=",
+ "dev": true
+ },
+ "jasmine-spec-reporter": {
+ "version": "5.0.2",
+ "resolved": "https://registry.nlark.com/jasmine-spec-reporter/download/jasmine-spec-reporter-5.0.2.tgz",
+ "integrity": "sha1-thKIqwdK1EDcJHfE1ChAsOdKa5U=",
+ "dev": true,
+ "requires": {
+ "colors": "1.4.0"
+ }
+ },
+ "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": "27.3.1",
+ "resolved": "https://registry.npmmirror.com/jest-worker/download/jest-worker-27.3.1.tgz?cache=0&sync_timestamp=1634626737887&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fjest-worker%2Fdownload%2Fjest-worker-27.3.1.tgz",
+ "integrity": "sha1-De9/6uW4BCvjhHl5mut7X6ysJLI=",
+ "dev": true,
+ "requires": {
+ "@types/node": "*",
+ "merge-stream": "^2.0.0",
+ "supports-color": "^8.0.0"
+ },
+ "dependencies": {
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.nlark.com/has-flag/download/has-flag-4.0.0.tgz?cache=0&sync_timestamp=1626715907927&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fhas-flag%2Fdownload%2Fhas-flag-4.0.0.tgz",
+ "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "8.1.1",
+ "resolved": "https://registry.npmmirror.com/supports-color/download/supports-color-8.1.1.tgz",
+ "integrity": "sha1-zW/BfihQDP9WwbhsCn/UpUpzAFw=",
+ "dev": true,
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ }
+ }
+ },
+ "js-base64": {
+ "version": "3.7.2",
+ "resolved": "https://registry.npmmirror.com/js-base64/download/js-base64-3.7.2.tgz",
+ "integrity": "sha1-gW0R2BqK/yQWA9Gc5XYeE+Qdd0U="
+ },
+ "js-tokens": {
+ "version": "4.0.0",
+ "resolved": "https://registry.nlark.com/js-tokens/download/js-tokens-4.0.0.tgz?cache=0&sync_timestamp=1619345098261&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fjs-tokens%2Fdownload%2Fjs-tokens-4.0.0.tgz",
+ "integrity": "sha1-GSA/tZmR35jjoocFDUZHzerzJJk=",
+ "dev": true
+ },
+ "js-yaml": {
+ "version": "3.14.1",
+ "resolved": "https://registry.npm.taobao.org/js-yaml/download/js-yaml-3.14.1.tgz?cache=0&sync_timestamp=1618435004368&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjs-yaml%2Fdownload%2Fjs-yaml-3.14.1.tgz",
+ "integrity": "sha1-2ugS/bOCX6MGYJqHFzg8UMNqBTc=",
+ "dev": true,
+ "requires": {
+ "argparse": "^1.0.7",
+ "esprima": "^4.0.0"
+ }
+ },
+ "jsbn": {
+ "version": "0.1.1",
+ "resolved": "https://registry.nlark.com/jsbn/download/jsbn-0.1.1.tgz",
+ "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
+ "dev": true
+ },
+ "jsdoc-type-pratt-parser": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmmirror.com/jsdoc-type-pratt-parser/download/jsdoc-type-pratt-parser-1.2.0.tgz",
+ "integrity": "sha1-NIKjgzt0qIyVprpyU/DA3jt3ufU=",
+ "dev": true
+ },
+ "jsesc": {
+ "version": "2.5.2",
+ "resolved": "https://registry.nlark.com/jsesc/download/jsesc-2.5.2.tgz",
+ "integrity": "sha1-gFZNLkg9rPbo7yCWUKZ98/DCg6Q=",
+ "dev": true
+ },
+ "json-parse-better-errors": {
+ "version": "1.0.2",
+ "resolved": "https://registry.nlark.com/json-parse-better-errors/download/json-parse-better-errors-1.0.2.tgz",
+ "integrity": "sha1-u4Z8+zRQ5pEHwTHRxRS6s9yLyqk=",
+ "dev": true
+ },
+ "json-parse-even-better-errors": {
+ "version": "2.3.1",
+ "resolved": "https://registry.nlark.com/json-parse-even-better-errors/download/json-parse-even-better-errors-2.3.1.tgz",
+ "integrity": "sha1-fEeAWpQxmSjgV3dAXcEuH3pO4C0=",
+ "dev": true
+ },
+ "json-schema": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmmirror.com/json-schema/download/json-schema-0.2.3.tgz?cache=0&sync_timestamp=1636423494254&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fjson-schema%2Fdownload%2Fjson-schema-0.2.3.tgz",
+ "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=",
+ "dev": true
+ },
+ "json-schema-traverse": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npm.taobao.org/json-schema-traverse/download/json-schema-traverse-1.0.0.tgz",
+ "integrity": "sha1-rnvLNlard6c7pcSb9lTzjmtoYOI="
+ },
+ "json-stable-stringify-without-jsonify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.nlark.com/json-stable-stringify-without-jsonify/download/json-stable-stringify-without-jsonify-1.0.1.tgz",
+ "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
+ "dev": true
+ },
+ "json-stringify-safe": {
+ "version": "5.0.1",
+ "resolved": "https://registry.nlark.com/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.npmmirror.com/json3/download/json3-3.3.3.tgz",
+ "integrity": "sha1-f8EON1/FrkLEcFpcwKpvYr4wW4E=",
+ "dev": true
+ },
+ "json5": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npm.taobao.org/json5/download/json5-2.2.0.tgz",
+ "integrity": "sha1-Lf7+cgxrpSXZ69kJlQ8FFTFsiaM=",
+ "dev": true,
+ "requires": {
+ "minimist": "^1.2.5"
+ }
+ },
+ "jsonc-parser": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npm.taobao.org/jsonc-parser/download/jsonc-parser-3.0.0.tgz?cache=0&sync_timestamp=1605281904422&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjsonc-parser%2Fdownload%2Fjsonc-parser-3.0.0.tgz",
+ "integrity": "sha1-q914VwHH5+rKip7IzwcMpRp0WiI=",
+ "dev": true
+ },
+ "jsonfile": {
+ "version": "6.1.0",
+ "resolved": "https://registry.nlark.com/jsonfile/download/jsonfile-6.1.0.tgz",
+ "integrity": "sha1-vFWyY0eTxnnsZAMJTrE2mKbsCq4=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.6",
+ "universalify": "^2.0.0"
+ }
+ },
+ "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.npmmirror.com/jsprim/download/jsprim-1.4.1.tgz?cache=0&sync_timestamp=1637110674471&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fjsprim%2Fdownload%2Fjsprim-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.7.1",
+ "resolved": "https://registry.nlark.com/jszip/download/jszip-3.7.1.tgz",
+ "integrity": "sha1-vWNAEiHBViWhIoxVbKimjab9o9k=",
+ "requires": {
+ "lie": "~3.3.0",
+ "pako": "~1.0.2",
+ "readable-stream": "~2.3.6",
+ "set-immediate-shim": "~1.0.1"
+ }
+ },
+ "karma": {
+ "version": "6.3.9",
+ "resolved": "https://registry.npmmirror.com/karma/download/karma-6.3.9.tgz?cache=0&sync_timestamp=1637099037935&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fkarma%2Fdownload%2Fkarma-6.3.9.tgz",
+ "integrity": "sha512-E/MqdLM9uVIhfuyVnrhlGBu4miafBdXEAEqCmwdEMh3n17C7UWC/8Kvm3AYKr91gc7scutekZ0xv6rxRaUCtnw==",
+ "dev": true,
+ "requires": {
+ "body-parser": "^1.19.0",
+ "braces": "^3.0.2",
+ "chokidar": "^3.5.1",
+ "colors": "^1.4.0",
+ "connect": "^3.7.0",
+ "di": "^0.0.1",
+ "dom-serialize": "^2.2.1",
+ "glob": "^7.1.7",
+ "graceful-fs": "^4.2.6",
+ "http-proxy": "^1.18.1",
+ "isbinaryfile": "^4.0.8",
+ "lodash": "^4.17.21",
+ "log4js": "^6.3.0",
+ "mime": "^2.5.2",
+ "minimatch": "^3.0.4",
+ "qjobs": "^1.2.0",
+ "range-parser": "^1.2.1",
+ "rimraf": "^3.0.2",
+ "socket.io": "^4.2.0",
+ "source-map": "^0.6.1",
+ "tmp": "^0.2.1",
+ "ua-parser-js": "^0.7.30",
+ "yargs": "^16.1.1"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.nlark.com/ansi-styles/download/ansi-styles-4.3.0.tgz",
+ "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=",
+ "dev": true,
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
+ },
+ "cliui": {
+ "version": "7.0.4",
+ "resolved": "https://registry.nlark.com/cliui/download/cliui-7.0.4.tgz",
+ "integrity": "sha1-oCZe5lVHb8gHrqnfPfjfd4OAi08=",
+ "dev": true,
+ "requires": {
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.0",
+ "wrap-ansi": "^7.0.0"
+ }
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npm.taobao.org/color-convert/download/color-convert-2.0.1.tgz",
+ "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=",
+ "dev": true,
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npm.taobao.org/color-name/download/color-name-1.1.4.tgz",
+ "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=",
+ "dev": true
+ },
+ "mime": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmmirror.com/mime/download/mime-2.6.0.tgz",
+ "integrity": "sha1-oqaCqVzU0MsdYlfij4PafjWAA2c=",
+ "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
+ },
+ "tmp": {
+ "version": "0.2.1",
+ "resolved": "https://registry.nlark.com/tmp/download/tmp-0.2.1.tgz",
+ "integrity": "sha1-hFf8MDfc9HGcJRNnoa9lAO4czxQ=",
+ "dev": true,
+ "requires": {
+ "rimraf": "^3.0.0"
+ }
+ },
+ "wrap-ansi": {
+ "version": "7.0.0",
+ "resolved": "https://registry.nlark.com/wrap-ansi/download/wrap-ansi-7.0.0.tgz?cache=0&sync_timestamp=1631557327268&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fwrap-ansi%2Fdownload%2Fwrap-ansi-7.0.0.tgz",
+ "integrity": "sha1-Z+FFz/UQpqaYS98RUpEdadLrnkM=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ }
+ },
+ "y18n": {
+ "version": "5.0.8",
+ "resolved": "https://registry.npm.taobao.org/y18n/download/y18n-5.0.8.tgz?cache=0&sync_timestamp=1617822684820&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fy18n%2Fdownload%2Fy18n-5.0.8.tgz",
+ "integrity": "sha1-f0k00PfKjFb5UxSTndzS3ZHOHVU=",
+ "dev": true
+ },
+ "yargs": {
+ "version": "16.2.0",
+ "resolved": "https://registry.npmmirror.com/yargs/download/yargs-16.2.0.tgz",
+ "integrity": "sha1-HIK/D2tqZur85+8w43b0mhJHf2Y=",
+ "dev": true,
+ "requires": {
+ "cliui": "^7.0.2",
+ "escalade": "^3.1.1",
+ "get-caller-file": "^2.0.5",
+ "require-directory": "^2.1.1",
+ "string-width": "^4.2.0",
+ "y18n": "^5.0.5",
+ "yargs-parser": "^20.2.2"
+ }
+ },
+ "yargs-parser": {
+ "version": "20.2.9",
+ "resolved": "https://registry.npmmirror.com/yargs-parser/download/yargs-parser-20.2.9.tgz?cache=0&sync_timestamp=1637031053426&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fyargs-parser%2Fdownload%2Fyargs-parser-20.2.9.tgz",
+ "integrity": "sha1-LrfcOwKJcY/ClfNidThFxBoMlO4=",
+ "dev": true
+ }
+ }
+ },
+ "karma-chrome-launcher": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npm.taobao.org/karma-chrome-launcher/download/karma-chrome-launcher-3.1.0.tgz",
+ "integrity": "sha1-gFpYZ5mk0F9OVPcqIEl58/MGZzg=",
+ "dev": true,
+ "requires": {
+ "which": "^1.2.1"
+ }
+ },
+ "karma-coverage": {
+ "version": "2.0.3",
+ "resolved": "https://registry.nlark.com/karma-coverage/download/karma-coverage-2.0.3.tgz",
+ "integrity": "sha1-wQ9HEfTPXKqqZosdb2QufaEi2XM=",
+ "dev": true,
+ "requires": {
+ "istanbul-lib-coverage": "^3.0.0",
+ "istanbul-lib-instrument": "^4.0.1",
+ "istanbul-lib-report": "^3.0.0",
+ "istanbul-lib-source-maps": "^4.0.0",
+ "istanbul-reports": "^3.0.0",
+ "minimatch": "^3.0.4"
+ }
+ },
+ "karma-coverage-istanbul-reporter": {
+ "version": "3.0.3",
+ "resolved": "https://registry.nlark.com/karma-coverage-istanbul-reporter/download/karma-coverage-istanbul-reporter-3.0.3.tgz?cache=0&sync_timestamp=1626199377702&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fkarma-coverage-istanbul-reporter%2Fdownload%2Fkarma-coverage-istanbul-reporter-3.0.3.tgz",
+ "integrity": "sha1-87UwNVOq3I5oHUDTYN/cGbx+n+k=",
+ "dev": true,
+ "requires": {
+ "istanbul-lib-coverage": "^3.0.0",
+ "istanbul-lib-report": "^3.0.0",
+ "istanbul-lib-source-maps": "^3.0.6",
+ "istanbul-reports": "^3.0.2",
+ "minimatch": "^3.0.4"
+ },
+ "dependencies": {
+ "istanbul-lib-source-maps": {
+ "version": "3.0.6",
+ "resolved": "https://registry.npmmirror.com/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.npmmirror.com/istanbul-lib-coverage/download/istanbul-lib-coverage-2.0.5.tgz?cache=0&sync_timestamp=1634527189737&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fistanbul-lib-coverage%2Fdownload%2Fistanbul-lib-coverage-2.0.5.tgz",
+ "integrity": "sha1-Z18KtpUD+tSx2En3NrqsqAM0T0k=",
+ "dev": true
+ }
+ }
+ },
+ "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"
+ }
+ },
+ "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"
+ }
+ },
+ "semver": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npm.taobao.org/semver/download/semver-5.7.1.tgz?cache=0&sync_timestamp=1616463540350&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-5.7.1.tgz",
+ "integrity": "sha1-qVT5Ma66UI0we78Gnv8MAclhFvc=",
+ "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
+ }
+ }
+ },
+ "karma-jasmine": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npm.taobao.org/karma-jasmine/download/karma-jasmine-4.0.1.tgz",
+ "integrity": "sha1-uZ4HO22ZpRlvxL/8EhuJMTsKvYI=",
+ "dev": true,
+ "requires": {
+ "jasmine-core": "^3.6.0"
+ }
+ },
+ "karma-jasmine-html-reporter": {
+ "version": "1.7.0",
+ "resolved": "https://registry.nlark.com/karma-jasmine-html-reporter/download/karma-jasmine-html-reporter-1.7.0.tgz",
+ "integrity": "sha1-UsSJp012CTShCJv6XqSo/LhMwos=",
+ "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.nlark.com/killable/download/killable-1.0.1.tgz",
+ "integrity": "sha1-TIzkQRh6Bhx0dPuHygjipjgZSJI=",
+ "dev": true
+ },
+ "kind-of": {
+ "version": "6.0.3",
+ "resolved": "https://registry.nlark.com/kind-of/download/kind-of-6.0.3.tgz",
+ "integrity": "sha1-B8BQNKbDSfoG4k+jWqdttFgM5N0=",
+ "dev": true
+ },
+ "klona": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmmirror.com/klona/download/klona-2.0.5.tgz?cache=0&sync_timestamp=1635385383825&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fklona%2Fdownload%2Fklona-2.0.5.tgz",
+ "integrity": "sha1-0WZXTZAHY5XZljqnqSj6u412r7w=",
+ "dev": true
+ },
+ "known-css-properties": {
+ "version": "0.21.0",
+ "resolved": "https://registry.nlark.com/known-css-properties/download/known-css-properties-0.21.0.tgz",
+ "integrity": "sha1-FfvQu7g0R/POCdivJH7UfGjt6A0=",
+ "dev": true
+ },
+ "less": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmmirror.com/less/download/less-4.1.1.tgz",
+ "integrity": "sha1-Fb8lOpk5eR3GkIiMP/Qk8+bH7bo=",
+ "dev": true,
+ "requires": {
+ "copy-anything": "^2.0.1",
+ "errno": "^0.1.1",
+ "graceful-fs": "^4.1.2",
+ "image-size": "~0.5.0",
+ "make-dir": "^2.1.0",
+ "mime": "^1.4.1",
+ "needle": "^2.5.2",
+ "parse-node-version": "^1.0.1",
+ "source-map": "~0.6.0",
+ "tslib": "^1.10.0"
+ },
+ "dependencies": {
+ "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,
+ "optional": true,
+ "requires": {
+ "pify": "^4.0.1",
+ "semver": "^5.6.0"
+ }
+ },
+ "semver": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npm.taobao.org/semver/download/semver-5.7.1.tgz?cache=0&sync_timestamp=1616463540350&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-5.7.1.tgz",
+ "integrity": "sha1-qVT5Ma66UI0we78Gnv8MAclhFvc=",
+ "dev": true,
+ "optional": 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,
+ "optional": true
+ },
+ "tslib": {
+ "version": "1.14.1",
+ "resolved": "https://registry.nlark.com/tslib/download/tslib-1.14.1.tgz?cache=0&sync_timestamp=1628722556410&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ftslib%2Fdownload%2Ftslib-1.14.1.tgz",
+ "integrity": "sha1-zy04vcNKE0vK8QkcQfZhni9nLQA=",
+ "dev": true
+ }
+ }
+ },
+ "less-loader": {
+ "version": "10.0.1",
+ "resolved": "https://registry.npmmirror.com/less-loader/download/less-loader-10.0.1.tgz",
+ "integrity": "sha1-wFqrpo0AQAggJ18hwq2Hy5+pkj8=",
+ "dev": true,
+ "requires": {
+ "klona": "^2.0.4"
+ }
+ },
+ "less-plugin-clean-css": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npm.taobao.org/less-plugin-clean-css/download/less-plugin-clean-css-1.5.1.tgz",
+ "integrity": "sha1-zFeveqM5iVflbezr5jy2DCNClwM=",
+ "dev": true,
+ "requires": {
+ "clean-css": "^3.0.1"
+ }
+ },
+ "less-plugin-npm-import": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npm.taobao.org/less-plugin-npm-import/download/less-plugin-npm-import-2.1.0.tgz",
+ "integrity": "sha1-gj5phskzGKmBccqFiEi2vq1Vvz4=",
+ "dev": true,
+ "requires": {
+ "promise": "~7.0.1",
+ "resolve": "~1.1.6"
+ },
+ "dependencies": {
+ "resolve": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npm.taobao.org/resolve/download/resolve-1.1.7.tgz",
+ "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=",
+ "dev": true
+ }
+ }
+ },
+ "less-vars-to-js": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npm.taobao.org/less-vars-to-js/download/less-vars-to-js-1.3.0.tgz",
+ "integrity": "sha1-wyLPQ6PI/D+rZV2j5RoUwUmatXE=",
+ "dev": true,
+ "requires": {
+ "strip-json-comments": "^2.0.1"
+ },
+ "dependencies": {
+ "strip-json-comments": {
+ "version": "2.0.1",
+ "resolved": "https://registry.nlark.com/strip-json-comments/download/strip-json-comments-2.0.1.tgz",
+ "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
+ "dev": true
+ }
+ }
+ },
+ "leven": {
+ "version": "2.1.0",
+ "resolved": "https://registry.nlark.com/leven/download/leven-2.1.0.tgz?cache=0&sync_timestamp=1628598084975&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fleven%2Fdownload%2Fleven-2.1.0.tgz",
+ "integrity": "sha1-wuep93IJTe6dNCAq6KzORoeHVYA=",
+ "dev": true
+ },
+ "levn": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npm.taobao.org/levn/download/levn-0.4.1.tgz",
+ "integrity": "sha1-rkViwAdHO5MqYgDUAyaN0v/8at4=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "^1.2.1",
+ "type-check": "~0.4.0"
+ }
+ },
+ "license-webpack-plugin": {
+ "version": "2.3.20",
+ "resolved": "https://registry.npmmirror.com/license-webpack-plugin/download/license-webpack-plugin-2.3.20.tgz?cache=0&sync_timestamp=1636693292671&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Flicense-webpack-plugin%2Fdownload%2Flicense-webpack-plugin-2.3.20.tgz",
+ "integrity": "sha1-9R+2dMoxUZ2+2+HHqrwDblp/KFg=",
+ "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=",
+ "requires": {
+ "immediate": "~3.0.5"
+ }
+ },
+ "lilconfig": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmmirror.com/lilconfig/download/lilconfig-2.0.4.tgz?cache=0&sync_timestamp=1636150747257&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Flilconfig%2Fdownload%2Flilconfig-2.0.4.tgz",
+ "integrity": "sha1-9FB9BD1wWLOAtqj1y3vNSzTO4II=",
+ "dev": true
+ },
+ "lines-and-columns": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmmirror.com/lines-and-columns/download/lines-and-columns-1.2.4.tgz",
+ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
+ "dev": true
+ },
+ "lint-staged": {
+ "version": "11.2.6",
+ "resolved": "https://registry.npmmirror.com/lint-staged/download/lint-staged-11.2.6.tgz?cache=0&sync_timestamp=1637566864097&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Flint-staged%2Fdownload%2Flint-staged-11.2.6.tgz",
+ "integrity": "sha1-9HexrwKU2wVOWTfxcWed9juqTEM=",
+ "dev": true,
+ "requires": {
+ "cli-truncate": "2.1.0",
+ "colorette": "^1.4.0",
+ "commander": "^8.2.0",
+ "cosmiconfig": "^7.0.1",
+ "debug": "^4.3.2",
+ "enquirer": "^2.3.6",
+ "execa": "^5.1.1",
+ "listr2": "^3.12.2",
+ "micromatch": "^4.0.4",
+ "normalize-path": "^3.0.0",
+ "please-upgrade-node": "^3.2.0",
+ "string-argv": "0.3.1",
+ "stringify-object": "3.3.0",
+ "supports-color": "8.1.1"
+ },
+ "dependencies": {
+ "commander": {
+ "version": "8.3.0",
+ "resolved": "https://registry.npmmirror.com/commander/download/commander-8.3.0.tgz",
+ "integrity": "sha1-SDfqGy2me5xhamevuw+v7lZ7ymY=",
+ "dev": true
+ },
+ "cross-spawn": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npm.taobao.org/cross-spawn/download/cross-spawn-7.0.3.tgz",
+ "integrity": "sha1-9zqFudXUHQRVUcF34ogtSshXKKY=",
+ "dev": true,
+ "requires": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ }
+ },
+ "execa": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmmirror.com/execa/download/execa-5.1.1.tgz?cache=0&sync_timestamp=1637147245057&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fexeca%2Fdownload%2Fexeca-5.1.1.tgz",
+ "integrity": "sha1-+ArZy/Qpj3vR1MlVXCHpN0HEEd0=",
+ "dev": true,
+ "requires": {
+ "cross-spawn": "^7.0.3",
+ "get-stream": "^6.0.0",
+ "human-signals": "^2.1.0",
+ "is-stream": "^2.0.0",
+ "merge-stream": "^2.0.0",
+ "npm-run-path": "^4.0.1",
+ "onetime": "^5.1.2",
+ "signal-exit": "^3.0.3",
+ "strip-final-newline": "^2.0.0"
+ }
+ },
+ "get-stream": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npm.taobao.org/get-stream/download/get-stream-6.0.1.tgz",
+ "integrity": "sha1-omLY7vZ6ztV8KFKtYWdSakPL97c=",
+ "dev": true
+ },
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.nlark.com/has-flag/download/has-flag-4.0.0.tgz?cache=0&sync_timestamp=1626715907927&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fhas-flag%2Fdownload%2Fhas-flag-4.0.0.tgz",
+ "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=",
+ "dev": true
+ },
+ "is-stream": {
+ "version": "2.0.1",
+ "resolved": "https://registry.nlark.com/is-stream/download/is-stream-2.0.1.tgz",
+ "integrity": "sha1-+sHj1TuXrVqdCunO8jifWBClwHc=",
+ "dev": true
+ },
+ "npm-run-path": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmmirror.com/npm-run-path/download/npm-run-path-4.0.1.tgz",
+ "integrity": "sha1-t+zR5e1T2o43pV4cImnguX7XSOo=",
+ "dev": true,
+ "requires": {
+ "path-key": "^3.0.0"
+ }
+ },
+ "path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npm.taobao.org/path-key/download/path-key-3.1.1.tgz?cache=0&sync_timestamp=1617971632960&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpath-key%2Fdownload%2Fpath-key-3.1.1.tgz",
+ "integrity": "sha1-WB9q3mWMu6ZaDTOA3ndTKVBU83U=",
+ "dev": true
+ },
+ "shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npm.taobao.org/shebang-command/download/shebang-command-2.0.0.tgz",
+ "integrity": "sha1-zNCvT4g1+9wmW4JGGq8MNmY/NOo=",
+ "dev": true,
+ "requires": {
+ "shebang-regex": "^3.0.0"
+ }
+ },
+ "shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.nlark.com/shebang-regex/download/shebang-regex-3.0.0.tgz?cache=0&sync_timestamp=1628896299850&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fshebang-regex%2Fdownload%2Fshebang-regex-3.0.0.tgz",
+ "integrity": "sha1-rhbxZE2HPsrYQ7AwexQzYtTEIXI=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "8.1.1",
+ "resolved": "https://registry.npmmirror.com/supports-color/download/supports-color-8.1.1.tgz",
+ "integrity": "sha1-zW/BfihQDP9WwbhsCn/UpUpzAFw=",
+ "dev": true,
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ },
+ "which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npm.taobao.org/which/download/which-2.0.2.tgz",
+ "integrity": "sha1-fGqN0KY2oDJ+ELWckobu6T8/UbE=",
+ "dev": true,
+ "requires": {
+ "isexe": "^2.0.0"
+ }
+ }
+ }
+ },
+ "listr2": {
+ "version": "3.13.5",
+ "resolved": "https://registry.npmmirror.com/listr2/download/listr2-3.13.5.tgz",
+ "integrity": "sha512-3n8heFQDSk+NcwBn3CgxEibZGaRzx+pC64n3YjpMD1qguV4nWus3Al+Oo3KooqFKTQEJ1v7MmnbnyyNspgx3NA==",
+ "dev": true,
+ "requires": {
+ "cli-truncate": "^2.1.0",
+ "colorette": "^2.0.16",
+ "log-update": "^4.0.0",
+ "p-map": "^4.0.0",
+ "rfdc": "^1.3.0",
+ "rxjs": "^7.4.0",
+ "through": "^2.3.8",
+ "wrap-ansi": "^7.0.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.nlark.com/ansi-styles/download/ansi-styles-4.3.0.tgz",
+ "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=",
+ "dev": true,
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npm.taobao.org/color-convert/download/color-convert-2.0.1.tgz",
+ "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=",
+ "dev": true,
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npm.taobao.org/color-name/download/color-name-1.1.4.tgz",
+ "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=",
+ "dev": true
+ },
+ "colorette": {
+ "version": "2.0.16",
+ "resolved": "https://registry.npmmirror.com/colorette/download/colorette-2.0.16.tgz",
+ "integrity": "sha1-cTua+E/bAAE58EVGvUqT9ipQhdo=",
+ "dev": true
+ },
+ "rxjs": {
+ "version": "7.4.0",
+ "resolved": "https://registry.npmmirror.com/rxjs/download/rxjs-7.4.0.tgz?cache=0&sync_timestamp=1633554235070&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Frxjs%2Fdownload%2Frxjs-7.4.0.tgz",
+ "integrity": "sha1-oSpE1+6/AW9f8kQbh/KMmlHOvGg=",
+ "dev": true,
+ "requires": {
+ "tslib": "~2.1.0"
+ }
+ },
+ "tslib": {
+ "version": "2.1.0",
+ "resolved": "https://registry.nlark.com/tslib/download/tslib-2.1.0.tgz?cache=0&sync_timestamp=1628722556410&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ftslib%2Fdownload%2Ftslib-2.1.0.tgz",
+ "integrity": "sha1-2mCGDxwuyqVwOrfTm8Bba/mIuXo=",
+ "dev": true
+ },
+ "wrap-ansi": {
+ "version": "7.0.0",
+ "resolved": "https://registry.nlark.com/wrap-ansi/download/wrap-ansi-7.0.0.tgz?cache=0&sync_timestamp=1631557327268&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fwrap-ansi%2Fdownload%2Fwrap-ansi-7.0.0.tgz",
+ "integrity": "sha1-Z+FFz/UQpqaYS98RUpEdadLrnkM=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ }
+ }
+ }
+ },
+ "load-json-file": {
+ "version": "4.0.0",
+ "resolved": "https://registry.nlark.com/load-json-file/download/load-json-file-4.0.0.tgz",
+ "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "parse-json": "^4.0.0",
+ "pify": "^3.0.0",
+ "strip-bom": "^3.0.0"
+ },
+ "dependencies": {
+ "parse-json": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmmirror.com/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"
+ }
+ },
+ "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
+ }
+ }
+ },
+ "loader-runner": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npm.taobao.org/loader-runner/download/loader-runner-4.2.0.tgz?cache=0&sync_timestamp=1610027943366&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Floader-runner%2Fdownload%2Floader-runner-4.2.0.tgz",
+ "integrity": "sha1-1wIjgNZtFMX7HUlriYZOvP1Hg4Q=",
+ "dev": true
+ },
+ "loader-utils": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmmirror.com/loader-utils/download/loader-utils-2.0.0.tgz?cache=0&sync_timestamp=1636687869321&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Floader-utils%2Fdownload%2Floader-utils-2.0.0.tgz",
+ "integrity": "sha1-5MrOW4FtQloWa18JfhDNErNgZLA=",
+ "dev": true,
+ "requires": {
+ "big.js": "^5.2.2",
+ "emojis-list": "^3.0.0",
+ "json5": "^2.1.2"
+ }
+ },
+ "locate-path": {
+ "version": "5.0.0",
+ "resolved": "https://registry.nlark.com/locate-path/download/locate-path-5.0.0.tgz?cache=0&sync_timestamp=1629895724478&other_urls=https%3A%2F%2Fregistry.nlark.com%2Flocate-path%2Fdownload%2Flocate-path-5.0.0.tgz",
+ "integrity": "sha1-Gvujlq/WdqbUJQTQpno6frn2KqA=",
+ "dev": true,
+ "requires": {
+ "p-locate": "^4.1.0"
+ }
+ },
+ "lodash": {
+ "version": "4.17.21",
+ "resolved": "https://registry.nlark.com/lodash/download/lodash-4.17.21.tgz",
+ "integrity": "sha1-Z5WRxWTDv/quhFTPCz3zcMPWkRw="
+ },
+ "lodash.debounce": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npm.taobao.org/lodash.debounce/download/lodash.debounce-4.0.8.tgz",
+ "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=",
+ "dev": true
+ },
+ "lodash.memoize": {
+ "version": "4.1.2",
+ "resolved": "https://registry.nlark.com/lodash.memoize/download/lodash.memoize-4.1.2.tgz",
+ "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=",
+ "dev": true
+ },
+ "lodash.merge": {
+ "version": "4.6.2",
+ "resolved": "https://registry.npm.taobao.org/lodash.merge/download/lodash.merge-4.6.2.tgz",
+ "integrity": "sha1-VYqlO0O2YeGSWgr9+japoQhf5Xo=",
+ "dev": true
+ },
+ "lodash.truncate": {
+ "version": "4.4.2",
+ "resolved": "https://registry.npm.taobao.org/lodash.truncate/download/lodash.truncate-4.4.2.tgz",
+ "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=",
+ "dev": true
+ },
+ "lodash.uniq": {
+ "version": "4.5.0",
+ "resolved": "https://registry.nlark.com/lodash.uniq/download/lodash.uniq-4.5.0.tgz",
+ "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=",
+ "dev": true
+ },
+ "log-symbols": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npm.taobao.org/log-symbols/download/log-symbols-4.1.0.tgz",
+ "integrity": "sha1-P727lbRoOsn8eFER55LlWNSr1QM=",
+ "dev": true,
+ "requires": {
+ "chalk": "^4.1.0",
+ "is-unicode-supported": "^0.1.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.nlark.com/ansi-styles/download/ansi-styles-4.3.0.tgz",
+ "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=",
+ "dev": true,
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
+ },
+ "chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.nlark.com/chalk/download/chalk-4.1.2.tgz?cache=0&sync_timestamp=1627646697260&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fchalk%2Fdownload%2Fchalk-4.1.2.tgz",
+ "integrity": "sha1-qsTit3NKdAhnrrFr8CqtVWoeegE=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ }
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npm.taobao.org/color-convert/download/color-convert-2.0.1.tgz",
+ "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=",
+ "dev": true,
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npm.taobao.org/color-name/download/color-name-1.1.4.tgz",
+ "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=",
+ "dev": true
+ },
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.nlark.com/has-flag/download/has-flag-4.0.0.tgz?cache=0&sync_timestamp=1626715907927&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fhas-flag%2Fdownload%2Fhas-flag-4.0.0.tgz",
+ "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmmirror.com/supports-color/download/supports-color-7.2.0.tgz",
+ "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=",
+ "dev": true,
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ }
+ }
+ },
+ "log-update": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmmirror.com/log-update/download/log-update-4.0.0.tgz?cache=0&sync_timestamp=1634542359448&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Flog-update%2Fdownload%2Flog-update-4.0.0.tgz",
+ "integrity": "sha1-WJ7NNSRx8qHAxXAodUOmTf0g4KE=",
+ "dev": true,
+ "requires": {
+ "ansi-escapes": "^4.3.0",
+ "cli-cursor": "^3.1.0",
+ "slice-ansi": "^4.0.0",
+ "wrap-ansi": "^6.2.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.nlark.com/ansi-styles/download/ansi-styles-4.3.0.tgz",
+ "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=",
+ "dev": true,
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npm.taobao.org/color-convert/download/color-convert-2.0.1.tgz",
+ "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=",
+ "dev": true,
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npm.taobao.org/color-name/download/color-name-1.1.4.tgz",
+ "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=",
+ "dev": true
+ },
+ "wrap-ansi": {
+ "version": "6.2.0",
+ "resolved": "https://registry.nlark.com/wrap-ansi/download/wrap-ansi-6.2.0.tgz?cache=0&sync_timestamp=1631557327268&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fwrap-ansi%2Fdownload%2Fwrap-ansi-6.2.0.tgz",
+ "integrity": "sha1-6Tk7oHEC5skaOyIUePAlfNKFblM=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ }
+ }
+ }
+ },
+ "log4js": {
+ "version": "6.3.0",
+ "resolved": "https://registry.nlark.com/log4js/download/log4js-6.3.0.tgz",
+ "integrity": "sha1-EN+vu0NDUaPjAnegC5h5RG9xW8s=",
+ "dev": true,
+ "requires": {
+ "date-format": "^3.0.0",
+ "debug": "^4.1.1",
+ "flatted": "^2.0.1",
+ "rfdc": "^1.1.4",
+ "streamroller": "^2.2.4"
+ },
+ "dependencies": {
+ "flatted": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmmirror.com/flatted/download/flatted-2.0.2.tgz?cache=0&sync_timestamp=1636473847692&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fflatted%2Fdownload%2Fflatted-2.0.2.tgz",
+ "integrity": "sha1-RXWyHivO50NKqb5mL0t7X5wrUTg=",
+ "dev": true
+ }
+ }
+ },
+ "loglevel": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmmirror.com/loglevel/download/loglevel-1.8.0.tgz?cache=0&sync_timestamp=1637240410022&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Floglevel%2Fdownload%2Floglevel-1.8.0.tgz",
+ "integrity": "sha512-G6A/nJLRgWOuuwdNuA6koovfEV1YpqqAG4pRUlFaz3jj2QNZ8M4vBqnVA+HBTmU/AMNUtlOsMmSpF6NyOjztbA==",
+ "dev": true
+ },
+ "longest-streak": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmmirror.com/longest-streak/download/longest-streak-2.0.4.tgz?cache=0&sync_timestamp=1636446222992&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Flongest-streak%2Fdownload%2Flongest-streak-2.0.4.tgz",
+ "integrity": "sha1-uFmZV9pbXatk3uP+MW+ndFl9kOQ=",
+ "dev": true
+ },
+ "loud-rejection": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npm.taobao.org/loud-rejection/download/loud-rejection-1.6.0.tgz",
+ "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=",
+ "dev": true,
+ "requires": {
+ "currently-unhandled": "^0.4.1",
+ "signal-exit": "^3.0.0"
+ }
+ },
+ "lru-cache": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npm.taobao.org/lru-cache/download/lru-cache-6.0.0.tgz",
+ "integrity": "sha1-bW/mVw69lqr5D8rR2vo7JWbbOpQ=",
+ "dev": true,
+ "requires": {
+ "yallist": "^4.0.0"
+ }
+ },
+ "magic-string": {
+ "version": "0.25.7",
+ "resolved": "https://registry.nlark.com/magic-string/download/magic-string-0.25.7.tgz?cache=0&sync_timestamp=1618847046304&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fmagic-string%2Fdownload%2Fmagic-string-0.25.7.tgz",
+ "integrity": "sha1-P0l9b9NMZpxnmNy4IfLvMfVEUFE=",
+ "dev": true,
+ "requires": {
+ "sourcemap-codec": "^1.4.4"
+ }
+ },
+ "make-dir": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npm.taobao.org/make-dir/download/make-dir-3.1.0.tgz",
+ "integrity": "sha1-QV6WcEazp/HRhSd9hKpYIDcmoT8=",
+ "dev": true,
+ "requires": {
+ "semver": "^6.0.0"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz?cache=0&sync_timestamp=1616463540350&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-6.3.0.tgz",
+ "integrity": "sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0=",
+ "dev": true
+ }
+ }
+ },
+ "make-error": {
+ "version": "1.3.6",
+ "resolved": "https://registry.npm.taobao.org/make-error/download/make-error-1.3.6.tgz",
+ "integrity": "sha1-LrLjfqm2fEiR9oShOUeZr0hM96I=",
+ "dev": true
+ },
+ "make-fetch-happen": {
+ "version": "9.1.0",
+ "resolved": "https://registry.nlark.com/make-fetch-happen/download/make-fetch-happen-9.1.0.tgz?cache=0&sync_timestamp=1629820656927&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fmake-fetch-happen%2Fdownload%2Fmake-fetch-happen-9.1.0.tgz",
+ "integrity": "sha1-UwhaCeeXFDPmdl95cb9j9OBcuWg=",
+ "dev": true,
+ "requires": {
+ "agentkeepalive": "^4.1.3",
+ "cacache": "^15.2.0",
+ "http-cache-semantics": "^4.1.0",
+ "http-proxy-agent": "^4.0.1",
+ "https-proxy-agent": "^5.0.0",
+ "is-lambda": "^1.0.1",
+ "lru-cache": "^6.0.0",
+ "minipass": "^3.1.3",
+ "minipass-collect": "^1.0.2",
+ "minipass-fetch": "^1.3.2",
+ "minipass-flush": "^1.0.5",
+ "minipass-pipeline": "^1.2.4",
+ "negotiator": "^0.6.2",
+ "promise-retry": "^2.0.1",
+ "socks-proxy-agent": "^6.0.0",
+ "ssri": "^8.0.0"
+ }
+ },
+ "map-age-cleaner": {
+ "version": "0.1.3",
+ "resolved": "https://registry.nlark.com/map-age-cleaner/download/map-age-cleaner-0.1.3.tgz?cache=0&sync_timestamp=1629751304151&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fmap-age-cleaner%2Fdownload%2Fmap-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.nlark.com/map-cache/download/map-cache-0.2.2.tgz",
+ "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=",
+ "dev": true
+ },
+ "map-obj": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmmirror.com/map-obj/download/map-obj-4.3.0.tgz?cache=0&sync_timestamp=1634552719803&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fmap-obj%2Fdownload%2Fmap-obj-4.3.0.tgz",
+ "integrity": "sha1-kwT5Buk/qucIgNoQKp8d8OqLsFo=",
+ "dev": true
+ },
+ "map-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.nlark.com/map-visit/download/map-visit-1.0.0.tgz",
+ "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
+ "dev": true,
+ "requires": {
+ "object-visit": "^1.0.0"
+ }
+ },
+ "markdown-escapes": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmmirror.com/markdown-escapes/download/markdown-escapes-1.0.4.tgz?cache=0&sync_timestamp=1635887464232&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fmarkdown-escapes%2Fdownload%2Fmarkdown-escapes-1.0.4.tgz",
+ "integrity": "sha1-yVQV70UUmddgK5EJXzyOiXX3hTU=",
+ "dev": true
+ },
+ "markdown-table": {
+ "version": "1.1.3",
+ "resolved": "https://registry.nlark.com/markdown-table/download/markdown-table-1.1.3.tgz",
+ "integrity": "sha1-n8tpvP24cXv9A5jG7C2TA2743mA=",
+ "dev": true
+ },
+ "masonry-layout": {
+ "version": "4.2.2",
+ "resolved": "https://registry.npm.taobao.org/masonry-layout/download/masonry-layout-4.2.2.tgz",
+ "integrity": "sha1-1XtErxPmAb/NxCPx3YNItVJN40g=",
+ "requires": {
+ "get-size": "^2.0.2",
+ "outlayer": "^2.1.0"
+ }
+ },
+ "mathml-tag-names": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmmirror.com/mathml-tag-names/download/mathml-tag-names-2.1.3.tgz",
+ "integrity": "sha1-TdrdZzCOeAzxakdoWHjuJ7c2oKM=",
+ "dev": true
+ },
+ "mdast-util-compact": {
+ "version": "1.0.4",
+ "resolved": "https://registry.nlark.com/mdast-util-compact/download/mdast-util-compact-1.0.4.tgz?cache=0&sync_timestamp=1627635894673&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fmdast-util-compact%2Fdownload%2Fmdast-util-compact-1.0.4.tgz",
+ "integrity": "sha1-1TG7dme1Ejq/IIWb4IbE0GyJRZM=",
+ "dev": true,
+ "requires": {
+ "unist-util-visit": "^1.1.0"
+ }
+ },
+ "mdast-util-from-markdown": {
+ "version": "0.8.5",
+ "resolved": "https://registry.npmmirror.com/mdast-util-from-markdown/download/mdast-util-from-markdown-0.8.5.tgz",
+ "integrity": "sha1-0e8spCvDd+ywRjqYeRDa6JvZoow=",
+ "dev": true,
+ "requires": {
+ "@types/mdast": "^3.0.0",
+ "mdast-util-to-string": "^2.0.0",
+ "micromark": "~2.11.0",
+ "parse-entities": "^2.0.0",
+ "unist-util-stringify-position": "^2.0.0"
+ }
+ },
+ "mdast-util-to-markdown": {
+ "version": "0.6.5",
+ "resolved": "https://registry.npmmirror.com/mdast-util-to-markdown/download/mdast-util-to-markdown-0.6.5.tgz",
+ "integrity": "sha1-sz9nyoINaebMUnqT1AOSSbUEvr4=",
+ "dev": true,
+ "requires": {
+ "@types/unist": "^2.0.0",
+ "longest-streak": "^2.0.0",
+ "mdast-util-to-string": "^2.0.0",
+ "parse-entities": "^2.0.0",
+ "repeat-string": "^1.0.0",
+ "zwitch": "^1.0.0"
+ }
+ },
+ "mdast-util-to-string": {
+ "version": "2.0.0",
+ "resolved": "https://registry.nlark.com/mdast-util-to-string/download/mdast-util-to-string-2.0.0.tgz?cache=0&sync_timestamp=1619426294961&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fmdast-util-to-string%2Fdownload%2Fmdast-util-to-string-2.0.0.tgz",
+ "integrity": "sha1-uM/mpxPhCRy1tyj8SIhaR2f4uXs=",
+ "dev": true
+ },
+ "mdn-data": {
+ "version": "2.0.14",
+ "resolved": "https://registry.npmmirror.com/mdn-data/download/mdn-data-2.0.14.tgz",
+ "integrity": "sha1-cRP8QoGRfWPOKbQ0RvcB5owlulA=",
+ "dev": true
+ },
+ "media-typer": {
+ "version": "0.3.0",
+ "resolved": "https://registry.nlark.com/media-typer/download/media-typer-0.3.0.tgz",
+ "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=",
+ "dev": true
+ },
+ "mem": {
+ "version": "8.1.1",
+ "resolved": "https://registry.nlark.com/mem/download/mem-8.1.1.tgz?cache=0&sync_timestamp=1626534352883&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fmem%2Fdownload%2Fmem-8.1.1.tgz",
+ "integrity": "sha1-zxGLNXxlq3t+CBe98AyAYil8ASI=",
+ "dev": true,
+ "requires": {
+ "map-age-cleaner": "^0.1.3",
+ "mimic-fn": "^3.1.0"
+ },
+ "dependencies": {
+ "mimic-fn": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npm.taobao.org/mimic-fn/download/mimic-fn-3.1.0.tgz",
+ "integrity": "sha1-ZXVRRbvz42lUuUnBZFBCdFHVynQ=",
+ "dev": true
+ }
+ }
+ },
+ "memfs": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmmirror.com/memfs/download/memfs-3.4.0.tgz",
+ "integrity": "sha512-o/RfP0J1d03YwsAxyHxAYs2kyJp55AFkMazlFAZFR2I2IXkxiUTXRabJ6RmNNCQ83LAD2jy52Khj0m3OffpNdA==",
+ "dev": true,
+ "requires": {
+ "fs-monkey": "1.0.3"
+ }
+ },
+ "memory-fs": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npm.taobao.org/memory-fs/download/memory-fs-0.4.1.tgz",
+ "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=",
+ "dev": true,
+ "requires": {
+ "errno": "^0.1.3",
+ "readable-stream": "^2.0.1"
+ }
+ },
+ "meow": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmmirror.com/meow/download/meow-7.1.1.tgz?cache=0&sync_timestamp=1637477569022&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fmeow%2Fdownload%2Fmeow-7.1.1.tgz",
+ "integrity": "sha1-fAFZXj0zf8sOxOju0WZuqVkD0wY=",
+ "dev": true,
+ "requires": {
+ "@types/minimist": "^1.2.0",
+ "camelcase-keys": "^6.2.2",
+ "decamelize-keys": "^1.1.0",
+ "hard-rejection": "^2.1.0",
+ "minimist-options": "4.1.0",
+ "normalize-package-data": "^2.5.0",
+ "read-pkg-up": "^7.0.1",
+ "redent": "^3.0.0",
+ "trim-newlines": "^3.0.0",
+ "type-fest": "^0.13.1",
+ "yargs-parser": "^18.1.3"
+ },
+ "dependencies": {
+ "read-pkg": {
+ "version": "5.2.0",
+ "resolved": "https://registry.nlark.com/read-pkg/download/read-pkg-5.2.0.tgz",
+ "integrity": "sha1-e/KVQ4yloz5WzTDgU7NO5yUMk8w=",
+ "dev": true,
+ "requires": {
+ "@types/normalize-package-data": "^2.4.0",
+ "normalize-package-data": "^2.5.0",
+ "parse-json": "^5.0.0",
+ "type-fest": "^0.6.0"
+ },
+ "dependencies": {
+ "type-fest": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmmirror.com/type-fest/download/type-fest-0.6.0.tgz?cache=0&sync_timestamp=1637149878210&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Ftype-fest%2Fdownload%2Ftype-fest-0.6.0.tgz",
+ "integrity": "sha1-jSojcNPfiG61yQraHFv2GIrPg4s=",
+ "dev": true
+ }
+ }
+ },
+ "read-pkg-up": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmmirror.com/read-pkg-up/download/read-pkg-up-7.0.1.tgz",
+ "integrity": "sha1-86YTV1hFlzOuK5VjgFbhhU5+9Qc=",
+ "dev": true,
+ "requires": {
+ "find-up": "^4.1.0",
+ "read-pkg": "^5.2.0",
+ "type-fest": "^0.8.1"
+ },
+ "dependencies": {
+ "type-fest": {
+ "version": "0.8.1",
+ "resolved": "https://registry.npmmirror.com/type-fest/download/type-fest-0.8.1.tgz?cache=0&sync_timestamp=1637149878210&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Ftype-fest%2Fdownload%2Ftype-fest-0.8.1.tgz",
+ "integrity": "sha1-CeJJ696FHTseSNJ8EFREZn8XuD0=",
+ "dev": true
+ }
+ }
+ },
+ "type-fest": {
+ "version": "0.13.1",
+ "resolved": "https://registry.npmmirror.com/type-fest/download/type-fest-0.13.1.tgz?cache=0&sync_timestamp=1637149878210&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Ftype-fest%2Fdownload%2Ftype-fest-0.13.1.tgz",
+ "integrity": "sha1-AXLLW86AsL1ULqNI21DH4hg02TQ=",
+ "dev": true
+ },
+ "yargs-parser": {
+ "version": "18.1.3",
+ "resolved": "https://registry.npmmirror.com/yargs-parser/download/yargs-parser-18.1.3.tgz?cache=0&sync_timestamp=1637031053426&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fyargs-parser%2Fdownload%2Fyargs-parser-18.1.3.tgz",
+ "integrity": "sha1-vmjEl1xrKr9GkjawyHA2L6sJp7A=",
+ "dev": true,
+ "requires": {
+ "camelcase": "^5.0.0",
+ "decamelize": "^1.2.0"
+ }
+ }
+ }
+ },
+ "merge-descriptors": {
+ "version": "1.0.1",
+ "resolved": "https://registry.nlark.com/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.nlark.com/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
+ },
+ "merge2": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npm.taobao.org/merge2/download/merge2-1.4.1.tgz",
+ "integrity": "sha1-Q2iJL4hekHRVpv19xVwMnUBJkK4=",
+ "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
+ },
+ "micromark": {
+ "version": "2.11.4",
+ "resolved": "https://registry.npmmirror.com/micromark/download/micromark-2.11.4.tgz",
+ "integrity": "sha1-0TQ2E47qgmOD6CJEnJpcUO5EZlo=",
+ "dev": true,
+ "requires": {
+ "debug": "^4.0.0",
+ "parse-entities": "^2.0.0"
+ }
+ },
+ "micromatch": {
+ "version": "4.0.4",
+ "resolved": "https://registry.nlark.com/micromatch/download/micromatch-4.0.4.tgz",
+ "integrity": "sha1-iW1Rnf6dsl/OlM63pQCRm/iB6/k=",
+ "dev": true,
+ "requires": {
+ "braces": "^3.0.1",
+ "picomatch": "^2.2.3"
+ }
+ },
+ "mime": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmmirror.com/mime/download/mime-1.6.0.tgz",
+ "integrity": "sha1-Ms2eXGRVO9WNGaVor0Uqz/BJgbE=",
+ "dev": true
+ },
+ "mime-db": {
+ "version": "1.51.0",
+ "resolved": "https://registry.npmmirror.com/mime-db/download/mime-db-1.51.0.tgz?cache=0&sync_timestamp=1636425951030&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fmime-db%2Fdownload%2Fmime-db-1.51.0.tgz",
+ "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==",
+ "dev": true
+ },
+ "mime-types": {
+ "version": "2.1.34",
+ "resolved": "https://registry.npmmirror.com/mime-types/download/mime-types-2.1.34.tgz?cache=0&sync_timestamp=1636432302620&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fmime-types%2Fdownload%2Fmime-types-2.1.34.tgz",
+ "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==",
+ "dev": true,
+ "requires": {
+ "mime-db": "1.51.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
+ },
+ "min-indent": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npm.taobao.org/min-indent/download/min-indent-1.0.1.tgz",
+ "integrity": "sha1-pj9oFnOzBXH76LwlaGrnRu76mGk=",
+ "dev": true
+ },
+ "mini-css-extract-plugin": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmmirror.com/mini-css-extract-plugin/download/mini-css-extract-plugin-2.4.2.tgz",
+ "integrity": "sha1-s1CBkepHk4ikcVAYyZ3T5t1A0tI=",
+ "dev": true,
+ "requires": {
+ "schema-utils": "^3.1.0"
+ },
+ "dependencies": {
+ "ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmmirror.com/ajv/download/ajv-6.12.6.tgz?cache=0&sync_timestamp=1637522259668&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fajv%2Fdownload%2Fajv-6.12.6.tgz",
+ "integrity": "sha1-uvWmLoArB9l3A0WG+MO69a3ybfQ=",
+ "dev": true,
+ "requires": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ }
+ },
+ "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
+ },
+ "schema-utils": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmmirror.com/schema-utils/download/schema-utils-3.1.1.tgz?cache=0&sync_timestamp=1637075888461&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fschema-utils%2Fdownload%2Fschema-utils-3.1.1.tgz",
+ "integrity": "sha1-vHTEtraZXB2I92qLd76nIZ4MgoE=",
+ "dev": true,
+ "requires": {
+ "@types/json-schema": "^7.0.8",
+ "ajv": "^6.12.5",
+ "ajv-keywords": "^3.5.2"
+ }
+ }
+ }
+ },
+ "minimalistic-assert": {
+ "version": "1.0.1",
+ "resolved": "https://registry.nlark.com/minimalistic-assert/download/minimalistic-assert-1.0.1.tgz",
+ "integrity": "sha1-LhlN4ERibUoQ5/f7wAznPoPk1cc=",
+ "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.5",
+ "resolved": "https://registry.nlark.com/minimist/download/minimist-1.2.5.tgz",
+ "integrity": "sha1-Z9ZgFLZqaoqqDAg8X9WN9OTpdgI=",
+ "dev": true
+ },
+ "minimist-options": {
+ "version": "4.1.0",
+ "resolved": "https://registry.nlark.com/minimist-options/download/minimist-options-4.1.0.tgz",
+ "integrity": "sha1-wGVXE8U6ii69d/+iR9NCxA8BBhk=",
+ "dev": true,
+ "requires": {
+ "arrify": "^1.0.1",
+ "is-plain-obj": "^1.1.0",
+ "kind-of": "^6.0.3"
+ }
+ },
+ "minipass": {
+ "version": "3.1.5",
+ "resolved": "https://registry.nlark.com/minipass/download/minipass-3.1.5.tgz?cache=0&sync_timestamp=1631656314228&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fminipass%2Fdownload%2Fminipass-3.1.5.tgz",
+ "integrity": "sha1-cfYlGwozpJwBs8+X/3ftoDDf9zI=",
+ "dev": true,
+ "requires": {
+ "yallist": "^4.0.0"
+ }
+ },
+ "minipass-collect": {
+ "version": "1.0.2",
+ "resolved": "https://registry.nlark.com/minipass-collect/download/minipass-collect-1.0.2.tgz",
+ "integrity": "sha1-IrgTv3Rdxu26JXa5QAIq1u3Ixhc=",
+ "dev": true,
+ "requires": {
+ "minipass": "^3.0.0"
+ }
+ },
+ "minipass-fetch": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmmirror.com/minipass-fetch/download/minipass-fetch-1.4.1.tgz",
+ "integrity": "sha1-114AkdqsGw/9fp1BYp+v99DB8bY=",
+ "dev": true,
+ "requires": {
+ "encoding": "^0.1.12",
+ "minipass": "^3.1.0",
+ "minipass-sized": "^1.0.3",
+ "minizlib": "^2.0.0"
+ }
+ },
+ "minipass-flush": {
+ "version": "1.0.5",
+ "resolved": "https://registry.nlark.com/minipass-flush/download/minipass-flush-1.0.5.tgz",
+ "integrity": "sha1-gucTXX6JpQ/+ZGEKeHlTxMTLs3M=",
+ "dev": true,
+ "requires": {
+ "minipass": "^3.0.0"
+ }
+ },
+ "minipass-json-stream": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npm.taobao.org/minipass-json-stream/download/minipass-json-stream-1.0.1.tgz",
+ "integrity": "sha1-ftu5JYj7/C/x2y/BA5est7a0Sqc=",
+ "dev": true,
+ "requires": {
+ "jsonparse": "^1.3.1",
+ "minipass": "^3.0.0"
+ }
+ },
+ "minipass-pipeline": {
+ "version": "1.2.4",
+ "resolved": "https://registry.nlark.com/minipass-pipeline/download/minipass-pipeline-1.2.4.tgz",
+ "integrity": "sha1-aEcveXEcCEZXwGfFxq2Tzd6oIUw=",
+ "dev": true,
+ "requires": {
+ "minipass": "^3.0.0"
+ }
+ },
+ "minipass-sized": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npm.taobao.org/minipass-sized/download/minipass-sized-1.0.3.tgz",
+ "integrity": "sha1-cO5afFBSBwr6z7wil36nne81O3A=",
+ "dev": true,
+ "requires": {
+ "minipass": "^3.0.0"
+ }
+ },
+ "minizlib": {
+ "version": "2.1.2",
+ "resolved": "https://registry.nlark.com/minizlib/download/minizlib-2.1.2.tgz",
+ "integrity": "sha1-6Q00Zrogm5MkUVCKEc49NjIUWTE=",
+ "dev": true,
+ "requires": {
+ "minipass": "^3.0.0",
+ "yallist": "^4.0.0"
+ }
+ },
+ "mixin-deep": {
+ "version": "1.3.2",
+ "resolved": "https://registry.nlark.com/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": "1.0.4",
+ "resolved": "https://registry.npmmirror.com/mkdirp/download/mkdirp-1.0.4.tgz",
+ "integrity": "sha1-PrXtYmInVteaXw4qIh3+utdcL34=",
+ "dev": true
+ },
+ "mockjs": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npm.taobao.org/mockjs/download/mockjs-1.1.0.tgz",
+ "integrity": "sha1-5qDDeOkZBtuv8gkRzAJzs8fXWwY=",
+ "requires": {
+ "commander": "*"
+ }
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmmirror.com/ms/download/ms-2.1.2.tgz",
+ "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=",
+ "dev": true
+ },
+ "multicast-dns": {
+ "version": "6.2.3",
+ "resolved": "https://registry.npmmirror.com/multicast-dns/download/multicast-dns-6.2.3.tgz?cache=0&sync_timestamp=1633354821467&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fmulticast-dns%2Fdownload%2Fmulticast-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.nlark.com/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.nlark.com/mute-stream/download/mute-stream-0.0.8.tgz",
+ "integrity": "sha1-FjDEKyJR/4HiooPelqVJfqkuXg0=",
+ "dev": true
+ },
+ "nanoid": {
+ "version": "3.1.30",
+ "resolved": "https://registry.npmmirror.com/nanoid/download/nanoid-3.1.30.tgz?cache=0&sync_timestamp=1634166192601&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fnanoid%2Fdownload%2Fnanoid-3.1.30.tgz",
+ "integrity": "sha1-Y/k8xUjSoRPcXfvGO/oJ4rm2Q2I=",
+ "dev": true
+ },
+ "nanomatch": {
+ "version": "1.2.13",
+ "resolved": "https://registry.nlark.com/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"
+ }
+ },
+ "native-request": {
+ "version": "1.1.0",
+ "resolved": "https://registry.nlark.com/native-request/download/native-request-1.1.0.tgz?cache=0&sync_timestamp=1630540604934&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fnative-request%2Fdownload%2Fnative-request-1.1.0.tgz",
+ "integrity": "sha1-rNsw/i7vo+G8jFSzpoUunFwNPLA=",
+ "dev": true,
+ "optional": true
+ },
+ "natural-compare": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npm.taobao.org/natural-compare/download/natural-compare-1.4.0.tgz",
+ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
+ "dev": true
+ },
+ "needle": {
+ "version": "2.9.1",
+ "resolved": "https://registry.nlark.com/needle/download/needle-2.9.1.tgz?cache=0&sync_timestamp=1630674995929&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fneedle%2Fdownload%2Fneedle-2.9.1.tgz",
+ "integrity": "sha1-ItHf++NJDCuD4wH3cJtnNs2PJoQ=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "debug": "^3.2.6",
+ "iconv-lite": "^0.4.4",
+ "sax": "^1.2.4"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmmirror.com/debug/download/debug-3.2.7.tgz",
+ "integrity": "sha1-clgLfpFF+zm2Z2+cXl+xALk0F5o=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "ms": "^2.1.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.2",
+ "resolved": "https://registry.npm.taobao.org/neo-async/download/neo-async-2.6.2.tgz",
+ "integrity": "sha1-tKr7k+OustgXTKU88WOrfXMIMF8=",
+ "dev": true
+ },
+ "ng-alain": {
+ "version": "12.4.2",
+ "resolved": "https://registry.npmmirror.com/ng-alain/download/ng-alain-12.4.2.tgz",
+ "integrity": "sha512-BqKIqeHKbSu9VRgJCN8JelCYdelKFl7dIhQyG0lps1wWDJhhEBLVBdOmzITaC8kowKvL6DBJtOZf8SZJ687WYw==",
+ "dev": true,
+ "requires": {
+ "swagger-typescript-api": "^9.3.1"
+ }
+ },
+ "ng-alain-plugin-theme": {
+ "version": "12.0.0",
+ "resolved": "https://registry.nlark.com/ng-alain-plugin-theme/download/ng-alain-plugin-theme-12.0.0.tgz?cache=0&sync_timestamp=1626077688559&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fng-alain-plugin-theme%2Fdownload%2Fng-alain-plugin-theme-12.0.0.tgz",
+ "integrity": "sha1-F5FVp/NG39v4fJTvUCNQprlETmA=",
+ "dev": true,
+ "requires": {
+ "@angular-devkit/build-angular": "^12.0.0",
+ "hash.js": "^1.0.0",
+ "less": "^3.12.0",
+ "less-plugin-clean-css": "^1.5.1",
+ "less-plugin-npm-import": "^2.1.0",
+ "less-vars-to-js": "^1.3.0",
+ "meow": "^7.1.0",
+ "postcss": "^7.0.0",
+ "strip-css-comments": "^4.1.0"
+ },
+ "dependencies": {
+ "less": {
+ "version": "3.13.1",
+ "resolved": "https://registry.npmmirror.com/less/download/less-3.13.1.tgz",
+ "integrity": "sha1-DryR0qDpwMZzW4PUlrCrBYMHeQk=",
+ "dev": true,
+ "requires": {
+ "copy-anything": "^2.0.1",
+ "errno": "^0.1.1",
+ "graceful-fs": "^4.1.2",
+ "image-size": "~0.5.0",
+ "make-dir": "^2.1.0",
+ "mime": "^1.4.1",
+ "native-request": "^1.0.5",
+ "source-map": "~0.6.0",
+ "tslib": "^1.10.0"
+ }
+ },
+ "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,
+ "optional": true,
+ "requires": {
+ "pify": "^4.0.1",
+ "semver": "^5.6.0"
+ }
+ },
+ "picocolors": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmmirror.com/picocolors/download/picocolors-0.2.1.tgz",
+ "integrity": "sha1-VwZw95NkaFHRuhNZlpYqutWHhZ8=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "7.0.39",
+ "resolved": "https://registry.npmmirror.com/postcss/download/postcss-7.0.39.tgz",
+ "integrity": "sha1-liQ3XZZWMOLh8sAqk1yCpZy0gwk=",
+ "dev": true,
+ "requires": {
+ "picocolors": "^0.2.1",
+ "source-map": "^0.6.1"
+ }
+ },
+ "semver": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npm.taobao.org/semver/download/semver-5.7.1.tgz?cache=0&sync_timestamp=1616463540350&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-5.7.1.tgz",
+ "integrity": "sha1-qVT5Ma66UI0we78Gnv8MAclhFvc=",
+ "dev": true,
+ "optional": 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
+ },
+ "tslib": {
+ "version": "1.14.1",
+ "resolved": "https://registry.nlark.com/tslib/download/tslib-1.14.1.tgz?cache=0&sync_timestamp=1628722556410&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ftslib%2Fdownload%2Ftslib-1.14.1.tgz",
+ "integrity": "sha1-zy04vcNKE0vK8QkcQfZhni9nLQA=",
+ "dev": true
+ }
+ }
+ },
+ "ng-alain-sts": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npm.taobao.org/ng-alain-sts/download/ng-alain-sts-0.0.1.tgz",
+ "integrity": "sha1-Fmm8TXj7U3TdmlFgeYShR5j6Qn0=",
+ "dev": true,
+ "requires": {
+ "@types/swagger-schema-official": "^2.0.15",
+ "extend": "^3.0.2",
+ "meow": "^5.0.0",
+ "request": "^2.88.0"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmmirror.com/camelcase/download/camelcase-4.1.0.tgz?cache=0&sync_timestamp=1636945205805&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fcamelcase%2Fdownload%2Fcamelcase-4.1.0.tgz",
+ "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=",
+ "dev": true
+ },
+ "camelcase-keys": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmmirror.com/camelcase-keys/download/camelcase-keys-4.2.0.tgz?cache=0&sync_timestamp=1633332959770&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fcamelcase-keys%2Fdownload%2Fcamelcase-keys-4.2.0.tgz",
+ "integrity": "sha1-oqpfsa9oh1glnDLBQUJteJI7m3c=",
+ "dev": true,
+ "requires": {
+ "camelcase": "^4.1.0",
+ "map-obj": "^2.0.0",
+ "quick-lru": "^1.0.0"
+ }
+ },
+ "indent-string": {
+ "version": "3.2.0",
+ "resolved": "https://registry.nlark.com/indent-string/download/indent-string-3.2.0.tgz?cache=0&sync_timestamp=1622604582006&other_urls=https%3A%2F%2Fregistry.nlark.com%2Findent-string%2Fdownload%2Findent-string-3.2.0.tgz",
+ "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=",
+ "dev": true
+ },
+ "map-obj": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmmirror.com/map-obj/download/map-obj-2.0.0.tgz?cache=0&sync_timestamp=1634552719803&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fmap-obj%2Fdownload%2Fmap-obj-2.0.0.tgz",
+ "integrity": "sha1-plzSkIepJZi4eRJXpSPgISIqwfk=",
+ "dev": true
+ },
+ "meow": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmmirror.com/meow/download/meow-5.0.0.tgz?cache=0&sync_timestamp=1637477569022&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fmeow%2Fdownload%2Fmeow-5.0.0.tgz",
+ "integrity": "sha1-38c9Y6mvxxSl43F2DrXIi5EHiqQ=",
+ "dev": true,
+ "requires": {
+ "camelcase-keys": "^4.0.0",
+ "decamelize-keys": "^1.0.0",
+ "loud-rejection": "^1.0.0",
+ "minimist-options": "^3.0.1",
+ "normalize-package-data": "^2.3.4",
+ "read-pkg-up": "^3.0.0",
+ "redent": "^2.0.0",
+ "trim-newlines": "^2.0.0",
+ "yargs-parser": "^10.0.0"
+ }
+ },
+ "minimist-options": {
+ "version": "3.0.2",
+ "resolved": "https://registry.nlark.com/minimist-options/download/minimist-options-3.0.2.tgz",
+ "integrity": "sha1-+6TIGRM54T7PTWG+sD8HAQPz2VQ=",
+ "dev": true,
+ "requires": {
+ "arrify": "^1.0.1",
+ "is-plain-obj": "^1.1.0"
+ }
+ },
+ "quick-lru": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmmirror.com/quick-lru/download/quick-lru-1.1.0.tgz",
+ "integrity": "sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g=",
+ "dev": true
+ },
+ "redent": {
+ "version": "2.0.0",
+ "resolved": "https://registry.nlark.com/redent/download/redent-2.0.0.tgz?cache=0&sync_timestamp=1620070119923&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fredent%2Fdownload%2Fredent-2.0.0.tgz",
+ "integrity": "sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo=",
+ "dev": true,
+ "requires": {
+ "indent-string": "^3.0.0",
+ "strip-indent": "^2.0.0"
+ }
+ },
+ "strip-indent": {
+ "version": "2.0.0",
+ "resolved": "https://registry.nlark.com/strip-indent/download/strip-indent-2.0.0.tgz?cache=0&sync_timestamp=1620053310624&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fstrip-indent%2Fdownload%2Fstrip-indent-2.0.0.tgz",
+ "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=",
+ "dev": true
+ },
+ "trim-newlines": {
+ "version": "2.0.0",
+ "resolved": "https://registry.nlark.com/trim-newlines/download/trim-newlines-2.0.0.tgz?cache=0&sync_timestamp=1623341510447&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ftrim-newlines%2Fdownload%2Ftrim-newlines-2.0.0.tgz",
+ "integrity": "sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA=",
+ "dev": true
+ },
+ "yargs-parser": {
+ "version": "10.1.0",
+ "resolved": "https://registry.npmmirror.com/yargs-parser/download/yargs-parser-10.1.0.tgz?cache=0&sync_timestamp=1637031053426&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fyargs-parser%2Fdownload%2Fyargs-parser-10.1.0.tgz",
+ "integrity": "sha1-cgImW4n36eny5XZeD+c1qQXtuqg=",
+ "dev": true,
+ "requires": {
+ "camelcase": "^4.1.0"
+ }
+ }
+ }
+ },
+ "ng-gallery": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmmirror.com/ng-gallery/download/ng-gallery-5.1.1.tgz",
+ "integrity": "sha1-KtAgJ9WJ55817PcJIiLaIQzHvgE=",
+ "requires": {
+ "tslib": "^2.0.0"
+ }
+ },
+ "ng-zorro-antd": {
+ "version": "12.0.2",
+ "resolved": "https://registry.npmmirror.com/ng-zorro-antd/download/ng-zorro-antd-12.0.2.tgz",
+ "integrity": "sha1-ih1BLid7lT35tYDNNmdEidfmTgM=",
+ "requires": {
+ "@angular/cdk": "^12.1.0",
+ "@ant-design/icons-angular": "^12.0.3",
+ "date-fns": "^2.10.0",
+ "tslib": "^2.2.0"
+ }
+ },
+ "ngx-countdown": {
+ "version": "12.0.1",
+ "resolved": "https://registry.nlark.com/ngx-countdown/download/ngx-countdown-12.0.1.tgz",
+ "integrity": "sha1-C9au9MqDuvy8Pdk2bIRJTSuTzic=",
+ "requires": {
+ "tslib": "^2.1.0"
+ }
+ },
+ "ngx-tinymce": {
+ "version": "12.0.0",
+ "resolved": "https://registry.nlark.com/ngx-tinymce/download/ngx-tinymce-12.0.0.tgz",
+ "integrity": "sha1-xTxfFUnLssOmoU4pBP3ZDa5xLzw=",
+ "requires": {
+ "@ng-util/lazy": "^11.1.0",
+ "@ng-util/util": "^11.1.0",
+ "tslib": "^2.1.0"
+ }
+ },
+ "ngx-trend": {
+ "version": "7.0.0",
+ "resolved": "https://registry.nlark.com/ngx-trend/download/ngx-trend-7.0.0.tgz",
+ "integrity": "sha1-m6hRCd7EU+chOvO4gOJokkhG0ys=",
+ "requires": {
+ "tslib": "^2.1.0"
+ }
+ },
+ "nice-napi": {
+ "version": "1.0.2",
+ "resolved": "https://registry.nlark.com/nice-napi/download/nice-napi-1.0.2.tgz",
+ "integrity": "sha1-3Aq1oerCDOVIgC/FaG6qa8ZUkns=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "node-addon-api": "^3.0.0",
+ "node-gyp-build": "^4.2.2"
+ }
+ },
+ "nice-try": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npm.taobao.org/nice-try/download/nice-try-1.0.5.tgz?cache=0&sync_timestamp=1614510016909&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnice-try%2Fdownload%2Fnice-try-1.0.5.tgz",
+ "integrity": "sha1-ozeKdpbOfSI+iPybdkvX7xCJ42Y=",
+ "dev": true
+ },
+ "node-addon-api": {
+ "version": "3.2.1",
+ "resolved": "https://registry.nlark.com/node-addon-api/download/node-addon-api-3.2.1.tgz",
+ "integrity": "sha1-gTJeCiEXeJwBKNq2Xn448HzroWE=",
+ "dev": true,
+ "optional": true
+ },
+ "node-emoji": {
+ "version": "1.11.0",
+ "resolved": "https://registry.nlark.com/node-emoji/download/node-emoji-1.11.0.tgz",
+ "integrity": "sha1-aaAVDmlG4vEV6dfqTfeXHiYoMBw=",
+ "dev": true,
+ "requires": {
+ "lodash": "^4.17.21"
+ }
+ },
+ "node-fetch": {
+ "version": "2.6.6",
+ "resolved": "https://registry.npmmirror.com/node-fetch/download/node-fetch-2.6.6.tgz?cache=0&sync_timestamp=1636395469986&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fnode-fetch%2Fdownload%2Fnode-fetch-2.6.6.tgz",
+ "integrity": "sha1-F1GnwBg06OFpd1hzLp77burfr4k=",
+ "dev": true,
+ "requires": {
+ "whatwg-url": "^5.0.0"
+ }
+ },
+ "node-fetch-h2": {
+ "version": "2.3.0",
+ "resolved": "https://registry.nlark.com/node-fetch-h2/download/node-fetch-h2-2.3.0.tgz",
+ "integrity": "sha1-xhiDJfm9PYNAIL8PLW3BfO0iQaw=",
+ "dev": true,
+ "requires": {
+ "http2-client": "^1.2.5"
+ }
+ },
+ "node-forge": {
+ "version": "0.10.0",
+ "resolved": "https://registry.nlark.com/node-forge/download/node-forge-0.10.0.tgz",
+ "integrity": "sha1-Mt6ir7Ppkm8C7lzoeUkCaRpna/M=",
+ "dev": true
+ },
+ "node-gyp": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmmirror.com/node-gyp/download/node-gyp-7.1.2.tgz?cache=0&sync_timestamp=1637570177658&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fnode-gyp%2Fdownload%2Fnode-gyp-7.1.2.tgz",
+ "integrity": "sha1-IagQrrsYcSAlHDvOyXmvFYexiK4=",
+ "dev": true,
+ "requires": {
+ "env-paths": "^2.2.0",
+ "glob": "^7.1.4",
+ "graceful-fs": "^4.2.3",
+ "nopt": "^5.0.0",
+ "npmlog": "^4.1.2",
+ "request": "^2.88.2",
+ "rimraf": "^3.0.2",
+ "semver": "^7.3.2",
+ "tar": "^6.0.2",
+ "which": "^2.0.2"
+ },
+ "dependencies": {
+ "which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npm.taobao.org/which/download/which-2.0.2.tgz",
+ "integrity": "sha1-fGqN0KY2oDJ+ELWckobu6T8/UbE=",
+ "dev": true,
+ "requires": {
+ "isexe": "^2.0.0"
+ }
+ }
+ }
+ },
+ "node-gyp-build": {
+ "version": "4.3.0",
+ "resolved": "https://registry.nlark.com/node-gyp-build/download/node-gyp-build-4.3.0.tgz?cache=0&sync_timestamp=1631436711963&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fnode-gyp-build%2Fdownload%2Fnode-gyp-build-4.3.0.tgz",
+ "integrity": "sha1-nyVrA+WCYVC+Ocdkv1Hpk5RtcaM=",
+ "dev": true,
+ "optional": true
+ },
+ "node-readfiles": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npm.taobao.org/node-readfiles/download/node-readfiles-0.2.0.tgz",
+ "integrity": "sha1-271K8SE04uY1wkXvk//Pb2BnOl0=",
+ "dev": true,
+ "requires": {
+ "es6-promise": "^3.2.1"
+ }
+ },
+ "node-releases": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmmirror.com/node-releases/download/node-releases-2.0.1.tgz?cache=0&sync_timestamp=1634806914912&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fnode-releases%2Fdownload%2Fnode-releases-2.0.1.tgz",
+ "integrity": "sha1-PR05XyBPHy8ppUNYuftnh2WtL8U=",
+ "dev": true
+ },
+ "nopt": {
+ "version": "5.0.0",
+ "resolved": "https://registry.nlark.com/nopt/download/nopt-5.0.0.tgz",
+ "integrity": "sha1-UwlCu1ilEvzK/lP+IQ8TolNV3Ig=",
+ "dev": true,
+ "requires": {
+ "abbrev": "1"
+ }
+ },
+ "normalize-package-data": {
+ "version": "2.5.0",
+ "resolved": "https://registry.nlark.com/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.9",
+ "resolved": "https://registry.nlark.com/hosted-git-info/download/hosted-git-info-2.8.9.tgz",
+ "integrity": "sha1-3/wL+aIcAiCQkPKqaUKeFBTa8/k=",
+ "dev": true
+ },
+ "semver": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npm.taobao.org/semver/download/semver-5.7.1.tgz?cache=0&sync_timestamp=1616463540350&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-5.7.1.tgz",
+ "integrity": "sha1-qVT5Ma66UI0we78Gnv8MAclhFvc=",
+ "dev": true
+ }
+ }
+ },
+ "normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.nlark.com/normalize-path/download/normalize-path-3.0.0.tgz",
+ "integrity": "sha1-Dc1p/yOhybEf0JeDFmRKA4ghamU=",
+ "dev": true
+ },
+ "normalize-range": {
+ "version": "0.1.2",
+ "resolved": "https://registry.nlark.com/normalize-range/download/normalize-range-0.1.2.tgz",
+ "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=",
+ "dev": true
+ },
+ "normalize-selector": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npm.taobao.org/normalize-selector/download/normalize-selector-0.2.0.tgz",
+ "integrity": "sha1-0LFF62kRicY6eNIB3E/bEpPvDAM=",
+ "dev": true
+ },
+ "normalize-url": {
+ "version": "6.1.0",
+ "resolved": "https://registry.nlark.com/normalize-url/download/normalize-url-6.1.0.tgz",
+ "integrity": "sha1-QNCIW1Nd7/4/MUe+yHfQX+TFZoo=",
+ "dev": true
+ },
+ "npm-bundled": {
+ "version": "1.1.2",
+ "resolved": "https://registry.nlark.com/npm-bundled/download/npm-bundled-1.1.2.tgz",
+ "integrity": "sha1-lEx4eJvXOQNbcLqiylzDK42GC8E=",
+ "dev": true,
+ "requires": {
+ "npm-normalize-package-bin": "^1.0.1"
+ }
+ },
+ "npm-install-checks": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npm.taobao.org/npm-install-checks/download/npm-install-checks-4.0.0.tgz",
+ "integrity": "sha1-o3+sx2Oi/eBJfvLG0Kx8P74A17Q=",
+ "dev": true,
+ "requires": {
+ "semver": "^7.1.1"
+ }
+ },
+ "npm-normalize-package-bin": {
+ "version": "1.0.1",
+ "resolved": "https://registry.nlark.com/npm-normalize-package-bin/download/npm-normalize-package-bin-1.0.1.tgz",
+ "integrity": "sha1-bnmkHyP9I1wGIyGCKNp9nCO49uI=",
+ "dev": true
+ },
+ "npm-package-arg": {
+ "version": "8.1.5",
+ "resolved": "https://registry.nlark.com/npm-package-arg/download/npm-package-arg-8.1.5.tgz?cache=0&sync_timestamp=1623784505093&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fnpm-package-arg%2Fdownload%2Fnpm-package-arg-8.1.5.tgz",
+ "integrity": "sha1-M2my1f6P3GdLqn8XhlFN3BVGbkQ=",
+ "dev": true,
+ "requires": {
+ "hosted-git-info": "^4.0.1",
+ "semver": "^7.3.4",
+ "validate-npm-package-name": "^3.0.0"
+ }
+ },
+ "npm-packlist": {
+ "version": "2.2.2",
+ "resolved": "https://registry.nlark.com/npm-packlist/download/npm-packlist-2.2.2.tgz?cache=0&sync_timestamp=1629740697962&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fnpm-packlist%2Fdownload%2Fnpm-packlist-2.2.2.tgz",
+ "integrity": "sha1-B2uXKT+mIPYygzGGp6j2WqphSMg=",
+ "dev": true,
+ "requires": {
+ "glob": "^7.1.6",
+ "ignore-walk": "^3.0.3",
+ "npm-bundled": "^1.1.1",
+ "npm-normalize-package-bin": "^1.0.1"
+ }
+ },
+ "npm-pick-manifest": {
+ "version": "6.1.1",
+ "resolved": "https://registry.npm.taobao.org/npm-pick-manifest/download/npm-pick-manifest-6.1.1.tgz",
+ "integrity": "sha1-e1SEyiyQhWX0O38nZE82u4FvUUg=",
+ "dev": true,
+ "requires": {
+ "npm-install-checks": "^4.0.0",
+ "npm-normalize-package-bin": "^1.0.1",
+ "npm-package-arg": "^8.1.2",
+ "semver": "^7.3.4"
+ }
+ },
+ "npm-registry-fetch": {
+ "version": "11.0.0",
+ "resolved": "https://registry.npmmirror.com/npm-registry-fetch/download/npm-registry-fetch-11.0.0.tgz",
+ "integrity": "sha1-aMG7gQxGVCdg1ipqll+FpwLUOnY=",
+ "dev": true,
+ "requires": {
+ "make-fetch-happen": "^9.0.1",
+ "minipass": "^3.1.3",
+ "minipass-fetch": "^1.3.0",
+ "minipass-json-stream": "^1.0.1",
+ "minizlib": "^2.0.0",
+ "npm-package-arg": "^8.0.0"
+ }
+ },
+ "npm-run-path": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmmirror.com/npm-run-path/download/npm-run-path-2.0.2.tgz",
+ "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=",
+ "dev": true,
+ "requires": {
+ "path-key": "^2.0.0"
+ }
+ },
+ "npmlog": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmmirror.com/npmlog/download/npmlog-4.1.2.tgz",
+ "integrity": "sha1-CKfyqL9zRgR3mp76StXMcXq7lUs=",
+ "dev": true,
+ "requires": {
+ "are-we-there-yet": "~1.1.2",
+ "console-control-strings": "~1.1.0",
+ "gauge": "~2.7.3",
+ "set-blocking": "~2.0.0"
+ }
+ },
+ "nth-check": {
+ "version": "2.0.1",
+ "resolved": "https://registry.nlark.com/nth-check/download/nth-check-2.0.1.tgz",
+ "integrity": "sha1-Lv4WL1w9oGoolZ+9PbddvuqfD8I=",
+ "dev": true,
+ "requires": {
+ "boolbase": "^1.0.0"
+ }
+ },
+ "num2fraction": {
+ "version": "1.2.2",
+ "resolved": "https://registry.nlark.com/num2fraction/download/num2fraction-1.2.2.tgz",
+ "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=",
+ "dev": true
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmmirror.com/number-is-nan/download/number-is-nan-1.0.1.tgz",
+ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
+ "dev": true
+ },
+ "nx": {
+ "version": "12.10.0",
+ "resolved": "https://registry.npmmirror.com/nx/download/nx-12.10.0.tgz",
+ "integrity": "sha1-pOj7pyVFKd5p/lTltLAH6KQyo/s=",
+ "dev": true,
+ "requires": {
+ "@nrwl/cli": "*"
+ },
+ "dependencies": {
+ "@nrwl/cli": {
+ "version": "13.2.2",
+ "resolved": "https://registry.npmmirror.com/@nrwl/cli/download/@nrwl/cli-13.2.2.tgz",
+ "integrity": "sha512-iqWwULCgYV3r+sKA/jrh4Di5buesPDcmdG0vi4kFnMgNF3Pg+8Coa7qKXJXdTr1gugBfGPFFmHORmH1pE3CMYA==",
+ "dev": true,
+ "requires": {
+ "@nrwl/tao": "13.2.2",
+ "chalk": "4.1.0",
+ "enquirer": "~2.3.6",
+ "v8-compile-cache": "2.3.0",
+ "yargs": "15.4.1",
+ "yargs-parser": "20.0.0"
+ }
+ },
+ "@nrwl/tao": {
+ "version": "13.2.2",
+ "resolved": "https://registry.npmmirror.com/@nrwl/tao/download/@nrwl/tao-13.2.2.tgz",
+ "integrity": "sha512-IQtiTuouagSYpxztJvxD1XYha1eLagFoJV/2Y7bu6jUx5KTT5chLzXbz18WUeKhkuZAHhhb2UeOmL9ggQpWnZQ==",
+ "dev": true,
+ "requires": {
+ "chalk": "4.1.0",
+ "enquirer": "~2.3.6",
+ "fs-extra": "^9.1.0",
+ "jsonc-parser": "3.0.0",
+ "nx": "13.2.2",
+ "rxjs": "^6.5.4",
+ "rxjs-for-await": "0.0.2",
+ "semver": "7.3.4",
+ "tmp": "~0.2.1",
+ "tslib": "^2.3.0",
+ "yargs-parser": "20.0.0"
+ },
+ "dependencies": {
+ "nx": {
+ "version": "13.2.2",
+ "resolved": "https://registry.npmmirror.com/nx/download/nx-13.2.2.tgz",
+ "integrity": "sha512-d13Xb3pswItWS9sP4+ed4JarkTzo6+gCBNWSgxuO6MMkmKZPXH3yM3an9KlA5jCyFygcsny7CIgwwxJhz1SJCg==",
+ "dev": true,
+ "requires": {
+ "@nrwl/cli": "*"
+ }
+ }
+ }
+ },
+ "ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.nlark.com/ansi-styles/download/ansi-styles-4.3.0.tgz",
+ "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=",
+ "dev": true,
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
+ },
+ "chalk": {
+ "version": "4.1.0",
+ "resolved": "https://registry.nlark.com/chalk/download/chalk-4.1.0.tgz?cache=0&sync_timestamp=1627646697260&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fchalk%2Fdownload%2Fchalk-4.1.0.tgz",
+ "integrity": "sha1-ThSHCmGNni7dl92DRf2dncMVZGo=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ }
+ },
+ "cliui": {
+ "version": "6.0.0",
+ "resolved": "https://registry.nlark.com/cliui/download/cliui-6.0.0.tgz",
+ "integrity": "sha1-UR1wLAxOQcoVbX0OlgIfI+EyJbE=",
+ "dev": true,
+ "requires": {
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.0",
+ "wrap-ansi": "^6.2.0"
+ }
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npm.taobao.org/color-convert/download/color-convert-2.0.1.tgz",
+ "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=",
+ "dev": true,
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npm.taobao.org/color-name/download/color-name-1.1.4.tgz",
+ "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=",
+ "dev": true
+ },
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.nlark.com/has-flag/download/has-flag-4.0.0.tgz?cache=0&sync_timestamp=1626715907927&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fhas-flag%2Fdownload%2Fhas-flag-4.0.0.tgz",
+ "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=",
+ "dev": true
+ },
+ "semver": {
+ "version": "7.3.4",
+ "resolved": "https://registry.npm.taobao.org/semver/download/semver-7.3.4.tgz?cache=0&sync_timestamp=1616463540350&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-7.3.4.tgz",
+ "integrity": "sha1-J6qn0uTKdkUvmNOt0JOnLJQ+3Jc=",
+ "dev": true,
+ "requires": {
+ "lru-cache": "^6.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmmirror.com/supports-color/download/supports-color-7.2.0.tgz",
+ "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=",
+ "dev": true,
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ },
+ "tmp": {
+ "version": "0.2.1",
+ "resolved": "https://registry.nlark.com/tmp/download/tmp-0.2.1.tgz",
+ "integrity": "sha1-hFf8MDfc9HGcJRNnoa9lAO4czxQ=",
+ "dev": true,
+ "requires": {
+ "rimraf": "^3.0.0"
+ }
+ },
+ "wrap-ansi": {
+ "version": "6.2.0",
+ "resolved": "https://registry.nlark.com/wrap-ansi/download/wrap-ansi-6.2.0.tgz?cache=0&sync_timestamp=1631557327268&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fwrap-ansi%2Fdownload%2Fwrap-ansi-6.2.0.tgz",
+ "integrity": "sha1-6Tk7oHEC5skaOyIUePAlfNKFblM=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ }
+ },
+ "yargs": {
+ "version": "15.4.1",
+ "resolved": "https://registry.npmmirror.com/yargs/download/yargs-15.4.1.tgz",
+ "integrity": "sha1-DYehbeAa7p2L7Cv7909nhRcw9Pg=",
+ "dev": true,
+ "requires": {
+ "cliui": "^6.0.0",
+ "decamelize": "^1.2.0",
+ "find-up": "^4.1.0",
+ "get-caller-file": "^2.0.1",
+ "require-directory": "^2.1.1",
+ "require-main-filename": "^2.0.0",
+ "set-blocking": "^2.0.0",
+ "string-width": "^4.2.0",
+ "which-module": "^2.0.0",
+ "y18n": "^4.0.0",
+ "yargs-parser": "^18.1.2"
+ },
+ "dependencies": {
+ "yargs-parser": {
+ "version": "18.1.3",
+ "resolved": "https://registry.npmmirror.com/yargs-parser/download/yargs-parser-18.1.3.tgz?cache=0&sync_timestamp=1637031053426&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fyargs-parser%2Fdownload%2Fyargs-parser-18.1.3.tgz",
+ "integrity": "sha1-vmjEl1xrKr9GkjawyHA2L6sJp7A=",
+ "dev": true,
+ "requires": {
+ "camelcase": "^5.0.0",
+ "decamelize": "^1.2.0"
+ }
+ }
+ }
+ },
+ "yargs-parser": {
+ "version": "20.0.0",
+ "resolved": "https://registry.npmmirror.com/yargs-parser/download/yargs-parser-20.0.0.tgz?cache=0&sync_timestamp=1637031053426&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fyargs-parser%2Fdownload%2Fyargs-parser-20.0.0.tgz",
+ "integrity": "sha1-xlodqql3rWPOvdUhWRR7eJpOGak=",
+ "dev": true
+ }
+ }
+ },
+ "oas-kit-common": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npm.taobao.org/oas-kit-common/download/oas-kit-common-1.0.8.tgz",
+ "integrity": "sha1-bYys9ukJeWekx+qLy8vXcBjh9TU=",
+ "dev": true,
+ "requires": {
+ "fast-safe-stringify": "^2.0.7"
+ }
+ },
+ "oas-linter": {
+ "version": "3.2.2",
+ "resolved": "https://registry.nlark.com/oas-linter/download/oas-linter-3.2.2.tgz",
+ "integrity": "sha1-q2ozc2MTSQZZA1ymgC3Es11Iqh4=",
+ "dev": true,
+ "requires": {
+ "@exodus/schemasafe": "^1.0.0-rc.2",
+ "should": "^13.2.1",
+ "yaml": "^1.10.0"
+ }
+ },
+ "oas-resolver": {
+ "version": "2.5.6",
+ "resolved": "https://registry.nlark.com/oas-resolver/download/oas-resolver-2.5.6.tgz",
+ "integrity": "sha1-EEMFact9rKVhFckV5hHrxVFcVhs=",
+ "dev": true,
+ "requires": {
+ "node-fetch-h2": "^2.3.0",
+ "oas-kit-common": "^1.0.8",
+ "reftools": "^1.1.9",
+ "yaml": "^1.10.0",
+ "yargs": "^17.0.1"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.nlark.com/ansi-styles/download/ansi-styles-4.3.0.tgz",
+ "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=",
+ "dev": true,
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
+ },
+ "cliui": {
+ "version": "7.0.4",
+ "resolved": "https://registry.nlark.com/cliui/download/cliui-7.0.4.tgz",
+ "integrity": "sha1-oCZe5lVHb8gHrqnfPfjfd4OAi08=",
+ "dev": true,
+ "requires": {
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.0",
+ "wrap-ansi": "^7.0.0"
+ }
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npm.taobao.org/color-convert/download/color-convert-2.0.1.tgz",
+ "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=",
+ "dev": true,
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npm.taobao.org/color-name/download/color-name-1.1.4.tgz",
+ "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=",
+ "dev": true
+ },
+ "wrap-ansi": {
+ "version": "7.0.0",
+ "resolved": "https://registry.nlark.com/wrap-ansi/download/wrap-ansi-7.0.0.tgz?cache=0&sync_timestamp=1631557327268&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fwrap-ansi%2Fdownload%2Fwrap-ansi-7.0.0.tgz",
+ "integrity": "sha1-Z+FFz/UQpqaYS98RUpEdadLrnkM=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ }
+ },
+ "y18n": {
+ "version": "5.0.8",
+ "resolved": "https://registry.npm.taobao.org/y18n/download/y18n-5.0.8.tgz?cache=0&sync_timestamp=1617822684820&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fy18n%2Fdownload%2Fy18n-5.0.8.tgz",
+ "integrity": "sha1-f0k00PfKjFb5UxSTndzS3ZHOHVU=",
+ "dev": true
+ },
+ "yargs": {
+ "version": "17.2.1",
+ "resolved": "https://registry.npmmirror.com/yargs/download/yargs-17.2.1.tgz",
+ "integrity": "sha1-4slbl5ag4ffzv0QnhjtC4EGBkeo=",
+ "dev": true,
+ "requires": {
+ "cliui": "^7.0.2",
+ "escalade": "^3.1.1",
+ "get-caller-file": "^2.0.5",
+ "require-directory": "^2.1.1",
+ "string-width": "^4.2.0",
+ "y18n": "^5.0.5",
+ "yargs-parser": "^20.2.2"
+ }
+ },
+ "yargs-parser": {
+ "version": "20.2.9",
+ "resolved": "https://registry.npmmirror.com/yargs-parser/download/yargs-parser-20.2.9.tgz?cache=0&sync_timestamp=1637031053426&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fyargs-parser%2Fdownload%2Fyargs-parser-20.2.9.tgz",
+ "integrity": "sha1-LrfcOwKJcY/ClfNidThFxBoMlO4=",
+ "dev": true
+ }
+ }
+ },
+ "oas-schema-walker": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npm.taobao.org/oas-schema-walker/download/oas-schema-walker-1.1.5.tgz",
+ "integrity": "sha1-dMPNR7cP+OCxmtraFEVbXTrDiiI=",
+ "dev": true
+ },
+ "oas-validator": {
+ "version": "5.0.8",
+ "resolved": "https://registry.nlark.com/oas-validator/download/oas-validator-5.0.8.tgz",
+ "integrity": "sha1-OH6Q33yvotP/yDtfuXYFK4fnPCg=",
+ "dev": true,
+ "requires": {
+ "call-me-maybe": "^1.0.1",
+ "oas-kit-common": "^1.0.8",
+ "oas-linter": "^3.2.2",
+ "oas-resolver": "^2.5.6",
+ "oas-schema-walker": "^1.1.5",
+ "reftools": "^1.1.9",
+ "should": "^13.2.1",
+ "yaml": "^1.10.0"
+ }
+ },
+ "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.nlark.com/object-assign/download/object-assign-4.1.1.tgz?cache=0&sync_timestamp=1618846992533&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fobject-assign%2Fdownload%2Fobject-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
+ "dev": true
+ },
+ "object-copy": {
+ "version": "0.1.0",
+ "resolved": "https://registry.nlark.com/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.nlark.com/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.nlark.com/kind-of/download/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "object-inspect": {
+ "version": "1.11.0",
+ "resolved": "https://registry.nlark.com/object-inspect/download/object-inspect-1.11.0.tgz?cache=0&sync_timestamp=1626120241132&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fobject-inspect%2Fdownload%2Fobject-inspect-1.11.0.tgz",
+ "integrity": "sha1-nc6xRs7dQUig2eUauI00z1CZIrE=",
+ "dev": true
+ },
+ "object-is": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npm.taobao.org/object-is/download/object-is-1.1.5.tgz?cache=0&sync_timestamp=1613857698573&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fobject-is%2Fdownload%2Fobject-is-1.1.5.tgz",
+ "integrity": "sha1-ud7qpfx/GEag+uzc7sE45XePU6w=",
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.3"
+ }
+ },
+ "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.nlark.com/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.2",
+ "resolved": "https://registry.npm.taobao.org/object.assign/download/object.assign-4.1.2.tgz?cache=0&sync_timestamp=1604115183005&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fobject.assign%2Fdownload%2Fobject.assign-4.1.2.tgz",
+ "integrity": "sha1-DtVKNC7Os3s4/3brgxoOeIy2OUA=",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.0",
+ "define-properties": "^1.1.3",
+ "has-symbols": "^1.0.1",
+ "object-keys": "^1.1.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.5",
+ "resolved": "https://registry.npmmirror.com/object.values/download/object.values-1.1.5.tgz?cache=0&sync_timestamp=1633326983597&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fobject.values%2Fdownload%2Fobject.values-1.1.5.tgz",
+ "integrity": "sha1-lZ9j486e8QhyAzMIITHkpFm3Fqw=",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.19.1"
+ }
+ },
+ "obuf": {
+ "version": "1.1.2",
+ "resolved": "https://registry.nlark.com/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?cache=0&sync_timestamp=1614930634590&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fon-finished%2Fdownload%2Fon-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.nlark.com/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.2",
+ "resolved": "https://registry.npm.taobao.org/onetime/download/onetime-5.1.2.tgz",
+ "integrity": "sha1-0Oluu1awdHbfHdnEgG5SN5hcpF4=",
+ "dev": true,
+ "requires": {
+ "mimic-fn": "^2.1.0"
+ }
+ },
+ "open": {
+ "version": "8.2.1",
+ "resolved": "https://registry.npmmirror.com/open/download/open-8.2.1.tgz",
+ "integrity": "sha1-gt5C2gzL9Cm8EtCZ2tLgl14U6K8=",
+ "dev": true,
+ "requires": {
+ "define-lazy-prop": "^2.0.0",
+ "is-docker": "^2.1.1",
+ "is-wsl": "^2.2.0"
+ }
+ },
+ "opn": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmmirror.com/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.nlark.com/is-wsl/download/is-wsl-1.1.0.tgz",
+ "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=",
+ "dev": true
+ }
+ }
+ },
+ "optionator": {
+ "version": "0.9.1",
+ "resolved": "https://registry.npm.taobao.org/optionator/download/optionator-0.9.1.tgz",
+ "integrity": "sha1-TyNqY3Pa4FZqbUPhMmZ09QwpFJk=",
+ "dev": true,
+ "requires": {
+ "deep-is": "^0.1.3",
+ "fast-levenshtein": "^2.0.6",
+ "levn": "^0.4.1",
+ "prelude-ls": "^1.2.1",
+ "type-check": "^0.4.0",
+ "word-wrap": "^1.2.3"
+ }
+ },
+ "ora": {
+ "version": "5.4.1",
+ "resolved": "https://registry.nlark.com/ora/download/ora-5.4.1.tgz?cache=0&sync_timestamp=1631556658795&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fora%2Fdownload%2Fora-5.4.1.tgz",
+ "integrity": "sha1-GyZ4Qmr0rEpQkAjl5KyemVnbnhg=",
+ "dev": true,
+ "requires": {
+ "bl": "^4.1.0",
+ "chalk": "^4.1.0",
+ "cli-cursor": "^3.1.0",
+ "cli-spinners": "^2.5.0",
+ "is-interactive": "^1.0.0",
+ "is-unicode-supported": "^0.1.0",
+ "log-symbols": "^4.1.0",
+ "strip-ansi": "^6.0.0",
+ "wcwidth": "^1.0.1"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.nlark.com/ansi-styles/download/ansi-styles-4.3.0.tgz",
+ "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=",
+ "dev": true,
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
+ },
+ "chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.nlark.com/chalk/download/chalk-4.1.2.tgz?cache=0&sync_timestamp=1627646697260&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fchalk%2Fdownload%2Fchalk-4.1.2.tgz",
+ "integrity": "sha1-qsTit3NKdAhnrrFr8CqtVWoeegE=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ }
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npm.taobao.org/color-convert/download/color-convert-2.0.1.tgz",
+ "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=",
+ "dev": true,
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npm.taobao.org/color-name/download/color-name-1.1.4.tgz",
+ "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=",
+ "dev": true
+ },
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.nlark.com/has-flag/download/has-flag-4.0.0.tgz?cache=0&sync_timestamp=1626715907927&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fhas-flag%2Fdownload%2Fhas-flag-4.0.0.tgz",
+ "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmmirror.com/supports-color/download/supports-color-7.2.0.tgz",
+ "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=",
+ "dev": true,
+ "requires": {
+ "has-flag": "^4.0.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-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
+ },
+ "outlayer": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npm.taobao.org/outlayer/download/outlayer-2.1.1.tgz",
+ "integrity": "sha1-KYY7beEOpdrf/8rfoNcokHOH6aI=",
+ "requires": {
+ "ev-emitter": "^1.0.0",
+ "fizzy-ui-utils": "^2.0.0",
+ "get-size": "^2.0.2"
+ }
+ },
+ "p-defer": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npm.taobao.org/p-defer/download/p-defer-1.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fp-defer%2Fdownload%2Fp-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-limit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.nlark.com/p-limit/download/p-limit-2.3.0.tgz?cache=0&sync_timestamp=1628812766275&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fp-limit%2Fdownload%2Fp-limit-2.3.0.tgz",
+ "integrity": "sha1-PdM8ZHohT9//2DWTPrCG2g3CHbE=",
+ "dev": true,
+ "requires": {
+ "p-try": "^2.0.0"
+ }
+ },
+ "p-locate": {
+ "version": "4.1.0",
+ "resolved": "https://registry.nlark.com/p-locate/download/p-locate-4.1.0.tgz",
+ "integrity": "sha1-o0KLtwiLOmApL2aRkni3wpetTwc=",
+ "dev": true,
+ "requires": {
+ "p-limit": "^2.2.0"
+ }
+ },
+ "p-map": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmmirror.com/p-map/download/p-map-4.0.0.tgz?cache=0&sync_timestamp=1635931861684&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fp-map%2Fdownload%2Fp-map-4.0.0.tgz",
+ "integrity": "sha1-uy+Vpe2i7BaOySdOBqdHw+KQTSs=",
+ "dev": true,
+ "requires": {
+ "aggregate-error": "^3.0.0"
+ }
+ },
+ "p-retry": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmmirror.com/p-retry/download/p-retry-3.0.1.tgz?cache=0&sync_timestamp=1635966813736&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fp-retry%2Fdownload%2Fp-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.npmmirror.com/p-try/download/p-try-2.2.0.tgz?cache=0&sync_timestamp=1633364462890&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fp-try%2Fdownload%2Fp-try-2.2.0.tgz",
+ "integrity": "sha1-yyhoVA4xPWHeWPr741zpAE1VQOY=",
+ "dev": true
+ },
+ "pacote": {
+ "version": "11.3.5",
+ "resolved": "https://registry.npmmirror.com/pacote/download/pacote-11.3.5.tgz?cache=0&sync_timestamp=1634076714071&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fpacote%2Fdownload%2Fpacote-11.3.5.tgz",
+ "integrity": "sha1-c88fw3crUz9XXjnvqWxQvow9ydI=",
+ "dev": true,
+ "requires": {
+ "@npmcli/git": "^2.1.0",
+ "@npmcli/installed-package-contents": "^1.0.6",
+ "@npmcli/promise-spawn": "^1.2.0",
+ "@npmcli/run-script": "^1.8.2",
+ "cacache": "^15.0.5",
+ "chownr": "^2.0.0",
+ "fs-minipass": "^2.1.0",
+ "infer-owner": "^1.0.4",
+ "minipass": "^3.1.3",
+ "mkdirp": "^1.0.3",
+ "npm-package-arg": "^8.0.1",
+ "npm-packlist": "^2.1.4",
+ "npm-pick-manifest": "^6.0.0",
+ "npm-registry-fetch": "^11.0.0",
+ "promise-retry": "^2.0.1",
+ "read-package-json-fast": "^2.0.1",
+ "rimraf": "^3.0.2",
+ "ssri": "^8.0.1",
+ "tar": "^6.1.0"
+ }
+ },
+ "pako": {
+ "version": "1.0.11",
+ "resolved": "https://registry.nlark.com/pako/download/pako-1.0.11.tgz",
+ "integrity": "sha1-bJWZ00DVTf05RjgCUqNXBaa5kr8="
+ },
+ "parchment": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npm.taobao.org/parchment/download/parchment-1.1.4.tgz",
+ "integrity": "sha1-rt7Xq5OP6SHUw0vDOc4RaLwv/eU="
+ },
+ "parent-module": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmmirror.com/parent-module/download/parent-module-1.0.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fparent-module%2Fdownload%2Fparent-module-1.0.1.tgz",
+ "integrity": "sha1-aR0nCeeMefrjoVZiJFLQB2LKqqI=",
+ "dev": true,
+ "requires": {
+ "callsites": "^3.0.0"
+ }
+ },
+ "parse-entities": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmmirror.com/parse-entities/download/parse-entities-2.0.0.tgz",
+ "integrity": "sha1-U8brW5MUofTsmfoP33zgHs2gy+g=",
+ "dev": true,
+ "requires": {
+ "character-entities": "^1.0.0",
+ "character-entities-legacy": "^1.0.0",
+ "character-reference-invalid": "^1.0.0",
+ "is-alphanumerical": "^1.0.0",
+ "is-decimal": "^1.0.0",
+ "is-hexadecimal": "^1.0.0"
+ }
+ },
+ "parse-json": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmmirror.com/parse-json/download/parse-json-5.2.0.tgz",
+ "integrity": "sha1-x2/Gbe5UIxyWKyK8yKcs8vmXU80=",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.0.0",
+ "error-ex": "^1.3.1",
+ "json-parse-even-better-errors": "^2.3.0",
+ "lines-and-columns": "^1.1.6"
+ }
+ },
+ "parse-node-version": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmmirror.com/parse-node-version/download/parse-node-version-1.0.1.tgz",
+ "integrity": "sha1-4rXb7eAOf6m8NjYH9TMn6LBzGJs=",
+ "dev": true
+ },
+ "parse-svg-path": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npm.taobao.org/parse-svg-path/download/parse-svg-path-0.1.2.tgz",
+ "integrity": "sha1-en7A0esG+lMlx9PgCbhZoJtdSes="
+ },
+ "parse5": {
+ "version": "5.1.1",
+ "resolved": "https://registry.nlark.com/parse5/download/parse5-5.1.1.tgz",
+ "integrity": "sha1-9o5OW6GFKsLK3AD0VV//bCq7YXg=",
+ "optional": true
+ },
+ "parse5-html-rewriting-stream": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npm.taobao.org/parse5-html-rewriting-stream/download/parse5-html-rewriting-stream-6.0.1.tgz",
+ "integrity": "sha1-3hggVZMXq05FHqctugX939kUSAs=",
+ "dev": true,
+ "requires": {
+ "parse5": "^6.0.1",
+ "parse5-sax-parser": "^6.0.1"
+ },
+ "dependencies": {
+ "parse5": {
+ "version": "6.0.1",
+ "resolved": "https://registry.nlark.com/parse5/download/parse5-6.0.1.tgz",
+ "integrity": "sha1-4aHAhcVps9wIMhGE8Zo5zCf3wws=",
+ "dev": true
+ }
+ }
+ },
+ "parse5-htmlparser2-tree-adapter": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npm.taobao.org/parse5-htmlparser2-tree-adapter/download/parse5-htmlparser2-tree-adapter-6.0.1.tgz",
+ "integrity": "sha1-LN+a2CMyEUA3DU2/XT6Sx8jdxuY=",
+ "dev": true,
+ "requires": {
+ "parse5": "^6.0.1"
+ },
+ "dependencies": {
+ "parse5": {
+ "version": "6.0.1",
+ "resolved": "https://registry.nlark.com/parse5/download/parse5-6.0.1.tgz",
+ "integrity": "sha1-4aHAhcVps9wIMhGE8Zo5zCf3wws=",
+ "dev": true
+ }
+ }
+ },
+ "parse5-sax-parser": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmmirror.com/parse5-sax-parser/download/parse5-sax-parser-6.0.1.tgz",
+ "integrity": "sha1-mLTTZrWyZqfNkLS1iQZmeviC2ro=",
+ "dev": true,
+ "requires": {
+ "parse5": "^6.0.1"
+ },
+ "dependencies": {
+ "parse5": {
+ "version": "6.0.1",
+ "resolved": "https://registry.nlark.com/parse5/download/parse5-6.0.1.tgz",
+ "integrity": "sha1-4aHAhcVps9wIMhGE8Zo5zCf3wws=",
+ "dev": true
+ }
+ }
+ },
+ "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-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": "4.0.0",
+ "resolved": "https://registry.nlark.com/path-exists/download/path-exists-4.0.0.tgz",
+ "integrity": "sha1-UTvb4tO5XXdi6METfvoZXGxhtbM=",
+ "dev": true
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.nlark.com/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.nlark.com/path-is-inside/download/path-is-inside-1.0.2.tgz?cache=0&sync_timestamp=1622604553837&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpath-is-inside%2Fdownload%2Fpath-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=1617971632960&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.7",
+ "resolved": "https://registry.nlark.com/path-parse/download/path-parse-1.0.7.tgz?cache=0&sync_timestamp=1621947783503&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpath-parse%2Fdownload%2Fpath-parse-1.0.7.tgz",
+ "integrity": "sha1-+8EUtgykKzDZ2vWFjkvWi77bZzU=",
+ "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",
+ "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=",
+ "dev": true
+ },
+ "path-type": {
+ "version": "4.0.0",
+ "resolved": "https://registry.nlark.com/path-type/download/path-type-4.0.0.tgz",
+ "integrity": "sha1-hO0BwKe6OAr+CdkKjBgNzZ0DBDs=",
+ "dev": true
+ },
+ "perfect-scrollbar": {
+ "version": "1.5.3",
+ "resolved": "https://registry.npmmirror.com/perfect-scrollbar/download/perfect-scrollbar-1.5.3.tgz?cache=0&sync_timestamp=1635159385205&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fperfect-scrollbar%2Fdownload%2Fperfect-scrollbar-1.5.3.tgz",
+ "integrity": "sha1-292EBx+EYNuf+JMhTtUBWWrZ3Fo="
+ },
+ "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
+ },
+ "picocolors": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmmirror.com/picocolors/download/picocolors-1.0.0.tgz",
+ "integrity": "sha1-y1vcdP8/UYkiNur3nWi8RFZKuBw=",
+ "dev": true
+ },
+ "picomatch": {
+ "version": "2.3.0",
+ "resolved": "https://registry.nlark.com/picomatch/download/picomatch-2.3.0.tgz?cache=0&sync_timestamp=1621648305056&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpicomatch%2Fdownload%2Fpicomatch-2.3.0.tgz",
+ "integrity": "sha1-8fBh3o9qS/AiiS4tEoI0+5gwKXI=",
+ "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.nlark.com/pinkie-promise/download/pinkie-promise-2.0.1.tgz",
+ "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
+ "dev": true,
+ "requires": {
+ "pinkie": "^2.0.0"
+ }
+ },
+ "piscina": {
+ "version": "3.1.0",
+ "resolved": "https://registry.nlark.com/piscina/download/piscina-3.1.0.tgz",
+ "integrity": "sha1-IzNjaGW2y2nFo3C7xJmpjKvPPgQ=",
+ "dev": true,
+ "requires": {
+ "eventemitter-asyncresource": "^1.0.0",
+ "hdr-histogram-js": "^2.0.1",
+ "hdr-histogram-percentiles-obj": "^3.0.0",
+ "nice-napi": "^1.0.2"
+ }
+ },
+ "pkg-dir": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmmirror.com/pkg-dir/download/pkg-dir-4.2.0.tgz?cache=0&sync_timestamp=1633498116014&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fpkg-dir%2Fdownload%2Fpkg-dir-4.2.0.tgz",
+ "integrity": "sha1-8JkTPfft5CLoHR2ESCcO6z5CYfM=",
+ "dev": true,
+ "requires": {
+ "find-up": "^4.0.0"
+ }
+ },
+ "pkg-up": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmmirror.com/pkg-up/download/pkg-up-2.0.0.tgz",
+ "integrity": "sha1-yBmscoBZpGHKscOImivjxJoATX8=",
+ "dev": true,
+ "requires": {
+ "find-up": "^2.1.0"
+ },
+ "dependencies": {
+ "find-up": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmmirror.com/find-up/download/find-up-2.1.0.tgz?cache=0&sync_timestamp=1633618766404&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Ffind-up%2Fdownload%2Ffind-up-2.1.0.tgz",
+ "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
+ "dev": true,
+ "requires": {
+ "locate-path": "^2.0.0"
+ }
+ },
+ "locate-path": {
+ "version": "2.0.0",
+ "resolved": "https://registry.nlark.com/locate-path/download/locate-path-2.0.0.tgz?cache=0&sync_timestamp=1629895724478&other_urls=https%3A%2F%2Fregistry.nlark.com%2Flocate-path%2Fdownload%2Flocate-path-2.0.0.tgz",
+ "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
+ "dev": true,
+ "requires": {
+ "p-locate": "^2.0.0",
+ "path-exists": "^3.0.0"
+ }
+ },
+ "p-limit": {
+ "version": "1.3.0",
+ "resolved": "https://registry.nlark.com/p-limit/download/p-limit-1.3.0.tgz?cache=0&sync_timestamp=1628812766275&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fp-limit%2Fdownload%2Fp-limit-1.3.0.tgz",
+ "integrity": "sha1-uGvV8MJWkJEcdZD8v8IBDVSzzLg=",
+ "dev": true,
+ "requires": {
+ "p-try": "^1.0.0"
+ }
+ },
+ "p-locate": {
+ "version": "2.0.0",
+ "resolved": "https://registry.nlark.com/p-locate/download/p-locate-2.0.0.tgz",
+ "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
+ "dev": true,
+ "requires": {
+ "p-limit": "^1.1.0"
+ }
+ },
+ "p-try": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmmirror.com/p-try/download/p-try-1.0.0.tgz?cache=0&sync_timestamp=1633364462890&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fp-try%2Fdownload%2Fp-try-1.0.0.tgz",
+ "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
+ "dev": true
+ },
+ "path-exists": {
+ "version": "3.0.0",
+ "resolved": "https://registry.nlark.com/path-exists/download/path-exists-3.0.0.tgz",
+ "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
+ "dev": true
+ }
+ }
+ },
+ "please-upgrade-node": {
+ "version": "3.2.0",
+ "resolved": "https://registry.nlark.com/please-upgrade-node/download/please-upgrade-node-3.2.0.tgz",
+ "integrity": "sha1-rt3T+ZTJM+StmLmdmlVu+g4v6UI=",
+ "dev": true,
+ "requires": {
+ "semver-compare": "^1.0.0"
+ }
+ },
+ "point-at-length": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npm.taobao.org/point-at-length/download/point-at-length-1.1.0.tgz",
+ "integrity": "sha1-CtcuvQmA1/WhqxIpbAVfnrazDlc=",
+ "requires": {
+ "abs-svg-path": "~0.1.1",
+ "isarray": "~0.0.1",
+ "parse-svg-path": "~0.1.1"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npm.taobao.org/isarray/download/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
+ }
+ }
+ },
+ "portfinder": {
+ "version": "1.0.28",
+ "resolved": "https://registry.npm.taobao.org/portfinder/download/portfinder-1.0.28.tgz",
+ "integrity": "sha1-Z8RiKFK9U3TdHdkA93n1NGL6x3g=",
+ "dev": true,
+ "requires": {
+ "async": "^2.6.2",
+ "debug": "^3.1.1",
+ "mkdirp": "^0.5.5"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmmirror.com/debug/download/debug-3.2.7.tgz",
+ "integrity": "sha1-clgLfpFF+zm2Z2+cXl+xALk0F5o=",
+ "dev": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "mkdirp": {
+ "version": "0.5.5",
+ "resolved": "https://registry.npmmirror.com/mkdirp/download/mkdirp-0.5.5.tgz",
+ "integrity": "sha1-2Rzv1i0UNsoPQWIOJRKI1CAJne8=",
+ "dev": true,
+ "requires": {
+ "minimist": "^1.2.5"
+ }
+ }
+ }
+ },
+ "posix-character-classes": {
+ "version": "0.1.1",
+ "resolved": "https://registry.nlark.com/posix-character-classes/download/posix-character-classes-0.1.1.tgz",
+ "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "8.3.6",
+ "resolved": "https://registry.npmmirror.com/postcss/download/postcss-8.3.6.tgz",
+ "integrity": "sha1-JzDddql5afN/U7mmCWGXvjEcxOo=",
+ "dev": true,
+ "requires": {
+ "colorette": "^1.2.2",
+ "nanoid": "^3.1.23",
+ "source-map-js": "^0.6.2"
+ },
+ "dependencies": {
+ "source-map-js": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmmirror.com/source-map-js/download/source-map-js-0.6.2.tgz?cache=0&sync_timestamp=1636400772640&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fsource-map-js%2Fdownload%2Fsource-map-js-0.6.2.tgz",
+ "integrity": "sha1-C7XeYxtBz72mz7qL0FqA79/SOF4=",
+ "dev": true
+ }
+ }
+ },
+ "postcss-attribute-case-insensitive": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npm.taobao.org/postcss-attribute-case-insensitive/download/postcss-attribute-case-insensitive-4.0.2.tgz?cache=0&sync_timestamp=1600194210360&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-attribute-case-insensitive%2Fdownload%2Fpostcss-attribute-case-insensitive-4.0.2.tgz",
+ "integrity": "sha1-2T5GtQRYnpSscnewRjImxoBBqIA=",
+ "dev": true,
+ "requires": {
+ "postcss": "^7.0.2",
+ "postcss-selector-parser": "^6.0.2"
+ },
+ "dependencies": {
+ "picocolors": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmmirror.com/picocolors/download/picocolors-0.2.1.tgz",
+ "integrity": "sha1-VwZw95NkaFHRuhNZlpYqutWHhZ8=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "7.0.39",
+ "resolved": "https://registry.npmmirror.com/postcss/download/postcss-7.0.39.tgz",
+ "integrity": "sha1-liQ3XZZWMOLh8sAqk1yCpZy0gwk=",
+ "dev": true,
+ "requires": {
+ "picocolors": "^0.2.1",
+ "source-map": "^0.6.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
+ }
+ }
+ },
+ "postcss-calc": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npm.taobao.org/postcss-calc/download/postcss-calc-8.0.0.tgz?cache=0&sync_timestamp=1609689191682&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-calc%2Fdownload%2Fpostcss-calc-8.0.0.tgz",
+ "integrity": "sha1-oFuHqs0TJ0Cl2wlGKjYSRT5d+Qo=",
+ "dev": true,
+ "requires": {
+ "postcss-selector-parser": "^6.0.2",
+ "postcss-value-parser": "^4.0.2"
+ }
+ },
+ "postcss-color-functional-notation": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmmirror.com/postcss-color-functional-notation/download/postcss-color-functional-notation-2.0.1.tgz",
+ "integrity": "sha1-Xv03qI+6vrAKKWbR5T2Yztk/dOA=",
+ "dev": true,
+ "requires": {
+ "postcss": "^7.0.2",
+ "postcss-values-parser": "^2.0.0"
+ },
+ "dependencies": {
+ "picocolors": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmmirror.com/picocolors/download/picocolors-0.2.1.tgz",
+ "integrity": "sha1-VwZw95NkaFHRuhNZlpYqutWHhZ8=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "7.0.39",
+ "resolved": "https://registry.npmmirror.com/postcss/download/postcss-7.0.39.tgz",
+ "integrity": "sha1-liQ3XZZWMOLh8sAqk1yCpZy0gwk=",
+ "dev": true,
+ "requires": {
+ "picocolors": "^0.2.1",
+ "source-map": "^0.6.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
+ }
+ }
+ },
+ "postcss-color-gray": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npm.taobao.org/postcss-color-gray/download/postcss-color-gray-5.0.0.tgz",
+ "integrity": "sha1-Uyox65CfjaiYzv/ilv3B+GS+hUc=",
+ "dev": true,
+ "requires": {
+ "@csstools/convert-colors": "^1.4.0",
+ "postcss": "^7.0.5",
+ "postcss-values-parser": "^2.0.0"
+ },
+ "dependencies": {
+ "picocolors": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmmirror.com/picocolors/download/picocolors-0.2.1.tgz",
+ "integrity": "sha1-VwZw95NkaFHRuhNZlpYqutWHhZ8=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "7.0.39",
+ "resolved": "https://registry.npmmirror.com/postcss/download/postcss-7.0.39.tgz",
+ "integrity": "sha1-liQ3XZZWMOLh8sAqk1yCpZy0gwk=",
+ "dev": true,
+ "requires": {
+ "picocolors": "^0.2.1",
+ "source-map": "^0.6.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
+ }
+ }
+ },
+ "postcss-color-hex-alpha": {
+ "version": "5.0.3",
+ "resolved": "https://registry.npmmirror.com/postcss-color-hex-alpha/download/postcss-color-hex-alpha-5.0.3.tgz?cache=0&sync_timestamp=1632320902580&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fpostcss-color-hex-alpha%2Fdownload%2Fpostcss-color-hex-alpha-5.0.3.tgz",
+ "integrity": "sha1-qNnKTDnUl8lmHjdLnFGJnvD4c4g=",
+ "dev": true,
+ "requires": {
+ "postcss": "^7.0.14",
+ "postcss-values-parser": "^2.0.1"
+ },
+ "dependencies": {
+ "picocolors": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmmirror.com/picocolors/download/picocolors-0.2.1.tgz",
+ "integrity": "sha1-VwZw95NkaFHRuhNZlpYqutWHhZ8=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "7.0.39",
+ "resolved": "https://registry.npmmirror.com/postcss/download/postcss-7.0.39.tgz",
+ "integrity": "sha1-liQ3XZZWMOLh8sAqk1yCpZy0gwk=",
+ "dev": true,
+ "requires": {
+ "picocolors": "^0.2.1",
+ "source-map": "^0.6.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
+ }
+ }
+ },
+ "postcss-color-mod-function": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npm.taobao.org/postcss-color-mod-function/download/postcss-color-mod-function-3.0.3.tgz",
+ "integrity": "sha1-gWuhRawRzDy2uqkFp1pJ+QPk0x0=",
+ "dev": true,
+ "requires": {
+ "@csstools/convert-colors": "^1.4.0",
+ "postcss": "^7.0.2",
+ "postcss-values-parser": "^2.0.0"
+ },
+ "dependencies": {
+ "picocolors": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmmirror.com/picocolors/download/picocolors-0.2.1.tgz",
+ "integrity": "sha1-VwZw95NkaFHRuhNZlpYqutWHhZ8=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "7.0.39",
+ "resolved": "https://registry.npmmirror.com/postcss/download/postcss-7.0.39.tgz",
+ "integrity": "sha1-liQ3XZZWMOLh8sAqk1yCpZy0gwk=",
+ "dev": true,
+ "requires": {
+ "picocolors": "^0.2.1",
+ "source-map": "^0.6.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
+ }
+ }
+ },
+ "postcss-color-rebeccapurple": {
+ "version": "4.0.1",
+ "resolved": "https://registry.nlark.com/postcss-color-rebeccapurple/download/postcss-color-rebeccapurple-4.0.1.tgz",
+ "integrity": "sha1-x6ib6HK7dORbHjAiv+V0iCPm3nc=",
+ "dev": true,
+ "requires": {
+ "postcss": "^7.0.2",
+ "postcss-values-parser": "^2.0.0"
+ },
+ "dependencies": {
+ "picocolors": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmmirror.com/picocolors/download/picocolors-0.2.1.tgz",
+ "integrity": "sha1-VwZw95NkaFHRuhNZlpYqutWHhZ8=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "7.0.39",
+ "resolved": "https://registry.npmmirror.com/postcss/download/postcss-7.0.39.tgz",
+ "integrity": "sha1-liQ3XZZWMOLh8sAqk1yCpZy0gwk=",
+ "dev": true,
+ "requires": {
+ "picocolors": "^0.2.1",
+ "source-map": "^0.6.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
+ }
+ }
+ },
+ "postcss-colormin": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmmirror.com/postcss-colormin/download/postcss-colormin-5.2.1.tgz",
+ "integrity": "sha1-bkRKgG/TxXiCfbrQInYt8ZM0QU0=",
+ "dev": true,
+ "requires": {
+ "browserslist": "^4.16.6",
+ "caniuse-api": "^3.0.0",
+ "colord": "^2.9.1",
+ "postcss-value-parser": "^4.1.0"
+ }
+ },
+ "postcss-convert-values": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmmirror.com/postcss-convert-values/download/postcss-convert-values-5.0.2.tgz?cache=0&sync_timestamp=1635857664165&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fpostcss-convert-values%2Fdownload%2Fpostcss-convert-values-5.0.2.tgz",
+ "integrity": "sha1-h5uEncNnfH1ryUtqLBo/CAh5gFk=",
+ "dev": true,
+ "requires": {
+ "postcss-value-parser": "^4.1.0"
+ }
+ },
+ "postcss-custom-media": {
+ "version": "7.0.8",
+ "resolved": "https://registry.nlark.com/postcss-custom-media/download/postcss-custom-media-7.0.8.tgz",
+ "integrity": "sha1-//0T/+/61zYhvl84cHaiiwApTgw=",
+ "dev": true,
+ "requires": {
+ "postcss": "^7.0.14"
+ },
+ "dependencies": {
+ "picocolors": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmmirror.com/picocolors/download/picocolors-0.2.1.tgz",
+ "integrity": "sha1-VwZw95NkaFHRuhNZlpYqutWHhZ8=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "7.0.39",
+ "resolved": "https://registry.npmmirror.com/postcss/download/postcss-7.0.39.tgz",
+ "integrity": "sha1-liQ3XZZWMOLh8sAqk1yCpZy0gwk=",
+ "dev": true,
+ "requires": {
+ "picocolors": "^0.2.1",
+ "source-map": "^0.6.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
+ }
+ }
+ },
+ "postcss-custom-properties": {
+ "version": "8.0.11",
+ "resolved": "https://registry.nlark.com/postcss-custom-properties/download/postcss-custom-properties-8.0.11.tgz?cache=0&sync_timestamp=1631899559309&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpostcss-custom-properties%2Fdownload%2Fpostcss-custom-properties-8.0.11.tgz",
+ "integrity": "sha1-LWF3LW6S8i9eDVJgLfj65G+jDZc=",
+ "dev": true,
+ "requires": {
+ "postcss": "^7.0.17",
+ "postcss-values-parser": "^2.0.1"
+ },
+ "dependencies": {
+ "picocolors": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmmirror.com/picocolors/download/picocolors-0.2.1.tgz",
+ "integrity": "sha1-VwZw95NkaFHRuhNZlpYqutWHhZ8=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "7.0.39",
+ "resolved": "https://registry.npmmirror.com/postcss/download/postcss-7.0.39.tgz",
+ "integrity": "sha1-liQ3XZZWMOLh8sAqk1yCpZy0gwk=",
+ "dev": true,
+ "requires": {
+ "picocolors": "^0.2.1",
+ "source-map": "^0.6.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
+ }
+ }
+ },
+ "postcss-custom-selectors": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npm.taobao.org/postcss-custom-selectors/download/postcss-custom-selectors-5.1.2.tgz?cache=0&sync_timestamp=1610469257838&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-custom-selectors%2Fdownload%2Fpostcss-custom-selectors-5.1.2.tgz",
+ "integrity": "sha1-ZIWMbrLs/y+0HQsoyd17PbTef7o=",
+ "dev": true,
+ "requires": {
+ "postcss": "^7.0.2",
+ "postcss-selector-parser": "^5.0.0-rc.3"
+ },
+ "dependencies": {
+ "cssesc": {
+ "version": "2.0.0",
+ "resolved": "https://registry.nlark.com/cssesc/download/cssesc-2.0.0.tgz",
+ "integrity": "sha1-OxO9G7HLNuG8taTc0n9UxdyzVwM=",
+ "dev": true
+ },
+ "picocolors": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmmirror.com/picocolors/download/picocolors-0.2.1.tgz",
+ "integrity": "sha1-VwZw95NkaFHRuhNZlpYqutWHhZ8=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "7.0.39",
+ "resolved": "https://registry.npmmirror.com/postcss/download/postcss-7.0.39.tgz",
+ "integrity": "sha1-liQ3XZZWMOLh8sAqk1yCpZy0gwk=",
+ "dev": true,
+ "requires": {
+ "picocolors": "^0.2.1",
+ "source-map": "^0.6.1"
+ }
+ },
+ "postcss-selector-parser": {
+ "version": "5.0.0",
+ "resolved": "https://registry.nlark.com/postcss-selector-parser/download/postcss-selector-parser-5.0.0.tgz?cache=0&sync_timestamp=1620752939806&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpostcss-selector-parser%2Fdownload%2Fpostcss-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"
+ }
+ },
+ "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
+ }
+ }
+ },
+ "postcss-dir-pseudo-class": {
+ "version": "5.0.0",
+ "resolved": "https://registry.nlark.com/postcss-dir-pseudo-class/download/postcss-dir-pseudo-class-5.0.0.tgz?cache=0&sync_timestamp=1631886211698&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpostcss-dir-pseudo-class%2Fdownload%2Fpostcss-dir-pseudo-class-5.0.0.tgz",
+ "integrity": "sha1-bjpBd9Dts6vMhf22+7HCbauuq6I=",
+ "dev": true,
+ "requires": {
+ "postcss": "^7.0.2",
+ "postcss-selector-parser": "^5.0.0-rc.3"
+ },
+ "dependencies": {
+ "cssesc": {
+ "version": "2.0.0",
+ "resolved": "https://registry.nlark.com/cssesc/download/cssesc-2.0.0.tgz",
+ "integrity": "sha1-OxO9G7HLNuG8taTc0n9UxdyzVwM=",
+ "dev": true
+ },
+ "picocolors": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmmirror.com/picocolors/download/picocolors-0.2.1.tgz",
+ "integrity": "sha1-VwZw95NkaFHRuhNZlpYqutWHhZ8=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "7.0.39",
+ "resolved": "https://registry.npmmirror.com/postcss/download/postcss-7.0.39.tgz",
+ "integrity": "sha1-liQ3XZZWMOLh8sAqk1yCpZy0gwk=",
+ "dev": true,
+ "requires": {
+ "picocolors": "^0.2.1",
+ "source-map": "^0.6.1"
+ }
+ },
+ "postcss-selector-parser": {
+ "version": "5.0.0",
+ "resolved": "https://registry.nlark.com/postcss-selector-parser/download/postcss-selector-parser-5.0.0.tgz?cache=0&sync_timestamp=1620752939806&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpostcss-selector-parser%2Fdownload%2Fpostcss-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"
+ }
+ },
+ "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
+ }
+ }
+ },
+ "postcss-discard-comments": {
+ "version": "5.0.1",
+ "resolved": "https://registry.nlark.com/postcss-discard-comments/download/postcss-discard-comments-5.0.1.tgz",
+ "integrity": "sha1-nq5LdHz3YNMfJEfCfwYZ1XGJAf4=",
+ "dev": true
+ },
+ "postcss-discard-duplicates": {
+ "version": "5.0.1",
+ "resolved": "https://registry.nlark.com/postcss-discard-duplicates/download/postcss-discard-duplicates-5.0.1.tgz",
+ "integrity": "sha1-aPfMZFj+a6suRsn1WuUoafaA5m0=",
+ "dev": true
+ },
+ "postcss-discard-empty": {
+ "version": "5.0.1",
+ "resolved": "https://registry.nlark.com/postcss-discard-empty/download/postcss-discard-empty-5.0.1.tgz",
+ "integrity": "sha1-7hNsOeJ9XS7U2g7l7QK8ip+L9tg=",
+ "dev": true
+ },
+ "postcss-discard-overridden": {
+ "version": "5.0.1",
+ "resolved": "https://registry.nlark.com/postcss-discard-overridden/download/postcss-discard-overridden-5.0.1.tgz",
+ "integrity": "sha1-RUtB9wcwC5gQmnUAXKSrD/J0OsY=",
+ "dev": true
+ },
+ "postcss-double-position-gradients": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmmirror.com/postcss-double-position-gradients/download/postcss-double-position-gradients-1.0.0.tgz",
+ "integrity": "sha1-/JJ9Uv3ciWyzooEuvF3xR+EQUi4=",
+ "dev": true,
+ "requires": {
+ "postcss": "^7.0.5",
+ "postcss-values-parser": "^2.0.0"
+ },
+ "dependencies": {
+ "picocolors": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmmirror.com/picocolors/download/picocolors-0.2.1.tgz",
+ "integrity": "sha1-VwZw95NkaFHRuhNZlpYqutWHhZ8=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "7.0.39",
+ "resolved": "https://registry.npmmirror.com/postcss/download/postcss-7.0.39.tgz",
+ "integrity": "sha1-liQ3XZZWMOLh8sAqk1yCpZy0gwk=",
+ "dev": true,
+ "requires": {
+ "picocolors": "^0.2.1",
+ "source-map": "^0.6.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
+ }
+ }
+ },
+ "postcss-env-function": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmmirror.com/postcss-env-function/download/postcss-env-function-2.0.2.tgz?cache=0&sync_timestamp=1637256010098&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fpostcss-env-function%2Fdownload%2Fpostcss-env-function-2.0.2.tgz",
+ "integrity": "sha1-Dz49PFfwlKksK69LYkHwsNpTZdc=",
+ "dev": true,
+ "requires": {
+ "postcss": "^7.0.2",
+ "postcss-values-parser": "^2.0.0"
+ },
+ "dependencies": {
+ "picocolors": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmmirror.com/picocolors/download/picocolors-0.2.1.tgz",
+ "integrity": "sha1-VwZw95NkaFHRuhNZlpYqutWHhZ8=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "7.0.39",
+ "resolved": "https://registry.npmmirror.com/postcss/download/postcss-7.0.39.tgz",
+ "integrity": "sha1-liQ3XZZWMOLh8sAqk1yCpZy0gwk=",
+ "dev": true,
+ "requires": {
+ "picocolors": "^0.2.1",
+ "source-map": "^0.6.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
+ }
+ }
+ },
+ "postcss-focus-visible": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmmirror.com/postcss-focus-visible/download/postcss-focus-visible-4.0.0.tgz?cache=0&sync_timestamp=1632317515654&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fpostcss-focus-visible%2Fdownload%2Fpostcss-focus-visible-4.0.0.tgz",
+ "integrity": "sha1-R30QcROt5gJLFBKDF63ivR4XBG4=",
+ "dev": true,
+ "requires": {
+ "postcss": "^7.0.2"
+ },
+ "dependencies": {
+ "picocolors": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmmirror.com/picocolors/download/picocolors-0.2.1.tgz",
+ "integrity": "sha1-VwZw95NkaFHRuhNZlpYqutWHhZ8=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "7.0.39",
+ "resolved": "https://registry.npmmirror.com/postcss/download/postcss-7.0.39.tgz",
+ "integrity": "sha1-liQ3XZZWMOLh8sAqk1yCpZy0gwk=",
+ "dev": true,
+ "requires": {
+ "picocolors": "^0.2.1",
+ "source-map": "^0.6.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
+ }
+ }
+ },
+ "postcss-focus-within": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmmirror.com/postcss-focus-within/download/postcss-focus-within-3.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fpostcss-focus-within%2Fdownload%2Fpostcss-focus-within-3.0.0.tgz",
+ "integrity": "sha1-djuHiFls7puHTJmSAc3egGWe9oA=",
+ "dev": true,
+ "requires": {
+ "postcss": "^7.0.2"
+ },
+ "dependencies": {
+ "picocolors": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmmirror.com/picocolors/download/picocolors-0.2.1.tgz",
+ "integrity": "sha1-VwZw95NkaFHRuhNZlpYqutWHhZ8=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "7.0.39",
+ "resolved": "https://registry.npmmirror.com/postcss/download/postcss-7.0.39.tgz",
+ "integrity": "sha1-liQ3XZZWMOLh8sAqk1yCpZy0gwk=",
+ "dev": true,
+ "requires": {
+ "picocolors": "^0.2.1",
+ "source-map": "^0.6.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
+ }
+ }
+ },
+ "postcss-font-variant": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npm.taobao.org/postcss-font-variant/download/postcss-font-variant-4.0.1.tgz",
+ "integrity": "sha1-QtTAqzCJT2D5ixdWHrXAMh9QJkE=",
+ "dev": true,
+ "requires": {
+ "postcss": "^7.0.2"
+ },
+ "dependencies": {
+ "picocolors": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmmirror.com/picocolors/download/picocolors-0.2.1.tgz",
+ "integrity": "sha1-VwZw95NkaFHRuhNZlpYqutWHhZ8=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "7.0.39",
+ "resolved": "https://registry.npmmirror.com/postcss/download/postcss-7.0.39.tgz",
+ "integrity": "sha1-liQ3XZZWMOLh8sAqk1yCpZy0gwk=",
+ "dev": true,
+ "requires": {
+ "picocolors": "^0.2.1",
+ "source-map": "^0.6.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
+ }
+ }
+ },
+ "postcss-gap-properties": {
+ "version": "2.0.0",
+ "resolved": "https://registry.nlark.com/postcss-gap-properties/download/postcss-gap-properties-2.0.0.tgz?cache=0&sync_timestamp=1631886207918&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpostcss-gap-properties%2Fdownload%2Fpostcss-gap-properties-2.0.0.tgz",
+ "integrity": "sha1-QxwZKrPtlqPD0J8v9hWWD5AsFxU=",
+ "dev": true,
+ "requires": {
+ "postcss": "^7.0.2"
+ },
+ "dependencies": {
+ "picocolors": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmmirror.com/picocolors/download/picocolors-0.2.1.tgz",
+ "integrity": "sha1-VwZw95NkaFHRuhNZlpYqutWHhZ8=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "7.0.39",
+ "resolved": "https://registry.npmmirror.com/postcss/download/postcss-7.0.39.tgz",
+ "integrity": "sha1-liQ3XZZWMOLh8sAqk1yCpZy0gwk=",
+ "dev": true,
+ "requires": {
+ "picocolors": "^0.2.1",
+ "source-map": "^0.6.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
+ }
+ }
+ },
+ "postcss-html": {
+ "version": "0.36.0",
+ "resolved": "https://registry.npmmirror.com/postcss-html/download/postcss-html-0.36.0.tgz",
+ "integrity": "sha1-tAkT+U6qzCRT/TChMnrW7h+IsgQ=",
+ "dev": true,
+ "requires": {
+ "htmlparser2": "^3.10.0"
+ }
+ },
+ "postcss-image-set-function": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmmirror.com/postcss-image-set-function/download/postcss-image-set-function-3.0.1.tgz",
+ "integrity": "sha1-KJIKLymUW+1MMZjX32SW1BDT8og=",
+ "dev": true,
+ "requires": {
+ "postcss": "^7.0.2",
+ "postcss-values-parser": "^2.0.0"
+ },
+ "dependencies": {
+ "picocolors": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmmirror.com/picocolors/download/picocolors-0.2.1.tgz",
+ "integrity": "sha1-VwZw95NkaFHRuhNZlpYqutWHhZ8=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "7.0.39",
+ "resolved": "https://registry.npmmirror.com/postcss/download/postcss-7.0.39.tgz",
+ "integrity": "sha1-liQ3XZZWMOLh8sAqk1yCpZy0gwk=",
+ "dev": true,
+ "requires": {
+ "picocolors": "^0.2.1",
+ "source-map": "^0.6.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
+ }
+ }
+ },
+ "postcss-import": {
+ "version": "14.0.2",
+ "resolved": "https://registry.nlark.com/postcss-import/download/postcss-import-14.0.2.tgz",
+ "integrity": "sha1-YO/3fmvpLntn/kaex5fZQkyuGqE=",
+ "dev": true,
+ "requires": {
+ "postcss-value-parser": "^4.0.0",
+ "read-cache": "^1.0.0",
+ "resolve": "^1.1.7"
+ }
+ },
+ "postcss-initial": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npm.taobao.org/postcss-initial/download/postcss-initial-3.0.4.tgz",
+ "integrity": "sha1-nTIGmhBTH+Lsr6C2rHUO4Lx+/FM=",
+ "dev": true,
+ "requires": {
+ "postcss": "^7.0.2"
+ },
+ "dependencies": {
+ "picocolors": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmmirror.com/picocolors/download/picocolors-0.2.1.tgz",
+ "integrity": "sha1-VwZw95NkaFHRuhNZlpYqutWHhZ8=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "7.0.39",
+ "resolved": "https://registry.npmmirror.com/postcss/download/postcss-7.0.39.tgz",
+ "integrity": "sha1-liQ3XZZWMOLh8sAqk1yCpZy0gwk=",
+ "dev": true,
+ "requires": {
+ "picocolors": "^0.2.1",
+ "source-map": "^0.6.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
+ }
+ }
+ },
+ "postcss-jsx": {
+ "version": "0.36.4",
+ "resolved": "https://registry.npm.taobao.org/postcss-jsx/download/postcss-jsx-0.36.4.tgz",
+ "integrity": "sha1-N6aPMAo55XSNVH8Zp0ezJXJAvVA=",
+ "dev": true,
+ "requires": {
+ "@babel/core": ">=7.2.2"
+ }
+ },
+ "postcss-lab-function": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmmirror.com/postcss-lab-function/download/postcss-lab-function-2.0.1.tgz?cache=0&sync_timestamp=1637260919901&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fpostcss-lab-function%2Fdownload%2Fpostcss-lab-function-2.0.1.tgz",
+ "integrity": "sha1-u1GmhWzRIomrSuINseOCHvE9fS4=",
+ "dev": true,
+ "requires": {
+ "@csstools/convert-colors": "^1.4.0",
+ "postcss": "^7.0.2",
+ "postcss-values-parser": "^2.0.0"
+ },
+ "dependencies": {
+ "picocolors": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmmirror.com/picocolors/download/picocolors-0.2.1.tgz",
+ "integrity": "sha1-VwZw95NkaFHRuhNZlpYqutWHhZ8=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "7.0.39",
+ "resolved": "https://registry.npmmirror.com/postcss/download/postcss-7.0.39.tgz",
+ "integrity": "sha1-liQ3XZZWMOLh8sAqk1yCpZy0gwk=",
+ "dev": true,
+ "requires": {
+ "picocolors": "^0.2.1",
+ "source-map": "^0.6.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
+ }
+ }
+ },
+ "postcss-less": {
+ "version": "3.1.4",
+ "resolved": "https://registry.nlark.com/postcss-less/download/postcss-less-3.1.4.tgz?cache=0&sync_timestamp=1627347193371&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpostcss-less%2Fdownload%2Fpostcss-less-3.1.4.tgz",
+ "integrity": "sha1-Np9YZCtZKO+Jj/vBpuk8lYMExa0=",
+ "dev": true,
+ "requires": {
+ "postcss": "^7.0.14"
+ },
+ "dependencies": {
+ "picocolors": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmmirror.com/picocolors/download/picocolors-0.2.1.tgz",
+ "integrity": "sha1-VwZw95NkaFHRuhNZlpYqutWHhZ8=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "7.0.39",
+ "resolved": "https://registry.npmmirror.com/postcss/download/postcss-7.0.39.tgz",
+ "integrity": "sha1-liQ3XZZWMOLh8sAqk1yCpZy0gwk=",
+ "dev": true,
+ "requires": {
+ "picocolors": "^0.2.1",
+ "source-map": "^0.6.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
+ }
+ }
+ },
+ "postcss-loader": {
+ "version": "6.1.1",
+ "resolved": "https://registry.npmmirror.com/postcss-loader/download/postcss-loader-6.1.1.tgz",
+ "integrity": "sha1-WN0KOszZvIfMUu/3UkTbV40RMBo=",
+ "dev": true,
+ "requires": {
+ "cosmiconfig": "^7.0.0",
+ "klona": "^2.0.4",
+ "semver": "^7.3.5"
+ }
+ },
+ "postcss-logical": {
+ "version": "3.0.0",
+ "resolved": "https://registry.nlark.com/postcss-logical/download/postcss-logical-3.0.0.tgz",
+ "integrity": "sha1-JJXQ+LgunyYnJfdflAGzTntF1bU=",
+ "dev": true,
+ "requires": {
+ "postcss": "^7.0.2"
+ },
+ "dependencies": {
+ "picocolors": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmmirror.com/picocolors/download/picocolors-0.2.1.tgz",
+ "integrity": "sha1-VwZw95NkaFHRuhNZlpYqutWHhZ8=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "7.0.39",
+ "resolved": "https://registry.npmmirror.com/postcss/download/postcss-7.0.39.tgz",
+ "integrity": "sha1-liQ3XZZWMOLh8sAqk1yCpZy0gwk=",
+ "dev": true,
+ "requires": {
+ "picocolors": "^0.2.1",
+ "source-map": "^0.6.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
+ }
+ }
+ },
+ "postcss-markdown": {
+ "version": "0.36.0",
+ "resolved": "https://registry.npmmirror.com/postcss-markdown/download/postcss-markdown-0.36.0.tgz",
+ "integrity": "sha1-fyKEmuDj2xiCC3sNXngz8TpEdWA=",
+ "dev": true,
+ "requires": {
+ "remark": "^10.0.1",
+ "unist-util-find-all-after": "^1.0.2"
+ },
+ "dependencies": {
+ "is-buffer": {
+ "version": "2.0.5",
+ "resolved": "https://registry.nlark.com/is-buffer/download/is-buffer-2.0.5.tgz",
+ "integrity": "sha1-68JS5ADSL/jXf6CYiIIaJKZYwZE=",
+ "dev": true
+ },
+ "parse-entities": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmmirror.com/parse-entities/download/parse-entities-1.2.2.tgz",
+ "integrity": "sha1-wxvw9lO2ZhNU+Jc1WcuG3R1e31A=",
+ "dev": true,
+ "requires": {
+ "character-entities": "^1.0.0",
+ "character-entities-legacy": "^1.0.0",
+ "character-reference-invalid": "^1.0.0",
+ "is-alphanumerical": "^1.0.0",
+ "is-decimal": "^1.0.0",
+ "is-hexadecimal": "^1.0.0"
+ }
+ },
+ "remark": {
+ "version": "10.0.1",
+ "resolved": "https://registry.npmmirror.com/remark/download/remark-10.0.1.tgz?cache=0&sync_timestamp=1637258856657&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fremark%2Fdownload%2Fremark-10.0.1.tgz",
+ "integrity": "sha1-MFgHbcQXgb9QXYl4wpFIX+R2Z98=",
+ "dev": true,
+ "requires": {
+ "remark-parse": "^6.0.0",
+ "remark-stringify": "^6.0.0",
+ "unified": "^7.0.0"
+ }
+ },
+ "remark-parse": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmmirror.com/remark-parse/download/remark-parse-6.0.3.tgz",
+ "integrity": "sha1-yZExBSgJ2kghCEE/h7Duf1IYCjo=",
+ "dev": true,
+ "requires": {
+ "collapse-white-space": "^1.0.2",
+ "is-alphabetical": "^1.0.0",
+ "is-decimal": "^1.0.0",
+ "is-whitespace-character": "^1.0.0",
+ "is-word-character": "^1.0.0",
+ "markdown-escapes": "^1.0.0",
+ "parse-entities": "^1.1.0",
+ "repeat-string": "^1.5.4",
+ "state-toggle": "^1.0.0",
+ "trim": "0.0.1",
+ "trim-trailing-lines": "^1.0.0",
+ "unherit": "^1.0.4",
+ "unist-util-remove-position": "^1.0.0",
+ "vfile-location": "^2.0.0",
+ "xtend": "^4.0.1"
+ }
+ },
+ "remark-stringify": {
+ "version": "6.0.4",
+ "resolved": "https://registry.npmmirror.com/remark-stringify/download/remark-stringify-6.0.4.tgz",
+ "integrity": "sha1-FqwinU0VkySQGGY8e93yiq/E4Ig=",
+ "dev": true,
+ "requires": {
+ "ccount": "^1.0.0",
+ "is-alphanumeric": "^1.0.0",
+ "is-decimal": "^1.0.0",
+ "is-whitespace-character": "^1.0.0",
+ "longest-streak": "^2.0.1",
+ "markdown-escapes": "^1.0.0",
+ "markdown-table": "^1.1.0",
+ "mdast-util-compact": "^1.0.0",
+ "parse-entities": "^1.0.2",
+ "repeat-string": "^1.5.4",
+ "state-toggle": "^1.0.0",
+ "stringify-entities": "^1.0.1",
+ "unherit": "^1.0.4",
+ "xtend": "^4.0.1"
+ }
+ },
+ "unified": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmmirror.com/unified/download/unified-7.1.0.tgz",
+ "integrity": "sha1-UDLxwe4zZL0J2hLif91KdVPHvhM=",
+ "dev": true,
+ "requires": {
+ "@types/unist": "^2.0.0",
+ "@types/vfile": "^3.0.0",
+ "bail": "^1.0.0",
+ "extend": "^3.0.0",
+ "is-plain-obj": "^1.1.0",
+ "trough": "^1.0.0",
+ "vfile": "^3.0.0",
+ "x-is-string": "^0.1.0"
+ }
+ },
+ "unist-util-find-all-after": {
+ "version": "1.0.5",
+ "resolved": "https://registry.nlark.com/unist-util-find-all-after/download/unist-util-find-all-after-1.0.5.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Funist-util-find-all-after%2Fdownload%2Funist-util-find-all-after-1.0.5.tgz",
+ "integrity": "sha1-V1GoYIg09B0RetnFd3cMXy8bKJk=",
+ "dev": true,
+ "requires": {
+ "unist-util-is": "^3.0.0"
+ }
+ },
+ "unist-util-is": {
+ "version": "3.0.0",
+ "resolved": "https://registry.nlark.com/unist-util-is/download/unist-util-is-3.0.0.tgz?cache=0&sync_timestamp=1626874922677&other_urls=https%3A%2F%2Fregistry.nlark.com%2Funist-util-is%2Fdownload%2Funist-util-is-3.0.0.tgz",
+ "integrity": "sha1-2ehDgcJGjoJinkpb6dfQWi3TJM0=",
+ "dev": true
+ },
+ "unist-util-stringify-position": {
+ "version": "1.1.2",
+ "resolved": "https://registry.nlark.com/unist-util-stringify-position/download/unist-util-stringify-position-1.1.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Funist-util-stringify-position%2Fdownload%2Funist-util-stringify-position-1.1.2.tgz",
+ "integrity": "sha1-Pzf881EnncvKdICrWIm7ioMu4cY=",
+ "dev": true
+ },
+ "vfile": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmmirror.com/vfile/download/vfile-3.0.1.tgz",
+ "integrity": "sha1-RzMdKr4ygkJPSku2rNIKRMQSGAM=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^2.0.0",
+ "replace-ext": "1.0.0",
+ "unist-util-stringify-position": "^1.0.0",
+ "vfile-message": "^1.0.0"
+ }
+ },
+ "vfile-message": {
+ "version": "1.1.1",
+ "resolved": "https://registry.nlark.com/vfile-message/download/vfile-message-1.1.1.tgz?cache=0&sync_timestamp=1628780833868&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fvfile-message%2Fdownload%2Fvfile-message-1.1.1.tgz",
+ "integrity": "sha1-WDOuB4od+i2W6WR4hs0ymTqzE+E=",
+ "dev": true,
+ "requires": {
+ "unist-util-stringify-position": "^1.1.1"
+ }
+ }
+ }
+ },
+ "postcss-media-minmax": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npm.taobao.org/postcss-media-minmax/download/postcss-media-minmax-4.0.0.tgz?cache=0&sync_timestamp=1610466264580&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-media-minmax%2Fdownload%2Fpostcss-media-minmax-4.0.0.tgz",
+ "integrity": "sha1-t1u2y8IXyKxJQz4S8iBIgUpPXtU=",
+ "dev": true,
+ "requires": {
+ "postcss": "^7.0.2"
+ },
+ "dependencies": {
+ "picocolors": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmmirror.com/picocolors/download/picocolors-0.2.1.tgz",
+ "integrity": "sha1-VwZw95NkaFHRuhNZlpYqutWHhZ8=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "7.0.39",
+ "resolved": "https://registry.npmmirror.com/postcss/download/postcss-7.0.39.tgz",
+ "integrity": "sha1-liQ3XZZWMOLh8sAqk1yCpZy0gwk=",
+ "dev": true,
+ "requires": {
+ "picocolors": "^0.2.1",
+ "source-map": "^0.6.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
+ }
+ }
+ },
+ "postcss-media-query-parser": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npm.taobao.org/postcss-media-query-parser/download/postcss-media-query-parser-0.2.3.tgz",
+ "integrity": "sha1-J7Ocb02U+Bsac7j3Y1HGCeXO8kQ=",
+ "dev": true
+ },
+ "postcss-merge-longhand": {
+ "version": "5.0.4",
+ "resolved": "https://registry.npmmirror.com/postcss-merge-longhand/download/postcss-merge-longhand-5.0.4.tgz?cache=0&sync_timestamp=1637084982494&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fpostcss-merge-longhand%2Fdownload%2Fpostcss-merge-longhand-5.0.4.tgz",
+ "integrity": "sha512-2lZrOVD+d81aoYkZDpWu6+3dTAAGkCKbV5DoRhnIR7KOULVrI/R7bcMjhrH9KTRy6iiHKqmtG+n/MMj1WmqHFw==",
+ "dev": true,
+ "requires": {
+ "postcss-value-parser": "^4.1.0",
+ "stylehacks": "^5.0.1"
+ }
+ },
+ "postcss-merge-rules": {
+ "version": "5.0.3",
+ "resolved": "https://registry.npmmirror.com/postcss-merge-rules/download/postcss-merge-rules-5.0.3.tgz?cache=0&sync_timestamp=1637085799347&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fpostcss-merge-rules%2Fdownload%2Fpostcss-merge-rules-5.0.3.tgz",
+ "integrity": "sha512-cEKTMEbWazVa5NXd8deLdCnXl+6cYG7m2am+1HzqH0EnTdy8fRysatkaXb2dEnR+fdaDxTvuZ5zoBdv6efF6hg==",
+ "dev": true,
+ "requires": {
+ "browserslist": "^4.16.6",
+ "caniuse-api": "^3.0.0",
+ "cssnano-utils": "^2.0.1",
+ "postcss-selector-parser": "^6.0.5"
+ }
+ },
+ "postcss-minify-font-values": {
+ "version": "5.0.1",
+ "resolved": "https://registry.nlark.com/postcss-minify-font-values/download/postcss-minify-font-values-5.0.1.tgz",
+ "integrity": "sha1-qQzvv9qgdb09uqGzNYi7TcJord8=",
+ "dev": true,
+ "requires": {
+ "postcss-value-parser": "^4.1.0"
+ }
+ },
+ "postcss-minify-gradients": {
+ "version": "5.0.3",
+ "resolved": "https://registry.npmmirror.com/postcss-minify-gradients/download/postcss-minify-gradients-5.0.3.tgz?cache=0&sync_timestamp=1635856917388&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fpostcss-minify-gradients%2Fdownload%2Fpostcss-minify-gradients-5.0.3.tgz",
+ "integrity": "sha1-+XChHMceCOkJXnjsOms0uRwZVQ4=",
+ "dev": true,
+ "requires": {
+ "colord": "^2.9.1",
+ "cssnano-utils": "^2.0.1",
+ "postcss-value-parser": "^4.1.0"
+ }
+ },
+ "postcss-minify-params": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmmirror.com/postcss-minify-params/download/postcss-minify-params-5.0.2.tgz?cache=0&sync_timestamp=1637084983019&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fpostcss-minify-params%2Fdownload%2Fpostcss-minify-params-5.0.2.tgz",
+ "integrity": "sha512-qJAPuBzxO1yhLad7h2Dzk/F7n1vPyfHfCCh5grjGfjhi1ttCnq4ZXGIW77GSrEbh9Hus9Lc/e/+tB4vh3/GpDg==",
+ "dev": true,
+ "requires": {
+ "alphanum-sort": "^1.0.2",
+ "browserslist": "^4.16.6",
+ "cssnano-utils": "^2.0.1",
+ "postcss-value-parser": "^4.1.0"
+ }
+ },
+ "postcss-minify-selectors": {
+ "version": "5.1.0",
+ "resolved": "https://registry.nlark.com/postcss-minify-selectors/download/postcss-minify-selectors-5.1.0.tgz",
+ "integrity": "sha1-Q4XIRdOXn/FgKRd0Uj/6VOr9WlQ=",
+ "dev": true,
+ "requires": {
+ "alphanum-sort": "^1.0.2",
+ "postcss-selector-parser": "^6.0.5"
+ }
+ },
+ "postcss-modules-extract-imports": {
+ "version": "3.0.0",
+ "resolved": "https://registry.nlark.com/postcss-modules-extract-imports/download/postcss-modules-extract-imports-3.0.0.tgz",
+ "integrity": "sha1-zaHwR8CugMl9vijD52pDuIAldB0=",
+ "dev": true
+ },
+ "postcss-modules-local-by-default": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npm.taobao.org/postcss-modules-local-by-default/download/postcss-modules-local-by-default-4.0.0.tgz?cache=0&sync_timestamp=1602587625149&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-modules-local-by-default%2Fdownload%2Fpostcss-modules-local-by-default-4.0.0.tgz",
+ "integrity": "sha1-67tU+uFZjuz99pGgKz/zs5ClpRw=",
+ "dev": true,
+ "requires": {
+ "icss-utils": "^5.0.0",
+ "postcss-selector-parser": "^6.0.2",
+ "postcss-value-parser": "^4.1.0"
+ }
+ },
+ "postcss-modules-scope": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npm.taobao.org/postcss-modules-scope/download/postcss-modules-scope-3.0.0.tgz",
+ "integrity": "sha1-nvMVFFbTu/oSDKRImN/Kby+gHwY=",
+ "dev": true,
+ "requires": {
+ "postcss-selector-parser": "^6.0.4"
+ }
+ },
+ "postcss-modules-values": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npm.taobao.org/postcss-modules-values/download/postcss-modules-values-4.0.0.tgz?cache=0&sync_timestamp=1602586215124&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-modules-values%2Fdownload%2Fpostcss-modules-values-4.0.0.tgz",
+ "integrity": "sha1-18Xn5ow7s8myfL9Iyguz/7RgLJw=",
+ "dev": true,
+ "requires": {
+ "icss-utils": "^5.0.0"
+ }
+ },
+ "postcss-nesting": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmmirror.com/postcss-nesting/download/postcss-nesting-7.0.1.tgz?cache=0&sync_timestamp=1637236305822&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fpostcss-nesting%2Fdownload%2Fpostcss-nesting-7.0.1.tgz",
+ "integrity": "sha1-tQrXt/AXPlteOIDDUBNEcD4EwFI=",
+ "dev": true,
+ "requires": {
+ "postcss": "^7.0.2"
+ },
+ "dependencies": {
+ "picocolors": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmmirror.com/picocolors/download/picocolors-0.2.1.tgz",
+ "integrity": "sha1-VwZw95NkaFHRuhNZlpYqutWHhZ8=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "7.0.39",
+ "resolved": "https://registry.npmmirror.com/postcss/download/postcss-7.0.39.tgz",
+ "integrity": "sha1-liQ3XZZWMOLh8sAqk1yCpZy0gwk=",
+ "dev": true,
+ "requires": {
+ "picocolors": "^0.2.1",
+ "source-map": "^0.6.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
+ }
+ }
+ },
+ "postcss-normalize-charset": {
+ "version": "5.0.1",
+ "resolved": "https://registry.nlark.com/postcss-normalize-charset/download/postcss-normalize-charset-5.0.1.tgz",
+ "integrity": "sha1-EhVZ0b68VayNJK839nvU2p79kdA=",
+ "dev": true
+ },
+ "postcss-normalize-display-values": {
+ "version": "5.0.1",
+ "resolved": "https://registry.nlark.com/postcss-normalize-display-values/download/postcss-normalize-display-values-5.0.1.tgz?cache=0&sync_timestamp=1621449652268&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpostcss-normalize-display-values%2Fdownload%2Fpostcss-normalize-display-values-5.0.1.tgz",
+ "integrity": "sha1-YmULllmBqVXf/ugzY0U9uC9q0f0=",
+ "dev": true,
+ "requires": {
+ "cssnano-utils": "^2.0.1",
+ "postcss-value-parser": "^4.1.0"
+ }
+ },
+ "postcss-normalize-positions": {
+ "version": "5.0.1",
+ "resolved": "https://registry.nlark.com/postcss-normalize-positions/download/postcss-normalize-positions-5.0.1.tgz",
+ "integrity": "sha1-ho9q8Xlf36hvu+lg3OtH5flJL+U=",
+ "dev": true,
+ "requires": {
+ "postcss-value-parser": "^4.1.0"
+ }
+ },
+ "postcss-normalize-repeat-style": {
+ "version": "5.0.1",
+ "resolved": "https://registry.nlark.com/postcss-normalize-repeat-style/download/postcss-normalize-repeat-style-5.0.1.tgz",
+ "integrity": "sha1-y8DeE4O1f1u2Hd1qhGU7XoZlsrU=",
+ "dev": true,
+ "requires": {
+ "cssnano-utils": "^2.0.1",
+ "postcss-value-parser": "^4.1.0"
+ }
+ },
+ "postcss-normalize-string": {
+ "version": "5.0.1",
+ "resolved": "https://registry.nlark.com/postcss-normalize-string/download/postcss-normalize-string-5.0.1.tgz",
+ "integrity": "sha1-2er6pN94x6O5c640bvDkfFVJhbA=",
+ "dev": true,
+ "requires": {
+ "postcss-value-parser": "^4.1.0"
+ }
+ },
+ "postcss-normalize-timing-functions": {
+ "version": "5.0.1",
+ "resolved": "https://registry.nlark.com/postcss-normalize-timing-functions/download/postcss-normalize-timing-functions-5.0.1.tgz",
+ "integrity": "sha1-juQRA7kTBCnGy7pzaTK3XF4ssIw=",
+ "dev": true,
+ "requires": {
+ "cssnano-utils": "^2.0.1",
+ "postcss-value-parser": "^4.1.0"
+ }
+ },
+ "postcss-normalize-unicode": {
+ "version": "5.0.1",
+ "resolved": "https://registry.nlark.com/postcss-normalize-unicode/download/postcss-normalize-unicode-5.0.1.tgz",
+ "integrity": "sha1-gtZy1kikEYFKpb865WU3nM2fXjc=",
+ "dev": true,
+ "requires": {
+ "browserslist": "^4.16.0",
+ "postcss-value-parser": "^4.1.0"
+ }
+ },
+ "postcss-normalize-url": {
+ "version": "5.0.3",
+ "resolved": "https://registry.npmmirror.com/postcss-normalize-url/download/postcss-normalize-url-5.0.3.tgz?cache=0&sync_timestamp=1637084983535&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fpostcss-normalize-url%2Fdownload%2Fpostcss-normalize-url-5.0.3.tgz",
+ "integrity": "sha512-qWiUMbvkRx3kc1Dp5opzUwc7MBWZcSDK2yofCmdvFBCpx+zFPkxBC1FASQ59Pt+flYfj/nTZSkmF56+XG5elSg==",
+ "dev": true,
+ "requires": {
+ "is-absolute-url": "^3.0.3",
+ "normalize-url": "^6.0.1",
+ "postcss-value-parser": "^4.1.0"
+ }
+ },
+ "postcss-normalize-whitespace": {
+ "version": "5.0.1",
+ "resolved": "https://registry.nlark.com/postcss-normalize-whitespace/download/postcss-normalize-whitespace-5.0.1.tgz",
+ "integrity": "sha1-sLQLW8rINYX/B+rS2vLc++7vjpo=",
+ "dev": true,
+ "requires": {
+ "postcss-value-parser": "^4.1.0"
+ }
+ },
+ "postcss-ordered-values": {
+ "version": "5.0.2",
+ "resolved": "https://registry.nlark.com/postcss-ordered-values/download/postcss-ordered-values-5.0.2.tgz?cache=0&sync_timestamp=1623330460500&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpostcss-ordered-values%2Fdownload%2Fpostcss-ordered-values-5.0.2.tgz",
+ "integrity": "sha1-HzUUJpd74A4PdlsxZK11PayO0EQ=",
+ "dev": true,
+ "requires": {
+ "cssnano-utils": "^2.0.1",
+ "postcss-value-parser": "^4.1.0"
+ }
+ },
+ "postcss-overflow-shorthand": {
+ "version": "2.0.0",
+ "resolved": "https://registry.nlark.com/postcss-overflow-shorthand/download/postcss-overflow-shorthand-2.0.0.tgz",
+ "integrity": "sha1-MezzUOnG9t3CUKePDD4RHzLdTDA=",
+ "dev": true,
+ "requires": {
+ "postcss": "^7.0.2"
+ },
+ "dependencies": {
+ "picocolors": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmmirror.com/picocolors/download/picocolors-0.2.1.tgz",
+ "integrity": "sha1-VwZw95NkaFHRuhNZlpYqutWHhZ8=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "7.0.39",
+ "resolved": "https://registry.npmmirror.com/postcss/download/postcss-7.0.39.tgz",
+ "integrity": "sha1-liQ3XZZWMOLh8sAqk1yCpZy0gwk=",
+ "dev": true,
+ "requires": {
+ "picocolors": "^0.2.1",
+ "source-map": "^0.6.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
+ }
+ }
+ },
+ "postcss-page-break": {
+ "version": "2.0.0",
+ "resolved": "https://registry.nlark.com/postcss-page-break/download/postcss-page-break-2.0.0.tgz",
+ "integrity": "sha1-rdUtDgpSjKvmr+6LRuKrsnffRr8=",
+ "dev": true,
+ "requires": {
+ "postcss": "^7.0.2"
+ },
+ "dependencies": {
+ "picocolors": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmmirror.com/picocolors/download/picocolors-0.2.1.tgz",
+ "integrity": "sha1-VwZw95NkaFHRuhNZlpYqutWHhZ8=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "7.0.39",
+ "resolved": "https://registry.npmmirror.com/postcss/download/postcss-7.0.39.tgz",
+ "integrity": "sha1-liQ3XZZWMOLh8sAqk1yCpZy0gwk=",
+ "dev": true,
+ "requires": {
+ "picocolors": "^0.2.1",
+ "source-map": "^0.6.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
+ }
+ }
+ },
+ "postcss-place": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmmirror.com/postcss-place/download/postcss-place-4.0.1.tgz?cache=0&sync_timestamp=1637322613194&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fpostcss-place%2Fdownload%2Fpostcss-place-4.0.1.tgz",
+ "integrity": "sha1-6fOdM9LcWE5G7h20Wtt3yp0dzGI=",
+ "dev": true,
+ "requires": {
+ "postcss": "^7.0.2",
+ "postcss-values-parser": "^2.0.0"
+ },
+ "dependencies": {
+ "picocolors": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmmirror.com/picocolors/download/picocolors-0.2.1.tgz",
+ "integrity": "sha1-VwZw95NkaFHRuhNZlpYqutWHhZ8=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "7.0.39",
+ "resolved": "https://registry.npmmirror.com/postcss/download/postcss-7.0.39.tgz",
+ "integrity": "sha1-liQ3XZZWMOLh8sAqk1yCpZy0gwk=",
+ "dev": true,
+ "requires": {
+ "picocolors": "^0.2.1",
+ "source-map": "^0.6.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
+ }
+ }
+ },
+ "postcss-preset-env": {
+ "version": "6.7.0",
+ "resolved": "https://registry.npmmirror.com/postcss-preset-env/download/postcss-preset-env-6.7.0.tgz?cache=0&sync_timestamp=1637321343139&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fpostcss-preset-env%2Fdownload%2Fpostcss-preset-env-6.7.0.tgz",
+ "integrity": "sha1-w03az4+QI4OzWtHgMPF49M3xGKU=",
+ "dev": true,
+ "requires": {
+ "autoprefixer": "^9.6.1",
+ "browserslist": "^4.6.4",
+ "caniuse-lite": "^1.0.30000981",
+ "css-blank-pseudo": "^0.1.4",
+ "css-has-pseudo": "^0.10.0",
+ "css-prefers-color-scheme": "^3.1.1",
+ "cssdb": "^4.4.0",
+ "postcss": "^7.0.17",
+ "postcss-attribute-case-insensitive": "^4.0.1",
+ "postcss-color-functional-notation": "^2.0.1",
+ "postcss-color-gray": "^5.0.0",
+ "postcss-color-hex-alpha": "^5.0.3",
+ "postcss-color-mod-function": "^3.0.3",
+ "postcss-color-rebeccapurple": "^4.0.1",
+ "postcss-custom-media": "^7.0.8",
+ "postcss-custom-properties": "^8.0.11",
+ "postcss-custom-selectors": "^5.1.2",
+ "postcss-dir-pseudo-class": "^5.0.0",
+ "postcss-double-position-gradients": "^1.0.0",
+ "postcss-env-function": "^2.0.2",
+ "postcss-focus-visible": "^4.0.0",
+ "postcss-focus-within": "^3.0.0",
+ "postcss-font-variant": "^4.0.0",
+ "postcss-gap-properties": "^2.0.0",
+ "postcss-image-set-function": "^3.0.1",
+ "postcss-initial": "^3.0.0",
+ "postcss-lab-function": "^2.0.1",
+ "postcss-logical": "^3.0.0",
+ "postcss-media-minmax": "^4.0.0",
+ "postcss-nesting": "^7.0.0",
+ "postcss-overflow-shorthand": "^2.0.0",
+ "postcss-page-break": "^2.0.0",
+ "postcss-place": "^4.0.1",
+ "postcss-pseudo-class-any-link": "^6.0.0",
+ "postcss-replace-overflow-wrap": "^3.0.0",
+ "postcss-selector-matches": "^4.0.0",
+ "postcss-selector-not": "^4.0.0"
+ },
+ "dependencies": {
+ "picocolors": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmmirror.com/picocolors/download/picocolors-0.2.1.tgz",
+ "integrity": "sha1-VwZw95NkaFHRuhNZlpYqutWHhZ8=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "7.0.39",
+ "resolved": "https://registry.npmmirror.com/postcss/download/postcss-7.0.39.tgz",
+ "integrity": "sha1-liQ3XZZWMOLh8sAqk1yCpZy0gwk=",
+ "dev": true,
+ "requires": {
+ "picocolors": "^0.2.1",
+ "source-map": "^0.6.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
+ }
+ }
+ },
+ "postcss-pseudo-class-any-link": {
+ "version": "6.0.0",
+ "resolved": "https://registry.nlark.com/postcss-pseudo-class-any-link/download/postcss-pseudo-class-any-link-6.0.0.tgz",
+ "integrity": "sha1-LtPu05OzcCh53sSocDKyENrrBNE=",
+ "dev": true,
+ "requires": {
+ "postcss": "^7.0.2",
+ "postcss-selector-parser": "^5.0.0-rc.3"
+ },
+ "dependencies": {
+ "cssesc": {
+ "version": "2.0.0",
+ "resolved": "https://registry.nlark.com/cssesc/download/cssesc-2.0.0.tgz",
+ "integrity": "sha1-OxO9G7HLNuG8taTc0n9UxdyzVwM=",
+ "dev": true
+ },
+ "picocolors": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmmirror.com/picocolors/download/picocolors-0.2.1.tgz",
+ "integrity": "sha1-VwZw95NkaFHRuhNZlpYqutWHhZ8=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "7.0.39",
+ "resolved": "https://registry.npmmirror.com/postcss/download/postcss-7.0.39.tgz",
+ "integrity": "sha1-liQ3XZZWMOLh8sAqk1yCpZy0gwk=",
+ "dev": true,
+ "requires": {
+ "picocolors": "^0.2.1",
+ "source-map": "^0.6.1"
+ }
+ },
+ "postcss-selector-parser": {
+ "version": "5.0.0",
+ "resolved": "https://registry.nlark.com/postcss-selector-parser/download/postcss-selector-parser-5.0.0.tgz?cache=0&sync_timestamp=1620752939806&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpostcss-selector-parser%2Fdownload%2Fpostcss-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"
+ }
+ },
+ "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
+ }
+ }
+ },
+ "postcss-reduce-initial": {
+ "version": "5.0.1",
+ "resolved": "https://registry.nlark.com/postcss-reduce-initial/download/postcss-reduce-initial-5.0.1.tgz",
+ "integrity": "sha1-nWNphlsPb29rFloO9dwaSFbH6UY=",
+ "dev": true,
+ "requires": {
+ "browserslist": "^4.16.0",
+ "caniuse-api": "^3.0.0"
+ }
+ },
+ "postcss-reduce-transforms": {
+ "version": "5.0.1",
+ "resolved": "https://registry.nlark.com/postcss-reduce-transforms/download/postcss-reduce-transforms-5.0.1.tgz?cache=0&sync_timestamp=1621449730895&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpostcss-reduce-transforms%2Fdownload%2Fpostcss-reduce-transforms-5.0.1.tgz",
+ "integrity": "sha1-k8EvahWUdKpxHVJpkj4jg87c9kA=",
+ "dev": true,
+ "requires": {
+ "cssnano-utils": "^2.0.1",
+ "postcss-value-parser": "^4.1.0"
+ }
+ },
+ "postcss-replace-overflow-wrap": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npm.taobao.org/postcss-replace-overflow-wrap/download/postcss-replace-overflow-wrap-3.0.0.tgz",
+ "integrity": "sha1-YbNg/9rtyoTHyRjSsPDQ6lWasBw=",
+ "dev": true,
+ "requires": {
+ "postcss": "^7.0.2"
+ },
+ "dependencies": {
+ "picocolors": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmmirror.com/picocolors/download/picocolors-0.2.1.tgz",
+ "integrity": "sha1-VwZw95NkaFHRuhNZlpYqutWHhZ8=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "7.0.39",
+ "resolved": "https://registry.npmmirror.com/postcss/download/postcss-7.0.39.tgz",
+ "integrity": "sha1-liQ3XZZWMOLh8sAqk1yCpZy0gwk=",
+ "dev": true,
+ "requires": {
+ "picocolors": "^0.2.1",
+ "source-map": "^0.6.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
+ }
+ }
+ },
+ "postcss-reporter": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmmirror.com/postcss-reporter/download/postcss-reporter-6.0.1.tgz",
+ "integrity": "sha1-fAVRIAYKl8iDe05IIVZhqvt0JF8=",
+ "dev": true,
+ "requires": {
+ "chalk": "^2.4.1",
+ "lodash": "^4.17.11",
+ "log-symbols": "^2.2.0",
+ "postcss": "^7.0.7"
+ },
+ "dependencies": {
+ "log-symbols": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npm.taobao.org/log-symbols/download/log-symbols-2.2.0.tgz",
+ "integrity": "sha1-V0Dhxdbw39pK2TI7UzIQfva0xAo=",
+ "dev": true,
+ "requires": {
+ "chalk": "^2.0.1"
+ }
+ },
+ "picocolors": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmmirror.com/picocolors/download/picocolors-0.2.1.tgz",
+ "integrity": "sha1-VwZw95NkaFHRuhNZlpYqutWHhZ8=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "7.0.39",
+ "resolved": "https://registry.npmmirror.com/postcss/download/postcss-7.0.39.tgz",
+ "integrity": "sha1-liQ3XZZWMOLh8sAqk1yCpZy0gwk=",
+ "dev": true,
+ "requires": {
+ "picocolors": "^0.2.1",
+ "source-map": "^0.6.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
+ }
+ }
+ },
+ "postcss-resolve-nested-selector": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npm.taobao.org/postcss-resolve-nested-selector/download/postcss-resolve-nested-selector-0.1.1.tgz",
+ "integrity": "sha1-Kcy8fDfe36wwTp//C/FZaz9qDk4=",
+ "dev": true
+ },
+ "postcss-safe-parser": {
+ "version": "4.0.2",
+ "resolved": "https://registry.nlark.com/postcss-safe-parser/download/postcss-safe-parser-4.0.2.tgz",
+ "integrity": "sha1-ptTkjw832ffBGypYG/APi6SHC5Y=",
+ "dev": true,
+ "requires": {
+ "postcss": "^7.0.26"
+ },
+ "dependencies": {
+ "picocolors": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmmirror.com/picocolors/download/picocolors-0.2.1.tgz",
+ "integrity": "sha1-VwZw95NkaFHRuhNZlpYqutWHhZ8=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "7.0.39",
+ "resolved": "https://registry.npmmirror.com/postcss/download/postcss-7.0.39.tgz",
+ "integrity": "sha1-liQ3XZZWMOLh8sAqk1yCpZy0gwk=",
+ "dev": true,
+ "requires": {
+ "picocolors": "^0.2.1",
+ "source-map": "^0.6.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
+ }
+ }
+ },
+ "postcss-sass": {
+ "version": "0.4.4",
+ "resolved": "https://registry.nlark.com/postcss-sass/download/postcss-sass-0.4.4.tgz",
+ "integrity": "sha1-kfDzRHtFzjcyJ6mLYfjY8HhShaM=",
+ "dev": true,
+ "requires": {
+ "gonzales-pe": "^4.3.0",
+ "postcss": "^7.0.21"
+ },
+ "dependencies": {
+ "picocolors": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmmirror.com/picocolors/download/picocolors-0.2.1.tgz",
+ "integrity": "sha1-VwZw95NkaFHRuhNZlpYqutWHhZ8=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "7.0.39",
+ "resolved": "https://registry.npmmirror.com/postcss/download/postcss-7.0.39.tgz",
+ "integrity": "sha1-liQ3XZZWMOLh8sAqk1yCpZy0gwk=",
+ "dev": true,
+ "requires": {
+ "picocolors": "^0.2.1",
+ "source-map": "^0.6.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
+ }
+ }
+ },
+ "postcss-scss": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmmirror.com/postcss-scss/download/postcss-scss-2.1.1.tgz?cache=0&sync_timestamp=1635496103823&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fpostcss-scss%2Fdownload%2Fpostcss-scss-2.1.1.tgz",
+ "integrity": "sha1-7Dp1+imlXgFrkL8yaQJsU8HSs4M=",
+ "dev": true,
+ "requires": {
+ "postcss": "^7.0.6"
+ },
+ "dependencies": {
+ "picocolors": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmmirror.com/picocolors/download/picocolors-0.2.1.tgz",
+ "integrity": "sha1-VwZw95NkaFHRuhNZlpYqutWHhZ8=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "7.0.39",
+ "resolved": "https://registry.npmmirror.com/postcss/download/postcss-7.0.39.tgz",
+ "integrity": "sha1-liQ3XZZWMOLh8sAqk1yCpZy0gwk=",
+ "dev": true,
+ "requires": {
+ "picocolors": "^0.2.1",
+ "source-map": "^0.6.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
+ }
+ }
+ },
+ "postcss-selector-matches": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npm.taobao.org/postcss-selector-matches/download/postcss-selector-matches-4.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-selector-matches%2Fdownload%2Fpostcss-selector-matches-4.0.0.tgz",
+ "integrity": "sha1-ccgkj5F7osyTA3yWN+4JxkQ2/P8=",
+ "dev": true,
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "postcss": "^7.0.2"
+ },
+ "dependencies": {
+ "picocolors": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmmirror.com/picocolors/download/picocolors-0.2.1.tgz",
+ "integrity": "sha1-VwZw95NkaFHRuhNZlpYqutWHhZ8=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "7.0.39",
+ "resolved": "https://registry.npmmirror.com/postcss/download/postcss-7.0.39.tgz",
+ "integrity": "sha1-liQ3XZZWMOLh8sAqk1yCpZy0gwk=",
+ "dev": true,
+ "requires": {
+ "picocolors": "^0.2.1",
+ "source-map": "^0.6.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
+ }
+ }
+ },
+ "postcss-selector-not": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npm.taobao.org/postcss-selector-not/download/postcss-selector-not-4.0.1.tgz?cache=0&sync_timestamp=1612096191464&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-selector-not%2Fdownload%2Fpostcss-selector-not-4.0.1.tgz",
+ "integrity": "sha1-JjAW7vHPIZ4K3pqRN4D8H0ggTL8=",
+ "dev": true,
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "postcss": "^7.0.2"
+ },
+ "dependencies": {
+ "picocolors": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmmirror.com/picocolors/download/picocolors-0.2.1.tgz",
+ "integrity": "sha1-VwZw95NkaFHRuhNZlpYqutWHhZ8=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "7.0.39",
+ "resolved": "https://registry.npmmirror.com/postcss/download/postcss-7.0.39.tgz",
+ "integrity": "sha1-liQ3XZZWMOLh8sAqk1yCpZy0gwk=",
+ "dev": true,
+ "requires": {
+ "picocolors": "^0.2.1",
+ "source-map": "^0.6.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
+ }
+ }
+ },
+ "postcss-selector-parser": {
+ "version": "6.0.6",
+ "resolved": "https://registry.nlark.com/postcss-selector-parser/download/postcss-selector-parser-6.0.6.tgz?cache=0&sync_timestamp=1620752939806&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpostcss-selector-parser%2Fdownload%2Fpostcss-selector-parser-6.0.6.tgz",
+ "integrity": "sha1-LFu6gXSsL2mBq2MaQqsO5UrzMuo=",
+ "dev": true,
+ "requires": {
+ "cssesc": "^3.0.0",
+ "util-deprecate": "^1.0.2"
+ }
+ },
+ "postcss-sorting": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmmirror.com/postcss-sorting/download/postcss-sorting-4.1.0.tgz",
+ "integrity": "sha1-oQfwvzhSl3+mTkRCvDQMiNWqzbM=",
+ "dev": true,
+ "requires": {
+ "lodash": "^4.17.4",
+ "postcss": "^7.0.0"
+ },
+ "dependencies": {
+ "picocolors": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmmirror.com/picocolors/download/picocolors-0.2.1.tgz",
+ "integrity": "sha1-VwZw95NkaFHRuhNZlpYqutWHhZ8=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "7.0.39",
+ "resolved": "https://registry.npmmirror.com/postcss/download/postcss-7.0.39.tgz",
+ "integrity": "sha1-liQ3XZZWMOLh8sAqk1yCpZy0gwk=",
+ "dev": true,
+ "requires": {
+ "picocolors": "^0.2.1",
+ "source-map": "^0.6.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
+ }
+ }
+ },
+ "postcss-svgo": {
+ "version": "5.0.3",
+ "resolved": "https://registry.npmmirror.com/postcss-svgo/download/postcss-svgo-5.0.3.tgz",
+ "integrity": "sha1-2UUYV1bl36rgf57bDTyuf/efmzA=",
+ "dev": true,
+ "requires": {
+ "postcss-value-parser": "^4.1.0",
+ "svgo": "^2.7.0"
+ }
+ },
+ "postcss-syntax": {
+ "version": "0.36.2",
+ "resolved": "https://registry.npm.taobao.org/postcss-syntax/download/postcss-syntax-0.36.2.tgz",
+ "integrity": "sha1-8IV4x9lYNFdOVZOoLfv6ivrjtRw=",
+ "dev": true
+ },
+ "postcss-unique-selectors": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmmirror.com/postcss-unique-selectors/download/postcss-unique-selectors-5.0.2.tgz?cache=0&sync_timestamp=1637084982907&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fpostcss-unique-selectors%2Fdownload%2Fpostcss-unique-selectors-5.0.2.tgz",
+ "integrity": "sha512-w3zBVlrtZm7loQWRPVC0yjUwwpty7OM6DnEHkxcSQXO1bMS3RJ+JUS5LFMSDZHJcvGsRwhZinCWVqn8Kej4EDA==",
+ "dev": true,
+ "requires": {
+ "alphanum-sort": "^1.0.2",
+ "postcss-selector-parser": "^6.0.5"
+ }
+ },
+ "postcss-value-parser": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-4.1.0.tgz",
+ "integrity": "sha1-RD9qIM7WSBor2k+oUypuVdeJoss=",
+ "dev": true
+ },
+ "postcss-values-parser": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmmirror.com/postcss-values-parser/download/postcss-values-parser-2.0.1.tgz",
+ "integrity": "sha1-2otHLZAdoeIFtHvcmGN7np5VDl8=",
+ "dev": true,
+ "requires": {
+ "flatten": "^1.0.2",
+ "indexes-of": "^1.0.1",
+ "uniq": "^1.0.1"
+ }
+ },
+ "preact": {
+ "version": "10.6.1",
+ "resolved": "https://registry.npmmirror.com/preact/download/preact-10.6.1.tgz",
+ "integrity": "sha512-ydCg+ISIq70vqiThvNWStZWLRjR9U2awP/JAmGdWUKm9+Tyuy+MqVdAIyEByeIspAVtD4GWC/SJtxO8XD4knVA=="
+ },
+ "prelude-ls": {
+ "version": "1.2.1",
+ "resolved": "https://registry.nlark.com/prelude-ls/download/prelude-ls-1.2.1.tgz",
+ "integrity": "sha1-3rxkidem5rDnYRiIzsiAM30xY5Y=",
+ "dev": true
+ },
+ "prettier": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmmirror.com/prettier/download/prettier-2.5.0.tgz",
+ "integrity": "sha512-FM/zAKgWTxj40rH03VxzIPdXmj39SwSjwG0heUcNFwI+EMZJnY93yAiKXM3dObIKAM5TA88werc8T/EwhB45eg==",
+ "dev": true
+ },
+ "prettier-linter-helpers": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npm.taobao.org/prettier-linter-helpers/download/prettier-linter-helpers-1.0.0.tgz",
+ "integrity": "sha1-0j1B/hN1ZG3i0BBNNFSjAIgCz3s=",
+ "dev": true,
+ "requires": {
+ "fast-diff": "^1.1.2"
+ }
+ },
+ "pretty-bytes": {
+ "version": "5.6.0",
+ "resolved": "https://registry.npm.taobao.org/pretty-bytes/download/pretty-bytes-5.6.0.tgz",
+ "integrity": "sha1-NWJW9kOAR3PIL2RyP+eMksYr6us=",
+ "dev": true
+ },
+ "printj": {
+ "version": "1.1.2",
+ "resolved": "https://registry.nlark.com/printj/download/printj-1.1.2.tgz",
+ "integrity": "sha1-2Q3rKXWoufYA+zoclOP0xTx4oiI="
+ },
+ "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="
+ },
+ "progress": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npm.taobao.org/progress/download/progress-2.0.3.tgz",
+ "integrity": "sha1-foz42PW48jnBvGi+tOt4Vn1XLvg=",
+ "dev": true
+ },
+ "promise": {
+ "version": "7.0.4",
+ "resolved": "https://registry.nlark.com/promise/download/promise-7.0.4.tgz",
+ "integrity": "sha1-Nj6EpMNsg1a4kP7WLJHOhdAu1Tk=",
+ "dev": 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-retry": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npm.taobao.org/promise-retry/download/promise-retry-2.0.1.tgz",
+ "integrity": "sha1-/3R6E2IKtXumiPX8Z4VUEMNw2iI=",
+ "dev": true,
+ "requires": {
+ "err-code": "^2.0.2",
+ "retry": "^0.12.0"
+ }
+ },
+ "protractor": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmmirror.com/protractor/download/protractor-7.0.0.tgz",
+ "integrity": "sha1-w+JjYIvXLiwtyAKxGncnEaR5LQM=",
+ "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",
+ "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.1.7",
+ "yargs": "^15.3.1"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.nlark.com/ansi-regex/download/ansi-regex-2.1.1.tgz?cache=0&sync_timestamp=1631634988487&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fansi-regex%2Fdownload%2Fansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.nlark.com/ansi-styles/download/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "array-union": {
+ "version": "1.0.2",
+ "resolved": "https://registry.nlark.com/array-union/download/array-union-1.0.2.tgz",
+ "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=",
+ "dev": true,
+ "requires": {
+ "array-uniq": "^1.0.1"
+ }
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.nlark.com/chalk/download/chalk-1.1.3.tgz?cache=0&sync_timestamp=1627646697260&other_urls=https%3A%2F%2Fregistry.nlark.com%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"
+ }
+ },
+ "cliui": {
+ "version": "6.0.0",
+ "resolved": "https://registry.nlark.com/cliui/download/cliui-6.0.0.tgz",
+ "integrity": "sha1-UR1wLAxOQcoVbX0OlgIfI+EyJbE=",
+ "dev": true,
+ "requires": {
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.0",
+ "wrap-ansi": "^6.2.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.nlark.com/ansi-regex/download/ansi-regex-5.0.1.tgz?cache=0&sync_timestamp=1631634988487&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fansi-regex%2Fdownload%2Fansi-regex-5.0.1.tgz",
+ "integrity": "sha1-CCyyyJyf6GWaMRpTvWpNxTAdswQ=",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmmirror.com/strip-ansi/download/strip-ansi-6.0.1.tgz?cache=0&sync_timestamp=1632420562057&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-6.0.1.tgz",
+ "integrity": "sha1-nibGPTD1NEPpSJSVshBdN7Z6hdk=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^5.0.1"
+ }
+ }
+ }
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npm.taobao.org/color-convert/download/color-convert-2.0.1.tgz",
+ "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=",
+ "dev": true,
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npm.taobao.org/color-name/download/color-name-1.1.4.tgz",
+ "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=",
+ "dev": true
+ },
+ "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.nlark.com/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"
+ }
+ },
+ "ini": {
+ "version": "1.3.8",
+ "resolved": "https://registry.nlark.com/ini/download/ini-1.3.8.tgz",
+ "integrity": "sha1-op2kJbSIBvNHZ6Tvzjlyaa8oQyw=",
+ "dev": true
+ },
+ "is-path-cwd": {
+ "version": "1.0.0",
+ "resolved": "https://registry.nlark.com/is-path-cwd/download/is-path-cwd-1.0.0.tgz?cache=0&sync_timestamp=1628686555851&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fis-path-cwd%2Fdownload%2Fis-path-cwd-1.0.0.tgz",
+ "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=",
+ "dev": true
+ },
+ "is-path-in-cwd": {
+ "version": "1.0.1",
+ "resolved": "https://registry.nlark.com/is-path-in-cwd/download/is-path-in-cwd-1.0.1.tgz?cache=0&sync_timestamp=1620047389319&other_urls=https%3A%2F%2Fregistry.nlark.com%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.nlark.com/is-path-inside/download/is-path-inside-1.0.1.tgz?cache=0&sync_timestamp=1620046845369&other_urls=https%3A%2F%2Fregistry.nlark.com%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
+ },
+ "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"
+ }
+ },
+ "semver": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npm.taobao.org/semver/download/semver-5.7.1.tgz?cache=0&sync_timestamp=1616463540350&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-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.npmmirror.com/source-map-support/download/source-map-support-0.4.18.tgz",
+ "integrity": "sha1-Aoam3ovkJkEzhZTpfM6nXwosWF8=",
+ "dev": true,
+ "requires": {
+ "source-map": "^0.5.6"
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmmirror.com/strip-ansi/download/strip-ansi-3.0.1.tgz?cache=0&sync_timestamp=1632420562057&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmmirror.com/supports-color/download/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ },
+ "webdriver-manager": {
+ "version": "12.1.8",
+ "resolved": "https://registry.nlark.com/webdriver-manager/download/webdriver-manager-12.1.8.tgz",
+ "integrity": "sha1-XnDnPqr1Ogdn1XRScK3a+8WQX9Q=",
+ "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"
+ }
+ },
+ "wrap-ansi": {
+ "version": "6.2.0",
+ "resolved": "https://registry.nlark.com/wrap-ansi/download/wrap-ansi-6.2.0.tgz?cache=0&sync_timestamp=1631557327268&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fwrap-ansi%2Fdownload%2Fwrap-ansi-6.2.0.tgz",
+ "integrity": "sha1-6Tk7oHEC5skaOyIUePAlfNKFblM=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.nlark.com/ansi-regex/download/ansi-regex-5.0.1.tgz?cache=0&sync_timestamp=1631634988487&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fansi-regex%2Fdownload%2Fansi-regex-5.0.1.tgz",
+ "integrity": "sha1-CCyyyJyf6GWaMRpTvWpNxTAdswQ=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.nlark.com/ansi-styles/download/ansi-styles-4.3.0.tgz",
+ "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=",
+ "dev": true,
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
+ },
+ "strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmmirror.com/strip-ansi/download/strip-ansi-6.0.1.tgz?cache=0&sync_timestamp=1632420562057&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-6.0.1.tgz",
+ "integrity": "sha1-nibGPTD1NEPpSJSVshBdN7Z6hdk=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^5.0.1"
+ }
+ }
+ }
+ },
+ "yargs": {
+ "version": "15.4.1",
+ "resolved": "https://registry.npmmirror.com/yargs/download/yargs-15.4.1.tgz",
+ "integrity": "sha1-DYehbeAa7p2L7Cv7909nhRcw9Pg=",
+ "dev": true,
+ "requires": {
+ "cliui": "^6.0.0",
+ "decamelize": "^1.2.0",
+ "find-up": "^4.1.0",
+ "get-caller-file": "^2.0.1",
+ "require-directory": "^2.1.1",
+ "require-main-filename": "^2.0.0",
+ "set-blocking": "^2.0.0",
+ "string-width": "^4.2.0",
+ "which-module": "^2.0.0",
+ "y18n": "^4.0.0",
+ "yargs-parser": "^18.1.2"
+ }
+ },
+ "yargs-parser": {
+ "version": "18.1.3",
+ "resolved": "https://registry.npmmirror.com/yargs-parser/download/yargs-parser-18.1.3.tgz?cache=0&sync_timestamp=1637031053426&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fyargs-parser%2Fdownload%2Fyargs-parser-18.1.3.tgz",
+ "integrity": "sha1-vmjEl1xrKr9GkjawyHA2L6sJp7A=",
+ "dev": true,
+ "requires": {
+ "camelcase": "^5.0.0",
+ "decamelize": "^1.2.0"
+ }
+ }
+ }
+ },
+ "proxy-addr": {
+ "version": "2.0.7",
+ "resolved": "https://registry.nlark.com/proxy-addr/download/proxy-addr-2.0.7.tgz",
+ "integrity": "sha1-8Z/mnOqzEe65S0LnDowgcPm6ECU=",
+ "dev": true,
+ "requires": {
+ "forwarded": "0.2.0",
+ "ipaddr.js": "1.9.1"
+ }
+ },
+ "prr": {
+ "version": "1.0.1",
+ "resolved": "https://registry.nlark.com/prr/download/prr-1.0.1.tgz",
+ "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=",
+ "dev": true
+ },
+ "psl": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npm.taobao.org/psl/download/psl-1.8.0.tgz",
+ "integrity": "sha1-kyb4vPsBOtzABf3/BWrM4CDlHCQ=",
+ "dev": true
+ },
+ "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"
+ }
+ },
+ "punycode": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npm.taobao.org/punycode/download/punycode-2.1.1.tgz",
+ "integrity": "sha1-tYsBCsQMIsVldhbI0sLALHv0eew="
+ },
+ "q": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npm.taobao.org/q/download/q-1.4.1.tgz?cache=0&sync_timestamp=1599054212574&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fq%2Fdownload%2Fq-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
+ },
+ "qrious": {
+ "version": "4.0.2",
+ "resolved": "http://npm.eascs.com/qrious/-/qrious-4.0.2.tgz",
+ "integrity": "sha1-CcTUB50rlhYX9ixpz/O5u2ajlpM="
+ },
+ "qs": {
+ "version": "6.7.0",
+ "resolved": "https://registry.nlark.com/qs/download/qs-6.7.0.tgz",
+ "integrity": "sha1-QdwaAV49WB8WIXdr4xr7KHapsbw=",
+ "dev": true
+ },
+ "querystring": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmmirror.com/querystring/download/querystring-0.2.0.tgz",
+ "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=",
+ "dev": true
+ },
+ "querystringify": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npm.taobao.org/querystringify/download/querystringify-2.2.0.tgz",
+ "integrity": "sha1-M0WUG0FTy50ILY7uTNogFqmu9/Y=",
+ "dev": true
+ },
+ "queue-microtask": {
+ "version": "1.2.3",
+ "resolved": "https://registry.nlark.com/queue-microtask/download/queue-microtask-1.2.3.tgz",
+ "integrity": "sha1-SSkii7xyTfrEPg77BYyve2z7YkM=",
+ "dev": true
+ },
+ "quick-lru": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmmirror.com/quick-lru/download/quick-lru-4.0.1.tgz",
+ "integrity": "sha1-W4h48ROlgheEjGSCAmxz4bpXcn8=",
+ "dev": true
+ },
+ "quill": {
+ "version": "1.3.7",
+ "resolved": "https://registry.npm.taobao.org/quill/download/quill-1.3.7.tgz",
+ "integrity": "sha1-2lsvOixHDpMjQM2/NmjJ8h+Shug=",
+ "requires": {
+ "clone": "^2.1.1",
+ "deep-equal": "^1.0.1",
+ "eventemitter3": "^2.0.3",
+ "extend": "^3.0.2",
+ "parchment": "^1.1.4",
+ "quill-delta": "^3.6.2"
+ }
+ },
+ "quill-delta": {
+ "version": "3.6.3",
+ "resolved": "https://registry.nlark.com/quill-delta/download/quill-delta-3.6.3.tgz",
+ "integrity": "sha1-sZ/SuJQSMBxg4f8hPY2GDqwPEDI=",
+ "requires": {
+ "deep-equal": "^1.0.1",
+ "extend": "^3.0.2",
+ "fast-diff": "1.1.2"
+ }
+ },
+ "quill-image-resize-module": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npm.taobao.org/quill-image-resize-module/download/quill-image-resize-module-3.0.0.tgz",
+ "integrity": "sha1-D9k3Rqg3M22VsvU2FAQWpiPHF3E=",
+ "requires": {
+ "lodash": "^4.17.4",
+ "quill": "^1.2.2",
+ "raw-loader": "^0.5.1"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmmirror.com/acorn/download/acorn-5.0.2.tgz?cache=0&sync_timestamp=1637225522161&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Facorn%2Fdownload%2Facorn-5.0.2.tgz",
+ "integrity": "sha1-3ByPuQf2TbKrVz3iMmtzUnwk3jY="
+ },
+ "acorn-dynamic-import": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npm.taobao.org/acorn-dynamic-import/download/acorn-dynamic-import-2.0.2.tgz",
+ "integrity": "sha1-x1K9IQvvZ5UBtsbLf8hPj0cVjMQ=",
+ "requires": {
+ "acorn": "^4.0.3"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "4.0.11",
+ "resolved": "https://registry.npmmirror.com/acorn/download/acorn-4.0.11.tgz?cache=0&sync_timestamp=1637225522161&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Facorn%2Fdownload%2Facorn-4.0.11.tgz",
+ "integrity": "sha1-7c2jvZN+dVZBDULtWGD2c5nHlMA="
+ }
+ }
+ },
+ "acorn-jsx": {
+ "version": "3.0.1",
+ "resolved": "https://registry.nlark.com/acorn-jsx/download/acorn-jsx-3.0.1.tgz?cache=0&sync_timestamp=1625793240297&other_urls=https%3A%2F%2Fregistry.nlark.com%2Facorn-jsx%2Fdownload%2Facorn-jsx-3.0.1.tgz",
+ "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=",
+ "requires": {
+ "acorn": "^3.0.4"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmmirror.com/acorn/download/acorn-3.3.0.tgz?cache=0&sync_timestamp=1637225522161&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Facorn%2Fdownload%2Facorn-3.3.0.tgz",
+ "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo="
+ }
+ }
+ },
+ "ajv": {
+ "version": "4.11.5",
+ "resolved": "https://registry.npmmirror.com/ajv/download/ajv-4.11.5.tgz?cache=0&sync_timestamp=1637522259668&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fajv%2Fdownload%2Fajv-4.11.5.tgz",
+ "integrity": "sha1-tu50ZXuZOgHc5Et5RNVvSFgo1b0=",
+ "requires": {
+ "co": "^4.6.0",
+ "json-stable-stringify": "^1.0.1"
+ }
+ },
+ "ajv-keywords": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmmirror.com/ajv-keywords/download/ajv-keywords-1.5.1.tgz",
+ "integrity": "sha1-MU3QpLM2j609/NxU7eYXG4htrzw="
+ },
+ "align-text": {
+ "version": "0.1.4",
+ "resolved": "https://registry.nlark.com/align-text/download/align-text-0.1.4.tgz",
+ "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=",
+ "requires": {
+ "kind-of": "^3.0.2",
+ "longest": "^1.0.1",
+ "repeat-string": "^1.5.2"
+ }
+ },
+ "ansi-escapes": {
+ "version": "1.4.0",
+ "resolved": "https://registry.nlark.com/ansi-escapes/download/ansi-escapes-1.4.0.tgz?cache=0&sync_timestamp=1618847144938&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fansi-escapes%2Fdownload%2Fansi-escapes-1.4.0.tgz",
+ "integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4="
+ },
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.nlark.com/ansi-regex/download/ansi-regex-2.1.1.tgz?cache=0&sync_timestamp=1631634988487&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fansi-regex%2Fdownload%2Fansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
+ },
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.nlark.com/ansi-styles/download/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
+ },
+ "anymatch": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npm.taobao.org/anymatch/download/anymatch-1.3.0.tgz?cache=0&sync_timestamp=1617747502795&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fanymatch%2Fdownload%2Fanymatch-1.3.0.tgz",
+ "integrity": "sha1-o+Uvo5FoyCX/V7AkgSbOWo/5VQc=",
+ "requires": {
+ "arrify": "^1.0.0",
+ "micromatch": "^2.1.5"
+ }
+ },
+ "argparse": {
+ "version": "1.0.9",
+ "resolved": "https://registry.nlark.com/argparse/download/argparse-1.0.9.tgz",
+ "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=",
+ "requires": {
+ "sprintf-js": "~1.0.2"
+ }
+ },
+ "aria-query": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmmirror.com/aria-query/download/aria-query-0.3.0.tgz?cache=0&sync_timestamp=1633308188641&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Faria-query%2Fdownload%2Faria-query-0.3.0.tgz",
+ "integrity": "sha1-y4qZhOKGJxHIPICt5bj1yg3itGc=",
+ "requires": {
+ "ast-types-flow": "0.0.7"
+ }
+ },
+ "arr-diff": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npm.taobao.org/arr-diff/download/arr-diff-2.0.0.tgz",
+ "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=",
+ "requires": {
+ "arr-flatten": "^1.0.1"
+ }
+ },
+ "arr-flatten": {
+ "version": "1.0.1",
+ "resolved": "https://registry.nlark.com/arr-flatten/download/arr-flatten-1.0.1.tgz?cache=0&sync_timestamp=1618846805394&other_urls=https%3A%2F%2Fregistry.nlark.com%2Farr-flatten%2Fdownload%2Farr-flatten-1.0.1.tgz",
+ "integrity": "sha1-5f/lTUXhnzLyFukeuZyM6JK7YEs="
+ },
+ "array-union": {
+ "version": "1.0.2",
+ "resolved": "https://registry.nlark.com/array-union/download/array-union-1.0.2.tgz",
+ "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=",
+ "requires": {
+ "array-uniq": "^1.0.1"
+ }
+ },
+ "array-uniq": {
+ "version": "1.0.3",
+ "resolved": "https://registry.nlark.com/array-uniq/download/array-uniq-1.0.3.tgz?cache=0&sync_timestamp=1622605321175&other_urls=https%3A%2F%2Fregistry.nlark.com%2Farray-uniq%2Fdownload%2Farray-uniq-1.0.3.tgz",
+ "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY="
+ },
+ "array-unique": {
+ "version": "0.2.1",
+ "resolved": "https://registry.nlark.com/array-unique/download/array-unique-0.2.1.tgz",
+ "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM="
+ },
+ "array.prototype.find": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmmirror.com/array.prototype.find/download/array.prototype.find-2.0.4.tgz",
+ "integrity": "sha1-VWpcU2LAhkgyPdrrnenRS8GGTJA=",
+ "requires": {
+ "define-properties": "^1.1.2",
+ "es-abstract": "^1.7.0"
+ }
+ },
+ "arrify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.nlark.com/arrify/download/arrify-1.0.1.tgz?cache=0&sync_timestamp=1619599497996&other_urls=https%3A%2F%2Fregistry.nlark.com%2Farrify%2Fdownload%2Farrify-1.0.1.tgz",
+ "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0="
+ },
+ "asn1.js": {
+ "version": "4.9.1",
+ "resolved": "https://registry.npm.taobao.org/asn1.js/download/asn1.js-4.9.1.tgz",
+ "integrity": "sha1-SLokC0WpKA6UdImQull9IWYX/UA=",
+ "requires": {
+ "bn.js": "^4.0.0",
+ "inherits": "^2.0.1",
+ "minimalistic-assert": "^1.0.0"
+ }
+ },
+ "assert": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npm.taobao.org/assert/download/assert-1.4.1.tgz",
+ "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=",
+ "requires": {
+ "util": "0.10.3"
+ }
+ },
+ "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="
+ },
+ "async": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmmirror.com/async/download/async-2.3.0.tgz",
+ "integrity": "sha1-EBPRBRBH3TIP4k5JTVxm7K9hR9k=",
+ "requires": {
+ "lodash": "^4.14.0"
+ }
+ },
+ "async-each": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npm.taobao.org/async-each/download/async-each-1.0.1.tgz",
+ "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0="
+ },
+ "babel-cli": {
+ "version": "6.24.0",
+ "resolved": "https://registry.npm.taobao.org/babel-cli/download/babel-cli-6.24.0.tgz",
+ "integrity": "sha1-oF/9IQ3KDCiKJtUxnFrIZpomWtA=",
+ "requires": {
+ "babel-core": "^6.24.0",
+ "babel-polyfill": "^6.23.0",
+ "babel-register": "^6.24.0",
+ "babel-runtime": "^6.22.0",
+ "chokidar": "^1.6.1",
+ "commander": "^2.8.1",
+ "convert-source-map": "^1.1.0",
+ "fs-readdir-recursive": "^1.0.0",
+ "glob": "^7.0.0",
+ "lodash": "^4.2.0",
+ "output-file-sync": "^1.1.0",
+ "path-is-absolute": "^1.0.0",
+ "slash": "^1.0.0",
+ "source-map": "^0.5.0",
+ "v8flags": "^2.0.10"
+ }
+ },
+ "babel-code-frame": {
+ "version": "6.22.0",
+ "resolved": "https://registry.nlark.com/babel-code-frame/download/babel-code-frame-6.22.0.tgz",
+ "integrity": "sha1-AnYgvuVnqIwyVhV05/0IAdMxGOQ=",
+ "requires": {
+ "chalk": "^1.1.0",
+ "esutils": "^2.0.2",
+ "js-tokens": "^3.0.0"
+ }
+ },
+ "babel-core": {
+ "version": "6.24.0",
+ "resolved": "https://registry.npm.taobao.org/babel-core/download/babel-core-6.24.0.tgz",
+ "integrity": "sha1-jzagp39cFVrtb5ILhE0julZ0KgI=",
+ "requires": {
+ "babel-code-frame": "^6.22.0",
+ "babel-generator": "^6.24.0",
+ "babel-helpers": "^6.23.0",
+ "babel-messages": "^6.23.0",
+ "babel-register": "^6.24.0",
+ "babel-runtime": "^6.22.0",
+ "babel-template": "^6.23.0",
+ "babel-traverse": "^6.23.1",
+ "babel-types": "^6.23.0",
+ "babylon": "^6.11.0",
+ "convert-source-map": "^1.1.0",
+ "debug": "^2.1.1",
+ "json5": "^0.5.0",
+ "lodash": "^4.2.0",
+ "minimatch": "^3.0.2",
+ "path-is-absolute": "^1.0.0",
+ "private": "^0.1.6",
+ "slash": "^1.0.0",
+ "source-map": "^0.5.0"
+ }
+ },
+ "babel-eslint": {
+ "version": "7.2.1",
+ "resolved": "https://registry.npmmirror.com/babel-eslint/download/babel-eslint-7.2.1.tgz",
+ "integrity": "sha1-B5Qi63O6gR48oIZc6Hrykyf4xS8=",
+ "requires": {
+ "babel-code-frame": "^6.22.0",
+ "babel-traverse": "^6.23.1",
+ "babel-types": "^6.23.0",
+ "babylon": "^6.16.1"
+ }
+ },
+ "babel-generator": {
+ "version": "6.24.0",
+ "resolved": "https://registry.npm.taobao.org/babel-generator/download/babel-generator-6.24.0.tgz",
+ "integrity": "sha1-66JwqMxM5uCaYb5DRl18YsH4fFY=",
+ "requires": {
+ "babel-messages": "^6.23.0",
+ "babel-runtime": "^6.22.0",
+ "babel-types": "^6.23.0",
+ "detect-indent": "^4.0.0",
+ "jsesc": "^1.3.0",
+ "lodash": "^4.2.0",
+ "source-map": "^0.5.0",
+ "trim-right": "^1.0.1"
+ }
+ },
+ "babel-helper-builder-binary-assignment-operator-visitor": {
+ "version": "6.22.0",
+ "resolved": "https://registry.nlark.com/babel-helper-builder-binary-assignment-operator-visitor/download/babel-helper-builder-binary-assignment-operator-visitor-6.22.0.tgz",
+ "integrity": "sha1-Kd9WvhRNgb3qwIJiv6QdLF6Rzc0=",
+ "requires": {
+ "babel-helper-explode-assignable-expression": "^6.22.0",
+ "babel-runtime": "^6.22.0",
+ "babel-types": "^6.22.0"
+ }
+ },
+ "babel-helper-call-delegate": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npm.taobao.org/babel-helper-call-delegate/download/babel-helper-call-delegate-6.22.0.tgz",
+ "integrity": "sha1-EZkhtWEg8X6drj90tPXMe8wbN+8=",
+ "requires": {
+ "babel-helper-hoist-variables": "^6.22.0",
+ "babel-runtime": "^6.22.0",
+ "babel-traverse": "^6.22.0",
+ "babel-types": "^6.22.0"
+ }
+ },
+ "babel-helper-define-map": {
+ "version": "6.23.0",
+ "resolved": "https://registry.nlark.com/babel-helper-define-map/download/babel-helper-define-map-6.23.0.tgz",
+ "integrity": "sha1-FET5YMlpHWmiztaiBTFfj9AIBOc=",
+ "requires": {
+ "babel-helper-function-name": "^6.23.0",
+ "babel-runtime": "^6.22.0",
+ "babel-types": "^6.23.0",
+ "lodash": "^4.2.0"
+ }
+ },
+ "babel-helper-explode-assignable-expression": {
+ "version": "6.22.0",
+ "resolved": "https://registry.nlark.com/babel-helper-explode-assignable-expression/download/babel-helper-explode-assignable-expression-6.22.0.tgz",
+ "integrity": "sha1-yXv3bu0+C65ASBIfK52uGk59BHg=",
+ "requires": {
+ "babel-runtime": "^6.22.0",
+ "babel-traverse": "^6.22.0",
+ "babel-types": "^6.22.0"
+ }
+ },
+ "babel-helper-function-name": {
+ "version": "6.23.0",
+ "resolved": "https://registry.nlark.com/babel-helper-function-name/download/babel-helper-function-name-6.23.0.tgz",
+ "integrity": "sha1-JXQtZxdciQPb5LbLnZ4fy43PI6Y=",
+ "requires": {
+ "babel-helper-get-function-arity": "^6.22.0",
+ "babel-runtime": "^6.22.0",
+ "babel-template": "^6.23.0",
+ "babel-traverse": "^6.23.0",
+ "babel-types": "^6.23.0"
+ }
+ },
+ "babel-helper-get-function-arity": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npm.taobao.org/babel-helper-get-function-arity/download/babel-helper-get-function-arity-6.22.0.tgz",
+ "integrity": "sha1-C+tGStadxzR0EKxq3p8DpQY09c4=",
+ "requires": {
+ "babel-runtime": "^6.22.0",
+ "babel-types": "^6.22.0"
+ }
+ },
+ "babel-helper-hoist-variables": {
+ "version": "6.22.0",
+ "resolved": "https://registry.nlark.com/babel-helper-hoist-variables/download/babel-helper-hoist-variables-6.22.0.tgz",
+ "integrity": "sha1-Pqy/cx2AcFhF3S6XGPYAz7m0unI=",
+ "requires": {
+ "babel-runtime": "^6.22.0",
+ "babel-types": "^6.22.0"
+ }
+ },
+ "babel-helper-optimise-call-expression": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npm.taobao.org/babel-helper-optimise-call-expression/download/babel-helper-optimise-call-expression-6.23.0.tgz",
+ "integrity": "sha1-8+5+7TVbQoITizPQK3g2nkcGIvU=",
+ "requires": {
+ "babel-runtime": "^6.22.0",
+ "babel-types": "^6.23.0"
+ }
+ },
+ "babel-helper-regex": {
+ "version": "6.22.0",
+ "resolved": "https://registry.nlark.com/babel-helper-regex/download/babel-helper-regex-6.22.0.tgz",
+ "integrity": "sha1-efUyvhZHsfDuNHS19cPaWAAdJH0=",
+ "requires": {
+ "babel-runtime": "^6.22.0",
+ "babel-types": "^6.22.0",
+ "lodash": "^4.2.0"
+ }
+ },
+ "babel-helper-remap-async-to-generator": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npm.taobao.org/babel-helper-remap-async-to-generator/download/babel-helper-remap-async-to-generator-6.22.0.tgz",
+ "integrity": "sha1-IYaucyeO0DuLFc7QiWCdqYEFM4M=",
+ "requires": {
+ "babel-helper-function-name": "^6.22.0",
+ "babel-runtime": "^6.22.0",
+ "babel-template": "^6.22.0",
+ "babel-traverse": "^6.22.0",
+ "babel-types": "^6.22.0"
+ }
+ },
+ "babel-helper-replace-supers": {
+ "version": "6.23.0",
+ "resolved": "https://registry.nlark.com/babel-helper-replace-supers/download/babel-helper-replace-supers-6.23.0.tgz",
+ "integrity": "sha1-7q+K2bWOxDN8qUIjus3KH42bS/0=",
+ "requires": {
+ "babel-helper-optimise-call-expression": "^6.23.0",
+ "babel-messages": "^6.23.0",
+ "babel-runtime": "^6.22.0",
+ "babel-template": "^6.23.0",
+ "babel-traverse": "^6.23.0",
+ "babel-types": "^6.23.0"
+ }
+ },
+ "babel-helpers": {
+ "version": "6.23.0",
+ "resolved": "https://registry.nlark.com/babel-helpers/download/babel-helpers-6.23.0.tgz",
+ "integrity": "sha1-T48uCS0LaogIpL3nnCfx4uzw2ZI=",
+ "requires": {
+ "babel-runtime": "^6.22.0",
+ "babel-template": "^6.23.0"
+ }
+ },
+ "babel-loader": {
+ "version": "6.4.1",
+ "resolved": "https://registry.npmmirror.com/babel-loader/download/babel-loader-6.4.1.tgz?cache=0&sync_timestamp=1634769717079&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fbabel-loader%2Fdownload%2Fbabel-loader-6.4.1.tgz",
+ "integrity": "sha1-CzQRLVsHSKjc2/Uaz2+b1C1QuMo=",
+ "requires": {
+ "find-cache-dir": "^0.1.1",
+ "loader-utils": "^0.2.16",
+ "mkdirp": "^0.5.1",
+ "object-assign": "^4.0.1"
+ }
+ },
+ "babel-messages": {
+ "version": "6.23.0",
+ "resolved": "https://registry.nlark.com/babel-messages/download/babel-messages-6.23.0.tgz",
+ "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
+ "requires": {
+ "babel-runtime": "^6.22.0"
+ }
+ },
+ "babel-plugin-check-es2015-constants": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npm.taobao.org/babel-plugin-check-es2015-constants/download/babel-plugin-check-es2015-constants-6.22.0.tgz",
+ "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=",
+ "requires": {
+ "babel-runtime": "^6.22.0"
+ }
+ },
+ "babel-plugin-syntax-async-functions": {
+ "version": "6.13.0",
+ "resolved": "https://registry.npm.taobao.org/babel-plugin-syntax-async-functions/download/babel-plugin-syntax-async-functions-6.13.0.tgz",
+ "integrity": "sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU="
+ },
+ "babel-plugin-syntax-class-properties": {
+ "version": "6.13.0",
+ "resolved": "https://registry.npm.taobao.org/babel-plugin-syntax-class-properties/download/babel-plugin-syntax-class-properties-6.13.0.tgz",
+ "integrity": "sha1-1+sjt5oxf4VDlixQW4J8fWysJ94="
+ },
+ "babel-plugin-syntax-exponentiation-operator": {
+ "version": "6.13.0",
+ "resolved": "https://registry.nlark.com/babel-plugin-syntax-exponentiation-operator/download/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz",
+ "integrity": "sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4="
+ },
+ "babel-plugin-syntax-trailing-function-commas": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npm.taobao.org/babel-plugin-syntax-trailing-function-commas/download/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz",
+ "integrity": "sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM="
+ },
+ "babel-plugin-transform-async-to-generator": {
+ "version": "6.22.0",
+ "resolved": "https://registry.nlark.com/babel-plugin-transform-async-to-generator/download/babel-plugin-transform-async-to-generator-6.22.0.tgz",
+ "integrity": "sha1-GUtpOOwZWtNu/EwzqXGs8A2M014=",
+ "requires": {
+ "babel-helper-remap-async-to-generator": "^6.22.0",
+ "babel-plugin-syntax-async-functions": "^6.8.0",
+ "babel-runtime": "^6.22.0"
+ }
+ },
+ "babel-plugin-transform-class-properties": {
+ "version": "6.23.0",
+ "resolved": "https://registry.nlark.com/babel-plugin-transform-class-properties/download/babel-plugin-transform-class-properties-6.23.0.tgz",
+ "integrity": "sha1-GHt0fuQEOZATVjyZPbA480dUrDs=",
+ "requires": {
+ "babel-helper-function-name": "^6.23.0",
+ "babel-plugin-syntax-class-properties": "^6.8.0",
+ "babel-runtime": "^6.22.0",
+ "babel-template": "^6.23.0"
+ }
+ },
+ "babel-plugin-transform-es2015-arrow-functions": {
+ "version": "6.22.0",
+ "resolved": "https://registry.nlark.com/babel-plugin-transform-es2015-arrow-functions/download/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz",
+ "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=",
+ "requires": {
+ "babel-runtime": "^6.22.0"
+ }
+ },
+ "babel-plugin-transform-es2015-block-scoped-functions": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npm.taobao.org/babel-plugin-transform-es2015-block-scoped-functions/download/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz",
+ "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=",
+ "requires": {
+ "babel-runtime": "^6.22.0"
+ }
+ },
+ "babel-plugin-transform-es2015-block-scoping": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npm.taobao.org/babel-plugin-transform-es2015-block-scoping/download/babel-plugin-transform-es2015-block-scoping-6.23.0.tgz",
+ "integrity": "sha1-5IiVzws3W+FIzXyIebQicHoFO1E=",
+ "requires": {
+ "babel-runtime": "^6.22.0",
+ "babel-template": "^6.23.0",
+ "babel-traverse": "^6.23.0",
+ "babel-types": "^6.23.0",
+ "lodash": "^4.2.0"
+ }
+ },
+ "babel-plugin-transform-es2015-classes": {
+ "version": "6.23.0",
+ "resolved": "https://registry.nlark.com/babel-plugin-transform-es2015-classes/download/babel-plugin-transform-es2015-classes-6.23.0.tgz",
+ "integrity": "sha1-SbU/MmICov0bO7ql4u3YpPeGQ8E=",
+ "requires": {
+ "babel-helper-define-map": "^6.23.0",
+ "babel-helper-function-name": "^6.23.0",
+ "babel-helper-optimise-call-expression": "^6.23.0",
+ "babel-helper-replace-supers": "^6.23.0",
+ "babel-messages": "^6.23.0",
+ "babel-runtime": "^6.22.0",
+ "babel-template": "^6.23.0",
+ "babel-traverse": "^6.23.0",
+ "babel-types": "^6.23.0"
+ }
+ },
+ "babel-plugin-transform-es2015-computed-properties": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npm.taobao.org/babel-plugin-transform-es2015-computed-properties/download/babel-plugin-transform-es2015-computed-properties-6.22.0.tgz",
+ "integrity": "sha1-fDg+lim7pIIMEbBCW91ikPfwV+c=",
+ "requires": {
+ "babel-runtime": "^6.22.0",
+ "babel-template": "^6.22.0"
+ }
+ },
+ "babel-plugin-transform-es2015-destructuring": {
+ "version": "6.23.0",
+ "resolved": "https://registry.nlark.com/babel-plugin-transform-es2015-destructuring/download/babel-plugin-transform-es2015-destructuring-6.23.0.tgz",
+ "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=",
+ "requires": {
+ "babel-runtime": "^6.22.0"
+ }
+ },
+ "babel-plugin-transform-es2015-duplicate-keys": {
+ "version": "6.22.0",
+ "resolved": "https://registry.nlark.com/babel-plugin-transform-es2015-duplicate-keys/download/babel-plugin-transform-es2015-duplicate-keys-6.22.0.tgz",
+ "integrity": "sha1-ZyOXAxwhYQ1y3Su7C6n7Ynfhw2s=",
+ "requires": {
+ "babel-runtime": "^6.22.0",
+ "babel-types": "^6.22.0"
+ }
+ },
+ "babel-plugin-transform-es2015-for-of": {
+ "version": "6.23.0",
+ "resolved": "https://registry.nlark.com/babel-plugin-transform-es2015-for-of/download/babel-plugin-transform-es2015-for-of-6.23.0.tgz",
+ "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=",
+ "requires": {
+ "babel-runtime": "^6.22.0"
+ }
+ },
+ "babel-plugin-transform-es2015-function-name": {
+ "version": "6.22.0",
+ "resolved": "https://registry.nlark.com/babel-plugin-transform-es2015-function-name/download/babel-plugin-transform-es2015-function-name-6.22.0.tgz",
+ "integrity": "sha1-9fzIsJCT+aI8dqw9njksPsS3cQQ=",
+ "requires": {
+ "babel-helper-function-name": "^6.22.0",
+ "babel-runtime": "^6.22.0",
+ "babel-types": "^6.22.0"
+ }
+ },
+ "babel-plugin-transform-es2015-literals": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npm.taobao.org/babel-plugin-transform-es2015-literals/download/babel-plugin-transform-es2015-literals-6.22.0.tgz",
+ "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=",
+ "requires": {
+ "babel-runtime": "^6.22.0"
+ }
+ },
+ "babel-plugin-transform-es2015-modules-amd": {
+ "version": "6.24.0",
+ "resolved": "https://registry.npm.taobao.org/babel-plugin-transform-es2015-modules-amd/download/babel-plugin-transform-es2015-modules-amd-6.24.0.tgz",
+ "integrity": "sha1-oZEfubfsfgWkOmPFmVAHVXvPai4=",
+ "requires": {
+ "babel-plugin-transform-es2015-modules-commonjs": "^6.24.0",
+ "babel-runtime": "^6.22.0",
+ "babel-template": "^6.22.0"
+ }
+ },
+ "babel-plugin-transform-es2015-modules-commonjs": {
+ "version": "6.24.0",
+ "resolved": "https://registry.nlark.com/babel-plugin-transform-es2015-modules-commonjs/download/babel-plugin-transform-es2015-modules-commonjs-6.24.0.tgz",
+ "integrity": "sha1-6SGu+3LCzCbLA9EHYmFWQTIiE08=",
+ "requires": {
+ "babel-plugin-transform-strict-mode": "^6.22.0",
+ "babel-runtime": "^6.22.0",
+ "babel-template": "^6.23.0",
+ "babel-types": "^6.23.0"
+ }
+ },
+ "babel-plugin-transform-es2015-modules-systemjs": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npm.taobao.org/babel-plugin-transform-es2015-modules-systemjs/download/babel-plugin-transform-es2015-modules-systemjs-6.23.0.tgz",
+ "integrity": "sha1-rjRpIn/6w5sDENkP7HO/3E9jF7A=",
+ "requires": {
+ "babel-helper-hoist-variables": "^6.22.0",
+ "babel-runtime": "^6.22.0",
+ "babel-template": "^6.23.0"
+ }
+ },
+ "babel-plugin-transform-es2015-modules-umd": {
+ "version": "6.24.0",
+ "resolved": "https://registry.nlark.com/babel-plugin-transform-es2015-modules-umd/download/babel-plugin-transform-es2015-modules-umd-6.24.0.tgz",
+ "integrity": "sha1-/V+mNSHK6NJzknw5WK/XwGdzNFA=",
+ "requires": {
+ "babel-plugin-transform-es2015-modules-amd": "^6.24.0",
+ "babel-runtime": "^6.22.0",
+ "babel-template": "^6.23.0"
+ }
+ },
+ "babel-plugin-transform-es2015-object-super": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npm.taobao.org/babel-plugin-transform-es2015-object-super/download/babel-plugin-transform-es2015-object-super-6.22.0.tgz",
+ "integrity": "sha1-2qYOEUoELqdp3VP+Uo/IIxHrmPw=",
+ "requires": {
+ "babel-helper-replace-supers": "^6.22.0",
+ "babel-runtime": "^6.22.0"
+ }
+ },
+ "babel-plugin-transform-es2015-parameters": {
+ "version": "6.23.0",
+ "resolved": "https://registry.nlark.com/babel-plugin-transform-es2015-parameters/download/babel-plugin-transform-es2015-parameters-6.23.0.tgz",
+ "integrity": "sha1-OiqrtwyK+UXVzjhvGkJQYlqDrjs=",
+ "requires": {
+ "babel-helper-call-delegate": "^6.22.0",
+ "babel-helper-get-function-arity": "^6.22.0",
+ "babel-runtime": "^6.22.0",
+ "babel-template": "^6.23.0",
+ "babel-traverse": "^6.23.0",
+ "babel-types": "^6.23.0"
+ }
+ },
+ "babel-plugin-transform-es2015-shorthand-properties": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npm.taobao.org/babel-plugin-transform-es2015-shorthand-properties/download/babel-plugin-transform-es2015-shorthand-properties-6.22.0.tgz",
+ "integrity": "sha1-i6d24K/6pgv/IekhQDuKZSov9yM=",
+ "requires": {
+ "babel-runtime": "^6.22.0",
+ "babel-types": "^6.22.0"
+ }
+ },
+ "babel-plugin-transform-es2015-spread": {
+ "version": "6.22.0",
+ "resolved": "https://registry.nlark.com/babel-plugin-transform-es2015-spread/download/babel-plugin-transform-es2015-spread-6.22.0.tgz",
+ "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=",
+ "requires": {
+ "babel-runtime": "^6.22.0"
+ }
+ },
+ "babel-plugin-transform-es2015-sticky-regex": {
+ "version": "6.22.0",
+ "resolved": "https://registry.nlark.com/babel-plugin-transform-es2015-sticky-regex/download/babel-plugin-transform-es2015-sticky-regex-6.22.0.tgz",
+ "integrity": "sha1-qzFoKehm7j9LnrlpOXV9GaW8RZM=",
+ "requires": {
+ "babel-helper-regex": "^6.22.0",
+ "babel-runtime": "^6.22.0",
+ "babel-types": "^6.22.0"
+ }
+ },
+ "babel-plugin-transform-es2015-template-literals": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npm.taobao.org/babel-plugin-transform-es2015-template-literals/download/babel-plugin-transform-es2015-template-literals-6.22.0.tgz",
+ "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=",
+ "requires": {
+ "babel-runtime": "^6.22.0"
+ }
+ },
+ "babel-plugin-transform-es2015-typeof-symbol": {
+ "version": "6.23.0",
+ "resolved": "https://registry.nlark.com/babel-plugin-transform-es2015-typeof-symbol/download/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz",
+ "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=",
+ "requires": {
+ "babel-runtime": "^6.22.0"
+ }
+ },
+ "babel-plugin-transform-es2015-unicode-regex": {
+ "version": "6.22.0",
+ "resolved": "https://registry.nlark.com/babel-plugin-transform-es2015-unicode-regex/download/babel-plugin-transform-es2015-unicode-regex-6.22.0.tgz",
+ "integrity": "sha1-jZzCfn7h3s/mVFT7mGRSoEphPSA=",
+ "requires": {
+ "babel-helper-regex": "^6.22.0",
+ "babel-runtime": "^6.22.0",
+ "regexpu-core": "^2.0.0"
+ }
+ },
+ "babel-plugin-transform-exponentiation-operator": {
+ "version": "6.22.0",
+ "resolved": "https://registry.nlark.com/babel-plugin-transform-exponentiation-operator/download/babel-plugin-transform-exponentiation-operator-6.22.0.tgz",
+ "integrity": "sha1-1XyDNSgZGOVO8FMRjObrEIRoCE0=",
+ "requires": {
+ "babel-helper-builder-binary-assignment-operator-visitor": "^6.22.0",
+ "babel-plugin-syntax-exponentiation-operator": "^6.8.0",
+ "babel-runtime": "^6.22.0"
+ }
+ },
+ "babel-plugin-transform-regenerator": {
+ "version": "6.22.0",
+ "resolved": "https://registry.nlark.com/babel-plugin-transform-regenerator/download/babel-plugin-transform-regenerator-6.22.0.tgz",
+ "integrity": "sha1-ZXQFk6MZxEUiFXU41pC4QJRhfqY=",
+ "requires": {
+ "regenerator-transform": "0.9.8"
+ }
+ },
+ "babel-plugin-transform-strict-mode": {
+ "version": "6.22.0",
+ "resolved": "https://registry.nlark.com/babel-plugin-transform-strict-mode/download/babel-plugin-transform-strict-mode-6.22.0.tgz",
+ "integrity": "sha1-4AjfATQP3IfpWdplmRt+BZcMjHw=",
+ "requires": {
+ "babel-runtime": "^6.22.0",
+ "babel-types": "^6.22.0"
+ }
+ },
+ "babel-polyfill": {
+ "version": "6.23.0",
+ "resolved": "https://registry.nlark.com/babel-polyfill/download/babel-polyfill-6.23.0.tgz",
+ "integrity": "sha1-g2TKYt+Or7gwSZ9pkXdGbDsDSZ0=",
+ "requires": {
+ "babel-runtime": "^6.22.0",
+ "core-js": "^2.4.0",
+ "regenerator-runtime": "^0.10.0"
+ }
+ },
+ "babel-preset-env": {
+ "version": "1.3.2",
+ "resolved": "https://registry.nlark.com/babel-preset-env/download/babel-preset-env-1.3.2.tgz",
+ "integrity": "sha1-COq9K/gQw2eAaffgUjI0GfFEh0k=",
+ "requires": {
+ "babel-plugin-check-es2015-constants": "^6.22.0",
+ "babel-plugin-syntax-trailing-function-commas": "^6.22.0",
+ "babel-plugin-transform-async-to-generator": "^6.22.0",
+ "babel-plugin-transform-es2015-arrow-functions": "^6.22.0",
+ "babel-plugin-transform-es2015-block-scoped-functions": "^6.22.0",
+ "babel-plugin-transform-es2015-block-scoping": "^6.23.0",
+ "babel-plugin-transform-es2015-classes": "^6.23.0",
+ "babel-plugin-transform-es2015-computed-properties": "^6.22.0",
+ "babel-plugin-transform-es2015-destructuring": "^6.23.0",
+ "babel-plugin-transform-es2015-duplicate-keys": "^6.22.0",
+ "babel-plugin-transform-es2015-for-of": "^6.23.0",
+ "babel-plugin-transform-es2015-function-name": "^6.22.0",
+ "babel-plugin-transform-es2015-literals": "^6.22.0",
+ "babel-plugin-transform-es2015-modules-amd": "^6.22.0",
+ "babel-plugin-transform-es2015-modules-commonjs": "^6.23.0",
+ "babel-plugin-transform-es2015-modules-systemjs": "^6.23.0",
+ "babel-plugin-transform-es2015-modules-umd": "^6.23.0",
+ "babel-plugin-transform-es2015-object-super": "^6.22.0",
+ "babel-plugin-transform-es2015-parameters": "^6.23.0",
+ "babel-plugin-transform-es2015-shorthand-properties": "^6.22.0",
+ "babel-plugin-transform-es2015-spread": "^6.22.0",
+ "babel-plugin-transform-es2015-sticky-regex": "^6.22.0",
+ "babel-plugin-transform-es2015-template-literals": "^6.22.0",
+ "babel-plugin-transform-es2015-typeof-symbol": "^6.23.0",
+ "babel-plugin-transform-es2015-unicode-regex": "^6.22.0",
+ "babel-plugin-transform-exponentiation-operator": "^6.22.0",
+ "babel-plugin-transform-regenerator": "^6.22.0",
+ "browserslist": "^1.4.0",
+ "invariant": "^2.2.2"
+ }
+ },
+ "babel-preset-es2015": {
+ "version": "6.24.0",
+ "resolved": "https://registry.npmmirror.com/babel-preset-es2015/download/babel-preset-es2015-6.24.0.tgz",
+ "integrity": "sha1-wWLWixkyaW4DbNMRDcHM0wPSZzo=",
+ "requires": {
+ "babel-plugin-check-es2015-constants": "^6.22.0",
+ "babel-plugin-transform-es2015-arrow-functions": "^6.22.0",
+ "babel-plugin-transform-es2015-block-scoped-functions": "^6.22.0",
+ "babel-plugin-transform-es2015-block-scoping": "^6.22.0",
+ "babel-plugin-transform-es2015-classes": "^6.22.0",
+ "babel-plugin-transform-es2015-computed-properties": "^6.22.0",
+ "babel-plugin-transform-es2015-destructuring": "^6.22.0",
+ "babel-plugin-transform-es2015-duplicate-keys": "^6.22.0",
+ "babel-plugin-transform-es2015-for-of": "^6.22.0",
+ "babel-plugin-transform-es2015-function-name": "^6.22.0",
+ "babel-plugin-transform-es2015-literals": "^6.22.0",
+ "babel-plugin-transform-es2015-modules-amd": "^6.24.0",
+ "babel-plugin-transform-es2015-modules-commonjs": "^6.24.0",
+ "babel-plugin-transform-es2015-modules-systemjs": "^6.22.0",
+ "babel-plugin-transform-es2015-modules-umd": "^6.24.0",
+ "babel-plugin-transform-es2015-object-super": "^6.22.0",
+ "babel-plugin-transform-es2015-parameters": "^6.22.0",
+ "babel-plugin-transform-es2015-shorthand-properties": "^6.22.0",
+ "babel-plugin-transform-es2015-spread": "^6.22.0",
+ "babel-plugin-transform-es2015-sticky-regex": "^6.22.0",
+ "babel-plugin-transform-es2015-template-literals": "^6.22.0",
+ "babel-plugin-transform-es2015-typeof-symbol": "^6.22.0",
+ "babel-plugin-transform-es2015-unicode-regex": "^6.22.0",
+ "babel-plugin-transform-regenerator": "^6.22.0"
+ }
+ },
+ "babel-register": {
+ "version": "6.24.0",
+ "resolved": "https://registry.npm.taobao.org/babel-register/download/babel-register-6.24.0.tgz",
+ "integrity": "sha1-Xon4RjuplwNW0C6wfavjMIsIDP0=",
+ "requires": {
+ "babel-core": "^6.24.0",
+ "babel-runtime": "^6.22.0",
+ "core-js": "^2.4.0",
+ "home-or-tmp": "^2.0.0",
+ "lodash": "^4.2.0",
+ "mkdirp": "^0.5.1",
+ "source-map-support": "^0.4.2"
+ }
+ },
+ "babel-runtime": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npm.taobao.org/babel-runtime/download/babel-runtime-6.23.0.tgz",
+ "integrity": "sha1-CpSJ8UTecO+zzkMArM2zKeL8VDs=",
+ "requires": {
+ "core-js": "^2.4.0",
+ "regenerator-runtime": "^0.10.0"
+ }
+ },
+ "babel-template": {
+ "version": "6.23.0",
+ "resolved": "https://registry.nlark.com/babel-template/download/babel-template-6.23.0.tgz",
+ "integrity": "sha1-BNTycK27OqcEqBQ64m+qUpI45jg=",
+ "requires": {
+ "babel-runtime": "^6.22.0",
+ "babel-traverse": "^6.23.0",
+ "babel-types": "^6.23.0",
+ "babylon": "^6.11.0",
+ "lodash": "^4.2.0"
+ }
+ },
+ "babel-traverse": {
+ "version": "6.23.1",
+ "resolved": "https://registry.nlark.com/babel-traverse/download/babel-traverse-6.23.1.tgz",
+ "integrity": "sha1-08tZAQ7NBql9gTEAZflmtpnhT0g=",
+ "requires": {
+ "babel-code-frame": "^6.22.0",
+ "babel-messages": "^6.23.0",
+ "babel-runtime": "^6.22.0",
+ "babel-types": "^6.23.0",
+ "babylon": "^6.15.0",
+ "debug": "^2.2.0",
+ "globals": "^9.0.0",
+ "invariant": "^2.2.0",
+ "lodash": "^4.2.0"
+ }
+ },
+ "babel-types": {
+ "version": "6.23.0",
+ "resolved": "https://registry.nlark.com/babel-types/download/babel-types-6.23.0.tgz",
+ "integrity": "sha1-uxcXnXU4utOM0MnhFdNA935+ms8=",
+ "requires": {
+ "babel-runtime": "^6.22.0",
+ "esutils": "^2.0.2",
+ "lodash": "^4.2.0",
+ "to-fast-properties": "^1.0.1"
+ }
+ },
+ "babylon": {
+ "version": "6.16.1",
+ "resolved": "https://registry.npm.taobao.org/babylon/download/babylon-6.16.1.tgz",
+ "integrity": "sha1-MMWiL0gZeKnn+M399JaxHZS0BNM="
+ },
+ "balanced-match": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npm.taobao.org/balanced-match/download/balanced-match-0.4.2.tgz",
+ "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg="
+ },
+ "base64-js": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npm.taobao.org/base64-js/download/base64-js-1.2.0.tgz",
+ "integrity": "sha1-o5mS1yNYSBGYK+XikLtqU9hnAPE="
+ },
+ "big.js": {
+ "version": "3.1.3",
+ "resolved": "https://registry.nlark.com/big.js/download/big.js-3.1.3.tgz",
+ "integrity": "sha1-TK2iGTZS6zyp7I5VyQFWacmAaXg="
+ },
+ "binary-extensions": {
+ "version": "1.8.0",
+ "resolved": "https://registry.nlark.com/binary-extensions/download/binary-extensions-1.8.0.tgz",
+ "integrity": "sha1-SOyNFt9Dd+rl+liEaCSAr02Vx3Q="
+ },
+ "bn.js": {
+ "version": "4.11.6",
+ "resolved": "https://registry.npm.taobao.org/bn.js/download/bn.js-4.11.6.tgz",
+ "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU="
+ },
+ "brace-expansion": {
+ "version": "1.1.6",
+ "resolved": "https://registry.nlark.com/brace-expansion/download/brace-expansion-1.1.6.tgz",
+ "integrity": "sha1-cZfX6qm4fmSDkOph/GbIRCdCDfk=",
+ "requires": {
+ "balanced-match": "^0.4.1",
+ "concat-map": "0.0.1"
+ }
+ },
+ "braces": {
+ "version": "1.8.5",
+ "resolved": "https://registry.npm.taobao.org/braces/download/braces-1.8.5.tgz",
+ "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=",
+ "requires": {
+ "expand-range": "^1.8.1",
+ "preserve": "^0.2.0",
+ "repeat-element": "^1.1.2"
+ }
+ },
+ "brorand": {
+ "version": "1.1.0",
+ "resolved": "https://registry.nlark.com/brorand/download/brorand-1.1.0.tgz",
+ "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8="
+ },
+ "browserify-aes": {
+ "version": "1.0.6",
+ "resolved": "https://registry.nlark.com/browserify-aes/download/browserify-aes-1.0.6.tgz",
+ "integrity": "sha1-Xncl297x/Vkw1OurSFZ85FHEigo=",
+ "requires": {
+ "buffer-xor": "^1.0.2",
+ "cipher-base": "^1.0.0",
+ "create-hash": "^1.1.0",
+ "evp_bytestokey": "^1.0.0",
+ "inherits": "^2.0.1"
+ }
+ },
+ "browserify-cipher": {
+ "version": "1.0.0",
+ "resolved": "https://registry.nlark.com/browserify-cipher/download/browserify-cipher-1.0.0.tgz",
+ "integrity": "sha1-mYgkSHS/XtTijalWZtzWasj8Njo=",
+ "requires": {
+ "browserify-aes": "^1.0.4",
+ "browserify-des": "^1.0.0",
+ "evp_bytestokey": "^1.0.0"
+ }
+ },
+ "browserify-des": {
+ "version": "1.0.0",
+ "resolved": "https://registry.nlark.com/browserify-des/download/browserify-des-1.0.0.tgz",
+ "integrity": "sha1-2qJ3cXRwki7S/hhZQRihdUOXId0=",
+ "requires": {
+ "cipher-base": "^1.0.1",
+ "des.js": "^1.0.0",
+ "inherits": "^2.0.1"
+ }
+ },
+ "browserify-rsa": {
+ "version": "4.0.1",
+ "resolved": "https://registry.nlark.com/browserify-rsa/download/browserify-rsa-4.0.1.tgz",
+ "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=",
+ "requires": {
+ "bn.js": "^4.1.0",
+ "randombytes": "^2.0.1"
+ }
+ },
+ "browserify-sign": {
+ "version": "4.0.4",
+ "resolved": "https://registry.nlark.com/browserify-sign/download/browserify-sign-4.0.4.tgz",
+ "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=",
+ "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.1.4",
+ "resolved": "https://registry.nlark.com/browserify-zlib/download/browserify-zlib-0.1.4.tgz",
+ "integrity": "sha1-uzX4pRn2AOD6a4SFJByXnQFB+y0=",
+ "requires": {
+ "pako": "~0.2.0"
+ }
+ },
+ "browserslist": {
+ "version": "1.7.7",
+ "resolved": "https://registry.npmmirror.com/browserslist/download/browserslist-1.7.7.tgz",
+ "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=",
+ "requires": {
+ "caniuse-db": "^1.0.30000639",
+ "electron-to-chromium": "^1.2.7"
+ }
+ },
+ "buffer": {
+ "version": "4.9.1",
+ "resolved": "https://registry.nlark.com/buffer/download/buffer-4.9.1.tgz",
+ "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=",
+ "requires": {
+ "base64-js": "^1.0.2",
+ "ieee754": "^1.1.4",
+ "isarray": "^1.0.0"
+ }
+ },
+ "buffer-shims": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npm.taobao.org/buffer-shims/download/buffer-shims-1.0.0.tgz",
+ "integrity": "sha1-mXjOMXOIxkmth5MCjDR37wRKi1E="
+ },
+ "buffer-xor": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npm.taobao.org/buffer-xor/download/buffer-xor-1.0.3.tgz",
+ "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk="
+ },
+ "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="
+ },
+ "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="
+ },
+ "caller-path": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmmirror.com/caller-path/download/caller-path-0.1.0.tgz?cache=0&sync_timestamp=1633674209796&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fcaller-path%2Fdownload%2Fcaller-path-0.1.0.tgz",
+ "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=",
+ "requires": {
+ "callsites": "^0.2.0"
+ }
+ },
+ "callsites": {
+ "version": "0.2.0",
+ "resolved": "https://registry.nlark.com/callsites/download/callsites-0.2.0.tgz?cache=0&sync_timestamp=1628464722297&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcallsites%2Fdownload%2Fcallsites-0.2.0.tgz",
+ "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo="
+ },
+ "camelcase": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmmirror.com/camelcase/download/camelcase-1.2.1.tgz?cache=0&sync_timestamp=1636945205805&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fcamelcase%2Fdownload%2Fcamelcase-1.2.1.tgz",
+ "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk="
+ },
+ "caniuse-db": {
+ "version": "1.0.30000646",
+ "resolved": "https://registry.npmmirror.com/caniuse-db/download/caniuse-db-1.0.30000646.tgz",
+ "integrity": "sha1-xyS5DWHfJChuAV/FKNBiBzwA3vQ="
+ },
+ "center-align": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npm.taobao.org/center-align/download/center-align-0.1.3.tgz",
+ "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=",
+ "requires": {
+ "align-text": "^0.1.3",
+ "lazy-cache": "^1.0.3"
+ }
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.nlark.com/chalk/download/chalk-1.1.3.tgz?cache=0&sync_timestamp=1627646697260&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fchalk%2Fdownload%2Fchalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "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"
+ }
+ },
+ "chokidar": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmmirror.com/chokidar/download/chokidar-1.6.1.tgz",
+ "integrity": "sha1-L0RHq16W5Q+z14n9kNTHLg5McMI=",
+ "requires": {
+ "anymatch": "^1.3.0",
+ "async-each": "^1.0.0",
+ "fsevents": "^1.0.0",
+ "glob-parent": "^2.0.0",
+ "inherits": "^2.0.1",
+ "is-binary-path": "^1.0.0",
+ "is-glob": "^2.0.0",
+ "path-is-absolute": "^1.0.0",
+ "readdirp": "^2.0.0"
+ }
+ },
+ "cipher-base": {
+ "version": "1.0.3",
+ "resolved": "https://registry.nlark.com/cipher-base/download/cipher-base-1.0.3.tgz",
+ "integrity": "sha1-7qvxlEGc6QDaMBjCB9IS8qbfCgc=",
+ "requires": {
+ "inherits": "^2.0.1"
+ }
+ },
+ "circular-json": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmmirror.com/circular-json/download/circular-json-0.3.1.tgz",
+ "integrity": "sha1-vos2rvzN6LPKeqLWr8B6NyQsDS0="
+ },
+ "cli-cursor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.nlark.com/cli-cursor/download/cli-cursor-1.0.2.tgz?cache=0&sync_timestamp=1629747506749&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcli-cursor%2Fdownload%2Fcli-cursor-1.0.2.tgz",
+ "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=",
+ "requires": {
+ "restore-cursor": "^1.0.1"
+ }
+ },
+ "cli-width": {
+ "version": "2.1.0",
+ "resolved": "https://registry.nlark.com/cli-width/download/cli-width-2.1.0.tgz",
+ "integrity": "sha1-sjTKIJsp72b8UY2bmNWEewDt8Ao="
+ },
+ "cliui": {
+ "version": "2.1.0",
+ "resolved": "https://registry.nlark.com/cliui/download/cliui-2.1.0.tgz",
+ "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=",
+ "requires": {
+ "center-align": "^0.1.1",
+ "right-align": "^0.1.1",
+ "wordwrap": "0.0.2"
+ }
+ },
+ "clone": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npm.taobao.org/clone/download/clone-2.1.1.tgz",
+ "integrity": "sha1-0hfR6WERjjrJpLi7oyhVU79kfNs="
+ },
+ "co": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npm.taobao.org/co/download/co-4.6.0.tgz",
+ "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ="
+ },
+ "code-point-at": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmmirror.com/code-point-at/download/code-point-at-1.1.0.tgz",
+ "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c="
+ },
+ "commander": {
+ "version": "2.9.0",
+ "resolved": "https://registry.npmmirror.com/commander/download/commander-2.9.0.tgz",
+ "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=",
+ "requires": {
+ "graceful-readlink": ">= 1.0.0"
+ }
+ },
+ "commondir": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npm.taobao.org/commondir/download/commondir-1.0.1.tgz",
+ "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs="
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.nlark.com/concat-map/download/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
+ },
+ "concat-stream": {
+ "version": "1.6.0",
+ "resolved": "https://registry.nlark.com/concat-stream/download/concat-stream-1.6.0.tgz",
+ "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=",
+ "requires": {
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.2.2",
+ "typedarray": "^0.0.6"
+ }
+ },
+ "console-browserify": {
+ "version": "1.1.0",
+ "resolved": "https://registry.nlark.com/console-browserify/download/console-browserify-1.1.0.tgz",
+ "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=",
+ "requires": {
+ "date-now": "^0.1.4"
+ }
+ },
+ "constants-browserify": {
+ "version": "1.0.0",
+ "resolved": "https://registry.nlark.com/constants-browserify/download/constants-browserify-1.0.0.tgz",
+ "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U="
+ },
+ "contains-path": {
+ "version": "0.1.0",
+ "resolved": "https://registry.nlark.com/contains-path/download/contains-path-0.1.0.tgz",
+ "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo="
+ },
+ "convert-source-map": {
+ "version": "1.5.0",
+ "resolved": "https://registry.nlark.com/convert-source-map/download/convert-source-map-1.5.0.tgz?cache=0&sync_timestamp=1624045508580&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fconvert-source-map%2Fdownload%2Fconvert-source-map-1.5.0.tgz",
+ "integrity": "sha1-ms1whRxtXf3ZPZKC5e35SgP/RrU="
+ },
+ "core-js": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmmirror.com/core-js/download/core-js-2.4.1.tgz",
+ "integrity": "sha1-TekR5mew6ukSTjQlS1OupvxhjT4="
+ },
+ "core-util-is": {
+ "version": "1.0.2",
+ "resolved": "https://registry.nlark.com/core-util-is/download/core-util-is-1.0.2.tgz",
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
+ },
+ "create-ecdh": {
+ "version": "4.0.0",
+ "resolved": "https://registry.nlark.com/create-ecdh/download/create-ecdh-4.0.0.tgz",
+ "integrity": "sha1-iIxyNZbN92EvZJgjPuvXo1MBc30=",
+ "requires": {
+ "bn.js": "^4.1.0",
+ "elliptic": "^6.0.0"
+ }
+ },
+ "create-hash": {
+ "version": "1.1.2",
+ "resolved": "https://registry.nlark.com/create-hash/download/create-hash-1.1.2.tgz",
+ "integrity": "sha1-USEAYte7dHn2xlu0GpIgix1hq60=",
+ "requires": {
+ "cipher-base": "^1.0.1",
+ "inherits": "^2.0.1",
+ "ripemd160": "^1.0.0",
+ "sha.js": "^2.3.6"
+ }
+ },
+ "create-hmac": {
+ "version": "1.1.4",
+ "resolved": "https://registry.nlark.com/create-hmac/download/create-hmac-1.1.4.tgz",
+ "integrity": "sha1-0/tLolPriz9W456i+8uK90e9MXA=",
+ "requires": {
+ "create-hash": "^1.1.0",
+ "inherits": "^2.0.1"
+ }
+ },
+ "crypto-browserify": {
+ "version": "3.11.0",
+ "resolved": "https://registry.npm.taobao.org/crypto-browserify/download/crypto-browserify-3.11.0.tgz",
+ "integrity": "sha1-NlKgkGq5sqfgw85mpAjpV6JIVSI=",
+ "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"
+ }
+ },
+ "d": {
+ "version": "1.0.0",
+ "resolved": "https://registry.nlark.com/d/download/d-1.0.0.tgz",
+ "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=",
+ "requires": {
+ "es5-ext": "^0.10.9"
+ }
+ },
+ "damerau-levenshtein": {
+ "version": "1.0.4",
+ "resolved": "https://registry.nlark.com/damerau-levenshtein/download/damerau-levenshtein-1.0.4.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fdamerau-levenshtein%2Fdownload%2Fdamerau-levenshtein-1.0.4.tgz",
+ "integrity": "sha1-AxkcQyy27qFou3fzpV/9zLiXhRQ="
+ },
+ "date-now": {
+ "version": "0.1.4",
+ "resolved": "https://registry.nlark.com/date-now/download/date-now-0.1.4.tgz",
+ "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs="
+ },
+ "debug": {
+ "version": "2.6.3",
+ "resolved": "https://registry.npmmirror.com/debug/download/debug-2.6.3.tgz",
+ "integrity": "sha1-D364wwll7AjHKsz6ATDIt5mEFB0=",
+ "requires": {
+ "ms": "0.7.2"
+ }
+ },
+ "decamelize": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmmirror.com/decamelize/download/decamelize-1.2.0.tgz?cache=0&sync_timestamp=1633055756574&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fdecamelize%2Fdownload%2Fdecamelize-1.2.0.tgz",
+ "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA="
+ },
+ "deep-equal": {
+ "version": "1.0.1",
+ "resolved": "https://registry.nlark.com/deep-equal/download/deep-equal-1.0.1.tgz",
+ "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU="
+ },
+ "deep-is": {
+ "version": "0.1.3",
+ "resolved": "https://registry.nlark.com/deep-is/download/deep-is-0.1.3.tgz",
+ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ="
+ },
+ "define-properties": {
+ "version": "1.1.2",
+ "resolved": "https://registry.nlark.com/define-properties/download/define-properties-1.1.2.tgz",
+ "integrity": "sha1-g6c/L+pWmJj7c3GTyPhzyvbUXJQ=",
+ "requires": {
+ "foreach": "^2.0.5",
+ "object-keys": "^1.0.8"
+ }
+ },
+ "del": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npm.taobao.org/del/download/del-2.2.2.tgz",
+ "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=",
+ "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"
+ }
+ },
+ "des.js": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npm.taobao.org/des.js/download/des.js-1.0.0.tgz",
+ "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=",
+ "requires": {
+ "inherits": "^2.0.1",
+ "minimalistic-assert": "^1.0.0"
+ }
+ },
+ "detect-indent": {
+ "version": "4.0.0",
+ "resolved": "https://registry.nlark.com/detect-indent/download/detect-indent-4.0.0.tgz",
+ "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=",
+ "requires": {
+ "repeating": "^2.0.0"
+ }
+ },
+ "diffie-hellman": {
+ "version": "5.0.2",
+ "resolved": "https://registry.nlark.com/diffie-hellman/download/diffie-hellman-5.0.2.tgz",
+ "integrity": "sha1-tYNXOScM/ias9jIJn97SoH8gnl4=",
+ "requires": {
+ "bn.js": "^4.1.0",
+ "miller-rabin": "^4.0.0",
+ "randombytes": "^2.0.0"
+ }
+ },
+ "doctrine": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npm.taobao.org/doctrine/download/doctrine-2.0.0.tgz",
+ "integrity": "sha1-xz2NKQnSIpHhoAejlYBNqLZl/mM=",
+ "requires": {
+ "esutils": "^2.0.2",
+ "isarray": "^1.0.0"
+ }
+ },
+ "domain-browser": {
+ "version": "1.1.7",
+ "resolved": "https://registry.nlark.com/domain-browser/download/domain-browser-1.1.7.tgz?cache=0&sync_timestamp=1627591557212&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fdomain-browser%2Fdownload%2Fdomain-browser-1.1.7.tgz",
+ "integrity": "sha1-hnqksJP6oF8d4IwG9NeyH9+GmLw="
+ },
+ "electron-to-chromium": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmmirror.com/electron-to-chromium/download/electron-to-chromium-1.3.2.tgz",
+ "integrity": "sha1-uM5ck7MI2w6S9tBDXEbd7I9jY6s="
+ },
+ "elliptic": {
+ "version": "6.4.0",
+ "resolved": "https://registry.npm.taobao.org/elliptic/download/elliptic-6.4.0.tgz",
+ "integrity": "sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=",
+ "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": "6.4.1",
+ "resolved": "https://registry.npmmirror.com/emoji-regex/download/emoji-regex-6.4.1.tgz?cache=0&sync_timestamp=1632751333727&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Femoji-regex%2Fdownload%2Femoji-regex-6.4.1.tgz",
+ "integrity": "sha1-d0hv6c1FQh0mCmI4uI1yHi+tIFA="
+ },
+ "emojis-list": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npm.taobao.org/emojis-list/download/emojis-list-2.1.0.tgz",
+ "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k="
+ },
+ "enhanced-resolve": {
+ "version": "3.1.0",
+ "resolved": "https://registry.nlark.com/enhanced-resolve/download/enhanced-resolve-3.1.0.tgz",
+ "integrity": "sha1-n0tib1dyRe3PSyrYPYbhf09CHew=",
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "memory-fs": "^0.4.0",
+ "object-assign": "^4.0.1",
+ "tapable": "^0.2.5"
+ }
+ },
+ "errno": {
+ "version": "0.1.4",
+ "resolved": "https://registry.nlark.com/errno/download/errno-0.1.4.tgz",
+ "integrity": "sha1-uJbiOp5ei6M4cfyZar02NfyaHH0=",
+ "requires": {
+ "prr": "~0.0.0"
+ }
+ },
+ "error-ex": {
+ "version": "1.3.1",
+ "resolved": "https://registry.nlark.com/error-ex/download/error-ex-1.3.1.tgz",
+ "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=",
+ "requires": {
+ "is-arrayish": "^0.2.1"
+ }
+ },
+ "es-abstract": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmmirror.com/es-abstract/download/es-abstract-1.7.0.tgz?cache=0&sync_timestamp=1633234313248&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fes-abstract%2Fdownload%2Fes-abstract-1.7.0.tgz",
+ "integrity": "sha1-363ndOAb/Nl/lhgCmMRJyGI/uUw=",
+ "requires": {
+ "es-to-primitive": "^1.1.1",
+ "function-bind": "^1.1.0",
+ "is-callable": "^1.1.3",
+ "is-regex": "^1.0.3"
+ }
+ },
+ "es-to-primitive": {
+ "version": "1.1.1",
+ "resolved": "https://registry.nlark.com/es-to-primitive/download/es-to-primitive-1.1.1.tgz",
+ "integrity": "sha1-RTVSSKiJeQNLZ5Lhm7gfK3l13Q0=",
+ "requires": {
+ "is-callable": "^1.1.1",
+ "is-date-object": "^1.0.1",
+ "is-symbol": "^1.0.1"
+ }
+ },
+ "es5-ext": {
+ "version": "0.10.15",
+ "resolved": "https://registry.nlark.com/es5-ext/download/es5-ext-0.10.15.tgz",
+ "integrity": "sha1-wzClk0we4hKEp8CBqG5f2TfJHqY=",
+ "requires": {
+ "es6-iterator": "2",
+ "es6-symbol": "~3.1"
+ }
+ },
+ "es6-iterator": {
+ "version": "2.0.1",
+ "resolved": "https://registry.nlark.com/es6-iterator/download/es6-iterator-2.0.1.tgz",
+ "integrity": "sha1-jjGcnwRTv1ddN0lAplWSDlnKVRI=",
+ "requires": {
+ "d": "1",
+ "es5-ext": "^0.10.14",
+ "es6-symbol": "^3.1"
+ }
+ },
+ "es6-map": {
+ "version": "0.1.5",
+ "resolved": "https://registry.nlark.com/es6-map/download/es6-map-0.1.5.tgz",
+ "integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=",
+ "requires": {
+ "d": "1",
+ "es5-ext": "~0.10.14",
+ "es6-iterator": "~2.0.1",
+ "es6-set": "~0.1.5",
+ "es6-symbol": "~3.1.1",
+ "event-emitter": "~0.3.5"
+ }
+ },
+ "es6-set": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npm.taobao.org/es6-set/download/es6-set-0.1.5.tgz",
+ "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=",
+ "requires": {
+ "d": "1",
+ "es5-ext": "~0.10.14",
+ "es6-iterator": "~2.0.1",
+ "es6-symbol": "3.1.1",
+ "event-emitter": "~0.3.5"
+ }
+ },
+ "es6-symbol": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npm.taobao.org/es6-symbol/download/es6-symbol-3.1.1.tgz",
+ "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=",
+ "requires": {
+ "d": "1",
+ "es5-ext": "~0.10.14"
+ }
+ },
+ "es6-weak-map": {
+ "version": "2.0.2",
+ "resolved": "https://registry.nlark.com/es6-weak-map/download/es6-weak-map-2.0.2.tgz",
+ "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=",
+ "requires": {
+ "d": "1",
+ "es5-ext": "^0.10.14",
+ "es6-iterator": "^2.0.1",
+ "es6-symbol": "^3.1.1"
+ }
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npm.taobao.org/escape-string-regexp/download/escape-string-regexp-1.0.5.tgz?cache=0&sync_timestamp=1618677243201&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fescape-string-regexp%2Fdownload%2Fescape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
+ },
+ "escope": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npm.taobao.org/escope/download/escope-3.6.0.tgz",
+ "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=",
+ "requires": {
+ "es6-map": "^0.1.3",
+ "es6-weak-map": "^2.0.1",
+ "esrecurse": "^4.1.0",
+ "estraverse": "^4.1.1"
+ }
+ },
+ "eslint": {
+ "version": "3.19.0",
+ "resolved": "https://registry.npmmirror.com/eslint/download/eslint-3.19.0.tgz?cache=0&sync_timestamp=1637475730061&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Feslint%2Fdownload%2Feslint-3.19.0.tgz",
+ "integrity": "sha1-yPxiAcf0DdCJQbh8CFdnOGpnmsw=",
+ "requires": {
+ "babel-code-frame": "^6.16.0",
+ "chalk": "^1.1.3",
+ "concat-stream": "^1.5.2",
+ "debug": "^2.1.1",
+ "doctrine": "^2.0.0",
+ "escope": "^3.6.0",
+ "espree": "^3.4.0",
+ "esquery": "^1.0.0",
+ "estraverse": "^4.2.0",
+ "esutils": "^2.0.2",
+ "file-entry-cache": "^2.0.0",
+ "glob": "^7.0.3",
+ "globals": "^9.14.0",
+ "ignore": "^3.2.0",
+ "imurmurhash": "^0.1.4",
+ "inquirer": "^0.12.0",
+ "is-my-json-valid": "^2.10.0",
+ "is-resolvable": "^1.0.0",
+ "js-yaml": "^3.5.1",
+ "json-stable-stringify": "^1.0.0",
+ "levn": "^0.3.0",
+ "lodash": "^4.0.0",
+ "mkdirp": "^0.5.0",
+ "natural-compare": "^1.4.0",
+ "optionator": "^0.8.2",
+ "path-is-inside": "^1.0.1",
+ "pluralize": "^1.2.1",
+ "progress": "^1.1.8",
+ "require-uncached": "^1.0.2",
+ "shelljs": "^0.7.5",
+ "strip-bom": "^3.0.0",
+ "strip-json-comments": "~2.0.1",
+ "table": "^3.7.8",
+ "text-table": "~0.2.0",
+ "user-home": "^2.0.0"
+ },
+ "dependencies": {
+ "user-home": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmmirror.com/user-home/download/user-home-2.0.0.tgz",
+ "integrity": "sha1-nHC/2Babwdy/SGBODwS4tJzenp8=",
+ "requires": {
+ "os-homedir": "^1.0.0"
+ }
+ }
+ }
+ },
+ "eslint-config-airbnb": {
+ "version": "14.1.0",
+ "resolved": "https://registry.npmmirror.com/eslint-config-airbnb/download/eslint-config-airbnb-14.1.0.tgz",
+ "integrity": "sha1-NV0pAEC7+OAL+LSxn0twy+fCMX8=",
+ "requires": {
+ "eslint-config-airbnb-base": "^11.1.0"
+ }
+ },
+ "eslint-config-airbnb-base": {
+ "version": "11.1.2",
+ "resolved": "https://registry.npmmirror.com/eslint-config-airbnb-base/download/eslint-config-airbnb-base-11.1.2.tgz?cache=0&sync_timestamp=1636442475199&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Feslint-config-airbnb-base%2Fdownload%2Feslint-config-airbnb-base-11.1.2.tgz",
+ "integrity": "sha1-JZIJp2eL9pPjHL6PlT8ga2qnzMM="
+ },
+ "eslint-import-resolver-node": {
+ "version": "0.2.3",
+ "resolved": "https://registry.nlark.com/eslint-import-resolver-node/download/eslint-import-resolver-node-0.2.3.tgz?cache=0&sync_timestamp=1629046642917&other_urls=https%3A%2F%2Fregistry.nlark.com%2Feslint-import-resolver-node%2Fdownload%2Feslint-import-resolver-node-0.2.3.tgz",
+ "integrity": "sha1-Wt2BBujJKNssuiMrzZ76hG49oWw=",
+ "requires": {
+ "debug": "^2.2.0",
+ "object-assign": "^4.0.1",
+ "resolve": "^1.1.6"
+ }
+ },
+ "eslint-module-utils": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmmirror.com/eslint-module-utils/download/eslint-module-utils-2.0.0.tgz?cache=0&sync_timestamp=1634151608499&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Feslint-module-utils%2Fdownload%2Feslint-module-utils-2.0.0.tgz",
+ "integrity": "sha1-pvjCHZATWHWc3DXbrBmCrh7li84=",
+ "requires": {
+ "debug": "2.2.0",
+ "pkg-dir": "^1.0.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmmirror.com/debug/download/debug-2.2.0.tgz",
+ "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=",
+ "requires": {
+ "ms": "0.7.1"
+ }
+ },
+ "ms": {
+ "version": "0.7.1",
+ "resolved": "https://registry.npmmirror.com/ms/download/ms-0.7.1.tgz",
+ "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg="
+ }
+ }
+ },
+ "eslint-plugin-import": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmmirror.com/eslint-plugin-import/download/eslint-plugin-import-2.2.0.tgz?cache=0&sync_timestamp=1636529205526&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Feslint-plugin-import%2Fdownload%2Feslint-plugin-import-2.2.0.tgz",
+ "integrity": "sha1-crowb60wXWfEgWNIpGmaQimsi04=",
+ "requires": {
+ "builtin-modules": "^1.1.1",
+ "contains-path": "^0.1.0",
+ "debug": "^2.2.0",
+ "doctrine": "1.5.0",
+ "eslint-import-resolver-node": "^0.2.0",
+ "eslint-module-utils": "^2.0.0",
+ "has": "^1.0.1",
+ "lodash.cond": "^4.3.0",
+ "minimatch": "^3.0.3",
+ "pkg-up": "^1.0.0"
+ },
+ "dependencies": {
+ "doctrine": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npm.taobao.org/doctrine/download/doctrine-1.5.0.tgz",
+ "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=",
+ "requires": {
+ "esutils": "^2.0.2",
+ "isarray": "^1.0.0"
+ }
+ }
+ }
+ },
+ "eslint-plugin-jsx-a11y": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmmirror.com/eslint-plugin-jsx-a11y/download/eslint-plugin-jsx-a11y-4.0.0.tgz?cache=0&sync_timestamp=1636698418809&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Feslint-plugin-jsx-a11y%2Fdownload%2Feslint-plugin-jsx-a11y-4.0.0.tgz",
+ "integrity": "sha1-d5uw/nsI2lZKQiYkkR3hAGHgSO4=",
+ "requires": {
+ "aria-query": "^0.3.0",
+ "ast-types-flow": "0.0.7",
+ "damerau-levenshtein": "^1.0.0",
+ "emoji-regex": "^6.1.0",
+ "jsx-ast-utils": "^1.0.0",
+ "object-assign": "^4.0.1"
+ }
+ },
+ "eslint-plugin-react": {
+ "version": "6.10.3",
+ "resolved": "https://registry.npmmirror.com/eslint-plugin-react/download/eslint-plugin-react-6.10.3.tgz",
+ "integrity": "sha1-xUNb6wZ3ThLH2y9qut3L+QDNP3g=",
+ "requires": {
+ "array.prototype.find": "^2.0.1",
+ "doctrine": "^1.2.2",
+ "has": "^1.0.1",
+ "jsx-ast-utils": "^1.3.4",
+ "object.assign": "^4.0.4"
+ },
+ "dependencies": {
+ "doctrine": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npm.taobao.org/doctrine/download/doctrine-1.5.0.tgz",
+ "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=",
+ "requires": {
+ "esutils": "^2.0.2",
+ "isarray": "^1.0.0"
+ }
+ }
+ }
+ },
+ "espree": {
+ "version": "3.4.1",
+ "resolved": "https://registry.npmmirror.com/espree/download/espree-3.4.1.tgz?cache=0&sync_timestamp=1637466456948&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fespree%2Fdownload%2Fespree-3.4.1.tgz",
+ "integrity": "sha1-KKg6tKrtce2P4PXv5ht2oFwTxNI=",
+ "requires": {
+ "acorn": "^5.0.1",
+ "acorn-jsx": "^3.0.0"
+ }
+ },
+ "esprima": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npm.taobao.org/esprima/download/esprima-3.1.3.tgz",
+ "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM="
+ },
+ "esquery": {
+ "version": "1.0.0",
+ "resolved": "https://registry.nlark.com/esquery/download/esquery-1.0.0.tgz",
+ "integrity": "sha1-z7qLV9f7qT8XKYqKAGoEzaE9gPo=",
+ "requires": {
+ "estraverse": "^4.0.0"
+ }
+ },
+ "esrecurse": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npm.taobao.org/esrecurse/download/esrecurse-4.1.0.tgz",
+ "integrity": "sha1-RxO2U2rffyrE8yfVWed1a/9kgiA=",
+ "requires": {
+ "estraverse": "~4.1.0",
+ "object-assign": "^4.0.1"
+ },
+ "dependencies": {
+ "estraverse": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmmirror.com/estraverse/download/estraverse-4.1.1.tgz?cache=0&sync_timestamp=1635237716974&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Festraverse%2Fdownload%2Festraverse-4.1.1.tgz",
+ "integrity": "sha1-9srKcokzqFDvkGYdDheYK6RxEaI="
+ }
+ }
+ },
+ "estraverse": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmmirror.com/estraverse/download/estraverse-4.2.0.tgz?cache=0&sync_timestamp=1635237716974&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Festraverse%2Fdownload%2Festraverse-4.2.0.tgz",
+ "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM="
+ },
+ "esutils": {
+ "version": "2.0.2",
+ "resolved": "https://registry.nlark.com/esutils/download/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs="
+ },
+ "event-emitter": {
+ "version": "0.3.5",
+ "resolved": "https://registry.nlark.com/event-emitter/download/event-emitter-0.3.5.tgz",
+ "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=",
+ "requires": {
+ "d": "1",
+ "es5-ext": "~0.10.14"
+ }
+ },
+ "eventemitter3": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npm.taobao.org/eventemitter3/download/eventemitter3-2.0.3.tgz",
+ "integrity": "sha1-teEHm1n7XhuidxwKmTvgYKWMmbo="
+ },
+ "events": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmmirror.com/events/download/events-1.1.1.tgz",
+ "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ="
+ },
+ "evp_bytestokey": {
+ "version": "1.0.0",
+ "resolved": "https://registry.nlark.com/evp_bytestokey/download/evp_bytestokey-1.0.0.tgz",
+ "integrity": "sha1-SXtmrZ/vZc18CKYYCCS6FHa2blM=",
+ "requires": {
+ "create-hash": "^1.1.1"
+ }
+ },
+ "exit-hook": {
+ "version": "1.1.1",
+ "resolved": "https://registry.nlark.com/exit-hook/download/exit-hook-1.1.1.tgz",
+ "integrity": "sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g="
+ },
+ "expand-brackets": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npm.taobao.org/expand-brackets/download/expand-brackets-0.1.5.tgz",
+ "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=",
+ "requires": {
+ "is-posix-bracket": "^0.1.0"
+ }
+ },
+ "expand-range": {
+ "version": "1.8.2",
+ "resolved": "https://registry.nlark.com/expand-range/download/expand-range-1.8.2.tgz",
+ "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=",
+ "requires": {
+ "fill-range": "^2.1.0"
+ }
+ },
+ "extend": {
+ "version": "3.0.0",
+ "resolved": "https://registry.nlark.com/extend/download/extend-3.0.0.tgz",
+ "integrity": "sha1-WkdDU7nzNT3dgXbf03uRyDpG8dQ="
+ },
+ "extglob": {
+ "version": "0.3.2",
+ "resolved": "https://registry.nlark.com/extglob/download/extglob-0.3.2.tgz",
+ "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=",
+ "requires": {
+ "is-extglob": "^1.0.0"
+ }
+ },
+ "fast-diff": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npm.taobao.org/fast-diff/download/fast-diff-1.1.1.tgz",
+ "integrity": "sha1-CuoOTmBbaiGJ8Ok21Lf7rxt8/Zs="
+ },
+ "fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npm.taobao.org/fast-levenshtein/download/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc="
+ },
+ "figures": {
+ "version": "1.7.0",
+ "resolved": "https://registry.nlark.com/figures/download/figures-1.7.0.tgz?cache=0&sync_timestamp=1625254307578&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ffigures%2Fdownload%2Ffigures-1.7.0.tgz",
+ "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=",
+ "requires": {
+ "escape-string-regexp": "^1.0.5",
+ "object-assign": "^4.1.0"
+ }
+ },
+ "file-entry-cache": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npm.taobao.org/file-entry-cache/download/file-entry-cache-2.0.0.tgz?cache=0&sync_timestamp=1613794272556&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffile-entry-cache%2Fdownload%2Ffile-entry-cache-2.0.0.tgz",
+ "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=",
+ "requires": {
+ "flat-cache": "^1.2.1",
+ "object-assign": "^4.0.1"
+ }
+ },
+ "filename-regex": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npm.taobao.org/filename-regex/download/filename-regex-2.0.0.tgz",
+ "integrity": "sha1-mW4+gEebmLmJfxWopYs9CE6SZ3U="
+ },
+ "fill-range": {
+ "version": "2.2.3",
+ "resolved": "https://registry.nlark.com/fill-range/download/fill-range-2.2.3.tgz",
+ "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=",
+ "requires": {
+ "is-number": "^2.1.0",
+ "isobject": "^2.0.0",
+ "randomatic": "^1.1.3",
+ "repeat-element": "^1.1.2",
+ "repeat-string": "^1.5.2"
+ }
+ },
+ "find-cache-dir": {
+ "version": "0.1.1",
+ "resolved": "https://registry.nlark.com/find-cache-dir/download/find-cache-dir-0.1.1.tgz?cache=0&sync_timestamp=1630260009898&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ffind-cache-dir%2Fdownload%2Ffind-cache-dir-0.1.1.tgz",
+ "integrity": "sha1-yN765XyKUqinhPnjHFfHQumToLk=",
+ "requires": {
+ "commondir": "^1.0.1",
+ "mkdirp": "^0.5.1",
+ "pkg-dir": "^1.0.0"
+ }
+ },
+ "find-up": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmmirror.com/find-up/download/find-up-1.1.2.tgz?cache=0&sync_timestamp=1633618766404&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Ffind-up%2Fdownload%2Ffind-up-1.1.2.tgz",
+ "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
+ "requires": {
+ "path-exists": "^2.0.0",
+ "pinkie-promise": "^2.0.0"
+ }
+ },
+ "flat-cache": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npm.taobao.org/flat-cache/download/flat-cache-1.2.2.tgz",
+ "integrity": "sha1-+oZxTnLCHbiGAXYezy9VXRq8a5Y=",
+ "requires": {
+ "circular-json": "^0.3.1",
+ "del": "^2.0.2",
+ "graceful-fs": "^4.1.2",
+ "write": "^0.2.1"
+ }
+ },
+ "for-in": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npm.taobao.org/for-in/download/for-in-1.0.2.tgz",
+ "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA="
+ },
+ "for-own": {
+ "version": "0.1.5",
+ "resolved": "https://registry.nlark.com/for-own/download/for-own-0.1.5.tgz",
+ "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=",
+ "requires": {
+ "for-in": "^1.0.1"
+ }
+ },
+ "foreach": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npm.taobao.org/foreach/download/foreach-2.0.5.tgz",
+ "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k="
+ },
+ "fs-readdir-recursive": {
+ "version": "1.0.0",
+ "resolved": "https://registry.nlark.com/fs-readdir-recursive/download/fs-readdir-recursive-1.0.0.tgz",
+ "integrity": "sha1-jNF0XItPiinIyuw5JHaSG6GV9WA="
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npm.taobao.org/fs.realpath/download/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
+ },
+ "fsevents": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmmirror.com/fsevents/download/fsevents-1.1.1.tgz",
+ "integrity": "sha1-8Z/Sj0Pur3YWgOUZogPE0LPTGv8=",
+ "optional": true,
+ "requires": {
+ "nan": "^2.3.0",
+ "node-pre-gyp": "^0.6.29"
+ },
+ "dependencies": {
+ "abbrev": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.0.tgz",
+ "integrity": "sha1-0FVMIlZjbi9W58LlrRg/hZQo2B8=",
+ "optional": true
+ },
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "optional": true
+ },
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "optional": true
+ },
+ "aproba": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.1.1.tgz",
+ "integrity": "sha1-ldNgDwdxCqDpKYxyatXs8urLq6s=",
+ "optional": true
+ },
+ "are-we-there-yet": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.2.tgz",
+ "integrity": "sha1-gORw6VoIR5T+GJkmLFZnxuiN4bM=",
+ "optional": true,
+ "requires": {
+ "delegates": "^1.0.0",
+ "readable-stream": "^2.0.0 || ^1.1.13"
+ }
+ },
+ "asn1": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz",
+ "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=",
+ "optional": true
+ },
+ "assert-plus": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz",
+ "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=",
+ "optional": true
+ },
+ "asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
+ "optional": true
+ },
+ "aws-sign2": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz",
+ "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=",
+ "optional": true
+ },
+ "aws4": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz",
+ "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=",
+ "optional": true
+ },
+ "balanced-match": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz",
+ "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=",
+ "optional": true
+ },
+ "bcrypt-pbkdf": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz",
+ "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=",
+ "optional": true,
+ "requires": {
+ "tweetnacl": "^0.14.3"
+ }
+ },
+ "block-stream": {
+ "version": "0.0.9",
+ "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz",
+ "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=",
+ "optional": true,
+ "requires": {
+ "inherits": "~2.0.0"
+ }
+ },
+ "boom": {
+ "version": "2.10.1",
+ "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz",
+ "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=",
+ "optional": true,
+ "requires": {
+ "hoek": "2.x.x"
+ }
+ },
+ "brace-expansion": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.6.tgz",
+ "integrity": "sha1-cZfX6qm4fmSDkOph/GbIRCdCDfk=",
+ "optional": true,
+ "requires": {
+ "balanced-match": "^0.4.1",
+ "concat-map": "0.0.1"
+ }
+ },
+ "buffer-shims": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz",
+ "integrity": "sha1-mXjOMXOIxkmth5MCjDR37wRKi1E=",
+ "optional": true
+ },
+ "caseless": {
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz",
+ "integrity": "sha1-cVuW6phBWTzDMGeSP17GDr2k99c=",
+ "optional": true
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "optional": 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"
+ }
+ },
+ "code-point-at": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
+ "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
+ "optional": true
+ },
+ "combined-stream": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz",
+ "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=",
+ "optional": true,
+ "requires": {
+ "delayed-stream": "~1.0.0"
+ }
+ },
+ "commander": {
+ "version": "2.9.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz",
+ "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=",
+ "optional": true,
+ "requires": {
+ "graceful-readlink": ">= 1.0.0"
+ }
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+ "optional": true
+ },
+ "console-control-strings": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
+ "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=",
+ "optional": true
+ },
+ "core-util-is": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+ "optional": true
+ },
+ "cryptiles": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz",
+ "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=",
+ "optional": true,
+ "requires": {
+ "boom": "2.x.x"
+ }
+ },
+ "dashdash": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
+ "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
+ "optional": true,
+ "requires": {
+ "assert-plus": "^1.0.0"
+ },
+ "dependencies": {
+ "assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+ "optional": true
+ }
+ }
+ },
+ "debug": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz",
+ "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=",
+ "optional": true,
+ "requires": {
+ "ms": "0.7.1"
+ }
+ },
+ "deep-extend": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.1.tgz",
+ "integrity": "sha1-7+QRPQgIX05vlod1mBD4B0aeIlM=",
+ "optional": true
+ },
+ "delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
+ "optional": true
+ },
+ "delegates": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
+ "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=",
+ "optional": true
+ },
+ "ecc-jsbn": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz",
+ "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=",
+ "optional": true,
+ "requires": {
+ "jsbn": "~0.1.0"
+ }
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+ "optional": true
+ },
+ "extend": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.0.tgz",
+ "integrity": "sha1-WkdDU7nzNT3dgXbf03uRyDpG8dQ=",
+ "optional": true
+ },
+ "extsprintf": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.0.2.tgz",
+ "integrity": "sha1-4QgOBljjALBilJkMxw4VAiNf1VA=",
+ "optional": true
+ },
+ "forever-agent": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
+ "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
+ "optional": true
+ },
+ "form-data": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.2.tgz",
+ "integrity": "sha1-icNTQAi5fq2ky7FX1Y9vXfAl6uQ=",
+ "optional": true,
+ "requires": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.5",
+ "mime-types": "^2.1.12"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+ "optional": true
+ },
+ "fstream": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.10.tgz",
+ "integrity": "sha1-YE6Kkv4m/9n2+uMDmdSYThqyKCI=",
+ "optional": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "inherits": "~2.0.0",
+ "mkdirp": ">=0.5 0",
+ "rimraf": "2"
+ }
+ },
+ "fstream-ignore": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/fstream-ignore/-/fstream-ignore-1.0.5.tgz",
+ "integrity": "sha1-nDHa40dnAY/h0kmyTa2mfQktoQU=",
+ "optional": true,
+ "requires": {
+ "fstream": "^1.0.0",
+ "inherits": "2",
+ "minimatch": "^3.0.0"
+ }
+ },
+ "gauge": {
+ "version": "2.7.3",
+ "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.3.tgz",
+ "integrity": "sha1-HCOFX5YvF7OtPQ3HRD8wRULt/gk=",
+ "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"
+ }
+ },
+ "generate-function": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz",
+ "integrity": "sha1-aFj+fAlpt9TpCTM3ZHrHn2DfvnQ=",
+ "optional": true
+ },
+ "generate-object-property": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz",
+ "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=",
+ "optional": true,
+ "requires": {
+ "is-property": "^1.0.0"
+ }
+ },
+ "getpass": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.6.tgz",
+ "integrity": "sha1-KD/9n8ElaECHUxHBtg6MQBhxEOY=",
+ "optional": true,
+ "requires": {
+ "assert-plus": "^1.0.0"
+ },
+ "dependencies": {
+ "assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+ "optional": true
+ }
+ }
+ },
+ "glob": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.1.tgz",
+ "integrity": "sha1-gFIR3wT6rxxjo2ADBs31reULLsg=",
+ "optional": true,
+ "requires": {
+ "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"
+ }
+ },
+ "graceful-fs": {
+ "version": "4.1.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
+ "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
+ "optional": true
+ },
+ "graceful-readlink": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz",
+ "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=",
+ "optional": true
+ },
+ "har-validator": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz",
+ "integrity": "sha1-zcvAgYgmWtEZtqWnyKtw7s+10n0=",
+ "optional": true,
+ "requires": {
+ "chalk": "^1.1.1",
+ "commander": "^2.9.0",
+ "is-my-json-valid": "^2.12.4",
+ "pinkie-promise": "^2.0.0"
+ }
+ },
+ "has-ansi": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+ "optional": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "has-unicode": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
+ "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=",
+ "optional": true
+ },
+ "hawk": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz",
+ "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=",
+ "optional": true,
+ "requires": {
+ "boom": "2.x.x",
+ "cryptiles": "2.x.x",
+ "hoek": "2.x.x",
+ "sntp": "1.x.x"
+ }
+ },
+ "hoek": {
+ "version": "2.16.3",
+ "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz",
+ "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=",
+ "optional": true
+ },
+ "http-signature": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz",
+ "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=",
+ "optional": true,
+ "requires": {
+ "assert-plus": "^0.2.0",
+ "jsprim": "^1.2.2",
+ "sshpk": "^1.7.0"
+ }
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "optional": true,
+ "requires": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "optional": true
+ },
+ "ini": {
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.4.tgz",
+ "integrity": "sha1-BTfLedr1m1mhpRff9wbIbsA5Fi4=",
+ "optional": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
+ "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
+ "optional": true,
+ "requires": {
+ "number-is-nan": "^1.0.0"
+ }
+ },
+ "is-my-json-valid": {
+ "version": "2.15.0",
+ "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.15.0.tgz",
+ "integrity": "sha1-k27do8o8IR/ZjzstPgjaQ/eykVs=",
+ "optional": true,
+ "requires": {
+ "generate-function": "^2.0.0",
+ "generate-object-property": "^1.1.0",
+ "jsonpointer": "^4.0.0",
+ "xtend": "^4.0.0"
+ }
+ },
+ "is-property": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz",
+ "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=",
+ "optional": true
+ },
+ "is-typedarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
+ "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
+ "optional": true
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "optional": true
+ },
+ "isstream": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
+ "optional": true
+ },
+ "jodid25519": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/jodid25519/-/jodid25519-1.0.2.tgz",
+ "integrity": "sha1-BtSRIlUJNBlHfUJWM2BuDpB4KWc=",
+ "optional": true,
+ "requires": {
+ "jsbn": "~0.1.0"
+ }
+ },
+ "jsbn": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
+ "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
+ "optional": true
+ },
+ "json-schema": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
+ "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=",
+ "optional": true
+ },
+ "json-stringify-safe": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
+ "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
+ "optional": true
+ },
+ "jsonpointer": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz",
+ "integrity": "sha1-T9kss04OnbPInIYi7PUfm5eMbLk=",
+ "optional": true
+ },
+ "jsprim": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.3.1.tgz",
+ "integrity": "sha1-KnJW9wQSop7jZwqspiWZTE3P8lI=",
+ "optional": true,
+ "requires": {
+ "extsprintf": "1.0.2",
+ "json-schema": "0.2.3",
+ "verror": "1.3.6"
+ }
+ },
+ "mime-db": {
+ "version": "1.26.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.26.0.tgz",
+ "integrity": "sha1-6v/NDk/Gk1z4E02iRuLmw1MFrf8=",
+ "optional": true
+ },
+ "mime-types": {
+ "version": "2.1.14",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.14.tgz",
+ "integrity": "sha1-9+99l1g/yvO30oK2+LVnnaselO4=",
+ "optional": true,
+ "requires": {
+ "mime-db": "~1.26.0"
+ }
+ },
+ "minimatch": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz",
+ "integrity": "sha1-Kk5AkLlrLbBqnX3wEFWmKnfJt3Q=",
+ "optional": true,
+ "requires": {
+ "brace-expansion": "^1.0.0"
+ }
+ },
+ "minimist": {
+ "version": "0.0.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
+ "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
+ "optional": true
+ },
+ "mkdirp": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
+ "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
+ "optional": true,
+ "requires": {
+ "minimist": "0.0.8"
+ }
+ },
+ "ms": {
+ "version": "0.7.1",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz",
+ "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=",
+ "optional": true
+ },
+ "node-pre-gyp": {
+ "version": "0.6.33",
+ "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.6.33.tgz",
+ "integrity": "sha1-ZArFUZj2qSWXLgwWxKwmoDTV7Mk=",
+ "optional": true,
+ "requires": {
+ "mkdirp": "~0.5.1",
+ "nopt": "~3.0.6",
+ "npmlog": "^4.0.1",
+ "rc": "~1.1.6",
+ "request": "^2.79.0",
+ "rimraf": "~2.5.4",
+ "semver": "~5.3.0",
+ "tar": "~2.2.1",
+ "tar-pack": "~3.3.0"
+ }
+ },
+ "nopt": {
+ "version": "3.0.6",
+ "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz",
+ "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=",
+ "optional": true,
+ "requires": {
+ "abbrev": "1"
+ }
+ },
+ "npmlog": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.0.2.tgz",
+ "integrity": "sha1-0DlQ4OeM4VJ7om0qdZLpNIrD518=",
+ "optional": true,
+ "requires": {
+ "are-we-there-yet": "~1.1.2",
+ "console-control-strings": "~1.1.0",
+ "gauge": "~2.7.1",
+ "set-blocking": "~2.0.0"
+ }
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
+ "optional": true
+ },
+ "oauth-sign": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz",
+ "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=",
+ "optional": true
+ },
+ "object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
+ "optional": true
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "optional": true,
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+ "optional": true
+ },
+ "pinkie": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
+ "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=",
+ "optional": true
+ },
+ "pinkie-promise": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
+ "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
+ "optional": true,
+ "requires": {
+ "pinkie": "^2.0.0"
+ }
+ },
+ "process-nextick-args": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz",
+ "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=",
+ "optional": true
+ },
+ "punycode": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
+ "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
+ "optional": true
+ },
+ "qs": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.3.1.tgz",
+ "integrity": "sha1-kYwLO802Z5dyuvE1say0wWUe150=",
+ "optional": true
+ },
+ "rc": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/rc/-/rc-1.1.7.tgz",
+ "integrity": "sha1-xepWS7B6/5/TpbMukGwdOmWUD+o=",
+ "optional": true,
+ "requires": {
+ "deep-extend": "~0.4.0",
+ "ini": "~1.3.0",
+ "minimist": "^1.2.0",
+ "strip-json-comments": "~2.0.1"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+ "optional": true
+ }
+ }
+ },
+ "readable-stream": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.2.tgz",
+ "integrity": "sha1-qeb+w8fdqF+LsbO6cChgRVb8gl4=",
+ "optional": true,
+ "requires": {
+ "buffer-shims": "^1.0.0",
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.1",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~1.0.6",
+ "string_decoder": "~0.10.x",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "request": {
+ "version": "2.79.0",
+ "resolved": "https://registry.npmjs.org/request/-/request-2.79.0.tgz",
+ "integrity": "sha1-Tf5b9r6LjNw3/Pk+BLZVd3InEN4=",
+ "optional": true,
+ "requires": {
+ "aws-sign2": "~0.6.0",
+ "aws4": "^1.2.1",
+ "caseless": "~0.11.0",
+ "combined-stream": "~1.0.5",
+ "extend": "~3.0.0",
+ "forever-agent": "~0.6.1",
+ "form-data": "~2.1.1",
+ "har-validator": "~2.0.6",
+ "hawk": "~3.1.3",
+ "http-signature": "~1.1.0",
+ "is-typedarray": "~1.0.0",
+ "isstream": "~0.1.2",
+ "json-stringify-safe": "~5.0.1",
+ "mime-types": "~2.1.7",
+ "oauth-sign": "~0.8.1",
+ "qs": "~6.3.0",
+ "stringstream": "~0.0.4",
+ "tough-cookie": "~2.3.0",
+ "tunnel-agent": "~0.4.1",
+ "uuid": "^3.0.0"
+ }
+ },
+ "rimraf": {
+ "version": "2.5.4",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.5.4.tgz",
+ "integrity": "sha1-loAAk8vxoMhr2VtGJUZ1NcKd+gQ=",
+ "optional": true,
+ "requires": {
+ "glob": "^7.0.5"
+ }
+ },
+ "semver": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz",
+ "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=",
+ "optional": true
+ },
+ "set-blocking": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
+ "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
+ "optional": true
+ },
+ "signal-exit": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
+ "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
+ "optional": true
+ },
+ "sntp": {
+ "version": "1.0.9",
+ "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz",
+ "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=",
+ "optional": true,
+ "requires": {
+ "hoek": "2.x.x"
+ }
+ },
+ "sshpk": {
+ "version": "1.10.2",
+ "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.10.2.tgz",
+ "integrity": "sha1-1agEziJpVRVjjnmNviMnPeBwpfo=",
+ "optional": 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",
+ "jodid25519": "^1.0.0",
+ "jsbn": "~0.1.0",
+ "tweetnacl": "~0.14.0"
+ },
+ "dependencies": {
+ "assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+ "optional": true
+ }
+ }
+ },
+ "string-width": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
+ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+ "optional": true,
+ "requires": {
+ "code-point-at": "^1.0.0",
+ "is-fullwidth-code-point": "^1.0.0",
+ "strip-ansi": "^3.0.0"
+ }
+ },
+ "string_decoder": {
+ "version": "0.10.31",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
+ "optional": true
+ },
+ "stringstream": {
+ "version": "0.0.5",
+ "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz",
+ "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=",
+ "optional": true
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "optional": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "strip-json-comments": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
+ "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
+ "optional": true
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "optional": true
+ },
+ "tar": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz",
+ "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=",
+ "optional": true,
+ "requires": {
+ "block-stream": "*",
+ "fstream": "^1.0.2",
+ "inherits": "2"
+ }
+ },
+ "tar-pack": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/tar-pack/-/tar-pack-3.3.0.tgz",
+ "integrity": "sha1-MJMYFkGPVa/E0hd1r91nIM7kXa4=",
+ "optional": true,
+ "requires": {
+ "debug": "~2.2.0",
+ "fstream": "~1.0.10",
+ "fstream-ignore": "~1.0.5",
+ "once": "~1.3.3",
+ "readable-stream": "~2.1.4",
+ "rimraf": "~2.5.1",
+ "tar": "~2.2.1",
+ "uid-number": "~0.0.6"
+ },
+ "dependencies": {
+ "once": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.3.3.tgz",
+ "integrity": "sha1-suJhVXzkwxTsgwTz+oJmPkKXyiA=",
+ "optional": true,
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "readable-stream": {
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.1.5.tgz",
+ "integrity": "sha1-ZvqLcg4UOLNkaB8q0aY8YYRIydA=",
+ "optional": true,
+ "requires": {
+ "buffer-shims": "^1.0.0",
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.1",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~1.0.6",
+ "string_decoder": "~0.10.x",
+ "util-deprecate": "~1.0.1"
+ }
+ }
+ }
+ },
+ "tough-cookie": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.2.tgz",
+ "integrity": "sha1-8IH3bkyFcg5sN6X6ztc3FQ2EByo=",
+ "optional": true,
+ "requires": {
+ "punycode": "^1.4.1"
+ }
+ },
+ "tunnel-agent": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz",
+ "integrity": "sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=",
+ "optional": true
+ },
+ "tweetnacl": {
+ "version": "0.14.5",
+ "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
+ "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
+ "optional": true
+ },
+ "uid-number": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/uid-number/-/uid-number-0.0.6.tgz",
+ "integrity": "sha1-DqEOgDXo61uOREnwbaHHMGY7qoE=",
+ "optional": true
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+ "optional": true
+ },
+ "uuid": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.0.1.tgz",
+ "integrity": "sha1-ZUS7ot/ajBzxfmKaOjBeK7H+5sE=",
+ "optional": true
+ },
+ "verror": {
+ "version": "1.3.6",
+ "resolved": "https://registry.npmjs.org/verror/-/verror-1.3.6.tgz",
+ "integrity": "sha1-z/XfEpRtKX0rqu+qJoniW+AcAFw=",
+ "optional": true,
+ "requires": {
+ "extsprintf": "1.0.2"
+ }
+ },
+ "wide-align": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.0.tgz",
+ "integrity": "sha1-QO3egCpx/qHwcNo+YtzaLnrdlq0=",
+ "optional": true,
+ "requires": {
+ "string-width": "^1.0.1"
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "optional": true
+ },
+ "xtend": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
+ "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=",
+ "optional": true
+ }
+ }
+ },
+ "function-bind": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npm.taobao.org/function-bind/download/function-bind-1.1.0.tgz",
+ "integrity": "sha1-FhdnFMgBeY5Ojyz391KUZ7tKV3E="
+ },
+ "generate-function": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npm.taobao.org/generate-function/download/generate-function-2.0.0.tgz",
+ "integrity": "sha1-aFj+fAlpt9TpCTM3ZHrHn2DfvnQ="
+ },
+ "generate-object-property": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npm.taobao.org/generate-object-property/download/generate-object-property-1.2.0.tgz",
+ "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=",
+ "requires": {
+ "is-property": "^1.0.0"
+ }
+ },
+ "get-caller-file": {
+ "version": "1.0.2",
+ "resolved": "https://registry.nlark.com/get-caller-file/download/get-caller-file-1.0.2.tgz",
+ "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U="
+ },
+ "glob": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmmirror.com/glob/download/glob-7.1.1.tgz",
+ "integrity": "sha1-gFIR3wT6rxxjo2ADBs31reULLsg=",
+ "requires": {
+ "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-base": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npm.taobao.org/glob-base/download/glob-base-0.3.0.tgz",
+ "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=",
+ "requires": {
+ "glob-parent": "^2.0.0",
+ "is-glob": "^2.0.0"
+ }
+ },
+ "glob-parent": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmmirror.com/glob-parent/download/glob-parent-2.0.0.tgz?cache=0&sync_timestamp=1632953810778&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fglob-parent%2Fdownload%2Fglob-parent-2.0.0.tgz",
+ "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=",
+ "requires": {
+ "is-glob": "^2.0.0"
+ }
+ },
+ "globals": {
+ "version": "9.17.0",
+ "resolved": "https://registry.npmmirror.com/globals/download/globals-9.17.0.tgz?cache=0&sync_timestamp=1635390798667&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fglobals%2Fdownload%2Fglobals-9.17.0.tgz",
+ "integrity": "sha1-DAymltm5u2lNLlRwvTd3fKrVAoY="
+ },
+ "globby": {
+ "version": "5.0.0",
+ "resolved": "https://registry.nlark.com/globby/download/globby-5.0.0.tgz",
+ "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=",
+ "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"
+ }
+ },
+ "graceful-fs": {
+ "version": "4.1.11",
+ "resolved": "https://registry.npmmirror.com/graceful-fs/download/graceful-fs-4.1.11.tgz",
+ "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg="
+ },
+ "graceful-readlink": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npm.taobao.org/graceful-readlink/download/graceful-readlink-1.0.1.tgz",
+ "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU="
+ },
+ "has": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npm.taobao.org/has/download/has-1.0.1.tgz",
+ "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=",
+ "requires": {
+ "function-bind": "^1.0.2"
+ }
+ },
+ "has-ansi": {
+ "version": "2.0.0",
+ "resolved": "https://registry.nlark.com/has-ansi/download/has-ansi-2.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fhas-ansi%2Fdownload%2Fhas-ansi-2.0.0.tgz",
+ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.nlark.com/has-flag/download/has-flag-1.0.0.tgz?cache=0&sync_timestamp=1626715907927&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fhas-flag%2Fdownload%2Fhas-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo="
+ },
+ "hash.js": {
+ "version": "1.0.3",
+ "resolved": "https://registry.nlark.com/hash.js/download/hash.js-1.0.3.tgz?cache=0&sync_timestamp=1622643346539&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fhash.js%2Fdownload%2Fhash.js-1.0.3.tgz",
+ "integrity": "sha1-EzL/ABVsCg/92CNgE9B7d6BFFXM=",
+ "requires": {
+ "inherits": "^2.0.1"
+ }
+ },
+ "hmac-drbg": {
+ "version": "1.0.0",
+ "resolved": "https://registry.nlark.com/hmac-drbg/download/hmac-drbg-1.0.0.tgz",
+ "integrity": "sha1-PbRx9FquSplKBogyIXH1G4uRvuU=",
+ "requires": {
+ "hash.js": "^1.0.3",
+ "minimalistic-assert": "^1.0.0",
+ "minimalistic-crypto-utils": "^1.0.1"
+ }
+ },
+ "home-or-tmp": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npm.taobao.org/home-or-tmp/download/home-or-tmp-2.0.0.tgz?cache=0&sync_timestamp=1618599551277&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhome-or-tmp%2Fdownload%2Fhome-or-tmp-2.0.0.tgz",
+ "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=",
+ "requires": {
+ "os-homedir": "^1.0.0",
+ "os-tmpdir": "^1.0.1"
+ }
+ },
+ "hosted-git-info": {
+ "version": "2.4.1",
+ "resolved": "https://registry.nlark.com/hosted-git-info/download/hosted-git-info-2.4.1.tgz",
+ "integrity": "sha1-SwRF5BwASovRM3dzpP95DKQDGMg="
+ },
+ "https-browserify": {
+ "version": "0.0.1",
+ "resolved": "https://registry.nlark.com/https-browserify/download/https-browserify-0.0.1.tgz",
+ "integrity": "sha1-P5E2XKvmC3ftDruiS0VOPgnZWoI="
+ },
+ "ieee754": {
+ "version": "1.1.8",
+ "resolved": "https://registry.nlark.com/ieee754/download/ieee754-1.1.8.tgz",
+ "integrity": "sha1-vjPUCsEO8ZJnAfbwii2G+/0a0+Q="
+ },
+ "ignore": {
+ "version": "3.2.6",
+ "resolved": "https://registry.npmmirror.com/ignore/download/ignore-3.2.6.tgz?cache=0&sync_timestamp=1635926632542&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fignore%2Fdownload%2Fignore-3.2.6.tgz",
+ "integrity": "sha1-JujaBkS+C7TLOVFvbHnw4PT/5Iw="
+ },
+ "imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npm.taobao.org/imurmurhash/download/imurmurhash-0.1.4.tgz",
+ "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o="
+ },
+ "indexof": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npm.taobao.org/indexof/download/indexof-0.0.1.tgz",
+ "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10="
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npm.taobao.org/inflight/download/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "requires": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.nlark.com/inherits/download/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
+ },
+ "inquirer": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmmirror.com/inquirer/download/inquirer-0.12.0.tgz?cache=0&sync_timestamp=1633472964335&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Finquirer%2Fdownload%2Finquirer-0.12.0.tgz",
+ "integrity": "sha1-HvK/1jUE3wvHV4X/+MLEHfEvB34=",
+ "requires": {
+ "ansi-escapes": "^1.1.0",
+ "ansi-regex": "^2.0.0",
+ "chalk": "^1.0.0",
+ "cli-cursor": "^1.0.1",
+ "cli-width": "^2.0.0",
+ "figures": "^1.3.5",
+ "lodash": "^4.3.0",
+ "readline2": "^1.0.1",
+ "run-async": "^0.1.0",
+ "rx-lite": "^3.1.2",
+ "string-width": "^1.0.1",
+ "strip-ansi": "^3.0.0",
+ "through": "^2.3.6"
+ }
+ },
+ "interpret": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npm.taobao.org/interpret/download/interpret-1.0.2.tgz",
+ "integrity": "sha1-9PYj8LtxIvFfVxfI4lS4FhtcWy0="
+ },
+ "invariant": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npm.taobao.org/invariant/download/invariant-2.2.2.tgz",
+ "integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A=",
+ "requires": {
+ "loose-envify": "^1.0.0"
+ }
+ },
+ "invert-kv": {
+ "version": "1.0.0",
+ "resolved": "https://registry.nlark.com/invert-kv/download/invert-kv-1.0.0.tgz?cache=0&sync_timestamp=1630996775723&other_urls=https%3A%2F%2Fregistry.nlark.com%2Finvert-kv%2Fdownload%2Finvert-kv-1.0.0.tgz",
+ "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY="
+ },
+ "is-arrayish": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npm.taobao.org/is-arrayish/download/is-arrayish-0.2.1.tgz",
+ "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0="
+ },
+ "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=",
+ "requires": {
+ "binary-extensions": "^1.0.0"
+ }
+ },
+ "is-buffer": {
+ "version": "1.1.5",
+ "resolved": "https://registry.nlark.com/is-buffer/download/is-buffer-1.1.5.tgz",
+ "integrity": "sha1-Hzsm72E7IUuIy8ojzGwB2Hlh7sw="
+ },
+ "is-builtin-module": {
+ "version": "1.0.0",
+ "resolved": "https://registry.nlark.com/is-builtin-module/download/is-builtin-module-1.0.0.tgz?cache=0&sync_timestamp=1618995546759&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fis-builtin-module%2Fdownload%2Fis-builtin-module-1.0.0.tgz",
+ "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=",
+ "requires": {
+ "builtin-modules": "^1.0.0"
+ }
+ },
+ "is-callable": {
+ "version": "1.1.3",
+ "resolved": "https://registry.nlark.com/is-callable/download/is-callable-1.1.3.tgz",
+ "integrity": "sha1-hut1OSgF3cM69xySoO7fdO52BLI="
+ },
+ "is-date-object": {
+ "version": "1.0.1",
+ "resolved": "https://registry.nlark.com/is-date-object/download/is-date-object-1.0.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fis-date-object%2Fdownload%2Fis-date-object-1.0.1.tgz",
+ "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY="
+ },
+ "is-dotfile": {
+ "version": "1.0.2",
+ "resolved": "https://registry.nlark.com/is-dotfile/download/is-dotfile-1.0.2.tgz",
+ "integrity": "sha1-LBMjg/ORmfjtwmjKAbmwB9IFzE0="
+ },
+ "is-equal-shallow": {
+ "version": "0.1.3",
+ "resolved": "https://registry.nlark.com/is-equal-shallow/download/is-equal-shallow-0.1.3.tgz",
+ "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=",
+ "requires": {
+ "is-primitive": "^2.0.0"
+ }
+ },
+ "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="
+ },
+ "is-extglob": {
+ "version": "1.0.0",
+ "resolved": "https://registry.nlark.com/is-extglob/download/is-extglob-1.0.0.tgz",
+ "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA="
+ },
+ "is-finite": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmmirror.com/is-finite/download/is-finite-1.0.2.tgz",
+ "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
+ "requires": {
+ "number-is-nan": "^1.0.0"
+ }
+ },
+ "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"
+ }
+ },
+ "is-glob": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmmirror.com/is-glob/download/is-glob-2.0.1.tgz",
+ "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
+ "requires": {
+ "is-extglob": "^1.0.0"
+ }
+ },
+ "is-my-json-valid": {
+ "version": "2.16.0",
+ "resolved": "https://registry.npmmirror.com/is-my-json-valid/download/is-my-json-valid-2.16.0.tgz?cache=0&sync_timestamp=1636548715824&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fis-my-json-valid%2Fdownload%2Fis-my-json-valid-2.16.0.tgz",
+ "integrity": "sha1-8Hndm/2uZe4gOKrorLyGqxCeNpM=",
+ "requires": {
+ "generate-function": "^2.0.0",
+ "generate-object-property": "^1.1.0",
+ "jsonpointer": "^4.0.0",
+ "xtend": "^4.0.0"
+ }
+ },
+ "is-number": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npm.taobao.org/is-number/download/is-number-2.1.0.tgz",
+ "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=",
+ "requires": {
+ "kind-of": "^3.0.2"
+ }
+ },
+ "is-path-cwd": {
+ "version": "1.0.0",
+ "resolved": "https://registry.nlark.com/is-path-cwd/download/is-path-cwd-1.0.0.tgz?cache=0&sync_timestamp=1628686555851&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fis-path-cwd%2Fdownload%2Fis-path-cwd-1.0.0.tgz",
+ "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0="
+ },
+ "is-path-in-cwd": {
+ "version": "1.0.0",
+ "resolved": "https://registry.nlark.com/is-path-in-cwd/download/is-path-in-cwd-1.0.0.tgz?cache=0&sync_timestamp=1620047389319&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fis-path-in-cwd%2Fdownload%2Fis-path-in-cwd-1.0.0.tgz",
+ "integrity": "sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw=",
+ "requires": {
+ "is-path-inside": "^1.0.0"
+ }
+ },
+ "is-path-inside": {
+ "version": "1.0.0",
+ "resolved": "https://registry.nlark.com/is-path-inside/download/is-path-inside-1.0.0.tgz?cache=0&sync_timestamp=1620046845369&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fis-path-inside%2Fdownload%2Fis-path-inside-1.0.0.tgz",
+ "integrity": "sha1-/AbloWg/vaE95mev9xe7wQpI838=",
+ "requires": {
+ "path-is-inside": "^1.0.1"
+ }
+ },
+ "is-posix-bracket": {
+ "version": "0.1.1",
+ "resolved": "https://registry.nlark.com/is-posix-bracket/download/is-posix-bracket-0.1.1.tgz",
+ "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q="
+ },
+ "is-primitive": {
+ "version": "2.0.0",
+ "resolved": "https://registry.nlark.com/is-primitive/download/is-primitive-2.0.0.tgz",
+ "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU="
+ },
+ "is-property": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npm.taobao.org/is-property/download/is-property-1.0.2.tgz",
+ "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ="
+ },
+ "is-regex": {
+ "version": "1.0.4",
+ "resolved": "https://registry.nlark.com/is-regex/download/is-regex-1.0.4.tgz?cache=0&sync_timestamp=1628221905423&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fis-regex%2Fdownload%2Fis-regex-1.0.4.tgz",
+ "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=",
+ "requires": {
+ "has": "^1.0.1"
+ }
+ },
+ "is-resolvable": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npm.taobao.org/is-resolvable/download/is-resolvable-1.0.0.tgz",
+ "integrity": "sha1-jfV8YeouPFAUCNEA+wE8+NbgzGI=",
+ "requires": {
+ "tryit": "^1.0.1"
+ }
+ },
+ "is-symbol": {
+ "version": "1.0.1",
+ "resolved": "https://registry.nlark.com/is-symbol/download/is-symbol-1.0.1.tgz?cache=0&sync_timestamp=1620501174327&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fis-symbol%2Fdownload%2Fis-symbol-1.0.1.tgz",
+ "integrity": "sha1-PMWfAAJRlLarLjjbrmaJJWtmBXI="
+ },
+ "is-utf8": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npm.taobao.org/is-utf8/download/is-utf8-0.2.1.tgz",
+ "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI="
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npm.taobao.org/isarray/download/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
+ },
+ "isobject": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npm.taobao.org/isobject/download/isobject-2.1.0.tgz",
+ "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+ "requires": {
+ "isarray": "1.0.0"
+ }
+ },
+ "js-tokens": {
+ "version": "3.0.1",
+ "resolved": "https://registry.nlark.com/js-tokens/download/js-tokens-3.0.1.tgz?cache=0&sync_timestamp=1619345098261&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fjs-tokens%2Fdownload%2Fjs-tokens-3.0.1.tgz",
+ "integrity": "sha1-COnxMkhKLEWjCQfp3E1VZ7fxFNc="
+ },
+ "js-yaml": {
+ "version": "3.8.2",
+ "resolved": "https://registry.npm.taobao.org/js-yaml/download/js-yaml-3.8.2.tgz?cache=0&sync_timestamp=1618435004368&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjs-yaml%2Fdownload%2Fjs-yaml-3.8.2.tgz",
+ "integrity": "sha1-AtPiwPa+qyAkjUEsNSIDgn14ZyE=",
+ "requires": {
+ "argparse": "^1.0.7",
+ "esprima": "^3.1.1"
+ }
+ },
+ "jsesc": {
+ "version": "1.3.0",
+ "resolved": "https://registry.nlark.com/jsesc/download/jsesc-1.3.0.tgz",
+ "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s="
+ },
+ "json-loader": {
+ "version": "0.5.4",
+ "resolved": "https://registry.nlark.com/json-loader/download/json-loader-0.5.4.tgz",
+ "integrity": "sha1-i6oTZaYy9Yo8RtIBdfxgAsluN94="
+ },
+ "json-stable-stringify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npm.taobao.org/json-stable-stringify/download/json-stable-stringify-1.0.1.tgz",
+ "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=",
+ "requires": {
+ "jsonify": "~0.0.0"
+ }
+ },
+ "json5": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npm.taobao.org/json5/download/json5-0.5.1.tgz",
+ "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE="
+ },
+ "jsonify": {
+ "version": "0.0.0",
+ "resolved": "https://registry.nlark.com/jsonify/download/jsonify-0.0.0.tgz",
+ "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM="
+ },
+ "jsonpointer": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmmirror.com/jsonpointer/download/jsonpointer-4.0.1.tgz?cache=0&sync_timestamp=1636550164046&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fjsonpointer%2Fdownload%2Fjsonpointer-4.0.1.tgz",
+ "integrity": "sha1-T9kss04OnbPInIYi7PUfm5eMbLk="
+ },
+ "jsx-ast-utils": {
+ "version": "1.4.0",
+ "resolved": "https://registry.nlark.com/jsx-ast-utils/download/jsx-ast-utils-1.4.0.tgz?cache=0&sync_timestamp=1631856184359&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fjsx-ast-utils%2Fdownload%2Fjsx-ast-utils-1.4.0.tgz",
+ "integrity": "sha1-Wv44ho9WvIzHrq7wEAuox1vRJZE=",
+ "requires": {
+ "object-assign": "^4.1.0"
+ }
+ },
+ "kind-of": {
+ "version": "3.1.0",
+ "resolved": "https://registry.nlark.com/kind-of/download/kind-of-3.1.0.tgz",
+ "integrity": "sha1-R11pil5J/15T0U4+cyQp3Iv0z0c=",
+ "requires": {
+ "is-buffer": "^1.0.2"
+ }
+ },
+ "lazy-cache": {
+ "version": "1.0.4",
+ "resolved": "https://registry.nlark.com/lazy-cache/download/lazy-cache-1.0.4.tgz",
+ "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4="
+ },
+ "lcid": {
+ "version": "1.0.0",
+ "resolved": "https://registry.nlark.com/lcid/download/lcid-1.0.0.tgz",
+ "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=",
+ "requires": {
+ "invert-kv": "^1.0.0"
+ }
+ },
+ "levn": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npm.taobao.org/levn/download/levn-0.3.0.tgz",
+ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
+ "requires": {
+ "prelude-ls": "~1.1.2",
+ "type-check": "~0.3.2"
+ }
+ },
+ "load-json-file": {
+ "version": "1.1.0",
+ "resolved": "https://registry.nlark.com/load-json-file/download/load-json-file-1.1.0.tgz",
+ "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "parse-json": "^2.2.0",
+ "pify": "^2.0.0",
+ "pinkie-promise": "^2.0.0",
+ "strip-bom": "^2.0.0"
+ },
+ "dependencies": {
+ "strip-bom": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npm.taobao.org/strip-bom/download/strip-bom-2.0.0.tgz?cache=0&sync_timestamp=1618599642133&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-bom%2Fdownload%2Fstrip-bom-2.0.0.tgz",
+ "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
+ "requires": {
+ "is-utf8": "^0.2.0"
+ }
+ }
+ }
+ },
+ "loader-runner": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npm.taobao.org/loader-runner/download/loader-runner-2.3.0.tgz?cache=0&sync_timestamp=1610027943366&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Floader-runner%2Fdownload%2Floader-runner-2.3.0.tgz",
+ "integrity": "sha1-9IKuqC1UPgeSFwDVpG7yb9rGuKI="
+ },
+ "loader-utils": {
+ "version": "0.2.17",
+ "resolved": "https://registry.npmmirror.com/loader-utils/download/loader-utils-0.2.17.tgz?cache=0&sync_timestamp=1636687869321&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Floader-utils%2Fdownload%2Floader-utils-0.2.17.tgz",
+ "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=",
+ "requires": {
+ "big.js": "^3.1.3",
+ "emojis-list": "^2.0.0",
+ "json5": "^0.5.0",
+ "object-assign": "^4.0.1"
+ }
+ },
+ "lodash": {
+ "version": "4.17.4",
+ "resolved": "https://registry.nlark.com/lodash/download/lodash-4.17.4.tgz",
+ "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4="
+ },
+ "lodash.cond": {
+ "version": "4.5.2",
+ "resolved": "https://registry.npm.taobao.org/lodash.cond/download/lodash.cond-4.5.2.tgz",
+ "integrity": "sha1-9HGh2khr5g9quVXRcRVSPdHSVdU="
+ },
+ "longest": {
+ "version": "1.0.1",
+ "resolved": "https://registry.nlark.com/longest/download/longest-1.0.1.tgz",
+ "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc="
+ },
+ "loose-envify": {
+ "version": "1.3.1",
+ "resolved": "https://registry.nlark.com/loose-envify/download/loose-envify-1.3.1.tgz",
+ "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=",
+ "requires": {
+ "js-tokens": "^3.0.0"
+ }
+ },
+ "memory-fs": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npm.taobao.org/memory-fs/download/memory-fs-0.4.1.tgz",
+ "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=",
+ "requires": {
+ "errno": "^0.1.3",
+ "readable-stream": "^2.0.1"
+ }
+ },
+ "micromatch": {
+ "version": "2.3.11",
+ "resolved": "https://registry.nlark.com/micromatch/download/micromatch-2.3.11.tgz",
+ "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=",
+ "requires": {
+ "arr-diff": "^2.0.0",
+ "array-unique": "^0.2.1",
+ "braces": "^1.8.2",
+ "expand-brackets": "^0.1.4",
+ "extglob": "^0.3.1",
+ "filename-regex": "^2.0.0",
+ "is-extglob": "^1.0.0",
+ "is-glob": "^2.0.1",
+ "kind-of": "^3.0.2",
+ "normalize-path": "^2.0.1",
+ "object.omit": "^2.0.0",
+ "parse-glob": "^3.0.4",
+ "regex-cache": "^0.4.2"
+ }
+ },
+ "miller-rabin": {
+ "version": "4.0.0",
+ "resolved": "https://registry.nlark.com/miller-rabin/download/miller-rabin-4.0.0.tgz",
+ "integrity": "sha1-SmL7HUKTPAVYOYL0xxb2+55sbT0=",
+ "requires": {
+ "bn.js": "^4.0.0",
+ "brorand": "^1.0.1"
+ }
+ },
+ "minimalistic-assert": {
+ "version": "1.0.0",
+ "resolved": "https://registry.nlark.com/minimalistic-assert/download/minimalistic-assert-1.0.0.tgz",
+ "integrity": "sha1-cCvi3aazf0g2vLP121ZkG2Sh09M="
+ },
+ "minimalistic-crypto-utils": {
+ "version": "1.0.1",
+ "resolved": "https://registry.nlark.com/minimalistic-crypto-utils/download/minimalistic-crypto-utils-1.0.1.tgz",
+ "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo="
+ },
+ "minimatch": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npm.taobao.org/minimatch/download/minimatch-3.0.3.tgz",
+ "integrity": "sha1-Kk5AkLlrLbBqnX3wEFWmKnfJt3Q=",
+ "requires": {
+ "brace-expansion": "^1.0.0"
+ }
+ },
+ "minimist": {
+ "version": "0.0.8",
+ "resolved": "https://registry.nlark.com/minimist/download/minimist-0.0.8.tgz",
+ "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0="
+ },
+ "mkdirp": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmmirror.com/mkdirp/download/mkdirp-0.5.1.tgz",
+ "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
+ "requires": {
+ "minimist": "0.0.8"
+ }
+ },
+ "ms": {
+ "version": "0.7.2",
+ "resolved": "https://registry.npmmirror.com/ms/download/ms-0.7.2.tgz",
+ "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U="
+ },
+ "mute-stream": {
+ "version": "0.0.5",
+ "resolved": "https://registry.nlark.com/mute-stream/download/mute-stream-0.0.5.tgz",
+ "integrity": "sha1-j7+rsKmKJT0xhDMfno3rc3L6xsA="
+ },
+ "nan": {
+ "version": "2.5.1",
+ "resolved": "https://registry.nlark.com/nan/download/nan-2.5.1.tgz?cache=0&sync_timestamp=1628093719696&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fnan%2Fdownload%2Fnan-2.5.1.tgz",
+ "integrity": "sha1-1bAWkSUzJql6K77p5hxV2NYDUeI=",
+ "optional": true
+ },
+ "natural-compare": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npm.taobao.org/natural-compare/download/natural-compare-1.4.0.tgz",
+ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc="
+ },
+ "node-libs-browser": {
+ "version": "2.0.0",
+ "resolved": "https://registry.nlark.com/node-libs-browser/download/node-libs-browser-2.0.0.tgz",
+ "integrity": "sha1-o6WeyXAkmFtG6Vg3lkb5bEthZkY=",
+ "requires": {
+ "assert": "^1.1.1",
+ "browserify-zlib": "^0.1.4",
+ "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": "^1.0.0",
+ "https-browserify": "0.0.1",
+ "os-browserify": "^0.2.0",
+ "path-browserify": "0.0.0",
+ "process": "^0.11.0",
+ "punycode": "^1.2.4",
+ "querystring-es3": "^0.2.0",
+ "readable-stream": "^2.0.5",
+ "stream-browserify": "^2.0.1",
+ "stream-http": "^2.3.1",
+ "string_decoder": "^0.10.25",
+ "timers-browserify": "^2.0.2",
+ "tty-browserify": "0.0.0",
+ "url": "^0.11.0",
+ "util": "^0.10.3",
+ "vm-browserify": "0.0.4"
+ }
+ },
+ "normalize-package-data": {
+ "version": "2.3.6",
+ "resolved": "https://registry.nlark.com/normalize-package-data/download/normalize-package-data-2.3.6.tgz",
+ "integrity": "sha1-SY+kIMlkAfeHQCuiHmAN75+YH/8=",
+ "requires": {
+ "hosted-git-info": "^2.1.4",
+ "is-builtin-module": "^1.0.0",
+ "semver": "2 || 3 || 4 || 5",
+ "validate-npm-package-license": "^3.0.1"
+ }
+ },
+ "normalize-path": {
+ "version": "2.1.1",
+ "resolved": "https://registry.nlark.com/normalize-path/download/normalize-path-2.1.1.tgz",
+ "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
+ "requires": {
+ "remove-trailing-separator": "^1.0.1"
+ }
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmmirror.com/number-is-nan/download/number-is-nan-1.0.1.tgz",
+ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0="
+ },
+ "object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.nlark.com/object-assign/download/object-assign-4.1.1.tgz?cache=0&sync_timestamp=1618846992533&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fobject-assign%2Fdownload%2Fobject-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
+ },
+ "object-keys": {
+ "version": "1.0.11",
+ "resolved": "https://registry.npm.taobao.org/object-keys/download/object-keys-1.0.11.tgz",
+ "integrity": "sha1-xUYBd4rVYPEULODgG8yotW0TQm0="
+ },
+ "object.assign": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npm.taobao.org/object.assign/download/object.assign-4.0.4.tgz?cache=0&sync_timestamp=1604115183005&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fobject.assign%2Fdownload%2Fobject.assign-4.0.4.tgz",
+ "integrity": "sha1-scnMBE7xuf5jYG/BQau7MuFHMMw=",
+ "requires": {
+ "define-properties": "^1.1.2",
+ "function-bind": "^1.1.0",
+ "object-keys": "^1.0.10"
+ }
+ },
+ "object.omit": {
+ "version": "2.0.1",
+ "resolved": "https://registry.nlark.com/object.omit/download/object.omit-2.0.1.tgz",
+ "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=",
+ "requires": {
+ "for-own": "^0.1.4",
+ "is-extendable": "^0.1.1"
+ }
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npm.taobao.org/once/download/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "onetime": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npm.taobao.org/onetime/download/onetime-1.1.0.tgz",
+ "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k="
+ },
+ "optionator": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npm.taobao.org/optionator/download/optionator-0.8.2.tgz",
+ "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=",
+ "requires": {
+ "deep-is": "~0.1.3",
+ "fast-levenshtein": "~2.0.4",
+ "levn": "~0.3.0",
+ "prelude-ls": "~1.1.2",
+ "type-check": "~0.3.2",
+ "wordwrap": "~1.0.0"
+ },
+ "dependencies": {
+ "wordwrap": {
+ "version": "1.0.0",
+ "resolved": "https://registry.nlark.com/wordwrap/download/wordwrap-1.0.0.tgz",
+ "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus="
+ }
+ }
+ },
+ "os-browserify": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npm.taobao.org/os-browserify/download/os-browserify-0.2.1.tgz",
+ "integrity": "sha1-Y/xMzuXS13Y9Jrv4YBB45sLgBE8="
+ },
+ "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="
+ },
+ "os-locale": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmmirror.com/os-locale/download/os-locale-1.4.0.tgz?cache=0&sync_timestamp=1633618260196&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fos-locale%2Fdownload%2Fos-locale-1.4.0.tgz",
+ "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=",
+ "requires": {
+ "lcid": "^1.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="
+ },
+ "output-file-sync": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npm.taobao.org/output-file-sync/download/output-file-sync-1.1.2.tgz",
+ "integrity": "sha1-0KM+7+YaIF+suQCS6CZZjVJFznY=",
+ "requires": {
+ "graceful-fs": "^4.1.4",
+ "mkdirp": "^0.5.1",
+ "object-assign": "^4.1.0"
+ }
+ },
+ "pako": {
+ "version": "0.2.9",
+ "resolved": "https://registry.nlark.com/pako/download/pako-0.2.9.tgz",
+ "integrity": "sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU="
+ },
+ "parchment": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npm.taobao.org/parchment/download/parchment-1.0.8.tgz",
+ "integrity": "sha1-E+xr7M5sFnSB8Xcr1RpZBt51oDg="
+ },
+ "parse-asn1": {
+ "version": "5.1.0",
+ "resolved": "https://registry.nlark.com/parse-asn1/download/parse-asn1-5.1.0.tgz",
+ "integrity": "sha1-N8T5t+06tlx0gXtfJICTf7+XxxI=",
+ "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"
+ }
+ },
+ "parse-glob": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npm.taobao.org/parse-glob/download/parse-glob-3.0.4.tgz",
+ "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=",
+ "requires": {
+ "glob-base": "^0.3.0",
+ "is-dotfile": "^1.0.0",
+ "is-extglob": "^1.0.0",
+ "is-glob": "^2.0.0"
+ }
+ },
+ "parse-json": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmmirror.com/parse-json/download/parse-json-2.2.0.tgz",
+ "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
+ "requires": {
+ "error-ex": "^1.2.0"
+ }
+ },
+ "path-browserify": {
+ "version": "0.0.0",
+ "resolved": "https://registry.npm.taobao.org/path-browserify/download/path-browserify-0.0.0.tgz",
+ "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo="
+ },
+ "path-exists": {
+ "version": "2.1.0",
+ "resolved": "https://registry.nlark.com/path-exists/download/path-exists-2.1.0.tgz",
+ "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
+ "requires": {
+ "pinkie-promise": "^2.0.0"
+ }
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.nlark.com/path-is-absolute/download/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
+ },
+ "path-is-inside": {
+ "version": "1.0.2",
+ "resolved": "https://registry.nlark.com/path-is-inside/download/path-is-inside-1.0.2.tgz?cache=0&sync_timestamp=1622604553837&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpath-is-inside%2Fdownload%2Fpath-is-inside-1.0.2.tgz",
+ "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM="
+ },
+ "path-parse": {
+ "version": "1.0.5",
+ "resolved": "https://registry.nlark.com/path-parse/download/path-parse-1.0.5.tgz?cache=0&sync_timestamp=1621947783503&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpath-parse%2Fdownload%2Fpath-parse-1.0.5.tgz",
+ "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME="
+ },
+ "path-type": {
+ "version": "1.1.0",
+ "resolved": "https://registry.nlark.com/path-type/download/path-type-1.1.0.tgz",
+ "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "pify": "^2.0.0",
+ "pinkie-promise": "^2.0.0"
+ }
+ },
+ "pbkdf2": {
+ "version": "3.0.9",
+ "resolved": "https://registry.nlark.com/pbkdf2/download/pbkdf2-3.0.9.tgz",
+ "integrity": "sha1-8sSyWmAAWLPDdzwIbDfbvuH/5pM=",
+ "requires": {
+ "create-hmac": "^1.1.2"
+ }
+ },
+ "pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npm.taobao.org/pify/download/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw="
+ },
+ "pinkie": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npm.taobao.org/pinkie/download/pinkie-2.0.4.tgz",
+ "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA="
+ },
+ "pinkie-promise": {
+ "version": "2.0.1",
+ "resolved": "https://registry.nlark.com/pinkie-promise/download/pinkie-promise-2.0.1.tgz",
+ "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
+ "requires": {
+ "pinkie": "^2.0.0"
+ }
+ },
+ "pkg-dir": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmmirror.com/pkg-dir/download/pkg-dir-1.0.0.tgz?cache=0&sync_timestamp=1633498116014&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fpkg-dir%2Fdownload%2Fpkg-dir-1.0.0.tgz",
+ "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=",
+ "requires": {
+ "find-up": "^1.0.0"
+ }
+ },
+ "pkg-up": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmmirror.com/pkg-up/download/pkg-up-1.0.0.tgz",
+ "integrity": "sha1-Pgj7RhUlxEIWJKM7n35tCvWwWiY=",
+ "requires": {
+ "find-up": "^1.0.0"
+ }
+ },
+ "pluralize": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npm.taobao.org/pluralize/download/pluralize-1.2.1.tgz",
+ "integrity": "sha1-0aIUg/0iu0HlihL6NCGCMUCJfEU="
+ },
+ "prelude-ls": {
+ "version": "1.1.2",
+ "resolved": "https://registry.nlark.com/prelude-ls/download/prelude-ls-1.1.2.tgz",
+ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ="
+ },
+ "preserve": {
+ "version": "0.2.0",
+ "resolved": "https://registry.nlark.com/preserve/download/preserve-0.2.0.tgz",
+ "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks="
+ },
+ "private": {
+ "version": "0.1.7",
+ "resolved": "https://registry.nlark.com/private/download/private-0.1.7.tgz",
+ "integrity": "sha1-aM5eih7woju1cMwoU3tTMqumPvE="
+ },
+ "process": {
+ "version": "0.11.9",
+ "resolved": "https://registry.npm.taobao.org/process/download/process-0.11.9.tgz",
+ "integrity": "sha1-e9WtIapiU+fahoImTx4R0RwDGME="
+ },
+ "process-nextick-args": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npm.taobao.org/process-nextick-args/download/process-nextick-args-1.0.7.tgz",
+ "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M="
+ },
+ "progress": {
+ "version": "1.1.8",
+ "resolved": "https://registry.npm.taobao.org/progress/download/progress-1.1.8.tgz",
+ "integrity": "sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74="
+ },
+ "prr": {
+ "version": "0.0.0",
+ "resolved": "https://registry.nlark.com/prr/download/prr-0.0.0.tgz",
+ "integrity": "sha1-GoS4WQgyVQFBGFPQCB7j+obikmo="
+ },
+ "public-encrypt": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npm.taobao.org/public-encrypt/download/public-encrypt-4.0.0.tgz",
+ "integrity": "sha1-OfaZ86RlYN1eusvKaTyvfGXBjMY=",
+ "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"
+ }
+ },
+ "punycode": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npm.taobao.org/punycode/download/punycode-1.4.1.tgz",
+ "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4="
+ },
+ "querystring": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmmirror.com/querystring/download/querystring-0.2.0.tgz",
+ "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA="
+ },
+ "querystring-es3": {
+ "version": "0.2.1",
+ "resolved": "https://registry.nlark.com/querystring-es3/download/querystring-es3-0.2.1.tgz",
+ "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM="
+ },
+ "quill": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npm.taobao.org/quill/download/quill-1.2.3.tgz",
+ "integrity": "sha1-j8Yu1m2Bc+35vB2ft3fddOsGMu4=",
+ "requires": {
+ "clone": "~2.1.1",
+ "deep-equal": "~1.0.1",
+ "eventemitter3": "~2.0.2",
+ "extend": "~3.0.0",
+ "parchment": "1.0.8",
+ "quill-delta": "3.5.0"
+ }
+ },
+ "quill-delta": {
+ "version": "3.5.0",
+ "resolved": "https://registry.nlark.com/quill-delta/download/quill-delta-3.5.0.tgz",
+ "integrity": "sha1-W2fmhdpgw06r7URJxBbHSquJFXs=",
+ "requires": {
+ "deep-equal": "^1.0.1",
+ "extend": "^3.0.0",
+ "fast-diff": "1.1.1"
+ }
+ },
+ "randomatic": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npm.taobao.org/randomatic/download/randomatic-1.1.6.tgz",
+ "integrity": "sha1-EQ3Kv/OX6dz/fAeJzMCkmt8exbs=",
+ "requires": {
+ "is-number": "^2.0.2",
+ "kind-of": "^3.0.2"
+ }
+ },
+ "randombytes": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npm.taobao.org/randombytes/download/randombytes-2.0.3.tgz",
+ "integrity": "sha1-Z0yZdgkBw8QRJ3GjHlIdw0nMCew="
+ },
+ "raw-loader": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npm.taobao.org/raw-loader/download/raw-loader-0.5.1.tgz",
+ "integrity": "sha1-DD0L6u2KAclm2Xh793goElKpeao="
+ },
+ "read-pkg": {
+ "version": "1.1.0",
+ "resolved": "https://registry.nlark.com/read-pkg/download/read-pkg-1.1.0.tgz",
+ "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=",
+ "requires": {
+ "load-json-file": "^1.0.0",
+ "normalize-package-data": "^2.3.2",
+ "path-type": "^1.0.0"
+ }
+ },
+ "read-pkg-up": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmmirror.com/read-pkg-up/download/read-pkg-up-1.0.1.tgz",
+ "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=",
+ "requires": {
+ "find-up": "^1.0.0",
+ "read-pkg": "^1.0.0"
+ }
+ },
+ "readable-stream": {
+ "version": "2.2.6",
+ "resolved": "https://registry.npm.taobao.org/readable-stream/download/readable-stream-2.2.6.tgz",
+ "integrity": "sha1-i0Ou125xSDk40SqNRsbPGgCx+BY=",
+ "requires": {
+ "buffer-shims": "^1.0.0",
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.1",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~1.0.6",
+ "string_decoder": "~0.10.x",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "readdirp": {
+ "version": "2.1.0",
+ "resolved": "https://registry.nlark.com/readdirp/download/readdirp-2.1.0.tgz",
+ "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=",
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "minimatch": "^3.0.2",
+ "readable-stream": "^2.0.2",
+ "set-immediate-shim": "^1.0.1"
+ }
+ },
+ "readline2": {
+ "version": "1.0.1",
+ "resolved": "https://registry.nlark.com/readline2/download/readline2-1.0.1.tgz",
+ "integrity": "sha1-QQWWCP/BVHV7cV2ZidGZ/783LjU=",
+ "requires": {
+ "code-point-at": "^1.0.0",
+ "is-fullwidth-code-point": "^1.0.0",
+ "mute-stream": "0.0.5"
+ }
+ },
+ "rechoir": {
+ "version": "0.6.2",
+ "resolved": "https://registry.nlark.com/rechoir/download/rechoir-0.6.2.tgz?cache=0&sync_timestamp=1627101702123&other_urls=https%3A%2F%2Fregistry.nlark.com%2Frechoir%2Fdownload%2Frechoir-0.6.2.tgz",
+ "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=",
+ "requires": {
+ "resolve": "^1.1.6"
+ }
+ },
+ "regenerate": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npm.taobao.org/regenerate/download/regenerate-1.3.2.tgz?cache=0&sync_timestamp=1604218353677&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fregenerate%2Fdownload%2Fregenerate-1.3.2.tgz",
+ "integrity": "sha1-0ZQcZ7rUN+G+dkM63Vs4X5WxkmA="
+ },
+ "regenerator-runtime": {
+ "version": "0.10.3",
+ "resolved": "https://registry.nlark.com/regenerator-runtime/download/regenerator-runtime-0.10.3.tgz?cache=0&sync_timestamp=1626992969133&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fregenerator-runtime%2Fdownload%2Fregenerator-runtime-0.10.3.tgz",
+ "integrity": "sha1-jENnqQS1HqYqkIrDEL+Z/5CoKj4="
+ },
+ "regenerator-transform": {
+ "version": "0.9.8",
+ "resolved": "https://registry.nlark.com/regenerator-transform/download/regenerator-transform-0.9.8.tgz?cache=0&sync_timestamp=1627057533376&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fregenerator-transform%2Fdownload%2Fregenerator-transform-0.9.8.tgz",
+ "integrity": "sha1-D4i7K8A5Mt23trcxLmgHjwECbWw=",
+ "requires": {
+ "babel-runtime": "^6.18.0",
+ "babel-types": "^6.19.0",
+ "private": "^0.1.6"
+ }
+ },
+ "regex-cache": {
+ "version": "0.4.3",
+ "resolved": "https://registry.nlark.com/regex-cache/download/regex-cache-0.4.3.tgz",
+ "integrity": "sha1-mxpsNdTQ3871cRrmUejp09cRQUU=",
+ "requires": {
+ "is-equal-shallow": "^0.1.3",
+ "is-primitive": "^2.0.0"
+ }
+ },
+ "regexpu-core": {
+ "version": "2.0.0",
+ "resolved": "https://registry.nlark.com/regexpu-core/download/regexpu-core-2.0.0.tgz?cache=0&sync_timestamp=1631619113277&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fregexpu-core%2Fdownload%2Fregexpu-core-2.0.0.tgz",
+ "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=",
+ "requires": {
+ "regenerate": "^1.2.1",
+ "regjsgen": "^0.2.0",
+ "regjsparser": "^0.1.4"
+ }
+ },
+ "regjsgen": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmmirror.com/regjsgen/download/regjsgen-0.2.0.tgz",
+ "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc="
+ },
+ "regjsparser": {
+ "version": "0.1.5",
+ "resolved": "https://registry.nlark.com/regjsparser/download/regjsparser-0.1.5.tgz?cache=0&sync_timestamp=1630946816794&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fregjsparser%2Fdownload%2Fregjsparser-0.1.5.tgz",
+ "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=",
+ "requires": {
+ "jsesc": "~0.5.0"
+ },
+ "dependencies": {
+ "jsesc": {
+ "version": "0.5.0",
+ "resolved": "https://registry.nlark.com/jsesc/download/jsesc-0.5.0.tgz",
+ "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0="
+ }
+ }
+ },
+ "remove-trailing-separator": {
+ "version": "1.0.1",
+ "resolved": "https://registry.nlark.com/remove-trailing-separator/download/remove-trailing-separator-1.0.1.tgz",
+ "integrity": "sha1-YV67lq9VlVLUv0BXyENtSGq2PMQ="
+ },
+ "repeat-element": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npm.taobao.org/repeat-element/download/repeat-element-1.1.2.tgz",
+ "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo="
+ },
+ "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="
+ },
+ "repeating": {
+ "version": "2.0.1",
+ "resolved": "https://registry.nlark.com/repeating/download/repeating-2.0.1.tgz?cache=0&sync_timestamp=1622605325095&other_urls=https%3A%2F%2Fregistry.nlark.com%2Frepeating%2Fdownload%2Frepeating-2.0.1.tgz",
+ "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
+ "requires": {
+ "is-finite": "^1.0.0"
+ }
+ },
+ "require-directory": {
+ "version": "2.1.1",
+ "resolved": "https://registry.nlark.com/require-directory/download/require-directory-2.1.1.tgz",
+ "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I="
+ },
+ "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="
+ },
+ "require-uncached": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npm.taobao.org/require-uncached/download/require-uncached-1.0.3.tgz",
+ "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=",
+ "requires": {
+ "caller-path": "^0.1.0",
+ "resolve-from": "^1.0.0"
+ }
+ },
+ "resolve": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npm.taobao.org/resolve/download/resolve-1.3.2.tgz",
+ "integrity": "sha1-HwRCyeDLuBNuh7kwX5MvRsfygjU=",
+ "requires": {
+ "path-parse": "^1.0.5"
+ }
+ },
+ "resolve-from": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npm.taobao.org/resolve-from/download/resolve-from-1.0.1.tgz",
+ "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY="
+ },
+ "restore-cursor": {
+ "version": "1.0.1",
+ "resolved": "https://registry.nlark.com/restore-cursor/download/restore-cursor-1.0.1.tgz?cache=0&sync_timestamp=1629746923086&other_urls=https%3A%2F%2Fregistry.nlark.com%2Frestore-cursor%2Fdownload%2Frestore-cursor-1.0.1.tgz",
+ "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=",
+ "requires": {
+ "exit-hook": "^1.0.0",
+ "onetime": "^1.0.0"
+ }
+ },
+ "right-align": {
+ "version": "0.1.3",
+ "resolved": "https://registry.nlark.com/right-align/download/right-align-0.1.3.tgz",
+ "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=",
+ "requires": {
+ "align-text": "^0.1.1"
+ }
+ },
+ "rimraf": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npm.taobao.org/rimraf/download/rimraf-2.6.1.tgz",
+ "integrity": "sha1-wjOOxkPfeht/5cVPqG9XQopV8z0=",
+ "requires": {
+ "glob": "^7.0.5"
+ }
+ },
+ "ripemd160": {
+ "version": "1.0.1",
+ "resolved": "https://registry.nlark.com/ripemd160/download/ripemd160-1.0.1.tgz",
+ "integrity": "sha1-k6S71JQrxXS2mo+lfHHeEOzKfW4="
+ },
+ "run-async": {
+ "version": "0.1.0",
+ "resolved": "https://registry.nlark.com/run-async/download/run-async-0.1.0.tgz",
+ "integrity": "sha1-yK1KXhEGYeQCp9IbUw4AnyX444k=",
+ "requires": {
+ "once": "^1.3.0"
+ }
+ },
+ "rx-lite": {
+ "version": "3.1.2",
+ "resolved": "https://registry.nlark.com/rx-lite/download/rx-lite-3.1.2.tgz",
+ "integrity": "sha1-Gc5QLKVyZl87ZHsQk5+X/RYV8QI="
+ },
+ "semver": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npm.taobao.org/semver/download/semver-5.3.0.tgz?cache=0&sync_timestamp=1616463540350&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-5.3.0.tgz",
+ "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8="
+ },
+ "set-blocking": {
+ "version": "2.0.0",
+ "resolved": "https://registry.nlark.com/set-blocking/download/set-blocking-2.0.0.tgz",
+ "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc="
+ },
+ "set-immediate-shim": {
+ "version": "1.0.1",
+ "resolved": "https://registry.nlark.com/set-immediate-shim/download/set-immediate-shim-1.0.1.tgz",
+ "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E="
+ },
+ "setimmediate": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npm.taobao.org/setimmediate/download/setimmediate-1.0.5.tgz",
+ "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU="
+ },
+ "sha.js": {
+ "version": "2.4.8",
+ "resolved": "https://registry.npm.taobao.org/sha.js/download/sha.js-2.4.8.tgz",
+ "integrity": "sha1-NwaMLEdra69ALRSknGf1l5IfY08=",
+ "requires": {
+ "inherits": "^2.0.1"
+ }
+ },
+ "shelljs": {
+ "version": "0.7.7",
+ "resolved": "https://registry.nlark.com/shelljs/download/shelljs-0.7.7.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fshelljs%2Fdownload%2Fshelljs-0.7.7.tgz",
+ "integrity": "sha1-svXHfvlxSPS09uImguELuoZnz/E=",
+ "requires": {
+ "glob": "^7.0.0",
+ "interpret": "^1.0.0",
+ "rechoir": "^0.6.2"
+ }
+ },
+ "slash": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npm.taobao.org/slash/download/slash-1.0.0.tgz",
+ "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU="
+ },
+ "slice-ansi": {
+ "version": "0.0.4",
+ "resolved": "https://registry.nlark.com/slice-ansi/download/slice-ansi-0.0.4.tgz",
+ "integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU="
+ },
+ "source-list-map": {
+ "version": "1.1.1",
+ "resolved": "https://registry.nlark.com/source-list-map/download/source-list-map-1.1.1.tgz",
+ "integrity": "sha1-GjOsIQyhRNHlYfkG68yrVmn/TLQ="
+ },
+ "source-map": {
+ "version": "0.5.6",
+ "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.5.6.tgz",
+ "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI="
+ },
+ "source-map-support": {
+ "version": "0.4.14",
+ "resolved": "https://registry.npmmirror.com/source-map-support/download/source-map-support-0.4.14.tgz",
+ "integrity": "sha1-nURjdyWYuGJxtPUj9sH04Cp9au8=",
+ "requires": {
+ "source-map": "^0.5.6"
+ }
+ },
+ "spdx-correct": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npm.taobao.org/spdx-correct/download/spdx-correct-1.0.2.tgz",
+ "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=",
+ "requires": {
+ "spdx-license-ids": "^1.0.2"
+ }
+ },
+ "spdx-expression-parse": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npm.taobao.org/spdx-expression-parse/download/spdx-expression-parse-1.0.4.tgz",
+ "integrity": "sha1-m98vIOH0DtRH++JzJmGR/O1RYmw="
+ },
+ "spdx-license-ids": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmmirror.com/spdx-license-ids/download/spdx-license-ids-1.2.2.tgz?cache=0&sync_timestamp=1636978474315&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fspdx-license-ids%2Fdownload%2Fspdx-license-ids-1.2.2.tgz",
+ "integrity": "sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc="
+ },
+ "sprintf-js": {
+ "version": "1.0.3",
+ "resolved": "https://registry.nlark.com/sprintf-js/download/sprintf-js-1.0.3.tgz?cache=0&sync_timestamp=1618847174560&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fsprintf-js%2Fdownload%2Fsprintf-js-1.0.3.tgz",
+ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw="
+ },
+ "stream-browserify": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npm.taobao.org/stream-browserify/download/stream-browserify-2.0.1.tgz",
+ "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=",
+ "requires": {
+ "inherits": "~2.0.1",
+ "readable-stream": "^2.0.2"
+ }
+ },
+ "stream-http": {
+ "version": "2.7.0",
+ "resolved": "https://registry.nlark.com/stream-http/download/stream-http-2.7.0.tgz",
+ "integrity": "sha1-zsH047SUvEqBtFGAiXD4sgtO1fY=",
+ "requires": {
+ "builtin-status-codes": "^3.0.0",
+ "inherits": "^2.0.1",
+ "readable-stream": "^2.2.6",
+ "to-arraybuffer": "^1.0.0",
+ "xtend": "^4.0.0"
+ }
+ },
+ "string-width": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmmirror.com/string-width/download/string-width-1.0.2.tgz?cache=0&sync_timestamp=1632421013520&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fstring-width%2Fdownload%2Fstring-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"
+ }
+ },
+ "string_decoder": {
+ "version": "0.10.31",
+ "resolved": "https://registry.npm.taobao.org/string_decoder/download/string_decoder-0.10.31.tgz",
+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ="
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmmirror.com/strip-ansi/download/strip-ansi-3.0.1.tgz?cache=0&sync_timestamp=1632420562057&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fstrip-ansi%2Fdownload%2Fstrip-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?cache=0&sync_timestamp=1618599642133&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-bom%2Fdownload%2Fstrip-bom-3.0.0.tgz",
+ "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM="
+ },
+ "strip-json-comments": {
+ "version": "2.0.1",
+ "resolved": "https://registry.nlark.com/strip-json-comments/download/strip-json-comments-2.0.1.tgz",
+ "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo="
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmmirror.com/supports-color/download/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
+ },
+ "table": {
+ "version": "3.8.3",
+ "resolved": "https://registry.npmmirror.com/table/download/table-3.8.3.tgz?cache=0&sync_timestamp=1636037112686&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Ftable%2Fdownload%2Ftable-3.8.3.tgz",
+ "integrity": "sha1-K7xULw/amGGnVdOUf+/Ys/UThV8=",
+ "requires": {
+ "ajv": "^4.7.0",
+ "ajv-keywords": "^1.0.0",
+ "chalk": "^1.1.1",
+ "lodash": "^4.0.0",
+ "slice-ansi": "0.0.4",
+ "string-width": "^2.0.0"
+ },
+ "dependencies": {
+ "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="
+ },
+ "string-width": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmmirror.com/string-width/download/string-width-2.0.0.tgz?cache=0&sync_timestamp=1632421013520&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fstring-width%2Fdownload%2Fstring-width-2.0.0.tgz",
+ "integrity": "sha1-Y1xUNsxypuDDh87KJ41OLuxSaH4=",
+ "requires": {
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^3.0.0"
+ }
+ }
+ }
+ },
+ "tapable": {
+ "version": "0.2.6",
+ "resolved": "https://registry.nlark.com/tapable/download/tapable-0.2.6.tgz",
+ "integrity": "sha1-IGvo4YiGC1FEJTdebxrom/sB/Y0="
+ },
+ "text-table": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npm.taobao.org/text-table/download/text-table-0.2.0.tgz",
+ "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ="
+ },
+ "through": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npm.taobao.org/through/download/through-2.3.8.tgz",
+ "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU="
+ },
+ "timers-browserify": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npm.taobao.org/timers-browserify/download/timers-browserify-2.0.2.tgz",
+ "integrity": "sha1-q0iDz1l9zVCvIRNJoA+8pWrIa4Y=",
+ "requires": {
+ "setimmediate": "^1.0.4"
+ }
+ },
+ "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="
+ },
+ "to-fast-properties": {
+ "version": "1.0.2",
+ "resolved": "https://registry.nlark.com/to-fast-properties/download/to-fast-properties-1.0.2.tgz",
+ "integrity": "sha1-8/XAw7pymafvmUJ+RGMyV63kMyA="
+ },
+ "trim-right": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmmirror.com/trim-right/download/trim-right-1.0.1.tgz",
+ "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM="
+ },
+ "tryit": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npm.taobao.org/tryit/download/tryit-1.0.3.tgz",
+ "integrity": "sha1-OTvnMKlEb9Hq1tpZoBQwjzbCics="
+ },
+ "tty-browserify": {
+ "version": "0.0.0",
+ "resolved": "https://registry.nlark.com/tty-browserify/download/tty-browserify-0.0.0.tgz",
+ "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY="
+ },
+ "type-check": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npm.taobao.org/type-check/download/type-check-0.3.2.tgz",
+ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
+ "requires": {
+ "prelude-ls": "~1.1.2"
+ }
+ },
+ "typedarray": {
+ "version": "0.0.6",
+ "resolved": "https://registry.nlark.com/typedarray/download/typedarray-0.0.6.tgz",
+ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c="
+ },
+ "uglify-js": {
+ "version": "2.8.20",
+ "resolved": "https://registry.npmmirror.com/uglify-js/download/uglify-js-2.8.20.tgz",
+ "integrity": "sha1-vocQD7wY3jh27WBunSS0VoMRzs8=",
+ "requires": {
+ "source-map": "~0.5.1",
+ "uglify-to-browserify": "~1.0.0",
+ "yargs": "~3.10.0"
+ }
+ },
+ "uglify-to-browserify": {
+ "version": "1.0.2",
+ "resolved": "https://registry.nlark.com/uglify-to-browserify/download/uglify-to-browserify-1.0.2.tgz",
+ "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=",
+ "optional": true
+ },
+ "url": {
+ "version": "0.11.0",
+ "resolved": "https://registry.nlark.com/url/download/url-0.11.0.tgz?cache=0&sync_timestamp=1618847135337&other_urls=https%3A%2F%2Fregistry.nlark.com%2Furl%2Fdownload%2Furl-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="
+ }
+ }
+ },
+ "user-home": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmmirror.com/user-home/download/user-home-1.1.1.tgz",
+ "integrity": "sha1-K1viOjK2Onyd640PKNSFcko98ZA="
+ },
+ "util": {
+ "version": "0.10.3",
+ "resolved": "https://registry.nlark.com/util/download/util-0.10.3.tgz?cache=0&sync_timestamp=1622212984161&other_urls=https%3A%2F%2Fregistry.nlark.com%2Futil%2Fdownload%2Futil-0.10.3.tgz",
+ "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=",
+ "requires": {
+ "inherits": "2.0.1"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "2.0.1",
+ "resolved": "https://registry.nlark.com/inherits/download/inherits-2.0.1.tgz",
+ "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE="
+ }
+ }
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.nlark.com/util-deprecate/download/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
+ },
+ "v8flags": {
+ "version": "2.0.12",
+ "resolved": "https://registry.npmmirror.com/v8flags/download/v8flags-2.0.12.tgz?cache=0&sync_timestamp=1636336418259&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fv8flags%2Fdownload%2Fv8flags-2.0.12.tgz",
+ "integrity": "sha1-cyNdn3F2+OiDP7KGeVRF95ONhOU=",
+ "requires": {
+ "user-home": "^1.1.1"
+ }
+ },
+ "validate-npm-package-license": {
+ "version": "3.0.1",
+ "resolved": "https://registry.nlark.com/validate-npm-package-license/download/validate-npm-package-license-3.0.1.tgz",
+ "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=",
+ "requires": {
+ "spdx-correct": "~1.0.0",
+ "spdx-expression-parse": "~1.0.0"
+ }
+ },
+ "vm-browserify": {
+ "version": "0.0.4",
+ "resolved": "https://registry.nlark.com/vm-browserify/download/vm-browserify-0.0.4.tgz",
+ "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=",
+ "requires": {
+ "indexof": "0.0.1"
+ }
+ },
+ "watchpack": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmmirror.com/watchpack/download/watchpack-1.3.1.tgz",
+ "integrity": "sha1-fYaTkHsozmAT5/NhCqKhrPB9rYc=",
+ "requires": {
+ "async": "^2.1.2",
+ "chokidar": "^1.4.3",
+ "graceful-fs": "^4.1.2"
+ }
+ },
+ "webpack": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmmirror.com/webpack/download/webpack-2.3.3.tgz",
+ "integrity": "sha1-7swIPBj7e/lY6k9AtXpmQMWgzHg=",
+ "requires": {
+ "acorn": "^4.0.4",
+ "acorn-dynamic-import": "^2.0.0",
+ "ajv": "^4.7.0",
+ "ajv-keywords": "^1.1.1",
+ "async": "^2.1.2",
+ "enhanced-resolve": "^3.0.0",
+ "interpret": "^1.0.0",
+ "json-loader": "^0.5.4",
+ "loader-runner": "^2.3.0",
+ "loader-utils": "^0.2.16",
+ "memory-fs": "~0.4.1",
+ "mkdirp": "~0.5.0",
+ "node-libs-browser": "^2.0.0",
+ "source-map": "^0.5.3",
+ "supports-color": "^3.1.0",
+ "tapable": "~0.2.5",
+ "uglify-js": "^2.8.5",
+ "watchpack": "^1.3.1",
+ "webpack-sources": "^0.2.3",
+ "yargs": "^6.0.0"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "4.0.11",
+ "resolved": "https://registry.npmmirror.com/acorn/download/acorn-4.0.11.tgz?cache=0&sync_timestamp=1637225522161&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Facorn%2Fdownload%2Facorn-4.0.11.tgz",
+ "integrity": "sha1-7c2jvZN+dVZBDULtWGD2c5nHlMA="
+ },
+ "camelcase": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmmirror.com/camelcase/download/camelcase-3.0.0.tgz?cache=0&sync_timestamp=1636945205805&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fcamelcase%2Fdownload%2Fcamelcase-3.0.0.tgz",
+ "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo="
+ },
+ "cliui": {
+ "version": "3.2.0",
+ "resolved": "https://registry.nlark.com/cliui/download/cliui-3.2.0.tgz",
+ "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=",
+ "requires": {
+ "string-width": "^1.0.1",
+ "strip-ansi": "^3.0.1",
+ "wrap-ansi": "^2.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmmirror.com/supports-color/download/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "requires": {
+ "has-flag": "^1.0.0"
+ }
+ },
+ "yargs": {
+ "version": "6.6.0",
+ "resolved": "https://registry.npmmirror.com/yargs/download/yargs-6.6.0.tgz",
+ "integrity": "sha1-eC7CHvQDNF+DCoCMo9UTr1YGUgg=",
+ "requires": {
+ "camelcase": "^3.0.0",
+ "cliui": "^3.2.0",
+ "decamelize": "^1.1.1",
+ "get-caller-file": "^1.0.1",
+ "os-locale": "^1.4.0",
+ "read-pkg-up": "^1.0.1",
+ "require-directory": "^2.1.1",
+ "require-main-filename": "^1.0.1",
+ "set-blocking": "^2.0.0",
+ "string-width": "^1.0.2",
+ "which-module": "^1.0.0",
+ "y18n": "^3.2.1",
+ "yargs-parser": "^4.2.0"
+ }
+ }
+ }
+ },
+ "webpack-sources": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmmirror.com/webpack-sources/download/webpack-sources-0.2.3.tgz?cache=0&sync_timestamp=1636982731420&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fwebpack-sources%2Fdownload%2Fwebpack-sources-0.2.3.tgz",
+ "integrity": "sha1-F8Yr+vE8cH+dAsR54Nzd6DgGl/s=",
+ "requires": {
+ "source-list-map": "^1.1.1",
+ "source-map": "~0.5.3"
+ }
+ },
+ "which-module": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npm.taobao.org/which-module/download/which-module-1.0.0.tgz",
+ "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8="
+ },
+ "window-size": {
+ "version": "0.1.0",
+ "resolved": "https://registry.nlark.com/window-size/download/window-size-0.1.0.tgz",
+ "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0="
+ },
+ "wordwrap": {
+ "version": "0.0.2",
+ "resolved": "https://registry.nlark.com/wordwrap/download/wordwrap-0.0.2.tgz",
+ "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8="
+ },
+ "wrap-ansi": {
+ "version": "2.1.0",
+ "resolved": "https://registry.nlark.com/wrap-ansi/download/wrap-ansi-2.1.0.tgz?cache=0&sync_timestamp=1631557327268&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fwrap-ansi%2Fdownload%2Fwrap-ansi-2.1.0.tgz",
+ "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=",
+ "requires": {
+ "string-width": "^1.0.1",
+ "strip-ansi": "^3.0.1"
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.nlark.com/wrappy/download/wrappy-1.0.2.tgz?cache=0&sync_timestamp=1619133505879&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fwrappy%2Fdownload%2Fwrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
+ },
+ "write": {
+ "version": "0.2.1",
+ "resolved": "https://registry.nlark.com/write/download/write-0.2.1.tgz",
+ "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=",
+ "requires": {
+ "mkdirp": "^0.5.1"
+ }
+ },
+ "xtend": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npm.taobao.org/xtend/download/xtend-4.0.1.tgz",
+ "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68="
+ },
+ "y18n": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npm.taobao.org/y18n/download/y18n-3.2.1.tgz?cache=0&sync_timestamp=1617822684820&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fy18n%2Fdownload%2Fy18n-3.2.1.tgz",
+ "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE="
+ },
+ "yargs": {
+ "version": "3.10.0",
+ "resolved": "https://registry.npmmirror.com/yargs/download/yargs-3.10.0.tgz",
+ "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=",
+ "requires": {
+ "camelcase": "^1.0.2",
+ "cliui": "^2.1.0",
+ "decamelize": "^1.0.0",
+ "window-size": "0.1.0"
+ }
+ },
+ "yargs-parser": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmmirror.com/yargs-parser/download/yargs-parser-4.2.1.tgz?cache=0&sync_timestamp=1637031053426&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fyargs-parser%2Fdownload%2Fyargs-parser-4.2.1.tgz",
+ "integrity": "sha1-KczqwNxPA8bIe0qfIX3RjJ90hxw=",
+ "requires": {
+ "camelcase": "^3.0.0"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmmirror.com/camelcase/download/camelcase-3.0.0.tgz?cache=0&sync_timestamp=1636945205805&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fcamelcase%2Fdownload%2Fcamelcase-3.0.0.tgz",
+ "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo="
+ }
+ }
+ }
+ }
+ },
+ "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"
+ }
+ },
+ "range-parser": {
+ "version": "1.2.1",
+ "resolved": "https://registry.nlark.com/range-parser/download/range-parser-1.2.1.tgz",
+ "integrity": "sha1-PPNwI9GZ4cJNGlW4SADC8+ZGgDE=",
+ "dev": true
+ },
+ "raw-body": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmmirror.com/raw-body/download/raw-body-2.4.0.tgz?cache=0&sync_timestamp=1637116848060&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fraw-body%2Fdownload%2Fraw-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.npmmirror.com/bytes/download/bytes-3.1.0.tgz?cache=0&sync_timestamp=1637015110760&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fbytes%2Fdownload%2Fbytes-3.1.0.tgz",
+ "integrity": "sha1-9s95M6Ng4FiPqf3oVlHNx/gF0fY=",
+ "dev": true
+ }
+ }
+ },
+ "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-fast": {
+ "version": "2.0.3",
+ "resolved": "https://registry.nlark.com/read-package-json-fast/download/read-package-json-fast-2.0.3.tgz",
+ "integrity": "sha1-MjylKWMNqCyzSzbMC5lmk8mMK4M=",
+ "dev": true,
+ "requires": {
+ "json-parse-even-better-errors": "^2.3.0",
+ "npm-normalize-package-bin": "^1.0.1"
+ }
+ },
+ "read-pkg": {
+ "version": "3.0.0",
+ "resolved": "https://registry.nlark.com/read-pkg/download/read-pkg-3.0.0.tgz",
+ "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=",
+ "dev": true,
+ "requires": {
+ "load-json-file": "^4.0.0",
+ "normalize-package-data": "^2.3.2",
+ "path-type": "^3.0.0"
+ },
+ "dependencies": {
+ "path-type": {
+ "version": "3.0.0",
+ "resolved": "https://registry.nlark.com/path-type/download/path-type-3.0.0.tgz",
+ "integrity": "sha1-zvMdyOCho7sNEFwM2Xzzv0f0428=",
+ "dev": true,
+ "requires": {
+ "pify": "^3.0.0"
+ }
+ },
+ "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
+ }
+ }
+ },
+ "read-pkg-up": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmmirror.com/read-pkg-up/download/read-pkg-up-3.0.0.tgz",
+ "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=",
+ "dev": true,
+ "requires": {
+ "find-up": "^2.0.0",
+ "read-pkg": "^3.0.0"
+ },
+ "dependencies": {
+ "find-up": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmmirror.com/find-up/download/find-up-2.1.0.tgz?cache=0&sync_timestamp=1633618766404&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Ffind-up%2Fdownload%2Ffind-up-2.1.0.tgz",
+ "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
+ "dev": true,
+ "requires": {
+ "locate-path": "^2.0.0"
+ }
+ },
+ "locate-path": {
+ "version": "2.0.0",
+ "resolved": "https://registry.nlark.com/locate-path/download/locate-path-2.0.0.tgz?cache=0&sync_timestamp=1629895724478&other_urls=https%3A%2F%2Fregistry.nlark.com%2Flocate-path%2Fdownload%2Flocate-path-2.0.0.tgz",
+ "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
+ "dev": true,
+ "requires": {
+ "p-locate": "^2.0.0",
+ "path-exists": "^3.0.0"
+ }
+ },
+ "p-limit": {
+ "version": "1.3.0",
+ "resolved": "https://registry.nlark.com/p-limit/download/p-limit-1.3.0.tgz?cache=0&sync_timestamp=1628812766275&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fp-limit%2Fdownload%2Fp-limit-1.3.0.tgz",
+ "integrity": "sha1-uGvV8MJWkJEcdZD8v8IBDVSzzLg=",
+ "dev": true,
+ "requires": {
+ "p-try": "^1.0.0"
+ }
+ },
+ "p-locate": {
+ "version": "2.0.0",
+ "resolved": "https://registry.nlark.com/p-locate/download/p-locate-2.0.0.tgz",
+ "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
+ "dev": true,
+ "requires": {
+ "p-limit": "^1.1.0"
+ }
+ },
+ "p-try": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmmirror.com/p-try/download/p-try-1.0.0.tgz?cache=0&sync_timestamp=1633364462890&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fp-try%2Fdownload%2Fp-try-1.0.0.tgz",
+ "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
+ "dev": true
+ },
+ "path-exists": {
+ "version": "3.0.0",
+ "resolved": "https://registry.nlark.com/path-exists/download/path-exists-3.0.0.tgz",
+ "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
+ "dev": true
+ }
+ }
+ },
+ "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=",
+ "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"
+ }
+ },
+ "readdirp": {
+ "version": "3.6.0",
+ "resolved": "https://registry.nlark.com/readdirp/download/readdirp-3.6.0.tgz",
+ "integrity": "sha1-dKNwvYVxFuJFspzJc0DNQxoCpsc=",
+ "dev": true,
+ "requires": {
+ "picomatch": "^2.2.1"
+ }
+ },
+ "redent": {
+ "version": "3.0.0",
+ "resolved": "https://registry.nlark.com/redent/download/redent-3.0.0.tgz?cache=0&sync_timestamp=1620070119923&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fredent%2Fdownload%2Fredent-3.0.0.tgz",
+ "integrity": "sha1-5Ve3mYMWu1PJ8fVvpiY1LGljBZ8=",
+ "dev": true,
+ "requires": {
+ "indent-string": "^4.0.0",
+ "strip-indent": "^3.0.0"
+ }
+ },
+ "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
+ },
+ "reftools": {
+ "version": "1.1.9",
+ "resolved": "https://registry.nlark.com/reftools/download/reftools-1.1.9.tgz",
+ "integrity": "sha1-4W4Z9mLM1GSGBTEsBtNOXaOit34=",
+ "dev": true
+ },
+ "regenerate": {
+ "version": "1.4.2",
+ "resolved": "https://registry.npm.taobao.org/regenerate/download/regenerate-1.4.2.tgz?cache=0&sync_timestamp=1604218353677&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fregenerate%2Fdownload%2Fregenerate-1.4.2.tgz",
+ "integrity": "sha1-uTRtiCfo9aMve6KWN9OYtpAUhIo=",
+ "dev": true
+ },
+ "regenerate-unicode-properties": {
+ "version": "9.0.0",
+ "resolved": "https://registry.nlark.com/regenerate-unicode-properties/download/regenerate-unicode-properties-9.0.0.tgz?cache=0&sync_timestamp=1631617161322&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fregenerate-unicode-properties%2Fdownload%2Fregenerate-unicode-properties-9.0.0.tgz",
+ "integrity": "sha1-VNCccRXh9T3CMUqXSzLBw0Tv4yY=",
+ "dev": true,
+ "requires": {
+ "regenerate": "^1.4.2"
+ }
+ },
+ "regenerator-runtime": {
+ "version": "0.13.9",
+ "resolved": "https://registry.nlark.com/regenerator-runtime/download/regenerator-runtime-0.13.9.tgz?cache=0&sync_timestamp=1626992969133&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fregenerator-runtime%2Fdownload%2Fregenerator-runtime-0.13.9.tgz",
+ "integrity": "sha1-iSV0Kpj/2QgUmI11Zq0wyjsmO1I=",
+ "dev": true
+ },
+ "regenerator-transform": {
+ "version": "0.14.5",
+ "resolved": "https://registry.nlark.com/regenerator-transform/download/regenerator-transform-0.14.5.tgz?cache=0&sync_timestamp=1627057533376&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fregenerator-transform%2Fdownload%2Fregenerator-transform-0.14.5.tgz",
+ "integrity": "sha1-yY2hVGg2ccnE3LFuznNlF+G3/rQ=",
+ "dev": true,
+ "requires": {
+ "@babel/runtime": "^7.8.4"
+ }
+ },
+ "regex-not": {
+ "version": "1.0.2",
+ "resolved": "https://registry.nlark.com/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"
+ }
+ },
+ "regex-parser": {
+ "version": "2.2.11",
+ "resolved": "https://registry.nlark.com/regex-parser/download/regex-parser-2.2.11.tgz",
+ "integrity": "sha1-OzfskEnhlHmAboeMq+fByoPM/lg=",
+ "dev": true
+ },
+ "regexp.prototype.flags": {
+ "version": "1.3.1",
+ "resolved": "https://registry.nlark.com/regexp.prototype.flags/download/regexp.prototype.flags-1.3.1.tgz",
+ "integrity": "sha1-fvNSro0VnnWMDq3Kb4/LTu8HviY=",
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.3"
+ }
+ },
+ "regexpp": {
+ "version": "3.2.0",
+ "resolved": "https://registry.nlark.com/regexpp/download/regexpp-3.2.0.tgz?cache=0&sync_timestamp=1623669331185&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fregexpp%2Fdownload%2Fregexpp-3.2.0.tgz",
+ "integrity": "sha1-BCWido2PI7rXDKS5BGH6LxIT4bI=",
+ "dev": true
+ },
+ "regexpu-core": {
+ "version": "4.8.0",
+ "resolved": "https://registry.nlark.com/regexpu-core/download/regexpu-core-4.8.0.tgz?cache=0&sync_timestamp=1631619113277&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fregexpu-core%2Fdownload%2Fregexpu-core-4.8.0.tgz",
+ "integrity": "sha1-5WBbo2G2excYR4UBMnUC9EeamPA=",
+ "dev": true,
+ "requires": {
+ "regenerate": "^1.4.2",
+ "regenerate-unicode-properties": "^9.0.0",
+ "regjsgen": "^0.5.2",
+ "regjsparser": "^0.7.0",
+ "unicode-match-property-ecmascript": "^2.0.0",
+ "unicode-match-property-value-ecmascript": "^2.0.0"
+ }
+ },
+ "regextras": {
+ "version": "0.8.0",
+ "resolved": "https://registry.nlark.com/regextras/download/regextras-0.8.0.tgz?cache=0&sync_timestamp=1621860451154&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fregextras%2Fdownload%2Fregextras-0.8.0.tgz",
+ "integrity": "sha1-7A+ZhT1JEoOTIRcvYItUSBSwIhc=",
+ "dev": true
+ },
+ "regjsgen": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmmirror.com/regjsgen/download/regjsgen-0.5.2.tgz",
+ "integrity": "sha1-kv8pX7He7L9uzaslQ9IH6RqjNzM=",
+ "dev": true
+ },
+ "regjsparser": {
+ "version": "0.7.0",
+ "resolved": "https://registry.nlark.com/regjsparser/download/regjsparser-0.7.0.tgz?cache=0&sync_timestamp=1630946816794&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fregjsparser%2Fdownload%2Fregjsparser-0.7.0.tgz",
+ "integrity": "sha1-prZntUyIXhi1JVTLSWDvcRh+mWg=",
+ "dev": true,
+ "requires": {
+ "jsesc": "~0.5.0"
+ },
+ "dependencies": {
+ "jsesc": {
+ "version": "0.5.0",
+ "resolved": "https://registry.nlark.com/jsesc/download/jsesc-0.5.0.tgz",
+ "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=",
+ "dev": true
+ }
+ }
+ },
+ "regression": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npm.taobao.org/regression/download/regression-2.0.1.tgz",
+ "integrity": "sha1-jSnD6CJKEIUMNeM36FqLL6w7DIc="
+ },
+ "remark": {
+ "version": "13.0.0",
+ "resolved": "https://registry.npmmirror.com/remark/download/remark-13.0.0.tgz?cache=0&sync_timestamp=1637258856657&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fremark%2Fdownload%2Fremark-13.0.0.tgz",
+ "integrity": "sha1-0V2b9xpAL0Aofr42Bntm1Uho5CU=",
+ "dev": true,
+ "requires": {
+ "remark-parse": "^9.0.0",
+ "remark-stringify": "^9.0.0",
+ "unified": "^9.1.0"
+ }
+ },
+ "remark-parse": {
+ "version": "9.0.0",
+ "resolved": "https://registry.npmmirror.com/remark-parse/download/remark-parse-9.0.0.tgz",
+ "integrity": "sha1-TSCimWZYgOT0r12Qt8e4qTWFNkA=",
+ "dev": true,
+ "requires": {
+ "mdast-util-from-markdown": "^0.8.0"
+ }
+ },
+ "remark-stringify": {
+ "version": "9.0.1",
+ "resolved": "https://registry.npmmirror.com/remark-stringify/download/remark-stringify-9.0.1.tgz",
+ "integrity": "sha1-V20G6RBUiwpxkacfJ7M/EhiGKJQ=",
+ "dev": true,
+ "requires": {
+ "mdast-util-to-markdown": "^0.6.0"
+ }
+ },
+ "remove-trailing-separator": {
+ "version": "1.1.0",
+ "resolved": "https://registry.nlark.com/remove-trailing-separator/download/remove-trailing-separator-1.1.0.tgz",
+ "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=",
+ "dev": true
+ },
+ "repeat-element": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npm.taobao.org/repeat-element/download/repeat-element-1.1.4.tgz",
+ "integrity": "sha1-vmgVIIR6tYx1aKx1+/rSjtQtOek=",
+ "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
+ },
+ "replace-ext": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npm.taobao.org/replace-ext/download/replace-ext-1.0.0.tgz",
+ "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=",
+ "dev": true
+ },
+ "request": {
+ "version": "2.88.2",
+ "resolved": "https://registry.npmmirror.com/request/download/request-2.88.2.tgz",
+ "integrity": "sha1-1zyRhzHLWofaBH4gcjQUb2ZNErM=",
+ "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.3",
+ "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.5.0",
+ "tunnel-agent": "^0.6.0",
+ "uuid": "^3.3.2"
+ },
+ "dependencies": {
+ "qs": {
+ "version": "6.5.2",
+ "resolved": "https://registry.nlark.com/qs/download/qs-6.5.2.tgz",
+ "integrity": "sha1-yzroBuh0BERYTvFUzo7pjUA/PjY=",
+ "dev": true
+ }
+ }
+ },
+ "require-directory": {
+ "version": "2.1.1",
+ "resolved": "https://registry.nlark.com/require-directory/download/require-directory-2.1.1.tgz",
+ "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
+ "dev": true
+ },
+ "require-from-string": {
+ "version": "2.0.2",
+ "resolved": "https://registry.nlark.com/require-from-string/download/require-from-string-2.0.2.tgz",
+ "integrity": "sha1-iaf92TgmEmcxjq/hT5wy5ZjDaQk="
+ },
+ "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
+ },
+ "requires-port": {
+ "version": "1.0.0",
+ "resolved": "https://registry.nlark.com/requires-port/download/requires-port-1.0.0.tgz",
+ "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=",
+ "dev": true
+ },
+ "resolve": {
+ "version": "1.20.0",
+ "resolved": "https://registry.npm.taobao.org/resolve/download/resolve-1.20.0.tgz",
+ "integrity": "sha1-YpoBP7P3B1XW8LeTXMHCxTeLGXU=",
+ "dev": true,
+ "requires": {
+ "is-core-module": "^2.2.0",
+ "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"
+ },
+ "dependencies": {
+ "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-from": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npm.taobao.org/resolve-from/download/resolve-from-4.0.0.tgz",
+ "integrity": "sha1-SrzYUq0y3Xuqv+m0DgCjbbXzkuY=",
+ "dev": true
+ },
+ "resolve-url": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmmirror.com/resolve-url/download/resolve-url-0.2.1.tgz",
+ "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=",
+ "dev": true
+ },
+ "resolve-url-loader": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmmirror.com/resolve-url-loader/download/resolve-url-loader-4.0.0.tgz",
+ "integrity": "sha1-1Q1N3HRrsQRoRDFnrPgA3NbDrVc=",
+ "dev": true,
+ "requires": {
+ "adjust-sourcemap-loader": "^4.0.0",
+ "convert-source-map": "^1.7.0",
+ "loader-utils": "^2.0.0",
+ "postcss": "^7.0.35",
+ "source-map": "0.6.1"
+ },
+ "dependencies": {
+ "picocolors": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmmirror.com/picocolors/download/picocolors-0.2.1.tgz",
+ "integrity": "sha1-VwZw95NkaFHRuhNZlpYqutWHhZ8=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "7.0.39",
+ "resolved": "https://registry.npmmirror.com/postcss/download/postcss-7.0.39.tgz",
+ "integrity": "sha1-liQ3XZZWMOLh8sAqk1yCpZy0gwk=",
+ "dev": true,
+ "requires": {
+ "picocolors": "^0.2.1",
+ "source-map": "^0.6.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
+ }
+ }
+ },
+ "restore-cursor": {
+ "version": "3.1.0",
+ "resolved": "https://registry.nlark.com/restore-cursor/download/restore-cursor-3.1.0.tgz?cache=0&sync_timestamp=1629746923086&other_urls=https%3A%2F%2Fregistry.nlark.com%2Frestore-cursor%2Fdownload%2Frestore-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.nlark.com/retry/download/retry-0.12.0.tgz",
+ "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=",
+ "dev": true
+ },
+ "reusify": {
+ "version": "1.0.4",
+ "resolved": "https://registry.nlark.com/reusify/download/reusify-1.0.4.tgz",
+ "integrity": "sha1-kNo4Kx4SbvwCFG6QhFqI2xKSXXY=",
+ "dev": true
+ },
+ "rfdc": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npm.taobao.org/rfdc/download/rfdc-1.3.0.tgz",
+ "integrity": "sha1-0LfEQasnINBdxM8m4ByJYx2doIs=",
+ "dev": true
+ },
+ "rimraf": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npm.taobao.org/rimraf/download/rimraf-3.0.2.tgz",
+ "integrity": "sha1-8aVAK6YiCtUswSgrrBrjqkn9Bho=",
+ "dev": true,
+ "requires": {
+ "glob": "^7.1.3"
+ }
+ },
+ "run-async": {
+ "version": "2.4.1",
+ "resolved": "https://registry.nlark.com/run-async/download/run-async-2.4.1.tgz",
+ "integrity": "sha1-hEDsz5nqPnC9QJ1JqriOEMGJpFU=",
+ "dev": true
+ },
+ "run-parallel": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npm.taobao.org/run-parallel/download/run-parallel-1.2.0.tgz?cache=0&sync_timestamp=1612925943325&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frun-parallel%2Fdownload%2Frun-parallel-1.2.0.tgz",
+ "integrity": "sha1-ZtE2jae9+SHrnZW9GpIp5/IaQ+4=",
+ "dev": true,
+ "requires": {
+ "queue-microtask": "^1.2.2"
+ }
+ },
+ "rw": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmmirror.com/rw/download/rw-1.3.3.tgz",
+ "integrity": "sha1-P4Yt+pGrdmsUiF700BEkv9oHT7Q="
+ },
+ "rxjs": {
+ "version": "6.6.7",
+ "resolved": "https://registry.npmmirror.com/rxjs/download/rxjs-6.6.7.tgz?cache=0&sync_timestamp=1633554235070&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Frxjs%2Fdownload%2Frxjs-6.6.7.tgz",
+ "integrity": "sha1-kKwBisq/SRv2UEQjXVhjxNq4BMk=",
+ "requires": {
+ "tslib": "^1.9.0"
+ },
+ "dependencies": {
+ "tslib": {
+ "version": "1.14.1",
+ "resolved": "https://registry.nlark.com/tslib/download/tslib-1.14.1.tgz?cache=0&sync_timestamp=1628722556410&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ftslib%2Fdownload%2Ftslib-1.14.1.tgz",
+ "integrity": "sha1-zy04vcNKE0vK8QkcQfZhni9nLQA="
+ }
+ }
+ },
+ "rxjs-for-await": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmmirror.com/rxjs-for-await/download/rxjs-for-await-0.0.2.tgz",
+ "integrity": "sha1-JlmKHWFnFHzBkhcpcOfu1OYgOEs=",
+ "dev": true
+ },
+ "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.nlark.com/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.nlark.com/safer-buffer/download/safer-buffer-2.1.2.tgz",
+ "integrity": "sha1-RPoWGwGHuVSd2Eu5GAL5vYOFzWo="
+ },
+ "sass": {
+ "version": "1.36.0",
+ "resolved": "https://registry.npmmirror.com/sass/download/sass-1.36.0.tgz",
+ "integrity": "sha1-WRLvnV0WcUFxuhHLF+2ydMS7wH4=",
+ "dev": true,
+ "requires": {
+ "chokidar": ">=3.0.0 <4.0.0"
+ }
+ },
+ "sass-loader": {
+ "version": "12.1.0",
+ "resolved": "https://registry.npmmirror.com/sass-loader/download/sass-loader-12.1.0.tgz?cache=0&sync_timestamp=1635385383233&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fsass-loader%2Fdownload%2Fsass-loader-12.1.0.tgz",
+ "integrity": "sha1-tzMkYiIxAJ2m+6Yat2ATJWOA0gE=",
+ "dev": true,
+ "requires": {
+ "klona": "^2.0.4",
+ "neo-async": "^2.6.2"
+ }
+ },
+ "saucelabs": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmmirror.com/saucelabs/download/saucelabs-1.5.0.tgz",
+ "integrity": "sha1-lAWnPDYNRJsjKDmRmobDltN5/Z0=",
+ "dev": true,
+ "requires": {
+ "https-proxy-agent": "^2.2.1"
+ },
+ "dependencies": {
+ "agent-base": {
+ "version": "4.3.0",
+ "resolved": "https://registry.nlark.com/agent-base/download/agent-base-4.3.0.tgz",
+ "integrity": "sha1-gWXwHENgCbzK0LHRIvBe13Dvxu4=",
+ "dev": true,
+ "requires": {
+ "es6-promisify": "^5.0.0"
+ }
+ },
+ "debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmmirror.com/debug/download/debug-3.2.7.tgz",
+ "integrity": "sha1-clgLfpFF+zm2Z2+cXl+xALk0F5o=",
+ "dev": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "https-proxy-agent": {
+ "version": "2.2.4",
+ "resolved": "https://registry.nlark.com/https-proxy-agent/download/https-proxy-agent-2.2.4.tgz",
+ "integrity": "sha1-TuenN6vZJniik9mzShr00NCMeHs=",
+ "dev": true,
+ "requires": {
+ "agent-base": "^4.3.0",
+ "debug": "^3.1.0"
+ }
+ }
+ }
+ },
+ "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": "2.7.1",
+ "resolved": "https://registry.npmmirror.com/schema-utils/download/schema-utils-2.7.1.tgz?cache=0&sync_timestamp=1637075888461&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fschema-utils%2Fdownload%2Fschema-utils-2.7.1.tgz",
+ "integrity": "sha1-HKTzLRskxZDCA7jnpQvw6kzTlNc=",
+ "dev": true,
+ "requires": {
+ "@types/json-schema": "^7.0.5",
+ "ajv": "^6.12.4",
+ "ajv-keywords": "^3.5.2"
+ },
+ "dependencies": {
+ "ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmmirror.com/ajv/download/ajv-6.12.6.tgz?cache=0&sync_timestamp=1637522259668&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fajv%2Fdownload%2Fajv-6.12.6.tgz",
+ "integrity": "sha1-uvWmLoArB9l3A0WG+MO69a3ybfQ=",
+ "dev": true,
+ "requires": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ }
+ },
+ "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
+ }
+ }
+ },
+ "screenfull": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmmirror.com/screenfull/download/screenfull-5.2.0.tgz",
+ "integrity": "sha1-ZTPVJNMGIfwSg7lpIUbz8TqT0bo="
+ },
+ "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.npmmirror.com/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": {
+ "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"
+ }
+ },
+ "tmp": {
+ "version": "0.0.30",
+ "resolved": "https://registry.nlark.com/tmp/download/tmp-0.0.30.tgz",
+ "integrity": "sha1-ckGdSovn1s51FI/YsyTlk6cRwu0=",
+ "dev": true,
+ "requires": {
+ "os-tmpdir": "~1.0.1"
+ }
+ }
+ }
+ },
+ "selfsigned": {
+ "version": "1.10.11",
+ "resolved": "https://registry.nlark.com/selfsigned/download/selfsigned-1.10.11.tgz?cache=0&sync_timestamp=1620160245612&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fselfsigned%2Fdownload%2Fselfsigned-1.10.11.tgz",
+ "integrity": "sha1-JJKc2Qb+D0S20B+yOZmnOVN6y+k=",
+ "dev": true,
+ "requires": {
+ "node-forge": "^0.10.0"
+ }
+ },
+ "semver": {
+ "version": "7.3.5",
+ "resolved": "https://registry.npm.taobao.org/semver/download/semver-7.3.5.tgz?cache=0&sync_timestamp=1616463540350&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-7.3.5.tgz",
+ "integrity": "sha1-C2Ich5NI2JmOSw5L6Us/EuYBjvc=",
+ "dev": true,
+ "requires": {
+ "lru-cache": "^6.0.0"
+ }
+ },
+ "semver-compare": {
+ "version": "1.0.0",
+ "resolved": "https://registry.nlark.com/semver-compare/download/semver-compare-1.0.0.tgz",
+ "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=",
+ "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.npmmirror.com/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.npmmirror.com/ms/download/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ }
+ }
+ },
+ "ms": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmmirror.com/ms/download/ms-2.1.1.tgz",
+ "integrity": "sha1-MKWGTrPrsKZvLr5tcnrwagnYbgo=",
+ "dev": true
+ }
+ }
+ },
+ "serialize-javascript": {
+ "version": "6.0.0",
+ "resolved": "https://registry.nlark.com/serialize-javascript/download/serialize-javascript-6.0.0.tgz?cache=0&sync_timestamp=1624284098038&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fserialize-javascript%2Fdownload%2Fserialize-javascript-6.0.0.tgz",
+ "integrity": "sha1-765diPRdeSQUHai1w6en5mP+/rg=",
+ "dev": true,
+ "requires": {
+ "randombytes": "^2.1.0"
+ }
+ },
+ "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.npmmirror.com/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.npmmirror.com/http-errors/download/http-errors-1.6.3.tgz?cache=0&sync_timestamp=1636932182141&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fhttp-errors%2Fdownload%2Fhttp-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.nlark.com/inherits/download/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmmirror.com/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",
+ "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.nlark.com/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.nlark.com/set-immediate-shim/download/set-immediate-shim-1.0.1.tgz",
+ "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E="
+ },
+ "set-value": {
+ "version": "2.0.1",
+ "resolved": "https://registry.nlark.com/set-value/download/set-value-2.0.1.tgz?cache=0&sync_timestamp=1631437857327&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fset-value%2Fdownload%2Fset-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.nlark.com/extend-shallow/download/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "setprototypeof": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npm.taobao.org/setprototypeof/download/setprototypeof-1.1.1.tgz",
+ "integrity": "sha1-fpWsskqpL1iF4KvvW6ExMw1K5oM=",
+ "dev": true
+ },
+ "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.nlark.com/shebang-regex/download/shebang-regex-1.0.0.tgz?cache=0&sync_timestamp=1628896299850&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fshebang-regex%2Fdownload%2Fshebang-regex-1.0.0.tgz",
+ "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
+ "dev": true
+ },
+ "should": {
+ "version": "13.2.3",
+ "resolved": "https://registry.nlark.com/should/download/should-13.2.3.tgz",
+ "integrity": "sha1-ltjlrPPpe0nYm1H+qlro0H71jxA=",
+ "dev": true,
+ "requires": {
+ "should-equal": "^2.0.0",
+ "should-format": "^3.0.3",
+ "should-type": "^1.4.0",
+ "should-type-adaptors": "^1.0.1",
+ "should-util": "^1.0.0"
+ }
+ },
+ "should-equal": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npm.taobao.org/should-equal/download/should-equal-2.0.0.tgz",
+ "integrity": "sha1-YHLPgwRzYIZ+aOmLCdcRQ9BO4MM=",
+ "dev": true,
+ "requires": {
+ "should-type": "^1.4.0"
+ }
+ },
+ "should-format": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npm.taobao.org/should-format/download/should-format-3.0.3.tgz",
+ "integrity": "sha1-m/yPdPo5IFxT04w01xcwPidxJPE=",
+ "dev": true,
+ "requires": {
+ "should-type": "^1.3.0",
+ "should-type-adaptors": "^1.0.1"
+ }
+ },
+ "should-type": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npm.taobao.org/should-type/download/should-type-1.4.0.tgz",
+ "integrity": "sha1-B1bYzoRt/QmEOmlHcZ36DUz/XPM=",
+ "dev": true
+ },
+ "should-type-adaptors": {
+ "version": "1.1.0",
+ "resolved": "https://registry.nlark.com/should-type-adaptors/download/should-type-adaptors-1.1.0.tgz",
+ "integrity": "sha1-QB5/M7VTMDOUTVzYvytlAneS4no=",
+ "dev": true,
+ "requires": {
+ "should-type": "^1.3.0",
+ "should-util": "^1.0.0"
+ }
+ },
+ "should-util": {
+ "version": "1.0.1",
+ "resolved": "https://registry.nlark.com/should-util/download/should-util-1.0.1.tgz",
+ "integrity": "sha1-+w1xM49TKjoUkhNjni0yy+qLyyg=",
+ "dev": true
+ },
+ "side-channel": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npm.taobao.org/side-channel/download/side-channel-1.0.4.tgz",
+ "integrity": "sha1-785cj9wQTudRslxY1CkAEfpeos8=",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.0",
+ "get-intrinsic": "^1.0.2",
+ "object-inspect": "^1.9.0"
+ }
+ },
+ "signal-exit": {
+ "version": "3.0.6",
+ "resolved": "https://registry.npmmirror.com/signal-exit/download/signal-exit-3.0.6.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fsignal-exit%2Fdownload%2Fsignal-exit-3.0.6.tgz",
+ "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==",
+ "dev": true
+ },
+ "simple-statistics": {
+ "version": "6.1.1",
+ "resolved": "https://registry.npm.taobao.org/simple-statistics/download/simple-statistics-6.1.1.tgz",
+ "integrity": "sha1-46B5n/xJkU1vQhxaSsWF9qE+K60="
+ },
+ "slash": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npm.taobao.org/slash/download/slash-3.0.0.tgz",
+ "integrity": "sha1-ZTm+hwwWWtvVJAIg2+Nh8bxNRjQ=",
+ "dev": true
+ },
+ "slice-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.nlark.com/slice-ansi/download/slice-ansi-4.0.0.tgz",
+ "integrity": "sha1-UA6N0P1VsFgVCGJVsxla3ypF/ms=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.0.0",
+ "astral-regex": "^2.0.0",
+ "is-fullwidth-code-point": "^3.0.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.nlark.com/ansi-styles/download/ansi-styles-4.3.0.tgz",
+ "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=",
+ "dev": true,
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npm.taobao.org/color-convert/download/color-convert-2.0.1.tgz",
+ "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=",
+ "dev": true,
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npm.taobao.org/color-name/download/color-name-1.1.4.tgz",
+ "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=",
+ "dev": true
+ }
+ }
+ },
+ "smart-buffer": {
+ "version": "4.2.0",
+ "resolved": "https://registry.nlark.com/smart-buffer/download/smart-buffer-4.2.0.tgz?cache=0&sync_timestamp=1628317244992&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fsmart-buffer%2Fdownload%2Fsmart-buffer-4.2.0.tgz",
+ "integrity": "sha1-bh1x+k8YwF99D/IW3RakgdDo2a4=",
+ "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.npmmirror.com/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.nlark.com/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.nlark.com/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.npmmirror.com/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.nlark.com/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.nlark.com/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.nlark.com/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.nlark.com/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.nlark.com/kind-of/download/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "socket.io": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmmirror.com/socket.io/download/socket.io-4.4.0.tgz?cache=0&sync_timestamp=1637252559928&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fsocket.io%2Fdownload%2Fsocket.io-4.4.0.tgz",
+ "integrity": "sha512-bnpJxswR9ov0Bw6ilhCvO38/1WPtE3eA2dtxi2Iq4/sFebiDJQzgKNYA7AuVVdGW09nrESXd90NbZqtDd9dzRQ==",
+ "dev": true,
+ "requires": {
+ "accepts": "~1.3.4",
+ "base64id": "~2.0.0",
+ "debug": "~4.3.2",
+ "engine.io": "~6.1.0",
+ "socket.io-adapter": "~2.3.3",
+ "socket.io-parser": "~4.0.4"
+ }
+ },
+ "socket.io-adapter": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmmirror.com/socket.io-adapter/download/socket.io-adapter-2.3.3.tgz?cache=0&sync_timestamp=1637252559030&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fsocket.io-adapter%2Fdownload%2Fsocket.io-adapter-2.3.3.tgz",
+ "integrity": "sha512-Qd/iwn3VskrpNO60BeRyCyr8ZWw9CPZyitW4AQwmRZ8zCiyDiL+znRnWX6tDHXnWn1sJrM1+b6Mn6wEDJJ4aYQ==",
+ "dev": true
+ },
+ "socket.io-parser": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmmirror.com/socket.io-parser/download/socket.io-parser-4.0.4.tgz",
+ "integrity": "sha1-nqIbDWFQjRgZbvBKLGuatjD0wrA=",
+ "dev": true,
+ "requires": {
+ "@types/component-emitter": "^1.2.10",
+ "component-emitter": "~1.3.0",
+ "debug": "~4.3.1"
+ }
+ },
+ "sockjs": {
+ "version": "0.3.21",
+ "resolved": "https://registry.nlark.com/sockjs/download/sockjs-0.3.21.tgz",
+ "integrity": "sha1-s0/7mOeWkwtgoM+hGQTWozmn1Bc=",
+ "dev": true,
+ "requires": {
+ "faye-websocket": "^0.11.3",
+ "uuid": "^3.4.0",
+ "websocket-driver": "^0.7.4"
+ }
+ },
+ "sockjs-client": {
+ "version": "1.5.2",
+ "resolved": "https://registry.nlark.com/sockjs-client/download/sockjs-client-1.5.2.tgz",
+ "integrity": "sha1-S8SMLanOR2nxnccjOWtQ9cEjMKM=",
+ "dev": true,
+ "requires": {
+ "debug": "^3.2.6",
+ "eventsource": "^1.0.7",
+ "faye-websocket": "^0.11.3",
+ "inherits": "^2.0.4",
+ "json3": "^3.3.3",
+ "url-parse": "^1.5.3"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmmirror.com/debug/download/debug-3.2.7.tgz",
+ "integrity": "sha1-clgLfpFF+zm2Z2+cXl+xALk0F5o=",
+ "dev": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ }
+ }
+ },
+ "socks": {
+ "version": "2.6.1",
+ "resolved": "https://registry.nlark.com/socks/download/socks-2.6.1.tgz",
+ "integrity": "sha1-mJ5lNKB88zfesbHJSqpEKWUg0w4=",
+ "dev": true,
+ "requires": {
+ "ip": "^1.1.5",
+ "smart-buffer": "^4.1.0"
+ }
+ },
+ "socks-proxy-agent": {
+ "version": "6.1.1",
+ "resolved": "https://registry.npmmirror.com/socks-proxy-agent/download/socks-proxy-agent-6.1.1.tgz",
+ "integrity": "sha512-t8J0kG3csjA4g6FTbsMOWws+7R7vuRC8aQ/wy3/1OWmsgwA68zs/+cExQ0koSitUDXqhufF/YJr9wtNMZHw5Ew==",
+ "dev": true,
+ "requires": {
+ "agent-base": "^6.0.2",
+ "debug": "^4.3.1",
+ "socks": "^2.6.1"
+ }
+ },
+ "source-list-map": {
+ "version": "2.0.1",
+ "resolved": "https://registry.nlark.com/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-explorer": {
+ "version": "2.5.2",
+ "resolved": "https://registry.npm.taobao.org/source-map-explorer/download/source-map-explorer-2.5.2.tgz",
+ "integrity": "sha1-hXyrXdnR1xdenFwnOdycz7mfLcU=",
+ "dev": true,
+ "requires": {
+ "btoa": "^1.2.1",
+ "chalk": "^4.1.0",
+ "convert-source-map": "^1.7.0",
+ "ejs": "^3.1.5",
+ "escape-html": "^1.0.3",
+ "glob": "^7.1.6",
+ "gzip-size": "^6.0.0",
+ "lodash": "^4.17.20",
+ "open": "^7.3.1",
+ "source-map": "^0.7.3",
+ "temp": "^0.9.4",
+ "yargs": "^16.2.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.nlark.com/ansi-styles/download/ansi-styles-4.3.0.tgz",
+ "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=",
+ "dev": true,
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
+ },
+ "chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.nlark.com/chalk/download/chalk-4.1.2.tgz?cache=0&sync_timestamp=1627646697260&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fchalk%2Fdownload%2Fchalk-4.1.2.tgz",
+ "integrity": "sha1-qsTit3NKdAhnrrFr8CqtVWoeegE=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ }
+ },
+ "cliui": {
+ "version": "7.0.4",
+ "resolved": "https://registry.nlark.com/cliui/download/cliui-7.0.4.tgz",
+ "integrity": "sha1-oCZe5lVHb8gHrqnfPfjfd4OAi08=",
+ "dev": true,
+ "requires": {
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.0",
+ "wrap-ansi": "^7.0.0"
+ }
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npm.taobao.org/color-convert/download/color-convert-2.0.1.tgz",
+ "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=",
+ "dev": true,
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npm.taobao.org/color-name/download/color-name-1.1.4.tgz",
+ "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=",
+ "dev": true
+ },
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.nlark.com/has-flag/download/has-flag-4.0.0.tgz?cache=0&sync_timestamp=1626715907927&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fhas-flag%2Fdownload%2Fhas-flag-4.0.0.tgz",
+ "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=",
+ "dev": true
+ },
+ "open": {
+ "version": "7.4.2",
+ "resolved": "https://registry.npmmirror.com/open/download/open-7.4.2.tgz",
+ "integrity": "sha1-uBR+Jtzz5CYxbHMAif1x7dKcIyE=",
+ "dev": true,
+ "requires": {
+ "is-docker": "^2.0.0",
+ "is-wsl": "^2.1.1"
+ }
+ },
+ "supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmmirror.com/supports-color/download/supports-color-7.2.0.tgz",
+ "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=",
+ "dev": true,
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ },
+ "wrap-ansi": {
+ "version": "7.0.0",
+ "resolved": "https://registry.nlark.com/wrap-ansi/download/wrap-ansi-7.0.0.tgz?cache=0&sync_timestamp=1631557327268&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fwrap-ansi%2Fdownload%2Fwrap-ansi-7.0.0.tgz",
+ "integrity": "sha1-Z+FFz/UQpqaYS98RUpEdadLrnkM=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ }
+ },
+ "y18n": {
+ "version": "5.0.8",
+ "resolved": "https://registry.npm.taobao.org/y18n/download/y18n-5.0.8.tgz?cache=0&sync_timestamp=1617822684820&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fy18n%2Fdownload%2Fy18n-5.0.8.tgz",
+ "integrity": "sha1-f0k00PfKjFb5UxSTndzS3ZHOHVU=",
+ "dev": true
+ },
+ "yargs": {
+ "version": "16.2.0",
+ "resolved": "https://registry.npmmirror.com/yargs/download/yargs-16.2.0.tgz",
+ "integrity": "sha1-HIK/D2tqZur85+8w43b0mhJHf2Y=",
+ "dev": true,
+ "requires": {
+ "cliui": "^7.0.2",
+ "escalade": "^3.1.1",
+ "get-caller-file": "^2.0.5",
+ "require-directory": "^2.1.1",
+ "string-width": "^4.2.0",
+ "y18n": "^5.0.5",
+ "yargs-parser": "^20.2.2"
+ }
+ },
+ "yargs-parser": {
+ "version": "20.2.9",
+ "resolved": "https://registry.npmmirror.com/yargs-parser/download/yargs-parser-20.2.9.tgz?cache=0&sync_timestamp=1637031053426&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fyargs-parser%2Fdownload%2Fyargs-parser-20.2.9.tgz",
+ "integrity": "sha1-LrfcOwKJcY/ClfNidThFxBoMlO4=",
+ "dev": true
+ }
+ }
+ },
+ "source-map-js": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmmirror.com/source-map-js/download/source-map-js-1.0.1.tgz?cache=0&sync_timestamp=1636400772640&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fsource-map-js%2Fdownload%2Fsource-map-js-1.0.1.tgz",
+ "integrity": "sha512-4+TN2b3tqOCd/kaGRJ/sTYA0tR0mdXx26ipdolxcwtJVqEnqNYvlCAt1q3ypy4QMlYus+Zh34RNtYLoq2oQ4IA==",
+ "dev": true
+ },
+ "source-map-loader": {
+ "version": "3.0.0",
+ "resolved": "https://registry.nlark.com/source-map-loader/download/source-map-loader-3.0.0.tgz",
+ "integrity": "sha1-8qBO4oCK0Bx3TeprfSY5g587MEk=",
+ "dev": true,
+ "requires": {
+ "abab": "^2.0.5",
+ "iconv-lite": "^0.6.2",
+ "source-map-js": "^0.6.2"
+ },
+ "dependencies": {
+ "iconv-lite": {
+ "version": "0.6.3",
+ "resolved": "https://registry.nlark.com/iconv-lite/download/iconv-lite-0.6.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ficonv-lite%2Fdownload%2Ficonv-lite-0.6.3.tgz",
+ "integrity": "sha1-pS+AvzjaGVLrXGgXkHGYcaGnJQE=",
+ "dev": true,
+ "requires": {
+ "safer-buffer": ">= 2.1.2 < 3.0.0"
+ }
+ },
+ "source-map-js": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmmirror.com/source-map-js/download/source-map-js-0.6.2.tgz?cache=0&sync_timestamp=1636400772640&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fsource-map-js%2Fdownload%2Fsource-map-js-0.6.2.tgz",
+ "integrity": "sha1-C7XeYxtBz72mz7qL0FqA79/SOF4=",
+ "dev": true
+ }
+ }
+ },
+ "source-map-resolve": {
+ "version": "0.5.3",
+ "resolved": "https://registry.nlark.com/source-map-resolve/download/source-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.19",
+ "resolved": "https://registry.npmmirror.com/source-map-support/download/source-map-support-0.5.19.tgz",
+ "integrity": "sha1-qYti+G3K9PZzmWSMCFKRq56P7WE=",
+ "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.1",
+ "resolved": "https://registry.nlark.com/source-map-url/download/source-map-url-0.4.1.tgz",
+ "integrity": "sha1-CvZmBadFpaL5HPG7+KevvCg97FY=",
+ "dev": true
+ },
+ "sourcemap-codec": {
+ "version": "1.4.8",
+ "resolved": "https://registry.nlark.com/sourcemap-codec/download/sourcemap-codec-1.4.8.tgz",
+ "integrity": "sha1-6oBL2UhXQC5pktBaOO8a41qatMQ=",
+ "dev": true
+ },
+ "spdx-correct": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npm.taobao.org/spdx-correct/download/spdx-correct-3.1.1.tgz",
+ "integrity": "sha1-3s6BrJweZxPl99G28X1Gj6U9iak=",
+ "dev": true,
+ "requires": {
+ "spdx-expression-parse": "^3.0.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "spdx-exceptions": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npm.taobao.org/spdx-exceptions/download/spdx-exceptions-2.3.0.tgz",
+ "integrity": "sha1-PyjOGnegA3JoPq3kpDMYNSeiFj0=",
+ "dev": true
+ },
+ "spdx-expression-parse": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npm.taobao.org/spdx-expression-parse/download/spdx-expression-parse-3.0.1.tgz",
+ "integrity": "sha1-z3D1BILu/cmOPOCmgz5KU87rpnk=",
+ "dev": true,
+ "requires": {
+ "spdx-exceptions": "^2.1.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "spdx-license-ids": {
+ "version": "3.0.11",
+ "resolved": "https://registry.npmmirror.com/spdx-license-ids/download/spdx-license-ids-3.0.11.tgz?cache=0&sync_timestamp=1636978474315&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fspdx-license-ids%2Fdownload%2Fspdx-license-ids-3.0.11.tgz",
+ "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==",
+ "dev": true
+ },
+ "spdy": {
+ "version": "4.0.2",
+ "resolved": "https://registry.nlark.com/spdy/download/spdy-4.0.2.tgz",
+ "integrity": "sha1-t09GYgOj7aRSwCSSuR+56EonZ3s=",
+ "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.6.0",
+ "resolved": "https://registry.npm.taobao.org/readable-stream/download/readable-stream-3.6.0.tgz",
+ "integrity": "sha1-M3u9o63AcGvT4CRCaihtS0sskZg=",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ }
+ }
+ }
+ },
+ "specificity": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmmirror.com/specificity/download/specificity-0.4.1.tgz",
+ "integrity": "sha1-qrXmRQEtsIuhguFRFlc40AiHsBk=",
+ "dev": true
+ },
+ "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.nlark.com/sprintf-js/download/sprintf-js-1.0.3.tgz?cache=0&sync_timestamp=1618847174560&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fsprintf-js%2Fdownload%2Fsprintf-js-1.0.3.tgz",
+ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
+ "dev": true
+ },
+ "ssf": {
+ "version": "0.11.2",
+ "resolved": "https://registry.npm.taobao.org/ssf/download/ssf-0.11.2.tgz",
+ "integrity": "sha1-C5lpiyN1SNCI/EPN8rcMGnUSwGw=",
+ "requires": {
+ "frac": "~1.1.2"
+ }
+ },
+ "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"
+ }
+ },
+ "ssri": {
+ "version": "8.0.1",
+ "resolved": "https://registry.nlark.com/ssri/download/ssri-8.0.1.tgz?cache=0&sync_timestamp=1621364918494&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fssri%2Fdownload%2Fssri-8.0.1.tgz",
+ "integrity": "sha1-Y45OQ54v+9LNKJd21cpFfE9Roq8=",
+ "dev": true,
+ "requires": {
+ "minipass": "^3.1.1"
+ }
+ },
+ "stable": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmmirror.com/stable/download/stable-0.1.8.tgz",
+ "integrity": "sha1-g26zyDgv4pNv6vVEYxAXzn1Ho88=",
+ "dev": true
+ },
+ "state-toggle": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npm.taobao.org/state-toggle/download/state-toggle-1.0.3.tgz",
+ "integrity": "sha1-4SOxaojhQxObCcaFIiG8mBWRff4=",
+ "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.nlark.com/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?cache=0&sync_timestamp=1609654066899&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstatuses%2Fdownload%2Fstatuses-1.5.0.tgz",
+ "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=",
+ "dev": true
+ },
+ "streamroller": {
+ "version": "2.2.4",
+ "resolved": "https://registry.npm.taobao.org/streamroller/download/streamroller-2.2.4.tgz",
+ "integrity": "sha1-wZjO1C25QIamGTYIGHzoCl8rDlM=",
+ "dev": true,
+ "requires": {
+ "date-format": "^2.1.0",
+ "debug": "^4.1.1",
+ "fs-extra": "^8.1.0"
+ },
+ "dependencies": {
+ "date-format": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npm.taobao.org/date-format/download/date-format-2.1.0.tgz",
+ "integrity": "sha1-MdW16iEc9f12TNOLr50DPffhJc8=",
+ "dev": true
+ },
+ "fs-extra": {
+ "version": "8.1.0",
+ "resolved": "https://registry.nlark.com/fs-extra/download/fs-extra-8.1.0.tgz",
+ "integrity": "sha1-SdQ8RaiM2Wd2aMt74bRu/bjS4cA=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.2.0",
+ "jsonfile": "^4.0.0",
+ "universalify": "^0.1.0"
+ }
+ },
+ "jsonfile": {
+ "version": "4.0.0",
+ "resolved": "https://registry.nlark.com/jsonfile/download/jsonfile-4.0.0.tgz",
+ "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.6"
+ }
+ },
+ "universalify": {
+ "version": "0.1.2",
+ "resolved": "https://registry.nlark.com/universalify/download/universalify-0.1.2.tgz",
+ "integrity": "sha1-tkb2m+OULavOzJ1mOcgNwQXvqmY=",
+ "dev": true
+ }
+ }
+ },
+ "string-argv": {
+ "version": "0.3.1",
+ "resolved": "https://registry.nlark.com/string-argv/download/string-argv-0.3.1.tgz",
+ "integrity": "sha1-leL77AQnrhkYSTX4FtdKqkxcGdo=",
+ "dev": true
+ },
+ "string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmmirror.com/string-width/download/string-width-4.2.3.tgz?cache=0&sync_timestamp=1632421013520&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fstring-width%2Fdownload%2Fstring-width-4.2.3.tgz",
+ "integrity": "sha1-JpxxF9J7Ba0uU2gwqOyJXvnG0BA=",
+ "dev": true,
+ "requires": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ }
+ },
+ "string.prototype.trimend": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npm.taobao.org/string.prototype.trimend/download/string.prototype.trimend-1.0.4.tgz?cache=0&sync_timestamp=1614127461586&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstring.prototype.trimend%2Fdownload%2Fstring.prototype.trimend-1.0.4.tgz",
+ "integrity": "sha1-51rpDClCxjUEaGwYsoe0oLGkX4A=",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.3"
+ }
+ },
+ "string.prototype.trimstart": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npm.taobao.org/string.prototype.trimstart/download/string.prototype.trimstart-1.0.4.tgz?cache=0&sync_timestamp=1614127357785&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstring.prototype.trimstart%2Fdownload%2Fstring.prototype.trimstart-1.0.4.tgz",
+ "integrity": "sha1-s2OZr0qymZtMnGSL16P7K7Jv7u0=",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.3"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npm.taobao.org/string_decoder/download/string_decoder-1.1.1.tgz",
+ "integrity": "sha1-nPFhG6YmhdcDCunkujQUnDrwP8g=",
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "stringify-entities": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmmirror.com/stringify-entities/download/stringify-entities-1.3.2.tgz?cache=0&sync_timestamp=1636445763931&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fstringify-entities%2Fdownload%2Fstringify-entities-1.3.2.tgz",
+ "integrity": "sha1-qYQX5Ucf0iez5F09sYYcEcr2aPc=",
+ "dev": true,
+ "requires": {
+ "character-entities-html4": "^1.0.0",
+ "character-entities-legacy": "^1.0.0",
+ "is-alphanumerical": "^1.0.0",
+ "is-hexadecimal": "^1.0.0"
+ }
+ },
+ "stringify-object": {
+ "version": "3.3.0",
+ "resolved": "https://registry.nlark.com/stringify-object/download/stringify-object-3.3.0.tgz",
+ "integrity": "sha1-cDBlrvyhkwDTzoivT1s5VtdVZik=",
+ "dev": true,
+ "requires": {
+ "get-own-enumerable-property-symbols": "^3.0.0",
+ "is-obj": "^1.0.1",
+ "is-regexp": "^1.0.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmmirror.com/strip-ansi/download/strip-ansi-6.0.1.tgz?cache=0&sync_timestamp=1632420562057&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-6.0.1.tgz",
+ "integrity": "sha1-nibGPTD1NEPpSJSVshBdN7Z6hdk=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^5.0.1"
+ }
+ },
+ "strip-bom": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npm.taobao.org/strip-bom/download/strip-bom-3.0.0.tgz?cache=0&sync_timestamp=1618599642133&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-bom%2Fdownload%2Fstrip-bom-3.0.0.tgz",
+ "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
+ "dev": true
+ },
+ "strip-css-comments": {
+ "version": "4.1.0",
+ "resolved": "https://registry.nlark.com/strip-css-comments/download/strip-css-comments-4.1.0.tgz",
+ "integrity": "sha1-ynmOPmtxkp8LNU4L1y53WbLqF+A=",
+ "dev": true,
+ "requires": {
+ "is-regexp": "^2.1.0"
+ },
+ "dependencies": {
+ "is-regexp": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npm.taobao.org/is-regexp/download/is-regexp-2.1.0.tgz",
+ "integrity": "sha1-zXNKVoZOI7lWv058ZsOWpMCyLC0=",
+ "dev": true
+ }
+ }
+ },
+ "strip-eof": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmmirror.com/strip-eof/download/strip-eof-1.0.0.tgz",
+ "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=",
+ "dev": true
+ },
+ "strip-final-newline": {
+ "version": "2.0.0",
+ "resolved": "https://registry.nlark.com/strip-final-newline/download/strip-final-newline-2.0.0.tgz",
+ "integrity": "sha1-ibhS+y/L6Tb29LMYevsKEsGrWK0=",
+ "dev": true
+ },
+ "strip-indent": {
+ "version": "3.0.0",
+ "resolved": "https://registry.nlark.com/strip-indent/download/strip-indent-3.0.0.tgz?cache=0&sync_timestamp=1620053310624&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fstrip-indent%2Fdownload%2Fstrip-indent-3.0.0.tgz",
+ "integrity": "sha1-wy4c7pQLazQyx3G8LFS8znPNMAE=",
+ "dev": true,
+ "requires": {
+ "min-indent": "^1.0.0"
+ }
+ },
+ "strip-json-comments": {
+ "version": "3.1.1",
+ "resolved": "https://registry.nlark.com/strip-json-comments/download/strip-json-comments-3.1.1.tgz",
+ "integrity": "sha1-MfEoGzgyYwQ0gxwxDAHMzajL4AY=",
+ "dev": true
+ },
+ "style-loader": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmmirror.com/style-loader/download/style-loader-3.2.1.tgz?cache=0&sync_timestamp=1634872439692&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fstyle-loader%2Fdownload%2Fstyle-loader-3.2.1.tgz",
+ "integrity": "sha1-Y8uSDsFFyGaemlDpKWFFKh713N4=",
+ "dev": true
+ },
+ "style-search": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npm.taobao.org/style-search/download/style-search-0.1.0.tgz",
+ "integrity": "sha1-eVjHk+R+MuB9K1yv5cC/jhLneQI=",
+ "dev": true
+ },
+ "stylehacks": {
+ "version": "5.0.1",
+ "resolved": "https://registry.nlark.com/stylehacks/download/stylehacks-5.0.1.tgz?cache=0&sync_timestamp=1621449652268&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fstylehacks%2Fdownload%2Fstylehacks-5.0.1.tgz",
+ "integrity": "sha1-Mj7FVBmFIJhoBjiMf9rrw40sBvs=",
+ "dev": true,
+ "requires": {
+ "browserslist": "^4.16.0",
+ "postcss-selector-parser": "^6.0.4"
+ }
+ },
+ "stylelint": {
+ "version": "13.13.1",
+ "resolved": "https://registry.npmmirror.com/stylelint/download/stylelint-13.13.1.tgz",
+ "integrity": "sha1-/KnJ9d55kKsmoA8We4l48IOhjzw=",
+ "dev": true,
+ "requires": {
+ "@stylelint/postcss-css-in-js": "^0.37.2",
+ "@stylelint/postcss-markdown": "^0.36.2",
+ "autoprefixer": "^9.8.6",
+ "balanced-match": "^2.0.0",
+ "chalk": "^4.1.1",
+ "cosmiconfig": "^7.0.0",
+ "debug": "^4.3.1",
+ "execall": "^2.0.0",
+ "fast-glob": "^3.2.5",
+ "fastest-levenshtein": "^1.0.12",
+ "file-entry-cache": "^6.0.1",
+ "get-stdin": "^8.0.0",
+ "global-modules": "^2.0.0",
+ "globby": "^11.0.3",
+ "globjoin": "^0.1.4",
+ "html-tags": "^3.1.0",
+ "ignore": "^5.1.8",
+ "import-lazy": "^4.0.0",
+ "imurmurhash": "^0.1.4",
+ "known-css-properties": "^0.21.0",
+ "lodash": "^4.17.21",
+ "log-symbols": "^4.1.0",
+ "mathml-tag-names": "^2.1.3",
+ "meow": "^9.0.0",
+ "micromatch": "^4.0.4",
+ "normalize-selector": "^0.2.0",
+ "postcss": "^7.0.35",
+ "postcss-html": "^0.36.0",
+ "postcss-less": "^3.1.4",
+ "postcss-media-query-parser": "^0.2.3",
+ "postcss-resolve-nested-selector": "^0.1.1",
+ "postcss-safe-parser": "^4.0.2",
+ "postcss-sass": "^0.4.4",
+ "postcss-scss": "^2.1.1",
+ "postcss-selector-parser": "^6.0.5",
+ "postcss-syntax": "^0.36.2",
+ "postcss-value-parser": "^4.1.0",
+ "resolve-from": "^5.0.0",
+ "slash": "^3.0.0",
+ "specificity": "^0.4.1",
+ "string-width": "^4.2.2",
+ "strip-ansi": "^6.0.0",
+ "style-search": "^0.1.0",
+ "sugarss": "^2.0.0",
+ "svg-tags": "^1.0.0",
+ "table": "^6.6.0",
+ "v8-compile-cache": "^2.3.0",
+ "write-file-atomic": "^3.0.3"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.nlark.com/ansi-styles/download/ansi-styles-4.3.0.tgz",
+ "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=",
+ "dev": true,
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
+ },
+ "balanced-match": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npm.taobao.org/balanced-match/download/balanced-match-2.0.0.tgz",
+ "integrity": "sha1-3HD5INeNuLhYU1eVhnv0j4IGM9k=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.nlark.com/chalk/download/chalk-4.1.2.tgz?cache=0&sync_timestamp=1627646697260&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fchalk%2Fdownload%2Fchalk-4.1.2.tgz",
+ "integrity": "sha1-qsTit3NKdAhnrrFr8CqtVWoeegE=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ }
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npm.taobao.org/color-convert/download/color-convert-2.0.1.tgz",
+ "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=",
+ "dev": true,
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npm.taobao.org/color-name/download/color-name-1.1.4.tgz",
+ "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=",
+ "dev": true
+ },
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.nlark.com/has-flag/download/has-flag-4.0.0.tgz?cache=0&sync_timestamp=1626715907927&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fhas-flag%2Fdownload%2Fhas-flag-4.0.0.tgz",
+ "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=",
+ "dev": true
+ },
+ "meow": {
+ "version": "9.0.0",
+ "resolved": "https://registry.npmmirror.com/meow/download/meow-9.0.0.tgz?cache=0&sync_timestamp=1637477569022&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fmeow%2Fdownload%2Fmeow-9.0.0.tgz",
+ "integrity": "sha1-zZUQvFysne59A8c+4fmtlZ9Oo2Q=",
+ "dev": true,
+ "requires": {
+ "@types/minimist": "^1.2.0",
+ "camelcase-keys": "^6.2.2",
+ "decamelize": "^1.2.0",
+ "decamelize-keys": "^1.1.0",
+ "hard-rejection": "^2.1.0",
+ "minimist-options": "4.1.0",
+ "normalize-package-data": "^3.0.0",
+ "read-pkg-up": "^7.0.1",
+ "redent": "^3.0.0",
+ "trim-newlines": "^3.0.0",
+ "type-fest": "^0.18.0",
+ "yargs-parser": "^20.2.3"
+ }
+ },
+ "normalize-package-data": {
+ "version": "3.0.3",
+ "resolved": "https://registry.nlark.com/normalize-package-data/download/normalize-package-data-3.0.3.tgz",
+ "integrity": "sha1-28w+LaWVCaCYNCKITNFy7v36Ul4=",
+ "dev": true,
+ "requires": {
+ "hosted-git-info": "^4.0.1",
+ "is-core-module": "^2.5.0",
+ "semver": "^7.3.4",
+ "validate-npm-package-license": "^3.0.1"
+ }
+ },
+ "picocolors": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmmirror.com/picocolors/download/picocolors-0.2.1.tgz",
+ "integrity": "sha1-VwZw95NkaFHRuhNZlpYqutWHhZ8=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "7.0.39",
+ "resolved": "https://registry.npmmirror.com/postcss/download/postcss-7.0.39.tgz",
+ "integrity": "sha1-liQ3XZZWMOLh8sAqk1yCpZy0gwk=",
+ "dev": true,
+ "requires": {
+ "picocolors": "^0.2.1",
+ "source-map": "^0.6.1"
+ }
+ },
+ "read-pkg": {
+ "version": "5.2.0",
+ "resolved": "https://registry.nlark.com/read-pkg/download/read-pkg-5.2.0.tgz",
+ "integrity": "sha1-e/KVQ4yloz5WzTDgU7NO5yUMk8w=",
+ "dev": true,
+ "requires": {
+ "@types/normalize-package-data": "^2.4.0",
+ "normalize-package-data": "^2.5.0",
+ "parse-json": "^5.0.0",
+ "type-fest": "^0.6.0"
+ },
+ "dependencies": {
+ "hosted-git-info": {
+ "version": "2.8.9",
+ "resolved": "https://registry.nlark.com/hosted-git-info/download/hosted-git-info-2.8.9.tgz",
+ "integrity": "sha1-3/wL+aIcAiCQkPKqaUKeFBTa8/k=",
+ "dev": true
+ },
+ "normalize-package-data": {
+ "version": "2.5.0",
+ "resolved": "https://registry.nlark.com/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"
+ }
+ },
+ "semver": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npm.taobao.org/semver/download/semver-5.7.1.tgz?cache=0&sync_timestamp=1616463540350&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-5.7.1.tgz",
+ "integrity": "sha1-qVT5Ma66UI0we78Gnv8MAclhFvc=",
+ "dev": true
+ },
+ "type-fest": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmmirror.com/type-fest/download/type-fest-0.6.0.tgz?cache=0&sync_timestamp=1637149878210&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Ftype-fest%2Fdownload%2Ftype-fest-0.6.0.tgz",
+ "integrity": "sha1-jSojcNPfiG61yQraHFv2GIrPg4s=",
+ "dev": true
+ }
+ }
+ },
+ "read-pkg-up": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmmirror.com/read-pkg-up/download/read-pkg-up-7.0.1.tgz",
+ "integrity": "sha1-86YTV1hFlzOuK5VjgFbhhU5+9Qc=",
+ "dev": true,
+ "requires": {
+ "find-up": "^4.1.0",
+ "read-pkg": "^5.2.0",
+ "type-fest": "^0.8.1"
+ },
+ "dependencies": {
+ "type-fest": {
+ "version": "0.8.1",
+ "resolved": "https://registry.npmmirror.com/type-fest/download/type-fest-0.8.1.tgz?cache=0&sync_timestamp=1637149878210&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Ftype-fest%2Fdownload%2Ftype-fest-0.8.1.tgz",
+ "integrity": "sha1-CeJJ696FHTseSNJ8EFREZn8XuD0=",
+ "dev": true
+ }
+ }
+ },
+ "resolve-from": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npm.taobao.org/resolve-from/download/resolve-from-5.0.0.tgz",
+ "integrity": "sha1-w1IlhD3493bfIcV1V7wIfp39/Gk=",
+ "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
+ },
+ "supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmmirror.com/supports-color/download/supports-color-7.2.0.tgz",
+ "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=",
+ "dev": true,
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ },
+ "type-fest": {
+ "version": "0.18.1",
+ "resolved": "https://registry.npmmirror.com/type-fest/download/type-fest-0.18.1.tgz?cache=0&sync_timestamp=1637149878210&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Ftype-fest%2Fdownload%2Ftype-fest-0.18.1.tgz",
+ "integrity": "sha1-20vBUaSiz07r+a3V23VQjbbMhB8=",
+ "dev": true
+ },
+ "yargs-parser": {
+ "version": "20.2.9",
+ "resolved": "https://registry.npmmirror.com/yargs-parser/download/yargs-parser-20.2.9.tgz?cache=0&sync_timestamp=1637031053426&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fyargs-parser%2Fdownload%2Fyargs-parser-20.2.9.tgz",
+ "integrity": "sha1-LrfcOwKJcY/ClfNidThFxBoMlO4=",
+ "dev": true
+ }
+ }
+ },
+ "stylelint-config-prettier": {
+ "version": "8.0.2",
+ "resolved": "https://registry.npmmirror.com/stylelint-config-prettier/download/stylelint-config-prettier-8.0.2.tgz",
+ "integrity": "sha1-2p3jPaTFaJPL5+Jt8jmnN0BF4U4=",
+ "dev": true
+ },
+ "stylelint-config-rational-order": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npm.taobao.org/stylelint-config-rational-order/download/stylelint-config-rational-order-0.1.2.tgz",
+ "integrity": "sha1-TpjjkHg9Q38OxB+3O8QZkueNAqA=",
+ "dev": true,
+ "requires": {
+ "stylelint": "^9.10.1",
+ "stylelint-order": "^2.2.1"
+ },
+ "dependencies": {
+ "@nodelib/fs.stat": {
+ "version": "1.1.3",
+ "resolved": "https://registry.nlark.com/@nodelib/fs.stat/download/@nodelib/fs.stat-1.1.3.tgz",
+ "integrity": "sha1-K1o6s/kYzKSKjHVMCBaOPwPrphs=",
+ "dev": true
+ },
+ "ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmmirror.com/ajv/download/ajv-6.12.6.tgz?cache=0&sync_timestamp=1637522259668&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fajv%2Fdownload%2Fajv-6.12.6.tgz",
+ "integrity": "sha1-uvWmLoArB9l3A0WG+MO69a3ybfQ=",
+ "dev": true,
+ "requires": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ }
+ },
+ "ansi-regex": {
+ "version": "4.1.0",
+ "resolved": "https://registry.nlark.com/ansi-regex/download/ansi-regex-4.1.0.tgz?cache=0&sync_timestamp=1631634988487&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fansi-regex%2Fdownload%2Fansi-regex-4.1.0.tgz",
+ "integrity": "sha1-i5+PCM8ay4Q3Vqg5yox+MWjFGZc=",
+ "dev": true
+ },
+ "array-union": {
+ "version": "1.0.2",
+ "resolved": "https://registry.nlark.com/array-union/download/array-union-1.0.2.tgz",
+ "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=",
+ "dev": true,
+ "requires": {
+ "array-uniq": "^1.0.1"
+ }
+ },
+ "astral-regex": {
+ "version": "1.0.0",
+ "resolved": "https://registry.nlark.com/astral-regex/download/astral-regex-1.0.0.tgz",
+ "integrity": "sha1-bIw/uCfdQ+45GPJ7gngqt2WKb9k=",
+ "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"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.nlark.com/extend-shallow/download/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "camelcase": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmmirror.com/camelcase/download/camelcase-4.1.0.tgz?cache=0&sync_timestamp=1636945205805&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fcamelcase%2Fdownload%2Fcamelcase-4.1.0.tgz",
+ "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=",
+ "dev": true
+ },
+ "camelcase-keys": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmmirror.com/camelcase-keys/download/camelcase-keys-4.2.0.tgz?cache=0&sync_timestamp=1633332959770&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fcamelcase-keys%2Fdownload%2Fcamelcase-keys-4.2.0.tgz",
+ "integrity": "sha1-oqpfsa9oh1glnDLBQUJteJI7m3c=",
+ "dev": true,
+ "requires": {
+ "camelcase": "^4.1.0",
+ "map-obj": "^2.0.0",
+ "quick-lru": "^1.0.0"
+ }
+ },
+ "clone-regexp": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npm.taobao.org/clone-regexp/download/clone-regexp-1.0.1.tgz?cache=0&sync_timestamp=1617892092032&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fclone-regexp%2Fdownload%2Fclone-regexp-1.0.1.tgz",
+ "integrity": "sha1-BRgFzTMXM3XYIRj8CRhgbaOf1g8=",
+ "dev": true,
+ "requires": {
+ "is-regexp": "^1.0.0",
+ "is-supported-regexp-flag": "^1.0.0"
+ }
+ },
+ "cosmiconfig": {
+ "version": "5.2.1",
+ "resolved": "https://registry.nlark.com/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"
+ }
+ },
+ "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"
+ }
+ },
+ "emoji-regex": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmmirror.com/emoji-regex/download/emoji-regex-7.0.3.tgz?cache=0&sync_timestamp=1632751333727&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Femoji-regex%2Fdownload%2Femoji-regex-7.0.3.tgz",
+ "integrity": "sha1-kzoEBShgyF6DwSJHnEdIqOTHIVY=",
+ "dev": true
+ },
+ "execall": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npm.taobao.org/execall/download/execall-1.0.0.tgz?cache=0&sync_timestamp=1617892843041&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fexecall%2Fdownload%2Fexecall-1.0.0.tgz",
+ "integrity": "sha1-c9CQTjlbPKsGWLCNCewlMH8pu3M=",
+ "dev": true,
+ "requires": {
+ "clone-regexp": "^1.0.0"
+ }
+ },
+ "fast-glob": {
+ "version": "2.2.7",
+ "resolved": "https://registry.nlark.com/fast-glob/download/fast-glob-2.2.7.tgz?cache=0&sync_timestamp=1625773305786&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ffast-glob%2Fdownload%2Ffast-glob-2.2.7.tgz",
+ "integrity": "sha1-aVOFfDr6R1//ku5gFdUtpwpM050=",
+ "dev": true,
+ "requires": {
+ "@mrmlnc/readdir-enhanced": "^2.2.1",
+ "@nodelib/fs.stat": "^1.1.2",
+ "glob-parent": "^3.1.0",
+ "is-glob": "^4.0.0",
+ "merge2": "^1.2.3",
+ "micromatch": "^3.1.10"
+ }
+ },
+ "file-entry-cache": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npm.taobao.org/file-entry-cache/download/file-entry-cache-4.0.0.tgz?cache=0&sync_timestamp=1613794272556&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffile-entry-cache%2Fdownload%2Ffile-entry-cache-4.0.0.tgz",
+ "integrity": "sha1-YzVn0VNkrv4LKZ4eIXc16POp9ug=",
+ "dev": true,
+ "requires": {
+ "flat-cache": "^2.0.1"
+ }
+ },
+ "fill-range": {
+ "version": "4.0.0",
+ "resolved": "https://registry.nlark.com/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.nlark.com/extend-shallow/download/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "flat-cache": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npm.taobao.org/flat-cache/download/flat-cache-2.0.1.tgz",
+ "integrity": "sha1-XSltbwS9pEpGMKMBQTvbwuwIXsA=",
+ "dev": true,
+ "requires": {
+ "flatted": "^2.0.0",
+ "rimraf": "2.6.3",
+ "write": "1.0.3"
+ }
+ },
+ "flatted": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmmirror.com/flatted/download/flatted-2.0.2.tgz?cache=0&sync_timestamp=1636473847692&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fflatted%2Fdownload%2Fflatted-2.0.2.tgz",
+ "integrity": "sha1-RXWyHivO50NKqb5mL0t7X5wrUTg=",
+ "dev": true
+ },
+ "get-stdin": {
+ "version": "6.0.0",
+ "resolved": "https://registry.nlark.com/get-stdin/download/get-stdin-6.0.0.tgz",
+ "integrity": "sha1-ngm/cSs2CrkiXoEgSPcf3pyJZXs=",
+ "dev": true
+ },
+ "glob-parent": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmmirror.com/glob-parent/download/glob-parent-3.1.0.tgz?cache=0&sync_timestamp=1632953810778&other_urls=https%3A%2F%2Fregistry.npmmirror.com%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.npmmirror.com/is-glob/download/is-glob-3.1.0.tgz",
+ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "^2.1.0"
+ }
+ }
+ }
+ },
+ "globby": {
+ "version": "9.2.0",
+ "resolved": "https://registry.nlark.com/globby/download/globby-9.2.0.tgz",
+ "integrity": "sha1-/QKacGxwPSm90XD0tts6P3p8tj0=",
+ "dev": true,
+ "requires": {
+ "@types/glob": "^7.1.1",
+ "array-union": "^1.0.2",
+ "dir-glob": "^2.2.2",
+ "fast-glob": "^2.2.6",
+ "glob": "^7.1.3",
+ "ignore": "^4.0.3",
+ "pify": "^4.0.1",
+ "slash": "^2.0.0"
+ },
+ "dependencies": {
+ "ignore": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmmirror.com/ignore/download/ignore-4.0.6.tgz?cache=0&sync_timestamp=1635926632542&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fignore%2Fdownload%2Fignore-4.0.6.tgz",
+ "integrity": "sha1-dQ49tYYgh7RzfrrIIH/9HvJ7Jfw=",
+ "dev": true
+ }
+ }
+ },
+ "html-tags": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npm.taobao.org/html-tags/download/html-tags-2.0.0.tgz",
+ "integrity": "sha1-ELMKOGCF9Dzt41PMj6fLDe7qZos=",
+ "dev": true
+ },
+ "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=1608469532269&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"
+ },
+ "dependencies": {
+ "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
+ }
+ }
+ },
+ "import-lazy": {
+ "version": "3.1.0",
+ "resolved": "https://registry.nlark.com/import-lazy/download/import-lazy-3.1.0.tgz",
+ "integrity": "sha1-iRJ5ICyKIoD9vWZ029jaGh38Z8w=",
+ "dev": true
+ },
+ "indent-string": {
+ "version": "3.2.0",
+ "resolved": "https://registry.nlark.com/indent-string/download/indent-string-3.2.0.tgz?cache=0&sync_timestamp=1622604582006&other_urls=https%3A%2F%2Fregistry.nlark.com%2Findent-string%2Fdownload%2Findent-string-3.2.0.tgz",
+ "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=",
+ "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-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.nlark.com/kind-of/download/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "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
+ },
+ "known-css-properties": {
+ "version": "0.11.0",
+ "resolved": "https://registry.nlark.com/known-css-properties/download/known-css-properties-0.11.0.tgz",
+ "integrity": "sha1-DaeE8RXqd8drgVNtcFLpDubIaoo=",
+ "dev": true
+ },
+ "log-symbols": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npm.taobao.org/log-symbols/download/log-symbols-2.2.0.tgz",
+ "integrity": "sha1-V0Dhxdbw39pK2TI7UzIQfva0xAo=",
+ "dev": true,
+ "requires": {
+ "chalk": "^2.0.1"
+ }
+ },
+ "map-obj": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmmirror.com/map-obj/download/map-obj-2.0.0.tgz?cache=0&sync_timestamp=1634552719803&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fmap-obj%2Fdownload%2Fmap-obj-2.0.0.tgz",
+ "integrity": "sha1-plzSkIepJZi4eRJXpSPgISIqwfk=",
+ "dev": true
+ },
+ "meow": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmmirror.com/meow/download/meow-5.0.0.tgz?cache=0&sync_timestamp=1637477569022&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fmeow%2Fdownload%2Fmeow-5.0.0.tgz",
+ "integrity": "sha1-38c9Y6mvxxSl43F2DrXIi5EHiqQ=",
+ "dev": true,
+ "requires": {
+ "camelcase-keys": "^4.0.0",
+ "decamelize-keys": "^1.0.0",
+ "loud-rejection": "^1.0.0",
+ "minimist-options": "^3.0.1",
+ "normalize-package-data": "^2.3.4",
+ "read-pkg-up": "^3.0.0",
+ "redent": "^2.0.0",
+ "trim-newlines": "^2.0.0",
+ "yargs-parser": "^10.0.0"
+ }
+ },
+ "micromatch": {
+ "version": "3.1.10",
+ "resolved": "https://registry.nlark.com/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"
+ }
+ },
+ "minimist-options": {
+ "version": "3.0.2",
+ "resolved": "https://registry.nlark.com/minimist-options/download/minimist-options-3.0.2.tgz",
+ "integrity": "sha1-+6TIGRM54T7PTWG+sD8HAQPz2VQ=",
+ "dev": true,
+ "requires": {
+ "arrify": "^1.0.1",
+ "is-plain-obj": "^1.1.0"
+ }
+ },
+ "parse-json": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmmirror.com/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"
+ }
+ },
+ "path-type": {
+ "version": "3.0.0",
+ "resolved": "https://registry.nlark.com/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
+ }
+ }
+ },
+ "picocolors": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmmirror.com/picocolors/download/picocolors-0.2.1.tgz",
+ "integrity": "sha1-VwZw95NkaFHRuhNZlpYqutWHhZ8=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "7.0.39",
+ "resolved": "https://registry.npmmirror.com/postcss/download/postcss-7.0.39.tgz",
+ "integrity": "sha1-liQ3XZZWMOLh8sAqk1yCpZy0gwk=",
+ "dev": true,
+ "requires": {
+ "picocolors": "^0.2.1",
+ "source-map": "^0.6.1"
+ }
+ },
+ "postcss-sass": {
+ "version": "0.3.5",
+ "resolved": "https://registry.nlark.com/postcss-sass/download/postcss-sass-0.3.5.tgz",
+ "integrity": "sha1-bT458QGlPS76CR+VNJMRbTK+tow=",
+ "dev": true,
+ "requires": {
+ "gonzales-pe": "^4.2.3",
+ "postcss": "^7.0.1"
+ }
+ },
+ "postcss-selector-parser": {
+ "version": "3.1.2",
+ "resolved": "https://registry.nlark.com/postcss-selector-parser/download/postcss-selector-parser-3.1.2.tgz?cache=0&sync_timestamp=1620752939806&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpostcss-selector-parser%2Fdownload%2Fpostcss-selector-parser-3.1.2.tgz",
+ "integrity": "sha1-sxD1xMD9r3b5SQK7qjDbaqhPUnA=",
+ "dev": true,
+ "requires": {
+ "dot-prop": "^5.2.0",
+ "indexes-of": "^1.0.1",
+ "uniq": "^1.0.1"
+ }
+ },
+ "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
+ },
+ "quick-lru": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmmirror.com/quick-lru/download/quick-lru-1.1.0.tgz",
+ "integrity": "sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g=",
+ "dev": true
+ },
+ "redent": {
+ "version": "2.0.0",
+ "resolved": "https://registry.nlark.com/redent/download/redent-2.0.0.tgz?cache=0&sync_timestamp=1620070119923&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fredent%2Fdownload%2Fredent-2.0.0.tgz",
+ "integrity": "sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo=",
+ "dev": true,
+ "requires": {
+ "indent-string": "^3.0.0",
+ "strip-indent": "^2.0.0"
+ }
+ },
+ "rimraf": {
+ "version": "2.6.3",
+ "resolved": "https://registry.npm.taobao.org/rimraf/download/rimraf-2.6.3.tgz",
+ "integrity": "sha1-stEE/g2Psnz54KHNqCYt04M8bKs=",
+ "dev": true,
+ "requires": {
+ "glob": "^7.1.3"
+ }
+ },
+ "slash": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npm.taobao.org/slash/download/slash-2.0.0.tgz",
+ "integrity": "sha1-3lUoUaF1nfOo8gZTVEL17E3eq0Q=",
+ "dev": true
+ },
+ "slice-ansi": {
+ "version": "2.1.0",
+ "resolved": "https://registry.nlark.com/slice-ansi/download/slice-ansi-2.1.0.tgz",
+ "integrity": "sha1-ys12k0YaY3pXiNkqfdT7oGjoFjY=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.0",
+ "astral-regex": "^1.0.0",
+ "is-fullwidth-code-point": "^2.0.0"
+ }
+ },
+ "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.npmmirror.com/string-width/download/string-width-3.1.0.tgz?cache=0&sync_timestamp=1632421013520&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fstring-width%2Fdownload%2Fstring-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.npmmirror.com/strip-ansi/download/strip-ansi-5.2.0.tgz?cache=0&sync_timestamp=1632420562057&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-5.2.0.tgz",
+ "integrity": "sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^4.1.0"
+ }
+ },
+ "strip-indent": {
+ "version": "2.0.0",
+ "resolved": "https://registry.nlark.com/strip-indent/download/strip-indent-2.0.0.tgz?cache=0&sync_timestamp=1620053310624&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fstrip-indent%2Fdownload%2Fstrip-indent-2.0.0.tgz",
+ "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=",
+ "dev": true
+ },
+ "stylelint": {
+ "version": "9.10.1",
+ "resolved": "https://registry.npmmirror.com/stylelint/download/stylelint-9.10.1.tgz",
+ "integrity": "sha1-Xw7jcBRh3/HWgoThOG7+jwZ3p10=",
+ "dev": true,
+ "requires": {
+ "autoprefixer": "^9.0.0",
+ "balanced-match": "^1.0.0",
+ "chalk": "^2.4.1",
+ "cosmiconfig": "^5.0.0",
+ "debug": "^4.0.0",
+ "execall": "^1.0.0",
+ "file-entry-cache": "^4.0.0",
+ "get-stdin": "^6.0.0",
+ "global-modules": "^2.0.0",
+ "globby": "^9.0.0",
+ "globjoin": "^0.1.4",
+ "html-tags": "^2.0.0",
+ "ignore": "^5.0.4",
+ "import-lazy": "^3.1.0",
+ "imurmurhash": "^0.1.4",
+ "known-css-properties": "^0.11.0",
+ "leven": "^2.1.0",
+ "lodash": "^4.17.4",
+ "log-symbols": "^2.0.0",
+ "mathml-tag-names": "^2.0.1",
+ "meow": "^5.0.0",
+ "micromatch": "^3.1.10",
+ "normalize-selector": "^0.2.0",
+ "pify": "^4.0.0",
+ "postcss": "^7.0.13",
+ "postcss-html": "^0.36.0",
+ "postcss-jsx": "^0.36.0",
+ "postcss-less": "^3.1.0",
+ "postcss-markdown": "^0.36.0",
+ "postcss-media-query-parser": "^0.2.3",
+ "postcss-reporter": "^6.0.0",
+ "postcss-resolve-nested-selector": "^0.1.1",
+ "postcss-safe-parser": "^4.0.0",
+ "postcss-sass": "^0.3.5",
+ "postcss-scss": "^2.0.0",
+ "postcss-selector-parser": "^3.1.0",
+ "postcss-syntax": "^0.36.2",
+ "postcss-value-parser": "^3.3.0",
+ "resolve-from": "^4.0.0",
+ "signal-exit": "^3.0.2",
+ "slash": "^2.0.0",
+ "specificity": "^0.4.1",
+ "string-width": "^3.0.0",
+ "style-search": "^0.1.0",
+ "sugarss": "^2.0.0",
+ "svg-tags": "^1.0.0",
+ "table": "^5.0.0"
+ }
+ },
+ "stylelint-order": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmmirror.com/stylelint-order/download/stylelint-order-2.2.1.tgz",
+ "integrity": "sha1-zS1KDYHZHHBfHSdaWEh+WtWqWCg=",
+ "dev": true,
+ "requires": {
+ "lodash": "^4.17.10",
+ "postcss": "^7.0.2",
+ "postcss-sorting": "^4.1.0"
+ }
+ },
+ "table": {
+ "version": "5.4.6",
+ "resolved": "https://registry.npmmirror.com/table/download/table-5.4.6.tgz?cache=0&sync_timestamp=1636037112686&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Ftable%2Fdownload%2Ftable-5.4.6.tgz",
+ "integrity": "sha1-EpLRlQDOP4YFOwXw6Ofko7shB54=",
+ "dev": true,
+ "requires": {
+ "ajv": "^6.10.2",
+ "lodash": "^4.17.14",
+ "slice-ansi": "^2.1.0",
+ "string-width": "^3.0.0"
+ }
+ },
+ "to-regex-range": {
+ "version": "2.1.1",
+ "resolved": "https://registry.nlark.com/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"
+ }
+ },
+ "trim-newlines": {
+ "version": "2.0.0",
+ "resolved": "https://registry.nlark.com/trim-newlines/download/trim-newlines-2.0.0.tgz?cache=0&sync_timestamp=1623341510447&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ftrim-newlines%2Fdownload%2Ftrim-newlines-2.0.0.tgz",
+ "integrity": "sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA=",
+ "dev": true
+ },
+ "yargs-parser": {
+ "version": "10.1.0",
+ "resolved": "https://registry.npmmirror.com/yargs-parser/download/yargs-parser-10.1.0.tgz?cache=0&sync_timestamp=1637031053426&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fyargs-parser%2Fdownload%2Fyargs-parser-10.1.0.tgz",
+ "integrity": "sha1-cgImW4n36eny5XZeD+c1qQXtuqg=",
+ "dev": true,
+ "requires": {
+ "camelcase": "^4.1.0"
+ }
+ }
+ }
+ },
+ "stylelint-config-recommended": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmmirror.com/stylelint-config-recommended/download/stylelint-config-recommended-5.0.0.tgz",
+ "integrity": "sha1-+1ZT9JWmC0k48q0+d3EtnhA5rng=",
+ "dev": true
+ },
+ "stylelint-config-standard": {
+ "version": "22.0.0",
+ "resolved": "https://registry.npmmirror.com/stylelint-config-standard/download/stylelint-config-standard-22.0.0.tgz",
+ "integrity": "sha1-yGC+mhPrvBsIRFb6EFJ78TpErd8=",
+ "dev": true,
+ "requires": {
+ "stylelint-config-recommended": "^5.0.0"
+ }
+ },
+ "stylelint-declaration-block-no-ignored-properties": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmmirror.com/stylelint-declaration-block-no-ignored-properties/download/stylelint-declaration-block-no-ignored-properties-2.5.0.tgz?cache=0&sync_timestamp=1636703410304&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fstylelint-declaration-block-no-ignored-properties%2Fdownload%2Fstylelint-declaration-block-no-ignored-properties-2.5.0.tgz",
+ "integrity": "sha512-UNz5nUC5GMgMb6GPc/pHUTC0+ydxTdj2mUn7XcKRdwQoiUzzUmWWdSf1aFv2UzrW4x8JYNReE1u5JOj7g0ThJw==",
+ "dev": true
+ },
+ "stylelint-order": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmmirror.com/stylelint-order/download/stylelint-order-4.1.0.tgz",
+ "integrity": "sha1-aS0Ft9DCNaxm/PXqHZ5fCKdnR/Y=",
+ "dev": true,
+ "requires": {
+ "lodash": "^4.17.15",
+ "postcss": "^7.0.31",
+ "postcss-sorting": "^5.0.1"
+ },
+ "dependencies": {
+ "picocolors": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmmirror.com/picocolors/download/picocolors-0.2.1.tgz",
+ "integrity": "sha1-VwZw95NkaFHRuhNZlpYqutWHhZ8=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "7.0.39",
+ "resolved": "https://registry.npmmirror.com/postcss/download/postcss-7.0.39.tgz",
+ "integrity": "sha1-liQ3XZZWMOLh8sAqk1yCpZy0gwk=",
+ "dev": true,
+ "requires": {
+ "picocolors": "^0.2.1",
+ "source-map": "^0.6.1"
+ }
+ },
+ "postcss-sorting": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmmirror.com/postcss-sorting/download/postcss-sorting-5.0.1.tgz",
+ "integrity": "sha1-ENXQBZ7qgzTazIIMASGGQDW8PxE=",
+ "dev": true,
+ "requires": {
+ "lodash": "^4.17.14",
+ "postcss": "^7.0.17"
+ }
+ },
+ "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
+ }
+ }
+ },
+ "stylus": {
+ "version": "0.54.8",
+ "resolved": "https://registry.nlark.com/stylus/download/stylus-0.54.8.tgz",
+ "integrity": "sha1-PaPmWWa8Vnp7BEv+DuzmU+CZ0Uc=",
+ "dev": true,
+ "requires": {
+ "css-parse": "~2.0.0",
+ "debug": "~3.1.0",
+ "glob": "^7.1.6",
+ "mkdirp": "~1.0.4",
+ "safer-buffer": "^2.1.2",
+ "sax": "~1.2.4",
+ "semver": "^6.3.0",
+ "source-map": "^0.7.3"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmmirror.com/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.npmmirror.com/ms/download/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ },
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz?cache=0&sync_timestamp=1616463540350&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-6.3.0.tgz",
+ "integrity": "sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0=",
+ "dev": true
+ }
+ }
+ },
+ "stylus-loader": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmmirror.com/stylus-loader/download/stylus-loader-6.1.0.tgz?cache=0&sync_timestamp=1634037061456&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fstylus-loader%2Fdownload%2Fstylus-loader-6.1.0.tgz",
+ "integrity": "sha1-ejpxmifLK5YXiW1too/alMPtl2I=",
+ "dev": true,
+ "requires": {
+ "fast-glob": "^3.2.5",
+ "klona": "^2.0.4",
+ "normalize-path": "^3.0.0"
+ }
+ },
+ "sugarss": {
+ "version": "2.0.0",
+ "resolved": "https://registry.nlark.com/sugarss/download/sugarss-2.0.0.tgz",
+ "integrity": "sha1-3dduASSyl9QL88yjHIsi7LQ7xh0=",
+ "dev": true,
+ "requires": {
+ "postcss": "^7.0.2"
+ },
+ "dependencies": {
+ "picocolors": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmmirror.com/picocolors/download/picocolors-0.2.1.tgz",
+ "integrity": "sha1-VwZw95NkaFHRuhNZlpYqutWHhZ8=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "7.0.39",
+ "resolved": "https://registry.npmmirror.com/postcss/download/postcss-7.0.39.tgz",
+ "integrity": "sha1-liQ3XZZWMOLh8sAqk1yCpZy0gwk=",
+ "dev": true,
+ "requires": {
+ "picocolors": "^0.2.1",
+ "source-map": "^0.6.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": "5.5.0",
+ "resolved": "https://registry.npmmirror.com/supports-color/download/supports-color-5.5.0.tgz",
+ "integrity": "sha1-4uaaRKyHcveKHsCzW2id9lMO/I8=",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ },
+ "svg-tags": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npm.taobao.org/svg-tags/download/svg-tags-1.0.0.tgz",
+ "integrity": "sha1-WPcc7jvVGbWdSyqEO2x95krAR2Q=",
+ "dev": true
+ },
+ "svgo": {
+ "version": "2.8.0",
+ "resolved": "https://registry.npmmirror.com/svgo/download/svgo-2.8.0.tgz",
+ "integrity": "sha1-T/gMzmcQ3CeV8MfHQQHmdkz8zSQ=",
+ "dev": true,
+ "requires": {
+ "@trysound/sax": "0.2.0",
+ "commander": "^7.2.0",
+ "css-select": "^4.1.3",
+ "css-tree": "^1.1.3",
+ "csso": "^4.2.0",
+ "picocolors": "^1.0.0",
+ "stable": "^0.1.8"
+ },
+ "dependencies": {
+ "commander": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmmirror.com/commander/download/commander-7.2.0.tgz",
+ "integrity": "sha1-o2y1fQtQHOEI5NIFWaFQo5HZerc=",
+ "dev": true
+ }
+ }
+ },
+ "swagger-schema-official": {
+ "version": "2.0.0-bab6bed",
+ "resolved": "https://registry.npm.taobao.org/swagger-schema-official/download/swagger-schema-official-2.0.0-bab6bed.tgz",
+ "integrity": "sha1-cAcEaNbSl3ylI3suUZyn0Gouo/0=",
+ "dev": true
+ },
+ "swagger-typescript-api": {
+ "version": "9.3.1",
+ "resolved": "https://registry.npmmirror.com/swagger-typescript-api/download/swagger-typescript-api-9.3.1.tgz",
+ "integrity": "sha1-B986qOg6OJc1am6CDoi4NIgwqms=",
+ "dev": true,
+ "requires": {
+ "@types/swagger-schema-official": "2.0.21",
+ "axios": "^0.21.4",
+ "commander": "^6.2.1",
+ "cosmiconfig": "^7.0.0",
+ "eta": "^1.12.1",
+ "js-yaml": "^4.0.0",
+ "lodash": "^4.17.21",
+ "make-dir": "^3.1.0",
+ "nanoid": "^3.1.22",
+ "node-emoji": "^1.10.0",
+ "prettier": "^2.2.1",
+ "swagger-schema-official": "2.0.0-bab6bed",
+ "swagger2openapi": "^7.0.5",
+ "typescript": "^4.2.4"
+ },
+ "dependencies": {
+ "argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.nlark.com/argparse/download/argparse-2.0.1.tgz",
+ "integrity": "sha1-JG9Q88p4oyQPbJl+ipvR6sSeSzg=",
+ "dev": true
+ },
+ "commander": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmmirror.com/commander/download/commander-6.2.1.tgz",
+ "integrity": "sha1-B5LraC37wyWZm7K4T93duhEKxzw=",
+ "dev": true
+ },
+ "js-yaml": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npm.taobao.org/js-yaml/download/js-yaml-4.1.0.tgz?cache=0&sync_timestamp=1618435004368&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjs-yaml%2Fdownload%2Fjs-yaml-4.1.0.tgz",
+ "integrity": "sha1-wftl+PUBeQHN0slRhkuhhFihBgI=",
+ "dev": true,
+ "requires": {
+ "argparse": "^2.0.1"
+ }
+ }
+ }
+ },
+ "swagger2openapi": {
+ "version": "7.0.8",
+ "resolved": "https://registry.nlark.com/swagger2openapi/download/swagger2openapi-7.0.8.tgz",
+ "integrity": "sha1-EsiNXed2yxy7p1iZSTD0CtCvrFk=",
+ "dev": true,
+ "requires": {
+ "call-me-maybe": "^1.0.1",
+ "node-fetch": "^2.6.1",
+ "node-fetch-h2": "^2.3.0",
+ "node-readfiles": "^0.2.0",
+ "oas-kit-common": "^1.0.8",
+ "oas-resolver": "^2.5.6",
+ "oas-schema-walker": "^1.1.5",
+ "oas-validator": "^5.0.8",
+ "reftools": "^1.1.9",
+ "yaml": "^1.10.0",
+ "yargs": "^17.0.1"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.nlark.com/ansi-styles/download/ansi-styles-4.3.0.tgz",
+ "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=",
+ "dev": true,
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
+ },
+ "cliui": {
+ "version": "7.0.4",
+ "resolved": "https://registry.nlark.com/cliui/download/cliui-7.0.4.tgz",
+ "integrity": "sha1-oCZe5lVHb8gHrqnfPfjfd4OAi08=",
+ "dev": true,
+ "requires": {
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.0",
+ "wrap-ansi": "^7.0.0"
+ }
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npm.taobao.org/color-convert/download/color-convert-2.0.1.tgz",
+ "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=",
+ "dev": true,
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npm.taobao.org/color-name/download/color-name-1.1.4.tgz",
+ "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=",
+ "dev": true
+ },
+ "wrap-ansi": {
+ "version": "7.0.0",
+ "resolved": "https://registry.nlark.com/wrap-ansi/download/wrap-ansi-7.0.0.tgz?cache=0&sync_timestamp=1631557327268&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fwrap-ansi%2Fdownload%2Fwrap-ansi-7.0.0.tgz",
+ "integrity": "sha1-Z+FFz/UQpqaYS98RUpEdadLrnkM=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ }
+ },
+ "y18n": {
+ "version": "5.0.8",
+ "resolved": "https://registry.npm.taobao.org/y18n/download/y18n-5.0.8.tgz?cache=0&sync_timestamp=1617822684820&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fy18n%2Fdownload%2Fy18n-5.0.8.tgz",
+ "integrity": "sha1-f0k00PfKjFb5UxSTndzS3ZHOHVU=",
+ "dev": true
+ },
+ "yargs": {
+ "version": "17.2.1",
+ "resolved": "https://registry.npmmirror.com/yargs/download/yargs-17.2.1.tgz",
+ "integrity": "sha1-4slbl5ag4ffzv0QnhjtC4EGBkeo=",
+ "dev": true,
+ "requires": {
+ "cliui": "^7.0.2",
+ "escalade": "^3.1.1",
+ "get-caller-file": "^2.0.5",
+ "require-directory": "^2.1.1",
+ "string-width": "^4.2.0",
+ "y18n": "^5.0.5",
+ "yargs-parser": "^20.2.2"
+ }
+ },
+ "yargs-parser": {
+ "version": "20.2.9",
+ "resolved": "https://registry.npmmirror.com/yargs-parser/download/yargs-parser-20.2.9.tgz?cache=0&sync_timestamp=1637031053426&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fyargs-parser%2Fdownload%2Fyargs-parser-20.2.9.tgz",
+ "integrity": "sha1-LrfcOwKJcY/ClfNidThFxBoMlO4=",
+ "dev": true
+ }
+ }
+ },
+ "symbol-observable": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npm.taobao.org/symbol-observable/download/symbol-observable-4.0.0.tgz?cache=0&sync_timestamp=1618451954701&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsymbol-observable%2Fdownload%2Fsymbol-observable-4.0.0.tgz",
+ "integrity": "sha1-W0JfGSJ56H8vm5N6yFQNGYSzkgU=",
+ "dev": true
+ },
+ "table": {
+ "version": "6.7.3",
+ "resolved": "https://registry.npmmirror.com/table/download/table-6.7.3.tgz?cache=0&sync_timestamp=1636037112686&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Ftable%2Fdownload%2Ftable-6.7.3.tgz",
+ "integrity": "sha1-JVOIQ5cVpzg5G9LuTLyomk0Fqbc=",
+ "dev": true,
+ "requires": {
+ "ajv": "^8.0.1",
+ "lodash.truncate": "^4.4.2",
+ "slice-ansi": "^4.0.0",
+ "string-width": "^4.2.3",
+ "strip-ansi": "^6.0.1"
+ }
+ },
+ "tapable": {
+ "version": "2.2.1",
+ "resolved": "https://registry.nlark.com/tapable/download/tapable-2.2.1.tgz",
+ "integrity": "sha1-GWenPvQGCoLxKrlq+G1S/bdu7KA=",
+ "dev": true
+ },
+ "tar": {
+ "version": "6.1.11",
+ "resolved": "https://registry.nlark.com/tar/download/tar-6.1.11.tgz",
+ "integrity": "sha1-Z2CjjwA6+hsv/Q/+npq70Oqz1iE=",
+ "dev": true,
+ "requires": {
+ "chownr": "^2.0.0",
+ "fs-minipass": "^2.0.0",
+ "minipass": "^3.0.0",
+ "minizlib": "^2.1.1",
+ "mkdirp": "^1.0.3",
+ "yallist": "^4.0.0"
+ }
+ },
+ "temp": {
+ "version": "0.9.4",
+ "resolved": "https://registry.npm.taobao.org/temp/download/temp-0.9.4.tgz",
+ "integrity": "sha1-zSCoWAy2NjXQ5OnUvZidRChudiA=",
+ "dev": true,
+ "requires": {
+ "mkdirp": "^0.5.1",
+ "rimraf": "~2.6.2"
+ },
+ "dependencies": {
+ "mkdirp": {
+ "version": "0.5.5",
+ "resolved": "https://registry.npmmirror.com/mkdirp/download/mkdirp-0.5.5.tgz",
+ "integrity": "sha1-2Rzv1i0UNsoPQWIOJRKI1CAJne8=",
+ "dev": true,
+ "requires": {
+ "minimist": "^1.2.5"
+ }
+ },
+ "rimraf": {
+ "version": "2.6.3",
+ "resolved": "https://registry.npm.taobao.org/rimraf/download/rimraf-2.6.3.tgz",
+ "integrity": "sha1-stEE/g2Psnz54KHNqCYt04M8bKs=",
+ "dev": true,
+ "requires": {
+ "glob": "^7.1.3"
+ }
+ }
+ }
+ },
+ "terser": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmmirror.com/terser/download/terser-5.7.1.tgz?cache=0&sync_timestamp=1636988182324&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fterser%2Fdownload%2Fterser-5.7.1.tgz",
+ "integrity": "sha1-LcemEAm2a7Y4MFyyqCR2OxFr94Q=",
+ "dev": true,
+ "requires": {
+ "commander": "^2.20.0",
+ "source-map": "~0.7.2",
+ "source-map-support": "~0.5.19"
+ }
+ },
+ "terser-webpack-plugin": {
+ "version": "5.1.4",
+ "resolved": "https://registry.npmmirror.com/terser-webpack-plugin/download/terser-webpack-plugin-5.1.4.tgz?cache=0&sync_timestamp=1636385901001&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fterser-webpack-plugin%2Fdownload%2Fterser-webpack-plugin-5.1.4.tgz",
+ "integrity": "sha1-w2nPikeqmSK9DYqU/j09oRp2eKE=",
+ "dev": true,
+ "requires": {
+ "jest-worker": "^27.0.2",
+ "p-limit": "^3.1.0",
+ "schema-utils": "^3.0.0",
+ "serialize-javascript": "^6.0.0",
+ "source-map": "^0.6.1",
+ "terser": "^5.7.0"
+ },
+ "dependencies": {
+ "ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmmirror.com/ajv/download/ajv-6.12.6.tgz?cache=0&sync_timestamp=1637522259668&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fajv%2Fdownload%2Fajv-6.12.6.tgz",
+ "integrity": "sha1-uvWmLoArB9l3A0WG+MO69a3ybfQ=",
+ "dev": true,
+ "requires": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ }
+ },
+ "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
+ },
+ "p-limit": {
+ "version": "3.1.0",
+ "resolved": "https://registry.nlark.com/p-limit/download/p-limit-3.1.0.tgz?cache=0&sync_timestamp=1628812766275&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fp-limit%2Fdownload%2Fp-limit-3.1.0.tgz",
+ "integrity": "sha1-4drMvnjQ0TiMoYxk/qOOPlfjcGs=",
+ "dev": true,
+ "requires": {
+ "yocto-queue": "^0.1.0"
+ }
+ },
+ "schema-utils": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmmirror.com/schema-utils/download/schema-utils-3.1.1.tgz?cache=0&sync_timestamp=1637075888461&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fschema-utils%2Fdownload%2Fschema-utils-3.1.1.tgz",
+ "integrity": "sha1-vHTEtraZXB2I92qLd76nIZ4MgoE=",
+ "dev": true,
+ "requires": {
+ "@types/json-schema": "^7.0.8",
+ "ajv": "^6.12.5",
+ "ajv-keywords": "^3.5.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
+ }
+ }
+ },
+ "text-segmentation": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/text-segmentation/-/text-segmentation-1.0.3.tgz",
+ "integrity": "sha512-iOiPUo/BGnZ6+54OsWxZidGCsdU8YbE4PSpdPinp7DeMtUJNJBoJ/ouUSTJjHkh1KntHaltHl/gDs2FC4i5+Nw==",
+ "requires": {
+ "utrie": "^1.0.2"
+ }
+ },
+ "text-table": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npm.taobao.org/text-table/download/text-table-0.2.0.tgz",
+ "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
+ "dev": true
+ },
+ "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
+ },
+ "thunky": {
+ "version": "1.1.0",
+ "resolved": "https://registry.nlark.com/thunky/download/thunky-1.1.0.tgz",
+ "integrity": "sha1-Wrr3FKlAXbBQRzK7zNLO3Z75U30=",
+ "dev": true
+ },
+ "timsort": {
+ "version": "0.3.0",
+ "resolved": "https://registry.nlark.com/timsort/download/timsort-0.3.0.tgz",
+ "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=",
+ "dev": true
+ },
+ "tmp": {
+ "version": "0.0.33",
+ "resolved": "https://registry.nlark.com/tmp/download/tmp-0.0.33.tgz",
+ "integrity": "sha1-bTQzWIl2jSGyvNoKonfO07G/rfk=",
+ "dev": true,
+ "requires": {
+ "os-tmpdir": "~1.0.2"
+ }
+ },
+ "to-fast-properties": {
+ "version": "2.0.0",
+ "resolved": "https://registry.nlark.com/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.nlark.com/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.nlark.com/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.nlark.com/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.npmmirror.com/toidentifier/download/toidentifier-1.0.0.tgz?cache=0&sync_timestamp=1636938489272&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Ftoidentifier%2Fdownload%2Ftoidentifier-1.0.0.tgz",
+ "integrity": "sha1-fhvjRw8ed5SLxD2Uo8j013UrpVM=",
+ "dev": true
+ },
+ "topojson-client": {
+ "version": "3.1.0",
+ "resolved": "https://registry.nlark.com/topojson-client/download/topojson-client-3.1.0.tgz",
+ "integrity": "sha1-Iuix7QiiuSL+60r29Ttu8JpGe5k=",
+ "requires": {
+ "commander": "2"
+ }
+ },
+ "tough-cookie": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npm.taobao.org/tough-cookie/download/tough-cookie-2.5.0.tgz",
+ "integrity": "sha1-zZ+yoKodWhK0c72fuW+j3P9lreI=",
+ "dev": true,
+ "requires": {
+ "psl": "^1.1.28",
+ "punycode": "^2.1.1"
+ }
+ },
+ "tr46": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmmirror.com/tr46/download/tr46-0.0.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Ftr46%2Fdownload%2Ftr46-0.0.3.tgz",
+ "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=",
+ "dev": true
+ },
+ "tree-kill": {
+ "version": "1.2.2",
+ "resolved": "https://registry.nlark.com/tree-kill/download/tree-kill-1.2.2.tgz",
+ "integrity": "sha1-TKCakJLIi3OnzcXooBtQeweQoMw=",
+ "dev": true
+ },
+ "trim": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npm.taobao.org/trim/download/trim-0.0.1.tgz",
+ "integrity": "sha1-WFhUf2spB1fulczMZm+1AITEYN0=",
+ "dev": true
+ },
+ "trim-newlines": {
+ "version": "3.0.1",
+ "resolved": "https://registry.nlark.com/trim-newlines/download/trim-newlines-3.0.1.tgz?cache=0&sync_timestamp=1623341510447&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ftrim-newlines%2Fdownload%2Ftrim-newlines-3.0.1.tgz",
+ "integrity": "sha1-Jgpdli2LdSQlsy86fbDcrNF2wUQ=",
+ "dev": true
+ },
+ "trim-trailing-lines": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npm.taobao.org/trim-trailing-lines/download/trim-trailing-lines-1.1.4.tgz",
+ "integrity": "sha1-vUq77HzIgEYvELLItc4djR7HwsA=",
+ "dev": true
+ },
+ "trough": {
+ "version": "1.0.5",
+ "resolved": "https://registry.nlark.com/trough/download/trough-1.0.5.tgz?cache=0&sync_timestamp=1625401006146&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ftrough%2Fdownload%2Ftrough-1.0.5.tgz",
+ "integrity": "sha1-uLY5zvrX0LsqvTfUM/+Ck++l9AY=",
+ "dev": true
+ },
+ "ts-node": {
+ "version": "8.3.0",
+ "resolved": "https://registry.npmmirror.com/ts-node/download/ts-node-8.3.0.tgz",
+ "integrity": "sha1-5AWWGEETcZJKH7XzsSWRXzJO+1c=",
+ "dev": true,
+ "requires": {
+ "arg": "^4.1.0",
+ "diff": "^4.0.1",
+ "make-error": "^1.1.1",
+ "source-map-support": "^0.5.6",
+ "yn": "^3.0.0"
+ }
+ },
+ "tsconfig-paths": {
+ "version": "3.12.0",
+ "resolved": "https://registry.npmmirror.com/tsconfig-paths/download/tsconfig-paths-3.12.0.tgz",
+ "integrity": "sha512-e5adrnOYT6zqVnWqZu7i/BQ3BnhzvGbjEjejFXO20lKIKpwTaupkCPgEfv4GZK1IBciJUEhYs3J3p75FdaTFVg==",
+ "dev": true,
+ "requires": {
+ "@types/json5": "^0.0.29",
+ "json5": "^1.0.1",
+ "minimist": "^1.2.0",
+ "strip-bom": "^3.0.0"
+ },
+ "dependencies": {
+ "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"
+ }
+ }
+ }
+ },
+ "tslib": {
+ "version": "2.3.1",
+ "resolved": "https://registry.nlark.com/tslib/download/tslib-2.3.1.tgz?cache=0&sync_timestamp=1628722556410&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ftslib%2Fdownload%2Ftslib-2.3.1.tgz",
+ "integrity": "sha1-6KM1rdXOrlGqJh0ypJAVjvBC7wE="
+ },
+ "tsutils": {
+ "version": "3.21.0",
+ "resolved": "https://registry.npm.taobao.org/tsutils/download/tsutils-3.21.0.tgz?cache=0&sync_timestamp=1615138426726&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftsutils%2Fdownload%2Ftsutils-3.21.0.tgz",
+ "integrity": "sha1-tIcX05TOpsHglpg+7Vjp1hcVtiM=",
+ "dev": true,
+ "requires": {
+ "tslib": "^1.8.1"
+ },
+ "dependencies": {
+ "tslib": {
+ "version": "1.14.1",
+ "resolved": "https://registry.nlark.com/tslib/download/tslib-1.14.1.tgz?cache=0&sync_timestamp=1628722556410&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ftslib%2Fdownload%2Ftslib-1.14.1.tgz",
+ "integrity": "sha1-zy04vcNKE0vK8QkcQfZhni9nLQA=",
+ "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"
+ }
+ },
+ "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
+ },
+ "type-check": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npm.taobao.org/type-check/download/type-check-0.4.0.tgz",
+ "integrity": "sha1-B7ggO/pwVsBlcFDjzNLDdzC6uPE=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "^1.2.1"
+ }
+ },
+ "type-fest": {
+ "version": "0.21.3",
+ "resolved": "https://registry.npmmirror.com/type-fest/download/type-fest-0.21.3.tgz?cache=0&sync_timestamp=1637149878210&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Ftype-fest%2Fdownload%2Ftype-fest-0.21.3.tgz",
+ "integrity": "sha1-0mCiSwGYQ24TP6JqUkptZfo7Ljc=",
+ "dev": true
+ },
+ "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-to-buffer": {
+ "version": "3.1.5",
+ "resolved": "https://registry.nlark.com/typedarray-to-buffer/download/typedarray-to-buffer-3.1.5.tgz",
+ "integrity": "sha1-qX7nqf9CaRufeD/xvFES/j/KkIA=",
+ "dev": true,
+ "requires": {
+ "is-typedarray": "^1.0.0"
+ }
+ },
+ "typescript": {
+ "version": "4.3.5",
+ "resolved": "https://registry.npmmirror.com/typescript/download/typescript-4.3.5.tgz",
+ "integrity": "sha1-TRw3zBbok5c8RaBohrcRMjTxGfQ=",
+ "dev": true
+ },
+ "ua-parser-js": {
+ "version": "0.7.31",
+ "resolved": "https://registry.npmmirror.com/ua-parser-js/download/ua-parser-js-0.7.31.tgz",
+ "integrity": "sha1-ZJplaxkd/6tPIdXgU+J8oXy/9cY=",
+ "dev": true
+ },
+ "unbox-primitive": {
+ "version": "1.0.1",
+ "resolved": "https://registry.nlark.com/unbox-primitive/download/unbox-primitive-1.0.1.tgz",
+ "integrity": "sha1-CF4hViXsMWJXTciFmr7nilmxRHE=",
+ "dev": true,
+ "requires": {
+ "function-bind": "^1.1.1",
+ "has-bigints": "^1.0.1",
+ "has-symbols": "^1.0.2",
+ "which-boxed-primitive": "^1.0.2"
+ }
+ },
+ "unherit": {
+ "version": "1.1.3",
+ "resolved": "https://registry.nlark.com/unherit/download/unherit-1.1.3.tgz?cache=0&sync_timestamp=1626423513229&other_urls=https%3A%2F%2Fregistry.nlark.com%2Funherit%2Fdownload%2Funherit-1.1.3.tgz",
+ "integrity": "sha1-bJtQPytBsmIzDIDpHIYUq9qmnCI=",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.0",
+ "xtend": "^4.0.0"
+ }
+ },
+ "unicode-canonical-property-names-ecmascript": {
+ "version": "2.0.0",
+ "resolved": "https://registry.nlark.com/unicode-canonical-property-names-ecmascript/download/unicode-canonical-property-names-ecmascript-2.0.0.tgz",
+ "integrity": "sha1-MBrNxSVjFnDTn2FG4Od/9rvevdw=",
+ "dev": true
+ },
+ "unicode-match-property-ecmascript": {
+ "version": "2.0.0",
+ "resolved": "https://registry.nlark.com/unicode-match-property-ecmascript/download/unicode-match-property-ecmascript-2.0.0.tgz?cache=0&sync_timestamp=1631618696521&other_urls=https%3A%2F%2Fregistry.nlark.com%2Funicode-match-property-ecmascript%2Fdownload%2Funicode-match-property-ecmascript-2.0.0.tgz",
+ "integrity": "sha1-VP0W4OyxZ88Ezx91a9zJLrp5dsM=",
+ "dev": true,
+ "requires": {
+ "unicode-canonical-property-names-ecmascript": "^2.0.0",
+ "unicode-property-aliases-ecmascript": "^2.0.0"
+ }
+ },
+ "unicode-match-property-value-ecmascript": {
+ "version": "2.0.0",
+ "resolved": "https://registry.nlark.com/unicode-match-property-value-ecmascript/download/unicode-match-property-value-ecmascript-2.0.0.tgz",
+ "integrity": "sha1-GgGqVyR8FMVouJd1pUk4eIGJpxQ=",
+ "dev": true
+ },
+ "unicode-property-aliases-ecmascript": {
+ "version": "2.0.0",
+ "resolved": "https://registry.nlark.com/unicode-property-aliases-ecmascript/download/unicode-property-aliases-ecmascript-2.0.0.tgz?cache=0&sync_timestamp=1631609457921&other_urls=https%3A%2F%2Fregistry.nlark.com%2Funicode-property-aliases-ecmascript%2Fdownload%2Funicode-property-aliases-ecmascript-2.0.0.tgz",
+ "integrity": "sha1-CjbLmlhcT2q9Ua0d7dsoXBZSl8g=",
+ "dev": true
+ },
+ "unified": {
+ "version": "9.2.2",
+ "resolved": "https://registry.npmmirror.com/unified/download/unified-9.2.2.tgz",
+ "integrity": "sha1-Z2SaGr/Dq4XSlpUCkCd16wMUaXU=",
+ "dev": true,
+ "requires": {
+ "bail": "^1.0.0",
+ "extend": "^3.0.0",
+ "is-buffer": "^2.0.0",
+ "is-plain-obj": "^2.0.0",
+ "trough": "^1.0.0",
+ "vfile": "^4.0.0"
+ },
+ "dependencies": {
+ "is-buffer": {
+ "version": "2.0.5",
+ "resolved": "https://registry.nlark.com/is-buffer/download/is-buffer-2.0.5.tgz",
+ "integrity": "sha1-68JS5ADSL/jXf6CYiIIaJKZYwZE=",
+ "dev": true
+ },
+ "is-plain-obj": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npm.taobao.org/is-plain-obj/download/is-plain-obj-2.1.0.tgz?cache=0&sync_timestamp=1618601044820&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-plain-obj%2Fdownload%2Fis-plain-obj-2.1.0.tgz",
+ "integrity": "sha1-ReQuN/zPH0Dajl927iFRWEDAkoc=",
+ "dev": true
+ }
+ }
+ },
+ "union-value": {
+ "version": "1.0.1",
+ "resolved": "https://registry.nlark.com/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.nlark.com/uniq/download/uniq-1.0.1.tgz",
+ "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=",
+ "dev": true
+ },
+ "unique-filename": {
+ "version": "1.1.1",
+ "resolved": "https://registry.nlark.com/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.nlark.com/unique-slug/download/unique-slug-2.0.2.tgz",
+ "integrity": "sha1-uqvOkQg/xk6UWw861hPiZPfNTmw=",
+ "dev": true,
+ "requires": {
+ "imurmurhash": "^0.1.4"
+ }
+ },
+ "unist-util-find-all-after": {
+ "version": "3.0.2",
+ "resolved": "https://registry.nlark.com/unist-util-find-all-after/download/unist-util-find-all-after-3.0.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Funist-util-find-all-after%2Fdownload%2Funist-util-find-all-after-3.0.2.tgz",
+ "integrity": "sha1-/f7NFMW3rqXp7zjV4NX3dO61YfY=",
+ "dev": true,
+ "requires": {
+ "unist-util-is": "^4.0.0"
+ }
+ },
+ "unist-util-is": {
+ "version": "4.1.0",
+ "resolved": "https://registry.nlark.com/unist-util-is/download/unist-util-is-4.1.0.tgz?cache=0&sync_timestamp=1626874922677&other_urls=https%3A%2F%2Fregistry.nlark.com%2Funist-util-is%2Fdownload%2Funist-util-is-4.1.0.tgz",
+ "integrity": "sha1-l25fRip6Xec9lLcGusG5BnG1d5c=",
+ "dev": true
+ },
+ "unist-util-remove-position": {
+ "version": "1.1.4",
+ "resolved": "https://registry.nlark.com/unist-util-remove-position/download/unist-util-remove-position-1.1.4.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Funist-util-remove-position%2Fdownload%2Funist-util-remove-position-1.1.4.tgz",
+ "integrity": "sha1-7ANzSLYQLIl3A+7m0ClMpHVaICA=",
+ "dev": true,
+ "requires": {
+ "unist-util-visit": "^1.1.0"
+ }
+ },
+ "unist-util-stringify-position": {
+ "version": "2.0.3",
+ "resolved": "https://registry.nlark.com/unist-util-stringify-position/download/unist-util-stringify-position-2.0.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Funist-util-stringify-position%2Fdownload%2Funist-util-stringify-position-2.0.3.tgz",
+ "integrity": "sha1-zOO/oc34W6c3XR1bF73Eytqb2do=",
+ "dev": true,
+ "requires": {
+ "@types/unist": "^2.0.2"
+ }
+ },
+ "unist-util-visit": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmmirror.com/unist-util-visit/download/unist-util-visit-1.4.1.tgz?cache=0&sync_timestamp=1632405298952&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Funist-util-visit%2Fdownload%2Funist-util-visit-1.4.1.tgz",
+ "integrity": "sha1-RySqqEhububibX/zyGhZYNVgseM=",
+ "dev": true,
+ "requires": {
+ "unist-util-visit-parents": "^2.0.0"
+ }
+ },
+ "unist-util-visit-parents": {
+ "version": "2.1.2",
+ "resolved": "https://registry.nlark.com/unist-util-visit-parents/download/unist-util-visit-parents-2.1.2.tgz?cache=0&sync_timestamp=1632208991791&other_urls=https%3A%2F%2Fregistry.nlark.com%2Funist-util-visit-parents%2Fdownload%2Funist-util-visit-parents-2.1.2.tgz",
+ "integrity": "sha1-JeQ+VTEhZvM0jK5nQ1iHgdESwek=",
+ "dev": true,
+ "requires": {
+ "unist-util-is": "^3.0.0"
+ },
+ "dependencies": {
+ "unist-util-is": {
+ "version": "3.0.0",
+ "resolved": "https://registry.nlark.com/unist-util-is/download/unist-util-is-3.0.0.tgz?cache=0&sync_timestamp=1626874922677&other_urls=https%3A%2F%2Fregistry.nlark.com%2Funist-util-is%2Fdownload%2Funist-util-is-3.0.0.tgz",
+ "integrity": "sha1-2ehDgcJGjoJinkpb6dfQWi3TJM0=",
+ "dev": true
+ }
+ }
+ },
+ "universalify": {
+ "version": "2.0.0",
+ "resolved": "https://registry.nlark.com/universalify/download/universalify-2.0.0.tgz",
+ "integrity": "sha1-daSYTv7cSwiXXFrrc/Uw0C3yVxc=",
+ "dev": true
+ },
+ "unpipe": {
+ "version": "1.0.0",
+ "resolved": "https://registry.nlark.com/unpipe/download/unpipe-1.0.0.tgz",
+ "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=",
+ "dev": true
+ },
+ "unset-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.nlark.com/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.nlark.com/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.nlark.com/upath/download/upath-1.2.0.tgz",
+ "integrity": "sha1-j2bbzVWog6za5ECK+LA1pQRMGJQ=",
+ "dev": true
+ },
+ "uri-js": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npm.taobao.org/uri-js/download/uri-js-4.4.1.tgz",
+ "integrity": "sha1-mxpSWVIlhZ5V9mnZKPiMbFfyp34=",
+ "requires": {
+ "punycode": "^2.1.0"
+ }
+ },
+ "urix": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmmirror.com/urix/download/urix-0.1.0.tgz",
+ "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=",
+ "dev": true
+ },
+ "url": {
+ "version": "0.11.0",
+ "resolved": "https://registry.nlark.com/url/download/url-0.11.0.tgz?cache=0&sync_timestamp=1618847135337&other_urls=https%3A%2F%2Fregistry.nlark.com%2Furl%2Fdownload%2Furl-0.11.0.tgz",
+ "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=",
+ "dev": true,
+ "requires": {
+ "punycode": "1.3.2",
+ "querystring": "0.2.0"
+ },
+ "dependencies": {
+ "punycode": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npm.taobao.org/punycode/download/punycode-1.3.2.tgz",
+ "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=",
+ "dev": true
+ }
+ }
+ },
+ "url-parse": {
+ "version": "1.5.3",
+ "resolved": "https://registry.nlark.com/url-parse/download/url-parse-1.5.3.tgz",
+ "integrity": "sha1-ccEwPTj7Zjmt4YPCmSyMwGht+GI=",
+ "dev": true,
+ "requires": {
+ "querystringify": "^2.1.1",
+ "requires-port": "^1.0.0"
+ }
+ },
+ "use": {
+ "version": "3.1.1",
+ "resolved": "https://registry.nlark.com/use/download/use-3.1.1.tgz",
+ "integrity": "sha1-1QyMrHmhn7wg8pEfVuuXP04QBw8=",
+ "dev": true
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.nlark.com/util-deprecate/download/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
+ },
+ "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
+ },
+ "utrie": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/utrie/-/utrie-1.0.2.tgz",
+ "integrity": "sha512-1MLa5ouZiOmQzUbjbu9VmjLzn1QLXBhwpUa7kdLUQK+KQ5KA9I1vk5U4YHe/X2Ch7PYnJfWuWT+VbuxbGwljhw==",
+ "requires": {
+ "base64-arraybuffer": "^1.0.2"
+ },
+ "dependencies": {
+ "base64-arraybuffer": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz",
+ "integrity": "sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ=="
+ }
+ }
+ },
+ "uuid": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmmirror.com/uuid/download/uuid-3.4.0.tgz",
+ "integrity": "sha1-sj5DWK+oogL+ehAK8fX4g/AgB+4=",
+ "dev": true
+ },
+ "v8-compile-cache": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npm.taobao.org/v8-compile-cache/download/v8-compile-cache-2.3.0.tgz?cache=0&sync_timestamp=1614993639567&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fv8-compile-cache%2Fdownload%2Fv8-compile-cache-2.3.0.tgz",
+ "integrity": "sha1-LeGWGMZtwkfc+2+ZM4A12CRaLO4=",
+ "dev": true
+ },
+ "validate-npm-package-license": {
+ "version": "3.0.4",
+ "resolved": "https://registry.nlark.com/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.nlark.com/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
+ },
+ "verror": {
+ "version": "1.10.0",
+ "resolved": "https://registry.npmmirror.com/verror/download/verror-1.10.0.tgz?cache=0&sync_timestamp=1635885078723&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fverror%2Fdownload%2Fverror-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"
+ },
+ "dependencies": {
+ "core-util-is": {
+ "version": "1.0.2",
+ "resolved": "https://registry.nlark.com/core-util-is/download/core-util-is-1.0.2.tgz",
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+ "dev": true
+ }
+ }
+ },
+ "vfile": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmmirror.com/vfile/download/vfile-4.2.1.tgz",
+ "integrity": "sha1-A/Hc4o/GJcYlvGUUNQ+9sA+p5iQ=",
+ "dev": true,
+ "requires": {
+ "@types/unist": "^2.0.0",
+ "is-buffer": "^2.0.0",
+ "unist-util-stringify-position": "^2.0.0",
+ "vfile-message": "^2.0.0"
+ },
+ "dependencies": {
+ "is-buffer": {
+ "version": "2.0.5",
+ "resolved": "https://registry.nlark.com/is-buffer/download/is-buffer-2.0.5.tgz",
+ "integrity": "sha1-68JS5ADSL/jXf6CYiIIaJKZYwZE=",
+ "dev": true
+ }
+ }
+ },
+ "vfile-location": {
+ "version": "2.0.6",
+ "resolved": "https://registry.nlark.com/vfile-location/download/vfile-location-2.0.6.tgz",
+ "integrity": "sha1-iidPOUEbhxnqVyiALhDZ4N/xUZ4=",
+ "dev": true
+ },
+ "vfile-message": {
+ "version": "2.0.4",
+ "resolved": "https://registry.nlark.com/vfile-message/download/vfile-message-2.0.4.tgz?cache=0&sync_timestamp=1628780833868&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fvfile-message%2Fdownload%2Fvfile-message-2.0.4.tgz",
+ "integrity": "sha1-W0O4gXHUCerlhHfRPyPdQdUsNxo=",
+ "dev": true,
+ "requires": {
+ "@types/unist": "^2.0.0",
+ "unist-util-stringify-position": "^2.0.0"
+ }
+ },
+ "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": "2.3.0",
+ "resolved": "https://registry.npmmirror.com/watchpack/download/watchpack-2.3.0.tgz",
+ "integrity": "sha512-MnN0Q1OsvB/GGHETrFeZPQaOelWh/7O+EiFlj8sM9GPjtQkis7k01aAxrg/18kTfoIVcLL+haEVFlXDaSRwKRw==",
+ "dev": true,
+ "requires": {
+ "glob-to-regexp": "^0.4.1",
+ "graceful-fs": "^4.1.2"
+ }
+ },
+ "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.nlark.com/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.nlark.com/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"
+ }
+ },
+ "webidl-conversions": {
+ "version": "3.0.1",
+ "resolved": "https://registry.nlark.com/webidl-conversions/download/webidl-conversions-3.0.1.tgz",
+ "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=",
+ "dev": true
+ },
+ "webpack": {
+ "version": "5.50.0",
+ "resolved": "https://registry.npmmirror.com/webpack/download/webpack-5.50.0.tgz",
+ "integrity": "sha1-VWLXWQKnSetNdRMfVifqw6MZJSc=",
+ "dev": true,
+ "requires": {
+ "@types/eslint-scope": "^3.7.0",
+ "@types/estree": "^0.0.50",
+ "@webassemblyjs/ast": "1.11.1",
+ "@webassemblyjs/wasm-edit": "1.11.1",
+ "@webassemblyjs/wasm-parser": "1.11.1",
+ "acorn": "^8.4.1",
+ "acorn-import-assertions": "^1.7.6",
+ "browserslist": "^4.14.5",
+ "chrome-trace-event": "^1.0.2",
+ "enhanced-resolve": "^5.8.0",
+ "es-module-lexer": "^0.7.1",
+ "eslint-scope": "5.1.1",
+ "events": "^3.2.0",
+ "glob-to-regexp": "^0.4.1",
+ "graceful-fs": "^4.2.4",
+ "json-parse-better-errors": "^1.0.2",
+ "loader-runner": "^4.2.0",
+ "mime-types": "^2.1.27",
+ "neo-async": "^2.6.2",
+ "schema-utils": "^3.1.0",
+ "tapable": "^2.1.1",
+ "terser-webpack-plugin": "^5.1.3",
+ "watchpack": "^2.2.0",
+ "webpack-sources": "^3.2.0"
+ },
+ "dependencies": {
+ "ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmmirror.com/ajv/download/ajv-6.12.6.tgz?cache=0&sync_timestamp=1637522259668&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fajv%2Fdownload%2Fajv-6.12.6.tgz",
+ "integrity": "sha1-uvWmLoArB9l3A0WG+MO69a3ybfQ=",
+ "dev": true,
+ "requires": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ }
+ },
+ "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
+ },
+ "schema-utils": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmmirror.com/schema-utils/download/schema-utils-3.1.1.tgz?cache=0&sync_timestamp=1637075888461&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fschema-utils%2Fdownload%2Fschema-utils-3.1.1.tgz",
+ "integrity": "sha1-vHTEtraZXB2I92qLd76nIZ4MgoE=",
+ "dev": true,
+ "requires": {
+ "@types/json-schema": "^7.0.8",
+ "ajv": "^6.12.5",
+ "ajv-keywords": "^3.5.2"
+ }
+ },
+ "webpack-sources": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmmirror.com/webpack-sources/download/webpack-sources-3.2.2.tgz?cache=0&sync_timestamp=1636982731420&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fwebpack-sources%2Fdownload%2Fwebpack-sources-3.2.2.tgz",
+ "integrity": "sha512-cp5qdmHnu5T8wRg2G3vZZHoJPN14aqQ89SyQ11NpGH5zEMDCclt49rzo+MaRazk7/UeILhAI+/sEtcM+7Fr0nw==",
+ "dev": true
+ }
+ }
+ },
+ "webpack-dev-middleware": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmmirror.com/webpack-dev-middleware/download/webpack-dev-middleware-5.0.0.tgz?cache=0&sync_timestamp=1637165508298&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fwebpack-dev-middleware%2Fdownload%2Fwebpack-dev-middleware-5.0.0.tgz",
+ "integrity": "sha1-Cr6CUnVyDgozmXiupfCwOxQMFYQ=",
+ "dev": true,
+ "requires": {
+ "colorette": "^1.2.2",
+ "mem": "^8.1.1",
+ "memfs": "^3.2.2",
+ "mime-types": "^2.1.31",
+ "range-parser": "^1.2.1",
+ "schema-utils": "^3.0.0"
+ },
+ "dependencies": {
+ "ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmmirror.com/ajv/download/ajv-6.12.6.tgz?cache=0&sync_timestamp=1637522259668&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fajv%2Fdownload%2Fajv-6.12.6.tgz",
+ "integrity": "sha1-uvWmLoArB9l3A0WG+MO69a3ybfQ=",
+ "dev": true,
+ "requires": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ }
+ },
+ "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
+ },
+ "schema-utils": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmmirror.com/schema-utils/download/schema-utils-3.1.1.tgz?cache=0&sync_timestamp=1637075888461&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fschema-utils%2Fdownload%2Fschema-utils-3.1.1.tgz",
+ "integrity": "sha1-vHTEtraZXB2I92qLd76nIZ4MgoE=",
+ "dev": true,
+ "requires": {
+ "@types/json-schema": "^7.0.8",
+ "ajv": "^6.12.5",
+ "ajv-keywords": "^3.5.2"
+ }
+ }
+ }
+ },
+ "webpack-dev-server": {
+ "version": "3.11.2",
+ "resolved": "https://registry.npmmirror.com/webpack-dev-server/download/webpack-dev-server-3.11.2.tgz",
+ "integrity": "sha1-aV687Xakkp8NXef9c/r+GF/jNwg=",
+ "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.3.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.8",
+ "opn": "^5.5.0",
+ "p-retry": "^3.0.1",
+ "portfinder": "^1.0.26",
+ "schema-utils": "^1.0.0",
+ "selfsigned": "^1.10.8",
+ "semver": "^6.3.0",
+ "serve-index": "^1.9.1",
+ "sockjs": "^0.3.21",
+ "sockjs-client": "^1.5.0",
+ "spdy": "^4.0.2",
+ "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": "^13.3.2"
+ },
+ "dependencies": {
+ "ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmmirror.com/ajv/download/ajv-6.12.6.tgz?cache=0&sync_timestamp=1637522259668&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fajv%2Fdownload%2Fajv-6.12.6.tgz",
+ "integrity": "sha1-uvWmLoArB9l3A0WG+MO69a3ybfQ=",
+ "dev": true,
+ "requires": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ }
+ },
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.nlark.com/ansi-regex/download/ansi-regex-2.1.1.tgz?cache=0&sync_timestamp=1631634988487&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fansi-regex%2Fdownload%2Fansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "anymatch": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npm.taobao.org/anymatch/download/anymatch-2.0.0.tgz?cache=0&sync_timestamp=1617747502795&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fanymatch%2Fdownload%2Fanymatch-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.nlark.com/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.nlark.com/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"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.nlark.com/extend-shallow/download/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "chokidar": {
+ "version": "2.1.8",
+ "resolved": "https://registry.npmmirror.com/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"
+ }
+ },
+ "fill-range": {
+ "version": "4.0.0",
+ "resolved": "https://registry.nlark.com/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.nlark.com/extend-shallow/download/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "fsevents": {
+ "version": "1.2.13",
+ "resolved": "https://registry.npmmirror.com/fsevents/download/fsevents-1.2.13.tgz",
+ "integrity": "sha1-8yXLBFVZJCi88Rs4M3DvcOO/zDg=",
+ "dev": true,
+ "optional": true
+ },
+ "glob-parent": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmmirror.com/glob-parent/download/glob-parent-3.1.0.tgz?cache=0&sync_timestamp=1632953810778&other_urls=https%3A%2F%2Fregistry.npmmirror.com%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.npmmirror.com/is-glob/download/is-glob-3.1.0.tgz",
+ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "^2.1.0"
+ }
+ }
+ }
+ },
+ "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"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.nlark.com/kind-of/download/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "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
+ },
+ "micromatch": {
+ "version": "3.1.10",
+ "resolved": "https://registry.nlark.com/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"
+ }
+ },
+ "mime": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmmirror.com/mime/download/mime-2.6.0.tgz",
+ "integrity": "sha1-oqaCqVzU0MsdYlfij4PafjWAA2c=",
+ "dev": true
+ },
+ "mkdirp": {
+ "version": "0.5.5",
+ "resolved": "https://registry.npmmirror.com/mkdirp/download/mkdirp-0.5.5.tgz",
+ "integrity": "sha1-2Rzv1i0UNsoPQWIOJRKI1CAJne8=",
+ "dev": true,
+ "requires": {
+ "minimist": "^1.2.5"
+ }
+ },
+ "readdirp": {
+ "version": "2.2.1",
+ "resolved": "https://registry.nlark.com/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"
+ }
+ },
+ "schema-utils": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmmirror.com/schema-utils/download/schema-utils-1.0.0.tgz?cache=0&sync_timestamp=1637075888461&other_urls=https%3A%2F%2Fregistry.npmmirror.com%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"
+ }
+ },
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz?cache=0&sync_timestamp=1616463540350&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-6.3.0.tgz",
+ "integrity": "sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0=",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmmirror.com/strip-ansi/download/strip-ansi-3.0.1.tgz?cache=0&sync_timestamp=1632420562057&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmmirror.com/supports-color/download/supports-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.nlark.com/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-dev-middleware": {
+ "version": "3.7.3",
+ "resolved": "https://registry.npmmirror.com/webpack-dev-middleware/download/webpack-dev-middleware-3.7.3.tgz?cache=0&sync_timestamp=1637165508298&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fwebpack-dev-middleware%2Fdownload%2Fwebpack-dev-middleware-3.7.3.tgz",
+ "integrity": "sha1-Bjk3KxQyYuK4SrldO5GnWXBhwsU=",
+ "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"
+ }
+ }
+ }
+ },
+ "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=1615477439589&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"
+ },
+ "dependencies": {
+ "ansi-colors": {
+ "version": "3.2.4",
+ "resolved": "https://registry.nlark.com/ansi-colors/download/ansi-colors-3.2.4.tgz",
+ "integrity": "sha1-46PaS/uubIapwoViXeEkojQCb78=",
+ "dev": true
+ }
+ }
+ },
+ "webpack-merge": {
+ "version": "5.8.0",
+ "resolved": "https://registry.nlark.com/webpack-merge/download/webpack-merge-5.8.0.tgz",
+ "integrity": "sha1-Kznb8ir4d3atdEw5AiNzHTCmj2E=",
+ "dev": true,
+ "requires": {
+ "clone-deep": "^4.0.1",
+ "wildcard": "^2.0.0"
+ }
+ },
+ "webpack-sources": {
+ "version": "1.4.3",
+ "resolved": "https://registry.npmmirror.com/webpack-sources/download/webpack-sources-1.4.3.tgz?cache=0&sync_timestamp=1636982731420&other_urls=https%3A%2F%2Fregistry.npmmirror.com%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.5.2",
+ "resolved": "https://registry.npmmirror.com/webpack-subresource-integrity/download/webpack-subresource-integrity-1.5.2.tgz",
+ "integrity": "sha1-5AtleNMHLi0kEEl1JJxSxm6adD4=",
+ "dev": true,
+ "requires": {
+ "webpack-sources": "^1.3.0"
+ }
+ },
+ "websocket-driver": {
+ "version": "0.7.4",
+ "resolved": "https://registry.npm.taobao.org/websocket-driver/download/websocket-driver-0.7.4.tgz",
+ "integrity": "sha1-ia1Slbv2S0gKvLox5JU6ynBvV2A=",
+ "dev": true,
+ "requires": {
+ "http-parser-js": ">=0.5.1",
+ "safe-buffer": ">=5.1.0",
+ "websocket-extensions": ">=0.1.1"
+ }
+ },
+ "websocket-extensions": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npm.taobao.org/websocket-extensions/download/websocket-extensions-0.1.4.tgz",
+ "integrity": "sha1-f4RzvIOd/YdgituV1+sHUhFXikI=",
+ "dev": true
+ },
+ "whatwg-url": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmmirror.com/whatwg-url/download/whatwg-url-5.0.0.tgz?cache=0&sync_timestamp=1634673646149&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fwhatwg-url%2Fdownload%2Fwhatwg-url-5.0.0.tgz",
+ "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=",
+ "dev": true,
+ "requires": {
+ "tr46": "~0.0.3",
+ "webidl-conversions": "^3.0.0"
+ }
+ },
+ "which": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npm.taobao.org/which/download/which-1.3.1.tgz",
+ "integrity": "sha1-pFBD1U9YBTFtqNYvn1CRjT2nCwo=",
+ "dev": true,
+ "requires": {
+ "isexe": "^2.0.0"
+ }
+ },
+ "which-boxed-primitive": {
+ "version": "1.0.2",
+ "resolved": "https://registry.nlark.com/which-boxed-primitive/download/which-boxed-primitive-1.0.2.tgz",
+ "integrity": "sha1-E3V7yJsgmwSf5dhkMOIc9AqJqOY=",
+ "dev": true,
+ "requires": {
+ "is-bigint": "^1.0.1",
+ "is-boolean-object": "^1.1.0",
+ "is-number-object": "^1.0.4",
+ "is-string": "^1.0.5",
+ "is-symbol": "^1.0.3"
+ }
+ },
+ "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
+ },
+ "wide-align": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmmirror.com/wide-align/download/wide-align-1.1.5.tgz",
+ "integrity": "sha1-3x1MIGhUNp7PPJpImPGyP72dFdM=",
+ "dev": true,
+ "requires": {
+ "string-width": "^1.0.2 || 2 || 3 || 4"
+ }
+ },
+ "wildcard": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npm.taobao.org/wildcard/download/wildcard-2.0.0.tgz",
+ "integrity": "sha1-p30g5SAMb6qsl55LOq3Hs91/j+w=",
+ "dev": true
+ },
+ "wmf": {
+ "version": "1.0.2",
+ "resolved": "https://registry.nlark.com/wmf/download/wmf-1.0.2.tgz",
+ "integrity": "sha1-fRnWIQcaCMK9xrfmiKnENSmMwto="
+ },
+ "wolfy87-eventemitter": {
+ "version": "5.2.9",
+ "resolved": "https://registry.nlark.com/wolfy87-eventemitter/download/wolfy87-eventemitter-5.2.9.tgz",
+ "integrity": "sha1-6Hn3cLMPu2USqK+7Mww4hZEJnCo="
+ },
+ "word": {
+ "version": "0.3.0",
+ "resolved": "https://registry.nlark.com/word/download/word-0.3.0.tgz",
+ "integrity": "sha1-hUIVfk+OhJ9KNjooiZLUdhLbmWE="
+ },
+ "word-wrap": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npm.taobao.org/word-wrap/download/word-wrap-1.2.3.tgz",
+ "integrity": "sha1-YQY29rH3A4kb00dxzLF/uTtHB5w=",
+ "dev": true
+ },
+ "wrap-ansi": {
+ "version": "5.1.0",
+ "resolved": "https://registry.nlark.com/wrap-ansi/download/wrap-ansi-5.1.0.tgz?cache=0&sync_timestamp=1631557327268&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fwrap-ansi%2Fdownload%2Fwrap-ansi-5.1.0.tgz",
+ "integrity": "sha1-H9H2cjXVttD+54EFYAG/tpTAOwk=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.0",
+ "string-width": "^3.0.0",
+ "strip-ansi": "^5.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "4.1.0",
+ "resolved": "https://registry.nlark.com/ansi-regex/download/ansi-regex-4.1.0.tgz?cache=0&sync_timestamp=1631634988487&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fansi-regex%2Fdownload%2Fansi-regex-4.1.0.tgz",
+ "integrity": "sha1-i5+PCM8ay4Q3Vqg5yox+MWjFGZc=",
+ "dev": true
+ },
+ "emoji-regex": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmmirror.com/emoji-regex/download/emoji-regex-7.0.3.tgz?cache=0&sync_timestamp=1632751333727&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Femoji-regex%2Fdownload%2Femoji-regex-7.0.3.tgz",
+ "integrity": "sha1-kzoEBShgyF6DwSJHnEdIqOTHIVY=",
+ "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
+ },
+ "string-width": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmmirror.com/string-width/download/string-width-3.1.0.tgz?cache=0&sync_timestamp=1632421013520&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fstring-width%2Fdownload%2Fstring-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.npmmirror.com/strip-ansi/download/strip-ansi-5.2.0.tgz?cache=0&sync_timestamp=1632420562057&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-5.2.0.tgz",
+ "integrity": "sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^4.1.0"
+ }
+ }
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.nlark.com/wrappy/download/wrappy-1.0.2.tgz?cache=0&sync_timestamp=1619133505879&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fwrappy%2Fdownload%2Fwrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "dev": true
+ },
+ "write": {
+ "version": "1.0.3",
+ "resolved": "https://registry.nlark.com/write/download/write-1.0.3.tgz",
+ "integrity": "sha1-CADhRSO5I6OH5BUSPIZWFqrg9cM=",
+ "dev": true,
+ "requires": {
+ "mkdirp": "^0.5.1"
+ },
+ "dependencies": {
+ "mkdirp": {
+ "version": "0.5.5",
+ "resolved": "https://registry.npmmirror.com/mkdirp/download/mkdirp-0.5.5.tgz",
+ "integrity": "sha1-2Rzv1i0UNsoPQWIOJRKI1CAJne8=",
+ "dev": true,
+ "requires": {
+ "minimist": "^1.2.5"
+ }
+ }
+ }
+ },
+ "write-file-atomic": {
+ "version": "3.0.3",
+ "resolved": "https://registry.nlark.com/write-file-atomic/download/write-file-atomic-3.0.3.tgz?cache=0&sync_timestamp=1618847057132&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fwrite-file-atomic%2Fdownload%2Fwrite-file-atomic-3.0.3.tgz",
+ "integrity": "sha1-Vr1cWlxwSBzRnFcb05q5ZaXeVug=",
+ "dev": true,
+ "requires": {
+ "imurmurhash": "^0.1.4",
+ "is-typedarray": "^1.0.0",
+ "signal-exit": "^3.0.2",
+ "typedarray-to-buffer": "^3.1.5"
+ }
+ },
+ "ws": {
+ "version": "6.2.2",
+ "resolved": "https://registry.npmmirror.com/ws/download/ws-6.2.2.tgz",
+ "integrity": "sha1-3Vzb1XqZeZFgl2UtePHMX66gwy4=",
+ "dev": true,
+ "requires": {
+ "async-limiter": "~1.0.0"
+ }
+ },
+ "x-is-string": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npm.taobao.org/x-is-string/download/x-is-string-0.1.0.tgz",
+ "integrity": "sha1-R0tQhlrzpJqcRlfwWs0UVFj3fYI=",
+ "dev": true
+ },
+ "xlsx": {
+ "version": "0.17.4",
+ "resolved": "https://registry.npmmirror.com/xlsx/download/xlsx-0.17.4.tgz",
+ "integrity": "sha512-9aKt8g9ZLP0CUdBX8L5xnoMDFwSiLI997eQnDThCaqQMYB9AEBIRzblSSNN/ICMGLYIHUO3VKaItcedZJ3ijIg==",
+ "requires": {
+ "adler-32": "~1.2.0",
+ "cfb": "^1.1.4",
+ "codepage": "~1.15.0",
+ "crc-32": "~1.2.0",
+ "ssf": "~0.11.2",
+ "wmf": "~1.0.1",
+ "word": "~0.3.0"
+ }
+ },
+ "xml2js": {
+ "version": "0.4.23",
+ "resolved": "https://registry.npm.taobao.org/xml2js/download/xml2js-0.4.23.tgz",
+ "integrity": "sha1-oMaVFnUkIesqx1juTUzPWIQ+rGY=",
+ "dev": true,
+ "requires": {
+ "sax": ">=0.6.0",
+ "xmlbuilder": "~11.0.0"
+ }
+ },
+ "xmlbuilder": {
+ "version": "11.0.1",
+ "resolved": "https://registry.nlark.com/xmlbuilder/download/xmlbuilder-11.0.1.tgz",
+ "integrity": "sha1-vpuuHIoEbnazESdyY0fQrXACvrM=",
+ "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.3",
+ "resolved": "https://registry.npm.taobao.org/y18n/download/y18n-4.0.3.tgz?cache=0&sync_timestamp=1617822684820&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fy18n%2Fdownload%2Fy18n-4.0.3.tgz",
+ "integrity": "sha1-tfJZyCzW4zaSHv17/Yv1YN6e7t8=",
+ "dev": true
+ },
+ "yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npm.taobao.org/yallist/download/yallist-4.0.0.tgz",
+ "integrity": "sha1-m7knkNnA7/7GO+c1GeEaNQGaOnI=",
+ "dev": true
+ },
+ "yaml": {
+ "version": "1.10.2",
+ "resolved": "https://registry.npmmirror.com/yaml/download/yaml-1.10.2.tgz?cache=0&sync_timestamp=1636797216143&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fyaml%2Fdownload%2Fyaml-1.10.2.tgz",
+ "integrity": "sha1-IwHF/78StGfejaIzOkWeKeeSDks=",
+ "dev": true
+ },
+ "yargs": {
+ "version": "13.3.2",
+ "resolved": "https://registry.npmmirror.com/yargs/download/yargs-13.3.2.tgz",
+ "integrity": "sha1-rX/+/sGqWVZayRX4Lcyzipwxot0=",
+ "dev": true,
+ "requires": {
+ "cliui": "^5.0.0",
+ "find-up": "^3.0.0",
+ "get-caller-file": "^2.0.1",
+ "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.1.2"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "4.1.0",
+ "resolved": "https://registry.nlark.com/ansi-regex/download/ansi-regex-4.1.0.tgz?cache=0&sync_timestamp=1631634988487&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fansi-regex%2Fdownload%2Fansi-regex-4.1.0.tgz",
+ "integrity": "sha1-i5+PCM8ay4Q3Vqg5yox+MWjFGZc=",
+ "dev": true
+ },
+ "emoji-regex": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmmirror.com/emoji-regex/download/emoji-regex-7.0.3.tgz?cache=0&sync_timestamp=1632751333727&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Femoji-regex%2Fdownload%2Femoji-regex-7.0.3.tgz",
+ "integrity": "sha1-kzoEBShgyF6DwSJHnEdIqOTHIVY=",
+ "dev": true
+ },
+ "find-up": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmmirror.com/find-up/download/find-up-3.0.0.tgz?cache=0&sync_timestamp=1633618766404&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Ffind-up%2Fdownload%2Ffind-up-3.0.0.tgz",
+ "integrity": "sha1-SRafHXmTQwZG2mHsxa41XCHJe3M=",
+ "dev": true,
+ "requires": {
+ "locate-path": "^3.0.0"
+ }
+ },
+ "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
+ },
+ "locate-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.nlark.com/locate-path/download/locate-path-3.0.0.tgz?cache=0&sync_timestamp=1629895724478&other_urls=https%3A%2F%2Fregistry.nlark.com%2Flocate-path%2Fdownload%2Flocate-path-3.0.0.tgz",
+ "integrity": "sha1-2+w7OrdZdYBxtY/ln8QYca8hQA4=",
+ "dev": true,
+ "requires": {
+ "p-locate": "^3.0.0",
+ "path-exists": "^3.0.0"
+ }
+ },
+ "p-locate": {
+ "version": "3.0.0",
+ "resolved": "https://registry.nlark.com/p-locate/download/p-locate-3.0.0.tgz",
+ "integrity": "sha1-Mi1poFwCZLJZl9n0DNiokasAZKQ=",
+ "dev": true,
+ "requires": {
+ "p-limit": "^2.0.0"
+ }
+ },
+ "path-exists": {
+ "version": "3.0.0",
+ "resolved": "https://registry.nlark.com/path-exists/download/path-exists-3.0.0.tgz",
+ "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
+ "dev": true
+ },
+ "string-width": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmmirror.com/string-width/download/string-width-3.1.0.tgz?cache=0&sync_timestamp=1632421013520&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fstring-width%2Fdownload%2Fstring-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.npmmirror.com/strip-ansi/download/strip-ansi-5.2.0.tgz?cache=0&sync_timestamp=1632420562057&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-5.2.0.tgz",
+ "integrity": "sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^4.1.0"
+ }
+ }
+ }
+ },
+ "yargs-parser": {
+ "version": "13.1.2",
+ "resolved": "https://registry.npmmirror.com/yargs-parser/download/yargs-parser-13.1.2.tgz?cache=0&sync_timestamp=1637031053426&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fyargs-parser%2Fdownload%2Fyargs-parser-13.1.2.tgz",
+ "integrity": "sha1-Ew8JcC667vJlDVTObj5XBvek+zg=",
+ "dev": true,
+ "requires": {
+ "camelcase": "^5.0.0",
+ "decamelize": "^1.2.0"
+ }
+ },
+ "yn": {
+ "version": "3.1.1",
+ "resolved": "https://registry.nlark.com/yn/download/yn-3.1.1.tgz",
+ "integrity": "sha1-HodAGgnXZ8HV6rJqbkwYUYLS61A=",
+ "dev": true
+ },
+ "yocto-queue": {
+ "version": "0.1.0",
+ "resolved": "https://registry.nlark.com/yocto-queue/download/yocto-queue-0.1.0.tgz",
+ "integrity": "sha1-ApTrPe4FAo0x7hpfosVWpqrxChs=",
+ "dev": true
+ },
+ "zone.js": {
+ "version": "0.11.4",
+ "resolved": "https://registry.npmmirror.com/zone.js/download/zone.js-0.11.4.tgz",
+ "integrity": "sha1-D3Dc9quoD2mK9XNcuyV5aTlugCU=",
+ "requires": {
+ "tslib": "^2.0.0"
+ }
+ },
+ "zrender": {
+ "version": "5.2.1",
+ "resolved": "https://registry.nlark.com/zrender/download/zrender-5.2.1.tgz",
+ "integrity": "sha1-X0u9qRW6bUErCxncJDG+qtBUF7s=",
+ "requires": {
+ "tslib": "2.3.0"
+ },
+ "dependencies": {
+ "tslib": {
+ "version": "2.3.0",
+ "resolved": "https://registry.nlark.com/tslib/download/tslib-2.3.0.tgz?cache=0&sync_timestamp=1628722556410&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ftslib%2Fdownload%2Ftslib-2.3.0.tgz",
+ "integrity": "sha1-gDuM2rPhK6WBpMpByIObuw2ssJ4="
+ }
+ }
+ },
+ "zwitch": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npm.taobao.org/zwitch/download/zwitch-1.0.5.tgz?cache=0&sync_timestamp=1617357623494&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fzwitch%2Fdownload%2Fzwitch-1.0.5.tgz",
+ "integrity": "sha1-0R1zgf/tFrdC9q97PyI9XNn+mSA=",
+ "dev": true
+ }
+ }
+}
diff --git a/package.json b/package.json
new file mode 100644
index 00000000..bc21e82a
--- /dev/null
+++ b/package.json
@@ -0,0 +1,142 @@
+{
+ "name": "tms-obc-web",
+ "version": "1.0.0",
+ "description": "运营后台-WEB",
+ "author": "cipchk ",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/ng-alain/ng-alain.git"
+ },
+ "homepage": "https://e.ng-alain.com/theme/pro",
+ "scripts": {
+ "ng-high-memory": "node --max_old_space_size=8000 ./node_modules/@angular/cli/bin/ng",
+ "ng": "ng",
+ "start": "ng s -o --port 4202 --host 0.0.0.0",
+ "startIp": "ng serve -o --port 4202 --host 172.29.9.71 --open",
+ "hmr": "ng s -o --hmr",
+ "build": "npm run ng-high-memory build --",
+ "build:dev": "npm run build -- -c dev",
+ "build:test": "npm run build -- -c test",
+ "analyze": "npm run ng-high-memory build -- --source-map",
+ "analyze:view": "source-map-explorer dist/**/*.js",
+ "lint": "npm run lint:ts && npm run lint:style",
+ "lint:ts": "ng lint --fix",
+ "lint:style": "stylelint \"src/**/*.less\" --syntax less --fix",
+ "e2e": "ng e2e",
+ "test": "ng test --watch",
+ "test-coverage": "ng test --code-coverage --watch=false",
+ "color-less": "ng-alain-plugin-theme -t=colorLess",
+ "theme": "ng-alain-plugin-theme -t=themeCss",
+ "icon": "ng g ng-alain:plugin icon",
+ "prepare": "husky install"
+ },
+ "dependencies": {
+ "@agm/core": "^1.1.0",
+ "@amap/amap-jsapi-loader": "^1.0.1",
+ "@angular/animations": "~12.2.0",
+ "@angular/common": "~12.2.0",
+ "@angular/compiler": "~12.2.0",
+ "@angular/core": "~12.2.0",
+ "@angular/forms": "~12.2.0",
+ "@angular/platform-browser": "~12.2.0",
+ "@angular/platform-browser-dynamic": "~12.2.0",
+ "@angular/router": "~12.2.0",
+ "@delon/abc": "^12.3.0",
+ "@delon/acl": "^12.3.0",
+ "@delon/auth": "^12.3.0",
+ "@delon/cache": "^12.3.0",
+ "@delon/chart": "^12.3.0",
+ "@delon/form": "^12.3.0",
+ "@delon/mock": "^12.3.0",
+ "@delon/theme": "^12.3.0",
+ "@delon/util": "^12.3.0",
+ "@fullcalendar/core": "^5.9.0",
+ "@fullcalendar/daygrid": "^5.9.0",
+ "@fullcalendar/interaction": "^5.9.0",
+ "@fullcalendar/list": "^5.9.0",
+ "@fullcalendar/timegrid": "^5.9.0",
+ "@swimlane/ngx-charts": "^18.0.1",
+ "ajv": "^8.6.2",
+ "file-saver": "^2.0.5",
+ "html2canvas": "^1.4.1",
+ "js-base64": "^3.6.1",
+ "masonry-layout": "^4.2.2",
+ "ng-gallery": "^5.0.0",
+ "ng-zorro-antd": "^12.0.1",
+ "ngx-tinymce": "^12.0.0",
+ "ngx-trend": "^7.0.0",
+ "perfect-scrollbar": "^1.5.2",
+ "qrious": "^4.0.2",
+ "quill": "^1.3.7",
+ "quill-image-resize-module": "^3.0.0",
+ "rxjs": "~6.6.0",
+ "screenfull": "^5.1.0",
+ "tslib": "^2.3.0",
+ "zone.js": "~0.11.4"
+ },
+ "devDependencies": {
+ "@angular-devkit/build-angular": "~12.2.0",
+ "@angular-eslint/builder": "~12.3.1",
+ "@angular-eslint/eslint-plugin": "~12.3.1",
+ "@angular-eslint/eslint-plugin-template": "~12.3.1",
+ "@angular-eslint/schematics": "~12.3.1",
+ "@angular-eslint/template-parser": "~12.3.1",
+ "@angular/cli": "~12.2.0",
+ "@angular/compiler-cli": "~12.2.0",
+ "@angular/language-service": "~12.2.0",
+ "@delon/testing": "^12.3.0",
+ "@types/d3-geo": "^3.0.2",
+ "@types/d3-sankey": "^0.11.2",
+ "@types/file-saver": "^2.0.3",
+ "@types/jasmine": "~3.8.0",
+ "@types/jasminewd2": "~2.0.3",
+ "@types/js-base64": "^3.0.0",
+ "@types/node": "^12.11.1",
+ "@typescript-eslint/eslint-plugin": "~4.29.2",
+ "@typescript-eslint/parser": "~4.29.2",
+ "eslint": "^7.32.0",
+ "eslint-config-prettier": "~8.3.0",
+ "eslint-plugin-import": "~2.24.1",
+ "eslint-plugin-jsdoc": "~36.0.7",
+ "eslint-plugin-prefer-arrow": "~1.2.3",
+ "eslint-plugin-prettier": "~3.4.1",
+ "husky": "^6.0.0",
+ "jasmine-core": "~3.8.0",
+ "jasmine-spec-reporter": "~5.0.0",
+ "karma": "~6.3.0",
+ "karma-chrome-launcher": "~3.1.0",
+ "karma-coverage": "~2.0.3",
+ "karma-coverage-istanbul-reporter": "~3.0.2",
+ "karma-jasmine": "~4.0.0",
+ "karma-jasmine-html-reporter": "~1.7.0",
+ "lint-staged": "^11.1.2",
+ "ng-alain": "^12.3.0",
+ "ng-alain-plugin-theme": "^12.0.0",
+ "ng-alain-sts": "^0.0.1",
+ "node-fetch": "^2.6.1",
+ "prettier": "^2.2.1",
+ "protractor": "~7.0.0",
+ "source-map-explorer": "^2.5.2",
+ "stylelint": "^13.13.1",
+ "stylelint-config-prettier": "^8.0.2",
+ "stylelint-config-rational-order": "^0.1.2",
+ "stylelint-config-standard": "^22.0.0",
+ "stylelint-declaration-block-no-ignored-properties": "^2.4.0",
+ "stylelint-order": "^4.1.0",
+ "ts-node": "~8.3.0",
+ "typescript": "~4.3.5"
+ },
+ "lint-staged": {
+ "(src)/**/*.{html,ts}": [
+ "eslint --fix"
+ ],
+ "(src)/**/*.less": [
+ "stylelint --syntax less --fix"
+ ]
+ },
+ "private": true,
+ "theme": {
+ "name": "pro",
+ "version": "12.0.0"
+ }
+}
diff --git a/proxy.conf.js b/proxy.conf.js
new file mode 100644
index 00000000..3639702c
--- /dev/null
+++ b/proxy.conf.js
@@ -0,0 +1,41 @@
+/*
+ * @Description :
+ * @Version : 1.0
+ * @Author : Shiming
+ * @Date : 2022-01-18 09:51:21
+ * @LastEditors : Shiming
+ * @LastEditTime : 2022-04-19 14:20:28
+ * @FilePath : \\tms-obc-web\\proxy.conf.js
+ * Copyright (C) 2022 huzhenhong. All rights reserved.
+ */
+
+module.exports = {
+ /**
+ * The following means that all requests are directed to the backend `https://localhost:9000/`
+ */
+ // '/': {
+ // target: 'https://localhost:9000/',
+ // secure: false, // Ignore invalid SSL certificates
+ // changeOrigin: true
+ // }
+ // '//api': {
+ // target: {
+ // host: 'tms-api.yunduoxing.com',
+ // protocol: 'https:',
+ // port: 443
+ // },
+ // secure: false,
+ // changeOrigin: true,
+ // logLevel: 'debug'
+ // },
+ '//api': {
+ target: {
+ host: 'tms-api-test.eascs.com',
+ protocol: 'https:',
+ port: 443
+ },
+ secure: false,
+ changeOrigin: true,
+ logLevel: 'debug'
+ },
+};
diff --git a/src/app/app.component.ts b/src/app/app.component.ts
new file mode 100644
index 00000000..69b42ef3
--- /dev/null
+++ b/src/app/app.component.ts
@@ -0,0 +1,63 @@
+import { Component, ElementRef, OnInit, Renderer2 } from '@angular/core';
+import { NavigationEnd, NavigationError, RouteConfigLoadStart, Router } from '@angular/router';
+import { TitleService, VERSION as VERSION_ALAIN } from '@delon/theme';
+import { environment } from '@env/environment';
+import { NzIconService } from 'ng-zorro-antd/icon';
+import { NzModalService } from 'ng-zorro-antd/modal';
+import { VERSION as VERSION_ZORRO } from 'ng-zorro-antd/version';
+import { ThemeService } from './theme.service';
+
+@Component({
+ selector: 'app-root',
+ template: ` `
+})
+export class AppComponent implements OnInit {
+ constructor(
+ el: ElementRef,
+ renderer: Renderer2,
+ private router: Router,
+ private titleSrv: TitleService,
+ private modalSrv: NzModalService,
+ private iconService: NzIconService,
+ private themeService: ThemeService
+ ) {
+ renderer.setAttribute(el.nativeElement, 'ng-alain-version', VERSION_ALAIN.full);
+ renderer.setAttribute(el.nativeElement, 'ng-zorro-version', VERSION_ZORRO.full);
+ this.iconService.fetchFromIconfont({
+ scriptUrl: 'https://at.alicdn.com/t/font_3153207_udngwyp35db.js'
+ });
+ }
+
+ ngOnInit(): void {
+ let configLoad = false;
+ this.router.events.subscribe(ev => {
+ if (ev instanceof RouteConfigLoadStart) {
+ configLoad = true;
+ }
+ if (configLoad && ev instanceof NavigationError) {
+ this.modalSrv.confirm({
+ nzTitle: `提醒`,
+ nzContent: environment.production ? `应用可能已发布新版本,请点击刷新才能生效。` : `无法加载路由:${ev.url}`,
+ nzCancelDisabled: false,
+ nzOkText: '刷新',
+ nzCancelText: '忽略',
+ nzOnOk: () => location.reload()
+ });
+ }
+ if (ev instanceof NavigationEnd) {
+ this.titleSrv.setTitle();
+ this.modalSrv.closeAll();
+ }
+ });
+ // 适配放大150%的屏幕
+ const screen: any = window.screen
+ var zoom = window.devicePixelRatio || screen.deviceXDPI / screen?.logicalXDPI;
+ // console.log(zoom)
+ if (document.body.clientWidth >= 1280) {
+ if (zoom != 1 && zoom != 2 && zoom != 3) {
+ this.themeService.toggleTheme().then();
+ }
+ }
+
+ }
+}
diff --git a/src/app/app.module.ts b/src/app/app.module.ts
new file mode 100644
index 00000000..32f1b6a4
--- /dev/null
+++ b/src/app/app.module.ts
@@ -0,0 +1,77 @@
+/* eslint-disable import/order */
+/* eslint-disable import/no-duplicates */
+import { HttpClientModule } from '@angular/common/http';
+import { default as ngLang } from '@angular/common/locales/zh';
+import { APP_INITIALIZER, DEFAULT_CURRENCY_CODE, LOCALE_ID, NgModule, Type } from '@angular/core';
+import { BrowserModule } from '@angular/platform-browser';
+import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
+import { SimpleInterceptor } from '@delon/auth';
+import { NzNotificationModule } from 'ng-zorro-antd/notification';
+import zh from '@angular/common/locales/zh';
+registerLocaleData(zh);
+// #region global third module
+
+import { BidiModule } from '@angular/cdk/bidi';
+const GLOBAL_THIRD_MODULES: Array> = [BidiModule];
+
+// #endregion
+
+// #region Http Interceptors
+import { HTTP_INTERCEPTORS } from '@angular/common/http';
+
+import { BusinessInterceptor, DefaultInterceptor } from '@core';
+
+const INTERCEPTOR_PROVIDES = [
+ { provide: HTTP_INTERCEPTORS, useClass: SimpleInterceptor, multi: true },
+ { provide: HTTP_INTERCEPTORS, useClass: BusinessInterceptor, multi: true },
+ { provide: HTTP_INTERCEPTORS, useClass: DefaultInterceptor, multi: true }
+];
+// #endregion
+
+// #region Startup Service
+import { StartupService } from '@core';
+export function StartupServiceFactory(startupService: StartupService): () => Promise {
+ return () => startupService.load();
+}
+const APPINIT_PROVIDES = [
+ StartupService,
+ {
+ provide: APP_INITIALIZER,
+ useFactory: StartupServiceFactory,
+ deps: [StartupService],
+ multi: true
+ },
+ { provide: DEFAULT_CURRENCY_CODE, useValue: '¥' },
+ AuthGuard
+];
+// #endregion
+
+import { AppComponent } from './app.component';
+import { CoreModule } from './core/core.module';
+import { GlobalConfigModule } from './global-config.module';
+import { LayoutModule } from './layout/layout.module';
+import { RoutesModule } from './routes/routes.module';
+import { SharedModule } from './shared/shared.module';
+import { STWidgetModule } from './shared/widget/st-widget.module';
+import { registerLocaleData } from '@angular/common';
+import { AuthGuard } from './core/guards/auth.guard';
+
+@NgModule({
+ declarations: [AppComponent],
+ imports: [
+ BrowserModule,
+ BrowserAnimationsModule,
+ HttpClientModule,
+ GlobalConfigModule.forRoot(),
+ CoreModule,
+ SharedModule,
+ LayoutModule,
+ RoutesModule,
+ STWidgetModule,
+ NzNotificationModule,
+ ...GLOBAL_THIRD_MODULES
+ ],
+ providers: [...INTERCEPTOR_PROVIDES, ...APPINIT_PROVIDES],
+ bootstrap: [AppComponent]
+})
+export class AppModule {}
diff --git a/src/app/core/README.md b/src/app/core/README.md
new file mode 100644
index 00000000..2d98e129
--- /dev/null
+++ b/src/app/core/README.md
@@ -0,0 +1,5 @@
+### CoreModule
+
+**应** 仅只留 `providers` 属性。
+
+**作用:** 一些通用服务,例如:用户消息、HTTP数据访问。
diff --git a/src/app/core/core.module.ts b/src/app/core/core.module.ts
new file mode 100644
index 00000000..777d8016
--- /dev/null
+++ b/src/app/core/core.module.ts
@@ -0,0 +1,13 @@
+import { NgModule, Optional, SkipSelf } from '@angular/core';
+import { EATokenGuard } from './guards/token.guard';
+
+import { throwIfAlreadyLoaded } from './module-import-guard';
+
+@NgModule({
+ providers: [EATokenGuard]
+})
+export class CoreModule {
+ constructor(@Optional() @SkipSelf() parentModule: CoreModule) {
+ throwIfAlreadyLoaded(parentModule, 'CoreModule');
+ }
+}
diff --git a/src/app/core/core.service.ts b/src/app/core/core.service.ts
new file mode 100644
index 00000000..53cd814a
--- /dev/null
+++ b/src/app/core/core.service.ts
@@ -0,0 +1,92 @@
+/*
+ * @Author: Maple
+ * @Date: 2021-03-22 11:42:26
+ * @LastEditors: Do not edit
+ * @LastEditTime: 2021-05-27 14:06:18
+ * @Description: 全局核心服务
+ */
+import { Injectable, Injector } from '@angular/core';
+import { Router } from '@angular/router';
+import { ReuseTabService } from '@delon/abc/reuse-tab';
+import { DA_SERVICE_TOKEN, ITokenService } from '@delon/auth';
+import { CacheService } from '@delon/cache';
+import { SettingsService } from '@delon/theme';
+import { EnvironmentService } from '@env/environment.service';
+import { NzMessageService } from 'ng-zorro-antd/message';
+
+@Injectable({
+ providedIn: 'root'
+})
+export class CoreService {
+ // 获取当前登录用户信息
+ public $api_get_current_user_info = `/scm/cuc/cuc/user/getUserDetail`;
+
+ // 获取当前用户所拥有的菜单
+ public $api_get_current_user_menus = `/api/mdc/cuc/functionInfo/getUserHaveFunctionsList`;
+
+ position = { lat: '', lng: '' };
+
+ constructor(private injector: Injector) {}
+ // 注入路由
+ public get router(): Router {
+ return this.injector.get(Router);
+ }
+
+ // 注入全局设置服务
+ public get settingSrv(): SettingsService {
+ return this.injector.get(SettingsService);
+ }
+
+ // 注入缓存服务
+ public get cacheSrv(): CacheService {
+ return this.injector.get(CacheService);
+ }
+
+ // 注入令牌服务
+ public get tokenSrv(): ITokenService {
+ return this.injector.get(DA_SERVICE_TOKEN);
+ }
+
+ // 注入消息服务
+ public get msgSrv(): NzMessageService {
+ return this.injector.get(NzMessageService);
+ }
+
+ // 注入环境服务
+ public get envSrv(): EnvironmentService {
+ return this.injector.get(EnvironmentService);
+ }
+
+ // 注入路由复用服务
+ private get reuseTabService(): ReuseTabService {
+ return this.injector.get(ReuseTabService);
+ }
+
+ // 登录状态
+ public get loginStatus(): boolean {
+ try {
+ return !!this.tokenSrv.get()?.token;
+ } catch (error) {
+ return false;
+ }
+ }
+
+ // 权限认证凭据(TOKEN)
+ public get token(): string {
+ return this.tokenSrv.get()?.token || '';
+ }
+
+ /**
+ * 登出系统
+ * @param showMsg 是否显示登录过期弹窗
+ */
+ logout(showMsg: boolean = false): void {
+ if (showMsg) {
+ this.msgSrv.warning('未登录或登录信息已过期,请重新登录!');
+ }
+ this.settingSrv.setUser({});
+ this.tokenSrv.clear();
+ this.cacheSrv.clear();
+ this.router.navigate([this.tokenSrv.login_url]);
+ }
+}
diff --git a/src/app/core/guards/auth.guard.ts b/src/app/core/guards/auth.guard.ts
new file mode 100644
index 00000000..b5a30a58
--- /dev/null
+++ b/src/app/core/guards/auth.guard.ts
@@ -0,0 +1,89 @@
+import { Injectable, Injector } from '@angular/core';
+import { ActivatedRouteSnapshot, Router, RouterStateSnapshot } from '@angular/router';
+import { ACLGuard, ACLService } from '@delon/acl';
+import { MenuService, SettingsService } from '@delon/theme';
+import { EAUserService } from '@shared';
+import { Observable, of } from 'rxjs';
+import { switchMap } from 'rxjs/operators';
+
+@Injectable()
+export class AuthGuard extends ACLGuard {
+ constructor(
+ srv: ACLService,
+ public srv1: ACLService,
+ private menuService: MenuService,
+ private settings: SettingsService,
+ private userService: EAUserService,
+ router: Router,
+ private inject: Injector
+ ) {
+ super(srv, router, inject);
+ }
+
+ canActivate(route: ActivatedRouteSnapshot, _state: RouterStateSnapshot): Observable {
+ // if (Object.keys(route.params)?.length > 0 || !route.routeConfig?.path) {
+ // return super.canActivate(route, _state);
+ // } else {
+ // return super.canActivate(route, _state);
+ // }
+ return super.canActivate(route, _state);
+ }
+
+ canActivateChild(childRoute: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable {
+ if (childRoute.routeConfig?.loadChildren || childRoute.routeConfig?.children) {
+ return super.canActivateChild(childRoute, state);
+ } else {
+ return this.handle(childRoute, state, 2, this.settingRoute(childRoute.params, state.url));
+ }
+ }
+
+ private handle(route: ActivatedRouteSnapshot, state: RouterStateSnapshot, type: 1 | 2, router?: string): Observable {
+ if (!router) {
+ return type === 1 ? super.canActivate(route, state) : super.canActivateChild(route, state);
+ }
+ return this.userService
+ .request('/api/mdc/cuc/userAuthority/isUserAdmin', {
+ appUserId: this.settings.user.appUserId
+ })
+ .pipe(
+ switchMap(res => {
+ if (res) {
+ // 超级管理员赋值全量权限
+ this.srv1.setFull(true);
+ return of(true);
+ } else {
+ // 如果不是超级管理员 获取权限
+ return this.userService.request('/api/mdc/cuc/functionButton/getUserFunctionButton', { link: router });
+ }
+ }),
+ switchMap(res => {
+ if (res?.abilities) {
+ this.srv1.setAbility(res.abilities || []);
+ // this.menuService.resume();
+ this.userService.loadUserMenus();
+ }
+ return type === 1 ? super.canActivate(route, state) : super.canActivateChild(route, state);
+ })
+ );
+ }
+
+ /**
+ * 根据参数拼接原始路由
+ * @param params 参数
+ * @param route 实际路由
+ * @returns
+ */
+ private settingRoute(params: any, route: string) {
+ let _route = route;
+ if (_route.indexOf('?') > -1) {
+ _route = route.split('?')[0];
+ }
+ for (const key of Object.keys(params)) {
+ if (_route.indexOf(params[key]) > -1) {
+ _route = _route.replace(params[key], ':' + key);
+ }
+ }
+
+ return _route;
+ }
+}
diff --git a/src/app/core/guards/token.guard.ts b/src/app/core/guards/token.guard.ts
new file mode 100644
index 00000000..c043a978
--- /dev/null
+++ b/src/app/core/guards/token.guard.ts
@@ -0,0 +1,38 @@
+import { Inject, Injectable, Injector } from '@angular/core';
+import { ActivatedRouteSnapshot, CanActivate, CanActivateChild, Router, RouterStateSnapshot } from '@angular/router';
+import { sysConf } from '@conf/sys.conf';
+import { CoreService } from '@core';
+import { ACLGuard, ACLService } from '@delon/acl';
+import { EAUserService } from '@shared';
+import { Observable, of } from 'rxjs';
+
+@Injectable()
+export class EATokenGuard implements CanActivate, CanActivateChild {
+ constructor(srv: ACLService, router: Router, private eaUserSrv: CoreService, private router2: Router, private inject: Injector) {}
+
+ canActivate(route: ActivatedRouteSnapshot, _state: RouterStateSnapshot | null): Observable {
+ const canOpen = this.eaUserSrv.loginStatus;
+ if (!canOpen) {
+ this.router2.navigate([sysConf.login_url], {
+ queryParams: {
+ returnUrl: _state?.url
+ }
+ });
+ return of(!canOpen);
+ }
+ return of(true);
+ }
+
+ canActivateChild(childRoute: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable {
+ const canOpen = this.eaUserSrv.loginStatus;
+ if (!canOpen) {
+ this.router2.navigate([sysConf.login_url], {
+ queryParams: {
+ returnUrl: state?.url
+ }
+ });
+ return of(!canOpen);
+ }
+ return of(true);
+ }
+}
diff --git a/src/app/core/index.ts b/src/app/core/index.ts
new file mode 100644
index 00000000..9f525334
--- /dev/null
+++ b/src/app/core/index.ts
@@ -0,0 +1,9 @@
+export * from './module-import-guard';
+export * from './net/default.interceptor';
+export * from './net/business.interceptor';
+
+// Services
+export * from './core.service';
+export * from './startup/startup.service';
+
+export * from './guards/token.guard';
diff --git a/src/app/core/module-import-guard.ts b/src/app/core/module-import-guard.ts
new file mode 100644
index 00000000..ad3d795a
--- /dev/null
+++ b/src/app/core/module-import-guard.ts
@@ -0,0 +1,6 @@
+// https://angular.io/guide/styleguide#style-04-12
+export function throwIfAlreadyLoaded(parentModule: any, moduleName: string): void {
+ if (parentModule) {
+ throw new Error(`${moduleName} has already been loaded. Import Core modules in the AppModule only.`);
+ }
+}
diff --git a/src/app/core/net/business.interceptor.ts b/src/app/core/net/business.interceptor.ts
new file mode 100644
index 00000000..9e34709e
--- /dev/null
+++ b/src/app/core/net/business.interceptor.ts
@@ -0,0 +1,108 @@
+import {
+ HttpErrorResponse,
+ HttpEvent,
+ HttpHandler,
+ HttpInterceptor,
+ HttpRequest,
+ HttpResponse,
+ HttpResponseBase
+} from '@angular/common/http';
+import { Inject, Injectable, Optional } from '@angular/core';
+import { DA_SERVICE_TOKEN, ITokenService } from '@delon/auth';
+import { environment } from '@env/environment';
+import { EAEnvironmentService, EAUserService } from '@shared';
+import { Observable, of } from 'rxjs';
+import { catchError, mergeMap } from 'rxjs/operators';
+import { CoreService } from '../core.service';
+
+@Injectable()
+export class BusinessInterceptor implements HttpInterceptor {
+ constructor(
+ private envSrv: EAEnvironmentService,
+ private eaUserSrv: EAUserService,
+ @Optional()
+ @Inject(DA_SERVICE_TOKEN)
+ private tokenSrv: ITokenService,
+ private coreSrv: CoreService
+ ) {}
+ intercept(req: HttpRequest, next: HttpHandler): Observable> {
+ // 构造新的请求URL
+ req = this.constructNewRequestUrl(req);
+ // 附加额外的请求头
+ req = this.attachAdditionalHeaders(req);
+ // 后续操作
+ return next.handle(req).pipe(
+ mergeMap(ev => this.handlingBussinessResponseData(ev)),
+ catchError((err: HttpErrorResponse) => this.handlingBusinessErrors(err))
+ );
+ }
+
+ /**
+ * 构造新的请求URL
+ */
+ private constructNewRequestUrl(req: HttpRequest): HttpRequest {
+ let url = req.url;
+ if (!url.startsWith('https://') && !url.startsWith('http://')) {
+ if (!url.startsWith('assets')) {
+ url = environment.api.baseUrl + url;
+ }
+ }
+ return req.clone({ url });
+ }
+
+ /**
+ * 附加额外的请求头
+ */
+ private attachAdditionalHeaders(req: HttpRequest): HttpRequest {
+ let position = {};
+ if (this.coreSrv.position.lat && this.coreSrv.position.lng) {
+ position = { lat: this.coreSrv.position.lat.toString(), lng: this.coreSrv.position.lng.toString() };
+ }
+ // 附加环境变量
+ const header: any = {
+ appId: this.envSrv.env.appId,
+ tenantId: this.envSrv.env.tenantId,
+ enterpriseId: this.envSrv.env.enterpriseId,
+ ...position
+ };
+
+ // 附加授权声明
+ const token = this.tokenSrv.get()?.token;
+ if (token) {
+ header.Authorization = `Bearer ${token}`;
+ }
+ return req.clone({ setHeaders: header });
+ }
+
+ /**
+ * 处理业务数据
+ */
+ private handlingBussinessResponseData(ev: HttpEvent): Observable {
+ if (ev instanceof HttpResponseBase) {
+ const body = (ev as HttpResponse).body;
+ if (body) {
+ switch (body.status) {
+ case 505001:
+ case 505002:
+ this.eaUserSrv.logout();
+ break;
+ default:
+ break;
+ }
+ }
+ }
+ if (ev instanceof HttpErrorResponse) {
+ return this.handlingBusinessErrors(ev);
+ }
+ return of(ev);
+ }
+
+ /**
+ * 处理响应错误
+ */
+ private handlingBusinessErrors(err: HttpErrorResponse): Observable {
+ /** Http响应异常已在默认拦截器处理完成 ,该处不再处理 */
+
+ return of(err);
+ }
+}
diff --git a/src/app/core/net/default.interceptor.ts b/src/app/core/net/default.interceptor.ts
new file mode 100644
index 00000000..7b390379
--- /dev/null
+++ b/src/app/core/net/default.interceptor.ts
@@ -0,0 +1,59 @@
+import { HttpErrorResponse, HttpEvent, HttpHandler, HttpInterceptor, HttpRequest, HttpResponseBase } from '@angular/common/http';
+import { Injectable } from '@angular/core';
+import { Observable, of } from 'rxjs';
+import { catchError, mergeMap } from 'rxjs/operators';
+import { CoreService } from './../core.service';
+
+const CODEMESSAGE: { [key: number]: string } = {
+ 200: '服务器成功返回请求的数据。',
+ 201: '新建或修改数据成功。',
+ 202: '一个请求已经进入后台排队(异步任务)。',
+ 204: '删除数据成功。',
+ 400: '发出的请求有错误,服务器没有进行新建或修改数据的操作。',
+ 401: '用户没有权限(令牌、用户名、密码错误)。',
+ 403: '用户得到授权,但是访问是被禁止的。',
+ 404: '发出的请求针对的是不存在的记录,服务器没有进行操作。',
+ 406: '请求的格式不可得。',
+ 410: '请求的资源被永久删除,且不会再得到的。',
+ 422: '当创建一个对象时,发生一个验证错误。',
+ 500: '服务器发生错误,请检查服务器。',
+ 502: '网关错误。',
+ 503: '服务不可用,服务器暂时过载或维护。',
+ 504: '网关超时。'
+};
+
+@Injectable()
+export class DefaultInterceptor implements HttpInterceptor {
+ constructor(private coreSrv: CoreService) {}
+ intercept(req: HttpRequest, next: HttpHandler): Observable> {
+ return next.handle(req).pipe(
+ mergeMap(ev => this.handlingHttpResponseData(ev)),
+ catchError((err: HttpErrorResponse) => this.handlingHttpErrorResponse(err))
+ );
+ }
+
+ /**
+ * 处理Http响应数据
+ */
+ private handlingHttpResponseData(ev: HttpEvent): Observable {
+ if (ev instanceof HttpResponseBase) {
+ // 正常情况直接返回到下个业务拦截器处理
+ if (ev.status >= 200 && ev.status < 300) {
+ return of(ev);
+ }
+
+ // 所有状态不是2xx和3xx都当作异常处理
+ if (ev instanceof HttpErrorResponse) {
+ return this.handlingHttpErrorResponse(ev);
+ }
+ }
+ return of(ev);
+ }
+
+ /**
+ * 处理默认Http响应错误
+ */
+ private handlingHttpErrorResponse(err: HttpErrorResponse): Observable {
+ return of(err);
+ }
+}
diff --git a/src/app/core/startup/startup.service.ts b/src/app/core/startup/startup.service.ts
new file mode 100644
index 00000000..5a8be33e
--- /dev/null
+++ b/src/app/core/startup/startup.service.ts
@@ -0,0 +1,191 @@
+import { HttpClient } from '@angular/common/http';
+import { Inject, Injectable } from '@angular/core';
+import { cacheConf } from '@conf/cache.conf';
+import { sysConf } from '@conf/sys.conf';
+import { ACLService } from '@delon/acl';
+import { MenuService, SettingsService, TitleService, _HttpClient } from '@delon/theme';
+import { AlainConfigService } from '@delon/util';
+import { environment } from '@env/environment';
+import { AmapService, EACacheService, EAUserService } from '@shared';
+import { NzSafeAny } from 'ng-zorro-antd/core/types';
+import { NzIconService } from 'ng-zorro-antd/icon';
+import { NzImageService } from 'ng-zorro-antd/image';
+import { NzUploadFile } from 'ng-zorro-antd/upload';
+import { Observable, zip } from 'rxjs';
+import { catchError, map } from 'rxjs/operators';
+
+import { ICONS } from '../../../style-icons';
+import { ICONS_AUTO } from '../../../style-icons-auto';
+import { CoreService } from '../core.service';
+
+/**
+ * Used for application startup
+ * Generally used to get the basic data of the application, like: Menu Data, User Data, etc.
+ */
+@Injectable()
+export class StartupService {
+ constructor(
+ iconSrv: NzIconService,
+ private menuService: MenuService,
+ private settingService: SettingsService,
+ private aclService: ACLService,
+ private titleService: TitleService,
+ private httpClient: _HttpClient,
+ private userSrv: EAUserService,
+ private amapService: AmapService,
+ public cacheSrv: EACacheService,
+ private coreSrv: CoreService,
+ private nzImageService: NzImageService,
+ private alainConfigService: AlainConfigService
+ ) {
+ iconSrv.addIcon(...ICONS_AUTO, ...ICONS);
+ this.settingService.setLayout('fixSiderbar', true);
+ // 全局修改sf图片预览方式
+ alainConfigService.set('sf', {
+ ui: {
+ preview: (file: NzUploadFile) => {
+ if (file.url) {
+ this.nzImageService.preview([{ src: file.url }]);
+ }
+ }
+ }
+ });
+ }
+
+ // TODO: 退出登录时需要清理用户信息
+
+ load(): Promise {
+ return new Promise(resolve => {
+ this.amapService.getCurrentPosition().subscribe(res => {
+ if (res.position) {
+ this.coreSrv.position = { lat: res.position.lat, lng: res.position.lng };
+ }
+ });
+
+ let data;
+ if (this.coreSrv.loginStatus) {
+ // 本地菜单
+ // data = this.loadMockData();
+ // 远程菜单
+ data = this.loadRemoteData();
+ } else {
+ data = this.loadMockData();
+ }
+
+ data
+ .pipe(
+ catchError(res => {
+ console.warn(`StartupService.load: Network request failed`, res);
+ resolve();
+ return [];
+ })
+ )
+ .subscribe(
+ ([appData, userData, menuData]) => this.initSystem(appData, userData, menuData),
+ err => {
+ console.log(err);
+ },
+ () => resolve()
+ );
+ });
+ }
+
+ /**
+ * 系统初始化
+ *
+ * @param langData 翻译数据
+ * @param appData App应用数据
+ * @param userData 用户数据
+ * @param menuData 菜单数据
+ */
+ private initSystem(appData: NzSafeAny, userData: NzSafeAny, menuData: NzSafeAny): void {
+ // 应用信息:包括站点名、描述、年份
+ this.settingService.setApp(appData);
+ // 用户信息:包括姓名、头像、邮箱地址
+ this.settingService.setUser(userData);
+ this.cacheSrv.set(cacheConf.env, {
+ appId: sysConf.appId,
+ tenantId: userData?.tenantId || sysConf.tenantId,
+ enterpriseId: userData?.enterpriseId || sysConf.enterpriseId
+ });
+ // ACL:设置权限为全量
+ this.aclService.setFull(false);
+ // 初始化菜单
+ if (menuData) {
+ this.menuService.add(menuData);
+ }
+ // 设置页面标题的后缀
+ this.titleService.default = '';
+ this.titleService.suffix = appData.name;
+ }
+
+ /**
+ * @description 加载本地模拟数据
+ * @returns 程序初始化数据
+ */
+ loadMockData(): Observable<[object, object, object]> {
+ // 登录时调用远程数据, 非登录状态下调用Mock数据
+
+ // App数据
+ const appData = this.httpClient.get(`assets/mocks/app-data.json`).pipe(map((res: any) => res.app));
+
+ // 用户数据
+ const userData = this.httpClient.get('assets/mocks/user-data.json').pipe(map((res: any) => res.user));
+
+ // 菜单数据
+ const menuData = this.httpClient.get('assets/mocks/menu-data.json').pipe(map((res: any) => res.data.menu));
+
+ return zip(appData, userData, menuData);
+ }
+
+ /**
+ * @description 加载远程数据
+ * @returns 程序初始化数据
+ */
+ loadRemoteData(): Observable<[object, object, object]> {
+ // 登录时调用远程数据, 非登录状态下调用Mock数据
+
+ // App数据
+ const appData = this.httpClient.get(`assets/mocks/app-data.json`).pipe(map((res: any) => res.app));
+
+ // 用户数据
+ const userData = this.httpClient.post(this.userSrv.$api_get_user_by_token, {}).pipe(map((res: any) => res.data));
+
+ // 菜单数据
+ const menuData = this.httpClient
+ .post(this.coreSrv.$api_get_current_user_menus, {
+ appId: this.coreSrv.envSrv.getEnvironment().appId
+ })
+ .pipe(map((res: any) => res.data));
+ // const menuData = this.httpClient.get('assets/mocks/menu-data.json').pipe(map((res: any) => res.data.menu));
+
+ return zip(appData, userData, menuData);
+ }
+
+ // load(): Observable {
+ // const defaultLang = this.i18n.defaultLang;
+ // return zip(this.i18n.loadLangData(defaultLang), this.httpClient.get('assets/tmp/app-data.json')).pipe(
+ // // 接收其他拦截器后产生的异常消息
+ // catchError(res => {
+ // console.warn(`StartupService.load: Network request failed`, res);
+ // return [];
+ // }),
+ // map(([langData, appData]: [Record, NzSafeAny]) => {
+ // // setting language data
+ // this.i18n.use(defaultLang, langData);
+
+ // // 应用信息:包括站点名、描述、年份
+ // this.settingService.setApp(appData.app);
+ // // 用户信息:包括姓名、头像、邮箱地址
+ // this.settingService.setUser(appData.user);
+ // // ACL:设置权限为全量
+ // this.aclService.setFull(true);
+ // // 初始化菜单
+ // this.menuService.add(appData.menu);
+ // // 设置页面标题的后缀
+ // this.titleService.default = '';
+ // this.titleService.suffix = appData.app.name;
+ // })
+ // );
+ // }
+}
diff --git a/src/app/global-config.module.ts b/src/app/global-config.module.ts
new file mode 100644
index 00000000..af9999b1
--- /dev/null
+++ b/src/app/global-config.module.ts
@@ -0,0 +1,79 @@
+/* eslint-disable import/order */
+import { ModuleWithProviders, NgModule, Optional, SkipSelf } from '@angular/core';
+import { throwIfAlreadyLoaded } from '@core';
+import { ReuseTabMatchMode, ReuseTabService, ReuseTabStrategy } from '@delon/abc/reuse-tab';
+import { DelonACLModule } from '@delon/acl';
+import { AlainThemeModule } from '@delon/theme';
+import { AlainConfig, ALAIN_CONFIG } from '@delon/util';
+import { environment } from '@env/environment';
+
+// Please refer to: https://ng-alain.com/docs/global-config
+// #region NG-ALAIN Config
+
+const alainConfig: AlainConfig = {
+ st: {
+ req: { method: 'POST', allInBody: true, reName: { pi: 'pageIndex', ps: 'pageSize' } },
+ res: { reName: { list: 'data.records', total: 'data.total' } },
+ page: { show: true, showSize: true, pageSizes: [10, 20, 30, 50, 100, 200, 300, 500, 1000], toTop: false },
+ modal: { size: 'lg' }
+ },
+ sf: { button: { search: '查询' } },
+ pageHeader: { homeI18n: 'home', recursiveBreadcrumb: true },
+ auth: { login_url: '/passport/login' },
+ acl: { guard_url: '/exception/403' },
+ chart: {
+ // 以下是默认配置,如果项目无法外网访问,可以根据 `angular.json` 配置将依赖包直接使用 `./assets***` 路径
+ libs: [
+ 'https://gw.alipayobjects.com/os/lib/antv/g2/4.1.4/dist/g2.min.js',
+ 'https://gw.alipayobjects.com/os/lib/antv/data-set/0.11.7/dist/data-set.js'
+ ]
+ },
+};
+
+const alainModules = [AlainThemeModule.forRoot(), DelonACLModule.forRoot()];
+const alainProvides = [{ provide: ALAIN_CONFIG, useValue: alainConfig }];
+
+// #region reuse-tab
+
+// import { RouteReuseStrategy } from '@angular/router';
+// alainProvides.push({
+// provide: RouteReuseStrategy,
+// useClass: ReuseTabStrategy,
+// deps: [ReuseTabService]
+// } as any);
+
+// #endregion
+
+// #endregion
+
+// Please refer to: https://ng.ant.design/docs/global-config/en#how-to-use
+// #region NG-ZORRO Config
+
+import { NzConfig, NZ_CONFIG } from 'ng-zorro-antd/core/config';
+
+const ngZorroConfig: NzConfig = {};
+
+const zorroProvides = [{ provide: NZ_CONFIG, useValue: ngZorroConfig }];
+
+// #endregion
+
+@NgModule({
+ imports: [...alainModules, ...(environment.modules || [])]
+})
+export class GlobalConfigModule {
+ constructor(@Optional() @SkipSelf() parentModule: GlobalConfigModule, reuseTabService: ReuseTabService) {
+ throwIfAlreadyLoaded(parentModule, 'GlobalConfigModule');
+ // NOTICE: Only valid for menus with reuse property
+ // Pls refer to the E-Mail demo effect
+ // reuseTabService.mode = ReuseTabMatchMode.MenuForce;
+ // Shouled be trigger init, you can ingore when used `reuse-tab` component in layout component
+ // reuseTabService.init();
+ }
+
+ static forRoot(): ModuleWithProviders {
+ return {
+ ngModule: GlobalConfigModule,
+ providers: [...alainProvides, ...zorroProvides]
+ };
+ }
+}
diff --git a/src/app/layout/layout.module.ts b/src/app/layout/layout.module.ts
new file mode 100644
index 00000000..3afd4206
--- /dev/null
+++ b/src/app/layout/layout.module.ts
@@ -0,0 +1,65 @@
+import { LayoutModule as CDKLayoutModule } from '@angular/cdk/layout';
+import { CommonModule } from '@angular/common';
+import { NgModule, Type } from '@angular/core';
+import { FormsModule } from '@angular/forms';
+import { RouterModule } from '@angular/router';
+import { GlobalFooterModule } from '@delon/abc/global-footer';
+import { NoticeIconModule } from '@delon/abc/notice-icon';
+import { AlainThemeModule } from '@delon/theme';
+import { ThemeBtnModule } from '@delon/theme/theme-btn';
+import { ScrollbarModule } from '@shared';
+import { NzAlertModule } from 'ng-zorro-antd/alert';
+import { NzAutocompleteModule } from 'ng-zorro-antd/auto-complete';
+import { NzAvatarModule } from 'ng-zorro-antd/avatar';
+import { NzBadgeModule } from 'ng-zorro-antd/badge';
+import { NzButtonModule } from 'ng-zorro-antd/button';
+import { NzDividerModule } from 'ng-zorro-antd/divider';
+import { NzDrawerModule } from 'ng-zorro-antd/drawer';
+import { NzDropDownModule } from 'ng-zorro-antd/dropdown';
+import { NzIconModule } from 'ng-zorro-antd/icon';
+import { NzLayoutModule } from 'ng-zorro-antd/layout';
+import { NzMessageModule } from 'ng-zorro-antd/message';
+import { NzSelectModule } from 'ng-zorro-antd/select';
+import { NzSpinModule } from 'ng-zorro-antd/spin';
+import { NzSwitchModule } from 'ng-zorro-antd/switch';
+import { NzTimelineModule } from 'ng-zorro-antd/timeline';
+import { NzToolTipModule } from 'ng-zorro-antd/tooltip';
+import { NzGridModule } from 'ng-zorro-antd/grid';
+import { LayoutPassportComponent } from './passport/passport.component';
+import { PRO_COMPONENTS } from './pro/index';
+
+const COMPONENTS: Array> = [...PRO_COMPONENTS, LayoutPassportComponent];
+
+@NgModule({
+ imports: [
+ CommonModule,
+ RouterModule,
+ FormsModule,
+ AlainThemeModule,
+ GlobalFooterModule,
+ CDKLayoutModule,
+ NzSpinModule,
+ NzDropDownModule,
+ NzIconModule,
+ NzDrawerModule,
+ NzAutocompleteModule,
+ NzAvatarModule,
+ NzSwitchModule,
+ NzToolTipModule,
+ NzSelectModule,
+ NzDividerModule,
+ NzAlertModule,
+ NzLayoutModule,
+ NzButtonModule,
+ NzBadgeModule,
+ NzTimelineModule,
+ NoticeIconModule,
+ ThemeBtnModule,
+ ScrollbarModule,
+ NzGridModule,
+ NzMessageModule
+ ],
+ declarations: COMPONENTS,
+ exports: COMPONENTS
+})
+export class LayoutModule {}
diff --git a/src/app/layout/passport/passport.component.html b/src/app/layout/passport/passport.component.html
new file mode 100644
index 00000000..0f37d045
--- /dev/null
+++ b/src/app/layout/passport/passport.component.html
@@ -0,0 +1,15 @@
+
+
+
+
+

+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/app/layout/passport/passport.component.less b/src/app/layout/passport/passport.component.less
new file mode 100644
index 00000000..fc77bde8
--- /dev/null
+++ b/src/app/layout/passport/passport.component.less
@@ -0,0 +1,22 @@
+@import '~@delon/theme/index';
+
+:host {
+ ::ng-deep {
+ .layout {
+ height: 100%;
+ }
+
+ .ant-layout-header {
+ background: #ffffff;
+ box-shadow: 0px 5px 5px #d1d1d1;
+ }
+
+
+ }
+}
+
+.title {
+ font-size : 18px;
+ font-weight: 600;
+ color : #26282A;
+}
\ No newline at end of file
diff --git a/src/app/layout/passport/passport.component.ts b/src/app/layout/passport/passport.component.ts
new file mode 100644
index 00000000..8a4ef9da
--- /dev/null
+++ b/src/app/layout/passport/passport.component.ts
@@ -0,0 +1,15 @@
+import { Component, Inject, OnInit } from '@angular/core';
+import { DA_SERVICE_TOKEN, ITokenService } from '@delon/auth';
+
+@Component({
+ selector: 'layout-passport',
+ templateUrl: './passport.component.html',
+ styleUrls: ['./passport.component.less']
+})
+export class LayoutPassportComponent implements OnInit {
+ constructor() {}
+
+ ngOnInit(): void {
+ // this.tokenService.clear();
+ }
+}
diff --git a/src/app/layout/pro/components/footer/footer.component.html b/src/app/layout/pro/components/footer/footer.component.html
new file mode 100644
index 00000000..59588807
--- /dev/null
+++ b/src/app/layout/pro/components/footer/footer.component.html
@@ -0,0 +1,16 @@
+
+
+ Pro 首页
+
+
+
+
+
+ Alain Pro
+
+ Copyright
+
+ {{ year }}
+ 卡色
+ 出品
+
\ No newline at end of file
diff --git a/src/app/layout/pro/components/footer/footer.component.ts b/src/app/layout/pro/components/footer/footer.component.ts
new file mode 100644
index 00000000..0d23aebc
--- /dev/null
+++ b/src/app/layout/pro/components/footer/footer.component.ts
@@ -0,0 +1,15 @@
+import { ChangeDetectionStrategy, Component } from '@angular/core';
+import { SettingsService } from '@delon/theme';
+
+@Component({
+ selector: 'layout-pro-footer',
+ templateUrl: './footer.component.html',
+ changeDetection: ChangeDetectionStrategy.OnPush
+})
+export class LayoutProFooterComponent {
+ get year(): number {
+ return this.setting.app.year;
+ }
+
+ constructor(private setting: SettingsService) {}
+}
diff --git a/src/app/layout/pro/components/header/header.component.html b/src/app/layout/pro/components/header/header.component.html
new file mode 100644
index 00000000..f3b58f4a
--- /dev/null
+++ b/src/app/layout/pro/components/header/header.component.html
@@ -0,0 +1,25 @@
+
+
diff --git a/src/app/layout/pro/components/header/header.component.ts b/src/app/layout/pro/components/header/header.component.ts
new file mode 100644
index 00000000..659f5ab5
--- /dev/null
+++ b/src/app/layout/pro/components/header/header.component.ts
@@ -0,0 +1,68 @@
+import { DOCUMENT } from '@angular/common';
+import { ChangeDetectionStrategy, ChangeDetectorRef, Component, HostBinding, Inject, OnDestroy, OnInit } from '@angular/core';
+import { RTL, RTLService } from '@delon/theme';
+import { combineLatest, fromEvent, Subject } from 'rxjs';
+import { distinctUntilChanged, takeUntil, tap, throttleTime } from 'rxjs/operators';
+
+import { BrandService } from '../../pro.service';
+
+@Component({
+ selector: 'layout-pro-header',
+ templateUrl: './header.component.html',
+ host: {
+ '[class.ant-layout-header]': 'true',
+ '[class.alain-pro__header-fixed]': 'pro.fixedHeader',
+ '[class.alain-pro__header-hide]': 'hideHeader',
+ '[style.padding.px]': '0'
+ },
+ changeDetection: ChangeDetectionStrategy.OnPush
+})
+export class LayoutProHeaderComponent implements OnInit, OnDestroy {
+ private destroy$ = new Subject();
+ hideHeader = false;
+
+ @HostBinding('style.width')
+ get getHeadWidth(): string {
+ const { isMobile, fixedHeader, menu, collapsed, width, widthInCollapsed } = this.pro;
+ if (isMobile || !fixedHeader || menu === 'top') {
+ return '100%';
+ }
+ return collapsed ? `calc(100% - ${widthInCollapsed}px)` : `calc(100% - ${width}px)`;
+ }
+
+ get collapsedIcon(): string {
+ let type = this.pro.collapsed ? 'unfold' : 'fold';
+ if (this.rtl.dir === RTL) {
+ type = this.pro.collapsed ? 'fold' : 'unfold';
+ }
+ return `menu-${type}`;
+ }
+
+ constructor(public pro: BrandService, @Inject(DOCUMENT) private doc: any, private cdr: ChangeDetectorRef, private rtl: RTLService) {}
+
+ private handScroll(): void {
+ if (!this.pro.autoHideHeader) {
+ this.hideHeader = false;
+ return;
+ }
+ setTimeout(() => {
+ this.hideHeader = this.doc.body.scrollTop + this.doc.documentElement.scrollTop > this.pro.autoHideHeaderTop;
+ });
+ }
+
+ ngOnInit(): void {
+ combineLatest([
+ this.pro.notify.pipe(tap(() => this.cdr.markForCheck())),
+ fromEvent(window, 'scroll', { passive: false }).pipe(throttleTime(50), distinctUntilChanged())
+ ])
+ .pipe(takeUntil(this.destroy$))
+ .subscribe(() => this.handScroll());
+
+ this.rtl.change.pipe(takeUntil(this.destroy$)).subscribe(() => this.cdr.detectChanges());
+ }
+
+ ngOnDestroy(): void {
+ this.destroy$.next();
+ this.destroy$.complete();
+ }
+}
diff --git a/src/app/layout/pro/components/logo/logo.component.html b/src/app/layout/pro/components/logo/logo.component.html
new file mode 100644
index 00000000..511e16c7
--- /dev/null
+++ b/src/app/layout/pro/components/logo/logo.component.html
@@ -0,0 +1,4 @@
+
+
+ {{ name }}
+
diff --git a/src/app/layout/pro/components/logo/logo.component.ts b/src/app/layout/pro/components/logo/logo.component.ts
new file mode 100644
index 00000000..ac1366f2
--- /dev/null
+++ b/src/app/layout/pro/components/logo/logo.component.ts
@@ -0,0 +1,15 @@
+import { ChangeDetectionStrategy, Component } from '@angular/core';
+import { SettingsService } from '@delon/theme';
+
+@Component({
+ selector: 'layout-pro-logo',
+ templateUrl: './logo.component.html',
+ changeDetection: ChangeDetectionStrategy.OnPush
+})
+export class LayoutProLogoComponent {
+ get name(): string {
+ return this.setting.app.name!;
+ }
+
+ constructor(private setting: SettingsService) {}
+}
diff --git a/src/app/layout/pro/components/menu/menu.component.html b/src/app/layout/pro/components/menu/menu.component.html
new file mode 100644
index 00000000..272c43b3
--- /dev/null
+++ b/src/app/layout/pro/components/menu/menu.component.html
@@ -0,0 +1,67 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ i.text }}
+ {{ i.text }}
+
+
+
+
+ - 0" nz-submenu [nzTitle]="l1TitleTpl" class="alain-pro__menu-item"
+ [class.text-white]="pro.theme === 'dark' && l1._selected" [nzOpen]="l1._open" [nzDisabled]="l1.disabled"
+ (nzOpenChange)="openChange(l1, $event)">
+
+
+
+
+
+ -
+
+
+ - 0" nz-submenu [nzTitle]="l2.text!" [nzOpen]="l2._open"
+ [nzDisabled]="l2.disabled" (nzOpenChange)="openChange(l2, $event)">
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/app/layout/pro/components/menu/menu.component.ts b/src/app/layout/pro/components/menu/menu.component.ts
new file mode 100644
index 00000000..a478429f
--- /dev/null
+++ b/src/app/layout/pro/components/menu/menu.component.ts
@@ -0,0 +1,124 @@
+import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnDestroy, OnInit } from '@angular/core';
+import { NavigationEnd, Router } from '@angular/router';
+import { MenuService } from '@delon/theme';
+import { InputBoolean } from '@delon/util';
+import { NzMenuModeType } from 'ng-zorro-antd/menu';
+import { Subject } from 'rxjs';
+import { filter, takeUntil } from 'rxjs/operators';
+
+import { BrandService } from '../../pro.service';
+import { ProMenu } from '../../pro.types';
+
+@Component({
+ selector: '[layout-pro-menu]',
+ templateUrl: './menu.component.html',
+ host: {
+ '[class.alain-pro__menu]': 'true',
+ '[class.alain-pro__menu-only-icon]': 'pro.onlyIcon'
+ },
+ changeDetection: ChangeDetectionStrategy.OnPush
+})
+export class LayoutProMenuComponent implements OnInit, OnDestroy {
+ private unsubscribe$ = new Subject();
+ menus?: ProMenu[];
+
+ @Input() @InputBoolean() disabledAcl = false;
+ @Input() mode: NzMenuModeType = 'inline';
+
+ constructor(private menuSrv: MenuService, private router: Router, public pro: BrandService, private cdr: ChangeDetectorRef) {}
+
+ private cd(): void {
+ this.cdr.markForCheck();
+ }
+
+ private genMenus(data: ProMenu[]): void {
+ const res: ProMenu[] = [];
+ // ingores category menus
+ const ingoreCategores = data.reduce((prev, cur) => prev.concat(cur.children as ProMenu[]), [] as ProMenu[]);
+ this.menuSrv.visit(ingoreCategores, (item: ProMenu, parent: ProMenu | null) => {
+ if (!item._aclResult) {
+ if (this.disabledAcl) {
+ item.disabled = true;
+ } else {
+ item._hidden = true;
+ }
+ }
+ if (item._hidden === true) {
+ return;
+ }
+ if (parent === null) {
+ res.push(item);
+ }
+ });
+ this.menus = res;
+ this.openStatus();
+ }
+
+ private openStatus(): void {
+ const inFn = (list: ProMenu[]) => {
+ for (const i of list) {
+ i._open = false;
+ i._selected = false;
+ if (i.children!.length > 0) {
+ inFn(i.children!);
+ }
+ }
+ };
+ inFn(this.menus!);
+
+ let item = this.menuSrv.getHit(this.menus!, this.router.url, true);
+ if (!item) {
+ this.cd();
+ return;
+ }
+ do {
+ item._selected = true;
+ if (!this.pro.isTopMenu && !this.pro.collapsed) {
+ item._open = true;
+ }
+ item = item._parent!;
+ } while (item);
+ this.cd();
+ }
+
+ openChange(item: ProMenu, statue: boolean): void {
+ const data = item._parent ? item._parent.children : this.menus;
+ if (data && data.length <= 1) {
+ return;
+ }
+ data!.forEach(i => (i._open = false));
+ item._open = statue;
+ }
+
+ closeCollapsed(): void {
+ const { pro } = this;
+ if (pro.isMobile) {
+ setTimeout(() => pro.setCollapsed(true), 25);
+ }
+ }
+
+ ngOnInit(): void {
+ const { unsubscribe$, router, pro } = this;
+ this.menuSrv.change.pipe(takeUntil(unsubscribe$)).subscribe(res => this.genMenus(res));
+
+ router.events
+ .pipe(
+ takeUntil(unsubscribe$),
+ filter(e => e instanceof NavigationEnd)
+ )
+ .subscribe(() => this.openStatus());
+
+ pro.notify
+ .pipe(
+ takeUntil(unsubscribe$),
+ filter(() => !!this.menus)
+ )
+ .subscribe(() => this.cd());
+ }
+
+ ngOnDestroy(): void {
+ const { unsubscribe$ } = this;
+ unsubscribe$.next();
+ unsubscribe$.complete();
+ }
+}
diff --git a/src/app/layout/pro/components/notify/notify.component.html b/src/app/layout/pro/components/notify/notify.component.html
new file mode 100644
index 00000000..ddd01574
--- /dev/null
+++ b/src/app/layout/pro/components/notify/notify.component.html
@@ -0,0 +1,4 @@
+
+
+
diff --git a/src/app/layout/pro/components/notify/notify.component.ts b/src/app/layout/pro/components/notify/notify.component.ts
new file mode 100644
index 00000000..afa6b61b
--- /dev/null
+++ b/src/app/layout/pro/components/notify/notify.component.ts
@@ -0,0 +1,183 @@
+import { ChangeDetectionStrategy, ChangeDetectorRef, Component } from '@angular/core';
+import { NoticeIconList, NoticeItem } from '@delon/abc/notice-icon';
+import formatDistanceToNow from 'date-fns/formatDistanceToNow';
+import parse from 'date-fns/parse';
+import { NzSafeAny } from 'ng-zorro-antd/core/types';
+import { NzMessageService } from 'ng-zorro-antd/message';
+
+@Component({
+ selector: 'layout-pro-notify',
+ templateUrl: './notify.component.html',
+ changeDetection: ChangeDetectionStrategy.OnPush
+})
+export class LayoutProWidgetNotifyComponent {
+ data: NoticeItem[] = [
+ {
+ title: '通知',
+ list: [],
+ emptyText: '你已查看所有通知',
+ emptyImage: 'https://gw.alipayobjects.com/zos/rmsportal/wAhyIChODzsoKIOBHcBk.svg',
+ clearText: '清空通知'
+ },
+ {
+ title: '消息',
+ list: [],
+ emptyText: '您已读完所有消息',
+ emptyImage: 'https://gw.alipayobjects.com/zos/rmsportal/sAuJeJzSKbUmHfBQRzmZ.svg',
+ clearText: '清空消息'
+ },
+ {
+ title: '待办',
+ list: [],
+ emptyText: '你已完成所有待办',
+ emptyImage: 'https://gw.alipayobjects.com/zos/rmsportal/HsIsxMZiWKrNUavQUXqx.svg',
+ clearText: '清空待办'
+ }
+ ];
+ count = 5;
+ loading = false;
+
+ constructor(private msg: NzMessageService, private cdr: ChangeDetectorRef) {}
+
+ updateNoticeData(notices: NoticeIconList[]): NoticeItem[] {
+ const data = this.data.slice();
+ data.forEach(i => (i.list = []));
+
+ notices.forEach(item => {
+ const newItem = { ...item };
+ if (typeof newItem.datetime === 'string') {
+ newItem.datetime = parse(newItem.datetime, 'yyyy-MM-dd', new Date());
+ }
+ if (newItem.datetime) {
+ newItem.datetime = formatDistanceToNow(newItem.datetime as Date);
+ }
+ if (newItem.extra && newItem.status) {
+ newItem.color = (
+ {
+ todo: undefined,
+ processing: 'blue',
+ urgent: 'red',
+ doing: 'gold'
+ } as NzSafeAny
+ )[newItem.status];
+ }
+ data.find(w => w.title === newItem.type)?.list.push(newItem);
+ });
+ return data;
+ }
+
+ loadData(): void {
+ if (this.loading) {
+ return;
+ }
+ this.loading = true;
+ setTimeout(() => {
+ this.data = this.updateNoticeData([
+ {
+ id: '000000001',
+ avatar: 'https://gw.alipayobjects.com/zos/rmsportal/ThXAXghbEsBCCSDihZxY.png',
+ title: '你收到了 14 份新周报',
+ datetime: '2017-08-09',
+ type: '通知'
+ },
+ {
+ id: '000000002',
+ avatar: 'https://gw.alipayobjects.com/zos/rmsportal/OKJXDXrmkNshAMvwtvhu.png',
+ title: '你推荐的 曲妮妮 已通过第三轮面试',
+ datetime: '2017-08-08',
+ type: '通知'
+ },
+ {
+ id: '000000003',
+ avatar: 'https://gw.alipayobjects.com/zos/rmsportal/kISTdvpyTAhtGxpovNWd.png',
+ title: '这种模板可以区分多种通知类型',
+ datetime: '2017-08-07',
+ read: true,
+ type: '通知'
+ },
+ {
+ id: '000000004',
+ avatar: 'https://gw.alipayobjects.com/zos/rmsportal/GvqBnKhFgObvnSGkDsje.png',
+ title: '左侧图标用于区分不同的类型',
+ datetime: '2017-08-07',
+ type: '通知'
+ },
+ {
+ id: '000000005',
+ avatar: 'https://gw.alipayobjects.com/zos/rmsportal/ThXAXghbEsBCCSDihZxY.png',
+ title: '内容不要超过两行字,超出时自动截断',
+ datetime: '2017-08-07',
+ type: '通知'
+ },
+ {
+ id: '000000006',
+ avatar: 'https://gw.alipayobjects.com/zos/rmsportal/fcHMVNCjPOsbUGdEduuv.jpeg',
+ title: '曲丽丽 评论了你',
+ description: '描述信息描述信息描述信息',
+ datetime: '2017-08-07',
+ type: '消息'
+ },
+ {
+ id: '000000007',
+ avatar: 'https://gw.alipayobjects.com/zos/rmsportal/fcHMVNCjPOsbUGdEduuv.jpeg',
+ title: '朱偏右 回复了你',
+ description: '这种模板用于提醒谁与你发生了互动,左侧放『谁』的头像',
+ datetime: '2017-08-07',
+ type: '消息'
+ },
+ {
+ id: '000000008',
+ avatar: 'https://gw.alipayobjects.com/zos/rmsportal/fcHMVNCjPOsbUGdEduuv.jpeg',
+ title: '标题',
+ description: '这种模板用于提醒谁与你发生了互动,左侧放『谁』的头像',
+ datetime: '2017-08-07',
+ type: '消息'
+ },
+ {
+ id: '000000009',
+ title: '任务名称',
+ description: '任务需要在 2017-01-12 20:00 前启动',
+ extra: '未开始',
+ status: 'todo',
+ type: '待办'
+ },
+ {
+ id: '000000010',
+ title: '第三方紧急代码变更',
+ description: '冠霖提交于 2017-01-06,需在 2017-01-07 前完成代码变更任务',
+ extra: '马上到期',
+ status: 'urgent',
+ type: '待办'
+ },
+ {
+ id: '000000011',
+ title: '信息安全考试',
+ description: '指派竹尔于 2017-01-09 前完成更新并发布',
+ extra: '已耗时 8 天',
+ status: 'doing',
+ type: '待办'
+ },
+ {
+ id: '000000012',
+ title: 'ABCD 版本发布',
+ description: '冠霖提交于 2017-01-06,需在 2017-01-07 前完成代码变更任务',
+ extra: '进行中',
+ status: 'processing',
+ type: '待办'
+ }
+ ]);
+
+ this.loading = false;
+
+ this.cdr.detectChanges();
+ }, 1000);
+ }
+
+ clear(type: string): void {
+ this.msg.success(`清空了 ${type}`);
+ }
+
+ select(res: any): void {
+ this.msg.success(`点击了 ${res.title} 的 ${res.item.title}`);
+ }
+}
diff --git a/src/app/layout/pro/components/quick-chat/quick-chat-status.component.html b/src/app/layout/pro/components/quick-chat/quick-chat-status.component.html
new file mode 100644
index 00000000..99ce05f6
--- /dev/null
+++ b/src/app/layout/pro/components/quick-chat/quick-chat-status.component.html
@@ -0,0 +1,4 @@
+
diff --git a/src/app/layout/pro/components/quick-chat/quick-chat-status.component.ts b/src/app/layout/pro/components/quick-chat/quick-chat-status.component.ts
new file mode 100644
index 00000000..a8650c81
--- /dev/null
+++ b/src/app/layout/pro/components/quick-chat/quick-chat-status.component.ts
@@ -0,0 +1,42 @@
+import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';
+import { Subscription } from 'rxjs';
+
+import { LayoutProWidgetQuickChatService } from './quick-chat.service';
+
+@Component({
+ selector: 'quick-chat-status',
+ templateUrl: './quick-chat-status.component.html',
+ changeDetection: ChangeDetectionStrategy.OnPush
+})
+export class LayoutProWidgetQuickChatStatusComponent implements OnInit, OnDestroy {
+ private status$!: Subscription;
+
+ status = 'default';
+
+ constructor(private srv: LayoutProWidgetQuickChatService, private cdr: ChangeDetectorRef) {}
+
+ show(): void {
+ if (this.srv.showDialog) {
+ return;
+ }
+ this.srv.showDialog = true;
+ }
+
+ ngOnInit(): void {
+ this.status$ = this.srv.status.subscribe(res => {
+ switch (res) {
+ case 'online':
+ this.status = 'success';
+ break;
+ default:
+ this.status = 'default';
+ break;
+ }
+ this.cdr.detectChanges();
+ });
+ }
+
+ ngOnDestroy(): void {
+ this.status$.unsubscribe();
+ }
+}
diff --git a/src/app/layout/pro/components/quick-chat/quick-chat.component.html b/src/app/layout/pro/components/quick-chat/quick-chat.component.html
new file mode 100644
index 00000000..21ec6d85
--- /dev/null
+++ b/src/app/layout/pro/components/quick-chat/quick-chat.component.html
@@ -0,0 +1,47 @@
+
+
+
+ {{ !collapsed && inited ? 'Connecting...' : 'Ng Alain Pro' }}
+
+
+
+
+
+
+
+
+
diff --git a/src/app/layout/pro/components/quick-chat/quick-chat.component.ts b/src/app/layout/pro/components/quick-chat/quick-chat.component.ts
new file mode 100644
index 00000000..db7379d6
--- /dev/null
+++ b/src/app/layout/pro/components/quick-chat/quick-chat.component.ts
@@ -0,0 +1,131 @@
+import {
+ ChangeDetectionStrategy,
+ ChangeDetectorRef,
+ Component,
+ EventEmitter,
+ HostBinding,
+ Input,
+ OnDestroy,
+ OnInit,
+ Output,
+ ViewChild
+} from '@angular/core';
+import { BooleanInput, InputBoolean, InputNumber, NumberInput } from '@delon/util';
+import { ScrollbarDirective } from '@shared';
+import { Subject } from 'rxjs';
+import { takeUntil } from 'rxjs/operators';
+
+import { LayoutProWidgetQuickChatService } from './quick-chat.service';
+
+@Component({
+ selector: 'quick-chat',
+ templateUrl: './quick-chat.component.html',
+ host: {
+ '[class.quick-chat]': 'true',
+ '[class.quick-chat__collapsed]': 'collapsed',
+ '[class.d-none]': '!showDialog'
+ },
+ changeDetection: ChangeDetectionStrategy.OnPush
+})
+export class LayoutProWidgetQuickChatComponent implements OnInit, OnDestroy {
+ static ngAcceptInputType_height: NumberInput;
+ static ngAcceptInputType_width: BooleanInput;
+ static ngAcceptInputType_collapsed: BooleanInput;
+
+ private unsubscribe$ = new Subject();
+ messages: any[] = [
+ { type: 'only-text', msg: '2018-12-12' },
+ {
+ type: 'text',
+ dir: 'left',
+ mp: './assets/logo-color.svg',
+ msg: '请一句话描述您的问题,我们来帮您解决并转到合适的人工服务。😎'
+ }
+ ];
+ text = '';
+ inited?: boolean;
+ hasMessage = false;
+
+ @ViewChild('messageScrollbar', { static: true }) messageScrollbar?: ScrollbarDirective;
+
+ // #region fileds
+ @Input() @InputNumber() height = 380;
+ @Input() @InputNumber() @HostBinding('style.width.px') width = 320;
+ @Input() @InputBoolean() collapsed = true;
+ @Output() readonly collapsedChange = new EventEmitter();
+ @Output() readonly closed = new EventEmitter();
+ // #endregion
+
+ constructor(private srv: LayoutProWidgetQuickChatService, private cdr: ChangeDetectorRef) {}
+
+ get showDialog(): boolean {
+ return this.srv.showDialog;
+ }
+
+ private scrollToBottom(): void {
+ this.cdr.detectChanges();
+ setTimeout(() => this.messageScrollbar!.scrollToBottom());
+ }
+
+ toggleCollapsed(): void {
+ this.hasMessage = false;
+ this.collapsed = !this.collapsed;
+ this.collapsedChange.emit(this.collapsed);
+ }
+
+ close(): void {
+ this.srv.close();
+ this.closed.emit(true);
+ }
+
+ enterSend(e: Event): void {
+ if ((e as KeyboardEvent).keyCode !== 13) {
+ return;
+ }
+ if (e) {
+ e.preventDefault();
+ e.stopPropagation();
+ }
+ this.send();
+ }
+
+ send(): boolean {
+ if (!this.text) {
+ return false;
+ }
+
+ if (typeof this.inited === 'undefined') {
+ this.inited = true;
+ }
+ const item = {
+ type: 'text',
+ msg: this.text,
+ dir: 'right'
+ };
+ this.srv.send(item);
+ this.messages.push(item);
+ this.text = '';
+ this.scrollToBottom();
+ return false;
+ }
+
+ ngOnInit(): void {
+ const { srv, messages, unsubscribe$ } = this;
+ srv.message.pipe(takeUntil(unsubscribe$)).subscribe(res => {
+ if (this.collapsed) {
+ this.hasMessage = true;
+ }
+ messages.push(res);
+ this.scrollToBottom();
+ });
+ srv.status.pipe(takeUntil(unsubscribe$)).subscribe(res => {
+ this.inited = res === 'online' ? false : undefined;
+ });
+ }
+
+ ngOnDestroy(): void {
+ const { unsubscribe$ } = this;
+ unsubscribe$.next();
+ unsubscribe$.complete();
+ }
+}
diff --git a/src/app/layout/pro/components/quick-chat/quick-chat.service.ts b/src/app/layout/pro/components/quick-chat/quick-chat.service.ts
new file mode 100644
index 00000000..f688b1f3
--- /dev/null
+++ b/src/app/layout/pro/components/quick-chat/quick-chat.service.ts
@@ -0,0 +1,80 @@
+import { Injectable, OnDestroy } from '@angular/core';
+import { Observable, Subject, Subscription } from 'rxjs';
+import { webSocket, WebSocketSubject } from 'rxjs/webSocket';
+
+export type QuickChatStatus = 'online' | 'offline';
+
+@Injectable({ providedIn: 'root' })
+export class LayoutProWidgetQuickChatService implements OnDestroy {
+ private url = 'wss://echo.websocket.org/?encoding=text';
+ private _ws!: WebSocketSubject<{}>;
+ private $statusOrg = new Subject();
+ private messageOrg$: Subscription | null = null;
+ private $status = new Subject();
+ private $message = new Subject<{}>();
+ showDialog = true;
+
+ constructor() {
+ this.$statusOrg.subscribe((res: any) => {
+ this.$status.next(res.type === 'open' ? 'online' : 'offline');
+ });
+ }
+
+ get ws(): WebSocketSubject<{}> {
+ return this._ws!;
+ }
+
+ get message(): Observable<{}> {
+ return this.$message.asObservable();
+ }
+
+ get status(): Observable {
+ return this.$status.asObservable();
+ }
+
+ open(): WebSocketSubject<{}> {
+ if (this._ws) {
+ return this._ws;
+ }
+
+ this._ws = webSocket({
+ url: this.url,
+ serializer: (value: any) => JSON.stringify(value),
+ deserializer: (e: MessageEvent) => {
+ const res = JSON.parse(e.data);
+ res.dir = 'left';
+ res.mp = './assets/logo-color.svg';
+ return res;
+ },
+ openObserver: this.$statusOrg,
+ closeObserver: this.$statusOrg
+ });
+ return this._ws;
+ }
+
+ close(): void {
+ this.showDialog = false;
+ if (this.messageOrg$) {
+ this.messageOrg$.unsubscribe();
+ this.messageOrg$ = null;
+ }
+ }
+
+ send(msg: {}): void {
+ if (!this._ws) {
+ this.open();
+ }
+ if (!this.messageOrg$) {
+ this.messageOrg$ = this._ws.subscribe(res => this.$message.next(res));
+ }
+ this._ws.next(msg);
+ }
+
+ ngOnDestroy(): void {
+ const { $statusOrg, $status, $message } = this;
+ this.close();
+ $statusOrg.complete();
+ $status.complete();
+ $message.complete();
+ }
+}
diff --git a/src/app/layout/pro/components/quick/quick-panel.component.html b/src/app/layout/pro/components/quick/quick-panel.component.html
new file mode 100644
index 00000000..e4d776d1
--- /dev/null
+++ b/src/app/layout/pro/components/quick/quick-panel.component.html
@@ -0,0 +1,87 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
{{ i.time }}
+
+
{{ i.tags }}
+
+
+
+
+
+
{{ i.title }}
+
{{ i.content }}
+
+
+
+
+
+
+
+
+
+ - Item1
+ - Item2
+
+ - Item3
+
+
+
+
+
+ Notifications
+
+ Enable notifications:
+
+
+
+ Enable audit log:
+
+
+
+ Notify on new orders:
+
+
+ Orders
+
+ Enable order tracking:
+
+
+
+ Enable orders reports:
+
+
+ Customers
+
+ Enable customer singup:
+
+
+
+ Enable customers reporting:
+
+
+ Other
+
+ Weak Mode:
+
+
+
+
+
diff --git a/src/app/layout/pro/components/quick/quick-panel.component.ts b/src/app/layout/pro/components/quick/quick-panel.component.ts
new file mode 100644
index 00000000..0dfb458c
--- /dev/null
+++ b/src/app/layout/pro/components/quick/quick-panel.component.ts
@@ -0,0 +1,42 @@
+import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnInit } from '@angular/core';
+import { _HttpClient } from '@delon/theme';
+import { NzMessageService } from 'ng-zorro-antd/message';
+
+import { BrandService } from '../../pro.service';
+import { ProLayout } from '../../pro.types';
+
+@Component({
+ selector: 'layout-pro-quick-panel',
+ templateUrl: './quick-panel.component.html',
+ changeDetection: ChangeDetectionStrategy.OnPush
+})
+export class LayoutProWidgetQuickPanelComponent implements OnInit {
+ type = 0;
+ data: any;
+ get layout(): ProLayout {
+ return this.pro.layout;
+ }
+
+ constructor(private pro: BrandService, private http: _HttpClient, private cd: ChangeDetectorRef, public msg: NzMessageService) {}
+
+ ngOnInit(): void {
+ this.http.get('/quick').subscribe(res => {
+ this.data = res;
+ this.changeType(0);
+ });
+ }
+
+ changeType(type: number): void {
+ this.type = type;
+ // wait checkbox & switch render
+ setTimeout(() => this.cd.detectChanges());
+ }
+
+ updateSetting(_type: string, _value: any): void {
+ this.msg.success('Success!');
+ }
+
+ setLayout(name: string, value: any): void {
+ this.pro.setLayout(name, value);
+ }
+}
diff --git a/src/app/layout/pro/components/quick/quick.component.html b/src/app/layout/pro/components/quick/quick.component.html
new file mode 100644
index 00000000..ba912ab8
--- /dev/null
+++ b/src/app/layout/pro/components/quick/quick.component.html
@@ -0,0 +1 @@
+
diff --git a/src/app/layout/pro/components/quick/quick.component.ts b/src/app/layout/pro/components/quick/quick.component.ts
new file mode 100644
index 00000000..a38f1267
--- /dev/null
+++ b/src/app/layout/pro/components/quick/quick.component.ts
@@ -0,0 +1,51 @@
+import { Direction, Directionality } from '@angular/cdk/bidi';
+import { ChangeDetectionStrategy, Component, HostListener, OnDestroy, OnInit, Optional } from '@angular/core';
+import { DrawerHelper } from '@delon/theme';
+import { Subject } from 'rxjs';
+import { takeUntil } from 'rxjs/operators';
+
+import { LayoutProWidgetQuickPanelComponent } from './quick-panel.component';
+
+@Component({
+ selector: 'layout-pro-quick',
+ templateUrl: './quick.component.html',
+ host: {
+ '[class.alain-pro__header-item]': 'true'
+ },
+ changeDetection: ChangeDetectionStrategy.OnPush
+})
+export class LayoutProWidgetQuickComponent implements OnInit, OnDestroy {
+ private destroy$ = new Subject();
+ private dir: Direction = 'ltr';
+
+ constructor(private drawerHelper: DrawerHelper, @Optional() private directionality: Directionality) {}
+
+ @HostListener('click')
+ show(): void {
+ this.drawerHelper
+ .create(``, LayoutProWidgetQuickPanelComponent, null, {
+ size: 480,
+ drawerOptions: {
+ nzTitle: undefined,
+ nzPlacement: this.dir === 'rtl' ? 'left' : 'right',
+ nzBodyStyle: {
+ 'min-height': '100%',
+ padding: 0
+ }
+ }
+ })
+ .subscribe();
+ }
+
+ ngOnInit(): void {
+ this.dir = this.directionality.value;
+ this.directionality.change?.pipe(takeUntil(this.destroy$)).subscribe((direction: Direction) => {
+ this.dir = direction;
+ });
+ }
+
+ ngOnDestroy(): void {
+ this.destroy$.next();
+ this.destroy$.complete();
+ }
+}
diff --git a/src/app/layout/pro/components/rtl/rtl.component.ts b/src/app/layout/pro/components/rtl/rtl.component.ts
new file mode 100644
index 00000000..3b92db96
--- /dev/null
+++ b/src/app/layout/pro/components/rtl/rtl.component.ts
@@ -0,0 +1,23 @@
+import { ChangeDetectionStrategy, Component, HostListener } from '@angular/core';
+import { RTLService } from '@delon/theme';
+
+@Component({
+ selector: 'layout-pro-rtl',
+ template: `
+
+ `,
+ host: {
+ '[class.alain-pro__header-item]': 'true'
+ },
+ changeDetection: ChangeDetectionStrategy.OnPush
+})
+export class LayoutProWidgetRTLComponent {
+ constructor(public rtl: RTLService) {}
+
+ @HostListener('click')
+ toggleDirection(): void {
+ this.rtl.toggle();
+ }
+}
diff --git a/src/app/layout/pro/components/search/search.component.html b/src/app/layout/pro/components/search/search.component.html
new file mode 100644
index 00000000..b16ed7ca
--- /dev/null
+++ b/src/app/layout/pro/components/search/search.component.html
@@ -0,0 +1,9 @@
+
+
+
+
+ {{ item.no }}
+
+
diff --git a/src/app/layout/pro/components/search/search.component.ts b/src/app/layout/pro/components/search/search.component.ts
new file mode 100644
index 00000000..6f028f3d
--- /dev/null
+++ b/src/app/layout/pro/components/search/search.component.ts
@@ -0,0 +1,49 @@
+import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, HostListener, OnDestroy, ViewChild } from '@angular/core';
+import { _HttpClient } from '@delon/theme';
+import { Subject } from 'rxjs';
+import { debounceTime, distinctUntilChanged, switchMap } from 'rxjs/operators';
+
+@Component({
+ selector: 'layout-pro-search',
+ templateUrl: 'search.component.html',
+ host: {
+ '[class.alain-pro__header-item]': 'true',
+ '[class.alain-pro__header-search]': 'true',
+ '[class.alain-pro__header-search-show]': 'show'
+ },
+ changeDetection: ChangeDetectionStrategy.OnPush
+})
+export class LayoutProWidgetSearchComponent implements OnDestroy {
+ @ViewChild('ipt', { static: true }) private ipt!: ElementRef;
+ show = false;
+ q = '';
+ search$ = new Subject();
+ list: any[] = [];
+
+ constructor(http: _HttpClient, cdr: ChangeDetectorRef) {
+ this.search$
+ .pipe(
+ debounceTime(300),
+ distinctUntilChanged(),
+ switchMap((q: string) => http.get('/user', { no: q, pi: 1, ps: 5 }))
+ )
+ .subscribe((res: any) => {
+ this.list = res.list;
+ cdr.detectChanges();
+ });
+ }
+
+ onSearch(): void {
+ this.search$.next(this.ipt.nativeElement.value);
+ }
+
+ @HostListener('click')
+ _click(): void {
+ this.ipt.nativeElement.focus();
+ this.show = true;
+ }
+
+ ngOnDestroy(): void {
+ this.search$.unsubscribe();
+ }
+}
diff --git a/src/app/layout/pro/components/user/user.component.html b/src/app/layout/pro/components/user/user.component.html
new file mode 100644
index 00000000..6d615e26
--- /dev/null
+++ b/src/app/layout/pro/components/user/user.component.html
@@ -0,0 +1,25 @@
+
+
+
+
+
+ 个人中心
+
+
+
+
+
+ 退出登录
+
+
+
\ No newline at end of file
diff --git a/src/app/layout/pro/components/user/user.component.ts b/src/app/layout/pro/components/user/user.component.ts
new file mode 100644
index 00000000..9068909a
--- /dev/null
+++ b/src/app/layout/pro/components/user/user.component.ts
@@ -0,0 +1,29 @@
+import { ChangeDetectionStrategy, Component, Inject, OnInit } from '@angular/core';
+import { Router } from '@angular/router';
+import { DA_SERVICE_TOKEN, ITokenService } from '@delon/auth';
+import { SettingsService } from '@delon/theme';
+
+@Component({
+ selector: 'layout-pro-user',
+ templateUrl: 'user.component.html',
+ changeDetection: ChangeDetectionStrategy.OnPush
+})
+export class LayoutProWidgetUserComponent implements OnInit {
+ constructor(public settings: SettingsService, private router: Router, @Inject(DA_SERVICE_TOKEN) private tokenService: ITokenService) {}
+
+ ngOnInit(): void {
+ // mock
+ const token = this.tokenService.get() || {
+ token: 'nothing',
+ name: 'Admin',
+ avatar: './assets/logo-color.svg',
+ email: 'cipchk@qq.com'
+ };
+ this.tokenService.set(token);
+ }
+
+ logout(): void {
+ this.tokenService.clear();
+ this.router.navigateByUrl(this.tokenService.login_url!);
+ }
+}
diff --git a/src/app/layout/pro/components/widget/widget.component.html b/src/app/layout/pro/components/widget/widget.component.html
new file mode 100644
index 00000000..cd3cb9c9
--- /dev/null
+++ b/src/app/layout/pro/components/widget/widget.component.html
@@ -0,0 +1,24 @@
+客服电话:0755-88393483
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/app/layout/pro/components/widget/widget.component.ts b/src/app/layout/pro/components/widget/widget.component.ts
new file mode 100644
index 00000000..b054f454
--- /dev/null
+++ b/src/app/layout/pro/components/widget/widget.component.ts
@@ -0,0 +1,20 @@
+import { ChangeDetectionStrategy, Component, Inject } from '@angular/core';
+import { Router } from '@angular/router';
+import { DA_SERVICE_TOKEN, ITokenService } from '@delon/auth';
+
+@Component({
+ selector: '[layout-pro-header-widget]',
+ templateUrl: './widget.component.html',
+ host: {
+ '[class.alain-pro__header-right]': 'true'
+ },
+ changeDetection: ChangeDetectionStrategy.OnPush
+})
+export class LayoutProHeaderWidgetComponent {
+ constructor(private router: Router, @Inject(DA_SERVICE_TOKEN) private tokenService: ITokenService) {}
+
+ logout(): void {
+ this.tokenService.clear();
+ this.router.navigateByUrl(this.tokenService.login_url!);
+ }
+}
diff --git a/src/app/layout/pro/index.md b/src/app/layout/pro/index.md
new file mode 100644
index 00000000..764e496b
--- /dev/null
+++ b/src/app/layout/pro/index.md
@@ -0,0 +1 @@
+[Document](https://e.ng-alain.com/theme/pro)
diff --git a/src/app/layout/pro/index.ts b/src/app/layout/pro/index.ts
new file mode 100644
index 00000000..77f8ba7f
--- /dev/null
+++ b/src/app/layout/pro/index.ts
@@ -0,0 +1,67 @@
+/* eslint-disable import/order */
+// #region exports
+
+export * from './pro.types';
+export * from './pro.service';
+export * from './pro.component';
+
+// #endregion
+
+// #region widgets
+
+import { LayoutProFooterComponent } from './components/footer/footer.component';
+import { LayoutProHeaderComponent } from './components/header/header.component';
+import { LayoutProLogoComponent } from './components/logo/logo.component';
+import { LayoutProMenuComponent } from './components/menu/menu.component';
+import { LayoutProWidgetNotifyComponent } from './components/notify/notify.component';
+import { LayoutProWidgetQuickChatStatusComponent } from './components/quick-chat/quick-chat-status.component';
+import { LayoutProWidgetQuickChatComponent } from './components/quick-chat/quick-chat.component';
+import { LayoutProWidgetQuickComponent } from './components/quick/quick.component';
+import { LayoutProWidgetRTLComponent } from './components/rtl/rtl.component';
+import { LayoutProWidgetSearchComponent } from './components/search/search.component';
+import { LayoutProWidgetUserComponent } from './components/user/user.component';
+import { LayoutProHeaderWidgetComponent } from './components/widget/widget.component';
+import { LayoutProWidgetQuickPanelComponent } from './components/quick/quick-panel.component';
+import { ProSettingDrawerComponent } from './setting-drawer/setting-drawer.component';
+
+const PRO_WIDGETS = [
+ LayoutProHeaderWidgetComponent,
+ LayoutProWidgetNotifyComponent,
+ LayoutProWidgetSearchComponent,
+ LayoutProWidgetUserComponent,
+ LayoutProWidgetQuickComponent,
+ LayoutProWidgetQuickChatComponent,
+ LayoutProWidgetQuickChatStatusComponent,
+ LayoutProWidgetRTLComponent
+];
+
+// #endregion
+
+// #region entry components
+
+// #endregion
+
+// #region components
+
+import { LayoutProComponent } from './pro.component';
+
+export const PRO_COMPONENTS: Array> = [
+ LayoutProComponent,
+ LayoutProMenuComponent,
+ LayoutProLogoComponent,
+ LayoutProHeaderComponent,
+ LayoutProFooterComponent,
+ LayoutProWidgetQuickPanelComponent,
+ ProSettingDrawerComponent,
+ ...PRO_WIDGETS
+];
+
+// #endregion
+
+// #region shared components
+
+import { ProPageModule } from './shared/page';
+import { Type } from '@angular/core';
+export const PRO_SHARED_MODULES = [ProPageModule];
+
+// #endregion
diff --git a/src/app/layout/pro/pro.component.html b/src/app/layout/pro/pro.component.html
new file mode 100644
index 00000000..94c8c60b
--- /dev/null
+++ b/src/app/layout/pro/pro.component.html
@@ -0,0 +1,40 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/app/layout/pro/pro.component.ts b/src/app/layout/pro/pro.component.ts
new file mode 100644
index 00000000..983b2377
--- /dev/null
+++ b/src/app/layout/pro/pro.component.ts
@@ -0,0 +1,167 @@
+import { BreakpointObserver, MediaMatcher } from '@angular/cdk/layout';
+import { DOCUMENT } from '@angular/common';
+import {
+ AfterViewInit,
+ Component,
+ ComponentFactoryResolver,
+ Inject,
+ OnDestroy,
+ OnInit,
+ Renderer2,
+ ViewChild,
+ ViewContainerRef
+} from '@angular/core';
+import { NavigationEnd, NavigationError, RouteConfigLoadStart, Router } from '@angular/router';
+import { ReuseTabService } from '@delon/abc/reuse-tab';
+import { RTL, RTLService } from '@delon/theme';
+import { ScrollService, updateHostClass } from '@delon/util/browser';
+import { environment } from '@env/environment';
+import { NzMessageService } from 'ng-zorro-antd/message';
+import { Subject } from 'rxjs';
+import { takeUntil } from 'rxjs/operators';
+
+import { BrandService } from './pro.service';
+import { ProSettingDrawerComponent } from './setting-drawer/setting-drawer.component';
+
+@Component({
+ selector: 'layout-pro',
+ templateUrl: './pro.component.html'
+ // NOTICE: If all pages using OnPush mode, you can turn it on and all `cdr.detectChanges()` codes
+ // changeDetection: ChangeDetectionStrategy.OnPush
+})
+export class LayoutProComponent implements OnInit, AfterViewInit, OnDestroy {
+ private destroy$ = new Subject();
+ private queryCls?: string;
+ @ViewChild('settingHost', { read: ViewContainerRef, static: false }) private settingHost!: ViewContainerRef;
+
+ isFetching = false;
+
+ get isMobile(): boolean {
+ return this.pro.isMobile;
+ }
+
+ get getLayoutStyle(): { [key: string]: string } | null {
+ const { isMobile, fixSiderbar, collapsed, menu, width, widthInCollapsed } = this.pro;
+ if (fixSiderbar && menu !== 'top' && !isMobile) {
+ return {
+ [this.rtl.dir === RTL ? 'paddingRight' : 'paddingLeft']: `${collapsed ? widthInCollapsed : width}px`
+ };
+ }
+ return null;
+ }
+
+ get getContentStyle(): { [key: string]: string } {
+ const { fixedHeader, headerHeight } = this.pro;
+ return {
+ margin: '24px 24px 0',
+ 'padding-top': `${fixedHeader ? headerHeight : 0}px`
+ };
+ }
+
+ private get body(): HTMLElement {
+ return this.doc.body;
+ }
+
+ constructor(
+ bm: BreakpointObserver,
+ mediaMatcher: MediaMatcher,
+ router: Router,
+ msg: NzMessageService,
+ scroll: ScrollService,
+ reuseTabSrv: ReuseTabService,
+ private resolver: ComponentFactoryResolver,
+ private renderer: Renderer2,
+ public pro: BrandService,
+ @Inject(DOCUMENT) private doc: any,
+ // private cdr: ChangeDetectorRef
+ private rtl: RTLService
+ ) {
+ // scroll to top in change page
+ router.events.pipe(takeUntil(this.destroy$)).subscribe(evt => {
+ if (!this.isFetching && evt instanceof RouteConfigLoadStart) {
+ this.isFetching = true;
+ scroll.scrollToTop();
+ }
+ if (evt instanceof NavigationError) {
+ this.isFetching = false;
+ msg.error(`无法加载${evt.url}路由`, { nzDuration: 1000 * 3 });
+ return;
+ }
+ if (!(evt instanceof NavigationEnd)) {
+ return;
+ }
+ this.isFetching = false;
+ // If have already cached router, should be don't need scroll to top
+ if (!reuseTabSrv.exists(evt.url)) {
+ scroll.scrollToTop();
+ }
+ });
+
+ // media
+ const query: { [key: string]: string } = {
+ 'screen-xs': '(max-width: 575px)',
+ 'screen-sm': '(min-width: 576px) and (max-width: 767px)',
+ 'screen-md': '(min-width: 768px) and (max-width: 991px)',
+ 'screen-lg': '(min-width: 992px) and (max-width: 1199px)',
+ 'screen-xl': '(min-width: 1200px)'
+ };
+ bm.observe([
+ '(min-width: 1200px)',
+ '(min-width: 992px) and (max-width: 1199px)',
+ '(min-width: 768px) and (max-width: 991px)',
+ '(min-width: 576px) and (max-width: 767px)',
+ '(max-width: 575px)'
+ ]).subscribe(() => {
+ this.queryCls = Object.keys(query).find(key => mediaMatcher.matchMedia(query[key]).matches);
+ this.setClass();
+ });
+ }
+
+ private setClass(): void {
+ const { body, renderer, queryCls, pro } = this;
+ updateHostClass(body, renderer, {
+ ['color-weak']: pro.layout.colorWeak,
+ [`layout-fixed`]: pro.layout.fixed,
+ [`aside-collapsed`]: pro.collapsed,
+ ['alain-pro']: true,
+ [queryCls!]: true,
+ [`alain-pro__content-${pro.layout.contentWidth}`]: true,
+ [`alain-pro__fixed`]: pro.layout.fixedHeader,
+ [`alain-pro__wide`]: pro.isFixed,
+ [`alain-pro__dark`]: pro.theme === 'dark',
+ [`alain-pro__light`]: pro.theme === 'light',
+ [`alain-pro__menu-side`]: pro.isSideMenu,
+ [`alain-pro__menu-top`]: pro.isTopMenu
+ });
+ }
+
+ ngAfterViewInit(): void {
+ // Setting componet for only developer
+ if (!environment.production) {
+ setTimeout(() => {
+ const settingFactory = this.resolver.resolveComponentFactory(ProSettingDrawerComponent);
+ this.settingHost.createComponent(settingFactory);
+ }, 22);
+ }
+ }
+
+ ngOnInit(): void {
+ const { pro, destroy$ } = this;
+ pro.notify.pipe(takeUntil(destroy$)).subscribe(() => {
+ this.setClass();
+ });
+ }
+
+ ngOnDestroy(): void {
+ const { destroy$, body, pro } = this;
+ destroy$.next();
+ destroy$.complete();
+ body.classList.remove(
+ `alain-pro__content-${pro.layout.contentWidth}`,
+ `alain-pro__fixed`,
+ `alain-pro__wide`,
+ `alain-pro__dark`,
+ `alain-pro__light`
+ );
+ }
+}
diff --git a/src/app/layout/pro/pro.service.ts b/src/app/layout/pro/pro.service.ts
new file mode 100644
index 00000000..ba597366
--- /dev/null
+++ b/src/app/layout/pro/pro.service.ts
@@ -0,0 +1,139 @@
+import { BreakpointObserver } from '@angular/cdk/layout';
+import { Injectable } from '@angular/core';
+import { Layout, SettingsService } from '@delon/theme';
+import { environment } from '@env/environment';
+import { BehaviorSubject, Observable } from 'rxjs';
+
+import { ProLayout, ProLayoutContentWidth, ProLayoutMenu, ProLayoutTheme } from './pro.types';
+
+@Injectable({ providedIn: 'root' })
+export class BrandService {
+ private notify$ = new BehaviorSubject(null);
+ private _isMobile = false;
+
+ // #region fields
+
+ get notify(): Observable {
+ return this.notify$.asObservable();
+ }
+
+ /**
+ * Specify width of the sidebar, If you change it, muse be synchronize change less parameter:
+ * ```less
+ * @alain-pro-sider-menu-width: 256px;
+ * ```
+ */
+ readonly width = 205;
+
+ /**
+ * Specify width of the sidebar after collapsed, If you change it, muse be synchronize change less parameter:
+ * ```less
+ * @menu-collapsed-width: 80px;
+ * ```
+ */
+ readonly widthInCollapsed = 80;
+
+ /**
+ * Specify height of the header, If you change it, muse be synchronize change less parameter:
+ * ```less
+ * @alain-pro-header-height: 64px;
+ * ```
+ */
+ readonly headerHeight = 64;
+
+ /**
+ * Specify distance from top for automatically hidden header
+ */
+ readonly autoHideHeaderTop = 300;
+
+ get isMobile(): boolean {
+ return this._isMobile;
+ }
+
+ get layout(): ProLayout {
+ return this.settings.layout as ProLayout;
+ }
+
+ get collapsed(): boolean {
+ return this.layout.collapsed;
+ }
+
+ get theme(): ProLayoutTheme {
+ return this.layout.theme;
+ }
+
+ get menu(): ProLayoutMenu {
+ return this.layout.menu;
+ }
+
+ get contentWidth(): ProLayoutContentWidth {
+ return this.layout.contentWidth;
+ }
+
+ get fixedHeader(): boolean {
+ return this.layout.fixedHeader;
+ }
+
+ get autoHideHeader(): boolean {
+ return this.layout.autoHideHeader;
+ }
+
+ get fixSiderbar(): boolean {
+ return this.layout.fixSiderbar;
+ }
+
+ get onlyIcon(): boolean {
+ return this.menu === 'side' ? false : this.layout.onlyIcon;
+ }
+
+ /** Whether the top menu */
+ get isTopMenu(): boolean {
+ return this.menu === 'top' && !this.isMobile;
+ }
+
+ /** Whether the side menu */
+ get isSideMenu(): boolean {
+ return this.menu === 'side' && !this.isMobile;
+ }
+
+ /** Whether the fixed content */
+ get isFixed(): boolean {
+ return this.contentWidth === 'fixed';
+ }
+
+ // #endregion
+
+ constructor(bm: BreakpointObserver, private settings: SettingsService) {
+ // fix layout data
+ settings.setLayout({
+ theme: 'dark',
+ menu: 'side',
+ contentWidth: 'fluid',
+ fixedHeader: false,
+ autoHideHeader: false,
+ fixSiderbar: false,
+ onlyIcon: true,
+ ...(environment as any).pro,
+ ...settings.layout // Browser cache
+ });
+
+ const mobileMedia = 'only screen and (max-width: 767.99px)';
+ bm.observe(mobileMedia).subscribe(state => this.checkMedia(state.matches));
+ this.checkMedia(bm.isMatched(mobileMedia));
+ }
+
+ private checkMedia(value: boolean): void {
+ this._isMobile = value;
+ this.layout.collapsed = this._isMobile;
+ this.notify$.next('mobile');
+ }
+
+ setLayout(name: string | Layout, value?: any): void {
+ this.settings.setLayout(name, value);
+ this.notify$.next('layout');
+ }
+
+ setCollapsed(status?: boolean): void {
+ this.setLayout('collapsed', typeof status !== 'undefined' ? status : !this.collapsed);
+ }
+}
diff --git a/src/app/layout/pro/pro.types.ts b/src/app/layout/pro/pro.types.ts
new file mode 100644
index 00000000..446a4e88
--- /dev/null
+++ b/src/app/layout/pro/pro.types.ts
@@ -0,0 +1,43 @@
+import { Layout, MenuInner } from '@delon/theme';
+
+export type ProLayoutTheme = 'light' | 'dark';
+export type ProLayoutMenu = 'side' | 'top';
+export type ProLayoutContentWidth = 'fluid' | 'fixed';
+
+export interface ProLayout extends Layout {
+ theme: ProLayoutTheme;
+ /**
+ * menu position
+ */
+ menu: ProLayoutMenu;
+ /**
+ * layout of content, only works when menu is top
+ */
+ contentWidth: ProLayoutContentWidth;
+ /**
+ * sticky header
+ */
+ fixedHeader: boolean;
+ /**
+ * auto hide header
+ */
+ autoHideHeader: boolean;
+ /**
+ * sticky siderbar
+ */
+ fixSiderbar: boolean;
+ /**
+ * Only icon of menu
+ * Limited to a temporary solution [#2183](https://github.com/NG-ZORRO/ng-zorro-antd/issues/2183)
+ */
+ onlyIcon: boolean;
+ /**
+ * Color weak
+ */
+ colorWeak: boolean;
+}
+
+export interface ProMenu extends MenuInner {
+ _parent?: ProMenu | null;
+ children?: ProMenu[];
+}
diff --git a/src/app/layout/pro/setting-drawer/setting-drawer.component.html b/src/app/layout/pro/setting-drawer/setting-drawer.component.html
new file mode 100644
index 00000000..000f9930
--- /dev/null
+++ b/src/app/layout/pro/setting-drawer/setting-drawer.component.html
@@ -0,0 +1,83 @@
+
+
+
+
整体风格设置
+
+
+

+
+
+
+
+
+
+
+
主题色
+
+
+
+
+
+
+
导航模式
+
+
+

+
+
+
+
+
+
+ 内容区域宽度
+
+
+
+
+
+
+ 固定 Header
+
+
+
+ 下滑时隐藏 Header
+
+
+
+ 固定侧边菜单
+
+
+
+ 只显示图标
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/app/layout/pro/setting-drawer/setting-drawer.component.ts b/src/app/layout/pro/setting-drawer/setting-drawer.component.ts
new file mode 100644
index 00000000..7423f040
--- /dev/null
+++ b/src/app/layout/pro/setting-drawer/setting-drawer.component.ts
@@ -0,0 +1,240 @@
+import { Direction, Directionality } from '@angular/cdk/bidi';
+import { DOCUMENT } from '@angular/common';
+import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Inject, NgZone, OnDestroy, OnInit, Optional } from '@angular/core';
+import { copy, LazyService } from '@delon/util';
+import { NzMessageService } from 'ng-zorro-antd/message';
+import { Subject } from 'rxjs';
+import { takeUntil } from 'rxjs/operators';
+
+import { BrandService } from '../pro.service';
+import { ProLayout } from '../pro.types';
+
+@Component({
+ selector: 'pro-setting-drawer',
+ templateUrl: './setting-drawer.component.html',
+ preserveWhitespaces: false,
+ host: {
+ '[class.setting-drawer]': 'true',
+ '[class.setting-drawer-rtl]': `dir === 'rtl'`
+ },
+ changeDetection: ChangeDetectionStrategy.OnPush
+})
+export class ProSettingDrawerComponent implements OnInit, OnDestroy {
+ private loadedLess = false;
+ private destroy$ = new Subject();
+
+ get layout(): ProLayout {
+ return this.brand.layout;
+ }
+
+ collapse = false;
+ dir: Direction = 'ltr';
+
+ themes = [
+ {
+ key: 'dark',
+ title: '暗色菜单风格',
+ img: 'https://gw.alipayobjects.com/zos/rmsportal/LCkqqYNmvBEbokSDscrm.svg'
+ },
+ {
+ key: 'light',
+ title: '亮色菜单风格',
+ img: 'https://gw.alipayobjects.com/zos/rmsportal/jpRkZQMyYRryryPNtyIC.svg'
+ }
+ ];
+
+ color = '#2F54EB';
+ colors = [
+ {
+ key: '薄暮',
+ color: '#F5222D'
+ },
+ {
+ key: '火山',
+ color: '#FA541C'
+ },
+ {
+ key: '日暮',
+ color: '#FAAD14'
+ },
+ {
+ key: '明青',
+ color: '#13C2C2'
+ },
+ {
+ key: '极光绿',
+ color: '#52C41A'
+ },
+ {
+ key: '拂晓蓝(默认)',
+ color: '#1890ff'
+ },
+ {
+ key: '极客蓝',
+ color: '#2F54EB'
+ },
+ {
+ key: '酱紫',
+ color: '#722ED1'
+ }
+ ];
+
+ menuModes = [
+ {
+ key: 'side',
+ title: '侧边菜单布局',
+ img: 'https://gw.alipayobjects.com/zos/rmsportal/JopDzEhOqwOjeNTXkoje.svg'
+ },
+ {
+ key: 'top',
+ title: '顶部菜单布局',
+ img: 'https://gw.alipayobjects.com/zos/rmsportal/KDNDBbriJhLwuqMoxcAr.svg'
+ }
+ ];
+
+ contentWidths = [
+ {
+ key: 'fixed',
+ title: '定宽',
+ disabled: false
+ },
+ {
+ key: 'fluid',
+ title: '流式',
+ disabled: false
+ }
+ ];
+
+ constructor(
+ public brand: BrandService,
+ private cdr: ChangeDetectorRef,
+ private msg: NzMessageService,
+ private lazy: LazyService,
+ private zone: NgZone,
+ @Inject(DOCUMENT) private doc: any,
+ @Optional() private directionality: Directionality
+ ) {
+ this.setLayout('menu', this.brand.menu, false);
+ }
+
+ ngOnInit(): void {
+ this.dir = this.directionality.value;
+ this.directionality.change?.pipe(takeUntil(this.destroy$)).subscribe((direction: Direction) => {
+ this.dir = direction;
+ this.cdr.detectChanges();
+ });
+ }
+
+ ngOnDestroy(): void {
+ this.destroy$.next();
+ this.destroy$.complete();
+ }
+
+ private loadLess(): Promise {
+ if (this.loadedLess) {
+ return Promise.resolve();
+ }
+ return this.lazy
+ .loadStyle('./assets/color.less', 'stylesheet/less')
+ .then(() => {
+ const lessConfigNode = this.doc.createElement('script');
+ lessConfigNode.innerHTML = `
+ window.less = {
+ async: true,
+ env: 'production',
+ javascriptEnabled: true
+ };
+ `;
+ this.doc.body.appendChild(lessConfigNode);
+ })
+ .then(() => this.lazy.loadScript('https://gw.alipayobjects.com/os/lib/less.js/3.8.1/less.min.js'))
+ .then(() => {
+ this.loadedLess = true;
+ });
+ }
+
+ private runLess(): void {
+ const { color, zone, msg, cdr: cd } = this;
+ const msgId = msg.loading(`正在编译主题!`, { nzDuration: 0 }).messageId;
+ setTimeout(() => {
+ zone.runOutsideAngular(() => {
+ this.loadLess().then(() => {
+ (window as any).less
+ .modifyVars({
+ [`@primary-color`]: color
+ })
+ .then(() => {
+ msg.success('成功');
+ msg.remove(msgId);
+ zone.run(() => cd.detectChanges());
+ });
+ });
+ });
+ }, 200);
+ }
+
+ toggle(): void {
+ this.collapse = !this.collapse;
+ }
+
+ changeColor(color: string): void {
+ this.color = color;
+ this.runLess();
+ }
+
+ setLayout(name: string, value: any, cd: boolean = true): void {
+ switch (name) {
+ case 'menu':
+ const isTop = value === 'top';
+ this.contentWidths.find(w => w.key === 'fixed')!.disabled = !isTop;
+ const newLayout = {
+ ...this.brand.layout,
+ contentWidth: isTop ? 'fixed' : 'fluid',
+ onlyIcon: isTop,
+ collapsed: isTop && !this.brand.isMobile ? false : this.brand.layout.collapsed
+ };
+ this.brand.setLayout(newLayout);
+ break;
+ case 'fixedHeader':
+ this.brand.setLayout('autoHideHeader', false);
+ break;
+ default:
+ break;
+ }
+ this.brand.setLayout(name, value);
+ if (cd) {
+ setTimeout(() => {
+ // Re-render G2 muse be trigger window resize
+ window.dispatchEvent(new Event('resize'));
+ this.cdr.markForCheck();
+ });
+ }
+ }
+
+ copy(): void {
+ const { color, layout } = this;
+ const vars: { [key: string]: string } = {
+ [`@primary-color`]: color
+ };
+ const colorVars = Object.keys(vars)
+ .map(key => `${key}: ${vars[key]};`)
+ .join('\n');
+ const layoutVars = Object.keys(layout)
+ .filter(
+ key => ~['theme', 'menu', 'contentWidth', 'fixedHeader', 'autoHideHeader', 'fixSiderbar', 'colorWeak', 'onlyIcon'].indexOf(key)
+ )
+ .map(key => {
+ const value = layout[key];
+ if (typeof value === 'boolean') {
+ return ` ${key}: ${value},`;
+ } else {
+ return ` ${key}: '${value}',`;
+ }
+ })
+ .join('\n');
+ copy(
+ `在 [src/styles/theme.less] 配置以下:\n{{colorVars}}\n\n在 [src/environments/*] 的 pro 配置以下:\nexport const environment = {\n ...\n pro: {\n{{layoutVars}}\n }\n}`
+ );
+ this.msg.success(`拷贝成功,请根据剪切板内容进行替换`);
+ }
+}
diff --git a/src/app/layout/pro/shared/page/index.ts b/src/app/layout/pro/shared/page/index.ts
new file mode 100644
index 00000000..d2b48060
--- /dev/null
+++ b/src/app/layout/pro/shared/page/index.ts
@@ -0,0 +1,3 @@
+export * from './page-grid.component';
+export * from './page-header-wrapper.component';
+export * from './page.module';
diff --git a/src/app/layout/pro/shared/page/page-grid.component.html b/src/app/layout/pro/shared/page/page-grid.component.html
new file mode 100644
index 00000000..5f69a5e3
--- /dev/null
+++ b/src/app/layout/pro/shared/page/page-grid.component.html
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/src/app/layout/pro/shared/page/page-grid.component.ts b/src/app/layout/pro/shared/page/page-grid.component.ts
new file mode 100644
index 00000000..e5312719
--- /dev/null
+++ b/src/app/layout/pro/shared/page/page-grid.component.ts
@@ -0,0 +1,80 @@
+import {
+ AfterViewInit,
+ ChangeDetectionStrategy,
+ ChangeDetectorRef,
+ Component,
+ ElementRef,
+ Inject,
+ Input,
+ OnDestroy,
+ Optional,
+ Renderer2
+} from '@angular/core';
+import { ReuseTabService } from '@delon/abc/reuse-tab';
+import { TitleService } from '@delon/theme';
+import { BooleanInput, InputBoolean } from '@delon/util';
+import { NzSafeAny } from 'ng-zorro-antd/core/types';
+import { Subject } from 'rxjs';
+import { takeUntil } from 'rxjs/operators';
+
+import { BrandService } from '../../pro.service';
+
+@Component({
+ selector: 'page-grid',
+ templateUrl: './page-grid.component.html',
+ host: {
+ '[class.alain-pro__page-grid]': 'true',
+ '[class.alain-pro__page-grid-no-spacing]': 'noSpacing',
+ '[class.alain-pro__page-grid-wide]': 'isFixed'
+ },
+ changeDetection: ChangeDetectionStrategy.OnPush
+})
+export class ProPageGridComponent implements AfterViewInit, OnDestroy {
+ static ngAcceptInputType_loading: BooleanInput;
+ static ngAcceptInputType_noSpacing: BooleanInput;
+
+ private unsubscribe$ = new Subject();
+
+ @Input() @InputBoolean() loading = false;
+ @Input() @InputBoolean() noSpacing = false;
+ @Input() style: NzSafeAny;
+ @Input()
+ set title(value: string) {
+ if (value) {
+ if (this.titleSrv) {
+ this.titleSrv.setTitle(value);
+ }
+ if (this.reuseSrv) {
+ this.reuseSrv.title = value;
+ }
+ }
+ }
+
+ get isFixed(): boolean {
+ return this.pro.isFixed;
+ }
+
+ constructor(
+ private el: ElementRef,
+ private rend: Renderer2,
+ private pro: BrandService,
+ @Optional() @Inject(TitleService) private titleSrv: TitleService,
+ @Optional() @Inject(ReuseTabService) private reuseSrv: ReuseTabService,
+ private cdr: ChangeDetectorRef
+ ) {}
+
+ ngAfterViewInit(): void {
+ if (this.style) {
+ Object.keys(this.style).forEach((key: string) => {
+ this.rend.setStyle(this.el.nativeElement, key, this.style[key]);
+ });
+ }
+ this.pro.notify.pipe(takeUntil(this.unsubscribe$)).subscribe(() => this.cdr.markForCheck());
+ }
+
+ ngOnDestroy(): void {
+ const { unsubscribe$ } = this;
+ unsubscribe$.next();
+ unsubscribe$.complete();
+ }
+}
diff --git a/src/app/layout/pro/shared/page/page-header-wrapper.component.html b/src/app/layout/pro/shared/page/page-header-wrapper.component.html
new file mode 100644
index 00000000..b81e1ab9
--- /dev/null
+++ b/src/app/layout/pro/shared/page/page-header-wrapper.component.html
@@ -0,0 +1,26 @@
+
+
+
+
+
diff --git a/src/app/layout/pro/shared/page/page-header-wrapper.component.ts b/src/app/layout/pro/shared/page/page-header-wrapper.component.ts
new file mode 100644
index 00000000..0489ca1f
--- /dev/null
+++ b/src/app/layout/pro/shared/page/page-header-wrapper.component.ts
@@ -0,0 +1,74 @@
+import { AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnDestroy, TemplateRef } from '@angular/core';
+import { AlainConfigService, BooleanInput, InputBoolean } from '@delon/util';
+import { Subject } from 'rxjs';
+import { takeUntil } from 'rxjs/operators';
+
+import { BrandService } from '../../pro.service';
+
+@Component({
+ selector: 'page-header-wrapper',
+ templateUrl: './page-header-wrapper.component.html',
+ host: {
+ '[class.alain-pro__page-header-wrapper]': 'true'
+ },
+ changeDetection: ChangeDetectionStrategy.OnPush
+})
+export class ProPageHeaderWrapperComponent implements AfterViewInit, OnDestroy {
+ static ngAcceptInputType_loading: BooleanInput;
+ static ngAcceptInputType_autoBreadcrumb: BooleanInput;
+ static ngAcceptInputType_autoTitle: BooleanInput;
+ static ngAcceptInputType_syncTitle: BooleanInput;
+ static ngAcceptInputType_noSpacing: BooleanInput;
+
+ private unsubscribe$ = new Subject();
+
+ // #region page-header fields
+
+ @Input() title!: string | null | TemplateRef;
+ @Input() @InputBoolean() loading = false;
+ @Input() home!: string;
+ @Input() homeLink!: string;
+ @Input() homeI18n!: string;
+ /**
+ * 自动生成导航,以当前路由从主菜单中定位
+ */
+ @Input() @InputBoolean() autoBreadcrumb = true;
+ /**
+ * 自动生成标题,以当前路由从主菜单中定位
+ */
+ @Input() @InputBoolean() autoTitle = true;
+ /**
+ * 是否自动将标题同步至 `TitleService`、`ReuseService` 下,仅 `title` 为 `string` 类型时有效
+ */
+ @Input() @InputBoolean() syncTitle = true;
+ @Input() breadcrumb!: TemplateRef;
+ @Input() logo!: TemplateRef;
+ @Input() action!: TemplateRef;
+ @Input() content!: TemplateRef;
+ @Input() extra!: TemplateRef;
+ @Input() tab!: TemplateRef;
+ @Input() phContent!: TemplateRef;
+ // #endregion
+
+ // #region fields
+
+ @Input() top!: TemplateRef;
+ @Input() @InputBoolean() noSpacing = false;
+ @Input() style?: {};
+
+ // #endregion
+
+ constructor(public pro: BrandService, cog: AlainConfigService, private cdr: ChangeDetectorRef) {
+ cog.attach(this, 'pageHeader', { syncTitle: true });
+ }
+
+ ngAfterViewInit(): void {
+ this.pro.notify.pipe(takeUntil(this.unsubscribe$)).subscribe(() => this.cdr.markForCheck());
+ }
+
+ ngOnDestroy(): void {
+ const { unsubscribe$ } = this;
+ unsubscribe$.next();
+ unsubscribe$.complete();
+ }
+}
diff --git a/src/app/layout/pro/shared/page/page.module.ts b/src/app/layout/pro/shared/page/page.module.ts
new file mode 100644
index 00000000..8d712740
--- /dev/null
+++ b/src/app/layout/pro/shared/page/page.module.ts
@@ -0,0 +1,16 @@
+import { CommonModule } from '@angular/common';
+import { NgModule } from '@angular/core';
+import { PageHeaderModule } from '@delon/abc/page-header';
+import { NzSpinModule } from 'ng-zorro-antd/spin';
+
+import { ProPageGridComponent } from './page-grid.component';
+import { ProPageHeaderWrapperComponent } from './page-header-wrapper.component';
+
+const COMPONENTS = [ProPageGridComponent, ProPageHeaderWrapperComponent];
+
+@NgModule({
+ imports: [CommonModule, NzSpinModule, PageHeaderModule],
+ declarations: COMPONENTS,
+ exports: COMPONENTS
+})
+export class ProPageModule {}
diff --git a/src/app/layout/pro/styles/app/_content.less b/src/app/layout/pro/styles/app/_content.less
new file mode 100644
index 00000000..00684ab1
--- /dev/null
+++ b/src/app/layout/pro/styles/app/_content.less
@@ -0,0 +1,58 @@
+@{alain-pro-prefix} {
+ &__main {
+ min-height: 100vh;
+ background-color: @alain-pro-main-bg;
+
+ > .ant-layout-header {
+ height: @alain-pro-header-height;
+ line-height: @alain-pro-header-height;
+ }
+
+ .router-ant();
+ }
+
+ &__page {
+ &-header {
+ &-wrapper {
+ position: relative;
+ display: block;
+ margin: -@alain-pro-content-margin -@alain-pro-content-margin 0;
+ }
+ &-content {
+ margin: @alain-pro-content-margin @alain-pro-content-margin 0;
+ }
+ }
+ &-grid {
+ display: block;
+ width: 100%;
+ height: 100%;
+ min-height: 100%;
+ transition: 0.3s;
+ &-wide {
+ max-width: @alain-pro-wide;
+ margin: 0 auto;
+ }
+ &-no-spacing {
+ width: initial;
+ margin: -@alain-pro-content-margin -@alain-pro-content-margin 0;
+ }
+ }
+ }
+}
+
+@{alain-pro-prefix}__fetching {
+ &-icon {
+ display: none;
+ }
+ & {
+ @{alain-pro-prefix}__fetching-icon {
+ display: block;
+ }
+ }
+}
+
+@media screen and (max-width: @mobile-max) {
+ @{alain-pro-prefix}__page-header-content {
+ margin: @alain-pro-content-margin 10px 0;
+ }
+}
diff --git a/src/app/layout/pro/styles/app/_footer.less b/src/app/layout/pro/styles/app/_footer.less
new file mode 100644
index 00000000..fe2b6742
--- /dev/null
+++ b/src/app/layout/pro/styles/app/_footer.less
@@ -0,0 +1,3 @@
+@{alain-pro-prefix}__footer {
+ padding: 0;
+}
diff --git a/src/app/layout/pro/styles/app/_header.less b/src/app/layout/pro/styles/app/_header.less
new file mode 100644
index 00000000..30c81384
--- /dev/null
+++ b/src/app/layout/pro/styles/app/_header.less
@@ -0,0 +1,104 @@
+@header-prefix: ~'@{alain-pro-prefix}__header';
+
+@{header-prefix} {
+ position: relative;
+ z-index: 1;
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ height: @alain-pro-header-height;
+ padding: 0 12px 0 0;
+ background: @alain-pro-header-bg;
+ box-shadow: @alain-pro-header-box-shadow;
+ &-logo {
+ padding: 0 24px;
+ }
+ &-right {
+ display: flex;
+ align-items: center;
+ justify-items: center;
+ }
+ &-item {
+ position: relative;
+ display: flex;
+ align-items: center;
+ justify-items: center;
+ height: @alain-pro-header-height;
+ padding: 0 12px;
+ line-height: @alain-pro-header-height;
+ cursor: pointer;
+ transition: all 0.3s;
+ > i,
+ &-icon {
+ // fix dropdown
+ font-size: @alain-pro-header-widgets-icon-fs !important;
+ transform: none !important;
+ }
+ &,
+ &-icon {
+ color: @alain-pro-header-color;
+ }
+ &:hover {
+ background: @alain-pro-header-hover-bg;
+ &,
+ @{header-prefix}-item-icon {
+ color: @alain-pro-header-hover-color;
+ }
+ }
+ }
+ &-trigger {
+ padding: 0 24px;
+ @{header-prefix}-item-icon {
+ font-size: 20px !important;
+ }
+ }
+ &-search {
+ &:hover {
+ background: transparent;
+ }
+ }
+ &-fixed {
+ position: fixed;
+ top: 0;
+ right: 0;
+ z-index: 9;
+ width: 100%;
+ transition: width 0.2s;
+ }
+ &-hide {
+ opacity: 0;
+ transition: opacity 0.2s;
+ }
+}
+
+@media only screen and (max-width: @mobile-max) {
+ @{header-prefix} {
+ &-name {
+ display: none;
+ }
+ &-trigger {
+ padding: 0 12px;
+ }
+ &-logo {
+ position: relative;
+ padding-right: 12px;
+ padding-left: 12px;
+ }
+ }
+}
+
+layout-pro-header {
+ z-index: 1;
+}
+
+.layout-pro-header-rtl-mixin(@enabled) when(@enabled=true) {
+ [dir='rtl'] {
+ @{header-prefix} {
+ &-fixed {
+ right: inherit;
+ left: 0;
+ }
+ }
+ }
+}
+.layout-pro-header-rtl-mixin(@rtl-enabled);
diff --git a/src/app/layout/pro/styles/app/_menu.less b/src/app/layout/pro/styles/app/_menu.less
new file mode 100644
index 00000000..4f548617
--- /dev/null
+++ b/src/app/layout/pro/styles/app/_menu.less
@@ -0,0 +1,68 @@
+@{alain-pro-prefix} {
+ &__menu {
+ display: block;
+ &-item {
+ &--disabled {
+ pointer-events: none;
+ }
+ }
+ &-only-icon {
+ @{alain-pro-prefix}__menu-item {
+ padding-right: 8px !important;
+ padding-left: 8px !important;
+ &:first-child {
+ padding-left: 0;
+ }
+ }
+ @{alain-pro-prefix}__menu-icon {
+ margin-right: 0;
+ font-size: @alain-pro-top-nav-only-icon-fs;
+ }
+ }
+ &-title {
+ position: relative;
+ &-badge {
+ display: flex;
+ justify-content: center;
+ width: 18px;
+ height: 18px;
+ padding: 0;
+ font-size: 12px;
+ line-height: 18px;
+ background: @alain-pro-header-title-badge-bg;
+ border-radius: 50%;
+ > em {
+ color: @alain-pro-header-title-badge-color;
+ font-style: normal;
+ }
+ }
+ }
+ &-img {
+ width: @alain-pro-sider-menu-img-wh !important;
+ height: @alain-pro-sider-menu-img-wh !important;
+ }
+ }
+ &__side-nav {
+ @{alain-pro-prefix}__menu {
+ &-title {
+ display: flex;
+ align-items: center;
+ &-text {
+ flex: 1;
+ }
+ }
+ }
+ .@{ant-prefix}-menu-inline-collapsed {
+ @{alain-pro-prefix}__menu-title-badge {
+ position: absolute;
+ top: 0;
+ right: -16px;
+ width: 8px;
+ height: 8px;
+ > em {
+ display: none;
+ }
+ }
+ }
+ }
+}
diff --git a/src/app/layout/pro/styles/app/_sider.less b/src/app/layout/pro/styles/app/_sider.less
new file mode 100644
index 00000000..4353cc66
--- /dev/null
+++ b/src/app/layout/pro/styles/app/_sider.less
@@ -0,0 +1,148 @@
+@sider-prefix: ~'@{alain-pro-prefix}__sider';
+
+@{sider-prefix} {
+ position: relative;
+ z-index: 10;
+ display: block;
+ min-height: 100vh;
+ overflow: hidden;
+ box-shadow: 2px 0 6px rgba(0, 21, 41, 0.35);
+ &-logo {
+ position: relative;
+ display: block;
+ height: @alain-pro-header-height;
+ padding-left: ((@menu-collapsed-width - 32px) / 2);
+ overflow: hidden;
+ line-height: @alain-pro-header-height;
+ background: @alain-pro-header-logo-bg;
+ transition: all 0.3s;
+ img {
+ display: inline-block;
+ height: 32px;
+ vertical-align: middle;
+ }
+ h1 {
+ display: inline-block;
+ margin: 0 0 0 12px;
+ color: white;
+ font-weight: 600;
+ font-size: @alain-pro-logo-font-size;
+ font-family: @alain-pro-logo-font-family;
+ vertical-align: middle;
+ transition: all 0.3s;
+ }
+ }
+ &-fixed {
+ position: fixed;
+ top: 0;
+ left: 0;
+ @{alain-pro-prefix}__side-nav-wrap {
+ height: ~'calc(100vh - @{alain-pro-header-height})';
+ padding-bottom: 24px;
+ overflow-y: scroll;
+ }
+ }
+}
+
+// 小屏幕 drawer 配置信息
+@{alain-pro-prefix}__drawer {
+ .@{ant-prefix}-drawer {
+ &-wrapper-body {
+ height: 100%;
+ overflow: auto;
+ }
+ &-body {
+ height: 100vh;
+ padding: 0;
+ overflow-x: hidden;
+ }
+ }
+}
+
+// 当缩进时隐藏站点名称
+@{aside-collapsed-prefix} {
+ @{sider-prefix}-logo {
+ display: flex;
+ justify-content: center;
+ padding: 0;
+ h1 {
+ display: none;
+ }
+ }
+}
+
+@{alain-pro-prefix}__light {
+ @{sider-prefix} {
+ background-color: @alain-pro-light-color;
+ box-shadow: @alain-pro-light-slider-shadow;
+ &-logo {
+ background: @alain-pro-light-color;
+ box-shadow: 1px 1px 0 0 @border-color-split;
+ h1 {
+ color: @primary-color;
+ }
+ }
+ .@{ant-prefix}-menu-light {
+ border-right-color: transparent;
+ }
+ }
+}
+
+.alain-pro-sider-fixed-scroll-mixin(@mode) when(@mode='show') {
+ .scrollbar-mixin(~'@{ider-prefix}-fixed @{alain-pro-prefix}__side-nav-wrap');
+}
+
+.alain-pro-sider-fixed-scroll-mixin(@mode) when(@mode='hide') {
+ @{sider-prefix}-fixed @{alain-pro-prefix}__side-nav-wrap {
+ -webkit-overflow-scrolling: touch;
+ // IE
+ -ms-scroll-chaining: chained;
+ -ms-content-zooming: zoom;
+ -ms-scroll-rails: none;
+ -ms-content-zoom-limit-min: 100%;
+ -ms-content-zoom-limit-max: 500%;
+ -ms-scroll-snap-type: proximity;
+ -ms-scroll-snap-points-x: snaplist(100%, 200%, 300%, 400%, 500%);
+ -ms-overflow-style: none;
+ // Firefox
+ scrollbar-width: none;
+ // Chrome
+ &::-webkit-scrollbar {
+ width: @alain-pro-sider-scrollbar-height;
+ height: @alain-pro-sider-scrollbar-width;
+ }
+ &::-webkit-scrollbar-track {
+ -webkit-box-shadow: inset 0 0 @alain-pro-sider-scrollbar-width @alain-pro-sider-scrollbar-track-color;
+ }
+ &::-webkit-scrollbar-thumb {
+ background-color: @alain-pro-sider-scrollbar-thumb-color;
+ }
+ }
+}
+
+.alain-pro-sider-fixed-scroll-mixin(@alain-pro-sider-fixed-scroll-mode);
+
+.layout-pro-sider-rtl-mixin(@enabled) when(@enabled=true) {
+ [dir='rtl'] {
+ @{sider-prefix} {
+ &-logo {
+ padding-right: ((@menu-collapsed-width - 32px) / 2);
+ padding-left: 0;
+ h1 {
+ margin-right: 12px;
+ margin-left: 0;
+ }
+ }
+ &-fixed {
+ right: 0;
+ left: inherit;
+ }
+ }
+ @{aside-collapsed-prefix} {
+ @{sider-prefix}-logo {
+ padding: 0;
+ }
+ }
+ }
+}
+.layout-pro-sider-rtl-mixin(@rtl-enabled);
diff --git a/src/app/layout/pro/styles/app/_top-nav.less b/src/app/layout/pro/styles/app/_top-nav.less
new file mode 100644
index 00000000..bf2147b8
--- /dev/null
+++ b/src/app/layout/pro/styles/app/_top-nav.less
@@ -0,0 +1,101 @@
+@top-nav-prefix: ~'@{alain-pro-prefix}__top-nav';
+
+@{top-nav-prefix} {
+ position: relative;
+ width: 100%;
+ height: @alain-pro-header-height;
+ padding: 0 12px 0 0;
+ box-shadow: @alain-pro-header-box-shadow;
+ transition: background 0.3s, width 0.2s;
+ @{alain-pro-prefix}__menu {
+ .@{ant-prefix}-menu {
+ display: flex;
+ align-items: center;
+ height: @alain-pro-header-height;
+ border: none;
+ }
+ &-wrap {
+ flex: 1;
+ padding-right: 8px;
+ }
+ &-item {
+ height: 100%;
+ .@{ant-prefix}-menu-submenu-title {
+ height: 100%;
+ padding: 0 12px;
+ }
+ }
+ }
+ &-main {
+ display: flex;
+ height: @alain-pro-header-height;
+ padding-left: 24px;
+ &-wide {
+ max-width: @alain-pro-wide;
+ margin: auto;
+ padding-left: 4px;
+ }
+ &-left {
+ display: flex;
+ flex: 1;
+ }
+ }
+ &-logo {
+ width: 165px;
+ h1 {
+ margin: 0 0 0 12px;
+ color: #fff;
+ font-size: 16px;
+ }
+ }
+ @{alain-pro-prefix}__menu-title-badge {
+ position: absolute;
+ top: -16px;
+ right: -16px;
+ }
+}
+
+@{alain-pro-prefix} {
+ &__dark {
+ @{top-nav-prefix} {
+ @{alain-pro-prefix}__header-item {
+ &,
+ &-icon {
+ color: @menu-dark-color;
+ }
+ &:hover,
+ .@{ant-prefix}-popover-open {
+ background: @menu-dark-item-active-bg;
+ @{alain-pro-prefix}__header-item {
+ &,
+ &-icon {
+ color: @menu-dark-highlight-color;
+ }
+ }
+ }
+ }
+ }
+ }
+ &__light {
+ @{top-nav-prefix} {
+ background-color: #fff;
+ h1 {
+ color: #002140;
+ }
+ }
+ }
+}
+
+.layout-pro-top-nav-rtl-mixin(@enabled) when(@enabled=true) {
+ [dir='rtl'] {
+ @{top-nav-prefix} {
+ &-logo {
+ h1 {
+ margin-right: 12px;
+ margin-left: 0;
+ }
+ }
+ }
+ }
+}
+.layout-pro-top-nav-rtl-mixin(@rtl-enabled);
diff --git a/src/app/layout/pro/styles/app/fix/_antd.less b/src/app/layout/pro/styles/app/fix/_antd.less
new file mode 100644
index 00000000..42f15507
--- /dev/null
+++ b/src/app/layout/pro/styles/app/fix/_antd.less
@@ -0,0 +1,6 @@
+@layout-body-background: #f8f8f8;
+
+// Remoed card transition
+.@{ant-prefix}-card {
+ transition: none;
+}
diff --git a/src/app/layout/pro/styles/app/fix/_btn.less b/src/app/layout/pro/styles/app/fix/_btn.less
new file mode 100644
index 00000000..e8747b94
--- /dev/null
+++ b/src/app/layout/pro/styles/app/fix/_btn.less
@@ -0,0 +1,5 @@
+.btn-flat {
+ background: transparent !important;
+ border-color: transparent !important;
+ box-shadow: none !important;
+}
diff --git a/src/app/layout/pro/styles/app/fix/_delon.less b/src/app/layout/pro/styles/app/fix/_delon.less
new file mode 100644
index 00000000..46632446
--- /dev/null
+++ b/src/app/layout/pro/styles/app/fix/_delon.less
@@ -0,0 +1,55 @@
+@{header-prefix}-item {
+ .@{ant-prefix}-badge-count {
+ position: absolute;
+ top: 24px;
+ right: 12px;
+ }
+}
+
+// full-content component
+@{full-content-prefix} {
+ &__opened {
+ layout-pro-header,
+ @{alain-pro-prefix}__sider,
+ reuse-tab {
+ display: none !important;
+ }
+ }
+ &__hidden-title {
+ page-header {
+ display: none !important;
+ }
+ }
+}
+
+// footer-toolbar component
+@{footer-toolbar-prefix} {
+ z-index: 99;
+ width: auto;
+ &__body {
+ @{alain-pro-prefix}__body {
+ margin-bottom: @layout-gutter + @footer-toolbar-height !important;
+ }
+ }
+}
+@{alain-pro-prefix}__menu-side {
+ @{footer-toolbar-prefix} {
+ left: @alain-pro-sider-menu-width;
+ }
+}
+@{alain-pro-prefix}__menu-top {
+ @{footer-toolbar-prefix} {
+ left: 0;
+ }
+}
+
+@{aside-collapsed-prefix} {
+ @{footer-toolbar-prefix} {
+ left: @menu-collapsed-width;
+ }
+}
+
+@{page-header-prefix} {
+ padding-right: @alain-pro-content-margin;
+ padding-left: @alain-pro-content-margin;
+}
diff --git a/src/app/layout/pro/styles/app/fix/_menu.less b/src/app/layout/pro/styles/app/fix/_menu.less
new file mode 100644
index 00000000..84765e75
--- /dev/null
+++ b/src/app/layout/pro/styles/app/fix/_menu.less
@@ -0,0 +1,3 @@
+.@{ant-prefix}-dropdown-menu-item {
+ outline: none;
+}
diff --git a/src/app/layout/pro/styles/app/fix/_print.less b/src/app/layout/pro/styles/app/fix/_print.less
new file mode 100644
index 00000000..4811f8df
--- /dev/null
+++ b/src/app/layout/pro/styles/app/fix/_print.less
@@ -0,0 +1,3 @@
+@page {
+ size: a3;
+}
diff --git a/src/app/layout/pro/styles/app/fix/index.less b/src/app/layout/pro/styles/app/fix/index.less
new file mode 100644
index 00000000..8af7a2a5
--- /dev/null
+++ b/src/app/layout/pro/styles/app/fix/index.less
@@ -0,0 +1,8 @@
+@import './_antd.less';
+@import './_delon.less';
+
+// components
+@import './_btn.less';
+@import './_menu.less';
+
+@import './_print.less';
diff --git a/src/app/layout/pro/styles/app/index.less b/src/app/layout/pro/styles/app/index.less
new file mode 100644
index 00000000..d2066f55
--- /dev/null
+++ b/src/app/layout/pro/styles/app/index.less
@@ -0,0 +1,8 @@
+@import './_menu.less';
+@import './_content.less';
+@import './_header.less';
+@import './_top-nav.less';
+@import './_sider.less';
+@import './_footer.less';
+
+@import './fix/index.less';
diff --git a/src/app/layout/pro/styles/index.less b/src/app/layout/pro/styles/index.less
new file mode 100644
index 00000000..8d5eaa97
--- /dev/null
+++ b/src/app/layout/pro/styles/index.less
@@ -0,0 +1,4 @@
+@import './theme-default.less';
+
+@import './app/index.less';
+@import './widgets/index.less';
diff --git a/src/app/layout/pro/styles/theme-compact.less b/src/app/layout/pro/styles/theme-compact.less
new file mode 100644
index 00000000..72fb7993
--- /dev/null
+++ b/src/app/layout/pro/styles/theme-compact.less
@@ -0,0 +1,5 @@
+@import '~@delon/theme/theme-compact.less';
+@import './theme-default.less';
+
+@alain-pro-header-height: 56px;
+@alain-pro-header-widgets-icon-fs: 14px;
diff --git a/src/app/layout/pro/styles/theme-dark.less b/src/app/layout/pro/styles/theme-dark.less
new file mode 100644
index 00000000..54645892
--- /dev/null
+++ b/src/app/layout/pro/styles/theme-dark.less
@@ -0,0 +1,9 @@
+@import '~@delon/theme/theme-dark.less';
+@import './theme-default.less';
+
+@alain-pro-header-bg: @component-background;
+@alain-pro-header-logo-bg: @popover-background;
+@alain-pro-header-box-shadow: @shadow-1-down; // 0 1px 4px rgba(0, 21, 41, 0.08);
+@alain-pro-header-color: @text-color;
+@alain-pro-header-hover-color: #fff;
+@alain-pro-header-hover-bg: rgba(0, 0, 0, 0.025);
diff --git a/src/app/layout/pro/styles/theme-default.less b/src/app/layout/pro/styles/theme-default.less
new file mode 100644
index 00000000..3805df6e
--- /dev/null
+++ b/src/app/layout/pro/styles/theme-default.less
@@ -0,0 +1,53 @@
+@import '~@delon/theme/theme-default.less';
+
+// Optimization for NG-ALAIN theme system
+// 针对 NG-ALAIN 主题系统的优化
+@badge-enabled: false;
+
+// PRO
+@alain-pro-prefix: ~'.alain-pro';
+@aside-collapsed-prefix: ~'.aside-collapsed';
+@alain-pro-zindex: @zindex-base;
+@alain-pro-ease: cubic-bezier(0.25, 0, 0.15, 1);
+
+@alain-pro-header-height: 64px;
+@alain-pro-header-bg: #fff;
+@alain-pro-header-logo-bg: #002140;
+@alain-pro-header-box-shadow: 0 1px 4px rgba(0, 21, 41, 0.08);
+@alain-pro-header-color: rgba(0, 0, 0, 0.65);
+@alain-pro-header-hover-color: #000;
+@alain-pro-header-hover-bg: rgba(0, 0, 0, 0.025);
+@alain-pro-header-search-width: 210px;
+@alain-pro-header-widgets-icon-fs: 16px;
+@alain-pro-header-title-badge-bg: @primary-color;
+@alain-pro-header-title-badge-color: #fff;
+
+@alain-pro-main-bg: @layout-body-background;
+
+@alain-pro-top-nav-only-icon-fs: 16px;
+
+@alain-pro-light-color: #fff;
+@alain-pro-light-slider-shadow: 2px 0 8px 0 rgba(29, 35, 41, 0.05);
+
+@alain-pro-logo-font-size: 17px;
+@alain-pro-logo-font-family: 'Myriad Pro', 'Helvetica Neue', Arial, Helvetica, sans-serif;
+
+@alain-pro-content-margin: 24px;
+@alain-pro-wide: 1200px;
+
+@alain-pro-sider-menu-width: 256px;
+@alain-pro-sider-menu-img-wh: 14px;
+
+/**
+ * 侧边栏固定时滚动条显示风格:
+ * - hide: 隐藏滚动条(默认)
+ * - show: 显示美化后滚动条
+ */
+@alain-pro-sider-fixed-scroll-mode: 'hide';
+@alain-pro-sider-scrollbar-width: 0;
+@alain-pro-sider-scrollbar-height: 0;
+@alain-pro-sider-scrollbar-track-color: transparent;
+@alain-pro-sider-scrollbar-thumb-color: transparent;
+
+@brand-bordered-color: rgba(24, 28, 33, 0.06);
+@brand-scroll-width: 20px;
diff --git a/src/app/layout/pro/styles/widgets/_bordered.less b/src/app/layout/pro/styles/widgets/_bordered.less
new file mode 100644
index 00000000..713b91a9
--- /dev/null
+++ b/src/app/layout/pro/styles/widgets/_bordered.less
@@ -0,0 +1,34 @@
+.brand {
+ // 让 `nz-row` & `nz-col` 包含有边框效果
+ &-bordered {
+ overflow: hidden;
+ border: 1px solid @brand-bordered-color;
+
+ > [class*='ant-col-']::before,
+ > [class*='ant-col-']::after {
+ position: absolute;
+ display: block;
+ content: '';
+ }
+
+ > [class*='ant-col-']::before {
+ right: 0;
+ bottom: -1px;
+ left: 0;
+ height: 0;
+ border-top: 1px solid @brand-bordered-color;
+ }
+
+ > [class*='ant-col-']::after {
+ top: 0;
+ bottom: 0;
+ left: -1px;
+ width: 0;
+ border-left: 1px solid @brand-bordered-color;
+ }
+ }
+ // 边框大小为 `2px`
+ &-border-width-2 {
+ border-width: 2px !important;
+ }
+}
diff --git a/src/app/layout/pro/styles/widgets/_brand.less b/src/app/layout/pro/styles/widgets/_brand.less
new file mode 100644
index 00000000..e929e50a
--- /dev/null
+++ b/src/app/layout/pro/styles/widgets/_brand.less
@@ -0,0 +1,27 @@
+.brand {
+ // 加载容器
+ &-page-loading {
+ position: absolute;
+ top: 0;
+ right: 0;
+ left: 0;
+ min-height: 200px;
+ }
+ // `position: absolute` 定位到右上角
+ &-top-right {
+ position: absolute;
+ top: 8px;
+ right: 8px;
+ }
+ // `position: absolute` 定位到左上角
+ &-top-left {
+ position: absolute;
+ top: 8px;
+ left: 8px;
+ }
+ // `nz-range-picker` 日期宽度
+ &-range-picker__date {
+ display: inline-block;
+ width: 240px;
+ }
+}
diff --git a/src/app/layout/pro/styles/widgets/_collapse.less b/src/app/layout/pro/styles/widgets/_collapse.less
new file mode 100644
index 00000000..de07b113
--- /dev/null
+++ b/src/app/layout/pro/styles/widgets/_collapse.less
@@ -0,0 +1,13 @@
+.brand {
+ // 将 `nz-ollapse` 的 arrow 图标转化为右边
+ &-collapse-arrow-reverse {
+ .@{ant-prefix}-collapse > .@{ant-prefix}-collapse-item > .@{ant-prefix}-collapse-header {
+ padding-right: 40px;
+ padding-left: 12px;
+ .arrow {
+ right: 16px;
+ left: unset;
+ }
+ }
+ }
+}
diff --git a/src/app/layout/pro/styles/widgets/_search.less b/src/app/layout/pro/styles/widgets/_search.less
new file mode 100644
index 00000000..4014b5e5
--- /dev/null
+++ b/src/app/layout/pro/styles/widgets/_search.less
@@ -0,0 +1,51 @@
+@header-search-prefix: ~'@{alain-pro-prefix}__header-search';
+
+@{header-search-prefix} {
+ display: flex;
+ .anticon-search {
+ font-size: 16px;
+ cursor: pointer;
+ }
+ &-input {
+ width: 0;
+ overflow: hidden;
+ background: transparent;
+ border-radius: 0;
+ transition: width 0.3s, margin-left 0.3s;
+ .@{ant-prefix}-select-selection {
+ background: transparent;
+ }
+ input {
+ padding-right: 0;
+ padding-left: 0;
+ background: transparent;
+ border: 0;
+ outline: none;
+ box-shadow: none;
+ }
+ &,
+ &:hover,
+ &:focus {
+ border-bottom: 1px solid @border-color-base;
+ }
+ }
+ &-show {
+ &:hover {
+ background: none !important;
+ }
+ @{header-search-prefix}-input {
+ width: @alain-pro-header-search-width;
+ margin-left: 8px;
+ }
+ }
+}
+
+@{alain-pro-prefix}__dark {
+ @{alain-pro-prefix}__top-nav {
+ @{header-search-prefix}-show {
+ .@{ant-prefix}-input {
+ color: #fff;
+ }
+ }
+ }
+}
diff --git a/src/app/layout/pro/styles/widgets/_setting-drawer.less b/src/app/layout/pro/styles/widgets/_setting-drawer.less
new file mode 100644
index 00000000..17f763c7
--- /dev/null
+++ b/src/app/layout/pro/styles/widgets/_setting-drawer.less
@@ -0,0 +1,53 @@
+@{setting-drawer-prefix} {
+ &__handle-opened {
+ right: 300px !important;
+ }
+
+ &__blockChecbox {
+ display: flex;
+ &-item {
+ position: relative;
+ margin-right: 16px;
+ // box-shadow: 0 1px 1px 0 rgba(0, 0, 0, 0.1);
+ border-radius: @border-radius-base;
+ cursor: pointer;
+ img {
+ width: 48px;
+ }
+ }
+ &-selectIcon {
+ position: absolute;
+ top: 0;
+ right: 0;
+ width: 100%;
+ height: 100%;
+ padding-top: 15px;
+ padding-left: 24px;
+ color: @primary-color;
+ font-weight: bold;
+ font-size: 14px;
+ }
+ }
+
+ &__handle {
+ top: 114px;
+ width: 32px;
+ height: 32px;
+ background: rgba(0, 0, 0, 0.38);
+ &-icon {
+ font-size: 16px;
+ }
+ }
+}
+
+.layout-pro-setting-drawer-rtl-mixin(@enabled) when(@enabled=true) {
+ @{setting-drawer-prefix}-rtl {
+ @{setting-drawer-prefix} {
+ &__handle-opened {
+ right: inherit !important;
+ left: 300px !important;
+ }
+ }
+ }
+}
+.layout-pro-setting-drawer-rtl-mixin(@rtl-enabled);
diff --git a/src/app/layout/pro/styles/widgets/index.less b/src/app/layout/pro/styles/widgets/index.less
new file mode 100644
index 00000000..e23af717
--- /dev/null
+++ b/src/app/layout/pro/styles/widgets/index.less
@@ -0,0 +1,7 @@
+// For pro brand style
+@import './_brand.less';
+
+@import './_setting-drawer.less';
+@import './_search.less';
+@import './_bordered.less';
+@import './_collapse.less';
diff --git a/src/app/layout/pro/test/components/menu.component.spec.ts b/src/app/layout/pro/test/components/menu.component.spec.ts
new file mode 100644
index 00000000..edf966a4
--- /dev/null
+++ b/src/app/layout/pro/test/components/menu.component.spec.ts
@@ -0,0 +1,89 @@
+import { Component, DebugElement, ViewChild } from '@angular/core';
+import { ComponentFixture, fakeAsync, TestBed, tick } from '@angular/core/testing';
+import { NoopAnimationsModule } from '@angular/platform-browser/animations';
+import { Router } from '@angular/router';
+import { RouterTestingModule } from '@angular/router/testing';
+import { createTestContext } from '@delon/testing';
+import { AlainThemeModule, Menu, MenuService } from '@delon/theme';
+
+import { LayoutModule } from '../../../layout.module';
+import { LayoutProMenuComponent } from '../../components/menu/menu.component';
+import { BrandService } from '../../pro.service';
+
+describe('pro: layout-pro-menu', () => {
+ let fixture: ComponentFixture;
+ let dl: DebugElement;
+ let context: TestComponent;
+ let srv: BrandService;
+ let menuSrv: MenuService;
+ let page: PageObject;
+
+ beforeEach(() => {
+ TestBed.configureTestingModule({
+ imports: [NoopAnimationsModule, RouterTestingModule.withRoutes([]), AlainThemeModule.forRoot(), LayoutModule],
+ declarations: [TestComponent]
+ });
+ ({ fixture, dl, context } = createTestContext(TestComponent));
+ srv = TestBed.inject(BrandService);
+ menuSrv = TestBed.inject(MenuService);
+ page = new PageObject();
+ });
+
+ describe('#menu', () => {
+ it('should be ingored category menus', () => {
+ page.appendMenu([{ text: '1', children: [{ text: '1-1' }, { text: '1-2' }] }]).checkCount(2);
+ });
+
+ it('should be ingored menu item when _hidden is true', () => {
+ page.appendMenu([{ text: '1', children: [{ text: '1-1', hide: true }, { text: '1-2' }] }]).checkCount(1);
+ });
+
+ it('should be navigate router', fakeAsync(() => {
+ const router = TestBed.inject(Router);
+ spyOn(router, 'navigateByUrl');
+ page.appendMenu([{ text: '1', children: [{ text: '1-1', link: '/' }] }]);
+ page.click();
+ tick(100);
+ fixture.detectChanges();
+ expect(router.navigateByUrl).toHaveBeenCalled();
+ }));
+
+ it('should be auto closed collapse when router changed of mobile', fakeAsync(() => {
+ spyOnProperty(srv, 'isMobile').and.returnValue(true);
+ const setCollapsedSpy = spyOn(srv, 'setCollapsed');
+ page.appendMenu([{ text: '1', children: [{ text: '1-1', link: '/' }] }]).click();
+ tick(100);
+ fixture.detectChanges();
+ expect(setCollapsedSpy).toHaveBeenCalled();
+ expect(setCollapsedSpy.calls.mostRecent().args[0]).toBe(true);
+ }));
+ });
+
+ class PageObject {
+ appendMenu(menus: Menu[]): this {
+ menuSrv.add(menus);
+ fixture.detectChanges();
+ return this;
+ }
+ checkCount(count: number = 0): this {
+ expect(context.comp.menus!.length).toBe(count);
+ return this;
+ }
+ click(pos: number = 0): this {
+ const el = document.querySelectorAll('.alain-pro__menu-item')[pos] as HTMLElement;
+ el.querySelector('a')!.click();
+ fixture.detectChanges();
+ return this;
+ }
+ whenStable(): Promise {
+ return fixture.whenStable();
+ }
+ }
+});
+
+@Component({
+ template: ` `
+})
+class TestComponent {
+ @ViewChild(LayoutProMenuComponent, { static: true }) comp!: LayoutProMenuComponent;
+}
diff --git a/src/app/layout/pro/test/pro.component.spec.ts b/src/app/layout/pro/test/pro.component.spec.ts
new file mode 100644
index 00000000..4fc9dad9
--- /dev/null
+++ b/src/app/layout/pro/test/pro.component.spec.ts
@@ -0,0 +1,111 @@
+import { HttpClientTestingModule } from '@angular/common/http/testing';
+import { Component, DebugElement, ViewChild } from '@angular/core';
+import { ComponentFixture, TestBed, TestBedStatic } from '@angular/core/testing';
+import { NoopAnimationsModule } from '@angular/platform-browser/animations';
+import { RouterTestingModule } from '@angular/router/testing';
+import { createTestContext } from '@delon/testing';
+import { AlainThemeModule } from '@delon/theme';
+
+import { LayoutModule } from '../../layout.module';
+import { LayoutProComponent } from '../pro.component';
+import { BrandService } from '../pro.service';
+
+describe('pro: layout-pro', () => {
+ let injector: TestBedStatic;
+ let fixture: ComponentFixture;
+ let dl: DebugElement;
+ let context: TestComponent;
+ let srv: BrandService;
+ let page: PageObject;
+
+ beforeEach(() => {
+ injector = TestBed.configureTestingModule({
+ imports: [
+ HttpClientTestingModule,
+ NoopAnimationsModule,
+ RouterTestingModule.withRoutes([]),
+ AlainThemeModule.forRoot(),
+ LayoutModule
+ ],
+ declarations: [TestComponent]
+ });
+ });
+
+ beforeEach(() => {
+ ({ fixture, dl, context } = createTestContext(TestComponent));
+ srv = injector.inject(BrandService);
+ page = new PageObject();
+ });
+
+ describe('should set the body style', () => {
+ it('when inited', () => {
+ srv.setCollapsed(true);
+ srv.setLayout('theme', 'dark');
+ fixture.detectChanges();
+ page.checkBodyClass('alain-pro__dark').checkBodyClass('aside-collapsed');
+ });
+ it('when destroy', () => {
+ srv.setCollapsed(true);
+ srv.setLayout('theme', 'dark');
+ fixture.detectChanges();
+ page.checkBodyClass('alain-pro__dark').checkBodyClass('aside-collapsed');
+ context.comp.ngOnDestroy();
+ page.checkBodyClass('alain-pro__dark', false);
+ });
+ it('when layout changed', () => {
+ srv.setLayout('contentWidth', 'fixed');
+ fixture.detectChanges();
+ page.checkBodyClass('alain-pro__wide');
+ srv.setLayout('contentWidth', 'fluid');
+ fixture.detectChanges();
+ page.checkBodyClass('alain-pro__wide', false);
+ });
+ });
+
+ describe('#layout', () => {
+ it('should be hide slider when screen is mobile', () => {
+ const siderCls = '.alain-pro__sider';
+ const isMobile = spyOnProperty(srv, 'isMobile', 'get');
+ // Show sider when not mobile
+ isMobile.and.returnValue(false);
+ srv.setCollapsed(true);
+ fixture.detectChanges();
+ fixture
+ .whenStable()
+ .then(() => {
+ page.checkCls(siderCls, true);
+ // Hide sider when is mobile
+ isMobile.and.returnValue(true);
+ srv.setCollapsed(true);
+ fixture.detectChanges();
+ return fixture.whenStable();
+ })
+ .then(() => {
+ page.checkCls(siderCls, false);
+ });
+ });
+ });
+
+ class PageObject {
+ checkBodyClass(cls: string, status: boolean = true): this {
+ expect(document.body.classList.contains(cls)).toBe(status);
+ return this;
+ }
+ checkCls(cls: string, status: boolean = true): this {
+ const nodes = document.querySelectorAll(cls);
+ if (status) {
+ expect(nodes.length).toBe(1);
+ } else {
+ expect(nodes.length).toBe(0);
+ }
+ return this;
+ }
+ }
+});
+
+@Component({
+ template: ` `
+})
+class TestComponent {
+ @ViewChild('comp', { static: true }) comp!: LayoutProComponent;
+}
diff --git a/src/app/layout/pro/test/pro.service.spec.ts b/src/app/layout/pro/test/pro.service.spec.ts
new file mode 100644
index 00000000..7655f503
--- /dev/null
+++ b/src/app/layout/pro/test/pro.service.spec.ts
@@ -0,0 +1,81 @@
+import { TestBed, TestBedStatic } from '@angular/core/testing';
+import { AlainThemeModule } from '@delon/theme';
+import { environment } from '@env/environment';
+import { filter } from 'rxjs/operators';
+
+import { BrandService } from '../pro.service';
+
+describe('pro: BrandService', () => {
+ let injector: TestBedStatic;
+ let srv: BrandService;
+
+ beforeEach(() => {
+ injector = TestBed.configureTestingModule({
+ imports: [AlainThemeModule.forRoot()],
+ providers: [BrandService]
+ });
+ });
+
+ afterEach(() => ((environment as any).pro = null));
+
+ describe('should be initialized configuration', () => {
+ it('with default', () => {
+ (environment as any).pro = null;
+ spyOn(localStorage, 'getItem').and.returnValue(`null`);
+ srv = injector.get(BrandService);
+ expect(srv.theme).toBe('dark');
+ expect(srv.menu).toBe('side');
+ expect(srv.contentWidth).toBe('fluid');
+ });
+ it('with environment', () => {
+ (environment as any).pro = { theme: 'light' };
+ spyOn(localStorage, 'getItem').and.returnValue(`null`);
+ srv = injector.get(BrandService);
+ expect(srv.theme).toBe('light');
+ });
+ it('with settings', () => {
+ (environment as any).pro = null;
+ spyOn(localStorage, 'getItem').and.returnValue(JSON.stringify({ theme: 'light', menu: 'top' }));
+ srv = injector.get(BrandService);
+ expect(srv.theme).toBe('light');
+ expect(srv.menu).toBe('top');
+ });
+ });
+
+ describe('should be trigger notify', () => {
+ beforeEach(() => (srv = injector.get(BrandService)));
+
+ it('when mobile changed in constructor', done => {
+ srv.notify.pipe(filter(v => v != null && v === 'mobile')).subscribe(type => {
+ expect(true).toBe(true);
+ done();
+ });
+ });
+ it('when layout changed', done => {
+ srv.notify.pipe(filter(v => v != null && v === 'layout')).subscribe(type => {
+ expect(true).toBe(true);
+ done();
+ });
+ srv.setLayout('a', 1);
+ });
+ });
+
+ it('#setCollapsed', () => {
+ srv = injector.get(BrandService);
+ srv.setCollapsed(false);
+ expect(srv.collapsed).toBe(false);
+ srv.setCollapsed();
+ expect(srv.collapsed).toBe(true);
+ srv.setCollapsed();
+ expect(srv.collapsed).toBe(false);
+ });
+
+ it('should be onlyIcon always be false when menu is side', () => {
+ srv = injector.get(BrandService);
+ srv.setLayout('menu', 'top');
+ srv.setLayout('onlyIcon', true);
+ expect(srv.onlyIcon).toBe(true);
+ srv.setLayout('menu', 'side');
+ expect(srv.onlyIcon).toBe(false);
+ });
+});
diff --git a/src/app/routes/account/account-routing.module.ts b/src/app/routes/account/account-routing.module.ts
new file mode 100644
index 00000000..8a7ce180
--- /dev/null
+++ b/src/app/routes/account/account-routing.module.ts
@@ -0,0 +1,31 @@
+/*
+ * @Description :
+ * @Version : 1.0
+ * @Author : Shiming
+ * @Date : 2022-01-05 20:15:41
+ * @LastEditors : Shiming
+ * @LastEditTime : 2022-01-18 17:14:30
+ * @FilePath : \\tms-obc-web\\src\\app\\routes\\account\\account-routing.module.ts
+ * Copyright (C) 2022 huzhenhong. All rights reserved.
+ */
+
+import { NgModule } from '@angular/core';
+import { RouterModule, Routes } from '@angular/router';
+import { AccountComponentsCenterComponent } from './components/center/center.component';
+
+const routes: Routes = [
+ { path: '', redirectTo: 'center', pathMatch: 'full' },
+ {
+ path: 'center',
+ component: AccountComponentsCenterComponent,
+ data: {
+ title: '账户中心'
+ }
+ }
+];
+
+@NgModule({
+ imports: [RouterModule.forChild(routes)],
+ exports: [RouterModule]
+})
+export class AccountRoutingModule {}
diff --git a/src/app/routes/account/account.module.ts b/src/app/routes/account/account.module.ts
new file mode 100644
index 00000000..96606efa
--- /dev/null
+++ b/src/app/routes/account/account.module.ts
@@ -0,0 +1,30 @@
+/*
+ * @Description :
+ * @Version : 1.0
+ * @Author : Shiming
+ * @Date : 2021-11-29 11:06:01
+ * @LastEditors : Shiming
+ * @LastEditTime : 2022-01-18 17:14:34
+ * @FilePath : \\tms-obc-web\\src\\app\\routes\\account\\account.module.ts
+ * Copyright (C) 2022 huzhenhong. All rights reserved.
+ */
+
+import { NgModule } from '@angular/core';
+import { SharedModule } from '@shared';
+import { AccountRoutingModule } from './account-routing.module';
+import { AccountComponentsCenterComponent } from './components/center/center.component';
+import { AccountComponentsEditNameComponent } from './components/edit-name/edit-name.component';
+import { AccountComponentsCenterEditComponent } from './components/edit-password/edit-password.component';
+
+const COMPONENTS = [
+ AccountComponentsCenterComponent,
+ AccountComponentsEditNameComponent,
+ AccountComponentsCenterEditComponent
+];
+const COMPONENTS_NOROUNT = [AccountComponentsEditNameComponent];
+
+@NgModule({
+ imports: [SharedModule, AccountRoutingModule],
+ declarations: [...COMPONENTS, ...COMPONENTS_NOROUNT],
+})
+export class AccountModule {}
diff --git a/src/app/routes/account/components/center/center.component.html b/src/app/routes/account/components/center/center.component.html
new file mode 100644
index 00000000..d9df68c0
--- /dev/null
+++ b/src/app/routes/account/components/center/center.component.html
@@ -0,0 +1,48 @@
+
+
+ 个人中心
+
+
+
+
+
+
+ 手机号码/账号
+
+
{{ infoData.phone }}
+
+ 已绑定
+ 未绑定
+
+
+
+
+
+
+
+
+
+
+
+ 账户密码
+
+
定期更换密码有助于账号安全
+
+ 已设置
+ 未设置
+
+
+
+
+
+
+
+
+
+
diff --git a/src/app/routes/account/components/center/center.component.less b/src/app/routes/account/components/center/center.component.less
new file mode 100644
index 00000000..96f8b59c
--- /dev/null
+++ b/src/app/routes/account/components/center/center.component.less
@@ -0,0 +1,46 @@
+:host {
+ ::ng-deep {
+ .info-main {
+ padding: 30px;
+ }
+ .info-main h3 {
+ margin-bottom: 30px;
+ color: #333;
+ font-size: 24px;
+ }
+ .info {
+ position: relative;
+ }
+ .info-btn {
+ position: absolute;
+ top: 20px;
+ right: 20px;
+ }
+ .item-btn {
+ width: 28px;
+ text-align: center;
+ }
+ .li-label {
+ color: #333;
+ font-weight: bold;
+ font-size: 14px;
+ }
+ page-grid {
+ background-color: #f0f3f7;
+
+ div.container {
+ width: 80%;
+ margin: 0 auto;
+ padding: 1rem;
+ }
+ }
+ }
+ .info-row {
+ padding: 24px 0;
+ .info-icon {
+ margin-right: 15px;
+ color: #3875fb;
+ font-size: 16px;
+ }
+ }
+}
diff --git a/src/app/routes/account/components/center/center.component.spec.ts b/src/app/routes/account/components/center/center.component.spec.ts
new file mode 100644
index 00000000..cdcb358d
--- /dev/null
+++ b/src/app/routes/account/components/center/center.component.spec.ts
@@ -0,0 +1,23 @@
+import { async, ComponentFixture, TestBed } from '@angular/core/testing';
+import { AccountComponentsCenterComponent } from './center.component';
+
+describe('AccountComponentsCenterComponent', () => {
+ let component: AccountComponentsCenterComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(async(() => {
+ TestBed.configureTestingModule({
+ declarations: [AccountComponentsCenterComponent],
+ }).compileComponents();
+ }));
+
+ beforeEach(() => {
+ fixture = TestBed.createComponent(AccountComponentsCenterComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/src/app/routes/account/components/center/center.component.ts b/src/app/routes/account/components/center/center.component.ts
new file mode 100644
index 00000000..713b106b
--- /dev/null
+++ b/src/app/routes/account/components/center/center.component.ts
@@ -0,0 +1,202 @@
+import { Component, OnInit, ViewChild } from '@angular/core';
+import { Router } from '@angular/router';
+import { SFComponent, SFSchema, SFSelectWidgetSchema, SFUISchema, SFUploadWidgetSchema } from '@delon/form';
+import { ModalHelper, _HttpClient } from '@delon/theme';
+import { Observable, Observer } from 'rxjs';
+import { AccountService } from '../../services/account.service';
+import { AccountComponentsEditNameComponent } from '../edit-name/edit-name.component';
+import { NzModalService } from 'ng-zorro-antd/modal';
+import { AccountComponentsCenterEditComponent } from '../edit-password/edit-password.component';
+
+@Component({
+ selector: 'app-account-components-center',
+ templateUrl: './center.component.html',
+ styleUrls: ['./center.component.less'],
+})
+export class AccountComponentsCenterComponent implements OnInit {
+ url = `/rule?_allow_anonymous=true`;
+ @ViewChild('sf', { static: false }) sf!: SFComponent;
+ i: any;
+ formDate: any = {};
+ schema!: SFSchema;
+ ui: SFUISchema = {};
+ infoData: any = {
+ appId: '',
+ appTypeId: 0,
+ appTypeName: '',
+ appUserId: 0,
+ avatar: 'https://zos.alipayobjects.com/rmsportal/ODTLcjxAfvqbxHnVXCYX.png?_allow_anonymous=true',
+ birthday: '',
+ cert: 0,
+ createTime: '',
+ email: '',
+ id: 0,
+ isPwd: true,
+ lastLoginDate: '',
+ name: '',
+ nickName: '',
+ openId: '',
+ phone: '',
+ remark: '',
+ sex: 0,
+ state: 0,
+ stateLocked: true,
+ token: '',
+ userType: 0,
+ };
+ tabs = [
+ {
+ name: '基本设置',
+ },
+ {
+ name: '安全设置',
+ },
+ ];
+ idx: any = 0;
+ constructor(public service: AccountService, private modal: ModalHelper, private http: _HttpClient, private router: Router, private modalService: NzModalService,) {}
+
+ ngOnInit() {
+ this.initSF();
+ this.getInfo();
+ }
+ initSF() {
+ this.schema = {
+ properties: {
+ avatar: {
+ type: 'string',
+ title: '头像',
+ ui: {
+ action: `/cms/upload/multipartFile/fileModel?_allow_anonymous=true`,
+ fileType: 'image/png,image/jpeg,image/jpg,image/png,image/gif,image/bmp',
+ limit: 1,
+ limitFileCount: 1,
+ resReName: 'url',
+ urlReName: 'url',
+ widget: 'upload',
+ descriptionI18n: '支持JPG、GIF、PNG、JPEG、BMP格式,文件小于2M',
+ data: {
+ // appId: environment.appId,
+ },
+ name: 'multipartFile',
+ multiple: false,
+ listType: 'picture-card',
+ change: (args: any) => {
+ if (args.type === 'success') {
+ const avatar = [
+ {
+ uid: -1,
+ name: 'LOGO',
+ status: 'done',
+ url: args.fileList[0].response.url,
+ response: {
+ url: args.fileList[0].response.url,
+ },
+ },
+ ];
+ this.sf?.setValue('/avatar', avatar);
+ }
+ },
+ beforeUpload: (file: any, _fileList) => {
+ return new Observable((observer: Observer) => {
+ const isLt2M = file.size / 1024 / 1024 < 2;
+ if (!isLt2M) {
+ this.service.msgSrv.warning('图片大小超过2M!');
+ observer.complete();
+ return;
+ }
+ observer.next(isLt2M);
+ observer.complete();
+ });
+ },
+ } as SFUploadWidgetSchema,
+ },
+ nickName: {
+ title: '昵称',
+ type: 'string',
+ minLength: 1,
+ maxLength: 18,
+ ui: {
+ placeholder: '请输入昵称',
+ width: 400,
+ errors: {
+ required: '请输入昵称',
+ },
+ },
+ },
+ },
+ required: ['nickName', 'avatar'],
+ };
+ this.ui = {
+ '*': {
+ spanLabel: 5,
+ grid: { span: 24 },
+ },
+ };
+ }
+ getInfo() {
+ this.service.http.post(this.service.$api_get_current_user_info).subscribe((res) => {
+ this.infoData = res.data;
+ });
+ }
+
+ edit(tpye: string) {
+ if (tpye === 'phone') {
+ const modalRef = this.modalService.create({
+ nzTitle: '验证手机号码',
+ nzContent: AccountComponentsEditNameComponent,
+ nzComponentParams: {
+ i: this.infoData
+ },
+ nzFooter: null
+ });
+ modalRef.afterClose.subscribe((result: any) => {
+ if (result === true) {
+ // this.st.load(1);
+ }
+ });
+ }
+ if (tpye === 'password') {
+
+ const modalRef = this.modalService.create({
+ nzTitle: '设置/修改登录密码',
+ nzContent: AccountComponentsCenterEditComponent,
+ nzComponentParams: {
+ record: this.infoData
+ },
+ });
+ modalRef.afterClose.subscribe((result: any) => {
+ if (result === true) {
+ // this.st.load(1);
+ }
+ });
+ }
+ // if (tpye === 'info') {
+ // this.router.navigate(['/account/editInfo'], {
+ // queryParams: { realName: this.infoData.realName, certificateNumber: this.infoData.certificateNumber },
+ // });
+ // }
+ // if (tpye === 'name') {
+ // this.modal
+ // .createStatic(AccountComponentsEditNameComponent, { i: { name: this.infoData.name, phone: this.infoData.phone } })
+ // .subscribe(() => {
+ // this.getInfo();
+ // // this.st.reload();
+ // });
+ // }
+ }
+
+ changeType(type: number): void {
+ this.idx = type;
+ }
+
+ formSubmit(value: any): void {
+ const params = { ...value };
+ this.service.request(`${this.service.$api_get_current_user_info}`, params).subscribe((res) => {
+ if (res === true) {
+ this.service.msgSrv.success('保存成功');
+ this.getInfo();
+ // this.initSF();
+ }
+ });
+ }
+}
diff --git a/src/app/routes/account/components/edit-name/edit-name.component.html b/src/app/routes/account/components/edit-name/edit-name.component.html
new file mode 100644
index 00000000..a300858e
--- /dev/null
+++ b/src/app/routes/account/components/edit-name/edit-name.component.html
@@ -0,0 +1,75 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/app/routes/account/components/edit-name/edit-name.component.less b/src/app/routes/account/components/edit-name/edit-name.component.less
new file mode 100644
index 00000000..2c58b9fb
--- /dev/null
+++ b/src/app/routes/account/components/edit-name/edit-name.component.less
@@ -0,0 +1,20 @@
+:host {
+ .valid-code {
+ position: relative;
+ }
+ .btn-code {
+ position: absolute;
+ top: 0;
+ right: 0;
+ z-index: 9;
+ }
+ .valid-code2 {
+ position: relative;
+ }
+ .btn-code2 {
+ position: absolute;
+ top: 0;
+ right: 0;
+ z-index: 9;
+ }
+}
diff --git a/src/app/routes/account/components/edit-name/edit-name.component.spec.ts b/src/app/routes/account/components/edit-name/edit-name.component.spec.ts
new file mode 100644
index 00000000..a5f8d13a
--- /dev/null
+++ b/src/app/routes/account/components/edit-name/edit-name.component.spec.ts
@@ -0,0 +1,34 @@
+/*
+ * @Description :
+ * @Version : 1.0
+ * @Author : Shiming
+ * @Date : 2021-11-29 11:06:01
+ * @LastEditors : Shiming
+ * @LastEditTime : 2022-01-18 17:14:44
+ * @FilePath : \\tms-obc-web\\src\\app\\routes\\account\\components\\edit-name\\edit-name.component.spec.ts
+ * Copyright (C) 2022 huzhenhong. All rights reserved.
+ */
+
+import { async, ComponentFixture, TestBed } from '@angular/core/testing';
+import { AccountComponentsEditNameComponent } from './edit-name.component';
+
+describe('AccountComponentsEditNameComponent', () => {
+ let component: AccountComponentsEditNameComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(async(() => {
+ TestBed.configureTestingModule({
+ declarations: [AccountComponentsEditNameComponent],
+ }).compileComponents();
+ }));
+
+ beforeEach(() => {
+ fixture = TestBed.createComponent(AccountComponentsEditNameComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/src/app/routes/account/components/edit-name/edit-name.component.ts b/src/app/routes/account/components/edit-name/edit-name.component.ts
new file mode 100644
index 00000000..fdc0d05e
--- /dev/null
+++ b/src/app/routes/account/components/edit-name/edit-name.component.ts
@@ -0,0 +1,271 @@
+import { AfterViewInit, ChangeDetectorRef, Component, OnInit, ViewChild } from '@angular/core';
+import { ErrorData, SFComponent, SFSchema, SFStringWidgetSchema, SFUISchema } from '@delon/form';
+import { _HttpClient } from '@delon/theme';
+// import { CaptchaComponent } from '@shared';
+import { NzMessageService } from 'ng-zorro-antd/message';
+import { NzModalRef } from 'ng-zorro-antd/modal';
+import { interval, Observable, Observer } from 'rxjs';
+import { take } from 'rxjs/operators';
+import { AccountService } from '../../services/account.service';
+
+@Component({
+ selector: 'app-account-components-edit-name',
+ templateUrl: './edit-name.component.html',
+ styleUrls: ['./edit-name.component.less'],
+})
+export class AccountComponentsEditNameComponent implements OnInit, AfterViewInit {
+ // @ViewChild('dun', { static: false })
+ // private dun!: CaptchaComponent;
+ @ViewChild('sf', { static: false }) sf!: SFComponent;
+ @ViewChild('sfView', { static: false }) sfView!: SFComponent;
+ record: any = {};
+ i: any;
+ schema!: SFSchema;
+ schemaView!: SFSchema;
+ ui!: SFUISchema;
+ uiView: SFUISchema = {};
+ isVisibleView = false;
+ isVisibleOk = false;
+ formData: any = {};
+ count = 0;
+ count2 = 0;
+ oldName: any;
+ voucher: any;
+ codeTips: any;
+ interval$: any;
+
+ constructor(private modal: NzModalRef, public msgSrv: NzMessageService, public http: _HttpClient, public service: AccountService,private cdr: ChangeDetectorRef,) {}
+ ngAfterViewInit(): void {
+ // this.dun.init();
+ }
+
+ ngOnInit() {
+ this.codeTips = '为了账户安全,需您的手机验证(' + this.i?.phone + ')';
+ this.formData.oldName = this.i?.phone;
+ this.initSF();
+ this.initSFNew();
+ // this.getInfo();
+ }
+ initSF() {
+ this.schema = {
+ properties: {
+ oldName: {
+ title: '手机号',
+ type: 'string',
+ default: this.formData?.oldName,
+ ui: {
+ widget: 'text',
+ },
+ },
+ // userName: {
+ // title: '用户名(新)',
+ // type: 'string',
+ // minLength: 3,
+ // maxLength: 30,
+ // description: '3-30个字符,支持中英文、数字、符号“_”和“-”,只能修改一次',
+ // ui: {
+ // placeholder: '请输入新用户名',
+ // errors: {
+ // required: '请输入新用户名',
+ // },
+ // } as SFStringWidgetSchema,
+ // },
+ smsVerifyCode: {
+ title: '验证码',
+ type: 'string',
+ maxLength: 6,
+ minLength: 6,
+ description: this.codeTips,
+ ui: {
+ widget: 'custom',
+ placeholder: '请输入验证码',
+ errors: {
+ required: '请输入6位数字验证码',
+ minLength: '请输入6位数字验证码',
+ },
+ },
+ },
+ },
+ required: ['userName', 'smsVerifyCode'],
+ };
+ this.ui = {
+ '*': {
+ spanLabelFixed: 100,
+ grid: { span: 24 },
+ },
+ };
+ }
+ initSFNew() {
+ this.schemaView = {
+ properties: {
+ phone: {
+ title: '新手机号',
+ type: 'string',
+ format: 'mobile',
+ maxLength: 11,
+ ui: {
+ placeholder: '请输入新手机号',
+ errors: {
+ required: '请输入新手机号',
+ },
+ } as SFStringWidgetSchema,
+ },
+ smsVerifyCode: {
+ title: '验证码',
+ type: 'string',
+ maxLength: 6,
+ minLength: 6,
+ ui: {
+ widget: 'custom',
+ placeholder: '请输入验证码',
+ errors: {
+ required: '请输入6位验证码',
+ minLength: '请输入6位验证码',
+ },
+ },
+ },
+ },
+ required: ['phone', 'smsVerifyCode'],
+ };
+ this.uiView = {
+ '*': {
+ spanLabelFixed: 100,
+ grid: { span: 24 },
+ },
+ };
+ }
+
+ getCaptcha() {
+ const params = {
+ // phoneNumber: phone
+ };
+ this.service.request(this.service.$api_get_current_user_smVerification, params, 'POST', true, 'FORM').subscribe((res) => {
+ // code==503046 弹出网易盾
+ if (res && res.code === '1') {
+ this.service.msgSrv.success('发送成功');
+ this.createInterval();
+ } else if (res.code === '503046') {
+ // this.dun.popUp();
+ } else {
+ this.service.msgSrv.success(res.msg);
+ }
+ });
+ }
+
+ getCaptcha2() {
+ const params = {
+ phoneNumber: this.sfView.value.phone
+ };
+ this.service.request(this.service.$api_get_getSMVerificationCode, params, 'POST', true, 'FORM').subscribe((res) => {
+ // code==503046 弹出网易盾
+ if (res && res.code === '1') {
+ this.service.msgSrv.success('发送成功');
+ this.createInterval2();
+ } else if (res.code === '503046') {
+ // this.dun.popUp();
+ } else {
+ this.service.msgSrv.success(res.msg);
+ }
+ });
+ }
+
+ // /* code倒计时 */
+ // codeCountDown() {
+ // this.count = 59;
+ // this.interval$ = setInterval(() => {
+ // this.count -= 1;
+ // if (this.count <= 0) {
+ // clearInterval(this.interval$);
+ // }
+ // }, 1000);
+ // }
+ private createInterval() {
+ this.count = 59;
+ interval(1000)
+ .pipe(take(60))
+ .subscribe((x: any) => {
+ this.count = 59 - (x + 1);
+ this.cdr.detectChanges();
+ });
+ }
+ private createInterval2() {
+ this.count2 = 59;
+ interval(1000)
+ .pipe(take(60))
+ .subscribe((x: any) => {
+ this.count2 = 59 - (x + 1);
+ this.cdr.detectChanges();
+ });
+ }
+ // codeCountDown2() {
+ // this.count2 = 59;
+ // this.interval$ = setInterval(() => {
+ // this.count2 -= 1;
+ // if (this.count <= 0) {
+ // clearInterval(this.interval$);
+ // }
+ // }, 1000);
+ // }
+ /* 网易盾验证通过 */
+ captchaDone(validate: any) {
+ this.createInterval();
+ }
+
+ getInfo() {
+ const params = {
+ // id: this.i.id,
+ };
+ this.service.http.post(this.service.$api_get_current_user_info, params).subscribe((res) => {
+ // if (res) {
+ // this.getCaptcha(res.data.phone);
+ // }
+ });
+ }
+
+ close() {
+ this.modal.destroy();
+ }
+ submitForm() {
+ const params = {
+ smsVerifyCode: this.sf.value.smsVerifyCode,
+ };
+
+ this.service.http.post(this.service.$api_get_verifyPhone, params).subscribe((res) => {
+ if (res.success) {
+ // this.modal.close(true);
+ this.voucher = res.data.voucher
+ this.isVisibleView = true
+ } else {
+ this.service.msgSrv.error(res.msg)
+ }
+ });
+ }
+ handleCancel(type: string) {
+ if(type === '1') {
+ this.isVisibleView = false
+ } else if(type === '2') {
+ console.log(type)
+ } else if(type === '3') {
+ this.modal.close()
+ }
+ }
+ handleOK() {
+
+ }
+ handleNew() {
+ if(!this.sfView.valid) {
+ return;
+ }
+ const params = {
+ voucher: this.voucher,
+ ...this.sfView.value,
+ }
+ this.service.http.post(this.service.$api_set_voucherUpdatePhone, params).subscribe((res) => {
+ if (res.success) {
+ this.isVisibleOk = true;
+ } else {
+ this.service.msgSrv.error(res.msg)
+ }
+ });
+ }
+}
diff --git a/src/app/routes/account/components/edit-password/edit-password.component.html b/src/app/routes/account/components/edit-password/edit-password.component.html
new file mode 100644
index 00000000..0fd3cc15
--- /dev/null
+++ b/src/app/routes/account/components/edit-password/edit-password.component.html
@@ -0,0 +1,94 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/app/routes/account/components/edit-password/edit-password.component.ts b/src/app/routes/account/components/edit-password/edit-password.component.ts
new file mode 100644
index 00000000..3f4cd9b7
--- /dev/null
+++ b/src/app/routes/account/components/edit-password/edit-password.component.ts
@@ -0,0 +1,130 @@
+/*
+ * @Description :
+ * @Version : 1.0
+ * @Author : Shiming
+ * @Date : 2021-12-27 10:30:56
+ * @LastEditors : Shiming
+ * @LastEditTime : 2022-01-18 17:14:54
+ * @FilePath : \\tms-obc-web\\src\\app\\routes\\account\\components\\edit-password\\edit-password.component.ts
+ * Copyright (C) 2022 huzhenhong. All rights reserved.
+ */
+
+import { Component, Inject, OnInit, ViewChild } from '@angular/core';
+import { FormBuilder, FormControl, FormGroup, ValidatorFn, Validators } from '@angular/forms';
+import { ActivatedRoute, Router } from '@angular/router';
+import { STChange, STColumn, STComponent, STData, STRequestOptions } from '@delon/abc/st';
+import { DA_SERVICE_TOKEN, ITokenService } from '@delon/auth';
+
+import { SFComponent, SFSchema, SFSelectWidgetSchema, SFUISchema } from '@delon/form';
+import { NzDrawerRef, NzDrawerService } from 'ng-zorro-antd/drawer';
+import { NzFormTooltipIcon } from 'ng-zorro-antd/form';
+import { NzModalRef } from 'ng-zorro-antd/modal';
+import { AccountService } from '../../services/account.service';
+
+@Component({
+ selector: 'app-account-components-edit',
+ templateUrl: './edit-password.component.html'
+})
+export class AccountComponentsCenterEditComponent implements OnInit {
+ validateForm!: FormGroup;
+ record: any;
+ count = 0;
+ type = 'create';
+ isVisibleView = false
+ passwordVisible = false;
+ passwordVisible2 = false;
+ password: any;
+ password2: any;
+ interval$: any;
+ confirmationValidator =
+ (control: FormControl): { [s: string]: boolean } => {
+ if (!control.value) {
+ return { required: true };
+ } else if (control?.value !== this.validateForm?.value?.passWord) {
+ return { confirm: true, error: true };
+ }
+ return {};
+ };
+ captchaTooltipIcon: NzFormTooltipIcon = {
+ type: 'info-circle',
+ theme: 'twotone'
+ };
+ constructor(
+ public router: Router,
+ public ar: ActivatedRoute,
+ private modalRef: NzModalRef,
+ private fb: FormBuilder,
+ public service: AccountService,
+ @Inject(DA_SERVICE_TOKEN) private tokenService: ITokenService
+ ) {}
+
+ ngOnInit() {
+ this.initForm();
+ }
+ initForm () {
+ this.validateForm = this.fb.group({
+ passWord: [null,
+ [
+ Validators.required,
+ Validators.maxLength(16),
+ Validators.minLength(8),
+ Validators.pattern('^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z-_]{8,16}$')
+ ]],
+ passWordTo: [null, [ Validators.required, Validators.maxLength(16), Validators.minLength(8), this.confirmationValidator,]],
+ smsVerifyCode: [null, [Validators.required]],
+ });
+}
+ destroyModal(): void {
+ this.modalRef.destroy();
+ }
+ getCaptcha(e: MouseEvent): void {
+ this.service.request(this.service.$api_get_current_user_smVerification).subscribe(res => {
+ // code==503046 弹出网易盾
+ if (res && res.code === '1') {
+ this.service.msgSrv.success('发送成功');
+ e.preventDefault();
+ this.codeCountDown();
+ }else {
+ this.service.msgSrv.success(res.msg);
+ }
+ });
+ }
+ save() {
+ if(!this.validateForm.valid) {
+ this.service.msgSrv.warning('必填项为空或格式错误,请检查!')
+ return;
+ }
+ const params = {
+ ...this.validateForm.value
+ };
+ this.service.request(this.service.$api_set_phoneUpdatePassword, params).subscribe((res) => {
+ if (res) {
+ this.service.msgSrv.success('修改密码成功!');
+ this.isVisibleView = true;
+ setTimeout(() => {
+ this.tokenService.clear();
+ this.router.navigate(['/passport/login'])
+ this.modalRef.close()
+ }, 3000)
+ }
+ });
+ }
+ /* code倒计时 */
+ codeCountDown() {
+ this.count = 59;
+ this.interval$ = setInterval(() => {
+ this.count -= 1;
+ if (this.count <= 0) {
+ clearInterval(this.interval$);
+ }
+ }, 1000);
+ }
+ handleCancel() {
+ this.isVisibleView = false
+ }
+ handleOK() {
+ this.modalRef.close()
+ this.tokenService.clear();
+ this.router.navigate(['/passport/login'])
+ }
+}
diff --git a/src/app/routes/account/services/account.service.ts b/src/app/routes/account/services/account.service.ts
new file mode 100644
index 00000000..69608398
--- /dev/null
+++ b/src/app/routes/account/services/account.service.ts
@@ -0,0 +1,42 @@
+/*
+ * @Description :
+ * @Version : 1.0
+ * @Author : Shiming
+ * @Date : 2021-12-27 10:30:56
+ * @LastEditors : Shiming
+ * @LastEditTime : 2022-01-18 17:14:59
+ * @FilePath : \\tms-obc-web\\src\\app\\routes\\account\\services\\account.service.ts
+ * Copyright (C) 2022 huzhenhong. All rights reserved.
+ */
+
+import { Injectable, Injector } from '@angular/core';
+import { _HttpClient } from '@delon/theme';
+import { NzMessageService } from 'ng-zorro-antd/message';
+import { map } from 'rxjs/operators';
+import { BaseService } from 'src/app/shared/services/core/base.service';
+import { EAFileUtil } from 'src/app/shared/utils/file.util';
+
+@Injectable({
+ providedIn: 'root',
+})
+export class AccountService extends BaseService {
+
+ // 获取当前登录用户详情
+ $api_get_current_user_info = `/api/mdc/cuc/user/getUserInfo`;
+
+ // 根据当前登录用户绑定的手机号码获取短信验证码
+ $api_get_current_user_smVerification = `/api/mdc/pbc/smsSend/getSmVerificationCodeByToken`;
+ // 获取短信验证码
+ $api_get_getSMVerificationCode = `/api/mdc/pbc/smsSend/getSMVerificationCode`;
+
+ // 验证手机号
+ $api_get_verifyPhone = `/api/mdc/cuc/userBasicInfo/forgetPassword/verifyPhone`;
+
+ // 凭证修改手机号
+ $api_set_voucherUpdatePhone = `/api/mdc/cuc/userBasicInfo/forgetPassword/voucherUpdatePhone`;
+ // 凭证修改密码
+ $api_set_phoneUpdatePassword = `/api/mdc/cuc/userBasicInfo/phoneUpdatePassword`;
+ constructor(public injector: Injector) {
+ super(injector);
+ }
+}
diff --git a/src/app/routes/commom/components/basic-table/basic-table.component.ts b/src/app/routes/commom/components/basic-table/basic-table.component.ts
new file mode 100644
index 00000000..99def7f4
--- /dev/null
+++ b/src/app/routes/commom/components/basic-table/basic-table.component.ts
@@ -0,0 +1,40 @@
+import { AfterViewInit, Component, OnInit } from '@angular/core';
+import { fromEvent } from 'rxjs';
+import { debounceTime } from 'rxjs/operators';
+
+@Component({
+ template: ''
+})
+export class BasicTableComponent implements AfterViewInit {
+ scrollY = '400px';
+
+ constructor() {}
+
+ ngAfterViewInit(): void {
+ setTimeout(() => {
+ this.getScrollY();
+ }, 100);
+ fromEvent(window, 'resize')
+ .pipe(debounceTime(100))
+ .subscribe(event => {
+ this.getScrollY();
+ });
+ }
+
+ getScrollY() {
+ const windowHeight = window.innerHeight || Math.max(document.documentElement.clientHeight, document.body.clientHeight);
+ const header = document.getElementsByTagName('layout-pro-header')?.[0];
+ if (windowHeight && header) {
+ let scrollY = windowHeight - header.clientHeight - 35 - 49;
+ const headerWrapper = document.getElementsByTagName('page-header-wrapper')?.[0];
+ if (headerWrapper) {
+ scrollY -= headerWrapper.clientHeight;
+ }
+ const tabset = document.getElementsByTagName('nz-tabset')?.[0];
+ if (tabset) {
+ scrollY -= tabset.clientHeight;
+ }
+ this.scrollY = scrollY + 'px';
+ }
+ }
+}
diff --git a/src/app/routes/commom/less/basic-board.less b/src/app/routes/commom/less/basic-board.less
new file mode 100644
index 00000000..84354724
--- /dev/null
+++ b/src/app/routes/commom/less/basic-board.less
@@ -0,0 +1,5 @@
+:host::ng-deep {
+ .ant-form-item {
+ margin-bottom: 0;
+ }
+}
\ No newline at end of file
diff --git a/src/app/routes/commom/less/box.less b/src/app/routes/commom/less/box.less
new file mode 100644
index 00000000..b4da38e9
--- /dev/null
+++ b/src/app/routes/commom/less/box.less
@@ -0,0 +1,42 @@
+:host::ng-deep {
+ .search-box {
+ .ant-card-body {
+ padding-bottom: 18px;
+ }
+ }
+
+ .content-box {
+ .ant-card-body {
+ padding-top: 0;
+ }
+ }
+
+ nz-range-picker {
+ width: 100%;
+ }
+
+ .ant-tabs-tab-btn {
+ padding-right: 16px;
+ padding-left : 16px;
+ }
+
+ .text-truncate {
+ white-space: normal;
+ }
+
+ .bold {
+ .ant-statistic-title {
+ font-weight: 600;
+ color : #000;
+ font-size : 16px;
+ }
+ }
+}
+
+.total-footer {
+ position : absolute;
+ bottom : 25px;
+ height : 32px;
+ margin : 16px 0;
+ line-height: 32px;
+}
\ No newline at end of file
diff --git a/src/app/routes/commom/less/commom-table.less b/src/app/routes/commom/less/commom-table.less
new file mode 100644
index 00000000..1eb73d94
--- /dev/null
+++ b/src/app/routes/commom/less/commom-table.less
@@ -0,0 +1,70 @@
+:host {
+ ::ng-deep {
+ nz-card {
+ margin: -24px -24px 0;
+
+ .ant-tabs-nav {
+ margin: 0;
+ }
+ }
+
+ .ant-tabs-tab {
+ margin: 0 0 0 16px;
+ padding: 12px 0;
+ }
+
+ .ant-table-body {
+ border-bottom: 1px solid #f0f0f0;
+ }
+
+ .table-box {
+ .ant-card-body {
+ padding: 0;
+ }
+ }
+
+ .ant-table-pagination.ant-pagination {
+ margin: 8px;
+ }
+
+ .ant-table-thead > tr > th,
+ .ant-table-tbody > tr > td,
+ .ant-table tfoot > tr > th,
+ .ant-table tfoot > tr > td {
+ padding: 8px;
+ }
+
+ .ant-table.ant-table-bordered > .ant-table-container {
+ border-top: 0;
+ }
+
+ .ant-pagination-item {
+ min-width: 24px;
+ height: 24px;
+ line-height: 21px;
+ }
+
+ .ant-pagination-total-text {
+ height: 24px;
+ line-height: 24px;
+ }
+
+ .ant-pagination-prev,
+ .ant-pagination-next,
+ .ant-pagination-jump-prev,
+ .ant-pagination-jump-next {
+ min-width: 24px;
+ height: 24px;
+ line-height: 21px;
+ }
+
+ .ant-select-single:not(.ant-select-customize-input) .ant-select-selector {
+ height: 24px;
+ }
+
+ .ant-select-single .ant-select-selector .ant-select-selection-item,
+ .ant-select-single .ant-select-selector .ant-select-selection-placeholder {
+ line-height: 21px;
+ }
+ }
+}
diff --git a/src/app/routes/commom/less/expend-but.less b/src/app/routes/commom/less/expend-but.less
new file mode 100644
index 00000000..f454e789
--- /dev/null
+++ b/src/app/routes/commom/less/expend-but.less
@@ -0,0 +1,13 @@
+.expend-options {
+ margin-top: 0;
+}
+
+
+@media (min-width: 1200px) {
+ .expend-options {
+ position : absolute;
+ right : 0;
+ bottom : 25px;
+ max-width: 450px;
+ }
+}
\ No newline at end of file
diff --git a/src/app/routes/commom/less/trajectory.less b/src/app/routes/commom/less/trajectory.less
new file mode 100644
index 00000000..17519018
--- /dev/null
+++ b/src/app/routes/commom/less/trajectory.less
@@ -0,0 +1,48 @@
+:host::ng-deep {
+ .text-truncate {
+ white-space: normal;
+ }
+
+ .map_st {
+ max-height: 350px;
+ max-width : 360px;
+ position : absolute;
+ top : 20px;
+ right : 49px;
+ }
+
+ .map_radio {
+ position : absolute;
+ top : 20px;
+ left : 20px;
+ background : #F4F4F5;
+ box-shadow : 0px 2px 8px 1px rgb(0 0 0 / 10%);
+ border-radius: 4px 4px 4px 4px;
+
+ .ant-radio-button-wrapper {
+ background: #F4F4F5;
+ border : unset;
+ }
+
+ .ant-radio-button-wrapper-checked {
+ color : #CF3834;
+ background: #ffffff;
+ }
+
+ .ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled)::before {
+ background-color: #d9d9d9;
+ }
+ }
+}
+
+.detail_title {
+ font-size : 16px;
+ font-weight: 500;
+ color : #252A3D;
+ line-height: 24px;
+
+ span {
+ color : #E60012;
+ font-weight: 700;
+ }
+}
\ No newline at end of file
diff --git a/src/app/routes/contract-management/components/contract-detail/contract-detail.component.html b/src/app/routes/contract-management/components/contract-detail/contract-detail.component.html
new file mode 100644
index 00000000..dfdcf8f2
--- /dev/null
+++ b/src/app/routes/contract-management/components/contract-detail/contract-detail.component.html
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/app/routes/contract-management/components/contract-detail/contract-detail.component.less b/src/app/routes/contract-management/components/contract-detail/contract-detail.component.less
new file mode 100644
index 00000000..ed026470
--- /dev/null
+++ b/src/app/routes/contract-management/components/contract-detail/contract-detail.component.less
@@ -0,0 +1,4 @@
+.title {
+padding-right: 4px;
+padding-left: 14px !important;
+}
\ No newline at end of file
diff --git a/src/app/routes/contract-management/components/contract-detail/contract-detail.component.spec.ts b/src/app/routes/contract-management/components/contract-detail/contract-detail.component.spec.ts
new file mode 100644
index 00000000..e4586857
--- /dev/null
+++ b/src/app/routes/contract-management/components/contract-detail/contract-detail.component.spec.ts
@@ -0,0 +1,34 @@
+/*
+ * @Description :
+ * @Version : 1.0
+ * @Author : Shiming
+ * @Date : 2022-01-10 14:44:57
+ * @LastEditors : Shiming
+ * @LastEditTime : 2022-01-18 17:15:18
+ * @FilePath : \\tms-obc-web\\src\\app\\routes\\contract-management\\components\\contract-detail\\contract-detail.component.spec.ts
+ * Copyright (C) 2022 huzhenhong. All rights reserved.
+ */
+
+import { async, ComponentFixture, TestBed } from '@angular/core/testing';
+import { ContractManagementDetailComponent } from './contract-detail.component';
+
+describe('ContractManagementDetailComponent', () => {
+ let component: ContractManagementDetailComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(async(() => {
+ TestBed.configureTestingModule({
+ declarations: [ContractManagementDetailComponent],
+ }).compileComponents();
+ }));
+
+ beforeEach(() => {
+ fixture = TestBed.createComponent(ContractManagementDetailComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/src/app/routes/contract-management/components/contract-detail/contract-detail.component.ts b/src/app/routes/contract-management/components/contract-detail/contract-detail.component.ts
new file mode 100644
index 00000000..2070a2e2
--- /dev/null
+++ b/src/app/routes/contract-management/components/contract-detail/contract-detail.component.ts
@@ -0,0 +1,59 @@
+/*
+ * @Description :
+ * @Version : 1.0
+ * @Author : Shiming
+ * @Date : 2022-01-10 14:44:57
+ * @LastEditors : Shiming
+ * @LastEditTime : 2022-01-18 17:15:43
+ * @FilePath : \\tms-obc-web\\src\\app\\routes\\contract-management\\components\\contract-detail\\contract-detail.component.ts
+ * Copyright (C) 2022 huzhenhong. All rights reserved.
+ */
+import { DatePipe } from '@angular/common';
+import { Component, OnInit } from '@angular/core';
+import { ActivatedRoute, Router } from '@angular/router';
+import { NzModalService } from 'ng-zorro-antd/modal';
+import { ContractManagementService } from '../../services/contract-management.service';
+
+@Component({
+ selector: 'app-contract-management-detail-complaint',
+ templateUrl: './contract-detail.component.html',
+ styleUrls: ['./contract-detail.component.less'],
+ providers: [DatePipe]
+})
+export class ContractManagementDetailComponent implements OnInit {
+ constructor(
+ private nzModalService: NzModalService,
+ public service: ContractManagementService,
+ public route: ActivatedRoute,
+ private datePipe: DatePipe,
+ private router: Router
+ ) {}
+ textStatus = '合同详情';
+ name: any;
+ code: any;
+ templateHTML: any;
+ detailList: any = {
+ templateName: ''
+ };
+ ngOnInit() {
+ this.initData(this.service.$api_contract_get);
+ }
+ goBack() {
+ window.history.go(-1);
+ }
+
+ initData(url: string) {
+ this.service.request(url, { id: this.route.snapshot.params.id }).subscribe(res => {
+ if (res) {
+ this.detailList = res;
+ this.detailList = res;
+ let value: any = JSON.parse(res.contractParameter);
+ this.code = value['${code}'];
+ this.name = value['${name}'];
+ }
+ });
+ }
+ cancel() {
+ window.history.go(-1);
+ }
+}
diff --git a/src/app/routes/contract-management/components/contract-frame/contract-frame.component.html b/src/app/routes/contract-management/components/contract-frame/contract-frame.component.html
new file mode 100644
index 00000000..37e24dfb
--- /dev/null
+++ b/src/app/routes/contract-management/components/contract-frame/contract-frame.component.html
@@ -0,0 +1,101 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item?.contractCode }}
+
+
+
+
+
+
+
diff --git a/src/app/routes/contract-management/components/contract-frame/contract-frame.component.less b/src/app/routes/contract-management/components/contract-frame/contract-frame.component.less
new file mode 100644
index 00000000..7151df68
--- /dev/null
+++ b/src/app/routes/contract-management/components/contract-frame/contract-frame.component.less
@@ -0,0 +1,35 @@
+:host::ng-deep {
+ .search-box {
+ .ant-card-body {
+ padding-bottom: 18px;
+ }
+ }
+
+ .content-box {
+ .ant-card-body {
+ padding-top: 0;
+ }
+ }
+
+ nz-range-picker {
+ width: 100%;
+ }
+
+ .ant-tabs-tab-btn {
+ padding-right: 16px;
+ padding-left : 16px;
+ }
+}
+
+.expend-options {
+ margin-top: 0;
+}
+
+
+@media (min-width: 1200px) {
+ .expend-options {
+ z-index : -99;
+ margin-top: -40px;
+ }
+
+}
\ No newline at end of file
diff --git a/src/app/routes/contract-management/components/contract-frame/contract-frame.component.ts b/src/app/routes/contract-management/components/contract-frame/contract-frame.component.ts
new file mode 100644
index 00000000..0a13f444
--- /dev/null
+++ b/src/app/routes/contract-management/components/contract-frame/contract-frame.component.ts
@@ -0,0 +1,307 @@
+import { DatePipe } from '@angular/common';
+import { Component, OnInit, ViewChild } from '@angular/core';
+import { Router } from '@angular/router';
+import { STComponent, STColumn, STChange } from '@delon/abc/st';
+import { SFComponent, SFSchema, SFDateWidgetSchema, SFUISchema, SFSelectWidgetSchema } from '@delon/form';
+import { ShipperBaseService } from '@shared';
+import { NzModalService } from 'ng-zorro-antd/modal';
+import { ContractManagementService } from '../../services/contract-management.service';
+
+@Component({
+ selector: 'app-contract-management-contract-frame',
+ templateUrl: './contract-frame.component.html',
+ styleUrls: ['./contract-frame.component.less'],
+ providers: [DatePipe]
+})
+export class ContractManagementFrameComponent implements OnInit {
+ url = `/rule?_allow_anonymous=true`;
+ @ViewChild('st', { static: true })
+ st!: STComponent;
+ @ViewChild('sf', { static: false })
+ sf!: SFComponent;
+ @ViewChild('auditModal', { static: false })
+ auditModal!: any;
+ schema: SFSchema = {};
+ columns: STColumn[] = [];
+ ui: SFUISchema = {};
+ _$expand = false;
+ selectedRows: any[] = [];
+ isLoading: boolean = false;
+ constructor(
+ public service: ContractManagementService,
+ private nzModalService: NzModalService,
+ private router: Router,
+ public shipperservice: ShipperBaseService,
+ private datePipe: DatePipe,
+ ) { }
+
+ ngOnInit(): void {
+ this.initST();
+ this.initSF();
+ }
+ /**
+* 查询参数
+*/
+ get reqParams() {
+ const params = {
+ ...this.sf?.value,
+ }
+ delete params.signTime;
+ delete params._$expand;
+ if (this.datePipe.transform(this.sf?.value?.signTime?.[0], 'yyyy-MM-dd HH:mm:ss') && this.datePipe.transform(this.sf?.value?.signTime?.[1], 'yyyy-MM-dd HH:mm:ss')) {
+ params.signTime = {
+ start: this.datePipe.transform(this.sf?.value?.signTime?.[0], 'yyyy-MM-dd HH:mm:ss'),
+ end: this.datePipe.transform(this.sf?.value?.signTime?.[1], 'yyyy-MM-dd HH:mm:ss'),
+ }
+ }
+ if (this.datePipe.transform(this.sf?.value?.effectiveEndTime?.[0], 'yyyy-MM-dd HH:mm:ss') && this.datePipe.transform(this.sf?.value?.effectiveEndTime?.[1], 'yyyy-MM-dd HH:mm:ss')) {
+ params.effectiveEndTime = {
+ start: this.datePipe.transform(this.sf?.value?.effectiveEndTime?.[0], 'yyyy-MM-dd HH:mm:ss'),
+ end: this.datePipe.transform(this.sf?.value?.effectiveEndTime?.[1], 'yyyy-MM-dd HH:mm:ss'),
+ }
+ }
+ return {
+ ...params
+ };
+ }
+ /**
+ * 初始化数据列表
+ */
+ initST() {
+ this.columns = [
+ {
+ title: '合同编号',
+ width: '100px',
+ className: 'text-center',
+ render: 'contractCode'
+ },
+ {
+ title: '签约对象',
+ width: '100px',
+ className: 'text-center',
+ index: 'signingObjectLabel'
+ },
+ {
+ title: '合同类型',
+ width: '100px',
+ className: 'text-center',
+ index: 'contractTypeLabel'
+ },
+ {
+ title: '合同名称',
+ width: '100px',
+ className: 'text-center',
+ index: 'contractName'
+ },
+ { title: '网络货运人', index: 'enterpriseInfoName', width: '120px', className: 'text-center' },
+ { title: '合同对象', index: 'contractObjectName', width: '120px', className: 'text-center' },
+ {
+ title: '有效期至',
+ className: 'text-center',
+ width: '120px',
+ index: 'effectiveEndTime'
+ },
+ {
+ title: '签署日期',
+ className: 'text-center',
+ width: '120px',
+ index: 'signTime'
+ },
+ {
+ title: '状态',
+ className: 'text-center',
+ width: '120px',
+ type: 'badge',
+ index: 'esignFlowStatus',
+ badge: {
+ '0': { text: '未发起', color: 'default' },
+ '1': { text: '待签章', color: 'default' },
+ '2': { text: '已生效', color: 'success' },
+ '3': { text: '已撤销', color: 'warning' },
+ '4': { text: '已作废', color: 'warning' },
+ '5': { text: '已过期', color: 'warning' },
+ '7': { text: '已拒签', color: 'warning' }
+ }
+ }
+ ];
+ }
+ /**
+ * 初始化查询表单
+ */
+ initSF() {
+ this.schema = {
+ properties: {
+ _$expand: { type: 'boolean', ui: { hidden: true } },
+ contractCode: {
+ type: 'string',
+ title: '合同编号'
+ },
+ signingObject: {
+ type: 'string',
+ title: '签约对象',
+ enum: [
+ { label: '全部', value: '' },
+ { label: '货主', value: 1 },
+ { label: '司机', value: 2 },
+ ],
+ ui: {
+ widget: 'select',
+ placeholder: '请选择',
+ }
+ },
+ contractType: {
+ title: '合同类型',
+ type: 'string',
+ default: '',
+ ui: {
+ widget: 'dict-select',
+ containsAllLable: true,
+ params: { dictKey: 'contract:type' },
+ containAllLable: true,
+ } as SFSelectWidgetSchema,
+ },
+ enterpriseInfoId: {
+ type: 'string',
+ title: '网络货运人',
+ ui: {
+ widget: 'select',
+ placeholder: '请选择',
+ allowClear: true,
+ visibleIf: {
+ _$expand: (value: boolean) => value
+ },
+ asyncData: () => this.shipperservice.getNetworkFreightForwarder()
+ }
+ },
+ contractObjectName: {
+ type: 'string',
+ title: '合同对象',
+ ui: {
+ visibleIf: {
+ _$expand: (value: boolean) => value,
+ },
+ }
+ },
+ signTime: {
+ title: '签署日期',
+ type: 'string',
+ ui: {
+ widget: 'custom',
+ visibleIf: {
+ _$expand: (value: boolean) => value,
+ },
+ }
+ },
+ effectiveEndTime: {
+ title: '有效期',
+ type: 'string',
+ ui: {
+ widget: 'custom',
+ visibleIf: {
+ _$expand: (value: boolean) => value,
+ },
+ }
+ },
+ esignFlowStatus: {
+ title: '状态',
+ type: 'string',
+ default: '',
+ ui: {
+ widget: 'dict-select',
+ containsAllLable: true,
+ params: { dictKey: 'esign:flow:status' },
+ containAllLable: true,
+ visibleIf: {
+ _$expand: (value: boolean) => value,
+ },
+ } as SFSelectWidgetSchema,
+ },
+ },
+ type: 'object'
+ };
+ this.ui = { '*': { spanLabelFixed: 110, grid: { span: 8, gutter: 4 } } };
+ }
+ /**
+ * 查询字段个数
+ */
+ get queryFieldCount(): number {
+ return Object.keys(this.schema?.properties || {}).length;
+ }
+ stChange(e: STChange): void {
+ switch (e.type) {
+ case 'checkbox':
+ this.selectedRows = e.checkbox!;
+ break;
+ case 'filter':
+ this.st.load();
+ break;
+ }
+ }
+
+ approval(): void { }
+
+ add(): void { }
+
+ routeTo(item: any) {
+ this.router.navigate(['/ticket/invoice-requested-detail/1']);
+ }
+
+ auditAction(item: any) {
+ const modal = this.nzModalService.create({
+ nzTitle: '审核',
+ nzContent: this.auditModal,
+ nzFooter: [
+ {
+ label: '拒绝',
+ type: 'default',
+ onClick: () => {
+ modal.destroy();
+ }
+ },
+ {
+ label: '通过',
+ type: 'primary',
+ onClick: () => {
+ modal.destroy();
+ }
+ }
+ ]
+ });
+ modal.afterClose.subscribe(res => {
+ this.st.load();
+ });
+ }
+
+ showReason(item: any) {
+ const modal = this.nzModalService.create({
+ nzTitle: '查看原因',
+ nzContent: '运单数据异常,暂时无法开票,请联系客服400-xxxx-xxxx',
+ nzFooter: [
+ {
+ label: '关闭',
+ type: 'primary',
+ onClick: () => {
+ modal.destroy();
+ }
+ }
+ ]
+ });
+ }
+
+ /**
+ * 重置表单
+ */
+ resetSF() {
+ this.sf.reset();
+ this._$expand = false;
+ this.isLoading = true;
+ }
+
+ /**
+ * 伸缩查询条件
+ */
+ expandToggle(): void {
+ this._$expand = !this._$expand;
+ this.sf?.setValue('/_$expand', this._$expand);
+ }
+}
diff --git a/src/app/routes/contract-management/components/contract-list/contract-list.component.html b/src/app/routes/contract-management/components/contract-list/contract-list.component.html
new file mode 100644
index 00000000..0876e5cf
--- /dev/null
+++ b/src/app/routes/contract-management/components/contract-list/contract-list.component.html
@@ -0,0 +1,73 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item?.contractCode }}
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/app/routes/contract-management/components/contract-list/contract-list.component.less b/src/app/routes/contract-management/components/contract-list/contract-list.component.less
new file mode 100644
index 00000000..e275a512
--- /dev/null
+++ b/src/app/routes/contract-management/components/contract-list/contract-list.component.less
@@ -0,0 +1,35 @@
+:host::ng-deep {
+ .search-box {
+ .ant-card-body {
+ padding-bottom: 18px;
+ }
+ }
+
+ .content-box {
+ .ant-card-body {
+ padding-top: 0;
+ }
+ }
+
+ nz-range-picker {
+ width: 100%;
+ }
+
+ .ant-tabs-tab-btn {
+ padding-left : 16px;
+ padding-right: 16px;
+ }
+}
+
+.expend-options {
+ margin-top: 0px;
+}
+
+
+@media (min-width: 1200px) {
+ .expend-options {
+ margin-top: -40px;
+ z-index : -99;
+ }
+
+}
\ No newline at end of file
diff --git a/src/app/routes/contract-management/components/contract-list/contract-list.component.ts b/src/app/routes/contract-management/components/contract-list/contract-list.component.ts
new file mode 100644
index 00000000..f2b2d049
--- /dev/null
+++ b/src/app/routes/contract-management/components/contract-list/contract-list.component.ts
@@ -0,0 +1,297 @@
+import { Component, OnInit, ViewChild } from '@angular/core';
+import { Router } from '@angular/router';
+import { STComponent, STColumn, STChange } from '@delon/abc/st';
+import { SFComponent, SFSchema, SFDateWidgetSchema, SFUISchema, SFSelectWidgetSchema } from '@delon/form';
+import { NzModalService } from 'ng-zorro-antd/modal';
+import { ContractManagementService } from '../../services/contract-management.service';
+import { DatePipe } from '@angular/common';
+import { ShipperBaseService } from '@shared';
+
+@Component({
+ selector: 'app-contract-management-contract-list',
+ templateUrl: './contract-list.component.html',
+ styleUrls: ['./contract-list.component.less'],
+ providers: [DatePipe]
+})
+export class ContractManagementContractListComponent implements OnInit {
+ url = `/rule?_allow_anonymous=true`;
+ @ViewChild('st', { static: true })
+ st!: STComponent;
+ @ViewChild('sf', { static: false })
+ sf!: SFComponent;
+ @ViewChild('auditModal', { static: false })
+ auditModal!: any;
+ schema: SFSchema = {};
+ columns: STColumn[] = [];
+ ui: SFUISchema = {};
+ _$expand = false;
+ isLoading: boolean = false;
+ /**
+ * 查询参数
+ */
+ get reqParams() {
+ const params = {
+ ...this.sf?.value,
+ }
+ delete params.signTime;
+ delete params._$expand;
+ if (this.datePipe.transform(this.sf?.value?.signTime?.[0], 'yyyy-MM-dd HH:mm:ss') && this.datePipe.transform(this.sf?.value?.signTime?.[1], 'yyyy-MM-dd HH:mm:ss')) {
+ params.signTime = {
+ start: this.datePipe.transform(this.sf?.value?.signTime?.[0], 'yyyy-MM-dd HH:mm:ss'),
+ end: this.datePipe.transform(this.sf?.value?.signTime?.[1], 'yyyy-MM-dd HH:mm:ss'),
+ }
+ }
+ return {
+ ...params
+ };
+ }
+ selectedRows: any[] = [];
+ constructor(
+ public service: ContractManagementService,
+ private nzModalService: NzModalService,
+ public shipperservice: ShipperBaseService,
+ private router: Router,
+ private datePipe: DatePipe,
+ ) { }
+
+ ngOnInit(): void {
+ this.initST()
+ this.initSF()
+ }
+ /**
+ * 初始化数据列表
+ */
+ initST() {
+ this.columns = [
+ {
+ title: '合同编号',
+ width: '100px',
+ className: 'text-center',
+ render: 'contractCode'
+ },
+ {
+ title: '签约对象',
+ width: '100px',
+ className: 'text-center',
+ index: 'signingObjectLabel'
+ },
+ {
+ title: '合同类型',
+ width: '100px',
+ className: 'text-center',
+ index: 'contractName'
+ },
+ {
+ title: '业务单号',
+ className: 'text-center',
+ width: '120px',
+ index: 'businessCode'
+ },
+ {
+ title: '签署日期',
+ className: 'text-center',
+ width: '120px',
+ index: 'signTime'
+ },
+ {
+ title: '状态',
+ className: 'text-center',
+ width: '120px',
+ type: 'badge',
+ index: 'esignFlowStatus',
+ badge: {
+ '0': { text: '未发起', color: 'default' },
+ '1': { text: '待签章', color: 'default' },
+ '2': { text: '已生效', color: 'success' },
+ '3': { text: '已撤销', color: 'warning' },
+ '4': { text: '已作废', color: 'warning' },
+ '5': { text: '已过期', color: 'warning' },
+ '7': { text: '已拒签', color: 'warning' },
+ },
+ },
+
+ ];
+ }
+ /**
+* 初始化查询表单
+*/
+ initSF() {
+ this.schema = {
+ properties: {
+ _$expand: { type: 'boolean', ui: { hidden: true } },
+ contractCode: {
+ type: 'string',
+ title: '合同编号',
+ },
+ businessCode: {
+ type: 'string',
+ title: '业务单号'
+ },
+ signingObject: {
+ type: 'string',
+ title: '签约对象',
+ enum: [
+ { label: '全部', value: '' },
+ { label: '货主', value: 1 },
+ { label: '司机', value: 2 }
+ ],
+ ui: {
+ widget: 'select',
+ placeholder: '请选择'
+ }
+ },
+ contractType: {
+ title: '合同类型',
+ type: 'string',
+ default: '',
+ ui: {
+ widget: 'dict-select',
+ containsAllLable: true,
+ params: { dictKey: 'contract:type' },
+ visibleIf: {
+ _$expand: (value: boolean) => value
+ },
+ containAllLable: true,
+ } as SFSelectWidgetSchema
+ },
+ resourceType: {
+ title: '货源类型',
+ type: 'string',
+ default: '',
+ ui: {
+ widget: 'dict-select',
+ params: { dictKey: 'goodresource:type' },
+ containsAllLable: true,
+ visibleIf: {
+ _$expand: (value: boolean) => value
+ },
+ } as SFSelectWidgetSchema,
+ },
+ enterpriseInfoId: {
+ type: 'string',
+ title: '网络货运人',
+ ui: {
+ widget: 'select',
+ placeholder: '请选择',
+ allowClear: true,
+ visibleIf: {
+ _$expand: (value: boolean) => value
+ },
+ asyncData: () => this.shipperservice.getNetworkFreightForwarder()
+ }
+ },
+ contractObjectName: {
+ type: 'string',
+ title: '合同对象',
+ ui: {
+ visibleIf: {
+ _$expand: (value: boolean) => value,
+ },
+ }
+ },
+ signTime: {
+ title: '签署日期',
+ type: 'string',
+ ui: {
+ widget: 'sl-from-to-search',
+ format: 'yyyy-MM-dd',
+ visibleIf: {
+ _$expand: (value: boolean) => value,
+ },
+ } as SFDateWidgetSchema,
+ },
+ esignFlowStatus: {
+ title: '状态',
+ type: 'string',
+ default: '',
+ ui: {
+ widget: 'dict-select',
+ params: { dictKey: 'esign:flow:status' },
+ containsAllLable: true,
+ visibleIf: {
+ _$expand: (value: boolean) => value
+ },
+ } as SFSelectWidgetSchema,
+ },
+ },
+ type: 'object',
+ };
+ this.ui = { '*': { spanLabelFixed: 110, grid: { span: 8, gutter: 4 } } };
+ }
+ /**
+* 查询字段个数
+*/
+ get queryFieldCount(): number {
+ return Object.keys(this.schema?.properties || {}).length;
+ }
+ stChange(e: STChange): void {
+ switch (e.type) {
+ case 'checkbox':
+ this.selectedRows = e.checkbox!;
+ break;
+ case 'filter':
+ this.st.load();
+ break;
+ }
+ }
+ routeTo(item: any) {
+ this.router.navigate(['/ticket/invoice-requested-detail/1']);
+ }
+
+ auditAction(item: any) {
+ const modal = this.nzModalService.create({
+ nzTitle: '审核',
+ nzContent: this.auditModal,
+ nzFooter: [
+ {
+ label: '拒绝',
+ type: 'default',
+ onClick: () => {
+ modal.destroy();
+ }
+ },
+ {
+ label: '通过',
+ type: 'primary',
+ onClick: () => {
+ modal.destroy();
+ }
+ }
+ ]
+ });
+ modal.afterClose.subscribe(res => {
+ this.st.load();
+ });
+ }
+
+ showReason(item: any) {
+ const modal = this.nzModalService.create({
+ nzTitle: '查看原因',
+ nzContent: '运单数据异常,暂时无法开票,请联系客服400-xxxx-xxxx',
+ nzFooter: [
+ {
+ label: '关闭',
+ type: 'primary',
+ onClick: () => {
+ modal.destroy();
+ }
+ }
+ ]
+ });
+ }
+ /**
+ * 重置表单
+ */
+ resetSF() {
+ this.sf.reset();
+ this._$expand = false;
+ this.isLoading = true
+ }
+ /**
+ * 伸缩查询条件
+ */
+ expandToggle(): void {
+ this._$expand = !this._$expand;
+ this.sf?.setValue('/_$expand', this._$expand);
+ }
+}
diff --git a/src/app/routes/contract-management/components/contract-partner/contract-partner.component.html b/src/app/routes/contract-management/components/contract-partner/contract-partner.component.html
new file mode 100644
index 00000000..4b5e20cd
--- /dev/null
+++ b/src/app/routes/contract-management/components/contract-partner/contract-partner.component.html
@@ -0,0 +1,101 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item?.contractCode }}
+
+
+
+
+
+
+
diff --git a/src/app/routes/contract-management/components/contract-partner/contract-partner.component.less b/src/app/routes/contract-management/components/contract-partner/contract-partner.component.less
new file mode 100644
index 00000000..7151df68
--- /dev/null
+++ b/src/app/routes/contract-management/components/contract-partner/contract-partner.component.less
@@ -0,0 +1,35 @@
+:host::ng-deep {
+ .search-box {
+ .ant-card-body {
+ padding-bottom: 18px;
+ }
+ }
+
+ .content-box {
+ .ant-card-body {
+ padding-top: 0;
+ }
+ }
+
+ nz-range-picker {
+ width: 100%;
+ }
+
+ .ant-tabs-tab-btn {
+ padding-right: 16px;
+ padding-left : 16px;
+ }
+}
+
+.expend-options {
+ margin-top: 0;
+}
+
+
+@media (min-width: 1200px) {
+ .expend-options {
+ z-index : -99;
+ margin-top: -40px;
+ }
+
+}
\ No newline at end of file
diff --git a/src/app/routes/contract-management/components/contract-partner/contract-partner.component.ts b/src/app/routes/contract-management/components/contract-partner/contract-partner.component.ts
new file mode 100644
index 00000000..5517e3f9
--- /dev/null
+++ b/src/app/routes/contract-management/components/contract-partner/contract-partner.component.ts
@@ -0,0 +1,305 @@
+import { DatePipe } from '@angular/common';
+import { Component, OnInit, ViewChild } from '@angular/core';
+import { Router } from '@angular/router';
+import { STComponent, STColumn, STChange } from '@delon/abc/st';
+import { SFComponent, SFSchema, SFDateWidgetSchema, SFUISchema, SFSelectWidgetSchema } from '@delon/form';
+import { ShipperBaseService } from '@shared';
+import { NzModalService } from 'ng-zorro-antd/modal';
+import { ContractManagementService } from '../../services/contract-management.service';
+
+@Component({
+ selector: 'app-contract-management-contract-partner',
+ templateUrl: './contract-partner.component.html',
+ styleUrls: ['./contract-partner.component.less'],
+ providers: [DatePipe]
+})
+export class ContractManagementPartnerComponent implements OnInit {
+ url = `/rule?_allow_anonymous=true`;
+ @ViewChild('st', { static: true })
+ st!: STComponent;
+ @ViewChild('sf', { static: false })
+ sf!: SFComponent;
+ @ViewChild('auditModal', { static: false })
+ auditModal!: any;
+ schema: SFSchema = {};
+ columns: STColumn[] = [];
+ ui: SFUISchema = {};
+ _$expand = false;
+ selectedRows: any[] = [];
+ constructor(
+ public service: ContractManagementService,
+ private nzModalService: NzModalService,
+ private router: Router,
+ public shipperservice: ShipperBaseService,
+ private datePipe: DatePipe,
+ ) {}
+
+ ngOnInit(): void {
+ this.initST();
+ this.initSF();
+ }
+ /**
+ * 查询参数
+ */
+ get reqParams() {
+ const params = {
+ ...this.sf?.value,
+ }
+ delete params.signTime;
+ delete params._$expand;
+ if(this.datePipe.transform(this.sf?.value?.signTime?.[0], 'yyyy-MM-dd HH:mm:ss') && this.datePipe.transform(this.sf?.value?.signTime?.[1], 'yyyy-MM-dd HH:mm:ss')) {
+ params.signTime = {
+ start: this.datePipe.transform(this.sf?.value?.signTime?.[0], 'yyyy-MM-dd HH:mm:ss'),
+ end: this.datePipe.transform(this.sf?.value?.signTime?.[1], 'yyyy-MM-dd HH:mm:ss'),
+ }
+ }
+ if(this.datePipe.transform(this.sf?.value?.effectiveEndTime?.[0], 'yyyy-MM-dd HH:mm:ss') && this.datePipe.transform(this.sf?.value?.effectiveEndTime?.[1], 'yyyy-MM-dd HH:mm:ss')) {
+ params.effectiveEndTime = {
+ start: this.datePipe.transform(this.sf?.value?.effectiveEndTime?.[0], 'yyyy-MM-dd HH:mm:ss'),
+ end: this.datePipe.transform(this.sf?.value?.effectiveEndTime?.[1], 'yyyy-MM-dd HH:mm:ss'),
+ }
+ }
+ return {
+ ...params
+ };
+ }
+ /**
+ * 初始化数据列表
+ */
+ initST() {
+ this.columns = [
+ {
+ title: '合同编号',
+ width: '100px',
+ className: 'text-center',
+ render: 'contractCode'
+ },
+ {
+ title: '签约对象',
+ width: '100px',
+ className: 'text-center',
+ index: 'signingObjectLabel'
+ },
+ {
+ title: '合同类型',
+ width: '100px',
+ className: 'text-center',
+ index: 'contractType'
+ },
+ { title: '合同名称', index: 'contractName', width: '120px', className: 'text-center' },
+ { title: '网络货运人', index: 'enterpriseInfoName', width: '120px', className: 'text-center' },
+ {
+ title: '合同对象',
+ className: 'text-center',
+ width: '120px',
+ index: 'contractObjectName'
+ },
+ {
+ title: '有效期至',
+ className: 'text-center',
+ width: '120px',
+ index: 'effectiveEndTime'
+ },
+ {
+ title: '签署日期',
+ className: 'text-center',
+ width: '120px',
+ index: 'signTime'
+ },
+ {
+ title: '状态',
+ className: 'text-center',
+ width: '120px',
+ type: 'badge',
+ index: 'esignFlowStatus',
+ badge: {
+ '0': { text: '未发起', color: 'default' },
+ '1': { text: '待签章', color: 'default' },
+ '2': { text: '已生效', color: 'success' },
+ '3': { text: '已撤销', color: 'warning' },
+ '4': { text: '已作废', color: 'warning' },
+ '5': { text: '已过期', color: 'warning' },
+ '7': { text: '已拒签', color: 'warning' }
+ }
+ }
+ ];
+ }
+ /**
+ * 初始化查询表单
+ */
+ initSF() {
+ this.schema = {
+ properties: {
+ _$expand: { type: 'boolean', ui: { hidden: true } },
+ contractCode: {
+ type: 'string',
+ title: '合同编号'
+ },
+ signingObject: {
+ type: 'string',
+ title: '签约对象',
+ enum: [
+ { label: '全部', value: '' },
+ { label: '货主', value: 1 },
+ { label: '司机', value: 2 }
+ ],
+ ui: {
+ widget: 'select',
+ placeholder: '请选择'
+ }
+ },
+ contractType: {
+ title: '合同类型',
+ type: 'string',
+ default: '',
+ ui: {
+ widget: 'dict-select',
+ containsAllLable: true,
+ params: { dictKey: 'contract:type' },
+ containAllLable: true,
+ } as SFSelectWidgetSchema
+ },
+ enterpriseInfoId: {
+ type: 'string',
+ title: '网络货运人',
+ ui: {
+ widget: 'select',
+ placeholder: '请选择',
+ allowClear: true,
+ visibleIf: {
+ _$expand: (value: boolean) => value
+ },
+ asyncData: () => this.shipperservice.getNetworkFreightForwarder()
+ }
+ },
+ contractObjectName: {
+ type: 'string',
+ title: '合同对象',
+ ui: {
+ visibleIf: {
+ _$expand: (value: boolean) => value
+ }
+ }
+ },
+ signTime: {
+ title: '签署日期',
+ type: 'string',
+ ui: {
+ widget: 'custom',
+ visibleIf: {
+ _$expand: (value: boolean) => value
+ }
+ }
+ },
+ effectiveEndTime: {
+ title: '有效期',
+ type: 'string',
+ ui: {
+ widget: 'custom',
+ visibleIf: {
+ _$expand: (value: boolean) => value,
+ },
+ }
+ },
+ esignFlowStatus: {
+ title: '状态',
+ type: 'string',
+ default: '',
+ ui: {
+ widget: 'dict-select',
+ containsAllLable: true,
+ params: { dictKey: 'esign:flow:status' },
+ containAllLable: true,
+ visibleIf: {
+ _$expand: (value: boolean) => value
+ }
+ } as SFSelectWidgetSchema
+ }
+ },
+ type: 'object'
+ };
+ this.ui = { '*': { spanLabelFixed: 110, grid: { span: 8, gutter: 4 } } };
+ }
+ /**
+ * 查询字段个数
+ */
+ get queryFieldCount(): number {
+ return Object.keys(this.schema?.properties || {}).length;
+ }
+ stChange(e: STChange): void {
+ switch (e.type) {
+ case 'checkbox':
+ this.selectedRows = e.checkbox!;
+ break;
+ case 'filter':
+ this.st.load();
+ break;
+ }
+ }
+
+ approval(): void {}
+
+ add(): void {}
+
+ routeTo(item: any) {
+ this.router.navigate(['/ticket/invoice-requested-detail/1']);
+ }
+
+ auditAction(item: any) {
+ const modal = this.nzModalService.create({
+ nzTitle: '审核',
+ nzContent: this.auditModal,
+ nzFooter: [
+ {
+ label: '拒绝',
+ type: 'default',
+ onClick: () => {
+ modal.destroy();
+ }
+ },
+ {
+ label: '通过',
+ type: 'primary',
+ onClick: () => {
+ modal.destroy();
+ }
+ }
+ ]
+ });
+ modal.afterClose.subscribe(res => {
+ this.st.load();
+ });
+ }
+
+ showReason(item: any) {
+ const modal = this.nzModalService.create({
+ nzTitle: '查看原因',
+ nzContent: '运单数据异常,暂时无法开票,请联系客服400-xxxx-xxxx',
+ nzFooter: [
+ {
+ label: '关闭',
+ type: 'primary',
+ onClick: () => {
+ modal.destroy();
+ }
+ }
+ ]
+ });
+ }
+
+ /**
+ * 重置表单
+ */
+ resetSF() {
+ this.sf.reset();
+ this._$expand = false;
+ }
+
+ /**
+ * 伸缩查询条件
+ */
+ expandToggle(): void {
+ this._$expand = !this._$expand;
+ this.sf?.setValue('/_$expand', this._$expand);
+ }
+}
diff --git a/src/app/routes/contract-management/components/contract-template-detail/contract-template-detail.component.html b/src/app/routes/contract-management/components/contract-template-detail/contract-template-detail.component.html
new file mode 100644
index 00000000..ced6ae5c
--- /dev/null
+++ b/src/app/routes/contract-management/components/contract-template-detail/contract-template-detail.component.html
@@ -0,0 +1,57 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/app/routes/contract-management/components/contract-template-detail/contract-template-detail.component.less b/src/app/routes/contract-management/components/contract-template-detail/contract-template-detail.component.less
new file mode 100644
index 00000000..ed026470
--- /dev/null
+++ b/src/app/routes/contract-management/components/contract-template-detail/contract-template-detail.component.less
@@ -0,0 +1,4 @@
+.title {
+padding-right: 4px;
+padding-left: 14px !important;
+}
\ No newline at end of file
diff --git a/src/app/routes/contract-management/components/contract-template-detail/contract-template-detail.component.spec.ts b/src/app/routes/contract-management/components/contract-template-detail/contract-template-detail.component.spec.ts
new file mode 100644
index 00000000..0dff5ef3
--- /dev/null
+++ b/src/app/routes/contract-management/components/contract-template-detail/contract-template-detail.component.spec.ts
@@ -0,0 +1,34 @@
+/*
+ * @Description :
+ * @Version : 1.0
+ * @Author : Shiming
+ * @Date : 2022-01-05 11:01:55
+ * @LastEditors : Shiming
+ * @LastEditTime : 2022-01-18 17:16:31
+ * @FilePath : \\tms-obc-web\\src\\app\\routes\\contract-management\\components\\contract-template-detail\\contract-template-detail.component.spec.ts
+ * Copyright (C) 2022 huzhenhong. All rights reserved.
+ */
+
+import { async, ComponentFixture, TestBed } from '@angular/core/testing';
+import { ContractManagementTemplateDetailComponent } from './contract-template-detail.component';
+
+describe('ContractManagementTemplateDetailComponent', () => {
+ let component: ContractManagementTemplateDetailComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(async(() => {
+ TestBed.configureTestingModule({
+ declarations: [ContractManagementTemplateDetailComponent],
+ }).compileComponents();
+ }));
+
+ beforeEach(() => {
+ fixture = TestBed.createComponent(ContractManagementTemplateDetailComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/src/app/routes/contract-management/components/contract-template-detail/contract-template-detail.component.ts b/src/app/routes/contract-management/components/contract-template-detail/contract-template-detail.component.ts
new file mode 100644
index 00000000..a942aff9
--- /dev/null
+++ b/src/app/routes/contract-management/components/contract-template-detail/contract-template-detail.component.ts
@@ -0,0 +1,248 @@
+import { OnChanges } from '@angular/core';
+/*
+ * @Description :
+ * @Version : 1.0
+ * @Author : Shiming
+ * @Date : 2022-01-05 11:01:55
+ * @LastEditors : Shiming
+ * @LastEditTime : 2022-03-30 10:45:19
+ * @FilePath : \\tms-obc-web\\src\\app\\routes\\contract-management\\components\\contract-template-detail\\contract-template-detail.component.ts
+ * Copyright (C) 2022 huzhenhong. All rights reserved.
+ */
+import { DatePipe } from '@angular/common';
+import { Component, OnInit, ViewChild } from '@angular/core';
+import { ActivatedRoute, Router } from '@angular/router';
+import { SFComponent, SFSchema, SFSelectWidgetSchema, SFUISchema } from '@delon/form';
+import { ShipperBaseService } from '@shared';
+import { NzModalService } from 'ng-zorro-antd/modal';
+import { ContractManagementService } from '../../services/contract-management.service';
+
+@Component({
+ selector: 'app-contract-management-template-text-complaint',
+ templateUrl: './contract-template-detail.component.html',
+ styleUrls: ['./contract-template-detail.component.less'],
+ providers: [DatePipe]
+})
+export class ContractManagementTemplateTextComponent implements OnInit {
+ constructor(
+ private nzModalService: NzModalService,
+ public service: ContractManagementService,
+ public route: ActivatedRoute,
+ private datePipe: DatePipe,
+ private router: Router,
+ public shipperservice: ShipperBaseService
+ ) {}
+ textStatus = '新建模板';
+ @ViewChild('sf', { static: false }) sf!: SFComponent;
+ schema: SFSchema = {};
+ @ViewChild('sf2', { static: false }) sf2!: SFComponent;
+ schema2: SFSchema = {};
+ ui!: SFUISchema;
+ sfdata: any;
+ sfdata2: any;
+ title: any;
+ Types: any;
+ templateHTML: any;
+ detailList: any = {
+ templateName: ''
+ };
+ isUpdate = false;
+ ngOnInit() {
+ this.initSF();
+ this.initSF2();
+ if (this.route.snapshot.queryParams.status == 1) {
+ // 新建
+ this.isUpdate = true;
+ } else if (this.route.snapshot.queryParams.status == 2) {
+ // 编辑
+ this.textStatus = '编辑模板';
+ this.isUpdate = true;
+ this.initData(this.service.$api_get_contractTemplate);
+ } else if (this.route.snapshot.queryParams.status == 3) {
+ // 编辑
+ this.textStatus = '查看模板';
+ this.isUpdate = false;
+ this.initData(this.service.$api_get_contractTemplate);
+ }
+ }
+ goBack() {
+ window.history.go(-1);
+ }
+ initSF() {
+ this.schema = {
+ properties: {
+ templateName: {
+ type: 'string',
+ title: '模版名称'
+ },
+ templateType: {
+ title: '模板类型',
+ type: 'string',
+ enum: [
+ { label: '框架合同', value: 'KJ' },
+ { label: '明细合同', value: 'MX' },
+ { label: '合伙人合同', value: 'HHR' }
+ ],
+ ui: {
+ widget: 'select',
+ placeholder: '请选择',
+ change: (tag: any, org: any) => {
+ console.log(tag);
+ switch (tag) {
+ case 'MX':
+ this.Types = [
+ { label: '订单合同', value: '1' },
+ { label: '订单补充协议', value: '2' },
+ { label: '运单合同', value: '3' },
+ { label: '运单补充协议', value: '4' },
+ { label: '委托代收合同', value: '5' },
+ { label: '电子提货单', value: '10' },
+ { label: '电子卸货单', value: '11' },
+ ];
+ this.sf.getProperty('/contractType')!.schema.enum = this.Types;
+ this.sf.getProperty('/contractType')!.widget.reset(this.Types);
+ this.sf.setValue('/contractType', this.Types);
+ return;
+ break;
+ case 'KJ':
+ this.Types = [
+ { label: '网络货物运输服务合同', value: '6' },
+ { label: '运输服务承揽合同', value: '7' }
+ ];
+ this.sf.getProperty('/contractType')!.schema.enum = this.Types;
+ this.sf.getProperty('/contractType')!.widget.reset(this.Types);
+ this.sf.setValue('/contractType', this.Types);
+ return;
+ break;
+ case 'HHR':
+ this.Types = [
+ { label: '企业合伙人入驻合同', value: '8' },
+ { label: '个人合伙人入驻合同', value: '9' }
+ ];
+ this.sf.getProperty('/contractType')!.schema.enum = this.Types;
+ this.sf.getProperty('/contractType')!.widget.reset(this.Types);
+ this.sf.setValue('/contractType', this.Types);
+ return;
+ break;
+ default:
+ break;
+ }
+ }
+ }
+ },
+ signingObject: {
+ type: 'string',
+ title: '承包商对象',
+ enum: [
+ { label: '货主', value: '1' },
+ { label: '司机', value: '2' }
+ ],
+ ui: {
+ widget: 'select',
+ placeholder: '请选择'
+ }
+ },
+ contractType: {
+ title: '合同类型',
+ type: 'string',
+ enum: this.Types,
+ ui: {
+ widget: 'select',
+ placeholder: '请选择'
+ }
+ },
+ resourceType: {
+ title: '货源类型',
+ type: 'string',
+ default: '',
+ ui: {
+ widget: 'dict-select',
+ params: { dictKey: 'goodresource:type' },
+ containsAllLable: true,
+ visibleIf: {
+ templateType: value => value === 'MX'
+ }
+ } as SFSelectWidgetSchema
+ },
+ enterpriseInfoId: {
+ type: 'string',
+ title: '网络货运人',
+ ui: {
+ widget: 'select',
+ placeholder: '请选择',
+ allowClear: true,
+ visibleIf: {
+ templateType: value => value === 'KJ' || value === 'HHR'
+ },
+ asyncData: () => this.shipperservice.getNetworkFreightForwarder()
+ }
+ }
+ },
+ required: ['templateName', 'templateType']
+ };
+ this.ui = {
+ '*': {
+ spanLabelFixed: 120,
+ grid: { span: 8 }
+ }
+ };
+ }
+ initSF2(data?: any) {
+ this.schema2 = {
+ properties: {
+ templateContent: {
+ type: 'string',
+ title: '',
+ ui: {
+ widget: 'tinymce',
+ loadingTip: 'loading...',
+ config: {
+ height: 650
+ }
+ },
+ default: data?.agreementContent || ''
+ }
+ }
+ };
+ }
+ initData(url: string) {
+ console.log('编辑');
+
+ this.service.request(url, { id: this.route.snapshot.params.id }).subscribe(res => {
+ if (res) {
+ this.detailList = res;
+ this.title = this.detailList?.templateName;
+ this.sfdata = res;
+ this.sfdata2 = res;
+ }
+ });
+ }
+ cancel() {
+ window.history.go(-1);
+ }
+
+ save() {
+ // if (!this.sf.value.templateName || !this.sf.value.templateType || !this.sf2.value.templateContent || !this.title) {
+ // this.service.msgSrv.error('必填参数为空,请检查再重新保存!');
+ // return;
+ // }
+ // if (this.sf.value.templateType == 'MX') {
+ // if (this.sf.value.contractType == '') {
+ // this.service.msgSrv.error('必填参数为空,请检查再重新保存!');
+ // return;
+ // }
+ // }
+ const params = {
+ ...this.sf.value,
+ ...this.sf2.value,
+ templateTitle: this.title || this.detailList.templateName
+ };
+ console.log(params);
+ this.service.request(this.service.$api_save_contractTemplate, params).subscribe((res: any) => {
+ if (res) {
+ this.service.msgSrv.success('保存成功!');
+ this.router.navigate(['/contract-management/template']);
+ }
+ });
+ }
+}
diff --git a/src/app/routes/contract-management/components/contract-template-frame/contract-template-frame.component.html b/src/app/routes/contract-management/components/contract-template-frame/contract-template-frame.component.html
new file mode 100644
index 00000000..7246f2c3
--- /dev/null
+++ b/src/app/routes/contract-management/components/contract-template-frame/contract-template-frame.component.html
@@ -0,0 +1,87 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/app/routes/contract-management/components/contract-template-frame/contract-template-frame.component.less b/src/app/routes/contract-management/components/contract-template-frame/contract-template-frame.component.less
new file mode 100644
index 00000000..9df98f26
--- /dev/null
+++ b/src/app/routes/contract-management/components/contract-template-frame/contract-template-frame.component.less
@@ -0,0 +1,4 @@
+.NewBtn{
+ float: right;
+ margin-bottom: 15px;
+}
\ No newline at end of file
diff --git a/src/app/routes/contract-management/components/contract-template-frame/contract-template-frame.component.spec.ts b/src/app/routes/contract-management/components/contract-template-frame/contract-template-frame.component.spec.ts
new file mode 100644
index 00000000..953a80ed
--- /dev/null
+++ b/src/app/routes/contract-management/components/contract-template-frame/contract-template-frame.component.spec.ts
@@ -0,0 +1,35 @@
+/*
+ * @Description :
+ * @Version : 1.0
+ * @Author : Shiming
+ * @Date : 2022-01-05 09:45:47
+ * @LastEditors : Shiming
+ * @LastEditTime : 2022-02-24 10:25:58
+ * @FilePath : \\tms-obc-web\\src\\app\\routes\\contract-management\\components\\contract-template\\contract-template.component.spec.ts
+ * Copyright (C) 2022 huzhenhong. All rights reserved.
+ */
+
+import { waitForAsync, ComponentFixture, TestBed } from '@angular/core/testing';
+import { ContractManagementTemplateFrameComponent } from './contract-template-frame.component';
+
+describe('ContractManagementTemplateFrameComponent', () => {
+ let component: ContractManagementTemplateFrameComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(waitForAsync(() => {
+ TestBed.configureTestingModule({
+ declarations: [ ContractManagementTemplateFrameComponent ]
+ })
+ .compileComponents();
+ }));
+
+ beforeEach(() => {
+ fixture = TestBed.createComponent(ContractManagementTemplateFrameComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/src/app/routes/contract-management/components/contract-template-frame/contract-template-frame.component.ts b/src/app/routes/contract-management/components/contract-template-frame/contract-template-frame.component.ts
new file mode 100644
index 00000000..0241608e
--- /dev/null
+++ b/src/app/routes/contract-management/components/contract-template-frame/contract-template-frame.component.ts
@@ -0,0 +1,252 @@
+import { Router } from '@angular/router';
+import { Component, OnInit, ViewChild } from '@angular/core';
+import { STColumn, STComponent } from '@delon/abc/st';
+import { SFComponent, SFDateWidgetSchema, SFSchema, SFSelectWidgetSchema, SFUISchema } from '@delon/form';
+import { ModalHelper, _HttpClient } from '@delon/theme';
+import { NzModalService } from 'ng-zorro-antd/modal';
+import { map } from 'rxjs/operators';
+import { ContractManagementService } from '../../services/contract-management.service';
+
+
+@Component({
+ selector: 'app-contract-management-template-frame-complaint',
+ templateUrl: './contract-template-frame.component.html',
+ styleUrls: ['./contract-template-frame.component.less']
+})
+export class ContractManagementTemplateFrameComponent implements OnInit {
+ ui: SFUISchema = {};
+ uiView: SFUISchema = {};
+ schema: SFSchema = {};
+ schemaView: SFSchema = {};
+ auditMany = false;
+ _$expand = false;
+ channelId: any;
+ @ViewChild('st') private readonly st!: STComponent;
+ @ViewChild('sf', { static: false }) sf!: SFComponent;
+ columns: STColumn[] = [];
+ datass: any = [
+ {
+ one: '1',
+ two: '1',
+ three: '1',
+ id: 1
+ },
+ {
+ one: '2',
+ two: '2',
+ three: '2',
+ id: 2
+ },
+];
+ constructor(
+ public service: ContractManagementService,
+ private modal: NzModalService,
+ private router: Router
+ ) { }
+
+ /**
+ * 查询参数
+ */
+ get reqParams() {
+ return {
+ templateType: 'kj',
+ ...this.sf?.value,
+ };
+ }
+ get selectedRows() {
+ return this.st?.list.filter((item) => item.checked) || [];
+ }
+ ngOnInit(): void {
+ this.initSF();
+ this.initST();
+ this.initSTAudit();
+ }
+
+
+
+ /**
+ * 初始化查询表单
+ */
+ initSF() {
+ this.schema = {
+ properties: {
+ _$expand: { type: 'boolean', ui: { hidden: true } },
+ templateName: {
+ type: 'string',
+ title: '模板名称',
+ },
+ signingObject: {
+ type: 'string',
+ title: '签约对象',
+ enum: [
+ { label: '全部', value: '' },
+ { label: '货主', value: 1 },
+ { label: '司机', value: 2 }
+ ],
+ ui: {
+ widget: 'select',
+ placeholder: '请选择'
+ }
+ },
+ contractType: {
+ title: '合同类型',
+ type: 'string',
+ default: '',
+ ui: {
+ widget: 'dict-select',
+ containsAllLable: true,
+ params: { dictKey: 'contract:type' },
+ containAllLable: true,
+ } as SFSelectWidgetSchema
+ },
+ resourceType: {
+ title: '货源类型',
+ type: 'string',
+ default: '',
+ ui: {
+ widget: 'dict-select',
+ params: { dictKey: 'goodresource:type' },
+ containsAllLable: true,
+ visibleIf: {
+ _$expand: (value: boolean) => value
+ },
+ } as SFSelectWidgetSchema,
+ },
+ },
+ };
+ this.ui = { '*': { spanLabelFixed: 110, grid: { span: 8, gutter: 4 } } };
+ }
+
+ /**
+ * 初始化数据列表
+ */
+ initST() {
+ this.columns = [
+ {
+ title: '合同模板名称',
+ className: 'text-center',
+ render: 'templateName'
+ },
+ {
+ title: '签约对象',
+ width: '100px',
+ className: 'text-center',
+ index: 'signingObjectLabel'
+ },
+ {
+ title: '合同类型',
+ width: '100px',
+ className: 'text-center',
+ index: 'contractTypeLabel'
+ },
+ {
+ title: '货源类型',
+ width: '100px',
+ className: 'text-center',
+ index: 'resourceTypeLabel'
+ },
+ { title: '创建人', index: 'createUserIdLabel', width: '120px', className: 'text-center' },
+ {
+ title: '创建时间',
+ className: 'text-center',
+ index: 'createTime',
+ width: '200px'
+ },
+ {
+ title: '操作',
+ fixed: 'right',
+ width: '110px',
+ className: 'text-center',
+ buttons: [
+ {
+ text: '编辑',
+ click: (_record) => this.edit(_record),
+ acl: { ability: ['CONTRACT-TEMPLATE-edit'] },
+ },
+ {
+ text: '删除',
+ click: (_record) => this.delete(_record),
+ acl: { ability: ['CONTRACT-TEMPLATE-delete'] },
+ },
+ ],
+ },
+ ];
+ }
+ initSTAudit() {
+ this.schemaView = {
+ properties: {
+ handleResult: {
+ title: '处理结果',
+ type: 'string',
+ maxLength: 50,
+ ui: {
+ placeholder: '最多不超过50字',
+ widget: 'textarea',
+ autosize: { minRows: 3, maxRows: 6 }
+ },
+ },
+ },
+ required: ['handleResult']
+ };
+ this.uiView = { '*': { spanLabelFixed: 110, grid: { span: 24 } } };
+ }
+ /**
+ * 查询字段个数
+ */
+ get queryFieldCount(): number {
+ return Object.keys(this.schema?.properties || {}).length;
+ }
+ /**
+ * 伸缩查询条件
+ */
+ expandToggle(): void {
+ this._$expand = !this._$expand;
+ this.sf?.setValue('/_$expand', this._$expand);
+ }
+ tabChange(item: any) {
+ }
+ /**
+ * 重置表单
+ */
+ resetSF(): void {
+ this.sf.reset();
+ this._$expand = false;
+ }
+
+ edit(value: any) {
+ this.router.navigate(['/contract-management/template/text/' + value.id],{
+ queryParams: {
+ status: 2
+ }
+ })
+ }
+ creatTemplate() {
+ this.router.navigate(['/contract-management/template/text/' + 0], {
+ queryParams: {
+ status: 1
+ }
+ })
+ }
+ goBack() {
+ window.history.go(-1)
+ }
+ view(value: any) {
+ this.router.navigate(['/contract-management/template/text/' + value.id],{
+ queryParams: {
+ status: 3
+ }
+ })
+ }
+ delete(value: any) {
+ this.modal.confirm({
+ nzTitle: '删除确认',
+ nzOnOk: () =>
+ this.service.request(this.service.$api_deletebatch_contractTemplate, [value.id]).subscribe(res => {
+ if (res) {
+ this.service.msgSrv.success('删除成功!');
+ this.st.reload()
+ }
+ })
+ });
+ }
+}
diff --git a/src/app/routes/contract-management/components/contract-template-partner/contract-template-partner.component.html b/src/app/routes/contract-management/components/contract-template-partner/contract-template-partner.component.html
new file mode 100644
index 00000000..235be94d
--- /dev/null
+++ b/src/app/routes/contract-management/components/contract-template-partner/contract-template-partner.component.html
@@ -0,0 +1,83 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/app/routes/contract-management/components/contract-template-partner/contract-template-partner.component.less b/src/app/routes/contract-management/components/contract-template-partner/contract-template-partner.component.less
new file mode 100644
index 00000000..9df98f26
--- /dev/null
+++ b/src/app/routes/contract-management/components/contract-template-partner/contract-template-partner.component.less
@@ -0,0 +1,4 @@
+.NewBtn{
+ float: right;
+ margin-bottom: 15px;
+}
\ No newline at end of file
diff --git a/src/app/routes/contract-management/components/contract-template-partner/contract-template-partner.component.spec.ts b/src/app/routes/contract-management/components/contract-template-partner/contract-template-partner.component.spec.ts
new file mode 100644
index 00000000..8d20aa3b
--- /dev/null
+++ b/src/app/routes/contract-management/components/contract-template-partner/contract-template-partner.component.spec.ts
@@ -0,0 +1,35 @@
+/*
+ * @Description :
+ * @Version : 1.0
+ * @Author : Shiming
+ * @Date : 2022-01-05 09:45:47
+ * @LastEditors : Shiming
+ * @LastEditTime : 2022-02-24 14:09:28
+ * @FilePath : \\tms-obc-web\\src\\app\\routes\\contract-management\\components\\contract-template-partner\\contract-template-partner.component.spec.ts
+ * Copyright (C) 2022 huzhenhong. All rights reserved.
+ */
+
+import { waitForAsync, ComponentFixture, TestBed } from '@angular/core/testing';
+import { ContractManagementTemplatePartnerComponent } from './contract-template-partner.component';
+
+describe('ContractManagementTemplatePartnerComponent', () => {
+ let component: ContractManagementTemplatePartnerComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(waitForAsync(() => {
+ TestBed.configureTestingModule({
+ declarations: [ ContractManagementTemplatePartnerComponent ]
+ })
+ .compileComponents();
+ }));
+
+ beforeEach(() => {
+ fixture = TestBed.createComponent(ContractManagementTemplatePartnerComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/src/app/routes/contract-management/components/contract-template-partner/contract-template-partner.component.ts b/src/app/routes/contract-management/components/contract-template-partner/contract-template-partner.component.ts
new file mode 100644
index 00000000..24d93d4e
--- /dev/null
+++ b/src/app/routes/contract-management/components/contract-template-partner/contract-template-partner.component.ts
@@ -0,0 +1,252 @@
+import { Router } from '@angular/router';
+import { Component, OnInit, ViewChild } from '@angular/core';
+import { STColumn, STComponent } from '@delon/abc/st';
+import { SFComponent, SFDateWidgetSchema, SFSchema, SFSelectWidgetSchema, SFUISchema } from '@delon/form';
+import { ModalHelper, _HttpClient } from '@delon/theme';
+import { NzModalService } from 'ng-zorro-antd/modal';
+import { map } from 'rxjs/operators';
+import { ContractManagementService } from '../../services/contract-management.service';
+
+
+@Component({
+ selector: 'app-contract-management-template-partner-complaint',
+ templateUrl: './contract-template-partner.component.html',
+ styleUrls: ['./contract-template-partner.component.less']
+})
+export class ContractManagementTemplatePartnerComponent implements OnInit {
+ ui: SFUISchema = {};
+ uiView: SFUISchema = {};
+ schema: SFSchema = {};
+ schemaView: SFSchema = {};
+ auditMany = false;
+ _$expand = false;
+ channelId: any;
+ @ViewChild('st') private readonly st!: STComponent;
+ @ViewChild('sf', { static: false }) sf!: SFComponent;
+ columns: STColumn[] = [];
+ datass: any = [
+ {
+ one: '1',
+ two: '1',
+ three: '1',
+ id: 1
+ },
+ {
+ one: '2',
+ two: '2',
+ three: '2',
+ id: 2
+ },
+];
+ constructor(
+ public service: ContractManagementService,
+ private modal: NzModalService,
+ private router: Router
+ ) { }
+
+ /**
+ * 查询参数
+ */
+ get reqParams() {
+ return {
+ templateType: 'HHR',
+ ...this.sf?.value,
+ };
+ }
+ get selectedRows() {
+ return this.st?.list.filter((item) => item.checked) || [];
+ }
+ ngOnInit(): void {
+ this.initSF();
+ this.initST();
+ this.initSTAudit();
+ }
+
+
+
+ /**
+ * 初始化查询表单
+ */
+ initSF() {
+ this.schema = {
+ properties: {
+ _$expand: { type: 'boolean', ui: { hidden: true } },
+ templateName: {
+ type: 'string',
+ title: '模板名称',
+ },
+ signingObject: {
+ type: 'string',
+ title: '签约对象',
+ enum: [
+ { label: '全部', value: '' },
+ { label: '货主', value: 1 },
+ { label: '司机', value: 2 }
+ ],
+ ui: {
+ widget: 'select',
+ placeholder: '请选择'
+ }
+ },
+ contractType: {
+ title: '合同类型',
+ type: 'string',
+ default: '',
+ ui: {
+ widget: 'dict-select',
+ containsAllLable: true,
+ params: { dictKey: 'contract:type' },
+ containAllLable: true,
+ } as SFSelectWidgetSchema
+ },
+ resourceType: {
+ title: '货源类型',
+ type: 'string',
+ default: '',
+ ui: {
+ widget: 'dict-select',
+ params: { dictKey: 'goodresource:type' },
+ containsAllLable: true,
+ visibleIf: {
+ _$expand: (value: boolean) => value
+ },
+ } as SFSelectWidgetSchema,
+ },
+ },
+ };
+ this.ui = { '*': { spanLabelFixed: 110, grid: { span: 8, gutter: 4 } } };
+ }
+
+ /**
+ * 初始化数据列表
+ */
+ initST() {
+ this.columns = [
+ {
+ title: '合同模板名称',
+ className: 'text-center',
+ render: 'templateName'
+ },
+ {
+ title: '签约对象',
+ width: '100px',
+ className: 'text-center',
+ index: 'signingObjectLabel'
+ },
+ {
+ title: '合同类型',
+ width: '100px',
+ className: 'text-center',
+ index: 'contractTypeLabel'
+ },
+ {
+ title: '货源类型',
+ width: '100px',
+ className: 'text-center',
+ index: 'resourceTypeLabel'
+ },
+ { title: '创建人', index: 'createUserIdLabel', width: '120px', className: 'text-center' },
+ {
+ title: '创建时间',
+ className: 'text-center',
+ index: 'createTime',
+ width: '200px'
+ },
+ {
+ title: '操作',
+ fixed: 'right',
+ width: '110px',
+ className: 'text-center',
+ buttons: [
+ {
+ text: '编辑',
+ click: (_record) => this.edit(_record),
+ acl: { ability: ['CONTRACT-TEMPLATE-edit'] },
+ },
+ {
+ text: '删除',
+ click: (_record) => this.delete(_record),
+ acl: { ability: ['CONTRACT-TEMPLATE-delete'] },
+ },
+ ],
+ },
+ ];
+ }
+ initSTAudit() {
+ this.schemaView = {
+ properties: {
+ handleResult: {
+ title: '处理结果',
+ type: 'string',
+ maxLength: 50,
+ ui: {
+ placeholder: '最多不超过50字',
+ widget: 'textarea',
+ autosize: { minRows: 3, maxRows: 6 }
+ },
+ },
+ },
+ required: ['handleResult']
+ };
+ this.uiView = { '*': { spanLabelFixed: 110, grid: { span: 24 } } };
+ }
+ /**
+ * 查询字段个数
+ */
+ get queryFieldCount(): number {
+ return Object.keys(this.schema?.properties || {}).length;
+ }
+ /**
+ * 伸缩查询条件
+ */
+ expandToggle(): void {
+ this._$expand = !this._$expand;
+ this.sf?.setValue('/_$expand', this._$expand);
+ }
+ tabChange(item: any) {
+ }
+ /**
+ * 重置表单
+ */
+ resetSF(): void {
+ this.sf.reset();
+ this._$expand = false;
+ }
+
+ edit(value: any) {
+ this.router.navigate(['/contract-management/template/text/' + value.id],{
+ queryParams: {
+ status: 2
+ }
+ })
+ }
+ creatTemplate() {
+ this.router.navigate(['/contract-management/template/text/' + 0], {
+ queryParams: {
+ status: 1
+ }
+ })
+ }
+ goBack() {
+ window.history.go(-1)
+ }
+ view(value: any) {
+ this.router.navigate(['/contract-management/template/text/' + value.id],{
+ queryParams: {
+ status: 3
+ }
+ })
+ }
+ delete(value: any) {
+ this.modal.confirm({
+ nzTitle: '删除确认',
+ nzOnOk: () =>
+ this.service.request(this.service.$api_deletebatch_contractTemplate, [value.id]).subscribe(res => {
+ if (res) {
+ this.service.msgSrv.success('删除成功!');
+ this.st.reload()
+ }
+ })
+ });
+ }
+}
diff --git a/src/app/routes/contract-management/components/contract-template/contract-template.component.html b/src/app/routes/contract-management/components/contract-template/contract-template.component.html
new file mode 100644
index 00000000..1ecef42c
--- /dev/null
+++ b/src/app/routes/contract-management/components/contract-template/contract-template.component.html
@@ -0,0 +1,82 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/app/routes/contract-management/components/contract-template/contract-template.component.less b/src/app/routes/contract-management/components/contract-template/contract-template.component.less
new file mode 100644
index 00000000..9df98f26
--- /dev/null
+++ b/src/app/routes/contract-management/components/contract-template/contract-template.component.less
@@ -0,0 +1,4 @@
+.NewBtn{
+ float: right;
+ margin-bottom: 15px;
+}
\ No newline at end of file
diff --git a/src/app/routes/contract-management/components/contract-template/contract-template.component.spec.ts b/src/app/routes/contract-management/components/contract-template/contract-template.component.spec.ts
new file mode 100644
index 00000000..b7fbac9a
--- /dev/null
+++ b/src/app/routes/contract-management/components/contract-template/contract-template.component.spec.ts
@@ -0,0 +1,35 @@
+/*
+ * @Description :
+ * @Version : 1.0
+ * @Author : Shiming
+ * @Date : 2022-01-05 09:45:47
+ * @LastEditors : Shiming
+ * @LastEditTime : 2022-02-24 10:25:58
+ * @FilePath : \\tms-obc-web\\src\\app\\routes\\contract-management\\components\\contract-template\\contract-template.component.spec.ts
+ * Copyright (C) 2022 huzhenhong. All rights reserved.
+ */
+
+import { waitForAsync, ComponentFixture, TestBed } from '@angular/core/testing';
+import { ContractManagementTemplateDetailComponent } from './contract-template.component';
+
+describe('ContractManagementTemplateDetailComponent', () => {
+ let component: ContractManagementTemplateDetailComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(waitForAsync(() => {
+ TestBed.configureTestingModule({
+ declarations: [ ContractManagementTemplateDetailComponent ]
+ })
+ .compileComponents();
+ }));
+
+ beforeEach(() => {
+ fixture = TestBed.createComponent(ContractManagementTemplateDetailComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/src/app/routes/contract-management/components/contract-template/contract-template.component.ts b/src/app/routes/contract-management/components/contract-template/contract-template.component.ts
new file mode 100644
index 00000000..e295eb52
--- /dev/null
+++ b/src/app/routes/contract-management/components/contract-template/contract-template.component.ts
@@ -0,0 +1,252 @@
+import { Router } from '@angular/router';
+import { Component, OnInit, ViewChild } from '@angular/core';
+import { STColumn, STComponent } from '@delon/abc/st';
+import { SFComponent, SFDateWidgetSchema, SFSchema, SFSelectWidgetSchema, SFUISchema } from '@delon/form';
+import { ModalHelper, _HttpClient } from '@delon/theme';
+import { NzModalService } from 'ng-zorro-antd/modal';
+import { map } from 'rxjs/operators';
+import { ContractManagementService } from '../../services/contract-management.service';
+
+
+@Component({
+ selector: 'app-contract-management-template-detail-complaint',
+ templateUrl: './contract-template.component.html',
+ styleUrls: ['./contract-template.component.less']
+})
+export class ContractManagementTemplateDetailComponent implements OnInit {
+ ui: SFUISchema = {};
+ uiView: SFUISchema = {};
+ schema: SFSchema = {};
+ schemaView: SFSchema = {};
+ auditMany = false;
+ _$expand = false;
+ channelId: any;
+ @ViewChild('st') private readonly st!: STComponent;
+ @ViewChild('sf', { static: false }) sf!: SFComponent;
+ columns: STColumn[] = [];
+ datass: any = [
+ {
+ one: '1',
+ two: '1',
+ three: '1',
+ id: 1
+ },
+ {
+ one: '2',
+ two: '2',
+ three: '2',
+ id: 2
+ },
+ ];
+ constructor(
+ public service: ContractManagementService,
+ private modal: NzModalService,
+ private router: Router
+ ) { }
+
+ /**
+ * 查询参数
+ */
+ get reqParams() {
+ return {
+ templateType: 'MX',
+ ...this.sf?.value,
+ };
+ }
+ get selectedRows() {
+ return this.st?.list.filter((item) => item.checked) || [];
+ }
+ ngOnInit(): void {
+ this.initSF();
+ this.initST();
+ this.initSTAudit();
+ }
+
+
+
+ /**
+ * 初始化查询表单
+ */
+ initSF() {
+ this.schema = {
+ properties: {
+ _$expand: { type: 'boolean', ui: { hidden: true } },
+ templateName: {
+ type: 'string',
+ title: '模板名称',
+ },
+ signingObject: {
+ type: 'string',
+ title: '签约对象',
+ enum: [
+ { label: '全部', value: '' },
+ { label: '货主', value: 1 },
+ { label: '司机', value: 2 }
+ ],
+ ui: {
+ widget: 'select',
+ placeholder: '请选择'
+ }
+ },
+ contractType: {
+ title: '合同类型',
+ type: 'string',
+ default: '',
+ ui: {
+ widget: 'dict-select',
+ containsAllLable: true,
+ params: { dictKey: 'contract:type' },
+ containAllLable: true,
+ } as SFSelectWidgetSchema
+ },
+ resourceType: {
+ title: '货源类型',
+ type: 'string',
+ default: '',
+ ui: {
+ widget: 'dict-select',
+ params: { dictKey: 'goodresource:type' },
+ containsAllLable: true,
+ visibleIf: {
+ _$expand: (value: boolean) => value
+ },
+ } as SFSelectWidgetSchema,
+ },
+ },
+ };
+ this.ui = { '*': { spanLabelFixed: 110, grid: { span: 8, gutter: 4 } } };
+ }
+
+ /**
+ * 初始化数据列表
+ */
+ initST() {
+ this.columns = [
+ {
+ title: '合同模板名称',
+ className: 'text-center',
+ render: 'templateName'
+ },
+ {
+ title: '签约对象',
+ width: '100px',
+ className: 'text-center',
+ index: 'signingObjectLabel'
+ },
+ {
+ title: '合同类型',
+ width: '100px',
+ className: 'text-center',
+ index: 'contractTypeLabel'
+ },
+ {
+ title: '货源类型',
+ width: '100px',
+ className: 'text-center',
+ index: 'resourceTypeLabel'
+ },
+ { title: '创建人', index: 'createUserIdLabel', width: '120px', className: 'text-center' },
+ {
+ title: '创建时间',
+ className: 'text-center',
+ index: 'createTime',
+ width: '200px'
+ },
+ {
+ title: '操作',
+ fixed: 'right',
+ width: '110px',
+ className: 'text-center',
+ buttons: [
+ {
+ text: '编辑',
+ click: (_record) => this.edit(_record),
+ acl: { ability: ['CONTRACT-TEMPLATE-edit'] },
+ },
+ {
+ text: '删除',
+ click: (_record) => this.delete(_record),
+ acl: { ability: ['CONTRACT-TEMPLATE-delete'] },
+ },
+ ],
+ },
+ ];
+ }
+ initSTAudit() {
+ this.schemaView = {
+ properties: {
+ handleResult: {
+ title: '处理结果',
+ type: 'string',
+ maxLength: 50,
+ ui: {
+ placeholder: '最多不超过50字',
+ widget: 'textarea',
+ autosize: { minRows: 3, maxRows: 6 }
+ },
+ },
+ },
+ required: ['handleResult']
+ };
+ this.uiView = { '*': { spanLabelFixed: 110, grid: { span: 24 } } };
+ }
+ /**
+ * 查询字段个数
+ */
+ get queryFieldCount(): number {
+ return Object.keys(this.schema?.properties || {}).length;
+ }
+ /**
+ * 伸缩查询条件
+ */
+ expandToggle(): void {
+ this._$expand = !this._$expand;
+ this.sf?.setValue('/_$expand', this._$expand);
+ }
+ tabChange(item: any) {
+ }
+ /**
+ * 重置表单
+ */
+ resetSF(): void {
+ this.sf.reset();
+ this._$expand = false;
+ }
+
+ edit(value: any) {
+ this.router.navigate(['/contract-management/template/text/' + value.id],{
+ queryParams: {
+ status: 2
+ }
+ })
+ }
+ creatTemplate() {
+ this.router.navigate(['/contract-management/template/text/' + 0], {
+ queryParams: {
+ status: 1
+ }
+ })
+ }
+ goBack() {
+ window.history.go(-1)
+ }
+ view(value: any) {
+ this.router.navigate(['/contract-management/template/text/' + value.id],{
+ queryParams: {
+ status: 3
+ }
+ })
+ }
+ delete(value: any) {
+ this.modal.confirm({
+ nzTitle: '删除确认',
+ nzOnOk: () =>
+ this.service.request(this.service.$api_deletebatch_contractTemplate, [value.id]).subscribe(res => {
+ if (res) {
+ this.service.msgSrv.success('删除成功!');
+ this.st.reload(1)
+ }
+ })
+ });
+ }
+}
diff --git a/src/app/routes/contract-management/components/index/index.component.html b/src/app/routes/contract-management/components/index/index.component.html
new file mode 100644
index 00000000..e8670348
--- /dev/null
+++ b/src/app/routes/contract-management/components/index/index.component.html
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/app/routes/contract-management/components/index/index.component.spec.ts b/src/app/routes/contract-management/components/index/index.component.spec.ts
new file mode 100644
index 00000000..9601ea0c
--- /dev/null
+++ b/src/app/routes/contract-management/components/index/index.component.spec.ts
@@ -0,0 +1,24 @@
+import { waitForAsync, ComponentFixture, TestBed } from '@angular/core/testing';
+import { SupplyManagementIndexComponent } from './index.component';
+
+describe('SupplyManagementIndexComponent', () => {
+ let component: SupplyManagementIndexComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(waitForAsync(() => {
+ TestBed.configureTestingModule({
+ declarations: [ SupplyManagementIndexComponent ]
+ })
+ .compileComponents();
+ }));
+
+ beforeEach(() => {
+ fixture = TestBed.createComponent(SupplyManagementIndexComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/src/app/routes/contract-management/components/index/index.component.ts b/src/app/routes/contract-management/components/index/index.component.ts
new file mode 100644
index 00000000..dfb5474a
--- /dev/null
+++ b/src/app/routes/contract-management/components/index/index.component.ts
@@ -0,0 +1,27 @@
+/*
+ * @Description :
+ * @Version : 1.0
+ * @Author : Shiming
+ * @Date : 2022-01-07 13:27:10
+ * @LastEditors : Shiming
+ * @LastEditTime : 2022-01-18 17:17:01
+ * @FilePath : \\tms-obc-web\\src\\app\\routes\\contract-management\\components\\index\\index.component.ts
+ * Copyright (C) 2022 huzhenhong. All rights reserved.
+ */
+
+import { Component, OnInit } from '@angular/core';
+import { ModalHelper, _HttpClient } from '@delon/theme';
+
+@Component({
+ selector: 'app-supply-management-index',
+ templateUrl: './index.component.html',
+})
+export class ContractManagementIndexComponent implements OnInit {
+ selectedIndex = 0;
+
+ constructor(private http: _HttpClient, private modal: ModalHelper) { }
+
+ ngOnInit(): void { }
+
+
+}
diff --git a/src/app/routes/contract-management/components/policy/policy.component.html b/src/app/routes/contract-management/components/policy/policy.component.html
new file mode 100644
index 00000000..dfb762fc
--- /dev/null
+++ b/src/app/routes/contract-management/components/policy/policy.component.html
@@ -0,0 +1,72 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{paramValue}}
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/app/routes/contract-management/components/policy/policy.component.spec.ts b/src/app/routes/contract-management/components/policy/policy.component.spec.ts
new file mode 100644
index 00000000..b369df96
--- /dev/null
+++ b/src/app/routes/contract-management/components/policy/policy.component.spec.ts
@@ -0,0 +1,24 @@
+import { waitForAsync, ComponentFixture, TestBed } from '@angular/core/testing';
+import { ContractManagementPolicyComponent } from './policy.component';
+
+describe('ContractManagementPolicyComponent', () => {
+ let component: ContractManagementPolicyComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(waitForAsync(() => {
+ TestBed.configureTestingModule({
+ declarations: [ ContractManagementPolicyComponent ]
+ })
+ .compileComponents();
+ }));
+
+ beforeEach(() => {
+ fixture = TestBed.createComponent(ContractManagementPolicyComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/src/app/routes/contract-management/components/policy/policy.component.ts b/src/app/routes/contract-management/components/policy/policy.component.ts
new file mode 100644
index 00000000..542a5cbe
--- /dev/null
+++ b/src/app/routes/contract-management/components/policy/policy.component.ts
@@ -0,0 +1,213 @@
+import { Component, OnInit, ViewChild } from '@angular/core';
+import { STColumn, STComponent, STChange } from '@delon/abc/st';
+import { SFComponent, SFSchema, SFDateWidgetSchema, SFUISchema } from '@delon/form';
+import { ModalHelper, _HttpClient } from '@delon/theme';
+import { NzModalService } from 'ng-zorro-antd/modal';
+import { ContractManagementService } from '../../services/contract-management.service';
+import { Router } from '@angular/router';
+
+@Component({
+ selector: 'app-contract-management-policy',
+ templateUrl: './policy.component.html'
+})
+export class ContractManagementPolicyComponent implements OnInit {
+ @ViewChild('st', { static: true })
+ st!: STComponent;
+ @ViewChild('sf', { static: false })
+ sf!: SFComponent;
+ @ViewChild('auditModal', { static: false })
+ auditModal!: any;
+ schema: SFSchema = {};
+ columns: STColumn[] = [];
+ ui: SFUISchema = {};
+ @ViewChild('promoterModal', { static: false })
+ promoterModal!: any;
+ _$expand = false;
+
+ selectedRows: any[] = [];
+ paramValue = '';
+ isLoading: boolean = false;
+ constructor(public service: ContractManagementService, private modal: NzModalService, private router: Router) {}
+
+ /**
+ * 查询参数
+ */
+ get reqParams() {
+ const params: any = {
+ ...(this.sf && this.sf.value)
+ };
+ delete params.expand;
+ return params;
+ }
+
+ ngOnInit(): void {
+ this.initST();
+ this.initSF();
+ }
+
+ openDetail(item?: any) {
+ this.paramValue = item?.paramValue
+ const modal = this.modal.create({
+ nzTitle: '传入值',
+ nzContent: this.promoterModal,
+ nzOnOk: () => {
+ return;
+ }
+ });
+
+ }
+
+ initST() {
+ this.columns = [
+ { title: '', type: 'checkbox', width: '50px', className: 'text-center' },
+ {
+ title: '订单ID',
+ width: '100px',
+ className: 'text-center',
+ index: 'billId'
+ },
+ {
+ title: '项目ID',
+ width: '100px',
+ className: 'text-center',
+ index: 'enterpriseProjectId'
+ },
+ {
+ title: '保险公司',
+ width: '100px',
+ className: 'text-center',
+ index: 'insuranceCompany'
+ },
+ {
+ title: '投保金额',
+ width: '100px',
+ className: 'text-center',
+ index: 'insureAmount'
+ },
+
+ {
+ title: '保单号',
+ width: '100px',
+ className: 'text-center',
+ index: 'policyNo'
+ },
+ {
+ title: '保单地址',
+ width: '100px',
+ className: 'text-center',
+ index: 'policyUrl'
+ },
+ {
+ title: '保费',
+ width: '100px',
+ className: 'text-center',
+ index: 'premium'
+ },
+ {
+ title: '处理消息',
+ width: '100px',
+ className: 'text-center',
+ index: 'processMessage'
+ },
+ {
+ title: '处理结果',
+ width: '100px',
+ className: 'text-center',
+ index: 'processResult'
+ },
+ {
+ title: '操作',
+ width: '170px',
+ className: 'text-center',
+ buttons: [
+ {
+ text: '查看传入值',
+ click: item => {
+ this.openDetail(item)
+ },
+ acl: { ability: ['CONTRACT-POLICY-view'] },
+ }
+ ]
+ }
+ ];
+ }
+
+ initSF() {
+ this.schema = {
+ properties: {
+ _$expand: { type: 'boolean', ui: { hidden: true } },
+ billId: {
+ type: 'string',
+ title: '订单id'
+ },
+ enterpriseProjectId: {
+ type: 'string',
+ title: '项目id'
+ },
+ insuranceCompany: {
+ type: 'string',
+ title: '保险公司'
+ },
+ policyNo: {
+ type: 'string',
+ title: '保单号',
+ ui: {
+ visibleIf: {
+ _$expand: (value: boolean) => value
+ },
+ }
+ },
+ processResult: {
+ type: 'string',
+ title: '处理结果',
+ enum: [
+ { label: '全部', value: '' },
+ { label: '成功', value: 1 },
+ { label: '失败', value: 2 }
+ ],
+ ui: {
+ widget: 'select',
+ placeholder: '请选择',
+ visibleIf: {
+ _$expand: (value: boolean) => value
+ },
+ allowClear: true
+ }
+ }
+ },
+ type: 'object'
+ };
+ this.ui = { '*': { spanLabelFixed: 110, grid: { span: 8, gutter: 4 } } };
+ }
+
+ /**
+ * 重置表单
+ */
+ resetSF() {
+ this.sf.reset();
+ this._$expand = false;
+ this.isLoading = true
+ }
+
+ /**
+ * 伸缩查询条件
+ */
+ expandToggle(): void {
+ this._$expand = !this._$expand;
+ this.sf?.setValue('/_$expand', this._$expand);
+ }
+
+ get queryFieldCount(): number {
+ return Object.keys(this.schema?.properties || {}).length;
+ }
+ stChange(e: STChange): void {
+ switch (e.type) {
+ case 'checkbox':
+ this.selectedRows = e.checkbox!;
+ break;
+ case 'filter':
+ this.st.load();
+ break;
+ }
+ }
+}
diff --git a/src/app/routes/contract-management/components/template/template.component.html b/src/app/routes/contract-management/components/template/template.component.html
new file mode 100644
index 00000000..fefd0d8f
--- /dev/null
+++ b/src/app/routes/contract-management/components/template/template.component.html
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/app/routes/contract-management/components/template/template.component.spec.ts b/src/app/routes/contract-management/components/template/template.component.spec.ts
new file mode 100644
index 00000000..f3c8d5d4
--- /dev/null
+++ b/src/app/routes/contract-management/components/template/template.component.spec.ts
@@ -0,0 +1,24 @@
+import { waitForAsync, ComponentFixture, TestBed } from '@angular/core/testing';
+import { ContractManagementTemplateComponent } from './template.component';
+
+describe('ContractManagementTemplateComponent', () => {
+ let component: ContractManagementTemplateComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(waitForAsync(() => {
+ TestBed.configureTestingModule({
+ declarations: [ ContractManagementTemplateComponent ]
+ })
+ .compileComponents();
+ }));
+
+ beforeEach(() => {
+ fixture = TestBed.createComponent(ContractManagementTemplateComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/src/app/routes/contract-management/components/template/template.component.ts b/src/app/routes/contract-management/components/template/template.component.ts
new file mode 100644
index 00000000..9d1cef16
--- /dev/null
+++ b/src/app/routes/contract-management/components/template/template.component.ts
@@ -0,0 +1,27 @@
+/*
+ * @Description :
+ * @Version : 1.0
+ * @Author : Shiming
+ * @Date : 2022-01-07 13:27:10
+ * @LastEditors : Shiming
+ * @LastEditTime : 2022-02-24 10:20:23
+ * @FilePath : \\tms-obc-web\\src\\app\\routes\\contract-management\\components\\template\\template.component.ts
+ * Copyright (C) 2022 huzhenhong. All rights reserved.
+ */
+
+import { Component, OnInit } from '@angular/core';
+import { ModalHelper, _HttpClient } from '@delon/theme';
+
+@Component({
+ selector: 'app-supply-management-template',
+ templateUrl: './template.component.html',
+})
+export class ContractManagementTemplateComponent implements OnInit {
+ selectedIndex = 0;
+
+ constructor(private http: _HttpClient, private modal: ModalHelper) { }
+
+ ngOnInit(): void { }
+
+
+}
diff --git a/src/app/routes/contract-management/contract-management-routing.module.ts b/src/app/routes/contract-management/contract-management-routing.module.ts
new file mode 100644
index 00000000..35948446
--- /dev/null
+++ b/src/app/routes/contract-management/contract-management-routing.module.ts
@@ -0,0 +1,34 @@
+/*
+ * @Description :
+ * @Version : 1.0
+ * @Author : Shiming
+ * @Date : 2022-01-04 21:05:49
+ * @LastEditors : Shiming
+ * @LastEditTime : 2022-02-24 10:24:16
+ * @FilePath : \\tms-obc-web\\src\\app\\routes\\contract-management\\contract-management-routing.module.ts
+ * Copyright (C) 2022 huzhenhong. All rights reserved.
+ */
+
+import { NgModule } from '@angular/core';
+import { RouterModule, Routes } from '@angular/router';
+import { ContractManagementDetailComponent } from './components/contract-detail/contract-detail.component';
+import { ContractManagementContractListComponent } from './components/contract-list/contract-list.component';
+import { ContractManagementPartnerComponent } from './components/contract-partner/contract-partner.component';
+import { ContractManagementTemplateTextComponent } from './components/contract-template-detail/contract-template-detail.component';
+import { ContractManagementIndexComponent } from './components/index/index.component';
+import { ContractManagementPolicyComponent } from './components/policy/policy.component';
+import { ContractManagementTemplateComponent } from './components/template/template.component';
+const routes: Routes = [
+ { path: 'index', component: ContractManagementIndexComponent },
+ { path: 'index/detail/:id', component: ContractManagementDetailComponent },
+ { path: 'template', component: ContractManagementTemplateComponent },
+ { path: 'template/text/:id', component: ContractManagementTemplateTextComponent },
+ { path: 'policy', component: ContractManagementPolicyComponent },
+ { path: 'partner', component: ContractManagementPartnerComponent },
+];
+
+@NgModule({
+ imports: [RouterModule.forChild(routes)],
+ exports: [RouterModule]
+})
+export class ContractManagementManagementRoutingModule {}
diff --git a/src/app/routes/contract-management/contract-management.module.ts b/src/app/routes/contract-management/contract-management.module.ts
new file mode 100644
index 00000000..497ef5a2
--- /dev/null
+++ b/src/app/routes/contract-management/contract-management.module.ts
@@ -0,0 +1,47 @@
+/*
+ * @Description :
+ * @Version : 1.0
+ * @Author : Shiming
+ * @Date : 2022-01-04 21:05:49
+ * @LastEditors : Shiming
+ * @LastEditTime : 2022-02-24 14:09:24
+ * @FilePath : \\tms-obc-web\\src\\app\\routes\\contract-management\\contract-management.module.ts
+ * Copyright (C) 2022 huzhenhong. All rights reserved.
+ */
+
+import { NgModule } from '@angular/core';
+import { CommonModule } from '@angular/common';
+import { SharedModule } from '@shared';
+import { ContractManagementManagementRoutingModule } from './contract-management-routing.module';
+import { ContractManagementContractListComponent } from './components/contract-list/contract-list.component';
+import { ContractManagementPolicyComponent } from './components/policy/policy.component';
+import { ContractManagementTemplateDetailComponent } from './components/contract-template/contract-template.component';
+import { ContractManagementIndexComponent } from './components/index/index.component';
+import { ContractManagementFrameComponent } from './components/contract-frame/contract-frame.component';
+import { ContractManagementDetailComponent } from './components/contract-detail/contract-detail.component';
+import { ContractManagementPartnerComponent } from './components/contract-partner/contract-partner.component';
+import { ContractManagementTemplateComponent } from './components/template/template.component';
+import { ContractManagementTemplateTextComponent } from './components/contract-template-detail/contract-template-detail.component';
+import { ContractManagementTemplateFrameComponent } from './components/contract-template-frame/contract-template-frame.component';
+import { ContractManagementTemplatePartnerComponent } from './components/contract-template-partner/contract-template-partner.component';
+
+const COMPONENTS: any = [
+ ContractManagementContractListComponent,
+ ContractManagementPolicyComponent,
+ ContractManagementTemplateDetailComponent,
+ ContractManagementTemplateDetailComponent,
+ ContractManagementIndexComponent,
+ ContractManagementFrameComponent,
+ ContractManagementDetailComponent,
+ ContractManagementPartnerComponent,
+ ContractManagementTemplateComponent,
+ ContractManagementTemplateTextComponent,
+ ContractManagementTemplateFrameComponent,
+ ContractManagementTemplatePartnerComponent
+];
+const NOTROUTECOMPONENTS: any = [];
+@NgModule({
+ declarations: [...COMPONENTS, ...NOTROUTECOMPONENTS],
+ imports: [CommonModule, ContractManagementManagementRoutingModule, SharedModule]
+})
+export class ContractManagementManagementModule {}
diff --git a/src/app/routes/contract-management/services/contract-management.service.ts b/src/app/routes/contract-management/services/contract-management.service.ts
new file mode 100644
index 00000000..17cc75ca
--- /dev/null
+++ b/src/app/routes/contract-management/services/contract-management.service.ts
@@ -0,0 +1,41 @@
+/*
+ * @Description :
+ * @Version : 1.0
+ * @Author : Shiming
+ * @Date : 2022-01-04 21:05:49
+ * @LastEditors : Shiming
+ * @LastEditTime : 2022-02-24 10:00:59
+ * @FilePath : \\tms-obc-web\\src\\app\\routes\\contract-management\\services\\contract-management.service.ts
+ * Copyright (C) 2022 huzhenhong. All rights reserved.
+ */
+import { Injectable, Injector } from '@angular/core';
+import { BaseService } from 'src/app/shared/services';
+
+@Injectable({
+ providedIn: 'root'
+})
+export class ContractManagementService extends BaseService {
+ $api_get_getPremiumInformationPage = `/api/sdc/billOperate/listPremiumInformationPage`;
+ // 查询投诉列表
+ $api_get_operate_listPage = `/api/sdc/complaint/operate/listPage`;
+ // 新增/更新信息
+ $api_save_contractTemplate = `/api/sdc/contractTemplate/save`;
+ // 查询合同模板表
+ $api_get_contractTemplate_page = `/api/sdc/contractTemplate/list/page`;
+ // 查询合同模板表详情
+ $api_get_contractTemplate = `/api/sdc/contractTemplate/get`;
+ // 删除合同模板
+ $api_deletebatch_contractTemplate = `/api/sdc/contractTemplate/deletebatch`;
+
+ // 查询明细合同
+ $api_listDetailed_page = `/api/sdc/contract/listDetailed/page`;
+ // 查询框架合同
+ $api_listFrame_page = `/api/sdc/contract/listFrame/page`;
+ // 查询合伙人合同
+ $api_listPartner_page = `/api/sdc/contract/listPartner/page`;
+ // 获取订单合同表
+ $api_contract_get = `/api/sdc/contract/get`;
+ constructor(public injector: Injector) {
+ super(injector);
+ }
+}
diff --git a/src/app/routes/dashboard/dashboard.component.html b/src/app/routes/dashboard/dashboard.component.html
new file mode 100644
index 00000000..e69de29b
diff --git a/src/app/routes/dashboard/dashboard.component.less b/src/app/routes/dashboard/dashboard.component.less
new file mode 100644
index 00000000..e69de29b
diff --git a/src/app/routes/dashboard/dashboard.component.ts b/src/app/routes/dashboard/dashboard.component.ts
new file mode 100644
index 00000000..fe11f0cf
--- /dev/null
+++ b/src/app/routes/dashboard/dashboard.component.ts
@@ -0,0 +1,8 @@
+import { Component } from '@angular/core';
+
+@Component({
+ selector: 'app-dashboard',
+ templateUrl: './dashboard.component.html',
+ styleUrls: ['./dashboard.component.less']
+})
+export class DashboardComponent {}
diff --git a/src/app/routes/datatable/components/busitable/busiindex/busiindex.component.html b/src/app/routes/datatable/components/busitable/busiindex/busiindex.component.html
new file mode 100644
index 00000000..01b5aed3
--- /dev/null
+++ b/src/app/routes/datatable/components/busitable/busiindex/busiindex.component.html
@@ -0,0 +1,58 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/app/routes/datatable/components/busitable/busiindex/busiindex.component.less b/src/app/routes/datatable/components/busitable/busiindex/busiindex.component.less
new file mode 100644
index 00000000..af1850ca
--- /dev/null
+++ b/src/app/routes/datatable/components/busitable/busiindex/busiindex.component.less
@@ -0,0 +1,21 @@
+.chooseBox{
+ display: flex;
+}
+.timeBox{
+ display: flex;
+ margin: 0 0 0 10px;
+}
+.dateBox{
+ display: inline-block;
+ margin: 0 0 0 10px;
+}
+.title{
+ display: flex;
+ align-items: center;
+ .box{
+ width: 8px;
+ height: 8px;
+ margin-right: 10px;
+ border-radius: 100px;
+ }
+}
diff --git a/src/app/routes/datatable/components/busitable/busiindex/busiindex.component.spec.ts b/src/app/routes/datatable/components/busitable/busiindex/busiindex.component.spec.ts
new file mode 100644
index 00000000..00c629be
--- /dev/null
+++ b/src/app/routes/datatable/components/busitable/busiindex/busiindex.component.spec.ts
@@ -0,0 +1,24 @@
+import { waitForAsync, ComponentFixture, TestBed } from '@angular/core/testing';
+import { DatatableBusiindexComponent } from './busiindex.component';
+
+describe('DatatableBusiindexComponent', () => {
+ let component: DatatableBusiindexComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(waitForAsync(() => {
+ TestBed.configureTestingModule({
+ declarations: [ DatatableBusiindexComponent ]
+ })
+ .compileComponents();
+ }));
+
+ beforeEach(() => {
+ fixture = TestBed.createComponent(DatatableBusiindexComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/src/app/routes/datatable/components/busitable/busiindex/busiindex.component.ts b/src/app/routes/datatable/components/busitable/busiindex/busiindex.component.ts
new file mode 100644
index 00000000..4501e8fd
--- /dev/null
+++ b/src/app/routes/datatable/components/busitable/busiindex/busiindex.component.ts
@@ -0,0 +1,148 @@
+import { Component, OnInit, ViewChild, NgZone } from '@angular/core';
+import { STColumn, STComponent } from '@delon/abc/st';
+import { DatePipe, _HttpClient } from '@delon/theme';
+import { differenceInCalendarDays } from 'date-fns';
+import { DataService } from '../../../services/data.service';
+import { BusitablePillarComponent } from '../pillar/pillar.component';
+import { BusitableCurveComponent } from './curve/curve.component';
+
+@Component({
+ selector: 'app-datatable-busiindex',
+ templateUrl: './busiindex.component.html',
+ styleUrls: ['./busiindex.component.less'],
+ providers: [DatePipe]
+
+})
+export class DatatableBusiindexComponent implements OnInit {
+ @ViewChild('st') private readonly st!: STComponent;
+ @ViewChild('curve') private readonly curve!: BusitableCurveComponent;
+ @ViewChild('pillar') private readonly pillar!: BusitablePillarComponent;
+ type = 1;
+ mode = 'year';
+ date: any = null;
+ time: any = ['2022-01-01 00:00:00']
+ defineDate = [];
+ dateNext: any = null;
+ modeNext = 'year';
+ timeNext: any = ['2022-01-01 00:00:00']
+ dateFormat = 'yyyy';
+ today = new Date();
+ chartData: any = {}
+
+ columns: STColumn[] = [
+ { title: '运营主体', index: 'networkTransporterName', className: 'text-center' },
+ { title: '合伙人数', index: 'partnerNumber', className: 'text-center' },
+ { title: '客户数', index: 'enterpriseNumbe', className: 'text-center' },
+ { title: '订单数', index: 'zsl', className: 'text-center' },
+ { title: '客户预存款', index: 'czcgje', className: 'text-right', type: 'widget', widget: { type: 'currency-chy', params: ({ record }) => ({ value: record.czcgje }) } },
+ { title: '业绩量', index: 'yisje', className: 'text-center' },
+ { title: '已收附加费', index: 'yisfjf', className: 'text-right', type: 'widget', widget: { type: 'currency-chy', params: ({ record }) => ({ value: record.yisfjf }) } },
+ { title: '平均附加费率', index: 'fjfl', className: 'text-center',format: (item)=> {
+ return item.fjfl + '%'
+ } },
+ { title: '已开票金额', index: 'ykpje', className: 'text-right', type: 'widget', widget: { type: 'currency-chy', params: ({ record }) => ({ value: record.ykpje }) } },
+ ];
+ /**
+ * 查询参数
+ */
+ get reqParams() {
+ if(this.mode === 'year') {
+ this.type = 1
+ } else if(this.mode === 'month') {
+ this.type = 2
+ } else if(this.mode === 'date') {
+ this.type = 3
+ } else {
+ this.type = 4
+ }
+ let params: any = {
+ time: this.time,
+ type: this.type
+ };
+
+ delete params._$expand;
+ return { ...params };
+ }
+
+ constructor(public service: DataService, private datePipe: DatePipe, private ngZone: NgZone) { }
+ ngOnInit(): void {
+ this.initData()
+ }
+ initData(flag?: boolean){
+ let type = 1
+ if(this.mode === 'year') {
+ type = 1
+ } else if(this.mode === 'month') {
+ type = 2
+ }
+ if(this.modeNext === 'year') {
+ type = 1
+ } else if(this.modeNext === 'month') {
+ type = 2
+ }
+ const params: any = {
+ time: this.timeNext,
+ type
+ };
+ this.service.request(this.service.$api_performanceReportHistogram, params).subscribe(res => {
+ if (res) {
+ this.chartData = res
+ if(flag) {
+ this.pillar.reRender()
+ this.curve.reRender()
+ }
+ }
+ })
+ }
+ changeData(){
+ if(this.mode === 'year') {
+ this.dateFormat = 'yyyy'
+ } else if(this.mode === 'month') {
+ this.dateFormat = 'yyyy-MM'
+ } else {
+ this.dateFormat = 'yyyy-MM-dd'
+ }
+ }
+ onChange(result: any) {
+ if(this.mode === 'year') {
+ this.time = [this.datePipe.transform(this.date, 'yyyy') + '-01-01 00:00:00']
+ } else if(this.mode === 'month') {
+ this.time = [this.datePipe.transform(this.date, 'yyyy-MM') + '-01 00:00:00']
+ } else if(this.mode === 'date') {
+ this.time = [this.datePipe.transform(this.date, 'yyyy-MM-dd') + ' 00:00:00']
+ } else{
+ this.time = [this.datePipe.transform(this.defineDate[0], 'yyyy-MM-dd') + ' 00:00:00', this.datePipe.transform(this.defineDate[1], 'yyyy-MM-dd') + ' 00:00:00']
+ }
+ this.st.reload({ ...this.reqParams });
+ }
+
+ changeDataNext() {
+ if(this.modeNext === 'year') {
+ this.dateFormat = 'yyyy'
+ } else if(this.modeNext === 'month') {
+ this.dateFormat = 'yyyy-MM'
+ }
+ }
+ onChangeNext(result: any) {
+ if(result === null) {
+ return
+ }
+ console.log(this.mode);
+ if(this.modeNext === 'year') {
+ this.timeNext = [this.datePipe.transform(this.dateNext, 'yyyy') + '-01-01 00:00:00']
+ } else if(this.modeNext === 'month') {
+ this.timeNext = [this.datePipe.transform(this.dateNext, 'yyyy-MM') + '-01 00:00:00']
+
+ console.log(this.dateNext);
+ console.log(this.timeNext);
+
+ }
+ this.initData(true)
+ }
+ disabledDate = (current: Date): boolean =>
+ // Can not select days before today and today
+ differenceInCalendarDays(current, this.today) > 0;
+ exportFun(){
+
+ }
+}
diff --git a/src/app/routes/datatable/components/busitable/busiindex/curve/curve.component.html b/src/app/routes/datatable/components/busitable/busiindex/curve/curve.component.html
new file mode 100644
index 00000000..315c4e18
--- /dev/null
+++ b/src/app/routes/datatable/components/busitable/busiindex/curve/curve.component.html
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/app/routes/datatable/components/busitable/busiindex/curve/curve.component.less b/src/app/routes/datatable/components/busitable/busiindex/curve/curve.component.less
new file mode 100644
index 00000000..e69de29b
diff --git a/src/app/routes/datatable/components/busitable/busiindex/curve/curve.component.ts b/src/app/routes/datatable/components/busitable/busiindex/curve/curve.component.ts
new file mode 100644
index 00000000..764a1747
--- /dev/null
+++ b/src/app/routes/datatable/components/busitable/busiindex/curve/curve.component.ts
@@ -0,0 +1,72 @@
+import { Component, ElementRef, Input, NgZone, OnChanges, OnInit, SimpleChanges, ViewChild } from '@angular/core';
+import { Chart } from '@antv/g2';
+import { DataService } from 'src/app/routes/datatable/services/data.service';
+@Component({
+ selector: 'app-busitable-curve',
+ templateUrl: './curve.component.html',
+ styleUrls: ['./curve.component.less']
+})
+export class BusitableCurveComponent implements OnInit, OnChanges {
+ el: any;
+ @Input() chartData: any;
+ chart: any;
+ constructor(private service: DataService, private ngZone: NgZone) {
+
+ }
+ ngOnChanges(changes: SimpleChanges): void {
+ if (this.chartData) {
+ setTimeout(()=>{
+ this.chart.render(true)
+ }, 1000)
+
+ }
+ }
+
+ ngOnInit(): void {
+
+ }
+ reRender() {
+ this.chart.data(this.chartData);
+ this.chart.render();
+ }
+ render(el: ElementRef): void {
+ this.el = el.nativeElement
+ setTimeout(() => {
+ this.ngZone.runOutsideAngular(() => this.init(this.el));
+ }, 500)
+ }
+
+ private init(el: HTMLElement): void {
+ this.chart = new Chart({
+ container: el,
+ autoFit: true,
+ height: 500,
+ });
+
+ this.chart.data(this.chartData);
+ this.chart.scale({
+ year: {
+ range: [0, 1],
+ },
+ number: {
+ min: -9999,
+ nice: true,
+ },
+ });
+ const itemTpl = `
+
+ 环比: {value}%
+
+`
+ this.chart.tooltip({
+ showCrosshairs: true, // 展示 Tooltip 辅助线
+ shared: true,
+ itemTpl: itemTpl
+ });
+ this.chart.line().position('time*number').label('number');
+ this.chart.point().position('time*number');
+
+ this.chart.render();
+ }
+
+}
\ No newline at end of file
diff --git a/src/app/routes/datatable/components/busitable/mantable/mantable.component.html b/src/app/routes/datatable/components/busitable/mantable/mantable.component.html
new file mode 100644
index 00000000..d6117749
--- /dev/null
+++ b/src/app/routes/datatable/components/busitable/mantable/mantable.component.html
@@ -0,0 +1,42 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/app/routes/datatable/components/busitable/mantable/mantable.component.less b/src/app/routes/datatable/components/busitable/mantable/mantable.component.less
new file mode 100644
index 00000000..6b4b1cba
--- /dev/null
+++ b/src/app/routes/datatable/components/busitable/mantable/mantable.component.less
@@ -0,0 +1,11 @@
+.chooseBox{
+ display: flex;
+}
+.timeBox{
+ display: flex;
+ margin: 0 0 0 10px;
+}
+.dateBox{
+ display: inline-block;
+ margin: 0 0 0 10px;
+}
\ No newline at end of file
diff --git a/src/app/routes/datatable/components/busitable/mantable/mantable.component.spec.ts b/src/app/routes/datatable/components/busitable/mantable/mantable.component.spec.ts
new file mode 100644
index 00000000..2aa60931
--- /dev/null
+++ b/src/app/routes/datatable/components/busitable/mantable/mantable.component.spec.ts
@@ -0,0 +1,24 @@
+import { waitForAsync, ComponentFixture, TestBed } from '@angular/core/testing';
+import { DatatableMantableComponent } from './mantable.component';
+
+describe('DatatableMantableComponent', () => {
+ let component: DatatableMantableComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(waitForAsync(() => {
+ TestBed.configureTestingModule({
+ declarations: [ DatatableMantableComponent ]
+ })
+ .compileComponents();
+ }));
+
+ beforeEach(() => {
+ fixture = TestBed.createComponent(DatatableMantableComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/src/app/routes/datatable/components/busitable/mantable/mantable.component.ts b/src/app/routes/datatable/components/busitable/mantable/mantable.component.ts
new file mode 100644
index 00000000..c1f60ff0
--- /dev/null
+++ b/src/app/routes/datatable/components/busitable/mantable/mantable.component.ts
@@ -0,0 +1,138 @@
+import { Component, OnInit, ViewChild } from '@angular/core';
+import { STColumn, STComponent } from '@delon/abc/st';
+import { DatePipe, _HttpClient } from '@delon/theme';
+import { differenceInCalendarDays } from 'date-fns';
+import { DataService } from '../../../services/data.service';
+import { BusitablePillarComponent } from '../pillar/pillar.component';
+
+@Component({
+ selector: 'app-datatable-mantable',
+ templateUrl: './mantable.component.html',
+ styleUrls: ['./mantable.component.less'],
+ providers: [DatePipe]
+
+})
+export class DatatableMantableComponent implements OnInit {
+ @ViewChild('pillar') private readonly pillar!: BusitablePillarComponent;
+ @ViewChild('st') private readonly st!: STComponent;
+ type = 1;
+ mode = 'year';
+ date: any = null;
+ defineDate = [];
+ time: any = ['2022-01-01 00:00:00']
+ dateFormat = 'yyyy';
+ today = new Date();
+ dateNext: any = null;
+ modeNext = 'year';
+ chartData: any = {}
+ timeNext: any = ['2022-01-01 00:00:00']
+ flag = false;
+
+ columns: STColumn[] = [
+ { title: '部门', index: 'bm', className: 'text-center' },
+ { title: '业务员', index: 'ywy', className: 'text-center' },
+ { title: '合伙人数', index: 'hhrs', className: 'text-center' },
+ { title: '客户数', index: 'khs', className: 'text-center' },
+ { title: '客户活跃率', index: 'khhyl', className: 'text-center' },
+ { title: '客户预存款', index: 'kfyck', className: 'text-center', type: 'widget', widget: { type: 'currency-chy', params: ({ record }) => ({ value: record.kfyck }) } },
+ { title: '订单数', index: 'dds', className: 'text-center' },
+ { title: '订单金额', index: 'ddje', className: 'text-center', type: 'widget', widget: { type: 'currency-chy', params: ({ record }) => ({ value: record.ddje }) } },
+ { title: '业绩量', index: 'yjl', className: 'text-center' },
+ { title: '附加费金额', index: 'fjfje', className: 'text-center', type: 'widget', widget: { type: 'currency-chy', params: ({ record }) => ({ value: record.fjfje }) } },
+ { title: '平均附加费率', index: 'pjfjl', className: 'text-center' },
+ { title: '已开票金额', index: 'ykpje', className: 'text-center', type: 'widget', widget: { type: 'currency-chy', params: ({ record }) => ({ value: record.ykpje }) } },
+ ];
+ /**
+ * 查询参数
+ */
+ get reqParams() {
+ if(this.mode === 'year') {
+ this.type = 1
+ } else if(this.mode === 'month') {
+ this.type = 2
+ } else if(this.mode === 'date') {
+ this.type = 3
+ } else {
+ this.type = 4
+ }
+ let params: any = {
+ time: this.time,
+ type: this.type
+ };
+
+ delete params._$expand;
+ return { ...params };
+ }
+
+ constructor(public service: DataService, private datePipe: DatePipe) { }
+ ngOnInit(): void { }
+
+ initData(){
+ let type = 1
+ if(this.mode === 'year') {
+ type = 1
+ } else if(this.mode === 'month') {
+ type = 2
+ }
+ const params: any = {
+ time: this.timeNext,
+ type
+ };
+ this.service.request(this.service.$api_performanceReportHistogram, params).subscribe(res => {
+ if (res) {
+ this.chartData = res
+ if(this.flag) {
+ this.pillar.reRender()
+ }
+ }
+ })
+ }
+ changeData(){
+ if(this.mode === 'year') {
+ this.dateFormat = 'yyyy'
+ } else if(this.mode === 'month') {
+ this.dateFormat = 'yyyy-MM'
+ } else {
+ this.dateFormat = 'yyyy-MM-dd'
+ }
+ }
+ onChange(result: any) {
+ if(this.mode === 'year') {
+ this.time = [this.datePipe.transform(this.date, 'yyyy') + '-01-01 00:00:00']
+ } else if(this.mode === 'month') {
+ this.time = [this.datePipe.transform(this.date, 'yyyy-MM') + '-01 00:00:00']
+ } else if(this.mode === 'date') {
+ this.time = [this.datePipe.transform(this.date, 'yyyy-MM-dd') + ' 00:00:00']
+ } else{
+ this.time = [this.datePipe.transform(this.defineDate[0], 'yyyy-MM-dd') + '00:00:00', this.datePipe.transform(this.defineDate[1], 'yyyy-MM-dd') + ' 00:00:00']
+ }
+ this.st.reload({ ...this.reqParams });
+ }
+
+ changeDataNext() {
+ if(this.mode === 'year') {
+ this.dateFormat = 'yyyy'
+ } else if(this.mode === 'month') {
+ this.dateFormat = 'yyyy-MM'
+ }
+ }
+ onChangeNext(result: any) {
+ if(result === null) {
+ return
+ }
+ if(this.mode === 'year') {
+ this.timeNext = [this.datePipe.transform(this.dateNext, 'yyyy') + '-01-01 00:00:00']
+ } else if(this.mode === 'month') {
+ this.timeNext = [this.datePipe.transform(this.dateNext, 'yyyy-MM') + '-01 00:00:00']
+ }
+ this.flag = true
+ this.initData()
+ }
+ disabledDate = (current: Date): boolean =>
+ // Can not select days before today and today
+ differenceInCalendarDays(current, this.today) > 0;
+ exportFun(){
+
+ }
+
+}
diff --git a/src/app/routes/datatable/components/busitable/pillar/pillar.component.html b/src/app/routes/datatable/components/busitable/pillar/pillar.component.html
new file mode 100644
index 00000000..315c4e18
--- /dev/null
+++ b/src/app/routes/datatable/components/busitable/pillar/pillar.component.html
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/app/routes/datatable/components/busitable/pillar/pillar.component.less b/src/app/routes/datatable/components/busitable/pillar/pillar.component.less
new file mode 100644
index 00000000..e69de29b
diff --git a/src/app/routes/datatable/components/busitable/pillar/pillar.component.ts b/src/app/routes/datatable/components/busitable/pillar/pillar.component.ts
new file mode 100644
index 00000000..1a5e9ae1
--- /dev/null
+++ b/src/app/routes/datatable/components/busitable/pillar/pillar.component.ts
@@ -0,0 +1,72 @@
+/*
+ * @Description :
+ * @Version : 1.0
+ * @Author : Shiming
+ * @Date : 2022-04-06 14:32:03
+ * @LastEditors : Shiming
+ * @LastEditTime : 2022-04-18 14:25:25
+ * @FilePath : \\tms-obc-web\\src\\app\\routes\\datatable\\components\\busitable\\pillar\\pillar.component.ts
+ * Copyright (C) 2022 huzhenhong. All rights reserved.
+ */
+import { Component, ElementRef, Input, NgZone, OnChanges, OnInit, SimpleChanges, ViewChild } from '@angular/core';
+import { Chart } from '@antv/g2';
+import { DataService } from 'src/app/routes/datatable/services/data.service';
+@Component({
+ selector: 'app-busitable-pillar',
+ templateUrl: './pillar.component.html',
+ styleUrls: ['./pillar.component.less']
+})
+export class BusitablePillarComponent implements OnInit, OnChanges {
+ el: any;
+ @Input() chartData: any;
+ chart: any;
+ constructor(private service: DataService, private ngZone: NgZone) {
+
+ }
+ ngOnChanges(changes: SimpleChanges): void {
+ if (this.chartData) {
+ // setTimeout(()=>{
+ // this.chart.render(true)
+ // }, 1000)
+
+ }
+ }
+
+ ngOnInit(): void {
+
+ }
+ reRender() {
+ this.chart.data(this.chartData);
+ this.chart.render();
+ }
+ render(el: ElementRef): void {
+ this.el = el.nativeElement
+ setTimeout(() => {
+ this.ngZone.runOutsideAngular(() => this.init(this.el));
+ }, 500)
+ }
+
+ private init(el: HTMLElement): void {
+ this.chart = new Chart({
+ container: el,
+ autoFit: true,
+ height: 500,
+ });
+
+ this.chart.data(this.chartData);
+
+ const itemTpl = `
+
+ 业绩量: {value}
+
+`
+ this.chart.tooltip({
+ showTitle: true,
+ showMarkers: false,
+ itemTpl: itemTpl
+ });
+ this.chart.interval().position('time*number');
+ this.chart.render();
+ }
+
+}
\ No newline at end of file
diff --git a/src/app/routes/datatable/components/compliance/customer/customer.component.html b/src/app/routes/datatable/components/compliance/customer/customer.component.html
new file mode 100644
index 00000000..f12c62b1
--- /dev/null
+++ b/src/app/routes/datatable/components/compliance/customer/customer.component.html
@@ -0,0 +1,48 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.freightPrice | currency }}
+
+
+
\ No newline at end of file
diff --git a/src/app/routes/datatable/components/compliance/customer/customer.component.less b/src/app/routes/datatable/components/compliance/customer/customer.component.less
new file mode 100644
index 00000000..d754ef94
--- /dev/null
+++ b/src/app/routes/datatable/components/compliance/customer/customer.component.less
@@ -0,0 +1,20 @@
+.chooseBox {
+ display: flex;
+ float : right;
+}
+
+.timeBox {
+ display: flex;
+ margin : 0 0 0 10px;
+}
+
+.dateBox {
+ display: inline-block;
+ margin : 0 0 0 10px;
+}
+
+:host::ng-deep {
+ .ant-form-item-control {
+ max-width: 100%;
+ }
+}
\ No newline at end of file
diff --git a/src/app/routes/datatable/components/compliance/customer/customer.component.ts b/src/app/routes/datatable/components/compliance/customer/customer.component.ts
new file mode 100644
index 00000000..067f73c7
--- /dev/null
+++ b/src/app/routes/datatable/components/compliance/customer/customer.component.ts
@@ -0,0 +1,153 @@
+import { SFComponent } from '@delon/form';
+/*
+ * @Description :
+ * @Version : 1.0
+ * @Author : Shiming
+ * @Date : 2022-03-30 13:55:41
+ * @LastEditors : Shiming
+ * @LastEditTime : 2022-04-19 17:45:44
+ * @FilePath : \\tms-obc-web\\src\\app\\routes\\datatable\\components\\compliance\\customer\\customer.component.ts
+ * Copyright (C) 2022 huzhenhong. All rights reserved.
+ */
+import { Component, OnInit, ViewChild } from '@angular/core';
+import { STColumn, STComponent, STRequestOptions } from '@delon/abc/st';
+import { SFSchema } from '@delon/form';
+import { ModalHelper, _HttpClient, DatePipe } from '@delon/theme';
+import { DataService } from '../../../services/data.service';
+import { differenceInCalendarDays } from 'date-fns';
+import { Placeholder } from '@angular/compiler/src/i18n/i18n_ast';
+
+@Component({
+ selector: 'app-datatable-compliance-customer',
+ templateUrl: './customer.component.html',
+ styleUrls: ['./customer.component.less'],
+ providers: [DatePipe]
+})
+export class DatatableComplianceCustomerComponent implements OnInit {
+ @ViewChild('sf', { static: false }) sf!: SFComponent;
+ mode = 'year';
+ type = 1;
+ date: any = null;
+ defineDate = [];
+ time: any = ['2022'];
+ dateFormat = 'yyyy';
+ dateNext: any = null;
+ modeNext = 'year';
+ timeNext: any = ['2022-01-01 00:00:00'];
+ today = new Date();
+ searchSchema: SFSchema = {
+ properties: {
+ customerName: {
+ type: 'string',
+ title: '',
+ ui: {
+ placeholder: '请输入客户名称',
+ change: (value: any) => {
+ console.log(value);
+ this.st.reload({ ...this.reqParams });
+ }
+ },
+
+ },
+ salesmanName: {
+ type: 'string',
+ title: '',
+ ui: {
+ placeholder: '请输入业务员',
+ change: (value: any) => {
+ this.st.reload({ ...this.reqParams });
+ }
+ }
+ },
+ partnerName: {
+ type: 'string',
+ title: '',
+ ui: {
+ placeholder: '请输入客户名称',
+ change: (value: any) => {
+ console.log(value);
+ this.st.reload({ ...this.reqParams });
+ }
+ }
+ },
+ no4: {
+ type: 'string',
+ title: '',
+ ui: {
+ class: 'custom',
+ widget: 'custom',
+ grid: { xxl: 9, xl: 12, lg: 24, md: 24, sm: 24, xs: 24 }
+ }
+ }
+ }
+ };
+ @ViewChild('st') private readonly st!: STComponent;
+ columns: STColumn[] = [
+ { title: '公司名称',width: '200px', index: 'enterpriseName' ,},
+ { title: '注册时间', width: '200px', index: 'registerTime',},
+ { title: '客户类型', width: '200px', index: 'customerType' },
+ { title: '业务员',width: '200px', index: 'salesmanName' },
+ { title: '合伙人',width: '200px', index: 'partnerName' },
+ { title: '订单数',width: '200px', index: 'billCounts' },
+ { title: '订单不合格数',width: '200px', index: 'billQuaCounts' },
+ { title: '订单不合格率',width: '200px', index: 'billQuaCountsPer' },
+ { title: '货源单订单数',width: '200px', index: 'gsourceCounts' },
+ { title: '合同单数', width: '200px',index: 'billConCounts' },
+ { title: '货源单个',width: '200px', index: 'gsourceCounts' },
+ { title: '运费直付单数',width: '200px', index: 'freightDirPayCounts' },
+ { title: '运费代收单数',width: '200px', index: 'freightRepPayCounts' },
+ { title: '手机直付', width: '200px',index: 'updatedAt' },
+ { title: '汇款单数',width: '200px', index: 'updatedAt' },
+ { title: '及时付款',width: '200px', index: 'timelyPayPer' },
+
+ ];
+
+ constructor(private http: _HttpClient, private modal: ModalHelper, public service: DataService, private datePipe: DatePipe) {}
+ /**
+ * 查询参数
+ */
+ get reqParams() {
+ if (this.mode === 'year') {
+ this.type = 1;
+ } else if (this.mode === 'month') {
+ this.type = 2;
+ } else if (this.mode === 'date') {
+ this.type = 3;
+ } else {
+ this.type = 4;
+ }
+ const params: any = Object.assign({}, this.sf?.value || {});
+ params.type = this.type;
+ params.queryTime = this.time;
+ delete params._$expand;
+ return { ...params };
+ }
+ ngOnInit(): void {}
+ onChange(result: any) {
+ if (this.mode === 'year') {
+ this.time = [this.datePipe.transform(this.date, 'yyyy')];
+ } else if (this.mode === 'month') {
+ this.time = [this.datePipe.transform(this.date, 'yyyy-MM')];
+ } else if (this.mode === 'date') {
+ this.time = [this.datePipe.transform(this.date, 'yyyy-MM-dd')];
+ } else {
+ this.time = [
+ this.datePipe.transform(this.defineDate[0], 'yyyy-MM-dd'),
+ this.datePipe.transform(this.defineDate[1], 'yyyy-MM-dd')
+ ];
+ }
+ this.st.reload({ ...this.reqParams });
+ }
+ changeData() {
+ if (this.mode === 'year') {
+ this.dateFormat = 'yyyy';
+ } else if (this.mode === 'month') {
+ this.dateFormat = 'yyyy-MM';
+ } else {
+ this.dateFormat = 'yyyy-MM-dd';
+ }
+ }
+ disabledDate = (current: Date): boolean =>
+ // Can not select days before today and today
+ differenceInCalendarDays(current, this.today) > 0;
+}
diff --git a/src/app/routes/datatable/components/compliance/index/curve/curve.component.html b/src/app/routes/datatable/components/compliance/index/curve/curve.component.html
new file mode 100644
index 00000000..7ceba0b7
--- /dev/null
+++ b/src/app/routes/datatable/components/compliance/index/curve/curve.component.html
@@ -0,0 +1,2 @@
+
+
diff --git a/src/app/routes/datatable/components/compliance/index/curve/curve.component.less b/src/app/routes/datatable/components/compliance/index/curve/curve.component.less
new file mode 100644
index 00000000..e69de29b
diff --git a/src/app/routes/datatable/components/compliance/index/curve/curve.component.ts b/src/app/routes/datatable/components/compliance/index/curve/curve.component.ts
new file mode 100644
index 00000000..0dbacb97
--- /dev/null
+++ b/src/app/routes/datatable/components/compliance/index/curve/curve.component.ts
@@ -0,0 +1,91 @@
+import { Component, ElementRef, Input, NgZone, OnChanges, OnInit, SimpleChanges, ViewChild } from '@angular/core';
+import { G2MiniAreaClickItem } from '@delon/chart/mini-area';
+
+// import DataSet from '@antv/data-set';
+const DataSet = require('@antv/data-set');
+import { Chart } from '@antv/g2';
+import { DataService } from 'src/app/routes/datatable/services/data.service';
+@Component({
+ selector: 'app-compliance-curve',
+ templateUrl: './curve.component.html',
+ styleUrls: ['./curve.component.less']
+})
+export class ComplianceCurveComponent implements OnInit,OnChanges {
+ el: any;
+ @Input() chartData: any;
+ chart: any;
+ constructor(private service: DataService, private ngZone: NgZone) {
+
+ }
+ ngOnChanges(changes: SimpleChanges): void {
+ if (this.chartData) {
+ // setTimeout(()=>{
+ // this.chart.render(true)
+ // }, 1000)
+
+ }
+ }
+
+ ngOnInit(): void {
+
+ }
+ reRender() {
+ setTimeout(() => {
+ this.chart.data(this.chartData);
+ this.chart.render();
+ }, 1000)
+ }
+ render(el: ElementRef): void {
+ this.el = el.nativeElement
+ setTimeout(() => {
+ console.log(this.chartData)
+ this.ngZone.runOutsideAngular(() => this.init(this.el));
+ }, 1000)
+ }
+
+ private init(el: HTMLElement): void {
+ this.chart = new Chart({
+ container: el,
+ autoFit: true,
+ height: 500,
+ });
+
+ this.chart.data(this.chartData);
+ this.chart.scale({
+ time: {
+ range: [0, 1],
+ },
+ number: {
+ min: 0,
+ nice: true,
+ },
+ });
+
+ this.chart.tooltip({
+ showCrosshairs: true,
+ shared: true,
+ });
+
+ this.chart.axis('proportion', {
+ label: {
+ formatter: (val: any) => {
+ return val*100+ ' %';
+ },
+ },
+ });
+
+ this.chart
+ .line()
+ .position('situationDate*proportion')
+ .color('type')
+ .tooltip('proportion*type', function(name: any, value: any) {
+ return {
+ name: name*100+'%',
+ value: value
+ };
+ });
+
+ this.chart.render();
+
+ }
+}
diff --git a/src/app/routes/datatable/components/compliance/index/index.component.html b/src/app/routes/datatable/components/compliance/index/index.component.html
new file mode 100644
index 00000000..5b3c4635
--- /dev/null
+++ b/src/app/routes/datatable/components/compliance/index/index.component.html
@@ -0,0 +1,67 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ 合格:{{cardData1?.leftQuantity}} 不合格:{{cardData1?.rightQuantity}}
+
+
+
+
+
+
+
+
+ 货源单:{{cardData2?.leftQuantity}} 合同单:{{cardData2?.rightQuantity}}
+
+
+
+
+
+
+
+
+ 司机:{{cardData3?.leftQuantity}} 车队长:{{cardData3?.rightQuantity}}
+
+
+
+
+
+
+
+
+ 准时:{{cardData4?.leftQuantity}} 逾期:{{cardData4?.rightQuantity}}
+
+
+
+
+
+
+
+
+
+
diff --git a/src/app/routes/datatable/components/compliance/index/index.component.less b/src/app/routes/datatable/components/compliance/index/index.component.less
new file mode 100644
index 00000000..3d0d3e63
--- /dev/null
+++ b/src/app/routes/datatable/components/compliance/index/index.component.less
@@ -0,0 +1,17 @@
+.card-f{
+ color: #5a5a5a;
+ .card-f-l{
+ margin-right: 24px;
+ }
+}
+.chooseBox{
+ display: flex;
+}
+.timeBox{
+ display: flex;
+ margin: 0 0 0 10px;
+}
+.dateBox{
+ display: inline-block;
+ margin: 0 0 0 10px;
+}
\ No newline at end of file
diff --git a/src/app/routes/datatable/components/compliance/index/index.component.ts b/src/app/routes/datatable/components/compliance/index/index.component.ts
new file mode 100644
index 00000000..b545a4f5
--- /dev/null
+++ b/src/app/routes/datatable/components/compliance/index/index.component.ts
@@ -0,0 +1,263 @@
+import { Component, ElementRef, NgZone, OnInit, ViewChild } from '@angular/core';
+import { DatePipe, ModalHelper, _HttpClient } from '@delon/theme';
+import { G2MiniAreaClickItem, G2MiniAreaData } from '@delon/chart/mini-area';
+import { format } from 'date-fns';
+import { SFComponent, SFDateWidgetSchema, SFRadioWidgetSchema, SFSchema, SFUISchema } from '@delon/form';
+import { G2TimelineData, G2TimelineMap } from '@delon/chart/timeline';
+import { Chart } from '@antv/g2';
+import { DataService } from '../../../services/data.service';
+import { ComplianceCurveComponent } from './curve/curve.component';
+
+@Component({
+ selector: 'app-datatable-compliance-index',
+ templateUrl: './index.component.html',
+ styleUrls: ['./index.component.less'],
+ providers: [DatePipe]
+})
+export class DatatableComplianceIndexComponent implements OnInit {
+ @ViewChild('curve') private readonly curve!: ComplianceCurveComponent;
+ @ViewChild('sf', { static: false })
+
+ sf!: SFComponent;
+ ui!: SFUISchema;
+ schema: SFSchema = {};
+
+ mode = 'year';
+ date: any = null;
+ dateFormat = 'yyyy';
+ time: any = '2022'
+ chartData: any = {}
+
+ cardData1:any;
+ cardData2:any;
+ cardData3:any;
+ cardData4:any;
+
+ constructor(private http: _HttpClient, private modal: ModalHelper, private ngZone: NgZone,public service: DataService, private datePipe: DatePipe) {}
+
+ ngOnInit(): void {
+ this.initSF();
+ this.initdData();
+ }
+
+ initdData(){
+ const params ={
+ ...this.sf?.value,
+ timeType:this.mode ==='month'?'M':'Y',
+ time:this.time
+ }
+ this.service.request(this.service.$api_getBillRateQualified, params).subscribe(res => {
+ if (res) {
+ this.cardData1 = res;
+ this.cardData1.proportion = this.cardData1.proportion*100 +'%'
+ }
+ });
+ this.service.request(this.service.$api_getBillRateProportion, params).subscribe(res => {
+ if (res) {
+ this.cardData2 = res;
+ this.cardData2.proportion = this.cardData2.proportion*100 +'%'
+ }
+ });
+ this.service.request(this.service.$api_getBillRateDirectPayment, params).subscribe(res => {
+ if (res) {
+ this.cardData3 = res;
+ this.cardData3.proportion = this.cardData3.proportion*100 +'%'
+ }
+ });
+ this.service.request(this.service.$api_getBillTimelyPayment, params).subscribe(res => {
+ if (res) {
+ this.cardData4 = res;
+ this.cardData4.proportion = this.cardData4.proportion*100 +'%'
+ }
+ });
+
+ this.service.request(this.service.$api_listMonitorSituation, params).subscribe(res => {
+ if (res) {
+ this.chartData = res
+ this.curve.reRender();
+
+ }
+ })
+ }
+
+
+ changeData(){
+ if(this.mode === 'year') {
+ this.dateFormat = 'yyyy'
+ } else if(this.mode === 'month') {
+ this.dateFormat = 'yyyy-MM'
+ }
+
+ }
+
+ onChange(result: any) {
+ if(result === null) {
+ return
+ }
+ if(this.mode === 'year') {
+ this.time = this.datePipe.transform(this.date, 'yyyy')
+ } else if(this.mode === 'month') {
+ this.time = this.datePipe.transform(this.date, 'yyyy-MM')
+ }
+ this.initdData();
+ }
+
+ initSF() {
+ this.schema = {
+ properties: {
+ enterpriseInfoId: {
+ type: 'string',
+ title: '',
+ ui: {
+ widget: 'select',
+ placeholder: '网络货运人',
+ asyncData: () => this.service.getNetworkFreightForwarder({}),
+ change:()=>{
+ this.initdData();
+ },
+ allowClear: true
+ }
+ },
+ enterpriseProjectId: {
+ type: 'string',
+ title: '',
+ ui: {
+ widget: 'select',
+ placeholder: '部门'
+ }
+ },
+ salesmanId: {
+ type: 'string',
+ title: '',
+ ui: {
+ placeholder: '业务员',
+ enter: () => this.initdData(),
+ }
+ }
+ }
+ };
+ this.ui = {
+ '*': {
+ grid: { span: 4 }
+ }
+ };
+
+ }
+
+
+
+
+ render(el: ElementRef) {
+ this.ngZone.runOutsideAngular(() => this.init(el.nativeElement));
+ }
+
+ private init(el: HTMLElement): void {
+ const chart = new Chart({
+ container: el,
+ autoFit: true,
+ height: 400
+ });
+ // 以三组数据为例, 需要展示 91/92/93年中a/b/c数据走势
+ const data = [
+ { data: '1月', label: '订单合格率', value: 5 },
+ { data: '2月', label: '订单合格率', value: 10 },
+ { data: '3月', label: '订单合格率', value: 25 },
+ { data: '4月', label: '订单合格率', value: 35 },
+ { data: '5月', label: '订单合格率', value: 15 },
+ { data: '6月', label: '订单合格率', value: 5 },
+ { data: '7月', label: '订单合格率', value: 95 },
+ { data: '8月', label: '订单合格率', value: 45 },
+
+ { data: '1月', label: '付款及时率', value: 10 },
+ { data: '2月', label: '付款及时率', value: 15 },
+ { data: '3月', label: '付款及时率', value: 30 },
+ { data: '4月', label: '付款及时率', value: 8 },
+ { data: '5月', label: '付款及时率', value: 9 },
+ { data: '6月', label: '付款及时率', value: 5 },
+ { data: '7月', label: '付款及时率', value: 80 },
+ { data: '8月', label: '付款及时率', value: 55 },
+
+ { data: '1月', label: '货源占比率', value: 90 },
+ { data: '2月', label: '货源占比率', value: 30 },
+ { data: '3月', label: '货源占比率', value: 45 },
+ { data: '4月', label: '货源占比率', value: 35 },
+ { data: '5月', label: '货源占比率', value: 95 },
+ { data: '6月', label: '货源占比率', value: 35 },
+ { data: '7月', label: '货源占比率', value: 65 },
+ { data: '8月', label: '货源占比率', value: 63 },
+
+ { data: '1月', label: '运费直付占比', value: 30 },
+ { data: '2月', label: '运费直付占比', value: 60 },
+ { data: '3月', label: '运费直付占比', value: 25 },
+ { data: '4月', label: '运费直付占比', value: 35 },
+ { data: '5月', label: '运费直付占比', value: 15 },
+ { data: '6月', label: '运费直付占比', value: 55 },
+ { data: '7月', label: '运费直付占比', value: 50 },
+ { data: '8月', label: '运费直付占比', value: 30 },
+ ];
+
+ chart.data(data);
+ //刻度自定义
+ chart.scale({
+ data: {
+ range: [0, 1],
+ },
+ value: {
+ min: 0,
+ nice: true,
+ },
+ });
+ // 图表下方图形文字自定义
+ chart.legend({
+ items:[
+ {
+ name: '订单合格率',
+ value: 'node_load1',
+ marker: {
+ symbol: 'circle',
+ style: {fill: '#6193f7'}
+ },
+ },
+ {
+ name: '付款及时率',
+ value: 'node_load2',
+ marker: {symbol: 'circle',style: {fill: '#58d3a2'}},
+ },
+ {
+ name: '货源占比率',
+ value: 'node_load13',
+ marker: {symbol: 'circle',style: {fill: '#5b6d8f'}},
+ },
+ {
+ name: '运费直付占比',
+ value: 'node_load13',
+ marker: {symbol: 'circle',style: {fill: '#f0b915'}},
+ },
+ ]
+ });
+ // 提示自定义
+ chart.tooltip({
+ showCrosshairs: true,
+ shared: true,
+ });
+
+ //数据格式化
+ chart.axis('value', {
+ label: {
+ formatter: (val) => {
+ return val + ' %';
+ },
+ },
+ });
+ // 在x*y的坐标点上按z值绘制线条, 如果z值相同将使用直线连接
+ chart.line().position('data*value').color('label').tooltip('label*value', (name:any, value:any) => {
+ return {
+ name: name,
+ value: value + '%'
+ };
+ });;
+ // 在x*y的坐标上按z值绘制圆点
+ chart.point().position('data*value').size(4).color('label').shape('circle');
+ chart.render();
+ }
+}
diff --git a/src/app/routes/datatable/components/compliance/salesman/salesman.component.html b/src/app/routes/datatable/components/compliance/salesman/salesman.component.html
new file mode 100644
index 00000000..ea425eca
--- /dev/null
+++ b/src/app/routes/datatable/components/compliance/salesman/salesman.component.html
@@ -0,0 +1,46 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/app/routes/datatable/components/compliance/salesman/salesman.component.less b/src/app/routes/datatable/components/compliance/salesman/salesman.component.less
new file mode 100644
index 00000000..d754ef94
--- /dev/null
+++ b/src/app/routes/datatable/components/compliance/salesman/salesman.component.less
@@ -0,0 +1,20 @@
+.chooseBox {
+ display: flex;
+ float : right;
+}
+
+.timeBox {
+ display: flex;
+ margin : 0 0 0 10px;
+}
+
+.dateBox {
+ display: inline-block;
+ margin : 0 0 0 10px;
+}
+
+:host::ng-deep {
+ .ant-form-item-control {
+ max-width: 100%;
+ }
+}
\ No newline at end of file
diff --git a/src/app/routes/datatable/components/compliance/salesman/salesman.component.ts b/src/app/routes/datatable/components/compliance/salesman/salesman.component.ts
new file mode 100644
index 00000000..d8dc8f23
--- /dev/null
+++ b/src/app/routes/datatable/components/compliance/salesman/salesman.component.ts
@@ -0,0 +1,220 @@
+import { Component, OnInit, ViewChild } from '@angular/core';
+import { STColumn, STComponent } from '@delon/abc/st';
+import { SFComponent, SFDateWidgetSchema, SFSchema, SFUISchema } from '@delon/form';
+import { DatePipe, _HttpClient } from '@delon/theme';
+import { differenceInCalendarDays } from 'date-fns';
+import { DataService } from '../../../services/data.service';
+
+@Component({
+ selector: 'app-datatable-compliance-salesman',
+ templateUrl: './salesman.component.html',
+ styleUrls: ['./salesman.component.less'],
+ providers: [DatePipe]
+
+})
+export class DatatableComplianceSalesmanComponent implements OnInit {
+ url = `/user`;
+ @ViewChild('st', { static: false }) st!: STComponent;
+ @ViewChild('sf', { static: false }) sf!: SFComponent;
+ _$expand = false;
+ type = 1;
+ mode = 'year';
+ date: any = null;
+ defineDate = [];
+ time: any = ['2022-01-01 00:00:00']
+ dateFormat = 'yyyy';
+ today = new Date();
+ ui: SFUISchema = {};
+ schema: SFSchema = {};
+ isLoading: boolean = false;
+ searchSchema: SFSchema = {
+ properties: {
+ department: {
+ type: 'string',
+ title: '',
+ ui: {
+ placeholder: '请选择部门',
+ change: (value: any) => {
+ console.log(value);
+ this.st.reload({ ...this.reqParams });
+ }
+ },
+
+ },
+ customerName: {
+ type: 'string',
+ title: '',
+ ui: {
+ placeholder: '请输入业务员',
+ change: (value: any) => {
+ console.log(value);
+ this.st.reload({ ...this.reqParams });
+ }
+ },
+ },
+ salesmanName: {
+ type: 'string',
+ title: '',
+ ui: {
+ placeholder: '请输入客户名称',
+ change: (value: any) => {
+ this.st.reload({ ...this.reqParams });
+ }
+ }
+ },
+ no4: {
+ type: 'string',
+ title: '',
+ ui: {
+ class: 'custom',
+ widget: 'custom',
+ grid: { xxl: 9, xl: 10, lg: 12, md: 24, sm: 24, xs: 24 }
+
+ }
+ }
+ },
+
+ };
+ columns: STColumn[] = [
+ { title: '部门', index: 'department', className: 'text-center', width: '200px' },
+ { title: '业务员', index: 'salesmen', className: 'text-center', width: '100px' },
+ { title: '客户数', index: 'cusCount', className: 'text-right', width: '100px', },
+ { title: '订单数', index: 'billCount', className: 'text-center', width: '120px' },
+ { title: '订单合格率', index: 'billComPer', className: 'text-right', width: '100px',format: (item: any) => {return ((item?.billComPer)*100).toFixed(2) + '%' }},
+ { title: '付款及时率', index: 'payTimePer', className: 'text-center', width: '130px',format: (item: any) => {return ((item?.payTimePer)*100).toFixed(2) + '%' } },
+ { title: '货源单占比', index: 'goodResPer', className: 'text-right', width: '120px',format: (item: any) => {return ((item?.goodResPer)*100).toFixed(2) + '%' } },
+ { title: '运费直付占比', index: 'feightPayPer', className: 'text-right', width: '100px', format: (item: any) => {return ((item?.feightPayPer)*100).toFixed(2) + '%' } },
+ ];
+ /**
+ * 查询参数
+ */
+ get reqParams() {
+ if(this.mode === 'year') {
+ this.type = 1
+ } else if(this.mode === 'month') {
+ this.type = 2
+ } else if(this.mode === 'date') {
+ this.type = 3
+ } else {
+ this.type = 4
+ }
+ let params: any = {
+ time: this.time,
+ type: this.type,
+ ...this.sf?.value
+ };
+
+ delete params._$expand;
+ return { ...params };
+ }
+ constructor(public service: DataService, private datePipe: DatePipe) { }
+ ngOnInit(): void {
+ this.initSF();
+ }
+ /**
+ * 初始化查询表单
+ */
+ initSF() {
+ this.schema = {
+ properties: {
+ _$expand: { type: 'boolean', ui: { hidden: true } },
+ enterpriseName: {
+ type: 'string',
+ title: '货主名称',
+ ui: {
+ placeholder: '请输入',
+ }
+ },
+ customerType: {
+ type: 'string',
+ title: '客户类型',
+ ui: {
+ widget: 'select',
+ placeholder: '请选择',
+ },
+ enum: [
+ {label: '直客', value: 2},
+ {label: '渠道客户', value: 3},
+ {label: '平台客户', value: 1},
+ ]
+ },
+ customerStatus: {
+ type: 'string',
+ title: '客户状态',
+ ui: {
+ widget: 'select',
+ placeholder: '请选择',
+ },
+ enum: [
+ {label: '未激活', value: 1},
+ {label: '沉默', value: 2},
+ {label: '流失', value: 3},
+ {label: '活跃', value: 4},
+ ]
+ },
+ registerTime: {
+ title: '注册时间',
+ type: 'string',
+ ui: {
+ widget: 'sl-from-to', type: 'date', format: 'yyyy-MM-dd', visibleIf: {
+ _$expand: (value: boolean) => value,
+ },
+ } as SFDateWidgetSchema,
+ }
+ },
+ type: 'object'
+ };
+ this.ui = { '*': { spanLabelFixed: 110, grid: { span: 8, gutter: 4 } } };
+ }
+ changeData(){
+ if(this.mode === 'year') {
+ this.dateFormat = 'yyyy'
+ } else if(this.mode === 'month') {
+ this.dateFormat = 'yyyy-MM'
+ } else {
+ this.dateFormat = 'yyyy-MM-dd'
+ }
+ }
+ onChange(result: any) {
+ if(result === null) {
+ return
+ }
+ if(this.mode === 'year') {
+ this.time = [this.datePipe.transform(this.date, 'yyyy') + '-01-01 00:00:00']
+ } else if(this.mode === 'month') {
+ this.time = [this.datePipe.transform(this.date, 'yyyy-MM') + '-01 00:00:00']
+ } else if(this.mode === 'date') {
+ this.time = [this.datePipe.transform(this.date, 'yyyy-MM-dd') + ' 00:00:00']
+ } else{
+ this.time = [this.datePipe.transform(this.defineDate[0], 'yyyy-MM-dd') + '00:00:00', this.datePipe.transform(this.defineDate[1], 'yyyy-MM-dd') + ' 00:00:00']
+ }
+ this.st.reload({ ...this.reqParams });
+ }
+ disabledDate = (current: Date): boolean =>
+ // Can not select days before today and today
+ differenceInCalendarDays(current, this.today) > 0;
+
+ export() {
+ // this.service.downloadFile(this.service.$api_exportUploadBill, this.sf.value, {});
+ }
+ search() {
+ this.st?.load(1)
+
+ }
+ /**
+ * 伸缩查询条件
+ */
+ expandToggle() {
+ this._$expand = !this._$expand;
+ this.sf?.setValue('/_$expand', this._$expand);
+ }
+
+ /**
+ * 重置表单
+ */
+ resetSF() {
+ this.sf.reset();
+ this._$expand = false;
+ this.isLoading = true
+ }
+}
diff --git a/src/app/routes/datatable/components/customtable/customindex/curve/curve.component.html b/src/app/routes/datatable/components/customtable/customindex/curve/curve.component.html
new file mode 100644
index 00000000..0640a4d4
--- /dev/null
+++ b/src/app/routes/datatable/components/customtable/customindex/curve/curve.component.html
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/app/routes/datatable/components/customtable/customindex/curve/curve.component.less b/src/app/routes/datatable/components/customtable/customindex/curve/curve.component.less
new file mode 100644
index 00000000..e69de29b
diff --git a/src/app/routes/datatable/components/customtable/customindex/curve/curve.component.ts b/src/app/routes/datatable/components/customtable/customindex/curve/curve.component.ts
new file mode 100644
index 00000000..ff90b80c
--- /dev/null
+++ b/src/app/routes/datatable/components/customtable/customindex/curve/curve.component.ts
@@ -0,0 +1,92 @@
+/*
+ * @Description :
+ * @Version : 1.0
+ * @Author : Shiming
+ * @Date : 2022-04-06 13:43:29
+ * @LastEditors : Shiming
+ * @LastEditTime : 2022-04-06 19:20:24
+ * @FilePath : \\tms-obc-web\\src\\app\\routes\\datatable\\components\\customtable\\customindex\\curve\\curve.component.ts
+ * Copyright (C) 2022 huzhenhong. All rights reserved.
+ */
+import { Component, ElementRef, Input, NgZone, OnChanges, OnInit, SimpleChanges, ViewChild } from '@angular/core';
+import { Chart } from '@antv/g2';
+import { DataService } from 'src/app/routes/datatable/services/data.service';
+@Component({
+ selector: 'app-datatable-customindex-curve',
+ templateUrl: './curve.component.html',
+ styleUrls: ['./curve.component.less']
+})
+export class DatatableCustomindexCurveComponent implements OnInit, OnChanges {
+ el: any;
+ @Input() chartData: any;
+ chart: any;
+ constructor(private service: DataService, private ngZone: NgZone) {
+
+ }
+ ngOnChanges(changes: SimpleChanges): void {
+ if (this.chartData) {
+ // setTimeout(()=>{
+ // this.chart.render(true)
+ // }, 1000)
+
+ }
+ }
+
+ ngOnInit(): void {
+
+ }
+ reRender() {
+ setTimeout(() => {
+ this.chart.data(this.chartData);
+ this.chart.render();
+ }, 1000)
+ }
+ render(el: ElementRef): void {
+ this.el = el.nativeElement
+ setTimeout(() => {
+ this.ngZone.runOutsideAngular(() => this.init(this.el));
+ },500)
+ console.log(this.chartData);
+ }
+
+ private init(el: HTMLElement): void {
+ this.chart = new Chart({
+ container: el,
+ autoFit: true,
+ height: 500,
+ });
+
+ this.chart.data(this.chartData);
+ this.chart.scale({
+ time: {
+ range: [0, 1],
+ },
+ number: {
+ nice: true,
+ },
+ });
+
+ this.chart.tooltip({
+ showCrosshairs: true,
+ shared: true,
+ });
+
+ this.chart.axis('number', {
+ label: {
+ formatter: (val: any) => {
+ return val;
+ },
+ },
+ });
+
+ this.chart
+ .line()
+ .position('time*number')
+ .color('name')
+
+
+ this.chart.render();
+
+ }
+
+}
\ No newline at end of file
diff --git a/src/app/routes/datatable/components/customtable/customindex/customindex.component.html b/src/app/routes/datatable/components/customtable/customindex/customindex.component.html
new file mode 100644
index 00000000..b41b90b2
--- /dev/null
+++ b/src/app/routes/datatable/components/customtable/customindex/customindex.component.html
@@ -0,0 +1,99 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 货主
+ 合伙人
+ 司机
+ 车辆
+
+
+
+
+
+
+
+
+
diff --git a/src/app/routes/datatable/components/customtable/customindex/customindex.component.less b/src/app/routes/datatable/components/customtable/customindex/customindex.component.less
new file mode 100644
index 00000000..6b4b1cba
--- /dev/null
+++ b/src/app/routes/datatable/components/customtable/customindex/customindex.component.less
@@ -0,0 +1,11 @@
+.chooseBox{
+ display: flex;
+}
+.timeBox{
+ display: flex;
+ margin: 0 0 0 10px;
+}
+.dateBox{
+ display: inline-block;
+ margin: 0 0 0 10px;
+}
\ No newline at end of file
diff --git a/src/app/routes/datatable/components/customtable/customindex/customindex.component.spec.ts b/src/app/routes/datatable/components/customtable/customindex/customindex.component.spec.ts
new file mode 100644
index 00000000..09bf44a2
--- /dev/null
+++ b/src/app/routes/datatable/components/customtable/customindex/customindex.component.spec.ts
@@ -0,0 +1,24 @@
+import { waitForAsync, ComponentFixture, TestBed } from '@angular/core/testing';
+import { DatatableCustomindexComponent } from './customindex.component';
+
+describe('DatatableCustomindexComponent', () => {
+ let component: DatatableCustomindexComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(waitForAsync(() => {
+ TestBed.configureTestingModule({
+ declarations: [ DatatableCustomindexComponent ]
+ })
+ .compileComponents();
+ }));
+
+ beforeEach(() => {
+ fixture = TestBed.createComponent(DatatableCustomindexComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/src/app/routes/datatable/components/customtable/customindex/customindex.component.ts b/src/app/routes/datatable/components/customtable/customindex/customindex.component.ts
new file mode 100644
index 00000000..7f9d4954
--- /dev/null
+++ b/src/app/routes/datatable/components/customtable/customindex/customindex.component.ts
@@ -0,0 +1,236 @@
+import { Component, OnInit, ViewChild } from '@angular/core';
+import { STColumn, STComponent } from '@delon/abc/st';
+import { SFComponent } from '@delon/form';
+import { DatePipe, _HttpClient } from '@delon/theme';
+import { differenceInCalendarDays } from 'date-fns';
+import { DataService } from '../../../services/data.service';
+import { DatatableCustomindexCurveComponent } from './curve/curve.component';
+
+@Component({
+ selector: 'app-datatable-customindex',
+ templateUrl: './customindex.component.html',
+ styleUrls: ['./customindex.component.less'],
+ providers: [DatePipe]
+})
+export class DatatableCustomindexComponent implements OnInit {
+ @ViewChild('st') private readonly st!: STComponent;
+ @ViewChild('sf', { static: false }) sf!: SFComponent;
+ @ViewChild('curve') private readonly curve!: DatatableCustomindexCurveComponent;
+ type = 1;
+ mode = 'year';
+ date: any = null;
+ defineDate = [];
+ timeStart: any = '2022-01-01';
+ timeEnd: any = '2022-12-31';
+ dateFormat = 'yyyy';
+ today = new Date();
+ dateNext: any = null;
+ modeNext = 'year';
+ timeNext: any = ['2022-01-01 00:00:00'];
+ chartData: any = [];
+ flag = false;
+
+ columns: STColumn[] = [
+ { title: '用户类型', render: 'type', className: 'text-center' },
+ { title: '用户总数', index: 'total', className: 'text-center' },
+ { title: '已认证数量', index: 'auditPassTotal', className: 'text-center' },
+ { title: '活跃用户数', index: 'activeTotal', className: 'text-center' },
+ { title: '未激活用户数', index: 'notActivationTotal', className: 'text-center' },
+ { title: '沉默用户数', index: 'silentTotal', className: 'text-center' },
+ { title: '流失用户数', index: 'drainTotal', className: 'text-center' },
+ { title: '流失率', index: 'drainRate', className: 'text-center',format: (item: any) => {return ((item?.drainRate)*100).toFixed(2) + '%' }}
+ ];
+ hzData: any;
+ hhrData: any = {
+ total: 0
+ };
+ sjData: any;
+ clData: any;
+ reportData: any = [];
+
+ constructor(public service: DataService, private datePipe: DatePipe) {}
+ ngOnInit(): void {
+ this.initCurveData();
+ }
+ initCurveData() {
+ this.cardData();
+ this.listData();
+ this.addData('year', '2022-01-01');
+ }
+ listData(type?: string, stime?: any, etime?: any) {
+ this.reportData = [];
+ this.service
+ .request(this.service.$api_statistics_totalDetail, {
+ dateStart: stime || this.timeStart,
+ dateEnd: etime || this.timeEnd,
+ type: 1 //用户角色类型 1:货主 2:合伙人 3:司机 4:车辆
+ })
+ .subscribe(res => {
+ if (res) {
+ this.reportData.push(res);
+ this.st.reload();
+ }
+ });
+ this.service
+ .request(this.service.$api_statistics_totalDetail, {
+ dateStart: stime || this.timeStart,
+ dateEnd: etime || this.timeEnd,
+ type: 2
+ })
+ .subscribe(res => {
+ if (res) {
+ this.reportData.push(res);
+ this.st.reload();
+ }
+ });
+ this.service
+ .request(this.service.$api_statistics_totalDetail, {
+ dateStart: stime || this.timeStart,
+ dateEnd: etime || this.timeEnd,
+ type: 3
+ })
+ .subscribe(res => {
+ if (res) {
+ this.reportData.push(res);
+ this.st.reload();
+ }
+ });
+ this.service
+ .request(this.service.$api_statistics_totalDetail, {
+ dateStart: stime || this.timeStart,
+ dateEnd: etime || this.timeEnd,
+ type: 4
+ })
+ .subscribe(res => {
+ if (res) {
+ this.reportData.push(res);
+ this.st.reload();
+ }
+ });
+ }
+ cardData() {
+ this.service.request(this.service.$api_statistics_total, { type: 1 }).subscribe(res => {
+ if (res) {
+ this.hzData = res;
+ }
+ });
+ this.service.request(this.service.$api_statistics_total, { type: 2 }).subscribe(res => {
+ if (res) {
+
+ this.hhrData = res;
+ console.log(this.hhrData);
+
+ }
+ });
+ this.service.request(this.service.$api_statistics_total, { type: 3 }).subscribe(res => {
+ if (res) {
+ this.sjData = res;
+ }
+ });
+ this.service.request(this.service.$api_statistics_total, { type: 4 }).subscribe(res => {
+ if (res) {
+ this.clData = res;
+ }
+ });
+ }
+ addData(type?: string, time?: any) {
+ this.chartData = []
+ this.service
+ .request(this.service.$api_statistics_totalAdd, {
+ date: time,
+ dateType: type === 'month' ? 2 : 1, //日期类型 1:年 2:月
+ type: 1
+ })
+ .subscribe(res => {
+ if (res) {
+ this.chartData.push(...res);
+ console.log(this.curve);
+ this.curve.reRender();
+ }
+ });
+ this.service
+ .request(this.service.$api_statistics_totalAdd, {
+ date: time,
+ dateType: type === 'month' ? 2 : 1, //日期类型 1:年 2:月
+ type: 2
+ })
+ .subscribe(res => {
+ if (res) {
+ this.chartData.push(...res);
+ this.curve.reRender();
+ }
+ });
+ this.service
+ .request(this.service.$api_statistics_totalAdd, {
+ date: time,
+ dateType: type === 'month' ? 2 : 1, //日期类型 1:年 2:月
+ type: 3
+ })
+ .subscribe(res => {
+ if (res) {
+ this.chartData.push(...res);
+ this.curve.reRender();
+ }
+ });
+ this.service
+ .request(this.service.$api_statistics_totalAdd, {
+ date: time,
+ dateType: type === 'month' ? 2 : 1, //日期类型 1:年 2:月
+ type: 4
+ })
+ .subscribe(res => {
+ if (res) {
+ this.chartData.push(...res);
+ this.curve.reRender();
+ }
+ });
+ }
+ changeData() {
+ if (this.mode === 'year') {
+ this.dateFormat = 'yyyy';
+ } else if (this.mode === 'month') {
+ this.dateFormat = 'yyyy-MM';
+ } else {
+ this.dateFormat = 'yyyy-MM-dd';
+ }
+ }
+ onChange(result: any) {
+ if (this.mode === 'year') {
+ this.timeStart = this.datePipe.transform(this.date, 'yyyy') + '-01-01';
+ this.timeEnd = this.datePipe.transform(this.date, 'yyyy') + '-12-31';
+
+ } else if (this.mode === 'month') {
+ this.timeStart = this.datePipe.transform(this.date, 'yyyy-MM') + '-01' ;
+ this.timeEnd = this.datePipe.transform(this.date, 'yyyy-MM') + '-31';
+ } else if (this.mode === 'date') {
+ this.timeStart=this.datePipe.transform(this.date, 'yyyy-MM-dd');
+ this.timeEnd = this.datePipe.transform(this.date, 'yyyy-MM-dd') ;
+ } else {
+ this.timeStart = this.datePipe.transform(this.defineDate[0], 'yyyy-MM-dd') ;
+ this.timeEnd = this.datePipe.transform(this.defineDate[1], 'yyyy-MM-dd');
+ }
+ this.listData(this.mode, this.timeStart, this.timeEnd);
+ }
+ disabledDate = (current: Date): boolean =>
+ // Can not select days before today and today
+ differenceInCalendarDays(current, this.today) > 0;
+
+ changeDataNext2() {
+ if (this.modeNext === 'year') {
+ this.dateFormat = 'yyyy';
+ } else if (this.modeNext === 'month') {
+ this.dateFormat = 'yyyy-MM';
+ }
+ }
+ onChangeNext(result: any) {
+ if (result === null) {
+ return;
+ }
+ if (this.modeNext === 'year') {
+ this.timeNext = this.datePipe.transform(this.dateNext, 'yyyy') + '-01-01';
+ } else if (this.modeNext === 'month') {
+ this.timeNext = this.datePipe.transform(this.dateNext, 'yyyy-MM') + '-01';
+ }
+ this.addData(this.modeNext, this.timeNext);
+ }
+}
diff --git a/src/app/routes/datatable/components/customtable/driver/driver.component.html b/src/app/routes/datatable/components/customtable/driver/driver.component.html
new file mode 100644
index 00000000..e636c1a1
--- /dev/null
+++ b/src/app/routes/datatable/components/customtable/driver/driver.component.html
@@ -0,0 +1,46 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/app/routes/datatable/components/customtable/driver/driver.component.less b/src/app/routes/datatable/components/customtable/driver/driver.component.less
new file mode 100644
index 00000000..6b4b1cba
--- /dev/null
+++ b/src/app/routes/datatable/components/customtable/driver/driver.component.less
@@ -0,0 +1,11 @@
+.chooseBox{
+ display: flex;
+}
+.timeBox{
+ display: flex;
+ margin: 0 0 0 10px;
+}
+.dateBox{
+ display: inline-block;
+ margin: 0 0 0 10px;
+}
\ No newline at end of file
diff --git a/src/app/routes/datatable/components/customtable/driver/driver.component.spec.ts b/src/app/routes/datatable/components/customtable/driver/driver.component.spec.ts
new file mode 100644
index 00000000..6a2084a2
--- /dev/null
+++ b/src/app/routes/datatable/components/customtable/driver/driver.component.spec.ts
@@ -0,0 +1,24 @@
+import { waitForAsync, ComponentFixture, TestBed } from '@angular/core/testing';
+import { DatatableDriverComponent } from './driver.component';
+
+describe('DatatableDriverComponent', () => {
+ let component: DatatableDriverComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(waitForAsync(() => {
+ TestBed.configureTestingModule({
+ declarations: [ DatatableDriverComponent ]
+ })
+ .compileComponents();
+ }));
+
+ beforeEach(() => {
+ fixture = TestBed.createComponent(DatatableDriverComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/src/app/routes/datatable/components/customtable/driver/driver.component.ts b/src/app/routes/datatable/components/customtable/driver/driver.component.ts
new file mode 100644
index 00000000..e24a58c5
--- /dev/null
+++ b/src/app/routes/datatable/components/customtable/driver/driver.component.ts
@@ -0,0 +1,178 @@
+import { Component, OnInit, ViewChild } from '@angular/core';
+import { STColumn, STComponent } from '@delon/abc/st';
+import { SFComponent, SFDateWidgetSchema, SFSchema, SFUISchema } from '@delon/form';
+import { DatePipe, _HttpClient } from '@delon/theme';
+import { differenceInCalendarDays } from 'date-fns';
+import { DataService } from '../../../services/data.service';
+
+@Component({
+ selector: 'app-datatable-driver',
+ templateUrl: './driver.component.html',
+ styleUrls: ['./driver.component.less'],
+ providers: [DatePipe]
+})
+export class DatatableDriverComponent implements OnInit {
+ @ViewChild('st', { static: false }) st!: STComponent;
+ @ViewChild('sf', { static: false }) sf!: SFComponent;
+ _$expand = false;
+ type = 1;
+ mode = 'year';
+ date: any = null;
+ defineDate = [];
+ queryTime: any = [new Date().getFullYear()]
+ dateFormat = 'yyyy';
+ today = new Date();
+ ui: SFUISchema = {};
+ schema: SFSchema = {};
+
+ columns: STColumn[] = [
+ { title: '司机姓名', index: 'driverName', className: 'text-center' },
+ { title: '手机号', index: 'driverPhone', className: 'text-center' },
+ { title: '注册时间', index: 'driverRegisterTime', className: 'text-center' },
+ {
+ title: '司机状态', index: 'driverStatus', className: 'text-center', type: 'enum', enum: {
+ 0: '未激活',
+ 1: '活跃',
+ 2: '沉默',
+ 3: '流失',
+ }
+ },
+ { title: '运单数', index: 'wbAllCount', className: 'text-center' },
+ { title: '待接单运单', index: 'wbWaitCount', className: 'text-center' },
+ { title: '已完成运单', index: 'wbOverCount', className: 'text-center' },
+ { title: '运费金额', index: 'wbAllAmount', className: 'text-right', width: '100px', type: 'widget', widget: { type: 'currency-chy', params: ({ record }) => ({ value: record.wbAllAmount }) } },
+ { title: '已收运费金额', index: 'wbGetAmount', className: 'text-right', width: '100px', type: 'widget', widget: { type: 'currency-chy', params: ({ record }) => ({ value: record.wbGetAmount }) } },
+ { title: '待收运费金额', index: 'wbWaitAmount', className: 'text-right', width: '100px', type: 'widget', widget: { type: 'currency-chy', params: ({ record }) => ({ value: record.wbWaitAmount }) } },
+ ];
+ isLoading: boolean = false;
+ /**
+ * 查询参数
+ */
+ get reqParams() {
+ if (this.mode === 'year') {
+ this.type = 1
+ } else if (this.mode === 'month') {
+ this.type = 2
+ } else if (this.mode === 'date') {
+ this.type = 3
+ } else {
+ this.type = 4
+ }
+ let params: any = {
+ queryTime: this.queryTime,
+ ...this.sf?.value
+ };
+
+ delete params._$expand;
+ return { ...params };
+ }
+ constructor(public service: DataService, private datePipe: DatePipe) { }
+ ngOnInit(): void {
+ this.initSF();
+ }
+ /**
+ * 初始化查询表单
+ */
+ initSF() {
+ this.schema = {
+ properties: {
+ _$expand: { type: 'boolean', ui: { hidden: true } },
+ driverName: {
+ type: 'string',
+ title: '司机姓名',
+ ui: {
+ placeholder: '请输入',
+ }
+ },
+ driverPhone: {
+ type: 'string',
+ title: '手机号',
+ ui: {
+ placeholder: '请选择',
+ }
+ },
+ driverStatus: {
+ type: 'string',
+ title: '司机状态',
+ ui: {
+ widget: 'select',
+ placeholder: '请选择',
+ },
+ enum: [
+ { label: '未激活', value: 0 },
+ { label: '活跃', value: 1 },
+ { label: '沉默', value: 2 },
+ { label: '流失', value: 3 },
+ ]
+ },
+ driverRegisterTime: {
+ title: '注册时间',
+ type: 'string',
+ ui: {
+ widget: 'sl-from-to', type: 'date', format: 'yyyy-MM-dd', visibleIf: {
+ _$expand: (value: boolean) => value,
+ },
+ } as SFDateWidgetSchema,
+ }
+ },
+ type: 'object'
+ };
+ this.ui = { '*': { spanLabelFixed: 110, grid: { span: 8, gutter: 4 } } };
+ }
+ changeData() {
+ if (this.mode === 'year') {
+ this.dateFormat = 'yyyy'
+ } else if (this.mode === 'month') {
+ this.dateFormat = 'yyyy-MM'
+ }
+ }
+ onChange(result: any) {
+ if(result === null) {
+ return
+ }
+ // if (this.mode === 'year') {
+ // this.queryTime = this.datePipe.transform(this.date, 'yyyy')
+ // } else if (this.mode === 'month') {
+ // this.queryTime = this.datePipe.transform(this.date, 'yyyy-MM')
+ // }
+
+ if(this.mode === 'year') {
+ this.queryTime = [this.datePipe.transform(this.date, 'yyyy')]
+ } else if(this.mode === 'month') {
+ this.queryTime = [this.datePipe.transform(this.date, 'yyyy-MM')]
+ } else if(this.mode === 'date') {
+ this.queryTime = [this.datePipe.transform(this.date, 'yyyy-MM-dd')]
+ } else{
+ this.queryTime = [this.datePipe.transform(this.defineDate[0], 'yyyy-MM-dd'), this.datePipe.transform(this.defineDate[1], 'yyyy-MM-dd')]
+ }
+
+ this.st.reload({ ...this.reqParams });
+ }
+ disabledDate = (current: Date): boolean =>
+ // Can not select days before today and today
+ differenceInCalendarDays(current, this.today) > 0;
+
+ export() {
+ // this.service.downloadFile(this.service.$api_exportUploadBill, this.sf.value, {});
+ }
+ search() {
+ this.st?.load(1)
+
+ }
+ /**
+ * 伸缩查询条件
+ */
+ expandToggle() {
+ this._$expand = !this._$expand;
+ this.sf?.setValue('/_$expand', this._$expand);
+ }
+
+ /**
+ * 重置表单
+ */
+ resetSF() {
+ this.sf.reset();
+ this._$expand = false;
+ this.isLoading = true
+ }
+}
diff --git a/src/app/routes/datatable/components/customtable/mancustomtable/mancustomtable.component.html b/src/app/routes/datatable/components/customtable/mancustomtable/mancustomtable.component.html
new file mode 100644
index 00000000..8fd0ca34
--- /dev/null
+++ b/src/app/routes/datatable/components/customtable/mancustomtable/mancustomtable.component.html
@@ -0,0 +1,51 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/app/routes/datatable/components/customtable/mancustomtable/mancustomtable.component.less b/src/app/routes/datatable/components/customtable/mancustomtable/mancustomtable.component.less
new file mode 100644
index 00000000..d754ef94
--- /dev/null
+++ b/src/app/routes/datatable/components/customtable/mancustomtable/mancustomtable.component.less
@@ -0,0 +1,20 @@
+.chooseBox {
+ display: flex;
+ float : right;
+}
+
+.timeBox {
+ display: flex;
+ margin : 0 0 0 10px;
+}
+
+.dateBox {
+ display: inline-block;
+ margin : 0 0 0 10px;
+}
+
+:host::ng-deep {
+ .ant-form-item-control {
+ max-width: 100%;
+ }
+}
\ No newline at end of file
diff --git a/src/app/routes/datatable/components/customtable/mancustomtable/mancustomtable.component.spec.ts b/src/app/routes/datatable/components/customtable/mancustomtable/mancustomtable.component.spec.ts
new file mode 100644
index 00000000..8df0f556
--- /dev/null
+++ b/src/app/routes/datatable/components/customtable/mancustomtable/mancustomtable.component.spec.ts
@@ -0,0 +1,24 @@
+import { waitForAsync, ComponentFixture, TestBed } from '@angular/core/testing';
+import { DatatableMancustomtableComponent } from './mancustomtable.component';
+
+describe('DatatableMancustomtableComponent', () => {
+ let component: DatatableMancustomtableComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(waitForAsync(() => {
+ TestBed.configureTestingModule({
+ declarations: [ DatatableMancustomtableComponent ]
+ })
+ .compileComponents();
+ }));
+
+ beforeEach(() => {
+ fixture = TestBed.createComponent(DatatableMancustomtableComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/src/app/routes/datatable/components/customtable/mancustomtable/mancustomtable.component.ts b/src/app/routes/datatable/components/customtable/mancustomtable/mancustomtable.component.ts
new file mode 100644
index 00000000..d6d5b692
--- /dev/null
+++ b/src/app/routes/datatable/components/customtable/mancustomtable/mancustomtable.component.ts
@@ -0,0 +1,345 @@
+import { Component, OnInit, ViewChild } from '@angular/core';
+import { STColumn, STComponent } from '@delon/abc/st';
+import { SFComponent, SFDateWidgetSchema, SFSchema, SFUISchema } from '@delon/form';
+import { DatePipe, _HttpClient } from '@delon/theme';
+import { differenceInCalendarDays } from 'date-fns';
+import { DataService } from '../../../services/data.service';
+
+@Component({
+ selector: 'app-datatable-mancustomtable',
+ templateUrl: './mancustomtable.component.html',
+ styleUrls: ['./mancustomtable.component.less'],
+ providers: [DatePipe]
+})
+export class DatatableMancustomtableComponent implements OnInit {
+ @ViewChild('st', { static: false }) st!: STComponent;
+ @ViewChild('sf', { static: false }) sf!: SFComponent;
+ _$expand = false;
+ type = 1;
+ mode = 'year';
+ date: any = null;
+ defineDate = [];
+ columns: STColumn[] = [];
+ resourceStatus: number = 1;
+ time: any = ['2022-01-01 00:00:00'];
+ dateFormat = 'yyyy';
+ today = new Date();
+ ui: SFUISchema = {};
+ schema: SFSchema = {};
+ isLoading: boolean = false;
+ searchSchema: SFSchema = {
+ properties: {
+ customerName: {
+ type: 'string',
+ title: '',
+ ui: {
+ placeholder: '请输入客户名称',
+ change: (value: any) => {
+ console.log(value);
+ this.st.reload({ ...this.reqParams });
+ }
+ }
+ },
+ salesmanName: {
+ type: 'string',
+ title: '',
+ ui: {
+ placeholder: '请输入业务员',
+ change: (value: any) => {
+ this.st.reload({ ...this.reqParams });
+ }
+ }
+ },
+ no4: {
+ type: 'string',
+ title: '',
+ ui: {
+ class: 'custom',
+ widget: 'custom',
+ grid: { xxl: 12, xl: 12, lg: 24, md: 24, sm: 24, xs: 24 }
+ }
+ }
+ }
+ };
+ initST() {
+ this.columns = [
+ { title: '部门', index: 'department', className: 'text-center', width: '150px' },
+ { title: '业务员', index: 'salesmen', className: 'text-center', width: '150px' },
+ {
+ title: '已认证货主数',
+ index: 'certifiedCount',
+ className: 'text-center',
+ width: '150px',
+ iif: () => {
+ return this?.resourceStatus !== 1 ? false : true;
+ }
+ },
+ {
+ title: '已认证合伙人',
+ index: 'certifiedCount',
+ className: 'text-center',
+ width: '150px',
+ iif: () => {
+ return this?.resourceStatus !== 2 ? false : true;
+ }
+ },
+ {
+ title: '新增合伙人数',
+ index: 'addCount',
+ className: 'text-center',
+ width: '150px',
+ iif: () => {
+ return this?.resourceStatus !== 2 ? false : true;
+ }
+ },
+ {
+ title: '合伙人活跃率',
+ index: 'alivePer',
+ className: 'text-center',
+ width: '150px',
+ iif: () => {
+ return this?.resourceStatus !== 2 ? false : true;
+ }
+ },
+ {
+ title: '活跃合伙人数',
+ index: 'aliveCount',
+ className: 'text-center',
+ width: '150px',
+ iif: () => {
+ return this?.resourceStatus !== 2 ? false : true;
+ }
+ },
+ {
+ title: '沉默合伙人数',
+ index: 'silentCount',
+ className: 'text-center',
+ width: '150px',
+ iif: () => {
+ return this?.resourceStatus !== 2 ? false : true;
+ }
+ },
+ {
+ title: '流失合伙人数',
+ index: 'drainCount',
+ className: 'text-center',
+ width: '150px',
+ iif: () => {
+ return this?.resourceStatus !== 2 ? false : true;
+ }
+ },
+ {
+ title: '未激活合伙人数',
+ index: 'notActiveCount',
+ className: 'text-center',
+ width: '150px',
+ iif: () => {
+ return this?.resourceStatus !== 2 ? false : true;
+ }
+ },
+
+ {
+ title: '新增货主数',
+ index: 'addCount',
+ className: 'text-center',
+ width: '150px',
+ iif: () => {
+ return this?.resourceStatus !== 1 ? false : true;
+ }
+ },
+ {
+ title: '货主活跃率',
+ index: 'alivePer',
+ className: 'text-center',
+ width: '150px',
+ iif: () => {
+ return this?.resourceStatus !== 1 ? false : true;
+ }
+ },
+ {
+ title: '活跃货主数',
+ index: 'aliveCount',
+ className: 'text-center',
+ width: '150px',
+ iif: () => {
+ return this?.resourceStatus !== 1 ? false : true;
+ }
+ },
+ {
+ title: '沉默货主数',
+ index: 'silentCount',
+ className: 'text-center',
+ width: '150px',
+ iif: () => {
+ return this?.resourceStatus !== 1 ? false : true;
+ }
+ },
+ {
+ title: '流失货主数',
+ index: 'drainCount',
+ className: 'text-right',
+ width: '150px',
+ iif: () => {
+ return this?.resourceStatus !== 1 ? false : true;
+ }
+ },
+ {
+ title: '未激活货主数',
+ index: 'notActiveCount',
+ className: 'text-center',
+ width: '150px',
+ iif: () => {
+ return this?.resourceStatus !== 1 ? false : true;
+ }
+ }
+ ];
+ }
+ /**
+ * 查询参数
+ */
+ get reqParams() {
+ if (this.mode === 'year') {
+ this.type = 1;
+ } else if (this.mode === 'month') {
+ this.type = 2;
+ } else if (this.mode === 'date') {
+ this.type = 3;
+ } else {
+ this.type = 4;
+ }
+ let params: any = {
+ time: this.time,
+ type: this.type,
+ parType: this.resourceStatus,
+ ...this.sf?.value
+ };
+
+ delete params._$expand;
+ delete params.sort;
+ return { ...params };
+ }
+ constructor(public service: DataService, private datePipe: DatePipe) {}
+ ngOnInit(): void {
+ this.initSF();
+ this.initST();
+ }
+ /**
+ * 初始化查询表单
+ */
+ initSF() {
+ this.schema = {
+ properties: {
+ _$expand: { type: 'boolean', ui: { hidden: true } },
+ enterpriseName: {
+ type: 'string',
+ title: '货主名称',
+ ui: {
+ placeholder: '请输入'
+ }
+ },
+ customerType: {
+ type: 'string',
+ title: '客户类型',
+ ui: {
+ widget: 'select',
+ placeholder: '请选择'
+ },
+ enum: [
+ { label: '直客', value: 2 },
+ { label: '渠道客户', value: 3 },
+ { label: '平台客户', value: 1 }
+ ]
+ },
+ customerStatus: {
+ type: 'string',
+ title: '客户状态',
+ ui: {
+ widget: 'select',
+ placeholder: '请选择'
+ },
+ enum: [
+ { label: '未激活', value: 1 },
+ { label: '沉默', value: 2 },
+ { label: '流失', value: 3 },
+ { label: '活跃', value: 4 }
+ ]
+ },
+ registerTime: {
+ title: '注册时间',
+ type: 'string',
+ ui: {
+ widget: 'sl-from-to',
+ type: 'date',
+ format: 'yyyy-MM-dd',
+ visibleIf: {
+ _$expand: (value: boolean) => value
+ }
+ } as SFDateWidgetSchema
+ }
+ },
+ type: 'object'
+ };
+ this.ui = { '*': { spanLabelFixed: 110, grid: { span: 8, gutter: 4 } } };
+ }
+ changeData() {
+ if (this.mode === 'year') {
+ this.dateFormat = 'yyyy';
+ } else if (this.mode === 'month') {
+ this.dateFormat = 'yyyy-MM';
+ } else {
+ this.dateFormat = 'yyyy-MM-dd';
+ }
+ }
+ onChange(result: any) {
+ if (result === null) {
+ return;
+ }
+ if (this.mode === 'year') {
+ this.time = [this.datePipe.transform(this.date, 'yyyy') + '-01-01 00:00:00'];
+ } else if (this.mode === 'month') {
+ this.time = [this.datePipe.transform(this.date, 'yyyy-MM') + '-01 00:00:00'];
+ } else if (this.mode === 'date') {
+ this.time = [this.datePipe.transform(this.date, 'yyyy-MM-dd') + ' 00:00:00'];
+ } else {
+ this.time = [
+ this.datePipe.transform(this.defineDate[0], 'yyyy-MM-dd') + '00:00:00',
+ this.datePipe.transform(this.defineDate[1], 'yyyy-MM-dd') + ' 00:00:00'
+ ];
+ }
+ this.st.reload({ ...this.reqParams });
+ }
+ disabledDate = (current: Date): boolean =>
+ // Can not select days before today and today
+ differenceInCalendarDays(current, this.today) > 0;
+
+ export() {
+ // this.service.downloadFile(this.service.$api_exportUploadBill, this.sf.value, {});
+ }
+ search() {
+ this.st?.load(1);
+ }
+ /**
+ * 伸缩查询条件
+ */
+ expandToggle() {
+ this._$expand = !this._$expand;
+ this.sf?.setValue('/_$expand', this._$expand);
+ }
+
+ /**
+ * 重置表单
+ */
+ resetSF() {
+ this.sf.reset();
+ this._$expand = false;
+ this.isLoading = true;
+ }
+ selectChange(e: number) {
+ console.log(e);
+ this.resourceStatus = e + 1;
+ setTimeout(() => {
+ this.st?.resetColumns();
+ this.st?.load(1);
+ }, 500);
+ }
+}
diff --git a/src/app/routes/datatable/components/customtable/owner/owner.component.html b/src/app/routes/datatable/components/customtable/owner/owner.component.html
new file mode 100644
index 00000000..6fee7fe0
--- /dev/null
+++ b/src/app/routes/datatable/components/customtable/owner/owner.component.html
@@ -0,0 +1,46 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/app/routes/datatable/components/customtable/owner/owner.component.less b/src/app/routes/datatable/components/customtable/owner/owner.component.less
new file mode 100644
index 00000000..6b4b1cba
--- /dev/null
+++ b/src/app/routes/datatable/components/customtable/owner/owner.component.less
@@ -0,0 +1,11 @@
+.chooseBox{
+ display: flex;
+}
+.timeBox{
+ display: flex;
+ margin: 0 0 0 10px;
+}
+.dateBox{
+ display: inline-block;
+ margin: 0 0 0 10px;
+}
\ No newline at end of file
diff --git a/src/app/routes/datatable/components/customtable/owner/owner.component.spec.ts b/src/app/routes/datatable/components/customtable/owner/owner.component.spec.ts
new file mode 100644
index 00000000..8c518688
--- /dev/null
+++ b/src/app/routes/datatable/components/customtable/owner/owner.component.spec.ts
@@ -0,0 +1,24 @@
+import { waitForAsync, ComponentFixture, TestBed } from '@angular/core/testing';
+import { DatatableOwnerComponent } from './owner.component';
+
+describe('DatatableOwnerComponent', () => {
+ let component: DatatableOwnerComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(waitForAsync(() => {
+ TestBed.configureTestingModule({
+ declarations: [ DatatableOwnerComponent ]
+ })
+ .compileComponents();
+ }));
+
+ beforeEach(() => {
+ fixture = TestBed.createComponent(DatatableOwnerComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/src/app/routes/datatable/components/customtable/owner/owner.component.ts b/src/app/routes/datatable/components/customtable/owner/owner.component.ts
new file mode 100644
index 00000000..54549d42
--- /dev/null
+++ b/src/app/routes/datatable/components/customtable/owner/owner.component.ts
@@ -0,0 +1,190 @@
+import { Component, OnInit, ViewChild } from '@angular/core';
+import { STColumn, STComponent } from '@delon/abc/st';
+import { SFComponent, SFDateWidgetSchema, SFSchema, SFUISchema } from '@delon/form';
+import { DatePipe, _HttpClient } from '@delon/theme';
+import { differenceInCalendarDays } from 'date-fns';
+import { DataService } from '../../../services/data.service';
+
+@Component({
+ selector: 'app-datatable-owner',
+ templateUrl: './owner.component.html',
+ styleUrls: ['./owner.component.less'],
+ providers: [DatePipe]
+})
+export class DatatableOwnerComponent implements OnInit {
+ @ViewChild('st', { static: false }) st!: STComponent;
+ @ViewChild('sf', { static: false }) sf!: SFComponent;
+ _$expand = false;
+ type = 1;
+ mode = 'year';
+ date: any = null;
+ defineDate = [];
+ time: any = ['2022-01-01 00:00:00']
+ dateFormat = 'yyyy';
+ today = new Date();
+ ui: SFUISchema = {};
+ schema: SFSchema = {};
+ isLoading: boolean = false;
+
+ columns: STColumn[] = [
+ { title: '货主名称', index: 'enterpriseName', className: 'text-center', width: '200px' },
+ { title: '注册时间', index: 'registerTime', className: 'text-center', width: '200px' },
+ { title: '客户类型', index: 'customerType', className: 'text-center', width: '100px', type: 'enum', enum: {
+ 1: '平台客户',
+ 2: '直客',
+ 3: '渠道客户'
+ }
+ },
+ { title: '业务员', index: 'salesmanName', className: 'text-center', width: '100px' },
+ { title: '合伙人', index: 'partnerName', className: 'text-center', width: '100px' },
+ { title: '客户状态', index: 'customerStatus', className: 'text-center', width: '100px', type: 'enum', enum: {
+ 1: '未激活',
+ 2: '流失',
+ 3: '活跃',
+ 4: '沉默'
+ } },
+ { title: '订单数', index: 'zsl', className: 'text-center', width: '100px' },
+ { title: '订单金额', index: 'ddje', className: 'text-right', width: '100px', type: 'widget', widget: { type: 'currency-chy', params: ({ record }) => ({ value: record.ddje }) } },
+ { title: '应收订单数', index: 'ysdds', className: 'text-center', width: '120px' },
+ { title: '应收金额', index: 'yingsje', className: 'text-right', width: '100px', type: 'widget', widget: { type: 'currency-chy', params: ({ record }) => ({ value: record.yingsje }) } },
+ { title: '待开票订单数', index: 'yifyf', className: 'text-center', width: '130px' },
+ { title: '待开票金额', index: 'dkpdds', className: 'text-right', width: '120px', type: 'widget', widget: { type: 'currency-chy', params: ({ record }) => ({ value: record.dkpdds }) } },
+ { title: '已收金额', index: 'yisje', className: 'text-right', width: '100px', type: 'widget', widget: { type: 'currency-chy', params: ({ record }) => ({ value: record.yisje }) } },
+ { title: '应收附加费', index: 'yingsfjf', className: 'text-right', width: '120px', type: 'widget', widget: { type: 'currency-chy', params: ({ record }) => ({ value: record.yingsfjf }) } },
+ { title: '已收附加费', index: 'yisfjf', className: 'text-right', width: '120px', type: 'widget', widget: { type: 'currency-chy', params: ({ record }) => ({ value: record.yisfjf }) } },
+ { title: '附加费率', index: 'fjfl', className: 'text-center', width: '100px' },
+ { title: '已开票金额', index: 'ykpje', className: 'text-right', width: '100px', type: 'widget', widget: { type: 'currency-chy', params: ({ record }) => ({ value: record.ykpje }) } },
+ ];
+ /**
+ * 查询参数
+ */
+ get reqParams() {
+ if(this.mode === 'year') {
+ this.type = 1
+ } else if(this.mode === 'month') {
+ this.type = 2
+ } else if(this.mode === 'date') {
+ this.type = 3
+ } else {
+ this.type = 4
+ }
+ let params: any = {
+ time: this.time,
+ type: this.type,
+ ...this.sf?.value
+ };
+
+ delete params._$expand;
+ return { ...params };
+ }
+ constructor(public service: DataService, private datePipe: DatePipe) { }
+ ngOnInit(): void {
+ this.initSF();
+ }
+ /**
+ * 初始化查询表单
+ */
+ initSF() {
+ this.schema = {
+ properties: {
+ _$expand: { type: 'boolean', ui: { hidden: true } },
+ enterpriseName: {
+ type: 'string',
+ title: '货主名称',
+ ui: {
+ placeholder: '请输入',
+ }
+ },
+ customerType: {
+ type: 'string',
+ title: '客户类型',
+ ui: {
+ widget: 'select',
+ placeholder: '请选择',
+ },
+ enum: [
+ {label: '直客', value: 2},
+ {label: '渠道客户', value: 3},
+ {label: '平台客户', value: 1},
+ ]
+ },
+ customerStatus: {
+ type: 'string',
+ title: '客户状态',
+ ui: {
+ widget: 'select',
+ placeholder: '请选择',
+ },
+ enum: [
+ {label: '未激活', value: 1},
+ {label: '流失', value: 2},
+ {label: '活跃', value: 3},
+ {label: '沉默', value: 4},
+ ]
+ },
+ registerTime: {
+ title: '注册时间',
+ type: 'string',
+ ui: {
+ widget: 'sl-from-to', type: 'date', format: 'yyyy-MM-dd', visibleIf: {
+ _$expand: (value: boolean) => value,
+ },
+ } as SFDateWidgetSchema,
+ }
+ },
+ type: 'object'
+ };
+ this.ui = { '*': { spanLabelFixed: 110, grid: { span: 8, gutter: 4 } } };
+ }
+ changeData(){
+ if(this.mode === 'year') {
+ this.dateFormat = 'yyyy'
+ } else if(this.mode === 'month') {
+ this.dateFormat = 'yyyy-MM'
+ } else {
+ this.dateFormat = 'yyyy-MM-dd'
+ }
+ }
+ onChange(result: any) {
+ if(result === null) {
+ return
+ }
+ if(this.mode === 'year') {
+ this.time = [this.datePipe.transform(this.date, 'yyyy') + '-01-01 00:00:00']
+ } else if(this.mode === 'month') {
+ this.time = [this.datePipe.transform(this.date, 'yyyy-MM') + '-01 00:00:00']
+ } else if(this.mode === 'date') {
+ this.time = [this.datePipe.transform(this.date, 'yyyy-MM-dd') + ' 00:00:00']
+ } else{
+ this.time = [this.datePipe.transform(this.defineDate[0], 'yyyy-MM-dd') + ' 00:00:00', this.datePipe.transform(this.defineDate[1], 'yyyy-MM-dd') + ' 00:00:00']
+ }
+ this.st.reload({ ...this.reqParams });
+ }
+ disabledDate = (current: Date): boolean =>
+ // Can not select days before today and today
+ differenceInCalendarDays(current, this.today) > 0;
+
+ export() {
+ // this.service.downloadFile(this.service.$api_exportUploadBill, this.sf.value, {});
+ }
+ search() {
+ this.st?.load(1)
+
+ }
+ /**
+ * 伸缩查询条件
+ */
+ expandToggle() {
+ this._$expand = !this._$expand;
+ this.sf?.setValue('/_$expand', this._$expand);
+ }
+
+ /**
+ * 重置表单
+ */
+ resetSF() {
+ this.sf.reset();
+ this._$expand = false;
+ this.isLoading = true
+ }
+}
diff --git a/src/app/routes/datatable/components/customtable/partnertable/partnertable.component.html b/src/app/routes/datatable/components/customtable/partnertable/partnertable.component.html
new file mode 100644
index 00000000..253a8460
--- /dev/null
+++ b/src/app/routes/datatable/components/customtable/partnertable/partnertable.component.html
@@ -0,0 +1,43 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
4">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/app/routes/datatable/components/customtable/partnertable/partnertable.component.spec.ts b/src/app/routes/datatable/components/customtable/partnertable/partnertable.component.spec.ts
new file mode 100644
index 00000000..69ae8c3b
--- /dev/null
+++ b/src/app/routes/datatable/components/customtable/partnertable/partnertable.component.spec.ts
@@ -0,0 +1,24 @@
+import { waitForAsync, ComponentFixture, TestBed } from '@angular/core/testing';
+import { DatatablePartnertableComponent } from './partnertable.component';
+
+describe('DatatablePartnertableComponent', () => {
+ let component: DatatablePartnertableComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(waitForAsync(() => {
+ TestBed.configureTestingModule({
+ declarations: [ DatatablePartnertableComponent ]
+ })
+ .compileComponents();
+ }));
+
+ beforeEach(() => {
+ fixture = TestBed.createComponent(DatatablePartnertableComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/src/app/routes/datatable/components/customtable/partnertable/partnertable.component.ts b/src/app/routes/datatable/components/customtable/partnertable/partnertable.component.ts
new file mode 100644
index 00000000..1d50eaea
--- /dev/null
+++ b/src/app/routes/datatable/components/customtable/partnertable/partnertable.component.ts
@@ -0,0 +1,151 @@
+import { Component, OnInit, ViewChild } from '@angular/core';
+import { STChange, STColumn, STComponent, STData } from '@delon/abc/st';
+import { SFComponent, SFDateWidgetSchema, SFSchema, SFUISchema } from '@delon/form';
+import { ModalHelper } from '@delon/theme';
+import { EAEnvironmentService } from '@shared';
+import { NzModalService } from 'ng-zorro-antd/modal';
+import { DataService } from '../../../services/data.service';
+
+@Component({
+ selector: 'app-datatable-partnertable',
+ templateUrl: './partnertable.component.html'
+})
+export class DatatablePartnertableComponent implements OnInit {
+ @ViewChild('st', { static: false }) st!: STComponent;
+ @ViewChild('sf', { static: false }) sf!: SFComponent;
+ _$expand = false;
+ ui!: SFUISchema;
+ schema!: SFSchema;
+ phone = '';
+ columns!: STColumn[];
+ isLoading: boolean = false;
+
+ constructor(
+ public service: DataService,
+ private modalSrv: NzModalService,
+ private modal: ModalHelper,
+ private envSrv: EAEnvironmentService
+ ) {}
+
+ /**
+ * 查询字段个数
+ */
+ get queryFieldCount(): number {
+ return Object.keys(this.schema?.properties || {}).length;
+ }
+
+ /**
+ * 查询参数
+ */
+ get reqParams() {
+ const params = Object.assign({}, this.sf?.value || {});
+ delete params._$expand;
+ return { ...params };
+ }
+
+ /**
+ * 选中行
+ */
+ get selectedRows() {
+ return this.st?.list.filter(item => item.checked) || [];
+ }
+
+ /**
+ * 伸缩查询条件
+ */
+ expandToggle() {
+ this._$expand = !this._$expand;
+ this.sf?.setValue('/_$expand', this._$expand);
+ }
+ /**
+ * 重置表单
+ */
+ resetSF() {
+ this.sf.reset();
+ this._$expand = false;
+ this.isLoading = true;
+ }
+ /**
+ * 程序初始化入口
+ */
+ ngOnInit() {
+ this.initSF();
+ this.initST();
+ }
+
+ /**
+ * 初始化查询表单
+ */
+ initSF() {
+ this.schema = {
+ properties: {
+ _$expand: { type: 'boolean', ui: { hidden: true } },
+ name: {
+ title: '合伙人名称',
+ type: 'string',
+ ui: { placeholder: '请输入' },
+ readOnly: false
+ },
+ phone: {
+ title: '合伙人类型',
+ type: 'string',
+ ui: {
+ widget: 'select',
+ placeholder: '请输入'
+ },
+ readOnly: false
+ },
+ phone01: {
+ title: '合伙人状态',
+ type: 'string',
+ ui: {
+ widget: 'select',
+ placeholder: '请输入'
+ },
+ readOnly: false
+ },
+ createTime: {
+ type: 'string',
+ title: '注册时间',
+ ui: { widget: 'sl-from-to', type: 'date', format: 'yyyy-MM-dd', visibleIf: {
+ _$expand: (value: boolean) => value,
+ }, } as SFDateWidgetSchema
+ }
+ },
+ type: 'object'
+ };
+ this.ui = { '*': { spanLabelFixed: 120, grid: { span: 8, gutter: 4 }, enter: () => this.st?.load(1) } };
+ }
+
+ /**
+ * 初始化数据列表
+ */
+ initST() {
+ this.columns = [
+ { title: '合伙人名称', index: 'networkTransporterName', className: 'text-center' },
+ { title: '注册时间', index: 'telephone', className: 'text-center' },
+ { title: '注册时间', index: 'roleName', className: 'text-center' },
+ { title: '业务员', index: 'lastLoginDate', className: 'text-center' },
+ {
+ title: '合伙人状态',
+ index: 'stateLocked',
+ className: 'text-center',
+ type: 'enum',
+ enum: { 0: '正常', 1: '冻结' }
+ },
+ { title: '客户数', index: 'lastLoginDate', className: 'text-center' },
+ { title: '收益额', index: 'lastLoginDate', className: 'text-center' },
+ { title: '已提现金额', index: 'lastLoginDate', className: 'text-center' },
+ { title: '订单数', index: 'lastLoginDate', className: 'text-center' },
+ { title: '订单金额', index: 'lastLoginDate', className: 'text-center' },
+ { title: '应收订单数', index: 'lastLoginDate', className: 'text-center' }
+ ];
+ }
+
+ /**
+ * 数据列表状态变化事件
+ */
+ change(change: STChange) {
+ // console.log(change);
+ }
+}
diff --git a/src/app/routes/datatable/components/dataindex/dataindex.component.html b/src/app/routes/datatable/components/dataindex/dataindex.component.html
new file mode 100644
index 00000000..3f148bfd
--- /dev/null
+++ b/src/app/routes/datatable/components/dataindex/dataindex.component.html
@@ -0,0 +1,69 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/app/routes/datatable/components/dataindex/dataindex.component.less b/src/app/routes/datatable/components/dataindex/dataindex.component.less
new file mode 100644
index 00000000..e69de29b
diff --git a/src/app/routes/datatable/components/dataindex/dataindex.component.spec.ts b/src/app/routes/datatable/components/dataindex/dataindex.component.spec.ts
new file mode 100644
index 00000000..cd009e56
--- /dev/null
+++ b/src/app/routes/datatable/components/dataindex/dataindex.component.spec.ts
@@ -0,0 +1,24 @@
+import { waitForAsync, ComponentFixture, TestBed } from '@angular/core/testing';
+import { DatatableDataindexComponent } from './dataindex.component';
+
+describe('DatatableDataindexComponent', () => {
+ let component: DatatableDataindexComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(waitForAsync(() => {
+ TestBed.configureTestingModule({
+ declarations: [ DatatableDataindexComponent ]
+ })
+ .compileComponents();
+ }));
+
+ beforeEach(() => {
+ fixture = TestBed.createComponent(DatatableDataindexComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/src/app/routes/datatable/components/dataindex/dataindex.component.ts b/src/app/routes/datatable/components/dataindex/dataindex.component.ts
new file mode 100644
index 00000000..0881c73c
--- /dev/null
+++ b/src/app/routes/datatable/components/dataindex/dataindex.component.ts
@@ -0,0 +1,249 @@
+import { Component, ElementRef, NgZone, OnInit, ViewChild } from '@angular/core';
+import { ModalHelper, _HttpClient } from '@delon/theme';
+import { G2MiniAreaClickItem, G2MiniAreaData } from '@delon/chart/mini-area';
+import { G2PieClickItem, G2PieComponent, G2PieData } from '@delon/chart/pie';
+import { format } from 'date-fns';
+import { DataService } from '../../services/data.service';
+import { Chart, registerShape, Util } from '@antv/g2';
+import { G2TimelineClickItem, G2TimelineData } from '@delon/chart/timeline';
+
+@Component({
+ selector: 'app-datatable-dataindex',
+ templateUrl: './dataindex.component.html',
+ styleUrls: ['./dataindex.component.less']
+})
+export class DatatableDataindexComponent implements OnInit {
+ @ViewChild('pie', { static: false }) pie!: G2PieComponent;
+ chartData: G2TimelineData[] = [];
+ visitData = this.genData();
+ salesData = this.genData();
+ salesPieData: G2PieData[] = [];
+ total = '';
+
+ constructor(private service: DataService, private ngZone: NgZone) {
+
+ }
+
+ ngOnInit(): void {
+ this.refreshPie();
+ this.initLineData()
+ }
+ initLineData(){
+ for (let i = 0; i < 20; i += 1) {
+ this.chartData.push({
+ time: new Date().getTime() + 1000 * 60 * 60 * 24 * i,
+ y1: Math.floor(Math.random() * 100) + 1000,
+ y2: Math.floor(Math.random() * 100) + 10,
+ });
+ }
+ }
+ private genData(): G2MiniAreaData[] {
+ const beginDay = new Date().getTime();
+ const res: G2MiniAreaData[] = [];
+ for (let i = 0; i < 20; i += 1) {
+ res.push({
+ x: format(new Date(beginDay + 1000 * 60 * 60 * 24 * i), 'yyyy-MM-dd'),
+ y: Math.floor(Math.random() * 100) + 10,
+ });
+ }
+ return res;
+ }
+
+ refresh(): void {
+ this.visitData = this.genData();
+ }
+ refreshPie(): void {
+ const rv = (min: number = 0, max: number = 5000) => Math.floor(Math.random() * (max - min + 1) + min);
+ this.salesPieData = [
+ {
+ x: '家用电器',
+ y: rv(),
+ },
+ {
+ x: '食用酒水',
+ y: rv(),
+ },
+ {
+ x: '个护健康',
+ y: rv(),
+ },
+ {
+ x: '服饰箱包',
+ y: rv(),
+ },
+ {
+ x: '母婴产品',
+ y: rv(),
+ },
+ ];
+ if (Math.random() > 0.5) {
+ this.salesPieData.push({
+ x: '其他',
+ y: rv(),
+ });
+ }
+ this.total = `¥ ${this.salesPieData.reduce((pre, now) => now.y + pre, 0).toFixed(2)}`;
+ if (this.pie) {
+ // 等待组件渲染
+ setTimeout(() => {
+ console.log('a')
+ this.pie.changeData()
+ });
+ }
+ }
+
+ handleClick(data: G2MiniAreaClickItem): void {
+ this.service.msgSrv.info(`${data.item.x} - ${data.item.y}`);
+ }
+ format(val: number): string {
+ return `¥ ${val.toFixed(2)}`;
+ }
+ render(el: ElementRef): void {
+ this.ngZone.runOutsideAngular(() => this.init(el.nativeElement));
+ }
+ private init(el: HTMLElement): void {
+ const data = [
+ { item: '货源单', count: 40, percent: 0.4 },
+ { item: '合同单', count: 21, percent: 0.21 },
+ { item: '事例三', count: 17, percent: 0.17 },
+ { item: '事例四', count: 13, percent: 0.13 },
+ { item: '事例五', count: 9, percent: 0.09 },
+ ];
+ const chart = new Chart({
+ container: el,
+ autoFit: true,
+ height: 400,
+ });
+ // 新建一个 view 用来单独渲染Annotation
+ const innerView = chart.createView();
+ chart.coordinate('theta', {
+ radius: 0.6,
+ innerRadius: 0.7,
+ });
+
+ chart.data(data);
+
+ chart.scale('percent', {
+ formatter: val => {
+ val = val * 100 + '%';
+ return val;
+ },
+ });
+
+ chart.tooltip(false);
+
+ // 声明需要进行自定义图例字段: 'item'
+ chart.legend('item', {
+ position: 'right', // 配置图例显示位置
+ custom: true, // 关键字段,告诉 G2,要使用自定义的图例
+ items: data.map((obj, index) => {
+ return {
+ name: obj.item, // 对应 itemName
+ value: obj.percent, // 对应 itemValue
+ marker: {
+ symbol: 'square', // marker 的形状
+ style: {
+ r: 5, // marker 图形半径
+ fill: chart.getTheme().colors10[index], // marker 颜色,使用默认颜色,同图形对应
+ },
+ }, // marker 配置
+ };
+ }),
+ itemValue: {
+ style: {
+ fill: '#999',
+ }, // 配置 itemValue 样式
+ formatter: (val: any) => `${val * 100}%` // 格式化 itemValue 内容
+ },
+ });
+
+ chart
+ .interval()
+ .adjust('stack')
+ .position('percent')
+ .color('item')
+ .style({
+ fillOpacity: 1,
+ stroke: 'white',
+ lineWidth: 8,
+ })
+ .state({
+ active: {
+ style: element => {
+ const shape = element.shape;
+ return {
+ lineWidth: 1,
+ stroke: 'white',
+ strokeOpacity: shape.attr('fillOpacity'),
+ };
+ },
+ },
+ });
+
+ // 移除图例点击过滤交互
+ chart.removeInteraction('legend-filter');
+ chart.interaction('element-active');
+
+ chart.render();
+
+ // 监听 element 上状态的变化来动态更新 Annotation 信息
+ chart.on('element:statechange', (ev: any) => {
+ const { state, stateStatus, element } = ev.gEvent.originalEvent;
+
+ // 本示例只需要监听 active 的状态变化
+ if (state === 'active') {
+ const data = element.getData();
+ if (stateStatus) {
+ // 更新 Annotation
+ updateAnnotation(data);
+ } else {
+ // 隐藏 Annotation
+ clearAnnotation();
+ }
+ }
+ });
+
+ // 绘制 annotation
+ let lastItem: any;
+ function updateAnnotation(data: any) {
+ if (data.item !== lastItem) {
+ innerView.annotation().clear(true);
+ innerView
+ .annotation()
+ .text({
+ position: ['50%', '50%'],
+ content: data.item,
+ style: {
+ fontSize: 20,
+ fill: '#8c8c8c',
+ textAlign: 'center',
+ },
+ offsetY: -20,
+ })
+ .text({
+ position: ['50%', '50%'],
+ content: data.count,
+ style: {
+ fontSize: 28,
+ fill: '#8c8c8c',
+ textAlign: 'center',
+ },
+ offsetX: -10,
+ offsetY: 20,
+ })
+ innerView.render(true);
+ lastItem = data.item;
+ }
+ }
+
+ // 清空 annotation
+ function clearAnnotation() {
+ innerView.annotation().clear(true);
+ innerView.render(true);
+ lastItem = null;
+ }
+
+ }
+}
+
+
diff --git a/src/app/routes/datatable/components/dataindex/dataindex_line/dataindex_line.component.html b/src/app/routes/datatable/components/dataindex/dataindex_line/dataindex_line.component.html
new file mode 100644
index 00000000..3f148bfd
--- /dev/null
+++ b/src/app/routes/datatable/components/dataindex/dataindex_line/dataindex_line.component.html
@@ -0,0 +1,69 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/app/routes/datatable/components/dataindex/dataindex_line/dataindex_line.component.less b/src/app/routes/datatable/components/dataindex/dataindex_line/dataindex_line.component.less
new file mode 100644
index 00000000..e69de29b
diff --git a/src/app/routes/datatable/components/dataindex/dataindex_line/dataindex_line.component.spec.ts b/src/app/routes/datatable/components/dataindex/dataindex_line/dataindex_line.component.spec.ts
new file mode 100644
index 00000000..cd009e56
--- /dev/null
+++ b/src/app/routes/datatable/components/dataindex/dataindex_line/dataindex_line.component.spec.ts
@@ -0,0 +1,24 @@
+import { waitForAsync, ComponentFixture, TestBed } from '@angular/core/testing';
+import { DatatableDataindexComponent } from './dataindex.component';
+
+describe('DatatableDataindexComponent', () => {
+ let component: DatatableDataindexComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(waitForAsync(() => {
+ TestBed.configureTestingModule({
+ declarations: [ DatatableDataindexComponent ]
+ })
+ .compileComponents();
+ }));
+
+ beforeEach(() => {
+ fixture = TestBed.createComponent(DatatableDataindexComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/src/app/routes/datatable/components/dataindex/dataindex_line/dataindex_line.component.ts b/src/app/routes/datatable/components/dataindex/dataindex_line/dataindex_line.component.ts
new file mode 100644
index 00000000..eb15c985
--- /dev/null
+++ b/src/app/routes/datatable/components/dataindex/dataindex_line/dataindex_line.component.ts
@@ -0,0 +1,249 @@
+import { Component, ElementRef, NgZone, OnInit, ViewChild } from '@angular/core';
+import { ModalHelper, _HttpClient } from '@delon/theme';
+import { G2MiniAreaClickItem, G2MiniAreaData } from '@delon/chart/mini-area';
+import { G2PieClickItem, G2PieComponent, G2PieData } from '@delon/chart/pie';
+import { format } from 'date-fns';
+import { DataindexService } from '../services/dataindex.service';
+import { Chart, registerShape, Util } from '@antv/g2';
+import { G2TimelineClickItem, G2TimelineData } from '@delon/chart/timeline';
+
+@Component({
+ selector: 'app-datatable-dataindex',
+ templateUrl: './dataindex.component.html',
+ styleUrls: ['./dataindex.component.less']
+})
+export class DatatableDataindexComponent implements OnInit {
+ @ViewChild('pie', { static: false }) pie!: G2PieComponent;
+ chartData: G2TimelineData[] = [];
+ visitData = this.genData();
+ salesData = this.genData();
+ salesPieData: G2PieData[] = [];
+ total = '';
+
+ constructor(private service: DataindexService, private ngZone: NgZone) {
+
+ }
+
+ ngOnInit(): void {
+ this.refreshPie();
+ this.initLineData()
+ }
+ initLineData(){
+ for (let i = 0; i < 20; i += 1) {
+ this.chartData.push({
+ time: new Date().getTime() + 1000 * 60 * 60 * 24 * i,
+ y1: Math.floor(Math.random() * 100) + 1000,
+ y2: Math.floor(Math.random() * 100) + 10,
+ });
+ }
+ }
+ private genData(): G2MiniAreaData[] {
+ const beginDay = new Date().getTime();
+ const res: G2MiniAreaData[] = [];
+ for (let i = 0; i < 20; i += 1) {
+ res.push({
+ x: format(new Date(beginDay + 1000 * 60 * 60 * 24 * i), 'yyyy-MM-dd'),
+ y: Math.floor(Math.random() * 100) + 10,
+ });
+ }
+ return res;
+ }
+
+ refresh(): void {
+ this.visitData = this.genData();
+ }
+ refreshPie(): void {
+ const rv = (min: number = 0, max: number = 5000) => Math.floor(Math.random() * (max - min + 1) + min);
+ this.salesPieData = [
+ {
+ x: '家用电器',
+ y: rv(),
+ },
+ {
+ x: '食用酒水',
+ y: rv(),
+ },
+ {
+ x: '个护健康',
+ y: rv(),
+ },
+ {
+ x: '服饰箱包',
+ y: rv(),
+ },
+ {
+ x: '母婴产品',
+ y: rv(),
+ },
+ ];
+ if (Math.random() > 0.5) {
+ this.salesPieData.push({
+ x: '其他',
+ y: rv(),
+ });
+ }
+ this.total = `¥ ${this.salesPieData.reduce((pre, now) => now.y + pre, 0).toFixed(2)}`;
+ if (this.pie) {
+ // 等待组件渲染
+ setTimeout(() => {
+ console.log('a')
+ this.pie.changeData()
+ });
+ }
+ }
+
+ handleClick(data: G2MiniAreaClickItem): void {
+ this.service.msgSrv.info(`${data.item.x} - ${data.item.y}`);
+ }
+ format(val: number): string {
+ return `¥ ${val.toFixed(2)}`;
+ }
+ render(el: ElementRef): void {
+ this.ngZone.runOutsideAngular(() => this.init(el.nativeElement));
+ }
+ private init(el: HTMLElement): void {
+ const data = [
+ { item: '货源单', count: 40, percent: 0.4 },
+ { item: '合同单', count: 21, percent: 0.21 },
+ { item: '事例三', count: 17, percent: 0.17 },
+ { item: '事例四', count: 13, percent: 0.13 },
+ { item: '事例五', count: 9, percent: 0.09 },
+ ];
+ const chart = new Chart({
+ container: el,
+ autoFit: true,
+ height: 400,
+ });
+ // 新建一个 view 用来单独渲染Annotation
+ const innerView = chart.createView();
+ chart.coordinate('theta', {
+ radius: 0.6,
+ innerRadius: 0.7,
+ });
+
+ chart.data(data);
+
+ chart.scale('percent', {
+ formatter: val => {
+ val = val * 100 + '%';
+ return val;
+ },
+ });
+
+ chart.tooltip(false);
+
+ // 声明需要进行自定义图例字段: 'item'
+ chart.legend('item', {
+ position: 'right', // 配置图例显示位置
+ custom: true, // 关键字段,告诉 G2,要使用自定义的图例
+ items: data.map((obj, index) => {
+ return {
+ name: obj.item, // 对应 itemName
+ value: obj.percent, // 对应 itemValue
+ marker: {
+ symbol: 'square', // marker 的形状
+ style: {
+ r: 5, // marker 图形半径
+ fill: chart.getTheme().colors10[index], // marker 颜色,使用默认颜色,同图形对应
+ },
+ }, // marker 配置
+ };
+ }),
+ itemValue: {
+ style: {
+ fill: '#999',
+ }, // 配置 itemValue 样式
+ formatter: (val: any) => `${val * 100}%` // 格式化 itemValue 内容
+ },
+ });
+
+ chart
+ .interval()
+ .adjust('stack')
+ .position('percent')
+ .color('item')
+ .style({
+ fillOpacity: 1,
+ stroke: 'white',
+ lineWidth: 8,
+ })
+ .state({
+ active: {
+ style: element => {
+ const shape = element.shape;
+ return {
+ lineWidth: 1,
+ stroke: 'white',
+ strokeOpacity: shape.attr('fillOpacity'),
+ };
+ },
+ },
+ });
+
+ // 移除图例点击过滤交互
+ chart.removeInteraction('legend-filter');
+ chart.interaction('element-active');
+
+ chart.render();
+
+ // 监听 element 上状态的变化来动态更新 Annotation 信息
+ chart.on('element:statechange', (ev: any) => {
+ const { state, stateStatus, element } = ev.gEvent.originalEvent;
+
+ // 本示例只需要监听 active 的状态变化
+ if (state === 'active') {
+ const data = element.getData();
+ if (stateStatus) {
+ // 更新 Annotation
+ updateAnnotation(data);
+ } else {
+ // 隐藏 Annotation
+ clearAnnotation();
+ }
+ }
+ });
+
+ // 绘制 annotation
+ let lastItem: any;
+ function updateAnnotation(data: any) {
+ if (data.item !== lastItem) {
+ innerView.annotation().clear(true);
+ innerView
+ .annotation()
+ .text({
+ position: ['50%', '50%'],
+ content: data.item,
+ style: {
+ fontSize: 20,
+ fill: '#8c8c8c',
+ textAlign: 'center',
+ },
+ offsetY: -20,
+ })
+ .text({
+ position: ['50%', '50%'],
+ content: data.count,
+ style: {
+ fontSize: 28,
+ fill: '#8c8c8c',
+ textAlign: 'center',
+ },
+ offsetX: -10,
+ offsetY: 20,
+ })
+ innerView.render(true);
+ lastItem = data.item;
+ }
+ }
+
+ // 清空 annotation
+ function clearAnnotation() {
+ innerView.annotation().clear(true);
+ innerView.render(true);
+ lastItem = null;
+ }
+
+ }
+}
+
+
diff --git a/src/app/routes/datatable/components/datascreen/curve/curve.component.html b/src/app/routes/datatable/components/datascreen/curve/curve.component.html
new file mode 100644
index 00000000..f47cc41a
--- /dev/null
+++ b/src/app/routes/datatable/components/datascreen/curve/curve.component.html
@@ -0,0 +1,2 @@
+
+
diff --git a/src/app/routes/datatable/components/datascreen/curve/curve.component.less b/src/app/routes/datatable/components/datascreen/curve/curve.component.less
new file mode 100644
index 00000000..e69de29b
diff --git a/src/app/routes/datatable/components/datascreen/curve/curve.component.ts b/src/app/routes/datatable/components/datascreen/curve/curve.component.ts
new file mode 100644
index 00000000..b6cd6e92
--- /dev/null
+++ b/src/app/routes/datatable/components/datascreen/curve/curve.component.ts
@@ -0,0 +1,132 @@
+/*
+ * @Description :
+ * @Version : 1.0
+ * @Author : Shiming
+ * @Date : 2022-04-07 17:57:23
+ * @LastEditors : Shiming
+ * @LastEditTime : 2022-04-13 10:22:35
+ * @FilePath : \\tms-obc-web\\src\\app\\routes\\datatable\\components\\datascreen\\curve\\curve.component.ts
+ * Copyright (C) 2022 huzhenhong. All rights reserved.
+ */
+import { Component, ElementRef, Input, NgZone, OnChanges, OnInit, SimpleChanges, ViewChild } from '@angular/core';
+import { G2MiniAreaClickItem } from '@delon/chart/mini-area';
+import { DataService } from '../../../services/data.service';
+// import DataSet from '@antv/data-set';
+const DataSet = require('@antv/data-set');
+import { Chart } from '@antv/g2';
+@Component({
+ selector: 'app-financetable-curve-min',
+ templateUrl: './curve.component.html',
+ styleUrls: ['./curve.component.less']
+})
+export class DatatableCustomindexCurveMinComponent implements OnInit,OnChanges {
+ el: any;
+ @Input() chartData: any;
+ chart: any;
+ data = [
+ { time: '01', type: '订单数', temperature: 7 },
+ { time: '02', type: '运单数', temperature: 3.9 },
+ { time: '03', type: '订单数', temperature: 6.9 },
+ { time: '04', type: '订单数', temperature: 4.2 },
+ { time: '05', type: '订单数', temperature: 9.5 },
+ { time: '06', type: '订单数', temperature: 5.7 },
+ { time: '06', type: '运单数', temperature: 5.7 },
+ { time: '07', type: '运单数', temperature: 14.5 },
+ { time: '08', type: '订单数', temperature: 8.5 },
+ { time: '09', type: '订单数', temperature: 18.4 },
+ { time: '10', type: '订单数', temperature: 11.9 },
+ { time: '11', type: '订单数', temperature: 21.5 },
+ { time: '12', type: '订单数', temperature: 15.2 },
+ { time: '08', type: '运单数', temperature: 8.5 },
+ { time: '09', type: '运单数', temperature: 18.4 },
+ { time: '10', type: '运单数', temperature: 11.9 },
+ { time: '11', type: '运单数', temperature: 21.5 },
+ { time: '12', type: '订单数', temperature: 15.2 },
+ ];
+ constructor(private service: DataService, private ngZone: NgZone) {
+
+ }
+ ngOnChanges(changes: SimpleChanges): void {
+ if (this.chartData) {
+ // setTimeout(()=>{
+ // this.chart.render(true)
+ // }, 1000)
+
+ }
+ }
+
+ ngOnInit(): void {
+
+ }
+ reRender() {
+ setTimeout(() => {
+ this.chart.data(this.chartData);
+ this.chart.render();
+ }, 1000)
+ }
+ render(el: ElementRef): void {
+ this.el = el.nativeElement
+ setTimeout(() => {
+ this.ngZone.runOutsideAngular(() => this.init(this.el));
+ }, 1000)
+ }
+
+ private init(el: HTMLElement): void {
+ this.chart = new Chart({
+ container: el,
+ autoFit: true,
+ height: 320,
+ });
+ let value: any = []
+ this.service.request(this.service.$api_getTradingTrend).subscribe((res: any) => {
+ if(res) {
+ res.forEach((element: any) => {
+ value.push({
+ time: element?.time,
+ type: element?.type == 'DD' ? '订单数' : '运单数',
+ temperature: element?.value,
+ });
+ });
+ console.log(value);
+ this.chartData = value
+ this.chart.data(this.chartData);
+ this.chart.scale({
+ time: {
+ range: [0, 1],
+ },
+ number: {
+ nice: true,
+ },
+ });
+
+ this.chart.tooltip({
+ showCrosshairs: true,
+ shared: true,
+ });
+
+
+ this.chart.axis('temperature', {
+ label: {
+ formatter: (val: any) => {
+ return val + '万';
+ },
+ },
+ });
+ this.chart
+ .line()
+ .position('time*temperature')
+ .color('type')
+ .shape('smooth');
+
+ this.chart
+ .point()
+ .position('time*temperature')
+ .color('type')
+ .shape('circle');
+ this.chart.render();
+ };
+ });
+
+
+ }
+}
diff --git a/src/app/routes/datatable/components/datascreen/datascreen.component.html b/src/app/routes/datatable/components/datascreen/datascreen.component.html
new file mode 100644
index 00000000..e66a7862
--- /dev/null
+++ b/src/app/routes/datatable/components/datascreen/datascreen.component.html
@@ -0,0 +1,177 @@
+
+
+
+
+
+
运多星网络货运平台
+
+

+
{{ todayTime }}
+
+
+
+
实时交易监控
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ index + 1 }}
+
+
+ {{ item.weight ? item.weight + '吨' : '' }}
+ {{ item.volume ? item.volume + '方' : '' }}
+
+
+ {{ item.weight ? item.weight + '吨' : '' }}
+ {{ item.volume ? item.volume + '方' : '' }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item?.driverName }}{{ item?.carNo ? '/' + item?.carNo : '' }}
+
+
+
+
+
diff --git a/src/app/routes/datatable/components/datascreen/datascreen.component.less b/src/app/routes/datatable/components/datascreen/datascreen.component.less
new file mode 100644
index 00000000..b6591429
--- /dev/null
+++ b/src/app/routes/datatable/components/datascreen/datascreen.component.less
@@ -0,0 +1,15 @@
+:host{
+ ::ng-deep {
+ .ant-statistic-content-value{
+ color: #399ffd;
+ font-weight: bold;
+ }
+ .nz-statistic-number,.ant-statistic-content-value {
+ font-size: 14px;
+ }
+ .ant-table-thead > tr > th, .ant-table-tbody > tr > td, .ant-table tfoot > tr > th, .ant-table tfoot > tr > td {
+ padding: 0;
+ font-size: 12px;
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/app/routes/datatable/components/datascreen/datascreen.component.spec.ts b/src/app/routes/datatable/components/datascreen/datascreen.component.spec.ts
new file mode 100644
index 00000000..78be800e
--- /dev/null
+++ b/src/app/routes/datatable/components/datascreen/datascreen.component.spec.ts
@@ -0,0 +1,24 @@
+import { waitForAsync, ComponentFixture, TestBed } from '@angular/core/testing';
+import { DatatableDatascreenComponent } from './datascreen.component';
+
+describe('DatatableDatascreenComponent', () => {
+ let component: DatatableDatascreenComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(waitForAsync(() => {
+ TestBed.configureTestingModule({
+ declarations: [ DatatableDatascreenComponent ]
+ })
+ .compileComponents();
+ }));
+
+ beforeEach(() => {
+ fixture = TestBed.createComponent(DatatableDatascreenComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/src/app/routes/datatable/components/datascreen/datascreen.component.ts b/src/app/routes/datatable/components/datascreen/datascreen.component.ts
new file mode 100644
index 00000000..26545ef6
--- /dev/null
+++ b/src/app/routes/datatable/components/datascreen/datascreen.component.ts
@@ -0,0 +1,151 @@
+import { map } from 'rxjs/operators';
+/*
+ * @Description :
+ * @Version : 1.0
+ * @Author : Shiming
+ * @Date : 2022-04-06 10:57:56
+ * @LastEditors : Shiming
+ * @LastEditTime : 2022-04-14 16:21:00
+ * @FilePath : \\tms-obc-web\\src\\app\\routes\\datatable\\components\\datascreen\\datascreen.component.ts
+ * Copyright (C) 2022 huzhenhong. All rights reserved.
+ */
+import { Component, OnInit, ViewChild } from '@angular/core';
+import { STColumn, STComponent } from '@delon/abc/st';
+import { SFSchema } from '@delon/form';
+import { ModalHelper, _HttpClient } from '@delon/theme';
+import { DataService } from '../../services/data.service';
+import { DatatableCustomindexMapComponent } from './map/map.component';
+import { G2TimelineComponent, G2TimelineData } from '@delon/chart/timeline';
+import { G2MiniAreaClickItem, G2MiniAreaData } from '@delon/chart/mini-area';
+import { FinanceTableCurveComponent } from '../financetable/curve/curve.component';
+
+
+@Component({
+ selector: 'app-datatable-datascreen',
+ templateUrl: './datascreen.component.html',
+ styleUrls: ['./datascreen.component.less']
+})
+export class DatatableDatascreenComponent implements OnInit {
+ @ViewChild('st') private readonly st!: STComponent;
+ @ViewChild('orderSt') private readonly orderSt!: STComponent;
+ @ViewChild('map') private readonly map!: DatatableCustomindexMapComponent;
+ @ViewChild('timeline', { static: false }) timeline!: G2TimelineComponent;
+ @ViewChild('curve') private readonly curve!: FinanceTableCurveComponent;
+
+ columns: STColumn[] = [];
+ chartData: any[] = [];
+ orderColumns: STColumn[] = [];
+ chartData2: any = {}
+ allDeal: any;
+ headDeal: any;
+ classifyDeal: any;
+ todaysDeal: any;
+ todayTime: string = '';
+
+ monthData: G2TimelineData[] = [];
+ monthData2:G2TimelineData[] =[];
+ salesData2: Array = [];
+ constructor(public service: DataService) {}
+ ngOnChanges(changes: any): void {
+ console.log(changes);
+ }
+ /**
+ * 查询参数
+ */
+ get reqOrderParams() {
+ const params = {};
+ return { ...params };
+ }
+ get reqParams() {
+ const params = {};
+ return { ...params };
+ }
+ ngOnInit(): void {
+ setInterval(() => {
+ this.setTime();
+ }, 1000);
+ this.initST();
+ this.initOrderST();
+ this.initData();
+ // this.initLineData();
+ }
+ setTime() {
+ var myDate = new Date();
+ var mytime = myDate.toLocaleTimeString(); //获取当前时间
+ myDate.getFullYear(); //获取完整的年份(4位,1970-????)
+ myDate.getMonth(); //获取当前月份(0-11,0代表1月)
+ myDate.getDate(); //获取当前日(1-31)
+ this.todayTime = myDate.getFullYear() + '-' + myDate.getMonth() + 1 + '-' + myDate.getDate() + ' ' + mytime;
+ }
+ initData() {
+ this.service.request(this.service.$api_getAnnualTransactions).subscribe((res: any) => {
+ this.allDeal = res;
+ });
+ this.initPillarData()
+ this.service.request(this.service.$api_getTransactionAmount).subscribe((res: any) => {
+ this.headDeal = res;
+ });
+ this.service.request(this.service.$api_getCustomerStatistics).subscribe((res: any) => {
+ this.classifyDeal = res;
+ });
+ this.service.request(this.service.$api_getTradingToday).subscribe((res: any) => {
+ this.todaysDeal = res;
+ });
+ let value: any = [];
+ this.service.request(this.service.$api_getTransactionDistribution).subscribe((res: any) => {
+ if (res) {
+ res.forEach((element: any) => {
+ value.push({
+ name: element.province,
+ value: element.weight
+ });
+ });
+ console.log(value);
+ this.chartData = value;
+ this.map.reRender();
+ }
+ });
+ }
+ genData(): any{
+ let value: any = [];
+ this.service.request(this.service.$api_getShipmentRanking).subscribe((res: any) => {
+ console.log(res);
+ res.forEach((element: any) => {
+ value.push({
+ x: element.city,
+ y: element.weight
+ });
+ });
+ this.salesData2 = value
+ });
+ }
+ initPillarData(){
+ // this.curve.reRender()
+ this.genData();
+ }
+ /**
+ * 初始化数据列表
+ */
+ initST() {
+ this.columns = [
+ { title: '序号', render: 'index', className: 'text-center', },
+ { title: '发货地', index: 'loadAddress', className: 'text-center', },
+ { title: '卸货地', index: 'dischargeAddress', className: 'text-center',},
+ { title: '货物', index: 'goodsName', className: 'text-center', },
+ { title: '数量', render: 'weight', className: 'text-center',}
+ ];
+ }
+ initOrderST() {
+ this.orderColumns = [
+ { title: '运单号', index: 'wayCode', className: 'text-center', },
+ { title: '司机/车辆', index: 'carNo', className: 'text-center', },
+ { title: '货主', index: 'shipperName', className: 'text-center', },
+ { title: '时间', index: 'createTime', className: 'text-center', },
+ { title: '异常预警', index: 'warningTypeLabel', className: 'text-center',}
+ ];
+ }
+
+ handleClick(data: G2MiniAreaClickItem): void {
+ this.service.msgSrv.info(`${data.item.x} - ${data.item.y}`);
+ }
+}
diff --git a/src/app/routes/datatable/components/datascreen/map/map.component.html b/src/app/routes/datatable/components/datascreen/map/map.component.html
new file mode 100644
index 00000000..1ff87c79
--- /dev/null
+++ b/src/app/routes/datatable/components/datascreen/map/map.component.html
@@ -0,0 +1,12 @@
+
+
+
\ No newline at end of file
diff --git a/src/app/routes/datatable/components/datascreen/map/map.component.less b/src/app/routes/datatable/components/datascreen/map/map.component.less
new file mode 100644
index 00000000..e69de29b
diff --git a/src/app/routes/datatable/components/datascreen/map/map.component.ts b/src/app/routes/datatable/components/datascreen/map/map.component.ts
new file mode 100644
index 00000000..90927785
--- /dev/null
+++ b/src/app/routes/datatable/components/datascreen/map/map.component.ts
@@ -0,0 +1,145 @@
+import { Component, ElementRef, Input, NgZone, OnChanges, OnInit, SimpleChanges, ViewChild, AfterViewInit } from '@angular/core';
+import { Chart } from '@antv/g2';
+import DataSet from '@antv/data-set';
+import { DataService } from 'src/app/routes/datatable/services/data.service';
+@Component({
+ selector: 'app-datatable-customindex-map',
+ templateUrl: './map.component.html',
+ styleUrls: ['./map.component.less']
+})
+export class DatatableCustomindexMapComponent implements OnInit, OnChanges, AfterViewInit {
+ el: any;
+ @Input() chartData: any;
+ @ViewChild('auditModal', { static: false }) auditModal!: any;
+ @ViewChild('map',{static: false}) map!: any;
+ chart: any;
+ mapData: any;
+ ds!: DataSet ;
+ worldMap: any;
+ userView: any;
+ userDv: any;
+ userData: any = [];
+ constructor(private service: DataService, private ngZone: NgZone) {}
+ ngAfterViewInit(): void {
+ this.map.el.nativeElement.style.height = this.map.el.nativeElement.clientWidth + 'px'
+ this.chart?.render();
+ }
+
+ ngOnChanges(changes: SimpleChanges): void {
+ if (this.chartData) {
+ // setTimeout(()=>{
+ // this.chart.render(true)
+ // }, 1000)
+ }
+ }
+
+ ngOnInit(): void {}
+ reRender() {
+ setTimeout(() => {
+ this.chart.render();
+ }, 1000);
+ }
+ render(el: ElementRef): void {
+ this.el = el.nativeElement;
+ setTimeout(() => {
+ this.ngZone.runOutsideAngular(() => this.init(this.el));
+ }, 500);
+ }
+
+ private init(el: HTMLElement): void {
+ fetch('https://gw.alipayobjects.com/os/antvdemo/assets/data/china.json')
+ .then(res => res.json())
+ .then(mapData => {
+ this.mapData =mapData
+ this.chart = new Chart({
+ container: el,
+ autoFit: true,
+ padding: [0, 0]
+ });
+ this.chart.tooltip({
+ showTitle: false,
+ showMarkers: false,
+ shared: true
+ });
+ // 同步度量
+ this.chart.scale({
+ longitude: {
+ sync: true
+ },
+ latitude: {
+ sync: true
+ }
+ });
+ this.chart.axis(false);
+ this.chart.legend('trend', {
+ position: 'left'
+ });
+
+ // 绘制世界地图背景
+ this.ds = new DataSet();
+ this.worldMap = this.ds.createView('back').source(this.mapData, {
+ type: 'GeoJSON'
+ });
+ const worldMapView = this.chart.createView();
+ worldMapView.data(this.worldMap.rows);
+ worldMapView.tooltip(false);
+ worldMapView.polygon().position('longitude*latitude').style({
+ fill: '#fff',
+ stroke: '#ccc',
+ lineWidth: 1
+ });
+ let value: any = []
+ this.service.request(this.service.$api_getTransactionDistribution).subscribe((res: any) => {
+ if(res) {
+ res.forEach((element: any) => {
+ value.push({
+ '省份': element.province,
+ '订单数': element.weight,
+ });
+ });
+ this.userData = value
+
+if (!(this.userData instanceof Array) || this.userData.length === 0) {
+ return;
+ }
+ this.userDv = this.ds.createView().source(this.userData).transform({
+ geoDataView: this.worldMap,
+ field: '省份',
+ type: 'geo.region',
+ as: ['longitude', 'latitude']
+ }).transform({
+ type: 'map',
+ callback: (obj: { trend: string; 订单数: number }) => {
+
+ if(obj.订单数 < 500) {
+ obj.trend = '500以下';
+ } else if(obj.订单数 >= 500 && obj.订单数 < 1000){
+ obj.trend = '500-1000';
+ } else if(obj.订单数 >= 1000 ){
+ obj.trend = '>1000';
+ }
+ return obj;
+ }
+ });
+ this.userView = this.chart.createView();
+ this.userView.data(this.userDv.rows);
+ this.userView.scale({
+ trend: {
+ alias: '订单交易数量'
+ }
+ });
+ this.userView.polygon().position('longitude*latitude').color('trend', ['#0a3f80', '#1b6aca', '#5d93d4']).tooltip('省份*订单数').style({fillOpacity: 0.85 })
+ .animate({
+ leave: {
+ animation: 'fade-out'
+ }
+ });
+ this.userView.interaction('element-active');
+ this.chart.render();
+
+ }
+ })
+ });
+ }
+
+}
diff --git a/src/app/routes/datatable/components/financetable/curve/curve.component.html b/src/app/routes/datatable/components/financetable/curve/curve.component.html
new file mode 100644
index 00000000..7ceba0b7
--- /dev/null
+++ b/src/app/routes/datatable/components/financetable/curve/curve.component.html
@@ -0,0 +1,2 @@
+
+
diff --git a/src/app/routes/datatable/components/financetable/curve/curve.component.less b/src/app/routes/datatable/components/financetable/curve/curve.component.less
new file mode 100644
index 00000000..e69de29b
diff --git a/src/app/routes/datatable/components/financetable/curve/curve.component.ts b/src/app/routes/datatable/components/financetable/curve/curve.component.ts
new file mode 100644
index 00000000..66ef76b1
--- /dev/null
+++ b/src/app/routes/datatable/components/financetable/curve/curve.component.ts
@@ -0,0 +1,89 @@
+import { Component, ElementRef, Input, NgZone, OnChanges, OnInit, SimpleChanges, ViewChild } from '@angular/core';
+import { G2MiniAreaClickItem } from '@delon/chart/mini-area';
+import { DataService } from '../../../services/data.service';
+// import DataSet from '@antv/data-set';
+const DataSet = require('@antv/data-set');
+import { Chart } from '@antv/g2';
+@Component({
+ selector: 'app-financetable-curve',
+ templateUrl: './curve.component.html',
+ styleUrls: ['./curve.component.less']
+})
+export class FinanceTableCurveComponent implements OnInit,OnChanges {
+ el: any;
+ @Input() chartData: any;
+ chart: any;
+ constructor(private service: DataService, private ngZone: NgZone) {
+
+ }
+ ngOnChanges(changes: SimpleChanges): void {
+ if (this.chartData) {
+ // setTimeout(()=>{
+ // this.chart.render(true)
+ // }, 1000)
+
+ }
+ }
+
+ ngOnInit(): void {
+
+ }
+ reRender() {
+ setTimeout(() => {
+ this.chart.data(this.chartData);
+ this.chart.render();
+ }, 1000)
+ }
+ render(el: ElementRef): void {
+ this.el = el.nativeElement
+ setTimeout(() => {
+ this.ngZone.runOutsideAngular(() => this.init(this.el));
+ }, 1000)
+ }
+
+ private init(el: HTMLElement): void {
+ this.chart = new Chart({
+ container: el,
+ autoFit: true,
+ height: 500,
+ });
+
+ this.chart.data(this.chartData);
+ this.chart.scale({
+ time: {
+ range: [0, 1],
+ },
+ number: {
+ nice: true,
+ },
+ });
+
+ this.chart.tooltip({
+ showCrosshairs: true,
+ shared: true,
+ });
+
+ this.chart.axis('number', {
+ label: {
+ formatter: (val: any) => {
+ return val*100+ ' %';
+ },
+ },
+ });
+
+
+ this.chart
+ .line()
+ .position('time*number')
+ .color('name')
+ .tooltip('name*number', (name:any, value:any) => {
+ return {
+ name: name,
+ value: value*100 + '%'
+ };
+ });
+
+ this.chart.render();
+
+ }
+}
diff --git a/src/app/routes/datatable/components/financetable/financetable.component.html b/src/app/routes/datatable/components/financetable/financetable.component.html
new file mode 100644
index 00000000..4d0c7d04
--- /dev/null
+++ b/src/app/routes/datatable/components/financetable/financetable.component.html
@@ -0,0 +1,94 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{item.czcgje | currency}}
+
+
+ {{item.yingsje | currency}}
+
+
+ {{item.yisje | currency}}
+
+
+ {{item.yingfyf | currency}}
+
+
+ {{item.yifyf | currency}}
+
+
+ {{item.ykpje | currency}}
+
+
+ {{item.dkpje | currency}}
+
+
+ {{item.yingsfjf | currency}}
+
+
+ {{item.yisfjf | currency}}
+
+
+ {{item.fjfl + '%'}}
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/app/routes/datatable/components/financetable/financetable.component.less b/src/app/routes/datatable/components/financetable/financetable.component.less
new file mode 100644
index 00000000..6b4b1cba
--- /dev/null
+++ b/src/app/routes/datatable/components/financetable/financetable.component.less
@@ -0,0 +1,11 @@
+.chooseBox{
+ display: flex;
+}
+.timeBox{
+ display: flex;
+ margin: 0 0 0 10px;
+}
+.dateBox{
+ display: inline-block;
+ margin: 0 0 0 10px;
+}
\ No newline at end of file
diff --git a/src/app/routes/datatable/components/financetable/financetable.component.ts b/src/app/routes/datatable/components/financetable/financetable.component.ts
new file mode 100644
index 00000000..5201e4cb
--- /dev/null
+++ b/src/app/routes/datatable/components/financetable/financetable.component.ts
@@ -0,0 +1,160 @@
+import { Component, OnInit, ViewChild } from '@angular/core';
+import { STColumn, STComponent } from '@delon/abc/st';
+import { SFSchema } from '@delon/form';
+import { DatePipe, ModalHelper, _HttpClient } from '@delon/theme';
+import { DataService } from '../../services/data.service';
+import { differenceInCalendarDays } from 'date-fns';
+import { OperationCurveComponent } from '../operationtable/curve/curve.component';
+import { OperationPillarComponent } from '../operationtable/pillar/pillar.component';
+import { FinanceTableCurveComponent } from './curve/curve.component';
+import { FinancetablePillarComponent } from './pillar/pillar.component';
+
+@Component({
+ selector: 'app-datatable-financetable',
+ templateUrl: './financetable.component.html',
+ styleUrls: ['./financetable.component.less'],
+ providers: [DatePipe]
+})
+export class DatatableFinancetableComponent implements OnInit {
+ @ViewChild('curve') private readonly curve!: FinanceTableCurveComponent;
+ @ViewChild('pillar') private readonly pillar!: FinancetablePillarComponent;
+ @ViewChild('st') private readonly st!: STComponent;
+ type = 1;
+ mode = 'year';
+ date: any = null;
+ defineDate = [];
+ time: any = ['2022-01-01 00:00:00']
+ dateFormat = 'yyyy';
+ dateNext: any = null;
+ modeNext = 'year';
+ timeNext: any = ['2022-01-01 00:00:00']
+ today = new Date();
+ enterpriseInfoId = ''
+ interManlist: any = []
+ chartData: any = {}
+ flag = false;
+ columns: STColumn[] = [
+ { title: '运营主体', index: 'networkTransporterName', className: 'text-center' ,width: 200},
+ { title: '客户预存款', index: 'czcgje',render: 'czcgje', className: 'text-center',width: 200 },
+ { title: '应收金额', index: 'yingsje',render: 'yingsje', className: 'text-center' ,width: 200},
+ { title: '已收金额', index: 'yisje',render: 'yisje', className: 'text-center',width: 200 },
+ { title: '应付运费', index: 'yingfyf', render: 'yingfyf',className: 'text-center' ,width: 200},
+ { title: '已付运费', index: 'yifyf',render: 'yifyf', className: 'text-center' ,width: 200},
+ { title: '已开票金额', index: 'ykpje',render: 'ykpje', className: 'text-center' ,width: 200},
+ { title: '待开票金额', index: 'dkpje',render: 'dkpje', className: 'text-center' ,width: 200},
+ { title: '应收附加费', index: 'yingsfjf',render: 'yingsfjf', className: 'text-center' ,width: 200},
+ { title: '已收附加费', index: 'yisfjf',render: 'yisfjf', className: 'text-center' ,width: 200},
+ { title: '平均附加费率', index: 'fjfl', render: 'fjfl',className: 'text-center',width: 200 }
+ ];
+ /**
+ * 查询参数
+ */
+ get reqParams() {
+ if (this.mode === 'year') {
+ this.type = 1
+ } else if (this.mode === 'month') {
+ this.type = 2
+ } else if (this.mode === 'date') {
+ this.type = 3
+ } else {
+ this.type = 4
+ }
+
+ let params: any = {
+ time: this.time,
+ type: this.type
+ };
+
+ delete params._$expand;
+ return { ...params };
+ }
+
+ constructor(public service: DataService, private datePipe: DatePipe) { }
+ ngOnInit(): void {
+ this.initData();
+ this.initPillarData();
+ }
+
+ initPillarData(){
+ let type = 1
+ if (this.modeNext === 'year') {
+ this.type = 1
+ } else if (this.modeNext === 'month') {
+ this.type = 2
+ }
+ const params: any = {
+ time: this.timeNext,
+ type,
+ enterpriseInfoId: this.enterpriseInfoId
+ };
+ this.flag = true
+ this.service.request(this.service.$api_financialReportHistogram, params).subscribe(res => {
+ if (res) {
+ this.chartData = res
+ if(this.flag) {
+ this.pillar.reRender()
+ this.curve.reRender()
+ }
+ }
+ })
+ }
+ initData() {
+ this.service.getNetworkFreightForwarder().subscribe(res => {
+ this.interManlist = res
+ this.enterpriseInfoId = res[0].value
+ })
+ }
+
+ changeData() {
+ if (this.mode === 'year') {
+ this.dateFormat = 'yyyy'
+ } else if (this.mode === 'month') {
+ this.dateFormat = 'yyyy-MM'
+ } else {
+ this.dateFormat = 'yyyy-MM-dd'
+ }
+ }
+ onChange(result: any) {
+ if (this.mode === 'year') {
+ this.time = [this.datePipe.transform(this.date, 'yyyy') + '-01-01 00:00:00']
+ } else if (this.mode === 'month') {
+ this.time = [this.datePipe.transform(this.date, 'yyyy-MM') + '-01 00:00:00']
+ } else if (this.mode === 'date') {
+ this.time = [this.datePipe.transform(this.date, 'yyyy-MM-dd') + ' 00:00:00']
+ } else {
+ this.time = [this.datePipe.transform(this.defineDate[0], 'yyyy-MM-dd') + ' 00:00:00', this.datePipe.transform(this.defineDate[1], 'yyyy-MM-dd') + ' 00:00:00']
+ }
+ this.st.reload({ ...this.reqParams });
+ }
+ disabledDate = (current: Date): boolean =>
+ // Can not select days before today and today
+ differenceInCalendarDays(current, this.today) > 0;
+ exportFun() {
+
+ }
+ changeCurve(){
+
+ }
+ changePie(){
+
+ }
+ changeDataNext() {
+ if(this.modeNext === 'year') {
+ this.dateFormat = 'yyyy'
+ } else if(this.modeNext === 'month') {
+ this.dateFormat = 'yyyy-MM'
+ }
+ }
+ onChangeNext(result: any) {
+ if(result === null) {
+ return
+ }
+ if(this.modeNext === 'year') {
+ this.timeNext = [this.datePipe.transform(this.dateNext, 'yyyy') + '-01-01 00:00:00']
+ } else if(this.modeNext === 'month') {
+ this.timeNext = [this.datePipe.transform(this.dateNext, 'yyyy-MM') + '-01 00:00:00']
+ }
+ this.initPillarData();
+ }
+
+}
diff --git a/src/app/routes/datatable/components/financetable/pillar/pillar.component.html b/src/app/routes/datatable/components/financetable/pillar/pillar.component.html
new file mode 100644
index 00000000..0640a4d4
--- /dev/null
+++ b/src/app/routes/datatable/components/financetable/pillar/pillar.component.html
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/app/routes/datatable/components/financetable/pillar/pillar.component.less b/src/app/routes/datatable/components/financetable/pillar/pillar.component.less
new file mode 100644
index 00000000..e69de29b
diff --git a/src/app/routes/datatable/components/financetable/pillar/pillar.component.ts b/src/app/routes/datatable/components/financetable/pillar/pillar.component.ts
new file mode 100644
index 00000000..32f36a91
--- /dev/null
+++ b/src/app/routes/datatable/components/financetable/pillar/pillar.component.ts
@@ -0,0 +1,95 @@
+/*
+ * @Description :
+ * @Version : 1.0
+ * @Author : Shiming
+ * @Date : 2022-04-01 13:16:39
+ * @LastEditors : Shiming
+ * @LastEditTime : 2022-04-11 16:00:12
+ * @FilePath : \\tms-obc-web\\src\\app\\routes\\datatable\\components\\financetable\\pillar\\pillar.component.ts
+ * Copyright (C) 2022 huzhenhong. All rights reserved.
+ */
+import { Component, ElementRef, Input, NgZone, OnChanges, OnInit, SimpleChanges, ViewChild } from '@angular/core';
+import { Chart } from '@antv/g2';
+import { DataService } from 'src/app/routes/datatable/services/data.service';
+@Component({
+ selector: 'app-financetable-pillar',
+ templateUrl: './pillar.component.html',
+ styleUrls: ['./pillar.component.less']
+})
+export class FinancetablePillarComponent implements OnInit, OnChanges {
+ el: any;
+ @Input() chartData: any;
+ chart: any;
+ constructor(private service: DataService, private ngZone: NgZone) {
+
+ }
+ ngOnChanges(changes: SimpleChanges): void {
+ if (this.chartData) {
+ // setTimeout(()=>{
+ // this.chart.render(true)
+ // }, 1000)
+
+ }
+ }
+
+ ngOnInit(): void {
+
+ }
+ reRender() {
+ setTimeout(() => {
+ this.chart.data(this.chartData);
+ console.log(this.chartData)
+ this.chart.render();
+ }, 1000)
+ }
+ render(el: ElementRef): void {
+ this.el = el.nativeElement
+ setTimeout(() => {
+ this.ngZone.runOutsideAngular(() => this.init(this.el));
+ },1000)
+ }
+
+ private init(el: HTMLElement): void {
+ this.chart = new Chart({
+ container: el,
+ autoFit: true,
+ height: 500,
+ });
+
+ this.chart.data(this.chartData);
+
+ this.chart.scale('number', {
+ nice: true,
+ // ticks:
+ });
+ this.chart.tooltip({
+ showMarkers: false,
+ shared: true,
+ });
+ this.chart.axis('number', {
+ label: {
+ formatter: (val: any) => {
+ return '¥' + this.toThousands(val) ;
+ },
+ },
+ });
+ this.chart
+ .interval()
+ .position('time*number')
+ .color('name')
+ .adjust([
+ {
+ type: 'dodge',
+ marginRatio: 0,
+ },
+ ]);
+
+ this.chart.interaction('active-region');
+
+ this.chart.render();
+ }
+ toThousands(num: string) {
+ const str = num.toString()
+ return str.replace(/(\d)(?=(?:\d{3})+$)/g, '$1,')
+ }
+}
\ No newline at end of file
diff --git a/src/app/routes/datatable/components/invoicetable/invoicetable.component.html b/src/app/routes/datatable/components/invoicetable/invoicetable.component.html
new file mode 100644
index 00000000..fd37f657
--- /dev/null
+++ b/src/app/routes/datatable/components/invoicetable/invoicetable.component.html
@@ -0,0 +1,26 @@
+
+
+
+
+
+ {{item.totalInvoicedAmount | currency}}
+
+
+ {{item.invAmountMonth | currency}}
+
+
+ {{item.applyWaitInvAmount | currency}}
+
+
+ {{item.unInvoicedAmountHistory | currency}}
+
+
+ {{item.unInvoicedAmountCurMonth | currency}}
+
+
+ {{item.invoicedAmount | currency}}
+
+
+
\ No newline at end of file
diff --git a/src/app/routes/datatable/components/invoicetable/invoicetable.component.ts b/src/app/routes/datatable/components/invoicetable/invoicetable.component.ts
new file mode 100644
index 00000000..fc71aab6
--- /dev/null
+++ b/src/app/routes/datatable/components/invoicetable/invoicetable.component.ts
@@ -0,0 +1,103 @@
+import { Component, OnInit, ViewChild } from '@angular/core';
+import { STColumn, STComponent, STData } from '@delon/abc/st';
+import { SFSchema } from '@delon/form';
+import { ModalHelper, _HttpClient } from '@delon/theme';
+import { DataService } from '../../services/data.service';
+
+@Component({
+ selector: 'app-datatable-invoicetable',
+ templateUrl: './invoicetable.component.html'
+})
+export class DatatableInvoicetableComponent implements OnInit {
+ @ViewChild('st', { static: false })
+ st!: STComponent;
+ columns!: STColumn[];
+
+ data = [{ name1: 1111 }];
+ constructor(private http: _HttpClient, private modal: ModalHelper, public service: DataService) {}
+
+ /**
+ * 查询参数
+ */
+ get reqParams() {
+ return {};
+ }
+ ngOnInit(): void {
+ this.initST();
+ }
+ initST() {
+ this.columns = [
+ {
+ title: '运营主体',
+ index: 'operationName',
+ width: 220
+ },
+ {
+ title: '已开票总金额',
+ index: 'totalInvoicedAmount',
+ render: 'totalInvoicedAmount',
+ className: 'text-right',
+ width: 150
+ },
+ {
+ title: '当月已开票金额',
+ index: 'invAmountMonth',
+ render: 'invAmountMonth',
+ className: 'text-right',
+ width: 150
+ },
+ {
+ title: '当月已开票张数',
+ index: 'numInvAmountMonth',
+ className: 'text-right',
+ width: 150
+ },
+ {
+ title: '已申请待开金额',
+ index: 'applyWaitInvAmount',
+ render: 'applyWaitInvAmount',
+ className: 'text-right',
+ width: 150
+ },
+ {
+ title: '申请待开客户',
+ index: 'applyWaitCustomer',
+ className: 'text-right',
+ width: 150
+ },
+ {
+ title: '已开票金额',
+ index: 'invoicedAmount',
+ render: 'invoicedAmount',
+ className: 'text-right',
+ width: 150
+ },
+ {
+ title: '未申请开票金额(历史)',
+ index: 'unInvoicedAmountHistory',
+ render: 'unInvoicedAmountHistory',
+ className: 'text-right',
+ width: 200
+ },
+ {
+ title: '未申请开票金额(当月)',
+ index: 'unInvoicedAmountCurMonth',
+ render: 'unInvoicedAmountCurMonth',
+ className: 'text-right',
+ width: 200
+ },
+ {
+ title: '当月发票张数',
+ index: 'unInvoicedAmountHistory1',
+ className: 'text-right',
+ width: 150
+ },
+ {
+ title: '剩余发票张数',
+ index: 'unInvoicedAmountCurMonth1',
+ className: 'text-right',
+ width: 150
+ }
+ ];
+ }
+}
diff --git a/src/app/routes/datatable/components/operationtable/curve/curve.component.html b/src/app/routes/datatable/components/operationtable/curve/curve.component.html
new file mode 100644
index 00000000..0640a4d4
--- /dev/null
+++ b/src/app/routes/datatable/components/operationtable/curve/curve.component.html
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/app/routes/datatable/components/operationtable/curve/curve.component.less b/src/app/routes/datatable/components/operationtable/curve/curve.component.less
new file mode 100644
index 00000000..e69de29b
diff --git a/src/app/routes/datatable/components/operationtable/curve/curve.component.ts b/src/app/routes/datatable/components/operationtable/curve/curve.component.ts
new file mode 100644
index 00000000..265190af
--- /dev/null
+++ b/src/app/routes/datatable/components/operationtable/curve/curve.component.ts
@@ -0,0 +1,83 @@
+import { Component, ElementRef, Input, NgZone, OnChanges, OnInit, SimpleChanges, ViewChild } from '@angular/core';
+import { Chart } from '@antv/g2';
+import { DataService } from 'src/app/routes/datatable/services/data.service';
+@Component({
+ selector: 'app-operation-curve',
+ templateUrl: './curve.component.html',
+ styleUrls: ['./curve.component.less']
+})
+export class OperationCurveComponent implements OnInit, OnChanges {
+ el: any;
+ @Input() chartData: any;
+ chart: any;
+ constructor(private service: DataService, private ngZone: NgZone) {
+
+ }
+ ngOnChanges(changes: SimpleChanges): void {
+ if (this.chartData) {
+ // setTimeout(()=>{
+ // this.chart.render(true)
+ // }, 1000)
+
+ }
+ }
+
+ ngOnInit(): void {
+
+ }
+ reRender() {
+ setTimeout(() => {
+ this.chart.data(this.chartData);
+ this.chart.render();
+ }, 1000)
+ }
+ render(el: ElementRef): void {
+ this.el = el.nativeElement
+ setTimeout(() => {
+ this.ngZone.runOutsideAngular(() => this.init(this.el));
+ },500)
+ console.log(this.chartData);
+
+ }
+
+ private init(el: HTMLElement): void {
+ this.chart = new Chart({
+ container: el,
+ autoFit: true,
+ height: 500,
+ });
+
+ this.chart.data(this.chartData);
+ this.chart.scale({
+ time: {
+ range: [0, 1],
+ },
+ number: {
+ nice: true,
+ },
+ });
+
+ this.chart.tooltip({
+ showCrosshairs: true,
+ shared: true,
+ });
+
+ this.chart.axis('number', {
+ label: {
+ formatter: (val: any) => {
+ return val;
+ },
+ },
+ });
+
+ this.chart
+ .line()
+ .position('time*number')
+ .color('name')
+
+
+ this.chart.render();
+
+ }
+
+}
\ No newline at end of file
diff --git a/src/app/routes/datatable/components/operationtable/operationtable.component.html b/src/app/routes/datatable/components/operationtable/operationtable.component.html
new file mode 100644
index 00000000..2d0201a7
--- /dev/null
+++ b/src/app/routes/datatable/components/operationtable/operationtable.component.html
@@ -0,0 +1,55 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/app/routes/datatable/components/operationtable/operationtable.component.less b/src/app/routes/datatable/components/operationtable/operationtable.component.less
new file mode 100644
index 00000000..6b4b1cba
--- /dev/null
+++ b/src/app/routes/datatable/components/operationtable/operationtable.component.less
@@ -0,0 +1,11 @@
+.chooseBox{
+ display: flex;
+}
+.timeBox{
+ display: flex;
+ margin: 0 0 0 10px;
+}
+.dateBox{
+ display: inline-block;
+ margin: 0 0 0 10px;
+}
\ No newline at end of file
diff --git a/src/app/routes/datatable/components/operationtable/operationtable.component.spec.ts b/src/app/routes/datatable/components/operationtable/operationtable.component.spec.ts
new file mode 100644
index 00000000..3b100f2c
--- /dev/null
+++ b/src/app/routes/datatable/components/operationtable/operationtable.component.spec.ts
@@ -0,0 +1,24 @@
+import { waitForAsync, ComponentFixture, TestBed } from '@angular/core/testing';
+import { DatatableOperationtableComponent } from './operationtable.component';
+
+describe('DatatableOperationtableComponent', () => {
+ let component: DatatableOperationtableComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(waitForAsync(() => {
+ TestBed.configureTestingModule({
+ declarations: [ DatatableOperationtableComponent ]
+ })
+ .compileComponents();
+ }));
+
+ beforeEach(() => {
+ fixture = TestBed.createComponent(DatatableOperationtableComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/src/app/routes/datatable/components/operationtable/operationtable.component.ts b/src/app/routes/datatable/components/operationtable/operationtable.component.ts
new file mode 100644
index 00000000..15a0571c
--- /dev/null
+++ b/src/app/routes/datatable/components/operationtable/operationtable.component.ts
@@ -0,0 +1,155 @@
+import { Component, OnInit, ViewChild } from '@angular/core';
+import { STColumn, STComponent } from '@delon/abc/st';
+import { DatePipe, _HttpClient } from '@delon/theme';
+import { DataService } from '../../services/data.service';
+import { differenceInCalendarDays } from 'date-fns';
+import { OperationCurveComponent } from './curve/curve.component';
+import { OperationPillarComponent } from './pillar/pillar.component';
+
+@Component({
+ selector: 'app-datatable-operationtable',
+ templateUrl: './operationtable.component.html',
+ styleUrls: ['./operationtable.component.less'],
+ providers: [DatePipe]
+
+})
+export class DatatableOperationtableComponent implements OnInit {
+ @ViewChild('curve') private readonly curve!: OperationCurveComponent;
+ @ViewChild('pillar') private readonly pillar!: OperationPillarComponent;
+ @ViewChild('st') private readonly st!: STComponent;
+ type = 1;
+ mode = 'year';
+ date: any = null;
+ defineDate = [];
+ time: any = ['2022-01-01 00:00:00']
+ dateFormat = 'yyyy';
+ dateNext: any = null;
+ modeNext = 'year';
+ timeNext: any = ['2022-01-01 00:00:00']
+ today = new Date();
+ enterpriseInfoId = ''
+
+ interManlist: any = []
+ chartData: any = {}
+ columns: STColumn[] = [
+ { title: '运营主体', index: 'networkTransporterName', className: 'text-center' },
+ { title: '订单数', index: 'zsl', className: 'text-center' },
+ { title: '应收金额', index: 'yingsje', className: 'text-center', type: 'widget', widget: { type: 'currency-chy', params: ({ record }) => ({ value: record.yingsje }) } },
+ { title: '承运数', index: 'cys', className: 'text-center' },
+ { title: '应付运费', index: 'yingfyf', className: 'text-center', type: 'widget', widget: { type: 'currency-chy', params: ({ record }) => ({ value: record.yingfyf }) } },
+ { title: '运量(吨)', index: 'yl', className: 'text-center' },
+ { title: '待接单数', index: 'djd', className: 'text-center' },
+ { title: '在途数', index: 'ysz', className: 'text-center' },
+ { title: '运输完成', index: 'yswc', className: 'text-center' },
+ { title: '已收金额', index: 'yisje', className: 'text-center', type: 'widget', widget: { type: 'currency-chy', params: ({ record }) => ({ value: record.yisje }) } },
+ { title: '已付运费', index: 'yifyf', className: 'text-center', type: 'widget', widget: { type: 'currency-chy', params: ({ record }) => ({ value: record.yifyf }) } },
+ ];
+ /**
+ * 查询参数
+ */
+ get reqParams() {
+ if (this.mode === 'year') {
+ this.type = 1
+ } else if (this.mode === 'month') {
+ this.type = 2
+ } else if (this.mode === 'date') {
+ this.type = 3
+ } else {
+ this.type = 4
+ }
+ let params: any = {
+ time: this.time,
+ type: this.type
+ };
+
+ delete params._$expand;
+ return { ...params };
+ }
+
+ constructor(public service: DataService, private datePipe: DatePipe) { }
+ ngOnInit(): void {
+ this.initData()
+ this.initPillarData()
+ }
+ initPillarData(flag?: boolean){
+ let type = 1
+ if(this.mode === 'year') {
+ type = 1
+ } else if(this.mode === 'month') {
+ type = 2
+ }
+ const params: any = {
+ time: this.timeNext,
+ type,
+ enterpriseInfoId: this.enterpriseInfoId
+ };
+ this.service.request(this.service.$api_operationalReportHistogram, params).subscribe(res => {
+ if (res) {
+ this.chartData = res
+ if(flag) { // 除第一次加载外
+ this.pillar.reRender()
+ this.curve.reRender()
+ }
+ }
+ })
+ }
+ initData() {
+
+ this.service.getNetworkFreightForwarder().subscribe(res => {
+ this.interManlist = res
+ this.enterpriseInfoId = res[0].value
+ })
+ }
+
+ changeData() {
+ if (this.mode === 'year') {
+ this.dateFormat = 'yyyy'
+ } else if (this.mode === 'month') {
+ this.dateFormat = 'yyyy-MM'
+ } else {
+ this.dateFormat = 'yyyy-MM-dd'
+ }
+ }
+ onChange(result: any) {
+ if (this.mode === 'year') {
+ this.time = [this.datePipe.transform(this.date, 'yyyy') + '-01-01 00:00:00']
+ } else if (this.mode === 'month') {
+ this.time = [this.datePipe.transform(this.date, 'yyyy-MM') + '-01 00:00:00']
+ } else if (this.mode === 'date') {
+ this.time = [this.datePipe.transform(this.date, 'yyyy-MM-dd') + ' 00:00:00']
+ } else {
+ this.time = [this.datePipe.transform(this.defineDate[0], 'yyyy-MM-dd') + ' 00:00:00', this.datePipe.transform(this.defineDate[1], 'yyyy-MM-dd') + ' 00:00:00']
+ }
+ this.st.reload({ ...this.reqParams });
+ }
+ disabledDate = (current: Date): boolean =>
+ // Can not select days before today and today
+ differenceInCalendarDays(current, this.today) > 0;
+ exportFun() {
+
+ }
+ changeCurve(){
+
+ }
+ changePie(){
+
+ }
+ changeDataNext() {
+ if(this.mode === 'year') {
+ this.dateFormat = 'yyyy'
+ } else if(this.mode === 'month') {
+ this.dateFormat = 'yyyy-MM'
+ }
+ }
+ onChangeNext(result: any) {
+ if(result === null) {
+ return
+ }
+ if(this.mode === 'year') {
+ this.timeNext = [this.datePipe.transform(this.dateNext, 'yyyy') + '-01-01 00:00:00']
+ } else if(this.mode === 'month') {
+ this.timeNext = [this.datePipe.transform(this.dateNext, 'yyyy-MM') + '-01 00:00:00']
+ }
+ this.initPillarData(true)
+ }
+}
diff --git a/src/app/routes/datatable/components/operationtable/pie/pie.component.html b/src/app/routes/datatable/components/operationtable/pie/pie.component.html
new file mode 100644
index 00000000..373a4b03
--- /dev/null
+++ b/src/app/routes/datatable/components/operationtable/pie/pie.component.html
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/app/routes/datatable/components/operationtable/pie/pie.component.less b/src/app/routes/datatable/components/operationtable/pie/pie.component.less
new file mode 100644
index 00000000..567be99f
--- /dev/null
+++ b/src/app/routes/datatable/components/operationtable/pie/pie.component.less
@@ -0,0 +1,5 @@
+.box{
+ width: 50%;
+ margin:0 auto;
+ overflow: hidden;
+}
\ No newline at end of file
diff --git a/src/app/routes/datatable/components/operationtable/pie/pie.component.ts b/src/app/routes/datatable/components/operationtable/pie/pie.component.ts
new file mode 100644
index 00000000..cc358bd7
--- /dev/null
+++ b/src/app/routes/datatable/components/operationtable/pie/pie.component.ts
@@ -0,0 +1,198 @@
+import { Component, ElementRef, NgZone, OnInit, ViewChild } from '@angular/core';
+import { G2PieComponent, G2PieData } from '@delon/chart/pie';
+import { format } from 'date-fns';
+import { Chart } from '@antv/g2';
+import { DataService } from '../../../services/data.service';
+
+@Component({
+ selector: 'app-opeationtable-pie',
+ templateUrl: './pie.component.html',
+ styleUrls: ['./pie.component.less']
+})
+export class OperationtablePieComponent implements OnInit {
+ @ViewChild('pie', { static: false }) pie!: G2PieComponent;
+ chartData: any = [];
+ el: any;
+ chart: any;
+ enterpriseInfoIdPie = ''
+ interManlist: any = []
+ innerView: any =[];
+ constructor(private service: DataService, private ngZone: NgZone) {
+ }
+
+ ngOnInit(): void {
+ this.initData()
+ this.initManData()
+ }
+ initData(){
+ this.service.request(this.service.$api_operationalReportWaybillStatusDistribution, {id: this.enterpriseInfoIdPie}).subscribe(res => {
+ if (res) {
+ this.chartData = res
+ // this.ngZone.runOutsideAngular(() => this.init(this.el));
+ setTimeout(() => {
+ this.chart?.data(this.chartData);
+ this.chart?.render();
+ }, 1000)
+ }
+ })
+ }
+ initManData() {
+ this.service.getNetworkFreightForwarder().subscribe(res => {
+ this.interManlist = res
+ this.enterpriseInfoIdPie = res[0].value
+ })
+ }
+ render(el: ElementRef): void {
+ this.el = el.nativeElement
+ setTimeout(() => {
+ this.ngZone.runOutsideAngular(() => this.init(this.el));
+ }, 500)
+ }
+ private init(el: HTMLElement): void {
+ this.chart = new Chart({
+ container: el,
+ autoFit: true,
+ height: 400,
+ });
+ // 新建一个 view 用来单独渲染Annotation
+ // const innerView = chart.createView();
+
+ this.innerView = this.chart.createView();
+ this.chart.coordinate('theta', {
+ radius: 0.6,
+ innerRadius: 0.7,
+ });
+
+ // this.chart.data(this.chartData);
+
+ // chart.scale('percent', {
+ // formatter: val => {
+ // val = val * 100 + '%';
+ // return val;
+ // },
+ // });
+
+ this.chart.tooltip(false);
+
+ // 声明需要进行自定义图例字段: 'item'
+ this.chart.legend('item', {
+ position: 'right', // 配置图例显示位置
+ custom: true, // 关键字段,告诉 G2,要使用自定义的图例
+ items: this.chartData.map((obj: any, index: any) => {
+ return {
+ name: obj.item, // 对应 itemName
+ value: obj.percent+ '% ' + obj.count,
+ count: obj.count, // 对应 itemValue
+ marker: {
+ symbol: 'square', // marker 的形状
+ style: {
+ r: 5, // marker 图形半径
+ fill: this.chart.getTheme().colors10[index], // marker 颜色,使用默认颜色,同图形对应
+ },
+ }, // marker 配置
+ };
+ }),
+ itemValue: {
+ style: {
+ fill: '#999',
+ }, // 配置 itemValue 样式
+ formatter: (val: any) => `${val}` // 格式化 itemValue 内容
+ },
+ });
+
+ const interval = this.chart
+ .interval()
+ .adjust('stack')
+ .position('percent')
+ .color('item')
+ .style({
+ fillOpacity: 1,
+ stroke: 'white',
+ lineWidth: 8,
+ })
+ .state({
+ active: {
+ style: (element: any) => {
+ const shape = element.shape;
+ return {
+ lineWidth: 1,
+ stroke: 'white',
+ strokeOpacity: shape.attr('fillOpacity'),
+ };
+ },
+ },
+ });
+
+ // 移除图例点击过滤交互
+ this.chart.removeInteraction('legend-filter');
+ this.chart.interaction('element-active');
+
+ this.chart.render(true);
+ // 默认选择
+ interval.elements[0].setState('selected', true);
+ const ele = interval.elements[0].getData();
+
+
+ // 监听 element 上状态的变化来动态更新 Annotation 信息
+ this.chart.on('element:statechange', (ev: any) => {
+ const { state, stateStatus, element } = ev.gEvent.originalEvent;
+
+ // 本示例只需要监听 active 的状态变化
+ if (state === 'active') {
+ const data = element.getData();
+ if (stateStatus) {
+ // 更新 Annotation
+ updateAnnotation(data);
+ } else {
+ // 隐藏 Annotation
+ clearAnnotation();
+ }
+ }
+ });
+
+ // 绘制 annotation
+ let lastItem: any;
+ const updateAnnotation = (data: any) => {
+ if (data.item !== lastItem) {
+ this.innerView.annotation().clear(true);
+ this.innerView
+ .annotation()
+ .text({
+ position: ['50%', '50%'],
+ content: data.item,
+ style: {
+ fontSize: 20,
+ fill: '#8c8c8c',
+ textAlign: 'center',
+ },
+ offsetY: -20,
+ })
+ .text({
+ position: ['50%', '50%'],
+ content: data.count,
+ style: {
+ fontSize: 28,
+ fill: '#8c8c8c',
+ textAlign: 'center',
+ },
+ offsetX: -10,
+ offsetY: 20,
+ })
+ this.innerView.render(true);
+
+
+ lastItem = data.item;
+ }
+ }
+
+ // 清空 annotation
+ function clearAnnotation(this: any) {
+ this.innerView?.annotation()?.clear(true);
+ this.innerView.render(true);
+ lastItem = null;
+ }
+
+ }
+}
+
+
diff --git a/src/app/routes/datatable/components/operationtable/pillar/pillar.component.html b/src/app/routes/datatable/components/operationtable/pillar/pillar.component.html
new file mode 100644
index 00000000..0640a4d4
--- /dev/null
+++ b/src/app/routes/datatable/components/operationtable/pillar/pillar.component.html
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/app/routes/datatable/components/operationtable/pillar/pillar.component.less b/src/app/routes/datatable/components/operationtable/pillar/pillar.component.less
new file mode 100644
index 00000000..e69de29b
diff --git a/src/app/routes/datatable/components/operationtable/pillar/pillar.component.ts b/src/app/routes/datatable/components/operationtable/pillar/pillar.component.ts
new file mode 100644
index 00000000..b78f500f
--- /dev/null
+++ b/src/app/routes/datatable/components/operationtable/pillar/pillar.component.ts
@@ -0,0 +1,74 @@
+import { Component, ElementRef, Input, NgZone, OnChanges, OnInit, SimpleChanges, ViewChild } from '@angular/core';
+import { Chart } from '@antv/g2';
+import { DataService } from 'src/app/routes/datatable/services/data.service';
+@Component({
+ selector: 'app-operation-pillar',
+ templateUrl: './pillar.component.html',
+ styleUrls: ['./pillar.component.less']
+})
+export class OperationPillarComponent implements OnInit, OnChanges {
+ el: any;
+ @Input() chartData: any;
+ chart: any;
+ constructor(private service: DataService, private ngZone: NgZone) {
+
+ }
+ ngOnChanges(changes: SimpleChanges): void {
+ if (this.chartData) {
+ // setTimeout(()=>{
+ // this.chart.render(true)
+ // }, 1000)
+
+ }
+ }
+
+ ngOnInit(): void {
+
+ }
+ reRender() {
+ setTimeout(() => {
+ this.chart.data(this.chartData);
+ this.chart.render();
+ }, 1000)
+ }
+ render(el: ElementRef): void {
+ this.el = el.nativeElement
+ setTimeout(() => {
+ this.ngZone.runOutsideAngular(() => this.init(this.el));
+ }, 500)
+ }
+
+ private init(el: HTMLElement): void {
+ this.chart = new Chart({
+ container: el,
+ autoFit: true,
+ height: 500,
+ });
+
+ this.chart.data(this.chartData);
+
+ this.chart.scale('number', {
+ nice: true,
+ });
+ this.chart.tooltip({
+ showMarkers: false,
+ shared: true,
+ });
+
+ this.chart
+ .interval()
+ .position('time*number')
+ .color('name')
+ .adjust([
+ {
+ type: 'dodge',
+ marginRatio: 0,
+ },
+ ]);
+
+ this.chart.interaction('active-region');
+
+ this.chart.render();
+ }
+
+}
\ No newline at end of file
diff --git a/src/app/routes/datatable/datatable-routing.module.ts b/src/app/routes/datatable/datatable-routing.module.ts
new file mode 100644
index 00000000..8298fdf5
--- /dev/null
+++ b/src/app/routes/datatable/datatable-routing.module.ts
@@ -0,0 +1,48 @@
+import { NgModule } from '@angular/core';
+import { RouterModule, Routes } from '@angular/router';
+import { DatatableCustomindexComponent } from './components/customtable/customindex/customindex.component';
+import { DatatableOwnerComponent } from './components/customtable/owner/owner.component';
+import { DatatableDriverComponent } from './components/customtable/driver/driver.component';
+import { DatatableOperationtableComponent } from './components/operationtable/operationtable.component';
+import { DatatableOrderReportingComponent } from './reporting/components/order-reporting/order-reporting.component';
+import { DatatableDataindexComponent } from './components/dataindex/dataindex.component';
+import { DatatableComplianceIndexComponent } from './components/compliance/index/index.component';
+import { DatatableFinancetableComponent } from './components/financetable/financetable.component';
+import { DatatableInvoicetableComponent } from './components/invoicetable/invoicetable.component';
+import { DatatableComplianceSalesmanComponent } from './components/compliance/salesman/salesman.component';
+import { DatatableComplianceCustomerComponent } from './components/compliance/customer/customer.component';
+import { DatatableFundReportingComponent } from './reporting/components/fund-reporting/fund-reporting.component';
+import { DatatableMancustomtableComponent } from './components/customtable/mancustomtable/mancustomtable.component';
+import { DatatablePartnertableComponent } from './components/customtable/partnertable/partnertable.component';
+import { DatatableBusiindexComponent } from './components/busitable/busiindex/busiindex.component';
+import { DatatableMantableComponent } from './components/busitable/mantable/mantable.component';
+import { DatatableReportingFundInfoComponent } from './reporting/components/fund-info/fund-info.component';
+import { DatatableDatascreenComponent } from './components/datascreen/datascreen.component';
+
+const routes: Routes = [
+ { path: 'dataindex', component: DatatableDataindexComponent },
+ { path: 'customtable/customindex', component: DatatableCustomindexComponent },
+ { path: 'customtable/owner', component: DatatableOwnerComponent },
+ { path: 'customtable/driver', component: DatatableDriverComponent },
+ { path: 'customtable/mancustomtable', component: DatatableMancustomtableComponent },
+ { path: 'customtable/partnertable', component: DatatablePartnertableComponent },
+ { path: 'operationtable', component: DatatableOperationtableComponent },
+ { path: 'reporting/order', component: DatatableOrderReportingComponent },
+ { path: 'compliancetabel/index', component: DatatableComplianceIndexComponent },
+ { path: 'compliancetabel/salesman', component: DatatableComplianceSalesmanComponent },
+ { path: 'compliancetabel/customer', component: DatatableComplianceCustomerComponent },
+ { path: 'financetable', component: DatatableFinancetableComponent },
+ { path: 'invoicetable', component: DatatableInvoicetableComponent },
+ { path: 'reporting/fund', component: DatatableFundReportingComponent },
+ { path: 'busitable/busiindex', component: DatatableBusiindexComponent },
+ { path: 'busitable/mantable', component: DatatableMantableComponent },
+ { path: 'reporting/fund', component: DatatableFundReportingComponent },
+ { path: 'fund-info', component: DatatableReportingFundInfoComponent },
+ { path: 'datascreen', component: DatatableDatascreenComponent }];
+
+
+@NgModule({
+ imports: [RouterModule.forChild(routes)],
+ exports: [RouterModule]
+})
+export class DatatableRoutingModule { }
diff --git a/src/app/routes/datatable/datatable.module.ts b/src/app/routes/datatable/datatable.module.ts
new file mode 100644
index 00000000..7a1fe2be
--- /dev/null
+++ b/src/app/routes/datatable/datatable.module.ts
@@ -0,0 +1,93 @@
+/*
+ * @Description :
+ * @Version : 1.0
+ * @Author : Shiming
+ * @Date : 2022-04-06 11:02:17
+ * @LastEditors : Shiming
+ * @LastEditTime : 2022-04-07 18:29:39
+ * @FilePath : \\tms-obc-web\\src\\app\\routes\\datatable\\datatable.module.ts
+ * Copyright (C) 2022 huzhenhong. All rights reserved.
+ */
+import { NgModule, Type } from '@angular/core';
+import { SharedModule, SHARED_G2_MODULES } from '@shared';
+import { DatatableRoutingModule } from './datatable-routing.module';
+import { DatatableCustomindexComponent } from './components/customtable/customindex/customindex.component';
+import { DatatableOwnerComponent } from './components/customtable/owner/owner.component';
+import { DatatableDriverComponent } from './components/customtable/driver/driver.component';
+import { DatatableOperationtableComponent } from './components/operationtable/operationtable.component';
+import { OperationtablePieComponent } from './components/operationtable/pie/pie.component';
+import { DatatableOrderReportingComponent } from './reporting/components/order-reporting/order-reporting.component';
+import { DatatableDataindexComponent } from './components/dataindex/dataindex.component';
+import { DatatableComplianceIndexComponent } from './components/compliance/index/index.component';
+import { DatatableFinancetableComponent } from './components/financetable/financetable.component';
+import { DatatableInvoicetableComponent } from './components/invoicetable/invoicetable.component';
+import { DatatableComplianceSalesmanComponent } from './components/compliance/salesman/salesman.component';
+import { DatatableComplianceCustomerComponent } from './components/compliance/customer/customer.component';
+import { DatatableReportingUploadSettingComponent } from './reporting/components/upload-setting/upload-setting.component';
+import { DatatableReportingVerifyResultComponent } from './reporting/components/verify-result/verify-result.component';
+import { DatatableFundReportingComponent } from './reporting/components/fund-reporting/fund-reporting.component';
+import { DatatableMancustomtableComponent } from './components/customtable/mancustomtable/mancustomtable.component';
+import { DatatablePartnertableComponent } from './components/customtable/partnertable/partnertable.component';
+import { DatatableBusiindexComponent } from './components/busitable/busiindex/busiindex.component';
+import { DatatableMantableComponent } from './components/busitable/mantable/mantable.component';
+import { BusitablePillarComponent } from './components/busitable/pillar/pillar.component';
+import { DatatableReportingFundInfoComponent } from './reporting/components/fund-info/fund-info.component';
+import { OperationPillarComponent } from './components/operationtable/pillar/pillar.component';
+import { OperationCurveComponent } from './components/operationtable/curve/curve.component';
+import { FinanceTableCurveComponent } from './components/financetable/curve/curve.component';
+import { DatatableDatascreenComponent } from './components/datascreen/datascreen.component';
+import { FinancetablePillarComponent } from './components/financetable/pillar/pillar.component';
+import { ComplianceCurveComponent } from './components/compliance/index/curve/curve.component';
+import { BusitableCurveComponent } from './components/busitable/busiindex/curve/curve.component';
+import { DatatableCustomindexCurveComponent } from './components/customtable/customindex/curve/curve.component';
+import { DatatableCustomindexMapComponent } from './components/datascreen/map/map.component';
+import { DatatableCustomindexCurveMinComponent } from './components/datascreen/curve/curve.component';
+import { DatatableReportingvViewTrackComponent } from './reporting/components/view-track/view-track.component';
+
+const COMPONENTS: Type[] = [
+ DatatableDataindexComponent,
+ DatatableCustomindexComponent,
+ DatatableOwnerComponent,
+ DatatableDriverComponent,
+ DatatableOperationtableComponent,
+ OperationtablePieComponent,
+ DatatableOrderReportingComponent,
+ DatatableComplianceIndexComponent,
+ DatatableFinancetableComponent,
+ DatatableInvoicetableComponent,
+ DatatableComplianceSalesmanComponent,
+ DatatableComplianceCustomerComponent,
+ DatatableReportingUploadSettingComponent,
+ DatatableReportingVerifyResultComponent,
+ DatatableFundReportingComponent,
+ DatatableMancustomtableComponent,
+ DatatablePartnertableComponent,
+ DatatableBusiindexComponent,
+ DatatableMantableComponent,
+ BusitablePillarComponent,
+ DatatableFundReportingComponent,
+ DatatableReportingFundInfoComponent,
+ OperationPillarComponent,
+ OperationCurveComponent,
+ DatatableReportingFundInfoComponent,
+ FinanceTableCurveComponent,
+ DatatableDatascreenComponent,
+ FinancetablePillarComponent,
+ ComplianceCurveComponent,
+ BusitableCurveComponent,
+ DatatableCustomindexCurveComponent,
+ DatatableCustomindexMapComponent,
+ DatatableCustomindexCurveMinComponent,
+ DatatableReportingvViewTrackComponent
+]
+
+
+@NgModule({
+ imports: [
+ SharedModule,
+ DatatableRoutingModule,
+ SHARED_G2_MODULES
+ ],
+ declarations: COMPONENTS,
+})
+export class DatatableModule { }
diff --git a/src/app/routes/datatable/reporting/components/fund-info/fund-info.component.html b/src/app/routes/datatable/reporting/components/fund-info/fund-info.component.html
new file mode 100644
index 00000000..b8bbd698
--- /dev/null
+++ b/src/app/routes/datatable/reporting/components/fund-info/fund-info.component.html
@@ -0,0 +1,14 @@
+
+
+
+
+ {{filterCheckStatus(item?.checkStatus)}}
+
+
+
+
+
diff --git a/src/app/routes/datatable/reporting/components/fund-info/fund-info.component.spec.ts b/src/app/routes/datatable/reporting/components/fund-info/fund-info.component.spec.ts
new file mode 100644
index 00000000..09d9ac30
--- /dev/null
+++ b/src/app/routes/datatable/reporting/components/fund-info/fund-info.component.spec.ts
@@ -0,0 +1,24 @@
+import { waitForAsync, ComponentFixture, TestBed } from '@angular/core/testing';
+import { DatatableReportingFundInfoComponent } from './fund-info.component';
+
+describe('DatatableReportingFundInfoComponent', () => {
+ let component: DatatableReportingFundInfoComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(waitForAsync(() => {
+ TestBed.configureTestingModule({
+ declarations: [DatatableReportingFundInfoComponent]
+ })
+ .compileComponents();
+ }));
+
+ beforeEach(() => {
+ fixture = TestBed.createComponent(DatatableReportingFundInfoComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/src/app/routes/datatable/reporting/components/fund-info/fund-info.component.ts b/src/app/routes/datatable/reporting/components/fund-info/fund-info.component.ts
new file mode 100644
index 00000000..2e120e63
--- /dev/null
+++ b/src/app/routes/datatable/reporting/components/fund-info/fund-info.component.ts
@@ -0,0 +1,115 @@
+import { Component, OnInit, ViewChild } from '@angular/core';
+import { Router } from '@angular/router';
+import { STColumn, STComponent, STRequestOptions } from '@delon/abc/st';
+import { SFSchema } from '@delon/form';
+import { ModalHelper, _HttpClient } from '@delon/theme';
+import { NzModalRef } from 'ng-zorro-antd/modal';
+import { ReportingService } from '../../services/reporting.service';
+
+@Component({
+ selector: 'app-datatable-fund-info',
+ templateUrl: './fund-info.component.html',
+})
+export class DatatableReportingFundInfoComponent implements OnInit {
+ url = `/user`;
+ searchSchema!: SFSchema;
+ @ViewChild('st') private readonly st!: STComponent;
+ columns: STColumn[] = [];
+ record: any = {}
+
+
+ get reqParams() {
+ return { capitalCode: this?.record?.serialNumberCode };
+ }
+
+ beforeReq(requestOptions: STRequestOptions) {
+ delete requestOptions?.body?.pageSize;
+ delete requestOptions?.body?.pageIndex;
+ return requestOptions;
+ }
+ constructor(public service: ReportingService, private modalRef: NzModalRef, public router: Router) {
+
+ }
+
+ ngOnInit(): void {
+ this.initST();
+ }
+
+ /**
+ * 初始化数据列表
+ */
+ initST() {
+ this.columns = [
+ { title: '序号', type: 'no', className: 'text-center', width: '10%', },
+ { title: '监管平台字段', index: 'thirdPartyFieldName', className: 'text-center', width: '15%', },
+ { title: '系统字段', index: 'checkFieldName', className: 'text-center', width: '15%', },
+ { title: '归属模块', index: 'orderStatus', className: 'text-center', width: '15%', },
+ {
+ title: '是否必填',
+ index: 'orderStatus',
+ className: 'text-center',
+ width: '10%',
+ type: 'enum',
+ enum: {
+ 0: '否',
+ 1: '是',
+ },
+ },
+ { title: '上传值', index: 'fieldValue', className: 'text-center', width: '15%', },
+ {
+ title: '本地校验',
+ render: 'checkStatus',
+ className: 'text-center',
+ // type: 'enum',
+ // enum: {
+ // '0': '校验中',
+ // '1': '通过',
+ // '2': '不通过'
+ // },
+ width: '10%',
+ },
+ { title: '错误内容', index: 'remark', className: 'text-center', width: '20%', },
+ ]
+ }
+
+
+ add(): void {
+ // this.modal
+ // .createStatic(FormEditComponent, { i: { id: 0 } })
+ // .subscribe(() => this.st.reload());
+ }
+
+ selectTab(e: any) {
+
+ }
+
+ update() {
+ if (this.record?.billType === '1') {
+ window.open(location.origin + `/#/order-management/vehicle-detailChange/${this.record?.id}`)
+
+ } else if (this.record.billType === '2') {
+ window.open(location.origin + `/#/order-management/bulk-detailChange/${this.record?.id}`);
+ }
+
+
+ }
+ close(): void {
+ this.modalRef.destroy();
+ }
+
+ filterCheckStatus(status: number) {
+ switch (status) {
+ case 0:
+ return '校验中';
+ case 1:
+ return '通过';
+ case 2:
+ return '不通过';
+ default:
+ return '';
+
+ }
+ }
+
+
+}
diff --git a/src/app/routes/datatable/reporting/components/fund-reporting/fund-reporting.component.html b/src/app/routes/datatable/reporting/components/fund-reporting/fund-reporting.component.html
new file mode 100644
index 00000000..e13fbf66
--- /dev/null
+++ b/src/app/routes/datatable/reporting/components/fund-reporting/fund-reporting.component.html
@@ -0,0 +1,65 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0">
+
+
+
+
+
+
+
+ {{item?.uploadStatusLabel}}
+
+
+ {{item?.verifyStatusLabel}}
+ {{item?.verifyStatusLabel}}
+
+
+ {{item?.orderCode}}
+
+
+ {{item?.wayBillCode}}
+
+
+ {{item?.tolalAmount | currency }}
+
+
+ {{item?.payAmount | currency }}
+
+
+
+
+
+
+ 已选择
+ {{ selectedRows.length }} 条数据
+
+
+
+
+
+
diff --git a/src/app/routes/datatable/reporting/components/fund-reporting/fund-reporting.component.less b/src/app/routes/datatable/reporting/components/fund-reporting/fund-reporting.component.less
new file mode 100644
index 00000000..6009fbbf
--- /dev/null
+++ b/src/app/routes/datatable/reporting/components/fund-reporting/fund-reporting.component.less
@@ -0,0 +1,5 @@
+:host {
+ .text-black {
+ color: #000;
+ }
+}
diff --git a/src/app/routes/datatable/reporting/components/fund-reporting/fund-reporting.component.spec.ts b/src/app/routes/datatable/reporting/components/fund-reporting/fund-reporting.component.spec.ts
new file mode 100644
index 00000000..fb500388
--- /dev/null
+++ b/src/app/routes/datatable/reporting/components/fund-reporting/fund-reporting.component.spec.ts
@@ -0,0 +1,24 @@
+import { waitForAsync, ComponentFixture, TestBed } from '@angular/core/testing';
+import { DatatableFundReportingComponent } from './fund-reporting.component';
+
+describe('DatatableFundReportingComponent', () => {
+ let component: DatatableFundReportingComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(waitForAsync(() => {
+ TestBed.configureTestingModule({
+ declarations: [DatatableFundReportingComponent]
+ })
+ .compileComponents();
+ }));
+
+ beforeEach(() => {
+ fixture = TestBed.createComponent(DatatableFundReportingComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/src/app/routes/datatable/reporting/components/fund-reporting/fund-reporting.component.ts b/src/app/routes/datatable/reporting/components/fund-reporting/fund-reporting.component.ts
new file mode 100644
index 00000000..fa6f9e4d
--- /dev/null
+++ b/src/app/routes/datatable/reporting/components/fund-reporting/fund-reporting.component.ts
@@ -0,0 +1,487 @@
+import { Component, OnInit, ViewChild } from '@angular/core';
+import { ActivatedRoute, Router } from '@angular/router';
+import { STChange, STColumn, STComponent, STData } from '@delon/abc/st';
+import { SFComponent, SFDateWidgetSchema, SFSchema, SFUISchema } from '@delon/form';
+import { ShipperBaseService } from '@shared';
+import { NzModalService } from 'ng-zorro-antd/modal';
+import { ReportingService } from '../../services/reporting.service';
+import { DatatableReportingFundInfoComponent } from '../fund-info/fund-info.component';
+
+@Component({
+ selector: 'app-datatable-fund-reporting',
+ templateUrl: './fund-reporting.component.html',
+ styleUrls: ['./fund-reporting.component.less']
+})
+export class DatatableFundReportingComponent implements OnInit {
+ _$expand = false;
+ ui!: SFUISchema;
+ schema!: SFSchema;
+ columns!: STColumn[];
+ @ViewChild('st', { static: false }) st!: STComponent;
+ @ViewChild('sf', { static: false }) sf!: SFComponent;
+ tabType!: string;
+ tabs: any[] = [
+ { name: '待上传', value: '1' },
+ { name: '上传中', value: '2' },
+ { name: '已上传', value: '3' },
+ { name: '异常', value: '4' },
+ { name: '全部', value: '' }
+ ];
+ selectedIndex = '1'; //选择的项目
+ serviceTel = '';
+ selectedRows: any[] = [];
+ isLoading: boolean = false;
+ constructor(
+ public service: ReportingService,
+ private router: Router,
+ private ar: ActivatedRoute,
+ private modal: NzModalService,
+ public shipperSrv: ShipperBaseService
+ ) {
+ }
+
+ /**
+ * 查询字段个数
+ */
+ get queryFieldCount(): number {
+ return Object.keys(this.schema?.properties || {}).length;
+ }
+
+ /**
+ * 查询参数
+ */
+ get reqParams() {
+ const params = Object.assign({}, this.sf?.value || {}, {
+ uploadStatus: this.selectedIndex
+ });
+ delete params._$expand;
+ return { ...params };
+ }
+
+ /**
+ * 选中行
+ */
+ // get selectedRows() {
+ // return this.st?.list.filter((item: any) => item.checked) || [];
+ // }
+
+ /**
+ * 伸缩查询条件
+ */
+ expandToggle() {
+ this._$expand = !this._$expand;
+ this.sf?.setValue('/_$expand', this._$expand);
+ }
+
+ /**
+ * 重置表单
+ */
+ resetSF() {
+ this.sf.reset();
+ this._$expand = false;
+ this.isLoading = true
+ }
+ /**
+ * 程序初始化入口
+ */
+ ngOnInit() {
+ this.initSF();
+ this.initST();
+ }
+
+ /**
+ * 初始化查询表单
+ */
+ initSF() {
+ this.schema = {
+ properties: {
+ _$expand: { type: 'boolean', ui: { hidden: true } },
+ orderCode: { title: '订单号', type: 'string', ui: { placeholder: '请输入' } },
+ wayBillCode: {
+ type: 'string',
+ title: '运单号',
+ ui: {
+ placeholder: '请输入',
+ },
+ },
+ serialNumberCode: {
+ type: 'string',
+ title: '流水单号',
+ ui: {
+ placeholder: '请输入',
+ },
+ },
+ carrier: {
+ title: '承运司机',
+ type: 'string',
+ ui: {
+ placeholder: '请输入司机姓名', visibleIf: {
+ _$expand: (value: boolean) => value,
+ },
+ }
+ },
+ carNumber: {
+ title: '车牌号',
+ type: 'string',
+ maxLength: 9,
+ ui: {
+ placeholder: '请输入',
+ visibleIf: {
+ _$expand: (value: boolean) => value,
+ },
+ }
+ },
+ payee: {
+ title: '车队长',
+ type: 'string',
+ maxLength: 9,
+ ui: {
+ placeholder: '请输入',
+ visibleIf: {
+ _$expand: (value: boolean) => value,
+ },
+ }
+ },
+ // uploadStatus: {
+ // title: '上传状态',
+ // type: 'string',
+ // enum: [
+ // { label: '待上传', value: 0 },
+ // { label: '已上传', value: 1 },
+ // { label: '异常', value: 2 }
+ // ],
+ // ui: {
+ // placeholder: '请选择',
+ // widget: 'select',
+ // allowClear: true,
+ // visibleIf: {
+ // _$expand: (value: boolean) => value,
+ // },
+ // }
+ // },
+ verifyStatus: {
+ title: '本地校验',
+ type: 'string',
+ enum: [
+ { label: '检测中', value: '0' },
+ { label: '通过', value: '1' },
+ { label: '不通过', value: '2' }
+ ],
+ ui: {
+ placeholder: '请选择',
+ allowClear: true,
+ widget: 'select',
+ visibleIf: {
+ _$expand: (value: boolean) => value,
+ },
+ }
+ },
+ ltdId: {
+ title: '网络货运人',
+ type: 'string',
+ ui: {
+ placeholder: '请选择',
+ widget: 'select',
+ asyncData: () => this.shipperSrv.getNetworkFreightForwarder({}, false),
+ visibleIf: {
+ _$expand: (value: boolean) => value,
+ },
+ allowClear: true
+ }
+ },
+ transactionTime: {
+ title: '交易时间',
+ type: 'string',
+ ui: {
+ widget: 'sl-from-to',
+ type: 'date',
+ format: 'yyyy-MM-dd',
+ visibleIf: {
+ _$expand: (value: boolean) => value,
+ },
+ } as SFDateWidgetSchema,
+ },
+ uploadTime: {
+ title: '上传时间',
+ type: 'string',
+ ui: {
+ widget: 'sl-from-to',
+ type: 'date',
+ format: 'yyyy-MM-dd',
+ visibleIf: {
+ _$expand: (value: boolean) => value,
+ },
+ } as SFDateWidgetSchema,
+ },
+ },
+ };
+ this.ui = {
+ '*': { spanLabelFixed: 120, grid: { span: 8, gutter: 4 }, enter: () => this.search() },
+ $time: { grid: { span: 24 } },
+ };
+ }
+
+ /**
+ * 初始化数据列表
+ */
+ initST() {
+ this.columns = [
+ { title: '', type: 'checkbox', className: 'text-center', width: '60px', },
+ { title: '上传状态', render: 'uploadStatus', className: 'text-center', width: '120px', },
+ { title: '本地校验', render: 'verifyStatus', className: 'text-center', width: '120px', },
+ { title: '流水单号', index: 'serialNumberCode', className: 'text-center', width: '190px', },
+ {
+ title: '订单号',
+ render: 'orderCode',
+ className: 'text-center',
+ width: '180px',
+ },
+ { title: '运单号', render: 'wayBillCode', className: 'text-center', width: '180px', },
+ {
+ title: '网络货运人',
+ index: 'ltdName',
+ className: 'text-center',
+ width: '180px',
+ },
+ { title: '实际承运人名称', index: 'carrier', className: 'text-center', width: '150px' },
+ { title: '实际承运人证件号码', index: 'cardId', className: 'text-center', width: '200px' },
+ { title: '车牌号', index: 'carNumber', className: 'text-center', width: '180px' },
+ { title: '车牌颜色', index: 'carColorLabel', className: 'text-center', width: '180px' },
+ { title: '总金额', render: 'tolalAmount', className: 'text-center', width: '120px' },
+
+ { title: '付款方式', index: 'payType', className: 'text-center', width: '150px' },
+ { title: '车队长', index: 'payee', className: 'text-center', width: '150px' },
+ { title: '收款账户', index: 'collectionAccount', className: 'text-center', width: '180px' },
+
+ { title: '收款银行', index: 'bankTypeLabel', className: 'text-center', width: '150px' },
+
+ { title: '银行流水号', index: 'bankSerialNumber', className: 'text-center', width: '180px' },
+ { title: '实际支付金额', render: 'payAmount', className: 'text-center', width: '150px' },
+ { title: '交易时间', index: 'transactionTime', className: 'text-center', width: '180px' },
+ { title: '上传次数', index: 'uploadFrequency', className: 'text-center', width: '120px' },
+ { title: '上传时间', index: 'uploadTime', className: 'text-center', width: '180px' },
+ ];
+ }
+
+
+
+ /**
+ *撤销
+ * @param record 记录实例
+ */
+ recall() {
+ if (this.selectedRows.length === 0) {
+ this.openWainingModal('请选择需要撤回的数据');
+ return;
+ }
+ this.modal.confirm({
+ nzTitle: '撤回提示',
+ nzContent: ' 撤回后可以重新上传,重新上传会覆盖已上传数据,确定要撤回?',
+ nzOkText: '确定',
+ nzCancelText: '取消',
+ nzOnOk: () => {
+ const ids = this.selectedRows.map(i => i?.id);
+ this.service.request(this.service.$api_fund_reporting_recall, ids).subscribe((res: any) => {
+ if (res) {
+ this.service.msgSrv.success('撤销成功');
+
+ this.search();
+ }
+ })
+ }
+ });
+
+
+ }
+
+ selectChange(item: any) {
+ this.selectedIndex = item?.value || '';
+
+ setTimeout(() => {
+ this.selectedRows = [];
+ this.st.load(1);
+ })
+ }
+
+ /**
+ * 查看当行数据
+ */
+ view(record: STData) {
+ // this.router.navigate(['../view', record.uuid], { relativeTo: this.ar });
+ this.router.navigate(['../detail'], {
+ queryParams: {
+ id: record.id,
+ },
+ relativeTo: this.ar
+ });
+ }
+
+ // appeal(item: any) {
+ // const modalRef = this.modal.create({
+ // nzTitle: '申诉',
+ // nzWidth: '40%',
+ // nzContent: CtcAppealComponent,
+ // nzComponentParams: {
+ // i: item,
+ // status: 'add'
+ // },
+ // nzFooter: null
+ // });
+ // modalRef.afterClose.subscribe(res => {
+ // if (res) {
+ // this.search({ representationsStatus: '' });
+ // }
+ // })
+ // }
+
+ /**
+ * 上传
+ */
+ upload() {
+ if (this.selectedRows.length === 0) {
+ this.openWainingModal('请选择需要上传的数据');
+ return;
+ }
+ const ids = this.selectedRows.map(i => i?.id);
+ this.service.request(this.service.$api_fund_reporting_upload, ids).subscribe((res: any) => {
+ if (res) {
+ this.service.msgSrv.success('上传成功');
+ this.search();
+ }
+ })
+ }
+
+
+
+
+ /**
+ * 查看校验结果
+ */
+ viewResult(record: any) {
+ const modalRef = this.modal.create({
+ nzTitle: '校验结果',
+ nzWidth: 1200,
+
+ nzContent: DatatableReportingFundInfoComponent,
+ nzComponentParams: {
+ record
+ },
+ nzFooter: null
+ });
+ modalRef.afterClose.subscribe(res => {
+ })
+ }
+
+
+
+ /**
+ * 查看监管审核结果
+ */
+ viewAuditResult(record: any) {
+ if (record?.verifyStatus !== '2') {
+ return;
+ }
+ this.openWainingModal('监管审核结果', record?.uploadResult)
+ }
+
+ /**
+ * 更新数据
+ */
+ updateData() {
+ if (this.selectedRows.length === 0) {
+ this.openWainingModal('请选择需要更新的数据');
+ return;
+ }
+ const ids = this.selectedRows.map(i => i?.id);
+ this.service.request(this.service.$api_update_fund_data, ids).subscribe(res => {
+ if (res) {
+ this.service.msgSrv.success('更新成功');
+ this.selectedRows = [];
+ this.st.reload();
+
+ }
+ })
+ }
+
+
+ search() {
+ this.selectedRows = [];
+ this.st.load(1);
+ }
+
+ /**
+ * 异步导出
+ */
+ export() {
+ this.service.exportStart({ ...this.sf.value, pageSize: -1 }, this.service.$api_export_fund_reporting);
+ }
+
+ openWainingModal(content: string, title = '提示') {
+ this.modal.warning({
+ nzMask: false,
+ nzTitle: title,
+ nzContent: content,
+ })
+ }
+
+ changeSt(e: STChange): void {
+
+ if (e.type === 'checkbox') {
+ const checkRows = (e.checkbox as STData[]) || [];
+ //判断当前页是否有选中的行
+ if (checkRows.length === 0) {
+ // 当前页没有存在已勾选的行,移除之前所记录的当前页的行
+ const stList = this.st.list;
+ stList.forEach(item => {
+ this.selectedRows = this.selectedRows.filter((e: any) => e.id !== item.id);
+ })
+ } else {
+ //添加新增的行
+ checkRows.forEach((item: any) => {
+ const newSelectedList = this.selectedRows.filter((r: any) => r.id === item.id);
+ if (newSelectedList.length === 0) {
+ this.selectedRows.push(item);
+
+ }
+ })
+ // 移除取消选中的行
+ const stList = this.st.list;
+ stList.forEach(item => {
+ if (!item.checked) {
+ const index = this.selectedRows.findIndex(_item => item.id === _item.id);
+ if (index !== -1) this.selectedRows.splice(index, 1);
+ }
+ })
+ }
+ } else if (e.type === 'loaded') {
+ // 页面加载时勾选
+ (e?.loaded || []).forEach((r: any) => {
+ this.selectedRows.forEach((x) => {
+ if (x.id === r.id) {
+ r.checked = true;
+ }
+ });
+ });
+ }
+ }
+
+ routeToOrder(item: any) {
+ if (item.orderType === '1') {
+ window.open(location.origin + `/#/order-management/vehicle/vehicle-detail/${item.orderId}`);
+ } else {
+ window.open(location.origin + `/#/order-management/bulk/bulk-detail/${item.orderId}`);
+ }
+ }
+
+ routeTowaybill(item: any) {
+ if (item.orderType === '1') {
+ window.open(location.origin + `/#/waybill-management/vehicle/vehicle-detail/${item.wayBillId}`);
+
+ } else {
+ window.open(location.origin + `/#/waybill-management/bulk/bulk-detail/${item.wayBillId}`);
+
+ }
+ }
+
+
+}
diff --git a/src/app/routes/datatable/reporting/components/order-reporting/order-reporting.component.html b/src/app/routes/datatable/reporting/components/order-reporting/order-reporting.component.html
new file mode 100644
index 00000000..ef60a6e7
--- /dev/null
+++ b/src/app/routes/datatable/reporting/components/order-reporting/order-reporting.component.html
@@ -0,0 +1,90 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0">
+
+
+
+
+
+
+
+ {{filterStatus(item?.billPutStatus)}}
+ {{filterStatus(item?.billPutStatus)}}
+
+
+ {{filterStatus(item?.driverPutStatus)}}
+ {{filterStatus(item?.driverPutStatus)}}
+
+
+ {{filterStatus(item?.carPutStatus)}}
+ {{filterStatus(item?.carPutStatus)}}
+
+
+
+ {{filterCheckStatus(item?.checkStatus)}}
+ {{filterCheckStatus(item?.checkStatus)}}
+
+
+
+ {{item?.billCode}}
+
+
+ {{item?.wayBillCode}}
+
+
+
+ {{item?.freightAmount | currency }}
+
+
+
+ {{_item?.goodsTypeName}}/{{_item?.goodsName}}/{{_item?.weight}}吨/{{_item?.volume}}m³
+
+
+
+
+ 查看轨迹
+
+
+ 查看轨迹
+
+
+
+
+
+
+ 已选择
+ {{ selectedRows.length }} 条数据
+
+
+
+
+
+
+
diff --git a/src/app/routes/datatable/reporting/components/order-reporting/order-reporting.component.less b/src/app/routes/datatable/reporting/components/order-reporting/order-reporting.component.less
new file mode 100644
index 00000000..6009fbbf
--- /dev/null
+++ b/src/app/routes/datatable/reporting/components/order-reporting/order-reporting.component.less
@@ -0,0 +1,5 @@
+:host {
+ .text-black {
+ color: #000;
+ }
+}
diff --git a/src/app/routes/datatable/reporting/components/order-reporting/order-reporting.component.spec.ts b/src/app/routes/datatable/reporting/components/order-reporting/order-reporting.component.spec.ts
new file mode 100644
index 00000000..2c07610f
--- /dev/null
+++ b/src/app/routes/datatable/reporting/components/order-reporting/order-reporting.component.spec.ts
@@ -0,0 +1,24 @@
+import { waitForAsync, ComponentFixture, TestBed } from '@angular/core/testing';
+import { DatatableOrderReportingComponent } from './order-reporting.component';
+
+describe('DatatableOrderReportingComponent', () => {
+ let component: DatatableOrderReportingComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(waitForAsync(() => {
+ TestBed.configureTestingModule({
+ declarations: [ DatatableOrderReportingComponent ]
+ })
+ .compileComponents();
+ }));
+
+ beforeEach(() => {
+ fixture = TestBed.createComponent(DatatableOrderReportingComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/src/app/routes/datatable/reporting/components/order-reporting/order-reporting.component.ts b/src/app/routes/datatable/reporting/components/order-reporting/order-reporting.component.ts
new file mode 100644
index 00000000..9e87d018
--- /dev/null
+++ b/src/app/routes/datatable/reporting/components/order-reporting/order-reporting.component.ts
@@ -0,0 +1,617 @@
+import { Component, OnInit, ViewChild } from '@angular/core';
+import { ActivatedRoute, Router } from '@angular/router';
+import { STChange, STColumn, STComponent, STData } from '@delon/abc/st';
+import { SFComponent, SFDateWidgetSchema, SFSchema, SFUISchema } from '@delon/form';
+import { ShipperBaseService } from '@shared';
+import { NzModalService } from 'ng-zorro-antd/modal';
+import { ReportingService } from '../../services/reporting.service';
+import { DatatableReportingUploadSettingComponent } from '../upload-setting/upload-setting.component';
+import { DatatableReportingVerifyResultComponent } from '../verify-result/verify-result.component';
+import { DatatableReportingvViewTrackComponent } from '../view-track/view-track.component';
+
+@Component({
+ selector: 'app-datatable-order-reporting',
+ templateUrl: './order-reporting.component.html',
+ styleUrls: ['./order-reporting.component.less']
+})
+export class DatatableOrderReportingComponent implements OnInit {
+ _$expand = false;
+ ui!: SFUISchema;
+ schema!: SFSchema;
+ columns!: STColumn[];
+ @ViewChild('st', { static: false }) st!: STComponent;
+ @ViewChild('sf', { static: false }) sf!: SFComponent;
+ tabType!: string;
+ tabs: any[] = [
+ { name: '待上传', value: '0' },
+ { name: '上传中', value: '3' },
+ { name: '已上传', value: '1' },
+ { name: '异常', value: '2' },
+ { name: '全部', value: '' }
+ ];
+ selectedIndex = '0';
+ isLoading: boolean = false;
+ selectedRows: any[] = [];
+ constructor(
+ public service: ReportingService,
+ private router: Router,
+ private ar: ActivatedRoute,
+ private modal: NzModalService,
+ public shipperSrv: ShipperBaseService
+ ) {
+ }
+
+ /**
+ * 查询字段个数
+ */
+ get queryFieldCount(): number {
+ return Object.keys(this.schema?.properties || {}).length;
+ }
+
+ /**
+ * 查询参数
+ */
+ get reqParams() {
+ const params = Object.assign({}, this.sf?.value || {}, {
+ billPutStatus: this.selectedIndex,
+ });
+ delete params._$expand;
+ return { ...params };
+ }
+
+ /**
+ * 选中行
+ */
+ // get selectedRows() {
+ // return this.st?.list.filter((item: any) => item.checked) || [];
+ // }
+
+ /**
+ * 伸缩查询条件
+ */
+ expandToggle() {
+ this._$expand = !this._$expand;
+ this.sf?.setValue('/_$expand', this._$expand);
+ }
+
+ /**
+ * 重置表单
+ */
+ resetSF() {
+ this.sf.reset();
+ this._$expand = false;
+ this.isLoading = true
+ }
+ /**
+ * 程序初始化入口
+ */
+ ngOnInit() {
+ this.initSF();
+ this.initST();
+ }
+
+ /**
+ * 初始化查询表单
+ */
+ initSF() {
+ this.schema = {
+ properties: {
+ _$expand: { type: 'boolean', ui: { hidden: true } },
+ billCode: { title: '订单号', type: 'string', ui: { placeholder: '请输入' } },
+ wayBillCode: {
+ type: 'string',
+ title: '运单号',
+ ui: {
+ placeholder: '请输入',
+ },
+ },
+ networkTransporter: {
+ title: '网络货运人',
+ type: 'string',
+ ui: {
+ placeholder: '请选择',
+ widget: 'select',
+ asyncData: () => this.shipperSrv.getNetworkFreightForwarder({}, false),
+ allowClear: true
+ }
+ },
+ shipperName: {
+ title: '货主',
+ type: 'string',
+ ui: {
+ placeholder: '请输入',
+ visibleIf: {
+ _$expand: (value: boolean) => value,
+ },
+ }
+ },
+ driverName: {
+ title: '承运司机',
+ type: 'string',
+ ui: {
+ placeholder: '请输入司机姓名/手机号', visibleIf: {
+ _$expand: (value: boolean) => value,
+ },
+ }
+ },
+ carNo: {
+ title: '车牌号',
+ type: 'string',
+ maxLength: 9,
+ ui: {
+ placeholder: '请输入',
+ visibleIf: {
+ _$expand: (value: boolean) => value,
+ },
+ }
+ },
+ // putStatus: {
+ // title: '上传状态',
+ // type: 'string',
+ // default: 0,
+ // enum: [
+ // { label: '待上传', value: 0 },
+ // { label: '已上传', value: 1 },
+ // { label: '异常', value: 2 }
+ // ],
+
+ // ui: {
+ // placeholder: '请选择',
+ // widget: 'select',
+ // allowClear: true,
+ // visibleIf: {
+ // _$expand: (value: boolean) => value,
+ // },
+ // }
+ // },
+ checkStatus: {
+ title: '本地校验',
+ type: 'string',
+ enum: [
+ { label: '检测中', value: 0 },
+ { label: '通过', value: 1 },
+ { label: '不通过', value: 2 }
+ ],
+ ui: {
+ placeholder: '请选择',
+ widget: 'select',
+ allowClear: true,
+ visibleIf: {
+ _$expand: (value: boolean) => value,
+ },
+ }
+ },
+ recentlyPutTime: {
+ title: '上传时间',
+ type: 'string',
+ ui: {
+ widget: 'sl-from-to',
+ type: 'date',
+ format: 'yyyy-MM-dd',
+ visibleIf: {
+ _$expand: (value: boolean) => value,
+ },
+ } as SFDateWidgetSchema,
+ },
+ orderReceivingTime: {
+ title: '运单生成时间',
+ type: 'string',
+ ui: {
+ widget: 'sl-from-to',
+ type: 'date',
+ format: 'yyyy-MM-dd',
+ visibleIf: {
+ _$expand: (value: boolean) => value,
+ },
+ } as SFDateWidgetSchema,
+ },
+ dispatchedDate: {
+ title: '发货时间',
+ type: 'string',
+ ui: {
+ widget: 'sl-from-to',
+ type: 'date',
+ format: 'yyyy-MM-dd',
+ visibleIf: {
+ _$expand: (value: boolean) => value,
+ },
+ } as SFDateWidgetSchema,
+ },
+ receivingDate: {
+ title: '收货时间',
+ type: 'string',
+ ui: {
+ widget: 'sl-from-to',
+ type: 'date',
+ format: 'yyyy-MM-dd',
+ visibleIf: {
+ _$expand: (value: boolean) => value,
+ },
+ } as SFDateWidgetSchema,
+ },
+
+ trajectoryDataAppStatus: {
+ title: '车辆轨迹',
+ type: 'string',
+ enum: [
+ { label: '全部', value: '' },
+ { label: '有', value: '1' },
+ { label: '无', value: '0' }
+ ],
+ ui: {
+ placeholder: '请选择',
+ widget: 'select',
+ visibleIf: {
+ _$expand: (value: boolean) => value,
+ },
+ }
+ },
+ trajectoryDataStatus: {
+ title: '司机轨迹',
+ type: 'string',
+ enum: [
+ { label: '全部', value: '' },
+ { label: '有', value: '1' },
+ { label: '无', value: '0' }
+ ],
+ ui: {
+ placeholder: '请选择',
+ widget: 'select',
+ visibleIf: {
+ _$expand: (value: boolean) => value,
+ },
+ }
+ },
+ },
+ };
+ this.ui = {
+ '*': {
+ spanLabelFixed: 120,
+ grid: {
+ lg: 12,
+ xl: 8
+ }, enter: () => this.search()
+ },
+ };
+ }
+
+ /**
+ * 初始化数据列表
+ */
+ initST() {
+ this.columns = [
+ { title: '', type: 'checkbox', className: 'text-center', width: '60px', },
+ { title: '订单状态', index: 'billPutStatusLabel', className: 'text-center', width: '120px', },
+ { title: '司机状态', index: 'driverPutStatusLabel', className: 'text-center', width: '120px', },
+ { title: '车辆状态', index: 'carPutStatusLabel', className: 'text-center', width: '120px', },
+ { title: '本地校验', render: 'checkStatus', className: 'text-center', width: '120px', },
+ {
+ title: '订单号',
+ render: 'billCode',
+ className: 'text-center',
+ width: '180px',
+ },
+ { title: '运单号', render: 'wayBillCode', className: 'text-center', width: '180px', },
+
+ {
+ title: '网络货运人',
+ index: 'enterpriseInfoName',
+ className: 'text-center',
+ width: '180px',
+ },
+ { title: '统一社会信用代码', index: 'unifiedSocialCreditCode', className: 'text-center', width: '200px' },
+ { title: '运单生成时间', index: 'wayBillCreateTime', className: 'text-center', width: '180px' },
+ { title: '发货时间', index: 'dispatchedDate', className: 'text-center', width: '180px' },
+ { title: '收货时间', index: 'receivingDate', className: 'text-center', width: '180px' },
+ { title: '托运人名称', index: 'shipperName', className: 'text-center', width: '250px' },
+ { title: '托运人统一社会信用代码', index: 'shipperCreditCode', className: 'text-center', width: '200px' },
+ { title: '装货地址', index: 'loadingAddress', className: 'text-center', width: '200px' },
+ { title: '收货方名称', index: 'receivingName', className: 'text-center', width: '150px' },
+ { title: '收货地址', index: 'consigneeAddress', className: 'text-center', width: '150px' },
+ { title: '运费金额', render: 'freightAmount', className: 'text-center', width: '130px' },
+ { title: '车牌号', index: 'carNo', className: 'text-center', width: '150px' },
+ {
+ title: '车牌颜色',
+ index: 'carNoColor',
+ className: 'text-center',
+ width: '250px',
+ type: 'enum',
+ enum: {
+ "4": "绿色",
+ "3": "黄绿色",
+ "2": "黄色",
+ "1": "蓝色"
+ }
+
+ },
+ { title: '司机姓名', index: 'driverName', className: 'text-center', width: '150px' },
+ { title: '司机手机号码', index: 'driverPhone', className: 'text-center', width: '200px' },
+ { title: '司机身份证号', index: 'driverIdentityNo', className: 'text-center', width: '150px' },
+ { title: '货物信息', index: 'goodsName', className: 'text-center', width: '180px' },
+ { title: '实际承运人名称', index: 'carrierName', className: 'text-center', width: '150px' },
+ { title: '实际承运人证件号码', index: 'carrierIdentityNo', className: 'text-center', width: '200px' },
+
+ { title: '实际承运人道路运输许可证号', index: 'roadTransportNo', className: 'text-center', width: '150px' },
+
+ { title: '车辆轨迹', render: 'car', className: 'text-center', width: '250px' },
+ { title: '司机轨迹', render: 'driver', className: 'text-center', width: '150px' },
+ { title: '上传次数', index: 'putNumber', className: 'text-center', width: '150px' },
+ { title: '上传时间', index: 'recentlyPutTime', className: 'text-center', width: '180px' },
+ ];
+ }
+
+
+
+ /**
+ *撤销
+ * @param record 记录实例
+ */
+ recall() {
+ if (this.selectedRows.length === 0) {
+ this.openWainingModal('请选择需要撤回的数据');
+ return;
+ }
+ this.modal.confirm({
+ nzTitle: '撤回提示',
+ nzContent: '撤回后可以重新上传,重新上传会覆盖已上传数据,确定要撤回?',
+ nzOkText: '确定',
+ nzCancelText: '取消',
+ nzOnOk: () => {
+ const ids = this.selectedRows.map(i => i?.id);
+ this.service.request(this.service.$api_recall_order_reporting, ids).subscribe((res: any) => {
+ if (res) {
+ this.service.msgSrv.success('撤销成功');
+ this.search();
+ }
+ })
+ }
+ });
+
+ }
+
+ changeSt(e: STChange): void {
+
+ if (e.type === 'checkbox') {
+ const checkRows = (e.checkbox as STData[]) || [];
+ //判断当前页是否有选中的行
+ if (checkRows.length === 0) {
+ // 当前页没有存在已勾选的行,移除之前所记录的当前页的行
+ const stList = this.st.list;
+ stList.forEach(item => {
+ this.selectedRows = this.selectedRows.filter((e: any) => e.id !== item.id);
+ })
+ } else {
+ //添加新增的行
+ checkRows.forEach((item: any) => {
+ const newSelectedList = this.selectedRows.filter((r: any) => r.id === item.id);
+ if (newSelectedList.length === 0) {
+ this.selectedRows.push(item);
+
+ }
+ })
+ // 移除取消选中的行
+ const stList = this.st.list;
+ stList.forEach(item => {
+ if (!item.checked) {
+ const index = this.selectedRows.findIndex(_item => item.id === _item.id);
+ if (index !== -1) this.selectedRows.splice(index, 1);
+ }
+ })
+ }
+ } else if (e.type === 'loaded') {
+ // 页面加载时勾选
+ (e?.loaded || []).forEach((r: any) => {
+ this.selectedRows.forEach((x) => {
+ if (x.id === r.id) {
+ r.checked = true;
+ }
+ });
+ });
+ }
+ }
+
+ selectChange(item: any) {
+ this.selectedIndex = item?.value || '';
+ setTimeout(() => {
+ this.selectedRows = [];
+ this.st.load(1);
+ })
+ }
+
+ /**
+ * 查看当行数据
+ */
+ view(record: STData) {
+ // this.router.navigate(['../view', record.uuid], { relativeTo: this.ar });
+ this.router.navigate(['../detail'], {
+ queryParams: {
+ id: record.id,
+ },
+ relativeTo: this.ar
+ });
+ }
+
+ // appeal(item: any) {
+ // const modalRef = this.modal.create({
+ // nzTitle: '申诉',
+ // nzWidth: '40%',
+ // nzContent: CtcAppealComponent,
+ // nzComponentParams: {
+ // i: item,
+ // status: 'add'
+ // },
+ // nzFooter: null
+ // });
+ // modalRef.afterClose.subscribe(res => {
+ // if (res) {
+ // this.search({ representationsStatus: '' });
+ // }
+ // })
+ // }
+
+ /**
+ * 上传
+ */
+ upload() {
+ if (this.selectedRows.length === 0) {
+ this.openWainingModal('请选择需要上传的数据');
+ return;
+ }
+ const ids = this.selectedRows.map(i => i?.id);
+ this.service.request(this.service.$api_upload_order_reporting, ids).subscribe((res: any) => {
+ if (res) {
+ this.service.msgSrv.success('上传成功');
+ this.search();
+ }
+ })
+ }
+
+
+ /**
+ *
+ * @param params 上传设置
+ */
+ uploadSetting() {
+ const modalRef = this.modal.create({
+ nzTitle: '上传设置',
+ nzWidth: 600,
+ nzContent: DatatableReportingUploadSettingComponent,
+ nzComponentParams: {},
+ nzFooter: null
+ });
+ modalRef.afterClose.subscribe(res => {
+ })
+ }
+
+ /**
+ * 查看校验结果
+ */
+ viewResult(item: any) {
+ const modalRef = this.modal.create({
+ nzTitle: '校验结果',
+ nzWidth: 1200,
+ nzContent: DatatableReportingVerifyResultComponent,
+ nzComponentParams: {
+ record: item
+ },
+ nzFooter: null
+ });
+ modalRef.afterClose.subscribe(res => {
+ })
+ }
+
+ /**
+ * 查看监管审核结果
+ */
+ viewAuditResult(record: any) {
+ if (record?.billStatus !== '2') {
+ return;
+ }
+ this.openWainingModal('监管审核结果', record?.result)
+ }
+
+
+ search() {
+ this.selectedRows = [];
+ this.st.load(1);
+ }
+
+ /**
+ * 异步导出
+ */
+ export() {
+ this.service.exportStart({ ...this.sf?.value, pageSize: -1 }, this.service.$api_export_reporting_order);
+ }
+
+ openWainingModal(content: string, title = '提示') {
+ this.modal.warning({
+ nzMask: false,
+ nzTitle: title,
+ nzContent: content,
+ })
+ }
+
+ /**
+ * 查看轨迹
+ */
+ viewTrack(_record: any, trajectory: string) {
+ const title = trajectory === 'car' ? '车辆' : '司机'
+ const modalRef = this.modal.create({
+ nzTitle: `查看${title}轨迹`,
+ nzWidth: 1000,
+ nzContent: DatatableReportingvViewTrackComponent,
+ nzComponentParams: {
+ id: _record?.orderId,
+ trajectory
+ },
+ nzFooter: null
+ });
+ modalRef.afterClose.subscribe(res => {
+ })
+ }
+
+ /**
+ * 更新数据
+ */
+ updateData() {
+ if (this.selectedRows.length === 0) {
+ this.openWainingModal('请选择需要更新的数据');
+ return;
+ }
+ const ids = this.selectedRows.map(i => i?.orderId);
+ this.service.request(this.service.$api_update_order_data, ids).subscribe(res => {
+ if (res) {
+ this.service.msgSrv.success('更新成功');
+ this.selectedRows = [];
+ this.st.reload();
+ }
+ })
+ }
+
+ filterStatus(status: number) {
+ switch (status) {
+ case 0:
+ return '待上传';
+ case 1:
+ return '已上传';
+ case 2:
+ return '上传异常';
+ default:
+ return '';
+
+ }
+ }
+
+ filterCheckStatus(status: string | number) {
+ switch (status) {
+ case '0':
+ return '检测中';
+ case '1':
+ return '通过';
+ case '2':
+ return '不通过';
+ default:
+ return '';
+
+ }
+ }
+
+ routeToOrder(item: any) {
+ if (item.billType === '1') {
+ window.open(location.origin + `/#/order-management/vehicle/vehicle-detail/${item.orderId}`);
+ } else {
+ window.open(location.origin + `/#/order-management/bulk/bulk-detail/${item.orderId}`);
+ }
+ }
+
+ routeTowaybill(item: any) {
+ if (item.billType === '1') {
+ window.open(location.origin + `/#/waybill-management/vehicle/vehicle-detail/${item.waybillId}`);
+
+ } else {
+ window.open(location.origin + `/#/waybill-management/bulk/bulk-detail/${item.waybillId}`);
+
+ }
+ }
+
+}
diff --git a/src/app/routes/datatable/reporting/components/upload-setting/upload-setting.component.html b/src/app/routes/datatable/reporting/components/upload-setting/upload-setting.component.html
new file mode 100644
index 00000000..967041a5
--- /dev/null
+++ b/src/app/routes/datatable/reporting/components/upload-setting/upload-setting.component.html
@@ -0,0 +1,8 @@
+
+
+
+
diff --git a/src/app/routes/datatable/reporting/components/upload-setting/upload-setting.component.spec.ts b/src/app/routes/datatable/reporting/components/upload-setting/upload-setting.component.spec.ts
new file mode 100644
index 00000000..aeb5cf2c
--- /dev/null
+++ b/src/app/routes/datatable/reporting/components/upload-setting/upload-setting.component.spec.ts
@@ -0,0 +1,24 @@
+import { waitForAsync, ComponentFixture, TestBed } from '@angular/core/testing';
+import { DatatableReportingUploadSettingComponent } from './upload-setting.component';
+
+describe('DatatableReportingUploadSettingComponent', () => {
+ let component: DatatableReportingUploadSettingComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(waitForAsync(() => {
+ TestBed.configureTestingModule({
+ declarations: [DatatableReportingUploadSettingComponent]
+ })
+ .compileComponents();
+ }));
+
+ beforeEach(() => {
+ fixture = TestBed.createComponent(DatatableReportingUploadSettingComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/src/app/routes/datatable/reporting/components/upload-setting/upload-setting.component.ts b/src/app/routes/datatable/reporting/components/upload-setting/upload-setting.component.ts
new file mode 100644
index 00000000..0258f230
--- /dev/null
+++ b/src/app/routes/datatable/reporting/components/upload-setting/upload-setting.component.ts
@@ -0,0 +1,110 @@
+import { Component, OnInit, ViewChild } from '@angular/core';
+import { SFComponent, SFSchema, SFUISchema } from '@delon/form';
+import { NzModalRef } from 'ng-zorro-antd/modal';
+import { ReportingService } from '../../services/reporting.service';
+
+@Component({
+ selector: 'app-datatable-upload-setting',
+ templateUrl: './upload-setting.component.html',
+})
+export class DatatableReportingUploadSettingComponent implements OnInit {
+ @ViewChild('sf', { static: false }) sf!: SFComponent;
+ record: any = {};
+ i: any;
+ schema!: SFSchema;
+ ui!: SFUISchema;
+
+ constructor(
+ private modal: NzModalRef,
+ public service: ReportingService
+ ) { }
+
+ ngOnInit(): void {
+ this.initSF();
+ this.loadData();
+ }
+
+ /**
+ * 初始化查询表单
+ */
+ initSF() {
+ this.schema = {
+ properties: {
+ orderPushType: {
+ type: 'string',
+ title: '订单数据',
+ enum: [
+ {
+ label: '手动上传',
+ value: 1
+ },
+ {
+ label: '自动上传',
+ value: 2
+ }
+ ],
+ description: '开启自动上传后,订单将在支付完成且风险单校验通过后自动上传',
+ ui: {
+ widget: 'radio',
+
+ }
+ },
+ capitalPushType: {
+ type: 'string',
+ title: '资金数据',
+ enum: [
+ {
+ label: '手动上传',
+ value: 1
+ },
+ {
+ label: '自动上传',
+ value: 2
+ }
+ ],
+ description: '开启自动上传后,订单将在支付完成且风险单校验通过后自动上传',
+ ui: {
+ widget: 'radio',
+
+ }
+ },
+ },
+ required: ['orderPushType', 'capitalPushType'],
+ }
+ this.ui = {
+ '*': {
+ spanLabelFixed: 100,
+ grid: { span: 24 },
+ },
+ };
+ }
+
+ /**
+ * 获取设置数据
+ */
+ loadData() {
+ this.service.request(this.service.$api_get_upload_setting, {}).subscribe(res => {
+ if (res) {
+ this.i = res;
+ }
+ })
+ }
+
+ /**
+ * 修改
+ * @param value
+ */
+ save(value: any): void {
+ if (this.sf?.valid)
+ this.service.request(this.service.$api_upload_setting_save, { ...value }).subscribe(res => {
+ if (res) {
+ this.service.msgSrv.success('保存成功');
+ this.modal.close(true);
+ }
+ })
+ }
+
+ close(): void {
+ this.modal.destroy();
+ }
+}
diff --git a/src/app/routes/datatable/reporting/components/verify-result/verify-result.component.html b/src/app/routes/datatable/reporting/components/verify-result/verify-result.component.html
new file mode 100644
index 00000000..2ed32290
--- /dev/null
+++ b/src/app/routes/datatable/reporting/components/verify-result/verify-result.component.html
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+ {{filterCheckStatus(item?.checkStatus)}}
+
+
+
+
+
diff --git a/src/app/routes/datatable/reporting/components/verify-result/verify-result.component.spec.ts b/src/app/routes/datatable/reporting/components/verify-result/verify-result.component.spec.ts
new file mode 100644
index 00000000..48b1e9e5
--- /dev/null
+++ b/src/app/routes/datatable/reporting/components/verify-result/verify-result.component.spec.ts
@@ -0,0 +1,24 @@
+import { waitForAsync, ComponentFixture, TestBed } from '@angular/core/testing';
+import { DatatableReportingVerifyResultComponent } from './verify-result.component';
+
+describe('DatatableReportingVerifyResultComponent', () => {
+ let component: DatatableReportingVerifyResultComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(waitForAsync(() => {
+ TestBed.configureTestingModule({
+ declarations: [DatatableReportingVerifyResultComponent]
+ })
+ .compileComponents();
+ }));
+
+ beforeEach(() => {
+ fixture = TestBed.createComponent(DatatableReportingVerifyResultComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/src/app/routes/datatable/reporting/components/verify-result/verify-result.component.ts b/src/app/routes/datatable/reporting/components/verify-result/verify-result.component.ts
new file mode 100644
index 00000000..15ef42f2
--- /dev/null
+++ b/src/app/routes/datatable/reporting/components/verify-result/verify-result.component.ts
@@ -0,0 +1,138 @@
+import { Component, OnInit, ViewChild } from '@angular/core';
+import { Router } from '@angular/router';
+import { STColumn, STComponent, STRequestOptions } from '@delon/abc/st';
+import { NzModalRef } from 'ng-zorro-antd/modal';
+import { ReportingService } from '../../services/reporting.service';
+
+@Component({
+ selector: 'app-datatable-verify-result',
+ templateUrl: './verify-result.component.html',
+})
+export class DatatableReportingVerifyResultComponent implements OnInit {
+ @ViewChild('st') private readonly st!: STComponent;
+ columns: STColumn[] = [];
+ record: any = {};
+
+ tabs: any[] = [
+ { name: '订单信息', value: 3 },
+ { name: '司机信息', value: 2 },
+ { name: '车辆信息', value: 4 },
+ ];
+ subjectType = 3;
+ subjectId = '';
+ get reqParams() {
+ return {
+ subjectType: this.subjectType,
+ subjectId: this.record?.orderId,
+
+ };
+ }
+
+ constructor(public service: ReportingService, private modalRef: NzModalRef, public router: Router) {
+
+ }
+
+ beforeReq(requestOptions: STRequestOptions) {
+ delete requestOptions?.body?.pageSize;
+ delete requestOptions?.body?.pageIndex;
+ return requestOptions;
+ }
+
+ ngOnInit(): void {
+ this.initST();
+ }
+
+ /**
+ * 初始化数据列表
+ */
+ initST() {
+ this.columns = [
+ { title: '序号', type: 'no', className: 'text-center', width: '60px', },
+ { title: '监管平台字段', index: 'thirdPartyFieldName', className: 'text-center', width: '120px', },
+ { title: '系统字段', index: 'checkFieldName', className: 'text-center', width: '100px', },
+ { title: '归属模块', index: 'orderStatus', className: 'text-center', width: '120px', },
+ {
+ title: '是否必填',
+ index: 'requiredStatus',
+ className: 'text-center',
+ width: '100px',
+ type: 'enum',
+ enum: {
+ 0: '否',
+ 1: '是'
+ }
+ },
+ { title: '上传值', index: 'fieldValue', className: 'text-center', width: '150px', },
+ {
+ title: '本地校验', render: 'checkStatus', className: 'text-center', width: '100px',
+ // type: 'enum',
+ // enum: {
+ // 0: '校验中',
+ // 1: '通过',
+ // 2: '不通过'
+ // }
+ },
+ { title: '错误内容', index: 'remark', className: 'text-center', width: '150px', },
+ ]
+ }
+
+
+ add(): void {
+ // this.modal
+ // .createStatic(FormEditComponent, { i: { id: 0 } })
+ // .subscribe(() => this.st.reload());
+ }
+
+ selectTab(e: any) {
+ this.subjectType = e?.value;
+ setTimeout(() => {
+ this.st.load(1);
+ })
+ }
+
+ update() {
+ switch (this?.subjectType) {
+ case 2:
+ this.openNewPage(`/usercenter/driver/detail/${this.record?.driverId}`);
+ break;
+ case 3:
+ if (this.record?.billType === '1') {
+ this.openNewPage(`/order-management/vehicle-detailChange/${this.record?.orderId}`);
+ } else if (this.record.billType === '2') {
+ this.openNewPage(`/order-management/bulk-detailChange/${this.record?.orderId}`);
+ }
+ break;
+ case 4:
+ this.openNewPage(`/vehicle/list/detail/${this.record?.carId}`);
+ break;
+ default:
+ break;
+ }
+
+
+
+ }
+
+
+ close(): void {
+ this.modalRef.destroy();
+ }
+ filterCheckStatus(status: number) {
+ switch (status) {
+ case 0:
+ return '检测中';
+ case 1:
+ return '通过';
+ case 2:
+ return '不通过';
+ default:
+ return '';
+
+ }
+ }
+
+ openNewPage(url: string) {
+ window.open(location.origin + `/#` + url);
+ }
+
+}
diff --git a/src/app/routes/datatable/reporting/components/view-track/view-track.component.html b/src/app/routes/datatable/reporting/components/view-track/view-track.component.html
new file mode 100644
index 00000000..cc66c9c3
--- /dev/null
+++ b/src/app/routes/datatable/reporting/components/view-track/view-track.component.html
@@ -0,0 +1,5 @@
+
diff --git a/src/app/routes/datatable/reporting/components/view-track/view-track.component.spec.ts b/src/app/routes/datatable/reporting/components/view-track/view-track.component.spec.ts
new file mode 100644
index 00000000..c32eb107
--- /dev/null
+++ b/src/app/routes/datatable/reporting/components/view-track/view-track.component.spec.ts
@@ -0,0 +1,24 @@
+import { waitForAsync, ComponentFixture, TestBed } from '@angular/core/testing';
+import { DatatableReportingvViewTrackComponent } from './view-track.component';
+
+describe('DatatableReportingvViewTrackComponent', () => {
+ let component: DatatableReportingvViewTrackComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(waitForAsync(() => {
+ TestBed.configureTestingModule({
+ declarations: [DatatableReportingvViewTrackComponent]
+ })
+ .compileComponents();
+ }));
+
+ beforeEach(() => {
+ fixture = TestBed.createComponent(DatatableReportingvViewTrackComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/src/app/routes/datatable/reporting/components/view-track/view-track.component.ts b/src/app/routes/datatable/reporting/components/view-track/view-track.component.ts
new file mode 100644
index 00000000..f78e3b56
--- /dev/null
+++ b/src/app/routes/datatable/reporting/components/view-track/view-track.component.ts
@@ -0,0 +1,86 @@
+import { Component, OnInit } from '@angular/core';
+import { Router } from '@angular/router';
+import format from 'date-fns/format';
+import { NzModalRef } from 'ng-zorro-antd/modal';
+import { OrderManagementService } from 'src/app/routes/order-management/services/order-management.service';
+
+@Component({
+ selector: 'app-datatable-view-track',
+ templateUrl: './view-track.component.html'
+})
+export class DatatableReportingvViewTrackComponent implements OnInit {
+ mapList: any[] = []; //地图点位数据组
+ addressItems: any[] = []; //打点地址数据组
+ trajectory = 'car';
+ pois: any[] = [];
+ id = '';
+ constructor(public service: OrderManagementService, private modalRef: NzModalRef, public router: Router) {}
+
+ ngOnInit(): void {
+ if (this.trajectory === 'car') {
+ this.getTrajectory();
+ } else if (this.trajectory === 'driver') {
+ this.getDriverTrajectory();
+ }
+ }
+
+ selectTab(e: any) {}
+
+ close(): void {
+ this.modalRef.destroy();
+ }
+
+ // 车辆轨迹
+ getTrajectory() {
+ this.service.request(this.service.$api_get_getTrajectory, { id: this.id }).subscribe(res => {
+ if (res) {
+ const points = res.trackArray;
+ let list: any[] = [];
+ points?.forEach((item: any) => {
+ list.push({
+ name: item.hgt,
+ lnglat: [Number((Number(item.lon) / 600000).toFixed(6)), Number((Number(item.lat) / 600000).toFixed(6))]
+ });
+ });
+ this.mapList = list;
+ this.addressItems = [...res.parkArray];
+ if (this.addressItems && this.addressItems.length > 0) {
+ this.addressItems.forEach(item => {
+ item.parkBte = this.getLocalTime(item.parkBte);
+ });
+ }
+ }
+ });
+ }
+
+ // 获取司机轨迹
+ getDriverTrajectory() {
+ this.service.request(this.service.$api_get_getAppDriverPosition, { id: this.id }).subscribe(res => {
+ if (res) {
+ const points = res.tracks;
+ let list: any[] = [];
+ points?.forEach((item: any) => {
+ list.push({
+ name: item.hgt,
+ lnglat: [Number((Number(item.lon) / 600000).toFixed(6)), Number((Number(item.lat) / 600000).toFixed(6))]
+ });
+ });
+ this.mapList = list;
+ const addressItems = [...res.tracks];
+ if (addressItems) {
+ addressItems.forEach(item => {
+ // item.parkBte = item.gtm;
+ item.parkBte = this.getLocalTime(item.gtm);
+ item.parkAdr = item.appAdress;
+ });
+ this.addressItems = [...addressItems];
+ } else {
+ this.addressItems = [];
+ }
+ }
+ });
+ }
+ getLocalTime(time: any) {
+ return format(new Date(parseInt(time)), 'yyyy-MM-dd HH:mm:ss');
+ }
+}
diff --git a/src/app/routes/datatable/reporting/services/reporting.service.ts b/src/app/routes/datatable/reporting/services/reporting.service.ts
new file mode 100644
index 00000000..86da8648
--- /dev/null
+++ b/src/app/routes/datatable/reporting/services/reporting.service.ts
@@ -0,0 +1,30 @@
+import { Injectable, Injector } from '@angular/core';
+import { BaseService } from '@shared';
+
+@Injectable({
+ providedIn: 'root'
+})
+export class ReportingService extends BaseService {
+
+ $api_get_order_reporting_page = `/api/sdc/regulation/list/queryPage`; // 订单上报-列表
+ $api_upload_order_reporting = `/api/sdc/regulation/push`; // 上传订单上报
+ $api_recall_order_reporting = `/api/sdc/regulation/withdraw`; // 撤回上传订单上报
+ $api_async_export_order_reporting_list = ``; // 导出订单上报
+ $api_get_upload_setting = `/api/sdc/regulation/getPushConfig`; // 获取上传设置
+ $api_upload_setting_save = `/api/sdc/regulation/setPushConfig`; // 保存上传设置
+ $api_get_order_valid_result = `/api/sdc/regulation/queryPage/checkRes`;//订单上报-校验结果
+ $api_update_order_data = `/api/sdc/regulation/renewalOrderById`;//订单批量更新订单数据
+ $api_export_reporting_order = `/api/sdc/regulation/asyncExportBillReportList`; // 订单上报导出
+
+ $api_get_fund_reporting_page = `/api/fcc/fundUploadHead/list/page`; // 资金上报列表
+ $api_fund_reporting_upload = `/api/fcc/fundUploadHead/uploadFundNumber`; // 资金批量上传
+ $api_fund_reporting_recall = `/api/fcc/fundUploadHead/recallUploadFundNumber`; //资金批量撤回
+ $api_get_fund_valid_result = `/api/fcc/capitalFieldCheck/getCapitalFieldCheckList`; // 查询资金校验表
+ $api_update_fund_data = `/api/fcc/fundUploadHead/updateUploadFundNumber`;//资金批量更新数据
+ $api_export_fund_reporting = `/api/fcc/fundUploadHead/exportFundUpload`; // 导出资金上传
+
+
+ constructor(public injector: Injector) {
+ super(injector);
+ }
+}
diff --git a/src/app/routes/datatable/services/data.service.ts b/src/app/routes/datatable/services/data.service.ts
new file mode 100644
index 00000000..609ed1b6
--- /dev/null
+++ b/src/app/routes/datatable/services/data.service.ts
@@ -0,0 +1,139 @@
+/*
+ * @Description :
+ * @Version : 1.0
+ * @Author : Shiming
+ * @Date : 2021-12-27 10:30:56
+ * @LastEditors : Shiming
+ * @LastEditTime : 2022-04-18 16:37:20
+ * @FilePath : \\tms-obc-web\\src\\app\\routes\\datatable\\services\\data.service.ts
+ * Copyright (C) 2022 huzhenhong. All rights reserved.
+ */
+
+import { Injectable, Injector } from '@angular/core';
+import { _HttpClient } from '@delon/theme';
+import { NzMessageService } from 'ng-zorro-antd/message';
+import { map } from 'rxjs/operators';
+import { BaseService } from 'src/app/shared/services/core/base.service';
+import { EAFileUtil } from 'src/app/shared/utils/file.util';
+
+@Injectable({
+ providedIn: 'root',
+})
+export class DataService extends BaseService {
+
+ // 查询运营报表
+ $api_listOperationalReportPage = `/api/sdc/report/listOperationalReportPage`;
+ // 查询业绩报表
+ $api_listPerformanceReportPage = `/api/sdc/report/listPerformanceReportPage`;
+ // 运营报表运单状态分布
+ $api_operationalReportWaybillStatusDistribution = `/api/sdc/report/operationalReportWaybillStatusDistribution`;
+ // 运营报表柱状图
+ $api_operationalReportHistogram = `/api/sdc/report/operationalReportHistogram`;
+ // 获取网络货运人
+ $api_get_network_freight_forwarder_list = `/api/mdc/cuc/networkTransporter/findAll`;
+ // 业绩报表柱状图
+ $api_performanceReportHistogram = `/api/sdc/report/performanceReportHistogram`;
+
+ // 查询开票数据报表
+ $api_findInvoiceReport = `/api/fcc/invoiceReport/findInvoiceReport`;
+ // 查询开票数据报表
+ $api_listFinancialReportPage = `/api/sdc/report/listFinancialReportPage`;
+
+
+ // 查询货主报表
+ $api_listShipperReportPage = `/api/sdc/report/listShipperReportPage`;
+ // 司机报表
+ $api_listDriverReportPage = `/api/sdc/report/listDriverReportPage`;
+ // 财务报表柱状图
+ $api_financialReportHistogram = `/api/sdc/report/financialReportHistogram`;
+ // 合规监控报表-运费直付占比
+ $api_getBillRateDirectPayment = `/api/sdc/reportComplianceMonitor/getBillRateDirectPayment`;
+ // 合规监控报表-货源单占比
+ $api_getBillRateProportion = `/api/sdc/reportComplianceMonitor/getBillRateProportion`;
+ // 合规监控报表-订单合格率
+ $api_getBillRateQualified = `/api/sdc/reportComplianceMonitor/getBillRateQualified`;
+ // 合规监控报表-付款及时率
+ $api_getBillTimelyPayment = `/api/sdc/reportComplianceMonitor/getBillTimelyPayment`;
+ // 合规监控报表-监控报表(折线图)
+ $api_listMonitorSituation = `/api/sdc/reportComplianceMonitor/listMonitorSituation`;
+
+
+ // 客户报表-根据类型获取统计信息(card)
+ $api_statistics_total = `/api/mdc/cuc/statistics/total`;
+ // 客户报表-根据类型获取统计明细信息(table)
+ $api_statistics_totalDetail = `/api/mdc/cuc/statistics/totalDetail`;
+ // 客户报表-根据类型获取统计图表信息
+ $api_statistics_totalAdd = `/api/mdc/cuc/statistics/totalAdd`;
+
+
+ // 数据大屏-本年全年交易情况
+ $api_getAnnualTransactions = `/api/sdc/reportDataLargeScreen/getAnnualTransactions`;
+ // 数据大屏-客户统计(货主,合伙人,司机,车辆)
+ $api_getCustomerStatistics = `/api/sdc/reportDataLargeScreen/getCustomerStatistics`;
+ // 数据大屏-实时货源
+ $api_getRealTimeSupply = `/api/sdc/reportDataLargeScreen/getRealTimeSupply`;
+ // 数据大屏-实时运单风控
+ $api_getRealTimeWaybillRiskControl = `/api/sdc/reportDataLargeScreen/getRealTimeWaybillRiskControl`;
+ // 数据大屏-本月发货量排名
+ $api_getShipmentRanking = `/api/sdc/reportDataLargeScreen/getShipmentRanking`;
+ // 数据大屏-今日交易情况
+ $api_getTradingToday = `/api/sdc/reportDataLargeScreen/getTradingToday`;
+ // 数据大屏-本月交易趋势
+ $api_getTradingTrend = `/api/sdc/reportDataLargeScreen/getTradingTrend`;
+ // 数据大屏-交易额(今日,本月,累计)
+ $api_getTransactionAmount = `/api/sdc/reportDataLargeScreen/getTransactionAmount`;
+ // 数据大屏-交易分布
+ $api_getTransactionDistribution = `/api/sdc/reportDataLargeScreen/getTransactionDistribution`;
+
+ // 客户-合规报表
+ $api_listCusComplianceReportPage = `/api/sdc/report/listCusComplianceReportPage`;
+
+ // 查询业务员报表-客户、合伙人
+ $api_listPartBusinessReportPage = `/api/sdc/report/listPartBusinessReportPage`;
+ // 业务员-合规报表
+ $api_listPartComplianceReportPage = `/api/sdc/report/listPartComplianceReportPage`;
+
+ // 数据报表-订单类型比例
+ $api_getBillTypeProportion = `/api/sdc/reportData/getBillTypeProportion`;
+ // 数据报表-运单直付比例
+ $api_getWayBillDirectProportion = `/api/sdc/reportData/getWayBillDirectProportion`;
+ // 数据报表-统计订单金额-趋势
+ $api_getBillAmount = `/api/sdc/reportData/getBillAmount`;
+ // // 数据报表-统计订单金额-趋势
+ // $api_getBillAmount = `/api/sdc/reportData/getBillAmount`;
+
+
+
+ constructor(public injector: Injector) {
+ super(injector);
+ }
+
+ /**
+* 获取网络货运人
+* @returns
+*/
+ getNetworkFreightForwarder(params = {}, containerAll = false) {
+ return this.request(this.$api_get_network_freight_forwarder_list, params).pipe(
+ map((res: any) => {
+ if (!res) {
+ return [];
+ }
+ const list = res.map((item: any) => {
+ return {
+ label: item.enterpriseName,
+ value: item.id
+ };
+ });
+ const obj = [];
+ if (containerAll) {
+ obj.push({ label: '全部', value: '' });
+ }
+ return [...obj, ...list];
+ })
+ );
+ }
+
+ getPerformanceReportHistogram(params = {}) {
+ return this.request(this.$api_performanceReportHistogram, params)
+ }
+}
diff --git a/src/app/routes/download/components/list/list.component.html b/src/app/routes/download/components/list/list.component.html
new file mode 100644
index 00000000..40d662a6
--- /dev/null
+++ b/src/app/routes/download/components/list/list.component.html
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/app/routes/download/components/list/list.component.ts b/src/app/routes/download/components/list/list.component.ts
new file mode 100644
index 00000000..05f38c4c
--- /dev/null
+++ b/src/app/routes/download/components/list/list.component.ts
@@ -0,0 +1,128 @@
+import { Component, OnInit, ViewChild } from '@angular/core';
+import { ActivatedRoute, Router } from '@angular/router';
+import { STChange, STColumn, STComponent, STData } from '@delon/abc/st';
+import { SFComponent, SFDateWidgetSchema, SFSchema, SFUISchema } from '@delon/form';
+import { _HttpClient } from '@delon/theme';
+import { NzModalService } from 'ng-zorro-antd/modal';
+import { DownloadService } from '../../services/download.service';
+
+@Component({
+ selector: 'app-download-center-components-list',
+ templateUrl: './list.component.html'
+})
+export class DownloadComponentsListComponent implements OnInit {
+ ui: SFUISchema = {};
+ schema: SFSchema = {};
+ columns: STColumn[] = [];
+ @ViewChild('st', { static: false }) st!: STComponent;
+ @ViewChild('sf', { static: false }) sf!: SFComponent;
+ constructor(public service: DownloadService, private modal: NzModalService, private router: Router, private ar: ActivatedRoute) {}
+
+ /**
+ * 查询参数
+ */
+ get reqParams() {
+ const params = Object.assign({}, this.sf?.value || {});
+ delete params._$expand;
+ return { ...params, createTime: params?.createTime?.start, applyEndTime: params?.createTime?.end };
+ }
+
+ /**
+ * 重置表单
+ */
+ resetSF() {
+ this.sf.reset();
+ }
+ /**
+ * 程序初始化入口
+ */
+ ngOnInit() {
+ this.initSF();
+ this.initST();
+ }
+
+ /**
+ * 初始化查询表单
+ */
+ initSF() {
+ this.schema = {
+ properties: {
+ _$expand: {
+ type: 'boolean',
+ ui: { hidden: true }
+ },
+ createTime: {
+ type: 'string',
+ title: '创建时间',
+ ui: {
+ widget: 'sl-from-to',
+ type: 'date',
+ format: 'yyyy-MM-dd'
+ } as SFDateWidgetSchema
+ }
+ }
+ };
+ this.ui = { '*': { spanLabelFixed: 80, grid: { span: 8, gutter: 4 } } };
+ }
+
+ /**
+ * 初始化数据列表
+ */
+ initST() {
+ this.columns = [
+ { title: '文件名称', index: 'dataSourcesDetail', className: 'text-center' },
+ { title: '文件来源', index: 'dataSources', className: 'text-center' },
+ { title: '文件大小', index: 'dataSize', width: '120px', className: 'text-center' },
+ {
+ title: '生成状态',
+ index: 'status',
+ width: '120px',
+ className: 'text-center',
+ type: 'enum',
+ enum: {
+ 0: '生成中',
+ 1: '已完成',
+ 2: '失败'
+ }
+ },
+ { title: '下载次数', index: 'downloadCount', width: '120px', className: 'text-center' },
+ { title: '创建时间', index: 'createTime', width: '120px', className: 'text-center' },
+ { title: '生成时间', index: 'completeTime', width: '180px', className: 'text-center' },
+ {
+ title: '操作',
+ fixed: 'right',
+ width: '170px',
+ className: 'text-center',
+ buttons: [{ text: '下载', click: _record => this.download(_record) }]
+ }
+ ];
+ }
+
+ /**
+ * 删除单个实例
+ * @param record 记录实例
+ */
+ delOne(record: STData) {
+ const headers = [{ key: 'Content-Type', value: 'application/json' }];
+ this.modal.confirm({
+ nzTitle: '删除确认',
+ nzContent: `即将删除 当前行数据,请仔细核对,避免误操作!
是否删除?`,
+ nzOnOk: () =>
+ this.service.request(this.service.encodeUrlHeader(this.service.$api_del_many, headers), { fileKey: record.id }).subscribe(res => {
+ if (res) {
+ this.service.msgSrv.success('数据删除成功!');
+ this.st?.reload();
+ }
+ })
+ });
+ }
+ download(record: STData) {
+ const headers = [{ key: 'Content-Type', value: 'application/json' }];
+ this.service.downloadFile(
+ this.service.encodeUrlHeader(this.service.$api_download_file, headers),
+ {},
+ { fileKey: record.fileUniqueKey },
+ 'POST'
+ );
+ }
+}
diff --git a/src/app/routes/download/download-routing.module.ts b/src/app/routes/download/download-routing.module.ts
new file mode 100644
index 00000000..6cd311bb
--- /dev/null
+++ b/src/app/routes/download/download-routing.module.ts
@@ -0,0 +1,14 @@
+import { NgModule } from '@angular/core';
+import { RouterModule, Routes } from '@angular/router';
+import { DownloadComponentsListComponent } from './components/list/list.component';
+
+const routes: Routes = [
+ { path: '', redirectTo: 'list', pathMatch: 'full' },
+ { path: 'list', component: DownloadComponentsListComponent, data: { reuse: true } },
+];
+
+@NgModule({
+ imports: [RouterModule.forChild(routes)],
+ exports: [RouterModule],
+})
+export class DownloadRoutingModule {}
diff --git a/src/app/routes/download/download.module.ts b/src/app/routes/download/download.module.ts
new file mode 100644
index 00000000..a6b86c99
--- /dev/null
+++ b/src/app/routes/download/download.module.ts
@@ -0,0 +1,12 @@
+import { NgModule, Type } from '@angular/core';
+import { SharedModule } from '@shared';
+import { DownloadComponentsListComponent } from './components/list/list.component';
+import { DownloadRoutingModule } from './download-routing.module';
+
+const COMPONENTS: Type[] = [DownloadComponentsListComponent];
+
+@NgModule({
+ imports: [SharedModule, DownloadRoutingModule],
+ declarations: COMPONENTS,
+})
+export class DownloadModule {}
diff --git a/src/app/routes/download/services/download.service.ts b/src/app/routes/download/services/download.service.ts
new file mode 100644
index 00000000..12fcb323
--- /dev/null
+++ b/src/app/routes/download/services/download.service.ts
@@ -0,0 +1,18 @@
+import { Injectable, Injector } from '@angular/core';
+import { BaseService } from '@shared';
+
+@Injectable({
+ providedIn: 'root',
+})
+export class DownloadService extends BaseService {
+ // 删除多个实例接口地址
+ $api_del_many = '/scm/cms/cms/deleteRecordInfo/file';
+ // 获取实例分页数据接口地址
+ $api_get_page = '/api/mdc/pbc/asynExportInfo/getAsynExportInfoListPage';
+ // 下载文件
+ $api_download_file = '/api/mdc/pbc/download/file';
+
+ constructor(public injector: Injector) {
+ super(injector);
+ }
+}
diff --git a/src/app/routes/exception/403.component.ts b/src/app/routes/exception/403.component.ts
new file mode 100644
index 00000000..166a6a49
--- /dev/null
+++ b/src/app/routes/exception/403.component.ts
@@ -0,0 +1,7 @@
+import { Component } from '@angular/core';
+
+@Component({
+ selector: 'exception-403',
+ template: ` `
+})
+export class Exception403Component {}
diff --git a/src/app/routes/exception/404.component.ts b/src/app/routes/exception/404.component.ts
new file mode 100644
index 00000000..f644917b
--- /dev/null
+++ b/src/app/routes/exception/404.component.ts
@@ -0,0 +1,7 @@
+import { Component } from '@angular/core';
+
+@Component({
+ selector: 'exception-404',
+ template: ` `
+})
+export class Exception404Component {}
diff --git a/src/app/routes/exception/500.component.ts b/src/app/routes/exception/500.component.ts
new file mode 100644
index 00000000..c04c556a
--- /dev/null
+++ b/src/app/routes/exception/500.component.ts
@@ -0,0 +1,7 @@
+import { Component } from '@angular/core';
+
+@Component({
+ selector: 'exception-500',
+ template: ` `
+})
+export class Exception500Component {}
diff --git a/src/app/routes/exception/exception-routing.module.ts b/src/app/routes/exception/exception-routing.module.ts
new file mode 100644
index 00000000..db62c1c0
--- /dev/null
+++ b/src/app/routes/exception/exception-routing.module.ts
@@ -0,0 +1,20 @@
+import { NgModule } from '@angular/core';
+import { RouterModule, Routes } from '@angular/router';
+
+import { Exception403Component } from './403.component';
+import { Exception404Component } from './404.component';
+import { Exception500Component } from './500.component';
+import { ExceptionTriggerComponent } from './trigger.component';
+
+const routes: Routes = [
+ { path: '403', component: Exception403Component },
+ { path: '404', component: Exception404Component },
+ { path: '500', component: Exception500Component },
+ { path: 'trigger', component: ExceptionTriggerComponent }
+];
+
+@NgModule({
+ imports: [RouterModule.forChild(routes)],
+ exports: [RouterModule]
+})
+export class ExceptionRoutingModule {}
diff --git a/src/app/routes/exception/exception.module.ts b/src/app/routes/exception/exception.module.ts
new file mode 100644
index 00000000..88fbbe3b
--- /dev/null
+++ b/src/app/routes/exception/exception.module.ts
@@ -0,0 +1,19 @@
+import { CommonModule } from '@angular/common';
+import { NgModule } from '@angular/core';
+import { ExceptionModule as DelonExceptionModule } from '@delon/abc/exception';
+import { NzButtonModule } from 'ng-zorro-antd/button';
+import { NzCardModule } from 'ng-zorro-antd/card';
+
+import { Exception403Component } from './403.component';
+import { Exception404Component } from './404.component';
+import { Exception500Component } from './500.component';
+import { ExceptionRoutingModule } from './exception-routing.module';
+import { ExceptionTriggerComponent } from './trigger.component';
+
+const COMPONENTS = [Exception403Component, Exception404Component, Exception500Component, ExceptionTriggerComponent];
+
+@NgModule({
+ imports: [CommonModule, DelonExceptionModule, NzButtonModule, NzCardModule, ExceptionRoutingModule],
+ declarations: [...COMPONENTS]
+})
+export class ExceptionModule {}
diff --git a/src/app/routes/exception/trigger.component.ts b/src/app/routes/exception/trigger.component.ts
new file mode 100644
index 00000000..5a0c373d
--- /dev/null
+++ b/src/app/routes/exception/trigger.component.ts
@@ -0,0 +1,35 @@
+import { Component, Inject } from '@angular/core';
+import { DA_SERVICE_TOKEN, ITokenService } from '@delon/auth';
+import { _HttpClient } from '@delon/theme';
+
+@Component({
+ selector: 'exception-trigger',
+ template: `
+
+
+
+
+
+
+ `
+})
+export class ExceptionTriggerComponent {
+ types = [401, 403, 404, 500];
+
+ constructor(private http: _HttpClient, @Inject(DA_SERVICE_TOKEN) private tokenService: ITokenService) {}
+
+ go(type: number): void {
+ this.http.get(`/api/${type}`).subscribe();
+ }
+
+ refresh(): void {
+ this.tokenService.set({ token: 'invalid-token' });
+ // 必须提供一个后端地址,无法通过 Mock 来模拟
+ this.http.post(`https://localhost:5001/auth`).subscribe(
+ res => console.warn('成功', res),
+ err => {
+ console.log('最后结果失败', err);
+ }
+ );
+ }
+}
diff --git a/src/app/routes/financial-management/components/abnormal-gold/abnormal-gold-detail/abnormal-gold-detail.component.html b/src/app/routes/financial-management/components/abnormal-gold/abnormal-gold-detail/abnormal-gold-detail.component.html
new file mode 100644
index 00000000..f5f453b1
--- /dev/null
+++ b/src/app/routes/financial-management/components/abnormal-gold/abnormal-gold-detail/abnormal-gold-detail.component.html
@@ -0,0 +1,55 @@
+
+
+
+
+
+
+
+
+
+ {{formData?.ltdName}}
+
+
+ {{formData?.bankTypeLabel}}
+
+
+ {{formData?.virtualAccount}}
+
+
+ {{formData?.transferBankAccount}}
+
+
+ {{formData?.rechargeAmount | currency}}
+
+
+ {{formData?.transferBankOpenName}}
+
+
+ {{formData?.rechargeStatusLabel}}
+
+
+ {{formData?.rechargeRemark}}
+
+
+ {{formData?.createTime}}
+
+
+ {{formData?.refundTime}}
+
+
+ {{formData?.paySerialNumber}}
+
+
+ {{formData?.paySerialNumber2}}
+
+
+
+
+
\ No newline at end of file
diff --git a/src/app/routes/financial-management/components/abnormal-gold/abnormal-gold-detail/abnormal-gold-detail.component.less b/src/app/routes/financial-management/components/abnormal-gold/abnormal-gold-detail/abnormal-gold-detail.component.less
new file mode 100644
index 00000000..e69de29b
diff --git a/src/app/routes/financial-management/components/abnormal-gold/abnormal-gold-detail/abnormal-gold-detail.component.ts b/src/app/routes/financial-management/components/abnormal-gold/abnormal-gold-detail/abnormal-gold-detail.component.ts
new file mode 100644
index 00000000..af5d81dd
--- /dev/null
+++ b/src/app/routes/financial-management/components/abnormal-gold/abnormal-gold-detail/abnormal-gold-detail.component.ts
@@ -0,0 +1,45 @@
+import { Component, OnInit } from '@angular/core';
+import { ActivatedRoute } from '@angular/router';
+import { FreightAccountService } from '../../../services/freight-account.service';
+
+@Component({
+ selector: 'app-abnormal-gold-detail',
+ templateUrl: './abnormal-gold-detail.component.html',
+ styleUrls: ['./abnormal-gold-detail.component.less']
+})
+export class AbnormalGoldDetailComponent implements OnInit {
+ formData: any = {};
+
+ constructor(public service: FreightAccountService, private route: ActivatedRoute) {
+ const id = route.snapshot.params.id;
+ this.loadRefundDetail(id);
+ }
+
+ ngOnInit(): void {}
+
+ loadRefundDetail(id: string) {
+ this.service.request(this.service.$api_get_getAbnormalAmount_detail, { id }).subscribe(res => {
+ if (res) {
+ this.formData = res;
+ }
+ });
+ }
+
+ downBack(bussType: string, receiptUrl: string) {
+ if (this.formData?.refundStatus !== '3') {
+ return;
+ }
+ this.service.getReceiptUrl(receiptUrl, {
+ bankType: this.formData.bankType,
+ rmYll: this.formData.userId,
+ snglFlgCd: this.formData.coreSerNo,
+ bussType,
+ ltdId: this.formData.ltdId,
+ accountType: this.formData.accountType
+ });
+ }
+
+ goBack() {
+ history.go(-1);
+ }
+}
diff --git a/src/app/routes/financial-management/components/abnormal-gold/abnormal-gold.component.html b/src/app/routes/financial-management/components/abnormal-gold/abnormal-gold.component.html
new file mode 100644
index 00000000..593c1e97
--- /dev/null
+++ b/src/app/routes/financial-management/components/abnormal-gold/abnormal-gold.component.html
@@ -0,0 +1,52 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/app/routes/financial-management/components/abnormal-gold/abnormal-gold.component.ts b/src/app/routes/financial-management/components/abnormal-gold/abnormal-gold.component.ts
new file mode 100644
index 00000000..55817107
--- /dev/null
+++ b/src/app/routes/financial-management/components/abnormal-gold/abnormal-gold.component.ts
@@ -0,0 +1,203 @@
+import { Component, OnInit, ViewChild } from '@angular/core';
+import { Router } from '@angular/router';
+import { STComponent, STColumn, STRequestOptions, STChange } from '@delon/abc/st';
+import { SFComponent, SFSchema, SFDateWidgetSchema } from '@delon/form';
+import { NzModalService } from 'ng-zorro-antd/modal';
+import { FreightAccountService } from '../../services/freight-account.service';
+import { ClearingModalComponent } from './clearing-modal/clearing-modal.component';
+
+@Component({
+ selector: 'app-abnormal-gold',
+ templateUrl: './abnormal-gold.component.html',
+ styleUrls: ['../../../commom/less/box.less', '../../../commom/less/expend-but.less']
+})
+export class AbnormalGoldComponent implements OnInit {
+ @ViewChild('st', { static: true })
+ st!: STComponent;
+ @ViewChild('sf', { static: false })
+ sf!: SFComponent;
+ columns: STColumn[] = this.initST();
+ searchSchema: SFSchema = this.initSF();
+
+ _$expand = false;
+
+ rechargeStatus = '1';
+ constructor(public service: FreightAccountService, private nzModalService: NzModalService, private router: Router) {}
+
+ ngOnInit(): void {}
+
+ beforeReq = (requestOptions: STRequestOptions) => {
+ Object.assign(requestOptions.body, { rechargeStatus: this.rechargeStatus });
+ if (this.sf) {
+ Object.assign(requestOptions.body, { ...this.sf.value });
+ }
+ return requestOptions;
+ };
+
+ changePaymentStatus(status: string) {
+ this.rechargeStatus = status;
+ this.st.load(1);
+ }
+
+ refund(item: any) {
+ this.nzModalService.warning({
+ nzTitle: '确定要将该笔款项原路退回?',
+ nzOnOk: () => {}
+ });
+ }
+
+ clearingAction(item: any) {
+ const modal = this.nzModalService.create({
+ nzTitle: '清分',
+ nzContent: ClearingModalComponent,
+ nzOnOk: com => {
+ return false;
+ }
+ });
+ }
+
+ /**
+ * 重置表单
+ */
+ resetSF() {
+ this.sf.reset();
+ this._$expand = false;
+ }
+
+ /**
+ * 伸缩查询条件
+ */
+ expandToggle() {
+ this._$expand = !this._$expand;
+ this.sf?.setValue('/expand', this._$expand);
+ }
+
+ private initSF(): SFSchema {
+ return {
+ properties: {
+ expand: {
+ type: 'boolean',
+ ui: {
+ hidden: true
+ }
+ },
+ paySerialNumber: {
+ type: 'string',
+ title: '银行流水号',
+ ui: {
+ placeholder: '请输入'
+ }
+ },
+ ltdId: {
+ type: 'string',
+ title: '网络货运人',
+ ui: {
+ widget: 'select',
+ placeholder: '请选择',
+ allowClear: true,
+ asyncData: () => this.service.getNetworkFreightForwarder()
+ }
+ },
+ bankType: {
+ type: 'string',
+ title: '银行类型',
+ enum: [
+ { label: '全部', value: '' },
+ { label: '平安银行', value: '1' },
+ { label: '浦发银行', value: '2' }
+ ],
+ ui: {
+ widget: 'select',
+ placeholder: '请选择'
+ },
+ default: ''
+ },
+ transferBankAccount: {
+ type: 'string',
+ title: '付款账户',
+ ui: {
+ placeholder: '请输入',
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ }
+ },
+ transferBankCardNumber: {
+ type: 'string',
+ title: '付款账号',
+ ui: {
+ placeholder: '请输入',
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ }
+ },
+ transferBankOpenName: {
+ type: 'string',
+ title: '付款银行',
+ ui: {
+ placeholder: '请输入',
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ }
+ },
+ transferDate: {
+ title: '转账时间',
+ type: 'string',
+ ui: {
+ widget: 'sl-from-to-search',
+ format: 'yyyy-MM-dd',
+ placeholder: '请选择',
+ nzShowTime: true,
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ } as SFDateWidgetSchema
+ }
+ }
+ };
+ }
+
+ private initST(): STColumn[] {
+ return [
+ { title: '银行流水号', index: 'paySerialNumber', width: 180 },
+ { title: '网络货运人', index: 'ltdName', width: 220 },
+ { title: '银行类型', index: 'bankTypeLabel', width: 100 },
+ { title: '资金总账号', index: 'virtualAccount', width: 180 },
+ {
+ title: '充值金额',
+ index: 'rechargeAmount',
+ width: 140,
+ type: 'widget',
+ className: 'text-right',
+ widget: { type: 'currency-chy', params: ({ record }) => ({ value: record.rechargeAmount }) }
+ },
+ { title: '付款账户', index: 'transferBankAccount', width: 180 },
+ { title: '付款账号', index: 'transferBankCardNumber', width: 180 },
+ { title: '付款银行', index: 'transferBankOpenName', width: 220 },
+ { title: '转账时间', index: 'createTime', type: 'date', width: 150 },
+ { title: '转账备注', index: 'rechargeRemark', width: 180 },
+ { title: '退款时间', index: 'refundTime', type: 'date', width: 150 },
+ // { title: '操作人', index: 'rechargeName', width: 140 },
+ // { title: '操作时间', index: 'callNo', type: 'date', width: 160 },
+ { title: '状态', index: 'rechargeStatusLabel', width: 110 },
+ {
+ title: '操作',
+ fixed: 'right',
+ className: 'text-center',
+ width: 120,
+ buttons: [
+ {
+ text: '查看',
+ click: item => this.router.navigate(['/financial-management/abnormal-gold/detail/' + item.id])
+ }
+ ]
+ }
+ ];
+ }
+ // 导出
+ exprot() {
+ this.service.exportStart({ ...this.sf.value, pageSize: -1 }, this.service.$api_get_exportAbnormalAmountPage);
+ }
+}
diff --git a/src/app/routes/financial-management/components/abnormal-gold/clearing-modal/clearing-modal.component.html b/src/app/routes/financial-management/components/abnormal-gold/clearing-modal/clearing-modal.component.html
new file mode 100644
index 00000000..fd8c045d
--- /dev/null
+++ b/src/app/routes/financial-management/components/abnormal-gold/clearing-modal/clearing-modal.component.html
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/src/app/routes/financial-management/components/abnormal-gold/clearing-modal/clearing-modal.component.less b/src/app/routes/financial-management/components/abnormal-gold/clearing-modal/clearing-modal.component.less
new file mode 100644
index 00000000..e69de29b
diff --git a/src/app/routes/financial-management/components/abnormal-gold/clearing-modal/clearing-modal.component.ts b/src/app/routes/financial-management/components/abnormal-gold/clearing-modal/clearing-modal.component.ts
new file mode 100644
index 00000000..592e7bc4
--- /dev/null
+++ b/src/app/routes/financial-management/components/abnormal-gold/clearing-modal/clearing-modal.component.ts
@@ -0,0 +1,106 @@
+import { Component, OnInit, ViewChild } from '@angular/core';
+import { apiConf } from '@conf/api.conf';
+import { SFComponent, SFSchema, SFTextWidgetSchema, SFUISchema, SFUploadWidgetSchema } from '@delon/form';
+import { ShipperBaseService } from '@shared';
+import { NzModalRef } from 'ng-zorro-antd/modal';
+import { FreightAccountService } from '../../../services/freight-account.service';
+
+const IMAGECONFIG = {
+ action: apiConf.waterFileUpload,
+ fileType: 'image/png,image/jpeg,image/jpg,image/gif',
+ fileSize: 5120,
+ limit: 1,
+ limitFileCount: 1,
+ resReName: 'data.fullFileWatermarkPath',
+ urlReName: 'data.fullFileWatermarkPath',
+ widget: 'upload',
+ name: 'multipartFile',
+ multiple: false,
+ listType: 'picture-card'
+};
+
+@Component({
+ selector: 'app-clearing-modal',
+ templateUrl: './clearing-modal.component.html',
+ styleUrls: ['./clearing-modal.component.less']
+})
+export class ClearingModalComponent implements OnInit {
+ @ViewChild('sf', { static: false })
+ sf!: SFComponent;
+ i: any;
+ schema!: SFSchema;
+ ui: SFUISchema = {
+ '*': {
+ spanLabelFixed: 120,
+ grid: { span: 18 }
+ }
+ };
+
+ constructor(
+ private modal: NzModalRef,
+ public service: FreightAccountService,
+ public shipperservice: ShipperBaseService,
+ ) {}
+
+ ngOnInit(): void {
+ this.initSF(this.i);
+ }
+ initSF(staff: any) {
+ this.schema = {
+ properties: {
+ name: {
+ title: '入账金额',
+ type: 'string',
+ ui: {
+ widget: 'text'
+ } as SFTextWidgetSchema,
+ default: '10000.00'
+ },
+ enterpriseInfoId: {
+ type: 'string',
+ title: '网络货运人',
+ ui: {
+ widget: 'select',
+ placeholder: '请选择',
+ visibleIf: {
+ _$expand: (value: boolean) => value,
+ },
+ allowClear: true,
+ asyncData: () => this.shipperservice.getNetworkFreightForwarder(),
+ },
+ },
+ name3: {
+ title: '银行类型',
+ type: 'string',
+ ui: {
+ widget: 'text'
+ } as SFTextWidgetSchema,
+ default: '平安银行'
+ },
+ receiveName: {
+ type: 'string',
+ title: '分配对象',
+ enum: [{ label: '全部', value: '全部' }],
+ ui: {
+ widget: 'select',
+ placeholder: '请选择'
+ },
+ default: ''
+ },
+ licensePhotoWatermark: {
+ type: 'string',
+ title: '上传凭证',
+ ui: {
+ ...IMAGECONFIG,
+ change: args => {
+ if (args.type === 'success') {
+ this.sf.setValue('/licensePhoto', args.fileList[0].response.data.fullFilePath);
+ }
+ }
+ } as SFUploadWidgetSchema
+ }
+ },
+ required: ['name', 'name2', 'name3', 'receiveName']
+ };
+ }
+}
diff --git a/src/app/routes/financial-management/components/advance-collection/advance-collection-detail/advance-collection-detail.component.html b/src/app/routes/financial-management/components/advance-collection/advance-collection-detail/advance-collection-detail.component.html
new file mode 100644
index 00000000..f61ad33d
--- /dev/null
+++ b/src/app/routes/financial-management/components/advance-collection/advance-collection-detail/advance-collection-detail.component.html
@@ -0,0 +1,86 @@
+
+
+
+
+
+
+
+
+
+
+ 基本信息
+
+ {{ costInfo?.ltdName }}
+
+
+ {{ costInfo?.banktypeLabel }}
+
+
+ {{ costInfo?.artoname }}
+
+
+ {{ costInfo?.cnoName }}
+
+
+ {{ costInfo?.ltdaccountId }}
+
+
+ {{ costInfo?.brmmoney |currency }}
+
+
+ {{ costInfo?.brmtypeLabel }}
+
+
+
+
+
+
+
+
+
+
+
+
+ {{index+1}}
+
+
+
+
+
+
+
+ {{index+1}}
+
+
+
+
+
\ No newline at end of file
diff --git a/src/app/routes/financial-management/components/advance-collection/advance-collection-detail/advance-collection-detail.component.ts b/src/app/routes/financial-management/components/advance-collection/advance-collection-detail/advance-collection-detail.component.ts
new file mode 100644
index 00000000..0ddf08f4
--- /dev/null
+++ b/src/app/routes/financial-management/components/advance-collection/advance-collection-detail/advance-collection-detail.component.ts
@@ -0,0 +1,150 @@
+import { Component, OnInit, ViewChild } from '@angular/core';
+import { ActivatedRoute } from '@angular/router';
+import { STComponent, STColumn, STRequestOptions } from '@delon/abc/st';
+import { SFComponent, SFDateWidgetSchema, SFSchema } from '@delon/form';
+import { FreightAccountService } from '../../../services/freight-account.service';
+
+@Component({
+ selector: 'app-advance-collection-detail',
+ templateUrl: './advance-collection-detail.component.html',
+ styleUrls: ['../../../../commom/less/box.less', '../../../../commom/less/basic-board.less']
+})
+export class AdvanceCollectionDetailComponent implements OnInit {
+ @ViewChild('inputST', { static: true })
+ inputST!: STComponent;
+ columns: { [key: string]: STColumn[] } = this.initST();
+ @ViewChild('infoST', { static: true })
+ infoST!: STComponent;
+ costInfo: any = {};
+ id: any = null;
+
+ @ViewChild('sf', { static: false })
+ inputSF!: SFComponent;
+ @ViewChild('sf', { static: false })
+ infoSF!: SFComponent;
+ inputSearchSchema: SFSchema = this.initInputSF();
+ infoSearchSchema: SFSchema = this.initInfoSF();
+ constructor(public service: FreightAccountService, private route: ActivatedRoute) {
+ this.id = route.snapshot.params.id;
+ this.loadDetail(this.id);
+ }
+
+ ngOnInit(): void {}
+
+ beforeReq = (requestOptions: STRequestOptions) => {
+ Object.assign(requestOptions.body, {
+ id: this.id
+ });
+ return requestOptions;
+ };
+
+ loadDetail(id: any) {
+ this.service.request(this.service.$api_get_advance_collection_header, { id }).subscribe(res => {
+ if (res) {
+ this.costInfo = res;
+ }
+ });
+ }
+
+ /**
+ * 重置表单
+ */
+ resetInputSF() {
+ this.inputSF.reset();
+ }
+ /**
+ * 重置表单
+ */
+ resetInfoSF() {
+ this.infoSF.reset();
+ }
+
+ goBack() {
+ history.go(-1);
+ }
+
+ private initInputSF(): SFSchema {
+ return {
+ properties: {
+ feedate: {
+ title: '到账日期',
+ type: 'string',
+ ui: {
+ widget: 'sl-from-to-search',
+ format: 'yyyy-MM-dd'
+ } as SFDateWidgetSchema
+ },
+ billHCode: {
+ type: 'string',
+ title: '收款单号',
+ ui: {
+ placeholder: '请输入'
+ }
+ }
+ }
+ };
+ }
+
+ private initInfoSF(): SFSchema {
+ return {
+ properties: {
+ feedate: {
+ title: '核销日期',
+ type: 'string',
+ ui: {
+ widget: 'sl-from-to-search',
+ format: 'yyyy-MM-dd'
+ } as SFDateWidgetSchema
+ },
+ billHCode: {
+ type: 'string',
+ title: '核销单号',
+ ui: {
+ placeholder: '请输入'
+ }
+ }
+ }
+ };
+ }
+
+ private initST(): { [key: string]: STColumn[] } {
+ return {
+ input: [
+ { title: '序号', render: 'no', width: 70, className: 'text-left' },
+ { title: '收款单号', index: 'brmHCode', className: 'text-left', width: 200 },
+ // { title: '到账日期', index: 'billHId', className: 'text-center', width: 150 },
+ {
+ title: '到账金额',
+ index: 'yskmoney',
+ type: 'widget',
+ className: 'text-right',
+ widget: { type: 'currency-chy', params: ({ record }) => ({ value: record.yskmoney }) },
+ width: 140
+ },
+ {
+ title: '转预收金额',
+ index: 'yskmoney',
+ type: 'widget',
+ className: 'text-right',
+ widget: { type: 'currency-chy', params: ({ record }) => ({ value: record.yskmoney }) },
+ width: 140
+ },
+ // { title: '预收备注', index: 'callNo', width: 200 }
+ ],
+ info: [
+ { title: '序号', render: 'no', width: 70, className: 'text-left' },
+ { title: '核销单号', index: 'ahxcode', className: 'text-left', width: 200 },
+ { title: '核销日期', index: 'ahxdate', className: 'text-center', width: 150 },
+ {
+ title: '核销金额',
+ index: 'ahxmoney',
+ type: 'widget',
+ className: 'text-right',
+ widget: { type: 'currency-chy', params: ({ record }) => ({ value: record.ahxmoney }) },
+ width: 200
+ },
+ { title: '核销备注', index: 'remarks', className: 'text-left', width: 200 }
+ ]
+ };
+ }
+}
diff --git a/src/app/routes/financial-management/components/advance-collection/advance-collection.component.html b/src/app/routes/financial-management/components/advance-collection/advance-collection.component.html
new file mode 100644
index 00000000..065f29b2
--- /dev/null
+++ b/src/app/routes/financial-management/components/advance-collection/advance-collection.component.html
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/app/routes/financial-management/components/advance-collection/advance-collection.component.ts b/src/app/routes/financial-management/components/advance-collection/advance-collection.component.ts
new file mode 100644
index 00000000..1462a5cd
--- /dev/null
+++ b/src/app/routes/financial-management/components/advance-collection/advance-collection.component.ts
@@ -0,0 +1,164 @@
+import { Component, ViewChild } from '@angular/core';
+import { Router } from '@angular/router';
+import { STComponent, STColumn, STRequestOptions } from '@delon/abc/st';
+import { SFComponent, SFSchema, SFDateWidgetSchema } from '@delon/form';
+import { NzModalService } from 'ng-zorro-antd/modal';
+
+import { FreightAccountService } from '../../services/freight-account.service';
+
+@Component({
+ selector: 'app-advance-collection',
+ templateUrl: './advance-collection.component.html',
+ styleUrls: ['../../../commom/less/box.less', '../../../commom/less/expend-but.less']
+})
+export class AdvanceCollectionComponent {
+ @ViewChild('st', { static: true })
+ st!: STComponent;
+ @ViewChild('sf', { static: false })
+ sf!: SFComponent;
+
+ searchSchema: SFSchema = this.initSF();
+ columns: STColumn[] = this.initST();
+ _$expand = false;
+
+ constructor(public service: FreightAccountService, private router: Router, private modal: NzModalService) {}
+
+ beforeReq = (requestOptions: STRequestOptions) => {
+ if (this.sf) {
+ Object.assign(requestOptions.body, { ...this.sf.value });
+ }
+ return requestOptions;
+ };
+
+ /**
+ * 重置表单
+ */
+ resetSF() {
+ this.sf.reset();
+ this._$expand = false;
+ }
+
+ /**
+ * 伸缩查询条件
+ */
+ expandToggle() {
+ this._$expand = !this._$expand;
+ this.sf?.setValue('/expand', this._$expand);
+ }
+
+ exportList() {
+ this.service.exportStart( { ...this.sf.value, pageSize: -1 }, this.service.$api_get_reportYskBla,);
+ }
+
+ private initSF(): SFSchema {
+ return {
+ properties: {
+ expand: {
+ type: 'boolean',
+ ui: {
+ hidden: true
+ }
+ },
+ ltdId: {
+ type: 'string',
+ title: '网络货运人',
+ ui: {
+ widget: 'select',
+ placeholder: '请选择',
+ allowClear: true,
+ asyncData: () => this.service.getNetworkFreightForwarder()
+ }
+ },
+ cno: {
+ type: 'string',
+ title: '结算客户',
+ ui: {
+ widget: 'select',
+ placeholder: '请选择',
+ allowClear: true,
+ asyncData: () => this.service.getCloseAccount()
+ }
+ },
+ arto: {
+ type: 'string',
+ title: '付款人',
+ ui: {
+ widget: 'select',
+ serverSearch: true,
+ searchDebounceTime: 300,
+ searchLoadingText: '搜索中...',
+ allowClear: true,
+ onSearch: (q: any) => this.service.getEnterpriceList({ enterpriseName: q })
+ }
+ },
+ brmtype: {
+ type: 'string',
+ title: '收款类型',
+ enum: [{ label: '全部', value: null }],
+ ui: {
+ widget: 'select',
+ placeholder: '请选择',
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ },
+ default: null
+ },
+ banktype: {
+ type: 'string',
+ title: '银行类型',
+ enum: [
+ { label: '全部', value: null },
+ { label: '平安银行', value: '1' },
+ { label: '浦发银行', value: '2' }
+ ],
+ ui: {
+ widget: 'select',
+ placeholder: '请选择',
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ },
+ default: null
+ }
+ }
+ };
+ }
+
+ private initST(): STColumn[] {
+ return [
+ { title: '网络货运人', width: 160, index: 'ltdName' },
+ { title: '银行类型', width: 120, index: 'banktypeLabel' },
+ { title: '收款账户', width: 150, index: 'ltdaccountId' },
+ { title: '收款类型', width: 120, index: 'brmtypeLabel' },
+ {
+ title: '预收余额',
+ index: 'yskmoney',
+ width: 140,
+ type: 'widget',
+ className: 'text-right',
+ widget: { type: 'currency-chy', params: ({ record }) => ({ value: record.yskmoney }) }
+ },
+ { title: '付款人', index: 'artoName', width: 180 },
+ { title: '结算客户', index: 'cnoName', width: 150 },
+ {
+ title: '操作',
+ width: 120,
+ className: 'text-center',
+ fixed: 'right',
+ buttons: [
+ {
+ text: '浏览',
+ click: item => this.router.navigate([`/financial-management/advance-collection/detail/${item.id}`])
+ }
+ // {
+ // text: '核销'
+ // },
+ // {
+ // text: '退款'
+ // }
+ ]
+ }
+ ];
+ }
+}
diff --git a/src/app/routes/financial-management/components/cost-management/cost-management-detail/cost-management-detail.component.html b/src/app/routes/financial-management/components/cost-management/cost-management-detail/cost-management-detail.component.html
new file mode 100644
index 00000000..976d3b4a
--- /dev/null
+++ b/src/app/routes/financial-management/components/cost-management/cost-management-detail/cost-management-detail.component.html
@@ -0,0 +1,150 @@
+
+
+
+
+
+
+
+
+
+
+ 基本信息(应收费用)
+
+ {{ costInfo?.ltdName }}
+
+
+ {{ costInfo?.feetypeLabel }}
+
+
+ {{ costInfo?.arremarks }}
+
+
+ {{ costInfo?.artoname }}
+
+
+ {{ costInfo?.arvattypeLabel }}
+
+
+ {{ costInfo?.armoeny | currency }}
+
+
+ {{ costInfo?.armoeny | currency }}
+
+
+ {{ costInfo?.armoeny | currency }}
+
+
+
+ 基本信息(应付费用)
+
+ {{ costInfo?.ltdName }}
+
+
+ {{ costInfo?.feetypeLabel }}
+
+ {{ costInfo?.hrmoney | currency}}
+
+ {{ costInfo?.hrremarks }}
+
+
+ {{ costInfo?.hrtoname }}
+
+
+ {{ costInfo?.hrvattypeLabel }}
+
+
+ {{ costInfo?.hrmoney | currency}}
+
+
+ {{ (costInfo?.hrvatmoney || 0) | currency }}
+
+
+ {{ costInfo?.hrmoney | currency}}
+
+
+
+
+
+
+
+
+
+
+
+ {{ index + 1 }}
+
+
+ {{ costInfo?.artocode}}/{{ costInfo?.artonames}}
+
+
+ {{ item.armoney | currency}}
+ {{ item.hrmoney | currency}}
+
+
+
+ {{ item.armoney | currency}}
+ {{ item.hrmoney | currency}}
+
+
+ {{ item.arkpmoney | currency}}
+
+
+
+ {{costInfo.billTime}}
+
+
+ {{costInfo.cnoName}}
+
+
+
+
+
+
+ {{ item.armoney | currency}}
+
+
+ {{ item.vatmoney | currency}}
+
+
+ {{ index + 1 }}
+
+
+
+
+
+
+ {{ item.ahxmoney | currency}}
+
+
+ {{ item.ahxmoney | currency}}
+
+
+ {{ index + 1 }}
+
+ 已核销
+
+
+
+
+
+
+
+
+ {{ index + 1 }}
+
+
+ {{ item.phxmoney | currency}}
+
+
+
+
+
\ No newline at end of file
diff --git a/src/app/routes/financial-management/components/cost-management/cost-management-detail/cost-management-detail.component.less b/src/app/routes/financial-management/components/cost-management/cost-management-detail/cost-management-detail.component.less
new file mode 100644
index 00000000..aa2721f6
--- /dev/null
+++ b/src/app/routes/financial-management/components/cost-management/cost-management-detail/cost-management-detail.component.less
@@ -0,0 +1,24 @@
+:host::ng-deep {
+ .search-box {
+ .ant-card-body {
+ padding-bottom: 18px;
+ }
+ }
+
+ .content-box {
+ .ant-card-body {
+ padding-top: 14px;
+ }
+ }
+
+
+ .text-truncate {
+ white-space: normal;
+ }
+
+ .ant-form-item {
+ margin-bottom: 0;
+ }
+
+
+}
\ No newline at end of file
diff --git a/src/app/routes/financial-management/components/cost-management/cost-management-detail/cost-management-detail.component.ts b/src/app/routes/financial-management/components/cost-management/cost-management-detail/cost-management-detail.component.ts
new file mode 100644
index 00000000..981f1776
--- /dev/null
+++ b/src/app/routes/financial-management/components/cost-management/cost-management-detail/cost-management-detail.component.ts
@@ -0,0 +1,109 @@
+import { Component, OnInit, ViewChild } from '@angular/core';
+import { ActivatedRoute } from '@angular/router';
+import { STComponent, STColumn } from '@delon/abc/st';
+import { FreightAccountService } from '../../../services/freight-account.service';
+
+@Component({
+ selector: 'app-cost-management-detail',
+ templateUrl: './cost-management-detail.component.html',
+ styleUrls: ['./cost-management-detail.component.less']
+})
+export class CostManagementDetailComponent implements OnInit {
+ @ViewChild('st', { static: true })
+ st!: STComponent;
+ columns: { [key: string]: STColumn[] } = this.initST();
+ data = [];
+ textStatus: boolean = false;
+ costInfo: any = {};
+ constructor(public service: FreightAccountService, private route: ActivatedRoute) {
+ const id = route.snapshot.params.id;
+ this.loadDetail(id);
+ }
+
+ ngOnInit(): void {
+ if (this.route.snapshot?.queryParams?.status === '应收') {
+ this.textStatus = false;
+ } else {
+ this.textStatus = true;
+ }
+ }
+
+ loadDetail(id: any) {
+ this.service.request(this.service.$api_get_cost_detail, { id }).subscribe(res => {
+ if (res) {
+ this.costInfo = res;
+ }
+ });
+ }
+
+ goBack() {
+ history.go(-1);
+ }
+
+ private initST(): { [key: string]: STColumn[] } {
+ return {
+ cost: [
+ { title: '序号', render: 'no', width: 70, className: 'text-left' },
+ { title: '费用明细号', index: 'feeHId', className: 'text-left', width: 200 },
+ { title: '订单号', index: 'billHCode', className: 'text-left', width: 200 },
+ { title: '订单日期', render: 'billTime', className: 'text-left', width: 200 },
+ { title: '运单号', index: 'waybillHCode', className: 'text-left', width: 200 },
+ { title: '运单日期', index: 'waybillDate', className: 'text-left', width: 200, format: _ => this.costInfo.billTime },
+ { title: '结算客户', render: 'cnoName', className: 'text-left', width: 200 },
+ { title: '订单费用类型', index: 'billLTypeLabel', className: 'text-left', width: 200 },
+ { title: '费用科目', index: 'feeSubName', className: 'text-left', width: 200 },
+ {
+ title: '税率',
+ index: 'arvatrate',
+ className: 'text-right',
+ width: 200,
+ format: item => `${item.arvatrate ? ((item.arvatrate as number) * 100).toFixed(2) : 0}%`
+ },
+ { title: '费用金额', render: 'hrvatmoney', className: 'text-right', width: 200 },
+ { title: '收/付款金额', render: 'armoney', className: 'text-right', width: 200 },
+ { title: '开/收票金额', render: 'arkpmoney', className: 'text-right', width: 200 }
+ ],
+ requested: [
+ { title: '序号', render: 'no', width: 70, className: 'text-left' },
+ { title: '费用明细号', index: 'feeLId', className: 'text-left', width: 200 },
+ { title: '发票申请', index: 'vatinvcode', className: 'text-left', width: 200 },
+ { title: '发票类型', index: 'invoicetypeLabel', className: 'text-left', width: 200 },
+ { title: '发票号', index: 'invoiceno', className: 'text-left', width: 200 },
+ { title: '发票日期', index: 'invoicedate', className: 'text-left', width: 200 },
+ { title: '发票状态', index: 'stsLabel', className: 'text-left', width: 200 },
+ { title: '应收金额', render: 'armoney', className: 'text-left', width: 200 },
+ { title: '开票金额', render: 'vatmoney', className: 'text-left', width: 200 }
+ ],
+ collection: [
+ { title: '序号', render: 'no', width: 70 },
+ { title: '费用明细号', index: 'feeLId', className: 'text-left', width: 200 },
+ { title: '收款单号', index: 'ahxHId', className: 'text-left', width: 200 },
+ { title: '收款日期', index: 'feedate', className: 'text-left', width: 200 },
+ { title: '收款状态', render: 'status', className: 'text-left', width: 150 },
+ { title: '应收金额', render: 'ahxmoney', className: 'text-left', width: 120 },
+ { title: '收款金额', render: 'ahxmoney', className: 'text-left', width: 120 }
+ ],
+ ticket: [
+ { title: '序号', render: 'no', width: 70 },
+ { title: '费用明细号', index: 'callNo' },
+ { title: '进项发票号', index: 'callNo' },
+ { title: '发票类型', index: 'callNo' },
+ { title: '发票日期', index: 'callNo' },
+ { title: '认证日期', index: 'callNo' },
+ { title: '发票状态', index: 'callNo' },
+ { title: '应付金额', index: 'callNo' },
+ { title: '收票金额', index: 'callNo' }
+ ],
+ payment: [
+ { title: '序号', render: 'no', width: 70 },
+ { title: '费用明细号', index: 'feeHCode' },
+ { title: '付款单号', index: 'phxHId' },
+ { title: '要求日期', index: 'billTime' },
+ { title: '确认日期', index: 'feedate' },
+ // { title: '付款状态', index: 'callNo' },
+ { title: '应付金额', render: 'phxmoney' },
+ { title: '付款金额', render: 'phxmoney' }
+ ]
+ };
+ }
+}
diff --git a/src/app/routes/financial-management/components/cost-management/cost-management.component.html b/src/app/routes/financial-management/components/cost-management/cost-management.component.html
new file mode 100644
index 00000000..c9d36bdd
--- /dev/null
+++ b/src/app/routes/financial-management/components/cost-management/cost-management.component.html
@@ -0,0 +1,70 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.armoeny | currency }}
+
+
+ {{ item.hrmoney | currency }}
+
+ {{ item.cnoCode }}/{{ item.cnoName }}
+
+ {{ item.hrpaymoney | currency }}
+
+
+ {{ item.hrvatmoney | currency }}
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/app/routes/financial-management/components/cost-management/cost-management.component.ts b/src/app/routes/financial-management/components/cost-management/cost-management.component.ts
new file mode 100644
index 00000000..57203a7e
--- /dev/null
+++ b/src/app/routes/financial-management/components/cost-management/cost-management.component.ts
@@ -0,0 +1,325 @@
+import { Component, OnInit, ViewChild } from '@angular/core';
+import { Router } from '@angular/router';
+import { STComponent, STColumn, STRequestOptions } from '@delon/abc/st';
+import { SFComponent, SFSchema, SFDateWidgetSchema, SFSelectWidgetSchema, SFSchemaEnum } from '@delon/form';
+import { NzModalService } from 'ng-zorro-antd/modal';
+import { of } from 'rxjs';
+import { map } from 'rxjs/operators';
+import { FreightAccountService } from '../../services/freight-account.service';
+
+@Component({
+ selector: 'app-cost-management',
+ templateUrl: './cost-management.component.html',
+ styleUrls: ['../../../commom/less/box.less']
+})
+export class CostManagementComponent implements OnInit {
+ @ViewChild('st', { static: true })
+ st!: STComponent;
+ @ViewChild('sf', { static: false })
+ sf!: SFComponent;
+ @ViewChild('auditModal', { static: false })
+ auditModal!: any;
+ searchSchema: SFSchema = this.initSF();
+ columns: STColumn[] = this.initST();
+
+ selectedRows: any[] = [];
+
+ _$expand = false;
+
+ constructor(public service: FreightAccountService, private nzModalService: NzModalService, private router: Router) {}
+
+ ngOnInit(): void {}
+
+ beforeReq = (requestOptions: STRequestOptions) => {
+ if (this.sf) {
+ Object.assign(requestOptions.body, {
+ ...this.sf.value,
+ feedate: {
+ start: this.sf.value.feedate?.[0] || '',
+ end: this.sf.value.feedate?.[1] || ''
+ },
+ createTime: {
+ start: this.sf.value.createTime?.[0] || '',
+ end: this.sf.value.createTime?.[1] || ''
+ }
+ });
+ }
+ return requestOptions;
+ };
+
+ auditAction(item: any) {
+ const modal = this.nzModalService.create({
+ nzTitle: '审核',
+ nzContent: this.auditModal,
+ nzFooter: [
+ {
+ label: '拒绝',
+ type: 'default',
+ onClick: () => {
+ modal.destroy();
+ }
+ },
+ {
+ label: '通过',
+ type: 'primary',
+ onClick: () => {
+ modal.destroy();
+ }
+ }
+ ]
+ });
+ modal.afterClose.subscribe(res => {
+ this.st.load();
+ });
+ }
+
+ /**
+ * 重置表单
+ */
+ resetSF() {
+ this.sf.reset();
+ this._$expand = false;
+ }
+
+ /**
+ * 伸缩查询条件
+ */
+ expandToggle() {
+ this._$expand = !this._$expand;
+ this.sf?.setValue('/expand', this._$expand);
+ }
+
+ exportList() {
+ this.service.exportStart( { ...this.sf.value, pageSize: -1 }, this.service.$api_get_exportPlatformAccountBalanceByOperator,);
+ }
+
+ routeTo(url: string, params?: any, status?: any) {
+ this.router.navigate([url], { queryParams: params });
+ }
+
+ private initSF(): SFSchema {
+ return {
+ properties: {
+ expand: {
+ type: 'boolean',
+ ui: {
+ hidden: true
+ }
+ },
+ feecode: {
+ type: 'string',
+ title: '费用单号',
+ ui: { placeholder: '请输入' }
+ },
+ billHCode: {
+ type: 'string',
+ title: '订单号',
+ ui: { placeholder: '请输入' }
+ },
+ waybillHCode: {
+ type: 'string',
+ title: '运单号',
+ ui: {
+ placeholder: '请输入'
+ }
+ },
+ feedate: {
+ title: '费用日期',
+ type: 'string',
+ ui: {
+ widget: 'sl-from-to-search',
+ format: 'yyyy-MM-dd',
+ placeholder: '请选择',
+ nzShowTime: true,
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ } as SFDateWidgetSchema
+ },
+ feetype: {
+ type: 'string',
+ title: '费用类型',
+ enum: [
+ { label: '全部', value: '' },
+ { label: '应收', value: 1 },
+ { label: '应付', value: 2 }
+ ],
+ ui: {
+ widget: 'select',
+ placeholder: '请选择',
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ },
+ default: ''
+ },
+ feeSubId: {
+ type: 'string',
+ title: '费用科目',
+ enum: [
+ { label: '全部', value: '全部' },
+ { label: '运输费', value: '1475197820443299842' },
+ { label: '附加费', value: '1476197820443299842 ' },
+ ],
+ ui: {
+ widget: 'select',
+ placeholder: '请选择',
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ }
+ },
+ ltdId: {
+ type: 'string',
+ title: '网络货运人',
+ ui: {
+ widget: 'select',
+ placeholder: '请选择',
+ allowClear: true,
+ asyncData: () => this.service.getNetworkFreightForwarder(),
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ }
+ },
+ hrto: {
+ type: 'string',
+ title: '应付对象',
+ ui: {
+ widget: 'select',
+ serverSearch: true,
+ searchDebounceTime: 300,
+ searchLoadingText: '搜索中...',
+ allowClear: true,
+ onSearch: (q: any) => {
+ let str = q.replace(/^\s+|\s+$/g, '');
+ if (str) {
+ return this.service
+ .request(this.service.$api_crm_enterpriceList, { enterpriseName: str })
+ .pipe(map((res: any) => (res as any[]).map(i => ({ label: i.enterpriseName, value: i.enterpriseId } as SFSchemaEnum))))
+ .toPromise();
+ } else {
+ return of([]);
+ }
+ },
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ } as SFSelectWidgetSchema
+ },
+ arto: {
+ type: 'string',
+ title: '应收对象',
+ ui: {
+ widget: 'select',
+ serverSearch: true,
+ searchDebounceTime: 300,
+ searchLoadingText: '搜索中...',
+ allowClear: true,
+ onSearch: (q: any) => {
+ let str = q.replace(/^\s+|\s+$/g, '');
+ if (str) {
+ return this.service
+ .request(this.service.$api_crm_enterpriceList, { enterpriseName: str })
+ .pipe(map((res: any) => (res as any[]).map(i => ({ label: i.enterpriseName, value: i.crmUserId } as SFSchemaEnum))))
+ .toPromise();
+ } else {
+ return of([]);
+ }
+ },
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ } as SFSelectWidgetSchema
+ },
+ createTime: {
+ title: '创建时间',
+ type: 'string',
+ ui: {
+ widget: 'sl-from-to-search',
+ format: 'yyyy-MM-dd',
+ placeholder: '请选择',
+ nzShowTime: true,
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ } as SFDateWidgetSchema
+ },
+ ishrhx: {
+ type: 'string',
+ title: '应付核销',
+ enum: [
+ { label: '全部', value: '' },
+ { label: '否', value: 0 },
+ { label: '是', value: 1 }
+ ],
+ ui: {
+ widget: 'select',
+ placeholder: '请选择',
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ },
+ default: ''
+ },
+ cno: {
+ type: 'string',
+ title: '结算客户',
+ ui: {
+ widget: 'select',
+ placeholder: '请选择',
+ allowClear: true,
+ asyncData: () => this.service.getCloseAccount(),
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ }
+ }
+ }
+ };
+ }
+
+ private initST(): STColumn[] {
+ return [
+ { title: '费用单号', fixed: 'left', index: 'feecode', width: 200, className: 'text-left' },
+ { title: '网络货运人', index: 'ltdName', width: 220, className: 'text-left' },
+ { title: '订单号', index: 'billHCode', width: 200, className: 'text-left' },
+ { title: '运单号', index: 'waybillHCode', width: 200, className: 'text-left' },
+ { title: '费用日期', index: 'feedate', width: 200, className: 'text-left' },
+ { title: '费用类型', index: 'feetypeLabel', width: 150, className: 'text-center' },
+ { title: '应付核销', index: 'ishrhx', width: 200, type: 'enum', enum: { 0: '否', 1: '是' }, className: 'text-left' },
+ { title: '结算客户', render: 'artocode', width: 200, className: 'text-left' },
+ { title: '应收对象', index: 'artoname', width: 200, className: 'text-left' },
+ { title: '应付对象', index: 'hrtoname', width: 200, className: 'text-left' },
+ { title: '应收金额', render: 'armoeny', width: 150, className: 'text-right' },
+ { title: '应付金额', render: 'hrmoney', width: 150, className: 'text-right' },
+ { title: '收/付款金额', render: 'hrpaymoney', width: 150, className: 'text-right' },
+ { title: '开/收票金额', render: 'hrvatmoney', width: 150, className: 'text-right' },
+ { title: '创建时间', index: 'createTime', type: 'date', width: 200, className: 'text-center' },
+ { title: '状态', index: 'stsLabel', width: 120, className: 'text-center' },
+ {
+ title: '操作',
+ fixed: 'right',
+ className: 'text-center',
+ width: '110px',
+ buttons: [
+ {
+ text: '浏览',
+ click: item => this.routeTo('/financial-management/cost-management/detail/' + item.id, { status: item?.feetypeLabel }),
+ acl: { ability: ['FINANCIAL-COST-view'] }
+ },
+ {
+ text: '审核',
+ click: item => this.auditAction(item),
+ iif: item => item.sts === 2,
+ acl: { ability: ['FINANCIAL-COST-audit'] }
+ }
+ // {
+ // text: '修改',
+ // click: item => this.router.navigate(['/financial-management/cost-management/expenses-receivable/1'], { queryParams: { id: 1 } })
+ // }
+ ]
+ }
+ ];
+ }
+}
diff --git a/src/app/routes/financial-management/components/cost-management/expenses-payable/expenses-payable.component.html b/src/app/routes/financial-management/components/cost-management/expenses-payable/expenses-payable.component.html
new file mode 100644
index 00000000..dcfc2646
--- /dev/null
+++ b/src/app/routes/financial-management/components/cost-management/expenses-payable/expenses-payable.component.html
@@ -0,0 +1,56 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/app/routes/financial-management/components/cost-management/expenses-payable/expenses-payable.component.less b/src/app/routes/financial-management/components/cost-management/expenses-payable/expenses-payable.component.less
new file mode 100644
index 00000000..23d2c4ba
--- /dev/null
+++ b/src/app/routes/financial-management/components/cost-management/expenses-payable/expenses-payable.component.less
@@ -0,0 +1,13 @@
+:host::ng-deep {
+
+ .content-box {
+ .ant-card-body {
+ padding-top: 14px;
+ }
+ }
+
+ nz-range-picker {
+ width: 100%;
+ }
+
+}
\ No newline at end of file
diff --git a/src/app/routes/financial-management/components/cost-management/expenses-payable/expenses-payable.component.ts b/src/app/routes/financial-management/components/cost-management/expenses-payable/expenses-payable.component.ts
new file mode 100644
index 00000000..7706a93f
--- /dev/null
+++ b/src/app/routes/financial-management/components/cost-management/expenses-payable/expenses-payable.component.ts
@@ -0,0 +1,152 @@
+import { Component, OnInit, ViewChild } from '@angular/core';
+import { ActivatedRoute } from '@angular/router';
+import { STComponent, STColumn } from '@delon/abc/st';
+import { SFComponent, SFSchema, SFDateWidgetSchema } from '@delon/form';
+import { FreightAccountService } from '../../../services/freight-account.service';
+
+@Component({
+ selector: 'app-expenses-payable',
+ templateUrl: './expenses-payable.component.html',
+ styleUrls: ['./expenses-payable.component.less']
+})
+export class ExpensesPayableComponent implements OnInit {
+ @ViewChild('st', { static: true })
+ st!: STComponent;
+ @ViewChild('sf', { static: false })
+ sf!: SFComponent;
+ schema!: SFSchema;
+ columns: STColumn[] = this.initST();
+
+ id = null;
+ data: any[] = [
+ {
+ id: 1,
+ description1: '',
+ description2: '',
+ description3: '',
+ num: null,
+ description5: ''
+ }
+ ];
+
+ constructor(public service: FreightAccountService, private route: ActivatedRoute) {
+ this.id = route.snapshot.queryParams.id;
+ if (this.id) {
+ this.schema = this.initSF({ page2: '天津怡亚通物流科技有限公司', pag2e21: '茅台集团' });
+ } else {
+ this.schema = this.initSF();
+ }
+ }
+
+ ngOnInit(): void {}
+
+ addRow() {
+ this.data.push({
+ id: this.data.length + 1,
+ description1: '',
+ description2: '',
+ description3: '',
+ num: null,
+ description5: ''
+ });
+ this.st.reload();
+ }
+
+ goBack() {
+ history.go(-1);
+ }
+
+ private initSF(data?: any): SFSchema {
+ return {
+ properties: {
+ page2: {
+ type: 'string',
+ title: '网络货运人',
+ enum: [],
+ ui: {
+ widget: data ? 'text' : 'select',
+ placeholder: '请选择'
+ },
+ default: data?.page2 || ''
+ },
+ pag2e21: {
+ title: '应付对象',
+ type: 'string',
+ enum: [],
+ ui: {
+ widget: data ? 'text' : 'select',
+ placeholder: '请选择'
+ },
+ default: data?.pag2e21 || ''
+ },
+ dee: {
+ title: '',
+ type: 'string',
+ ui: {
+ widget: 'text'
+ },
+ default: ' '
+ },
+ createTi2me: {
+ title: '费用日期',
+ type: 'string',
+ ui: {
+ widget: 'date',
+ mode: 'range',
+ format: 'yyyy-MM-dd'
+ } as SFDateWidgetSchema,
+ default: data?.createTi2me || ''
+ },
+ pa2ge2: {
+ type: 'string',
+ title: '收票方式',
+ enum: [],
+ ui: {
+ widget: 'select',
+ placeholder: '请选择'
+ },
+ default: data?.pa2ge2 || ''
+ },
+ page: {
+ type: 'string',
+ title: '应付备注',
+ ui: {
+ placeholder: '请输入'
+ },
+ default: data?.page || ''
+ }
+ },
+ required: ['page2', 'pag2e21', 'createTi2me', 'pa2ge2']
+ };
+ }
+
+ private initST(): STColumn[] {
+ return [
+ { title: '结算客户', render: 'description1', width: 150 },
+ { title: '费用科目', render: 'description2', width: 120 },
+ {
+ title: '税率',
+ render: 'description3',
+ width: 120,
+ format: item => `${item.description3 ? ((item.description3 as number) * 100).toFixed(2) : 0}%`
+ },
+ { title: '应付金额', render: 'num', width: 120 },
+ { title: '备注', render: 'description5', width: 150 },
+ {
+ title: '操作',
+ fixed: 'right',
+ className: 'text-center',
+ width: 90,
+ buttons: [
+ {
+ text: '删除',
+ click: item => {
+ this.st.removeRow(item);
+ this.data = this.data.filter(i => i.id !== item.id);
+ }
+ }
+ ]
+ }
+ ];
+ }
+}
diff --git a/src/app/routes/financial-management/components/cost-management/expenses-receivable/expenses-receivable.component.html b/src/app/routes/financial-management/components/cost-management/expenses-receivable/expenses-receivable.component.html
new file mode 100644
index 00000000..1fbc355f
--- /dev/null
+++ b/src/app/routes/financial-management/components/cost-management/expenses-receivable/expenses-receivable.component.html
@@ -0,0 +1,66 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/app/routes/financial-management/components/cost-management/expenses-receivable/expenses-receivable.component.less b/src/app/routes/financial-management/components/cost-management/expenses-receivable/expenses-receivable.component.less
new file mode 100644
index 00000000..23d2c4ba
--- /dev/null
+++ b/src/app/routes/financial-management/components/cost-management/expenses-receivable/expenses-receivable.component.less
@@ -0,0 +1,13 @@
+:host::ng-deep {
+
+ .content-box {
+ .ant-card-body {
+ padding-top: 14px;
+ }
+ }
+
+ nz-range-picker {
+ width: 100%;
+ }
+
+}
\ No newline at end of file
diff --git a/src/app/routes/financial-management/components/cost-management/expenses-receivable/expenses-receivable.component.ts b/src/app/routes/financial-management/components/cost-management/expenses-receivable/expenses-receivable.component.ts
new file mode 100644
index 00000000..b049fed3
--- /dev/null
+++ b/src/app/routes/financial-management/components/cost-management/expenses-receivable/expenses-receivable.component.ts
@@ -0,0 +1,152 @@
+import { Component, OnInit, ViewChild } from '@angular/core';
+import { ActivatedRoute } from '@angular/router';
+import { STColumn, STComponent } from '@delon/abc/st';
+import { SFComponent, SFDateWidgetSchema, SFSchema } from '@delon/form';
+import { FreightAccountService } from '../../../services/freight-account.service';
+
+@Component({
+ selector: 'app-expenses-receivable',
+ templateUrl: './expenses-receivable.component.html',
+ styleUrls: ['./expenses-receivable.component.less']
+})
+export class ExpensesReceivableComponent implements OnInit {
+ @ViewChild('st', { static: true })
+ st!: STComponent;
+ @ViewChild('sf', { static: false })
+ sf!: SFComponent;
+ schema!: SFSchema;
+ columns: STColumn[] = this.initST();
+
+ id = null;
+ data: any[] = [
+ {
+ id: 1,
+ description1: '',
+ description2: '',
+ description3: '',
+ num: null,
+ description5: ''
+ }
+ ];
+
+ constructor(public service: FreightAccountService, private route: ActivatedRoute) {
+ this.id = route.snapshot.queryParams.id;
+ if (this.id) {
+ this.schema = this.initSF({ page2: '天津怡亚通物流科技有限公司', pag2e21: '茅台集团' });
+ } else {
+ this.schema = this.initSF();
+ }
+ }
+
+ ngOnInit(): void {}
+
+ addRow() {
+ this.data.push({
+ id: this.data.length + 1,
+ description1: '',
+ description2: '',
+ description3: '',
+ num: null,
+ description5: ''
+ });
+ this.st.reload();
+ }
+
+ goBack() {
+ history.go(-1);
+ }
+
+ private initSF(data?: any): SFSchema {
+ return {
+ properties: {
+ page2: {
+ type: 'string',
+ title: '网络货运人',
+ enum: [],
+ ui: {
+ widget: data ? 'text' : 'select',
+ placeholder: '请选择'
+ },
+ default: data?.page2 || ''
+ },
+ pag2e21: {
+ title: '应收对象',
+ type: 'string',
+ enum: [],
+ ui: {
+ widget: data ? 'text' : 'select',
+ placeholder: '请选择'
+ },
+ default: data?.pag2e21 || ''
+ },
+ dee: {
+ title: '',
+ type: 'string',
+ ui: {
+ widget: 'text'
+ },
+ default: ' '
+ },
+ createTi2me: {
+ title: '费用日期',
+ type: 'string',
+ ui: {
+ widget: 'date',
+ mode: 'range',
+ format: 'yyyy-MM-dd'
+ } as SFDateWidgetSchema,
+ default: data?.createTi2me || ''
+ },
+ pa2ge2: {
+ type: 'string',
+ title: '开票方式',
+ enum: [],
+ ui: {
+ widget: 'select',
+ placeholder: '请选择'
+ },
+ default: data?.pa2ge2 || ''
+ },
+ page: {
+ type: 'string',
+ title: '应收备注',
+ ui: {
+ placeholder: '请输入'
+ },
+ default: data?.page || ''
+ }
+ },
+ required: ['page2', 'pag2e21', 'createTi2me', 'pa2ge2']
+ };
+ }
+
+ private initST(): STColumn[] {
+ return [
+ { title: '结算客户', render: 'description1', width: 150 },
+ { title: '费用科目', render: 'description2', width: 120 },
+ {
+ title: '税率',
+ render: 'description3',
+ width: 120,
+ format: item => `${item.description3 ? ((item.description3 as number) * 100).toFixed(2) : 0}%`
+ },
+ { title: '应收金额', render: 'num', width: 120 },
+ { title: '备注', render: 'description5', width: 150 },
+ {
+ title: '操作',
+ fixed: 'right',
+ className: 'text-center',
+ width: 90,
+ buttons: [
+ {
+ text: '删除',
+ click: item => {
+ this.st.removeRow(item);
+ this.data = this.data.filter(i => i.id !== item.id);
+ }
+ }
+ ]
+ }
+ ];
+ }
+}
diff --git a/src/app/routes/financial-management/components/driver-account/driver-account-detail/driver-account-detail.component.html b/src/app/routes/financial-management/components/driver-account/driver-account-detail/driver-account-detail.component.html
new file mode 100644
index 00000000..3bef51eb
--- /dev/null
+++ b/src/app/routes/financial-management/components/driver-account/driver-account-detail/driver-account-detail.component.html
@@ -0,0 +1,61 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/app/routes/financial-management/components/driver-account/driver-account-detail/driver-account-detail.component.ts b/src/app/routes/financial-management/components/driver-account/driver-account-detail/driver-account-detail.component.ts
new file mode 100644
index 00000000..bc954a6c
--- /dev/null
+++ b/src/app/routes/financial-management/components/driver-account/driver-account-detail/driver-account-detail.component.ts
@@ -0,0 +1,210 @@
+import { Component, OnInit, ViewChild } from '@angular/core';
+import { ActivatedRoute, Router } from '@angular/router';
+import { STComponent, STColumn, STChange, STRequestOptions } from '@delon/abc/st';
+import { SFComponent, SFSchema, SFDateWidgetSchema } from '@delon/form';
+import { NzModalService } from 'ng-zorro-antd/modal';
+import { FreightAccountService } from '../../../services/freight-account.service';
+
+@Component({
+ selector: 'app-driver-account-detail',
+ templateUrl: './driver-account-detail.component.html',
+ styleUrls: ['../../../../commom/less/box.less', '../../../../commom/less/expend-but.less']
+})
+export class DriverAccountDetailComponent implements OnInit {
+ @ViewChild('st', { static: true })
+ st!: STComponent;
+ @ViewChild('sf', { static: false })
+ sf!: SFComponent;
+ columns: STColumn[] = this.initST();
+ searchSchema: SFSchema = this.initSF();
+
+ _$expand = false;
+
+ info: any = {};
+ params: any = {};
+ constructor(public service: FreightAccountService, private route: ActivatedRoute) {
+ this.params = route.snapshot.queryParams;
+ }
+
+ ngOnInit(): void {
+ this.loadInfo();
+ }
+
+ beforeReq = (requestOptions: STRequestOptions) => {
+ Object.assign(requestOptions.body, {
+ ltdId: this.params.ltdId,
+ projectId: this.params.projectId,
+ enterpriseId: this.params.enterpriseId,
+ roleId: this.params.roleId,
+ bankType: this.params.bankType
+ });
+ if (this.sf) {
+ Object.assign(requestOptions.body, {
+ ...this.sf.value,
+ createTime: {
+ start: this.sf.value?.createTime?.[0] || '',
+ end: this.sf.value?.createTime?.[1] || ''
+ }
+ });
+ }
+ return requestOptions;
+ };
+
+ loadInfo() {
+ this.service
+ .request(this.service.$api_get_driver_account_balance_detail, {
+ ...this.sf?.value,
+ ltdId: this.params.ltdId,
+ projectId: this.params.projectId,
+ enterpriseId: this.params.enterpriseId,
+ roleId: this.params.roleId,
+ pageIndex: this.st.pi,
+ pageSize: this.st.ps,
+ bankType: this.params.bankType,
+ createTime: {
+ start: this.sf?.value?.createTime?.[0] || '',
+ end: this.sf?.value?.createTime?.[1] || ''
+ }
+ })
+ .subscribe(res => {
+ if (res) {
+ this.info = res;
+ }
+ });
+ }
+
+ stChange(e: STChange): void {}
+
+ exportList() {
+ this.service.exportStart(
+ {
+ ...this.sf.value,
+ pageSize: -1,
+ ltdId: this.params.ltdId,
+ projectId: this.params.projectId,
+ enterpriseId: this.params.enterpriseId,
+ roleId: this.params.roleId,
+ bankType: this.params.bankType,
+ createTime: {
+ start: this.sf.value?.createTime?.[0] || '',
+ end: this.sf.value?.createTime?.[1] || ''
+ }
+ },
+ this.service.$api_get_exportAccountBalanceDriverByOperatorPage
+ );
+ }
+
+ goBack() {
+ history.go(-1);
+ }
+
+ /**
+ * 重置表单
+ */
+ resetSF() {
+ this.sf.reset();
+ this._$expand = false;
+ }
+
+ /**
+ * 伸缩查询条件
+ */
+ expandToggle() {
+ this._$expand = !this._$expand;
+ this.sf?.setValue('/expand', this._$expand);
+ }
+
+ private initSF(): SFSchema {
+ return {
+ properties: {
+ expand: {
+ type: 'boolean',
+ ui: {
+ hidden: true
+ }
+ },
+ createTime: {
+ title: '交易时间',
+ type: 'string',
+ ui: {
+ widget: 'sl-from-to-search',
+ format: 'yyyy-MM-dd',
+ placeholder: '请选择',
+ nzShowTime: true
+ } as SFDateWidgetSchema
+ },
+ transactionNumber: {
+ type: 'string',
+ title: '流水号',
+ ui: {
+ placeholder: '请输入'
+ }
+ },
+ businessNumber: {
+ type: 'string',
+ title: '关联单号',
+ ui: {
+ placeholder: '请输入'
+ }
+ },
+ tradeType: {
+ type: 'string',
+ title: '交易类型',
+ ui: {
+ widget: 'dict-select',
+ params: { dictKey: 'trade:type' },
+ placeholder: '请选择',
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ },
+ default: ''
+ },
+ incomeType: {
+ type: 'string',
+ title: '收支类型',
+ ui: {
+ widget: 'dict-select',
+ params: { dictKey: 'income:type' },
+ placeholder: '请选择',
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ },
+ default: ''
+ }
+ }
+ };
+ }
+
+ private initST(): STColumn[] {
+ return [
+ { title: '交易时间', index: 'createTime', type: 'date', width: 150 },
+ { title: '流水号', index: 'channelPaySn', width: 170 },
+ { title: '交易类型', index: 'tradeTypeLabel', className: 'text-center', width: 150 },
+ { title: '交易单号', index: 'businessNumber', width: 190 },
+ { title: '订单号', index: 'orderSn', width: 190 },
+ { title: '运单号', index: 'transportSn', width: 190 },
+ { title: '收支类型', index: 'incomeTypeLabel', className: 'text-center', width: 150 },
+ {
+ title: '交易金额',
+ index: 'amount',
+ width: 150,
+ type: 'widget',
+ className: 'text-right',
+ widget: { type: 'currency-chy', params: ({ record }) => ({ value: record.amount }) }
+ },
+ {
+ title: '账户余额',
+ index: 'accountBalance',
+ width: 150,
+ type: 'widget',
+ className: 'text-right',
+ widget: { type: 'currency-chy', params: ({ record }) => ({ value: record.accountBalance }) }
+ },
+ { title: '付款方', index: 'payName', width: 150 },
+ { title: '收款方', index: 'incomeName', width: 150 },
+ { title: '备注', index: 'tradeContent', width: 150 }
+ ];
+ }
+}
diff --git a/src/app/routes/financial-management/components/driver-account/driver-account.component.html b/src/app/routes/financial-management/components/driver-account/driver-account.component.html
new file mode 100644
index 00000000..325369c1
--- /dev/null
+++ b/src/app/routes/financial-management/components/driver-account/driver-account.component.html
@@ -0,0 +1,43 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{
+ (parseFloat(item.availableBalance) + parseFloat(item.freezeBalance)).toFixed(2) | currency
+ }}
+
+
+
diff --git a/src/app/routes/financial-management/components/driver-account/driver-account.component.ts b/src/app/routes/financial-management/components/driver-account/driver-account.component.ts
new file mode 100644
index 00000000..4892f27a
--- /dev/null
+++ b/src/app/routes/financial-management/components/driver-account/driver-account.component.ts
@@ -0,0 +1,237 @@
+import { CurrencyPipe } from '@angular/common';
+import { Component, OnInit, ViewChild } from '@angular/core';
+import { Router } from '@angular/router';
+import { STComponent, STColumn, STChange, STRequestOptions } from '@delon/abc/st';
+import { SFComponent, SFSchema, SFDateWidgetSchema } from '@delon/form';
+import { ShipperBaseService } from '@shared';
+import { NzModalService } from 'ng-zorro-antd/modal';
+import { AccountDetailComponent } from 'src/app/shared/components/account-detail/account-detail.component';
+import { FreightAccountService } from '../../services/freight-account.service';
+
+@Component({
+ selector: 'app-driver-account',
+ templateUrl: './driver-account.component.html',
+ styleUrls: ['../../../commom/less/box.less', '../../../commom/less/expend-but.less']
+})
+export class DriverAccountComponent implements OnInit {
+ @ViewChild('st', { static: true })
+ st!: STComponent;
+ @ViewChild('sf', { static: false })
+ sf!: SFComponent;
+ loading: boolean = true;
+ searchSchema: SFSchema = this.initSF();
+ columns: STColumn[] = this.initST();
+ _$expand = false;
+
+ constructor(public service: FreightAccountService, private router: Router, private modal: NzModalService) {}
+
+ ngOnInit(): void {}
+
+ beforeReq = (requestOptions: STRequestOptions) => {
+ Object.assign(requestOptions.body, { accountType: 2 });
+ if (this.sf) {
+ Object.assign(requestOptions.body, { ...this.sf.value });
+ if (this.sf.value.createTime) {
+ Object.assign(requestOptions.body, {
+ createTime: {
+ start: this.sf.value.createTime?.[0] || '',
+ end: this.sf.value.createTime?.[1] || ''
+ }
+ });
+ }
+ }
+ this.loading = true;
+ return requestOptions;
+ };
+ afterRes = (data: any[], rawData?: any) => {
+ console.log(data)
+ this.loading = false
+ return data.map(item => ({
+ ...item,
+ }));
+ };
+ showAccountDetail(item: any) {
+ this.modal.create({
+ nzTitle: '账户明细',
+ nzContent: AccountDetailComponent,
+ nzNoAnimation: true,
+ nzWidth: 600,
+ nzComponentParams: {
+ params: { accountType: 2, roleId: item.roleId },
+ url: '/api/fcc/accountBalance/getDriverAccountBalanceDetailByOperator'
+ },
+ nzFooter: null
+ });
+ }
+
+ /**
+ * 重置表单
+ */
+ resetSF() {
+ this.sf.reset();
+ this._$expand = false;
+ }
+
+ /**
+ * 伸缩查询条件
+ */
+ expandToggle() {
+ this._$expand = !this._$expand;
+ this.sf?.setValue('/expand', this._$expand);
+ }
+
+ exportList() {
+ console.log(this.sf.value);
+
+ this.service.exportStart({ ...this.sf.value, pageSize: -1 }, this.service.$api_export_driver_account_page);
+ }
+
+ private initSF(): SFSchema {
+ return {
+ properties: {
+ expand: {
+ type: 'boolean',
+ ui: {
+ hidden: true
+ }
+ },
+ userName: {
+ type: 'string',
+ title: '司机姓名',
+ ui: { placeholder: '请输入' }
+ },
+ certificateNumber: {
+ type: 'string',
+ title: '证件号码',
+ ui: { placeholder: '请输入' }
+ },
+ phone: {
+ type: 'string',
+ title: '手机号',
+ ui: {
+ placeholder: '请输入'
+ }
+ },
+ ltdId: {
+ type: 'string',
+ title: '网络货运人',
+ ui: {
+ widget: 'select',
+ placeholder: '请选择',
+ visibleIf: {
+ expand: (value: boolean) => value
+ },
+ allowClear: true,
+ asyncData: () => this.service.getNetworkFreightForwarder()
+ }
+ },
+ bankType: {
+ type: 'string',
+ title: '银行类型',
+ enum: [
+ { label: '全部', value: null },
+ { label: '平安银行', value: '1' },
+ { label: '浦发银行', value: '2' }
+ ],
+ ui: {
+ widget: 'select',
+ placeholder: '请选择',
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ },
+ default: null
+ },
+ virtualAccount: {
+ type: 'string',
+ title: '虚拟账户',
+ ui: {
+ placeholder: '请输入',
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ }
+ },
+ createTime: {
+ title: '创建时间',
+ type: 'string',
+ ui: {
+ widget: 'sl-from-to-search',
+ format: 'yyyy-MM-dd',
+ placeholder: '请选择',
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ } as SFDateWidgetSchema
+ }
+ }
+ };
+ }
+
+ private initST(): STColumn[] {
+ return [
+ { title: '司机姓名', width: 140, index: 'name' },
+ { title: '证件号码', width: 140, index: 'idNo' },
+ { title: '手机号', width: 140, index: 'phone' },
+ { title: '网络货运人', width: 180, index: 'ltdName' },
+ { title: '银行类型', width: 120, index: 'bankTypeLabel' },
+ { title: '虚拟账户', width: 140, index: 'virtualAccount' },
+ {
+ title: '可用余额',
+ index: 'availableBalance',
+ width: 140,
+ type: 'widget',
+ className: 'text-right',
+ widget: { type: 'currency-chy', params: ({ record }) => ({ value: record.availableBalance }) }
+ },
+ {
+ title: '冻结余额',
+ index: 'freezeBalance',
+ width: 140,
+ type: 'widget',
+ className: 'text-right',
+ widget: { type: 'currency-chy', params: ({ record }) => ({ value: record.freezeBalance }) }
+ },
+ {
+ title: '本月累计提现金额',
+ index: 'withdrawBalance',
+ width: 160,
+ type: 'widget',
+ className: 'text-right',
+ widget: { type: 'currency-chy', params: ({ record }) => ({ value: record.withdrawBalance }) }
+ },
+ { title: '账户总余额', render: 'availableBalance', className: 'text-right', width: 180 },
+ { title: '创建时间', index: 'createTime', type: 'date', width: 150 },
+ { title: '状态', index: 'stateDeletedLabel', width: 120 },
+ {
+ title: '操作',
+ width: 120,
+ className: 'text-center',
+ fixed: 'right',
+ buttons: [
+ {
+ text: '查看明细',
+ click: item =>
+ this.router.navigate(['/financial-management/driver-account/detail/' + item.id], {
+ queryParams: {
+ name: item.name,
+ phone: item.phone,
+ ltdName: item.ltdName,
+ bankType: item.bankType,
+ projectId: item.projectId,
+ availableBalance: item.availableBalance,
+ enterpriseId: item.enterpriseId,
+ roleId: item.roleId,
+ ltdId: item.ltdId
+ }
+ })
+ }
+ ]
+ }
+ ];
+ }
+
+ parseFloat(num: any) {
+ return parseFloat(num);
+ }
+}
diff --git a/src/app/routes/financial-management/components/freight-account/freight-account-detail/freight-account-detail.component.html b/src/app/routes/financial-management/components/freight-account/freight-account-detail/freight-account-detail.component.html
new file mode 100644
index 00000000..af8a0b5b
--- /dev/null
+++ b/src/app/routes/financial-management/components/freight-account/freight-account-detail/freight-account-detail.component.html
@@ -0,0 +1,65 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/app/routes/financial-management/components/freight-account/freight-account-detail/freight-account-detail.component.ts b/src/app/routes/financial-management/components/freight-account/freight-account-detail/freight-account-detail.component.ts
new file mode 100644
index 00000000..dd2fa6ca
--- /dev/null
+++ b/src/app/routes/financial-management/components/freight-account/freight-account-detail/freight-account-detail.component.ts
@@ -0,0 +1,242 @@
+import { Component, OnInit, ViewChild } from '@angular/core';
+import { ActivatedRoute, Router } from '@angular/router';
+import { STComponent, STColumn, STChange, STRequestOptions } from '@delon/abc/st';
+import { SFComponent, SFDateWidgetSchema, SFSchema, SFSelectWidgetSchema } from '@delon/form';
+import { NzModalService } from 'ng-zorro-antd/modal';
+import { FreightAccountService } from '../../../services/freight-account.service';
+
+@Component({
+ selector: 'app-freight-account-detail',
+ templateUrl: './freight-account-detail.component.html',
+ styleUrls: ['../../../../commom/less/box.less']
+})
+export class FreightAccountDetailComponent implements OnInit {
+ @ViewChild('st', { static: true })
+ st!: STComponent;
+ @ViewChild('sf', { static: false })
+ sf!: SFComponent;
+ columns: STColumn[] = this.initST();
+ searchSchema: SFSchema = this.initSF();
+
+ info: any = {};
+ params: any = {};
+ static: any = {};
+ _$expand = false;
+ constructor(public service: FreightAccountService, private nzModalService: NzModalService, private route: ActivatedRoute) {
+ this.params = route.snapshot.queryParams;
+ }
+
+ ngOnInit(): void {
+ this.loadInfo();
+ }
+
+ beforeReq = (requestOptions: STRequestOptions) => {
+ Object.assign(requestOptions.body, {
+ ltdId: this.params.ltdId,
+ projectId: this.params.projectId,
+ enterpriseId: this.params.enterpriseId,
+ roleId: this.params.roleId
+ });
+ if (this.sf) {
+ Object.assign(requestOptions.body, {
+ ...this.sf.value,
+ createTime: {
+ start: this.sf?.value.createTime?.[0] || '',
+ end: this.sf?.value.createTime?.[1] || ''
+ }
+ });
+ }
+ this.loadStatistics(requestOptions.body);
+ return requestOptions;
+ };
+
+ loadInfo() {
+ this.service
+ .request(this.service.$api_get_shipper_account_balance_detail, {
+ ...this.sf?.value,
+ ltdId: this.params.ltdId,
+ projectId: this.params.projectId,
+ enterpriseId: this.params.enterpriseId,
+ roleId: this.params.roleId,
+ pageIndex: this.st.pi,
+ pageSize: this.st.ps,
+ createTime: {
+ start: this.sf?.value.createTime?.[0] || '',
+ end: this.sf?.value.createTime?.[1] || ''
+ }
+ })
+ .subscribe(res => {
+ if (res) {
+ this.info = res;
+ }
+ });
+ }
+
+ loadStatistics(params: any) {
+ this.service.request(this.service.$api_get_shipper_account_balance_detail, params).subscribe(res => {
+ if (res) {
+ this.static = res;
+ }
+ });
+ }
+
+ stChange(e: STChange): void {}
+
+ exportList() {
+ this.service.exportStart(
+ {
+ ...this.sf.value,
+ pageSize: -1,
+ ltdId: this.params.ltdId,
+ projectId: this.params.projectId,
+ enterpriseId: this.params.enterpriseId,
+ roleId: this.params.roleId,
+ createTime: {
+ start: this.sf?.value.createTime?.[0] || '',
+ end: this.sf?.value.createTime?.[1] || ''
+ }
+ },
+ this.service.$api_get_exportAccountBalanceShipperByOperatorPage
+ );
+ }
+
+ goBack() {
+ history.go(-1);
+ }
+
+ /**
+ * 重置表单
+ */
+ resetSF() {
+ this.sf.reset();
+ this._$expand = false;
+ }
+
+ /**
+ * 伸缩查询条件
+ */
+ expandToggle() {
+ this._$expand = !this._$expand;
+ this.sf?.setValue('/expand', this._$expand);
+ }
+
+ private initSF(): SFSchema {
+ return {
+ properties: {
+ expand: {
+ type: 'boolean',
+ ui: {
+ hidden: true
+ }
+ },
+ createTime: {
+ title: '交易时间',
+ type: 'string',
+ ui: {
+ widget: 'sl-from-to-search',
+ format: 'yyyy-MM-dd',
+ placeholder: '请选择',
+ nzShowTime: true
+ } as SFDateWidgetSchema
+ },
+ transactionNumber: {
+ type: 'string',
+ title: '流水号',
+ ui: {
+ placeholder: '请输入'
+ }
+ },
+ businessNumber: {
+ type: 'string',
+ title: '交易单号',
+ ui: {
+ placeholder: '请输入'
+ }
+ },
+ tradeType: {
+ type: 'string',
+ title: '交易类型',
+ enum: [
+ { label: '全部', value: '' },
+ { label: '整车订单退款', value: '1' },
+ { label: '整车订单支付', value: '2' },
+ { label: '提现失败退回', value: '3' },
+ { label: '提现', value: '4' },
+ { label: '充值', value: '5' },
+ { label: '运货订单结算F', value: '5' }
+ ],
+ ui: {
+ widget: 'select',
+ placeholder: '请选择',
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ },
+ default: ''
+ },
+ incomeType: {
+ type: 'string',
+ title: '收支类型',
+ enum: [
+ { label: '全部', value: '' },
+ { label: '收入', value: '1' },
+ { label: '支出', value: '2' }
+ ],
+ ui: {
+ widget: 'select',
+ placeholder: '请选择',
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ },
+ default: ''
+ },
+ projectId: {
+ title: '所属项目',
+ type: 'string',
+ default: '',
+ ui: {
+ widget: 'select',
+ visibleIf: {
+ expand: (value: boolean) => value
+ },
+ asyncData: () => this.service.getEnterpriseProject()
+ } as SFSelectWidgetSchema
+ }
+ }
+ };
+ }
+
+ private initST(): STColumn[] {
+ return [
+ { title: '交易时间', index: 'createTime', type: 'date', width: 170 },
+ { title: '流水号', index: 'transactionNumber', width: 170 },
+ { title: '交易类型', index: 'tradeTypeLabel', className: 'text-center', width: 140 },
+ { title: '交易单号', index: 'businessNumber', width: 170 },
+ { title: '订单号', index: 'orderSn', width: 170 },
+ { title: '运单号', index: 'transportSn', width: 170 },
+ { title: '货主', index: 'enterpriseName', width: 170 },
+ { title: '所属项目', index: 'projectName', width: 170 },
+ { title: '收支类型', index: 'incomeTypeLabel', className: 'text-center', width: 140 },
+ {
+ title: '交易金额',
+ index: 'amount',
+ width: 150,
+ type: 'widget',
+ className: 'text-right',
+ widget: { type: 'currency-chy', params: ({ record }) => ({ value: record.amount }) }
+ },
+ {
+ title: '账户余额',
+ index: 'accountBalance',
+ width: 150,
+ type: 'widget',
+ className: 'text-right',
+ widget: { type: 'currency-chy', params: ({ record }) => ({ value: record.accountBalance }) }
+ },
+ { title: '付款方', index: 'payName', width: 170 },
+ { title: '收款方', index: 'incomeName', width: 170 },
+ { title: '备注', index: 'tradeContent', width: 170 }
+ ];
+ }
+}
diff --git a/src/app/routes/financial-management/components/freight-account/freight-account.component.html b/src/app/routes/financial-management/components/freight-account/freight-account.component.html
new file mode 100644
index 00000000..5dba1c89
--- /dev/null
+++ b/src/app/routes/financial-management/components/freight-account/freight-account.component.html
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ (parseFloat(item.availableBalance) +
+ parseFloat(item.freezeBalance)).toFixed(2) | currency}}
+
+
+
\ No newline at end of file
diff --git a/src/app/routes/financial-management/components/freight-account/freight-account.component.ts b/src/app/routes/financial-management/components/freight-account/freight-account.component.ts
new file mode 100644
index 00000000..5abfbe19
--- /dev/null
+++ b/src/app/routes/financial-management/components/freight-account/freight-account.component.ts
@@ -0,0 +1,234 @@
+import { CurrencyPipe } from '@angular/common';
+import { Component, OnInit, ViewChild } from '@angular/core';
+import { Router } from '@angular/router';
+import { STComponent, STColumn, STChange, STRequestOptions } from '@delon/abc/st';
+import { SFComponent, SFSchema, SFDateWidgetSchema } from '@delon/form';
+import { CurrencyService } from '@delon/util';
+import { CurrencyCNYPipe } from '@delon/util/pipes/currency/cny.pipe';
+import { ShipperBaseService } from '@shared';
+import { NzModalService } from 'ng-zorro-antd/modal';
+import { parse } from 'path';
+import { SystemService } from 'src/app/routes/sys-setting/services/system.service';
+import { AccountDetailComponent } from 'src/app/shared/components/account-detail/account-detail.component';
+import { FreightAccountService } from '../../services/freight-account.service';
+
+@Component({
+ selector: 'app-freight-account',
+ templateUrl: './freight-account.component.html',
+ styleUrls: ['../../../commom/less/box.less', '../../../commom/less/expend-but.less']
+})
+export class FreightAccountComponent implements OnInit {
+ @ViewChild('st', { static: true })
+ st!: STComponent;
+ @ViewChild('sf', { static: false })
+ sf!: SFComponent;
+ searchSchema: SFSchema = this.initSF();
+ columns: STColumn[] = this.initST();
+
+ selectedRows: any[] = [];
+
+ _$expand = false;
+
+ constructor(public service: FreightAccountService, private router: Router, private modal: NzModalService) {}
+
+ ngOnInit(): void {}
+
+ beforeReq = (requestOptions: STRequestOptions) => {
+ Object.assign(requestOptions.body, { accountType: 1 });
+ if (this.sf) {
+ Object.assign(requestOptions.body, { ...this.sf.value });
+ if (this.sf.value.createTime) {
+ Object.assign(requestOptions.body, {
+ createTime: {
+ start: this.sf.value.createTime?.[0] || '',
+ end: this.sf.value.createTime?.[1] || ''
+ }
+ });
+ }
+ }
+ return requestOptions;
+ };
+
+ showAccountDetail(item: any) {
+ this.modal.create({
+ nzTitle: '账户明细',
+ nzContent: AccountDetailComponent,
+ nzNoAnimation: true,
+ nzWidth: 600,
+ nzComponentParams: {
+ params: { accountType: 1, roleId: item.roleId },
+ url: '/api/fcc/accountBalance/getShipperAccountBalanceDetailByOperator'
+ },
+ nzFooter: null
+ });
+ }
+
+ /**
+ * 重置表单
+ */
+ resetSF() {
+ this.sf.reset();
+ this._$expand = false;
+ }
+
+ /**
+ * 伸缩查询条件
+ */
+ expandToggle() {
+ this._$expand = !this._$expand;
+ this.sf?.setValue('/expand', this._$expand);
+ }
+
+ exportList() {
+ this.service.exportStart({ ...this.sf.value, pageSize: -1 }, this.service.$api_get_exportShipperAccountBalanceByOperator);
+ }
+
+ private initSF(): SFSchema {
+ return {
+ properties: {
+ expand: {
+ type: 'boolean',
+ ui: {
+ hidden: true
+ }
+ },
+ tenantName: {
+ type: 'string',
+ title: '企业名称',
+ ui: { placeholder: '请输入' }
+ },
+ userName: {
+ type: 'string',
+ title: '联系人',
+ ui: { placeholder: '请输入' }
+ },
+ phone: {
+ type: 'string',
+ title: '联系人电话',
+ ui: {
+ placeholder: '请输入'
+ }
+ },
+ ltdId: {
+ type: 'string',
+ title: '网络货运人',
+ ui: {
+ widget: 'select',
+ placeholder: '请选择',
+ visibleIf: {
+ expand: (value: boolean) => value
+ },
+ allowClear: true,
+ asyncData: () => this.service.getNetworkFreightForwarder()
+ }
+ },
+ bankType: {
+ type: 'string',
+ title: '银行类型',
+ enum: [
+ { label: '全部', value: null },
+ { label: '平安银行', value: '1' },
+ { label: '浦发银行', value: '2' }
+ ],
+ ui: {
+ widget: 'select',
+ placeholder: '请选择',
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ },
+ default: null
+ },
+ virtualAccount: {
+ type: 'string',
+ title: '虚拟账户',
+ ui: {
+ placeholder: '请输入',
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ }
+ },
+ createTime: {
+ title: '创建时间',
+ type: 'string',
+ ui: {
+ widget: 'sl-from-to-search',
+ format: 'yyyy-MM-dd',
+ placeholder: '请选择',
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ } as SFDateWidgetSchema
+ }
+ }
+ };
+ }
+
+ private initST(): STColumn[] {
+ return [
+ { title: '企业名称', width: 170, index: 'tenantName' },
+ { title: '联系人', width: 120, index: 'name' },
+ { title: '联系人电话', width: 140, index: 'phone' },
+ { title: '网络货运人', width: 170, index: 'ltdName' },
+ { title: '银行类型', width: 120, index: 'bankTypeLabel' },
+ { title: '虚拟账户', width: 140, index: 'virtualAccount' },
+ {
+ title: '可用余额',
+ index: 'availableBalance',
+ width: 150,
+ type: 'widget',
+ className: 'text-right',
+ widget: { type: 'currency-chy', params: ({ record }) => ({ value: record.availableBalance }) }
+ },
+ {
+ title: '冻结余额',
+ index: 'freezeBalance',
+ width: 150,
+ type: 'widget',
+ className: 'text-right',
+ widget: { type: 'currency-chy', params: ({ record }) => ({ value: record.freezeBalance }) }
+ },
+ {
+ title: '账户总余额',
+ render: 'description',
+ width: 140,
+ className: 'text-right'
+ },
+ { title: '创建时间', index: 'createTime', type: 'date', width: 150 },
+ {
+ title: '状态',
+ index: 'stateDeletedLabel',
+ width: 80
+ },
+ {
+ title: '操作',
+ width: 120,
+ className: 'text-center',
+ fixed: 'right',
+ buttons: [
+ {
+ text: '查看明细',
+ click: item =>
+ this.router.navigate(['/financial-management/freight-account/detail/' + item.id], {
+ queryParams: {
+ tenantName: item.tenantName,
+ ltdName: item.ltdName,
+ bankType: item.bankType,
+ availableBalance: item.availableBalance,
+ projectId: item.projectId,
+ enterpriseId: item.enterpriseId,
+ roleId: item.roleId,
+ ltdId: item.ltdId
+ }
+ })
+ }
+ ]
+ }
+ ];
+ }
+
+ parseFloat(num: any) {
+ return parseFloat(num);
+ }
+}
diff --git a/src/app/routes/financial-management/components/payable-order/payable-order-detail/payable-order-detail.component.html b/src/app/routes/financial-management/components/payable-order/payable-order-detail/payable-order-detail.component.html
new file mode 100644
index 00000000..b0b74755
--- /dev/null
+++ b/src/app/routes/financial-management/components/payable-order/payable-order-detail/payable-order-detail.component.html
@@ -0,0 +1,95 @@
+
+
+
+
+
+
+
+
+
+
+
+ {{headerInfo?.ltdName}}
+
+
+ {{headerInfo?.cnoName}}
+
+
+ {{headerInfo?.shipperaccount}}
+
+
+ {{headerInfo?.phxmoney | currency}}
+
+
+
+
+ {{headerInfo?.phxdate}}
+
+
+ {{headerInfo?.driver2IdName}}
+
+
+ {{headerInfo?.ltdaccountId}}
+
+
+ {{headerInfo?.prmoney | currency}}
+
+
+
+
+ {{headerInfo?.banktype==='1'?'平安':'浦发'}}
+
+
+ {{headerInfo?.brmtypeLabel}}
+
+
+ {{headerInfo?.bankreceipt}}
+
+
+ {{headerInfo?.remarks}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{index+1}}
+
+
+
\ No newline at end of file
diff --git a/src/app/routes/financial-management/components/payable-order/payable-order-detail/payable-order-detail.component.less b/src/app/routes/financial-management/components/payable-order/payable-order-detail/payable-order-detail.component.less
new file mode 100644
index 00000000..aebf12ee
--- /dev/null
+++ b/src/app/routes/financial-management/components/payable-order/payable-order-detail/payable-order-detail.component.less
@@ -0,0 +1,13 @@
+:host::ng-deep {
+
+ .statistics-box {
+ .ant-form-item {
+ margin-bottom: 0;
+
+ .ant-form-item-control-input-content {
+ color: #f5222d;
+ }
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/src/app/routes/financial-management/components/payable-order/payable-order-detail/payable-order-detail.component.ts b/src/app/routes/financial-management/components/payable-order/payable-order-detail/payable-order-detail.component.ts
new file mode 100644
index 00000000..939ea639
--- /dev/null
+++ b/src/app/routes/financial-management/components/payable-order/payable-order-detail/payable-order-detail.component.ts
@@ -0,0 +1,179 @@
+import { CurrencyPipe } from '@angular/common';
+import { Component, OnInit, ViewChild } from '@angular/core';
+import { ActivatedRoute } from '@angular/router';
+import { STComponent, STColumn, STRequestOptions } from '@delon/abc/st';
+import { SFComponent, SFSchema, SFDateWidgetSchema } from '@delon/form';
+import { FreightAccountService } from '../../../services/freight-account.service';
+
+@Component({
+ selector: 'app-payable-order-detail',
+ templateUrl: './payable-order-detail.component.html',
+ styleUrls: ['./payable-order-detail.component.less', '../../../../commom/less/expend-but.less', '../../../../commom/less/box.less'],
+ providers: [CurrencyPipe]
+})
+export class PayableOrderDetailComponent implements OnInit {
+ @ViewChild('st', { static: true })
+ st!: STComponent;
+ @ViewChild('sf', { static: false })
+ sf!: SFComponent;
+ columns: STColumn[] = this.initST();
+ searchSchema: SFSchema = this.initSF();
+
+ _$expand = false;
+
+ id = null;
+ billHId = null;
+ headerInfo: any = {};
+ constructor(public service: FreightAccountService, private route: ActivatedRoute, private currencyPipe: CurrencyPipe) {
+ this.id = route.snapshot.params.id;
+ this.billHId = route.snapshot.queryParams.billHId;
+ this.loadHeadInfo();
+ }
+
+ ngOnInit(): void {}
+
+ loadHeadInfo() {
+ this.service.request(this.service.$api_get_fico_ph_header, { id: this.id }).subscribe(res => {
+ if (res) {
+ this.headerInfo = res;
+ }
+ });
+ }
+
+ beforeReq = (requestOptions: STRequestOptions) => {
+ Object.assign(requestOptions.body, { phxHId: this.billHId });
+ if (this.sf) {
+ Object.assign(requestOptions.body, {
+ ...this.sf.value,
+ billTime: {
+ start: this.sf.value.billTime?.[0] || null,
+ end: this.sf.value.billTime?.[1] || null
+ },
+ feedate: {
+ start: this.sf.value.feedate?.[0] || null,
+ end: this.sf.value.feedate?.[1] || null
+ }
+ });
+ if (this.sf.value.billTime) {
+ Object.assign(requestOptions.body, {
+ billTime: {
+ start: this.sf.value.billTime?.[0] || null,
+ end: this.sf.value.billTime?.[1] || null
+ }
+ });
+ }
+ if (this.sf.value.feedate) {
+ Object.assign(requestOptions.body, {
+ feedate: {
+ start: this.sf.value.feedate?.[0] || null,
+ end: this.sf.value.feedate?.[1] || null
+ }
+ });
+ }
+ }
+ return requestOptions;
+ };
+
+ goBack() {
+ history.go(-1);
+ }
+
+ /**
+ * 重置表单
+ */
+ resetSF() {
+ this.sf.reset();
+ }
+
+ /**
+ * 伸缩查询条件
+ */
+ expandToggle() {
+ this._$expand = !this._$expand;
+ this.sf?.setValue('/expand', this._$expand);
+ }
+
+ private initSF(): SFSchema {
+ return {
+ properties: {
+ expand: {
+ type: 'boolean',
+ ui: {
+ hidden: true
+ }
+ },
+ feeHCode: {
+ type: 'string',
+ title: '费用单',
+ ui: {
+ placeholder: '请输入'
+ }
+ },
+ billHCode: {
+ type: 'string',
+ title: '订单号',
+ ui: {
+ placeholder: '请输入'
+ }
+ },
+ cno: {
+ type: 'string',
+ title: '结算客户',
+ ui: {
+ widget: 'select',
+ placeholder: '请选择',
+ allowClear: true,
+ asyncData: () => this.service.getCloseAccount(),
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ },
+ default: ''
+ },
+ feedate: {
+ title: '费用日期',
+ type: 'string',
+ ui: {
+ widget: 'sl-from-to-search',
+ format: 'yyyy-MM-dd',
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ } as SFDateWidgetSchema
+ },
+ billTime: {
+ title: '订单日期',
+ type: 'string',
+ ui: {
+ widget: 'sl-from-to-search',
+ format: 'yyyy-MM-dd',
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ } as SFDateWidgetSchema
+ }
+ }
+ };
+ }
+
+ private initST(): STColumn[] {
+ return [
+ { title: '序号', render: 'no', width: 80 },
+ { title: '费用号', index: 'feeHCode', width: 140 },
+ { title: '费用日期', index: 'feedate', type: 'date', width: 150 },
+ { title: '订单号', index: 'billHCode', width: 140 },
+ { title: '订单日期', index: 'billTime', width: 150 },
+ { title: '费用类型', index: 'feetype', width: 90 },
+ { title: '订单费用科目', index: 'billLTypeLabel', width: 100 },
+ { title: '费用科目', index: 'feeSubIdName', width: 140 },
+ { title: '结算客户', index: 'cnoName', width: 140 },
+ {
+ title: '已收金额',
+ index: 'phxmoney',
+ width: 100,
+ className: 'text-right',
+ format: item => `${this.currencyPipe.transform(item.armoney || 0)}`
+ }
+ ];
+ }
+}
diff --git a/src/app/routes/financial-management/components/payable-order/payable-order.component.html b/src/app/routes/financial-management/components/payable-order/payable-order.component.html
new file mode 100644
index 00000000..ed91bd00
--- /dev/null
+++ b/src/app/routes/financial-management/components/payable-order/payable-order.component.html
@@ -0,0 +1,59 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/app/routes/financial-management/components/payable-order/payable-order.component.ts b/src/app/routes/financial-management/components/payable-order/payable-order.component.ts
new file mode 100644
index 00000000..f5fac6ee
--- /dev/null
+++ b/src/app/routes/financial-management/components/payable-order/payable-order.component.ts
@@ -0,0 +1,283 @@
+import { CurrencyPipe } from '@angular/common';
+import { Component, OnInit, ViewChild } from '@angular/core';
+import { Router } from '@angular/router';
+import { STComponent, STColumn, STRequestOptions, STChange } from '@delon/abc/st';
+import { SFComponent, SFSchema, SFDateWidgetSchema } from '@delon/form';
+import { NzModalService } from 'ng-zorro-antd/modal';
+import { FreightAccountService } from '../../services/freight-account.service';
+
+@Component({
+ selector: 'app-payable-order',
+ templateUrl: './payable-order.component.html',
+ styleUrls: ['../../../commom/less/box.less', '../../../commom/less/expend-but.less'],
+ providers: [CurrencyPipe]
+})
+export class PayableOrderComponent implements OnInit {
+ @ViewChild('st', { static: true })
+ st!: STComponent;
+ @ViewChild('sf', { static: false })
+ sf!: SFComponent;
+ columns: STColumn[] = this.initST();
+ searchSchema: SFSchema = this.initSF();
+
+ _$expand = false;
+
+ selectedRows: any[] = [];
+ info: any = {};
+ constructor(
+ public service: FreightAccountService,
+ private nzModalService: NzModalService,
+ private router: Router,
+ private currencyPipe: CurrencyPipe
+ ) {}
+
+ ngOnInit(): void {
+ }
+
+ loadInfo() {
+ this.service.request(this.service.$api_get_fico_ph_sum).subscribe(res => {
+ if (res) {
+ this.info = res;
+ }
+ });
+ }
+
+ beforeReq = (requestOptions: STRequestOptions) => {
+ if (this.sf) {
+ Object.assign(requestOptions.body, {
+ ...this.sf.value
+ });
+ if (this.sf.value?.createTime) {
+ Object.assign(requestOptions.body, {
+ createTime: {
+ start: this.sf.value.createTime?.[0] || '',
+ end: this.sf.value.createTime?.[1] || ''
+ }
+ });
+ }
+ if (this.sf.value?.phxdate) {
+ Object.assign(requestOptions.body, {
+ phxdate: {
+ start: this.sf.value.phxdate?.[0] || '',
+ end: this.sf.value.phxdate?.[1] || ''
+ }
+ });
+ }
+ }
+ this.loadInfo();
+ return requestOptions;
+ };
+
+ stChange(e: STChange): void {
+ switch (e.type) {
+ case 'checkbox':
+ this.selectedRows = e.checkbox!;
+ break;
+ }
+ }
+
+ /**
+ * 重置表单
+ */
+ resetSF() {
+ this.sf.reset();
+ this._$expand = false;
+ }
+
+ /**
+ * 伸缩查询条件
+ */
+ expandToggle() {
+ this._$expand = !this._$expand;
+ this.sf?.setValue('/expand', this._$expand);
+ }
+
+ private initSF(): SFSchema {
+ return {
+ properties: {
+ expand: {
+ type: 'boolean',
+ ui: {
+ hidden: true
+ }
+ },
+ phxcode: {
+ type: 'string',
+ title: '核销单号',
+ ui: {
+ placeholder: '请输入'
+ }
+ },
+ ltdId: {
+ type: 'string',
+ title: '网络货运人',
+ ui: {
+ widget: 'select',
+ placeholder: '请选择',
+ allowClear: true,
+ asyncData: () => this.service.getNetworkFreightForwarder()
+ },
+ default: ''
+ },
+ bankreceipt: {
+ type: 'string',
+ title: '银行水单',
+ ui: {
+ placeholder: '请输入'
+ }
+ },
+ brmtype: {
+ type: 'string',
+ title: '付款类型',
+ enum: [{ value: '1', label: '费用款项' }],
+ ui: {
+ widget: 'select',
+ placeholder: '请选择',
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ }
+ },
+ cno: {
+ type: 'string',
+ title: '结算客户',
+ ui: {
+ widget: 'select',
+ placeholder: '请选择',
+ allowClear: true,
+ asyncData: () => this.service.getCloseAccount(),
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ }
+ },
+ driver2IdName: {
+ type: 'string',
+ title: '收款人',
+ ui: {
+ widget: 'select',
+ placeholder: '请选择',
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ }
+ },
+ sts: {
+ type: 'string',
+ title: '核销状态',
+ enum: [
+ { value: 1, label: '已核销' },
+ { value: 0, label: '待核销' }
+ ],
+ ui: {
+ widget: 'select',
+ placeholder: '请选择',
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ }
+ },
+ phxdate: {
+ title: '核销日期',
+ type: 'string',
+ ui: {
+ widget: 'sl-from-to-search',
+ format: 'yyyy-MM-dd',
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ } as SFDateWidgetSchema
+ },
+ createTime: {
+ title: '创建时间',
+ type: 'string',
+ ui: {
+ widget: 'sl-from-to-search',
+ format: 'yyyy-MM-dd',
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ } as SFDateWidgetSchema
+ },
+ billHCode: {
+ type: 'string',
+ title: '订单号',
+ ui: {
+ placeholder: '请输入',
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ }
+ },
+ feeHCode: {
+ type: 'string',
+ title: '费用号',
+ ui: {
+ placeholder: '请输入',
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ }
+ },
+ remarks: {
+ type: 'string',
+ title: '核销备注',
+ ui: {
+ autocomplete: 'off',
+ placeholder: '请选择',
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ }
+ }
+ }
+ };
+ }
+
+ private initST(): STColumn[] {
+ return [
+ { title: '', index: 'key', type: 'checkbox' },
+ { title: '核销单号', index: 'phxcode', type: 'link', width: 140 },
+ { title: '网络货运人', index: 'ltdName', width: 220 },
+ { title: '核销日期', index: 'phxdate', type: 'date', width: 160 },
+ { title: '付款账户', index: 'shipperaccount', width: 170 },
+ { title: '收款账户', index: 'ltdaccountId', width: 190 },
+ {
+ title: '核销金额',
+ index: 'phxmoney',
+ width: 140,
+ className: 'text-right',
+ format: item => `${this.currencyPipe.transform(item.phxmoney || 0)}`
+ },
+ {
+ title: '应付金额',
+ index: 'prmoney',
+ width: 140,
+ className: 'text-right',
+ format: item => `${this.currencyPipe.transform(item.prmoney || 0)}`
+ },
+ { title: '银行类型', index: 'banktype', type: 'enum', enum: { '1': '平安', '2': '浦发' }, width: 120 },
+ { title: '付款类型', index: 'brmtype', type: 'enum', enum: { '1': '费用款项' }, width: 120 },
+ { title: '收款人', index: 'driver2IdName', width: 120 },
+ { title: '结算客户', index: 'cnoName', width: 180 },
+ { title: '银行水单', index: 'bankreceipt', width: 190 },
+ { title: '创建时间', index: 'createTime', width: 180 },
+ // { title: '创建人', index: 'createUserIdLabel', width: 120 },
+ { title: '核销状态', index: 'sts', type: 'enum', enum: { 0: '待核销', 1: '已核销' }, width: 120 },
+ { title: '核销备注', index: 'remarks', width: 120 },
+ {
+ title: '操作',
+ fixed: 'right',
+ className: 'text-center',
+ width: 120,
+ buttons: [
+ {
+ text: '浏览',
+ click: item =>
+ this.router.navigate(['/financial-management/payable-order/detail/' + item.id], { queryParams: { billHId: item.id } })
+ }
+ ]
+ }
+ ];
+ }
+}
diff --git a/src/app/routes/financial-management/components/payment-order/payment-order-detail/payment-order-detail.component.html b/src/app/routes/financial-management/components/payment-order/payment-order-detail/payment-order-detail.component.html
new file mode 100644
index 00000000..3c575c32
--- /dev/null
+++ b/src/app/routes/financial-management/components/payment-order/payment-order-detail/payment-order-detail.component.html
@@ -0,0 +1,92 @@
+
+
+
+
+
+
+
+
+
+
+
+ {{headerInfo?.ltdName}}
+
+
+ {{headerInfo?.hrToLabel}}
+
+
+ {{headerInfo?.ltdAccountId}}
+
+
+ {{headerInfo?.ishrhxLabel}}
+
+
+
+
+ {{headerInfo?.payDate}}
+
+
+ {{headerInfo?.hrBankName}} - {{headerInfo?.hrBankNo}}
+
+
+ {{headerInfo?.payDate}}
+
+
+ {{headerInfo?.payRemarks}}
+
+
+
+
+ {{headerInfo?.payModeLabel}}
+
+
+ {{headerInfo?.payTypeLabel}}
+
+
+ {{headerInfo?.payMoney |currency}}
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/app/routes/financial-management/components/payment-order/payment-order-detail/payment-order-detail.component.less b/src/app/routes/financial-management/components/payment-order/payment-order-detail/payment-order-detail.component.less
new file mode 100644
index 00000000..e69de29b
diff --git a/src/app/routes/financial-management/components/payment-order/payment-order-detail/payment-order-detail.component.ts b/src/app/routes/financial-management/components/payment-order/payment-order-detail/payment-order-detail.component.ts
new file mode 100644
index 00000000..c78211b7
--- /dev/null
+++ b/src/app/routes/financial-management/components/payment-order/payment-order-detail/payment-order-detail.component.ts
@@ -0,0 +1,174 @@
+import { Component, OnInit, ViewChild } from '@angular/core';
+import { ActivatedRoute } from '@angular/router';
+import { STComponent, STColumn, STRequestOptions } from '@delon/abc/st';
+import { SFComponent, SFSchema, SFDateWidgetSchema } from '@delon/form';
+import { FreightAccountService } from '../../../services/freight-account.service';
+
+@Component({
+ selector: 'app-payment-order-detail',
+ templateUrl: './payment-order-detail.component.html',
+ styleUrls: ['./payment-order-detail.component.less']
+})
+export class PaymentOrderDetailComponent implements OnInit {
+ @ViewChild('st', { static: true })
+ st!: STComponent;
+ @ViewChild('sf', { static: false })
+ sf!: SFComponent;
+ columns: STColumn[] = this.initST();
+ searchSchema: SFSchema = this.initSF();
+
+ _$expand = false;
+
+ id = null;
+ headerInfo: any = {};
+ constructor(public service: FreightAccountService, private route: ActivatedRoute) {
+ this.id = route.snapshot.params.id;
+ this.loadHeadInfo();
+ }
+
+ ngOnInit(): void {}
+
+ loadHeadInfo() {
+ this.service.request(this.service.$api_get_payment_header, { id: this.id }).subscribe(res => {
+ if (res) {
+ this.headerInfo = res;
+ }
+ });
+ }
+
+ beforeReq = (requestOptions: STRequestOptions) => {
+ if (this.sf) {
+ Object.assign(requestOptions.body, {
+ ...this.sf.value,
+ payHId: this.id,
+ billTime: {
+ start: this.sf.value.billTime?.[0] || null,
+ end: this.sf.value.billTime?.[1] || null
+ },
+ feedate: {
+ start: this.sf.value.feedate?.[0] || null,
+ end: this.sf.value.feedate?.[1] || null
+ }
+ });
+ } else {
+ Object.assign(requestOptions.body, {
+ payHId: this.id,
+ });
+ }
+ return requestOptions;
+ };
+
+ goBack() {
+ history.go(-1);
+ }
+
+ /**
+ * 重置表单
+ */
+ resetSF() {
+ this.sf.reset();
+ }
+
+ /**
+ * 伸缩查询条件
+ */
+ expandToggle() {
+ this._$expand = !this._$expand;
+ this.sf?.setValue('/expand', this._$expand);
+ }
+
+ private initSF(): SFSchema {
+ return {
+ properties: {
+ expand: {
+ type: 'boolean',
+ ui: {
+ hidden: true
+ }
+ },
+ // feeHCode: {
+ // type: 'string',
+ // title: '费用单号',
+ // ui: {
+ // placeholder: '请输入'
+ // }
+ // },
+ billHCode: {
+ type: 'string',
+ title: '订单号',
+ ui: {
+ placeholder: '请输入'
+ }
+ },
+ waybillHCode: {
+ type: 'string',
+ title: '运单号',
+ ui: {
+ placeholder: '请输入'
+ }
+ },
+ // feedate: {
+ // title: '费用日期',
+ // type: 'string',
+ // ui: {
+ // widget: 'sl-from-to-search',
+ // format: 'yyyy-MM-dd',
+ // visibleIf: {
+ // expand: (value: boolean) => value
+ // }
+ // } as SFDateWidgetSchema
+ // },
+ billTime: {
+ title: '订单日期',
+ type: 'string',
+ ui: {
+ widget: 'sl-from-to-search',
+ format: 'yyyy-MM-dd',
+ } as SFDateWidgetSchema
+ },
+ cno: {
+ type: 'string',
+ title: '结算客户',
+ ui: {
+ widget: 'select',
+ placeholder: '请选择',
+ allowClear: true,
+ asyncData: () => this.service.getCloseAccount(),
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ },
+ default: ''
+ }
+ }
+ };
+ }
+
+ private initST(): STColumn[] {
+ return [
+ { title: '序号', render: 'billHCode', width: 80 },
+ // { title: '费用号', index: 'feeHCode', width: 100 },
+ // { title: '费用日期', index: 'feedate', type: 'date', width: 150 },
+ { title: '订单号', index: 'billHCode', width: 100 },
+ { title: '订单日期', index: 'billTime', width: 150 },
+ { title: '结算客户', index: 'cnoName', width: 90 },
+ { title: '费用科目', index: 'feeSubId', width: 100 },
+ {
+ title: '收票金额',
+ index: 'paymoney',
+ width: 140,
+ type: 'widget',
+ className: 'text-right',
+ widget: { type: 'currency-chy', params: ({ record }) => ({ value: record.paymoney }) }
+ },
+ {
+ title: '收票税额',
+ index: 'invtax',
+ width: 140,
+ type: 'widget',
+ className: 'text-right',
+ widget: { type: 'currency-chy', params: ({ record }) => ({ value: record.invtax }) }
+ }
+ ];
+ }
+}
diff --git a/src/app/routes/financial-management/components/payment-order/payment-order.component.html b/src/app/routes/financial-management/components/payment-order/payment-order.component.html
new file mode 100644
index 00000000..aec490c7
--- /dev/null
+++ b/src/app/routes/financial-management/components/payment-order/payment-order.component.html
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/app/routes/financial-management/components/payment-order/payment-order.component.ts b/src/app/routes/financial-management/components/payment-order/payment-order.component.ts
new file mode 100644
index 00000000..21a19041
--- /dev/null
+++ b/src/app/routes/financial-management/components/payment-order/payment-order.component.ts
@@ -0,0 +1,275 @@
+import { Component, OnInit, ViewChild } from '@angular/core';
+import { Router } from '@angular/router';
+import { STComponent, STColumn, STRequestOptions, STChange } from '@delon/abc/st';
+import { SFComponent, SFSchema, SFDateWidgetSchema } from '@delon/form';
+import { NzModalService } from 'ng-zorro-antd/modal';
+import { AddCollectionInvoiceModalComponent } from 'src/app/routes/ticket-management/components/input-invoice/add-collection-invoice-modal/add-collection-invoice-modal.component';
+import { TicketService } from 'src/app/routes/ticket-management/services/ticket.service';
+import { FreightAccountService } from '../../services/freight-account.service';
+
+@Component({
+ selector: 'app-payment-order',
+ templateUrl: './payment-order.component.html',
+ styleUrls: ['../../../commom/less/box.less', '../../../commom/less/expend-but.less']
+})
+export class PaymentOrderComponent implements OnInit {
+ @ViewChild('st', { static: true })
+ st!: STComponent;
+ @ViewChild('sf', { static: false })
+ sf!: SFComponent;
+ columns: STColumn[] = this.initST();
+ searchSchema: SFSchema = this.initSF();
+
+ _$expand = false;
+
+ selectedRows: any[] = [];
+ constructor(public service: FreightAccountService, private nzModalService: NzModalService, private router: Router) {}
+
+ ngOnInit(): void {}
+
+ beforeReq = (requestOptions: STRequestOptions) => {
+ if (this.sf) {
+ let params = { ...this.sf.value };
+ if (params.payDate) {
+ const payDate = { start: this.sf?.value?.payDate?.[0], end: this.sf?.value?.payDate?.[1] };
+ params.payDate = payDate;
+ }
+ if (params.payDate2) {
+ const payDate2 = { start: this.sf?.value?.payDate2?.[0], end: this.sf?.value?.payDate2?.[1] };
+ params.payDate2 = payDate2;
+ }
+ if (params.createTime) {
+ const createTime = { start: this.sf?.value?.createTime?.[0] || '', end: this.sf?.value?.createTime?.[1] || '' };
+ params.createTime = createTime;
+ }
+ Object.assign(requestOptions.body, params);
+ }
+ return requestOptions;
+ };
+
+ stChange(e: STChange): void {
+ switch (e.type) {
+ case 'checkbox':
+ this.selectedRows = e.checkbox!;
+ break;
+ }
+ }
+
+ addInvoice() {
+ if (this.selectedRows?.length <= 0) {
+ this.service.msgSrv.warning('请选择付款单');
+ return;
+ }
+ const modal = this.nzModalService.create({
+ nzTitle: '付款单',
+ nzContent: AddCollectionInvoiceModalComponent,
+ nzComponentParams: { i: { userId: 0 } },
+ nzFooter: null
+ });
+ }
+
+ /**
+ * 重置表单
+ */
+ resetSF() {
+ this.sf.reset();
+ this._$expand = false;
+ }
+
+ /**
+ * 伸缩查询条件
+ */
+ expandToggle() {
+ this._$expand = !this._$expand;
+ this.sf?.setValue('/expand', this._$expand);
+ }
+
+ private initSF(): SFSchema {
+ return {
+ properties: {
+ expand: {
+ type: 'boolean',
+ ui: {
+ hidden: true
+ }
+ },
+ paycode: {
+ type: 'string',
+ title: '付款单号'
+ },
+ ltdId: {
+ type: 'string',
+ title: '网络货运人',
+ ui: {
+ widget: 'select',
+ placeholder: '请选择',
+ allowClear: true,
+ asyncData: () => this.service.getNetworkFreightForwarder()
+ },
+ default: null
+ },
+ // orderS2n: {
+ // type: 'string',
+ // title: '付款状态',
+ // ui: {
+ // widget: 'dict-select',
+ // containsAllLable: true,
+ // params: { dictKey: 'refund:apply:status' },
+ // placeholder: '请选择'
+ // }
+ // },
+ paytype: {
+ type: 'string',
+ title: '付款类型',
+ ui: {
+ widget: 'dict-select',
+ containsAllLabel: true,
+ params: { dictKey: 'pay:type' },
+ placeholder: '请选择'
+ }
+ },
+ paymode: {
+ type: 'string',
+ title: '付款方式',
+ ui: {
+ widget: 'dict-select',
+ containsAllLabel: true,
+ params: { dictKey: 'pay:mode' },
+ placeholder: '请选择',
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ }
+ },
+ arto: {
+ type: 'string',
+ title: '收款人',
+ ui: {
+ widget: 'select',
+ placeholder: '请选择',
+ allowClear: true,
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ }
+ },
+ billCode: {
+ type: 'string',
+ title: '订单号',
+ ui: {
+ widget: 'select',
+ placeholder: '请选择',
+ allowClear: true,
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ }
+ },
+ payDate: {
+ title: '要求付款日期',
+ type: 'string',
+ ui: {
+ widget: 'sl-from-to-search',
+ format: 'yyyy-MM-dd',
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ } as SFDateWidgetSchema
+ },
+ payDate2: {
+ title: '确认日期',
+ type: 'string',
+ ui: {
+ widget: 'sl-from-to-search',
+ format: 'yyyy-MM-dd',
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ } as SFDateWidgetSchema
+ },
+ waybillCode: {
+ type: 'string',
+ title: '运单号',
+ ui: {
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ }
+ },
+ // feeCode: {
+ // type: 'string',
+ // title: '费用号',
+ // ui: {
+ // visibleIf: {
+ // expand: (value: boolean) => value
+ // }
+ // }
+ // },
+ createTime: {
+ title: '创建时间',
+ type: 'string',
+ ui: {
+ widget: 'sl-from-to-search',
+ format: 'yyyy-MM-dd',
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ } as SFDateWidgetSchema
+ },
+ payRemarks: {
+ type: 'string',
+ title: '付款备注',
+ ui: {
+ placeholder: '请选择',
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ }
+ }
+ }
+ };
+ }
+
+ private initST(): STColumn[] {
+ return [
+ { title: '', index: 'key', type: 'checkbox', fixed: 'left', className: 'text-center' },
+ { title: '付款单号', index: 'payCode', type: 'link', width: 180 },
+ { title: '网络货运人', index: 'ltdName', width: 180 },
+ { title: '运单号', index: 'waybillCode', width: 180 },
+ // { title: '费用号', index: 'feeCode', width: 180 },
+ { title: '要求付款日期', index: 'payDate', type: 'date', className: 'text-center', width: 150 },
+ {
+ title: '付款金额',
+ index: 'payMoney',
+ width: 120,
+ type: 'widget',
+ className: 'text-right',
+ widget: { type: 'currency-chy', params: ({ record }) => ({ value: record.payMoney }) }
+ },
+ { title: '付款类型', index: 'payTypeLabel', width: 130 },
+ { title: '付款方式', index: 'payBankTypeLabel', width: 130 },
+ { title: '结算客户', index: 'cnoName', width: 160 },
+ { title: '收款人', index: 'hrToLabel', width: 150 },
+ { title: '应付已核销', index: 'ishrhxLabel', width: 150 },
+ { title: '确认日期', index: 'payDate2', type: 'date', className: 'text-center', width: 150 },
+ { title: '创建时间', index: 'payDate', type: 'date', className: 'text-center', width: 150 },
+ { title: '创建人', index: 'createUserIdLabel', width: 160 },
+ { title: '付款备注', index: 'payRemarks', width: 200 },
+ {
+ title: '操作',
+ className: 'text-center',
+ fixed: 'right',
+ width: '110px',
+ buttons: [
+ {
+ text: '浏览',
+ click: item => this.router.navigate(['/financial-management/payment-order/detail/' + item.id])
+ }
+ // {
+ // text: '修改',
+ // }
+ ]
+ }
+ ];
+ }
+}
diff --git a/src/app/routes/financial-management/components/payment-record/payment-record.component.html b/src/app/routes/financial-management/components/payment-record/payment-record.component.html
new file mode 100644
index 00000000..ecea67f6
--- /dev/null
+++ b/src/app/routes/financial-management/components/payment-record/payment-record.component.html
@@ -0,0 +1,66 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item?.orderPaymentCode }}
{{ item?.paymentStatusLabel }}
+
+
+
+ {{detail.costName}}:{{ detail.price | currency }}
+
+
+
+ {{ item?.billCode }}
{{item?.billStatusLabel }}
+
+
+ {{ item?.wayBillCode }}
{{item?.wayBillStatusLabel }}
+
+
+ {{ item?.driverName }}
{{ item?.driverTelephone }} {{ item?.driverLicencePlate }}
+
+
+ {{ item?.captainName }}
{{ item?.captainTelephone }}
+
+
+
\ No newline at end of file
diff --git a/src/app/routes/financial-management/components/payment-record/payment-record.component.less b/src/app/routes/financial-management/components/payment-record/payment-record.component.less
new file mode 100644
index 00000000..cd8c3436
--- /dev/null
+++ b/src/app/routes/financial-management/components/payment-record/payment-record.component.less
@@ -0,0 +1,41 @@
+:host::ng-deep {
+ .search-box {
+ .ant-card-body {
+ padding-bottom: 18px;
+ }
+ }
+
+ .content-box {
+ .ant-card-body {
+ padding-top: 0;
+ }
+ }
+
+ nz-range-picker {
+ width: 100%;
+ }
+
+ .ant-tabs-tab-btn {
+ padding-left : 16px;
+ padding-right: 16px;
+ }
+
+ .text-truncate {
+ white-space: normal;
+ }
+}
+
+.expend-options {
+ margin-top: 0px;
+}
+
+
+@media (min-width: 1200px) {
+ .expend-options {
+ max-width: 400px;
+ position : absolute;
+ right : 0;
+ bottom : 25px;
+ }
+
+}
\ No newline at end of file
diff --git a/src/app/routes/financial-management/components/payment-record/payment-record.component.ts b/src/app/routes/financial-management/components/payment-record/payment-record.component.ts
new file mode 100644
index 00000000..ea8e8968
--- /dev/null
+++ b/src/app/routes/financial-management/components/payment-record/payment-record.component.ts
@@ -0,0 +1,306 @@
+import { Component, OnInit, ViewChild } from '@angular/core';
+import { Router } from '@angular/router';
+import { STComponent, STColumn, STRequestOptions } from '@delon/abc/st';
+import { SFComponent, SFSchema, SFDateWidgetSchema } from '@delon/form';
+import { NzModalService } from 'ng-zorro-antd/modal';
+import { FreightAccountService } from '../../services/freight-account.service';
+import { ClearingModalComponent } from '../abnormal-gold/clearing-modal/clearing-modal.component';
+
+@Component({
+ selector: 'app-payment-record',
+ templateUrl: './payment-record.component.html',
+ styleUrls: ['./payment-record.component.less']
+})
+export class PaymentRecordComponent implements OnInit {
+ @ViewChild('st', { static: true })
+ st!: STComponent;
+ @ViewChild('sf', { static: false })
+ sf!: SFComponent;
+ columns: STColumn[] = this.initST();
+ searchSchema: SFSchema = this.initSF();
+
+ _$expand = false;
+
+ paymentStatus: any = '';
+
+ constructor(public service: FreightAccountService, private nzModalService: NzModalService, private router: Router) {}
+
+ ngOnInit(): void {}
+
+ beforeReq = (requestOptions: STRequestOptions) => {
+ if (this.sf) {
+ Object.assign(requestOptions.body, {
+ ...this.sf.value,
+ applyDate: {
+ start: this.sf.value.applyDate?.[0] || '',
+ end: this.sf.value.applyDate?.[1] || ''
+ },
+ handlerDate: {
+ start: this.sf.value.handlerDate?.[0] || '',
+ end: this.sf.value.handlerDate?.[1] || ''
+ },
+ paymentStatus: this.paymentStatus || null
+ });
+ }
+ return requestOptions;
+ };
+
+ changePaymentStatus(status?: string) {
+ this.paymentStatus = status || null;
+ this.st.load(1);
+ }
+
+ refund(item: any) {
+ this.nzModalService.warning({
+ nzTitle: '确定要关闭所选支付记录?',
+ nzOnOk: () => {}
+ });
+ }
+
+ /**
+ * 重置表单
+ */
+ resetSF() {
+ this.sf.reset();
+ this._$expand = false;
+ }
+
+ /**
+ * 伸缩查询条件
+ */
+ expandToggle() {
+ this._$expand = !this._$expand;
+ this.sf?.setValue('/expand', this._$expand);
+ }
+
+ private initSF(): SFSchema {
+ return {
+ properties: {
+ expand: {
+ type: 'boolean',
+ ui: {
+ hidden: true
+ }
+ },
+ orderPaymentCode: {
+ type: 'string',
+ title: '支付编号',
+ ui: {
+ placeholder: '请输入'
+ }
+ },
+ billCode: {
+ type: 'string',
+ title: '订单号',
+ ui: {
+ placeholder: '请输入'
+ }
+ },
+ resourceCode: {
+ type: 'string',
+ title: '货源编号',
+ ui: {
+ placeholder: '请输入'
+ }
+ },
+ serviceType: {
+ type: 'string',
+ title: '服务类型',
+ ui: {
+ widget: 'dict-select',
+ params: { dictKey: 'service:type' },
+ placeholder: '请选择',
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ },
+ default: ''
+ },
+ driver: {
+ type: 'string',
+ title: '承运司机',
+ ui: {
+ placeholder: '请输入',
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ }
+ },
+ driverLicensePlate: {
+ type: 'string',
+ title: '车牌号',
+ ui: {
+ placeholder: '请输入',
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ }
+ },
+ captain: {
+ type: 'string',
+ title: '收款人',
+ ui: {
+ placeholder: '请输入收款人姓名/手机号',
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ }
+ },
+ isCaptain: {
+ type: 'string',
+ title: '车队长收款',
+ enum: [
+ { label: '全部', value: '' },
+ { label: '否', value: '0' },
+ { label: '是', value: '1' }
+ ],
+ ui: {
+ widget: 'select',
+ placeholder: '请选择',
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ },
+ default: ''
+ },
+ payType: {
+ type: 'string',
+ title: '支付类型',
+ ui: {
+ widget: 'dict-select',
+ params: { dictKey: 'paybill:type' },
+ placeholder: '请选择',
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ },
+ default: ''
+ },
+ applyDate: {
+ title: '申请时间',
+ type: 'string',
+ ui: {
+ widget: 'sl-from-to-search',
+ format: 'yyyy-MM-dd',
+ placeholder: '请选择',
+ nzShowTime: true,
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ } as SFDateWidgetSchema
+ },
+ handlerDate: {
+ title: '处理时间',
+ type: 'string',
+ ui: {
+ widget: 'sl-from-to-search',
+ format: 'yyyy-MM-dd',
+ placeholder: '请选择',
+ nzShowTime: true,
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ } as SFDateWidgetSchema
+ },
+ bankType: {
+ type: 'string',
+ title: '银行类型',
+ enum: [
+ { label: '全部', value: '' },
+ { label: '平安银行', value: '1' },
+ { label: '浦发银行', value: '2' }
+ ],
+ ui: {
+ widget: 'select',
+ placeholder: '请选择',
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ },
+ default: ''
+ },
+ ltdId: {
+ type: 'string',
+ title: '网络货运人',
+ ui: {
+ widget: 'select',
+ placeholder: '请选择',
+ allowClear: true,
+ asyncData: () => this.service.getNetworkFreightForwarder(),
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ }
+ }
+ }
+ };
+ }
+
+ private initST(): STColumn[] {
+ return [
+ { title: '支付编号', render: 'orderPaymentCode', width: 200 },
+ {
+ title: '支付金额',
+ render: 'payAmount',
+ width: 140,
+ type: 'widget',
+ className: 'text-right',
+ widget: { type: 'currency-chy', params: ({ record }) => ({ value: record.payAmount }) }
+ },
+ {
+ title: '运费明细',
+ render: 'amountDetails',
+ width: 160
+ // format: item => {
+ // (item.amountDetails as Array).forEach(detail => {
+ // detail.surcharge = detail.price + (detail.surcharge || 0);
+ // });
+ // console.log(item.amountDetails);
+
+ // return '';
+ // }
+ },
+ {
+ title: '支付类型',
+ index: 'payTypeLabel',
+ width: 140
+ },
+ { title: '货主', index: 'enterpriseInfoName', width: 180 },
+ { title: '订单号', render: 'billCode', width: 170 },
+ { title: '运单号', render: 'wayBillCode', width: 170 },
+ { title: '货源编号', index: 'resourceCode', width: 160 },
+ {
+ title: '服务类型',
+ index: 'serviceTypeLabel',
+ width: 150
+ },
+ { title: '承运司机', render: 'driverId', width: 140 },
+ { title: '收款人', render: 'captainName', width: 140 },
+ { title: '银行类型', index: 'bankType', width: 150, type: 'enum', enum: { 1: '平安银行', 2: '浦发银行' } },
+ { title: '网络货运人', index: 'ltdName', width: 160 },
+ { title: '申请时间', index: 'applyTime', width: 160 },
+ { title: '申请人', index: 'applyUserName', width: 90 },
+ { title: '处理时间', index: 'handlerTime', width: 180 },
+ { title: '处理人', index: 'handlerUserName', width: 90 },
+ { title: '退款状态', index: 'refundStatusLabel', width: 220 },
+ { title: '备注', index: 'failCause', width: 250 },
+ {
+ title: '操作',
+ fixed: 'right',
+ className: 'text-center',
+ width: 120,
+ buttons: [
+ {
+ text: '关闭',
+ iif: item => item.paymentStatus === '4',
+ click: item => this.refund(item)
+ }
+ ]
+ }
+ ];
+ }
+ // 导出
+ exprot() {
+ this.service.exportStart({ ...this.sf.value, pageSize: -1 }, this.service.$api_get_asyncExportBillPaymentApplicationList);
+ }
+}
diff --git a/src/app/routes/financial-management/components/platform-account/platform-account-detail/platform-account-detail.component.html b/src/app/routes/financial-management/components/platform-account/platform-account-detail/platform-account-detail.component.html
new file mode 100644
index 00000000..2f7d6102
--- /dev/null
+++ b/src/app/routes/financial-management/components/platform-account/platform-account-detail/platform-account-detail.component.html
@@ -0,0 +1,67 @@
+
+
+
+
+
+
+
+ {{params?.ltdName}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/app/routes/financial-management/components/platform-account/platform-account-detail/platform-account-detail.component.ts b/src/app/routes/financial-management/components/platform-account/platform-account-detail/platform-account-detail.component.ts
new file mode 100644
index 00000000..43e46e5b
--- /dev/null
+++ b/src/app/routes/financial-management/components/platform-account/platform-account-detail/platform-account-detail.component.ts
@@ -0,0 +1,249 @@
+import { Component, OnInit, ViewChild } from '@angular/core';
+import { ActivatedRoute } from '@angular/router';
+import { STComponent, STColumn, STRequestOptions, STChange } from '@delon/abc/st';
+import { SFComponent, SFSchema, SFDateWidgetSchema } from '@delon/form';
+
+import { FreightAccountService } from '../../../services/freight-account.service';
+
+@Component({
+ selector: 'app-platform-account-detail',
+ templateUrl: './platform-account-detail.component.html',
+ styleUrls: ['../../../../commom/less/box.less', '../../../../commom/less/expend-but.less']
+})
+export class PlatformAccountDetailComponent implements OnInit {
+ @ViewChild('st', { static: true })
+ st!: STComponent;
+ @ViewChild('sf', { static: false })
+ sf!: SFComponent;
+ columns: STColumn[] = this.initST();
+ searchSchema: SFSchema = this.initSF();
+
+ _$expand = false;
+
+ info: any = {};
+ params: any = {};
+ constructor(public service: FreightAccountService, private route: ActivatedRoute) {
+ this.params = route.snapshot.queryParams;
+ }
+
+ ngOnInit(): void {
+ this.loadInfo();
+ }
+
+ beforeReq = (requestOptions: STRequestOptions) => {
+ Object.assign(requestOptions.body, { ...this.params });
+ if (this.sf) {
+ Object.assign(requestOptions.body, {
+ ...this.sf.value
+ });
+ if (this.sf.value.createTime) {
+ Object.assign(requestOptions.body, {
+ createTime: {
+ start: this.sf.value?.createTime?.[0] || '',
+ end: this.sf.value?.createTime?.[1] || ''
+ }
+ });
+ }
+ }
+ return requestOptions;
+ };
+
+ loadInfo() {
+ this.service
+ .request(this.service.$api_get_platform_account_header, {
+ ...this.sf?.value,
+ ...this.params,
+ pageIndex: this.st.pi,
+ pageSize: this.st.ps
+ })
+ .subscribe(res => {
+ if (res) {
+ this.info = res;
+ }
+ });
+ }
+
+ stChange(e: STChange): void {}
+
+ exportList() {
+ this.service.exportStart(
+ {
+ ...this.sf.value,
+ ...this.params,
+ createTime: {
+ start: this.sf.value?.createTime?.[0] || '',
+ end: this.sf.value?.createTime?.[1] || ''
+ },
+ pageSize: -1
+ },
+ this.service.$api_get_exportAccountBalanceByPage
+ );
+ }
+
+ goBack() {
+ history.go(-1);
+ }
+
+ /**
+ * 重置表单
+ */
+ resetSF() {
+ this.sf.reset();
+ this._$expand = false;
+ }
+
+ /**
+ * 伸缩查询条件
+ */
+ expandToggle() {
+ this._$expand = !this._$expand;
+ this.sf?.setValue('/expand', this._$expand);
+ }
+
+ private initSF(): SFSchema {
+ return {
+ properties: {
+ expand: {
+ type: 'boolean',
+ ui: {
+ hidden: true
+ }
+ },
+ createTime: {
+ title: '交易时间',
+ type: 'string',
+ ui: {
+ widget: 'sl-from-to-search',
+ format: 'yyyy-MM-dd',
+ placeholder: '请选择',
+ nzShowTime: true
+ } as SFDateWidgetSchema
+ },
+ businessNumber: {
+ type: 'string',
+ title: '流水号',
+ ui: {
+ placeholder: '请输入'
+ }
+ },
+ transactionNumber: {
+ type: 'string',
+ title: '交易单号',
+ ui: {
+ placeholder: '请输入'
+ }
+ },
+ tradeType: {
+ type: 'string',
+ title: '交易类型',
+ ui: {
+ widget: 'dict-select',
+ params: { dictKey: 'trade:type' },
+ placeholder: '请选择',
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ },
+ default: ''
+ },
+ channelSource: {
+ type: 'string',
+ title: '账户类型',
+ enum: [
+ { value: '', label: '全部' },
+ { value: '1', label: '货主账户' },
+ { value: '2', label: '司机账户' },
+ { value: '3', label: '运营商账户' }
+ ],
+ ui: {
+ widget: 'select',
+ placeholder: '请选择',
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ },
+ default: ''
+ },
+ roleName: {
+ type: 'string',
+ title: '账户名称',
+ ui: {
+ placeholder: '请输入',
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ }
+ },
+ incomeType: {
+ type: 'string',
+ title: '收支类型',
+ ui: {
+ widget: 'dict-select',
+ params: { dictKey: 'income:type' },
+ placeholder: '请选择',
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ },
+ default: ''
+ },
+ enterpriseName: {
+ type: 'string',
+ title: '货主',
+ ui: {
+ placeholder: '请输入',
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ },
+ default: ''
+ },
+ projectName: {
+ type: 'string',
+ title: '所属项目',
+ ui: {
+ placeholder: '请输入',
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ },
+ default: ''
+ }
+ }
+ };
+ }
+
+ private initST(): STColumn[] {
+ return [
+ { title: '交易时间', index: 'createTime', type: 'date', width: 150 },
+ { title: '流水号', index: 'channelPaySn', width: 170 },
+ { title: '交易类型', index: 'tradeTypeLabel', className: 'text-center', width: 130 },
+ { title: '交易单号', index: 'transactionNumber', width: 190 },
+ { title: '订单号', index: 'orderSn', width: 170 },
+ { title: '运单号', index: 'businessNumber', width: 190 },
+ { title: '账户类型', index: 'accountTypeLabel', className: 'text-center', width: 130 },
+ { title: '账户名称', index: 'roleName', className: 'text-center', width: 150 },
+ { title: '所属项目', index: 'projectName', className: 'text-center', width: 150 },
+ { title: '收支类型', index: 'incomeTypeLabel', className: 'text-center', width: 130 },
+ {
+ title: '交易金额',
+ index: 'amount',
+ width: 150,
+ type: 'widget',
+ className: 'text-right',
+ widget: { type: 'currency-chy', params: ({ record }) => ({ value: record.amount }) }
+ },
+ {
+ title: '账户余额',
+ index: 'accountBalance',
+ width: 150,
+ type: 'widget',
+ className: 'text-right',
+ widget: { type: 'currency-chy', params: ({ record }) => ({ value: record.accountBalance }) }
+ },
+ { title: '付款方', index: 'payName', className: 'text-center', width: 150 },
+ { title: '收款方', index: 'incomeName', className: 'text-center', width: 150 },
+ { title: '备注', index: 'tradeContent', className: 'text-center', width: 150 }
+ ];
+ }
+}
diff --git a/src/app/routes/financial-management/components/platform-account/platform-account.component.html b/src/app/routes/financial-management/components/platform-account/platform-account.component.html
new file mode 100644
index 00000000..e1928689
--- /dev/null
+++ b/src/app/routes/financial-management/components/platform-account/platform-account.component.html
@@ -0,0 +1,64 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/app/routes/financial-management/components/platform-account/platform-account.component.ts b/src/app/routes/financial-management/components/platform-account/platform-account.component.ts
new file mode 100644
index 00000000..f6d7c52d
--- /dev/null
+++ b/src/app/routes/financial-management/components/platform-account/platform-account.component.ts
@@ -0,0 +1,200 @@
+import { Component, OnInit, ViewChild } from '@angular/core';
+import { Router } from '@angular/router';
+import { STComponent, STColumn, STChange, STRequestOptions } from '@delon/abc/st';
+import { SFComponent, SFSchema, SFDateWidgetSchema } from '@delon/form';
+import { NzModalService } from 'ng-zorro-antd/modal';
+import { FreightAccountService } from '../../services/freight-account.service';
+
+@Component({
+ selector: 'app-platform-account',
+ templateUrl: './platform-account.component.html',
+ styleUrls: ['../../../commom/less/box.less']
+})
+export class PlatformAccountComponent implements OnInit {
+ @ViewChild('st', { static: true })
+ st!: STComponent;
+ @ViewChild('sf', { static: false })
+ sf!: SFComponent;
+ searchSchema: SFSchema = this.initSF();
+ columns: STColumn[] = this.initST();
+
+ info: any = {};
+
+ static: any = {};
+ constructor(public service: FreightAccountService, private router: Router, private nzModalService: NzModalService) {}
+
+ ngOnInit(): void {
+ this.loadInfo();
+ }
+
+ beforeReq = (requestOptions: STRequestOptions) => {
+ if (this.sf) {
+ Object.assign(requestOptions.body, { ...this.sf.value });
+ }
+ this.loadStatistics(requestOptions.body);
+ return requestOptions;
+ };
+
+ loadInfo() {
+ const params = {};
+ if (this.sf) {
+ Object.assign(params, { ...this.sf.value });
+ }
+ this.service.request(this.service.$api_get_platform_account_header, params).subscribe(res => {
+ if (res) {
+ this.info = res;
+ }
+ });
+ }
+
+ loadStatistics(params: any) {
+ this.service.request(this.service.$api_get_platform_account_statistics, params).subscribe(res => {
+ if (res) {
+ this.static = res;
+ }
+ });
+ }
+
+ /**
+ * 重置表单
+ */
+ resetSF() {
+ this.sf.reset();
+ }
+
+ private initSF(): SFSchema {
+ return {
+ properties: {
+ ltdId: {
+ type: 'string',
+ title: '网络货运人',
+ ui: {
+ widget: 'select',
+ placeholder: '请选择',
+ allowClear: true,
+ asyncData: () => this.service.getNetworkFreightForwarder()
+ }
+ },
+ bankType: {
+ type: 'string',
+ title: '银行类型',
+ enum: [
+ { label: '全部', value: null },
+ { label: '平安银行', value: '1' },
+ { label: '浦发银行', value: '2' }
+ ],
+ ui: {
+ widget: 'select',
+ placeholder: '请选择'
+ },
+ default: null
+ },
+ virtualAccount: {
+ type: 'string',
+ title: '虚拟账户',
+ ui: {
+ placeholder: '请输入'
+ }
+ }
+ }
+ };
+ }
+
+ private initST(): STColumn[] {
+ return [
+ { title: '网络货运人', index: 'ltdName', width: 180 },
+ { title: '银行类型', index: 'bankTypeLabel', width: 120 },
+ { title: '虚拟账户', index: 'virtualAccount', width: 160 },
+ {
+ title: '平台账户可用余额',
+ index: 'availableBalance',
+ width: 180,
+ type: 'widget',
+ className: 'text-right',
+ widget: { type: 'currency-chy', params: ({ record }) => ({ value: record.availableBalance }) }
+ },
+ {
+ title: '平台账户冻结余额',
+ index: 'freezeBalance',
+ width: 180,
+ type: 'widget',
+ className: 'text-right',
+ widget: { type: 'currency-chy', params: ({ record }) => ({ value: record.freezeBalance }) }
+ },
+ {
+ title: '货主账户可用余额',
+ index: 'shipperAvailableBalance',
+ width: 180,
+ type: 'widget',
+ className: 'text-right',
+ widget: { type: 'currency-chy', params: ({ record }) => ({ value: record.shipperAvailableBalance }) }
+ },
+ {
+ title: '货主账户冻结余额',
+ index: 'shipperFreezeBalance',
+ width: 180,
+ type: 'widget',
+ className: 'text-right',
+ widget: { type: 'currency-chy', params: ({ record }) => ({ value: record.shipperFreezeBalance }) }
+ },
+ {
+ title: '司机账户可用余额',
+ index: 'driverAvailableBalance',
+ width: 180,
+ type: 'widget',
+ className: 'text-right',
+ widget: { type: 'currency-chy', params: ({ record }) => ({ value: record.driverAvailableBalance }) }
+ },
+ {
+ title: '司机账户冻结余额',
+ index: 'driverFreezeBalance',
+ width: 180,
+ type: 'widget',
+ className: 'text-right',
+ widget: { type: 'currency-chy', params: ({ record }) => ({ value: record.driverFreezeBalance }) }
+ },
+ {
+ title: '累计充值金额',
+ index: 'rechargeBalance',
+ width: 180,
+ type: 'widget',
+ className: 'text-right',
+ widget: { type: 'currency-chy', params: ({ record }) => ({ value: record.rechargeBalance }) }
+ },
+ {
+ title: '货主累计提现金额',
+ index: 'shipperWithdrawBalance',
+ width: 180,
+ type: 'widget',
+ className: 'text-right',
+ widget: { type: 'currency-chy', params: ({ record }) => ({ value: record.shipperWithdrawBalance }) }
+ },
+ {
+ title: '司机累计提现金额',
+ index: 'driverWithdrawBalance',
+ width: 180,
+ type: 'widget',
+ className: 'text-right',
+ widget: { type: 'currency-chy', params: ({ record }) => ({ value: record.driverWithdrawBalance }) }
+ },
+ {
+ title: '操作',
+ width: 100,
+ className: 'text-center',
+ fixed: 'right',
+ buttons: [
+ {
+ text: '查看明细',
+ click: item =>
+ this.router.navigate(['/financial-management/platform-account/detail/' + item.id], {
+ queryParams: { ltdId: item.ltdId, bankType: item.bankType, ltdName: `${item.ltdName}(${item.bankTypeLabel})` }
+ })
+ }
+ ]
+ }
+ ];
+ }
+ exportList() {
+ this.service.exportStart( { ...this.sf.value, pageSize: -1 }, this.service.$api_get_exportPlatformAccountBalanceByOperator,);
+ }
+}
diff --git a/src/app/routes/financial-management/components/platform-account/setting-financial/setting-financial.component.html b/src/app/routes/financial-management/components/platform-account/setting-financial/setting-financial.component.html
new file mode 100644
index 00000000..10785fb6
--- /dev/null
+++ b/src/app/routes/financial-management/components/platform-account/setting-financial/setting-financial.component.html
@@ -0,0 +1,11 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/app/routes/financial-management/components/platform-account/setting-financial/setting-financial.component.less b/src/app/routes/financial-management/components/platform-account/setting-financial/setting-financial.component.less
new file mode 100644
index 00000000..e69de29b
diff --git a/src/app/routes/financial-management/components/platform-account/setting-financial/setting-financial.component.ts b/src/app/routes/financial-management/components/platform-account/setting-financial/setting-financial.component.ts
new file mode 100644
index 00000000..27193906
--- /dev/null
+++ b/src/app/routes/financial-management/components/platform-account/setting-financial/setting-financial.component.ts
@@ -0,0 +1,112 @@
+import { Component, OnInit, ViewChild } from '@angular/core';
+import { SFComponent, SFSchema, SFUISchema } from '@delon/form';
+import { NzMessageService } from 'ng-zorro-antd/message';
+import { NzModalRef } from 'ng-zorro-antd/modal';
+import { SystemService } from 'src/app/routes/sys-setting/services/system.service';
+
+@Component({
+ selector: 'app-setting-financial',
+ templateUrl: './setting-financial.component.html',
+ styleUrls: ['./setting-financial.component.less']
+})
+export class SettingFinancialComponent implements OnInit {
+ @ViewChild('sf', { static: false })
+ sf!: SFComponent;
+ i: any;
+ schema!: SFSchema;
+ roleList = [];
+ roleNames: any = [];
+ constructor(private modal: NzModalRef, public msgSrv: NzMessageService, public service: SystemService) {}
+
+ ngOnInit(): void {
+ if (this.i?.id !== 0) {
+ this.i.roleIds = this.i.roleId !== '' ? this.i.roleId.split(',') : [];
+ }
+
+ this.initSF(this.i);
+ }
+ initSF(staff: any) {
+ this.schema = {
+ properties: {
+ name: {
+ title: '公司名称',
+ type: 'string',
+ ui: { widget: 'string', placeholder: '请输入公司名称' },
+ default: staff.name
+ },
+ phone: {
+ title: '纳税人识别号',
+ type: 'string',
+ ui: { widget: 'string', placeholder: '请输入纳税人识别号' },
+ default: staff.phone
+ },
+ phone2: {
+ title: '税收分类编码',
+ type: 'string',
+ ui: { widget: 'string', placeholder: '请输入税收分类编码' },
+ default: staff.phone
+ },
+ phone3: {
+ title: '发票税率',
+ type: 'string',
+ ui: { widget: 'string', placeholder: '请输入发票税率' },
+ default: staff.phone
+ },
+ phone4: {
+ title: '附加费比例',
+ type: 'string',
+ ui: { widget: 'string', placeholder: '请输入附加费比例' },
+ default: staff.phone
+ }
+ },
+ required: ['name', 'phone', 'phone2', 'phone3', 'phone4']
+ };
+ }
+
+ sure() {
+ if (!this.sf.value.roleIds || this.sf.value.roleIds.length === 0) {
+ this.service.msgSrv.error('员工角色不能为空!');
+ return;
+ }
+ this.roleNames = [];
+ this.roleList.forEach((item: { id: any; roleName: string }) => {
+ this.sf.value.roleIds.forEach((ele: any) => {
+ if (ele === item.id) {
+ this.roleNames.push(item.roleName);
+ }
+ });
+ });
+ if (this.i.id === 0) {
+ const params: any = {
+ ...this.sf.value,
+ roleId: this.sf.value.roleIds,
+ roleNames: this.roleNames.join(','),
+ telephone: this.sf.value.phone,
+ staffName: this.sf.value.name
+ };
+ // this.service.request(this.service.$api_addStaff, params).subscribe((res) => {
+ // if (res) {
+ // this.service.msgSrv.success('保存成功!');
+ // this.modal.close(true);
+ // }
+ // // this.showInviteFlag = true;
+ // // this.inviteCode = res.inviteCode;
+ // });
+ } else {
+ const params: any = {
+ appUserId: this.i.appUserId,
+ staffName: this.sf.value.name,
+ roleId: this.sf.value.roleIds,
+ telephone: this.i.telephone
+ };
+ // this.service.request(this.service.$api_editorStaff, params).subscribe((res) => {
+ // this.service.msgSrv.success('编辑成功!');
+ // this.modal.close(true);
+ // });
+ }
+ }
+
+ close() {
+ this.modal.destroy();
+ }
+}
diff --git a/src/app/routes/financial-management/components/receipt-order/receipt-order-detail/receipt-order-detail.component.html b/src/app/routes/financial-management/components/receipt-order/receipt-order-detail/receipt-order-detail.component.html
new file mode 100644
index 00000000..ab154074
--- /dev/null
+++ b/src/app/routes/financial-management/components/receipt-order/receipt-order-detail/receipt-order-detail.component.html
@@ -0,0 +1,95 @@
+
+
+
+
+
+
+
+
+
+
+ 基本信息
+
+ {{ costInfo?.ltdName }}
+
+
+ {{ costInfo?.brmdate }}
+
+
+ {{ costInfo?.brmModeLabel }}
+
+
+ {{ costInfo?.banktypeLabel }}
+
+
+ {{ costInfo?.artoname }}
+
+
+ {{ costInfo?.brmtypeLabel }}
+
+
+ {{ costInfo?.ltdaccountId }}
+
+
+ {{ costInfo?.recnopay |currency }}
+
+
+ {{ 0 |currency }}
+
+
+ {{ costInfo?.brmmoney |currency }}
+
+
+ {{ costInfo?.brmmoney |currency }}
+
+
+ {{ costInfo?.bankreceipt }}
+
+
+ {{ costInfo?.brmmoney |currency }}
+
+
+ {{ costInfo?.remarks }}
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.vatnotax | currency}}
+
+
+ {{ item.vatmoney | currency}}
+
+
+ {{ index + 1 }}
+
+
+
+
+
\ No newline at end of file
diff --git a/src/app/routes/financial-management/components/receipt-order/receipt-order-detail/receipt-order-detail.component.less b/src/app/routes/financial-management/components/receipt-order/receipt-order-detail/receipt-order-detail.component.less
new file mode 100644
index 00000000..aa2721f6
--- /dev/null
+++ b/src/app/routes/financial-management/components/receipt-order/receipt-order-detail/receipt-order-detail.component.less
@@ -0,0 +1,24 @@
+:host::ng-deep {
+ .search-box {
+ .ant-card-body {
+ padding-bottom: 18px;
+ }
+ }
+
+ .content-box {
+ .ant-card-body {
+ padding-top: 14px;
+ }
+ }
+
+
+ .text-truncate {
+ white-space: normal;
+ }
+
+ .ant-form-item {
+ margin-bottom: 0;
+ }
+
+
+}
\ No newline at end of file
diff --git a/src/app/routes/financial-management/components/receipt-order/receipt-order-detail/receipt-order-detail.component.ts b/src/app/routes/financial-management/components/receipt-order/receipt-order-detail/receipt-order-detail.component.ts
new file mode 100644
index 00000000..17dd85b2
--- /dev/null
+++ b/src/app/routes/financial-management/components/receipt-order/receipt-order-detail/receipt-order-detail.component.ts
@@ -0,0 +1,89 @@
+/*
+ * @Description :
+ * @Version : 1.0
+ * @Author : Shiming
+ * @Date : 2022-01-20 10:00:39
+ * @LastEditors : Shiming
+ * @LastEditTime : 2022-01-25 15:40:10
+ * @FilePath : \\tms-obc-web\\src\\app\\routes\\financial-management\\components\\receipt-order\\receipt-order-detail\\receipt-order-detail.component.ts
+ * Copyright (C) 2022 huzhenhong. All rights reserved.
+ */
+import { Component, OnInit, ViewChild } from '@angular/core';
+import { ActivatedRoute } from '@angular/router';
+import { STComponent, STColumn, STRequestOptions } from '@delon/abc/st';
+import { FreightAccountService } from '../../../services/freight-account.service';
+
+@Component({
+ selector: 'app-receipt-order-detail',
+ templateUrl: './receipt-order-detail.component.html',
+ styleUrls: ['./receipt-order-detail.component.less'],
+})
+export class ReceiptOrderDetailComponent implements OnInit {
+ @ViewChild('st', { static: true })
+ st!: STComponent;
+ columns: { [key: string]: STColumn[] } = this.initST();
+ costInfo: any = {};
+ id: any = null;
+ constructor(public service: FreightAccountService, private route: ActivatedRoute) {
+ this.id = route.snapshot.params.id;
+ this.loadDetail(this.id);
+ }
+
+ ngOnInit(): void {}
+
+ beforeReq = (requestOptions: STRequestOptions) => {
+ Object.assign(requestOptions.body, {
+ id: this.id
+ });
+ return requestOptions;
+ };
+
+ loadDetail(id: any) {
+ this.service.request(this.service.$api_get_receipt_header, { id }).subscribe(res => {
+ if (res) {
+ this.costInfo = res;
+ }
+ });
+ }
+
+ goBack() {
+ history.go(-1);
+ }
+
+ private initST(): { [key: string]: STColumn[] } {
+ return {
+ cost: [
+ { title: '序号', render: 'no', width: 70, className: 'text-left' },
+ { title: '费用号', index: 'feeHId', className: 'text-left', width: 200 },
+ { title: '费用日期', index: 'billHId', className: 'text-center', width: 150 },
+ { title: '订单号', index: 'callNo', className: 'text-left', width: 200 },
+ { title: '订单日期', index: 'waybillHId', className: 'text-center', width: 150 },
+ { title: '订单费用类型', index: 'waybillDate', className: 'text-center', width: 160 },
+ { title: '费用类型', index: 'callNo', className: 'text-center', width: 160 },
+ { title: '费用科目', index: 'billLType', className: 'text-left', width: 160 },
+ { title: '结算客户', index: 'feeSubId', className: 'text-left', width: 150 },
+ {
+ title: '已收金额',
+ index: 'hrvatrate',
+ type: 'widget',
+ className: 'text-right',
+ widget: { type: 'currency-chy', params: ({ record }) => ({ value: record.yskmoney }) },
+ width: 140
+ }
+ ],
+ requested: [
+ { title: '序号', render: 'no', width: 70, className: 'text-left' },
+ { title: '结算客户', index: 'cnoName', className: 'text-left', width: 200 },
+ {
+ title: '预收金额',
+ index: 'yskmoney',
+ type: 'widget',
+ className: 'text-right',
+ widget: { type: 'currency-chy', params: ({ record }) => ({ value: record.yskmoney }) },
+ width: 200
+ },
+ { title: '预收备注', index: 'vatapptype', className: 'text-left', width: 200 }
+ ]
+ };
+ }
+}
diff --git a/src/app/routes/financial-management/components/receipt-order/receipt-order.component.html b/src/app/routes/financial-management/components/receipt-order/receipt-order.component.html
new file mode 100644
index 00000000..58f7732c
--- /dev/null
+++ b/src/app/routes/financial-management/components/receipt-order/receipt-order.component.html
@@ -0,0 +1,46 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/app/routes/financial-management/components/receipt-order/receipt-order.component.ts b/src/app/routes/financial-management/components/receipt-order/receipt-order.component.ts
new file mode 100644
index 00000000..bf8006d6
--- /dev/null
+++ b/src/app/routes/financial-management/components/receipt-order/receipt-order.component.ts
@@ -0,0 +1,291 @@
+import { Component, OnInit, ViewChild } from '@angular/core';
+import { Router } from '@angular/router';
+import { STComponent, STColumn, STRequestOptions, STChange } from '@delon/abc/st';
+import { SFComponent, SFSchema, SFDateWidgetSchema } from '@delon/form';
+import { NzModalService } from 'ng-zorro-antd/modal';
+import { AddCollectionInvoiceModalComponent } from 'src/app/routes/ticket-management/components/input-invoice/add-collection-invoice-modal/add-collection-invoice-modal.component';
+import { FreightAccountService } from '../../services/freight-account.service';
+
+@Component({
+ selector: 'app-receipt-order',
+ templateUrl: './receipt-order.component.html',
+ styleUrls: ['../../../commom/less/box.less', '../../../commom/less/expend-but.less']
+})
+export class ReceiptOrderComponent implements OnInit {
+ @ViewChild('st', { static: true })
+ st!: STComponent;
+ @ViewChild('sf', { static: false })
+ sf!: SFComponent;
+ columns: STColumn[] = this.initST();
+ searchSchema: SFSchema = this.initSF();
+
+ _$expand = false;
+
+ selectedRows: any[] = [];
+ constructor(public service: FreightAccountService, private nzModalService: NzModalService, private router: Router) {}
+
+ ngOnInit(): void {}
+
+ beforeReq = (requestOptions: STRequestOptions) => {
+ if (this.sf) {
+ Object.assign(requestOptions.body, {
+ ...this.sf.value
+ });
+ if (this.sf.value.brmdate) {
+ Object.assign(requestOptions.body, {
+ brmdate: {
+ start: this.sf.value.brmdate?.[0] || '',
+ end: this.sf.value.brmdate?.[1] || ''
+ }
+ });
+ }
+ if (this.sf.value.createTime) {
+ Object.assign(requestOptions.body, {
+ createTime: {
+ start: this.sf.value.createTime?.[0] || '',
+ end: this.sf.value.createTime?.[1] || ''
+ }
+ });
+ }
+ }
+ return requestOptions;
+ };
+
+ stChange(e: STChange): void {
+ switch (e.type) {
+ case 'checkbox':
+ this.selectedRows = e.checkbox!;
+ break;
+ }
+ }
+
+ addInvoice() {
+ if (this.selectedRows?.length <= 0) {
+ this.service.msgSrv.warning('请选择收款单');
+ return;
+ }
+ // const modal = this.nzModalService.create({
+ // nzTitle: '收款单',
+ // nzContent: AddCollectionInvoiceModalComponent,
+ // nzComponentParams: { i: { userId: 0 } },
+ // nzFooter: null
+ // });
+ }
+
+ /**
+ * 重置表单
+ */
+ resetSF() {
+ this.sf.reset();
+ this._$expand = false;
+ }
+
+ /**
+ * 伸缩查询条件
+ */
+ expandToggle() {
+ this._$expand = !this._$expand;
+ this.sf?.setValue('/expand', this._$expand);
+ }
+
+ private initSF(): SFSchema {
+ return {
+ properties: {
+ expand: {
+ type: 'boolean',
+ ui: {
+ hidden: true
+ }
+ },
+ brmcode: {
+ type: 'string',
+ title: '收款单号',
+ ui: {
+ placeholder: '请输入'
+ }
+ },
+ ltdId: {
+ type: 'string',
+ title: '网络货运人',
+ ui: {
+ widget: 'select',
+ placeholder: '请选择',
+ allowClear: true,
+ asyncData: () => this.service.getNetworkFreightForwarder()
+ },
+ default: null
+ },
+ bankreceipt: {
+ type: 'string',
+ title: '银行水单',
+ ui: {
+ placeholder: '请输入'
+ }
+ },
+ brmtype: {
+ type: 'string',
+ title: '收款类型',
+ ui: {
+ widget: 'dict-select',
+ params: { dictKey: 'driverrecord:receive:type' },
+ placeholder: '请选择',
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ }
+ },
+ brmmode: {
+ type: 'string',
+ title: '收款方式',
+ ui: {
+ widget: 'dict-select',
+ params: { dictKey: 'receive:mode' },
+ placeholder: '请选择',
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ }
+ },
+ arto: {
+ type: 'string',
+ title: '付款人',
+ ui: {
+ widget: 'select',
+ serverSearch: true,
+ searchDebounceTime: 300,
+ searchLoadingText: '搜索中...',
+ allowClear: true,
+ onSearch: (q: any) => this.service.getEnterpriceList({ enterpriseName: q }),
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ }
+ },
+ sts: {
+ type: 'string',
+ title: '收款状态',
+ ui: {
+ widget: 'dict-select',
+ params: { dictKey: 'write:off:status' },
+ placeholder: '请选择',
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ }
+ },
+ brmdate: {
+ title: '到账日期',
+ type: 'string',
+ ui: {
+ widget: 'sl-from-to-search',
+ format: 'yyyy-MM-dd',
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ } as SFDateWidgetSchema
+ },
+ createTime: {
+ title: '创建时间',
+ type: 'string',
+ ui: {
+ widget: 'sl-from-to-search',
+ format: 'yyyy-MM-dd',
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ } as SFDateWidgetSchema
+ },
+ // billHCode: {
+ // type: 'string',
+ // title: '订单号',
+ // ui: {
+ // placeholder: '请输入',
+ // visibleIf: {
+ // expand: (value: boolean) => value
+ // }
+ // }
+ // },
+ // feeHCodes: {
+ // type: 'string',
+ // title: '费用号',
+ // ui: {
+ // placeholder: '请输入',
+ // visibleIf: {
+ // expand: (value: boolean) => value
+ // }
+ // }
+ // },
+ remarks: {
+ type: 'string',
+ title: '收款备注',
+ ui: {
+ placeholder: '请输入',
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ }
+ }
+ }
+ };
+ }
+
+ private initST(): STColumn[] {
+ return [
+ { title: '', index: 'key', type: 'checkbox', width: 60, fixed: 'left', className: 'text-center' },
+ { title: '收款单号', index: 'brmcode', type: 'link', width: 180, className: 'text-left' },
+ // { title: '订单号', index: 'billHCode', width: 180, className: 'text-left' },
+ // { title: '费用号', index: 'feeCode', width: 180, className: 'text-left' },
+ { title: '网络货运人', index: 'ltdName', width: 200, className: 'text-left' },
+ { title: '到账日期', index: 'brmdate', type: 'date', width: 200, className: 'text-left' },
+ { title: '收款账户', index: 'ltdaccountId', width: 200, className: 'text-left' },
+ {
+ title: '到账金额',
+ index: 'brmmoney',
+ width: 200,
+ type: 'widget',
+ className: 'text-right',
+ widget: { type: 'currency-chy', params: ({ record }) => ({ value: record.brmmoney }) }
+ },
+ {
+ title: '核销金额',
+ index: 'brmmoney',
+ width: 200,
+ type: 'widget',
+ className: 'text-right',
+ widget: { type: 'currency-chy', params: ({ record }) => ({ value: record.brmmoney }) }
+ },
+ {
+ title: '预收金额',
+ index: 'yskmoney',
+ width: 200,
+ type: 'widget',
+ className: 'text-right',
+ widget: { type: 'currency-chy', params: ({ record }) => ({ value: record.yskmoney }) }
+ },
+ { title: '银行类型', index: 'banktypeLabel', width: 200, className: 'text-left' },
+ { title: '收款类型', index: 'brmtypeLabel', width: 150, className: 'text-left' },
+ { title: '收款方式', index: 'brmModeLabel', width: 150, className: 'text-left' },
+ { title: '付款人', index: 'artoname', width: 200, className: 'text-left' },
+ { title: '银行水单', index: 'bankreceipt', width: 200, className: 'text-left' },
+ { title: '创建时间', index: 'createTime', type: 'date', width: 200, className: 'text-left' },
+ // { title: '创建人', index: 'createUserName', width: 150, className: 'text-left' },
+ { title: '收款状态', index: 'stsLabel', width: 200, className: 'text-left' },
+ { title: '收款备注', index: 'remarks', width: 200, className: 'text-left' },
+ {
+ title: '操作',
+ width: '110px',
+ fixed: 'right',
+ className: 'text-center',
+ buttons: [
+ {
+ text: '浏览',
+ click: item => this.router.navigate(['/financial-management/receipt-order/detail/' + item.id])
+ }
+ // {
+ // text: '核销'
+ // }
+ ]
+ }
+ ];
+ }
+}
diff --git a/src/app/routes/financial-management/components/receivable-order/receivable-order-detail/receivable-order-detail.component.html b/src/app/routes/financial-management/components/receivable-order/receivable-order-detail/receivable-order-detail.component.html
new file mode 100644
index 00000000..0c48f68d
--- /dev/null
+++ b/src/app/routes/financial-management/components/receivable-order/receivable-order-detail/receivable-order-detail.component.html
@@ -0,0 +1,85 @@
+
+
+
+
+
+
+
+
+
+
+ {{headerInfo?.ltdName}}
+
+
+ {{headerInfo?.cnoName}}
+
+
+ {{headerInfo?.ltdaccountId}}
+
+
+ {{headerInfo?.ahxmoney | currency}}
+
+
+
+
+ {{headerInfo?.ahxdate}}
+
+
+ {{headerInfo?.artoname}}
+
+
+
+ {{headerInfo?.armoney | currency}}
+
+
+
+
+ {{headerInfo?.banktypeLabel}}
+
+
+ {{headerInfo?.brmtypeLabel}}
+
+
+ {{headerInfo?.bankreceipt}}
+
+
+ {{headerInfo?.remarks}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{index+1}}
+
+
+
\ No newline at end of file
diff --git a/src/app/routes/financial-management/components/receivable-order/receivable-order-detail/receivable-order-detail.component.less b/src/app/routes/financial-management/components/receivable-order/receivable-order-detail/receivable-order-detail.component.less
new file mode 100644
index 00000000..aebf12ee
--- /dev/null
+++ b/src/app/routes/financial-management/components/receivable-order/receivable-order-detail/receivable-order-detail.component.less
@@ -0,0 +1,13 @@
+:host::ng-deep {
+
+ .statistics-box {
+ .ant-form-item {
+ margin-bottom: 0;
+
+ .ant-form-item-control-input-content {
+ color: #f5222d;
+ }
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/src/app/routes/financial-management/components/receivable-order/receivable-order-detail/receivable-order-detail.component.ts b/src/app/routes/financial-management/components/receivable-order/receivable-order-detail/receivable-order-detail.component.ts
new file mode 100644
index 00000000..d630043c
--- /dev/null
+++ b/src/app/routes/financial-management/components/receivable-order/receivable-order-detail/receivable-order-detail.component.ts
@@ -0,0 +1,161 @@
+import { CurrencyPipe } from '@angular/common';
+import { Component, OnInit, ViewChild } from '@angular/core';
+import { ActivatedRoute } from '@angular/router';
+import { STComponent, STColumn, STRequestOptions } from '@delon/abc/st';
+import { SFComponent, SFSchema, SFDateWidgetSchema } from '@delon/form';
+import { TicketService } from 'src/app/routes/ticket-management/services/ticket.service';
+import { FreightAccountService } from '../../../services/freight-account.service';
+
+@Component({
+ selector: 'app-receivable-order-detail',
+ templateUrl: './receivable-order-detail.component.html',
+ styleUrls: ['./receivable-order-detail.component.less', '../../../../commom/less/expend-but.less', '../../../../commom/less/box.less'],
+ providers: [CurrencyPipe]
+})
+export class ReceivableOrderDetailComponent implements OnInit {
+ @ViewChild('st', { static: true })
+ st!: STComponent;
+ @ViewChild('sf', { static: false })
+ sf!: SFComponent;
+ columns: STColumn[] = this.initST();
+ searchSchema: SFSchema = this.initSF();
+
+ _$expand = false;
+
+ id = null;
+ billHId = null;
+ headerInfo: any = {};
+ constructor(public service: FreightAccountService, private route: ActivatedRoute, private currencyPipe: CurrencyPipe) {
+ this.id = route.snapshot.params.id;
+ this.billHId = route.snapshot.queryParams.billHId;
+ this.loadHeadInfo();
+ }
+
+ ngOnInit(): void {}
+
+ loadHeadInfo() {
+ this.service.request(this.service.$api_get_fico_header, { id: this.id }).subscribe(res => {
+ if (res) {
+ this.headerInfo = res;
+ }
+ });
+ }
+
+ beforeReq = (requestOptions: STRequestOptions) => {
+ Object.assign(requestOptions.body, { ahxHId: this.id });
+ if (this.sf) {
+ Object.assign(requestOptions.body, {
+ ...this.sf.value
+ });
+ if (this.sf.value.feedate?.[0]) {
+ Object.assign(requestOptions.body, {
+ feedate: {
+ start: this.sf.value.feedate?.[0] || '',
+ end: this.sf.value.feedate?.[1] || ''
+ }
+ });
+ }
+ }
+ return requestOptions;
+ };
+
+ goBack() {
+ history.go(-1);
+ }
+
+ /**
+ * 重置表单
+ */
+ resetSF() {
+ this.sf.reset();
+ }
+
+ /**
+ * 伸缩查询条件
+ */
+ expandToggle() {
+ this._$expand = !this._$expand;
+ this.sf?.setValue('/expand', this._$expand);
+ }
+
+ private initSF(): SFSchema {
+ return {
+ properties: {
+ expand: {
+ type: 'boolean',
+ ui: {
+ hidden: true
+ }
+ },
+ feeHCode: {
+ type: 'string',
+ title: '费用单',
+ ui: {
+ placeholder: '请输入'
+ }
+ },
+ billHCode: {
+ type: 'string',
+ title: '订单号',
+ ui: {
+ placeholder: '请输入'
+ }
+ },
+ cno: {
+ type: 'string',
+ title: '结算客户',
+ ui: {
+ widget: 'select',
+ placeholder: '请选择',
+ allowClear: true,
+ asyncData: () => this.service.getCloseAccount()
+ },
+ default: ''
+ },
+ feedate: {
+ title: '费用日期',
+ type: 'string',
+ ui: {
+ widget: 'sl-from-to-search',
+ format: 'yyyy-MM-dd',
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ } as SFDateWidgetSchema
+ }
+ // billTime: {
+ // title: '订单日期',
+ // type: 'string',
+ // ui: {
+ // widget: 'sl-from-to-search',
+ // format: 'yyyy-MM-dd',
+ // visibleIf: {
+ // expand: (value: boolean) => value
+ // }
+ // } as SFDateWidgetSchema
+ // }
+ }
+ };
+ }
+
+ private initST(): STColumn[] {
+ return [
+ { title: '序号', render: 'no', width: 80 },
+ { title: '费用号', index: 'feeLId', width: 100 },
+ { title: '费用日期', index: 'feedate', type: 'date', width: 150 },
+ { title: '订单号', index: 'billHCode', width: 100 },
+ // { title: '订单日期', index: 'billTime', width: 150 },
+ // { title: '费用类型', index: 'cnoName', width: 90 },
+ { title: '订单费用科目', index: 'billLTypeLabel', width: 100 },
+ { title: '费用科目', index: 'feeSubName', width: 140 },
+ { title: '结算客户', index: 'cnoName', width: 100 },
+ {
+ title: '已收金额',
+ index: 'ahxmoney',
+ width: 100,
+ className: 'text-right',
+ format: item => `${this.currencyPipe.transform(item.ahxmoney)}`
+ }
+ ];
+ }
+}
diff --git a/src/app/routes/financial-management/components/receivable-order/receivable-order.component.html b/src/app/routes/financial-management/components/receivable-order/receivable-order.component.html
new file mode 100644
index 00000000..0755a3f3
--- /dev/null
+++ b/src/app/routes/financial-management/components/receivable-order/receivable-order.component.html
@@ -0,0 +1,57 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/app/routes/financial-management/components/receivable-order/receivable-order.component.ts b/src/app/routes/financial-management/components/receivable-order/receivable-order.component.ts
new file mode 100644
index 00000000..38da87bb
--- /dev/null
+++ b/src/app/routes/financial-management/components/receivable-order/receivable-order.component.ts
@@ -0,0 +1,324 @@
+import { CurrencyPipe } from '@angular/common';
+import { Component, OnInit, ViewChild } from '@angular/core';
+import { Router } from '@angular/router';
+import { STComponent, STColumn, STRequestOptions, STChange } from '@delon/abc/st';
+import { SFComponent, SFSchema, SFDateWidgetSchema } from '@delon/form';
+import { NzModalService } from 'ng-zorro-antd/modal';
+import { TicketService } from 'src/app/routes/ticket-management/services/ticket.service';
+import { FreightAccountService } from '../../services/freight-account.service';
+
+@Component({
+ selector: 'app-receivable-order',
+ templateUrl: './receivable-order.component.html',
+ styleUrls: ['../../../commom/less/box.less', '../../../commom/less/expend-but.less'],
+ providers: [CurrencyPipe]
+})
+export class ReceivableOrderComponent implements OnInit {
+ @ViewChild('st', { static: true })
+ st!: STComponent;
+ @ViewChild('sf', { static: false })
+ sf!: SFComponent;
+ columns: STColumn[] = this.initST();
+ searchSchema: SFSchema = this.initSF();
+
+ _$expand = false;
+
+ selectedRows: any[] = [];
+
+ info: any = {};
+ constructor(
+ public service: FreightAccountService,
+ private nzModalService: NzModalService,
+ private router: Router,
+ private currencyPipe: CurrencyPipe
+ ) {}
+
+ ngOnInit(): void {
+ }
+
+ loadInfo() {
+ this.service.request(this.service.$api_get_fico_sum).subscribe(res => {
+ if (res) {
+ this.info = res;
+ }
+ });
+ }
+
+ beforeReq = (requestOptions: STRequestOptions) => {
+ if (this.sf) {
+ Object.assign(requestOptions.body, {
+ ...this.sf.value
+ });
+ if (this.sf.value?.createTime) {
+ Object.assign(requestOptions.body, {
+ createTime: {
+ start: this.sf.value.createTime?.[0] || '',
+ end: this.sf.value.createTime?.[1] || ''
+ }
+ });
+ }
+ if (this.sf.value?.ahxdate) {
+ Object.assign(requestOptions.body, {
+ ahxdate: {
+ start: this.sf.value.ahxdate?.[0] || '',
+ end: this.sf.value.ahxdate?.[1] || ''
+ }
+ });
+ }
+ }
+ this.loadInfo();
+ return requestOptions;
+ };
+
+ stChange(e: STChange): void {
+ switch (e.type) {
+ case 'checkbox':
+ this.selectedRows = e.checkbox!;
+ break;
+ }
+ }
+
+ /**
+ * 重置表单
+ */
+ resetSF() {
+ this.sf.reset();
+ this._$expand = false;
+ }
+
+ /**
+ * 伸缩查询条件
+ */
+ expandToggle() {
+ this._$expand = !this._$expand;
+ this.sf?.setValue('/expand', this._$expand);
+ }
+
+ private initSF(): SFSchema {
+ return {
+ properties: {
+ expand: {
+ type: 'boolean',
+ ui: {
+ hidden: true
+ }
+ },
+ ahxcode: {
+ type: 'string',
+ title: '核销单号',
+ ui: {
+ placeholder: '请输入'
+ }
+ },
+ ltdId: {
+ type: 'string',
+ title: '网络货运人',
+ ui: {
+ widget: 'select',
+ placeholder: '请选择',
+ allowClear: true,
+ asyncData: () => this.service.getNetworkFreightForwarder()
+ },
+ default: ''
+ },
+ bankreceipt: {
+ type: 'string',
+ title: '银行水单',
+ ui: {
+ placeholder: '请输入'
+ }
+ },
+ brmtype: {
+ type: 'string',
+ title: '收款类型',
+ ui: {
+ widget: 'dict-select',
+ params: { dictKey: 'driverrecord:receive:type' },
+ placeholder: '请选择',
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ }
+ },
+ arvattype: {
+ type: 'string',
+ title: '付款类型',
+ ui: {
+ widget: 'dict-select',
+ params: { dictKey: 'pay:type' },
+ placeholder: '请选择',
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ }
+ },
+ cno: {
+ type: 'string',
+ title: '结算客户',
+ ui: {
+ widget: 'select',
+ placeholder: '请选择',
+ allowClear: true,
+ asyncData: () => this.service.getCloseAccount(),
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ }
+ },
+ arto: {
+ type: 'string',
+ title: '付款人',
+ ui: {
+ widget: 'select',
+ serverSearch: true,
+ searchDebounceTime: 300,
+ searchLoadingText: '搜索中...',
+ allowClear: true,
+ onSearch: (q: any) => this.service.getEnterpriceList({ enterpriseName: q }),
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ }
+ },
+ sts: {
+ type: 'string',
+ title: '核销状态',
+ enum: [
+ { value: 1, label: '已核销' },
+ { value: 0, label: '待核销' }
+ ],
+ ui: {
+ widget: 'select',
+ placeholder: '请选择',
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ }
+ },
+ banktype: {
+ type: 'string',
+ title: '银行类型',
+ enum: [
+ { label: '全部', value: '' },
+ { label: '平安银行', value: '1' },
+ { label: '浦发银行', value: '2' }
+ ],
+ ui: {
+ widget: 'select',
+ placeholder: '请选择',
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ },
+ default: ''
+ },
+ ahxdate: {
+ title: '核销日期',
+ type: 'string',
+ ui: {
+ widget: 'sl-from-to-search',
+ format: 'yyyy-MM-dd',
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ } as SFDateWidgetSchema
+ },
+ createTime: {
+ title: '创建时间',
+ type: 'string',
+ ui: {
+ widget: 'sl-from-to-search',
+ format: 'yyyy-MM-dd',
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ } as SFDateWidgetSchema
+ },
+ billHCode: {
+ type: 'string',
+ title: '订单号',
+ ui: {
+ placeholder: '请输入',
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ }
+ },
+ // orderS3: {
+ // type: 'string',
+ // title: '费用号',
+ // ui: {
+ // placeholder: '请输入',
+ // visibleIf: {
+ // expand: (value: boolean) => value
+ // }
+ // }
+ // },
+ remarks: {
+ type: 'string',
+ title: '核销备注',
+ ui: {
+ autocomplete: 'off',
+ placeholder: '请选择',
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ }
+ }
+ }
+ };
+ }
+
+ private initST(): STColumn[] {
+ return [
+ { title: '', index: 'key', type: 'checkbox' },
+ { title: '核销单号', index: 'ahxcode', type: 'link', width: 210 },
+ { title: '订单号', index: 'billHCode', type: 'link', width: 180 },
+ { title: '网络货运人', index: 'ltdName', width: 220 },
+ { title: '核销日期', index: 'ahxdate', type: 'date', width: 160 },
+ { title: '收款账户', index: 'ltdaccountId', width: 200 },
+ { title: '核销类型', index: 'ahxType', type: 'enum', enum: { '1': '预收款' }, width: 120 },
+ {
+ title: '核销金额',
+ index: 'ahxmoney',
+ width: 140,
+ className: 'text-right',
+ format: item => `${this.currencyPipe.transform(item.ahxmoney)}`
+ },
+ {
+ title: '应收金额',
+ index: 'armoney',
+ width: 140,
+ className: 'text-right',
+ format: item => `${this.currencyPipe.transform(item.armoney)}`
+ },
+ { title: '银行类型', index: 'banktype', type: 'enum', enum: { '1': '平安', '2': '浦发' }, width: 120 },
+ { title: '收款类型', index: 'arvattype', type: 'enum', enum: { '1': '费用款项' }, width: 120 },
+ { title: '付款人', index: 'artoname', width: 200 },
+ { title: '付款账户', index: 'shipperaccount', width: 170 },
+ { title: '结算客户', index: 'cnoName', width: 120 },
+ { title: '银行水单', index: 'bankreceipt', width: 200 },
+ { title: '创建时间', index: 'createTime', width: 180 },
+ // { title: '收款人', index: 'driver2IdName', width: 120 },
+ // { title: '创建人', index: 'createUserIdLabel', width: 120 },
+ { title: '核销状态', index: 'sts', type: 'enum', enum: { 0: '待核销', 1: '已核销' }, width: 120 },
+ { title: '核销备注', index: 'remarks', width: 120 },
+ {
+ title: '操作',
+ fixed: 'right',
+ width: 120,
+ className: 'text-center',
+ buttons: [
+ {
+ text: '浏览',
+ click: item =>
+ this.router.navigate(['/financial-management/receivable-order/detail/' + item.id], { queryParams: { billHId: item.billHId } })
+ }
+ // {
+ // text: '核销'
+ // }
+ ]
+ }
+ ];
+ }
+}
diff --git a/src/app/routes/financial-management/components/recharge-record/recharge-record.component.html b/src/app/routes/financial-management/components/recharge-record/recharge-record.component.html
new file mode 100644
index 00000000..8c7c5d10
--- /dev/null
+++ b/src/app/routes/financial-management/components/recharge-record/recharge-record.component.html
@@ -0,0 +1,56 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.transferBankOpenName }}
{{ item.transferBankCardNumber }}
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/app/routes/financial-management/components/recharge-record/recharge-record.component.ts b/src/app/routes/financial-management/components/recharge-record/recharge-record.component.ts
new file mode 100644
index 00000000..f06bc8cb
--- /dev/null
+++ b/src/app/routes/financial-management/components/recharge-record/recharge-record.component.ts
@@ -0,0 +1,245 @@
+import { Component, OnInit, ViewChild } from '@angular/core';
+import { STComponent, STColumn, STChange, STRequestOptions } from '@delon/abc/st';
+import { SFComponent, SFSchema, SFDateWidgetSchema } from '@delon/form';
+import { NzModalService } from 'ng-zorro-antd/modal';
+import { FreightAccountService } from '../../services/freight-account.service';
+
+@Component({
+ selector: 'app-recharge-record',
+ templateUrl: './recharge-record.component.html',
+ styleUrls: ['../../../commom/less/box.less', '../../../commom/less/expend-but.less']
+})
+export class RechargeRecordComponent implements OnInit {
+ @ViewChild('st', { static: true })
+ st!: STComponent;
+ @ViewChild('sf', { static: false })
+ sf!: SFComponent;
+ columns: STColumn[] = this.initST();
+ searchSchema: SFSchema = this.initSF();
+
+ @ViewChild('remarkodal', { static: true })
+ remarkodal!: any;
+ rechargeRemark = '';
+
+ _$expand = false;
+ constructor(public service: FreightAccountService, private modal: NzModalService) {}
+
+ ngOnInit(): void {}
+
+ beforeReq = (requestOptions: STRequestOptions) => {
+ if (this.sf) {
+ Object.assign(requestOptions.body, { ...this.sf.value });
+ if (this.sf.value.createTime) {
+ Object.assign(requestOptions.body, {
+ createTime: {
+ start: this.sf.value.createTime?.[0] || '',
+ end: this.sf.value.createTime?.[1] || ''
+ }
+ });
+ }
+ }
+ return requestOptions;
+ };
+
+ addRemark(item: any) {
+ this.rechargeRemark = item.remark;
+ const modal = this.modal.create({
+ nzTitle: this.rechargeRemark ? '修改备注' : '添加备注',
+ nzContent: this.remarkodal,
+ nzFooter: [
+ {
+ type: 'primary',
+ label: '确认',
+ loading: () => this.service.http.loading,
+ onClick: () => {
+ this.service.request(this.service.$api_edit_remark, { id: item.id, remark: this.rechargeRemark }).subscribe(res => {
+ if (res) {
+ this.service.msgSrv.success('修改成功');
+ this.st.load(1);
+ modal.destroy();
+ }
+ });
+ return false;
+ }
+ }
+ ]
+ });
+ }
+
+ goBack() {
+ history.go(-1);
+ }
+
+ /**
+ * 重置表单
+ */
+ resetSF() {
+ this.sf.reset();
+ this._$expand = false;
+ }
+
+ /**
+ * 伸缩查询条件
+ */
+ expandToggle() {
+ this._$expand = !this._$expand;
+ this.sf?.setValue('/expand', this._$expand);
+ }
+
+ exportList() {
+ this.service.exportStart({ ...this.sf.value, pageSize: -1 }, this.service.$api_get_exportPageByOperator);
+ }
+
+ private initSF(): SFSchema {
+ return {
+ properties: {
+ expand: {
+ type: 'boolean',
+ ui: {
+ hidden: true
+ }
+ },
+ rechargeNo: {
+ type: 'string',
+ title: '充值单号',
+ ui: {
+ placeholder: '请输入'
+ }
+ },
+ rechargeStatus: {
+ type: 'string',
+ title: '充值状态',
+ enum: [
+ { label: '全部', value: '' },
+ { label: '充值中', value: '1' },
+ { label: '充值失败', value: '2' },
+ { label: '充值成功', value: '3' }
+ ],
+ ui: {
+ widget: 'select',
+ placeholder: '请选择'
+ },
+ default: ''
+ },
+ createTime: {
+ title: '充值时间',
+ type: 'string',
+ ui: {
+ widget: 'sl-from-to-search',
+ format: 'yyyy-MM-dd',
+ placeholder: '请选择',
+ nzShowTime: true
+ } as SFDateWidgetSchema
+ },
+ roleName: {
+ type: 'string',
+ title: '账户名称',
+ ui: {
+ placeholder: '请输入',
+ autocomplete: 'off',
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ }
+ },
+ accountType: {
+ type: 'string',
+ title: '账户类型',
+ enum: [
+ { label: '全部', value: '' },
+ { label: '货主账户', value: '1' },
+ { label: '司机账户', value: '2' },
+ { label: '营商商账户', value: '3' }
+ ],
+ ui: {
+ widget: 'select',
+ placeholder: '请选择',
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ },
+ default: ''
+ },
+ ltdId: {
+ type: 'string',
+ title: '网络货运人',
+ ui: {
+ widget: 'select',
+ placeholder: '请选择',
+ visibleIf: {
+ expand: (value: boolean) => value
+ },
+ allowClear: true,
+ asyncData: () => this.service.getNetworkFreightForwarder()
+ }
+ },
+ bankType: {
+ type: 'string',
+ title: '银行类型',
+ enum: [
+ { label: '全部', value: '' },
+ { label: '平安银行', value: '1' },
+ { label: '浦发银行', value: '2' }
+ ],
+ ui: {
+ widget: 'select',
+ placeholder: '请选择',
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ },
+ default: ''
+ }
+ }
+ };
+ }
+
+ private initST(): STColumn[] {
+ return [
+ { title: '充值时间', index: 'createTime', type: 'date', width: 180 },
+ { title: '充值单号', index: 'rechargeNo', width: 140 },
+ { title: '网络货运人', index: 'ltdName', width: 160 },
+ { title: '银行类型', index: 'bankTypeLabel', width: 100 },
+ { title: '账户类型', index: 'accountTypeLabel', width: 100 },
+ { title: '账户名称', index: 'roleName', width: 160 },
+ { title: '虚拟账户', index: 'virtualAccount', width: 100 },
+ {
+ title: '充值金额',
+ index: 'rechargeAmount',
+ width: 160,
+ type: 'widget',
+ className: 'text-right',
+ widget: { type: 'currency-chy', params: ({ record }) => ({ value: record.rechargeAmount }) }
+ },
+ { title: '充值银行账户', render: 'transferBankAccount', width: 200 },
+ { title: '充值方式', index: 'payChannelLabel', width: 100 },
+ { title: '充值状态', index: 'rechargeStatusLabel', width: 100 },
+ { title: '银行流水号', index: 'paySerialNumber', width: 120 },
+ {
+ title: '操作',
+ width: 120,
+ fixed: 'right',
+ className: 'text-center',
+ buttons: [
+ { type: 'divider' },
+ {
+ text: '查看回单
',
+ click: item =>
+ this.service.getReceiptUrl(item.receiptUrl, {
+ bankType: item.bankType,
+ rmYll: item.roleId,
+ snglFlgCd: item.paySerialNumber2,
+ bussType: '05',
+ ltdId: item.ltdId,
+ accountType: item.accountType
+ })
+ },
+ {
+ text: '添加备注',
+ click: item => this.addRemark(item)
+ }
+ ]
+ }
+ ];
+ }
+}
diff --git a/src/app/routes/financial-management/components/refund-record/refund-record.component.html b/src/app/routes/financial-management/components/refund-record/refund-record.component.html
new file mode 100644
index 00000000..251eff68
--- /dev/null
+++ b/src/app/routes/financial-management/components/refund-record/refund-record.component.html
@@ -0,0 +1,66 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.orderRefundCode }}
{{ item.refundStatusLabel }}
+
+
+
+ {{cost.costName}}:{{ cost.refundAmount |currency }}
+
+
+
+
+ {{ bill.paymentApplicationCode }}
+
+
+
+ {{ item.driverName }}
{{ item.driverTelephone }}
{{ item.driverLicencePlate }}
+
+
+ {{ item.captainName }}
{{ item.captainTelephone }}
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/app/routes/financial-management/components/refund-record/refund-record.component.ts b/src/app/routes/financial-management/components/refund-record/refund-record.component.ts
new file mode 100644
index 00000000..6074f36b
--- /dev/null
+++ b/src/app/routes/financial-management/components/refund-record/refund-record.component.ts
@@ -0,0 +1,293 @@
+import { Component, OnInit, ViewChild } from '@angular/core';
+import { Router } from '@angular/router';
+import { STComponent, STColumn, STRequestOptions, STChange } from '@delon/abc/st';
+import { SFComponent, SFSchema, SFDateWidgetSchema } from '@delon/form';
+import { NzModalService } from 'ng-zorro-antd/modal';
+import { FreightAccountService } from '../../services/freight-account.service';
+
+@Component({
+ selector: 'app-refund-record',
+ templateUrl: './refund-record.component.html',
+ styleUrls: ['../../../commom/less/box.less']
+})
+export class RefundRecordComponent implements OnInit {
+ @ViewChild('st', { static: true })
+ st!: STComponent;
+ @ViewChild('sf', { static: false })
+ sf!: SFComponent;
+ @ViewChild('auditModal', { static: false })
+ auditModal!: any;
+ columns: STColumn[] = this.initST();
+ searchSchema: SFSchema = this.initSF();
+
+ _$expand = false;
+ refundStatus: any = '';
+
+ msg = '';
+
+ constructor(public service: FreightAccountService, private nzModalService: NzModalService, private router: Router) {}
+
+ ngOnInit(): void {}
+
+ beforeReq = (requestOptions: STRequestOptions) => {
+ Object.assign(requestOptions.body, { refundStatus: this.refundStatus || null });
+ if (this.sf) {
+ Object.assign(requestOptions.body, {
+ ...this.sf.value,
+ refundExecuteTime: {
+ start: this.sf.value.refundExecuteTime?.[0] || '',
+ end: this.sf.value.refundExecuteTime?.[1] || ''
+ }
+ });
+ }
+ return requestOptions;
+ };
+
+ changeRefundStatus(status?: string) {
+ this.refundStatus = status || null;
+ this.st.load(1);
+ }
+
+ auditAction(item?: any) {
+ this.msg = '';
+ const modal = this.nzModalService.create({
+ nzTitle: '审核',
+ nzContent: this.auditModal,
+ nzFooter: [
+ {
+ label: '拒绝',
+ type: 'default',
+ onClick: () => {
+ if (!this.msg) {
+ this.service.msgSrv.warning('请填写原因');
+ return false;
+ }
+ this.service
+ .request(this.service.$api_disagree_refund_record, {
+ applicationId: item.id,
+ remark: this.msg
+ })
+ .subscribe(res => {
+ if (res) {
+ this.service.msgSrv.success('审核拒绝成功');
+ modal.destroy(true);
+ this.st.load(1);
+ }
+ });
+ return false;
+ }
+ },
+ {
+ label: '通过',
+ type: 'primary',
+ onClick: () => {
+ this.service
+ .request(this.service.$api_agree_refund_record, {
+ applicationId: item.id,
+ remark: this.msg
+ })
+ .subscribe(res => {
+ if (res) {
+ this.service.msgSrv.success('审核通过成功');
+ modal.destroy(true);
+ this.st.load(1);
+ }
+ });
+ return false;
+ }
+ }
+ ]
+ });
+ }
+
+ reApply(item: any) {
+ const modal = this.nzModalService.warning({
+ nzTitle: '确定要重新发起退款?',
+ nzOnOk: () => {
+ this.service
+ .request(this.service.$api_rebulid_refund_record, {
+ applicationId: item.id
+ })
+ .subscribe(res => {
+ if (res) {
+ this.service.msgSrv.success('发起成功');
+ modal.destroy(true);
+ this.st.load(1);
+ }
+ });
+ return false;
+ }
+ });
+ }
+
+ /**
+ * 重置表单
+ */
+ resetSF() {
+ this.sf.reset();
+ this._$expand = false;
+ }
+
+ /**
+ * 伸缩查询条件
+ */
+ expandToggle() {
+ this._$expand = !this._$expand;
+ this.sf?.setValue('/expand', this._$expand);
+ }
+
+ private initSF(): SFSchema {
+ return {
+ properties: {
+ expand: {
+ type: 'boolean',
+ ui: {
+ hidden: true
+ }
+ },
+ orderRefundCode: {
+ type: 'string',
+ title: '退款单号',
+ ui: {
+ placeholder: '请输入'
+ }
+ },
+ refundType: {
+ type: 'string',
+ title: '退款类型',
+ enum: [
+ { value: '1', label: '平台退款货主' },
+ { value: '2', label: '司机退款平台' },
+ { value: '3', label: '车队长退款司机' },
+ { value: '4', label: '车队长退款平台' }
+ ],
+ ui: {
+ widget: 'select',
+ placeholder: '请选择'
+ }
+ },
+ enterpriseInfoName: {
+ type: 'string',
+ title: '货主',
+ ui: {
+ placeholder: '请输入'
+ }
+ },
+ billCode: {
+ type: 'string',
+ title: '订单号',
+ ui: {
+ visibleIf: {
+ expand: (value: boolean) => value
+ },
+ placeholder: '请输入'
+ }
+ },
+ enterpriseProjectName: {
+ type: 'string',
+ title: '所属项目',
+ ui: {
+ placeholder: '请输入',
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ }
+ },
+ resourceCode: {
+ type: 'string',
+ title: '货源号',
+ ui: {
+ visibleIf: {
+ expand: (value: boolean) => value
+ },
+ placeholder: '请输入'
+ }
+ },
+ refundExecuteTime: {
+ title: '退款时间',
+ type: 'string',
+ ui: {
+ widget: 'sl-from-to-search',
+ format: 'yyyy-MM-dd',
+ placeholder: '请选择',
+ visibleIf: {
+ expand: (value: boolean) => value
+ },
+ nzShowTime: true
+ } as SFDateWidgetSchema
+ },
+ ltdId: {
+ type: 'string',
+ title: '网络货运人',
+ ui: {
+ widget: 'select',
+ placeholder: '请选择',
+ allowClear: true,
+ asyncData: () => this.service.getNetworkFreightForwarder(),
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ }
+ },
+ bankType: {
+ type: 'string',
+ title: '银行类型',
+ ui: {
+ widget: 'dict-select',
+ params: { dictKey: 'bankname:type' },
+ placeholder: '请输入',
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ }
+ }
+ }
+ };
+ }
+
+ private initST(): STColumn[] {
+ return [
+ { title: '退款单号', render: 'orderRefundCode', width: 190 },
+ { title: '退款类型', index: 'refundTypeLabel', width: 140 },
+ { title: '退款金额', render: 'refundAmount', className: 'text-right', width: 180 },
+ { title: '退款时间', index: 'refundExecuteTime', width: 170 },
+ { title: '货主', index: 'enterpriseInfoName', width: 150 },
+ { title: '所属项目', index: 'enterpriseProjectName', width: 140 },
+ { title: '支付单', render: 'billRefundPaymentVOS', width: 150 },
+ { title: '订单号', index: 'billCode', width: 150 },
+ { title: '货源号', index: 'resourceCode', width: 150 },
+ { title: '司机', render: 'driver', width: 150 },
+ { title: '收款人', render: 'captain', width: 150 },
+ { title: '网络货运人', index: 'ltdName', width: 180 },
+ { title: '银行类型', index: 'bankTypeLabel', width: 120 },
+ { title: '退款原因', index: 'reason', width: 170 },
+ { title: '失败原因', index: 'failCause', width: 170 },
+ {
+ title: '操作',
+ fixed: 'right',
+ className: 'text-center',
+ width: '150px',
+ buttons: [
+ {
+ text: '审核',
+ iif: item => item.refundStatus === '1',
+ click: item => this.auditAction(item)
+ },
+ {
+ text: '重新发起',
+ iif: item => item.refundStatus === '5',
+ click: item => this.reApply(item)
+ }
+ // {
+ // text: '关闭',
+ // click: item => this.router.navigate(['/financial-management/withdrawals-record/detail/' + item.id])
+ // }
+ ]
+ }
+ ];
+ }
+ // 导出
+ exprot() {
+ this.service.exportStart({ ...this.sf.value, pageSize: -1 }, this.service.$api_get_asyncExportBillRefundApplicationList);
+ }
+}
diff --git a/src/app/routes/financial-management/components/transaction-flow/transaction-flow.component.html b/src/app/routes/financial-management/components/transaction-flow/transaction-flow.component.html
new file mode 100644
index 00000000..bd7fb2aa
--- /dev/null
+++ b/src/app/routes/financial-management/components/transaction-flow/transaction-flow.component.html
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/app/routes/financial-management/components/transaction-flow/transaction-flow.component.less b/src/app/routes/financial-management/components/transaction-flow/transaction-flow.component.less
new file mode 100644
index 00000000..cd8c3436
--- /dev/null
+++ b/src/app/routes/financial-management/components/transaction-flow/transaction-flow.component.less
@@ -0,0 +1,41 @@
+:host::ng-deep {
+ .search-box {
+ .ant-card-body {
+ padding-bottom: 18px;
+ }
+ }
+
+ .content-box {
+ .ant-card-body {
+ padding-top: 0;
+ }
+ }
+
+ nz-range-picker {
+ width: 100%;
+ }
+
+ .ant-tabs-tab-btn {
+ padding-left : 16px;
+ padding-right: 16px;
+ }
+
+ .text-truncate {
+ white-space: normal;
+ }
+}
+
+.expend-options {
+ margin-top: 0px;
+}
+
+
+@media (min-width: 1200px) {
+ .expend-options {
+ max-width: 400px;
+ position : absolute;
+ right : 0;
+ bottom : 25px;
+ }
+
+}
\ No newline at end of file
diff --git a/src/app/routes/financial-management/components/transaction-flow/transaction-flow.component.ts b/src/app/routes/financial-management/components/transaction-flow/transaction-flow.component.ts
new file mode 100644
index 00000000..0e7987e9
--- /dev/null
+++ b/src/app/routes/financial-management/components/transaction-flow/transaction-flow.component.ts
@@ -0,0 +1,278 @@
+import { CurrencyPipe } from '@angular/common';
+import { Component, ViewChild } from '@angular/core';
+import { Router } from '@angular/router';
+import { STComponent, STColumn, STRequestOptions } from '@delon/abc/st';
+import { SFComponent, SFSchema, SFDateWidgetSchema } from '@delon/form';
+import { NzModalService } from 'ng-zorro-antd/modal';
+
+import { FreightAccountService } from '../../services/freight-account.service';
+
+@Component({
+ selector: 'app-transaction-flow',
+ templateUrl: './transaction-flow.component.html',
+ styleUrls: ['./transaction-flow.component.less'],
+ providers: [CurrencyPipe]
+})
+export class TransactionFlowComponent {
+ @ViewChild('st', { static: true })
+ st!: STComponent;
+ @ViewChild('sf', { static: false })
+ sf!: SFComponent;
+ columns: STColumn[] = this.initST();
+ searchSchema: SFSchema = this.initSF();
+
+ _$expand = false;
+
+ constructor(
+ public service: FreightAccountService,
+ private nzModalService: NzModalService,
+ private router: Router,
+ private currencyPipe: CurrencyPipe
+ ) {}
+
+ beforeReq = (requestOptions: STRequestOptions) => {
+ if (this.sf) {
+ Object.assign(requestOptions.body, {
+ ...this.sf.value,
+ createTime: {
+ start: this.sf.value.createTime?.[0] || '',
+ end: this.sf.value.createTime?.[1] || ''
+ }
+ });
+ }
+ return requestOptions;
+ };
+
+ /**
+ * 重置表单
+ */
+ resetSF() {
+ this.sf.reset();
+ this._$expand = false;
+ }
+
+ /**
+ * 伸缩查询条件
+ */
+ expandToggle() {
+ this._$expand = !this._$expand;
+ this.sf?.setValue('/expand', this._$expand);
+ }
+
+ private initSF(): SFSchema {
+ return {
+ properties: {
+ expand: {
+ type: 'boolean',
+ ui: {
+ hidden: true
+ }
+ },
+ createTime: {
+ title: '交易时间',
+ type: 'string',
+ ui: {
+ widget: 'sl-from-to-search',
+ format: 'yyyy-MM-dd',
+ placeholder: '请选择'
+ } as SFDateWidgetSchema
+ },
+ transactionNumber: {
+ type: 'string',
+ title: '流水号',
+ ui: {
+ placeholder: '请输入'
+ }
+ },
+ businessNumber: {
+ type: 'string',
+ title: '关联单号',
+ ui: {
+ placeholder: '请输入'
+ }
+ },
+ orderSn: {
+ type: 'string',
+ title: '订单号',
+ ui: {
+ placeholder: '请输入',
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ }
+ },
+ tradeType: {
+ type: 'string',
+ title: '交易类型',
+ enum: [
+ { label: '全部', value: '' },
+ { label: '运费支付', value: 1 },
+ { label: '附加费支付', value: 2 },
+ { label: '运费退款', value: 3 },
+ { label: '附加费退款', value: 4 },
+ { label: '保费支付', value: 5 },
+ { label: '保费退款', value: 6 },
+ { label: '余额充值', value: 7 },
+ { label: '余额提现', value: 8 },
+ { label: '资金分配', value: 9 },
+ { label: '资金回收', value: 10 }
+ ],
+ ui: {
+ widget: 'select',
+ placeholder: '请选择',
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ },
+ default: ''
+ },
+ incomeType: {
+ type: 'string',
+ title: '收支类型',
+ enum: [
+ { label: '全部', value: '' },
+ { label: '收入', value: 2 },
+ { label: '支出', value: 1 }
+ ],
+ ui: {
+ widget: 'select',
+ placeholder: '请选择',
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ },
+ default: ''
+ },
+ channelSource: {
+ type: 'string',
+ title: '账户类型',
+ enum: [
+ { label: '全部', value: '' },
+ { label: '货主账户', value: '1' },
+ { label: '司机账户', value: '2' },
+ { label: '运营商账户', value: '3' }
+ ],
+ ui: {
+ widget: 'select',
+ placeholder: '请选择',
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ },
+ default: ''
+ },
+ roleName: {
+ type: 'string',
+ title: '账户名称',
+ ui: {
+ placeholder: '请输入',
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ }
+ },
+ projectId: {
+ type: 'string',
+ title: '所属项目',
+ ui: {
+ widget: 'select',
+ placeholder: '请选择',
+ allowClear: true,
+ visibleIf: {
+ expand: (value: boolean) => value
+ },
+ asyncData: () => this.service.getEnterpriseProject()
+ },
+ default: ''
+ },
+ bankType: {
+ type: 'string',
+ title: '银行类型',
+ enum: [
+ { label: '全部', value: '' },
+ { label: '平安银行', value: '1' },
+ { label: '浦发银行', value: '2' }
+ ],
+ ui: {
+ widget: 'select',
+ placeholder: '请选择',
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ },
+ default: ''
+ },
+ ltdId: {
+ type: 'string',
+ title: '网络货运人',
+ ui: {
+ widget: 'select',
+ placeholder: '请选择',
+ allowClear: true,
+ visibleIf: {
+ expand: (value: boolean) => value
+ },
+ asyncData: () => this.service.getNetworkFreightForwarder()
+ },
+ default: ''
+ }
+ }
+ };
+ }
+
+ private initST(): STColumn[] {
+ return [
+ { title: '交易时间', index: 'createTime', width: 180 },
+ { title: '流水号', index: 'transactionNumber', width: 180 },
+ { title: '交易类型', index: 'tradeTypeLabel', width: 120 },
+ { title: '关联单号', index: 'businessNumber', width: 150 },
+ { title: '订单号', index: 'orderSn', width: 150 },
+ { title: '账户类型', index: 'accountTypeLabel', width: 130 },
+ { title: '账户名称', index: 'roleName', width: 180 },
+ { title: '所属项目', index: 'projectName', width: 140 },
+ { title: '收支类型', index: 'incomeTypeLabel', width: 100, className: 'text-center' },
+ {
+ title: '交易金额',
+ index: 'amount',
+ width: 100,
+ type: 'widget',
+ className: 'text-right',
+ widget: { type: 'currency-chy', params: ({ record }) => ({ value: record.amount }) }
+ },
+ {
+ title: '账户余额',
+ width: 150,
+ type: 'widget',
+ className: 'text-right',
+ widget: { type: 'currency-chy', params: ({ record }) => ({ value: record.accountBalance }) }
+ },
+ { title: '网络货运人', index: 'ltdName', width: 180 },
+ { title: '银行类型', index: 'bankTypeLabel', width: 100 },
+ { title: '银行流水号', index: 'channelPaySn', width: 170 },
+ {
+ title: '操作',
+ fixed: 'right',
+ className: 'text-center',
+ width: 120,
+ buttons: [
+ {
+ text: '查看回单',
+ iif: item => item.tradeType !== '9' && item.tradeType !== '10',
+ click: item =>
+ this.service.getReceiptUrl(item.receiptUrl, {
+ bankType: item.bankType,
+ rmYll: item.roleId,
+ snglFlgCd: item.channelPaySn,
+ bussType: item.tradeType === '7' ? '05' : item.tradeType === '8' ? '06' : '07',
+ ltdId: item.ltdId,
+ accountType: item.accountType
+ })
+ }
+ ]
+ }
+ ];
+ }
+ exportList() {
+ this.service.exportStart({ ...this.sf.value, pageSize: -1 }, this.service.$api_get_exportAccountBalanceDetailPage);
+ }
+}
diff --git a/src/app/routes/financial-management/components/voucher-management/voucher-detail/voucher-detail.component.html b/src/app/routes/financial-management/components/voucher-management/voucher-detail/voucher-detail.component.html
new file mode 100644
index 00000000..bdf26c72
--- /dev/null
+++ b/src/app/routes/financial-management/components/voucher-management/voucher-detail/voucher-detail.component.html
@@ -0,0 +1,66 @@
+
+
+
+
+
+
+
+
+
+ 记账凭证
+
+
+
+ {{info?.vcltdcode}} - {{info?.vcltdname}}
+
+
+ {{info?.vctype}}
+
+
+ {{info?.vctime}}
+
+
+
+
+
+ 0">
+
+
合计:
+
{{info?.drmoney | currency}}
+
{{info?.crmoney | currency}}
+
+
+
+
+
+
+ {{ auxVO.auxLabel }}: {{ auxVO.auxValue }}
+
+
+
+
+
+
+ {{info?.remarks}}
+
+
+ {{info?.id}}
+
+
+
+
+
\ No newline at end of file
diff --git a/src/app/routes/financial-management/components/voucher-management/voucher-detail/voucher-detail.component.ts b/src/app/routes/financial-management/components/voucher-management/voucher-detail/voucher-detail.component.ts
new file mode 100644
index 00000000..1c4f072c
--- /dev/null
+++ b/src/app/routes/financial-management/components/voucher-management/voucher-detail/voucher-detail.component.ts
@@ -0,0 +1,57 @@
+import { CurrencyPipe } from '@angular/common';
+import { Component, OnInit } from '@angular/core';
+import { ActivatedRoute } from '@angular/router';
+import { STData, STColumn, STRequestOptions } from '@delon/abc/st';
+import { FreightAccountService } from '../../../services/freight-account.service';
+
+@Component({
+ selector: 'app-voucher-detail',
+ templateUrl: './voucher-detail.component.html'
+})
+export class VoucherDetailComponent implements OnInit {
+ columns: STColumn[] = [
+ { title: '摘要', index: 'remarks' },
+ { title: '会计科目', index: 'subname' },
+ { title: '辅助核算', render: 'auxVOList' },
+ { title: '币种', index: 'currency', className: 'text-center' },
+ {
+ title: '借方金额',
+ index: 'drlocalmoney',
+ width: 150,
+ type: 'widget',
+ className: 'text-right',
+ widget: { type: 'currency-chy', params: ({ record }) => ({ value: record.drlocalmoney }) }
+ },
+ {
+ title: '贷方金额',
+ index: 'crlocalmoney',
+ width: 150,
+ type: 'widget',
+ className: 'text-right',
+ widget: { type: 'currency-chy', params: ({ record }) => ({ value: record.crlocalmoney }) }
+ }
+ ];
+ id!: string;
+
+ info: any = { faShowVOList: [] };
+
+ constructor(public service: FreightAccountService, private route: ActivatedRoute) {
+ this.id = route.snapshot.params.id;
+ }
+
+ ngOnInit(): void {
+ this.loadDetail(this.id);
+ }
+
+ loadDetail(id: string) {
+ this.service.request(this.service.$api_get_fico_vch__detail, { id }).subscribe(res => {
+ if (res) {
+ this.info = res;
+ }
+ });
+ }
+
+ goBack() {
+ history.go(-1);
+ }
+}
diff --git a/src/app/routes/financial-management/components/voucher-management/voucher-management.component.html b/src/app/routes/financial-management/components/voucher-management/voucher-management.component.html
new file mode 100644
index 00000000..30ea85a7
--- /dev/null
+++ b/src/app/routes/financial-management/components/voucher-management/voucher-management.component.html
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/app/routes/financial-management/components/voucher-management/voucher-management.component.ts b/src/app/routes/financial-management/components/voucher-management/voucher-management.component.ts
new file mode 100644
index 00000000..014bde06
--- /dev/null
+++ b/src/app/routes/financial-management/components/voucher-management/voucher-management.component.ts
@@ -0,0 +1,362 @@
+/*
+ * @Description :
+ * @Version : 1.0
+ * @Author : Shiming
+ * @Date : 2022-01-18 15:57:44
+ * @LastEditors : Shiming
+ * @LastEditTime : 2022-04-09 16:36:42
+ * @FilePath : \\tms-obc-web\\src\\app\\routes\\financial-management\\components\\voucher-management\\voucher-management.component.ts
+ * Copyright (C) 2022 huzhenhong. All rights reserved.
+ */
+import { CurrencyPipe } from '@angular/common';
+import { Component, OnInit, ViewChild } from '@angular/core';
+import { Router } from '@angular/router';
+import { STComponent, STColumn, STRequestOptions, STChange } from '@delon/abc/st';
+import { SFComponent, SFSchema, SFDateWidgetSchema } from '@delon/form';
+import { NzModalService } from 'ng-zorro-antd/modal';
+import { FreightAccountService } from '../../services/freight-account.service';
+
+@Component({
+ selector: 'app-voucher-management',
+ templateUrl: './voucher-management.component.html',
+ styleUrls: ['../../../commom/less/box.less']
+})
+export class VoucherManagementComponent implements OnInit {
+ @ViewChild('st', { static: true })
+ st!: STComponent;
+ @ViewChild('sf', { static: false })
+ sf!: SFComponent;
+ @ViewChild('auditModal', { static: false })
+ auditModal!: any;
+ columns: STColumn[] = this.initST();
+ searchSchema: SFSchema = this.initSF();
+
+ _$expand = false;
+
+ selectedRows: any[] = [];
+ constructor(public service: FreightAccountService, private nzModalService: NzModalService, private router: Router) {}
+
+ ngOnInit(): void {}
+
+ beforeReq = (requestOptions: STRequestOptions) => {
+ if (this.sf) {
+ Object.assign(requestOptions.body, {
+ ...this.sf.value
+ });
+ if (this.sf.value.createTime) {
+ Object.assign(requestOptions.body, {
+ createTime: {
+ start: this.sf.value.createTime?.[0] || null,
+ end: this.sf.value.createTime?.[1] || null
+ }
+ });
+ }
+ if (this.sf.value.vctime) {
+ Object.assign(requestOptions.body, {
+ vctime: {
+ start: this.sf.value.vctime?.[0] || null,
+ end: this.sf.value.vctime?.[1] || null
+ }
+ });
+ }
+ }
+ return requestOptions;
+ };
+
+ stChange(e: STChange): void {
+ switch (e.type) {
+ case 'checkbox':
+ this.selectedRows = e.checkbox!;
+ break;
+ }
+ }
+
+ /**
+ * 重置表单
+ */
+ resetSF() {
+ this.sf.reset();
+ this._$expand = false;
+ }
+
+ /**
+ * 伸缩查询条件
+ */
+ expandToggle() {
+ this._$expand = !this._$expand;
+ this.sf?.setValue('/expand', this._$expand);
+ }
+
+ private initSF(): SFSchema {
+ return {
+ properties: {
+ expand: {
+ type: 'boolean',
+ ui: {
+ hidden: true
+ }
+ },
+ vccode: {
+ type: 'string',
+ title: '凭证号',
+ ui: {
+ autocomplete: 'off',
+ placeholder: '请输入'
+ }
+ },
+ cno: {
+ type: 'string',
+ title: '客户',
+ ui: {
+ widget: 'select',
+ placeholder: '请选择',
+ allowClear: true,
+ asyncData: () => this.service.getCloseAccount()
+ },
+ default: ''
+ },
+ vctime: {
+ title: '凭证时间',
+ type: 'string',
+ ui: {
+ widget: 'sl-from-to-search',
+ format: 'yyyy-MM-dd'
+ } as SFDateWidgetSchema
+ },
+ sourceCode: {
+ type: 'string',
+ title: '原始单号',
+ ui: {
+ autocomplete: 'off',
+ placeholder: '请输入',
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ }
+ },
+ sourceType: {
+ type: 'string',
+ title: '原始单类型',
+ enum: [
+ { value: '', label: '全部' },
+ { value: 1, label: '收款' },
+ { value: 2, label: '收款(退款)' },
+ { value: 3, label: '应收费用' },
+ { value: 4, label: '应收费用(负数)' },
+ { value: 5, label: '应收核销' },
+ { value: 6, label: '应收核销(负数)' },
+ { value: 7, label: '应付费用' },
+ { value: 8, label: '应付费用(负数)' },
+ { value: 9, label: '应付核销' },
+ { value: 10, label: '应付核销(负数)' },
+ { value: 11, label: '分票开票' },
+ { value: 12, label: '删除分票' },
+ { value: 13, label: '付款' }
+ ],
+ ui: {
+ widget: 'select',
+ placeholder: '请选择',
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ }
+ },
+ createTime: {
+ title: '创建时间',
+ type: 'string',
+ ui: {
+ widget: 'sl-from-to-search',
+ format: 'yyyy-MM-dd',
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ } as SFDateWidgetSchema
+ },
+ remarks: {
+ type: 'string',
+ title: '凭证摘要',
+ ui: {
+ placeholder: '请输入',
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ }
+ },
+ vctype: {
+ type: 'string',
+ title: '凭证类型',
+ ui: {
+ widget: 'dict-select',
+ params: { dictKey: 'credential:type' },
+ placeholder: '请选择',
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ },
+ default: ''
+ },
+ // subid: {
+ // type: 'string',
+ // title: '科目',
+ // ui: {
+ // widget: 'dict-select',
+ // params: { dictKey: 'refund:apply:status' },
+ // placeholder: '请选择',
+ // visibleIf: {
+ // expand: (value: boolean) => value
+ // }
+ // }
+ // },
+ drmoney: {
+ type: 'string',
+ title: '借方金额',
+ ui: {
+ placeholder: '请输入',
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ }
+ },
+ crmoney: {
+ type: 'string',
+ title: '贷方金额',
+ ui: {
+ placeholder: '请输入',
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ }
+ },
+ vcltdid: {
+ type: 'string',
+ title: '帐套',
+ ui: {
+ widget: 'dict-select',
+ params: { dictKey: 'refund:apply:status' },
+ placeholder: '请选择',
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ }
+ },
+ sts: {
+ type: 'string',
+ title: '凭证状态',
+ ui: {
+ widget: 'dict-select',
+ params: { dictKey: 'credential:status' },
+ placeholder: '请选择',
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ },
+ default: ''
+ },
+ importncnotes: {
+ type: 'string',
+ title: 'NC凭证',
+ ui: {
+ placeholder: '请输入',
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ }
+ },
+ vc2code: {
+ type: 'string',
+ title: '汇总凭证号',
+ ui: {
+ placeholder: '请输入',
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ }
+ },
+ importnc: {
+ type: 'string',
+ title: '导入NC',
+ ui: {
+ widget: 'dict-select',
+ params: { dictKey: 'refund:apply:status' },
+ placeholder: '请选择',
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ }
+ },
+ isvc2: {
+ type: 'string',
+ title: '是否汇总',
+ enum: [
+ { value: null, label: '全部' },
+ { value: 0, label: '否' },
+ { value: 1, label: '是' }
+ ],
+ ui: {
+ widget: 'select',
+ placeholder: '请选择',
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ }
+ }
+ }
+ };
+ }
+
+ private initST(): STColumn[] {
+ return [
+ { title: '', index: 'key', type: 'checkbox', width: 60, className: 'text-center', fixed: 'left' },
+ { title: '凭证号', index: 'vccode', type: 'link', width: 200 },
+ { title: '帐套', index: 'ltdId', width: 200, format: item => `${item.vcltdcode}-${item.vcltdname}` },
+ { title: '凭证时间', index: 'vctime', type: 'date', width: 200 },
+ { title: '凭证类型', index: 'vctype', width: 200 },
+ // { title: '序号', index: 'invmoney', width: 200, format: _ => '1' },
+ { title: '摘要', index: 'remarks', width: 300 },
+ { title: '币种', index: 'currency', width: 100 },
+ {
+ title: '借方金额',
+ index: 'drmoney',
+ width: 120,
+ type: 'widget',
+ className: 'text-right',
+ widget: { type: 'currency-chy', params: ({ record }) => ({ value: record.drmoney }) }
+ },
+ {
+ title: '贷方金额',
+ index: 'crmoney',
+ width: 120,
+ type: 'widget',
+ className: 'text-right',
+ widget: { type: 'currency-chy', params: ({ record }) => ({ value: record.crmoney }) }
+ },
+ { title: 'NC凭证', index: 'importncnotes', width: 150 },
+ { title: '汇总凭证号', index: 'vc2code', width: 150 },
+ { title: '凭证状态', index: 'stsLabel', width: 120 },
+ { title: '创建时间', index: 'createTime', width: 140 },
+ // { title: '创建人', index: 'createUserId', width: 150 },
+ {
+ title: '操作',
+ width: '130px',
+ fixed: 'right',
+ className: 'text-center',
+ buttons: [
+ {
+ text: '浏览',
+ click: (item: any) => this.router.navigate(['/financial-management/voucher-management/detail/' + item.id]),
+ acl: { ability: ['FINANCIAL-VOUCHER-view'] }
+ }
+ // {
+ // text: '修改'
+ // },
+ // {
+ // text: '删除'
+ // },
+ // {
+ // text: '提交'
+ // }
+ ]
+ }
+ ];
+ }
+}
diff --git a/src/app/routes/financial-management/components/voucher-summary/summary-detail/summary-detail.component.html b/src/app/routes/financial-management/components/voucher-summary/summary-detail/summary-detail.component.html
new file mode 100644
index 00000000..49cf138c
--- /dev/null
+++ b/src/app/routes/financial-management/components/voucher-summary/summary-detail/summary-detail.component.html
@@ -0,0 +1,53 @@
+
+
+
+
+
+
+
+
+ 记账凭证
+
+
+
+ {{info?.vcltdcode}}
+
+
+ {{info?.vctype}}
+
+
+ {{info?.vctime}}
+
+
+
+
+
+ 0">
+
+
合计:
+
{{info?.drmoney | currency}}
+
{{info?.crmoney | currency}}
+
+
+
+
+
+
+ {{ auxVO.auxLabel }}: {{ auxVO.auxValue }}
+
+
+
+
+
+
+ {{info?.remarks}}
+
+
+ {{info?.createUserId}}
+
+
+
+
\ No newline at end of file
diff --git a/src/app/routes/financial-management/components/voucher-summary/summary-detail/summary-detail.component.ts b/src/app/routes/financial-management/components/voucher-summary/summary-detail/summary-detail.component.ts
new file mode 100644
index 00000000..0f931738
--- /dev/null
+++ b/src/app/routes/financial-management/components/voucher-summary/summary-detail/summary-detail.component.ts
@@ -0,0 +1,60 @@
+import { CurrencyPipe } from '@angular/common';
+import { Component, OnInit } from '@angular/core';
+import { ActivatedRoute } from '@angular/router';
+import { STData, STColumn, STRequestOptions } from '@delon/abc/st';
+import { FreightAccountService } from '../../../services/freight-account.service';
+
+@Component({
+ selector: 'app-summary-detail',
+ templateUrl: './summary-detail.component.html'
+})
+export class SummaryDetailComponent implements OnInit {
+ columns: STColumn[] = [
+ { title: '摘要', index: 'remarks' },
+ { title: '会计科目', index: 'subname' },
+ { title: '辅助核算', render: 'auxVOList' },
+ { title: '币种', index: 'currency', className: 'text-center' },
+ {
+ title: '借方金额',
+ index: 'drlocalmoney',
+ width: 150,
+ type: 'widget',
+ className: 'text-right',
+ widget: { type: 'currency-chy', params: ({ record }) => ({ value: record.drlocalmoney }) }
+ },
+ {
+ title: '贷方金额',
+ index: 'crlocalmoney',
+ width: 150,
+ type: 'widget',
+ className: 'text-right',
+ widget: { type: 'currency-chy', params: ({ record }) => ({ value: record.crlocalmoney }) }
+ }
+ ];
+ id!: string;
+
+ info: any = { faShowVOList: [] };
+ constructor(public service: FreightAccountService, private route: ActivatedRoute) {
+ this.id = route.snapshot.params.id;
+ }
+
+ ngOnInit(): void {
+ this.loadDetail(this.id);
+ }
+
+ loadDetail(id: string) {
+ this.service.request(this.service.$api_get_fico_vch__detail, { id }).subscribe(res => {
+ if (res) {
+ this.info = res;
+ }
+ });
+ }
+
+ beforeReq = (requestOptions: STRequestOptions) => {
+ return requestOptions;
+ };
+
+ goBack() {
+ history.go(-1);
+ }
+}
diff --git a/src/app/routes/financial-management/components/voucher-summary/voucher-list/voucher-list.component.html b/src/app/routes/financial-management/components/voucher-summary/voucher-list/voucher-list.component.html
new file mode 100644
index 00000000..09835d0d
--- /dev/null
+++ b/src/app/routes/financial-management/components/voucher-summary/voucher-list/voucher-list.component.html
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/app/routes/financial-management/components/voucher-summary/voucher-list/voucher-list.component.ts b/src/app/routes/financial-management/components/voucher-summary/voucher-list/voucher-list.component.ts
new file mode 100644
index 00000000..d65f5669
--- /dev/null
+++ b/src/app/routes/financial-management/components/voucher-summary/voucher-list/voucher-list.component.ts
@@ -0,0 +1,226 @@
+import { Component, OnInit, ViewChild } from '@angular/core';
+import { ActivatedRoute, Router } from '@angular/router';
+import { STComponent, STColumn, STRequestOptions, STChange } from '@delon/abc/st';
+import { SFComponent, SFSchema, SFDateWidgetSchema } from '@delon/form';
+import { NzModalService } from 'ng-zorro-antd/modal';
+import { FreightAccountService } from '../../../services/freight-account.service';
+
+@Component({
+ selector: 'app-voucher-list',
+ templateUrl: './voucher-list.component.html',
+ styleUrls: ['../../../../commom/less/box.less']
+})
+export class VoucherListComponent implements OnInit {
+ @ViewChild('st', { static: true })
+ st!: STComponent;
+ @ViewChild('sf', { static: false })
+ sf!: SFComponent;
+ @ViewChild('auditModal', { static: false })
+ auditModal!: any;
+ columns: STColumn[] = this.initST();
+ searchSchema: SFSchema = this.initSF();
+
+ _$expand = false;
+
+ selectedRows: any[] = [];
+ vc2code = null;
+ constructor(public service: FreightAccountService, private route: ActivatedRoute, private router: Router) {
+ this.vc2code = route.snapshot.params.id;
+ }
+
+ ngOnInit(): void {}
+
+ beforeReq = (requestOptions: STRequestOptions) => {
+ Object.assign(requestOptions.body, { vc2code: this.vc2code });
+ if (this.sf) {
+ Object.assign(requestOptions.body, {
+ ...this.sf.value
+ });
+ if (this.sf.value.createTime) {
+ Object.assign(requestOptions.body, {
+ createTime: {
+ start: this.sf.value.createTime?.[0] || null,
+ end: this.sf.value.createTime?.[1] || null
+ }
+ });
+ }
+ if (this.sf.value.vctime) {
+ Object.assign(requestOptions.body, {
+ vctime: {
+ start: this.sf.value.vctime?.[0] || null,
+ end: this.sf.value.vctime?.[1] || null
+ }
+ });
+ }
+ }
+ return requestOptions;
+ };
+
+ stChange(e: STChange): void {
+ switch (e.type) {
+ case 'checkbox':
+ this.selectedRows = e.checkbox!;
+ break;
+ }
+ }
+
+ /**
+ * 重置表单
+ */
+ resetSF() {
+ this.sf.reset();
+ this._$expand = false;
+ }
+
+ /**
+ * 伸缩查询条件
+ */
+ expandToggle() {
+ this._$expand = !this._$expand;
+ this.sf?.setValue('/expand', this._$expand);
+ }
+
+ private initSF(): SFSchema {
+ return {
+ properties: {
+ expand: {
+ type: 'boolean',
+ ui: {
+ hidden: true
+ }
+ },
+ vccode: {
+ type: 'string',
+ title: '凭证号',
+ ui: {
+ autocomplete: 'off',
+ placeholder: '请输入'
+ }
+ },
+ vctime: {
+ title: '凭证时间',
+ type: 'string',
+ ui: {
+ widget: 'sl-from-to-search',
+ format: 'yyyy-MM-dd'
+ } as SFDateWidgetSchema
+ },
+ createTime: {
+ title: '创建时间',
+ type: 'string',
+ ui: {
+ widget: 'sl-from-to-search',
+ format: 'yyyy-MM-dd'
+ } as SFDateWidgetSchema
+ },
+ sourceCode: {
+ type: 'string',
+ title: '原始单号',
+ ui: {
+ autocomplete: 'off',
+ placeholder: '请输入',
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ }
+ },
+ sourceType: {
+ type: 'string',
+ title: '原始单类型',
+ ui: {
+ widget: 'select',
+ placeholder: '请选择',
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ }
+ },
+ drmoney: {
+ type: 'string',
+ title: '借方金额',
+ ui: {
+ placeholder: '请输入',
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ }
+ },
+ inpinvcosde: {
+ type: 'string',
+ title: '凭证摘要',
+ ui: {
+ placeholder: '请输入',
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ }
+ },
+ subid: {
+ type: 'string',
+ title: '科目',
+ ui: {
+ widget: 'dict-select',
+ params: { dictKey: 'refund:apply:status' },
+ placeholder: '请选择',
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ }
+ },
+ crmoney: {
+ type: 'string',
+ title: '贷方金额',
+ ui: {
+ placeholder: '请输入',
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ }
+ }
+ }
+ };
+ }
+
+ private initST(): STColumn[] {
+ return [
+ { title: '凭证号', index: 'id', type: 'link', width: 150 },
+ { title: '帐套', index: 'vcltdid', width: 150 },
+ { title: '凭证时间', index: 'vctime', type: 'date', width: 150 },
+ { title: '凭证类型', index: 'vctype', width: 150 },
+ { title: '序号', index: 'invmoney', width: 150, format: _ => '1' },
+ { title: '摘要', index: 'remarks', width: 300 },
+ { title: '币种', index: 'currency', width: 100 },
+ {
+ title: '借方金额',
+ index: 'drmoney',
+ width: 120,
+ type: 'widget',
+ className: 'text-right',
+ widget: { type: 'currency-chy', params: ({ record }) => ({ value: record.drmoney }) }
+ },
+ {
+ title: '贷方金额',
+ index: 'crmoney',
+ width: 120,
+ type: 'widget',
+ className: 'text-right',
+ widget: { type: 'currency-chy', params: ({ record }) => ({ value: record.crmoney }) }
+ },
+ { title: '凭证状态', index: 'stsLabel', width: 120 },
+ { title: '创建时间', index: 'createTime', width: 140 },
+ { title: '创建人', index: 'createUserId', width: 150 },
+ {
+ title: '操作',
+ width: '130px',
+ fixed: 'right',
+ className: 'text-center',
+ buttons: [
+ {
+ text: '浏览',
+ click: (item: any) => this.router.navigate(['/financial-management/voucher-summary/list/detail/' + item.id])
+ }
+ ]
+ }
+ ];
+ }
+}
diff --git a/src/app/routes/financial-management/components/voucher-summary/voucher-summary.component.html b/src/app/routes/financial-management/components/voucher-summary/voucher-summary.component.html
new file mode 100644
index 00000000..5f5f53c7
--- /dev/null
+++ b/src/app/routes/financial-management/components/voucher-summary/voucher-summary.component.html
@@ -0,0 +1,40 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/app/routes/financial-management/components/voucher-summary/voucher-summary.component.ts b/src/app/routes/financial-management/components/voucher-summary/voucher-summary.component.ts
new file mode 100644
index 00000000..ca64fd91
--- /dev/null
+++ b/src/app/routes/financial-management/components/voucher-summary/voucher-summary.component.ts
@@ -0,0 +1,349 @@
+import { CurrencyPipe } from '@angular/common';
+import { Component, OnInit, ViewChild } from '@angular/core';
+import { Router } from '@angular/router';
+import { STComponent, STColumn, STRequestOptions, STChange } from '@delon/abc/st';
+import { SFComponent, SFSchema, SFDateWidgetSchema } from '@delon/form';
+import { DateHelperByDatePipe } from 'ng-zorro-antd/i18n';
+import { NzModalService } from 'ng-zorro-antd/modal';
+import { AddCollectionInvoiceModalComponent } from 'src/app/routes/ticket-management/components/input-invoice/add-collection-invoice-modal/add-collection-invoice-modal.component';
+import { FreightAccountService } from '../../services/freight-account.service';
+
+@Component({
+ selector: 'app-voucher-summary',
+ templateUrl: './voucher-summary.component.html',
+ styleUrls: ['../../../commom/less/box.less', '../../../commom/less/expend-but.less']
+})
+export class VoucherSummaryComponent implements OnInit {
+ @ViewChild('st', { static: true })
+ st!: STComponent;
+ @ViewChild('sf', { static: false })
+ sf!: SFComponent;
+ columns: STColumn[] = this.initST();
+ searchSchema: SFSchema = this.initSF();
+
+ _$expand = false;
+
+ selectedRows: any[] = [];
+ constructor(
+ public service: FreightAccountService,
+ private nzModalService: NzModalService,
+ private router: Router,
+ private dateHelperByDatePipe: DateHelperByDatePipe
+ ) {}
+
+ ngOnInit(): void {}
+
+ beforeReq = (requestOptions: STRequestOptions) => {
+ Object.assign(requestOptions.body, { isvc2: 1 });
+ if (this.sf) {
+ Object.assign(requestOptions.body, {
+ ...this.sf.value,
+ createtime: {
+ start: this.sf.value.createtime?.[0] || '',
+ end: this.sf.value.createtime?.[1] || ''
+ },
+ vctime: {
+ start: this.sf.value.vctime?.[0] || '',
+ end: this.sf.value.vctime?.[1] || ''
+ }
+ });
+ }
+ return requestOptions;
+ };
+
+ stChange(e: STChange): void {
+ switch (e.type) {
+ case 'checkbox':
+ this.selectedRows = e.checkbox!;
+ break;
+ }
+ }
+
+ addInvoice() {
+ if (this.selectedRows?.length <= 0) {
+ this.service.msgSrv.warning('请选择申请记录');
+ return;
+ }
+ const modal = this.nzModalService.create({
+ nzTitle: '收票信息',
+ nzContent: AddCollectionInvoiceModalComponent,
+ nzComponentParams: { i: { userId: 0 } },
+ nzFooter: null
+ });
+ }
+
+ /**
+ * 重置表单
+ */
+ resetSF() {
+ this.sf.reset();
+ this._$expand = false;
+ }
+
+ /**
+ * 伸缩查询条件
+ */
+ expandToggle() {
+ this._$expand = !this._$expand;
+ this.sf?.setValue('/expand', this._$expand);
+ }
+
+ exportList() {
+ this.service.exportStart({ ...this.sf.value, pageSize: -1 }, this.service.$api_export_fico_vch_page);
+ }
+
+ private initSF(): SFSchema {
+ return {
+ properties: {
+ expand: {
+ type: 'boolean',
+ ui: {
+ hidden: true
+ }
+ },
+ vc2code: {
+ type: 'string',
+ title: '汇总凭证号',
+ ui: {
+ autocomplete: 'off',
+ placeholder: '请输入'
+ }
+ },
+ cno: {
+ type: 'string',
+ title: '客户',
+ ui: {
+ widget: 'select',
+ placeholder: '请选择',
+ allowClear: true,
+ asyncData: () => this.service.getNetworkFreightForwarder()
+ },
+ default: ''
+ },
+ vctime: {
+ title: '凭证时间',
+ type: 'string',
+ ui: {
+ widget: 'sl-from-to-search',
+ format: 'yyyy-MM-dd'
+ } as SFDateWidgetSchema
+ },
+ sourceCode: {
+ type: 'string',
+ title: '原始单号',
+ ui: {
+ autocomplete: 'off',
+ placeholder: '请输入',
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ }
+ },
+ sourceType: {
+ type: 'string',
+ title: '原始单类型',
+ ui: {
+ widget: 'select',
+ placeholder: '请选择',
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ }
+ },
+ createTime: {
+ title: '创建时间',
+ type: 'string',
+ ui: {
+ widget: 'sl-from-to-search',
+ format: 'yyyy-MM-dd',
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ } as SFDateWidgetSchema
+ },
+ remarks: {
+ type: 'string',
+ title: '凭证摘要',
+ ui: {
+ placeholder: '请输入',
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ }
+ },
+ vctype: {
+ type: 'string',
+ title: '凭证类型',
+ ui: {
+ widget: 'dict-select',
+ params: { dictKey: 'credential:type' },
+ placeholder: '请选择',
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ },
+ default: ''
+ },
+ s2ts: {
+ type: 'string',
+ title: '科目',
+ ui: {
+ widget: 'dict-select',
+ params: { dictKey: 'refund:apply:status' },
+ placeholder: '请选择',
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ }
+ },
+ drmoney: {
+ type: 'string',
+ title: '借方金额',
+ ui: {
+ placeholder: '请输入',
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ }
+ },
+ crmoney: {
+ type: 'string',
+ title: '贷方金额',
+ ui: {
+ placeholder: '请输入',
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ }
+ },
+ vcltdid: {
+ type: 'string',
+ title: '帐套',
+ ui: {
+ widget: 'dict-select',
+ params: { dictKey: 'refund:apply:status' },
+ placeholder: '请选择',
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ }
+ },
+ sts: {
+ type: 'string',
+ title: '凭证状态',
+ ui: {
+ widget: 'dict-select',
+ params: { dictKey: 'credential:status' },
+ placeholder: '请选择',
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ }
+ },
+ feecode: {
+ type: 'string',
+ title: 'NC凭证',
+ ui: {
+ placeholder: '请输入',
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ }
+ },
+ vccode: {
+ type: 'string',
+ title: '凭证号',
+ ui: {
+ placeholder: '请输入',
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ }
+ },
+ s22t2ss: {
+ type: 'string',
+ title: '导入NC',
+ ui: {
+ widget: 'dict-select',
+ params: { dictKey: 'refund:apply:status' },
+ placeholder: '请选择',
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ }
+ },
+ createt1im2e: {
+ title: '统计时间',
+ type: 'string',
+ ui: {
+ widget: 'sl-from-to-search',
+ format: 'yyyy-MM-dd',
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ } as SFDateWidgetSchema
+ }
+ }
+ };
+ }
+
+ private initST(): STColumn[] {
+ return [
+ { title: '', index: 'key', type: 'checkbox', width: 60, className: 'text-center', fixed: 'left' },
+ { title: '汇总凭证号', index: 'vc2code', type: 'link', width: 200 },
+ { title: '帐套', index: 'vcltdcode', width: 180 },
+ { title: '凭证时间', index: 'createTime', type: 'date', width: 150 },
+ {
+ title: '统计区间',
+ index: 'invdate',
+ type: 'date',
+ width: 200,
+ format: item =>
+ `${this.dateHelperByDatePipe.format(item.vctime2start, 'yyyy-MM-dd')} | ${this.dateHelperByDatePipe.format(
+ item.vctime2end,
+ 'yyyy-MM-dd'
+ )}`
+ },
+ { title: '凭证类型', index: 'vctype', width: 120 },
+ { title: '序号', index: 'invmoney', width: 100, format: _ => '1' },
+ { title: '摘要', index: 'remarks', width: 220 },
+ { title: '币种', index: 'currency', width: 100 },
+ {
+ title: '借方金额',
+ index: 'drmoney',
+ width: 140,
+ type: 'widget',
+ className: 'text-right',
+ widget: { type: 'currency-chy', params: ({ record }) => ({ value: record.drmoney }) }
+ },
+ {
+ title: '贷方金额',
+ index: 'crmoney',
+ width: 140,
+ type: 'widget',
+ className: 'text-right',
+ widget: { type: 'currency-chy', params: ({ record }) => ({ value: record.crmoney }) }
+ },
+ { title: 'NC凭证', index: 'importncnotes', width: 180 },
+ { title: '凭证状态', index: 'stsLabel', width: 120 },
+ { title: '创建时间', index: 'createTime', width: 180 },
+ { title: '创建人', index: 'createUserName', width: 120 },
+ {
+ title: '操作',
+ width: '130px',
+ fixed: 'right',
+ className: 'text-center',
+ buttons: [
+ {
+ text: '浏览',
+ click: (item: any) => this.router.navigate(['/financial-management/voucher-summary/detail/' + item.id])
+ },
+ {
+ text: '列表',
+ click: (item: any) => this.router.navigate(['/financial-management/voucher-summary/list/' + item.vc2code])
+ }
+ ]
+ }
+ ];
+ }
+}
diff --git a/src/app/routes/financial-management/components/withdrawals-record/withdrawals-detail/withdrawals-detail.component.html b/src/app/routes/financial-management/components/withdrawals-record/withdrawals-detail/withdrawals-detail.component.html
new file mode 100644
index 00000000..aa167bec
--- /dev/null
+++ b/src/app/routes/financial-management/components/withdrawals-record/withdrawals-detail/withdrawals-detail.component.html
@@ -0,0 +1,109 @@
+
+
+
+
+
+
+
+
+
+
+
+ {{formData?.ltdName}}
+
+
+ {{formData?.bankType==='1'?'平安银行':'浦发银行'}}
+
+
+ {{formData?.refundApplyCode}}
+
+
+ {{formData?.bankAccountName}}
+
+
+ {{formData?.createTime}}
+
+
+ {{formData?.virtualAccount}}
+
+
+ {{formData?.refundStatusLabel}}
+
+
+ {{formData?.amount | currency}}
+
+
+ {{formData?.bankSerialNumber}}
+
+
+ {{formData?.bankCardNumber}}
+
+
+ {{formData?.refundStatus==='3'?'下载回单':'暂无回单'}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{detail.costName}}:{{detail.price |currency}}
+
+
+
+ {{item.billCode}}
+ {{item.billStatusLabel}}
+
+
+ {{item.wayBillCode}}
+ {{item.wayBillStatusLabel}}
+
+
+ {{item.driverName}}
+ {{item.driverTelephone}}
+ {{item.driverLicencePlate}}
+
+
+ {{item.captainName}}
+ {{item.captainTelephone}}
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/app/routes/financial-management/components/withdrawals-record/withdrawals-detail/withdrawals-detail.component.less b/src/app/routes/financial-management/components/withdrawals-record/withdrawals-detail/withdrawals-detail.component.less
new file mode 100644
index 00000000..627355a5
--- /dev/null
+++ b/src/app/routes/financial-management/components/withdrawals-record/withdrawals-detail/withdrawals-detail.component.less
@@ -0,0 +1,23 @@
+:host::ng-deep {
+
+ .ant-alert-info {
+ background-color: #f3f3f3;
+ border : 1px solid #dbdbdb;
+
+ .ant-alert-message {
+ color : rgba(0, 0, 0, 0.85);
+ font-weight: 600;
+ font-size : 16px;
+ }
+ }
+
+ .ant-form-item {
+ margin-bottom: 15px;
+ }
+
+ nz-tabs-nav {
+ background-color: #f3f3f3;
+ border : 1px solid #dbdbdb;
+ padding-left : 18px;
+ }
+}
\ No newline at end of file
diff --git a/src/app/routes/financial-management/components/withdrawals-record/withdrawals-detail/withdrawals-detail.component.ts b/src/app/routes/financial-management/components/withdrawals-record/withdrawals-detail/withdrawals-detail.component.ts
new file mode 100644
index 00000000..c91b3e29
--- /dev/null
+++ b/src/app/routes/financial-management/components/withdrawals-record/withdrawals-detail/withdrawals-detail.component.ts
@@ -0,0 +1,249 @@
+import { Component, OnInit, ViewChild } from '@angular/core';
+import { ActivatedRoute } from '@angular/router';
+import { STColumn, STRequestOptions } from '@delon/abc/st';
+import { SFComponent, SFSchema } from '@delon/form';
+import { FreightAccountService } from '../../../services/freight-account.service';
+
+@Component({
+ selector: 'app-withdrawals-detail',
+ templateUrl: './withdrawals-detail.component.html',
+ styleUrls: ['./withdrawals-detail.component.less']
+})
+export class WithdrawalsDetailComponent implements OnInit {
+ @ViewChild('st', { static: true })
+ st!: Component;
+ @ViewChild('sf', { static: false })
+ inputSF!: SFComponent;
+ columns: STColumn[] = this.initST();
+ inputSearchSchema: SFSchema = this.initInputSF();
+ _$expand = false;
+
+ formData: any = {};
+
+ timeLineData: any = [];
+
+ accountType = '1';
+
+ constructor(public service: FreightAccountService, private route: ActivatedRoute) {
+ const id = route.snapshot.params.id;
+ this.accountType = route.snapshot.queryParams.type;
+ this.loadRefundDetail(id);
+ }
+
+ ngOnInit(): void {}
+
+ beforeReq = (requestOptions: STRequestOptions) => {
+ if (this.inputSF?.value) {
+ Object.assign(requestOptions.body, {
+ ...this.inputSF.value
+ });
+ }
+ Object.assign(requestOptions.body, { refundApplicationId: this.route.snapshot.params.id });
+ return requestOptions;
+ };
+
+ loadRefundDetail(id: string) {
+ this.service.request(this.service.$api_get_refund_detail, { id }).subscribe(res => {
+ if (res) {
+ this.formData = res;
+ // 处理流程节点数据
+ // 流程是否结束
+ let isEnd = false;
+ if (res.successTime) {
+ isEnd = true;
+ if (res.refundStatus === '3') {
+ this.timeLineData.push({ time: res.successTime, value: `到账成功`, color: 'green' });
+ } else {
+ this.timeLineData.push({ time: res.successTime, value: `提现失败`, color: 'red' });
+ }
+ }
+ if (res.agreeTime && res.refundStatus !== '4') {
+ this.timeLineData.push({ time: res.agreeTime, value: `银行处理中`, color: 'gray' });
+ }
+ if (res.agreeTime) {
+ if (res.refundStatus === '4') {
+ isEnd = true;
+ this.timeLineData.push({
+ time: res.agreeTime,
+ value: `拒绝提现
操作人员:${res.handlerUserIdLabel}`,
+ color: 'red'
+ });
+ } else {
+ this.timeLineData.push({
+ time: res.agreeTime,
+ value: `审核通过
操作人员:${res.handlerUserIdLabel}`,
+ color: 'gray'
+ });
+ }
+ }
+ if (res.createTime) {
+ this.timeLineData.push({
+ time: res.createTime,
+ value: `提交提现申请
提现${res.amount}元至${res.bankName}(${res.bankCardNumber})
操作人员:${res.userIdLabel}`,
+ color: 'gray'
+ });
+ }
+ if (this.timeLineData?.length > 0 && !isEnd) {
+ this.timeLineData[0].color = 'green';
+ }
+ }
+ });
+ }
+
+ downBack() {
+ if (this.formData?.refundStatus !== '3') {
+ return;
+ }
+ this.service.getReceiptUrl(this.formData.receiptUrl, {
+ bankType: this.formData.bankType,
+ rmYll: this.formData.userId,
+ snglFlgCd: this.formData.coreSerNo,
+ bussType: '06',
+ ltdId: this.formData.ltdId,
+ accountType: this.formData.accountType
+ });
+ }
+
+ /**
+ * 重置表单
+ */
+ resetInputSF() {
+ this.inputSF.reset();
+ }
+
+ /**
+ * 伸缩查询条件
+ */
+ expandToggle() {
+ this._$expand = !this._$expand;
+ this.inputSF?.setValue('/expand', this._$expand);
+ }
+
+ goBack() {
+ history.go(-1);
+ }
+
+ // 导出
+ exprot() {
+ this.service.exportStart(
+ { ...this.inputSF.value, pageSize: -1, refundApplicationId: this.route.snapshot.params.id },
+ this.service.$api_export_refund_detail_page
+ );
+ }
+
+ private initInputSF(): SFSchema {
+ return {
+ properties: {
+ expand: {
+ type: 'boolean',
+ ui: {
+ hidden: true
+ }
+ },
+ billHCode: {
+ type: 'string',
+ title: '支付编号',
+ ui: {
+ placeholder: '请输入'
+ }
+ },
+ billHCod1e: {
+ type: 'string',
+ title: '订单号',
+ ui: {
+ placeholder: '请输入'
+ }
+ },
+ billHCo1de: {
+ type: 'string',
+ title: '货源编号',
+ ui: {
+ placeholder: '请输入'
+ }
+ },
+ billHC1ode: {
+ type: 'string',
+ title: '服务类型',
+ ui: {
+ widget: 'select',
+ placeholder: '请选择',
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ }
+ },
+ billHCo11de: {
+ type: 'string',
+ title: '承运司机',
+ ui: {
+ placeholder: '请输入司机姓名/手机号',
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ }
+ },
+ billHCo111de: {
+ type: 'string',
+ title: '车牌号',
+ ui: {
+ placeholder: '请输入',
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ }
+ },
+ billHC1o11de: {
+ type: 'string',
+ title: '收款人',
+ ui: {
+ placeholder: '请输入收款人姓名/手机号',
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ }
+ },
+ billHC1o111de: {
+ type: 'string',
+ title: '车队长收款',
+ ui: {
+ widget: 'select',
+ placeholder: '请选择',
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ }
+ }
+ }
+ };
+ }
+
+ private initST(): STColumn[] {
+ return [
+ { title: '支付编号', index: 'orderPaymentCode', className: 'text-left', width: 200 },
+ {
+ title: '支付金额',
+ index: 'payAmount',
+ type: 'widget',
+ className: 'text-right',
+ widget: { type: 'currency-chy', params: ({ record }) => ({ value: record.payAmount }) },
+ width: 140
+ },
+ { title: '运费明细', render: 'amountDetails', className: 'text-right', width: 150 },
+ { title: '货主', index: 'ltdName', className: 'text-left', width: 200 },
+ { title: '订单号', render: 'billId', width: 200 },
+ { title: '运单号', render: 'wayBillId', width: 200 },
+ { title: '货源编号', index: 'resourceCode', width: 200 },
+ {
+ title: '服务类型',
+ index: 'serviceType',
+ className: 'text-center',
+ width: 150,
+ type: 'enum',
+ enum: { '1': '抢单', '2': '指派', '3': '二维码', '4': '手工单' }
+ },
+ { title: '承运司机', render: 'driverId', width: 150 },
+ { title: '收款人', render: 'captainName', className: 'text-left', width: 150 },
+ { title: '银行类型', index: 'bankTypeLabel', className: 'text-center', width: 150 }
+ ];
+ }
+}
diff --git a/src/app/routes/financial-management/components/withdrawals-record/withdrawals-record.component.html b/src/app/routes/financial-management/components/withdrawals-record/withdrawals-record.component.html
new file mode 100644
index 00000000..a4db6171
--- /dev/null
+++ b/src/app/routes/financial-management/components/withdrawals-record/withdrawals-record.component.html
@@ -0,0 +1,84 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.bankName }}
{{ item.bankCardNumber }}
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/app/routes/financial-management/components/withdrawals-record/withdrawals-record.component.ts b/src/app/routes/financial-management/components/withdrawals-record/withdrawals-record.component.ts
new file mode 100644
index 00000000..75a921ef
--- /dev/null
+++ b/src/app/routes/financial-management/components/withdrawals-record/withdrawals-record.component.ts
@@ -0,0 +1,309 @@
+import { Component, ViewChild } from '@angular/core';
+import { Router } from '@angular/router';
+import { STComponent, STColumn, STChange, STRequestOptions } from '@delon/abc/st';
+import { SFComponent, SFSchema, SFDateWidgetSchema } from '@delon/form';
+import { NzModalService } from 'ng-zorro-antd/modal';
+
+import { FreightAccountService } from '../../services/freight-account.service';
+
+@Component({
+ selector: 'app-withdrawals-record',
+ templateUrl: './withdrawals-record.component.html',
+ styleUrls: ['../../../commom/less/box.less', '../../../commom/less/expend-but.less']
+})
+export class WithdrawalsRecordComponent {
+ @ViewChild('st', { static: true })
+ st!: STComponent;
+ @ViewChild('sf', { static: false })
+ sf!: SFComponent;
+ @ViewChild('auditModal', { static: false })
+ auditModal!: any;
+ columns: STColumn[] = this.initST();
+ searchSchema: SFSchema = this.initSF();
+
+ _$expand = false;
+
+ selectedRows: any[] = [];
+ totalCallNo = 0;
+ refundStatus: any = '';
+
+ msg = '';
+ constructor(public service: FreightAccountService, private nzModalService: NzModalService, private router: Router) {}
+
+ ngOnInit(): void {}
+
+ beforeReq = (requestOptions: STRequestOptions) => {
+ if (this.sf) {
+ Object.assign(requestOptions.body, {
+ ...this.sf.value,
+ createTime: {
+ start: this.sf.value.createTime?.[0] || '',
+ end: this.sf.value.createTime?.[1] || ''
+ },
+ refundStatus: this.refundStatus || null
+ });
+ }
+ delete requestOptions?.body?.expand;
+ return requestOptions;
+ };
+
+ afterRes = (data: any[], rawData?: any) => {
+ data = data.map(node => ({ ...node, disabled: node.refundStatus !== '1' }));
+ return data;
+ };
+
+ stChange(e: STChange): void {
+ switch (e.type) {
+ case 'checkbox':
+ this.selectedRows = e.checkbox!;
+ this.totalCallNo = this.selectedRows.reduce((total, cv) => total + cv.amount, 0).toFixed(2);
+ break;
+ }
+ }
+
+ changeRefundStatus(status?: string) {
+ this.refundStatus = status || null;
+ this.st.load(1);
+ }
+
+ auditAction(item?: any) {
+ this.msg = '';
+ let params: string[] = [];
+ if (item) {
+ params = [item.id];
+ } else {
+ params = this.selectedRows.map(node => node.id);
+ }
+ const modal = this.nzModalService.create({
+ nzTitle: '审核',
+ nzContent: this.auditModal,
+ nzFooter: [
+ {
+ label: '拒绝',
+ disabled: () => this.service.http.loading,
+ type: 'default',
+ onClick: () => {
+ if (!this.msg || this.msg.trim().length === 0) {
+ this.service.msgSrv.warning('请填写拒绝原因 ');
+ return false;
+ }
+ this.service
+ .request(this.service.$api_disagree_refund, {
+ refundApplicationId: params,
+ msg: this.msg
+ })
+ .subscribe(res => {
+ if (res) {
+ this.service.msgSrv.success('审核拒绝成功');
+ modal.destroy();
+ this.st.load(1);
+ }
+ });
+ return false;
+ }
+ },
+ {
+ label: '通过',
+ disabled: () => this.service.http.loading,
+ type: 'primary',
+ onClick: () => {
+ this.service
+ .request(this.service.$api_agree_refund, {
+ refundApplicationId: params,
+ msg: this.msg
+ })
+ .subscribe(res => {
+ if (res) {
+ this.service.msgSrv.success('审核通过成功');
+ modal.destroy();
+ this.st.load(1);
+ }
+ });
+ return false;
+ }
+ }
+ ]
+ });
+ modal.afterClose.subscribe(res => {
+ this.st.load();
+ });
+ }
+
+ showReason(item: any) {
+ const modal = this.nzModalService.create({
+ nzTitle: '查看原因',
+ nzContent: '运单数据异常,暂时无法开票,请联系客服400-xxxx-xxxx',
+ nzFooter: [
+ {
+ label: '关闭',
+ type: 'primary',
+ onClick: () => {
+ modal.destroy();
+ }
+ }
+ ]
+ });
+ }
+
+ /**
+ * 重置表单
+ */
+ resetSF() {
+ this.sf.reset();
+ this._$expand = false;
+ }
+
+ /**
+ * 伸缩查询条件
+ */
+ expandToggle() {
+ this._$expand = !this._$expand;
+ this.sf?.setValue('/expand', this._$expand);
+ }
+
+ private initSF(): SFSchema {
+ return {
+ properties: {
+ expand: {
+ type: 'boolean',
+ ui: {
+ hidden: true
+ }
+ },
+ refundApplyCode: {
+ type: 'string',
+ title: '提现单号',
+ ui: {
+ placeholder: '请输入'
+ }
+ },
+ // refundStatus: {
+ // type: 'string',
+ // title: '提现状态',
+ // ui: {
+ // widget: 'dict-select',
+ // params: { dictKey: 'refund:apply:status' },
+ // placeholder: '请选择'
+ // }
+ // },
+ createTime: {
+ title: '提现时间',
+ type: 'string',
+ ui: {
+ widget: 'sl-from-to-search',
+ format: 'yyyy-MM-dd',
+ placeholder: '请选择',
+ nzShowTime: true
+ } as SFDateWidgetSchema
+ },
+ bankAccountName: {
+ type: 'string',
+ title: '账户名称',
+ ui: {
+ placeholder: '请输入'
+ }
+ },
+ accountType: {
+ type: 'string',
+ title: '账户类型',
+ ui: {
+ widget: 'dict-select',
+ params: { dictKey: 'bank:type' },
+ placeholder: '请选择',
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ }
+ },
+ ltdId: {
+ type: 'string',
+ title: '网络货运人',
+ ui: {
+ widget: 'select',
+ placeholder: '请选择',
+ allowClear: true,
+ asyncData: () => this.service.getNetworkFreightForwarder(),
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ }
+ },
+ bankType: {
+ type: 'string',
+ title: '银行类型',
+ ui: {
+ widget: 'dict-select',
+ params: { dictKey: 'bankname:type' },
+ placeholder: '请输入',
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ }
+ }
+ }
+ };
+ }
+
+ private initST(): STColumn[] {
+ return [
+ { title: '', index: 'key', type: 'checkbox' },
+ { title: '提现时间', index: 'createTime', width: 180 },
+ { title: '提现单号', index: 'refundApplyCode', width: 120 },
+ { title: '网络货运人', index: 'ltdName', width: 140 },
+ { title: '银行类型', index: 'bankTypeLabel', width: 100 },
+ { title: '账户类型', index: 'accountTypeLabel', width: 100 },
+ { title: '账户名称', index: 'bankAccountName', width: 140 },
+ { title: '虚拟账户', index: 'virtualAccount', width: 100 },
+ {
+ title: '提现金额',
+ index: 'amount',
+ width: 120,
+ type: 'widget',
+ className: 'text-right',
+ widget: { type: 'currency-chy', params: ({ record }) => ({ value: record.amount }) }
+ },
+ { title: '提现银行账户', render: 'bankCardNumber', width: 180 },
+ { title: '提现状态', index: 'refundStatusLabel', width: 100 },
+ { title: '银行流水号', index: 'bankSerialNumber', width: 120 },
+ { title: '核心交易流水', index: 'coreSerNo', width: 130 },
+ { title: '备注', index: 'rejectionCause', width: 150, format: item => item.failCause || item.rejectionCause },
+ {
+ title: '操作',
+ fixed: 'right',
+ width: '110px',
+ className: 'text-center',
+ buttons: [
+ {
+ text: '审核',
+ iif: item => item.refundStatus === '1',
+ click: item => this.auditAction(item)
+ },
+ {
+ text: '详情
',
+ click: item =>
+ this.router.navigate([`/financial-management/withdrawals-record/detail/${item.id}`], {
+ queryParams: { type: item.accountType }
+ })
+ },
+ {
+ text: '查看回单',
+ iif: item => item.refundStatus === '3',
+ click: item =>
+ this.service.getReceiptUrl(item.receiptUrl, {
+ bankType: item.bankType,
+ rmYll: item.userId,
+ snglFlgCd: item.coreSerNo,
+ bussType: '06',
+ ltdId: item.ltdId,
+ accountType: item.accountType
+ })
+ }
+ ]
+ }
+ ];
+ }
+ // 导出
+ exprot() {
+ this.service.exportStart({ ...this.sf.value, pageSize: -1 }, this.service.$api_get_asyncExportRefundApplicationList);
+ }
+}
diff --git a/src/app/routes/financial-management/financial-managemen-routing.module.ts b/src/app/routes/financial-management/financial-managemen-routing.module.ts
new file mode 100644
index 00000000..cd54afa6
--- /dev/null
+++ b/src/app/routes/financial-management/financial-managemen-routing.module.ts
@@ -0,0 +1,78 @@
+import { FreightAccountComponent } from './components/freight-account/freight-account.component';
+import { DriverAccountComponent } from './components/driver-account/driver-account.component';
+import { RechargeRecordComponent } from './components/recharge-record/recharge-record.component';
+import { WithdrawalsRecordComponent } from './components/withdrawals-record/withdrawals-record.component';
+import { NgModule } from '@angular/core';
+import { RouterModule, Routes } from '@angular/router';
+import { FreightAccountDetailComponent } from './components/freight-account/freight-account-detail/freight-account-detail.component';
+import { DriverAccountDetailComponent } from './components/driver-account/driver-account-detail/driver-account-detail.component';
+import { WithdrawalsDetailComponent } from './components/withdrawals-record/withdrawals-detail/withdrawals-detail.component';
+import { CostManagementComponent } from './components/cost-management/cost-management.component';
+import { AbnormalGoldComponent } from './components/abnormal-gold/abnormal-gold.component';
+import { PaymentRecordComponent } from './components/payment-record/payment-record.component';
+import { TransactionFlowComponent } from './components/transaction-flow/transaction-flow.component';
+import { CostManagementDetailComponent } from './components/cost-management/cost-management-detail/cost-management-detail.component';
+import { ExpensesReceivableComponent } from './components/cost-management/expenses-receivable/expenses-receivable.component';
+import { ExpensesPayableComponent } from './components/cost-management/expenses-payable/expenses-payable.component';
+import { PaymentOrderComponent } from './components/payment-order/payment-order.component';
+import { ReceiptOrderComponent } from './components/receipt-order/receipt-order.component';
+import { VoucherManagementComponent } from './components/voucher-management/voucher-management.component';
+import { VoucherSummaryComponent } from './components/voucher-summary/voucher-summary.component';
+import { ReceivableOrderComponent } from './components/receivable-order/receivable-order.component';
+import { PayableOrderComponent } from './components/payable-order/payable-order.component';
+import { ReceivableOrderDetailComponent } from './components/receivable-order/receivable-order-detail/receivable-order-detail.component';
+import { PayableOrderDetailComponent } from './components/payable-order/payable-order-detail/payable-order-detail.component';
+import { VoucherDetailComponent } from './components/voucher-management/voucher-detail/voucher-detail.component';
+import { SummaryDetailComponent } from './components/voucher-summary/summary-detail/summary-detail.component';
+import { VoucherListComponent } from './components/voucher-summary/voucher-list/voucher-list.component';
+import { ReceiptOrderDetailComponent } from './components/receipt-order/receipt-order-detail/receipt-order-detail.component';
+import { PaymentOrderDetailComponent } from './components/payment-order/payment-order-detail/payment-order-detail.component';
+import { PlatformAccountComponent } from './components/platform-account/platform-account.component';
+import { PlatformAccountDetailComponent } from './components/platform-account/platform-account-detail/platform-account-detail.component';
+import { AdvanceCollectionComponent } from './components/advance-collection/advance-collection.component';
+import { AdvanceCollectionDetailComponent } from './components/advance-collection/advance-collection-detail/advance-collection-detail.component';
+import { RefundRecordComponent } from './components/refund-record/refund-record.component';
+import { AbnormalGoldDetailComponent } from './components/abnormal-gold/abnormal-gold-detail/abnormal-gold-detail.component';
+
+const routes: Routes = [
+ { path: 'freight-account', component: FreightAccountComponent, data: { guard: { ability: ['FINANCIAL-FREIGHT-ACOUNT-list'] } } },
+ { path: 'freight-account/detail/:id', component: FreightAccountDetailComponent },
+ { path: 'driver-account', component: DriverAccountComponent },
+ { path: 'driver-account/detail/:id', component: DriverAccountDetailComponent },
+ { path: 'platform-account', component: PlatformAccountComponent },
+ { path: 'platform-account/detail/:id', component: PlatformAccountDetailComponent },
+ { path: 'recharge-record', component: RechargeRecordComponent },
+ { path: 'withdrawals-record', component: WithdrawalsRecordComponent },
+ { path: 'withdrawals-record/detail/:id', component: WithdrawalsDetailComponent },
+ { path: 'refund-record', component: RefundRecordComponent },
+ { path: 'voucher-management', component: VoucherManagementComponent },
+ { path: 'voucher-management/detail/:id', component: VoucherDetailComponent },
+ { path: 'voucher-summary', component: VoucherSummaryComponent },
+ { path: 'voucher-summary/detail/:id', component: SummaryDetailComponent },
+ { path: 'voucher-summary/list/:id', component: VoucherListComponent },
+ { path: 'voucher-summary/list/detail/:id', component: VoucherDetailComponent },
+ { path: 'cost-management', component: CostManagementComponent },
+ { path: 'cost-management/detail/:id', component: CostManagementDetailComponent },
+ { path: 'cost-management/expenses-receivable/:id', component: ExpensesReceivableComponent },
+ { path: 'cost-management/expenses-payable/:id', component: ExpensesPayableComponent },
+ { path: 'abnormal-gold', component: AbnormalGoldComponent },
+ { path: 'abnormal-gold/detail/:id', component: AbnormalGoldDetailComponent },
+ { path: 'payment-record', component: PaymentRecordComponent },
+ { path: 'transaction-flow', component: TransactionFlowComponent },
+ { path: 'payment-order', component: PaymentOrderComponent },
+ { path: 'payment-order/detail/:id', component: PaymentOrderDetailComponent },
+ { path: 'receipt-order', component: ReceiptOrderComponent },
+ { path: 'receipt-order/detail/:id', component: ReceiptOrderDetailComponent },
+ { path: 'advance-collection', component: AdvanceCollectionComponent },
+ { path: 'advance-collection/detail/:id', component: AdvanceCollectionDetailComponent },
+ { path: 'receivable-order', component: ReceivableOrderComponent },
+ { path: 'receivable-order/detail/:id', component: ReceivableOrderDetailComponent },
+ { path: 'payable-order', component: PayableOrderComponent },
+ { path: 'payable-order/detail/:id', component: PayableOrderDetailComponent }
+];
+
+@NgModule({
+ imports: [RouterModule.forChild(routes)],
+ exports: [RouterModule]
+})
+export class FinancialManagementRoutingModule {}
diff --git a/src/app/routes/financial-management/financial-management.module.ts b/src/app/routes/financial-management/financial-management.module.ts
new file mode 100644
index 00000000..c17c335d
--- /dev/null
+++ b/src/app/routes/financial-management/financial-management.module.ts
@@ -0,0 +1,80 @@
+import { NgModule } from '@angular/core';
+import { CommonModule } from '@angular/common';
+import { FreightAccountComponent } from './components/freight-account/freight-account.component';
+import { DriverAccountComponent } from './components/driver-account/driver-account.component';
+import { RechargeRecordComponent } from './components/recharge-record/recharge-record.component';
+import { WithdrawalsRecordComponent } from './components/withdrawals-record/withdrawals-record.component';
+import { SharedModule } from '@shared';
+import { FinancialManagementRoutingModule } from './financial-managemen-routing.module';
+import { FreightAccountDetailComponent } from './components/freight-account/freight-account-detail/freight-account-detail.component';
+import { DriverAccountDetailComponent } from './components/driver-account/driver-account-detail/driver-account-detail.component';
+import { WithdrawalsDetailComponent } from './components/withdrawals-record/withdrawals-detail/withdrawals-detail.component';
+import { CostManagementComponent } from './components/cost-management/cost-management.component';
+import { AbnormalGoldComponent } from './components/abnormal-gold/abnormal-gold.component';
+import { PaymentRecordComponent } from './components/payment-record/payment-record.component';
+import { TransactionFlowComponent } from './components/transaction-flow/transaction-flow.component';
+import { ClearingModalComponent } from './components/abnormal-gold/clearing-modal/clearing-modal.component';
+import { CostManagementDetailComponent } from './components/cost-management/cost-management-detail/cost-management-detail.component';
+import { ExpensesReceivableComponent } from './components/cost-management/expenses-receivable/expenses-receivable.component';
+import { ExpensesPayableComponent } from './components/cost-management/expenses-payable/expenses-payable.component';
+import { PaymentOrderComponent } from './components/payment-order/payment-order.component';
+import { ReceiptOrderComponent } from './components/receipt-order/receipt-order.component';
+import { VoucherManagementComponent } from './components/voucher-management/voucher-management.component';
+import { VoucherSummaryComponent } from './components/voucher-summary/voucher-summary.component';
+import { ReceivableOrderComponent } from './components/receivable-order/receivable-order.component';
+import { PayableOrderComponent } from './components/payable-order/payable-order.component';
+import { ReceivableOrderDetailComponent } from './components/receivable-order/receivable-order-detail/receivable-order-detail.component';
+import { PayableOrderDetailComponent } from './components/payable-order/payable-order-detail/payable-order-detail.component';
+import { VoucherDetailComponent } from './components/voucher-management/voucher-detail/voucher-detail.component';
+import { SummaryDetailComponent } from './components/voucher-summary/summary-detail/summary-detail.component';
+import { PaymentOrderDetailComponent } from './components/payment-order/payment-order-detail/payment-order-detail.component';
+import { VoucherListComponent } from './components/voucher-summary/voucher-list/voucher-list.component';
+import { ReceiptOrderDetailComponent } from './components/receipt-order/receipt-order-detail/receipt-order-detail.component';
+import { PlatformAccountComponent } from './components/platform-account/platform-account.component';
+import { PlatformAccountDetailComponent } from './components/platform-account/platform-account-detail/platform-account-detail.component';
+import { AdvanceCollectionComponent } from './components/advance-collection/advance-collection.component';
+import { AdvanceCollectionDetailComponent } from './components/advance-collection/advance-collection-detail/advance-collection-detail.component';
+import { RefundRecordComponent } from './components/refund-record/refund-record.component';
+import { AbnormalGoldDetailComponent } from './components/abnormal-gold/abnormal-gold-detail/abnormal-gold-detail.component';
+
+const ROUTESCOMPONENTS = [
+ FreightAccountComponent,
+ DriverAccountComponent,
+ RechargeRecordComponent,
+ WithdrawalsRecordComponent,
+ WithdrawalsDetailComponent,
+ AbnormalGoldComponent,
+ PaymentRecordComponent,
+ TransactionFlowComponent,
+ CostManagementComponent,
+ CostManagementDetailComponent,
+ ExpensesReceivableComponent,
+ ExpensesPayableComponent,
+ PaymentOrderComponent,
+ ReceiptOrderComponent,
+ VoucherManagementComponent,
+ VoucherDetailComponent,
+ VoucherSummaryComponent,
+ SummaryDetailComponent,
+ ReceivableOrderComponent,
+ PayableOrderComponent,
+ ReceivableOrderDetailComponent,
+ PayableOrderDetailComponent,
+ PlatformAccountComponent,
+ PlatformAccountDetailComponent,
+ PaymentOrderDetailComponent,
+ VoucherListComponent,
+ ReceiptOrderDetailComponent,
+ AdvanceCollectionComponent,
+ AdvanceCollectionDetailComponent,
+ RefundRecordComponent,
+ AbnormalGoldDetailComponent
+];
+
+const NOTROUTECOMPONENTS = [DriverAccountDetailComponent, FreightAccountDetailComponent, ClearingModalComponent];
+
+@NgModule({
+ declarations: [...ROUTESCOMPONENTS, ...NOTROUTECOMPONENTS],
+ imports: [CommonModule, FinancialManagementRoutingModule, SharedModule]
+})
+export class FinancialManagementModule {}
diff --git a/src/app/routes/financial-management/services/freight-account.service.ts b/src/app/routes/financial-management/services/freight-account.service.ts
new file mode 100644
index 00000000..e6b17887
--- /dev/null
+++ b/src/app/routes/financial-management/services/freight-account.service.ts
@@ -0,0 +1,237 @@
+/*
+ * @Description :
+ * @Version : 1.0
+ * @Author : Shiming
+ * @Date : 2022-01-18 15:57:44
+ * @LastEditors : Shiming
+ * @LastEditTime : 2022-04-11 14:26:38
+ * @FilePath : \\tms-obc-web\\src\\app\\routes\\financial-management\\services\\freight-account.service.ts
+ * Copyright (C) 2022 huzhenhong. All rights reserved.
+ */
+import { Injectable, Injector } from '@angular/core';
+import { BaseService, EACacheService, ShipperBaseService } from '@shared';
+
+@Injectable({
+ providedIn: 'root'
+})
+export class FreightAccountService extends ShipperBaseService {
+ $mock_url = '/rule?_allow_anonymous=true';
+
+ // 运营端获取货主账户信息
+ $api_get_shipper_account_page = '/api/fcc/accountBalance/getShipperAccountBalanceByOperator';
+ // 运营端获取司机账户信息
+ $api_get_driver_account_page = '/api/fcc/accountBalance/getDriverAccountBalanceByOperator';
+
+ // 运营端获取平台余额
+ $api_get_platform_account_header = '/api/fcc/accountBalance/getPlatformBalanceByOperator';
+ // 运营端获取平台余额
+ $api_get_platform_account_statistics = '/api/fcc/accountBalanceDetail/getAccountBalancePlatformIncomeDetailByOperator';
+ // 运营端获取平台余额
+ $api_get_platform_account_page = '/api/fcc/accountBalance/getPlatformAccountBalanceByOperator';
+ // 运营端获取账户余额交易明细
+ $api_get_platform_account_detail_page = '/api/fcc/accountBalanceDetail/getAccountBalanceByPage';
+
+ // 运营端获取货主账户明细信息
+ $api_get_shipper_account_detail = '/api/fcc/accountBalanceDetail/getAccountBalanceShipperByOperatorPage';
+ // 运营端获取司机账户明细信息
+ $api_get_driver_account_detail = '/api/fcc/accountBalanceDetail/getAccountBalanceDriverByOperatorPage';
+ // 运营端端获取货主交易收入与支出金额
+ $api_get_shipper_account_balance_detail = '/api/fcc/accountBalanceDetail/getAccountBalanceShipperIncomeDetailByOperator';
+ // 运营端端获取司机交易收入与支出金额
+ $api_get_driver_account_balance_detail = '/api/fcc/accountBalanceDetail/getAccountBalanceDriverIncomeDetailByOperator';
+ // 运营端导出司机账户明细信息
+ $api_export_driver_account_page = '/api/fcc/accountBalance/exportDriverAccountBalanceByOperator';
+
+ // 货主端获取账户余额交易明细
+ $api_get_balance_by_shipper = '/api/fcc/accountBalanceDetail/getAccountBalanceByShipperPage';
+ // 运营端导出货主账户明细信息
+ $api_export_shipper = '/api/fcc/accountBalance/reportShipperAccountBalanceByOperator';
+
+ // 查询订单支付申请表
+ $api_get_order_payment_page = '/api/fcc/billPaymentApplicationOBC/list/page';
+
+ // 查询提现申请表
+ $api_get_refund_page = '/api/fcc/refundApplicationOBC/list/page';
+ // 获取提现申请表详情
+ $api_get_refund_detail = '/api/fcc/refundApplicationOBC/get';
+ // 获取提现支付详情
+ $api_get_refund_detail_page = '/api/fcc/refundApplicationOBC/get/getPayList';
+ // 提现支付详情导出
+ $api_export_refund_detail_page = '/api/fcc/refundApplicationOBC/asyncExportPayList';
+ // 同意提现
+ $api_agree_refund = '/api/fcc/refundApplicationOBC/agreeRefund';
+ // 拒绝提现
+ $api_disagree_refund = '/api/fcc/refundApplicationOBC/disagreeRefund';
+
+ // 查询订单退款申请表
+ $api_get_refund_record_page = '/api/fcc/billRefundApplication/list/page';
+ // 同意退款
+ $api_agree_refund_record = '/api/fcc/billRefundApplication/agreeRefund';
+ // 不同意退款
+ $api_disagree_refund_record = '/api/fcc/billRefundApplication/disagreeRefund';
+ // 重新发起
+ $api_rebulid_refund_record = '/api/fcc/billRefundApplication/rebulid';
+
+ // 查询充值信息表
+ $api_get_recharge_page = '/api/fcc/rechargeInfo/list/getPageByOperator';
+ // 查询异常入金
+ $api_get_abnormal_gold_page = '/api/fcc/rechargeInfo/list/page';
+ // 运营端获取账户余额交易明细
+ $api_get_account_blance = '/api/fcc/accountBalanceDetail/getAccountBalanceByPage';
+ // 添加备注
+ $api_edit_remark = '/api/fcc/rechargeInfo/addRemark';
+
+ // 查询费用单抬头
+ $api_get_cost_page = '/api/fcc/ficoFeeH/list/page';
+ // 根据费用头ID查询费用单及开票明细
+ $api_get_cost_detail = '/api/fcc/ficoFeeL/detail';
+ // 费用关联的应收核销明细
+ $api_get_cost_ahxl_detail = '/api/fcc/ficoAhxL/getListByFeeLId';
+
+ // 查询应收核销抬头
+ $api_get_fico_page = '/api/fcc/ficoAhxH/list/page';
+ // 应收核销汇总
+ $api_get_fico_sum = '/api/fcc/ficoAhxH/getSum';
+ // 获取应收核销抬头
+ $api_get_fico_header = '/api/fcc/ficoAhxH/get';
+ // 查询应收核销明细
+ $api_get_fico_detail_header = '/api/fcc/ficoAhxL/list/page';
+
+ // 查询应付核销抬头
+ $api_get_fico_ph_page = '/api/fcc/ficoPhxH/list/page';
+ // 应付核销汇总
+ $api_get_fico_ph_sum = '/api/fcc/ficoPhxH/getSum';
+ // 获取应付核销抬头
+ $api_get_fico_ph_header = '/api/fcc/ficoPhxH/get';
+ // 查询应付核销明细
+ $api_get_fico_ph_detail_header = '/api/fcc/ficoPhxL/list/page';
+
+ // 查询总账凭证表
+ $api_get_fico_vch_page = '/api/fcc/ficoVcH/list/page';
+ // 导出总账凭证表
+ $api_export_fico_vch_page = '/api/fcc/ficoVcH/reportVchListPage';
+ // 获取总账凭证表详情信息
+ $api_get_fico_vch__detail = '/api/fcc/ficoVcH/getDetail';
+
+ // 查询付款单抬头
+ $api_get_payment_page = '/api/fcc/ficoPayH/listFicoPayHPage';
+ // 查询付款单明细
+ $api_get_payment_detail = '/api/fcc/ficoPayL/list/page';
+ // 付款单抬头信息
+ $api_get_payment_header = '/api/fcc/ficoPayH/getFicoPayHById';
+
+ // 查询收款单抬头
+ $api_get_receipt_page = '/api/fcc/ficoBrmH/list/page';
+ // 收款单抬头信息
+ $api_get_receipt_header = '/api/fcc/ficoBrmH/get';
+ // 获取收款单抬头
+ $api_get_receipt_detail = '/api/fcc/ficoBrmYsk/getListByBrmHid';
+
+ // 收款单浏览抬头
+ $api_get_ficoInpinvL_page = '/api/fcc/ficoBrmH/get';
+ // 收款单浏览表格明细
+ $api_get_ficoInpinvL_getListByBrmHid = '/api/fcc/ficoBrmYsk/getListByBrmHid';
+
+ // 下载银行回单请求
+ $api_download_receipt_apply = '/api/fcc/spd/callback/receiptApply';
+ $api_download_receipt_apply_byte = '/api/fcc/spd/callback/receiptApplyByte';
+
+ // 查询预收款余额
+ $api_get_advance_collection_page = '/api/fcc/ficoYskBla/list/page';
+ // 根据预收款ID获取收款单抬头
+ $api_get_advance_collection_header = '/api/fcc/ficoBrmH/getByYskblaId';
+ // 根据预收款ID获取收款单明细
+ $api_get_advance_collection_detail = '/api/fcc/ficoBrmYsk/getBrmYskByYskblaId';
+ // 根据预收款ID获取核销信息明细
+ $api_get_advance_collection_hrxiao = '/api/fcc/ficoAhxH/getAhxHByYskblaId';
+
+ // 运营导出充值信息 充值记录导出
+ $api_get_exportPageByOperator = '/api/fcc/rechargeInfo/exportPageByOperator';
+ // 运营端导出交易流水明细
+ $api_get_exportAccountBalanceDetailPage = '/api/fcc/accountBalanceDetail/exportAccountBalanceDetailPage';
+ // 运营端导出平台账户余额交易明细
+ $api_get_exportAccountBalanceByPage = '/api/fcc/accountBalanceDetail/exportAccountBalanceByPage';
+ // 运营端导出司机账户余额交易明细
+ $api_get_exportAccountBalanceDriverByOperatorPage = '/api/fcc/accountBalanceDetail/exportAccountBalanceDriverByOperatorPage';
+ // 运营端导出货主账户余额交易明细
+ $api_get_exportAccountBalanceShipperByOperatorPage = '/api/fcc/accountBalanceDetail/exportAccountBalanceShipperByOperatorPage';
+ // 运营端导出导出货主账户
+ $api_get_exportShipperAccountBalanceByOperator = '/api/fcc/accountBalance/exportShipperAccountBalanceByOperator';
+ // 运营端导出导出平台账户信息
+ $api_get_exportPlatformAccountBalanceByOperator = '/api/fcc/accountBalance/exportPlatformAccountBalanceByOperator';
+ // 导出预收款余额
+ $api_get_reportYskBla = '/api/fcc/ficoYskBla/reportYskBla';
+
+ // 查询异常入金充值信息
+ $api_get_getAbnormalAmountPage = '/api/fcc/rechargeInfo/list/getAbnormalAmountPage';
+ // 查询异常入金充值信息详情
+ $api_get_getAbnormalAmount_detail = '/api/fcc/rechargeInfo/get';
+
+ // 异步导出运营后台异常入金列表
+ $api_get_exportAbnormalAmountPage = '/api/fcc/rechargeInfo/exportAbnormalAmountPage';
+ // 异步导出运营后台退款记录列表
+ $api_get_asyncExportBillRefundApplicationList = '/api/fcc/billRefundApplication/asyncExportBillRefundApplicationList';
+ // 异步导出运营后台支付记录列表
+ $api_get_asyncExportBillPaymentApplicationList = '/api/fcc/billPaymentApplicationOBC/asyncExportBillPaymentApplicationList';
+ // 异步导出运营后台提现记录
+ $api_get_asyncExportRefundApplicationList = '/api/fcc/refundApplicationOBC/asyncExportRefundApplicationList';
+
+ constructor(public injector: Injector) {
+ super(injector);
+ }
+
+ getReceiptUrl(url: string, params: any) {
+ const { bankType, snglFlgCd } = params;
+ if (url) {
+ if (params?.bankType === '1') {
+ window.open(url);
+ } else if (params?.bankType === '2') {
+ window.open(url);
+ // this.exportFile({ bankType, receiptUrl: url, bankSerialNumber: snglFlgCd }, this.$api_download_receipt_apply_byte);
+ }
+ } else {
+ this.request(this.$api_download_receipt_apply, { ...params }).subscribe(res => {
+ if (res?.receiptUrl) {
+ if (bankType === '1') {
+ window.open(res?.receiptUrl);
+ } else if (bankType === '2') {
+ window.open(res?.receiptUrl);
+ // this.downloadFile(this.$api_download_receipt_apply_byte, {
+ // bankType,
+ // receiptUrl: res.receiptUrl,
+ // bankSerialNumber: snglFlgCd
+ // });
+ }
+ } else {
+ this.msgSrv.warning(res.statusMsg || '获取回单失败');
+ }
+ });
+ }
+ }
+ // 获取货主企业列表
+ public $api_enterpriceList = '/api/mdc/cuc/enterpriseInfo/operate/enterpriceList';
+ // 获取企业CRM信息
+ public $api_crm_enterpriceList = '/api/mdc/cuc/enterprise/getCrmSelectList';
+ reviewPDF(url: string) {
+ if (!url) {
+ return;
+ }
+ this.openURL(url);
+ // const uA = window.navigator.userAgent; // 判断浏览器内核
+ // const isIE =
+ // /msie\s|trident\/|edge\//i.test(uA) &&
+ // !!('uniqueID' in document || 'documentMode' in document || 'ActiveXObject' in window || 'MSInputMethodContext' in window);
+ // const objectUrl = url;
+ // const a = document.createElement('a');
+ // document.body.appendChild(a);
+ // a.href = objectUrl;
+ // a.download = `回单.pdf`;
+ // if (isIE) {
+ // // 兼容IE11无法触发下载的问题
+ // (navigator as any).msSaveBlob(url, a.download);
+ // } else {
+ // a.click();
+ // }
+ // a.remove();
+ }
+}
diff --git a/src/app/routes/insurance-management/components/list/list.component.html b/src/app/routes/insurance-management/components/list/list.component.html
new file mode 100644
index 00000000..6392b20b
--- /dev/null
+++ b/src/app/routes/insurance-management/components/list/list.component.html
@@ -0,0 +1,133 @@
+
+
+
+
+
+
+
+
+
+
+
+
4">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.resourceCode | currency }}
+
+
+ {{ item.practicalPremium | currency }}
+
+
+ {{ item.insureAmount | currency }}
+
+
+ {{ item.premium | currency }}
+
+
+ {{ item.processResult == '2' ? item.processMessage : '' }}
+
+
+ {{ item?.driverName }}/{{ item?.driverTelephone }}/{{ item?.carNo }}
+
+
+
+ {{ item?.distance ? ((item?.distance)/1000).toFixed(4) + '公里' : '' }}
+
+
+
+
+ {{ item?.billCode }}
+
+
+
+
+ {{ item?.resourceCode }}
+
+
+ {{ item?.resourceStatusLabel }}
+
+
+
+ {{ item.insureCode }}
+
+ {{ item?.insureStatusLabel }}
+
+
+
+ {{ item?.goodsInfoName }}
+
+ {{ item?.weight ? item?.weight + '吨/' : '' }}
+ {{ item?.volume ? item?.volume + '方' : '' }}
+ {{ item?.number ? item?.number + '件' : '' }}
+
+
+
+ 0">
+
+ {{ data.expenseName }}:{{ data.price | currency }}
+ {{ data.paymentStatusLabel }}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/app/routes/insurance-management/components/list/list.component.less b/src/app/routes/insurance-management/components/list/list.component.less
new file mode 100644
index 00000000..149a0bc9
--- /dev/null
+++ b/src/app/routes/insurance-management/components/list/list.component.less
@@ -0,0 +1,13 @@
+
+ :host {
+ p{
+ margin-bottom: 0
+ }
+ .left_btn {
+ width: 50px;
+ height: 32px;
+ padding-left: 8px;
+ line-height:32px;
+ background-color: #d7d7d7;
+ }
+ }
\ No newline at end of file
diff --git a/src/app/routes/insurance-management/components/list/list.component.spec.ts b/src/app/routes/insurance-management/components/list/list.component.spec.ts
new file mode 100644
index 00000000..1cb2cef1
--- /dev/null
+++ b/src/app/routes/insurance-management/components/list/list.component.spec.ts
@@ -0,0 +1,35 @@
+/*
+ * @Description :
+ * @Version : 1.0
+ * @Author : Shiming
+ * @Date : 2021-12-06 20:03:28
+ * @LastEditors : Shiming
+ * @LastEditTime : 2022-01-25 17:22:11
+ * @FilePath : \\tms-obc-web\\src\\app\\routes\\insurance-management\\components\\list\\list.component.spec.ts
+ * Copyright (C) 2022 huzhenhong. All rights reserved.
+ */
+
+import { waitForAsync, ComponentFixture, TestBed } from '@angular/core/testing';
+import { insuranceManagementListComponent } from './list.component';
+
+describe('insuranceManagementListComponent', () => {
+ let component: insuranceManagementListComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(waitForAsync(() => {
+ TestBed.configureTestingModule({
+ declarations: [ insuranceManagementListComponent ]
+ })
+ .compileComponents();
+ }));
+
+ beforeEach(() => {
+ fixture = TestBed.createComponent(insuranceManagementListComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/src/app/routes/insurance-management/components/list/list.component.ts b/src/app/routes/insurance-management/components/list/list.component.ts
new file mode 100644
index 00000000..4655ee58
--- /dev/null
+++ b/src/app/routes/insurance-management/components/list/list.component.ts
@@ -0,0 +1,574 @@
+import { Component, OnInit, ViewChild } from '@angular/core';
+import { STColumn, STComponent } from '@delon/abc/st';
+import { SFComponent, SFDateWidgetSchema, SFSchema, SFSchemaEnum, SFSelectWidgetSchema, SFUISchema } from '@delon/form';
+import { ModalHelper, _HttpClient } from '@delon/theme';
+import { NzModalService } from 'ng-zorro-antd/modal';
+import { map } from 'rxjs/operators';
+import { of } from 'rxjs';
+import { ShipperBaseService } from '@shared';
+import { Router } from '@angular/router';
+import { InsuranceManagementService } from '../../services/insurance-management.service';
+import { VehicleImgViewComponent } from 'src/app/routes/vehicle/components/list/img-view/img-view.component';
+import { ImageViewComponent } from 'src/app/shared/components/imagelist';
+
+@Component({
+ selector: 'app-insurance-management-list',
+ templateUrl: './list.component.html',
+ styleUrls: ['./list.component.less']
+})
+export class insuranceManagementListComponent implements OnInit {
+ ui: SFUISchema = {};
+ uiView: SFUISchema = {};
+ schema: SFSchema = {};
+ schemaView: SFSchema = {};
+ auditMany = false;
+ isVisibleView = false;
+ isVisibleEvaluate = false;
+ isVisible = false;
+ _$expand = false;
+ @ViewChild('st') private readonly st!: STComponent;
+ @ViewChild('stFloat') private readonly stFloat!: STComponent;
+ @ViewChild('stFloatView') private readonly stFloatView!: STComponent;
+ @ViewChild('sf', { static: false }) sf!: SFComponent;
+ @ViewChild('sfFre', { static: false }) sfFre!: SFComponent;
+ @ViewChild('sfView', { static: false }) sfView!: SFComponent;
+ columns: STColumn[] = [];
+ columnsFloat: STColumn[] = [];
+ columnsFloatView: STColumn[] = [];
+ demoValue: any;
+ resourceStatus: any;
+ datass: any = [
+ {
+ one: '1',
+ two: '1',
+ three: '1',
+ id: 1
+ },
+ {
+ one: '2',
+ two: '2',
+ three: '2',
+ id: 2
+ }
+ ];
+ tabs = {
+ totalCount: 0,
+ receivedQuantity: 0,
+ stayQuantity: 0,
+ GoingQuantity: 0,
+ cancelQuantity: 0
+ };
+ constructor(
+ public service: InsuranceManagementService,
+ private modal: NzModalService,
+ public shipperservice: ShipperBaseService,
+ private router: Router,
+ private modale: ModalHelper,
+ ) { }
+
+ /**
+ * 查询参数
+ */
+ get reqParams() {
+ const a: any = {};
+ if (this.resourceStatus) {
+ a.insureStatus = this.resourceStatus;
+ }
+ const params: any = Object.assign({}, this.sf?.value || {});
+ delete params._$expand;
+ return {
+ ...a,
+ ...params,
+ createTime: {
+ start: this.sf?.value?.createTime?.[0] || '',
+ end: this.sf?.value?.createTime?.[1] || ''
+ },
+ recordTime: {
+ start: this.sf?.value?.recordTime?.[0] || '',
+ end: this.sf?.value?.recordTime?.[1] || ''
+ },
+ insureTime: {
+ start: this.sf?.value?.insureTime?.[0] || '',
+ end: this.sf?.value?.insureTime?.[1] || ''
+ },
+ };
+ }
+ get selectedRows() {
+ return this.st?.list.filter(item => item.checked) || [];
+ }
+ search() {
+ this.st?.load(1);
+ this.getGoodsSourceStatistical();
+ }
+ getGoodsSourceStatistical() {
+ this.tabs = {
+ totalCount: 0,
+ receivedQuantity: 0,
+ stayQuantity: 0,
+ GoingQuantity: 0,
+ cancelQuantity: 0
+ };
+ const params: any = Object.assign({}, this.reqParams || {});
+ delete params.insureStatus;
+ this.service.request(this.service.$api_listStatisticalStatus, params).subscribe((res: any) => {
+ if (res) {
+ let totalCount = 0;
+ res.forEach((element: any) => {
+ if (element.insureStatusLabel === '待投保') {
+ this.tabs.receivedQuantity = element.quantity;
+ } else if (element.insureStatusLabel === '已投保') {
+ this.tabs.stayQuantity = element.quantity;
+ } else if (element.insureStatusLabel === '投保失败') {
+ this.tabs.GoingQuantity = element.quantity;
+ } else if (element.insureStatusLabel === '已取消') {
+ this.tabs.cancelQuantity = element.quantity;
+ }
+ totalCount += element.quantity;
+ });
+ this.tabs.totalCount = totalCount;
+ }
+ });
+ }
+ selectChange(e: number) {
+ this.resourceStatus = e;
+ this.initST();
+ setTimeout(() => {
+ this.st.load();
+ }, 500);
+ }
+ ngOnInit(): void {
+ this.getGoodsSourceStatistical();
+ this.initSF();
+ this.initST();
+ }
+
+ /**
+ * 初始化查询表单
+ */
+ initSF() {
+ this.schema = {
+ properties: {
+ _$expand: { type: 'boolean', ui: { hidden: true } },
+ insureCode: {
+ type: 'string',
+ title: '投保编号'
+ },
+ billCode: {
+ type: 'string',
+ title: '订单号'
+ },
+ resourceCode: {
+ type: 'string',
+ title: '货源编号'
+ },
+ policyNo: {
+ type: 'string',
+ title: '保单号',
+ ui: {
+ visibleIf: {
+ _$expand: (value: boolean) => value
+ },
+ }
+ },
+ insureType: {
+ title: '类型',
+ type: 'string',
+ ui: {
+ widget: 'dict-select',
+ params: { dictKey: 'insure:type' },
+ containsAllLabel: true,
+ visibleIf: {
+ _$expand: (value: boolean) => value
+ }
+ } as SFSelectWidgetSchema
+ },
+ startAddress: {
+ type: 'string',
+ title: '始发地',
+ ui: {
+ visibleIf: {
+ _$expand: (value: boolean) => value
+ }
+ }
+ },
+ endAddress: {
+ type: 'string',
+ title: '目的地',
+ ui: {
+ visibleIf: {
+ _$expand: (value: boolean) => value
+ }
+ }
+ },
+ shipperAppUserId: {
+ type: 'string',
+ title: '货主',
+ ui: {
+ widget: 'select',
+ serverSearch: true,
+ searchDebounceTime: 300,
+ searchLoadingText: '搜索中...',
+ allowClear: true,
+ visibleIf: {
+ _$expand: (value: boolean) => value
+ },
+ onSearch: (q: any) => {
+ let str =q.replace(/^\s+|\s+$/g,"");
+ if (str) {
+ return this.service
+ .request(this.service.$api_enterpriceList, { enterpriseName: str })
+ .pipe(map((res: any) => (res as any[]).map(i => ({ label: i.enterpriseName, value: i.id } as SFSchemaEnum))))
+ .toPromise();
+ } else {
+ return of([]);
+ }
+ },
+ change: (q: any) => {
+ this.getRegionCode(q);
+ }
+ } as SFSelectWidgetSchema
+ },
+ enterpriseProjectId: {
+ type: 'string',
+ title: '所属项目',
+ ui: {
+ widget: 'select',
+ placeholder: '请先选择货主',
+ visibleIf: {
+ _$expand: (value: boolean) => value
+ },
+ } as SFSelectWidgetSchema
+ },
+
+ driverName: {
+ title: '承运司机',
+ type: 'string',
+ ui: {
+ visibleIf: {
+ _$expand: (value: boolean) => value
+ }
+ }
+ },
+ carNo: {
+ title: '车牌号',
+ type: 'string',
+ ui: {
+ visibleIf: {
+ _$expand: (value: boolean) => value
+ }
+ }
+ },
+ insureStatus: {
+ title: '投保状态',
+ type: 'string',
+ ui: {
+ widget: 'dict-select',
+ params: { dictKey: 'insure:status' },
+ containsAllLabel: true,
+ visibleIf: {
+ _$expand: (value: boolean) => value
+ }
+ } as SFSelectWidgetSchema
+ },
+ insureRefundStatus: {
+ title: '退款状态',
+ type: 'string',
+ ui: {
+ widget: 'dict-select',
+ params: { dictKey: 'insure:refund:status' },
+ containsAllLable: true,
+ visibleIf: {
+ _$expand: (value: boolean) => value
+ }
+ } as SFSelectWidgetSchema
+ },
+ enterpriseInfoId: {
+ type: 'string',
+ title: '网络货运人',
+ ui: {
+ widget: 'select',
+ placeholder: '请选择',
+ allowClear: true,
+ visibleIf: {
+ _$expand: (value: boolean) => value
+ },
+ asyncData: () => this.shipperservice.getNetworkFreightForwarder()
+ }
+ },
+ insureTime: {
+ title: '投保时间',
+ type: 'string',
+ ui: {
+ widget: 'date',
+ mode: 'range',
+ format: 'yyyy-MM-dd',
+ allowClear: true,
+ visibleIf: {
+ _$expand: (value: boolean) => value
+ }
+ } as SFDateWidgetSchema
+ },
+ createTime: {
+ title: '创建时间',
+ type: 'string',
+ ui: {
+ widget: 'date',
+ mode: 'range',
+ format: 'yyyy-MM-dd',
+ allowClear: true,
+ visibleIf: {
+ _$expand: (value: boolean) => value
+ }
+ } as SFDateWidgetSchema
+ },
+ recordTime: {
+ title: '录单时间',
+ type: 'string',
+ ui: {
+ widget: 'date',
+ mode: 'range',
+ format: 'yyyy-MM-dd',
+ allowClear: true,
+ visibleIf: {
+ _$expand: (value: boolean) => value
+ }
+ } as SFDateWidgetSchema
+ },
+
+ },
+ type: 'object'
+ };
+ this.ui = { '*': { spanLabelFixed: 110, grid: { span: 8, gutter: 4 } } };
+ }
+ // 获取城市列表
+ getRegionCode(regionCode: any) {
+ console.log(regionCode);
+ return this.service
+ .request(this.service.$api_get_enterprise_project, { id: regionCode })
+ .pipe(
+ map(res =>
+ res.map((item: any) => ({
+ label: item.projectName,
+ value: item.id
+ }))
+ )
+ )
+ .subscribe(res => {
+ this.sf.getProperty('/enterpriseProjectId')!.schema.enum = res;
+ this.sf.getProperty('/enterpriseProjectId')!.widget.reset(res);
+ // if (this.enterpriseProjectIds) {
+ // this.sf1.setValue('/enterpriseProjectId', this.enterpriseProjectIds);
+ // }
+ });
+ }
+ /**
+ * 初始化数据列表
+ */
+ initST() {
+ this.columns = [
+ { title: '', type: 'checkbox', fixed: 'left', width: '50px', className: 'text-center' },
+ {
+ title: '投保编号',
+ width: '180px',
+ fixed: 'left',
+ className: 'text-left',
+ render: 'insureCode'
+ },
+ {
+ title: '保单号',
+ width: '250px',
+ className: 'text-right',
+ index: 'policyNo'
+ },
+ { title: '类型', index: 'insureTypeLabel', width: '220px', className: 'text-left' },
+ { title: '始发地', index: 'startAddress', width: '220px', className: 'text-left' },
+ { title: '目的地', index: 'endAddress', width: '220px', className: 'text-left' },
+ { title: '距离', render: 'distance', width: '180px', className: 'text-left' },
+ { title: '保额(元)', render: 'insureAmount', width: '180px', className: 'text-right' },
+ { title: '保费(元)', render: 'premium', width: '180px', className: 'text-right' },
+ // {
+ // title: '实际保费(元)',
+ // className: 'text-right',
+ // width: '180px',
+ // render: 'practicalPremium'
+ // },
+ {
+ title: '货物信息',
+ className: 'text-left',
+ width: '250px',
+ render: 'goodsName'
+ },
+ {
+ title: '承运司机',
+ className: 'text-right',
+ width: '250px',
+ render: 'driverName'
+ },
+ {
+ title: '关联订单号',
+ className: 'text-right',
+ render: 'goodsNumber',
+ width: '180px'
+ },
+ {
+ title: '货源编号',
+ className: 'text-right',
+ render: 'resourceCode',
+ width: '150px'
+ },
+ {
+ title: '网络货运人',
+ className: 'text-left',
+ width: '250px',
+ index: 'enterpriseInfoName'
+ },
+ {
+ title: '货主',
+ className: 'text-left',
+ width: '250px',
+ index: 'shipperAppUserName'
+ },
+ {
+ title: '所属项目',
+ width: '250px',
+ className: 'text-left',
+ index: 'enterpriseProjectName'
+ },
+ {
+ title: '投保时间',
+ width: '180px',
+ className: 'text-left',
+ index: 'insureTime'
+ },
+ {
+ title: '生效时间',
+ width: '180px',
+ className: 'text-left',
+ index: 'effectTime'
+ },
+ {
+ title: '录单时间',
+ width: '180px',
+ className: 'text-left',
+ index: 'recordTime'
+ },
+ {
+ title: '创建时间',
+ width: '180px',
+ className: 'text-left',
+ index: 'createTime'
+ },
+ {
+ title: '失败原因',
+ width: '180px',
+ className: 'text-left',
+ render: 'processMessage',
+ // processResult=2
+ },
+ {
+ title: '退款状态',
+ width: '180px',
+ className: 'text-left',
+ index: 'insureRefundStatusLabel',
+ // processResult=2
+ },
+ {
+ title: '操作',
+ fixed: 'right',
+ width: '110px',
+ className: 'text-center',
+ buttons: [
+ {
+ text: '查看保单',
+ click: _record => this.showImg(_record),
+ iif: item => item.insureStatus == '2'
+ // acl: { ability: ['VEHICLE-LIST-view'] },
+ // iif: item =>
+ // item.billStatus == '4' || item.billStatus == '5' || item.billStatus == '2' || item.billStatus == '3' || item.billStatus == '1'
+ },
+ {
+ text: '退保费',
+ click: _record => this.retreatPrice(_record),
+ iif: item => item.insureStatus == '2'
+ // acl: { ability: ['VEHICLE-LIST-view'] },
+ }
+ ]
+ }
+ ];
+ }
+ showImg(_record: any) {
+ // var newUrl=_record.policyUrl.replace('http','https')
+ // console.log(newUrl);
+
+ // window.open(newUrl,'_self');
+ window.open(`${_record.newPolicyUrl}`);
+ // this.service.downloadFile(`${_record.newPolicyUrl}`)
+
+
+ // const params = {
+ // imgList: [_record.policyUrl],
+ // index: 0
+ // };
+ // this.modal.create({ nzContent: ImageViewComponent, nzComponentParams: { params } });
+ }
+ /**
+ * 查询字段个数
+ */
+ get queryFieldCount(): number {
+ return Object.keys(this.schema?.properties || {}).length;
+ }
+ /**
+ * 伸缩查询条件
+ */
+ expandToggle(): void {
+ this._$expand = !this._$expand;
+ this.sf?.setValue('/_$expand', this._$expand);
+ }
+ tabChange(item: any) { }
+ /**
+ * 重置表单
+ */
+ resetSF(): void {
+ this.sf.reset();
+ this._$expand = false;
+ }
+
+ // 退保费
+ retreatPrice(value: any) {
+ this.modal.warning({
+ nzTitle: '确认退还保费吗?',
+ nzClosable: true,
+ nzContent: '退还后不可撤销,请谨慎操作!',
+ nzCancelText: '取消',
+ nzOnOk: () => {
+ this.service.request(this.service.$api_get_addINPBillRefundApplication, {id: value.id}).subscribe(res => {
+ if (res) {
+ this.service.msgSrv.success('删除菜单成功');
+ }
+ });
+ }
+ });
+ }
+ // 再次投保
+ retreatNext(value: any) {
+ this.modal.warning({
+ nzTitle: '确认再次投保吗?',
+ nzClosable: true,
+ nzCancelText: '取消',
+ nzOnOk: () => {
+ this.service.request(this.service.$api_del_many, [value.id]).subscribe(res => {
+ if (res) {
+ this.service.msgSrv.success('删除菜单成功');
+ }
+ });
+ }
+ });
+ }
+ // 保险配置
+ changeOrder() {
+ this.router.navigate(['/insurance-management/list-set', 1]);
+ }
+ exprot() {
+ this.service.downloadFile(this.service.$api_get_asyncExport, { ...this.reqParams, pageSize: -1 });
+ }
+}
diff --git a/src/app/routes/insurance-management/components/set/set.component.html b/src/app/routes/insurance-management/components/set/set.component.html
new file mode 100644
index 00000000..e803c987
--- /dev/null
+++ b/src/app/routes/insurance-management/components/set/set.component.html
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/app/routes/insurance-management/components/set/set.component.less b/src/app/routes/insurance-management/components/set/set.component.less
new file mode 100644
index 00000000..1d17aeb7
--- /dev/null
+++ b/src/app/routes/insurance-management/components/set/set.component.less
@@ -0,0 +1,94 @@
+:host {
+ .btn-size {
+ font-size: 14px;
+ }
+
+ .bdr {
+ border-right: 1px solid #ccc;
+ }
+
+ .bdl {
+ border-left: 1px solid #ccc;
+ }
+
+ .source-info {
+ p {
+ margin-bottom: .5em;
+ }
+ }
+
+ .freight-info-box {
+ width: 95%;
+ }
+
+ .freigth-label {
+ display : inline-block;
+ width : 50px;
+ text-align: right;
+ }
+
+ ::ng-deep {
+ .approval-status {
+ .ant-steps {
+ width : 70%;
+ margin: 0 auto;
+ }
+ }
+
+ // .ant-tabs-top>.ant-tabs-nav,
+ // .ant-tabs-bottom>.ant-tabs-nav,
+ // .ant-tabs-top>div>.ant-tabs-nav,
+ // .ant-tabs-bottom>div>.ant-tabs-nav {
+ // margin: 0;
+ // }
+
+ // .ant-anchor-ink::before {
+ // width: 0;
+ // }
+
+ // .ant-tabs-card.ant-tabs-top>.ant-tabs-nav .ant-tabs-tab+.ant-tabs-tab,
+ // .ant-tabs-card.ant-tabs-bottom>.ant-tabs-nav .ant-tabs-tab+.ant-tabs-tab,
+ // .ant-tabs-card.ant-tabs-top>div>.ant-tabs-nav .ant-tabs-tab+.ant-tabs-tab,
+ // .ant-tabs-card.ant-tabs-bottom>div>.ant-tabs-nav .ant-tabs-tab+.ant-tabs-tab {
+ // margin-left: 40px
+ // }
+ }
+
+ .leftPadding {
+ padding-right: 100px;
+ }
+ .handling-info {
+ min-height: 100px;
+ border: 1px solid #ccc;
+
+ .loading-row {
+ display: flex;
+ }
+
+ .handling-info-icon {
+ width: 32px;
+ height: 32px;
+ margin-right: 24px;
+ color: #fff;
+ line-height: 32px;
+ text-align: center;
+ border-radius: 50%;
+
+ &.loading-bg {
+ background-color: #50D4AB;
+ }
+
+ &.unloaing-bg {
+ background: #F66F6A;
+ }
+ }
+
+ .info {
+ flex: 1;
+ }
+
+ .time-info {
+ margin-left: 56px;
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/app/routes/insurance-management/components/set/set.component.spec.ts b/src/app/routes/insurance-management/components/set/set.component.spec.ts
new file mode 100644
index 00000000..42437440
--- /dev/null
+++ b/src/app/routes/insurance-management/components/set/set.component.spec.ts
@@ -0,0 +1,24 @@
+import { waitForAsync, ComponentFixture, TestBed } from '@angular/core/testing';
+import { insuranceManagementSetComponent } from './set.component';
+
+describe('insuranceManagementSetComponent', () => {
+ let component: insuranceManagementSetComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(waitForAsync(() => {
+ TestBed.configureTestingModule({
+ declarations: [ insuranceManagementSetComponent ]
+ })
+ .compileComponents();
+ }));
+
+ beforeEach(() => {
+ fixture = TestBed.createComponent(insuranceManagementSetComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/src/app/routes/insurance-management/components/set/set.component.ts b/src/app/routes/insurance-management/components/set/set.component.ts
new file mode 100644
index 00000000..7e1055a0
--- /dev/null
+++ b/src/app/routes/insurance-management/components/set/set.component.ts
@@ -0,0 +1,45 @@
+/*
+ * @Description :
+ * @Version : 1.0
+ * @Author : Shiming
+ * @Date : 2021-12-06 20:20:26
+ * @LastEditors : Shiming
+ * @LastEditTime : 2022-01-25 20:43:37
+ * @FilePath : \\tms-obc-web\\src\\app\\routes\\insurance-management\\components\\set\\set.component.ts
+ * Copyright (C) 2022 huzhenhong. All rights reserved.
+ */
+import { Router } from '@angular/router';
+import { Component, OnInit } from '@angular/core';
+import { ActivatedRoute } from '@angular/router';
+import { STColumn } from '@delon/abc/st';
+import { _HttpClient } from '@delon/theme';
+import { NzMessageService } from 'ng-zorro-antd/message';
+import { NzModalService } from 'ng-zorro-antd/modal';
+import { InsuranceManagementService } from '../../services/insurance-management.service';
+import { NzCardComponent } from 'ng-zorro-antd/card';
+@Component({
+ selector: 'app-insurance-management-set',
+ templateUrl: './set.component.html',
+ styleUrls: ['./set.component.less']
+})
+export class insuranceManagementSetComponent implements OnInit {
+
+ constructor(
+ private route: ActivatedRoute,
+ private msgSrv: NzMessageService,
+ private service: InsuranceManagementService,
+ ) {
+
+ }
+
+ ngOnInit(): void {
+ this.initData()
+ }
+ initData() {
+
+ }
+ goBack() {
+ window.history.go(-1);
+ }
+
+}
diff --git a/src/app/routes/insurance-management/insurance-management-routing.module.ts b/src/app/routes/insurance-management/insurance-management-routing.module.ts
new file mode 100644
index 00000000..845a621d
--- /dev/null
+++ b/src/app/routes/insurance-management/insurance-management-routing.module.ts
@@ -0,0 +1,25 @@
+/*
+ * @Description :
+ * @Version : 1.0
+ * @Author : Shiming
+ * @Date : 2022-01-06 09:24:00
+ * @LastEditors : Shiming
+ * @LastEditTime : 2022-01-25 17:21:54
+ * @FilePath : \\tms-obc-web\\src\\app\\routes\\insurance-management\\insurance-management-routing.module.ts
+ * Copyright (C) 2022 huzhenhong. All rights reserved.
+ */
+import { NgModule } from '@angular/core';
+import { RouterModule, Routes } from '@angular/router';
+import { insuranceManagementListComponent } from './components/list/list.component';
+import { insuranceManagementSetComponent } from './components/set/set.component';
+
+
+const routes: Routes = [
+ { path: 'list', component: insuranceManagementListComponent },
+ { path: 'list-set/:id', component: insuranceManagementSetComponent },
+]
+@NgModule({
+ imports: [RouterModule.forChild(routes)],
+ exports: [RouterModule]
+})
+export class InsuranceManagementRoutingModule { }
diff --git a/src/app/routes/insurance-management/insurance-management.module.ts b/src/app/routes/insurance-management/insurance-management.module.ts
new file mode 100644
index 00000000..00103336
--- /dev/null
+++ b/src/app/routes/insurance-management/insurance-management.module.ts
@@ -0,0 +1,23 @@
+/*
+ * @Description :
+ * @Version : 1.0
+ * @Author : Shiming
+ * @Date : 2022-01-06 09:24:00
+ * @LastEditors : Shiming
+ * @LastEditTime : 2022-01-25 20:45:45
+ * @FilePath : \\tms-obc-web\\src\\app\\routes\\insurance-management\\insurance-management.module.ts
+ * Copyright (C) 2022 huzhenhong. All rights reserved.
+ */
+
+import { NgModule, Type } from '@angular/core';
+import { InsuranceTableModule, SharedModule } from '@shared';
+import { insuranceManagementListComponent } from './components/list/list.component';
+import { insuranceManagementSetComponent } from './components/set/set.component';
+import { InsuranceManagementRoutingModule } from './insurance-management-routing.module';
+const COMPONENTS: Type[] = [insuranceManagementListComponent, insuranceManagementSetComponent];
+
+@NgModule({
+ imports: [SharedModule, InsuranceManagementRoutingModule, InsuranceTableModule],
+ declarations: COMPONENTS
+})
+export class InsuranceManagementModule {}
diff --git a/src/app/routes/insurance-management/services/insurance-management.service.ts b/src/app/routes/insurance-management/services/insurance-management.service.ts
new file mode 100644
index 00000000..cd35b120
--- /dev/null
+++ b/src/app/routes/insurance-management/services/insurance-management.service.ts
@@ -0,0 +1,72 @@
+/*
+ * @Description :
+ * @Version : 1.0
+ * @Author : Shiming
+ * @Date : 2021-12-03 15:31:52
+ * @LastEditors : Shiming
+ * @LastEditTime : 2022-04-14 11:43:13
+ * @FilePath : \\tms-obc-web\\src\\app\\routes\\insurance-management\\services\\insurance-management.service.ts
+ * Copyright (C) 2022 huzhenhong. All rights reserved.
+ */
+
+import { Injectable, Injector } from '@angular/core';
+import { EACacheService, ShipperBaseService } from '@shared';
+import { map } from 'rxjs/operators';
+
+@Injectable({
+ providedIn: 'root'
+})
+export class InsuranceManagementService extends ShipperBaseService {
+ // 获取货主企业列表
+ public $api_enterpriceList = '/api/mdc/cuc/enterpriseInfo/operate/enterpriceList';
+ // 查询保险费信息表
+ public $api_premiumInfo_list = '/api/sdc/premiumInfo/list/page';
+ // 统计保险单状态数量
+ public $api_listStatisticalStatus = '/api/sdc/premiumInfo/listStatisticalStatus';
+
+ // 保险费公司认证
+ $api_get_submitAuthInfo = `/api/sdc/premiumInfo/submitAuthInfo`;
+ // 退保费
+ $api_get_addINPBillRefundApplication = `/billRefundApplication/addINPBillRefundApplication`;
+ // 保险费列表数据导出接口
+ $api_get_asyncExport = `/api/sdc/premiumInfo/asyncExport`;
+
+ public reviewPDF(url: string) {
+ if (!url) {
+ return;
+ }
+ this.openURL(url);
+ // const uA = window.navigator.userAgent; // 判断浏览器内核
+ // const isIE =
+ // /msie\s|trident\/|edge\//i.test(uA) &&
+ // !!('uniqueID' in document || 'documentMode' in document || 'ActiveXObject' in window || 'MSInputMethodContext' in window);
+ // const objectUrl = url;
+ // const a = document.createElement('a');
+ // document.body.appendChild(a);
+ // console.log('5555');
+
+ // a.href = objectUrl;
+ // a.download = '保单.pdf';
+ // if (isIE) {
+ // // 兼容IE11无法触发下载的问题
+ // (navigator as any).msSaveBlob(url, a.download);
+ // } else {
+ // a.click();
+ // }
+ // a.remove();
+ }
+ getReceiptUrl(url: string, params: any) {
+ const { bankType, snglFlgCd } = params;
+ if (url) {
+ if (params?.bankType === '1') {
+ window.open(params?.receiptUrl);
+ } else if (params?.bankType === '2') {
+ window.open(url);
+ // this.exportFile({ bankType, receiptUrl: url, bankSerialNumber: snglFlgCd }, this.$api_download_receipt_apply_byte);
+ }
+ }
+ }
+ constructor(public injector: Injector) {
+ super(injector);
+ }
+}
diff --git a/src/app/routes/logs/components/system-logs/system-logs.component.html b/src/app/routes/logs/components/system-logs/system-logs.component.html
new file mode 100644
index 00000000..ebbf215b
--- /dev/null
+++ b/src/app/routes/logs/components/system-logs/system-logs.component.html
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/app/routes/logs/components/system-logs/system-logs.component.ts b/src/app/routes/logs/components/system-logs/system-logs.component.ts
new file mode 100644
index 00000000..90caac95
--- /dev/null
+++ b/src/app/routes/logs/components/system-logs/system-logs.component.ts
@@ -0,0 +1,112 @@
+import { Component, OnInit, ViewChild } from '@angular/core';
+import { STComponent, STColumn, STChange, STRequestOptions } from '@delon/abc/st';
+import { SFComponent, SFDateWidgetSchema, SFSchema, SFUISchema } from '@delon/form';
+import { dateTimePickerUtil } from '@delon/util';
+import { NzModalService } from 'ng-zorro-antd/modal';
+import { LogsService } from '../../services/logs.service';
+
+@Component({
+ selector: 'app-system-logs',
+ templateUrl: './system-logs.component.html',
+ styleUrls: ['../../../commom/less/box.less', '../../../commom/less/expend-but.less']
+})
+export class SystemLogsComponent implements OnInit {
+ @ViewChild('st', { static: true })
+ st!: STComponent;
+ @ViewChild('sf', { static: false })
+ sf!: SFComponent;
+
+ searchSchema: SFSchema = {
+ properties: {
+ expand: {
+ type: 'boolean',
+ ui: {
+ hidden: true
+ }
+ },
+ operator: {
+ type: 'string',
+ title: '操作人',
+ ui: { placeholder: '请输入' }
+ },
+ telephone: {
+ type: 'string',
+ title: '手机号码',
+ ui: { placeholder: '请输入' }
+ },
+ operatePage: {
+ type: 'string',
+ title: '操作页面',
+ ui: {
+ placeholder: '请输入'
+ }
+ },
+ operationContent: {
+ type: 'string',
+ title: '操作内容',
+ ui: {
+ placeholder: '请输入',
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ }
+ },
+ time: {
+ title: '操作时间',
+ type: 'string',
+ ui: {
+ widget: 'sl-from-to-search',
+ format: 'yyyy-MM-dd HH:mm:ss',
+ nzShowTime: true,
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ } as SFDateWidgetSchema
+ }
+ }
+ };
+
+ columns: STColumn[] = [
+ { title: '操作时间', index: 'operatorTimestamp' },
+ { title: '操作人', index: 'operator' },
+ { title: '操作人手机号码', index: 'telephone' },
+ { title: '操作页面', index: 'operatePage' },
+ { title: '操作内容', index: 'operationContent' }
+ ];
+
+ _$expand = false;
+
+ constructor(public service: LogsService) {}
+
+ ngOnInit(): void {
+ }
+
+ beforeReq = (requestOptions: STRequestOptions) => {
+ requestOptions.body.operateType = '1';
+ if (this.sf) {
+ Object.assign(requestOptions.body, {
+ ...this.sf.value,
+ operateType: '1',
+ endTime: this.sf.value.time?.[1] || null,
+ startTime: this.sf.value.time?.[0] || null
+ });
+ }
+ return requestOptions;
+ };
+
+ /**
+ * 重置表单
+ */
+ resetSF() {
+ this.sf.reset();
+ this._$expand = false;
+ }
+
+ /**
+ * 伸缩查询条件
+ */
+ expandToggle() {
+ this._$expand = !this._$expand;
+ this.sf?.setValue('/expand', this._$expand);
+ }
+}
diff --git a/src/app/routes/logs/components/system-supply-logs/system-supply-logs.component.html b/src/app/routes/logs/components/system-supply-logs/system-supply-logs.component.html
new file mode 100644
index 00000000..a1b61545
--- /dev/null
+++ b/src/app/routes/logs/components/system-supply-logs/system-supply-logs.component.html
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/app/routes/logs/components/system-supply-logs/system-supply-logs.component.ts b/src/app/routes/logs/components/system-supply-logs/system-supply-logs.component.ts
new file mode 100644
index 00000000..53edd71b
--- /dev/null
+++ b/src/app/routes/logs/components/system-supply-logs/system-supply-logs.component.ts
@@ -0,0 +1,91 @@
+/*
+ * @Author: your name
+ * @Date: 2022-01-04 14:42:30
+ * @LastEditTime: 2022-01-04 16:04:46
+ * @LastEditors: Please set LastEditors
+ * @Description: 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
+ * @FilePath: \tms-obc-web\src\app\routes\sys-setting\components\system-supply-logs\system-supply-logs.component.ts
+ */
+import { Component, OnInit, ViewChild } from '@angular/core';
+import { STComponent, STColumn, STChange, STRequestOptions } from '@delon/abc/st';
+import { SFComponent, SFDateWidgetSchema, SFSchema, SFUISchema } from '@delon/form';
+import { dateTimePickerUtil } from '@delon/util';
+import { NzModalService } from 'ng-zorro-antd/modal';
+import { LogsService } from '../../services/logs.service';
+
+@Component({
+ selector: 'app-system-logs',
+ templateUrl: './system-supply-logs.component.html',
+ styleUrls: ['../../../commom/less/box.less', '../../../commom/less/expend-but.less']
+})
+export class SystemSupplyLogsComponent implements OnInit {
+ @ViewChild('st', { static: true })
+ st!: STComponent;
+ @ViewChild('sf', { static: false })
+ sf!: SFComponent;
+
+ searchSchema: SFSchema = {
+ properties: {
+ operateObject: {
+ type: 'string',
+ title: '货源编码',
+ ui: {
+ placeholder: '请输入',
+ }
+ },
+ time: {
+ title: '操作时间',
+ type: 'string',
+ ui: {
+ widget: 'sl-from-to-search',
+ format: 'yyyy-MM-dd HH:mm:ss',
+ nzShowTime: true,
+ } as SFDateWidgetSchema
+ }
+ }
+ };
+
+ columns: STColumn[] = [
+
+ { title: 'ID', index: 'id' },
+ { title: '货源编码', index: 'operateObject' },
+ { title: '说明', index: 'operationContent' },
+ { title: '操作人', index: 'operator' },
+ { title: '操作时间', index: 'operatorTimestamp', type: 'date' },
+ ];
+
+ _$expand = false;
+
+ constructor(public service: LogsService, private nzModalService: NzModalService) {}
+
+ ngOnInit(): void {}
+
+ beforeReq = (requestOptions: STRequestOptions) => {
+ requestOptions.body.operateType = '4'
+ if (this.sf) {
+ Object.assign(requestOptions.body, {
+ ...this.sf.value,
+ operateType: '4',
+ endTime: this.sf.value.time?.[1] || null,
+ startTime: this.sf.value.time?.[0] || null
+ });
+ }
+ return requestOptions;
+ };
+
+ /**
+ * 重置表单
+ */
+ resetSF() {
+ this.sf.reset();
+ this._$expand = false;
+ }
+
+ /**
+ * 伸缩查询条件
+ */
+ expandToggle() {
+ this._$expand = !this._$expand;
+ this.sf?.setValue('/expand', this._$expand);
+ }
+}
diff --git a/src/app/routes/logs/components/system-waybill-logs/system-waybill-logs.component.html b/src/app/routes/logs/components/system-waybill-logs/system-waybill-logs.component.html
new file mode 100644
index 00000000..c51c7fa9
--- /dev/null
+++ b/src/app/routes/logs/components/system-waybill-logs/system-waybill-logs.component.html
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/src/app/routes/logs/components/system-waybill-logs/system-waybill-logs.component.ts b/src/app/routes/logs/components/system-waybill-logs/system-waybill-logs.component.ts
new file mode 100644
index 00000000..f394883f
--- /dev/null
+++ b/src/app/routes/logs/components/system-waybill-logs/system-waybill-logs.component.ts
@@ -0,0 +1,90 @@
+/*
+ * @Author: your name
+ * @Date: 2022-01-04 14:44:59
+ * @LastEditTime: 2022-01-04 16:05:27
+ * @LastEditors: Please set LastEditors
+ * @Description: 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
+ * @FilePath: \tms-obc-web\src\app\routes\sys-setting\components\system-waybill-logs\system-waybill-logs.component.ts
+ */
+import { Component, OnInit, ViewChild } from '@angular/core';
+import { STComponent, STColumn, STChange, STRequestOptions } from '@delon/abc/st';
+import { SFComponent, SFDateWidgetSchema, SFSchema, SFUISchema } from '@delon/form';
+import { dateTimePickerUtil } from '@delon/util';
+import { NzModalService } from 'ng-zorro-antd/modal';
+import { LogsService } from '../../services/logs.service';
+
+@Component({
+ selector: 'app-system-logs',
+ templateUrl: './system-waybill-logs.component.html',
+ styleUrls: ['../../../commom/less/box.less', '../../../commom/less/expend-but.less']
+})
+export class SystemWaybillLogsComponent implements OnInit {
+ @ViewChild('st', { static: true })
+ st!: STComponent;
+ @ViewChild('sf', { static: false })
+ sf!: SFComponent;
+
+ searchSchema: SFSchema = {
+ properties: {
+ operateObject: {
+ type: 'string',
+ title: '订单号',
+ ui: {
+ placeholder: '请输入',
+ }
+ },
+ time: {
+ title: '登录时间',
+ type: 'string',
+ ui: {
+ widget: 'sl-from-to-search',
+ format: 'yyyy-MM-dd HH:mm:ss',
+ nzShowTime: true,
+ } as SFDateWidgetSchema
+ }
+ }
+ };
+
+ columns: STColumn[] = [
+ { title: 'ID', index: 'id' },
+ { title: '订单号', index: 'operateObject' },
+ { title: '说明', index: 'operationContent' },
+ { title: '操作人', index: 'operator' },
+ { title: '操作时间', index: 'operatorTimestamp', type: 'date' },
+ ];
+
+ _$expand = false;
+
+ constructor(public service: LogsService, private nzModalService: NzModalService) {}
+
+ ngOnInit(): void {}
+
+ beforeReq = (requestOptions: STRequestOptions) => {
+ requestOptions.body.operateType = '3'
+ if (this.sf) {
+ Object.assign(requestOptions.body, {
+ ...this.sf.value,
+ operateType: '3',
+ endTime: this.sf.value.time?.[1] || null,
+ startTime: this.sf.value.time?.[0] || null
+ });
+ }
+ return requestOptions;
+ };
+
+ /**
+ * 重置表单
+ */
+ resetSF() {
+ this.sf.reset();
+ this._$expand = false;
+ }
+
+ /**
+ * 伸缩查询条件
+ */
+ expandToggle() {
+ this._$expand = !this._$expand;
+ this.sf?.setValue('/expand', this._$expand);
+ }
+}
diff --git a/src/app/routes/logs/components/user-logs/user-logs.component.html b/src/app/routes/logs/components/user-logs/user-logs.component.html
new file mode 100644
index 00000000..ea2aff40
--- /dev/null
+++ b/src/app/routes/logs/components/user-logs/user-logs.component.html
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/app/routes/logs/components/user-logs/user-logs.component.ts b/src/app/routes/logs/components/user-logs/user-logs.component.ts
new file mode 100644
index 00000000..70bf123f
--- /dev/null
+++ b/src/app/routes/logs/components/user-logs/user-logs.component.ts
@@ -0,0 +1,123 @@
+import { Component, OnInit, ViewChild } from '@angular/core';
+import { STComponent, STColumn, STChange, STRequestOptions } from '@delon/abc/st';
+import { SFComponent, SFDateWidgetSchema, SFSchema } from '@delon/form';
+import { LogsService } from '../../services/logs.service';
+
+@Component({
+ selector: 'app-user-logs',
+ templateUrl: './user-logs.component.html',
+ styleUrls: ['../../../commom/less/box.less', '../../../commom/less/expend-but.less']
+})
+export class UserLogsComponent implements OnInit {
+ @ViewChild('st', { static: true })
+ st!: STComponent;
+ @ViewChild('sf', { static: false })
+ sf!: SFComponent;
+
+ searchSchema: SFSchema = {
+ properties: {
+ expand: {
+ type: 'boolean',
+ ui: {
+ hidden: true
+ }
+ },
+ roleName: {
+ type: 'string',
+ title: '登录端口',
+ ui: { placeholder: '请输入' }
+ },
+ loginType: {
+ type: 'string',
+ title: '登录方式',
+ enum: [
+ { label: '全部', value: null },
+ { label: 'PC', value: '1' },
+ { label: 'APP', value: '2' },
+ { label: '小程序', value: '3' }
+ ],
+ ui: {
+ widget: 'select',
+ placeholder: '请选择'
+ },
+ default: null
+ },
+ address: {
+ type: 'string',
+ title: '位置',
+ ui: {
+ placeholder: '请输入'
+ }
+ },
+ terminalIp: {
+ type: 'string',
+ title: 'ip',
+ ui: {
+ placeholder: '请输入',
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ }
+ },
+ time: {
+ title: '登录时间',
+ type: 'string',
+ ui: {
+ widget: 'sl-from-to-search',
+ format: 'yyyy-MM-dd HH:mm:ss',
+ placeholder: '请选择',
+ nzShowTime: true,
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ } as SFDateWidgetSchema
+ }
+ }
+ };
+
+ columns: STColumn[] = [
+ { title: '登录时间', index: 'createTime', type: 'date' },
+ { title: '登录端口', index: 'roleName' },
+ { title: '姓名', index: 'userName' },
+ { title: '登录方式', index: 'loginType', enum: { '1': 'PC', '2': 'APP', '3': '小程序' }, type: 'enum' },
+ { title: '位置', index: 'address' },
+ { title: 'ip', index: 'terminalIp' }
+ ];
+
+ _$expand = false;
+
+ constructor(public service: LogsService) {}
+
+ ngOnInit(): void {}
+
+ beforeReq = (requestOptions: STRequestOptions) => {
+ if (this.sf) {
+ Object.assign(requestOptions.body, {
+ ...this.sf.value,
+ time: {
+ start: this.sf.value.time?.[0] || null,
+ end: this.sf.value.time?.[1] || null
+ }
+ });
+ }
+ return requestOptions;
+ };
+
+ roleAction(item?: any) {}
+
+ /**
+ * 重置表单
+ */
+ resetSF() {
+ this.sf.reset();
+ this._$expand = false;
+ }
+
+ /**
+ * 伸缩查询条件
+ */
+ expandToggle() {
+ this._$expand = !this._$expand;
+ this.sf?.setValue('/expand', this._$expand);
+ }
+}
diff --git a/src/app/routes/logs/components/version-logs/version-logs.component.html b/src/app/routes/logs/components/version-logs/version-logs.component.html
new file mode 100644
index 00000000..3eff1b25
--- /dev/null
+++ b/src/app/routes/logs/components/version-logs/version-logs.component.html
@@ -0,0 +1,40 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/app/routes/logs/components/version-logs/version-logs.component.ts b/src/app/routes/logs/components/version-logs/version-logs.component.ts
new file mode 100644
index 00000000..d53bad68
--- /dev/null
+++ b/src/app/routes/logs/components/version-logs/version-logs.component.ts
@@ -0,0 +1,124 @@
+import { Component, OnInit, ViewChild } from '@angular/core';
+import { STComponent, STColumn, STChange, STRequestOptions } from '@delon/abc/st';
+import { SFComponent, SFDateWidgetSchema, SFSchema } from '@delon/form';
+import { dateTimePickerUtil } from '@delon/util';
+import { NzModalService } from 'ng-zorro-antd/modal';
+import { LogsService } from '../../services/logs.service';
+
+@Component({
+ selector: 'app-version-logs',
+ templateUrl: './version-logs.component.html',
+ styleUrls: ['../../../commom/less/box.less', '../../../commom/less/expend-but.less']
+})
+export class VersionLogsComponent implements OnInit {
+ @ViewChild('st', { static: true })
+ st!: STComponent;
+ @ViewChild('sf', { static: false })
+ sf!: SFComponent;
+
+ searchSchema: SFSchema = {
+ properties: {
+ expand: {
+ type: 'boolean',
+ ui: {
+ hidden: true
+ }
+ },
+ publishPort: {
+ type: 'string',
+ title: '端口',
+ enum: [
+ { label: '全部', value: null },
+ { label: '司机', value: '1' },
+ { label: '货主', value: '2' },
+ { label: '运营平台', value: '3' }
+ ],
+ ui: {
+ widget: 'select',
+ placeholder: '请选择'
+ },
+ default: null
+ },
+ publishType: {
+ type: 'string',
+ title: '端口方式',
+ enum: [
+ { label: '全部', value: null },
+ { label: 'PC ', value: '1' },
+ { label: 'APP', value: '2' },
+ { label: '小程序', value: '3' }
+ ],
+ ui: {
+ widget: 'select',
+ placeholder: '请选择'
+ },
+ default: null
+ },
+ publishVersion: {
+ type: 'string',
+ title: '版本号',
+ ui: {
+ placeholder: '请输入'
+ }
+ },
+ time: {
+ title: '发布时间',
+ type: 'string',
+ ui: {
+ widget: 'sl-from-to-search',
+ format: 'yyyy-MM-dd',
+ visibleIf: {
+ expand: (value: boolean) => value
+ }
+ } as SFDateWidgetSchema
+ }
+ }
+ };
+
+ columns: STColumn[] = [
+ { title: '端口', index: 'publishPort', type: 'enum', enum: { 1: '司机', 2: '货主', 3: '运营平台' } },
+ { title: '端口方式', index: 'publishType', type: 'enum', enum: { 1: 'PC', 2: 'APP', 3: '小程序' } },
+ { title: '版本号', index: 'publishVersion' },
+ {
+ title: '发布时间',
+ index: 'createTime',
+ type: 'date'
+ },
+ { title: '更新内容', index: 'publicshContext' }
+ ];
+
+ _$expand = false;
+
+ constructor(public service: LogsService, private nzModalService: NzModalService) {}
+
+ beforeReq = (requestOptions: STRequestOptions) => {
+ if (this.sf) {
+ Object.assign(requestOptions.body, {
+ ...this.sf.value,
+ publishTime: {
+ start: this.sf.value.time?.[0] || null,
+ end: this.sf.value.time?.[1] || null
+ }
+ });
+ }
+ return requestOptions;
+ };
+
+ ngOnInit(): void {}
+
+ /**
+ * 重置表单
+ */
+ resetSF() {
+ this.sf.reset();
+ this._$expand = false;
+ }
+
+ /**
+ * 伸缩查询条件
+ */
+ expandToggle() {
+ this._$expand = !this._$expand;
+ this.sf?.setValue('/expand', this._$expand);
+ }
+}
diff --git a/src/app/routes/logs/logs-routing.module.ts b/src/app/routes/logs/logs-routing.module.ts
new file mode 100644
index 00000000..40e2ccb5
--- /dev/null
+++ b/src/app/routes/logs/logs-routing.module.ts
@@ -0,0 +1,21 @@
+import { NgModule } from '@angular/core';
+import { RouterModule, Routes } from '@angular/router';
+import { SystemLogsComponent } from './components/system-logs/system-logs.component';
+import { SystemSupplyLogsComponent } from './components/system-supply-logs/system-supply-logs.component';
+import { SystemWaybillLogsComponent } from './components/system-waybill-logs/system-waybill-logs.component';
+import { UserLogsComponent } from './components/user-logs/user-logs.component';
+import { VersionLogsComponent } from './components/version-logs/version-logs.component';
+
+const routes: Routes = [
+ { path: 'system-logs', component: SystemLogsComponent },
+ { path: 'user-logs', component: UserLogsComponent },
+ { path: 'version-logs', component: VersionLogsComponent },
+ { path: 'system-supply-logs', component: SystemSupplyLogsComponent },
+ { path: 'system-waybill-logs', component: SystemWaybillLogsComponent }
+];
+
+@NgModule({
+ imports: [RouterModule.forChild(routes)],
+ exports: [RouterModule]
+})
+export class LogsRoutingModule {}
diff --git a/src/app/routes/logs/logs.module.ts b/src/app/routes/logs/logs.module.ts
new file mode 100644
index 00000000..6454841b
--- /dev/null
+++ b/src/app/routes/logs/logs.module.ts
@@ -0,0 +1,16 @@
+import { NgModule } from '@angular/core';
+import { CommonModule } from '@angular/common';
+import { SharedModule } from '@shared';
+import { LogsRoutingModule } from './logs-routing.module';
+import { SystemLogsComponent } from './components/system-logs/system-logs.component';
+import { SystemSupplyLogsComponent } from './components/system-supply-logs/system-supply-logs.component';
+import { SystemWaybillLogsComponent } from './components/system-waybill-logs/system-waybill-logs.component';
+import { UserLogsComponent } from './components/user-logs/user-logs.component';
+import { VersionLogsComponent } from './components/version-logs/version-logs.component';
+
+const COMPONENTS = [SystemLogsComponent, UserLogsComponent, VersionLogsComponent, SystemSupplyLogsComponent, SystemWaybillLogsComponent];
+@NgModule({
+ declarations: [...COMPONENTS],
+ imports: [CommonModule, LogsRoutingModule, SharedModule]
+})
+export class LogsModule {}
diff --git a/src/app/routes/logs/services/logs.service.ts b/src/app/routes/logs/services/logs.service.ts
new file mode 100644
index 00000000..1c0a9489
--- /dev/null
+++ b/src/app/routes/logs/services/logs.service.ts
@@ -0,0 +1,19 @@
+import { Injectable, Injector } from '@angular/core';
+import { Menu } from '@delon/theme';
+import { BaseService } from '@shared';
+
+@Injectable({
+ providedIn: 'root'
+})
+export class LogsService extends BaseService {
+ // 查询用户登录记录表
+ public $api_user_login_logs = '/api/mdc/userLoginLog/list/page';
+ // 获取操作日志列表
+ public $api_get_systemt_logs = '/api/mdc/pbc/operationLogRecords/getOperationLogRecordsList';
+ // 查询版本发布表
+ public $api_get_version_logs = '/api/mdc/versionPublish/list/page';
+
+ constructor(public injector: Injector) {
+ super(injector);
+ }
+}
diff --git a/src/app/routes/menu-manager/components/api-auth/api-auth.component.html b/src/app/routes/menu-manager/components/api-auth/api-auth.component.html
new file mode 100644
index 00000000..f1d7c7f0
--- /dev/null
+++ b/src/app/routes/menu-manager/components/api-auth/api-auth.component.html
@@ -0,0 +1,75 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ | 菜单名称 |
+ 菜单编号 |
+ 路由地址 |
+ 菜单图标 |
+ 菜单排序 |
+ 操作 |
+
+
+
+
+
+
+
+ |
+ {{ item.text }}
+ |
+ {{ item.keyCode }} |
+ {{ item.link }} |
+
+
+ |
+ {{ item.sorted }} |
+
+ 权限配置
+ |
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/app/routes/menu-manager/components/api-auth/api-auth.component.less b/src/app/routes/menu-manager/components/api-auth/api-auth.component.less
new file mode 100644
index 00000000..b83ce9ee
--- /dev/null
+++ b/src/app/routes/menu-manager/components/api-auth/api-auth.component.less
@@ -0,0 +1,17 @@
+:host {
+ ::ng-deep {
+ .pane-content-left {
+ padding-right: 12px;
+
+ nz-select {
+ width: 100%;
+ margin-bottom: 1rem;
+ border-bottom: 2px solid #15408e;
+ }
+ }
+ .pane-content-right {
+ padding-left: 12px;
+ }
+ }
+ }
+
\ No newline at end of file
diff --git a/src/app/routes/menu-manager/components/api-auth/api-auth.component.ts b/src/app/routes/menu-manager/components/api-auth/api-auth.component.ts
new file mode 100644
index 00000000..c61cab04
--- /dev/null
+++ b/src/app/routes/menu-manager/components/api-auth/api-auth.component.ts
@@ -0,0 +1,80 @@
+import { Component, OnInit, ViewChild } from '@angular/core';
+import { SFComponent, SFSchema } from '@delon/form';
+import { EAEnvironmentService } from '@shared';
+import { NzDrawerService } from 'ng-zorro-antd/drawer';
+import { NzModalService } from 'ng-zorro-antd/modal';
+import { MenuManagerService } from '../../services/menu-manager.service';
+import { MenuModalComponent } from '../index/menu-modal/menu-modal.component';
+import { AuthDrawerComponent } from './auth-drawer/auth-drawer.component';
+
+@Component({
+ selector: 'app-api-auth',
+ templateUrl: './api-auth.component.html',
+ styleUrls: ['./api-auth.component.less', '../../../commom/less/box.less']
+})
+export class ApiAuthComponent implements OnInit {
+ selectedPlatform!: { name: string; appId: string; enName: string };
+ platforms: Array = [
+ { name: '货主PC', appId: 'A48F72F0A304427F921794BAD86B3522', enName: 'tms-smc-web' },
+ { name: '运营后台', appId: this.envSrv.env.appId, enName: 'tms-obc-web' }
+ ];
+
+ @ViewChild('sf', { static: false })
+ sf!: SFComponent;
+
+ searchSchema: SFSchema = {
+ properties: {
+ roleName: {
+ type: 'string',
+ title: '菜单名称',
+ ui: { placeholder: '请输入' }
+ }
+ }
+ };
+
+ mapOfExpandedData: { [key: string]: any[] } = {};
+ listOfMapData: any[] = [];
+ constructor(private envSrv: EAEnvironmentService, public service: MenuManagerService, private drawer: NzDrawerService) {
+ this.initData();
+ }
+
+ ngOnInit(): void {}
+
+ initData(): void {
+ this.selectedPlatform = this.platforms[0];
+ this.loadMemu(this.selectedPlatform.appId);
+ }
+
+ loadMemu(appId: string) {
+ this.service.request(this.service.$api_get_all, { appId }, 'POST', false).subscribe(res => {
+ if (res) {
+ this.listOfMapData = res;
+ this.listOfMapData.forEach(item => {
+ this.mapOfExpandedData[item.key] = this.service.convertTreeToList(item);
+ });
+ // console.log(this.listOfMapData, this.mapOfExpandedData);
+ }
+ });
+ }
+
+ changeMemu(key: number) {
+ this.selectedPlatform = this.platforms[key];
+ this.loadMemu(this.selectedPlatform.appId);
+ }
+
+ openDrawer(item: any) {
+ this.drawer.create({
+ nzTitle: `接口权限配置(${item.text})`,
+ nzContent: AuthDrawerComponent,
+ nzWidth: 900,
+ nzContentParams: { id: item.id, appId: this.selectedPlatform.appId, code: item.keyCode }
+ });
+ }
+
+ /**
+ * 重置表单
+ */
+ resetSF() {
+ this.sf.reset();
+ }
+}
diff --git a/src/app/routes/menu-manager/components/api-auth/auth-drawer/auth-drawer.component.html b/src/app/routes/menu-manager/components/api-auth/auth-drawer/auth-drawer.component.html
new file mode 100644
index 00000000..935bee97
--- /dev/null
+++ b/src/app/routes/menu-manager/components/api-auth/auth-drawer/auth-drawer.component.html
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+
+
+
+ {{code}}-{{item.permissionsCode}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/app/routes/menu-manager/components/api-auth/auth-drawer/auth-drawer.component.less b/src/app/routes/menu-manager/components/api-auth/auth-drawer/auth-drawer.component.less
new file mode 100644
index 00000000..40e50505
--- /dev/null
+++ b/src/app/routes/menu-manager/components/api-auth/auth-drawer/auth-drawer.component.less
@@ -0,0 +1,6 @@
+:host:ng-deep {
+ st-td {
+ word-break: break-all;
+ word-wrap : break-word;
+ }
+}
\ No newline at end of file
diff --git a/src/app/routes/menu-manager/components/api-auth/auth-drawer/auth-drawer.component.ts b/src/app/routes/menu-manager/components/api-auth/auth-drawer/auth-drawer.component.ts
new file mode 100644
index 00000000..a2895ba9
--- /dev/null
+++ b/src/app/routes/menu-manager/components/api-auth/auth-drawer/auth-drawer.component.ts
@@ -0,0 +1,154 @@
+import { Component, OnInit, ViewChild } from '@angular/core';
+import { STComponent, STColumn, STRequestOptions } from '@delon/abc/st';
+import { SFComponent, SFSchema, SFDateWidgetSchema } from '@delon/form';
+import { NzModalService } from 'ng-zorro-antd/modal';
+import { MenuManagerService } from '../../../services/menu-manager.service';
+
+@Component({
+ selector: 'app-auth-drawer',
+ templateUrl: './auth-drawer.component.html',
+ styleUrls: ['./auth-drawer.component.less']
+})
+export class AuthDrawerComponent implements OnInit {
+ @ViewChild('st', { static: true })
+ st!: STComponent;
+ @ViewChild('sf', { static: false })
+ sf!: SFComponent;
+ @ViewChild('configTypeItemModal', { static: false })
+ configTypeItemModal!: any;
+ columns: STColumn[] = this.initST();
+ searchSchema: SFSchema = this.initSF();
+
+ id = null;
+ appId = '';
+ code = '';
+
+ functionInfo: any = {};
+ functions: any[] = [];
+ isDisabled = false;
+
+ constructor(public service: MenuManagerService, private modal: NzModalService) {}
+
+ ngOnInit(): void {
+ // this.loadFunctions();
+ }
+
+ beforeReq = (requestOptions: STRequestOptions) => {
+ Object.assign(requestOptions.body, { id: this.id });
+ if (this.sf) {
+ Object.assign(requestOptions.body, {
+ ...this.sf.value
+ });
+ }
+ return requestOptions;
+ };
+
+ loadFunctions() {
+ this.service.request(this.service.$api_get_functions, { appId: this.appId }, 'POST', false).subscribe(res => {
+ if (res) {
+ this.functions = res;
+ }
+ });
+ }
+
+ functionAction(item?: any, isDisabled = false) {
+ if (item) {
+ this.functionInfo = { ...item, id: item.functionButtonId };
+ } else {
+ this.functionInfo = {};
+ }
+ this.isDisabled = isDisabled;
+ const modal = this.modal.create({
+ nzTitle: item ? '编辑' : '新增',
+ nzContent: this.configTypeItemModal,
+ nzWidth: 800,
+ nzCancelText: '取消',
+ nzOkText: '保存',
+ nzOnOk: () => {
+ this.service.request(this.service.$api_save_menu_function, { ...this.functionInfo, functionId: this.id }).subscribe(res => {
+ if (res) {
+ this.service.msgSrv.success(item ? '编辑成功' : '新增成功');
+ this.st.load(1);
+ modal.destroy();
+ }
+ });
+ return false;
+ }
+ });
+ }
+
+ deleteAuth(item: any) {
+ const modal = this.modal.warning({
+ nzTitle: '是否确定删除该权限',
+ nzOnOk: () => {
+ this.service.request(this.service.$api_delete_menu_function, [item.functionButtonId]).subscribe(res => {
+ if (res) {
+ this.service.msgSrv.success('删除成功');
+ this.st.load(1);
+ modal.destroy();
+ } else {
+ this.service.msgSrv.error('删除失败');
+ }
+ });
+ return false;
+ }
+ });
+ }
+
+ /**
+ * 重置表单
+ */
+ resetSF() {
+ this.sf.reset();
+ }
+
+ private initSF(): SFSchema {
+ return {
+ properties: {
+ vc2code: {
+ type: 'string',
+ title: '权限名称',
+ ui: {
+ autocomplete: 'off',
+ placeholder: '请输入权限名称'
+ }
+ },
+ vc2c2ode: {
+ type: 'string',
+ title: '权限编号',
+ ui: {
+ autocomplete: 'off',
+ placeholder: '请输入权限编号'
+ }
+ }
+ }
+ };
+ }
+
+ private initST(): STColumn[] {
+ return [
+ { title: '权限名称', index: 'permissionsName', width: 120 },
+ { title: '权限编码', render: 'permissionsCode' },
+ { title: '权限路径', index: 'permissionsUrl', className: 'break-word-all', width: 200 },
+ {
+ title: '操作',
+ width: '150px',
+ className: 'text-center',
+ buttons: [
+ {
+ text: '查看',
+ click: item => this.functionAction(item, true)
+ },
+ {
+ text: '编辑',
+ click: item => this.functionAction(item)
+ },
+ {
+ text: '删除',
+ click: item => this.deleteAuth(item)
+ }
+ ]
+ }
+ ];
+ }
+}
diff --git a/src/app/routes/menu-manager/components/index/index.component.html b/src/app/routes/menu-manager/components/index/index.component.html
new file mode 100644
index 00000000..8b1acd73
--- /dev/null
+++ b/src/app/routes/menu-manager/components/index/index.component.html
@@ -0,0 +1,101 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ | 菜单名称 |
+ 菜单编号 |
+ 路由地址 |
+ 菜单图标 |
+ 菜单排序 |
+ 操作 |
+
+
+
+
+
+
+
+ |
+ {{ item.title }}
+ |
+ {{ item.keyCode }} |
+ {{ item.link }} |
+
+
+
+
+
+ |
+ {{ item.sorted }} |
+
+ 查看
+
+ 编辑
+
+ 删除
+
+
+ 新增子项
+
+ |
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/app/routes/menu-manager/components/index/index.component.less b/src/app/routes/menu-manager/components/index/index.component.less
new file mode 100644
index 00000000..c801e37d
--- /dev/null
+++ b/src/app/routes/menu-manager/components/index/index.component.less
@@ -0,0 +1,16 @@
+:host {
+ ::ng-deep {
+ .pane-content-left {
+ padding-right: 12px;
+
+ nz-select {
+ width: 100%;
+ margin-bottom: 1rem;
+ border-bottom: 2px solid #15408e;
+ }
+ }
+ .pane-content-right {
+ padding-left: 12px;
+ }
+ }
+}
diff --git a/src/app/routes/menu-manager/components/index/index.component.ts b/src/app/routes/menu-manager/components/index/index.component.ts
new file mode 100644
index 00000000..2f9b1306
--- /dev/null
+++ b/src/app/routes/menu-manager/components/index/index.component.ts
@@ -0,0 +1,140 @@
+import { Component, OnInit, ViewChild } from '@angular/core';
+import { STComponent, STColumn, STRequestOptions, STChange } from '@delon/abc/st';
+import { SFComponent, SFSchema } from '@delon/form';
+import { Menu, ModalHelper } from '@delon/theme';
+import { EAEnvironmentService } from '@shared';
+import { NzSafeAny } from 'ng-zorro-antd/core/types';
+import { NzModalService } from 'ng-zorro-antd/modal';
+import { SettingRoleEditComponent } from 'src/app/routes/sys-setting/components/role-management/edit/edit.component';
+import { MenuManagerMenusortComponent } from '../menusort/menusort.component';
+import { MenuManagerService } from './../../services/menu-manager.service';
+import { MenuModalComponent } from './menu-modal/menu-modal.component';
+
+@Component({
+ selector: 'app-menu-manager-components-index',
+ templateUrl: './index.component.html',
+ styleUrls: ['./index.component.less', '../../../commom/less/box.less']
+})
+export class MenuManagerComponentsIndexComponent implements OnInit {
+ selectedPlatform!: { name: string; appId: string; enName: string };
+ platforms: Array = [
+ { name: '货主PC', appId: 'A48F72F0A304427F921794BAD86B3522', enName: 'tms-smc-web' },
+ { name: '运营后台', appId: this.envSrv.env.appId, enName: 'tms-obc-web' }
+ ];
+
+ @ViewChild('sf', { static: false })
+ sf!: SFComponent;
+
+ searchSchema: SFSchema = {
+ properties: {
+ roleName: {
+ type: 'string',
+ title: '菜单名称',
+ ui: { placeholder: '请输入' }
+ }
+ }
+ };
+
+ mapOfExpandedData: { [key: string]: any[] } = {};
+ listOfMapData: any[] = [];
+ constructor(private envSrv: EAEnvironmentService, public service: MenuManagerService, private modal: NzModalService, private modalHelper: ModalHelper,) {
+ this.initData();
+ }
+
+ ngOnInit(): void {}
+
+ initData(): void {
+ this.selectedPlatform = this.platforms[0];
+ this.loadMemu(this.selectedPlatform.appId);
+ }
+
+ loadMemu(appId: string) {
+ this.service.request(this.service.$api_get_all, { appId }, 'POST', false).subscribe(res => {
+ if (res) {
+ this.listOfMapData = res;
+ this.listOfMapData.forEach(item => {
+ this.mapOfExpandedData[item.key] = this.service.convertTreeToList(item);
+ });
+ // console.log(this.listOfMapData, this.mapOfExpandedData);
+ }
+ });
+ }
+
+ changeMemu(key: number) {
+ this.selectedPlatform = this.platforms[key];
+ this.loadMemu(this.selectedPlatform.appId);
+ }
+
+ menuAction(nzTitle: string, item?: any, parentId?: string, isDisabled = false) {
+ const modal = this.modal.create({
+ nzTitle,
+ nzContent: MenuModalComponent,
+ nzWidth: 900,
+ nzComponentParams: item
+ ? { formData: { ...item }, isDisabled, params: { parentId, appId: this.selectedPlatform.appId } }
+ : { formData: { id: null }, params: { parentId, appId: this.selectedPlatform.appId } },
+ nzFooter: null
+ });
+ modal.afterClose.subscribe(res => {
+ if (res) {
+ this.loadMemu(this.selectedPlatform.appId);
+ }
+ });
+ }
+
+ deleteAction(item: any) {
+ this.modal.error({
+ nzTitle: '确认删除?',
+ nzClosable: false,
+ nzCancelText: '取消',
+ nzOnOk: () => {
+ this.service.request(this.service.$api_del_many, [item.id]).subscribe(res => {
+ if (res) {
+ this.service.msgSrv.success('删除菜单成功');
+ this.loadMemu(this.selectedPlatform.appId);
+ }
+ });
+ }
+ });
+ }
+
+ /**
+ * 重置表单
+ */
+ resetSF() {
+ this.sf.reset();
+ }
+
+ menuImport(index: number) {
+ if (this.listOfMapData?.length > 0) {
+ this.service.msgSrv.warning('请先清空菜单');
+ return;
+ }
+ if (!this.selectedPlatform) {
+ return;
+ }
+
+ this.service.menuImport(this.selectedPlatform.enName, this.selectedPlatform.appId);
+ }
+
+ delMenu(type: number) {
+ this.modal.confirm({
+ nzTitle: '删除确认',
+ nzContent: `是否确认删除?`,
+ nzOnOk: () => {
+ this.service.getMenuByAppID(type === 0 ? 'A48F72F0A304427F921794BAD86B3522' : this.envSrv.env.appId);
+ }
+ });
+ }
+ menuSort(){
+ const dialogData = {
+ appId: this.selectedPlatform.appId
+ };
+ this.modalHelper.create(MenuManagerMenusortComponent, { i: dialogData }, { size: 900 }).subscribe((res:any) => {
+ if(res) {
+ console.log('a')
+ this.loadMemu(this.selectedPlatform.appId);
+ }
+ });
+ }
+}
diff --git a/src/app/routes/menu-manager/components/index/menu-modal/menu-modal.component.html b/src/app/routes/menu-manager/components/index/menu-modal/menu-modal.component.html
new file mode 100644
index 00000000..31848fe4
--- /dev/null
+++ b/src/app/routes/menu-manager/components/index/menu-modal/menu-modal.component.html
@@ -0,0 +1,8 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/src/app/routes/menu-manager/components/index/menu-modal/menu-modal.component.less b/src/app/routes/menu-manager/components/index/menu-modal/menu-modal.component.less
new file mode 100644
index 00000000..e69de29b
diff --git a/src/app/routes/menu-manager/components/index/menu-modal/menu-modal.component.ts b/src/app/routes/menu-manager/components/index/menu-modal/menu-modal.component.ts
new file mode 100644
index 00000000..b55bde12
--- /dev/null
+++ b/src/app/routes/menu-manager/components/index/menu-modal/menu-modal.component.ts
@@ -0,0 +1,151 @@
+import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnInit, ViewChild, ViewEncapsulation } from '@angular/core';
+import { SFComponent, SFSchema, SFUISchema } from '@delon/form';
+import { NzModalRef, NzModalService } from 'ng-zorro-antd/modal';
+import { SettingMenuComponent } from 'src/app/routes/sys-setting/components/role-management/menu/menu.component';
+import { MenuManagerService } from '../../../services/menu-manager.service';
+
+@Component({
+ selector: 'app-menu-modal',
+ templateUrl: './menu-modal.component.html',
+ styleUrls: ['./menu-modal.component.less'],
+ changeDetection: ChangeDetectionStrategy.OnPush
+})
+export class MenuModalComponent implements OnInit {
+ @ViewChild('sf', { static: false })
+ sf!: SFComponent;
+ formData: any;
+ schema!: SFSchema;
+ ui!: SFUISchema;
+ isDisabled = false;
+
+ params = {};
+
+ constructor(public service: MenuManagerService, private modal: NzModalRef, private cdr: ChangeDetectorRef) {}
+
+ ngOnInit(): void {
+ if (this.formData.id) {
+ this.loadMenu();
+ } else {
+ this.initSF();
+ }
+ }
+
+ initSF(data?: any) {
+ this.schema = {
+ properties: {
+ title: {
+ title: '菜单名称',
+ type: 'string',
+ default: this.formData.text,
+ maxLength: 20,
+ ui: {
+ widget: this.isDisabled ? 'text' : 'string',
+ placeholder: '请输入菜单名称'
+ }
+ },
+ keyCode: {
+ title: '菜单编码',
+ type: 'string',
+ default: this.formData.keyCode,
+ ui: {
+ widget: this.isDisabled ? 'text' : 'string',
+ placeholder: '请输入菜单编码'
+ }
+ },
+ isLeaf: {
+ title: '是否叶子节点',
+ type: 'boolean',
+ default: this.formData.isLeaf || true,
+ enum: [true, false],
+ readOnly: this.isDisabled,
+ ui: {
+ widget: 'radio'
+ }
+ },
+ hide: {
+ title: '是否隐藏',
+ type: 'boolean',
+ default: this.formData.hide || false,
+ enum: [true, false],
+ readOnly: this.isDisabled,
+ ui: {
+ widget: 'radio'
+ }
+ },
+ link: {
+ title: '菜单路由',
+ type: 'string',
+ default: this.formData.link,
+ ui: {
+ widget: this.isDisabled ? 'text' : 'string',
+ placeholder: '请输入菜单路由'
+ }
+ },
+ icon: {
+ title: '菜单图标',
+ type: 'string',
+ default: this.formData.icon,
+ ui: {
+ widget: this.isDisabled ? 'text' : 'string',
+ placeholder: '请输入菜单图标'
+ }
+ },
+ sortId: {
+ title: '排序',
+ type: 'number',
+ default: this.formData.sortId,
+ ui: {
+ widget: this.isDisabled ? 'text' : 'number'
+ }
+ }
+ },
+ required: ['title']
+ };
+ this.ui = {
+ '*': {
+ spanLabelFixed: 120,
+ grid: { span: 12 }
+ }
+ };
+ this.cdr.detectChanges();
+ }
+
+ loadMenu() {
+ this.service.request(this.service.$api_get_menu_by_id, { id: this.formData.id }).subscribe(res => {
+ if (res) {
+ this.formData = res;
+ this.initSF(this.formData);
+ }
+ });
+ }
+
+ close() {
+ this.modal.destroy();
+ }
+
+ sure() {
+ if (!this.sf.valid) {
+ this.service.msgSrv.warning('表单验证错误');
+ return;
+ }
+ const params = {
+ ...this.sf.value,
+ ...this.params,
+ i18n: null,
+ // i18n: this.sf.value.keyCode,
+ menuType: 0,
+ reuse: 0,
+ shortcut: 0,
+ hideInBreadcrumb: 0,
+ functionType: 0,
+ sortId: this.sf.value.sortId?.toString() || null,
+ text: this.sf.value.title
+ };
+ this.service.request(this.service.$api_add_one, params).subscribe(res => {
+ if (res) {
+ this.service.msgSrv.success(this.formData.id ? '修改菜单成功' : '新增菜单成功');
+ this.modal.destroy(true);
+ }
+ });
+ }
+}
diff --git a/src/app/routes/menu-manager/components/menusort/menusort.component.html b/src/app/routes/menu-manager/components/menusort/menusort.component.html
new file mode 100644
index 00000000..35e4f397
--- /dev/null
+++ b/src/app/routes/menu-manager/components/menusort/menusort.component.html
@@ -0,0 +1,18 @@
+
+
+
+
+
+
diff --git a/src/app/routes/menu-manager/components/menusort/menusort.component.spec.ts b/src/app/routes/menu-manager/components/menusort/menusort.component.spec.ts
new file mode 100644
index 00000000..dd867bb3
--- /dev/null
+++ b/src/app/routes/menu-manager/components/menusort/menusort.component.spec.ts
@@ -0,0 +1,24 @@
+import { waitForAsync, ComponentFixture, TestBed } from '@angular/core/testing';
+import { MenuManagerMenusortComponent } from './menusort.component';
+
+describe('MenuManagerMenusortComponent', () => {
+ let component: MenuManagerMenusortComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(waitForAsync(() => {
+ TestBed.configureTestingModule({
+ declarations: [ MenuManagerMenusortComponent ]
+ })
+ .compileComponents();
+ }));
+
+ beforeEach(() => {
+ fixture = TestBed.createComponent(MenuManagerMenusortComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/src/app/routes/menu-manager/components/menusort/menusort.component.ts b/src/app/routes/menu-manager/components/menusort/menusort.component.ts
new file mode 100644
index 00000000..9e4dd21b
--- /dev/null
+++ b/src/app/routes/menu-manager/components/menusort/menusort.component.ts
@@ -0,0 +1,77 @@
+import { Component, OnInit, ViewChild } from '@angular/core';
+import { _HttpClient } from '@delon/theme';
+import { NzMessageService } from 'ng-zorro-antd/message';
+import { NzModalRef } from 'ng-zorro-antd/modal';
+import { NzTreeComponent } from 'ng-zorro-antd/tree';
+import { MenuManagerService } from '../../services/menu-manager.service';
+
+@Component({
+ selector: 'app-menu-manager-menusort',
+ templateUrl: './menusort.component.html',
+})
+export class MenuManagerMenusortComponent implements OnInit {
+ @ViewChild('nzTreeComponent', { static: false }) nzTreeComponent!: NzTreeComponent;
+ record: any = {};
+ i: any;
+ functionList: any[] = [];
+ menuList: any[] = [];
+
+ constructor(
+ private modal: NzModalRef,
+ public service: MenuManagerService,
+ ) { }
+
+ ngOnInit(): void {
+ this.getAllFunction()
+ }
+ getAllFunction() {
+ this.service.request(this.service.$api_get_all, { appId: this.i.appId }, 'POST', false).subscribe(res => {
+ this.functionList = res;
+ this.menuList = res[0].children;
+ });
+ }
+ nzEvent(event: any): void {
+ console.log(event)
+ }
+ dragEnd(event: any){
+ const functionId = event.node.key
+ let sortNumber = 0
+ const newMenuList = this.nzTreeComponent.getTreeNodes()
+ newMenuList.forEach((item, index) => {
+ if(event.node.level === 0 && item.children) {
+
+ if(functionId === item.key) {
+ sortNumber = index
+ }
+ } else if(event.node.level === 1 && item.children) {
+ item.children.forEach((subItem: any, subIndex: number) => {
+ if(functionId === subItem.key) {
+ sortNumber = subIndex
+ }
+ })
+ } else if(event.node.level === 2 && item.children) {
+ item.children.forEach((thirdItem: any, thirdIndex: number) => {
+ if(functionId === thirdItem.key) {
+ sortNumber = thirdIndex
+ }
+ })
+ }
+ })
+ const params: any = {
+ parentId: event.node.level === 0 ? this.functionList[0].id : event.node.parentNode.key,
+ functionId,
+ sortNumber
+ }
+ this.service.request(this.service.$api_alterFunctionsParent, params).subscribe(res => {
+ if (res) {
+ }
+ })
+
+ }
+ sure(){
+ this.modal.close(true)
+ }
+ close(): void {
+ this.modal.destroy();
+ }
+}
diff --git a/src/app/routes/menu-manager/menu-manager-routing.module.ts b/src/app/routes/menu-manager/menu-manager-routing.module.ts
new file mode 100644
index 00000000..d46c398f
--- /dev/null
+++ b/src/app/routes/menu-manager/menu-manager-routing.module.ts
@@ -0,0 +1,16 @@
+import { NgModule } from '@angular/core';
+import { RouterModule, Routes } from '@angular/router';
+import { ApiAuthComponent } from './components/api-auth/api-auth.component';
+import { MenuManagerComponentsIndexComponent } from './components/index/index.component';
+
+const routes: Routes = [
+ { path: '', redirectTo: 'index', pathMatch: 'full' },
+ { path: 'index', component: MenuManagerComponentsIndexComponent },
+ { path: 'auth', component: ApiAuthComponent },
+];
+
+@NgModule({
+ imports: [RouterModule.forChild(routes)],
+ exports: [RouterModule],
+})
+export class MenuManagerRoutingModule {}
diff --git a/src/app/routes/menu-manager/menu-manager.module.ts b/src/app/routes/menu-manager/menu-manager.module.ts
new file mode 100644
index 00000000..7d243d84
--- /dev/null
+++ b/src/app/routes/menu-manager/menu-manager.module.ts
@@ -0,0 +1,16 @@
+import { NgModule, Type } from '@angular/core';
+import { SharedModule } from '@shared';
+import { MenuManagerComponentsIndexComponent } from './components/index/index.component';
+import { MenuManagerRoutingModule } from './menu-manager-routing.module';
+import { MenuModalComponent } from './components/index/menu-modal/menu-modal.component';
+import { ApiAuthComponent } from './components/api-auth/api-auth.component';
+import { AuthDrawerComponent } from './components/api-auth/auth-drawer/auth-drawer.component';
+import { MenuManagerMenusortComponent } from './components/menusort/menusort.component';
+
+const COMPONENTS: Type[] = [MenuManagerComponentsIndexComponent, ApiAuthComponent];
+const COMPONENTS_NOROUNT: Type[] = [MenuModalComponent, AuthDrawerComponent, MenuManagerMenusortComponent];
+@NgModule({
+ imports: [SharedModule, MenuManagerRoutingModule],
+ declarations: [...COMPONENTS, ...COMPONENTS_NOROUNT]
+})
+export class MenuManagerModule {}
diff --git a/src/app/routes/menu-manager/services/menu-manager.service.ts b/src/app/routes/menu-manager/services/menu-manager.service.ts
new file mode 100644
index 00000000..b8a7c259
--- /dev/null
+++ b/src/app/routes/menu-manager/services/menu-manager.service.ts
@@ -0,0 +1,157 @@
+import { Injectable, Injector } from '@angular/core';
+import { Menu } from '@delon/theme';
+import { BaseService } from '@shared';
+
+@Injectable({
+ providedIn: 'root'
+})
+export class MenuManagerService extends BaseService {
+ // 新增/更新菜单
+ $api_add_one = `/api/mdc/cuc/functionInfo/saveFunctionInfo`;
+ // 根据应用ID获取所有菜单
+ $api_get_all = `/api/mdc/cuc/functionInfo/getAllFunctionInfoByAppId`;
+ // 获取菜单详情
+ $api_get_menu_by_id = `/api/mdc/cuc/functionInfo/getFunctionInfo`;
+ // 根据应用ID获取菜单
+ $api_get_one = `/api/mdc/cuc/functionInfo/getAllFunctionInfoByAppId?_allow_badcode=true`;
+ // 删除多个菜单
+ $api_del_many = `/api/mdc/cuc/functionInfo/deletebatchFunctionInfo`;
+
+ // 获取菜单下按钮权限列表
+ $api_get_functions_by_id = `/api/mdc/cuc/functionButton/getFunctionButtonByFunctionId`;
+ // 获取所有按钮信息
+ $api_get_functions = `/api/mdc/cuc/buttonInfo/getButtonInfoList`;
+ // 保存菜单按钮关联
+ $api_save_menu_function = `/api/mdc/cuc/functionButton/saveFunctionButton`;
+ // 删除菜单按钮关联表
+ $api_delete_menu_function = `/api/mdc/cuc/functionButton/deletebatch`;
+ // 排序菜单
+ $api_alterFunctionsParent = `/api/mdc/cuc/functionInfo/alterFunctionsParent`;
+
+ constructor(public injector: Injector) {
+ super(injector);
+ }
+
+ getMenuByAppID(appId: string) {
+ this.request(this.$api_get_one, { appId }, 'POST', false).subscribe(res => {
+ if (res) {
+ const menus = res.data;
+ if (res.data?.length > 0) {
+ this.deleteMenuByAppID(res.data);
+ } else {
+ this.msgSrv.success('菜单已清空');
+ }
+ }
+ });
+ }
+
+ deleteMenuByAppID(arr: Array) {
+ let ids: any[] = arr?.map(item => item.id) || [];
+ arr.forEach(item => {
+ if (item.children?.length > 0) {
+ this.deleteMenuByAppID(item.children);
+ }
+ });
+ this.request(this.$api_del_many, ids).subscribe(res => {});
+ }
+
+ menuImport(enName: string, appId: string) {
+ this.http.request('GET', `assets/mocks/platform/${enName}.json`).subscribe((res: any) => {
+ this.addMenu(res.menu, appId);
+ });
+ }
+
+ addMenu(menus: Array