Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
Y
ydLife
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Sweet Zhang
ydLife
Commits
58254264
Commit
58254264
authored
Jul 14, 2023
by
zeyang
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
1.优化赢家平台 商机跟进的时间选择样式和校验
2.赢家平台嵌入SFP智能财策页面
parent
ba982ef6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
1475 additions
and
1320 deletions
+1475
-1320
src/app/my/my-business-detail/my-business-detail.component.html
+325
-306
src/app/my/my-business-detail/my-business-detail.component.scss
+375
-317
src/app/my/my-business-detail/my-business-detail.component.ts
+768
-694
src/environments/environment.prod.ts
+2
-1
src/environments/environment.stage.ts
+2
-1
src/environments/environment.ts
+3
-1
No files found.
src/app/my/my-business-detail/my-business-detail.component.html
View file @
58254264
<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
src/app/my/my-business-detail/my-business-detail.component.scss
View file @
58254264
.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
src/app/my/my-business-detail/my-business-detail.component.ts
View file @
58254264
...
...
@@ -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
src/environments/environment.prod.ts
View file @
58254264
...
...
@@ -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'
};
src/environments/environment.stage.ts
View file @
58254264
...
...
@@ -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'
};
src/environments/environment.ts
View file @
58254264
...
...
@@ -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'
};
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment