Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop
This commit is contained in:
		| @ -12,6 +12,7 @@ | ||||
| import { NgModule } from '@angular/core'; | ||||
| import { RouterModule, Routes } from '@angular/router'; | ||||
| import { AccountComponentsCenterComponent } from './components/center/center.component'; | ||||
| import { AccountComponentsEditPayPasswordComponent } from './components/edit-paypassword/edit-paypassword.component' | ||||
|  | ||||
| const routes: Routes = [ | ||||
|   { path: '', redirectTo: 'center', pathMatch: 'full' }, | ||||
| @ -21,7 +22,16 @@ const routes: Routes = [ | ||||
|     data: { | ||||
|       title: '账户中心' | ||||
|     } | ||||
|   } | ||||
|   }, | ||||
|   { | ||||
|     path: 'edit-paypassword', | ||||
|     component: AccountComponentsEditPayPasswordComponent, | ||||
|     data: { | ||||
|       title: '修改支付密码', | ||||
|       titleI18n: 'app.my.edit.paypassword', | ||||
|       // guard: {ability: ['accountcenter-editpaypassword']} | ||||
|     }, | ||||
|   }, | ||||
| ]; | ||||
|  | ||||
| @NgModule({ | ||||
|  | ||||
| @ -15,11 +15,13 @@ import { AccountRoutingModule } from './account-routing.module'; | ||||
| import { AccountComponentsCenterComponent } from './components/center/center.component'; | ||||
| import { AccountComponentsEditNameComponent } from './components/edit-name/edit-name.component'; | ||||
| import { AccountComponentsCenterEditComponent } from './components/edit-password/edit-password.component'; | ||||
| import { AccountComponentsEditPayPasswordComponent } from './components/edit-paypassword/edit-paypassword.component' | ||||
|  | ||||
| const COMPONENTS = [ | ||||
|   AccountComponentsCenterComponent, | ||||
|   AccountComponentsEditNameComponent, | ||||
|   AccountComponentsCenterEditComponent | ||||
|   AccountComponentsCenterEditComponent, | ||||
|   AccountComponentsEditPayPasswordComponent | ||||
| ]; | ||||
| const COMPONENTS_NOROUNT = [AccountComponentsEditNameComponent]; | ||||
|  | ||||
|  | ||||
| @ -12,9 +12,9 @@ | ||||
|               <div nz-col [nzSpan]="10">{{ infoData.phone }}</div> | ||||
|               <div nz-col [nzSpan]="10"> | ||||
|                 <span *ngIf="infoData.phone; else elsePhone"><i nz-icon [nzType]="'check-circle'" [nzTheme]="'fill'" | ||||
|                   style="color: #52c41a"></i> 已绑定</span> | ||||
|               <ng-template #elsePhone><i nz-icon [nzType]="'question-circle'" [nzTheme]="'fill'" | ||||
|                   style="color: #ccc"></i> 未绑定</ng-template> | ||||
|                     style="color: #52c41a"></i> 已绑定</span> | ||||
|                 <ng-template #elsePhone><i nz-icon [nzType]="'question-circle'" [nzTheme]="'fill'" | ||||
|                     style="color: #ccc"></i> 未绑定</ng-template> | ||||
|               </div> | ||||
|             </div> | ||||
|           </nz-list-item-meta-title> | ||||
| @ -30,19 +30,45 @@ | ||||
|               </div> | ||||
|               <div nz-col [nzSpan]="10">定期更换密码有助于账号安全</div> | ||||
|               <div nz-col [nzSpan]="10"> | ||||
|                 <span *ngIf="infoData.isPwd; else elsePwd" | ||||
|                   ><i nz-icon [nzType]="'check-circle'" [nzTheme]="'fill'" style="color: #52c41a"></i> 已设置</span | ||||
|                 > | ||||
|                 <ng-template #elsePwd | ||||
|                   ><i nz-icon [nzType]="'question-circle'" [nzTheme]="'fill'" style="color: #ccc"></i> 未设置</ng-template | ||||
|                 > | ||||
|                 <span *ngIf="infoData.isPwd; else elsePwd"><i nz-icon [nzType]="'check-circle'" [nzTheme]="'fill'" | ||||
|                     style="color: #52c41a"></i> 已设置</span> | ||||
|                 <ng-template #elsePwd><i nz-icon [nzType]="'question-circle'" [nzTheme]="'fill'" | ||||
|                     style="color: #ccc"></i> 未设置</ng-template> | ||||
|               </div> | ||||
|             </div> | ||||
|           </nz-list-item-meta-title> | ||||
|         </nz-list-item-meta> | ||||
|         <div class="item-btn"><a (click)="edit('password')">修改</a></div> | ||||
|       </nz-list-item> | ||||
|       <!-- <nz-list-item *ngIf="defaultCompany.enterpriseId"> --> | ||||
|       <nz-list-item> | ||||
|         <nz-list-item-meta> | ||||
|           <nz-list-item-meta-title> | ||||
|             <div nz-row [nzGutter]="16"> | ||||
|               <div nz-col [nzSpan]="4" class="li-label"> | ||||
|                 <!-- <svg xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" version="1.1" | ||||
|                   width="19px" height="23px"> | ||||
|                   <g transform="matrix(1 0 0 1 -345 -324 )"> | ||||
|                     <path | ||||
|                       d="M 15.6123766269722 8.00244105491571  C 15.6119034283768 8.00244105491571  15.6114302297875 8.00244117202714  15.61095703125 8.00244140625  L 15.197197265625 8.00244140625  C 15.1815563889208 8.00244140625  15.168876953125 7.98976197045419  15.168876953125 7.97412109375  L 15.168876953125 5.885498046875  C 15.1737779288544 4.39846216264915  14.595081789561 2.96885593837806  13.55716796875 1.9039453125  C 12.7321123508105 1.05143460529325  11.655620403345 0.485695706108903  10.485546875 0.2896875  C 6.987421875 -0.313818359375  3.801953125 2.4227734375  3.801953125 5.97130859375  L 3.801953125 7.97412109375  C 3.801953125 7.98976197045419  3.78927368920419 8.00244140625  3.7736328125 8.00244140625  L 3.407451171875 8.00244140625  C 1.80531036111513 8.00259780422134  0.50660155486636 9.3014334003565  0.506601562499998 10.90357421875  L 0.506601562499998 19.88734375  C 0.506601562499998 21.489282355869  1.80522937670661 22.7879101700756  3.40716796875 22.7879101700756  L 15.579521484375 22.78791015625  C 17.1817432795434 22.7879101700756  18.48037109375 21.489282355869  18.48037109375 19.8873437638256  L 18.48037109375 10.874970703125  C 18.4803734804811 10.8734601705268  18.4803746738472 10.8719496362745  18.4803746738472 10.8704391017907  C 18.4803746738472 9.28648751795714  17.1963282108058 8.00244105491571  15.6123766269722 8.00244105491571  Z M 5.165859375 7.97412109375  L 5.16416015625 5.885498046875  C 5.16416015625 3.28484375  6.8866015625 1.56580078125  9.484140625 1.56580078125  C 10.7585546875 1.56580078125  11.718046875 1.963984375  12.583798828125 2.85494140625  C 13.430859375 3.72720703125  13.8035546875 4.66234375  13.8035546875 5.88521484375  L 13.8035546875 7.97412109375  C 13.8035546875 7.98976197045419  13.7908752517042 8.00244140625  13.775234375 8.00244140625  L 5.1941796875 8.00244140625  C 5.17853881079581 8.00244140625  5.165859375 7.98976197045419  5.165859375 7.97412109375  Z M 17.1215625 19.9156640625  L 17.1249609375 19.9156640625  C 17.1249609375 20.926982421875  16.622275390625 21.429384765625  15.61095703125 21  L 3.4111328125 21  C 2.55948707595672 21.429384765625  1.869091796875 20.7389894865433  1.869091796875 19.88734375  L 1.869091796875 11.115126953125  C 1.869091796875 10.1483643640389  2.65280772341387 9.3646484375  3.6195703125 9.3646484375  L 15.579521484375 9.3646484375  C 16.4311672209183 9.3646484375  17.1215625 10.0550437165817  17.1215625 10.906689453125  L 17.1215625 19.9156640625  Z " | ||||
|                       fill-rule="nonzero" fill="#3370ff" stroke="none" transform="matrix(1 0 0 1 345 324 )" /> | ||||
|                   </g> | ||||
|                 </svg> --> | ||||
|                 <span class="icon iconfont icon-mima" style="color: #aaa"></span>  支付密码 | ||||
|               </div> | ||||
|               <div nz-col [nzSpan]="10">定期更换支付密码有助于账号安全</div> | ||||
|               <div nz-col [nzSpan]="10"> | ||||
|                 <span *ngIf="ifHasPayPw; else elsePwd"><i nz-icon [nzType]="'check-circle'" [nzTheme]="'fill'" | ||||
|                     style="color: #52c41a"></i> 已设置</span> | ||||
|                 <ng-template #elsePwd><i nz-icon [nzType]="'question-circle'" [nzTheme]="'fill'" | ||||
|                     style="color: #ccc"></i> 未设置</ng-template> | ||||
|               </div> | ||||
|             </div> | ||||
|           </nz-list-item-meta-title> | ||||
|         </nz-list-item-meta> | ||||
|         <div class="item-btn"><a (click)="edit('payPassword')">设置</a></div> | ||||
|       </nz-list-item> | ||||
|     </nz-list> | ||||
|  | ||||
|   </nz-card> | ||||
| </div> | ||||
| </div> | ||||
| @ -17,7 +17,7 @@ | ||||
|       right: 20px; | ||||
|     } | ||||
|     .item-btn { | ||||
|       width: 28px; | ||||
|       width: 36px; | ||||
|       text-align: center; | ||||
|     } | ||||
|     .li-label { | ||||
|  | ||||
| @ -53,6 +53,8 @@ export class AccountComponentsCenterComponent implements OnInit { | ||||
|     }, | ||||
|   ]; | ||||
|   idx: any = 0; | ||||
|   defaultCompany: any = {}; | ||||
|   ifHasPayPw = false; | ||||
|   constructor(public service: AccountService, private modal: ModalHelper, private http: _HttpClient, private router: Router, private modalService: NzModalService,) {} | ||||
|  | ||||
|   ngOnInit() { | ||||
| @ -136,9 +138,32 @@ export class AccountComponentsCenterComponent implements OnInit { | ||||
|   getInfo() { | ||||
|     this.service.http.post(this.service.$api_get_current_user_info).subscribe((res) => { | ||||
|       this.infoData = res.data; | ||||
|       // this.getDeafaultCompany(); | ||||
|       this.getPayPw(); | ||||
|     }); | ||||
|   } | ||||
|  | ||||
|   getDeafaultCompany() { | ||||
|     this.service.request(this.service.$api_getUserDefaultEnterpriseProject).subscribe(res => { | ||||
|       if (res === null) { | ||||
|         this.router.navigate(['/changeproject']); | ||||
|         return; | ||||
|       } | ||||
|       this.defaultCompany = res | ||||
|       if (res.projectId) { | ||||
|         this.getPayPw()                    | ||||
|       } | ||||
|     }) | ||||
|   } | ||||
|  | ||||
|   getPayPw() { | ||||
|     this.service.request(this.service.$api_isUserVerifyPassword, {}).subscribe(res => { | ||||
|       this.ifHasPayPw = res | ||||
|     }) | ||||
|   } | ||||
|  | ||||
|    | ||||
|  | ||||
|   edit(tpye: string) { | ||||
|     if (tpye === 'phone') { | ||||
|       const modalRef = this.modalService.create({ | ||||
| @ -170,6 +195,10 @@ export class AccountComponentsCenterComponent implements OnInit { | ||||
|       } | ||||
|     }); | ||||
|     } | ||||
|  | ||||
|     if (tpye === 'payPassword') { | ||||
|       this.router.navigate(['/account/edit-paypassword']); | ||||
|     } | ||||
|     // if (tpye === 'info') { | ||||
|     //   this.router.navigate(['/account/editInfo'], { | ||||
|     //     queryParams: { realName: this.infoData.realName, certificateNumber: this.infoData.certificateNumber }, | ||||
|  | ||||
| @ -0,0 +1,171 @@ | ||||
| <page-header-wrapper [title]="''" [logo]="logo"> | ||||
|   <ng-template #logo> | ||||
|       <button nz-button nz-tooltip nzTooltipTitle="返回上一页" (click)="goBack()"> | ||||
|           <i nz-icon nzType="left" nzTheme="outline"></i> | ||||
|       </button> | ||||
|   </ng-template> | ||||
| </page-header-wrapper> | ||||
| <nz-card> | ||||
|   <div class="container"> | ||||
|     <div> | ||||
|       <div style="display: flex; align-items: center; min-height: 150px"> | ||||
|         <nz-steps [nzCurrent]="step" style="display: contents" [nzProgressDot]="progressTemplate"> | ||||
|           <nz-step nzTitle="安全验证"></nz-step> | ||||
|           <nz-step nzTitle="重设密码"></nz-step> | ||||
|           <nz-step nzTitle="完成"></nz-step> | ||||
|         </nz-steps> | ||||
|         <ng-template #progressTemplate let-dot let-status="status" let-index="index"> | ||||
|           <ng-container *ngIf="status === 'finish'; else finshTemplate"> | ||||
|             <i nz-icon nzType="check" nzTheme="outline" style="color: #fff"></i> | ||||
|           </ng-container> | ||||
|           <ng-template #finshTemplate> | ||||
|             {{ index + 1 }} | ||||
|           </ng-template> | ||||
|         </ng-template> | ||||
|       </div> | ||||
|       <nz-card [nzBordered]="false"> | ||||
|         <div style="width: 480px; margin: 0 auto" [ngSwitch]="step.toString()"> | ||||
|           <div *ngSwitchCase="0"> | ||||
|             <sf #step1sf *ngIf="step1Schema" [schema]="step1Schema" button="none" [layout]="'horizontal'"> | ||||
|               <ng-template sf-template="smsVerifyCode" let-smsVerifyCode let-ui="ui" let-schema="schema"> | ||||
|                 <nz-input-group [nzSuffix]="suffixTemplateInfo"> | ||||
|                   <input | ||||
|                     type="text" | ||||
|                     maxlength="6" | ||||
|                     nz-input | ||||
|                     placeholder="请输入验证码" | ||||
|                     [ngModel]="smsVerifyCode.formProperty.value" | ||||
|                     (ngModelChange)="smsVerifyCode.setValue($event)" | ||||
|                   /> | ||||
|                 </nz-input-group> | ||||
|               </ng-template> | ||||
|               <div nz-col [nzPush]="5"> | ||||
|                 <button | ||||
|                   nz-button | ||||
|                   type="submit" | ||||
|                   nzType="primary" | ||||
|                   (click)="nextStep()" | ||||
|                   [disabled]="!step1sf.valid" | ||||
|                   [nzLoading]="service.http.loading" | ||||
|                 > | ||||
|                   下一步 | ||||
|                 </button> | ||||
|               </div> | ||||
|             </sf> | ||||
|           </div> | ||||
|  | ||||
|           <div *ngSwitchCase="1"> | ||||
|             <form nz-form [formGroup]="formGroup3" class="myForm"> | ||||
|               <nz-form-item> | ||||
|                 <nz-form-label nzSpan="6" nzRequired nzFor="passWord">设置支付密码</nz-form-label> | ||||
|                 <nz-form-control nzSpan="18" [nzErrorTip]="passwordErrorTpl"> | ||||
|                   <nz-input-group [nzSuffix]="pwdIconEye"> | ||||
|                     <input | ||||
|                       nz-input | ||||
|                       [type]="isShowPwd ? 'text' : 'password'" | ||||
|                       formControlName="passWord" | ||||
|                       minlength="6" | ||||
|                       maxlength="6" | ||||
|                       (ngModelChange)="validateConfirmPassword()" | ||||
|                       placeholder="请输入支付密码" | ||||
|                     /> | ||||
|                   </nz-input-group> | ||||
|                   <ng-template #pwdIconEye> | ||||
|                     <span (click)="isShowPwd = !isShowPwd"> | ||||
|                       <ng-container *ngIf="isShowPwd; else showPwdTempalte"> | ||||
|                         <i nz-icon nzType="eye" nzTheme="outline"></i> | ||||
|                       </ng-container> | ||||
|                       <ng-template #showPwdTempalte> | ||||
|                         <i nz-icon nzType="eye-invisible" nzTheme="outline"></i> | ||||
|                       </ng-template> | ||||
|                     </span> | ||||
|                   </ng-template> | ||||
|                   <ng-template #passwordErrorTpl let-control> | ||||
|                     <ng-container *ngIf="control.hasError('required')"> 请输入支付密码! </ng-container> | ||||
|                     <ng-container *ngIf="control.hasError('minlength') || control.hasError('pattern')  || control.hasError('confirm')"> | ||||
|                       6位数字,不能为连续数字或者相同数字(如123456、111111) | ||||
|                     </ng-container> | ||||
|                   </ng-template> | ||||
|                 </nz-form-control> | ||||
|               </nz-form-item> | ||||
|               <nz-form-item> | ||||
|                 <nz-form-label nzSpan="6" nzRequired nzFor="passWordTo">重复支付密码</nz-form-label> | ||||
|                 <nz-form-control nzSpan="18" nzDisableAutoTips [nzErrorTip]="confirmPasswordErrorTpl"> | ||||
|                   <nz-input-group [nzSuffix]="confirmPwdIconEye"> | ||||
|                     <input | ||||
|                       nz-input | ||||
|                       [type]="isShowConfirmPwd ? 'text' : 'password'" | ||||
|                       formControlName="passWordTo" | ||||
|                       minlength="6" | ||||
|                       maxlength="6" | ||||
|                       (ngModelChange)="validateConfirmPassword()" | ||||
|                       placeholder="请输入支付密码" | ||||
|                     /> | ||||
|                   </nz-input-group> | ||||
|                   <ng-template #confirmPwdIconEye> | ||||
|                     <span (click)="isShowConfirmPwd = !isShowConfirmPwd"> | ||||
|                       <ng-container *ngIf="isShowConfirmPwd; else showConfirmPwdTempalte"> | ||||
|                         <i nz-icon nzType="eye" nzTheme="outline"></i> | ||||
|                       </ng-container> | ||||
|                       <ng-template #showConfirmPwdTempalte> | ||||
|                         <i nz-icon nzType="eye-invisible" nzTheme="outline"></i> | ||||
|                       </ng-template> | ||||
|                     </span> | ||||
|                   </ng-template> | ||||
|                   <ng-template #confirmPasswordErrorTpl let-control> | ||||
|                     <ng-container *ngIf="control.hasError('required')"> 请输入确认密码! </ng-container> | ||||
|                     <ng-container *ngIf="control.hasError('passWordTo')"> 两次输入的密码不一致! </ng-container> | ||||
|                   </ng-template> | ||||
|                 </nz-form-control> | ||||
|               </nz-form-item> | ||||
|               <nz-form-item> | ||||
|                 <nz-form-control nzSpan="18" nzOffset="6"> | ||||
|                   <button | ||||
|                     [disabled]="!formGroup3.valid" | ||||
|                     [nzLoading]="service.http.loading" | ||||
|                     nz-button | ||||
|                     nzType="primary" | ||||
|                     (click)="formSubmit()" | ||||
|                     style="width: 74px" | ||||
|                   > | ||||
|                     确认 | ||||
|                   </button> | ||||
|                 </nz-form-control> | ||||
|               </nz-form-item> | ||||
|             </form> | ||||
|           </div> | ||||
|           <div *ngSwitchCase="2" class="success-card"> | ||||
|             <div class="card-icon"> | ||||
|               <i nz-icon nzType="check" nzTheme="outline" style="color: #fff; font-size: 20px"></i> | ||||
|             </div> | ||||
|             <p class="card-title">密码设置成功</p> | ||||
|             <p class="card-descr">请牢记您的新支付密码,3秒后自动跳转至个人中心...</p> | ||||
|             <!-- <button | ||||
|               nz-button | ||||
|               type="button" | ||||
|               nzType="primary" | ||||
|               nzSize="large" | ||||
|               class="mt-lg" | ||||
|               style="font-size: 14px" | ||||
|               [routerLink]="['/passport/login']" | ||||
|             > | ||||
|               立即登录 | ||||
|             </button> --> | ||||
|           </div> | ||||
|           <div *ngSwitchDefault></div> | ||||
|         </div> | ||||
|       </nz-card> | ||||
|     </div> | ||||
|   </div> | ||||
| </nz-card> | ||||
|  | ||||
| <ng-template #suffixTemplateInfo> | ||||
|   <ng-container *ngIf="count < 1; else intervalTemplate"> | ||||
|     <span class="msg-btn" style="color: #3370ff; cursor: pointer" (click)="getMsgCode()">获取验证码</span> | ||||
|   </ng-container> | ||||
|   <ng-template #intervalTemplate> | ||||
|     <!-- {{ count > 0 ? '请等待' + count + 's' : ('app.register.get-verification-code' | translate) }} --> | ||||
|     {{ count > 0 ? '请等待' + count + 's' : ('app.register.get-verification-code') }} | ||||
|   </ng-template> | ||||
| </ng-template> | ||||
| <app-captcha #dun [phone]="phone" (done)="captchaDone($event)"></app-captcha> | ||||
| @ -0,0 +1,93 @@ | ||||
| :host { | ||||
|   ::ng-deep { | ||||
|     page-grid { | ||||
|       background-color: #f0f3f7; | ||||
|  | ||||
|       div.container { | ||||
|         width: 80%; | ||||
|         margin: 0 auto; | ||||
|         padding: 30px 1rem 1rem; | ||||
|       } | ||||
|     } | ||||
|  | ||||
|     .ant-steps-item-process .ant-steps-item-icon { | ||||
|       background-color: #3370ff; | ||||
|       border-color: #3370ff; | ||||
|     } | ||||
|  | ||||
|     .ant-steps-item-finish > .ant-steps-item-container > .ant-steps-item-icon { | ||||
|       background: #3370ff; | ||||
|     } | ||||
|  | ||||
|     .ant-steps-dot .ant-steps-item-icon, | ||||
|     .ant-steps-dot.ant-steps-small .ant-steps-item-icon { | ||||
|       width: 32px; | ||||
|       height: 32px; | ||||
|       margin-left: 55px; | ||||
|       line-height: 32px; | ||||
|       border: 1px solid rgba(0, 0, 0, 0.25); | ||||
|     } | ||||
|  | ||||
|     // 文本 | ||||
|     .ant-steps-item-wait .ant-steps-item-icon > .ant-steps-icon { | ||||
|       color: #000; | ||||
|     } | ||||
|  | ||||
|     // 连接线 | ||||
|     .ant-steps-dot .ant-steps-item-tail, | ||||
|     .ant-steps-dot.ant-steps-small .ant-steps-item-tail { | ||||
|       top: 12px; | ||||
|       margin: 0 0 0 90px; | ||||
|     } | ||||
|  | ||||
|     .ant-steps-item-wait > .ant-steps-item-container > .ant-steps-item-tail::after { | ||||
|       background-color: rgba(0, 0, 0, 0.25); | ||||
|     } | ||||
|  | ||||
|     .ant-steps-dot .ant-steps-item-process .ant-steps-item-icon, | ||||
|     .ant-steps-dot.ant-steps-small .ant-steps-item-process .ant-steps-item-icon { | ||||
|       width: 32px; | ||||
|       height: 32px; | ||||
|       line-height: 32px; | ||||
|     } | ||||
|  | ||||
|     .ant-steps-item-process > .ant-steps-item-container > .ant-steps-item-tail::after { | ||||
|       background-color: rgba(0, 0, 0, 0.25); | ||||
|     } | ||||
|  | ||||
|     .ant-steps-dot .ant-steps-item-tail::after, | ||||
|     .ant-steps-dot.ant-steps-small .ant-steps-item-tail::after { | ||||
|       width: calc(100% - 62px); | ||||
|       height: 1.5px; | ||||
|       margin-left: 12px; | ||||
|     } | ||||
|   } | ||||
| } | ||||
|  | ||||
| .success-card { | ||||
|   text-align: center; | ||||
|  | ||||
|   .card-icon { | ||||
|     display: flex; | ||||
|     align-items: center; | ||||
|     justify-content: center; | ||||
|     width: 36px; | ||||
|     height: 36px; | ||||
|     margin: auto; | ||||
|     background-color: #52c41a; | ||||
|     border-radius: 50%; | ||||
|   } | ||||
|  | ||||
|   .card-title { | ||||
|     margin: 14px 0 0; | ||||
|     font-weight: bold; | ||||
|     font-size: 16px; | ||||
|     text-align: center; | ||||
|   } | ||||
|  | ||||
|   .card-descr { | ||||
|     margin: 8px 0 0; | ||||
|     font-size: 14px; | ||||
|     text-align: center; | ||||
|   } | ||||
| } | ||||
| @ -0,0 +1,23 @@ | ||||
| import { async, ComponentFixture, TestBed } from '@angular/core/testing'; | ||||
| import { AccountComponentsEditPayPasswordComponent } from './edit-paypassword.component'; | ||||
|  | ||||
| describe('AccountComponentsEditPayPasswordComponent', () => { | ||||
|   let component: AccountComponentsEditPayPasswordComponent; | ||||
|   let fixture: ComponentFixture<AccountComponentsEditPayPasswordComponent>; | ||||
|  | ||||
|   beforeEach(async(() => { | ||||
|     TestBed.configureTestingModule({ | ||||
|       declarations: [AccountComponentsEditPayPasswordComponent], | ||||
|     }).compileComponents(); | ||||
|   })); | ||||
|  | ||||
|   beforeEach(() => { | ||||
|     fixture = TestBed.createComponent(AccountComponentsEditPayPasswordComponent); | ||||
|     component = fixture.componentInstance; | ||||
|     fixture.detectChanges(); | ||||
|   }); | ||||
|  | ||||
|   it('should create', () => { | ||||
|     expect(component).toBeTruthy(); | ||||
|   }); | ||||
| }); | ||||
| @ -0,0 +1,237 @@ | ||||
| import { AfterViewInit, Component, Inject, OnInit, Optional, ViewChild } from '@angular/core'; | ||||
| import { FormBuilder, FormControl, FormGroup, ValidatorFn, Validators } from '@angular/forms'; | ||||
| import { ActivatedRoute, Router } from '@angular/router'; | ||||
| import { ReuseTabService } from '@delon/abc/reuse-tab'; | ||||
| import { DA_SERVICE_TOKEN, ITokenService } from '@delon/auth'; | ||||
| import { SFComponent, SFSchema, SFTextareaWidgetSchema, SFTextWidgetSchema, SFUISchema } from '@delon/form'; | ||||
| import { SettingsService } from '@delon/theme'; | ||||
| import { CaptchaComponent } from 'src/app/shared/components/captcha'; | ||||
|  | ||||
| import { AccountService } from '../../services/account.service'; | ||||
|  | ||||
| @Component({ | ||||
|   selector: 'app-account-components-edit-password', | ||||
|   templateUrl: './edit-paypassword.component.html', | ||||
|   styleUrls: ['./edit-paypassword.component.less'], | ||||
| }) | ||||
| export class AccountComponentsEditPayPasswordComponent implements OnInit, AfterViewInit { | ||||
|   @ViewChild('dun', { static: false }) | ||||
|   private dun!: CaptchaComponent; | ||||
|  | ||||
|   step: 0 | 1 | 2 = 0; | ||||
|  | ||||
|   step1Schema!: SFSchema; | ||||
|   ui!: SFUISchema; | ||||
|   @ViewChild('step1sf', { static: false }) | ||||
|   step1sf!: SFComponent; | ||||
|  | ||||
|   phone: string; | ||||
|  | ||||
|   formGroup3!: FormGroup; | ||||
|   confirmPasswordValidator!: ValidatorFn; | ||||
|  | ||||
|   isShowPwd = false; | ||||
|   isShowConfirmPwd = false; | ||||
|  | ||||
|   count = 0; | ||||
|   interval$: any; | ||||
|  | ||||
|   constructor( | ||||
|     private fb: FormBuilder, | ||||
|     public service: AccountService, | ||||
|     private route: ActivatedRoute, | ||||
|     private settingService: SettingsService, | ||||
|     private router: Router, | ||||
|     @Inject(ReuseTabService) | ||||
|     private reuseTabService: ReuseTabService, | ||||
|     @Optional() | ||||
|     @Inject(DA_SERVICE_TOKEN) | ||||
|     private tokenService: ITokenService, | ||||
|   ) { | ||||
|     this.phone = route.snapshot.queryParams.phone; | ||||
|   } | ||||
|  | ||||
|   ngAfterViewInit(): void { | ||||
|     this.dun.init(); | ||||
|   } | ||||
|  | ||||
|   ngOnInit() { | ||||
|     if (this.phone) { | ||||
|       this.initStep1SF(); | ||||
|     } else { | ||||
|       this.service.http.post(this.service.$api_get_current_user_info).subscribe((res) => { | ||||
|         if (res) { | ||||
|           this.phone = res.data?.phone; | ||||
|           this.initStep1SF(); | ||||
|         } | ||||
|       }); | ||||
|     } | ||||
|  | ||||
|     this.confirmPasswordValidator = (control) => { | ||||
|       if (!control.value) { | ||||
|         return { error: true, required: true }; | ||||
|       } else if (control.value !== this.formGroup3.controls.passWord.value) { | ||||
|         return { passWordTo: true, error: true }; | ||||
|       } | ||||
|       return {}; | ||||
|     }; | ||||
|  | ||||
|     this.formGroup3 = this.fb.group({ | ||||
|       passWord: [ | ||||
|         null, | ||||
|         [ | ||||
|           Validators.required, | ||||
|           Validators.maxLength(6), | ||||
|           Validators.minLength(6), | ||||
|           Validators.pattern('([\\d]){6,6}'), | ||||
|           this.blurTestPw | ||||
|  | ||||
|         ], | ||||
|       ], | ||||
|       passWordTo: [null, [this.confirmPasswordValidator, Validators.required, Validators.maxLength(6), Validators.minLength(6)]], | ||||
|       voucher: [null, [Validators.required]], | ||||
|     }); | ||||
|   } | ||||
|  | ||||
|   initStep1SF() { | ||||
|     this.step1Schema = { | ||||
|       properties: { | ||||
|         phone: { | ||||
|           title: '手机号', | ||||
|           type: 'string', | ||||
|           ui: { | ||||
|             widget: 'text', | ||||
|             defaultText: this.phone.toString(), | ||||
|           } as SFTextWidgetSchema, | ||||
|         }, | ||||
|         smsVerifyCode: { | ||||
|           type: 'string', | ||||
|           title: '验证码', | ||||
|           ui: { | ||||
|             widget: 'custom', | ||||
|             errors: { | ||||
|               required: '请输入验证码', | ||||
|             }, | ||||
|           } as SFTextareaWidgetSchema, | ||||
|         }, | ||||
|       }, | ||||
|       required: ['smsVerifyCode'], | ||||
|     }; | ||||
|  | ||||
|     this.ui = { | ||||
|       '*': { spanLabelFixed: 90, grid: { span: 16, gutter: 4 } }, | ||||
|     }; | ||||
|   } | ||||
|  | ||||
|   nextStep() { | ||||
|     if (this.step1sf.valid) { | ||||
|       this.service.request(this.service.$api_get_verifyPhone, this.step1sf.value).subscribe((res) => { | ||||
|         if (res) { | ||||
|           this.formGroup3.patchValue(res, { onlySelf: true }); | ||||
|           this.step = 1; | ||||
|           this.count = 0; | ||||
|           clearInterval(this.interval$); | ||||
|         } | ||||
|       }); | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   formSubmit() { | ||||
|     for (const i in this.formGroup3.controls) { | ||||
|       if (true) { | ||||
|         this.formGroup3.controls[i].markAsDirty(); | ||||
|         this.formGroup3.controls[i].updateValueAndValidity(); | ||||
|       } | ||||
|     } | ||||
|  | ||||
|     if (this.formGroup3.valid) { | ||||
|       const param = Object.assign({}, this.formGroup3.value); | ||||
|       this.service.http.post(this.service.$api_voucherUpdatePayPassword, param).subscribe((res) => { | ||||
|         if (res.success === true) { | ||||
|           this.step++; | ||||
|           setTimeout(() => { | ||||
|             // this.settingService.setUser({}); | ||||
|             // // 清空路由复用信息 | ||||
|             // this.reuseTabService.clear(); | ||||
|             // // 设置用户Token信息 | ||||
|             // this.tokenService.clear(); | ||||
|             this.router.navigate(['/account/center']); | ||||
|           }, 3000); | ||||
|         } | ||||
|       }); | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   getMsgCode() { | ||||
|     if (this.phone) { | ||||
|       this.getCode(`${this.service.$api_get_msg_code}`); | ||||
|     } else { | ||||
|       this.service.request(this.service.$api_get_current_user_info).subscribe((res) => { | ||||
|         this.phone = res.phone; | ||||
|         this.getCode(`${this.service.$api_get_msg_code}`); | ||||
|       }); | ||||
|     } | ||||
|   } | ||||
|   goBack() { | ||||
|     window.history.go(-1); | ||||
|   } | ||||
|   getCode(url: string, params?: any) { | ||||
|     this.service.http.post(url, null, params).subscribe((res) => { | ||||
|       // code==503046 弹出网易盾 | ||||
|       if (res.success && res.data.code === '1') { | ||||
|         this.service.msgSrv.success('发送成功'); | ||||
|         this.codeCountDown(); | ||||
|       } else if (res.data.code === '503046') { | ||||
|         this.dun.popUp(); | ||||
|       } else { | ||||
|         this.service.msgSrv.success(res.sendResult); | ||||
|       } | ||||
|     }); | ||||
|   } | ||||
|   /* code倒计时 */ | ||||
|   codeCountDown() { | ||||
|     this.count = 59; | ||||
|     this.interval$ = setInterval(() => { | ||||
|       this.count -= 1; | ||||
|       if (this.count <= 0) { | ||||
|         clearInterval(this.interval$); | ||||
|       } | ||||
|     }, 1000); | ||||
|   } | ||||
|   /* 网易盾验证通过 */ | ||||
|   captchaDone(validate: any) { | ||||
|     this.codeCountDown(); | ||||
|   } | ||||
|  | ||||
|   validateConfirmPassword(): void { | ||||
|      | ||||
|     setTimeout(() => this.formGroup3.controls.passWordTo.updateValueAndValidity()); | ||||
|   } | ||||
|   // blurTestPw(){ | ||||
|   //   const reg = /[^\d]/g | ||||
|   //   const val: any = this.formGroup3.controls.passWord.value | ||||
|   //   if(val.length === 6) { | ||||
|   //     const pattern = /([\d])\1{2,}/g | ||||
|   //     const pattern2 = /(?:(?:0(?=1)|1(?=2)|2(?=3)|3(?=4)|4(?=5)|5(?=6)|6(?=7)|7(?=8)|8(?=9)){5}|(?:9(?=8)|8(?=7)|7(?=6)|6(?=5)|5(?=4)|4(?=3)|3(?=2)|2(?=1)|1(?=0)){5})\d/g    | ||||
|   //     if(pattern.test(val) || pattern2.test(val)){ | ||||
|   //       return false | ||||
|   //     } else { | ||||
|   //       return true | ||||
|   //     }  | ||||
|   //   } else { | ||||
|   //     return false | ||||
|   //   } | ||||
|   // } | ||||
|   blurTestPw = (control: FormControl): { [s: string]: boolean } => { | ||||
|     if (!control.value) { | ||||
|       return { required: true }; | ||||
|     } else if (control.value.length === 6) { | ||||
|       const pattern = /([\d])\1{2,}/g | ||||
|       const pattern2 = /(?:(?:0(?=1)|1(?=2)|2(?=3)|3(?=4)|4(?=5)|5(?=6)|6(?=7)|7(?=8)|8(?=9)){5}|(?:9(?=8)|8(?=7)|7(?=6)|6(?=5)|5(?=4)|4(?=3)|3(?=2)|2(?=1)|1(?=0)){5})\d/g    | ||||
|       if(pattern.test(control.value) || pattern2.test(control.value)){ | ||||
|         return { confirm: true, error: true }; | ||||
|       } | ||||
|     } | ||||
|     return {}; | ||||
|   }; | ||||
| } | ||||
| @ -36,6 +36,15 @@ export class AccountService extends BaseService { | ||||
|   $api_set_voucherUpdatePhone = `/api/mdc/cuc/userBasicInfo/forgetPassword/voucherUpdatePhone`; | ||||
|   // 凭证修改密码 | ||||
|   $api_set_phoneUpdatePassword = `/api/mdc/cuc/userBasicInfo/phoneUpdatePassword`; | ||||
|   // 凭证修改设置身份密码 | ||||
|   $api_voucherUpdatePayPassword = '/api/mdc/cuc/userVerify/forgetPassword/voucherUpdatePassword'; | ||||
|   // 根据当前登录用户绑定的手机号码获取短信验证码 | ||||
|   public $api_get_msg_code = `/api/mdc/pbc/smsSend/getSmVerificationCodeByToken`; | ||||
|   // 用户下默认企业项目 | ||||
|   $api_getUserDefaultEnterpriseProject = '/api/mdc/cuc/enterpriseProject/getUserDefaultEnterpriseProject'; | ||||
|   // 当前登录用户是否设置用户验证密码 | ||||
|   $api_isUserVerifyPassword = '/api/mdc/cuc/userVerify/isUserVerifyPassword'; | ||||
|  | ||||
|   constructor(public injector: Injector) { | ||||
|     super(injector); | ||||
|   } | ||||
|  | ||||
| @ -5,6 +5,7 @@ import { SFComponent, SFSchema, SFDateWidgetSchema } from '@delon/form'; | ||||
| import { NzModalService } from 'ng-zorro-antd/modal'; | ||||
| import { FreightAccountService } from '../../services/freight-account.service'; | ||||
| import { CwcBankCardManagementBindComponent } from '../bank-card-management/bind/bind.component'; | ||||
| import { CwcAccountManagementWithdrawDepositComponent } from './withdraw-deposit/withdraw-deposit.component'; | ||||
|  | ||||
| @Component({ | ||||
|   selector: 'app-platform-account', | ||||
| @ -192,12 +193,18 @@ export class PlatformAccountComponent implements OnInit { | ||||
|               }) | ||||
|           }, | ||||
|           { | ||||
|             text: '绑定银行卡', | ||||
|             click: item => this.bindBankcard(item) | ||||
|             text: '提现', | ||||
|             click: item => this.withdraw(item), | ||||
|             iif: (_record) => _record.bankType !== '1' | ||||
|           }, | ||||
|           // { | ||||
|           //   text: '绑定银行卡', | ||||
|           //   click: item => this.bindBankcard(item) | ||||
|           // }, | ||||
|           { | ||||
|             text: '查看银行卡', | ||||
|             click: item => this.viewBankcard(item) | ||||
|             click: item => this.viewBankcard(item), | ||||
|             iif: (_record) => _record.bankType !== '1' | ||||
|           }, | ||||
|         ] | ||||
|       } | ||||
| @ -239,4 +246,25 @@ export class PlatformAccountComponent implements OnInit { | ||||
|   exportList() { | ||||
|     this.service.exportStart({ ...this.sf.value, pageSize: -1 }, this.service.$api_get_exportPlatformAccountBalanceByOperator,); | ||||
|   } | ||||
|  | ||||
|   // 提现 | ||||
|   withdraw(record: any) { | ||||
|     const modalRef = this.modal.create({ | ||||
|       nzTitle: '提现', | ||||
|       nzWidth: '35%', | ||||
|       nzContent: CwcAccountManagementWithdrawDepositComponent, | ||||
|       nzMaskClosable: false, | ||||
|       nzComponentParams: { | ||||
|         record | ||||
|       }, | ||||
|       nzFooter: null | ||||
|     }); | ||||
|     modalRef.afterClose.subscribe(res => { | ||||
|       if (res) { | ||||
|         // this.getSummary(); | ||||
|         // this.withdrawTable.refresh(); | ||||
|       } | ||||
|     }) | ||||
|   } | ||||
|  | ||||
| } | ||||
|  | ||||
| @ -0,0 +1,39 @@ | ||||
| <sf #sf mode="edit" [schema]="schema" [ui]="ui" button="none" autocomplete="off"> | ||||
|   <ng-template sf-template="availableBalance" let-me> | ||||
|     <div *ngIf=" me.formProperty.value === null || me.formProperty.value === undefined ">-</div> | ||||
|     <div *ngIf=" me.formProperty.value >= 0 " class="text-red-dark">{{me.formProperty.value | currency}}</div> | ||||
|   </ng-template> | ||||
|   <ng-template sf-template="bankId" let-me let-ui="ui" let-schema="schema"> | ||||
|     <nz-radio-group *ngIf="bankCardList.length >0" [ngModel]="me.formProperty.value" class="pay-way-group " | ||||
|       (ngModelChange)="checkBankCard($event)"> | ||||
|       <div class=" band-card mb-xs" *ngFor="let item of bankCardList"> | ||||
|         <label [nzValue]="item.id" nz-radio ngModel class="pay-way-label"> | ||||
|           <img class="mr-sm" [src]="'./assets/images/wallet.svg'" width="26" height="26" /> | ||||
|           <span class="mr-sm"> {{ item.bankName}}</span> | ||||
|           <span>{{item.bankCardNumber}}</span> | ||||
|         </label> | ||||
|       </div> | ||||
|     </nz-radio-group> | ||||
|     <div> <a (click)="toAddBankPage()" class="text-blue-dark">+添加银行卡 </a></div> | ||||
|   </ng-template> | ||||
|   <ng-template sf-template="amount" let-me> | ||||
|  | ||||
|     <nz-input-number nz-input type="number" [nzMax]="balanceObj?.allBalance" [nzMin]="1" placeholder="请输入提现金额" | ||||
|       [ngModel]="me.formProperty.value" class="input-row" (ngModelChange)="me.setValue($event)" autocomplete="off" | ||||
|       [nzPrecision]="2"></nz-input-number> | ||||
|     <a (click)="allWithdrawal()">全部提现</a> | ||||
|   </ng-template> | ||||
|   <ng-template sf-template="payPsd" let-me> | ||||
|     <input maxlength="6" class="input-row iconfont icon-yuandian" id="psd" [type]="'text'" autocomplete="off" nz-input | ||||
|       placeholder="请输入支付密码" [ngModel]="me.formProperty.value" (ngModelChange)="changePsd($event)" | ||||
|       (keydown)="keydown($event)" (mouseup)="setFocus()" #psd /> | ||||
|     <a (click)="toForgetPsdPage()">忘记密码?</a> | ||||
|   </ng-template> | ||||
|  | ||||
|   <div class="modal-footer"> | ||||
|     <button nz-button type="button" (click)="close(false)">取 消</button> | ||||
|     <button nz-button type="submit" nzType="primary" (click)="save(sf?.value)" [disabled]="!sf.valid" | ||||
|       [nzLoading]="service.http.loading">确 | ||||
|       定</button> | ||||
|   </div> | ||||
| </sf> | ||||
| @ -0,0 +1,37 @@ | ||||
| :host { | ||||
|   .bank-card-select-content { | ||||
|     padding: 5px; | ||||
|     border: 1px solid #ccc; | ||||
|  | ||||
|     .band-card-row { | ||||
|       display: flex; | ||||
|       align-items: center; | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   .pay-way-group { | ||||
|     width: 100%; | ||||
|     margin-bottom: 5px; | ||||
|  | ||||
|     .bank-card-row { | ||||
|       display: flex; | ||||
|       align-items: center; | ||||
|     } | ||||
|  | ||||
|     .band-card { | ||||
|       border: 1px solid #e8e8e8; | ||||
|  | ||||
|       .pay-way-label { | ||||
|         width: 100%; | ||||
|         padding: 6px 10px; | ||||
|       } | ||||
|     } | ||||
|  | ||||
|   } | ||||
|  | ||||
|   .input-row { | ||||
|     width: 70%; | ||||
|     margin-right: 8px; | ||||
|   } | ||||
|  | ||||
| } | ||||
| @ -0,0 +1,24 @@ | ||||
| import { waitForAsync, ComponentFixture, TestBed } from '@angular/core/testing'; | ||||
| import { CwcAccountManagementWithdrawDepositComponent } from './withdraw-deposit.component'; | ||||
|  | ||||
| describe('CwcAccountManagementWithdrawDepositComponent', () => { | ||||
|   let component: CwcAccountManagementWithdrawDepositComponent; | ||||
|   let fixture: ComponentFixture<CwcAccountManagementWithdrawDepositComponent>; | ||||
|  | ||||
|   beforeEach(waitForAsync(() => { | ||||
|     TestBed.configureTestingModule({ | ||||
|       declarations: [CwcAccountManagementWithdrawDepositComponent] | ||||
|     }) | ||||
|       .compileComponents(); | ||||
|   })); | ||||
|  | ||||
|   beforeEach(() => { | ||||
|     fixture = TestBed.createComponent(CwcAccountManagementWithdrawDepositComponent); | ||||
|     component = fixture.componentInstance; | ||||
|     fixture.detectChanges(); | ||||
|   }); | ||||
|  | ||||
|   it('should create', () => { | ||||
|     expect(component).toBeTruthy(); | ||||
|   }); | ||||
| }); | ||||
| @ -0,0 +1,288 @@ | ||||
| import { Component, ElementRef, OnInit, ViewChild } from '@angular/core'; | ||||
| import { Router } from '@angular/router'; | ||||
| import { cacheConf } from '@conf/cache.conf'; | ||||
| import { STColumn, STComponent } from '@delon/abc/st'; | ||||
| import { SFComponent, SFSchema, SFSelectWidgetSchema, SFUISchema } from '@delon/form'; | ||||
| import { EACacheService, EAEnvironmentService, ShipperBaseService } from '@shared'; | ||||
| import { NzModalRef } from 'ng-zorro-antd/modal'; | ||||
| import { BankCardManagementService } from '../../../services/bank-card-management.service'; | ||||
|  | ||||
| @Component({ | ||||
|   selector: 'app-cwc-withdraw-deposit', | ||||
|   templateUrl: './withdraw-deposit.component.html', | ||||
|   styleUrls: ['./withdraw-deposit.component.less'] | ||||
| }) | ||||
| export class CwcAccountManagementWithdrawDepositComponent implements OnInit { | ||||
|   accountBalance = 0; | ||||
|   minWithdrawAmount = 0; | ||||
|   minWithdrawFee: any = 0; | ||||
|   code = ''; | ||||
|   bankList: Array<any> = []; | ||||
|   bankAccount = ''; | ||||
|   count = 0; | ||||
|   interval$: any; | ||||
|   ui: SFUISchema = {}; | ||||
|   i: any; | ||||
|   schema: SFSchema = {}; | ||||
|   totalGJ: any = 0.0; | ||||
|   cacFee: any = 0; | ||||
|   columns: STColumn[] = []; | ||||
|   totalBalance = 200; | ||||
|   bankCardList: Array<any> = []; | ||||
|   cardNo = ''; | ||||
|   accountDetail: any = {}; | ||||
|   networkTransporterId = ''; | ||||
|   networkTransporterName = ''; | ||||
|   balanceObj: any = { | ||||
|     allBalance: 99999999 | ||||
|   }; | ||||
|   @ViewChild('st', { static: false }) st!: STComponent; | ||||
|   @ViewChild('sf', { static: false }) sf!: SFComponent; | ||||
|   @ViewChild('psd') psd!: ElementRef; | ||||
|   record: any; | ||||
|   bankType = '2'; | ||||
|  | ||||
|   constructor( | ||||
|     public service: BankCardManagementService, | ||||
|     private modal: NzModalRef, | ||||
|     private shipperSrv: ShipperBaseService, | ||||
|     public eaCacheSrv: EACacheService, | ||||
|     public envSrv: EAEnvironmentService, | ||||
|     public router: Router | ||||
|   ) { | ||||
|     this.networkTransporterId = this.eaCacheSrv.get(cacheConf.env)?.networkTransporterId; | ||||
|   } | ||||
|  | ||||
|   ngOnInit() { | ||||
|     this.initSF(); | ||||
|     this.getBankList(); | ||||
|     this.getProjectBalanceDetail(); | ||||
|   } | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|   /** | ||||
|    * 初始化查询表单 | ||||
|    */ | ||||
|   initSF() { | ||||
|     this.schema = { | ||||
|       properties: { | ||||
|         ltdName: { | ||||
|           title: '网络货运人', | ||||
|           type: 'string', | ||||
|           default: this.record?.ltdName, | ||||
|           ui: { | ||||
|             widget: 'text', | ||||
|           } | ||||
|         }, | ||||
|         bankType: { | ||||
|           title: '银行', | ||||
|           type: 'string', | ||||
|           default: this.bankType, | ||||
|           enum: [ | ||||
|             { label: '浦发银行', value: '2' } | ||||
|           ], | ||||
|           ui: { | ||||
|             widget: 'select', | ||||
|             containsAllLabel: false, | ||||
|             showRequired: true, | ||||
|             change: (value: any) => { | ||||
|               // if (value && this.sf?.value?.ltdId) { | ||||
|               //   const parmas = { bankType: value, ltdId: this.sf.getValue('/ltdId') }; | ||||
|               //   this.getProjectBalanceDetail(parmas); | ||||
|               // } | ||||
|             } | ||||
|           } as SFSelectWidgetSchema | ||||
|         }, | ||||
|         availableBalance: { title: '可提现余额', type: 'string', ui: { showRequired: false, widget: 'custom' } }, | ||||
|         bankId: { | ||||
|           title: '提现至', | ||||
|           type: 'string', | ||||
|           ui: { | ||||
|             showRequired: true, widget: 'custom' | ||||
|           }, | ||||
|         }, | ||||
|         amount: { | ||||
|           title: '提现金额', | ||||
|           type: 'string', | ||||
|           ui: { | ||||
|             showRequired: true, | ||||
|             widget: 'custom', | ||||
|             validator: (val) => { | ||||
|               if (!val && val !== 0) { | ||||
|                 return [{ keyword: 'required', message: '必填项' }]; | ||||
|               } else if (val > this.balanceObj.allBalance) { | ||||
|                 return [{ keyword: 'required', message: '提现金额超过可提现余额' }]; | ||||
|               } | ||||
|               return []; | ||||
|             } | ||||
|           }, | ||||
|  | ||||
|         }, | ||||
|         payPsd: { | ||||
|           title: '支付密码', | ||||
|           type: 'string', | ||||
|           minLength: 6, | ||||
|           maxLength: 6, | ||||
|           ui: { widget: 'custom' }, | ||||
|         }, | ||||
|         payPassword: { | ||||
|           title: '', | ||||
|           type: 'string', | ||||
|           ui: { | ||||
|             hidden: true | ||||
|           } | ||||
|         } | ||||
|       }, | ||||
|       autocomplete: 'off', | ||||
|       required: ['bankType', 'payPsd'] | ||||
|     }; | ||||
|     this.ui = { | ||||
|       '*': { spanLabelFixed: 100, grid: { span: 18, gutter: 2 } }, | ||||
|       $addBankCard1: { | ||||
|         grid: { span: 24 } | ||||
|       }, | ||||
|       $addBankCard2: { | ||||
|         grid: { span: 24 } | ||||
|       } | ||||
|     }; | ||||
|   } | ||||
|  | ||||
|   save(value: any) { | ||||
|     if (this.sf.valid) { | ||||
|       const { amount, bankId, bankType, ltdName, payPassword } = value; | ||||
|       if (amount > this.balanceObj?.allBalance) { | ||||
|         this.service.msgSrv.warning('提现金额超过可提现余额!'); | ||||
|         return; | ||||
|       } | ||||
|       const params = { | ||||
|         amount, | ||||
|         bankId, | ||||
|         bankType, | ||||
|         ltdId: this.record.ltdId, | ||||
|         ltdName, | ||||
|         payPassword | ||||
|       }; | ||||
|       this.service.request(this.service.$api_apply_withdraw, { ...params }) | ||||
|         .subscribe(res => { | ||||
|           if (res) { | ||||
|             this.service.msgSrv.success('提现成功!'); | ||||
|             this.close(true); | ||||
|           } | ||||
|         }) | ||||
|     } | ||||
|   } | ||||
|   close(flag: boolean) { | ||||
|     this.modal.destroy(flag); | ||||
|   } | ||||
|  | ||||
|  | ||||
|   toAddBankPage() { | ||||
|     window.open(`/#/financial-management/bank-card-management/index?ltdId=${this.record?.ltdId}<dName=${this.record?.ltdName}`); | ||||
|   } | ||||
|   /** | ||||
|    * 全部提现 | ||||
|    */ | ||||
|   allWithdrawal() { | ||||
|     if (!this.sf.getValue('/availableBalance')) { | ||||
|       this.sf.setValue('/amount', ''); | ||||
|       return; | ||||
|     } | ||||
|     this.sf.setValue('/amount', this.balanceObj?.allBalance); | ||||
|   } | ||||
|   /** | ||||
|    * 跳转至忘记密码页 | ||||
|    */ | ||||
|   toForgetPsdPage() { | ||||
|     window.open('/#/account/edit-paypassword'); | ||||
|   } | ||||
|  | ||||
|   /** | ||||
|    * 切换银行卡 | ||||
|    */ | ||||
|   checkBankCard(e: any) { | ||||
|     this.sf.setValue('/bankId', e); | ||||
|   } | ||||
|   getBankList() { | ||||
|     this.service.request(this.service.$api_bank_card_list, { accountType: '3', roleId: this.record?.ltdId }).subscribe((res) => { | ||||
|       if (res) { | ||||
|         this.bankCardList = res; | ||||
|       } | ||||
|     }); | ||||
|   } | ||||
|  | ||||
|   /** | ||||
|  * 获取项目账户余额 | ||||
|  */ | ||||
|   getProjectBalanceDetail(params = {}) { | ||||
|     this.service.request(this.service.$api_get_account_available_balance, { bankType: this.bankType, ltdId: this.record?.ltdId }).subscribe(res => { | ||||
|       if (res) { | ||||
|         this.balanceObj = res; | ||||
|         this.sf.setValue('/availableBalance', res?.allBalance); | ||||
|         // this.sf.getProperty('/amount')?.updateValueAndValidity(); | ||||
|       } | ||||
|     }) | ||||
|   } | ||||
|  | ||||
|   keydown(e: any) { | ||||
|     if (e.keyCode == 37 || e.keyCode == 39) e.preventDefault(); | ||||
|     if (e.keyCode === 8) { | ||||
|       // const payPswVal = this.sf.getValue('/password'); | ||||
|       // this.sf.setValue('/password', payPswVal.substr(0, payPswVal.length - 1)); | ||||
|     } | ||||
|  | ||||
|   } | ||||
|   clickInput(e: any) { | ||||
|     this.psd.nativeElement.focus(); | ||||
|   } | ||||
|   changePsd(val: any) { | ||||
|     this.sf.setValue('/payPsd', val); | ||||
|     if (val || val !== '') { | ||||
|       const last = val.substr(val.length - 1); | ||||
|       const password = this.sf.getValue('/payPassword'); | ||||
|       const start = this.psd?.nativeElement.selectionStart; | ||||
|       if (last !== '•') { | ||||
|         this.sf.setValue('/payPassword', start !== 1 ? (password + last) : last); | ||||
|       } else { | ||||
|         this.sf.setValue('/payPassword', password.substr(0, val.length)); | ||||
|       } | ||||
|       const payPswVal = this.sf.getValue('/payPsd'); | ||||
|       this.sf.setValue('/payPsd', payPswVal.replace(/./g, "•")); | ||||
|     } else { | ||||
|       this.sf.setValue('/payPassword', ''); | ||||
|     } | ||||
|  | ||||
|   } | ||||
|  | ||||
|   /** | ||||
|    * 设置光标聚焦 | ||||
|    */ | ||||
|   setFocus() { | ||||
|  | ||||
|     const len = this.psd?.nativeElement.value.length; | ||||
|     this.setSelectionRange(this.psd?.nativeElement, len, len); //将光标定位到文本最后 | ||||
|   } | ||||
|  | ||||
|   /** | ||||
|    * 设置光标位置 | ||||
|    * @param input dom元素 | ||||
|    * @param selectionStart 起始位置 | ||||
|    * @param selectionEnd 结束位置 | ||||
|    */ | ||||
|   setSelectionRange(input: ElementRef | any, selectionStart: number, selectionEnd: number) { | ||||
|     if (input?.setSelectionRange) { | ||||
|       input.focus(); | ||||
|       input.setSelectionRange(selectionStart, selectionEnd); | ||||
|     } | ||||
|     else if (input.createTextRange) { | ||||
|       var range = input.createTextRange(); | ||||
|       range.collapse(true); | ||||
|       range.moveEnd('character', selectionEnd); | ||||
|       range.moveStart('character', selectionStart); | ||||
|       range.select(); | ||||
|     } | ||||
|   } | ||||
|  | ||||
|  | ||||
| } | ||||
| @ -39,6 +39,7 @@ import { AbnormalGoldDetailComponent } from './components/abnormal-gold/abnormal | ||||
| import { CwcBankCardManagementIndexComponent } from './components/bank-card-management/index/index.component'; | ||||
| import { CwcBankCardManagementBindComponent } from './components/bank-card-management/bind/bind.component'; | ||||
| import { CwcBankCardManagementAddComponent } from './components/bank-card-management/add/add.component'; | ||||
| import { CwcAccountManagementWithdrawDepositComponent } from './components/platform-account/withdraw-deposit/withdraw-deposit.component'; | ||||
|  | ||||
| const ROUTESCOMPONENTS = [ | ||||
|   FreightAccountComponent, | ||||
| @ -74,7 +75,8 @@ const ROUTESCOMPONENTS = [ | ||||
|   AbnormalGoldDetailComponent, | ||||
|   CwcBankCardManagementIndexComponent, | ||||
|   CwcBankCardManagementBindComponent, | ||||
|   CwcBankCardManagementAddComponent | ||||
|   CwcBankCardManagementAddComponent, | ||||
|   CwcAccountManagementWithdrawDepositComponent | ||||
| ]; | ||||
|  | ||||
| const NOTROUTECOMPONENTS = [DriverAccountDetailComponent, FreightAccountDetailComponent, ClearingModalComponent]; | ||||
|  | ||||
| @ -8,6 +8,8 @@ export class BankCardManagementService extends BaseService { | ||||
|   $api_bank_card_list = `/api/fcc/bankInfoOBC/list/myBankInfo`; // 获取银行卡列表 | ||||
|   $api_bank_card_del = `/api/fcc/bankInfoOBC/delete`; // 删除银行卡 | ||||
|   $api_bank_card_add = `/api/fcc/bankInfoOBC/save`;//新增银行卡 | ||||
|   $api_get_account_available_balance = `/api/fcc/accountBalance/getWithdrawalAccountBalanceOperator`; //平台可提现金额查询 | ||||
|   $api_apply_withdraw = `/api/fcc/refundApplicationOBC/addAgreeRefund`; // 提现申请 | ||||
|   constructor(public injector: Injector) { | ||||
|     super(injector); | ||||
|   } | ||||
|  | ||||
| @ -4,7 +4,7 @@ | ||||
|  * @Author       : Shiming | ||||
|  * @Date         : 2022-01-12 10:52:50 | ||||
|  * @LastEditors  : Shiming | ||||
|  * @LastEditTime : 2022-04-14 10:53:35 | ||||
|  * @LastEditTime : 2022-04-22 16:51:29 | ||||
|  * @FilePath     : \\tms-obc-web\\src\\app\\routes\\order-management\\components\\bulk\\bulk.component.html | ||||
|  * Copyright (C) 2022 huzhenhong. All rights reserved. | ||||
| --> | ||||
| @ -82,7 +82,7 @@ | ||||
|         <div> {{   item.settlementWeight ?  item.settlementWeight  + '吨/ ': ''}} {{   item.settlementVolume ? item.settlementVolume  + '方 ': ''}}</div> | ||||
|       </ng-template> | ||||
|       <ng-template st-row="payeeName" let-item let-index="index"> | ||||
|         <div> {{ item?.payeeName }}{{ item?.payeePhone ? "/" + item?.payeePhone : ''  }} </div> | ||||
|         <div *ngIf="item.payeeName !== item.driverName"> {{ item?.payeeName }}{{ item?.payeePhone ? "/" + item?.payeePhone : ''  }} </div> | ||||
|       </ng-template> | ||||
|       <ng-template st-row="createUserName" let-item let-index="index"> | ||||
|         <div> {{ item?.createUserName }}{{  item?.createUserPhone ? "/" + item?.createUserPhone : '' }} </div> | ||||
|  | ||||
| @ -509,8 +509,7 @@ export class OrderManagementBulkComponent implements OnInit { | ||||
|         title: '车队长', | ||||
|         className: 'text-left', | ||||
|         width: '180px', | ||||
|         index: 'payeeName', | ||||
|         render: 'payeeName' | ||||
|         render: 'payeeName', | ||||
|       }, | ||||
|       { | ||||
|         title: '装卸货时间', | ||||
|  | ||||
| @ -547,8 +547,7 @@ export class OrderManagementReceiptsAuditComponent implements OnInit { | ||||
|       nzContent: `<b>确认后单据不可修改,请谨慎操作。</b>`, | ||||
|       nzOnOk: () => | ||||
|            { | ||||
|             this.service.downloadFile(this.service.$api_createBillTakeGoods,params) | ||||
|             this.service.downloadFile(this.service.$api_createBillDischargeGoods,params) | ||||
|             this.service.downloadFile(this.service.$api_createBillEsignGoods,params) | ||||
|             this.service.msgSrv.success('生成成功!'); | ||||
|              this.st?.reload() | ||||
|         //   this.getGoodsSourceStatistical(); | ||||
|  | ||||
| @ -4,7 +4,7 @@ | ||||
|  * @Author       : Shiming | ||||
|  * @Date         : 2021-12-28 14:42:03 | ||||
|  * @LastEditors  : Shiming | ||||
|  * @LastEditTime : 2022-04-21 17:03:50 | ||||
|  * @LastEditTime : 2022-04-22 16:27:43 | ||||
|  * @FilePath     : \\tms-obc-web\\src\\app\\routes\\order-management\\components\\vehicle-detail\\vehicle-detail.component.html | ||||
|  * Copyright (C) 2022 huzhenhong. All rights reserved. | ||||
| --> | ||||
|  | ||||
| @ -4,7 +4,7 @@ | ||||
|  * @Author       : Shiming | ||||
|  * @Date         : 2022-01-12 10:52:50 | ||||
|  * @LastEditors  : Shiming | ||||
|  * @LastEditTime : 2022-04-08 11:32:46 | ||||
|  * @LastEditTime : 2022-04-22 16:53:07 | ||||
|  * @FilePath     : \\tms-obc-web\\src\\app\\routes\\order-management\\components\\vehicle\\vehicle.component.html | ||||
|  * Copyright (C) 2022 huzhenhong. All rights reserved. | ||||
| --> | ||||
| @ -95,7 +95,7 @@ | ||||
|       </ng-template> | ||||
|       <ng-template st-row="driverName" let-item let-index="index"> | ||||
|         <div> {{ item?.driverName  }}{{ item?.driverPhone ? '/' + item?.driverPhone : '' }}{{ item?.carNo ? '/' + item?.carNo : '' }} </div><br /> | ||||
|         <div> {{ item?.payeeName ? item?.payeeName + '/' : ''}}{{ item?.payeePhone }} </div> | ||||
|         <div *ngIf="item.payeeName !== item.driverName">车队长: {{ item?.payeeName ? item?.payeeName + '/' : ''}}{{ item?.payeePhone }} </div> | ||||
|       </ng-template> | ||||
|    | ||||
|       <ng-template st-row="loadingTime" let-item let-index="index"> | ||||
|  | ||||
| @ -19,7 +19,7 @@ import { OrderManagementService } from '../../services/order-management.service' | ||||
| @Component({ | ||||
|   selector: 'app-supply-management-vehicle', | ||||
|   templateUrl: './vehicle.component.html', | ||||
|   styleUrls: ['../../../commom/less/commom-table.less','./vehicle.component.less'] | ||||
|   styleUrls: ['../../../commom/less/commom-table.less', './vehicle.component.less'] | ||||
| }) | ||||
| export class OrderManagementVehicleComponent extends BasicTableComponent implements OnInit { | ||||
|   ui: SFUISchema = {}; | ||||
| @ -113,10 +113,10 @@ export class OrderManagementVehicleComponent extends BasicTableComponent impleme | ||||
|     const params: any = Object.assign({}, this.sf?.value || this.paramsList); | ||||
|     delete params._$expand; | ||||
|     this.paramsList = params | ||||
|       Object.assign(requestOptions.body, { | ||||
|         ...a, | ||||
|         ...this.paramsList, | ||||
|       }); | ||||
|     Object.assign(requestOptions.body, { | ||||
|       ...a, | ||||
|       ...this.paramsList, | ||||
|     }); | ||||
|     this.loading = true; | ||||
|     return requestOptions; | ||||
|   }; | ||||
| @ -197,7 +197,7 @@ export class OrderManagementVehicleComponent extends BasicTableComponent impleme | ||||
|           type: 'string', | ||||
|           title: '运单号', | ||||
|           ui: { | ||||
|           placeholder: '最多100个单号,空号隔开', | ||||
|             placeholder: '最多100个单号,空号隔开', | ||||
|           } | ||||
|         }, | ||||
|         resourceCode: { | ||||
| @ -416,11 +416,13 @@ export class OrderManagementVehicleComponent extends BasicTableComponent impleme | ||||
|             text: '运费变更记录', | ||||
|             click: _record => this.OpenPrice(_record), | ||||
|             iif: item => | ||||
|               item.billStatus == '4' || | ||||
|               item.billStatus == '5' || | ||||
|               item.billStatus == '2' || | ||||
|               item.billStatus == '3' || | ||||
|               item.billStatus == '6', | ||||
|               item.billType !== '3' && ( | ||||
|                 item.billStatus == '4' || | ||||
|                 item.billStatus == '5' || | ||||
|                 item.billStatus == '2' || | ||||
|                 item.billStatus == '3' || | ||||
|                 item.billStatus == '6' | ||||
|               ), | ||||
|             acl: { ability: ['ORDER-VEHICLE-ChangeApplyList'] } | ||||
|           }, | ||||
|           // { | ||||
| @ -439,7 +441,7 @@ export class OrderManagementVehicleComponent extends BasicTableComponent impleme | ||||
|           { | ||||
|             text: '变更运费', | ||||
|             click: _record => this.updateFreight(_record), | ||||
|             iif: item => item.billStatus !== '1' && item.billStatus !== '6' && item.overallPaymentStatus != '2', | ||||
|             iif: item => item.billType !== '3' && item.billStatus !== '1' && item.billStatus !== '6' && item.overallPaymentStatus != '2', | ||||
|             acl: { ability: ['ORDER-VEHICLE-FreightChangeWholeDetail'] } | ||||
|           }, | ||||
|           { | ||||
| @ -585,8 +587,8 @@ export class OrderManagementVehicleComponent extends BasicTableComponent impleme | ||||
|   /** | ||||
|    * 导入货源 | ||||
|    */ | ||||
|   importGoodsSource() {} | ||||
|   audit(item: any) {} | ||||
|   importGoodsSource() { } | ||||
|   audit(item: any) { } | ||||
|  | ||||
|   /* | ||||
|   * 审核关闭弹窗 | ||||
| @ -870,8 +872,8 @@ export class OrderManagementVehicleComponent extends BasicTableComponent impleme | ||||
|       } | ||||
|     }); | ||||
|   } | ||||
|     // 导出 | ||||
|     exprot() { | ||||
|       this.service.exportStart({ ...this.reqParams, pageSize: -1 }, this.service.$api_get_asyncExportWholeList); | ||||
|     } | ||||
|   // 导出 | ||||
|   exprot() { | ||||
|     this.service.exportStart({ ...this.reqParams, pageSize: -1 }, this.service.$api_get_asyncExportWholeList); | ||||
|   } | ||||
| } | ||||
|  | ||||
| @ -523,57 +523,29 @@ export class orderManagementVoucherViewComponent implements OnInit { | ||||
|         请等待${time}秒后自动关闭 | ||||
|         ` | ||||
|       }); | ||||
|         this.service.request(this.service.$api_createBillTakeGoods, [this.datas?.id]).subscribe(res => { | ||||
|         this.service.request(this.service.$api_createBillEsignGoods, [this.datas?.id]).subscribe(res => { | ||||
|           if (res) { | ||||
|             switch (res[0]?.esignFlowStatus) { | ||||
|               case 1: | ||||
|               case '1': | ||||
|                 setTimeout(() => { | ||||
|                   this.service.request(this.service.$api_getBillTakeEsignFile, [this.datas?.id]).subscribe(res => { | ||||
|                     if (res[0]?.esignFlowStatus == '2') { | ||||
|                     } | ||||
|                   }); | ||||
|                 }, 9000); | ||||
|                 return; | ||||
|               case 2: | ||||
|                 return; | ||||
|               case '13': | ||||
|             res.forEach((element:any) => { | ||||
|               switch (element?.esignFlowStatus) { | ||||
|                 case '1': | ||||
|                   setTimeout(() => { | ||||
|                     this.service.request(this.service.$api_getBillGoodsEsignFile, [this.datas?.id]).subscribe(res => { | ||||
|                       if (res[0]?.esignFlowStatus == '2') { | ||||
|                         this.service.msgSrv.success('生成电子单据成功!'); | ||||
|                         this.modal.destroy(true); | ||||
|                       } | ||||
|                     }); | ||||
|                   }, 9000); | ||||
|                   return; | ||||
|                   default: | ||||
|                   this.service.msgSrv.error('电子装货单签署异常!'); | ||||
|                   this.service.msgSrv.error('签署异常!'); | ||||
|                   modal.destroy(); | ||||
|                 return; | ||||
|             } | ||||
|                   return; | ||||
|               } | ||||
|             }); | ||||
|             | ||||
|           } else { | ||||
|             this.service.msgSrv.error('电子装货单签署异常!'); | ||||
|             modal.destroy(); | ||||
|           } | ||||
|         }); | ||||
|         this.service.request(this.service.$api_createBillDischargeGoods, [this.datas?.id]).subscribe(res => { | ||||
|           if (res) { | ||||
|             switch (res[0]?.esignFlowStatus) { | ||||
|               case 1: | ||||
|               case '1': | ||||
|                 setTimeout(() => { | ||||
|                   this.service.request(this.service.$api_getBillDischargeEsignFile, [this.datas?.id]).subscribe(res => { | ||||
|                     if (res[0]?.esignFlowStatus == '2') { | ||||
|                       this.service.msgSrv.success('生成电子单据成功!'); | ||||
|                       this.modal.destroy(true); | ||||
|                     } | ||||
|                   }); | ||||
|                   modal.destroy(); | ||||
|                 }, 9000); | ||||
|  | ||||
|                 return; | ||||
|                 case 2: | ||||
|                 modal.destroy(); | ||||
|                 return; | ||||
|                 default: | ||||
|                 this.service.msgSrv.error('电子卸货单签署异常!'); | ||||
|                 modal.destroy(); | ||||
|                 return; | ||||
|             } | ||||
|           } else { | ||||
|             this.service.msgSrv.error('电子卸货单签署异常!'); | ||||
|             this.service.msgSrv.error('签署异常!'); | ||||
|             modal.destroy(); | ||||
|           } | ||||
|         }); | ||||
|  | ||||
| @ -4,7 +4,7 @@ | ||||
|  * @Author       : Shiming | ||||
|  * @Date         : 2021-12-30 14:45:39 | ||||
|  * @LastEditors  : Shiming | ||||
|  * @LastEditTime : 2022-03-24 10:28:48 | ||||
|  * @LastEditTime : 2022-04-22 16:31:57 | ||||
|  * @FilePath     : \\tms-obc-web\\src\\app\\routes\\order-management\\modal\\vehicle\\modify-captain\\modify-captain.component.ts | ||||
|  * Copyright (C) 2022 huzhenhong. All rights reserved. | ||||
|  */ | ||||
| @ -44,7 +44,8 @@ export class VehicleModifyCaptainComponent implements OnInit { | ||||
|         mobile: { | ||||
|           type: 'string', | ||||
|           title: '车队长手机号', | ||||
|           maxLength: 11 | ||||
|           maxLength: 11, | ||||
|           default: '' | ||||
|         } | ||||
|       }, | ||||
|       required: ['mobile'] | ||||
| @ -103,18 +104,20 @@ export class VehicleModifyCaptainComponent implements OnInit { | ||||
|       if (res) { | ||||
|         this.modal.destroy(); | ||||
|         this.service.msgSrv.success('修改成功'); | ||||
|       } else { | ||||
|         this.service.msgSrv.error(res?.msg); | ||||
|       } | ||||
|     }); | ||||
|   } | ||||
|   initDate() { | ||||
|     let phone  = this.sf?.value.mobile.replace(/^\s*|\s*$/g,"") | ||||
|     if(!phone) { | ||||
|       this.service.msgSrv.error('请输入手机号!'); | ||||
|       return | ||||
|     } | ||||
|     const params = { | ||||
|       fetchBank: 1, | ||||
|       ...this.sf?.value | ||||
|     }; | ||||
|     this.service.request(this.service.$api_get_getCarCaptainByMobile, params).subscribe((res: any) => { | ||||
|       console.log(res); | ||||
|       if (res) { | ||||
|         this.dataList = [res]; | ||||
|       } | ||||
|  | ||||
| @ -4,13 +4,13 @@ | ||||
|  * @Author       : Shiming | ||||
|  * @Date         : 2022-02-22 13:53:29 | ||||
|  * @LastEditors  : Shiming | ||||
|  * @LastEditTime : 2022-03-08 15:01:14 | ||||
|  * @LastEditTime : 2022-04-22 16:27:40 | ||||
|  * @FilePath     : \\tms-obc-web\\src\\app\\routes\\order-management\\modal\\vehicle\\view-track\\view-track.component.html | ||||
|  * Copyright (C) 2022 huzhenhong. All rights reserved. | ||||
| --> | ||||
| <div nz-row> | ||||
|   <div nz-col [nzSpan]="24"> | ||||
|     <amap-path-simplifier [mapWidth]="'100%'" [mapHeight]="'600px'" [mapList]="MapList"> | ||||
|     <amap-path-simplifier [mapWidth]="'100%'" [mapHeight]="'600px'" [mapList]="mapList" [pois]="pois"> | ||||
|     </amap-path-simplifier> | ||||
|     <st [scroll]="{ y: '350px' }" #st [data]="addressItems" [columns]="logColumns2" [ps]="0" | ||||
|       [page]="{ show: false, showSize: false }" size="small" class="map_st"> | ||||
|  | ||||
| @ -1,11 +1,10 @@ | ||||
| /* stylelint-disable order/properties-order */ | ||||
| :host { | ||||
|      ::ng-deep { | ||||
|      //   .mapBox { | ||||
|      //      iframe, canvas { | ||||
|      //             width: 400px !important; | ||||
|      //        } | ||||
|      //   } | ||||
|   | ||||
|      } | ||||
|     | ||||
|  } | ||||
|   .map_st2 { | ||||
|     position: absolute; | ||||
|     top: 20px; | ||||
|     right: 49px; | ||||
|     height: 350px; | ||||
|     width: 360px; | ||||
|   } | ||||
| } | ||||
|  | ||||
| @ -4,21 +4,12 @@ | ||||
|  * @Author       : Shiming | ||||
|  * @Date         : 2022-02-22 13:53:29 | ||||
|  * @LastEditors  : Shiming | ||||
|  * @LastEditTime : 2022-03-08 16:11:58 | ||||
|  * @LastEditTime : 2022-04-22 16:24:06 | ||||
|  * @FilePath     : \\tms-obc-web\\src\\app\\routes\\order-management\\modal\\vehicle\\view-track\\view-track.component.ts | ||||
|  * Copyright (C) 2022 huzhenhong. All rights reserved. | ||||
|  */ | ||||
| import { Component, OnInit, ViewChild } from '@angular/core'; | ||||
| import { STColumn } from '@delon/abc/st'; | ||||
| import { | ||||
|   SFComponent, | ||||
|   SFCustomWidgetSchema, | ||||
|   SFNumberWidgetSchema, | ||||
|   SFRadioWidgetSchema, | ||||
|   SFSchema, | ||||
|   SFTextareaWidgetSchema, | ||||
|   SFUISchema | ||||
| } from '@delon/form'; | ||||
| import { Component, OnInit } from '@angular/core'; | ||||
| import { STColumn, STComponent } from '@delon/abc/st'; | ||||
| import format from 'date-fns/format'; | ||||
| import { _HttpClient } from '@delon/theme'; | ||||
| import { NzMessageService } from 'ng-zorro-antd/message'; | ||||
| @ -37,9 +28,11 @@ export class OneCarOrderViewtrackComponent implements OnInit { | ||||
|   mapList: any[] = []; //地图点位数据组 | ||||
|   addressItems: any[] = []; //打点地址数据组 | ||||
|   logColumns2: STColumn[] = [ | ||||
|     { title: '时间', index: 'parkBte' }, | ||||
|     { title: '地点', index: 'parkAdr' } | ||||
|     { title: '时间', index: 'parkBte', width: 120, className: 'text-center' }, | ||||
|     { title: '地点', index: 'parkAdr',width: 120,className: 'text-center'  } | ||||
|   ]; | ||||
|   pois: any[] = []; | ||||
|  | ||||
|   constructor( | ||||
|     private modalRef: NzModalRef, | ||||
|     private modal: NzModalService, | ||||
| @ -56,31 +49,58 @@ export class OneCarOrderViewtrackComponent implements OnInit { | ||||
|   } | ||||
|   // 获取车辆轨迹 | ||||
|   getTrajectory() { | ||||
|     this.service.request(this.service.$api_get_getTrajectory, { id: this.i?.id }).subscribe(res => { | ||||
|     this.service.request(this.service.$api_get_getWholeBillDetail, { id: this.i.id }).subscribe(res => { | ||||
|       if (res) { | ||||
|         this.pois = [ | ||||
|           { | ||||
|             markerLabel: '装', | ||||
|             color: 'blue', | ||||
|             position: [res.startingPoint.longitude, res.startingPoint.latitude], | ||||
|             title: `发货地:${res.startingPoint.province}${res.startingPoint.city}${res.startingPoint.area || ''}${ | ||||
|               res.startingPoint.detailedAddress | ||||
|             }`, | ||||
|             time: '计划出发时间:' + res.loadPlanTime | ||||
|           }, | ||||
|           { | ||||
|             markerLabel: '卸', | ||||
|             color: 'red', | ||||
|             position: [res.endPoint.longitude, res.endPoint.latitude], | ||||
|             title: `卸货地:${res.endPoint.province}${res.endPoint.city}${res.endPoint.area}${res.endPoint.detailedAddress}`, | ||||
|             time: '计划卸货时间:' + res.unloadPlanTime | ||||
|           } | ||||
|         ]; | ||||
|       } | ||||
|     }); | ||||
|     this.service.request(this.service.$api_get_getTrajectory, { id: this.i.id }).subscribe(res => { | ||||
|       if (res) { | ||||
|         const points = res.trackArray; | ||||
|         let list: any[] = []; | ||||
|         points?.forEach((item: any) => { | ||||
|           list.push({ | ||||
|             name: item.hgt, | ||||
|             name: `${item.spd}`, | ||||
|             lnglat: [Number((Number(item.lon) / 600000).toFixed(6)), Number((Number(item.lat) / 600000).toFixed(6))], | ||||
|             time: item.gtm | ||||
|           }); | ||||
|         }); | ||||
|         this.mapList = list; | ||||
|         this.addressItems = res.parkAdr; | ||||
|         if (this.addressItems && this.addressItems.length > 0) { | ||||
|           this.addressItems.forEach(item => { | ||||
|         const addressItems: any[] = res.parkArray; | ||||
|         if (addressItems?.length > 0) { | ||||
|           addressItems.forEach(item => { | ||||
|             item.parkBte = this.getLocalTime(item.parkBte); | ||||
|           }); | ||||
|           this.addressItems = [...addressItems]; | ||||
|         } else { | ||||
|           this.addressItems = []; | ||||
|         } | ||||
|         console.log(this.addressItems); | ||||
|          | ||||
|       } | ||||
|     }); | ||||
|   } | ||||
|  | ||||
|   // 获取司机轨迹 | ||||
|   getDriverTrajectory() { | ||||
|     this.service.request(this.service.$api_get_getAppDriverPosition, { id: this.i?.id }).subscribe(res => { | ||||
|     this.service.request(this.service.$api_get_getAppDriverPosition, { id: this.i.id }).subscribe(res => { | ||||
|       if (res) { | ||||
|         const points = res.tracks; | ||||
|         let list: any[] = []; | ||||
| @ -91,7 +111,7 @@ export class OneCarOrderViewtrackComponent implements OnInit { | ||||
|             time: item.gtm | ||||
|           }); | ||||
|         }); | ||||
|         this.mapList = list; | ||||
|         this.mapList = list || []; | ||||
|         const addressItems = [...res.tracks]; | ||||
|         if (addressItems) { | ||||
|           addressItems.forEach(item => { | ||||
|  | ||||
| @ -4,7 +4,7 @@ | ||||
|  * @Author       : Shiming | ||||
|  * @Date         : 2021-12-03 15:31:52 | ||||
|  * @LastEditors  : Shiming | ||||
|  * @LastEditTime : 2022-04-22 10:54:29 | ||||
|  * @LastEditTime : 2022-04-22 17:14:39 | ||||
|  * @FilePath     : \\tms-obc-web\\src\\app\\routes\\order-management\\services\\order-management.service.ts | ||||
|  * Copyright (C) 2022 huzhenhong. All rights reserved. | ||||
|  */ | ||||
| @ -163,8 +163,8 @@ export class OrderManagementService extends ShipperBaseService { | ||||
|   // 异常预警 | ||||
|   public $api_getAbnormalWarningByBillId = '/api/sdc/abnormalWarning/getAbnormalWarningByBillId'; | ||||
|  | ||||
|   // 生成卸货单 | ||||
|   public $api_createBillDischargeGoods = '/api/sdc/billOperate/createBillDischargeGoods'; | ||||
|   // 获取电子提/卸货单签章附件 | ||||
|   public $api_getBillGoodsEsignFile = '/api/sdc/billOperate/getBillGoodsEsignFile'; | ||||
|   // 生成提货单 | ||||
|   public $api_createBillTakeGoods = '/api/sdc/billOperate/createBillTakeGoods'; | ||||
|   // 生成卸货单-页面展示 | ||||
| @ -217,6 +217,8 @@ export class OrderManagementService extends ShipperBaseService { | ||||
|   public $api_getBillDischargeGoods = `/api/sdc/billOperate/getBillDischargeGoods`; | ||||
|   // 预览提货单 | ||||
|   public $api_getBillTakeGoods = `/api/sdc/billOperate/getBillTakeGoods`; | ||||
|   // 生成提/卸货单 | ||||
|   public $api_createBillEsignGoods = `/api/sdc/billOperate/createBillEsignGoods`; | ||||
|  | ||||
|   // // 生成卸货单 | ||||
|   // public $api_createBillDischargeGoods = `/api/sdc/billOperate/createBillDischargeGoods`; | ||||
|  | ||||
| @ -4,7 +4,7 @@ | ||||
|  * @Author       : Shiming | ||||
|  * @Date         : 2022-02-24 20:09:49 | ||||
|  * @LastEditors  : Shiming | ||||
|  * @LastEditTime : 2022-04-22 14:29:23 | ||||
|  * @LastEditTime : 2022-04-24 13:42:10 | ||||
|  * @FilePath     : \\tms-obc-web\\src\\app\\routes\\partner\\rebate-management\\components\\rebate-setting\\add\\add.component.html | ||||
|  * Copyright (C) 2022 huzhenhong. All rights reserved. | ||||
| --> | ||||
|  | ||||
| @ -8,16 +8,14 @@ | ||||
|  * @FilePath     : \\tms-obc-web\\src\\app\\routes\\partner\\rebate-management\\components\\rebate-setting\\add\\add.component.ts | ||||
|  * Copyright (C) 2022 huzhenhong. All rights reserved. | ||||
|  */ | ||||
| import { ModalHelper } from '@delon/theme'; | ||||
| import { Component, OnInit, ViewChild } from '@angular/core'; | ||||
| import { ActivatedRoute, Router } from '@angular/router'; | ||||
| import { STColumn, STComponent, STData, STRequestOptions } from '@delon/abc/st'; | ||||
| import { SFComponent, SFDateWidgetSchema, SFSchema, SFUISchema } from '@delon/form'; | ||||
| import { processSingleSort, ShipperBaseService } from '@shared'; | ||||
| import { STColumn, STComponent } from '@delon/abc/st'; | ||||
| import { SFComponent, SFSchema } from '@delon/form'; | ||||
| import { ShipperBaseService } from '@shared'; | ||||
| import { NzModalService } from 'ng-zorro-antd/modal'; | ||||
| import { RebateManagementService } from '../../../services/rebate-management.service'; | ||||
| import { ParterRebateManageMentAddPartnerListComponent } from '../add-partnerlist/add-partnerlist.component'; | ||||
| import { inRange } from '@delon/util'; | ||||
| @Component({ | ||||
|   selector: 'app-parter-channel-rebate-management-add', | ||||
|   styleUrls: ['./add.component.less'], | ||||
| @ -35,7 +33,7 @@ export class ParterRebateManageMentAddComponent implements OnInit { | ||||
|   partnerPeopleList: any = []; | ||||
|   configType = '1'; | ||||
|   precision = 2; | ||||
|   partnerId :Array<string> =[]; | ||||
|   partnerId: Array<string> = []; | ||||
|   inputValue = ''; | ||||
|   @ViewChild('st', { static: true }) | ||||
|   st!: STComponent; | ||||
| @ -59,15 +57,17 @@ export class ParterRebateManageMentAddComponent implements OnInit { | ||||
|     { title: '手机号', index: 'contactMobile', className: 'text-center', width: 150 }, | ||||
|     { title: '类型', index: 'partnerType', className: 'text-center', width: 130, type: 'enum', enum: { 1: '企业', 2: '个人' } }, | ||||
|     { | ||||
|       title: '操作',  width: '90px',  fixed: 'right', | ||||
|       title: '操作', | ||||
|       width: '90px', | ||||
|       fixed: 'right', | ||||
|       buttons: [ | ||||
|         { | ||||
|           text: '移除', | ||||
|           click: _record => this.delete(_record), | ||||
|           acl: { ability: ['AbnormalAppear-reply'] } | ||||
|         }, | ||||
|         } | ||||
|       ] | ||||
|     }, | ||||
|     } | ||||
|   ]; | ||||
|   initSF(data?: any) { | ||||
|     this.schema1 = { | ||||
| @ -79,16 +79,16 @@ export class ParterRebateManageMentAddComponent implements OnInit { | ||||
|             widget: 'tinymce', | ||||
|             loadingTip: 'loading...', | ||||
|             config: { | ||||
|               height: 500, | ||||
|               height: 500 | ||||
|             } | ||||
|           }, | ||||
|           } | ||||
|           // default: data?.agreementContent || '' | ||||
|         } | ||||
|       } | ||||
|     }; | ||||
|   } | ||||
|   ngOnInit() { | ||||
|     this.addStatus =false | ||||
|     this.addStatus = false; | ||||
|     this.initSF(); | ||||
|   } | ||||
|   goBack() { | ||||
| @ -97,64 +97,64 @@ export class ParterRebateManageMentAddComponent implements OnInit { | ||||
|   /** | ||||
|    *合伙人选择 | ||||
|    */ | ||||
|    add(item?: any) { | ||||
|   add(item?: any) { | ||||
|     const modalRef = this.modal.create({ | ||||
|       nzTitle: '合伙人选择', | ||||
|       nzWidth: 1000, | ||||
|       nzContent: ParterRebateManageMentAddPartnerListComponent, | ||||
|       nzComponentParams: { | ||||
|         i: item, | ||||
|         i: item | ||||
|       }, | ||||
|       nzFooter: null | ||||
|     }); | ||||
|     modalRef.afterClose.subscribe((res: any) => { | ||||
|       this.partnerId = []; | ||||
|       if (res) { | ||||
|         if(Array.isArray(res)) { | ||||
|         if (Array.isArray(res)) { | ||||
|           console.log(res); | ||||
|           console.log(this.partnerPeopleList); | ||||
|           this.partnerPeopleList =  this.partnerPeopleList.concat(res); | ||||
|           this.partnerPeopleList = this.partnerPeopleList.concat(res); | ||||
|           res.forEach((ele: any) => { | ||||
|             this.partnerId.push(ele?.id); | ||||
|           }) | ||||
|           }); | ||||
|         } else { | ||||
|           console.log(res); | ||||
|           this.partnerPeopleList =  this.partnerPeopleList.concat(res); | ||||
|           this.partnerPeopleList = this.partnerPeopleList.concat(res); | ||||
|           this.partnerId.push(res?.id); | ||||
|       } | ||||
|         } | ||||
|       } | ||||
|     }); | ||||
|   } | ||||
|   delete(item: any) { | ||||
|   this.partnerPeopleList = this.partnerPeopleList.filter((d:any, i: any) => { | ||||
|    return item.id != d.id | ||||
|   }); | ||||
|     this.partnerPeopleList = this.partnerPeopleList.filter((d: any, i: any) => { | ||||
|       return item.id != d.id; | ||||
|     }); | ||||
|   } | ||||
|   save () { | ||||
|   save() { | ||||
|     const params = { | ||||
|       accountingRate: this.accountingRate, | ||||
|       configName: this.configName, | ||||
|       configType: this.configType, | ||||
|       rebateConfigLineDTO: this.table.data, | ||||
|       priority:  this.priority,// 优先级 | ||||
|       priority: this.priority, // 优先级 | ||||
|       partnerId: this.partnerId.join(','), | ||||
|       ruleDescription: this.sf.value.ruleDescription, | ||||
|       remarke: this.remarke, | ||||
|       partnerType: this.partnerType | ||||
|     } | ||||
|     }; | ||||
|     console.log(params); | ||||
|     this.service.request(this.service.$api_save_rebateConfig, params).subscribe((res: any) => { | ||||
|       if(res) { | ||||
|       if (res) { | ||||
|         console.log(res); | ||||
|         this.service.msgSrv.success('新增成功!') | ||||
|         this.router.navigate(['/partner/rebate/setting']) | ||||
|         this.service.msgSrv.success('新增成功!'); | ||||
|         this.router.navigate(['/partner/rebate/setting']); | ||||
|       } | ||||
|     }) | ||||
|     }); | ||||
|   } | ||||
|   changePartner(value: any) { | ||||
|     console.log(value); | ||||
|     if(value) { | ||||
|       this.addStatus = true | ||||
|     if (value) { | ||||
|       this.addStatus = true; | ||||
|     } | ||||
|   } | ||||
| } | ||||
|  | ||||
| @ -42,7 +42,7 @@ export class SupplyManagementBulkComponent implements OnInit { | ||||
|     private modal: NzModalService, | ||||
|     private router: Router, | ||||
|     public shipperservice: ShipperBaseService | ||||
|   ) {} | ||||
|   ) { } | ||||
|  | ||||
|   ngOnInit(): void { | ||||
|     this.initSF(); | ||||
| @ -335,7 +335,7 @@ export class SupplyManagementBulkComponent implements OnInit { | ||||
|           { | ||||
|             text: '二维码', | ||||
|             click: _record => this.assignedQrcode(_record), | ||||
|             iif: item => item.resourceStatus == 1 | ||||
|             iif: item => item.resourceStatus == 1 && item.serviceType === '1' | ||||
|           }, | ||||
|           { | ||||
|             text: '修改单价', | ||||
| @ -565,7 +565,7 @@ export class SupplyManagementBulkComponent implements OnInit { | ||||
|       } | ||||
|     }); | ||||
|   } | ||||
|   userAction() {} | ||||
|   userAction() { } | ||||
|   // 导出 | ||||
|   exportFire() { | ||||
|     this.service.exportStart(this.reqParams, this.service.$api_asyncExportBulkList); | ||||
|  | ||||
| @ -2,6 +2,7 @@ | ||||
|  | ||||
| <nz-card> | ||||
|     <div class="filter-wrap"> | ||||
|         <button nz-button nzType="primary" (click)="add()">新增</button> | ||||
|         <button nz-button nzType="primary" (click)="open()"><i nz-icon nzType="plus" nzTheme="outline"></i>筛选</button> | ||||
|     </div> | ||||
|     <st #st [data]="this.service.$api_smsTemplate_page " [columns]="columns" [req]="{ process: beforeReq }" | ||||
| @ -23,7 +24,7 @@ | ||||
|     </ng-template> | ||||
| </nz-drawer> | ||||
|  | ||||
| <nz-modal [(nzVisible)]="isVisible" nzTitle="编辑" (nzOnCancel)="handleCancel()" (nzOnOk)="handleOk()"> | ||||
| <nz-modal [(nzVisible)]="isVisible" [nzTitle]="!isEdit?'新增':'编辑'" (nzOnCancel)="handleCancel()" (nzOnOk)="handleOk()" [nzOkDisabled]="!sfEdit?.valid"> | ||||
|     <ng-container *nzModalContent> | ||||
|         <sf #sfEdit [formData]="tempData" [schema]="editSchema" [ui]="{ '*': { spanLabelFixed: 90,grid: { span: 24 } }}" [compact]="true" | ||||
|             [button]="'none'"></sf> | ||||
|  | ||||
| @ -1,5 +1,5 @@ | ||||
|  | ||||
| import { Component, OnInit, ViewChild } from '@angular/core'; | ||||
| import { AfterViewInit, ChangeDetectorRef, Component, OnInit, ViewChild } from '@angular/core'; | ||||
| import { ActivatedRoute } from '@angular/router'; | ||||
| import { STColumn, STComponent, STRequestOptions } from '@delon/abc/st'; | ||||
| import { SFComponent, SFSchema } from '@delon/form'; | ||||
| @ -18,12 +18,19 @@ export class SmsTemplateComponent implements OnInit { | ||||
|   sf!: SFComponent; | ||||
|   @ViewChild('sfEdit', { static: false }) | ||||
|   sfEdit!: SFComponent; | ||||
|   editSchema!: SFSchema; | ||||
|   visible = false; | ||||
|   isVisible = false; | ||||
|   tempData = {}; | ||||
|  | ||||
|   isEdit = false; | ||||
|    | ||||
|   searchSchema: SFSchema = { | ||||
|     properties: { | ||||
|       templateName: { | ||||
|         type: 'string', | ||||
|         title: '模板名称', | ||||
|         ui: { placeholder: '请输入模板名称' } | ||||
|       }, | ||||
|       templateCode: { | ||||
|         type: 'string', | ||||
|         title: '模板编码', | ||||
| @ -37,27 +44,32 @@ export class SmsTemplateComponent implements OnInit { | ||||
|     } | ||||
|   }; | ||||
|  | ||||
|   editSchema: SFSchema = { | ||||
|     properties: { | ||||
|       templateCode: { | ||||
|         type: 'string', | ||||
|         title: '模板编码', | ||||
|         ui: { placeholder: '请输入模板编码' } | ||||
|   initSF() { | ||||
|     this.editSchema = { | ||||
|       properties: { | ||||
|         templateName: { | ||||
|           type: 'string', | ||||
|           title: '模板名称', | ||||
|           ui: { placeholder: '请输入模板名称', errors: { require: '必填项'} } | ||||
|         }, | ||||
|         templateCode: { | ||||
|           type: 'string', | ||||
|           title: '模板编码', | ||||
|           readOnly: this.isEdit, | ||||
|           ui: { placeholder: '请输入模板编码', errors: { require: '必填项'} } | ||||
|         }, | ||||
|         templateContent: { | ||||
|           type: 'string', | ||||
|           title: '模板内容', | ||||
|           ui: { placeholder: '请输入模板内容', errors: { require: '必填项'} } | ||||
|         } | ||||
|       }, | ||||
|       templateContent: { | ||||
|         type: 'string', | ||||
|         title: '模板内容', | ||||
|         ui: { placeholder: '请输入模板内容' } | ||||
|       }, | ||||
|       templateName: { | ||||
|         type: 'string', | ||||
|         title: '模板名称', | ||||
|         ui: { placeholder: '请输入模板名称' } | ||||
|       } | ||||
|       required: ['templateName','templateCode','templateContent'] | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   columns: STColumn[] = [ | ||||
|     { title: '模板名称', className: 'text-center', index: 'templateName' }, | ||||
|     { title: '模板编码', className: 'text-center', index: 'templateCode' }, | ||||
|     { title: '模板内容', className: 'text-center', index: 'templateContent' }, | ||||
|     // { | ||||
| @ -83,7 +95,9 @@ export class SmsTemplateComponent implements OnInit { | ||||
|   constructor(public service: SystemService, private nzModalService: NzModalService, private route: ActivatedRoute) { | ||||
|   } | ||||
|  | ||||
|   ngOnInit(): void { } | ||||
|   ngOnInit(): void { | ||||
|     this.initSF(); | ||||
|   } | ||||
|  | ||||
|   beforeReq = (requestOptions: STRequestOptions) => { | ||||
|     if (this.sf) { | ||||
| @ -94,6 +108,9 @@ export class SmsTemplateComponent implements OnInit { | ||||
|  | ||||
|   edit(item: any) { | ||||
|     // console.log(item); | ||||
|     this.isEdit = true; | ||||
|     this.editSchema!.properties!.templateCode.readOnly = true; | ||||
|     this.sfEdit?.refreshSchema(); | ||||
|     this.tempData = item; | ||||
|     this.isVisible = true; | ||||
|   } | ||||
| @ -111,9 +128,17 @@ export class SmsTemplateComponent implements OnInit { | ||||
|     this.visible = false; | ||||
|   } | ||||
|  | ||||
|   add() { | ||||
|     this.isEdit = false; | ||||
|     this.editSchema!.properties!.templateCode.readOnly = false; | ||||
|     this.sfEdit?.refreshSchema(); | ||||
|     this.tempData = {}; | ||||
|     this.isVisible = true; | ||||
|   } | ||||
|  | ||||
|   handleOk(): void { | ||||
|     const value = this.sfEdit.value; | ||||
|     const { id, templateCode, templateName, templateContent } = value | ||||
|     const { id, templateCode, templateName, templateContent } = value; | ||||
|     const params = { | ||||
|       id, | ||||
|       templateCode, | ||||
|  | ||||
| @ -9,7 +9,7 @@ | ||||
|     <div nz-col [nzSpan]="_$expand ? 24 : 6" [class.text-right]="_$expand"> | ||||
|       <button nz-button nzType="primary" [disabled]="!sf.valid" [nzLoading]="isLoading && st.loading" (click)="search()" >查询</button> | ||||
|       <button nz-button (click)="resetSF()">重置</button> | ||||
|       <button nz-button (click)="resetSF()">导出</button> | ||||
|       <button nz-button (click)="export()">导出</button> | ||||
|       <button nz-button nzType="link" (click)="expandToggle()"> | ||||
|         {{ !_$expand ? '展开' : '收起' }} | ||||
|         <i nz-icon [nzType]="!_$expand ? 'down' : 'up'"></i> | ||||
| @ -27,25 +27,20 @@ | ||||
|     [req]="{ method: 'POST', allInBody: true, reName: { pi: 'pageIndex', ps: 'pageSize' }, params: reqParams }" | ||||
|     [res]="{ reName: { list: 'data.records', total: 'data.total' } }" | ||||
|     [page]="{ show: true, showSize: true, pageSizes: [10,20, 50, 100] }" [loading]="service.http.loading"> | ||||
|     <ng-template st-row="putStatus" let-item let-index="index"> | ||||
|     <ng-template st-row="uploadSts" let-item let-index="index"> | ||||
|       <!-- <a (click)="viewAuditResult(item)" *ngIf="item?.billStatus === '2'">{{item?.billStatusLabel}}</a> --> | ||||
|       <span *ngIf="item?.uploadSts == '1'">待上传</span> | ||||
|       <span *ngIf="item?.uploadSts == '3'">已上传</span> | ||||
|       <span *ngIf="item?.uploadSts == '2'">上传中</span> | ||||
|       <span  *ngIf="item?.uploadSts == '4'" style="color: red;" (click)="unnormal(item)">上传异常</span> | ||||
|     </ng-template> | ||||
|     <ng-template st-row="invoiceNO" let-item let-index="index"> | ||||
|       <a href="/">{{item.invoiceno}}</a> | ||||
|     </ng-template> | ||||
|     <ng-template st-row="artoname" let-item let-index="index"> | ||||
|       <a href="/">{{item.artoname}}</a> | ||||
|     </ng-template> | ||||
|     <ng-template st-row="billHCode" let-item let-index="index"> | ||||
|       <a href="/">{{item.billHCode}}</a> | ||||
|     </ng-template> | ||||
|     <ng-template st-row="invoiceType" let-item let-index="index"> | ||||
|       <span>增值税专用发票</span> | ||||
|     </ng-template> | ||||
|     <ng-template st-row="sts" let-item let-index="index"> | ||||
|       <span *ngIf="item.sts==='1'">有效</span> | ||||
|       <span *ngIf="item.sts==='2'">作废</span> | ||||
|     </ng-template> | ||||
|     <ng-template st-row="orderAmount" let-item let-index="index"> | ||||
|       <div class="text-right">{{item?.orderAmount | currency }}</div> | ||||
|     </ng-template> | ||||
| @ -58,6 +53,6 @@ | ||||
|       <strong class="text-red">{{ selectedRows.length }}</strong> 条数据 | ||||
|     </div> | ||||
|     <button *ngIf="selectedIndex === '1' || selectedIndex === '4'" nz-button nzType="primary" (click)="upload()">上传</button> | ||||
|     <button *ngIf="selectedIndex === '2' || selectedIndex === '3'" nz-button nzType="primary" (click)="recall()">撤回</button> | ||||
|     <button *ngIf="selectedIndex === '3'" nz-button nzType="primary" (click)="recall()">撤回</button> | ||||
|   </div> | ||||
| </ng-template> | ||||
|  | ||||
| @ -27,7 +27,7 @@ export class TaxManagementInvoiceReportingComponent implements OnInit { | ||||
|     { name: '异常', value: '4' }, | ||||
|     { name: '全部', value: '' } | ||||
|   ]; | ||||
|   selectedIndex = ''; //选择的项目 | ||||
|   selectedIndex = '1'; //选择的项目 | ||||
|   serviceTel = ''; | ||||
|   constructor( | ||||
|     public service: TaxManagementService, | ||||
| @ -50,7 +50,7 @@ export class TaxManagementInvoiceReportingComponent implements OnInit { | ||||
|    * 查询参数 | ||||
|    */ | ||||
|   get reqParams() { | ||||
|     const params = Object.assign({}, this.sf?.value || {}); | ||||
|     const params = Object.assign({}, this.sf?.value || {}, { uploadSts: this.selectedIndex }); | ||||
|     delete params._$expand; | ||||
|     return { ...params }; | ||||
|   } | ||||
| @ -213,9 +213,12 @@ export class TaxManagementInvoiceReportingComponent implements OnInit { | ||||
|       { | ||||
|         title: '发票号码', | ||||
|         index: 'invoiceno', | ||||
|         render: 'invoiceNO', | ||||
|         className: 'text-center', | ||||
|         width: '150px', | ||||
|         type: 'link', | ||||
|         click: item => { | ||||
|           window.open(`/#/ticket/invoice-list/detail/${item.vatinvHId}?type=${item.invoiceType}`, '_blank', 'noopener') | ||||
|         } | ||||
|       }, | ||||
|       { title: '发票代码', index: 'invoiceno2', className: 'text-center', width: '150px', }, | ||||
|       { | ||||
| @ -224,14 +227,24 @@ export class TaxManagementInvoiceReportingComponent implements OnInit { | ||||
|         className: 'text-center', | ||||
|         width: '180px', | ||||
|       }, | ||||
|       { title: '购买方企业名称', index: 'artoname', render: 'artoname', className: 'text-center', width: '200px' }, | ||||
|       { | ||||
|         title: '购买方企业名称', index: 'artoname', className: 'text-center', width: '200px', type: 'link', | ||||
|         click: item => { | ||||
|           window.open(`/#/usercenter/freight/list/detail/${item.ltdId}`, '_blank', 'noopener') | ||||
|         } | ||||
|       }, | ||||
|       { title: '购买方统一社会信用代码', index: 'artotaxno', className: 'text-center', width: '200px' }, | ||||
|       { title: '订单号', index: 'billHCode', render: 'billHCode', className: 'text-center', width: '120px' }, | ||||
|       { | ||||
|         title: '订单号', index: 'billHCode', className: 'text-center', width: '120px', type: 'link', | ||||
|         click: item => { | ||||
|           window.open(`/#/order-management/vehicle/vehicle-detail/${item.ltdId}`, '_blank', 'noopener') | ||||
|         } | ||||
|       }, | ||||
|       { title: '货物名称', index: 'goodsinfo', className: 'text-center', width: '180px' }, | ||||
|       { title: '价税合计', index: 'vatmoney', className: 'text-center', width: '180px' }, | ||||
|       { title: '开票日期', index: 'invoicedate', className: 'text-center', width: '180px' }, | ||||
|       { title: '发票所属月份', index: 'invoicemonth', className: 'text-center', width: '250px' }, | ||||
|       { title: '发票状态', index: 'sts', className: 'text-center', width: '200px' }, | ||||
|       { title: '发票状态', index: 'sts', render: 'sts', className: 'text-center', width: '200px' }, | ||||
|       { title: '上传日期', index: 'uoloadDate', className: 'text-center', width: '200px' }, | ||||
|     ]; | ||||
|   } | ||||
| @ -247,17 +260,18 @@ export class TaxManagementInvoiceReportingComponent implements OnInit { | ||||
|       this.openWainingModal('请选择需要撤回的数据'); | ||||
|       return; | ||||
|     } | ||||
|     let params: any[] = []; | ||||
|     let ids: any[] = []; | ||||
|     this.selectedRows.forEach(item => { | ||||
|       params.push(item.id); | ||||
|       ids.push(item.id); | ||||
|     }); | ||||
|  | ||||
|     this.modal.confirm({ | ||||
|       nzTitle: '撤回提示', | ||||
|       nzContent: ' 撤回后可以重新上传,重新上传会覆盖已上传数据,确定要撤回?', | ||||
|       nzOkText: '确定', | ||||
|       nzCancelText: '取消', | ||||
|       nzOnOk: () => { | ||||
|         this.service.request(this.service.$api_get_recessionTaxOrder, params).subscribe((res: any) => { | ||||
|         this.service.request(this.service.$api_invoiceUpload_withdraw, { ids }).subscribe((res: any) => { | ||||
|           if (res) { | ||||
|             this.service.msgSrv.success('撤销成功'); | ||||
|             this.search(); | ||||
| @ -322,6 +336,8 @@ export class TaxManagementInvoiceReportingComponent implements OnInit { | ||||
|     console.log(item); | ||||
|  | ||||
|     this.selectedIndex = item?.value || ''; | ||||
|     console.log(this.selectedIndex); | ||||
|  | ||||
|     setTimeout(() => { | ||||
|       this.st.load(); | ||||
|     }) | ||||
| @ -380,7 +396,7 @@ export class TaxManagementInvoiceReportingComponent implements OnInit { | ||||
|   * 异步导出 | ||||
|   */ | ||||
|   export() { | ||||
|     this.service.exportStart(this.sf?.value, this.service.$api_async_export_order_reporting_list); | ||||
|     this.service.exportStart(this.reqParams, this.service.$api_invoiceUpload_export); | ||||
|   } | ||||
|  | ||||
|   openWainingModal(content: string, title = '提示') { | ||||
|  | ||||
| @ -56,7 +56,12 @@ export class TaxManagementService extends ShipperBaseService { | ||||
|   $api_async_export_order_reporting_list = ``; // 导出订单上报 | ||||
|   $api_get_upload_setting = ``; // 修改上传设置 | ||||
|   $api_upload_setting_save = ``; // 修改上传设置 | ||||
|   // 获取发票上传列表 | ||||
|   $api_getInvoiceReport_page = '/api/sdc/invoiceUploadInfo/list/page'; | ||||
|   // 发票上传列表导出 | ||||
|   $api_invoiceUpload_export = '/api/sdc/invoiceUploadInfo/reportList'; | ||||
|   // 发票上传撤回 | ||||
|   $api_invoiceUpload_withdraw = '/api/sdc/invoiceUploadInfo/withdraw'; | ||||
|   constructor(public injector: Injector) { | ||||
|     super(injector); | ||||
|   } | ||||
|  | ||||
| @ -208,6 +208,8 @@ export class ETCInvoicedLogsComponent implements OnInit { | ||||
|         className: 'text-right font-weight-bold', | ||||
|         widget: { type: 'currency-chy', params: ({ record }) => ({ value: record.totalAmount }) } | ||||
|       }, | ||||
|       { title: '进站时间', index: 'trafficStartTime', type: 'date', width: 150 }, | ||||
|       { title: '出站时间', index: 'trafficEndTime', type: 'date', width: 150 }, | ||||
|       { title: '交易时间', index: 'exTime', type: 'date', width: 150 }, | ||||
|       { title: '开票日期', index: 'invoiceMakeTime', type: 'date', width: 150 }, | ||||
|       { title: '销售方', index: 'sellerName', width: 150 }, | ||||
|  | ||||
| @ -409,7 +409,7 @@ export class FreightComponentsListComponent implements OnInit { | ||||
|       }, | ||||
|       { title: '业务员', className: 'text-center', render: 'promotersTelephone', width: 150 }, | ||||
|       { title: '合伙人', className: 'text-center', render: 'partnerName', width: 150 }, | ||||
|       { title: '客服人员', className: 'text-center', render: 'customerServiceId', width: 150 }, | ||||
|       { title: '客服人员', className: 'text-center', index: 'customerServiceIdLabel', width: 150 }, | ||||
|       { title: '网络货运人', className: 'text-center', index: 'netTranName', width: 180 }, | ||||
|       { | ||||
|         title: '注册渠道', | ||||
|  | ||||
| @ -1,5 +1,5 @@ | ||||
| <!-- 页头 --> | ||||
| <page-header-wrapper [logo]="logo" title="车辆详情" [content]="content" [ngClass]="{'affix': scrollTop>210}"> | ||||
| <page-header-wrapper [logo]="logo" title="车辆详情" [content]="content" [ngClass]="{ affix: scrollTop > 210 }"> | ||||
|   <ng-template #logo> | ||||
|     <button nz-button nz-tooltip nzTooltipTitle="返回上一页" (click)="goBack()"> | ||||
|       <i nz-icon nzType="left" nzTheme="outline"></i> | ||||
| @ -7,23 +7,28 @@ | ||||
|   </ng-template> | ||||
|   <ng-template #content> | ||||
|     <sv-container col="3"> | ||||
|       <h2>车牌号:{{detailData?.carNo}}</h2> | ||||
|       <sv-title style="font-weight: 700;"> | ||||
|       <h2>车牌号:{{ detailData?.carNo }}</h2> | ||||
|       <sv-title style="font-weight: 700"> | ||||
|         <span *ngIf="detailData?.approvalStatus === 1 || detailData?.approvalStatus === '1'">未上传</span> | ||||
|         <span *ngIf="detailData?.approvalStatus === 0 || detailData?.approvalStatus === '0'">草稿</span> | ||||
|         <span *ngIf="detailData?.approvalStatus === 10 || detailData?.approvalStatus === '10'">待审核</span> | ||||
|         <span *ngIf="detailData?.approvalStatus === 20 || detailData?.approvalStatus === '20'">已审核</span> | ||||
|         <span *ngIf="detailData?.approvalStatus === 30 || detailData?.approvalStatus === '30'">已驳回</span> | ||||
|         <span *ngIf="detailData?.approvalStatus === 40 || detailData?.approvalStatus === '40'">证件过期</span> | ||||
|         <div style="float: right;" *ngIf="detailData?.approvalStatus !== 20 && detailData?.approvalStatus !== '20'"> | ||||
|           <ng-container *ngIf="!isEdit "> | ||||
|             <button nz-button nzType="default" nzDanger (click)="approveDriver()" acl | ||||
|               acl-ability="VEHICLE-AUDIT-DETAIL-pass">通过</button> | ||||
|             <button nz-button nzType="default" nzDanger (click)="rejectedDriver()" acl | ||||
|         <div style="float: right" *ngIf="detailData?.approvalStatus !== 20 && detailData?.approvalStatus !== '20'"> | ||||
|           <ng-container *ngIf="!isEdit"> | ||||
|             <button nz-button nzType="default" nzDanger (click)="approveDriver()" acl acl-ability="VEHICLE-AUDIT-DETAIL-pass">通过</button> | ||||
|             <button | ||||
|               nz-button | ||||
|               nzType="default" | ||||
|               nzDanger | ||||
|               (click)="rejectedDriver()" | ||||
|               acl | ||||
|               acl-ability="VEHICLE-AUDIT-DETAIL-reject" | ||||
|               *ngIf="detailData?.approvalStatus === 10 || detailData?.approvalStatus === '10'">驳回</button> | ||||
|             <button nz-button nzType="default" nzDanger (click)="ratify()" acl | ||||
|               acl-ability="VEHICLE-AUDIT-DETAIL-save">修改</button> | ||||
|               *ngIf="detailData?.approvalStatus === 10 || detailData?.approvalStatus === '10'" | ||||
|               >驳回</button | ||||
|             > | ||||
|             <button nz-button nzType="default" nzDanger (click)="ratify()" acl acl-ability="VEHICLE-AUDIT-DETAIL-save">修改</button> | ||||
|           </ng-container> | ||||
|           <ng-container *ngIf="isEdit"> | ||||
|             <button nz-button nzType="default" (click)="reset()">取消</button> | ||||
| @ -41,14 +46,17 @@ | ||||
|   </ng-template> | ||||
| </page-header-wrapper> | ||||
|  | ||||
| <nz-card [class]="isEdit?'edit-box':'readOnly-box'"> | ||||
|  | ||||
| <nz-card [class]="isEdit ? 'edit-box' : 'readOnly-box'"> | ||||
|   <sv-container col="3"> | ||||
|     <sv-title style="font-weight: 700;">车辆基础信息 | ||||
|     </sv-title> | ||||
|     <sv-title style="font-weight: 700">车辆基础信息 </sv-title> | ||||
|     <sv label="车牌颜色"> | ||||
|       <nz-select [(ngModel)]="detailData.carNoColor" [nzPlaceHolder]="isEdit?'':'-'" [nzBorderless]="!isEdit" | ||||
|         [nzShowArrow]="isEdit" [nzDisabled]="!isEdit"> | ||||
|       <nz-select | ||||
|         [(ngModel)]="detailData.carNoColor" | ||||
|         [nzPlaceHolder]="isEdit ? '' : '-'" | ||||
|         [nzBorderless]="!isEdit" | ||||
|         [nzShowArrow]="isEdit" | ||||
|         [nzDisabled]="!isEdit" | ||||
|       > | ||||
|         <nz-option *ngFor="let i of contenCarNoColor" [nzLabel]="i.label" [nzValue]="i.value"></nz-option> | ||||
|       </nz-select> | ||||
|     </sv> | ||||
| @ -57,25 +65,46 @@ | ||||
|         [nzShowArrow]="isEdit" [nzDisabled]="!isEdit"> | ||||
|         <nz-option *ngFor="let i of contencarModel" [nzLabel]="i.label" [nzValue]="i.value"></nz-option> | ||||
|       </nz-select> --> | ||||
|       <input nz-input type="text" [(ngModel)]="detailData.carModel" [readonly]="!isEdit" | ||||
|       [nzBorderless]="!isEdit" [placeholder]="isEdit?'':'-'"> | ||||
|       <input | ||||
|         nz-input | ||||
|         type="text" | ||||
|         [(ngModel)]="detailData.carModel" | ||||
|         [readonly]="!isEdit" | ||||
|         [nzBorderless]="!isEdit" | ||||
|         [placeholder]="isEdit ? '' : '-'" | ||||
|       /> | ||||
|     </sv> | ||||
|     <sv label="车长"> | ||||
|       <nz-select [(ngModel)]="detailData.carLength" [nzPlaceHolder]="isEdit?'':'-'" [nzBorderless]="!isEdit" | ||||
|         [nzShowArrow]="isEdit" [nzDisabled]="!isEdit"> | ||||
|       <nz-select | ||||
|         [(ngModel)]="detailData.carLength" | ||||
|         [nzPlaceHolder]="isEdit ? '' : '-'" | ||||
|         [nzBorderless]="!isEdit" | ||||
|         [nzShowArrow]="isEdit" | ||||
|         [nzDisabled]="!isEdit" | ||||
|       > | ||||
|         <nz-option *ngFor="let i of contenCarLength" [nzLabel]="i.label" [nzValue]="i.value"></nz-option> | ||||
|       </nz-select> | ||||
|     </sv> | ||||
|     <sv label="是否为挂车"> | ||||
|       <nz-select [(ngModel)]="detailData.isTrailer" [nzPlaceHolder]="isEdit?'':'-'" [nzBorderless]="!isEdit" | ||||
|         [nzShowArrow]="isEdit" [nzDisabled]="!isEdit"> | ||||
|       <nz-select | ||||
|         [(ngModel)]="detailData.isTrailer" | ||||
|         [nzPlaceHolder]="isEdit ? '' : '-'" | ||||
|         [nzBorderless]="!isEdit" | ||||
|         [nzShowArrow]="isEdit" | ||||
|         [nzDisabled]="!isEdit" | ||||
|       > | ||||
|         <nz-option [nzValue]="false" nzLabel="否"></nz-option> | ||||
|         <nz-option [nzValue]="true" nzLabel="是"></nz-option> | ||||
|       </nz-select> | ||||
|     </sv> | ||||
|     <sv label="是否挂靠"> | ||||
|       <nz-select [(ngModel)]="detailData.isSelf" [nzPlaceHolder]="isEdit?'':'-'" [nzBorderless]="!isEdit" | ||||
|         [nzShowArrow]="isEdit" [nzDisabled]="!isEdit"> | ||||
|       <nz-select | ||||
|         [(ngModel)]="detailData.isSelf" | ||||
|         [nzPlaceHolder]="isEdit ? '' : '-'" | ||||
|         [nzBorderless]="!isEdit" | ||||
|         [nzShowArrow]="isEdit" | ||||
|         [nzDisabled]="!isEdit" | ||||
|       > | ||||
|         <nz-option [nzValue]="false" nzLabel="否"></nz-option> | ||||
|         <nz-option [nzValue]="true" nzLabel="是"></nz-option> | ||||
|       </nz-select> | ||||
| @ -84,23 +113,38 @@ | ||||
|   <sv-container col="1" class="mt-md"> | ||||
|     <sv label="车头照"> | ||||
|       <ng-container | ||||
|         *ngTemplateOutlet="uploadTemplate;context:{image:detailData?.carFrontPhotoWatermark,key:'carFrontPhotoWatermark',hover: 'PhotoWatermark2'}"> | ||||
|         *ngTemplateOutlet=" | ||||
|           uploadTemplate; | ||||
|           context: { image: detailData?.carFrontPhotoWatermark, key: 'carFrontPhotoWatermark', hover: 'PhotoWatermark2' } | ||||
|         " | ||||
|       > | ||||
|       </ng-container> | ||||
|     </sv> | ||||
|   </sv-container> | ||||
|   <nz-divider></nz-divider> | ||||
|  | ||||
|   <sv-container col="3"> | ||||
|     <sv-title style="font-weight: 700;">行驶证信息</sv-title> | ||||
|     <sv-title style="font-weight: 700">行驶证信息</sv-title> | ||||
|     <sv label="档案编号"> | ||||
|       <input nz-input type="text" [(ngModel)]="detailData.archivesNo" [readonly]="!isEdit" [nzBorderless]="!isEdit" | ||||
|         [placeholder]="isEdit?'':'-'"> | ||||
|       <input | ||||
|         nz-input | ||||
|         type="text" | ||||
|         [(ngModel)]="detailData.archivesNo" | ||||
|         [readonly]="!isEdit" | ||||
|         [nzBorderless]="!isEdit" | ||||
|         [placeholder]="isEdit ? '' : '-'" | ||||
|       /> | ||||
|     </sv> | ||||
|     <sv label="行驶证注册日期"> | ||||
|       <!-- <input nz-input type="text" [(ngModel)]="detailData.driverLicenseRegisterTime" [readonly]="!isEdit" [nzBorderless]="!isEdit" | ||||
|       [placeholder]="isEdit?'':'-'"> --> | ||||
|       <nz-date-picker [(ngModel)]="detailData.driverLicenseRegisterTime" [nzDisabled]="!isEdit" | ||||
|         [nzPlaceHolder]="isEdit?'':'-'" [nzBorderless]="!isEdit" [nzSuffixIcon]="isEdit?'calendar':''"></nz-date-picker> | ||||
|       <nz-date-picker | ||||
|         [(ngModel)]="detailData.driverLicenseRegisterTime" | ||||
|         [nzDisabled]="!isEdit" | ||||
|         [nzPlaceHolder]="isEdit ? '' : '-'" | ||||
|         [nzBorderless]="!isEdit" | ||||
|         [nzSuffixIcon]="isEdit ? 'calendar' : ''" | ||||
|       ></nz-date-picker> | ||||
|     </sv> | ||||
|   </sv-container> | ||||
|  | ||||
| @ -108,12 +152,24 @@ | ||||
|     <sv label="行驶证到期日"> | ||||
|       <!-- <input nz-input type="text" [(ngModel)]="detailData.driverLicenseEndTime" [readonly]="!isEdit" [nzBorderless]="!isEdit" | ||||
|         [placeholder]="isEdit?'':'-'"> --> | ||||
|       <nz-date-picker [(ngModel)]="detailData.driverLicenseEndTime" [nzDisabled]="!isEdit" | ||||
|         [nzPlaceHolder]="isEdit?'':'-'" [nzBorderless]="!isEdit" [nzSuffixIcon]="isEdit?'calendar':''"></nz-date-picker> | ||||
|       <nz-date-picker | ||||
|         [(ngModel)]="detailData.driverLicenseEndTime" | ||||
|         [nzDisabled]="!isEdit" | ||||
|         [nzPlaceHolder]="isEdit ? '' : '-'" | ||||
|         [nzBorderless]="!isEdit" | ||||
|         [nzSuffixIcon]="isEdit ? 'calendar' : ''" | ||||
|       ></nz-date-picker> | ||||
|     </sv> | ||||
|     <sv label="行驶证签发机关"> | ||||
|       <input nz-input style="width: '300px'" type="text" [(ngModel)]="detailData.driverLicenseSigningOrg" | ||||
|         [readonly]="!isEdit" [nzBorderless]="!isEdit" [placeholder]="isEdit?'':'-'"> | ||||
|       <input | ||||
|         nz-input | ||||
|         style="width: '300px'" | ||||
|         type="text" | ||||
|         [(ngModel)]="detailData.driverLicenseSigningOrg" | ||||
|         [readonly]="!isEdit" | ||||
|         [nzBorderless]="!isEdit" | ||||
|         [placeholder]="isEdit ? '' : '-'" | ||||
|       /> | ||||
|     </sv> | ||||
|   </sv-container> | ||||
|  | ||||
| @ -121,16 +177,32 @@ | ||||
|     <sv label="行驶证发证日期"> | ||||
|       <!-- <input nz-input type="text" [(ngModel)]="detailData.driverLicenseGetTime" [readonly]="!isEdit" [nzBorderless]="!isEdit" | ||||
|       [placeholder]="isEdit?'':'-'"> --> | ||||
|       <nz-date-picker [(ngModel)]="detailData.driverLicenseGetTime" [nzDisabled]="!isEdit" | ||||
|         [nzPlaceHolder]="isEdit?'':'-'" [nzBorderless]="!isEdit" [nzSuffixIcon]="isEdit?'calendar':''"></nz-date-picker> | ||||
|       <nz-date-picker | ||||
|         [(ngModel)]="detailData.driverLicenseGetTime" | ||||
|         [nzDisabled]="!isEdit" | ||||
|         [nzPlaceHolder]="isEdit ? '' : '-'" | ||||
|         [nzBorderless]="!isEdit" | ||||
|         [nzSuffixIcon]="isEdit ? 'calendar' : ''" | ||||
|       ></nz-date-picker> | ||||
|     </sv> | ||||
|     <sv label="车辆识别代码"> | ||||
|       <input nz-input type="text" [(ngModel)]="detailData.carDistinguishCode" [readonly]="!isEdit" | ||||
|         [nzBorderless]="!isEdit" [placeholder]="isEdit?'':'-'"> | ||||
|       <input | ||||
|         nz-input | ||||
|         type="text" | ||||
|         [(ngModel)]="detailData.carDistinguishCode" | ||||
|         [readonly]="!isEdit" | ||||
|         [nzBorderless]="!isEdit" | ||||
|         [placeholder]="isEdit ? '' : '-'" | ||||
|       /> | ||||
|     </sv> | ||||
|     <sv label="使用性质"> | ||||
|       <nz-select [(ngModel)]="detailData.useNature" [nzPlaceHolder]="isEdit?'':'-'" [nzBorderless]="!isEdit" | ||||
|         [nzShowArrow]="isEdit" [nzDisabled]="!isEdit"> | ||||
|       <nz-select | ||||
|         [(ngModel)]="detailData.useNature" | ||||
|         [nzPlaceHolder]="isEdit ? '' : '-'" | ||||
|         [nzBorderless]="!isEdit" | ||||
|         [nzShowArrow]="isEdit" | ||||
|         [nzDisabled]="!isEdit" | ||||
|       > | ||||
|         <nz-option [nzValue]="'1'" nzLabel="营运"></nz-option> | ||||
|         <nz-option [nzValue]="'0'" nzLabel="非营运"></nz-option> | ||||
|       </nz-select> | ||||
| @ -139,64 +211,127 @@ | ||||
|  | ||||
|   <sv-container col="3"> | ||||
|     <sv label="载重(吨)"> | ||||
|       <input nz-input type="text" [(ngModel)]="detailData.carLoad" [readonly]="!isEdit" [nzBorderless]="!isEdit" | ||||
|         [placeholder]="isEdit?'':'-'"> | ||||
|       <input | ||||
|         nz-input | ||||
|         type="text" | ||||
|         [(ngModel)]="detailData.carLoad" | ||||
|         [readonly]="!isEdit" | ||||
|         [nzBorderless]="!isEdit" | ||||
|         [placeholder]="isEdit ? '' : '-'" | ||||
|       /> | ||||
|     </sv> | ||||
|     <sv label="整备质量"> | ||||
|       <input nz-input type="text" [(ngModel)]="detailData.curbWeight" [readonly]="!isEdit" [nzBorderless]="!isEdit" | ||||
|         [placeholder]="isEdit?'':'-'"> | ||||
|       <input | ||||
|         nz-input | ||||
|         type="text" | ||||
|         [(ngModel)]="detailData.curbWeight" | ||||
|         [readonly]="!isEdit" | ||||
|         [nzBorderless]="!isEdit" | ||||
|         [placeholder]="isEdit ? '' : '-'" | ||||
|       /> | ||||
|     </sv> | ||||
|     <sv label="所有人"> | ||||
|       <input nz-input style="width: '300px'" type="text" [(ngModel)]="detailData.carOwner" [readonly]="!isEdit" | ||||
|         [nzBorderless]="!isEdit" [placeholder]="isEdit?'':'-'"> | ||||
|       <input | ||||
|         nz-input | ||||
|         style="width: '300px'" | ||||
|         type="text" | ||||
|         [(ngModel)]="detailData.carOwner" | ||||
|         [readonly]="!isEdit" | ||||
|         [nzBorderless]="!isEdit" | ||||
|         [placeholder]="isEdit ? '' : '-'" | ||||
|       /> | ||||
|     </sv> | ||||
|   </sv-container> | ||||
|   <sv-container col="1"> | ||||
|     <sv label="行驶证照片"> | ||||
|       <ng-container | ||||
|         *ngTemplateOutlet="uploadTemplate;context:{image:detailData?.certificatePhotoFrontWatermark,key:'certificatePhotoFrontWatermark',hover: 'FrontWatermark'}"> | ||||
|         *ngTemplateOutlet=" | ||||
|           uploadTemplate; | ||||
|           context: { image: detailData?.certificatePhotoFrontWatermark, key: 'certificatePhotoFrontWatermark', hover: 'FrontWatermark' } | ||||
|         " | ||||
|       > | ||||
|       </ng-container> | ||||
|       <ng-container | ||||
|         *ngTemplateOutlet="uploadTemplate;context:{image:detailData?.certificatePhotoBackWatermark,key:'certificatePhotoBackWatermark',hover: 'BackWatermark'}"> | ||||
|         *ngTemplateOutlet=" | ||||
|           uploadTemplate; | ||||
|           context: { image: detailData?.certificatePhotoBackWatermark, key: 'certificatePhotoBackWatermark', hover: 'BackWatermark' } | ||||
|         " | ||||
|       > | ||||
|       </ng-container> | ||||
|     </sv> | ||||
|   </sv-container> | ||||
|   <nz-divider></nz-divider> | ||||
|   <sv-container col="3" class="mt16"> | ||||
|     <sv-title style="font-weight: 700;">道路运输证信息</sv-title> | ||||
|     <sv-title style="font-weight: 700">道路运输证信息</sv-title> | ||||
|     <sv label="道路运输证号"> | ||||
|       <input nz-input type="text" [(ngModel)]="detailData.roadTransportNo" [readonly]="!isEdit" [nzBorderless]="!isEdit" | ||||
|         [placeholder]="isEdit?'':'-'"> | ||||
|       <input | ||||
|         nz-input | ||||
|         type="text" | ||||
|         [(ngModel)]="detailData.roadTransportNo" | ||||
|         [readonly]="!isEdit" | ||||
|         [nzBorderless]="!isEdit" | ||||
|         [placeholder]="isEdit ? '' : '-'" | ||||
|       /> | ||||
|     </sv> | ||||
|     <sv label="经营许可证号"> | ||||
|       <input nz-input type="text" [(ngModel)]="detailData.roadTransportLicenceNo" [readonly]="!isEdit" | ||||
|         [nzBorderless]="!isEdit" [placeholder]="isEdit?'':'-'"> | ||||
|       <input | ||||
|         nz-input | ||||
|         type="text" | ||||
|         [(ngModel)]="detailData.roadTransportLicenceNo" | ||||
|         [readonly]="!isEdit" | ||||
|         [nzBorderless]="!isEdit" | ||||
|         [placeholder]="isEdit ? '' : '-'" | ||||
|       /> | ||||
|     </sv> | ||||
|     <sv label="发证日期"> | ||||
|       <!-- <input nz-input type="text" [(ngModel)]="detailData.roadTransportStartTime" [readonly]="!isEdit" [nzBorderless]="!isEdit" | ||||
|       [placeholder]="isEdit?'':'-'"> --> | ||||
|       <nz-date-picker [(ngModel)]="detailData.roadTransportStartTime" [nzDisabled]="!isEdit" | ||||
|         [nzPlaceHolder]="isEdit?'':'-'" [nzBorderless]="!isEdit" [nzSuffixIcon]="isEdit?'calendar':''"></nz-date-picker> | ||||
|       <nz-date-picker | ||||
|         [(ngModel)]="detailData.roadTransportStartTime" | ||||
|         [nzDisabled]="!isEdit" | ||||
|         [nzPlaceHolder]="isEdit ? '' : '-'" | ||||
|         [nzBorderless]="!isEdit" | ||||
|         [nzSuffixIcon]="isEdit ? 'calendar' : ''" | ||||
|       ></nz-date-picker> | ||||
|     </sv> | ||||
|     <sv label="有效期至"> | ||||
|       <!-- <input nz-input type="text" [(ngModel)]="detailData.roadTransportEndTime" [readonly]="!isEdit" [nzBorderless]="!isEdit" | ||||
|       [placeholder]="isEdit?'':'-'"> --> | ||||
|       <nz-date-picker [(ngModel)]="detailData.roadTransportEndTime" [nzDisabled]="!isEdit" | ||||
|         [nzPlaceHolder]="isEdit?'':'-'" [nzBorderless]="!isEdit" [nzSuffixIcon]="isEdit?'calendar':''"></nz-date-picker> | ||||
|       <nz-date-picker | ||||
|         [(ngModel)]="detailData.roadTransportEndTime" | ||||
|         [nzDisabled]="!isEdit" | ||||
|         [nzPlaceHolder]="isEdit ? '' : '-'" | ||||
|         [nzBorderless]="!isEdit" | ||||
|         [nzSuffixIcon]="isEdit ? 'calendar' : ''" | ||||
|       ></nz-date-picker> | ||||
|     </sv> | ||||
|     <sv label="道路运输证照片"> | ||||
|       <ng-container | ||||
|         *ngTemplateOutlet="uploadTemplate;context:{image:detailData?.roadTransportPhotoWatermark,key:'roadTransportPhotoWatermark', hover: 'Watermark'}"> | ||||
|         *ngTemplateOutlet=" | ||||
|           uploadTemplate; | ||||
|           context: { image: detailData?.roadTransportPhotoWatermark, key: 'roadTransportPhotoWatermark', hover: 'Watermark' } | ||||
|         " | ||||
|       > | ||||
|       </ng-container> | ||||
|     </sv> | ||||
|   </sv-container> | ||||
|   <nz-divider></nz-divider> | ||||
|   <sv-container col="2" class="mt16"> | ||||
|     <sv-title style="font-weight: 700;">认证司机</sv-title> | ||||
|     <sv-title style="font-weight: 700">认证司机</sv-title> | ||||
|   </sv-container> | ||||
|   <st #st [bordered]="true" [columns]="columns" [data]="service.$api_get_queryDriverByCarId" | ||||
|     [req]="{  method: 'POST', allInBody: true, params: reqParams }" [res]="{ reName: { list: 'data', total: 'data' } }" | ||||
|     [ngStyle]="{ margin: '1rem 0' }" multiSort size="small" [page]="{ show: false }"> | ||||
|   <st | ||||
|     #st | ||||
|     [bordered]="true" | ||||
|     [columns]="columns" | ||||
|     [scroll]="{x: '1200px'}" | ||||
|     [data]="service.$api_get_queryDriverByCarId" | ||||
|     [req]="{ method: 'POST', allInBody: true, params: reqParams }" | ||||
|     [res]="{ reName: { list: 'data', total: 'data' } }" | ||||
|     [ngStyle]="{ margin: '1rem 0' }" | ||||
|     multiSort | ||||
|     size="small" | ||||
|     [page]="{ show: false }" | ||||
|   > | ||||
|     <ng-template st-row="auditStatusEnum" let-item let-index="index"> | ||||
|       <div> | ||||
|         <span *ngIf="item?.auditStatusEnum === -1 || item?.auditStatusEnum === '-1'">未上传</span> | ||||
| @ -210,7 +345,6 @@ | ||||
|   </st> | ||||
| </nz-card> | ||||
|  | ||||
|  | ||||
| <ng-template #redectModal> | ||||
|   <div nz-row nzGutter="8"> | ||||
|     <div nz-col nzSpan="24" se-container [labelWidth]="120"> | ||||
| @ -218,30 +352,42 @@ | ||||
|         {{ detailData?.carNo }} | ||||
|       </se> | ||||
|       <se [col]="1" label="备注" required> | ||||
|         <textarea nz-input rows="3" style="margin-left: 14px;" [(ngModel)]="approvalOpinion"></textarea> | ||||
|         <textarea nz-input rows="3" style="margin-left: 14px" [(ngModel)]="approvalOpinion"></textarea> | ||||
|       </se> | ||||
|     </div> | ||||
|   </div> | ||||
| </ng-template> | ||||
|  | ||||
| <ng-template #uploadTemplate let-image="image" let-key="key" let-hover="hover"> | ||||
|   <nz-upload class="avatar-uploader" [nzAction]="uploadURl" nzName="multipartFile" nzListType="picture-card" | ||||
|     [nzShowUploadList]="false" nzFileType="image/png,image/jpeg,image/jpg,image/gif" | ||||
|     [nzDisabled]="!isEdit || disabledUpload" (nzChange)="changeUpload($event,key)"> | ||||
|   <nz-upload | ||||
|     class="avatar-uploader" | ||||
|     [nzAction]="uploadURl" | ||||
|     nzName="multipartFile" | ||||
|     nzListType="picture-card" | ||||
|     [nzShowUploadList]="false" | ||||
|     nzFileType="image/png,image/jpeg,image/jpg,image/gif" | ||||
|     [nzDisabled]="!isEdit || disabledUpload" | ||||
|     (nzChange)="changeUpload($event, key)" | ||||
|   > | ||||
|     <ng-container *ngIf="!image && isEdit"> | ||||
|       <i class="upload-icon" nz-icon [nzType]="false ? 'loading' : 'plus'"></i> | ||||
|       <div class="ant-upload-text">上传</div> | ||||
|     </ng-container> | ||||
|     <div *ngIf="image" (mouseover)="detailData[hover]=true" (mouseleave)="detailData[hover]=false" | ||||
|       (click)="$event.cancelBubble=true" class="image-hover"> | ||||
|       <img (click)="showImg(image)" [src]="image" style="width: 200px;height: 160px;" /> | ||||
|     <div | ||||
|       *ngIf="image" | ||||
|       (mouseover)="detailData[hover] = true" | ||||
|       (mouseleave)="detailData[hover] = false" | ||||
|       (click)="$event.cancelBubble = true" | ||||
|       class="image-hover" | ||||
|     > | ||||
|       <img (click)="showImg(image)" [src]="image" style="width: 200px; height: 160px" /> | ||||
|       <div class="mask" *ngIf="detailData[hover] && isEdit"></div> | ||||
|       <div class="mask-over" *ngIf="detailData[hover] && isEdit"> | ||||
|         <i nz-icon nzType="close-circle" nzTheme="fill" class="delete-icon" (click)="deleteImg(key)"></i> | ||||
|         <div style="display: flex;align-items: center;"> | ||||
|         <div style="display: flex; align-items: center"> | ||||
|           <i nz-icon nzType="eye" nzTheme="fill" class="show-icon" (click)="showImg(image)"></i> | ||||
|         </div> | ||||
|       </div> | ||||
|     </div> | ||||
|   </nz-upload> | ||||
| </ng-template> | ||||
| </ng-template> | ||||
|  | ||||
| @ -61,10 +61,10 @@ export class VehicleComponentsAuditDetailComponent implements OnInit, OnDestroy | ||||
|  | ||||
|   initST() { | ||||
|     this.columns = [ | ||||
|       { title: '司机姓名', index: 'name', className: 'text-center' }, | ||||
|       { title: '司机手机号', index: 'mobile', className: 'text-center' }, | ||||
|       { title: '身份证号', index: 'idCardNo', className: 'text-center' }, | ||||
|       { title: '挂靠协议', render: 'auditStatusEnum', className: 'text-center' }, | ||||
|       { title: '司机姓名', index: 'name', width: 150, className: 'text-center' }, | ||||
|       { title: '司机手机号', index: 'mobile',  width: 200,className: 'text-center' }, | ||||
|       { title: '身份证号', index: 'idCardNo', width: 200, className: 'text-center' }, | ||||
|       { title: '挂靠协议', render: 'auditStatusEnum', width: 100,className: 'text-center' }, | ||||
|       { | ||||
|         title: '车主申明/挂靠协议', | ||||
|         fixed: 'right', | ||||
|  | ||||
| @ -8,11 +8,10 @@ | ||||
|     </ng-template> | ||||
|     <ng-template #content> | ||||
|       <sv-container col="1"> | ||||
|         <sv-title style="font-weight: 700;"> | ||||
|           <div style="float: right;"> | ||||
|         <sv-title style="font-weight: 700"> | ||||
|           <div style="float: right"> | ||||
|             <ng-container *ngIf="!isEdit"> | ||||
|               <button nz-button nzType="default" nzDanger (click)="ratify()" acl | ||||
|                 acl-ability="VEHICLE-LIST-DETAIL-save">修改</button> | ||||
|               <button nz-button nzType="default" nzDanger (click)="ratify()" acl acl-ability="VEHICLE-LIST-DETAIL-save">修改</button> | ||||
|             </ng-container> | ||||
|             <ng-container *ngIf="isEdit"> | ||||
|               <button nz-button nzType="default" (click)="reset()">取消</button> | ||||
| @ -23,45 +22,76 @@ | ||||
|       </sv-container> | ||||
|  | ||||
|       <sv-container col="3"> | ||||
|         <sv-title style="font-weight: 700;">车辆基础信息</sv-title> | ||||
|         <sv-title style="font-weight: 700">车辆基础信息</sv-title> | ||||
|         <sv label="车牌号"> | ||||
|           <input nz-input type="text" [(ngModel)]="detailData.carNo" [readonly]="!isEdit" [nzBorderless]="!isEdit" | ||||
|             [placeholder]="isEdit?'':'-'"> | ||||
|           <input | ||||
|             nz-input | ||||
|             type="text" | ||||
|             [(ngModel)]="detailData.carNo" | ||||
|             [readonly]="!isEdit" | ||||
|             [nzBorderless]="!isEdit" | ||||
|             [placeholder]="isEdit ? '' : '-'" | ||||
|           /> | ||||
|         </sv> | ||||
|         <sv label="车牌颜色"> | ||||
|           <!-- <input nz-input type="text" [(ngModel)]="detailData.carNoColor" [readonly]="!isEdit" [nzBorderless]="!isEdit" | ||||
|             [placeholder]="isEdit?'':'-'"> --> | ||||
|           <nz-select [(ngModel)]="detailData.carNoColor" [nzPlaceHolder]="isEdit?'':'-'" [nzBorderless]="!isEdit" | ||||
|             [nzShowArrow]="isEdit" [nzDisabled]="!isEdit"> | ||||
|           <nz-select | ||||
|             [(ngModel)]="detailData.carNoColor" | ||||
|             [nzPlaceHolder]="isEdit ? '' : '-'" | ||||
|             [nzBorderless]="!isEdit" | ||||
|             [nzShowArrow]="isEdit" | ||||
|             [nzDisabled]="!isEdit" | ||||
|           > | ||||
|             <nz-option *ngFor="let i of contenCarNoColor" [nzLabel]="i.label" [nzValue]="i.value"></nz-option> | ||||
|           </nz-select> | ||||
|         </sv> | ||||
|         <sv label="车型"> | ||||
|           <!-- <input nz-input type="text" [(ngModel)]="detailData.carModel" [readonly]="!isEdit" [nzBorderless]="!isEdit" | ||||
|             [placeholder]="isEdit?'':'-'"> --> | ||||
|           <nz-select [(ngModel)]="detailData.carModel" [nzPlaceHolder]="isEdit?'':'-'" [nzBorderless]="!isEdit" | ||||
|             [nzShowArrow]="isEdit" [nzDisabled]="!isEdit"> | ||||
|           <nz-select | ||||
|             [(ngModel)]="detailData.carModel" | ||||
|             [nzPlaceHolder]="isEdit ? '' : '-'" | ||||
|             [nzBorderless]="!isEdit" | ||||
|             [nzShowArrow]="isEdit" | ||||
|             [nzDisabled]="!isEdit" | ||||
|           > | ||||
|             <nz-option *ngFor="let i of contencarModel" [nzLabel]="i.label" [nzValue]="i.value"></nz-option> | ||||
|           </nz-select> | ||||
|         </sv> | ||||
|         <sv label="车长(米)"> | ||||
|           <!-- <input nz-input type="text" [(ngModel)]="detailData.carLength" [readonly]="!isEdit" [nzBorderless]="!isEdit" | ||||
|             [placeholder]="isEdit?'':'-'"> --> | ||||
|           <nz-select [(ngModel)]="detailData.carLength" [nzPlaceHolder]="isEdit?'':'-'" [nzBorderless]="!isEdit" | ||||
|             [nzShowArrow]="isEdit" [nzDisabled]="!isEdit"> | ||||
|           <nz-select | ||||
|             [(ngModel)]="detailData.carLength" | ||||
|             [nzPlaceHolder]="isEdit ? '' : '-'" | ||||
|             [nzBorderless]="!isEdit" | ||||
|             [nzShowArrow]="isEdit" | ||||
|             [nzDisabled]="!isEdit" | ||||
|           > | ||||
|             <nz-option *ngFor="let i of contenCarLength" [nzLabel]="i.label" [nzValue]="i.value"></nz-option> | ||||
|           </nz-select> | ||||
|         </sv> | ||||
|         <sv label="是否挂靠"> | ||||
|           <nz-select [(ngModel)]="detailData.isSelf" [nzPlaceHolder]="isEdit?'':'-'" [nzBorderless]="!isEdit" | ||||
|             [nzShowArrow]="isEdit" [nzDisabled]="!isEdit"> | ||||
|           <nz-select | ||||
|             [(ngModel)]="detailData.isSelf" | ||||
|             [nzPlaceHolder]="isEdit ? '' : '-'" | ||||
|             [nzBorderless]="!isEdit" | ||||
|             [nzShowArrow]="isEdit" | ||||
|             [nzDisabled]="!isEdit" | ||||
|           > | ||||
|             <nz-option [nzValue]="false" nzLabel="否"></nz-option> | ||||
|             <nz-option [nzValue]="true" nzLabel="是"></nz-option> | ||||
|           </nz-select> | ||||
|         </sv> | ||||
|         <sv label="是否为挂车"> | ||||
|           <nz-select [(ngModel)]="detailData.isTrailer" [nzPlaceHolder]="isEdit?'':'-'" [nzBorderless]="!isEdit" | ||||
|             [nzShowArrow]="isEdit" [nzDisabled]="!isEdit"> | ||||
|           <nz-select | ||||
|             [(ngModel)]="detailData.isTrailer" | ||||
|             [nzPlaceHolder]="isEdit ? '' : '-'" | ||||
|             [nzBorderless]="!isEdit" | ||||
|             [nzShowArrow]="isEdit" | ||||
|             [nzDisabled]="!isEdit" | ||||
|           > | ||||
|             <nz-option [nzValue]="false" nzLabel="否"></nz-option> | ||||
|             <nz-option [nzValue]="true" nzLabel="是"></nz-option> | ||||
|           </nz-select> | ||||
| @ -71,7 +101,11 @@ | ||||
|         <sv label="车头照"> | ||||
|           <!-- <app-imagelist [imgList]="[detailData?.carFrontPhotoWatermark, detailData?.carFrontPhotoWatermark]"></app-imagelist> --> | ||||
|           <ng-container | ||||
|             *ngTemplateOutlet="uploadTemplate;context:{image:detailData?.carFrontPhotoWatermark,key:'carFrontPhotoWatermark',hover: 'PhotoWatermark2'}"> | ||||
|             *ngTemplateOutlet=" | ||||
|               uploadTemplate; | ||||
|               context: { image: detailData?.carFrontPhotoWatermark, key: 'carFrontPhotoWatermark', hover: 'PhotoWatermark2' } | ||||
|             " | ||||
|           > | ||||
|           </ng-container> | ||||
|         </sv> | ||||
|       </sv-container> | ||||
| @ -79,33 +113,62 @@ | ||||
|   </page-header-wrapper> | ||||
|   <nz-card> | ||||
|     <sv-container col="3"> | ||||
|       <sv-title style="font-weight: 700;">行驶证信息</sv-title> | ||||
|       <sv-title style="font-weight: 700">行驶证信息</sv-title> | ||||
|       <sv label="档案编号"> | ||||
|         <input nz-input type="text" [(ngModel)]="detailData.archivesNo" [readonly]="!isEdit" [nzBorderless]="!isEdit" | ||||
|           [placeholder]="isEdit?'':'-'"> | ||||
|         <input | ||||
|           nz-input | ||||
|           type="text" | ||||
|           [(ngModel)]="detailData.archivesNo" | ||||
|           [readonly]="!isEdit" | ||||
|           [nzBorderless]="!isEdit" | ||||
|           [placeholder]="isEdit ? '' : '-'" | ||||
|         /> | ||||
|       </sv> | ||||
|       <sv label="车辆品牌"> | ||||
|         <input nz-input type="text" [(ngModel)]="detailData.carBrand" [readonly]="!isEdit" [nzBorderless]="!isEdit" | ||||
|           [placeholder]="isEdit?'':'-'"> | ||||
|         <input | ||||
|           nz-input | ||||
|           type="text" | ||||
|           [(ngModel)]="detailData.carBrand" | ||||
|           [readonly]="!isEdit" | ||||
|           [nzBorderless]="!isEdit" | ||||
|           [placeholder]="isEdit ? '' : '-'" | ||||
|         /> | ||||
|       </sv> | ||||
|       <sv label="行驶证注册日期"> | ||||
|         <!-- <input nz-input type="text" [(ngModel)]="detailData.driverLicenseRegisterTime" [readonly]="!isEdit" [nzBorderless]="!isEdit" | ||||
|         [placeholder]="isEdit?'':'-'"> --> | ||||
|         <nz-date-picker [(ngModel)]="detailData.driverLicenseRegisterTime" [nzDisabled]="!isEdit" | ||||
|           [nzPlaceHolder]="isEdit?'':'-'" [nzBorderless]="!isEdit" [nzSuffixIcon]="isEdit?'calendar':''"> | ||||
|         <nz-date-picker | ||||
|           [(ngModel)]="detailData.driverLicenseRegisterTime" | ||||
|           [nzDisabled]="!isEdit" | ||||
|           [nzPlaceHolder]="isEdit ? '' : '-'" | ||||
|           [nzBorderless]="!isEdit" | ||||
|           [nzSuffixIcon]="isEdit ? 'calendar' : ''" | ||||
|         > | ||||
|         </nz-date-picker> | ||||
|       </sv> | ||||
|     </sv-container> | ||||
|  | ||||
|     <sv-container col="3"> | ||||
|       <sv label="行驶证到期日"> | ||||
|         <nz-date-picker [(ngModel)]="detailData.driverLicenseEndTime" [nzDisabled]="!isEdit" | ||||
|           [nzPlaceHolder]="isEdit?'':'-'" [nzBorderless]="!isEdit" [nzSuffixIcon]="isEdit?'calendar':''"> | ||||
|         <nz-date-picker | ||||
|           [(ngModel)]="detailData.driverLicenseEndTime" | ||||
|           [nzDisabled]="!isEdit" | ||||
|           [nzPlaceHolder]="isEdit ? '' : '-'" | ||||
|           [nzBorderless]="!isEdit" | ||||
|           [nzSuffixIcon]="isEdit ? 'calendar' : ''" | ||||
|         > | ||||
|         </nz-date-picker> | ||||
|       </sv> | ||||
|       <sv label="行驶证签发机关"> | ||||
|         <input style="width: '300px'" nz-input type="text" [(ngModel)]="detailData.driverLicenseSigningOrg" | ||||
|           [readonly]="!isEdit" [nzBorderless]="!isEdit" [placeholder]="isEdit?'':'-'"> | ||||
|         <input | ||||
|           style="width: '300px'" | ||||
|           nz-input | ||||
|           type="text" | ||||
|           [(ngModel)]="detailData.driverLicenseSigningOrg" | ||||
|           [readonly]="!isEdit" | ||||
|           [nzBorderless]="!isEdit" | ||||
|           [placeholder]="isEdit ? '' : '-'" | ||||
|         /> | ||||
|       </sv> | ||||
|     </sv-container> | ||||
|  | ||||
| @ -113,17 +176,33 @@ | ||||
|       <sv label="行驶证发证日期"> | ||||
|         <!-- <input nz-input type="text" [(ngModel)]="detailData.driverLicenseGetTime" [readonly]="!isEdit" [nzBorderless]="!isEdit" | ||||
|         [placeholder]="isEdit?'':'-'"> --> | ||||
|         <nz-date-picker [(ngModel)]="detailData.driverLicenseGetTime" [nzDisabled]="!isEdit" | ||||
|           [nzPlaceHolder]="isEdit?'':'-'" [nzBorderless]="!isEdit" [nzSuffixIcon]="isEdit?'calendar':''"> | ||||
|         <nz-date-picker | ||||
|           [(ngModel)]="detailData.driverLicenseGetTime" | ||||
|           [nzDisabled]="!isEdit" | ||||
|           [nzPlaceHolder]="isEdit ? '' : '-'" | ||||
|           [nzBorderless]="!isEdit" | ||||
|           [nzSuffixIcon]="isEdit ? 'calendar' : ''" | ||||
|         > | ||||
|         </nz-date-picker> | ||||
|       </sv> | ||||
|       <sv label="车辆识别代码"> | ||||
|         <input nz-input type="text" [(ngModel)]="detailData.carDistinguishCode" [readonly]="!isEdit" | ||||
|           [nzBorderless]="!isEdit" [placeholder]="isEdit?'':'-'"> | ||||
|         <input | ||||
|           nz-input | ||||
|           type="text" | ||||
|           [(ngModel)]="detailData.carDistinguishCode" | ||||
|           [readonly]="!isEdit" | ||||
|           [nzBorderless]="!isEdit" | ||||
|           [placeholder]="isEdit ? '' : '-'" | ||||
|         /> | ||||
|       </sv> | ||||
|       <sv label="使用性质"> | ||||
|         <nz-select [(ngModel)]="detailData.useNature" [nzPlaceHolder]="isEdit?'':'-'" [nzBorderless]="!isEdit" | ||||
|           [nzShowArrow]="isEdit" [nzDisabled]="!isEdit"> | ||||
|         <nz-select | ||||
|           [(ngModel)]="detailData.useNature" | ||||
|           [nzPlaceHolder]="isEdit ? '' : '-'" | ||||
|           [nzBorderless]="!isEdit" | ||||
|           [nzShowArrow]="isEdit" | ||||
|           [nzDisabled]="!isEdit" | ||||
|         > | ||||
|           <nz-option [nzValue]="'1'" nzLabel="营运"></nz-option> | ||||
|           <nz-option [nzValue]="'0'" nzLabel="非营运"></nz-option> | ||||
|         </nz-select> | ||||
| @ -132,68 +211,130 @@ | ||||
|  | ||||
|     <sv-container col="3"> | ||||
|       <sv label="载重(吨)"> | ||||
|         <input nz-input type="text" [(ngModel)]="detailData.carLoad" [readonly]="!isEdit" [nzBorderless]="!isEdit" | ||||
|           [placeholder]="isEdit?'':'-'"> | ||||
|         <input | ||||
|           nz-input | ||||
|           type="text" | ||||
|           [(ngModel)]="detailData.carLoad" | ||||
|           [readonly]="!isEdit" | ||||
|           [nzBorderless]="!isEdit" | ||||
|           [placeholder]="isEdit ? '' : '-'" | ||||
|         /> | ||||
|       </sv> | ||||
|       <sv label="整备质量"> | ||||
|         <input nz-input type="text" [(ngModel)]="detailData.curbWeight" [readonly]="!isEdit" [nzBorderless]="!isEdit" | ||||
|           [placeholder]="isEdit?'':'-'"> | ||||
|         <input | ||||
|           nz-input | ||||
|           type="text" | ||||
|           [(ngModel)]="detailData.curbWeight" | ||||
|           [readonly]="!isEdit" | ||||
|           [nzBorderless]="!isEdit" | ||||
|           [placeholder]="isEdit ? '' : '-'" | ||||
|         /> | ||||
|       </sv> | ||||
|       <sv label="所有人"> | ||||
|         <input style="width: '300px'" nz-input type="text" [(ngModel)]="detailData.carOwner" [readonly]="!isEdit" | ||||
|           [nzBorderless]="!isEdit" [placeholder]="isEdit?'':'-'"> | ||||
|         <input | ||||
|           style="width: '300px'" | ||||
|           nz-input | ||||
|           type="text" | ||||
|           [(ngModel)]="detailData.carOwner" | ||||
|           [readonly]="!isEdit" | ||||
|           [nzBorderless]="!isEdit" | ||||
|           [placeholder]="isEdit ? '' : '-'" | ||||
|         /> | ||||
|       </sv> | ||||
|     </sv-container> | ||||
|     <sv-container col="1"> | ||||
|       <sv label="行驶证照片"> | ||||
|         <ng-container | ||||
|           *ngTemplateOutlet="uploadTemplate;context:{image:detailData?.certificatePhotoFrontWatermark,key:'certificatePhotoFrontWatermark',hover: 'FrontWatermark'}"> | ||||
|           *ngTemplateOutlet=" | ||||
|             uploadTemplate; | ||||
|             context: { image: detailData?.certificatePhotoFrontWatermark, key: 'certificatePhotoFrontWatermark', hover: 'FrontWatermark' } | ||||
|           " | ||||
|         > | ||||
|         </ng-container> | ||||
|         <ng-container | ||||
|           *ngTemplateOutlet="uploadTemplate;context:{image:detailData?.certificatePhotoBackWatermark,key:'certificatePhotoBackWatermark',hover: 'BackWatermark'}"> | ||||
|           *ngTemplateOutlet=" | ||||
|             uploadTemplate; | ||||
|             context: { image: detailData?.certificatePhotoBackWatermark, key: 'certificatePhotoBackWatermark', hover: 'BackWatermark' } | ||||
|           " | ||||
|         > | ||||
|         </ng-container> | ||||
|       </sv> | ||||
|     </sv-container> | ||||
|     <nz-divider></nz-divider> | ||||
|     <sv-container col="3" class="mt16"> | ||||
|       <sv-title style="font-weight: 700;">道路运输证信息</sv-title> | ||||
|       <sv-title style="font-weight: 700">道路运输证信息</sv-title> | ||||
|       <sv label="道路运输证号"> | ||||
|         <input nz-input type="text" [(ngModel)]="detailData.roadTransportNo" [readonly]="!isEdit" | ||||
|           [nzBorderless]="!isEdit" [placeholder]="isEdit?'':'-'"> | ||||
|         <input | ||||
|           nz-input | ||||
|           type="text" | ||||
|           [(ngModel)]="detailData.roadTransportNo" | ||||
|           [readonly]="!isEdit" | ||||
|           [nzBorderless]="!isEdit" | ||||
|           [placeholder]="isEdit ? '' : '-'" | ||||
|         /> | ||||
|       </sv> | ||||
|       <sv label="经营许可证号"> | ||||
|         <input nz-input type="text" [(ngModel)]="detailData.roadTransportLicenceNo" [readonly]="!isEdit" | ||||
|           [nzBorderless]="!isEdit" [placeholder]="isEdit?'':'-'"> | ||||
|         <input | ||||
|           nz-input | ||||
|           type="text" | ||||
|           [(ngModel)]="detailData.roadTransportLicenceNo" | ||||
|           [readonly]="!isEdit" | ||||
|           [nzBorderless]="!isEdit" | ||||
|           [placeholder]="isEdit ? '' : '-'" | ||||
|         /> | ||||
|       </sv> | ||||
|       <sv label="发证日期"> | ||||
|         <!-- <input nz-input type="text" [(ngModel)]="detailData.roadTransportStartTime" [readonly]="!isEdit" [nzBorderless]="!isEdit" | ||||
|         [placeholder]="isEdit?'':'-'"> --> | ||||
|         <nz-date-picker [(ngModel)]="detailData.roadTransportStartTime" [nzDisabled]="!isEdit" | ||||
|           [nzPlaceHolder]="isEdit?'':'-'" [nzBorderless]="!isEdit" [nzSuffixIcon]="isEdit?'calendar':''"> | ||||
|         <nz-date-picker | ||||
|           [(ngModel)]="detailData.roadTransportStartTime" | ||||
|           [nzDisabled]="!isEdit" | ||||
|           [nzPlaceHolder]="isEdit ? '' : '-'" | ||||
|           [nzBorderless]="!isEdit" | ||||
|           [nzSuffixIcon]="isEdit ? 'calendar' : ''" | ||||
|         > | ||||
|         </nz-date-picker> | ||||
|       </sv> | ||||
|       <sv label="有效期至"> | ||||
|         <!-- <input nz-input type="text" [(ngModel)]="detailData.roadTransportEndTime" [readonly]="!isEdit" [nzBorderless]="!isEdit" | ||||
|         [placeholder]="isEdit?'':'-'"> --> | ||||
|         <nz-date-picker [(ngModel)]="detailData.roadTransportEndTime" [nzDisabled]="!isEdit" | ||||
|           [nzPlaceHolder]="isEdit?'':'-'" [nzBorderless]="!isEdit" [nzSuffixIcon]="isEdit?'calendar':''"> | ||||
|         <nz-date-picker | ||||
|           [(ngModel)]="detailData.roadTransportEndTime" | ||||
|           [nzDisabled]="!isEdit" | ||||
|           [nzPlaceHolder]="isEdit ? '' : '-'" | ||||
|           [nzBorderless]="!isEdit" | ||||
|           [nzSuffixIcon]="isEdit ? 'calendar' : ''" | ||||
|         > | ||||
|         </nz-date-picker> | ||||
|       </sv> | ||||
|       <sv label="道路运输证照片"> | ||||
|         <!-- <app-imagelist [imgList]="[detailData?.roadTransportPhoto,detailData?.roadTransportPhotoWatermark ]"></app-imagelist> --> | ||||
|         <ng-container | ||||
|           *ngTemplateOutlet="uploadTemplate;context:{image:detailData?.roadTransportPhotoWatermark,key:'roadTransportPhotoWatermark', hover: 'Watermark'}"> | ||||
|           *ngTemplateOutlet=" | ||||
|             uploadTemplate; | ||||
|             context: { image: detailData?.roadTransportPhotoWatermark, key: 'roadTransportPhotoWatermark', hover: 'Watermark' } | ||||
|           " | ||||
|         > | ||||
|         </ng-container> | ||||
|       </sv> | ||||
|     </sv-container> | ||||
|     <nz-divider></nz-divider> | ||||
|     <sv-container col="2" class="mt16"> | ||||
|       <sv-title style="font-weight: 700;">认证司机</sv-title> | ||||
|       <sv-title style="font-weight: 700">认证司机</sv-title> | ||||
|     </sv-container> | ||||
|     <st #st [bordered]="true" [columns]="columns" [data]="service.$api_get_queryDriverByCarId" | ||||
|       [req]="{  method: 'POST', allInBody: true, params: reqParams }" | ||||
|       [res]="{ reName: { list: 'data', total: 'data' } }" [ngStyle]="{ margin: '1rem 0' }" multiSort size="small" | ||||
|       [page]="{ show: false }"> | ||||
|     <st | ||||
|       #st | ||||
|       [bordered]="true" | ||||
|       [columns]="columns" | ||||
|       [scroll]="{x: '1200px'}" | ||||
|       [data]="service.$api_get_queryDriverByCarId" | ||||
|       [req]="{ method: 'POST', allInBody: true, params: reqParams }" | ||||
|       [res]="{ reName: { list: 'data', total: 'data' } }" | ||||
|       [ngStyle]="{ margin: '1rem 0' }" | ||||
|       multiSort | ||||
|       size="small" | ||||
|       [page]="{ show: false }" | ||||
|     > | ||||
|       <ng-template st-row="auditStatusEnum" let-item let-index="index"> | ||||
|         <div> | ||||
|           <span *ngIf="item?.auditStatusEnum === -1 || item?.auditStatusEnum === '-1'">未上传</span> | ||||
| @ -208,8 +349,13 @@ | ||||
|   </nz-card> | ||||
| </ng-container> | ||||
|  | ||||
| <nz-modal [(nzVisible)]="isVisible" [nzWidth]="600" [nzFooter]="nzModalFooterEvaluate" (nzOnOk)="handleOK()" | ||||
|   (nzOnCancel)="handleCancel('2')"> | ||||
| <nz-modal | ||||
|   [(nzVisible)]="isVisible" | ||||
|   [nzWidth]="600" | ||||
|   [nzFooter]="nzModalFooterEvaluate" | ||||
|   (nzOnOk)="handleOK()" | ||||
|   (nzOnCancel)="handleCancel('2')" | ||||
| > | ||||
|   <ng-container *nzModalContent> | ||||
|     <nz-tabset> | ||||
|       <nz-tab nzTitle="我的评价"> | ||||
| @ -219,9 +365,7 @@ | ||||
|         </div> | ||||
|       </nz-tab> | ||||
|       <nz-tab nzTitle="司机评价"> | ||||
|         <div> | ||||
|           暂无评价内容 | ||||
|         </div> | ||||
|         <div> 暂无评价内容 </div> | ||||
|       </nz-tab> | ||||
|     </nz-tabset> | ||||
|   </ng-container> | ||||
| @ -232,23 +376,35 @@ | ||||
| </nz-modal> | ||||
|  | ||||
| <ng-template #uploadTemplate let-image="image" let-key="key" let-hover="hover"> | ||||
|   <nz-upload class="avatar-uploader" [nzAction]="uploadURl" nzName="multipartFile" nzListType="picture-card" | ||||
|     [nzShowUploadList]="false" nzFileType="image/png,image/jpeg,image/jpg,image/gif" | ||||
|     [nzDisabled]="!isEdit || disabledUpload" (nzChange)="changeUpload($event,key)"> | ||||
|   <nz-upload | ||||
|     class="avatar-uploader" | ||||
|     [nzAction]="uploadURl" | ||||
|     nzName="multipartFile" | ||||
|     nzListType="picture-card" | ||||
|     [nzShowUploadList]="false" | ||||
|     nzFileType="image/png,image/jpeg,image/jpg,image/gif" | ||||
|     [nzDisabled]="!isEdit || disabledUpload" | ||||
|     (nzChange)="changeUpload($event, key)" | ||||
|   > | ||||
|     <ng-container *ngIf="!image && isEdit"> | ||||
|       <i class="upload-icon" nz-icon [nzType]="false ? 'loading' : 'plus'"></i> | ||||
|       <div class="ant-upload-text">上传</div> | ||||
|     </ng-container> | ||||
|     <div *ngIf="image" (mouseover)="detailData[hover]=true" (mouseleave)="detailData[hover]=false" | ||||
|       (click)="$event.cancelBubble=true" class="image-hover"> | ||||
|       <img (click)="showImg(image)" [src]="image" style="width: 200px;height: 160px;" /> | ||||
|     <div | ||||
|       *ngIf="image" | ||||
|       (mouseover)="detailData[hover] = true" | ||||
|       (mouseleave)="detailData[hover] = false" | ||||
|       (click)="$event.cancelBubble = true" | ||||
|       class="image-hover" | ||||
|     > | ||||
|       <img (click)="showImg(image)" [src]="image" style="width: 200px; height: 160px" /> | ||||
|       <div class="mask" *ngIf="detailData[hover] && isEdit"></div> | ||||
|       <div class="mask-over" *ngIf="detailData[hover] && isEdit"> | ||||
|         <i nz-icon nzType="close-circle" nzTheme="fill" class="delete-icon" (click)="deleteImg(key)"></i> | ||||
|         <div style="display: flex;align-items: center;"> | ||||
|         <div style="display: flex; align-items: center"> | ||||
|           <i nz-icon nzType="eye" nzTheme="fill" class="show-icon" (click)="showImg(image)"></i> | ||||
|         </div> | ||||
|       </div> | ||||
|     </div> | ||||
|   </nz-upload> | ||||
| </ng-template> | ||||
| </ng-template> | ||||
|  | ||||
| @ -89,9 +89,10 @@ export class VehicleComponentsListDetailComponent implements OnInit { | ||||
|   } | ||||
|   initST() { | ||||
|     this.columns = [ | ||||
|       { title: '司机姓名', index: 'name', width: 300, className: 'text-center' }, | ||||
|       { title: '司机手机号', index: 'mobile', width: 300, className: 'text-center' }, | ||||
|       { title: '挂靠协议', render: 'auditStatusEnum', className: 'text-center' }, | ||||
|       { title: '司机姓名', index: 'name', width: 150, className: 'text-center' }, | ||||
|       { title: '司机手机号', index: 'mobile', width: 200, className: 'text-center' }, | ||||
|       { title: '身份证号', index: 'idCardNo',width: 200, className: 'text-center' }, | ||||
|       { title: '挂靠协议', render: 'auditStatusEnum', width: 100,className: 'text-center' }, | ||||
|       { title: '录入人员', index: 'saveUser', className: 'text-center' }, | ||||
|       { | ||||
|         title: '车主申明/挂靠协议', | ||||
|  | ||||
		Reference in New Issue
	
	Block a user