Commit 87331dda by Sweet Zhang

生成名片

parents 754b23bd 0a037f46
...@@ -5,6 +5,7 @@ import { FormsModule } from "@angular/forms"; ...@@ -5,6 +5,7 @@ import { FormsModule } from "@angular/forms";
import { GuidePageComponent } from './guide-page/guide-page.component'; import { GuidePageComponent } from './guide-page/guide-page.component';
import { SafeHtmlPipe } from './safe-html.pipe'; import { SafeHtmlPipe } from './safe-html.pipe';
@NgModule({ @NgModule({
declarations: [AlertComponent, GuidePageComponent, SafeHtmlPipe], declarations: [AlertComponent, GuidePageComponent, SafeHtmlPipe],
imports: [ imports: [
......
...@@ -177,4 +177,51 @@ export class LifeCommonService { ...@@ -177,4 +177,51 @@ export class LifeCommonService {
let L = appU[appU.length - 1]; let L = appU[appU.length - 1];
return L; return L;
} }
toPercent(point) {
if (point == 0) {
return 0 + '%';
}
let result = String(point * 100);
let idx = result.indexOf(".");
if (idx == -1 || result.substr(idx + 1).length <= 2) {
return result + "%";
}
return result.substr(0, idx + 2) + "%";
}
transform(value: any, args?: any): any {
if ((value + "").trim() == "") {
return "";
}
if (typeof value == 'string') {
value = value.replace(/,/gi, '');
}
if ((value + "").trim() == "") {
return "";
}
if (isNaN(value)) {
return "";
}
value = value + "";
if (/^.*\..*$/.test(value)) {
let pointIndex = value.lastIndexOf(".");
let intPart = value.substring(0, pointIndex);
let pointPart = value.substring(pointIndex + 1, value.length);
intPart = intPart + "";
const re = /(-?\d+)(\d{3})/
while (re.test(intPart)) {
intPart = intPart.replace(re, "$1,$2")
}
value = intPart + "." + pointPart;
} else {
value = value + "";
var re = /(-?\d+)(\d{3})/
while (re.test(value)) {
value = value.replace(re, "$1,$2")
}
}
return value;
}
} }
import { SwitchNumberPipe } from './switch-number.pipe';
describe('SwitchNumberPipe', () => {
it('create an instance', () => {
const pipe = new SwitchNumberPipe();
expect(pipe).toBeTruthy();
});
});
import { Pipe, PipeTransform } from '@angular/core';
@Pipe({
name: 'switchNumber'
})
export class SwitchNumberPipe implements PipeTransform {
transform(value: any, args?: any): any {
if ((value + "").trim() == "") {
return "";
}
if (typeof value == 'string') {
value = value.replace(/,/gi, '');
}
if ((value + "").trim() == "") {
return "";
}
if (isNaN(value)) {
return "";
}
value = value + "";
if (/^.*\..*$/.test(value)) {
let pointIndex = value.lastIndexOf(".");
let intPart = value.substring(0, pointIndex);
let pointPart = value.substring(pointIndex + 1, value.length);
intPart = intPart + "";
const re = /(-?\d+)(\d{3})/
while (re.test(intPart)) {
intPart = intPart.replace(re, "$1,$2")
}
value = intPart + "." + pointPart;
} else {
value = value + "";
var re = /(-?\d+)(\d{3})/
while (re.test(value)) {
value = value.replace(re, "$1,$2")
}
}
return value;
}
}
...@@ -14,7 +14,8 @@ export class RecruitingQuery { ...@@ -14,7 +14,8 @@ export class RecruitingQuery {
public operateUserId?: string, public operateUserId?: string,
public potentialId?: any, public potentialId?: any,
public practitionerId?: any, public practitionerId?: any,
public createdAt?: any public createdAt?: any,
public timeToOnboarding?: any
) { ) {
} }
} }
\ No newline at end of file
...@@ -16,12 +16,12 @@ ...@@ -16,12 +16,12 @@
<div class="contentItem"> <div class="contentItem">
<span>姓名</span> <span>姓名</span>
<input class="form-control" type="text" placeholder="{{readonlyFlag ?'暂无姓名':'请输入姓名'}}" <input class="form-control" type="text" placeholder="{{readonlyFlag ?'暂无姓名':'请输入姓名'}}"
[(ngModel)]="editBusiness.name" [disabled]="readonlyFlag" /> [(ngModel)]="editBusiness.name" [disabled]="readonlyFlag" (blur)="inputBlur()" />
</div> </div>
<div class="contentItem"> <div class="contentItem">
<span>年龄</span> <span>年龄</span>
<input class="form-control" type="text" placeholder="{{readonlyFlag ?'暂无年龄信息':'请输入年龄'}}" <input class="form-control" type="text" placeholder="{{readonlyFlag ?'暂无年龄信息':'请输入年龄'}}"
[(ngModel)]="editBusiness.age" [disabled]="readonlyFlag" /> [(ngModel)]="editBusiness.age" [disabled]="readonlyFlag" (blur)="inputBlur()" />
</div> </div>
<div class="contentItem"> <div class="contentItem">
<span>性别</span> <span>性别</span>
...@@ -43,7 +43,7 @@ ...@@ -43,7 +43,7 @@
<div class="contentItem"> <div class="contentItem">
<span>血型</span> <span>血型</span>
<select name="bloodTypeId" id="bloodTypeId" class="form-control" [disabled]="readonlyFlag" <select name="bloodTypeId" id="bloodTypeId" class="form-control" [disabled]="readonlyFlag"
[(ngModel)]="editBusiness.bloodTypeId"> [(ngModel)]="editBusiness.bloodTypeId" (blur)="inputBlur()">
<option value="">{{readonlyFlag ?'暂无血型信息':'请选择血型'}}</option> <option value="">{{readonlyFlag ?'暂无血型信息':'请选择血型'}}</option>
<option *ngFor="let businessBloodItem of businessBloodList" [value]="businessBloodItem.id"> <option *ngFor="let businessBloodItem of businessBloodList" [value]="businessBloodItem.id">
{{businessBloodItem.dropOptionName}}</option> {{businessBloodItem.dropOptionName}}</option>
...@@ -54,7 +54,7 @@ ...@@ -54,7 +54,7 @@
<div class="contentItem"> <div class="contentItem">
<span>星座</span> <span>星座</span>
<select name="businessZodiacId" id="businessZodiacId" class="form-control" [disabled]="readonlyFlag" <select name="businessZodiacId" id="businessZodiacId" class="form-control" [disabled]="readonlyFlag"
[(ngModel)]="editBusiness.zodiacTypeId"> [(ngModel)]="editBusiness.zodiacTypeId" (blur)="inputBlur()">
<option value="">{{readonlyFlag ?'暂无星座信息':'请选择星座'}}</option> <option value="">{{readonlyFlag ?'暂无星座信息':'请选择星座'}}</option>
<option *ngFor="let businessZodiacItem of businessZodiacList" [value]="businessZodiacItem.id"> <option *ngFor="let businessZodiacItem of businessZodiacList" [value]="businessZodiacItem.id">
{{businessZodiacItem.dropOptionName}}</option> {{businessZodiacItem.dropOptionName}}</option>
...@@ -71,7 +71,7 @@ ...@@ -71,7 +71,7 @@
<i class="iconfont icon-dianhua" style="color: #e10d0d;"></i> <i class="iconfont icon-dianhua" style="color: #e10d0d;"></i>
{{editBusiness.mobileNo}}</a> {{editBusiness.mobileNo}}</a>
<input class="form-control" type="text" [(ngModel)]="editBusiness.mobileNo" *ngIf="opportunityId==0" <input class="form-control" type="text" [(ngModel)]="editBusiness.mobileNo" *ngIf="opportunityId==0"
placeholder="请输入手机号" maxlength="11" /> placeholder="请输入手机号" maxlength="11" (blur)="inputBlur()" />
</div> </div>
<div class="contentItem"> <div class="contentItem">
<span>微信</span> <span>微信</span>
...@@ -90,29 +90,29 @@ ...@@ -90,29 +90,29 @@
<div class="contentItem"> <div class="contentItem">
<span>预计FYP</span> <span>预计FYP</span>
<input class="form-control" type="number" placeholder="{{readonlyFlag ?'暂无预计FYP':'请输入预计FYP'}}" <input class="form-control" type="number" placeholder="{{readonlyFlag ?'暂无预计FYP':'请输入预计FYP'}}"
[disabled]="readonlyFlag" [(ngModel)]="editBusiness.fyp" /> [disabled]="readonlyFlag" [(ngModel)]="editBusiness.fyp" (blur)="inputBlur()" />
</div> </div>
<div class="contentItem"> <div class="contentItem">
<span>预计FYC</span> <span>预计FYC</span>
<input class="form-control" type="number" placeholder="{{readonlyFlag ?'暂无预计FYC':'请输入预计FYC'}}" <input class="form-control" type="number" placeholder="{{readonlyFlag ?'暂无预计FYC':'请输入预计FYC'}}"
[disabled]="readonlyFlag" [(ngModel)]="editBusiness.fyc" /> [disabled]="readonlyFlag" [(ngModel)]="editBusiness.fyc" (blur)="inputBlur()" />
</div> </div>
<div class="contentItem"> <div class="contentItem">
<span>预计成交件数</span> <span>预计成交件数</span>
<input class="form-control" type="number" placeholder="{{readonlyFlag ?'暂无预计件数':'请输入预计件数'}}" <input class="form-control" type="number" placeholder="{{readonlyFlag ?'暂无预计件数':'请输入预计件数'}}"
[disabled]="readonlyFlag" [(ngModel)]="editBusiness.pieces" /> [disabled]="readonlyFlag" [(ngModel)]="editBusiness.pieces" (blur)="inputBlur()" />
</div> </div>
<div class="contentItem"> <div class="contentItem">
<span>预计成交时间</span> <span>预计成交时间</span>
<input class="form-control" type="date" placeholder="{{readonlyFlag ?'暂无预计成交时间':'请输入预计成交时间'}}" <input class="form-control" type="date" placeholder="{{readonlyFlag ?'暂无预计成交时间':'请输入预计成交时间'}}"
[disabled]="readonlyFlag" [(ngModel)]="editBusiness.timeToClose" /> [disabled]="readonlyFlag" [(ngModel)]="editBusiness.timeToClose" (blur)="inputBlur()" />
</div> </div>
</div> </div>
<div class="wrapper_item"> <div class="wrapper_item">
<div class="contentItem"> <div class="contentItem">
<span>商机来源</span> <span>商机来源</span>
<select *ngIf="opportunityId==0" name="businessSourceId" id="businessSourceId" class="form-control" <select *ngIf="opportunityId==0" name="businessSourceId" id="businessSourceId" class="form-control"
[(ngModel)]="editBusiness.sourceFrom" [disabled]="readonlyFlag"> [(ngModel)]="editBusiness.sourceFrom" [disabled]="readonlyFlag" (blur)="inputBlur()">
<option value="">{{readonlyFlag ?'暂无商机来源':'请选择商机来源'}}</option> <option value="">{{readonlyFlag ?'暂无商机来源':'请选择商机来源'}}</option>
<option *ngFor="let businessSourceItem of businessSourceList" [value]="businessSourceItem.id"> <option *ngFor="let businessSourceItem of businessSourceList" [value]="businessSourceItem.id">
{{businessSourceItem.dropOptionName}}</option> {{businessSourceItem.dropOptionName}}</option>
...@@ -142,7 +142,7 @@ ...@@ -142,7 +142,7 @@
<span>备注</span> <span>备注</span>
<div style="padding: 6px 15px;padding: 6px 15px;"> <div style="padding: 6px 15px;padding: 6px 15px;">
<input class="form-control" type="text" [disabled]="readonlyFlag" [(ngModel)]="editBusiness.remark" <input class="form-control" type="text" [disabled]="readonlyFlag" [(ngModel)]="editBusiness.remark"
placeholder="备注信息" /> placeholder="备注信息" (blur)="inputBlur()" />
</div> </div>
</div> </div>
</div> </div>
...@@ -191,15 +191,15 @@ ...@@ -191,15 +191,15 @@
(click)="ownOpportunityRecordSave(opportunityRecordItem)"></i> (click)="ownOpportunityRecordSave(opportunityRecordItem)"></i>
</div> </div>
</li> </li>
<li> <!-- <li>
<div class="salesNotice">{{(editBusiness.opportunityDate).substr(0,10)}}</div> <div class="salesNotice">{{(editBusiness.opportunityDate).substr(0,10)}}</div>
<div style="display: flex;justify-content: space-between;"> <div style="display: flex;justify-content: space-between;">
<div>商机状态</div> <div>商机状态</div>
<div>待跟进</div> <div>待跟进</div>
</div> </div>
</li> </li> -->
</ul> </ul>
<div class="add" (click)="showToast()"> <div class="add" *ngIf="status==0" (click)="showToast()">
<!-- <i class="iconfont icon-jia" (click)="ownOpportunityRecordSave()"></i> --> <!-- <i class="iconfont icon-jia" (click)="ownOpportunityRecordSave()"></i> -->
<i class="iconfont icon-jiahao"></i> <i class="iconfont icon-jiahao"></i>
</div> </div>
......
...@@ -61,6 +61,7 @@ export class MyBusinessDetailComponent implements OnInit { ...@@ -61,6 +61,7 @@ export class MyBusinessDetailComponent implements OnInit {
//控制tab可不可点 //控制tab可不可点
clickFlag: boolean; clickFlag: boolean;
remarkId: any; remarkId: any;
status: 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 = [
...@@ -140,8 +141,9 @@ export class MyBusinessDetailComponent implements OnInit { ...@@ -140,8 +141,9 @@ export class MyBusinessDetailComponent implements OnInit {
this.opportunitySurveyAnswersList = res['data']['opportunityConsultationInfo']['opportunitySurveyAnswersList'] this.opportunitySurveyAnswersList = res['data']['opportunityConsultationInfo']['opportunitySurveyAnswersList']
this.editBusiness = res['data']['opportunityBasicInformationInfo']; this.editBusiness = res['data']['opportunityBasicInformationInfo'];
this.opportunityCustomerTags = res['data']['opportunityBasicInformationInfo']['opportunityCustomerTags'] this.opportunityCustomerTags = res['data']['opportunityBasicInformationInfo']['opportunityCustomerTags']
this.opportunityRecordInfos = res['data']['opportunityRecordInfos']; this.opportunityRecordInfos = res['data']['opportunityRecordSituationInfo']['opportunityRecordInfos'];
this.isCompletedQuestionnaire = res['data']['opportunityConsultationInfo']['isCompletedQuestionnaire']; this.isCompletedQuestionnaire = res['data']['opportunityConsultationInfo']['isCompletedQuestionnaire'];
this.status = res['data']['opportunityRecordSituationInfo']['status'];
//如果没有性别显示暂无性别 //如果没有性别显示暂无性别
if (!res['data']['opportunityBasicInformationInfo']['gender']) { if (!res['data']['opportunityBasicInformationInfo']['gender']) {
this.sexFlag = false; this.sexFlag = false;
......
...@@ -50,7 +50,7 @@ ...@@ -50,7 +50,7 @@
</li> </li>
<li>首年佣金</li> <li>首年佣金</li>
<li>件数</li> <li>件数</li>
<li>排名</li> <li>完成率</li>
</ul> </ul>
<ul class="performance_list"> <ul class="performance_list">
<li>线上</li> <li>线上</li>
...@@ -62,7 +62,7 @@ ...@@ -62,7 +62,7 @@
</li> </li>
<li class="markPrice">{{onlineInfo?.count?onlineInfo.count:'-'}}</li> <li class="markPrice">{{onlineInfo?.count?onlineInfo.count:'-'}}</li>
<li class="markPrice"> <li class="markPrice">
{{onlineInfo?.rank?onlineInfo.rank:'-'}} {{onlineInfo?.completionRate?onlineInfo.completionRate + '%':'-'}}
</li> </li>
</ul> </ul>
<ul class="performance_list"> <ul class="performance_list">
...@@ -75,7 +75,7 @@ ...@@ -75,7 +75,7 @@
</li> </li>
<li class="markPrice">{{offlineInfo?.count?offlineInfo.count:'-'}}</li> <li class="markPrice">{{offlineInfo?.count?offlineInfo.count:'-'}}</li>
<li class="markPrice"> <li class="markPrice">
{{offlineInfo?.rank?offlineInfo.rank:'-'}} {{offlineInfo?.completionRate?offlineInfo.completionRate + '%':'-'}}
</li> </li>
</ul> </ul>
</div> </div>
...@@ -93,16 +93,18 @@ ...@@ -93,16 +93,18 @@
<li>本月</li> <li>本月</li>
<li>本周达成率</li> <li>本周达成率</li>
<li>本月达成率</li> <li>本月达成率</li>
<li>本周新增</li> <li>本周新增商机</li>
</ul> </ul>
<ul class="activities"> <ul class="activities">
<li class="markPrice">{{this.activities_grade?.scoreDay}}</li> <li class="markPrice">{{this.activities_grade?.scoreDay}}</li>
<li class="markPrice">{{this.activities_grade?.scoreWeek}}</li> <li class="markPrice">{{this.activities_grade?.scoreWeek}}</li>
<li class="markPrice">{{this.activities_grade?.scoreMonth}}</li> <li class="markPrice">{{this.activities_grade?.scoreMonth}}</li>
<li class="markPrice"> <li class="markPrice">
{{this.activities_grade?.achievementRateWeek!=null ? this.activities_grade?.achievementRateWeek:'-'}}</li> {{this.activities_grade?.achievementRateWeek!=null ? lifeCommonService.toPercent(this.activities_grade?.achievementRateWeek) :'-'}}
</li>
<li class="markPrice"> <li class="markPrice">
{{this.activities_grade?.achievementRateMonth!=null ?this.activities_grade?.achievementRateMonth :'-'}}</li> {{this.activities_grade?.achievementRateMonth!=null ? lifeCommonService.toPercent(this.activities_grade?.achievementRateMonth) :'-'}}
</li>
<li class="markPrice">{{this.activities_grade?.addOpportunityNum}}</li> <li class="markPrice">{{this.activities_grade?.addOpportunityNum}}</li>
</ul> </ul>
</div> </div>
......
...@@ -192,14 +192,15 @@ ...@@ -192,14 +192,15 @@
display: flex; display: flex;
font-size: 14px; font-size: 14px;
li{ li{
width: 20%; width: 23%;
text-align: center; text-align: center;
line-height: 25px; line-height: 25px;
font-size: 12px; font-size: 12px;
color: #fff; color: #fff;
overflow: hidden;
} }
li:nth-child(1),li:nth-child(2),li:nth-child(3){ li:nth-child(1),li:nth-child(2),li:nth-child(3){
width: 15%; width: 12%;
} }
li.markPrice{ li.markPrice{
color: #fff; color: #fff;
......
...@@ -37,7 +37,7 @@ export class MyCenterHomeComponent implements OnInit, AfterViewInit { ...@@ -37,7 +37,7 @@ export class MyCenterHomeComponent implements OnInit, AfterViewInit {
constructor( constructor(
private router: Router, private router: Router,
private lifeCommonService: LifeCommonService, public lifeCommonService: LifeCommonService,
private myService: MyService, private myService: MyService,
private ls: LocalStorage, private ls: LocalStorage,
private activatedRoute: ActivatedRoute, private activatedRoute: ActivatedRoute,
...@@ -89,7 +89,7 @@ export class MyCenterHomeComponent implements OnInit, AfterViewInit { ...@@ -89,7 +89,7 @@ export class MyCenterHomeComponent implements OnInit, AfterViewInit {
{ {
title: '我的团队', title: '我的团队',
content: [ content: [
{ no: 15, subtitle: '我的团队', icon: 'icon-tuandui', path: '', routerLink: 'teamPanel' }, { no: 15, subtitle: '我的团队', icon: 'icon-tuandui', path: '', routerLink: '' },
// { 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: '' },
...@@ -134,6 +134,8 @@ export class MyCenterHomeComponent implements OnInit, AfterViewInit { ...@@ -134,6 +134,8 @@ export class MyCenterHomeComponent implements OnInit, AfterViewInit {
this.router.navigate(['/salesDetail'], { queryParams: { searchType: this.performanceSelectedFlag, showType: 'orderform' } }); this.router.navigate(['/salesDetail'], { queryParams: { searchType: this.performanceSelectedFlag, showType: 'orderform' } });
} else if (item.no === 14) { } else if (item.no === 14) {
this.router.navigate(['/salesDetail'], { queryParams: { searchType: this.performanceSelectedFlag, showType: 'sales' } }); this.router.navigate(['/salesDetail'], { queryParams: { searchType: this.performanceSelectedFlag, showType: 'sales' } });
} else if (item.no === 15) {
this.router.navigate(['/teamPanel'])
} else if (!item.subtitle) { } else if (!item.subtitle) {
return; return;
} else if (item.no === 18) { } else if (item.no === 18) {
......
...@@ -20,6 +20,7 @@ import { MySettingDetailComponent } from './my-setting-detail/my-setting-detail. ...@@ -20,6 +20,7 @@ import { MySettingDetailComponent } from './my-setting-detail/my-setting-detail.
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 { MyTargetComponent } from "./my-target/my-target.component";
import { TeamPanelComponent } from './team-panel/team-panel.component'; import { TeamPanelComponent } from './team-panel/team-panel.component';
import { TeamSalesScoreComponent } from './team-sales-score/team-sales-score.component';
import {BusinessCardComponent} from "./business-card/business-card.component"; import {BusinessCardComponent} from "./business-card/business-card.component";
const myRoutes: Routes = [ const myRoutes: Routes = [
...@@ -43,8 +44,8 @@ const myRoutes: Routes = [ ...@@ -43,8 +44,8 @@ const myRoutes: Routes = [
{ path: 'news', component: MyNewsComponent, canActivate: [AuthGuard] }, { path: 'news', component: MyNewsComponent, canActivate: [AuthGuard] },
{ path: 'target', component: MyTargetComponent, canActivate: [AuthGuard] }, { path: 'target', component: MyTargetComponent, canActivate: [AuthGuard] },
{ path: 'teamPanel', component: TeamPanelComponent, canActivate: [AuthGuard] }, { path: 'teamPanel', component: TeamPanelComponent, canActivate: [AuthGuard] },
{ path: 'teamPanel/:type', component: TeamSalesScoreComponent, canActivate: [AuthGuard] },
{ path: 'businessCard', component: BusinessCardComponent, canActivate: [AuthGuard] }, { path: 'businessCard', component: BusinessCardComponent, canActivate: [AuthGuard] },
]; ];
@NgModule({ @NgModule({
......
...@@ -37,5 +37,5 @@ ...@@ -37,5 +37,5 @@
<span class="iconfont icon-ar-r"></span> <span class="iconfont icon-ar-r"></span>
</div> </div>
</div> </div>
<div class="saveBtn" (click)="getOut()">退出</div> <div class="saveBtn" (click)="getOut()">退出系统</div>
</div> </div>
\ No newline at end of file
...@@ -18,10 +18,15 @@ ...@@ -18,10 +18,15 @@
<div class="content_target" *ngIf="searchType===1"> <div class="content_target" *ngIf="searchType===1">
<div class="content_target_wrapper"> <div class="content_target_wrapper">
<div class="line"> <div class="line">
<i class="iconfont icon-bianji" *ngIf="personalSalesReadonlyFlag" (click)="personalSalesReadonlyFlag = false;">
</i>
<i class="iconfont icon-save" *ngIf="!personalSalesReadonlyFlag" (click)="salesTargetSave(1)">
<span class="save">保存</span>
</i>
<div class="title">个人年度销售目标</div> <div class="title">个人年度销售目标</div>
<div class="content_target_item"> <div class="content_target_item">
<span>首年保费FYP</span> <span>首年保费FYP</span>
<input class="form-control" type="text" [(ngModel)]="premium" (ngModelChange)="getMonthAverage('premium')" <input class="form-control" type="text" [(ngModel)]="premium" (ngModelChange)="getMonthAverage('premium');"
(blur)="inputBlur()" placeholder="{{personalSalesReadonlyFlag?'暂无预计年保费':'请输入预计年保费'}}" (blur)="inputBlur()" placeholder="{{personalSalesReadonlyFlag?'暂无预计年保费':'请输入预计年保费'}}"
[disabled]="personalSalesReadonlyFlag" /> [disabled]="personalSalesReadonlyFlag" />
</div> </div>
...@@ -44,16 +49,14 @@ ...@@ -44,16 +49,14 @@
</div> </div>
</div> </div>
<div class="line"> <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="title">个人月销售目标</div>
<div class="month_target_item_wrapper" *ngFor="let salesTargetMonthsItem of salesTargetMonths"> <div class="month_target_item_wrapper" *ngFor="let salesTargetMonthsItem of salesTargetMonths">
<span style="font-weight: bold;">{{salesTargetMonthsItem.monthNum}}月销售目标</span> <span class="dot" style="font-weight: bold;">{{salesTargetMonthsItem.monthNum}}月</span>
<div class="content_target_item"> <div class="content_target_item">
<span>FYP</span> <span>FYP</span>
<input type="number" class="form-control" placeholder="{{personalSalesReadonlyFlag?'暂无目标保费':'请输入目标保费'}}" <input type="text" class="form-control" placeholder="{{personalSalesReadonlyFlag?'暂无目标保费':'请输入目标保费'}}"
[(ngModel)]="salesTargetMonthsItem.premium" (ngModelChange)="changePremium()" [(ngModel)]="salesTargetMonthsItem.premium" (ngModelChange)="changePremium();"
[disabled]="personalSalesReadonlyFlag" (blur)="inputBlur()"> [disabled]="personalSalesReadonlyFlag" (blur)="inputBlur()">
</div> </div>
<div class="content_target_item"> <div class="content_target_item">
...@@ -77,9 +80,11 @@ ...@@ -77,9 +80,11 @@
<i class="iconfont icon-bianji" *ngIf="personalSalesActivityFlag" <i class="iconfont icon-bianji" *ngIf="personalSalesActivityFlag"
(click)="personalSalesActivityFlag = false;"></i> (click)="personalSalesActivityFlag = false;"></i>
<i class="iconfont icon-save" *ngIf="!readonlyFlag && salesTargetFlag && !personalSalesActivityFlag" <i class="iconfont icon-save" *ngIf="!readonlyFlag && salesTargetFlag && !personalSalesActivityFlag"
(click)="salesTargetMonthSave(1)"></i> (click)="salesTargetMonthSave(1)">
<span class="save">保存</span>
</i>
<div class="title">月均销售活动量目标</div> <div class="title">月均销售活动量目标</div>
<div *ngIf="!salesTargetFlag" style="text-align: center;">请先设置销售目标</div> <div *ngIf="!salesTargetActions || salesTargetActions.length<=0" style="text-align: center;">请先设置销售目标</div>
<div class="content_target_item" *ngFor="let salesTargetActionItem of salesTargetActions"> <div class="content_target_item" *ngFor="let salesTargetActionItem of salesTargetActions">
<span>{{salesTargetActionItem.leadsActionName}}</span> <span>{{salesTargetActionItem.leadsActionName}}</span>
<input class="form-control" type="text" [(ngModel)]="salesTargetActionItem.actionStandards" <input class="form-control" type="text" [(ngModel)]="salesTargetActionItem.actionStandards"
...@@ -93,7 +98,9 @@ ...@@ -93,7 +98,9 @@
<div class="content_target_wrapper"> <div class="content_target_wrapper">
<div class="line"> <div class="line">
<i class="iconfont icon-bianji" *ngIf="recruitsReadonlyFlag" (click)="recruitsReadonlyFlag = false;"></i> <i class="iconfont icon-bianji" *ngIf="recruitsReadonlyFlag" (click)="recruitsReadonlyFlag = false;"></i>
<i class="iconfont icon-save" *ngIf="!recruitsReadonlyFlag" (click)="potentialGoalsSetting()"></i> <i class="iconfont icon-save" *ngIf="!recruitsReadonlyFlag" (click)="potentialGoalsSetting()">
<span class="save">保存</span>
</i>
<div class="title">年增员目标</div> <div class="title">年增员目标</div>
<div class="content_target_item"> <div class="content_target_item">
<span>年度增员目标</span> <span>年度增员目标</span>
...@@ -111,9 +118,8 @@ ...@@ -111,9 +118,8 @@
<div class="line"> <div class="line">
<div class="title">月增员目标</div> <div class="title">月增员目标</div>
<div class="month_target_item_wrapper" *ngFor="let recruitGoalForMonthItem of recruitGoalForMonthList"> <div class="month_target_item_wrapper" *ngFor="let recruitGoalForMonthItem of recruitGoalForMonthList">
<span style="font-weight: bold;">{{recruitGoalForMonthItem.month}}月增员目标</span>
<div class="content_target_item"> <div class="content_target_item">
<span>增员目标数</span> <span>{{recruitGoalForMonthItem.month}}月增员目标数</span>
<input type="number" class="form-control" placeholder="请输入增员目标数" [disabled]="recruitsReadonlyFlag" <input type="number" class="form-control" placeholder="请输入增员目标数" [disabled]="recruitsReadonlyFlag"
[(ngModel)]="recruitGoalForMonthItem.numberRecruits" (ngModelChange)="changeMonthRecruit()" [(ngModel)]="recruitGoalForMonthItem.numberRecruits" (ngModelChange)="changeMonthRecruit()"
(blur)="inputBlur()"> (blur)="inputBlur()">
...@@ -129,9 +135,9 @@ ...@@ -129,9 +135,9 @@
<i class="iconfont icon-bianji" *ngIf="recruitsActivityReadonlyFlag" <i class="iconfont icon-bianji" *ngIf="recruitsActivityReadonlyFlag"
(click)="recruitsActivityReadonlyFlag = false;"></i> (click)="recruitsActivityReadonlyFlag = false;"></i>
<i class="iconfont icon-save" *ngIf="!readonlyFlag && recruitingTargetFlag && !recruitsActivityReadonlyFlag" <i class="iconfont icon-save" *ngIf="!readonlyFlag && recruitingTargetFlag && !recruitsActivityReadonlyFlag"
(click)="potentialGoalsActionsUpdate()"></i> (click)="potentialGoalsActionsUpdate()"> <span class="save">保存</span></i>
<div class="title">月均增员活动量目标</div> <div class="title">月均增员活动量目标</div>
<div *ngIf="!recruitingTargetFlag" style="text-align: center;">请先设置增员目标</div> <div *ngIf="!goalsActionsInfoList || goalsActionsInfoList.length<=0" style="text-align: center;">请先设置增员目标</div>
<div class="content_target_item" *ngFor="let goalsActionsInfoItem of goalsActionsInfoList"> <div class="content_target_item" *ngFor="let goalsActionsInfoItem of goalsActionsInfoList">
<span>{{goalsActionsInfoItem.potentialActionName}}</span> <span>{{goalsActionsInfoItem.potentialActionName}}</span>
<input type="number" style="width: 30%;" class="form-control" <input type="number" style="width: 30%;" class="form-control"
...@@ -145,6 +151,10 @@ ...@@ -145,6 +151,10 @@
<div class="content_target" *ngIf="searchType===5"> <div class="content_target" *ngIf="searchType===5">
<div class="content_target_wrapper"> <div class="content_target_wrapper">
<div class="line"> <div class="line">
<i class="iconfont icon-bianji" *ngIf="personalSalesReadonlyFlag"
(click)="personalSalesReadonlyFlag = false;"></i>
<i class="iconfont icon-save" *ngIf="!personalSalesReadonlyFlag" (click)="salesTargetSave(2)">
<span class="save">保存</span></i>
<div class="title">团队年度销售目标</div> <div class="title">团队年度销售目标</div>
<div class="content_target_item"> <div class="content_target_item">
<span>首年保费FYP</span> <span>首年保费FYP</span>
...@@ -170,12 +180,9 @@ ...@@ -170,12 +180,9 @@
</div> </div>
</div> </div>
<div class="line"> <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="title">团队月销售目标</div>
<div class="month_target_item_wrapper" *ngFor="let salesTargetMonthsItem of salesTargetMonths"> <div class="month_target_item_wrapper" *ngFor="let salesTargetMonthsItem of salesTargetMonths">
<span style="font-weight: bold;">{{salesTargetMonthsItem.monthNum}}月销售目标</span> <span class="dot" style="font-weight: bold;">{{salesTargetMonthsItem.monthNum}}月</span>
<div class="content_target_item"> <div class="content_target_item">
<span>FYP</span> <span>FYP</span>
<input type="number" class="form-control" placeholder="{{personalSalesReadonlyFlag?'暂无目标保费':'请输入目标保费'}}" <input type="number" class="form-control" placeholder="{{personalSalesReadonlyFlag?'暂无目标保费':'请输入目标保费'}}"
......
...@@ -47,7 +47,6 @@ ul li,ol li{ ...@@ -47,7 +47,6 @@ ul li,ol li{
.iconfont{ .iconfont{
width: 55px; width: 55px;
height: 55px; height: 55px;
line-height: 55px;
border-radius: 50%; border-radius: 50%;
position: absolute; position: absolute;
right: 10px; right: 10px;
...@@ -56,13 +55,21 @@ ul li,ol li{ ...@@ -56,13 +55,21 @@ ul li,ol li{
background: #0767bf; background: #0767bf;
text-align: center; text-align: center;
top: -5px; top: -5px;
.save{
font-size: 12px;
position: absolute;
left: 30%;
top: 60%;
}
}
.iconfont.icon-bianji{
line-height: 55px;
} }
.title{ .title{
font-size: 16px; font-size: 16px;
font-weight: bold; font-weight: bold;
margin: 10px 0 15px 0; margin: 10px 0 15px 0;
} }
.content_target_item{ .content_target_item{
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
...@@ -78,14 +85,24 @@ ul li,ol li{ ...@@ -78,14 +85,24 @@ ul li,ol li{
box-shadow: none; box-shadow: none;
display: flex; display: flex;
flex-wrap: wrap; flex-wrap: wrap;
font-size: 18px;
} }
.form-control[disabled], .form-control[readonly], fieldset[disabled] .form-control{ .form-control[disabled], .form-control[readonly], fieldset[disabled] .form-control{
opacity:.5 opacity:.75;
} }
} }
.month_target_item_wrapper{ .month_target_item_wrapper{
margin-bottom: 15px; margin-bottom: 15px;
.dot{
width: 35px;
height: 35px;
line-height: 35px;
background: #ff002a;
border-radius: 50%;
color: #fff;
display: block;
text-align: center;
}
} }
.content_target_monthItem{ .content_target_monthItem{
border: 1px #ddd solid; border: 1px #ddd solid;
......
...@@ -20,13 +20,13 @@ export class MyTargetComponent implements OnInit { ...@@ -20,13 +20,13 @@ export class MyTargetComponent implements OnInit {
salesTargetMonths: Array<any>; salesTargetMonths: Array<any>;
practitionerId: any; practitionerId: any;
//个人保费 //个人保费
premium: number; premium: any;
//个人佣金 //个人佣金
commission: number; commission: any;
//个人件数 //个人件数
pieces: number; pieces: any;
//个人件平均保费 //个人件平均保费
pieceAveragePremium: number; pieceAveragePremium: any;
recruitGoalForMonthList: Array<any>; recruitGoalForMonthList: Array<any>;
numberRecruitsYear: number; numberRecruitsYear: number;
numberMDRTYear: number; numberMDRTYear: number;
...@@ -39,6 +39,7 @@ export class MyTargetComponent implements OnInit { ...@@ -39,6 +39,7 @@ export class MyTargetComponent implements OnInit {
goalsActionsInfoList: Array<any>; goalsActionsInfoList: Array<any>;
salesTargetFlag: boolean = true; salesTargetFlag: boolean = true;
recruitingTargetFlag: boolean = true; recruitingTargetFlag: boolean = true;
money: any;
constructor(private myService: MyService) { } constructor(private myService: MyService) { }
ngOnInit() { ngOnInit() {
...@@ -124,20 +125,7 @@ export class MyTargetComponent implements OnInit { ...@@ -124,20 +125,7 @@ export class MyTargetComponent implements OnInit {
this.personalSalesReadonlyFlag = true; this.personalSalesReadonlyFlag = true;
this.personalSalesActivityFlag = true; this.personalSalesActivityFlag = true;
} else { } else {
this.salesTargetMonths = [ this.initSalesTargetMonths();
{ 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.salesTargetFlag = false;
this.personalSalesReadonlyFlag = false; this.personalSalesReadonlyFlag = false;
this.personalSalesActivityFlag = false; this.personalSalesActivityFlag = false;
...@@ -150,20 +138,7 @@ export class MyTargetComponent implements OnInit { ...@@ -150,20 +138,7 @@ export class MyTargetComponent implements OnInit {
} else { } else {
this.commission = this.pieceAveragePremium = this.pieces = this.premium = null; this.commission = this.pieceAveragePremium = this.pieces = this.premium = null;
this.salesTargetFlag = false; this.salesTargetFlag = false;
this.salesTargetMonths = [ this.initSalesTargetMonths()
{ 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 }
]
} }
}) })
} }
...@@ -188,6 +163,22 @@ export class MyTargetComponent implements OnInit { ...@@ -188,6 +163,22 @@ export class MyTargetComponent implements OnInit {
//获取月销售平均值 //获取月销售平均值
getMonthAverage(type) { getMonthAverage(type) {
// let premium, pieceAveragePremium, commission;
// if (String(this.premium).indexOf(",") != -1) {
// premium = this.premium.replace(/,/g, '');
// } else {
// premium = this.premium;
// }
// if (String(this.pieceAveragePremium).indexOf(",") != -1) {
// pieceAveragePremium = this.pieceAveragePremium.replace(/,/g, '');
// } else {
// pieceAveragePremium = this.pieceAveragePremium
// }
// if (String(this.commission).indexOf(",") != -1) {
// commission = this.commission.replace(/,/g, '');
// } else {
// commission = this.commission
// }
this.salesTargetMonths.forEach(item => { this.salesTargetMonths.forEach(item => {
if (type === 'premium') { if (type === 'premium') {
item.premium = Math.ceil(this.premium / 12); item.premium = Math.ceil(this.premium / 12);
...@@ -281,20 +272,7 @@ export class MyTargetComponent implements OnInit { ...@@ -281,20 +272,7 @@ export class MyTargetComponent implements OnInit {
this.recruitingTargetFlag = true; this.recruitingTargetFlag = true;
this.recruitsReadonlyFlag = true; this.recruitsReadonlyFlag = true;
} else { } else {
this.recruitGoalForMonthList = [ this.initRecruitGoalForMonthList();
{ 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.recruitingTargetFlag = false;
this.recruitsReadonlyFlag = false; this.recruitsReadonlyFlag = false;
} }
...@@ -302,20 +280,7 @@ export class MyTargetComponent implements OnInit { ...@@ -302,20 +280,7 @@ export class MyTargetComponent implements OnInit {
this.numberRecruitsYear = null; this.numberRecruitsYear = null;
this.numberMDRTYear = null; this.numberMDRTYear = null;
this.recruitingTargetFlag = false; this.recruitingTargetFlag = false;
this.recruitGoalForMonthList = [ this.initRecruitGoalForMonthList();
{ 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 }
]
} }
}) })
} }
...@@ -393,4 +358,40 @@ export class MyTargetComponent implements OnInit { ...@@ -393,4 +358,40 @@ export class MyTargetComponent implements OnInit {
inputBlur() { inputBlur() {
window.scrollTo(0, 0) window.scrollTo(0, 0)
} }
//初始化增员目标
initRecruitGoalForMonthList() {
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 }
]
}
//初始化商机目标
initSalesTargetMonths() {
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 }
]
}
} }
import { NgModule } from '@angular/core'; import {NgModule} from '@angular/core';
import { CommonModule } from '@angular/common'; import {CommonModule} from '@angular/common';
import { DatePipe } from "@angular/common"; import {DatePipe} from "@angular/common";
import { MyRoutingModule } from './my-routing.module'; import {MyRoutingModule} from './my-routing.module';
import { MyCenterHomeComponent } from './my-center-home/my-center-home.component'; import {MyCenterHomeComponent} from './my-center-home/my-center-home.component';
import { LifeCommonModule } from "../common/life-common.module"; import {LifeCommonModule} from "../common/life-common.module";
import { MkMaterialComponent } from './mk-material/mk-material.component'; import {MkMaterialComponent} from './mk-material/mk-material.component';
import { MkMaterialDetailComponent } from './mk-material-detail/mk-material-detail.component'; import {MkMaterialDetailComponent} from './mk-material-detail/mk-material-detail.component';
import { FileUploadComponent } from './file-upload/file-upload.component'; import {FileUploadComponent} from './file-upload/file-upload.component';
import { ImportantAnnouncementComponent } from './important-announcement/important-announcement.component'; import {ImportantAnnouncementComponent} from './important-announcement/important-announcement.component';
import { SalesDetailComponent } from './sales-detail/sales-detail.component'; import {SalesDetailComponent} from './sales-detail/sales-detail.component';
import { AnnouncementDetailComponent } from './announcement-detail/announcement-detail.component'; import {AnnouncementDetailComponent} from './announcement-detail/announcement-detail.component';
import { MyBusinessComponent } from './my-business/my-business.component'; import {MyBusinessComponent} from './my-business/my-business.component';
import { MyBusinessDetailComponent } from './my-business-detail/my-business-detail.component'; import {MyBusinessDetailComponent} from './my-business-detail/my-business-detail.component';
import { PickerComponent } from '../common/picker/picker.component'; import {PickerComponent} from '../common/picker/picker.component';
import { ToastComponent } from '../common/toast/toast.component'; import {ToastComponent} from '../common/toast/toast.component';
import { SalesRankComponent } from './sales-rank/sales-rank.component'; import {SalesRankComponent} from './sales-rank/sales-rank.component';
import { TeamRankComponent } from './team-rank/team-rank.component'; import {TeamRankComponent} from './team-rank/team-rank.component';
import { RecruitingComponent } from './recruiting/recruiting.component'; import {RecruitingComponent} from './recruiting/recruiting.component';
import { RecruitingDetailComponent } from './recruiting-detail/recruiting-detail.component'; import {RecruitingDetailComponent} from './recruiting-detail/recruiting-detail.component';
import { ThanksComponent } from './thanks/thanks.component'; 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 {MyTargetComponent} from './my-target/my-target.component';
import { TeamPanelComponent } from './team-panel/team-panel.component'; import {TeamPanelComponent} from './team-panel/team-panel.component';
import { BusinessCardComponent } from './business-card/business-card.component'; import {SwitchNumberPipe} from '../common/pipe/switch-number.pipe';
import {TeamSalesScoreComponent} from './team-sales-score/team-sales-score.component';
import {BusinessCardComponent} from './business-card/business-card.component';
@NgModule({ @NgModule({
declarations: [MyCenterHomeComponent, MkMaterialComponent, MkMaterialDetailComponent, FileUploadComponent, ImportantAnnouncementComponent, SalesDetailComponent, AnnouncementDetailComponent, MyBusinessComponent, MyBusinessDetailComponent, PickerComponent, ToastComponent, SalesRankComponent, TeamRankComponent, RecruitingComponent, RecruitingDetailComponent, ThanksComponent, MySettingComponent, MySettingDetailComponent, MyNewsComponent, MyTargetComponent, TeamPanelComponent, BusinessCardComponent], declarations: [MyCenterHomeComponent, MkMaterialComponent, MkMaterialDetailComponent, FileUploadComponent, ImportantAnnouncementComponent, SalesDetailComponent, AnnouncementDetailComponent, MyBusinessComponent, MyBusinessDetailComponent, PickerComponent, ToastComponent, SalesRankComponent, TeamRankComponent, RecruitingComponent, RecruitingDetailComponent, ThanksComponent, MySettingComponent, MySettingDetailComponent, MyNewsComponent, MyTargetComponent, TeamPanelComponent, SwitchNumberPipe, TeamSalesScoreComponent,
BusinessCardComponent
],
imports: [ imports: [
CommonModule, CommonModule,
LifeCommonModule, LifeCommonModule,
......
...@@ -128,7 +128,7 @@ export class MyService { ...@@ -128,7 +128,7 @@ export class MyService {
//查询团队业绩及是否团队长 //查询团队业绩及是否团队长
subordinateSystemMemberQuery(practitionerId) { subordinateSystemMemberQuery(practitionerId) {
const url = this.API + '/practitioner/subordinateSystemMemberQuery'; const url = this.ydapi + '/practitioner/subordinateSystemMemberQuery';
return this.http return this.http
.post(url, JSON.stringify(practitionerId)); .post(url, JSON.stringify(practitionerId));
} }
...@@ -259,4 +259,32 @@ export class MyService { ...@@ -259,4 +259,32 @@ export class MyService {
return this.http return this.http
.post(url, JSON.stringify(param)); .post(url, JSON.stringify(param));
} }
//团队平均
teamActionsAverageQuery(param) {
const url = this.ydapi + '/practitioner/teamActionsAverageQuery';
return this.http
.post(url, JSON.stringify(param));
}
//增员统计
potentialActivityQuery(param) {
const url = this.ydapi + '/practitioner/potentialActivityQuery';
return this.http
.post(url, JSON.stringify(param));
}
//团队成员销售活动量得分
playerSalesActivityQuery(param) {
const url = this.ydapi + '/practitioner/playerSalesActivityQuery';
return this.http
.post(url, JSON.stringify(param));
}
//战队成员销售业绩预测
salesPerformanceForecastListQuery(param) {
const url = this.ydapi + '/practitioner/salesPerformanceForecastListQuery';
return this.http
.post(url, JSON.stringify(param));
}
} }
...@@ -15,7 +15,7 @@ ...@@ -15,7 +15,7 @@
<div class="contentItem"> <div class="contentItem">
<span><sub>*</sub>姓名</span> <span><sub>*</sub>姓名</span>
<input class="form-control" type="text" placeholder="{{readonlyFlag ?'暂无姓名':'请输入姓名'}}" <input class="form-control" type="text" placeholder="{{readonlyFlag ?'暂无姓名':'请输入姓名'}}"
[(ngModel)]="editRecruiting.name" [disabled]="readonlyFlag" /> [(ngModel)]="editRecruiting.name" [disabled]="readonlyFlag" (blur)="inputBlur()" />
</div> </div>
<div class="contentItem"> <div class="contentItem">
<span>年龄</span> <span>年龄</span>
...@@ -59,7 +59,7 @@ ...@@ -59,7 +59,7 @@
<div class="contentItem"> <div class="contentItem">
<span>学历</span> <span>学历</span>
<select class="form-control" [(ngModel)]="editRecruiting.educationLevel" [disabled]="readonlyFlag" <select class="form-control" [(ngModel)]="editRecruiting.educationLevel" [disabled]="readonlyFlag"
style=" direction: rtl;"> style=" direction: rtl;" (blur)="inputBlur()">
<option value=''>{{readonlyFlag ?'暂无学历信息':'请选择学历'}}</option> <option value=''>{{readonlyFlag ?'暂无学历信息':'请选择学历'}}</option>
<option *ngFor="let educationLevelItem of educationLevelList" [value]="educationLevelItem.id"> <option *ngFor="let educationLevelItem of educationLevelList" [value]="educationLevelItem.id">
{{educationLevelItem.name}} {{educationLevelItem.name}}
...@@ -69,7 +69,7 @@ ...@@ -69,7 +69,7 @@
<div class="contentItem"> <div class="contentItem">
<span>招募来源</span> <span>招募来源</span>
<select class="form-control" [(ngModel)]="editRecruiting.resourceDropMasterId" [disabled]="readonlyFlag" <select class="form-control" [(ngModel)]="editRecruiting.resourceDropMasterId" [disabled]="readonlyFlag"
style=" direction: rtl;"> style=" direction: rtl;" (blur)="inputBlur()">
<option value="">{{readonlyFlag ?'暂无招募来源':'请选择招募来源'}}</option> <option value="">{{readonlyFlag ?'暂无招募来源':'请选择招募来源'}}</option>
<option *ngFor="let resourceItem of resourceList" [value]="resourceItem.id"> <option *ngFor="let resourceItem of resourceList" [value]="resourceItem.id">
{{resourceItem.dropOptionName}} {{resourceItem.dropOptionName}}
...@@ -81,6 +81,15 @@ ...@@ -81,6 +81,15 @@
<input class="form-control" type="text" placeholder="增员创建时间" [(ngModel)]="editRecruiting.createdAt" disabled /> <input class="form-control" type="text" placeholder="增员创建时间" [(ngModel)]="editRecruiting.createdAt" disabled />
</div> </div>
<div class="contentItem" *ngIf="this.id!=0"> <div class="contentItem" *ngIf="this.id!=0">
<span>预计报聘时间</span>
<input *ngIf="readonlyFlag" class="form-control" type="text"
placeholder="{{readonlyFlag ?'暂无预计报聘时间':'请选择预计报聘时间'}}" [(ngModel)]="editRecruiting.timeToOnboarding"
[disabled]="readonlyFlag" (blur)="inputBlur()" />
<input *ngIf="!readonlyFlag" class="form-control" type="date"
placeholder="{{readonlyFlag ?'暂无预计报聘时间':'请选择预计报聘时间'}}" [(ngModel)]="editRecruiting.timeToOnboarding"
[disabled]="readonlyFlag" (blur)="inputBlur()" />
</div>
<div class="contentItem" *ngIf="this.id!=0">
<span>增员状态</span> <span>增员状态</span>
<div style="padding: 6px 15px;padding: 6px 15px;color: #e10d0d;font-weight: bold;"> <div style="padding: 6px 15px;padding: 6px 15px;color: #e10d0d;font-weight: bold;">
{{editRecruiting.trackStatus}}</div> {{editRecruiting.trackStatus}}</div>
......
...@@ -67,6 +67,11 @@ ...@@ -67,6 +67,11 @@
display: flex; display: flex;
flex-wrap: wrap; flex-wrap: wrap;
} }
input[type="date"]{
position: absolute;
right: -6%;
direction: rtl;
}
.sexWrapper { .sexWrapper {
display: flex; display: flex;
width: 60%; width: 60%;
......
...@@ -114,7 +114,6 @@ export class RecruitingDetailComponent implements OnInit { ...@@ -114,7 +114,6 @@ export class RecruitingDetailComponent implements OnInit {
practitionerId: JSON.parse(localStorage.getItem('lifeCustomerInfo'))['practitionerId'] practitionerId: JSON.parse(localStorage.getItem('lifeCustomerInfo'))['practitionerId']
} }
this.myService.recruitTrackQuery(param).subscribe((res) => { this.myService.recruitTrackQuery(param).subscribe((res) => {
// console.log(res)
if (res['success']) { if (res['success']) {
this.recruitTrackInfoList = res['data']['recruitTrackInfoList']; this.recruitTrackInfoList = res['data']['recruitTrackInfoList'];
} }
...@@ -161,7 +160,6 @@ export class RecruitingDetailComponent implements OnInit { ...@@ -161,7 +160,6 @@ export class RecruitingDetailComponent implements OnInit {
practitionerId: JSON.parse(localStorage.getItem('lifeCustomerInfo'))['practitionerId'], practitionerId: JSON.parse(localStorage.getItem('lifeCustomerInfo'))['practitionerId'],
potentialId: this.potentialId ? this.potentialId : null potentialId: this.potentialId ? this.potentialId : null
} }
console.log(JSON.parse(localStorage.getItem('lifeCustomerInfo'))['practitionerId'])
if (!this.editRecruiting.name) { if (!this.editRecruiting.name) {
this.toastDialog = true; this.toastDialog = true;
this.toastInfo = { this.toastInfo = {
......
...@@ -7,22 +7,19 @@ ...@@ -7,22 +7,19 @@
list-style: none; list-style: none;
} }
.title{ .title{
width: 100%; display: flex;
float: left;
margin-bottom: 10px; margin-bottom: 10px;
padding: 10px 0; padding: 10px 15px;
justify-content: space-between;
width: 100%;
align-items: center;
ul.tab{ ul.tab{
float: left; display: flex;
// width: 21%;
width: 30%;
margin-right: 5%;
li{ li{
float: left;
margin-right: 5px; margin-right: 5px;
text-align: left; text-align: left;
height: 30px; height: 30px;
line-height: 30px; line-height: 30px;
margin-right: 5%;
color: #fff; color: #fff;
} }
li.selected{ li.selected{
...@@ -30,7 +27,7 @@ ...@@ -30,7 +27,7 @@
font-weight: bold; font-weight: bold;
border-bottom: 2px #ff002a solid; border-bottom: 2px #ff002a solid;
} }
li:nth-child(3){ li:last-child{
margin-right: 0; margin-right: 0;
} }
} }
......
...@@ -6,45 +6,45 @@ ...@@ -6,45 +6,45 @@
</div> </div>
<div class="taem_panel_item_wrapper"> <div class="taem_panel_item_wrapper">
<div class="taem_panel_item_top"> <div class="taem_panel_item_top">
<div> <div class="item_title">
战队业绩 战队业绩(¥)
</div> </div>
<ul class="tab"> <ul class="tab">
<li>本月</li> <li [ngClass]="{selected:selectedRecruitingItem===1}" (click)="subordinateSystemMemberQuery(1)">本月</li>
<li>季度</li> <li [ngClass]="{selected:selectedRecruitingItem===3}" (click)="subordinateSystemMemberQuery(3)">本季</li>
<li>本年</li> <li [ngClass]="{selected:selectedRecruitingItem===2}" (click)="subordinateSystemMemberQuery(2)">本年</li>
</ul> </ul>
</div> </div>
<div class="taem_panel_item_content"> <div class="taem_panel_item_content">
<ul> <ul>
<li>¥2,500</li> <li class="big" style="width: 30%;">{{statisticInfo?.fyp | number: "1.0-2"}}</li>
<li>¥25</li> <li class="big" style="width: 30%;">{{statisticInfo?.fyc | number: "1.0-2"}}</li>
<li>1</li> <li class="big" style="width: 15%;">{{statisticInfo?.count | number}}</li>
<li>20%</li> <li class="big" style="width: 15%;">{{lifeCommonService.toPercent(statisticInfo?.completionRate) }}</li>
</ul> </ul>
<ul> <ul>
<li>首年保费</li> <li style="width: 30%;">首年保费</li>
<li>首年佣金</li> <li style="width: 30%;">首年佣金</li>
<li>件数</li> <li style="width: 15%;">件数</li>
<li>达成率</li> <li style="width: 15%;">达成率</li>
</ul> </ul>
</div> </div>
<div class="next"> <div class="next">
<span class="iconfont icon-xiangxia" routerLink="/teamRank"></span> <span class="iconfont icon-ar-r" routerLink="/teamRank"></span>
</div> </div>
</div> </div>
<div class="taem_panel_item_wrapper"> <div class="taem_panel_item_wrapper">
<div class="taem_panel_item_top"> <div class="taem_panel_item_top">
<div> <div class="item_title">
战队销售活动量 战队销售活动量
</div> </div>
</div> </div>
<div class="taem_panel_item_content"> <div class="taem_panel_item_content">
<ul> <ul>
<li>8</li> <li class="big">{{this.teamActionsData?.scoreDayAverage?this.teamActionsData?.scoreDayAverage:'0'}}</li>
<li>100</li> <li class="big">{{this.teamActionsData?.scoreWeekAverage?this.teamActionsData?.scoreWeekAverage:'0'}}</li>
<li>48</li> <li class="big">{{this.teamActionsData?.scoreMonthAverage?this.teamActionsData?.scoreMonthAverage:'0'}}</li>
<li>12</li> <li class="big">{{this.teamActionsData?.opportunitiesNum?this.teamActionsData?.opportunitiesNum:'0'}}</li>
</ul> </ul>
<ul> <ul>
<li>今天平均</li> <li>今天平均</li>
...@@ -54,60 +54,61 @@ ...@@ -54,60 +54,61 @@
</ul> </ul>
</div> </div>
<div class="next"> <div class="next">
<span class="iconfont icon-xiangxia"></span> <span class="iconfont icon-ar-r" routerLink="teamSalesScore"></span>
</div> </div>
</div> </div>
<div class="taem_panel_item_wrapper"> <div class="taem_panel_item_wrapper">
<div class="taem_panel_item_top"> <div class="taem_panel_item_top">
<div> <div class="item_title">
战队销售业绩预测 我的增员活动量
</div> </div>
<ul class="tab">
<li>本月</li>
<li>季度</li>
<li>本年</li>
</ul>
</div> </div>
<div class="taem_panel_item_content"> <div class="taem_panel_item_content">
<ul> <ul>
<li>¥2,500</li> <li class="big">{{recruitingStatistics?.activityForToday}}</li>
<li>¥25</li> <li class="big">{{recruitingStatistics?.activityForWeek}}</li>
<li>1</li> <li class="big">{{recruitingStatistics?.activityForMonth}}</li>
<li>20%</li> <li class="big" style="width: 30%;">{{recruitingStatistics?.recruitSucceed}}</li>
</ul> </ul>
<ul> <ul>
<li>月保费预测</li> <li>今天</li>
<li>月佣金预测</li> <li>本周</li>
<li>月预计件数</li> <li>本月</li>
<li>月完成率</li> <li style="width: 30%;">本月新增对象</li>
</ul> </ul>
</div> </div>
<div class="next"> <div class="next">
<span class="iconfont icon-xiangxia"></span> <span class="iconfont icon-ar-r" routerLink="/recruiting"></span>
</div> </div>
</div> </div>
<div class="taem_panel_item_wrapper"> <div class="taem_panel_item_wrapper">
<div class="taem_panel_item_top"> <div class="taem_panel_item_top">
<div> <div class="item_title">
我的增员活动量 战队销售业绩预测(¥)
</div> </div>
<ul class="tab">
<li [ngClass]="{selected:selectedSalseItem==='month'}" (click)="selectSales('month')">本月</li>
<li [ngClass]="{selected:selectedSalseItem==='quarter'}" (click)="selectSales('quarter')">本季</li>
<li [ngClass]="{selected:selectedSalseItem==='year'}" (click)="selectSales('year')">本年</li>
</ul>
</div> </div>
<div class="taem_panel_item_content"> <div class="taem_panel_item_content forecast">
<ul> <ul>
<li>1</li> <li class="big">{{premiums?lifeCommonService.transform(premiums):'0'}}</li>
<li>6</li> <li class="big">{{commission?lifeCommonService.transform(commission):'0'}}</li>
<li>10</li> <li class="big">{{count?count:'0'}}</li>
<li>0</li> <li class="big">{{completionRates?lifeCommonService.toPercent(completionRates):'0'}}</li>
</ul> </ul>
<ul> <ul>
<li>今天</li> <li>{{selectedSalseItemName}}保费</li>
<li>本周</li> <li>{{selectedSalseItemName}}佣金</li>
<li>本月</li> <li>{{selectedSalseItemName}}件数</li>
<li>本月新增对象</li> <li>{{selectedSalseItemName}}完成率</li>
</ul> </ul>
</div> </div>
<div class="next"> <div class="next">
<span class="iconfont icon-xiangxia" routerLink="/recruiting"></span> <span class="iconfont icon-ar-r" routerLink="forecast"></span>
</div> </div>
</div> </div>
</div> </div>
\ No newline at end of file
.taem_panel_wrapper{ .taem_panel_wrapper{
padding: 5px 8px; padding: 5px 8px;
background: #f6f7f2; background: #eff0f1;
// background: #0664a4; // background: #0664a4;
height: auto; height: auto;
ul li,ol li{ ul li,ol li{
...@@ -29,13 +29,17 @@ ...@@ -29,13 +29,17 @@
justify-content: space-between; justify-content: space-between;
align-items: center; align-items: center;
height: 38px; height: 38px;
.item_title{
font-weight: bold;
font-size: 16px;
}
.tab{ .tab{
display: flex; display: flex;
width: 35%; width: 35%;
justify-content: space-around; justify-content: space-around;
li{ li.selected{
width: 33%; font-weight: bold;
text-align: right; border-bottom: 3px red solid;
} }
} }
} }
...@@ -44,15 +48,33 @@ ...@@ -44,15 +48,33 @@
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
li{ li{
width: 25%; width: 20%;
text-align: center; text-align: center;
height: 30px; height: 30px;
line-height: 30px; line-height: 30px;
overflow: hidden;
}
li.big{
font-size: 16px;
}
li:nth-child(4){
width: 30%;
} }
} }
} }
.taem_panel_item_content.forecast{
ul li{
width: 20%;
}
ul li:nth-child(3){
width: 18%;
}
ul li:nth-child(1){
width: 40%;
}
}
.next{ .next{
text-align: center; text-align: right;
} }
} }
} }
\ No newline at end of file
import { Component, OnInit } from '@angular/core'; import { Component, OnInit } from '@angular/core';
import { MyService } from '../my.service';
import { LifeCommonService } from '../../common/life-common.service';
@Component({ @Component({
selector: 'ydlife-team-panel', selector: 'ydlife-team-panel',
templateUrl: './team-panel.component.html', templateUrl: './team-panel.component.html',
...@@ -8,12 +9,83 @@ import { Component, OnInit } from '@angular/core'; ...@@ -8,12 +9,83 @@ import { Component, OnInit } from '@angular/core';
export class TeamPanelComponent implements OnInit { export class TeamPanelComponent implements OnInit {
//战队名称 //战队名称
subordinateSystemName: any; subordinateSystemName: any;
constructor() { } teamActionsData: any;
//保费
premiums: number;
//佣金
commission: number;
//件数
count: number;
//完成率
completionRates: number;
selectedSalseItem: any;
selectedSalseItemName: any;
practitionerId: any;
recruitingStatistics: any;
selectedRecruitingItem: any;
statisticInfo: any;
constructor(private myService: MyService, public lifeCommonService: LifeCommonService) { }
ngOnInit() { ngOnInit() {
this.subordinateSystemName = sessionStorage.getItem('subordinateSystemName') this.practitionerId = JSON.parse(localStorage.getItem('lifeCustomerInfo'))['practitionerId'];
this.subordinateSystemName = sessionStorage.getItem('subordinateSystemName');
this.teamActionsAverageQuery();
this.potentialActivityQuery();
this.subordinateSystemMemberQuery(1);
} }
teamActionsAverageQuery() {
this.myService.teamActionsAverageQuery({ practitionerId: this.practitionerId }).subscribe((res) => {
if (res['success']) {
this.teamActionsData = res['data'];
this.selectSales('month')
}
})
}
selectSales(type) {
this.selectedSalseItem = type;
if (type === 'month') {
this.selectedSalseItemName = '本月';
this.premiums = this.teamActionsData.premiumMonth;
this.commission = this.teamActionsData.commissionMonth;
this.count = this.teamActionsData.piecesMonth;
this.completionRates = this.teamActionsData.achievementRateMonth;
}
if (type === 'quarter') {
this.selectedSalseItemName = '本季';
this.premiums = this.teamActionsData.premiumQuarter;
this.commission = this.teamActionsData.commissionQuarter;
this.count = this.teamActionsData.piecesQuarter;
this.completionRates = this.teamActionsData.achievementRateQuarter;
}
if (type === 'year') {
this.selectedSalseItemName = '本年';
this.premiums = this.teamActionsData.premiumYear;
this.commission = this.teamActionsData.commissionYear;
this.count = this.teamActionsData.piecesYear;
this.completionRates = this.teamActionsData.achievementRateYear;
}
}
subordinateSystemMemberQuery(type) {
this.selectedRecruitingItem = type;
const param = {
time: type,
practitionerId: this.practitionerId
}
this.myService.subordinateSystemMemberQuery(param).subscribe((res) => {
if (res['success']) {
this.statisticInfo = res['data']['statisticInfo']
}
})
}
//增员统计
potentialActivityQuery() {
this.myService.potentialActivityQuery({ practitionerId: this.practitionerId }).subscribe((res) => {
if (res['success']) {
this.recruitingStatistics = res['data'];
}
})
}
} }
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
// background: #f7f7f2; // background: #f7f7f2;
min-height: 100%; min-height: 100%;
height: auto; height: auto;
overflow: hidden;
ul,ol{ ul,ol{
list-style: none; list-style: none;
} }
...@@ -40,7 +41,7 @@ ...@@ -40,7 +41,7 @@
width: 60%; width: 60%;
ul.tab{ ul.tab{
float: right; float: right;
width: 50%; width: 70%;
font-size: 16px; font-size: 16px;
color: #fff; color: #fff;
li{ li{
......
...@@ -16,8 +16,9 @@ export class TeamRankComponent implements OnInit { ...@@ -16,8 +16,9 @@ export class TeamRankComponent implements OnInit {
statisticInfo: any; statisticInfo: any;
constructor(private myService: MyService) { constructor(private myService: MyService) {
this.performanceList = [ this.performanceList = [
{ time: '1', name: '本月' }, { time: 1, name: '本月' },
{ time: '2', name: '本年' } { time: 3, name: '本季' },
{ time: 2, name: '本年' }
] ]
this.list = [ this.list = [
{ type: 'online', name: '线上' }, { type: 'online', name: '线上' },
......
<div class="team_sales_detail_wrapper">
<div class="teamHeader">
<div class="teamItem 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>
<div *ngIf="this.showType==='teamSalesScore'">
<div class="rankInfoWrapper">
<div class="rankContent">
<div style="font-size: 18px;margin-bottom: 10px;">战队成员销售活动量得分</div>
<div class="content_wrapper">
<ul>
<li>姓名</li>
<li>今天得分</li>
<li>本周得分</li>
<li>本月得分</li>
<li>本周新增商机</li>
</ul>
<div style="width: 100%;text-align: center;float: left;height: 35px;"
*ngIf="playerSalesActivityInfo?.length <=0">
暂无战队成员,努力去增员吧
</div>
<ul *ngFor="let playerSalesActivityItem of playerSalesActivityInfo;index as i;">
<li>{{playerSalesActivityItem.name}}</li>
<li>{{playerSalesActivityItem.scoreDay!=null?playerSalesActivityItem.scoreDay:'-'}}</li>
<li>{{playerSalesActivityItem.scoreWeek!=null?playerSalesActivityItem.scoreWeek:'-'}}</li>
<li>{{playerSalesActivityItem.scoreMonth!=null?playerSalesActivityItem.scoreMonth:'-'}}</li>
<li>{{playerSalesActivityItem.addOpportunityNum!=null?playerSalesActivityItem.addOpportunityNum:'-'}}</li>
</ul>
</div>
</div>
</div>
</div>
<div *ngIf="this.showType==='forecast'">
<div class="rankInfoWrapper">
<div class="rankContent">
<div class="tab">
<div style="font-size: 18px;">战队销售业绩预测</div>
<ul>
<li [ngClass]="{selected:selectedSalseItem==='m'}" (click)="salesPerformanceForecastListQuery('m')">本月</li>
<li [ngClass]="{selected:selectedSalseItem==='q'}" (click)="salesPerformanceForecastListQuery('q')">本季</li>
<li [ngClass]="{selected:selectedSalseItem==='y'}" (click)="salesPerformanceForecastListQuery('y')">本年</li>
</ul>
</div>
<div class="content_wrapper forecast">
<ul>
<li class="name">姓名</li>
<li>保费</li>
<li>佣金</li>
<li class="count">件数</li>
<li>完成率</li>
</ul>
<div style="width: 100%;text-align: center;float: left;height: 35px;"
*ngIf="salesPerformanceForecastInfos?.length <=0">
暂无战队成员,努力去增员吧
</div>
<ul *ngFor="let forecastItem of salesPerformanceForecastInfos;index as i;">
<li class="name">{{forecastItem.name}}</li>
<li>{{forecastItem.premium!=null?'¥'+lifeCommonService.transform(forecastItem.premium):'-'}}</li>
<li>{{forecastItem.commission!=null?'¥'+lifeCommonService.transform(forecastItem.commission):'-'}}</li>
<li class="count">{{forecastItem.pieces!=null?forecastItem.pieces:'-'}}</li>
<li>{{forecastItem.achievementRate!=null?lifeCommonService.toPercent(forecastItem.achievementRate):'-' }}
</li>
</ul>
</div>
</div>
</div>
</div>
</div>
\ No newline at end of file
.team_sales_detail_wrapper{
padding: 5px 8px;
background: #eff0f1;
overflow: auto;
height: 100%;
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;
}
.rankInfoWrapper{
overflow: auto;
width: 100%;
float: left;
.rankContent{
float: left;
width: 100%;
overflow: auto;
background: #fff;
box-shadow: 0 0px 2.5px #eceaea;
border-radius: 6px;
padding: 5px;
.tab{
display: flex;
margin-bottom: 10px;
display: flex;
justify-content: space-between;
align-items: center;
ul{
width: 30%;
display: flex;
justify-content: space-between;
li.selected{
font-weight: bold;
border-bottom: 2px red solid;
}
}
}
.content_wrapper{
ul{
width: 100%;
height: 30px;
line-height: 30px;
li{
float: left;
width: 18%;
text-align: center;
margin:0 1%;
position: relative;
margin-bottom: 5px;
overflow: hidden;
height: 30px;
li.icon .iconfont{
position: absolute;
}
}
li.name{
width: 20%;
}
li:last-child{
margin-right: 0;
}
}
}
.content_wrapper.forecast{
ul li{
width: 30%;
margin: 0;
}
ul li:nth-child(2),ul li:nth-child(3){
text-align: right;
}
ul li:nth-child(3){
width: 22%;
}
ul li:nth-child(4),ul li:nth-child(5){
width: 15%;
}
ul li.name{
width: 18%;
}
}
}
}
}
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { TeamSalesScoreComponent } from './team-sales-score.component';
describe('TeamSalesScoreComponent', () => {
let component: TeamSalesScoreComponent;
let fixture: ComponentFixture<TeamSalesScoreComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ TeamSalesScoreComponent ]
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(TeamSalesScoreComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});
import { Component, OnInit } from '@angular/core';
import { ActivatedRoute, Router } from "@angular/router";
import { MyService } from '../my.service';
import { LifeCommonService } from '../../common/life-common.service';
@Component({
selector: 'ydlife-team-sales-score',
templateUrl: './team-sales-score.component.html',
styleUrls: ['./team-sales-score.component.scss']
})
export class TeamSalesScoreComponent implements OnInit {
showType: any;
practitionerId: any;
subordinateSystemName: any;
playerSalesActivityInfo: Array<any>;
selectedSalseItem: any;
salesPerformanceForecastInfos: Array<any>;
constructor(private activateRoute: ActivatedRoute, private router: Router,
private myService: MyService, public lifeCommonService: LifeCommonService) { }
ngOnInit() {
this.practitionerId = JSON.parse(localStorage.getItem('lifeCustomerInfo'))['practitionerId'];
this.subordinateSystemName = sessionStorage.getItem('subordinateSystemName');
//判断显示销售得分还是销售预测
this.showType = this.activateRoute.snapshot.paramMap.get('type');
if (this.showType === 'teamSalesScore') {
this.playerSalesActivityQuery()
}
if (this.showType === 'forecast') {
this.salesPerformanceForecastListQuery('m')
}
}
//获取成员销售活动量得分
playerSalesActivityQuery() {
this.myService.playerSalesActivityQuery({ practitionerId: this.practitionerId }).subscribe((res) => {
if (res['success']) {
this.playerSalesActivityInfo = res['data']['playerSalesActivityInfo']
}
})
}
salesPerformanceForecastListQuery(type) {
this.selectedSalseItem = type;
const param = {
practitionerId: this.practitionerId,
time: type
}
this.myService.salesPerformanceForecastListQuery(param).subscribe((res) => {
if (res['success']) {
this.salesPerformanceForecastInfos = res['data']['salesPerformanceForecastInfos']
}
})
}
}
...@@ -31,12 +31,15 @@ ...@@ -31,12 +31,15 @@
<ul class="icon_lists dib-box"> <ul class="icon_lists dib-box">
<li class="dib"> <li class="dib">
<<<<<<< HEAD
<span class="icon iconfont">&#xe679;</span> <span class="icon iconfont">&#xe679;</span>
<div class="name">邮箱</div> <div class="name">邮箱</div>
<div class="code-name">&amp;#xe679;</div> <div class="code-name">&amp;#xe679;</div>
</li> </li>
<li class="dib"> <li class="dib">
=======
>>>>>>> 0a037f4689e09d04a3708f6c9a4e437b7a837d03
<span class="icon iconfont">&#xe678;</span> <span class="icon iconfont">&#xe678;</span>
<div class="name">上引号</div> <div class="name">上引号</div>
<div class="code-name">&amp;#xe678;</div> <div class="code-name">&amp;#xe678;</div>
...@@ -1059,6 +1062,7 @@ ...@@ -1059,6 +1062,7 @@
<ul class="icon_lists dib-box"> <ul class="icon_lists dib-box">
<li class="dib"> <li class="dib">
<<<<<<< HEAD
<span class="icon iconfont icon-youxiang"></span> <span class="icon iconfont icon-youxiang"></span>
<div class="name"> <div class="name">
邮箱 邮箱
...@@ -1068,6 +1072,8 @@ ...@@ -1068,6 +1072,8 @@
</li> </li>
<li class="dib"> <li class="dib">
=======
>>>>>>> 0a037f4689e09d04a3708f6c9a4e437b7a837d03
<span class="icon iconfont icon-shangyinhao"></span> <span class="icon iconfont icon-shangyinhao"></span>
<div class="name"> <div class="name">
上引号 上引号
...@@ -2556,6 +2562,7 @@ ...@@ -2556,6 +2562,7 @@
<li class="dib"> <li class="dib">
<svg class="icon svg-icon" aria-hidden="true"> <svg class="icon svg-icon" aria-hidden="true">
<<<<<<< HEAD
<use xlink:href="#icon-youxiang"></use> <use xlink:href="#icon-youxiang"></use>
</svg> </svg>
<div class="name">邮箱</div> <div class="name">邮箱</div>
...@@ -2564,6 +2571,8 @@ ...@@ -2564,6 +2571,8 @@
<li class="dib"> <li class="dib">
<svg class="icon svg-icon" aria-hidden="true"> <svg class="icon svg-icon" aria-hidden="true">
=======
>>>>>>> 0a037f4689e09d04a3708f6c9a4e437b7a837d03
<use xlink:href="#icon-shangyinhao"></use> <use xlink:href="#icon-shangyinhao"></use>
</svg> </svg>
<div class="name">上引号</div> <div class="name">上引号</div>
......
This source diff could not be displayed because it is too large. You can view the blob instead.
...@@ -6,6 +6,7 @@ ...@@ -6,6 +6,7 @@
"description": "", "description": "",
"glyphs": [ "glyphs": [
{ {
<<<<<<< HEAD
"icon_id": "9592761", "icon_id": "9592761",
"name": "邮箱", "name": "邮箱",
"font_class": "youxiang", "font_class": "youxiang",
...@@ -13,6 +14,8 @@ ...@@ -13,6 +14,8 @@
"unicode_decimal": 59001 "unicode_decimal": 59001
}, },
{ {
=======
>>>>>>> 0a037f4689e09d04a3708f6c9a4e437b7a837d03
"icon_id": "816614", "icon_id": "816614",
"name": "上引号", "name": "上引号",
"font_class": "shangyinhao", "font_class": "shangyinhao",
......
...@@ -20,9 +20,12 @@ Created by iconfont ...@@ -20,9 +20,12 @@ Created by iconfont
/> />
<missing-glyph /> <missing-glyph />
<<<<<<< HEAD
<glyph glyph-name="youxiang" unicode="&#59001;" d="M983.899806 110.614218V671.113777h0.180631l-0.180631 4.696419c-0.180632 5.238314-0.722526 10.476627-1.806315 15.714941-2.890104 25.469042-21.675781 44.977245-45.519139 47.686717H122.287529c-11.741048 0-23.482096-1.625684-34.861881-5.238314-30.346093-10.295996-50.757453-40.100194-50.576821-74.058917v-534.849885c-0.361263-21.314518 5.780208-42.087141 17.701887-59.789028l0.361263-0.722526 5.418946-3.973893c18.243782-21.856412 44.977245-34.319986 73.517022-34.500618H904.421944c37.751984 0 70.265655 27.094726 79.477862 66.291763l0.180631 0.541894c0.361263 5.96084 0.361263 11.741048-0.180631 17.701888zM390.16405 348.505909l55.453872-49.854295 43.893456-40.100194c5.418945-5.96084 13.005468-9.57347 21.133886-9.57347 7.947786 0 15.534309 3.431999 21.133886 9.57347l101.153642 91.941436 272.753572-263.721997H126.622685L390.16405 348.505909z m120.119951-30.346092L111.449638 679.96472H115.604163c214.409596 0.903158 703.559711 2.890104 793.875463 0.361263l-399.195625-362.166166z m165.458458 69.72376l251.619686 227.956959v-474.518963L675.742459 387.883577z m-328.568707-0.180631L93.205856 135.721997V617.104957l253.967896-229.402011z" horiz-adv-x="1024" /> <glyph glyph-name="youxiang" unicode="&#59001;" d="M983.899806 110.614218V671.113777h0.180631l-0.180631 4.696419c-0.180632 5.238314-0.722526 10.476627-1.806315 15.714941-2.890104 25.469042-21.675781 44.977245-45.519139 47.686717H122.287529c-11.741048 0-23.482096-1.625684-34.861881-5.238314-30.346093-10.295996-50.757453-40.100194-50.576821-74.058917v-534.849885c-0.361263-21.314518 5.780208-42.087141 17.701887-59.789028l0.361263-0.722526 5.418946-3.973893c18.243782-21.856412 44.977245-34.319986 73.517022-34.500618H904.421944c37.751984 0 70.265655 27.094726 79.477862 66.291763l0.180631 0.541894c0.361263 5.96084 0.361263 11.741048-0.180631 17.701888zM390.16405 348.505909l55.453872-49.854295 43.893456-40.100194c5.418945-5.96084 13.005468-9.57347 21.133886-9.57347 7.947786 0 15.534309 3.431999 21.133886 9.57347l101.153642 91.941436 272.753572-263.721997H126.622685L390.16405 348.505909z m120.119951-30.346092L111.449638 679.96472H115.604163c214.409596 0.903158 703.559711 2.890104 793.875463 0.361263l-399.195625-362.166166z m165.458458 69.72376l251.619686 227.956959v-474.518963L675.742459 387.883577z m-328.568707-0.180631L93.205856 135.721997V617.104957l253.967896-229.402011z" horiz-adv-x="1024" />
=======
>>>>>>> 0a037f4689e09d04a3708f6c9a4e437b7a837d03
<glyph glyph-name="shangyinhao" unicode="&#59000;" d="M505.6 691.2c0-12.8-12.8-25.6-44.8-44.8C307.2 531.2 236.8 441.6 236.8 371.2c0-38.4 25.6-70.4 70.4-83.2 70.4-25.6 96-70.4 96-115.2 0-38.4-19.2-134.4-134.4-134.4-89.6 0-204.8 64-204.8 217.6C64 409.6 211.2 576 416 723.2 428.8 736 441.6 736 448 736c12.8 0 25.6-6.4 38.4-19.2C499.2 704 505.6 697.6 505.6 691.2zM960 691.2c0-12.8-12.8-25.6-44.8-44.8-153.6-108.8-224-204.8-224-275.2 0-38.4 25.6-70.4 70.4-83.2 70.4-25.6 96-70.4 96-115.2 0-38.4-19.2-134.4-134.4-134.4-89.6 0-204.8 64-204.8 217.6 0 160 147.2 326.4 352 473.6 12.8 12.8 25.6 12.8 38.4 12.8C928 736 960 704 960 691.2z" horiz-adv-x="1024" /> <glyph glyph-name="shangyinhao" unicode="&#59000;" d="M505.6 691.2c0-12.8-12.8-25.6-44.8-44.8C307.2 531.2 236.8 441.6 236.8 371.2c0-38.4 25.6-70.4 70.4-83.2 70.4-25.6 96-70.4 96-115.2 0-38.4-19.2-134.4-134.4-134.4-89.6 0-204.8 64-204.8 217.6C64 409.6 211.2 576 416 723.2 428.8 736 441.6 736 448 736c12.8 0 25.6-6.4 38.4-19.2C499.2 704 505.6 697.6 505.6 691.2zM960 691.2c0-12.8-12.8-25.6-44.8-44.8-153.6-108.8-224-204.8-224-275.2 0-38.4 25.6-70.4 70.4-83.2 70.4-25.6 96-70.4 96-115.2 0-38.4-19.2-134.4-134.4-134.4-89.6 0-204.8 64-204.8 217.6 0 160 147.2 326.4 352 473.6 12.8 12.8 25.6 12.8 38.4 12.8C928 736 960 704 960 691.2z" horiz-adv-x="1024" />
......
...@@ -17,7 +17,6 @@ ...@@ -17,7 +17,6 @@
<link rel="stylesheet" href="./assets/bootstrap/dist/css/bootstrap.min.css"> <link rel="stylesheet" href="./assets/bootstrap/dist/css/bootstrap.min.css">
<link rel="stylesheet" href="./assets/LCalendar/LCalendar.css"> <link rel="stylesheet" href="./assets/LCalendar/LCalendar.css">
<link rel="stylesheet" href="./assets/laydate/theme/default/laydate.css"> <link rel="stylesheet" href="./assets/laydate/theme/default/laydate.css">
</head> </head>
<body> <body>
...@@ -29,16 +28,16 @@ ...@@ -29,16 +28,16 @@
<div id="adv" <div id="adv"
style="width: 100%;min-width: 320px; style="width: 100%;min-width: 320px;
max-width: 640px;overflow: hidden;position: fixed;top: 0;right: 0; bottom: 0;left: 0;background: #fff;margin: auto;"> max-width: 640px;overflow: hidden;position: fixed;top: 0;right: 0; bottom: 0;left: 0;background: #fff;margin: auto;">
<div class="content" style="text-align: center;width: 60%;margin: 50% auto 0 auto;"> <div class="content" style="text-align: center;width: 60%;margin: 45% auto 0 auto;">
<img style="width:100%;margin-bottom: 15px;" src="assets/images/login_logo.png"> <img style="width:100%;margin-bottom: 15px;" src="assets/images/login_logo.png">
<div class="loadingContent"> <div class="loadingContent">
<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 style="margin-top: 45%;">欢迎回家,先喝碗鸡汤</div> -->
</div> </div>
<div id="content" style="margin-top: 30%;text-align: center;padding: 0 15px;"> <div id="content" style="font-size:18px;margin-top: 30%;text-align: center;padding: 0 15px;">
</div> </div>
</div> </div>
...@@ -51,7 +50,25 @@ ...@@ -51,7 +50,25 @@
<script src="./assets/LCalendar/LCalendar.js"></script> <script src="./assets/LCalendar/LCalendar.js"></script>
<script src="./assets/laydate/laydate.js"></script> <script src="./assets/laydate/laydate.js"></script>
<script type="text/javascript"> <script type="text/javascript">
var api = 'https://' + window.location.host;
// var api = 'https://mstage.zuihuibi.cn';
function getToken() {
$.ajax({
type: "POST",
url: api + '/api/authorize/obtainToken',
contentType: "application/json",
data: JSON.stringify({
ticket: 'life'
}),
async: false,
success: function (res) {
token = res.data.token
}
})
return token;
}
var token = getToken();
const initialize = function () { const initialize = function () {
let loading = document.getElementById("adv"); let loading = document.getElementById("adv");
loading.style.display = 'block'; loading.style.display = 'block';
...@@ -83,8 +100,7 @@ ...@@ -83,8 +100,7 @@
iframe.parentNode.removeChild(iframe); iframe.parentNode.removeChild(iframe);
} }
// var api = 'https://' + window.location.host;
var api = 'https://mdev.zuihuibi.cn';
function getknowledgeQry() { function getknowledgeQry() {
$.ajax({ $.ajax({
type: "POST", type: "POST",
...@@ -94,10 +110,25 @@ ...@@ -94,10 +110,25 @@
tagId: 35 tagId: 35
}), }),
async: false, async: false,
headers: { "X-Authorization": token },
success: function (res) { success: function (res) {
if (res['success']) { if (res['success']) {
let content = res['data']['knowledge']['content']; let content = String(res['data']['knowledge']['content']);
$('#content').html(content) if (content.indexOf(',') != -1) {
const idx = content.indexOf(',')
content = content.split(',')
// const newStr = ('<span class="iconfont icon-shangyinhao"></span>' + content[0] + ',<br/>' + content[1]).toString()
const newStr = ('' + content[0] + ',<br/>' + content[1]).toString()
$('#content').html(newStr)
} else if (content.indexOf('') != -1) {
const idx = content.indexOf('')
content = content.split('')
// const newStr = ('<span class="iconfont icon-shangyinhao"></span>' + content[0] + ',<br/>' + content[1]).toString()
const newStr = ('' + content[0] + '<br/>' + content[1]).toString()
$('#content').html(newStr)
} else {
$('#content').html('' + content)
}
} }
} }
}) })
......
...@@ -102,6 +102,10 @@ input::placeholder { ...@@ -102,6 +102,10 @@ input::placeholder {
transform: scaleY(0.5); transform: scaleY(0.5);
} }
.icon-shangyinhao{
position: relative;
top: -8px;
}
@keyframes slowUp { @keyframes slowUp {
......
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