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

This commit is contained in:
潘晓云
2022-04-28 15:13:57 +08:00
29 changed files with 288 additions and 150 deletions

View File

@ -4,7 +4,7 @@
* @Author : Shiming * @Author : Shiming
* @Date : 2022-01-18 09:51:21 * @Date : 2022-01-18 09:51:21
* @LastEditors : Shiming * @LastEditors : Shiming
* @LastEditTime : 2022-04-27 17:26:44 * @LastEditTime : 2022-04-28 14:09:56
* @FilePath : \\tms-obc-web\\proxy.conf.js * @FilePath : \\tms-obc-web\\proxy.conf.js
* Copyright (C) 2022 huzhenhong. All rights reserved. * Copyright (C) 2022 huzhenhong. All rights reserved.
*/ */

View File

@ -24,9 +24,8 @@ export class ContractManagementIndexComponent implements OnInit {
constructor(private http: _HttpClient, private modal: ModalHelper, private acl: ACLService) { constructor(private http: _HttpClient, private modal: ModalHelper, private acl: ACLService) {
const acls = acl.data.abilities || []; const acls = acl.data.abilities || [];
this.isShowDetail = !!acls.find(acl => acl === 'CONTRACT-INDEX-searchDetail'); this.isShowDetail =acl.data.full || !!acls.find(acl => acl === 'CONTRACT-INDEX-searchDetail');
this.isShowFrame = !!acls.find(acl => acl === 'CONTRACT-INDEX-listFrame'); this.isShowFrame =acl.data.full || !!acls.find(acl => acl === 'CONTRACT-INDEX-listFrame');
console.log(this.isShowFrame);
} }

View File

@ -32,7 +32,8 @@
</label> </label>
</div> </div>
<div class="mr-sm"> <div class="mr-sm">
<button nz-button nzDanger [nzLoading]="service.http.loading" (click)="openDrawer()">筛选</button> <button nz-button nzDanger [nzLoading]="service.http.loading" (click)="openDrawer()" acl
[acl-ability]="['FINANCIAL-RECEIPT-list']">筛选</button>
</div> </div>
</div> </div>

View File

@ -60,22 +60,21 @@ const routes: Routes = [
{ path: 'abnormal-gold/detail/:id', component: AbnormalGoldDetailComponent }, { path: 'abnormal-gold/detail/:id', component: AbnormalGoldDetailComponent },
{ path: 'payment-record', component: PaymentRecordComponent }, { path: 'payment-record', component: PaymentRecordComponent },
{ path: 'transaction-flow', component: TransactionFlowComponent }, { path: 'transaction-flow', component: TransactionFlowComponent },
{ path: 'payment-order', component: PaymentOrderComponent }, { path: 'payment-order', component: PaymentOrderComponent, data: { guard: { ability: ['FINANCIAL-PAYMENT-ORDER-list'] } } },
{ path: 'payment-order/detail/:id', component: PaymentOrderDetailComponent }, { path: 'payment-order/detail/:id', component: PaymentOrderDetailComponent },
{ path: 'receipt-order', component: ReceiptOrderComponent }, { path: 'receipt-order', component: ReceiptOrderComponent, data: { guard: { ability: ['FINANCIAL-RECEIPT-list'] } } },
{ path: 'receipt-order/detail/:id', component: ReceiptOrderDetailComponent }, { path: 'receipt-order/detail/:id', component: ReceiptOrderDetailComponent },
{ path: 'advance-collection', component: AdvanceCollectionComponent }, { path: 'advance-collection', component: AdvanceCollectionComponent },
{ path: 'advance-collection/detail/:id', component: AdvanceCollectionDetailComponent }, { path: 'advance-collection/detail/:id', component: AdvanceCollectionDetailComponent },
{ path: 'receivable-order', component: ReceivableOrderComponent }, { path: 'receivable-order', component: ReceivableOrderComponent, data: { guard: { ability: ['FINANCIAL-RECEIVABLE-list'] } } },
{ path: 'receivable-order/detail/:id', component: ReceivableOrderDetailComponent }, { path: 'receivable-order/detail/:id', component: ReceivableOrderDetailComponent, data: { guard: { ability: ['FINANCIAL-RECEIVABLE-DETAIL-view'] } } },
{ path: 'payable-order', component: PayableOrderComponent }, { path: 'payable-order', component: PayableOrderComponent, data: { guard: { ability: ['FINANCIAL-PAYABLE-list'] } } },
{ path: 'payable-order/detail/:id', component: PayableOrderDetailComponent }, { path: 'payable-order/detail/:id', component: PayableOrderDetailComponent, data: { guard: { ability: ['FINANCIAL-PAYABLE-DETAIL-view'] } } },
{ path: 'bank-card-management/index', component: CwcBankCardManagementIndexComponent }, { path: 'bank-card-management/index', component: CwcBankCardManagementIndexComponent }
]; ];
@NgModule({ @NgModule({
imports: [RouterModule.forChild(routes)], imports: [RouterModule.forChild(routes)],
exports: [RouterModule] exports: [RouterModule]
}) })
export class FinancialManagementRoutingModule { } export class FinancialManagementRoutingModule {}

View File

@ -555,8 +555,8 @@ export class OrderManagementBulkComponent extends BasicTableComponent implements
},{ },{
text: '订单上报推送', text: '订单上报推送',
click: _record => this.orderReportPush(_record), click: _record => this.orderReportPush(_record),
iif: item => item.overallPaymentStatus === '2' && (item.billStatus === '4' || item.billStatus === '5') iif: item => item.overallPaymentStatus === '2' && (item.billStatus === '4' || item.billStatus === '5'),
// acl: { ability: ['VEHICLE-LIST-view'] }, acl: { ability: ['ORDER-BULK-push'] },
} }
] ]
} }

View File

@ -473,8 +473,8 @@ export class OrderManagementVehicleComponent extends BasicTableComponent impleme
{ {
text: '订单上报推送', text: '订单上报推送',
click: _record => this.orderReportPush(_record), click: _record => this.orderReportPush(_record),
iif: item => item.overallPaymentStatus === '2' && (item.billStatus === '4' || item.billStatus === '5') iif: item => item.overallPaymentStatus === '2' && (item.billStatus === '4' || item.billStatus === '5'),
// acl: { ability: ['VEHICLE-LIST-view'] }, acl: { ability: ['ORDER-VEHICLE-push'] },
} }
] ]
} }

View File

@ -125,7 +125,7 @@ export class SupplyManagementBulkDetailComponent implements OnInit {
*/ */
placeOrder(record: any) { placeOrder(record: any) {
console.log(record) console.log(record)
this.router.navigate(['/supply-management/bulk-amend', record.id], { this.router.navigate(['/supply-management/bulk-next', record.id], {
queryParams: { queryParams: {
sta: 4 sta: 4
}, },

View File

@ -492,7 +492,7 @@ export class SupplyManagementBulkComponent extends BasicTableComponent implement
// 再下一单 // 再下一单
nextOrder(item: any) { nextOrder(item: any) {
this.router.navigate(['/supply-management/bulk-amend', item.id], { this.router.navigate(['/supply-management/bulk-next', item.id], {
queryParams: { queryParams: {
sta: 4 sta: 4
} }

View File

@ -25,10 +25,10 @@
<label class="page_title"> <label class="driver">|</label> 货源管理</label> <label class="page_title"> <label class="driver">|</label> 货源管理</label>
</div> </div>
<nz-tabset [(nzSelectedIndex)]="selectedIndex" class="header_tab"> <nz-tabset [(nzSelectedIndex)]="selectedIndex" class="header_tab">
<nz-tab nzTitle="整车货源"> <nz-tab nzTitle="整车货源" *ngIf="isShowVehicle">
<app-supply-management-vehicle></app-supply-management-vehicle> <app-supply-management-vehicle></app-supply-management-vehicle>
</nz-tab> </nz-tab>
<nz-tab nzTitle="大宗货源"> <nz-tab nzTitle="大宗货源" *ngIf="isShowBulk">
<app-supply-management-bulk></app-supply-management-bulk> <app-supply-management-bulk></app-supply-management-bulk>
</nz-tab> </nz-tab>
</nz-tabset> </nz-tabset>

View File

@ -1,5 +1,6 @@
import { Component, OnInit, ViewChild } from '@angular/core'; import { Component, OnInit, ViewChild } from '@angular/core';
import { STColumn, STComponent } from '@delon/abc/st'; import { STColumn, STComponent } from '@delon/abc/st';
import { ACLService } from '@delon/acl';
import { SFSchema } from '@delon/form'; import { SFSchema } from '@delon/form';
import { ModalHelper, _HttpClient } from '@delon/theme'; import { ModalHelper, _HttpClient } from '@delon/theme';
import { SearchDrawerService } from '@shared'; import { SearchDrawerService } from '@shared';
@ -12,7 +13,14 @@ import { BasicTableComponent } from 'src/app/routes/commom';
}) })
export class SupplyManagementIndexComponent implements OnInit { export class SupplyManagementIndexComponent implements OnInit {
selectedIndex = 0; selectedIndex = 0;
isShowVehicle = false;
isShowBulk = false;
constructor(private http: _HttpClient, private modal: ModalHelper, private acl: ACLService) {
const acls = acl.data.abilities || [];
this.isShowVehicle = acl.data.full || !!acls.find(acl => acl === 'SUPPLY-INDEX-vehicleSearch');
this.isShowBulk = acl.data.full || !!acls.find(acl => acl === 'SUPPLY-INDEX-bulkSearch');
}
ngOnInit(): void {} ngOnInit(): void {}
} }

View File

@ -260,9 +260,9 @@
<button *ngIf="this.PageStatus == '整车修改'" nz-button nzType="primary" style="margin-left: 48px" <button *ngIf="this.PageStatus == '整车修改'" nz-button nzType="primary" style="margin-left: 48px"
(click)="submitConfirm()" acl [acl-ability]="['SUPPLY-VEHICLE-AMEND-submitChange']">提交修改</button> (click)="submitConfirm()" acl [acl-ability]="['SUPPLY-VEHICLE-AMEND-submitChange']">提交修改</button>
<button nz-button nzType="primary" *ngIf="this.PageStatus == '整车下一单'" (click)="submitConfirm('assign')" acl <button nz-button nzType="primary" *ngIf="this.PageStatus == '整车下一单'" (click)="submitConfirm('assign')" acl
[acl-ability]="['SUPPLY-BULK-PLACEORDER-vehicleDesignate']">指派熟车</button> [acl-ability]="['SUPPLY-VEHICLE-PLACEORDER-vehicleDesignate']">指派熟车</button>
<button *ngIf="this.PageStatus == '整车下一单'" nz-button nzType="primary" style="margin-left: 48px" <button *ngIf="this.PageStatus == '整车下一单'" nz-button nzType="primary" style="margin-left: 48px"
(click)="submitConfirm('publish')" acl (click)="submitConfirm('publish')" acl
[acl-ability]="['SUPPLY-BULK-PLACEORDER-vehicleAnotherOrder']">司机抢单</button> [acl-ability]="['SUPPLY-VEHICLE-PLACEORDER-vehicleAnotherOrder']">司机抢单</button>
</div> </div>
</nz-card> </nz-card>

View File

@ -6,39 +6,6 @@
<i nz-icon nzType="left" nzTheme="outline"></i> <i nz-icon nzType="left" nzTheme="outline"></i>
</button> </button>
</ng-template> </ng-template>
<ng-template #headerContent>
<div class="mb-xs" nz-row>
<button nz-button nzType="primary" nzSize="small" nzDanger>{{ i?.resourceStatusLabel }}</button>
<h4 class="ml-md">货源编码 : {{ i?.resourceCode }}</h4>
</div>
<div nz-row>
<div nz-col nzSpan="14" class="text-grey-darker">网络货运人:{{ i?.enterpriseInfoName }}</div>
<div nz-col nzSpan="10">
<button nz-button (click)="cancleGoodsSource()" *ngIf="i?.resourceStatus === '1'" acl
[acl-ability]="['SUPPLY-VEHICLE-DETAIL-cancelSupply']">取消货源</button>
<button nz-button (click)="assignedCar(i)" *ngIf="i?.resourceStatus === '1' && i?.serviceType === '2'" acl
[acl-ability]="['SUPPLY-VEHICLE-DETAIL-vehicleAnew']">重新指派</button>
<button nz-button (click)="updateGoodsSource(i)"
*ngIf="i?.resourceStatus === '1' && i.insurancePayment !== 'Y'" acl
[acl-ability]="['SUPPLY-VEHICLE-DETAIL-changeSupply']">修改货源</button>
<button nz-button nzType="primary" nzGhost (click)="nextOrder(i)" acl
[acl-ability]="['SUPPLY-VEHICLE-DETAIL-vehiclePlaceOrder']">再下一单</button>
</div>
</div>
<div class="mt-sm mb-sm" nz-row>
<div>
<b>总费用:<span class="text-red-light text-md">{{ i?.totalAmount | currency }}</span></b>
</div>
</div>
<nz-divider></nz-divider>
<div sv-container *ngIf="i">
<sv label="外部货源号">{{ i?.externalResourceCode }} </sv>
<sv label="项目">{{ i?.enterpriseProjectName }}</sv>
<sv label="录单员">{{ i?.createUserName }}/{{ i?.createUserPhone }}</sv>
<sv label="调度员">{{ i?.dispatchName }}/{{ i?.dispatchPhone }} </sv>
<sv label="服务类型">{{ i?.serviceTypeLabel }} </sv>
</div>
</ng-template>
</page-header-wrapper> </page-header-wrapper>
<nz-card [nzBorderless]="true" class="mb0"> <nz-card [nzBorderless]="true" class="mb0">
<div class="mb-xs" nz-row> <div class="mb-xs" nz-row>

View File

@ -115,18 +115,7 @@ export class SupplyManagementVehicleDetailComponent implements OnInit {
}) })
} }
/**
*再下一单
* @param record
*/
placeOrder(record: any) {
this.router.navigate(['./pbg/onecar-publish'], {
queryParams: {
id: record?.id,
type: 'add'
}
})
}
/** /**
* 编辑外部货源号 * 编辑外部货源号
* @param item st当前行对象 * @param item st当前行对象
@ -168,7 +157,7 @@ export class SupplyManagementVehicleDetailComponent implements OnInit {
}); });
} }
nextOrder(item: any) { nextOrder(item: any) {
this.router.navigate(['/supply-management/vehicle-amend', item.id], { this.router.navigate(['/supply-management/vehicle-next', item.id], {
queryParams: { queryParams: {
sta: 2 sta: 2
} }

View File

@ -324,7 +324,7 @@ export class SupplyManagementVehicleComponent extends BasicTableComponent implem
}); });
} }
nextOrder(item: any) { nextOrder(item: any) {
this.router.navigate(['/supply-management/vehicle-amend', item.id], { this.router.navigate(['/supply-management/vehicle-next', item.id], {
queryParams: { queryParams: {
sta: 2 sta: 2
} }

View File

@ -4,7 +4,7 @@
* @Author : Shiming * @Author : Shiming
* @Date : 2021-12-03 11:10:14 * @Date : 2021-12-03 11:10:14
* @LastEditors : Shiming * @LastEditors : Shiming
* @LastEditTime : 2022-02-10 14:39:00 * @LastEditTime : 2022-04-28 14:45:50
* @FilePath : \\tms-obc-web\\src\\app\\routes\\supply-management\\supply-management-routing.module.ts * @FilePath : \\tms-obc-web\\src\\app\\routes\\supply-management\\supply-management-routing.module.ts
* Copyright (C) 2022 huzhenhong. All rights reserved. * Copyright (C) 2022 huzhenhong. All rights reserved.
*/ */
@ -21,13 +21,76 @@ import { SupplyManagementReleasePublishComponent } from './components/release-pu
import { SupplyManagementVehicleDetailComponent } from './components/vehicle-detail/vehicle-detail.component'; import { SupplyManagementVehicleDetailComponent } from './components/vehicle-detail/vehicle-detail.component';
const routes: Routes = [ const routes: Routes = [
{ path: 'index', component: SupplyManagementIndexComponent }, {
{ path: 'index/bulk-detail/:id', component: SupplyManagementBulkDetailComponent }, path: 'index',
{ path: 'index/vehicle-detail/:id', component: SupplyManagementVehicleDetailComponent }, component: SupplyManagementIndexComponent,
data: { guard: { ability: ['SUPPLY-INDEX-vehicleSearch', 'SUPPLY-INDEX-bulkSearch'] } }
},
{
path: 'index/bulk-detail/:id',
component: SupplyManagementBulkDetailComponent,
data: {
guard: { ability: ['SUPPLY-BULK-DETAIL-cancelSupply', 'SUPPLY-BULK-DETAIL-updatePrice', 'SUPPLY-BULK-DETAIL-bulkAnotherOrder'] }
}
},
{
path: 'index/vehicle-detail/:id',
component: SupplyManagementVehicleDetailComponent,
data: {
guard: {
ability: [
'SUPPLY-VEHICLE-DETAIL-cancelSupply',
'SUPPLY-VEHICLE-DETAIL-changeSupply',
'SUPPLY-VEHICLE-DETAIL-vehiclePlaceOrder',
'SUPPLY-VEHICLE-DETAIL-vehicleAnew'
]
}
}
},
{ path: 'add-drivers', component: SupplyManagementAddDriversComponent }, { path: 'add-drivers', component: SupplyManagementAddDriversComponent },
{ path: 'vehicle-amend/:id', component: SupplyManagementOnecarPublishComponent }, {
{ path: 'vehicle-release', component: SupplyManagementReleasePublishComponent }, path: 'vehicle-amend/:id',
{ path: 'bulk-release', component: SupplyManagementBulkReleasePublishComponent }, component: SupplyManagementOnecarPublishComponent,
data: {
guard: {
ability: ['SUPPLY-VEHICLE-AMEND-submitChange']
}
}
},
{
path: 'vehicle-next/:id',
component: SupplyManagementOnecarPublishComponent,
data: {
guard: {
ability: [
'SUPPLY-VEHICLE-PLACEORDER-QRCode',
'SUPPLY-VEHICLE-PLACEORDER-vehicleDesignate',
'SUPPLY-VEHICLE-PLACEORDER-vehicleAnotherOrder'
]
}
}
},
{
path: 'vehicle-release',
component: SupplyManagementReleasePublishComponent,
data: {
guard: { ability: ['SUPPLY-VEHICLE-RELEASE-bulkDesignate', 'SUPPLY-VEHICLE-RELEASE-bulkDriverOrder'] }
}
},
{
path: 'bulk-release',
component: SupplyManagementBulkReleasePublishComponent,
data: {
guard: { ability: ['SUPPLY-BULK-RELEASE-consignBulkAssign', 'SUPPLY-BULK-RELEASE-consignBulk'] }
}
},
{
path: 'bulk-next/:id',
component: SupplyManagementBulkPublishComponent,
data: {
guard: { ability: ['SUPPLY-BULK-PLACEORDER-vehicleAnotherOrder', 'SUPPLY-BULK-PLACEORDER-vehicleDesignate'] }
}
},
{ path: 'bulk-amend/:id', component: SupplyManagementBulkPublishComponent } { path: 'bulk-amend/:id', component: SupplyManagementBulkPublishComponent }
]; ];

View File

@ -19,7 +19,8 @@
更新时间: {{ tabItem.modifyTime }} 更新时间: {{ tabItem.modifyTime }}
<a style="margin-left: 8px" target="_blank" [queryParams]="{ type: tabItem.type }" <a style="margin-left: 8px" target="_blank" [queryParams]="{ type: tabItem.type }"
[routerLink]="['/passport/agreement']">预览</a> [routerLink]="['/passport/agreement']">预览</a>
<button nz-button nzType="link" (click)="update()">修改</button> <button nz-button nzType="link" (click)="update()" acl
[acl-ability]="['SYSTEM-AGREEMENT-CONFIG-save']">修改</button>
</div> </div>
<div [innerHTML]="tabItem.agreementContent | safehtml"></div> <div [innerHTML]="tabItem.agreementContent | safehtml"></div>
</nz-card> </nz-card>

View File

@ -8,14 +8,9 @@
* @FilePath : \\tms-obc-web\\src\\app\\routes\\sys-setting\\components\\basic-setting\\basic-setting.component.html * @FilePath : \\tms-obc-web\\src\\app\\routes\\sys-setting\\components\\basic-setting\\basic-setting.component.html
* Copyright (C) 2022 huzhenhong. All rights reserved. * Copyright (C) 2022 huzhenhong. All rights reserved.
--> -->
<app-dynamic-setting-h5 <app-dynamic-setting-h5 [tabs]="tabs" [configList]="configList" [selectedTab]="selectedTab"
[tabs]="tabs" (selectedEvent)="getConfigList($event)" (saveEvent)="saveAction($event)" [labelWidth]="labelWidth"
[configList]="configList" [isCanSave]="isCanSave">
[selectedTab]="selectedTab"
(selectedEvent)="getConfigList($event)"
(saveEvent)="saveAction($event)"
[labelWidth]="labelWidth"
>
<custom-element> <custom-element>
<app-parterl-config [configList]="configList"></app-parterl-config> <app-parterl-config [configList]="configList"></app-parterl-config>
</custom-element> </custom-element>

View File

@ -9,8 +9,8 @@
* Copyright (C) 2022 huzhenhong. All rights reserved. * Copyright (C) 2022 huzhenhong. All rights reserved.
*/ */
import { Component, OnInit, ViewChild } from '@angular/core'; import { Component, OnInit, ViewChild } from '@angular/core';
import { ACLService } from '@delon/acl';
import { SFComponent, SFSchema, SFUISchema } from '@delon/form'; import { SFComponent, SFSchema, SFUISchema } from '@delon/form';
import { dateTimePickerUtil } from '@delon/util';
import { SystemService } from '../../services/system.service'; import { SystemService } from '../../services/system.service';
const NOJSONTYPE = new Set([8, 12, 13]); const NOJSONTYPE = new Set([8, 12, 13]);
@Component({ @Component({
@ -23,7 +23,10 @@ export class BasicSettingComponent implements OnInit {
selectedTab: any = null; selectedTab: any = null;
labelWidth = 250; labelWidth = 250;
configList: any = []; configList: any = [];
constructor(public service: SystemService) {} isCanSave = false;
constructor(public service: SystemService, private acl: ACLService) {
this.isCanSave = !!acl.data.abilities?.find(a => a === 'SYSTEM-BASIC_SETTING-save');
}
ngOnInit() { ngOnInit() {
this.getTypeList(); this.getTypeList();

View File

@ -7,7 +7,7 @@
<se label="个人提现手续费" style="margin:15px 0 0 0"> <se label="个人提现手续费" style="margin:15px 0 0 0">
<div> <div>
按照提现金额收取 按照提现金额收取
<nz-input-number [(ngModel)]="personValue" [nzMin]="0" [nzMax]="100" [nzPrecision]="2" [nzStep]="0.01"></nz-input-number> <nz-input-number [(ngModel)]="personServe" [nzMin]="0" [nzMax]="100" [nzPrecision]="2" [nzStep]="0.01"></nz-input-number>
<span> %手续费 </span> <span> %手续费 </span>
</div> </div>
</se> </se>
@ -15,7 +15,7 @@
<div> <div>
按照提现金额收取 按照提现金额收取
<nz-input-number <nz-input-number
[(ngModel)]="enterpriseValue" [(ngModel)]="enterpriseServe"
[nzMin]="0" [nzMin]="0"
[nzMax]="100" [nzMax]="100"
[nzPrecision]="2" [nzPrecision]="2"
@ -52,12 +52,12 @@
<div nz-row nzGutter="8"> <div nz-row nzGutter="8">
<div nz-col nzSpan="24"> <div nz-col nzSpan="24">
<span>客户</span> <span>客户</span>
<nz-input-number style="margin: 0 10px; " [(ngModel)]="personValue" [nzMin]="0" [nzMax]="3000" [nzPrecision]="2" [nzStep]="0.1"></nz-input-number> <nz-input-number style="margin: 0 10px; " [(ngModel)]="silenceClient" [nzMin]="0" [nzMax]="3000" [nzPrecision]="2" [nzStep]="0.1"></nz-input-number>
<span>天内没有交易订单的视为“沉默客户”</span> <span>天内没有交易订单的视为“沉默客户”</span>
</div> </div>
<div nz-col nzSpan="24" style="margin-top: 10px;"> <div nz-col nzSpan="24" style="margin-top: 10px;">
<span>客户</span> <span>客户</span>
<nz-input-number style="margin: 0 10px; " [(ngModel)]="personValue" [nzMin]="0" [nzMax]="3000" [nzPrecision]="2" [nzStep]="0.1"></nz-input-number> <nz-input-number style="margin: 0 10px; " [(ngModel)]="loseClient" [nzMin]="0" [nzMax]="3000" [nzPrecision]="2" [nzStep]="0.1"></nz-input-number>
<span>天内没有交易订单的视为“流失客户”</span> <span>天内没有交易订单的视为“流失客户”</span>
</div> </div>
<div nz-col nzSpan="24"> <div nz-col nzSpan="24">
@ -66,15 +66,13 @@
</div> </div>
</nz-card> </nz-card>
<div class="mb-md save-btn"> <div class="mb-md save-btn">
<button class="ml-lg" nz-button nzSize="large" nzType="primary">保存</button> <button class="ml-lg" nz-button nzSize="large" nzType="primary" (click)="save()">保存</button>
<button class="ml-lg" nz-button nzSize="large">取消</button>
</div> </div>
</div> </div>
</div> </div>
<ng-template #auditTimes let-data="data" let-title="title"> <ng-template #auditTimes let-data="data" let-title="title">
<div *ngIf="auditTimeStatus" > <div *ngIf="auditTimeStatus" >
<div style="display: flex">
<nz-radio-group [(ngModel)]="everyDay" (ngModelChange)="everyDayChange(everyDay)" style="display: block"> <nz-radio-group [(ngModel)]="everyDay" (ngModelChange)="everyDayChange(everyDay)" style="display: block">
<label nz-radio [nzValue]="1" class="mt-sm" <label nz-radio [nzValue]="1" class="mt-sm"
>每天<span *ngIf="TimeStatus" style="margin-left: 30px; color: #0200ff; cursor: pointer" (click)="addEvery()">添加时间段</span></label >每天<span *ngIf="TimeStatus" style="margin-left: 30px; color: #0200ff; cursor: pointer" (click)="addEvery()">添加时间段</span></label
@ -92,7 +90,6 @@
</div> </div>
</div> </div>
</div> </div>
</div>
<div > <div >
<nz-radio-group [(ngModel)]="MonthDay" (ngModelChange)="MonthDayChange(MonthDay)" style="display: block"> <nz-radio-group [(ngModel)]="MonthDay" (ngModelChange)="MonthDayChange(MonthDay)" style="display: block">
<label nz-radio [nzValue]="2" class="mt-sm" <label nz-radio [nzValue]="2" class="mt-sm"

View File

@ -4,6 +4,8 @@ import { NzUploadFile } from 'ng-zorro-antd/upload';
import { Observable, Observer, of } from 'rxjs'; import { Observable, Observer, of } from 'rxjs';
import { apiConf } from '@conf/api.conf'; import { apiConf } from '@conf/api.conf';
import { SystemService } from '../../services/system.service'; import { SystemService } from '../../services/system.service';
const NOJSONTYPE = new Set([8, 12, 13]);
const IMAGECONFIG = { const IMAGECONFIG = {
previewFile: (file: NzUploadFile) => of(file.url), previewFile: (file: NzUploadFile) => of(file.url),
action: apiConf.waterFileUpload, action: apiConf.waterFileUpload,
@ -35,13 +37,17 @@ export class PartnerSystemConfigComponent implements OnInit, OnChanges {
isEveryDay: false, isEveryDay: false,
isEveryWeek: false isEveryWeek: false
}; };
personValue!: number; labelWidth = 250;
enterpriseValue!: number;
auditValue!: number; personServe!: number; // 个人提现手续费
auditTime!: any; enterpriseServe!: number; // 企业提现手续费
auditValue!: boolean; // 提现审核
auditTime!: any; // 审核时间
silenceClient!: number; // 沉默客户
loseClient!: number; // 流失客户
everyDay: any;
auditTimeStatus: boolean = false; auditTimeStatus: boolean = false;
everyDay: boolean = false; MonthDay: any;
MonthDay: boolean = false;
time: Date | null = null; time: Date | null = null;
defaultOpenValue = new Date(0, 0, 0, 0, 0, 0); defaultOpenValue = new Date(0, 0, 0, 0, 0, 0);
tabs = [ tabs = [
@ -105,9 +111,32 @@ export class PartnerSystemConfigComponent implements OnInit, OnChanges {
// }; // };
constructor(private service: SystemService) {} constructor(private service: SystemService) {}
ngOnChanges(changes: SimpleChanges): void { ngOnChanges(changes: any): void {
if (changes.configList) { if (changes.configList) {
console.log(changes.configList.currentValue); console.log(changes.configList.currentValue[0]?.remark);
this.personServe = changes.configList.currentValue[0]?.remark.personServe, // 个人提现手续费
this.enterpriseServe= changes.configList.currentValue[0]?.remark.enterpriseServe, // 企业提现手续费
this.auditValue= changes.configList.currentValue[0]?.remark.auditValue, // 提现审核
this.auditTime= changes.configList.currentValue[0]?.remark.auditTime, // 审核时间
this.silenceClient= changes.configList.currentValue[0]?.remark.silenceClient, // 沉默客户
this.loseClient= changes.configList.currentValue[0]?.remark.loseClient // 流失客户
this.everyDayData= changes.configList.currentValue[0]?.remark.everyDayData // 流失客户
this.MonthDayData= changes.configList.currentValue[0]?.remark.MonthDayData // 流失客户
if (this.auditTime == '2') {
// 每天
this.auditTimeStatus = true;
if(this.everyDayData){
this.everyDayData = this.everyDayData
this.everyDay = 1
} else if(this.MonthDayData) {
// 每周
this.MonthDay = 2
this.MonthDayData = this.MonthDayData
this.TimeStatus =false
}
} else {
this.auditTimeStatus = false;
}
} }
} }
@ -136,6 +165,8 @@ export class PartnerSystemConfigComponent implements OnInit, OnChanges {
}); });
} }
addMonth() { addMonth() {
console.log(this.MonthDayData);
if(this.MonthDayData) {
this.MonthDayData.push({ this.MonthDayData.push({
month: [ month: [
{ label: '周一', value: '周一' }, { label: '周一', value: '周一' },
@ -153,6 +184,28 @@ export class PartnerSystemConfigComponent implements OnInit, OnChanges {
} }
] ]
}); });
} else {
this.MonthDayData = [
{
month: [
{ label: '周一', value: '周一' },
{ label: '周二', value: '周二' },
{ label: '周三', value: '周三' },
{ label: '周四', value: '周四' },
{ label: '周五', value: '周五' },
{ label: '周六', value: '周六' },
{ label: '周日', value: '周日' }
],
Times: [
{
startTime: [],
endTime: []
}
]
}
];
}
} }
delMonth(value: number, index: number) { delMonth(value: number, index: number) {
this.MonthDayData[value].Times.splice(index, 1); this.MonthDayData[value].Times.splice(index, 1);
@ -165,14 +218,12 @@ export class PartnerSystemConfigComponent implements OnInit, OnChanges {
console.log(this.MonthDayData); console.log(this.MonthDayData);
} }
everyDayChange(type: any): void { everyDayChange(type: any): void {
console.log(type);
if (type) { if (type) {
this.MonthDay = false; this.MonthDay = false;
this.TimeStatus = true; this.TimeStatus = true;
} }
} }
MonthDayChange(type: any): void { MonthDayChange(type: any): void {
console.log(type);
if (type) { if (type) {
this.everyDay = false; this.everyDay = false;
this.TimeStatus = false; this.TimeStatus = false;
@ -315,13 +366,63 @@ export class PartnerSystemConfigComponent implements OnInit, OnChanges {
}); });
}; };
changeAuto(value: any) { changeAuto(value: any) {
console.log(value);
if (value == '2') { if (value == '2') {
this.auditTimeStatus = true; this.auditTimeStatus = true;
} else { } else {
this.auditTimeStatus = false; this.auditTimeStatus = false;
} }
} }
save() {
let params : any = {
personServe: this.personServe, // 个人提现手续费
enterpriseServe: this.enterpriseServe, // 企业提现手续费
auditValue: this.auditValue, // 提现审核
auditTime: this.auditTime, // 审核时间
silenceClient: this.silenceClient, // 沉默客户
loseClient: this.loseClient // 流失客户
};
if(this.auditTime == '2') {
// 每天
console.log(this.everyDay);
console.log(this.MonthDay);
if(this.everyDay){
params.everyDayData = this.everyDayData
} else if(this.MonthDay) {
// 每周
params.MonthDayData = this.MonthDayData
}
}
const pra = Object.assign({}, ...this.configList)
pra.remark = JSON.stringify(params)
this.service.request(this.service.$api_update_config_batch, [pra]).subscribe(res => {
if (res) {
this.service.msgSrv.success('修改配置成功');
setTimeout(() => {
this.getConfigList(this.selectedTab);
}, 100);
}
});
}
getConfigList(selectedTab: any) {
this.selectedTab = selectedTab;
this.service.request(this.service.$api_get_config_by_parent_id, { id: selectedTab?.id }).subscribe((res: Array<any>) => {
if (res?.length > 0) {
res = res.map(item => ({
...item,
remark: item.remark ? JSON.parse(item.remark) : null,
itemValue: item?.itemValue ? (NOJSONTYPE.has(item?.itemType) ? item?.itemValue : JSON.parse(item?.itemValue)) : item?.itemValue,
itemData: item.itemData ? JSON.parse(item.itemData) : item.itemData
}));
const hiddenType = res.find(item => item.itemType === 7 || item.itemType === 999);
this.labelWidth = hiddenType ? 0 : 250;
this.configList = res;
} else {
this.configList = [];
}
});
}
private getImageModel(args: any, key: any) { private getImageModel(args: any, key: any) {
return [ return [
{ {

View File

@ -29,26 +29,34 @@ import { SmsTemplateComponent } from './components/sms-template/sms-template.com
import { OrganizationManagementComponent } from './components/organization-management/organization-management.component'; import { OrganizationManagementComponent } from './components/organization-management/organization-management.component';
const routes: Routes = [ const routes: Routes = [
{ path: 'staff-management', component: StaffManagementComponent }, { path: 'staff-management', component: StaffManagementComponent, data: { guard: { ability: ['SYSTEM-STAFF-list'] } } },
{ path: 'role-management/user/:type', component: RoleManagementComponent }, { path: 'role-management/user/:type', component: RoleManagementComponent },
{ path: 'role-management/freight/:type', component: RoleManagementComponent }, { path: 'role-management/freight/:type', component: RoleManagementComponent },
{ path: 'organization-management', component: OrganizationManagementComponent }, { path: 'organization-management', component: OrganizationManagementComponent, data: { guard: { ability: ['SYSTEM-ROLE-list'] } } },
{ path: 'basic-setting', component: BasicSettingComponent }, { path: 'basic-setting', component: BasicSettingComponent, data: { guard: { ability: ['SYSTEM-BASIC_SETTING-list'] } } },
{ path: 'note-management', component: NoTeManagementComponent }, { path: 'note-management', component: NoTeManagementComponent },
{ path: 'basic-config', component: BasicConfigComponent }, { path: 'basic-config', component: BasicConfigComponent },
{ path: 'audit-reason-config', component: AuditReasonConfigComponent }, { path: 'audit-reason-config', component: AuditReasonConfigComponent },
{ path: 'cart-config', component: CartConfigComponent }, {
{ path: 'agreement-config', component: AgreementConfigComponentsBaseComponent }, path: 'cart-config',
component: CartConfigComponent,
data: { guard: { ability: ['SYSTEM-CART-CONFIG-modeList', 'SYSTEM-CART-CONFIG-cartLength', 'SYSTEM-CART-CONFIG-goodsList'] } }
},
{
path: 'agreement-config',
component: AgreementConfigComponentsBaseComponent,
data: { guard: { ability: ['SYSTEM-AGREEMENT-CONFIG-list'] } }
},
{ path: 'system-config', component: SystemConfigComponent }, { path: 'system-config', component: SystemConfigComponent },
{ path: 'goods-name-config', component: GoodsNameConfigComponent }, { path: 'goods-name-config', component: GoodsNameConfigComponent, data: { guard: { ability: ['SYSTEM-GOODS-NAME-CONFIG-list'] } } },
{ path: 'crm-management', component: CrmManagementComponent }, { path: 'crm-management', component: CrmManagementComponent, data: { guard: { ability: ['SYSTEM-CRM-list'] } } },
{ path: 'network-freight', component: NetworkFreightComponent }, { path: 'network-freight', component: NetworkFreightComponent, data: { guard: { ability: ['SYSTEM-NETWORK-FREIGHT-list'] } } },
{ path: 'network-freight/new/:id', component: NetworkFreightNewComponent }, { path: 'network-freight/new/:id', component: NetworkFreightNewComponent },
{ path: 'close-account', component: CloseAccountComponent }, { path: 'close-account', component: CloseAccountComponent },
// { path: 'btn-management', component: BtnManagementComponent }, // { path: 'btn-management', component: BtnManagementComponent },
{ path: 'announcement-message', component: AnnouncementMessageComponent }, { path: 'announcement-message', component: AnnouncementMessageComponent },
{ path: 'insurance-set', component: InsuranceSetComponent }, { path: 'insurance-set', component: InsuranceSetComponent },
{ path: 'sms-template', component: SmsTemplateComponent} { path: 'sms-template', component: SmsTemplateComponent }
]; ];
@NgModule({ @NgModule({

View File

@ -1,7 +1,7 @@
/* /*
* @Author: your name * @Author: your name
* @Date: 2021-12-03 15:23:05 * @Date: 2021-12-03 15:23:05
* @LastEditTime : 2022-04-27 15:52:30 * @LastEditTime : 2022-04-27 20:54:10
* @LastEditors : Shiming * @LastEditors : Shiming
* @Description: 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE * @Description: 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
* @FilePath : \\tms-obc-web\\src\\app\\routes\\sys-setting\\sys-setting.module.ts * @FilePath : \\tms-obc-web\\src\\app\\routes\\sys-setting\\sys-setting.module.ts
@ -38,6 +38,7 @@ import { OrganizationManagementComponent } from './components/organization-manag
import { OrganizationModalComponent } from './components/organization-management/organization-modal/organization-modal.component'; import { OrganizationModalComponent } from './components/organization-management/organization-modal/organization-modal.component';
import { ApiAuthModalComponent } from './components/organization-management/api-auth-modal/api-auth-modal.component'; import { ApiAuthModalComponent } from './components/organization-management/api-auth-modal/api-auth-modal.component';
import { MenuTreeComponent } from './components/organization-management/menu-tree/menu-tree.component'; import { MenuTreeComponent } from './components/organization-management/menu-tree/menu-tree.component';
import { PartnerSystemConfigComponent } from './components/config/config.component';
const COMPONENTS = [ const COMPONENTS = [
StaffManagementComponent, StaffManagementComponent,
@ -58,6 +59,7 @@ const COMPONENTS = [
NoTeManagementComponent, NoTeManagementComponent,
SmsTemplateComponent, SmsTemplateComponent,
OrganizationManagementComponent, OrganizationManagementComponent,
PartnerSystemConfigComponent
]; ];
const NOTROUTECOMPONENTS = [ const NOTROUTECOMPONENTS = [
BuyerTranspowerComponent, BuyerTranspowerComponent,

View File

@ -179,8 +179,10 @@ export class InvoiceRequestedDetailComponent implements OnInit {
routeToOrder(item: any) { routeToOrder(item: any) {
if (item.billType === '1') { if (item.billType === '1') {
this.router.navigate(['/order-management/vehicle/vehicle-detail/' + item.billHId]); this.router.navigate(['/order-management/vehicle/vehicle-detail/' + item.billHId]);
} else { } else if (item.billType === '2'){
this.router.navigate(['/order-management/bulk/bulk-detail/' + item.billHId]); this.router.navigate(['/order-management/bulk/bulk-detail/' + item.billHId]);
} else if (item.billType === '3'){
this.router.navigate(['/order-management/vehicle/vehicle-detail/' + item.billHId]);
} }
} }

View File

@ -1,7 +1,7 @@
/* /*
* @Author: your name * @Author: your name
* @Date: 2021-12-23 16:50:17 * @Date: 2021-12-23 16:50:17
* @LastEditTime : 2022-04-21 13:57:43 * @LastEditTime : 2022-04-28 13:54:14
* @LastEditors : Shiming * @LastEditors : Shiming
* @Description: 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE * @Description: 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
* @FilePath : \\tms-obc-web\\src\\app\\routes\\ticket-management\\components\\invoice-requested\\requested-invoice-modal\\requested-invoice-modal.component.ts * @FilePath : \\tms-obc-web\\src\\app\\routes\\ticket-management\\components\\invoice-requested\\requested-invoice-modal\\requested-invoice-modal.component.ts
@ -88,7 +88,7 @@ export class RequestedInvoiceModalComponent {
{ title: '订单号', index: 'billHCode', width: 150 }, { title: '订单号', index: 'billHCode', width: 150 },
{ title: '订单完成日期', index: 'billfinTime', type: 'date', width: 150 }, { title: '订单完成日期', index: 'billfinTime', type: 'date', width: 150 },
{ title: '所属项目', index: 'projectIdName', width: 250 }, { title: '所属项目', index: 'projectIdName', width: 250 },
{ title: '订单类型', index: 'billTypeName', width: 90 }, { title: '订单类型', index: 'billTypeLabel', width: 90 },
{ title: '装货地', index: 'loadingfrom', width: 250 }, { title: '装货地', index: 'loadingfrom', width: 250 },
{ title: '卸货地', index: 'loadingto', width: 250 }, { title: '卸货地', index: 'loadingto', width: 250 },
{ title: '货物信息', index: 'goodsinfo', width: 170 }, { title: '货物信息', index: 'goodsinfo', width: 170 },

View File

@ -16,8 +16,8 @@
<p style="margin-bottom: 0;word-break:break-all">{{ detailData?.enterpriseName }}</p> <p style="margin-bottom: 0;word-break:break-all">{{ detailData?.enterpriseName }}</p>
</div> </div>
<div nz-col [nzLg]="12" [nzSm]="24" [nzXs]="24"> <div nz-col [nzLg]="12" [nzSm]="24" [nzXs]="24">
<nz-badge nzStatus="success" nzText="正常" *ngIf="detailData?.stateLocked === 0"></nz-badge> <nz-badge nzStatus="success" nzText="正常" *ngIf="!detailData?.stateLocked"></nz-badge>
<nz-badge nzStatus="error" nzText="冻结" *ngIf="detailData?.stateLocked === 1"></nz-badge> <nz-badge nzStatus="error" nzText="冻结" *ngIf="detailData?.stateLocked"></nz-badge>
</div> </div>
</div> </div>
<div nz-row> <div nz-row>
@ -48,30 +48,30 @@
保存 保存
</button> </button>
<button [disabled]="false" nz-button nzDanger (click)="auditPass(true)" <button [disabled]="false" nz-button nzDanger (click)="auditPass(true)"
*ngIf="detailData?.approvalStatus===10" acl [acl-ability]="['USERCENTER-FREIGHT-ENTERPRISE-D-audit']"> *ngIf="detailData?.approvalStatus===10" acl [acl-ability]="['USERCENTER-FREIGHT-LIST-DETAIL-pass']">
通过 通过
</button> </button>
</ng-container> </ng-container>
<ng-template #editButton> <ng-template #editButton>
<ng-container *ngIf="detailData?.approvalStatus===10"> <ng-container *ngIf="detailData?.approvalStatus===10">
<button [disabled]="false" nz-button nzDanger (click)="auditPass(false)" acl <button [disabled]="false" nz-button nzDanger (click)="auditPass(false)" acl
[acl-ability]="['USERCENTER-FREIGHT-ENTERPRISE-D-audit']"> [acl-ability]="['USERCENTER-FREIGHT-LIST-DETAIL-pass']">
通过 通过
</button> </button>
<button [disabled]="false" nz-button nzDanger (click)="auditNo()" acl <button [disabled]="false" nz-button nzDanger (click)="auditNo()" acl
[acl-ability]="['USERCENTER-FREIGHT-ENTERPRISE-D-audit']"> [acl-ability]="['USERCENTER-FREIGHT-LIST-DETAIL-pass']">
驳回 驳回
</button> </button>
</ng-container> </ng-container>
<ng-container *ngIf="detailData?.approvalStatus!=10"> <ng-container *ngIf="detailData?.approvalStatus!=10">
<button [disabled]="false" nz-button nzDanger nz-popconfirm [nzPopconfirmTitle]="enable" <button [disabled]="false" nz-button nzDanger nz-popconfirm [nzPopconfirmTitle]="enable"
(nzOnConfirm)="freezeOrResume(0)" nzPopconfirmPlacement="bottomRight" *ngIf="detailData?.stateLocked" (nzOnConfirm)="freezeOrResume(0)" nzPopconfirmPlacement="bottomRight" *ngIf="detailData?.stateLocked"
acl [acl-ability]="['USERCENTER-FREIGHT-ENTERPRISE-D-lock']"> acl [acl-ability]="['USERCENTER-FREIGHT-LIST-DETAIL-lock']">
启用 启用
</button> </button>
<button [disabled]="false" nz-button nzDanger nz-popconfirm [nzPopconfirmTitle]="frozen" <button [disabled]="false" nz-button nzDanger nz-popconfirm [nzPopconfirmTitle]="frozen"
(nzOnConfirm)="freezeOrResume(1)" nzPopconfirmPlacement="bottomRight" *ngIf="!detailData?.stateLocked" (nzOnConfirm)="freezeOrResume(1)" nzPopconfirmPlacement="bottomRight" *ngIf="!detailData?.stateLocked"
acl [acl-ability]="['USERCENTER-FREIGHT-ENTERPRISE-D-lock']"> acl [acl-ability]="['USERCENTER-FREIGHT-LIST-DETAIL-lock']">
冻结 冻结
</button> </button>
<button [disabled]="false" nz-button nzDanger nz-popconfirm [nzPopconfirmTitle]="Payfrozen" <button [disabled]="false" nz-button nzDanger nz-popconfirm [nzPopconfirmTitle]="Payfrozen"
@ -84,7 +84,7 @@
</button> </button>
</ng-container> </ng-container>
<button [disabled]="false" nz-button nzDanger (click)="ratify()" acl <button [disabled]="false" nz-button nzDanger (click)="ratify()" acl
[acl-ability]="['USERCENTER-FREIGHT-ENTERPRISE-D-save']"> [acl-ability]="['USERCENTER-FREIGHT-LIST-DETAIL-save']">
修改 修改
</button> </button>
</ng-template> </ng-template>

View File

@ -156,7 +156,7 @@
<div class="mb-md save-btn"> <div class="mb-md save-btn">
<button class="ml-lg" nz-button nzSize="large" nzType="primary" (click)="saveAction()" <button class="ml-lg" nz-button nzSize="large" nzType="primary" (click)="saveAction()"
*ngIf="selectedTab?.configKey!=='freight' && labelWidth!==0">保存</button> *ngIf="selectedTab?.configKey!=='freight' && labelWidth!==0 && isCanSave">保存</button>
</div> </div>
</div> </div>
</div> </div>

View File

@ -28,6 +28,8 @@ export class DynamicSettingH5Component implements OnInit {
@Input() @Input()
configList: any = []; configList: any = [];
@Input()
isCanSave = true;
@Output() @Output()
selectedEvent = new EventEmitter<any>(); selectedEvent = new EventEmitter<any>();
@Output() @Output()

View File

@ -22,7 +22,7 @@ export * from './components/dynamic-setting';
export * from './components/singlepage-setting'; export * from './components/singlepage-setting';
export * from './components/insurance-table/index'; export * from './components/insurance-table/index';
export * from './components/rebate-table/index'; export * from './components/rebate-table/index';
export * from './components/search-drawer'; export * from './components/search-drawer/index';
// Utils // Utils
export * from './utils'; export * from './utils';

View File

@ -39,8 +39,9 @@ import { PipeModule } from './pipes';
import { AccountDetailComponent } from './components/account-detail/account-detail.component'; import { AccountDetailComponent } from './components/account-detail/account-detail.component';
import { CaptchaModule } from './components/captcha'; import { CaptchaModule } from './components/captcha';
import { rebateTableModule } from './components/rebate-table'; import { rebateTableModule } from './components/rebate-table';
import { SearchDrawerComponent } from './components/search-drawer/search-drawer.component'; import { SearchDrawerModule } from './components/search-drawer';
import { SearchDrawerModule } from './components/search-drawer/search-drawer.module'; // import { SearchDrawerComponent } from './components/search-drawer/search-drawer.component';
const MODULES = [ const MODULES = [
AddressModule, AddressModule,