袁野 3 months ago
parent b7cf30bc62
commit 6aa02cc57b
  1. 32
      src/app/data/goods/goods.namespace.ts
  2. 202
      src/app/pages/trade/order-starbucks/order-starbucks.component.html
  3. 9
      src/app/pages/trade/order-starbucks/order-starbucks.component.less
  4. 177
      src/app/pages/trade/order-starbucks/order-starbucks.component.ts
  5. 2
      src/app/pages/trade/trade.routes.ts
  6. 28
      src/app/pipes/goods/order-child-status.pipe.ts
  7. 32
      src/app/pipes/goods/order-starbucks-type.pipe.ts
  8. 32
      src/app/pipes/goods/order-starbucks.pipe.ts
  9. 25
      src/app/pipes/goods/pay-type.pipe.ts
  10. 14
      src/app/services/common/icon.service.ts
  11. 24
      src/app/services/trade/order-starbucks.service.ts
  12. 23
      src/app/services/trade/order.service.ts
  13. 19
      src/app/utils/dateUtils.service.ts

@ -11,7 +11,14 @@ export const orderGoodsStatus = [
{name: "已退货" , key: 7}, {name: "已退货" , key: 7},
{name: "待支付" , key: 8} {name: "待支付" , key: 8}
]; ];
export const orderGoodsChild = [
{name: "待支付" , key: 1} ,
{name: "已支付" , key: 2},
{name: "已完成" , key: 3},
{name: "已退款" , key: 4},
{name: "已取消" , key: 5},
{name: "退款中" , key: 6}
];
export const orderCinemaStatus = [ export const orderCinemaStatus = [
{name: "未上送" , key: 0} , {name: "未上送" , key: 0} ,
@ -21,3 +28,26 @@ export const orderCinemaStatus = [
{name: "已取消" , key: -5}, {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";

@ -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,7 @@ import {OrderAfterSalesComponent} from "./order-after-sales/order-after-sales.co
import {GoodsListComponent} from "./goods-list/goods-list.component"; 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";
export const TRADE_ROUTES: Routes = [ export const TRADE_ROUTES: Routes = [
{ path: 'goods-list', component: GoodsListComponent }, { path: 'goods-list', component: GoodsListComponent },
@ -11,4 +12,5 @@ export const TRADE_ROUTES: Routes = [
{ path: 'order-after-sales', component: OrderAfterSalesComponent }, { path: 'order-after-sales', component: OrderAfterSalesComponent },
{ 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 },
]; ];

@ -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"
}
}
}

@ -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_zeitf111aa.js'
});
}
}

@ -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; 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;
}
} }

Loading…
Cancel
Save