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

This commit is contained in:
潘晓云
2022-03-22 17:14:59 +08:00
38 changed files with 858 additions and 708 deletions

View File

@ -0,0 +1,70 @@
:host {
::ng-deep {
nz-card {
margin: -24px -24px 0;
.ant-tabs-nav {
margin: 0;
}
}
.ant-tabs-tab {
margin: 0 0 0 16px;
padding: 12px 0;
}
.ant-table-body {
border-bottom: 1px solid #f0f0f0;
}
.table-box {
.ant-card-body {
padding: 0;
}
}
.ant-table-pagination.ant-pagination {
margin: 8px;
}
.ant-table-thead > tr > th,
.ant-table-tbody > tr > td,
.ant-table tfoot > tr > th,
.ant-table tfoot > tr > td {
padding: 8px;
}
.ant-table.ant-table-bordered > .ant-table-container {
border-top: 0;
}
.ant-pagination-item {
min-width: 24px;
height: 24px;
line-height: 21px;
}
.ant-pagination-total-text {
height: 24px;
line-height: 24px;
}
.ant-pagination-prev,
.ant-pagination-next,
.ant-pagination-jump-prev,
.ant-pagination-jump-next {
min-width: 24px;
height: 24px;
line-height: 21px;
}
.ant-select-single:not(.ant-select-customize-input) .ant-select-selector {
height: 24px;
}
.ant-select-single .ant-select-selector .ant-select-selection-item,
.ant-select-single .ant-select-selector .ant-select-selection-placeholder {
line-height: 21px;
}
}
}

View File

@ -82,7 +82,7 @@ export class PaymentRecordComponent implements OnInit {
hidden: true
}
},
orderSn: {
orderPaymentCode: {
type: 'string',
title: '支付编号',
ui: {

View File

@ -151,7 +151,7 @@ export class TransactionFlowComponent {
},
default: ''
},
orderS2n2221: {
enterpriseName: {
type: 'string',
title: '账户名称',
ui: {
@ -213,7 +213,7 @@ export class TransactionFlowComponent {
private initST(): STColumn[] {
return [
{ title: '交易时间', index: 'createTime', width: 180 },
{ title: '流水号', index: 'transactionNumber', width: 170 },
{ title: '流水号', index: 'transactionNumber', width: 180 },
{ title: '交易类型', index: 'tradeTypeLabel', width: 120 },
{ title: '关联单号', index: 'businessNumber', width: 150 },
{ title: '账户类型', index: 'accountTypeLabel', width: 130 },

View File

@ -348,7 +348,7 @@
</st>
</div>
<div nz-col [nzSpan]="12">
<amap-path-simplifier [mapWidth]="'100%'" [mapHeight]="'600px'" [MapList]="mapList"></amap-path-simplifier>
<amap-path-simplifier [mapWidth]="'100%'" [mapHeight]="'600px'" [mapList]="mapList"></amap-path-simplifier>
</div>
</div>
</nz-card>

View File

@ -4,7 +4,7 @@
* @Author : Shiming
* @Date : 2021-12-06 20:20:26
* @LastEditors : Shiming
* @LastEditTime : 2022-03-21 14:43:04
* @LastEditTime : 2022-03-22 11:06:16
* @FilePath : \\tms-obc-web\\src\\app\\routes\\order-management\\components\\bulk-detail\\bulk-detail.component.html
* Copyright (C) 2022 huzhenhong. All rights reserved.
-->
@ -212,7 +212,7 @@
</st>
</div>
<div nz-col [nzSpan]="12">
<amap-path-simplifier [mapWidth]="'100%'" [pois]="pois" [mapHeight]="'600px'" [MapList]="mapList"></amap-path-simplifier>
<amap-path-simplifier [mapWidth]="'100%'" [pois]="pois" [mapHeight]="'600px'" [mapList]="mapList"></amap-path-simplifier>
</div>
</div>
</nz-card>
@ -232,9 +232,9 @@
您的订单可能存在交易风险,请及时提交申诉材料,提交成功后,平台将及时完成审核并通知您!
</div>
<div>如果您的运单没有问题可以提出申诉并提供相关资料我们将24小时内审核反馈</div>
<ul>
<li>系统识别:司机装货轨迹异常</li>
<li>司机装货轨迹异常,您可在企业端提交申诉材料或联系客服。</li>
<ul *ngFor="let item of abnormalList">
<li>系统识别:{{item?.complianceTypeName}}</li>
<li>{{item?.determineDetails}},您可在企业端提交申诉材料或联系客服。</li>
<li>2021-11-07 03:20:15</li>
</ul>
</nz-tab>

View File

@ -4,7 +4,7 @@
* @Author : Shiming
* @Date : 2021-12-06 20:20:26
* @LastEditors : Shiming
* @LastEditTime : 2022-03-21 14:43:06
* @LastEditTime : 2022-03-22 10:56:18
* @FilePath : \\tms-obc-web\\src\\app\\routes\\order-management\\components\\bulk-detail\\bulk-detail.component.ts
* Copyright (C) 2022 huzhenhong. All rights reserved.
*/
@ -29,6 +29,7 @@ export class OrderManagementBulkeDetailComponent implements OnInit {
id = this.route.snapshot.params.id;
billExpenses: any[] = []; //运费信息表格信息
pois: any[] = [];
abnormalList: any[] = [];
i: any;
imges: any;
totalObj: any;
@ -96,10 +97,17 @@ export class OrderManagementBulkeDetailComponent implements OnInit {
];
}
});
this.service.request(this.service.$api_get_getRiskDetail, { id: this.id }).subscribe(res => {
this.service.request(this.service.$api_listBillComplianceAbnormalByBillId, { id: this.id }).subscribe(res => {
if (res) {
console.log('风险详情')
console.log(res)
this.abnormalList = res
}
});
this.service.request(this.service.$api_getAbnormalWarningByBillId, { id: this.id }).subscribe(res => {
if (res) {
console.log('异常预警')
console.log(res)
}
});
}

View File

@ -30,8 +30,8 @@ export class OrderManagementComplaintComponent implements OnInit {
columns: STColumn[] = [];
selectedIndex: number = 0;
mainTabs = [
{ name: '投诉', status: '1' },
{ name: '投诉', status: '2' },
{ name: '司机投诉', status: '1' },
{ name: '货主投诉', status: '2' },
]
tabs = [ {
name: '全部',

View File

@ -140,7 +140,10 @@ export class OrderManagementComplianceAuditComponent implements OnInit {
_$expand: { type: 'boolean', ui: { hidden: true } },
billCode: {
type: 'string',
title: '订单号'
title: '订单号',
ui: {
placeholder: '最多100个单号空号隔开'
}
},
resourceCode: {
type: 'string',

View File

@ -115,7 +115,10 @@ export class OrderManagementReceiptsAuditComponent implements OnInit {
_$expand: { type: 'boolean', ui: { hidden: true } },
billCode: {
type: 'string',
title: '订单号'
title: '订单号',
ui: {
placeholder: '最多100个单号空号隔开'
}
},
resourceCode: {
type: 'string',

View File

@ -4,7 +4,7 @@
* @Author : Shiming
* @Date : 2022-01-12 10:52:50
* @LastEditors : Shiming
* @LastEditTime : 2022-03-21 15:09:10
* @LastEditTime : 2022-03-22 09:42:03
* @FilePath : \\tms-obc-web\\src\\app\\routes\\order-management\\components\\risk\\risk.component.html
* Copyright (C) 2022 huzhenhong. All rights reserved.
-->
@ -92,7 +92,7 @@
<div *ngFor="let i of item?.goodsInfoVOList">
<p>货物名称:{{ i?.goodsName }}</p>
<p>重量/体积:{{ i?.weight }}吨/{{ i?.volume }}方</p>
<p>车型/车长:{{ i?.carModel }}/ {{ i?.carLength }}</p>
<p>车型/车长:{{ i?.carModelLabel }}/ {{ i?.carLengthLabel }}</p>
</div>
</ng-template>
</st>

View File

@ -109,7 +109,10 @@ export class OrderManagementRiskComponent implements OnInit {
_$expand: { type: 'boolean', ui: { hidden: true } },
billCode: {
type: 'string',
title: '订单号'
title: '订单号',
ui: {
placeholder: '最多100个单号空号隔开'
}
},
resourceCode: {
type: 'string',
@ -234,9 +237,9 @@ export class OrderManagementRiskComponent implements OnInit {
},
{
title: '申诉状态',
width: '100px',
width: '180px',
className: 'text-left',
index: 'representationsStatus'
index: 'representationsStatusLabel'
},
{
title: '货源编号',
@ -279,7 +282,7 @@ export class OrderManagementRiskComponent implements OnInit {
{
title: '货物信息',
className: 'text-left',
width: '200px',
width: '250px',
render: 'goodsInfoVOList'
},
{
@ -476,7 +479,7 @@ export class OrderManagementRiskComponent implements OnInit {
*/
audit(item?: any) {
if (item) {
this.auditId = item.id;
this.auditId = item.billCode;
this.initSTAudit(1);
this.isVisibleRE = true;
} else {

View File

@ -322,7 +322,7 @@
</st>
</div>
<div nz-col [nzSpan]="12">
<amap-path-simplifier [mapWidth]="'100%'" [mapHeight]="'600px'" [MapList]="mapList"></amap-path-simplifier>
<amap-path-simplifier [mapWidth]="'100%'" [mapHeight]="'600px'" [mapList]="mapList"></amap-path-simplifier>
</div>
</div>
</nz-card>

View File

@ -218,7 +218,7 @@
</st>
</div>
<div nz-col [nzSpan]="12">
<amap-path-simplifier [mapWidth]="'100%'" [mapHeight]="'600px'" [MapList]="mapList" [pois]="pois"></amap-path-simplifier>
<amap-path-simplifier [mapWidth]="'100%'" [mapHeight]="'600px'" [mapList]="mapList" [pois]="pois"></amap-path-simplifier>
</div>
</div>
</nz-card>

View File

@ -149,7 +149,8 @@ export class OrderManagementVehicleDetailComponent implements OnInit {
points?.forEach((item: any) => {
list.push({
name: `${item.spd}km/h`,
lnglat: [Number((Number(item.lon) / 600000).toFixed(6)), Number((Number(item.lat) / 600000).toFixed(6))]
lnglat: [Number((Number(item.lon) / 600000).toFixed(6)), Number((Number(item.lat) / 600000).toFixed(6))],
time: item.gtm
});
});
this.mapList = list;

View File

@ -9,30 +9,16 @@
* Copyright (C) 2022 huzhenhong. All rights reserved.
-->
<!-- 搜索表单 -->
<page-header-wrapper [title]="''"> </page-header-wrapper>
<nz-card>
<!-- <page-header-wrapper [title]="''"> </page-header-wrapper> -->
<!-- <nz-card class="search-box">
<div nz-row nzGutter="8">
<!-- 查询字段小于或等于3个时不显示伸缩按钮 -->
<div nz-col nzSpan="24" *ngIf="queryFieldCount <= 4">
<sf
#sf
[schema]="schema"
[ui]="ui"
[mode]="'search'"
[disabled]="!sf?.valid"
[loading]="false"
(formSubmit)="st?.load(1)"
(formReset)="resetSF()"
></sf>
</div>
<!-- 查询字段大于3个时根据展开状态调整布局 -->
<ng-container *ngIf="queryFieldCount > 4">
<div nz-col [nzSpan]="_$expand ? 24 : 18">
<sf #sf [schema]="schema" [ui]="ui" [compact]="true" [button]="'none'"></sf>
</div>
<div nz-col [nzSpan]="_$expand ? 24 : 6" class="text-right">
<button nz-button nzType="primary" [nzLoading]="loading" (click)="search()" acl [acl-ability]="['ORDER-VEHICLE-search']">查询</button>
<div nz-col [nzSpan]="_$expand ? 24 : 6" class="text-right" [class.expend-options]="_$expand">
<button nz-button nzType="primary" [nzLoading]="loading" (click)="search()" acl
[acl-ability]="['ORDER-VEHICLE-search']">查询</button>
<button nz-button nzType="primary" [disabled]="loading">导出</button>
<button nz-button [disabled]="loading" (click)="resetSF()">重置</button>
<button nz-button nzType="link" (click)="expandToggle()">
@ -42,10 +28,14 @@
</div>
</ng-container>
</div>
</nz-card>
</nz-card> -->
<nz-card>
<nz-tabset (nzSelectedIndexChange)="selectChange($event)" [nzTabBarExtraContent]="extraTemplate">
<nz-card class="table-box">
<div style="display: flex;align-items: center;">
<label style="font-weight: bold;font-size: 17px;">
<label style="color: #ff4d4f;margin-left: 17px;margin-right: 6px;">|</label>
整车订单</label>
<nz-tabset (nzSelectedIndexChange)="selectChange($event)" [nzTabBarExtraContent]="extraTemplate" style="flex: 1;">
<nz-tab [nzTitle]="'全部(' + tabs?.totalCount + ')'"></nz-tab>
<nz-tab [nzTitle]="'待接单(' + tabs?.receivedQuantity + ')'"></nz-tab>
<nz-tab [nzTitle]="'待发车(' + tabs?.stayQuantity + ')'"></nz-tab>
@ -54,18 +44,13 @@
<nz-tab [nzTitle]="'已完成(' + tabs?.compolatelQuantity + ')'"></nz-tab>
<nz-tab [nzTitle]="'已取消(' + tabs?.cancelQuantity + ')'"></nz-tab>
</nz-tabset>
<div style="margin-top: 15px">
<st
#st
[bordered]="true"
multiSort
[scroll]="{ x: '1200px' }"
[data]="service.$api_get_listWholePage"
[columns]="columns"
[req]="{ process: beforeReq }"
</div>
<div>
<st #st [bordered]="true" multiSort [scroll]="{ x:'1200px',y:scrollY }" [data]="service.$api_get_listWholePage"
[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] }"
>
[page]="{ show: true, showSize: true, pageSizes: [10, 20, 30, 50, 100, 200, 300, 500, 1000] }">
<ng-template st-row="billCode" let-item let-index="index">
<a [routerLink]="'vehicle-detail/' + item.id">{{ item.billCode }}</a>
<div>
@ -98,7 +83,8 @@
<div *ngIf="item.mybidDetailInfo.length > 0">
<div *ngFor="let data of item.mybidDetailInfo">
{{ data.expenseName }}{{ data.price | currency }}
<span *ngIf="data.paymentStatus && data.paymentStatus === '1' && data.price>0" style="color: #f59a63">待申请</span>
<span *ngIf="data.paymentStatus && data.paymentStatus === '1' && data.price>0"
style="color: #f59a63">待申请</span>
<span *ngIf="data.paymentStatus && data.paymentStatus === '2'" style="color: #f59a63">已支付</span>
<span *ngIf="data.paymentStatus && data.paymentStatus === '3'" style="color: #f59a63">已拒绝</span>
<span *ngIf="data.paymentStatus && data.paymentStatus === '4'" style="color: #f59a63">申请中</span>
@ -126,18 +112,13 @@
</div>
</nz-card>
<nz-modal [(nzVisible)]="isVisible" [nzWidth]="600" [nzFooter]="nzModalFooter" nzTitle="运费变更记录" (nzOnCancel)="handleCancel('0')">
<nz-modal [(nzVisible)]="isVisible" [nzWidth]="600" [nzFooter]="nzModalFooter" nzTitle="运费变更记录"
(nzOnCancel)="handleCancel('0')">
<ng-container *nzModalContent>
<st
#stFloat
multiSort
size="small"
[bordered]="true"
[data]="service.$api_get_listChangeApply"
<st #stFloat multiSort size="small" [bordered]="true" [data]="service.$api_get_listChangeApply"
[columns]="columnsFloat"
[req]="{ method: 'POST', allInBody: true, reName: { pi: 'pageIndex', ps: 'pageSize' }, params: changeParams }"
[res]="{ reName: { list: 'data', total: 'data.total' } }"
>
[res]="{ reName: { list: 'data', total: 'data.total' } }">
<ng-template st-row="order" let-item let-index="index">
{{ index + 1 }}
</ng-template>
@ -149,31 +130,23 @@
</ng-template>
</nz-modal>
<nz-modal [(nzVisible)]="isVisibleView" [nzWidth]="600" [nzFooter]="nzModalFooterview" nzTitle="查看" (nzOnCancel)="handleCancel('1')">
<nz-modal [(nzVisible)]="isVisibleView" [nzWidth]="600" [nzFooter]="nzModalFooterview" nzTitle="查看"
(nzOnCancel)="handleCancel('1')">
<ng-container *nzModalContent>
<st
#stFloatView
size="small"
[bordered]="true"
[data]="service.$api_getChangeRecordWholeDetail"
[columns]="columnsFloatView"
[req]="{ method: 'POST', allInBody: true, params: changeViewParams }"
[res]="{ reName: { list: 'data.list', total: 'data.total' } }"
>
<st #stFloatView size="small" [bordered]="true" [data]="service.$api_getChangeRecordWholeDetail"
[columns]="columnsFloatView" [req]="{ method: 'POST', allInBody: true, params: changeViewParams }"
[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>
@ -182,7 +155,8 @@
</ng-template>
</nz-modal>
<nz-modal [(nzVisible)]="isVisibleEvaluate" [nzWidth]="600" [nzFooter]="nzModalFooterEvaluate" (nzOnCancel)="handleCancel('2')">
<nz-modal [(nzVisible)]="isVisibleEvaluate" [nzWidth]="600" [nzFooter]="nzModalFooterEvaluate"
(nzOnCancel)="handleCancel('2')">
<ng-container *nzModalContent>
<nz-tabset>
<nz-tab nzTitle="货主评价">
@ -208,31 +182,43 @@
<button nz-button nzType="primary" (click)="handleCancel('2')">确定</button>
</ng-template>
</nz-modal>
<nz-drawer [nzBodyStyle]="{ overflow: 'auto' }" [nzMaskClosable]="false" [nzWidth]="420" [nzVisible]="visible"
[nzMaskClosable]="true" nzTitle="筛选" [nzFooter]="footerTpl" (nzOnClose)="visible=false">
<div *nzDrawerContent>
<sf #sf [schema]="schema" [ui]="ui" [compact]="true" [button]="'none'"></sf>
</div>
<ng-template #footerTpl>
<div style="float: right">
<button nz-button (click)="visible=false">关闭</button>
<button nz-button [disabled]="loading" (click)="resetSF()">重置</button>
<button nz-button nzType="primary" (click)="search();;">搜索</button>
</div>
</ng-template>
</nz-drawer>
<ng-template #extraTemplate>
<div>
<button nz-button nzType="primary" (click)="modifyRate()" acl [acl-ability]="['ORDER-VEHICLE-modificationAdditional']"> 修改附加费率 </button>
<button nz-button nzType="primary" (click)="modifyFreightPeople()" acl [acl-ability]="['ORDER-VEHICLE-modificationNetworkFreight']"> 修改网络货运人 </button>
<button nz-button nzType="primary" (click)="modifycaptain()" acl [acl-ability]="['ORDER-VEHICLE-modificationCarCaptain']"> 修改车队长 </button>
<button
*ngIf="resourceStatus == 4"
nz-button
nzType="primary"
nzGhost
nz-popconfirm
[nzPopconfirmTitle]="enable"
(nzOnConfirm)="userAction()"
nzPopconfirmPlacement="bottomRight"
acl [acl-ability]="['ORDER-VEHICLE-batchSignWholeOrder']"
>
<button nz-button nzType="primary" (click)="modifyRate()" acl
[acl-ability]="['ORDER-VEHICLE-modificationAdditional']"> 修改附加费率 </button>
<button nz-button nzType="primary" (click)="modifyFreightPeople()" acl
[acl-ability]="['ORDER-VEHICLE-modificationNetworkFreight']"> 修改网络货运人 </button>
<button nz-button nzType="primary" (click)="modifycaptain()" acl
[acl-ability]="['ORDER-VEHICLE-modificationCarCaptain']"> 修改车队长 </button>
<button *ngIf="resourceStatus == 4" nz-button nzType="primary" nzGhost nz-popconfirm [nzPopconfirmTitle]="enable"
(nzOnConfirm)="userAction()" nzPopconfirmPlacement="bottomRight" acl
[acl-ability]="['ORDER-VEHICLE-batchSignWholeOrder']">
批量签收
</button>
<button nz-button nzType="primary" [disabled]="loading">导出</button>
<button nz-button nzType="primary" (click)="visible=true;" class="mr-sm">筛选</button>
</div>
</ng-template>
<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>

View File

@ -1,5 +0,0 @@
:host {
p{
margin-bottom: 0
}
}

View File

@ -1,34 +0,0 @@
/*
* @Description :
* @Version : 1.0
* @Author : Shiming
* @Date : 2021-12-03 15:31:52
* @LastEditors : Shiming
* @LastEditTime : 2022-01-25 13:28:47
* @FilePath : \\tms-obc-web\\src\\app\\routes\\order-management\\components\\vehicle\\vehicle.component.spec.ts
* Copyright (C) 2022 huzhenhong. All rights reserved.
*/
import { waitForAsync, ComponentFixture, TestBed } from '@angular/core/testing';
import { OrderManagementVehicleComponent } from './vehicle.component';
describe('OrderManagementVehicleComponent', () => {
let component: OrderManagementVehicleComponent;
let fixture: ComponentFixture<OrderManagementVehicleComponent>;
beforeEach(waitForAsync(() => {
TestBed.configureTestingModule({
declarations: [ OrderManagementVehicleComponent ]
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(OrderManagementVehicleComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});

View File

@ -4,8 +4,8 @@ import { STColumn, STComponent, STRequestOptions } from '@delon/abc/st';
import { SFComponent, SFDateWidgetSchema, SFSchema, SFSchemaEnum, SFSelectWidgetSchema, SFUISchema } from '@delon/form';
import { ShipperBaseService } from '@shared';
import { NzModalService } from 'ng-zorro-antd/modal';
import { of } from 'rxjs';
import { map } from 'rxjs/operators';
import { fromEvent, of } from 'rxjs';
import { debounceTime, map } from 'rxjs/operators';
import { OneCarOrderCancelConfirmComponent } from '../../modal/vehicle/cancel-confirm/cancel-confirm.component';
import { VehicleConfirReceiptComponent } from '../../modal/vehicle/confir-receipt/confir-receipt.component';
import { VehicleFreightPeopleComponent } from '../../modal/vehicle/freight-people/freight-people.component';
@ -15,11 +15,10 @@ import { VehicleUpdateFreightComponent } from '../../modal/vehicle/update-freigh
import { OneCarOrderViewtrackComponent } from '../../modal/vehicle/view-track/view-track.component';
import { OrderManagementService } from '../../services/order-management.service';
@Component({
selector: 'app-supply-management-vehicle',
templateUrl: './vehicle.component.html',
styleUrls: ['./vehicle.component.less']
styleUrls: ['../../../commom/less/commom-table.less']
})
export class OrderManagementVehicleComponent implements OnInit {
ui: SFUISchema = {};
@ -55,7 +54,7 @@ export class OrderManagementVehicleComponent implements OnInit {
two: '2',
three: '2',
id: 2
},
}
];
tabs = {
cancelQuantity: 0,
@ -67,12 +66,15 @@ tabs = {
totalCount: 0
};
resourceStatus: any;
scrollY = '400px';
visible = false;
constructor(
public service: OrderManagementService,
private modal: NzModalService,
public shipperservice: ShipperBaseService,
public router: Router,
public ar: ActivatedRoute,
public ar: ActivatedRoute
) {}
/**
@ -100,51 +102,80 @@ resourceStatus: any;
...params,
createTime: {
start: this.sf?.value?.createTime?.[0] || '',
end: this.sf?.value?.createTime?.[1] || '',
},
end: this.sf?.value?.createTime?.[1] || ''
}
};
}
beforeReq = (requestOptions: STRequestOptions) => {
const a: any = {};
if (this.resourceStatus) {
a.billStatus = this.resourceStatus;
Object.assign(requestOptions.body, {
...a
});
}
const params: any = Object.assign({}, this.sf?.value || {});
delete params._$expand;
if (this.sf) {
Object.assign(requestOptions.body, {
...a,
...params,
createTime: {
start: this.sf?.value?.createTime?.[0] || '',
end: this.sf?.value?.createTime?.[1] || '',
},
end: this.sf?.value?.createTime?.[1] || ''
}
});
}
this.loading = true;
return requestOptions;
};
afterRes = (data: any[], rawData?: any) => {
console.log(data)
this.loading = false
console.log(data);
this.loading = false;
return data.map(item => ({
...item,
disabled: item.billStatus == '6'
}));
};
get selectedRows() {
return this.st?.list.filter((item) => item.checked) || [];
return this.st?.list.filter(item => item.checked) || [];
}
ngOnInit(): void {
this.getGoodsSourceStatistical()
this.getGoodsSourceStatistical();
this.initSF();
this.initST();
this.initSTFloat();
this.initSTFloatView();
setTimeout(() => {
this.getScrollY();
}, 100);
fromEvent(window, 'resize')
.pipe(debounceTime(100))
.subscribe(event => {
this.getScrollY();
});
}
getScrollY() {
const windowHeight = window.innerHeight || Math.max(document.documentElement.clientHeight, document.body.clientHeight);
const header = document.getElementsByTagName('layout-pro-header')?.[0];
if (windowHeight && header) {
let scrollY = windowHeight - header.clientHeight - 35 - 49;
const headerWrapper = document.getElementsByTagName('page-header-wrapper')?.[0];
if (headerWrapper) {
scrollY -= headerWrapper.clientHeight;
}
const tabset = document.getElementsByTagName('nz-tabset')?.[0];
if (tabset) {
scrollY -= tabset.clientHeight;
}
this.scrollY = scrollY + 'px';
}
}
search() {
this.st?.load(1);
this.getGoodsSourceStatistical()
this.getGoodsSourceStatistical();
}
getGoodsSourceStatistical() {
this.tabs = {
@ -157,29 +188,29 @@ resourceStatus: any;
totalCount: 0
};
const params: any = Object.assign({}, this.reqParams || {});
delete params.billStatus
delete params.billStatus;
this.service.request(this.service.$api_statisticalStatus, params).subscribe(res => {
if (res) {
let totalCount = 0;
res.forEach((element: any) => {
if (element.billStatusLabel === '待发车') {
this.tabs.stayQuantity = element.quantity
this.tabs.stayQuantity = element.quantity;
} else if (element.billStatusLabel === '待接单') {
this.tabs.receivedQuantity = element.quantity
this.tabs.receivedQuantity = element.quantity;
} else if (element.billStatusLabel === '运输中') {
this.tabs.GoingQuantity = element.quantity
this.tabs.GoingQuantity = element.quantity;
} else if (element.billStatusLabel === '待签收') {
this.tabs.signQuantity = element.quantity
this.tabs.signQuantity = element.quantity;
} else if (element.billStatusLabel === '已完成') {
this.tabs.compolatelQuantity = element.quantity
this.tabs.compolatelQuantity = element.quantity;
} else if (element.billStatusLabel === '已取消') {
this.tabs.cancelQuantity = element.quantity
this.tabs.cancelQuantity = element.quantity;
}
totalCount += element.quantity
totalCount += element.quantity;
});
this.tabs.totalCount = totalCount
this.tabs.totalCount = totalCount;
}
})
});
}
/**
@ -193,7 +224,7 @@ resourceStatus: any;
type: 'string',
title: '订单号',
ui: {
placeholder: '最多100个单号空号隔开',
placeholder: '最多100个单号空号隔开'
}
},
resourceCode: {
@ -210,11 +241,11 @@ resourceStatus: any;
searchLoadingText: '搜索中...',
allowClear: true,
onSearch: (q: any) => {
let str =q.replace(/^\s+|\s+$/g,"");
let str = q.replace(/^\s+|\s+$/g, '');
if (str) {
return this.service
.request(this.service.$api_enterpriceList, { enterpriseName: str })
.pipe(map((res: any) => (res as any[]).map((i) => ({ label: i.enterpriseName, value: i.id } as SFSchemaEnum))))
.pipe(map((res: any) => (res as any[]).map(i => ({ label: i.enterpriseName, value: i.id } as SFSchemaEnum))))
.toPromise();
} else {
return of([]);
@ -223,64 +254,41 @@ resourceStatus: any;
change: (q: any) => {
this.getRegionCode(q);
}
} as SFSelectWidgetSchema,
} as SFSelectWidgetSchema
},
enterpriseProjectId: {
type: 'string',
title: '所属项目',
ui: {
widget: 'select',
placeholder: '请选择',
visibleIf: {
_$expand: (value: boolean) => value
},
placeholder: '请选择'
} as SFSelectWidgetSchema
},
loadingPlace: {
type: 'string',
title: '装货地',
ui: {
visibleIf: {
_$expand: (value: boolean) => value
}
}
ui: {}
},
dischargePlace: {
type: 'string',
title: '卸货地',
ui: {
visibleIf: {
_$expand: (value: boolean) => value
}
}
ui: {}
},
driverName: {
title: '承运司机',
type: 'string',
ui: {
visibleIf: {
_$expand: (value: boolean) => value
}
}
ui: {}
},
carNo: {
title: '车牌号',
type: 'string',
ui: {
visibleIf: {
_$expand: (value: boolean) => value
}
}
ui: {}
},
carCaptainName: {
title: '车队长',
type: 'string',
ui: {
visibleIf: {
_$expand: (value: boolean) => value,
},
}
ui: {}
},
paymentStatus: {
title: '支付状态',
@ -288,11 +296,8 @@ resourceStatus: any;
ui: {
widget: 'dict-select',
params: { dictKey: 'overall:payment:status' },
containsAllLable: true,
visibleIf: {
_$expand: (value: boolean) => value,
},
} as SFSelectWidgetSchema,
containsAllLable: true
} as SFSelectWidgetSchema
},
createTime: {
title: '创建时间',
@ -300,10 +305,7 @@ resourceStatus: any;
ui: {
widget: 'date',
mode: 'range',
format: 'yyyy-MM-dd',
visibleIf: {
_$expand: (value: boolean) => value
}
format: 'yyyy-MM-dd'
} as SFDateWidgetSchema
},
riskStatus: {
@ -316,11 +318,8 @@ resourceStatus: any;
],
ui: {
widget: 'select',
placeholder: '请选择',
visibleIf: {
_$expand: (value: boolean) => value,
},
},
placeholder: '请选择'
}
},
enterpriseInfoId: {
type: 'string',
@ -328,12 +327,9 @@ resourceStatus: any;
ui: {
widget: 'select',
placeholder: '请选择',
visibleIf: {
_$expand: (value: boolean) => value,
},
allowClear: true,
asyncData: () => this.shipperservice.getNetworkFreightForwarder(),
},
asyncData: () => this.shipperservice.getNetworkFreightForwarder()
}
},
// goodsNameId: {
// type: 'string',
@ -362,16 +358,13 @@ resourceStatus: any;
ui: {
widget: 'dict-select',
params: { dictKey: 'service:type' },
containsAllLable: true,
visibleIf: {
_$expand: (value: boolean) => value,
},
} as SFSelectWidgetSchema,
},
containsAllLable: true
} as SFSelectWidgetSchema
}
},
type: 'object'
};
this.ui = { '*': { spanLabelFixed: 110, grid: { span: 8, gutter: 4 } } };
this.ui = { '*': { spanLabelFixed: 95, grid: { span: 24, gutter: 4 } } };
}
/**
@ -391,7 +384,7 @@ resourceStatus: any;
title: '运费明细',
width: '250px',
className: 'text-right',
render: 'mybidDetailInfo',
render: 'mybidDetailInfo'
},
{ title: '录单员', render: 'createUserName', width: '200px', className: 'text-left' },
{ title: '网络货运人', index: 'enterpriseInfoName', width: '250px', className: 'text-left' },
@ -410,7 +403,8 @@ resourceStatus: any;
className: 'text-left',
width: '170px',
render: 'goodsName'
}, {
},
{
title: '承运司机',
className: 'text-left',
width: '250px',
@ -420,7 +414,7 @@ resourceStatus: any;
title: '收款人',
className: 'text-left',
render: 'payeeName',
width: '180px',
width: '180px'
},
{
title: '装卸货时间',
@ -432,7 +426,7 @@ resourceStatus: any;
title: '创建时间',
className: 'text-left',
index: 'createTime',
width: '170px',
width: '170px'
},
{
title: '操作',
@ -440,65 +434,68 @@ resourceStatus: any;
width: '130px',
className: 'text-center block-td',
buttons: [
{
text: '运费变更记录',
click: (_record) => this.OpenPrice(_record),
iif: item => item.billStatus == '4' || item.billStatus == '5' || item.billStatus == '2' || item.billStatus == '3' || item.billStatus == '6',
acl: { ability: ['ORDER-VEHICLE-ChangeApplyList'] },
},
{
text: '查看详情',
click: (item: any) => {
this.router.navigate(['./vehicle-detail', item.id], { relativeTo: this.ar });
},
acl: { ability: ['USERCENTER-FREIGHT-USER-view'] },
click: _record => this.OpenPrice(_record),
iif: item =>
item.billStatus == '4' ||
item.billStatus == '5' ||
item.billStatus == '2' ||
item.billStatus == '3' ||
item.billStatus == '6',
acl: { ability: ['ORDER-VEHICLE-ChangeApplyList'] }
},
// {
// text: '查看详情',
// click: (item: any) => {
// this.router.navigate(['./vehicle-detail', item.id], { relativeTo: this.ar });
// },
// acl: { ability: ['USERCENTER-FREIGHT-USER-view'] }
// },
{
text: '查看评价',
click: (_record) => this.viewEvaluate(_record),
click: _record => this.viewEvaluate(_record),
iif: item => item.billStatus == '5',
acl: { ability: ['ORDER-VEHICLE-evaluation'] },
acl: { ability: ['ORDER-VEHICLE-evaluation'] }
},
{
text: '变更运费',
click: (_record) => this.updateFreight(_record),
click: _record => this.updateFreight(_record),
iif: item => item.billStatus !== '1' && item.billStatus !== '6' && item.overallPaymentStatus != '2',
acl: { ability: ['ORDER-VEHICLE-FreightChangeWholeDetail'] },
acl: { ability: ['ORDER-VEHICLE-FreightChangeWholeDetail'] }
},
{
text: '确认签收',
click: (_record) => this.confirmReceipt(_record),
click: _record => this.confirmReceipt(_record),
iif: item => item.billStatus == '4',
acl: { ability: ['ORDER-VEHICLE-signWholeOrder'] },
acl: { ability: ['ORDER-VEHICLE-signWholeOrder'] }
},
{
text: '取消订单',
click: (_record) => this.cancellation(_record),
click: _record => this.cancellation(_record),
iif: item => item.billStatus !== '1' && item.billStatus !== '6' && item.overallPaymentStatus !== '2',
acl: { ability: ['ORDER-VEHICLE-cancelAnOrder'] },
acl: { ability: ['ORDER-VEHICLE-cancelAnOrder'] }
},
{
text: '修改订单',
click: (_record) => this.changeOrder(_record),
click: _record => this.changeOrder(_record),
iif: item => item.billStatus == '4' || item.billStatus == '5' || item.billStatus == '2' || item.billStatus == '3',
acl: { ability: ['ORDER-VEHICLE-modificationOrder'] },
acl: { ability: ['ORDER-VEHICLE-modificationOrder'] }
},
{
text: '申请退款',
click: (_record) => this.applyRefund(_record),
click: _record => this.applyRefund(_record),
iif: item => item.isApplyForRefund,
acl: { ability: ['ORDER-VEHICLE-modificationOrder'] },
acl: { ability: ['ORDER-VEHICLE-modificationOrder'] }
},
{
text: '查看轨迹',
click: (_record) => this.viewTrack(_record),
iif: item => item.billStatus !== '1' && item.billStatus !== '6',
click: _record => this.viewTrack(_record),
iif: item => item.billStatus !== '1' && item.billStatus !== '6'
// acl: { ability: ['VEHICLE-LIST-view'] },
},
],
},
}
]
}
];
}
initSTFloat() {
@ -526,15 +523,15 @@ resourceStatus: any;
buttons: [
{
text: '查看',
click: (_record) => this.FloatView(_record),
click: _record => this.FloatView(_record)
},
{
text: '撤销',
click: (_record) => this.revoke(_record),
iif: item => item.handleStatus === '1' || item.handleStatus === 1,
},
],
},
click: _record => this.revoke(_record),
iif: item => item.handleStatus === '1' || item.handleStatus === 1
}
]
}
];
}
initSTFloatView() {
@ -552,16 +549,8 @@ resourceStatus: any;
index: 'amountAfterChange',
render: 'amountAfterChange'
},
{ title: '变更值',
index: 'amountchangeValue',
render: 'amountchangeValue',
width: '120px',
className: 'text-center' },
{ title: '变更后',
index: 'amountBeforeChange',
render: 'amountBeforeChange',
width: '120px',
className: 'text-center' }
{ title: '变更值', index: 'amountchangeValue', render: 'amountchangeValue', width: '120px', className: 'text-center' },
{ title: '变更后', index: 'amountBeforeChange', render: 'amountBeforeChange', width: '120px', className: 'text-center' }
];
}
// 获取城市列表
@ -599,7 +588,7 @@ resourceStatus: any;
this.sf?.setValue('/_$expand', this._$expand);
}
tabChange(item: any) {
console.log(item)
console.log(item);
}
/**
* 重置表单
@ -618,11 +607,8 @@ resourceStatus: any;
/**
* 导入货源
*/
importGoodsSource() {
}
audit(item: any) {
}
importGoodsSource() {}
audit(item: any) {}
/*
* 审核关闭弹窗
@ -631,59 +617,58 @@ resourceStatus: any;
查看评价: 3
*/
handleCancel(type: string) {
console.log(type)
console.log(type);
if (type === '0') {
this.isVisible = false
this.isVisible = false;
} else if (type === '1') {
this.isVisibleView = false
this.isVisibleView = false;
} else if (type === '2') {
this.isVisibleEvaluate = false
this.isVisibleEvaluate = false;
}
}
OpenPrice(value: any) {
this.changeId = value.id;
this.isVisible = true
this.isVisible = true;
}
/**
* 浮动费用查看
*/
FloatView(item: any) {
console.log(item)
console.log(item);
this.changeViewId = item.id;
this.service.request(this.service.$api_getChangeRecordWholeDetail, {id: this.changeViewId}).subscribe((res) => {
this.service.request(this.service.$api_getChangeRecordWholeDetail, { id: this.changeViewId }).subscribe(res => {
this.ViewCause = res;
})
this.isVisibleView = true
});
this.isVisibleView = true;
}
/**
*查看评价
*/
viewEvaluate(item: any) {
console.log(item)
this.isVisibleEvaluate = true
console.log(item);
this.isVisibleEvaluate = true;
const params = {
businessCode: item.billCode,
evaluateUserId: item.shipperAppUserId,
}
evaluateUserId: item.shipperAppUserId
};
const params2 = {
businessCode: item.billCode,
evaluateUserId: item.shipperAppUserId,
}
evaluateUserId: item.shipperAppUserId
};
this.service.request(this.service.$api_getBillEvaluateByShipper, params).subscribe(res => {
console.log(res)
this.shipList = res.evaluateInfos
console.log(res);
this.shipList = res.evaluateInfos;
});
this.service.request(this.service.$api_getBillEvaluateDriverByShipper, params2).subscribe(res => {
console.log(res)
this.diverList = res.evaluateInfos
console.log(res);
this.diverList = res.evaluateInfos;
});
}
/**
*变更运费
*/
updateFreight(item: any) {
console.log(item?.isFreightChangeApplication)
console.log(item?.isFreightChangeApplication);
this.service.request(this.service.$api_get_getFreightChangeWholeDetail, { id: item.id }).subscribe(data => {
if (data) {
const modal = this.modal.create({
@ -691,12 +676,12 @@ resourceStatus: any;
nzWidth: 580,
nzContent: VehicleUpdateFreightComponent,
nzComponentParams: { data: { ...data, id: item.id, isFreightChangeApplication: item?.isFreightChangeApplication } },
nzFooter: null,
nzFooter: null
});
modal.afterClose.subscribe((res: Boolean) => {
if (res) {
this.st.load();
this.getGoodsSourceStatistical()
this.getGoodsSourceStatistical();
}
});
}
@ -711,20 +696,20 @@ resourceStatus: any;
params.push(item.id);
});
if (params.length === 0) {
this.service.msgSrv.error('请先选择订单!')
return
this.service.msgSrv.error('请先选择订单!');
return;
}
const modal = this.modal.create({
nzTitle: '修改附加费率',
nzWidth: 600,
nzContent: VehicleModifyRateComponent,
nzComponentParams: { data: { ids: params } },
nzFooter: null,
nzFooter: null
});
modal.afterClose.subscribe((result) => {
modal.afterClose.subscribe(result => {
if (result) {
this.st.load(1);
this.getGoodsSourceStatistical()
this.getGoodsSourceStatistical();
}
});
}
@ -741,20 +726,20 @@ resourceStatus: any;
params2.push(item.enterpriseInfoId);
});
if (params.length === 0) {
this.service.msgSrv.error('请先选择订单!')
return
this.service.msgSrv.error('请先选择订单!');
return;
}
const modal = this.modal.create({
nzTitle: '修改网络货运人',
nzWidth: 600,
nzContent: VehicleFreightPeopleComponent,
nzComponentParams: { data: { ids: params, enterpriseInfoIds: params2, } },
nzFooter: null,
nzComponentParams: { data: { ids: params, enterpriseInfoIds: params2 } },
nzFooter: null
});
modal.afterClose.subscribe((result) => {
modal.afterClose.subscribe(result => {
if (result) {
this.st.load(1);
this.getGoodsSourceStatistical()
this.getGoodsSourceStatistical();
}
});
}
@ -767,15 +752,15 @@ resourceStatus: any;
params.push(item.id);
});
if (params.length === 0) {
this.service.msgSrv.error('请先选择订单!')
return
this.service.msgSrv.error('请先选择订单!');
return;
}
const modal = this.modal.create({
nzTitle: '修改车队长',
nzWidth: 900,
nzContent: VehicleModifyCaptainComponent,
nzComponentParams: { data: { ids: params, } },
nzFooter: null,
nzComponentParams: { data: { ids: params } },
nzFooter: null
// nzOnOk: sin => {
// this.service.request(this.service.$api_change_bulk, { billId: item.id, ...sin.sf.value }).subscribe(res => {
// if (res) {
@ -787,10 +772,10 @@ resourceStatus: any;
// return false;
// }
});
modal.afterClose.subscribe((result) => {
modal.afterClose.subscribe(result => {
if (result) {
this.st.load(1);
this.getGoodsSourceStatistical()
this.getGoodsSourceStatistical();
}
});
}
@ -813,11 +798,11 @@ resourceStatus: any;
this.modal.confirm({
nzTitle: '是否确定立即撤销费用变更!</i>',
nzOnOk: () =>
this.service.request(this.service.$api_get_revokeChangeRecord, { id: item.id}).subscribe((res) => {
console.log(res)
this.service.request(this.service.$api_get_revokeChangeRecord, { id: item.id }).subscribe(res => {
console.log(res);
if (res) {
this.service.msgSrv.success('撤销成功!')
this.stFloat.reload()
this.service.msgSrv.success('撤销成功!');
this.stFloat.reload();
}
})
});
@ -829,26 +814,26 @@ resourceStatus: any;
nzTitle: '<b>确定取消该订单吗?</b>',
nzContent: `<b>取消后无法恢复,请确认</b>`,
nzOnOk: () =>
this.service.request(this.service.$api_get_cancelAnOrder, {id: item.id}).subscribe((res) => {
this.service.request(this.service.$api_get_cancelAnOrder, { id: item.id }).subscribe(res => {
if (res === true) {
this.service.msgSrv.success('操作成功!');
this.st.load(1);
this.getGoodsSourceStatistical()
this.getGoodsSourceStatistical();
this.initST();
}
}),
})
});
}
userAction() {
let params: any[] = [];
if (this.selectedRows.length <= 0) {
this.service.msgSrv.warning("请选择需要签收的订单!")
this.service.msgSrv.warning('请选择需要签收的订单!');
return;
}
let flag = true;
this.selectedRows.forEach(item => {
if (item.billStatus !== '4') {
this.service.msgSrv.warning("存在非待签收状态订单,无法签收!")
this.service.msgSrv.warning('存在非待签收状态订单,无法签收!');
flag = false;
}
params.push(item.id);
@ -858,7 +843,7 @@ resourceStatus: any;
if (res) {
console.log(res);
this.st.load(1);
this.getGoodsSourceStatistical()
this.getGoodsSourceStatistical();
}
});
}
@ -895,7 +880,7 @@ resourceStatus: any;
nzContent: OneCarOrderViewtrackComponent,
nzWidth: '800px',
nzComponentParams: {
i: item,
i: item
},
nzFooter: null
});

View File

@ -16,7 +16,7 @@
</st>
</div>
<div style="flex: 1;" >
<amap-path-simplifier [mapWidth]="'100%'" [mapHeight]="'600px'" [MapList]="MapList"></amap-path-simplifier>
<amap-path-simplifier [mapWidth]="'100%'" [mapHeight]="'600px'" [mapList]="MapList"></amap-path-simplifier>
</div>
</div>
</nz-card>

View File

@ -4,7 +4,7 @@
* @Author : Shiming
* @Date : 2021-12-03 15:31:52
* @LastEditors : Shiming
* @LastEditTime : 2022-03-08 09:27:47
* @LastEditTime : 2022-03-22 10:49:37
* @FilePath : \\tms-obc-web\\src\\app\\routes\\order-management\\services\\order-management.service.ts
* Copyright (C) 2022 huzhenhong. All rights reserved.
*/
@ -158,6 +158,11 @@ export class OrderManagementService extends ShipperBaseService {
// 批量修改费率-实时查看附加费
public $api_searchAdditionalRateBatch = '/api/sdc/billOperate/searchAdditionalRateBatch';
// 风险异常
public $api_listBillComplianceAbnormalByBillId = '/api/sdc/billCompliance/listBillComplianceAbnormalByBillId';
// 异常预警
public $api_getAbnormalWarningByBillId = '/api/sdc/abnormalWarning/getAbnormalWarningByBillId';
getDictByKey(dictKey: string) {
const params = { dictKey: dictKey };
return this.request(this.$api_getDictValue, params);

View File

@ -44,7 +44,7 @@
</nz-card>
<ng-template #extraTemplate>
<div>
<button (click)="audit('', 2)" nz-button nzType="primary" acl [acl-ability]="['SUPPLY-INDEX-bulkBatchAudit']">批量审核</button>
<button (click)="audit('', 2)" nz-button nzType="primary" acl [acl-ability]="['SUPPLY-INDEX-bulkBatchAudit']">审核</button>
<button (click)="releaseGoods()" nz-button nzType="primary" acl [acl-ability]="['SUPPLY-INDEX-bulkUndertakesToSupply']">代发货源</button>
</div>
</ng-template>

View File

@ -4,7 +4,7 @@
* @Author : Shiming
* @Date : 2022-01-12 10:52:50
* @LastEditors : Shiming
* @LastEditTime : 2022-03-07 11:13:39
* @LastEditTime : 2022-03-22 13:32:15
* @FilePath : \\tms-obc-web\\src\\app\\routes\\supply-management\\components\\vehicle\\vehicle.component.html
* Copyright (C) 2022 huzhenhong. All rights reserved.
-->
@ -97,7 +97,7 @@
</nz-card>
<ng-template #extraTemplate>
<div>
<button (click)="audit('', 2)" nz-button nzType="primary" acl [acl-ability]="['SUPPLY-INDEX-vehicleBatchAudit']">批量审核</button>
<button (click)="audit('', 2)" nz-button nzType="primary" acl [acl-ability]="['SUPPLY-INDEX-vehicleBatchAudit']">审核</button>
<button (click)="releaseGoods()" nz-button nzType="primary" acl [acl-ability]="['SUPPLY-INDEX-vehicleUndertakesToSupply']"
>代发货源</button
>

View File

@ -218,7 +218,7 @@ export class CarSettleAddDriverComponent implements OnInit {
default: ''
}
},
required: ['certificatePhotoFrontWatermark', 'certificatePhotoBackWatermark', 'name', 'certificateNumber', 'bankCardNo']
required: ['mobile','certificatePhotoFrontWatermark', 'certificatePhotoBackWatermark', 'name', 'certificateNumber', 'bankCardNo']
};
this.schema1 = {
properties: {

View File

@ -402,29 +402,29 @@ export class UserCenterComponentsDriverDetailComponent implements OnInit {
}
saveUser() {
const userIdentity = this.userIdentityDetail;
const userIdentity = this?.userIdentityDetail;
const params = {
certificateNumber: userIdentity.certificateNumber,
certificatePhotoBack: userIdentity.certificatePhotoBack,
certificatePhotoBackWatermark: userIdentity.certificatePhotoBackWatermark,
certificatePhotoFront: userIdentity.certificatePhotoFront,
certificatePhotoFrontWatermark: userIdentity.certificatePhotoFrontWatermark,
certificateType: userIdentity.certificateType,
handCertificate: userIdentity.handCertificate,
id: userIdentity.id,
name: userIdentity.name,
souceType: userIdentity.souceType,
sourceAppId: userIdentity.sourceAppId,
tenantId: userIdentity.tenantId,
userId: userIdentity.userId,
certificateNumber: userIdentity?.certificateNumber,
certificatePhotoBack: userIdentity?.certificatePhotoBack,
certificatePhotoBackWatermark: userIdentity?.certificatePhotoBackWatermark,
certificatePhotoFront: userIdentity?.certificatePhotoFront,
certificatePhotoFrontWatermark: userIdentity?.certificatePhotoFrontWatermark,
certificateType: userIdentity?.certificateType,
handCertificate: userIdentity?.handCertificate,
id: userIdentity?.id,
name: userIdentity?.name,
souceType: userIdentity?.souceType,
sourceAppId: userIdentity?.sourceAppId,
tenantId: userIdentity?.tenantId,
userId: userIdentity?.userId,
validEndTime:
userIdentity.validEndTime?.length === 10
? userIdentity.validEndTime
: this.datePipe.transform(userIdentity.validEndTime, 'yyyy-MM-dd'),
userIdentity?.validEndTime?.length === 10
? userIdentity?.validEndTime
: this.datePipe.transform(userIdentity?.validEndTime, 'yyyy-MM-dd'),
validStartTime:
userIdentity.validStartTime?.length === 10
? userIdentity.validStartTime
: this.datePipe.transform(userIdentity.validStartTime, 'yyyy-MM-dd')
userIdentity?.validStartTime?.length === 10
? userIdentity?.validStartTime
: this.datePipe.transform(userIdentity?.validStartTime, 'yyyy-MM-dd')
};
this.service.request(this.service.$api_update_driver_identity, params).subscribe(res => {
if (res) {

View File

@ -77,6 +77,7 @@ export class UserCenterComponentsDriverComponent implements OnInit {
nzContent: this.promoterModal,
nzOnOk: () => {
if (!!!this.promotersTelephone) {
this.service.msgSrv.error('请填写手机号!');
return false;
}
if (typeof this.promotersTelephone === 'string' && !/(^1\d{10}$)/.test(this.promotersTelephone)) {

View File

@ -70,6 +70,7 @@ export class FreightConfigComponent implements OnInit {
nzWidth: 900,
nzComponentParams: {
extendType: '2',
spareBusinessId: item.networkTransporter,
businessId: item.id,
formatTypeList: (item: any[]) => [
...item,

View File

@ -119,6 +119,7 @@ export class VehicleComponentsAuditDetailComponent implements OnInit, OnDestroy
nzContent: this.redectModal,
nzOnOk: () => {
if (!this.approvalOpinion) {
this.service.msgSrv.error('请填写备注!')
return false;
}
this.adjuctUser(

View File

@ -236,7 +236,7 @@
</st>
</div>
<div nz-col [nzSpan]="12">
<amap-path-simplifier [mapWidth]="'100%'" [mapHeight]="'600px'" [MapList]="mapList"></amap-path-simplifier>
<amap-path-simplifier [mapWidth]="'100%'" [mapHeight]="'600px'" [mapList]="mapList"></amap-path-simplifier>
</div>
</div>
</nz-card>

View File

@ -80,6 +80,9 @@ tabs = {
wayBillCode: {
type: 'string',
title: '运单号',
ui: {
placeholder: '最多100个运单空号隔开'
}
},
resourceCode: {
type: 'string',

View File

@ -216,7 +216,7 @@
</st>
</div>
<div nz-col [nzSpan]="12">
<amap-path-simplifier [mapWidth]="'100%'" [mapHeight]="'600px'" [MapList]="mapList"></amap-path-simplifier>
<amap-path-simplifier [mapWidth]="'100%'" [mapHeight]="'600px'" [mapList]="mapList"></amap-path-simplifier>
</div>
</div>
</nz-card>

View File

@ -77,7 +77,10 @@ export class WaybillManagementVehicleComponent implements OnInit {
_$expand: { type: 'boolean', ui: { hidden: true } },
wayBillCode: {
type: 'string',
title: '运单号'
title: '运单号',
ui: {
placeholder: '最多100个运单空号隔开'
}
},
resourceCode: {
type: 'string',

View File

@ -9,3 +9,7 @@
* Copyright (C) 2022 huzhenhong. All rights reserved.
-->
<div class="map-container" id="container" tabindex="0" [style]="{width: mapWidth, height: mapHeight}"></div>
<div style="display: flex;align-items: center;">
<div>巡航倍数 : <input type="number" [ngModel]="navSpeed" min="1" (ngModelChange)="changeMultiple($event)"
style="border-color: #f0f0f0;outline: 0;width: 60px;text-align: center;" class="mt-sm ml-sm"/></div>
</div>

View File

@ -1,8 +1,10 @@
import AMapLoader from '@amap/amap-jsapi-loader';
import { Component, Input, OnChanges, OnInit, Output, SimpleChanges, EventEmitter, OnDestroy } from '@angular/core';
import { amapConf } from '@conf/amap.config';
import { InputNumber } from '@delon/util';
import { throwError } from 'rxjs';
import { BaseService } from 'src/app/shared/services';
import { AmapService, InfoItem, MapList, PathList, POI } from '../amap.service';
declare var AMap: any;
declare var AMapUI: any;
declare var Loca: any;
@ -21,41 +23,52 @@ export class AmapPathSimplifierComponent implements OnInit, OnChanges, OnDestroy
infoWindow: any;
markerList: any;
SimpleMarker: any;
// 简单路径信息
@Input()
pathList: any = [];
mapList: MapList[] = [];
// 完整路线图信息
@Input()
pathList: PathList[] = [];
// 当前选中路线图下标
@Input()
selectedIndex = 0;
// 巡航倍数
@InputNumber()
navSpeed = 1;
// 标点数组
@Input()
pois: POI[] = [];
private _pois: any = [];
@Input()
mapWidth = '800px';
@Input() MapList: any;
@Input()
mapHeight = '500px';
@Output()
readonly clcikPointEvent = new EventEmitter<any>();
@Input()
pois: any = [];
private _pois: any = [];
constructor(public service: BaseService) {}
constructor(public service: BaseService, private amapService: AmapService) {}
ngOnChanges(changes: SimpleChanges): void {
// 路线图变更: 设置路线图, 指定路线图
if (changes?.pathList?.currentValue && this?.pathSimplifierIns) {
this.setData(changes.pathList?.currentValue);
this.setPathIndex(this.selectedIndex);
}
if (changes?.MapList?.currentValue && this?.pathSimplifierIns && changes.MapList?.currentValue.length > 0) {
// console.log(this.MapList);
// 路径信息变更: 更新路线图, 设置路线图, 指定路线图, 获取终点地址信息并标点
if (changes?.mapList?.currentValue && this?.pathSimplifierIns && changes.mapList?.currentValue.length > 0) {
// console.log(this.mapList);
this.pathList = [
{
name: '路线1',
points: changes.MapList?.currentValue
points: changes.mapList?.currentValue
}
];
this.setData(this.pathList);
this.setPathIndex(this.selectedIndex);
this.getPoiByPositon(this.MapList[this.MapList?.length - 1]?.lnglat);
this.getPoiByPositon(this.mapList[this.mapList?.length - 1]?.lnglat);
}
// 标点列表变更: 更新标点数据, 绘画标点
if (changes?.pois?.currentValue) {
// console.log(this.pois);
this._pois = changes?.pois?.currentValue;
@ -68,11 +81,13 @@ export class AmapPathSimplifierComponent implements OnInit, OnChanges, OnDestroy
this.mapInit();
}
ngOnDestroy(): void {
// 销毁地图数据
if (this.aMap) {
this.aMap.destroy();
}
}
/** 地图初始化 */
mapInit() {
AMapLoader.load({
key: CONFIG.key,
@ -94,14 +109,15 @@ export class AmapPathSimplifierComponent implements OnInit, OnChanges, OnDestroy
});
this.aMap.on('complete', () => {
// this.service.msgSrv.info('地图加载完成 !');
// 信息窗口
this.infoWindow = new AMap.InfoWindow({
offset: new AMap.Pixel(0, -40)
});
// 初始化定位工具
this.geocoder = new AMap.Geocoder({
radius: 1000 //范围默认500
radius: 500 //范围默认500
});
// this.service.msgSrv.info('地图加载完成 !');
this.pathInit();
this.setPOIS();
});
@ -111,34 +127,20 @@ export class AmapPathSimplifierComponent implements OnInit, OnChanges, OnDestroy
});
}
/** 初始化路径工具 */
pathInit() {
this.pathSimplifierIns = new AMapUI.PathSimplifier({
zIndex: 100,
//autoSetFitView:false,
map: this.aMap, //所属的地图实例
getPath: function (pathData: any, pathIndex: any) {
var points = pathData.points,
lnglatList = [];
for (var i = 0, len = points?.length; i < len; i++) {
lnglatList.push(points[i].lnglat);
}
return lnglatList;
},
getHoverTitle: function (pathData: any, pathIndex: any, pointIndex: any) {
if (pointIndex >= 0) {
//point
return `${pathData.name},${pathData.points[pointIndex].name}`;
}
return '';
},
map: this.aMap,
// 重组路径数据
getPath: (pathData: PathList, pathIndex: number) => pathData.points.map(points => points.lnglat),
// 鼠标悬浮事件
getHoverTitle: (pathData: PathList, pathIndex: number, pointIndex: number) => '',
renderOptions: {
renderAllPointsIfNumberBelow: 10 //绘制路线节点,如不需要可设置为-1
renderAllPointsIfNumberBelow: 20 //绘制路线节点,如不需要可设置为-1
}
});
(window as any).pathSimplifierIns = this.pathSimplifierIns;
this.setData(this.pathList);
if (this.pathList.length > 0) {
@ -147,26 +149,40 @@ export class AmapPathSimplifierComponent implements OnInit, OnChanges, OnDestroy
this.pathSimplifierIns.on('pointClick', (e: any, info: any) => {
this.clcikPointEvent.emit({ e, info });
console.log(`Click: ${info.pathData.points[info.pointIndex].name}`);
// 弹出信息窗口
if (info) {
this.geocoder.getAddress(info.pathData.points[info.pointIndex].lnglat, (status: any, result: any) => {
if (status === 'complete' && result.info === 'OK') {
// result中对应详细地理坐标信息
this.selectedPOI({
position: info.pathData.points[info.pointIndex].lnglat,
content: `
<label style="font-weight: bold;">${result.regeocode.formattedAddress}<label/><br/>
<label style="font-weight: 400;">车速: ${info.pathData.points[info.pointIndex].name}<label/><br/>
<label style="font-weight: 400;">时间: ${this.amapService.formatTime(info.pathData.points[info.pointIndex].time)}<label/>
`
});
}
});
}
});
}
/** 初始化标点工具 */
setPOIS() {
AMapUI.loadUI(['misc/MarkerList', 'overlay/SimpleMarker'], (MarkerList: any, SimpleMarker: any) => {
this.markerList = new MarkerList({
//关联的map对象
map: this.aMap,
//返回数据项的位置信息需要是AMap.LngLat实例或者是经纬度数组比如[116.789806, 39.904989]
getPosition: (dataItem: any) => {
return dataItem.position;
},
getPosition: (dataItem: POI) => dataItem.position,
//返回数据项对应的Marker
getMarker: (dataItem: any, context: any, recycledMarker: any) => {
getMarker: (dataItem: POI, context: any, recycledMarker: any) => {
//存在可回收利用的marker
if (recycledMarker) {
//直接更新内容返回
recycledMarker.setIconLabel(context.id);
recycledMarker.setIconStyle(dataItem.iconStyle);
recycledMarker.setIconStyle(dataItem.color);
return recycledMarker;
}
this.SimpleMarker = SimpleMarker;
@ -189,7 +205,7 @@ export class AmapPathSimplifierComponent implements OnInit, OnChanges, OnDestroy
});
},
//返回数据项对应的infoWindow
getInfoWindow: (dataItem: any, context: any, recycledInfoWindow: any) => {
getInfoWindow: (dataItem: POI, context: any, recycledInfoWindow: any) => {
this.selectedPOI(dataItem);
return null;
}
@ -202,28 +218,57 @@ export class AmapPathSimplifierComponent implements OnInit, OnChanges, OnDestroy
});
}
setData(pathList: any[]) {
/**
* 设置路线图数据
* @param pathList
*/
setData(pathList: PathList[]) {
this.pathSimplifierIns.setData(pathList);
}
/**
* 指定路线图
* @param index
*/
setPathIndex(index: number) {
this.pathSimplifierIns.setSelectedPathIndex(index);
this.startNav();
}
/**
* 开启巡航
*/
startNav() {
if (this.navigator) {
this.navigator.start();
} else {
this.navigator = this.pathSimplifierIns?.createPathNavigator(0, {
this.navigator = this.pathSimplifierIns?.createPathNavigator(this.selectedIndex, {
loop: true, //循环播放
speed: 1000000 //巡航速度,单位千米/小时
speed: 500000 * this.navSpeed //巡航速度,单位千米/小时
});
this.navigator?.start();
}
changeMultiple(multiple: number) {
if (multiple <= 0) {
this.navSpeed = 1;
return;
} else {
this.navSpeed = multiple;
this.resetNav();
}
}
/** 根据经纬度获取地址信息 */
/** 重置巡航 */
resetNav() {
if (this.navigator) {
this.navigator.destroy();
setTimeout(() => {
this.startNav();
}, 200);
} else {
this.startNav();
}
}
/** 根据标点经纬度获取地址信息 */
getPoiByPositon(position: string[]) {
this.geocoder.getAddress(position, (status: any, result: any) => {
if (status === 'complete' && result.info === 'OK') {
@ -232,7 +277,6 @@ export class AmapPathSimplifierComponent implements OnInit, OnChanges, OnDestroy
if (this.markerList) {
this.markerList.render(this._pois);
}
// this.setPOI({ markerLabel: '终', color: 'red', position: position });
}
});
}
@ -240,45 +284,13 @@ export class AmapPathSimplifierComponent implements OnInit, OnChanges, OnDestroy
/**
* 选中标点,设置窗口信息
*
* @param location
* @param infoItem
*/
selectedPOI(location: any) {
this.infoWindow.setContent(`地址: <pre>${location.title}</pre>`);
this.infoWindow.open(this.aMap, location.position);
this.infoWindow.setPosition(location.position);
this.aMap.setCenter(location.position);
}
/**
* 增加标记点
*
* @param poi
*/
setPOI(poi: POI) {
AMapUI.loadUI(['overlay/SimpleMarker'], (SimpleMarker: any) => {
//启动页面
new SimpleMarker({
//普通文本
iconLabel: {
//普通文本
innerHTML: poi.markerLabel,
//设置样式
style: {
color: '#fff',
fontSize: '110%',
marginTop: '2px'
}
},
iconStyle: poi.color,
map: this.aMap,
position: poi.position
});
});
selectedPOI(infoItem: InfoItem) {
this.infoWindow.setContent(infoItem.content || `地址: <pre>${infoItem.title}</pre>`);
this.infoWindow.open(this.aMap, infoItem.position);
this.infoWindow.setPosition(infoItem.position);
// 地图定位居中
this.aMap.setCenter(infoItem.position);
}
}
export interface POI {
markerLabel: string;
color: string;
position: string[];
}

View File

@ -12,7 +12,10 @@ import { Injectable } from '@angular/core';
import { Observable, Subject, throwError } from 'rxjs';
import AMapLoader from '@amap/amap-jsapi-loader';
import { amapConf } from '@conf/amap.config';
import { formatDate } from '@angular/common';
import { DateTimePickerUtil } from '@delon/util';
declare var AMap: any;
declare var AMapUI: any;
const CONFIG = amapConf;
@Injectable({
@ -82,4 +85,59 @@ export class AmapService {
return this.currentSub;
}
/**
* 增加标记点
*
* @param poi
*/
setPOI(poi: POI, aMap: any) {
AMapUI.loadUI(['overlay/SimpleMarker'], (SimpleMarker: any) => {
//启动页面
new SimpleMarker({
//普通文本
iconLabel: {
//普通文本
innerHTML: poi.markerLabel,
//设置样式
style: {
color: '#fff',
fontSize: '110%',
marginTop: '2px'
}
},
iconStyle: poi.color,
map: aMap,
position: poi.position
});
});
}
formatTime(time: string): string {
return `${time.slice(0, 4)}-${time.slice(4, 6)}-${time.slice(6, 8)} ${time.slice(9, 11)}:${time.slice(11, 13)}:${time.slice(13, 15)}`;
}
}
export interface POI {
markerLabel?: string;
title: string;
color: string;
position: string[];
}
export interface InfoItem {
title?: string;
content?: string;
position: string[];
}
export interface MapList {
name: string;
time: string;
lnglat: string[];
}
export interface PathList {
name: string;
points: MapList[];
}

View File

@ -4,7 +4,7 @@
* @Author : Shiming
* @Date : 2022-01-10 16:06:17
* @LastEditors : Shiming
* @LastEditTime : 2022-02-17 13:28:39
* @LastEditTime : 2022-03-22 10:05:15
* @FilePath : \\tms-obc-web\\src\\app\\shared\\components\\dynamic-setting\\dynamic-setting-modal\\dynamic-setting-modal.component.ts
* Copyright (C) 2022 huzhenhong. All rights reserved.
*/
@ -34,6 +34,8 @@ export class DynamicSettingModalComponent implements OnInit {
@Input()
extendType!: string;
@Input()
spareBusinessId!: string;
@Input()
businessId!: string;
@Input()
configvalue!: string;
@ -54,7 +56,8 @@ export class DynamicSettingModalComponent implements OnInit {
.request('/api/mdc/pbc/sysConfigItemExtend/getSysConfigExtend', {
configFullKey: this.configFullKey,
extendType: this.extendType,
businessId: this.businessId
businessId: this.businessId,
spareBusinessId: this.spareBusinessId,
})
.pipe(
map((res: Array<any>) => {

View File

@ -47,6 +47,7 @@ import { NzAffixModule } from 'ng-zorro-antd/affix';
import { NzTypographyModule } from 'ng-zorro-antd/typography';
import { NzSwitchModule } from 'ng-zorro-antd/switch';
import { NzImageModule } from 'ng-zorro-antd/image';
import { NzDrawerModule } from 'ng-zorro-antd/drawer';
export const SHARED_ZORRO_MODULES = [
NzButtonModule,
NzGridModule,
@ -87,5 +88,6 @@ export const SHARED_ZORRO_MODULES = [
NzAffixModule,
NzTypographyModule,
NzSwitchModule,
NzImageModule
NzImageModule,
NzDrawerModule
];

View File

@ -48,6 +48,7 @@ input[type="number"] {
word-break: break-all;
word-wrap : break-word;
}
st {
.block-td {
.ant-divider-vertical {
@ -63,3 +64,7 @@ st {
}
}
}
nz-range-picker {
width: 100%;
}

View File

@ -1,13 +1,15 @@
.alain-pro__sider-logo h1 {
font-size: 15px !important;
}
.page-header__title {
font-size: 14px !important;
}
.alain-pro__body {
margin: 12px 12px 0px !important;
}
.alain-pro__page-header-content {
margin: 8px 8px 0 !important;
}
@ -15,66 +17,96 @@
.ant-card {
margin-bottom: 8px !important;
}
.ant-table tfoot>tr>td, .ant-table tfoot>tr>th, .ant-table-tbody>tr>td, .ant-table-thead>tr>th{
.ant-table tfoot>tr>td,
.ant-table tfoot>tr>th,
.ant-table-tbody>tr>td,
.ant-table-thead>tr>th {
padding: 6px 10px;
}
.alain-pro__page-header-wrapper {
margin: 0 !important
}
.alain-pro__menu-icon {
margin : 3px 5px 0 0;
font-size: 14px !important;
}
.sf__compact .ant-form-item {
margin-top : 4px !important;
margin-bottom: 4px !important;
}
.body-box {
max-width: 760px !important;
.box-content {
height: 77% !important;
}
}
.login-logo {
width : 250px !important;
height: 100% !important;
}
.ant-tabs-tab-btn {
font-size: 18px !important;
}
.login-box-content {
max-width: 300px !important;
height : 100% !important;
padding : 58px 0 38px !important;
}
.total-footer {
bottom: 10px !important;
}
.ant-layout-header {
height : 44px;
padding : 0 25px;
line-height: 44px;
img {
width: 22px
}
.title {
font-size: 14px;
}
}
.ant-tabs-tab-btn {
font-size: 14px !important;
}
.ant-row {
margin-left : 0px !important;
margin-right: 0px !important;
}
h2 {
font-size: 16px !important;
}
.sv__container {
padding: 0 !important;
}
.alain-pro__menu-side .alain-pro__main .affix {
top : 0 !important;
left: 215px !important;
}
.table-box {
margin: -12px -12px 0 !important;
.ant-tabs-tab {
padding: 12px 0px !important;
margin : 0 0 0 16px !important;
}
}