胡锐 3 months ago
commit ebaaf09262
  1. 709
      package-lock.json
  2. 4
      package.json
  3. 48
      src/app/data/goods/goods.namespace.ts
  4. 61
      src/app/pages/body/index/index.component.html
  5. 25
      src/app/pages/body/index/index.component.less
  6. 127
      src/app/pages/body/index/index.component.ts
  7. 156
      src/app/pages/trade/goods-list/goods-list.component.html
  8. 3
      src/app/pages/trade/goods-list/goods-list.component.less
  9. 110
      src/app/pages/trade/goods-list/goods-list.component.ts
  10. 291
      src/app/pages/trade/goods-logistics-list/goods-logistics-list.component.html
  11. 6
      src/app/pages/trade/goods-logistics-list/goods-logistics-list.component.less
  12. 309
      src/app/pages/trade/goods-logistics-list/goods-logistics-list.component.ts
  13. 2
      src/app/pages/trade/order-cinema/order-cinema.component.ts
  14. 202
      src/app/pages/trade/order-starbucks/order-starbucks.component.html
  15. 9
      src/app/pages/trade/order-starbucks/order-starbucks.component.less
  16. 177
      src/app/pages/trade/order-starbucks/order-starbucks.component.ts
  17. 4
      src/app/pages/trade/trade.routes.ts
  18. 16
      src/app/pipes/common/data-utils.pipe.ts
  19. 30
      src/app/pipes/file/business-type.pipe.ts
  20. 22
      src/app/pipes/file/status.pipe.ts
  21. 28
      src/app/pipes/goods/order-child-status.pipe.ts
  22. 32
      src/app/pipes/goods/order-starbucks-type.pipe.ts
  23. 32
      src/app/pipes/goods/order-starbucks.pipe.ts
  24. 25
      src/app/pipes/goods/pay-type.pipe.ts
  25. 32
      src/app/pipes/order/order-goods-status.pipe.ts
  26. 17
      src/app/services/common/communication.service.ts
  27. 14
      src/app/services/common/icon.service.ts
  28. 41
      src/app/services/file/file.service.ts
  29. 11
      src/app/services/trade/order-goods.service.ts
  30. 24
      src/app/services/trade/order-starbucks.service.ts
  31. 23
      src/app/services/trade/order.service.ts
  32. 19
      src/app/utils/dateUtils.service.ts
  33. 18
      src/environments/environment.ts

709
package-lock.json generated

@ -22,6 +22,7 @@
"ng-zorro-antd": "^17.1.0",
"rxjs": "~7.8.0",
"tslib": "^2.3.0",
"typescript": "5.2",
"zone.js": "~0.14.2"
},
"devDependencies": {
@ -36,8 +37,7 @@
"karma-chrome-launcher": "~3.2.0",
"karma-coverage": "~2.2.0",
"karma-jasmine": "~5.1.0",
"karma-jasmine-html-reporter": "~2.1.0",
"typescript": "~5.2.2"
"karma-jasmine-html-reporter": "~2.1.0"
}
},
"node_modules/@ampproject/remapping": {
@ -191,6 +191,22 @@
}
}
},
"node_modules/@angular-devkit/build-angular/node_modules/@ngtools/webpack": {
"version": "17.0.7",
"resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-17.0.7.tgz",
"integrity": "sha512-gwhUhpwXn0trwwKdSu9WlJbEcLt+s/2fPwoD9lZ0y3wXfrOogsfcNBJKeO5BZf1h+A3AWt7ePmgrZXSJM+865Q==",
"dev": true,
"engines": {
"node": "^18.13.0 || >=20.9.0",
"npm": "^6.11.0 || ^7.5.6 || >=8.0.0",
"yarn": ">= 1.13.0"
},
"peerDependencies": {
"@angular/compiler-cli": "^17.0.0",
"typescript": ">=5.2 <5.3",
"webpack": "^5.54.0"
}
},
"node_modules/@angular-devkit/build-webpack": {
"version": "0.1700.7",
"resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1700.7.tgz",
@ -2288,54 +2304,6 @@
"node": ">=10.0.0"
}
},
"node_modules/@esbuild/android-arm": {
"version": "0.19.5",
"resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.5.tgz",
"integrity": "sha512-bhvbzWFF3CwMs5tbjf3ObfGqbl/17ict2/uwOSfr3wmxDE6VdS2GqY/FuzIPe0q0bdhj65zQsvqfArI9MY6+AA==",
"cpu": [
"arm"
],
"dev": true,
"optional": true,
"os": [
"android"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@esbuild/android-arm64": {
"version": "0.19.5",
"resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.5.tgz",
"integrity": "sha512-5d1OkoJxnYQfmC+Zd8NBFjkhyCNYwM4n9ODrycTFY6Jk1IGiZ+tjVJDDSwDt77nK+tfpGP4T50iMtVi4dEGzhQ==",
"cpu": [
"arm64"
],
"dev": true,
"optional": true,
"os": [
"android"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@esbuild/android-x64": {
"version": "0.19.5",
"resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.5.tgz",
"integrity": "sha512-9t+28jHGL7uBdkBjL90QFxe7DVA+KGqWlHCF8ChTKyaKO//VLuoBricQCgwhOjA1/qOczsw843Fy4cbs4H3DVA==",
"cpu": [
"x64"
],
"dev": true,
"optional": true,
"os": [
"android"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@esbuild/darwin-arm64": {
"version": "0.19.5",
"resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.5.tgz",
@ -2352,294 +2320,6 @@
"node": ">=12"
}
},
"node_modules/@esbuild/darwin-x64": {
"version": "0.19.5",
"resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.5.tgz",
"integrity": "sha512-Ly8cn6fGLNet19s0X4unjcniX24I0RqjPv+kurpXabZYSXGM4Pwpmf85WHJN3lAgB8GSth7s5A0r856S+4DyiA==",
"cpu": [
"x64"
],
"dev": true,
"optional": true,
"os": [
"darwin"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@esbuild/freebsd-arm64": {
"version": "0.19.5",
"resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.5.tgz",
"integrity": "sha512-GGDNnPWTmWE+DMchq1W8Sd0mUkL+APvJg3b11klSGUDvRXh70JqLAO56tubmq1s2cgpVCSKYywEiKBfju8JztQ==",
"cpu": [
"arm64"
],
"dev": true,
"optional": true,
"os": [
"freebsd"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@esbuild/freebsd-x64": {
"version": "0.19.5",
"resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.5.tgz",
"integrity": "sha512-1CCwDHnSSoA0HNwdfoNY0jLfJpd7ygaLAp5EHFos3VWJCRX9DMwWODf96s9TSse39Br7oOTLryRVmBoFwXbuuQ==",
"cpu": [
"x64"
],
"dev": true,
"optional": true,
"os": [
"freebsd"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@esbuild/linux-arm": {
"version": "0.19.5",
"resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.5.tgz",
"integrity": "sha512-lrWXLY/vJBzCPC51QN0HM71uWgIEpGSjSZZADQhq7DKhPcI6NH1IdzjfHkDQws2oNpJKpR13kv7/pFHBbDQDwQ==",
"cpu": [
"arm"
],
"dev": true,
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@esbuild/linux-arm64": {
"version": "0.19.5",
"resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.5.tgz",
"integrity": "sha512-o3vYippBmSrjjQUCEEiTZ2l+4yC0pVJD/Dl57WfPwwlvFkrxoSO7rmBZFii6kQB3Wrn/6GwJUPLU5t52eq2meA==",
"cpu": [
"arm64"
],
"dev": true,
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@esbuild/linux-ia32": {
"version": "0.19.5",
"resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.5.tgz",
"integrity": "sha512-MkjHXS03AXAkNp1KKkhSKPOCYztRtK+KXDNkBa6P78F8Bw0ynknCSClO/ztGszILZtyO/lVKpa7MolbBZ6oJtQ==",
"cpu": [
"ia32"
],
"dev": true,
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@esbuild/linux-loong64": {
"version": "0.19.5",
"resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.5.tgz",
"integrity": "sha512-42GwZMm5oYOD/JHqHska3Jg0r+XFb/fdZRX+WjADm3nLWLcIsN27YKtqxzQmGNJgu0AyXg4HtcSK9HuOk3v1Dw==",
"cpu": [
"loong64"
],
"dev": true,
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@esbuild/linux-mips64el": {
"version": "0.19.5",
"resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.5.tgz",
"integrity": "sha512-kcjndCSMitUuPJobWCnwQ9lLjiLZUR3QLQmlgaBfMX23UEa7ZOrtufnRds+6WZtIS9HdTXqND4yH8NLoVVIkcg==",
"cpu": [
"mips64el"
],
"dev": true,
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@esbuild/linux-ppc64": {
"version": "0.19.5",
"resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.5.tgz",
"integrity": "sha512-yJAxJfHVm0ZbsiljbtFFP1BQKLc8kUF6+17tjQ78QjqjAQDnhULWiTA6u0FCDmYT1oOKS9PzZ2z0aBI+Mcyj7Q==",
"cpu": [
"ppc64"
],
"dev": true,
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@esbuild/linux-riscv64": {
"version": "0.19.5",
"resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.5.tgz",
"integrity": "sha512-5u8cIR/t3gaD6ad3wNt1MNRstAZO+aNyBxu2We8X31bA8XUNyamTVQwLDA1SLoPCUehNCymhBhK3Qim1433Zag==",
"cpu": [
"riscv64"
],
"dev": true,
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@esbuild/linux-s390x": {
"version": "0.19.5",
"resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.5.tgz",
"integrity": "sha512-Z6JrMyEw/EmZBD/OFEFpb+gao9xJ59ATsoTNlj39jVBbXqoZm4Xntu6wVmGPB/OATi1uk/DB+yeDPv2E8PqZGw==",
"cpu": [
"s390x"
],
"dev": true,
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@esbuild/linux-x64": {
"version": "0.19.5",
"resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.5.tgz",
"integrity": "sha512-psagl+2RlK1z8zWZOmVdImisMtrUxvwereIdyJTmtmHahJTKb64pAcqoPlx6CewPdvGvUKe2Jw+0Z/0qhSbG1A==",
"cpu": [
"x64"
],
"dev": true,
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@esbuild/netbsd-x64": {
"version": "0.19.5",
"resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.5.tgz",
"integrity": "sha512-kL2l+xScnAy/E/3119OggX8SrWyBEcqAh8aOY1gr4gPvw76la2GlD4Ymf832UCVbmuWeTf2adkZDK+h0Z/fB4g==",
"cpu": [
"x64"
],
"dev": true,
"optional": true,
"os": [
"netbsd"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@esbuild/openbsd-x64": {
"version": "0.19.5",
"resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.5.tgz",
"integrity": "sha512-sPOfhtzFufQfTBgRnE1DIJjzsXukKSvZxloZbkJDG383q0awVAq600pc1nfqBcl0ice/WN9p4qLc39WhBShRTA==",
"cpu": [
"x64"
],
"dev": true,
"optional": true,
"os": [
"openbsd"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@esbuild/sunos-x64": {
"version": "0.19.5",
"resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.5.tgz",
"integrity": "sha512-dGZkBXaafuKLpDSjKcB0ax0FL36YXCvJNnztjKV+6CO82tTYVDSH2lifitJ29jxRMoUhgkg9a+VA/B03WK5lcg==",
"cpu": [
"x64"
],
"dev": true,
"optional": true,
"os": [
"sunos"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@esbuild/win32-arm64": {
"version": "0.19.5",
"resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.5.tgz",
"integrity": "sha512-dWVjD9y03ilhdRQ6Xig1NWNgfLtf2o/STKTS+eZuF90fI2BhbwD6WlaiCGKptlqXlURVB5AUOxUj09LuwKGDTg==",
"cpu": [
"arm64"
],
"dev": true,
"optional": true,
"os": [
"win32"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@esbuild/win32-ia32": {
"version": "0.19.5",
"resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.5.tgz",
"integrity": "sha512-4liggWIA4oDgUxqpZwrDhmEfAH4d0iljanDOK7AnVU89T6CzHon/ony8C5LeOdfgx60x5cnQJFZwEydVlYx4iw==",
"cpu": [
"ia32"
],
"dev": true,
"optional": true,
"os": [
"win32"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@esbuild/win32-x64": {
"version": "0.19.5",
"resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.5.tgz",
"integrity": "sha512-czTrygUsB/jlM8qEW5MD8bgYU2Xg14lo6kBDXW6HdxKjh8M5PzETGiSHaz9MtbXBYDloHNUAUW2tMiKW4KM9Mw==",
"cpu": [
"x64"
],
"dev": true,
"optional": true,
"os": [
"win32"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@fastify/busboy": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.0.tgz",
@ -2846,22 +2526,6 @@
"node": ">= 0.4"
}
},
"node_modules/@ngtools/webpack": {
"version": "17.0.7",
"resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-17.0.7.tgz",
"integrity": "sha512-gwhUhpwXn0trwwKdSu9WlJbEcLt+s/2fPwoD9lZ0y3wXfrOogsfcNBJKeO5BZf1h+A3AWt7ePmgrZXSJM+865Q==",
"dev": true,
"engines": {
"node": "^18.13.0 || >=20.9.0",
"npm": "^6.11.0 || ^7.5.6 || >=8.0.0",
"yarn": ">= 1.13.0"
},
"peerDependencies": {
"@angular/compiler-cli": "^17.0.0",
"typescript": ">=5.2 <5.3",
"webpack": "^5.54.0"
}
},
"node_modules/@nodelib/fs.scandir": {
"version": "2.1.5",
"resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
@ -11687,7 +11351,6 @@
"version": "5.2.2",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz",
"integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==",
"dev": true,
"bin": {
"tsc": "bin/tsc",
"tsserver": "bin/tsserver"
@ -11965,54 +11628,6 @@
}
}
},
"node_modules/vite/node_modules/@esbuild/android-arm": {
"version": "0.18.20",
"resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz",
"integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==",
"cpu": [
"arm"
],
"dev": true,
"optional": true,
"os": [
"android"
],
"engines": {
"node": ">=12"
}
},
"node_modules/vite/node_modules/@esbuild/android-arm64": {
"version": "0.18.20",
"resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz",
"integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==",
"cpu": [
"arm64"
],
"dev": true,
"optional": true,
"os": [
"android"
],
"engines": {
"node": ">=12"
}
},
"node_modules/vite/node_modules/@esbuild/android-x64": {
"version": "0.18.20",
"resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz",
"integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==",
"cpu": [
"x64"
],
"dev": true,
"optional": true,
"os": [
"android"
],
"engines": {
"node": ">=12"
}
},
"node_modules/vite/node_modules/@esbuild/darwin-arm64": {
"version": "0.18.20",
"resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz",
@ -12029,294 +11644,6 @@
"node": ">=12"
}
},
"node_modules/vite/node_modules/@esbuild/darwin-x64": {
"version": "0.18.20",
"resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz",
"integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==",
"cpu": [
"x64"
],
"dev": true,
"optional": true,
"os": [
"darwin"
],
"engines": {
"node": ">=12"
}
},
"node_modules/vite/node_modules/@esbuild/freebsd-arm64": {
"version": "0.18.20",
"resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz",
"integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==",
"cpu": [
"arm64"
],
"dev": true,
"optional": true,
"os": [
"freebsd"
],
"engines": {
"node": ">=12"
}
},
"node_modules/vite/node_modules/@esbuild/freebsd-x64": {
"version": "0.18.20",
"resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz",
"integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==",
"cpu": [
"x64"
],
"dev": true,
"optional": true,
"os": [
"freebsd"
],
"engines": {
"node": ">=12"
}
},
"node_modules/vite/node_modules/@esbuild/linux-arm": {
"version": "0.18.20",
"resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz",
"integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==",
"cpu": [
"arm"
],
"dev": true,
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=12"
}
},
"node_modules/vite/node_modules/@esbuild/linux-arm64": {
"version": "0.18.20",
"resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz",
"integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==",
"cpu": [
"arm64"
],
"dev": true,
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=12"
}
},
"node_modules/vite/node_modules/@esbuild/linux-ia32": {
"version": "0.18.20",
"resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz",
"integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==",
"cpu": [
"ia32"
],
"dev": true,
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=12"
}
},
"node_modules/vite/node_modules/@esbuild/linux-loong64": {
"version": "0.18.20",
"resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz",
"integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==",
"cpu": [
"loong64"
],
"dev": true,
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=12"
}
},
"node_modules/vite/node_modules/@esbuild/linux-mips64el": {
"version": "0.18.20",
"resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz",
"integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==",
"cpu": [
"mips64el"
],
"dev": true,
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=12"
}
},
"node_modules/vite/node_modules/@esbuild/linux-ppc64": {
"version": "0.18.20",
"resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz",
"integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==",
"cpu": [
"ppc64"
],
"dev": true,
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=12"
}
},
"node_modules/vite/node_modules/@esbuild/linux-riscv64": {
"version": "0.18.20",
"resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz",
"integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==",
"cpu": [
"riscv64"
],
"dev": true,
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=12"
}
},
"node_modules/vite/node_modules/@esbuild/linux-s390x": {
"version": "0.18.20",
"resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz",
"integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==",
"cpu": [
"s390x"
],
"dev": true,
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=12"
}
},
"node_modules/vite/node_modules/@esbuild/linux-x64": {
"version": "0.18.20",
"resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz",
"integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==",
"cpu": [
"x64"
],
"dev": true,
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=12"
}
},
"node_modules/vite/node_modules/@esbuild/netbsd-x64": {
"version": "0.18.20",
"resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz",
"integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==",
"cpu": [
"x64"
],
"dev": true,
"optional": true,
"os": [
"netbsd"
],
"engines": {
"node": ">=12"
}
},
"node_modules/vite/node_modules/@esbuild/openbsd-x64": {
"version": "0.18.20",
"resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz",
"integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==",
"cpu": [
"x64"
],
"dev": true,
"optional": true,
"os": [
"openbsd"
],
"engines": {
"node": ">=12"
}
},
"node_modules/vite/node_modules/@esbuild/sunos-x64": {
"version": "0.18.20",
"resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz",
"integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==",
"cpu": [
"x64"
],
"dev": true,
"optional": true,
"os": [
"sunos"
],
"engines": {
"node": ">=12"
}
},
"node_modules/vite/node_modules/@esbuild/win32-arm64": {
"version": "0.18.20",
"resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz",
"integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==",
"cpu": [
"arm64"
],
"dev": true,
"optional": true,
"os": [
"win32"
],
"engines": {
"node": ">=12"
}
},
"node_modules/vite/node_modules/@esbuild/win32-ia32": {
"version": "0.18.20",
"resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz",
"integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==",
"cpu": [
"ia32"
],
"dev": true,
"optional": true,
"os": [
"win32"
],
"engines": {
"node": ">=12"
}
},
"node_modules/vite/node_modules/@esbuild/win32-x64": {
"version": "0.18.20",
"resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz",
"integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==",
"cpu": [
"x64"
],
"dev": true,
"optional": true,
"os": [
"win32"
],
"engines": {
"node": ">=12"
}
},
"node_modules/vite/node_modules/esbuild": {
"version": "0.18.20",
"resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz",

@ -25,6 +25,7 @@
"ng-zorro-antd": "^17.1.0",
"rxjs": "~7.8.0",
"tslib": "^2.3.0",
"typescript": "5.2",
"zone.js": "~0.14.2"
},
"devDependencies": {
@ -39,7 +40,6 @@
"karma-chrome-launcher": "~3.2.0",
"karma-coverage": "~2.2.0",
"karma-jasmine": "~5.1.0",
"karma-jasmine-html-reporter": "~2.1.0",
"typescript": "~5.2.2"
"karma-jasmine-html-reporter": "~2.1.0"
}
}

@ -1,18 +1,25 @@
export const fallbackImg = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMIAAADDCAYAAADQvc6UAAABRWlDQ1BJQ0MgUHJvZmlsZQAAKJFjYGASSSwoyGFhYGDIzSspCnJ3UoiIjFJgf8LAwSDCIMogwMCcmFxc4BgQ4ANUwgCjUcG3awyMIPqyLsis7PPOq3QdDFcvjV3jOD1boQVTPQrgSkktTgbSf4A4LbmgqISBgTEFyFYuLykAsTuAbJEioKOA7DkgdjqEvQHEToKwj4DVhAQ5A9k3gGyB5IxEoBmML4BsnSQk8XQkNtReEOBxcfXxUQg1Mjc0dyHgXNJBSWpFCYh2zi+oLMpMzyhRcASGUqqCZ16yno6CkYGRAQMDKMwhqj/fAIcloxgHQqxAjIHBEugw5sUIsSQpBobtQPdLciLEVJYzMPBHMDBsayhILEqEO4DxG0txmrERhM29nYGBddr//5/DGRjYNRkY/l7////39v///y4Dmn+LgeHANwDrkl1AuO+pmgAAADhlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAAqACAAQAAAABAAAAwqADAAQAAAABAAAAwwAAAAD9b/HnAAAHlklEQVR4Ae3dP3PTWBSGcbGzM6GCKqlIBRV0dHRJFarQ0eUT8LH4BnRU0NHR0UEFVdIlFRV7TzRksomPY8uykTk/zewQfKw/9znv4yvJynLv4uLiV2dBoDiBf4qP3/ARuCRABEFAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghgg0Aj8i0JO4OzsrPv69Wv+hi2qPHr0qNvf39+iI97soRIh4f3z58/u7du3SXX7Xt7Z2enevHmzfQe+oSN2apSAPj09TSrb+XKI/f379+08+A0cNRE2ANkupk+ACNPvkSPcAAEibACyXUyfABGm3yNHuAECRNgAZLuYPgEirKlHu7u7XdyytGwHAd8jjNyng4OD7vnz51dbPT8/7z58+NB9+/bt6jU/TI+AGWHEnrx48eJ/EsSmHzx40L18+fLyzxF3ZVMjEyDCiEDjMYZZS5wiPXnyZFbJaxMhQIQRGzHvWR7XCyOCXsOmiDAi1HmPMMQjDpbpEiDCiL358eNHurW/5SnWdIBbXiDCiA38/Pnzrce2YyZ4//59F3ePLNMl4PbpiL2J0L979+7yDtHDhw8vtzzvdGnEXdvUigSIsCLAWavHp/+qM0BcXMd/q25n1vF57TYBp0a3mUzilePj4+7k5KSLb6gt6ydAhPUzXnoPR0dHl79WGTNCfBnn1uvSCJdegQhLI1vvCk+fPu2ePXt2tZOYEV6/fn31dz+shwAR1sP1cqvLntbEN9MxA9xcYjsxS1jWR4AIa2Ibzx0tc44fYX/16lV6NDFLXH+YL32jwiACRBiEbf5KcXoTIsQSpzXx4N28Ja4BQoK7rgXiydbHjx/P25TaQAJEGAguWy0+2Q8PD6/Ki4R8EVl+bzBOnZY95fq9rj9zAkTI2SxdidBHqG9+skdw43borCXO/ZcJdraPWdv22uIEiLA4q7nvvCug8WTqzQveOH26fodo7g6uFe/a17W3+nFBAkRYENRdb1vkkz1CH9cPsVy/jrhr27PqMYvENYNlHAIesRiBYwRy0V+8iXP8+/fvX11Mr7L7ECueb/r48eMqm7FuI2BGWDEG8cm+7G3NEOfmdcTQw4h9/55lhm7DekRYKQPZF2ArbXTAyu4kDYB2YxUzwg0gi/41ztHnfQG26HbGel/crVrm7tNY+/1btkOEAZ2M05r4FB7r9GbAIdxaZYrHdOsgJ/wCEQY0J74TmOKnbxxT9n3FgGGWWsVdowHtjt9Nnvf7yQM2aZU/TIAIAxrw6dOnAWtZZcoEnBpNuTuObWMEiLAx1HY0ZQJEmHJ3HNvGCBBhY6jtaMoEiJB0Z29vL6ls58vxPcO8/zfrdo5qvKO+d3Fx8Wu8zf1dW4p/cPzLly/dtv9Ts/EbcvGAHhHyfBIhZ6NSiIBTo0LNNtScABFyNiqFCBChULMNNSdAhJyNSiECRCjUbEPNCRAhZ6NSiAARCjXbUHMCRMjZqBQiQIRCzTbUnAARcjYqhQgQoVCzDTUnQIScjUohAkQo1GxDzQkQIWejUogAEQo121BzAkTI2agUIkCEQs021JwAEXI2KoUIEKFQsw01J0CEnI1KIQJEKNRsQ80JECFno1KIABEKNdtQcwJEyNmoFCJAhELNNtScABFyNiqFCBChULMNNSdAhJyNSiECRCjUbEPNCRAhZ6NSiAARCjXbUHMCRMjZqBQiQIRCzTbUnAARcjYqhQgQoVCzDTUnQIScjUohAkQo1GxDzQkQIWejUogAEQo121BzAkTI2agUIkCEQs021JwAEXI2KoUIEKFQsw01J0CEnI1KIQJEKNRsQ80JECFno1KIABEKNdtQcwJEyNmoFCJAhELNNtScABFyNiqFCBChULMNNSdAhJyNSiECRCjUbEPNCRAhZ6NSiAARCjXbUHMCRMjZqBQiQIRCzTbUnAARcjYqhQgQoVCzDTUnQIScjUohAkQo1GxDzQkQIWejUogAEQo121BzAkTI2agUIkCEQs021JwAEXI2KoUIEKFQsw01J0CEnI1KIQJEKNRsQ80JECFno1KIABEKNdtQcwJEyNmoFCJAhELNNtScABFyNiqFCBChULMNNSdAhJyNSiEC/wGgKKC4YMA4TAAAAABJRU5ErkJggg==';
export const orderGoodsStatus = [
{name: "待发货" , key: 1} ,
{name: "已发货" , key: 2},
{name: "配送中" , key: 3},
{name: "已送达" , key: 4},
export const logisticsStatus = [
{name: "待发货" , key: "待发货"} ,
{name: "派件中" , key: "DELIVERING"} ,
{name: "运输中" , key: "TRANSPORT"},
{name: "已代签收" , key: "AGENT_SIGN"},
{name: "已签收" , key: "SIGN"},
{name: "已揽收" , key: "ACCEPT"},
{name: "包裹异常" , key: "FAILED"},
{name: "待揽收" , key: "WAIT_ACCEPT"}
];
export const orderGoodsChild = [
{name: "待支付" , key: 1} ,
{name: "已支付" , key: 2},
{name: "已完成" , key: 3},
{name: "已退款" , key: 4},
{name: "已取消" , key: 5},
{name: "退货中" , key: 6},
{name: "已退货" , key: 7},
{name: "待支付" , key: 8}
{name: "退款中" , key: 6}
];
export const orderCinemaStatus = [
{name: "未上送" , key: 0} ,
{name: "待出票" , key: 5},
@ -21,3 +28,26 @@ export const orderCinemaStatus = [
{name: "已取消" , key: -5},
];
export const orderStarbucksStatus = [
{name: "待付款" , key: 0} ,
{name: "已支付" , key: 5},
{name: "出单中" , key: 10},
{name: "出单成功" , key: 15},
{name: "配送中" , key: 20},
{name: "配送完成" , key: 25},
{name: "已取消" , key: -5},
{name: "失败" , key: -10},
];
export const orderPayType = [
{name: "微信" , key: 1} ,
{name: "支付宝" , key: 2},
{name: "快捷支付" , key: 3},
{name: "工会卡" , key: 4}
];
export const hltLogo = "./assets/order/hlt.png";
export const gzBankLogo = "./assets/order/gzbank.png";
export const wxLogo = "./assets/order/wx.png";
export const aliLogo = "./assets/order/ali.png";
export const noPayLogo = "./assets/order/noPay.png";

@ -14,6 +14,7 @@
</ul>
</div>
<div class="user" nz-col nzSpan="4">
<div>
<span nz-dropdown [nzDropdownMenu]="menu">{{userInfo['userName']}}</span>
@ -24,7 +25,32 @@
</ul>
</nz-dropdown-menu>
</div>
<div style="font-size: 18px; margin-right: 60px;">
<span *ngIf="downloadType == 2" nz-icon [nzType]="'sync'" [nzSpin]="true" nz-popover [nzPopoverContent]="contentTemplate"></span>
<span *ngIf="downloadType == 1" nz-icon nzType="download" nzTheme="outline" nz-popover [nzPopoverContent]="contentTemplate"></span>
<ng-template #contentTemplate>
<div class="file-downLoad">
<nz-list>
<nz-list-item *ngFor="let item of tableData | dataUtils : 5;">
<span *ngIf="item.status == 1" style="font-size: 20px" nz-icon [nzType]="'check-circle'" [nzTheme]="'twotone'" [nzTwotoneColor]="'#52c41a'"></span>
<span *ngIf="item.status === 2" style="font-size: 20px" nz-icon [nzType]="'sync'" [nzSpin]="true"></span>
<span nz-typography>{{item.title}}</span>
<a><span *ngIf="item.status == 1" style="font-size: 20px" nz-icon [nzIconfont]="'icon-xiazai'" (click)="getDownLoad(item.id)"></span></a>
<span *ngIf="item.status === 3" style="font-size: 20px" nz-icon nzType="close-circle" nzTheme="twotone" [nzTwotoneColor]="'red'"></span>
</nz-list-item>
<nz-list-empty *ngIf="tableData.length == 0" />
<nz-list-footer *ngIf="tableData.length != 0" style="text-align: center">
<a (click)="getFileRecords()">查看更多记录</a>
</nz-list-footer>
</nz-list>
</div>
</ng-template>
<div class="button-up" *ngIf="showComponent">
正在导出中,请稍后在此处进行下载
</div>
<div class="to_top" *ngIf="showComponent"></div>
</div>
</div>
</div>
</nz-header>
@ -52,6 +78,41 @@
</li>
</ul>
</div>
<nz-modal [(nzVisible)]="isVisible" nzTitle="导出中心" (nzOnCancel)="isVisible = false" [nzFooter]="null"
[nzWidth]="1200">
<ng-container *nzModalContent>
<nz-table [nzBordered]="true" #basicTable [nzData]="tableData">
<thead>
<tr>
<th>序号</th>
<th>文件名称</th>
<th>下载来源</th>
<th>申请时间</th>
<th>下载时间</th>
<th>状态</th>
<th>操作</th>
</tr>
</thead>
<tbody>
<tr *ngFor="let data of basicTable.data; let i = index">
<td>{{ i + 1 }}</td>
<td>{{ data.title }}</td>
<td>{{ data.businessType | businessType }}</td>
<td>{{ data.createTime | date: 'yyyy-MM-dd HH:mm:ss'}}</td>
<td>{{ data.downloadTime | date: 'yyyy-MM-dd HH:mm:ss'}}</td>
<td>{{ data.status | status}}</td>
<td>
<a *ngIf="data.downloadStatus == 2 && data.status == 1" (click)="getDownLoad(data.id)">下载</a>
<a *ngIf="data.downloadStatus == 1 && data.status == 1" (click)="getDownLoad(data.id)">重新下载</a>
<span *ngIf="data.status === 3" style="font-size: 20px" nz-icon nzType="close-circle" nzTheme="twotone" [nzTwotoneColor]="'red'"></span>
</td>
</tr>
</tbody>
</nz-table>
</ng-container>
</nz-modal>
<!-- start 菜单内容 end -->
</nz-sider>
<!-- end 侧边 end -->

@ -67,3 +67,28 @@ nz-content {
}
}
.file-downLoad {
width: 300px;
}
.button-up {
font-size: 16px;
padding: 10px;
top: 48px;
left: 22px;
z-index: 999;
border-radius: 5px;
position:absolute;
height: 80px;
width: 280px;
background-color: rgba(0, 0, 0, 0.7);
}
.to_top {
z-index: 999;
top: 40px;
position:absolute;
width: 0;
height: 0;
border-bottom: 8px solid rgba(0, 0, 0, 0.7);
border-left: 8px solid transparent;
border-right: 8px solid transparent;
}

@ -1,4 +1,4 @@
import { Component } from '@angular/core';
import {AfterViewInit, Component} from '@angular/core';
import {Router, RouterLink, RouterOutlet} from "@angular/router";
import {
NzContentComponent,
@ -10,7 +10,7 @@ import {
import {NzBreadCrumbComponent, NzBreadCrumbItemComponent} from "ng-zorro-antd/breadcrumb";
import {NzColDirective, NzRowDirective} from "ng-zorro-antd/grid";
import {NzMenuDirective, NzMenuGroupComponent, NzMenuItemComponent, NzSubMenuComponent} from "ng-zorro-antd/menu";
import {NgClass, NgForOf} from "@angular/common";
import {DatePipe, NgClass, NgForOf, NgIf} from "@angular/common";
import {NzIconDirective} from "ng-zorro-antd/icon";
import {NzTabComponent, NzTabSetComponent} from "ng-zorro-antd/tabs";
import {TabComponent} from "../tab/tab.component";
@ -22,6 +22,25 @@ import {Dictionary, dictionaryData} from "../../../data/common/dictionary.namesp
import {CommonService} from "../../../services/common/common.service";
import {LoginService} from "../../../services/login/login.service";
import {NzConfigService} from "ng-zorro-antd/core/config";
import {NzPopoverDirective} from "ng-zorro-antd/popover";
import {NzListItemComponent, NzListItemMetaComponent, NzListModule} from "ng-zorro-antd/list";
import {NzTypographyComponent} from "ng-zorro-antd/typography";
import {IconService} from "../../../services/common/icon.service";
import {FileService} from "../../../services/file/file.service";
import {DataUtilsPipe} from "../../../pipes/common/data-utils.pipe";
import {GoodsListComponent} from "../../trade/goods-list/goods-list.component";
import {Subject} from "rxjs";
import {CommunicationService} from "../../../services/common/communication.service";
import {NzModalComponent, NzModalContentDirective, NzModalModule} from "ng-zorro-antd/modal";
import {NzResultComponent} from "ng-zorro-antd/result";
import {NzSpinComponent} from "ng-zorro-antd/spin";
import {NzTimelineComponent, NzTimelineItemComponent} from "ng-zorro-antd/timeline";
import {NzTableComponent, NzTableModule} from "ng-zorro-antd/table";
import {BusinessTypePipe} from "../../../pipes/file/business-type.pipe";
import {StatusPipe} from "../../../pipes/file/status.pipe";
import {NzPopconfirmDirective} from "ng-zorro-antd/popconfirm";
import {NzButtonComponent} from "ng-zorro-antd/button";
import {NzBadgeComponent} from "ng-zorro-antd/badge";
@Component({
selector: 'app-index',
@ -37,6 +56,7 @@ import {NzConfigService} from "ng-zorro-antd/core/config";
NzRowDirective,
NzColDirective,
NzMenuItemComponent,
NzModalModule,
NzMenuDirective,
RouterLink,
NzSubMenuComponent,
@ -44,12 +64,34 @@ import {NzConfigService} from "ng-zorro-antd/core/config";
NgClass,
NzIconDirective,
NzTabComponent,
NzListModule,
NzTabSetComponent,
TabComponent,
NzSiderComponent,
NzMenuGroupComponent,
NzDropDownDirective,
NzDropdownMenuComponent
NzDropdownMenuComponent,
NgIf,
NzPopoverDirective,
NzListItemComponent,
NzListItemMetaComponent,
NzTypographyComponent,
NzTableModule,
DataUtilsPipe,
GoodsListComponent,
DatePipe,
NzModalComponent,
NzResultComponent,
NzSpinComponent,
NzTimelineComponent,
NzTimelineItemComponent,
NzTableComponent,
NzModalContentDirective,
BusinessTypePipe,
StatusPipe,
NzPopconfirmDirective,
NzButtonComponent,
NzBadgeComponent
],
templateUrl: './index.component.html',
styleUrl: './index.component.less',
@ -60,22 +102,41 @@ export class IndexComponent {
'menuName' : '首页',
'selected' : true,
}];
// 表单页数
tablePageNum = 1;
// 表单数据
tableData: any;
userInfo: any;
// 左侧菜单栏数据
leftMenuData: any = [];
// 侧边菜单展示开关
isCollapse = true;
loading = false;
isVisible = false;
// 当前顶级菜单
currentParentMenu: any = {};
downloadType = 1;
interval: any;
showComponent = false;
constructor(
private commonService: CommonService,
private storage: BrowserStorageService,
private communicationService: CommunicationService,
private nzConfigService: NzConfigService,
private iconService: IconService,
private fileService: FileService,
private message: NzMessageService,
private router: Router, // 路由
private login: LoginService
) {
this.communicationService.currentMessage.subscribe(message => {
this.showComponent = true;
this.fileRecords();
this.findFileRecords(message.id);
this.downloadType = 2;
});
this.nzConfigService.set('button', { nzSize: 'large' })
this.nzConfigService.set('treeSelect', { nzSize: 'large' })
// 缓存数据字典
@ -99,6 +160,7 @@ export class IndexComponent {
this.menuData = this.menuData.concat(this.storage.get(DATA)['menuTree']);
this.userInfo = this.storage.get(DATA)['account'];
this.fileRecords();
}
// 选择操作
@ -131,4 +193,61 @@ export class IndexComponent {
}
});
}
// 弹出下载记录
public getFileRecords() {
this.loading = true;
this.isVisible = true;
}
// 查询下载记录
public fileRecords() {
let searchForm = {
time: new Date().getTime()
}
this.fileService.getFileRecordsList(searchForm , (data: any) => {
if (data['return_code'] == '000000') {
this.tableData = data['return_data'];
} else {
this.message.error(data['return_msg']);
}
this.loading = false;
});
}
// 查询详情
public findFileRecords(id: number) {
this.interval = setInterval(() => this.fileService.findFileRecords(id, (data: any) => {
if (data['return_code'] == '000000') {
if (data['return_data'].status == 1 || data['return_data'].status == 3) {
this.showComponent = false;
clearTimeout(this.interval);
this.downloadType = 1;
this.fileRecords();
}
}else {
this.showComponent = false;
clearTimeout(this.interval);
this.fileRecords();
this.downloadType = 1;
}
}), 1000);
}
// 下载
public getDownLoad(id: number) {
this.fileService.getDownLoad(id, (data: any) => {
if (data['return_code'] == '000000') {
this.fileRecords();
window.open(data['return_data']);
}else {
this.message.error(data['return_msg']);
}
})
}
}

@ -1,18 +1,21 @@
<form nz-form [formGroup]="searchForm" class="search_form" [nzLayout]="'vertical'">
<div nz-row [nzGutter]="24">
<div nz-col [nzSpan]="6">
<nz-form-item>
<nz-form-label>商品名称</nz-form-label>
<nz-form-label>物流订单号</nz-form-label>
<nz-form-control>
<input nzSize="large" nz-input formControlName="goodsName" placeholder="请输入" />
<input nzSize="large" nz-input formControlName="logisticsNo" placeholder="请输入" />
</nz-form-control>
</nz-form-item>
</div>
<div nz-col [nzSpan]="6">
<nz-form-item>
<nz-form-label>物流订单号</nz-form-label>
<nz-form-label>物流状态</nz-form-label>
<nz-form-control>
<input nzSize="large" nz-input formControlName="logisticsNo" placeholder="请输入" />
<nz-select nzSize="large" nzShowSearch nzAllowClear nzPlaceHolder="请选择" formControlName="logisticsStatus">
<nz-option *ngFor="let item of logisticsStatus" nzLabel="{{item['name']}}" nzValue="{{item['key']}}"></nz-option>
</nz-select>
</nz-form-control>
</nz-form-item>
</div>
@ -26,25 +29,50 @@
</div>
<div nz-col [nzSpan]="6">
<nz-form-item>
<nz-form-label>用户手机号</nz-form-label>
<nz-form-label>创建时间</nz-form-label>
<nz-form-control>
<input nzSize="large" nz-input formControlName="userPhone" placeholder="请输入" />
<nz-range-picker nzSize="large" formControlName="createTimeArray" [nzFormat]="'yyyy/MM/dd'"></nz-range-picker>
</nz-form-control>
</nz-form-item>
</div>
<div nz-col [nzSpan]="6" [hidden]="!isCollapse" *ngIf="objectType == 1">
<nz-form-item>
<nz-form-label>商户</nz-form-label>
<nz-form-control>
<nz-select nzSize="large" nzShowSearch nzAllowClear nzPlaceHolder="请选择" formControlName="merId">
<nz-option *ngFor="let item of merData" nzLabel="{{item['merName']}}" nzValue="{{item['id']}}"></nz-option>
</nz-select>
</nz-form-control>
</nz-form-item>
</div>
<div nz-col [nzSpan]="6" [hidden]="!isCollapse">
<nz-form-item>
<nz-form-label>商品名称</nz-form-label>
<nz-form-control>
<input nzSize="large" nz-input formControlName="goodsName" placeholder="请输入" />
</nz-form-control>
</nz-form-item>
</div>
<div nz-col [nzSpan]="24">
<div nz-col [nzSpan]="6" [hidden]="!isCollapse">
<nz-form-item>
<nz-form-label>创建时间</nz-form-label>
<nz-form-label>子订单号</nz-form-label>
<nz-form-control>
<input nzSize="large" nz-input formControlName="childOrderNo" placeholder="请输入" />
</nz-form-control>
</nz-form-item>
</div>
<div nz-col [nzSpan]="6" [hidden]="!isCollapse">
<nz-form-item>
<nz-form-label>用户手机号</nz-form-label>
<nz-form-control>
<nz-range-picker nzSize="large" formControlName="createTimeArray" nzShowTime [nzFormat]="'yyyy/MM/dd HH:mm:ss'"></nz-range-picker>
<nz-radio-group nzSize="large" nzButtonStyle="solid" formControlName="createTimeSelect" (ngModelChange)="createTimeInit()">
<label nz-radio-button *ngFor="let item of dateTypeSelect" nzValue="{{item.value}}">{{item.name}}</label>
</nz-radio-group>
<input nzSize="large" nz-input formControlName="userPhone" placeholder="请输入" />
</nz-form-control>
</nz-form-item>
</div>
<div nz-col [nzSpan]="6" [hidden]="!isCollapse">
<div nz-col [nzSpan]="6" [hidden]="!isCollapse">
<nz-form-item>
<nz-form-label>商品分类</nz-form-label>
<nz-form-control>
@ -71,23 +99,36 @@
<div nz-col [nzSpan]="6" [hidden]="!isCollapse">
<nz-form-item>
<nz-form-label>订单状态</nz-form-label>
<nz-form-label>支付类型</nz-form-label>
<nz-form-control>
<nz-select nzSize="large" nzShowSearch nzAllowClear nzPlaceHolder="请选择" formControlName="payType">
<nz-option *ngFor="let item of orderPayType" nzLabel="{{item['name']}}" nzValue="{{item['key']}}"></nz-option>
</nz-select>
</nz-form-control>
</nz-form-item>
</div>
<div nz-col [nzSpan]="6" [hidden]="!isCollapse">
<nz-form-item>
<nz-form-label>支付状态</nz-form-label>
<nz-form-control>
<nz-select nzSize="large" nzShowSearch nzAllowClear nzPlaceHolder="请选择" formControlName="status">
<nz-option *ngFor="let item of orderGoodsStatus" nzLabel="{{item['name']}}" nzValue="{{item['key']}}"></nz-option>
<nz-option *ngFor="let item of orderGoodsChild" nzLabel="{{item['name']}}" nzValue="{{item['key']}}"></nz-option>
</nz-select>
</nz-form-control>
</nz-form-item>
</div>
<div nz-col [nzSpan]="24" class="search-area">
<button nz-button [nzType]="'primary'" (click)="getRequest()">查询</button>
<button nz-button (click)="searchForm.reset()">重置</button>
<div nz-col [nzSpan]="6" >
<a class="collapse" (click)="isCollapse = !isCollapse">
更多查询条件
{{isCollapse ? '收起至简洁查询' : '更多查询条件'}}
<i nz-icon [nzType]="!isCollapse ? 'down' : 'up'"></i>
</a>
</div>
<div nz-col [nzSpan]="24" class="search-area">
<button nz-button [nzType]="'primary'" (click)="getRequest()">查询</button>
<button nz-button (click)="reset()">重置</button>
<button nz-button [nzType]="'primary'" (click)="getExport()">导出交易明细</button>
</div>
</div>
</form>
@ -103,7 +144,7 @@
[nzData]="tableData.list" >
<thead>
<tr>
<th nzWidth="80px">商品名称</th>
<th nzWidth="200px">商品名称</th>
<th nzWidth="100px">商户名称</th>
<th nzWidth="100px">商品图片</th>
<th nzWidth="100px">商品分类</th>
@ -112,10 +153,12 @@
<th nzWidth="100px">订单号</th>
<th nzWidth="100px">子订单号</th>
<th nzWidth="100px">物流单号</th>
<th nzWidth="50px">创建时间</th>
<th nzWidth="50px">更新时间</th>
<th nzRight nzWidth="50px">物流状态</th>
<th nzRight nzWidth="70px">操作</th>
<th nzWidth="70px">创建时间</th>
<th nzWidth="70px">更新时间</th>
<th nzRight nzWidth="70px">支付类型</th>
<th nzRight nzWidth="70px">支付状态</th>
<th nzRight nzWidth="70px">物流状态</th>
<th nzRight nzWidth="90px">操作</th>
</tr>
</thead>
<tbody>
@ -134,8 +177,21 @@
<td>{{ data.createTime | date: 'yyyy-MM-dd HH:mm'}}</td>
<td>{{ data.updateTime | date: 'yyyy-MM-dd HH:mm'}}</td>
<td nzRight>
<span *ngIf="data.logisticsStatusDesc == null">{{data.status | orderGoodsStatus}}</span>
<span *ngIf="data.logisticsStatusDesc != null">{{data.logisticsStatusDesc}}</span>
<span style="font-size: 30px;" nz-icon [nzIconfont]="data.payType | payType"></span>
</td>
<td nzRight>
{{data.status | orderChildStatus}}
</td>
<td nzRight>
<nz-badge *ngIf="data?.logisticsStatus == null && data.status != 2" nzStatus="error" nzText="{{data.status | orderChildStatus}}"></nz-badge>
<nz-badge *ngIf="data?.logisticsStatus == null && data.status == 2" nzStatus="error" nzText="待发货"></nz-badge>
<nz-badge *ngIf="data?.logisticsStatus == 'DELIVERING'" nzColor="cyan" nzText="{{data.logisticsStatusDesc}}"></nz-badge>
<nz-badge *ngIf="data?.logisticsStatus == 'TRANSPORT'" nzColor="lime" nzText="{{data.logisticsStatusDesc}}"></nz-badge>
<nz-badge *ngIf="data?.logisticsStatus == 'AGENT_SIGN'" nzStatus="success" nzText="{{data.logisticsStatusDesc}}"></nz-badge>
<nz-badge *ngIf="data?.logisticsStatus == 'SIGN'" nzStatus="success" nzText="{{data.logisticsStatusDesc}}"></nz-badge>
<nz-badge *ngIf="data?.logisticsStatus == 'ACCEPT'" nzStatus="processing" nzText="{{data.logisticsStatusDesc}}"></nz-badge>
<nz-badge *ngIf="data?.logisticsStatus == 'FAILED'" nzStatus="error" nzText="{{data.logisticsStatusDesc}}"></nz-badge>
<nz-badge *ngIf="data?.logisticsStatus == 'WAIT_ACCEPT'" nzStatus="default" nzText="{{data.logisticsStatusDesc}}"></nz-badge>
</td>
<td nzRight>
<a (click)="showDetail(data)">详情</a>
@ -146,8 +202,7 @@
</a>
<nz-dropdown-menu #menu="nzDropdownMenu">
<ul nz-menu nzSelectable>
<li nz-menu-item (click)="getLogisticsNo(data.id)"><a>录入物流编码</a></li>
<li nz-menu-item (click)="showLogisticsNo(data.id)"><a>查看物流</a></li>
<li nz-menu-item *ngIf="data.logisticsNo != null" (click)="showLogisticsNo(data.id)"><a>查看物流</a></li>
</ul>
</nz-dropdown-menu>
</td>
@ -173,18 +228,15 @@
</nz-image-group>
</nz-descriptions-item>
<nz-descriptions-item nzTitle="物流状态" [nzSpan]="3">
<span *ngIf="orderGoodsData?.logisticsStatusDesc == null">
{{orderGoodsData.status | orderGoodsStatus}}
</span>
<span *ngIf="orderGoodsData?.logisticsStatusDesc != null">
<nz-badge *ngIf="orderGoodsData?.logisticsStatus == 'DELIVERING'" nzColor="cyan" nzText="{{orderGoodsData.logisticsStatusDesc}}"></nz-badge>
<nz-badge *ngIf="orderGoodsData?.logisticsStatus == 'TRANSPORT'" nzColor="lime" nzText="{{orderGoodsData.logisticsStatusDesc}}"></nz-badge>
<nz-badge *ngIf="orderGoodsData?.logisticsStatus == 'AGENT_SIGN'" nzStatus="success" nzText="{{orderGoodsData.logisticsStatusDesc}}"></nz-badge>
<nz-badge *ngIf="orderGoodsData?.logisticsStatus == 'SIGN'" nzStatus="success" nzText="{{orderGoodsData.logisticsStatusDesc}}"></nz-badge>
<nz-badge *ngIf="orderGoodsData?.logisticsStatus == 'ACCEPT'" nzStatus="processing" nzText="{{orderGoodsData.logisticsStatusDesc}}"></nz-badge>
<nz-badge *ngIf="orderGoodsData?.logisticsStatus == 'FAILED'" nzStatus="error" nzText="{{orderGoodsData.logisticsStatusDesc}}"></nz-badge>
<nz-badge *ngIf="orderGoodsData?.logisticsStatus == 'WAIT_ACCEPT'" nzStatus="default" nzText="{{orderGoodsData.logisticsStatusDesc}}"></nz-badge>
</span>
<nz-badge *ngIf="orderGoodsData?.logisticsStatus == null && orderGoodsData.status != 2" nzStatus="error" nzText="{{orderGoodsData.status | orderChildStatus}}"></nz-badge>
<nz-badge *ngIf="orderGoodsData?.logisticsStatus == null && orderGoodsData.status == 2" nzStatus="error" nzText="待发货"></nz-badge>
<nz-badge *ngIf="orderGoodsData?.logisticsStatus == 'DELIVERING'" nzColor="cyan" nzText="{{orderGoodsData.logisticsStatusDesc}}"></nz-badge>
<nz-badge *ngIf="orderGoodsData?.logisticsStatus == 'TRANSPORT'" nzColor="lime" nzText="{{orderGoodsData.logisticsStatusDesc}}"></nz-badge>
<nz-badge *ngIf="orderGoodsData?.logisticsStatus == 'AGENT_SIGN'" nzStatus="success" nzText="{{orderGoodsData.logisticsStatusDesc}}"></nz-badge>
<nz-badge *ngIf="orderGoodsData?.logisticsStatus == 'SIGN'" nzStatus="success" nzText="{{orderGoodsData.logisticsStatusDesc}}"></nz-badge>
<nz-badge *ngIf="orderGoodsData?.logisticsStatus == 'ACCEPT'" nzStatus="processing" nzText="{{orderGoodsData.logisticsStatusDesc}}"></nz-badge>
<nz-badge *ngIf="orderGoodsData?.logisticsStatus == 'FAILED'" nzStatus="error" nzText="{{orderGoodsData.logisticsStatusDesc}}"></nz-badge>
<nz-badge *ngIf="orderGoodsData?.logisticsStatus == 'WAIT_ACCEPT'" nzStatus="default" nzText="{{orderGoodsData.logisticsStatusDesc}}"></nz-badge>
</nz-descriptions-item>
</nz-descriptions>
</nz-tab>
@ -210,13 +262,11 @@
<nz-descriptions-item *ngIf="orderGoodsData?.updateTime != null" nzTitle="更新时间">{{ orderGoodsData?.updateTime | date: 'yyyy-MM-dd HH:mm' }}</nz-descriptions-item>
</nz-descriptions>
</nz-tab>
<nz-tab nzTitle="货信息">
<nz-descriptions nzTitle="收获信息" nzBordered>
<nz-tab nzTitle="货信息">
<nz-descriptions nzTitle="发货信息" nzBordered>
<nz-descriptions-item nzTitle="收货人">{{deliveryAddress?.consignee}}</nz-descriptions-item>
<nz-descriptions-item nzTitle="收货电话">{{ deliveryAddress?.phone }}</nz-descriptions-item>
<nz-descriptions-item nzTitle="区域名称">{{ deliveryAddress?.regionName }}</nz-descriptions-item>
<nz-descriptions-item nzTitle="收货地址" [nzSpan]="3">{{ deliveryAddress?.address }}</nz-descriptions-item>
<nz-descriptions-item nzTitle="发货信息" [nzSpan]="3">{{deliveryAddress?.consignee}} -{{ deliveryAddress?.phone }} -{{ deliveryAddress?.address }}</nz-descriptions-item>
<nz-descriptions-item nzTitle="发货信息" [nzSpan]="3">{{ deliveryAddress?.regionName }} -{{deliveryAddress?.consignee}} -{{ deliveryAddress?.phone }} -{{ deliveryAddress?.address }}</nz-descriptions-item>
</nz-descriptions>
</nz-tab>
@ -225,20 +275,6 @@
</ng-container>
</nz-modal>
<nz-modal [(nzVisible)]="isVisible" nzTitle="新增物流单号" (nzOnCancel)="isVisible = false" (nzOnOk)="handleOk()">
<ng-container *nzModalContent>
<div nz-row>
<div nz-col nzSpan="20">
<nz-form-item>
<nz-form-label [nzSpan]="6">物流单号</nz-form-label>
<nz-form-control [nzSpan]="16">
<input nz-input [(ngModel)]="logisticsNo"/>
</nz-form-control>
</nz-form-item>
</div>
</div>
</ng-container>
</nz-modal>
<nz-modal [(nzVisible)]="orderDetailModalChild" nzTitle="物流详情" (nzOnCancel)="orderDetailModalChild = false" [nzFooter]="null"
nzWidth="1000px" [nzBodyStyle]=" { padding: '20px 20px 30px 20px'}">

@ -1,6 +1,7 @@
.search-area {
margin-top: 20px;
margin-bottom: 10px;
}
.search-area button {
margin-right: 8px;
margin-right: 14px;
}

@ -1,4 +1,4 @@
import { Component } from '@angular/core';
import {Component, Output} from '@angular/core';
import {DatePipe, NgClass, NgForOf, NgIf} from "@angular/common";
import {FormGroup, FormsModule, NonNullableFormBuilder, ReactiveFormsModule} from "@angular/forms";
import {NzButtonComponent} from "ng-zorro-antd/button";
@ -18,11 +18,10 @@ import {NzTreeSelectComponent} from "ng-zorro-antd/tree-select";
import {environment} from "../../../../environments/environment";
import {NzMessageService} from "ng-zorro-antd/message";
import {GoodsService} from "../../../services/goods/goods.service";
import {fallbackImg, orderGoodsStatus} from '../../../data/goods/goods.namespace';
import {fallbackImg, logisticsStatus, orderGoodsChild, orderPayType} from '../../../data/goods/goods.namespace';
import {GoodsStatusPipe} from "../../../pipes/goods/goods-status.pipe";
import {NzModalModule} from "ng-zorro-antd/modal";
import {OrderGoodsService} from "../../../services/trade/order-goods.service";
import {OrderGoodsStatusPipe} from "../../../pipes/order/order-goods-status.pipe";
import {NzDropDownADirective, NzDropDownDirective, NzDropdownMenuComponent} from "ng-zorro-antd/dropdown";
import {NzMenuDirective, NzMenuItemComponent} from "ng-zorro-antd/menu";
import {NzPopconfirmDirective} from "ng-zorro-antd/popconfirm";
@ -39,6 +38,15 @@ import {NzResultComponent} from "ng-zorro-antd/result";
import {DateSelectType, DateUtils} from "../../../utils/dateUtils.service";
import {NzDatePickerComponent, NzRangePickerComponent} from "ng-zorro-antd/date-picker";
import {NzRadioButtonDirective, NzRadioComponent, NzRadioGroupComponent} from "ng-zorro-antd/radio";
import {PayTypePipe} from "../../../pipes/goods/pay-type.pipe";
import {IconService} from "../../../services/common/icon.service";
import {OrderChildStatusPipe} from "../../../pipes/goods/order-child-status.pipe";
import {DATA} from "../../../data/login/localStorage.namespace";
import {BrowserStorageService} from "../../../utils/localStorage.service";
import {MerService} from "../../../services/merchant/mer.service";
import EventEmitter from "node:events";
import {Subject} from "rxjs";
import {CommunicationService} from "../../../services/common/communication.service";
@Component({
selector: 'app-goods-list',
@ -63,7 +71,6 @@ import {NzRadioButtonDirective, NzRadioComponent, NzRadioGroupComponent} from "n
NzImageDirective,
GoodsStatusPipe,
DatePipe,
OrderGoodsStatusPipe,
NzDropdownMenuComponent,
NgIf,
NzMenuDirective,
@ -89,6 +96,8 @@ import {NzRadioButtonDirective, NzRadioComponent, NzRadioGroupComponent} from "n
NzRadioComponent,
NzRadioGroupComponent,
NzRangePickerComponent,
PayTypePipe,
OrderChildStatusPipe,
],
templateUrl: './goods-list.component.html',
@ -121,26 +130,37 @@ export class GoodsListComponent {
logisticsTraceDetails: any;
goodsOrderId: any;
deliveryAddress: any;
// 时间类型选择
dateTypeSelect = DateSelectType;
// 更多查询条件
isCollapse = false;
merData: any;
objectType: any;
protected readonly fallbackImg = fallbackImg;
protected readonly orderGoodsStatus = orderGoodsStatus;
protected readonly logisticsStatus = logisticsStatus;
protected readonly orderGoodsChild = orderGoodsChild;
protected readonly orderPayType = orderPayType;
constructor(private fb: NonNullableFormBuilder,
private msg: NzMessageService,
private storage: BrowserStorageService,
private communicationService: CommunicationService,
private merService: MerService,
private iconService: IconService,
private orderGoodsService: OrderGoodsService,
private goodsService: GoodsService) {
// 初始化搜索框
this.searchForm = this.fb.group({
logisticsNo: [''],
orderNo: [''],
childOrderNo: [''],
logisticsStatus: [''],
goodsType: [''],
goodsBrand: [''],
merId: [''],
userPhone: [''],
goodsSpecsName: [''],
createTimeArray: [[]],
@ -148,15 +168,28 @@ export class GoodsListComponent {
createTimeS: [''],
createTimeE: [''],
goodsName: [''],
payType: [''],
status: [''],
payType: [''],
});
this.createTimeInit();
this.getRequest();
this.getGoodsTypeNode();
this.getGoodsBrandNode();
this.merList();
this.objectType = this.storage.get(DATA)['account']['objectType'];
}
// 查询商户
public merList() {
let params: any = {
pageNum: 1,
pageSize: 1000,
time: new Date().getTime(),
}
this.merService.queryList(params, (data: any) => {
if (data['return_code'] == '000000') {
this.merData = data['return_data']['list'];
}
});
}
// 查询列表
@ -164,8 +197,8 @@ export class GoodsListComponent {
if (this.searchForm.controls['createTimeArray'].value != null
&& this.searchForm.controls['createTimeArray'].value.length > 0) {
this.searchForm.controls['createTimeS'].setValue(new Date(this.searchForm.controls['createTimeArray'].value[0]).getTime());
this.searchForm.controls['createTimeE'].setValue(new Date(this.searchForm.controls['createTimeArray'].value[1]).getTime());
this.searchForm.controls['createTimeS'].setValue(DateUtils.getDateHMS(new Date(this.searchForm.controls['createTimeArray'].value[0]) , 1).getTime());
this.searchForm.controls['createTimeE'].setValue(DateUtils.getDateHMS(new Date(this.searchForm.controls['createTimeArray'].value[1]) , 2).getTime());
} else {
this.searchForm.controls['createTimeS'].setValue(null)
this.searchForm.controls['createTimeE'].setValue(null)
@ -189,6 +222,12 @@ export class GoodsListComponent {
});
}
// 重制
public reset() {
this.searchForm.reset();
this.getRequest();
}
// 获取商品分类
getGoodsTypeNode() {
this.goodsService.getList({time: new Date().getTime()}, (data: any) => {
@ -198,17 +237,6 @@ export class GoodsListComponent {
});
}
/**
*
*/
createTimeInit() {
let createTimeSelect = this.searchForm.controls['createTimeSelect'].value;
if (createTimeSelect != null) {
let timeObj = DateUtils.getDate(new Date(), Number(createTimeSelect));
this.searchForm.controls['createTimeArray'].setValue([timeObj.timeS, timeObj.timeE]);
}
}
// 配置数据
getNode(array: any): any {
array.forEach((item: any) => {
@ -232,35 +260,12 @@ export class GoodsListComponent {
});
}
getLogisticsNo(id: number): void {
this.getRequest(false);
this.goodsOrderId = id;
this.isVisible = true;
}
showDetail(data: OrderGoodsData): void {
this.orderGoodsData = data;
this.findDeliveryAddressById(data.deliveryAddressId);
this.orderDetailModal = true;
}
handleOk(): void {
let params = {
id: this.goodsOrderId,
logisticsNo: this.logisticsNo,
time: new Date().getTime()
}
this.orderGoodsService.updateLogisticsNo(params , (data: any) => {
if (data['return_code'] == '000000') {
this.isVisible = false;
this.msg.success("成功")
} else {
this.msg.error(data['return_msg']);
}
});
}
showLogisticsNo(id: number): void {
let params = {
@ -289,5 +294,18 @@ export class GoodsListComponent {
});
}
// 订单导出
public getExport() {
this.searchForm.value.time = new Date().getTime();
this.orderGoodsService.exportGoodsOrder(this.searchForm.value , (data: any) => {
if (data['return_code'] == '000000') {
this.communicationService.sendMessage(data['return_data']);
} else {
this.msg.error(data['return_msg']);
}
this.tableData.loading = false;
});
}
}

@ -0,0 +1,291 @@
<form nz-form [formGroup]="searchForm" class="search_form" [nzLayout]="'vertical'">
<div nz-row [nzGutter]="24">
<div nz-col [nzSpan]="6">
<nz-form-item>
<nz-form-label>物流订单号</nz-form-label>
<nz-form-control>
<input nzSize="large" nz-input formControlName="logisticsNo" placeholder="请输入" />
</nz-form-control>
</nz-form-item>
</div>
<div nz-col [nzSpan]="6">
<nz-form-item>
<nz-form-label>订单号</nz-form-label>
<nz-form-control>
<input nzSize="large" nz-input formControlName="orderNo" placeholder="请输入" />
</nz-form-control>
</nz-form-item>
</div>
<div nz-col [nzSpan]="6">
<nz-form-item>
<nz-form-label>物流状态</nz-form-label>
<nz-form-control>
<nz-select nzSize="large" nzShowSearch nzAllowClear nzPlaceHolder="请选择" formControlName="logisticsStatus">
<nz-option *ngFor="let item of logisticsStatus" nzLabel="{{item['name']}}" nzValue="{{item['key']}}"></nz-option>
</nz-select>
</nz-form-control>
</nz-form-item>
</div>
<div nz-col [nzSpan]="6">
<nz-form-item>
<nz-form-label>创建时间</nz-form-label>
<nz-form-control>
<nz-range-picker nzSize="large" formControlName="createTimeArray" [nzFormat]="'yyyy/MM/dd'"></nz-range-picker>
</nz-form-control>
</nz-form-item>
</div>
<div nz-col [nzSpan]="6" [hidden]="!isCollapse" *ngIf="objectType == 1">
<nz-form-item>
<nz-form-label>商户</nz-form-label>
<nz-form-control>
<nz-select nzSize="large" nzShowSearch nzAllowClear nzPlaceHolder="请选择" formControlName="merId">
<nz-option *ngFor="let item of merData" nzLabel="{{item['merName']}}" nzValue="{{item['id']}}"></nz-option>
</nz-select>
</nz-form-control>
</nz-form-item>
</div>
<div nz-col [nzSpan]="6" [hidden]="!isCollapse">
<nz-form-item>
<nz-form-label>商品名称</nz-form-label>
<nz-form-control>
<input nzSize="large" nz-input formControlName="goodsName" placeholder="请输入" />
</nz-form-control>
</nz-form-item>
</div>
<div nz-col [nzSpan]="6" [hidden]="!isCollapse">
<nz-form-item>
<nz-form-label>子订单号</nz-form-label>
<nz-form-control>
<input nzSize="large" nz-input formControlName="childOrderNo" placeholder="请输入" />
</nz-form-control>
</nz-form-item>
</div>
<div nz-col [nzSpan]="6" [hidden]="!isCollapse">
<nz-form-item>
<nz-form-label>用户手机号</nz-form-label>
<nz-form-control>
<input nzSize="large" nz-input formControlName="userPhone" placeholder="请输入" />
</nz-form-control>
</nz-form-item>
</div>
<div nz-col [nzSpan]="6" [hidden]="!isCollapse">
<nz-form-item>
<nz-form-label>商品分类</nz-form-label>
<nz-form-control>
<nz-tree-select
nzPlaceHolder="请选择"
formControlName="goodsType"
[nzNodes]="nodes"
nzShowSearch
></nz-tree-select>
</nz-form-control>
</nz-form-item>
</div>
<div nz-col [nzSpan]="6" [hidden]="!isCollapse">
<nz-form-item>
<nz-form-label>商品品牌</nz-form-label>
<nz-form-control>
<nz-select nzSize="large" nzShowSearch nzAllowClear nzPlaceHolder="请选择" formControlName="goodsBrand">
<nz-option *ngFor="let item of nodesBrand" nzLabel="{{item['title']}}" nzValue="{{item['id']}}"></nz-option>
</nz-select>
</nz-form-control>
</nz-form-item>
</div>
<div nz-col [nzSpan]="6" [hidden]="!isCollapse">
<nz-form-item>
<nz-form-label>支付类型</nz-form-label>
<nz-form-control>
<nz-select nzSize="large" nzShowSearch nzAllowClear nzPlaceHolder="请选择" formControlName="payType">
<nz-option *ngFor="let item of orderPayType" nzLabel="{{item['name']}}" nzValue="{{item['key']}}"></nz-option>
</nz-select>
</nz-form-control>
</nz-form-item>
</div>
<div nz-col [nzSpan]="24" class="search-area">
<button nz-button [nzType]="'primary'" (click)="getRequest()">查询</button>
<button nz-button (click)="reset()">重置</button>
<a class="collapse" (click)="isCollapse = !isCollapse">
{{isCollapse ? '收起至简洁查询' : '更多查询条件'}}
<i nz-icon [nzType]="!isCollapse ? 'down' : 'up'"></i>
</a>
</div>
</div>
</form>
<nz-table #basicTable
[nzScroll]="{ x: '1980px' }"
[nzBordered]="true"
[nzFrontPagination]="false"
[nzShowQuickJumper]="true"
[nzShowTotal]="totalTemplate"
[(nzPageIndex)]="tablePageNum"
(nzPageIndexChange)="getRequest(false)"
[nzTotal]="tableData.total"
[nzData]="tableData.list" >
<thead>
<tr>
<th nzWidth="200px">商品名称</th>
<th nzWidth="100px">商户名称</th>
<th nzWidth="100px">商品图片</th>
<th nzWidth="100px">商品分类</th>
<th nzWidth="100px">商品品牌</th>
<th nzWidth="100px">用户手机号</th>
<th nzWidth="100px">订单号</th>
<th nzWidth="100px">子订单号</th>
<th nzWidth="100px">物流单号</th>
<th nzWidth="60px">创建时间</th>
<th nzWidth="60px">更新时间</th>
<th nzRight nzWidth="70px">支付类型</th>
<th nzRight nzWidth="70px">支付状态</th>
<th nzRight nzWidth="70px">物流状态</th>
<th nzRight nzWidth="80px">操作</th>
</tr>
</thead>
<tbody>
<tr *ngFor="let data of basicTable.data">
<td>{{data.goodsName}} - {{data.goodsSpecsName}}</td>
<td>{{data.merName}}</td>
<td>
<img nz-image width="60px" height="60px" nzSrc="{{imageUrl + data.img }}" [nzFallback]="fallbackImg" alt="" />
</td>
<td>{{data.goodsTypeName}}</td>
<td>{{data.goodsBrandName}}</td>
<td>{{data.userPhone}}</td>
<td>{{data.orderNo}}</td>
<td>{{data.childOrderNo}}</td>
<td>{{data.logisticsNo}}</td>
<td>{{ data.createTime | date: 'yyyy-MM-dd HH:mm'}}</td>
<td>{{ data.updateTime | date: 'yyyy-MM-dd HH:mm'}}</td>
<td nzRight>
<span style="font-size: 30px;" nz-icon [nzIconfont]="data.payType | payType"></span>
</td>
<td nzRight>
{{data.status | orderChildStatus}}
</td>
<td nzRight>
<nz-badge *ngIf="data?.logisticsStatus == null" nzStatus="error" nzText="未发货"></nz-badge>
<nz-badge *ngIf="data?.logisticsStatus == 'DELIVERING'" nzColor="cyan" nzText="{{data.logisticsStatusDesc}}"></nz-badge>
<nz-badge *ngIf="data?.logisticsStatus == 'TRANSPORT'" nzColor="lime" nzText="{{data.logisticsStatusDesc}}"></nz-badge>
<nz-badge *ngIf="data?.logisticsStatus == 'AGENT_SIGN'" nzStatus="success" nzText="{{data.logisticsStatusDesc}}"></nz-badge>
<nz-badge *ngIf="data?.logisticsStatus == 'SIGN'" nzStatus="success" nzText="{{data.logisticsStatusDesc}}"></nz-badge>
<nz-badge *ngIf="data?.logisticsStatus == 'ACCEPT'" nzStatus="processing" nzText="{{data.logisticsStatusDesc}}"></nz-badge>
<nz-badge *ngIf="data?.logisticsStatus == 'FAILED'" nzStatus="error" nzText="{{data.logisticsStatusDesc}}"></nz-badge>
<nz-badge *ngIf="data?.logisticsStatus == 'WAIT_ACCEPT'" nzStatus="default" nzText="{{data.logisticsStatusDesc}}"></nz-badge>
</td>
<td nzRight>
<a (click)="showDetail(data)">详情</a>
<nz-divider nzType="vertical"></nz-divider>
<a nz-dropdown [nzDropdownMenu]="menu">
更多
<span nz-icon nzType="down"></span>
</a>
<nz-dropdown-menu #menu="nzDropdownMenu">
<ul nz-menu nzSelectable>
<li nz-menu-item (click)="getLogisticsNo(data.id)"><a>录入物流编码</a></li>
<li nz-menu-item *ngIf="data.logisticsNo != null" (click)="showLogisticsNo(data.id)"><a>查看物流</a></li>
</ul>
</nz-dropdown-menu>
</td>
</tr>
</tbody>
<ng-template #totalTemplate let-total>总计 {{ total }} 条</ng-template>
<nz-modal [nzWidth]="1400" [(nzVisible)]="orderDetailModal" nzTitle="订单详情" (nzOnCancel)="orderDetailModal = false" (nzOnOk)="orderDetailModal = false">
<ng-container *nzModalContent>
<nz-tabset nzType="card">
<nz-tab nzTitle="订单信息">
<nz-descriptions nzTitle="订单信息" nzBordered>
<nz-descriptions-item nzTitle="商品名称">{{orderGoodsData?.goodsName}} - {{orderGoodsData?.goodsSpecsName}}</nz-descriptions-item>
<nz-descriptions-item nzTitle="用户手机号">{{ orderGoodsData?.userPhone }}</nz-descriptions-item>//.
0 <nz-descriptions-item nzTitle="商品分类">{{ orderGoodsData?.goodsTypeName }}</nz-descriptions-item>
<nz-descriptions-item nzTitle="商品品牌">{{ orderGoodsData?.goodsBrandName }}</nz-descriptions-item>
<nz-descriptions-item nzTitle="商品价格">{{ orderGoodsData?.goodsSpecsOriginalPrice }}</nz-descriptions-item>
<nz-descriptions-item nzTitle="商品数量">{{ orderGoodsData?.goodsCount }}</nz-descriptions-item>
<nz-descriptions-item nzTitle="图片" [nzSpan]="3">
<nz-image-group>
<img nz-image width="80px" [nzFallback]="fallbackImg" nzSrc="{{imageUrl + orderGoodsData.img }}" alt="" />
</nz-image-group>
</nz-descriptions-item>
<nz-descriptions-item nzTitle="物流状态" [nzSpan]="3">
<nz-badge *ngIf="orderGoodsData?.logisticsStatus == null" nzStatus="error" nzText="未发货"></nz-badge>
<nz-badge *ngIf="orderGoodsData?.logisticsStatus == 'DELIVERING'" nzColor="cyan" nzText="{{orderGoodsData.logisticsStatusDesc}}"></nz-badge>
<nz-badge *ngIf="orderGoodsData?.logisticsStatus == 'TRANSPORT'" nzColor="lime" nzText="{{orderGoodsData.logisticsStatusDesc}}"></nz-badge>
<nz-badge *ngIf="orderGoodsData?.logisticsStatus == 'AGENT_SIGN'" nzStatus="success" nzText="{{orderGoodsData.logisticsStatusDesc}}"></nz-badge>
<nz-badge *ngIf="orderGoodsData?.logisticsStatus == 'SIGN'" nzStatus="success" nzText="{{orderGoodsData.logisticsStatusDesc}}"></nz-badge>
<nz-badge *ngIf="orderGoodsData?.logisticsStatus == 'ACCEPT'" nzStatus="processing" nzText="{{orderGoodsData.logisticsStatusDesc}}"></nz-badge>
<nz-badge *ngIf="orderGoodsData?.logisticsStatus == 'FAILED'" nzStatus="error" nzText="{{orderGoodsData.logisticsStatusDesc}}"></nz-badge>
<nz-badge *ngIf="orderGoodsData?.logisticsStatus == 'WAIT_ACCEPT'" nzStatus="default" nzText="{{orderGoodsData.logisticsStatusDesc}}"></nz-badge>
</nz-descriptions-item>
</nz-descriptions>
</nz-tab>
<nz-tab nzTitle="支付信息">
<nz-descriptions nzTitle="支付信息" nzBordered>
<nz-descriptions-item nzTitle="订单号">{{ orderGoodsData?.orderNo }}</nz-descriptions-item>
<nz-descriptions-item nzTitle="子订单号" [nzSpan]="2">{{ orderGoodsData?.childOrderNo }}</nz-descriptions-item>
<nz-descriptions-item nzTitle="支付流水号" [nzSpan]="3">{{ orderGoodsData?.paySerialNo }}</nz-descriptions-item>
<nz-descriptions-item nzTitle="商品总金额" [nzSpan]="3">{{ orderGoodsData?.totalPrice }}</nz-descriptions-item>
<nz-descriptions-item nzTitle="优惠券优惠金额" [nzSpan]="3">{{ orderGoodsData?.couponDiscountPrice }}</nz-descriptions-item>
<nz-descriptions-item nzTitle="积分抵扣优惠金额" [nzSpan]="3">{{ orderGoodsData?.integralDiscountPrice }}</nz-descriptions-item>
<nz-descriptions-item nzTitle="总优惠金额(优惠券优惠金额 + 积分抵扣)" [nzSpan]="3">{{ orderGoodsData?.totalDeductionPrice }}</nz-descriptions-item>
<nz-descriptions-item nzTitle="实付金额" [nzSpan]="3">{{ orderGoodsData?.payRealPrice }}</nz-descriptions-item>
</nz-descriptions>
</nz-tab>
<nz-tab nzTitle="订单时间">
<nz-descriptions nzTitle="订单时间" nzBordered>
<nz-descriptions-item *ngIf="orderGoodsData?.createTime != null" nzTitle="创建时间">{{ orderGoodsData?.createTime | date: 'yyyy-MM-dd HH:mm' }}</nz-descriptions-item>
<nz-descriptions-item *ngIf="orderGoodsData?.payTime != null" nzTitle="支付时间">{{ orderGoodsData?.payTime | date: 'yyyy-MM-dd HH:mm' }}</nz-descriptions-item>
<nz-descriptions-item *ngIf="orderGoodsData?.cancelTime != null" nzTitle="取消时间">{{ orderGoodsData?.cancelTime | date: 'yyyy-MM-dd HH:mm' }}</nz-descriptions-item>
<nz-descriptions-item *ngIf="orderGoodsData?.refundTime != null" nzTitle="退款时间">{{ orderGoodsData?.refundTime | date: 'yyyy-MM-dd HH:mm' }}</nz-descriptions-item>
<nz-descriptions-item *ngIf="orderGoodsData?.finishTime != null" nzTitle="完成时间">{{ orderGoodsData?.finishTime | date: 'yyyy-MM-dd HH:mm' }}</nz-descriptions-item>
<nz-descriptions-item *ngIf="orderGoodsData?.updateTime != null" nzTitle="更新时间">{{ orderGoodsData?.updateTime | date: 'yyyy-MM-dd HH:mm' }}</nz-descriptions-item>
</nz-descriptions>
</nz-tab>
<nz-tab nzTitle="发货信息">
<nz-descriptions nzTitle="发货信息" nzBordered>
<nz-descriptions-item nzTitle="收货人">{{deliveryAddress?.consignee}}</nz-descriptions-item>
<nz-descriptions-item nzTitle="收货电话">{{ deliveryAddress?.phone }}</nz-descriptions-item>
<nz-descriptions-item nzTitle="发货信息" [nzSpan]="3">{{ deliveryAddress?.regionName }} -{{deliveryAddress?.consignee}} -{{ deliveryAddress?.phone }} -{{ deliveryAddress?.address }}</nz-descriptions-item>
</nz-descriptions>
</nz-tab>
</nz-tabset>
</ng-container>
</nz-modal>
<nz-modal [(nzVisible)]="isVisible" nzTitle="新增物流单号" (nzOnCancel)="isVisible = false" (nzOnOk)="handleOk()">
<ng-container *nzModalContent>
<div nz-row>
<div nz-col nzSpan="20">
<nz-form-item>
<nz-form-label [nzSpan]="6">物流单号</nz-form-label>
<nz-form-control [nzSpan]="16">
<input nz-input [(ngModel)]="logisticsNo"/>
</nz-form-control>
</nz-form-item>
</div>
</div>
</ng-container>
</nz-modal>
<nz-modal [(nzVisible)]="orderDetailModalChild" nzTitle="物流详情" (nzOnCancel)="orderDetailModalChild = false" [nzFooter]="null"
nzWidth="1000px" [nzBodyStyle]=" { padding: '20px 20px 30px 20px'}">
<ng-container *nzModalContent>
<nz-spin [nzSpinning]="orderDetailModalLoading">
<nz-timeline [nzReverse]="true" *ngIf="logisticsTraceDetails !== null">
<nz-timeline-item *ngFor="let item of logisticsTraceDetails;let i = index" [nzColor]="i===logisticsTraceDetails.length -1?'green':'gray'">
<p [ngClass]="{'fontColorBlue': i===logisticsTraceDetails.length -1 }">{{item['desc']}}</p>
<p [ngClass]="{'fontColorBlue': i===logisticsTraceDetails.length -1 }">{{item.time | date : 'yyyy-MM-dd HH:mm:ss'}}</p>
</nz-timeline-item>
</nz-timeline>
<nz-result *ngIf="logisticsTraceDetails === null" nzStatus="404" nzTitle="404" nzSubTitle="很抱歉暂无物流信息."></nz-result>
</nz-spin>
</ng-container>
</nz-modal>

@ -0,0 +1,6 @@
.search-area {
margin-bottom: 10px;
}
.search-area button {
margin-right: 8px;
}

@ -0,0 +1,309 @@
import { Component } from '@angular/core';
import {FormGroup, FormsModule, NonNullableFormBuilder, ReactiveFormsModule} from "@angular/forms";
import {NzMessageService} from "ng-zorro-antd/message";
import {NzColDirective, NzRowDirective} from "ng-zorro-antd/grid";
import { NzFormDirective, NzFormModule} from "ng-zorro-antd/form";
import {NzInputDirective} from "ng-zorro-antd/input";
import {NzDatePickerComponent, NzRangePickerComponent} from "ng-zorro-antd/date-picker";
import {NzRadioButtonDirective, NzRadioComponent, NzRadioGroupComponent} from "ng-zorro-antd/radio";
import {NzCellFixedDirective, NzTableComponent, NzTableModule, NzThMeasureDirective} from "ng-zorro-antd/table";
import {NzModalComponent, NzModalContentDirective, NzModalModule} from "ng-zorro-antd/modal";
import {DatePipe, NgClass, NgForOf, NgIf, NgOptimizedImage} from "@angular/common";
import {NzOptionComponent, NzSelectComponent} from "ng-zorro-antd/select";
import {NzButtonComponent} from "ng-zorro-antd/button";
import {NzTabSetComponent, NzTabsModule} from "ng-zorro-antd/tabs";
import {NzDescriptionsModule} from "ng-zorro-antd/descriptions";
import {NzImageDirective, NzImageModule} from "ng-zorro-antd/image";
import {NzIconDirective} from "ng-zorro-antd/icon";
import {NzBadgeComponent} from "ng-zorro-antd/badge";
import {fallbackImg, logisticsStatus, orderPayType} from '../../../data/goods/goods.namespace';
import {NzDividerComponent} from "ng-zorro-antd/divider";
import {NzDropDownADirective, NzDropDownDirective, NzDropdownMenuComponent} from "ng-zorro-antd/dropdown";
import {NzMenuDirective, NzMenuItemComponent} from "ng-zorro-antd/menu";
import {NzResultComponent} from "ng-zorro-antd/result";
import {NzSpinComponent} from "ng-zorro-antd/spin";
import {NzTimelineComponent, NzTimelineItemComponent} from "ng-zorro-antd/timeline";
import {NzTreeSelectComponent} from "ng-zorro-antd/tree-select";
import {environment} from "../../../../environments/environment";
import {OrderGoodsService} from "../../../services/trade/order-goods.service";
import {GoodsService} from "../../../services/goods/goods.service";
import {OrderGoodsData} from "../../../model/order.interface";
import {GoodsStatusPipe} from "../../../pipes/goods/goods-status.pipe";
import {NzPopconfirmDirective} from "ng-zorro-antd/popconfirm";
import {AuditStatusPipe} from "../../../pipes/audit/audit-status.pipe";
import {IconService} from "../../../services/common/icon.service";
import {PayTypePipe} from "../../../pipes/goods/pay-type.pipe";
import {OrderChildStatusPipe} from "../../../pipes/goods/order-child-status.pipe";
import {MerService} from "../../../services/merchant/mer.service";
import {DATA} from "../../../data/login/localStorage.namespace";
import {BrowserStorageService} from "../../../utils/localStorage.service";
@Component({
selector: 'app-goods-logistics-list',
standalone: true,
imports: [
NzColDirective,
NzRowDirective,
NzFormDirective,
ReactiveFormsModule,
NzTreeSelectComponent,
NzInputDirective,
NzSelectComponent,
NzOptionComponent,
NzButtonComponent,
NzTableComponent,
NzImageModule,
NzModalModule,
NzTableModule,
NzFormModule,
NzThMeasureDirective,
NgForOf,
NzImageDirective,
GoodsStatusPipe,
DatePipe,
NzDropdownMenuComponent,
NgIf,
NzMenuDirective,
NzDescriptionsModule,
NzMenuItemComponent,
NzPopconfirmDirective,
NzDividerComponent,
NzDropDownADirective,
NzDropDownDirective,
NzTabsModule,
NzIconDirective,
NzBadgeComponent,
AuditStatusPipe,
NzTabSetComponent,
FormsModule,
NzSpinComponent,
NzTimelineItemComponent,
NgClass,
NzResultComponent,
NzTimelineComponent,
NzDatePickerComponent,
NzRadioButtonDirective,
NzRadioComponent,
NzRadioGroupComponent,
NzRangePickerComponent,
PayTypePipe,
OrderChildStatusPipe,
],
templateUrl: './goods-logistics-list.component.html',
styleUrl: './goods-logistics-list.component.less'
})
export class GoodsLogisticsListComponent {
// 表单页数
tablePageNum = 1;
// 表单数据
tableData: any = {
total: 0,
loading: false,
list: [],
};
// 搜索表单
searchForm: FormGroup;
baseUrl = environment.baseUrl;
imageUrl = environment.imageUrl;
// 商品类型数据
nodes = [];
nodesBrand = [];
orderGoodsData: any;
orderDetailModal = false;
isVisible = false;
orderDetailModalChild = false;
orderDetailModalLoading = false;
logisticsNo: any;
logisticsTraceDetails: any;
goodsOrderId: any;
deliveryAddress: any;
// 更多查询条件
isCollapse = false;
merData: any;
objectType: any;
protected readonly fallbackImg = fallbackImg;
protected readonly orderPayType = orderPayType;
protected readonly logisticsStatus = logisticsStatus;
constructor(private fb: NonNullableFormBuilder,
private msg: NzMessageService,
private storage: BrowserStorageService,
private merService: MerService,
private iconService: IconService,
private orderGoodsService: OrderGoodsService,
private goodsService: GoodsService) {
// 初始化搜索框
this.searchForm = this.fb.group({
logisticsNo: [''],
orderNo: [''],
childOrderNo: [''],
goodsType: [''],
goodsBrand: [''],
merId: [''],
userPhone: [''],
goodsSpecsName: [''],
createTimeArray: [[]],
createTimeSelect: ['1'],
createTimeS: [''],
createTimeE: [''],
goodsName: [''],
payType: [''],
status: [''],
logisticsStatus: [''],
});
this.getRequest();
this.getGoodsTypeNode();
this.getGoodsBrandNode();
this.merList();
this.objectType = this.storage.get(DATA)['account']['objectType'];
}
// 查询商户
public merList() {
let params: any = {
pageNum: 1,
pageSize: 1000,
time: new Date().getTime(),
}
this.merService.queryList(params, (data: any) => {
if (data['return_code'] == '000000') {
this.merData = data['return_data']['list'];
}
});
}
// 查询列表
public getRequest(reset: boolean = false) {
this.searchForm.controls['status'].setValue(2)
if (this.searchForm.controls['createTimeArray'].value != null
&& this.searchForm.controls['createTimeArray'].value.length > 0) {
this.searchForm.controls['createTimeS'].setValue(new Date(this.searchForm.controls['createTimeArray'].value[0]).getTime());
this.searchForm.controls['createTimeE'].setValue(new Date(this.searchForm.controls['createTimeArray'].value[1]).getTime());
} else {
this.searchForm.controls['createTimeS'].setValue(null)
this.searchForm.controls['createTimeE'].setValue(null)
}
this.tableData.loading = true;
if (reset) {
this.tablePageNum = 1;
}
this.searchForm.value.pageNum = this.tablePageNum;
this.searchForm.value.pageSize = 10;
this.searchForm.value.time = new Date().getTime();
this.orderGoodsService.getListGoods(this.searchForm.value , (data: any) => {
if (data['return_code'] == '000000') {
this.tableData = data['return_data'];
} else {
this.msg.error(data['return_msg']);
}
this.tableData.loading = false;
});
}
// 获取商品分类
getGoodsTypeNode() {
this.goodsService.getList({time: new Date().getTime()}, (data: any) => {
if (data['return_code'] === '000000') {
this.getNode(data['return_data']);
}
});
}
// 重制
public reset() {
this.searchForm.reset();
this.getRequest();
}
// 配置数据
getNode(array: any): any {
array.forEach((item: any) => {
if (item.children) {
this.getNode(item.children);
}else {
item["isLeaf"] = true;
}
item["key"] = item.id;
});
this.nodes = array;
}
// 获取商品品牌
getGoodsBrandNode() {
this.goodsService.getListBrandAll( (data: any) => {
if (data['return_code'] == '000000') {
this.nodesBrand = data['return_data'];
}
});
}
getLogisticsNo(id: number): void {
this.goodsOrderId = id;
this.isVisible = true;
}
showDetail(data: OrderGoodsData): void {
this.orderGoodsData = data;
this.findDeliveryAddressById(data.deliveryAddressId);
this.orderDetailModal = true;
}
handleOk(): void {
let params = {
id: this.goodsOrderId,
logisticsNo: this.logisticsNo,
time: new Date().getTime()
}
this.orderGoodsService.updateLogisticsNo(params , (data: any) => {
if (data['return_code'] == '000000') {
this.isVisible = false;
this.getRequest(false);
this.msg.success("成功")
} else {
this.msg.error(data['return_msg']);
}
});
}
showLogisticsNo(id: number): void {
let params = {
id:id,
time: new Date().getTime()
}
this.orderGoodsService.getLogisticsMsg(params , (data: any) => {
if (data['return_code'] == '000000') {
this.orderDetailModalChild = true;
this.getRequest(false);
this.logisticsTraceDetails = data['return_data']['logisticsTraceDetails'];
} else {
this.msg.error(data['return_msg']);
}
});
}
findDeliveryAddressById(id: number): void {
this.goodsService.findDeliveryAddressById(id, (data: any) => {
if (data['return_code'] == '000000') {
this.deliveryAddress = data['return_data'];
} else {
this.msg.error(data['return_msg']);
}
});
}
}

@ -15,7 +15,6 @@ import {NzImageDirective, NzImageModule} from "ng-zorro-antd/image";
import {NzModalModule} from "ng-zorro-antd/modal";
import {DatePipe, NgClass, NgForOf, NgIf} from "@angular/common";
import {GoodsStatusPipe} from "../../../pipes/goods/goods-status.pipe";
import {OrderGoodsStatusPipe} from "../../../pipes/order/order-goods-status.pipe";
import {NzDropDownADirective, NzDropDownDirective, NzDropdownMenuComponent} from "ng-zorro-antd/dropdown";
import {NzMenuDirective, NzMenuItemComponent} from "ng-zorro-antd/menu";
import {NzDescriptionsModule} from "ng-zorro-antd/descriptions";
@ -57,7 +56,6 @@ import {OrderCinemaStatusPipe} from "../../../pipes/goods/order-cinema-status.pi
NzImageDirective,
GoodsStatusPipe,
DatePipe,
OrderGoodsStatusPipe,
NzDropdownMenuComponent,
NgIf,
NzMenuDirective,

@ -0,0 +1,202 @@
<form nz-form [formGroup]="searchForm" class="search_form" [nzLayout]="'vertical'">
<div nz-row [nzGutter]="24">
<div nz-col [nzSpan]="6">
<nz-form-item>
<nz-form-label>商品名称</nz-form-label>
<nz-form-control>
<input nzSize="large" nz-input formControlName="productName" placeholder="请输入" />
</nz-form-control>
</nz-form-item>
</div>
<div nz-col [nzSpan]="6">
<nz-form-item>
<nz-form-label>门店名称</nz-form-label>
<nz-form-control>
<input nzSize="large" nz-input formControlName="storeName" placeholder="请输入" />
</nz-form-control>
</nz-form-item>
</div>
<div nz-col [nzSpan]="6">
<nz-form-item>
<nz-form-label>门店地址</nz-form-label>
<nz-form-control>
<input nzSize="large" nz-input formControlName="storeAddress" placeholder="请输入" />
</nz-form-control>
</nz-form-item>
</div>
<div nz-col [nzSpan]="6">
<nz-form-item>
<nz-form-label>订单号</nz-form-label>
<nz-form-control>
<input nzSize="large" nz-input formControlName="orderNo" placeholder="请输入" />
</nz-form-control>
</nz-form-item>
</div>
<div nz-col [nzSpan]="6">
<nz-form-item>
<nz-form-label>用户手机号</nz-form-label>
<nz-form-control>
<input nzSize="large" nz-input formControlName="userPhone" placeholder="请输入" />
</nz-form-control>
</nz-form-item>
</div>
<div nz-col [nzSpan]="6">
<nz-form-item>
<nz-form-label>订单状态</nz-form-label>
<nz-form-control>
<nz-select nzSize="large" nzShowSearch nzAllowClear nzPlaceHolder="请选择" formControlName="status">
<nz-option *ngFor="let item of orderGoodsChild" nzLabel="{{item['name']}}" nzValue="{{item['key']}}"></nz-option>
</nz-select>
</nz-form-control>
</nz-form-item>
</div>
<div nz-col [nzSpan]="6">
<nz-form-item>
<nz-form-label>支付类型</nz-form-label>
<nz-form-control>
<nz-select nzSize="large" nzShowSearch nzAllowClear nzPlaceHolder="请选择" formControlName="status">
<nz-option *ngFor="let item of orderPayType" nzLabel="{{item['name']}}" nzValue="{{item['key']}}"></nz-option>
</nz-select>
</nz-form-control>
</nz-form-item>
</div>
<div nz-col [nzSpan]="6">
<nz-form-item>
<nz-form-label>创建时间</nz-form-label>
<nz-form-control>
<nz-range-picker nzSize="large" formControlName="createTimeArray" [nzFormat]="'yyyy/MM/dd'"></nz-range-picker>
</nz-form-control>
</nz-form-item>
</div>
<div nz-col [nzSpan]="24" class="search-area">
<button nz-button [nzType]="'primary'" (click)="getRequest()">查询</button>
<button nz-button (click)="reset()">重置</button>
</div>
</div>
</form>
<nz-table #basicTable
[nzScroll]="{ x: '1980px' }"
[nzBordered]="true"
[nzFrontPagination]="false"
[nzShowQuickJumper]="true"
[nzShowTotal]="totalTemplate"
[(nzPageIndex)]="tablePageNum"
(nzPageIndexChange)="getRequest(false)"
[nzTotal]="tableData.total"
[nzData]="tableData.list" >
<thead>
<tr>
<th nzWidth="200px">商品名称</th>
<th nzWidth="200px">门店名称</th>
<th nzWidth="200px">门店地址</th>
<th nzWidth="100px">用户手机号</th>
<th nzWidth="100px">订单号</th>
<th nzWidth="100px">子订单号</th>
<th nzWidth="100px">渠道订单号</th>
<th nzWidth="100px">订单价格</th>
<th nzWidth="100px">创建时间</th>
<th nzWidth="100px">更新时间</th>
<th nzRight nzWidth="80px">支付类型</th>
<th nzRight nzWidth="100px">状态</th>
<th nzRight nzWidth="70px">操作</th>
</tr>
</thead>
<tbody>
<tr *ngFor="let data of basicTable.data">
<td>{{data.productName}} | {{data.productSpecName}}</td>
<td>{{data.storeName}}</td>
<td>{{data.storeAddress}}</td>
<td>{{data.userPhone}}</td>
<td>{{data.orderNo}}</td>
<td>{{data.childOrderNo}}</td>
<td>{{data.channelOrderNo}}</td>
<td>¥{{data.productPrice}}</td>
<td>{{ data.createTime | date: 'yyyy-MM-dd HH:mm'}}</td>
<td>{{ data.updateTime | date: 'yyyy-MM-dd HH:mm'}}</td>
<td nzRight>
<span style="font-size: 30px;" nz-icon [nzIconfont]="data.payType | payType"></span>
</td>
<td nzRight>{{data.status | orderChildStatus}}</td>
<td nzRight>
<a (click)="showDetail(data.orderNo)">详情</a>
</td>
</tr>
</tbody>
<ng-template #totalTemplate let-total>总计 {{ total }} 条</ng-template>
<nz-modal [nzWidth]="1400" [(nzVisible)]="orderDetailModal" nzTitle="订单详情" (nzOnCancel)="orderDetailModal = false" (nzOnOk)="orderDetailModal = false">
<ng-container *nzModalContent>
<nz-tabset nzType="card">
<nz-tab nzTitle="订单信息">
<nz-descriptions nzTitle="订单信息" nzBordered>
<nz-descriptions-item nzTitle="商品名称">
<p [innerHTML]="orderChild?.productSpecName"></p>
</nz-descriptions-item>
<nz-descriptions-item nzTitle="用户手机号">{{ orderGoodsData?.userPhone }}</nz-descriptions-item>
<nz-descriptions-item nzTitle="订单状态">
<nz-badge nzStatus="{{orderChild?.business['status'] | orderStarbucksType }}" nzText="{{ orderChild?.business['status'] | orderStarbucks }}"></nz-badge>
</nz-descriptions-item>
<nz-descriptions-item nzTitle="门店名称">{{ orderChild?.business['storeName'] }}</nz-descriptions-item>
<nz-descriptions-item nzTitle="门店地址">{{ orderChild?.business['storeAddress'] }}</nz-descriptions-item>
</nz-descriptions>
</nz-tab>
<nz-tab nzTitle="商品信息">
<nz-table #basicTable [nzBordered]="true" [nzData]="orderChild?.business['orderItemList']">
<thead>
<tr>
<th>产品名称</th>
<th>产品图片</th>
<th>规格</th>
<th>数量</th>
<th>单价</th>
<th>总价</th>
</tr>
</thead>
<tbody>
<tr *ngFor="let data of basicTable.data">
<td>{{data.name}}</td>
<td>
<img nz-image width="80px" [nzFallback]="fallbackImg" nzSrc="{{data.img }}" alt="" />
</td>
<td>{{data.speList}}</td>
<td>{{data.num}}</td>
<td>¥{{data.price}}</td>
<td>¥{{data.totalPrice}}</td>
</tr>
</tbody>
</nz-table>
</nz-tab>
<nz-tab nzTitle="支付信息">
<nz-descriptions nzTitle="支付信息" nzBordered>
<nz-descriptions-item nzTitle="订单号">{{ orderChild?.orderNo }}</nz-descriptions-item>
<nz-descriptions-item nzTitle="子订单号" [nzSpan]="2">{{ orderChild?.childOrderNo }}</nz-descriptions-item>
<nz-descriptions-item nzTitle="支付流水号" [nzSpan]="3">{{ orderGoodsData?.paySerialNo }}</nz-descriptions-item>
<nz-descriptions-item nzTitle="商品总金额" [nzSpan]="3">¥{{ orderGoodsData?.totalPrice }}</nz-descriptions-item>
<nz-descriptions-item nzTitle="优惠券优惠金额" [nzSpan]="3">¥{{ orderChild?.couponDiscountPrice }}</nz-descriptions-item>
<nz-descriptions-item nzTitle="积分抵扣优惠金额" [nzSpan]="3">¥{{ orderChild?.integralDiscountPrice/100 }}</nz-descriptions-item>
<nz-descriptions-item nzTitle="总优惠金额(优惠券优惠金额 + 积分抵扣)" [nzSpan]="3">¥{{ orderChild?.totalDeductionPrice }}</nz-descriptions-item>
<nz-descriptions-item nzTitle="实付金额" [nzSpan]="3">¥{{ orderGoodsData?.payRealPrice }}</nz-descriptions-item>
</nz-descriptions>
</nz-tab>
<nz-tab nzTitle="订单时间">
<nz-descriptions nzTitle="订单时间" nzBordered>
<nz-descriptions-item *ngIf="orderGoodsData?.createTime != null" nzTitle="创建时间">{{ orderGoodsData?.createTime | date: 'yyyy-MM-dd HH:mm' }}</nz-descriptions-item>
<nz-descriptions-item *ngIf="orderGoodsData?.payTime != null" nzTitle="支付时间">{{ orderGoodsData?.payTime | date: 'yyyy-MM-dd HH:mm' }}</nz-descriptions-item>
<nz-descriptions-item *ngIf="orderGoodsData?.cancelTime != null" nzTitle="取消时间">{{ orderGoodsData?.cancelTime | date: 'yyyy-MM-dd HH:mm' }}</nz-descriptions-item>
<nz-descriptions-item *ngIf="orderGoodsData?.refundTime != null" nzTitle="退款时间">{{ orderGoodsData?.refundTime | date: 'yyyy-MM-dd HH:mm' }}</nz-descriptions-item>
<nz-descriptions-item *ngIf="orderGoodsData?.finishTime != null" nzTitle="完成时间">{{ orderGoodsData?.finishTime | date: 'yyyy-MM-dd HH:mm' }}</nz-descriptions-item>
<nz-descriptions-item *ngIf="orderGoodsData?.updateTime != null" nzTitle="更新时间">{{ orderGoodsData?.updateTime | date: 'yyyy-MM-dd HH:mm' }}</nz-descriptions-item>
</nz-descriptions>
</nz-tab>
</nz-tabset>
</ng-container>
</nz-modal>

@ -0,0 +1,9 @@
.search-area {
margin-bottom: 10px;
}
.search-area button {
margin-right: 8px;
}
.fontColor {
color: red;
}

@ -0,0 +1,177 @@
import { Component } from '@angular/core';
import {FormGroup, NonNullableFormBuilder, ReactiveFormsModule} from "@angular/forms";
import {NzMessageService} from "ng-zorro-antd/message";
import {NzColDirective, NzRowDirective} from "ng-zorro-antd/grid";
import {NzFormControlComponent, NzFormDirective, NzFormLabelComponent, NzFormModule} from "ng-zorro-antd/form";
import {NzInputDirective} from "ng-zorro-antd/input";
import {NzDatePickerComponent, NzRangePickerComponent} from "ng-zorro-antd/date-picker";
import {NzRadioButtonDirective, NzRadioComponent, NzRadioGroupComponent} from "ng-zorro-antd/radio";
import {DatePipe, NgClass, NgForOf, NgIf, NgOptimizedImage} from "@angular/common";
import {NzOptionComponent, NzSelectComponent} from "ng-zorro-antd/select";
import {NzButtonComponent} from "ng-zorro-antd/button";
import {NzCellFixedDirective, NzTableComponent, NzTableModule, NzThMeasureDirective} from "ng-zorro-antd/table";
import {NzModalComponent, NzModalContentDirective, NzModalModule} from "ng-zorro-antd/modal";
import {NzTabComponent, NzTabSetComponent} from "ng-zorro-antd/tabs";
import {NzDescriptionsComponent, NzDescriptionsItemComponent} from "ng-zorro-antd/descriptions";
import {NzImageDirective, NzImageGroupComponent, NzImageModule} from "ng-zorro-antd/image";
import {OrderStarbucksService} from "../../../services/trade/order-starbucks.service";
import {OrderStarbucksPipe} from "../../../pipes/goods/order-starbucks.pipe";
import {
fallbackImg,
orderGoodsChild,
orderPayType,
} from "../../../data/goods/goods.namespace";
import {DateUtils} from "../../../utils/dateUtils.service";
import {OrderChildStatusPipe} from "../../../pipes/goods/order-child-status.pipe";
import {OrderService} from "../../../services/trade/order.service";
import {OrderCinemaStatusPipe} from "../../../pipes/goods/order-cinema-status.pipe";
import {PayTypePipe} from "../../../pipes/goods/pay-type.pipe";
import {NzIconDirective, NzIconService} from "ng-zorro-antd/icon";
import {IconService} from "../../../services/common/icon.service";
import {NzBadgeComponent} from "ng-zorro-antd/badge";
import {OrderStarbucksTypePipe} from "../../../pipes/goods/order-starbucks-type.pipe";
@Component({
selector: 'app-order-starbucks',
standalone: true,
imports: [
ReactiveFormsModule,
NzRowDirective,
NzFormLabelComponent,
NzFormControlComponent,
NzColDirective,
NzInputDirective,
NzDatePickerComponent,
NzRadioGroupComponent,
NzRadioButtonDirective,
NzTableModule,
NzModalModule,
NzFormModule,
NgForOf,
NzRadioComponent,
NzSelectComponent,
NzButtonComponent,
NzTableComponent,
NzThMeasureDirective,
NzCellFixedDirective,
NgClass,
DatePipe,
NzModalComponent,
NzTabSetComponent,
NzDescriptionsComponent,
NzTabComponent,
NzDescriptionsItemComponent,
NzImageGroupComponent,
NzImageDirective,
NzFormDirective,
NzImageModule,
NzModalContentDirective,
OrderStarbucksPipe,
NzOptionComponent,
NzRangePickerComponent,
OrderChildStatusPipe,
NgIf,
OrderCinemaStatusPipe,
PayTypePipe,
NgOptimizedImage,
NzIconDirective,
NzBadgeComponent,
OrderStarbucksTypePipe
],
templateUrl: './order-starbucks.component.html',
styleUrl: './order-starbucks.component.less'
})
export class OrderStarbucksComponent {
// 表单页数
tablePageNum = 1;
// 表单数据
tableData: any = {
total: 0,
loading: false,
list: [],
};
// 搜索表单
searchForm: FormGroup;
orderDetailModal = false;
orderGoodsData: any;
orderChild: any;
protected readonly orderGoodsChild = orderGoodsChild;
protected readonly orderPayType = orderPayType;
constructor(private fb: NonNullableFormBuilder,
private msg: NzMessageService,
private iconService: IconService,
private orderService: OrderService,
private orderStarbucks: OrderStarbucksService) {
// 初始化搜索框
this.searchForm = this.fb.group({
orderNo: [''],
childOrderNo: [''],
userPhone: [''],
productName: [''],
storeName: [''],
storeAddress: [''],
createTimeArray: [[]],
createTimeS: [''],
createTimeE: [''],
goodsName: [''],
payType: [''],
status: [''],
});
this.getRequest();
}
// 查询列表
public getRequest(reset: boolean = false) {
if (this.searchForm.controls['createTimeArray'].value != null
&& this.searchForm.controls['createTimeArray'].value.length > 0) {
this.searchForm.controls['createTimeS'].setValue(DateUtils.getDateHMS(new Date(this.searchForm.controls['createTimeArray'].value[0]) , 1).getTime());
this.searchForm.controls['createTimeE'].setValue(DateUtils.getDateHMS(new Date(this.searchForm.controls['createTimeArray'].value[1]) , 2).getTime());
} else {
this.searchForm.controls['createTimeS'].setValue(null)
this.searchForm.controls['createTimeE'].setValue(null)
}
this.tableData.loading = true;
if (reset) {
this.tablePageNum = 1;
}
this.searchForm.value.pageNum = this.tablePageNum;
this.searchForm.value.pageSize = 10;
this.searchForm.value.time = new Date().getTime();
this.orderStarbucks.getListStarbucks(this.searchForm.value , (data: any) => {
if (data['return_code'] == '000000') {
this.tableData = data['return_data'];
} else {
this.msg.error(data['return_msg']);
}
this.tableData.loading = false;
});
}
// 重制
public reset() {
this.searchForm.reset();
this.getRequest();
}
// 查询详情
showDetail(orderNo: string): void {
this.orderService.queryOrder(orderNo , (data: any) => {
if (data['return_code'] == '000000') {
this.orderGoodsData = data['return_data'];
this.orderChild = this.orderGoodsData['orderChildList'][0]
} else {
this.msg.error(data['return_msg']);
}
})
this.orderDetailModal = true;
}
protected readonly fallbackImg = fallbackImg;
}

@ -4,6 +4,8 @@ import {OrderAfterSalesComponent} from "./order-after-sales/order-after-sales.co
import {GoodsListComponent} from "./goods-list/goods-list.component";
import {OrderRefundComponent} from "./order-refund/order-refund.component";
import {OrderCinemaComponent} from "./order-cinema/order-cinema.component";
import {OrderStarbucksComponent} from "./order-starbucks/order-starbucks.component";
import {GoodsLogisticsListComponent} from "./goods-logistics-list/goods-logistics-list.component";
export const TRADE_ROUTES: Routes = [
{ path: 'goods-list', component: GoodsListComponent },
@ -11,4 +13,6 @@ export const TRADE_ROUTES: Routes = [
{ path: 'order-after-sales', component: OrderAfterSalesComponent },
{ path: 'order-refund', component: OrderRefundComponent },
{ path: 'order-cinema', component: OrderCinemaComponent },
{ path: 'order-starbucks', component: OrderStarbucksComponent },
{ path: 'goods-logistics-list', component: GoodsLogisticsListComponent },
];

@ -0,0 +1,16 @@
import { Pipe, PipeTransform } from '@angular/core';
@Pipe({
name: 'dataUtils',
standalone: true
})
export class DataUtilsPipe implements PipeTransform {
transform(data: any, length: number): any {
if (data.length == 0) {
return [];
}
return data.slice(0 , length);
}
}

@ -0,0 +1,30 @@
import { Pipe, PipeTransform } from '@angular/core';
@Pipe({
name: 'businessType',
standalone: true
})
export class BusinessTypePipe implements PipeTransform {
transform(value: number): any {
switch (value) {
case 1:
return '实物产品';
case 2:
return '虚拟产品';
case 3:
return '肯德基';
case 4:
return '星巴克';
case 5:
return '支付订单';
case 6:
return '物流上传订单';
case 7:
return '物流下载订单';
default:
return '未知状态'
}
}
}

@ -0,0 +1,22 @@
import { Pipe, PipeTransform } from '@angular/core';
@Pipe({
name: 'status',
standalone: true
})
export class StatusPipe implements PipeTransform {
transform(value: number): any {
switch (value) {
case 1:
return '成功';
case 2:
return '导出中';
case 3:
return '失败';
default:
return '未知状态'
}
}
}

@ -0,0 +1,28 @@
import { Pipe, PipeTransform } from '@angular/core';
@Pipe({
name: 'orderChildStatus',
standalone: true
})
export class OrderChildStatusPipe implements PipeTransform {
transform(value: number): any {
switch (value) {
case 1:
return '待支付';
case 2:
return '已支付';
case 3:
return '已完成';
case 4:
return '已退款';
case 5:
return '已取消';
case 6:
return '退款中';
default:
return '未知状态'
}
}
}

@ -0,0 +1,32 @@
import { Pipe, PipeTransform } from '@angular/core';
@Pipe({
name: 'orderStarbucksType',
standalone: true
})
export class OrderStarbucksTypePipe implements PipeTransform {
transform(value: number): any {
switch (value) {
case 0:
return 'warning';
case 5:
return 'processing';
case 10:
return 'processing';
case 15:
return 'success';
case 20:
return 'processing';
case 25:
return 'success';
case -5:
return 'default';
case -10:
return 'error';
default:
return 'error'
}
}
}

@ -0,0 +1,32 @@
import { Pipe, PipeTransform } from '@angular/core';
@Pipe({
name: 'orderStarbucks',
standalone: true
})
export class OrderStarbucksPipe implements PipeTransform {
transform(value: number): any {
switch (value) {
case 0:
return '待付款';
case 5:
return '已支付';
case 10:
return '出单中';
case 15:
return '出单成功';
case 20:
return '配送中';
case 25:
return '配送完成';
case -5:
return '已取消';
case -10:
return '失败';
default:
return '未知状态'
}
}
}

@ -0,0 +1,25 @@
import { Pipe, PipeTransform } from '@angular/core';
import {aliLogo, gzBankLogo, hltLogo, noPayLogo, wxLogo} from "../../data/goods/goods.namespace";
@Pipe({
name: 'payType',
standalone: true
})
export class PayTypePipe implements PipeTransform {
transform(value: number): any {
switch (value) {
case 1:
return "icon-weixin";
case 2:
return "icon-zhifubao";
case 3:
return "icon-guizhouyinhanglogo";
case 4:
return "icon-work_icon_party-01";
default:
return "icon-daizhifu"
}
}
}

@ -1,32 +0,0 @@
import { Pipe, PipeTransform } from '@angular/core';
@Pipe({
name: 'orderGoodsStatus',
standalone: true
})
export class OrderGoodsStatusPipe implements PipeTransform {
transform(value: number): any {
switch (value) {
case 1:
return '待发货';
case 2:
return '已发货';
case 3:
return '配送中';
case 4:
return '已送达';
case 5:
return '已取消';
case 6:
return '退货中';
case 7:
return '已退货';
case 8:
return '待支付';
default:
return '未知状态'
}
}
}

@ -0,0 +1,17 @@
import { Injectable } from '@angular/core';
import {Subject} from "rxjs";
@Injectable({
providedIn: 'root'
})
export class CommunicationService {
private messageSource = new Subject<any>();
currentMessage = this.messageSource.asObservable();
constructor() { }
sendMessage(message: string) {
this.messageSource.next(message);
}
}

@ -0,0 +1,14 @@
import { Injectable } from '@angular/core';
import {NzIconService} from "ng-zorro-antd/icon";
@Injectable({
providedIn: 'root'
})
export class IconService {
constructor(private iconService: NzIconService) {
this.iconService.fetchFromIconfont({
scriptUrl: 'https://at.alicdn.com/t/c/font_4647823_ys5j7ogeas.js'
});
}
}

@ -0,0 +1,41 @@
import { Injectable } from '@angular/core';
import {HttpClient} from "@angular/common/http";
import {environment} from "../../../environments/environment";
import {ObjectData} from "../../utils/objectData.service";
@Injectable({
providedIn: 'root'
})
export class FileService {
constructor(private http: HttpClient) { }
/**
*
* @param params
* @param callBack
*/
public getFileRecordsList(params: object, callBack:any) {
this.http.get(environment.baseUrl + 'file/getFileRecordsList?' + ObjectData.objectByString(params)).subscribe(data => {
callBack(data);
});
}
/**
*
* @param id
* @param callBack
*/
public findFileRecords(id: number, callBack:any) {
this.http.get(environment.baseUrl + 'file/findFileRecords?id=' + id + "&time=" + new Date().getTime()).subscribe(data => {
callBack(data);
});
}
public getDownLoad(id: number, callBack:any) {
this.http.get(environment.baseUrl + 'file/getDownLoad?id=' + id + "&time=" + new Date().getTime()).subscribe(data => {
callBack(data);
});
}
}

@ -32,4 +32,15 @@ export class OrderGoodsService {
callBack(data);
});
}
/**
*
* @param param
* @param callBack
*/
public exportGoodsOrder(param: object, callBack:any) {
this.http.get(environment.orderUrl + 'orderGoods/exportGoodsOrder?'+ObjectData.objectByString(param)).subscribe(data => {
callBack(data);
});
}
}

@ -0,0 +1,24 @@
import { Injectable } from '@angular/core';
import {HttpClient} from "@angular/common/http";
import {environment} from "../../../environments/environment";
import {ObjectData} from "../../utils/objectData.service";
@Injectable({
providedIn: 'root'
})
export class OrderStarbucksService {
constructor(private http: HttpClient) { }
/**
*
* @param param
* @param callBack
*/
public getListStarbucks(param: object, callBack:any) {
this.http.get(environment.orderUrl + 'orderStarbucks/getListStarbucks?'+ObjectData.objectByString(param)).subscribe(data => {
callBack(data);
});
}
}

@ -0,0 +1,23 @@
import { Injectable } from '@angular/core';
import {HttpClient} from "@angular/common/http";
import {environment} from "../../../environments/environment";
import {ObjectData} from "../../utils/objectData.service";
@Injectable({
providedIn: 'root'
})
export class OrderService {
constructor(private http: HttpClient) { }
/**
*
* @param orderNo
* @param callBack
*/
public queryOrder(orderNo: string, callBack:any) {
this.http.get(environment.orderUrl + 'queryOrder?orderNo='+ orderNo).subscribe(data => {
callBack(data);
});
}
}

@ -119,4 +119,23 @@ export class DateUtils {
return returnObj;
}
/**
*
* @param currentDate
* @param type 1 2:结束时间
*/
public static getDateHMS(currentDate: Date , type: number): any {
if (type == 1) {
currentDate.setHours(0);
currentDate.setMinutes(0);
currentDate.setSeconds(0);
}
if (type == 2) {
currentDate.setHours(23);
currentDate.setMinutes(59);
currentDate.setSeconds(59);
}
return currentDate;
}
}

@ -4,15 +4,15 @@
export const environment = {
production: false,
// baseUrl: 'https://phg.dctpay.com/brest/', // 测试环境服务器地址(请求数据地址)
// orderUrl: 'https://phg.dctpay.com/order/', // 测试环境服务器地址(请求数据地址)
// userUrl: 'https://phg.dctpay.com/user/', // 测试环境服务器地址(请求数据地址)
// imageUrl: 'https://phg.obs.cn-southwest-2.myhuaweicloud.com/',
baseUrl: 'http://localhost:9702/brest/', // 测试环境服务器地址(请求数据地址)
orderUrl: 'http://localhost:9703/order/', // 测试环境服务器地址(请求数据地址)
userUrl: 'http://localhost:9704/user/', // 测试环境服务器地址(请求数据地址)
imageUrl: 'https://phg-test.obs.cn-southwest-2.myhuaweicloud.com/',
baseUrl: 'https://phg.dctpay.com/brest/', // 测试环境服务器地址(请求数据地址)
orderUrl: 'https://phg.dctpay.com/order/', // 测试环境服务器地址(请求数据地址)
userUrl: 'https://phg.dctpay.com/user/', // 测试环境服务器地址(请求数据地址)
imageUrl: 'https://phg.obs.cn-southwest-2.myhuaweicloud.com/',
//
// baseUrl: 'http://localhost:9702/brest/', // 测试环境服务器地址(请求数据地址)
// orderUrl: 'http://localhost:9703/order/', // 测试环境服务器地址(请求数据地址)
// userUrl: 'http://localhost:9704/user/', // 测试环境服务器地址(请求数据地址)
// imageUrl: 'https://phg-test.obs.cn-southwest-2.myhuaweicloud.com/',
};

Loading…
Cancel
Save