Commit 3b404253 by Chao Sun

团队长bug修复

parent 92b442f8
......@@ -153,4 +153,21 @@ export class LifeCommonService {
return str.replace(/<[^>]+>/g, "");//去掉所有的html标记
}
/**
* 姓名正则
*/
nameValid(name) {
const NAME_REGEXP = /(^[\u4e00-\u9fa5]{1}[\u4e00-\u9fa5\.·()()。]{0,48}[\u4e00-\u9fa5]{1}$)|(^[a-zA-Z]{1}[a-zA-Z\s]{0,48}[a-zA-Z]{1}$)/;
return NAME_REGEXP.test(name);
}
/**
* 手机号码正则
* @param no
* @returns {boolean}
*/
mobileNoValid(no) {
const MOBILE_REGEXP = /^(1)\d{10}$/;
return MOBILE_REGEXP.test(no);
}
}
......@@ -15,7 +15,8 @@ export class RecruitingQuery {
public ossPathResume?: string,
public assignedId?: string,
public operateUserId?: string,
public potentialId?: string
public potentialId?: string,
public practitionerId?: any
) {
}
}
\ No newline at end of file
......@@ -57,64 +57,64 @@ export class MyCenterHomeComponent implements OnInit, AfterViewInit {
this.rank(1, 1, 1)
this.rank(1, 2, 1)
this.recommendPlanQuery();
//判断是否团队长
this.subordinateSystemMemberQuery();
setTimeout(() => {
this.menuLists = [
{
title: '营销工具',
content: [
{ no: 2, subtitle: 'AI保险医生', icon: 'icon-AI', path: `https://${window.location.host}/questionnaire/#/index?campaign=AIRobot&task=AItask1&customerId=${this.lifeCustomerInfo.customerId}`, routerLink: '' },
{ no: 1, subtitle: '獴哥保险诊所', icon: 'icon-zhensuozhongxin', path: `https://${window.location.host}/consulting`, routerLink: '' },
{ no: 4, subtitle: '线上投保', icon: 'icon-yidonghulianwang2', path: `https://${window.location.host}/index`, routerLink: '' },
{ no: 13, subtitle: '我的商机', icon: 'icon-xiansuo1', path: '', routerLink: 'business' },
{ no: 12, subtitle: '我的保单', icon: 'icon-baodanyangben', path: '', routerLink: '' },
{ no: 14, subtitle: '我的佣金', icon: 'icon-yongjin', path: '', routerLink: '' },
{ no: '', subtitle: '', icon: '', path: '', routerLink: '' },
{ no: '', subtitle: '', icon: '', path: '', routerLink: '' }
],
isShow: true
},
{
title: '我的团队',
content: [
{ no: 15, subtitle: '我的团队', icon: 'icon-tuandui', path: '', routerLink: 'teamRank' },
// { no: 16, subtitle: '团队增员', icon: 'icon-tuanduiguanlisvg', path: '', routerLink: '' },
{ no: 16, subtitle: '团队增员', icon: 'icon-tuanduiguanlisvg', path: '', routerLink: 'recruiting' },
{ no: 18, subtitle: '招募海报', icon: 'icon-haibao-1', path: '', routerLink: '' },
{ no: '', subtitle: '', icon: '', path: '', routerLink: '' }
],
isShow: this.isShow
},
{
title: '教育培训',
content: [
{ no: 5, subtitle: '保险ABC', icon: 'icon-zidian', path: `https://${window.location.host}/issue`, routerLink: '' },
{ no: 6, subtitle: '培训课件', icon: 'icon-ziliaoku', path: '', routerLink: 'training' },
{ no: 11, subtitle: '文件下载', icon: 'icon-xiazai1', path: 'https://www.ydinsurance.cn/?page_id=13957', routerLink: 'fileUpload' },
{ no: 17, subtitle: '产品库', icon: 'icon-jingxuanchanpinku', path: 'https://www.ydinsurance.cn/?page_id=14331', routerLink: '' },
],
isShow: true
}, {
title: '展业工具',
content: [
{ no: 9, subtitle: '我的名片', icon: 'icon-zhiyezhenghao', path: `https://${window.location.host}/brokerQry/#/brokerDetail/${this.lifeCustomerInfo.practitionerId}`, routerLink: '' },
{ no: 10, subtitle: '职业类别', icon: 'icon-zhiye', path: 'https://www.ydinsurance.cn/occupationQry/', routerLink: '' },
{ no: 7, subtitle: '文章分享', icon: 'icon-fenxiangwenzhang', path: `https://${window.location.host}/discovery`, routerLink: '' },
{ no: 3, subtitle: '产品海报', icon: 'icon-haibao-1', path: '/salesDetail', routerLink: 'material' },
],
isShow: true
}
];
}, 300)
}
ngAfterViewInit() {
setTimeout(() => {
this.firstAnnouncementTitle = this.getStr(this.hide.nativeElement.innerText, '32')
}, 400);
}
getMenuList() {
this.menuLists = [
{
title: '营销工具',
content: [
{ no: 2, subtitle: 'AI保险医生', icon: 'icon-AI', path: `https://${window.location.host}/questionnaire/#/index?campaign=AIRobot&task=AItask1&customerId=${this.lifeCustomerInfo.customerId}`, routerLink: '' },
{ no: 1, subtitle: '獴哥保险诊所', icon: 'icon-zhensuozhongxin', path: `https://${window.location.host}/consulting`, routerLink: '' },
{ no: 4, subtitle: '线上投保', icon: 'icon-yidonghulianwang2', path: `https://${window.location.host}/index`, routerLink: '' },
{ no: 13, subtitle: '我的商机', icon: 'icon-xiansuo1', path: '', routerLink: 'business' },
{ no: 12, subtitle: '我的保单', icon: 'icon-baodanyangben', path: '', routerLink: '' },
{ no: 14, subtitle: '我的佣金', icon: 'icon-yongjin', path: '', routerLink: '' },
{ no: '', subtitle: '', icon: '', path: '', routerLink: '' },
{ no: '', subtitle: '', icon: '', path: '', routerLink: '' }
],
isShow: true
},
{
title: '我的团队',
content: [
{ no: 15, subtitle: '我的团队', icon: 'icon-tuandui', path: '', routerLink: 'teamRank' },
// { no: 16, subtitle: '团队增员', icon: 'icon-tuanduiguanlisvg', path: '', routerLink: '' },
{ no: 16, subtitle: '团队增员', icon: 'icon-tuanduiguanlisvg', path: '', routerLink: 'recruiting' },
{ no: 18, subtitle: '招募海报', icon: 'icon-haibao-1', path: '', routerLink: '' },
{ no: '', subtitle: '', icon: '', path: '', routerLink: '' }
],
isShow: this.isShow
},
{
title: '教育培训',
content: [
{ no: 5, subtitle: '保险ABC', icon: 'icon-zidian', path: `https://${window.location.host}/issue`, routerLink: '' },
{ no: 6, subtitle: '培训课件', icon: 'icon-ziliaoku', path: '', routerLink: 'training' },
{ no: 11, subtitle: '文件下载', icon: 'icon-xiazai1', path: 'https://www.ydinsurance.cn/?page_id=13957', routerLink: 'fileUpload' },
{ no: 17, subtitle: '产品库', icon: 'icon-jingxuanchanpinku', path: 'https://www.ydinsurance.cn/?page_id=14331', routerLink: '' },
],
isShow: true
}, {
title: '展业工具',
content: [
{ no: 9, subtitle: '我的名片', icon: 'icon-zhiyezhenghao', path: `https://${window.location.host}/brokerQry/#/brokerDetail/${this.lifeCustomerInfo.practitionerId}`, routerLink: '' },
{ no: 10, subtitle: '职业类别', icon: 'icon-zhiye', path: 'https://www.ydinsurance.cn/occupationQry/', routerLink: '' },
{ no: 7, subtitle: '文章分享', icon: 'icon-fenxiangwenzhang', path: `https://${window.location.host}/discovery`, routerLink: '' },
{ no: 3, subtitle: '产品海报', icon: 'icon-haibao-1', path: '/salesDetail', routerLink: 'material' },
],
isShow: true
}
];
}
// 菜单导航
......@@ -207,7 +207,6 @@ export class MyCenterHomeComponent implements OnInit, AfterViewInit {
})
}
//截取字符串
getStr(str, len) {
if (!str) return "";
......@@ -228,7 +227,6 @@ export class MyCenterHomeComponent implements OnInit, AfterViewInit {
return str;
}
// 大家都在买产品查询列表
recommendPlanQuery() {
this.myService.queryproductlistbytag({ mdTagId: 17 }).subscribe(res => {
......@@ -285,8 +283,10 @@ export class MyCenterHomeComponent implements OnInit, AfterViewInit {
this.myService.subordinateSystemMemberQuery({ practitionerId: practitionerId, time: 1 }).subscribe((res) => {
if (res['success']) {
this.isShow = true;
this.getMenuList();
} else {
this.isShow = false;
this.getMenuList();
}
})
}
......
......@@ -173,7 +173,7 @@ export class MyService {
//创建增员跟进记录
addRecruitTrack(param) {
const url = this.ydapi + '/practitioner/recruitTrackQuery';
const url = this.ydapi + '/practitioner/addRecruitTrack';
return this.http
.post(url, JSON.stringify(param));
}
......
......@@ -13,7 +13,7 @@
<i class="iconfont icon-save" *ngIf="!readonlyFlag" (click)="saveInfo()"></i>
<div class="contentDetail">
<div class="contentItem">
<span>姓名</span>
<span><sub>*</sub>姓名</span>
<input class="form-control" type="text" placeholder="{{readonlyFlag ?'暂无姓名':'请输入姓名'}}"
[(ngModel)]="editRecruiting.name" [disabled]="readonlyFlag" />
</div>
......@@ -36,11 +36,14 @@
</div>
<div class="contentItem">
<span>手机</span>
<a style="text-decoration:none;color: #333;margin-right: 16px;" href="tel:{{editRecruiting.mobileNo}}">
<span><sub>*</sub>手机</span>
<a *ngIf="this.id!=0" style="text-decoration:none;color: #333;margin-right: 16px;"
href="tel:{{editRecruiting.mobileNo}}">
<i class="iconfont icon-dianhua" style="color: #e10d0d;"></i>
{{editRecruiting.mobileNo}}</a>
<!-- <input class="form-control" type="text" [(ngModel)]="editRecruiting.mobileNo" disabled /> -->
{{editRecruiting.mobileNo}}
</a>
<input class="form-control" type="text" maxlength="11" [(ngModel)]="editRecruiting.mobileNo" *ngIf="this.id==0"
placeholder="请输入手机号" />
</div>
<div class="contentItem">
<span>微信</span>
......@@ -65,49 +68,44 @@
</div>
<div class="contentItem">
<span>招募来源</span>
<input class="form-control" type="text" [(ngModel)]="editRecruiting.sourceChannel" disabled />
<select class="form-control" [(ngModel)]="editRecruiting.resourceDropMasterId" [disabled]="readonlyFlag"
style=" direction: rtl;">
<option value=''>请选择招募来源</option>
<option *ngFor="let resourceItem of resourceList" [value]="resourceItem.id">
{{resourceItem.dropOptionName}}
</option>
</select>
</div>
<div class="contentItem">
<span>时间</span>
<div class="contentItem" *ngIf="this.id!=0">
<span>增员创建时间</span>
<input class="form-control" type="text" placeholder="增员创建时间" [(ngModel)]="editRecruiting.opportunityDate"
disabled />
</div>
<div class="contentItem">
<div class="contentItem" *ngIf="this.id!=0">
<span>增员状态</span>
<div style="padding: 6px 15px;padding: 6px 15px;color: #e10d0d;font-weight: bold;">
{{editRecruiting.mdDropOptionId}}</div>
</div>
<div class="contentItem">
<span>备注</span>
<input class="form-control" type="text" placeholder="{{readonlyFlag ?'暂无备注':'请输入备注信息'}}"
[(ngModel)]="editRecruiting.remark" [disabled]="readonlyFlag" (blur)="inputBlur()" />
</div>
</div>
</div>
<div class="content" *ngIf="selectedId===2">
<div style="text-align: center;font-size: 16px;margin-top: 10px;"
*ngIf="opportunitySurveyAnswersList?.length==0 || !opportunitySurveyAnswersList">
暂无简历</div>
<div class="answerContent" *ngFor="let surveyItem of opportunitySurveyAnswersList">
<div class="questionTitle">{{surveyItem.questionName}}</div>
<div class="questionContent">{{surveyItem.optionName}}</div>
</div>
</div>
<div class="content" *ngIf="selectedId===4">
<div style="text-align: center;font-size: 16px;margin-top: 10px;" *ngIf="isCompletedQuestionnaire!=3">暂无方案</div>
</div>
<div class="content" *ngIf="selectedId===3">
<div class="content" *ngIf="selectedId===3;">
<ul class="recordLists">
<li *ngFor="let opportunityRecordItem of opportunityRecordInfos">
<div style="display: flex;justify-content: space-between;">
<div class="updatedAt">{{opportunityRecordItem.noticeDate}}</div>
<div class="opportunityRecordItem">{{lifeCommonService.checkStr(opportunityRecordItem.mdDropOptionId)}}</div>
</div>
<div class="salesNotice">{{opportunityRecordItem.salesNotice}}</div>
</li>
<li>
<div class="salesNotice">{{editRecruiting.opportunityDate}}</div>
<li *ngFor="let recruitTrackInfoItem of recruitTrackInfoList">
<div style="display: flex;justify-content: space-between;">
<div>增员状态</div>
<div>待跟进</div>
<div class="updatedAt">{{recruitTrackInfoItem.createAt}}</div>
<div class="opportunityRecordItem">{{recruitTrackInfoItem.trackStatus}}</div>
</div>
<div class="salesNotice">{{recruitTrackInfoItem.notice}}</div>
</li>
</ul>
<div class="add" (click)="this.isShow = true;">
......@@ -133,15 +131,15 @@
</div>
</div>
<div>
<div>备注</div>
<div>备注{{notice}}</div>
<div><input type="text" id="remark" class="form-control" placeholder="输入备注信息" [(ngModel)]="notice"
(blur)="inputBlur()"></div>
</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> -->
<ul class="footer">
<li (click)="addRecruitTrack()">确定</li>
<li (click)="this.isShow = false;">取消</li>
......
......@@ -85,6 +85,17 @@
opacity: 1;
}
}
span{
position: relative;
sub{
position: absolute;
margin-right: 5px;
font-weight: bold;
color: #e10d0d;
top: 13px;
left: -8px;
}
}
}
.contentItem:last-child {
border-bottom: none;
......
......@@ -31,6 +31,11 @@ export class RecruitingDetailComponent implements OnInit {
//新增增员记录的备注
notice: any;
trackStatusId: any;
//控制弹框
toastDialog: boolean;
toastInfo: any;
recruitTrackInfoList: Array<any>;
resourceList: Array<any>;
constructor(
private activateRoute: ActivatedRoute,
public lifeCommonService: LifeCommonService,
......@@ -45,7 +50,7 @@ export class RecruitingDetailComponent implements OnInit {
ngOnInit() {
this.id = this.activateRoute.snapshot.paramMap.get('id');
console.log(this.id)
this.dropOptionsQuery();
this.dropOptionsQuery(1);
this.educationLevelQuery();
if (Number(this.id) === 0) {
this.readonlyFlag = false;
......@@ -64,10 +69,15 @@ export class RecruitingDetailComponent implements OnInit {
selectTab(id) {
if (this.clickFlag == true) {
this.selectedId = id;
if (this.selectedId === 3) {
//跟进列表查询
this.recruitTrackQuery();
//招募来源列表
this.dropOptionsQuery(2);
}
} else {
this.selectedId = 1;
}
}
//改为编辑状态出现男女选项
......@@ -86,22 +96,36 @@ export class RecruitingDetailComponent implements OnInit {
//查询跟进记录
recruitTrackQuery() {
const param = {
potentialId: null,
potentialId: 26,
practitionerId: JSON.parse(localStorage.getItem('lifeCustomerInfo'))['practitionerId']
}
this.myService.recruitTrackQuery(param).subscribe((res) => {
console.log(res)
// console.log(res)
if (res['success']) {
this.recruitTrackInfoList = res['data']['recruitTrackInfoList'];
}
})
}
//跟进状态列表
dropOptionsQuery() {
this.myService.dropOptionsQuery({ code: 'team_biulding_track' }).subscribe((res) => {
if (res['success']) {
this.recruitingStatusList = res['data']['dropMasterInfoList']['0']['dropOptionsInfoList'];
}
})
//跟进状态列表type=2跟进状态type=1招募列表
dropOptionsQuery(type) {
if (type === 1) {
//招募来源列表
this.myService.dropOptionsQuery({ code: 'team_building_source' }).subscribe((res) => {
if (res['success']) {
this.resourceList = res['data']['dropMasterInfoList']['0']['dropOptionsInfoList'];
}
})
}
if (type === 2) {
//跟进状态列表
this.myService.dropOptionsQuery({ code: 'team_biulding_track' }).subscribe((res) => {
if (res['success']) {
this.recruitingStatusList = res['data']['dropMasterInfoList']['0']['dropOptionsInfoList'];
}
})
}
}
// 教育等级查询
......@@ -113,12 +137,86 @@ export class RecruitingDetailComponent implements OnInit {
})
}
inputBlur() {
window.scrollTo(0, 0)
}
//创建增员跟进记录
//新增增员基本信息
saveInfo() {
this.editRecruiting = {
...this.editRecruiting,
practitionerId: JSON.parse(localStorage.getItem('lifeCustomerInfo'))['practitionerId']
}
console.log(JSON.parse(localStorage.getItem('lifeCustomerInfo'))['practitionerId'])
if (!this.editRecruiting.name) {
this.toastDialog = true;
this.toastInfo = {
status: 1,
msg: '姓名不能为空!',
timeout: 3000,
align: 'center'
};
return;
} else {
this.editRecruiting.name = this.editRecruiting.name.trim();
if (!this.lifeCommonService.nameValid(this.editRecruiting.name)) {
this.toastDialog = true;
this.toastInfo = {
status: 1,
msg: '不要乱输姓名哦!',
timeout: 3000,
align: 'center'
};
return;
}
}
if (!this.editRecruiting.mobileNo) {
this.toastDialog = true;
this.toastInfo = {
status: 1,
msg: '手机号不能为空!',
timeout: 3000,
align: 'center'
};
return;
} else {
this.editRecruiting.mobileNo = this.editRecruiting.mobileNo.trim()
if (!this.lifeCommonService.mobileNoValid(this.editRecruiting.mobileNo)) {
this.toastDialog = true;
this.toastInfo = {
status: 1,
msg: '输入手机号码错误',
timeout: 3000,
align: 'center'
};
return;
}
}
console.log(this.editRecruiting)
this.myService.recruit(this.editRecruiting).subscribe((res) => {
console.log(res)
if (res['success']) {
this.toastDialog = true;
this.toastInfo = {
status: 1,
msg: '添加增员对象成功!',
timeout: 3000,
align: 'center'
};
} else {
this.toastDialog = true;
this.toastInfo = {
status: 1,
msg: res['message'],
timeout: 3000,
align: 'center'
};
}
})
}
//新增增员跟进记录
addRecruitTrack() {
const RecruitTrackParam = {
potentialId: 26,//测试先写死小小仙女
......@@ -126,12 +224,26 @@ export class RecruitingDetailComponent implements OnInit {
notice: this.notice,
trackStatusId: this.trackStatusId
}
console.log(this.notice)
this.myService.addRecruitTrack(RecruitTrackParam).subscribe((res) => {
console.log(res)
if (res['success']) {
this.toastDialog = true;
this.toastInfo = {
status: 1,
msg: '保存成功!',
timeout: 3000,
align: 'center'
};
this.recruitTrackQuery();
} else {
this.toastDialog = true;
this.toastInfo = {
status: 1,
msg: res['message'],
timeout: 3000,
align: 'center'
};
}
})
}
......
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