@ -0,0 +1,12 @@ | |||||
# This file is used by the build system to adjust CSS and JS output to support the specified browsers below. | |||||
# For additional information regarding the format and rule options, please see: | |||||
# https://github.com/browserslist/browserslist#queries | |||||
# You can see what browsers were selected by your queries by running: | |||||
# npx browserslist | |||||
> 0.5% | |||||
last 2 versions | |||||
Firefox ESR | |||||
not dead | |||||
not IE 9-11 # For IE 9-11 support, remove 'not'. |
@ -0,0 +1,14 @@ | |||||
# Editor configuration, see http://editorconfig.org | |||||
root = true | |||||
[*] | |||||
charset = utf-8 | |||||
indent_style = space | |||||
indent_size = 2 | |||||
insert_final_newline = true | |||||
trim_trailing_whitespace = true | |||||
end_of_line = lf | |||||
[*.md] | |||||
max_line_length = off | |||||
trim_trailing_whitespace = false |
@ -0,0 +1,177 @@ | |||||
{ | |||||
"root": true, | |||||
"ignorePatterns": [ | |||||
"src/test.ts", | |||||
"**/*.spec.ts", | |||||
"projects/**/*" | |||||
], | |||||
"overrides": [ | |||||
{ | |||||
"files": [ | |||||
"*.ts" | |||||
], | |||||
"parserOptions": { | |||||
"project": [ | |||||
"tsconfig.json" | |||||
], | |||||
"createDefaultProgram": true | |||||
}, | |||||
"extends": [ | |||||
"plugin:@angular-eslint/recommended", | |||||
"plugin:@angular-eslint/template/process-inline-templates" | |||||
], | |||||
"rules": { | |||||
"spaced-comment": [ | |||||
"error", | |||||
"always", | |||||
{ | |||||
"line": { | |||||
"markers": [ | |||||
"/" | |||||
], | |||||
"exceptions": [ | |||||
"-", | |||||
"+" | |||||
] | |||||
}, | |||||
"block": { | |||||
"markers": [ | |||||
"!" | |||||
], | |||||
"exceptions": [ | |||||
"*" | |||||
], | |||||
"balanced": true | |||||
} | |||||
} | |||||
], | |||||
"curly": [ | |||||
"error", | |||||
"all" | |||||
], | |||||
"eol-last": "error", | |||||
"guard-for-in": "error", | |||||
"indent": [ | |||||
"error", | |||||
2, | |||||
{ | |||||
"SwitchCase": 1 | |||||
} | |||||
], | |||||
"no-labels": "error", | |||||
"max-len": [ | |||||
"error", | |||||
140, | |||||
4 | |||||
], | |||||
"no-caller": "error", | |||||
"no-bitwise": "error", | |||||
"no-console": "off", | |||||
"no-restricted-syntax": [ | |||||
"error", | |||||
{ | |||||
"selector": "CallExpression[callee.object.name=\"console\"][callee.property.name!=/^(log|warn|error|info|trace)$/]", | |||||
"message": "Unexpected property on console object was called" | |||||
} | |||||
], | |||||
"no-new-wrappers": "error", | |||||
"no-debugger": "error", | |||||
"no-empty": "off", | |||||
"no-eval": "error", | |||||
"no-shadow": [ | |||||
"error", | |||||
{ | |||||
"hoist": "functions" | |||||
} | |||||
], | |||||
"no-throw-literal": "error", | |||||
"no-fallthrough": "error", | |||||
"no-trailing-spaces": "error", | |||||
"no-unused-expressions": [ | |||||
"error", | |||||
{ | |||||
"allowTernary": true | |||||
} | |||||
], | |||||
"no-var": "error", | |||||
"prefer-const": [ | |||||
"error", | |||||
{ | |||||
"destructuring": "any", | |||||
"ignoreReadBeforeAssign": false | |||||
} | |||||
], | |||||
"quotes": [ | |||||
"error", | |||||
"single", | |||||
{ | |||||
"allowTemplateLiterals": true, | |||||
"avoidEscape": true | |||||
} | |||||
], | |||||
"radix": "error", | |||||
"semi": [ | |||||
"error", | |||||
"always" | |||||
], | |||||
"eqeqeq": [ | |||||
"error", | |||||
"allow-null" | |||||
], | |||||
"camelcase": "off", | |||||
"@angular-eslint/directive-selector": [ | |||||
"error", | |||||
{ | |||||
"type": "attribute", | |||||
"prefix": [ | |||||
"app", | |||||
"cust" | |||||
], | |||||
"style": "camelCase" | |||||
} | |||||
], | |||||
"@angular-eslint/component-selector": [ | |||||
"error", | |||||
{ | |||||
"type": "element", | |||||
"prefix": [ | |||||
"app", | |||||
"cust" | |||||
], | |||||
"style": "kebab-case" | |||||
} | |||||
], | |||||
"@angular-eslint/no-inputs-metadata-property": "error", | |||||
"@angular-eslint/no-outputs-metadata-property": "error", | |||||
"@angular-eslint/no-host-metadata-property": "error", | |||||
"@angular-eslint/no-input-rename": "error", | |||||
"@angular-eslint/no-output-rename": "error", | |||||
"@angular-eslint/use-lifecycle-interface": "error", | |||||
"@angular-eslint/use-pipe-transform-interface": "error", | |||||
"@angular-eslint/component-class-suffix": "error", | |||||
"@angular-eslint/directive-class-suffix": "error", | |||||
"@angular-eslint/use-component-view-encapsulation": "off", | |||||
"@angular-eslint/no-attribute-decorator": "error", | |||||
"@angular-eslint/no-output-native": "error", | |||||
"@angular-eslint/no-output-on-prefix": "error", | |||||
"@angular-eslint/no-forward-ref": "off", | |||||
"@angular-eslint/no-unused-css": "off", | |||||
"@angular-eslint/contextual-lifecycle": "error", | |||||
"@angular-eslint/no-pipe-impure": "error", | |||||
"@angular-eslint/no-empty-lifecycle-method": [ | |||||
"off" | |||||
], | |||||
"@angular-eslint/no-conflicting-lifecycle": "off" | |||||
} | |||||
}, | |||||
{ | |||||
"files": [ | |||||
"*.html" | |||||
], | |||||
"extends": [ | |||||
"plugin:@angular-eslint/template/recommended" | |||||
], | |||||
"rules": {} | |||||
} | |||||
] | |||||
} |
@ -0,0 +1,51 @@ | |||||
# See http://help.github.com/ignore-files/ for more about ignoring files. | |||||
# compiled output | |||||
/dist | |||||
/tmp | |||||
/out-tsc | |||||
/doc | |||||
# dependencies | |||||
/node_modules | |||||
# IDEs and editors | |||||
/.idea | |||||
.project | |||||
.classpath | |||||
.c9/ | |||||
*.launch | |||||
.settings/ | |||||
*.sublime-workspace | |||||
# IDE - VSCode | |||||
.vscode/* | |||||
!.vscode/settings.json | |||||
!.vscode/tasks.json | |||||
!.vscode/launch.json | |||||
!.vscode/extensions.json | |||||
# misc | |||||
/.sass-cache | |||||
/connect.lock | |||||
/coverage | |||||
/libpeerconnection.log | |||||
npm-debug.log | |||||
testem.log | |||||
/typings | |||||
# e2e | |||||
/e2e/*.js | |||||
/e2e/*.map | |||||
# System Files | |||||
.DS_Store | |||||
Thumbs.db | |||||
package-lock.json | |||||
gitDiff.sh | |||||
.update | |||||
# SonarQube | |||||
.scannerwork | |||||
sonar-project.properties |
@ -0,0 +1,3 @@ | |||||
registry=https://registry.npmmirror.com | |||||
unsafe-perm=true | |||||
@webdpt:registry=https://repo.digiwincloud.com.cn/maven/repository/npm-webdpt/ |
@ -0,0 +1,24 @@ | |||||
{ | |||||
"version": "0.2.0", | |||||
"configurations": [ | |||||
{ | |||||
"type": "node", | |||||
"request": "launch", | |||||
"name": "Launch via NPM", | |||||
"runtimeExecutable": "npm", | |||||
"runtimeArgs": [ | |||||
"run-script", | |||||
"schematics-debug" | |||||
], | |||||
"stopOnEntry": true, | |||||
"port": 9229, | |||||
"skipFiles": [ | |||||
"<node_internals>/**" | |||||
], | |||||
"resolveSourceMapLocations": [ | |||||
"${workspaceFolder}/**", | |||||
"!**/node_modules/**" | |||||
], | |||||
} | |||||
] | |||||
} |
@ -0,0 +1,3 @@ | |||||
{ | |||||
"typescript.tsdk": "node_modules\\typescript\\lib" | |||||
} |
@ -0,0 +1,28 @@ | |||||
# Ng-Web端平台 | |||||
This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 6.0.8. | |||||
需搭配nodejs 8.8以上(含npm) | |||||
## Development server | |||||
Run `ng serve` for a dev server. Navigate to `http://localhost:4200/`. The app will automatically reload if you change any of the source files. | |||||
## Code scaffolding | |||||
Run `ng generate component component-name` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module`. | |||||
## Build | |||||
Run `ng build` to build the project. The build artifacts will be stored in the `dist/` directory. Use the `-prod` flag for a production build. | |||||
## Running unit tests | |||||
Run `ng test` to execute the unit tests via [Karma](https://karma-runner.github.io). | |||||
## Running end-to-end tests | |||||
Run `ng e2e` to execute the end-to-end tests via [Protractor](http://www.protractortest.org/). | |||||
## Further help | |||||
To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI README](https://github.com/angular/angular-cli/blob/master/README.md). |
@ -0,0 +1,200 @@ | |||||
{ | |||||
"$schema": "./node_modules/@angular/cli/lib/config/schema.json", | |||||
"version": 1, | |||||
"newProjectRoot": "projects", | |||||
"projects": { | |||||
"ng-webdpt": { | |||||
"root": "", | |||||
"sourceRoot": "src", | |||||
"projectType": "application", | |||||
"architect": { | |||||
"build": { | |||||
"builder": "@angular-devkit/build-angular:browser", | |||||
"options": { | |||||
"allowedCommonJsDependencies": [ | |||||
"crypto-js", | |||||
"ag-grid-angular", | |||||
"ag-grid-community", | |||||
"@ant-design/colors", | |||||
"date-fns/format", | |||||
"date-fns/parse", | |||||
"qs", | |||||
"@webdpt/framework/themes" | |||||
], | |||||
"outputPath": "dist", | |||||
"index": "src/index.html", | |||||
"main": "src/main.ts", | |||||
"tsConfig": "src/tsconfig.app.json", | |||||
"polyfills": "src/polyfills.ts", | |||||
"assets": [ | |||||
"src/assets", | |||||
"src/favicon.ico", | |||||
{ | |||||
"glob": "**/*", | |||||
"input": "./node_modules/@webdpt/framework/assets/dw-framework", | |||||
"output": "assets/dw-framework" | |||||
}, | |||||
{ | |||||
"glob": "**/*", | |||||
"input": "src/assets", | |||||
"output": "assets" | |||||
}, | |||||
{ | |||||
"glob": "**/*", | |||||
"input": "./node_modules/@ant-design/icons-angular/src/inline-svg/", | |||||
"output": "assets" | |||||
}, | |||||
"src/manifest.webmanifest" | |||||
], | |||||
"styles": [ | |||||
"src/styles.less" | |||||
], | |||||
"scripts": [ | |||||
"node_modules/jsencrypt/bin/jsencrypt.js" | |||||
], | |||||
"vendorChunk": true, | |||||
"extractLicenses": false, | |||||
"buildOptimizer": false, | |||||
"sourceMap": true, | |||||
"optimization": false, | |||||
"namedChunks": true | |||||
}, | |||||
"configurations": { | |||||
"production": { | |||||
"budgets": [ | |||||
{ | |||||
"type": "anyComponentStyle", | |||||
"maximumWarning": "6kb" | |||||
} | |||||
], | |||||
"optimization": true, | |||||
"outputHashing": "all", | |||||
"sourceMap": false, | |||||
"namedChunks": false, | |||||
"extractLicenses": true, | |||||
"vendorChunk": false, | |||||
"buildOptimizer": true, | |||||
"fileReplacements": [ | |||||
{ | |||||
"replace": "src/environments/environment.ts", | |||||
"with": "src/environments/environment.prod.ts" | |||||
} | |||||
], | |||||
"serviceWorker": true | |||||
}, | |||||
"service-worker-dev": { | |||||
"budgets": [ | |||||
{ | |||||
"type": "anyComponentStyle", | |||||
"maximumWarning": "6kb" | |||||
} | |||||
], | |||||
"outputHashing": "all", | |||||
"namedChunks": false, | |||||
"extractLicenses": true, | |||||
"vendorChunk": false, | |||||
"serviceWorker": true | |||||
}, | |||||
"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-webdpt:build:development" | |||||
}, | |||||
"configurations": { | |||||
"production": { | |||||
"browserTarget": "ng-webdpt:build:production" | |||||
} | |||||
} | |||||
}, | |||||
"extract-i18n": { | |||||
"builder": "@angular-devkit/build-angular:extract-i18n", | |||||
"options": { | |||||
"browserTarget": "ng-webdpt:build" | |||||
} | |||||
}, | |||||
"test": { | |||||
"builder": "@angular-devkit/build-angular:karma", | |||||
"options": { | |||||
"main": "src/test.ts", | |||||
"karmaConfig": "./karma.conf.js", | |||||
"polyfills": "src/polyfills.ts", | |||||
"tsConfig": "src/tsconfig.spec.json", | |||||
"scripts": [ | |||||
"node_modules/jsencrypt/bin/jsencrypt.js" | |||||
], | |||||
"styles": [ | |||||
"src/styles.less" | |||||
], | |||||
"assets": [ | |||||
"src/assets", | |||||
"src/favicon.ico", | |||||
{ | |||||
"glob": "**/*", | |||||
"input": "./node_modules/@webdpt/framework/assets/dw-framework", | |||||
"output": "assets/dw-framework" | |||||
}, | |||||
{ | |||||
"glob": "**/*", | |||||
"input": "src/assets", | |||||
"output": "assets" | |||||
}, | |||||
{ | |||||
"glob": "**/*", | |||||
"input": "./node_modules/@ant-design/icons-angular/src/inline-svg/", | |||||
"output": "assets" | |||||
}, | |||||
"src/manifest.webmanifest" | |||||
] | |||||
} | |||||
}, | |||||
"e2e": { | |||||
"builder": "@angular-devkit/build-angular:protractor", | |||||
"options": { | |||||
"protractorConfig": "e2e/protractor.conf.js", | |||||
"devServerTarget": "ng-webdpt:serve" | |||||
}, | |||||
"configurations": { | |||||
"production": { | |||||
"devServerTarget": "ng-webdpt:serve:production" | |||||
} | |||||
} | |||||
}, | |||||
"lint": { | |||||
"builder": "@angular-eslint/builder:lint", | |||||
"options": { | |||||
"lintFilePatterns": [ | |||||
"src/**/*.ts", | |||||
"src/**/*.html" | |||||
] | |||||
} | |||||
} | |||||
} | |||||
} | |||||
}, | |||||
"defaultProject": "ng-webdpt", | |||||
"schematics": { | |||||
"@schematics/angular:component": { | |||||
"prefix": "app", | |||||
"style": "less" | |||||
}, | |||||
"@schematics/angular:directive": { | |||||
"prefix": "app" | |||||
} | |||||
}, | |||||
"cli": { | |||||
"warnings": {}, | |||||
"analytics": false, | |||||
"defaultCollection": "@angular-eslint/schematics" | |||||
} | |||||
} |
@ -0,0 +1,23 @@ | |||||
import { AppPage } from './app.po'; | |||||
import { browser, logging } from 'protractor'; | |||||
describe('workspace-project App', () => { | |||||
let page: AppPage; | |||||
beforeEach(() => { | |||||
page = new AppPage(); | |||||
}); | |||||
it('should display welcome message', () => { | |||||
page.navigateTo(); | |||||
expect(page.getTitleText()).toEqual(''); | |||||
}); | |||||
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)); | |||||
}); | |||||
}); |
@ -0,0 +1,11 @@ | |||||
import { browser, by, element } from 'protractor'; | |||||
export class AppPage { | |||||
navigateTo(): Promise<any> { | |||||
return browser.get(browser.baseUrl) as Promise<any>; | |||||
} | |||||
getTitleText(): Promise<string> { | |||||
return element(by.css('app-root')).getText() as Promise<string>; | |||||
} | |||||
} |
@ -0,0 +1,13 @@ | |||||
{ | |||||
"extends": "../tsconfig.json", | |||||
"compilerOptions": { | |||||
"outDir": "../out-tsc/e2e", | |||||
"module": "commonjs", | |||||
"target": "es2015", | |||||
"types": [ | |||||
"jasmine", | |||||
"jasminewd2", | |||||
"node" | |||||
] | |||||
} | |||||
} |
@ -0,0 +1,36 @@ | |||||
// 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'), | |||||
require('@angular-devkit/build-angular/plugins/karma') | |||||
], | |||||
client: { | |||||
clearContext: false // leave Jasmine Spec Runner output visible in browser | |||||
}, | |||||
coverageReporter: { | |||||
dir: require('path').join(__dirname, './coverage/ng-webdpt'), | |||||
subdir: '.', | |||||
reporters: [ | |||||
{ type: 'html' }, | |||||
{ type: 'lcovonly' }, | |||||
{ type: 'text-summary' } | |||||
] | |||||
}, | |||||
reporters: ['progress', 'kjhtml'], | |||||
port: 9876, | |||||
colors: true, | |||||
logLevel: config.LOG_INFO, | |||||
autoWatch: true, | |||||
browsers: ['ChromeHeadless'], | |||||
singleRun: false, | |||||
restartOnFileChange: true | |||||
}); | |||||
}; |
@ -0,0 +1,10 @@ | |||||
module.exports = { | |||||
packages: { | |||||
'@webdpt/components': { | |||||
ignorableDeepImportMatchers: [ | |||||
/ng-quicksilver\/date-picker\/standard-types/, | |||||
/iv-viewer\// | |||||
] | |||||
} | |||||
}, | |||||
}; |
@ -0,0 +1,39 @@ | |||||
{ | |||||
"index": "/index.html", | |||||
"assetGroups": [ | |||||
{ | |||||
"name": "app", | |||||
"installMode": "lazy", | |||||
"resources": { | |||||
"files": [ | |||||
"/favicon.ico", | |||||
"/index.html", | |||||
"/*.css", | |||||
"/*.js" | |||||
] | |||||
} | |||||
}, { | |||||
"name": "assets", | |||||
"installMode": "lazy", | |||||
"updateMode": "lazy", | |||||
"resources": { | |||||
"files": [ | |||||
"/assets/**", | |||||
"!/assets/**/*.json" | |||||
] | |||||
} | |||||
} | |||||
], | |||||
"dataGroups": [ | |||||
{ | |||||
"name": "app", | |||||
"urls": ["**"], | |||||
"cacheConfig": { | |||||
"strategy": "freshness", | |||||
"maxSize": 0, | |||||
"maxAge": "0u", | |||||
"timeout": "3s" | |||||
} | |||||
} | |||||
] | |||||
} |
@ -0,0 +1,127 @@ | |||||
{ | |||||
"name": "ng-webdpt", | |||||
"version": "0.0.0", | |||||
"license": "MIT", | |||||
"scripts": { | |||||
"postinstall": "npx patch-package@6.5.1 && ngcc", | |||||
"ng": "ng", | |||||
"start": "node --max_old_space_size=5120 ./node_modules/@angular/cli/bin/ng serve", | |||||
"start-prod": "ng serve --configuration production", | |||||
"build": "ng build", | |||||
"test": "node --max_old_space_size=5120 ./node_modules/@angular/cli/bin/ng test", | |||||
"framework-test": "ng test @webdpt/framework --code-coverage --watch", | |||||
"components-test": "ng test @webdpt/components --code-coverage --watch", | |||||
"mfa-app-test": "ng test @webdpt/mfa-app --code-coverage --watch", | |||||
"lint": "ng lint ng-webdpt", | |||||
"e2e": "ng e2e", | |||||
"buildCss": "node themeCssBuild", | |||||
"generate-i18n-files": "ngx-translate-extract -i ./src -o ./src/i18n/default-en.json --clean --sort --format namespaced-json", | |||||
"build-prod": "node --max_old_space_size=5120 ./node_modules/@angular/cli/bin/ng build --configuration production && node node_modules/@webdpt/scripts/builds/replace-sw.js && npm run dw-zip", | |||||
"doc:build": "compodoc -p src/tsconfig.app.json -d ./doc", | |||||
"doc:serve": "compodoc -s -r 4201 -d ./doc", | |||||
"doc:buildandserve": "compodoc -p ./tsconfig.json -s -r 4201 -d ./doc", | |||||
"sonar": "sonar-scanner", | |||||
"gmc": "node node_modules/@webdpt/scripts/builds/generate.js", | |||||
"dw-zip": "node node_modules/@webdpt/scripts/builds/dw-zip.js" | |||||
}, | |||||
"private": true, | |||||
"dependencies": { | |||||
"@angular-architects/module-federation": "^12.2.0", | |||||
"@angular/animations": "12.2.16", | |||||
"@angular/cdk": "^12.1.0", | |||||
"@angular/common": "12.2.16", | |||||
"@angular/compiler": "12.2.16", | |||||
"@angular/core": "12.2.16", | |||||
"@angular/forms": "12.2.16", | |||||
"@angular/platform-browser": "12.2.16", | |||||
"@angular/platform-browser-dynamic": "12.2.16", | |||||
"@angular/router": "12.2.16", | |||||
"@angular/service-worker": "12.2.16", | |||||
"@ant-design/icons-angular": "^12.0.3", | |||||
"@ng-dynamic-forms/core": "^14.0.0", | |||||
"@ngx-translate/core": "^13.0.0", | |||||
"@ngx-translate/http-loader": "^6.0.0", | |||||
"@types/requirejs": "^2.1.31", | |||||
"@webdpt/analytics": "5.2.11-1000", | |||||
"@webdpt/components": "5.2.11-1000", | |||||
"@webdpt/framework-js": "5.2.11-1000", | |||||
"@webdpt/framework": "5.2.11-1000", | |||||
"@webdpt/iv-viewer": "2.0.1", | |||||
"@webdpt/programs": "5.2.11-1000", | |||||
"ag-grid-angular": "^26.0.0", | |||||
"ag-grid-community": "^26.0.0", | |||||
"angular-gridster2": "^12.0.0", | |||||
"angular-in-memory-web-api": "^0.9.0", | |||||
"axios": "^1.4.0", | |||||
"classlist.js": "1.1.20150312", | |||||
"core-js": "^3.8.0", | |||||
"crypto-js": "^3.1.9-1", | |||||
"date-fns": "^2.10.0", | |||||
"fast-deep-equal": "^3.1.3", | |||||
"i18next": "^22.5.1", | |||||
"injection-js": "^2.4.0", | |||||
"jsencrypt": "^3.0.0-rc.1", | |||||
"moment": "2.24.0", | |||||
"ng-zorro-antd": "https://repo.digiwincloud.com.cn/maven/repository/npm-webdpt/ng-zorro-antd/-/ng-zorro-antd-12.1.1-1000.tgz", | |||||
"ngx-color": "5.1.3", | |||||
"ngx-highlightjs": "^2.1.1", | |||||
"ngx-mask": "^12.0.0", | |||||
"resize-observer-polyfill": "^1.5.1", | |||||
"rrule": "2.6.0", | |||||
"rxjs": "~6.6.0", | |||||
"sonarqube-scanner": "^2.4.1", | |||||
"tslint-sonarts": "^1.9.0", | |||||
"web-animations-js": "^2.3.2" | |||||
}, | |||||
"devDependencies": { | |||||
"@angular-devkit/build-angular": "12.2.16", | |||||
"@angular-devkit/core": "12.2.16", | |||||
"@angular-devkit/schematics": "12.2.16", | |||||
"@angular-devkit/schematics-cli": "12.2.16", | |||||
"@angular-eslint/builder": "^12.7.0", | |||||
"@angular-eslint/eslint-plugin": "^12.7.0", | |||||
"@angular-eslint/eslint-plugin-template": "^12.7.0", | |||||
"@angular-eslint/schematics": "^12.7.0", | |||||
"@angular-eslint/template-parser": "^12.7.0", | |||||
"@angular/cli": "12.2.16", | |||||
"@angular/compiler-cli": "12.2.16", | |||||
"@angular/language-service": "12.2.16", | |||||
"@biesbjerg/ngx-translate-extract": "^2.3.4", | |||||
"@compodoc/compodoc": "^1.1.3", | |||||
"@phenomnomnominal/tsquery": "^4.1.0", | |||||
"@schematics/angular": "12.2.16", | |||||
"@schematics/update": "0.1102.12", | |||||
"@types/jasmine": "~3.6.0", | |||||
"@types/jasminewd2": "~2.0.3", | |||||
"@types/node": "^12.11.1", | |||||
"@typescript-eslint/eslint-plugin": "4.28.2", | |||||
"@typescript-eslint/parser": "4.28.2", | |||||
"@webdpt/schematics": "5.2.11-1000", | |||||
"@webdpt/scripts": "5.2.11-1000", | |||||
"@webdpt/tslint-rules": "5.2.11-1000", | |||||
"archiver": "5.3.1", | |||||
"codelyzer": "^6.0.0", | |||||
"commander": "^5.1.0", | |||||
"cpx": "^1.5.0", | |||||
"eslint": "^7.26.0", | |||||
"inquirer": "^7.3.0", | |||||
"jasmine-core": "~3.8.0", | |||||
"jasmine-spec-reporter": "~5.0.0", | |||||
"karma": "~6.3.15", | |||||
"karma-chrome-launcher": "~3.1.0", | |||||
"karma-coverage": "~2.0.3", | |||||
"karma-jasmine": "~4.0.0", | |||||
"karma-jasmine-html-reporter": "^1.5.0", | |||||
"less": "^3.10.3", | |||||
"ng-packagr": "^12.1.1", | |||||
"protractor": "~7.0.0", | |||||
"qs": "^6.11.2", | |||||
"raw-loader": "0.5.1", | |||||
"ts-node": "~7.0.0", | |||||
"tslib": "^2.0.0", | |||||
"tslint": "~6.1.0", | |||||
"typescript": "~4.3.5", | |||||
"webpack-bundle-analyzer": "^3.7.0", | |||||
"zone.js": "~0.11.4" | |||||
} | |||||
} |
@ -0,0 +1,24 @@ | |||||
diff --git a/node_modules/@schematics/update/migrate/schema.json b/node_modules/@schematics/update/migrate/schema.json | |||||
index 58fca36..257ee01 100644 | |||||
--- a/node_modules/@schematics/update/migrate/schema.json | |||||
+++ b/node_modules/@schematics/update/migrate/schema.json | |||||
@@ -1,6 +1,6 @@ | |||||
{ | |||||
"$schema": "http://json-schema.org/schema", | |||||
- "id": "PostUpdateSchema", | |||||
+ "$id": "PostUpdateSchema", | |||||
"type": "object", | |||||
"properties": { | |||||
"package": { | |||||
diff --git a/node_modules/@schematics/update/update/schema.json b/node_modules/@schematics/update/update/schema.json | |||||
index d921b9d..465cf9e 100644 | |||||
--- a/node_modules/@schematics/update/update/schema.json | |||||
+++ b/node_modules/@schematics/update/update/schema.json | |||||
@@ -1,6 +1,6 @@ | |||||
{ | |||||
"$schema": "http://json-schema.org/schema", | |||||
- "id": "SchematicsUpdateSchema", | |||||
+ "$id": "SchematicsUpdateSchema", | |||||
"title": "Schematic Options Schema", | |||||
"type": "object", | |||||
"properties": { |
@ -0,0 +1,9 @@ | |||||
{ | |||||
"envType": "angular", | |||||
"dap": { | |||||
"enabled": true | |||||
}, | |||||
"athena": { | |||||
"enabled": false | |||||
} | |||||
} |
@ -0,0 +1,20 @@ | |||||
# This file is used by the build system to adjust CSS and JS output to support the specified browsers below. | |||||
# For additional information regarding the format and rule options, please see: | |||||
# https://github.com/browserslist/browserslist#queries | |||||
# You can see what browsers were selected by your queries by running: | |||||
# npx browserslist | |||||
#> 0.5% | |||||
#last 2 versions | |||||
#Firefox ESR | |||||
#not dead | |||||
#not IE 9-11 # For IE 9-11 support, remove 'not'. | |||||
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. |
@ -0,0 +1,35 @@ | |||||
import { NgModule } from '@angular/core'; | |||||
import { RouterModule, Routes } from '@angular/router'; | |||||
import { PageNotFoundComponent } from './page-not-found.component'; | |||||
const routes: Routes = [ | |||||
{ | |||||
path: '', | |||||
pathMatch: 'prefix', | |||||
loadChildren: (): Promise<any> => import('./implementation/implementation.module').then(m => m.ImplementationModule) | |||||
}, | |||||
{ | |||||
path: '**', | |||||
component: PageNotFoundComponent | |||||
} | |||||
]; | |||||
@NgModule({ | |||||
imports: [ | |||||
RouterModule.forRoot( | |||||
routes, | |||||
{ relativeLinkResolution: 'legacy' } | |||||
// , { enableTracing: true } // debugging purposes only | |||||
), | |||||
], | |||||
declarations: [ | |||||
PageNotFoundComponent | |||||
], | |||||
exports: [ | |||||
RouterModule | |||||
] | |||||
}) | |||||
export class AppRoutingModule { | |||||
} |
@ -0,0 +1,29 @@ | |||||
import { TestBed, waitForAsync } from '@angular/core/testing'; | |||||
import { RouterTestingModule } from '@angular/router/testing'; | |||||
import { DwLanguageService } from '@webdpt/framework/language'; | |||||
import { of } from 'rxjs/internal/observable/of'; | |||||
import { AppComponent } from './app.component'; | |||||
describe('AppComponent', () => { | |||||
beforeEach(waitForAsync(() => { | |||||
TestBed.configureTestingModule({ | |||||
imports: [ | |||||
RouterTestingModule | |||||
], | |||||
providers: [ | |||||
{ provide: DwLanguageService, useValue: { | |||||
currentLanguage: 'zh_TW', | |||||
setUp: (lan: string): void => { }, | |||||
language$: of('zh_TW') | |||||
} } | |||||
], | |||||
declarations: [ | |||||
AppComponent | |||||
], | |||||
}).compileComponents(); | |||||
})); | |||||
it('should create the app', waitForAsync(() => { | |||||
const fixture = TestBed.createComponent(AppComponent); | |||||
const app = fixture.debugElement.componentInstance; | |||||
expect(app).toBeTruthy(); | |||||
})); | |||||
}); |
@ -0,0 +1,13 @@ | |||||
import { Component } from '@angular/core'; | |||||
import { DwLanguageService } from '@webdpt/framework/language'; | |||||
@Component({ | |||||
selector: 'app-root', | |||||
template: ` | |||||
<router-outlet></router-outlet> | |||||
`, | |||||
styleUrls: ['./app.component.css'] | |||||
}) | |||||
export class AppComponent { | |||||
constructor(langService: DwLanguageService) {} | |||||
} |
@ -0,0 +1,42 @@ | |||||
import { BrowserModule } from "@angular/platform-browser"; | |||||
import { NgModule } from "@angular/core"; | |||||
import { HttpClientJsonpModule, HttpClientModule } from "@angular/common/http"; | |||||
import { BrowserAnimationsModule } from "@angular/platform-browser/animations"; | |||||
import { AppComponent } from "./app.component"; | |||||
import { AppRoutingModule } from "./app-routing.module"; | |||||
import { FrameworkModule } from "@webdpt/framework"; | |||||
import { FrameworkUICoreModule } from "@webdpt/components/providers"; | |||||
import { DwServiceWorkerModule } from "@webdpt/framework/service-worker"; | |||||
import { DwDapModule } from "@webdpt/framework/dap"; | |||||
import { DwProgramsModule } from "@webdpt/programs"; | |||||
import { ImplementationModule } from "./implementation/implementation.module"; | |||||
import { SYSTEM_CONFIG } from "./config/system-config"; | |||||
import { SystemModule } from "./config/system.module"; | |||||
import { environment } from "../environments/environment"; | |||||
@NgModule({ | |||||
imports: [ | |||||
BrowserModule, | |||||
BrowserAnimationsModule, | |||||
AppRoutingModule, | |||||
HttpClientModule, | |||||
HttpClientJsonpModule, | |||||
/** ************* 端平台 ***************/ | |||||
FrameworkModule.forRoot([], SYSTEM_CONFIG), | |||||
FrameworkUICoreModule.forRoot(), | |||||
// --------------------------------------------------------- | |||||
// | 選配 | |||||
// --------------------------------------------------------- | |||||
DwDapModule, // DAP平台 | |||||
// DwProgramsModule, // 平台作業 | |||||
SystemModule.forRoot([]), | |||||
ImplementationModule.forRoot([]), | |||||
// DwServiceWorkerModule.forRoot(60 * 60 * 1000, environment.production), | |||||
], | |||||
declarations: [AppComponent], | |||||
providers: [], | |||||
bootstrap: [AppComponent], | |||||
}) | |||||
export class AppModule {} |
@ -0,0 +1,9 @@ | |||||
/* eslint-disable quotes */ | |||||
/** | |||||
* IAM 的 digi-middleware-auth-app [各應用系統的AppToken]. | |||||
*/ | |||||
// eslint-disable-next-line max-len | |||||
export const DigiMiddlewareAuthApp = | |||||
"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI6IkF0aGVuYSIsInNpZCI6MTYzNjc3NzI1NzgyNTkyfQ.3QLTPVKsk2Mp3j_aQ3X8bQW1wCJMNWeCkL6VPoK352c"; | |||||
// export const DigiMiddlewareAuthUser = "981dc293-8ccd-470f-9e36-99ba30af1324"; | |||||
export const DigiMiddlewareAuthUser = "66f9ca43-efdc-4f35-b7a1-fc56852ba3a6"; |
@ -0,0 +1,62 @@ | |||||
import { DigiMiddlewareAuthApp } from './app-auth-token'; | |||||
import { IDWDmcUserInfo } from '@webdpt/framework/config'; | |||||
// 開發環境變數 | |||||
export const SYSTEM_CONFIG: IAppConfig = { | |||||
dwAppId: 'Athena', | |||||
dwAppName: '数智未来峰会', | |||||
defaultApp: '/', | |||||
dwLogoPath: './assets/img/dwLogo.svg', | |||||
dwDateFormat: 'yyyy/MM/dd', | |||||
dwTimeFormat: 'HH:mm:ss', | |||||
dwUsingTab: false, | |||||
dwTabMultiOpen: false, | |||||
defaultLogin: '/login', | |||||
dwAppAuthToken: DigiMiddlewareAuthApp, | |||||
dwLoadMaskHttp: true, | |||||
dwLoadMaskDelay: 0, | |||||
dwDmcUserInfo: { | |||||
username: '', | |||||
password: '' | |||||
}, | |||||
dwTabStoreStrategy: 'session' | |||||
}; | |||||
export interface IAppConfig { | |||||
dwAppId: string; // Application ID(對應到互聯應用管理中心) | |||||
dwAppName: string; // Application NAME(對應到互聯應用管理中心) | |||||
defaultApp: string; // 首頁路徑 | |||||
dwLogoPath: string; // Logo圖檔路徑 | |||||
dwDateFormat: string; // 日期格式 | |||||
dwTimeFormat: string; // 時間格式 | |||||
dwUsingTab: boolean; // 是否啟用多頁佈局 | |||||
dwTabMultiOpen: boolean; // 多頁佈局預設是否可重覆開啟作業 | |||||
defaultLogin: string; // 登入頁路徑 | |||||
dwAppAuthToken: string; // IAM 的 digi-middleware-auth-app [各應用系統的AppToken]. | |||||
dwLoadMaskHttp: boolean; // HTTP加載遮罩是否啟用 | |||||
dwLoadMaskDelay: number; // 延遲顯示加載效果的時間毫秒 | |||||
dwDmcUserInfo: IDWDmcUserInfo; // 文檔中心的登入帳密 | |||||
dwTabStoreStrategy?: 'session' | 'local' | 'none'; // 多頁籤儲存策略 | |||||
} | |||||
function loadJSON(filePath: string): any { | |||||
const json = loadTextFileAjaxSync(filePath, 'application/json'); | |||||
const obj = JSON.parse(json); | |||||
return obj; | |||||
} | |||||
function loadTextFileAjaxSync(filePath: string, mimeType: string): string { | |||||
const xmlhttp = new XMLHttpRequest(); | |||||
xmlhttp.open('GET', filePath, false); | |||||
if (mimeType != null) { | |||||
if (xmlhttp.overrideMimeType) { | |||||
xmlhttp.overrideMimeType(mimeType); | |||||
} | |||||
} | |||||
xmlhttp.send(); | |||||
if (xmlhttp.status === 200) { | |||||
return xmlhttp.responseText; | |||||
} else { | |||||
return null; | |||||
} | |||||
} |
@ -0,0 +1,35 @@ | |||||
import { ModuleWithProviders, NgModule } from '@angular/core'; | |||||
import { CommonModule } from '@angular/common'; | |||||
import { Provider } from '@angular/compiler/src/core'; | |||||
import { DwMockModule } from '@webdpt/framework/mock'; | |||||
import { DW_MOCK, DW_APP_AUTH_TOKEN } from '@webdpt/framework/config'; | |||||
import { environment } from '../../environments/environment'; | |||||
import { DigiMiddlewareAuthApp } from './app-auth-token'; | |||||
@NgModule({ | |||||
imports: [ | |||||
CommonModule, | |||||
DwMockModule | |||||
], | |||||
declarations: [] | |||||
}) | |||||
export class SystemModule { | |||||
static forRoot(providers: Provider[]): ModuleWithProviders<SystemModule> { | |||||
return { | |||||
ngModule: SystemModule, | |||||
providers: [ | |||||
{ | |||||
provide: DW_MOCK, | |||||
useValue: environment.mock | |||||
}, | |||||
{ | |||||
provide: DW_APP_AUTH_TOKEN, | |||||
useValue: DigiMiddlewareAuthApp | |||||
}, | |||||
...providers | |||||
] | |||||
}; | |||||
} | |||||
} |
@ -0,0 +1,11 @@ | |||||
import { Routes } from '@angular/router'; | |||||
import { IMPLEMENTATION_ROUTES } from '../implementation/implementation-routes'; | |||||
export const CUSTOMIZATION_ROUTES: Routes = [ | |||||
// 設定客製應用模組路由 | |||||
// 應用開發應用模組路由 | |||||
...IMPLEMENTATION_ROUTES | |||||
]; |
@ -0,0 +1,10 @@ | |||||
import { NgModule } from '@angular/core'; | |||||
import { Routes, RouterModule } from '@angular/router'; | |||||
const routes: Routes = []; | |||||
@NgModule({ | |||||
imports: [RouterModule.forChild(routes)], | |||||
exports: [RouterModule] | |||||
}) | |||||
export class CustomizationRoutingModule { } |
@ -0,0 +1,13 @@ | |||||
import { NgModule } from '@angular/core'; | |||||
import { CommonModule } from '@angular/common'; | |||||
import { CustomizationRoutingModule } from './customization-routing.module'; | |||||
@NgModule({ | |||||
imports: [ | |||||
CommonModule, | |||||
CustomizationRoutingModule | |||||
], | |||||
declarations: [] | |||||
}) | |||||
export class CustomizationModule { } |
@ -0,0 +1,26 @@ | |||||
import { NgModule } from '@angular/core'; | |||||
import { RouterModule, Routes } from '@angular/router'; | |||||
import { ForgetComponent } from './forget.component'; | |||||
const routes: Routes = [ | |||||
{ | |||||
path: '', | |||||
component: ForgetComponent, | |||||
pathMatch: 'prefix', | |||||
data: { | |||||
dwRouteData: { | |||||
programId: 'dw-forget' | |||||
} | |||||
} | |||||
} | |||||
]; | |||||
@NgModule({ | |||||
imports: [ | |||||
RouterModule.forChild(routes) | |||||
], | |||||
exports: [RouterModule] | |||||
}) | |||||
export class ForgetRoutingModule { | |||||
} |
@ -0,0 +1,20 @@ | |||||
.forget-bg { | |||||
background-color: rgba(0, 21, 41, 1); | |||||
min-height: 100vh; | |||||
} | |||||
.forget-logo { | |||||
margin-bottom: 10px; | |||||
padding-top: 100px; | |||||
} | |||||
.forget-copyright { | |||||
text-align: center; | |||||
padding-bottom: 1rem; | |||||
} | |||||
.forget-copyright span { | |||||
font-size: 14px; | |||||
} | |||||
span { | |||||
color: white; | |||||
} |
@ -0,0 +1,19 @@ | |||||
<div nz-row class="forget-bg"> | |||||
<div nz-col [nzSpan]="24" class="forget-content"> | |||||
<div nz-row class="forget-main-block"> | |||||
<div nz-col [nzXs]="'8'" [nzSm]="'8'" [nzMd]="'9'" [nzLg]="'9'"> | |||||
</div> | |||||
<div nz-col [nzXs]="'8'" [nzSm]="'8'" [nzMd]="'6'" [nzLg]="'6'"> | |||||
<img class="forget-logo" src="{{dwLogoPath | translate}}"> | |||||
<dw-forget-block [verificationType]="verificationType"></dw-forget-block> | |||||
</div> | |||||
<div nz-col [nzXs]="'8'" [nzSm]="'8'" [nzMd]="'9'" [nzLg]="'9'"> | |||||
</div> | |||||
</div> | |||||
<div nz-row class="forget-copyright-block"> | |||||
<div nz-col [nzSpan]="24" class="forget-copyright"> | |||||
<span>© Data Systems Consulting Co., Ltd. All rights reserved.</span> | |||||
</div> | |||||
</div> | |||||
</div> | |||||
</div> |
@ -0,0 +1,82 @@ | |||||
import { Component, Injectable, Input, Pipe, PipeTransform } from '@angular/core'; | |||||
import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; | |||||
import { RouterTestingModule } from '@angular/router/testing'; | |||||
import { TranslatePipe, TranslateService } from '@ngx-translate/core'; | |||||
import { DwForgetModule } from '@webdpt/components/user/forget-block'; | |||||
import { Logo_Path } from '@webdpt/framework/config'; | |||||
import { Observable } from 'rxjs/internal/Observable'; | |||||
import { of } from 'rxjs/internal/observable/of'; | |||||
import { ForgetComponent } from './forget.component'; | |||||
import { ForgetModule } from './forget.module'; | |||||
describe('ForgetComponent', () => { | |||||
let component: ForgetComponent; | |||||
let fixture: ComponentFixture<ForgetComponent>; | |||||
beforeEach(waitForAsync(() => { | |||||
TestBed.configureTestingModule({ | |||||
imports: [ | |||||
ForgetModule, | |||||
RouterTestingModule | |||||
], | |||||
providers: [ | |||||
{ provide: TranslateService, useClass: TranslateServiceStub }, | |||||
{ provide: TranslatePipe, useClass: TranslatePipeMock }, | |||||
{ provide: Logo_Path, useValue: '/mock-logo-path' } | |||||
], | |||||
declarations: [ForgetComponent] | |||||
}) | |||||
.overrideModule(DwForgetModule, | |||||
{ | |||||
set: { | |||||
imports: [], | |||||
declarations: [MockDwForgetBlockComponent], | |||||
exports: [MockDwForgetBlockComponent] | |||||
} | |||||
}) | |||||
.compileComponents(); | |||||
})); | |||||
beforeEach(() => { | |||||
fixture = TestBed.createComponent(ForgetComponent); | |||||
component = fixture.componentInstance; | |||||
fixture.detectChanges(); | |||||
}); | |||||
it('should create', () => { | |||||
expect(component).toBeTruthy(); | |||||
}); | |||||
}); | |||||
@Pipe({ | |||||
name: 'translate' | |||||
}) | |||||
export class TranslatePipeMock implements PipeTransform { | |||||
public name = 'translate'; | |||||
public transform(query: string, ...args: any[]): any { | |||||
return query; | |||||
} | |||||
} | |||||
@Injectable() | |||||
export class TranslateServiceStub { | |||||
public instant(key: string, interpolateParams?: Object): string { | |||||
return key; | |||||
} | |||||
public get<T>(key: T): Observable<T> { | |||||
return of(key); | |||||
} | |||||
public onTranslationChange = of({ lang: 'TW' }); | |||||
public onLangChange = of({ translations: null }); | |||||
public onDefaultLangChange = of(true); | |||||
public currentLang = 'zh_TW'; | |||||
} | |||||
@Component({ | |||||
selector: 'dw-forget-block', | |||||
template: ` | |||||
<div>MockDwForgetBlockComponent</div> | |||||
` | |||||
}) | |||||
export class MockDwForgetBlockComponent { | |||||
@Input() verificationType: any; | |||||
} |
@ -0,0 +1,26 @@ | |||||
import { Component, Inject, OnInit } from '@angular/core'; | |||||
import { Logo_Path } from '@webdpt/framework/config'; | |||||
import { IDwForgetverificationType } from '@webdpt/framework/account'; | |||||
@Component({ | |||||
selector: 'app-forget', | |||||
templateUrl: './forget.component.html', | |||||
styleUrls: ['./forget.component.css'] | |||||
}) | |||||
export class ForgetComponent implements OnInit { | |||||
verificationType: Array<IDwForgetverificationType> = []; | |||||
constructor( | |||||
@Inject(Logo_Path) public dwLogoPath: string | |||||
) { } | |||||
ngOnInit(): void { | |||||
this.verificationType = [ | |||||
IDwForgetverificationType.EMAIL, | |||||
IDwForgetverificationType.MOBILEPHONE | |||||
]; | |||||
} | |||||
} |
@ -0,0 +1,25 @@ | |||||
import { NgModule } from '@angular/core'; | |||||
import { CommonModule } from '@angular/common'; | |||||
import { SharedModule } from '../../shared/shared.module'; | |||||
import { ForgetRoutingModule } from './forget-routing.module'; | |||||
import { ForgetComponent } from './forget.component'; | |||||
import { DwForgetModule } from '@webdpt/components/user/forget-block'; | |||||
import { NzGridModule } from 'ng-zorro-antd/grid'; | |||||
import { TranslateModule } from '@ngx-translate/core'; | |||||
@NgModule({ | |||||
imports: [ | |||||
CommonModule, | |||||
ForgetRoutingModule, | |||||
SharedModule, | |||||
DwForgetModule, | |||||
NzGridModule, | |||||
TranslateModule | |||||
], | |||||
declarations: [ | |||||
ForgetComponent | |||||
] | |||||
}) | |||||
export class ForgetModule { } |
@ -0,0 +1,34 @@ | |||||
import { NgModule } from '@angular/core'; | |||||
import { RouterModule, Routes } from '@angular/router'; | |||||
import { LoginComponent } from './login/login.component'; | |||||
const routes: Routes = [ | |||||
{ | |||||
path: '', | |||||
component: LoginComponent, | |||||
pathMatch: 'prefix', | |||||
data: { | |||||
dwRouteData: { | |||||
programId: 'dw-login' | |||||
} | |||||
} | |||||
}, | |||||
// { | |||||
// path: 'register', | |||||
// component: RegisterComponent | |||||
// }, | |||||
// { | |||||
// path: 'forgot', | |||||
// component: ForgotComponent | |||||
// } | |||||
]; | |||||
@NgModule({ | |||||
imports: [ | |||||
RouterModule.forChild(routes) | |||||
], | |||||
exports: [RouterModule] | |||||
}) | |||||
export class LoginRoutingModule { | |||||
} |
@ -0,0 +1,24 @@ | |||||
import { NgModule } from '@angular/core'; | |||||
import { CommonModule } from '@angular/common'; | |||||
import { SharedModule } from '../shared/shared.module'; | |||||
import { LoginRoutingModule } from './login-routing.module'; | |||||
import { LoginComponent } from './login/login.component'; | |||||
import { DwLoginModule } from '@webdpt/components/login'; | |||||
import { NzGridModule } from 'ng-zorro-antd/grid'; | |||||
import { TranslateModule } from '@ngx-translate/core'; | |||||
@NgModule({ | |||||
imports: [ | |||||
CommonModule, | |||||
LoginRoutingModule, | |||||
SharedModule, | |||||
DwLoginModule, | |||||
NzGridModule, | |||||
TranslateModule | |||||
], | |||||
declarations: [ | |||||
LoginComponent | |||||
] | |||||
}) | |||||
export class LoginModule { } |
@ -0,0 +1,30 @@ | |||||
.login-bg { | |||||
background-color: rgba(0, 21, 41, 1); | |||||
height: 100%; | |||||
padding-top: 100px; | |||||
} | |||||
.login-logo { | |||||
margin-bottom: 10px; | |||||
} | |||||
.login-form { | |||||
min-width: 250px; | |||||
} | |||||
.login-form-forgot { | |||||
float: right; | |||||
} | |||||
.login-form-button { | |||||
width: 100%; | |||||
} | |||||
.login-copyright { | |||||
text-align: center; | |||||
} | |||||
.login-copyright span { | |||||
font-size: 14px; | |||||
} | |||||
span { | |||||
color: white; | |||||
} |
@ -0,0 +1,19 @@ | |||||
<div nz-row class="login-bg"> | |||||
<div nz-col nzSpan="24" class="login-content"> | |||||
<div nz-row class="login-main-block"> | |||||
<div nz-col [nzXs]="'8'" [nzSm]="'8'" [nzMd]="'9'" [nzLg]="'9'"> | |||||
</div> | |||||
<div nz-col [nzXs]="'8'" [nzSm]="'8'" [nzMd]="'6'" [nzLg]="'6'" style="z-index: 1"> | |||||
<img class="login-logo" src="{{dwLogoPath | translate}}"> | |||||
<dw-login-block [showRemember]="true" [showLanguage]="true"></dw-login-block> | |||||
</div> | |||||
<div nz-col [nzXs]="'8'" [nzSm]="'8'" [nzMd]="'9'" [nzLg]="'9'"> | |||||
</div> | |||||
</div> | |||||
<div nz-row class="login-copyright-block" nzJustify="center"> | |||||
<div nz-col nzSpan="24" class="login-copyright"> | |||||
<span>© Data Systems Consulting Co., Ltd. All rights reserved.</span> | |||||
</div> | |||||
</div> | |||||
</div> | |||||
</div> |
@ -0,0 +1,84 @@ | |||||
import { Component, Injectable, Input, Pipe, PipeTransform } from '@angular/core'; | |||||
import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; | |||||
import { RouterTestingModule } from '@angular/router/testing'; | |||||
import { TranslatePipe, TranslateService } from '@ngx-translate/core'; | |||||
import { DwLoginModule } from '@webdpt/components/login'; | |||||
import { Logo_Path } from '@webdpt/framework/config'; | |||||
import { Observable } from 'rxjs/internal/Observable'; | |||||
import { of } from 'rxjs/internal/observable/of'; | |||||
import { LoginModule } from '../login.module'; | |||||
import { LoginComponent } from './login.component'; | |||||
describe('LoginComponent', () => { | |||||
let component: LoginComponent; | |||||
let fixture: ComponentFixture<LoginComponent>; | |||||
beforeEach(waitForAsync(() => { | |||||
TestBed.configureTestingModule({ | |||||
imports: [ | |||||
LoginModule, | |||||
RouterTestingModule | |||||
], | |||||
providers: [ | |||||
{ provide: TranslateService, useClass: TranslateServiceStub }, | |||||
{ provide: TranslatePipe, useClass: TranslatePipeMock }, | |||||
{ provide: Logo_Path, useValue: '/mock-logo-path' } | |||||
], | |||||
declarations: [LoginComponent] | |||||
}) | |||||
.overrideModule(DwLoginModule, { | |||||
set: { | |||||
imports: [], | |||||
declarations: [MockLoginComponent], | |||||
exports: [MockLoginComponent] | |||||
} | |||||
}) | |||||
.compileComponents(); | |||||
})); | |||||
beforeEach(() => { | |||||
fixture = TestBed.createComponent(LoginComponent); | |||||
component = fixture.componentInstance; | |||||
fixture.detectChanges(); | |||||
}); | |||||
it('should create', () => { | |||||
expect(component).toBeTruthy(); | |||||
}); | |||||
}); | |||||
@Pipe({ | |||||
name: 'translate' | |||||
}) | |||||
export class TranslatePipeMock implements PipeTransform { | |||||
public name = 'translate'; | |||||
public transform(query: string, ...args: any[]): any { | |||||
return query; | |||||
} | |||||
} | |||||
@Injectable() | |||||
export class TranslateServiceStub { | |||||
public instant(key: string, interpolateParams?: Object): string { | |||||
return key; | |||||
} | |||||
public get<T>(key: T): Observable<T> { | |||||
return of(key); | |||||
} | |||||
public onTranslationChange = of({ lang: 'TW' }); | |||||
public onLangChange = of({ translations: null }); | |||||
public onDefaultLangChange = of(true); | |||||
public currentLang = 'zh_TW'; | |||||
} | |||||
@Component({ | |||||
selector: 'dw-login-block', | |||||
template: ` | |||||
<div>mockLoginComponent</div> | |||||
` | |||||
}) | |||||
export class MockLoginComponent { | |||||
@Input() showRemember; | |||||
@Input() showLanguage; | |||||
} | |||||
@ -0,0 +1,16 @@ | |||||
import { Component, Inject, OnInit } from '@angular/core'; | |||||
import { Logo_Path } from '@webdpt/framework/config'; | |||||
@Component({ | |||||
selector: 'app-login', | |||||
templateUrl: './login.component.html', | |||||
styleUrls: ['./login.component.css'] | |||||
}) | |||||
export class LoginComponent { | |||||
constructor( | |||||
@Inject(Logo_Path) public dwLogoPath: string, | |||||
) { } | |||||
} |
@ -0,0 +1,26 @@ | |||||
import { NgModule } from '@angular/core'; | |||||
import { Routes, RouterModule } from '@angular/router'; | |||||
import { DwAuthGuardService } from '@webdpt/framework/auth'; | |||||
import { DwDefaultAppGuardService } from '@webdpt/framework/program-info'; | |||||
import { HomeComponent } from './home.component'; | |||||
const routes: Routes = [ | |||||
{ | |||||
path: '', | |||||
component: HomeComponent, | |||||
pathMatch: 'prefix', | |||||
canActivate: [DwAuthGuardService, DwDefaultAppGuardService], | |||||
data: { | |||||
dwRouteData: { | |||||
programId: 'home' | |||||
} | |||||
} | |||||
} | |||||
]; | |||||
@NgModule({ | |||||
imports: [RouterModule.forChild(routes)], | |||||
exports: [RouterModule] | |||||
}) | |||||
export class HomeRoutingModule { } |
@ -0,0 +1,6 @@ | |||||
::ng-deep .dw-f-header { | |||||
display: none; | |||||
} | |||||
::ng-deep .dw-f-menusider { | |||||
display: none; | |||||
} |
@ -0,0 +1,3 @@ | |||||
<p (click)="toLink()"> | |||||
home works! | |||||
</p> |
@ -0,0 +1,28 @@ | |||||
/* eslint-disable quotes */ | |||||
import { Component, OnInit } from "@angular/core"; | |||||
import { DwSsoService } from "@webdpt/framework"; | |||||
import { DigiMiddlewareAuthApp } from "../../../app/config/app-auth-token"; | |||||
@Component({ | |||||
selector: "app-home", | |||||
templateUrl: "./home.component.html", | |||||
styleUrls: ["./home.component.css"], | |||||
}) | |||||
export class HomeComponent implements OnInit { | |||||
constructor(private ssoService: DwSsoService) {} | |||||
userToken: string; | |||||
// eslint-disable-next-line @angular-eslint/use-lifecycle-interface | |||||
ngOnInit() { | |||||
const _this = this; | |||||
} | |||||
toLink() { | |||||
// const url = | |||||
// "http://PCC_MECH2-test.apps.digiwincloud.com.cn/sso-login?userToken=981dc293-8ccd-470f-9e36-99ba30af1324"; | |||||
const url = | |||||
"https://athena-test.digiwincloud.com.cn/sso-login?userToken=" + | |||||
this.userToken; | |||||
// const url = | |||||
// "https://athena-dev-platform-test.digiwincloud.com.cn/sso-login?userToken=981dc293-8ccd-470f-9e36-99ba30af1324"; | |||||
// console.log("url", url); | |||||
window.open(url); | |||||
} | |||||
} |
@ -0,0 +1,12 @@ | |||||
import { NgModule } from "@angular/core"; | |||||
import { CommonModule } from "@angular/common"; | |||||
import { SharedModule } from "../shared/shared.module"; | |||||
import { HomeRoutingModule } from "./home-routing.module"; | |||||
import { HomeComponent } from "./home.component"; | |||||
@NgModule({ | |||||
imports: [CommonModule, SharedModule, HomeRoutingModule], | |||||
declarations: [HomeComponent], | |||||
}) | |||||
export class HomeModule {} |
@ -0,0 +1,23 @@ | |||||
/* eslint-disable quotes */ | |||||
import { Routes } from "@angular/router"; | |||||
export const IMPLEMENTATION_ROUTES: Routes = [ | |||||
// 設定應用開發應用模組路由 | |||||
// { | |||||
// path: "", // 首頁 | |||||
// // eslint-disable-next-line quotes | |||||
// pathMatch: "prefix", | |||||
// loadChildren: (): Promise<any> => | |||||
// import("./programs/large-home/large-home.module").then( | |||||
// (m) => m.LargeHomeModule | |||||
// ), | |||||
// }, | |||||
// { | |||||
// path: "", // 新的路由 | |||||
// pathMatch: "prefix", | |||||
// loadChildren: (): any => | |||||
// import("./programs/large-home/large-home.module").then( | |||||
// (m) => m.LargeHomeModule | |||||
// ), | |||||
// }, | |||||
]; |
@ -0,0 +1,46 @@ | |||||
/* eslint-disable quotes */ | |||||
import { NgModule } from "@angular/core"; | |||||
import { RouterModule, Routes } from "@angular/router"; | |||||
import { MODULE_ROUTES } from "../routes"; | |||||
import { DwLayoutDefaultComponent } from "@webdpt/components/layout"; | |||||
import { DwSsoLoginComponent } from "@webdpt/components/sso-login"; | |||||
import { LayoutComponent } from "./layout/layout.component"; | |||||
import { | |||||
DwAuthGuardService, | |||||
DwDefaultAppGuardService, | |||||
} from "@webdpt/framework"; | |||||
const routes: Routes = [ | |||||
{ | |||||
path: "", | |||||
pathMatch: "prefix", | |||||
component: LayoutComponent, | |||||
canActivate: [DwAuthGuardService, DwDefaultAppGuardService], // 登录拦截 | |||||
children: [...MODULE_ROUTES], | |||||
data: { | |||||
tabSetHosting: true, | |||||
}, | |||||
}, | |||||
{ | |||||
path: "login", | |||||
pathMatch: "full", | |||||
loadChildren: (): Promise<any> => | |||||
import("./auth/login.module").then((m) => m.LoginModule), | |||||
}, | |||||
{ | |||||
path: "forget", | |||||
pathMatch: "full", | |||||
loadChildren: (): Promise<any> => | |||||
import("./auth/forget/forget.module").then((m) => m.ForgetModule), | |||||
}, | |||||
{ | |||||
path: "sso-login", | |||||
pathMatch: "full", | |||||
component: DwSsoLoginComponent, | |||||
}, | |||||
]; | |||||
@NgModule({ | |||||
imports: [RouterModule.forChild(routes)], | |||||
exports: [RouterModule], | |||||
}) | |||||
export class ImplementationRoutingModule {} |
@ -0,0 +1,77 @@ | |||||
import { NgModule, ModuleWithProviders } from "@angular/core"; | |||||
import { CommonModule } from "@angular/common"; | |||||
import { Provider } from "@angular/compiler/src/core"; | |||||
import { HTTP_INTERCEPTORS } from "@angular/common/http"; | |||||
import { | |||||
DW_MENU_JSON, | |||||
DW_PROGRAM_JSON, | |||||
DW_TAB_ROUTE_CONFIG_JSON, | |||||
DW_LANGUAGE_JSON, | |||||
} from "@webdpt/framework/config"; | |||||
import { DW_PROGRAM_PAGE, DW_PROGRAM_ACTION } from "@webdpt/framework/config"; | |||||
import { DwHttpApiInterceptor } from "@webdpt/framework/http"; | |||||
import { ImplementationRoutingModule } from "./implementation-routing.module"; | |||||
import { SharedModule } from "./shared/shared.module"; | |||||
import { menuJson } from "./menu/model/menu.config"; | |||||
import { programInfoJson } from "./program-info/model/program.config"; | |||||
import { programPageInfoJson } from "./program-info/model/program-page.config"; | |||||
import { programActionInfoJson } from "./program-info/model/program-action.config"; | |||||
import { tabRouteConfigJson } from "./tab-route/model/tab-route-config"; | |||||
import { languageList } from "./language/model/language.config"; | |||||
import { openSelectModalDefault } from "./shared/select-modal/default"; | |||||
import { openOrgTreeModalDefault } from "./shared/organize-tree-modal/default"; | |||||
import { DW_SELECT_MODAL_DEFAULT } from "@webdpt/components/modals/select"; | |||||
import { DW_ORGTREE_MODAL_DEFAULT } from "@webdpt/framework/organize-tree-core"; | |||||
import { LayoutComponent } from "./layout/layout.component"; | |||||
// import { themeConfig } from '../config/theme.config'; | |||||
import { DwMainLayoutModule } from "@webdpt/components/layout"; | |||||
@NgModule({ | |||||
imports: [ | |||||
CommonModule, | |||||
ImplementationRoutingModule, | |||||
SharedModule, // 共享模組 | |||||
DwMainLayoutModule, | |||||
], | |||||
declarations: [LayoutComponent], | |||||
providers: [], | |||||
}) | |||||
export class ImplementationModule { | |||||
static forRoot( | |||||
providers: Provider[] | |||||
): ModuleWithProviders<ImplementationModule> { | |||||
return { | |||||
ngModule: ImplementationModule, | |||||
providers: [ | |||||
// --------------------------------------------------------- | |||||
// | 選配 | |||||
// --------------------------------------------------------- | |||||
// 靜態設定檔 | |||||
// { provide: DW_THEME, useValue: themeConfig }, // 主題設定檔 | |||||
{ provide: DW_MENU_JSON, useValue: menuJson }, // Menu靜態設定檔 | |||||
{ provide: DW_LANGUAGE_JSON, useValue: languageList }, // 可用語言清單 | |||||
{ provide: DW_PROGRAM_JSON, useValue: programInfoJson }, // 作業靜態設定檔 | |||||
{ provide: DW_PROGRAM_PAGE, useValue: programPageInfoJson }, // 作業子頁面設定檔 | |||||
{ provide: DW_PROGRAM_ACTION, useValue: programActionInfoJson }, // 作業功能設定檔 | |||||
{ provide: DW_TAB_ROUTE_CONFIG_JSON, useValue: tabRouteConfigJson }, // 多頁佈局預設開啟作業 | |||||
{ provide: DW_SELECT_MODAL_DEFAULT, useValue: openSelectModalDefault }, // 開窗服務的共用設定值 | |||||
{ | |||||
provide: DW_ORGTREE_MODAL_DEFAULT, | |||||
useValue: openOrgTreeModalDefault, | |||||
}, // 組織人員樹開窗元件 | |||||
// Http API 攔截器 | |||||
DwHttpApiInterceptor, | |||||
{ | |||||
provide: HTTP_INTERCEPTORS, | |||||
// 用來替換api的網址 | |||||
// request.url = '/users'; => request.url = 'http://api/users'; | |||||
useExisting: DwHttpApiInterceptor, | |||||
multi: true, | |||||
}, | |||||
...providers, | |||||
], | |||||
}; | |||||
} | |||||
} |
@ -0,0 +1,15 @@ | |||||
// 可用語言清單靜態設定檔 | |||||
export const languageList = [ | |||||
{ | |||||
'value': 'en_US', | |||||
'label': 'English' | |||||
}, | |||||
{ | |||||
'value': 'zh_CN', | |||||
'label': '简体' | |||||
}, | |||||
{ | |||||
'value': 'zh_TW', | |||||
'label': '繁體' | |||||
} | |||||
]; |
@ -0,0 +1,66 @@ | |||||
<!-- <ng-template #headerRightActionTemplate> | |||||
自訂headerRightActionTemplate | |||||
</ng-template> --> | |||||
<div class="layout-box"> | |||||
<!-- <div class="get-token-box" (click)="toLinkSystem()"> | |||||
sid请求token跳转 | |||||
</div> --> | |||||
<!-- <dw-layout-app> | |||||
<dw-layout-basic-side [collapsedWidth]="0" [breakpoint]="'lg'" [routeSelectMenu]="false" | |||||
> | |||||
</dw-layout-basic-side> | |||||
</dw-layout-app> --> | |||||
<div class="top-box"> | |||||
<div class="top-system-content "> | |||||
<div class="system-box "(click)="toLinkSystem('partsCloud')"> | |||||
<span style="color:#fff;opacity: 1;">零部件云</span> | |||||
</div> | |||||
</div> | |||||
</div> | |||||
<div class="center-box"> | |||||
<div class="system-content div-position1"> | |||||
<div class="system-box "(click)="toLinkSystem('DMP')"> | |||||
<span style="color:#fff;opacity: 1;">数据中台</span> | |||||
</div> | |||||
</div> | |||||
<div class="system-content div-position2 "> | |||||
<div class="system-box"(click)="toLinkSystem('chatFile')"> | |||||
<span style="color:#fff;opacity: 1;">chatFile</span> | |||||
</div> | |||||
</div> | |||||
<div class="system-content div-position3 "> | |||||
<div class="system-box"(click)="toLinkSystem('KMO')"> | |||||
<span style="color:#fff;opacity: 1;">知识中台</span> | |||||
</div> | |||||
</div> | |||||
<div class="system-content div-position4 "> | |||||
<div class="system-box"(click)="toLinkSystem('EIP')"> | |||||
<span style="color:#fff;opacity: 1;">智驱工作台</span> | |||||
</div> | |||||
</div> | |||||
<div class="system-content div-position5 "> | |||||
<div class="system-box"(click)="toLinkSystem('AIOT')"> | |||||
<span style="color:#fff;opacity: 1;">AIOT</span> | |||||
</div> | |||||
</div> | |||||
<div class="system-content div-position6 "> | |||||
<div class="system-box"(click)="toLinkSystem('equipmentCloud')"> | |||||
<span style="color:#fff;opacity: 1;">装备云</span> | |||||
</div> | |||||
</div> | |||||
</div> | |||||
<div class="bottom-box"> | |||||
<div class="bottom-system-content "> | |||||
<div class="system-box"(click)="toLinkSystem('E10229')"> | |||||
<span style="color:#fff;opacity: 1;">E10</span> | |||||
</div> | |||||
</div> | |||||
<div class="bottom-system-content "> | |||||
<div class="system-box"(click)="toLinkSystem('T100bs')"> | |||||
<span style="color:#fff;opacity: 1;">T100</span> | |||||
</div> | |||||
</div> | |||||
</div> | |||||
</div> |
@ -0,0 +1,159 @@ | |||||
/deep/.dw-f-header { | |||||
// display: none; | |||||
box-shadow: none; | |||||
} | |||||
/deep/.dw-f-menusider { | |||||
display: none; | |||||
} | |||||
/deep/.dw-f-header .dw-header-left { | |||||
display: none; | |||||
} | |||||
/deep/.dw-f-header .dw-header-right .dw-f-header-item { | |||||
display: none; | |||||
} | |||||
/deep/.dw-header-icon { | |||||
position: fixed; | |||||
right: 10px; | |||||
color: #fff; | |||||
} | |||||
/deep/nz-layout.ant-layout { | |||||
display: inline-block; | |||||
} | |||||
.layout-box { | |||||
position: relative; | |||||
width: 100%; | |||||
height: 100%; | |||||
overflow: hidden; | |||||
background-image: url("../../../assets/img/new-bg.jpg"); | |||||
background-repeat: no-repeat; | |||||
background-size: cover; | |||||
background-position: center; | |||||
.top-box { | |||||
// background: rgba(0, 0, 0, 0.5); | |||||
width: 85%; | |||||
height: 10%; | |||||
position: absolute; | |||||
display: flex; | |||||
justify-content: flex-end; | |||||
box-sizing: border-box; | |||||
left: 0; | |||||
top: 16%; | |||||
/* bottom: 0; */ | |||||
right: 0; | |||||
margin: auto; | |||||
} | |||||
.top-system-content { | |||||
width: 80px; | |||||
height: 80px; | |||||
box-shadow: 2px 2px 4px rgba(124, 199, 243, 0.6); | |||||
// opacity: 0.6; | |||||
border-radius: 40px; | |||||
background: rgba(0, 0, 0, 0.5); | |||||
margin: 5px; | |||||
padding: 10px; | |||||
font-weight: bold; | |||||
display: flex; | |||||
text-align: center; | |||||
justify-content: flex-start; | |||||
align-items: center; | |||||
cursor: pointer; | |||||
} | |||||
.center-box { | |||||
// background: rgba(0, 0, 0, 0.5); | |||||
width: 60%; | |||||
height: 50%; | |||||
position: absolute; | |||||
display: flex; | |||||
justify-content: space-between; | |||||
box-sizing: border-box; | |||||
left: 0; | |||||
top: 20%; | |||||
bottom: 0; | |||||
right: 0; | |||||
margin: auto; | |||||
} | |||||
.system-content { | |||||
width: 80px; | |||||
height: 80px; | |||||
box-shadow: 2px 2px 4px rgba(124, 199, 243, 0.6); | |||||
// opacity: 0.6; | |||||
border-radius: 40px; | |||||
background: rgba(0, 0, 0, 0.5); | |||||
margin: 5px; | |||||
padding: 10px; | |||||
font-weight: bold; | |||||
display: flex; | |||||
text-align: left; | |||||
justify-content: flex-start; | |||||
align-items: center; | |||||
cursor: pointer; | |||||
.div-position7 { | |||||
right: 5%; | |||||
position: absolute; | |||||
top: 35%; | |||||
} | |||||
} | |||||
.div-position1 { | |||||
left: 20%; | |||||
position: absolute; | |||||
top: 20%; | |||||
} | |||||
.div-position2 { | |||||
position: absolute; | |||||
right: 20%; | |||||
top: 20%; | |||||
} | |||||
.div-position3 { | |||||
right: 22%; | |||||
position: absolute; | |||||
top: 46%; | |||||
} | |||||
.div-position4 { | |||||
left: 24%; | |||||
position: absolute; | |||||
top: 46%; | |||||
} | |||||
.div-position5 { | |||||
left: 7%; | |||||
position: absolute; | |||||
top: 32%; | |||||
} | |||||
.div-position6 { | |||||
right: 5%; | |||||
position: absolute; | |||||
top: 35%; | |||||
} | |||||
.bottom-box { | |||||
// background: rgba(245, 186, 186, 0.5); | |||||
width: 60%; | |||||
height: 100px; | |||||
position: absolute; | |||||
display: flex; | |||||
justify-content: flex-start; | |||||
box-sizing: border-box; | |||||
left: 0; | |||||
bottom: 5%; | |||||
right: 0; | |||||
margin: auto; | |||||
} | |||||
.bottom-system-content { | |||||
width: 80px; | |||||
height: 80px; | |||||
box-shadow: 2px 2px 4px rgba(124, 199, 243, 0.6); | |||||
// opacity: 0.6; | |||||
border-radius: 40px; | |||||
background: rgba(0, 0, 0, 0.5); | |||||
margin: 5px; | |||||
padding: 10px; | |||||
font-weight: bold; | |||||
display: flex; | |||||
text-align: center; | |||||
justify-content: flex-start; | |||||
align-items: center; | |||||
cursor: pointer; | |||||
} | |||||
} | |||||
// .system-content:hover .system-box { | |||||
// transform: scale(1.1); /* 鼠标悬停时放大1.1倍 */ | |||||
// } |
@ -0,0 +1,140 @@ | |||||
/* eslint-disable quotes */ | |||||
import { systemList } from "./system"; | |||||
// import { DwHttpApiInterceptor } from "@webdpt/framework/http"; | |||||
/* eslint-disable quotes */ | |||||
import { Component, OnInit } from "@angular/core"; | |||||
import { | |||||
DigiMiddlewareAuthApp, | |||||
DigiMiddlewareAuthUser, | |||||
} from "app/config/app-auth-token"; | |||||
import { CommonService } from "../service/common.service"; | |||||
@Component({ | |||||
selector: "app-layout", | |||||
templateUrl: "./layout.component.html", | |||||
styleUrls: ["./layout.component.less"], | |||||
}) | |||||
export class LayoutComponent implements OnInit { | |||||
// 登出: https://iam-test.digiwincloud.com.cn/api/iam/v2/identity/logout | |||||
userToken: string; | |||||
systemList = {}; | |||||
user_info = { | |||||
userId: "", // 当前用户账号 | |||||
tenantId: "", // 当前用户租户id | |||||
productKey: "", // json字段的头部 | |||||
}; | |||||
queryDisplayList: any; | |||||
constructor(private commonService: CommonService) {} | |||||
ngOnInit(): void { | |||||
this.systemList = systemList; | |||||
this.getSystem(); | |||||
} | |||||
toLinkSystem(type?) { | |||||
// 1. 通过获取user_token获取单点登录链接 | |||||
// 请求获取user_token | |||||
switch (type) { | |||||
case "DMP": | |||||
this.getUserToken(type, this.systemList["T100bs"]); | |||||
break; | |||||
case "chatFile": | |||||
this.getUserToken(type, this.systemList["chatFile"]); | |||||
break; | |||||
case "KMO": | |||||
this.getUserToken(type, this.systemList["KMO"]); | |||||
break; | |||||
case "EIP": | |||||
this.getUserToken(type, this.systemList["EIP"]); | |||||
break; | |||||
case "AIOT": | |||||
this.getUserToken(type, this.systemList["AIOT"]); | |||||
break; | |||||
case "equipmentCloud": | |||||
this.getUserToken(type, this.systemList["equipmentCloud"]); | |||||
break; | |||||
case "partsCloud": | |||||
this.getUserToken(type, this.systemList["partsCloud"]); | |||||
break; | |||||
case "E10229": | |||||
this.getUserToken(type, this.systemList["E10229"]); | |||||
break; | |||||
case "T100bs": | |||||
this.getUserToken(type, this.systemList["T100bs"]); | |||||
break; | |||||
} | |||||
} | |||||
/** | |||||
* 通过请求queryDisplayList接口登录 | |||||
*/ | |||||
getSystem() { | |||||
const headers = { | |||||
"Digi-Middleware-Auth-App": DigiMiddlewareAuthApp, | |||||
"Digi-Middleware-Auth-User": DigiMiddlewareAuthUser, | |||||
}; | |||||
this.commonService | |||||
.getRequestWithHeaders( | |||||
"https://semc.apps.digiwincloud.com.cn/tenant/semc/applink/queryDisplayList", | |||||
headers | |||||
) | |||||
.then((res) => { | |||||
this.queryDisplayList = res.response; | |||||
console.log("queryDisplayList", this.queryDisplayList); | |||||
}) | |||||
.catch((error) => console.error(error)); | |||||
} | |||||
/** | |||||
* 通过tenantId获取用户token | |||||
*/ | |||||
async getUserToken(type, item) { | |||||
if (item.ssoLogin) { | |||||
// 单点登录跳转 queryDisplayList接口的数据 底部 e10 t100 | |||||
console.log("单点登录跳转录的方式", type); | |||||
const queryDisplayList = this.queryDisplayList.filter((arr) => { | |||||
return arr.code === type; | |||||
}); | |||||
// console.log("cloudwebsite", queryDisplayList[0]["cloudwebsite"]); | |||||
window.open(queryDisplayList[0]["cloudwebsite"]); | |||||
} else if (item.mockLogin) { | |||||
console.log("模拟登录的方式", type); | |||||
// 通过书康哥接口请求 模拟登录 | |||||
const DwUserInfo = JSON.parse(sessionStorage.getItem("DwUserInfo")); | |||||
console.log("DwUserInfo", DwUserInfo); | |||||
this.user_info.userId = DwUserInfo["userId"]; | |||||
this.user_info.tenantId = DwUserInfo["tenantId"]; | |||||
this.user_info.productKey = type; | |||||
console.log("user_info", this.user_info); | |||||
const getUrl = | |||||
"https://demo-athenaopt.apps.digiwincloud.com.cn/restful/standard/demo/api/default/login"; | |||||
this.commonService | |||||
.postWithHeaders(getUrl, this.user_info, {}) | |||||
.then((res) => { | |||||
// console.log("res", res); | |||||
if (res && res.response) { | |||||
this.userToken = res.response.user_token; | |||||
const url = item.url + "/sso-login?userToken=" + this.userToken; | |||||
window.open(url); | |||||
} | |||||
}); | |||||
} else { | |||||
console.log("切换租户的方式", type); | |||||
// 接口 refresh/tenant 切换租户方式 | |||||
const getUrl = | |||||
this.commonService.iamUrl + "/api/iam/v2/identity/token/refresh/tenant"; | |||||
console.log("iamUrl", this.commonService.iamUrl); | |||||
const headers = { | |||||
"Digi-Middleware-Auth-App": DigiMiddlewareAuthApp, | |||||
"Digi-Middleware-Auth-User": DigiMiddlewareAuthUser, | |||||
}; | |||||
const data = { | |||||
tenantSid: item.sid, | |||||
}; | |||||
this.userToken = await this.commonService | |||||
.postWithHeaders(getUrl, data, headers) | |||||
.then((res) => { | |||||
// console.log("res", res); | |||||
return res.user_token; | |||||
}); | |||||
let url = ""; | |||||
url = item.url + "/sso-login?userToken=" + this.userToken; | |||||
window.open(url); | |||||
} | |||||
} | |||||
} |
@ -0,0 +1,76 @@ | |||||
/* eslint-disable quotes */ | |||||
export const systemList = { | |||||
DMP: { | |||||
title: "数据中台", | |||||
sid: 150269977879104, | |||||
id: "zhoujg", | |||||
name: "鼎捷集团售前", | |||||
url: "https://dmp-dmf-hw-ys.digiwincloud.com.cn", | |||||
mockLogin: false, | |||||
ssoLogin: false, | |||||
}, | |||||
chatFile: { | |||||
title: "chatFile", | |||||
sid: 610301619790400, | |||||
id: "ShanghaiWorldExpo", | |||||
name: "ChatFile演示", | |||||
url: "https://kcf.apps.digiwincloud.com.cn", | |||||
mockLogin: false, | |||||
ssoLogin: false, | |||||
}, | |||||
KMO: { | |||||
title: "知识中台", | |||||
sid: 610301619790400, | |||||
id: "ShanghaiWorldExpo", | |||||
name: "ChatFile演示", | |||||
url: "https://kcf.apps.digiwincloud.com.cn", | |||||
mockLogin: false, | |||||
ssoLogin: false, | |||||
}, | |||||
EIP: { | |||||
title: "智驱工作台", | |||||
sid: 821224928908288, | |||||
id: "digiwinSummit", | |||||
name: "数智未来峰会", | |||||
url: "https://athena.digiwincloud.com.cn", | |||||
mockLogin: false, | |||||
ssoLogin: false, | |||||
}, | |||||
AIOT: { | |||||
title: "AIOT", | |||||
sid: 190963220054592, | |||||
id: "zhoujg999", | |||||
name: "鼎鼎塑料集团", | |||||
url: "https://console.digiwincloud.com.cn", | |||||
mockLogin: false, | |||||
ssoLogin: false, | |||||
}, | |||||
equipmentCloud: { | |||||
title: "装备云", | |||||
sid: 821224928908288, | |||||
id: "digiwinSummit", | |||||
name: "数智未来峰会", | |||||
url: "https://athena.digiwincloud.com.cn", | |||||
mockLogin: false, | |||||
ssoLogin: false, | |||||
}, | |||||
partsCloud: { | |||||
title: "零部件云", | |||||
sid: 821224928908288, | |||||
id: "digiwinSummit", | |||||
name: "数智未来峰会", | |||||
url: "https://athena.digiwincloud.com.cn", | |||||
mockLogin: true, | |||||
ssoLogin: false, | |||||
}, | |||||
E10229: { | |||||
title: "E10", | |||||
mockLogin: false, | |||||
ssoLogin: true, | |||||
}, | |||||
T100bs: { | |||||
title: "T100", | |||||
mockLogin: false, | |||||
ssoLogin: true, | |||||
}, | |||||
}; |
@ -0,0 +1,5 @@ | |||||
import { menuData } from './menu.model'; // Menu靜態設定檔 | |||||
export const menuJson = [ | |||||
...menuData | |||||
]; |
@ -0,0 +1 @@ | |||||
export const menuData = []; |
@ -0,0 +1,6 @@ | |||||
import { programActionData } from './program-action.model'; | |||||
export const programActionInfoJson = [ | |||||
...programActionData // ProgramAction靜態設定檔 | |||||
]; |
@ -0,0 +1 @@ | |||||
export const programActionData = []; |
@ -0,0 +1,6 @@ | |||||
import { programPageData } from './program-page.model'; | |||||
export const programPageInfoJson = [ | |||||
...programPageData // ProgramPage靜態設定檔 | |||||
]; |
@ -0,0 +1 @@ | |||||
export const programPageData = []; |
@ -0,0 +1,5 @@ | |||||
import { programData } from './program.model'; | |||||
export const programInfoJson = [ | |||||
...programData, // Program靜態設定檔 | |||||
]; |
@ -0,0 +1,8 @@ | |||||
export const programData = [ | |||||
{ | |||||
'id': 'home', | |||||
'module': 'root', // 沒有模組歸屬不做模組切分,不上傳到IAM做權限控管 | |||||
'type': '', | |||||
'routerLink': '/' | |||||
}, | |||||
]; |
@ -0,0 +1,41 @@ | |||||
import { NgModule } from '@angular/core'; | |||||
import { RouterModule, Routes } from '@angular/router'; | |||||
import { LagrgeHomeComponent } from './lagrge-home.component'; | |||||
import { DwLanguageService } from '@webdpt/framework/language'; | |||||
import { DwAuthGuardService } from '@webdpt/framework/auth'; | |||||
const routes: Routes = [ | |||||
{ | |||||
path: '', | |||||
pathMatch: 'prefix', | |||||
canActivate: [DwAuthGuardService], | |||||
data: { | |||||
dwRouteData: { | |||||
programId: 'lagrge-home', | |||||
dwAuthId: 'lagrge-home' | |||||
} | |||||
}, | |||||
resolve: { | |||||
transaction: DwLanguageService | |||||
}, | |||||
children: [ | |||||
{ | |||||
path: "", | |||||
pathMatch: "prefix", | |||||
component: LagrgeHomeComponent, | |||||
canActivate: [DwAuthGuardService], | |||||
data: { | |||||
dwRouteData: { | |||||
dwAuthId: 'lagrge-home', | |||||
} | |||||
} | |||||
} | |||||
] | |||||
} | |||||
]; | |||||
@NgModule({ | |||||
imports: [RouterModule.forChild(routes)], | |||||
exports: [RouterModule] | |||||
}) | |||||
export class LagrgeHomeRoutingModule { } |
@ -0,0 +1,3 @@ | |||||
<div> | |||||
自定义 | |||||
</div> |
@ -0,0 +1,25 @@ | |||||
import { ComponentFixture, TestBed } from '@angular/core/testing'; | |||||
import { LagrgeHomeComponent } from './lagrge-home.component'; | |||||
describe('LagrgeHomeComponent', () => { | |||||
let component: LagrgeHomeComponent; | |||||
let fixture: ComponentFixture<LagrgeHomeComponent>; | |||||
beforeEach(async () => { | |||||
await TestBed.configureTestingModule({ | |||||
declarations: [ LagrgeHomeComponent ] | |||||
}) | |||||
.compileComponents(); | |||||
}); | |||||
beforeEach(() => { | |||||
fixture = TestBed.createComponent(LagrgeHomeComponent); | |||||
component = fixture.componentInstance; | |||||
fixture.detectChanges(); | |||||
}); | |||||
it('should create', () => { | |||||
expect(component).toBeTruthy(); | |||||
}); | |||||
}); |
@ -0,0 +1,15 @@ | |||||
import { Component, OnInit } from '@angular/core'; | |||||
@Component({ | |||||
selector: 'app-lagrge-home', | |||||
templateUrl: './lagrge-home.component.html', | |||||
styleUrls: ['./lagrge-home.component.less'] | |||||
}) | |||||
export class LagrgeHomeComponent implements OnInit { | |||||
constructor() { } | |||||
ngOnInit(): void { | |||||
} | |||||
} |
@ -0,0 +1,17 @@ | |||||
import { NgModule } from '@angular/core'; | |||||
import { CommonModule } from '@angular/common'; | |||||
import { LagrgeHomeRoutingModule } from './lagrge-home-routing.module'; | |||||
import { LagrgeHomeComponent } from './lagrge-home.component'; | |||||
@NgModule({ | |||||
declarations: [ | |||||
LagrgeHomeComponent | |||||
], | |||||
imports: [ | |||||
CommonModule, | |||||
LagrgeHomeRoutingModule | |||||
] | |||||
}) | |||||
export class LagrgeHomeModule { } |
@ -0,0 +1,13 @@ | |||||
import { NgModule } from '@angular/core'; | |||||
import { Routes, RouterModule } from '@angular/router'; | |||||
const routes: Routes = [ | |||||
{ | |||||
path: 'lagrge-home', loadChildren: () => import('./lagrge-home/lagrge-home.module').then(m => m.LagrgeHomeModule) | |||||
}]; | |||||
@NgModule({ | |||||
imports: [RouterModule.forChild(routes)], | |||||
exports: [RouterModule] | |||||
}) | |||||
export class LargeHomeRoutingModule { } |
@ -0,0 +1,18 @@ | |||||
import { NgModule } from '@angular/core'; | |||||
import { CommonModule } from '@angular/common'; | |||||
import { LargeHomeRoutingModule } from './large-home-routing.module'; | |||||
const programsModules = [ | |||||
]; | |||||
@NgModule({ | |||||
imports: [ | |||||
CommonModule, | |||||
LargeHomeRoutingModule, | |||||
...programsModules | |||||
], | |||||
declarations: [] | |||||
}) | |||||
export class LargeHomeModule { } |
@ -0,0 +1,117 @@ | |||||
/* eslint-disable quotes */ | |||||
import { HttpClient } from "@angular/common/http"; | |||||
import { Inject, Injectable } from "@angular/core"; | |||||
import { Observable } from "rxjs"; | |||||
import { DwSystemConfigService } from "@webdpt/framework/config"; | |||||
import { DW_AUTH_TOKEN } from "@webdpt/framework/auth"; | |||||
@Injectable({ providedIn: "root" }) | |||||
export class CommonService { | |||||
atdmUrl: string; | |||||
bpmUrl: string; | |||||
atmcUrl: any; | |||||
frcUrl: any; | |||||
eocUrl: any; | |||||
iamUrl: any; | |||||
themeMapUrl: any; | |||||
pageData: any; | |||||
// 记录机制的content参数 | |||||
content: any; | |||||
uibotUrl: string; | |||||
isDisabled: boolean; | |||||
caLqsUrl: string; | |||||
constructor( | |||||
@Inject(DW_AUTH_TOKEN) protected authToken: any, | |||||
private http: HttpClient, | |||||
private configService: DwSystemConfigService | |||||
) { | |||||
this.configService.get("atdmUrl").subscribe((url: string): void => { | |||||
this.atdmUrl = url; | |||||
}); | |||||
this.configService.get("bpmUrl").subscribe((url): void => { | |||||
this.bpmUrl = url; | |||||
}); | |||||
this.configService.get("atmcUrl").subscribe((url): void => { | |||||
this.atmcUrl = url; | |||||
}); | |||||
this.configService.get("frcUrl").subscribe((url): void => { | |||||
this.frcUrl = url; | |||||
}); | |||||
this.configService.get("eocUrl").subscribe((url): void => { | |||||
this.eocUrl = url; | |||||
}); | |||||
this.configService.get("uibotUrl").subscribe((url: string): void => { | |||||
this.uibotUrl = url; | |||||
}); | |||||
this.configService.get("caLqsUrl").subscribe((url: string): void => { | |||||
this.caLqsUrl = url; | |||||
// console.log("caLqsUrl", this.caLqsUrl); | |||||
}); | |||||
this.configService.get("iamUrl").subscribe((url: string): void => { | |||||
this.iamUrl = url; | |||||
console.log("iamUrl", this.iamUrl); | |||||
}); | |||||
} | |||||
getHeader(): any { | |||||
if (this.authToken?.token) { | |||||
return { | |||||
"digi-middleware-auth-user": this.authToken.token, | |||||
token: this.authToken.token, | |||||
}; | |||||
} | |||||
return {}; | |||||
} | |||||
/** | |||||
* | |||||
* @param url | |||||
* @param data | |||||
* @param headers | |||||
* @returns | |||||
*/ | |||||
postWithHeaders(url, data, headers) { | |||||
headers = headers || {}; | |||||
headers["Content-Type"] = "application/json"; // 设置默认的Content-Type | |||||
const options = { | |||||
method: "POST", | |||||
headers: headers, | |||||
body: JSON.stringify(data), | |||||
}; | |||||
return fetch(url, options) | |||||
.then((response) => { | |||||
if (response.ok) { | |||||
return response.json(); | |||||
} | |||||
throw new Error("请求出错!"); | |||||
}) | |||||
.catch((error) => { | |||||
console.error("请求出错!", error); | |||||
throw error; | |||||
}); | |||||
} | |||||
/** | |||||
* | |||||
* @param url | |||||
* @param headers | |||||
* @returns | |||||
*/ | |||||
getRequestWithHeaders(url, headers) { | |||||
return fetch(url, { | |||||
method: "GET", | |||||
headers: headers, | |||||
}) | |||||
.then((response) => { | |||||
if (!response.ok) { | |||||
throw new Error("Network response was not ok " + response.statusText); | |||||
} | |||||
return response.json(); | |||||
}) | |||||
.catch((error) => { | |||||
console.error( | |||||
"There has been a problem with your fetch operation:", | |||||
error | |||||
); | |||||
}); | |||||
} | |||||
} |
@ -0,0 +1,4 @@ | |||||
import { IDwOrgTreeDefault } from '@webdpt/framework/organize-tree-core'; | |||||
import { NzTreeNode } from 'ng-zorro-antd/tree'; | |||||
export const openOrgTreeModalDefault: IDwOrgTreeDefault<NzTreeNode> = {}; |
@ -0,0 +1,20 @@ | |||||
import { IDwSelectModalCustomizeConfig } from '@webdpt/components/modals/select'; | |||||
export const openSelectModalDefault: IDwSelectModalCustomizeConfig = { | |||||
modalTitle: 'default', // modal 標題. | |||||
modalWidth: '80%', // modal 寬度. | |||||
modalOkText: 'dw-determine', // 確認按鈕文字. | |||||
modalCancelText: 'dw-cancel', // 取消按鈕文字. | |||||
tableIdField: '', // 使用的 id 欄位. | |||||
tableNameField: '', // 使用的 name 欄位. | |||||
tableColDefs: [], // 表格欄位定義. | |||||
tableMultiSelect: true, // 多選或單選. | |||||
tableShowTag: true, // 是否顯示下方的 tag. | |||||
tableIsFilter: true, // 是否提供搜尋. | |||||
tablePageSize: 3, // 每頁展示多少數據,可雙向繫結. | |||||
tableShowPagination: true, // 是否顯示分頁器. | |||||
tableShowSizeChanger: true, // 是否可以改變 dwPageSize. | |||||
tableNoResult: '', // 無數據時顯示內容, 空值則使用預設值. | |||||
tablePageSizeOptions: [5, 10, 15, 20], // 頁數選擇器可選值. | |||||
dataSource: null // 資料源 service. | |||||
}; |
@ -0,0 +1,24 @@ | |||||
import { NgModule } from '@angular/core'; | |||||
import { CommonModule } from '@angular/common'; | |||||
import { FormsModule, ReactiveFormsModule } from '@angular/forms'; | |||||
import { DwExceptionModule } from '@webdpt/components/exception'; | |||||
/** | |||||
* 共享模組 | |||||
* | |||||
* @export | |||||
* @class SharedModule | |||||
*/ | |||||
@NgModule({ | |||||
imports: [ | |||||
CommonModule, | |||||
FormsModule, | |||||
ReactiveFormsModule | |||||
], | |||||
exports: [ | |||||
FormsModule, | |||||
ReactiveFormsModule, | |||||
DwExceptionModule | |||||
] | |||||
}) | |||||
export class SharedModule { } |
@ -0,0 +1 @@ | |||||
@import './variable.less'; |
@ -0,0 +1,10 @@ | |||||
// 多頁佈局預設開啟作業 | |||||
export const tabRouteConfigJson = [ | |||||
{ | |||||
'id': 'home', | |||||
'canClose': false, | |||||
'defaultOpen': true, | |||||
'canMultiOpen': false, | |||||
'iconClass': 'dwType:home' | |||||
} | |||||
]; |
@ -0,0 +1,17 @@ | |||||
import { NgModule } from '@angular/core'; | |||||
import { DwToolsRoutingModule } from '@webdpt/components/tools-routing'; | |||||
import { SharedModule } from './shared/shared.module'; | |||||
import { DwCmsRoutingModule } from '@webdpt/programs'; | |||||
@NgModule({ | |||||
imports: [ | |||||
SharedModule, // 專案的共享模組 | |||||
DwToolsRoutingModule, // 平台組件的預設路由模組 | |||||
// --------------------------------------------------------- | |||||
// | 選配 | |||||
// --------------------------------------------------------- | |||||
// DwCmsRoutingModule // 平台作業路由 | |||||
] | |||||
}) | |||||
export class ToolsRoutingWrapper { } |
@ -0,0 +1,10 @@ | |||||
import { NgModule } from '@angular/core'; | |||||
import { Routes, RouterModule } from '@angular/router'; | |||||
const routes: Routes = []; | |||||
@NgModule({ | |||||
imports: [RouterModule.forChild(routes)], | |||||
exports: [RouterModule] | |||||
}) | |||||
export class IndustryRoutingModule { } |
@ -0,0 +1,13 @@ | |||||
import { NgModule } from '@angular/core'; | |||||
import { CommonModule } from '@angular/common'; | |||||
import { IndustryRoutingModule } from './industry-routing.module'; | |||||
@NgModule({ | |||||
imports: [ | |||||
CommonModule, | |||||
IndustryRoutingModule | |||||
], | |||||
declarations: [] | |||||
}) | |||||
export class IndustryModule { } |
@ -0,0 +1,12 @@ | |||||
import { Component, OnInit } from '@angular/core'; | |||||
@Component({ | |||||
selector: 'app-prog001', | |||||
template: `<h1>404</h1>` | |||||
}) | |||||
export class PageNotFoundComponent { | |||||
constructor() { } | |||||
} |
@ -0,0 +1,12 @@ | |||||
import { Routes } from '@angular/router'; | |||||
import { CUSTOMIZATION_ROUTES } from './customization/customization-routes'; | |||||
export const MODULE_ROUTES: Routes = [ | |||||
{ | |||||
path: 'dpt', // 路徑為/dpt/* | |||||
pathMatch: 'prefix', | |||||
loadChildren: (): Promise<any> => import('./implementation/tools-routing-wrapper.module').then(m => m.ToolsRoutingWrapper) | |||||
}, | |||||
...CUSTOMIZATION_ROUTES | |||||
]; |
@ -0,0 +1,6 @@ | |||||
/* You can add global styles to this file, and also import other style files */ | |||||
@webdpt-path: "@webdpt"; | |||||
@import "~@{webdpt-path}/components/style/index.less"; | |||||
@import "~@{webdpt-path}/programs/style/index.less"; | |||||
@import './implementation/style/index.less'; | |||||
@import './customization/style/index.less'; |
@ -0,0 +1,19 @@ | |||||
{ | |||||
"apiUrl": "@WEB_SERVICE_URL@", | |||||
"iamUrl":"https://iam.digiwincloud.com.cn", | |||||
"emcUrl": "@EMC_SERVICE_URL@", | |||||
"omUrl": "@OM_URL@", | |||||
"consoleUrl": "@CONSOLE_URL@", | |||||
"marketUrl": "@MARKET_URL@", | |||||
"omcUrl": "@OMC_SERVICE_URL@", | |||||
"gmcUrl": "@GMC_SERVICE_URL@", | |||||
"cacUrl": "@CAC_SERVICE_URL@", | |||||
"frUrl": "@FINEREPORT_URL@", | |||||
"dmcUrl": "@DMC_SERVICE_URL@", | |||||
"analytics": { | |||||
"gtm": "@ANALYTICS_GTM@", | |||||
"baidu": "@ANALYTICS_BAIDU@" | |||||
}, | |||||
"multiTenant": "true", | |||||
"dwAppSecret": "@DW_APP_SECRET@" | |||||
} |
@ -0,0 +1,19 @@ | |||||
{ | |||||
"apiUrl": "@WEB_SERVICE_URL@", | |||||
"iamUrl":"https://iam.digiwincloud.com.cn", | |||||
"emcUrl": "@EMC_SERVICE_URL@", | |||||
"omUrl": "@OM_URL@", | |||||
"consoleUrl": "@CONSOLE_URL@", | |||||
"marketUrl": "@MARKET_URL@", | |||||
"omcUrl": "@OMC_SERVICE_URL@", | |||||
"gmcUrl": "@GMC_SERVICE_URL@", | |||||
"cacUrl": "@CAC_SERVICE_URL@", | |||||
"frUrl": "@FINEREPORT_URL@", | |||||
"dmcUrl": "@DMC_SERVICE_URL@", | |||||
"analytics": { | |||||
"gtm": "@ANALYTICS_GTM@", | |||||
"baidu": "@ANALYTICS_BAIDU@" | |||||
}, | |||||
"multiTenant": "true", | |||||
"dwAppSecret": "@DW_APP_SECRET@" | |||||
} |
@ -0,0 +1,5 @@ | |||||
{ | |||||
"prog": { | |||||
"lagrge-home": "lagrge-home" | |||||
} | |||||
} |
@ -0,0 +1,5 @@ | |||||
{ | |||||
"prog": { | |||||
"lagrge-home": "大屏首页" | |||||
} | |||||
} |
@ -0,0 +1,5 @@ | |||||
{ | |||||
"prog": { | |||||
"lagrge-home": "大屏首頁" | |||||
} | |||||
} |