Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop

This commit is contained in:
weiyu
2022-05-13 10:21:14 +08:00
140 changed files with 2826 additions and 6654 deletions

View File

@ -34,7 +34,6 @@
],
"styles": [
"node_modules/perfect-scrollbar/css/perfect-scrollbar.css",
"node_modules/quill/dist/quill.snow.css",
"src/styles.less",
{
"input": "src/styles/default.less",
@ -49,7 +48,6 @@
],
"scripts": [
"node_modules/quill/dist/quill.min.js",
"node_modules/perfect-scrollbar/dist/perfect-scrollbar.js",
"node_modules/qrious/dist/qrious.min.js"
],
@ -139,7 +137,6 @@
"karmaConfig": "karma.conf.js",
"tsConfig": "tsconfig.spec.json",
"scripts": [
"node_modules/quill/dist/quill.min.js",
"node_modules/perfect-scrollbar/dist/perfect-scrollbar.js"
],
"styles": [],

4624
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -67,8 +67,6 @@
"ngx-trend": "^7.0.0",
"perfect-scrollbar": "^1.5.2",
"qrious": "^4.0.2",
"quill": "^1.3.7",
"quill-image-resize-module": "^3.0.0",
"rxjs": "~6.6.0",
"screenfull": "^5.1.0",
"tslib": "^2.3.0",

View File

@ -4,7 +4,7 @@
* @Author : Shiming
* @Date : 2022-01-18 09:51:21
* @LastEditors : Shiming
* @LastEditTime : 2022-05-09 11:25:41
* @LastEditTime : 2022-05-13 09:36:19
* @FilePath : \\tms-obc-web\\proxy.conf.js
* Copyright (C) 2022 huzhenhong. All rights reserved.
*/

View File

@ -1,23 +1,19 @@
/* eslint-disable import/order */
/* eslint-disable import/no-duplicates */
import { HttpClientModule } from '@angular/common/http';
import { default as ngLang } from '@angular/common/locales/zh';
import { APP_INITIALIZER, DEFAULT_CURRENCY_CODE, LOCALE_ID, NgModule, Type } from '@angular/core';
import { APP_INITIALIZER, DEFAULT_CURRENCY_CODE, NgModule, Type } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
import { SimpleInterceptor } from '@delon/auth';
import { NzNotificationModule } from 'ng-zorro-antd/notification';
import zh from '@angular/common/locales/zh';
registerLocaleData(zh);
// #region global third module
import { BidiModule } from '@angular/cdk/bidi';
const GLOBAL_THIRD_MODULES: Array<Type<any>> = [BidiModule];
const GLOBAL_THIRD_MODULES: Array<Type<any>> = [];
// #endregion
// #region Http Interceptors
import { HTTP_INTERCEPTORS } from '@angular/common/http';
import { HttpClientModule, HTTP_INTERCEPTORS } from '@angular/common/http';
import { BusinessInterceptor, DefaultInterceptor } from '@core';
@ -42,38 +38,20 @@ const APPINIT_PROVIDES = [
multi: true
},
{ provide: DEFAULT_CURRENCY_CODE, useValue: '¥' },
{ provide: RouteReuseStrategy, useClass: ReuseTabStrategy, deps: [ReuseTabService] },
AuthGuard
{ provide: RouteReuseStrategy, useClass: ReuseTabStrategy, deps: [ReuseTabService] }
];
// #endregion
import { AppComponent } from './app.component';
import { CoreModule } from './core/core.module';
import { GlobalConfigModule } from './global-config.module';
import { LayoutModule } from './layout/layout.module';
import { RoutesModule } from './routes/routes.module';
import { SharedModule } from './shared/shared.module';
import { STWidgetModule } from './shared/widget/st-widget.module';
import { registerLocaleData } from '@angular/common';
import { AuthGuard } from './core/guards/auth.guard';
import { RouteReuseStrategy } from '@angular/router';
import { RouteReuseStrategy, RouterModule } from '@angular/router';
import { ReuseTabService, ReuseTabStrategy } from '@delon/abc/reuse-tab';
@NgModule({
declarations: [AppComponent],
imports: [
BrowserModule,
BrowserAnimationsModule,
HttpClientModule,
GlobalConfigModule.forRoot(),
CoreModule,
SharedModule,
LayoutModule,
RoutesModule,
STWidgetModule,
NzNotificationModule,
...GLOBAL_THIRD_MODULES
],
imports: [BrowserModule, BrowserAnimationsModule, HttpClientModule, CoreModule, RoutesModule, RouterModule, ...GLOBAL_THIRD_MODULES],
providers: [...INTERCEPTOR_PROVIDES, ...APPINIT_PROVIDES],
bootstrap: [AppComponent]
})

View File

@ -1,10 +1,11 @@
import { NgModule, Optional, SkipSelf } from '@angular/core';
import { AuthGuard } from './guards/auth.guard';
import { EATokenGuard } from './guards/token.guard';
import { throwIfAlreadyLoaded } from './module-import-guard';
@NgModule({
providers: [EATokenGuard]
providers: [AuthGuard, EATokenGuard]
})
export class CoreModule {
constructor(@Optional() @SkipSelf() parentModule: CoreModule) {

View File

@ -3,6 +3,7 @@ import { NavigationEnd, Router } from '@angular/router';
import { ReuseTabService } from '@delon/abc/reuse-tab';
import { MenuService } from '@delon/theme';
import { InputBoolean } from '@delon/util';
import { SearchDrawerService } from '@shared';
import { NzMenuModeType } from 'ng-zorro-antd/menu';
import { Subject } from 'rxjs';
import { filter, takeUntil } from 'rxjs/operators';
@ -31,7 +32,8 @@ export class LayoutProMenuComponent implements OnInit, OnDestroy {
private router: Router,
public pro: BrandService,
private cdr: ChangeDetectorRef,
private reuseService: ReuseTabService
private reuseService: ReuseTabService,
private searchDrawerService: SearchDrawerService
) {}
private cd(): void {
@ -132,6 +134,7 @@ export class LayoutProMenuComponent implements OnInit, OnDestroy {
routeTo(link: string | undefined) {
if (link) {
this.reuseService.clear();
this.searchDrawerService.unsubscribe();
this.router.navigate([link]);
}
}

View File

@ -1,5 +1,5 @@
import { AfterViewInit, Component, OnDestroy, OnInit } from '@angular/core';
import { OnReuseDestroy } from '@delon/abc/reuse-tab';
import { OnReuseDestroy, OnReuseInit, ReuseHookOnReuseInitType } from '@delon/abc/reuse-tab';
import { SFComponent, SFSchema } from '@delon/form';
import { SearchDrawerService } from '@shared';
import { fromEvent, Subscription } from 'rxjs';
@ -25,19 +25,18 @@ import { debounceTime } from 'rxjs/operators';
@Component({
template: ''
})
export class BasicTableComponent implements AfterViewInit, OnDestroy, OnReuseDestroy {
export class BasicTableComponent implements AfterViewInit, OnDestroy, OnReuseDestroy, OnReuseInit {
scrollY = '400px';
sf!: SFComponent;
sfValue: Record<string, any> = {};
drawer: Subscription[] = [];
schema: SFSchema = {};
deviationHeight = 0;
constructor(public searchDrawerService: SearchDrawerService) {}
_onReuseDestroy(): void {
this.drawer.forEach(sub => sub.unsubscribe());
_onReuseInit(type?: ReuseHookOnReuseInitType): void {
this.search();
}
ngAfterViewInit(): void {
@ -51,23 +50,29 @@ export class BasicTableComponent implements AfterViewInit, OnDestroy, OnReuseDes
});
}
_onReuseDestroy(): void {
// this.drawer.forEach(sub => sub.unsubscribe());
}
ngOnDestroy(): void {
this.drawer.forEach(sub => sub.unsubscribe());
this.searchDrawerService.unsubscribe();
}
openDrawer() {
if (this.drawer?.length > 0) {
console.log(this.sfValue);
if (this.searchDrawerService.drawer?.length > 0) {
this.searchDrawerService.create(this.sfValue, this.schema);
} else {
const drawer = this.searchDrawerService.create(this.sfValue, this.schema);
this.drawer.push(
this.searchDrawerService.drawer.push(
drawer.initEvent.subscribe((sf: SFComponent) => {
if (sf) {
this.sf = sf;
}
})
);
this.drawer.push(
this.searchDrawerService.drawer.push(
drawer.closeEvent.subscribe((res: Record<string, any>) => {
this.sfValue = res;
if (res) {

View File

@ -22,11 +22,8 @@ import { ContractManagementService } from '../../services/contract-management.se
})
export class ContractManagementDetailComponent implements OnInit {
constructor(
private nzModalService: NzModalService,
public service: ContractManagementService,
public route: ActivatedRoute,
private datePipe: DatePipe,
private router: Router
public route: ActivatedRoute
) {}
textStatus = '合同详情';
name: any;

View File

@ -2,7 +2,6 @@ import { Component } from '@angular/core';
@Component({
selector: 'app-dashboard',
templateUrl: './dashboard.component.html',
styleUrls: ['./dashboard.component.less']
template: ''
})
export class DashboardComponent {}

View File

@ -19,7 +19,7 @@
</p>
</ng-template>
<ng-template #AdvanceDepositFooter>
<g2-custom #AdvanceDeposit delay="100"></g2-custom>
<g2-custom #AdvanceDeposit></g2-custom>
<!-- <g2-mini-area line color="#cceafe" height="45" [data]="totalAdvanceDeposit?.list || []"
(clickItem)="handleClick($event)">
</g2-mini-area> -->
@ -75,12 +75,12 @@
</div>
<div nz-row [nzGutter]="16">
<div nz-col class="gutter-row" [nzSpan]="6">
<nz-card acl [acl-ability]="['dataindex-getBillTypeProportion']"><label class="chart_title">订单类型比例</label>
<nz-card acl [acl-ability]="['dataindex-getBillTypeProportion']"><label class="chart_title">订单类型比例</label>
<g2-custom #g2custom delay="100"></g2-custom>
</nz-card>
</div>
<div nz-col class="gutter-row" [nzSpan]="18">
<nz-card acl [acl-ability]="['dataindex-getBillAmount']"><label class="chart_title">大区业绩完成情况</label>
<nz-card acl [acl-ability]="['dataindex-getBillAmount']"><label class="chart_title">大区业绩完成情况</label>
<!-- <g2-timeline [data]="chartData" [titleMap]="{ y1: '订单金额(元)', y2: '' }" [height]="200" mask="MM月DD日"
[slider]="false"></g2-timeline> -->
<g2-custom #RegionalPerforman delay="100"></g2-custom>
@ -89,7 +89,7 @@
</div>
<div nz-row [nzGutter]="16">
<div nz-col class="gutter-row" [nzSpan]="6">
<nz-card acl [acl-ability]="['dataindex-getWayBillDirectProportion']"> <label class="chart_title">运单直付比例</label>
<nz-card acl [acl-ability]="['dataindex-getWayBillDirectProportion']"> <label class="chart_title">运单直付比例</label>
<!-- <g2-pie #pie title="销售额" subTitle="销售额" [total]="total" [valueFormat]="format" [data]="salesPieData" height="294"
(clickItem)="handleClick($event)" [lineWidth]="10">
</g2-pie> -->
@ -97,7 +97,7 @@
</nz-card>
</div>
<div nz-col class="gutter-row" [nzSpan]="18">
<nz-card acl [acl-ability]="['dataindex-getBillPaymentAmount']">
<nz-card acl [acl-ability]="['dataindex-getBillPaymentAmount']">
<label class="chart_title">业绩完成情况</label>
<!-- <g2-bar [data]="salesData" (clickItem)="handleClick($event)" height="400"></g2-bar> -->
<g2-custom #SaleProportion delay="100"></g2-custom>

View File

@ -1,4 +1,4 @@
import { ChangeDetectorRef, Component, ElementRef, NgZone, OnInit, ViewChild } from '@angular/core';
import { AfterViewInit, ChangeDetectorRef, Component, ElementRef, NgZone, OnInit, ViewChild } from '@angular/core';
import { ModalHelper, _HttpClient } from '@delon/theme';
import { G2MiniAreaClickItem, G2MiniAreaData } from '@delon/chart/mini-area';
import { G2PieClickItem, G2PieComponent, G2PieData } from '@delon/chart/pie';
@ -18,7 +18,7 @@ import { GeometryLabelCfg } from '@antv/g2/lib/interface';
styleUrls: ['./dataindex.component.less'],
providers: [CurrencyPipe]
})
export class DatatableDataindexComponent implements OnInit {
export class DatatableDataindexComponent implements OnInit, AfterViewInit {
@ViewChild('AdvanceDeposit', { static: false }) AdvanceDeposit!: G2CustomComponent;
@ViewChild('g2custom', { static: false }) g2custom!: G2CustomComponent;
@ViewChild('RegionalPerforman', { static: false }) RegionalPerforman!: G2CustomComponent;
@ -38,19 +38,24 @@ export class DatatableDataindexComponent implements OnInit {
regionalPerformanceCompletion: DataPerformanceTrendVO[] = [];
constructor(private service: DataService, private currency: CurrencyPipe) {}
ngOnInit(): void {
constructor(private service: DataService, private currency: CurrencyPipe) { }
ngAfterViewInit(): void {
this.initMiniAreaData();
this.initOthersData();
}
ngOnInit(): void {
}
private initMiniAreaData() {
// 客户预存款总额
this.service.request(this.service.$api_total_advance_deposit).subscribe((res: DataTotalVO) => {
if (res) {
this.totalAdvanceDeposit = this.formatMiniAreaData(res);
this.initAreaMap(this.AdvanceDeposit['el'].nativeElement as any, []);
setTimeout(() => {
this.initAreaMap(this.AdvanceDeposit['el'].nativeElement as any, []);
}, 400);
}
});
// 业绩量总额
@ -79,8 +84,9 @@ export class DatatableDataindexComponent implements OnInit {
if (res) {
const billTypeDatas2 = this.formatCoordinateData(res);
console.log(billTypeDatas2);
this.initBillChart(this.g2custom['el'].nativeElement as any,billTypeDatas2);
setTimeout(() => {
this.initBillChart(this.g2custom['el'].nativeElement as any, billTypeDatas2);
}, 100);
}
});
// 大区业绩完成情况
@ -89,31 +95,35 @@ export class DatatableDataindexComponent implements OnInit {
// this.regionalPerformanceCompletion = res.map(item => ({ ...item, time: new Date(item.time)?.getTime() }));
// this.initRegionalPerformanceChart(this.RegionalPerforman['el'].nativeElement as any, this.regionalPerformanceCompletion);
this.regionalPerformanceCompletion = this.formatBarData(res);
this.initBiaxialChart(this.RegionalPerforman['el'].nativeElement as any, this.regionalPerformanceCompletion, {
y1Title: '业绩量(万)',
y2Title: '业绩完成率',
y3Title: '同期业绩完成率'
});
setTimeout(() => {
this.initBiaxialChart(this.RegionalPerforman['el'].nativeElement as any, this.regionalPerformanceCompletion, {
y1Title: '业绩量(万)',
y2Title: '业绩完成率',
y3Title: '同期业绩完成率'
});
}, 100);
}
});
// 订单类型比例
this.service.request(this.service.$api_getWayBillDirectProportion).subscribe(res => {
if (res) {
const billTypeDatas = this.formatCoordinateData(res.map((item: any) => ({ ...item, billType: item.wayBillType })));
console.log(billTypeDatas);
this.initBillChart(this.BillDirectProportion['el'].nativeElement as any, billTypeDatas);
setTimeout(() => {
this.initBillChart(this.BillDirectProportion['el'].nativeElement as any, billTypeDatas);
}, 100);
}
});
// 统计订单结算金额-趋势
this.service.request(this.service.$api_get_bill_payment_amount).subscribe(res => {
if (res) {
this.salesData = this.formatBarData(res);
this.initBiaxialChart(this.SaleProportion['el'].nativeElement as any, this.salesData, {
y1Title: '业绩量(万)',
y2Title: '业绩完成率',
y3Title: '同期业绩完成率'
});
setTimeout(() => {
this.initBiaxialChart(this.SaleProportion['el'].nativeElement as any, this.salesData, {
y1Title: '业绩量(万)',
y2Title: '业绩完成率',
y3Title: '同期业绩完成率'
});
}, 100);
}
});
}
@ -145,7 +155,7 @@ export class DatatableDataindexComponent implements OnInit {
chart.scale('percent', {
formatter: val => {
val = (val * 100 ).toFixed(0)+ '%';
val = (val * 100).toFixed(0) + '%';
return val;
}
});
@ -202,7 +212,7 @@ export class DatatableDataindexComponent implements OnInit {
.label('percent', percent => {
return {
content: data => {
return (percent * 100).toFixed(0)+`%`;
return (percent * 100).toFixed(0) + `%`;
},
style: { fontSize: 14 }
};
@ -351,6 +361,8 @@ export class DatatableDataindexComponent implements OnInit {
}
return {};
});
console.log(chart);
chart.render();
}

View File

@ -4,7 +4,7 @@
* @Author : Shiming
* @Date : 2022-04-06 10:57:56
* @LastEditors : Shiming
* @LastEditTime : 2022-05-07 09:43:16
* @LastEditTime : 2022-05-09 13:59:19
* @FilePath : \\tms-obc-web\\src\\app\\routes\\datatable\\components\\datascreen\\datascreen.component.html
* Copyright (C) 2022 huzhenhong. All rights reserved.
-->
@ -48,31 +48,6 @@
<nz-card nzTitle="本年交易趋势">
<app-financetable-curve-min #curve [chartData]="chartData2"></app-financetable-curve-min>
</nz-card>
<nz-card nzTitle="实时货源" style="height: 400px">
<st
#st
multiSort
[columns]="columns"
[scroll]="{ y: '280px' }"
[data]="service.$api_getRealTimeSupply"
[req]="{ method: 'POST', allInBody: true, reName: { pi: 'pageIndex', ps: 'pageSize' }, params: reqParams }"
[res]="{ reName: { list: 'data' } }"
[page]="{ show: false, showSize: false, pageSizes: [5, 50, 100] }"
[loading]="service.http.loading"
>
<ng-template st-row="index" let-item let-index="index">
{{ index + 1 }}
</ng-template>
<ng-template st-row="weight" let-item let-index="index">
{{ item.weight ? item.weight + '吨' : '' }}
{{ item.volume ? item.volume + '方' : '' }}
</ng-template>
<ng-template st-row="weight" let-item let-index="index">
{{ item.weight ? item.weight + '吨' : '' }}
{{ item.volume ? item.volume + '方' : '' }}
</ng-template>
</st>
</nz-card>
</div>
<div nz-col class="gutter-row" nzXs="12" nzSm="12" nzMd="12" nzLg="12" nzXl="8" nzXXl="8">
<nz-card>
@ -91,11 +66,6 @@
<div style="min-height: 550px">
<app-datatable-customindex-map style="max-height: 680px" #map [chartData]="chartData"></app-datatable-customindex-map>
</div>
<nz-card>
<nz-row [nzGutter]="24">
<g2-bar #bar height="350" [delay]="300" repaint="true" [title]="'本月发货量排名'" [data]="salesData2" (ready)="genData()"></g2-bar>
</nz-row>
</nz-card>
</div>
<div nz-col class="gutter-row" nzXs="12" nzSm="12" nzMd="12" nzLg="12" nzXl="8" nzXXl="8">
<nz-card>
@ -156,11 +126,48 @@
</nz-col>
</nz-row>
</nz-card>
</div>
</div>
<div nz-row [nzGutter]="24">
<div nz-col class="gutter-row" nzXs="12" nzSm="12" nzMd="12" nzLg="12" nzXl="8" nzXXl="8">
<nz-card nzTitle="实时货源" style="height: 400px">
<st
#st
multiSort
[columns]="columns"
[scroll]="{ y: '280px' }"
[data]="service.$api_getRealTimeSupply"
[req]="{ method: 'POST', allInBody: true, reName: { pi: 'pageIndex', ps: 'pageSize' }, params: reqParams }"
[res]="{ reName: { list: 'data' } }"
[page]="{ show: false, showSize: false, pageSizes: [5, 50, 100] }"
[loading]="service.http.loading"
>
<ng-template st-row="index" let-item let-index="index">
{{ index + 1 }}
</ng-template>
<ng-template st-row="weight" let-item let-index="index">
{{ item.weight ? item.weight + '吨' : '' }}
{{ item.volume ? item.volume + '方' : '' }}
</ng-template>
<ng-template st-row="weight" let-item let-index="index">
{{ item.weight ? item.weight + '吨' : '' }}
{{ item.volume ? item.volume + '方' : '' }}
</ng-template>
</st>
</nz-card>
</div>
<div nz-col class="gutter-row" nzXs="12" nzSm="12" nzMd="12" nzLg="12" nzXl="8" nzXXl="8">
<nz-card style="height: 400px">
<g2-bar #bar height="350" [delay]="300" repaint="true" [title]="'本月发货量排名'" [data]="salesData2" (ready)="genData()"></g2-bar>
</nz-card>
</div>
<div nz-col class="gutter-row" nzXs="12" nzSm="12" nzMd="12" nzLg="12" nzXl="8" nzXXl="8">
<nz-card nzTitle="实时运单风控" style="height: 400px">
<st
#st
multiSort
[scroll]="{ y: '280px' }"
[scroll]="{ y: '300px' }"
[columns]="orderColumns"
[data]="service.$api_getRealTimeWaybillRiskControl"
[req]="{ method: 'POST', allInBody: true, reName: { pi: 'pageIndex', ps: 'pageSize' }, params: reqOrderParams }"

View File

@ -8,7 +8,7 @@
font-size: 14px;
}
.ant-table-thead > tr > th, .ant-table-tbody > tr > td, .ant-table tfoot > tr > th, .ant-table tfoot > tr > td {
padding: 0;
padding: 5px;
font-size: 12px;
}
}

View File

@ -86,7 +86,7 @@ const COMPONENTS: Type<void>[] = [
imports: [
SharedModule,
DatatableRoutingModule,
SHARED_G2_MODULES
...SHARED_G2_MODULES
],
declarations: COMPONENTS,
})

View File

@ -4,7 +4,7 @@
* @Author : Shiming
* @Date : 2021-12-30 19:36:30
* @LastEditors : Shiming
* @LastEditTime : 2022-05-07 17:33:01
* @LastEditTime : 2022-05-11 11:23:52
* @FilePath : \\tms-obc-web\\src\\app\\routes\\financial-management\\components\\cost-management\\cost-management.component.html
* Copyright (C) 2022 huzhenhong. All rights reserved.
-->
@ -36,7 +36,8 @@
<div class="mr-sm">
<button nz-button nzDanger [nzLoading]="service.http.loading" (click)="openDrawer()" acl
[acl-ability]="['FINANCIAL-COST-list']">筛选</button>
<button nz-button nzDanger (click)="exportList()"> 导出</button>
<button nz-button nzDanger (click)="exportList()" acl
[acl-ability]="['FINANCIAL-COST-export']"> 导出</button>
</div>
</div>
<!-- <div nz-row class="mb-sm">

View File

@ -84,7 +84,7 @@ export class CostManagementComponent extends BasicTableComponent implements OnIn
exportList() {
this.service.exportStart({ ...this.sf?.value, pageSize: -1 }, this.service.$api_get_exportPlatformAccountBalanceByOperator);
this.service.exportStart({ ...this.sf?.value, pageSize: -1 }, this.service.$api_get_reportFeehList);
}
routeTo(url: string, params?: any, status?: any) {

View File

@ -168,7 +168,7 @@ export class DriverAccountComponent extends BasicTableComponent implements OnIni
widget: { type: 'currency-chy', params: ({ record }) => ({ value: record.freezeBalance }) }
},
{
title: '本月累计提现金额',
title: '累计提现金额',
index: 'withdrawBalance',
width: 160,
type: 'widget',

View File

@ -30,7 +30,7 @@ export class PayableOrderDetailComponent implements OnInit {
this.loadHeadInfo();
}
ngOnInit(): void {}
ngOnInit(): void { }
loadHeadInfo() {
this.service.request(this.service.$api_get_fico_ph_header, { id: this.id }).subscribe(res => {
@ -46,27 +46,27 @@ export class PayableOrderDetailComponent implements OnInit {
Object.assign(requestOptions.body, {
...this.sf?.value,
billTime: {
start: this.sf?.value.billTime?.[0] || null,
end: this.sf?.value.billTime?.[1] || null
start: this.sf?.value.billTime?.[0] || '',
end: this.sf?.value.billTime?.[1] || ''
},
feedate: {
start: this.sf?.value.feedate?.[0] || null,
end: this.sf?.value.feedate?.[1] || null
start: this.sf?.value.feedate?.[0] || '',
end: this.sf?.value.feedate?.[1] || ''
}
});
if (this.sf?.value.billTime) {
Object.assign(requestOptions.body, {
billTime: {
start: this.sf?.value.billTime?.[0] || null,
end: this.sf?.value.billTime?.[1] || null
start: this.sf?.value.billTime?.[0] || '',
end: this.sf?.value.billTime?.[1] || ''
}
});
}
if (this.sf?.value.feedate) {
Object.assign(requestOptions.body, {
feedate: {
start: this.sf?.value.feedate?.[0] || null,
end: this.sf?.value.feedate?.[1] || null
start: this.sf?.value.feedate?.[0] || '',
end: this.sf?.value.feedate?.[1] || ''
}
});
}
@ -117,26 +117,23 @@ export class PayableOrderDetailComponent implements OnInit {
placeholder: '请输入'
}
},
cno: {
type: 'string',
title: '结算客户',
ui: {
widget: 'select',
placeholder: '请选择',
allowClear: true,
asyncData: () => this.service.getCloseAccount()
},
default: ''
},
// cno: {
// type: 'string',
// title: '结算客户',
// ui: {
// widget: 'select',
// placeholder: '请选择',
// allowClear: true,
// asyncData: () => this.service.getCloseAccount()
// },
// default: ''
// },
feedate: {
title: '费用日期',
type: 'string',
ui: {
widget: 'sl-from-to-search',
format: 'yyyy-MM-dd',
visibleIf: {
expand: (value: boolean) => value
}
} as SFDateWidgetSchema
},
billTime: {

View File

@ -48,6 +48,9 @@
<div></div>
<div class="mr-sm">
<button nz-button nzDanger [nzLoading]="service.http.loading" (click)="openDrawer()">筛选</button>
<button nz-button nzDanger [disabled]="service.http.loading" acl
[acl-ability]="['FINANCIAL-PAYABLE-export']" (click)='exportList()'>
导出</button>
</div>
</div>
<st #st [data]="service.$api_get_fico_ph_page" [columns]="columns" [req]="{ process: beforeReq }" [page]="{}"

View File

@ -21,11 +21,7 @@ export class PayableOrderComponent extends BasicTableComponent implements OnInit
selectedRows: any[] = [];
info: any = {};
constructor(
public service: FreightAccountService,
private router: Router,
public searchDrawerService: SearchDrawerService
) {
constructor(public service: FreightAccountService, private router: Router, public searchDrawerService: SearchDrawerService) {
super(searchDrawerService);
}
@ -77,6 +73,9 @@ export class PayableOrderComponent extends BasicTableComponent implements OnInit
}
}
exportList() {
this.service.exportStart({ ...this.sf?.value, pageSize: -1 }, this.service.$api_get_fico_ph_page_export);
}
private initSF(): SFSchema {
return {
@ -94,6 +93,20 @@ export class PayableOrderComponent extends BasicTableComponent implements OnInit
placeholder: '请输入'
}
},
billHCode: {
type: 'string',
title: '订单号',
ui: {
placeholder: '请输入'
}
},
waybillHCode: {
type: 'string',
title: '运单号',
ui: {
placeholder: '请输入'
}
},
ltdId: {
type: 'string',
title: '网络货运人',
@ -118,7 +131,7 @@ export class PayableOrderComponent extends BasicTableComponent implements OnInit
enum: [{ value: '1', label: '费用款项' }],
ui: {
widget: 'select',
placeholder: '请选择',
placeholder: '请选择'
}
},
cno: {
@ -128,7 +141,7 @@ export class PayableOrderComponent extends BasicTableComponent implements OnInit
widget: 'select',
placeholder: '请选择',
allowClear: true,
asyncData: () => this.service.getCloseAccount(),
asyncData: () => this.service.getCloseAccount()
}
},
driver2IdName: {
@ -136,19 +149,18 @@ export class PayableOrderComponent extends BasicTableComponent implements OnInit
title: '收款人',
ui: {
widget: 'select',
placeholder: '请选择',
placeholder: '请选择'
}
},
sts: {
type: 'string',
title: '核销状态',
enum: [
{ value: 1, label: '已核销' },
{ value: 0, label: '待核销' }
],
default: '',
ui: {
widget: 'select',
placeholder: '请选择',
widget: 'dict-select',
containsAllLable: true,
params: { dictKey: 'write:off:status' },
containAllLable: true
}
},
phxdate: {
@ -156,7 +168,7 @@ export class PayableOrderComponent extends BasicTableComponent implements OnInit
type: 'string',
ui: {
widget: 'sl-from-to-search',
format: 'yyyy-MM-dd',
format: 'yyyy-MM-dd'
} as SFDateWidgetSchema
},
createTime: {
@ -164,21 +176,14 @@ export class PayableOrderComponent extends BasicTableComponent implements OnInit
type: 'string',
ui: {
widget: 'sl-from-to-search',
format: 'yyyy-MM-dd',
format: 'yyyy-MM-dd'
} as SFDateWidgetSchema
},
billHCode: {
type: 'string',
title: '订单号',
ui: {
placeholder: '请输入',
}
},
feeHCode: {
type: 'string',
title: '费用号',
ui: {
placeholder: '请输入',
placeholder: '请输入'
}
},
remarks: {
@ -186,7 +191,7 @@ export class PayableOrderComponent extends BasicTableComponent implements OnInit
title: '核销备注',
ui: {
autocomplete: 'off',
placeholder: '请选择',
placeholder: '请选择'
}
}
}
@ -196,7 +201,9 @@ export class PayableOrderComponent extends BasicTableComponent implements OnInit
private initST(): STColumn[] {
return [
{ title: '', index: 'key', type: 'checkbox' },
{ title: '核销单号', index: 'phxcode', type: 'link', width: 140 },
{ title: '核销单号', index: 'phxcode', type: 'link', width: 160 },
{ title: '订单号', index: 'billHCode', width: 160 },
{ title: '运单号', index: 'waybillHCode', width: 160 },
{ title: '网络货运人', index: 'ltdName', width: 220 },
{ title: '核销日期', index: 'phxdate', type: 'date', width: 160 },
{ title: '付款账户', index: 'shipperaccount', width: 170 },
@ -224,7 +231,7 @@ export class PayableOrderComponent extends BasicTableComponent implements OnInit
{ title: '银行水单', index: 'bankreceipt', width: 190 },
{ title: '创建时间', index: 'createTime', width: 180 },
// { title: '创建人', index: 'createUserIdLabel', width: 120 },
{ title: '核销状态', index: 'sts', type: 'enum', enum: { 0: '待核销', 1: '已核销' }, width: 120 },
{ title: '核销状态', index: 'stsLabel', width: 120 },
{ title: '核销备注', index: 'remarks', width: 120 },
{
title: '操作',

View File

@ -34,6 +34,9 @@
<div class="mr-sm">
<button nz-button nzDanger [nzLoading]="service.http.loading" (click)="openDrawer()" acl
[acl-ability]="['FINANCIAL-PAYMENT-ORDER-list']">筛选</button>
<button nz-button nzDanger [disabled]="service.http.loading" acl
[acl-ability]="['FINANCIAL-PAYMENT-ORDER-export']" (click)='exportList()'>
导出</button>
</div>
</div>

View File

@ -77,6 +77,10 @@ export class PaymentOrderComponent extends BasicTableComponent implements OnInit
});
}
exportList() {
this.service.exportStart({ ...this.sf?.value, pageSize: -1 }, this.service.$api_get_payment_page_export);
}
private initSF(): SFSchema {
return {
properties: {

View File

@ -21,17 +21,20 @@
<nz-card class="table-box">
<div class="header_box">
<div>
<label class="page_title"> <label class="driver">|</label> 收款单</label>
<label class="ml-md">
已选择
<strong class="text-primary">{{ selectedRows.length }}</strong> 张单
<a *ngIf="selectedRows.length > 0" (click)="st.clearCheck()" class="ml-lg">清空</a>
</label>
</div>
<div class="mr-sm">
<button nz-button nzDanger [nzLoading]="service.http.loading" (click)="openDrawer()">筛选</button>
</div>
<div>
<label class="page_title"> <label class="driver">|</label> 收款单</label>
<label class="ml-md">
已选择
<strong class="text-primary">{{ selectedRows.length }}</strong> 张单
<a *ngIf="selectedRows.length > 0" (click)="st.clearCheck()" class="ml-lg">清空</a>
</label>
</div>
<div class="mr-sm">
<button nz-button nzDanger [nzLoading]="service.http.loading" (click)="openDrawer()">筛选</button>
<button nz-button nzDanger [disabled]="service.http.loading" acl [acl-ability]="['FINANCIAL-RECEIPT-export']"
(click)='exportList()'>
导出</button>
</div>
</div>
<!-- <div class="d-flex align-items-center mb-md mt-md">
<button nz-button (click)="this.addInvoice()" nzType="primary">添加收款</button>

View File

@ -81,6 +81,10 @@ export class ReceiptOrderComponent extends BasicTableComponent implements OnInit
// });
}
exportList() {
this.service.exportStart({ ...this.sf?.value, pageSize: -1 }, this.service.$api_get_receipt_page_export);
}
private initSF(): SFSchema {
return {
properties: {

View File

@ -48,7 +48,9 @@
<div></div>
<div class="mr-sm">
<button nz-button nzDanger [nzLoading]="service.http.loading" (click)="openDrawer()">筛选</button>
<button nz-button nzDanger> 导出</button>
<button nz-button nzDanger [disabled]="service.http.loading" acl [acl-ability]="['FINANCIAL-RECEIVABLE-export']"
(click)='exportList()'>
导出</button>
</div>
</div>

View File

@ -12,7 +12,7 @@ import { FreightAccountService } from '../../services/freight-account.service';
@Component({
selector: 'app-receivable-order',
templateUrl: './receivable-order.component.html',
styleUrls: ['../../../commom/less/commom-table.less','../../../commom/less/common-table-bar.less']
styleUrls: ['../../../commom/less/commom-table.less', '../../../commom/less/common-table-bar.less']
})
export class ReceivableOrderComponent extends BasicTableComponent implements OnInit {
@ViewChild('st', { static: true })
@ -80,6 +80,9 @@ export class ReceivableOrderComponent extends BasicTableComponent implements OnI
}
}
exportList() {
this.service.exportStart({ ...this.sf?.value, pageSize: -1 }, this.service.$api_get_fico_page_export);
}
private initSF(): SFSchema {
return {
@ -121,7 +124,7 @@ export class ReceivableOrderComponent extends BasicTableComponent implements OnI
ui: {
widget: 'dict-select',
params: { dictKey: 'driverrecord:receive:type' },
placeholder: '请选择',
placeholder: '请选择'
}
},
arvattype: {
@ -130,7 +133,7 @@ export class ReceivableOrderComponent extends BasicTableComponent implements OnI
ui: {
widget: 'dict-select',
params: { dictKey: 'pay:type' },
placeholder: '请选择',
placeholder: '请选择'
}
},
cno: {
@ -140,7 +143,7 @@ export class ReceivableOrderComponent extends BasicTableComponent implements OnI
widget: 'select',
placeholder: '请选择',
allowClear: true,
asyncData: () => this.service.getCloseAccount(),
asyncData: () => this.service.getCloseAccount()
}
},
arto: {
@ -152,7 +155,7 @@ export class ReceivableOrderComponent extends BasicTableComponent implements OnI
searchDebounceTime: 300,
searchLoadingText: '搜索中...',
allowClear: true,
onSearch: (q: any) => this.service.getEnterpriceList({ enterpriseName: q }),
onSearch: (q: any) => this.service.getEnterpriceList({ enterpriseName: q })
}
},
sts: {
@ -164,8 +167,7 @@ export class ReceivableOrderComponent extends BasicTableComponent implements OnI
],
ui: {
widget: 'select',
placeholder: '请选择',
placeholder: '请选择'
}
},
banktype: {
@ -178,8 +180,7 @@ export class ReceivableOrderComponent extends BasicTableComponent implements OnI
],
ui: {
widget: 'select',
placeholder: '请选择',
placeholder: '请选择'
},
default: ''
},
@ -188,8 +189,7 @@ export class ReceivableOrderComponent extends BasicTableComponent implements OnI
type: 'string',
ui: {
widget: 'sl-from-to-search',
format: 'yyyy-MM-dd',
format: 'yyyy-MM-dd'
} as SFDateWidgetSchema
},
createTime: {
@ -197,14 +197,21 @@ export class ReceivableOrderComponent extends BasicTableComponent implements OnI
type: 'string',
ui: {
widget: 'sl-from-to-search',
format: 'yyyy-MM-dd',
format: 'yyyy-MM-dd'
} as SFDateWidgetSchema
},
billHCode: {
type: 'string',
title: '订单号',
ui: {
placeholder: '请输入',
placeholder: '请输入'
}
},
waybillHCode: {
type: 'string',
title: '运单号',
ui: {
placeholder: '请输入'
}
},
// orderS3: {
@ -222,7 +229,7 @@ export class ReceivableOrderComponent extends BasicTableComponent implements OnI
title: '核销备注',
ui: {
autocomplete: 'off',
placeholder: '请选择',
placeholder: '请选择'
}
}
}
@ -234,6 +241,7 @@ export class ReceivableOrderComponent extends BasicTableComponent implements OnI
{ title: '', index: 'key', type: 'checkbox' },
{ title: '核销单号', index: 'ahxcode', type: 'link', width: 210 },
{ title: '订单号', index: 'billHCode', type: 'link', width: 180 },
{ title: '运单号', index: 'waybillHCode', width: 180 },
{ title: '网络货运人', index: 'ltdName', width: 220 },
{ title: '核销日期', index: 'ahxdate', type: 'date', width: 160 },
{ title: '收款账户', index: 'ltdaccountId', width: 200 },

View File

@ -41,9 +41,10 @@
{{ item.orderRefundCode }} <br> {{ item.refundStatusLabel }}
</ng-template>
<ng-template st-row="refundAmount" let-item let-index="index" let-column="column">
<ng-container *ngFor="let cost of item.billRefundDetailVOS">
{{cost.costName}}{{ cost.refundAmount |currency }}<br>
</ng-container>
<p *ngFor="let cost of item.billRefundDetailVOS"
style="display: flex;align-items: center;justify-content: space-between;margin: 0;">
<label> {{cost.costName}}</label><label>{{ cost.refundAmount |currency }}</label>
</p>
</ng-template>
<ng-template st-row="billRefundPaymentVOS" let-item let-index="index" let-column="column">
<ng-container *ngFor="let bill of item.billRefundPaymentVOS">

View File

@ -233,6 +233,14 @@ export class RefundRecordComponent extends BasicTableComponent implements OnInit
{ title: '退款单号', render: 'orderRefundCode', width: 190 },
{ title: '退款类型', index: 'refundTypeLabel', width: 140 },
{ title: '退款金额', render: 'refundAmount', className: 'text-right', width: 180 },
{
title: '合计金额',
index: 'refundAmount',
width: 150,
type: 'widget',
className: 'text-right',
widget: { type: 'currency-chy', params: ({ record }) => ({ value: record.refundAmount }) }
},
{ title: '退款时间', index: 'refundExecuteTime', width: 170 },
{ title: '货主', index: 'enterpriseInfoName', width: 150 },
{ title: '所属项目', index: 'enterpriseProjectName', width: 140 },

View File

@ -27,6 +27,8 @@
<div class="mr-sm">
<button nz-button nzDanger [nzLoading]="service.http.loading" (click)="openDrawer()" acl
[acl-ability]="['FINANCIAL-VOUCHER-list']">筛选</button>
<button nz-button nzDanger [disabled]="service.http.loading" (click)="exprot()" acl
[acl-ability]="['FINANCIAL-VOUCHER-export']">导出</button>
</div>
</div>

View File

@ -61,6 +61,11 @@ export class VoucherManagementComponent extends BasicTableComponent {
}
}
// 导出
exprot() {
this.service.exportStart({ ...this.sf?.value, pageSize: -1 }, this.service.$api_get_fico_vch_export);
}
private initSF(): SFSchema {
return {
properties: {
@ -147,9 +152,15 @@ export class VoucherManagementComponent extends BasicTableComponent {
vctype: {
type: 'string',
title: '凭证类型',
enum: [
{label: '全部', value:''},
{label: 'WLW', value:'WLW'},
{label: 'YH', value:'YH'},
{label: 'KP', value:'KP'},
{label: 'ZZ', value:'ZZ'},
],
ui: {
widget: 'dict-select',
params: { dictKey: 'credential:type' },
widget: 'select',
placeholder: '请选择'
},
default: ''

View File

@ -83,6 +83,10 @@ export class FreightAccountService extends ShipperBaseService {
// 查询费用单抬头
$api_get_cost_page = '/api/fcc/ficoFeeH/list/page';
// 导出费用单列表数据
$api_get_cost_page_export = '/api/fcc/ficoFeeH/asyncExport';
// 导出费用管理列表数据
$api_get_reportFeehList = '/api/fcc/ficoFeeH/reportFeehList';
// 根据费用头ID查询费用单及开票明细
$api_get_cost_detail = '/api/fcc/ficoFeeL/detail';
// 费用关联的应收核销明细
@ -90,6 +94,8 @@ export class FreightAccountService extends ShipperBaseService {
// 查询应收核销抬头
$api_get_fico_page = '/api/fcc/ficoAhxH/list/page';
// 应收核销列表数据导出
$api_get_fico_page_export = '/api/fcc/ficoAhxH/asyncExport';
// 应收核销汇总
$api_get_fico_sum = '/api/fcc/ficoAhxH/getSum';
// 获取应收核销抬头
@ -99,6 +105,8 @@ export class FreightAccountService extends ShipperBaseService {
// 查询应付核销抬头
$api_get_fico_ph_page = '/api/fcc/ficoPhxH/list/page';
// 应付核销列表数据导出
$api_get_fico_ph_page_export = '/api/fcc/ficoPhxH/asyncExport';
// 应付核销汇总
$api_get_fico_ph_sum = '/api/fcc/ficoPhxH/getSum';
// 获取应付核销抬头
@ -108,6 +116,8 @@ export class FreightAccountService extends ShipperBaseService {
// 查询总账凭证表
$api_get_fico_vch_page = '/api/fcc/ficoVcH/list/page';
// 导出总账凭证列表数据
$api_get_fico_vch_export = '/api/fcc/ficoVcH/asyncExport';
// 导出总账凭证表
$api_export_fico_vch_page = '/api/fcc/ficoVcH/reportVchListPage';
// 获取总账凭证表详情信息
@ -115,6 +125,8 @@ export class FreightAccountService extends ShipperBaseService {
// 查询付款单抬头
$api_get_payment_page = '/api/fcc/ficoPayH/listFicoPayHPage';
// 付款单列表数据导出
$api_get_payment_page_export = '/api/fcc/ficoPayH/asyncExport';
// 查询付款单明细
$api_get_payment_detail = '/api/fcc/ficoPayL/list/page';
// 付款单抬头信息
@ -122,6 +134,8 @@ export class FreightAccountService extends ShipperBaseService {
// 查询收款单抬头
$api_get_receipt_page = '/api/fcc/ficoBrmH/list/page';
// 收款单列表数据导出
$api_get_receipt_page_export = '/api/fcc/ficoBrmH/asyncExport';
// 收款单抬头信息
$api_get_receipt_header = '/api/fcc/ficoBrmH/get';
// 获取收款单抬头

View File

@ -104,10 +104,9 @@
</span>
</div>
<div nz-row [nzGutter]="24">
<div nz-col [nzSpan]="12">
<div class="handling-col" nz-col [nzSpan]="12">
<div class="handling-info p-md">
<ng-container *ngFor="let item of i?.unLoadingPlaceList">
<div class="flex" *ngIf="item.type === '1'">
<div class="loading-row">
<div class="handling-info-icon loading-bg"></div>
@ -121,7 +120,7 @@
</ng-container>
</div>
</div>
<div nz-col [nzSpan]="12">
<div class="handling-col" nz-col [nzSpan]="12">
<div class="handling-info p-md">
<ng-container *ngFor="let item of i?.unLoadingPlaceList">
<div class="flex" *ngIf="item.type === '2'">
@ -176,9 +175,7 @@
结算依据为2时装货时间不为空显示运费信息否则隐藏
[hidden]="!(i?.settlementBasis ==='1' && i?.unloadTime) && !(i?.settlementBasis ==='2' && i?.loadTime)"
-->
<nz-card #distannce3
[nzBorderless]="true" class="mb0">
<nz-card #distannce3 [nzBorderless]="true" class="mb0">
<div class="font-weight-blod text-md detail-title">
<a class="sign"></a>
<span>运费信息</span>

View File

@ -31,7 +31,8 @@
<div class="tab_header">
<label class="page_title">
<label class="driver">|</label>
大宗订单</label>
大宗订单</label
>
<nz-tabset (nzSelectedIndexChange)="selectChange($event)" [nzTabBarExtraContent]="extraTemplate">
<nz-tab [nzTitle]="'全部(' + tabs?.totalCount + ')'"></nz-tab>
<nz-tab [nzTitle]="'待接单(' + tabs?.receivedQuantity + ')'"></nz-tab>
@ -44,10 +45,17 @@
</div>
<div>
<st #st [bordered]="true" [scroll]="{ x: '2000px',y:scrollY }" [data]="service.$api_get_listBulkPage"
[columns]="columns" [req]="{ process: beforeReq }"
[res]="{ reName: { list: 'data.records', total: 'data.total' } , process: afterRes}"
[page]="{ show: true, showSize: true, pageSizes: [10, 20, 30, 50, 100, 200, 300, 500, 1000] }" [loading]="false">
<st
#st
[bordered]="true"
[scroll]="{ x: '2000px', y: scrollY }"
[data]="service.$api_get_listBulkPage"
[columns]="columns"
[req]="{ process: beforeReq }"
[res]="{ reName: { list: 'data.records', total: 'data.total' }, process: afterRes }"
[page]="{ show: true, showSize: true, pageSizes: [10, 20, 30, 50, 100, 200, 300, 500, 1000] }"
[loading]="false"
>
<ng-template st-row="freightPrice" let-item let-index="index">
{{ item.freightPrice | currency }}
</ng-template>
@ -56,19 +64,19 @@
<div *ngIf="item?.unloadTime">卸 | {{ item?.unloadTime }}</div>
</ng-template>
<ng-template st-row="driverName" let-item let-index="index">
<div> {{ item?.driverName }}{{ item?.driverPhone ? "/" + item?.driverPhone : '' }}{{ item?.carNo ? "/" +
item?.carNo : ''}} </div>
<div> {{ item?.driverName }}{{ item?.driverPhone ? '/' + item?.driverPhone : '' }}{{ item?.carNo ? '/' + item?.carNo : '' }} </div>
</ng-template>
<ng-template st-row="settlementWeight" let-item let-index="index">
<div> {{ item.settlementWeight ? item.settlementWeight + '吨/ ': ''}} {{ item.settlementVolume ?
item.settlementVolume + ' ': ''}}</div>
<div>
{{ item.settlementWeight ? item.settlementWeight + '吨/ ' : '' }}
{{ item.settlementVolume ? item.settlementVolume + '方 ' : '' }}</div
>
</ng-template>
<ng-template st-row="payeeName" let-item let-index="index">
<div *ngIf="item.payeeName !== item.driverName"> {{ item?.payeeName }}{{ item?.payeePhone ? "/" +
item?.payeePhone : '' }} </div>
<div *ngIf="item.payeeName !== item.driverName"> {{ item?.payeeName }}{{ item?.payeePhone ? '/' + item?.payeePhone : '' }} </div>
</ng-template>
<ng-template st-row="createUserName" let-item let-index="index">
<div> {{ item?.createUserName }}{{ item?.createUserPhone ? "/" + item?.createUserPhone : '' }} </div>
<div> {{ item?.createUserName }}{{ item?.createUserPhone ? '/' + item?.createUserPhone : '' }} </div>
</ng-template>
<ng-template st-row="billCode" let-item let-index="index">
<a [routerLink]="'bulk-detail/' + item.id">{{ item.billCode }}</a>
@ -91,8 +99,7 @@
<div *ngIf="item.mybidDetailInfo.length > 0">
<p *ngFor="let data of item.mybidDetailInfo">
<span *ngIf="data.expenseCode !== 'FL'">{{ data.expenseName }}{{ data.price | currency }}</span>
<span *ngIf="data.expenseCode === 'FL'">{{ data.expenseName }}{{ (data.price * 100).toFixed(2) + '%'
}}</span>
<span *ngIf="data.expenseCode === 'FL'">{{ data.expenseName }}{{ (data.price * 100).toFixed(2) + '%' }}</span>
<span *ngIf="data.paymentStatusLabel" style="color: #f59a63">{{ data.paymentStatusLabel }}</span>
</p>
</div>
@ -101,13 +108,25 @@
</div>
</nz-card>
<nz-modal [(nzVisible)]="isVisible" [nzWidth]="600" [nzFooter]="nzModalFooter" nzTitle="运费变更记录" (nzOnOk)="handleOK()"
(nzOnCancel)="handleCancel('0')">
<nz-modal
[(nzVisible)]="isVisible"
[nzWidth]="600"
[nzFooter]="nzModalFooter"
nzTitle="运费变更记录"
(nzOnOk)="handleOK()"
(nzOnCancel)="handleCancel('0')"
>
<ng-container *nzModalContent>
<st #stFloat size="small" [bordered]="true" [data]="service.$api_get_listChangeApply" [columns]="columnsFloat"
[req]="{ process: beforeReq }"
[res]="{ reName: { list: 'data.records', total: 'data.total' } , process: afterRes}"
[page]="{ show: true, showSize: true, pageSizes: [10, 20, 30, 50, 100, 200, 300, 500, 1000] }">
<st
#stFloat
size="small"
[bordered]="true"
[data]="service.$api_get_listChangeApply"
[columns]="columnsFloat"
[req]="{ process: beforeReq }"
[res]="{ reName: { list: 'data.records', total: 'data.total' }, process: afterRes }"
[page]="{ show: true, showSize: true, pageSizes: [10, 20, 30, 50, 100, 200, 300, 500, 1000] }"
>
<ng-template st-row="order" let-item let-index="index">
{{ index + 1 }}
</ng-template>
@ -127,8 +146,14 @@
</ng-template>
</nz-modal>
<nz-modal [(nzVisible)]="isVisibleView" [nzWidth]="600" [nzFooter]="nzModalFooterview" nzTitle="查看"
(nzOnOk)="handleOK()" (nzOnCancel)="handleCancel('1')">
<nz-modal
[(nzVisible)]="isVisibleView"
[nzWidth]="600"
[nzFooter]="nzModalFooterview"
nzTitle="查看"
(nzOnOk)="handleOK()"
(nzOnCancel)="handleCancel('1')"
>
<ng-container *nzModalContent>
<sf #sfView [schema]="schemaView" [ui]="uiView" [formData]="ViewCause" [compact]="true" [button]="'none'">
<ng-template sf-template="no" let-me let-ui="uiView" let-schema="schemaView">
@ -138,21 +163,30 @@
</div>
</ng-template>
</sf>
<st #stFloatView multiSort size="small" [bordered]="true" [data]="service.$api_getChangeRecordBulkDetail"
<st
#stFloatView
multiSort
size="small"
[bordered]="true"
[data]="service.$api_getChangeRecordBulkDetail"
[columns]="columnsFloatView"
[req]="{ method: 'POST', allInBody: true, reName: { pi: 'pageIndex', ps: 'pageSize' }, params: changeViewParams }"
[res]="{ reName: { list: 'data.list', total: 'data.total' } }">
[res]="{ reName: { list: 'data.list', total: 'data.total' } }"
>
<ng-template st-row="amountBeforeChange" let-item let-index="index">
{{ item.amountBeforeChange | currency }}
</ng-template>
<ng-template st-row="amountchangeValue" let-item let-index="index"> ¥{{ item.amountchangeValue | number: '0.2-2'
}} </ng-template>
<ng-template st-row="amountchangeValue" let-item let-index="index"> ¥{{ item.amountchangeValue | number: '0.2-2' }} </ng-template>
<ng-template st-row="amountAfterChange" let-item let-index="index">
{{ item.amountAfterChange | currency }}
</ng-template>
</st>
<div><span>变更原因:{{ ViewCause?.changeCause }}</span></div>
<div><span>拒绝原因:{{ ViewCause?.refuseCause }}</span></div>
<div
><span>变更原因:{{ ViewCause?.changeCause }}</span></div
>
<div
><span>拒绝原因:{{ ViewCause?.refuseCause }}</span></div
>
<div><span>注:附加费依据调整后的运输费用重新计算</span></div>
</ng-container>
<ng-template #nzModalFooterview>
@ -161,8 +195,13 @@
</ng-template>
</nz-modal>
<nz-modal [(nzVisible)]="isVisibleEvaluate" [nzWidth]="600" [nzFooter]="nzModalFooterEvaluate" (nzOnOk)="handleOK()"
(nzOnCancel)="handleCancel('2')">
<nz-modal
[(nzVisible)]="isVisibleEvaluate"
[nzWidth]="600"
[nzFooter]="nzModalFooterEvaluate"
(nzOnOk)="handleOK()"
(nzOnCancel)="handleCancel('2')"
>
<ng-container *nzModalContent>
<nz-tabset>
<nz-tab nzTitle="货主评价">
@ -191,20 +230,28 @@
<ng-template #enable>
<div class="ant-popover-message">
<i nz-icon nzType="info-circle" nzTheme="fill"></i>
<div class="ant-popover-message-title ng-star-inserted self-ant-popover-title" style="font-size: 16px">已选择{{
selectedRows?.length || 0 }}条订单,确认批量签收吗?
<div class="ant-popover-message-title ng-star-inserted self-ant-popover-title" style="font-size: 16px"
>已选择{{ selectedRows?.length || 0 }}条订单,确认批量签收吗?
</div>
<div class="ant-popover-message-title ng-star-inserted"> 签收后不可再修改运费,请确保运费等信息准确无误后,再进行签收。 </div>
</div>
</ng-template>
<ng-template #extraTemplate>
<div class="mr-sm">
<button nz-button nzDanger [nzLoading]="loading" (click)="openDrawer()" acl
[acl-ability]="['ORDER-BULK-search']">筛选</button>
<button nz-button nzDanger [nzLoading]="loading" (click)="openDrawer()" acl [acl-ability]="['ORDER-BULK-search']">筛选</button>
<button nz-button nzDanger [disabled]="loading" (click)="exprot()">导出</button>
<button *ngIf="resourceStatus == 4" nz-button nzType="primary" nzGhost nz-popconfirm [nzPopconfirmTitle]="enable"
(nzOnConfirm)="userAction()" nzPopconfirmPlacement="bottomRight" acl
[acl-ability]="['ORDER-BULK-batchSignBulkOrder']">
<button
*ngIf="resourceStatus == 4"
nz-button
nzType="primary"
nzGhost
nz-popconfirm
[nzPopconfirmTitle]="enable"
(nzOnConfirm)="userAction()"
nzPopconfirmPlacement="bottomRight"
acl
[acl-ability]="['ORDER-BULK-batchSignBulkOrder']"
>
批量签收
</button>
</div>

View File

@ -824,4 +824,5 @@ export class OrderManagementBulkComponent extends BasicTableComponent implements
exprot() {
this.service.exportStart({ ...this.reqParams, pageSize: -1 }, this.service.$api_get_asyncExportBulkList);
}
}

View File

@ -4,7 +4,7 @@
* @Author : Shiming
* @Date : 2022-01-12 10:52:50
* @LastEditors : Shiming
* @LastEditTime : 2022-04-29 10:29:12
* @LastEditTime : 2022-05-10 13:55:39
* @FilePath : \\tms-obc-web\\src\\app\\routes\\order-management\\components\\receipts-audit\\receipts-audit.component.html
* Copyright (C) 2022 huzhenhong. All rights reserved.
-->
@ -39,10 +39,17 @@
</div>
<div>
<st #st [bordered]="true" [scroll]="{ x: '2000px',y:scrollY }" [data]="service.$api_get_billExamine_page"
[columns]="columns" [req]="{ process: beforeReq }"
[res]="{ reName: { list: 'data.records', total: 'data.total' } , process: afterRes}"
[page]="{ show: true, showSize: true, pageSizes: [10, 20, 30, 50, 100, 200, 300, 500, 1000] }" [loading]="false">
<st
#st
[bordered]="true"
[scroll]="{ x: '2000px', y: scrollY }"
[data]="service.$api_get_billExamine_page"
[columns]="columns"
[req]="{ process: beforeReq }"
[res]="{ reName: { list: 'data.records', total: 'data.total' }, process: afterRes }"
[page]="{ show: true, showSize: true, pageSizes: [10, 20, 30, 50, 100, 200, 300, 500, 1000] }"
[loading]="false"
>
<ng-template st-row="freightPrice" let-item let-index="index">
{{ item.freightPrice | currency }}
</ng-template>
@ -62,8 +69,7 @@
<app-imagelist style="width: 40px" [imgList]="[item.unloadingLadingBillFilePath]"> </app-imagelist>
</div>
<div *ngIf="item.unloadingPeopleVehiclesGoodsFilePath">
<app-imagelist style="width: 40px" [imgList]="[item.unloadingPeopleVehiclesGoodsFilePath]">
</app-imagelist>
<app-imagelist style="width: 40px" [imgList]="[item.unloadingPeopleVehiclesGoodsFilePath]"> </app-imagelist>
</div>
</div>
</ng-template>
@ -72,26 +78,21 @@
<div *ngIf="item?.unloadingTime">卸 | {{ item?.unloadingTime }}</div>
</ng-template>
<ng-template st-row="driverName" let-item let-index="index">
<div> {{ item?.driverName }}{{ item?.driverPhone ? "/" + item?.driverPhone : ''}}{{ item?.carNo ? "/" +
item?.carNo : '' }} </div>
<div> {{ item?.driverName }}{{ item?.driverPhone ? '/' + item?.driverPhone : '' }}{{ item?.carNo ? '/' + item?.carNo : '' }} </div>
</ng-template>
<ng-template st-row="payeeName" let-item let-index="index">
<div> {{ item?.payeeName }}{{item?.payeePhone ? "/" + item?.payeePhone : '' }} </div>
<div *ngIf="item.payeeName !== item.driverName"> {{ item?.payeeName }}{{ item?.payeePhone ? '/' + item?.payeePhone : '' }} </div>
</ng-template>
<ng-template st-row="billCode" let-item let-index="index">
<!-- <div>{{ item.billCode }}</div> -->
<a *ngIf="item.resourceType == '1'" [routerLink]="'/order-management/vehicle/vehicle-detail/' + item.id">{{
item.billCode }}</a>
<a *ngIf="item.resourceType == '2'" [routerLink]="'/order-management/bulk/bulk-detail/' + item.id">{{
item.billCode }}</a>
<a *ngIf="item.resourceType == '3'" [routerLink]="'/order-management/vehicle/vehicle-detail/' + item.id">{{
item.billCode }}</a>
<a *ngIf="item.resourceType == '1'" [routerLink]="'/order-management/vehicle/vehicle-detail/' + item.id">{{ item.billCode }}</a>
<a *ngIf="item.resourceType == '2'" [routerLink]="'/order-management/bulk/bulk-detail/' + item.id">{{ item.billCode }}</a>
<a *ngIf="item.resourceType == '3'" [routerLink]="'/order-management/vehicle/vehicle-detail/' + item.id">{{ item.billCode }}</a>
<div>
<span>{{item?.billStatusLabel}}</span>
<span>{{ item?.billStatusLabel }}</span>
</div>
<div>
<span>{{item?.resourceTypeLabel}}{{item?.serviceTypeLabel === item?.resourceTypeLabel ?
'':item?.serviceTypeLabel}}</span>
<span>{{ item?.resourceTypeLabel }}{{ item?.serviceTypeLabel === item?.resourceTypeLabel ? '' : item?.serviceTypeLabel }}</span>
</div>
</ng-template>
<ng-template st-row="goodsName" let-item let-index="index">
@ -116,19 +117,17 @@
<ng-template #extraTemplate>
<div>
<button nz-button nzDanger [nzLoading]="service.http.loading" (click)="openDrawer()" acl
[acl-ability]="['ORDER-RECEIPTS-search']">筛选</button>
<button nz-button nzDanger [nzLoading]="service.http.loading" (click)="openDrawer()" acl [acl-ability]="['ORDER-RECEIPTS-search']"
>筛选</button
>
<button nz-button nzDanger [disabled]="false" (click)="exprot()" acl [acl-ability]="['ORDER-RECEIPTS-export']">导出</button>
<button nz-button nz-dropdown [nzDropdownMenu]="menu" nzPlacement="bottomLeft">
更多<i nz-icon nzType="down" nzTheme="outline"></i></button>
更多<i nz-icon nzType="down" nzTheme="outline"></i
></button>
<nz-dropdown-menu #menu="nzDropdownMenu">
<ul nz-menu>
<li nz-menu-item (click)="sign('1')" acl [acl-ability]="['ORDER-RECEIPTS-billAuditPassBatch']">
批量通过
</li>
<li nz-menu-item (click)="sign1('1')" acl [acl-ability]="['ORDER-RECEIPTS- electronicBilling']">
批量生成电子单据
</li>
<li nz-menu-item (click)="sign('1')" acl [acl-ability]="['ORDER-RECEIPTS-billAuditPassBatch']"> 批量通过 </li>
<li nz-menu-item (click)="sign1('1')" acl [acl-ability]="['ORDER-RECEIPTS- electronicBilling']"> 批量生成电子单据 </li>
</ul>
</nz-dropdown-menu>
</div>

View File

@ -127,7 +127,6 @@ export class OrderManagementReceiptsAuditComponent extends BasicTableComponent i
this.initST();
setTimeout(() => {
this.st.load();
this.getGoodsSourceStatistical();
}, 500);
}
ngOnInit(): void {
@ -341,7 +340,6 @@ export class OrderManagementReceiptsAuditComponent extends BasicTableComponent i
title: '车队长',
className: 'text-left',
width: '180px',
index: 'payeeName',
render: 'payeeName'
},
{

View File

@ -134,8 +134,8 @@
<div class="handling-col" nz-col [nzSpan]="12">
<div class="handling-info p-md">
<ng-container *ngFor="let item of i?.unLoadingPlaceList">
<div class="flex" *ngFor="let item of i?.unLoadingPlaceList">
<div *ngIf="item.type === '2'" class="loading-row">
<div class="flex" *ngIf="item.type === '2'">
<div class="loading-row">
<div class="handling-info-icon unloaing-bg"></div>
<div class="info">
<h4>卸货地:{{ item?.province }}{{ item.city }}{{ item.area }}{{ item.detailedAddress }}</h4>
@ -290,7 +290,7 @@
<div nz-col [nzSpan]="24">
<amap-path-simplifier [mapWidth]="'100%'" [mapHeight]="'600px'" [mapList]="mapList" [pois]="pois">
</amap-path-simplifier>
<st [scroll]="{ y: '350px' }" #st [data]="addressItems" [columns]="logColumns2" [noResult]='fuck' [ps]="0"
<st [scroll]="{ y: '350px' }" #st [data]="addressItems" [columns]="logColumns2" [noResult]='fuck' [ps]="0"
[page]="{ show: false, showSize: false }" size="small" class="map_st">
<ng-template #fuck>
<div>

View File

@ -4,7 +4,7 @@
* @Author : Shiming
* @Date : 2022-01-12 10:52:50
* @LastEditors : Shiming
* @LastEditTime : 2022-04-22 16:53:07
* @LastEditTime : 2022-05-11 09:49:01
* @FilePath : \\tms-obc-web\\src\\app\\routes\\order-management\\components\\vehicle\\vehicle.component.html
* Copyright (C) 2022 huzhenhong. All rights reserved.
-->
@ -95,10 +95,10 @@
</div>
</ng-template>
<ng-template st-row="driverName" let-item let-index="index">
<div> {{ item?.driverName }}{{ item?.driverPhone ? '/' + item?.driverPhone : '' }}{{ item?.carNo ? '/' +
item?.carNo : '' }} </div><br />
<div *ngIf="item.payeeName !== item.driverName">车队长: {{ item?.payeeName ? item?.payeeName + '/' : ''}}{{
item?.payeePhone }} </div>
<div> {{ item?.driverName }}{{ item?.driverPhone ? '/' + item?.driverPhone : '' }}{{ item?.carNo ? '/' + item?.carNo : '' }} </div>
</ng-template>
<ng-template st-row="payeeName" let-item let-index="index">
<div *ngIf="item.payeeName !== item.driverName"> {{ item?.payeeName }}{{ item?.payeePhone ? '/' + item?.payeePhone : '' }} </div>
</ng-template>
<ng-template st-row="loadingTime" let-item let-index="index">

View File

@ -379,8 +379,15 @@ export class OrderManagementVehicleComponent extends BasicTableComponent impleme
title: '承运司机',
className: 'text-left',
width: '250px',
index: 'driverName',
render: 'driverName'
},
{
title: '车队长',
className: 'text-left',
width: '180px',
render: 'payeeName'
},
{ title: '网络货运人', index: 'enterpriseInfoName', width: '250px', className: 'text-left' },
{ title: '关联运单号', index: 'wayBillCode', width: '170px', className: 'text-left' },
{ title: '关联货源编号', index: 'resourceCode', width: '170px', className: 'text-left' },

View File

@ -1,3 +1,13 @@
<!--
* @Description :
* @Version : 1.0
* @Author : Shiming
* @Date : 2022-04-28 20:27:07
* @LastEditors : Shiming
* @LastEditTime : 2022-05-12 14:57:21
* @FilePath : \\tms-obc-web\\src\\app\\routes\\partner\\account-management\\components\\recorded-detail\\recorded-detail.component.html
* Copyright (C) 2022 huzhenhong. All rights reserved.
-->
<page-header-wrapper [title]="'待入账明细'" [logo]="logo">
<ng-template #logo>
<button nz-button (click)="goBack()">
@ -6,29 +16,44 @@
</ng-template>
</page-header-wrapper>
<nz-card>
<sv-container layout="vertical" [noColon]="true" col="5">
<sv [label]="labelTpl">
<b class="text-md ">{{summaryObj?.taxno}}</b>
<sv-container layout="vertical" [noColon]="true" col="6">
<sv label="合伙人信息">
<div
><b>{{ summaryObj?.partnerName }}</b></div
>
<div
><b>{{ summaryObj?.partnerInfo }}</b></div
>
</sv>
<sv label="返佣总额">
<span class="text-error-dark font-weight-bold">{{(summaryObj?.totalRebate?summaryObj?.totalRebate: 0 )|currency :'
'}}</span>
<span class="text-error-dark font-weight-bold">{{ (summaryObj?.totalRebate ? summaryObj?.totalRebate : 0) | currency }}</span>
</sv>
<sv label="已入账金额">
<span class="text-error-dark font-weight-bold">{{(summaryObj?.recordedAmount?summaryObj?.recordedAmount:0
)|currency:' '}}</span>
<span class="text-error-dark font-weight-bold">{{ (summaryObj?.recordedAmount ? summaryObj?.recordedAmount : 0) | currency }}</span>
</sv>
<sv label="代缴个税">
<span class="text-error-dark font-weight-bold">{{(summaryObj?.taxPersonalSum?summaryObj?.taxPersonalSum:0
)|currency:' '}}</span>
<sv label="代缴个税">
<span class="text-error-dark font-weight-bold">{{
(summaryObj?.recordedTaxPersonal ? summaryObj?.recordedTaxPersonal : 0) | currency
}}</span>
</sv>
<sv label="入账中金额">
<span class="text-error-dark font-weight-bold">{{
(summaryObj?.ongoingRecordedAmount ? summaryObj?.ongoingRecordedAmount : 0) | currency
}}</span>
</sv>
<sv label="代缴中个税">
<span class="text-error-dark font-weight-bold">{{
(summaryObj?.waitRecordedTaxPersonal ? summaryObj?.waitRecordedTaxPersonal : 0) | currency
}}</span>
</sv>
<sv label="待入账金额">
<span class="text-error-dark font-weight-bold">{{(summaryObj?.waitRecordedAmount?summaryObj?.waitRecordedAmount:0)
|currency:' '}}</span>
<span class="text-error-dark font-weight-bold">{{
(summaryObj?.waitRecordedAmount ? summaryObj?.waitRecordedAmount : 0) | currency
}}</span>
</sv>
</sv-container>
<ng-template #labelTpl>
<b class="text-md" style="color: black;">{{summaryObj?.ltdName}}</b>
<b class="text-md" style="color: black">{{ summaryObj?.ltdName }}</b>
</ng-template>
</nz-card>
<nz-card>
@ -36,44 +61,109 @@
<sf mode="search" #sf [schema]="schema" [ui]="ui" (formSubmit)="search()" (formReset)="resetSF()"></sf>
</div>
<div class="table-content">
<st #st [data]="service.$api_get_invoice_detail_page " [columns]="columns"
[req]="{ method: 'POST', allInBody: true, reName: {pi: 'pageIndex', ps: 'pageSize' }, params: reqParams }"
<st
#st
[data]="service.$api_get_invoice_detail_page"
[columns]="columns"
[req]="{ method: 'POST', allInBody: true, reName: { pi: 'pageIndex', ps: 'pageSize' }, params: reqParams }"
[res]="{ reName: { list: 'data.records', total: 'data.total' } }"
[page]="{ show: true, showSize: true, pageSizes: [5,10, 20, 50, 100, 200, 500] }"
[loading]="service.http.loading" [scroll]="{x:'1200px'}">
<ng-template st-row="amount" let-item>
<div *ngIf="item.incomeType === '1'"> - {{item.amount | currency }}</div>
<div *ngIf="item.incomeType === '2'"> + {{item.amount | currency }}</div>
[page]="{ show: true, showSize: true, pageSizes: [5, 10, 20, 50, 100, 200, 500] }"
[scroll]="{ x: '1200px' }"
>
<!-- [loading]="service.http.loading" -->
<ng-template st-row="recordedAmount" let-item>
<div>{{ item.recordedAmount | currency }}</div>
</ng-template>
<ng-template st-row="recordedTaxPersonal" let-item>
<div>{{ item.recordedTaxPersonal | currency }}</div>
</ng-template>
<ng-template st-row="ongoingRecordedAmount" let-item>
<div>{{ item.ongoingRecordedAmount | currency }}</div>
</ng-template>
<ng-template st-row="waitRecordedTaxPersonal" let-item>
<div>{{ item.waitRecordedTaxPersonal | currency }}</div>
</ng-template>
<ng-template st-row="changeAmount" let-item>
<div (click)="changeB(item)" style="color: #1890ff;">{{ item.changeAmount | currency }}</div>
</ng-template>
<ng-template st-row="waitRecordedAmount" let-item>
<div>{{ item.waitRecordedAmount | currency }}</div>
</ng-template>
<ng-template st-row="totalRebate" let-item>
<div>{{ item.totalRebate | currency }}</div>
</ng-template>
</st>
<div class="total-footer text-md" *ngIf="st?.list?.length !== 0 ">
合计 <label class="text-red-dark">{{ footerSummary?.total }}</label> 项,收入 <label
class="text-red-dark font-weight-bold">{{
footerSummary?.income | currency
}}</label>,支出 <label class="text-red-dark font-weight-bold">{{
footerSummary?.spending | currency }}</label>
</div>
</div>
</nz-card>
<nz-modal [(nzVisible)]="showBillDetail" nzTitle="账户明细" [nzFooter]="null" (nzOnCancel)="handleCancel()" nzWidth="700px">
<div *nzModalContent>
<div class="mb-sm">
<span class="mr-xxl text-sm font-weight-bold"><label>网络货运人:</label>{{detailRecord?.ltdName}}</span>
<span class="text-sm font-weight-bold"><label>返佣总额(元):</label>{{detailRecord?.totalRebate |currency: ' '}}</span>
<span class="mr-xxl text-sm font-weight-bold"><label>网络货运人:</label>{{ detailRecord?.ltdName }}</span>
<span class="text-sm font-weight-bold"><label>返佣总额(元):</label>{{ detailRecord?.totalRebate | currency: ' ' }}</span>
</div>
<st #st [data]="billDetailList " [columns]="billDetailColumns" [res]="{ reName: { list: 'data' } }"
[req]="{ method: 'POST', allInBody: true, params:billDetailReqParams}" [page]="{show:false}">
<st
#st
[data]="billDetailList"
[columns]="billDetailColumns"
[res]="{ reName: { list: 'data' } }"
[req]="{ method: 'POST', allInBody: true, params: billDetailReqParams }"
[page]="{ show: false }"
>
<ng-template st-row="month" let-item>
<div>
<span>{{item?.year }}年</span>
<span>{{item?.month }}月</span>
<span>{{ item?.year }}年</span>
<span>{{ item?.month }}月</span>
</div>
</ng-template>
<ng-template st-row="profitAmountSum" let-item>
<div>{{item?.profitAmountSum |currency :' '}}</div>
<div>{{ item?.profitAmountSum | currency: ' ' }}</div>
</ng-template>
</st>
</div>
</nz-modal>
<nz-modal [(nzVisible)]="showBillDetailB" nzTitle="调整待入账金额记录" [nzFooter]="null" (nzOnCancel)="handleCancelB()" nzWidth="900px">
<div *nzModalContent>
<div class="mb-sm">
<span class="mr-xxl text-sm font-weight-bold"><label>网络货运人:</label>{{ changeRecordB?.ltdName }}</span>
<span class="text-sm font-weight-bold"><label>调整金额(元):</label>{{ changeRecordB?.changeAmount | currency: ' ' }}</span>
</div>
<st
#stB
[scroll]="{x: '700px'}"
[data]="billDetailListB"
[columns]="billDetailColumnsB"
[res]="{ reName: { list: 'data' } }"
[req]="{ method: 'POST', allInBody: true, params: billDetailReqParams }"
[page]="{ show: false }"
>
<ng-template st-row="changeAmount" let-item>
<div> {{item.changeAmount | currency}}</div>
</ng-template>
<ng-template st-row="createUserName" let-item>
<div>{{ item?.createUserName ? item?.createUserName : '--'}}/{{item?.createUserPhone ? item?.createUserPhone : '--'}}</div>
</ng-template>
</st>
</div>
</nz-modal>
<nz-modal [(nzVisible)]="changeAccount" nzTitle="账户明细" [nzFooter]="nzModalFooter" (nzOnCancel)="handleCancelA()" nzWidth="600px">
<div *nzModalContent>
<div style="display: flex; justify-content: center; align-items: center;font-weight: 700; font-size: 16px; padding: 10px 0;"><label>网络货运人:</label>{{ changeRecord?.ltdName }}</div>
<div style="display: flex; justify-content: center; align-items: center;font-weight: 700; font-size: 16px; padding: 10px 0;"><label>待入账金额(元):</label>{{ changeRecord?.waitRecordedAmount | currency }}</div>
<sf #sfView [schema]="schemaView" [ui]="uiView" [compact]="true" [button]="'none'">
<ng-template sf-template="smsVerifyCode" let-me let-ui="uiView" let-schema="schemaView">
<div style="display: flex;">
<div [style.background-color]="addd ? '#ff4d4f' : '#ccc'" style="display: flex; justify-content: center; align-items: center;width: 30px; height: 30px; background-color: #ccc;margin: 0 10px;font-size: 14px;" (click)="add(changeAmount)">+</div>
<div style="display: flex; justify-content: center; align-items: center;width: 30px; height: 30px; background-color: #ccc;margin: 0 10px;font-size: 14px;" [style.background-color]="!addd ? '#ff4d4f' : '#ccc'" (click)="deletes(changeAmount)">-</div>
<nz-input-number style="width: 50%;height: 32px; border-radius: 4px 0 0 4px;" nzPlaceHolder="请输入金额" [(ngModel)]="changeAmount" [nzMin]="1" [nzMax]="99999999" [nzStep]="1"></nz-input-number>
<span style="margin: 10px ;"></span>
</div>
</ng-template>
</sf>
</div>
<ng-template #nzModalFooter>
<button nz-button nzType="primary" (click)="handleCancel()">取消</button>
<button nz-button nzType="default" (click)="handleOK()">确定</button>
</ng-template>
</nz-modal>

View File

@ -0,0 +1,6 @@
:host::ng-deep {
.file-col {
background-color: red;
}
}

View File

@ -3,11 +3,13 @@ import { ActivatedRoute, Router } from '@angular/router';
import { STColumn, STComponent } from '@delon/abc/st';
import { SFComponent, SFDateWidgetSchema, SFSchema, SFUISchema, Widget } from '@delon/form';
import { ModalHelper, _HttpClient } from '@delon/theme';
import { NzModalService } from 'ng-zorro-antd/modal';
import { AccountManagemantService } from '../../services/account-managemant.service';
@Component({
selector: 'app-partner-account-management-recorded-detail',
templateUrl: './recorded-detail.component.html',
styleUrls: ['./recorded-detail.component.less'],
templateUrl: './recorded-detail.component.html'
})
export class PartnerAccountManagementRecordedDetailComponent implements OnInit {
summaryObj: any = {
@ -18,34 +20,42 @@ export class PartnerAccountManagementRecordedDetailComponent implements OnInit {
ltdName: '',
taxno: ''
};
@ViewChild('sfView', { static: false }) sfView!: SFComponent;
schemaView!: SFSchema;
uiView: SFUISchema = {};
footerSummary = {
total: 0,
income: 0,
spending: 0
}
};
detailRecord: any = {};
changeRecord: any = {};
changeRecordB: any = {};
url = `/user`;
schema: SFSchema = {};
ui!: SFUISchema;
@ViewChild('st') private readonly st!: STComponent;
@ViewChild('stB') private readonly stB!: STComponent;
@ViewChild('sf') private readonly sf!: SFComponent;
columns: STColumn[] = [];
billDetailColumns: STColumn[] = [];
billDetailColumnsB: STColumn[] = [];
showBillDetail = false;
changeAccount = false;
showBillDetailB = false;
addd = false;
billDetailList = [];
billDetailListB = [];
roleId = '';
constructor(public service: AccountManagemantService, public router: Router, public ar: ActivatedRoute) {
changeAmount: number = 0;
constructor(public service: AccountManagemantService, public router: Router, public ar: ActivatedRoute, private nzModalService: NzModalService,) {
this.roleId = this.ar.snapshot.params.id;
}
get reqParams() {
return { ...this.sf?.value, partnerId: this.roleId };
}
@ -63,45 +73,60 @@ export class PartnerAccountManagementRecordedDetailComponent implements OnInit {
this.schema = {
properties: {
ltdName: {
title: '网络货运人',
type: 'string',
title: '网络货运人',
ui: {
placeholder: '请输入',
},
},
// allowClear: true,
// asyncData: () => this.service.getNetworkFreightForwarder(),
// visibleIf: {
// expand: (value: boolean) => value
// }
}
}
}
}
this.ui = { '*': { spanLabelFixed: 120, grid: { span: 8, gutter: 4 } }, };
};
this.ui = { '*': { spanLabelFixed: 120, grid: { span: 8, gutter: 4 } } };
}
/**
* 初始化数据列表
*/
* 初始化数据列表
*/
initST() {
this.columns = [
{ title: '网络货运人', index: 'ltdName', className: 'text-center', width: 200 },
{ title: '银行类型', render: 'bankTypeLabel', className: 'text-center', width: 150 },
{ title: '虚拟账户', render: 'fictitiousAccount', className: 'text-center', width: 200 },
{ title: '返佣总额(元)', index: 'totalRebate', className: 'text-center', width: 180, type: 'currency' },
{ title: '已入账金额(元)', index: 'recordedAmount', className: 'text-center', width: 180, type: 'currency' },
{ title: '代缴个税(元)', index: 'taxPersonalSum', className: 'text-center', width: 180, type: 'currency' },
{ title: '入账金额(元)', index: 'waitRecordedAmount', className: 'text-right', width: 180, type: 'currency' },
{ title: '银行类型', index: 'bankTypeName', className: 'text-center', width: 150 },
{ title: '虚拟账户', index: 'virtualAccount', className: 'text-center', width: 200 },
{ title: '返佣总额(元)', render: 'totalRebate', className: 'text-center', width: 180 },
{ title: '已入账金额(元)', render: 'recordedAmount', className: 'text-center', width: 180 },
{ title: '代缴个税(元)', render: 'recordedTaxPersonal', className: 'text-center', width: 180 },
{ title: '入账金额(元)', render: 'ongoingRecordedAmount', className: 'text-center', width: 180 },
{ title: '代缴中个税(元)', render: 'waitRecordedTaxPersonal', className: 'text-center', width: 180 },
{ title: '调整金额(元)', render: 'changeAmount', className: 'text-center', width: 180 },
{ title: '待入账金额(元)', render: 'waitRecordedAmount', className: 'text-right', width: 180 },
{
title: '操作', className: 'text-center', width: 300,
title: '操作',
className: 'text-center',
width: 150,
fixed: 'right',
buttons: [
{
text: '查看入账记录',
acl: { ability: ['AN-RECORDED-DETAIL-viewRecord'] },
click: (_record) => this.viewBookedRecord(_record)
click: _record => this.viewBookedRecord(_record)
},
{
text: '查看账单明细',
acl: { ability: ['AN-RECORDED-DETAIL-viewBill'] },
click: (_record) => this.viewAccountDetail(_record)
click: _record => this.viewAccountDetail(_record)
},
{
text: '调整待入账金额',
acl: { ability: [''] },
click: _record => this.changeStalyAccount(_record)
}
]
},
}
];
}
@ -110,26 +135,69 @@ export class PartnerAccountManagementRecordedDetailComponent implements OnInit {
{ title: '账单月份', render: 'month', className: 'text-center', width: '40%' },
{ title: '返佣金额(元)', render: 'profitAmountSum', className: 'text-center', width: '40%' },
{
title: '操作', className: 'text-center', width: '20%', buttons: [
title: '操作',
className: 'text-center',
width: '20%',
buttons: [
{
text: '订单明细',
click: (_record) => window.open(location.origin + `#/partner/rebate/record?ltdId=${_record?.ltdId}`)
click: _record => window.open(location.origin + `#/partner/rebate/record?ltdId=${_record?.ltdId}`)
}
]
},
]
}
];
}
initBillDetailSTB() {
this.billDetailColumnsB = [
{ title: '调整金额(元)', render: 'changeAmount', className: 'text-center', width: '150px' },
{ title: '备注', index: 'remark', className: 'text-center', width: '200px' },
{ title: '操作时间', index: 'modifyTime', className: 'text-center', width: '200px' },
{ title: '操作人', index: 'createUserName', className: 'text-center', width: '150px' },
];
}
initSFNew() {
this.schemaView = {
properties: {
smsVerifyCode: {
title: '调整金额',
type: 'string',
description: '(“+”表示增加待入账金额,“-”表示减少待入账金额 ',
ui: {
widget: 'custom',
placeholder: '请输入金额',
errors: {
},
},
},
remark: {
title: '备注',
type: 'string',
maxLength: 50,
ui: {
placeholder: '请输入备注',
widget: 'textarea',
autosize: { minRows: 3, maxRows: 6 }
}
}
},
required: ['smsVerifyCode', 'remark'],
};
this.uiView = {
'*': {
spanLabelFixed: 100,
grid: { span: 24 },
},
};
}
resetSF() {
this.sf.reset();
setTimeout(() => {
this.st.reset();
})
});
}
search() {
this.st.load(1);
}
@ -142,16 +210,30 @@ export class PartnerAccountManagementRecordedDetailComponent implements OnInit {
if (res) {
this.billDetailList = res;
}
})
});
}
/**
* 获取入账金额记录
*/
getBillDetailB(ltdId: string) {
let params = {
ltdId: ltdId,
partnerId: this.roleId ,
}
this.service.request(this.service.$api_get_getIncomeChangePage, params).subscribe(res => {
if (res) {
this.billDetailListB = res.records;
}
});
}
export() { }
export() {}
/**
* 查看入账记录
* @param record 当前行
*/
* 查看入账记录
* @param record 当前行
*/
viewBookedRecord(record: any) {
window.open(location.origin + `#/partner/recorded/record?ltdId=${record?.ltdId}`);
}
@ -167,22 +249,106 @@ export class PartnerAccountManagementRecordedDetailComponent implements OnInit {
this.detailRecord = record;
this.getBillDetail(record?.ltdId);
}
/**
* 查看调整金额
* @param record 当前行
*/
changeB(record: any) {
// this.billDetailColumns = [];
this.showBillDetailB = true;
this.initBillDetailSTB();
this.changeRecordB = record;
this.getBillDetailB(record?.ltdId);
}
/**
* 调整待入账金额
* @param record 当前行
*/
changeStalyAccount(record: any) {
this.changeRecord = record;
let params:any = {
partnerId: this.roleId ,
ltdId: record.ltdId,
ltdName: record.ltdName,
}
this.service.request(this.service.$api_get_getPartnerLitAmountSummary, params).subscribe(res => {
if (res) {
this.changeAmount = Math.abs(res.waitRecordedAmount)
if(res.waitRecordedAmount > 0) {
this.addd = true;
} else {
this.addd = false;
}
this.changeAccount = true;
this.initSFNew();
}
});
// this.getBillDetail(record?.ltdId);
}
getInvoiceSummary() {
this.service.request(this.service.$api_get_invoice_summary, { partnerId: this.roleId }).subscribe(res => {
if (res) {
this.summaryObj = res;
}
})
});
}
handleCancel() {
this.showBillDetail = false;
this.detailRecord = {};
}
handleCancelA() {
this.changeAccount = false;
this.changeRecord = {};
}
handleCancelB() {
this.showBillDetailB = false;
this.changeRecordB = {};
}
goBack() {
window.history.go(-1);
}
deletes(value: number) {
this.addd = false
}
add(value: number) {
this.addd = true
}
handleOK() {
console.log(this.sfView.value);
if(!this.sfView.value?.remark || !this.changeAmount) {
this.service.msgSrv.error('请填写必填项!')
return
}
console.log(this.addd);
let params:any = {
remark: this.sfView.value?.remark,
partnerId: this.roleId ,
ltdId: this.changeRecord.ltdId
}
if(!this.addd) {
params.changeAmount = -this.changeAmount
} else {
params.changeAmount = this.changeAmount
}
console.log(params);
this.nzModalService.warning({
nzTitle: `确定调整“${params.changeAmount > 0 ? '+' + params.changeAmount : params.changeAmount}元”的待入账金额吗?`,
nzOnOk: () => {
this.service.request(this.service.$api_get_saveIncomeChange, params).subscribe((res) => {
if(res) {
console.log(res);
this.service.msgSrv.success('修改成功!')
this.changeAccount = false;
this.st.load()
}
})
}
});
}
}

View File

@ -1,10 +1,20 @@
/*
* @Description :
* @Version : 1.0
* @Author : Shiming
* @Date : 2022-04-21 13:49:22
* @LastEditors : Shiming
* @LastEditTime : 2022-05-12 14:44:17
* @FilePath : \\tms-obc-web\\src\\app\\routes\\partner\\account-management\\services\\account-managemant.service.ts
* Copyright (C) 2022 huzhenhong. All rights reserved.
*/
import { Injectable, Injector } from '@angular/core';
import { BaseService } from '@shared';
import { BaseService, ShipperBaseService } from '@shared';
@Injectable({
providedIn: 'root'
})
export class AccountManagemantService extends BaseService {
export class AccountManagemantService extends ShipperBaseService {
$api_get_account_management_page = `/api/bpc/accountBalancePartner/getPartnerAccountBalanceByOperator`; // 账户管理
$api_get_virtual_detail_page = `/api/bpc/accountBalancePartner/getPartnerAccountBalanceInfoByOperator`;//虚拟账户明细
@ -15,6 +25,9 @@ export class AccountManagemantService extends BaseService {
$api_get_bill_detail = `/api/bpc/partnerIncomeDetail/findPartnerWaitIncomeByOperator`; // 查看账单明细
$api_get_invoice_summary = `/api/bpc/partnerInvoiceEntry/oprationEntrySummary`; // 入账明细汇总
$api_get_invoice_detail_page = `/api/bpc/partnerInvoiceEntry/oprationEntryDetail`; // 待入账明细列表
$api_get_getPartnerLitAmountSummary = `/api/bpc/partnerInvoiceEntry/getPartnerLitAmountSummary`; // 查询合伙货运人相关金额
$api_get_saveIncomeChange = `/api/bpc/partnerIncomeChange/saveIncomeChange`; // 调整金额
$api_get_getIncomeChangePage = `/api/bpc/partnerIncomeChange/getIncomeChangePage`; // 调整金额
constructor(public injector: Injector) {
super(injector)

View File

@ -42,27 +42,34 @@ export class ParterChannelSalesEditComponent implements OnInit {
ngOnInit(): void {
this.initSF();
console.log(this.sts);
if (!this.sts) {
this.service.request(this.service.$api_getChannelSalesInfo, { id: this.i?.id }).subscribe(res => {
const List: any = [];
const List3: any = [];
if (res) {
let value1 = Object.assign({}, res);
delete value1.employeeVO;
let value = res.employeeVO;
List.push({ label: value.empName + '/' + value.empNo, value: value.empNo });
setTimeout(() => {
if (this.sf) {
console.log(this.sf.getProperty('/employeeVO')!.schema);
res.roleInfoVOList.forEach((element: any) => {
List3.push(element.id);
});
setTimeout(() => {
if (this.sf) {
this.sf.getProperty('/employeeVO')!.schema.enum = List;
this.sf.getProperty('/employeeVO')!.widget.reset(List);
}
if (value.empNo) {
this.sf.setValue('/employeeVO', value.empNo);
console.log(List3);
this.sf.getProperty('/employeeVO')!.schema.enum = List;
this.sf.getProperty('/employeeVO')!.widget.reset(List);
}
if (value.empNo) {
this.sf.setValue('/employeeVO', value.empNo);
this.currentOAItem = value;
this.sf.setValue('/phoneNumber', res.telephone);
}
})
this.sf.setValue('/roleIds', List3);
this.currentOAItem = value;
this.sf.setValue('/phoneNumber', res.telephone);
}
});
this.record = value1;
}
});
@ -88,6 +95,7 @@ export class ParterChannelSalesEditComponent implements OnInit {
title: '手机号',
type: 'string',
maxLength: 11,
readOnly: !this.sts,
ui: {
placeholder: '请输入'
}
@ -114,6 +122,7 @@ export class ParterChannelSalesEditComponent implements OnInit {
title: '关联OA员工',
type: 'string',
maxLength: 30,
readOnly: !this.sts,
ui: {
widget: 'select',
// serverSearch: true,
@ -207,10 +216,10 @@ export class ParterChannelSalesEditComponent implements OnInit {
this.sf.validator({ emitError: true });
if (!this.sf.valid) return;
let params: any= {
...this.sf?.value,
}
delete params.telephone
let params: any = {
...this.sf?.value
};
delete params.telephone;
this.service.request(this.service.$api_save, { ...params, employeeVO: this.currentOAItem }).subscribe(res => {
if (res) {
this.service.msgSrv.success(res.msg);

View File

@ -133,7 +133,13 @@ export class ParterChannelSalesListComponent implements OnInit {
acl: { ability: ['channelSales-frozen'] },
iif: (item) => {return item.stateLocked == false},
click: (_record, _modal, _instance) => this.stop(_record),
}
},
{
text: '启用',
acl: { ability: ['channelSales-open'] },
iif: (item) => {return item.stateLocked == true},
click: (_record, _modal, _instance) => this.open(_record),
},
]
}
];
@ -185,6 +191,24 @@ export class ParterChannelSalesListComponent implements OnInit {
});
}
}
open(record: STData) {
if (record.stateLocked) {
const params = {
id: record.id
}
this.modalService.confirm({
nzTitle: '<i>启用确认</i>',
nzContent: `<b>确定启用该账号吗?</br>`,
nzOnOk: () =>
this.service.request(this.service.$api_activeChannelSales, params).subscribe(res => {
if (res) {
this.service.msgSrv.success('启用成功!');
this.st.reload();
}
})
});
}
}
/**
* 重置表单

View File

@ -21,6 +21,8 @@ export class ChannelSalesService extends BaseService {
$api_getChannelSalesInfo = '/api/mdc/channelSalesManagement/getChannelSalesInfo';
// 冻结渠道销售
$api_frozenChannelSales = '/api/mdc/channelSalesManagement/frozenChannelSales';
// 激活渠道销售
$api_activeChannelSales = '/api/mdc/channelSalesManagement/activeChannelSales';
constructor(public injector: Injector) {

View File

@ -4,7 +4,7 @@
* @Author : Shiming
* @Date : 2022-04-28 20:27:22
* @LastEditors : Shiming
* @LastEditTime : 2022-05-07 18:04:15
* @LastEditTime : 2022-05-11 16:04:16
* @FilePath : \\tms-obc-web\\src\\app\\routes\\partner\\level-config\\components\\edit\\edit.component.ts
* Copyright (C) 2022 huzhenhong. All rights reserved.
*/
@ -49,6 +49,7 @@ export class ParterLevelConfigEditComponent implements OnInit {
sortId: {
title: '排序',
minimum: 0,
maximum: 999999,
type:"number",
ui: {
change: (item: any) => {

View File

@ -1,3 +1,14 @@
<!--
* @Description :
* @Version : 1.0
* @Author : Shiming
* @Date : 2022-04-29 17:28:23
* @LastEditors : Shiming
* @LastEditTime : 2022-05-12 16:55:43
* @FilePath : \\tms-obc-web\\src\\app\\routes\\partner\\level-config\\components\\list\\list.component.html
* Copyright (C) 2022 huzhenhong. All rights reserved.
-->
<page-header-wrapper [title]="'等级配置'"> </page-header-wrapper>
<nz-card>
<!-- 搜索区 -->
<sf
@ -16,6 +27,7 @@
<st
#st
[data]="service.$api_getList"
[scroll]="{x: '1200px'}"
[columns]="columns"
[req]="{ method: 'POST', allInBody: true, reName: { pi: 'pageIndex', ps: 'pageSize' }, params: reqParams }"
[res]="{ reName: { list: 'data.records', total: 'data.total' } }"

View File

@ -69,28 +69,34 @@ export class ParterLevelConfigListComponent implements OnInit {
this.columns = [
{
title: '等级姓名',
index: 'gradeName'
index: 'gradeName',
width: 200
},
{
title: '备注',
index: 'remark'
index: 'remark',
width: 200
},
{
title: '创建时间',
index: 'createTime'
index: 'createTime',
width: 200
},
{
title: '启用时间',
index: 'enableTime'
index: 'enableTime',
width: 200
},
{
title: '排序',
index: 'sortId'
index: 'sortId',
width: 200
},
{
title: '状态',
index: 'stateLocked',
width: 200,
format: (item: any) => {
return item.stateLocked ? '禁用' : '启用';
}
@ -98,6 +104,8 @@ export class ParterLevelConfigListComponent implements OnInit {
{
title: '操作',
className: 'text-center',
width: 120,
fixed: 'right',
buttons: [
{
text: '编辑',
@ -162,7 +170,7 @@ export class ParterLevelConfigListComponent implements OnInit {
restart(item: any) {
this.modalService.confirm({
nzTitle: '<i>启用确认</i>',
nzContent: `<b>确定启用该账号吗?</br>`,
nzContent: `<b>确定启用该等级吗?</br>`,
nzOnOk: () =>
this.service.request(this.service.$api_updatePartnerGradeConfig, { id: item.id }).subscribe(res => {
if (res) {
@ -175,7 +183,7 @@ export class ParterLevelConfigListComponent implements OnInit {
stop(item: any) {
this.modalService.confirm({
nzTitle: '<i>禁用确认</i>',
nzContent: `<b>确定禁用该账号吗?</br>`,
nzContent: `<b>确定禁用该等级吗?</br>`,
nzOnOk: () =>
this.service.request(this.service.$api_updatePartnerGradeConfig, { id: item.id }).subscribe(res => {
if (res) {

View File

@ -569,12 +569,14 @@ export class AddEtpPartnerComponent {
cityCodesList: {
type: 'string',
title: '所属城市',
maxMultipleCount: 3,
ui: {
widget: 'tree-select',
grid: { xxl: 13, xl: 18, lg: 24, md: 24 },
placeholder: '请选择城市(最多3个)',
checkable: true,
class: 'city-tree-select',
maxMultipleCount: 3,
asyncData: () =>
this.getRegionDetailByCode('').pipe(
map((res: any) =>

View File

@ -299,9 +299,12 @@ export class AddPersonalPartnerComponent {
_addressTitle: { title: '', type: 'string', ui: { widget: 'custom' } },
cityCodesList: {
type: 'string',
title: '所属城市',
title: '所属城市7',
maxMultipleCount: 3,
ui: {
widget: 'tree-select',
maxMultipleCount: 3,
maxTagCount: 3,
grid: { xxl: 13, xl: 18, lg: 24, md: 24 },
placeholder: '请选择城市(最多3个)',
checkable: true,
@ -314,9 +317,9 @@ export class AddPersonalPartnerComponent {
)
),
expandChange: ({ node }: { node: NzTreeNode }) =>
this.getRegionDetailByCode(node.key).pipe(
map((res: any) => res.map((item: any) => ({ ...item, title: item.name, key: item.regionCode, isLeaf: true })))
)
this.getRegionDetailByCode(node.key).pipe(
map((res: any) => res.map((item: any) => ({ ...item, title: item.name, key: item.regionCode, isLeaf: true })))
)
} as SFTreeSelectWidgetSchema
},
// 渠道销售
@ -340,30 +343,30 @@ export class AddPersonalPartnerComponent {
}
private setInfo(info: any) {
this.sf.setValue('/adminUserInfo/name', info?.name);
this.sf.setValue('/adminUserInfo/certificatePhotoFront', info?.certificatePhotoFront);
this.sf.setValue('/adminUserInfo/certificatePhotoFrontWatermark', [
{
uid: -1,
name: '文件',
status: 'done',
url: info?.certificatePhotoFrontWatermark,
response: info?.certificatePhotoFrontWatermark
}
]);
this.sf.setValue('/adminUserInfo/certificatePhotoBack', info?.certificatePhotoBack);
this.sf.setValue('/adminUserInfo/certificatePhotoBackWatermark', [
{
uid: -1,
name: '文件',
status: 'done',
url: info?.certificatePhotoBackWatermark,
response: info?.certificatePhotoBackWatermark
}
]);
this.sf.setValue('/adminUserInfo/certificateNumber', info?.certificateNumber);
this.sf.setValue('/adminUserInfo/validStartTime', info?.validStartTime);
this.sf.setValue('/adminUserInfo/validEndTime', info?.validEndTime ? info?.validEndTime: null);
this.sf.setValue('/adminUserInfo/_isLoingDate', info?.validEndTime ? false: true);
this.sf.setValue('/adminUserInfo/name', info?.name);
this.sf.setValue('/adminUserInfo/certificatePhotoFront', info?.certificatePhotoFront);
this.sf.setValue('/adminUserInfo/certificatePhotoFrontWatermark', [
{
uid: -1,
name: '文件',
status: 'done',
url: info?.certificatePhotoFrontWatermark,
response: info?.certificatePhotoFrontWatermark
}
]);
this.sf.setValue('/adminUserInfo/certificatePhotoBack', info?.certificatePhotoBack);
this.sf.setValue('/adminUserInfo/certificatePhotoBackWatermark', [
{
uid: -1,
name: '文件',
status: 'done',
url: info?.certificatePhotoBackWatermark,
response: info?.certificatePhotoBackWatermark
}
]);
this.sf.setValue('/adminUserInfo/certificateNumber', info?.certificateNumber);
this.sf.setValue('/adminUserInfo/validStartTime', info?.validStartTime);
this.sf.setValue('/adminUserInfo/validEndTime', info?.validEndTime ? info?.validEndTime : null);
this.sf.setValue('/adminUserInfo/_isLoingDate', info?.validEndTime ? false : true);
}
}

View File

@ -1,13 +1,49 @@
<h2>转移客户数:{{changeST?.total}}</h2>
<st #changeST [data]="service.$api_get_partner_change_list" [columns]="columns.changeColumn"
[req]="{params:{id:id ,type:1}}" [loading]="service.http.loading" bordered size="small"
[page]="{ show: false }" [scroll]="{ x: '750px' }">
<!--
* @Description :
* @Version : 1.0
* @Author : Shiming
* @Date : 2022-04-28 20:27:08
* @LastEditors : Shiming
* @LastEditTime : 2022-05-11 14:44:15
* @FilePath : \\tms-obc-web\\src\\app\\routes\\partner\\partner-list\\components\\channel-log-modal\\channel-log-modal.component.html
* Copyright (C) 2022 huzhenhong. All rights reserved.
-->
<div class="bbod">
<h2>转移客户数:{{ changeST?.list?.length }}</h2>
<st
#changeST
[data]="service.$api_get_partner_change_list"
[columns]="columns.changeColumn"
[req]="{ params: { id: id, type: 1 } }"
[res]="{ reName: { list: 'data' } }"
[loading]="service.http.loading"
bordered
size="small"
[page]="{ show: false }"
[scroll]="{ x: '750px' }"
>
<ng-template st-row="crmStatus" let-item let-index="index" let-column="column">
<div *ngIf="item.crmStatus == '0'">未发起</div>
<div *ngIf="item.crmStatus == '10'">待审核</div>
<div *ngIf="item.crmStatus == '20'">审核通过</div>
<div *ngIf="item.crmStatus == '30'">驳回</div>
</ng-template>
</st>
<h2>不转移客户数:{{noChangeST?.total}}</h2>
<st #noChangeST [data]="service.$api_get_partner_change_list" [columns]="columns.beChangeColumn"
[req]="{params:{id:id ,type:2}}" [res]="{reName: { list: 'data' }}"
[loading]="service.http.loading" bordered size="small" [page]="{ show: false }" [scroll]="{ x: '750px' }">
<h2>不转移客户数:{{ noChangeST?.list?.length }}</h2>
<st
#noChangeST
[data]="service.$api_get_partner_change_list"
[columns]="columns.beChangeColumn"
[req]="{ params: { id: id, type: 2 } }"
[res]="{ reName: { list: 'data' } }"
[loading]="service.http.loading"
bordered
size="small"
[page]="{ show: false }"
[scroll]="{ x: '750px' }"
>
</st>
<p>
客户转移客户跟着上级合伙人转移一并到新渠道销售下会同步发起CRM《客户转移》流程不转移的客户会与上级合伙人解绑修改成功后修改时间也是合伙人与客户的结算结束时间成为原来渠道销售的直客。
客户转移客户跟着上级合伙人转移一并到新渠道销售下会同步发起CRM《客户转移》流程不转移的客户会与上级合伙人解绑修改成功后修改时间也是合伙人与客户的结算结束时间成为原来渠道销售的直客。
</p>
</div>

View File

@ -0,0 +1,10 @@
/* stylelint-disable-next-line CssSyntaxError */
:host {
::ng-deep {
.bbod{
height: 600px;
overflow-y: hidden;
}
}
}

View File

@ -1,32 +1,48 @@
import { Component, OnInit } from '@angular/core';
import { STColumn } from '@delon/abc/st';
/*
* @Description :
* @Version : 1.0
* @Author : Shiming
* @Date : 2022-05-09 10:49:35
* @LastEditors : Shiming
* @LastEditTime : 2022-05-11 14:47:57
* @FilePath : \\tms-obc-web\\src\\app\\routes\\partner\\partner-list\\components\\channel-log-modal\\channel-log-modal.component.ts
* Copyright (C) 2022 huzhenhong. All rights reserved.
*/
import { Component, OnInit, ViewChild } from '@angular/core';
import { STColumn, STComponent } from '@delon/abc/st';
import { PartnerListService } from '../../services/partner-list.service';
@Component({
selector: 'app-channel-log-modal',
styleUrls: ['./channel-log-modal.component.less'],
templateUrl: './channel-log-modal.component.html'
})
export class ChannelLogModalComponent implements OnInit {
@ViewChild('changeST', { static: true }) changeST!: STComponent;
@ViewChild('noChangeST', { static: true }) noChangeST!: STComponent;
columns: { changeColumn: STColumn[]; beChangeColumn: STColumn[] } = this.initST();
id = '';
constructor(public service: PartnerListService) {}
ngOnInit(): void {}
ngOnInit(): void {
console.log(this.changeST);
}
private initST(): { changeColumn: STColumn[]; beChangeColumn: STColumn[] } {
return {
changeColumn: [
{ title: '客户名称', index: 'payCode', width: 180 },
{ title: '合伙人', index: 'ltdName', width: 160 },
{ title: '渠道销售', index: 'payDate', className: 'text-center', width: 130 },
{ title: 'CRM审核状态', index: 'payDate', width: 150 },
{ title: '生效时间', index: 'payDate', className: 'text-center', width: 130 }
{ title: '客户名称', index: 'enterpriseName', width: 180 },
{ title: '合伙人', index: 'newPartnerName', width: 160 },
{ title: '渠道销售', index: 'newChannelName', className: 'text-center', width: 130 },
{ title: 'CRM审核状态', render: 'crmStatus', width: 150 },
{ title: '生效时间', index: 'effectiveTime', className: 'text-center', width: 130 }
],
beChangeColumn: [
{ title: '客户名称', index: 'payCode', width: 180 },
{ title: '合伙人', index: 'ltdName', width: 160 },
{ title: '渠道销售', index: 'payDate', className: 'text-center', width: 130 },
{ title: '生效时间', index: 'payDate', className: 'text-center', width: 130 }
{ title: '客户名称', index: 'enterpriseName', width: 180 },
{ title: '合伙人', index: 'newPartnerName', width: 160 },
{ title: '渠道销售', index: 'newChannelName', className: 'text-center', width: 130 },
{ title: '生效时间', index: 'effectiveTime', className: 'text-center', width: 130 }
]
};
}

View File

@ -4,7 +4,7 @@
* @Author : Shiming
* @Date : 2022-04-29 17:28:23
* @LastEditors : Shiming
* @LastEditTime : 2022-05-09 11:33:34
* @LastEditTime : 2022-05-10 15:33:15
* @FilePath : \\tms-obc-web\\src\\app\\routes\\partner\\partner-list\\components\\index\\partner-list.component.html
* Copyright (C) 2022 huzhenhong. All rights reserved.
-->
@ -61,6 +61,14 @@
[scroll]="{ x: '1200px' }"
[page]="{}"
>
<ng-template st-row="enterpriseName" let-item let-index="index">
<div>
{{item.partnerType ? item.enterpriseName || item.contactName : ''}}
</div>
<div *ngIf="item.partnerType == 1">
管理员: {{item.contactName }}
</div>
</ng-template>
</st>
</nz-card>
@ -84,9 +92,18 @@
<se label="合伙人名称"> {{ selectItem?.enterpriseName || selectItem?.contactName }} </se>
<se label="当前渠道销售"> {{ selectItem?.channelIdLabel }} </se>
<se label="渠道销售修改为" required>
<nz-select [(ngModel)]="cannelItem.channelId" style="width: 100%">
<nz-option [nzValue]="item.value" [nzLabel]="item.label" *ngFor="let item of cannels"></nz-option>
</nz-select>
<nz-select
nzPlaceHolder="请搜索"
nzShowSearch
nzServerSearch
[(ngModel)]="cannelItem.channelId"
[nzShowArrow]="false"
(nzOnSearch)="onSearch($event)"
>
<ng-container *ngFor="let item of cannels">
<nz-option [nzValue]="item.value" [nzLabel]="item.label"></nz-option>
</ng-container>
</nz-select>
</se>
<se label="备注" required>
<textarea rows="3" nz-input [(ngModel)]="cannelItem.remark"></textarea>
@ -104,7 +121,6 @@
[req]="{ process: beforeReq, params: { effectiveStatus: 2, newPartnerId: selectItem.id } }"
[loading]="service.http.loading"
[page]="{ show: false }"
(change)="stChange($event)"
>
</st>

View File

@ -4,13 +4,12 @@ import { Router } from '@angular/router';
import { STComponent, STColumn, STRequestOptions, STChange } from '@delon/abc/st';
import { SFComponent, SFSchema, SFDateWidgetSchema, SFAutoCompleteWidgetSchema, SFSelectWidgetSchema } from '@delon/form';
import { NzModalService } from 'ng-zorro-antd/modal';
import { of } from 'rxjs';
import { BehaviorSubject, Observable, of } from 'rxjs';
import { AddCollectionInvoiceModalComponent } from 'src/app/routes/ticket-management/components/input-invoice/add-collection-invoice-modal/add-collection-invoice-modal.component';
import { PartnerListService } from '../../services/partner-list.service';
import { PartnerAuditModalComponent } from '../partner-audit-modal/partner-audit-modal.component';
import { map } from 'rxjs/operators';
import { catchError, debounceTime, map, switchMap } from 'rxjs/operators';
@Component({
selector: 'app-partner-list',
templateUrl: './partner-list.component.html',
@ -24,7 +23,7 @@ export class PartnerListComponent {
columns: STColumn[] = this.initST();
searchSchema: SFSchema = this.initSF();
_$expand = false;
isLoading: boolean = false;
@ViewChild('editTemplate', { static: true })
editTemplate: any;
templateId: any;
@ -36,13 +35,14 @@ export class PartnerListComponent {
cannels: any[] = [];
selectedRows: any[] = [];
cannelItem: any = { channelId: null, effectiveNode: 1, enterpriseIdList: [], remark: '' };
searchChange$ = new BehaviorSubject('');
selectItem: any = {};
constructor(public service: PartnerListService, private nzModalService: NzModalService, private router: Router) {
this.loadSelectOptions();
}
ngOnInit(): void {
}
beforeReq = (requestOptions: STRequestOptions) => {
if (this.sf) {
let params = { ...this.sf?.value };
@ -55,18 +55,13 @@ export class PartnerListComponent {
};
loadSelectOptions() {
this.service.getRebateConfig({stateLocked: 1}).subscribe(res => {
this.service.getRebateConfig({ stateLocked: 1 }).subscribe(res => {
if (res) {
console.log(res);
this.customers = res;
}
});
this.service.getChannel().subscribe(res => {
if (res) {
this.cannels = res;
}
});
}
auditPartner(item: any) {
@ -236,10 +231,6 @@ export class PartnerListComponent {
type: 'string',
title: '合伙人名称'
},
contactName: {
type: 'string',
title: '企业管理员'
},
contactMobile: {
type: 'string',
title: '手机号'
@ -252,9 +243,6 @@ export class PartnerListComponent {
searchDebounceTime: 300,
searchLoadingText: '搜索中...',
allowClear: true,
visibleIf: {
expand: (value: boolean) => value
},
onSearch: (q: any) => {
let str = q.replace(/^\s+|\s+$/g, '');
if (str) {
@ -326,7 +314,7 @@ export class PartnerListComponent {
{ value: '', label: '全部' },
{ value: '0', label: '未同步' },
{ value: 10, label: '同步失败' },
{ value: 20, label: '同步成功' },
{ value: 20, label: '同步成功' }
],
ui: {
widget: 'select',
@ -360,21 +348,21 @@ export class PartnerListComponent {
widget: 'select',
placeholder: '请选择',
asyncData: () =>
this.service.request(this.service.$api_get_rebate_config, {}, 'POST').pipe(
map(data => {
if(data) {
return data.map((m: any) => {
return { label: m.configName, value: m.id };
});
} else {
return [];
}
})
),
this.service.request(this.service.$api_get_rebate_config, {}, 'POST').pipe(
map(data => {
if (data) {
return data.map((m: any) => {
return { label: m.configName, value: m.id };
});
} else {
return [];
}
})
),
visibleIf: {
expand: (value: boolean) => value
} } as SFDateWidgetSchema
}
} as SFDateWidgetSchema
},
lockedStatus: {
type: 'string',
@ -412,13 +400,11 @@ export class PartnerListComponent {
return [
{
title: '合伙人名称',
index: 'enterpriseName',
width: 180,
format: item => (item.partnerType ? `${item.enterpriseName || item.contactName}` : '')
render: 'enterpriseName',
width: 180
},
{ title: '付款编码', index: 'payCode', width: 160 },
{ title: '邀请码', index: 'invitationCode', className: 'text-center', width: 130 },
{ title: '企业管理员', index: 'contactName', width: 150, format: item => (item.partnerType ? `${item.contactName}` : '') },
{ title: '手机号', index: 'contactMobile', className: 'text-center', width: 150 },
{ title: '类型', index: 'partnerType', className: 'text-center', width: 130, type: 'enum', enum: { 1: '企业', 2: '个人' } },
{ title: '注册渠道', index: 'source', type: 'enum', enum: { 1: '合伙人注册', 2: '平台添加' }, width: 130 },
@ -518,4 +504,34 @@ export class PartnerListComponent {
}
];
}
onSearch(value: string): void {
this.isLoading = true;
let params: any = {};
if (value) {
console.log(+value);
// 数字
if (+value) {
params.phoneNumber = value;
} else {
// 中文
params.name = value;
}
this.service.request(this.service.$api_get_channel, params).subscribe(res => {
let NewList: { label: string; value: any; }[] = [];
let List = res.filter((i: any) => {
NewList.push({ label: `${i.name}/${i.telephone}`, value: i.id }) ;
});
this.cannels = NewList
});
this.searchChange$.next(value);
} else if(value === '') {
this.service.request(this.service.$api_get_channel, {name: '清空数X'}).subscribe(res => {
let NewList: { label: string; value: any; }[] = [];
let List = res.filter((i: any) => {
NewList.push({ label: `${i.name}/${i.telephone}`, value: i.id }) ;
});
this.cannels = NewList
});
}
}
}

View File

@ -28,22 +28,17 @@ export class PartnerAuditModalComponent implements OnInit {
if(this.info.channelId) {
const value = [{
label: this.info.channelIdLabel,
value: this.info.channelId,
value: this.info.channelSaleslId,
}]
setTimeout(() => {
if(this.sf) {
this.sf.getProperty('/channelId')!.schema.enum = value;
this.sf.getProperty('/channelId')!.widget.reset(value);
this.sf.setValue('/channelId', this.info.channelId);
this.sf.setValue('/channelId', this.info.channelSaleslId);
}
})
} else {
console.log()
this.service.getChannel().pipe(map(data => {
console.log(data);
}))
this.service.getChannel().subscribe((res) => {
console.log(res);
const value :any= res;

View File

@ -28,9 +28,7 @@
</div>
<div nz-row>
<div nz-col [nzLg]="12" [nzSm]="24" [nzXs]="24"> 注册时间:{{ detailData?.createTime }} </div>
<div nz-col [nzLg]="12" [nzSm]="24" [nzXs]="24">
所属城市:{{enterpriseDefaultCityName}}
</div>
<div nz-col [nzLg]="12" [nzSm]="24" [nzXs]="24"> 所属城市:{{ enterpriseDefaultCityName }} </div>
</div>
</div>
</div>
@ -45,14 +43,32 @@
<button [disabled]="service.http.loading" nz-button nzDanger (click)="auditPartner(false)"> 驳回 </button>
</ng-container>
<ng-container *ngIf="detailData?.approvalStatus != 10">
<button [disabled]="service.http.loading" nz-button nzDanger nz-popconfirm [nzPopconfirmTitle]="enable"
(nzOnConfirm)="freezeOrResume(0)" nzPopconfirmPlacement="bottomRight" *ngIf="detailData?.lockedStatus"
acl [acl-ability]="['USERCENTER-FREIGHT-ENTERPRISE-D-lock']">
<button
[disabled]="service.http.loading"
nz-button
nzDanger
nz-popconfirm
[nzPopconfirmTitle]="enable"
(nzOnConfirm)="freezeOrResume(0)"
nzPopconfirmPlacement="bottomRight"
*ngIf="detailData?.lockedStatus"
acl
[acl-ability]="['USERCENTER-FREIGHT-ENTERPRISE-D-lock']"
>
启用
</button>
<button [disabled]="service.http.loading" nz-button nzDanger nz-popconfirm [nzPopconfirmTitle]="frozen"
(nzOnConfirm)="freezeOrResume(1)" nzPopconfirmPlacement="bottomRight" *ngIf="!detailData?.lockedStatus"
acl [acl-ability]="['USERCENTER-FREIGHT-ENTERPRISE-D-lock']">
<button
[disabled]="service.http.loading"
nz-button
nzDanger
nz-popconfirm
[nzPopconfirmTitle]="frozen"
(nzOnConfirm)="freezeOrResume(1)"
nzPopconfirmPlacement="bottomRight"
*ngIf="!detailData?.lockedStatus"
acl
[acl-ability]="['USERCENTER-FREIGHT-ENTERPRISE-D-lock']"
>
冻结
</button>
</ng-container>
@ -64,17 +80,24 @@
</ng-template>
<ng-template #frozen>
<ng-container *ngTemplateOutlet="
<ng-container
*ngTemplateOutlet="
PopconfirmTempalte;
context: { title: '确定冻结该合伙人吗?', content: '停用后,该合伙人将被限制使用,不限于访问受限、邀请客户、佣金收益等,请谨慎操作' }
">
context: {
title: '确定冻结该合伙人吗?',
content: '停用后,该合伙人将被限制使用,不限于访问受限、邀请客户、佣金收益等,请谨慎操作'
}
"
>
</ng-container>
</ng-template>
<ng-template #enable>
<ng-container *ngTemplateOutlet="
<ng-container
*ngTemplateOutlet="
PopconfirmTempalte;
context: { title: '确定启用该合伙人吗?', content: '启用后,该该合伙人将恢复正常使用功能,请再次确认' }
">
"
>
</ng-container>
</ng-template>
</page-header-wrapper>
@ -83,21 +106,34 @@
<sv-container col="3">
<sv-title>企业管理员信息</sv-title>
<sv label="姓名">
<input nz-input type="text" [(ngModel)]="detailData.adminUserInfo.name" [readonly]="!isEdit"
[nzBorderless]="!isEdit" [placeholder]="isEdit ? '' : '-'" />
<input
nz-input
type="text"
[(ngModel)]="detailData.adminUserInfo.name"
[readonly]="!isEdit"
[nzBorderless]="!isEdit"
[placeholder]="isEdit ? '' : '-'"
/>
</sv>
<sv label="手机号">
<!-- <input nz-input type="text" [(ngModel)]="detailData.adminUserInfo.mobile" [readonly]="!isEdit"
[nzBorderless]="!isEdit" [placeholder]="isEdit ? '' : '-'" /> -->
{{detailData.adminUserInfo.mobile}}
{{ detailData.adminUserInfo.mobile }}
</sv>
<sv label="身份证号">
<input nz-input type="text" [(ngModel)]="detailData.adminUserInfo.certificateNumber" [readonly]="!isEdit"
[nzBorderless]="!isEdit" [placeholder]="isEdit ? '' : '-'" />
<input
nz-input
type="text"
[(ngModel)]="detailData.adminUserInfo.certificateNumber"
[readonly]="!isEdit"
[nzBorderless]="!isEdit"
[placeholder]="isEdit ? '' : '-'"
/>
</sv>
<sv label="身份证照" col="2">
<div class="d-flex">
<ng-container *ngTemplateOutlet="
<ng-container
*ngTemplateOutlet="
uploadTemplate;
context: {
data: detailData?.adminUserInfo,
@ -106,9 +142,11 @@
key2: 'certificatePhotoFront',
hover: 'certificateBackFront'
}
">
"
>
</ng-container>
<ng-container *ngTemplateOutlet="
<ng-container
*ngTemplateOutlet="
uploadTemplate;
context: {
data: detailData?.adminUserInfo,
@ -117,25 +155,44 @@
key2: 'certificatePhotoBack',
hover: 'certificateBack'
}
">
"
>
</ng-container>
</div>
</sv>
<sv label="身份证有效期" col="1">
<nz-date-picker [(ngModel)]="detailData.adminUserInfo.validStartTime" [nzDisabled]="!isEdit" nzPlaceHolder=" "
[nzBorderless]="!isEdit" [nzSuffixIcon]="isEdit ? 'calendar' : ''" style="width: 140px" class="calendar">
<nz-date-picker
[(ngModel)]="detailData.adminUserInfo.validStartTime"
[nzDisabled]="!isEdit"
nzPlaceHolder=" "
[nzBorderless]="!isEdit"
[nzSuffixIcon]="isEdit ? 'calendar' : ''"
style="width: 140px"
class="calendar"
>
</nz-date-picker>
-
<ng-container
*ngIf="!isEdit && !detailData?.adminUserInfo.validEndTime && detailData?.adminUserInfo.validStartTime">
<ng-container *ngIf="!isEdit && !detailData?.adminUserInfo.validEndTime && detailData?.adminUserInfo.validStartTime">
<label style="padding-left: 11px">长期</label>
</ng-container>
<nz-date-picker [(ngModel)]="detailData.adminUserInfo.validEndTime" [nzDisabled]="!isEdit" nzPlaceHolder=" "
[nzBorderless]="!isEdit" [nzSuffixIcon]="isEdit ? 'calendar' : ''" style="width: 140px" class="calendar">
<nz-date-picker
[(ngModel)]="detailData.adminUserInfo.validEndTime"
[nzDisabled]="!isEdit"
nzPlaceHolder=" "
[nzBorderless]="!isEdit"
[nzSuffixIcon]="isEdit ? 'calendar' : ''"
style="width: 140px"
class="calendar"
>
</nz-date-picker>
<ng-container *ngIf="isEdit">
<label nz-checkbox [ngModel]="!!!detailData.adminUserInfo.validEndTime"
(ngModelChange)="$event ? (detailData.adminUserInfo.validEndTime = '') : ''" class="ml-sm">长期</label>
<label
nz-checkbox
[ngModel]="!!!detailData.adminUserInfo.validEndTime"
(ngModelChange)="$event ? (detailData.adminUserInfo.validEndTime = '') : ''"
class="ml-sm"
>长期</label
>
</ng-container>
</sv>
</sv-container>
@ -144,60 +201,81 @@
<sv-container col="3" class="mt16">
<sv-title>
<label class="mr-md">企业基本信息</label>
<label *ngIf="detailData?.approvalStatus === 10" style="color: #1890ff"><i nz-icon nzType="info-circle"
nzTheme="fill" class="mr-xs"></i>待审核
<label *ngIf="detailData?.approvalStatus === 10" style="color: #1890ff"
><i nz-icon nzType="info-circle" nzTheme="fill" class="mr-xs"></i>待审核
</label>
<label *ngIf="detailData?.approvalStatus === 20" style="color: #52c41a"><i nz-icon nzType="check-circle"
nzTheme="fill" class="mr-xs"></i>审核通过
<label *ngIf="detailData?.approvalStatus === 20" style="color: #52c41a"
><i nz-icon nzType="check-circle" nzTheme="fill" class="mr-xs"></i>审核通过
</label>
<label *ngIf="detailData?.approvalStatus === 30" style="color: #ff4d4f"><i nz-icon nzType="close-circle"
nzTheme="fill" class="mr-xs"></i>驳回&nbsp;驳回原因:{{ detailData?.approvalOpinion }}
<label *ngIf="detailData?.approvalStatus === 30" style="color: #ff4d4f"
><i nz-icon nzType="close-circle" nzTheme="fill" class="mr-xs"></i>驳回&nbsp;驳回原因:{{ detailData?.approvalOpinion }}
</label>
<p style="margin-bottom: 0">
四要素验证:
<label *ngIf="detailData?.esignCheckStatus === 0" style="color: #ff4d4f"><i nz-icon nzType="info-circle"
nzTheme="fill" class="mr-xs"></i>不通过&nbsp;&nbsp;驳回原因:{{ detailData?.esignCheckMsg }}
<label *ngIf="detailData?.esignCheckStatus === 0" style="color: #ff4d4f"
><i nz-icon nzType="info-circle" nzTheme="fill" class="mr-xs"></i>不通过&nbsp;&nbsp;驳回原因:{{ detailData?.esignCheckMsg }}
</label>
<label *ngIf="detailData?.esignCheckStatus === 1" style="color: #52c41a"><i nz-icon nzType="check-circle"
nzTheme="fill" class="mr-xs"></i>通过
<label *ngIf="detailData?.esignCheckStatus === 1" style="color: #52c41a"
><i nz-icon nzType="check-circle" nzTheme="fill" class="mr-xs"></i>通过
</label>
<label *ngIf="detailData?.esignCheckStatus === 2" style="color: #1890ff"><i nz-icon nzType="close-circle"
nzTheme="fill" class="mr-xs"></i>未认证:&nbsp;&nbsp;{{detailData?.esignCheckMsg}}
<label *ngIf="detailData?.esignCheckStatus === 2" style="color: #1890ff"
><i nz-icon nzType="close-circle" nzTheme="fill" class="mr-xs"></i>未认证:&nbsp;&nbsp;{{ detailData?.esignCheckMsg }}
</label>
</p>
</sv-title>
<sv label="公司名称">
<!-- <input nz-input type="text" [(ngModel)]="" [readonly]="!isEdit" [nzBorderless]="!isEdit"
[placeholder]="isEdit ? '' : '-'" /> -->
{{detailData.enterpriseName}}
{{ detailData.enterpriseName }}
</sv>
<sv label="统一社会信用代码">
<!-- <input nz-input type="text" [(ngModel)]="detailData.unifiedSocialCreditCode" [readonly]="!isEdit"
[nzBorderless]="!isEdit" [placeholder]="isEdit ? '' : '-'" /> -->
{{detailData.unifiedSocialCreditCode}}
{{ detailData.unifiedSocialCreditCode }}
</sv>
<sv label="营业执照" col="2">
<ng-container *ngTemplateOutlet="
<ng-container
*ngTemplateOutlet="
uploadTemplate;
context: { data: detailData, status: isEdit, key: 'licensePhotoWatermark', key2: 'licensePhoto', hover: 'detailPhoto' }
">
"
>
</ng-container>
</sv>
<sv label="营业期限" col="1">
<nz-date-picker [(ngModel)]="detailData.operatingStartTime" [nzDisabled]="!isEdit" nzPlaceHolder=" "
[nzBorderless]="!isEdit" [nzSuffixIcon]="isEdit ? 'calendar' : ''" style="width: 100px" class="calendar">
<nz-date-picker
[(ngModel)]="detailData.operatingStartTime"
[nzDisabled]="!isEdit"
nzPlaceHolder=" "
[nzBorderless]="!isEdit"
[nzSuffixIcon]="isEdit ? 'calendar' : ''"
style="width: 100px"
class="calendar"
>
</nz-date-picker>
-
<ng-container *ngIf="!isEdit && !detailData?.operatingEndTime && detailData?.operatingStartTime">
<label style="padding-left: 11px">长期</label>
</ng-container>
<nz-date-picker [(ngModel)]="detailData.operatingEndTime" [nzDisabled]="!isEdit" nzPlaceHolder=" "
[nzBorderless]="!isEdit" [nzSuffixIcon]="isEdit ? 'calendar' : ''" style="width: 100px" class="calendar">
<nz-date-picker
[(ngModel)]="detailData.operatingEndTime"
[nzDisabled]="!isEdit"
nzPlaceHolder=" "
[nzBorderless]="!isEdit"
[nzSuffixIcon]="isEdit ? 'calendar' : ''"
style="width: 100px"
class="calendar"
>
</nz-date-picker>
<ng-container *ngIf="isEdit">
<label nz-checkbox [ngModel]="!!!detailData.operatingEndTime"
(ngModelChange)="$event ? (detailData.operatingEndTime = '') : ''" class="ml-sm">长期</label>
<label
nz-checkbox
[ngModel]="!!!detailData.operatingEndTime"
(ngModelChange)="$event ? (detailData.operatingEndTime = '') : ''"
class="ml-sm"
>长期</label
>
</ng-container>
</sv>
</sv-container>
@ -205,33 +283,63 @@
<sv-container col="3" class="mt16">
<sv-title>企业法人信息</sv-title>
<sv label="法定代表人">
<input nz-input type="text" [(ngModel)]="detailData.legalPersonIdentity.name" [readonly]="!isEdit"
[nzBorderless]="!isEdit" [placeholder]="isEdit ? '' : '-'" />
<input
nz-input
type="text"
[(ngModel)]="detailData.legalPersonIdentity.name"
[readonly]="!isEdit"
[nzBorderless]="!isEdit"
[placeholder]="isEdit ? '' : '-'"
/>
</sv>
<sv label="身份证号码">
<input nz-input type="text" [(ngModel)]="detailData.legalPersonIdentity.certificateNumber" [readonly]="!isEdit"
[nzBorderless]="!isEdit" [placeholder]="isEdit ? '' : '-'" />
<input
nz-input
type="text"
[(ngModel)]="detailData.legalPersonIdentity.certificateNumber"
[readonly]="!isEdit"
[nzBorderless]="!isEdit"
[placeholder]="isEdit ? '' : '-'"
/>
</sv>
<sv label="身份证有效期" col="1">
<nz-date-picker [(ngModel)]="detailData.legalPersonIdentity.validStartTime" [nzDisabled]="!isEdit"
nzPlaceHolder=" " [nzBorderless]="!isEdit" [nzSuffixIcon]="isEdit ? 'calendar' : ''" style="width: 140px"
class="calendar"></nz-date-picker>
<nz-date-picker
[(ngModel)]="detailData.legalPersonIdentity.validStartTime"
[nzDisabled]="!isEdit"
nzPlaceHolder=" "
[nzBorderless]="!isEdit"
[nzSuffixIcon]="isEdit ? 'calendar' : ''"
style="width: 140px"
class="calendar"
></nz-date-picker>
-
<ng-container
*ngIf="!isEdit && !detailData?.legalPersonIdentity?.validEndTime && detailData.legalPersonIdentity.validStartTime">
<ng-container *ngIf="!isEdit && !detailData?.legalPersonIdentity?.validEndTime && detailData.legalPersonIdentity.validStartTime">
<label style="padding-left: 11px">长期</label>
</ng-container>
<nz-date-picker [(ngModel)]="detailData.legalPersonIdentity.validEndTime" [nzDisabled]="!isEdit" nzPlaceHolder=" "
[nzBorderless]="!isEdit" [nzSuffixIcon]="isEdit ? 'calendar' : ''" style="width: 140px" class="calendar">
<nz-date-picker
[(ngModel)]="detailData.legalPersonIdentity.validEndTime"
[nzDisabled]="!isEdit"
nzPlaceHolder=" "
[nzBorderless]="!isEdit"
[nzSuffixIcon]="isEdit ? 'calendar' : ''"
style="width: 140px"
class="calendar"
>
</nz-date-picker>
<ng-container *ngIf="isEdit">
<label nz-checkbox [ngModel]="!!!detailData.legalPersonIdentity.validEndTime"
(ngModelChange)="$event ? (detailData.legalPersonIdentity.validEndTime = '') : ''" class="ml-sm">长期</label>
<label
nz-checkbox
[ngModel]="!!!detailData.legalPersonIdentity.validEndTime"
(ngModelChange)="$event ? (detailData.legalPersonIdentity.validEndTime = '') : ''"
class="ml-sm"
>长期</label
>
</ng-container>
</sv>
<sv label="身份证照" col="1">
<div class="d-flex">
<ng-container *ngTemplateOutlet="
<ng-container
*ngTemplateOutlet="
uploadTemplate;
context: {
data: detailData?.legalPersonIdentity,
@ -240,9 +348,11 @@
key2: 'certificatePhotoFront',
hover: 'legalFront'
}
">
"
>
</ng-container>
<ng-container *ngTemplateOutlet="
<ng-container
*ngTemplateOutlet="
uploadTemplate;
context: {
data: detailData?.legalPersonIdentity,
@ -251,16 +361,26 @@
key2: 'certificatePhotoBack',
hover: 'legalBack'
}
">
"
>
</ng-container>
</div>
</sv>
<sv label="所属城市">
<ng-container *ngIf="isEdit; else cascaderelseTemplate">
<nz-tree-select #areaTreeSelect style="width: 350px" [(ngModel)]="enterpriseAddressCode"
[nzDropdownStyle]="{ 'max-height': '300px' }" [nzExpandedKeys]="enterpriseDefaultAddressCode"
[nzNodes]="areaList" [nzAsyncData]="true" [nzCheckStrictly]="true" nzCheckable
(nzExpandChange)="onExpandChange($event.node)" nzDropdownClassName="area-tree-select">
<nz-tree-select
#areaTreeSelect
style="width: 350px"
[(ngModel)]="enterpriseAddressCode"
[nzDropdownStyle]="{ 'max-height': '300px' }"
[nzExpandedKeys]="enterpriseDefaultAddressCode"
[nzNodes]="areaList"
[nzAsyncData]="true"
[nzCheckStrictly]="true"
nzCheckable
(nzExpandChange)="onExpandChange($event.node)"
nzDropdownClassName="area-tree-select"
>
</nz-tree-select>
</ng-container>
<ng-template #cascaderelseTemplate>
@ -280,20 +400,25 @@
<nz-card>
<sv-container col="3" class="mt16">
<sv-title>修改渠道销售记录</sv-title>
<sv label="">
<st #st [data]="service.$api_get_personal_channel_list" [columns]="columns"
[req]="{params:{partnerId:route.snapshot.params.id}}" [loading]="service.http.loading" bordered size="small"
[page]="{ show: false }" [scroll]="{ x: '1200px' }">
</st>
</sv>
</sv-container>
<st
#st
[data]="service.$api_get_personal_channel_list"
[columns]="columns"
[req]="{ params: { partnerId: route.snapshot.params.id } }"
[loading]="service.http.loading"
bordered
size="small"
[page]="{ show: false }"
[scroll]="{ x: '1200px' }"
>
</st>
</nz-card>
<ng-template #PopconfirmTempalte let-title="title" let-content="content">
<div class="ant-popover-message">
<i nz-icon nzType="info-circle" nzTheme="fill"></i>
<div class="ant-popover-message-title ng-star-inserted self-ant-popover-title" style="font-size: 16px">{{ title }}
</div>
<div class="ant-popover-message-title ng-star-inserted self-ant-popover-title" style="font-size: 16px">{{ title }} </div>
<div class="ant-popover-message-title ng-star-inserted">
{{ content }}
</div>
@ -301,18 +426,36 @@
</ng-template>
<ng-template #uploadTemplate let-data="data" let-status="status" let-key="key" let-key2="key2" let-hover="hover">
<nz-upload class="avatar-uploader" [nzAction]="uploadURl" nzName="multipartFile" nzListType="picture-card"
[nzShowUploadList]="false" nzFileType="image/png,image/jpeg,image/jpg,image/gif"
[nzDisabled]="!isEdit || disabledUpload" (nzChange)="changeUpload($event, data, key, key2, hover)">
<nz-upload
class="avatar-uploader"
[nzAction]="uploadURl"
nzName="multipartFile"
nzListType="picture-card"
[nzShowUploadList]="false"
nzFileType="image/png,image/jpeg,image/jpg,image/gif"
[nzDisabled]="!isEdit || disabledUpload"
(nzChange)="changeUpload($event, data, key, key2, hover)"
>
<ng-container *ngIf="!data[key] && isEdit">
<i class="upload-icon" nz-icon [nzType]="service.http.loading ? 'loading' : 'plus'"></i>
<div class="ant-upload-text">上传</div>
</ng-container>
<div *ngIf="data[key]" (mouseover)="detailData[hover] = true" (mouseleave)="detailData[hover] = false"
(click)="$event.cancelBubble = true" class="image-hover">
<div
*ngIf="data[key]"
(mouseover)="detailData[hover] = true"
(mouseleave)="detailData[hover] = false"
(click)="$event.cancelBubble = true"
class="image-hover"
>
<img nz-image [nzSrc]="data[key]" style="width: 200px; height: 160px" />
<i nz-icon *ngIf="detailData[hover] && isEdit" nzType="close-circle" nzTheme="fill" class="delete-icon"
(click)="deleteImg(data, key, key2)"></i>
<i
nz-icon
*ngIf="detailData[hover] && isEdit"
nzType="close-circle"
nzTheme="fill"
class="delete-icon"
(click)="deleteImg(data, key, key2)"
></i>
</div>
</nz-upload>
</ng-template>

View File

@ -9,7 +9,7 @@
<nz-skeleton [nzLoading]="service.http.loading">
<div class="user-info" nz-row>
<div nz-col [nzXl]="18" [nzLg]="24" [nzSm]="24" [nzXs]="24" class="d-flex">
<img [src]="detailData?.enterpriseLogo" />
<img [src]="detailData?.avatar" />
<div style="flex: 1">
<div nz-row>
<div nz-col [nzLg]="12" [nzSm]="24" [nzXs]="24">
@ -21,16 +21,14 @@
</div>
</div>
<div nz-row>
<div nz-col [nzLg]="12" [nzSm]="24" [nzXs]="24">
<!-- <div nz-col [nzLg]="12" [nzSm]="24" [nzXs]="24">
<p>{{ detailData?.adminUserInfo?.certificateNumber }}</p>
</div>
</div> -->
<div nz-col [nzLg]="12" [nzSm]="24" [nzXs]="24"> 个人合伙人 </div>
</div>
<div nz-row>
<div nz-col [nzLg]="12" [nzSm]="24" [nzXs]="24"> 注册时间:{{ detailData?.createTime }} </div>
<div nz-col [nzLg]="12" [nzSm]="24" [nzXs]="24">
所属城市:{{enterpriseDefaultCityName}}
</div>
<div nz-col [nzLg]="12" [nzSm]="24" [nzXs]="24"> 所属城市:{{ enterpriseDefaultCityName }} </div>
</div>
</div>
</div>
@ -40,19 +38,33 @@
<button [disabled]="service.http.loading" nz-button nzDanger (click)="save()"> 保存 </button>
</ng-container>
<ng-template #editButton>
<ng-container *ngIf="detailData?.approvalStatus === 10">
<button [disabled]="service.http.loading" nz-button nzDanger (click)="auditPartner(true)"> 通过 </button>
<button [disabled]="service.http.loading" nz-button nzDanger (click)="auditPartner(false)"> 驳回 </button>
</ng-container>
<ng-container *ngIf="detailData?.approvalStatus != 10">
<button [disabled]="service.http.loading" nz-button nzDanger nz-popconfirm [nzPopconfirmTitle]="enable"
(nzOnConfirm)="freezeOrResume(0)" nzPopconfirmPlacement="bottomRight" *ngIf="detailData?.lockedStatus"
acl [acl-ability]="['USERCENTER-FREIGHT-ENTERPRISE-D-lock']">
<button
[disabled]="service.http.loading"
nz-button
nzDanger
nz-popconfirm
[nzPopconfirmTitle]="enable"
(nzOnConfirm)="freezeOrResume(0)"
nzPopconfirmPlacement="bottomRight"
*ngIf="detailData?.lockedStatus"
acl
[acl-ability]="['USERCENTER-FREIGHT-ENTERPRISE-D-lock']"
>
启用
</button>
<button [disabled]="service.http.loading" nz-button nzDanger nz-popconfirm [nzPopconfirmTitle]="frozen"
(nzOnConfirm)="freezeOrResume(1)" nzPopconfirmPlacement="bottomRight" *ngIf="!detailData?.lockedStatus"
acl [acl-ability]="['USERCENTER-FREIGHT-ENTERPRISE-D-lock']">
<button
[disabled]="service.http.loading"
nz-button
nzDanger
nz-popconfirm
[nzPopconfirmTitle]="frozen"
(nzOnConfirm)="freezeOrResume(1)"
nzPopconfirmPlacement="bottomRight"
*ngIf="!detailData?.lockedStatus"
acl
[acl-ability]="['USERCENTER-FREIGHT-ENTERPRISE-D-lock']"
>
冻结
</button>
</ng-container>
@ -64,57 +76,116 @@
</ng-template>
<ng-template #frozen>
<ng-container *ngTemplateOutlet="
PopconfirmTempalte;
context: { title: '确定冻结该合伙人吗?', content: '停用后,该合伙人将被限制使用,不限于访问受限、邀请客户、佣金收益等,请谨慎操作' }
">
<ng-container
*ngTemplateOutlet="
PopconfirmTempalte;
context: {
title: '确定冻结该合伙人吗?',
content: '停用后,该合伙人将被限制使用,不限于访问受限、邀请客户、佣金收益等,请谨慎操作'
}
"
>
</ng-container>
</ng-template>
<ng-template #enable>
<ng-container *ngTemplateOutlet="
PopconfirmTempalte;
context: { title: '确定启用该合伙人吗?', content: '启用后,该该合伙人将恢复正常使用功能,请再次确认' }
">
<ng-container
*ngTemplateOutlet="
PopconfirmTempalte;
context: { title: '确定启用该合伙人吗?', content: '启用后,该该合伙人将恢复正常使用功能,请再次确认' }
"
>
</ng-container>
</ng-template>
</page-header-wrapper>
<nz-card [class]="isEdit ? 'edit-box' : 'readOnly-box'">
<div class="font-weight-blod text-md detail-title" style="justify-content: space-between;">
<div style="display: flex; justify-content: center;align-items: center;">
<a class="sign"></a>
<p style="margin-bottom: 0">
合伙人信息
<label *ngIf="!detailData?.adminUserInfo?.isExpired" style="color: #ff4d4f"><i nz-icon nzType="info-circle"
nzTheme="fill" class="mr-xs"></i>{{detailData?.adminUserInfo?.esignCheckMsg}}
</label>
<label *ngIf="detailData?.adminUserInfo?.isExpired" style="color: #52c41a"><i nz-icon nzType="check-circle"
nzTheme="fill" class="mr-xs"></i>验证通过
</label>
</p>
</div>
<div>
<ng-container *ngIf="detailData?.approvalStatus === 10">
<button [disabled]="service.http.loading" nz-button nzDanger (click)="auditPartner(true)"> 通过 </button>
<button [disabled]="service.http.loading" nz-button nzDanger (click)="auditPartner(false)"> 驳回 </button>
</ng-container>
</div>
</div>
<sv-container col="3" class="mt16">
<sv-title>合伙人信息</sv-title>
<!-- <sv-title>合伙人信息</sv-title> -->
<sv label="姓名">
<input nz-input type="text" [(ngModel)]="detailData.adminUserInfo.name" [readonly]="!isEdit"
[nzBorderless]="!isEdit" [placeholder]="isEdit ? '' : '-'" />
<input
nz-input
type="text"
[(ngModel)]="detailData.adminUserInfo.name"
[readonly]="!isEdit"
[nzBorderless]="!isEdit"
[placeholder]="isEdit ? '' : '-'"
/>
</sv>
<sv label="手机号">
<!-- <input nz-input type="text" [(ngModel)]="detailData.adminUserInfo.certificateNumber" [readonly]="!isEdit"
[nzBorderless]="!isEdit" [placeholder]="isEdit ? '' : '-'" /> -->
{{detailData.adminUserInfo.mobile}}
{{ detailData.adminUserInfo.mobile }}
</sv>
<sv label="身份证号">
<input nz-input type="text" [(ngModel)]="detailData.adminUserInfo.certificateNumber" [readonly]="!isEdit"
[nzBorderless]="!isEdit" [placeholder]="isEdit ? '' : '-'" />
<input
nz-input
type="text"
[(ngModel)]="detailData.adminUserInfo.certificateNumber"
[readonly]="!isEdit"
[nzBorderless]="!isEdit"
[placeholder]="isEdit ? '' : '-'"
/>
</sv>
<sv label="身份证有效期" col="1">
<nz-date-picker [(ngModel)]="detailData.adminUserInfo.validStartTime" [nzDisabled]="!isEdit" nzPlaceHolder=" "
[nzBorderless]="!isEdit" [nzSuffixIcon]="isEdit ? 'calendar' : ''" style="width: 140px" class="calendar">
<nz-date-picker
[(ngModel)]="detailData.adminUserInfo.validStartTime"
[nzDisabled]="!isEdit"
nzPlaceHolder=" "
[nzBorderless]="!isEdit"
[nzSuffixIcon]="isEdit ? 'calendar' : ''"
style="width: 140px"
class="calendar"
>
</nz-date-picker>
-
<ng-container
*ngIf="!isEdit && !detailData?.adminUserInfo?.validEndTime && detailData.adminUserInfo.validStartTime">
<ng-container *ngIf="!isEdit && !detailData?.adminUserInfo?.validEndTime && detailData.adminUserInfo.validStartTime">
<label style="padding-left: 11px">长期</label>
</ng-container>
<nz-date-picker [(ngModel)]="detailData.adminUserInfo.validEndTime" [nzDisabled]="!isEdit" nzPlaceHolder=" "
[nzBorderless]="!isEdit" [nzSuffixIcon]="isEdit ? 'calendar' : ''" style="width: 140px" class="calendar">
<nz-date-picker
[(ngModel)]="detailData.adminUserInfo.validEndTime"
[nzDisabled]="!isEdit"
nzPlaceHolder=" "
[nzBorderless]="!isEdit"
[nzSuffixIcon]="isEdit ? 'calendar' : ''"
style="width: 140px"
class="calendar"
>
</nz-date-picker>
<ng-container *ngIf="isEdit">
<label nz-checkbox [ngModel]="!!!detailData.adminUserInfo.validEndTime"
(ngModelChange)="$event ? (detailData.adminUserInfo.validEndTime = '') : ''" class="ml-sm">长期</label>
<label
nz-checkbox
[ngModel]="!!!detailData.adminUserInfo.validEndTime"
(ngModelChange)="$event ? (detailData.adminUserInfo.validEndTime = '') : ''"
class="ml-sm"
>长期</label
>
</ng-container>
</sv>
<sv label="身份证照" col="1">
<div class="d-flex">
<ng-container *ngTemplateOutlet="
<ng-container
*ngTemplateOutlet="
uploadTemplate;
context: {
data: detailData?.adminUserInfo,
@ -123,9 +194,11 @@
key2: 'certificatePhotoFront',
hover: 'legalFront'
}
">
"
>
</ng-container>
<ng-container *ngTemplateOutlet="
<ng-container
*ngTemplateOutlet="
uploadTemplate;
context: {
data: detailData?.adminUserInfo,
@ -134,16 +207,26 @@
key2: 'certificatePhotoBack',
hover: 'legalBack'
}
">
"
>
</ng-container>
</div>
</sv>
<sv label="所属城市">
<ng-container *ngIf="isEdit; else cascaderelseTemplate">
<nz-tree-select #areaTreeSelect style="width: 350px" [(ngModel)]="enterpriseAddressCode"
[nzDropdownStyle]="{ 'max-height': '300px' }" [nzExpandedKeys]="enterpriseDefaultAddressCode"
[nzNodes]="areaList" [nzAsyncData]="true" [nzCheckStrictly]="true" nzCheckable
(nzExpandChange)="onExpandChange($event.node)" nzDropdownClassName="area-tree-select">
<nz-tree-select
#areaTreeSelect
style="width: 350px"
[(ngModel)]="enterpriseAddressCode"
[nzDropdownStyle]="{ 'max-height': '300px' }"
[nzExpandedKeys]="enterpriseDefaultAddressCode"
[nzNodes]="areaList"
[nzAsyncData]="true"
[nzCheckStrictly]="true"
nzCheckable
(nzExpandChange)="onExpandChange($event.node)"
nzDropdownClassName="area-tree-select"
>
</nz-tree-select>
</ng-container>
<ng-template #cascaderelseTemplate>
@ -161,22 +244,27 @@
</nz-card>
<nz-card>
<sv-container col="3" class="mt16">
<sv-container >
<sv-title>修改渠道销售记录</sv-title>
<sv label="">
<st #st [data]="service.$api_get_personal_channel_list" [columns]="columns"
[req]="{params:{partnerId:route.snapshot.params.id}}" [loading]="service.http.loading" bordered size="small"
[page]="{ show: false }" [scroll]="{ x: '1200px' }">
</st>
</sv>
</sv-container>
<st
#st
[scroll]="{x: '1200px'}"
[data]="service.$api_get_personal_channel_list"
[columns]="columns"
[req]="{ params: { partnerId: route.snapshot.params.id } }"
[loading]="service.http.loading"
bordered
size="small"
[page]="{ show: false }"
>
</st>
</nz-card>
<ng-template #PopconfirmTempalte let-title="title" let-content="content">
<div class="ant-popover-message">
<i nz-icon nzType="info-circle" nzTheme="fill"></i>
<div class="ant-popover-message-title ng-star-inserted self-ant-popover-title" style="font-size: 16px">{{ title }}
</div>
<div class="ant-popover-message-title ng-star-inserted self-ant-popover-title" style="font-size: 16px">{{ title }} </div>
<div class="ant-popover-message-title ng-star-inserted">
{{ content }}
</div>
@ -184,18 +272,36 @@
</ng-template>
<ng-template #uploadTemplate let-data="data" let-status="status" let-key="key" let-key2="key2" let-hover="hover">
<nz-upload class="avatar-uploader" [nzAction]="uploadURl" nzName="multipartFile" nzListType="picture-card"
[nzShowUploadList]="false" nzFileType="image/png,image/jpeg,image/jpg,image/gif"
[nzDisabled]="!isEdit || disabledUpload" (nzChange)="changeUpload($event, data, key, key2, hover)">
<nz-upload
class="avatar-uploader"
[nzAction]="uploadURl"
nzName="multipartFile"
nzListType="picture-card"
[nzShowUploadList]="false"
nzFileType="image/png,image/jpeg,image/jpg,image/gif"
[nzDisabled]="!isEdit || disabledUpload"
(nzChange)="changeUpload($event, data, key, key2, hover)"
>
<ng-container *ngIf="!data[key] && isEdit">
<i class="upload-icon" nz-icon [nzType]="service.http.loading ? 'loading' : 'plus'"></i>
<div class="ant-upload-text">上传</div>
</ng-container>
<div *ngIf="data[key]" (mouseover)="detailData[hover] = true" (mouseleave)="detailData[hover] = false"
(click)="$event.cancelBubble = true" class="image-hover">
<div
*ngIf="data[key]"
(mouseover)="detailData[hover] = true"
(mouseleave)="detailData[hover] = false"
(click)="$event.cancelBubble = true"
class="image-hover"
>
<img nz-image [nzSrc]="data[key]" style="width: 200px; height: 160px" />
<i nz-icon *ngIf="detailData[hover] && isEdit" nzType="close-circle" nzTheme="fill" class="delete-icon"
(click)="deleteImg(data, key, key2)"></i>
<i
nz-icon
*ngIf="detailData[hover] && isEdit"
nzType="close-circle"
nzTheme="fill"
class="delete-icon"
(click)="deleteImg(data, key, key2)"
></i>
</div>
</nz-upload>
</ng-template>

View File

@ -4,7 +4,7 @@
* @Author : Shiming
* @Date : 2022-02-24 20:09:49
* @LastEditors : Shiming
* @LastEditTime : 2022-03-29 13:40:16
* @LastEditTime : 2022-05-12 16:43:10
* @FilePath : \\tms-obc-web\\src\\app\\routes\\partner\\rebate-management\\components\\rebate-record\\rebate-record.component.html
* Copyright (C) 2022 huzhenhong. All rights reserved.
-->
@ -23,7 +23,7 @@
></sf>
<div nz-col [nzSpan]="_$expand ? 24 : 6" class="text-right">
<button nz-button nzType="primary" [nzLoading]="service.http.loading" (click)="st?.load(1);">查询</button>
<button nz-button nzType="primary" [disabled]="service.http.loading" acl [acl-ability]="['REBATE-RECORD-export']">导出</button>
<button nz-button nzType="primary" (click)="exprot()" [disabled]="service.http.loading" acl [acl-ability]="['REBATE-RECORD-export']">导出</button>
<button nz-button [disabled]="service.http.loading" (click)="resetSF()">重置</button>
</div>
</div>
@ -33,7 +33,7 @@
<!-- 数据列表 -->
<st
#st
[data]="service.$api_get_getIncomeByBillpage"
[data]="service.$api_get_partnerIncomeHead"
[columns]="columns"
[req]="{ method: 'POST', allInBody: true, reName: { pi: 'pageIndex', ps: 'pageSize' }, params: reqParams }"
[res]="{ reName: { list: 'data.records', total: 'data.total' } }"
@ -42,7 +42,10 @@
[loading]="service.http.loading"
>
<ng-template st-row='abnormalFeedback' let-item let-index='index'>
<div style="color: #f59a23;" (click)="feedback()">123212{{item?.abnormalFeedback}}</div>
<div style="color: #f59a23;" (click)="feedback(item)">123212{{item?.abnormalFeedback}}</div>
</ng-template>
<ng-template st-row='profitAmountSum' let-item let-index='index'>
<div >{{item?.profitAmountSum | currency}}</div>
</ng-template>
</st>
</nz-card>

View File

@ -68,11 +68,11 @@ export class ParterRebateManageMentRecordComponent implements OnInit {
{
title: '月份',
index: 'month',
format: (item: any) => {return item?.month ? item?.month + '月' : ''}
format: (item: any) => {return ((item?.year ? item?.year + '-' : '') + (item?.month ? item.month : ''))}
},
{
title: '返佣金额(元)',
index: 'name1'
render: 'profitAmountSum'
},
{
title: '合伙人名称',
@ -80,15 +80,16 @@ export class ParterRebateManageMentRecordComponent implements OnInit {
},
{
title: '实际等级',
index: 'name1'
index: 'partnerGrade'
},
{
title: '管理费比例',
index: 'rebateRatio'
index: 'manageFeeRatio',
format: (item) => {return item.manageFeeRatio + '%' }
},
{
title: '返佣时间',
index: 'name1'
index: 'returnCommissionTime'
},
{
title: '异常反馈',
@ -117,7 +118,7 @@ export class ParterRebateManageMentRecordComponent implements OnInit {
nzTitle: '明细',
nzWidth: 1200,
nzContent: ParterRebateManageMenRecordDetailComponent,
nzComponentParams: { },
nzComponentParams: { record: item },
nzFooter: null
});
modal.afterClose.subscribe((res: any) => {
@ -148,4 +149,10 @@ export class ParterRebateManageMentRecordComponent implements OnInit {
this.sf.reset();
this.st.load(1);
}
// 导出
exprot() {
// this.service.exportStart({ ...this.reqParams, pageSize: -1 }, this.service.$api_get_partnerIncomeHead_export);
this.service.downloadFile(this.service.$api_get_partnerIncomeHead_export, { ...this.reqParams, pageSize: -1 });
}
}

View File

@ -4,7 +4,7 @@
* @Author : Shiming
* @Date : 2022-02-24 20:09:49
* @LastEditors : Shiming
* @LastEditTime : 2022-05-07 15:42:10
* @LastEditTime : 2022-05-11 17:04:39
* @FilePath : \\tms-obc-web\\src\\app\\routes\\partner\\rebate-management\\components\\rebate-setting\\add\\add.component.html
* Copyright (C) 2022 huzhenhong. All rights reserved.
-->
@ -23,7 +23,14 @@
<sv-title> 固定结算费率配置</sv-title>
<sv label="固定结算费率">
<nz-input-number [disabled]="hiden" [nzMin]="0" [nzMax]="100" [(ngModel)]="accountingRate" [nzPrecision]="precision" nzPlaceHolder="请输入"></nz-input-number
<nz-input-number
[disabled]="hiden"
[nzMin]="0"
[nzMax]="100"
[(ngModel)]="accountingRate"
[nzPrecision]="precision"
nzPlaceHolder="请输入"
></nz-input-number
>&nbsp;%</sv
>
@ -74,15 +81,26 @@
</sv>
<sv label="优先级" col="1">
<!-- <nz-select [(ngModel)]="priority" [disabled]="hiden" style="max-width: 400px; min-width: 200px; margin-left: 28px">
<nz-option nzValue="1" nzLabel="1">1</nz-option>
<nz-option nzValue="2" nzLabel="2">2</nz-option>
<nz-option nzValue="3" nzLabel="3">3</nz-option>
<nz-option nzValue="4" nzLabel="4">4</nz-option>
<nz-option nzValue="5" nzLabel="5">5</nz-option>
</nz-select> -->
<nz-input-number style="max-width: 400px; min-width: 200px; margin-left: 28px" [(ngModel)]="priority" [nzMin]="0" [nzMax]="9999" [nzStep]="1"></nz-input-number>
<nz-input-number
style="max-width: 400px; min-width: 200px; margin-left: 28px"
[(ngModel)]="priority"
[nzMin]="0"
[nzMax]="9999"
[nzStep]="1"
></nz-input-number>
<div style="color: #7F7F7F;margin-left: 28px">
1、指全部合伙人、新注册合伙人、自定义合伙人三种范围优先执行的顺序等级数字越大优先执行该返佣模板<br />
2、同一合伙人范围的按创建时间最新的执行返佣模板
</div>
</sv>
<!-- <sv label="生效时间" col="1">
<nz-date-picker
nzShowTime
nzFormat="yyyy-MM-dd HH:mm:ss"
[(ngModel)]="enableTime"
nzPlaceHolder="请选择,精确到秒"
></nz-date-picker>
</sv> -->
<sv label="规则说明" col="1">
<sf
@ -99,7 +117,9 @@
<sv label="备注" col="1" style="margin-top: 16px">
<textarea
[disabled]="hiden"
maxlength="20"
placeholder="请输入20个字符"
[readonly]='hiden'
style="max-width: 400px; min-width: 200px; margin-left: 40px"
rows="4"
nz-input

View File

@ -4,7 +4,7 @@
* @Author : Shiming
* @Date : 2022-03-21 09:26:45
* @LastEditors : Shiming
* @LastEditTime : 2022-05-07 15:38:49
* @LastEditTime : 2022-05-11 16:49:20
* @FilePath : \\tms-obc-web\\src\\app\\routes\\partner\\rebate-management\\components\\rebate-setting\\add\\add.component.ts
* Copyright (C) 2022 huzhenhong. All rights reserved.
*/
@ -12,6 +12,7 @@ import { Component, OnInit, ViewChild } from '@angular/core';
import { ActivatedRoute, Router } from '@angular/router';
import { STColumn, STComponent } from '@delon/abc/st';
import { SFComponent, SFSchema } from '@delon/form';
import { DatePipe } from '@delon/theme';
import { ShipperBaseService } from '@shared';
import { NzModalService } from 'ng-zorro-antd/modal';
import { RebateManagementService } from '../../../services/rebate-management.service';
@ -19,7 +20,8 @@ import { ParterRebateManageMentAddPartnerListComponent } from '../add-partnerlis
@Component({
selector: 'app-parter-channel-rebate-management-add',
styleUrls: ['./add.component.less'],
templateUrl: './add.component.html'
templateUrl: './add.component.html',
providers: [DatePipe]
})
export class ParterRebateManageMentAddComponent implements OnInit {
@ViewChild('table') table!: any;
@ -27,6 +29,7 @@ export class ParterRebateManageMentAddComponent implements OnInit {
tabelData: any;
tabelType: any;
formData: any;
enableTime: any;
addStatus: boolean = false;
hiden: boolean = false;
configName: string = '';
@ -48,7 +51,8 @@ export class ParterRebateManageMentAddComponent implements OnInit {
public ar: ActivatedRoute,
public service: RebateManagementService,
private modal: NzModalService,
public shipperservice: ShipperBaseService
public shipperservice: ShipperBaseService,
private datePipe: DatePipe
) {}
columns: STColumn[] = [];
initSF(data?: any) {
@ -200,6 +204,7 @@ export class ParterRebateManageMentAddComponent implements OnInit {
accountingRate: this.accountingRate,
configName: this.configName,
configType: this.configType,
// enableTime:this.datePipe.transform(this.enableTime,'yyyy-MM-dd HH:mm:ss'),
rebateConfigLineDTO: this.table.data,
priority: this.priority, // 优先级
partnerIds: this.partnerId,
@ -229,6 +234,8 @@ export class ParterRebateManageMentAddComponent implements OnInit {
this.priority = res?.priority + '';
this.formData = { ruleDescription: res?.ruleDescription };
this.remark = res.remark;
// this.enableTime = res.enableTime;
// this.enableTime = new Date(Date.parse(res?.enableTime?.replace(/-/g, '/')))
}
});
}

View File

@ -4,7 +4,7 @@
* @Author : Shiming
* @Date : 2022-02-24 20:09:49
* @LastEditors : Shiming
* @LastEditTime : 2022-05-06 16:37:06
* @LastEditTime : 2022-05-11 17:07:17
* @FilePath : \\tms-obc-web\\src\\app\\routes\\partner\\rebate-management\\components\\rebate-setting\\rebate-setting.component.html
* Copyright (C) 2022 huzhenhong. All rights reserved.
-->
@ -58,7 +58,7 @@
<div *ngIf="item.partnerType == 3">自定义合伙人</div>
</ng-template>
<ng-template st-row='stateLocked' let-item let-index='index'>
<div >{{item?.stateLocked ? '生效中' : '失效'}}</div>
<div >{{item?.stateLocked ? '失效' : '生效中'}}</div>
</ng-template>
</st>
</nz-card>

View File

@ -53,8 +53,8 @@ export class ParterRebateManageMentSettingComponent implements OnInit {
title: '状态',
enum: [
{ label: '全部', value: '' },
{ label: '生效中', value: 1 },
{ label: '失效', value: 0 }
{ label: '生效中', value: 0 },
{ label: '失效', value: 1 }
],
ui: {
widget: 'select'
@ -94,7 +94,7 @@ export class ParterRebateManageMentSettingComponent implements OnInit {
},
{
title: '创建时间',
index: 'enableTime',
index: 'createTime',
width: '200px'
},
{
@ -127,7 +127,7 @@ export class ParterRebateManageMentSettingComponent implements OnInit {
text: '禁用',
acl: { ability: ['REBATE-SETTING-forbidden'] },
iif: _record => {
return _record.stateLocked == true && (_record.partnerType == 3 || _record.partnerType == 2);
return _record.stateLocked == false && (_record.partnerType == 3 || _record.partnerType == 2);
},
click: _record => this.viewEvaluate(_record)
},
@ -135,7 +135,7 @@ export class ParterRebateManageMentSettingComponent implements OnInit {
text: '启用',
acl: { ability: ['REBATE-SETTING-startUseing'] },
iif: _record => {
return _record.stateLocked == false;
return _record.stateLocked == true;
},
click: _record => this.viewEvaluate(_record)
}

View File

@ -4,23 +4,22 @@
* @Author : Shiming
* @Date : 2022-02-24 20:09:49
* @LastEditors : Shiming
* @LastEditTime : 2022-03-10 15:10:47
* @LastEditTime : 2022-05-12 17:43:46
* @FilePath : \\tms-obc-web\\src\\app\\routes\\partner\\rebate-management\\model\\abnormal-feedback\\abnormal-feedback.component.html
* Copyright (C) 2022 huzhenhong. All rights reserved.
-->
<sv-container col="1">
<sv label="异常反馈">
<div>有订单有异常请查看 </div>
<div>2022-09-08 00:00:00 </div>
<sv *ngFor="let item of mybidDetailInfo" label="异常反馈" >
<div>{{item.feedbackInfo}} </div>
<div>{{item.createTime}} </div>
<sv label="回复" *ngIf="item.replyVOList">
<div>{{item.replyVOList}} </div>
<div>{{item.feedbackInfo}} </div>
</sv>
</sv>
<sv *ngIf="mybidDetailInfo.length == 0"label="异常反馈" >
<div>暂无反馈信息 </div>
</sv>
<!-- <sv label="异常反馈">
<p *ngFor="let data of i?.mybidDetailInfo; let index = index">
<label *ngIf="data?.paymentStatusLabel == '已支付'">
<span>{{data?.expenseName}}</span>
<span>{{ data.price | number: '0.2-2' }}</span>
</label>
</p>
</sv> -->
</sv-container>
<div>
<sf

View File

@ -4,7 +4,7 @@
* @Author : Shiming
* @Date : 2022-03-10 14:50:45
* @LastEditors : Shiming
* @LastEditTime : 2022-03-10 15:09:51
* @LastEditTime : 2022-05-12 17:54:15
* @FilePath : \\tms-obc-web\\src\\app\\routes\\partner\\rebate-management\\model\\abnormal-feedback\\abnormal-feedback.component.ts
* Copyright (C) 2022 huzhenhong. All rights reserved.
*/
@ -24,17 +24,30 @@ export class ParterRebateManageMenAbnormalFeedbackComponent implements OnInit {
@ViewChild('sf', { static: false })
sf!: SFComponent;
i!: any;
mybidDetailInfo: any = [];
data = [{ name1: 1111 }];
constructor(public service: RebateManagementService, public shipperservice: ShipperBaseService, public modalRef: NzModalRef) {}
ngOnInit() {
this.initSF();
this.initData();
}
initData() {
if (this.i) {
console.log(this.i);
this.service
.request(this.service.$api_get_getExceptionMessage, { partnerId: this.i?.partnerId, month: this.i.month, year: this.i.year })
.subscribe(res => {
console.log(res);
this.mybidDetailInfo = res;
});
}
}
initSF() {
this.schema = {
properties: {
name3: {
feedbackInfo: {
type: 'string',
title: '回复',
maxLength: 50,
@ -54,6 +67,21 @@ export class ParterRebateManageMenAbnormalFeedbackComponent implements OnInit {
};
}
close() {
this.modalRef.destroy();
if (!this.sf.valid) {
this.service.msgSrv.error('请填写必填项!');
return;
}
let params = {
partnerId: this.i?.partnerId,
month: this.i.month,
year: this.i.year,
...this.sf.value
};
this.service.request(this.service.$api_get_partnerIncomeExceptionAdd,params).subscribe((res) => {
if(res) {
this.service.msgSrv.success('保存成功!');
this.modalRef.destroy();
}
})
}
}

View File

@ -23,7 +23,7 @@
<st
#st
[bordered]="true"
[data]="service.$api_get_listCompliancePage"
[data]="service.$api_get_partnerIncomeDetail"
[columns]="columns"
[req]="{ method: 'POST', allInBody: true, reName: { pi: 'pageIndex', ps: 'pageSize' }, params: reqParams }"
[res]="{ reName: { list: 'data.records', total: 'data.total' } }"

View File

@ -21,6 +21,7 @@ export class ParterRebateManageMenRecordDetailComponent implements OnInit {
spuStatus = '1';
size: NzButtonSize = 'large';
_$expand = false;
record: any;
data = [{ name1: 1111 }];
constructor(public service: RebateManagementService, public shipperservice: ShipperBaseService, public modalRef: NzModalRef) {}
/**
@ -43,10 +44,13 @@ export class ParterRebateManageMenRecordDetailComponent implements OnInit {
const params: any = Object.assign({}, this.sf?.value || {});
delete params._$expand;
return {
partnerId: this.record.partnerId,
...params
};
}
ngOnInit() {
console.log(this.record);
this.initSF();
this.initST();
}
@ -54,7 +58,7 @@ export class ParterRebateManageMenRecordDetailComponent implements OnInit {
initSF() {
this.schema = {
properties: {
enterpriseInfoId: {
ltdId: {
type: 'string',
title: '网络货运人',
ui: {
@ -68,18 +72,27 @@ export class ParterRebateManageMenRecordDetailComponent implements OnInit {
}
}
},
paymentStatus: {
bankType: {
title: '银行类型',
type: 'string',
ui: {
widget: 'dict-select',
params: { dictKey: 'overall:payment:status' },
containsAllLabel: true,
change: (value: any) => {
console.log(value);
this.st.reload();
enum: [
{
label: '全部',
value: ''
},
{
label: '平安银行',
value: '1'
},
{
label: '浦发银行',
value: '2'
}
} as SFSelectWidgetSchema
],
ui: {
widget: 'select',
containsAllLabel: true
}
}
}
};
@ -93,6 +106,10 @@ export class ParterRebateManageMenRecordDetailComponent implements OnInit {
initST() {
this.columns = [
{
title: '网络货运人',
index: 'billCode'
},
{
title: '订单号',
index: 'billCode'
@ -106,7 +123,7 @@ export class ParterRebateManageMenRecordDetailComponent implements OnInit {
index: 'name1'
},
{
title: '预估返佣金额(元)',
title: '返佣金额(元)',
index: 'name1'
},
{
@ -118,27 +135,11 @@ export class ParterRebateManageMenRecordDetailComponent implements OnInit {
index: 'name1'
},
{
title: '网络货运人',
title: '银行类型',
index: 'name1'
},
{
title: '销售渠道',
index: 'name1'
},
{
title: '合伙人名称',
index: 'name1'
},
{
title: '合伙人等级',
index: 'name1'
},
{
title: '管理费比例',
index: 'name1'
},
{
title: '固定结算费率',
title: '虚拟账户',
index: 'name1'
},
{

View File

@ -4,7 +4,7 @@
* @Author : Shiming
* @Date : 2022-03-10 11:19:00
* @LastEditors : Shiming
* @LastEditTime : 2022-04-25 19:23:25
* @LastEditTime : 2022-05-12 15:36:23
* @FilePath : \\tms-obc-web\\src\\app\\routes\\partner\\rebate-management\\services\\rebate-management.service.ts
* Copyright (C) 2022 huzhenhong. All rights reserved.
*/
@ -12,7 +12,7 @@ import { Injectable, Injector } from '@angular/core';
import { BaseService } from '@shared';
@Injectable({
providedIn: 'root',
providedIn: 'root'
})
export class RebateManagementService extends BaseService {
// 查询规则抽查列表
@ -24,17 +24,26 @@ export class RebateManagementService extends BaseService {
// 启用/禁用返佣配置
public $api_set_updateRebateConfig = '/api/mdc/rebateConfig/updateRebateConfig';
// 运营端查询合伙人返佣
public $api_get_getIncomeByBillpage = '/api/bpc/partnerIncomeHead/getIncomeByBillpage';
// 获取返佣模板信息
public $api_get_getPartnerRebateConfigInfo = '/api/mdc/rebateConfig/getPartnerRebateConfigInfo';
// 合伙人管理/返佣管理/返佣明细
public $api_get_searchPageList= '/api/fcc/billPaymentApplicationOBC/list/searchPageList';
public $api_get_searchPageList = '/api/fcc/billPaymentApplicationOBC/list/searchPageList';
// 合伙人管理/返佣管理/退款返佣明细
public $api_get_searchRefundPageList= '/api/fcc/billPaymentApplicationOBC/list/searchRefundPageList';
  // 查询合伙人信息-分页
public $api_get_partner_page = '/api/mdc/partner/list/page';
public $api_get_searchRefundPageList = '/api/fcc/billPaymentApplicationOBC/list/searchRefundPageList'; // 查询合伙人信息-分页
public $api_get_partner_page = '/api/mdc/partner/list/page';
// 查询查询返佣记录列表-分页
public $api_get_partnerIncomeHead = '/api/fcc/partnerIncomeHead/list/rebate';
// 查询返佣记录明细
public $api_get_partnerIncomeDetail = '/api/fcc/partnerIncomeDetail/rebate/detail';
// 导出返佣记录明细
public $api_get_partnerIncomeHead_export = '/api/fcc/partnerIncomeDetail/rebate/detail/export';
// 根据合伙人id、年、月 查询异常反馈信息(反馈异常查下)
public $api_get_getExceptionMessage = '/api/fcc/partnerIncomeDetailException/getExceptionMessage';
// 保存合伙人收益账单详情-异常反馈表(反馈异常提交)
public $api_get_partnerIncomeExceptionAdd = '/api/fcc/partnerIncomeDetailException/partnerIncomeExceptionAdd';
constructor(public injector: Injector) {
super(injector);
}

View File

@ -4,8 +4,8 @@
* @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
* @LastEditTime : 2022-05-11 15:06:17
* @FilePath : \\tms-obc-web\\src\\app\\routes\\partner\\recorded\\components\\detail\\detail.component.html
* Copyright (C) 2022 huzhenhong. All rights reserved.
-->
<page-header-wrapper [title]="'入账详情'" [logo]="logo" [action]="action">
@ -40,7 +40,7 @@
{{formData?.entryNumber}}
</se>
<se label="银行类型">
{{formData?.bankName}}
{{formData?.bankType}}
</se>
<se label="虚拟账户">
{{formData?.fictitiousAccount}}
@ -58,7 +58,10 @@
{{formData?.recordedAmount | currency}}
</se>
<se label="入账状态">
{{formData?.stsLabel}}
<span *ngIf="formData?.sts == '1'">待审核</span>
<span *ngIf="formData?.sts == '2'">待复核</span>
<span *ngIf="formData?.sts == '3'">已入账</span>
<span *ngIf="formData?.sts == '4'">已驳回</span>
</se>
<se label="发票图片">
<img *ngIf="formData?.invoiceUrl" nz-image width="100px" height="100px" [nzSrc]="formData?.invoiceUrl" alt="" />

View File

@ -3,7 +3,6 @@ import { ActivatedRoute } from '@angular/router';
import { NzModalService } from 'ng-zorro-antd/modal';
import { RecordedService } from '../../services/recorded.service';
@Component({
selector: 'app-partner-recored-detail',
templateUrl: './detail.component.html',
@ -21,52 +20,75 @@ export class PartnerRecordedDetailComponent implements OnInit {
this.getRecordedDetail(this.id);
}
ngOnInit(): void { }
ngOnInit(): void {}
getRecordedDetail(id: string) {
this.service.request(this.service.$api_get_recorded_record_detail, { id }).subscribe(res => {
if (res) {
this.formData = res;
}
});
this.service.request(this.service.$api_get_getPartnerInvoiceEntryDetail, { id }).subscribe(res => {
if (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';
// }
console.log(res);
// submitTime creattime
let isEnd = false;
if (res.reAuditTime) {
isEnd = true;
if (res.sts === '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.reAuditTime) {
if (res.refundStatus === '4') {
isEnd = true;
this.timeLineData.push({
time: res.reAuditTime,
value: `拒绝提现<br/>操作人员:${res.handlerUserIdLabel}`,
color: 'red'
});
} else {
this.timeLineData.push({
time: res.reAuditTime,
value: `审核通过<br/>操作人员:${res.handlerUserIdLabel}`,
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';
}
}
});
}
@ -87,18 +109,28 @@ export class PartnerRecordedDetailComponent implements OnInit {
this.service.msgSrv.warning('请填写拒绝原因 ');
return;
}
this.audit({ ids: params, rejectReason: this.msg, sts: '3' }, () => {
modal.destroy(true);
}, '审核拒绝成功');
this.audit(
{ ids: params, rejectReason: this.msg, sts: '3' },
() => {
modal.destroy(true);
},
'审核拒绝成功'
);
}
},
{
label: '通过',
type: 'primary',
onClick: () => {
this.audit({ ids: params, rejectReason: this.msg, sts: this.formData?.sts === '0' ? 1 : 2 }, () => {
modal.destroy(true);
}, `${this.formData?.sts === '1' ? '审核' : '复审'}通过成功`);
console.log(this.formData?.sts);
this.audit(
{ ids: params, rejectReason: this.msg, sts: this.formData?.sts === '0' ? 1 : 2 },
() => {
modal.destroy(true);
},
`${this.formData?.sts === '1' ? '审核' : '复审'}通过成功`
);
}
}
]
@ -117,13 +149,11 @@ export class PartnerRecordedDetailComponent implements OnInit {
* 审核
*/
audit(params: any, callback: Function, msg = '成功') {
this.service
.request(this.service.$api_audit_recored, ...params)
.subscribe(res => {
if (res) {
this.service.msgSrv.success(msg);
callback();
}
});
this.service.request(this.service.$api_audit_recored, {...params}).subscribe(res => {
if (res) {
this.service.msgSrv.success(msg);
callback();
}
});
}
}

View File

@ -1,16 +1,29 @@
<!--
* @Description :
* @Version : 1.0
* @Author : Shiming
* @Date : 2022-04-29 17:28:23
* @LastEditors : Shiming
* @LastEditTime : 2022-05-11 14:25:14
* @FilePath : \\tms-obc-web\\src\\app\\routes\\partner\\recorded\\components\\record\\record.component.html
* Copyright (C) 2022 huzhenhong. All rights reserved.
-->
<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>
<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">
<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" (click)="search()">查询</button>
<button nz-button (click)="resetSF()">重置</button>
<button nz-button acl [acl-ability]="['RECORDED-LIST-export']"> 导出</button>
<button nz-button acl [acl-ability]="['RECORDED-LIST-export']"> 导出</button>
<button nz-button nzType="link" (click)="expandToggle()">
{{ !_$expand ? '展开' : '收起' }}
<i nz-icon [nzType]="!_$expand ? 'down' : 'up'"></i>
@ -21,7 +34,7 @@
<nz-card class="content-box" nzBordered>
<nz-tabset [nzTabBarExtraContent]="extraTemplate">
<nz-tab nzTitle="全部" (nzClick)="changeRefundStatus()"></nz-tab>
<nz-tab nzTitle="全部" (nzClick)="changeRefundStatus('0')"></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>
@ -29,37 +42,55 @@
</nz-tabset>
<ng-template #extraTemplate>
<div class="d-flex align-items-center ">
<div class="d-flex align-items-center">
<div class="mr-md">
已选择
<strong class="text-red">{{ selectedRows.length }}</strong> 条数据,累计入账 <strong class="text-red">{{
totalCallNo }}</strong>
<strong class="text-red">{{ selectedRows.length }}</strong> 条数据,累计入账 <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)" acl [acl-ability]="['RECORDED-LIST-audit']">审核</button>
<button nz-button (click)="this.auditAction(null)" acl [acl-ability]="['RECORDED-LIST-audit']">审核</button>
</div>
</ng-template>
<div class="table-content">
<st #st [data]="service.$api_get_recorded_page" [columns]="columns"
[req]="{ method: 'POST', allInBody: true,process: beforeReq}" [loading]="service.http.loading"
[scroll]="{ x:'1200px' }" (change)="stChange($event)"
<st
#st
[data]="service.$api_get_recorded_page"
[columns]="columns"
[req]="{ method: 'POST', allInBody: true, 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] }">
[page]="{ show: true, pageSizes: [10, 20, 50, 100, 200, 500] }"
>
<ng-template st-row="bankCardNumber" let-item let-index="index" let-column="column">
{{ item.bankName }} <br> {{ item.bankCardNumber }}
{{ item.bankName }} <br />
{{ item.bankCardNumber }}
</ng-template>
<ng-template st-row="sts" let-item let-index="index" let-column="column">
<div *ngIf="item.sts == '0'">待初审</div>
<div *ngIf="item.sts == '1'">待复核</div>
<div *ngIf="item.sts == '2'">已入账</div>
<div *ngIf="item.sts == '3'">已拒绝</div>
</ng-template>
</st>
<div class=" text-md" *ngIf="st?.list?.length !== 0 ">
<span class="mr-md">合伙人数:<label
class="text-red-dark font-weight-bold">{{totalInfo?.invoiceAmountSum}}</label></span>
<span class="mr-md">入账笔数:<label class="text-red-dark font-weight-bold">{{totalInfo?.count}}</label></span>
<span class="mr-md">开票金额:<label
class="text-red-dark font-weight-bold">{{totalInfo?.invoiceEntryNum}}</label></span>
<span class="mr-md">代缴个税:<label
class="text-red-dark font-weight-bold">{{totalInfo?.taxPersonalSum}}</label></span>
<span class="mr-md">入账金额:<label
class="text-red-dark font-weight-bold">{{totalInfo?.recordedAmountSum}}</label></span>
<div class="text-md" *ngIf="st?.list?.length !== 0">
<span class="mr-md"
>合伙人数:<label class="text-red-dark font-weight-bold">{{ totalInfo?.partnerNum }}</label></span
>
<span class="mr-md"
>入账笔数:<label class="text-red-dark font-weight-bold">{{ totalInfo?.invoiceEntryNum }}</label></span
>
<span class="mr-md"
>开票金额:<label class="text-red-dark font-weight-bold">{{ totalInfo?.invoiceAmountSum }}</label></span
>
<span class="mr-md"
>代缴个税:<label class="text-red-dark font-weight-bold">{{ totalInfo?.taxPersonalSum }}</label></span
>
<span class="mr-md"
>入账金额:<label class="text-red-dark font-weight-bold">{{ totalInfo?.recordedAmountSum }}</label></span
>
</div>
</div>
</nz-card>
@ -68,8 +99,13 @@
<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>
<textarea
nz-input
rows="3"
[(ngModel)]="msg"
placeholder="同意可以不用填写原因 ,拒绝必须说明原因"
style="width: 325px; margin-left: 14px"
></textarea>
</se>
</div>
</div>

View File

@ -8,7 +8,6 @@ import { FreightAccountService } from 'src/app/routes/financial-management/servi
import Big from 'src/app/shared/utils/deal-precision';
import { RecordedService } from '../../services/recorded.service';
@Component({
selector: 'app-partner-recorded-record',
templateUrl: './record.component.html',
@ -22,12 +21,12 @@ export class PartnerRecordedRecordComponent implements OnInit {
columns!: STColumn[];
searchSchema!: SFSchema;
totalInfo: any = {
invoiceAmountSum: 0,
invoiceEntryNum: 0,
partnerNum: 0,
recordedAmountSum: 0,
taxPersonalSum: 0
}
invoiceEntryNum: 0,
invoiceAmountSum: 0,
taxPersonalSum: 0,
recordedAmountSum: 0
};
_$expand = false;
@ -40,16 +39,20 @@ export class PartnerRecordedRecordComponent implements OnInit {
ltdId = ''; // 网络货运人
accountName = ''; // 账户名称
constructor(public service: RecordedService, private nzModalService: NzModalService,
private router: Router, public ar: ActivatedRoute, public shipperSrv: ShipperBaseService) {
constructor(
public service: RecordedService,
private nzModalService: NzModalService,
private router: Router,
public ar: ActivatedRoute,
public shipperSrv: ShipperBaseService
) {
this.ltdId = this.ar.snapshot.queryParams?.ltdId || '';
}
ngOnInit(): void {
this.searchSchema = this.initSF();
this.columns = this.initST();
this.getSummary()
}
beforeReq = (requestOptions: STRequestOptions) => {
@ -60,7 +63,7 @@ export class PartnerRecordedRecordComponent implements OnInit {
start: this.sf?.value.createTime?.[0] || '',
end: this.sf?.value.createTime?.[1] || ''
},
refundStatus: this.refundStatus || null
sts: this.refundStatus || ''
});
}
delete requestOptions?.body?.expand;
@ -68,7 +71,7 @@ export class PartnerRecordedRecordComponent implements OnInit {
};
afterRes = (data: any[], rawData?: any) => {
// data = data.map(node => ({ ...node, disabled: node.sts !== '0' }));
data = data.map(node => ({ ...node, disabled: node.sts !== '0' }));
return data;
};
@ -81,16 +84,15 @@ export class PartnerRecordedRecordComponent implements OnInit {
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 => {
@ -98,17 +100,17 @@ export class PartnerRecordedRecordComponent implements OnInit {
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 => {
this.selectedRows.forEach(item => {
totalCallNo = new Big(this.totalCallNo).plus(item?.entryAmount).parse();
}));
});
this.totalCallNo = totalCallNo;
} else if (e.type === 'loaded') {
// 页面加载时勾选
(e?.loaded || []).forEach((r) => {
this.selectedRows.forEach((x) => {
(e?.loaded || []).forEach(r => {
this.selectedRows.forEach(x => {
if (x.id === r.id) {
r.checked = true;
}
@ -117,8 +119,27 @@ export class PartnerRecordedRecordComponent implements OnInit {
}
}
changeRefundStatus(status?: string) {
this.refundStatus = status || null;
changeRefundStatus(status: any) {
let value = '';
switch (status) {
case '0':
value = '';
break;
case '1':
value = '0';
break;
case '2':
value = '1';
break;
case '3':
value = '2';
break;
case '4':
value = '3';
break;
}
this.refundStatus = value || null;
this.st.load(1);
}
@ -146,10 +167,14 @@ export class PartnerRecordedRecordComponent implements OnInit {
this.service.msgSrv.warning('请填写拒绝原因 ');
return;
}
this.audit({ ids: params, rejectReason: this.msg, sts: '3' }, () => {
modal.destroy();
this.st.load(1);
}, '审核拒绝成功');
this.audit(
{ ids: params, rejectReason: this.msg, sts: '3' },
() => {
modal.destroy();
this.st.load(1);
},
'审核拒绝成功'
);
// this.service
// .request(this.service.$api_disagree_recorded, {
// id: params,
@ -168,10 +193,14 @@ export class PartnerRecordedRecordComponent implements OnInit {
label: '通过',
type: 'primary',
onClick: () => {
this.audit({ ids: params, rejectReason: this.msg, sts: '1' }, () => {
modal.destroy();
this.st.load(1);
}, '审核通过成功');
this.audit(
{ ids: params, rejectReason: this.msg, sts: '1' },
() => {
modal.destroy();
this.st.load(1);
},
'审核通过成功'
);
}
}
]
@ -230,22 +259,22 @@ export class PartnerRecordedRecordComponent implements OnInit {
placeholder: '请输入'
}
},
sts: {
type: 'string',
title: '入账状态',
default: '',
enum: [
{ label: '全部', value: '' },
{ label: '待初审', value: '0' },
{ label: '待复核', value: '1' },
{ label: '已入账', value: '2' },
{ label: '已拒绝', value: '3' },
],
ui: {
widget: 'select',
placeholder: '请选择'
}
},
// sts: {
// type: 'string',
// title: '入账状态',
// default: '',
// enum: [
// { label: '全部', value: '' },
// { label: '待初审', value: '0' },
// { label: '待复核', value: '1' },
// { label: '已入账', value: '2' },
// { label: '已拒绝', value: '3' },
// ],
// ui: {
// widget: 'select',
// placeholder: '请选择'
// }
// },
ltdId: {
type: 'string',
title: '网络货运人',
@ -254,7 +283,7 @@ export class PartnerRecordedRecordComponent implements OnInit {
widget: 'select',
placeholder: '请选择',
allowClear: true,
asyncData: () => this.shipperSrv.getNetworkFreightForwarder({}, true),
asyncData: () => this.shipperSrv.getNetworkFreightForwarder({}, true)
}
},
submitTime: {
@ -269,7 +298,7 @@ export class PartnerRecordedRecordComponent implements OnInit {
expand: (value: boolean) => value
}
} as SFDateWidgetSchema
},
}
}
};
}
@ -283,11 +312,11 @@ export class PartnerRecordedRecordComponent implements OnInit {
{ title: '网络货运人', index: 'ltdName', width: 220, className: 'text-center' },
{
title: '开票金额',
index: 'amount',
index: 'invoiceAmount',
width: 150,
type: 'widget',
className: 'text-right',
widget: { type: 'currency-chy', params: ({ record }) => ({ value: record.amount }) }
widget: { type: 'currency-chy', params: ({ record }) => ({ value: record.invoiceAmount }) }
},
{
title: '代缴个税',
@ -295,7 +324,7 @@ export class PartnerRecordedRecordComponent implements OnInit {
width: 150,
type: 'widget',
className: 'text-right',
widget: { type: 'currency-chy', params: ({ record }) => ({ value: record.amount }) }
widget: { type: 'currency-chy', params: ({ record }) => ({ value: record.taxPersonal }) }
},
{
title: '入账金额',
@ -303,11 +332,11 @@ export class PartnerRecordedRecordComponent implements OnInit {
width: 150,
type: 'widget',
className: 'text-right',
widget: { type: 'currency-chy', params: ({ record }) => ({ value: record.amount }) }
widget: { type: 'currency-chy', params: ({ record }) => ({ value: record.entryAmount }) }
},
{ title: '提交时间', index: 'submitTime', width: 180, className: 'text-center' },
{ title: '入账状态', index: 'stsLabel', width: 120, className: 'text-center' },
{ title: '入账状态', render: 'sts', width: 120, className: 'text-center' },
{
title: '操作',
fixed: 'right',
@ -336,17 +365,15 @@ export class PartnerRecordedRecordComponent implements OnInit {
}
/**
* 审核
*/
* 审核
*/
audit(params: any, callback: Function, msg = '成功') {
this.service
.request(this.service.$api_audit_recored, { ...params })
.subscribe(res => {
if (res) {
this.service.msgSrv.success(msg);
callback();
}
});
this.service.request(this.service.$api_audit_recored, { ...params }).subscribe(res => {
if (res) {
this.service.msgSrv.success(msg);
callback();
}
});
}
search() {
@ -361,6 +388,6 @@ export class PartnerRecordedRecordComponent implements OnInit {
if (res) {
this.totalInfo = res;
}
})
});
}
}

View File

@ -4,7 +4,7 @@
* @Author : Shiming
* @Date : 2022-04-21 13:49:22
* @LastEditors : Shiming
* @LastEditTime : 2022-04-25 11:11:58
* @LastEditTime : 2022-05-12 15:02:19
* @FilePath : \\tms-obc-web\\src\\app\\routes\\partner\\recorded\\services\\recorded.service.ts
* Copyright (C) 2022 huzhenhong. All rights reserved.
*/
@ -22,6 +22,7 @@ export class RecordedService extends BaseService {
$api_agree_recorded = ``; // 同意审核
$api_audit_recored = `/api/bpc/partnerInvoiceEntry/oprationAudit`; // 审核单据
$api_get_list_summary = `/api/bpc/partnerInvoiceEntry/invoiceEntrySummary`; // 每页统计
$api_get_getPartnerInvoiceEntryDetail = `/api/bpc/partnerInvoiceEntry/getPartnerInvoiceEntryDetail`; // 获取合伙人发票入账明细
constructor(public injector: Injector) {
super(injector);
}

View File

@ -9,6 +9,6 @@ const COMPONENTS: any = [DashboardComponent];
const NOTROUTECOMPONENTS: any = [];
@NgModule({
declarations: [...COMPONENTS, ...NOTROUTECOMPONENTS],
imports: [CommonModule, RegulatoryDataRoutingModule, SharedModule, SHARED_G2_MODULES]
imports: [CommonModule, RegulatoryDataRoutingModule, SharedModule, ...SHARED_G2_MODULES]
})
export class RegulatoryDataModule {}

View File

@ -83,11 +83,6 @@ const routes: Routes = [
]
},
// passport
{
path: 'agreement',
component: OrderAgreementComponent,
data: { title: '协议', titleI18n: 'app.login.agreement' }
},
{ path: '', loadChildren: () => import('./passport/passport.module').then(m => m.PassportModule) },
{ path: 'exception', loadChildren: () => import('./exception/exception.module').then(m => m.ExceptionModule) },
// 单页不包裹Layout

View File

@ -1,16 +1,23 @@
import { NgModule, Type } from '@angular/core';
import { SharedModule } from '@shared';
import { BasicModuleModule, SharedModule, STWidgetModule } from '@shared';
// dashboard pages
import { DashboardComponent } from './dashboard/dashboard.component';
import { RouteRoutingModule } from './routes-routing.module';
import { BasicTableComponent } from './commom/components/basic-table/basic-table.component';
import { LayoutModule } from '../layout/layout.module';
import { GlobalConfigModule } from '../global-config.module';
const COMPONENTS = [DashboardComponent, BasicTableComponent];
const COMPONENTS_NOROUNT: Array<Type<void>> = [];
@NgModule({
imports: [SharedModule, RouteRoutingModule],
imports: [
LayoutModule,
BasicModuleModule,
GlobalConfigModule.forRoot(),
RouteRoutingModule
],
declarations: [...COMPONENTS, ...COMPONENTS_NOROUNT],
entryComponents: COMPONENTS_NOROUNT
})

View File

@ -98,7 +98,7 @@
</ng-template>
<ng-template #tpl>
<span style="font-size: 14px;"> 国家法规及行政命令禁限运货物不能托运
<a target="_blank" [queryParams]="{ type: 15 }" [routerLink]="['/agreement']">《禁运物品说明》</a>
<a target="_blank" [queryParams]="{ type: 15 }" [routerLink]="['/passport/agreement']">《禁运物品说明》</a>
</span>
</ng-template>
</sf>

View File

@ -219,13 +219,23 @@ export class SupplyManagementBulkPublishComponent implements OnInit {
// }
}
},
goodsName: {
type: 'string',
title: '货物名称',
ui: {
// hidden: true,
// visibleIf: {
// goodsTypeName: (value: any) => value && value !== '其它'
// }
}
},
goodsTypeId: {
type: 'string',
title: '货物类型',
title: '',
ui: {
widget: 'select',
placeholder: '请选择',
errors: { required: '请选择货物类型' },
errors: { required: '请选择货物名称' },
asyncData: () =>
this.shipperSrv.loadConfigByKey('goods.name.config.type').pipe(
map((data: any) => {
@ -247,47 +257,38 @@ export class SupplyManagementBulkPublishComponent implements OnInit {
hidden: true
}
},
goodsNameId: {
type: 'string',
title: '',
ui: {
widget: 'select',
placeholder: '请选择',
errors: { required: '请填写货物类型' },
change: (value: any, data: any) => {
this.sf3.setValue('/goodsName', data.label);
},
visibleIf: {
goodsTypeName: (value: any) => value && value !== '其它'
}
}
},
goodsName: {
type: 'string',
title: '',
ui: {
hidden: true,
visibleIf: {
goodsTypeName: (value: any) => value && value !== '其它'
}
}
},
goodsName1: {
type: 'string',
title: '',
maxLength: 20,
ui: {
errors: { required: '请填写货物类型' },
visibleIf: {
goodsTypeName: (value: any) => value && value === '其它'
},
blur: (value: any) => {
this.checkGoodsName();
}
}
}
// goodsName1: {
// type: 'string',
// title: '',
// maxLength: 20,
// ui: {
// errors: { required: '请填写货物名称' },
// visibleIf: {
// goodsTypeName: (value: any) => value && value === '其它'
// },
// blur: (value: any) => {
// this.checkGoodsName();
// }
// }
// },
// goodsNameId: {
// type: 'string',
// title: '',
// ui: {
// widget: 'select',
// placeholder: '请选择',
// errors: { required: '请填写货物名称' },
// change: (value: any, data: any) => {
// // this.sf3.setValue('/goodsName', data.label);
// },
// visibleIf: {
// goodsTypeName: (value: any) => value && value !== '其它'
// }
// }
// },
},
required: ['goodsTypeId', 'goodsName', 'goodsNameId', 'goodsName1']
required: ['goodsTypeId', 'goodsName', ]
};
this.ui3 = {
'*': {
@ -708,10 +709,6 @@ export class SupplyManagementBulkPublishComponent implements OnInit {
const LoadingList = this.startInfo.concat(this.endInfo);
// 货物信息
const sf3Values = { ...this.sf3.value };
if (sf3Values.goodsTypeName === '其它') {
sf3Values.goodsName = sf3Values.goodsName1;
delete sf3Values.goodsName1;
}
if (this.sf4.value.carModel.includes('999')) {
this.sf4.value.carModel = ['999'];
}

View File

@ -235,13 +235,34 @@ export class SupplyManagementBulkReleasePublishComponent implements OnInit {
initSF3() {
this.schema3 = {
properties: {
goodsTypeId: {
goodsTips: {
type: 'string',
title: '',
ui: {
widget: 'custom',
class: 'goods_Tips_item',
// visibleIf: {
// goodsTypeName: (value: any) => value && value === '其它'
// }
}
},
goodsName: {
type: 'string',
title: '货物名称',
ui: {
// hidden: true,
// visibleIf: {
// goodsTypeName: (value: any) => value && value !== '其它'
// }
}
},
goodsTypeId: {
type: 'string',
title: '',
ui: {
widget: 'select',
placeholder: '请选择',
errors: { required: '请选择货物类型' },
errors: { required: '请选择货物名称' },
asyncData: () =>
this.shipperSrv.loadConfigByKey('goods.name.config.type').pipe(
map((data: any) => {
@ -263,44 +284,8 @@ export class SupplyManagementBulkReleasePublishComponent implements OnInit {
hidden: true
}
},
goodsNameId: {
type: 'string',
title: '',
ui: {
widget: 'select',
placeholder: '请选择',
errors: { required: '请填写货物名称' },
change: (value: any, data: any) => {
this.sf3.setValue('/goodsName', data.label);
},
visibleIf: {
goodsTypeName: (value: any) => value && value !== '其它'
}
}
},
goodsName: {
type: 'string',
title: '',
ui: {
hidden: true,
visibleIf: {
goodsTypeName: (value: any) => value && value !== '其它'
}
}
},
goodsName1: {
type: 'string',
title: '',
maxLength: 20,
ui: {
errors: { required: '请填写货物名称' },
visibleIf: {
goodsTypeName: (value: any) => value && value === '其它'
}
}
}
},
required: ['goodsTypeId', 'goodsName', 'goodsNameId','goodsName1']
required: ['goodsTypeId', 'goodsName', ]
};
this.ui3 = {
'*': {
@ -624,10 +609,6 @@ export class SupplyManagementBulkReleasePublishComponent implements OnInit {
// 货物信息
const sf3Values = { ...this.sf3.value };
if (sf3Values.goodsTypeName === '其它') {
sf3Values.goodsName = sf3Values.goodsName1;
delete sf3Values.goodsName1;
}
if (this.sf4.value.carModel.includes('999')) {
this.sf4.value.carModel = ['999']
}

View File

@ -146,7 +146,7 @@
</ng-template>
<ng-template #tpl>
<span style="font-size: 14px;"> 国家法规及行政命令禁限运货物不能托运
<a target="_blank" [queryParams]="{ type: 15 }" [routerLink]="['/agreement']">《禁运物品说明》</a>
<a target="_blank" [queryParams]="{ type: 15 }" [routerLink]="['/passport/agreement']">《禁运物品说明》</a>
</span>
</ng-template>
</sf>
@ -201,7 +201,7 @@
<nz-alert nzType="warning" [nzMessage]="template1" nzShowIcon></nz-alert>
</ng-template>
<ng-template #template1>①香港、澳门、台湾、西藏、新疆不予承保②单次运输保额仅限200万元以内③保险详细内容及注意事项请见<a target="_blank"
[queryParams]="{ type: 10 }" [routerLink]="['/agreement']">《保险告知函》</a></ng-template>
[queryParams]="{ type: 10 }" [routerLink]="['/passport/agreement']">《保险告知函》</a></ng-template>
</sf>
</div>
</div>

View File

@ -264,13 +264,23 @@ export class SupplyManagementOnecarPublishComponent implements OnInit {
// }
}
},
goodsName: {
type: 'string',
title: '货物名称',
ui: {
// hidden: true,
// visibleIf: {
// goodsTypeName: (value: any) => value && value !== '其它'
// }
}
},
goodsTypeId: {
type: 'string',
title: '货物类型',
title: '',
ui: {
widget: 'select',
placeholder: '请选择',
errors: { required: '请选择货物类型' },
errors: { required: '请选择货物名称' },
asyncData: () =>
this.shipperSrv.loadConfigByKey('goods.name.config.type').pipe(
map((data: any) => {
@ -292,47 +302,38 @@ export class SupplyManagementOnecarPublishComponent implements OnInit {
hidden: true
}
},
goodsNameId: {
type: 'string',
title: '',
ui: {
widget: 'select',
placeholder: '请选择',
errors: { required: '请填写货物类型' },
change: (_value: any, data: any) => {
this.sf3.setValue('/goodsName', data.label);
},
visibleIf: {
goodsTypeName: (value: any) => value && value !== '其它'
}
}
},
goodsName: {
type: 'string',
title: '',
ui: {
hidden: true,
visibleIf: {
goodsTypeName: (value: any) => value && value !== '其它'
}
}
},
goodsName1: {
type: 'string',
title: '',
maxLength: 20,
ui: {
errors: { required: '请填写货物类型' },
visibleIf: {
goodsTypeName: (value: any) => value && value === '其它'
},
blur: (value: any) => {
this.checkGoodsName();
}
}
}
// goodsName1: {
// type: 'string',
// title: '',
// maxLength: 20,
// ui: {
// errors: { required: '请填写货物名称' },
// visibleIf: {
// goodsTypeName: (value: any) => value && value === '其它'
// },
// blur: (value: any) => {
// this.checkGoodsName();
// }
// }
// },
// goodsNameId: {
// type: 'string',
// title: '',
// ui: {
// widget: 'select',
// placeholder: '请选择',
// errors: { required: '请填写货物名称' },
// change: (value: any, data: any) => {
// // this.sf3.setValue('/goodsName', data.label);
// },
// visibleIf: {
// goodsTypeName: (value: any) => value && value !== '其它'
// }
// }
// },
},
required: ['goodsTypeId', 'goodsName', 'goodsNameId', 'goodsName1']
required: ['goodsTypeId', 'goodsName', ]
};
this.ui3 = {
'*': {
@ -1013,10 +1014,8 @@ export class SupplyManagementOnecarPublishComponent implements OnInit {
// 货物信息
const sf3Values = { ...this.sf3.value };
if (sf3Values.goodsTypeName === '其它') {
sf3Values.goodsName = sf3Values.goodsName1;
delete sf3Values.goodsName1;
}
console.log(sf3Values);
if (this.sf4.value.carModel.includes('999')) {
this.sf4.value.carModel = ['999'];
}

View File

@ -145,7 +145,7 @@
</ng-template>
<ng-template #tpl>
<span style="font-size: 14px;"> 国家法规及行政命令禁限运货物不能托运
<a target="_blank" [queryParams]="{ type: 15 }" [routerLink]="['/agreement']">《禁运物品说明》</a>
<a target="_blank" [queryParams]="{ type: 15 }" [routerLink]="['/passport/agreement']">《禁运物品说明》</a>
</span>
</ng-template>
</sf>
@ -200,7 +200,7 @@
<nz-alert nzType="warning" [nzMessage]="template1" nzShowIcon></nz-alert>
</ng-template>
<ng-template #template1>①香港、澳门、台湾、西藏、新疆不予承保②单次运输保额仅限200万元以内③保险详细内容及注意事项请见<a target="_blank"
[queryParams]="{ type: 10 }" [routerLink]="['/agreement']">《保险告知函》</a></ng-template>
[queryParams]="{ type: 10 }" [routerLink]="['/passport/agreement']">《保险告知函》</a></ng-template>
</sf>
</div>
</div>

View File

@ -251,13 +251,23 @@ export class SupplyManagementReleasePublishComponent implements OnInit {
// }
}
},
goodsName: {
type: 'string',
title: '货物名称',
ui: {
// hidden: true,
// visibleIf: {
// goodsTypeName: (value: any) => value && value !== '其它'
// }
}
},
goodsTypeId: {
type: 'string',
title: '货物类型',
title: '',
ui: {
widget: 'select',
placeholder: '请选择',
errors: { required: '请选择货物类型' },
errors: { required: '请选择货物名称' },
asyncData: () =>
this.shipperSrv.loadConfigByKey('goods.name.config.type').pipe(
map((data: any) => {
@ -279,47 +289,38 @@ export class SupplyManagementReleasePublishComponent implements OnInit {
hidden: true
}
},
goodsNameId: {
type: 'string',
title: '',
ui: {
widget: 'select',
placeholder: '请选择',
errors: { required: '请填写货物类型' },
change: (value: any, data: any) => {
this.sf3.setValue('/goodsName', data.label);
},
visibleIf: {
goodsTypeName: (value: any) => value && value !== '其它'
}
}
},
goodsName: {
type: 'string',
title: '',
ui: {
hidden: true,
visibleIf: {
goodsTypeName: (value: any) => value && value !== '其它'
}
}
},
goodsName1: {
type: 'string',
title: '',
maxLength: 20,
ui: {
errors: { required: '请填写货物类型' },
visibleIf: {
goodsTypeName: (value: any) => value && value === '其它'
},
blur: (value: any) => {
this.checkGoodsName();
}
}
}
// goodsName1: {
// type: 'string',
// title: '',
// maxLength: 20,
// ui: {
// errors: { required: '请填写货物名称' },
// visibleIf: {
// goodsTypeName: (value: any) => value && value === '其它'
// },
// blur: (value: any) => {
// this.checkGoodsName();
// }
// }
// },
// goodsNameId: {
// type: 'string',
// title: '',
// ui: {
// widget: 'select',
// placeholder: '请选择',
// errors: { required: '请填写货物名称' },
// change: (value: any, data: any) => {
// // this.sf3.setValue('/goodsName', data.label);
// },
// visibleIf: {
// goodsTypeName: (value: any) => value && value !== '其它'
// }
// }
// },
},
required: ['goodsTypeId', 'goodsName', 'goodsNameId', 'goodsName1']
required: ['goodsTypeId', 'goodsName', ]
};
this.ui3 = {
'*': {
@ -978,10 +979,6 @@ export class SupplyManagementReleasePublishComponent implements OnInit {
// 货物信息
const sf3Values = { ...this.sf3.value };
if (sf3Values.goodsTypeName === '其它') {
sf3Values.goodsName = sf3Values.goodsName1;
delete sf3Values.goodsName1;
}
if (this.sf4.value.carModel.includes('999')) {
this.sf4.value.carModel = ['999'];
}
@ -1020,19 +1017,18 @@ export class SupplyManagementReleasePublishComponent implements OnInit {
insurancePackagedGoods: this.sf4.value.insurancePackagedGoods,
goodsValue: this.sf4.value.goodsValue
};
console.log(params);
// const modalRef = this.modalService.create({
// nzTitle: '运输协议',
// nzContent: TranAgreementComponent,
// nzWidth: 900,
// nzFooter: null,
// nzComponentParams: { object: params, shipperName: this.shipperName, type: 'onecar' }
// });
// modalRef.afterClose.subscribe(result => {
// if (result) {
// this.submit(submitType, params);
// }
// });
const modalRef = this.modalService.create({
nzTitle: '运输协议',
nzContent: TranAgreementComponent,
nzWidth: 900,
nzFooter: null,
nzComponentParams: { object: params, shipperName: this.shipperName, type: 'onecar' }
});
modalRef.afterClose.subscribe(result => {
if (result) {
this.submit(submitType, params);
}
});
}
// 提交
submit(submitType?: string, params?: any): void {
@ -1287,7 +1283,7 @@ export class SupplyManagementReleasePublishComponent implements OnInit {
this.service.request(this.service.$api_checkGoodsName, name).subscribe(res => {
if (res === false) {
const modalRef = this.modalService.error({
nzTitle: '货物类型含有违禁词,请重新输入!',
nzTitle: '货物名称含有违禁词,请重新输入!',
});
modalRef.afterClose.subscribe(result => {
// this.sf3.setValue('/goodsName1', null);

View File

@ -19,10 +19,10 @@
<div class="box">
<se-container se-container="1">
<se label="角色权限" required [labelWidth]="120">
<app-cuc-menu #menu (changeData)="getData($event)" [type]="params.id === 0 ? 'add' : 'edit'" [roleId]="params.id" [appId]="params.appId"
[isAuthorityIdDTOList]="roleInfoData.authority || []"
[authorityAssistId]="roleInfoData.authorityAssistId || []" (changeIF)="changeIF($event)">
</app-cuc-menu>
<app-menu-tree #menu (changeData)="getData($event)" [type]="params.id === 0 ? 'add' : 'edit'" [roleId]="params.id"
[appId]="params.appId" [isAuthorityIdDTOList]="roleInfoData.authority || []"
[authorityAssistId]="roleInfoData.authorityAssistId || []" (changeIF)="changeIF($event)">
</app-menu-tree>
</se>
</se-container>
</div>

View File

@ -39,7 +39,7 @@
</div>
<button nz-button nzDanger [nzLoading]="service.http.loading" acl [acl-ability]="['TAX-COLLECT-search']"
(click)="openDrawer()">筛选</button>
<button nz-button nzDanger acl [acl-ability]="['TAX-COLLECT-export']"> 导出</button>
<button nz-button nzDanger (click)="exprot()" acl [acl-ability]="['TAX-COLLECT-export']"> 导出</button>
<button nz-button nz-dropdown [nzDropdownMenu]="menu" nzPlacement="bottomLeft">
更多<i nz-icon nzType="down" nzTheme="outline"></i></button>
<nz-dropdown-menu #menu="nzDropdownMenu">

View File

@ -245,7 +245,16 @@ export class TaxManagementIndividualCollectComponent extends BasicTableComponent
* @param params 更新数据
*/
uploadSetting() {
this.service.request(this.service.$api_get_updateData).subscribe((res: any) => {
let params: any;
if (this.selectedRows.length === 0) {
params =[]
} else{
params =[]
this.selectedRows.forEach(item => {
params.push(item.id);
});
}
this.service.request(this.service.$api_get_updateData,params).subscribe((res: any) => {
if (res) {
this.service.msgSrv.success('更新成功');
this.search();
@ -257,10 +266,8 @@ export class TaxManagementIndividualCollectComponent extends BasicTableComponent
this.st.load(1);
}
/**
* 异步导出
*/
export() {
this.service.exportStart(this.sf?.value, this.service.$api_async_export_order_reporting_list);
}
// 导出
exprot() {
this.service.exportStart({ ...this.reqParams, pageSize: -1 }, this.service.$api_taxSummary_export);
}
}

View File

@ -26,8 +26,8 @@
</div>
<!-- 数据列表 -->
<st #st [scroll]="{ x: '1200px',y:scrollY }" [data]="service.$api_get_taxDeclaration" [columns]="columns"
[req]="{ params: reqParams }" [page]="{ }" [loading]="false">
<st #st [scroll]="{ x: '1200px', y: scrollY }" [data]="service.$api_get_taxDeclaration" [columns]="columns"
[req]="{ params: reqParams }" [page]="{}" [loading]="false" (change)="changeST($event)">
<ng-template st-row="orderStatus" let-item let-index="index">
<a (click)="viewAuditResult(item)" *ngIf="item?.billStatus === '2'">{{ item?.billStatusLabel }}</a>
<span *ngIf="item?.billStatus !== '2'">{{ item?.billStatusLabel }}</span>
@ -51,26 +51,17 @@
</div>
<button nz-button nzDanger [nzLoading]="service.http.loading" acl [acl-ability]="['TAX-DECLARE-search']"
(click)="openDrawer()">筛选</button>
<button nz-button nzDanger acl [acl-ability]="['TAX-DECLARE-export']"> 导出</button>
<button nz-button nzDanger (click)="exprot()" acl [acl-ability]="['TAX-DECLARE-export']"> 导出</button>
<button nz-button nz-dropdown [nzDropdownMenu]="menu" nzPlacement="bottomLeft">
更多<i nz-icon nzType="down" nzTheme="outline"></i></button>
<nz-dropdown-menu #menu="nzDropdownMenu">
<ul nz-menu>
<li nz-menu-item (click)="upload()" acl [acl-ability]="['TAX-DECLARE-declare']">
申报
</li>
<li nz-menu-item (click)="recall()" acl [acl-ability]="['TAX-DECLARE-change']">
更正
</li>
<li nz-menu-item (click)="uploadSetting()" acl [acl-ability]="['TAX-DECLARE-threshold']">
修改起征点
</li>
<li nz-menu-item (click)="resetData()" acl [acl-ability]="['TAX-DECLARE-resetData']">
更新数据
</li>
<li nz-menu-item (click)="upload()" acl [acl-ability]="['TAX-DECLARE-declare']"> 申报 </li>
<li nz-menu-item (click)="recall()" acl [acl-ability]="['TAX-DECLARE-change']"> 更正 </li>
<li nz-menu-item (click)="uploadSetting()" acl [acl-ability]="['TAX-DECLARE-threshold']"> 修改起征点 </li>
<li nz-menu-item (click)="resetData()" acl [acl-ability]="['TAX-DECLARE-resetData']"> 更新数据 </li>
</ul>
</nz-dropdown-menu>
</div>
</ng-template>

View File

@ -1,6 +1,6 @@
import { Component, OnInit, ViewChild } from '@angular/core';
import { ActivatedRoute, Router } from '@angular/router';
import { STColumn, STComponent, STData } from '@delon/abc/st';
import { STChange, STColumn, STComponent, STData } from '@delon/abc/st';
import { SFDateWidgetSchema } from '@delon/form';
import { SearchDrawerService } from '@shared';
import { NzModalService } from 'ng-zorro-antd/modal';
@ -26,6 +26,9 @@ export class TaxManagementIndividualDeclareComponent extends BasicTableComponent
selectedIndex = ''; //选择的项目
serviceTel = '';
isVisible: boolean = false;
checkedList: any[] = [];
// selectedRows:any[] =[];
constructor(
public service: TaxManagementService,
private router: Router,
@ -63,18 +66,6 @@ export class TaxManagementIndividualDeclareComponent extends BasicTableComponent
ngOnInit() {
this.initSF();
this.initST();
const object1: any = {};
const object2: any = {};
Object.defineProperty(object1, 'name', { writable: false, value: 'wang' });
Object.defineProperty(object2, 'xxoo', { writable: false, value: 'wang' });
console.log(object1);
console.log(object1.name);
console.log(object2);
console.log(object2.xxoo);
object1.name = 'ming';
object2.xxoo = 'ming';
console.log(object1);
console.log(object2);
}
/**
@ -110,13 +101,13 @@ export class TaxManagementIndividualDeclareComponent extends BasicTableComponent
}
},
isOvertime: {
overtime: {
title: '是否逾期',
type: 'string',
enum: [
{ value: '', label: '全部' },
{ value: false, label: '否' },
{ value: true, label: '是' }
{ value: '0', label: '否' },
{ value: '1', label: '是' }
],
ui: {
placeholder: '请选择',
@ -178,11 +169,11 @@ export class TaxManagementIndividualDeclareComponent extends BasicTableComponent
},
{
title: '是否逾期',
index: 'overdueStatus',
index: 'overtime',
className: 'text-center',
width: '120px',
type: 'enum',
enum: { false: '否', true: '是' }
enum: { '0': '否', '1': '是' }
},
{
title: '税款所属期起',
@ -202,7 +193,7 @@ export class TaxManagementIndividualDeclareComponent extends BasicTableComponent
{ title: '证件类型', index: 'sfzjlx', className: 'text-center', width: '200px' },
{ title: '证件号码', index: 'sfzjhm', className: 'text-center', width: '200px' },
{ title: '联系电话', index: 'lxdh', className: 'text-center', width: '200px' },
{ title: '国家(地区)', index: ' gjdq', className: 'text-center', width: '200px' },
{ title: '国家(地区)', index: 'gjdq', className: 'text-center', width: '200px' },
{ title: '所属行业', index: 'hy', className: 'text-center', width: '200px' },
{ title: '征收项目', index: 'zsxm', className: 'text-center', width: '200px' },
{ title: '征收品目', index: 'zsmp', className: 'text-center', width: '200px' },
@ -368,12 +359,13 @@ export class TaxManagementIndividualDeclareComponent extends BasicTableComponent
this.openWainingModal('请选择需要申报的数据');
return;
}
// this.service.request(this.service.$api_recall_reporting, { rows: this.selectedRows }).subscribe((res: any) => {
// if (res) {
// this.service.msgSrv.success('申报成功');
// this.search();
// }
// })
const ids = this.selectedRows.map(item => item?.id);
this.service.request(this.service.$api_declare_tax, ids).subscribe((res: any) => {
if (res) {
this.service.msgSrv.success('申报成功');
this.search();
}
})
}
/**
@ -381,14 +373,15 @@ export class TaxManagementIndividualDeclareComponent extends BasicTableComponent
* @param params 更新数据
*/
resetData() {
let params: any;
if (this.selectedRows.length === 0) {
this.openWainingModal('请选择需要更新的数据');
return;
params = []
} else {
params = []
this.selectedRows.forEach(item => {
params.push(item.id);
});
}
let params: any[] = [];
this.selectedRows.forEach(item => {
params.push(item.id);
});
this.service.request(this.service.$api_get_taxDeclaration_updateAll, params).subscribe((res: any) => {
if (res) {
this.service.msgSrv.success('更新成功');
@ -428,11 +421,9 @@ export class TaxManagementIndividualDeclareComponent extends BasicTableComponent
this.st.load(1);
}
/**
* 异步导出
*/
export() {
this.service.exportStart(this.sf?.value, this.service.$api_async_export_order_reporting_list);
// 导出
exprot() {
this.service.exportStart({ ...this.reqParams, pageSize: -1 }, this.service.$api_taxDeclaration_export);
}
openWainingModal(content: string, title = '提示') {
@ -442,8 +433,60 @@ export class TaxManagementIndividualDeclareComponent extends BasicTableComponent
nzContent: content
});
}
handleOK() {}
handleOK() { }
handleCancel() {
this.isVisible = false;
}
/**
*
* @param e
*/
changeST(e: STChange): void {
if (e?.type === 'checkbox') {
if (e?.checkbox!.length === 0) {
// 全选取消
this.st.list.forEach((item, index) => {
this.st.setRow(index, { checked: false });
})
this.checkedList = [];
} else {
// 取消选择
if (this.checkedList.length > e?.checkbox!.length) {
const item = this.checkedList.find(item => !item?.checked);
this.st.list?.forEach(((row, index) => {
if (row?.driverId === item?.driverId && row?.ltdId === item?.ltdId && row?.taxMonth === item?.taxMonth) {
this.st.setRow(index, { checked: false });
this.checkedList = this.checkedList.filter(_item => _item?.id !== row?.id);
}
}))
} else {
// 全选
const allChecked = this.st?.list.every(item => item.checked);
if (allChecked) {
this.st.list?.forEach((row, index) => {
const flag = this.checkedList.find(_item => _item.id === row?.id);
if (!flag) {
this.checkedList.push(row);
}
})
return;
}
// 单个新增选择
const list = e?.checkbox?.filter(item => !this.checkedList.some(_item => _item?.id === item.id));
list?.forEach(item => {
this.st.list?.forEach((row, index) => {
if (row?.driverId === item?.driverId && row?.ltdId === item?.ltdId && row?.taxMonth === item?.taxMonth) {
this.st.setRow(index, { checked: true });
const flag = this.checkedList.find(_item => _item.id === row?.id);
if (!flag) {
this.checkedList.push(row);
}
}
})
})
}
}
}
}
}

View File

@ -1,3 +1,13 @@
<!--
* @Description :
* @Version : 1.0
* @Author : Shiming
* @Date : 2022-05-06 15:31:19
* @LastEditors : Shiming
* @LastEditTime : 2022-05-11 21:04:42
* @FilePath : \\tms-obc-web\\src\\app\\routes\\tax-management\\components\\individual-income\\individual-income.component.html
* Copyright (C) 2022 huzhenhong. All rights reserved.
-->
<!-- <page-header-wrapper [title]="''"></page-header-wrapper>
<nz-card class="search-box">
<div nz-row nzGutter="8">
@ -39,7 +49,7 @@
</div>
<button nz-button nzDanger [nzLoading]="isLoading && st.loading" acl [acl-ability]="['TAX-INCOME-search']"
(click)="openDrawer()">筛选</button>
<button nz-button nzDanger acl [acl-ability]="['TAX-INCOME-export']"> 导出</button>
<button nz-button nzDanger (click)="exprot()" acl [acl-ability]="['TAX-INCOME-export']"> 导出</button>
<button nz-button nz-dropdown [nzDropdownMenu]="menu" nzPlacement="bottomLeft">
更多<i nz-icon nzType="down" nzTheme="outline"></i></button>
<nz-dropdown-menu #menu="nzDropdownMenu">
@ -63,11 +73,17 @@
</div>
</ng-template>
<nz-modal [(nzVisible)]="isVisible" [nzWidth]="600" [nzFooter]="nzModalFooterEvaluate" (nzOnOk)="handleOK()"
<nz-modal [(nzVisible)]="isVisible" [nzWidth]="600" [nzFooter]="nzModalFooterEvaluate"
(nzOnCancel)="handleCancel()">
<ng-container *nzModalContent>
<div> 司机姓名:张三/13812345678 </div>
<div *ngIf="oneStatus">
<div> 司机姓名:{{driverRecord?.xm}}/{{driverRecord.lxdh}} </div>
<div> 是否确认要将该司机的起征点同步调整为超过15万 </div>
</div>
<div *ngIf="!oneStatus">
<div> 已选择{{selectedRows.length}}个司机 </div>
<div> 是否确认要将该司机的起征点同步调整为超过15万 </div>
</div>
</ng-container>
<ng-template #nzModalFooterEvaluate>
<button nz-button nzType="default" (click)="handleCancel()">取消</button>

View File

@ -23,8 +23,10 @@ export class TaxManagementIndividualIncomeComponent extends BasicTableComponent
];
selectedIndex = '0'; //选择的项目
isVisible: boolean = false;
oneStatus: boolean = false;
selectedRows: any[] = [];
driverRecord!: any;
constructor(public service: TaxManagementService, public searchDrawerService: SearchDrawerService) {
super(searchDrawerService);
@ -287,11 +289,20 @@ export class TaxManagementIndividualIncomeComponent extends BasicTableComponent
* @param record 记录实例
*/
resetData() {
// if (this.selectedRows.length === 0) {
// this.openWainingModal('请选择需要更新的数据!');
// return;
// }
// this.isVisible = true;
if (this.selectedRows.length === 0) {
this.service.msgSrv.error('请选择明细!');
return;
}
if(this.selectedRows.length === 1) {
console.log(this.selectedRows);
this.oneStatus = true
this.driverRecord = this.selectedRows[0]
} else {
this.oneStatus = false
}
this.isVisible = true;
}
selectChange(item: any) {
@ -326,7 +337,16 @@ export class TaxManagementIndividualIncomeComponent extends BasicTableComponent
* @param params 更新数据
*/
uploadSetting() {
this.service.request(this.service.$api_update_individual_income_page).subscribe((res: any) => {
let params: any;
if (this.selectedRows.length === 0) {
params =[]
} else{
params =[]
this.selectedRows.forEach(item => {
params.push(item.id);
});
}
this.service.request(this.service.$api_update_individual_income_page, params).subscribe((res: any) => {
if (res) {
this.service.msgSrv.success('更新成功');
this.search();
@ -338,14 +358,23 @@ export class TaxManagementIndividualIncomeComponent extends BasicTableComponent
this.st.load(1);
}
/**
* 异步导出
*/
export() {
this.service.exportStart(this.sf?.value, this.service.$api_async_export_order_reporting_list);
}
// 导出
exprot() {
this.service.exportStart({ ...this.sfValue,declareStatus: this.selectedIndex, pageSize: -1 }, this.service.$api_taxIncome_export);
}
handleOK() {}
handleOK() {
let params: any = [];
if (this.selectedRows.length !== 0) {
this.selectedRows.forEach(item => {
params.push(item.id);
});
}
this.service.request(this.service.$api_fixThreshold, params).subscribe((res) => {
console.log(res);
})
}
handleCancel() {
this.isVisible = false;
}

View File

@ -312,7 +312,7 @@ export class TaxManagementInvoiceReportingComponent extends BasicTableComponent
* 异步导出
*/
export() {
this.service.exportStart(this.reqParams, this.service.$api_invoiceUpload_export);
this.service.exportStart({...this.reqParams, pageSize: -1 }, this.service.$api_invoiceUpload_export);
}
openWainingModal(content: string, title = '提示') {

View File

@ -20,33 +20,37 @@
<nz-card class="table-box">
<div class="tab_header">
<label class="page_title"> <label class="driver">|</label> 订单上报</label>
<nz-tabset [nzTabBarExtraContent]="extraTemplate" *ngIf="tabs.length>0">
<nz-tab *ngFor="let tab of tabs" [nzTitle]="tab.name" (nzSelect)="selectChange(tab)">
</nz-tab>
<nz-tabset [nzTabBarExtraContent]="extraTemplate" *ngIf="tabs.length > 0">
<nz-tab *ngFor="let tab of tabs" [nzTitle]="tab.name" (nzSelect)="selectChange(tab)"> </nz-tab>
</nz-tabset>
</div>
<!-- 数据列表 -->
<st #st [scroll]="{x:'1200px',y:scrollY}" [data]="service.$api_getTaxOrderPage_page" [columns]="columns"
[req]="{ params: reqParams }" [page]="{ }" [loading]="service.http.loading">
<st
#st
[scroll]="{ x: '1200px', y: scrollY }"
[data]="service.$api_getTaxOrderPage_page"
[columns]="columns"
[req]="{ params: reqParams }"
[page]="{}"
[loading]="service.http.loading"
>
<ng-template st-row="putStatus" let-item let-index="index">
<!-- <a (click)="viewAuditResult(item)" *ngIf="item?.billStatus === '2'">{{item?.billStatusLabel}}</a> -->
<span *ngIf="item?.putStatus == '0'">待上传</span>
<span *ngIf="item?.putStatus == '1'">已上传</span>
<span *ngIf="item?.putStatus == '3'">上传中</span>
<span *ngIf="item?.putStatus == '2'" style="color: red;" (click)="unnormal(item)">上传异常</span>
<span *ngIf="item?.putStatus == '2'" style="color: red" (click)="unnormal(item)">上传异常</span>
</ng-template>
<ng-template st-row="checkStatus" let-item let-index="index">
<!-- <a (click)="viewAuditResult(item)" *ngIf="item?.billStatus === '2'">{{item?.billStatusLabel}}</a> -->
<span *ngIf="item?.checkStatus == '0'">校验中</span>
<span *ngIf="item?.checkStatus == '1'">通过</span>
<!-- <span *ngIf="item?.checkStatus == '2'" style="color: red;" (click)="unnormal(item)">不通过</span> -->
<a *ngIf="item?.checkStatus == '2'" style="color: red;" (click)="viewResult(item)">不通过</a>
<a *ngIf="item?.checkStatus == '2'" style="color: red" (click)="viewResult(item)">不通过</a>
</ng-template>
<ng-template st-row="driverName" let-item let-index="index">
<div> {{ item?.driverName }}{{ item?.driverPhone ? "/" + item?.driverPhone : '' }} </div>
<div> {{ item?.driverName }}{{ item?.driverPhone ? '/' + item?.driverPhone : '' }} </div>
</ng-template>
<!-- <ng-template st-row="localValid" let-item let-index="index">
<a (click)="viewResult(item)" *ngIf="item?.billStatus === '2'">{{item?.billStatusLabel}}</a>
@ -55,33 +59,44 @@
<ng-template st-row="loadingPicture" let-item let-index="index">
<div class="imgBox">
<div *ngIf="item.loadingPicture">
<app-imagelist style="width: 60px" [imgList]="[item.loadingPicture]"> </app-imagelist>
<a (click)="viewPhoto([item.loadingPicture])" class="text-blue-dark" nzType="text" nz-button>查看</a>
<!-- <app-imagelist style="width: 60px" [imgList]="[item.loadingPicture]"> </app-imagelist> -->
</div>
</div>
</ng-template>
<ng-template st-row="unloadPicture" let-item let-index="index">
<div class="imgBox">
<div *ngIf="item.unloadPicture">
<app-imagelist style="width: 40px" [imgList]="[item.unloadPicture]"> </app-imagelist>
<a (click)="viewPhoto([item.unloadPicture])" class="text-blue-dark" nzType="text" nz-button>查看</a>
<!-- <app-imagelist style="width: 40px" [imgList]="[item.unloadPicture]"> </app-imagelist> -->
</div>
</div>
</ng-template>
<ng-template st-row="loadingLadingBill" let-item let-index="index">
<div class="imgBox">
<div *ngIf="item.loadingLadingBill">
<app-imagelist style="width: 40px" [imgList]="[item.loadingLadingBill]"> </app-imagelist>
<a (click)="viewPhoto([item.loadingLadingBill])" class="text-blue-dark" nzType="text" nz-button>查看</a>
<!-- <app-imagelist style="width: 40px" [imgList]="[item.loadingLadingBill]"> </app-imagelist> -->
</div>
</div>
</ng-template>
<ng-template st-row="goodsName" let-item let-index="index">
<div>{{ item.goodsName ? item.goodsName : '--' }} </div>
<div> {{ item.loadWeight ? item.loadWeight : '--' }}吨/{{ item.loadVolume ?item.loadVolume: '--' }}方 </div>
</ng-template>
<ng-template st-row="signatureForm" let-item let-index="index">
<div class="imgBox">
<div *ngIf="item.signatureForm">
<app-imagelist style="width: 40px" [imgList]="[item.signatureForm]"> </app-imagelist>
<a (click)="viewPhoto([item.signatureForm])" class="text-blue-dark" nzType="text" nz-button>查看</a>
<!-- <app-imagelist style="width: 40px" [imgList]="[item.signatureForm]"> </app-imagelist> -->
</div>
</div>
</ng-template>
<ng-template st-row="orderAmount" let-item let-index="index">
<div class="text-right">{{item?.orderAmount | currency }}</div>
<div class="text-right">{{ item?.orderAmount | currency }}</div>
</ng-template>
<ng-template st-row="wayAmount" let-item let-index="index">
<div class="text-right">{{ item?.wayAmount | currency }}</div>
</ng-template>
</st>
</nz-card>
@ -91,25 +106,19 @@
已选择
<strong class="text-red">{{ selectedRows.length }}</strong> 条数据
</div>
<button nz-button nzDanger [nzLoading]="isLoading && st.loading" acl [acl-ability]="['TAX-ORDERREPORT-search']"
(click)="openDrawer()">筛选</button>
<button nz-button nzDanger [nzLoading]="isLoading && st.loading" acl [acl-ability]="['TAX-ORDERREPORT-search']" (click)="openDrawer()"
>筛选</button
>
<button nz-button nzDanger acl [acl-ability]="['TAX-ORDERREPORT-export']"> 导出</button>
<button nz-button nz-dropdown [nzDropdownMenu]="menu" nzPlacement="bottomLeft">
更多<i nz-icon nzType="down" nzTheme="outline"></i></button>
更多<i nz-icon nzType="down" nzTheme="outline"></i
></button>
<nz-dropdown-menu #menu="nzDropdownMenu">
<ul nz-menu>
<li nz-menu-item (click)="upload()" acl [acl-ability]="['TAX-ORDERREPORT-upload']">
上传
</li>
<li nz-menu-item (click)="recall() " acl [acl-ability]="['TAX-ORDERREPORT-recall']">
撤回
</li>
<li nz-menu-item (click)="resetData()" acl [acl-ability]="['TAX-ORDERREPORT-resetData']">
更新数据
</li>
<li nz-menu-item (click)="uploadSetting()" acl [acl-ability]="['TAX-ORDERREPORT-uploadSetting']">
税务设置
</li>
<li nz-menu-item (click)="upload()" acl [acl-ability]="['TAX-ORDERREPORT-upload']"> 上传 </li>
<li nz-menu-item (click)="recall()" acl [acl-ability]="['TAX-ORDERREPORT-recall']"> 撤回 </li>
<li nz-menu-item (click)="resetData()" acl [acl-ability]="['TAX-ORDERREPORT-resetData']"> 更新数据 </li>
<li nz-menu-item (click)="uploadSetting()" acl [acl-ability]="['TAX-ORDERREPORT-uploadSetting']"> 税务设置 </li>
</ul>
</nz-dropdown-menu>
</div>

View File

@ -10,6 +10,8 @@ import { BasicTableComponent } from 'src/app/routes/commom';
import { TaxManagementService } from '../../services/tax-management.service';
import { TaxManagementUploadSettingComponent } from './upload-setting/upload-setting.component';
import { TaxManagementOrderVerifyResultComponent } from './verify-result/verify-result.component';
import { NzImageService } from 'ng-zorro-antd/image';
import { image } from 'html2canvas/dist/types/css/types/image';
@Component({
selector: 'app-tax-management-order-reporting',
@ -35,7 +37,8 @@ export class TaxManagementOrderReportingComponent extends BasicTableComponent im
private router: Router,
private ar: ActivatedRoute,
private modal: NzModalService,
public searchDrawerService: SearchDrawerService
public searchDrawerService: SearchDrawerService,
public imageService: NzImageService
) {
super(searchDrawerService);
}
@ -226,17 +229,17 @@ export class TaxManagementOrderReportingComponent extends BasicTableComponent im
{ title: '卸货地详细地址', index: 'unloadDetailedAddress', className: 'text-center', width: '180px' },
{ title: '货主名称', index: 'shipperName', className: 'text-center', width: '180px' },
{ title: '货主纳税人识别号', index: 'shipperProvinceCode', className: 'text-center', width: '180px' },
{ title: '录单时间', index: 'recordTime', className: 'text-center', width: '250px' },
{ title: '录单时间', index: 'billCreateTime', className: 'text-center', width: '250px' },
{ title: '接单时间', index: 'wayBillCreateTime', className: 'text-center', width: '200px' },
{ title: '发车时间', index: 'loadTime', className: 'text-center', width: '200px' },
{ title: '到车时间', index: 'unloadTime', className: 'text-center', width: '150px' },
{ title: '结束时间', index: 'payeeName', className: 'text-center', width: '150px' },
{ title: '结束时间', index: 'orderPayTime', className: 'text-center', width: '150px' },
{ title: '订单金额', render: 'orderAmount', className: 'text-center', width: '120px' },
{ title: '司机姓名', render: 'driverName', className: 'text-center', width: '150px' },
{ title: '司机身份证号', index: 'transpdriverCertificateNumberortInfo', className: 'text-center', width: '180px' },
{ title: '司机身份证号', index: 'driverCertificateNumber', className: 'text-center', width: '180px' },
{ title: '车牌号', index: 'carNo', className: 'text-center', width: '100px' },
{ title: '货物信息', render: 'transportInfo', className: 'text-center', width: '200px' },
{ title: '运费金额', render: 'payeeName', className: 'text-center', width: '100px' },
{ title: '货物信息', render: 'goodsName', className: 'text-center', width: '200px' },
{ title: '运费金额', render: 'wayAmount', className: 'text-center', width: '100px' },
{ title: '装卸方式', index: 'loadingUnloadWay', className: 'text-center', width: '180px' },
{ title: '支付方式', index: 'payMent', className: 'text-center', width: '150px' },
{ title: '支付账号', index: 'paymentAccount', className: 'text-center', width: '200px' },
@ -285,14 +288,16 @@ export class TaxManagementOrderReportingComponent extends BasicTableComponent im
* @param record 记录实例
*/
resetData() {
let params: any = {};
if (this.selectedRows.length === 0) {
this.openWainingModal('请选择需要更新的数据!');
return;
params ={}
} else{
params =[]
this.selectedRows.forEach(item => {
params.push(item.billId);
});
}
let params: any[] = [];
this.selectedRows.forEach(item => {
params.push(item.billId);
});
this.service.request(this.service.$api_get_renewalOrderById, params).subscribe((res: any) => {
if (res) {
this.service.msgSrv.success('更新成功');
@ -462,7 +467,7 @@ export class TaxManagementOrderReportingComponent extends BasicTableComponent im
* 异步导出
*/
export() {
this.service.exportStart(this.sf?.value, this.service.$api_async_export_order_reporting_list);
this.service.exportStart({...this.reqParams, pageSize: -1} ,this.service.$api_async_export_order_reporting_list);
}
openWainingModal(content: string, title = '提示') {
@ -472,4 +477,12 @@ export class TaxManagementOrderReportingComponent extends BasicTableComponent im
nzContent: content
});
}
viewPhoto(images: any[]) {
if (images.length > 0) {
const imgs = images.map(item => ({ src: item }));
this.imageService.preview(imgs);
}
}
}

View File

@ -4,7 +4,7 @@
* @Author : Shiming
* @Date : 2021-12-27 10:30:56
* @LastEditors : Shiming
* @LastEditTime : 2022-04-19 14:19:44
* @LastEditTime : 2022-05-11 14:53:31
* @FilePath : \\tms-obc-web\\src\\app\\routes\\tax-management\\services\\tax-management.service.ts
* Copyright (C) 2022 huzhenhong. All rights reserved.
*/
@ -60,8 +60,18 @@ export class TaxManagementService extends ShipperBaseService {
$api_getInvoiceReport_page = '/api/sdc/invoiceUploadInfo/list/page';
// 发票上传列表导出
$api_invoiceUpload_export = '/api/sdc/invoiceUploadInfo/reportList';
// 个税明细导出接口
$api_taxIncome_export = '/api/sdc/taxIncome/asyncExport';
// 个税汇总导出接口
$api_taxSummary_export = '/api/sdc/taxSummary/asyncExport';
// 税务申报导出接口
$api_taxDeclaration_export = '/api/sdc/taxDeclaration/asyncExport';
// 发票上传撤回
$api_invoiceUpload_withdraw = '/api/sdc/invoiceUploadInfo/withdraw';
// 修改起征点
$api_fixThreshold = '/api/sdc/taxIncome/fixThreshold';
//申报
$api_declare_tax = `/api/sdc/taxDeclaration/declare`;
constructor(public injector: Injector) {
super(injector);
}

View File

@ -35,7 +35,7 @@ const COMPONENTS: Type<void>[] = [
imports: [
SharedModule,
TaxManagementModuleRoutingModule,
SHARED_G2_MODULES
...SHARED_G2_MODULES
],
declarations: COMPONENTS,
})

Some files were not shown because too many files have changed in this diff Show More