├── .editorconfig ├── .gitignore ├── LICENSE ├── README.md ├── angular.json ├── e2e ├── app.e2e-spec.ts └── tsconfig.json ├── karma.conf.js ├── package-lock.json ├── package.json ├── protractor.conf.js ├── src ├── app │ ├── app.component.html │ ├── app.component.scss │ ├── app.component.spec.ts │ ├── app.component.ts │ ├── app.module.ts │ ├── app.routes.ts │ ├── bz-modules │ │ ├── basic-data │ │ │ ├── basic-data.component.html │ │ │ ├── basic-data.component.scss │ │ │ ├── basic-data.component.spec.ts │ │ │ ├── basic-data.component.ts │ │ │ ├── basic-data.module.ts │ │ │ ├── basic-data.routes.ts │ │ │ ├── category-form │ │ │ │ ├── category-form.component.html │ │ │ │ ├── category-form.component.scss │ │ │ │ ├── category-form.component.spec.ts │ │ │ │ └── category-form.component.ts │ │ │ ├── category-table │ │ │ │ ├── category-table.component.html │ │ │ │ ├── category-table.component.scss │ │ │ │ ├── category-table.component.spec.ts │ │ │ │ └── category-table.component.ts │ │ │ ├── customer-form │ │ │ │ ├── customer-form.component.html │ │ │ │ ├── customer-form.component.scss │ │ │ │ ├── customer-form.component.spec.ts │ │ │ │ └── customer-form.component.ts │ │ │ ├── customer-table │ │ │ │ ├── customer-table.component.html │ │ │ │ ├── customer-table.component.scss │ │ │ │ ├── customer-table.component.spec.ts │ │ │ │ └── customer-table.component.ts │ │ │ ├── staff-form │ │ │ │ ├── staff-form.component.html │ │ │ │ ├── staff-form.component.scss │ │ │ │ ├── staff-form.component.spec.ts │ │ │ │ └── staff-form.component.ts │ │ │ ├── staff-table │ │ │ │ ├── staff-table.component.html │ │ │ │ ├── staff-table.component.scss │ │ │ │ ├── staff-table.component.spec.ts │ │ │ │ └── staff-table.component.ts │ │ │ ├── vendor-form │ │ │ │ ├── vendor-form.component.html │ │ │ │ ├── vendor-form.component.scss │ │ │ │ ├── vendor-form.component.spec.ts │ │ │ │ └── vendor-form.component.ts │ │ │ ├── vendor-table │ │ │ │ ├── vendor-table.component.html │ │ │ │ ├── vendor-table.component.scss │ │ │ │ ├── vendor-table.component.spec.ts │ │ │ │ └── vendor-table.component.ts │ │ │ ├── warehouse-form │ │ │ │ ├── warehouse-form.component.html │ │ │ │ ├── warehouse-form.component.scss │ │ │ │ ├── warehouse-form.component.spec.ts │ │ │ │ └── warehouse-form.component.ts │ │ │ ├── warehouse-map │ │ │ │ ├── warehouse-map.component.html │ │ │ │ ├── warehouse-map.component.scss │ │ │ │ ├── warehouse-map.component.spec.ts │ │ │ │ └── warehouse-map.component.ts │ │ │ └── warehouse-table │ │ │ │ ├── warehouse-table.component.html │ │ │ │ ├── warehouse-table.component.scss │ │ │ │ ├── warehouse-table.component.spec.ts │ │ │ │ └── warehouse-table.component.ts │ │ ├── dashboard │ │ │ ├── dashboard.module.ts │ │ │ ├── dashboard.routes.ts │ │ │ └── dashboard │ │ │ │ ├── dashboard.component.html │ │ │ │ ├── dashboard.component.scss │ │ │ │ ├── dashboard.component.spec.ts │ │ │ │ └── dashboard.component.ts │ │ ├── inventory │ │ │ ├── inbound-receipt-detail │ │ │ │ ├── inbound-receipt-detail.component.html │ │ │ │ ├── inbound-receipt-detail.component.scss │ │ │ │ ├── inbound-receipt-detail.component.spec.ts │ │ │ │ └── inbound-receipt-detail.component.ts │ │ │ ├── inbound-receipt-table │ │ │ │ ├── inbound-receipt-table.component.html │ │ │ │ ├── inbound-receipt-table.component.scss │ │ │ │ ├── inbound-receipt-table.component.spec.ts │ │ │ │ └── inbound-receipt-table.component.ts │ │ │ ├── inventory-item-detail │ │ │ │ ├── inventory-item-detail.component.html │ │ │ │ ├── inventory-item-detail.component.scss │ │ │ │ ├── inventory-item-detail.component.spec.ts │ │ │ │ └── inventory-item-detail.component.ts │ │ │ ├── inventory-table │ │ │ │ ├── inventory-table.component.html │ │ │ │ ├── inventory-table.component.scss │ │ │ │ ├── inventory-table.component.spec.ts │ │ │ │ └── inventory-table.component.ts │ │ │ ├── inventory.component.html │ │ │ ├── inventory.component.scss │ │ │ ├── inventory.component.spec.ts │ │ │ ├── inventory.component.ts │ │ │ ├── inventory.module.ts │ │ │ ├── inventory.routes.ts │ │ │ ├── new-inbound-receipt │ │ │ │ ├── new-inbound-receipt.component.html │ │ │ │ ├── new-inbound-receipt.component.scss │ │ │ │ ├── new-inbound-receipt.component.spec.ts │ │ │ │ └── new-inbound-receipt.component.ts │ │ │ ├── new-outbound-receipt │ │ │ │ ├── new-outbound-receipt.component.html │ │ │ │ ├── new-outbound-receipt.component.scss │ │ │ │ ├── new-outbound-receipt.component.spec.ts │ │ │ │ └── new-outbound-receipt.component.ts │ │ │ ├── outbound-receipt-detail │ │ │ │ ├── outbound-receipt-detail.component.html │ │ │ │ ├── outbound-receipt-detail.component.scss │ │ │ │ ├── outbound-receipt-detail.component.spec.ts │ │ │ │ └── outbound-receipt-detail.component.ts │ │ │ └── outbound-receipt-table │ │ │ │ ├── outbound-receipt-table.component.html │ │ │ │ ├── outbound-receipt-table.component.scss │ │ │ │ ├── outbound-receipt-table.component.spec.ts │ │ │ │ └── outbound-receipt-table.component.ts │ │ ├── login │ │ │ ├── login.component.html │ │ │ ├── login.component.scss │ │ │ ├── login.component.spec.ts │ │ │ └── login.component.ts │ │ └── sys │ │ │ ├── sys-monitor │ │ │ ├── sys-monitor.component.html │ │ │ ├── sys-monitor.component.scss │ │ │ ├── sys-monitor.component.spec.ts │ │ │ └── sys-monitor.component.ts │ │ │ ├── sys.component.html │ │ │ ├── sys.component.scss │ │ │ ├── sys.component.spec.ts │ │ │ ├── sys.component.ts │ │ │ ├── sys.module.ts │ │ │ └── sys.routes.ts │ ├── global-layout │ │ ├── footer │ │ │ ├── footer.component.html │ │ │ ├── footer.component.scss │ │ │ └── footer.component.ts │ │ ├── left-sidebar │ │ │ ├── left-sidebar.component.html │ │ │ ├── left-sidebar.component.scss │ │ │ ├── left-sidebar.component.spec.ts │ │ │ └── left-sidebar.component.ts │ │ ├── nav-bar │ │ │ ├── nav-bar.component.html │ │ │ ├── nav-bar.component.scss │ │ │ ├── nav-bar.component.spec.ts │ │ │ └── nav-bar.component.ts │ │ ├── right-sidebar │ │ │ ├── right-sidebar.component.html │ │ │ ├── right-sidebar.component.scss │ │ │ ├── right-sidebar.component.spec.ts │ │ │ └── right-sidebar.component.ts │ │ └── workspace │ │ │ ├── workspace.component.html │ │ │ ├── workspace.component.scss │ │ │ ├── workspace.component.spec.ts │ │ │ ├── workspace.component.ts │ │ │ ├── workspace.module.ts │ │ │ └── workspace.routes.ts │ ├── index.ts │ └── shared │ │ ├── dropdown-directive │ │ ├── dropdown-trigger.directive.ts │ │ └── dropdown.directive.ts │ │ ├── fly-in.ts │ │ ├── guard │ │ ├── auth.guard.spec.ts │ │ └── auth.guard.ts │ │ ├── model │ │ ├── customer-model.ts │ │ ├── staff-model.ts │ │ └── vendor-model.ts │ │ ├── navitem-directive │ │ └── dropdown.directive.ts │ │ ├── services │ │ ├── auth.service.spec.ts │ │ ├── auth.service.ts │ │ ├── category.service.spec.ts │ │ ├── category.service.ts │ │ ├── common-service.ts │ │ ├── customer.service.spec.ts │ │ ├── customer.service.ts │ │ ├── event-bus.service.ts │ │ ├── inbound-receipt-detail.service.spec.ts │ │ ├── inbound-receipt-detail.service.ts │ │ ├── inbound-receipt.service.spec.ts │ │ ├── inbound-receipt.service.ts │ │ ├── inventory.service.spec.ts │ │ ├── inventory.service.ts │ │ ├── new-inbound-receipt.service.spec.ts │ │ ├── new-inbound-receipt.service.ts │ │ ├── new-outbound-receipt.service.spec.ts │ │ ├── new-outbound-receipt.service.ts │ │ ├── outbound-receipt-detail.service.spec.ts │ │ ├── outbound-receipt-detail.service.ts │ │ ├── outbound-receipt.service.spec.ts │ │ ├── outbound-receipt.service.ts │ │ ├── staff.service.spec.ts │ │ ├── staff.service.ts │ │ ├── vendor.service.spec.ts │ │ ├── vendor.service.ts │ │ ├── warehouse.service.spec.ts │ │ └── warehouse.service.ts │ │ └── shared.module.ts ├── assets │ ├── css │ │ ├── AdminLTE-custom │ │ │ ├── AdminLTE-raw.scss │ │ │ ├── AdminLTE.scss │ │ │ ├── _404_500_errors.scss │ │ │ ├── _alerts.scss │ │ │ ├── _bootstrap-variables.scss │ │ │ ├── _brand.scss │ │ │ ├── _buttons.scss │ │ │ ├── _callout.scss │ │ │ ├── _cards.scss │ │ │ ├── _carousel.scss │ │ │ ├── _control-sidebar.scss │ │ │ ├── _direct-chat.scss │ │ │ ├── _dropdown.scss │ │ │ ├── _elevation.scss │ │ │ ├── _forms.scss │ │ │ ├── _fullcalendar.scss │ │ │ ├── _info-box.scss │ │ │ ├── _invoice.scss │ │ │ ├── _labels.scss │ │ │ ├── _layout.scss │ │ │ ├── _lockscreen.scss │ │ │ ├── _login_and_register.scss │ │ │ ├── _mailbox.scss │ │ │ ├── _main-header.scss │ │ │ ├── _main-sidebar.scss │ │ │ ├── _miscellaneous.scss │ │ │ ├── _mixins.scss │ │ │ ├── _navs.scss │ │ │ ├── _print.scss │ │ │ ├── _products.scss │ │ │ ├── _profile.scss │ │ │ ├── _progress-bars.scss │ │ │ ├── _select2.scss │ │ │ ├── _sidebar-mini.scss │ │ │ ├── _small-box.scss │ │ │ ├── _social-widgets.scss │ │ │ ├── _table.scss │ │ │ ├── _text.scss │ │ │ ├── _timeline.scss │ │ │ ├── _users-list.scss │ │ │ └── _variables.scss │ │ └── primeng-theme │ │ │ └── nova-light │ │ │ ├── fonts │ │ │ ├── open-sans-v15-latin-300.eot │ │ │ ├── open-sans-v15-latin-300.svg │ │ │ ├── open-sans-v15-latin-300.ttf │ │ │ ├── open-sans-v15-latin-300.woff │ │ │ ├── open-sans-v15-latin-300.woff2 │ │ │ ├── open-sans-v15-latin-700.eot │ │ │ ├── open-sans-v15-latin-700.svg │ │ │ ├── open-sans-v15-latin-700.ttf │ │ │ ├── open-sans-v15-latin-700.woff │ │ │ ├── open-sans-v15-latin-700.woff2 │ │ │ ├── open-sans-v15-latin-regular.eot │ │ │ ├── open-sans-v15-latin-regular.svg │ │ │ ├── open-sans-v15-latin-regular.ttf │ │ │ ├── open-sans-v15-latin-regular.woff │ │ │ └── open-sans-v15-latin-regular.woff2 │ │ │ └── theme.scss │ ├── i18n │ │ ├── en.json │ │ └── zh.json │ └── imgs │ │ ├── 0.png │ │ ├── 4.png │ │ ├── OpenWMS.gif │ │ ├── angular.svg │ │ ├── angular2-small.png │ │ ├── angular2.png │ │ ├── boxed-bg.jpg │ │ ├── boxed-bg.png │ │ ├── default-150x150.png │ │ ├── dir1.png │ │ ├── dir2.png │ │ ├── dir3.png │ │ ├── icons.png │ │ ├── img.jpg │ │ ├── inventory.png │ │ ├── io.png │ │ ├── login.svg │ │ ├── map.png │ │ ├── mask.svg │ │ ├── network.png │ │ ├── nice-fish.png │ │ ├── qq-1.jpg │ │ ├── user-card-header.png │ │ └── wx-1.jpg ├── environments │ ├── environment.dev.ts │ ├── environment.hmr.ts │ ├── environment.mock.ts │ └── environment.prod.ts ├── favicon-16x16.ico ├── favicon-32x32.ico ├── favicon.ico ├── hmr.ts ├── index.html ├── main.ts ├── mock-data │ ├── categories.json │ ├── customers.json │ ├── inbound-details.json │ ├── inbound-receipt.json │ ├── inbound-records.json │ ├── inventories.json │ ├── outbound-detail.json │ ├── outbound-receipt.json │ ├── outbound-records.json │ ├── staffs.json │ ├── vendors.json │ └── warehouses.json ├── polyfills.ts ├── styles.scss ├── test.ts ├── tsconfig.json └── typings.d.ts ├── tslint.json └── yarn.lock /.editorconfig: -------------------------------------------------------------------------------- 1 | # Editor configuration, see http://editorconfig.org 2 | root = true 3 | 4 | [*] 5 | charset = utf-8 6 | indent_style = space 7 | indent_size = 2 8 | end_of_line = lf 9 | insert_final_newline = true 10 | trim_trailing_whitespace = true 11 | 12 | [*.md] 13 | max_line_length = 0 14 | trim_trailing_whitespace = false 15 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # See http://help.github.com/ignore-files/ for more about ignoring files. 2 | 3 | # compiled output 4 | /tmp 5 | 6 | # dependencies 7 | /node_modules 8 | /bower_components 9 | 10 | # IDEs and editors 11 | /.idea 12 | .project 13 | .classpath 14 | *.launch 15 | .settings/ 16 | 17 | # misc 18 | /.sass-cache 19 | /connect.lock 20 | /coverage/* 21 | /libpeerconnection.log 22 | npm-debug.log 23 | testem.log 24 | /typings 25 | 26 | # e2e 27 | /e2e/*.js 28 | /e2e/*.map 29 | 30 | #System Files 31 | .DS_Store 32 | Thumbs.db 33 | /*.zip 34 | /.vscode 35 | unit-test-report/report.html 36 | 37 | .angulardoc.json -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2017 大漠穷秋 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of 6 | this software and associated documentation files (the "Software"), to deal in 7 | the Software without restriction, including without limitation the rights to 8 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 9 | the Software, and to permit persons to whom the Software is furnished to do so, 10 | subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 17 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 18 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 19 | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 20 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- /e2e/app.e2e-spec.ts: -------------------------------------------------------------------------------- 1 | //【看这里】protractor提供的语法请仔细看这里的文档 2 | // http://www.protractortest.org 3 | 4 | import { browser, element, by } from 'protractor'; 5 | 6 | describe('NiceFish App', function() { 7 | it('这是一个空的测试,什么都没干',()=>{ 8 | console.log("可以开始写测试用例了!"); 9 | }); 10 | 11 | it('should redirect index.html to index.html#/phones', function() { 12 | browser.get('app/index.html'); 13 | browser.getLocationAbsUrl().then(function(url) { 14 | expect(url.split('#')[1]).toBe('/phones'); 15 | }); 16 | }); 17 | }); -------------------------------------------------------------------------------- /e2e/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compileOnSave": false, 3 | "compilerOptions": { 4 | "declaration": false, 5 | "emitDecoratorMetadata": true, 6 | "experimentalDecorators": true, 7 | "lib": [ 8 | "es2016" 9 | ], 10 | "module": "commonjs", 11 | "moduleResolution": "node", 12 | "outDir": "../dist/out-tsc-e2e", 13 | "sourceMap": true, 14 | "target": "es6", 15 | "typeRoots": [ 16 | "../node_modules/@types" 17 | ] 18 | } 19 | } -------------------------------------------------------------------------------- /karma.conf.js: -------------------------------------------------------------------------------- 1 | // Karma configuration file, see link for more information 2 | // https://karma-runner.github.io/0.13/config/configuration-file.html 3 | 4 | module.exports = function (config) { 5 | config.set({ 6 | basePath: '', 7 | frameworks: ['jasmine', '@angular-devkit/build-angular'], 8 | plugins: [ 9 | require('karma-jasmine'), 10 | require('karma-chrome-launcher'), 11 | require('karma-htmlfile-reporter'), 12 | require('karma-mocha-reporter'), 13 | require('karma-coverage-istanbul-reporter'), 14 | require('@angular-devkit/build-angular/plugins/karma') 15 | ], 16 | client:{ 17 | clearContext: false // leave Jasmine Spec Runner output visible in browser 18 | }, 19 | files: [ 20 | 21 | ], 22 | preprocessors: { 23 | 24 | }, 25 | mime: { 26 | 'text/x-typescript': ['ts','tsx'] 27 | }, 28 | coverageIstanbulReporter: { 29 | dir: require('path').join(__dirname, 'coverage'), reports: [ 'html', 'lcovonly' ], 30 | fixWebpackSourcePaths: true 31 | }, 32 | angularCli: { 33 | config: './.angular-cli.json', 34 | environment: 'dev' 35 | }, 36 | reporters: ['progress','mocha','html'], 37 | htmlReporter: { 38 | outputFile: 'unit-test-report/report.html', 39 | // Optional 40 | pageTitle: 'Test-Result', 41 | subPageTitle: 'learn-test', 42 | groupSuites: true, 43 | useCompactStyle: true, 44 | useLegacyStyle: true 45 | }, 46 | port: 9876, 47 | colors: true, 48 | logLevel: config.LOG_INFO, 49 | autoWatch: true, 50 | browsers: ['Chrome'], 51 | singleRun: false 52 | }); 53 | }; 54 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "open-wms", 3 | "version": "1.0.0", 4 | "license": "MIT", 5 | "scripts": { 6 | "ng": "ng", 7 | "start": "ng serve --port 4200 -o", 8 | "build": "ng build", 9 | "test": "ng test", 10 | "lint": "ng lint", 11 | "e2e": "ng e2e", 12 | "hmr": "ng serve --hmr -e=hmr", 13 | "bundle-report": "webpack-bundle-analyzer dist/stats.json" 14 | }, 15 | "private": true, 16 | "dependencies": { 17 | "@angular/animations": "7.0.0", 18 | "@angular/cdk": "6.0.0", 19 | "@angular/common": "7.0.0", 20 | "@angular/compiler": "7.0.0", 21 | "@angular/core": "7.0.0", 22 | "@angular/forms": "7.0.0", 23 | "@angular/http": "7.0.0", 24 | "@angular/platform-browser": "7.0.0", 25 | "@angular/platform-browser-dynamic": "7.0.0", 26 | "@angular/router": "7.0.0", 27 | "@nebular/security": "^3.4.0", 28 | "@nebular/theme": "^3.4.0", 29 | "@ngx-translate/core": "11.0.0", 30 | "@ngx-translate/http-loader": "4.0.0", 31 | "bootstrap": "4.1.2", 32 | "core-js": "2.5.4", 33 | "echarts": "3.4.0", 34 | "font-awesome": "^4.7.0", 35 | "nebular-icons": "1.1.0", 36 | "ng-zorro-antd": "^7.0.1", 37 | "ngx-echarts": "4.0.0", 38 | "ngx-loading": "1.0.14", 39 | "portfinder": "1.0.9", 40 | "primeicons": "^1.0.0", 41 | "primeng": "6.1.5", 42 | "rxjs": "6.3.3", 43 | "ts-helpers": "1.1.2", 44 | "zone.js": "0.8.26" 45 | }, 46 | "devDependencies": { 47 | "@angular-devkit/build-angular": "0.13.1", 48 | "@angular/cli": "7.3.5", 49 | "@angular/compiler-cli": "7.0.0", 50 | "@angular/language-service": "7.0.0", 51 | "@angularclass/hmr": "2.1.3", 52 | "@schematics/angular": "7.3.1", 53 | "@types/jasmine": "2.8.8", 54 | "@types/jasminewd2": "2.0.3", 55 | "@types/node": "8.9.4", 56 | "codelyzer": "4.5.0", 57 | "jasmine-core": "2.99.1", 58 | "jasmine-spec-reporter": "4.2.1", 59 | "karma": "3.0.0", 60 | "karma-chrome-launcher": "2.2.0", 61 | "karma-coverage-istanbul-reporter": "2.0.1", 62 | "karma-jasmine": "1.1.2", 63 | "karma-jasmine-html-reporter": "0.2.2", 64 | "protractor": "5.4.0", 65 | "ts-node": "7.0.0", 66 | "tslint": "5.11.0", 67 | "typescript": "3.1.1", 68 | "webpack-bundle-analyzer": "3.0.3" 69 | } 70 | } -------------------------------------------------------------------------------- /protractor.conf.js: -------------------------------------------------------------------------------- 1 | // Protractor configuration file, see link for more information 2 | // https://github.com/angular/protractor/blob/master/lib/config.ts 3 | 4 | /*global jasmine */ 5 | const { SpecReporter } = require('jasmine-spec-reporter'); 6 | 7 | exports.config = { 8 | allScriptsTimeout: 15000, 9 | specs: [ 10 | './e2e/**/*.e2e-spec.ts' 11 | ], 12 | capabilities: { 13 | 'browserName': 'chrome' 14 | }, 15 | directConnect: true, 16 | baseUrl: 'http://localhost:4200/', 17 | framework: 'jasmine', 18 | jasmineNodeOpts: { 19 | showColors: true, 20 | defaultTimeoutInterval: 15000, 21 | print: function() {} 22 | }, 23 | beforeLaunch: function() { 24 | require('ts-node').register({ 25 | project: 'e2e' 26 | }); 27 | }, 28 | onPrepare() { 29 | jasmine.getEnv().addReporter(new SpecReporter({ spec: { displayStacktrace: true } })); 30 | } 31 | }; 32 | -------------------------------------------------------------------------------- /src/app/app.component.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/app/app.component.scss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/damoqiongqiu/OpenWMS-Frontend/a12f709a0d2a77748c718d24ef556e75c7a717b3/src/app/app.component.scss -------------------------------------------------------------------------------- /src/app/app.component.spec.ts: -------------------------------------------------------------------------------- 1 | /* tslint:disable:no-unused-variable */ 2 | 3 | import { TestBed, async } from '@angular/core/testing'; 4 | import { AppComponent } from './app.component'; 5 | 6 | describe('App: Angular2BootstrapSass', () => { 7 | 8 | }); 9 | -------------------------------------------------------------------------------- /src/app/app.component.ts: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | import { ActivatedRoute, Router, NavigationStart, NavigationEnd, NavigationError, NavigationCancel, ActivatedRouteSnapshot, RouterState, RouterStateSnapshot } from '@angular/router'; 3 | import { TranslateService } from '@ngx-translate/core'; 4 | import { EventBusService } from './shared/services/event-bus.service'; 5 | 6 | @Component({ 7 | selector: 'app-root', 8 | templateUrl: './app.component.html', 9 | styleUrls: ['./app.component.scss'] 10 | }) 11 | export class AppComponent { 12 | public loading = false; 13 | private globalClickCallbackFn: Function; 14 | private loginSuccessCallbackFn: Function; 15 | 16 | constructor( 17 | public router: Router, 18 | public activatedRoute: ActivatedRoute, 19 | public translateService: TranslateService, 20 | private eventBusService: EventBusService 21 | ) { 22 | 23 | } 24 | 25 | ngOnInit() { 26 | const browserLang = this.translateService.getBrowserLang(); 27 | console.log("检测到的浏览器语言>" + browserLang); 28 | console.log(browserLang.match(/zh|en/) ? browserLang : 'zh'); 29 | 30 | this.translateService.addLangs(["zh", "en"]); 31 | this.translateService.setDefaultLang('en'); 32 | this.translateService.use(browserLang.match(/zh|en/) ? browserLang : 'zh'); 33 | 34 | this.eventBusService.showGlobalLoading.subscribe((value: boolean) => { 35 | this.loading = value; 36 | }); 37 | this.router.events.subscribe((event) => { 38 | if (event instanceof NavigationStart) { 39 | this.eventBusService.showGlobalLoading.next(true); 40 | } 41 | if (event instanceof NavigationEnd || 42 | event instanceof NavigationError || 43 | event instanceof NavigationCancel) { 44 | this.eventBusService.showGlobalLoading.next(false); 45 | } 46 | }); 47 | } 48 | 49 | ngOnDestroy() { 50 | if (this.globalClickCallbackFn) { 51 | this.globalClickCallbackFn(); 52 | } 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /src/app/app.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { BrowserModule } from '@angular/platform-browser'; 3 | import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; 4 | import { RouterModule } from '@angular/router'; 5 | import { HttpModule, JsonpModule, Http } from '@angular/http'; 6 | import { FormsModule, ReactiveFormsModule } from '@angular/forms'; 7 | import { LoadingModule } from 'ngx-loading'; 8 | import { GrowlModule } from 'primeng/primeng'; 9 | import { MessageService } from 'primeng/components/common/messageservice'; 10 | import { TranslateService, TranslateStore } from '@ngx-translate/core'; 11 | import { SharedModule } from './shared/shared.module'; 12 | import { AppComponent } from './app.component'; 13 | import { LoginComponent } from './bz-modules/login/login.component'; 14 | import { AuthGuard } from './shared/guard/auth.guard'; 15 | import { AuthService } from './shared/services/auth.service'; 16 | import { appRoutes } from './app.routes'; 17 | 18 | @NgModule({ 19 | declarations: [ 20 | AppComponent, 21 | LoginComponent 22 | ], 23 | imports: [ 24 | SharedModule, 25 | BrowserModule, 26 | BrowserAnimationsModule, 27 | RouterModule, 28 | FormsModule, 29 | ReactiveFormsModule, 30 | HttpModule, 31 | JsonpModule, 32 | LoadingModule, 33 | GrowlModule, 34 | RouterModule.forRoot(appRoutes, { useHash: false }) 35 | ], 36 | providers: [MessageService, AuthGuard, AuthService, TranslateService, TranslateStore], 37 | bootstrap: [AppComponent] 38 | }) 39 | export class AppModule { } 40 | -------------------------------------------------------------------------------- /src/app/app.routes.ts: -------------------------------------------------------------------------------- 1 | import { LoginComponent } from './bz-modules/login/login.component'; 2 | import { AuthGuard } from './shared/guard/auth.guard'; 3 | /** 4 | * 这里是全局路由配置,全局路由只有2个,login和workspace 5 | * 用户从login登录之后跳转到workspace 6 | */ 7 | export const appRoutes = [ 8 | { 9 | path: '', 10 | redirectTo: 'login', 11 | pathMatch: 'full' 12 | }, 13 | { 14 | path: 'login', 15 | component: LoginComponent 16 | }, 17 | { 18 | path: 'workspace', 19 | loadChildren: './global-layout/workspace/workspace.module#WorkspaceModule', 20 | canLoad: [AuthGuard] 21 | }, 22 | { 23 | path: '**', // fallback router must in the last 24 | component: LoginComponent 25 | } 26 | ]; 27 | -------------------------------------------------------------------------------- /src/app/bz-modules/basic-data/basic-data.component.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |
5 |
6 |

基础数据

7 |
8 |
9 | 13 |
14 |
15 |
16 |
17 |
18 |
19 | 20 |
21 |
22 |
-------------------------------------------------------------------------------- /src/app/bz-modules/basic-data/basic-data.component.scss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/damoqiongqiu/OpenWMS-Frontend/a12f709a0d2a77748c718d24ef556e75c7a717b3/src/app/bz-modules/basic-data/basic-data.component.scss -------------------------------------------------------------------------------- /src/app/bz-modules/basic-data/basic-data.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { BasicDataComponent } from './basic-data.component'; 4 | 5 | describe('BasicDataComponent', () => { 6 | let component: BasicDataComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ BasicDataComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(BasicDataComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should be created', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/bz-modules/basic-data/basic-data.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | 3 | @Component({ 4 | selector: 'basic-data', 5 | templateUrl: './basic-data.component.html', 6 | styleUrls: ['./basic-data.component.scss'] 7 | }) 8 | export class BasicDataComponent implements OnInit { 9 | 10 | constructor() { } 11 | 12 | ngOnInit() { 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /src/app/bz-modules/basic-data/basic-data.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from "@angular/core"; 2 | import { CommonModule } from "@angular/common"; 3 | import { RouterModule } from "@angular/router"; 4 | 5 | import { DataTableModule } from "primeng/components/datatable/datatable"; 6 | import { CalendarModule } from "primeng/components/calendar/calendar"; 7 | import { DropdownModule } from "primeng/primeng"; 8 | import { TreeModule } from "primeng/components/tree/tree"; 9 | 10 | import { SharedModule } from "../../shared/shared.module"; 11 | import { BasicDataComponent } from "./basic-data.component"; 12 | 13 | import { WarehouseTableComponent } from "./warehouse-table/warehouse-table.component"; 14 | import { WarehouseFormComponent } from "./warehouse-form/warehouse-form.component"; 15 | import { WarehouseMapComponent } from "./warehouse-map/warehouse-map.component"; 16 | import { CategoryTableComponent } from "./category-table/category-table.component"; 17 | import { CategoryFormComponent } from "./category-form/category-form.component"; 18 | import { VendorTableComponent } from "./vendor-table/vendor-table.component"; 19 | import { VendorFormComponent } from "./vendor-form/vendor-form.component"; 20 | import { CustomerTableComponent } from "./customer-table/customer-table.component"; 21 | import { CustomerFormComponent } from "./customer-form/customer-form.component"; 22 | import { StaffTableComponent } from "./staff-table/staff-table.component"; 23 | import { StaffFormComponent } from "./staff-form/staff-form.component"; 24 | 25 | import { basicDataRoutes } from "./basic-data.routes"; 26 | 27 | @NgModule({ 28 | imports: [ 29 | CommonModule, 30 | SharedModule, 31 | DataTableModule, 32 | CalendarModule, 33 | DropdownModule, 34 | TreeModule, 35 | RouterModule.forChild(basicDataRoutes) 36 | ], 37 | declarations: [ 38 | BasicDataComponent, 39 | WarehouseTableComponent, 40 | WarehouseFormComponent, 41 | WarehouseMapComponent, 42 | CategoryTableComponent, 43 | CategoryFormComponent, 44 | VendorTableComponent, 45 | VendorFormComponent, 46 | CustomerTableComponent, 47 | CustomerFormComponent, 48 | StaffTableComponent, 49 | StaffFormComponent 50 | ] 51 | }) 52 | export class BasicDataModule { } 53 | -------------------------------------------------------------------------------- /src/app/bz-modules/basic-data/basic-data.routes.ts: -------------------------------------------------------------------------------- 1 | import { BasicDataComponent } from './basic-data.component'; 2 | import { WarehouseTableComponent } from './warehouse-table/warehouse-table.component'; 3 | import { WarehouseFormComponent } from './warehouse-form/warehouse-form.component'; 4 | import { CategoryTableComponent } from './category-table/category-table.component'; 5 | import { CategoryFormComponent } from './category-form/category-form.component'; 6 | import { VendorTableComponent } from './vendor-table/vendor-table.component'; 7 | import { VendorFormComponent } from './vendor-form/vendor-form.component'; 8 | import { CustomerTableComponent } from './customer-table/customer-table.component'; 9 | import { CustomerFormComponent } from './customer-form/customer-form.component'; 10 | import { StaffTableComponent } from './staff-table/staff-table.component'; 11 | import { StaffFormComponent } from './staff-form/staff-form.component'; 12 | 13 | export const basicDataRoutes = [{ 14 | path: '', 15 | component: BasicDataComponent, 16 | children: [ 17 | { path: '', redirectTo: 'warehouse-table/page/1', pathMatch: 'full' }, 18 | { path: 'warehouse-table/page/:page', component: WarehouseTableComponent }, 19 | { path: 'category-table/page/:page', component: CategoryTableComponent }, 20 | { path: 'vendor-table/page/:page', component: VendorTableComponent }, 21 | { path: 'customer-table/page/:page', component: CustomerTableComponent }, 22 | { path: 'staff-table/page/:page', component: StaffTableComponent }, 23 | { path: 'warehouse-form', component: WarehouseFormComponent }, 24 | { path: 'category-form', component: CategoryFormComponent }, 25 | { path: 'vendor-form', component: VendorFormComponent }, 26 | { path: 'customer-form', component: CustomerFormComponent }, 27 | { path: 'staff-form', component: StaffFormComponent } 28 | ] 29 | }]; -------------------------------------------------------------------------------- /src/app/bz-modules/basic-data/category-form/category-form.component.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |
5 | 6 |
7 |

Admin

8 |
9 |
10 |
11 | 12 |
13 |

{{createTime | date:'yyyy-MM-dd HH:mm:ss'}}

14 |
15 |
16 |
17 | 18 |
19 | 20 |
21 |
22 |
23 | 24 |
25 | 26 |
27 |
28 |
29 |
30 | 32 | 33 |
34 |
35 |
36 |
37 |
-------------------------------------------------------------------------------- /src/app/bz-modules/basic-data/category-form/category-form.component.scss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/damoqiongqiu/OpenWMS-Frontend/a12f709a0d2a77748c718d24ef556e75c7a717b3/src/app/bz-modules/basic-data/category-form/category-form.component.scss -------------------------------------------------------------------------------- /src/app/bz-modules/basic-data/category-form/category-form.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { CategoryFormComponent } from './category-form.component'; 4 | 5 | describe('CategoryFormComponent', () => { 6 | let component: CategoryFormComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ CategoryFormComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(CategoryFormComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should be created', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/bz-modules/basic-data/category-form/category-form.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | import { ActivatedRoute, Router } from '@angular/router'; 3 | 4 | @Component({ 5 | selector: 'category-form', 6 | templateUrl: './category-form.component.html', 7 | styleUrls: ['./category-form.component.scss'] 8 | }) 9 | export class CategoryFormComponent implements OnInit { 10 | public createTime = new Date(); 11 | 12 | constructor(private router: Router, 13 | private activeRoute: ActivatedRoute) { 14 | 15 | } 16 | 17 | ngOnInit() { 18 | } 19 | 20 | public saveCategory() { 21 | 22 | } 23 | 24 | public backToTable() { 25 | this.router.navigateByUrl('/workspace/basic-data/category-table/page/1'); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/app/bz-modules/basic-data/category-table/category-table.component.scss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/damoqiongqiu/OpenWMS-Frontend/a12f709a0d2a77748c718d24ef556e75c7a717b3/src/app/bz-modules/basic-data/category-table/category-table.component.scss -------------------------------------------------------------------------------- /src/app/bz-modules/basic-data/category-table/category-table.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { CategoryTableComponent } from './category-table.component'; 4 | 5 | describe('CategoryTableComponent', () => { 6 | let component: CategoryTableComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ CategoryTableComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(CategoryTableComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should be created', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/bz-modules/basic-data/category-table/category-table.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | import { Router } from '@angular/router'; 3 | import { ConfirmationService } from 'primeng/primeng'; 4 | import { MessageService } from 'primeng/components/common/messageservice'; 5 | import { CategoryService } from '../../../shared/services/category.service'; 6 | 7 | @Component({ 8 | selector: 'category-table', 9 | templateUrl: './category-table.component.html', 10 | styleUrls: ['./category-table.component.scss'] 11 | }) 12 | export class CategoryTableComponent implements OnInit { 13 | public categories: Array; 14 | 15 | constructor(private router: Router, 16 | private categoryService: CategoryService, 17 | private confirmationService: ConfirmationService, 18 | private messageService: MessageService 19 | ) { } 20 | 21 | ngOnInit() { 22 | this.categoryService.getCategories().subscribe((categories) => { 23 | this.categories = categories; 24 | }); 25 | } 26 | 27 | public newCategory(item?: {}) { 28 | this.router.navigateByUrl('/workspace/basic-data/category-form'); 29 | } 30 | 31 | public editCategory(item) { 32 | this.newCategory(item); 33 | } 34 | 35 | public delCategory(item) { 36 | this.confirmationService.confirm({ 37 | message: '确定要删除吗?', 38 | accept: () => { 39 | console.log(item); 40 | this.messageService.add({ severity: 'success', summary: '成功', detail: '删除数据成功' }); 41 | } 42 | }); 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /src/app/bz-modules/basic-data/customer-form/customer-form.component.scss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/damoqiongqiu/OpenWMS-Frontend/a12f709a0d2a77748c718d24ef556e75c7a717b3/src/app/bz-modules/basic-data/customer-form/customer-form.component.scss -------------------------------------------------------------------------------- /src/app/bz-modules/basic-data/customer-form/customer-form.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { CustomerFormComponent } from './customer-form.component'; 4 | 5 | describe('CustomerFormComponent', () => { 6 | let component: CustomerFormComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ CustomerFormComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(CustomerFormComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should be created', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/bz-modules/basic-data/customer-form/customer-form.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | import { ActivatedRoute, Router } from '@angular/router'; 3 | import { CustomerModel } from '../../../shared/model/customer-model'; 4 | 5 | @Component({ 6 | selector: 'customer-form', 7 | templateUrl: './customer-form.component.html', 8 | styleUrls: ['./customer-form.component.scss'] 9 | }) 10 | export class CustomerFormComponent implements OnInit { 11 | 12 | public customer: CustomerModel = new CustomerModel(); 13 | 14 | constructor(private router: Router, 15 | private activeRoute: ActivatedRoute) { } 16 | 17 | ngOnInit() { 18 | } 19 | 20 | public backToTable() { 21 | this.router.navigateByUrl('/workspace/basic-data/customer-table/page/1'); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/app/bz-modules/basic-data/customer-table/customer-table.component.scss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/damoqiongqiu/OpenWMS-Frontend/a12f709a0d2a77748c718d24ef556e75c7a717b3/src/app/bz-modules/basic-data/customer-table/customer-table.component.scss -------------------------------------------------------------------------------- /src/app/bz-modules/basic-data/customer-table/customer-table.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { CustomerTableComponent } from './customer-table.component'; 4 | 5 | describe('CustomerTableComponent', () => { 6 | let component: CustomerTableComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ CustomerTableComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(CustomerTableComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should be created', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/bz-modules/basic-data/customer-table/customer-table.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | import { ActivatedRoute, Router } from '@angular/router'; 3 | import { CustomerService } from '../../../shared/services/customer.service'; 4 | import { ConfirmationService } from 'primeng/primeng'; 5 | import { MessageService } from 'primeng/components/common/messageservice'; 6 | 7 | @Component({ 8 | selector: 'customer-table', 9 | templateUrl: './customer-table.component.html', 10 | styleUrls: ['./customer-table.component.scss'] 11 | }) 12 | export class CustomerTableComponent implements OnInit { 13 | public customers: Array; 14 | 15 | constructor(private router: Router, 16 | private activeRoute: ActivatedRoute, 17 | private customerService: CustomerService, 18 | private confirmationService: ConfirmationService, 19 | private messageService: MessageService) { } 20 | 21 | ngOnInit() { 22 | this.customerService.getCustomers().subscribe((customers) => { 23 | this.customers = customers; 24 | }); 25 | } 26 | 27 | public newCustomerForm(item?: {}) { 28 | this.router.navigateByUrl('/workspace/basic-data/customer-form'); 29 | } 30 | 31 | public delCustomer(item) { 32 | this.confirmationService.confirm({ 33 | message: '确定要删除吗?', 34 | accept: () => { 35 | console.log(item); 36 | this.messageService.add({ severity: 'success', summary: '成功', detail: '删除数据成功' }); 37 | } 38 | }); 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /src/app/bz-modules/basic-data/staff-form/staff-form.component.scss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/damoqiongqiu/OpenWMS-Frontend/a12f709a0d2a77748c718d24ef556e75c7a717b3/src/app/bz-modules/basic-data/staff-form/staff-form.component.scss -------------------------------------------------------------------------------- /src/app/bz-modules/basic-data/staff-form/staff-form.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { StaffFormComponent } from './staff-form.component'; 4 | 5 | describe('StaffFormComponent', () => { 6 | let component: StaffFormComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ StaffFormComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(StaffFormComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should be created', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/bz-modules/basic-data/staff-form/staff-form.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | import { ActivatedRoute, Router } from '@angular/router'; 3 | import { StaffModel } from '../../../shared/model/staff-model'; 4 | 5 | @Component({ 6 | selector: 'staff-form', 7 | templateUrl: './staff-form.component.html', 8 | styleUrls: ['./staff-form.component.scss'] 9 | }) 10 | export class StaffFormComponent implements OnInit { 11 | 12 | staff: StaffModel = new StaffModel(); 13 | 14 | constructor(private router: Router, 15 | private activeRoute: ActivatedRoute) { } 16 | 17 | ngOnInit() { 18 | } 19 | 20 | public backToTable() { 21 | this.router.navigateByUrl('/workspace/basic-data/staff-table/page/1'); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/app/bz-modules/basic-data/staff-table/staff-table.component.scss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/damoqiongqiu/OpenWMS-Frontend/a12f709a0d2a77748c718d24ef556e75c7a717b3/src/app/bz-modules/basic-data/staff-table/staff-table.component.scss -------------------------------------------------------------------------------- /src/app/bz-modules/basic-data/staff-table/staff-table.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { StaffTableComponent } from './staff-table.component'; 4 | 5 | describe('StaffTableComponent', () => { 6 | let component: StaffTableComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ StaffTableComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(StaffTableComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should be created', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/bz-modules/basic-data/staff-table/staff-table.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | import { ActivatedRoute, Router } from '@angular/router'; 3 | import { SelectItem } from 'primeng/primeng'; 4 | import { StaffService } from '../../../shared/services/staff.service'; 5 | import { ConfirmationService } from 'primeng/primeng'; 6 | import { MessageService } from 'primeng/components/common/messageservice'; 7 | 8 | @Component({ 9 | selector: 'staff-table', 10 | templateUrl: './staff-table.component.html', 11 | styleUrls: ['./staff-table.component.scss'] 12 | }) 13 | export class StaffTableComponent implements OnInit { 14 | public staffs: Array; 15 | 16 | constructor(private router: Router, 17 | private activeRoute: ActivatedRoute, 18 | private staffService: StaffService, 19 | private confirmationService: ConfirmationService, 20 | private messageService: MessageService) { } 21 | 22 | ngOnInit() { 23 | this.staffService.getStaffs().subscribe((staffs) => { 24 | this.staffs = staffs; 25 | }); 26 | } 27 | 28 | public newStaffForm(item?: {}) { 29 | this.router.navigateByUrl('/workspace/basic-data/staff-form'); 30 | } 31 | 32 | public editStaff(item) { 33 | this.newStaffForm(item); 34 | } 35 | 36 | public delStaff(item) { 37 | this.confirmationService.confirm({ 38 | message: '确定要删除吗?', 39 | accept: () => { 40 | console.log(item); 41 | this.messageService.add({ severity: 'success', summary: '成功', detail: '删除数据成功' }); 42 | } 43 | }); 44 | } 45 | } -------------------------------------------------------------------------------- /src/app/bz-modules/basic-data/vendor-form/vendor-form.component.scss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/damoqiongqiu/OpenWMS-Frontend/a12f709a0d2a77748c718d24ef556e75c7a717b3/src/app/bz-modules/basic-data/vendor-form/vendor-form.component.scss -------------------------------------------------------------------------------- /src/app/bz-modules/basic-data/vendor-form/vendor-form.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { VendorFormComponent } from './vendor-form.component'; 4 | 5 | describe('VendorFormComponent', () => { 6 | let component: VendorFormComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ VendorFormComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(VendorFormComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should be created', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/bz-modules/basic-data/vendor-form/vendor-form.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | import { ActivatedRoute, Router } from '@angular/router'; 3 | import { VendorModel } from '../../../shared/model/vendor-model'; 4 | 5 | @Component({ 6 | selector: 'vendor-form', 7 | templateUrl: './vendor-form.component.html', 8 | styleUrls: ['./vendor-form.component.scss'] 9 | }) 10 | export class VendorFormComponent implements OnInit { 11 | public vendor: VendorModel = new VendorModel(); 12 | 13 | constructor(private router: Router, 14 | private activeRoute: ActivatedRoute) { 15 | 16 | } 17 | 18 | ngOnInit() { 19 | } 20 | 21 | public backToTable() { 22 | this.router.navigateByUrl('/workspace/basic-data/vendor-table/page/1'); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/app/bz-modules/basic-data/vendor-table/vendor-table.component.scss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/damoqiongqiu/OpenWMS-Frontend/a12f709a0d2a77748c718d24ef556e75c7a717b3/src/app/bz-modules/basic-data/vendor-table/vendor-table.component.scss -------------------------------------------------------------------------------- /src/app/bz-modules/basic-data/vendor-table/vendor-table.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { VendorTableComponent } from './vendor-table.component'; 4 | 5 | describe('VendorTableComponent', () => { 6 | let component: VendorTableComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ VendorTableComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(VendorTableComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should be created', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/bz-modules/basic-data/vendor-table/vendor-table.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | import { ActivatedRoute, Router } from '@angular/router'; 3 | import { ConfirmationService } from 'primeng/primeng'; 4 | import { MessageService } from 'primeng/components/common/messageservice'; 5 | import { VendorService } from '../../../shared/services/vendor.service'; 6 | 7 | @Component({ 8 | selector: 'vendor-table', 9 | templateUrl: './vendor-table.component.html', 10 | styleUrls: ['./vendor-table.component.scss'] 11 | }) 12 | export class VendorTableComponent implements OnInit { 13 | public vendors: Array; 14 | 15 | constructor(private router: Router, 16 | private activeRoute: ActivatedRoute, 17 | private vendorService: VendorService, 18 | private confirmationService: ConfirmationService, 19 | private messageService: MessageService) { } 20 | 21 | ngOnInit() { 22 | this.vendorService.getVendors().subscribe((vendors) => { 23 | this.vendors = vendors; 24 | }); 25 | } 26 | 27 | public newVendorForm(item?: {}) { 28 | this.router.navigateByUrl('/workspace/basic-data/vendor-form'); 29 | } 30 | 31 | public editVendor(item) { 32 | this.newVendorForm(item); 33 | } 34 | 35 | public delVendor(item) { 36 | this.confirmationService.confirm({ 37 | message: '确定要删除吗?', 38 | accept: () => { 39 | console.log(item); 40 | this.messageService.add({ severity: 'success', summary: '成功', detail: '删除数据成功' }); 41 | } 42 | }); 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /src/app/bz-modules/basic-data/warehouse-form/warehouse-form.component.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |
5 | 6 |
7 | 8 |
9 |
10 |
11 | 12 |
13 | 14 |
15 |
16 |
17 | 18 |
19 | 20 |
21 |
22 |
23 | 24 |
25 | 26 |
27 |
28 |
29 | 30 |
31 | 32 |
33 |
34 |
35 | 36 |
37 | 38 |
39 |
40 |
41 |
42 | 43 | 44 |
45 |
46 |
47 |
48 |
-------------------------------------------------------------------------------- /src/app/bz-modules/basic-data/warehouse-form/warehouse-form.component.scss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/damoqiongqiu/OpenWMS-Frontend/a12f709a0d2a77748c718d24ef556e75c7a717b3/src/app/bz-modules/basic-data/warehouse-form/warehouse-form.component.scss -------------------------------------------------------------------------------- /src/app/bz-modules/basic-data/warehouse-form/warehouse-form.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { WarehouseFormComponent } from './warehouse-form.component'; 4 | 5 | describe('WarehouseFormComponent', () => { 6 | let component: WarehouseFormComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ WarehouseFormComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(WarehouseFormComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should be created', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/bz-modules/basic-data/warehouse-form/warehouse-form.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from "@angular/core"; 2 | import { ActivatedRoute, Router } from "@angular/router"; 3 | 4 | @Component({ 5 | selector: "warehouse-form", 6 | templateUrl: "./warehouse-form.component.html", 7 | styleUrls: ["./warehouse-form.component.scss"] 8 | }) 9 | export class WarehouseFormComponent implements OnInit { 10 | constructor(private router: Router, private activeRoute: ActivatedRoute) {} 11 | 12 | ngOnInit() {} 13 | 14 | public backToTable() { 15 | this.router.navigateByUrl("/workspace/basic-data/warehouse-table/page/1"); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/app/bz-modules/basic-data/warehouse-map/warehouse-map.component.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
5 |
6 |
-------------------------------------------------------------------------------- /src/app/bz-modules/basic-data/warehouse-map/warehouse-map.component.scss: -------------------------------------------------------------------------------- 1 | .nf-chart{ 2 | width:100%; 3 | height:500px; 4 | float:left; 5 | } -------------------------------------------------------------------------------- /src/app/bz-modules/basic-data/warehouse-map/warehouse-map.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { WarehouseMapComponent } from './warehouse-map.component'; 4 | 5 | describe('WarehouseMapComponent', () => { 6 | let component: WarehouseMapComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ WarehouseMapComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(WarehouseMapComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should be created', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/bz-modules/basic-data/warehouse-map/warehouse-map.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from "@angular/core"; 2 | 3 | @Component({ 4 | selector: "warehouse-map", 5 | templateUrl: "./warehouse-map.component.html", 6 | styleUrls: ["./warehouse-map.component.scss"] 7 | }) 8 | export class WarehouseMapComponent implements OnInit { 9 | public echartInstance; 10 | public options = {}; //不可设置为null,设置为null会导致图表不能渲染 11 | 12 | constructor() {} 13 | 14 | ngOnInit() {} 15 | 16 | public onChartInit(ec) { 17 | this.echartInstance = ec; 18 | this.options = { 19 | title: [ 20 | { 21 | textStyle: { 22 | color: "#000", 23 | fontSize: 18 24 | }, 25 | subtext: "", 26 | text: "仓库分布图", 27 | top: "auto", 28 | subtextStyle: { 29 | color: "#333", 30 | fontSize: 12 31 | }, 32 | left: "auto" 33 | } 34 | ], 35 | legend: [ 36 | { 37 | selectedMode: "multiple", 38 | top: "top", 39 | orient: "horizontal", 40 | data: [""], 41 | left: "center", 42 | show: true 43 | } 44 | ], 45 | backgroundColor: "#fff", 46 | series: [ 47 | { 48 | mapType: "中国", 49 | data: [], 50 | name: "", 51 | symbol: "circle", 52 | type: "map", 53 | roam: true 54 | } 55 | ] 56 | }; 57 | } 58 | 59 | public onChartClick($event) { 60 | console.log($event); 61 | } 62 | } 63 | -------------------------------------------------------------------------------- /src/app/bz-modules/basic-data/warehouse-table/warehouse-table.component.scss: -------------------------------------------------------------------------------- 1 | .warehouse-left-tree-container { 2 | padding: 15px 0px; 3 | } 4 | 5 | .storage-location-container { 6 | border: 1px #ccc solid; 7 | min-height: 600px; 8 | background-color: #fafafa; 9 | padding: 0px 15px; 10 | margin-top: 15px; 11 | .storage-partition{ 12 | width: 100%; 13 | height: 62px; 14 | margin: 15px 0px; 15 | .storage-title-container { 16 | float: left; 17 | width: 100px; 18 | height: 60px; 19 | vertical-align: middle; 20 | text-align: center; 21 | line-height: 4; 22 | border: 1px #ccc solid; 23 | font-weight: bold; 24 | } 25 | .storage-row-container { 26 | width: 100%; 27 | .storage-row{ 28 | width: 100%; 29 | height: 100%; 30 | .storage-col { 31 | border: 1px #ccc solid; 32 | width: 50px; 33 | height: 30px; 34 | float: left; 35 | text-align: center; 36 | vertical-align: middle; 37 | line-height: 30px; 38 | font-weight: bold; 39 | color: #fff; 40 | } 41 | .storage-col-empty{ 42 | background-color: #eabc7f; 43 | } 44 | .storage-col-full{ 45 | background-color: #39b9c6; 46 | } 47 | } 48 | } 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /src/app/bz-modules/basic-data/warehouse-table/warehouse-table.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { WarehouseTableComponent } from './warehouse-table.component'; 4 | 5 | describe('WarehouseTableComponent', () => { 6 | let component: WarehouseTableComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ WarehouseTableComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(WarehouseTableComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should be created', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/bz-modules/basic-data/warehouse-table/warehouse-table.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | import { ActivatedRoute, Router } from '@angular/router'; 3 | import { SelectItem } from 'primeng/primeng'; 4 | import { WarehouseService } from '../../../shared/services/warehouse.service'; 5 | import { TreeNode } from 'primeng/components/common/api'; 6 | 7 | @Component({ 8 | selector: 'warehouse-table', 9 | templateUrl: './warehouse-table.component.html', 10 | styleUrls: ['./warehouse-table.component.scss'] 11 | }) 12 | export class WarehouseTableComponent implements OnInit { 13 | public warehouses: TreeNode[]; 14 | public selected: TreeNode; 15 | 16 | constructor(private router: Router, 17 | private activeRoute: ActivatedRoute, 18 | private warehouseService: WarehouseService) { } 19 | 20 | ngOnInit() { 21 | this.warehouseService.getWarehouses().subscribe((warehouses) => { 22 | this.warehouses = warehouses; 23 | }); 24 | } 25 | 26 | public newWarehouse() { 27 | this.router.navigateByUrl('/workspace/basic-data/warehouse-form'); 28 | } 29 | 30 | public editWarehouse() { 31 | this.newWarehouse(); 32 | } 33 | } -------------------------------------------------------------------------------- /src/app/bz-modules/dashboard/dashboard.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { CommonModule } from '@angular/common'; 3 | import { SharedModule } from '../../shared/shared.module'; 4 | import { RouterModule } from '@angular/router'; 5 | import { DashboardComponent } from './dashboard/dashboard.component'; 6 | import { dashboardRoutes } from './dashboard.routes'; 7 | 8 | @NgModule({ 9 | imports: [ 10 | CommonModule, 11 | SharedModule, 12 | RouterModule.forChild(dashboardRoutes) 13 | ], 14 | declarations: [ 15 | DashboardComponent 16 | ] 17 | }) 18 | export class DashboardModule { 19 | 20 | } -------------------------------------------------------------------------------- /src/app/bz-modules/dashboard/dashboard.routes.ts: -------------------------------------------------------------------------------- 1 | import { DashboardComponent } from './dashboard/dashboard.component'; 2 | 3 | export const dashboardRoutes = [{ 4 | path: '', 5 | component: DashboardComponent 6 | }]; -------------------------------------------------------------------------------- /src/app/bz-modules/dashboard/dashboard/dashboard.component.scss: -------------------------------------------------------------------------------- 1 | .dashboard-title { 2 | margin-top: 0px; 3 | } 4 | 5 | .top-rect { 6 | width: 100%; 7 | height: 90px; 8 | color: #fff; 9 | p { 10 | font-size: 24px; 11 | margin: 0px; 12 | text-align: center; 13 | line-height: 90px; 14 | } 15 | } 16 | 17 | .top-rect-blue { 18 | background-color: #25859e !important; 19 | } 20 | 21 | .top-rect-green { 22 | background-color: #6acece !important; 23 | } 24 | 25 | .top-rect-orange { 26 | background-color: #eabc7f !important; 27 | } 28 | 29 | .top-rect-pink { 30 | background-color: #6acece !important; 31 | } 32 | 33 | .chart-container { 34 | width: 100%; 35 | height: 485px; 36 | margin-top: 30px; 37 | background-color: #fff; 38 | padding-top: 15px; 39 | } 40 | 41 | -------------------------------------------------------------------------------- /src/app/bz-modules/dashboard/dashboard/dashboard.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { DashboardComponent } from './dashboard.component'; 4 | 5 | describe('DashboardComponent', () => { 6 | let component: DashboardComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ DashboardComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(DashboardComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should be created', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/bz-modules/dashboard/dashboard/dashboard.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | 3 | @Component({ 4 | selector: 'dashboard', 5 | templateUrl: './dashboard.component.html', 6 | styleUrls: ['./dashboard.component.scss'] 7 | }) 8 | export class DashboardComponent implements OnInit { 9 | constructor() { } 10 | ngOnInit() { 11 | 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/app/bz-modules/inventory/inbound-receipt-detail/inbound-receipt-detail.component.scss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/damoqiongqiu/OpenWMS-Frontend/a12f709a0d2a77748c718d24ef556e75c7a717b3/src/app/bz-modules/inventory/inbound-receipt-detail/inbound-receipt-detail.component.scss -------------------------------------------------------------------------------- /src/app/bz-modules/inventory/inbound-receipt-detail/inbound-receipt-detail.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { InboundReceiptDetailComponent } from './inbound-receipt-detail.component'; 4 | 5 | describe('InboundReceiptDetailComponent', () => { 6 | let component: InboundReceiptDetailComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ InboundReceiptDetailComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(InboundReceiptDetailComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should be created', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/bz-modules/inventory/inbound-receipt-detail/inbound-receipt-detail.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from "@angular/core"; 2 | import { Router } from "@angular/router"; 3 | import { InboundReceiptDetailService } from "../../../shared/services/inbound-receipt-detail.service"; 4 | 5 | @Component({ 6 | selector: "inbound-receipt-detail", 7 | templateUrl: "./inbound-receipt-detail.component.html", 8 | styleUrls: ["./inbound-receipt-detail.component.scss"] 9 | }) 10 | export class InboundReceiptDetailComponent implements OnInit { 11 | //TODO:use async pipe replace this 12 | public inboundDetail: { [key: string]: string }; 13 | 14 | constructor(private router: Router, private inboundReceiptDetailService: InboundReceiptDetailService) { } 15 | 16 | ngOnInit() { 17 | this.inboundReceiptDetailService.getInboundDetail().subscribe(inboundDetail => { 18 | this.inboundDetail = inboundDetail; 19 | }); 20 | } 21 | 22 | public returnToTable() { 23 | this.router.navigateByUrl("/workspace/inventory/inbound-receipt-table/page/1"); 24 | } 25 | 26 | public printReceipt() { 27 | window.print(); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/app/bz-modules/inventory/inbound-receipt-table/inbound-receipt-table.component.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |
5 | 6 | 8 |
9 |
10 | 11 | 12 |
13 |
14 | 15 | 16 |
17 |
18 | 21 |
22 |
23 |
24 |
25 | 27 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 41 | 42 | 43 | 44 | 45 |
46 |
47 |
48 |
-------------------------------------------------------------------------------- /src/app/bz-modules/inventory/inbound-receipt-table/inbound-receipt-table.component.scss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/damoqiongqiu/OpenWMS-Frontend/a12f709a0d2a77748c718d24ef556e75c7a717b3/src/app/bz-modules/inventory/inbound-receipt-table/inbound-receipt-table.component.scss -------------------------------------------------------------------------------- /src/app/bz-modules/inventory/inbound-receipt-table/inbound-receipt-table.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { InboundReceiptTableComponent } from './inbound-receipt-table.component'; 4 | 5 | describe('InboundReceiptTableComponent', () => { 6 | let component: InboundReceiptTableComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [InboundReceiptTableComponent] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(InboundReceiptTableComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should be created', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/bz-modules/inventory/inbound-receipt-table/inbound-receipt-table.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from "@angular/core"; 2 | import { ActivatedRoute, Router } from "@angular/router"; 3 | import { SelectItem } from "primeng/primeng"; 4 | import { WarehouseService } from "../../../shared/services/warehouse.service"; 5 | import { CategoryService } from "../../../shared/services/category.service"; 6 | import { InboundReceiptService } from "../../../shared/services/inbound-receipt.service"; 7 | 8 | @Component({ 9 | selector: "inbound-receipt-table", 10 | templateUrl: "./inbound-receipt-table.component.html", 11 | styleUrls: ["./inbound-receipt-table.component.scss"] 12 | }) 13 | export class InboundReceiptTableComponent implements OnInit { 14 | //仓库 15 | public warehouses: SelectItem[]; 16 | public startDate: Date; 17 | public endDate: Date; 18 | public items: Array; 19 | public selectedInbentory; 20 | 21 | constructor( 22 | private router: Router, 23 | private activeRoute: ActivatedRoute, 24 | private warehouseService: WarehouseService, 25 | private categoryService: CategoryService, 26 | private inboundReceiptService: InboundReceiptService 27 | ) { } 28 | 29 | ngOnInit() { 30 | this.startDate = new Date(); 31 | this.endDate = new Date(); 32 | 33 | this.warehouseService.getWarehouses().subscribe(warehouses => { 34 | this.warehouses = warehouses; 35 | }); 36 | 37 | // this.inboundReceiptService.inboundRecords.subscribe((items) => { 38 | // this.items = items; 39 | // }); 40 | this.inboundReceiptService.getInboundRecords().subscribe(items => { 41 | this.items = items; 42 | }); 43 | } 44 | 45 | public newReceipt() { 46 | this.router.navigateByUrl("/workspace/inventory/new-inbound-receipt/receipt-no/IN-1-333333"); 47 | } 48 | 49 | public receiptDetail() { 50 | this.router.navigateByUrl("/workspace/inventory/inbound-receipt-detail/receipt-no/IN-1-2222222"); 51 | } 52 | 53 | public printReceipt() { 54 | window.print(); 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /src/app/bz-modules/inventory/inventory-item-detail/inventory-item-detail.component.scss: -------------------------------------------------------------------------------- 1 | .h-divider { 2 | width: 100%; 3 | height: 0px; 4 | border: 0.5px solid #ccc; 5 | } 6 | 7 | .chart-container { 8 | position: relative; 9 | width: 100%; 10 | height: 485px; 11 | margin-top: 30px; 12 | background-color: #fff; 13 | padding-top: 15px; 14 | } 15 | 16 | .btn-group { 17 | position: relative; 18 | left: -.9rem; 19 | } -------------------------------------------------------------------------------- /src/app/bz-modules/inventory/inventory-item-detail/inventory-item-detail.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { InventoryItemDetailComponent } from './inventory-item-detail.component'; 4 | 5 | describe('InventoryItemDetailComponent', () => { 6 | let component: InventoryItemDetailComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [InventoryItemDetailComponent] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(InventoryItemDetailComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should be created', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/bz-modules/inventory/inventory-item-detail/inventory-item-detail.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit, ViewChild, ElementRef } from '@angular/core'; 2 | import { ActivatedRoute, Router } from '@angular/router'; 3 | import * as echarts from 'echarts'; 4 | 5 | @Component({ 6 | selector: 'inventory-item-detail', 7 | templateUrl: './inventory-item-detail.component.html', 8 | styleUrls: ['./inventory-item-detail.component.scss'] 9 | }) 10 | export class InventoryItemDetailComponent implements OnInit { 11 | 12 | constructor(public router: Router, public activeRoute: ActivatedRoute) { } 13 | 14 | ngOnInit() { 15 | } 16 | 17 | public backToList(): void { 18 | this.router.navigateByUrl('/workspace/inventory/inventory-table/page/1'); 19 | } 20 | 21 | public printBill() { 22 | window.print(); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/app/bz-modules/inventory/inventory-table/inventory-table.component.scss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/damoqiongqiu/OpenWMS-Frontend/a12f709a0d2a77748c718d24ef556e75c7a717b3/src/app/bz-modules/inventory/inventory-table/inventory-table.component.scss -------------------------------------------------------------------------------- /src/app/bz-modules/inventory/inventory-table/inventory-table.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { InventoryTableComponent } from './inventory-table.component'; 4 | 5 | describe('InventoryTableComponent', () => { 6 | let component: InventoryTableComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ InventoryTableComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(InventoryTableComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should be created', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/bz-modules/inventory/inventory.component.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |
5 |
6 |

库存管理

7 |
8 |
9 | 13 |
14 |
15 |
16 |
17 |
18 |
19 | 20 |
21 |
22 |
-------------------------------------------------------------------------------- /src/app/bz-modules/inventory/inventory.component.scss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/damoqiongqiu/OpenWMS-Frontend/a12f709a0d2a77748c718d24ef556e75c7a717b3/src/app/bz-modules/inventory/inventory.component.scss -------------------------------------------------------------------------------- /src/app/bz-modules/inventory/inventory.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { InventoryComponent } from './inventory.component'; 4 | 5 | describe('InventoryComponent', () => { 6 | let component: InventoryComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ InventoryComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(InventoryComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should be created', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/bz-modules/inventory/inventory.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | 3 | @Component({ 4 | selector: 'inventory', 5 | templateUrl: './inventory.component.html', 6 | styleUrls: ['./inventory.component.scss'] 7 | }) 8 | export class InventoryComponent implements OnInit { 9 | 10 | constructor() { } 11 | 12 | ngOnInit() { 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /src/app/bz-modules/inventory/inventory.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { SharedModule as shareModule } from '../../shared/shared.module' 3 | import { RouterModule } from '@angular/router'; 4 | import { DataTableModule } from 'primeng/components/datatable/datatable'; 5 | import { CalendarModule } from 'primeng/components/calendar/calendar'; 6 | import { DropdownModule } from 'primeng/components/dropdown/dropdown'; 7 | import { TabViewModule } from 'primeng/components/tabview/tabview'; 8 | import { SharedModule } from '../../shared/shared.module'; 9 | import { InventoryComponent } from './inventory.component'; 10 | import { InventoryTableComponent } from './inventory-table/inventory-table.component'; 11 | import { InventoryItemDetailComponent } from './inventory-item-detail/inventory-item-detail.component'; 12 | import { InboundReceiptTableComponent } from './inbound-receipt-table/inbound-receipt-table.component'; 13 | import { InboundReceiptDetailComponent } from './inbound-receipt-detail/inbound-receipt-detail.component'; 14 | import { OutboundReceiptTableComponent } from './outbound-receipt-table/outbound-receipt-table.component'; 15 | import { OutboundReceiptDetailComponent } from './outbound-receipt-detail/outbound-receipt-detail.component'; 16 | import { NewInboundReceiptComponent } from './new-inbound-receipt/new-inbound-receipt.component'; 17 | import { InventoryService } from '../../shared/services/inventory.service'; 18 | import { NewOutboundReceiptComponent } from './new-outbound-receipt/new-outbound-receipt.component'; 19 | import { inventoryRoutes } from './inventory.routes'; 20 | 21 | @NgModule({ 22 | imports: [ 23 | shareModule, 24 | SharedModule, 25 | DataTableModule, 26 | CalendarModule, 27 | DropdownModule, 28 | TabViewModule, 29 | RouterModule.forChild(inventoryRoutes) 30 | ], 31 | declarations: [ 32 | InventoryComponent, 33 | InventoryTableComponent, 34 | InventoryItemDetailComponent, 35 | InboundReceiptTableComponent, 36 | InboundReceiptDetailComponent, 37 | OutboundReceiptTableComponent, 38 | OutboundReceiptDetailComponent, 39 | NewInboundReceiptComponent, 40 | NewOutboundReceiptComponent 41 | ], 42 | providers: [ 43 | InventoryService 44 | ] 45 | }) 46 | export class InventoryModule { 47 | 48 | } 49 | -------------------------------------------------------------------------------- /src/app/bz-modules/inventory/inventory.routes.ts: -------------------------------------------------------------------------------- 1 | import { InventoryComponent } from './inventory.component'; 2 | import { InventoryTableComponent } from './inventory-table/inventory-table.component'; 3 | import { InventoryItemDetailComponent } from './inventory-item-detail/inventory-item-detail.component'; 4 | import { InboundReceiptTableComponent } from './inbound-receipt-table/inbound-receipt-table.component'; 5 | import { InboundReceiptDetailComponent } from './inbound-receipt-detail/inbound-receipt-detail.component'; 6 | import { OutboundReceiptTableComponent } from './outbound-receipt-table/outbound-receipt-table.component'; 7 | import { OutboundReceiptDetailComponent } from './outbound-receipt-detail/outbound-receipt-detail.component'; 8 | import { NewInboundReceiptComponent } from './new-inbound-receipt/new-inbound-receipt.component'; 9 | import { NewOutboundReceiptComponent } from './new-outbound-receipt/new-outbound-receipt.component'; 10 | 11 | export const inventoryRoutes = [{ 12 | path: '', 13 | component: InventoryComponent, 14 | children: [ 15 | { path: '', redirectTo: 'inventorytable/page/1', pathMatch: 'full' }, 16 | { path: 'inventory-table/page/:page', component: InventoryTableComponent }, 17 | { path: 'inventory-item-detail/item-id/:item-id', component: InventoryItemDetailComponent }, 18 | { path: 'inbound-receipt-table/page/:page', component: InboundReceiptTableComponent }, 19 | { path: 'inbound-receipt-detail/receipt-no/:receipt-no', component: InboundReceiptDetailComponent }, 20 | { path: 'new-inbound-receipt/receipt-no/:receipt-no', component: NewInboundReceiptComponent }, 21 | { path: 'outbound-receipt-table/page/:page', component: OutboundReceiptTableComponent }, 22 | { path: 'outbound-receipt-detail/receipt-no/:receipt-no', component: OutboundReceiptDetailComponent }, 23 | { path: 'new-outbound-receipt/receipt-no/:receipt-no', component: NewOutboundReceiptComponent } 24 | ] 25 | }]; 26 | -------------------------------------------------------------------------------- /src/app/bz-modules/inventory/new-inbound-receipt/new-inbound-receipt.component.scss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/damoqiongqiu/OpenWMS-Frontend/a12f709a0d2a77748c718d24ef556e75c7a717b3/src/app/bz-modules/inventory/new-inbound-receipt/new-inbound-receipt.component.scss -------------------------------------------------------------------------------- /src/app/bz-modules/inventory/new-inbound-receipt/new-inbound-receipt.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { NewInboundReceiptComponent } from './new-inbound-receipt.component'; 4 | 5 | describe('NewInboundReceiptComponent', () => { 6 | let component: NewInboundReceiptComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ NewInboundReceiptComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(NewInboundReceiptComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should be created', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/bz-modules/inventory/new-inbound-receipt/new-inbound-receipt.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | import { Router } from '@angular/router'; 3 | import { NewInboundReceiptService } from '../../../shared/services/new-inbound-receipt.service'; 4 | 5 | @Component({ 6 | selector: 'new-inbound-receipt', 7 | templateUrl: './new-inbound-receipt.component.html', 8 | styleUrls: ['./new-inbound-receipt.component.scss'] 9 | }) 10 | export class NewInboundReceiptComponent implements OnInit { 11 | public inboundDetail; 12 | 13 | constructor(private router: Router, 14 | private newInboundReceiptService: NewInboundReceiptService) { } 15 | 16 | ngOnInit() { 17 | this.newInboundReceiptService.getInboundDetail().subscribe((inboundDetail) => { 18 | this.inboundDetail = inboundDetail; 19 | }); 20 | } 21 | 22 | public returnToTable() { 23 | this.router.navigateByUrl('/workspace/inventory/inbound-receipt-table/page/1'); 24 | } 25 | 26 | public printReceipt() { 27 | window.print(); 28 | } 29 | } -------------------------------------------------------------------------------- /src/app/bz-modules/inventory/new-outbound-receipt/new-outbound-receipt.component.scss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/damoqiongqiu/OpenWMS-Frontend/a12f709a0d2a77748c718d24ef556e75c7a717b3/src/app/bz-modules/inventory/new-outbound-receipt/new-outbound-receipt.component.scss -------------------------------------------------------------------------------- /src/app/bz-modules/inventory/new-outbound-receipt/new-outbound-receipt.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { NewOutboundReceiptComponent } from './new-outbound-receipt.component'; 4 | 5 | describe('NewOutboundReceiptComponent', () => { 6 | let component: NewOutboundReceiptComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ NewOutboundReceiptComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(NewOutboundReceiptComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should be created', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/bz-modules/inventory/new-outbound-receipt/new-outbound-receipt.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | import { Router } from '@angular/router'; 3 | import { NewOutboundReceiptService } from '../../../shared/services/new-outbound-receipt.service'; 4 | 5 | @Component({ 6 | selector: 'new-outbound-receipt', 7 | templateUrl: './new-outbound-receipt.component.html', 8 | styleUrls: ['./new-outbound-receipt.component.scss'] 9 | }) 10 | export class NewOutboundReceiptComponent implements OnInit { 11 | 12 | public outboundDetail; 13 | 14 | constructor(private router: Router, 15 | private newOutboundReceiptService: NewOutboundReceiptService) { } 16 | 17 | ngOnInit() { 18 | this.newOutboundReceiptService.getOutboundDetail().subscribe((outboundDetail) => { 19 | this.outboundDetail = outboundDetail; 20 | }); 21 | } 22 | 23 | public returnToTable() { 24 | this.router.navigateByUrl('/workspace/inventory/outbound-receipt-table/page/1'); 25 | } 26 | 27 | public printReceipt() { 28 | window.print(); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/app/bz-modules/inventory/outbound-receipt-detail/outbound-receipt-detail.component.scss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/damoqiongqiu/OpenWMS-Frontend/a12f709a0d2a77748c718d24ef556e75c7a717b3/src/app/bz-modules/inventory/outbound-receipt-detail/outbound-receipt-detail.component.scss -------------------------------------------------------------------------------- /src/app/bz-modules/inventory/outbound-receipt-detail/outbound-receipt-detail.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { OutboundReceiptDetailComponent } from './outbound-receipt-detail.component'; 4 | 5 | describe('OutboundReceiptDetailComponent', () => { 6 | let component: OutboundReceiptDetailComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ OutboundReceiptDetailComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(OutboundReceiptDetailComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should be created', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/bz-modules/inventory/outbound-receipt-detail/outbound-receipt-detail.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from "@angular/core"; 2 | import { Router } from "@angular/router"; 3 | import { OutboundReceiptDetailService } from "../../../shared/services/outbound-receipt-detail.service"; 4 | 5 | @Component({ 6 | selector: "outbound-receipt-detail", 7 | templateUrl: "./outbound-receipt-detail.component.html", 8 | styleUrls: ["./outbound-receipt-detail.component.scss"] 9 | }) 10 | export class OutboundReceiptDetailComponent implements OnInit { 11 | public outboundDetail: { [key: string]: string }; 12 | 13 | constructor(private router: Router, private outboundReceiptDetailService: OutboundReceiptDetailService) { } 14 | 15 | ngOnInit() { 16 | this.outboundReceiptDetailService.getOutboundDetail().subscribe(outboundDetail => { 17 | this.outboundDetail = outboundDetail; 18 | }); 19 | } 20 | 21 | public returnToTable() { 22 | this.router.navigateByUrl("/workspace/inventory/outbound-receipt-table/page/1"); 23 | } 24 | 25 | public printReceipt() { 26 | window.print(); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/app/bz-modules/inventory/outbound-receipt-table/outbound-receipt-table.component.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |
5 | 6 | 8 |
9 |
10 | 11 | 12 |
13 |
14 | 15 | 16 |
17 |
18 | 21 |
22 |
23 |
24 |
25 |
26 | 28 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 41 | 42 | 43 | 44 | 45 |
46 |
47 |
48 |
49 |
-------------------------------------------------------------------------------- /src/app/bz-modules/inventory/outbound-receipt-table/outbound-receipt-table.component.scss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/damoqiongqiu/OpenWMS-Frontend/a12f709a0d2a77748c718d24ef556e75c7a717b3/src/app/bz-modules/inventory/outbound-receipt-table/outbound-receipt-table.component.scss -------------------------------------------------------------------------------- /src/app/bz-modules/inventory/outbound-receipt-table/outbound-receipt-table.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { OutboundReceiptTableComponent } from './outbound-receipt-table.component'; 4 | 5 | describe('OutboundReceiptTableComponent', () => { 6 | let component: OutboundReceiptTableComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ OutboundReceiptTableComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(OutboundReceiptTableComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should be created', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/bz-modules/inventory/outbound-receipt-table/outbound-receipt-table.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | import { ActivatedRoute, Router } from '@angular/router'; 3 | import { SelectItem } from 'primeng/primeng'; 4 | import { WarehouseService } from "../../../shared/services/warehouse.service"; 5 | import { CategoryService } from "../../../shared/services/category.service"; 6 | import { OutboundReceiptService } from '../../../shared/services/outbound-receipt.service'; 7 | 8 | @Component({ 9 | selector: 'outbound-receipt-table', 10 | templateUrl: './outbound-receipt-table.component.html', 11 | styleUrls: ['./outbound-receipt-table.component.scss'] 12 | }) 13 | export class OutboundReceiptTableComponent implements OnInit { 14 | //仓库 15 | public warehouses: SelectItem[]; 16 | public startDate: Date; 17 | public endDate: Date; 18 | public items: Array; 19 | public selectedInbentory; 20 | 21 | constructor(private router: Router, 22 | private activeRoute: ActivatedRoute, 23 | private warehouseService: WarehouseService, 24 | private categoryService: CategoryService, 25 | private outboundReceiptService: OutboundReceiptService) { } 26 | 27 | ngOnInit() { 28 | this.startDate = new Date(); 29 | this.endDate = new Date(); 30 | 31 | this.warehouseService.getWarehouses().subscribe(warehouses => { 32 | this.warehouses = warehouses; 33 | }); 34 | 35 | this.outboundReceiptService.getOutboundRecords().subscribe((items) => { 36 | this.items = items; 37 | }); 38 | } 39 | 40 | public newReceipt() { 41 | this.router.navigateByUrl('/workspace/inventory/new-outbound-receipt/receipt-no/IN-1-2222222'); 42 | } 43 | 44 | public receiptDetail() { 45 | this.router.navigateByUrl('/workspace/inventory/outbound-receipt-detail/receipt-no/IN-1-2222222'); 46 | } 47 | 48 | public printReceipt() { 49 | window.print(); 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /src/app/bz-modules/login/login.component.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/app/bz-modules/login/login.component.scss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/damoqiongqiu/OpenWMS-Frontend/a12f709a0d2a77748c718d24ef556e75c7a717b3/src/app/bz-modules/login/login.component.scss -------------------------------------------------------------------------------- /src/app/bz-modules/login/login.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { LoginComponent } from './login.component'; 4 | 5 | describe('LoginComponent', () => { 6 | let component: LoginComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ LoginComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(LoginComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/bz-modules/login/login.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from "@angular/core"; 2 | import { ActivatedRoute, Router } from "@angular/router"; 3 | import { AuthService } from "../../shared/services/auth.service"; 4 | 5 | @Component({ 6 | selector: "login", 7 | templateUrl: "./login.component.html", 8 | styleUrls: ["./login.component.scss"] 9 | }) 10 | export class LoginComponent implements OnInit { 11 | constructor(public router: Router, 12 | private authService: AuthService) { 13 | } 14 | 15 | ngOnInit() { 16 | this.authService.logout(); 17 | } 18 | 19 | public doLogin() { 20 | this.authService.loggin().subscribe(() => { 21 | const redirect = this.authService.redirectUrl 22 | ? this.authService.redirectUrl 23 | : "/workspace"; 24 | this.router.navigate([redirect]); 25 | }); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/app/bz-modules/sys/sys-monitor/sys-monitor.component.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
-------------------------------------------------------------------------------- /src/app/bz-modules/sys/sys-monitor/sys-monitor.component.scss: -------------------------------------------------------------------------------- 1 | .nf-chart{ 2 | width:100%; 3 | height:400px; 4 | float:left; 5 | padding:1rem; 6 | background-color: #fff !important; 7 | } 8 | -------------------------------------------------------------------------------- /src/app/bz-modules/sys/sys-monitor/sys-monitor.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { SysMonitorComponent } from './sys-monitor.component'; 4 | 5 | describe('SysMonitorComponent', () => { 6 | let component: SysMonitorComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ SysMonitorComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(SysMonitorComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/bz-modules/sys/sys-monitor/sys-monitor.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit, ViewChild, ElementRef } from '@angular/core'; 2 | import * as echarts from 'echarts'; 3 | 4 | @Component({ 5 | selector: 'sys-monitor', 6 | templateUrl: './sys-monitor.component.html', 7 | styleUrls: ['./sys-monitor.component.scss'] 8 | }) 9 | export class SysMonitorComponent implements OnInit { 10 | constructor() { } 11 | 12 | ngOnInit() { 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/app/bz-modules/sys/sys.component.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 | 5 |
6 |
7 |
-------------------------------------------------------------------------------- /src/app/bz-modules/sys/sys.component.scss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/damoqiongqiu/OpenWMS-Frontend/a12f709a0d2a77748c718d24ef556e75c7a717b3/src/app/bz-modules/sys/sys.component.scss -------------------------------------------------------------------------------- /src/app/bz-modules/sys/sys.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { SysComponent } from './sys.component'; 4 | 5 | describe('SysComponent', () => { 6 | let component: SysComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ SysComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(SysComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/bz-modules/sys/sys.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | 3 | @Component({ 4 | selector: 'sys', 5 | templateUrl: './sys.component.html', 6 | styleUrls: ['./sys.component.scss'] 7 | }) 8 | export class SysComponent implements OnInit { 9 | 10 | constructor() { } 11 | 12 | ngOnInit() { 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /src/app/bz-modules/sys/sys.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { CommonModule } from '@angular/common'; 3 | import { SharedModule } from '../../shared/shared.module'; 4 | import { RouterModule } from '@angular/router'; 5 | import { sysRoutes } from './sys.routes'; 6 | import { SysComponent } from './sys.component'; 7 | import { SysMonitorComponent } from './sys-monitor/sys-monitor.component'; 8 | 9 | @NgModule({ 10 | imports: [ 11 | CommonModule, 12 | SharedModule, 13 | RouterModule.forChild(sysRoutes) 14 | ], 15 | declarations: [ 16 | SysComponent, 17 | SysMonitorComponent 18 | ] 19 | }) 20 | export class SysModule { } 21 | -------------------------------------------------------------------------------- /src/app/bz-modules/sys/sys.routes.ts: -------------------------------------------------------------------------------- 1 | import { SysComponent } from './sys.component'; 2 | import { SysMonitorComponent } from './sys-monitor/sys-monitor.component'; 3 | 4 | export const sysRoutes = [{ 5 | path: '', 6 | component: SysComponent, 7 | children: [ 8 | { path: '', redirectTo: 'sysmonitor', pathMatch: 'full' }, 9 | { path: 'sysmonitor', component: SysMonitorComponent }, 10 | ] 11 | }]; 12 | -------------------------------------------------------------------------------- /src/app/global-layout/footer/footer.component.html: -------------------------------------------------------------------------------- 1 |
2 | Copyright © 2014-2018 AdminLTE.io. 3 | All rights reserved. 4 |
5 | Version 3.0.0-alpha 6 |
7 |
-------------------------------------------------------------------------------- /src/app/global-layout/footer/footer.component.scss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/damoqiongqiu/OpenWMS-Frontend/a12f709a0d2a77748c718d24ef556e75c7a717b3/src/app/global-layout/footer/footer.component.scss -------------------------------------------------------------------------------- /src/app/global-layout/footer/footer.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | 3 | @Component({ 4 | selector: 'app-footer', 5 | templateUrl: './footer.component.html', 6 | styleUrls: ['./footer.component.scss'] 7 | }) 8 | export class FooterComponent implements OnInit { 9 | 10 | constructor() { } 11 | 12 | ngOnInit() { 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /src/app/global-layout/left-sidebar/left-sidebar.component.scss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/damoqiongqiu/OpenWMS-Frontend/a12f709a0d2a77748c718d24ef556e75c7a717b3/src/app/global-layout/left-sidebar/left-sidebar.component.scss -------------------------------------------------------------------------------- /src/app/global-layout/left-sidebar/left-sidebar.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { LeftSidebarComponent } from './left-sidebar.component'; 4 | 5 | describe('LeftSidebarComponent', () => { 6 | let component: LeftSidebarComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ LeftSidebarComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(LeftSidebarComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/global-layout/left-sidebar/left-sidebar.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | 3 | @Component({ 4 | selector: 'left-sidebar', 5 | templateUrl: './left-sidebar.component.html', 6 | styleUrls: ['./left-sidebar.component.scss'] 7 | }) 8 | export class LeftSidebarComponent implements OnInit { 9 | constructor() { } 10 | 11 | ngOnInit() { 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/app/global-layout/nav-bar/nav-bar.component.scss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/damoqiongqiu/OpenWMS-Frontend/a12f709a0d2a77748c718d24ef556e75c7a717b3/src/app/global-layout/nav-bar/nav-bar.component.scss -------------------------------------------------------------------------------- /src/app/global-layout/nav-bar/nav-bar.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { NavBarComponent } from './nav-bar.component'; 4 | 5 | describe('NavBarComponent', () => { 6 | let component: NavBarComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ NavBarComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(NavBarComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/global-layout/nav-bar/nav-bar.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | 3 | @Component({ 4 | selector: 'nav-bar', 5 | templateUrl: './nav-bar.component.html', 6 | styleUrls: ['./nav-bar.component.scss'] 7 | }) 8 | export class NavBarComponent { 9 | constructor() { } 10 | 11 | ngOnInit() { 12 | } 13 | 14 | public toogleLeftSideBar(): void { 15 | document.body.classList.toggle("sidebar-collapse"); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/app/global-layout/right-sidebar/right-sidebar.component.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/app/global-layout/right-sidebar/right-sidebar.component.scss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/damoqiongqiu/OpenWMS-Frontend/a12f709a0d2a77748c718d24ef556e75c7a717b3/src/app/global-layout/right-sidebar/right-sidebar.component.scss -------------------------------------------------------------------------------- /src/app/global-layout/right-sidebar/right-sidebar.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { RightSidebarComponent } from './right-sidebar.component'; 4 | 5 | describe('RightSidebarComponent', () => { 6 | let component: RightSidebarComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ RightSidebarComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(RightSidebarComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/global-layout/right-sidebar/right-sidebar.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | 3 | @Component({ 4 | selector: 'right-sidebar', 5 | templateUrl: './right-sidebar.component.html', 6 | styleUrls: ['./right-sidebar.component.scss'] 7 | }) 8 | export class RightSidebarComponent implements OnInit { 9 | 10 | constructor() { } 11 | 12 | ngOnInit() { 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /src/app/global-layout/workspace/workspace.component.html: -------------------------------------------------------------------------------- 1 |
2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
-------------------------------------------------------------------------------- /src/app/global-layout/workspace/workspace.component.scss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/damoqiongqiu/OpenWMS-Frontend/a12f709a0d2a77748c718d24ef556e75c7a717b3/src/app/global-layout/workspace/workspace.component.scss -------------------------------------------------------------------------------- /src/app/global-layout/workspace/workspace.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { WorkspaceComponent } from './workspace.component'; 4 | 5 | describe('WorkspaceComponent', () => { 6 | let component: WorkspaceComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ WorkspaceComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(WorkspaceComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/global-layout/workspace/workspace.component.ts: -------------------------------------------------------------------------------- 1 | import { Component } from "@angular/core"; 2 | 3 | @Component({ 4 | selector: "workspace", 5 | templateUrl: "./workspace.component.html", 6 | styleUrls: ["./workspace.component.scss"] 7 | }) 8 | export class WorkspaceComponent { 9 | constructor() { } 10 | 11 | ngOnInit() { 12 | 13 | } 14 | } -------------------------------------------------------------------------------- /src/app/global-layout/workspace/workspace.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { SharedModule } from '../../shared/shared.module'; 3 | import { RouterModule } from '@angular/router'; 4 | import { FooterComponent } from '../footer/footer.component'; 5 | import { WorkspaceComponent } from './workspace.component'; 6 | import { DropdownDirective } from '../../shared/dropdown-directive/dropdown.directive'; 7 | import { DropdownTriggerDirective } from '../../shared/dropdown-directive/dropdown-trigger.directive'; 8 | import { NavItemDirective } from '../../shared/navitem-directive/dropdown.directive'; 9 | import { NavBarComponent } from "../nav-bar/nav-bar.component"; 10 | import { LeftSidebarComponent } from '../left-sidebar/left-sidebar.component'; 11 | import { RightSidebarComponent } from '../right-sidebar/right-sidebar.component'; 12 | import { workspaceRoutes } from './workspace.routes'; 13 | 14 | @NgModule({ 15 | imports: [SharedModule, RouterModule.forChild(workspaceRoutes)], 16 | declarations: [ 17 | FooterComponent, 18 | NavBarComponent, 19 | LeftSidebarComponent, 20 | RightSidebarComponent, 21 | WorkspaceComponent, 22 | DropdownDirective, 23 | DropdownTriggerDirective, 24 | NavItemDirective 25 | ] 26 | }) 27 | export class WorkspaceModule { } 28 | -------------------------------------------------------------------------------- /src/app/global-layout/workspace/workspace.routes.ts: -------------------------------------------------------------------------------- 1 | import { WorkspaceComponent } from './workspace.component'; 2 | 3 | export const workspaceRoutes = [ 4 | { 5 | path: '', 6 | component: WorkspaceComponent, 7 | children: [ 8 | { 9 | path: '', 10 | redirectTo: 'dashboard', pathMatch: 'full' 11 | }, 12 | { 13 | path: 'dashboard', 14 | loadChildren: '../../bz-modules/dashboard/dashboard.module#DashboardModule' 15 | }, 16 | { 17 | path: 'inventory', 18 | loadChildren: '../../bz-modules/inventory/inventory.module#InventoryModule' 19 | }, 20 | { 21 | path: 'basic-data', 22 | loadChildren: '../../bz-modules/basic-data/basic-data.module#BasicDataModule' 23 | }, 24 | { 25 | path: 'sys', 26 | loadChildren: '../../bz-modules/sys/sys.module#SysModule' 27 | } 28 | ] 29 | } 30 | ]; 31 | -------------------------------------------------------------------------------- /src/app/index.ts: -------------------------------------------------------------------------------- 1 | export * from './app.component'; 2 | export * from './app.module'; 3 | -------------------------------------------------------------------------------- /src/app/shared/dropdown-directive/dropdown-trigger.directive.ts: -------------------------------------------------------------------------------- 1 | import { Directive, ElementRef, Host, HostListener } from "@angular/core"; 2 | import { DropdownDirective } from "./dropdown.directive"; 3 | 4 | @Directive({ 5 | selector: '[dropdown-trigger]', 6 | exportAs: "dropdown-trigger" 7 | }) 8 | /** 9 | * 下拉按钮,点击这个区域会把原来隐藏的下拉内容显示出来 10 | * 这个指令用来和DropdownDirective配合实现下拉功能 11 | */ 12 | export class DropdownTriggerDirective { 13 | constructor(@Host() public dropdown: DropdownDirective, 14 | private elementRef: ElementRef) { 15 | 16 | } 17 | 18 | open() { 19 | if (this.dropdown.isOpened()) 20 | return; 21 | 22 | this.dropdown.open(); 23 | } 24 | 25 | close() { 26 | if (!this.dropdown.isOpened()) 27 | return; 28 | 29 | this.dropdown.close(); 30 | } 31 | 32 | toggle() { 33 | if (this.dropdown.isOpened()) { 34 | this.close(); 35 | } else { 36 | this.open(); 37 | } 38 | } 39 | 40 | @HostListener("click") 41 | openDropdown() { 42 | if (this.dropdown.isOpened() && this.dropdown.toggleClick) { 43 | this.close(); 44 | } else { 45 | this.open(); 46 | } 47 | } 48 | } -------------------------------------------------------------------------------- /src/app/shared/dropdown-directive/dropdown.directive.ts: -------------------------------------------------------------------------------- 1 | import { Directive, ElementRef, Output, EventEmitter, Input } from "@angular/core"; 2 | 3 | @Directive({ 4 | selector: '[dropdown]', 5 | exportAs: 'dropdown' 6 | }) 7 | 8 | export class DropdownDirective { 9 | @Input("dropdownToggle") 10 | public toggleClick: boolean = true; 11 | 12 | @Output() 13 | public onOpen = new EventEmitter(); 14 | 15 | @Output() 16 | public onClose = new EventEmitter(); 17 | 18 | private closeDropdownOnOutsideClick = (event: MouseEvent) => { this.closeIfInClosableZone(event) }; 19 | 20 | constructor(private elementRef: ElementRef) { } 21 | 22 | open() { 23 | //这种操作HTML元素的方式还是很丑陋的,对吧? 24 | const element: HTMLElement = this.elementRef.nativeElement; 25 | element.classList.add("menu-open"); 26 | element.firstElementChild.classList.add("active"); 27 | this.onOpen.emit("open"); 28 | document.addEventListener("click", this.closeDropdownOnOutsideClick, true); 29 | } 30 | 31 | close() { 32 | const element: HTMLElement = this.elementRef.nativeElement; 33 | element.classList.remove("menu-open"); 34 | element.firstElementChild.classList.remove("active"); 35 | this.onClose.emit("close"); 36 | document.removeEventListener("click", this.closeDropdownOnOutsideClick, true); 37 | } 38 | 39 | isOpened(): boolean { 40 | const element: HTMLElement = this.elementRef.nativeElement; 41 | return element.classList.contains("menu-open"); 42 | } 43 | 44 | private closeIfInClosableZone(event: Event) { 45 | if (event.target !== this.elementRef.nativeElement 46 | && !this.elementRef.nativeElement.contains(event.target)) { 47 | const element: HTMLElement = this.elementRef.nativeElement; 48 | element.firstElementChild.classList.remove("active"); 49 | } 50 | if (event.target == this.elementRef.nativeElement || this.elementRef.nativeElement.contains(event.target)) { 51 | const element: HTMLElement = this.elementRef.nativeElement; 52 | element.firstElementChild.classList.add("active"); 53 | } 54 | } 55 | 56 | ngOnDestroy() { 57 | document.removeEventListener("click", this.closeDropdownOnOutsideClick, true); 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /src/app/shared/fly-in.ts: -------------------------------------------------------------------------------- 1 | import { trigger, state, style, transition, animate, keyframes } from '@angular/animations'; 2 | 3 | export const flyIn = trigger('flyIn', [ 4 | state('in', style({ transform: 'translateX(100%)' })), 5 | transition('void => *', [ 6 | animate(100, keyframes([ 7 | style({ opacity: 0, transform: 'translateX(100%)', offset: 0 }), 8 | style({ opacity: 1, transform: 'translateX(100px)', offset: 0.3 }), 9 | style({ opacity: 1, transform: 'translateX(0)', offset: 1.0 }) 10 | ])) 11 | ]) 12 | ]); -------------------------------------------------------------------------------- /src/app/shared/guard/auth.guard.spec.ts: -------------------------------------------------------------------------------- 1 | import { TestBed, async, inject } from '@angular/core/testing'; 2 | 3 | import { AuthGuard } from './auth.guard'; 4 | 5 | describe('AuthGuard', () => { 6 | beforeEach(() => { 7 | TestBed.configureTestingModule({ 8 | providers: [AuthGuard] 9 | }); 10 | }); 11 | 12 | it('should ...', inject([AuthGuard], (guard: AuthGuard) => { 13 | expect(guard).toBeTruthy(); 14 | })); 15 | }); 16 | -------------------------------------------------------------------------------- /src/app/shared/guard/auth.guard.ts: -------------------------------------------------------------------------------- 1 | import { Injectable } from '@angular/core'; 2 | import { CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot, Router, Route } from '@angular/router'; 3 | import { Observable } from 'rxjs'; 4 | import { AuthService } from '../services/auth.service'; 5 | 6 | @Injectable({ 7 | providedIn: 'root' 8 | }) 9 | export class AuthGuard implements CanActivate { 10 | constructor(private authService: AuthService, private router: Router) {} 11 | GuardLogin(url): boolean { 12 | const loginStatus = sessionStorage.getItem('status'); 13 | if (loginStatus) { 14 | return true; 15 | } else { 16 | this.authService.redirectUrl = url; 17 | this.router.navigate(['/login']); 18 | return false; 19 | } 20 | } 21 | canActivate( 22 | next: ActivatedRouteSnapshot, 23 | state: RouterStateSnapshot): Observable | Promise | boolean { 24 | const url: string = state.url; 25 | return this.GuardLogin(url); 26 | } 27 | canLoad(route: Route): boolean { 28 | const url = `/${route.path}`; 29 | return this.GuardLogin(url); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /src/app/shared/model/customer-model.ts: -------------------------------------------------------------------------------- 1 | export class CustomerModel { 2 | id: string; 3 | index: string; 4 | createTime: Date; 5 | customerName: string; 6 | shortName: string; 7 | addr: string; 8 | postCode: string; 9 | telephone: string; 10 | fax: string; 11 | email: string; 12 | contact: string; 13 | gender: string; 14 | duty: string; 15 | cellphone: string; 16 | remark: string; 17 | } 18 | -------------------------------------------------------------------------------- /src/app/shared/model/staff-model.ts: -------------------------------------------------------------------------------- 1 | export class StaffModel { 2 | id: string; 3 | index: string; 4 | createTime: Date; 5 | staffCode: string; 6 | staffName: string; 7 | gender: string; 8 | cellphone: string; 9 | qqNumber: string; 10 | email: string; 11 | duty: string; 12 | remark: string; 13 | } 14 | -------------------------------------------------------------------------------- /src/app/shared/model/vendor-model.ts: -------------------------------------------------------------------------------- 1 | export class VendorModel { 2 | id: string; 3 | index: string; 4 | vendorName: string; 5 | addr: string; 6 | postCode: string; 7 | telephone: string; 8 | contact: string; 9 | duty: string; 10 | cellphone: string; 11 | fax: string; 12 | email: string; 13 | remark: string; 14 | createTime: Date; 15 | } -------------------------------------------------------------------------------- /src/app/shared/navitem-directive/dropdown.directive.ts: -------------------------------------------------------------------------------- 1 | import { Directive, ElementRef, Host, HostListener } from "@angular/core"; 2 | 3 | @Directive({ 4 | selector: '[nav-item]', 5 | exportAs: 'nav-item' 6 | }) 7 | 8 | export class NavItemDirective { 9 | 10 | private closeDropdownOnOutsideClick = ($event: MouseEvent) => { this.closeIfInClosableZone(event) }; 11 | 12 | constructor(private elementRef: ElementRef) { } 13 | 14 | @HostListener("click") 15 | toggle($event: Event) { 16 | if (event.target == this.elementRef.nativeElement || this.elementRef.nativeElement.contains(event.target)) { 17 | this.elementRef.nativeElement.classList.toggle("show"); 18 | this.elementRef.nativeElement.lastElementChild.classList.toggle("show"); 19 | } 20 | } 21 | 22 | private closeIfInClosableZone($event: Event) { 23 | if (event.target !== this.elementRef.nativeElement 24 | && !this.elementRef.nativeElement.contains(event.target)) { 25 | this.elementRef.nativeElement.classList.remove("show"); 26 | this.elementRef.nativeElement.lastElementChild.classList.remove("show"); 27 | } 28 | } 29 | 30 | ngOnInit() { 31 | document.addEventListener("click", this.closeDropdownOnOutsideClick, true); 32 | } 33 | 34 | ngOnDestroy() { 35 | document.removeEventListener("click", this.closeDropdownOnOutsideClick, true); 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /src/app/shared/services/auth.service.spec.ts: -------------------------------------------------------------------------------- 1 | import { TestBed, inject } from '@angular/core/testing'; 2 | 3 | import { AuthService } from './auth.service'; 4 | 5 | describe('AuthService', () => { 6 | beforeEach(() => { 7 | TestBed.configureTestingModule({ 8 | providers: [AuthService] 9 | }); 10 | }); 11 | 12 | it('should be created', inject([AuthService], (service: AuthService) => { 13 | expect(service).toBeTruthy(); 14 | })); 15 | }); 16 | -------------------------------------------------------------------------------- /src/app/shared/services/auth.service.ts: -------------------------------------------------------------------------------- 1 | import { Injectable } from '@angular/core'; 2 | import { Observable, of } from 'rxjs'; 3 | import { delay, tap } from 'rxjs/operators'; 4 | 5 | @Injectable({ 6 | providedIn: 'root' 7 | }) 8 | export class AuthService { 9 | public isLoggedIn: any = false; 10 | public redirectUrl: string; 11 | constructor() { } 12 | loggin(): Observable { 13 | return of(true).pipe( 14 | delay(1000), 15 | tap((val) => { 16 | this.isLoggedIn = true; 17 | sessionStorage.setItem('status', this.isLoggedIn); 18 | }) 19 | ); 20 | } 21 | logout(): void { 22 | this.isLoggedIn = false; 23 | sessionStorage.removeItem('status'); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/app/shared/services/category.service.spec.ts: -------------------------------------------------------------------------------- 1 | import { TestBed, inject } from '@angular/core/testing'; 2 | 3 | import { CategoryService } from './category.service'; 4 | 5 | describe('CategoryService', () => { 6 | beforeEach(() => { 7 | TestBed.configureTestingModule({ 8 | providers: [CategoryService] 9 | }); 10 | }); 11 | 12 | it('should be created', inject([CategoryService], (service: CategoryService) => { 13 | expect(service).toBeTruthy(); 14 | })); 15 | }); 16 | -------------------------------------------------------------------------------- /src/app/shared/services/category.service.ts: -------------------------------------------------------------------------------- 1 | import { Injectable } from "@angular/core"; 2 | import { Observable } from "rxjs"; 3 | import { CommonService } from "./common-service"; 4 | 5 | @Injectable() 6 | export class CategoryService extends CommonService { 7 | public getCategories(): Observable { 8 | return this.hc.get(this.apiURL.categories); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/app/shared/services/common-service.ts: -------------------------------------------------------------------------------- 1 | import { Injectable } from "@angular/core"; 2 | import { HttpClient } from "@angular/common/http"; 3 | 4 | @Injectable() 5 | export class CommonService { 6 | protected apiURL: any = {}; 7 | constructor(protected hc: HttpClient) { 8 | this.apiURL = (window).environment.apiURL; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/app/shared/services/customer.service.spec.ts: -------------------------------------------------------------------------------- 1 | import { TestBed, inject } from '@angular/core/testing'; 2 | 3 | import { CustomerService } from './customer.service'; 4 | 5 | describe('CustomerService', () => { 6 | beforeEach(() => { 7 | TestBed.configureTestingModule({ 8 | providers: [CustomerService] 9 | }); 10 | }); 11 | 12 | it('should be created', inject([CustomerService], (service: CustomerService) => { 13 | expect(service).toBeTruthy(); 14 | })); 15 | }); 16 | -------------------------------------------------------------------------------- /src/app/shared/services/customer.service.ts: -------------------------------------------------------------------------------- 1 | import { Injectable } from "@angular/core"; 2 | import { Observable } from "rxjs"; 3 | import { CommonService } from "./common-service"; 4 | 5 | @Injectable() 6 | export class CustomerService extends CommonService { 7 | public getCustomers(): Observable { 8 | return this.hc.get(this.apiURL.customers); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/app/shared/services/event-bus.service.ts: -------------------------------------------------------------------------------- 1 | import { Injectable } from '@angular/core'; 2 | import { Subject } from 'rxjs'; 3 | /** 4 | * 事件总线,组件之间可以通过这个服务进行通讯 5 | */ 6 | @Injectable() 7 | export class EventBusService { 8 | public topToggleBtn: Subject = new Subject(); 9 | public showGlobalLoading: Subject = new Subject(); 10 | constructor() {} 11 | } 12 | -------------------------------------------------------------------------------- /src/app/shared/services/inbound-receipt-detail.service.spec.ts: -------------------------------------------------------------------------------- 1 | import { TestBed, inject } from '@angular/core/testing'; 2 | 3 | import { InboundReceiptDetailService } from './inbound-receipt-detail.service'; 4 | 5 | describe('InboundReceiptDetailService', () => { 6 | beforeEach(() => { 7 | TestBed.configureTestingModule({ 8 | providers: [InboundReceiptDetailService] 9 | }); 10 | }); 11 | 12 | it('should be created', inject([InboundReceiptDetailService], (service: InboundReceiptDetailService) => { 13 | expect(service).toBeTruthy(); 14 | })); 15 | }); 16 | -------------------------------------------------------------------------------- /src/app/shared/services/inbound-receipt-detail.service.ts: -------------------------------------------------------------------------------- 1 | import { Injectable } from "@angular/core"; 2 | import { Observable } from "rxjs"; 3 | import { CommonService } from "./common-service"; 4 | 5 | @Injectable() 6 | export class InboundReceiptDetailService extends CommonService { 7 | public getInboundDetail(): Observable { 8 | return this.hc.get(this.apiURL.inboundDetails); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/app/shared/services/inbound-receipt.service.spec.ts: -------------------------------------------------------------------------------- 1 | import { TestBed, inject } from '@angular/core/testing'; 2 | 3 | import { InboundReceiptService } from './inbound-receipt.service'; 4 | 5 | describe('InboundReceiptService', () => { 6 | beforeEach(() => { 7 | TestBed.configureTestingModule({ 8 | providers: [InboundReceiptService] 9 | }); 10 | }); 11 | 12 | it('should be created', inject([InboundReceiptService], (service: InboundReceiptService) => { 13 | expect(service).toBeTruthy(); 14 | })); 15 | }); 16 | -------------------------------------------------------------------------------- /src/app/shared/services/inbound-receipt.service.ts: -------------------------------------------------------------------------------- 1 | import { Injectable } from "@angular/core"; 2 | import { Observable } from "rxjs"; 3 | import { CommonService } from "./common-service"; 4 | 5 | @Injectable() 6 | export class InboundReceiptService extends CommonService { 7 | public getInboundRecords(): Observable { 8 | return this.hc.get(this.apiURL.inboundRecords); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/app/shared/services/inventory.service.spec.ts: -------------------------------------------------------------------------------- 1 | import { TestBed, inject } from '@angular/core/testing'; 2 | 3 | import { InventoryService } from './inventory.service'; 4 | 5 | describe('InventoryService', () => { 6 | beforeEach(() => { 7 | TestBed.configureTestingModule({ 8 | providers: [InventoryService] 9 | }); 10 | }); 11 | 12 | it('should be created', inject([InventoryService], (service: InventoryService) => { 13 | expect(service).toBeTruthy(); 14 | })); 15 | }); 16 | -------------------------------------------------------------------------------- /src/app/shared/services/inventory.service.ts: -------------------------------------------------------------------------------- 1 | import { Injectable } from "@angular/core"; 2 | import { Observable } from "rxjs"; 3 | import { CommonService } from "./common-service"; 4 | 5 | @Injectable() 6 | export class InventoryService extends CommonService { 7 | public getInventories(warehouseId: string): Observable { 8 | return this.hc.get(this.apiURL.inventories); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/app/shared/services/new-inbound-receipt.service.spec.ts: -------------------------------------------------------------------------------- 1 | import { TestBed, inject } from '@angular/core/testing'; 2 | 3 | import { NewInboundReceiptService } from './new-inbound-receipt.service'; 4 | 5 | describe('NewInboundReceiptService', () => { 6 | beforeEach(() => { 7 | TestBed.configureTestingModule({ 8 | providers: [NewInboundReceiptService] 9 | }); 10 | }); 11 | 12 | it('should be created', inject([NewInboundReceiptService], (service: NewInboundReceiptService) => { 13 | expect(service).toBeTruthy(); 14 | })); 15 | }); 16 | -------------------------------------------------------------------------------- /src/app/shared/services/new-inbound-receipt.service.ts: -------------------------------------------------------------------------------- 1 | import { Injectable } from "@angular/core"; 2 | import { Observable } from "rxjs"; 3 | import { CommonService } from "./common-service"; 4 | 5 | @Injectable() 6 | export class NewInboundReceiptService extends CommonService { 7 | public getInboundDetail(): Observable { 8 | return this.hc.get(this.apiURL.inboundReceipt); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/app/shared/services/new-outbound-receipt.service.spec.ts: -------------------------------------------------------------------------------- 1 | import { TestBed, inject } from '@angular/core/testing'; 2 | 3 | import { NewOutboundReceiptService } from './new-outbound-receipt.service'; 4 | 5 | describe('NewOutboundReceiptService', () => { 6 | beforeEach(() => { 7 | TestBed.configureTestingModule({ 8 | providers: [NewOutboundReceiptService] 9 | }); 10 | }); 11 | 12 | it('should be created', inject([NewOutboundReceiptService], (service: NewOutboundReceiptService) => { 13 | expect(service).toBeTruthy(); 14 | })); 15 | }); 16 | -------------------------------------------------------------------------------- /src/app/shared/services/new-outbound-receipt.service.ts: -------------------------------------------------------------------------------- 1 | import { Injectable } from "@angular/core"; 2 | import { Observable } from "rxjs"; 3 | import { CommonService } from "./common-service"; 4 | 5 | @Injectable() 6 | export class NewOutboundReceiptService extends CommonService { 7 | public getOutboundDetail(): Observable { 8 | return this.hc.get(this.apiURL.outReceipt); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/app/shared/services/outbound-receipt-detail.service.spec.ts: -------------------------------------------------------------------------------- 1 | import { TestBed, inject } from '@angular/core/testing'; 2 | 3 | import { OutboundReceiptDetailService } from './outbound-receipt-detail.service'; 4 | 5 | describe('OutboundReceiptDetailService', () => { 6 | beforeEach(() => { 7 | TestBed.configureTestingModule({ 8 | providers: [OutboundReceiptDetailService] 9 | }); 10 | }); 11 | 12 | it('should be created', inject([OutboundReceiptDetailService], (service: OutboundReceiptDetailService) => { 13 | expect(service).toBeTruthy(); 14 | })); 15 | }); 16 | -------------------------------------------------------------------------------- /src/app/shared/services/outbound-receipt-detail.service.ts: -------------------------------------------------------------------------------- 1 | import { Injectable } from "@angular/core"; 2 | import { Observable } from "rxjs"; 3 | import { CommonService } from "./common-service"; 4 | 5 | @Injectable() 6 | export class OutboundReceiptDetailService extends CommonService { 7 | public getOutboundDetail(): Observable { 8 | return this.hc.get(this.apiURL.outboundDetail); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/app/shared/services/outbound-receipt.service.spec.ts: -------------------------------------------------------------------------------- 1 | import { TestBed, inject } from '@angular/core/testing'; 2 | 3 | import { OutboundReceiptService } from './outbound-receipt.service'; 4 | 5 | describe('OutboundReceiptService', () => { 6 | beforeEach(() => { 7 | TestBed.configureTestingModule({ 8 | providers: [OutboundReceiptService] 9 | }); 10 | }); 11 | 12 | it('should be created', inject([OutboundReceiptService], (service: OutboundReceiptService) => { 13 | expect(service).toBeTruthy(); 14 | })); 15 | }); 16 | -------------------------------------------------------------------------------- /src/app/shared/services/outbound-receipt.service.ts: -------------------------------------------------------------------------------- 1 | import { Injectable } from "@angular/core"; 2 | import { Observable } from "rxjs"; 3 | import { CommonService } from "./common-service"; 4 | 5 | @Injectable() 6 | export class OutboundReceiptService extends CommonService { 7 | public getOutboundRecords(): Observable { 8 | return this.hc.get(this.apiURL.outboundRecords); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/app/shared/services/staff.service.spec.ts: -------------------------------------------------------------------------------- 1 | import { TestBed, inject } from '@angular/core/testing'; 2 | 3 | import { StaffService } from './staff.service'; 4 | 5 | describe('StaffService', () => { 6 | beforeEach(() => { 7 | TestBed.configureTestingModule({ 8 | providers: [StaffService] 9 | }); 10 | }); 11 | 12 | it('should be created', inject([StaffService], (service: StaffService) => { 13 | expect(service).toBeTruthy(); 14 | })); 15 | }); 16 | -------------------------------------------------------------------------------- /src/app/shared/services/staff.service.ts: -------------------------------------------------------------------------------- 1 | import { Injectable } from "@angular/core"; 2 | import { Observable } from "rxjs"; 3 | import { CommonService } from "./common-service"; 4 | 5 | @Injectable() 6 | export class StaffService extends CommonService { 7 | public getStaffs(): Observable { 8 | return this.hc.get(this.apiURL.staffs); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/app/shared/services/vendor.service.spec.ts: -------------------------------------------------------------------------------- 1 | import { TestBed, inject } from '@angular/core/testing'; 2 | 3 | import { VendorService } from './vendor.service'; 4 | 5 | describe('VendorService', () => { 6 | beforeEach(() => { 7 | TestBed.configureTestingModule({ 8 | providers: [VendorService] 9 | }); 10 | }); 11 | 12 | it('should be created', inject([VendorService], (service: VendorService) => { 13 | expect(service).toBeTruthy(); 14 | })); 15 | }); 16 | -------------------------------------------------------------------------------- /src/app/shared/services/vendor.service.ts: -------------------------------------------------------------------------------- 1 | import { Injectable } from "@angular/core"; 2 | import { Observable } from "rxjs"; 3 | import { CommonService } from "./common-service"; 4 | 5 | @Injectable() 6 | export class VendorService extends CommonService { 7 | public getVendors(): Observable { 8 | return this.hc.get(this.apiURL.vendors); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/app/shared/services/warehouse.service.spec.ts: -------------------------------------------------------------------------------- 1 | import { TestBed, inject } from '@angular/core/testing'; 2 | 3 | import { WarehouseService } from './warehouse.service'; 4 | 5 | describe('WarehouseService', () => { 6 | beforeEach(() => { 7 | TestBed.configureTestingModule({ 8 | providers: [WarehouseService] 9 | }); 10 | }); 11 | 12 | it('should be created', inject([WarehouseService], (service: WarehouseService) => { 13 | expect(service).toBeTruthy(); 14 | })); 15 | }); 16 | -------------------------------------------------------------------------------- /src/app/shared/services/warehouse.service.ts: -------------------------------------------------------------------------------- 1 | import { Injectable } from "@angular/core"; 2 | import { Observable } from "rxjs"; 3 | import { CommonService } from "./common-service"; 4 | 5 | @Injectable() 6 | export class WarehouseService extends CommonService { 7 | public getWarehouses(): Observable { 8 | return this.hc.get(this.apiURL.warehouses); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/assets/css/AdminLTE-custom/AdminLTE-raw.scss: -------------------------------------------------------------------------------- 1 | /*! 2 | * AdminLTE v3.0.0-alpha 3 | * Author: Abdullah Almsaeed 4 | * Website: AdminLTE.io 5 | * License: Open source - MIT 6 | */ 7 | // 8 | // ------------------------------------------------------------------ 9 | // This file is to be included in your custom SCSS. Before importing 10 | // this file, you should include your custom AdminLTE and Bootstrap 11 | // variables followed by bootstrap.scss and then this file. It's 12 | // ok to import this file without custom variables too! 13 | // NOTE: be sure to keep the license notice in the generated css. 14 | // ------------------------------------------------------------------ 15 | // 16 | // VARIABLES AND MIXINS 17 | // --------------------------------------------------- 18 | @import "bootstrap-variables"; 19 | @import "variables"; 20 | @import "mixins"; 21 | // Core 22 | // --------------------------------------------------- 23 | @import "layout"; 24 | // COMPONENTS 25 | // --------------------------------------------------- 26 | @import "main-header"; 27 | @import "brand"; 28 | @import "main-sidebar"; 29 | @import "sidebar-mini"; 30 | @import "control-sidebar"; 31 | @import "dropdown"; 32 | @import "forms"; 33 | @import "progress-bars"; 34 | @import "small-box"; 35 | @import "cards"; 36 | @import "info-box"; 37 | @import "timeline"; 38 | @import "buttons"; 39 | @import "callout"; 40 | @import "alerts"; 41 | @import "navs"; 42 | @import "products"; 43 | @import "table"; 44 | @import "labels"; 45 | @import "direct-chat"; 46 | @import "users-list"; 47 | @import "carousel"; 48 | @import "social-widgets"; 49 | // PAGES 50 | // --------------------------------------------------- 51 | @import "mailbox"; 52 | @import "lockscreen"; 53 | @import "login_and_register"; 54 | @import "404_500_errors"; 55 | @import "invoice"; 56 | @import "profile"; 57 | // Plugins 58 | // --------------------------------------------------- 59 | @import "fullcalendar"; 60 | @import "select2"; 61 | // Miscellaneous 62 | // --------------------------------------------------- 63 | @import "miscellaneous"; 64 | @import "print"; 65 | @import "text"; 66 | @import "elevation"; 67 | -------------------------------------------------------------------------------- /src/assets/css/AdminLTE-custom/AdminLTE.scss: -------------------------------------------------------------------------------- 1 | /*! 2 | * AdminLTE v3.0.0-alpha 3 | * Author: Abdullah Almsaeed 4 | * Website: AdminLTE.io 5 | * License: Open source - MIT 6 | */ 7 | 8 | // Bootstrap 9 | // --------------------------------------------------- 10 | @import "../../../../node_modules/bootstrap/scss/functions"; 11 | @import "bootstrap-variables"; 12 | @import "../../../../node_modules/bootstrap/scss/bootstrap.scss"; 13 | // VARIABLES AND MIXINS 14 | // --------------------------------------------------- 15 | @import "variables"; 16 | @import "mixins"; 17 | // Core 18 | // --------------------------------------------------- 19 | @import "layout"; 20 | // COMPONENTS 21 | // --------------------------------------------------- 22 | @import "main-header"; 23 | @import "brand"; 24 | @import "main-sidebar"; 25 | @import "sidebar-mini"; 26 | @import "control-sidebar"; 27 | @import "dropdown"; 28 | @import "forms"; 29 | @import "progress-bars"; 30 | @import "small-box"; 31 | @import "cards"; 32 | @import "info-box"; 33 | @import "timeline"; 34 | @import "buttons"; 35 | @import "callout"; 36 | @import "alerts"; 37 | @import "navs"; 38 | @import "products"; 39 | @import "table"; 40 | @import "labels"; 41 | @import "direct-chat"; 42 | @import "users-list"; 43 | @import "carousel"; 44 | @import "social-widgets"; 45 | // PAGES 46 | // --------------------------------------------------- 47 | @import "mailbox"; 48 | @import "lockscreen"; 49 | @import "login_and_register"; 50 | @import "404_500_errors"; 51 | @import "invoice"; 52 | @import "profile"; 53 | // Plugins 54 | // --------------------------------------------------- 55 | @import "fullcalendar"; 56 | @import "select2"; 57 | // Miscellaneous 58 | // --------------------------------------------------- 59 | @import "miscellaneous"; 60 | @import "print"; 61 | @import "text"; 62 | @import "elevation"; -------------------------------------------------------------------------------- /src/assets/css/AdminLTE-custom/_404_500_errors.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Page: 400 and 500 error pages 3 | * ------------------------------ 4 | */ 5 | .error-page { 6 | width: 600px; 7 | margin: 20px auto 0 auto; 8 | @include media-breakpoint-down(sm) { 9 | width: 100%; 10 | } 11 | //For the error number e.g: 404 12 | > .headline { 13 | float: left; 14 | font-size: 100px; 15 | font-weight: 300; 16 | @include media-breakpoint-down(sm) { 17 | float: none; 18 | text-align: center; 19 | } 20 | } 21 | //For the message 22 | > .error-content { 23 | margin-left: 190px; 24 | @include media-breakpoint-down(sm) { 25 | margin-left: 0; 26 | } 27 | > h3 { 28 | font-weight: 300; 29 | font-size: 25px; 30 | @include media-breakpoint-down(sm) { 31 | text-align: center; 32 | } 33 | } 34 | display: block; 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /src/assets/css/AdminLTE-custom/_alerts.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Component: alert 3 | * ---------------- 4 | */ 5 | 6 | .alert { 7 | .icon { 8 | margin-right: 10px; 9 | } 10 | 11 | .close { 12 | color: #000; 13 | opacity: .2; 14 | &:hover { 15 | opacity: .5; 16 | } 17 | } 18 | 19 | a { 20 | color: $white; 21 | text-decoration: underline; 22 | } 23 | } 24 | 25 | //Alert Variants 26 | .alert-success { 27 | @extend .bg-success; 28 | border-color: darken(theme-color("success"), 5%); 29 | } 30 | 31 | .alert-danger, 32 | .alert-error { 33 | @extend .bg-danger; 34 | border-color: darken(theme-color("danger"), 5%); 35 | } 36 | 37 | .alert-warning { 38 | @extend .bg-warning; 39 | border-color: darken(theme-color("warning"), 5%); 40 | } 41 | 42 | .alert-info { 43 | @extend .bg-info; 44 | border-color: darken(theme-color("info"), 5%); 45 | } 46 | -------------------------------------------------------------------------------- /src/assets/css/AdminLTE-custom/_brand.scss: -------------------------------------------------------------------------------- 1 | .brand-link { 2 | $brand-link-padding-y: $navbar-brand-padding-y + $navbar-padding-y; 3 | padding: $brand-link-padding-y $sidebar-padding-x; 4 | font-size: $navbar-brand-font-size; 5 | display: block; 6 | line-height: $line-height-lg; 7 | white-space: nowrap; 8 | 9 | &:hover { 10 | color: $white; 11 | text-decoration: none; 12 | } 13 | 14 | [class*="sidebar-dark"] & { 15 | color: rgba(255,255,255,.8); 16 | border-bottom: 1px solid lighten($dark, 10%); 17 | } 18 | 19 | [class*="sidebar-light"] & { 20 | color: rgba(0,0,0,.8); 21 | border-bottom: 1px solid $gray-300; 22 | } 23 | } 24 | 25 | .brand-image { 26 | float:left; 27 | line-height: .8; 28 | max-height: 34px; 29 | width: auto; 30 | margin-left: .8rem; 31 | margin-right: .5rem; 32 | margin-top: -3px; 33 | } 34 | -------------------------------------------------------------------------------- /src/assets/css/AdminLTE-custom/_buttons.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Component: Button 3 | * ----------------- 4 | */ 5 | 6 | .btn { 7 | // Flat buttons 8 | &.btn-flat { 9 | @include border-radius(0); 10 | box-shadow: none; 11 | border-width: 1px; 12 | } 13 | 14 | // input file btn 15 | &.btn-file { 16 | position: relative; 17 | overflow: hidden; 18 | > input[type='file'] { 19 | position: absolute; 20 | top: 0; 21 | right: 0; 22 | min-width: 100%; 23 | min-height: 100%; 24 | font-size: 100px; 25 | text-align: right; 26 | opacity: 0; 27 | outline: none; 28 | background: white; 29 | cursor: inherit; 30 | display: block; 31 | } 32 | } 33 | } 34 | 35 | // Button color variations 36 | .btn-default { 37 | background-color: #f4f4f4; 38 | color: #444; 39 | border-color: #ddd; 40 | &:hover, 41 | &:active, 42 | &.hover { 43 | color: #222; 44 | background-color: darken(#f4f4f4, 5%); 45 | } 46 | } 47 | 48 | // Application buttons 49 | .btn-app { 50 | @include border-radius(3px); 51 | position: relative; 52 | padding: 15px 5px; 53 | margin: 0 0 10px 10px; 54 | min-width: 80px; 55 | height: 60px; 56 | text-align: center; 57 | color: #666; 58 | border: 1px solid #ddd; 59 | background-color: #f4f4f4; 60 | font-size: 12px; 61 | // Icons within the btn 62 | > .fa, 63 | > .glyphicon, 64 | > .ion { 65 | font-size: 20px; 66 | display: block; 67 | } 68 | 69 | &:hover { 70 | background: #f4f4f4; 71 | color: #444; 72 | border-color: #aaa; 73 | } 74 | 75 | &:active, 76 | &:focus { 77 | @include box-shadow(inset 0 3px 5px rgba(0, 0, 0, 0.125)); 78 | } 79 | 80 | // The badge 81 | > .badge { 82 | position: absolute; 83 | top: -3px; 84 | right: -10px; 85 | font-size: 10px; 86 | font-weight: 400; 87 | } 88 | } 89 | -------------------------------------------------------------------------------- /src/assets/css/AdminLTE-custom/_callout.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Component: Callout 3 | * ------------------ 4 | */ 5 | 6 | // Base styles (regardless of theme) 7 | .callout { 8 | @if $enable-rounded { 9 | @include border-radius($border-radius); 10 | } 11 | 12 | @if $enable-shadows { 13 | @extend .elevation-1; 14 | } @else { 15 | border: 1px solid $gray-300; 16 | } 17 | 18 | @extend .mb-3; 19 | background-color: $white; 20 | padding: .5rem 1rem .5rem .5rem; 21 | border-left: 5px solid #eee; 22 | 23 | a { 24 | color: $white; 25 | text-decoration: underline; 26 | &:hover { 27 | color: #eee; 28 | } 29 | } 30 | 31 | p:last-child { 32 | margin-bottom: 0; 33 | } 34 | 35 | // Themes for different contexts 36 | &.callout-danger { 37 | border-left-color: darken(theme-color("danger"), 10%); 38 | } 39 | &.callout-warning { 40 | border-left-color: darken(theme-color("warning"), 10%); 41 | } 42 | &.callout-info { 43 | border-left-color: darken(theme-color("info"), 10%); 44 | } 45 | &.callout-success { 46 | border-left-color: darken(theme-color("success"), 10%); 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /src/assets/css/AdminLTE-custom/_carousel.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Component: Carousel 3 | * ------------------- 4 | */ 5 | .carousel-control { 6 | &.left, 7 | &.right { 8 | background-image: none; 9 | } 10 | > .fa { 11 | font-size: 40px; 12 | position: absolute; 13 | top: 50%; 14 | z-index: 5; 15 | display: inline-block; 16 | margin-top: -20px; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/assets/css/AdminLTE-custom/_elevation.scss: -------------------------------------------------------------------------------- 1 | .elevation-0 { 2 | box-shadow: none; 3 | } 4 | 5 | .elevation-1 { 6 | box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.24); 7 | } 8 | 9 | .elevation-2 { 10 | box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16), 0 3px 6px rgba(0, 0, 0, 0.23); 11 | } 12 | 13 | .elevation-3 { 14 | box-shadow: 0 10px 20px rgba(0, 0, 0, 0.19), 0 6px 6px rgba(0, 0, 0, 0.23); 15 | } 16 | 17 | .elevation-4 { 18 | box-shadow: 0 14px 28px rgba(0, 0, 0, 0.25), 0 10px 10px rgba(0, 0, 0, 0.22); 19 | } 20 | 21 | .elevation-5 { 22 | box-shadow: 0 19px 38px rgba(0, 0, 0, 0.30), 0 15px 12px rgba(0, 0, 0, 0.22); 23 | } 24 | -------------------------------------------------------------------------------- /src/assets/css/AdminLTE-custom/_forms.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Component: Form 3 | * --------------- 4 | */ 5 | .form-group { 6 | &.has-icon { 7 | position: relative; 8 | .form-control { 9 | padding-right: 35px; 10 | } 11 | .form-icon { 12 | cursor: pointer; 13 | position: absolute; 14 | right: 3px; 15 | top: 0; 16 | padding: $input-btn-padding-y $input-btn-padding-x; 17 | // margin-top: -3px; 18 | border: 0; 19 | background-color: transparent; 20 | font-size: 1rem; 21 | } 22 | } 23 | } 24 | 25 | /* button groups */ 26 | .btn-group-vertical { 27 | .btn { 28 | &.btn-flat:first-of-type, &.btn-flat:last-of-type { 29 | @include border-radius(0); 30 | } 31 | } 32 | } 33 | 34 | /* Support Font Awesome icons in form-control */ 35 | .form-control-feedback.fa { 36 | line-height: $input-height; 37 | } 38 | 39 | .input-lg + .form-control-feedback.fa, 40 | .input-group-lg + .form-control-feedback.fa, 41 | .form-group-lg .form-control + .form-control-feedback.fa { 42 | line-height: $input-height-lg; 43 | } 44 | 45 | .input-sm + .form-control-feedback.fa, 46 | .input-group-sm + .form-control-feedback.fa, 47 | .form-group-sm .form-control + .form-control-feedback.fa { 48 | line-height: $input-height-sm; 49 | } 50 | 51 | label:not(.form-check-label, .custom-file-label) { 52 | font-weight: $font-weight-bold; 53 | } 54 | -------------------------------------------------------------------------------- /src/assets/css/AdminLTE-custom/_fullcalendar.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Plugin: Full Calendar 3 | * --------------------- 4 | */ 5 | //Fullcalendar buttons 6 | .fc-button { 7 | background: #f4f4f4; 8 | background-image: none; 9 | color: #444; 10 | border-color: #ddd; 11 | border-bottom-color: #ddd; 12 | &:hover, 13 | &:active, 14 | &.hover { 15 | background-color: #e9e9e9; 16 | } 17 | } 18 | 19 | // Calendar title 20 | .fc-header-title h2 { 21 | font-size: 15px; 22 | line-height: 1.6em; 23 | color: #666; 24 | margin-left: 10px; 25 | } 26 | 27 | .fc-header-right { 28 | padding-right: 10px; 29 | } 30 | 31 | .fc-header-left { 32 | padding-left: 10px; 33 | } 34 | 35 | // Calendar table header cells 36 | .fc-widget-header { 37 | background: #fafafa; 38 | } 39 | 40 | .fc-grid { 41 | width: 100%; 42 | border: 0; 43 | } 44 | 45 | .fc-widget-header:first-of-type, 46 | .fc-widget-content:first-of-type { 47 | border-left: 0; 48 | border-right: 0; 49 | } 50 | 51 | .fc-widget-header:last-of-type, 52 | .fc-widget-content:last-of-type { 53 | border-right: 0; 54 | } 55 | 56 | .fc-toolbar { 57 | padding: 1rem; 58 | margin: 0; 59 | } 60 | 61 | .fc-day-number { 62 | font-size: 20px; 63 | font-weight: 300; 64 | padding-right: 10px; 65 | } 66 | 67 | .fc-color-picker { 68 | list-style: none; 69 | margin: 0; 70 | padding: 0; 71 | > li { 72 | float: left; 73 | font-size: 30px; 74 | margin-right: 5px; 75 | line-height: 30px; 76 | .fa { 77 | transition: transform linear .3s; 78 | &:hover { 79 | @include rotate(30deg); 80 | } 81 | } 82 | } 83 | } 84 | 85 | #add-new-event { 86 | transition: all linear .3s; 87 | } 88 | 89 | .external-event { 90 | @include box-shadow($card-shadow); 91 | 92 | padding: 5px 10px; 93 | font-weight: bold; 94 | margin-bottom: 4px; 95 | border-radius: $border-radius; 96 | cursor: move; 97 | 98 | &:hover { 99 | @include box-shadow(inset 0 0 90px rgba(0, 0, 0, 0.2)); 100 | } 101 | } 102 | -------------------------------------------------------------------------------- /src/assets/css/AdminLTE-custom/_info-box.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Component: Info Box 3 | * ------------------- 4 | */ 5 | .info-box { 6 | @extend .d-flex; 7 | @extend .mb-3; 8 | @include box-shadow($card-shadow); 9 | @include border-radius($border-radius); 10 | 11 | padding: .5rem; 12 | min-height: 80px; 13 | background: $white; 14 | 15 | .progress { 16 | background-color: rgba(0, 0, 0, 0.125); 17 | margin: 5px 0; 18 | height: 2px; 19 | .progress-bar { 20 | background-color: $white; 21 | } 22 | } 23 | } 24 | 25 | .info-box-icon { 26 | @extend .d-flex; 27 | @extend .align-items-center; 28 | @extend .justify-content-center; 29 | 30 | @if $enable-rounded { 31 | border-radius: $border-radius; 32 | } 33 | 34 | display: block; 35 | width: 70px; 36 | text-align: center; 37 | font-size: 30px; 38 | 39 | > img { 40 | max-width: 100%; 41 | } 42 | } 43 | 44 | .info-box-content { 45 | padding: 5px 10px; 46 | flex: 1; 47 | } 48 | 49 | .info-box-number { 50 | display: block; 51 | font-weight: $font-weight-bold; 52 | } 53 | 54 | .progress-description, 55 | .info-box-text { 56 | display: block; 57 | white-space: nowrap; 58 | overflow: hidden; 59 | text-overflow: ellipsis; 60 | } 61 | 62 | @each $name, $color in $theme-colors { 63 | .info-box.bg-#{$name}, 64 | .info-box.bg-#{$name}-gradient { 65 | color: color-yiq($color); 66 | 67 | .progress-bar { 68 | background-color: color-yiq($color); 69 | } 70 | } 71 | } 72 | 73 | .info-box-more { 74 | display: block; 75 | } 76 | 77 | .progress-description { 78 | margin: 0; 79 | } 80 | -------------------------------------------------------------------------------- /src/assets/css/AdminLTE-custom/_invoice.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Page: Invoice 3 | * ------------- 4 | */ 5 | 6 | .invoice { 7 | position: relative; 8 | background: $white; 9 | border: 1px solid $card-border-color; 10 | } 11 | 12 | .invoice-title { 13 | margin-top: 0; 14 | } 15 | -------------------------------------------------------------------------------- /src/assets/css/AdminLTE-custom/_labels.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Component: Label 3 | * ---------------- 4 | */ 5 | .label-default { 6 | background-color: $gray-500; 7 | color: #444; 8 | } 9 | 10 | .label-danger { 11 | @extend .bg-danger; 12 | } 13 | 14 | .label-info { 15 | @extend .bg-info; 16 | } 17 | 18 | .label-warning { 19 | @extend .bg-warning; 20 | } 21 | 22 | .label-primary { 23 | @extend .bg-primary; 24 | } 25 | 26 | .label-success { 27 | @extend .bg-success; 28 | } 29 | -------------------------------------------------------------------------------- /src/assets/css/AdminLTE-custom/_layout.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Core: General Layout Style 3 | * ------------------------- 4 | */ 5 | html, 6 | body, 7 | .wrapper { 8 | min-height: 100%; 9 | overflow-x: hidden; 10 | } 11 | 12 | .wrapper { 13 | position: relative; 14 | 15 | .layout-boxed & { 16 | @include box-shadow(0 0 10px rgba(0, 0, 0, .3)); 17 | 18 | &, 19 | &:before { 20 | margin: 0 auto; 21 | max-width: $boxed-layout-max-width; 22 | } 23 | } 24 | } 25 | 26 | .content-wrapper, 27 | .main-footer, 28 | .main-header { 29 | @include media-breakpoint-up(md) { 30 | @include transition(margin-left $transition-speed $transition-fn); 31 | 32 | margin-left: $sidebar-width; 33 | z-index: 3000; 34 | 35 | .sidebar-collapse & { 36 | margin-left: 0; 37 | } 38 | } 39 | 40 | @include media-breakpoint-down(md) { 41 | &, 42 | &:before { 43 | margin-left: 0; 44 | } 45 | } 46 | } 47 | 48 | .content-wrapper { 49 | background: $main-bg; 50 | 51 | > .content { 52 | padding: $content-padding-y $content-padding-x; 53 | } 54 | } 55 | 56 | .main-sidebar { 57 | position: fixed; 58 | top: 0; 59 | left: 0; 60 | bottom: 0; 61 | 62 | &, 63 | &:before { 64 | $local-sidebar-transition: margin-left $transition-speed $transition-fn, width $transition-speed $transition-fn; 65 | @include transition($local-sidebar-transition); 66 | width: $sidebar-width; 67 | } 68 | 69 | .sidebar-collapse & { 70 | &, 71 | &:before { 72 | margin-left: -$sidebar-width; 73 | } 74 | } 75 | 76 | @include media-breakpoint-down(md) { 77 | &, 78 | &:before { 79 | box-shadow: none!important; 80 | margin-left: -$sidebar-width; 81 | } 82 | 83 | .sidebar-open & { 84 | &, 85 | &:before { 86 | margin-left: 0; 87 | } 88 | } 89 | } 90 | } 91 | 92 | .main-footer { 93 | padding: $main-footer-padding; 94 | color: #555; 95 | border-top: $main-footer-border-top; 96 | background: $main-footer-bg; 97 | } 98 | 99 | .content-header { 100 | padding: 15px $content-padding-x; 101 | 102 | h1 { 103 | font-size: 1.8rem; 104 | margin: 0; 105 | } 106 | .breadcrumb { 107 | margin-bottom: 0; 108 | padding: 0; 109 | background: transparent; 110 | line-height: 1.8rem; 111 | } 112 | } 113 | 114 | .hold-transition { 115 | .content-wrapper, 116 | .main-header, 117 | .main-footer { 118 | transition: none!important; 119 | } 120 | } 121 | -------------------------------------------------------------------------------- /src/assets/css/AdminLTE-custom/_lockscreen.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Page: Lock Screen 3 | * ----------------- 4 | */ 5 | /* ADD THIS CLASS TO THE TAG */ 6 | .lockscreen { 7 | background: $gray-200; 8 | } 9 | 10 | .lockscreen-logo { 11 | font-size: 35px; 12 | text-align: center; 13 | margin-bottom: 25px; 14 | font-weight: 300; 15 | a { 16 | color: #444; 17 | } 18 | } 19 | 20 | .lockscreen-wrapper { 21 | max-width: 400px; 22 | margin: 0 auto; 23 | margin-top: 10%; 24 | } 25 | 26 | /* User name [optional] */ 27 | .lockscreen .lockscreen-name { 28 | text-align: center; 29 | font-weight: 600; 30 | } 31 | 32 | /* Will contain the image and the sign in form */ 33 | .lockscreen-item { 34 | @include border-radius(4px); 35 | padding: 0; 36 | background: $white; 37 | position: relative; 38 | margin: 10px auto 30px auto; 39 | width: 290px; 40 | } 41 | 42 | /* User image */ 43 | .lockscreen-image { 44 | @include border-radius(50%); 45 | position: absolute; 46 | left: -10px; 47 | top: -25px; 48 | background: $white; 49 | padding: 5px; 50 | z-index: 10; 51 | > img { 52 | @include border-radius(50%); 53 | width: 70px; 54 | height: 70px; 55 | } 56 | } 57 | 58 | /* Contains the password input and the login button */ 59 | .lockscreen-credentials { 60 | margin-left: 70px; 61 | .form-control { 62 | border: 0; 63 | } 64 | .btn { 65 | background-color: $white; 66 | border: 0; 67 | padding: 0 10px; 68 | } 69 | } 70 | 71 | .lockscreen-footer { 72 | margin-top: 10px; 73 | } 74 | -------------------------------------------------------------------------------- /src/assets/css/AdminLTE-custom/_login_and_register.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Page: Login & Register 3 | * ---------------------- 4 | */ 5 | 6 | .login-logo, 7 | .register-logo { 8 | font-size: 35px; 9 | text-align: center; 10 | margin-bottom: 25px; 11 | font-weight: 300; 12 | a { 13 | color: #444; 14 | } 15 | } 16 | 17 | .login-page, 18 | .register-page { 19 | background: $gray-200; 20 | } 21 | 22 | .login-box, 23 | .register-box { 24 | width: 360px; 25 | margin: 7% auto; 26 | @media (max-width: map-get($grid-breakpoints, sm)) { 27 | width: 90%; 28 | margin-top: 20px; 29 | } 30 | } 31 | 32 | .login-card-body, 33 | .register-card-body { 34 | background: $white; 35 | padding: 20px; 36 | border-top: 0; 37 | color: #666; 38 | .input-group { 39 | .form-control { 40 | border-right: none; 41 | 42 | &:focus { 43 | box-shadow: none; 44 | & ~ .input-group-append .input-group-text { 45 | border-color: $input-focus-border-color; 46 | } 47 | } 48 | 49 | &.is-valid { 50 | &:focus { 51 | box-shadow: none; 52 | } 53 | & ~ .input-group-append .input-group-text { 54 | border-color: $success; 55 | } 56 | } 57 | 58 | &.is-invalid { 59 | &:focus { 60 | box-shadow: none; 61 | } 62 | & ~ .input-group-append .input-group-text { 63 | border-color: $danger; 64 | } 65 | } 66 | } 67 | .input-group-text { 68 | color: #777; 69 | background-color: transparent; 70 | border-left: none; 71 | transition: $input-transition; 72 | // Fix boostrap issue temporarily https://github.com/twbs/bootstrap/issues/25110 73 | border-bottom-right-radius: $border-radius !important; 74 | border-top-right-radius: $border-radius !important; 75 | } 76 | } 77 | } 78 | 79 | .login-box-msg, 80 | .register-box-msg { 81 | margin: 0; 82 | text-align: center; 83 | padding: 0 20px 20px 20px; 84 | } 85 | 86 | .social-auth-links { 87 | margin: 10px 0; 88 | } 89 | -------------------------------------------------------------------------------- /src/assets/css/AdminLTE-custom/_mailbox.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Page: Mailbox 3 | * ------------- 4 | */ 5 | .mailbox-messages { 6 | > .table { 7 | margin: 0; 8 | } 9 | } 10 | 11 | .mailbox-controls { 12 | padding: 5px; 13 | &.with-border { 14 | border-bottom: 1px solid $card-border-color; 15 | } 16 | } 17 | 18 | .mailbox-read-info { 19 | border-bottom: 1px solid $card-border-color; 20 | padding: 10px; 21 | h3 { 22 | font-size: 20px; 23 | margin: 0; 24 | } 25 | h5 { 26 | margin: 0; 27 | padding: 5px 0 0 0; 28 | } 29 | } 30 | 31 | .mailbox-read-time { 32 | color: #999; 33 | font-size: 13px; 34 | } 35 | 36 | .mailbox-read-message { 37 | padding: 10px; 38 | } 39 | 40 | .mailbox-attachments { 41 | @extend .list-unstyled; 42 | li { 43 | float: left; 44 | width: 200px; 45 | border: 1px solid #eee; 46 | margin-bottom: 10px; 47 | margin-right: 10px; 48 | } 49 | } 50 | 51 | .mailbox-attachment-name { 52 | font-weight: bold; 53 | color: #666; 54 | } 55 | 56 | .mailbox-attachment-icon, 57 | .mailbox-attachment-info, 58 | .mailbox-attachment-size { 59 | display: block; 60 | } 61 | 62 | .mailbox-attachment-info { 63 | padding: 10px; 64 | background: #f4f4f4; 65 | } 66 | 67 | .mailbox-attachment-size { 68 | color: #999; 69 | font-size: 12px; 70 | } 71 | 72 | .mailbox-attachment-icon { 73 | text-align: center; 74 | font-size: 65px; 75 | color: #666; 76 | padding: 20px 10px; 77 | &.has-img { 78 | padding: 0; 79 | > img { 80 | max-width: 100%; 81 | height: auto; 82 | } 83 | } 84 | } 85 | 86 | .mailbox-attachment-close { 87 | @extend .close; 88 | } 89 | -------------------------------------------------------------------------------- /src/assets/css/AdminLTE-custom/_navs.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Component: Nav 3 | * -------------- 4 | */ 5 | .nav-pills { 6 | .nav-link { 7 | color: $gray-600; 8 | 9 | &:not(.active) { 10 | &:not(.dropdown-toggle):hover { 11 | color: theme-color("primary") 12 | } 13 | } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/assets/css/AdminLTE-custom/_print.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Misc: print 3 | * ----------- 4 | */ 5 | @media print { 6 | //Add to elements that you do not want to show when printing 7 | .no-print { 8 | display: none !important; 9 | } 10 | 11 | //Elements that we want to hide when printing 12 | .main-sidebar, 13 | .main-header, 14 | .content-header { 15 | @extend .no-print; 16 | } 17 | 18 | //This is the only element that should appear, so let's remove the margins 19 | .content-wrapper, 20 | .main-footer { 21 | margin-left: 0 !important; 22 | min-height: 0 !important; 23 | @include translate(0, 0); 24 | } 25 | 26 | .layout-fixed .content-wrapper { 27 | padding-top: 0 !important; 28 | } 29 | 30 | //Invoice printing 31 | .invoice { 32 | width: 100%; 33 | border: 0; 34 | margin: 0; 35 | padding: 0; 36 | } 37 | 38 | .invoice-col { 39 | float: left; 40 | width: 33.3333333%; 41 | } 42 | 43 | //Make sure table content displays properly 44 | .table-responsive { 45 | overflow: auto; 46 | > .table tr th, 47 | > .table tr td { 48 | white-space: normal !important; 49 | } 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /src/assets/css/AdminLTE-custom/_products.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Component: Products List 3 | * ------------------------ 4 | */ 5 | .products-list { 6 | list-style: none; 7 | margin: 0; 8 | padding: 0; 9 | > .item { 10 | @if $enable-rounded { 11 | @include border-radius($border-radius); 12 | } 13 | @include clearfix(); 14 | padding: 10px 0; 15 | background: $white; 16 | } 17 | .product-img { 18 | float: left; 19 | img { 20 | width: 50px; 21 | height: 50px; 22 | } 23 | } 24 | .product-info { 25 | margin-left: 60px; 26 | } 27 | .product-title { 28 | font-weight: 600; 29 | } 30 | .product-description { 31 | display: block; 32 | color: $gray-600; 33 | overflow: hidden; 34 | white-space: nowrap; 35 | text-overflow: ellipsis; 36 | } 37 | } 38 | 39 | .product-list-in-card > .item { 40 | @include border-radius(0); 41 | border-bottom: 1px solid $card-border-color; 42 | &:last-of-type { 43 | border-bottom-width: 0; 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /src/assets/css/AdminLTE-custom/_profile.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Page: Profile 3 | * ------------- 4 | */ 5 | 6 | .profile-user-img { 7 | margin: 0 auto; 8 | width: 100px; 9 | padding: 3px; 10 | border: 3px solid $gray-500; 11 | } 12 | 13 | .profile-username { 14 | font-size: 21px; 15 | margin-top: 5px; 16 | } 17 | 18 | .post { 19 | border-bottom: 1px solid $gray-500; 20 | margin-bottom: 15px; 21 | padding-bottom: 15px; 22 | color: #666; 23 | &:last-of-type { 24 | border-bottom: 0; 25 | margin-bottom: 0; 26 | padding-bottom: 0; 27 | } 28 | .user-block { 29 | margin-bottom: 15px; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /src/assets/css/AdminLTE-custom/_progress-bars.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Component: Progress Bar 3 | * ----------------------- 4 | */ 5 | 6 | //General CSS 7 | .progress { 8 | @include box-shadow(none); 9 | @include border-radius($progress-bar-border-radius); 10 | } 11 | 12 | .progress-group { 13 | @extend .mb-2; 14 | } 15 | 16 | // size variation 17 | .progress-sm { 18 | height: 10px; 19 | } 20 | 21 | .progress-xs { 22 | height: 7px; 23 | } 24 | 25 | .progress-xxs { 26 | height: 3px; 27 | } 28 | 29 | // Vertical bars 30 | .progress.vertical { 31 | position: relative; 32 | width: 30px; 33 | height: 200px; 34 | display: inline-block; 35 | margin-right: 10px; 36 | > .progress-bar { 37 | width: 100%; 38 | position: absolute; 39 | bottom: 0; 40 | } 41 | 42 | //Sizes 43 | &.sm, 44 | &.progress-sm { 45 | width: 20px; 46 | } 47 | 48 | &.xs, 49 | &.progress-xs { 50 | width: 10px; 51 | } 52 | &.xxs, 53 | &.progress-xxs { 54 | width: 3px; 55 | } 56 | } 57 | 58 | // Remove margins from progress bars when put in a table 59 | .table { 60 | tr > td .progress { 61 | margin: 0; 62 | } 63 | } 64 | -------------------------------------------------------------------------------- /src/assets/css/AdminLTE-custom/_small-box.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Component: Small Box 3 | * -------------------- 4 | */ 5 | 6 | .small-box { 7 | @include border-radius($border-radius); 8 | @include box-shadow($card-shadow); 9 | @extend .mb-3; 10 | 11 | position: relative; 12 | display: block; 13 | margin-bottom: 20px; 14 | 15 | // content wrapper 16 | > .inner { 17 | padding: 10px; 18 | } 19 | 20 | > .small-box-footer { 21 | position: relative; 22 | text-align: center; 23 | padding: 3px 0; 24 | color: $white; 25 | color: rgba(255, 255, 255, 0.8); 26 | display: block; 27 | z-index: 10; 28 | background: rgba(0, 0, 0, 0.1); 29 | text-decoration: none; 30 | &:hover { 31 | color: $white; 32 | background: rgba(0, 0, 0, 0.15); 33 | } 34 | } 35 | 36 | h3 { 37 | font-size: 38px; 38 | font-weight: bold; 39 | margin: 0 0 10px 0; 40 | white-space: nowrap; 41 | padding: 0; 42 | 43 | } 44 | 45 | p { 46 | font-size: 15px; 47 | > small { 48 | display: block; 49 | color: #f9f9f9; 50 | font-size: 13px; 51 | margin-top: 5px; 52 | } 53 | } 54 | 55 | h3, p { 56 | z-index: 5; 57 | } 58 | 59 | // the icon 60 | .icon { 61 | transition: all $transition-speed linear; 62 | position: absolute; 63 | top: -10px; 64 | right: 10px; 65 | z-index: 0; 66 | font-size: 90px; 67 | color: rgba(0, 0, 0, 0.15); 68 | } 69 | 70 | // Small box hover state 71 | &:hover { 72 | text-decoration: none; 73 | // Animate icons on small box hover 74 | .icon { 75 | font-size: 95px; 76 | } 77 | } 78 | } 79 | 80 | @include media-breakpoint-down(sm) { 81 | // No need for icons on very small devices 82 | .small-box { 83 | text-align: center; 84 | .icon { 85 | display: none; 86 | } 87 | p { 88 | font-size: 12px; 89 | } 90 | } 91 | } 92 | -------------------------------------------------------------------------------- /src/assets/css/AdminLTE-custom/_social-widgets.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Component: Social Widgets 3 | * ------------------------- 4 | */ 5 | //General widget style 6 | .card-widget { 7 | border: none; 8 | position: relative; 9 | } 10 | 11 | //User Widget Style 1 12 | .widget-user { 13 | //User name container 14 | .widget-user-header { 15 | padding: 1rem; 16 | height: 120px; 17 | @if $enable-rounded { 18 | @include border-top-radius($border-radius); 19 | } 20 | } 21 | //User name 22 | .widget-user-username { 23 | margin-top: 0; 24 | margin-bottom: 5px; 25 | font-size: 25px; 26 | font-weight: 300; 27 | text-shadow: 0 1px 1px rgba(0, 0, 0, 0.2); 28 | } 29 | //User single line description 30 | .widget-user-desc { 31 | margin-top: 0; 32 | } 33 | //User image container 34 | .widget-user-image { 35 | position: absolute; 36 | top: 65px; 37 | left: 50%; 38 | margin-left: -45px; 39 | > img { 40 | width: 90px; 41 | height: auto; 42 | border: 3px solid $white; 43 | } 44 | } 45 | 46 | .card-footer { 47 | padding-top: 40px; 48 | } 49 | } 50 | 51 | //User Widget Style 2 52 | .widget-user-2 { 53 | //User name container 54 | .widget-user-header { 55 | padding: 1rem; 56 | @include border-top-radius($border-radius); 57 | } 58 | //User name 59 | .widget-user-username { 60 | margin-top: 5px; 61 | margin-bottom: 5px; 62 | font-size: 25px; 63 | font-weight: 300; 64 | } 65 | //User single line description 66 | .widget-user-desc { 67 | margin-top: 0; 68 | } 69 | .widget-user-username, 70 | .widget-user-desc { 71 | margin-left: 75px; 72 | } 73 | //User image container 74 | .widget-user-image { 75 | > img { 76 | width: 65px; 77 | height: auto; 78 | float: left; 79 | } 80 | } 81 | } 82 | -------------------------------------------------------------------------------- /src/assets/css/AdminLTE-custom/_table.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Component: Table 3 | * ---------------- 4 | */ 5 | 6 | .table.no-border { 7 | &, 8 | td, 9 | th { 10 | border: 0; 11 | } 12 | } 13 | 14 | // .text-center in tables 15 | .table.text-center { 16 | &, td, th { 17 | text-align: center; 18 | } 19 | } 20 | 21 | .table-valign-middle { 22 | thead > tr > th, 23 | thead > tr > td, 24 | tbody > tr > th, 25 | tbody > tr > td { 26 | vertical-align: middle; 27 | } 28 | } 29 | 30 | .card-body.p-0 .table { 31 | thead > tr > th, 32 | thead > tr > td, 33 | tbody > tr > th, 34 | tbody > tr > td { 35 | &:first-of-type { 36 | @extend .pl-4; 37 | } 38 | &:last-of-type { 39 | @extend .pr-4; 40 | } 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /src/assets/css/AdminLTE-custom/_text.scss: -------------------------------------------------------------------------------- 1 | .text-bold { 2 | &, &.table td, &.table th { 3 | font-weight: 700; 4 | } 5 | } 6 | 7 | .text-sm { 8 | font-size: $font-size-sm; 9 | } 10 | 11 | .text-xs { 12 | font-size: $font-size-base; 13 | } 14 | 15 | .text-lg { 16 | font-size: $font-size-lg; 17 | } 18 | 19 | .text-xl { 20 | font-size: $font-size-xl; 21 | } 22 | -------------------------------------------------------------------------------- /src/assets/css/AdminLTE-custom/_timeline.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Component: Timeline 3 | * ------------------- 4 | */ 5 | 6 | .timeline { 7 | position: relative; 8 | margin: 0 0 30px 0; 9 | padding: 0; 10 | list-style: none; 11 | 12 | // The line 13 | &:before { 14 | content: ''; 15 | position: absolute; 16 | top: 0; 17 | bottom: 0; 18 | width: 4px; 19 | background: #ddd; 20 | left: 31px; 21 | margin: 0; 22 | @include border-radius($border-radius); 23 | } 24 | 25 | > li { 26 | position: relative; 27 | margin-right: 10px; 28 | margin-bottom: 15px; 29 | @include clearfix(); 30 | 31 | // The content 32 | > .timeline-item { 33 | @include box-shadow($card-shadow); 34 | @include border-radius($border-radius); 35 | margin-top: 0; 36 | background: $white; 37 | color: #444; 38 | margin-left: 60px; 39 | margin-right: 15px; 40 | padding: 0; 41 | position: relative; 42 | 43 | // The time and header 44 | > .time { 45 | color: #999; 46 | float: right; 47 | padding: 10px; 48 | font-size: 12px; 49 | } 50 | > .timeline-header { 51 | margin: 0; 52 | color: #555; 53 | border-bottom: 1px solid $card-border-color; 54 | padding: 10px; 55 | font-size: 16px; 56 | line-height: 1.1; 57 | > a { 58 | font-weight: 600; 59 | } 60 | } 61 | // Item body and footer 62 | > .timeline-body, > .timeline-footer { 63 | padding: 10px; 64 | } 65 | 66 | } 67 | 68 | // The icons 69 | > .fa, 70 | > .glyphicon, 71 | > .ion { 72 | width: 30px; 73 | height: 30px; 74 | font-size: 15px; 75 | line-height: 30px; 76 | position: absolute; 77 | background: $gray-500; 78 | border-radius: 50%; 79 | text-align: center; 80 | left: 18px; 81 | top: 0; 82 | } 83 | } 84 | 85 | // Time label 86 | > .time-label { 87 | > span { 88 | font-weight: 600; 89 | padding: 5px; 90 | display: inline-block; 91 | background-color: $white; 92 | 93 | @include border-radius(4px); 94 | } 95 | } 96 | } 97 | 98 | .timeline-inverse { 99 | > li { 100 | > .timeline-item { 101 | background: $gray-100; 102 | border: 1px solid #ddd; 103 | @include box-shadow(none); 104 | > .timeline-header { 105 | border-bottom-color: #ddd; 106 | } 107 | } 108 | } 109 | } 110 | -------------------------------------------------------------------------------- /src/assets/css/AdminLTE-custom/_users-list.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Component: Users List 3 | * --------------------- 4 | */ 5 | .users-list { 6 | @extend .list-unstyled; 7 | > li { 8 | width: 25%; 9 | float: left; 10 | padding: 10px; 11 | text-align: center; 12 | img { 13 | @include border-radius(50%); 14 | max-width: 100%; 15 | height: auto; 16 | } 17 | > a:hover { 18 | &, 19 | .users-list-name { 20 | color: #999; 21 | } 22 | } 23 | } 24 | } 25 | 26 | .users-list-name, 27 | .users-list-date { 28 | display: block; 29 | } 30 | 31 | .users-list-name { 32 | font-size: $font-size-sm; 33 | color: #444; 34 | overflow: hidden; 35 | white-space: nowrap; 36 | text-overflow: ellipsis; 37 | } 38 | 39 | .users-list-date { 40 | color: #999; 41 | font-size: 12px; 42 | } 43 | -------------------------------------------------------------------------------- /src/assets/css/primeng-theme/nova-light/fonts/open-sans-v15-latin-300.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/damoqiongqiu/OpenWMS-Frontend/a12f709a0d2a77748c718d24ef556e75c7a717b3/src/assets/css/primeng-theme/nova-light/fonts/open-sans-v15-latin-300.eot -------------------------------------------------------------------------------- /src/assets/css/primeng-theme/nova-light/fonts/open-sans-v15-latin-300.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/damoqiongqiu/OpenWMS-Frontend/a12f709a0d2a77748c718d24ef556e75c7a717b3/src/assets/css/primeng-theme/nova-light/fonts/open-sans-v15-latin-300.ttf -------------------------------------------------------------------------------- /src/assets/css/primeng-theme/nova-light/fonts/open-sans-v15-latin-300.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/damoqiongqiu/OpenWMS-Frontend/a12f709a0d2a77748c718d24ef556e75c7a717b3/src/assets/css/primeng-theme/nova-light/fonts/open-sans-v15-latin-300.woff -------------------------------------------------------------------------------- /src/assets/css/primeng-theme/nova-light/fonts/open-sans-v15-latin-300.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/damoqiongqiu/OpenWMS-Frontend/a12f709a0d2a77748c718d24ef556e75c7a717b3/src/assets/css/primeng-theme/nova-light/fonts/open-sans-v15-latin-300.woff2 -------------------------------------------------------------------------------- /src/assets/css/primeng-theme/nova-light/fonts/open-sans-v15-latin-700.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/damoqiongqiu/OpenWMS-Frontend/a12f709a0d2a77748c718d24ef556e75c7a717b3/src/assets/css/primeng-theme/nova-light/fonts/open-sans-v15-latin-700.eot -------------------------------------------------------------------------------- /src/assets/css/primeng-theme/nova-light/fonts/open-sans-v15-latin-700.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/damoqiongqiu/OpenWMS-Frontend/a12f709a0d2a77748c718d24ef556e75c7a717b3/src/assets/css/primeng-theme/nova-light/fonts/open-sans-v15-latin-700.ttf -------------------------------------------------------------------------------- /src/assets/css/primeng-theme/nova-light/fonts/open-sans-v15-latin-700.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/damoqiongqiu/OpenWMS-Frontend/a12f709a0d2a77748c718d24ef556e75c7a717b3/src/assets/css/primeng-theme/nova-light/fonts/open-sans-v15-latin-700.woff -------------------------------------------------------------------------------- /src/assets/css/primeng-theme/nova-light/fonts/open-sans-v15-latin-700.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/damoqiongqiu/OpenWMS-Frontend/a12f709a0d2a77748c718d24ef556e75c7a717b3/src/assets/css/primeng-theme/nova-light/fonts/open-sans-v15-latin-700.woff2 -------------------------------------------------------------------------------- /src/assets/css/primeng-theme/nova-light/fonts/open-sans-v15-latin-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/damoqiongqiu/OpenWMS-Frontend/a12f709a0d2a77748c718d24ef556e75c7a717b3/src/assets/css/primeng-theme/nova-light/fonts/open-sans-v15-latin-regular.eot -------------------------------------------------------------------------------- /src/assets/css/primeng-theme/nova-light/fonts/open-sans-v15-latin-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/damoqiongqiu/OpenWMS-Frontend/a12f709a0d2a77748c718d24ef556e75c7a717b3/src/assets/css/primeng-theme/nova-light/fonts/open-sans-v15-latin-regular.ttf -------------------------------------------------------------------------------- /src/assets/css/primeng-theme/nova-light/fonts/open-sans-v15-latin-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/damoqiongqiu/OpenWMS-Frontend/a12f709a0d2a77748c718d24ef556e75c7a717b3/src/assets/css/primeng-theme/nova-light/fonts/open-sans-v15-latin-regular.woff -------------------------------------------------------------------------------- /src/assets/css/primeng-theme/nova-light/fonts/open-sans-v15-latin-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/damoqiongqiu/OpenWMS-Frontend/a12f709a0d2a77748c718d24ef556e75c7a717b3/src/assets/css/primeng-theme/nova-light/fonts/open-sans-v15-latin-regular.woff2 -------------------------------------------------------------------------------- /src/assets/imgs/0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/damoqiongqiu/OpenWMS-Frontend/a12f709a0d2a77748c718d24ef556e75c7a717b3/src/assets/imgs/0.png -------------------------------------------------------------------------------- /src/assets/imgs/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/damoqiongqiu/OpenWMS-Frontend/a12f709a0d2a77748c718d24ef556e75c7a717b3/src/assets/imgs/4.png -------------------------------------------------------------------------------- /src/assets/imgs/OpenWMS.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/damoqiongqiu/OpenWMS-Frontend/a12f709a0d2a77748c718d24ef556e75c7a717b3/src/assets/imgs/OpenWMS.gif -------------------------------------------------------------------------------- /src/assets/imgs/angular.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 10 | 11 | 12 | 13 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /src/assets/imgs/angular2-small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/damoqiongqiu/OpenWMS-Frontend/a12f709a0d2a77748c718d24ef556e75c7a717b3/src/assets/imgs/angular2-small.png -------------------------------------------------------------------------------- /src/assets/imgs/angular2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/damoqiongqiu/OpenWMS-Frontend/a12f709a0d2a77748c718d24ef556e75c7a717b3/src/assets/imgs/angular2.png -------------------------------------------------------------------------------- /src/assets/imgs/boxed-bg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/damoqiongqiu/OpenWMS-Frontend/a12f709a0d2a77748c718d24ef556e75c7a717b3/src/assets/imgs/boxed-bg.jpg -------------------------------------------------------------------------------- /src/assets/imgs/boxed-bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/damoqiongqiu/OpenWMS-Frontend/a12f709a0d2a77748c718d24ef556e75c7a717b3/src/assets/imgs/boxed-bg.png -------------------------------------------------------------------------------- /src/assets/imgs/default-150x150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/damoqiongqiu/OpenWMS-Frontend/a12f709a0d2a77748c718d24ef556e75c7a717b3/src/assets/imgs/default-150x150.png -------------------------------------------------------------------------------- /src/assets/imgs/dir1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/damoqiongqiu/OpenWMS-Frontend/a12f709a0d2a77748c718d24ef556e75c7a717b3/src/assets/imgs/dir1.png -------------------------------------------------------------------------------- /src/assets/imgs/dir2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/damoqiongqiu/OpenWMS-Frontend/a12f709a0d2a77748c718d24ef556e75c7a717b3/src/assets/imgs/dir2.png -------------------------------------------------------------------------------- /src/assets/imgs/dir3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/damoqiongqiu/OpenWMS-Frontend/a12f709a0d2a77748c718d24ef556e75c7a717b3/src/assets/imgs/dir3.png -------------------------------------------------------------------------------- /src/assets/imgs/icons.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/damoqiongqiu/OpenWMS-Frontend/a12f709a0d2a77748c718d24ef556e75c7a717b3/src/assets/imgs/icons.png -------------------------------------------------------------------------------- /src/assets/imgs/img.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/damoqiongqiu/OpenWMS-Frontend/a12f709a0d2a77748c718d24ef556e75c7a717b3/src/assets/imgs/img.jpg -------------------------------------------------------------------------------- /src/assets/imgs/inventory.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/damoqiongqiu/OpenWMS-Frontend/a12f709a0d2a77748c718d24ef556e75c7a717b3/src/assets/imgs/inventory.png -------------------------------------------------------------------------------- /src/assets/imgs/io.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/damoqiongqiu/OpenWMS-Frontend/a12f709a0d2a77748c718d24ef556e75c7a717b3/src/assets/imgs/io.png -------------------------------------------------------------------------------- /src/assets/imgs/map.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/damoqiongqiu/OpenWMS-Frontend/a12f709a0d2a77748c718d24ef556e75c7a717b3/src/assets/imgs/map.png -------------------------------------------------------------------------------- /src/assets/imgs/mask.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | mask@3x 5 | Created with Sketch. 6 | 7 | 8 | 26 | 27 | -------------------------------------------------------------------------------- /src/assets/imgs/network.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/damoqiongqiu/OpenWMS-Frontend/a12f709a0d2a77748c718d24ef556e75c7a717b3/src/assets/imgs/network.png -------------------------------------------------------------------------------- /src/assets/imgs/nice-fish.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/damoqiongqiu/OpenWMS-Frontend/a12f709a0d2a77748c718d24ef556e75c7a717b3/src/assets/imgs/nice-fish.png -------------------------------------------------------------------------------- /src/assets/imgs/qq-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/damoqiongqiu/OpenWMS-Frontend/a12f709a0d2a77748c718d24ef556e75c7a717b3/src/assets/imgs/qq-1.jpg -------------------------------------------------------------------------------- /src/assets/imgs/user-card-header.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/damoqiongqiu/OpenWMS-Frontend/a12f709a0d2a77748c718d24ef556e75c7a717b3/src/assets/imgs/user-card-header.png -------------------------------------------------------------------------------- /src/assets/imgs/wx-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/damoqiongqiu/OpenWMS-Frontend/a12f709a0d2a77748c718d24ef556e75c7a717b3/src/assets/imgs/wx-1.jpg -------------------------------------------------------------------------------- /src/environments/environment.dev.ts: -------------------------------------------------------------------------------- 1 | // The file contents for the current environment will overwrite these during build. 2 | // The build system defaults to the dev environment which uses `environment.ts`, but if you do 3 | // `ng build --env=prod` then `environment.prod.ts` will be used instead. 4 | // The list of which env maps to which file can be found in `angular-cli.json`. 5 | const baseURL: string = "mock-data/"; 6 | 7 | export const environment = { 8 | production: false, 9 | envName: "dev", 10 | hmr: false, 11 | apiURL: { 12 | categories: baseURL + "categories.json", 13 | customers: baseURL + "customers.json", 14 | inboundDetails: baseURL + "inbound-details.json", 15 | inboundRecords: baseURL + "inbound-records.json", 16 | inventories: baseURL + "inventories.json", 17 | inboundReceipt: baseURL + "inbound-receipt.json", 18 | outReceipt: baseURL + "outbound-receipt.json", 19 | outboundDetail: baseURL + "outbound-detail.json", 20 | outboundRecords: baseURL + "outbound-records.json", 21 | staffs: baseURL + "staffs.json", 22 | vendors: baseURL + "vendors.json", 23 | warehouses: baseURL + "warehouses.json" 24 | } 25 | }; 26 | -------------------------------------------------------------------------------- /src/environments/environment.hmr.ts: -------------------------------------------------------------------------------- 1 | const baseURL: string = "mock-data/"; 2 | 3 | export const environment = { 4 | production: false, 5 | envName: "hmr", 6 | hmr: true, 7 | apiURL: { 8 | categories: baseURL + "categories.json", 9 | customers: baseURL + "customers.json", 10 | inboundDetails: baseURL + "inbound-details.json", 11 | inboundRecords: baseURL + "inbound-records.json", 12 | inventories: baseURL + "inventories.json", 13 | inboundReceipt: baseURL + "inbound-receipt.json", 14 | outReceipt: baseURL + "outbound-receipt.json", 15 | outboundDetail: baseURL + "outbound-detail.json", 16 | outboundRecords: baseURL + "outbound-records.json", 17 | staffs: baseURL + "staffs.json", 18 | vendors: baseURL + "vendors.json", 19 | warehouses: baseURL + "warehouses.json" 20 | } 21 | }; 22 | -------------------------------------------------------------------------------- /src/environments/environment.mock.ts: -------------------------------------------------------------------------------- 1 | const baseURL: string = "http://localhost:3000/"; 2 | 3 | export const environment = { 4 | production: true, 5 | envName: "mock", 6 | hmr: true, 7 | apiURL: { 8 | categories: baseURL + "category/getCategories", 9 | customers: baseURL + "customer/getCustomers", 10 | inboundDetails: baseURL + "inbound/getInboundDetails", 11 | inboundRecords: baseURL + "inbound/getInboundRecords", 12 | inventories: baseURL + "inventory/getInventories", 13 | inboundReceipt: baseURL + "inbound/getInboundReceipt", 14 | outReceipt: baseURL + "outbound/getOutboundReceipt", 15 | outboundDetail: baseURL + "outbound/getOutboundDetail", 16 | outboundRecords: baseURL + "outbound/getOutboundRecords", 17 | staffs: baseURL + "staff/getStaffs", 18 | vendors: baseURL + "vendor/getVendors", 19 | warehouses: baseURL + "warehouse/getWarehouses" 20 | } 21 | }; 22 | -------------------------------------------------------------------------------- /src/environments/environment.prod.ts: -------------------------------------------------------------------------------- 1 | const baseURL: string = 'mock-data/'; 2 | 3 | export const environment = { 4 | production: true, 5 | envName: 'prod', 6 | hmr: false, 7 | apiURL: { 8 | categories: baseURL + 'categories.json', 9 | customers: baseURL + 'customers.json', 10 | inboundDetails: baseURL + 'inbound-details.json', 11 | inboundRecords: baseURL + 'inbound-records.json', 12 | inventories: baseURL + 'inventories.json', 13 | inboundReceipt: baseURL + 'inbound-receipt.json', 14 | outReceipt: baseURL + 'outbound-receipt.json', 15 | outboundDetail: baseURL + 'outbound-detail.json', 16 | outboundRecords: baseURL + 'outbound-records.json', 17 | staffs: baseURL + 'staffs.json', 18 | vendors: baseURL + 'vendors.json', 19 | warehouses: baseURL + 'warehouses.json' 20 | } 21 | }; 22 | -------------------------------------------------------------------------------- /src/favicon-16x16.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/damoqiongqiu/OpenWMS-Frontend/a12f709a0d2a77748c718d24ef556e75c7a717b3/src/favicon-16x16.ico -------------------------------------------------------------------------------- /src/favicon-32x32.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/damoqiongqiu/OpenWMS-Frontend/a12f709a0d2a77748c718d24ef556e75c7a717b3/src/favicon-32x32.ico -------------------------------------------------------------------------------- /src/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/damoqiongqiu/OpenWMS-Frontend/a12f709a0d2a77748c718d24ef556e75c7a717b3/src/favicon.ico -------------------------------------------------------------------------------- /src/hmr.ts: -------------------------------------------------------------------------------- 1 | import { NgModuleRef, ApplicationRef } from "@angular/core"; 2 | import { createNewHosts } from "@angularclass/hmr"; 3 | 4 | export const hmrBootstrap = (module: any, bootstrap: () => Promise>) => { 5 | let ngModule: NgModuleRef; 6 | module.hot.accept(); 7 | bootstrap().then(currentModule => (ngModule = currentModule)); 8 | module.hot.dispose(() => { 9 | const appRef: ApplicationRef = ngModule.injector.get(ApplicationRef); 10 | const elements = appRef.components.map(c => c.location.nativeElement); 11 | const removeOldHosts = createNewHosts(elements); 12 | ngModule.destroy(); 13 | removeOldHosts(); 14 | }); 15 | }; 16 | -------------------------------------------------------------------------------- /src/main.ts: -------------------------------------------------------------------------------- 1 | import { platformBrowserDynamic } from "@angular/platform-browser-dynamic"; 2 | import { enableProdMode } from "@angular/core"; 3 | import { environment } from "./environments/environment.dev"; 4 | import { hmrBootstrap } from "./hmr"; 5 | import { AppModule } from "./app/"; 6 | 7 | (window).environment = environment; 8 | 9 | if (environment.production) { 10 | enableProdMode(); 11 | } 12 | 13 | const bootstrap = () => platformBrowserDynamic().bootstrapModule(AppModule); 14 | 15 | if (environment.hmr) { 16 | if (module["hot"]) { 17 | hmrBootstrap(module, bootstrap); 18 | } else { 19 | console.error("Ammm.. HMR is not enabled for webpack"); 20 | } 21 | } else { 22 | bootstrap(); 23 | } 24 | -------------------------------------------------------------------------------- /src/mock-data/categories.json: -------------------------------------------------------------------------------- 1 | [ 2 | { "id": "-1", "index": 1, "name": "消费电子产品", "creator": "大漠穷秋", "createTime":"2018-04-26", "remark": "商品的品类真不少" }, 3 | { "id": "-1", "index": 2, "name": "服装鞋帽", "creator": "大漠穷秋", "createTime":"2018-04-26", "remark": "商品的品类真不少" }, 4 | { "id": "-1", "index": 3, "name": "美妆个护", "creator": "大漠穷秋", "createTime":"2018-04-26", "remark": "商品的品类真不少" }, 5 | { "id": "-1", "index": 4, "name": "图书音像", "creator": "大漠穷秋", "createTime":"2018-04-26", "remark": "商品的品类真不少" }, 6 | { "id": "-1", "index": 5, "name": "医药保健", "creator": "大漠穷秋", "createTime":"2018-04-26", "remark": "商品的品类真不少" }, 7 | { "id": "-1", "index": 6, "name": "房产汽车", "creator": "大漠穷秋", "createTime":"2018-04-26", "remark": "商品的品类真不少" }, 8 | { "id": "-1", "index": 7, "name": "保险理财", "creator": "大漠穷秋", "createTime":"2018-04-26", "remark": "商品的品类真不少" }, 9 | { "id": "-1", "index": 8, "name": "运动户外", "creator": "大漠穷秋", "createTime":"2018-04-26", "remark": "商品的品类真不少" }, 10 | { "id": "-1", "index": 9, "name": "食品", "creator": "大漠穷秋", "createTime":"2018-04-26", "remark": "商品的品类真不少" }, 11 | { "id": "-1", "index": 10, "name": "酒类", "creator": "大漠穷秋", "createTime":"2018-04-26", "remark": "商品的品类真不少" } 12 | ] -------------------------------------------------------------------------------- /src/mock-data/customers.json: -------------------------------------------------------------------------------- 1 | [ 2 | { "id": "-1", "customerName": "Agnès B. ", "addr": "北京市朝阳区金融街购物中心", "contact": "倪建伟", "gender": "男", "duty": "销售总监", "cellphone": "12345789000" }, 3 | { "id": "-1", "customerName": "Agnona", "addr": "北京市朝阳区金融街购物中心", "contact": "倪建伟", "gender": "男", "duty": "销售总监", "cellphone": "12345789000" }, 4 | { "id": "-1", "customerName": "Bang&Qlufsen ", "addr": "北京市朝阳区金融街购物中心", "contact": "倪建伟", "gender": "男", "duty": "销售总监", "cellphone": "12345789000" }, 5 | { "id": "-1", "customerName": "Cartier", "addr": "北京市朝阳区金融街购物中心", "contact": "倪建伟", "gender": "男", "duty": "销售总监", "cellphone": "12345789000" }, 6 | { "id": "-1", "customerName": "Cerruti 1881", "addr": "北京市朝阳区金融街购物中心", "contact": "倪建伟", "gender": "男", "duty": "销售总监", "cellphone": "12345789000" }, 7 | { "id": "-1", "customerName": "Chanel Fine Jewelry", "addr": "北京市朝阳区金融街购物中心", "contact": "倪建伟", "gender": "男", "duty": "销售总监", "cellphone": "12345789000" }, 8 | { "id": "-1", "customerName": "Christian Louboutin", "addr": "北京市朝阳区金融街购物中心", "contact": "倪建伟", "gender": "男", "duty": "销售总监", "cellphone": "12345789000" }, 9 | { "id": "-1", "customerName": "Comme des GarÇons", "addr": "北京市朝阳区金融街购物中心", "contact": "倪建伟", "gender": "男", "duty": "销售总监", "cellphone": "12345789000" }, 10 | { "id": "-1", "customerName": "Corneliani", "addr": "北京市朝阳区金融街购物中心", "contact": "倪建伟", "gender": "男", "duty": "销售总监", "cellphone": "12345789000" }, 11 | { "id": "-1", "customerName": "Corneliani", "addr": "北京市朝阳区金融街购物中心", "contact": "倪建伟", "gender": "男", "duty": "销售总监", "cellphone": "12345789000" } 12 | ] -------------------------------------------------------------------------------- /src/mock-data/inbound-details.json: -------------------------------------------------------------------------------- 1 | { 2 | "title": "京东南京一号库-入库单", 3 | "receiptNo": "IN-1-2222222", 4 | "waybillNo": "1111-1111", 5 | "inboundTime": "2018-04-26", 6 | "items": [ 7 | { "index": "1", "vendor": "Apple", "itemName": "iPhone-X", "spec": "全面屏 长宽高 重量", "model": "A1661", "producerLocation": "富士康深圳南山区工厂", "num": "1000", "unit": "个", "price": "3000元", "sum": "30万元", "warehouse": "京东南京一号仓", "storeCell": "A1001" }, 8 | { "index": "2", "vendor": "Apple", "itemName": "iPhone-X", "spec": "全面屏 长宽高 重量", "model": "A1661", "producerLocation": "富士康深圳南山区工厂", "num": "1000", "unit": "个", "price": "3000元", "sum": "30万元", "warehouse": "京东南京一号仓", "storeCell": "A1001" }, 9 | { "index": "3", "vendor": "Apple", "itemName": "iPhone-X", "spec": "全面屏 长宽高 重量", "model": "A1661", "producerLocation": "富士康深圳南山区工厂", "num": "1000", "unit": "个", "price": "3000元", "sum": "30万元", "warehouse": "京东南京一号仓", "storeCell": "A1001" }, 10 | { "index": "4", "vendor": "Apple", "itemName": "iPhone-X", "spec": "全面屏 长宽高 重量", "model": "A1661", "producerLocation": "富士康深圳南山区工厂", "num": "1000", "unit": "个", "price": "3000元", "sum": "30万元", "warehouse": "京东南京一号仓", "storeCell": "A1001" }, 11 | { "index": "5", "vendor": "Apple", "itemName": "iPhone-X", "spec": "全面屏 长宽高 重量", "model": "A1661", "producerLocation": "富士康深圳南山区工厂", "num": "1000", "unit": "个", "price": "3000元", "sum": "30万元", "warehouse": "京东南京一号仓", "storeCell": "A1001" }, 12 | { "index": "6", "vendor": "Apple", "itemName": "iPhone-X", "spec": "全面屏 长宽高 重量", "model": "A1661", "producerLocation": "富士康深圳南山区工厂", "num": "1000", "unit": "个", "price": "3000元", "sum": "30万元", "warehouse": "京东南京一号仓", "storeCell": "A1001" }, 13 | { "index": "7", "vendor": "Apple", "itemName": "iPhone-X", "spec": "全面屏 长宽高 重量", "model": "A1661", "producerLocation": "富士康深圳南山区工厂", "num": "1000", "unit": "个", "price": "3000元", "sum": "30万元", "warehouse": "京东南京一号仓", "storeCell": "A1001" }, 14 | { "index": "8", "vendor": "Apple", "itemName": "iPhone-X", "spec": "全面屏 长宽高 重量", "model": "A1661", "producerLocation": "富士康深圳南山区工厂", "num": "1000", "unit": "个", "price": "3000元", "sum": "30万元", "warehouse": "京东南京一号仓", "storeCell": "A1001" }, 15 | { "index": "9", "vendor": "Apple", "itemName": "iPhone-X", "spec": "全面屏 长宽高 重量", "model": "A1661", "producerLocation": "富士康深圳南山区工厂", "num": "1000", "unit": "个", "price": "3000元", "sum": "30万元", "warehouse": "京东南京一号仓", "storeCell": "A1001" }, 16 | { "index": "10", "vendor": "Apple", "itemName": "iPhone-X", "spec": "全面屏 长宽高 重量", "model": "A1661", "producerLocation": "富士康深圳南山区工厂", "num": "1000", "unit": "个", "price": "3000元", "sum": "30万元", "warehouse": "京东南京一号仓", "storeCell": "A1001" } 17 | ], 18 | "totalNum": "300万元", 19 | "handlerName": "大漠穷秋", 20 | "acceptor": "大漠穷秋", 21 | "deliveryman": "大漠穷秋" 22 | } -------------------------------------------------------------------------------- /src/mock-data/inbound-receipt.json: -------------------------------------------------------------------------------- 1 | { 2 | "title": "京东南京一号库-入库单", 3 | "receiptNo": "IN-1-2222222", 4 | "waybillNo": "1111-1111", 5 | "inboundTime": "2018-04-26", 6 | "items":[], 7 | "totalNum": "300万元", 8 | "handlerName": "大漠穷秋", 9 | "acceptor": "大漠穷秋", 10 | "deliveryman": "大漠穷秋" 11 | } 12 | -------------------------------------------------------------------------------- /src/mock-data/inbound-records.json: -------------------------------------------------------------------------------- 1 | [ 2 | { "index": 1, "id": "-1", "warehouseName": "京东南京一号库", "receiptNo": "IN-1-222222", "waybillNo": "201801211319", "enterDate": "2018-01-14" }, 3 | { "index": 2, "id": "-1", "warehouseName": "京东南京一号库", "receiptNo": "IN-1-222222", "waybillNo": "201801211319", "enterDate": "2018-01-14" }, 4 | { "index": 3, "id": "-1", "warehouseName": "京东南京一号库", "receiptNo": "IN-1-222222", "waybillNo": "201801211319", "enterDate": "2018-01-14" }, 5 | { "index": 4, "id": "-1", "warehouseName": "京东南京一号库", "receiptNo": "IN-1-222222", "waybillNo": "201801211319", "enterDate": "2018-01-14" }, 6 | { "index": 5, "id": "-1", "warehouseName": "京东南京一号库", "receiptNo": "IN-1-222222", "waybillNo": "201801211319", "enterDate": "2018-01-14" }, 7 | { "index": 6, "id": "-1", "warehouseName": "京东南京一号库", "receiptNo": "IN-1-222222", "waybillNo": "201801211319", "enterDate": "2018-01-14" }, 8 | { "index": 7, "id": "-1", "warehouseName": "京东南京一号库", "receiptNo": "IN-1-222222", "waybillNo": "201801211319", "enterDate": "2018-01-14" }, 9 | { "index": 8, "id": "-1", "warehouseName": "京东南京一号库", "receiptNo": "IN-1-222222", "waybillNo": "201801211319", "enterDate": "2018-01-14" }, 10 | { "index": 8, "id": "-1", "warehouseName": "京东南京一号库", "receiptNo": "IN-1-222222", "waybillNo": "201801211319", "enterDate": "2018-01-14" }, 11 | { "index": 10, "id": "-1", "warehouseName": "京东南京一号库", "receiptNo": "IN-1-222222", "waybillNo": "201801211319", "enterDate": "2018-01-14" } 12 | ] -------------------------------------------------------------------------------- /src/mock-data/inventories.json: -------------------------------------------------------------------------------- 1 | [ 2 | { "index": 1, "warehouseName": "京东南京一号库", "category": "消费电子产品", "cellNo": "A1001、A1002", "serialNum": "1-222222", "itemName": "iPhone-X", "itemUnit": "个", "spec": "商品规格", "costPrice": "2000","total":"20万元", "bookInventory": "1000", "realInventory": "999", "diffInventory": "-1" }, 3 | { "index": 2, "warehouseName": "京东南京二号库", "category": "消费电子产品", "cellNo": "A1001、A1002", "serialNum": "1-222222", "itemName": "iPad", "itemUnit": "个", "spec": "商品规格", "costPrice": "1000","total":"20万元", "bookInventory": "1000", "realInventory": "999", "diffInventory": "-1" }, 4 | { "index": 3, "warehouseName": "京东南京三号库", "category": "消费电子产品", "cellNo": "A1001、A1002", "serialNum": "1-222222", "itemName": "iPod", "itemUnit": "个", "spec": "商品规格", "costPrice": "1000","total":"20万元", "bookInventory": "1000", "realInventory": "999", "diffInventory": "-1" }, 5 | { "index": 4, "warehouseName": "京东南京四号库", "category": "消费电子产品", "cellNo": "A1001、A1002", "serialNum": "1-222222", "itemName": "Apple Watch", "itemUnit": "个", "spec": "商品规格", "costPrice": "7000","total":"20万元", "bookInventory": "1000", "realInventory": "999", "diffInventory": "-1" }, 6 | { "index": 5, "warehouseName": "京东南京五号库", "category": "消费电子产品", "cellNo": "A1001、A1002", "serialNum": "1-222222", "itemName": "Mac", "itemUnit": "个", "spec": "商品规格", "costPrice": "2000","total":"20万元", "bookInventory": "1000", "realInventory": "999", "diffInventory": "-1" }, 7 | { "index": 6, "warehouseName": "京东上海一号库", "category": "消费电子产品", "cellNo": "A1001、A1002", "serialNum": "1-222222", "itemName": "Mac Pro", "itemUnit": "台", "spec": "商品规格", "costPrice": "5000","total":"20万元", "bookInventory": "1000", "realInventory": "999", "diffInventory": "-1" }, 8 | { "index": 7, "warehouseName": "京东上海二号库", "category": "消费电子产品", "cellNo": "A1001、A1002", "serialNum": "1-222222", "itemName": "Mac Pro", "itemUnit": "台", "spec": "商品规格", "costPrice": "5000","total":"20万元", "bookInventory": "1000", "realInventory": "999", "diffInventory": "-1" }, 9 | { "index": 8, "warehouseName": "京东上海三号库", "category": "消费电子产品", "cellNo": "A1001、A1002", "serialNum": "1-222222", "itemName": "Mac Pro", "itemUnit": "台", "spec": "商品规格", "costPrice": "5000","total":"20万元", "bookInventory": "1000", "realInventory": "999", "diffInventory": "-1" }, 10 | { "index": 9, "warehouseName": "京东上海四号库", "category": "消费电子产品", "cellNo": "A1001、A1002", "serialNum": "1-222222", "itemName": "Mac Pro", "itemUnit": "台", "spec": "商品规格", "costPrice": "5000","total":"20万元", "bookInventory": "1000", "realInventory": "999", "diffInventory": "-1" }, 11 | { "index": 10, "warehouseName": "京东上海五号库", "category": "消费电子产品", "cellNo": "A1001、A1002", "serialNum": "1-222222", "itemName": "Mac Pro", "itemUnit": "台", "spec": "商品规格", "costPrice": "5000","total":"20万元", "bookInventory": "1000", "realInventory": "999", "diffInventory": "-1" } 12 | ] -------------------------------------------------------------------------------- /src/mock-data/outbound-detail.json: -------------------------------------------------------------------------------- 1 | { 2 | "title": "京东南京一号库-出库单", 3 | "warehouseName": "京东南京一号库", 4 | "receiptNo": "OUT-1-2222222", 5 | "waybillNo": "1111-1111", 6 | "outboundTime": "2018-04-26", 7 | "items": [ 8 | { "index": "1", "receiver": "二号库", "itemName": "iPhone-X", "spec": "全面屏 长宽高 重量", "model": "A1661", "producerLocation": "富士康深圳南山区工厂", "num": "1000", "unit": "个", "price": "3000元", "sum": "30万元", "warehouse": "京东南京一号仓", "storeCell": "A1001" }, 9 | { "index": "2", "receiver": "二号库", "itemName": "iPhone-X", "spec": "全面屏 长宽高 重量", "model": "A1661", "producerLocation": "富士康深圳南山区工厂", "num": "1000", "unit": "个", "price": "3000元", "sum": "30万元", "warehouse": "京东南京一号仓", "storeCell": "A1001" }, 10 | { "index": "3", "receiver": "二号库", "itemName": "iPhone-X", "spec": "全面屏 长宽高 重量", "model": "A1661", "producerLocation": "富士康深圳南山区工厂", "num": "1000", "unit": "个", "price": "3000元", "sum": "30万元", "warehouse": "京东南京一号仓", "storeCell": "A1001" }, 11 | { "index": "4", "receiver": "二号库", "itemName": "iPhone-X", "spec": "全面屏 长宽高 重量", "model": "A1661", "producerLocation": "富士康深圳南山区工厂", "num": "1000", "unit": "个", "price": "3000元", "sum": "30万元", "warehouse": "京东南京一号仓", "storeCell": "A1001" }, 12 | { "index": "5", "receiver": "二号库", "itemName": "iPhone-X", "spec": "全面屏 长宽高 重量", "model": "A1661", "producerLocation": "富士康深圳南山区工厂", "num": "1000", "unit": "个", "price": "3000元", "sum": "30万元", "warehouse": "京东南京一号仓", "storeCell": "A1001" }, 13 | { "index": "6", "receiver": "二号库", "itemName": "iPhone-X", "spec": "全面屏 长宽高 重量", "model": "A1661", "producerLocation": "富士康深圳南山区工厂", "num": "1000", "unit": "个", "price": "3000元", "sum": "30万元", "warehouse": "京东南京一号仓", "storeCell": "A1001" }, 14 | { "index": "7", "receiver": "二号库", "itemName": "iPhone-X", "spec": "全面屏 长宽高 重量", "model": "A1661", "producerLocation": "富士康深圳南山区工厂", "num": "1000", "unit": "个", "price": "3000元", "sum": "30万元", "warehouse": "京东南京一号仓", "storeCell": "A1001" }, 15 | { "index": "8", "receiver": "二号库", "itemName": "iPhone-X", "spec": "全面屏 长宽高 重量", "model": "A1661", "producerLocation": "富士康深圳南山区工厂", "num": "1000", "unit": "个", "price": "3000元", "sum": "30万元", "warehouse": "京东南京一号仓", "storeCell": "A1001" }, 16 | { "index": "9", "receiver": "二号库", "itemName": "iPhone-X", "spec": "全面屏 长宽高 重量", "model": "A1661", "producerLocation": "富士康深圳南山区工厂", "num": "1000", "unit": "个", "price": "3000元", "sum": "30万元", "warehouse": "京东南京一号仓", "storeCell": "A1001" }, 17 | { "index": "10", "receiver": "二号库", "itemName": "iPhone-X", "spec": "全面屏 长宽高 重量", "model": "A1661", "producerLocation": "富士康深圳南山区工厂", "num": "1000", "unit": "个", "price": "3000元", "sum": "30万元", "warehouse": "京东南京一号仓", "storeCell": "A1001" } 18 | ], 19 | "totalNum":"300万元", 20 | "handlerName": "大漠穷秋", 21 | "acceptor": "大漠穷秋", 22 | "deliveryman": "大漠穷秋" 23 | } -------------------------------------------------------------------------------- /src/mock-data/outbound-receipt.json: -------------------------------------------------------------------------------- 1 | { 2 | "title": "京东南京一号库-出库单", 3 | "warehouseName": "京东南京一号库", 4 | "receiptNo": "OUT-1-2222222", 5 | "waybillNo": "1111-1111", 6 | "outboundTime": "2018-04-26", 7 | "items": [], 8 | "totalNum": "300万元", 9 | "handlerName": "大漠穷秋", 10 | "acceptor": "大漠穷秋", 11 | "deliveryman": "大漠穷秋" 12 | } 13 | -------------------------------------------------------------------------------- /src/mock-data/outbound-records.json: -------------------------------------------------------------------------------- 1 | [ 2 | { "index": 1, "id": "-1", "warehouseName": "京东南京一号库", "receiptNo": "IN-1-222222", "waybillNo": "201801211319", "enterDate": "2018-01-14", "receiver": "二号库" }, 3 | { "index": 2, "id": "-1", "warehouseName": "京东南京一号库", "receiptNo": "IN-1-222222", "waybillNo": "201801211319", "enterDate": "2018-01-14", "receiver": "二号库" }, 4 | { "index": 3, "id": "-1", "warehouseName": "京东南京一号库", "receiptNo": "IN-1-222222", "waybillNo": "201801211319", "enterDate": "2018-01-14", "receiver": "二号库" }, 5 | { "index": 4, "id": "-1", "warehouseName": "京东南京一号库", "receiptNo": "IN-1-222222", "waybillNo": "201801211319", "enterDate": "2018-01-14", "receiver": "二号库" }, 6 | { "index": 5, "id": "-1", "warehouseName": "京东南京一号库", "receiptNo": "IN-1-222222", "waybillNo": "201801211319", "enterDate": "2018-01-14", "receiver": "二号库" }, 7 | { "index": 6, "id": "-1", "warehouseName": "京东南京一号库", "receiptNo": "IN-1-222222", "waybillNo": "201801211319", "enterDate": "2018-01-14", "receiver": "二号库" }, 8 | { "index": 7, "id": "-1", "warehouseName": "京东南京一号库", "receiptNo": "IN-1-222222", "waybillNo": "201801211319", "enterDate": "2018-01-14", "receiver": "二号库" }, 9 | { "index": 8, "id": "-1", "warehouseName": "京东南京一号库", "receiptNo": "IN-1-222222", "waybillNo": "201801211319", "enterDate": "2018-01-14", "receiver": "二号库" }, 10 | { "index": 9, "id": "-1", "warehouseName": "京东南京一号库", "receiptNo": "IN-1-222222", "waybillNo": "201801211319", "enterDate": "2018-01-14", "receiver": "二号库" }, 11 | { "index": 10, "id": "-1", "warehouseName": "京东南京一号库", "receiptNo": "IN-1-222222", "waybillNo": "201801211319", "enterDate": "2018-01-14", "receiver": "二号库" } 12 | ] -------------------------------------------------------------------------------- /src/mock-data/staffs.json: -------------------------------------------------------------------------------- 1 | [ 2 | { "id": "-1", "index":1,"staffCode": "9527", "staffName": "大漠穷秋", "gender": "男", "cellphone": "12345678900", "QQ": "123456789", "email": "damoqiongqiu@126.com", "duty": "销售总监", "remark": "我的编号是9527,就问你六不六?" }, 3 | { "id": "-1", "index":2,"staffCode": "9527", "staffName": "大漠穷秋", "gender": "男", "cellphone": "12345678900", "QQ": "123456789", "email": "damoqiongqiu@126.com", "duty": "销售总监", "remark": "我的编号是9527,就问你六不六?" }, 4 | { "id": "-1", "index":3,"staffCode": "9527", "staffName": "大漠穷秋", "gender": "男", "cellphone": "12345678900", "QQ": "123456789", "email": "damoqiongqiu@126.com", "duty": "销售总监", "remark": "我的编号是9527,就问你六不六?" }, 5 | { "id": "-1", "index":4,"staffCode": "9527", "staffName": "大漠穷秋", "gender": "男", "cellphone": "12345678900", "QQ": "123456789", "email": "damoqiongqiu@126.com", "duty": "销售总监", "remark": "我的编号是9527,就问你六不六?" }, 6 | { "id": "-1", "index":5,"staffCode": "9527", "staffName": "大漠穷秋", "gender": "男", "cellphone": "12345678900", "QQ": "123456789", "email": "damoqiongqiu@126.com", "duty": "销售总监", "remark": "我的编号是9527,就问你六不六?" }, 7 | { "id": "-1", "index":6,"staffCode": "9527", "staffName": "大漠穷秋", "gender": "男", "cellphone": "12345678900", "QQ": "123456789", "email": "damoqiongqiu@126.com", "duty": "销售总监", "remark": "我的编号是9527,就问你六不六?" }, 8 | { "id": "-1", "index":7,"staffCode": "9527", "staffName": "大漠穷秋", "gender": "男", "cellphone": "12345678900", "QQ": "123456789", "email": "damoqiongqiu@126.com", "duty": "销售总监", "remark": "我的编号是9527,就问你六不六?" }, 9 | { "id": "-1", "index":8,"staffCode": "9527", "staffName": "大漠穷秋", "gender": "男", "cellphone": "12345678900", "QQ": "123456789", "email": "damoqiongqiu@126.com", "duty": "销售总监", "remark": "我的编号是9527,就问你六不六?" }, 10 | { "id": "-1", "index":9,"staffCode": "9527", "staffName": "大漠穷秋", "gender": "男", "cellphone": "12345678900", "QQ": "123456789", "email": "damoqiongqiu@126.com", "duty": "销售总监", "remark": "我的编号是9527,就问你六不六?" }, 11 | { "id": "-1", "index":10,"staffCode": "9527", "staffName": "大漠穷秋", "gender": "男", "cellphone": "12345678900", "QQ": "123456789", "email": "damoqiongqiu@126.com", "duty": "销售总监", "remark": "我的编号是9527,就问你六不六?" } 12 | ] -------------------------------------------------------------------------------- /src/mock-data/warehouses.json: -------------------------------------------------------------------------------- 1 | [ 2 | { "id": "-1", "name": "全部仓库", "label": "全部仓库", "value": "-1", "managerName": "1号负责人", "cellphone": "12345678900", "telephone": "123456789", "warehouseAddress": "南京市江宁镇", "remarks": "1号仓是京东南京最大的仓库" }, 3 | { "id": "-1", "name": "京东南京一号仓", "label": "京东南京一号仓", "value": "-1", "managerName": "1号负责人", "cellphone": "12345678900", "telephone": "123456789", "warehouseAddress": "南京市江宁镇", "remarks": "1号仓是京东南京最大的仓库" }, 4 | { "id": "-1", "name": "京东南京二号仓", "label": "京东南京二号仓", "value": "-1", "managerName": "1号负责人", "cellphone": "12345678900", "telephone": "123456789", "warehouseAddress": "南京市江宁镇", "remarks": "1号仓是京东南京最大的仓库" }, 5 | { "id": "-1", "name": "京东上海一号仓", "label": "京东南京三号仓", "value": "-1", "managerName": "1号负责人", "cellphone": "12345678900", "telephone": "123456789", "warehouseAddress": "南京市江宁镇", "remarks": "1号仓是京东南京最大的仓库" }, 6 | { "id": "-1", "name": "京东上海二号仓", "label": "京东南京四号仓", "value": "-1", "managerName": "1号负责人", "cellphone": "12345678900", "telephone": "123456789", "warehouseAddress": "南京市江宁镇", "remarks": "1号仓是京东南京最大的仓库" }, 7 | { "id": "-1", "name": "京东上海三号仓", "label": "京东南京五号仓", "value": "-1", "managerName": "1号负责人", "cellphone": "12345678900", "telephone": "123456789", "warehouseAddress": "南京市江宁镇", "remarks": "1号仓是京东南京最大的仓库" } 8 | ] -------------------------------------------------------------------------------- /src/polyfills.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * This file includes polyfills needed by Angular and is loaded before the app. 3 | * You can add your own extra polyfills to this file. 4 | * 5 | * This file is divided into 2 sections: 6 | * 1. Browser polyfills. These are applied before loading ZoneJS and are sorted by browsers. 7 | * 2. Application imports. Files imported after ZoneJS that should be loaded before your main 8 | * file. 9 | * 10 | * The current setup is for so-called "evergreen" browsers; the last versions of browsers that 11 | * automatically update themselves. This includes Safari >= 10, Chrome >= 55 (including Opera), 12 | * Edge >= 13 on the desktop, and iOS 10 and Chrome on mobile. 13 | * 14 | * Learn more in https://angular.io/docs/ts/latest/guide/browser-support.html 15 | */ 16 | 17 | /*************************************************************************************************** 18 | * BROWSER POLYFILLS 19 | */ 20 | 21 | /** IE9, IE10 and IE11 requires all of the following polyfills. **/ 22 | // import 'core-js/es6/symbol'; 23 | // import 'core-js/es6/object'; 24 | // import 'core-js/es6/function'; 25 | // import 'core-js/es6/parse-int'; 26 | // import 'core-js/es6/parse-float'; 27 | // import 'core-js/es6/number'; 28 | // import 'core-js/es6/math'; 29 | // import 'core-js/es6/string'; 30 | // import 'core-js/es6/date'; 31 | // import 'core-js/es6/array'; 32 | // import 'core-js/es6/regexp'; 33 | // import 'core-js/es6/map'; 34 | // import 'core-js/es6/set'; 35 | 36 | /** IE10 and IE11 requires the following for NgClass support on SVG elements */ 37 | // import 'classlist.js'; // Run `npm install --save classlist.js`. 38 | 39 | /** IE10 and IE11 requires the following to support `@angular/animation`. */ 40 | // import 'web-animations-js'; // Run `npm install --save web-animations-js`. 41 | 42 | 43 | /** Evergreen browsers require these. **/ 44 | import 'core-js/es6/reflect'; 45 | import 'core-js/es7/reflect'; 46 | 47 | 48 | /** ALL Firefox browsers require the following to support `@angular/animation`. **/ 49 | // import 'web-animations-js'; // Run `npm install --save web-animations-js`. 50 | 51 | 52 | 53 | /*************************************************************************************************** 54 | * Zone JS is required by Angular itself. 55 | */ 56 | import 'zone.js/dist/zone'; // Included with Angular CLI. 57 | 58 | 59 | 60 | /*************************************************************************************************** 61 | * APPLICATION IMPORTS 62 | */ 63 | 64 | /** 65 | * Date, currency, decimal and percent pipes. 66 | * Needed for: All but Chrome, Firefox, Edge, IE11 and Safari 10 67 | */ 68 | // import 'intl'; // Run `npm install --save intl`. 69 | -------------------------------------------------------------------------------- /src/styles.scss: -------------------------------------------------------------------------------- 1 | @import "assets/css/AdminLTE-custom/AdminLTE.scss"; 2 | @import "~primeng/resources/primeng.min.css"; 3 | @import "assets/css/primeng-theme/nova-light/theme.scss"; 4 | @import "~primeicons/primeicons.css"; 5 | @import "~font-awesome/css/font-awesome.min.css"; -------------------------------------------------------------------------------- /src/test.ts: -------------------------------------------------------------------------------- 1 | // This file is required by karma.conf.js and loads recursively all the .spec and framework files 2 | 3 | import 'zone.js/dist/long-stack-trace-zone'; 4 | import 'zone.js/dist/proxy.js'; 5 | import 'zone.js/dist/sync-test'; 6 | import 'zone.js/dist/jasmine-patch'; 7 | import 'zone.js/dist/async-test'; 8 | import 'zone.js/dist/fake-async-test'; 9 | import { getTestBed } from '@angular/core/testing'; 10 | import { 11 | BrowserDynamicTestingModule, 12 | platformBrowserDynamicTesting 13 | } from '@angular/platform-browser-dynamic/testing'; 14 | 15 | // Unfortunately there's no typing for the `__karma__` variable. Just declare it as any. 16 | declare var __karma__: any; 17 | declare var require: any; 18 | 19 | // Prevent Karma from running prematurely. 20 | __karma__.loaded = function () {}; 21 | 22 | // First, initialize the Angular testing environment. 23 | getTestBed().initTestEnvironment( 24 | BrowserDynamicTestingModule, 25 | platformBrowserDynamicTesting() 26 | ); 27 | // Then we find all the tests. 28 | const context = require.context('./', true, /\.spec\.ts$/); 29 | // And load the modules. 30 | context.keys().map(context); 31 | // Finally, start Karma to run the tests. 32 | __karma__.start(); 33 | -------------------------------------------------------------------------------- /src/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "declaration": false, 4 | "emitDecoratorMetadata": true, 5 | "experimentalDecorators": true, 6 | "lib": ["es6", "dom"], 7 | "mapRoot": "./", 8 | "module": "es6", 9 | "moduleResolution": "node", 10 | "outDir": "../dist/out-tsc", 11 | "sourceMap": true, 12 | "target": "es5", 13 | "typeRoots": [ 14 | "../node_modules/@types" 15 | ] 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/typings.d.ts: -------------------------------------------------------------------------------- 1 | // Typings reference file, see links for more information 2 | // https://github.com/typings/typings 3 | // https://www.typescriptlang.org/docs/handbook/writing-declaration-files.html 4 | 5 | declare var System: any; 6 | declare var require: NodeRequire; --------------------------------------------------------------------------------