diff --git a/src/app/app.routes.ts b/src/app/app.routes.ts
index 58649d1..bd87b7f 100644
--- a/src/app/app.routes.ts
+++ b/src/app/app.routes.ts
@@ -1,7 +1,8 @@
import { Routes } from '@angular/router';
import {IndexComponent} from "./pages/body/index/index.component";
import {InitGuardService} from "./utils/initGuard.service";
-import {AUDIT_ROUTES} from "./pages/audit/audit.routes";
+import {ERROR_ROUTES} from "./pages/error/error.routes";
+import {Error404Component} from "./pages/error/error404/error404.component";
export const routes: Routes = [
{path: '', pathMatch: 'full', redirectTo: 'admin/index'},
{
@@ -55,6 +56,14 @@ export const routes: Routes = [
loadChildren: () => import('./pages/audit/audit.routes').then(m => m.AUDIT_ROUTES),
canActivate: [InitGuardService]
},
+
]
- }
+ },
+ {
+ path: 'error',
+ loadChildren: () => import('./pages/error/error.routes').then(m => m.ERROR_ROUTES),
+ },
+ {
+ path: '**', component: Error404Component
+ },
];
diff --git a/src/app/data/goods/goods.namespace.ts b/src/app/data/goods/goods.namespace.ts
index c7853d8..74b6a34 100644
--- a/src/app/data/goods/goods.namespace.ts
+++ b/src/app/data/goods/goods.namespace.ts
@@ -1,3 +1,13 @@
export const fallbackImg = 'data:image/png;base64,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';
+export const orderGoodsStatus = [
+ {name: "待发货" , key: 1} ,
+ {name: "已发货" , key: 2},
+ {name: "配送中" , key: 3},
+ {name: "已送达" , key: 4},
+ {name: "已取消" , key: 5},
+ {name: "退货中" , key: 6},
+ {name: "已退货" , key: 7},
+ {name: "待支付" , key: 8}
+];
diff --git a/src/app/model/discount.interface.ts b/src/app/model/discount.interface.ts
index 94295b0..137c62a 100644
--- a/src/app/model/discount.interface.ts
+++ b/src/app/model/discount.interface.ts
@@ -10,14 +10,14 @@ export interface DiscountData {
effectiveNum: number;
createTime: string;
updateTime: string;
- salesEndTime: string,
+ salesEndTime: string;
}
export interface NodesDiscountGoods {
id: number;
discountId: number;
- specsId: String;
- specsName: String;
+ specsId: string;
+ specsName: string;
createTime: string;
goodsName: string;
SpecsName: string;
diff --git a/src/app/model/order.interface.ts b/src/app/model/order.interface.ts
new file mode 100644
index 0000000..30b2c5b
--- /dev/null
+++ b/src/app/model/order.interface.ts
@@ -0,0 +1,39 @@
+
+export interface OrderGoodsData {
+ id: number;
+ logisticsNo: string;
+ freightPrice: string;
+ deliveryAddressId: number;
+ deliveryAddress: string;
+ orderNo: string;
+ childOrderNo: string;
+ merId: number;
+ userId: number;
+ userPhone: string;
+ goodsId: number;
+ img: string;
+ goodsName: string;
+ goodsTypeId: number;
+ goodsTypeName: string,
+ goodsBrandId: number;
+ goodsBrandName: string;
+ goodsSpecsId: number;
+ goodsSpecsName: string;
+ goodsSpecsOriginalPrice: string;
+ goodsCount: string;
+ totalPrice: string;
+ totalDeductionPrice: string;
+ couponDiscountPrice: string;
+ integralDiscountPrice: string;
+ payRealPrice: string;
+ payChannel: string;
+ paySerialNo: string;
+ payType: number;
+ status: number;
+ createTime: string;
+ payTime: string;
+ cancelTime: string;
+ refundTime: string;
+ finishTime: string;
+ updateTime: string;
+}
diff --git a/src/app/pages/error/error.module.ts b/src/app/pages/error/error.module.ts
new file mode 100644
index 0000000..d4b3183
--- /dev/null
+++ b/src/app/pages/error/error.module.ts
@@ -0,0 +1,12 @@
+import { NgModule } from '@angular/core';
+import { CommonModule } from '@angular/common';
+
+
+
+@NgModule({
+ declarations: [],
+ imports: [
+ CommonModule
+ ]
+})
+export class ErrorModule { }
diff --git a/src/app/pages/error/error.routes.ts b/src/app/pages/error/error.routes.ts
new file mode 100644
index 0000000..b150546
--- /dev/null
+++ b/src/app/pages/error/error.routes.ts
@@ -0,0 +1,15 @@
+import { Routes } from '@angular/router';
+import {Error403Component} from "./error403/error403.component";
+import {Error404Component} from "./error404/error404.component";
+import {Error500Component} from "./error500/error500.component";
+import {Error401Component} from "./error401/error401.component";
+
+
+
+export const ERROR_ROUTES: Routes = [
+
+ { path: '401', component: Error401Component },
+ { path: '403', component: Error403Component },
+ { path: '404', component: Error404Component },
+ { path: '500', component: Error500Component },
+];
diff --git a/src/app/pages/error/error401/error401.component.html b/src/app/pages/error/error401/error401.component.html
new file mode 100644
index 0000000..727e860
--- /dev/null
+++ b/src/app/pages/error/error401/error401.component.html
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/src/app/pages/error/error401/error401.component.less b/src/app/pages/error/error401/error401.component.less
new file mode 100644
index 0000000..e69de29
diff --git a/src/app/pages/error/error401/error401.component.ts b/src/app/pages/error/error401/error401.component.ts
new file mode 100644
index 0000000..deb3ba9
--- /dev/null
+++ b/src/app/pages/error/error401/error401.component.ts
@@ -0,0 +1,44 @@
+import { Component } from '@angular/core';
+import {NzResultModule} from "ng-zorro-antd/result";
+import {NzButtonComponent} from "ng-zorro-antd/button";
+import {BrowserStorageService} from "../../../utils/localStorage.service";
+import {NzMessageService} from "ng-zorro-antd/message";
+import {Router} from "@angular/router";
+import {LoginService} from "../../../services/login/login.service";
+import {DATA, INIT_FLAG, LOGIN_DATA, USER_TOKEN} from "../../../data/login/localStorage.namespace";
+
+
+@Component({
+ selector: 'app-error401',
+ standalone: true,
+ imports: [
+ NzResultModule,
+ NzButtonComponent
+ ],
+ templateUrl: './error401.component.html',
+ styleUrl: './error401.component.less'
+})
+export class Error401Component {
+ constructor(
+ private storage: BrowserStorageService,
+ private message: NzMessageService,
+ private router: Router, // 路由
+ private login: LoginService
+ ) {}
+
+
+ // 退出登录
+ public loginOut(): void {
+ this.login.loginOut( (data: any) => {
+ if (data['return_code'] === '000000') {
+ this.storage.remove(LOGIN_DATA);
+ this.storage.remove(DATA);
+ this.storage.remove(USER_TOKEN);
+ this.storage.remove(INIT_FLAG);
+ this.router.navigateByUrl('/login').then();
+ } else {
+ this.message.error(data['return_msg']);
+ }
+ });
+ }
+}
diff --git a/src/app/pages/error/error403/error403.component.html b/src/app/pages/error/error403/error403.component.html
new file mode 100644
index 0000000..46c2520
--- /dev/null
+++ b/src/app/pages/error/error403/error403.component.html
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/src/app/pages/error/error403/error403.component.less b/src/app/pages/error/error403/error403.component.less
new file mode 100644
index 0000000..e69de29
diff --git a/src/app/pages/error/error403/error403.component.ts b/src/app/pages/error/error403/error403.component.ts
new file mode 100644
index 0000000..118fdfd
--- /dev/null
+++ b/src/app/pages/error/error403/error403.component.ts
@@ -0,0 +1,29 @@
+import { Component } from '@angular/core';
+import {NzResultModule} from "ng-zorro-antd/result";
+import {NzButtonComponent} from "ng-zorro-antd/button";
+
+import {Router} from "@angular/router";
+
+
+@Component({
+ selector: 'app-error403',
+ standalone: true,
+ imports: [
+ NzResultModule,
+ NzButtonComponent
+ ],
+ templateUrl: './error403.component.html',
+ styleUrl: './error403.component.less'
+})
+export class Error403Component {
+ constructor(
+
+ private router: Router, // 路由
+ ) {}
+
+
+ // 退出登录
+ public getHome(): void {
+ this.router.navigateByUrl('/admin/index').then(r => console.log("返回内容" ,r));
+ }
+}
diff --git a/src/app/pages/error/error404/error404.component.html b/src/app/pages/error/error404/error404.component.html
new file mode 100644
index 0000000..39d6250
--- /dev/null
+++ b/src/app/pages/error/error404/error404.component.html
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/src/app/pages/error/error404/error404.component.less b/src/app/pages/error/error404/error404.component.less
new file mode 100644
index 0000000..e69de29
diff --git a/src/app/pages/error/error404/error404.component.ts b/src/app/pages/error/error404/error404.component.ts
new file mode 100644
index 0000000..3cdfe47
--- /dev/null
+++ b/src/app/pages/error/error404/error404.component.ts
@@ -0,0 +1,27 @@
+import { Component } from '@angular/core';
+import {Router} from "@angular/router";
+import {NzResultModule} from "ng-zorro-antd/result";
+import {NzButtonComponent} from "ng-zorro-antd/button";
+
+@Component({
+ selector: 'app-error404',
+ standalone: true,
+ imports: [
+ NzResultModule,
+ NzButtonComponent
+ ],
+ templateUrl: './error404.component.html',
+ styleUrl: './error404.component.less'
+})
+export class Error404Component {
+ constructor(
+
+ private router: Router, // 路由
+ ) {}
+
+
+ // 退出登录
+ public getHome(): void {
+ this.router.navigateByUrl('/admin/index').then(r => console.log("返回内容" ,r));
+ }
+}
diff --git a/src/app/pages/error/error500/error500.component.html b/src/app/pages/error/error500/error500.component.html
new file mode 100644
index 0000000..fdb4e3f
--- /dev/null
+++ b/src/app/pages/error/error500/error500.component.html
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/src/app/pages/error/error500/error500.component.less b/src/app/pages/error/error500/error500.component.less
new file mode 100644
index 0000000..e69de29
diff --git a/src/app/pages/error/error500/error500.component.ts b/src/app/pages/error/error500/error500.component.ts
new file mode 100644
index 0000000..16a98f7
--- /dev/null
+++ b/src/app/pages/error/error500/error500.component.ts
@@ -0,0 +1,27 @@
+import { Component } from '@angular/core';
+import {NzResultModule} from "ng-zorro-antd/result";
+import {NzButtonComponent} from "ng-zorro-antd/button";
+import {Router} from "@angular/router";
+
+@Component({
+ selector: 'app-error500',
+ standalone: true,
+ imports: [
+ NzResultModule,
+ NzButtonComponent
+ ],
+ templateUrl: './error500.component.html',
+ styleUrl: './error500.component.less'
+})
+export class Error500Component {
+ constructor(
+
+ private router: Router, // 路由
+ ) {}
+
+
+ // 退出登录
+ public getHome(): void {
+ this.router.navigateByUrl('/admin/index').then(r => console.log("返回内容" ,r));
+ }
+}
diff --git a/src/app/pages/trade/goods-list/goods-list.component.html b/src/app/pages/trade/goods-list/goods-list.component.html
new file mode 100644
index 0000000..1f024dc
--- /dev/null
+++ b/src/app/pages/trade/goods-list/goods-list.component.html
@@ -0,0 +1,214 @@
+
+
+
+
+
+ 商品名称 |
+ 商品图片 |
+ 商品分类 |
+ 商品品牌 |
+ 物流单号 |
+ 创建时间 |
+ 更新时间 |
+ 状态 |
+ 操作 |
+
+
+
+
+ {{data.goodsName}} - {{data.goodsSpecsName}} |
+
+
+ |
+ {{data.goodsTypeName}} |
+ {{data.goodsBrandName}} |
+ {{data.logisticsNo}} |
+ {{ data.createTime | date: 'yyyy-MM-dd HH:mm'}} |
+ {{ data.updateTime | date: 'yyyy-MM-dd HH:mm'}} |
+ {{data.status | orderGoodsStatus}} |
+
+ 详情
+
+
+ 更多
+
+
+
+
+
+ |
+
+
+ 总计 {{ total }} 条
+
+
+
+
+
+
+
+ {{orderGoodsData?.goodsName}} - {{orderGoodsData?.goodsSpecsName}}
+ {{ orderGoodsData?.userPhone }}
+ {{ orderGoodsData?.goodsTypeName }}
+ {{ orderGoodsData?.goodsBrandName }}
+ {{ orderGoodsData?.goodsSpecsOriginalPrice }}
+ {{ orderGoodsData?.goodsCount }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ orderGoodsData?.orderNo }}
+ {{ orderGoodsData?.childOrderNo }}
+ {{ orderGoodsData?.paySerialNo }}
+ {{ orderGoodsData?.totalPrice }}
+ {{ orderGoodsData?.couponDiscountPrice }}
+ {{ orderGoodsData?.integralDiscountPrice }}
+ {{ orderGoodsData?.totalDeductionPrice }}
+ {{ orderGoodsData?.payRealPrice }}
+
+
+
+
+ {{ orderGoodsData?.createTime | date: 'yyyy-MM-dd HH:mm' }}
+ {{ orderGoodsData?.payTime | date: 'yyyy-MM-dd HH:mm' }}
+ {{ orderGoodsData?.cancelTime | date: 'yyyy-MM-dd HH:mm' }}
+ {{ orderGoodsData?.refundTime | date: 'yyyy-MM-dd HH:mm' }}
+ {{ orderGoodsData?.finishTime | date: 'yyyy-MM-dd HH:mm' }}
+ {{ orderGoodsData?.updateTime | date: 'yyyy-MM-dd HH:mm' }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{item['desc']}}
+ {{item.time | date : 'yyyy-MM-dd HH:mm:ss'}}
+
+
+
+
+
+
diff --git a/src/app/pages/trade/goods-list/goods-list.component.less b/src/app/pages/trade/goods-list/goods-list.component.less
new file mode 100644
index 0000000..6d5c351
--- /dev/null
+++ b/src/app/pages/trade/goods-list/goods-list.component.less
@@ -0,0 +1,12 @@
+[nz-form-label] {
+ overflow: visible;
+}
+button {
+ margin-left: 8px;
+}
+.submit-btn {
+ width: 150px;
+}
+.search-area {
+ margin-top: 30px;
+}
diff --git a/src/app/pages/trade/goods-list/goods-list.component.ts b/src/app/pages/trade/goods-list/goods-list.component.ts
new file mode 100644
index 0000000..58ed3af
--- /dev/null
+++ b/src/app/pages/trade/goods-list/goods-list.component.ts
@@ -0,0 +1,242 @@
+import { Component } 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";
+import {
+ NzTableComponent, NzTableModule,
+ NzThMeasureDirective
+} from "ng-zorro-antd/table";
+import {NzColDirective, NzRowDirective} from "ng-zorro-antd/grid";
+
+import {NzFormDirective, NzFormModule} from "ng-zorro-antd/form";
+import {NzImageDirective, NzImageModule,} from "ng-zorro-antd/image";
+import {NzInputDirective} from "ng-zorro-antd/input";
+
+import {NzOptionComponent, NzSelectComponent} from "ng-zorro-antd/select";
+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 {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";
+import {OrderGoodsData} from "../../../model/order.interface";
+import {NzDividerComponent} from "ng-zorro-antd/divider";
+import {NzIconDirective} from "ng-zorro-antd/icon";
+import {NzDescriptionsModule} from "ng-zorro-antd/descriptions";
+import {NzBadgeComponent} from "ng-zorro-antd/badge";
+import {AuditStatusPipe} from "../../../pipes/audit/audit-status.pipe";
+import {NzTabComponent, NzTabSetComponent, NzTabsModule} from "ng-zorro-antd/tabs";
+import {NzSpinComponent} from "ng-zorro-antd/spin";
+import {NzTimelineComponent, NzTimelineItemComponent} from "ng-zorro-antd/timeline";
+import {NzResultComponent} from "ng-zorro-antd/result";
+
+@Component({
+ selector: 'app-goods-list',
+ standalone: true,
+ imports: [
+ NzColDirective,
+ NzRowDirective,
+ NzFormDirective,
+ ReactiveFormsModule,
+ NzTreeSelectComponent,
+ NzInputDirective,
+ NzSelectComponent,
+ NzOptionComponent,
+ NzButtonComponent,
+ NzTableComponent,
+ NzImageModule,
+ NzModalModule,
+ NzTableModule,
+ NzFormModule,
+ NzThMeasureDirective,
+ NgForOf,
+ NzImageDirective,
+ GoodsStatusPipe,
+ DatePipe,
+ OrderGoodsStatusPipe,
+ NzDropdownMenuComponent,
+ NgIf,
+ NzMenuDirective,
+ NzDescriptionsModule,
+ NzMenuItemComponent,
+ NzPopconfirmDirective,
+ NzDividerComponent,
+ NzDropDownADirective,
+ NzDropDownDirective,
+ NzTabsModule,
+ NzIconDirective,
+ NzBadgeComponent,
+ AuditStatusPipe,
+ NzTabSetComponent,
+ FormsModule,
+ NzSpinComponent,
+ NzTimelineItemComponent,
+ NgClass,
+ NzResultComponent,
+ NzTimelineComponent,
+
+ ],
+ templateUrl: './goods-list.component.html',
+ styleUrl: './goods-list.component.less'
+})
+export class GoodsListComponent {
+ // 表单页数
+ 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;
+
+ protected readonly fallbackImg = fallbackImg;
+ protected readonly orderGoodsStatus = orderGoodsStatus;
+
+ constructor(private fb: NonNullableFormBuilder,
+ private msg: NzMessageService,
+ private orderGoodsService: OrderGoodsService,
+ private goodsService: GoodsService) {
+
+
+ // 初始化搜索框
+ this.searchForm = this.fb.group({
+ logisticsNo: [''],
+ orderNo: [''],
+ goodsType: [''],
+ goodsBrand: [''],
+ userPhone: [''],
+ goodsSpecsName: [''],
+ goodsName: [''],
+ payType: [''],
+ status: [''],
+ });
+
+
+ this.getRequest();
+ this.getGoodsTypeNode();
+ this.getGoodsBrandNode();
+
+ }
+
+ // 查询列表
+ public getRequest(reset: boolean = false) {
+ 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']);
+ }
+ });
+ }
+
+ // 配置数据
+ 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 {
+ console.log(data);
+ this.orderGoodsData = data;
+ 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.logisticsTraceDetails = data['return_data']['logisticsTraceDetails'];
+ } else {
+ this.msg.error(data['return_msg']);
+ }
+ });
+ }
+
+}
diff --git a/src/app/pages/trade/trade.routes.ts b/src/app/pages/trade/trade.routes.ts
index e97cae5..82c2b0d 100644
--- a/src/app/pages/trade/trade.routes.ts
+++ b/src/app/pages/trade/trade.routes.ts
@@ -1,9 +1,11 @@
import { Routes } from '@angular/router';
import {CompOrderComponent} from "./comp-order/comp-order.component";
import {OrderAfterSalesComponent} from "./order-after-sales/order-after-sales.component";
+import {GoodsListComponent} from "./goods-list/goods-list.component";
import {OrderRefundComponent} from "./order-refund/order-refund.component";
export const TRADE_ROUTES: Routes = [
+ { path: 'goods-list', component: GoodsListComponent },
{ path: 'comp-order', component: CompOrderComponent },
{ path: 'order-after-sales', component: OrderAfterSalesComponent },
{ path: 'order-refund', component: OrderRefundComponent },
diff --git a/src/app/pipes/order/order-goods-status.pipe.ts b/src/app/pipes/order/order-goods-status.pipe.ts
new file mode 100644
index 0000000..f543cfa
--- /dev/null
+++ b/src/app/pipes/order/order-goods-status.pipe.ts
@@ -0,0 +1,32 @@
+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 '未知状态'
+ }
+ }
+
+}
diff --git a/src/app/services/trade/order-goods.service.ts b/src/app/services/trade/order-goods.service.ts
new file mode 100644
index 0000000..1eeee14
--- /dev/null
+++ b/src/app/services/trade/order-goods.service.ts
@@ -0,0 +1,35 @@
+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 OrderGoodsService {
+
+ constructor(private http: HttpClient) { }
+
+ /**
+ * 查询订单列表
+ * @param param
+ * @param callBack
+ */
+ public getListGoods(param: object, callBack:any) {
+ this.http.get(environment.orderUrl + 'orderGoods/getListGoods?'+ObjectData.objectByString(param)).subscribe(data => {
+ callBack(data);
+ });
+ }
+
+ public updateLogisticsNo(params: object, callBack:any) {
+ this.http.post(environment.orderUrl + 'orderGoods/updateLogisticsNo', params).subscribe(data => {
+ callBack(data);
+ });
+ }
+
+ public getLogisticsMsg(param: object, callBack:any) {
+ this.http.get(environment.orderUrl + 'orderGoods/getLogisticsMsg?'+ObjectData.objectByString(param)).subscribe(data => {
+ callBack(data);
+ });
+ }
+}
diff --git a/src/app/utils/Interceptor.service.ts b/src/app/utils/Interceptor.service.ts
index cb664a6..44c48c9 100644
--- a/src/app/utils/Interceptor.service.ts
+++ b/src/app/utils/Interceptor.service.ts
@@ -5,15 +5,15 @@ import {
import {catchError, finalize} from 'rxjs/operators';
import {mergeMap} from 'rxjs/operators';
import {Observable} from 'rxjs';
-import {NzMessageService} from "ng-zorro-antd/message";
import {USER_TOKEN} from "../data/login/localStorage.namespace";
import {BrowserStorageService} from "./localStorage.service";
+import {Router} from "@angular/router";
@Injectable()
export class InterceptorService implements HttpInterceptor {
constructor(
- private message: NzMessageService,
+ private router: Router, // 路由
private storage: BrowserStorageService,
) {
}
@@ -69,7 +69,20 @@ export class InterceptorService implements HttpInterceptor {
}
jumpError(message: string , status: number) {
- // this.router.navigateByUrl('/error/500');
+ if (status == 401) {
+ this.router.navigateByUrl('/error/401').then(r => console.log("返回内容" ,r));
+
+ }
+ if (status == 403) {
+ this.router.navigateByUrl('/error/403').then(r => console.log("返回内容" ,r));
+ }
+ if (status == 404) {
+ this.router.navigateByUrl('/error/404').then(r => console.log("返回内容" ,r));
+ }
+ if (status == 500) {
+ this.router.navigateByUrl('/error/500').then(r => console.log("返回内容" ,r));
+ }
+
}
}
diff --git a/src/environments/environment.dev.ts b/src/environments/environment.dev.ts
index 088432e..71468d7 100644
--- a/src/environments/environment.dev.ts
+++ b/src/environments/environment.dev.ts
@@ -3,5 +3,5 @@ export const environment = {
baseUrl: 'https://phgcs.dctpay.com/brest/', // 测试环境服务器地址(请求数据地址)
orderUrl: 'https://phgcs.dctpay.com/order/', // 测试环境服务器地址(请求数据地址)
userUrl: 'https://phgcs.dctpay.com/user/', // 测试环境服务器地址(请求数据地址)
- imageUrl: 'https://phgcs.dctpay.com/filesystem/',
+ imageUrl: 'https://phg-test.obs.cn-southwest-2.myhuaweicloud.com/',
};