Commit d2b439b7 by sunchao

Merge branch 'dev' into master

parents e0a0fad8 3095a83c
......@@ -18,6 +18,7 @@ export class AppComponent implements OnInit, OnDestroy {
dialogInfo: any;
// 是否显示首页浮标
isShowIndexBtn: boolean;
loginId:any;
constructor(private router: Router,private authService: AuthService, private lifeCommonService: LifeCommonService) {
this.subscription = lifeCommonService.shareStatus$.subscribe(status => {
this.shareGuidePageEnable = status == '1';
......@@ -25,7 +26,8 @@ export class AppComponent implements OnInit, OnDestroy {
}
ngOnInit() {
this.authService.obtainToken().subscribe(res => {
this.loginId = localStorage.getItem('lifeCustomerInfo')?JSON.parse(localStorage.getItem('lifeCustomerInfo')).mobileNo:null;
this.authService.obtainToken(this.loginId).subscribe(res => {
if (res['success']) {
localStorage.setItem('lifeToken', res['data']['token']);
this.ydWxConfig();
......
......@@ -43,12 +43,9 @@ export class AuthService {
/**
* 获取TOKEN
*/
obtainToken() {
obtainToken(loginId) {
const url = this.API + '/authorize/obtainToken';
const ticketObj = {
ticket: 'life'
};
return this.http.post(url, JSON.stringify(ticketObj));
return this.http.post(url, JSON.stringify({ ticket: "life",loginId:loginId}));
}
//获取微信配置ydLife公众号
......
......@@ -19,7 +19,7 @@
<div class="weui-cell weui-cell_vcode" style="padding:12px 0px">
<!-- <div class="weui-cell__hd"><label class="weui-label">验证码</label></div> -->
<div class="weui-cell__bd">
<input class="weui-input" type="tel" pattern="[0-9]*" id="js_input" placeholder="请输入验证码" maxlength="4"
<input class="weui-input" type="tel" pattern="[0-9]*" id="js_input" placeholder="请输入验证码" maxlength="6"
name="verificationCode" [(ngModel)]="userInfo.verificationCode" (blur)="inputBlur()">
</div>
<div class="weui-cell__ft">
......
......@@ -42,7 +42,7 @@ export class LoginComponent implements OnInit, OnDestroy {
verificationCode: this.userInfo.verificationCode,
expireTime: '3600'
};
if (this.MOBILE_REGEXP.test(this.userInfo.mobileNo) && this.userInfo.verificationCode && this.userInfo.verificationCode.length == 4) {
if (this.MOBILE_REGEXP.test(this.userInfo.mobileNo) && this.userInfo.verificationCode && this.userInfo.verificationCode.length == 6) {
this.authService.compare(compareInfo).subscribe(res => {
if (res['success']) {
this.authService.login({ mobileNo: this.userInfo.mobileNo }).subscribe((response) => {
......@@ -52,6 +52,11 @@ export class LoginComponent implements OnInit, OnDestroy {
sessionStorage.setItem('subordinateSystemName', response['data']['practitionerBasicInfo']['subordinateName'])
}
const lifeCustomerInfo = { ...response.data, mobileNo: this.userInfo.mobileNo, commonResult: null };
this.authService.obtainToken(this.userInfo.mobileNo).subscribe((res)=>{
if (res['success']) {
localStorage.setItem('lifeToken', res['data']['token']);
}
})
if (lifeCustomerInfo['customerId'] && lifeCustomerInfo['practitionerId']) {
// if (response['data']['practitionerTypeId'] == 28) {
localStorage.setItem('lifeCustomerInfo', JSON.stringify(lifeCustomerInfo));
......
<div class="guidePageContainer" (click)="closeGuidePage()">
<div class="guideTips">
<p>请点击右上角菜单</p>
<p>分享给朋友</p>
<p>{{eNoticeId ? '分享给客户' :'分享给朋友'}}</p>
</div>
<i class="iconfont icon-yindaojiantou"></i>
</div>
......@@ -7,11 +7,14 @@ import { LifeCommonService } from "../life-common.service";
styleUrls: ['./guide-page.component.scss']
})
export class GuidePageComponent implements OnInit {
eNoticeId:string;
constructor(private lifeCommonService: LifeCommonService) {
}
ngOnInit() {
// 判断是分享给客户还是分享给朋友
this.eNoticeId = sessionStorage.getItem('eNoticeId');
setTimeout(() => {
this.closeGuidePage();
}, 6000);
......
......@@ -134,6 +134,7 @@ export class LifeCommonService {
link: link, // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
imgUrl: imgUrl, // 分享图标
success: () => {
console.log('试试');
_this.shareStatusPublish(0);
}
};
......
......@@ -25,7 +25,8 @@ export class BusinessQuery {
public leadsAssignedId?: any,
public expertType?: any,
public expertPractitionerId?: any,
public expertPractitionerName?: any
public expertPractitionerName?: any,
public mdDropOptionName?: any
) {
......
<div class="wrapper">
<img src="assets/images/pass.png" alt="通过" />
<div style="font-size: 22px;font-weight: bold;margin: 15px auto;">您已经成功提交,谢谢!</div>
<div class="before">
<div style="font-size: 22px;font-weight: bold;margin: 15px auto;color:#333">{{type=='eNotice_submit' ? '您已提交成功': '您已经成功提交,谢谢!'}}</div>
<div class="before" *ngIf="type == 'eNotice_submit'">
<p>感谢您的理解与配合</p>
</div>
<div class="footer" *ngIf="type == 'eNotice_submit'">
<div class="eQrocde">
<img src="assets/images/ydOnline.jpg" alt="银盾在线">
</div>
<div style="margin-top: 10px;letter-spacing:1px;color:#666;">请扫码关注“银盾在线”</div>
</div>
<div class="before" *ngIf="type!='eNotice_submit'">
<p>我们将在3个工作日完成报聘审核。</p>
<p>一旦审核完成,将以短信方式通知您成功报聘,</p>
<p>请注意查看。</p>
</div>
<div class="after">
<div style="margin-bottom: 15px;font-size: 16px;">通知您报聘成功后:</div>
<div class="after" *ngIf="type!='eNotice_submit'">
<div style="margin-bottom: 15px;font-size: 16px;">通知您报聘成功后:</div>
<ul>
<li>你可以关注“银盾保险经纪”的微信服务号</li>
<li>在服务号里,用手机号登录我们的银盾经纪平台,可查看您经纪合同和公司相关资料。</li>
......@@ -15,11 +24,11 @@
<li>运营人员将给您公司和相关介绍</li>
</ul>
</div>
<!-- <img src="assets/images/login_logo.png" alt="logo" style="width: 50%;position: absolute;left: 0;right: 0;margin: 0 auto;bottom: 20px;"> -->
</div>
<ydlife-alert *ngIf="isNeedAlert" [dialogInfo]="dialogInfo" (popInfo)="getPopInfo()"></ydlife-alert>
......@@ -12,6 +12,8 @@ export class EmployeeSubmitComponent implements OnInit {
approveStatus:any;
isNeedAlert: boolean;
dialogInfo: any;
// 判断是哪个成功页面
type:string;
constructor(private activatedRoute: ActivatedRoute,
public lifeCommonService:LifeCommonService,
private myService:MyService) { }
......@@ -22,8 +24,11 @@ export class EmployeeSubmitComponent implements OnInit {
this.lifeCommonService.setTitle(title);
this.hiringBasicInfoId = this.activatedRoute.snapshot.queryParams.hiringBasicInfoId?this.activatedRoute.snapshot.queryParams.hiringBasicInfoId:null;
this.approveStatus = this.activatedRoute.snapshot.queryParams.status?this.activatedRoute.snapshot.queryParams.status:null;
if(this.approveStatus == null || this.approveStatus == '-1'){
this.hiringSubmit();
this.type = this.activatedRoute.snapshot.routeConfig.path;
if(this.type!='eNotice_submit'){
if(this.approveStatus == null || this.approveStatus == '-1'){
this.hiringSubmit();
}
}
}
......
......@@ -18,7 +18,7 @@ export class InvitationComponent implements OnInit {
hiringBasicInfoId:any;
//被邀请人
inviteeName:string;
constructor(private myService: MyService,
constructor(private myService: MyService,
private activatedRoute: ActivatedRoute,
public lifeCommonService: LifeCommonService,
private router: Router) { }
......@@ -37,7 +37,7 @@ export class InvitationComponent implements OnInit {
//分享邀请
sandInvitation() {
if(this.deviceType == 3){
const imgUrl = this.lifeCustomerInfo.practitionerBasicInfo.headImagePath ? this.lifeCustomerInfo.practitionerBasicInfo.headImagePath : `${environment.ORIGINNAME}/ydLife/assets/images/icons/meng.png`;
const imgUrl = this.lifeCustomerInfo.practitionerBasicInfo.headImagePath ? this.lifeCustomerInfo.practitionerBasicInfo.headImagePath : `${environment.DOMAINNAME}/ydLife/assets/images/icons/meng.png`;
this.lifeCommonService.shareStatusPublish(1);
this.lifeCommonService.wxShare(
'银盾保险经纪电子报聘邀请函',
......@@ -48,8 +48,8 @@ export class InvitationComponent implements OnInit {
alert('请在微信公众号中发送邀请');
}
}
register(){
this.router.navigate(['/register'],{ queryParams: { hiringBasicInfoId:this.hiringBasicInfoId} });
}
......
<div class="register_wrapper">
<img class="logo" src="assets/images/register_logo.png" alt="logo" />
<img class="logo" src="assets/images/register_logo.png" alt="logo"/>
<div *ngIf="type=='identify'" style="font-size:14px;color:#666;margin-top:32px;letter-spacing:1px;">
<p>感谢您的信任和支持</p>
<p>耽搁您一分钟</p>
<p>完成客户告知书和保险经纪服务委托协议的签署</p>
</div>
<div class="weui-form__control-area">
<div class="weui-cells__group weui-cells__group_form">
<div class="weui-cells weui-cells_form">
<div class="weui-cell" style="padding:10px 0px" *ngIf="type=='identify'">
<div class="weui-cell__bd">
<input autofocus="" class="weui-input" type="tel" maxlength="11" pattern="[0-9]*" placeholder="请输入您的姓名"
name="mobileNo" [(ngModel)]="userInfo.name" [disabled]="type=='identify'" (blur)="inputBlur()">
</div>
</div>
<div class="weui-cell" style="padding:10px 0px">
<div class="weui-cell__bd">
<input autofocus="" class="weui-input" type="tel" maxlength="11" pattern="[0-9]*" placeholder="请输入您的真实手机"
name="mobileNo" [(ngModel)]="userInfo.mobileNo" (blur)="inputBlur()">
name="mobileNo" [(ngModel)]="userInfo.mobileNo" (blur)="inputBlur()" [disabled]="type=='identify'">
</div>
</div>
<div class="weui-cell weui-cell_vcode" style="padding:12px 0px">
<div class="weui-cell__bd">
<input class="weui-input" type="tel" pattern="[0-9]*" id="js_input" placeholder="请输入验证码" maxlength="4"
<input class="weui-input" type="tel" pattern="[0-9]*" id="js_input" placeholder="请输入验证码" maxlength="6"
name="verificationCode" [(ngModel)]="userInfo.verificationCode" (blur)="inputBlur()">
</div>
<div class="weui-cell__ft">
......@@ -23,7 +34,7 @@
</div>
</div>
<footer style="width: 80%;margin-top: 30px;" (click)="checkVerificationCode()">下一步</footer>
<img style="position: relative;bottom: 0;left: 0;z-index: 1;" src="assets/images/register_bg.png" alt="">
<img style="position: relative;bottom: 0;left: 0;z-index: 1;" src="assets/images/register_bg.png" alt="" *ngIf="type!='identify'">
</div>
<ydlife-alert *ngIf="isNeedAlert" [dialogInfo]="dialogInfo" (popInfo)="getPopInfo()"></ydlife-alert>
<ydlife-toast *ngIf="toastDialog" [toastInfo]="toastInfo"></ydlife-toast>
......@@ -2,22 +2,28 @@ import { Component, OnInit } from "@angular/core";
import { AuthService } from '../../../auth/auth.service';
import { ActivatedRoute,Router } from "@angular/router";
import { LifeCommonService } from "../../../common/life-common.service";
import { MyService } from "../../my.service";
import { THIS_EXPR } from "@angular/compiler/src/output/output_ast";
@Component({
selector: "ydlife-register",
templateUrl: "./register.component.html",
styleUrls: ["./register.component.scss"],
})
export class RegisterComponent implements OnInit {
constructor(public authService: AuthService,
constructor(public authService: AuthService,
private activatedRoute: ActivatedRoute,
private router: Router,
public lifeCommonService: LifeCommonService) {}
private myService: MyService,
public lifeCommonService: LifeCommonService) {
}
MOBILE_REGEXP = /^(1)\d{10}$/;
sendCodeHtml: string = '获取验证码';
timer: any;
remainTimes: number = 60;
disabledSendBtn: boolean = false;
userInfo: any = {
name:null,
mobileNo: null,
verificationCode: null
};
......@@ -28,16 +34,50 @@ export class RegisterComponent implements OnInit {
toastDialog: boolean;
toastInfo: any;
hiringBasicInfoId:any;
// 判断是哪个注册页面
type:string;
// 分享电子告知书ID
eNoticeId:string;
// 电子告知书信息
eNoticeInfo:any;
ngOnInit() {
const title = this.activatedRoute.snapshot.data[0]['title'];
this.lifeCommonService.setTitle(title);
this.hiringBasicInfoId = this.activatedRoute.snapshot.queryParams.hiringBasicInfoId?this.activatedRoute.snapshot.queryParams.hiringBasicInfoId:null;
this.eNoticeId = this.activatedRoute.snapshot.queryParams.eNoticeId?this.activatedRoute.snapshot.queryParams.eNoticeId:null;
sessionStorage.setItem('eNoticeId',this.eNoticeId);
this.type = this.activatedRoute.snapshot.routeConfig.path;
console.log(this.type)
if(this.type=='identify'){
this.queryInformedSheetById();
}
}
inputBlur() {
window.scrollTo(0, 0);
}
// 查询告知书链接
queryInformedSheetList(){
this.myService.queryInformedSheetList({id:this.eNoticeId}).subscribe(res=>{
if(res['success']){
this.eNoticeInfo = res['data']['list'][0];
if(this.eNoticeInfo['status']==1){
if (this.lifeCommonService.checkDeviceType() == '1') {
const newWindow = window.open();
newWindow.location.href = this.eNoticeInfo['informedOssPath'];
} else {
window.location.href = this.eNoticeInfo['informedOssPath'];
}
}else{
this.router.navigate(['/eNoticeSign']);
}
}else{
this.openPopInfo(res['message']);
}
})
}
// 发送验证码
verificationCode() {
const verificationInfo = {
......@@ -56,7 +96,7 @@ export class RegisterComponent implements OnInit {
this.openPopInfo('手机号不正确');
}
}
// 倒计时
countDown() {
this.disabledSendBtn = true;
......@@ -115,7 +155,27 @@ export class RegisterComponent implements OnInit {
};
this.authService.compare(compareCodeObj).subscribe((res)=>{
if(res['success']){
this.router.navigate(['/employee_info'],{ queryParams: { hiringBasicInfoId:this.hiringBasicInfoId,mobileNo:this.userInfo.mobileNo} });
if(this.type=='identify'){
this.queryInformedSheetList();
}else{
this.router.navigate(['/employee_info'],{ queryParams: { hiringBasicInfoId:this.hiringBasicInfoId,mobileNo:this.userInfo.mobileNo} });
}
}else{
this.openPopInfo(res['message']);
}
})
}
// 通过ID获取用户信息
queryInformedSheetById(){
this.myService.queryInformedSheetById({'id':this.eNoticeId}).subscribe(res=>{
console.log(res);
if(res['success']){
const informed = res['data']['informed'];
this.userInfo = {
name:informed.customerName,
mobileNo: informed.customerMobile
};
}else{
this.openPopInfo(res['message']);
}
......
......@@ -4,20 +4,26 @@
<div>
电子签名<span style="font-size: 10px;font-weight: normal;">(请书写工整,字迹清晰)</span>
</div>
<span class="page_mark"> 8/8</span>
<span class="page_mark" *ngIf="type!='eNotice'"> 8/8</span>
</div>
<div class="signatureContent">
<signature-pad *ngIf="!isSignatureShow" #signaturePad [options]="signaturePadOptions" (onBeginEvent)="drawStart()" (onEndEvent)="drawComplete()">
</signature-pad>
<img [src]="imgStr" alt="签名" *ngIf="isSignatureShow">
</div>
<div *ngIf="type == 'eNotice'" style="margin-left: 13px;color: #666;">
<p>签署日期:{{todayDate | date:'yyyy-MM-dd'}}</p>
</div>
<div class="signature_action" *ngIf="approveStatus == null || approveStatus == '-1'">
<img src="assets/images/clear.png" alt="清除" (click)="clearSignature();"/>
<img src="assets/images/revoke.png" *ngIf="!isSignatureShow" alt="上一步" (click)="revokeSignature()"/>
</div>
<footer class="fixed" (click)="next()" *ngIf="approveStatus==null || approveStatus=='-1'">
<footer class="fixed" (click)="next()" *ngIf="(approveStatus==null || approveStatus=='-1') && type != 'eNotice'">
我自愿签订经纪人合同书
</footer>
<footer class="fixed" (click)="saveDigitalSignatures()" *ngIf="type == 'eNotice'" style="margin:45px;width:auto;border-radius:60px">
确认提交
</footer>
<div id="page" *ngIf="approveStatus!=null && approveStatus !='-1'">
<div (click)="goBack()">上一页</div>
<div (click)="viewNext()">下一页</div>
......@@ -26,4 +32,4 @@
返回审批结果
</footer>
</div>
<ydlife-alert *ngIf="isNeedAlert" [dialogInfo]="dialogInfo" (popInfo)="getPopInfo()"></ydlife-alert>
\ No newline at end of file
<ydlife-alert *ngIf="isNeedAlert" [dialogInfo]="dialogInfo" (popInfo)="getPopInfo()"></ydlife-alert>
......@@ -20,16 +20,20 @@ export class SignatureComponent implements OnInit {
isSignatureShow:boolean;
viewApprovalInfo:any;
approveStatus:any;
// 获取页面适用类型
type:string;
todayDate:Date = new Date();
@ViewChild(SignaturePad) signaturePad : SignaturePad;
constructor(private activatedRoute: ActivatedRoute,
private router: Router,public lifeCommonService:LifeCommonService,
public myService:MyService) {
public myService:MyService) {
}
ngOnInit() {
this.type = this.activatedRoute.snapshot.queryParams.type ? this.activatedRoute.snapshot.queryParams.type :null;
this.signaturePadOptions = {
minWidth: 0.5,
maxWidth: 3,
......@@ -42,9 +46,12 @@ export class SignatureComponent implements OnInit {
}
const title = this.activatedRoute.snapshot.data[0]['title'];
this.lifeCommonService.setTitle(title);
this.hiringBasicInfoId = this.activatedRoute.snapshot.queryParams.hiringBasicInfoId?this.activatedRoute.snapshot.queryParams.hiringBasicInfoId:null;
this.queryWholeInfo(this.hiringBasicInfoId)
this.viewApprovalInfo = sessionStorage.getItem('viewApprovalInfo');
if(this.type!='eNotice'){
this.hiringBasicInfoId = this.activatedRoute.snapshot.queryParams.hiringBasicInfoId?this.activatedRoute.snapshot.queryParams.hiringBasicInfoId:null;
this.queryWholeInfo(this.hiringBasicInfoId)
this.viewApprovalInfo = sessionStorage.getItem('viewApprovalInfo');
}
}
next(){
......@@ -68,18 +75,30 @@ export class SignatureComponent implements OnInit {
this.openPopInfo('您还没有签名!');
return;
}
const param = {
hiringBasicInfoId:this.hiringBasicInfoId,
imgStr:this.imgStr
}
this.myService.saveDigitalSignatures(param).subscribe((res)=>{
if(res['success']){
this.queryWholeInfo(this.hiringBasicInfoId);
this.router.navigate(['/employee_submit'],{queryParams:{ hiringBasicInfoId:this.hiringBasicInfoId,status:this.approveStatus}});
}else{
this.openPopInfo(res['message']);
if(this.type=='eNotice'){
this.myService.signInformedSheet({'id':sessionStorage.getItem('eNoticeId'),imgStr:this.imgStr}).subscribe(res=>{
if(res['success']){
// 确认提交
this.router.navigate(['/eNotice_submit']);
}else{
this.openPopInfo(res['message']);
}
})
}else{
const param = {
hiringBasicInfoId:this.hiringBasicInfoId,
imgStr:this.imgStr
}
})
this.myService.saveDigitalSignatures(param).subscribe((res)=>{
if(res['success']){
this.queryWholeInfo(this.hiringBasicInfoId);
this.router.navigate(['/employee_submit'],{queryParams:{ hiringBasicInfoId:this.hiringBasicInfoId,status:this.approveStatus}});
}else{
this.openPopInfo(res['message']);
}
})
}
}
queryWholeInfo(hiringBasicInfoId){
......
<ydlife-e-notice></ydlife-e-notice>
<div class="">
<div class="signBtn" (click)="agree()">同意,并签署</div>
</div>
.signBtn{
margin: 30px 45px;
height: 48px;
line-height: 48px;
text-align: center;
border-radius: 46px;
background: #C81B1E;
color: #fff;
font-size: 18px;
font-weight: bold;
}
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { ENoticeSignComponent } from './e-notice-sign.component';
describe('ENoticeSignComponent', () => {
let component: ENoticeSignComponent;
let fixture: ComponentFixture<ENoticeSignComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ ENoticeSignComponent ]
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(ENoticeSignComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});
import { Component, OnInit } from '@angular/core';
import { Router } from '@angular/router';
@Component({
selector: 'ydlife-e-notice-sign',
templateUrl: './e-notice-sign.component.html',
styleUrls: ['./e-notice-sign.component.scss']
})
export class ENoticeSignComponent implements OnInit {
constructor(private router:Router) { }
ngOnInit() {
}
agree(){
this.router.navigate(['/eNoticeSignature'],{ queryParams: { type:'eNotice'} })
}
}
.csNoticeContent{
color: #666;
letter-spacing: 1px;
padding: 0 10px 50px 10px;
font-size: 18px;
h3{
text-align: center;
font-size: 19px;
font-weight: bold;
margin: 8px 0 15px 0;
}
h4{
font-weight: bold;
margin: 15px 0;
line-height: 1.5;
}
ul{
padding-left: 18px;
ol{
padding-left: 20px;
li{
list-style: lower-alpha;
}
}
}
ul li{
list-style: decimal;
}
ul.list_2{
li{
list-style: none;
display: flex;
span{
margin-right: 5px;
}
}
}
}
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { ENoticeComponent } from './e-notice.component';
describe('ENoticeComponent', () => {
let component: ENoticeComponent;
let fixture: ComponentFixture<ENoticeComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ ENoticeComponent ]
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(ENoticeComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});
import { Component, OnInit } from '@angular/core';
@Component({
selector: 'ydlife-e-notice',
templateUrl: './e-notice.component.html',
styleUrls: ['./e-notice.component.scss']
})
export class ENoticeComponent implements OnInit {
constructor() { }
ngOnInit() {
}
}
......@@ -99,7 +99,7 @@ export class MenuItemComponent implements OnInit {
{ no: 30, subtitle: '执业证书', icon: 'card', path: `https://${window.location.host}/brokerQry/#/brokerDetail/${this.lifeCustomerInfo.practitionerId}?source=0`, routerLink: '',showSubMenu:true },
{ no: 32, subtitle: '公司介绍', icon: 'introduce', path: '', routerLink: '',showSubMenu:true },
{ no: 27, subtitle: '我的经纪合同', icon: 'contract', path: '', routerLink: 'my_application' ,showSubMenu:true},
]
}
];
......@@ -181,7 +181,7 @@ export class MenuItemComponent implements OnInit {
// 分享名片
shareIdCard() {
const imgUrl = this.lifeCustomerInfo.practitionerBasicInfo.headImagePath ? this.lifeCustomerInfo.practitionerBasicInfo.headImagePath : `${environment.ORIGINNAME}/ydLife/assets/images/icons/meng.png`;
const imgUrl = this.lifeCustomerInfo.practitionerBasicInfo.headImagePath ? this.lifeCustomerInfo.practitionerBasicInfo.headImagePath : `${environment.DOMAINNAME}/ydLife/assets/images/icons/meng.png`;
this.lifeCommonService.shareStatusPublish(1);
this.lifeCommonService.wxShare(
`银盾保险经纪 ${this.lifeCustomerInfo.practitionerBasicInfo.name}`,
......
......@@ -169,26 +169,38 @@
</div>
</div>
</div>
<!-- 咨询问卷 -->
<div class="content" *ngIf="selectedId===2">
<div style="text-align: center;font-size: 16px;margin-top: 10px;"
*ngIf="opportunitySurveyAnswersList?.length==0 || !opportunitySurveyAnswersList">
暂无问卷信息</div>
<div *ngIf="!(opportunitySurveyAnswersList?.length==0 || !opportunitySurveyAnswersList)">
<div class="viewReportBtn" *ngIf="isCompletedQuestionnaire == 3" (click)="viewReport()">查看报告</div>
<div class="viewReportBtn" *ngIf="isCompletedQuestionnaire != 3">暂无报告</div>
</div>
<div class="answerContent" *ngFor="let surveyItem of opportunitySurveyAnswersList">
<div class="questionTitle">{{surveyItem.questionName}}</div>
<div class="questionContent">{{surveyItem.optionName}}</div>
</div>
</div>
<div class="content" *ngIf="selectedId===4">
<div style="text-align: center;font-size: 16px;margin-top: 10px;" *ngIf="isCompletedQuestionnaire!=3">暂无方案</div>
<!-- 客户告知书 -->
<div class="content" *ngIf="selectedId===5">
<ydlife-e-notice></ydlife-e-notice>
<div class="send">
<div (click)="eNoticeState=true;">发送给客户签署</div>
</div>
</div>
<!-- 商机跟进 -->
<div class="content" *ngIf="selectedId===3">
<ul class="recordLists">
<li *ngFor="let opportunityRecordItem of opportunityRecordInfos;index as idx">
<div style="display: flex;justify-content: space-between;height: 25px;">
<div class="updatedAt">{{opportunityRecordItem.noticeDate}}</div>
<div class="opportunityRecordItem">
{{opportunityRecordItem.mdDropOptionName?opportunityRecordItem.mdDropOptionName:'待跟进'}}</div>
<a *ngIf="opportunityRecordItem.informedOssPath" href="{{opportunityRecordItem.informedOssPath}}" target="_blank"><i class="iconfont icon-pdf" style="color: #C81B1E;margin-right:5px"></i></a>
<span [ngStyle]="setBackgroundColor(opportunityRecordItem)">{{opportunityRecordItem.mdDropOptionName?opportunityRecordItem.mdDropOptionName:'待跟进'}}</span>
</div>
</div>
<div class="salesNotice">
<span>
......@@ -248,6 +260,40 @@
<li (click)="closeToast()">取消</li>
</ul>
</div>
<!-- 客户告知书弹窗 -->
<div class="eNoticeDialog">
<div class="eNoticeContent">
<Modal [(ngModel)]="this.eNoticeState" [transparent]="true" [closable]="true" (onClose)="onClose()">
<div [ngStyle]="{ height: 300, overflow: 'scroll' }">
<div class="am-list" style="margin:0;">
<div class="am-list-item">
<InputItem [clear]="true"
[value]="editBusiness.name"
(onChange)="editBusiness.name = $event">姓名:</InputItem>
</div>
<div class="am-list-item">
<InputItem [type]="'phone'"
[value]="editBusiness.mobileNo"
(onChange)="editBusiness.mobileNo = $event">手机号码:</InputItem>
</div>
<div class="am-list-line" style="color: #999;font-size:12px">
<p style="margin-bottom: 5px;">(请确保客户姓名和手机号填写正确</p>
<p>将会用于客户签署告知书时的身份验证)</p>
</div>
<div class="am-list-item am-list-item-middle">
<div class="am-list-line">
<div class="am-list-content"
style="width:100%;color:#fff;text-align:center;background-color: #2179AD;border-radius: 20px;margin:18px auto"
(click)="sendENotice()"
>发送</div>
</div>
</div>
</div>
</div>
</Modal>
</div>
</div>
</div>
<ydlife-toast *ngIf="toastDialog" [toastInfo]="toastInfo"></ydlife-toast>
<ydlife-alert *ngIf="isNeedAlert" [dialogInfo]="dialogInfo" (popInfo)="getPopInfo()"></ydlife-alert>
\ No newline at end of file
<ydlife-alert *ngIf="isNeedAlert" [dialogInfo]="dialogInfo" (popInfo)="getPopInfo()"></ydlife-alert>
......@@ -15,13 +15,13 @@
margin-right: 10px;
line-height: 30px;
height: 30px;
width: 25%;
flex: 1;
text-align: center;
border: 1px #a9aabb solid;
border-radius: 20px;
h3 {
font-weight: normal;
font-size: 16px;
font-size: 15px;
}
}
li.selected {
......@@ -174,6 +174,32 @@
line-height: 30px;
}
}
.viewReportBtn{
position: fixed;
bottom: 0;
left: 0;
width: 100%;
height: 44px;
text-align: center;
background: #2179AD;
color: #fff;
line-height: 44px;
}
.send{
position: fixed;
bottom: 30px;
width: 100%;
div{
margin: 0 40px;
height: 40px;
line-height: 40px;
text-align: center;
color: #fff;
font-size: 18px;
background: #2179AD;
border-radius: 20px;
}
}
}
.editContainer {
......@@ -283,4 +309,7 @@
background-color: rgba(0, 0, 0, .5);
top: 0;
}
.am-list-item.am-input-item{
padding-left: 0;
}
}
......@@ -3,6 +3,7 @@ import { MyService } from '../my.service';
import { ActivatedRoute, Router } from "@angular/router";
import { BusinessQuery } from '../../domain/businessQuery';
import { LifeCommonService } from '../../common/life-common.service';
import {environment} from '../../../environments/environment';
@Component({
selector: 'ydlife-my-business-detail',
templateUrl: './my-business-detail.component.html',
......@@ -16,7 +17,7 @@ export class MyBusinessDetailComponent implements OnInit {
surveyAnswersList: Array<any>;
readonlyFlag: boolean = true;
orderId: number;
opportunityId: string;
opportunityId: number;
opportunitySurveyAnswersList: Array<any>;
tagList: Array<any>;
editBusiness: BusinessQuery = new BusinessQuery();
......@@ -63,24 +64,33 @@ export class MyBusinessDetailComponent implements OnInit {
isNeedAlert: boolean;
dialogInfo: any;
practitionerId:any;
// 电子告知书弹窗显示
eNoticeState:boolean = false;
deviceType:number;
// 获取经纪人信息
lifeCustomerInfo:any;
constructor(private activateRoute: ActivatedRoute, private myService: MyService,
public lifeCommonService: LifeCommonService, private router: Router, ) {
this.titleList = [
{ id: 1, name: '基本信息' },
{ id: 3, name: '商机跟进' },
{ id: 2, name: '咨询问卷' },
{ id: 4, name: '咨询报告' },
// { id: 4, name: '咨询报告' },
{ id: 5, name: '客户告知书' }
]
}
ngOnInit() {
// 获取设备
this.deviceType = this.lifeCommonService.checkDeviceType();
this.orderId = this.activateRoute.snapshot.queryParams['orderId'];
//商机对应的客户id
this.opportunityId = this.activateRoute.snapshot.paramMap.get('id');
this.opportunityId = +this.activateRoute.snapshot.paramMap.get('id');
//商机id
this.leadsAssignedId = this.activateRoute.snapshot.queryParams['leadsAssignedId'];
this.opportunityRecordId = null;
this.practitionerId = JSON.parse(localStorage.getItem('lifeCustomerInfo'))['practitionerId']
this.lifeCustomerInfo = JSON.parse(localStorage.getItem('lifeCustomerInfo'));
this.practitionerId = this.lifeCustomerInfo['practitionerId'];
this.tagQuery();
//商机状态
this.dropOptionsQuery('bizchance_promotion_action');
......@@ -134,15 +144,14 @@ export class MyBusinessDetailComponent implements OnInit {
selectTab(id) {
if (this.clickFlag == true) {
this.selectedId = id;
if (id === 4) {
if (this.isCompletedQuestionnaire == 3) {
window.location.href = `https://${window.location.host}/customizedPlanList/3?orderId=${this.orderId}&customerId=${this.opportunityId}`
}
}
} else {
this.selectedId = 1;
}
}
// 查看报告
viewReport(){
window.location.href = `https://${window.location.host}/customizedPlanList/3?orderId=${this.orderId}&customerId=${this.opportunityId}`
}
ownOpportunityDetailQuery() {
const detailParam = {
......@@ -588,13 +597,83 @@ export class MyBusinessDetailComponent implements OnInit {
};
}
})
}
// 关闭弹窗
getPopInfo() {
this.isNeedAlert = false;
}
// 关闭客户告知书
onClose() {
this.eNoticeState = false;
}
// 发送电子客户告知书,opportunityIdID = CustomerId
sendENotice(){
this.eNoticeState = false;
if(this.deviceType != 3){
alert('请在微信公众号中发送邀请');
return;
}
const param = {
 practitionerId:this.lifeCustomerInfo['practitionerId'],
     leadsAssignedId:this.leadsAssignedId,
     customerName: this.editBusiness.name,
     customerId:this.editBusiness.opportunityId,
     customerMobile: this.editBusiness.mobileNo.replace(/\s/g, ''),
loginId:this.lifeCustomerInfo['customerId']
}
this.myService.saveInformedSheet(param).subscribe(res=>{
if(res['success']){
setTimeout(()=>{
const imgUrl = this.lifeCustomerInfo.practitionerBasicInfo.headImagePath ? this.lifeCustomerInfo.practitionerBasicInfo.headImagePath : `${environment.DOMAINNAME}/ydLife/assets/images/icons/meng.png`;
console.log(imgUrl);
this.lifeCommonService.shareStatusPublish(1);
this.lifeCommonService.wxShare(
'保险服务委托协议和客户告知书签署',
`您的保险服务委托协议和客户告知书已准备好,请查收并签署,感谢信任和支持。`,
`https://${window.location.host}/ydLife/identify?eNoticeId=${res['data']['id']}`,
imgUrl);
},500)
}else{
this.toastDialog = true;
this.toastInfo = {
status: 1,
msg: res['message'],
timeout: 3000,
align: 'center'
};
return false;
}
})
}
// 设置样式
setBackgroundColor(e){
let bgColor = 'transparent';
let fontColor = '#666';
if(e.informedOssPath && e.status==0){
bgColor = '#999999';
fontColor = '#fff';
}else if(e.informedOssPath && e.status==1){
bgColor = '#C81B1E';
fontColor = '#fff';
}else{
bgColor = 'transparent';
fontColor = '#666';
}
let style = {
'background-color':bgColor,
'color':fontColor,
'padding':"1px 3px",
'border-radius':"3px"
};
return style;
}
}
......@@ -66,6 +66,7 @@ import { MyQuestionComponent } from './my-question/my-question.component';
import { AskComponent } from './ask/ask.component';
import { MenuItemComponent } from './menu-item/menu-item.component';
import { MemberListComponent } from './member-list/member-list.component';
import { ENoticeSignComponent } from './e-notice-sign/e-notice-sign.component';
const myRoutes: Routes = [
{ path: '', component: MyCenterHomeComponent, canActivate: [AuthGuard], data: [{ title: '银盾保险经纪 - 工作台' }] },
......@@ -102,6 +103,8 @@ const myRoutes: Routes = [
{ path: 'inviter' ,component:InvitationComponent,canActivate:[AuthGuard],data:[{type:'inviter',title: '邀请函'}]},
{ path: 'invitees' ,component:InvitationComponent,data:[{type:'invitees',title: '邀请函'}]},
{ path: 'register' ,component:RegisterComponent,data: [{ title: '注册信息' }]},
{ path: 'identify' ,component:RegisterComponent,data: [{ title: '保险经纪服务委托协议和客户告知书' }]},
{ path: 'eNoticeSign' ,component:ENoticeSignComponent,data: [{ title: '保险经纪服务委托协议和客户告知书' }]},
{ path: 'employee_info',component:EmployeeInfoComponent,data: [{ title: '银盾经纪人报聘' }]},
{ path: 'employee_basic_info',component:EmployeeBasicInfoComponent,data: [{ title: '银盾经纪人报聘' }] },
{ path: 'work_experience',component:WorkExperienceComponent,data: [{ title: '银盾经纪人报聘' }] },
......@@ -113,7 +116,9 @@ const myRoutes: Routes = [
{ path: 'personal_statement',component:PersonalStatementComponent,data: [{ type:'personal_statement',title: '银盾经纪人报聘' }] },
{ path: 'contract',component:PersonalStatementComponent,data: [{ type:'contract',title: '银盾经纪人报聘' }] },
{ path: 'signature',component:SignatureComponent,data: [{ title: '银盾经纪人报聘' }]},
{ path: 'eNoticeSignature',component:SignatureComponent,data: [{ title: '保险经纪服务委托协议和客户告知书' }]},
{ path: 'employee_submit',component:EmployeeSubmitComponent,data: [{ title: '已提交' }]},
{ path: 'eNotice_submit',component:EmployeeSubmitComponent,data: [{ title: '已提交' }]},
{ path: 'member_detail/:practitionerId',component:MemberDetailComponent, canActivate: [AuthGuard]},
{ path: 'approval_list',component:ApprovalListComponent, data: [{ title: '审批列表' }],canActivate: [AuthGuard]},
{ path: 'approval_comments',component:ApprovalCommentsComponent,canActivate:[AuthGuard]},
......
......@@ -89,4 +89,4 @@
</div>
<ydlife-alert *ngIf="isNeedAlert" [dialogInfo]="dialogInfo" (popInfo)="getPopInfo()"></ydlife-alert>
<ydlife-toast *ngIf="toastDialog" [toastInfo]="toastInfo"></ydlife-toast>
\ No newline at end of file
<ydlife-toast *ngIf="toastDialog" [toastInfo]="toastInfo"></ydlife-toast>
......@@ -79,9 +79,11 @@ import { MyQuestionComponent } from './my-question/my-question.component';
import { AskComponent } from './ask/ask.component';
import { MenuItemComponent } from './menu-item/menu-item.component';
import { MemberListComponent } from './member-list/member-list.component';
import { ENoticeComponent } from './e-notice/e-notice.component';
import { ENoticeSignComponent } from './e-notice-sign/e-notice-sign.component';
@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],
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],
imports: [
CommonModule,
LifeCommonModule,
......
......@@ -729,4 +729,29 @@ export class MyService {
return this.http.post(url, JSON.stringify(objParam));
}
// 保存客户告知书分享信息
saveInformedSheet(objParam) {
const url = this.ydapi + "/practitioner/saveInformedSheet";
return this.http.post(url, JSON.stringify(objParam));
}
// 获取客户告知书分享信息
queryInformedSheetById(objParam) {
const url = this.ydapi + "/practitioner/queryInformedSheetById";
return this.http.post(url, JSON.stringify(objParam));
}
// 保存客户签名
signInformedSheet(objParam) {
const url = this.ydapi + "/practitioner/signInformedSheet";
return this.http.post(url, JSON.stringify(objParam));
}
// 查询电子告知书列表
queryInformedSheetList(param){
const url = this.ydapi + "/practitioner/queryInformedSheetList";
return this.http.post(url, JSON.stringify(param)).pipe(res => {
return res;
});
}
}
......@@ -42,14 +42,14 @@
<body>
<app-root>
</app-root>
<!-- <div class="loadingBox" id="loading"
style="display: flex;justify-content: center;align-items: center;position: fixed;left:40%;top:40%;width:100%;height: 100%;">
<img src="assets/images/loading.gif" alt="loading" class="img-responsive" style="width: 68px;height: 68px;">
</div> -->
<div id="adv"
style="width: 100%;min-width: 320px;height:100%;max-width: 640px;overflow: hidden;position: fixed;top: 0;right: 0; bottom: 0;left: 0;background: #fff;margin: auto;">
style="width: 100%;min-width: 320px;height:100%;max-width: 640px;overflow: hidden;position: fixed;top: 0;right: 0; bottom: 0;left: 0;background: #fff;margin: auto;display: none;">
<div class="content" style="text-align: center;margin: 0 auto;">
<img style="width:100%;margin-bottom: 15px;" src="assets/images/loading_bg.png">
<!-- <div style="margin-top: 45%;">欢迎回家,先喝碗鸡汤</div> -->
......@@ -73,6 +73,7 @@
<script src="./assets/laydate/laydate.js"></script>
<script type="text/javascript">
var api = 'https://' + window.location.host;
var loginId = localStorage.getItem('lifeCustomerInfo')?JSON.parse(localStorage.getItem('lifeCustomerInfo')).mobileNo:null;
// var api = 'https://mdev.zuihuibi.cn';
function getToken() {
$.ajax({
......@@ -80,7 +81,8 @@
url: api + '/api/authorize/obtainToken',
contentType: "application/json",
data: JSON.stringify({
ticket: 'life'
ticket: 'life',
loginId:loginId
}),
async: false,
success: function (res) {
......@@ -115,17 +117,11 @@
}
//页面刷新的时候不出现
if (window.name == "") {
window.name = "isReload"; // 在首次进入页面时我们可以给window.name设置一个固定值
if(shareCode){
let loading = document.getElementById("adv");
loading.style.display = 'none';
}else{
if(window.location.pathname != '/ydLife/identify'){
window.name = "isReload"; // 在首次进入页面时我们可以给window.name设置一个固定值
initialize();
getknowledgeQry();
}
getknowledgeQry();
} else if (window.name == "isReload") {
let loading = document.getElementById("adv");
loading.style.display = 'none';
}
//用于去除alert的url
......@@ -170,7 +166,7 @@
}
})
}
// (function() {
// if (typeof WeixinJSBridge == "object" && typeof WeixinJSBridge.invoke == "function") {
......@@ -190,4 +186,4 @@
</script>
</body>
</html>
\ No newline at end of file
</html>
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