Commit b6993a2d by Sweet Zhang

联合销售

parent e9cb8ae7
...@@ -18,10 +18,10 @@ ...@@ -18,10 +18,10 @@
<img src="assets/images/clear.png" alt="清除" (click)="clearSignature();"/> <img src="assets/images/clear.png" alt="清除" (click)="clearSignature();"/>
<img src="assets/images/revoke.png" *ngIf="!isSignatureShow" alt="上一步" (click)="revokeSignature()"/> <img src="assets/images/revoke.png" *ngIf="!isSignatureShow" alt="上一步" (click)="revokeSignature()"/>
</div> </div>
<footer class="fixed" (click)="next()" *ngIf="(approveStatus==null || approveStatus=='-1') && (type != 'eNotice') && (type !='continuationRate')"> <footer class="fixed" (click)="next()" *ngIf="(approveStatus==null || approveStatus=='-1') && (type != 'eNotice') && (type !='continuationRate') && (type !='unionSaleSignature')">
我自愿签订经纪人合同书 我自愿签订经纪人合同书
</footer> </footer>
<footer class="fixed" (click)="saveDigitalSignatures()" *ngIf="(type == 'eNotice') || (type=='continuationRate')" style="margin:45px;width:auto;border-radius:60px"> <footer class="fixed" (click)="saveDigitalSignatures()" *ngIf="(type == 'eNotice') || (type=='continuationRate') || (type =='unionSaleSignature') " style="margin:45px;width:auto;border-radius:60px">
确认提交 确认提交
</footer> </footer>
<div id="page" *ngIf="approveStatus!=null && approveStatus !='-1'"> <div id="page" *ngIf="approveStatus!=null && approveStatus !='-1'">
......
...@@ -140,6 +140,21 @@ export class SignatureComponent implements OnInit,OnDestroy,AfterViewInit { ...@@ -140,6 +140,21 @@ export class SignatureComponent implements OnInit,OnDestroy,AfterViewInit {
this.openPopInfo(res['message']); this.openPopInfo(res['message']);
} }
}) })
}else if(this.type == 'unionSaleSignature'){
const param = {
practitionerId:localStorage.getItem('lifeCustomerInfo')?JSON.parse(localStorage.getItem('lifeCustomerInfo'))['practitionerId']:null,
imgStr:this.imgStr,
unionSalesPractitionerId:this.activatedRoute.snapshot.queryParams['unionSalesPractitionerId'],
unionSalesId:this.activatedRoute.snapshot.queryParams['unionSalesId']
}
this.myService.signUnionSales(param).subscribe(res=>{
if(res['success']){
// 确认提交
this.router.navigate(['/eNotice_submit']);
}else{
this.openPopInfo(res['message']);
}
})
}else{ }else{
const param = { const param = {
hiringBasicInfoId:this.hiringBasicInfoId, hiringBasicInfoId:this.hiringBasicInfoId,
......
<div class="jointSaleDetailContainer">
<ul>
<li>投保人:{{unionSalesInfo?.policyholderName}}</li>
<li>保险公司:{{unionSalesInfo?.insurerName}}</li>
<li>产品名称:{{unionSalesInfo?.productName}}</li>
<li>投保单号:{{unionSalesInfo?.proposalNo}}</li>
<li>保单号:{{unionSalesInfo?.policyNo}}</li>
</ul>
<div class="title">
联合销售达成以下约定
</div>
<div class="divisionCommission">
<div class="thTitle">
<span>经纪人</span>
<span>佣金比例</span>
<span>业绩比例</span>
<span>签署状态</span>
</div>
<div *ngFor="let item of unionSalesPractitionerInfos">
<span>{{item.practitionerName}}</span>
<span>{{item.commissionRate}}%</span>
<span>{{item.achievementsRate}}%</span>
<span [ngSwitch]="item.signStatus">
<ng-container *ngSwitchCase="'1'">待签署</ng-container>
<ng-container *ngSwitchCase="'2'">签署中</ng-container>
<ng-container *ngSwitchCase="'3'">已签署</ng-container>
<ng-container *ngSwitchDefault>/</ng-container>
</span>
</div>
</div>
<div class="signBtn" (click)="sign()" *ngIf="unionSalesInfo?.signStatus=='1'">同意并签署</div>
</div>
.jointSaleDetailContainer{
background: #f9f9f9;
height: 100%;
ul,.title,.divisionCommission{
margin: 10px;
background: #fff;
padding: 5px 10px;
li{
height: 40px;
}
}
.title{
padding: 10px;
color: #1B5B99;
text-align: center;
}
.divisionCommission{
padding: 5px 0;
div{
color: #666;
display: flex;
font-size: 14px;
text-align: center;
height: 32px;
span{
flex:1;
}
}
.thTitle{
color: #333;
font-size: 16px;
}
}
.signBtn{
width: 210px;
margin: 0 auto;
background-color: #1B5B99;
color: #fff;
text-align: center;
padding: 6px 0;
font-size: 18px;
margin-top: 30px;
border-radius: 40px;
cursor: pointer;
}
}
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { JointSaleDetailComponent } from './joint-sale-detail.component';
describe('JointSaleDetailComponent', () => {
let component: JointSaleDetailComponent;
let fixture: ComponentFixture<JointSaleDetailComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ JointSaleDetailComponent ]
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(JointSaleDetailComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});
import { AfterViewInit, Component, OnDestroy, OnInit } from '@angular/core';
import { ActivatedRoute, Router } from '@angular/router';
import { MyService } from '../my.service';
declare var rrweb:any;
@Component({
selector: 'ydlife-joint-sale-detail',
templateUrl: './joint-sale-detail.component.html',
styleUrls: ['./joint-sale-detail.component.scss']
})
export class JointSaleDetailComponent implements OnInit,AfterViewInit,OnDestroy {
unionSalesId:any;
unionSalesPractitionerId:any;
unionSalesInfo:any;
unionSalesPractitionerInfos:Array<any>;
timerId:any;
events:Array<any> = [];
pageInfo = {
type:11,
name:'联合销售同意并签署页面'
}
constructor(private myService:MyService,private route:ActivatedRoute,private router:Router) { }
ngOnInit() {
this.unionSalesId = this.route.snapshot.params['unionSalesId'];
console.log(this.route.snapshot)
this.queryUnionSalesPractitionerList();
}
ngAfterViewInit(): void {
setTimeout(()=>{this.creatRecord()},500);
this.timerId = setInterval(()=>{
if(this.events.length > 100){
this.saveRecord()
}
},10 * 1000);
}
ngOnDestroy(): void {
clearInterval(this.timerId)
}
creatRecord(){
let _this = this;
_this.events = [];
rrweb.record({
emit(event){
// 将evene存入events数组中
_this.events.push(event);
},
recordCanvas: true
});
}
saveRecord(){
this.myService.rrwebInfo(this.events,this.pageInfo).subscribe(res=>{
this.creatRecord()
})
}
queryUnionSalesPractitionerList(){
this.myService.queryUnionSalesPractitionerList({unionSalesId:this.unionSalesId,isActive:1}).subscribe(res=>{
if(res['success']){
this.unionSalesInfo = res['data']['unionSalesInfo'];
this.unionSalesPractitionerInfos = this.unionSalesInfo.unionSalesPractitionerInfos;
const practitionerId = localStorage.getItem('lifeCustomerInfo')?JSON.parse(localStorage.getItem('lifeCustomerInfo'))['practitionerId']:null;
this.unionSalesPractitionerId = this.unionSalesPractitionerInfos.filter(item=>item.practitionerId == practitionerId).pop().id;
}
})
}
sign(){
this.saveRecord();
this.router.navigate(['/signature'],{queryParams:{type:'unionSaleSignature',unionSalesPractitionerId:this.unionSalesPractitionerId,unionSalesId:this.unionSalesId}})
}
}
<div class="jointSalesContainer">
<Tabs
[useOnPan]="true"
[swipeable]="true"
[activeTab]="index"
[page]="3"
[tabBarActiveTextColor]="'#1B5B99'"
(onTabClick)="onTabClick($event)"
>
<TabPane [title]="'待签署'">
<div class="item">
<ul *ngFor="let unionSalesItem of unionSalesInfos">
<li>
<span>保险公司:</span>
<span>{{unionSalesItem.insurerName}}</span>
</li>
<li>
<span>保险产品:</span>
<span>{{unionSalesItem.productName}}</span>
</li>
<li>
<span>投保人:</span>
<span>{{unionSalesItem.policyholderName}}</span>
</li>
<li>
<span>发送时间:</span>
<span>{{unionSalesItem.sendDate}}</span>
</li>
<li>
<label></label>
<button [routerLink]="['/joint_sales_detail',unionSalesItem.id]">查看</button>
</li>
</ul>
</div>
</TabPane>
<TabPane [title]="'签署中'">
<div class="item">
<ul *ngFor="let unionSalesItem of unionSalesInfos">
<li>
<span>保险公司:</span>
<span>{{unionSalesItem.insurerName}}</span>
</li>
<li>
<span>保险产品:</span>
<span>{{unionSalesItem.productName}}</span>
</li>
<li>
<span>投保人:</span>
<span>{{unionSalesItem.policyholderName}}</span>
</li>
<li>
<span>发送时间:</span>
<span>{{unionSalesItem.sendDate}}</span>
</li>
<li>
<label></label>
<button [routerLink]="['/joint_sales_detail',unionSalesItem.id]">查看</button>
</li>
</ul>
</div>
</TabPane>
<TabPane [title]="'已签署'">
<div class="item">
<ul *ngFor="let unionSalesItem of unionSalesInfos">
<li>
<span>保险公司:</span>
<span>{{unionSalesItem.insurerName}}</span>
</li>
<li>
<span>保险产品:</span>
<span>{{unionSalesItem.productName}}</span>
</li>
<li>
<span>投保人:</span>
<span>{{unionSalesItem.policyholderName}}</span>
</li>
<li>
<span>签署时间:</span>
<span>{{unionSalesItem.signDate}}</span>
</li>
<li>
<label></label>
<button [routerLink]="['/joint_sales_detail',unionSalesItem.id]">查看</button>
</li>
</ul>
</div>
</TabPane>
</Tabs>
</div>
.jointSalesContainer{
background-color: #f9f9f9;
height: 100%;
ul{
margin-bottom: 10px;
padding: 12px 19px;
background-color: #fff;
li{
height: 30px;
display: flex;
justify-content: space-between;
}
}
button{
width: 101px;
height: 28px;
line-height: 28px;
text-align: center;
background-color: #1B5B99;
color: #fff;
border-radius: 20px;
border: none;
}
.item{
margin: 10px 5px;
}
}
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { JointSalesComponent } from './joint-sales.component';
describe('JointSalesComponent', () => {
let component: JointSalesComponent;
let fixture: ComponentFixture<JointSalesComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ JointSalesComponent ]
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(JointSalesComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});
import { Component, OnInit } from '@angular/core';
import { MyService } from '../my.service';
@Component({
selector: 'ydlife-joint-sales',
templateUrl: './joint-sales.component.html',
styleUrls: ['./joint-sales.component.scss']
})
export class JointSalesComponent implements OnInit {
index = 0;
unionSalesInfos:Array<any>;
onTabClick(item) {
// console.log('onTabClick', item);
let status;
if(item.index==0){
status = 1;
}else if(item.index==1){
status = 2;
}else if(item.index==2){
status = 3;
}
this.queryUnionSalesList(status);
}
constructor(private myService:MyService) { }
ngOnInit() {
this.queryUnionSalesList(1);
}
queryUnionSalesList(signStatus){
this.myService.queryUnionSalesList({signStatus:signStatus,isActive:1}).subscribe(res=>{
if(res['success']){
this.unionSalesInfos = res['data']['unionSalesInfos'];
}
console.log(res);
})
}
}
...@@ -79,6 +79,7 @@ export class MenuItemComponent implements OnInit { ...@@ -79,6 +79,7 @@ export class MenuItemComponent implements OnInit {
// { no: 14, subtitle: '我的佣金', icon: 'commission', path: '', routerLink: '',showSubMenu:true }, // { no: 14, subtitle: '我的佣金', icon: 'commission', path: '', routerLink: '',showSubMenu:true },
{ no: 19, subtitle: '薪资单', icon: 'salary', path: '', routerLink: 'salary',showSubMenu:this.isShowSalay }, { no: 19, subtitle: '薪资单', icon: 'salary', path: '', routerLink: 'salary',showSubMenu:this.isShowSalay },
{ no: 26, subtitle: '投核保知识库', icon: 'ask', path: '', routerLink: 'underwriting_knowledge' ,showSubMenu:true}, { no: 26, subtitle: '投核保知识库', icon: 'ask', path: '', routerLink: 'underwriting_knowledge' ,showSubMenu:true},
{ no: 27, subtitle: '联合销售', icon: 'jointSales', path: '', routerLink: 'joint_sales' ,showSubMenu:true},
], ],
isShow: true isShow: true
}, },
......
...@@ -67,6 +67,11 @@ import { AskComponent } from './ask/ask.component'; ...@@ -67,6 +67,11 @@ import { AskComponent } from './ask/ask.component';
import { MenuItemComponent } from './menu-item/menu-item.component'; import { MenuItemComponent } from './menu-item/menu-item.component';
import { MemberListComponent } from './member-list/member-list.component'; import { MemberListComponent } from './member-list/member-list.component';
import { ENoticeComponent } from './e-notice/e-notice.component'; import { ENoticeComponent } from './e-notice/e-notice.component';
import { RenewalReminderComponent } from './renewal-reminder/renewal-reminder.component';
import { RenewalReminderDetailComponent } from './renewal-reminder-detail/renewal-reminder-detail.component';
import { JointSalesComponent } from './joint-sales/joint-sales.component';
import { JointSaleDetailComponent } from './joint-sale-detail/joint-sale-detail.component';
const myRoutes: Routes = [ const myRoutes: Routes = [
{ path: '', component: MyCenterHomeComponent, canActivate: [AuthGuard], data: [{ title: '银盾保险经纪 - 工作台' }] }, { path: '', component: MyCenterHomeComponent, canActivate: [AuthGuard], data: [{ title: '银盾保险经纪 - 工作台' }] },
...@@ -148,7 +153,12 @@ const myRoutes: Routes = [ ...@@ -148,7 +153,12 @@ const myRoutes: Routes = [
{ path: 'newPeople',component:MenuItemComponent,data:[{title:'银盾保经-新人入口',type:'newPeople'}],canActivate:[AuthGuard]}, { path: 'newPeople',component:MenuItemComponent,data:[{title:'银盾保经-新人入口',type:'newPeople'}],canActivate:[AuthGuard]},
{ path: 'member_list/:systemType',component:MemberListComponent,canActivate:[AuthGuard]}, { path: 'member_list/:systemType',component:MemberListComponent,canActivate:[AuthGuard]},
{ path: 'continuation_rate_commitment',component:ENoticeComponent,canActivate:[AuthGuard],data:{type:2}}, { path: 'continuation_rate_commitment',component:ENoticeComponent,canActivate:[AuthGuard],data:{type:2}},
{ path: 'eNoticeSign',component:ENoticeComponent,canActivate:[AuthGuard],data:{type:1,title: '客户告知书和保险经纪服务委托协议'}} { path: 'eNoticeSign',component:ENoticeComponent,canActivate:[AuthGuard],data:{type:1,title: '客户告知书和保险经纪服务委托协议'}},
{ path: 'renewal_reminder',component:RenewalReminderComponent,canActivate:[AuthGuard],data:{type:1,title: '续期提醒'}},
{ path: 'renewal_reminder_detail',component:RenewalReminderDetailComponent,canActivate:[AuthGuard],data:{type:1,title: '续期订单详情'}},
{ path: 'joint_sales',component:JointSalesComponent,canActivate:[AuthGuard],data:{title: '联合销售列表'}},
{ path: 'joint_sales_detail/:unionSalesId',component:JointSaleDetailComponent,canActivate:[AuthGuard],data:{ttitle: '联合销售签署'}}
]; ];
@NgModule({ @NgModule({
......
...@@ -81,9 +81,13 @@ import { MenuItemComponent } from './menu-item/menu-item.component'; ...@@ -81,9 +81,13 @@ import { MenuItemComponent } from './menu-item/menu-item.component';
import { MemberListComponent } from './member-list/member-list.component'; import { MemberListComponent } from './member-list/member-list.component';
import { ENoticeComponent } from './e-notice/e-notice.component'; import { ENoticeComponent } from './e-notice/e-notice.component';
import { ENoticeSignComponent } from './e-notice-sign/e-notice-sign.component'; import { ENoticeSignComponent } from './e-notice-sign/e-notice-sign.component';
import { RenewalReminderComponent } from './renewal-reminder/renewal-reminder.component';
import { RenewalReminderDetailComponent } from './renewal-reminder-detail/renewal-reminder-detail.component';
import { JointSalesComponent } from './joint-sales/joint-sales.component';
import { JointSaleDetailComponent } from './joint-sale-detail/joint-sale-detail.component';
@NgModule({ @NgModule({
declarations: [MyCenterHomeComponent, MkMaterialComponent, MkMaterialDetailComponent, FileUploadComponent, ImportantAnnouncementComponent, SalesDetailComponent, AnnouncementDetailComponent, MyBusinessComponent, MyBusinessDetailComponent, PickerComponent, MyToastComponent, SalesRankComponent, TeamRankComponent, RecruitingComponent, RecruitingDetailComponent, ThanksComponent, MySettingComponent, MySettingDetailComponent, MyNewsComponent, MyTargetComponent, TeamPanelComponent, SwitchNumberPipe, TeamSalesScoreComponent, ScoreDetailsComponent, BusinessCardComponent, OrderDetailComponent, SalaryComponent, TodoListComponent, AddTaskComponent, MedicalServiceComponent, InvitationComponent, RegisterComponent, EmployeeInfoComponent, EmployeeBasicInfoComponent, WorkExperienceComponent, PersonalPhotosComponent, EmployeeIdCardComponent, EmployeeEducationComponent, PersonalStatementComponent, SignatureComponent, EmployeeSubmitComponent, BankCardComponent, MemberDetailComponent, ApprovalListComponent, ApprovalCommentsComponent, ApprovalResultListComponent, MyApplicationComponent, SuggestionComponent, EmployeeSalaryComponent, HistoricalRankComponent, TeamAreaPanelComponent, ArticleComponent, ArticleDetailComponent, ArticleReadComponent,SalaryDetailComponent,SalaryFirstYearComponent,DetailModalComponent, ProductComponent, ProductDataComponent, CommissionComponent, FileListComponent,MyCustomerComponent, CustomerRelationComponent, MyCustomerPolicyComponent, UnderwritingKnowledgeComponent, MyQuestionComponent, AskComponent, MenuItemComponent, MemberListComponent, ENoticeComponent, ENoticeSignComponent], declarations: [MyCenterHomeComponent, MkMaterialComponent, MkMaterialDetailComponent, FileUploadComponent, ImportantAnnouncementComponent, SalesDetailComponent, AnnouncementDetailComponent, MyBusinessComponent, MyBusinessDetailComponent, PickerComponent, MyToastComponent, SalesRankComponent, TeamRankComponent, RecruitingComponent, RecruitingDetailComponent, ThanksComponent, MySettingComponent, MySettingDetailComponent, MyNewsComponent, MyTargetComponent, TeamPanelComponent, SwitchNumberPipe, TeamSalesScoreComponent, ScoreDetailsComponent, BusinessCardComponent, OrderDetailComponent, SalaryComponent, TodoListComponent, AddTaskComponent, MedicalServiceComponent, InvitationComponent, RegisterComponent, EmployeeInfoComponent, EmployeeBasicInfoComponent, WorkExperienceComponent, PersonalPhotosComponent, EmployeeIdCardComponent, EmployeeEducationComponent, PersonalStatementComponent, SignatureComponent, EmployeeSubmitComponent, BankCardComponent, MemberDetailComponent, ApprovalListComponent, ApprovalCommentsComponent, ApprovalResultListComponent, MyApplicationComponent, SuggestionComponent, EmployeeSalaryComponent, HistoricalRankComponent, TeamAreaPanelComponent, ArticleComponent, ArticleDetailComponent, ArticleReadComponent,SalaryDetailComponent,SalaryFirstYearComponent,DetailModalComponent, ProductComponent, ProductDataComponent, CommissionComponent, FileListComponent,MyCustomerComponent, CustomerRelationComponent, MyCustomerPolicyComponent, UnderwritingKnowledgeComponent, MyQuestionComponent, AskComponent, MenuItemComponent, MemberListComponent, ENoticeComponent, ENoticeSignComponent, RenewalReminderComponent, RenewalReminderDetailComponent, JointSalesComponent, JointSaleDetailComponent],
imports: [ imports: [
CommonModule, CommonModule,
LifeCommonModule, LifeCommonModule,
......
...@@ -818,4 +818,19 @@ export class MyService { ...@@ -818,4 +818,19 @@ export class MyService {
const url = this.API + "/login" const url = this.API + "/login"
return this.http.post(url,JSON.stringify(params)) return this.http.post(url,JSON.stringify(params))
} }
// 查询联合销售列表信息接口
queryUnionSalesList(params){
const url = this.API + "/unionSales/queryUnionSalesList"
return this.http.post(url,JSON.stringify(params))
}
// 查询联合销售列表信息接口
queryUnionSalesPractitionerList(params){
const url = this.API + "/unionSales/queryUnionSalesPractitionerList"
return this.http.post(url,JSON.stringify(params))
}
// 经纪人联合销售签名
signUnionSales(params){
const url = this.ydapi + "/practitioner/signUnionSales"
return this.http.post(url,JSON.stringify(params))
}
} }
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { RenewalReminderDetailComponent } from './renewal-reminder-detail.component';
describe('RenewalReminderDetailComponent', () => {
let component: RenewalReminderDetailComponent;
let fixture: ComponentFixture<RenewalReminderDetailComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ RenewalReminderDetailComponent ]
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(RenewalReminderDetailComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});
import { Component, OnInit } from '@angular/core';
@Component({
selector: 'ydlife-renewal-reminder-detail',
templateUrl: './renewal-reminder-detail.component.html',
styleUrls: ['./renewal-reminder-detail.component.scss']
})
export class RenewalReminderDetailComponent implements OnInit {
constructor() { }
ngOnInit() {
}
}
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { RenewalReminderComponent } from './renewal-reminder.component';
describe('RenewalReminderComponent', () => {
let component: RenewalReminderComponent;
let fixture: ComponentFixture<RenewalReminderComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ RenewalReminderComponent ]
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(RenewalReminderComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});
import { Component, OnInit } from '@angular/core';
@Component({
selector: 'ydlife-renewal-reminder',
templateUrl: './renewal-reminder.component.html',
styleUrls: ['./renewal-reminder.component.scss']
})
export class RenewalReminderComponent implements OnInit {
constructor() { }
ngOnInit() {
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment