This commit is contained in:
Taric Xin
2022-03-11 10:52:44 +08:00
16 changed files with 715 additions and 103 deletions

View File

@ -1,3 +1,4 @@
<page-header-wrapper [title]="'账户详情'"></page-header-wrapper>
<nz-card>
<sv-container layout="vertical" [noColon]="true" col="4">
<sv [label]="labelTpl">

View File

@ -1,3 +1,4 @@
<page-header-wrapper [title]="''"></page-header-wrapper>
<nz-card>
<!-- <div nz-row>
<div [nzSpan]="" nz-col>
@ -20,14 +21,14 @@
[page]="{ show: true, showSize: true, pageSizes: [10, 20, 30, 50, 100, 200, 300, 500, 1000] }"
[loading]="service.http.loading">
<ng-template st-row="approvalStatus" let-item>
<a [routerLink]="'/partner/account-management/recorded-detail/'+item?.id">{{item.yskmoney}}</a>
<a [routerLink]="'/partner/account-management/am/recorded/detail/'+item?.id">{{item.yskmoney}}</a>
</ng-template>
<ng-template st-row="approvalStatus1" let-item>
<div class="text-right">{{item.approvalStatus1 | currency:' '}}</div>
</ng-template>
<ng-template st-row="approvalStatus2" let-item>
<a class="text-right text-blue-dark"
[routerLink]="'/partner/account-management/recorded-detail/'+item?.id">{{item.yskmoney | currency:'
[routerLink]="'/partner/account-management/am/recorded/detail/'+item?.id">{{item.yskmoney | currency:'
'}}</a>
</ng-template>

View File

@ -1,3 +1,4 @@
<page-header-wrapper [title]="'待入账明细'"></page-header-wrapper>
<nz-card>
<sv-container layout="vertical" [noColon]="true" col="4">
<sv [label]="labelTpl">

View File

@ -164,7 +164,7 @@ export class PartnerAccountManagementVirtualAccountDetailComponent implements On
* @param _record 当前行信息
*/
viewDetail(_record: any) {
window.open(location.origin + '/#/partner/account-management/account-detail');
window.open(location.origin + `/#/partner/account-management/am/detail/${_record?.id}`);
}
close() {

View File

@ -1,5 +1,5 @@
<!--
* @Description :
* @Description :
* @Version : 1.0
* @Author : Shiming
* @Date : 2022-01-05 20:15:41
@ -9,55 +9,56 @@
* Copyright (C) 2022 huzhenhong. All rights reserved.
-->
<page-header-wrapper [title]="'提现详情'" [logo]="logo">
<ng-template #logo>
<button nz-button nz-tooltip nzTooltipTitle="返回上一页" (click)="goBack()">
<i nz-icon nzType="left" nzTheme="outline"></i>
</button>
</ng-template>
<ng-template #logo>
<button nz-button nz-tooltip nzTooltipTitle="返回上一页" (click)="goBack()">
<i nz-icon nzType="left" nzTheme="outline"></i>
</button>
</ng-template>
</page-header-wrapper>
<nz-card [nzLoading]="service.http.loading">
<nz-alert nzType="info" nzMessage="提现信息" class="mb-md"></nz-alert>
<div se-container [labelWidth]="130">
<se label="网络货运人">
{{formData?.ltdName}}
</se>
<se label="银行类型">
{{formData?.bankType==='1'?'平安银行':'浦发银行'}}
</se>
<se label="提现单号">
{{formData?.refundApplyCode}}
</se>
<se label="账户名称">
{{formData?.bankAccountName}}
</se>
<se label="提现时间">
{{formData?.createTime}}
</se>
<se label="虚拟账户">
{{formData?.virtualAccount}}
</se>
<se label="提现状态">
{{formData?.refundStatusLabel}}
</se>
<se label="提现金额">
{{formData?.amount | currency}}
</se>
<se label="银行流水号">
{{formData?.bankSerialNumber}}
</se>
<se label="提现至银行卡">
{{formData?.bankCardNumber}}
</se>
<se label="银行回单" col="1">
<a (click)="downBack()">{{formData?.refundStatus==='3'?'下载回单':'暂无回单'}}</a>
</se>
</div>
<nz-alert nzType="info" nzMessage="提现进度" class="mb-md mt-md"></nz-alert>
<div nz-row class="mt-xl">
<div nz-col nzSpan="12" nzOffset="1">
<app-logistics-time-line [data]="timeLineData"></app-logistics-time-line>
</div>
<nz-card [nzLoading]="service.http.loading">
<nz-alert nzType="info" nzMessage="提现信息" class="mb-md"></nz-alert>
<div se-container [labelWidth]="130">
<se label="网络货运人">
{{formData?.ltdName}}
</se>
<se label="银行类型">
{{formData?.bankType==='1'?'平安银行':'浦发银行'}}
</se>
<se label="提现单号">
{{formData?.refundApplyCode}}
</se>
<se label="账户名称">
{{formData?.bankAccountName}}
</se>
<se label="提现时间">
{{formData?.createTime}}
</se>
<se label="虚拟账户">
{{formData?.virtualAccount}}
</se>
<se label="提现状态">
{{formData?.refundStatusLabel}}
</se>
<se label="提现金额">
{{formData?.amount | currency}}
</se>
<se label="银行流水号">
{{formData?.bankSerialNumber}}
</se>
<se label="提现至银行卡">
{{formData?.bankCardNumber}}
</se>
<se label="银行回单" col="1">
<a (click)="downBack()">{{formData?.refundStatus==='3'?'下载回单':'暂无回单'}}</a>
</se>
</div>
<nz-alert nzType="info" nzMessage="提现进度" class="mb-md mt-md"></nz-alert>
<div nz-row class="mt-xl">
<div nz-col nzSpan="12" nzOffset="1">
<app-logistics-time-line [data]="timeLineData"></app-logistics-time-line>
</div>
</nz-card>
</div>
</nz-card>

View File

@ -4,11 +4,11 @@ import { FreightAccountService } from 'src/app/routes/financial-management/servi
@Component({
selector: 'app-withdrawals-detail',
selector: 'app-partner-account-management-withdrawals-detail',
templateUrl: './withdrawals-detail.component.html',
styleUrls: ['./withdrawals-detail.component.less']
})
export class PartnerAccountManagementWithdrawalsDetailComponent implements OnInit {
export class PartnerAccountManagementWithdralDetailComponent implements OnInit {
formData: any = {};
timeLineData: any = [];

View File

@ -1,3 +1,4 @@
<page-header-wrapper [title]="''"></page-header-wrapper>
<nz-card class="search-box" nzBordered>
<div nz-row nzGutter="8">
<div nz-col [nzXl]="_$expand ? 24 : 18" [nzLg]="24" [nzSm]="24" [nzXs]="24">

View File

@ -1,5 +1,5 @@
import { Component, OnInit, ViewChild } from '@angular/core';
import { Router } from '@angular/router';
import { ActivatedRoute, Router } from '@angular/router';
import { STComponent, STColumn, STChange, STRequestOptions, STData } from '@delon/abc/st';
import { SFComponent, SFSchema, SFDateWidgetSchema } from '@delon/form';
import { NzModalService } from 'ng-zorro-antd/modal';
@ -27,7 +27,7 @@ export class PartnerAccountManagementWithdrawalsRecordComponent implements OnIni
refundStatus: any = '';
msg = '';
constructor(public service: FreightAccountService, private nzModalService: NzModalService, private router: Router) { }
constructor(public service: FreightAccountService, private nzModalService: NzModalService, private router: Router, public ar: ActivatedRoute) { }
ngOnInit(): void { }
@ -325,7 +325,7 @@ export class PartnerAccountManagementWithdrawalsRecordComponent implements OnIni
},
{
text: '详情',
click: item => this.router.navigate(['/financial-management/withdrawals-record/detail/' + item.id])
click: item => this.router.navigate(['./detail/' + item.id], { relativeTo: this.ar })
}
]
}

View File

@ -29,12 +29,14 @@ import { ParterRebateManageMentRecordComponent } from './rebate-management/compo
import { PartnerAccountManagementAccountDetailComponent } from './account-management/components/account-detail/account-detail.component';
import { PartnerAccountManagementRecordedDetailComponent } from './account-management/components/recorded-detail/recorded-detail.component';
import { PartnerAccountManagementWithdrawalsRecordComponent } from './account-management/components/withdrawals-record/withdrawals-record.component';
import { PartnerAccountManagementWithdrawalsDetailComponent } from './account-management/components/withdrawals-record/withdrawals-detail/withdrawals-detail.component';
import { PartnerListComponent } from './partner-list/components/index/partner-list.component';
import { PartnerDetailComponent } from './partner-list/components/partner-detail/partner-detail.component';
import { PartnerAccountManagementWithdralDetailComponent } from './account-management/components/withdrawals-record/withdrawals-detail/withdrawals-detail.component';
import { PartnerRecordedRecordComponent } from './recorded/components/record/record.component';
import { PartnerRecordedDetailComponent } from './recorded/components/detail/detail.component';
import { ParterRebateManageMentSettingComponent } from './rebate-management/components/rebate-setting/rebate-setting.component';
import { AddEtpPartnerComponent } from './partner-list/components/add-etp-partner/add-etp-partner.component';
import { AddPersonalPartnerComponent } from './partner-list/components/add-personal-partner/add-personal-partner.component';
import { PartnerDetailComponent } from './partner-list/components/partner-detail/partner-detail.component';
import { PartnerListComponent } from './partner-list/components/index/partner-list.component';
const routes: Routes = [
{
@ -80,7 +82,7 @@ const routes: Routes = [
{ path: 'account-detail', component: PartnerAccountManagementAccountDetailComponent },
{ path: 'recorded-detail/:id', component: PartnerAccountManagementRecordedDetailComponent },
{ path: 'withdraw-record', component: PartnerAccountManagementWithdrawalsRecordComponent },
{ path: 'withdraw-record/:id', component: PartnerAccountManagementWithdrawalsDetailComponent }
{ path: 'withdraw-record/:id', component: PartnerAccountManagementWithdralDetailComponent }
]
},
{
@ -90,6 +92,22 @@ const routes: Routes = [
{ path: 'detail/:id', component: PartnerDetailComponent },
{ path: 'add-etp-partner', component: AddEtpPartnerComponent },
{ path: 'add-personal-partner', component: AddPersonalPartnerComponent },
{
path: 'am',
children: [
{ path: '', redirectTo: 'list' },
{ path: '', component: PartnerAccountManagementListComponent },
{ path: 'detail/:id', component: PartnerAccountManagementAccountDetailComponent },
{ path: 'recorded/detail/:id', component: PartnerAccountManagementRecordedDetailComponent },
]
},
{
path: 'withdraw-record',
children: [
{ path: '', component: PartnerAccountManagementWithdrawalsRecordComponent },
{ path: 'detail/:id', component: PartnerAccountManagementWithdralDetailComponent }
]
},
]
},
{
@ -100,10 +118,18 @@ const routes: Routes = [
{ path: 'channel-detail', component: ParterClaimAuditListChannelDetailComponent },
{ path: 'partner-detail', component: ParterClaimAuditListPartnerDetailComponent }
]
}
},
{
path: 'recorded',
children: [
{ path: 'record', component: PartnerRecordedRecordComponent },
{ path: 'record/detail/:id', component: PartnerRecordedDetailComponent }
]
},
];
@NgModule({
imports: [RouterModule.forChild(routes)],
exports: [RouterModule]
})
export class PartnerRoutingModule {}
export class PartnerRoutingModule { }

View File

@ -8,46 +8,47 @@
* @FilePath : \\tms-obc-web\\src\\app\\routes\\partner\\partner.module.ts
* Copyright (C) 2022 huzhenhong. All rights reserved.
*/
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { NgModule } from '@angular/core';
import { SharedModule } from '@shared';
import { PartnerRoutingModule } from './partner-routing.module';
import { PartnerAccountManagementAccountDetailComponent } from './account-management/components/account-detail/account-detail.component';
import { PartnerAccountManagementListComponent } from './account-management/components/list/list.component';
import { PartnerAccountManagementRecordedDetailComponent } from './account-management/components/recorded-detail/recorded-detail.component';
import { PartnerAccountManagementVirtualAccountDetailComponent } from './account-management/components/virtual-account-detail/virtual-account-detail.component';
import { PartnerAccountManagementWithdralDetailComponent } from './account-management/components/withdrawals-record/withdrawals-detail/withdrawals-detail.component';
import { PartnerAccountManagementWithdrawalsRecordComponent } from './account-management/components/withdrawals-record/withdrawals-record.component';
import { PartnerBusinessStatisticsIndexComponent } from './business-statistics/components/index/index.component';
import { ParterChannelSalesListComponent } from './channel-sales/components/list/list.component';
import { ParterChannelSalesEditComponent } from './channel-sales/components/edit/edit.component';
import { ParterLevelConfigEditComponent } from './level-config/components/edit/edit.component';
import { ParterLevelConfigListComponent } from './level-config/components/list/list.component';
import { PartnerPartnerStatisticsComponent } from './business-statistics/components/partner-statistics/partner-statistics.component';
import { PartnerSaleStatisticsComponent } from './business-statistics/components/sale-statistics/sale-statistics.component';
import { PartnerSaleCustomDetailComponent } from './business-statistics/components/sale-custom-detail/sale-custom-detail.component';
import { PartnerPartnerCustomDetailComponent } from './business-statistics/components/partner-custom-detail/partner-custom-detail.component';
import { ParterRebateManageMentParticularsComponent } from './rebate-management/components/particulars/particulars.component';
import { PartnerSalePartnerDetailComponent } from './business-statistics/components/sale-partner-detail/sale-partner-detail.component';
import { PartnerPartnerCustomOrderDetailComponent } from './business-statistics/components/partner-custom-order-detail/partner-custom-order-detail.component';
import { PartnerPartnerOrderDetailComponent } from './business-statistics/components/partner-order-detail/partner-order-detail.component';
import { PartnerAccountManagementListComponent } from './account-management/components/list/list.component';
import { ParterClaimAuditListComponent } from './claim-audit/components/list/list.component';
import { ParterClaimAuditListChannelDetailComponent } from './claim-audit/components/channel-detail/channel-detail.component';
import { ParterClaimAuditListPartnerDetailComponent } from './claim-audit/components/partner-detail/partner-detail.component';
import { PartnerPartnerStatisticsComponent } from './business-statistics/components/partner-statistics/partner-statistics.component';
import { PartnerSaleCustomDetailComponent } from './business-statistics/components/sale-custom-detail/sale-custom-detail.component';
import { PartnerSalePartnerDetailComponent } from './business-statistics/components/sale-partner-detail/sale-partner-detail.component';
import { PartnerSaleStatisticsComponent } from './business-statistics/components/sale-statistics/sale-statistics.component';
import { ParterChannelSalesEditComponent } from './channel-sales/components/edit/edit.component';
import { ParterChannelSalesListComponent } from './channel-sales/components/list/list.component';
import { ParterClaimAuditListChannelApproveComponent } from './claim-audit/components/channel-approve/channel-approve.component';
import { ParterClaimAuditListPartnerApproveComponent } from './claim-audit/components/partner-approve/partner-approve.component';
import { ParterClaimAuditListPartnerRejectComponent } from './claim-audit/components/partner-reject/partner-reject.component';
import { ParterClaimAuditListChannelDetailComponent } from './claim-audit/components/channel-detail/channel-detail.component';
import { ParterClaimAuditListChannelRejectComponent } from './claim-audit/components/channel-reject/channel-reject.component';
import { PartnerAccountManagementVirtualAccountDetailComponent } from './account-management/components/virtual-account-detail/virtual-account-detail.component';
import { PartnerAccountManagementAccountDetailComponent } from './account-management/components/account-detail/account-detail.component';
import { PartnerAccountManagementRecordedDetailComponent } from './account-management/components/recorded-detail/recorded-detail.component';
import { PartnerAccountManagementWithdrawalsRecordComponent } from './account-management/components/withdrawals-record/withdrawals-record.component';
import { PartnerAccountManagementWithdrawalsDetailComponent } from './account-management/components/withdrawals-record/withdrawals-detail/withdrawals-detail.component';
import { PartnerDetailComponent } from './partner-list/components/partner-detail/partner-detail.component';
import { ParterClaimAuditListComponent } from './claim-audit/components/list/list.component';
import { ParterClaimAuditListPartnerApproveComponent } from './claim-audit/components/partner-approve/partner-approve.component';
import { ParterClaimAuditListPartnerDetailComponent } from './claim-audit/components/partner-detail/partner-detail.component';
import { ParterClaimAuditListPartnerRejectComponent } from './claim-audit/components/partner-reject/partner-reject.component';
import { ParterLevelConfigEditComponent } from './level-config/components/edit/edit.component';
import { ParterLevelConfigListComponent } from './level-config/components/list/list.component';
import { PartnerListComponent } from './partner-list/components/index/partner-list.component';
import { PartnerAuditModalComponent } from './partner-list/components/partner-audit-modal/partner-audit-modal.component';
import { PartnerDetailComponent } from './partner-list/components/partner-detail/partner-detail.component';
import { PartnerListService } from './partner-list/services/partner-list.service';
import { PartnerRoutingModule } from './partner-routing.module';
import { ParterRebateManageMentParticularsComponent } from './rebate-management/components/particulars/particulars.component';
import { ParterRebateManageMentRecordComponent } from './rebate-management/components/rebate-record/rebate-record.component';
import { ParterRebateManageMenAbnormalFeedbackComponent } from './rebate-management/model/abnormal-feedback/abnormal-feedback.component';
import { ParterRebateManageMentSettingComponent } from './rebate-management/components/rebate-setting/rebate-setting.component';
import { AddEtpPartnerComponent } from './partner-list/components/add-etp-partner/add-etp-partner.component';
import { AddPersonalPartnerComponent } from './partner-list/components/add-personal-partner/add-personal-partner.component';
import { ParterRebateManageMenAbnormalFeedbackComponent } from './rebate-management/model/abnormal-feedback/abnormal-feedback.component';
import { PartnerRecordedDetailComponent } from './recorded/components/detail/detail.component';
import { PartnerRecordedRecordComponent } from './recorded/components/record/record.component';
const COMPONENTS: any[] = [
PartnerBusinessStatisticsIndexComponent,
@ -77,7 +78,9 @@ const COMPONENTS: any[] = [
PartnerAccountManagementAccountDetailComponent,
PartnerAccountManagementRecordedDetailComponent,
PartnerAccountManagementWithdrawalsRecordComponent,
PartnerAccountManagementWithdrawalsDetailComponent,
PartnerAccountManagementWithdralDetailComponent,
PartnerRecordedRecordComponent,
PartnerRecordedDetailComponent,
PartnerListComponent,
PartnerDetailComponent,
ParterRebateManageMenAbnormalFeedbackComponent,
@ -92,4 +95,4 @@ const COMPONENTS: any[] = [
imports: [CommonModule, PartnerRoutingModule, SharedModule],
providers: [PartnerListService]
})
export class PartnerModule {}
export class PartnerModule { }

View File

@ -0,0 +1,64 @@
<!--
* @Description :
* @Version : 1.0
* @Author : Shiming
* @Date : 2022-01-05 20:15:41
* @LastEditors : Shiming
* @LastEditTime : 2022-01-18 17:17:19
* @FilePath : \\tms-obc-web\\src\\app\\routes\\financial-management\\components\\withdrawals-record\\withdrawals-detail\\withdrawals-detail.component.html
* Copyright (C) 2022 huzhenhong. All rights reserved.
-->
<page-header-wrapper [title]="'入账详情'" [logo]="logo">
<ng-template #logo>
<button nz-button nz-tooltip nzTooltipTitle="返回上一页" (click)="goBack()">
<i nz-icon nzType="left" nzTheme="outline"></i>
</button>
</ng-template>
</page-header-wrapper>
<nz-card [nzLoading]="service.http.loading">
<nz-alert nzType="info" nzMessage="提现信息" class="mb-md"></nz-alert>
<div se-container [labelWidth]="130">
<se label="网络货运人">
{{formData?.ltdName}}
</se>
<se label="银行类型">
{{formData?.bankType==='1'?'平安银行':'浦发银行'}}
</se>
<se label="提现单号">
{{formData?.refundApplyCode}}
</se>
<se label="账户名称">
{{formData?.bankAccountName}}
</se>
<se label="提现时间">
{{formData?.createTime}}
</se>
<se label="虚拟账户">
{{formData?.virtualAccount}}
</se>
<se label="提现状态">
{{formData?.refundStatusLabel}}
</se>
<se label="提现金额">
{{formData?.amount | currency}}
</se>
<se label="银行流水号">
{{formData?.bankSerialNumber}}
</se>
<se label="提现至银行卡">
{{formData?.bankCardNumber}}
</se>
<se label="银行回单" col="1">
<a (click)="downBack()">{{formData?.refundStatus==='3'?'下载回单':'暂无回单'}}</a>
</se>
</div>
<nz-alert nzType="info" nzMessage="提现进度" class="mb-md mt-md"></nz-alert>
<div nz-row class="mt-xl">
<div nz-col nzSpan="12" nzOffset="1">
<app-logistics-time-line [data]="timeLineData"></app-logistics-time-line>
</div>
</div>
</nz-card>

View File

@ -0,0 +1,17 @@
:host::ng-deep {
.ant-alert-info {
background-color: #f3f3f3;
border : 1px solid #dbdbdb;
.ant-alert-message {
color: rgba(0, 0, 0, 0.85);
font-weight: 600;
font-size: 16px;
}
}
.ant-form-item {
margin-bottom: 15px;
}
}

View File

@ -0,0 +1,87 @@
import { Component, OnInit } from '@angular/core';
import { ActivatedRoute } from '@angular/router';
import { FreightAccountService } from 'src/app/routes/financial-management/services/freight-account.service';
@Component({
selector: 'app-partner-recored-detail',
templateUrl: './detail.component.html',
styleUrls: ['./detail.component.less']
})
export class PartnerRecordedDetailComponent implements OnInit {
formData: any = {};
timeLineData: any = [];
constructor(public service: FreightAccountService, private route: ActivatedRoute) {
const id = route.snapshot.params.id;
this.loadRefundDetail(id);
}
ngOnInit(): void { }
loadRefundDetail(id: string) {
this.service.request(this.service.$api_get_refund_detail, { id }).subscribe(res => {
if (res) {
this.formData = res;
// 处理流程节点数据
// 流程是否结束
let isEnd = false;
if (res.successTime) {
isEnd = true;
if (res.refundStatus === '3') {
this.timeLineData.push({ time: res.successTime, value: `到账成功`, color: 'green' });
} else {
this.timeLineData.push({ time: res.successTime, value: `提现失败`, color: 'red' });
}
}
if (res.agreeTime && res.refundStatus !== '4') {
this.timeLineData.push({ time: res.agreeTime, value: `银行处理中`, color: 'gray' });
}
if (res.agreeTime) {
if (res.refundStatus === '4') {
isEnd = true;
this.timeLineData.push({
time: res.agreeTime,
value: `拒绝提现<br/>操作人员:${res.handlerUserIdLabel}`,
color: 'red'
});
} else {
this.timeLineData.push({
time: res.agreeTime,
value: `审核通过<br/>操作人员:${res.handlerUserIdLabel}`,
color: 'gray'
});
}
}
if (res.createTime) {
this.timeLineData.push({
time: res.createTime,
value: `提交提现申请<br/>提现${res.amount}元至${res.bankName}(${res.bankCardNumber})<br/>操作人员:${res.userIdLabel}`,
color: 'gray'
});
}
if (this.timeLineData?.length > 0 && !isEnd) {
this.timeLineData[0].color = 'green';
}
}
});
}
downBack() {
if (this.formData?.refundStatus !== '3') {
return;
}
this.service.getReceiptUrl(this.formData.receiptUrl, {
bankType: this.formData.bankType,
rmYll: this.formData.userId,
snglFlgCd: this.formData.coreSerNo,
bussType: '06',
ltdId: this.formData.ltdId
});
}
goBack() {
history.go(-1);
}
}

View File

@ -0,0 +1,62 @@
<page-header-wrapper [title]="''"></page-header-wrapper>
<nz-card class="search-box" nzBordered>
<div nz-row nzGutter="8">
<div nz-col [nzXl]="_$expand ? 24 : 18" [nzLg]="24" [nzSm]="24" [nzXs]="24">
<sf #sf [schema]="searchSchema"
[ui]="{ '*': { spanLabelFixed: 90,grid: { lg: 8, md: 12, sm: 12, xs: 24,gutter:15 } }}" [compact]="true"
[button]="'none'"></sf>
</div>
<div nz-col [nzXl]="_$expand ? 24 : 6" [nzLg]="24" [nzSm]="24" [nzXs]="24" [class.expend-options]="_$expand"
class="text-right">
<button nz-button nzType="primary" [nzLoading]="service.http.loading" (click)="st?.load(1)">查询</button>
<button nz-button (click)="resetSF()">重置</button>
<button nz-button> 导出</button>
<button nz-button nzType="link" (click)="expandToggle()">
{{ !_$expand ? '展开' : '收起' }}
<i nz-icon [nzType]="!_$expand ? 'down' : 'up'"></i>
</button>
</div>
</div>
</nz-card>
<nz-card class="content-box" nzBordered>
<nz-tabset [nzTabBarExtraContent]="extraTemplate">
<nz-tab nzTitle="全部" (nzClick)="changeRefundStatus()"></nz-tab>
<nz-tab nzTitle="待初审" (nzClick)="changeRefundStatus('1')"></nz-tab>
<nz-tab nzTitle="待复核" (nzClick)="changeRefundStatus('2')"></nz-tab>
<nz-tab nzTitle="已入账" (nzClick)="changeRefundStatus('3')"></nz-tab>
<nz-tab nzTitle="已拒绝" (nzClick)="changeRefundStatus('4')"></nz-tab>
</nz-tabset>
<ng-template #extraTemplate>
<div class="d-flex align-items-center ">
<div class="mr-md">
已选择
<strong class="text-red">{{ selectedRows.length }}</strong> 条数据&nbsp;&nbsp; 累计提现 <strong class="text-red">{{
totalCallNo }}</strong>
<!-- <a *ngIf="totalCallNo > 0" (click)="st.clearCheck()" class="ml-lg">清空</a> -->
</div>
<button nz-button (click)="this.auditAction(null)">审核</button>
</div>
</ng-template>
<st #st [data]="service.$api_get_refund_page" [columns]="columns" [req]="{ process: beforeReq }"
[loading]="service.http.loading" [scroll]="{ x:'1200px' }" (change)="stChange($event)"
[res]="{ reName: { list: 'data.records', total: 'data.total' }, process: afterRes }"
[page]="{ show: true, pageSizes: [10, 20, 50, 100, 200, 500] }" [loading]="service.http.loading">
<ng-template st-row="bankCardNumber" let-item let-index="index" let-column="column">
{{ item.bankName }} <br> {{ item.bankCardNumber }}
</ng-template>
</st>
</nz-card>
<ng-template #auditModal>
<div nz-row nzGutter="8">
<div nz-col nzSpan="24" se-container [labelWidth]="80">
<se [col]="1" label="备注">
<textarea nz-input rows="3" [(ngModel)]="msg" placeholder="同意可以不用填写原因 ,拒绝必须说明原因"
style="width: 325px;margin-left: 14px;"></textarea>
</se>
</div>
</div>
</ng-template>

View File

@ -0,0 +1,334 @@
import { Component, OnInit, ViewChild } from '@angular/core';
import { ActivatedRoute, Router } from '@angular/router';
import { STComponent, STColumn, STChange, STRequestOptions, STData } from '@delon/abc/st';
import { SFComponent, SFSchema, SFDateWidgetSchema } from '@delon/form';
import { NzModalService } from 'ng-zorro-antd/modal';
import { FreightAccountService } from 'src/app/routes/financial-management/services/freight-account.service';
import Big from 'src/app/shared/utils/deal-precision';
@Component({
selector: 'app-partner-recorded-record',
templateUrl: './record.component.html',
styleUrls: ['../../../../commom/less/box.less', '../../../../commom/less/expend-but.less']
})
export class PartnerRecordedRecordComponent implements OnInit {
@ViewChild('st', { static: true }) st!: STComponent;
@ViewChild('sf', { static: false }) sf!: SFComponent;
@ViewChild('auditModal', { static: false }) auditModal!: any;
@ViewChild('viewReasonModal', { static: false }) viewReasonModal!: any;
columns: STColumn[] = this.initST();
searchSchema: SFSchema = this.initSF();
_$expand = false;
selectedRows: any[] = [];
totalCallNo = 0;
refundStatus: any = '';
msg = '';
constructor(public service: FreightAccountService, private nzModalService: NzModalService, private router: Router, public ar: ActivatedRoute) { }
ngOnInit(): void { }
beforeReq = (requestOptions: STRequestOptions) => {
if (this.sf) {
Object.assign(requestOptions.body, {
...this.sf.value,
createTime: {
start: this.sf.value.createTime?.[0] || '',
end: this.sf.value.createTime?.[1] || ''
},
refundStatus: this.refundStatus || null
});
}
return requestOptions;
};
afterRes = (data: any[], rawData?: any) => {
data = data.map(node => ({ ...node, disabled: node.refundStatus !== '1' }));
return data;
};
stChange(e: STChange): void {
if (e.type === 'checkbox') {
const checkRows = (e.checkbox as STData[]) || [];
//判断当前页是否有选中的行
if (checkRows.length === 0) {
// 当前页没有存在已勾选的行,移除之前所记录的当前页的行
const stList = this.st.list;
stList.forEach(item => {
this.selectedRows = this.selectedRows.filter((e: any) => e.id !== item.id);
})
} else {
//添加新增的行
checkRows.forEach((item: any) => {
const newSelectedList = this.selectedRows.filter((r: any) => r.id === item.id);
if (newSelectedList.length === 0) {
this.selectedRows.push(item);
}
})
// 移除取消选中的行
const stList = this.st.list;
stList.forEach(item => {
if (!item.checked) {
const index = this.selectedRows.findIndex(_item => item.id === _item.id);
if (index !== -1) this.selectedRows.splice(index, 1);
}
})
}
let totalCallNo = 0;
this.selectedRows.forEach((item => {
totalCallNo = new Big(this.totalCallNo).plus(item?.amount).parse();
}));
this.totalCallNo = totalCallNo;
} else if (e.type === 'loaded') {
// 页面加载时勾选
(e?.loaded || []).forEach((r) => {
this.selectedRows.forEach((x) => {
if (x.id === r.id) {
r.checked = true;
}
});
});
}
}
changeRefundStatus(status?: string) {
this.refundStatus = status || null;
this.st.load(1);
}
auditAction(item?: any) {
this.msg = '';
let params: Array<string> = [];
if (item) {
params = [item.id];
} else {
params = this.selectedRows.map(node => node.id);
}
const modal = this.nzModalService.create({
nzTitle: '审核',
nzContent: this.auditModal,
nzFooter: [
{
label: '拒绝',
type: 'default',
onClick: () => {
this.service
.request(this.service.$api_disagree_refund, {
refundApplicationId: params,
msg: this.msg
})
.subscribe(res => {
if (res) {
this.service.msgSrv.success('审核拒绝成功');
modal.destroy();
this.st.load(1);
}
});
}
},
{
label: '通过',
type: 'primary',
onClick: () => {
this.service
.request(this.service.$api_agree_refund, {
refundApplicationId: params,
msg: this.msg
})
.subscribe(res => {
if (res) {
this.service.msgSrv.success('审核通过成功');
modal.destroy();
this.st.load(1);
}
});
}
}
]
});
modal.afterClose.subscribe(res => {
this.st.load();
});
}
showReason(item: any) {
const modal = this.nzModalService.create({
nzTitle: '查看原因',
nzContent: item?.rejectionCause || item?.failCause,
nzFooter: [
{
label: '关闭',
type: 'primary',
onClick: () => {
modal.destroy();
}
}
]
});
}
/**
* 重置表单
*/
resetSF() {
this.sf.reset();
this._$expand = false;
}
/**
* 伸缩查询条件
*/
expandToggle() {
this._$expand = !this._$expand;
this.sf?.setValue('/expand', this._$expand);
}
private initSF(): SFSchema {
return {
properties: {
expand: {
type: 'boolean',
ui: {
hidden: true
}
},
refundApplyCode: {
type: 'string',
title: '提现单号',
ui: {
placeholder: '请输入'
}
},
refundStatus: {
type: 'string',
title: '提现状态',
ui: {
widget: 'dict-select',
params: { dictKey: 'refund:apply:status' },
placeholder: '请选择'
}
},
createTime: {
title: '提现时间',
type: 'string',
ui: {
widget: 'sl-from-to-search',
format: 'yyyy-MM-dd',
placeholder: '请选择',
nzShowTime: true
} as SFDateWidgetSchema
},
bankAccountName: {
type: 'string',
title: '账户名称',
ui: {
placeholder: '请输入',
visibleIf: {
expand: (value: boolean) => value
}
}
},
accountType: {
type: 'string',
title: '账户类型',
ui: {
widget: 'dict-select',
params: { dictKey: 'bank:type' },
placeholder: '请选择',
visibleIf: {
expand: (value: boolean) => value
}
}
},
ltdId: {
type: 'string',
title: '网络货运人',
ui: {
widget: 'select',
placeholder: '请选择',
allowClear: true,
asyncData: () => this.service.getNetworkFreightForwarder(),
visibleIf: {
expand: (value: boolean) => value
}
}
},
bankType: {
type: 'string',
title: '银行类型',
ui: {
widget: 'dict-select',
params: { dictKey: 'bankname:type' },
placeholder: '请输入',
visibleIf: {
expand: (value: boolean) => value
}
}
}
}
};
}
private initST(): STColumn[] {
return [
{ title: '', index: 'key', type: 'checkbox', className: 'text-center' },
{ title: '提现时间', index: 'createTime', width: 180, className: 'text-center' },
{ title: '提现单号', index: 'refundApplyCode', width: 180, className: 'text-center' },
{ title: '网络货运人', index: 'ltdName', width: 220, className: 'text-center' },
{ title: '银行类型', index: 'bankTypeLabel', width: 100, className: 'text-center' },
{ title: '账户类型', index: 'bankTypeLabel', width: 100, className: 'text-center' },
{ title: '账户名称', index: 'bankAccountName', width: 220, className: 'text-center' },
{ title: '虚拟账户', index: 'virtualAccount', width: 180, className: 'text-center' },
{
title: '提现金额',
index: 'amount',
width: 150,
type: 'widget',
className: 'text-right',
widget: { type: 'currency-chy', params: ({ record }) => ({ value: record.amount }) }
},
{ title: '提现银行账户', render: 'bankCardNumber', width: 200, className: 'text-center' },
{ title: '提现状态', index: 'refundStatusLabel', width: 100, className: 'text-center' },
{ title: '银行流水号', index: 'bankSerialNumber', width: 160, className: 'text-center' },
{ title: '核心交易流水', index: 'coreSerNo', width: 180, className: 'text-center' },
{ title: '失败原因', index: 'rejectionCause', width: 200, format: item => item.failCause, className: 'text-center' },
{
title: '操作',
fixed: 'right',
width: '110px',
buttons: [
{
text: '查看回单',
iif: item => item.refundStatus === '3',
click: item =>
this.service.getReceiptUrl(item.receiptUrl, {
bankType: item.bankType,
rmYll: item.userId,
snglFlgCd: item.coreSerNo,
bussType: '06',
ltdId: item.ltdId
})
},
{
text: '查看原因',
iif: item => item.refundStatus === '4',
click: item => this.showReason(item)
},
{
text: '审核',
iif: item => item.refundStatus === '1',
click: item => this.auditAction(item)
},
{
text: '详情',
click: item => this.router.navigate(['./detail/' + item.id], { relativeTo: this.ar })
}
]
}
];
}
}