袁野 3 months ago
parent 6aa02cc57b
commit a413dc9ce4
  1. 17
      src/app/data/goods/goods.namespace.ts
  2. 113
      src/app/pages/trade/goods-list/goods-list.component.html
  3. 46
      src/app/pages/trade/goods-list/goods-list.component.ts
  4. 274
      src/app/pages/trade/goods-logistics-list/goods-logistics-list.component.html
  5. 6
      src/app/pages/trade/goods-logistics-list/goods-logistics-list.component.less
  6. 284
      src/app/pages/trade/goods-logistics-list/goods-logistics-list.component.ts
  7. 2
      src/app/pages/trade/order-cinema/order-cinema.component.ts
  8. 2
      src/app/pages/trade/trade.routes.ts
  9. 32
      src/app/pipes/order/order-goods-status.pipe.ts
  10. 16
      src/environments/environment.ts

@ -1,15 +1,14 @@
export const fallbackImg = 'data:image/png;base64,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'; export const fallbackImg = 'data:image/png;base64,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';
export const orderGoodsStatus = [ export const logisticsStatus = [
{name: "待发货" , key: 1} , {name: "派件中" , key: "DELIVERING"} ,
{name: "已发货" , key: 2}, {name: "运输中" , key: "TRANSPORT"},
{name: "配送中" , key: 3}, {name: "已代签收" , key: "AGENT_SIGN"},
{name: "已送达" , key: 4}, {name: "已签收" , key: "SIGN"},
{name: "已取消" , key: 5}, {name: "已揽收" , key: "ACCEPT"},
{name: "退货中" , key: 6}, {name: "包裹异常" , key: "FAILED"},
{name: "已退货" , key: 7}, {name: "待揽收" , key: "WAIT_ACCEPT"}
{name: "待支付" , key: 8}
]; ];
export const orderGoodsChild = [ export const orderGoodsChild = [
{name: "待支付" , key: 1} , {name: "待支付" , key: 1} ,

@ -26,25 +26,22 @@
</div> </div>
<div nz-col [nzSpan]="6"> <div nz-col [nzSpan]="6">
<nz-form-item> <nz-form-item>
<nz-form-label>用户手机</nz-form-label> <nz-form-label>子订单</nz-form-label>
<nz-form-control> <nz-form-control>
<input nzSize="large" nz-input formControlName="userPhone" placeholder="请输入" /> <input nzSize="large" nz-input formControlName="childOrderNo" placeholder="请输入" />
</nz-form-control> </nz-form-control>
</nz-form-item> </nz-form-item>
</div> </div>
<div nz-col [nzSpan]="6">
<div nz-col [nzSpan]="24">
<nz-form-item> <nz-form-item>
<nz-form-label>创建时间</nz-form-label> <nz-form-label>用户手机号</nz-form-label>
<nz-form-control> <nz-form-control>
<nz-range-picker nzSize="large" formControlName="createTimeArray" nzShowTime [nzFormat]="'yyyy/MM/dd HH:mm:ss'"></nz-range-picker> <input nzSize="large" nz-input formControlName="userPhone" placeholder="请输入" />
<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>
</nz-form-control> </nz-form-control>
</nz-form-item> </nz-form-item>
</div> </div>
<div nz-col [nzSpan]="6" [hidden]="!isCollapse">
<div nz-col [nzSpan]="6" >
<nz-form-item> <nz-form-item>
<nz-form-label>商品分类</nz-form-label> <nz-form-label>商品分类</nz-form-label>
<nz-form-control> <nz-form-control>
@ -57,7 +54,7 @@
</nz-form-control> </nz-form-control>
</nz-form-item> </nz-form-item>
</div> </div>
<div nz-col [nzSpan]="6" [hidden]="!isCollapse"> <div nz-col [nzSpan]="6">
<nz-form-item> <nz-form-item>
<nz-form-label>商品品牌</nz-form-label> <nz-form-label>商品品牌</nz-form-label>
<nz-form-control> <nz-form-control>
@ -68,25 +65,48 @@
</nz-form-item> </nz-form-item>
</div> </div>
<div nz-col [nzSpan]="6">
<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="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-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">
<nz-form-item> <nz-form-item>
<nz-form-label>订单状态</nz-form-label> <nz-form-label>支付状态</nz-form-label>
<nz-form-control> <nz-form-control>
<nz-select nzSize="large" nzShowSearch nzAllowClear nzPlaceHolder="请选择" formControlName="status"> <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-select>
</nz-form-control> </nz-form-control>
</nz-form-item> </nz-form-item>
</div> </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"> <div nz-col [nzSpan]="24" class="search-area">
<button nz-button [nzType]="'primary'" (click)="getRequest()">查询</button> <button nz-button [nzType]="'primary'" (click)="getRequest()">查询</button>
<button nz-button (click)="searchForm.reset()">重置</button> <button nz-button (click)="reset()">重置</button>
<a class="collapse" (click)="isCollapse = !isCollapse">
更多查询条件
<i nz-icon [nzType]="!isCollapse ? 'down' : 'up'"></i>
</a>
</div> </div>
</div> </div>
</form> </form>
@ -103,7 +123,7 @@
[nzData]="tableData.list" > [nzData]="tableData.list" >
<thead> <thead>
<tr> <tr>
<th nzWidth="80px">商品名称</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>
@ -112,10 +132,12 @@
<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="50px">创建时间</th> <th nzWidth="70px">创建时间</th>
<th nzWidth="50px">更新时间</th> <th nzWidth="70px">更新时间</th>
<th nzRight nzWidth="50px">物流状态</th> <th nzRight nzWidth="60px">支付类型</th>
<th nzRight nzWidth="70px">操作</th> <th nzRight nzWidth="60px">支付状态</th>
<th nzRight nzWidth="60px">物流状态</th>
<th nzRight nzWidth="90px">操作</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
@ -134,8 +156,19 @@
<td>{{ data.createTime | date: 'yyyy-MM-dd HH:mm'}}</td> <td>{{ data.createTime | date: 'yyyy-MM-dd HH:mm'}}</td>
<td>{{ data.updateTime | date: 'yyyy-MM-dd HH:mm'}}</td> <td>{{ data.updateTime | date: 'yyyy-MM-dd HH:mm'}}</td>
<td nzRight> <td nzRight>
<span *ngIf="data.logisticsStatusDesc == null">{{data.status | orderGoodsStatus}}</span> <span style="font-size: 30px;" nz-icon [nzIconfont]="data.payType | payType"></span>
<span *ngIf="data.logisticsStatusDesc != null">{{data.logisticsStatusDesc}}</span> </td>
<td nzRight>
{{data.status | orderChildStatus}}
</td>
<td nzRight>
<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>
<td nzRight> <td nzRight>
<a (click)="showDetail(data)">详情</a> <a (click)="showDetail(data)">详情</a>
@ -146,7 +179,6 @@
</a> </a>
<nz-dropdown-menu #menu="nzDropdownMenu"> <nz-dropdown-menu #menu="nzDropdownMenu">
<ul nz-menu nzSelectable> <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 (click)="showLogisticsNo(data.id)"><a>查看物流</a></li>
</ul> </ul>
</nz-dropdown-menu> </nz-dropdown-menu>
@ -173,9 +205,6 @@
</nz-image-group> </nz-image-group>
</nz-descriptions-item> </nz-descriptions-item>
<nz-descriptions-item nzTitle="物流状态" [nzSpan]="3"> <nz-descriptions-item nzTitle="物流状态" [nzSpan]="3">
<span *ngIf="orderGoodsData?.logisticsStatusDesc == null">
{{orderGoodsData.status | orderGoodsStatus}}
</span>
<span *ngIf="orderGoodsData?.logisticsStatusDesc != null"> <span *ngIf="orderGoodsData?.logisticsStatusDesc != null">
<nz-badge *ngIf="orderGoodsData?.logisticsStatus == 'DELIVERING'" nzColor="cyan" nzText="{{orderGoodsData.logisticsStatusDesc}}"></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 == 'TRANSPORT'" nzColor="lime" nzText="{{orderGoodsData.logisticsStatusDesc}}"></nz-badge>
@ -210,13 +239,11 @@
<nz-descriptions-item *ngIf="orderGoodsData?.updateTime != null" nzTitle="更新时间">{{ orderGoodsData?.updateTime | 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-descriptions>
</nz-tab> </nz-tab>
<nz-tab nzTitle="货信息"> <nz-tab nzTitle="货信息">
<nz-descriptions nzTitle="收获信息" nzBordered> <nz-descriptions nzTitle="发货信息" nzBordered>
<nz-descriptions-item nzTitle="收货人">{{deliveryAddress?.consignee}}</nz-descriptions-item> <nz-descriptions-item nzTitle="收货人">{{deliveryAddress?.consignee}}</nz-descriptions-item>
<nz-descriptions-item nzTitle="收货电话">{{ deliveryAddress?.phone }}</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?.regionName }} -{{deliveryAddress?.consignee}} -{{ deliveryAddress?.phone }} -{{ deliveryAddress?.address }}</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> </nz-descriptions>
</nz-tab> </nz-tab>
@ -225,20 +252,6 @@
</ng-container> </ng-container>
</nz-modal> </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" <nz-modal [(nzVisible)]="orderDetailModalChild" nzTitle="物流详情" (nzOnCancel)="orderDetailModalChild = false" [nzFooter]="null"
nzWidth="1000px" [nzBodyStyle]=" { padding: '20px 20px 30px 20px'}"> nzWidth="1000px" [nzBodyStyle]=" { padding: '20px 20px 30px 20px'}">

@ -18,11 +18,10 @@ import {NzTreeSelectComponent} from "ng-zorro-antd/tree-select";
import {environment} from "../../../../environments/environment"; import {environment} from "../../../../environments/environment";
import {NzMessageService} from "ng-zorro-antd/message"; import {NzMessageService} from "ng-zorro-antd/message";
import {GoodsService} from "../../../services/goods/goods.service"; 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 {GoodsStatusPipe} from "../../../pipes/goods/goods-status.pipe";
import {NzModalModule} from "ng-zorro-antd/modal"; import {NzModalModule} from "ng-zorro-antd/modal";
import {OrderGoodsService} from "../../../services/trade/order-goods.service"; 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 {NzDropDownADirective, NzDropDownDirective, NzDropdownMenuComponent} from "ng-zorro-antd/dropdown";
import {NzMenuDirective, NzMenuItemComponent} from "ng-zorro-antd/menu"; import {NzMenuDirective, NzMenuItemComponent} from "ng-zorro-antd/menu";
import {NzPopconfirmDirective} from "ng-zorro-antd/popconfirm"; import {NzPopconfirmDirective} from "ng-zorro-antd/popconfirm";
@ -39,6 +38,9 @@ import {NzResultComponent} from "ng-zorro-antd/result";
import {DateSelectType, DateUtils} from "../../../utils/dateUtils.service"; import {DateSelectType, DateUtils} from "../../../utils/dateUtils.service";
import {NzDatePickerComponent, NzRangePickerComponent} from "ng-zorro-antd/date-picker"; import {NzDatePickerComponent, NzRangePickerComponent} from "ng-zorro-antd/date-picker";
import {NzRadioButtonDirective, NzRadioComponent, NzRadioGroupComponent} from "ng-zorro-antd/radio"; 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";
@Component({ @Component({
selector: 'app-goods-list', selector: 'app-goods-list',
@ -63,7 +65,6 @@ import {NzRadioButtonDirective, NzRadioComponent, NzRadioGroupComponent} from "n
NzImageDirective, NzImageDirective,
GoodsStatusPipe, GoodsStatusPipe,
DatePipe, DatePipe,
OrderGoodsStatusPipe,
NzDropdownMenuComponent, NzDropdownMenuComponent,
NgIf, NgIf,
NzMenuDirective, NzMenuDirective,
@ -89,6 +90,8 @@ import {NzRadioButtonDirective, NzRadioComponent, NzRadioGroupComponent} from "n
NzRadioComponent, NzRadioComponent,
NzRadioGroupComponent, NzRadioGroupComponent,
NzRangePickerComponent, NzRangePickerComponent,
PayTypePipe,
OrderChildStatusPipe,
], ],
templateUrl: './goods-list.component.html', templateUrl: './goods-list.component.html',
@ -121,16 +124,15 @@ export class GoodsListComponent {
logisticsTraceDetails: any; logisticsTraceDetails: any;
goodsOrderId: any; goodsOrderId: any;
deliveryAddress: any; deliveryAddress: any;
// 时间类型选择
dateTypeSelect = DateSelectType;
// 更多查询条件
isCollapse = false;
protected readonly fallbackImg = fallbackImg; protected readonly fallbackImg = fallbackImg;
protected readonly orderGoodsStatus = orderGoodsStatus; protected readonly logisticsStatus = logisticsStatus;
protected readonly orderGoodsChild = orderGoodsChild;
constructor(private fb: NonNullableFormBuilder, constructor(private fb: NonNullableFormBuilder,
private msg: NzMessageService, private msg: NzMessageService,
private iconService: IconService,
private orderGoodsService: OrderGoodsService, private orderGoodsService: OrderGoodsService,
private goodsService: GoodsService) { private goodsService: GoodsService) {
@ -139,6 +141,8 @@ export class GoodsListComponent {
this.searchForm = this.fb.group({ this.searchForm = this.fb.group({
logisticsNo: [''], logisticsNo: [''],
orderNo: [''], orderNo: [''],
childOrderNo: [''],
logisticsStatus: [''],
goodsType: [''], goodsType: [''],
goodsBrand: [''], goodsBrand: [''],
userPhone: [''], userPhone: [''],
@ -148,11 +152,9 @@ export class GoodsListComponent {
createTimeS: [''], createTimeS: [''],
createTimeE: [''], createTimeE: [''],
goodsName: [''], goodsName: [''],
payType: [''],
status: [''], status: [''],
payType: [''],
}); });
this.createTimeInit();
this.getRequest(); this.getRequest();
this.getGoodsTypeNode(); this.getGoodsTypeNode();
this.getGoodsBrandNode(); this.getGoodsBrandNode();
@ -164,8 +166,8 @@ export class GoodsListComponent {
if (this.searchForm.controls['createTimeArray'].value != null if (this.searchForm.controls['createTimeArray'].value != null
&& this.searchForm.controls['createTimeArray'].value.length > 0) { && this.searchForm.controls['createTimeArray'].value.length > 0) {
this.searchForm.controls['createTimeS'].setValue(new Date(this.searchForm.controls['createTimeArray'].value[0]).getTime()); this.searchForm.controls['createTimeS'].setValue(DateUtils.getDateHMS(new Date(this.searchForm.controls['createTimeArray'].value[0]) , 1).getTime());
this.searchForm.controls['createTimeE'].setValue(new Date(this.searchForm.controls['createTimeArray'].value[1]).getTime()); this.searchForm.controls['createTimeE'].setValue(DateUtils.getDateHMS(new Date(this.searchForm.controls['createTimeArray'].value[1]) , 2).getTime());
} else { } else {
this.searchForm.controls['createTimeS'].setValue(null) this.searchForm.controls['createTimeS'].setValue(null)
this.searchForm.controls['createTimeE'].setValue(null) this.searchForm.controls['createTimeE'].setValue(null)
@ -189,6 +191,12 @@ export class GoodsListComponent {
}); });
} }
// 重制
public reset() {
this.searchForm.reset();
this.getRequest();
}
// 获取商品分类 // 获取商品分类
getGoodsTypeNode() { getGoodsTypeNode() {
this.goodsService.getList({time: new Date().getTime()}, (data: any) => { this.goodsService.getList({time: new Date().getTime()}, (data: any) => {
@ -198,17 +206,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 { getNode(array: any): any {
array.forEach((item: any) => { array.forEach((item: any) => {
@ -290,4 +287,5 @@ export class GoodsListComponent {
} }
protected readonly orderPayType = orderPayType;
} }

@ -0,0 +1,274 @@
<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="goodsName" 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="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>
<input nzSize="large" nz-input formControlName="childOrderNo" 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-tree-select
nzPlaceHolder="请选择"
formControlName="goodsType"
[nzNodes]="nodes"
nzShowSearch
></nz-tree-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="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">
<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-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">
<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="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="50px">创建时间</th>
<th nzWidth="50px">更新时间</th>
<th nzRight nzWidth="60px">支付类型</th>
<th nzRight nzWidth="60px">支付状态</th>
<th nzRight nzWidth="60px">物流状态</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 == '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 (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">
<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-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,284 @@
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";
@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;
protected readonly fallbackImg = fallbackImg;
protected readonly orderPayType = orderPayType;
protected readonly logisticsStatus = logisticsStatus;
constructor(private fb: NonNullableFormBuilder,
private msg: NzMessageService,
private iconService: IconService,
private orderGoodsService: OrderGoodsService,
private goodsService: GoodsService) {
// 初始化搜索框
this.searchForm = this.fb.group({
logisticsNo: [''],
orderNo: [''],
childOrderNo: [''],
goodsType: [''],
goodsBrand: [''],
userPhone: [''],
goodsSpecsName: [''],
createTimeArray: [[]],
createTimeSelect: ['1'],
createTimeS: [''],
createTimeE: [''],
goodsName: [''],
payType: [''],
status: [''],
logisticsStatus: [''],
});
this.getRequest();
this.getGoodsTypeNode();
this.getGoodsBrandNode();
}
// 查询列表
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 {NzModalModule} from "ng-zorro-antd/modal";
import {DatePipe, NgClass, NgForOf, NgIf} from "@angular/common"; import {DatePipe, NgClass, NgForOf, NgIf} from "@angular/common";
import {GoodsStatusPipe} from "../../../pipes/goods/goods-status.pipe"; 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 {NzDropDownADirective, NzDropDownDirective, NzDropdownMenuComponent} from "ng-zorro-antd/dropdown";
import {NzMenuDirective, NzMenuItemComponent} from "ng-zorro-antd/menu"; import {NzMenuDirective, NzMenuItemComponent} from "ng-zorro-antd/menu";
import {NzDescriptionsModule} from "ng-zorro-antd/descriptions"; import {NzDescriptionsModule} from "ng-zorro-antd/descriptions";
@ -57,7 +56,6 @@ import {OrderCinemaStatusPipe} from "../../../pipes/goods/order-cinema-status.pi
NzImageDirective, NzImageDirective,
GoodsStatusPipe, GoodsStatusPipe,
DatePipe, DatePipe,
OrderGoodsStatusPipe,
NzDropdownMenuComponent, NzDropdownMenuComponent,
NgIf, NgIf,
NzMenuDirective, NzMenuDirective,

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

@ -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 '未知状态'
}
}
}

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

Loading…
Cancel
Save