Commit 0b73e3aa by Chao Sun

团队成员分值显示

parent b0b131ba
......@@ -5,6 +5,7 @@ import { FormsModule } from "@angular/forms";
import { GuidePageComponent } from './guide-page/guide-page.component';
import { SafeHtmlPipe } from './safe-html.pipe';
@NgModule({
declarations: [AlertComponent, GuidePageComponent, SafeHtmlPipe],
imports: [
......
......@@ -177,4 +177,13 @@ export class LifeCommonService {
let L = appU[appU.length - 1];
return L;
}
toPercent(point) {
if (point == 0) {
return 0;
}
var str = Number(point * 100).toFixed();
str += "%";
return str;
}
}
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 {
public operateUserId?: string,
public potentialId?: any,
public practitionerId?: any,
public createdAt?: any
public createdAt?: any,
public timeToOnboarding?: any
) {
}
}
\ No newline at end of file
......@@ -16,12 +16,12 @@
<div class="contentItem">
<span>姓名</span>
<input class="form-control" type="text" placeholder="{{readonlyFlag ?'暂无姓名':'请输入姓名'}}"
[(ngModel)]="editBusiness.name" [disabled]="readonlyFlag" />
[(ngModel)]="editBusiness.name" [disabled]="readonlyFlag" (blur)="inputBlur()" />
</div>
<div class="contentItem">
<span>年龄</span>
<input class="form-control" type="text" placeholder="{{readonlyFlag ?'暂无年龄信息':'请输入年龄'}}"
[(ngModel)]="editBusiness.age" [disabled]="readonlyFlag" />
[(ngModel)]="editBusiness.age" [disabled]="readonlyFlag" (blur)="inputBlur()" />
</div>
<div class="contentItem">
<span>性别</span>
......@@ -43,7 +43,7 @@
<div class="contentItem">
<span>血型</span>
<select name="bloodTypeId" id="bloodTypeId" class="form-control" [disabled]="readonlyFlag"
[(ngModel)]="editBusiness.bloodTypeId">
[(ngModel)]="editBusiness.bloodTypeId" (blur)="inputBlur()">
<option value="">{{readonlyFlag ?'暂无血型信息':'请选择血型'}}</option>
<option *ngFor="let businessBloodItem of businessBloodList" [value]="businessBloodItem.id">
{{businessBloodItem.dropOptionName}}</option>
......@@ -54,7 +54,7 @@
<div class="contentItem">
<span>星座</span>
<select name="businessZodiacId" id="businessZodiacId" class="form-control" [disabled]="readonlyFlag"
[(ngModel)]="editBusiness.zodiacTypeId">
[(ngModel)]="editBusiness.zodiacTypeId" (blur)="inputBlur()">
<option value="">{{readonlyFlag ?'暂无星座信息':'请选择星座'}}</option>
<option *ngFor="let businessZodiacItem of businessZodiacList" [value]="businessZodiacItem.id">
{{businessZodiacItem.dropOptionName}}</option>
......@@ -71,7 +71,7 @@
<i class="iconfont icon-dianhua" style="color: #e10d0d;"></i>
{{editBusiness.mobileNo}}</a>
<input class="form-control" type="text" [(ngModel)]="editBusiness.mobileNo" *ngIf="opportunityId==0"
placeholder="请输入手机号" maxlength="11" />
placeholder="请输入手机号" maxlength="11" (blur)="inputBlur()" />
</div>
<div class="contentItem">
<span>微信</span>
......@@ -90,29 +90,29 @@
<div class="contentItem">
<span>预计FYP</span>
<input class="form-control" type="number" placeholder="{{readonlyFlag ?'暂无预计FYP':'请输入预计FYP'}}"
[disabled]="readonlyFlag" [(ngModel)]="editBusiness.fyp" />
[disabled]="readonlyFlag" [(ngModel)]="editBusiness.fyp" (blur)="inputBlur()" />
</div>
<div class="contentItem">
<span>预计FYC</span>
<input class="form-control" type="number" placeholder="{{readonlyFlag ?'暂无预计FYC':'请输入预计FYC'}}"
[disabled]="readonlyFlag" [(ngModel)]="editBusiness.fyc" />
[disabled]="readonlyFlag" [(ngModel)]="editBusiness.fyc" (blur)="inputBlur()" />
</div>
<div class="contentItem">
<span>预计成交件数</span>
<input class="form-control" type="number" placeholder="{{readonlyFlag ?'暂无预计件数':'请输入预计件数'}}"
[disabled]="readonlyFlag" [(ngModel)]="editBusiness.pieces" />
[disabled]="readonlyFlag" [(ngModel)]="editBusiness.pieces" (blur)="inputBlur()" />
</div>
<div class="contentItem">
<span>预计成交时间</span>
<input class="form-control" type="date" placeholder="{{readonlyFlag ?'暂无预计成交时间':'请输入预计成交时间'}}"
[disabled]="readonlyFlag" [(ngModel)]="editBusiness.timeToClose" />
[disabled]="readonlyFlag" [(ngModel)]="editBusiness.timeToClose" (blur)="inputBlur()" />
</div>
</div>
<div class="wrapper_item">
<div class="contentItem">
<span>商机来源</span>
<select *ngIf="opportunityId==0" name="businessSourceId" id="businessSourceId" class="form-control"
[(ngModel)]="editBusiness.sourceFrom" [disabled]="readonlyFlag">
[(ngModel)]="editBusiness.sourceFrom" [disabled]="readonlyFlag" (blur)="inputBlur()">
<option value="">{{readonlyFlag ?'暂无商机来源':'请选择商机来源'}}</option>
<option *ngFor="let businessSourceItem of businessSourceList" [value]="businessSourceItem.id">
{{businessSourceItem.dropOptionName}}</option>
......@@ -142,7 +142,7 @@
<span>备注</span>
<div style="padding: 6px 15px;padding: 6px 15px;">
<input class="form-control" type="text" [disabled]="readonlyFlag" [(ngModel)]="editBusiness.remark"
placeholder="备注信息" />
placeholder="备注信息" (blur)="inputBlur()" />
</div>
</div>
</div>
......@@ -191,15 +191,15 @@
(click)="ownOpportunityRecordSave(opportunityRecordItem)"></i>
</div>
</li>
<li>
<!-- <li>
<div class="salesNotice">{{(editBusiness.opportunityDate).substr(0,10)}}</div>
<div style="display: flex;justify-content: space-between;">
<div>商机状态</div>
<div>待跟进</div>
</div>
</li>
</li> -->
</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-jiahao"></i>
</div>
......
......@@ -61,6 +61,7 @@ export class MyBusinessDetailComponent implements OnInit {
//控制tab可不可点
clickFlag: boolean;
remarkId: any;
status: any;
constructor(private activateRoute: ActivatedRoute, private myService: MyService,
public lifeCommonService: LifeCommonService, private router: Router, ) {
this.titleList = [
......@@ -140,8 +141,9 @@ export class MyBusinessDetailComponent implements OnInit {
this.opportunitySurveyAnswersList = res['data']['opportunityConsultationInfo']['opportunitySurveyAnswersList']
this.editBusiness = res['data']['opportunityBasicInformationInfo'];
this.opportunityCustomerTags = res['data']['opportunityBasicInformationInfo']['opportunityCustomerTags']
this.opportunityRecordInfos = res['data']['opportunityRecordInfos'];
this.opportunityRecordInfos = res['data']['opportunityRecordSituationInfo']['opportunityRecordInfos'];
this.isCompletedQuestionnaire = res['data']['opportunityConsultationInfo']['isCompletedQuestionnaire'];
this.status = res['data']['opportunityRecordSituationInfo']['status'];
//如果没有性别显示暂无性别
if (!res['data']['opportunityBasicInformationInfo']['gender']) {
this.sexFlag = false;
......
......@@ -100,9 +100,11 @@
<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>
{{this.activities_grade?.achievementRateWeek!=null ? lifeCommonService.toPercent(this.activities_grade?.achievementRateWeek) :'-'}}
</li>
<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>
</ul>
</div>
......
......@@ -37,7 +37,7 @@ export class MyCenterHomeComponent implements OnInit, AfterViewInit {
constructor(
private router: Router,
private lifeCommonService: LifeCommonService,
public lifeCommonService: LifeCommonService,
private myService: MyService,
private ls: LocalStorage,
private activatedRoute: ActivatedRoute,
......
......@@ -20,6 +20,7 @@ import { MySettingDetailComponent } from './my-setting-detail/my-setting-detail.
import { MyNewsComponent } from './my-news/my-news.component';
import { MyTargetComponent } from "./my-target/my-target.component";
import { TeamPanelComponent } from './team-panel/team-panel.component';
import { TeamSalesScoreComponent } from './team-sales-score/team-sales-score.component';
const myRoutes: Routes = [
{ path: '', component: MyCenterHomeComponent, canActivate: [AuthGuard], data: [{ title: '银盾保险经纪 - 工作台' }] },
......@@ -41,8 +42,8 @@ const myRoutes: Routes = [
{ path: 'setting/:uploadType', component: MySettingDetailComponent, canActivate: [AuthGuard] },
{ path: 'news', component: MyNewsComponent, 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] }
];
@NgModule({
......
......@@ -21,7 +21,7 @@
<div class="title">个人年度销售目标</div>
<div class="content_target_item">
<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?'暂无预计年保费':'请输入预计年保费'}}"
[disabled]="personalSalesReadonlyFlag" />
</div>
......@@ -52,8 +52,8 @@
<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()"
<input type="text" class="form-control" placeholder="{{personalSalesReadonlyFlag?'暂无目标保费':'请输入目标保费'}}"
[(ngModel)]="salesTargetMonthsItem.premium" (ngModelChange)="changePremium();"
[disabled]="personalSalesReadonlyFlag" (blur)="inputBlur()">
</div>
<div class="content_target_item">
......@@ -79,7 +79,7 @@
<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 *ngIf="!salesTargetActions || salesTargetActions.length<=0" 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"
......@@ -131,7 +131,7 @@
<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 *ngIf="!goalsActionsInfoList || goalsActionsInfoList.length<=0" 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"
......
......@@ -20,13 +20,13 @@ export class MyTargetComponent implements OnInit {
salesTargetMonths: Array<any>;
practitionerId: any;
//个人保费
premium: number;
premium: any;
//个人佣金
commission: number;
commission: any;
//个人件数
pieces: number;
pieces: any;
//个人件平均保费
pieceAveragePremium: number;
pieceAveragePremium: any;
recruitGoalForMonthList: Array<any>;
numberRecruitsYear: number;
numberMDRTYear: number;
......@@ -39,6 +39,7 @@ export class MyTargetComponent implements OnInit {
goalsActionsInfoList: Array<any>;
salesTargetFlag: boolean = true;
recruitingTargetFlag: boolean = true;
money: any;
constructor(private myService: MyService) { }
ngOnInit() {
......@@ -60,6 +61,7 @@ export class MyTargetComponent implements OnInit {
salesTargetMonths: this.salesTargetMonths,
goalsType: goalsType
}
console.log(this.premium)
for (let i = 0; i < this.salesTargetMonths.length; i++) {
if (!this.salesTargetMonths[i]['premium'] && this.salesTargetMonths[i]['premium'] != 0) {
this.toastDialog = true;
......@@ -124,20 +126,7 @@ export class MyTargetComponent implements OnInit {
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.initSalesTargetMonths();
this.salesTargetFlag = false;
this.personalSalesReadonlyFlag = false;
this.personalSalesActivityFlag = false;
......@@ -150,20 +139,7 @@ export class MyTargetComponent implements OnInit {
} 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 }
]
this.initSalesTargetMonths()
}
})
}
......@@ -188,6 +164,22 @@ export class MyTargetComponent implements OnInit {
//获取月销售平均值
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 => {
if (type === 'premium') {
item.premium = Math.ceil(this.premium / 12);
......@@ -281,20 +273,7 @@ export class MyTargetComponent implements OnInit {
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.initRecruitGoalForMonthList();
this.recruitingTargetFlag = false;
this.recruitsReadonlyFlag = false;
}
......@@ -302,20 +281,7 @@ export class MyTargetComponent implements OnInit {
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 }
]
this.initRecruitGoalForMonthList();
}
})
}
......@@ -393,4 +359,40 @@ export class MyTargetComponent implements OnInit {
inputBlur() {
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 }
]
}
}
......@@ -24,10 +24,11 @@ import { MySettingDetailComponent } from './my-setting-detail/my-setting-detail.
import { MyNewsComponent } from './my-news/my-news.component';
import { MyTargetComponent } from './my-target/my-target.component';
import { TeamPanelComponent } from './team-panel/team-panel.component';
import { SwitchNumberPipe } from '../common/pipe/switch-number.pipe';
import { TeamSalesScoreComponent } from './team-sales-score/team-sales-score.component';
@NgModule({
declarations: [MyCenterHomeComponent, MkMaterialComponent, MkMaterialDetailComponent, FileUploadComponent, ImportantAnnouncementComponent, SalesDetailComponent, AnnouncementDetailComponent, MyBusinessComponent, MyBusinessDetailComponent, PickerComponent, ToastComponent, SalesRankComponent, TeamRankComponent, RecruitingComponent, RecruitingDetailComponent, ThanksComponent, MySettingComponent, MySettingDetailComponent, MyNewsComponent, MyTargetComponent, TeamPanelComponent],
declarations: [MyCenterHomeComponent, MkMaterialComponent, MkMaterialDetailComponent, FileUploadComponent, ImportantAnnouncementComponent, SalesDetailComponent, AnnouncementDetailComponent, MyBusinessComponent, MyBusinessDetailComponent, PickerComponent, ToastComponent, SalesRankComponent, TeamRankComponent, RecruitingComponent, RecruitingDetailComponent, ThanksComponent, MySettingComponent, MySettingDetailComponent, MyNewsComponent, MyTargetComponent, TeamPanelComponent, SwitchNumberPipe, TeamSalesScoreComponent],
imports: [
CommonModule,
LifeCommonModule,
......
......@@ -128,7 +128,7 @@ export class MyService {
//查询团队业绩及是否团队长
subordinateSystemMemberQuery(practitionerId) {
const url = this.API + '/practitioner/subordinateSystemMemberQuery';
const url = this.ydapi + '/practitioner/subordinateSystemMemberQuery';
return this.http
.post(url, JSON.stringify(practitionerId));
}
......@@ -259,4 +259,25 @@ export class MyService {
return this.http
.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));
}
}
......@@ -15,7 +15,7 @@
<div class="contentItem">
<span><sub>*</sub>姓名</span>
<input class="form-control" type="text" placeholder="{{readonlyFlag ?'暂无姓名':'请输入姓名'}}"
[(ngModel)]="editRecruiting.name" [disabled]="readonlyFlag" />
[(ngModel)]="editRecruiting.name" [disabled]="readonlyFlag" (blur)="inputBlur()" />
</div>
<div class="contentItem">
<span>年龄</span>
......@@ -59,7 +59,7 @@
<div class="contentItem">
<span>学历</span>
<select class="form-control" [(ngModel)]="editRecruiting.educationLevel" [disabled]="readonlyFlag"
style=" direction: rtl;">
style=" direction: rtl;" (blur)="inputBlur()">
<option value=''>{{readonlyFlag ?'暂无学历信息':'请选择学历'}}</option>
<option *ngFor="let educationLevelItem of educationLevelList" [value]="educationLevelItem.id">
{{educationLevelItem.name}}
......@@ -69,7 +69,7 @@
<div class="contentItem">
<span>招募来源</span>
<select class="form-control" [(ngModel)]="editRecruiting.resourceDropMasterId" [disabled]="readonlyFlag"
style=" direction: rtl;">
style=" direction: rtl;" (blur)="inputBlur()">
<option value="">{{readonlyFlag ?'暂无招募来源':'请选择招募来源'}}</option>
<option *ngFor="let resourceItem of resourceList" [value]="resourceItem.id">
{{resourceItem.dropOptionName}}
......@@ -81,6 +81,11 @@
<input class="form-control" type="text" placeholder="增员创建时间" [(ngModel)]="editRecruiting.createdAt" disabled />
</div>
<div class="contentItem" *ngIf="this.id!=0">
<span>预计报聘时间</span>
<input class="form-control" type="date" placeholder="{{readonlyFlag ?'暂无预计报聘时间':'请选择预计报聘时间'}}"
[(ngModel)]="editRecruiting.timeToOnboarding" [disabled]="readonlyFlag" (blur)="inputBlur()" />
</div>
<div class="contentItem" *ngIf="this.id!=0">
<span>增员状态</span>
<div style="padding: 6px 15px;padding: 6px 15px;color: #e10d0d;font-weight: bold;">
{{editRecruiting.trackStatus}}</div>
......
......@@ -6,21 +6,21 @@
</div>
<div class="taem_panel_item_wrapper">
<div class="taem_panel_item_top">
<div>
<div class="item_title">
战队业绩
</div>
<ul class="tab">
<li>本月</li>
<li>季度</li>
<li>本年</li>
<li [ngClass]="{selected:selectedRecruitingItem===1}" (click)="subordinateSystemMemberQuery(1)">本月</li>
<li [ngClass]="{selected:selectedRecruitingItem===3}" (click)="subordinateSystemMemberQuery(3)">本季</li>
<li [ngClass]="{selected:selectedRecruitingItem===2}" (click)="subordinateSystemMemberQuery(2)">本年</li>
</ul>
</div>
<div class="taem_panel_item_content">
<ul>
<li>2,500</li>
<li>25</li>
<li>1</li>
<li>20%</li>
<li>{{statisticInfo?.fyp}}</li>
<li>{{statisticInfo?.fyc}}</li>
<li>{{statisticInfo?.count}}</li>
<li>{{statisticInfo?.completionRate | percent }}</li>
</ul>
<ul>
<li>首年保费</li>
......@@ -30,21 +30,21 @@
</ul>
</div>
<div class="next">
<span class="iconfont icon-xiangxia" routerLink="/teamRank"></span>
<span class="iconfont icon-ar-r" routerLink="/teamRank"></span>
</div>
</div>
<div class="taem_panel_item_wrapper">
<div class="taem_panel_item_top">
<div>
<div class="item_title">
战队销售活动量
</div>
</div>
<div class="taem_panel_item_content">
<ul>
<li>8</li>
<li>100</li>
<li>48</li>
<li>12</li>
<li>{{ this.teamActionsData?.scoreDayAverage | number: "1.0-0"}}</li>
<li>{{this.teamActionsData?.scoreWeekAverage | number: "1.0-0"}}</li>
<li>{{this.teamActionsData?.scoreMonthAverage | number: "1.0-0"}}</li>
<li>{{this.teamActionsData?.opportunitiesNum}}</li>
</ul>
<ul>
<li>今天平均</li>
......@@ -54,50 +54,50 @@
</ul>
</div>
<div class="next">
<span class="iconfont icon-xiangxia"></span>
<span class="iconfont icon-ar-r" routerLink="teamSalesScore"></span>
</div>
</div>
<div class="taem_panel_item_wrapper">
<div class="taem_panel_item_top">
<div>
<div class="item_title">
战队销售业绩预测
</div>
<ul class="tab">
<li>本月</li>
<li>季度</li>
<li>本年</li>
<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 class="taem_panel_item_content">
<ul>
<li>2,500</li>
<li>25</li>
<li>1</li>
<li>20%</li>
<li>{{premiums | number:'1.0-0'}}</li>
<li>{{commission | number:'1.0-0'}}</li>
<li>{{count | number:'1.0-0'}}</li>
<li>{{completionRates | percent}}</li>
</ul>
<ul>
<li>月保费预测</li>
<li>月佣金预测</li>
<li>月预计件数</li>
<li>完成率</li>
<li>{{selectedSalseItemName}}保费</li>
<li>{{selectedSalseItemName}}佣金</li>
<li>{{selectedSalseItemName}}件数</li>
<li>{{selectedSalseItemName}}完成率</li>
</ul>
</div>
<div class="next">
<span class="iconfont icon-xiangxia"></span>
<span class="iconfont icon-ar-r" routerLink="forecast"></span>
</div>
</div>
<div class="taem_panel_item_wrapper">
<div class="taem_panel_item_top">
<div>
<div class="item_title">
我的增员活动量
</div>
</div>
<div class="taem_panel_item_content">
<ul>
<li>1</li>
<li>6</li>
<li>10</li>
<li>0</li>
<li>{{recruitingStatistics?.activityForToday}}</li>
<li>{{recruitingStatistics?.activityForWeek}}</li>
<li>{{recruitingStatistics?.activityForMonth}}</li>
<li>{{recruitingStatistics?.recruitSucceed}}</li>
</ul>
<ul>
<li>今天</li>
......@@ -107,7 +107,7 @@
</ul>
</div>
<div class="next">
<span class="iconfont icon-xiangxia" routerLink="/recruiting"></span>
<span class="iconfont icon-ar-r" routerLink="/recruiting"></span>
</div>
</div>
</div>
\ No newline at end of file
.taem_panel_wrapper{
padding: 5px 8px;
background: #f6f7f2;
background: #eff0f1;
// background: #0664a4;
height: auto;
ul li,ol li{
......@@ -29,13 +29,17 @@
justify-content: space-between;
align-items: center;
height: 38px;
.item_title{
font-weight: bold;
font-size: 16px;
}
.tab{
display: flex;
width: 35%;
justify-content: space-around;
li{
width: 33%;
text-align: right;
li.selected{
font-weight: bold;
border-bottom: 3px red solid;
}
}
}
......@@ -52,7 +56,7 @@
}
}
.next{
text-align: center;
text-align: right;
}
}
}
\ No newline at end of file
import { Component, OnInit } from '@angular/core';
import { MyService } from '../my.service';
@Component({
selector: 'ydlife-team-panel',
......@@ -8,12 +9,84 @@ import { Component, OnInit } from '@angular/core';
export class TeamPanelComponent implements OnInit {
//战队名称
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) { }
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'];
console.log(res)
}
})
}
}
......@@ -4,6 +4,7 @@
// background: #f7f7f2;
min-height: 100%;
height: auto;
overflow: hidden;
ul,ol{
list-style: none;
}
......@@ -40,7 +41,7 @@
width: 60%;
ul.tab{
float: right;
width: 50%;
width: 70%;
font-size: 16px;
color: #fff;
li{
......
......@@ -16,8 +16,9 @@ export class TeamRankComponent implements OnInit {
statisticInfo: any;
constructor(private myService: MyService) {
this.performanceList = [
{ time: '1', name: '本月' },
{ time: '2', name: '本年' }
{ time: 1, name: '本月' },
{ time: 3, name: '本季' },
{ time: 2, name: '本年' }
]
this.list = [
{ 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>
<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 *ngIf="this.showType==='forecast'">
预测
</div>
</div>
\ No newline at end of file
.team_sales_detail_wrapper{
padding: 5px 8px;
background: #eff0f1;
overflow: hidden;
height: 100%;
.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;
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;
}
}
}
}
}
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';
@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>;
constructor(private activateRoute: ActivatedRoute, private router: Router,
private myService: MyService) { }
ngOnInit() {
this.practitionerId = JSON.parse(localStorage.getItem('lifeCustomerInfo'))['practitionerId'];
this.subordinateSystemName = sessionStorage.getItem('subordinateSystemName');
//判断显示销售得分还是销售预测
this.showType = this.activateRoute.snapshot.paramMap.get('type');
console.log(this.showType)
if (this.showType === 'teamSalesScore') {
this.playerSalesActivityQuery()
}
if (this.showType === '') {
}
}
//获取成员销售活动量得分
playerSalesActivityQuery() {
this.myService.playerSalesActivityQuery({ practitionerId: this.practitionerId }).subscribe((res) => {
console.log(res)
if (res['success']) {
this.playerSalesActivityInfo = res['data']['playerSalesActivityInfo']
}
})
}
}
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