Commit 87331dda by Sweet Zhang

生成名片

parents 754b23bd 0a037f46
......@@ -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,51 @@ export class LifeCommonService {
let L = appU[appU.length - 1];
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 {
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;
......
......@@ -50,7 +50,7 @@
</li>
<li>首年佣金</li>
<li>件数</li>
<li>排名</li>
<li>完成率</li>
</ul>
<ul class="performance_list">
<li>线上</li>
......@@ -62,7 +62,7 @@
</li>
<li class="markPrice">{{onlineInfo?.count?onlineInfo.count:'-'}}</li>
<li class="markPrice">
{{onlineInfo?.rank?onlineInfo.rank:'-'}}
{{onlineInfo?.completionRate?onlineInfo.completionRate + '%':'-'}}
</li>
</ul>
<ul class="performance_list">
......@@ -75,7 +75,7 @@
</li>
<li class="markPrice">{{offlineInfo?.count?offlineInfo.count:'-'}}</li>
<li class="markPrice">
{{offlineInfo?.rank?offlineInfo.rank:'-'}}
{{offlineInfo?.completionRate?offlineInfo.completionRate + '%':'-'}}
</li>
</ul>
</div>
......@@ -93,16 +93,18 @@
<li>本月</li>
<li>本周达成率</li>
<li>本月达成率</li>
<li>本周新增</li>
<li>本周新增商机</li>
</ul>
<ul class="activities">
<li class="markPrice">{{this.activities_grade?.scoreDay}}</li>
<li class="markPrice">{{this.activities_grade?.scoreWeek}}</li>
<li class="markPrice">{{this.activities_grade?.scoreMonth}}</li>
<li class="markPrice">
{{this.activities_grade?.achievementRateWeek!=null ? this.activities_grade?.achievementRateWeek:'-'}}</li>
{{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>
......
......@@ -192,14 +192,15 @@
display: flex;
font-size: 14px;
li{
width: 20%;
width: 23%;
text-align: center;
line-height: 25px;
font-size: 12px;
color: #fff;
overflow: hidden;
}
li:nth-child(1),li:nth-child(2),li:nth-child(3){
width: 15%;
width: 12%;
}
li.markPrice{
color: #fff;
......
......@@ -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,
......@@ -89,7 +89,7 @@ export class MyCenterHomeComponent implements OnInit, AfterViewInit {
{
title: '我的团队',
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: 'recruiting' },
{ no: 18, subtitle: '招募海报', icon: 'icon-haibao-1', path: '', routerLink: '' },
......@@ -134,6 +134,8 @@ export class MyCenterHomeComponent implements OnInit, AfterViewInit {
this.router.navigate(['/salesDetail'], { queryParams: { searchType: this.performanceSelectedFlag, showType: 'orderform' } });
} else if (item.no === 14) {
this.router.navigate(['/salesDetail'], { queryParams: { searchType: this.performanceSelectedFlag, showType: 'sales' } });
} else if (item.no === 15) {
this.router.navigate(['/teamPanel'])
} else if (!item.subtitle) {
return;
} else if (item.no === 18) {
......
......@@ -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';
import {BusinessCardComponent} from "./business-card/business-card.component";
const myRoutes: Routes = [
......@@ -43,8 +44,8 @@ const myRoutes: Routes = [
{ path: 'news', component: MyNewsComponent, canActivate: [AuthGuard] },
{ path: 'target', component: MyTargetComponent, canActivate: [AuthGuard] },
{ path: 'teamPanel', component: TeamPanelComponent, canActivate: [AuthGuard] },
{ path: 'teamPanel/:type', component: TeamSalesScoreComponent, canActivate: [AuthGuard] },
{ path: 'businessCard', component: BusinessCardComponent, canActivate: [AuthGuard] },
];
@NgModule({
......
......@@ -37,5 +37,5 @@
<span class="iconfont icon-ar-r"></span>
</div>
</div>
<div class="saveBtn" (click)="getOut()">退出</div>
<div class="saveBtn" (click)="getOut()">退出系统</div>
</div>
\ No newline at end of file
......@@ -18,10 +18,15 @@
<div class="content_target" *ngIf="searchType===1">
<div class="content_target_wrapper">
<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="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>
......@@ -44,16 +49,14 @@
</div>
</div>
<div class="line">
<i class="iconfont icon-bianji" *ngIf="personalSalesReadonlyFlag"
(click)="personalSalesReadonlyFlag = false;"></i>
<i class="iconfont icon-save" *ngIf="!personalSalesReadonlyFlag" (click)="salesTargetSave(1)"></i>
<div class="title">个人月销售目标</div>
<div class="month_target_item_wrapper" *ngFor="let salesTargetMonthsItem of salesTargetMonths">
<span style="font-weight: bold;">{{salesTargetMonthsItem.monthNum}}月销售目标</span>
<span class="dot" 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">
......@@ -77,9 +80,11 @@
<i class="iconfont icon-bianji" *ngIf="personalSalesActivityFlag"
(click)="personalSalesActivityFlag = false;"></i>
<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 *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"
......@@ -93,7 +98,9 @@
<div class="content_target_wrapper">
<div class="line">
<i class="iconfont icon-bianji" *ngIf="recruitsReadonlyFlag" (click)="recruitsReadonlyFlag = false;"></i>
<i class="iconfont icon-save" *ngIf="!recruitsReadonlyFlag" (click)="potentialGoalsSetting()"></i>
<i class="iconfont icon-save" *ngIf="!recruitsReadonlyFlag" (click)="potentialGoalsSetting()">
<span class="save">保存</span>
</i>
<div class="title">年增员目标</div>
<div class="content_target_item">
<span>年度增员目标</span>
......@@ -111,9 +118,8 @@
<div class="line">
<div class="title">月增员目标</div>
<div class="month_target_item_wrapper" *ngFor="let recruitGoalForMonthItem of recruitGoalForMonthList">
<span style="font-weight: bold;">{{recruitGoalForMonthItem.month}}月增员目标</span>
<div class="content_target_item">
<span>增员目标数</span>
<span>{{recruitGoalForMonthItem.month}}月增员目标数</span>
<input type="number" class="form-control" placeholder="请输入增员目标数" [disabled]="recruitsReadonlyFlag"
[(ngModel)]="recruitGoalForMonthItem.numberRecruits" (ngModelChange)="changeMonthRecruit()"
(blur)="inputBlur()">
......@@ -129,9 +135,9 @@
<i class="iconfont icon-bianji" *ngIf="recruitsActivityReadonlyFlag"
(click)="recruitsActivityReadonlyFlag = false;"></i>
<i class="iconfont icon-save" *ngIf="!readonlyFlag && recruitingTargetFlag && !recruitsActivityReadonlyFlag"
(click)="potentialGoalsActionsUpdate()"></i>
(click)="potentialGoalsActionsUpdate()"> <span class="save">保存</span></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"
......@@ -145,6 +151,10 @@
<div class="content_target" *ngIf="searchType===5">
<div class="content_target_wrapper">
<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="content_target_item">
<span>首年保费FYP</span>
......@@ -170,12 +180,9 @@
</div>
</div>
<div class="line">
<i class="iconfont icon-bianji" *ngIf="personalSalesReadonlyFlag"
(click)="personalSalesReadonlyFlag = false;"></i>
<i class="iconfont icon-save" *ngIf="!personalSalesReadonlyFlag" (click)="salesTargetSave(2)"></i>
<div class="title">团队月销售目标</div>
<div class="month_target_item_wrapper" *ngFor="let salesTargetMonthsItem of salesTargetMonths">
<span style="font-weight: bold;">{{salesTargetMonthsItem.monthNum}}月销售目标</span>
<span class="dot" style="font-weight: bold;">{{salesTargetMonthsItem.monthNum}}月</span>
<div class="content_target_item">
<span>FYP</span>
<input type="number" class="form-control" placeholder="{{personalSalesReadonlyFlag?'暂无目标保费':'请输入目标保费'}}"
......
......@@ -47,7 +47,6 @@ ul li,ol li{
.iconfont{
width: 55px;
height: 55px;
line-height: 55px;
border-radius: 50%;
position: absolute;
right: 10px;
......@@ -56,13 +55,21 @@ ul li,ol li{
background: #0767bf;
text-align: center;
top: -5px;
.save{
font-size: 12px;
position: absolute;
left: 30%;
top: 60%;
}
}
.iconfont.icon-bianji{
line-height: 55px;
}
.title{
font-size: 16px;
font-weight: bold;
margin: 10px 0 15px 0;
}
.content_target_item{
display: flex;
justify-content: space-between;
......@@ -78,14 +85,24 @@ ul li,ol li{
box-shadow: none;
display: flex;
flex-wrap: wrap;
font-size: 18px;
}
.form-control[disabled], .form-control[readonly], fieldset[disabled] .form-control{
opacity:.5
opacity:.75;
}
}
.month_target_item_wrapper{
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{
border: 1px #ddd solid;
......
......@@ -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() {
......@@ -124,20 +125,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 +138,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 +163,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 +272,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 +280,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 +358,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 }
]
}
}
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { DatePipe } from "@angular/common";
import { MyRoutingModule } from './my-routing.module';
import { MyCenterHomeComponent } from './my-center-home/my-center-home.component';
import { LifeCommonModule } from "../common/life-common.module";
import { MkMaterialComponent } from './mk-material/mk-material.component';
import { MkMaterialDetailComponent } from './mk-material-detail/mk-material-detail.component';
import { FileUploadComponent } from './file-upload/file-upload.component';
import { ImportantAnnouncementComponent } from './important-announcement/important-announcement.component';
import { SalesDetailComponent } from './sales-detail/sales-detail.component';
import { AnnouncementDetailComponent } from './announcement-detail/announcement-detail.component';
import { MyBusinessComponent } from './my-business/my-business.component';
import { MyBusinessDetailComponent } from './my-business-detail/my-business-detail.component';
import { PickerComponent } from '../common/picker/picker.component';
import { ToastComponent } from '../common/toast/toast.component';
import { SalesRankComponent } from './sales-rank/sales-rank.component';
import { TeamRankComponent } from './team-rank/team-rank.component';
import { RecruitingComponent } from './recruiting/recruiting.component';
import { RecruitingDetailComponent } from './recruiting-detail/recruiting-detail.component';
import { ThanksComponent } from './thanks/thanks.component';
import { MySettingComponent } from './my-setting/my-setting.component';
import { MySettingDetailComponent } from './my-setting-detail/my-setting-detail.component';
import { MyNewsComponent } from './my-news/my-news.component';
import { MyTargetComponent } from './my-target/my-target.component';
import { TeamPanelComponent } from './team-panel/team-panel.component';
import { BusinessCardComponent } from './business-card/business-card.component';
import {NgModule} from '@angular/core';
import {CommonModule} from '@angular/common';
import {DatePipe} from "@angular/common";
import {MyRoutingModule} from './my-routing.module';
import {MyCenterHomeComponent} from './my-center-home/my-center-home.component';
import {LifeCommonModule} from "../common/life-common.module";
import {MkMaterialComponent} from './mk-material/mk-material.component';
import {MkMaterialDetailComponent} from './mk-material-detail/mk-material-detail.component';
import {FileUploadComponent} from './file-upload/file-upload.component';
import {ImportantAnnouncementComponent} from './important-announcement/important-announcement.component';
import {SalesDetailComponent} from './sales-detail/sales-detail.component';
import {AnnouncementDetailComponent} from './announcement-detail/announcement-detail.component';
import {MyBusinessComponent} from './my-business/my-business.component';
import {MyBusinessDetailComponent} from './my-business-detail/my-business-detail.component';
import {PickerComponent} from '../common/picker/picker.component';
import {ToastComponent} from '../common/toast/toast.component';
import {SalesRankComponent} from './sales-rank/sales-rank.component';
import {TeamRankComponent} from './team-rank/team-rank.component';
import {RecruitingComponent} from './recruiting/recruiting.component';
import {RecruitingDetailComponent} from './recruiting-detail/recruiting-detail.component';
import {ThanksComponent} from './thanks/thanks.component';
import {MySettingComponent} from './my-setting/my-setting.component';
import {MySettingDetailComponent} from './my-setting-detail/my-setting-detail.component';
import {MyNewsComponent} from './my-news/my-news.component';
import {MyTargetComponent} from './my-target/my-target.component';
import {TeamPanelComponent} from './team-panel/team-panel.component';
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({
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: [
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,32 @@ 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));
}
//战队成员销售业绩预测
salesPerformanceForecastListQuery(param) {
const url = this.ydapi + '/practitioner/salesPerformanceForecastListQuery';
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,15 @@
<input class="form-control" type="text" placeholder="增员创建时间" [(ngModel)]="editRecruiting.createdAt" disabled />
</div>
<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>
<div style="padding: 6px 15px;padding: 6px 15px;color: #e10d0d;font-weight: bold;">
{{editRecruiting.trackStatus}}</div>
......
......@@ -67,6 +67,11 @@
display: flex;
flex-wrap: wrap;
}
input[type="date"]{
position: absolute;
right: -6%;
direction: rtl;
}
.sexWrapper {
display: flex;
width: 60%;
......
......@@ -114,7 +114,6 @@ export class RecruitingDetailComponent implements OnInit {
practitionerId: JSON.parse(localStorage.getItem('lifeCustomerInfo'))['practitionerId']
}
this.myService.recruitTrackQuery(param).subscribe((res) => {
// console.log(res)
if (res['success']) {
this.recruitTrackInfoList = res['data']['recruitTrackInfoList'];
}
......@@ -161,7 +160,6 @@ export class RecruitingDetailComponent implements OnInit {
practitionerId: JSON.parse(localStorage.getItem('lifeCustomerInfo'))['practitionerId'],
potentialId: this.potentialId ? this.potentialId : null
}
console.log(JSON.parse(localStorage.getItem('lifeCustomerInfo'))['practitionerId'])
if (!this.editRecruiting.name) {
this.toastDialog = true;
this.toastInfo = {
......
......@@ -7,22 +7,19 @@
list-style: none;
}
.title{
width: 100%;
float: left;
display: flex;
margin-bottom: 10px;
padding: 10px 0;
padding: 10px 15px;
justify-content: space-between;
width: 100%;
align-items: center;
ul.tab{
float: left;
// width: 21%;
width: 30%;
margin-right: 5%;
display: flex;
li{
float: left;
margin-right: 5px;
text-align: left;
height: 30px;
line-height: 30px;
margin-right: 5%;
color: #fff;
}
li.selected{
......@@ -30,7 +27,7 @@
font-weight: bold;
border-bottom: 2px #ff002a solid;
}
li:nth-child(3){
li:last-child{
margin-right: 0;
}
}
......
......@@ -6,45 +6,45 @@
</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 class="big" style="width: 30%;">{{statisticInfo?.fyp | number: "1.0-2"}}</li>
<li class="big" style="width: 30%;">{{statisticInfo?.fyc | number: "1.0-2"}}</li>
<li class="big" style="width: 15%;">{{statisticInfo?.count | number}}</li>
<li class="big" style="width: 15%;">{{lifeCommonService.toPercent(statisticInfo?.completionRate) }}</li>
</ul>
<ul>
<li>首年保费</li>
<li>首年佣金</li>
<li>件数</li>
<li>达成率</li>
<li style="width: 30%;">首年保费</li>
<li style="width: 30%;">首年佣金</li>
<li style="width: 15%;">件数</li>
<li style="width: 15%;">达成率</li>
</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 class="big">{{this.teamActionsData?.scoreDayAverage?this.teamActionsData?.scoreDayAverage:'0'}}</li>
<li class="big">{{this.teamActionsData?.scoreWeekAverage?this.teamActionsData?.scoreWeekAverage:'0'}}</li>
<li class="big">{{this.teamActionsData?.scoreMonthAverage?this.teamActionsData?.scoreMonthAverage:'0'}}</li>
<li class="big">{{this.teamActionsData?.opportunitiesNum?this.teamActionsData?.opportunitiesNum:'0'}}</li>
</ul>
<ul>
<li>今天平均</li>
......@@ -54,60 +54,61 @@
</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>
</ul>
</div>
<div class="taem_panel_item_content">
<ul>
<li>¥2,500</li>
<li>¥25</li>
<li>1</li>
<li>20%</li>
<li class="big">{{recruitingStatistics?.activityForToday}}</li>
<li class="big">{{recruitingStatistics?.activityForWeek}}</li>
<li class="big">{{recruitingStatistics?.activityForMonth}}</li>
<li class="big" style="width: 30%;">{{recruitingStatistics?.recruitSucceed}}</li>
</ul>
<ul>
<li>月保费预测</li>
<li>月佣金预测</li>
<li>月预计件数</li>
<li>月完成率</li>
<li>今天</li>
<li>本周</li>
<li>本月</li>
<li style="width: 30%;">本月新增对象</li>
</ul>
</div>
<div class="next">
<span class="iconfont icon-xiangxia"></span>
<span class="iconfont icon-ar-r" routerLink="/recruiting"></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 [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">
<div class="taem_panel_item_content forecast">
<ul>
<li>1</li>
<li>6</li>
<li>10</li>
<li>0</li>
<li class="big">{{premiums?lifeCommonService.transform(premiums):'0'}}</li>
<li class="big">{{commission?lifeCommonService.transform(commission):'0'}}</li>
<li class="big">{{count?count:'0'}}</li>
<li class="big">{{completionRates?lifeCommonService.toPercent(completionRates):'0'}}</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" routerLink="/recruiting"></span>
<span class="iconfont icon-ar-r" routerLink="forecast"></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;
}
}
}
......@@ -44,15 +48,33 @@
display: flex;
justify-content: space-between;
li{
width: 25%;
width: 20%;
text-align: center;
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{
text-align: center;
text-align: right;
}
}
}
\ No newline at end of file
import { Component, OnInit } from '@angular/core';
import { MyService } from '../my.service';
import { LifeCommonService } from '../../common/life-common.service';
@Component({
selector: 'ydlife-team-panel',
templateUrl: './team-panel.component.html',
......@@ -8,12 +9,83 @@ 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, public lifeCommonService: LifeCommonService) { }
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 @@
// 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>
<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 @@
<ul class="icon_lists dib-box">
<li class="dib">
<<<<<<< HEAD
<span class="icon iconfont">&#xe679;</span>
<div class="name">邮箱</div>
<div class="code-name">&amp;#xe679;</div>
</li>
<li class="dib">
=======
>>>>>>> 0a037f4689e09d04a3708f6c9a4e437b7a837d03
<span class="icon iconfont">&#xe678;</span>
<div class="name">上引号</div>
<div class="code-name">&amp;#xe678;</div>
......@@ -1059,6 +1062,7 @@
<ul class="icon_lists dib-box">
<li class="dib">
<<<<<<< HEAD
<span class="icon iconfont icon-youxiang"></span>
<div class="name">
邮箱
......@@ -1068,6 +1072,8 @@
</li>
<li class="dib">
=======
>>>>>>> 0a037f4689e09d04a3708f6c9a4e437b7a837d03
<span class="icon iconfont icon-shangyinhao"></span>
<div class="name">
上引号
......@@ -2556,6 +2562,7 @@
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<<<<<<< HEAD
<use xlink:href="#icon-youxiang"></use>
</svg>
<div class="name">邮箱</div>
......@@ -2564,6 +2571,8 @@
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
=======
>>>>>>> 0a037f4689e09d04a3708f6c9a4e437b7a837d03
<use xlink:href="#icon-shangyinhao"></use>
</svg>
<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 @@
"description": "",
"glyphs": [
{
<<<<<<< HEAD
"icon_id": "9592761",
"name": "邮箱",
"font_class": "youxiang",
......@@ -13,6 +14,8 @@
"unicode_decimal": 59001
},
{
=======
>>>>>>> 0a037f4689e09d04a3708f6c9a4e437b7a837d03
"icon_id": "816614",
"name": "上引号",
"font_class": "shangyinhao",
......
......@@ -20,9 +20,12 @@ Created by iconfont
/>
<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" />
=======
>>>>>>> 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" />
......
......@@ -17,7 +17,6 @@
<link rel="stylesheet" href="./assets/bootstrap/dist/css/bootstrap.min.css">
<link rel="stylesheet" href="./assets/LCalendar/LCalendar.css">
<link rel="stylesheet" href="./assets/laydate/theme/default/laydate.css">
</head>
<body>
......@@ -29,16 +28,16 @@
<div id="adv"
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;">
<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">
<div class="loadingContent">
<span style="letter-spacing: 12px;">海纳百川</span>
<span style="letter-spacing: 12px;">·</span>
<span style="letter-spacing: 12px;">赢家后</span>
</div>
<!-- <div style="margin-top: 45%;">欢迎回家,先喝碗鸡汤</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>
......@@ -51,7 +50,25 @@
<script src="./assets/LCalendar/LCalendar.js"></script>
<script src="./assets/laydate/laydate.js"></script>
<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 () {
let loading = document.getElementById("adv");
loading.style.display = 'block';
......@@ -83,8 +100,7 @@
iframe.parentNode.removeChild(iframe);
}
// var api = 'https://' + window.location.host;
var api = 'https://mdev.zuihuibi.cn';
function getknowledgeQry() {
$.ajax({
type: "POST",
......@@ -94,10 +110,25 @@
tagId: 35
}),
async: false,
headers: { "X-Authorization": token },
success: function (res) {
if (res['success']) {
let content = res['data']['knowledge']['content'];
$('#content').html(content)
let content = String(res['data']['knowledge']['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 {
transform: scaleY(0.5);
}
.icon-shangyinhao{
position: relative;
top: -8px;
}
@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