Commit 60d58a2e by sunchao

合并代码

parents d7542ce1 09355e9a
......@@ -613,6 +613,24 @@
"integrity": "sha1-x/9jA99xCA7HpPW4wAPFjxz1EDc=",
"dev": true
},
"@babel/runtime-corejs3": {
"version": "7.13.3",
"resolved": "https://registry.npm.taobao.org/@babel/runtime-corejs3/download/@babel/runtime-corejs3-7.13.3.tgz?cache=0&sync_timestamp=1614047252854&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fruntime-corejs3%2Fdownload%2F%40babel%2Fruntime-corejs3-7.13.3.tgz",
"integrity": "sha1-afo+hgum9k7Og9UvmIthW8noXnU=",
"optional": true,
"requires": {
"core-js-pure": "^3.0.0",
"regenerator-runtime": "^0.13.4"
},
"dependencies": {
"regenerator-runtime": {
"version": "0.13.7",
"resolved": "https://registry.npm.taobao.org/regenerator-runtime/download/regenerator-runtime-0.13.7.tgz?cache=0&sync_timestamp=1595456105304&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fregenerator-runtime%2Fdownload%2Fregenerator-runtime-0.13.7.tgz",
"integrity": "sha1-ysLazIoepnX+qrrriugziYrkb1U=",
"optional": true
}
}
},
"@babel/template": {
"version": "7.10.4",
"resolved": "https://registry.npm.taobao.org/@babel/template/download/@babel/template-7.10.4.tgz?cache=0&sync_timestamp=1593522831608&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Ftemplate%2Fdownload%2F%40babel%2Ftemplate-7.10.4.tgz",
......@@ -780,6 +798,12 @@
"integrity": "sha1-vShOV8hPEyXacCur/IKlMoGQwMU=",
"dev": true
},
"@types/raf": {
"version": "3.4.0",
"resolved": "https://registry.npm.taobao.org/@types/raf/download/@types/raf-3.4.0.tgz?cache=0&sync_timestamp=1613379696113&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fraf%2Fdownload%2F%40types%2Fraf-3.4.0.tgz",
"integrity": "sha1-K3LL1VQF4HHxxNKZkmOOAisgrMI=",
"optional": true
},
"@types/selenium-webdriver": {
"version": "3.0.17",
"resolved": "https://registry.npm.taobao.org/@types/selenium-webdriver/download/@types/selenium-webdriver-3.0.17.tgz",
......@@ -1388,8 +1412,7 @@
"atob": {
"version": "2.1.2",
"resolved": "https://registry.npm.taobao.org/atob/download/atob-2.1.2.tgz",
"integrity": "sha1-bZUX654DDSQ2ZmZR6GvZ9vE1M8k=",
"dev": true
"integrity": "sha1-bZUX654DDSQ2ZmZR6GvZ9vE1M8k="
},
"autoprefixer": {
"version": "9.4.6",
......@@ -1924,6 +1947,11 @@
"https-proxy-agent": "^2.2.1"
}
},
"btoa": {
"version": "1.2.1",
"resolved": "https://registry.npm.taobao.org/btoa/download/btoa-1.2.1.tgz",
"integrity": "sha1-AamQn4ssk/a/aAuiYTHrMPf6PXM="
},
"buffer": {
"version": "5.6.0",
"resolved": "https://registry.npm.taobao.org/buffer/download/buffer-5.6.0.tgz",
......@@ -2113,6 +2141,20 @@
"integrity": "sha1-/LRwwjlY3vhQgYVr56hukE8YDR0=",
"dev": true
},
"canvg": {
"version": "3.0.7",
"resolved": "https://registry.npm.taobao.org/canvg/download/canvg-3.0.7.tgz?cache=0&sync_timestamp=1602916894464&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcanvg%2Fdownload%2Fcanvg-3.0.7.tgz",
"integrity": "sha1-5FuHpkEWr5BpF/fK1X03DqNy1oI=",
"optional": true,
"requires": {
"@babel/runtime-corejs3": "^7.9.6",
"@types/raf": "^3.4.0",
"raf": "^3.4.1",
"rgbcolor": "^1.0.1",
"stackblur-canvas": "^2.0.0",
"svg-pathdata": "^5.0.5"
}
},
"caseless": {
"version": "0.12.0",
"resolved": "https://registry.npm.taobao.org/caseless/download/caseless-0.12.0.tgz",
......@@ -2568,6 +2610,12 @@
"resolved": "https://registry.npm.taobao.org/core-js/download/core-js-2.6.11.tgz",
"integrity": "sha1-OIMUafmSK97Y7iHJ3EaYXgOZMIw="
},
"core-js-pure": {
"version": "3.9.0",
"resolved": "https://registry.npm.taobao.org/core-js-pure/download/core-js-pure-3.9.0.tgz?cache=0&sync_timestamp=1613669337476&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcore-js-pure%2Fdownload%2Fcore-js-pure-3.9.0.tgz",
"integrity": "sha1-MmzHTh/vi3RDpqeT3bCt/Ngfnvs=",
"optional": true
},
"core-util-is": {
"version": "1.0.2",
"resolved": "https://registry.npm.taobao.org/core-util-is/download/core-util-is-1.0.2.tgz",
......@@ -3068,6 +3116,12 @@
"integrity": "sha1-PTH1AZGmdJ3RN1p/Ui6CPULlTto=",
"dev": true
},
"dompurify": {
"version": "2.2.6",
"resolved": "https://registry.npm.taobao.org/dompurify/download/dompurify-2.2.6.tgz",
"integrity": "sha1-VJRdxcC0XOWuIocFd36OWdey7cQ=",
"optional": true
},
"duplexer": {
"version": "0.1.2",
"resolved": "https://registry.npm.taobao.org/duplexer/download/duplexer-0.1.2.tgz",
......@@ -3738,6 +3792,11 @@
"websocket-driver": ">=0.5.1"
}
},
"fflate": {
"version": "0.4.8",
"resolved": "https://registry.npm.taobao.org/fflate/download/fflate-0.4.8.tgz",
"integrity": "sha1-+QuCrvvYrBdCE6uzOL1++Ejw9a4="
},
"figgy-pudding": {
"version": "3.5.2",
"resolved": "https://registry.npm.taobao.org/figgy-pudding/download/figgy-pudding-3.5.2.tgz",
......@@ -5384,6 +5443,28 @@
"integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=",
"dev": true
},
"jspdf": {
"version": "2.3.0",
"resolved": "https://registry.npm.taobao.org/jspdf/download/jspdf-2.3.0.tgz",
"integrity": "sha1-ltX157EEtNVC4gOmgpm0DMiENP8=",
"requires": {
"atob": "^2.1.2",
"btoa": "^1.2.1",
"canvg": "^3.0.6",
"core-js": "^3.6.0",
"dompurify": "^2.2.0",
"fflate": "^0.4.8",
"html2canvas": "^1.0.0-rc.5"
},
"dependencies": {
"core-js": {
"version": "3.9.0",
"resolved": "https://registry.npm.taobao.org/core-js/download/core-js-3.9.0.tgz?cache=0&sync_timestamp=1613668840564&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcore-js%2Fdownload%2Fcore-js-3.9.0.tgz",
"integrity": "sha1-eQsbsRVToicrNuJiXHF52zRUkvg=",
"optional": true
}
}
},
"jsprim": {
"version": "1.4.1",
"resolved": "https://registry.npm.taobao.org/jsprim/download/jsprim-1.4.1.tgz",
......@@ -7058,8 +7139,7 @@
"performance-now": {
"version": "2.1.0",
"resolved": "https://registry.npm.taobao.org/performance-now/download/performance-now-2.1.0.tgz",
"integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=",
"dev": true
"integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns="
},
"picomatch": {
"version": "2.2.2",
......@@ -7642,6 +7722,15 @@
"integrity": "sha1-M0WUG0FTy50ILY7uTNogFqmu9/Y=",
"dev": true
},
"raf": {
"version": "3.4.1",
"resolved": "https://registry.npm.taobao.org/raf/download/raf-3.4.1.tgz",
"integrity": "sha1-B0LpmkplUvRF1z4+4DKK8P8e3jk=",
"optional": true,
"requires": {
"performance-now": "^2.1.0"
}
},
"randombytes": {
"version": "2.1.0",
"resolved": "https://registry.npm.taobao.org/randombytes/download/randombytes-2.1.0.tgz",
......@@ -7990,6 +8079,12 @@
"integrity": "sha1-unLME2egzNnPgahws7WL060H+MI=",
"dev": true
},
"rgbcolor": {
"version": "1.0.1",
"resolved": "https://registry.npm.taobao.org/rgbcolor/download/rgbcolor-1.0.1.tgz",
"integrity": "sha1-1lBezbMEplldom+ktDMHMGd1lF0=",
"optional": true
},
"rimraf": {
"version": "2.7.1",
"resolved": "https://registry.npm.taobao.org/rimraf/download/rimraf-2.7.1.tgz",
......@@ -8954,6 +9049,12 @@
"figgy-pudding": "^3.5.1"
}
},
"stackblur-canvas": {
"version": "2.5.0",
"resolved": "https://registry.npm.taobao.org/stackblur-canvas/download/stackblur-canvas-2.5.0.tgz?cache=0&sync_timestamp=1613482743762&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstackblur-canvas%2Fdownload%2Fstackblur-canvas-2.5.0.tgz",
"integrity": "sha1-qoe77RVg/c0xOP/zRPxqHEE+usQ=",
"optional": true
},
"static-extend": {
"version": "0.1.2",
"resolved": "https://registry.npm.taobao.org/static-extend/download/static-extend-0.1.2.tgz",
......@@ -9222,6 +9323,12 @@
"has-flag": "^3.0.0"
}
},
"svg-pathdata": {
"version": "5.0.5",
"resolved": "https://registry.npm.taobao.org/svg-pathdata/download/svg-pathdata-5.0.5.tgz",
"integrity": "sha1-ZejXZWQroV/hVDREQIfQgrxSayk=",
"optional": true
},
"symbol-observable": {
"version": "1.2.0",
"resolved": "https://registry.npm.taobao.org/symbol-observable/download/symbol-observable-1.2.0.tgz?cache=0&sync_timestamp=1599184821652&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsymbol-observable%2Fdownload%2Fsymbol-observable-1.2.0.tgz",
......
......@@ -26,8 +26,9 @@
"core-js": "^2.5.4",
"dayjs": "^1.8.35",
"echarts": "^4.9.0",
"html2canvas": "^1.0.0-rc.5",
"html2canvas": "^1.0.0-rc.7",
"jquery": "^3.5.1",
"jspdf": "^2.3.0",
"ng-zorro-antd-mobile": "^0.12.5",
"ngx-echarts": "^3.2.0",
"rxjs": "~6.3.3",
......
......@@ -30,6 +30,14 @@ export class BankCardComponent implements OnInit {
}
next(){
if(!this.bankAccountOpening){
this.openPopInfo('开户行不能为空!');
return;
}
if(!this.bankAccountId){
this.openPopInfo('银行卡号不能为空!');
return;
}
if(this.bankAccountId != this.sureBankAccountId){
this.openPopInfo('两次银行卡号不一致!');
return;
......@@ -40,6 +48,7 @@ export class BankCardComponent implements OnInit {
return;
}
const param = {
hiringBasicInfoId:this.hiringBasicInfoId,
bankAccountOpening:this.bankAccountOpening,
bankAccountId:this.bankAccountId
......@@ -48,7 +57,6 @@ export class BankCardComponent implements OnInit {
if(res['success']){
// this.router.navigate(['/personal_statement'],{ queryParams: { hiringBasicInfoId:this.hiringBasicInfoId} });
this.router.navigate(['/employee_salary'],{ queryParams: { hiringBasicInfoId:this.hiringBasicInfoId} });
}else{
this.toastDialog = true;
this.toastInfo = {
......
......@@ -50,6 +50,8 @@
display: flex;
flex-wrap: wrap;
font-size: 18px;
}
select.form-control {
direction: rtl;
}
......
......@@ -26,12 +26,12 @@
<div class="photo" *ngIf="!backVxUrl" (click)="selectPic('back')">
<img src="assets/images/back.png" alt="身份证反面面">
<img class="camera" src="assets/images/camera.png" alt="身份证" />
<div class="choseBtn" >点击添加身份证</div>
<div class="choseBtn" >点击添加身份证</div>
</div>
<img class="showImg" src="{{backVxUrl}}" alt="身份证反面" *ngIf="backVxUrl"
(click)="selectPic('back')">
<div class="tips">
<p>(正确示例:身份证面,字体清晰)</p>
<p>(正确示例:身份证面,字体清晰)</p>
<p>(jpg,png 文件大小不大于1mb)</p>
</div>
......
<div class="wrapper">
<div class="title">
<div><span class="line"></span>个人照片资料</div>
<div><span class="line"></span>个人证件照片资料</div>
<span class="page_mark"> 3/8</span>
</div>
<div class="content">
......
......@@ -25,7 +25,7 @@
}
}
.content{
padding: 10px 5px;
padding: 15px 0 65px 0;
position: relative;
.photo_wrapper{
width: 189px;
......
......@@ -141,7 +141,7 @@ export class SignatureComponent implements OnInit {
}
goBack(){
history.go(-1)
history.go(-1);
}
returnResult(){
......
......@@ -9,7 +9,7 @@
</ul>
<div class="salesContent">
<div style="text-align: center;margin: 20px auto;font-size: 20px;" *ngIf="approvarList?.length==0">暂无数据</div>
<div class="salesItem" *ngFor="let approvarItem of approvarList" >
<div class="salesItem" *ngFor="let approvarItem of approvarList" (click)="jumpToDetail(approvarItem)">
<div class="line name">
<div>
<i style="background:#1c5483;" *ngIf="selectedId==0"></i>
......@@ -18,7 +18,7 @@
<span>{{approvarItem.name}}提交的报聘</span>
</div>
<span class="iconfont icon-ar-r" style="font-size: 10px;position: relative; right: -2px;"
(click)="jumpToDetail(approvarItem)"></span>
></span>
</div>
<!-- <div class="line" *ngIf="selectedId==1 || selectedId==2" (click)="jumpToDetail(approvarItem,'view')">
查看详情
......
<div class="businessCardContainer">
<div class="brokerCardPositive">
<div class="brokerCardPositive" id="brokerCardPositive" *ngIf="showFlag==false">
<div class="qrcodeBox">
<div>
<div style="margin-bottom: 20%;"><img src="assets/images/ydShield.png" alt="银盾保险经纪" class="img-responsive">
......@@ -40,7 +40,10 @@
</div>
</div>
</div>
<img src="{{canvasImg}}" *ngIf="showFlag==true">
<div class="brokerCardOpposite">
<img src="assets/images/card_opposite.jpg" alt="" class="img-responsive">
</div>
</div>
<!--
<div (click) = "downLoadJspdfs()">导出pdf</div> -->
......@@ -5,7 +5,7 @@
display: flex;
padding-top: 7%;
padding-left: 5%;
margin-bottom: 10%;
padding-bottom: 10%;
.qrcodeBox {
width: 15%;
display: flex;
......
import {Component, OnInit} from '@angular/core';
import {Component, ElementRef, OnInit, ViewChild} from '@angular/core';
import jspdf from 'jspdf';
import html2canvas from 'html2canvas';
@Component({
selector: 'ydlife-business-card',
......@@ -6,13 +8,67 @@ import {Component, OnInit} from '@angular/core';
styleUrls: ['./business-card.component.scss']
})
export class BusinessCardComponent implements OnInit {
element:any;
lifeCustomerInfo: any;
canvasImg:any;
showFlag:boolean = false;
constructor() {
}
ngOnInit() {
this.lifeCustomerInfo = JSON.parse(localStorage.getItem('lifeCustomerInfo'));
setTimeout(()=>{
this.getImg();
},500)
}
getImg(){
this.element = document.getElementById("brokerCardPositive");
html2canvas(this.element).then(canvas => {
// 修改生成的宽度
canvas.style.width = "1000px";
console.log(canvas, "生成的画布文件");
this.canvasImg = canvas.toDataURL("image/png");
if(canvas){
this.showFlag = true;
}
})
}
// downLoadJspdfs(){
// this.element = document.getElementById("brokerCardPositive");
// html2canvas(this.element,{
// logging:false //一开始canvas设置不渲染页面
// }).then((canvas)=>{
// let pdf:any = new jspdf('p','mm','a4') //纵向,单位mm,A4纸张大小
// let ctx:any = canvas.getContext('2d'); //预设2维画布
// let a4w:number = 190; //设置显示内容的大小,A4大小:210*297;最后显示在A4内部区域大小为:190*360
// let a4h:number = 200;
// let imgHeight:number = Math.floor(a4h*canvas.width/a4w); //按A4显示比例换算一页图像的像素高度
// let renderedHeight:number = 0;
// while(renderedHeight<canvas.height){//判断页面有内容时
// let page:any = document.createElement('canvas'); //创建画布
// page.width = canvas.width; //设置画布宽高等于内容宽高
// page.height = Math.min(imgHeight,canvas.height-renderedHeight); //画布的高等于内容的最小的高度(不足一页)
// //用getImageData裁剪指定区域,并绘制到前面创建的canvas对象中
// let a:any = page.getContext('2d');
// a.putImageData(ctx.getImageData(0,renderedHeight,canvas.width,Math.min(imgHeight,canvas.height-renderedHeight)),0,0);
// pdf.addImage(page.toDataURL('image/jpeg',1.0),'JPEG',10,10,a4w,Math.min(a4h,a4w*page.height/page.width)); //添加图片到页面,保留10mm边距
// renderedHeight += imgHeight;
// if(renderedHeight < canvas.height){
// pdf.addPage();
// }
// }
// pdf.save('content.pdf')
// });
// }
}
......@@ -5,4 +5,82 @@
<div style="letter-spacing: 5px;margin-left: 5%;margin-top: 2%;">往期历史</div>
</div>
</div>
<div class="history_wrapper">
<div class="history_item">
<div class="date">2020年12月</div>
<div class="history_content">
<ul class="performance_list title">
<li></li>
<li>首年保费</li>
<li>首年佣金</li>
<li>件数</li>
<li>完成率</li>
</ul>
<ul class="performance_list">
<li>线上</li>
<li class="markPrice" style="margin:0 7px;">
¥0
</li>
<li class="markPrice">
¥0
</li>
<li class="markPrice"></li>
<li class="markPrice" style="position: relative;top: 12px;">
</li>
</ul>
<ul class="performance_list">
<li>线下</li>
<li class="markPrice" style="margin:0 7px;">
</li>
<li class="markPrice">
</li>
<li class="markPrice"></li>
<li class="markPrice">
&nbsp;
</li>
</ul>
</div>
</div>
<div class="history_item">
<div class="date">2020年11月</div>
<div class="history_content">
<ul class="performance_list title">
<li></li>
<li>首年保费</li>
<li>首年佣金</li>
<li>件数</li>
<li>完成率</li>
</ul>
<ul class="performance_list">
<li>线上</li>
<li class="markPrice" style="margin:0 7px;">
¥10
</li>
<li class="markPrice">
¥10
</li>
<li class="markPrice"></li>
<li class="markPrice" style="position: relative;top: 12px;">
</li>
</ul>
<ul class="performance_list">
<li>线下</li>
<li class="markPrice" style="margin:0 7px;">
</li>
<li class="markPrice">
</li>
<li class="markPrice"></li>
<li class="markPrice">
&nbsp;
</li>
</ul>
</div>
</div>
</div>
</div>
\ No newline at end of file
......@@ -25,4 +25,45 @@
}
}
}
.history_wrapper{
padding: 10px;
.date{
height: 30px;
line-height: 30px;
}
.history_content{
background: #edf7ff;
border-radius: 8px;
padding: 0 5px;
.performance_list{
display: flex;
font-size: 14px;
li{
width: 15%;
text-align: center;
line-height: 35px;
font-size: 12px;
margin: 0 5px;
overflow: hidden;
}
li.markPrice{
font-weight: bold;
font-size: 15px;
}
li:nth-child(1){
width: 8%;
text-align: left;
margin: 0;
}
li:nth-child(2),li:nth-child(3){
width: 26%;
text-align: right;
}
li:last-child{
width: 18%;
}
}
}
}
}
\ No newline at end of file
......@@ -116,13 +116,17 @@
<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:;"
<ng-container *ngFor="let menuItemContent of menuItem['content']" >
<div class="content_item" *ngIf="menuItemContent.showSubMenu" href="javascript:;"
(click)="menuNavigation(menuItemContent)">
<!-- <span class="iconfont" [ngClass]="menuItemContent.icon"></span> -->
<span *ngIf="menuItemContent.dot"></span>
<img [src]="getImgUrl(menuItemContent.icon)" alt="">
<div style="font-size: 13px;">{{menuItemContent.subtitle}}</div>
</div>
</ng-container>
</div>
</div>
</div>
......
......@@ -39,6 +39,7 @@ export class MyCenterHomeComponent implements OnInit, AfterViewInit {
showFlag:boolean = false;
approvarList:Array<any>;
dotFlag:boolean = false;
isShowSalay:boolean;
constructor(
private router: Router,
public lifeCommonService: LifeCommonService,
......@@ -53,6 +54,7 @@ export class MyCenterHomeComponent implements OnInit, AfterViewInit {
this.lifeCommonService.setTitle(title);
this.deviceType = this.lifeCommonService.checkDeviceType();
this.lifeCustomerInfo = JSON.parse(localStorage.getItem('lifeCustomerInfo')) ? JSON.parse(localStorage.getItem('lifeCustomerInfo')) : null;
this.isShowSalay = this.lifeCustomerInfo.canSeeSalaryList==1?true:false;
this.announcementQuery();
this.performanceList = [
{ name: `${this.lifeCommonService.dateFormat(new Date, ('M'))}月`, time: 1 },
......@@ -71,6 +73,7 @@ export class MyCenterHomeComponent implements OnInit, AfterViewInit {
//活动量得分查询
this.queryPEPScore();
this.listQuery();
this.canSeeSalaryList();
}
ngAfterViewInit() {
......@@ -84,25 +87,25 @@ export class MyCenterHomeComponent implements OnInit, AfterViewInit {
{
title: '营销工具',
content: [
{ no: 2, subtitle: 'AI保险医生', icon: 'ai', path: `https://${window.location.host}/questionnaire/#/index?campaign=AIRobot&task=AItask1&customerId=${this.lifeCustomerInfo.customerId}`, routerLink: '' },
{ no: 1, subtitle: '獴哥保险诊所', icon: 'clinic', path: `https://${window.location.host}/consulting`, routerLink: '' },
{ no: 4, subtitle: '线上投保', icon: 'online', path: `https://${window.location.host}/index?source=dyd`, routerLink: '' },
{ no: 13, subtitle: '我的商机', icon: 'line', path: '', routerLink: 'business' },
{ no: 9, subtitle: '执业证书', icon: 'card', path: `https://${window.location.host}/brokerQry/#/brokerDetail/${this.lifeCustomerInfo.practitionerId}?source=0`, routerLink: '' },
{ no: 10, subtitle: '职业类别', icon: 'job', path: 'https://www.ydinsurance.cn/occupationQry/', routerLink: '' },
{ no: 7, subtitle: '文章分享', icon: 'article', path: `https://${window.location.host}/discovery`, routerLink: '' },
{ no: 3, subtitle: '产品海报', icon: 'poster_p', path: '/salesDetail', routerLink: 'material' },
{ no: 2, subtitle: 'AI保险医生', icon: 'ai', path: `https://${window.location.host}/questionnaire/#/index?campaign=AIRobot&task=AItask1&customerId=${this.lifeCustomerInfo.customerId}`, routerLink: '',showSubMenu:true },
{ no: 1, subtitle: '獴哥保险诊所', icon: 'clinic', path: `https://${window.location.host}/consulting`, routerLink: '' ,showSubMenu:true},
{ no: 4, subtitle: '线上投保', icon: 'online', path: `https://${window.location.host}/index?source=dyd`, routerLink: '' ,showSubMenu:true},
{ no: 13, subtitle: '我的商机', icon: 'line', path: '', routerLink: 'business',showSubMenu:true },
{ no: 9, subtitle: '执业证书', icon: 'card', path: `https://${window.location.host}/brokerQry/#/brokerDetail/${this.lifeCustomerInfo.practitionerId}?source=0`, routerLink: '',showSubMenu:true },
{ no: 10, subtitle: '职业类别', icon: 'job', path: 'https://www.ydinsurance.cn/occupationQry/', routerLink: '',showSubMenu:true },
{ no: 7, subtitle: '文章分享', icon: 'article', path: `https://${window.location.host}/discovery`, routerLink: '' ,showSubMenu:true},
{ no: 3, subtitle: '产品海报', icon: 'poster_p', path: '/salesDetail', routerLink: 'material',showSubMenu:true },
],
isShow: true
},
{
title: '我的团队',
content: [
{ no: 15, subtitle: '我的团队', icon: 'team', path: '', routerLink: '' },
// { no: 16, subtitle: '团队增员', icon: 'recruiting', path: '', routerLink: '' },
{ no: 16, subtitle: '团队增员', icon: 'recruiting', path: '', routerLink: 'recruiting' },
{ no: 18, subtitle: '招募海报', icon: 'poster_r', path: '', routerLink: '' },
{ no: 22, subtitle: '报聘审批', icon: 'approval', path: '', routerLink: 'approval_list',dot: this.dotFlag}
{ no: 15, subtitle: '我的团队', icon: 'team', path: '', routerLink: '',showSubMenu:true },
// { no: 16, subtitle: '团队增员', icon: 'recruiting', path: '', routerLink: '',showSubMenu:true },
{ no: 16, subtitle: '团队增员', icon: 'recruiting', path: '', routerLink: 'recruiting' ,showSubMenu:true},
{ no: 18, subtitle: '招募海报', icon: 'poster_r', path: '', routerLink: '',showSubMenu:true },
{ no: 22, subtitle: '报聘审批', icon: 'approval', path: '', routerLink: 'approval_list',dot: this.dotFlag,showSubMenu:true}
],
// isShow: this.isShow
isShow: true
......@@ -110,6 +113,7 @@ export class MyCenterHomeComponent implements OnInit, AfterViewInit {
{
title: '我的展业',
content: [
<<<<<<< HEAD
{ no: 12, subtitle: '我的保单', icon: 'policy', path: '', routerLink: '' },
{ no: 20, subtitle: '我的客户', icon: 'customer', path: '', routerLink: '' },
// { no: 14, subtitle: '我的佣金', icon: 'commission', path: '', routerLink: '' },
......@@ -120,16 +124,28 @@ export class MyCenterHomeComponent implements OnInit, AfterViewInit {
{ no: 25, subtitle: '', icon: 'default', path: '', routerLink: '' },
{ no: 25, subtitle: '', icon: 'default', path: '', routerLink: '' },
{ no: 26, subtitle: '', icon: 'default', path: '', routerLink: '' }
=======
{ no: 12, subtitle: '我的保单', icon: 'policy', path: '', routerLink: '',showSubMenu:true },
{ no: 20, subtitle: '我的客户', icon: 'customer', path: '', routerLink: '',showSubMenu:true },
// { no: 14, subtitle: '我的佣金', icon: 'commission', path: '', routerLink: '',showSubMenu:true },
{ no: 19, subtitle: '薪资单', icon: 'salary', path: '', routerLink: 'salary',showSubMenu:this.isShowSalay },
{ no: 21, subtitle: '公司制度', icon: 'management', path: '', routerLink: '',showSubMenu:true },
{ no: 23, subtitle: '我的报聘', icon: 'pin', path: '', routerLink: 'my_application' ,showSubMenu:true},
{ no: 24, subtitle: '目标设置', icon: 'set', path: '', routerLink: 'target',showSubMenu:true },
{ no: 25, subtitle: '', icon: 'default', path: '', routerLink: '' ,showSubMenu:true},
{ no: 26, subtitle: '', icon: 'default', path: '', routerLink: '' ,showSubMenu:true}
>>>>>>> dev
],
isShow: true
},
{
title: '教育培训',
content: [
{ no: 5, subtitle: '保险ABC', icon: 'abc', path: `https://${window.location.host}/issue`, routerLink: '' },
{ no: 6, subtitle: '培训课件', icon: 'train', path: '', routerLink: 'training' },
{ no: 11, subtitle: '文件下载', icon: 'download', path: 'https://www.ydinsurance.cn/?page_id=13957', routerLink: 'fileUpload' },
{ no: 17, subtitle: '产品库', icon: 'product', path: 'https://www.ydinsurance.cn/?page_id=14331', routerLink: '' }
{ no: 5, subtitle: '保险ABC', icon: 'abc', path: `https://${window.location.host}/issue`, routerLink: '' ,showSubMenu:true},
{ no: 6, subtitle: '培训课件', icon: 'train', path: '', routerLink: 'training',showSubMenu:true },
{ no: 11, subtitle: '文件下载', icon: 'download', path: 'https://www.ydinsurance.cn/?page_id=13957', routerLink: 'fileUpload',showSubMenu:true },
{ no: 17, subtitle: '产品库', icon: 'product', path: 'https://www.ydinsurance.cn/?page_id=14331', routerLink: '' ,showSubMenu:true}
],
isShow: true
......@@ -157,6 +173,7 @@ export class MyCenterHomeComponent implements OnInit, AfterViewInit {
this.router.navigate(['/salesDetail'], { queryParams: { searchType: this.performanceSelectedFlag, showType: 'sales' } });
} else if (item.no === 15) {
this.router.navigate(['/teamPanel'])
// this.router.navigate(['/team_area'])
} else if (!item.subtitle) {
return;
} else if (item.no === 18) {
......@@ -314,11 +331,9 @@ export class MyCenterHomeComponent implements OnInit, AfterViewInit {
this.isShow = true;
sessionStorage.setItem('isTeamleader', '1');
sessionStorage.setItem('subordinateSystemName', res['data']['subordinateSystemName'])
this.getMenuList();
} else {
this.isShow = false;
sessionStorage.setItem('isTeamleader', '0')
this.getMenuList();
}
})
}
......@@ -391,4 +406,18 @@ export class MyCenterHomeComponent implements OnInit, AfterViewInit {
}
})
}
//判断是否显示薪资单
canSeeSalaryList(){
const practitionerId = JSON.parse(localStorage.getItem('lifeCustomerInfo'))['practitionerId'];
this.myService.canSeeSalaryList(practitionerId).subscribe((res)=>{
if(res['data'] && res['data'].canSeeSalaryList == 1){
this.isShowSalay = true;
this.getMenuList();
}else{
this.isShowSalay = false;
this.getMenuList();
}
})
}
}
......@@ -48,6 +48,7 @@ import { MyApplicationComponent } from './my-application/my-application.componen
import { SuggestionComponent } from './suggestion/suggestion.component';
import { EmployeeSalaryComponent } from './application-process/employee-salary/employee-salary.component';
import { HistoricalRankComponent } from './historical-rank/historical-rank.component';
import { TeamAreaPanelComponent } from './team-area-panel/team-area-panel.component';
const myRoutes: Routes = [
{ path: '', component: MyCenterHomeComponent, canActivate: [AuthGuard], data: [{ title: '银盾保险经纪 - 工作台' }] },
......@@ -102,8 +103,8 @@ const myRoutes: Routes = [
{ path: 'approval_result_list',component:ApprovalResultListComponent,data: [{ title: '审批流程' }],canActivate:[AuthGuard]},
{ path: 'my_application',component:MyApplicationComponent,data: [{ title: '我的报聘' }],canActivate:[AuthGuard]},
{ path: 'suggestion',component:SuggestionComponent,data: [{ title: '问题反馈' }],canActivate:[AuthGuard]},
{ path: 'historical_rank', component: HistoricalRankComponent, canActivate: [AuthGuard] }
{ path: 'historical_rank', component: HistoricalRankComponent, canActivate: [AuthGuard] },
{ path: 'team_area',component:TeamAreaPanelComponent, canActivate: [AuthGuard]}
];
@NgModule({
......
......@@ -58,9 +58,10 @@ import { MyApplicationComponent } from './my-application/my-application.componen
import { SuggestionComponent } from './suggestion/suggestion.component';
import { EmployeeSalaryComponent } from './application-process/employee-salary/employee-salary.component';
import { HistoricalRankComponent } from './historical-rank/historical-rank.component';
import { TeamAreaPanelComponent } from './team-area-panel/team-area-panel.component';
@NgModule({
declarations: [MyCenterHomeComponent, MkMaterialComponent, MkMaterialDetailComponent, FileUploadComponent, ImportantAnnouncementComponent, SalesDetailComponent, AnnouncementDetailComponent, MyBusinessComponent, MyBusinessDetailComponent, PickerComponent, MyToastComponent, SalesRankComponent, TeamRankComponent, RecruitingComponent, RecruitingDetailComponent, ThanksComponent, MySettingComponent, MySettingDetailComponent, MyNewsComponent, MyTargetComponent, TeamPanelComponent, SwitchNumberPipe, TeamSalesScoreComponent, ScoreDetailsComponent, BusinessCardComponent, OrderDetailComponent, SalaryComponent, TodoListComponent, AddTaskComponent, MedicalServiceComponent, InvitationComponent, RegisterComponent, EmployeeInfoComponent, EmployeeBasicInfoComponent, WorkExperienceComponent, PersonalPhotosComponent, EmployeeIdCardComponent, EmployeeEducationComponent, PersonalStatementComponent, SignatureComponent, EmployeeSubmitComponent, BankCardComponent, MemberDetailComponent, ApprovalListComponent, ApprovalCommentsComponent, ApprovalResultListComponent, MyApplicationComponent, SuggestionComponent, EmployeeSalaryComponent, HistoricalRankComponent],
declarations: [MyCenterHomeComponent, MkMaterialComponent, MkMaterialDetailComponent, FileUploadComponent, ImportantAnnouncementComponent, SalesDetailComponent, AnnouncementDetailComponent, MyBusinessComponent, MyBusinessDetailComponent, PickerComponent, MyToastComponent, SalesRankComponent, TeamRankComponent, RecruitingComponent, RecruitingDetailComponent, ThanksComponent, MySettingComponent, MySettingDetailComponent, MyNewsComponent, MyTargetComponent, TeamPanelComponent, SwitchNumberPipe, TeamSalesScoreComponent, ScoreDetailsComponent, BusinessCardComponent, OrderDetailComponent, SalaryComponent, TodoListComponent, AddTaskComponent, MedicalServiceComponent, InvitationComponent, RegisterComponent, EmployeeInfoComponent, EmployeeBasicInfoComponent, WorkExperienceComponent, PersonalPhotosComponent, EmployeeIdCardComponent, EmployeeEducationComponent, PersonalStatementComponent, SignatureComponent, EmployeeSubmitComponent, BankCardComponent, MemberDetailComponent, ApprovalListComponent, ApprovalCommentsComponent, ApprovalResultListComponent, MyApplicationComponent, SuggestionComponent, EmployeeSalaryComponent, HistoricalRankComponent, TeamAreaPanelComponent],
imports: [
CommonModule,
LifeCommonModule,
......
......@@ -569,4 +569,33 @@ export class MyService {
return this.http
.post(url, JSON.stringify(param));
}
//区域负责人数字权限成员业绩信息查询
employeePerformanceForAreaManagerQuery(param){
const url = this.ydapi + "/practitioner/employeePerformanceForAreaManagerQuery";
return this.http.post(url, JSON.stringify(param)).pipe(res => {
return res;
});
}
//销售业绩预测  保费/佣金/件数
employeeFCTPerformanceForAreaManagerQuery(param){
const url = this.ydapi + "/practitioner/employeeFCTPerformanceForAreaManagerQuery";
return this.http.post(url, JSON.stringify(param)).pipe(res => {
return res;
});
}
//区域负责人查询战队PEP得分
pepForAreaManagerQuery(param){
const url = this.ydapi + "/practitioner/pepForAreaManagerQuery";
return this.http.post(url, JSON.stringify(param)).pipe(res => {
return res;
});
}
canSeeSalaryList(params){
const url = this.ydapi + "/practitioner/canSeeSalaryList/" + params ;
return this.http.get(url);
}
}
......@@ -80,6 +80,9 @@
display: flex;
flex-wrap: wrap;
font-size: 16px;
}
select.form-control {
direction: rtl;
}
input[type="date"]{
......
......@@ -478,6 +478,13 @@ export class RecruitingDetailComponent implements OnInit {
this.openPopInfo('S2级别以下,辅导人不可以为空!')
return;
}
if(this.employQuery.mentorPractitionerId || this.employQuery.mentor){
if(!this.employQuery.subsystemId || !this.employQuery.subsystem){
this.openPopInfo('该辅导人在系统里还没有归属到某一个体系,请重新选择辅导人!')
return;
}
}
}else{
if(!this.employQuery.branch || !this.employQuery.branchId){
this.openPopInfo('报聘职级为S2级别时,请您自己选择分公司!')
......
<div class="salesWrapper">
<div class="salesContent">
<div class="salesItem" *ngFor="let payScaleItem of payScaleInfos">
<div class="salesItem" *ngFor="let payScaleItem of payScaleInfos" (click)="getPdf(payScaleItem.monShId,payScaleItem.pdfOssPath)">
<div class="icon_bolck"><span class="iconfont icon-xinzidan"></span></div>
<div class="line">
<div>薪资日期</div>
......@@ -12,19 +12,22 @@
</div>
<div class="line">
<span>应发佣金</span>
<div class="price">¥{{payScaleItem.monDtlAmount | number: "1.2-2"}}</div>
<div class="price" *ngIf="!payScaleItem.pdfOssPath">¥{{payScaleItem.monDtlAmount | number: "1.2-2"}}</div>
<div *ngIf="payScaleItem.pdfOssPath">直接查看薪资单明细</div>
</div>
<div class="line">
<span>扣除税</span>
<div class="price">¥{{(payScaleItem.monDtlAmount-payScaleItem.monDtlRAmount) | number: "1.2-2"}}</div>
<div class="price" *ngIf="!payScaleItem.pdfOssPath">¥{{(payScaleItem.monDtlAmount-payScaleItem.monDtlRAmount) | number: "1.2-2"}}</div>
<div class="price" *ngIf="payScaleItem.pdfOssPath">-</div>
</div>
<div class="line">
<span>实发佣金</span>
<div class="price">¥{{payScaleItem.monDtlRAmount | number: "1.2-2"}}</div>
<div class="price" *ngIf="!payScaleItem.pdfOssPath">¥{{payScaleItem.monDtlRAmount | number: "1.2-2"}}</div>
<div *ngIf="payScaleItem.pdfOssPath">直接查看薪资单明细</div>
</div>
<div class="line">
<div></div>
<div (click)="getPdf(payScaleItem.monShId)">
<div>
薪资单明细
<span class="iconfont icon-xiazai" style="color:#ff3500;margin-left: 5px;"></span>
</div>
......
......@@ -23,7 +23,7 @@ export class SalaryComponent implements OnInit {
}
payScaleListQuery() {
this.myService.payScaleListQuery({ practitionerIdEG: this.practitionerIdEG }).subscribe((res) => {
this.myService.payScaleListQuery({ practitionerIdEG: this.practitionerIdEG,practitionerId:this.practitionerId }).subscribe((res) => {
if (res['success']) {
this.payScaleInfos = res['data']['payScaleInfos'];
} else {
......@@ -33,11 +33,16 @@ export class SalaryComponent implements OnInit {
}
//下载pdf
getPdf(monShId) {
getPdf(monShId,url) {
if(url){
window.open(url)
// location.href = url;
}else{
this.myService.payScalePdf({ monShId: monShId, practitionerId: Number(this.practitionerId) }).subscribe((res) => {
if (res['success']) {
if (res['data']['url']) {
location.href = res['data']['url'];
window.open(res['data']['url'])
// location.href = res['data']['url'];
} else {
this.toastDialog = true;
this.toastInfo = {
......@@ -51,4 +56,6 @@ export class SalaryComponent implements OnInit {
}
})
}
}
}
......@@ -19,7 +19,7 @@ export class SalesDetailComponent implements OnInit {
{ time: 1, name: '本月' },
{ time: 3, name: '本季' },
{ time: 2, name: '本年度' },
// { time: 4, name: '历史' }
{ time: 4, name: '历史' }
]
}
......
<div class="taem_panel_wrapper">
<div class="teamInfo">
<img src="assets/images/cup_icon.png" >
<div style="float: left;letter-spacing: 5px;margin-left: 5%;">我的战队</div>
</div>
<div class="team_wrapper">
<div class="item" *ngFor="let branchIntem of branchDataInfos" [routerLink]="['/teamPanel']">
<ng-container *ngFor="let deptItem of branchIntem['deptDataInfos']">
<div *ngFor="let systemItem of deptItem['subordinateSystemDataInfos']">
{{systemItem.subordinateSystemName}}
</div>
</ng-container>
</div>
</div>
</div>
\ No newline at end of file
.taem_panel_wrapper{
padding: 5px 8px;
background: url('../../../assets/images/team_bg.png') no-repeat;
// background: #1b5b99;
background-size: 100%;
height: auto;
min-height: 100%;
position: relative;
ul li,ol li{
list-style: none;
}
.teamInfo{
font-size: 26px;
position: relative;
display: flex;
align-items: center;
justify-content: center;
text-align: center;
overflow: hidden;
border-radius: 6px;
color: #fff;
width: 100%;
height: 130px;
img{
width: 12%;
margin-left: -8%;
}
}
.item{
div{
background: #fff;
padding: 0px 5px;
height: 35px;
line-height: 35px;
margin-bottom: 5px;
}
}
}
\ No newline at end of file
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { TeamAreaPanelComponent } from './team-area-panel.component';
describe('TeamAreaPanelComponent', () => {
let component: TeamAreaPanelComponent;
let fixture: ComponentFixture<TeamAreaPanelComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ TeamAreaPanelComponent ]
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(TeamAreaPanelComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});
......@@ -17,7 +17,6 @@
</ul>
</div>
</div>
<div class="salseContent">
<div class="num">¥{{statisticInfo?.fyp | number: "1.2-2"}}</div>
<div class="num">¥{{statisticInfo?.fyc | number: "1.2-2"}}</div>
......@@ -34,7 +33,7 @@
<div class="rankContent">
<div style="font-size: 18px;margin-bottom: 10px;">战队排名</div>
<ul>
<!-- <li class="rank">排名</li> -->
<li class="rank">排名</li>
<li class="name">姓名</li>
<li class="fyp">首年保费</li>
<li class="fyc">首年佣金</li>
......@@ -44,9 +43,9 @@
暂无战队成员,努力去增员吧
</div>
<ul *ngFor="let performanceItem of performanceListShow;index as i;">
<!-- <li class="rank">
{{performanceItem.rank}}
</li> -->
<li class="rank">
{{i+1}}
</li>
<li class="name">{{performanceItem.name}}</li>
<li class="fyp remark">¥{{performanceItem.fyp | number: "1.0-2"}}</li>
<li class="fyc remark">¥{{performanceItem.fyc | number: "1.0-2"}}</li>
......
......@@ -108,21 +108,24 @@
padding: 5px;
ul{
width: 100%;
height: 30px;
line-height: 30px;
li{
float: left;
width: 28%;
width: 24%;
text-align: right;
margin-right: 1%;
position: relative;
margin-bottom: 5px;
overflow: hidden;
height: 30px;
height: 32px;
line-height: 32px;
li.icon .iconfont{
position: absolute;
}
}
li.rank{
width: 10%;
text-align: center;
}
li.name,li.count{
width: 18%;
}
......
......@@ -64,7 +64,11 @@
暂无战队成员,努力去增员吧
</div>
<ul *ngFor="let forecastItem of salesPerformanceForecastInfos;index as i;">
<li class="name"><span>{{i+1}}</span>{{forecastItem.name}}</li>
<li class="name">
<span>{{i+1}}</span>
<i>{{forecastItem.name}}</i>
</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>
......@@ -92,7 +96,7 @@
暂无战队成员,努力去增员吧
</div>
<ul *ngFor="let teamMemberItem of teamMemberList;index as i;" [routerLink]="['/member_detail',teamMemberItem.practitionerId]">
<li>{{teamMemberItem.name}}</li>
<li>{{i+1}} {{teamMemberItem.name}}</li>
<li>{{teamMemberItem.practitionerLevel}}{{teamMemberItem.practitionerTitle}}</li>
<li class="sex">{{teamMemberItem.gender}}</li>
<li>{{teamMemberItem.mobileNo}}</li>
......
......@@ -141,6 +141,10 @@
}
ul li.name{
width: 20%;
i{
font-style: normal;
margin-left: 15px;
}
}
}
.content_wrapper.memberList{
......
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