This commit is contained in:
Taric Xin
2021-12-15 16:32:11 +08:00
parent 3485744f47
commit 7ec9e03984
9 changed files with 563 additions and 218 deletions

View File

@ -2,6 +2,7 @@ import { HttpClient } from '@angular/common/http';
import { Inject, Injectable } from '@angular/core'; import { Inject, Injectable } from '@angular/core';
import { ACLService } from '@delon/acl'; import { ACLService } from '@delon/acl';
import { MenuService, SettingsService, TitleService, _HttpClient } from '@delon/theme'; import { MenuService, SettingsService, TitleService, _HttpClient } from '@delon/theme';
import { EAUserService } from '@shared';
import { NzSafeAny } from 'ng-zorro-antd/core/types'; import { NzSafeAny } from 'ng-zorro-antd/core/types';
import { NzIconService } from 'ng-zorro-antd/icon'; import { NzIconService } from 'ng-zorro-antd/icon';
import { Observable, zip } from 'rxjs'; import { Observable, zip } from 'rxjs';
@ -24,6 +25,7 @@ export class StartupService {
private aclService: ACLService, private aclService: ACLService,
private titleService: TitleService, private titleService: TitleService,
private httpClient: _HttpClient, private httpClient: _HttpClient,
private userSrv: EAUserService,
private coreSrv: CoreService private coreSrv: CoreService
) { ) {
iconSrv.addIcon(...ICONS_AUTO, ...ICONS); iconSrv.addIcon(...ICONS_AUTO, ...ICONS);
@ -94,7 +96,7 @@ export class StartupService {
const appData = this.httpClient.get(`assets/mocks/app-data.json`).pipe(map((res: any) => res.app)); const appData = this.httpClient.get(`assets/mocks/app-data.json`).pipe(map((res: any) => res.app));
// 用户数据 // 用户数据
const userData = this.httpClient.get('assets/mocks/user-data.json').pipe(map((res: any) => res.user)); const userData = this.httpClient.post(this.userSrv.$api_get_user_by_token,{}).pipe(map((res: any) => res.data));
// 菜单数据 // 菜单数据
const menuData = this.httpClient.get('assets/mocks/menu-data.json').pipe(map((res: any) => res.menu)); const menuData = this.httpClient.get('assets/mocks/menu-data.json').pipe(map((res: any) => res.menu));

View File

@ -1,66 +1,66 @@
<ng-container> <!-- 页头 -->
<!-- 页头 --> <page-header-wrapper [logo]="logo" [title]="'司机详情'" [content]="content">
<page-header-wrapper [logo]="logo" [title]="'司机详情'" [content]="content"> <ng-template #logo>
<ng-template #logo> <button nz-button nz-tooltip nzTooltipTitle="返回上一页" (click)="goBack()">
<button nz-button nz-tooltip nzTooltipTitle="返回上一页" (click)="goBack()"> <i nz-icon nzType="left" nzTheme="outline"></i>
<i nz-icon nzType="left" nzTheme="outline"></i> </button>
</button> </ng-template>
</ng-template> <ng-template #content>
<ng-template #content> <nz-skeleton [nzLoading]="service.http.loading">
<nz-skeleton [nzLoading]="service.http.loading"> <div class="user-info">
<div class="user-info"> <img [src]="userDetail?.avatar" />
<img [src]="userDetail?.avatar" /> <div style="flex: 1">
<div style="flex: 1"> <div style="display: flex;">
<div style="display: flex;"> <p style="padding-right: 80px; width: 400px;">{{ userDetail?.name }}</p>
<p style="padding-right: 80px; width: 400px;">{{ userDetail?.name }}</p> <nz-badge nzStatus="error" nzText="正常" *ngIf="userDetail?.stateLocked"></nz-badge>
<nz-badge nzStatus="error" nzText="正常" *ngIf="userDetail?.stateLocked"></nz-badge> <nz-badge nzStatus="warning" nzText="冻结" *ngIf="!userDetail?.stateLocked"></nz-badge>
<nz-badge nzStatus="warning" nzText="冻结" *ngIf="!userDetail?.stateLocked"></nz-badge> </div>
</div> <div style="display: flex;">
<div style="display: flex;"> <p style="padding-right: 80px; width: 400px;">手机号:{{ userDetail?.phone }}
<p style="padding-right: 80px; width: 400px;">手机号:{{ userDetail?.phone }} </p>
</p> <p>注册时间:{{ userDetail?.createTime }}</p>
<p>注册时间:{{ userDetail?.createTime }}</p> </div>
</div>
<div style="float: right;margin-right: 24px;"> <div style="float: right;margin-right: 24px;">
<button [nzLoading]="service.http.loading" nz-button nzType="primary" nzGhost nz-popconfirm <button [nzLoading]="service.http.loading" nz-button nzType="primary" nzGhost nz-popconfirm
[nzPopconfirmTitle]="enable" (nzOnConfirm)="userAction(1)" nzPopconfirmPlacement="bottomRight"> [nzPopconfirmTitle]="enable" (nzOnConfirm)="userAction(1)" nzPopconfirmPlacement="bottomRight">
启用 启用
</button> </button>
<button [nzLoading]="service.http.loading" nz-button nzDanger nz-popconfirm [nzPopconfirmTitle]="frozen" <button [nzLoading]="service.http.loading" nz-button nzDanger nz-popconfirm [nzPopconfirmTitle]="frozen"
(nzOnConfirm)="userAction(0)" nzPopconfirmPlacement="bottomRight"> (nzOnConfirm)="userAction(0)" nzPopconfirmPlacement="bottomRight">
冻结 冻结
</button> </button>
</div>
</div> </div>
</div> </div>
</nz-skeleton>
</ng-template>
<ng-template #frozen>
<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">确定冻结该企业吗?
</div>
<div class="ant-popover-message-title ng-star-inserted">
停用后,该企业将被限制使用,不限于访问受限、无法发布货源等,请谨慎操作
</div>
</div> </div>
</ng-template> </nz-skeleton>
<ng-template #enable> </ng-template>
<div class="ant-popover-message">
<i nz-icon nzType="info-circle" nzTheme="fill"></i> <ng-template #frozen>
<div class="ant-popover-message-title ng-star-inserted self-ant-popover-title" style="font-size: 16px">确定启用该企业吗? <div class="ant-popover-message">
</div> <i nz-icon nzType="info-circle" nzTheme="fill"></i>
<div class="ant-popover-message-title ng-star-inserted"> <div class="ant-popover-message-title ng-star-inserted self-ant-popover-title" style="font-size: 16px">确定冻结该企业吗?
启用后,该企业将恢复正常使用功能,请再次确认
</div>
</div> </div>
</ng-template> <div class="ant-popover-message-title ng-star-inserted">
</page-header-wrapper> 停用后,该企业将被限制使用,不限于访问受限、无法发布货源等,请谨慎操作
</div>
</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">确定启用该企业吗?
</div>
<div class="ant-popover-message-title ng-star-inserted">
启用后,该企业将恢复正常使用功能,请再次确认
</div>
</div>
</ng-template>
</page-header-wrapper>
<nz-card [nzLoading]="service.http.loading"> <nz-card [nzLoading]="service.http.loading">
<div [class]="isEditUser?'edit-box':'readOnly-box'">
<sv-container col="2"> <sv-container col="2">
<sv-title>个人信息 <sv-title>个人信息
<label *ngIf="userIdentityDetail?.certificationStatus===1" style="color: #52c41a;"><i nz-icon <label *ngIf="userIdentityDetail?.certificationStatus===1" style="color: #52c41a;"><i nz-icon
@ -70,29 +70,46 @@
nzType="close-circle" nzTheme="fill" class="mr-xs"></i>驳回 nzType="close-circle" nzTheme="fill" class="mr-xs"></i>驳回
</label> </label>
<div style="float: right;"> <div style="float: right;">
<button nz-button nzType="default" nzDanger (click)="approveUser()" <ng-container *ngIf="isEditUser; else elseTemplate">
*ngIf="userIdentityDetail?.certificationStatus===0">审核通过</button> <button [nzLoading]="service.http.loading" nz-button (click)="reset(0)">
<button nz-button nzType="default" nzDanger (click)="rejectedUser()" 取消
*ngIf="userIdentityDetail?.certificationStatus===0">驳回审核</button> </button>
<button nz-button nzType="default" nzDanger *ngIf="userIdentityDetail?.certificationStatus!==1">修改</button> <button [nzLoading]="service.http.loading" nz-button nzDanger (click)="saveUser()">
保存
</button>
</ng-container>
<ng-template #elseTemplate>
<button nz-button nzType="default" nzDanger (click)="approveUser()"
*ngIf="userIdentityDetail?.certificationStatus===0">审核通过</button>
<button nz-button nzType="default" nzDanger (click)="rejectedUser()"
*ngIf="userIdentityDetail?.certificationStatus===0">驳回审核</button>
<button nz-button nzType="default" nzDanger (click)="ratify(0)">修改</button>
</ng-template>
</div> </div>
</sv-title> </sv-title>
<sv label="姓名"> <sv label="姓名">
{{ userIdentityDetail?.name }} <input nz-input type="text" [(ngModel)]="userIdentityDetail.name" [readonly]="!isEditUser"
[nzBorderless]="!isEditUser" [placeholder]="isEditUser?'':'-'">
</sv> </sv>
<sv label="身份证号"> <sv label="身份证号">
{{ userIdentityDetail?.certificateNumber }} <input nz-input type="text" [(ngModel)]="userIdentityDetail.certificateNumber" [readonly]="!isEditUser"
</sv> [nzBorderless]="!isEditUser" [placeholder]="isEditUser?'':'-'">
</sv-container> </sv>
<sv-container col="1"> <sv label="身份证照" col="1">
<sv label="企业授权函"> <div class="d-flex">
<app-imagelist <ng-container
[imgList]="[userIdentityDetail?.certificatePhotoFrontWatermark,userIdentityDetail?.certificatePhotoBackWatermark]"> *ngTemplateOutlet="uploadTemplate;context:{data:userIdentityDetail,status:isEditUser,key:'certificatePhotoFrontWatermark',key2:'certificatePhotoFront',hover:'certificateBackFront'}">
</app-imagelist> </ng-container>
<ng-container
*ngTemplateOutlet="uploadTemplate;context:{data:userIdentityDetail,status:isEditUser,key:'certificatePhotoBackWatermark',key2:'certificatePhotoBack',hover:'certificateBack'}">
</ng-container>
</div>
</sv> </sv>
</sv-container> </sv-container>
</div>
<nz-divider></nz-divider> <nz-divider></nz-divider>
<div [class]="isEditDriver?'edit-box':'readOnly-box'">
<sv-container col="3" class="mt16"> <sv-container col="3" class="mt16">
<sv-title>驾驶证信息 <sv-title>驾驶证信息
<label *ngIf="driverDetail?.approvalStatus===20" style="color: #52c41a;"><i nz-icon nzType="check-circle" <label *ngIf="driverDetail?.approvalStatus===20" style="color: #52c41a;"><i nz-icon nzType="check-circle"
@ -102,32 +119,49 @@
nzTheme="fill" class="mr-xs"></i>驳回 nzTheme="fill" class="mr-xs"></i>驳回
</label> </label>
<div style="float: right;"> <div style="float: right;">
<button nz-button nzType="default" nzDanger (click)="approveDriver()">审核通过</button> <ng-container *ngIf="isEditDriver;else editDriverButton">
<button nz-button nzType="default" nzDanger (click)="rejectedDriver()">驳回审核</button> <button [nzLoading]="service.http.loading" nz-button (click)="reset(1)">
<button nz-button nzType="default" *ngIf="driverDetail?.approvalStatus!==20" nzDanger 取消
(click)="ratify()">修改</button> </button>
<button [nzLoading]="service.http.loading" nz-button nzDanger (click)="saveDriver()">
保存
</button>
</ng-container>
<ng-template #editDriverButton>
<button *ngIf="driverDetail?.approvalStatus==10" nz-button nzType="default" nzDanger
(click)="approveDriver()">审核通过</button>
<button *ngIf="driverDetail?.approvalStatus==10" nz-button nzType="default" nzDanger
(click)="rejectedDriver()">驳回审核</button>
<button nz-button nzType="default" nzDanger (click)="ratify(1)">修改</button>
</ng-template>
</div> </div>
</sv-title> </sv-title>
<sv label="驾驶证号"> <sv label="驾驶证号">
{{ driverDetail?.licenseNo }} <input nz-input type="text" [(ngModel)]="driverDetail.licenseNo" [readonly]="!isEditDriver"
[nzBorderless]="!isEditDriver" [placeholder]="isEditDriver?'':'-'">
</sv> </sv>
<sv label="准驾车型"> <sv label="准驾车型">
{{ driverDetail?.driverModel }} <input nz-input type="text" [(ngModel)]="driverDetail.driverModel" [readonly]="!isEditDriver"
[nzBorderless]="!isEditDriver" [placeholder]="isEditDriver?'':'-'">
</sv> </sv>
<sv label="有效期起"> <sv label="有效期起">
{{ driverDetail?.validStartTime }} <nz-date-picker [(ngModel)]="driverDetail.validStartTime" [nzDisabled]="!isEditDriver"
[nzPlaceHolder]="isEditDriver?'':'-'" [nzBorderless]="!isEditDriver"
[nzSuffixIcon]="isEditDriver?'calendar':''"></nz-date-picker>
</sv> </sv>
</sv-container> <sv label="有效期至" col="3">
<sv-container col="2" class="mt16"> <nz-date-picker [(ngModel)]="driverDetail.validEndTime" [nzDisabled]="!isEditDriver" dateFormat="yyyy-MM-dd"
<sv label="有效期至"> [nzPlaceHolder]="isEditDriver?'':'-'" [nzBorderless]="!isEditDriver"
{{ driverDetail?.validEndTime }} [nzSuffixIcon]="isEditDriver?'calendar':''"></nz-date-picker>
<span *ngIf="driverDetail?.registrationCapital">万元</span>
</sv> </sv>
<sv label="驾驶证签发机关"> <sv label="驾驶证签发机关" col="2">
{{ driverDetail?.signingOrganization }} <input nz-input type="text" [(ngModel)]="driverDetail.signingOrganization" [readonly]="!isEditDriver"
[nzBorderless]="!isEditDriver" [placeholder]="isEditDriver?'':'-'">
</sv> </sv>
<sv label="驾驶证照片"> <sv label="驾驶证照片" col="1">
<app-imagelist [imgList]="[detailData?.certificatePhotoWatermark]"></app-imagelist> <ng-container
*ngTemplateOutlet="uploadTemplate;context:{data:driverDetail,status:isEditDriver,key:'certificatePhotoWatermark',key2:'certificatePhoto',hover:'driverCertificate'}">
</ng-container>
</sv> </sv>
</sv-container> </sv-container>
@ -142,101 +176,105 @@
</label> </label>
</sv-title> </sv-title>
<sv label="从业资格证号"> <sv label="从业资格证号">
{{ licenseDetail?.licenseNo }} <input nz-input type="text" [(ngModel)]="licenseDetail.licenseNo" [readonly]="!isEditDriver"
[nzBorderless]="!isEditDriver" [placeholder]="isEditDriver?'':'-'">
</sv> </sv>
<sv label="发证日期"> <sv label="发证日期">
{{ licenseDetail?.validStartTime }} <nz-date-picker [(ngModel)]="licenseDetail.validStartTime" [nzDisabled]="!isEditDriver"
[nzPlaceHolder]="isEditDriver?'':'-'" [nzBorderless]="!isEditDriver"
[nzSuffixIcon]="isEditDriver?'calendar':''"></nz-date-picker>
</sv> </sv>
<sv label="有效期至"> <sv label="有效期至">
{{ licenseDetail?.validEndTime }} <nz-date-picker [(ngModel)]="licenseDetail.validEndTime" [nzDisabled]="!isEditDriver"
</sv> [nzPlaceHolder]="isEditDriver?'':'-'" [nzBorderless]="!isEditDriver"
</sv-container> [nzSuffixIcon]="isEditDriver?'calendar':''"></nz-date-picker>
<sv-container col="1"> </sv>
<sv label="从业资格证照片"> <sv label="从业资格证照片" col="1">
<app-imagelist [imgList]="[licenseDetail?.certificatePhotoWatermark]"></app-imagelist> <ng-container
*ngTemplateOutlet="uploadTemplate;context:{data:licenseDetail,status:isEditDriver,key:'certificatePhotoWatermark',key2:'certificatePhoto',hover:'licenseCertificate'}">
</ng-container>
</sv> </sv>
</sv-container> </sv-container>
</div>
<nz-divider></nz-divider> <nz-divider></nz-divider>
<sv-container col="3" class="mt16"> <sv-container col="3" class="mt16">
<sv-title>载具信息</sv-title> <sv-title>载具信息</sv-title>
<ng-container *ngFor="let carDatail of carList"> <ng-container *ngFor="let carDatail of carList">
<sv label="车牌号"> <sv label="车牌号">
{{ carDatail?.carNo }} {{ carDatail?.carNo }}
</sv> </sv>
<sv label="车牌颜色"> <sv label="车牌颜色">
{{ carDatail?.carNoColor }} {{ carDatail?.carNoColor }}
</sv> </sv>
<sv label="车型"> <sv label="车型">
{{ carDatail?.carModel }} {{ carDatail?.carModel }}
</sv> </sv>
<sv label="车长"> <sv label="车长">
{{ carDatail?.carLength }} {{ carDatail?.carLength }}
</sv> </sv>
<sv label="是否为当前车辆"> <sv label="是否为当前车辆">
{{ carDatail?.isDefault?'是':'否' }} {{ carDatail?.isDefault?'是':'否' }}
</sv> </sv>
<sv label="自有载具"> <sv label="自有载具">
{{ carDatail?.isSelf?'否':'是' }} {{ carDatail?.isSelf?'否':'是' }}
</sv> </sv>
<sv label="行驶证照片" col="3"> <sv label="行驶证照片" col="3">
<app-imagelist <app-imagelist [imgList]="[carDatail?.certificatePhotoFrontWatermark,carDatail?.certificatePhotoBackWatermark]">
[imgList]="[carDatail?.certificatePhotoFrontWatermark,carDatail?.certificatePhotoBackWatermark]"> </app-imagelist>
</app-imagelist> </sv>
</sv> <sv label="道路运输证照片" col="3">
<sv label="道路运输证照片" col="3"> <app-imagelist [imgList]="[carDatail?.roadTransportPhotoWatermark]"></app-imagelist>
<app-imagelist [imgList]="[carDatail?.roadTransportPhotoWatermark]"></app-imagelist> </sv>
</sv> <sv label="车头照" col="3">
<sv label="车头照" col="3"> <app-imagelist [imgList]="[carDatail?.carFrontPhotoWatermark]"></app-imagelist>
<app-imagelist [imgList]="[carDatail?.carFrontPhotoWatermark]"></app-imagelist> </sv>
</sv> <nz-divider></nz-divider>
<nz-divider></nz-divider> </ng-container>
</ng-container>
</sv-container> </sv-container>
<sv-container col="3" class="mt-md"> <sv-container col="3" class="mt-md">
<sv-title>银行结算信息</sv-title> <sv-title>银行结算信息</sv-title>
<sv label="开户银行"> <sv label="开户银行">
{{ detailData?.name }} {{ detailData?.name }}
</sv> </sv>
<sv label="银行卡号"> <sv label="银行卡号">
{{ detailData?.certificateNumber }} {{ detailData?.certificateNumber }}
</sv> </sv>
</sv-container> </sv-container>
<nz-divider></nz-divider> <nz-divider></nz-divider>
<sv-container col="3" class="mt16"> <sv-container col="3" class="mt16">
<sv-title>服务评级</sv-title> <sv-title>服务评级</sv-title>
<sv label="服务评级"> <sv label="服务评级">
<nz-rate [ngModel]="2" nzDisabled></nz-rate> <nz-rate [ngModel]="2" nzDisabled></nz-rate>
</sv> </sv>
<sv label="运输效率"> <sv label="运输效率">
<nz-rate [ngModel]="2" nzDisabled></nz-rate> <nz-rate [ngModel]="2" nzDisabled></nz-rate>
</sv> </sv>
<sv label="运输安全"> <sv label="运输安全">
<nz-rate [ngModel]="2" nzDisabled></nz-rate> <nz-rate [ngModel]="2" nzDisabled></nz-rate>
</sv> </sv>
<sv label="服务质量"> <sv label="服务质量">
<nz-rate [ngModel]="2" nzDisabled></nz-rate> <nz-rate [ngModel]="2" nzDisabled></nz-rate>
</sv> </sv>
<sv label="客户满意度"> <sv label="客户满意度">
<nz-rate [ngModel]="2" nzDisabled></nz-rate> <nz-rate [ngModel]="2" nzDisabled></nz-rate>
</sv> </sv>
<sv label="车辆整洁程度"> <sv label="车辆整洁程度">
<nz-rate [ngModel]="2" nzDisabled></nz-rate> <nz-rate [ngModel]="2" nzDisabled></nz-rate>
</sv> </sv>
</sv-container> </sv-container>
<sv-container col="3" class="mt16"> <sv-container col="3" class="mt16">
<sv-title>关联企业</sv-title> <sv-title>关联企业</sv-title>
<!-- <st #st [bordered]="true" [columns]="columns" [data]="detailData.goodsList" [ngStyle]="{ margin: '1rem 0' }" <!-- <st #st [bordered]="true" [columns]="columns" [data]="detailData.goodsList" [ngStyle]="{ margin: '1rem 0' }"
multiSort size="small" [page]="{ show: false }"> multiSort size="small" [page]="{ show: false }">
</st> --> </st> -->
</sv-container> </sv-container>
</nz-card> </nz-card>
</ng-container>
<ng-template #redectModal> <ng-template #redectModal>
@ -267,3 +305,25 @@
</div> </div>
</div> </div>
</ng-template> </ng-template>
<ng-template #uploadTemplate let-data="data" let-status="status" let-key="key" let-key2="key2" let-hover="hover">
<nz-upload class="avatar-uploader" [nzAction]="uploadURl" nzName="multipartFile" nzListType="picture-card"
[nzShowUploadList]="false" nzFileType="image/png,image/jpeg,image/jpg,image/gif"
[nzDisabled]="!status || disabledUpload" (nzChange)="changeUpload($event,data,key,key2)">
<ng-container *ngIf="!data[key] && status">
<i class="upload-icon" nz-icon [nzType]="service.http.loading ? 'loading' : 'plus'"></i>
<div class="ant-upload-text">上传</div>
</ng-container>
<div *ngIf="data[key]" (mouseover)="data[hover]=true" (mouseleave)="data[hover]=false"
(click)="$event.cancelBubble=true" class="image-hover">
<img [src]="data[key]" style="width: 200px;height: 160px;" />
<div class="mask" *ngIf="data[hover] && status"></div>
<div class="mask-over" *ngIf="data[hover] && status">
<i nz-icon nzType="close-circle" nzTheme="fill" class="delete-icon" (click)="deleteImg(data,key,key2)"></i>
<div style="display: flex;align-items: center;">
<i nz-icon nzType="eye" nzTheme="fill" class="show-icon" (click)="showImg(data[key])"></i>
</div>
</div>
</div>
</nz-upload>
</ng-template>

View File

@ -1,4 +1,4 @@
@import '~@delon/theme/index'; @import '../../../less/edit.less';
:host { :host {
::ng-deep { ::ng-deep {

View File

@ -1,23 +1,30 @@
import { DatePipe } from '@angular/common';
import { Component, OnInit, ViewChild } from '@angular/core'; import { Component, OnInit, ViewChild } from '@angular/core';
import { ActivatedRoute } from '@angular/router'; import { ActivatedRoute } from '@angular/router';
import { apiConf } from '@conf/api.conf';
import { STColumn, STComponent } from '@delon/abc/st'; import { STColumn, STComponent } from '@delon/abc/st';
import { SFComponent, SFDateWidgetSchema, SFSchema, SFTagWidgetSchema, SFTextWidgetSchema, SFUISchema } from '@delon/form'; import { SFComponent, SFDateWidgetSchema, SFSchema, SFTagWidgetSchema, SFTextWidgetSchema, SFUISchema } from '@delon/form';
import { ModalHelper, _HttpClient } from '@delon/theme'; import { ModalHelper, _HttpClient } from '@delon/theme';
import { NzMessageService } from 'ng-zorro-antd/message'; import { NzMessageService } from 'ng-zorro-antd/message';
import { NzModalService } from 'ng-zorro-antd/modal'; import { NzModalService } from 'ng-zorro-antd/modal';
import { ImageViewComponent } from 'src/app/shared/components/imagelist';
import { UsermanageService } from '../../../services/usercenter.service'; import { UsermanageService } from '../../../services/usercenter.service';
@Component({ @Component({
selector: 'app-usercenter-components-driver-detail', selector: 'app-usercenter-components-driver-detail',
templateUrl: './detail.component.html', templateUrl: './detail.component.html',
styleUrls: ['./detail.component.less'] styleUrls: ['./detail.component.less'],
providers: [DatePipe]
}) })
export class UserCenterComponentsDriverDetailComponent implements OnInit { export class UserCenterComponentsDriverDetailComponent implements OnInit {
detailData: any; detailData: any;
userDetail: any; userDetail: any;
userIdentityDetail: any; userIdentityDetail: any = {};
driverDetail: any; tempalateUserIdentityDetail = { ...this.userIdentityDetail };
licenseDetail: any; driverDetail: any = {};
tempalateDriverData = { ...this.driverDetail };
licenseDetail: any = {};
tempalateLicenseDetail = { ...this.licenseDetail };
carList: any = []; carList: any = [];
@ViewChild('redectModal', { static: false }) @ViewChild('redectModal', { static: false })
@ -25,7 +32,18 @@ export class UserCenterComponentsDriverDetailComponent implements OnInit {
@ViewChild('rejectedDriverModal', { static: false }) @ViewChild('rejectedDriverModal', { static: false })
rejectedDriverModal!: any; rejectedDriverModal!: any;
approvalOpinion = ''; approvalOpinion = '';
constructor(private nzModalService: NzModalService, public service: UsermanageService, private route: ActivatedRoute) {}
isEditUser = false;
isEditDriver = false;
uploadURl = apiConf.waterFileUpload;
disabledUpload = false;
constructor(
private nzModalService: NzModalService,
public service: UsermanageService,
private route: ActivatedRoute,
private datePipe: DatePipe
) {}
ngOnInit() { ngOnInit() {
this.initData(); this.initData();
@ -49,34 +67,32 @@ export class UserCenterComponentsDriverDetailComponent implements OnInit {
.subscribe(res => { .subscribe(res => {
if (res) { if (res) {
this.userIdentityDetail = res; this.userIdentityDetail = res;
this.tempalateUserIdentityDetail = { ...this.userIdentityDetail };
} }
}); });
// 获取驾驶证信息 // 获取驾驶证信息
this.service this.service.request(this.service.$api_get_driver_license, { appUserId: this.route.snapshot.params.id }).subscribe(res => {
.request(this.service.$api_get_driver_license, { appUserId: this.route.snapshot.params.id }) if (res) {
.subscribe(res => { this.driverDetail = res;
if (res) { this.tempalateDriverData = { ...this.driverDetail };
this.driverDetail = res; }
} });
});
// 获取从业资格证信息 // 获取从业资格证信息
this.service this.service.request(this.service.$api_get_driver_practice_seniority, { appUserId: this.route.snapshot.params.id }).subscribe(res => {
.request(this.service.$api_get_driver_practice_seniority, { appUserId: this.route.snapshot.params.id }) if (res) {
.subscribe(res => { this.licenseDetail = res;
if (res) { this.tempalateLicenseDetail = { ...this.licenseDetail };
this.licenseDetail = res; }
} });
});
// 获取载具信息 // 获取载具信息
this.service // this.service.request(this.service.$api_get_driver_car_license, { appUserId: this.route.snapshot.params.id }).subscribe(res => {
.request(this.service.$api_get_driver_car_license, { appUserId: this.route.snapshot.params.id }) // if (res) {
.subscribe(res => { // this.carList = res;
if (res) { // }
this.carList = res; // });
}
});
} }
/** 启用/冻结司机 */
userAction(status: number) { userAction(status: number) {
this.nzModalService.warning({ this.nzModalService.warning({
nzTitle: status === 1 ? '确定启用该司机吗?' : '确定冻结该司机吗?', nzTitle: status === 1 ? '确定启用该司机吗?' : '确定冻结该司机吗?',
@ -88,16 +104,18 @@ export class UserCenterComponentsDriverDetailComponent implements OnInit {
}); });
} }
/** 审核通过个人信息 */
approveUser() { approveUser() {
this.nzModalService.confirm({ this.nzModalService.confirm({
nzTitle: '审核通过', nzTitle: '审核通过',
nzContent: `是否确认通过(姓名:${this.userDetail?.name})审核`, nzContent: `是否确认通过(姓名:${this.userIdentityDetail.name})审核`,
nzOnOk: () => { nzOnOk: () => {
this.adjuctUser({ auditStatus: 0, auditType: 0, identityId: this.userIdentityDetail?.id }, '审核通过'); this.adjuctUser({ auditStatus: 0, auditType: 0, identityId: this.userIdentityDetail?.id }, '审核通过');
} }
}); });
} }
/** 驳回个人信息 */
rejectedUser() { rejectedUser() {
this.approvalOpinion = ''; this.approvalOpinion = '';
this.nzModalService.create({ this.nzModalService.create({
@ -121,21 +139,24 @@ export class UserCenterComponentsDriverDetailComponent implements OnInit {
}); });
} }
/** 审核通过驾驶员信息 */
approveDriver() { approveDriver() {
this.nzModalService.confirm({ this.nzModalService.confirm({
nzTitle: '审核通过', nzTitle: '审核通过',
nzContent: `<p>驾驶证号:${this.driverDetail?.licenseNo}</p><p>从业资格证号:${this.licenseDetail?.licenseNo}</p><p>是否确认通过审核`, nzContent: `<p>驾驶证号:${this.driverDetail?.licenseNo}</p><p>从业资格证号:${this.licenseDetail?.licenseNo}</p><p>是否确认通过审核`,
nzOnOk: () => { nzOnOk: () => {
this.adjuctDriverLicense( this.adjuctDriverLicense(
{ {
auditStatus: 20, approvalStatus: 20,
appUserId: this.userDetail?.appUserId, appUserId: this.userDetail?.appUserId
}, },
'审核成功' '审核成功'
);} );
}
}); });
} }
/** 驳回驾驶员信息 */
rejectedDriver() { rejectedDriver() {
this.approvalOpinion = ''; this.approvalOpinion = '';
this.nzModalService.create({ this.nzModalService.create({
@ -147,7 +168,7 @@ export class UserCenterComponentsDriverDetailComponent implements OnInit {
} }
this.adjuctDriverLicense( this.adjuctDriverLicense(
{ {
auditStatus: 30, approvalStatus: 30,
appUserId: this.userDetail?.appUserId, appUserId: this.userDetail?.appUserId,
approvalOpinion: this.approvalOpinion approvalOpinion: this.approvalOpinion
}, },
@ -158,6 +179,7 @@ export class UserCenterComponentsDriverDetailComponent implements OnInit {
}); });
} }
/** 个人信息审核 */
private adjuctUser(params: any, msg: string) { private adjuctUser(params: any, msg: string) {
this.service.request(this.service.$api_approve_identity, { ...params }).subscribe(res => { this.service.request(this.service.$api_approve_identity, { ...params }).subscribe(res => {
if (res) { if (res) {
@ -167,6 +189,7 @@ export class UserCenterComponentsDriverDetailComponent implements OnInit {
}); });
} }
/** 驾驶员审核 */
private adjuctDriverLicense(params: any, msg: string) { private adjuctDriverLicense(params: any, msg: string) {
this.service.request(this.service.$api_approve_driver_license, { ...params }).subscribe(res => { this.service.request(this.service.$api_approve_driver_license, { ...params }).subscribe(res => {
if (res) { if (res) {
@ -176,7 +199,148 @@ export class UserCenterComponentsDriverDetailComponent implements OnInit {
}); });
} }
ratify() {} /**
* 开启修改
* @param type 修改类型
*/
ratify(type: number) {
if (type) {
this.isEditDriver = true;
} else {
this.isEditUser = true;
}
}
/**
* 需求修改
* @param type 修改类型
*/
reset(type: number) {
if (type) {
this.driverDetail = { ...this.tempalateDriverData };
this.licenseDetail = { ...this.tempalateLicenseDetail };
this.isEditDriver = false;
} else {
this.userIdentityDetail = { ...this.tempalateUserIdentityDetail };
this.isEditUser = false;
}
}
/**
* 修改驾驶证,从业资格证信息
*/
saveDriver() {
const driverDetail = this.driverDetail;
const licenseDetail = this.licenseDetail;
const params = {
userId: this.route.snapshot.params.id,
userDriverLicenseDTO: {
appUserId: driverDetail.appUserId,
certificatePhoto: driverDetail.certificatePhoto,
certificatePhotoWatermark: driverDetail.certificatePhotoWatermark,
driverModel: driverDetail.driverModel,
id: driverDetail.id,
licenseNo: driverDetail.licenseNo,
signingOrganization: driverDetail.signingOrganization,
validEndTime:
driverDetail.validEndTime?.length === 10
? driverDetail.validEndTime
: this.datePipe.transform(driverDetail.validEndTime, 'yyyy-MM-dd'),
validStartTime:
driverDetail.validStartTime?.length === 10
? driverDetail.validStartTime
: this.datePipe.transform(driverDetail.validStartTime, 'yyyy-MM-dd')
},
userPracticeSeniorityDTO: {
appUserId: licenseDetail.appUserId,
approvalStatus: licenseDetail.approvalStatus,
certificatePhoto: licenseDetail.certificatePhoto,
certificatePhotoWatermark: licenseDetail.certificatePhotoWatermark,
id: licenseDetail.id,
licenseNo: licenseDetail.licenseNo,
regionCode: licenseDetail.regionCode,
validEndTime:
licenseDetail.validEndTime?.length === 10
? licenseDetail.validEndTime
: this.datePipe.transform(licenseDetail.validEndTime, 'yyyy-MM-dd'),
validStartTime:
licenseDetail.validStartTime?.length === 10
? licenseDetail.validStartTime
: this.datePipe.transform(licenseDetail.validStartTime, 'yyyy-MM-dd')
}
};
this.service.request(this.service.$api_update_driver_license, params).subscribe(res => {
if (res) {
this.service.msgSrv.success('修改成功');
this.isEditDriver = false;
this.initData();
}
});
}
saveUser() {
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,
validEndTime:
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')
};
console.log(this.userIdentityDetail);
this.service.request(this.service.$api_update_driver_identity, params).subscribe(res => {
if (res) {
this.service.msgSrv.success('修改成功');
this.isEditUser = false;
this.initData();
}
});
}
changeUpload({ file, fileList, type }: any, data: any, key: string, key2: string) {
if (type === 'success') {
data[key] = file.response.data.fullFileWatermarkPath;
data[key2] = file.response.data.fullFilePath;
}
}
showImg(url: any) {
const params = {
imgList: [url],
index: 0
};
this.nzModalService.create({ nzContent: ImageViewComponent, nzComponentParams: { params } });
}
deleteImg(data: any, key: string, key2: string) {
this.nzModalService.warning({
nzTitle: '是否确认删除该图片',
nzOnOk: () => {
this.disabledUpload = true;
data[key] = '';
data[key2] = '';
setTimeout(() => {
this.disabledUpload = false;
}, 100);
}
});
}
goBack() { goBack() {
window.history.go(-1); window.history.go(-1);

View File

@ -135,7 +135,6 @@ export class FreightComponentsEnterpriseAuditViewComponent implements OnInit {
} }
changeUpload({ file, fileList, type }: any, key: string) { changeUpload({ file, fileList, type }: any, key: string) {
console.log({ file, fileList, type });
if (type === 'success') { if (type === 'success') {
this.detailData[key] = file.response.data.fullFileWatermarkPath; this.detailData[key] = file.response.data.fullFileWatermarkPath;
} }

View File

@ -0,0 +1,113 @@
:host {
::ng-deep {
sv-title {
font-weight: 700;
}
.sv__label,
.sv__detail {
line-height: 30px;
}
.edit-box {
input {
max-width: 250px;
}
nz-date-picker {
min-width: 250px;
}
}
.readOnly-box {
input {
padding-left: 0;
color : #000;
border : 0;
}
nz-select-top-control {
padding-left: 0px !important;
}
}
.ant-select {
min-width: 250px;
nz-select-top-control {
cursor: text !important;
color : #000 !important;
}
}
// 图片展示工具样式改造
.ant-upload.ant-upload-disabled {
cursor: pointer;
}
.ant-upload.ant-upload-select-picture-card {
width : 200px;
height: 160px;
}
.ant-upload-picture-card-wrapper {
width: auto;
}
}
}
.image-hover {
.delete-icon {
border-radius : 50%;
color : #F55656;
font-size : 28px;
position : absolute;
top : -15px;
right : -15px;
background-color: #ffffff;
cursor : pointer;
}
.show-icon {
color : #ffffff;
font-size: 30px;
cursor : pointer;
}
}
.image-hover:hover .mask {
opacity: 0.8;
}
.mask {
width : 200px;
height : 160px;
background-color : #4F4F4F;
opacity : 0;
position : absolute;
// top : 6px;
// left : 12px;
border-radius : 6px;
margin-top : -160px;
}
.mask-over {
width : 200px;
height : 160px;
position : absolute;
// top : 6px;
// left : 12px;
border-radius : 6px;
display : flex;
justify-content : center;
align-items : center;
margin-top : -160px;
label {
font-size : 20px;
line-height : 24px;
letter-spacing: 0.7px;
color : #FFFFFF;
}
}

View File

@ -60,6 +60,11 @@ export class UsermanageService extends BaseService {
// 司机详情查看-载具信息 // 司机详情查看-载具信息
$api_get_driver_car_license = '/api/mdc/cuc/driver/getUserCarLicense'; $api_get_driver_car_license = '/api/mdc/cuc/driver/getUserCarLicense';
// 修改实名认证-【司机】
$api_update_driver_identity = '/api/mdc/cuc/identityInfo/save';
// 修改驾驶证信息
$api_update_driver_license = '/api/mdc/cuc/driver/updateDriverLicense';
// 人工审核实名认证 // 人工审核实名认证
$api_approve_identity = '/api/mdc/cuc/identityInfo/identityAudit'; $api_approve_identity = '/api/mdc/cuc/identityInfo/identityAudit';
// 审核驾驶证信息 // 审核驾驶证信息

View File

@ -19,7 +19,7 @@ import { BaseService } from '../core/base.service';
import { EACacheService } from '../core/cache.service'; import { EACacheService } from '../core/cache.service';
import { EAEventService } from '../core/event.service'; import { EAEventService } from '../core/event.service';
@Injectable({ @Injectable({
providedIn: 'root', providedIn: 'root'
}) })
export class EAUserService extends BaseService { export class EAUserService extends BaseService {
/** /**
@ -57,7 +57,7 @@ export class EAUserService extends BaseService {
/** /**
* 根据Token获取用户详情 * 根据Token获取用户详情
*/ */
$api_get_user_by_token = `/scce/cuc/cuc/user/getUserDetail`; $api_get_user_by_token = `/api/mdc/cuc/user/getUserDetail`;
/** /**
* 获取用户菜单 * 获取用户菜单
*/ */
@ -72,10 +72,11 @@ export class EAUserService extends BaseService {
public injector: Injector, public injector: Injector,
public cacheSrv: EACacheService, public cacheSrv: EACacheService,
public eventSrv: EAEventService, public eventSrv: EAEventService,
public settings: SettingsService,
public router: Router, public router: Router,
public ar: ActivatedRoute, public ar: ActivatedRoute,
@Inject(DA_SERVICE_TOKEN) public tokenSrv: ITokenService, @Inject(DA_SERVICE_TOKEN) public tokenSrv: ITokenService,
private settingSrv: SettingsService, private settingSrv: SettingsService
) { ) {
super(injector); super(injector);
} }
@ -97,7 +98,7 @@ export class EAUserService extends BaseService {
* @param captcha 验证码 * @param captcha 验证码
*/ */
loginByMobile(mobile: string, captcha: string, sc: string) { loginByMobile(mobile: string, captcha: string, sc: string) {
this.asyncRequest(this.$api_login_by_mobile, { phone: mobile, smsCode: captcha, sc }, 'POST', true, 'FORM').then((res) => { this.asyncRequest(this.$api_login_by_mobile, { phone: mobile, smsCode: captcha, sc }, 'POST', true, 'FORM').then(res => {
if (res?.token) { if (res?.token) {
// this.cacheSrv.set(cacheConf.token, res.token); // this.cacheSrv.set(cacheConf.token, res.token);
this.tokenSrv.set({ token: res.token }); this.tokenSrv.set({ token: res.token });
@ -123,7 +124,7 @@ export class EAUserService extends BaseService {
} }
async doAfterLogin() { async doAfterLogin() {
// await this.loadUserInfo(); await this.loadUserInfo();
// await this.loadUserMenus(); // await this.loadUserMenus();
await this.loadUserRoles(); await this.loadUserRoles();
} }
@ -132,8 +133,9 @@ export class EAUserService extends BaseService {
* 加载用户信息 * 加载用户信息
*/ */
async loadUserInfo() { async loadUserInfo() {
return this.asyncRequest(this.$api_get_user_by_token).then((res) => { return this.asyncRequest(this.$api_get_user_by_token).then(res => {
this.cacheSrv.set(cacheConf.user, res); this.cacheSrv.set(cacheConf.user, res.data);
this.settings.setUser(res.data);
}); });
} }
@ -141,7 +143,7 @@ export class EAUserService extends BaseService {
* 加载用户菜单 * 加载用户菜单
*/ */
async loadUserMenus() { async loadUserMenus() {
return this.asyncRequest(this.$api_get_user_menus, { appId: sysConf.appId }).then((res) => { return this.asyncRequest(this.$api_get_user_menus, { appId: sysConf.appId }).then(res => {
this.cacheSrv.set(cacheConf.menu, res); this.cacheSrv.set(cacheConf.menu, res);
}); });
} }
@ -182,7 +184,7 @@ export class EAUserService extends BaseService {
if (res.success === true) { if (res.success === true) {
return true; return true;
} }
}), })
); );
} }
@ -198,7 +200,7 @@ export class EAUserService extends BaseService {
if (res.success === true) { if (res.success === true) {
return true; return true;
} }
}), })
); );
} }
} }

View File

@ -1,7 +1,7 @@
{ {
"user": { "user": {
"name": "Admin", "name": "Admin",
"avatar": "./assets/tmp/img/avatar.jpg", "avatar": "./assets/images/user/logo.svg",
"email": "cipchk@qq.com" "email": "cipchk@qq.com"
} }
} }