Commit 87fa7de7 by Chao Sun

目标设置

parent f438abb8
...@@ -46,7 +46,6 @@ export class LoginComponent implements OnInit, OnDestroy { ...@@ -46,7 +46,6 @@ export class LoginComponent implements OnInit, OnDestroy {
this.authService.compare(compareInfo).subscribe(res => { this.authService.compare(compareInfo).subscribe(res => {
if (res['success']) { if (res['success']) {
this.authService.login({ mobileNo: this.userInfo.mobileNo }).subscribe((response) => { this.authService.login({ mobileNo: this.userInfo.mobileNo }).subscribe((response) => {
if (response['success']) { if (response['success']) {
this.authService.isLoggedIn = true; this.authService.isLoggedIn = true;
const lifeCustomerInfo = { ...response.data, mobileNo: this.userInfo.mobileNo, commonResult: null }; const lifeCustomerInfo = { ...response.data, mobileNo: this.userInfo.mobileNo, commonResult: null };
......
...@@ -174,13 +174,22 @@ ...@@ -174,13 +174,22 @@
</div> </div>
<div class="content" *ngIf="selectedId===3"> <div class="content" *ngIf="selectedId===3">
<ul class="recordLists"> <ul class="recordLists">
<li *ngFor="let opportunityRecordItem of opportunityRecordInfos"> <li *ngFor="let opportunityRecordItem of opportunityRecordInfos;index as idx">
<div style="display: flex;justify-content: space-between;"> <div style="display: flex;justify-content: space-between;height: 25px;">
<div class="updatedAt">{{opportunityRecordItem.noticeDate}}</div> <div class="updatedAt">{{opportunityRecordItem.noticeDate}}</div>
<div class="opportunityRecordItem"> <div class="opportunityRecordItem">
{{opportunityRecordItem.mdDropOptionName?opportunityRecordItem.mdDropOptionName:'待跟进'}}</div> {{opportunityRecordItem.mdDropOptionName?opportunityRecordItem.mdDropOptionName:'待跟进'}}</div>
</div> </div>
<div class="salesNotice">{{opportunityRecordItem.salesNotice}}</div> <div class="salesNotice">
<span>
<input type="text" class="form-control" [(ngModel)]="opportunityRecordItem.salesNotice"
[disabled]="remarkId!=opportunityRecordItem.id" />
</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>
<li> <li>
<div class="salesNotice">{{(editBusiness.opportunityDate).substr(0,10)}}</div> <div class="salesNotice">{{(editBusiness.opportunityDate).substr(0,10)}}</div>
......
...@@ -238,6 +238,23 @@ ...@@ -238,6 +238,23 @@
color: #8a8a8a; color: #8a8a8a;
line-height: 1.1; line-height: 1.1;
margin-bottom: 5px; 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 { .updatedAt {
// font-size: 12px; // font-size: 12px;
......
...@@ -60,7 +60,7 @@ export class MyBusinessDetailComponent implements OnInit { ...@@ -60,7 +60,7 @@ export class MyBusinessDetailComponent implements OnInit {
leadsAssignedId: any; leadsAssignedId: any;
//控制tab可不可点 //控制tab可不可点
clickFlag: boolean; clickFlag: boolean;
remarkId: any;
constructor(private activateRoute: ActivatedRoute, private myService: MyService, constructor(private activateRoute: ActivatedRoute, private myService: MyService,
public lifeCommonService: LifeCommonService, private router: Router, ) { public lifeCommonService: LifeCommonService, private router: Router, ) {
this.titleList = [ this.titleList = [
...@@ -432,7 +432,9 @@ export class MyBusinessDetailComponent implements OnInit { ...@@ -432,7 +432,9 @@ export class MyBusinessDetailComponent implements OnInit {
}) })
} }
ownOpportunityRecordSave() { ownOpportunityRecordSave(opportunityRecordItem?: any) {
let param;
if (!opportunityRecordItem) {
const oppDate = new Date(this.opportunityRecordNoticeDate + ' 23:59:59').getTime(); const oppDate = new Date(this.opportunityRecordNoticeDate + ' 23:59:59').getTime();
const createDate = new Date(this.editBusiness.opportunityDate).getTime(); const createDate = new Date(this.editBusiness.opportunityDate).getTime();
// if (nowDate < oppDate) { // if (nowDate < oppDate) {
...@@ -486,7 +488,7 @@ export class MyBusinessDetailComponent implements OnInit { ...@@ -486,7 +488,7 @@ export class MyBusinessDetailComponent implements OnInit {
}; };
return; return;
} }
const param = { param = {
id: '', id: '',
salesNotice: this.salesNotice, salesNotice: this.salesNotice,
isActive: 1, isActive: 1,
...@@ -496,18 +498,22 @@ export class MyBusinessDetailComponent implements OnInit { ...@@ -496,18 +498,22 @@ export class MyBusinessDetailComponent implements OnInit {
noticeDate: this.opportunityRecordNoticeDate, noticeDate: this.opportunityRecordNoticeDate,
leadsAssignedId: this.leadsAssignedId ? Number(this.leadsAssignedId) : null leadsAssignedId: this.leadsAssignedId ? Number(this.leadsAssignedId) : null
} }
} else {
param = opportunityRecordItem
}
this.myService.ownOpportunityRecordSave(param).subscribe(res => { this.myService.ownOpportunityRecordSave(param).subscribe(res => {
if (res['success']) { if (res['success']) {
this.toastDialog = true; this.toastDialog = true;
this.toastInfo = { this.toastInfo = {
status: 1, status: 1,
msg: '添加成功!', msg: opportunityRecordItem ? '修改成功!' : '添加成功!',
timeout: 3000, timeout: 3000,
align: 'center' align: 'center'
}; };
this.opportunityRecordId = this.salesNotice = this.opportunityRecordNoticeDate = null; this.opportunityRecordId = this.salesNotice = this.opportunityRecordNoticeDate = null;
this.ownOpportunityDetailQuery(); this.ownOpportunityDetailQuery();
this.isShow = false; this.isShow = false;
this.remarkId = '';
} else { } else {
this.toastDialog = true; this.toastDialog = true;
this.toastInfo = { this.toastInfo = {
...@@ -533,6 +539,10 @@ export class MyBusinessDetailComponent implements OnInit { ...@@ -533,6 +539,10 @@ export class MyBusinessDetailComponent implements OnInit {
inputBlur() { inputBlur() {
window.scrollTo(0, 0) window.scrollTo(0, 0)
} }
editRemark(id) {
this.remarkId = id
}
} }
...@@ -17,6 +17,9 @@ ...@@ -17,6 +17,9 @@
<p>{{lifeCustomerInfo?.practitionerBasicInfo?.insurerBranchName ? <p>{{lifeCustomerInfo?.practitionerBasicInfo?.insurerBranchName ?
lifeCustomerInfo?.practitionerBasicInfo?.insurerBranchName : '银盾保险'}}</p> lifeCustomerInfo?.practitionerBasicInfo?.insurerBranchName : '银盾保险'}}</p>
</div> </div>
<div>·</div>
<div>{{lifeCustomerInfo?.practitionerBasicInfo?.subordinateName}}</div>
<div>·</div>
<div><span class="ydTitle">{{lifeCustomerInfo?.practitionerBasicInfo?.levelName}}</span></div> <div><span class="ydTitle">{{lifeCustomerInfo?.practitionerBasicInfo?.levelName}}</span></div>
</div> </div>
</div> </div>
...@@ -51,7 +54,7 @@ ...@@ -51,7 +54,7 @@
</ul> </ul>
<ul class="performance_list"> <ul class="performance_list">
<li>线上</li> <li>线上</li>
<li class="markPrice" style="margin-left: 7px;"> <li class="markPrice" style="margin:0 7px;">
¥{{onlineInfo?.fyp | number: "1.0-0"}} ¥{{onlineInfo?.fyp | number: "1.0-0"}}
</li> </li>
<li class="markPrice"> <li class="markPrice">
...@@ -64,7 +67,7 @@ ...@@ -64,7 +67,7 @@
</ul> </ul>
<ul class="performance_list"> <ul class="performance_list">
<li>线下</li> <li>线下</li>
<li class="markPrice" style="margin-left: 7px;"> <li class="markPrice" style="margin:0 7px;">
¥{{offlineInfo?.fyp | number: "1.0-0"}} ¥{{offlineInfo?.fyp | number: "1.0-0"}}
</li> </li>
<li class="markPrice"> <li class="markPrice">
...@@ -79,6 +82,31 @@ ...@@ -79,6 +82,31 @@
</div> </div>
</div> </div>
<div class="performance_wrapper">
<div class="content">
<div class="activities_grade">
销售活动量分值
</div>
<ul class="activities">
<li>今天</li>
<li>本周</li>
<li>本月</li>
<li>本周达成率</li>
<li>本月达成率</li>
<li>本周新增</li>
</ul>
<ul class="activities">
<li class="markPrice">{{this.activities_grade?.scoreDay}}</li>
<li class="markPrice">{{this.activities_grade?.scoreWeek}}</li>
<li class="markPrice">{{this.activities_grade?.scoreMonth}}</li>
<li class="markPrice">
{{this.activities_grade?.achievementRateWeek!=null ? this.activities_grade?.achievementRateWeek:'-'}}</li>
<li class="markPrice">
{{this.activities_grade?.achievementRateMonth!=null ?this.activities_grade?.achievementRateMonth :'-'}}</li>
<li class="markPrice">{{this.activities_grade?.addOpportunityNum}}</li>
</ul>
</div>
</div>
<div class="performance_wrapper notice"> <div class="performance_wrapper notice">
<div style="position: relative;"> <div style="position: relative;">
<h3 style="font-size: 16px;color: #ff002a;">公告</h3><i class="iconfont" style="color: #ff002a;">&#xe645;</i> <h3 style="font-size: 16px;color: #ff002a;">公告</h3><i class="iconfont" style="color: #ff002a;">&#xe645;</i>
...@@ -156,15 +184,11 @@ ...@@ -156,15 +184,11 @@
<span i class="iconfont icon-ar-r" style="font-size:18px;float: right;" routerLink="setting"></span> <span i class="iconfont icon-ar-r" style="font-size:18px;float: right;" routerLink="setting"></span>
</h3> </h3>
</div> </div>
<div class="health_wrapper" style="padding: 12px 10px 12px 10px;"> <div class="health_wrapper" style="padding: 12px 10px 12px 10px;">
<h3 style="margin-bottom: 0;">我的消息 <h3 style="margin-bottom: 0;">我的消息
<span i class="iconfont icon-ar-r" style="font-size:18px;float: right;" routerLink="news"></span></h3> <span i class="iconfont icon-ar-r" style="font-size:18px;float: right;" routerLink="news"></span></h3>
</div> </div>
</div> </div>
<div class="footer" style="font-size: 12px;padding-top: 10px;text-align: center;background: #f6f7f2;"> <div class="footer" style="font-size: 12px;padding-top: 10px;text-align: center;background: #f6f7f2;">
<p>上海银盾保险经纪有限公司</p> <p>上海银盾保险经纪有限公司</p>
<p>保险业务经营许可证:269615000000800</p> <p>保险业务经营许可证:269615000000800</p>
......
...@@ -66,7 +66,7 @@ ...@@ -66,7 +66,7 @@
> div { > div {
display: flex; display: flex;
align-items: center; align-items: center;
margin-right: 10px; margin-right: 5px;
} }
} }
...@@ -168,25 +168,49 @@ ...@@ -168,25 +168,49 @@
line-height: 25px; line-height: 25px;
font-size: 12px; font-size: 12px;
color: #fff; color: #fff;
margin: 0 7px;
} }
.markPrice{ li.markPrice{
color: #fff; color: #fff;
font-weight: bold; font-weight: bold;
font-size: 15px; font-size: 15px;
} }
li:nth-child(1){ li:nth-child(1){
width: 12%; width: 8%;
text-align: left; text-align: left;
margin: 0;
} }
li:nth-child(2),li:nth-child(3){ li:nth-child(2),li:nth-child(3){
width: 28%; width: 28%;
text-align: left; text-align: right;
margin-left: 10px; }
// li:nth-child(3){
// margin-left: 0px;
// }
}
.activities{
display: flex;
font-size: 14px;
li{
width: 20%;
text-align: center;
line-height: 25px;
font-size: 12px;
color: #fff;
} }
li:nth-child(3){ li:nth-child(1),li:nth-child(2),li:nth-child(3){
margin-left: 0px; width: 15%;
} }
li.markPrice{
color: #fff;
font-weight: bold;
font-size: 15px;
}
}
.activities_grade{
color: #fff;
height: 38px;
line-height: 38px;
} }
} }
......
...@@ -33,6 +33,8 @@ export class MyCenterHomeComponent implements OnInit, AfterViewInit { ...@@ -33,6 +33,8 @@ export class MyCenterHomeComponent implements OnInit, AfterViewInit {
isShow: boolean; isShow: boolean;
onlineInfo: any; onlineInfo: any;
offlineInfo: any; offlineInfo: any;
activities_grade: any;
constructor( constructor(
private router: Router, private router: Router,
private lifeCommonService: LifeCommonService, private lifeCommonService: LifeCommonService,
...@@ -59,6 +61,7 @@ export class MyCenterHomeComponent implements OnInit, AfterViewInit { ...@@ -59,6 +61,7 @@ export class MyCenterHomeComponent implements OnInit, AfterViewInit {
this.recommendPlanQuery(); this.recommendPlanQuery();
//判断是否团队长 //判断是否团队长
this.subordinateSystemMemberQuery(); this.subordinateSystemMemberQuery();
this.opportunityStatistics();
} }
ngAfterViewInit() { ngAfterViewInit() {
...@@ -86,7 +89,7 @@ export class MyCenterHomeComponent implements OnInit, AfterViewInit { ...@@ -86,7 +89,7 @@ export class MyCenterHomeComponent implements OnInit, AfterViewInit {
{ {
title: '我的团队', title: '我的团队',
content: [ content: [
{ no: 15, subtitle: '我的团队', icon: 'icon-tuandui', path: '', routerLink: 'teamRank' }, { no: 15, subtitle: '我的团队', icon: 'icon-tuandui', path: '', routerLink: 'teamPanel' },
// { no: 16, subtitle: '团队增员', icon: 'icon-tuanduiguanlisvg', path: '', routerLink: '' }, // { no: 16, subtitle: '团队增员', icon: 'icon-tuanduiguanlisvg', path: '', routerLink: '' },
{ no: 16, subtitle: '团队增员', icon: 'icon-tuanduiguanlisvg', path: '', routerLink: 'recruiting' }, { no: 16, subtitle: '团队增员', icon: 'icon-tuanduiguanlisvg', path: '', routerLink: 'recruiting' },
{ no: 18, subtitle: '招募海报', icon: 'icon-haibao-1', path: '', routerLink: '' }, { no: 18, subtitle: '招募海报', icon: 'icon-haibao-1', path: '', routerLink: '' },
...@@ -229,7 +232,7 @@ export class MyCenterHomeComponent implements OnInit, AfterViewInit { ...@@ -229,7 +232,7 @@ export class MyCenterHomeComponent implements OnInit, AfterViewInit {
// 大家都在买产品查询列表 // 大家都在买产品查询列表
recommendPlanQuery() { recommendPlanQuery() {
this.myService.queryproductlistbytag({ mdTagId: 17 }).subscribe(res => { this.myService.queryproductlistbytag({ mdTagId: 97 }).subscribe(res => {
this.products = res['data'].plans; this.products = res['data'].plans;
}) })
} }
...@@ -283,11 +286,26 @@ export class MyCenterHomeComponent implements OnInit, AfterViewInit { ...@@ -283,11 +286,26 @@ export class MyCenterHomeComponent implements OnInit, AfterViewInit {
this.myService.subordinateSystemMemberQuery({ practitionerId: practitionerId, time: 1 }).subscribe((res) => { this.myService.subordinateSystemMemberQuery({ practitionerId: practitionerId, time: 1 }).subscribe((res) => {
if (res['success']) { if (res['success']) {
this.isShow = true; this.isShow = true;
sessionStorage.setItem('isTeamleader', '1');
sessionStorage.setItem('subordinateSystemName', res['data']['subordinateSystemName'])
this.getMenuList(); this.getMenuList();
} else { } else {
this.isShow = false; this.isShow = false;
sessionStorage.setItem('isTeamleader', '0')
this.getMenuList(); this.getMenuList();
} }
}) })
} }
//经纪人商机分数统计
opportunityStatistics() {
const practitionerId = JSON.parse(localStorage.getItem('lifeCustomerInfo'))['practitionerId'];
this.myService.opportunityStatistics({ practitionerId: practitionerId }).subscribe((res) => {
if (res['success']) {
this.activities_grade = res['data'];
} else {
this.activities_grade = null;
}
})
}
} }
...@@ -18,6 +18,8 @@ import { ThanksComponent } from './thanks/thanks.component'; ...@@ -18,6 +18,8 @@ import { ThanksComponent } from './thanks/thanks.component';
import { MySettingComponent } from './my-setting/my-setting.component'; import { MySettingComponent } from './my-setting/my-setting.component';
import { MySettingDetailComponent } from './my-setting-detail/my-setting-detail.component'; import { MySettingDetailComponent } from './my-setting-detail/my-setting-detail.component';
import { MyNewsComponent } from './my-news/my-news.component'; import { MyNewsComponent } from './my-news/my-news.component';
import { MyTargetComponent } from "./my-target/my-target.component";
import { TeamPanelComponent } from './team-panel/team-panel.component';
const myRoutes: Routes = [ const myRoutes: Routes = [
{ path: '', component: MyCenterHomeComponent, canActivate: [AuthGuard], data: [{ title: '银盾保险经纪 - 工作台' }] }, { path: '', component: MyCenterHomeComponent, canActivate: [AuthGuard], data: [{ title: '银盾保险经纪 - 工作台' }] },
...@@ -38,6 +40,8 @@ const myRoutes: Routes = [ ...@@ -38,6 +40,8 @@ const myRoutes: Routes = [
{ path: 'setting', component: MySettingComponent, canActivate: [AuthGuard] }, { path: 'setting', component: MySettingComponent, canActivate: [AuthGuard] },
{ path: 'setting/:uploadType', component: MySettingDetailComponent, canActivate: [AuthGuard] }, { path: 'setting/:uploadType', component: MySettingDetailComponent, canActivate: [AuthGuard] },
{ path: 'news', component: MyNewsComponent, canActivate: [AuthGuard] }, { path: 'news', component: MyNewsComponent, canActivate: [AuthGuard] },
{ path: 'target', component: MyTargetComponent, canActivate: [AuthGuard] },
{ path: 'teamPanel', component: TeamPanelComponent, canActivate: [AuthGuard] }
]; ];
......
...@@ -31,5 +31,11 @@ ...@@ -31,5 +31,11 @@
<span class="iconfont icon-ar-r"></span> <span class="iconfont icon-ar-r"></span>
</div> </div>
</div> </div>
<div class="item" [routerLink]="['/target']">
<span>目标设置</span>
<div class="content">
<span class="iconfont icon-ar-r"></span>
</div>
</div>
<div class="saveBtn" (click)="getOut()">退出</div> <div class="saveBtn" (click)="getOut()">退出</div>
</div> </div>
\ No newline at end of file
<div class="wrapper_target">
<div class="nav">
<ul class="tab">
<li (click)="searchType=1;this.salesTargetQuery(1)" [ngClass]="{selected:searchType===1}">销售目标</li>
<li (click)="searchType=2;salesTargetQuery(1)" [ngClass]="{selected:searchType===2}">销售活动量</li>
<li (click)="searchType=5;this.salesTargetQuery(2)" *ngIf="isTeamleader==='1'"
[ngClass]="{selected:searchType===5}">团队销售目标</li>
<li (click)="searchType=6;this.salesTargetQuery(2)" *ngIf="isTeamleader==='1'"
[ngClass]="{selected:searchType===6}">团队销售活动量</li>
<li (click)="searchType=3;potentialGoalsQuery();" *ngIf="isTeamleader==='1'"
[ngClass]="{selected:searchType===3}">
增员目标</li>
<li (click)="searchType=4;potentialGoalsActionsQuery()" *ngIf="isTeamleader==='1'"
[ngClass]="{selected:searchType===4}">增员活动量</li>
</ul>
</div>
<div class="content_target" *ngIf="searchType===1">
<div class="content_target_wrapper">
<div class="line">
<div class="title">个人年度销售目标</div>
<div class="content_target_item">
<span>首年保费FYP</span>
<input class="form-control" type="text" [(ngModel)]="premium" (ngModelChange)="getMonthAverage('premium')"
(blur)="inputBlur()" placeholder="{{personalSalesReadonlyFlag?'暂无预计年保费':'请输入预计年保费'}}"
[disabled]="personalSalesReadonlyFlag" />
</div>
<div class="content_target_item">
<span>首年佣金FYC</span>
<input class="form-control" type="text" [(ngModel)]="commission"
(ngModelChange)="getMonthAverage('commission')" (blur)="inputBlur()"
placeholder="{{personalSalesReadonlyFlag?'暂无预计年佣金':'请输入预计年佣金'}}" [disabled]="personalSalesReadonlyFlag" />
</div>
<div class="content_target_item">
<span>件均保费</span>
<input class="form-control" type="text" [(ngModel)]="pieceAveragePremium"
(ngModelChange)="getMonthAverage('pieceAveragePremium')" (blur)="inputBlur()"
placeholder="{{personalSalesReadonlyFlag?'暂无件均保费':'请输入年度件均保费'}}" [disabled]="personalSalesReadonlyFlag" />
</div>
<div class="content_target_item" style="border-bottom: none;">
<span>成交件数(FYP/件均保费)</span>
<input class="form-control" type="text" [(ngModel)]="pieces" style="width: 40%;"
placeholder="{{personalSalesReadonlyFlag?'暂无预计成交件数':'FYP/年件均保费'}}" disabled />
</div>
</div>
<div class="line">
<i class="iconfont icon-bianji" *ngIf="personalSalesReadonlyFlag"
(click)="personalSalesReadonlyFlag = false;"></i>
<i class="iconfont icon-save" *ngIf="!personalSalesReadonlyFlag" (click)="salesTargetSave(1)"></i>
<div class="title">个人月销售目标</div>
<div class="month_target_item_wrapper" *ngFor="let salesTargetMonthsItem of salesTargetMonths">
<span style="font-weight: bold;">{{salesTargetMonthsItem.monthNum}}月销售目标</span>
<div class="content_target_item">
<span>FYP</span>
<input type="number" class="form-control" placeholder="{{personalSalesReadonlyFlag?'暂无目标保费':'请输入目标保费'}}"
[(ngModel)]="salesTargetMonthsItem.premium" (ngModelChange)="changePremium()"
[disabled]="personalSalesReadonlyFlag" (blur)="inputBlur()">
</div>
<div class="content_target_item">
<span>FYC</span>
<input type="number" class="form-control" placeholder="{{personalSalesReadonlyFlag?'暂无目标佣金':'请输入目标佣金'}}"
[(ngModel)]="salesTargetMonthsItem.commission" (ngModelChange)="changePremium()"
[disabled]="personalSalesReadonlyFlag" (blur)="inputBlur()">
</div>
<div class="content_target_item">
<span>件数</span>
<input type="number" class="form-control" placeholder="件数" disabled
[(ngModel)]="salesTargetMonthsItem.pieces">
</div>
</div>
</div>
</div>
</div>
<div class="content_target" *ngIf="searchType===2">
<div class="content_target_wrapper">
<div class="line">
<i class="iconfont icon-bianji" *ngIf="personalSalesActivityFlag"
(click)="personalSalesActivityFlag = false;"></i>
<i class="iconfont icon-save" *ngIf="!readonlyFlag && salesTargetFlag && !personalSalesActivityFlag"
(click)="salesTargetMonthSave(1)"></i>
<div class="title">月均销售活动量目标</div>
<div *ngIf="!salesTargetFlag" style="text-align: center;">请先设置销售目标</div>
<div class="content_target_item" *ngFor="let salesTargetActionItem of salesTargetActions">
<span>{{salesTargetActionItem.leadsActionName}}</span>
<input class="form-control" type="text" [(ngModel)]="salesTargetActionItem.actionStandards"
(blur)="inputBlur()" [disabled]="personalSalesActivityFlag" />
</div>
</div>
</div>
</div>
<div class="content_target" *ngIf="searchType===3">
<div class="content_target_wrapper">
<div class="line">
<i class="iconfont icon-bianji" *ngIf="recruitsReadonlyFlag" (click)="recruitsReadonlyFlag = false;"></i>
<i class="iconfont icon-save" *ngIf="!recruitsReadonlyFlag" (click)="potentialGoalsSetting()"></i>
<div class="title">年增员目标</div>
<div class="content_target_item">
<span>年度增员目标</span>
<input class="form-control" type="text" [(ngModel)]="numberRecruitsYear"
(ngModelChange)="getMonthRecruitsAverage('Recruits')" [disabled]="recruitsReadonlyFlag"
placeholder="{{readonlyFlag?'暂无年度增员目标':'请输入预计年度增员目标'}}" (blur)="inputBlur()" />
</div>
<div class="content_target_item" style="border-bottom: none;">
<span>MDRT数量</span>
<input class="form-control" type="text" [(ngModel)]="numberMDRTYear"
(ngModelChange)="getMonthRecruitsAverage('MDRT')" [disabled]="recruitsReadonlyFlag"
placeholder="{{readonlyFlag?'暂无年MDRT数量':'请输入预计年度MDRT数量'}}" (blur)="inputBlur()" />
</div>
</div>
<div class="line">
<div class="title">月增员目标</div>
<div class="month_target_item_wrapper" *ngFor="let recruitGoalForMonthItem of recruitGoalForMonthList">
<span style="font-weight: bold;">{{recruitGoalForMonthItem.month}}月增员目标</span>
<div class="content_target_item">
<span>增员目标数</span>
<input type="number" class="form-control" placeholder="请输入增员目标数" [disabled]="recruitsReadonlyFlag"
[(ngModel)]="recruitGoalForMonthItem.numberRecruits" (ngModelChange)="changeMonthRecruit()"
(blur)="inputBlur()">
</div>
</div>
</div>
</div>
</div>
<div class="content_target" *ngIf="searchType===4">
<div class="content_target_wrapper">
<div class="line">
<i class="iconfont icon-bianji" *ngIf="recruitsActivityReadonlyFlag"
(click)="recruitsActivityReadonlyFlag = false;"></i>
<i class="iconfont icon-save" *ngIf="!readonlyFlag && recruitingTargetFlag && !recruitsActivityReadonlyFlag"
(click)="potentialGoalsActionsUpdate()"></i>
<div class="title">月均增员活动量目标</div>
<div *ngIf="!recruitingTargetFlag" style="text-align: center;">请先设置增员目标</div>
<div class="content_target_item" *ngFor="let goalsActionsInfoItem of goalsActionsInfoList">
<span>{{goalsActionsInfoItem.potentialActionName}}</span>
<input type="number" style="width: 30%;" class="form-control"
[(ngModel)]="goalsActionsInfoItem.actionStandards" (blur)="inputBlur()"
[disabled]="recruitsActivityReadonlyFlag" />
</div>
</div>
</div>
</div>
<div class="content_target" *ngIf="searchType===5">
<div class="content_target_wrapper">
<div class="line">
<div class="title">团队年度销售目标</div>
<div class="content_target_item">
<span>首年保费FYP</span>
<input class="form-control" type="text" [(ngModel)]="premium" (ngModelChange)="getMonthAverage('premium')"
placeholder="{{personalSalesReadonlyFlag?'暂无预计年保费':'请输入预计年保费'}}" [disabled]="personalSalesReadonlyFlag" />
</div>
<div class="content_target_item">
<span>首年佣金FYC</span>
<input class="form-control" type="text" [(ngModel)]="commission"
(ngModelChange)="getMonthAverage('commission')"
placeholder="{{personalSalesReadonlyFlag?'暂无预计年佣金':'请输入预计年佣金'}}" [disabled]="personalSalesReadonlyFlag" />
</div>
<div class="content_target_item">
<span>件均保费</span>
<input class="form-control" type="text" [(ngModel)]="pieceAveragePremium"
(ngModelChange)="getMonthAverage('pieceAveragePremium')"
placeholder="{{personalSalesReadonlyFlag?'暂无件均保费':'请输入年度件均保费'}}" [disabled]="personalSalesReadonlyFlag" />
</div>
<div class="content_target_item" style="border-bottom: none;">
<span>成交件数(FYP/件均保费)</span>
<input class="form-control" type="text" [(ngModel)]="pieces" style="width: 40%;"
placeholder="{{personalSalesReadonlyFlag?'暂无预计成交件数':'FYP/年件均保费'}}" disabled />
</div>
</div>
<div class="line">
<i class="iconfont icon-bianji" *ngIf="personalSalesReadonlyFlag"
(click)="personalSalesReadonlyFlag = false;"></i>
<i class="iconfont icon-save" *ngIf="!personalSalesReadonlyFlag" (click)="salesTargetSave(2)"></i>
<div class="title">团队月销售目标</div>
<div class="month_target_item_wrapper" *ngFor="let salesTargetMonthsItem of salesTargetMonths">
<span style="font-weight: bold;">{{salesTargetMonthsItem.monthNum}}月销售目标</span>
<div class="content_target_item">
<span>FYP</span>
<input type="number" class="form-control" placeholder="{{personalSalesReadonlyFlag?'暂无目标保费':'请输入目标保费'}}"
[(ngModel)]="salesTargetMonthsItem.premium" (ngModelChange)="changePremium()"
[disabled]="personalSalesReadonlyFlag">
</div>
<div class="content_target_item">
<span>FYC</span>
<input type="number" class="form-control" placeholder="{{personalSalesReadonlyFlag?'暂无目标佣金':'请输入目标佣金'}}"
[(ngModel)]="salesTargetMonthsItem.commission" (ngModelChange)="changePremium()"
[disabled]="personalSalesReadonlyFlag">
</div>
<div class="content_target_item">
<span>件数</span>
<input type="number" class="form-control" placeholder="件数" disabled
[(ngModel)]="salesTargetMonthsItem.pieces">
</div>
</div>
</div>
</div>
</div>
<div class="content_target" *ngIf="searchType===6">
<div class="content_target_wrapper">
<div class="line">
<i class="iconfont icon-bianji" *ngIf="personalSalesActivityFlag"
(click)="personalSalesActivityFlag = false;"></i>
<i class="iconfont icon-save" *ngIf="!readonlyFlag && salesTargetFlag && !personalSalesActivityFlag"
(click)="salesTargetMonthSave(2)"></i>
<div class="title">月均销售活动量目标</div>
<div *ngIf="!salesTargetFlag" style="text-align: center;">请先设置销售目标</div>
<div class="content_target_item" *ngFor="let salesTargetActionItem of salesTargetActions">
<span>{{salesTargetActionItem.leadsActionName}}</span>
<input class="form-control" type="text" [(ngModel)]="salesTargetActionItem.actionStandards"
(blur)="inputBlur()" [disabled]="personalSalesActivityFlag" />
</div>
</div>
</div>
</div>
</div>
<ydlife-toast *ngIf="toastDialog" [toastInfo]="toastInfo"></ydlife-toast>
\ No newline at end of file
ul li,ol li{
list-style: none;
}
.wrapper_target{
.nav{
overflow: hidden;
width: 100%;
overflow-x: auto;
.tab{
padding: 10px 2px;
margin-bottom: 10px;
float: left;
width: 180%;
overflow: hidden;
overflow-x: auto;
li {
border: 1px #a9aabb solid;
text-align: center;
font-size: 14px;
height: 30px;
line-height: 30px;
border-radius: 20px;
margin: 0px 2px;
float: left;
width: 16%;
h3{
font-weight: normal;
font-size: 16px;
}
}
li.selected{
background-color: #e10d0d;
color: #fff;
border: 1px #f0f0f0 solid;
// border: 1px #e10d0d solid;
}
}
}
.content_target{
.content_target_wrapper{
.line{
padding: 8px;
margin-bottom: 10px;
border-bottom: 1px #ddd solid;
position: relative;
.iconfont{
width: 55px;
height: 55px;
line-height: 55px;
border-radius: 50%;
position: absolute;
right: 10px;
font-size: 24px;
color: #fff;
background: #0767bf;
text-align: center;
top: -5px;
}
.title{
font-size: 16px;
font-weight: bold;
margin: 10px 0 15px 0;
}
.content_target_item{
display: flex;
justify-content: space-between;
align-items: center;
margin: 0 0 5px 17px;
border-bottom: 1px #ddd solid;
input.form-control {
width: 65%;
background: none;
outline: none;
border: none;
text-align: right;
box-shadow: none;
display: flex;
flex-wrap: wrap;
}
.form-control[disabled], .form-control[readonly], fieldset[disabled] .form-control{
opacity:.5
}
}
.month_target_item_wrapper{
margin-bottom: 15px;
}
.content_target_monthItem{
border: 1px #ddd solid;
display: flex;
border-right: none;
border-bottom: none;
// .month_target_left{
// display: flex;
// flex-wrap: wrap;
// flex:0 0 23%;
// border-right: 1px #ddd solid;
// .month_target{
// div {
// width: 92px;
// padding: 6px 12px;
// border-bottom: 1px #ddd solid;
// }
// }
// }
.month_target_right{
width: 100%;
display: flex;
flex-wrap: wrap;
// flex:0 0 75%;
// border-right: 1px #ddd solid;
ul {
width: 100%;
display: flex;
justify-content: space-between;
li{
width: 100%;
text-align: center;
border-right: 1px #ddd solid;
.month_target{
text-align: left;
div{
border-bottom: 1px #ddd solid;
}
div.month_target_item{
display: flex;
align-items: center;
span{
width: 40%;
}
}
.form-control{
background: none;
outline: none;
border: none;
box-shadow: none;
}
.count{
border-bottom: none;
}
}
}
}
// ul:nth-child(3n) li{
// border-right: none;
// }
}
}
}
.line:last-child{
border: none;
}
}
}
}
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { MyTargetComponent } from './my-target.component';
describe('MyTargetComponent', () => {
let component: MyTargetComponent;
let fixture: ComponentFixture<MyTargetComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ MyTargetComponent ]
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(MyTargetComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});
import { Component, OnInit } from '@angular/core';
import { MyService } from '../my.service';
@Component({
selector: 'ydlife-my-target',
templateUrl: './my-target.component.html',
styleUrls: ['./my-target.component.scss']
})
export class MyTargetComponent implements OnInit {
//个人销售目标
personalSalesReadonlyFlag: boolean;
personalSalesActivityFlag: boolean;
//增员目标编辑
recruitsReadonlyFlag: boolean;
recruitsActivityReadonlyFlag: boolean;
searchType: any;
//判断是否团队长
isTeamleader: any;
salesTargetMonths: Array<any>;
practitionerId: any;
//个人保费
premium: number;
//个人佣金
commission: number;
//个人件数
pieces: number;
//个人件平均保费
pieceAveragePremium: number;
recruitGoalForMonthList: Array<any>;
numberRecruitsYear: number;
numberMDRTYear: number;
//控制弹框
toastDialog: boolean;
toastInfo: any;
//月均销售活动量得分
salesTargetActions: Array<any>;
//增员活动量得分
goalsActionsInfoList: Array<any>;
salesTargetFlag: boolean = true;
recruitingTargetFlag: boolean = true;
constructor(private myService: MyService) { }
ngOnInit() {
this.searchType = 1;
this.isTeamleader = sessionStorage.getItem('isTeamleader');
this.practitionerId = JSON.parse(localStorage.getItem('lifeCustomerInfo'))['practitionerId'];
//初始化查个人销售目标
this.salesTargetQuery(1);
}
//销售目标保存
salesTargetSave(goalsType) {
const salesTargetParam = {
practitionerId: this.practitionerId,
pieceAveragePremium: this.pieceAveragePremium,
pieces: this.pieces,
premium: Number(this.premium),
commission: this.commission,
salesTargetMonths: this.salesTargetMonths,
goalsType: goalsType
}
for (let i = 0; i < this.salesTargetMonths.length; i++) {
if (!this.salesTargetMonths[i]['premium'] && this.salesTargetMonths[i]['premium'] != 0) {
this.toastDialog = true;
this.toastInfo = {
status: 1,
msg: `请输入${this.salesTargetMonths[i]['monthNum']}月预计保费!`,
timeout: 3000,
align: 'center'
};
return;
}
if (!this.salesTargetMonths[i]['commission'] && this.salesTargetMonths[i]['commission'] != 0) {
this.toastDialog = true;
this.toastInfo = {
status: 1,
msg: `请输入${this.salesTargetMonths[i]['monthNum']}月预计佣金!`,
timeout: 3000,
align: 'center'
};
return;
}
if (!this.salesTargetMonths[i]['pieceAveragePremium'] && this.salesTargetMonths[i]['pieceAveragePremium'] != 0) {
this.toastDialog = true;
this.toastInfo = {
status: 1,
msg: `请输入${this.salesTargetMonths[i]['monthNum']}月件均保费!`,
timeout: 3000,
align: 'center'
};
return;
}
}
this.myService.salesTargetSave(salesTargetParam).subscribe((res) => {
if (res['success']) {
this.toastDialog = true;
this.toastInfo = {
status: 1,
msg: '保存成功!',
timeout: 3000,
align: 'center'
};
this.salesTargetQuery(goalsType);
} else {
this.toastDialog = true;
this.toastInfo = {
status: 1,
msg: res['message'],
timeout: 3000,
align: 'center'
};
}
})
}
//查询销售目标
salesTargetQuery(goalsType) {
this.myService.salesTargetQuery({ practitionerId: this.practitionerId, goalsType: goalsType }).subscribe((res) => {
if (res['success']) {
if (res['data']['salesTargetMonths'].length > 0) {
this.salesTargetMonths = res['data']['salesTargetMonths'];
this.salesTargetFlag = true;
this.personalSalesReadonlyFlag = true;
this.personalSalesActivityFlag = true;
} else {
this.salesTargetMonths = [
{ premium: null, commission: null, pieces: null, pieceAveragePremium: null, monthNum: 1 },
{ premium: null, commission: null, pieces: null, pieceAveragePremium: null, monthNum: 2 },
{ premium: null, commission: null, pieces: null, pieceAveragePremium: null, monthNum: 3 },
{ premium: null, commission: null, pieces: null, pieceAveragePremium: null, monthNum: 4 },
{ premium: null, commission: null, pieces: null, pieceAveragePremium: null, monthNum: 5 },
{ premium: null, commission: null, pieces: null, pieceAveragePremium: null, monthNum: 6 },
{ premium: null, commission: null, pieces: null, pieceAveragePremium: null, monthNum: 7 },
{ premium: null, commission: null, pieces: null, pieceAveragePremium: null, monthNum: 8 },
{ premium: null, commission: null, pieces: null, pieceAveragePremium: null, monthNum: 9 },
{ premium: null, commission: null, pieces: null, pieceAveragePremium: null, monthNum: 10 },
{ premium: null, commission: null, pieces: null, pieceAveragePremium: null, monthNum: 11 },
{ premium: null, commission: null, pieces: null, pieceAveragePremium: null, monthNum: 12 }
]
this.salesTargetFlag = false;
this.personalSalesReadonlyFlag = false;
this.personalSalesActivityFlag = false;
}
this.commission = res['data']['commission'];
this.pieceAveragePremium = res['data']['pieceAveragePremium'];
this.pieces = res['data']['pieces'];
this.premium = res['data']['premium'];
this.salesTargetActions = res['data']['salesTargetActions'];
} else {
this.commission = this.pieceAveragePremium = this.pieces = this.premium = null;
this.salesTargetFlag = false;
this.salesTargetMonths = [
{ premium: null, commission: null, pieces: null, pieceAveragePremium: null, monthNum: 1 },
{ premium: null, commission: null, pieces: null, pieceAveragePremium: null, monthNum: 2 },
{ premium: null, commission: null, pieces: null, pieceAveragePremium: null, monthNum: 3 },
{ premium: null, commission: null, pieces: null, pieceAveragePremium: null, monthNum: 4 },
{ premium: null, commission: null, pieces: null, pieceAveragePremium: null, monthNum: 5 },
{ premium: null, commission: null, pieces: null, pieceAveragePremium: null, monthNum: 6 },
{ premium: null, commission: null, pieces: null, pieceAveragePremium: null, monthNum: 7 },
{ premium: null, commission: null, pieces: null, pieceAveragePremium: null, monthNum: 8 },
{ premium: null, commission: null, pieces: null, pieceAveragePremium: null, monthNum: 9 },
{ premium: null, commission: null, pieces: null, pieceAveragePremium: null, monthNum: 10 },
{ premium: null, commission: null, pieces: null, pieceAveragePremium: null, monthNum: 11 },
{ premium: null, commission: null, pieces: null, pieceAveragePremium: null, monthNum: 12 }
]
}
})
}
//修改平均值获取新的年度目标
changePremium() {
let premium = 0;
let commission = 0;
let pieceAveragePremium = 0;
for (let i = 0; i < this.salesTargetMonths.length; i++) {
premium += this.salesTargetMonths[i]['premium'];
commission += this.salesTargetMonths[i]['commission'];
pieceAveragePremium += this.salesTargetMonths[i]['pieceAveragePremium'];
}
this.premium = premium;
this.commission = commission;
this.pieceAveragePremium = pieceAveragePremium;
if (this.premium && this.pieceAveragePremium) {
this.pieces = Math.ceil(this.premium / this.pieceAveragePremium);
}
}
//获取月销售平均值
getMonthAverage(type) {
this.salesTargetMonths.forEach(item => {
if (type === 'premium') {
item.premium = Math.ceil(this.premium / 12);
}
if (type === 'commission') {
item.commission = Math.ceil(this.commission / 12);
}
if (type === 'pieceAveragePremium') {
item.pieceAveragePremium = this.pieceAveragePremium;
}
if (item.premium && Number(item.pieceAveragePremium)) {
item.pieces = Math.ceil((this.premium / this.pieceAveragePremium) / 12);
} else {
item.pieces = 0;
}
});
if (this.premium && Number(this.pieceAveragePremium)) {
this.pieces = Math.ceil(this.premium / this.pieceAveragePremium);
} else {
this.pieces = 0;
}
}
//月活动量保存
salesTargetMonthSave(goalsType) {
const param = {
practitionerId: this.practitionerId,
salesTargetActionsList: this.salesTargetActions,
goalsType: goalsType
}
this.myService.salesTargetMonthSave(param).subscribe((res) => {
if (res['success']) {
this.toastDialog = true;
this.toastInfo = {
status: 1,
msg: '保存成功!',
timeout: 3000,
align: 'center'
};
this.salesTargetQuery(goalsType);
} else {
this.toastDialog = true;
this.toastInfo = {
status: 1,
msg: res['message'],
timeout: 3000,
align: 'center'
};
}
})
}
//增员目标保存
potentialGoalsSetting() {
const recruitingParam = {
practitionerId: this.practitionerId,
numberRecruitsYear: this.numberRecruitsYear,
numberMDRTYear: this.numberMDRTYear,
recruitGoalForMonthList: this.recruitGoalForMonthList
}
this.myService.potentialGoalsSetting(recruitingParam).subscribe((res) => {
if (res['success']) {
this.toastDialog = true;
this.toastInfo = {
status: 1,
msg: '保存成功!',
timeout: 3000,
align: 'center'
};
this.potentialGoalsQuery();
} else {
this.toastDialog = true;
this.toastInfo = {
status: 1,
msg: res['message'],
timeout: 3000,
align: 'center'
};
}
})
}
//增员目标查询接口
potentialGoalsQuery() {
this.myService.potentialGoalsQuery({ practitionerId: this.practitionerId }).subscribe((res) => {
if (res['success']) {
this.numberRecruitsYear = res['data']['numberRecruitsYear'];
this.numberMDRTYear = res['data']['numberMDRTYear'];
if (res['data']['recruitGoalForMonthList'].length > 0) {
this.recruitGoalForMonthList = res['data']['recruitGoalForMonthList'];
this.recruitingTargetFlag = true;
this.recruitsReadonlyFlag = true;
} else {
this.recruitGoalForMonthList = [
{ numberMDRT: null, numberRecruits: null, month: 1 },
{ numberMDRT: null, numberRecruits: null, month: 2 },
{ numberMDRT: null, numberRecruits: null, month: 3 },
{ numberMDRT: null, numberRecruits: null, month: 4 },
{ numberMDRT: null, numberRecruits: null, month: 5 },
{ numberMDRT: null, numberRecruits: null, month: 6 },
{ numberMDRT: null, numberRecruits: null, month: 7 },
{ numberMDRT: null, numberRecruits: null, month: 8 },
{ numberMDRT: null, numberRecruits: null, month: 9 },
{ numberMDRT: null, numberRecruits: null, month: 10 },
{ numberMDRT: null, numberRecruits: null, month: 11 },
{ numberMDRT: null, numberRecruits: null, month: 12 }
]
this.recruitingTargetFlag = false;
this.recruitsReadonlyFlag = false;
}
} else {
this.numberRecruitsYear = null;
this.numberMDRTYear = null;
this.recruitingTargetFlag = false;
this.recruitGoalForMonthList = [
{ numberMDRT: null, numberRecruits: null, month: 1 },
{ numberMDRT: null, numberRecruits: null, month: 2 },
{ numberMDRT: null, numberRecruits: null, month: 3 },
{ numberMDRT: null, numberRecruits: null, month: 4 },
{ numberMDRT: null, numberRecruits: null, month: 5 },
{ numberMDRT: null, numberRecruits: null, month: 6 },
{ numberMDRT: null, numberRecruits: null, month: 7 },
{ numberMDRT: null, numberRecruits: null, month: 8 },
{ numberMDRT: null, numberRecruits: null, month: 9 },
{ numberMDRT: null, numberRecruits: null, month: 10 },
{ numberMDRT: null, numberRecruits: null, month: 11 },
{ numberMDRT: null, numberRecruits: null, month: 12 }
]
}
})
}
//获取月平均增员数
getMonthRecruitsAverage(type) {
this.recruitGoalForMonthList.forEach(item => {
if (type === 'Recruits') {
item.numberRecruits = Math.ceil(this.numberRecruitsYear / 12);
}
if (type === 'MDRT') {
item.numberMDRT = Math.ceil(this.numberMDRTYear / 12);
}
});
}
//获取总增员数
changeMonthRecruit() {
let numberRecruitsYear = 0;
let numberMDRTYear = 0;
for (let i = 0; i < this.recruitGoalForMonthList.length; i++) {
numberRecruitsYear += this.recruitGoalForMonthList[i]['numberRecruits'];
numberMDRTYear += this.recruitGoalForMonthList[i]['numberMDRT'];
}
this.numberRecruitsYear = numberRecruitsYear;
this.numberMDRTYear = numberMDRTYear;
}
//增员活动量查询
potentialGoalsActionsQuery() {
this.myService.potentialGoalsActionsQuery({ practitionerId: this.practitionerId }).subscribe((res) => {
if (res['success']) {
if (res['data']['goalsActionsInfoList']) {
this.goalsActionsInfoList = res['data']['goalsActionsInfoList'];
this.recruitsActivityReadonlyFlag = true;
} else {
this.recruitsActivityReadonlyFlag = false;
this.goalsActionsInfoList = [];
}
} else {
this.goalsActionsInfoList = [];
this.recruitsActivityReadonlyFlag = false;
}
})
}
//增员活动量更新
potentialGoalsActionsUpdate() {
const RecruitActionParam = {
practitionerId: this.practitionerId,
goalsActionsInfoList: this.goalsActionsInfoList
}
this.myService.potentialGoalsActionsUpdate(RecruitActionParam).subscribe((res) => {
if (res['success']) {
this.toastDialog = true;
this.toastInfo = {
status: 1,
msg: '保存成功!',
timeout: 3000,
align: 'center'
};
this.potentialGoalsActionsQuery();
} else {
this.toastDialog = true;
this.toastInfo = {
status: 1,
msg: res['message'],
timeout: 3000,
align: 'center'
};
}
})
}
inputBlur() {
window.scrollTo(0, 0)
}
}
...@@ -22,10 +22,12 @@ import { ThanksComponent } from './thanks/thanks.component'; ...@@ -22,10 +22,12 @@ import { ThanksComponent } from './thanks/thanks.component';
import { MySettingComponent } from './my-setting/my-setting.component'; import { MySettingComponent } from './my-setting/my-setting.component';
import { MySettingDetailComponent } from './my-setting-detail/my-setting-detail.component'; import { MySettingDetailComponent } from './my-setting-detail/my-setting-detail.component';
import { MyNewsComponent } from './my-news/my-news.component'; import { MyNewsComponent } from './my-news/my-news.component';
import { MyTargetComponent } from './my-target/my-target.component';
import { TeamPanelComponent } from './team-panel/team-panel.component';
@NgModule({ @NgModule({
declarations: [MyCenterHomeComponent, MkMaterialComponent, MkMaterialDetailComponent, FileUploadComponent, ImportantAnnouncementComponent, SalesDetailComponent, AnnouncementDetailComponent, MyBusinessComponent, MyBusinessDetailComponent, PickerComponent, ToastComponent, SalesRankComponent, TeamRankComponent, RecruitingComponent, RecruitingDetailComponent, ThanksComponent, MySettingComponent, MySettingDetailComponent, MyNewsComponent], declarations: [MyCenterHomeComponent, MkMaterialComponent, MkMaterialDetailComponent, FileUploadComponent, ImportantAnnouncementComponent, SalesDetailComponent, AnnouncementDetailComponent, MyBusinessComponent, MyBusinessDetailComponent, PickerComponent, ToastComponent, SalesRankComponent, TeamRankComponent, RecruitingComponent, RecruitingDetailComponent, ThanksComponent, MySettingComponent, MySettingDetailComponent, MyNewsComponent, MyTargetComponent, TeamPanelComponent],
imports: [ imports: [
CommonModule, CommonModule,
LifeCommonModule, LifeCommonModule,
......
...@@ -196,4 +196,67 @@ export class MyService { ...@@ -196,4 +196,67 @@ export class MyService {
return this.http return this.http
.post(url, JSON.stringify(param)); .post(url, JSON.stringify(param));
} }
//过渡页心灵鸡汤
knowledgeQry(param) {
const url = this.API + '/metadata/knowledgeQry';
return this.http
.post(url, JSON.stringify(param));
}
//经纪人商机分数统计
opportunityStatistics(param) {
const url = this.ydapi + '/practitioner/opportunityStatistics';
return this.http
.post(url, JSON.stringify(param));
}
//销售目标保存
salesTargetSave(param) {
const url = this.ydapi + '/practitioner/salesTargetSave';
return this.http
.post(url, JSON.stringify(param));
}
//查询销售目标
salesTargetQuery(param) {
const url = this.ydapi + '/practitioner/salesTargetQuery';
return this.http
.post(url, JSON.stringify(param));
}
//月均销售活动量
salesTargetMonthSave(param) {
const url = this.ydapi + '/practitioner/salesTargetMonthSave';
return this.http
.post(url, JSON.stringify(param));
}
//增员目标保存
potentialGoalsSetting(param) {
const url = this.ydapi + '/practitioner/potentialGoalsSetting';
return this.http
.post(url, JSON.stringify(param));
}
//增员目标查询接口
potentialGoalsQuery(param) {
const url = this.ydapi + '/practitioner/potentialGoalsQuery';
return this.http
.post(url, JSON.stringify(param));
}
//增员活动量更新
potentialGoalsActionsUpdate(param) {
const url = this.ydapi + '/practitioner/potentialGoalsActionsUpdate';
return this.http
.post(url, JSON.stringify(param));
}
//活动量查询
potentialGoalsActionsQuery(param) {
const url = this.ydapi + '/practitioner/potentialGoalsActionsQuery';
return this.http
.post(url, JSON.stringify(param));
}
} }
...@@ -62,7 +62,7 @@ ...@@ -62,7 +62,7 @@
width: 100%; width: 100%;
li{ li{
float: left; float: left;
width: 26%; width: 30%;
height: 34px; height: 34px;
line-height: 34px; line-height: 34px;
text-align: left; text-align: left;
...@@ -79,8 +79,8 @@ ...@@ -79,8 +79,8 @@
width: 16%; width: 16%;
text-align: center; text-align: center;
} }
li:nth-child(2),li:nth-child(3){ li:nth-child(3){
width: 25%; width: 20%;
} }
li:nth-child(4){ li:nth-child(4){
text-align: right; text-align: right;
......
<div class="taem_panel_wrapper">
<div class="teamInfo">
<span class="icon-tuandui iconfont"
style="position: absolute;width:45px;height:45px;line-height:35px;font-size: 30px;left:0;border: 1px #dcdcdc solid; padding: 5px;border-radius: 50%;"></span>
<div style="float: left;">{{subordinateSystemName}}战队</div>
</div>
<div class="taem_panel_item_wrapper">
<div class="taem_panel_item_top">
<div>
战队业绩
</div>
<ul class="tab">
<li>本月</li>
<li>季度</li>
<li>本年</li>
</ul>
</div>
<div class="taem_panel_item_content">
<ul>
<li>¥2,500</li>
<li>¥25</li>
<li>1</li>
<li>20%</li>
</ul>
<ul>
<li>首年保费</li>
<li>首年佣金</li>
<li>件数</li>
<li>达成率</li>
</ul>
</div>
<div class="next">
<span class="iconfont icon-xiangxia" routerLink="/teamRank"></span>
</div>
</div>
<div class="taem_panel_item_wrapper">
<div class="taem_panel_item_top">
<div>
战队销售活动量
</div>
</div>
<div class="taem_panel_item_content">
<ul>
<li>8</li>
<li>100</li>
<li>48</li>
<li>12</li>
</ul>
<ul>
<li>今天平均</li>
<li>本周平均</li>
<li>本月平均</li>
<li>本周新增商机</li>
</ul>
</div>
<div class="next">
<span class="iconfont icon-xiangxia"></span>
</div>
</div>
<div class="taem_panel_item_wrapper">
<div class="taem_panel_item_top">
<div>
战队销售业绩预测
</div>
<ul class="tab">
<li>本月</li>
<li>季度</li>
<li>本年</li>
</ul>
</div>
<div class="taem_panel_item_content">
<ul>
<li>¥2,500</li>
<li>¥25</li>
<li>1</li>
<li>20%</li>
</ul>
<ul>
<li>月保费预测</li>
<li>月佣金预测</li>
<li>月预计件数</li>
<li>月完成率</li>
</ul>
</div>
<div class="next">
<span class="iconfont icon-xiangxia"></span>
</div>
</div>
<div class="taem_panel_item_wrapper">
<div class="taem_panel_item_top">
<div>
我的增员活动量
</div>
</div>
<div class="taem_panel_item_content">
<ul>
<li>1</li>
<li>6</li>
<li>10</li>
<li>0</li>
</ul>
<ul>
<li>今天</li>
<li>本周</li>
<li>本月</li>
<li>本月新增对象</li>
</ul>
</div>
<div class="next">
<span class="iconfont icon-xiangxia" routerLink="/recruiting"></span>
</div>
</div>
</div>
\ No newline at end of file
.taem_panel_wrapper{
padding: 5px 8px;
background: #f6f7f2;
// background: #0664a4;
height: auto;
ul li,ol li{
list-style: none;
}
.teamInfo{
font-size: 24px;
position: relative;
display: flex;
align-items: center;
justify-content: center;
padding: 15px 0 10px 0;
text-align: center;
overflow: hidden;
border-radius: 6px;
color: #ff002a;
}
.taem_panel_item_wrapper{
margin: 10px 0;
background: #fff;
box-shadow: 0 0px 2.5px #eceaea;
border-radius: 6px;
padding: 8px 10px;
.taem_panel_item_top{
display: flex;
justify-content: space-between;
align-items: center;
height: 38px;
.tab{
display: flex;
width: 35%;
justify-content: space-around;
li{
width: 33%;
text-align: right;
}
}
}
.taem_panel_item_content{
ul{
display: flex;
justify-content: space-between;
li{
width: 25%;
text-align: center;
height: 30px;
line-height: 30px;
}
}
}
.next{
text-align: center;
}
}
}
\ No newline at end of file
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { TeamPanelComponent } from './team-panel.component';
describe('TeamPanelComponent', () => {
let component: TeamPanelComponent;
let fixture: ComponentFixture<TeamPanelComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ TeamPanelComponent ]
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(TeamPanelComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});
import { Component, OnInit } from '@angular/core';
@Component({
selector: 'ydlife-team-panel',
templateUrl: './team-panel.component.html',
styleUrls: ['./team-panel.component.scss']
})
export class TeamPanelComponent implements OnInit {
//战队名称
subordinateSystemName: any;
constructor() { }
ngOnInit() {
this.subordinateSystemName = sessionStorage.getItem('subordinateSystemName')
}
}
.salesWrapper{ .salesWrapper{
padding: 0 10px 20px 10px; padding: 0 10px 20px 10px;
// background: #0664a4; background: #f6f7f2;
background: #f7f7f2; // background: #f7f7f2;
min-height: 100%; min-height: 100%;
height: auto; height: auto;
ul,ol{ ul,ol{
......
...@@ -35,14 +35,30 @@ ...@@ -35,14 +35,30 @@
<span style="letter-spacing: 12px;">海纳百川</span> <span style="letter-spacing: 12px;">海纳百川</span>
<span style="letter-spacing: 12px;">·</span> <span style="letter-spacing: 12px;">·</span>
<span style="letter-spacing: 12px;">赢家后</span> <span style="letter-spacing: 12px;">赢家后</span>
</div>
</div> </div>
<div id="content" style="margin-top: 30%;text-align: center;padding: 0 15px;">
</div> </div>
</div> </div>
<div> <div>
</div> </div>
<script src="./assets/js/jquery.min.js"></script>
<script src="./assets/js/qrcode.js"></script>
<!--<script src="https://res.wx.qq.com/open/js/jweixin-1.4.0.js"></script>-->
<script src="https://res2.wx.qq.com/open/js/jweixin-1.4.0.js"></script>
<script src="./assets/LCalendar/LCalendar.js"></script>
<script src="./assets/laydate/laydate.js"></script>
<script type="text/javascript"> <script type="text/javascript">
//页面刷新的时候不出现
if (window.name == "") {
window.name = "isReload"; // 在首次进入页面时我们可以给window.name设置一个固定值
initialize();
} else if (window.name == "isReload") {
let loading = document.getElementById("adv");
loading.style.display = 'none';
}
const initialize = function () { const initialize = function () {
let loading = document.getElementById("adv"); let loading = document.getElementById("adv");
loading.style.display = 'block'; loading.style.display = 'block';
...@@ -55,13 +71,6 @@ ...@@ -55,13 +71,6 @@
} }
} }
} }
if (window.name == "") {
window.name = "isReload"; // 在首次进入页面时我们可以给window.name设置一个固定值
initialize();
} else if (window.name == "isReload") {
let loading = document.getElementById("adv");
loading.style.display = 'none';
}
//用于去除alert的url //用于去除alert的url
...@@ -74,13 +83,29 @@ ...@@ -74,13 +83,29 @@
iframe.parentNode.removeChild(iframe); iframe.parentNode.removeChild(iframe);
} }
// var api = 'https://' + window.location.host;
var api = 'https://mdev.zuihuibi.cn';
function getknowledgeQry() {
$.ajax({
type: "POST",
url: api + '/api/metadata/knowledgeQry',
contentType: "application/json",
data: JSON.stringify({
tagId: 35
}),
async: false,
success: function (res) {
console.log(res)
if (res['success']) {
let content = res['data']['knowledge']['content'];
$('#content').html(content)
}
}
})
}
getknowledgeQry();
</script> </script>
<script src="./assets/js/jquery.min.js"></script>
<script src="./assets/js/qrcode.js"></script>
<!--<script src="https://res.wx.qq.com/open/js/jweixin-1.4.0.js"></script>-->
<script src="https://res2.wx.qq.com/open/js/jweixin-1.4.0.js"></script>
<script src="./assets/LCalendar/LCalendar.js"></script>
<script src="./assets/laydate/laydate.js"></script>
</body> </body>
</html> </html>
\ No newline at end of file
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