@ -0,0 +1,14 @@ | |||||
# 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 | |||||
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,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,54 @@ | |||||
# 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 | |||||
.microsite/node_modules/ | |||||
.microsite/src/static/package-umd/ | |||||
.microsite/src/static/.version/ |
@ -0,0 +1,4 @@ | |||||
registry=https://registry.npmmirror.com | |||||
unsafe-perm=true | |||||
@webdpt:registry=https://repo.digiwincloud.com.cn/maven/repository/npm-webdpt/ | |||||
@athena:registry=https://repo.digiwincloud.com.cn/maven/repository/npm-athena/ |
@ -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,210 @@ | |||||
{ | |||||
"$schema": "./node_modules/@angular/cli/lib/config/schema.json", | |||||
"version": 1, | |||||
"newProjectRoot": "projects", | |||||
"projects": { | |||||
"ng-webdpt": { | |||||
"root": "", | |||||
"sourceRoot": "src", | |||||
"projectType": "application", | |||||
"architect": { | |||||
"build": { | |||||
"builder": "ngx-build-plus:browser", | |||||
"options": { | |||||
"allowedCommonJsDependencies": [ | |||||
"crypto-js", | |||||
"ag-grid-angular", | |||||
"ag-grid-community", | |||||
"@ant-design/colors", | |||||
"date-fns/format", | |||||
"date-fns/parse", | |||||
"qs", | |||||
"@webdpt/framework/themes", | |||||
"lodash", | |||||
"rxjs", | |||||
"zrender" | |||||
], | |||||
"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, | |||||
"extraWebpackConfig": "webpack.config.js", | |||||
"commonChunk": false | |||||
}, | |||||
"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, | |||||
"extraWebpackConfig": "webpack.prod.config.js" | |||||
}, | |||||
"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": "ngx-build-plus:dev-server", | |||||
"options": { | |||||
"browserTarget": "ng-webdpt:build:development", | |||||
"port": 4200, | |||||
"extraWebpackConfig": "webpack.config.js" | |||||
}, | |||||
"configurations": { | |||||
"production": { | |||||
"browserTarget": "ng-webdpt:build:production", | |||||
"extraWebpackConfig": "webpack.prod.config.js" | |||||
} | |||||
} | |||||
}, | |||||
"extract-i18n": { | |||||
"builder": "ngx-build-plus:extract-i18n", | |||||
"options": { | |||||
"browserTarget": "ng-webdpt:build", | |||||
"extraWebpackConfig": "webpack.config.js" | |||||
} | |||||
}, | |||||
"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,27 @@ | |||||
module.exports = { | |||||
port: 4000, | |||||
envHosts: { | |||||
paas: 'https://athena-paas.digiwincloud.com.cn', | |||||
test: 'https://athena-test.digiwincloud.com.cn', | |||||
prod: 'https://athena.digiwincloud.com.cn' | |||||
}, | |||||
apiJson: { | |||||
}, | |||||
pluginsConfigServer: { | |||||
"app": { | |||||
"efm-demoAT": { | |||||
"name": "efmdemoAT", | |||||
"urlPrefixType": "", | |||||
"root": "http://localhost:4200", | |||||
"path": "EfmDemoATModule.js", | |||||
"description": "", | |||||
"i18n": true, | |||||
"disabledMultiVersion": true, | |||||
"isMF": true, | |||||
"moduleName": "EfmDemoATModule", | |||||
"exposesPath": "./efm-demoAT" | |||||
} | |||||
} | |||||
} | |||||
}; |
@ -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,152 @@ | |||||
{ | |||||
"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", | |||||
"microsite": "athena-microsite serve -e test -t mf", | |||||
"microsite:paas": "athena-microsite serve -e paas -t mf", | |||||
"microsite:prod": "athena-microsite serve -e prod -t mf" | |||||
}, | |||||
"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", | |||||
"bignumber.js": "^9.0.1", | |||||
"angular2-uuid": "^1.1.1", | |||||
"paho-mqtt": "^1.1.0", | |||||
"file-loader": "6.0.0", | |||||
"ag-grid-enterprise": "^26.0.0", | |||||
"xlsx": "^0.16.4", | |||||
"jsonpath": "^1.0.2", | |||||
"echarts": "^4.6.0", | |||||
"angular-split": "^3.0.3", | |||||
"ngx-image-cropper": "^4.0.0", | |||||
"@angular/material": "12.2.13", | |||||
"dayjs": "^1.10.4", | |||||
"jsstore": "^4.3.7", | |||||
"lodash": "^4.17.21", | |||||
"@athena/design-ui": "2.2.11-next.5", | |||||
"@athena/dynamic-core": "2.2.11-next.5", | |||||
"@athena/dynamic-ui": "2.2.11-next.5", | |||||
"ngx-echarts": "^4.2.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", | |||||
"@angular-devkit/architect": "0.1202.16", | |||||
"@webdpt/athena-dev-tools": "5.2.11-1000", | |||||
"@webdpt/athena-microsite": "5.2.11-1000", | |||||
"@athena/platform-devkit": "1.0.0-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 @@ | |||||
{ "envType": "angular", "dap": { "enabled": false }, "athena": { "enabled": true } } |
@ -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,70 @@ | |||||
import { BrowserModule } from '@angular/platform-browser'; | |||||
import { NgModule } from '@angular/core'; | |||||
import { HTTP_INTERCEPTORS, 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 { DwIamModule, 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'; | |||||
import { DynamicFormsAntUIModule } from '@athena/dynamic-ui'; | |||||
import { HttpInterceptorService } from './implementation/http-interceptor.service'; | |||||
import { | |||||
DynamicFormsCoreModule, | |||||
DynamicUserBehaviorCommService, | |||||
PluginLanguageStoreService, | |||||
UserOrgInfoService, | |||||
DynamicUserBehaviorService | |||||
} from '@athena/dynamic-core'; | |||||
@NgModule({ | |||||
imports: [ | |||||
BrowserModule, | |||||
BrowserAnimationsModule, | |||||
AppRoutingModule, | |||||
HttpClientModule, | |||||
HttpClientJsonpModule, | |||||
/** ************* 端平台 ***************/ | |||||
FrameworkModule.forRoot([], SYSTEM_CONFIG), | |||||
FrameworkUICoreModule.forRoot(), | |||||
// --------------------------------------------------------- | |||||
// | 選配 | |||||
// --------------------------------------------------------- | |||||
// DwDapModule, // DAP平台 | |||||
// DwProgramsModule, // 平台作業 | |||||
SystemModule.forRoot([]), | |||||
ImplementationModule.forRoot([]), | |||||
DwIamModule, | |||||
DynamicFormsAntUIModule.forRoot(), | |||||
DynamicFormsCoreModule.forRoot() | |||||
], | |||||
declarations: [ | |||||
AppComponent | |||||
], | |||||
providers: [ | |||||
{ | |||||
provide: HTTP_INTERCEPTORS, | |||||
useClass: HttpInterceptorService, | |||||
multi: true, | |||||
}, | |||||
...DynamicFormsCoreModule.forRoot().providers, | |||||
DynamicUserBehaviorCommService, | |||||
UserOrgInfoService, | |||||
PluginLanguageStoreService | |||||
], | |||||
bootstrap: [AppComponent] | |||||
}) | |||||
export class AppModule { | |||||
constructor(private userBehaviorService: DynamicUserBehaviorService, private userOrgInfoService: UserOrgInfoService) { | |||||
this.userBehaviorService.init(); | |||||
this.userOrgInfoService.monitorLogin(); | |||||
} | |||||
} |
@ -0,0 +1,5 @@ | |||||
/** | |||||
* IAM 的 digi-middleware-auth-app [各應用系統的AppToken]. | |||||
*/ | |||||
// eslint-disable-next-line max-len | |||||
export const DigiMiddlewareAuthApp = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI6IkF0aGVuYSIsInNpZCI6MTYzNjc3NzI1NzgyNTkyfQ.3QLTPVKsk2Mp3j_aQ3X8bQW1wCJMNWeCkL6VPoK352c'; |
@ -0,0 +1,29 @@ | |||||
export interface ICustomAppConfig { | |||||
/** 定制应用名称 */ | |||||
appCode: string; | |||||
/** 定制模块名称 */ | |||||
moduleName?: string; | |||||
/** 定制模块路径 */ | |||||
modulePath?: string; | |||||
} | |||||
export interface IProgramInfo { | |||||
[key: string]: IProgramInfoParams; | |||||
} | |||||
export interface IProgramInfoParams { | |||||
/** json路径 */ | |||||
jsonPath: string; | |||||
/** 定制页说明 */ | |||||
description?: string; | |||||
} | |||||
/** 定制应用配置 */ | |||||
export const CUSTOM_APP_CONFIG: ICustomAppConfig = { | |||||
appCode: 'EfmDemoAT', | |||||
moduleName: 'EfmDemoATModule', | |||||
modulePath: './src/app/implementation/athena-app.module.ts', | |||||
}; | |||||
/** 定制页信息 */ | |||||
export const programs: IProgramInfo = {}; |
@ -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,47 @@ | |||||
import { NgModule } from '@angular/core'; | |||||
import { CommonModule } from '@angular/common'; | |||||
import { DYNAMIC_FORM_CONTROL_MAP_FNS, DYNAMIC_FORM_MODEL_CONVERTS, PLUGIN_LANGUAGE_CHECKLIST } from '@athena/dynamic-core'; | |||||
import { businessUIFormComponentMapFn } from './service/business-dynamic-component-map'; | |||||
import { DynamicBusinessFormModelConvertService } from './service/dynamic-model-convert-bussiness.service'; | |||||
import { APP_LANGUAGE_CHECKLIST } from './language'; | |||||
import { TaskDetailModule } from './programs/task-detail/task-detail.module'; | |||||
import { ProjectDetailModule } from './programs/project-detail/project-detail.module'; | |||||
import { BasicDetailModule } from './programs/basic-detail/basic-detail.module'; | |||||
// 定制页集合 | |||||
const dynamicModules = [ | |||||
TaskDetailModule, | |||||
ProjectDetailModule, | |||||
BasicDetailModule | |||||
]; | |||||
const components = [ | |||||
]; | |||||
@NgModule({ | |||||
providers: [ | |||||
{ | |||||
provide: DYNAMIC_FORM_CONTROL_MAP_FNS, | |||||
useValue: businessUIFormComponentMapFn, | |||||
multi: true, | |||||
}, | |||||
{ | |||||
provide: DYNAMIC_FORM_MODEL_CONVERTS, | |||||
useClass: DynamicBusinessFormModelConvertService, | |||||
multi: true, | |||||
}, | |||||
{ | |||||
provide: PLUGIN_LANGUAGE_CHECKLIST, | |||||
useValue: APP_LANGUAGE_CHECKLIST, | |||||
multi: true, | |||||
} | |||||
], | |||||
imports: [ | |||||
CommonModule, | |||||
...dynamicModules | |||||
], | |||||
declarations: [...components], | |||||
entryComponents: [...components], | |||||
exports: [...components], | |||||
}) | |||||
export class EfmDemoATModule { } |
@ -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,3 @@ | |||||
<p> | |||||
home works! | |||||
</p> |
@ -0,0 +1,13 @@ | |||||
import { Component, OnInit } from '@angular/core'; | |||||
@Component({ | |||||
selector: 'app-home', | |||||
templateUrl: './home.component.html', | |||||
styleUrls: ['./home.component.css'] | |||||
}) | |||||
export class HomeComponent { | |||||
constructor() { } | |||||
} |
@ -0,0 +1,16 @@ | |||||
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,25 @@ | |||||
import { Injectable, ErrorHandler } from '@angular/core'; | |||||
import { HttpErrorResponse } from '@angular/common/http'; | |||||
import { NzMessageService } from 'ng-zorro-antd/message'; | |||||
@Injectable({ | |||||
providedIn: 'root', | |||||
}) | |||||
export class AppErrorHandleService implements ErrorHandler { | |||||
constructor(private messageService: NzMessageService) {} | |||||
handleError(error: any): void { | |||||
// 如果是http的错误 | |||||
if (error instanceof HttpErrorResponse) { | |||||
if (error.error && error.error.errorMessage) { | |||||
if (error.error.errorCode === '1001105') { | |||||
this.messageService.error('租户不正确!'); | |||||
} else { | |||||
this.messageService.error(error.error.errorMessage); | |||||
} | |||||
} else { | |||||
this.messageService.error(error.message); | |||||
} | |||||
} | |||||
console.error(error); | |||||
} | |||||
} |
@ -0,0 +1,290 @@ | |||||
import { | |||||
HttpInterceptor, | |||||
HttpRequest, | |||||
HttpHandler, | |||||
HttpResponse, | |||||
HttpErrorResponse, | |||||
} from '@angular/common/http'; | |||||
import { Observable, of } from 'rxjs'; | |||||
import { tap, map, catchError } from 'rxjs/operators'; | |||||
import { DW_AUTH_TOKEN } from '@webdpt/framework/auth'; | |||||
import { DwLanguageService } from '@webdpt/framework/language'; | |||||
import { DW_APP_AUTH_TOKEN, DwSystemConfigService } from '@webdpt/framework/config'; | |||||
import { Inject, Injectable } from '@angular/core'; | |||||
import { DynamicFormDataService, isObject, convertStrDate, isNone } from '@athena/dynamic-core'; | |||||
import { NzMessageService } from 'ng-zorro-antd/message'; | |||||
import { AppErrorHandleService } from './http-error-handle.service'; | |||||
import { CookieUtil } from './utils.ts/cookie-util'; | |||||
@Injectable() | |||||
export class HttpInterceptorService implements HttpInterceptor { | |||||
whiteList: string[] = ['iam', 'emc', 'eoc']; | |||||
muiUrl: string = window.location.origin; | |||||
constructor( | |||||
@Inject(DW_AUTH_TOKEN) protected authToken: any, | |||||
@Inject(DW_APP_AUTH_TOKEN) protected appAuthToken: any, | |||||
private languageService: DwLanguageService, | |||||
private messageService: NzMessageService, | |||||
private dateFormateService: DynamicFormDataService, | |||||
private config: DwSystemConfigService, | |||||
private appErrorHandleService: AppErrorHandleService, | |||||
// protected systemConfig: any | |||||
) { } | |||||
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<any> { | |||||
// 每个请求添加唯一标志uuid | |||||
req = req.clone({ | |||||
headers: req.headers.delete('noCommonTipError'), | |||||
}); | |||||
// 设置语言别 | |||||
if (this.languageService && this.languageService.currentLanguage) { | |||||
req = req.clone({ | |||||
setHeaders: { | |||||
locale: this.languageService.currentLanguage, | |||||
}, | |||||
}); | |||||
} | |||||
// 兼容api平台:用户token | |||||
if (this.authToken.token && !req.headers.get('token')) { | |||||
req = req.clone({ | |||||
setHeaders: { | |||||
token: this.authToken.token, | |||||
}, | |||||
}); | |||||
} | |||||
// 中间件用户token | |||||
if (this.authToken.token && !req.headers.get('digi-middleware-auth-user')) { | |||||
req = req.clone({ | |||||
setHeaders: { | |||||
'digi-middleware-auth-user': this.authToken.token, | |||||
}, | |||||
}); | |||||
} | |||||
// atmc和ui_bot场景需要该proxyToken | |||||
if ( | |||||
(req.url.includes('/bot/') || req.url.includes('/atmc/') || req.url.includes('/atdm/')) && | |||||
sessionStorage.getItem('proxyToken') && | |||||
!req.headers.get('proxy_token') | |||||
) { | |||||
req = req.clone({ | |||||
setHeaders: { | |||||
proxy_token: sessionStorage.getItem('proxyToken'), | |||||
}, | |||||
}); | |||||
} | |||||
if (!req.url.includes('kmo/file')) { | |||||
// 设置平台别 | |||||
req = req.clone({ | |||||
setHeaders: { | |||||
'client-agent': 'webplatform', | |||||
}, | |||||
}); | |||||
} | |||||
const { url } = req; | |||||
// uibotUrl、atmcUrl、atdmUrl、smartDataUrl、themeMapUrl、bpmUrl 添加routerKey,租户id | |||||
if (this.checkNeedAdd(req, 'routerKey')) { | |||||
const tenantId = JSON.parse(sessionStorage.getItem('DwUserInfo'))?.tenantId ?? ''; | |||||
const token = this.appAuthToken; | |||||
req = req.clone({ | |||||
setHeaders: { | |||||
routerKey: tenantId, | |||||
'digi-middleware-auth-app': token | |||||
}, | |||||
}); | |||||
if (CookieUtil.get('routerKey') !== tenantId) { | |||||
CookieUtil.set('routerKey', tenantId); | |||||
} | |||||
} | |||||
if (this.checkNeedAdd(req, 'digiMiddlewareAuthApp')) { | |||||
const token = this.appAuthToken; | |||||
req = req.clone({ | |||||
setHeaders: { | |||||
'digi-middleware-auth-app': token, | |||||
}, | |||||
}); | |||||
} | |||||
// 统一处理date | |||||
if (req && req.body) { | |||||
if (req.body['data']) { | |||||
this.dateFormateService.formatDate(req.body['data']); | |||||
} else { | |||||
this.dateFormateService.formatDate(req.body); | |||||
} | |||||
this.convertAllStrDateFromData(req.body, true); | |||||
} | |||||
return next.handle(req).pipe( | |||||
tap((event) => { }), | |||||
map((res: HttpResponse<any>) => { | |||||
if (isObject(res) && res instanceof HttpResponse && isObject(res.body)) { | |||||
// eslint-disable-next-line no-shadow | |||||
const { url, body } = res as any; | |||||
// 符合规范的接口 | |||||
if (this.whiteList.every((item) => !url.includes(item)) && body.status) { | |||||
if (body.status === 200) { | |||||
// 成功 | |||||
res = res.clone({ | |||||
body: { | |||||
code: 0, | |||||
data: body.response, | |||||
}, | |||||
}); | |||||
} else { | |||||
// 接口报错 | |||||
console.error(res); | |||||
const { errorMessage, statusDescription } = body; | |||||
const message = errorMessage || statusDescription; | |||||
this.messageService.error(message); | |||||
throw new HttpErrorResponse({ | |||||
error: { errorMessage: message, errorCode: body.errorCode, code: body.status }, | |||||
headers: res.headers, | |||||
status: body.status, | |||||
statusText: body.status, | |||||
url: res.url, | |||||
}); | |||||
} | |||||
} else { | |||||
// 不符合规范的接口 | |||||
if (body.code && body.code !== 200) { | |||||
console.error(res); | |||||
const { message } = body; | |||||
if (message) { | |||||
this.messageService.error(message); | |||||
} | |||||
throw new HttpErrorResponse({ | |||||
error: { errorMessage: message, errorCode: body.code }, | |||||
headers: res.headers, | |||||
status: body.code, | |||||
statusText: body.code, | |||||
url: res.url, | |||||
}); | |||||
} | |||||
} | |||||
this.convertAllStrDateFromData(res.body); | |||||
} | |||||
return res; | |||||
}), | |||||
catchError((error: any) => { | |||||
this.appErrorHandleService.handleError(error); | |||||
throw error; | |||||
}) | |||||
); | |||||
} | |||||
/** | |||||
* 循环修改返回数据中的时间格式从-改为/ | |||||
*/ | |||||
convertAllStrDateFromData(data: any, isReverse: boolean = false): void { | |||||
// tslint:disable-next-line: forin | |||||
// eslint-disable-next-line guard-for-in | |||||
for (const propName in data) { | |||||
const prop = data[propName]; | |||||
const descriptor = Reflect.getOwnPropertyDescriptor(data, propName); | |||||
if (isNone(descriptor) || !descriptor.writable) { | |||||
continue; | |||||
} | |||||
if (typeof prop === 'string') { | |||||
data[propName] = convertStrDate(prop, isReverse); | |||||
} else if (prop instanceof Array) { | |||||
for (let index = 0; index < prop.length; index++) { | |||||
const element = prop[index]; | |||||
if (typeof element === 'string') { | |||||
prop[index] = convertStrDate(element, isReverse); | |||||
} else { | |||||
this.convertAllStrDateFromData(element, isReverse); | |||||
} | |||||
} | |||||
} else if (isObject(prop) && (prop !== null || prop !== undefined)) { | |||||
this.convertAllStrDateFromData(prop, isReverse); | |||||
} | |||||
} | |||||
} | |||||
/** | |||||
* 检查是否需要添加 | |||||
* @param req 请求体 | |||||
*/ | |||||
private checkNeedAdd(req: HttpRequest<any>, type): boolean { | |||||
const { url } = req; | |||||
let serverNameList = []; | |||||
// 哪些请求需要添加routerKey的appToken | |||||
const routerKeyServerList = [ | |||||
'uibot', | |||||
'atmc', | |||||
'atdm', | |||||
'aim', | |||||
'aam', | |||||
'smartdata', | |||||
'knowledgemaps', | |||||
'flowengine', | |||||
'tdd', | |||||
'alearning', | |||||
'audc', | |||||
'im', | |||||
'taskengine', | |||||
'mdc', | |||||
'digiwinabi', | |||||
'semc', | |||||
'semcdwscreen', | |||||
]; | |||||
// 需要添加digi-middleware-auth-app的请求 | |||||
const digiMiddlewareServerNameList = [ | |||||
'iam', | |||||
'eoc', | |||||
'emc', | |||||
'knowledgemaps', | |||||
'uibot', | |||||
'atmc', | |||||
'atdm', | |||||
'aim', | |||||
'aam', | |||||
'im', | |||||
'alearning', | |||||
'audc', | |||||
'semc', | |||||
// 新添加 | |||||
'dmc', | |||||
'cac', | |||||
'semcdwscreen', | |||||
'bossiam', | |||||
'agileinteraction', | |||||
'smartdata', | |||||
'athena-console', | |||||
'console', | |||||
// mui识别 athena-paas.digiwincloud.com.cn | |||||
this.muiUrl, | |||||
'assets/', // mui取到的服务器资源 | |||||
'flowengine', // bpmUrl | |||||
'market', // digiwincloudUrl | |||||
'tdd', // tddUrl | |||||
'tbb', | |||||
'digiwinabi', // biUrl | |||||
'taskengine', // taskEngineUrl | |||||
'athena-it', // itUrl | |||||
'mdc', | |||||
'lmc', | |||||
'eas-designer', // ddsmDesignerUrl | |||||
'esp', // espUrl | |||||
]; | |||||
switch (type) { | |||||
case 'routerKey': | |||||
serverNameList = routerKeyServerList; | |||||
break; | |||||
case 'digiMiddlewareAuthApp': | |||||
serverNameList = digiMiddlewareServerNameList; | |||||
break; | |||||
} | |||||
return serverNameList.some((name) => url.includes(name)); | |||||
} | |||||
} |
@ -0,0 +1,27 @@ | |||||
import { Routes } from '@angular/router'; | |||||
import { DwEmailLayoutComponent, DwPageIndexComponent } from '@webdpt/athena-dev-tools'; | |||||
import { DwAuthGuardService } from '@webdpt/framework/auth'; | |||||
import { programs } from 'app/config/custom-app-config'; | |||||
export const IMPLEMENTATION_ROUTES: Routes = [ | |||||
{ | |||||
path: '', | |||||
component: DwPageIndexComponent, | |||||
canActivate: [DwAuthGuardService], | |||||
data: { | |||||
tabSetHosting: true, | |||||
programs | |||||
} | |||||
}, | |||||
{ | |||||
path: 'dev/:secretkey', | |||||
pathMatch: 'prefix', | |||||
component: DwEmailLayoutComponent, | |||||
canActivate: [DwAuthGuardService], | |||||
data: { | |||||
tabSetHosting: true, | |||||
programs | |||||
} | |||||
} | |||||
]; |
@ -0,0 +1,49 @@ | |||||
import { NgModule } from '@angular/core'; | |||||
import { RouterModule, Routes } from '@angular/router'; | |||||
import { MODULE_ROUTES } from '../routes'; | |||||
import { DwSsoLoginComponent } from '@webdpt/components/sso-login'; | |||||
import { DwLayoutAthenaComponent } from '@webdpt/athena-dev-tools'; | |||||
import { programs } from 'app/config/custom-app-config'; | |||||
import { DwLanguageService } from '@webdpt/framework/language'; | |||||
const routes: Routes = [ | |||||
{ | |||||
path: '', | |||||
pathMatch: 'prefix', | |||||
component: DwLayoutAthenaComponent, | |||||
children: [ | |||||
...MODULE_ROUTES | |||||
], | |||||
data: { | |||||
tabSetHosting: true, | |||||
programs, | |||||
dwRouteData: { | |||||
programId: 'default', | |||||
i18n: ['basic', 'ant-components'] | |||||
} | |||||
}, | |||||
resolve: { transaction: DwLanguageService } | |||||
}, | |||||
{ | |||||
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,72 @@ | |||||
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 { EfmDemoATModule } from './athena-app.module'; | |||||
// import { themeConfig } from '../config/theme.config'; | |||||
@NgModule({ | |||||
imports: [ | |||||
CommonModule, | |||||
ImplementationRoutingModule, | |||||
SharedModule, // 共享模組 | |||||
EfmDemoATModule | |||||
], | |||||
declarations: [], | |||||
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,12 @@ | |||||
import * as zh_CN from '../../../assets/i18n/zh_CN/default.json'; | |||||
import * as zh_TW from '../../../assets/i18n/zh_TW/default.json'; | |||||
import * as en_US from '../../../assets/i18n/en_US/default.json'; | |||||
import { PluginLanguageChecklist } from '@athena/dynamic-core'; | |||||
export const APP_LANGUAGE_CHECKLIST = { | |||||
language: { | |||||
zh_CN, | |||||
zh_TW, | |||||
en_US | |||||
} | |||||
} as PluginLanguageChecklist; |
@ -0,0 +1,15 @@ | |||||
// 可用語言清單靜態設定檔 | |||||
export const languageList = [ | |||||
{ | |||||
'value': 'en_US', | |||||
'label': 'English' | |||||
}, | |||||
{ | |||||
'value': 'zh_CN', | |||||
'label': '简体' | |||||
}, | |||||
{ | |||||
'value': 'zh_TW', | |||||
'label': '繁體' | |||||
} | |||||
]; |
@ -0,0 +1,5 @@ | |||||
import { menuData } from './menu.model'; // Menu靜態設定檔 | |||||
export const menuJson = [ | |||||
...menuData | |||||
]; |
@ -0,0 +1 @@ | |||||
export const menuData = []; |
@ -0,0 +1,19 @@ | |||||
import { | |||||
DynamicFormValueControlModelConfig, | |||||
} from '@athena/dynamic-core'; | |||||
// eslint-disable-next-line no-shadow | |||||
export enum StateCode { | |||||
waiting = 'waiting', | |||||
completed = 'completed', | |||||
} | |||||
export interface DefaultModelConfig extends DynamicFormValueControlModelConfig<string | number> { | |||||
type: string; | |||||
stateCode?: StateCode; | |||||
actions?: any[]; | |||||
operations?: any[]; | |||||
finished?: boolean; | |||||
extendedFields: any; | |||||
attach: any; | |||||
} |
@ -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,15 @@ | |||||
import { NgModule } from '@angular/core'; | |||||
import { CommonModule } from '@angular/common'; | |||||
const programsModules = [ | |||||
]; | |||||
@NgModule({ | |||||
imports: [ | |||||
CommonModule, | |||||
...programsModules | |||||
], | |||||
declarations: [] | |||||
}) | |||||
export class BasicDetailModule { } |
@ -0,0 +1,15 @@ | |||||
import { NgModule } from '@angular/core'; | |||||
import { CommonModule } from '@angular/common'; | |||||
const programsModules = [ | |||||
]; | |||||
@NgModule({ | |||||
imports: [ | |||||
CommonModule, | |||||
...programsModules | |||||
], | |||||
declarations: [] | |||||
}) | |||||
export class ProjectDetailModule { } |
@ -0,0 +1,15 @@ | |||||
import { NgModule } from '@angular/core'; | |||||
import { CommonModule } from '@angular/common'; | |||||
const programsModules = [ | |||||
]; | |||||
@NgModule({ | |||||
imports: [ | |||||
CommonModule, | |||||
...programsModules | |||||
], | |||||
declarations: [] | |||||
}) | |||||
export class TaskDetailModule { } |
@ -0,0 +1,15 @@ | |||||
import { | |||||
DynamicFormControl, | |||||
DynamicFormControlModel, | |||||
} from '@athena/dynamic-core'; | |||||
import { Type } from '@angular/core'; | |||||
export function businessUIFormComponentMapFn( | |||||
model: DynamicFormControlModel | |||||
): Type<any> | null { | |||||
switch (model.type) { | |||||
default: | |||||
break; | |||||
} | |||||
return null; | |||||
} |
@ -0,0 +1,123 @@ | |||||
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; | |||||
themeMapUrl: any; | |||||
pageData: any; | |||||
// 记录机制的content参数 | |||||
content: any; | |||||
uibotUrl: 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; | |||||
}); | |||||
} | |||||
/** | |||||
* 获取inv_data | |||||
* @param actionId | |||||
* @param params | |||||
* */ | |||||
getInvData(actionId: string, params?: any, eoc?: any): Observable<any> { | |||||
const executeContext = this.content?.executeContext; | |||||
const _params = { | |||||
actionId, | |||||
parameter: params, | |||||
businessUnit: eoc || executeContext?.businessUnit, | |||||
executeContext: executeContext, // 传参 | |||||
}; | |||||
return this.http.post(`${this.atdmUrl}/api/atdm/v1/data/query/by/actionId`, _params, { | |||||
headers: this.getHeader(), | |||||
}); | |||||
} | |||||
/** | |||||
* 服务编排-提交数据方法 | |||||
* @param params | |||||
* @returns | |||||
*/ | |||||
atmcSubmit(params: any): Observable<any> { | |||||
const url = `${this.atmcUrl}/api/atmc/v1/action/submit`; | |||||
return this.http.post(url, params, { headers: this.getHeader() }); | |||||
} | |||||
getHeader(): any { | |||||
if (this.authToken?.token) { | |||||
return { | |||||
'digi-middleware-auth-user': this.authToken.token, | |||||
token: this.authToken.token, | |||||
}; | |||||
} | |||||
return {}; | |||||
} | |||||
/** | |||||
* 调用开窗的方法 | |||||
* @param executeContext 当前页面的executeContext | |||||
* @param serviceName 调用的服务名称 | |||||
* @returns | |||||
*/ | |||||
getOpenwindowParams(executeContext: any, serviceName: string): any { | |||||
return new Promise((resolve, inject) => { | |||||
const params = { | |||||
tmAction: { | |||||
actionId: 'esp_' + serviceName, | |||||
title: '推荐', | |||||
actionParams: [], | |||||
language: { | |||||
title: { | |||||
en_US: 'recommend', | |||||
zh_TW: '推薦', | |||||
}, | |||||
}, | |||||
type: 'ESP', | |||||
url: 'http://esp.digiwincloud.com.cn/CROSS/RESTful', | |||||
actionResponse: null, | |||||
serviceName: serviceName, | |||||
needProxyToken: null, | |||||
attachActions: null, | |||||
flatData: null, | |||||
}, | |||||
executeContext: executeContext, | |||||
}; | |||||
const url = `${this.uibotUrl}/api/ai/v1/data/query/action`; | |||||
this.http | |||||
.post(url, params, { | |||||
headers: this.getHeader(), | |||||
}) | |||||
.subscribe((res): void => { | |||||
resolve(res); | |||||
}); | |||||
}); | |||||
} | |||||
} |
@ -0,0 +1,40 @@ | |||||
import { | |||||
DynamicFormControlModel, | |||||
parseReviver, isString, | |||||
DynamicFormModelConvertService, | |||||
cloneDeep, | |||||
CustomAppConfigService | |||||
} from '@athena/dynamic-core'; | |||||
import { Injectable } from '@angular/core'; | |||||
import { SYSTEM_CONFIG } from 'app/config/system-config'; | |||||
@Injectable() | |||||
export class DynamicBusinessFormModelConvertService implements DynamicFormModelConvertService { | |||||
constructor( | |||||
public customAppConfigService: CustomAppConfigService | |||||
) { } | |||||
fromOneJSON( | |||||
json: string | object, | |||||
content: any | |||||
): DynamicFormControlModel { | |||||
let model; | |||||
if (isString(json)) { | |||||
model = isString(json); | |||||
} else if (typeof json === 'object') { | |||||
model = cloneDeep(json); | |||||
} else { | |||||
model = JSON.parse(JSON.stringify(json), parseReviver); | |||||
} | |||||
const layout = model.layout || null; | |||||
let result: DynamicFormControlModel; | |||||
model.content = content; | |||||
switch (model.type) { | |||||
default: | |||||
break; | |||||
} | |||||
/** 渲染定制组件时,将应用信息传给service */ | |||||
if (!!result) { this.customAppConfigService.customConfig = { appCode: SYSTEM_CONFIG.dwAppId };} | |||||
return result; | |||||
} | |||||
} |
@ -0,0 +1,24 @@ | |||||
import { NgModule } from '@angular/core'; | |||||
import { CommonModule } from '@angular/common'; | |||||
import { TranslateModule } from '@ngx-translate/core'; | |||||
import { FormsModule, ReactiveFormsModule } from '@angular/forms'; | |||||
import { DynamicFormsAntUIModule } from '@athena/dynamic-ui'; | |||||
@NgModule({ | |||||
imports: [ | |||||
CommonModule, | |||||
FormsModule, | |||||
ReactiveFormsModule, | |||||
TranslateModule, | |||||
DynamicFormsAntUIModule, | |||||
], | |||||
exports: [ | |||||
CommonModule, | |||||
FormsModule, | |||||
ReactiveFormsModule, | |||||
TranslateModule, | |||||
DynamicFormsAntUIModule, | |||||
] | |||||
}) | |||||
export class CustSharedModule { } |
@ -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,38 @@ | |||||
export class CookieUtil { | |||||
static get(name) { | |||||
// eslint-disable-next-line prefer-const | |||||
let cookieName = `${encodeURIComponent(name)}=`, | |||||
// eslint-disable-next-line prefer-const | |||||
cookieStart = document.cookie.indexOf(cookieName), | |||||
cookieValue = null; | |||||
if (cookieStart > -1) { | |||||
let cookieEnd = document.cookie.indexOf(';', cookieStart); | |||||
if (cookieEnd === -1) { | |||||
cookieEnd = document.cookie.length; | |||||
} | |||||
cookieValue = decodeURIComponent( | |||||
document.cookie.substring(cookieStart + cookieName.length, cookieEnd) | |||||
); | |||||
} | |||||
return cookieValue; | |||||
} | |||||
static set(name, value, expires?, path?, domain?, secure?) { | |||||
let cookieText = `${encodeURIComponent(name)}=${encodeURIComponent(value)}`; | |||||
if (expires instanceof Date) { | |||||
cookieText += `; expires=${expires.toUTCString()}`; | |||||
} | |||||
if (path) { | |||||
cookieText += `; path=${path}`; | |||||
} | |||||
if (domain) { | |||||
cookieText += `; domain=${domain}`; | |||||
} | |||||
if (secure) { | |||||
cookieText += '; secure'; | |||||
} | |||||
document.cookie = cookieText; | |||||
} | |||||
static unset(name, path, domain, secure) { | |||||
CookieUtil.set(name, '', new Date(0), path, domain, secure); | |||||
} | |||||
} |
@ -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,34 @@ | |||||
{ | |||||
"apiUrl": "", | |||||
"iamUrl": "https://iam-test.digiwincloud.com.cn", | |||||
"emcUrl": "https://emc-test.digiwincloud.com.cn", | |||||
"mscUrl": "https://msc-test.digiwincloud.com.cn", | |||||
"eocUrl": "https://eoc-test.digiwincloud.com.cn", | |||||
"dmcUrl": "https://dmc-test.digiwincloud.com.cn", | |||||
"themeMapUrl": "https://thememap-test.apps.digiwincloud.com.cn/restful/service", | |||||
"smartDataUrl": "https://smartdata-test.apps.digiwincloud.com.cn/restful/service", | |||||
"uibotUrl": "https://uibot-test.apps.digiwincloud.com.cn", | |||||
"atmcUrl": "https://atmc-test.apps.digiwincloud.com.cn", | |||||
"atdmUrl": "https://atdm-test.apps.digiwincloud.com.cn", | |||||
"multiTenant": "true", | |||||
"athenaConsole": "https://athena-console-test.digiwincloud.com.cn", | |||||
"consoleUrl": "https://console-test.digiwincloud.com.cn", | |||||
"muiUrl": "https://athena-test.digiwincloud.com.cn", | |||||
"bpmUrl": "https://flowengine-test.apps.digiwincloud.com.cn/restful/standard/bpm_cloud", | |||||
"digiwincloudUrl": "https://market-test.digiwincloud.com.cn", | |||||
"aimUrl": "https://aim-test.apps.digiwincloud.com.cn", | |||||
"aamUrl": "https://aam-test.apps.digiwincloud.com.cn", | |||||
"audcUrl": "https://audc-test.apps.digiwincloud.com.cn", | |||||
"omUrl": "@OM_URL@", | |||||
"marketUrl": "@MARKET_URL@", | |||||
"omcUrl": "@OMC_SERVICE_URL@", | |||||
"gmcUrl": "@GMC_SERVICE_URL@", | |||||
"cacUrl": "@CAC_SERVICE_URL@", | |||||
"frUrl": "@FINEREPORT_URL@", | |||||
"analytics": { | |||||
"gtm": "@ANALYTICS_GTM@", | |||||
"baidu": "@ANALYTICS_BAIDU@" | |||||
}, | |||||
"dwAppSecret": "@DW_APP_SECRET@" | |||||
} | |||||
@ -0,0 +1,19 @@ | |||||
{ | |||||
"apiUrl": "@WEB_SERVICE_URL@", | |||||
"iamUrl": "@IAM_SERVICE_URL@", | |||||
"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": "@MULTI_TENANT@", | |||||
"dwAppSecret": "@DW_APP_SECRET@" | |||||
} |
@ -0,0 +1,211 @@ | |||||
{ | |||||
"dj-c-由Athena发起当前项目": "Current project initiated by Athena", | |||||
"dj-c-预计开工日": "Expected commencement date", | |||||
"dj-c-来源由n张工单组成": "source:There are {{ taskName }}", | |||||
"dj-c-来源由n张ids工单组成": "source:There are {{ n }} {{ taskName }} such as {{ ids }}", | |||||
"dj-c-倒计时": "Countdown", | |||||
"dj-c-需完成": "To be completed", | |||||
"dj-c-收起": "fold", | |||||
"dj-c-更多": "more", | |||||
"dj-c-操作": "Operations", | |||||
"dj-c-更换": "Change", | |||||
"dj-c-提示": "Tips", | |||||
"dj-c-我知道了": "I know that", | |||||
"dj-c-存在异常是否忽略提交": "Existence {{n}} Exception, <br /> Are you sure to submit?", | |||||
"dj-c-是否确定提交": "Are you sure to submit?", | |||||
"dj-c-请确认是否填写完整": "Please confirm whether it is completed", | |||||
"dj-c-取消": "Cancel", | |||||
"dj-c-确认": "Confirm", | |||||
"dj-c-确定": "Determine", | |||||
"dj-c-明细": "Detail", | |||||
"dj-c-下载": "Download", | |||||
"dj-c-预览": "Preview", | |||||
"dj-c-已读n次": "Read {{ n }} times", | |||||
"dj-c-取消拆行": "Remove split", | |||||
"dj-c-拆行": "Split data", | |||||
"dj-c-旧公式": "Old Formula", | |||||
"dj-c-新公式": "New Formula", | |||||
"dj-c-查看模拟推估": "View simulation estimation", | |||||
"dj-c-权重总和应等于100": "The sum of weights should be equal to 100", | |||||
"dj-c-暂无数据": "No Data", | |||||
"dj-c-必填": "Required", | |||||
"dj-c-重新编辑": "Re Edit", | |||||
"dj-c-编辑": "Edit", | |||||
"dj-c-请选择需要提交的数据": "Please select the data to be submitted", | |||||
"dj-c-收货地址": "Receiving Address", | |||||
"dj-c-采购员编号": "Buyer Number", | |||||
"dj-c-转派至": "Transfer To", | |||||
"dj-c-员工编号": "Employee Number", | |||||
"dj-c-员工姓名": "Employee Name", | |||||
"dj-c-请输入员工编号": "Enter employee number", | |||||
"dj-c-将此任务转派至您": "assigned this task to you", | |||||
"dj-c-退回重签至": "Return To", | |||||
"dj-c-请输入签核意见": "Please enter your approval comments", | |||||
"dj-c-签核意见": "Approval comments", | |||||
"dj-c-查看签核进度": "Check sign off progress", | |||||
"dj-c-是否确定转派": "Are you sure you want to transfer", | |||||
"dj-c-是否确定退回": "Are you sure you want to return it", | |||||
"dj-c-签核进程": "Sign off process", | |||||
"dj-c-是否确定同意": "Are you sure you agree", | |||||
"dj-c-非必填": "Not required", | |||||
"dj-c-未开始": "Not started", | |||||
"dj-c-进行中": "In progress", | |||||
"dj-c-已完成": "Completed", | |||||
"dj-c-退回": "Return", | |||||
"dj-c-加签": "Countersignature", | |||||
"dj-c-已同意": "Agreed", | |||||
"dj-c-已撤销": "rescinded", | |||||
"dj-c-已中止": "Aborted", | |||||
"dj-c-已暂停": "Suspended", | |||||
"dj-c-不需签核": "No sign off", | |||||
"dj-c-需签核": "Sign off required", | |||||
"dj-c-取回重办": "Back to recreate", | |||||
"dj-c-已通知": "Notified", | |||||
"dj-c-已会办": "Will have to do", | |||||
"dj-c-正在进行": "in processing", | |||||
"dj-c-紧急": "in urgent", | |||||
"dj-c-逾期": "be overdue", | |||||
"dj-c-天": "day", | |||||
"dj-c-时": "hours", | |||||
"dj-c-分钟": "minutes", | |||||
"dj-c-最早": "The earliest", | |||||
"dj-c-最大逾期": "Maximum overdue", | |||||
"dj-c-共n项": "{{ n }} items in total", | |||||
"dj-c-共str": "{{ str }} in total", | |||||
"dj-c-个": " ", | |||||
"dj-c-页面加载失败": "Page Loading Failed", | |||||
"dj-c-重新加载": "Reload", | |||||
"dj-c-请不要输入表情": "Please do not enter the expression", | |||||
"dj-c-不能选择当前用户": "The current user cannot be selected", | |||||
"dj-c-是否确定退回重办": "Are you sure to return and re-do", | |||||
"dj-c-所有计量": "All measurements", | |||||
"dj-c-库存年月": "Inventory date", | |||||
"dj-c-周转天数": "Turnover days", | |||||
"dj-c-平均存货净额": "Average net inventory", | |||||
"dj-c-销售净额": "Net sales", | |||||
"dj-c-平均耗量(年月)": "Average consumption (month, month)", | |||||
"dj-c-标准差(年月)": "Standard deviation (month, year)", | |||||
"dj-c-平均销售金额(年月)": "Average sales amount (month, month)", | |||||
"dj-c-标准化生产": "Standardized production", | |||||
"dj-c-修改": "edit", | |||||
"dj-c-已": "result ", | |||||
"dj-c-总量": "Total", | |||||
"dj-c-目标:差异率小于n": "Target:The difference rate is less than {{n}}", | |||||
"dj-c-共n项定位调整": "A total of{{n}}positioning adjustment(s)", | |||||
"dj-c-实际": "Actual", | |||||
"dj-c-合理": "Expected", | |||||
"dj-c-本期共": "There are positioning adjustments in ", | |||||
"dj-c-项": " test(s)", | |||||
"dj-c-检测出现定位调整,建议修改参数": " in this issue, and it is recommended to modify the parameters", | |||||
"dj-c-成品": "Products", | |||||
"dj-c-半成品": "Semi-finished products", | |||||
"dj-c-原材料": "Material", | |||||
"dj-c-耗用金额": "Amount consumed", | |||||
"dj-c-高": "High", | |||||
"dj-c-中": "Medium", | |||||
"dj-c-低": "Low", | |||||
"dj-c-频进货": " frequency purchase", | |||||
"dj-c-原材料机制调整建议": "Material mechanism adjustment suggestions", | |||||
"dj-c-项采纳": "adopted", | |||||
"dj-c-项拒绝": "rejection(s)", | |||||
"dj-c-共计": "Total", | |||||
"dj-c-n项": "{{n}} item(s)", | |||||
"dj-c-返回": "Back", | |||||
"dj-c-统计": "Total", | |||||
"dj-c-标准差异率n": "Standard deviation rate {{n}}", | |||||
"dj-c-采购间隔参数": "Purchase interval parameters", | |||||
"dj-c-实际采购LT": "Actual purchase LT", | |||||
"dj-c-实际采购": "Actual purchase", | |||||
"dj-c-机制调整建议": "Mechanism adjustment suggestions", | |||||
"dj-c-建议新定位": "Suggest new positioning", | |||||
"dj-c-高频进货": "High frequency purchase", | |||||
"dj-c-中频进货": "Medium frequency purchase", | |||||
"dj-c-低频进货": "Low frequency purchase", | |||||
"dj-c-高频进货n项": "High frequency purchase {{n}} item(s)", | |||||
"dj-c-中频进货n项": "Medium frequency purchase {{n}} item(s)", | |||||
"dj-c-低频进货n项": "Low frequency purchase {{n}} item(s)", | |||||
"dj-c-没有可获取到的可退回列表": "No returnable list available", | |||||
"dj-c-数据加载异常": "Page Loading Failed", | |||||
"dj-c-正在校验": "validating", | |||||
"dj-c-输入错误": "Incorrect input", | |||||
"dj-c-输入不完整": "Incomplete input", | |||||
"dj-c-输入不完整或者错误": "Incomplete or incorrect input", | |||||
"dj-c-校验失败": "Verification failed", | |||||
"dj-c-支持批量提交但未选择对象": "Batch submission is supported but no object is selected", | |||||
"dj-c-差异": "difference", | |||||
"dj-c-方案进度": "Programme progress", | |||||
"dj-c-加量": "dosage", | |||||
"dj-c-减量": "decrement", | |||||
"dj-c-延迟": "delay", | |||||
"dj-c-提早": "early", | |||||
"dj-c-拆行输入错误": "Split line input error", | |||||
"dj-c-请上传": "Please select and upload file", | |||||
"dj-c-上传于": "{{user}} upload file at {{date}}", | |||||
"dj-c-已删除附件": "Attachment deleted", | |||||
"dj-c-删除附件失败": "Delete Failed", | |||||
"dj-c-上传失败": "Upload Failed", | |||||
"dj-c-转派": "Transfer", | |||||
"dj-c-没有查询到可退回的关卡名称": "No returnable level name found", | |||||
"dj-c-请刷新重试": "Please refresh and try again", | |||||
"dj-c-当前任务已完成": "Current task completed", | |||||
"dj-c-加签意见": "Endorsement opinion", | |||||
"dj-c-请选择加签方式": "Please choose the way of sign", | |||||
"dj-c-向前加签": "Sign forward", | |||||
"dj-c-向后加签": "Sign backward", | |||||
"dj-c-签核人": "Signer", | |||||
"dj-c-请选择": "Please choose", | |||||
"dj-c-请选择签核人": "Please choose signer", | |||||
"dj-c-是否确定撤回": "Are you sure you want to withdraw", | |||||
"dj-c-撤回后同一方案且同一批提交的方案将同步撤回": "After withdrawal, the same scheme and the same batch of submitted schemes will be withdrawn simultaneously", | |||||
"dj-c-撤回意见": "Withdrawal of opinion", | |||||
"dj-c-发票上传": "Invoice Upload", | |||||
"dj-c-发票代号": "Invoice Code", | |||||
"dj-c-发票号码": "Invoice Number", | |||||
"dj-c-开票日期": "Invoice Date", | |||||
"dj-c-校验码(后6位)": "Check Code (last 6 digits)", | |||||
"dj-c-请将6位校验码输入完整": "Please input the 6-digit check code completely", | |||||
"dj-c-金额(不含税)": "Amount (excluding tax)", | |||||
"dj-c-只能输入数字": "only can input numbers", | |||||
"dj-c-只能输入整数或者带2位小数": "only input integer or with 2 decimal places", | |||||
"dj-c-限制类型": "Support only {{ n }}.", | |||||
"dj-c-不限制大小": "Unlimited size.", | |||||
"dj-c-限制大小": "Limited {{ n }}.", | |||||
"dj-c-请输入关键字": "Please enter keywords", | |||||
"dj-c-合计": "Total", | |||||
"dj-c-是否确定加签": "Are you sure to sign", | |||||
"dj-c-已撤回": "Withdrawn", | |||||
"dj-c-请输入撤回意见": "Please enter withdrawal comments", | |||||
"dj-c-重签意见": "Re sign comments", | |||||
"dj-c-转派意见": "Opinions on assignment", | |||||
"dj-c-请填写意见": "Fill in comments", | |||||
"dj-c-重办意见": "Reorganized comments", | |||||
"dj-c-请填写重办意见": "Please fill in reorganized comments", | |||||
"dj-c-请输入发票代号": "Please input invoice code", | |||||
"dj-c-请输入发票号码": "Please enter invoice number", | |||||
"dj-c-请输入开票日期": "Please enter billing date", | |||||
"dj-c-请输入金额": "Please input the amount(Excluding tax)", | |||||
"dj-c-上传发票": "Upload Invoice", | |||||
"dj-c-支持上传多张发票": "Support to upload multiple invoices", | |||||
"dj-c-请留言": "Please input message", | |||||
"dj-c-发送": "Send", | |||||
"dj-c-通知提醒": "Notice to remind", | |||||
"dj-c-msg-content": "Please finish the task as soon as possible ~", | |||||
"dj-c-代": "E", | |||||
"dj-c-前": " before", | |||||
"dj-c-生效": "Valid", | |||||
"dj-c-已失效": "Invalid", | |||||
"dj-c-已保存": "Saved", | |||||
"dj-c-未保存": "Not saved", | |||||
"dj-c-已选中n项": "{{ n }} selected", | |||||
"dj-c-m来源共n项发生变更": "{{m}} total {{n}} item changed", | |||||
"dj-c-查看甘特图": "View Gantt chart", | |||||
"dj-c-甘特图": "Gantt chart", | |||||
"dj-c-异常": "abnormal", | |||||
"dj-c-逾期n天": "overdue for {{n}} days", | |||||
"dj-c-全部信息请输入关键字搜索": "Please enter keyword search for all information", | |||||
"dj-c-*至少选中一项数据": "*Select at least one item of data", | |||||
"dj-c-已选n项": "{{ n }} items selected", | |||||
"dj-c-荐": "Recommendation", | |||||
"dj-c-请输入专案编号": "Please enter project number", | |||||
"dj-c-请输入专案名称": "Please enter project name" | |||||
} |
@ -0,0 +1,157 @@ | |||||
{ | |||||
"dj-请输入": "Please Input ", | |||||
"dj-请选择": "Please Select ", | |||||
"dj-搜索点什么吧": "Search for date, project target, task name, charge person or executor", | |||||
"dj-历史记录": "Search History", | |||||
"dj-登出": "Sign Out", | |||||
"dj-管理模组": "Management Module", | |||||
"dj-交付设计器": "Delivery Designer", | |||||
"menu": { | |||||
"project-center": "Projects Center" | |||||
}, | |||||
"dj-全部关闭": "Close All", | |||||
"dj-批量操作": "Batch", | |||||
"dj-来源由n张工单组成": "source:There are {{ n }} {{sourceName}} such as {{ ids }}", | |||||
"dj-来源由n张x单组成": "source:There are {{taskName}}", | |||||
"dj-来源由n张如ids的x单组成": "source:There are {{ n }} {{taskName}} such as {{ ids }}", | |||||
"dj-倒计时": "Countdown", | |||||
"dj-预计开工日": "Expected commencement date", | |||||
"dj-来源": "Source", | |||||
"dj-由Athena发起当前项目": "Current project initiated by Athena", | |||||
"dj-人工": "Manual", | |||||
"dj-自动": "Auto", | |||||
"dj-未完成": "Unfinished", | |||||
"dj-需完成": "Finished", | |||||
"dj-共计": "Total", | |||||
"dj-共n笔": "{{n}} in total", | |||||
"dj-n笔": "{{n}}", | |||||
"dj-待入库n项": "{{n}} items to be warehoused", | |||||
"dj-我知道了": "I got it!", | |||||
"dj-立即查看": "detail", | |||||
"dj-切换企业": "Switch Companies", | |||||
"dj-个性化设定": "Settings", | |||||
"dj-常用设置": "Common Settings", | |||||
"dj-开启勿扰": "Do not disturb has been turned on", | |||||
"dj-关闭勿扰": "Do not disturb has been turned off", | |||||
"dj-开启代理人": "Agent has been turned on", | |||||
"dj-关闭代理人": "Agent has been turned off", | |||||
"dj-基本设置": "Personalized Settings", | |||||
"dj-工作桌面": "Desktop", | |||||
"dj-搜索结果": "Search Result", | |||||
"dj-进度查询": "Progress Inquiry", | |||||
"dj-发起项目": "Add Project", | |||||
"dj-项目任务": "Tasks", | |||||
"dj-当责者": "Charge Person", | |||||
"dj-项目名称": "Project Name", | |||||
"dj-状态": "Status", | |||||
"dj-task-report-项目状况查询": "Project Status", | |||||
"dj-task-report-历史项目查询": "Project History", | |||||
"dj-task-report-区间": "Interval", | |||||
"dj-task-report-天": "Day", | |||||
"dj-task-report-周": "Week", | |||||
"dj-task-report-月": "Month", | |||||
"dj-task-report-季度": "Season", | |||||
"dj-task-report-项目名称": "Project Name", | |||||
"dj-task-report-当责者": "Charge Person", | |||||
"dj-task-report-筛查": "Search", | |||||
"dj-task-report-重置": "Reset", | |||||
"dj-task-report-目标": "Target", | |||||
"dj-task-report-子项目": "Children Project", | |||||
"dj-task-report-子项目数单位": "", | |||||
"dj-task-report-请选择项目名称": "Please select project name", | |||||
"dj-task-report-请选择当责者": "Please select charge person", | |||||
"dj-task-report-没有结果": "No related project found, please check again", | |||||
"dj-task-report-项": "item", | |||||
"dj-set-用户ID": "ID", | |||||
"dj-set-用户名称": "Name", | |||||
"dj-set-手机号码": "Phone", | |||||
"dj-set-所属组织": "Organization", | |||||
"dj-set-运营单位": "Business Unit", | |||||
"dj-set-语言设定": "Language", | |||||
"dj-set-时区选择": "Timezone", | |||||
"dj-set-变更密码": "Password", | |||||
"dj-set-点此修改": "Click Here", | |||||
"dj-set-代理人设置": "Agent Setup", | |||||
"dj-set-代理人": "Agent", | |||||
"dj-set-代理区间": "Agency Interval", | |||||
"dj-set-勿扰模式": "Do Not Disturb", | |||||
"dj-set-开始时间": "Start Time", | |||||
"dj-set-结束时间": "End Time", | |||||
"dj-set-设置代理区间成功": "Set proxy interval successfully", | |||||
"dj-set-设置代理区间失败": "Failed to set proxy interval", | |||||
"dj-是否确认提交": "Are you sure to submit ?", | |||||
"dj-取消": "Cancel", | |||||
"dj-确认": "Confirm", | |||||
"dj-提交": "Submit", | |||||
"dj-下一步": "Next Step", | |||||
"dj-提示": "Tips", | |||||
"dj-拒绝时审核意见必填哦": "approval comments required when rejecting~", | |||||
"dj-是否签核": "whether to sign off for {{title}} ?", | |||||
"dj-操作成功": "execute successfully", | |||||
"dj-上传成功": "upload successfully", | |||||
"dj-加载中": "Loading", | |||||
"dj-通知执行人": "Notification to executor", | |||||
"dj-去执行待办": "Go to the to-do list", | |||||
"dj-分享链接": "Share links", | |||||
"dj-查看子项目详情": "View sub project details", | |||||
"dj-复制成功": "Copied Successfully", | |||||
"dj-通知成功": "Notification successful", | |||||
"dj-消息通知": "Message Notification", | |||||
"dj-重要消息": "Important Message", | |||||
"dj-工作动态": "Work News", | |||||
"dj-紧急": "Urgent", | |||||
"dj-重要": "Focus", | |||||
"dj-变更": "Change", | |||||
"dj-共n个任务异常": "Total of {{n}} task exceptions", | |||||
"dj-共n个任务进行中": "{{n}} tasks are in progress", | |||||
"dj-已逾期": "Overdue", | |||||
"dj-小时": "hours", | |||||
"dj-天": "days", | |||||
"dj-标记所有为已读": "Mark all as read", | |||||
"dj-删除所有已读消息": "Delete all read messages", | |||||
"dj-通知设置": "Notification settings", | |||||
"dj-项目通知": "Project Notification", | |||||
"dj-暂无消息": "No Messages", | |||||
"dj-分钟前": "minutes ago", | |||||
"dj-今天": "today", | |||||
"dj-昨天": "yesterday", | |||||
"dj-周一": "Monday", | |||||
"dj-周二": "Tuesday", | |||||
"dj-周三": "Wednesday", | |||||
"dj-周四": "Thursday", | |||||
"dj-周五": "Friday", | |||||
"dj-周六": "Saturday", | |||||
"dj-周日": "Sunday", | |||||
"dj-任务通知": "task notice", | |||||
"dj-刚刚": "moment ago", | |||||
"dj-系统消息": "System Messaage", | |||||
"dj-异常排除": "exception exclusion", | |||||
"dj-任务已关闭": "The task has been closed", | |||||
"dj-暂无更多项目类型": "No more project types", | |||||
"dj-工单有变更,查看详情": "There are changes to the work order. Please check the details", | |||||
"dj-等": " etc.", | |||||
"dj-共": " Totally", | |||||
"dj-个": " ", | |||||
"dj-张": " ", | |||||
"dj-运营单元-1": "Branch Companies", | |||||
"dj-运营单元-2": "Factories", | |||||
"dj-运营单元-3": "Workshops", | |||||
"dj-工单明细": "Work Order Details", | |||||
"dj-明细": "Details", | |||||
"dj-数据上传中": "Data uploading", | |||||
"dj-数据校验中": "Data verification in progress", | |||||
"dj-msg-ATHENA_REMIND": "Athena Remind", | |||||
"dj-msg-EXCEPTION_OR_OVERDUE": "Exception/Overdue", | |||||
"dj-msg-INTERNAL_REMIND": "Notice", | |||||
"dj-msg-PROXY_REMIND": "Agency Remind", | |||||
"dj-msg-option-ALL": "All", | |||||
"dj-msg-option-EMERGENCY": "Emergency", | |||||
"dj-msg-option-EXCEPTION_OR_OVERDUE": "Exception/Overdue", | |||||
"dj-msg-option-NOTICE": "Notice", | |||||
"dj-msg-option-PROXY": "Agency", | |||||
"dj-msg-option-OTHER": "Other", | |||||
"dj-提醒关注": "reminds you to pay attention", | |||||
"dj-基础资料录入": "Basic data entry", | |||||
"dj-请输入需要录入的基础资料模板名称": "Please enter the name of the master data template to be entered", | |||||
"dj-已通知x": "also notice {{x}}" | |||||
} |
@ -0,0 +1,3 @@ | |||||
{ | |||||
} |
@ -0,0 +1,36 @@ | |||||
{ | |||||
"dj-task-日": "Day", | |||||
"dj-task-月": "Month", | |||||
"dj-task-今天": "Today", | |||||
"dj-task-本月": "Current month", | |||||
"dj-task-week1": "Monday", | |||||
"dj-task-week2": "Tuesday", | |||||
"dj-task-week3": "Wednesday", | |||||
"dj-task-week4": "Thursday", | |||||
"dj-task-week5": "Friday", | |||||
"dj-task-week6": "Saturday", | |||||
"dj-task-week0": "Sunday", | |||||
"dj-task-逾期任务": "Overdue Tasks", | |||||
"dj-task-暂无更多任务逾期": "No more tasks overdue", | |||||
"dj-task-任务未逾期": "The work is well done and the tasks is not overdue", | |||||
"dj-task-暂无异常排除": "There is no exception exclusion task to track", | |||||
"dj-task-暂无项目逾期": "There is no project overdue to be followed up", | |||||
"dj-task-今日需完成n项任务": "Tasks need to be completed today {{ n }} ", | |||||
"dj-task-需完成n项任务": "You need to complete {{ n }} tasks", | |||||
"dj-task-共n项任务": "{{ m }} tasks in total", | |||||
"dj-task-共计n项任务": "Total {{ n }} tasks", | |||||
"dj-task-查看完整版": "Enter the task of the day and view the full version", | |||||
"dj-task-项目逾期需跟催": "Overdue projects need to be followed up", | |||||
"dj-task-异常排除需追踪": "Exception elimination needs tracking", | |||||
"dj-task-今日优先处理任务": "Priority tasks today", | |||||
"dj-task-今日一般任务": "General tasks today", | |||||
"dj-task-可提前处理任务": "Tasks can be processed ahead of time", | |||||
"dj-task-暂无任务": "No task", | |||||
"dj-task-暂无任务可执行": "No task to execute", | |||||
"dj-task-all": "All", | |||||
"dj-task-等n个": " etc., totally {{ n }} ", | |||||
"dj-task-unit-1": "Branch Companies", | |||||
"dj-task-unit-2": "Factories", | |||||
"dj-task-unit-3": "Workshops", | |||||
"dj-task-确定": "OK" | |||||
} |
@ -0,0 +1,215 @@ | |||||
{ | |||||
"dj-c-由Athena发起当前项目": "由Athena发起当前项目", | |||||
"dj-c-预计开工日": "预计开工日", | |||||
"dj-c-来源由n张工单组成": "来源:由{{ taskName }}组成", | |||||
"dj-c-来源由n张ids工单组成": "来源:由 {{ ids }} 等{{ n }}张{{ taskName }}组成", | |||||
"dj-c-倒计时": "倒计时", | |||||
"dj-c-需完成": "需完成", | |||||
"dj-c-收起": "收起", | |||||
"dj-c-更多": "更多", | |||||
"dj-c-操作": "操作", | |||||
"dj-c-更换": "更换", | |||||
"dj-c-提示": "提示", | |||||
"dj-c-我知道了": "我知道了", | |||||
"dj-c-存在异常是否忽略提交": "存在 {{n}} 项异常,<br />是否确定提交?", | |||||
"dj-c-是否确定提交": "是否确定提交", | |||||
"dj-c-请确认是否填写完整": "请确认是否填写完整", | |||||
"dj-c-取消": "取消", | |||||
"dj-c-确认": "确认", | |||||
"dj-c-确定": "确定", | |||||
"dj-c-明细": "明细", | |||||
"dj-c-下载": "下载", | |||||
"dj-c-预览": "预览", | |||||
"dj-c-已读n次": "已读 {{ n }} 次", | |||||
"dj-c-取消拆行": "取消拆行", | |||||
"dj-c-拆行": "拆行", | |||||
"dj-c-旧公式": "旧公式", | |||||
"dj-c-新公式": "新公式", | |||||
"dj-c-查看模拟推估": "查看模拟推估", | |||||
"dj-c-权重总和应等于100": "权重总和应等于100", | |||||
"dj-c-暂无数据": "暂无数据", | |||||
"dj-c-必填": "必填", | |||||
"dj-c-重新编辑": "重新编辑", | |||||
"dj-c-编辑": "编辑", | |||||
"dj-c-请选择需要提交的数据": "请选择需要提交的数据", | |||||
"dj-c-收货地址": "收货地址", | |||||
"dj-c-采购员编号": "采购员编号", | |||||
"dj-c-转派至": "转派至", | |||||
"dj-c-员工编号": "员工编号", | |||||
"dj-c-员工姓名": "员工姓名", | |||||
"dj-c-请输入员工编号": "请输入员工编号", | |||||
"dj-c-将此任务转派至您": "将此任务转派至您", | |||||
"dj-c-退回重签至": "退回重签至", | |||||
"dj-c-请输入签核意见": "请输入签核意见", | |||||
"dj-c-签核意见": "签核意见", | |||||
"dj-c-是否确定转派": "是否确定转派", | |||||
"dj-c-是否确定退回": "是否确定退回", | |||||
"dj-c-签核进程": "签核进程", | |||||
"dj-c-查看签核进度": "查看签核进度", | |||||
"dj-c-是否确定同意": "是否确定同意", | |||||
"dj-c-非必填": "非必填", | |||||
"dj-c-未开始": "未开始", | |||||
"dj-c-进行中": "进行中", | |||||
"dj-c-已完成": "已完成", | |||||
"dj-c-退回": "退回", | |||||
"dj-c-加签": "加签", | |||||
"dj-c-已同意": "已同意", | |||||
"dj-c-已撤销": "已撤销", | |||||
"dj-c-已中止": "已中止", | |||||
"dj-c-已暂停": "已暂停", | |||||
"dj-c-不需签核": "不需签核", | |||||
"dj-c-需签核": "需签核", | |||||
"dj-c-取回重办": "取回重办", | |||||
"dj-c-已通知": "已通知", | |||||
"dj-c-已会办": "已会办", | |||||
"dj-c-正在进行": "正在进行", | |||||
"dj-c-逾期": "逾期", | |||||
"dj-c-紧急": "紧急", | |||||
"dj-c-天": "天", | |||||
"dj-c-时": "时", | |||||
"dj-c-分钟": "分钟", | |||||
"dj-c-最早": "最早", | |||||
"dj-c-最大逾期": "最大逾期", | |||||
"dj-c-共n项": "共{{ n }}项", | |||||
"dj-c-共str": "共{{ str }}", | |||||
"dj-c-个": "个", | |||||
"dj-c-页面加载失败": "页面加载失败", | |||||
"dj-c-重新加载": "重新加载", | |||||
"dj-c-请不要输入表情": "请不要输入表情", | |||||
"dj-c-不能选择当前用户": "不能选择当前用户", | |||||
"dj-c-是否确定退回重办": "是否确定退回重办", | |||||
"dj-c-所有计量": "所有计量", | |||||
"dj-c-库存年月": "库存年月", | |||||
"dj-c-周转天数": "周转天数", | |||||
"dj-c-平均存货净额": "平均存货净额", | |||||
"dj-c-销售净额": "销售净额", | |||||
"dj-c-平均耗量(年月)": "平均耗量(年月)", | |||||
"dj-c-标准差(年月)": "标准差(年月)", | |||||
"dj-c-平均销售金额(年月)": "平均销售金额(年月)", | |||||
"dj-c-标准化生产": "标准化生产", | |||||
"dj-c-不可放弃": "不可放弃", | |||||
"dj-c-接单再做": "接单再做", | |||||
"dj-c-允许低缺料": "允许低缺料", | |||||
"dj-c-修改": "修改", | |||||
"dj-c-已": "已", | |||||
"dj-c-总量": "总量", | |||||
"dj-c-目标:差异率小于n": "目标:差异率小于{{n}}", | |||||
"dj-c-共n项定位调整": "共{{n}}项定位调整", | |||||
"dj-c-实际": "实际", | |||||
"dj-c-合理": "合理", | |||||
"dj-c-建议": "建议", | |||||
"dj-c-本期共": "本期共", | |||||
"dj-c-项": "项", | |||||
"dj-c-检测出现定位调整,建议修改参数": "检测出现定位调整,建议修改参数", | |||||
"dj-c-成品": "成品", | |||||
"dj-c-半成品": "半成品", | |||||
"dj-c-原材料": "原材料", | |||||
"dj-c-耗用金额": "耗用金额", | |||||
"dj-c-高": "高", | |||||
"dj-c-中": "中", | |||||
"dj-c-低": "低", | |||||
"dj-c-频进货": "频进货", | |||||
"dj-c-原材料机制调整建议": "原材料机制调整建议", | |||||
"dj-c-项采纳": "项采纳", | |||||
"dj-c-项拒绝": "项拒绝", | |||||
"dj-c-共计": "共计", | |||||
"dj-c-n项": "{{n}}项", | |||||
"dj-c-返回": "返回", | |||||
"dj-c-统计": "统计", | |||||
"dj-c-标准差异率n": "标准差异率{{n}}", | |||||
"dj-c-采购间隔参数": "采购间隔参数", | |||||
"dj-c-实际采购LT": "实际采购LT", | |||||
"dj-c-实际采购": "实际采购", | |||||
"dj-c-机制调整建议": "机制调整建议", | |||||
"dj-c-建议新定位": "建议新定位", | |||||
"dj-c-高频进货": "高频进货", | |||||
"dj-c-中频进货": "中频进货", | |||||
"dj-c-低频进货": "低频进货", | |||||
"dj-c-高频进货n项": "高频进货{{n}}项", | |||||
"dj-c-中频进货n项": "中频进货{{n}}项", | |||||
"dj-c-低频进货n项": "低频进货{{n}}项", | |||||
"dj-c-没有可获取到的可退回列表": "没有可获取到的可退回列表", | |||||
"dj-c-数据加载异常": "数据加载异常", | |||||
"dj-c-正在校验": "正在校验", | |||||
"dj-c-输入错误": "输入错误", | |||||
"dj-c-输入不完整": "输入不完整", | |||||
"dj-c-输入不完整或者错误": "输入不完整或者输入错误", | |||||
"dj-c-校验失败": "校验失败", | |||||
"dj-c-支持批量提交但未选择对象": "支持批量提交但未选择对象", | |||||
"dj-c-差异": "差异", | |||||
"dj-c-方案进度": "方案进度", | |||||
"dj-c-加量": "加量", | |||||
"dj-c-减量": "减量", | |||||
"dj-c-延迟": "延迟", | |||||
"dj-c-提早": "提早", | |||||
"dj-c-拆行输入错误": "拆行输入错误", | |||||
"dj-c-请上传": "请上传", | |||||
"dj-c-上传于": "{{user}}上传于{{date}}", | |||||
"dj-c-已删除附件": "附件已删除", | |||||
"dj-c-删除附件失败": "删除附件失败", | |||||
"dj-c-上传失败": "上传失败", | |||||
"dj-c-转派": "转派", | |||||
"dj-c-没有查询到可退回的关卡名称": "没有查询到可退回的关卡名称", | |||||
"dj-c-请刷新重试": "请刷新重试", | |||||
"dj-c-当前任务已完成": "当前任务已完成", | |||||
"dj-c-加签意见": "加签意见", | |||||
"dj-c-请选择加签方式": "请选择加签方式", | |||||
"dj-c-向前加签": "向前加签", | |||||
"dj-c-向后加签": "向后加签", | |||||
"dj-c-签核人": "签核人", | |||||
"dj-c-请选择": "请选择", | |||||
"dj-c-请选择签核人": "请选择签核人", | |||||
"dj-c-是否确定撤回": "是否确定撤回", | |||||
"dj-c-撤回后同一方案且同一批提交的方案将同步撤回": "撤回后同一方案且同一批提交的方案将同步撤回", | |||||
"dj-c-撤回意见": "撤回意见", | |||||
"dj-c-发票上传": "发票上传", | |||||
"dj-c-发票代号": "发票代号", | |||||
"dj-c-发票号码": "发票号码", | |||||
"dj-c-开票日期": "开票日期", | |||||
"dj-c-校验码(后6位)": "校验码(后6位)", | |||||
"dj-c-请将6位校验码输入完整": "请将6位校验码输入完整", | |||||
"dj-c-金额(不含税)": "金额(不含税)", | |||||
"dj-c-只能输入数字": "只能输入数字", | |||||
"dj-c-只能输入整数或者带2位小数": "只能输入整数或者带2位小数", | |||||
"dj-c-限制类型": "只支持{{ n }}", | |||||
"dj-c-不限制大小": "大小不限制", | |||||
"dj-c-限制大小": "大小限制{{ n }}", | |||||
"dj-c-请输入关键字": "请输入关键字", | |||||
"dj-c-合计": "合计", | |||||
"dj-c-是否确定加签": "是否确定加签", | |||||
"dj-c-已撤回": "已撤回", | |||||
"dj-c-请输入撤回意见": "请输入撤回意见", | |||||
"dj-c-重签意见": "重签意见", | |||||
"dj-c-转派意见": "转派意见", | |||||
"dj-c-请填写意见": "请填写意见", | |||||
"dj-c-重办意见": "重办意见", | |||||
"dj-c-请填写重办意见": "请填写重办意见", | |||||
"dj-c-请输入发票代号": "请输入发票代号", | |||||
"dj-c-请输入发票号码": "请输入发票号码", | |||||
"dj-c-请输入开票日期": "请输入开票日期", | |||||
"dj-c-请输入金额": "请输入金额(不含税)", | |||||
"dj-c-上传发票": "上传发票", | |||||
"dj-c-支持上传多张发票": "支持上传多张发票", | |||||
"dj-c-请留言": "请输入留言~", | |||||
"dj-c-发送": "发送", | |||||
"dj-c-通知提醒": "通知提醒", | |||||
"dj-c-msg-content": "请尽快完成任务~", | |||||
"dj-c-代": "代", | |||||
"dj-c-前": "前", | |||||
"dj-c-生效": "生效", | |||||
"dj-c-已失效": "已失效", | |||||
"dj-c-已保存": "已保存", | |||||
"dj-c-未保存": "未保存", | |||||
"dj-c-已选中n项": "已选中{{ n }}项", | |||||
"dj-c-m来源共n项发生变更": "{{m}}共{{n}}项发生变更", | |||||
"dj-c-查看甘特图": "查看甘特图", | |||||
"dj-c-甘特图": "甘特图", | |||||
"dj-c-异常": "异常", | |||||
"dj-c-逾期n天": "逾期{{ n }}天", | |||||
"dj-c-全部信息请输入关键字搜索": "全部信息请输入关键字搜索", | |||||
"dj-c-*至少选中一项数据": "*至少选中一项数据", | |||||
"dj-c-已选n项": "已选{{ n }}项", | |||||
"dj-c-荐": "荐", | |||||
"dj-c-请输入专案编号": "请输入专案编号", | |||||
"dj-c-请输入专案名称": "请输入专案名称" | |||||
} |
@ -0,0 +1,167 @@ | |||||
{ | |||||
"dj-请输入": "请输入", | |||||
"dj-请选择": "请选择", | |||||
"dj-搜索点什么吧": "搜索点什么吧", | |||||
"dj-历史记录": "搜索历史", | |||||
"dj-登出": "登出", | |||||
"dj-管理模组": "管理模组", | |||||
"dj-交付设计器": "交付设计器", | |||||
"menu": { | |||||
"project-center": "项目中心" | |||||
}, | |||||
"dj-全部关闭": "全部关闭", | |||||
"dj-批量操作": "批量操作", | |||||
"dj-来源由n张工单组成": "来源:由 {{ ids }} 等 {{ n }} 张{{sourceName}}组成", | |||||
"dj-来源由n张x单组成": "来源:由 {{taskName}} 组成", | |||||
"dj-来源由n张如ids的x单组成": "来源:由 {{ ids }} 等 {{ n }} 张 {{taskName}} 组成", | |||||
"dj-倒计时": "倒计时", | |||||
"dj-预计开工日": "预计开工日", | |||||
"dj-来源": "来源", | |||||
"dj-由Athena发起当前项目": "由Athena发起当前项目", | |||||
"dj-人工": "人工", | |||||
"dj-自动": "自动", | |||||
"dj-未完成": "未完成", | |||||
"dj-需完成": "需完成", | |||||
"dj-共计": "共计", | |||||
"dj-共n笔": "共 {{n}} 笔", | |||||
"dj-n笔": "{{n}} 笔", | |||||
"dj-待入库n项": "待入库 {{n}} 项", | |||||
"dj-我知道了": "我知道了", | |||||
"dj-立即查看": "立即查看", | |||||
"dj-切换企业": "切换企业", | |||||
"dj-个性化设定": "设置", | |||||
"dj-常用设置": "常用设置", | |||||
"dj-开启勿扰": "已开启勿扰", | |||||
"dj-关闭勿扰": "已关闭勿扰", | |||||
"dj-开启代理人": "已开启代理人", | |||||
"dj-关闭代理人": "已关闭代理人", | |||||
"dj-基本设置": "个性化设定", | |||||
"dj-工作桌面": "工作桌面", | |||||
"dj-搜索结果": "搜索结果", | |||||
"dj-进度查询": "进度查询", | |||||
"dj-发起项目": "发起项目", | |||||
"dj-项目任务": "项目任务", | |||||
"dj-当责者": "当责者", | |||||
"dj-项目名称": "项目名称", | |||||
"dj-状态": "状态", | |||||
"dj-task-report-项目状况查询": "项目状况查询", | |||||
"dj-task-report-历史项目查询": "历史项目查询", | |||||
"dj-task-report-区间": "区间", | |||||
"dj-task-report-天": "天", | |||||
"dj-task-report-周": "周", | |||||
"dj-task-report-月": "月", | |||||
"dj-task-report-季度": "季度", | |||||
"dj-task-report-项目名称": "项目名称", | |||||
"dj-task-report-当责者": "当责者", | |||||
"dj-task-report-筛查": "筛查", | |||||
"dj-task-report-重置": "重置", | |||||
"dj-task-report-目标": "目标", | |||||
"dj-task-report-子项目": "子项目", | |||||
"dj-task-report-子项目数": "子项目数", | |||||
"dj-task-report-子项目数单位": "个", | |||||
"dj-task-report-请选择项目名称": "请选择项目名称", | |||||
"dj-task-report-请选择当责者": "请选择当责者", | |||||
"dj-task-report-没有结果": "没有找到相关项目,请重新筛查", | |||||
"dj-task-report-项": "项", | |||||
"dj-set-用户ID": "用户ID", | |||||
"dj-set-用户名称": "用户名称", | |||||
"dj-set-手机号码": "手机号码", | |||||
"dj-set-所属组织": "所属组织", | |||||
"dj-set-运营单位": "运营单位", | |||||
"dj-set-语言设定": "语言设定", | |||||
"dj-set-时区选择": "时区选择", | |||||
"dj-set-变更密码": "变更密码", | |||||
"dj-set-点此修改": "点此修改", | |||||
"dj-set-代理人设置": "代理人设置", | |||||
"dj-set-代理人": "代理人", | |||||
"dj-set-代理区间": "代理区间", | |||||
"dj-set-勿扰模式": "勿扰模式", | |||||
"dj-set-开始时间": "开始时间", | |||||
"dj-set-结束时间": "结束时间", | |||||
"dj-set-设置代理区间成功": "设置代理区间成功", | |||||
"dj-set-设置代理区间失败": "设置代理区间失败", | |||||
"dj-是否确认提交": "是否确认提交", | |||||
"dj-取消": "取消", | |||||
"dj-确认": "确认", | |||||
"dj-提交": "提交", | |||||
"dj-下一步": "下一步", | |||||
"dj-拒绝时审核意见必填哦": "拒绝时审核意见必填哦~", | |||||
"dj-提示": "提示", | |||||
"dj-是否签核": "是否 {{title}} 签核", | |||||
"dj-操作成功": "操作成功", | |||||
"dj-上传成功": "上传成功", | |||||
"dj-加载中": "加载中", | |||||
"dj-通知执行人": "通知执行人", | |||||
"dj-去执行待办": "去执行待办", | |||||
"dj-分享链接": "分享链接", | |||||
"dj-查看子项目详情": "查看子项目详情", | |||||
"dj-复制成功": "复制成功", | |||||
"dj-通知成功": "通知成功", | |||||
"dj-消息通知": "消息通知", | |||||
"dj-重要消息": "重要消息", | |||||
"dj-工作动态": "工作动态", | |||||
"dj-紧急": "紧急", | |||||
"dj-重要": "特别关注", | |||||
"dj-变更": "变更", | |||||
"dj-共n个任务异常": "共{{ n }}个任务异常", | |||||
"dj-共n个任务进行中": "共{{ n }}个任务进行中", | |||||
"dj-已逾期": "已逾期", | |||||
"dj-小时": "小时", | |||||
"dj-天": "天", | |||||
"dj-标记所有为已读": "标记所有为已读", | |||||
"dj-删除所有已读消息": "删除所有已读消息", | |||||
"dj-通知设置": "通知设置", | |||||
"dj-项目通知": "项目通知", | |||||
"dj-暂无消息": "暂无消息", | |||||
"dj-分钟前": "分钟前", | |||||
"dj-今天": "今天", | |||||
"dj-昨天": "昨天", | |||||
"dj-周一": "周一", | |||||
"dj-周二": "周二", | |||||
"dj-周三": "周三", | |||||
"dj-周四": "周四", | |||||
"dj-周五": "周五", | |||||
"dj-周六": "周六", | |||||
"dj-周日": "周日", | |||||
"dj-任务通知": "任务通知", | |||||
"dj-刚刚": "刚刚", | |||||
"dj-系统消息": "系统消息", | |||||
"dj-异常排除": "异常排除", | |||||
"dj-任务已关闭": "当前任务已关闭", | |||||
"dj-暂无更多项目类型": "暂无更多项目类型", | |||||
"dj-工单有变更,查看详情": "工单有变更,查看详情", | |||||
"dj-等": "等", | |||||
"dj-共": "共", | |||||
"dj-个": "个", | |||||
"dj-张": "张", | |||||
"dj-运营单元-1": "分公司", | |||||
"dj-运营单元-2": "工厂", | |||||
"dj-运营单元-3": "车间", | |||||
"dj-工单明细": "工单明细", | |||||
"dj-明细": "明细", | |||||
"dj-数据上传中": "数据上传中", | |||||
"dj-数据校验中": "数据校验中", | |||||
"dj-msg-ATHENA_REMIND": "ATHENA提醒", | |||||
"dj-msg-EXCEPTION_OR_OVERDUE": "项目异常/逾期提醒", | |||||
"dj-msg-INTERNAL_REMIND": "内部提醒", | |||||
"dj-msg-PROXY_REMIND": "代理人提醒", | |||||
"dj-msg-option-ALL": "全部", | |||||
"dj-msg-option-EMERGENCY": "紧急", | |||||
"dj-msg-option-EXCEPTION_OR_OVERDUE": "异常/逾期", | |||||
"dj-msg-option-NOTICE": "通知", | |||||
"dj-msg-option-PROXY": "代理", | |||||
"dj-msg-option-OTHER": "其他", | |||||
"dj-提醒关注": "提醒您关注", | |||||
"dj-基础资料录入": "基础资料录入", | |||||
"dj-请输入需要录入的基础资料模板名称": "请输入需要录入的基础资料模板名称", | |||||
"dj-已通知x": "已通知{{x}}", | |||||
"dj-全部": "全部", | |||||
"dj-包含": "包含", | |||||
"dj-搜索关键字": "搜索关键字", | |||||
"dj-重置": "重置", | |||||
"dj-搜索": "搜索", | |||||
"dj-栏位": "栏位", | |||||
"dj-公式": "公式", | |||||
"dj-新增查询条件": "新增查询条件", | |||||
"dj-最多同时查询3个条件": "最多同时查询3个条件" | |||||
} |
@ -0,0 +1,3 @@ | |||||
{ | |||||
} |
@ -0,0 +1,36 @@ | |||||
{ | |||||
"dj-task-日": "日", | |||||
"dj-task-月": "月", | |||||
"dj-task-今天": "今天", | |||||
"dj-task-本月": "本月", | |||||
"dj-task-week1": "星期一", | |||||
"dj-task-week2": "星期二", | |||||
"dj-task-week3": "星期三", | |||||
"dj-task-week4": "星期四", | |||||
"dj-task-week5": "星期五", | |||||
"dj-task-week6": "星期六", | |||||
"dj-task-week0": "星期日", | |||||
"dj-task-逾期任务": "逾期任务", | |||||
"dj-task-暂无更多任务逾期": "暂无更多任务逾期", | |||||
"dj-task-任务未逾期": "工作完成良好,任务未逾期", | |||||
"dj-task-暂无异常排除": "暂无异常排除任务需跟踪", | |||||
"dj-task-暂无项目逾期": "暂无项目逾期需跟催", | |||||
"dj-task-今日需完成n项任务": "今日需完成任务 {{ n }}", | |||||
"dj-task-需完成n项任务": "需完成{{ n }}项任务", | |||||
"dj-task-共n项任务": "共{{ n }}项任务", | |||||
"dj-task-共计n项任务": "共计{{ n }}项任务", | |||||
"dj-task-查看完整版": "进入当天任务,查看完整版", | |||||
"dj-task-项目逾期需跟催": "项目逾期需跟催", | |||||
"dj-task-异常排除需追踪": "异常排除需追踪", | |||||
"dj-task-今日优先处理任务": "今日优先处理任务", | |||||
"dj-task-今日一般任务": "今日一般任务", | |||||
"dj-task-可提前处理任务": "可提前处理任务", | |||||
"dj-task-暂无任务": "暂无任务", | |||||
"dj-task-暂无任务可执行": "暂无任务可执行", | |||||
"dj-task-all": "全部", | |||||
"dj-task-等n个": "…等{{ n }}个", | |||||
"dj-task-unit-1": "分公司", | |||||
"dj-task-unit-2": "工厂", | |||||
"dj-task-unit-3": "车间", | |||||
"dj-task-确定": "确定" | |||||
} |
@ -0,0 +1,217 @@ | |||||
{ | |||||
"dj-c-预计开工日": "預計開工日", | |||||
"dj-c-由Athena发起当前项目": "由Athena發起當前項目", | |||||
"dj-c-来源由n张工单组成": "來源:由{{ taskName }}組成", | |||||
"dj-c-来源由n张ids工单组成": "來源:由 {{ ids }} 等{{ n }}張{{ taskName }}組成", | |||||
"dj-c-倒计时": "倒計時", | |||||
"dj-c-需完成": "需完成", | |||||
"dj-c-收起": "收起", | |||||
"dj-c-更多": "更多", | |||||
"dj-c-操作": "操作", | |||||
"dj-c-更换": "更換", | |||||
"dj-c-提示": "提示", | |||||
"dj-c-我知道了": "我知道了", | |||||
"dj-c-存在异常是否忽略提交": "存在 {{n}} 項异常,<br />是否確定提交?", | |||||
"dj-c-是否确定提交": "是否確定提交?", | |||||
"dj-c-请确认是否填写完整": "請確認是否填寫完整", | |||||
"dj-c-取消": "取消", | |||||
"dj-c-确认": "確認", | |||||
"dj-c-确定": "確定", | |||||
"dj-c-明细": "明細", | |||||
"dj-c-下载": "下載", | |||||
"dj-c-预览": "預覽", | |||||
"dj-c-已读n次": "已讀 {{ n }} 次", | |||||
"dj-c-取消拆行": "取消拆行", | |||||
"dj-c-拆行": "拆行", | |||||
"dj-c-旧公式": "舊公式", | |||||
"dj-c-新公式": "新公式", | |||||
"dj-c-查看模拟推估": "查看類比推估", | |||||
"dj-c-权重总和应等于100": "權重總和應等於100", | |||||
"dj-c-暂无数据": "暫無數據", | |||||
"dj-c-必填": "必填", | |||||
"dj-c-重新编辑": "重新編輯", | |||||
"dj-c-编辑": "編輯", | |||||
"dj-c-请选择需要提交的数据": "請選擇需要提交的數據", | |||||
"dj-c-收货地址": "收貨地址", | |||||
"dj-c-采购员编号": "採購員編號", | |||||
"dj-c-转派至": "轉派至", | |||||
"dj-c-员工编号": "員工編號", | |||||
"dj-c-员工姓名": "員工姓名", | |||||
"dj-c-请输入员工编号": "請輸入員工編號", | |||||
"dj-c-将此任务转派至您": "將此任務轉派至您", | |||||
"dj-c-退回重签至": "退回重簽至", | |||||
"dj-c-请输入签核意见": "請輸入簽核意見", | |||||
"dj-c-签核意见": "簽核意見", | |||||
"dj-c-查看签核进度": "查看簽核進度", | |||||
"dj-c-是否确定转派": "是否確定轉派", | |||||
"dj-c-是否确定退回": "是否確定退回", | |||||
"dj-c-签核进程": "簽核進程", | |||||
"dj-c-是否确定同意": "是否確定同意", | |||||
"dj-c-非必填": "非必填", | |||||
"dj-c-未开始": "未開始", | |||||
"dj-c-进行中": "進行中", | |||||
"dj-c-已完成": "已完成", | |||||
"dj-c-退回": "退回", | |||||
"dj-c-加签": "加簽", | |||||
"dj-c-已同意": "已同意", | |||||
"dj-c-已撤销": "已撤銷", | |||||
"dj-c-已中止": "已中止", | |||||
"dj-c-已暂停": "已暫停", | |||||
"dj-c-不需签核": "不需簽核", | |||||
"dj-c-需签核": "需簽核", | |||||
"dj-c-取回重办": "取回重辦", | |||||
"dj-c-已通知": "已通知", | |||||
"dj-c-已会办": "已會辦", | |||||
"dj-c-正在进行": "正在進行", | |||||
"dj-c-逾期": "逾期", | |||||
"dj-c-紧急": "緊急", | |||||
"dj-c-天": "天", | |||||
"dj-c-时": "時", | |||||
"dj-c-分钟": "分鐘", | |||||
"dj-c-最早": "最早", | |||||
"dj-c-最大逾期": "最大逾期", | |||||
"dj-c-共n项": "共{{ n }}項", | |||||
"dj-c-共str": "共{{ str }}", | |||||
"dj-c-个": "個", | |||||
"dj-c-页面加载失败": "頁面加載失敗", | |||||
"dj-c-重新加载": "重新加載", | |||||
"dj-c-请不要输入表情": "請不要輸入表情", | |||||
"dj-c-不能选择当前用户": "不能選擇當前用戶", | |||||
"dj-c-是否确定退回重办": "是否確定退回重辦", | |||||
"dj-c-所有计量": "所有計量", | |||||
"dj-c-库存年月": "庫存年月", | |||||
"dj-c-周转天数": "周轉天數", | |||||
"dj-c-平均存货净额": "平均存貨淨額", | |||||
"dj-c-销售净额": "銷售淨額", | |||||
"dj-c-平均耗量(年月)": "平均耗量(年月)", | |||||
"dj-c-标准差(年月)": "標準差(年月)", | |||||
"dj-c-平均销售金额(年月)": "平均銷售金額(年月)", | |||||
"dj-c-标准化生产": "標準化生產", | |||||
"dj-c-修改": "修改", | |||||
"dj-c-已": "已", | |||||
"dj-c-总量": "總量", | |||||
"dj-c-目标:差异率小于n": "目标:差异率小于{{n}}", | |||||
"dj-c-共n项定位调整": "共{{n}}项定位调整", | |||||
"dj-c-实际": "實際", | |||||
"dj-c-合理": "合理", | |||||
"dj-c-建议": "建議", | |||||
"dj-c-本期共": "本期共", | |||||
"dj-c-项": "項", | |||||
"dj-c-检测出现定位调整,建议修改参数": "检测出现定位调整,建议修改参数", | |||||
"dj-c-成品": "成品", | |||||
"dj-c-半成品": "半成品", | |||||
"dj-c-原材料": "原材料", | |||||
"dj-c-耗用金额": "耗用金額", | |||||
"dj-c-高": "高", | |||||
"dj-c-中": "中", | |||||
"dj-c-低": "低", | |||||
"dj-c-频进货": "頻進貨", | |||||
"dj-c-原材料机制调整建议": "原材料機制調整建議", | |||||
"dj-c-项采纳": "項采納", | |||||
"dj-c-项拒绝": "項拒絕", | |||||
"dj-c-共计": "共計", | |||||
"dj-c-n项": "{{n}}項", | |||||
"dj-c-返回": "返回", | |||||
"dj-c-统计": "統計", | |||||
"dj-c-标准差异率n": "標準差異率{{n}}", | |||||
"dj-c-采购间隔参数": "采購間隔參數", | |||||
"dj-c-实际采购LT": "實際采購LT", | |||||
"dj-c-实际采购": "實際采購", | |||||
"dj-c-机制调整建议": "機制調整建議", | |||||
"dj-c-建议新定位": "建議新定位", | |||||
"dj-c-高频进货": "高頻進貨", | |||||
"dj-c-中频进货": "中頻進貨", | |||||
"dj-c-低频进货": "低頻進貨", | |||||
"dj-c-高频进货n项": "高頻進貨{{n}}項", | |||||
"dj-c-中频进货n项": "中頻進貨{{n}}項", | |||||
"dj-c-低频进货n项": "低頻進貨{{n}}項", | |||||
"dj-c-没有可获取到的可退回列表": "沒有可獲取到的可退回列表", | |||||
"dj-c-数据加载异常": "數據加載異常", | |||||
"dj-c-正在校验": "正在校驗", | |||||
"dj-c-输入错误": "輸入錯誤", | |||||
"dj-c-输入不完整": "輸入不完整", | |||||
"dj-c-输入不完整或者错误": "輸入不完整或者輸入錯誤", | |||||
"dj-c-校验失败": "校驗失敗", | |||||
"dj-c-支持批量提交但未选择对象": "支持批量提交但未選擇對象", | |||||
"dj-c-差异": "差異", | |||||
"dj-c-方案进度": "方案進度", | |||||
"dj-c-加量": "加量", | |||||
"dj-c-减量": "減量", | |||||
"dj-c-延迟": "延遲", | |||||
"dj-c-提早": "提早", | |||||
"dj-c-拆行输入错误": "拆行輸入錯誤", | |||||
"dj-c-请上传": "請上傳", | |||||
"dj-c-上传于": "{{user}}上傳于{{date}}", | |||||
"dj-c-已删除附件": "附件已刪除", | |||||
"dj-c-删除附件失败": "删除附件失敗", | |||||
"dj-c-上传失败": "上傳失敗", | |||||
"dj-c-转派": "轉派", | |||||
"dj-c-没有查询到可退回的关卡名称": "沒有査詢到可退回的關卡名稱", | |||||
"dj-c-请刷新重试": "請刷新重試", | |||||
"dj-c-当前任务已完成": "當前任務已完成", | |||||
"dj-c-加签意见": "加簽意見", | |||||
"dj-c-请选择加签方式": "請選擇加簽方式", | |||||
"dj-c-向前加签": "向前加簽", | |||||
"dj-c-向后加签": "向後加簽", | |||||
"dj-c-签核人": "簽核人", | |||||
"dj-c-请选择": "請選擇", | |||||
"dj-c-请选择签核人": "請選擇簽核人", | |||||
"dj-c-是否确定撤回": "是否確定撤回", | |||||
"dj-c-撤回后同一方案且同一批提交的方案将同步撤回": "撤回後同一方案且同一批提交的方案將同步撤回", | |||||
"dj-c-撤回意见": "撤回意見", | |||||
"dj-c-发票上传": "發票上傳", | |||||
"dj-c-发票代号": "發票代號", | |||||
"dj-c-发票号码": "發票號碼", | |||||
"dj-c-开票日期": "開票日期", | |||||
"dj-c-校验码(后6位)": "校驗碼(後6位)", | |||||
"dj-c-请将6位校验码输入完整": "請將6位校驗碼輸入完整", | |||||
"dj-c-金额(不含税)": "金額(不含稅)", | |||||
"dj-c-只能输入数字": "只能輸入數位", | |||||
"dj-c-只能输入整数或者带2位小数": "只能輸入整數或者帶2位小數", | |||||
"dj-c-限制类型": "只支持{{ n }}", | |||||
"dj-c-不限制大小": "大小不限制", | |||||
"dj-c-限制大小": "大小限制{{ n }}", | |||||
"dj-c-请输入关键字": "請輸入關鍵字", | |||||
"dj-c-合计": "合計", | |||||
"dj-c-是否确定加签": "是否確定加簽", | |||||
"dj-c-已撤回": "已撤回", | |||||
"dj-c-请输入撤回意见": "請輸入撤回意見", | |||||
"dj-c-重签意见": "重簽意見", | |||||
"dj-c-转派意见": "轉派意見", | |||||
"dj-c-请填写意见": "請填寫意見", | |||||
"dj-c-重办意见": "重辦意見", | |||||
"dj-c-请填写重办意见": "請填寫重辦意見", | |||||
"dj-c-请输入发票代号": "請輸入發票代號", | |||||
"dj-c-请输入发票号码": "請輸入發票號碼", | |||||
"dj-c-请输入开票日期": "請輸入開票日期", | |||||
"dj-c-请输入金额": "請輸入金額(不含稅)", | |||||
"dj-c-上传发票": "上傳發票", | |||||
"dj-c-支持上传多张发票": "支持上傳多張發票", | |||||
"dj-c-请留言": "請輸入留言~", | |||||
"dj-c-发送": "發送", | |||||
"dj-c-通知提醒": "通知提醒", | |||||
"dj-c-msg-content": "請盡快完成任務~", | |||||
"dj-c-代": "代", | |||||
"dj-c-前": "前", | |||||
"dj-c-生效": "生效", | |||||
"dj-c-已失效": "已失效", | |||||
"dj-c-已保存": "已保存", | |||||
"dj-c-未保存": "未保存", | |||||
"dj-c-已选中n项": "已選中{{ n }}項", | |||||
"dj-c-m来源共n项发生变更": "{{m}}共{{n}}項發生變更", | |||||
"dj-c-查看甘特图": "查看甘特圖", | |||||
"dj-c-甘特图": "甘特圖", | |||||
"dj-c-异常": "異常", | |||||
"dj-c-逾期n天": "逾期{{ n }}天", | |||||
"dj-c-全部信息请输入关键字搜索": "全部信息請輸入關鍵字搜索", | |||||
"dj-c-*至少选中一项数据": "*至少選中一項數據", | |||||
"dj-c-已选n项": "已選{{ n }}項", | |||||
"dj-c-荐": "薦", | |||||
"dj-c-请输入专案编号": "請輸入專案編號", | |||||
"dj-c-请输入专案名称": "請輸入專案名稱", | |||||
"dj-c-计划维护": "計畫維護", | |||||
"dj-c-专案基础信息维护": "專案基礎信息維護", | |||||
"dj-c-启动专案": "啟動專案", | |||||
"dj-c-专案已启动": "專案已啟動", | |||||
"dj-c-专案已暂停": "專案已暫停" | |||||
} |