Commit bfd8c518 by Chao Sun

我的团队&第一次登录感谢页

parent 04c2648c
import {NgModule} from '@angular/core';
import {Routes, RouterModule} from '@angular/router';
import {PageNotFoundComponent} from './page-not-found/page-not-found.component';
import {AuthGuard} from './auth/auth.guard';
import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
import { PageNotFoundComponent } from './page-not-found/page-not-found.component';
import { AuthGuard } from './auth/auth.guard';
const routes: Routes = [
{path: '', redirectTo: '/my', pathMatch: 'full'},
{path: 'my', loadChildren: () => import('./my/my.module').then(mod => mod.MyModule), canLoad: [AuthGuard]},
{path: 'login', loadChildren: () => import('./auth/auth.module').then(mod => mod.AuthModule)},
{path: '**', component: PageNotFoundComponent},
{ path: '', redirectTo: '/my', pathMatch: 'full' },
{ path: 'my', loadChildren: () => import('./my/my.module').then(mod => mod.MyModule), canLoad: [AuthGuard] },
{ path: 'login', loadChildren: () => import('./auth/auth.module').then(mod => mod.AuthModule) },
{ path: '**', component: PageNotFoundComponent }
];
@NgModule({
......
......@@ -12,6 +12,7 @@ import { httpInterceptorProviders } from './http-interceptors/index';
import { DatePipe } from "@angular/common";
import { SafeHtmlPipe } from './safe-html.pipe';
import { LocalStorage } from './domain/local.storage';
import { BrowserAnimationsModule } from "@angular/platform-browser/animations";
@NgModule({
declarations: [
......@@ -25,7 +26,8 @@ import { LocalStorage } from './domain/local.storage';
AuthModule,
LifeCommonModule,
HttpClientModule,
AppRoutingModule
AppRoutingModule,
BrowserAnimationsModule
],
providers: [DatePipe, httpInterceptorProviders, LocalStorage],
bootstrap: [AppComponent]
......
......@@ -20,7 +20,7 @@ export class LoginComponent implements OnInit, OnDestroy {
};
isNeedAlert: boolean;
dialogInfo: any;
redirect: any;
constructor(public authService: AuthService, public router: Router) {
}
......@@ -46,20 +46,25 @@ export class LoginComponent implements OnInit, OnDestroy {
this.authService.compare(compareInfo).subscribe(res => {
if (res['success']) {
this.authService.login({ mobileNo: this.userInfo.mobileNo }).subscribe((response) => {
if (response['success']) {
console.log()
if (response['data']['getOpenIdUrl']) {
window.location.href = response['data']['getOpenIdUrl'];
// this.authService.getOppId(response['data']['getOpenIdUrl']).subscribe((res) => {
// console.log(res)
// })
}
this.authService.isLoggedIn = true;
const lifeCustomerInfo = { ...response.data, mobileNo: this.userInfo.mobileNo, commonResult: null };
if (lifeCustomerInfo['customerId'] && lifeCustomerInfo['practitionerId']) {
localStorage.setItem('lifeCustomerInfo', JSON.stringify(lifeCustomerInfo));
const redirect = this.authService.redirectUrl ? this.router.parseUrl(this.authService.redirectUrl) : '/my';
this.router.navigateByUrl(redirect);
if (response['data']['loginTimes'] > 0) {
if (response['data']['getOpenIdUrl']) {
window.location.href = response['data']['getOpenIdUrl'];
} else {
this.redirect = this.authService.redirectUrl ? this.router.parseUrl(this.authService.redirectUrl) : '/my';
this.router.navigateByUrl(this.redirect);
}
} else {
if (response['data']['getOpenIdUrl']) {
window.location.href = response['data']['getOpenIdUrl'];
}
}
} else {
this.openPopInfo('暂无查询资格');
}
......
import {
trigger, // 动画封装触发,外部的触发器
state, // 转场状态控制
style, // 用来书写基本的样式
transition, // 用来实现css3的 transition
animate, // 用来实现css3的animations
keyframes // 用来实现css3 keyframes的
} from '@angular/animations';
export const fadeIn = trigger('fadeIn', [
state('in', style({ display: 'none' })), // 默认元素不展开
state('out', style({ display: 'block' })),
// transition('in => out', animate('.5s .2s ease-out')),
// transition('out => in', animate('.5s .2s ease-in')),
// transition('in <=> out', animate('.5s .2s ease-in'))
transition('in => out', [ // 进场动画
animate(300, keyframes([
style({ height: '0', opacity: 0, offset: 0 }), // 元素高度0,元素隐藏(透明度为0),动画帧在0%
style({ height: '*', opacity: 1, offset: 1 }) // 200ms后高度自适应展开,元素展开(透明度为1),动画帧在100%
]))
]),
transition('out=> in', [
animate(300, keyframes([
style({ height: '*', opacity: 1, offset: 0 }), // 与之对应,让元素从显示到隐藏一个过渡
style({ height: '0', opacity: 0, offset: 1 })
]))
])
]);
......@@ -3,7 +3,7 @@ import { MyService } from '../my.service';
import { ActivatedRoute } from "@angular/router";
import { BusinessQuery } from '../../domain/businessQuery';
import { LifeCommonService } from '../../common/life-common.service';
declare var LCalendar: any;
@Component({
selector: 'ydlife-my-business-detail',
templateUrl: './my-business-detail.component.html',
......
......@@ -26,6 +26,4 @@
</div>
</div>
</div>
</div>
\ No newline at end of file
......@@ -29,10 +29,8 @@
</div>
<div class="weui-panel__bd">
<div class="performance_wrapper">
<!-- <img class="bg" src="assets/images/sales__bg.png" > -->
<div class="content">
<span class="detail" (click)="jumpToDetail()">龙虎榜<i class="iconfont icon-ar-r"
style="font-size:12px;"></i></span>
......@@ -87,8 +85,8 @@
routerLink="importantAnnouncement">更多</span>
</div>
</div>
<div class="tool_wrapper">
<div class="tool_item" *ngFor="let menuItem of menuLists;">
<div class="tool_wrapper" *ngFor="let menuItem of menuLists;">
<div class="tool_item" *ngIf="menuItem.isShow">
<h3>{{menuItem.title}}</h3>
<div class="tool_content">
<div class="content_item" *ngFor="let menuItemContent of menuItem['content']" href="javascript:;"
......@@ -158,6 +156,8 @@
<p>保险业务经营许可证:269615000000800</p>
<p>版权所有©2020银盾保险在线 &nbsp;沪ICP备18000565号</p>
</div>
</div>
<ydlife-alert *ngIf="isNeedAlert" [dialogInfo]="dialogInfo" (popInfo)="getPopInfo()"></ydlife-alert>
\ No newline at end of file
.weui-panel{
position: relative;
.weui-cell__hd {
i.iconfont {
background-image: -webkit-gradient(linear, left top, right bottom, from(#ff1c2b), to(#461415));
......@@ -335,5 +336,17 @@
margin-bottom:8px;
}
}
}
}
.thankWrapper{
width: 95%;
height: 50%;
margin: 0 auto;
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
text-align: center;
}
}
......@@ -11,7 +11,7 @@ declare var wx: any;
@Component({
selector: 'ydlife-my-center-home',
templateUrl: './my-center-home.component.html',
styleUrls: ['./my-center-home.component.scss']
styleUrls: ['./my-center-home.component.scss'],
})
export class MyCenterHomeComponent implements OnInit, AfterViewInit {
@ViewChild('hide') hide: ElementRef
......@@ -31,6 +31,8 @@ export class MyCenterHomeComponent implements OnInit, AfterViewInit {
productInfo: Plans;
inquiry: User;
firstAnnouncementTitle: string;
//判断是否显示我的团队
isShow: boolean;
constructor(
private router: Router,
......@@ -44,56 +46,63 @@ export class MyCenterHomeComponent implements OnInit, AfterViewInit {
this.deviceType = this.lifeCommonService.checkDeviceType();
this.lifeCustomerInfo = JSON.parse(localStorage.getItem('lifeCustomerInfo')) ? JSON.parse(localStorage.getItem('lifeCustomerInfo')) : null;
this.announcementQuery();
this.menuLists = [
{
title: '营销工具',
content: [
{ no: 2, subtitle: 'AI保险医生', icon: 'icon-AI', path: `https://${window.location.host}/questionnaire/#/index?campaign=AIRobot&task=AItask1&customerId=${this.lifeCustomerInfo.customerId}`, routerLink: '' },
{ no: 1, subtitle: '獴哥保险诊所', icon: 'icon-zhensuozhongxin', path: `https://${window.location.host}/consulting`, routerLink: '' },
{ no: 4, subtitle: '银盾在线', icon: 'icon-yidonghulianwang2', path: `https://${window.location.host}/index`, routerLink: '' },
{ no: 13, subtitle: '我的商机', icon: 'icon-xiansuo1', path: '', routerLink: 'business' },
{ no: 12, subtitle: '我的保单', icon: 'icon-baodanyangben', path: '', routerLink: '' },
{ no: 14, subtitle: '我的佣金', icon: 'icon-yongjin', path: '', routerLink: '' },
{ no: 15, subtitle: '', icon: '', path: '', routerLink: '' },
{ no: 16, subtitle: '', icon: '', path: '', routerLink: '' }
]
},
{
title: '我的团队',
content: [
{ no: 17, subtitle: '我的团队', icon: 'icon-AI', path: '', routerLink: 'teamRank' },
{ no: 18, subtitle: '团队增员', icon: 'icon-AI', path: '', routerLink: '' },
{ no: 19, subtitle: '', icon: '', path: '', routerLink: '' },
{ no: 20, subtitle: '', icon: '', path: '', routerLink: '' }
]
},
{
title: '教育培训',
content: [
{ no: 5, subtitle: '保险ABC', icon: 'icon-zidian', path: `https://${window.location.host}/issue`, routerLink: '' },
{ no: 6, subtitle: '培训课件', icon: 'icon-ziliaoku', path: '', routerLink: 'training' },
{ no: 11, subtitle: '文件下载', icon: 'icon-xiazai1', path: 'https://www.ydinsurance.cn/?page_id=13957', routerLink: 'fileUpload' },
{ no: 8, subtitle: '', icon: '', path: '', routerLink: '' }
this.subordinateSystemMemberQuery();
setTimeout(() => {
this.menuLists = [
{
title: '营销工具',
content: [
{ no: 2, subtitle: 'AI保险医生', icon: 'icon-AI', path: `https://${window.location.host}/questionnaire/#/index?campaign=AIRobot&task=AItask1&customerId=${this.lifeCustomerInfo.customerId}`, routerLink: '' },
{ no: 1, subtitle: '獴哥保险诊所', icon: 'icon-zhensuozhongxin', path: `https://${window.location.host}/consulting`, routerLink: '' },
{ no: 4, subtitle: '线上投保', icon: 'icon-yidonghulianwang2', path: `https://${window.location.host}/index`, routerLink: '' },
{ no: 13, subtitle: '我的商机', icon: 'icon-xiansuo1', path: '', routerLink: 'business' },
{ no: 12, subtitle: '我的保单', icon: 'icon-baodanyangben', path: '', routerLink: '' },
{ no: 14, subtitle: '我的佣金', icon: 'icon-yongjin', path: '', routerLink: '' },
{ no: '', subtitle: '', icon: '', path: '', routerLink: '' },
{ no: '', subtitle: '', icon: '', path: '', routerLink: '' }
],
isShow: true
},
{
title: '我的团队',
content: [
{ no: 15, subtitle: '我的团队', icon: 'icon-tuandui', path: '', routerLink: 'teamRank' },
{ no: 16, subtitle: '团队增员', icon: 'icon-tuanduiguanlisvg', path: '', routerLink: '' },
// { no: 16, subtitle: '团队增员', icon: 'icon-tuanduiguanlisvg', path: '', routerLink: 'recruiting' },
{ no: '', subtitle: '', icon: '', path: '', routerLink: '' },
{ no: '', subtitle: '', icon: '', path: '', routerLink: '' }
],
isShow: this.isShow
},
{
title: '教育培训',
content: [
{ no: 5, subtitle: '保险ABC', icon: 'icon-zidian', path: `https://${window.location.host}/issue`, routerLink: '' },
{ no: 6, subtitle: '培训课件', icon: 'icon-ziliaoku', path: '', routerLink: 'training' },
{ no: 11, subtitle: '文件下载', icon: 'icon-xiazai1', path: 'https://www.ydinsurance.cn/?page_id=13957', routerLink: 'fileUpload' },
{ no: 17, subtitle: '产品库', icon: 'icon-jingxuanchanpinku', path: 'https://www.ydinsurance.cn/?page_id=14331', routerLink: '' },
]
}, {
title: '展业工具',
content: [
{ no: 9, subtitle: '执业分享', icon: 'icon-zhiyezhenghao', path: `https://${window.location.host}/brokerQry/#/brokerDetail/${this.lifeCustomerInfo.practitionerId}`, routerLink: '' },
{ no: 10, subtitle: '职业类别', icon: 'icon-zhiye', path: 'https://www.ydinsurance.cn/occupationQry/', routerLink: '' },
{ no: 7, subtitle: '文章分享', icon: 'icon-fenxiangwenzhang', path: `https://${window.location.host}/discovery`, routerLink: '' },
{ no: 3, subtitle: '产品海报', icon: 'icon-haibao-1', path: '/salesDetail', routerLink: 'material' },
],
isShow: true
}, {
title: '展业工具',
content: [
{ no: 9, subtitle: '我的名片', icon: 'icon-zhiyezhenghao', path: `https://${window.location.host}/brokerQry/#/brokerDetail/${this.lifeCustomerInfo.practitionerId}`, routerLink: '' },
{ no: 10, subtitle: '职业类别', icon: 'icon-zhiye', path: 'https://www.ydinsurance.cn/occupationQry/', routerLink: '' },
{ no: 7, subtitle: '文章分享', icon: 'icon-fenxiangwenzhang', path: `https://${window.location.host}/discovery`, routerLink: '' },
{ no: 3, subtitle: '产品海报', icon: 'icon-haibao-1', path: '/salesDetail', routerLink: 'material' },
],
isShow: true
}
];
}, 300)
]
}
];
this.performanceList = [
{ type: 'month', name: '本月' },
{ type: 'year', name: '本年度' }
]
this.brokerInfoQuery();
this.recommendPlanQuery();
}
ngAfterViewInit() {
......@@ -149,7 +158,6 @@ export class MyCenterHomeComponent implements OnInit, AfterViewInit {
if (res['success']) {
this.announcementLists = res['data']['announcementInfoList'];
this.firstAnnouncement = this.announcementLists[0]['title'];
}
});
}
......@@ -269,4 +277,16 @@ export class MyCenterHomeComponent implements OnInit, AfterViewInit {
jumpToDetail() {
this.router.navigate(['/rank'], { queryParams: { searchType: this.performanceSelectedFlag } });
}
//查询是否团队长
subordinateSystemMemberQuery() {
const practitionerId = JSON.parse(localStorage.getItem('lifeCustomerInfo'))['practitionerId'];
this.myService.subordinateSystemMemberQuery({ practitionerId: practitionerId, time: 1 }).subscribe((res) => {
if (res['success']) {
this.isShow = true;
} else {
this.isShow = false;
}
})
}
}
......@@ -12,6 +12,9 @@ import { MyBusinessComponent } from './my-business/my-business.component';
import { MyBusinessDetailComponent } from './my-business-detail/my-business-detail.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';
const myRoutes: Routes = [
{ path: '', component: MyCenterHomeComponent, canActivate: [AuthGuard] },
{ path: 'material', component: MkMaterialComponent, canActivate: [AuthGuard] },
......@@ -24,7 +27,10 @@ const myRoutes: Routes = [
{ path: 'business', component: MyBusinessComponent, canActivate: [AuthGuard] },
{ path: 'business/:id', component: MyBusinessDetailComponent, canActivate: [AuthGuard] },
{ path: 'rank', component: SalesRankComponent, canActivate: [AuthGuard] },
{ path: 'teamRank', component: TeamRankComponent, canActivate: [AuthGuard] }
{ path: 'teamRank', component: TeamRankComponent, canActivate: [AuthGuard] },
{ path: 'recruiting', component: RecruitingComponent, canActivate: [AuthGuard] },
{ path: 'recruiting/:id', component: RecruitingDetailComponent, canActivate: [AuthGuard] },
{ path: 'thanks', component: ThanksComponent, canActivate: [AuthGuard] }
];
@NgModule({
......
......@@ -16,10 +16,13 @@ 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';
@NgModule({
declarations: [MyCenterHomeComponent, MkMaterialComponent, MkMaterialDetailComponent, FileUploadComponent, ImportantAnnouncementComponent, SalesDetailComponent, AnnouncementDetailComponent, MyBusinessComponent, MyBusinessDetailComponent, PickerComponent, ToastComponent, SalesRankComponent, TeamRankComponent],
declarations: [MyCenterHomeComponent, MkMaterialComponent, MkMaterialDetailComponent, FileUploadComponent, ImportantAnnouncementComponent, SalesDetailComponent, AnnouncementDetailComponent, MyBusinessComponent, MyBusinessDetailComponent, PickerComponent, ToastComponent, SalesRankComponent, TeamRankComponent, RecruitingComponent, RecruitingDetailComponent, ThanksComponent],
imports: [
CommonModule,
LifeCommonModule,
......
......@@ -133,4 +133,11 @@ export class MyService {
.post(url, JSON.stringify(practitionerId));
}
//查询团队业绩及是否团队长
subordinateSystemMemberQuery(practitionerId) {
const url = this.API + '/practitioner/subordinateSystemMemberQuery';
return this.http
.post(url, JSON.stringify(practitionerId));
}
}
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { RecruitingDetailComponent } from './recruiting-detail.component';
describe('RecruitingDetailComponent', () => {
let component: RecruitingDetailComponent;
let fixture: ComponentFixture<RecruitingDetailComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ RecruitingDetailComponent ]
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(RecruitingDetailComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});
import { Component, OnInit } from '@angular/core';
import { ActivatedRoute } from "@angular/router";
@Component({
selector: 'ydlife-recruiting-detail',
templateUrl: './recruiting-detail.component.html',
styleUrls: ['./recruiting-detail.component.scss']
})
export class RecruitingDetailComponent implements OnInit {
//潜在增员的id
id: string;
constructor(private activateRoute: ActivatedRoute, ) { }
ngOnInit() {
this.id = this.activateRoute.snapshot.paramMap.get('id');
console.log(this.id)
}
}
<div class="salesWrapper">
<div class="salesContent">
<div style="text-align: center;margin: 20px auto;font-size: 20px;" *ngIf="businessList?.length==0">暂无商机</div>
<div class="salesItem" *ngFor="let recruitingItem of recruitingList"
[routerLink]="['/recruiting',recruitingItem.id]">
<div class="icon_bolck"><span class="iconfont icon-tuanduiguanlisvg"></span></div>
<div class="line">
<div>姓名:{{recruitingItem.name}}</div>
<span class="iconfont icon-ar-r" style="font-size: 10px;position: relative; right: -2px;"></span>
</div>
<div class="line">
<div> 手机号:{{recruitingItem.mobileNo}}</div>
<div>{{recruitingItem.status}}</div>
</div>
<div class="line">
<div>招募来源:{{recruitingItem.sources}}</div>
<div>{{recruitingItem.date}}</div>
</div>
</div>
</div>
<div class="add">
<i class="iconfont icon-jiahao" (click)="addMember()"></i>
</div>
</div>
\ No newline at end of file
.salesWrapper{
width: 100%;
height: 100%;
overflow: auto;
// background:#f7f7f2;
.salesContent{
.salesItem{
border-bottom: 1px #dcdcdc solid;
padding: 10px;
padding-left: 45px;
position: relative;
.icon_bolck{
border: 1px #dcdcdc solid;
width: 35px;
height: 35px;
position: absolute;
left: 3px;
top: 20px;
line-height: 30px;
text-align: center;
border-radius: 50%;
.iconfont{
color: #ff3500;
font-size: 26px;
position: relative;
top: 1px;
}
}
.line{
display: flex;
justify-content: space-between;
align-items: center;
font-size: 13px;
flex: 1;
.price{
font-size: 16px;
color: #ff3500;
font-weight: bold;
}
}
}
.salesItem:last-child{
border-bottom: none;
}
}
.add {
position: absolute;
.iconfont {
width: 55px;
height: 55px;
line-height: 55px;
border-radius: 50%;
position: fixed;
right: 10px;
font-size: 24px;
color: #fff;
background: #0767bf;
text-align: center;
bottom: 30px;
font-size: 28px;
// color: #ff5933;
font-weight: bold;
}
}
}
\ No newline at end of file
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { RecruitingComponent } from './recruiting.component';
describe('RecruitingComponent', () => {
let component: RecruitingComponent;
let fixture: ComponentFixture<RecruitingComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ RecruitingComponent ]
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(RecruitingComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});
import { Component, OnInit } from '@angular/core';
import { Router } from "@angular/router";
@Component({
selector: 'ydlife-recruiting',
templateUrl: './recruiting.component.html',
styleUrls: ['./recruiting.component.scss']
})
export class RecruitingComponent implements OnInit {
recruitingList: Array<any>;
constructor(private router: Router) { }
ngOnInit() {
this.recruitingList = [
{ id: 1, name: '月亮', mobileNo: '18100000000', sources: 'boss直聘', status: '有意向', date: '2020-01-12' },
{ id: 2, name: '太阳', mobileNo: '18100000001', sources: '拉钩网', status: '有意向', date: '2020-01-12' },
{ id: 3, name: '星星', mobileNo: '18100000002', sources: '拉钩网', status: '考虑加入', date: '2020-01-12' },
]
}
addMember() {
this.router.navigate(['/recruiting/0']);
}
}
.salesWrapper{
padding: 10px 5px;
background: #002495;
// background: #002495;
background: #0664a4;
height: 100%;
ul,ol{
list-style: none;
......
<div class="salesWrapper">
<div class="teamHeader">
<div class="teamInfo">
冠军战队
{{subordinateSystemName}}战队
</div>
<div class="totalSales">
<div>FYP:<span>20000</span></div>
<div>FYC:<span>24000</span></div>
<div>件数:<span>40</span></div>
<div><span>FYP:</span><span>{{statisticInfo?.fyp | number: "1.2-2"}}</span></div>
<div><span>FYC:</span><span>{{statisticInfo?.fyc | number: "1.2-2"}}</span></div>
<div><span>件数:</span><span>{{statisticInfo?.count | number: "1.2-2"}}</span></div>
</div>
</div>
<div class="rankInfoWrapper">
<div class="title">
<ul class="tab">
<li *ngFor="let item of performanceList" (click)="selectRang(item.type,lineType,rankType)"
[ngClass]="{selected:dateType==item.type}">
<li *ngFor="let item of performanceList" (click)="subordinateSystemMemberQuery(item.time, online)"
[ngClass]="{selected:time==item.time}">
{{item.name}}
</li>
</ul>
<ul class="tab">
<li *ngFor="let listItem of list" (click)="selectRang(dateType,listItem.type,rankType)"
<!-- <ul class="tab">
<li *ngFor="let listItem of list" (click)="subordinateSystemMemberQuery(time, listItem.type)"
[ngClass]="{selected:lineType==listItem.type}">
{{listItem.name}}
</li>
</ul>
<ul class="tab">
<li *ngFor="let searchListItem of searchList" (click)="selectRang(dateType,lineType,searchListItem.type)"
[ngClass]="{selected:rankType==searchListItem.type}">
{{searchListItem.name}}
</li>
</ul>
</ul> -->
</div>
<div class="rankContent">
<ul>
......
.salesWrapper{
padding: 10px 5px;
background: #f6f7f2;
height: 100%;
padding: 10px 10px 20px 10px;
// background: #f6f7f2;
// background: #0664a4;
background: -webkit-linear-gradient(to bottom right, #7cb8d4, #0664a4);
background: -o-linear-gradient(to bottom right, #7cb8d4, #0664a4);
background: -moz-linear-gradient(to bottom right, #7cb8d4, #0664a4);
background: -ms-linear-gradient(to bottom right, #7cb8d4, #0664a4);
background: linear-gradient(to bottom right, #7cb8d4, #0664a4);
min-height: 100%;
ul,ol{
list-style: none;
}
.teamHeader{
color: #ea2a37;
div{
height: 30px;
display: flex;
justify-content: space-around;
align-items: center;
text-shadow:#fff 1px 0 0,#fff 0 1px 0,#fff -1px 0 0,#fff 0 -1px 0;
-webkit-text-shadow:#fff 1px 0 0,#fff 0 1px 0,#fff -1px 0 0,#fff 0 -1px 0;
-moz-text-shadow:#fff 1px 0 0,#fff 0 1px 0,#fff -1px 0 0,#fff 0 -1px 0;
*filter: Glow(color=#fff, strength=1);
}
div.teamInfo{
font-size: 24px;
height: 45px;
line-height: 45px;
}
// text-shadow: 0px 2px 3px #080808;
font-weight: bold;
letter-spacing: 5px;
}
div.totalSales{
font-size: 18px;
font-size: 16px;
font-weight: bold;
}
}
.rankInfoWrapper{
overflow: auto;
.title{
width: 100%;
float: left;
margin-bottom: 10px;
padding: 10px 5%;
padding: 5px 5%;
ul.tab{
float: left;
width: 29%;
width: 50%;
margin-right: 1%;
li{
float: left;
......@@ -38,8 +55,8 @@
text-align: left;
height: 30px;
line-height: 30px;
margin-right: 10%;
// color: #fff;
margin-right: 12%;
color: #fff;
}
li.selected{
font-size: 18px;
......@@ -69,11 +86,12 @@
padding: 5px;
ul{
width: 100%;
height: 30px;
line-height: 30px;
li{
float: left;
width: 28%;
height: 34px;
line-height: 34px;
text-align: right;
margin-right: 1%;
position: relative;
......
import { Component, OnInit } from '@angular/core';
import { MyService } from '../my.service';
@Component({
selector: 'ydlife-team-rank',
templateUrl: './team-rank.component.html',
......@@ -9,12 +9,15 @@ export class TeamRankComponent implements OnInit {
performanceListShow: Array<any>;
performanceList: Array<any>;
list: Array<any>;
dateType: any;
time: any;
lineType: any;
constructor() {
allPerformanceInfo: any;
subordinateSystemName: string;
statisticInfo: any;
constructor(private myService: MyService) {
this.performanceList = [
{ type: 'month', name: '本月' },
{ type: 'year', name: '本年' }
{ time: '1', name: '本月' },
{ time: '2', name: '本年' }
]
this.list = [
{ type: 'online', name: '线上' },
......@@ -24,27 +27,30 @@ export class TeamRankComponent implements OnInit {
ngOnInit() {
this.performanceListShow = [];
this.selectRang('month', 'online')
this.subordinateSystemMemberQuery(1, 'online');
}
selectRang(dateType, lineType) {
this.dateType = dateType;
this.lineType = lineType;
if (lineType == 'online') {
if (dateType == 'year') {
this.performanceListShow = [];
}
if (dateType == 'month') {
this.performanceListShow = [
{ rank: 1, name: '蛋挞', fyp: 12000, fyc: 123333, count: 10 },
{ rank: 2, name: '甜筒', fyp: 1800, fyc: 123, count: 4 },
{ rank: 3, name: '圣代', fyp: 1600, fyc: 1233, count: 6 },
{ rank: 4, name: '油条', fyp: 120, fyc: 523, count: 2 },
{ rank: 5, name: '奥利奥', fyp: 120, fyc: 523, count: 2 }
];
}
//初始化查询本月+线上
subordinateSystemMemberQuery(time, online?: any) {
this.time = time;
this.lineType = online;
const practitionerId = JSON.parse(localStorage.getItem('lifeCustomerInfo'))['practitionerId'];
//如果是寿险不显示
if (online == 'underLine') {
this.allPerformanceInfo = null
} else {
this.performanceListShow = [];
this.myService.subordinateSystemMemberQuery({ practitionerId: practitionerId, time: time }).subscribe((res) => {
if (res['success']) {
console.log(res)
this.allPerformanceInfo = res['data'];
this.subordinateSystemName = res['data']['subordinateSystemName'];
this.statisticInfo = res['data']['statisticInfo'];
this.performanceListShow = res['data']['memberInfoList'];
}
})
}
}
}
<div class="wrapper">
<div #letter_src id="letter_src">
<div class="chinese">
亲爱的 <span style="font-weight: bold;">{{brokerInfo?.name}}</span><br />
我谨代表股东,管理团队和员工,欢迎您来到上海银盾保险经纪有限公司!
<br /><br />今天是非常特殊的一天,因为这是您来银盾的第一天,也是我们有幸获得了与您合作的第一天。我们将在共同信任的基础上,度过您在公司工作的岁月。这种理解和信任是愉快奋斗的主轴与纽带。
<br /><br />
我们公司相信并尊重个人的成长和力量,同时也非常注重团队合作精神。我们鼓励您尽快结识您的新同事,尤其是您团队中的同事。您的团队负责人是<span
style="font-weight: bold;">{{brokerInfo?.subordinateLeader}}</span>。如果您有对您的工作以及与之相关的任何困惑或困难,建议您第一时间咨询您的团队长。
<br /><br />上海银盾保险经纪有限公司是一个员工在帮助我们各行各业的客户中得到认可,尊重和快乐的地方,同时也为自己能成为社会建设中的重要支柱而感到自豪。
<br /><br />
每个人都需要有一个正确的方向,向着这个正确的方向努力一定会达成目标!我很高兴您选择加入银盾这个“大家庭”,因为我们拥有共同的目标和热忱帮助每个人和每个家庭规划圆满富足的人生!我们公司也将尽最大努力帮助您建立和实现您的目标和梦想。
<br /><br />我们公司的文化是“海纳百川,赢家后盾”;我们的团队文化是“精诚合作,荣辱与共”;我们的个人文化是“持续学习,与优秀为伍”!
<br /><br />希望您也能与我们一起学习和成长,共同带领公司迈向新高度。<br /><br />(签名)<img style="max-width: 45%;margin-left: 5%;"
src="assets/images/sign.png" alt=""><br />
<br />
<br />
</div>
<div class="english">
Dear <span style="font-weight: bold;">{{brokerInfo?.name}}</span>,<br /><br />
On behalf the shareholders, the management team and staff, I would like to personally
welcome you on board with Yin Dun Insurance Brokers Co Ltd!<br /><br />
Today is a very special day as it is your first day of work with us and we are honoured that you have entrusted us
with this co-operation opportunity. We are very much looking forward to the coming days and years that we will be
working together based on mutual understandings and trust, which will form the bridge and connections to our
future
happy endeavours!
<br />
<br />
Our company believes in nurturing of individual growth and strength with a great focus also on team spirit. We
would
encourage you to get to know your colleagues especially those in your team. The Head of your team is
<span style="font-weight: bold;">{{brokerInfo?.subordinateLeader}}</span> . You are advised to consult your
team leader in the first instance in matters of
any confusion or difficulty with your work and anything associated with it.
<br /><br />
Yin Dun Insurance Brokers Co Ltd is a place where employees find their passion
for helping our clients from various walks of life and find cherishing moments in being constructive pillars of
society.
<br /><br />
One always needs a right life direction and once chosen, perseverance will take you to your goals with hardworking
and diligence! I am very pleased that you have chosen to join the Yin Dun “big family” for our shared goals and
great love of helping individuals of society be happy and complete! We at Yin Dun Insurance Brokers Co Ltd shall
try
our best to help you realize and establish your goals and dreams to the fullest.
<br /><br />
Our company culture is “海纳百川,赢家后盾”;our team culture is“精诚合作,荣辱与共”;and our culture for each individual is
“持续学习,与优秀为伍”!<br /><br />
We hope you have a great learning and growth experience with us, and collectively lead the
company to greater heights.<br /><br />
With Regards<br /><br />
(Signature)<img style="max-width: 45%;margin-left: 5%;" src="assets/images/sign.png" alt=""><br /><br />
</div>
<p class="closeBtn" (click)="close()">&times;</p>
</div>
<!-- <div id="letter"></div>
<img #inkwell1 id="inkwell1" src="inkwell1.gif" alt="inkwell1" />
<img id="inkwell2" src="inkwell2.gif" alt="inkwell2" /> -->
</div>
\ No newline at end of file
#inkwell1 {
bottom: 100px;
left: 140px;
position: fixed;
}
#inkwell2 {
bottom: 100px;
left: 140px;
position: fixed;
visibility: hidden;
}
#letter {
font-family: Comic Sans MS;
font-size: 18px;
font-weight: bold;
margin: 50px auto;
position: relative;
width: 75%;
}
#letter_src{
font-size: 16px;
margin: 0 auto;
position: relative;
width: 100%;
word-break:break-all;
background-color: #efefef;
background-image: linear-gradient(#e7e6e6 1px, transparent 0),
linear-gradient(90deg, #e7e6e6 1px, transparent 0);
background-size: 21px 21px, 21px 21px;
background-position: center;
padding: 15px 10px;
// padding-top: 60px;
letter-spacing: 2px;
}
// #letter_src div.chinese{
// font-family: 'kaiti';
// }
// #letter_src div.english{
// font-family: Comic Sans MS;
// }
// #letter_src:before,
// #letter_src:after{
// content: '';
// position: absolute;
// z-index: 0;
// left: 50%;
// transform: translateX(-50%);
// display: inline-block;
// background-color: #fff;
// height: 28px;
// box-shadow: 68px 0 0 0 #fff,
// calc(68px * 2) 0 0 0 #fff,
// calc(68px * 3) 0 0 0 #fff,
// calc(68px * 4) 0 0 0 #fff,
// calc(68px * 5) 0 0 0 #fff,
// -68px 0 0 0 #fff,
// calc(68px * -2) 0 0 0 #fff,
// calc(68px * -3) 0 0 0 #fff,
// calc(68px * -4) 0 0 0 #fff,
// calc(68px * -5) 0 0 0 #fff;
// }
// #letter_src:before {
// top: 0;
// width: 10px;
// }
// #letter_src:after {
// top: 26px;
// width: 28px;
// border-radius: 50%;
// }
.closeBtn{
font-size: 30px;
text-align: center;
width: 45px;
height: 45px;
line-height: 42px;
margin: 10px auto;
border-radius: 50%;
background: #0767bf;
color: #fff;
}
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { ThanksComponent } from './thanks.component';
describe('ThanksComponent', () => {
let component: ThanksComponent;
let fixture: ComponentFixture<ThanksComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ ThanksComponent ]
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(ThanksComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});
import { Component, OnInit, ViewChild, AfterViewInit, ElementRef } from '@angular/core';
import { Router } from "@angular/router";
@Component({
selector: 'ydlife-thanks',
templateUrl: './thanks.component.html',
styleUrls: ['./thanks.component.scss']
})
export class ThanksComponent implements OnInit, AfterViewInit {
@ViewChild('inkwell1') inkwell1: ElementRef
@ViewChild('letter_src') letter_src: ElementRef
vLetter: any;
iSpeedInk: any;
sText: any;
iCurChar: any;
sChars: any;
iCurInk: any;
sCurCaret: any;
sCaret: any;
brokerInfo: any;
constructor(private router: Router) { }
ngOnInit() {
this.brokerInfo = JSON.parse(localStorage.getItem('lifeCustomerInfo'))['practitionerBasicInfo']
}
ngAfterViewInit() {
// this.vLetter = document.getElementById('letter');
// this.iSpeedInk = 5;
// this.sText = this.letter_src.nativeElement.innerHTML;
// this.iCurChar = 0;
// this.sChars = '<span>';
// this.iCurInk = 0;
// this.sCurCaret = '';
// this.sCaret = "&nbsp;<img src='pen.gif' style='position:absolute' />";
// this.doStep();
}
close() {
this.router.navigate(['/my']);
}
doStep() {
// current char
var sChar = this.sText.charAt(this.iCurChar);
// default char delay
var iDelay = 32;
if (sChar == '') {
this.sCurCaret = '';
} else if (sChar == '|') { // we use | symbol to emulate 'error' symbol
sChar = '';
this.sChars = this.sChars.substring(0, this.sChars.length - 1);
iDelay = 64;
} else if (sChar == '<') { // pass tags
var iPos = this.sText.indexOf('>', this.iCurChar);
sChar = this.sText.substring(this.iCurChar, iPos + 1);
this.iCurChar = iPos;
} else if (sChar == '&') { // pass html entities
var iPos = this.sText.indexOf(';', this.iCurChar);
sChar = this.sText.substring(this.iCurChar, iPos + 1);
this.iCurChar = iPos;
} else if (sChar == '.') { // custom delay in case of . symbol
iDelay = 300;
} else if (sChar == ',') { // custom delay in case of , symbol
iDelay = 100;
} else if (sChar == ' ') { // custom delay in case of space symbol
iDelay = 32;
} else if (this.iCurChar > 5) {
this.sCurCaret = this.sCaret;
}
// expenditure of ink
if (sChar == ' ') {
this.iCurInk += this.iSpeedInk;
sChar = '</span><span style="color:RGB(' + (this.iCurInk) + ',' + (this.iCurInk) + ',' + (this.iCurInk) + ')">' + sChar;
}
if (document.getElementById('inkwell2').style.visibility == 'visible') {
this.sCurCaret = this.sCaret;
document.getElementById('inkwell2').style.visibility = 'hidden';
sChar = '</span><span style="color:RGB(0,0,0)">' + sChar;
}
// refresh Ink
if (this.iCurInk > 160) {
this.iCurInk = 0;
document.getElementById('inkwell2').style.visibility = 'visible';
iDelay = 1000;
this.sCurCaret = '';
}
// add current char to chars
this.sChars += sChar;
// hide the caret at the end of the letter
if (this.iCurChar == this.sText.length - 1)
this.sCurCaret = '';
// update letter with new chars
this.vLetter.innerHTML = this.sChars + this.sCurCaret;
// goto next char
this.iCurChar++;
// next step
if (this.iCurChar < this.sText.length) {
setTimeout(this.doStep, 20 + iDelay);
}
this.doStep();
}
}
......@@ -31,6 +31,36 @@
<ul class="icon_lists dib-box">
<li class="dib">
<span class="icon iconfont">&#xe671;</span>
<div class="name">精选产品库</div>
<div class="code-name">&amp;#xe671;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe672;</span>
<div class="name">团队</div>
<div class="code-name">&amp;#xe672;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe673;</span>
<div class="name">团队管理</div>
<div class="code-name">&amp;#xe673;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe66f;</span>
<div class="name">显示</div>
<div class="code-name">&amp;#xe66f;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe66e;</span>
<div class="name">隐藏</div>
<div class="code-name">&amp;#xe66e;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe6bf;</span>
<div class="name">奖牌</div>
<div class="code-name">&amp;#xe6bf;</div>
......@@ -1005,6 +1035,51 @@
<ul class="icon_lists dib-box">
<li class="dib">
<span class="icon iconfont icon-jingxuanchanpinku"></span>
<div class="name">
精选产品库
</div>
<div class="code-name">.icon-jingxuanchanpinku
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-tuandui"></span>
<div class="name">
团队
</div>
<div class="code-name">.icon-tuandui
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-tuanduiguanlisvg"></span>
<div class="name">
团队管理
</div>
<div class="code-name">.icon-tuanduiguanlisvg
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-xianshi"></span>
<div class="name">
显示
</div>
<div class="code-name">.icon-xianshi
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-yincang"></span>
<div class="name">
隐藏
</div>
<div class="code-name">.icon-yincang
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-medal"></span>
<div class="name">
奖牌
......@@ -2421,6 +2496,46 @@
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-jingxuanchanpinku"></use>
</svg>
<div class="name">精选产品库</div>
<div class="code-name">#icon-jingxuanchanpinku</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-tuandui"></use>
</svg>
<div class="name">团队</div>
<div class="code-name">#icon-tuandui</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-tuanduiguanlisvg"></use>
</svg>
<div class="name">团队管理</div>
<div class="code-name">#icon-tuanduiguanlisvg</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-xianshi"></use>
</svg>
<div class="name">显示</div>
<div class="code-name">#icon-xianshi</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-yincang"></use>
</svg>
<div class="name">隐藏</div>
<div class="code-name">#icon-yincang</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-medal"></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,41 @@
"description": "",
"glyphs": [
{
"icon_id": "4989831",
"name": "精选产品库",
"font_class": "jingxuanchanpinku",
"unicode": "e671",
"unicode_decimal": 58993
},
{
"icon_id": "8533810",
"name": "团队",
"font_class": "tuandui",
"unicode": "e672",
"unicode_decimal": 58994
},
{
"icon_id": "13513743",
"name": "团队管理",
"font_class": "tuanduiguanlisvg",
"unicode": "e673",
"unicode_decimal": 58995
},
{
"icon_id": "5485672",
"name": "显示",
"font_class": "xianshi",
"unicode": "e66f",
"unicode_decimal": 58991
},
{
"icon_id": "1112302",
"name": "隐藏",
"font_class": "yincang",
"unicode": "e66e",
"unicode_decimal": 58990
},
{
"icon_id": "5801171",
"name": "奖牌",
"font_class": "medal",
......
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