Commit 58254264 by zeyang

1.优化赢家平台 商机跟进的时间选择样式和校验

2.赢家平台嵌入SFP智能财策页面
parent ba982ef6
<div class="wrapper">
<ul class="tab">
<li *ngFor="let titleItem of titleList" (click)="selectTab(titleItem.id)"
[ngClass]="{selected:selectedId===titleItem.id}">
<div style="position: relative;">
<h3>{{titleItem.name}}
</h3>
</div>
</li>
</ul>
<div class="content" *ngIf="selectedId===1">
<i class="iconfont icon-bianji" *ngIf="readonlyFlag" (click)="editInfo()"></i>
<i class="iconfont icon-save" *ngIf="!readonlyFlag" (click)="saveInfo()"></i>
<div class="contentDetail">
<div class="wrapper_item">
<div class="contentItem">
<span>姓名</span>
<input class="form-control" type="text" placeholder="{{readonlyFlag ?'暂无姓名':'请输入姓名'}}"
[(ngModel)]="editBusiness.name" [disabled]="readonlyFlag" (blur)="inputBlur()" />
</div>
<div class="contentItem">
<span>出生日期</span>
<div>
<ListItem
DatePicker
[mode]="'date'"
[disabled]="readonlyFlag"
[minDate]="minDate"
[maxDate] = "today"
[(ngModel)]="editBusiness.birthDate"
(onOk)="onOk($event)">
<Brief *ngIf="!readonlyFlag">{{editBusiness.birthDate ? (editBusiness.birthDate | date:'yyyy-MM-dd') : '请输入出生日期'}}</Brief>
<Brief *ngIf="readonlyFlag">{{editBusiness.birthDate ? (editBusiness.birthDate | date:'yyyy-MM-dd') : '暂无出生日期信息'}}</Brief>
</ListItem>
</div>
</div>
<div class="contentItem">
<span>年龄</span>
<input class="form-control" type="text" placeholder="{{readonlyFlag ?'暂无年龄信息':'请输入年龄'}}"
[(ngModel)]="editBusiness.age" [disabled]="readonlyFlag || editBusiness.birthDate" (blur)="inputBlur()" />
</div>
<div class="contentItem">
<span>性别</span>
<div class="sexWrapper">
<button class="form-control sex" [ngClass]="{'sexBtn':editBusiness?.gender=='1' && maleFlag && femaleFlag}"
(click)="selectedGender('1')" [disabled]="readonlyFlag" *ngIf="sexFlag && maleFlag">
</button>
<button class="form-control sex" [ngClass]="{'sexBtn':editBusiness?.gender=='2' && maleFlag && femaleFlag}"
(click)="selectedGender('2')" [disabled]="readonlyFlag" *ngIf="sexFlag && femaleFlag">
</button>
</div>
<input class="form-control" type="text" placeholder="暂无性别信息" *ngIf="!sexFlag" disabled />
</div>
<div class="contentItem">
<span>城市</span>
<input class="form-control" type="text" placeholder="{{readonlyFlag ?'暂无城市信息':'请输入城市'}}"
[(ngModel)]="editBusiness.address" [disabled]="readonlyFlag" (blur)="inputBlur()" />
</div>
<div class="contentItem">
<span>血型</span>
<select name="bloodTypeId" id="bloodTypeId" class="form-control" [disabled]="readonlyFlag"
[(ngModel)]="editBusiness.bloodTypeId" (blur)="inputBlur()">
<option value="">{{readonlyFlag ?'暂无血型信息':'请选择血型'}}</option>
<option *ngFor="let businessBloodItem of businessBloodList" [value]="businessBloodItem.id">
{{businessBloodItem.dropOptionName}}</option>
</select>
<!--<input class="form-control" type="text" placeholder="{{readonlyFlag ?'暂无血型信息':'请选择血型'}}"-->
<!--[disabled]="readonlyFlag" [(ngModel)]="editBusiness.bloodTypeId" (blur)="inputBlur()" />-->
</div>
<div class="contentItem">
<span>星座</span>
<select name="businessZodiacId" id="businessZodiacId" class="form-control" [disabled]="readonlyFlag"
[(ngModel)]="editBusiness.zodiacTypeId" (blur)="inputBlur()">
<option value="">{{readonlyFlag ?'暂无星座信息':'请选择星座'}}</option>
<option *ngFor="let businessZodiacItem of businessZodiacList" [value]="businessZodiacItem.id">
{{businessZodiacItem.dropOptionName}}</option>
</select>
<!--<input class="form-control" type="text" placeholder="{{readonlyFlag ?'暂无星座信息':'请选择星座'}}"-->
<!--[disabled]="readonlyFlag" [(ngModel)]="editBusiness.zodiacTypeId" (blur)="inputBlur()" />-->
</div>
</div>
<div class="wrapper_item">
<div class="contentItem">
<span>手机</span>
<a *ngIf="opportunityId!=0" style="text-decoration:none;color: #333;margin-right: 12px;"
href="tel:{{editBusiness.mobileNo}}">
<i class="iconfont icon-dianhua" style="color: #e10d0d;"></i>
{{editBusiness.mobileNo}}</a>
<input class="form-control" type="text" [(ngModel)]="editBusiness.mobileNo" *ngIf="opportunityId==0"
placeholder="请输入手机号" maxlength="11" (blur)="inputBlur()" />
</div>
<div class="contentItem">
<span>微信</span>
<input class="form-control" type="text" placeholder="{{readonlyFlag ?'暂无微信':'请输入微信'}}"
[(ngModel)]="editBusiness.weChat" [disabled]="readonlyFlag" (blur)="inputBlur()" />
<ul class="tab">
<li *ngFor="let titleItem of titleList" (click)="selectTab(titleItem.id)"
[ngClass]="{selected:selectedId===titleItem.id}">
<div style="position: relative;">
<h3>{{titleItem.name}}
</h3>
</div>
</li>
</ul>
<div class="content" *ngIf="selectedId===1">
<i class="iconfont icon-bianji" *ngIf="readonlyFlag" (click)="editInfo()"></i>
<i class="iconfont icon-save" *ngIf="!readonlyFlag" (click)="saveInfo()"></i>
<div class="contentDetail">
<div class="wrapper_item">
<div class="contentItem">
<span>姓名</span>
<input class="form-control" type="text" placeholder="{{readonlyFlag ?'暂无姓名':'请输入姓名'}}"
[(ngModel)]="editBusiness.name" [disabled]="readonlyFlag" (blur)="inputBlur()" />
</div>
<div class="contentItem">
<span>出生日期</span>
<div>
<ListItem DatePicker [mode]="'date'" [disabled]="readonlyFlag" [minDate]="minDate"
[maxDate]="today" [(ngModel)]="editBusiness.birthDate" (onOk)="onOk($event)">
<Brief *ngIf="!readonlyFlag">
{{editBusiness.birthDate ? (editBusiness.birthDate | date:'yyyy-MM-dd') : '请输入出生日期'}}
</Brief>
<Brief *ngIf="readonlyFlag">
{{editBusiness.birthDate ? (editBusiness.birthDate | date:'yyyy-MM-dd') : '暂无出生日期信息'}}
</Brief>
</ListItem>
</div>
</div>
<div class="contentItem">
<span>年龄</span>
<input class="form-control" type="text" placeholder="{{readonlyFlag ?'暂无年龄信息':'请输入年龄'}}"
[(ngModel)]="editBusiness.age" [disabled]="readonlyFlag || editBusiness.birthDate"
(blur)="inputBlur()" />
</div>
<div class="contentItem">
<span>性别</span>
<div class="sexWrapper">
<button class="form-control sex"
[ngClass]="{'sexBtn':editBusiness?.gender=='1' && maleFlag && femaleFlag}"
(click)="selectedGender('1')" [disabled]="readonlyFlag" *ngIf="sexFlag && maleFlag">
</button>
<button class="form-control sex"
[ngClass]="{'sexBtn':editBusiness?.gender=='2' && maleFlag && femaleFlag}"
(click)="selectedGender('2')" [disabled]="readonlyFlag" *ngIf="sexFlag && femaleFlag">
</button>
</div>
<input class="form-control" type="text" placeholder="暂无性别信息" *ngIf="!sexFlag" disabled />
</div>
<div class="contentItem">
<span>城市</span>
<input class="form-control" type="text" placeholder="{{readonlyFlag ?'暂无城市信息':'请输入城市'}}"
[(ngModel)]="editBusiness.address" [disabled]="readonlyFlag" (blur)="inputBlur()" />
</div>
<div class="contentItem">
<span>血型</span>
<select name="bloodTypeId" id="bloodTypeId" class="form-control" [disabled]="readonlyFlag"
[(ngModel)]="editBusiness.bloodTypeId" (blur)="inputBlur()">
<option value="">{{readonlyFlag ?'暂无血型信息':'请选择血型'}}</option>
<option *ngFor="let businessBloodItem of businessBloodList" [value]="businessBloodItem.id">
{{businessBloodItem.dropOptionName}}
</option>
</select>
<!--<input class="form-control" type="text" placeholder="{{readonlyFlag ?'暂无血型信息':'请选择血型'}}"-->
<!--[disabled]="readonlyFlag" [(ngModel)]="editBusiness.bloodTypeId" (blur)="inputBlur()" />-->
</div>
<div class="contentItem">
<span>星座</span>
<select name="businessZodiacId" id="businessZodiacId" class="form-control" [disabled]="readonlyFlag"
[(ngModel)]="editBusiness.zodiacTypeId" (blur)="inputBlur()">
<option value="">{{readonlyFlag ?'暂无星座信息':'请选择星座'}}</option>
<option *ngFor="let businessZodiacItem of businessZodiacList" [value]="businessZodiacItem.id">
{{businessZodiacItem.dropOptionName}}
</option>
</select>
<!--<input class="form-control" type="text" placeholder="{{readonlyFlag ?'暂无星座信息':'请选择星座'}}"-->
<!--[disabled]="readonlyFlag" [(ngModel)]="editBusiness.zodiacTypeId" (blur)="inputBlur()" />-->
</div>
</div>
<div class="wrapper_item">
<div class="contentItem">
<span>手机</span>
<a *ngIf="opportunityId!=0" style="text-decoration:none;color: #333;margin-right: 12px;"
href="tel:{{editBusiness.mobileNo}}">
<i class="iconfont icon-dianhua" style="color: #e10d0d;"></i>
{{editBusiness.mobileNo}}</a>
<input class="form-control" type="text" [(ngModel)]="editBusiness.mobileNo" *ngIf="opportunityId==0"
placeholder="请输入手机号" maxlength="11" (blur)="inputBlur()" />
</div>
<div class="contentItem">
<span>微信</span>
<input class="form-control" type="text" placeholder="{{readonlyFlag ?'暂无微信':'请输入微信'}}"
[(ngModel)]="editBusiness.weChat" [disabled]="readonlyFlag" (blur)="inputBlur()" />
</div>
<div class="contentItem">
<span>其他联系</span>
<input class="form-control" type="text" placeholder="{{readonlyFlag ?'暂无其他联系方式':'请输入其他联系方式'}}"
[(ngModel)]="editBusiness.otherContacts" [disabled]="readonlyFlag" (blur)="inputBlur()" />
</div>
</div>
<div class="contentItem">
<span>其他联系</span>
<input class="form-control" type="text" placeholder="{{readonlyFlag ?'暂无其他联系方式':'请输入其他联系方式'}}"
[(ngModel)]="editBusiness.otherContacts" [disabled]="readonlyFlag" (blur)="inputBlur()" />
</div>
</div>
<div class="wrapper_item">
<div class="contentItem">
<span>预计FYP</span>
<input class="form-control" type="number" placeholder="{{readonlyFlag ?'暂无预计FYP':'请输入预计FYP'}}"
[disabled]="readonlyFlag" [(ngModel)]="editBusiness.fyp" (blur)="inputBlur()" />
</div>
<div class="contentItem">
<span>预计FYC</span>
<input class="form-control" type="number" placeholder="{{readonlyFlag ?'暂无预计FYC':'请输入预计FYC'}}"
[disabled]="readonlyFlag" [(ngModel)]="editBusiness.fyc" (blur)="inputBlur()" />
</div>
<div class="contentItem">
<span>预计成交件数</span>
<input class="form-control" type="number" placeholder="{{readonlyFlag ?'暂无预计件数':'请输入预计件数'}}"
[disabled]="readonlyFlag" [(ngModel)]="editBusiness.pieces" (blur)="inputBlur()" />
</div>
<div class="contentItem">
<span>预计成交时间</span>
<input class="form-control" type="date" placeholder="{{readonlyFlag ?'暂无预计成交时间':'请输入预计成交时间'}}"
[disabled]="readonlyFlag" [(ngModel)]="editBusiness.timeToClose" (blur)="inputBlur()" />
</div>
</div>
<div class="wrapper_item">
<div class="contentItem">
<span>商机来源</span>
<select *ngIf="opportunityId==0" name="businessSourceId" id="businessSourceId" class="form-control"
[(ngModel)]="editBusiness.sourceFrom" [disabled]="readonlyFlag" (blur)="inputBlur()">
<option value="">{{readonlyFlag ?'暂无商机来源':'请选择商机来源'}}</option>
<option *ngFor="let businessSourceItem of businessSourceList" [value]="businessSourceItem.id">
{{businessSourceItem.dropOptionName}}</option>
</select>
<input *ngIf="opportunityId!=0" class="form-control" type="text" [(ngModel)]="editBusiness.sourceChannel"
disabled placeholder="{{editBusiness.sourceChannel ?editBusiness.sourceChannel:'暂无商机来源'}}" />
</div>
<div class="contentItem">
<span>商机时间</span>
<input class="form-control" type="text" placeholder="商机时间" [(ngModel)]="editBusiness.opportunityDate"
disabled />
</div>
<div class="contentItem">
<span>商机状态</span>
<div style="padding: 6px 12px;color: #e10d0d;font-weight: bold;">
{{editBusiness.mdDropOptionName?editBusiness.mdDropOptionName:'待跟进'}}</div>
</div>
</div>
<div class="wrapper_item" style="border: none;margin-bottom: 0;">
<div class="contentItem">
<span>派遣专家</span>
<span *ngIf="editBusiness?.expertType == 0"
style="padding: 6px 10px;border: 1px #e10d0d solid;border-radius: 20px;margin-right: 10px;"
(click)="openPopInfo('申请已收到,会在1个工作日派遣专家')">申请专家支持</span>
<span *ngIf="editBusiness?.expertType == 1" style="padding:6px 20px;">派遣中...</span>
<span *ngIf="editBusiness?.expertType == 2"
style="padding:6px 20px;">{{editBusiness?.expertPractitionerName}}</span>
</div>
</div>
<!-- <div class="contentItem">
</div>
<div class="wrapper_item">
<div class="contentItem">
<span>预计FYP</span>
<input class="form-control" type="number" placeholder="{{readonlyFlag ?'暂无预计FYP':'请输入预计FYP'}}"
[disabled]="readonlyFlag" [(ngModel)]="editBusiness.fyp" (blur)="inputBlur()" />
</div>
<div class="contentItem">
<span>预计FYC</span>
<input class="form-control" type="number" placeholder="{{readonlyFlag ?'暂无预计FYC':'请输入预计FYC'}}"
[disabled]="readonlyFlag" [(ngModel)]="editBusiness.fyc" (blur)="inputBlur()" />
</div>
<div class="contentItem">
<span>预计成交件数</span>
<input class="form-control" type="number" placeholder="{{readonlyFlag ?'暂无预计件数':'请输入预计件数'}}"
[disabled]="readonlyFlag" [(ngModel)]="editBusiness.pieces" (blur)="inputBlur()" />
</div>
<div class="contentItem">
<span>预计成交时间</span>
<input class="form-control" type="date" placeholder="{{readonlyFlag ?'暂无预计成交时间':'请输入预计成交时间'}}"
[disabled]="readonlyFlag" [(ngModel)]="editBusiness.timeToClose" (blur)="inputBlur()" />
</div>
</div>
<div class="wrapper_item">
<div class="contentItem">
<span>商机来源</span>
<select *ngIf="opportunityId==0" name="businessSourceId" id="businessSourceId" class="form-control"
[(ngModel)]="editBusiness.sourceFrom" [disabled]="readonlyFlag" (blur)="inputBlur()">
<option value="">{{readonlyFlag ?'暂无商机来源':'请选择商机来源'}}</option>
<option *ngFor="let businessSourceItem of businessSourceList" [value]="businessSourceItem.id">
{{businessSourceItem.dropOptionName}}
</option>
</select>
<input *ngIf="opportunityId!=0" class="form-control" type="text"
[(ngModel)]="editBusiness.sourceChannel" disabled
placeholder="{{editBusiness.sourceChannel ?editBusiness.sourceChannel:'暂无商机来源'}}" />
</div>
<div class="contentItem">
<span>商机时间</span>
<input class="form-control" type="text" placeholder="商机时间"
[(ngModel)]="editBusiness.opportunityDate" disabled />
</div>
<div class="contentItem">
<span>商机状态</span>
<div style="padding: 6px 12px;color: #e10d0d;font-weight: bold;">
{{editBusiness.mdDropOptionName?editBusiness.mdDropOptionName:'待跟进'}}
</div>
</div>
</div>
<div class="wrapper_item" style="border: none;margin-bottom: 0;">
<div class="contentItem">
<span>派遣专家</span>
<span *ngIf="editBusiness?.expertType == 0"
style="padding: 6px 10px;border: 1px #e10d0d solid;border-radius: 20px;margin-right: 10px;"
(click)="openPopInfo('申请已收到,会在1个工作日派遣专家')">申请专家支持</span>
<span *ngIf="editBusiness?.expertType == 1" style="padding:6px 20px;">派遣中...</span>
<span *ngIf="editBusiness?.expertType == 2"
style="padding:6px 20px;">{{editBusiness?.expertPractitionerName}}</span>
</div>
</div>
<!-- <div class="contentItem">
<span>标签</span>
<input class="form-control" type="text" placeholder="标签" [(ngModel)]="editBusiness.name"
[disabled]="readonlyFlag" />
</div> -->
<div class="wrapper_item" style="border: none;margin-bottom: 0;">
<div class="contentItem">
<span>备注</span>
<div style="padding: 6px 15px;">
<input class="form-control" style="padding: 0;" type="text" [disabled]="readonlyFlag"
[(ngModel)]="editBusiness.remark" placeholder="备注信息" (blur)="inputBlur()" />
</div>
</div>
</div>
<!-- 如果是新增商机,不需要打标签-->
<div class="tagWrapper" *ngIf="opportunityId != 0">
<div style="width: 100%;height: 34px;line-height: 34px;">标签</div>
<!-- <div class="tagContent" *ngFor="let tagItem of tagList" (click)="selectTag(tagItem)"
<div class="wrapper_item" style="border: none;margin-bottom: 0;">
<div class="contentItem">
<span>备注</span>
<div style="padding: 6px 15px;">
<input class="form-control" style="padding: 0;" type="text" [disabled]="readonlyFlag"
[(ngModel)]="editBusiness.remark" placeholder="备注信息" (blur)="inputBlur()" />
</div>
</div>
</div>
<!-- 如果是新增商机,不需要打标签-->
<div class="tagWrapper" *ngIf="opportunityId != 0">
<div style="width: 100%;height: 34px;line-height: 34px;">标签</div>
<!-- <div class="tagContent" *ngFor="let tagItem of tagList" (click)="selectTag(tagItem)"
[ngClass]="{selected:tagItem.selected}">
{{tagItem.tagName}}
</div> -->
<div class="tagContent selected" *ngFor="let tagItem of opportunityCustomerTags">
{{tagItem.tagName}}
</div>
</div>
</div>
</div>
<!-- 咨询问卷 -->
<div class="content" *ngIf="selectedId===2 && isSfpShow == false">
<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>
<!-- SFP咨询问卷 -->
<div class="content" *ngIf="selectedId===2 && isSfpShow == true">
<iframe src="http://localhost:4200/salesDetail" style="height: 100%; width: 100%;flex-grow: 1;">
</iframe>
</div>
<div class="tagContent selected" *ngFor="let tagItem of opportunityCustomerTags">
{{tagItem.tagName}}
</div>
</div>
</div>
</div>
<!-- 咨询问卷 -->
<div class="content" *ngIf="selectedId===2 && isSfpShow == false">
<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===5">
<ydlife-e-notice [agreeFlag]="false"></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">
<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>
<input type="text" class="form-control" [(ngModel)]="opportunityRecordItem.salesNotice"
[disabled]="remarkId!=opportunityRecordItem.id" (blur)="inputBlur()" />
</span>
<i *ngIf="remarkId!=opportunityRecordItem.id" class="iconfont icon-bianji"
(click)="editRemark(opportunityRecordItem.id)"></i>
<i *ngIf="remarkId==opportunityRecordItem.id" class="iconfont icon-save"
(click)="ownOpportunityRecordSave(opportunityRecordItem)"></i>
</div>
</li>
<!-- <li>
<!-- SFP咨询问卷 -->
<iframe class="content" *ngIf="selectedId===2 && isSfpShow == true" [src]="transform(iframeUrl)"
style="width: 100%;flex-grow: 1;border: medium none;">
</iframe>
<!-- 客户告知书 -->
<div class="content" *ngIf="selectedId===5">
<ydlife-e-notice [agreeFlag]="false"></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">
<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>
<input type="text" class="form-control" [(ngModel)]="opportunityRecordItem.salesNotice"
[disabled]="remarkId!=opportunityRecordItem.id" (blur)="inputBlur()" />
</span>
<i *ngIf="remarkId!=opportunityRecordItem.id" class="iconfont icon-bianji"
(click)="editRemark(opportunityRecordItem.id)"></i>
<i *ngIf="remarkId==opportunityRecordItem.id" class="iconfont icon-save"
(click)="ownOpportunityRecordSave(opportunityRecordItem)"></i>
</div>
</li>
<!-- <li>
<div class="salesNotice">{{(editBusiness.opportunityDate).substr(0,10)}}</div>
<div style="display: flex;justify-content: space-between;">
<div>商机状态</div>
<div>待跟进</div>
</div>
</li> -->
</ul>
<div class="add" *ngIf="status==0" (click)="showToast()">
<!-- <i class="iconfont icon-jia" (click)="ownOpportunityRecordSave()"></i> -->
<i class="iconfont icon-jiahao"></i>
</div>
</ul>
<div class="add" *ngIf="status==0" (click)="showToast()">
<!-- <i class="iconfont icon-jia" (click)="ownOpportunityRecordSave()"></i> -->
<i class="iconfont icon-jiahao"></i>
</div>
</div>
<div class="toastWrapper toast" *ngIf="isShow" (click)="closeToast()">
</div>
<div class="toastWrapper toast" *ngIf="isShow" (click)="closeToast()">
</div>
<!--编辑框-->
<div class="editContainer" *ngIf="isShow">
<div>
<div>跟进状态</div>
<div style="position:relative">
<select name="businessStatus" (onChange)="inputBlur()" id="businessStatus" class="form-control"
[(ngModel)]="opportunityRecordId">
<option value="null">请选择</option>
<option *ngFor="let businessStatusItem of businessStatusList" value="{{businessStatusItem.id}}">
{{businessStatusItem.dropOptionName}}
</option>
</select>
<i class="iconfont icon-xiangxia" style="position: absolute;right: 50px;top: 5px;"></i>
</div>
</div>
<div>
<div>备注</div>
<div><input type="text" id="remark" class="form-control" placeholder="输入备注信息" [(ngModel)]="salesNotice"
(blur)="inputBlur()"></div>
</div>
<div>
<div>跟进日期</div>
<div><input style="-webkit-appearance: none;" id="time" class="form-control" type="date"
[(ngModel)]="opportunityRecordNoticeDate" (blur)="inputBlur()"></div>
</div>
<div *ngIf="isSfpShow">
<div>日程开始时间</div>
<div><input type="text" id="remark" class="form-control" placeholder="输入开始时间" [(ngModel)]="taskTimeFrom" (blur)="inputBlur()"></div>
<div>日程结束时间</div>
<div><input type="text" id="remark" class="form-control" placeholder="输入结束时间" [(ngModel)]="taskTimeEnd" (blur)="inputBlur()"></div>
</div>
</div>
<!--编辑框-->
<div class="editContainer" *ngIf="isShow">
<div>
<div>跟进状态</div>
<div style="position:relative">
<select name="businessStatus" (onChange)="inputBlur()" id="businessStatus" class="form-control"
[(ngModel)]="opportunityRecordId">
<option value="null">请选择</option>
<option *ngFor="let businessStatusItem of businessStatusList" value="{{businessStatusItem.id}}">
{{businessStatusItem.dropOptionName}}
</option>
</select>
<i class="iconfont icon-xiangxia" style="position: absolute;right: 50px;top: 5px;"></i>
</div>
</div>
<div>
<div>备注</div>
<div><input type="text" id="remark" class="form-control" placeholder="输入备注信息" [(ngModel)]="salesNotice"
(blur)="inputBlur()"></div>
</div>
<div>
<div>跟进日期</div>
<div><input style="-webkit-appearance: none;" id="time" class="form-control" type="date"
[(ngModel)]="opportunityRecordNoticeDate" (blur)="inputBlur()"></div>
</div>
<ul class="footer">
<li (click)="ownOpportunityRecordSave()">确定</li>
<li (click)="closeToast()">取消</li>
</ul>
</div>
<div *ngIf="isSfpShow" style="display:flex;font-size: 15px;">
<!-- <div>日程开始/结束时间</div>
<div class="timeContent">
<div class="picker_list">
<PickerView [data]="seasons" [cols]='3' [cascade]="false" [ngModel]="taskTimeFrom" [indicatorStyle]="{'background':'#f6f6f6','border-radius':'50px','z-index':'0'}" (ngModelChange)="onChange($event,1)"></PickerView>
</div>
<div style="color: #d9dadc;width: 10%;text-align: center;">到</div>
<div class="picker_list">
<PickerView [data]="seasons" [cascade]="false" [cols]='3' [ngModel]="taskTimeEnd" [indicatorStyle]="{'background':'#f6f6f6','border-radius':'50px','z-index':'0'}" (ngModelChange)="onChange($event,2)"></PickerView>
</div>
</div> -->
<div>添加日程时间</div>
<div style="display:flex;">
<div style="width:50%"><input type="Time" id="remark" class="form-control" placeholder="输入开始时间" [(ngModel)]="taskTimeFrom"
(blur)="inputBlur()"></div>
<div style="width:50%"><input type="Time" id="remark" class="form-control" placeholder="输入结束时间" [(ngModel)]="taskTimeEnd"
(blur)="inputBlur()"></div>
</div>
</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>
<ul class="footer">
<li (click)="ownOpportunityRecordSave()">确定</li>
<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>
<ydlife-alert *ngIf="isNeedAlert" [dialogInfo]="dialogInfo" (popInfo)="getPopInfo()"></ydlife-alert>
\ No newline at end of file
.wrapper {
padding-bottom: 40px;
font-size: 16px;
background-color: #fff;
select {
-webkit-appearance: none;
border: none;
box-shadow: none;
}
.tab {
display: flex;
list-style: none;
margin: 10px 0px;
padding-left: 1%;
li {
margin-right: 10px;
line-height: 30px;
height: 30px;
flex: 1;
text-align: center;
border: 1px #a9aabb solid;
border-radius: 20px;
h3 {
font-weight: normal;
font-size: 15px;
}
}
li.selected {
// background-color: #ff5a32;
// color: #fff;
border: 1px #e10d0d solid;
}
}
.content {
padding: 10px 5px;
position: relative;
> .iconfont {
width: 55px;
height: 55px;
line-height: 55px;
border-radius: 50%;
position: fixed;
left: 42%;
font-size: 24px;
color: #fff;
background: #0767bf;
text-align: center;
bottom: 76px;
}
.contentDetail {
margin-top: 15px;
.wrapper_item {
border-bottom: 1px #ddd solid;
margin-bottom: 10px;
.contentItem {
display: flex;
justify-content: space-between;
align-items: center;
// border-bottom: 1px #ddd solid;
margin: 0 8px 5px 8px;
> span:first-child {
white-space: nowrap;
}
input.form-control {
// width: 60%;
// margin: 0 5px;
background: none;
outline: none;
border: none;
text-align: right;
box-shadow: none;
display: flex;
flex-wrap: wrap;
font-size: 16px;
}
input::-webkit-input-placeholder{
font-size: 16px;
// color: #0767bf;
}
.sexWrapper {
display: flex;
width: 60%;
justify-content: flex-end;
.form-control.sex {
width: 20%;
margin-left: 5px;
border: none;
box-shadow: none;
font-size: 16px;
}
.form-control.sex.sexBtn {
border: 1px #0767bf solid;
}
.form-control[disabled] {
background-color: transparent;
opacity: 1;
}
}
select.form-control {
direction: rtl;
font-size: 16px;
}
select.form-control[disabled] {
background-color: transparent;
// color: #0767bf;
}
}
.contentItem:last-child {
border-bottom: none;
}
}
}
.tagWrapper {
display: flex;
flex-wrap: wrap;
padding-left: 8px;
div.tagContent {
margin: 10px 3px 0 3px;
height: 28px;
line-height: 28px;
text-align: center;
// background-color: #e8e8e8;
border-radius: 12px;
font-size: 13px;
padding: 0 15px;
}
div.selected {
border: 1px #0767bf solid;
}
}
.add {
position: absolute;
.iconfont {
width: 55px;
height: 55px;
line-height: 55px;
border-radius: 50%;
position: fixed;
right:42%;
font-size: 24px;
color: #fff;
background: #0767bf;
text-align: center;
bottom: 75px;
font-size: 28px;
// color: #ff5933;
font-weight: bold;
}
}
.answerContent {
border-bottom: 1px #ddd solid;
margin-bottom: 5px;
padding: 5px 0;
.questionTitle {
font-weight: 700;
font-size: 13px;
}
.questionContent {
font-size: 16px;
}
}
.answerContent:last-child {
border-bottom: 0;
}
.record {
display: flex;
list-style: none;
justify-content: space-between;
li {
width: 30%;
text-align: center;
height: 30px;
line-height: 30px;
}
}
.viewReportBtn{
position: fixed;
bottom: 70px;
left: 0;
width: 100%;
height: 44px;
text-align: center;
background: #2179AD;
color: #fff;
line-height: 44px;
}
.send{
position: fixed;
bottom: 80px;
width: 100%;
div{
margin: 0 40px;
height: 40px;
line-height: 40px;
text-align: center;
color: #fff;
font-size: 18px;
background: #2179AD;
border-radius: 20px;
min-width: 240px;
max-width: 560px;
}
}
}
.editContainer {
padding: 10px;
position: fixed;
bottom: 0;
width: 100%;
height: 45%;
background-color: #fff;
z-index: 20;
-webkit-animation: .5s both slowUp;
animation: .5s both slowUp;
min-width: 320px;
max-width: 640px;
margin: 0 auto;
> div {
height: 50px;
border-bottom: 1px solid #dbdbdb;
display: flex;
align-items: center;
justify-content: space-between;
> div:first-child {
width: 100px;
font-size: 15px;
}
> div:last-child {
flex: 1;
}
.form-control {
border: none;
box-shadow: none;
}
}
> div:last-child {
border: none;
}
ul.footer {
display: flex;
list-style: none;
justify-content: center;
margin-top: 15%;
li {
width: 30%;
height: 35px;
line-height: 35px;
text-align: center;
background: #e10d0d;
color: #fff;
margin: 0 10px;
border-radius: 10px;
}
}
}
.recordLists {
li {
border-bottom: 1px solid #f0f0f0;
padding: 5px 10px;
background: rgb(251, 251, 251);
}
li:last-child {
border: none;
}
.opportunityRecordItem {
font-size: 15px;
}
.salesNotice {
font-size: 14px;
color: #8a8a8a;
line-height: 1.1;
margin-bottom: 5px;
display: flex;
justify-content: space-between;
align-items: center;
span{
width: 85%;
.form-control[disabled], .form-control[readonly], fieldset[disabled] .form-control {
background-color: #eee;
opacity: .5;
border: none;
outline: none;
box-shadow: none;
padding-left: 0;
}
}
.iconfont{
font-size: 18px;
}
}
.updatedAt {
// font-size: 12px;
// color: #8a8a8a;
// text-align: right;
}
}
.toast {
position: fixed;
left: 0;
right: 0;
min-width: 320px;
max-width: 640px;
width: 100%;
margin: 0 auto;
z-index: 1;
}
.toastWrapper {
height: 100%;
background-color: rgba(0, 0, 0, .5);
top: 0;
}
.am-list-item.am-input-item{
padding-left: 0;
}
}
font-size: 16px;
background-color: #fff;
min-height: 90vh;
display: flex;
flex-direction: column;
select {
-webkit-appearance: none;
border: none;
box-shadow: none;
}
.tab {
display: flex;
list-style: none;
margin: 10px 0px;
padding-left: 1%;
li {
margin-right: 10px;
line-height: 30px;
height: 30px;
flex: 1;
text-align: center;
border: 1px #a9aabb solid;
border-radius: 20px;
h3 {
font-weight: normal;
font-size: 15px;
}
}
li.selected {
// background-color: #ff5a32;
// color: #fff;
border: 1px #e10d0d solid;
}
}
.content {
position: relative;
>.iconfont {
width: 55px;
height: 55px;
line-height: 55px;
border-radius: 50%;
position: fixed;
left: 42%;
font-size: 24px;
color: #fff;
background: #0767bf;
text-align: center;
bottom: 76px;
}
.contentDetail {
margin-top: 15px;
.wrapper_item {
border-bottom: 1px #ddd solid;
margin-bottom: 10px;
.contentItem {
display: flex;
justify-content: space-between;
align-items: center;
// border-bottom: 1px #ddd solid;
margin: 0 8px 5px 8px;
>span:first-child {
white-space: nowrap;
}
input.form-control {
// width: 60%;
// margin: 0 5px;
background: none;
outline: none;
border: none;
text-align: right;
box-shadow: none;
display: flex;
flex-wrap: wrap;
font-size: 16px;
}
input::-webkit-input-placeholder {
font-size: 16px;
// color: #0767bf;
}
.sexWrapper {
display: flex;
width: 60%;
justify-content: flex-end;
.form-control.sex {
width: 20%;
margin-left: 5px;
border: none;
box-shadow: none;
font-size: 16px;
}
.form-control.sex.sexBtn {
border: 1px #0767bf solid;
}
.form-control[disabled] {
background-color: transparent;
opacity: 1;
}
}
select.form-control {
direction: rtl;
font-size: 16px;
}
select.form-control[disabled] {
background-color: transparent;
// color: #0767bf;
}
}
.contentItem:last-child {
border-bottom: none;
}
}
}
.tagWrapper {
display: flex;
flex-wrap: wrap;
padding-left: 8px;
div.tagContent {
margin: 10px 3px 0 3px;
height: 28px;
line-height: 28px;
text-align: center;
// background-color: #e8e8e8;
border-radius: 12px;
font-size: 13px;
padding: 0 15px;
}
div.selected {
border: 1px #0767bf solid;
}
}
.add {
position: absolute;
.iconfont {
width: 55px;
height: 55px;
line-height: 55px;
border-radius: 50%;
position: fixed;
right: 42%;
font-size: 24px;
color: #fff;
background: #0767bf;
text-align: center;
bottom: 75px;
font-size: 28px;
// color: #ff5933;
font-weight: bold;
}
}
.answerContent {
border-bottom: 1px #ddd solid;
margin-bottom: 5px;
padding: 5px 0;
.questionTitle {
font-weight: 700;
font-size: 13px;
}
.questionContent {
font-size: 16px;
}
}
.answerContent:last-child {
border-bottom: 0;
}
.record {
display: flex;
list-style: none;
justify-content: space-between;
li {
width: 30%;
text-align: center;
height: 30px;
line-height: 30px;
}
}
.viewReportBtn {
position: fixed;
bottom: 70px;
left: 0;
width: 100%;
height: 44px;
text-align: center;
background: #2179AD;
color: #fff;
line-height: 44px;
}
.send {
position: fixed;
bottom: 80px;
width: 100%;
div {
margin: 0 40px;
height: 40px;
line-height: 40px;
text-align: center;
color: #fff;
font-size: 18px;
background: #2179AD;
border-radius: 20px;
min-width: 240px;
max-width: 560px;
}
}
}
.editContainer {
padding: 10px;
position: fixed;
bottom: 0;
width: 100%;
height: 45%;
background-color: #fff;
z-index: 20;
-webkit-animation: .5s both slowUp;
animation: .5s both slowUp;
min-width: 320px;
max-width: 640px;
margin: 0 auto;
>div {
height: 50px;
border-bottom: 1px solid #dbdbdb;
display: flex;
align-items: center;
justify-content: space-between;
>div:first-child {
width: 100px;
font-size: 15px;
}
>div:last-child {
flex: 1;
}
.form-control {
border: none;
box-shadow: none;
}
}
>div:last-child {
border: none;
}
ul.footer {
display: flex;
list-style: none;
justify-content: center;
margin-top: 15%;
li {
width: 30%;
height: 35px;
line-height: 35px;
text-align: center;
background: #e10d0d;
color: #fff;
margin: 0 10px;
border-radius: 10px;
}
}
}
.recordLists {
li {
border-bottom: 1px solid #f0f0f0;
padding: 5px 10px;
background: rgb(251, 251, 251);
}
li:last-child {
border: none;
}
.opportunityRecordItem {
font-size: 15px;
}
.salesNotice {
font-size: 14px;
color: #8a8a8a;
line-height: 1.1;
margin-bottom: 5px;
display: flex;
justify-content: space-between;
align-items: center;
span {
width: 85%;
.form-control[disabled],
.form-control[readonly],
fieldset[disabled] .form-control {
background-color: #eee;
opacity: .5;
border: none;
outline: none;
box-shadow: none;
padding-left: 0;
}
}
.iconfont {
font-size: 18px;
}
}
.updatedAt {
// font-size: 12px;
// color: #8a8a8a;
// text-align: right;
}
}
.toast {
position: fixed;
left: 0;
right: 0;
min-width: 320px;
max-width: 640px;
width: 100%;
margin: 0 auto;
z-index: 1;
}
.toastWrapper {
height: 100%;
background-color: rgba(0, 0, 0, .5);
top: 0;
}
.am-list-item.am-input-item {
padding-left: 0;
}
}
\ No newline at end of file
......@@ -3,704 +3,777 @@ 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';
import { environment } from '../../../environments/environment';
import { DomSanitizer, SafeResourceUrl } from '@angular/platform-browser';
@Component({
selector: 'ydlife-my-business-detail',
templateUrl: './my-business-detail.component.html',
styleUrls: ['./my-business-detail.component.scss']
selector: 'ydlife-my-business-detail',
templateUrl: './my-business-detail.component.html',
styleUrls: ['./my-business-detail.component.scss']
})
export class MyBusinessDetailComponent implements OnInit {
titleList: Array<any>;
selectedId: number;
surveyAnswersList: Array<any>;
readonlyFlag: boolean = true;
orderId: number;
sfpMainId:number;
opportunityId: number;
opportunitySurveyAnswersList: Array<any>;
tagList: Array<any>;
editBusiness: BusinessQuery = new BusinessQuery();
//商机状态
businessStatusList: Array<any>;
//经纪人输入商机来源类型
businessSourceList: Array<any>;
//商机星座类型
businessZodiacList: Array<any>;
//商机血型类型
businessBloodList: Array<any>;
cityFlag: boolean;
provinceList: Array<any>;
provinces: Array<any>;
//返回的标签列表
opportunityCustomerTags: Array<any>;
opportunityRecordInfos: Array<any>;
//是否可以跳转预览方案
isCompletedQuestionnaire: any;
//控制弹框
toastDialog: boolean;
toastInfo: any;
// 增加还是保存
addStatus: boolean;
// 备注信息
salesNotice: string;
// 跟进时间
opportunityRecordNoticeDate: Date;
//跟进开始时间
taskTimeFrom: string;
//跟进结束时间
taskTimeEnd:string;
// 跟进状态
opportunityRecordId: number;
//性别显示
sexFlag: boolean;
//显示女
femaleFlag: boolean;
//显示男
maleFlag: boolean;
isShow: boolean;
isSfpShow: boolean;
//线索id
leadsAssignedId: any;
//控制tab可不可点
clickFlag: boolean;
remarkId: any;
status: any;
isNeedAlert: boolean;
dialogInfo: any;
practitionerId:any;
// 电子告知书弹窗显示
eNoticeState:boolean = false;
deviceType:number;
// 获取经纪人信息
lifeCustomerInfo:any;
today:Date = new Date();
minDate:Date = new Date('1930-01-01')
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: 5, name: '客户告知书' }
]
}
ngOnInit() {
// 获取设备
this.deviceType = this.lifeCommonService.checkDeviceType();
this.orderId = this.activateRoute.snapshot.queryParams['orderId'];
this.sfpMainId = this.activateRoute.snapshot.queryParams['sfpMainId'];
if(this.sfpMainId){
this.isSfpShow = true;
}else{
this.isSfpShow = false;
}
//商机对应的客户id
this.opportunityId = +this.activateRoute.snapshot.paramMap.get('id');
//商机id
this.leadsAssignedId = this.activateRoute.snapshot.queryParams['leadsAssignedId'];
this.opportunityRecordId = null;
this.lifeCustomerInfo = JSON.parse(localStorage.getItem('lifeCustomerInfo'));
this.practitionerId = this.lifeCustomerInfo['practitionerId'];
this.tagQuery();
//商机状态
this.dropOptionsQuery('bizchance_promotion_action');
//经纪人输入商机来源类型
this.dropOptionsQuery('leads_manual_source');
//商机星座类型
this.dropOptionsQuery('leads_manual_zodiac_type');
//商机血型类型
this.dropOptionsQuery('leads_manual_blood_type');
//新增商机
if (Number(this.opportunityId) === 0) {
this.readonlyFlag = false;
this.sexFlag = true;
this.maleFlag = true;
this.femaleFlag = true;
this.clickFlag = false;
let myCustomerInfo = JSON.parse(localStorage.getItem('myCustomerInfo'))
if(myCustomerInfo){
let birthDate,age;
if(myCustomerInfo.birthDate){
birthDate = myCustomerInfo.birthDate.split('-');
age=this.lifeCommonService.ages(birthDate[0],birthDate[1],birthDate[2]).age;
}else{
age = null;
}
this.editBusiness = new BusinessQuery("",age, myCustomerInfo.name, myCustomerInfo.gender=='女'?2:1, myCustomerInfo.mobileNo, "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", null);
}else{
//初始化新增
this.editBusiness = new BusinessQuery("", "", "", 1, "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", null);
}
this.selectTab(1);
} else {
this.clickFlag = true;
this.selectTab(1);
//查询商机
setTimeout(() => {
this.ownOpportunityDetailQuery();
}, 300)
}
}
// 日期选择
onOk(e){
console.log(e)
this.editBusiness.age = this.lifeCommonService.ages(e.getFullYear(),e.getMonth() +1,e.getDate()).age;
}
//改为编辑状态出现男女选项
editInfo() {
this.readonlyFlag = false;
this.sexFlag = true;
this.maleFlag = true;
this.femaleFlag = true;
}
selectTab(id) {
if (this.clickFlag == true) {
this.selectedId = id;
} else {
this.selectedId = 1;
}
}
// 查看报告
viewReport(){
window.location.href = `https://${window.location.host}/customizedPlanList/3?orderId=${this.orderId}&customerId=${this.opportunityId}`
}
ownOpportunityDetailQuery() {
const detailParam = {
opportunityId: this.opportunityId ? Number(this.opportunityId) : null,
orderId: this.orderId ? Number(this.orderId) : null,
practitionerId: this.practitionerId,
sfpMainId:this.sfpMainId ? Number(this.sfpMainId) : null
}
this.myService.ownOpportunityDetailQuery(detailParam).subscribe((res) => {
if (res['success']) {
this.opportunitySurveyAnswersList = res['data']['opportunityConsultationInfo']['opportunitySurveyAnswersList']
this.editBusiness = res['data']['opportunityBasicInformationInfo'];
this.opportunityCustomerTags = res['data']['opportunityBasicInformationInfo']['opportunityCustomerTags']
this.opportunityRecordInfos = res['data']['opportunityRecordSituationInfo']['opportunityRecordInfos'];
this.isCompletedQuestionnaire = res['data']['opportunityConsultationInfo']['isCompletedQuestionnaire'];
this.status = res['data']['opportunityRecordSituationInfo']['status'];
//如果没有性别显示暂无性别
if (!res['data']['opportunityBasicInformationInfo']['gender']) {
this.sexFlag = false;
} else {
this.sexFlag = true;
if (res['data']['opportunityBasicInformationInfo']['gender'] == 1) {
this.maleFlag = true;
this.femaleFlag = false;
} else {
this.femaleFlag = true;
this.maleFlag = false;
}
}
if (!this.editBusiness.bloodTypeId) {
this.editBusiness.bloodTypeId = '';
}
if (!this.editBusiness.zodiacTypeId) {
this.editBusiness.zodiacTypeId = '';
}
if (!this.editBusiness.sourceFrom) {
this.editBusiness.sourceFrom = '';
}
if (this.opportunityCustomerTags.length > 0) {
for (let i = 0; i < this.opportunityCustomerTags.length; i++) {
for (let j = 0; j < this.tagList.length; j++) {
if (this.opportunityCustomerTags[i]['tagId'] == this.tagList[j]['id']) {
this.tagList[j].selected = true;
} else {
this.tagList[j].selected = false;
}
}
}
}
} else {
this.opportunitySurveyAnswersList = [];
}
})
}
tagQuery() {
this.myService.tagQuery({ tagType: 2, isActive: 1 }).subscribe((res) => {
if (res['success']) {
this.tagList = res['data']['tagVOs'];
}
})
}
//选标签
selectTag(tagItem) {
if (this.readonlyFlag) {
return;
}
this.tagList.forEach((item, idx) => {
if (tagItem.id == item.id) {
this.tagList[idx].selected = !tagItem.selected
}
})
this.editBusiness.opportunityCustomerTags = this.tagList.filter((item) => {
return item.selected == true;
})
}
//选男女
selectedGender(e) {
this.editBusiness.gender = e;
}
// 获取下拉框列表
dropOptionsQuery(dropCode) {
this.myService.dropOptionsQuery({ code: dropCode }).subscribe((res) => {
if (res['success']) {
if (dropCode === 'bizchance_promotion_action') {
this.businessStatusList = res['data']['dropMasterInfoList']['0']['dropOptionsInfoList'];
} else if (dropCode === 'leads_manual_source') {
this.businessSourceList = res['data']['dropMasterInfoList']['0']['dropOptionsInfoList'];
} else if (dropCode === 'leads_manual_zodiac_type') {
this.businessZodiacList = res['data']['dropMasterInfoList']['0']['dropOptionsInfoList'];
} else if (dropCode === 'leads_manual_blood_type') {
this.businessBloodList = res['data']['dropMasterInfoList']['0']['dropOptionsInfoList'];
}
}
})
}
saveInfo() {
// 如果是新增商机,不需要打标签
let newTag;
if (Number(this.opportunityId) != 0) {
newTag = this.editBusiness.opportunityCustomerTags.map((item) => {
return {
tagId: item.id ? item.id : item.tagId,
tagName: item.tagName
}
})
}
if (!this.editBusiness.name) {
this.toastDialog = true;
this.toastInfo = {
status: 1,
msg: '姓名不能为空!',
timeout: 3000,
align: 'center'
};
return;
} else {
this.editBusiness.name = this.editBusiness.name.trim();
if (!this.lifeCommonService.nameValid(this.editBusiness.name)) {
this.toastDialog = true;
this.toastInfo = {
status: 1,
msg: '不要乱输姓名哦!',
timeout: 3000,
align: 'center'
};
return;
}
}
if (!this.editBusiness.mobileNo) {
this.toastDialog = true;
this.toastInfo = {
status: 1,
msg: '手机号不能为空!',
timeout: 3000,
align: 'center'
};
return;
} else {
this.editBusiness.mobileNo = this.editBusiness.mobileNo.trim()
if (!this.lifeCommonService.mobileNoValid(this.editBusiness.mobileNo)) {
this.toastDialog = true;
this.toastInfo = {
status: 1,
msg: '输入手机号码错误',
timeout: 3000,
align: 'center'
};
return;
}
}
const OVERZERO_REG = /^[0-9]*[1-9][0-9]*$/;
if (this.editBusiness.age) {
if (OVERZERO_REG.test(this.editBusiness.age)) {
if (parseInt(this.editBusiness.age) > 100) {
this.toastDialog = true;
this.toastInfo = {
status: 1,
msg: '年龄不能大于三位数!',
timeout: 3000,
align: 'center'
};
return;
}
} else {
this.toastDialog = true;
this.toastInfo = {
status: 1,
msg: '年龄只能输入正整数!',
timeout: 3000,
align: 'center'
};
return;
}
}
if (this.editBusiness.fyp) {
const fypArr = this.editBusiness.fyp.toString().split('.');
if (fypArr.length - 1 == 1) {
if (fypArr[0].length > 10) {
this.toastDialog = true;
this.toastInfo = {
status: 1,
msg: '预计fyp只能输入最多10位整数!',
timeout: 3000,
align: 'center'
};
return;
}
if (fypArr[1].length > 3) {
this.toastDialog = true;
this.toastInfo = {
status: 1,
msg: '预计fyp只能输入最多2位小数!',
timeout: 3000,
align: 'center'
};
return;
}
} else if (fypArr.length - 1 > 1) {
this.toastDialog = true;
this.toastInfo = {
status: 1,
msg: 'fyp不能输入多个小数点!',
timeout: 3000,
align: 'center'
};
return;
}
}
if (this.editBusiness.fyc) {
const fycArr = this.editBusiness.fyc.toString().split('.');
if (fycArr.length - 1 == 1) {
if (fycArr[0].length > 10) {
this.toastDialog = true;
this.toastInfo = {
status: 1,
msg: '预计fyc只能输入最多10位整数!',
timeout: 3000,
align: 'center'
};
return;
}
if (fycArr[1].length > 3) {
this.toastDialog = true;
this.toastInfo = {
status: 1,
msg: '预计fyc只能输入最多2位小数!',
timeout: 3000,
align: 'center'
};
return;
}
} else if (fycArr.length - 1 > 1) {
this.toastDialog = true;
this.toastInfo = {
status: 1,
msg: 'fyc不能输入多个小数点!',
timeout: 3000,
align: 'center'
};
return;
}
}
if (this.editBusiness.pieces) {
if (!OVERZERO_REG.test(this.editBusiness.pieces)) {
this.toastDialog = true;
this.toastInfo = {
status: 1,
msg: '预计件数只能输入正整数!',
timeout: 3000,
align: 'center'
};
return;
}
}
this.editBusiness = {
...this.editBusiness,
leadsAssignedId: this.leadsAssignedId ? Number(this.leadsAssignedId) : null,
opportunityId: this.opportunityId ? Number(this.opportunityId) : null,
opportunityCustomerTags: newTag ? newTag : [],
assignedPractitionerId: this.practitionerId,
fyp: this.editBusiness.fyp ? Number(this.editBusiness.fyp) : null,
fyc: this.editBusiness.fyc ? Number(this.editBusiness.fyc) : null,
sourceFrom: this.editBusiness.sourceFrom ? Number(this.editBusiness.sourceFrom) : null,
birthDate:this.editBusiness.birthDate ? this.lifeCommonService.dateFormat(this.editBusiness.birthDate,'yyyy-MM-dd') : null
}
this.myService.ownOpportunityBasicInformationSave(this.editBusiness).subscribe((res) => {
if (res['success']) {
this.toastDialog = true;
this.toastInfo = {
status: 1,
msg: Number(this.opportunityId) == 0 ? '新增成功!' : '修改成功!',
timeout: 3000,
align: 'center'
};
this.readonlyFlag = true;
if (this.editBusiness.gender) {
this.sexFlag = true;
if (this.editBusiness.gender == '1') {
this.maleFlag = true;
this.femaleFlag = false;
} else {
this.femaleFlag = true;
this.maleFlag = false;
}
} else {
this.sexFlag = false;
}
//新增的时候要刷新页面
if (Number(this.opportunityId) == 0) {
if (res['data']['opportunityId'] && res['data']['leadsAssignedId']) {
this.opportunityId = res['data']['opportunityId'];
this.leadsAssignedId = res['data']['leadsAssignedId'];
this.router.navigate([`/business/${this.opportunityId}`], { queryParams: { leadsAssignedId: this.leadsAssignedId }, replaceUrl: true });
this.clickFlag = true;
}
}
this.ownOpportunityDetailQuery();
}else{
this.toastDialog = true;
this.toastInfo = {
status: 1,
msg: res['message'],
timeout: 3000,
align: 'center'
};
}
})
}
ownOpportunityRecordSave(opportunityRecordItem?: any) {
let param;
if (!opportunityRecordItem) {
const oppDate = new Date(this.opportunityRecordNoticeDate + ' 23:59:59').getTime();
const createDate = new Date(this.editBusiness.opportunityDate).getTime();
// if (nowDate < oppDate) {
// this.toastDialog = true;
// this.toastInfo = {
// status: 1,
// msg: '跟进时间不能大于当前时间!',
// timeout: 3000,
// align: 'center'
// };
// return;
// }
if (oppDate < createDate) {
this.toastDialog = true;
this.toastInfo = {
status: 1,
msg: '跟进时间不能在商机之前!',
timeout: 3000,
align: 'center'
};
return;
}
if (!this.opportunityRecordId) {
this.toastDialog = true;
this.toastInfo = {
status: 1,
msg: '请选择跟进状态!',
timeout: 3000,
align: 'center'
};
return;
}
if (!this.salesNotice) {
this.toastDialog = true;
this.toastInfo = {
status: 1,
msg: '备注不能为空!',
timeout: 3000,
align: 'center'
};
return;
}
if (!this.opportunityRecordNoticeDate) {
this.toastDialog = true;
this.toastInfo = {
status: 1,
msg: '跟进时间不能为空!',
timeout: 3000,
align: 'center'
};
return;
}
param = {
id: '',
salesNotice: this.salesNotice,
isActive: 1,
practitionerId: this.practitionerId,
opportunityId: this.opportunityId ? Number(this.opportunityId) : null,
mdDropOptionId: this.opportunityRecordId ? Number(this.opportunityRecordId) : null,
noticeDate: this.opportunityRecordNoticeDate,
leadsAssignedId: this.leadsAssignedId ? Number(this.leadsAssignedId) : null,
sfpMainId:this.sfpMainId ? Number(this.sfpMainId) : null,
taskTimeFrom:this.taskTimeFrom,//跟进开始时间
taskTimeEnd:this.taskTimeEnd//跟进结束时间
}
} else {
param = opportunityRecordItem
}
this.myService.ownOpportunityRecordSave(param).subscribe(res => {
if (res['success']) {
this.toastDialog = true;
this.toastInfo = {
status: 1,
msg: opportunityRecordItem ? '修改成功!' : '添加成功!',
timeout: 3000,
align: 'center'
};
this.opportunityRecordId = this.salesNotice = this.opportunityRecordNoticeDate = null;
this.taskTimeFrom = this.taskTimeEnd = null;
this.ownOpportunityDetailQuery();
this.isShow = false;
this.remarkId = '';
} else {
this.toastDialog = true;
this.toastInfo = {
status: 1,
msg: res['message'],
timeout: 3000,
align: 'center'
};
}
})
}
//添加商机弹框
showToast() {
this.isShow = true;
}
closeToast() {
this.isShow = false;
}
inputBlur() {
window.scrollTo(0, 0)
}
editRemark(id) {
this.remarkId = id
}
openPopInfo(message) {
this.myService.applyForExpertSupport({leadsAssignedId:this.leadsAssignedId,practitionerId:this.practitionerId,opportunityId:this.opportunityId}).subscribe((res)=>{
if(res['success']){
this.ownOpportunityDetailQuery();
this.isNeedAlert = true;
this.dialogInfo = {
title: null,
content: { value: message, align: 'center' },
footer: [{ value: '确认离开', routerLink: '', className: 'weui-dialog__btn_primary' }],
};
}else{
this.toastDialog = true;
this.toastInfo = {
status: 1,
msg: res['message'],
timeout: 3000,
align: 'center'
};
}
})
}
// 关闭弹窗
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;
}
}
titleList : Array<any>;
selectedId : number;
surveyAnswersList : Array<any>;
readonlyFlag : boolean = true;
orderId : number;
sfpMainId : number;
opportunityId : number;
opportunitySurveyAnswersList : Array<any>;
tagList : Array<any>;
editBusiness : BusinessQuery = new BusinessQuery();
//商机状态
businessStatusList : Array<any>;
//经纪人输入商机来源类型
businessSourceList : Array<any>;
//商机星座类型
businessZodiacList : Array<any>;
//商机血型类型
businessBloodList : Array<any>;
cityFlag : boolean;
provinceList : Array<any>;
provinces : Array<any>;
//返回的标签列表
opportunityCustomerTags : Array<any>;
opportunityRecordInfos : Array<any>;
//是否可以跳转预览方案
isCompletedQuestionnaire : any;
//控制弹框
toastDialog : boolean;
toastInfo : any;
// 增加还是保存
addStatus : boolean;
// 备注信息
salesNotice : string;
// 跟进时间
opportunityRecordNoticeDate : Date;
//跟进开始时间
taskTimeFrom : string;
//跟进结束时间
taskTimeEnd : string;
// 跟进状态
opportunityRecordId : number;
//性别显示
sexFlag : boolean;
//显示女
femaleFlag : boolean;
//显示男
maleFlag : boolean;
isShow : boolean;
isSfpShow : boolean;
//线索id
leadsAssignedId : any;
//控制tab可不可点
clickFlag : boolean;
remarkId : any;
status : any;
isNeedAlert : boolean;
dialogInfo : any;
practitionerId : any;
// 电子告知书弹窗显示
eNoticeState : boolean = false;
deviceType : number;
// 获取经纪人信息
lifeCustomerInfo : any;
today : Date = new Date();
minDate : Date = new Date('1930-01-01');
iframeUrl : string;
seasons:Array<any>;
constructor(private activateRoute : ActivatedRoute, private myService : MyService,
public lifeCommonService : LifeCommonService, private router : Router, private sanitizer : DomSanitizer,) {
this.titleList = [
{ id: 1, name: '基本信息' },
{ id: 3, name: '商机跟进' },
{ id: 2, name: '咨询问卷' },
// { id: 4, name: '咨询报告' },
{ id: 5, name: '客户告知书' }
];
this.seasons = [
{label: '06:00',value:1},{label: '06:30',value:2},
{label: '07:00',value:3},{label: '07:30',value:4},
{label: '08:00',value:5},{label: '08:30',value:6},
{label: '09:00',value:7},{label: '09:30', value:8},
{label: '10:00',value:9},{label: '10:30',value:10},
{label: '11:00',value:11},{label: '11:30',value:12},
{label: '12:00',value:13},{label: '12:30',value:14},
{label: '13:00',value:15},{label: '13:30',value:16},
{label: '14:00',value:17},{label: '14:30',value:18},
{label: '15:00',value:19},{label: '15:30',value:20},
{label: '16:00',value:21},{label: '16:30',value:22},
{label: '17:00',value:23},{label: '17:30',value:24},
{label: '18:00',value:25},{label: '18:30',value:26},
{label: '19:00',value:27},{label: '19:30',value:28},
{label: '20:00',value:29},{label: '20:30',value:30},
{label: '21:00',value:31},{label: '21:30',value:32},
{label: '22:00',value:33},{label: '22:30',value:34},
{label: '23:00',value:35},{label: '23:30',value:36},
{label: '00:00',value:37}
];
}
transform(url : string) : SafeResourceUrl {
return this.sanitizer.bypassSecurityTrustResourceUrl(url);
}
onChange(result,type) {
if(type===1){
this.taskTimeFrom = result;
}
if(type===2){
this.taskTimeEnd = result;
}
}
ngOnInit() {
// 获取设备
this.deviceType = this.lifeCommonService.checkDeviceType();
this.orderId = this.activateRoute.snapshot.queryParams['orderId'];
this.sfpMainId = this.activateRoute.snapshot.queryParams['sfpMainId'];
if (this.sfpMainId) {
this.isSfpShow = true;
} else {
this.isSfpShow = false;
}
//商机对应的客户id
this.opportunityId = +this.activateRoute.snapshot.paramMap.get('id');
//商机id
this.leadsAssignedId = this.activateRoute.snapshot.queryParams['leadsAssignedId'];
this.opportunityRecordId = null;
this.lifeCustomerInfo = JSON.parse(localStorage.getItem('lifeCustomerInfo'));
this.practitionerId = this.lifeCustomerInfo['practitionerId'];
this.tagQuery();
//商机状态
this.dropOptionsQuery('bizchance_promotion_action');
//经纪人输入商机来源类型
this.dropOptionsQuery('leads_manual_source');
//商机星座类型
this.dropOptionsQuery('leads_manual_zodiac_type');
//商机血型类型
this.dropOptionsQuery('leads_manual_blood_type');
//新增商机
if (Number(this.opportunityId) === 0) {
this.readonlyFlag = false;
this.sexFlag = true;
this.maleFlag = true;
this.femaleFlag = true;
this.clickFlag = false;
let myCustomerInfo = JSON.parse(localStorage.getItem('myCustomerInfo'))
if (myCustomerInfo) {
let birthDate, age;
if (myCustomerInfo.birthDate) {
birthDate = myCustomerInfo.birthDate.split('-');
age = this.lifeCommonService.ages(birthDate[0], birthDate[1], birthDate[2]).age;
} else {
age = null;
}
this.editBusiness = new BusinessQuery("", age, myCustomerInfo.name, myCustomerInfo.gender == '女' ? 2 : 1, myCustomerInfo.mobileNo, "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", null);
} else {
//初始化新增
this.editBusiness = new BusinessQuery("", "", "", 1, "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", null);
}
this.selectTab(1);
} else {
this.clickFlag = true;
this.selectTab(1);
//查询商机
setTimeout(() => {
this.ownOpportunityDetailQuery();
}, 300)
}
}
// 日期选择
onOk(e) {
console.log(e)
this.editBusiness.age = this.lifeCommonService.ages(e.getFullYear(), e.getMonth() + 1, e.getDate()).age;
}
//改为编辑状态出现男女选项
editInfo() {
this.readonlyFlag = false;
this.sexFlag = true;
this.maleFlag = true;
this.femaleFlag = true;
}
selectTab(id) {
if (this.clickFlag == true) {
this.selectedId = id;
} else {
this.selectedId = 1;
}
}
// 查看报告
viewReport() {
window.location.href = `https://${window.location.host}/customizedPlanList/3?orderId=${this.orderId}&customerId=${this.opportunityId}`
}
ownOpportunityDetailQuery() {
const detailParam = {
opportunityId: this.opportunityId ? Number(this.opportunityId) : null,
orderId: this.orderId ? Number(this.orderId) : null,
practitionerId: this.practitionerId,
sfpMainId: this.sfpMainId ? Number(this.sfpMainId) : null
}
this.myService.ownOpportunityDetailQuery(detailParam).subscribe((res) => {
if (res['success']) {
//拼接iframe url
this.iframeUrl = `${environment.SFPPROJECTURL}/SFP/surveyPages/clientSurvey/clientSurveyInfo?sfpMainId=${this.sfpMainId}&userId=${res['data']['opportunityBasicInformationInfo']['sfpUserId']}`
this.opportunitySurveyAnswersList = res['data']['opportunityConsultationInfo']['opportunitySurveyAnswersList']
this.editBusiness = res['data']['opportunityBasicInformationInfo'];
this.opportunityCustomerTags = res['data']['opportunityBasicInformationInfo']['opportunityCustomerTags']
this.opportunityRecordInfos = res['data']['opportunityRecordSituationInfo']['opportunityRecordInfos'];
this.isCompletedQuestionnaire = res['data']['opportunityConsultationInfo']['isCompletedQuestionnaire'];
this.status = res['data']['opportunityRecordSituationInfo']['status'];
//如果没有性别显示暂无性别
if (!res['data']['opportunityBasicInformationInfo']['gender']) {
this.sexFlag = false;
} else {
this.sexFlag = true;
if (res['data']['opportunityBasicInformationInfo']['gender'] == 1) {
this.maleFlag = true;
this.femaleFlag = false;
} else {
this.femaleFlag = true;
this.maleFlag = false;
}
}
if (!this.editBusiness.bloodTypeId) {
this.editBusiness.bloodTypeId = '';
}
if (!this.editBusiness.zodiacTypeId) {
this.editBusiness.zodiacTypeId = '';
}
if (!this.editBusiness.sourceFrom) {
this.editBusiness.sourceFrom = '';
}
if (this.opportunityCustomerTags.length > 0) {
for (let i = 0; i < this.opportunityCustomerTags.length; i++) {
for (let j = 0; j < this.tagList.length; j++) {
if (this.opportunityCustomerTags[i]['tagId'] == this.tagList[j]['id']) {
this.tagList[j].selected = true;
} else {
this.tagList[j].selected = false;
}
}
}
}
} else {
this.opportunitySurveyAnswersList = [];
}
})
}
tagQuery() {
this.myService.tagQuery({ tagType: 2, isActive: 1 }).subscribe((res) => {
if (res['success']) {
this.tagList = res['data']['tagVOs'];
}
})
}
//选标签
selectTag(tagItem) {
if (this.readonlyFlag) {
return;
}
this.tagList.forEach((item, idx) => {
if (tagItem.id == item.id) {
this.tagList[idx].selected = !tagItem.selected
}
})
this.editBusiness.opportunityCustomerTags = this.tagList.filter((item) => {
return item.selected == true;
})
}
//选男女
selectedGender(e) {
this.editBusiness.gender = e;
}
// 获取下拉框列表
dropOptionsQuery(dropCode) {
this.myService.dropOptionsQuery({ code: dropCode }).subscribe((res) => {
if (res['success']) {
if (dropCode === 'bizchance_promotion_action') {
this.businessStatusList = res['data']['dropMasterInfoList']['0']['dropOptionsInfoList'];
} else if (dropCode === 'leads_manual_source') {
this.businessSourceList = res['data']['dropMasterInfoList']['0']['dropOptionsInfoList'];
} else if (dropCode === 'leads_manual_zodiac_type') {
this.businessZodiacList = res['data']['dropMasterInfoList']['0']['dropOptionsInfoList'];
} else if (dropCode === 'leads_manual_blood_type') {
this.businessBloodList = res['data']['dropMasterInfoList']['0']['dropOptionsInfoList'];
}
}
})
}
saveInfo() {
// 如果是新增商机,不需要打标签
let newTag;
if (Number(this.opportunityId) != 0) {
newTag = this.editBusiness.opportunityCustomerTags.map((item) => {
return {
tagId: item.id ? item.id : item.tagId,
tagName: item.tagName
}
})
}
if (!this.editBusiness.name) {
this.toastDialog = true;
this.toastInfo = {
status: 1,
msg: '姓名不能为空!',
timeout: 3000,
align: 'center'
};
return;
} else {
this.editBusiness.name = this.editBusiness.name.trim();
if (!this.lifeCommonService.nameValid(this.editBusiness.name)) {
this.toastDialog = true;
this.toastInfo = {
status: 1,
msg: '不要乱输姓名哦!',
timeout: 3000,
align: 'center'
};
return;
}
}
if (!this.editBusiness.mobileNo) {
this.toastDialog = true;
this.toastInfo = {
status: 1,
msg: '手机号不能为空!',
timeout: 3000,
align: 'center'
};
return;
} else {
this.editBusiness.mobileNo = this.editBusiness.mobileNo.trim()
if (!this.lifeCommonService.mobileNoValid(this.editBusiness.mobileNo)) {
this.toastDialog = true;
this.toastInfo = {
status: 1,
msg: '输入手机号码错误',
timeout: 3000,
align: 'center'
};
return;
}
}
const OVERZERO_REG = /^[0-9]*[1-9][0-9]*$/;
if (this.editBusiness.age) {
if (OVERZERO_REG.test(this.editBusiness.age)) {
if (parseInt(this.editBusiness.age) > 100) {
this.toastDialog = true;
this.toastInfo = {
status: 1,
msg: '年龄不能大于三位数!',
timeout: 3000,
align: 'center'
};
return;
}
} else {
this.toastDialog = true;
this.toastInfo = {
status: 1,
msg: '年龄只能输入正整数!',
timeout: 3000,
align: 'center'
};
return;
}
}
if (this.editBusiness.fyp) {
const fypArr = this.editBusiness.fyp.toString().split('.');
if (fypArr.length - 1 == 1) {
if (fypArr[0].length > 10) {
this.toastDialog = true;
this.toastInfo = {
status: 1,
msg: '预计fyp只能输入最多10位整数!',
timeout: 3000,
align: 'center'
};
return;
}
if (fypArr[1].length > 3) {
this.toastDialog = true;
this.toastInfo = {
status: 1,
msg: '预计fyp只能输入最多2位小数!',
timeout: 3000,
align: 'center'
};
return;
}
} else if (fypArr.length - 1 > 1) {
this.toastDialog = true;
this.toastInfo = {
status: 1,
msg: 'fyp不能输入多个小数点!',
timeout: 3000,
align: 'center'
};
return;
}
}
if (this.editBusiness.fyc) {
const fycArr = this.editBusiness.fyc.toString().split('.');
if (fycArr.length - 1 == 1) {
if (fycArr[0].length > 10) {
this.toastDialog = true;
this.toastInfo = {
status: 1,
msg: '预计fyc只能输入最多10位整数!',
timeout: 3000,
align: 'center'
};
return;
}
if (fycArr[1].length > 3) {
this.toastDialog = true;
this.toastInfo = {
status: 1,
msg: '预计fyc只能输入最多2位小数!',
timeout: 3000,
align: 'center'
};
return;
}
} else if (fycArr.length - 1 > 1) {
this.toastDialog = true;
this.toastInfo = {
status: 1,
msg: 'fyc不能输入多个小数点!',
timeout: 3000,
align: 'center'
};
return;
}
}
if (this.editBusiness.pieces) {
if (!OVERZERO_REG.test(this.editBusiness.pieces)) {
this.toastDialog = true;
this.toastInfo = {
status: 1,
msg: '预计件数只能输入正整数!',
timeout: 3000,
align: 'center'
};
return;
}
}
this.editBusiness = {
...this.editBusiness,
leadsAssignedId: this.leadsAssignedId ? Number(this.leadsAssignedId) : null,
opportunityId: this.opportunityId ? Number(this.opportunityId) : null,
opportunityCustomerTags: newTag ? newTag : [],
assignedPractitionerId: this.practitionerId,
fyp: this.editBusiness.fyp ? Number(this.editBusiness.fyp) : null,
fyc: this.editBusiness.fyc ? Number(this.editBusiness.fyc) : null,
sourceFrom: this.editBusiness.sourceFrom ? Number(this.editBusiness.sourceFrom) : null,
birthDate: this.editBusiness.birthDate ? this.lifeCommonService.dateFormat(this.editBusiness.birthDate, 'yyyy-MM-dd') : null
}
this.myService.ownOpportunityBasicInformationSave(this.editBusiness).subscribe((res) => {
if (res['success']) {
this.toastDialog = true;
this.toastInfo = {
status: 1,
msg: Number(this.opportunityId) == 0 ? '新增成功!' : '修改成功!',
timeout: 3000,
align: 'center'
};
this.readonlyFlag = true;
if (this.editBusiness.gender) {
this.sexFlag = true;
if (this.editBusiness.gender == '1') {
this.maleFlag = true;
this.femaleFlag = false;
} else {
this.femaleFlag = true;
this.maleFlag = false;
}
} else {
this.sexFlag = false;
}
//新增的时候要刷新页面
if (Number(this.opportunityId) == 0) {
if (res['data']['opportunityId'] && res['data']['leadsAssignedId']) {
this.opportunityId = res['data']['opportunityId'];
this.leadsAssignedId = res['data']['leadsAssignedId'];
this.router.navigate([`/business/${this.opportunityId}`], { queryParams: { leadsAssignedId: this.leadsAssignedId }, replaceUrl: true });
this.clickFlag = true;
}
}
this.ownOpportunityDetailQuery();
} else {
this.toastDialog = true;
this.toastInfo = {
status: 1,
msg: res['message'],
timeout: 3000,
align: 'center'
};
}
})
}
ownOpportunityRecordSave(opportunityRecordItem ?: any) {
let param;
if (!opportunityRecordItem) {
const oppDate = new Date(this.opportunityRecordNoticeDate + ' 23:59:59').getTime();
const createDate = new Date(this.editBusiness.opportunityDate).getTime();
// if (nowDate < oppDate) {
// this.toastDialog = true;
// this.toastInfo = {
// status: 1,
// msg: '跟进时间不能大于当前时间!',
// timeout: 3000,
// align: 'center'
// };
// return;
// }
if (oppDate < createDate) {
this.toastDialog = true;
this.toastInfo = {
status: 1,
msg: '跟进时间不能在商机之前!',
timeout: 3000,
align: 'center'
};
return;
}
if (!this.opportunityRecordId) {
this.toastDialog = true;
this.toastInfo = {
status: 1,
msg: '请选择跟进状态!',
timeout: 3000,
align: 'center'
};
return;
}
if (!this.salesNotice) {
this.toastDialog = true;
this.toastInfo = {
status: 1,
msg: '备注不能为空!',
timeout: 3000,
align: 'center'
};
return;
}
if (!this.opportunityRecordNoticeDate) {
this.toastDialog = true;
this.toastInfo = {
status: 1,
msg: '跟进时间不能为空!',
timeout: 3000,
align: 'center'
};
return;
}
//如果日程时间选择了一个则两个时间都是必填
if(this.taskTimeFrom || this.taskTimeEnd){
if(!this.taskTimeFrom){
this.toastDialog = true;
this.toastInfo = {
status: 1,
msg: '日程开始时间不能为空!',
timeout: 3000,
align: 'center'
};
return;
}
if(!this.taskTimeEnd){
this.toastDialog = true;
this.toastInfo = {
status: 1,
msg: '日程结束时间不能为空!',
timeout: 3000,
align: 'center'
};
return;
}
if(this.taskTimeEnd<this.taskTimeFrom){
this.toastDialog = true;
this.toastInfo = {
status: 1,
msg: '日程结束时间不能早于开始时间!',
timeout: 3000,
align: 'center'
};
return;
}
}
param = {
id: '',
salesNotice: this.salesNotice,
isActive: 1,
practitionerId: this.practitionerId,
opportunityId: this.opportunityId ? Number(this.opportunityId) : null,
mdDropOptionId: this.opportunityRecordId ? Number(this.opportunityRecordId) : null,
noticeDate: this.opportunityRecordNoticeDate,
leadsAssignedId: this.leadsAssignedId ? Number(this.leadsAssignedId) : null,
sfpMainId: this.sfpMainId ? Number(this.sfpMainId) : null,
taskTimeFrom: this.taskTimeFrom,//跟进开始时间
taskTimeEnd: this.taskTimeEnd//跟进结束时间
}
} else {
param = opportunityRecordItem
}
this.myService.ownOpportunityRecordSave(param).subscribe(res => {
if (res['success']) {
this.toastDialog = true;
this.toastInfo = {
status: 1,
msg: opportunityRecordItem ? '修改成功!' : '添加成功!',
timeout: 3000,
align: 'center'
};
this.opportunityRecordId = this.salesNotice = this.opportunityRecordNoticeDate = null;
this.taskTimeFrom = this.taskTimeEnd = null;
this.ownOpportunityDetailQuery();
this.isShow = false;
this.remarkId = '';
} else {
this.toastDialog = true;
this.toastInfo = {
status: 1,
msg: res['message'],
timeout: 3000,
align: 'center'
};
}
})
}
//添加商机弹框
showToast() {
this.isShow = true;
}
closeToast() {
this.isShow = false;
}
inputBlur() {
window.scrollTo(0, 0)
}
editRemark(id) {
this.remarkId = id
}
openPopInfo(message) {
this.myService.applyForExpertSupport({ leadsAssignedId: this.leadsAssignedId, practitionerId: this.practitionerId, opportunityId: this.opportunityId }).subscribe((res) => {
if (res['success']) {
this.ownOpportunityDetailQuery();
this.isNeedAlert = true;
this.dialogInfo = {
title: null,
content: { value: message, align: 'center' },
footer: [{ value: '确认离开', routerLink: '', className: 'weui-dialog__btn_primary' }],
};
} else {
this.toastDialog = true;
this.toastInfo = {
status: 1,
msg: res['message'],
timeout: 3000,
align: 'center'
};
}
})
}
// 关闭弹窗
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;
}
}
\ No newline at end of file
......@@ -3,5 +3,6 @@ export const environment = {
BACKEND_URL_CONFIG_VALUE: 'https://m.zuihuibi.cn/api',
ORIGINNAME: 'https://m.zuihuibi.cn/ydapi',
DOMAINNAME: 'https://m.zuihuibi.cn/',
BAIDU_TONGJI_CODE: '36b1eb7eec3b5dac9f97d887092b5b27'
BAIDU_TONGJI_CODE: '36b1eb7eec3b5dac9f97d887092b5b27',
SFPPROJECTURL:'https://m.cffp.org.cn'
};
......@@ -6,5 +6,6 @@ export const environment = {
BACKEND_URL_CONFIG_VALUE: 'https://mstage.zuihuibi.cn/api',
ORIGINNAME: 'https://mstage.zuihuibi.cn/ydapi',
DOMAINNAME: 'https://mstage.zuihuibi.cn/',
BAIDU_TONGJI_CODE: '84be9b9eaaca51048f32bb160ccad2e6'
BAIDU_TONGJI_CODE: '84be9b9eaaca51048f32bb160ccad2e6',
SFPPROJECTURL:'https://mstage.zuihuibi.cn'
};
......@@ -8,5 +8,7 @@ export const environment = {
BACKEND_URL_CONFIG_VALUE: 'https://mdev.zuihuibi.cn/api',
ORIGINNAME: 'https://mdev.zuihuibi.cn/ydapi',
DOMAINNAME: 'https://mdev.zuihuibi.cn/',
BAIDU_TONGJI_CODE: 'e8fa107d82e0471d097d545225aeed64'
BAIDU_TONGJI_CODE: 'e8fa107d82e0471d097d545225aeed64',
// SFPPROJECTURL:'http://localhost:5173'
SFPPROJECTURL:'https://mdev.zuihuibi.cn'
};
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