├── .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 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/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 |
2 |
5 |
6 |
7 |
请登录
8 |
34 |
35 | 忘记密码
36 |
37 |
38 | 注册
39 |
40 |
41 |
42 |
--------------------------------------------------------------------------------
/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 |
6 |
11 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/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 |
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 |
--------------------------------------------------------------------------------
/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;
--------------------------------------------------------------------------------