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 hidden: true
} }
}, },
orderSn: { orderPaymentCode: {
type: 'string', type: 'string',
title: '支付编号', title: '支付编号',
ui: { ui: {

View File

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

View File

@ -348,7 +348,7 @@
</st> </st>
</div> </div>
<div nz-col [nzSpan]="12"> <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>
</div> </div>
</nz-card> </nz-card>

View File

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

View File

@ -4,7 +4,7 @@
* @Author : Shiming * @Author : Shiming
* @Date : 2021-12-06 20:20:26 * @Date : 2021-12-06 20:20:26
* @LastEditors : Shiming * @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 * @FilePath : \\tms-obc-web\\src\\app\\routes\\order-management\\components\\bulk-detail\\bulk-detail.component.ts
* Copyright (C) 2022 huzhenhong. All rights reserved. * Copyright (C) 2022 huzhenhong. All rights reserved.
*/ */
@ -29,6 +29,7 @@ export class OrderManagementBulkeDetailComponent implements OnInit {
id = this.route.snapshot.params.id; id = this.route.snapshot.params.id;
billExpenses: any[] = []; //运费信息表格信息 billExpenses: any[] = []; //运费信息表格信息
pois: any[] = []; pois: any[] = [];
abnormalList: any[] = [];
i: any; i: any;
imges: any; imges: any;
totalObj: 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) { if (res) {
console.log('风险详情') console.log('风险详情')
console.log(res) 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[] = []; columns: STColumn[] = [];
selectedIndex: number = 0; selectedIndex: number = 0;
mainTabs = [ mainTabs = [
{ name: '投诉', status: '1' }, { name: '司机投诉', status: '1' },
{ name: '投诉', status: '2' }, { name: '货主投诉', status: '2' },
] ]
tabs = [ { tabs = [ {
name: '全部', name: '全部',

View File

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

View File

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

View File

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

View File

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

View File

@ -322,7 +322,7 @@
</st> </st>
</div> </div>
<div nz-col [nzSpan]="12"> <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>
</div> </div>
</nz-card> </nz-card>

View File

@ -218,7 +218,7 @@
</st> </st>
</div> </div>
<div nz-col [nzSpan]="12"> <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>
</div> </div>
</nz-card> </nz-card>

View File

@ -149,7 +149,8 @@ export class OrderManagementVehicleDetailComponent implements OnInit {
points?.forEach((item: any) => { points?.forEach((item: any) => {
list.push({ list.push({
name: `${item.spd}km/h`, 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; this.mapList = list;

View File

@ -9,30 +9,16 @@
* Copyright (C) 2022 huzhenhong. All rights reserved. * Copyright (C) 2022 huzhenhong. All rights reserved.
--> -->
<!-- 搜索表单 --> <!-- 搜索表单 -->
<page-header-wrapper [title]="''"> </page-header-wrapper> <!-- <page-header-wrapper [title]="''"> </page-header-wrapper> -->
<nz-card> <!-- <nz-card class="search-box">
<div nz-row nzGutter="8"> <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"> <ng-container *ngIf="queryFieldCount > 4">
<div nz-col [nzSpan]="_$expand ? 24 : 18"> <div nz-col [nzSpan]="_$expand ? 24 : 18">
<sf #sf [schema]="schema" [ui]="ui" [compact]="true" [button]="'none'"></sf> <sf #sf [schema]="schema" [ui]="ui" [compact]="true" [button]="'none'"></sf>
</div> </div>
<div nz-col [nzSpan]="_$expand ? 24 : 6" class="text-right"> <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" [nzLoading]="loading" (click)="search()" acl
[acl-ability]="['ORDER-VEHICLE-search']">查询</button>
<button nz-button nzType="primary" [disabled]="loading">导出</button> <button nz-button nzType="primary" [disabled]="loading">导出</button>
<button nz-button [disabled]="loading" (click)="resetSF()">重置</button> <button nz-button [disabled]="loading" (click)="resetSF()">重置</button>
<button nz-button nzType="link" (click)="expandToggle()"> <button nz-button nzType="link" (click)="expandToggle()">
@ -42,10 +28,14 @@
</div> </div>
</ng-container> </ng-container>
</div> </div>
</nz-card> </nz-card> -->
<nz-card> <nz-card class="table-box">
<nz-tabset (nzSelectedIndexChange)="selectChange($event)" [nzTabBarExtraContent]="extraTemplate"> <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?.totalCount + ')'"></nz-tab>
<nz-tab [nzTitle]="'待接单(' + tabs?.receivedQuantity + ')'"></nz-tab> <nz-tab [nzTitle]="'待接单(' + tabs?.receivedQuantity + ')'"></nz-tab>
<nz-tab [nzTitle]="'待发车(' + tabs?.stayQuantity + ')'"></nz-tab> <nz-tab [nzTitle]="'待发车(' + tabs?.stayQuantity + ')'"></nz-tab>
@ -54,18 +44,13 @@
<nz-tab [nzTitle]="'已完成(' + tabs?.compolatelQuantity + ')'"></nz-tab> <nz-tab [nzTitle]="'已完成(' + tabs?.compolatelQuantity + ')'"></nz-tab>
<nz-tab [nzTitle]="'已取消(' + tabs?.cancelQuantity + ')'"></nz-tab> <nz-tab [nzTitle]="'已取消(' + tabs?.cancelQuantity + ')'"></nz-tab>
</nz-tabset> </nz-tabset>
<div style="margin-top: 15px"> </div>
<st
#st <div>
[bordered]="true" <st #st [bordered]="true" multiSort [scroll]="{ x:'1200px',y:scrollY }" [data]="service.$api_get_listWholePage"
multiSort [columns]="columns" [req]="{ process: beforeReq }"
[scroll]="{ x: '1200px' }"
[data]="service.$api_get_listWholePage"
[columns]="columns"
[req]="{ process: beforeReq }"
[res]="{ reName: { list: 'data.records', total: 'data.total' } , process: afterRes}" [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"> <ng-template st-row="billCode" let-item let-index="index">
<a [routerLink]="'vehicle-detail/' + item.id">{{ item.billCode }}</a> <a [routerLink]="'vehicle-detail/' + item.id">{{ item.billCode }}</a>
<div> <div>
@ -98,7 +83,8 @@
<div *ngIf="item.mybidDetailInfo.length > 0"> <div *ngIf="item.mybidDetailInfo.length > 0">
<div *ngFor="let data of item.mybidDetailInfo"> <div *ngFor="let data of item.mybidDetailInfo">
{{ data.expenseName }}{{ data.price | currency }} {{ 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 === '2'" style="color: #f59a63">已支付</span>
<span *ngIf="data.paymentStatus && data.paymentStatus === '3'" 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> <span *ngIf="data.paymentStatus && data.paymentStatus === '4'" style="color: #f59a63">申请中</span>
@ -126,18 +112,13 @@
</div> </div>
</nz-card> </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> <ng-container *nzModalContent>
<st <st #stFloat multiSort size="small" [bordered]="true" [data]="service.$api_get_listChangeApply"
#stFloat
multiSort
size="small"
[bordered]="true"
[data]="service.$api_get_listChangeApply"
[columns]="columnsFloat" [columns]="columnsFloat"
[req]="{ method: 'POST', allInBody: true, reName: { pi: 'pageIndex', ps: 'pageSize' }, params: changeParams }" [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"> <ng-template st-row="order" let-item let-index="index">
{{ index + 1 }} {{ index + 1 }}
</ng-template> </ng-template>
@ -149,31 +130,23 @@
</ng-template> </ng-template>
</nz-modal> </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> <ng-container *nzModalContent>
<st <st #stFloatView size="small" [bordered]="true" [data]="service.$api_getChangeRecordWholeDetail"
#stFloatView [columns]="columnsFloatView" [req]="{ method: 'POST', allInBody: true, params: changeViewParams }"
size="small" [res]="{ reName: { list: 'data.list', total: 'data.total' } }">
[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"> <ng-template st-row="amountBeforeChange" let-item let-index="index">
{{ item.amountBeforeChange | currency }} {{ item.amountBeforeChange | currency }}
</ng-template> </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"> <ng-template st-row="amountAfterChange" let-item let-index="index">
{{ item.amountAfterChange | currency }} {{ item.amountAfterChange | currency }}
</ng-template> </ng-template>
</st> </st>
<div <div><span>变更原因:{{ ViewCause?.changeCause }}</span></div>
><span>变更原因:{{ ViewCause?.changeCause }}</span></div <div><span>拒绝原因:{{ ViewCause?.refuseCause }}</span></div>
>
<div
><span>拒绝原因:{{ ViewCause?.refuseCause }}</span></div
>
<div><span>注:附加费依据调整后的运输费用重新计算</span></div> <div><span>注:附加费依据调整后的运输费用重新计算</span></div>
</ng-container> </ng-container>
<ng-template #nzModalFooterview> <ng-template #nzModalFooterview>
@ -182,7 +155,8 @@
</ng-template> </ng-template>
</nz-modal> </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> <ng-container *nzModalContent>
<nz-tabset> <nz-tabset>
<nz-tab nzTitle="货主评价"> <nz-tab nzTitle="货主评价">
@ -208,31 +182,43 @@
<button nz-button nzType="primary" (click)="handleCancel('2')">确定</button> <button nz-button nzType="primary" (click)="handleCancel('2')">确定</button>
</ng-template> </ng-template>
</nz-modal> </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> <ng-template #extraTemplate>
<div> <div>
<button nz-button nzType="primary" (click)="modifyRate()" acl [acl-ability]="['ORDER-VEHICLE-modificationAdditional']"> 修改附加费率 </button> <button nz-button nzType="primary" (click)="modifyRate()" acl
<button nz-button nzType="primary" (click)="modifyFreightPeople()" acl [acl-ability]="['ORDER-VEHICLE-modificationNetworkFreight']"> 修改网络货运人 </button> [acl-ability]="['ORDER-VEHICLE-modificationAdditional']"> 修改附加费率 </button>
<button nz-button nzType="primary" (click)="modifycaptain()" acl [acl-ability]="['ORDER-VEHICLE-modificationCarCaptain']"> 修改车队长 </button> <button nz-button nzType="primary" (click)="modifyFreightPeople()" acl
<button [acl-ability]="['ORDER-VEHICLE-modificationNetworkFreight']"> 修改网络货运人 </button>
*ngIf="resourceStatus == 4" <button nz-button nzType="primary" (click)="modifycaptain()" acl
nz-button [acl-ability]="['ORDER-VEHICLE-modificationCarCaptain']"> 修改车队长 </button>
nzType="primary" <button *ngIf="resourceStatus == 4" nz-button nzType="primary" nzGhost nz-popconfirm [nzPopconfirmTitle]="enable"
nzGhost (nzOnConfirm)="userAction()" nzPopconfirmPlacement="bottomRight" acl
nz-popconfirm [acl-ability]="['ORDER-VEHICLE-batchSignWholeOrder']">
[nzPopconfirmTitle]="enable"
(nzOnConfirm)="userAction()"
nzPopconfirmPlacement="bottomRight"
acl [acl-ability]="['ORDER-VEHICLE-batchSignWholeOrder']"
>
批量签收 批量签收
</button> </button>
<button nz-button nzType="primary" [disabled]="loading">导出</button>
<button nz-button nzType="primary" (click)="visible=true;" class="mr-sm">筛选</button>
</div> </div>
</ng-template> </ng-template>
<ng-template #enable> <ng-template #enable>
<div class="ant-popover-message"> <div class="ant-popover-message">
<i nz-icon nzType="info-circle" nzTheme="fill"></i> <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" <div class="ant-popover-message-title ng-star-inserted self-ant-popover-title" style="font-size: 16px">已选择{{
>已选择{{ selectedRows?.length || 0 }}条订单,确认批量签收吗? selectedRows?.length || 0 }}条订单,确认批量签收吗?
</div> </div>
<div class="ant-popover-message-title ng-star-inserted"> 签收后不可再修改运费,请确保运费等信息准确无误后,再进行签收。 </div> <div class="ant-popover-message-title ng-star-inserted"> 签收后不可再修改运费,请确保运费等信息准确无误后,再进行签收。 </div>
</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 { SFComponent, SFDateWidgetSchema, SFSchema, SFSchemaEnum, SFSelectWidgetSchema, SFUISchema } from '@delon/form';
import { ShipperBaseService } from '@shared'; import { ShipperBaseService } from '@shared';
import { NzModalService } from 'ng-zorro-antd/modal'; import { NzModalService } from 'ng-zorro-antd/modal';
import { of } from 'rxjs'; import { fromEvent, of } from 'rxjs';
import { map } from 'rxjs/operators'; import { debounceTime, map } from 'rxjs/operators';
import { OneCarOrderCancelConfirmComponent } from '../../modal/vehicle/cancel-confirm/cancel-confirm.component'; import { OneCarOrderCancelConfirmComponent } from '../../modal/vehicle/cancel-confirm/cancel-confirm.component';
import { VehicleConfirReceiptComponent } from '../../modal/vehicle/confir-receipt/confir-receipt.component'; import { VehicleConfirReceiptComponent } from '../../modal/vehicle/confir-receipt/confir-receipt.component';
import { VehicleFreightPeopleComponent } from '../../modal/vehicle/freight-people/freight-people.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 { OneCarOrderViewtrackComponent } from '../../modal/vehicle/view-track/view-track.component';
import { OrderManagementService } from '../../services/order-management.service'; import { OrderManagementService } from '../../services/order-management.service';
@Component({ @Component({
selector: 'app-supply-management-vehicle', selector: 'app-supply-management-vehicle',
templateUrl: './vehicle.component.html', templateUrl: './vehicle.component.html',
styleUrls: ['./vehicle.component.less'] styleUrls: ['../../../commom/less/commom-table.less']
}) })
export class OrderManagementVehicleComponent implements OnInit { export class OrderManagementVehicleComponent implements OnInit {
ui: SFUISchema = {}; ui: SFUISchema = {};
@ -55,9 +54,9 @@ export class OrderManagementVehicleComponent implements OnInit {
two: '2', two: '2',
three: '2', three: '2',
id: 2 id: 2
}, }
]; ];
tabs = { tabs = {
cancelQuantity: 0, cancelQuantity: 0,
receivedQuantity: 0, receivedQuantity: 0,
stayQuantity: 0, stayQuantity: 0,
@ -65,15 +64,18 @@ tabs = {
compolatelQuantity: 0, compolatelQuantity: 0,
GoingQuantity: 0, GoingQuantity: 0,
totalCount: 0 totalCount: 0
}; };
resourceStatus: any; resourceStatus: any;
scrollY = '400px';
visible = false;
constructor( constructor(
public service: OrderManagementService, public service: OrderManagementService,
private modal: NzModalService, private modal: NzModalService,
public shipperservice: ShipperBaseService, public shipperservice: ShipperBaseService,
public router: Router, public router: Router,
public ar: ActivatedRoute, public ar: ActivatedRoute
) { } ) {}
/** /**
* 查询参数 * 查询参数
@ -89,8 +91,8 @@ resourceStatus: any;
}; };
} }
get reqParams() { get reqParams() {
const a:any = {}; const a: any = {};
if(this.resourceStatus) { if (this.resourceStatus) {
a.billStatus = this.resourceStatus; a.billStatus = this.resourceStatus;
} }
const params: any = Object.assign({}, this.sf?.value || {}); const params: any = Object.assign({}, this.sf?.value || {});
@ -100,51 +102,80 @@ resourceStatus: any;
...params, ...params,
createTime: { createTime: {
start: this.sf?.value?.createTime?.[0] || '', start: this.sf?.value?.createTime?.[0] || '',
end: this.sf?.value?.createTime?.[1] || '', end: this.sf?.value?.createTime?.[1] || ''
}, }
}; };
} }
beforeReq = (requestOptions: STRequestOptions) => { beforeReq = (requestOptions: STRequestOptions) => {
const a:any = {}; const a: any = {};
if(this.resourceStatus) { if (this.resourceStatus) {
a.billStatus = this.resourceStatus; a.billStatus = this.resourceStatus;
Object.assign(requestOptions.body, {
...a
});
} }
const params: any = Object.assign({}, this.sf?.value || {}); const params: any = Object.assign({}, this.sf?.value || {});
delete params._$expand; delete params._$expand;
if (this.sf) { if (this.sf) {
Object.assign(requestOptions.body, { Object.assign(requestOptions.body, {
...a,
...params, ...params,
createTime: { createTime: {
start: this.sf?.value?.createTime?.[0] || '', start: this.sf?.value?.createTime?.[0] || '',
end: this.sf?.value?.createTime?.[1] || '', end: this.sf?.value?.createTime?.[1] || ''
}, }
}); });
} }
this.loading = true; this.loading = true;
return requestOptions; return requestOptions;
}; };
afterRes = (data: any[], rawData?: any) => { afterRes = (data: any[], rawData?: any) => {
console.log(data) console.log(data);
this.loading = false this.loading = false;
return data.map(item => ({ return data.map(item => ({
...item, ...item,
disabled: item.billStatus == '6' disabled: item.billStatus == '6'
})); }));
}; };
get selectedRows() { get selectedRows() {
return this.st?.list.filter((item) => item.checked) || []; return this.st?.list.filter(item => item.checked) || [];
} }
ngOnInit(): void { ngOnInit(): void {
this.getGoodsSourceStatistical() this.getGoodsSourceStatistical();
this.initSF(); this.initSF();
this.initST(); this.initST();
this.initSTFloat(); this.initSTFloat();
this.initSTFloatView(); 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() { search() {
this.st?.load(1); this.st?.load(1);
this.getGoodsSourceStatistical() this.getGoodsSourceStatistical();
} }
getGoodsSourceStatistical() { getGoodsSourceStatistical() {
this.tabs = { this.tabs = {
@ -157,29 +188,29 @@ resourceStatus: any;
totalCount: 0 totalCount: 0
}; };
const params: any = Object.assign({}, this.reqParams || {}); const params: any = Object.assign({}, this.reqParams || {});
delete params.billStatus delete params.billStatus;
this.service.request(this.service.$api_statisticalStatus,params).subscribe(res => { this.service.request(this.service.$api_statisticalStatus, params).subscribe(res => {
if (res) { if (res) {
let totalCount = 0; let totalCount = 0;
res.forEach((element: any) => { res.forEach((element: any) => {
if(element.billStatusLabel === '待发车') { if (element.billStatusLabel === '待发车') {
this.tabs.stayQuantity = element.quantity this.tabs.stayQuantity = element.quantity;
} else if (element.billStatusLabel === '待接单') { } else if (element.billStatusLabel === '待接单') {
this.tabs.receivedQuantity = element.quantity this.tabs.receivedQuantity = element.quantity;
} else if (element.billStatusLabel === '运输中') { } else if (element.billStatusLabel === '运输中') {
this.tabs.GoingQuantity = element.quantity this.tabs.GoingQuantity = element.quantity;
} else if (element.billStatusLabel === '待签收') { } else if (element.billStatusLabel === '待签收') {
this.tabs.signQuantity = element.quantity this.tabs.signQuantity = element.quantity;
} else if (element.billStatusLabel === '已完成') { } else if (element.billStatusLabel === '已完成') {
this.tabs.compolatelQuantity = element.quantity this.tabs.compolatelQuantity = element.quantity;
} else if (element.billStatusLabel === '已取消') { } 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', type: 'string',
title: '订单号', title: '订单号',
ui: { ui: {
placeholder: '最多100个单号空号隔开', placeholder: '最多100个单号空号隔开'
} }
}, },
resourceCode: { resourceCode: {
@ -210,11 +241,11 @@ resourceStatus: any;
searchLoadingText: '搜索中...', searchLoadingText: '搜索中...',
allowClear: true, allowClear: true,
onSearch: (q: any) => { onSearch: (q: any) => {
let str =q.replace(/^\s+|\s+$/g,""); let str = q.replace(/^\s+|\s+$/g, '');
if (str) { if (str) {
return this.service return this.service
.request(this.service.$api_enterpriceList, { enterpriseName: str}) .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(); .toPromise();
} else { } else {
return of([]); return of([]);
@ -223,64 +254,41 @@ resourceStatus: any;
change: (q: any) => { change: (q: any) => {
this.getRegionCode(q); this.getRegionCode(q);
} }
} as SFSelectWidgetSchema, } as SFSelectWidgetSchema
}, },
enterpriseProjectId: { enterpriseProjectId: {
type: 'string', type: 'string',
title: '所属项目', title: '所属项目',
ui: { ui: {
widget: 'select', widget: 'select',
placeholder: '请选择', placeholder: '请选择'
visibleIf: {
_$expand: (value: boolean) => value
},
} as SFSelectWidgetSchema } as SFSelectWidgetSchema
}, },
loadingPlace: { loadingPlace: {
type: 'string', type: 'string',
title: '装货地', title: '装货地',
ui: { ui: {}
visibleIf: {
_$expand: (value: boolean) => value
}
}
}, },
dischargePlace: { dischargePlace: {
type: 'string', type: 'string',
title: '卸货地', title: '卸货地',
ui: { ui: {}
visibleIf: {
_$expand: (value: boolean) => value
}
}
}, },
driverName: { driverName: {
title: '承运司机', title: '承运司机',
type: 'string', type: 'string',
ui: { ui: {}
visibleIf: {
_$expand: (value: boolean) => value
}
}
}, },
carNo: { carNo: {
title: '车牌号', title: '车牌号',
type: 'string', type: 'string',
ui: { ui: {}
visibleIf: {
_$expand: (value: boolean) => value
}
}
}, },
carCaptainName: { carCaptainName: {
title: '车队长', title: '车队长',
type: 'string', type: 'string',
ui: { ui: {}
visibleIf: {
_$expand: (value: boolean) => value,
},
}
}, },
paymentStatus: { paymentStatus: {
title: '支付状态', title: '支付状态',
@ -288,11 +296,8 @@ resourceStatus: any;
ui: { ui: {
widget: 'dict-select', widget: 'dict-select',
params: { dictKey: 'overall:payment:status' }, params: { dictKey: 'overall:payment:status' },
containsAllLable: true, containsAllLable: true
visibleIf: { } as SFSelectWidgetSchema
_$expand: (value: boolean) => value,
},
} as SFSelectWidgetSchema,
}, },
createTime: { createTime: {
title: '创建时间', title: '创建时间',
@ -300,10 +305,7 @@ resourceStatus: any;
ui: { ui: {
widget: 'date', widget: 'date',
mode: 'range', mode: 'range',
format: 'yyyy-MM-dd', format: 'yyyy-MM-dd'
visibleIf: {
_$expand: (value: boolean) => value
}
} as SFDateWidgetSchema } as SFDateWidgetSchema
}, },
riskStatus: { riskStatus: {
@ -316,11 +318,8 @@ resourceStatus: any;
], ],
ui: { ui: {
widget: 'select', widget: 'select',
placeholder: '请选择', placeholder: '请选择'
visibleIf: { }
_$expand: (value: boolean) => value,
},
},
}, },
enterpriseInfoId: { enterpriseInfoId: {
type: 'string', type: 'string',
@ -328,12 +327,9 @@ resourceStatus: any;
ui: { ui: {
widget: 'select', widget: 'select',
placeholder: '请选择', placeholder: '请选择',
visibleIf: {
_$expand: (value: boolean) => value,
},
allowClear: true, allowClear: true,
asyncData: () => this.shipperservice.getNetworkFreightForwarder(), asyncData: () => this.shipperservice.getNetworkFreightForwarder()
}, }
}, },
// goodsNameId: { // goodsNameId: {
// type: 'string', // type: 'string',
@ -362,16 +358,13 @@ resourceStatus: any;
ui: { ui: {
widget: 'dict-select', widget: 'dict-select',
params: { dictKey: 'service:type' }, params: { dictKey: 'service:type' },
containsAllLable: true, containsAllLable: true
visibleIf: { } as SFSelectWidgetSchema
_$expand: (value: boolean) => value, }
},
} as SFSelectWidgetSchema,
},
}, },
type: 'object' 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: '运费明细', title: '运费明细',
width: '250px', width: '250px',
className: 'text-right', className: 'text-right',
render: 'mybidDetailInfo', render: 'mybidDetailInfo'
}, },
{ title: '录单员', render: 'createUserName', width: '200px', className: 'text-left' }, { title: '录单员', render: 'createUserName', width: '200px', className: 'text-left' },
{ title: '网络货运人', index: 'enterpriseInfoName', width: '250px', className: 'text-left' }, { title: '网络货运人', index: 'enterpriseInfoName', width: '250px', className: 'text-left' },
@ -410,7 +403,8 @@ resourceStatus: any;
className: 'text-left', className: 'text-left',
width: '170px', width: '170px',
render: 'goodsName' render: 'goodsName'
}, { },
{
title: '承运司机', title: '承运司机',
className: 'text-left', className: 'text-left',
width: '250px', width: '250px',
@ -420,7 +414,7 @@ resourceStatus: any;
title: '收款人', title: '收款人',
className: 'text-left', className: 'text-left',
render: 'payeeName', render: 'payeeName',
width: '180px', width: '180px'
}, },
{ {
title: '装卸货时间', title: '装卸货时间',
@ -432,7 +426,7 @@ resourceStatus: any;
title: '创建时间', title: '创建时间',
className: 'text-left', className: 'text-left',
index: 'createTime', index: 'createTime',
width: '170px', width: '170px'
}, },
{ {
title: '操作', title: '操作',
@ -440,65 +434,68 @@ resourceStatus: any;
width: '130px', width: '130px',
className: 'text-center block-td', className: 'text-center block-td',
buttons: [ buttons: [
{ {
text: '运费变更记录', text: '运费变更记录',
click: (_record) => this.OpenPrice(_record), click: _record => this.OpenPrice(_record),
iif: item => item.billStatus == '4' || item.billStatus == '5' || item.billStatus == '2' || item.billStatus == '3' || item.billStatus == '6', iif: item =>
acl: { ability: ['ORDER-VEHICLE-ChangeApplyList'] }, item.billStatus == '4' ||
}, item.billStatus == '5' ||
{ item.billStatus == '2' ||
text: '查看详情', item.billStatus == '3' ||
click: (item: any) => { item.billStatus == '6',
this.router.navigate(['./vehicle-detail', item.id], { relativeTo: this.ar }); acl: { ability: ['ORDER-VEHICLE-ChangeApplyList'] }
},
acl: { ability: ['USERCENTER-FREIGHT-USER-view'] },
}, },
// {
// text: '查看详情',
// click: (item: any) => {
// this.router.navigate(['./vehicle-detail', item.id], { relativeTo: this.ar });
// },
// acl: { ability: ['USERCENTER-FREIGHT-USER-view'] }
// },
{ {
text: '查看评价', text: '查看评价',
click: (_record) => this.viewEvaluate(_record), click: _record => this.viewEvaluate(_record),
iif: item => item.billStatus == '5', iif: item => item.billStatus == '5',
acl: { ability: ['ORDER-VEHICLE-evaluation'] }, acl: { ability: ['ORDER-VEHICLE-evaluation'] }
}, },
{ {
text: '变更运费', text: '变更运费',
click: (_record) => this.updateFreight(_record), click: _record => this.updateFreight(_record),
iif: item => item.billStatus !== '1' && item.billStatus !== '6' && item.overallPaymentStatus != '2', iif: item => item.billStatus !== '1' && item.billStatus !== '6' && item.overallPaymentStatus != '2',
acl: { ability: ['ORDER-VEHICLE-FreightChangeWholeDetail'] }, acl: { ability: ['ORDER-VEHICLE-FreightChangeWholeDetail'] }
}, },
{ {
text: '确认签收', text: '确认签收',
click: (_record) => this.confirmReceipt(_record), click: _record => this.confirmReceipt(_record),
iif: item => item.billStatus == '4', iif: item => item.billStatus == '4',
acl: { ability: ['ORDER-VEHICLE-signWholeOrder'] }, acl: { ability: ['ORDER-VEHICLE-signWholeOrder'] }
}, },
{ {
text: '取消订单', text: '取消订单',
click: (_record) => this.cancellation(_record), click: _record => this.cancellation(_record),
iif: item => item.billStatus !== '1' && item.billStatus !== '6' && item.overallPaymentStatus !== '2', iif: item => item.billStatus !== '1' && item.billStatus !== '6' && item.overallPaymentStatus !== '2',
acl: { ability: ['ORDER-VEHICLE-cancelAnOrder'] }, acl: { ability: ['ORDER-VEHICLE-cancelAnOrder'] }
}, },
{ {
text: '修改订单', 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', 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: '申请退款', text: '申请退款',
click: (_record) => this.applyRefund(_record), click: _record => this.applyRefund(_record),
iif: item => item.isApplyForRefund, iif: item => item.isApplyForRefund,
acl: { ability: ['ORDER-VEHICLE-modificationOrder'] }, acl: { ability: ['ORDER-VEHICLE-modificationOrder'] }
}, },
{ {
text: '查看轨迹', text: '查看轨迹',
click: (_record) => this.viewTrack(_record), click: _record => this.viewTrack(_record),
iif: item => item.billStatus !== '1' && item.billStatus !== '6', iif: item => item.billStatus !== '1' && item.billStatus !== '6'
// acl: { ability: ['VEHICLE-LIST-view'] }, // acl: { ability: ['VEHICLE-LIST-view'] },
}, }
]
], }
},
]; ];
} }
initSTFloat() { initSTFloat() {
@ -526,15 +523,15 @@ resourceStatus: any;
buttons: [ buttons: [
{ {
text: '查看', text: '查看',
click: (_record) => this.FloatView(_record), click: _record => this.FloatView(_record)
}, },
{ {
text: '撤销', text: '撤销',
click: (_record) => this.revoke(_record), click: _record => this.revoke(_record),
iif: item => item.handleStatus === '1' || item.handleStatus === 1, iif: item => item.handleStatus === '1' || item.handleStatus === 1
}, }
], ]
}, }
]; ];
} }
initSTFloatView() { initSTFloatView() {
@ -552,16 +549,8 @@ resourceStatus: any;
index: 'amountAfterChange', index: 'amountAfterChange',
render: 'amountAfterChange' render: 'amountAfterChange'
}, },
{ title: '变更值', { title: '变更值', index: 'amountchangeValue', render: 'amountchangeValue', width: '120px', className: 'text-center' },
index: 'amountchangeValue', { title: '变更后', index: 'amountBeforeChange', render: 'amountBeforeChange', width: '120px', className: 'text-center' }
render: 'amountchangeValue',
width: '120px',
className: 'text-center' },
{ title: '变更后',
index: 'amountBeforeChange',
render: 'amountBeforeChange',
width: '120px',
className: 'text-center' }
]; ];
} }
// 获取城市列表 // 获取城市列表
@ -584,7 +573,7 @@ resourceStatus: any;
// this.sf1.setValue('/enterpriseProjectId', this.enterpriseProjectIds); // this.sf1.setValue('/enterpriseProjectId', this.enterpriseProjectIds);
// } // }
}); });
} }
/** /**
* 查询字段个数 * 查询字段个数
*/ */
@ -599,7 +588,7 @@ resourceStatus: any;
this.sf?.setValue('/_$expand', this._$expand); this.sf?.setValue('/_$expand', this._$expand);
} }
tabChange(item: any) { tabChange(item: any) {
console.log(item) console.log(item);
} }
/** /**
* 重置表单 * 重置表单
@ -618,11 +607,8 @@ resourceStatus: any;
/** /**
* 导入货源 * 导入货源
*/ */
importGoodsSource() { importGoodsSource() {}
audit(item: any) {}
}
audit(item: any) {
}
/* /*
* 审核关闭弹窗 * 审核关闭弹窗
@ -631,72 +617,71 @@ resourceStatus: any;
查看评价: 3 查看评价: 3
*/ */
handleCancel(type: string) { handleCancel(type: string) {
console.log(type) console.log(type);
if(type === '0') { if (type === '0') {
this.isVisible = false this.isVisible = false;
} else if(type === '1') { } else if (type === '1') {
this.isVisibleView = false this.isVisibleView = false;
} else if(type === '2') { } else if (type === '2') {
this.isVisibleEvaluate = false this.isVisibleEvaluate = false;
} }
} }
OpenPrice(value: any) { OpenPrice(value: any) {
this.changeId = value.id; this.changeId = value.id;
this.isVisible = true this.isVisible = true;
} }
/** /**
* 浮动费用查看 * 浮动费用查看
*/ */
FloatView(item: any) { FloatView(item: any) {
console.log(item) console.log(item);
this.changeViewId = item.id; 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.ViewCause = res;
}) });
this.isVisibleView = true this.isVisibleView = true;
} }
/** /**
*查看评价 *查看评价
*/ */
viewEvaluate(item: any) { viewEvaluate(item: any) {
console.log(item) console.log(item);
this.isVisibleEvaluate = true this.isVisibleEvaluate = true;
const params = { const params = {
businessCode: item.billCode, businessCode: item.billCode,
evaluateUserId: item.shipperAppUserId, evaluateUserId: item.shipperAppUserId
} };
const params2 = { const params2 = {
businessCode: item.billCode, businessCode: item.billCode,
evaluateUserId: item.shipperAppUserId, evaluateUserId: item.shipperAppUserId
} };
this.service.request(this.service.$api_getBillEvaluateByShipper, params).subscribe(res => { this.service.request(this.service.$api_getBillEvaluateByShipper, params).subscribe(res => {
console.log(res) console.log(res);
this.shipList = res.evaluateInfos this.shipList = res.evaluateInfos;
}); });
this.service.request(this.service.$api_getBillEvaluateDriverByShipper, params2).subscribe(res => { this.service.request(this.service.$api_getBillEvaluateDriverByShipper, params2).subscribe(res => {
console.log(res) console.log(res);
this.diverList = res.evaluateInfos this.diverList = res.evaluateInfos;
}); });
} }
/** /**
*变更运费 *变更运费
*/ */
updateFreight(item: any) { updateFreight(item: any) {
console.log(item?.isFreightChangeApplication) console.log(item?.isFreightChangeApplication);
this.service.request(this.service.$api_get_getFreightChangeWholeDetail, { id: item.id }).subscribe(data => { this.service.request(this.service.$api_get_getFreightChangeWholeDetail, { id: item.id }).subscribe(data => {
if (data) { if (data) {
const modal = this.modal.create({ const modal = this.modal.create({
nzTitle: '变更运费', nzTitle: '变更运费',
nzWidth: 580, nzWidth: 580,
nzContent: VehicleUpdateFreightComponent, nzContent: VehicleUpdateFreightComponent,
nzComponentParams: { data: { ...data, id: item.id,isFreightChangeApplication: item?.isFreightChangeApplication } }, nzComponentParams: { data: { ...data, id: item.id, isFreightChangeApplication: item?.isFreightChangeApplication } },
nzFooter: null, nzFooter: null
}); });
modal.afterClose.subscribe((res: Boolean) => { modal.afterClose.subscribe((res: Boolean) => {
if(res) { if (res) {
this.st.load(); this.st.load();
this.getGoodsSourceStatistical() this.getGoodsSourceStatistical();
} }
}); });
} }
@ -710,21 +695,21 @@ resourceStatus: any;
this.selectedRows.forEach(item => { this.selectedRows.forEach(item => {
params.push(item.id); params.push(item.id);
}); });
if(params.length === 0) { if (params.length === 0) {
this.service.msgSrv.error('请先选择订单!') this.service.msgSrv.error('请先选择订单!');
return return;
} }
const modal = this.modal.create({ const modal = this.modal.create({
nzTitle: '修改附加费率', nzTitle: '修改附加费率',
nzWidth: 600, nzWidth: 600,
nzContent: VehicleModifyRateComponent, nzContent: VehicleModifyRateComponent,
nzComponentParams: { data: { ids: params } }, nzComponentParams: { data: { ids: params } },
nzFooter: null, nzFooter: null
}); });
modal.afterClose.subscribe((result) => { modal.afterClose.subscribe(result => {
if (result) { if (result) {
this.st.load(1); this.st.load(1);
this.getGoodsSourceStatistical() this.getGoodsSourceStatistical();
} }
}); });
} }
@ -740,21 +725,21 @@ resourceStatus: any;
this.selectedRows.forEach(item => { this.selectedRows.forEach(item => {
params2.push(item.enterpriseInfoId); params2.push(item.enterpriseInfoId);
}); });
if(params.length === 0) { if (params.length === 0) {
this.service.msgSrv.error('请先选择订单!') this.service.msgSrv.error('请先选择订单!');
return return;
} }
const modal = this.modal.create({ const modal = this.modal.create({
nzTitle: '修改网络货运人', nzTitle: '修改网络货运人',
nzWidth: 600, nzWidth: 600,
nzContent: VehicleFreightPeopleComponent, nzContent: VehicleFreightPeopleComponent,
nzComponentParams: { data: { ids: params, enterpriseInfoIds: params2, } }, nzComponentParams: { data: { ids: params, enterpriseInfoIds: params2 } },
nzFooter: null, nzFooter: null
}); });
modal.afterClose.subscribe((result) => { modal.afterClose.subscribe(result => {
if (result) { if (result) {
this.st.load(1); this.st.load(1);
this.getGoodsSourceStatistical() this.getGoodsSourceStatistical();
} }
}); });
} }
@ -766,16 +751,16 @@ resourceStatus: any;
this.selectedRows.forEach(item => { this.selectedRows.forEach(item => {
params.push(item.id); params.push(item.id);
}); });
if(params.length === 0) { if (params.length === 0) {
this.service.msgSrv.error('请先选择订单!') this.service.msgSrv.error('请先选择订单!');
return return;
} }
const modal = this.modal.create({ const modal = this.modal.create({
nzTitle: '修改车队长', nzTitle: '修改车队长',
nzWidth: 900, nzWidth: 900,
nzContent: VehicleModifyCaptainComponent, nzContent: VehicleModifyCaptainComponent,
nzComponentParams: { data: { ids: params, } }, nzComponentParams: { data: { ids: params } },
nzFooter: null, nzFooter: null
// nzOnOk: sin => { // nzOnOk: sin => {
// this.service.request(this.service.$api_change_bulk, { billId: item.id, ...sin.sf.value }).subscribe(res => { // this.service.request(this.service.$api_change_bulk, { billId: item.id, ...sin.sf.value }).subscribe(res => {
// if (res) { // if (res) {
@ -787,10 +772,10 @@ resourceStatus: any;
// return false; // return false;
// } // }
}); });
modal.afterClose.subscribe((result) => { modal.afterClose.subscribe(result => {
if (result) { if (result) {
this.st.load(1); this.st.load(1);
this.getGoodsSourceStatistical() this.getGoodsSourceStatistical();
} }
}); });
} }
@ -813,11 +798,11 @@ resourceStatus: any;
this.modal.confirm({ this.modal.confirm({
nzTitle: '是否确定立即撤销费用变更!</i>', nzTitle: '是否确定立即撤销费用变更!</i>',
nzOnOk: () => nzOnOk: () =>
this.service.request(this.service.$api_get_revokeChangeRecord, { id: item.id}).subscribe((res) => { this.service.request(this.service.$api_get_revokeChangeRecord, { id: item.id }).subscribe(res => {
console.log(res) console.log(res);
if(res) { if (res) {
this.service.msgSrv.success('撤销成功!') this.service.msgSrv.success('撤销成功!');
this.stFloat.reload() this.stFloat.reload();
} }
}) })
}); });
@ -829,36 +814,36 @@ resourceStatus: any;
nzTitle: '<b>确定取消该订单吗?</b>', nzTitle: '<b>确定取消该订单吗?</b>',
nzContent: `<b>取消后无法恢复,请确认</b>`, nzContent: `<b>取消后无法恢复,请确认</b>`,
nzOnOk: () => 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) { if (res === true) {
this.service.msgSrv.success('操作成功!'); this.service.msgSrv.success('操作成功!');
this.st.load(1); this.st.load(1);
this.getGoodsSourceStatistical() this.getGoodsSourceStatistical();
this.initST(); this.initST();
} }
}),
}) })
});
} }
userAction() { userAction() {
let params: any[] = []; let params: any[] = [];
if (this.selectedRows.length <= 0) { if (this.selectedRows.length <= 0) {
this.service.msgSrv.warning("请选择需要签收的订单!") this.service.msgSrv.warning('请选择需要签收的订单!');
return; return;
} }
let flag = true; let flag = true;
this.selectedRows.forEach(item => { this.selectedRows.forEach(item => {
if(item.billStatus !=='4'){ if (item.billStatus !== '4') {
this.service.msgSrv.warning("存在非待签收状态订单,无法签收!") this.service.msgSrv.warning('存在非待签收状态订单,无法签收!');
flag = false; flag = false;
} }
params.push(item.id); params.push(item.id);
}); });
if(!flag) return; if (!flag) return;
this.service.request(this.service.$api_get_batchSignWholeOrder, params).subscribe(res => { this.service.request(this.service.$api_get_batchSignWholeOrder, params).subscribe(res => {
if (res) { if (res) {
console.log(res); console.log(res);
this.st.load(1); this.st.load(1);
this.getGoodsSourceStatistical() this.getGoodsSourceStatistical();
} }
}); });
} }
@ -880,7 +865,7 @@ resourceStatus: any;
nzFooter: null nzFooter: null
}); });
modalRef.afterClose.subscribe((res: boolean) => { modalRef.afterClose.subscribe((res: boolean) => {
if(res) { if (res) {
this.resetSF; this.resetSF;
this.st.load(); this.st.load();
} }
@ -895,12 +880,12 @@ resourceStatus: any;
nzContent: OneCarOrderViewtrackComponent, nzContent: OneCarOrderViewtrackComponent,
nzWidth: '800px', nzWidth: '800px',
nzComponentParams: { nzComponentParams: {
i: item, i: item
}, },
nzFooter: null nzFooter: null
}); });
modalRef.afterClose.subscribe((res: boolean) => { modalRef.afterClose.subscribe((res: boolean) => {
if(res) { if (res) {
} }
}); });
} }

View File

@ -16,7 +16,7 @@
</st> </st>
</div> </div>
<div style="flex: 1;" > <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>
</div> </div>
</nz-card> </nz-card>

View File

@ -4,7 +4,7 @@
* @Author : Shiming * @Author : Shiming
* @Date : 2021-12-03 15:31:52 * @Date : 2021-12-03 15:31:52
* @LastEditors : Shiming * @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 * @FilePath : \\tms-obc-web\\src\\app\\routes\\order-management\\services\\order-management.service.ts
* Copyright (C) 2022 huzhenhong. All rights reserved. * 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_searchAdditionalRateBatch = '/api/sdc/billOperate/searchAdditionalRateBatch';
// 风险异常
public $api_listBillComplianceAbnormalByBillId = '/api/sdc/billCompliance/listBillComplianceAbnormalByBillId';
// 异常预警
public $api_getAbnormalWarningByBillId = '/api/sdc/abnormalWarning/getAbnormalWarningByBillId';
getDictByKey(dictKey: string) { getDictByKey(dictKey: string) {
const params = { dictKey: dictKey }; const params = { dictKey: dictKey };
return this.request(this.$api_getDictValue, params); return this.request(this.$api_getDictValue, params);

View File

@ -44,7 +44,7 @@
</nz-card> </nz-card>
<ng-template #extraTemplate> <ng-template #extraTemplate>
<div> <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> <button (click)="releaseGoods()" nz-button nzType="primary" acl [acl-ability]="['SUPPLY-INDEX-bulkUndertakesToSupply']">代发货源</button>
</div> </div>
</ng-template> </ng-template>

View File

@ -4,7 +4,7 @@
* @Author : Shiming * @Author : Shiming
* @Date : 2022-01-12 10:52:50 * @Date : 2022-01-12 10:52:50
* @LastEditors : Shiming * @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 * @FilePath : \\tms-obc-web\\src\\app\\routes\\supply-management\\components\\vehicle\\vehicle.component.html
* Copyright (C) 2022 huzhenhong. All rights reserved. * Copyright (C) 2022 huzhenhong. All rights reserved.
--> -->
@ -97,7 +97,7 @@
</nz-card> </nz-card>
<ng-template #extraTemplate> <ng-template #extraTemplate>
<div> <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 (click)="releaseGoods()" nz-button nzType="primary" acl [acl-ability]="['SUPPLY-INDEX-vehicleUndertakesToSupply']"
>代发货源</button >代发货源</button
> >

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -236,7 +236,7 @@
</st> </st>
</div> </div>
<div nz-col [nzSpan]="12"> <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>
</div> </div>
</nz-card> </nz-card>

View File

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

View File

@ -216,7 +216,7 @@
</st> </st>
</div> </div>
<div nz-col [nzSpan]="12"> <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>
</div> </div>
</nz-card> </nz-card>

View File

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

View File

@ -9,3 +9,7 @@
* Copyright (C) 2022 huzhenhong. All rights reserved. * Copyright (C) 2022 huzhenhong. All rights reserved.
--> -->
<div class="map-container" id="container" tabindex="0" [style]="{width: mapWidth, height: mapHeight}"></div> <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 AMapLoader from '@amap/amap-jsapi-loader';
import { Component, Input, OnChanges, OnInit, Output, SimpleChanges, EventEmitter, OnDestroy } from '@angular/core'; import { Component, Input, OnChanges, OnInit, Output, SimpleChanges, EventEmitter, OnDestroy } from '@angular/core';
import { amapConf } from '@conf/amap.config'; import { amapConf } from '@conf/amap.config';
import { InputNumber } from '@delon/util';
import { throwError } from 'rxjs'; import { throwError } from 'rxjs';
import { BaseService } from 'src/app/shared/services'; import { BaseService } from 'src/app/shared/services';
import { AmapService, InfoItem, MapList, PathList, POI } from '../amap.service';
declare var AMap: any; declare var AMap: any;
declare var AMapUI: any; declare var AMapUI: any;
declare var Loca: any; declare var Loca: any;
@ -21,41 +23,52 @@ export class AmapPathSimplifierComponent implements OnInit, OnChanges, OnDestroy
infoWindow: any; infoWindow: any;
markerList: any; markerList: any;
SimpleMarker: any; SimpleMarker: any;
// 简单路径信息
@Input() @Input()
pathList: any = []; mapList: MapList[] = [];
// 完整路线图信息
@Input()
pathList: PathList[] = [];
// 当前选中路线图下标
@Input() @Input()
selectedIndex = 0; selectedIndex = 0;
// 巡航倍数
@InputNumber()
navSpeed = 1;
// 标点数组
@Input()
pois: POI[] = [];
private _pois: any = [];
@Input() @Input()
mapWidth = '800px'; mapWidth = '800px';
@Input() MapList: any;
@Input() @Input()
mapHeight = '500px'; mapHeight = '500px';
@Output() @Output()
readonly clcikPointEvent = new EventEmitter<any>(); readonly clcikPointEvent = new EventEmitter<any>();
@Input() constructor(public service: BaseService, private amapService: AmapService) {}
pois: any = [];
private _pois: any = [];
constructor(public service: BaseService) {}
ngOnChanges(changes: SimpleChanges): void { ngOnChanges(changes: SimpleChanges): void {
// 路线图变更: 设置路线图, 指定路线图
if (changes?.pathList?.currentValue && this?.pathSimplifierIns) { if (changes?.pathList?.currentValue && this?.pathSimplifierIns) {
this.setData(changes.pathList?.currentValue); this.setData(changes.pathList?.currentValue);
this.setPathIndex(this.selectedIndex); 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 = [ this.pathList = [
{ {
name: '路线1', name: '路线1',
points: changes.MapList?.currentValue points: changes.mapList?.currentValue
} }
]; ];
this.setData(this.pathList); this.setData(this.pathList);
this.setPathIndex(this.selectedIndex); 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) { if (changes?.pois?.currentValue) {
// console.log(this.pois); // console.log(this.pois);
this._pois = changes?.pois?.currentValue; this._pois = changes?.pois?.currentValue;
@ -68,11 +81,13 @@ export class AmapPathSimplifierComponent implements OnInit, OnChanges, OnDestroy
this.mapInit(); this.mapInit();
} }
ngOnDestroy(): void { ngOnDestroy(): void {
// 销毁地图数据
if (this.aMap) { if (this.aMap) {
this.aMap.destroy(); this.aMap.destroy();
} }
} }
/** 地图初始化 */
mapInit() { mapInit() {
AMapLoader.load({ AMapLoader.load({
key: CONFIG.key, key: CONFIG.key,
@ -94,14 +109,15 @@ export class AmapPathSimplifierComponent implements OnInit, OnChanges, OnDestroy
}); });
this.aMap.on('complete', () => { this.aMap.on('complete', () => {
// this.service.msgSrv.info('地图加载完成 !');
// 信息窗口 // 信息窗口
this.infoWindow = new AMap.InfoWindow({ this.infoWindow = new AMap.InfoWindow({
offset: new AMap.Pixel(0, -40) offset: new AMap.Pixel(0, -40)
}); });
// 初始化定位工具
this.geocoder = new AMap.Geocoder({ this.geocoder = new AMap.Geocoder({
radius: 1000 //范围默认500 radius: 500 //范围默认500
}); });
// this.service.msgSrv.info('地图加载完成 !');
this.pathInit(); this.pathInit();
this.setPOIS(); this.setPOIS();
}); });
@ -111,34 +127,20 @@ export class AmapPathSimplifierComponent implements OnInit, OnChanges, OnDestroy
}); });
} }
/** 初始化路径工具 */
pathInit() { pathInit() {
this.pathSimplifierIns = new AMapUI.PathSimplifier({ this.pathSimplifierIns = new AMapUI.PathSimplifier({
zIndex: 100, zIndex: 100,
//autoSetFitView:false, //autoSetFitView:false,
map: this.aMap, //所属的地图实例 map: this.aMap,
// 重组路径数据
getPath: function (pathData: any, pathIndex: any) { getPath: (pathData: PathList, pathIndex: number) => pathData.points.map(points => points.lnglat),
var points = pathData.points, // 鼠标悬浮事件
lnglatList = []; getHoverTitle: (pathData: PathList, pathIndex: number, pointIndex: number) => '',
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 '';
},
renderOptions: { renderOptions: {
renderAllPointsIfNumberBelow: 10 //绘制路线节点,如不需要可设置为-1 renderAllPointsIfNumberBelow: 20 //绘制路线节点,如不需要可设置为-1
} }
}); });
(window as any).pathSimplifierIns = this.pathSimplifierIns;
this.setData(this.pathList); this.setData(this.pathList);
if (this.pathList.length > 0) { 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.pathSimplifierIns.on('pointClick', (e: any, info: any) => {
this.clcikPointEvent.emit({ e, info }); 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() { setPOIS() {
AMapUI.loadUI(['misc/MarkerList', 'overlay/SimpleMarker'], (MarkerList: any, SimpleMarker: any) => { AMapUI.loadUI(['misc/MarkerList', 'overlay/SimpleMarker'], (MarkerList: any, SimpleMarker: any) => {
this.markerList = new MarkerList({ this.markerList = new MarkerList({
//关联的map对象 //关联的map对象
map: this.aMap, map: this.aMap,
//返回数据项的位置信息需要是AMap.LngLat实例或者是经纬度数组比如[116.789806, 39.904989] //返回数据项的位置信息需要是AMap.LngLat实例或者是经纬度数组比如[116.789806, 39.904989]
getPosition: (dataItem: any) => { getPosition: (dataItem: POI) => dataItem.position,
return dataItem.position;
},
//返回数据项对应的Marker //返回数据项对应的Marker
getMarker: (dataItem: any, context: any, recycledMarker: any) => { getMarker: (dataItem: POI, context: any, recycledMarker: any) => {
//存在可回收利用的marker //存在可回收利用的marker
if (recycledMarker) { if (recycledMarker) {
//直接更新内容返回 //直接更新内容返回
recycledMarker.setIconLabel(context.id); recycledMarker.setIconLabel(context.id);
recycledMarker.setIconStyle(dataItem.iconStyle); recycledMarker.setIconStyle(dataItem.color);
return recycledMarker; return recycledMarker;
} }
this.SimpleMarker = SimpleMarker; this.SimpleMarker = SimpleMarker;
@ -189,7 +205,7 @@ export class AmapPathSimplifierComponent implements OnInit, OnChanges, OnDestroy
}); });
}, },
//返回数据项对应的infoWindow //返回数据项对应的infoWindow
getInfoWindow: (dataItem: any, context: any, recycledInfoWindow: any) => { getInfoWindow: (dataItem: POI, context: any, recycledInfoWindow: any) => {
this.selectedPOI(dataItem); this.selectedPOI(dataItem);
return null; 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); this.pathSimplifierIns.setData(pathList);
} }
/**
* 指定路线图
* @param index
*/
setPathIndex(index: number) { setPathIndex(index: number) {
this.pathSimplifierIns.setSelectedPathIndex(index); this.pathSimplifierIns.setSelectedPathIndex(index);
this.startNav(); this.startNav();
} }
/**
* 开启巡航
*/
startNav() { startNav() {
if (this.navigator) { this.navigator = this.pathSimplifierIns?.createPathNavigator(this.selectedIndex, {
this.navigator.start();
} else {
this.navigator = this.pathSimplifierIns?.createPathNavigator(0, {
loop: true, //循环播放 loop: true, //循环播放
speed: 1000000 //巡航速度,单位千米/小时 speed: 500000 * this.navSpeed //巡航速度,单位千米/小时
}); });
this.navigator?.start(); 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[]) { getPoiByPositon(position: string[]) {
this.geocoder.getAddress(position, (status: any, result: any) => { this.geocoder.getAddress(position, (status: any, result: any) => {
if (status === 'complete' && result.info === 'OK') { if (status === 'complete' && result.info === 'OK') {
@ -232,7 +277,6 @@ export class AmapPathSimplifierComponent implements OnInit, OnChanges, OnDestroy
if (this.markerList) { if (this.markerList) {
this.markerList.render(this._pois); 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) { selectedPOI(infoItem: InfoItem) {
this.infoWindow.setContent(`地址: <pre>${location.title}</pre>`); this.infoWindow.setContent(infoItem.content || `地址: <pre>${infoItem.title}</pre>`);
this.infoWindow.open(this.aMap, location.position); this.infoWindow.open(this.aMap, infoItem.position);
this.infoWindow.setPosition(location.position); this.infoWindow.setPosition(infoItem.position);
this.aMap.setCenter(location.position); // 地图定位居中
} this.aMap.setCenter(infoItem.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
});
});
} }
} }
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 { Observable, Subject, throwError } from 'rxjs';
import AMapLoader from '@amap/amap-jsapi-loader'; import AMapLoader from '@amap/amap-jsapi-loader';
import { amapConf } from '@conf/amap.config'; import { amapConf } from '@conf/amap.config';
import { formatDate } from '@angular/common';
import { DateTimePickerUtil } from '@delon/util';
declare var AMap: any; declare var AMap: any;
declare var AMapUI: any;
const CONFIG = amapConf; const CONFIG = amapConf;
@Injectable({ @Injectable({
@ -82,4 +85,59 @@ export class AmapService {
return this.currentSub; 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 * @Author : Shiming
* @Date : 2022-01-10 16:06:17 * @Date : 2022-01-10 16:06:17
* @LastEditors : Shiming * @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 * @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. * Copyright (C) 2022 huzhenhong. All rights reserved.
*/ */
@ -34,6 +34,8 @@ export class DynamicSettingModalComponent implements OnInit {
@Input() @Input()
extendType!: string; extendType!: string;
@Input() @Input()
spareBusinessId!: string;
@Input()
businessId!: string; businessId!: string;
@Input() @Input()
configvalue!: string; configvalue!: string;
@ -54,7 +56,8 @@ export class DynamicSettingModalComponent implements OnInit {
.request('/api/mdc/pbc/sysConfigItemExtend/getSysConfigExtend', { .request('/api/mdc/pbc/sysConfigItemExtend/getSysConfigExtend', {
configFullKey: this.configFullKey, configFullKey: this.configFullKey,
extendType: this.extendType, extendType: this.extendType,
businessId: this.businessId businessId: this.businessId,
spareBusinessId: this.spareBusinessId,
}) })
.pipe( .pipe(
map((res: Array<any>) => { 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 { NzTypographyModule } from 'ng-zorro-antd/typography';
import { NzSwitchModule } from 'ng-zorro-antd/switch'; import { NzSwitchModule } from 'ng-zorro-antd/switch';
import { NzImageModule } from 'ng-zorro-antd/image'; import { NzImageModule } from 'ng-zorro-antd/image';
import { NzDrawerModule } from 'ng-zorro-antd/drawer';
export const SHARED_ZORRO_MODULES = [ export const SHARED_ZORRO_MODULES = [
NzButtonModule, NzButtonModule,
NzGridModule, NzGridModule,
@ -87,5 +88,6 @@ export const SHARED_ZORRO_MODULES = [
NzAffixModule, NzAffixModule,
NzTypographyModule, NzTypographyModule,
NzSwitchModule, NzSwitchModule,
NzImageModule NzImageModule,
NzDrawerModule
]; ];

View File

@ -10,7 +10,7 @@
width : 18px; width : 18px;
fill : currentColor; fill : currentColor;
overflow : hidden; overflow : hidden;
font-size: 18px !important; font-size : 18px !important;
color : #ffffff; color : #ffffff;
margin-right: 10px; margin-right: 10px;
} }
@ -48,11 +48,12 @@ input[type="number"] {
word-break: break-all; word-break: break-all;
word-wrap : break-word; word-wrap : break-word;
} }
st { st {
.block-td { .block-td {
.ant-divider-vertical { .ant-divider-vertical {
display: none; display : none;
margin: 0; margin : 0;
border-left: none; border-left: none;
} }
@ -62,4 +63,8 @@ st {
} }
} }
} }
} }
nz-range-picker {
width: 100%;
}

View File

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