Commit 4d5d51ce by zeyang

1.增加视频上传页面

2.增加原辅导人之体系推荐奖金
parent f5a0f49f
This source diff could not be displayed because it is too large. You can view the blob instead.
......@@ -32,7 +32,7 @@
"ng-zorro-antd-mobile": "^0.12.5",
"ngx-echarts": "^3.2.0",
"ngx-ueditor": "^2.1.3",
"node-sass": "4.14.1",
"node-sass": "^4.14.1",
"rxjs": "~6.3.3",
"save": "^2.4.0",
"signature_pad": "^3.0.0-beta.4",
......
......@@ -16,7 +16,9 @@ export class EmployBasicQuery {
public residentAddress?:string,
public wechatId?:number,
public email?:string,
public politicalOutlook?:string
public politicalOutlook?:string,
public videoOssPath?:string
) {
}
......
import { Injectable } from '@angular/core';
import {
HttpEvent, HttpInterceptor, HttpHandler, HttpRequest
HttpEvent, HttpInterceptor, HttpHandler, HttpRequest
} from '@angular/common/http';
import { Observable } from "rxjs/index";
import { tap } from "rxjs/internal/operators";
@Injectable()
export class AuthInterceptor implements HttpInterceptor {
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
const authReq = req.clone({
headers: req.headers.set('X-Authorization', localStorage.getItem('lifeToken') ? localStorage.getItem('lifeToken') : ''),
setHeaders: { 'Content-Type': 'application/json' }
});
return next.handle(authReq)
.pipe(
tap(
event => { },
error => {
if (error.status === 401) {
let { search, href } = window.location;
href = href.replace(/&?t_reload=(\d+)/g, '');
window.location.href = href + (search ? '&' : '?') + 't_reload=' + new Date().getTime();
}
}
)
);
}
}
intercept(req : HttpRequest<any>, next : HttpHandler) : Observable<HttpEvent<any>> {
let authReq;
if (req.url.includes('/manager/fileUpload')) {
authReq = req.clone({
headers: req.headers.set('X-Authorization', localStorage.getItem('lifeToken') ? localStorage.getItem('lifeToken') : ''),
setHeaders: { 'Content-Type': 'multipart/form-data; boundary=----WebKitFormBoundarynl6gT1BKdPWIejNq' }
});
} else {
authReq = req.clone({
headers: req.headers.set('X-Authorization', localStorage.getItem('lifeToken') ? localStorage.getItem('lifeToken') : ''),
setHeaders: { 'Content-Type': 'application/json' }
});
}
return next.handle(authReq)
.pipe(
tap(
event => { },
error => {
if (error.status === 401) {
let { search, href } = window.location;
href = href.replace(/&?t_reload=(\d+)/g, '');
window.location.href = href + (search ? '&' : '?') + 't_reload=' + new Date().getTime();
}
}
)
);
}
}
\ No newline at end of file
<div class="wrapper">
<div class="title">
<div><span class="line"></span>银行卡号</div>
<span class="page_mark"> 7/11</span>
<span class="page_mark"> 7/12</span>
</div>
<div class="content">
<div class="contentDetail employ">
......
<div class="wrapper">
<div class="title">
<div><span class="line"></span>申请人基本资料</div>
<span class="page_mark"> 1/11</span>
<span class="page_mark"> 1/12</span>
</div>
<div class="content">
<div class="contentDetail employ">
......
<div class="wrapper">
<div class="title">
<div><span class="line"></span>学历信息</div>
<span class="page_mark"> 5/11</span>
<span class="page_mark"> 5/12</span>
</div>
<div class="content">
<div class="contentDetail employ">
......
<div class="wrapper">
<div class="title">
<div><span class="line"></span>个人证件资料</div>
<span class="page_mark"> 4/11</span>
<span class="page_mark"> 4/12</span>
</div>
<div class="sub_title">
<strong>身份证件</strong>
......
<div class="wrapper">
<div class="title">
<div><span class="line"></span>薪资单上传</div>
<span class="page_mark"> 8/11</span>
<span class="page_mark"> 8/12</span>
</div>
<div class="content">
<div class="photo_wrapper" (click)="selectPic()" *ngIf="!vxUrl">
......@@ -9,7 +9,7 @@
<div>点击添加</div>
</div>
<img alt="薪资单" src="{{vxUrl}}" *ngIf="vxUrl" (click)="selectPic()">
<ul class="tips">
<!-- <ul class="tips">
<li>如果报聘职级为A1(销售助理),可无保险从业经验要求;</li>
<li>如果报聘职级为A2(销售顾问),必须有保险从业经验;</li>
<li>如果报聘职级为A3(销售主任),须绩优保险从业人员;</li>
......@@ -23,7 +23,7 @@
<li>如果报聘职级为S2(高级合伙人),须携带24人入职,至少包含1名 S1 职级,并提供过去一年内50万保险销售收入证明;</li>
<li>如果报聘职级为S3(资深合伙人),须携带 75 人入职,至少各含一名S1和S2职级,并提供过去一年内 100 万保险销售收入证明;</li>
<li>如果报聘职级为IA(独立经纪人),须要符合经纪人聘用条件的绩优保险从业人员</li>
</ul>
</ul> -->
</div>
<footer class="fixed" (click)="next()" *ngIf="approveStatus==null || approveStatus=='-1'">
保存并下一步
......
<div class="wrapper">
<div class="title">
<div><span class="line"></span>个人证件照片资料</div>
<span class="page_mark"> 3/11</span>
<span class="page_mark"> 3/12</span>
</div>
<div class="content">
<div class="photo_wrapper" (click)="selectPic()" *ngIf="!vxUrl">
......
......@@ -2,7 +2,7 @@
<div class="wrapper" *ngIf="type=='personal_statement'">
<div class="title">
<div><span class="line"></span>个人声明</div>
<span class="page_mark"> 9/11</span>
<span class="page_mark"> 9/12</span>
</div>
<div class="content">
<ul>
......@@ -27,7 +27,7 @@
<div class="wrapper" *ngIf="type =='contract'">
<div class="title">
<div>合同文档确认</div>
<span class="page_mark"> 10/11</span>
<span class="page_mark"> 10/12</span>
</div>
<div class="content">
<ul>
......
......@@ -109,7 +109,7 @@ saveRecord(){
}
this.saveContractTermsConfirms();
this.saveRecord();
this.router.navigate(["/signature"], {
this.router.navigate(["/recordVideo"], {
queryParams: { hiringBasicInfoId: this.hiringBasicInfoId },
});
}
......@@ -390,9 +390,12 @@ saveRecord(){
}
if (this.type == "contract") {
this.saveRecord();
this.router.navigate(["/signature"], {
queryParams: { hiringBasicInfoId: this.hiringBasicInfoId },
});
// this.router.navigate(["/signature"], {
// queryParams: { hiringBasicInfoId: this.hiringBasicInfoId },
// });
this.router.navigate(["/recordVideo"], {
queryParams: { hiringBasicInfoId: this.hiringBasicInfoId },
});
}
}
......
<div class="wrapper">
<div class="title">
<div><span class="line"></span>微信二维码</div>
<span class="page_mark"> 6/11</span>
<span class="page_mark"> 6/12</span>
</div>
<div class="content">
<div class="photo_wrapper" (click)="selectPic()" *ngIf="!vxUrl">
......
<div>
<div class="loadingBoxHide" id="loadingBox">
<div class="lds-dual-ring"></div>
<div class="lds-text">文件上传中</div>
</div>
<div class="wrapper">
<div class="title">
<div><span class="line"></span>上传视频</div>
<span class="page_mark"> 11/12</span>
</div>
<div class="content">
<div class="tips">
请您正对手机,确保光线充足,并将脸部完整置于视频中。
</div>
<div class="videoBox">
<video id="video1" class="my-video" [controls]="false" width="340px" [muted]="true" height="auto"
webkit-playsinline="true" playsinline="true" *ngIf="videoType==1 || videoType==2"></video>
<video id="video2" class="my-video" [loop]="true" [controls]="false" width="340px" [muted]="false"
height="auto" webkit-playsinline="true" playsinline="true" *ngIf="videoType==3"></video>
</div>
<div class="timeBox">
{{recrodTime}}s / 20s
</div>
<div class="buttonBox" *ngIf="initType==1 && (approveStatus==null || approveStatus=='-1') ">
<div class="startVideo" (click)="start()" *ngIf="videoType==1">
<button>开始录制</button>
</div>
<div class="startVideo" (click)="stop()" *ngIf="videoType==2">
<button style="background-color: #ffaa00;">完成录制</button>
</div>
<div class="anewVideo" (click)="reStart()" *ngIf="videoType==3">
<button>重新录制</button>
</div>
</div>
<div class="initBox" *ngIf="initType==2">
<div class="startVideo" (click)="c_video()">
<button>预览</button>
</div>
<div class="anewVideo" (click)="reStart()" *ngIf="approveStatus==null || approveStatus=='-1'">
<button>重新录制</button>
</div>
</div>
<div class="textBox">
<div class="textTitle">
请朗读以下内容
</div>
<div class="textContent">
本人(姓名),自愿报聘成为银盾保险经纪有限公司经纪人,本人承诺填写的报聘信息真实有效。
</div>
</div>
</div>
<footer class="fixed" (click)="next()" *ngIf="(approveStatus==null || approveStatus=='-1') && videoType==3">
保存并下一步
</footer>
<div id="page" *ngIf="approveStatus!=null && approveStatus !='-1'">
<div (click)="goBack()">上一页</div>
<div (click)="viewNext()">下一页</div>
</div>
</div>
<ydlife-toast *ngIf="toastDialog" [toastInfo]="toastInfo"></ydlife-toast>
<ydlife-alert *ngIf="isNeedAlert" [dialogInfo]="dialogInfo" (popInfo)="getPopInfo()"></ydlife-alert>
</div>
.wrapper {
font-size: 18px;
background: #fff;
min-height: 100%;
padding: 10px 13px 0 13px;
display: flex;
flex-direction: column;
padding-bottom: 100px;
select{
-webkit-appearance: none;
}
.title{
display: flex;
justify-content: space-between;
font-weight: bold;
align-items: center;
font-size: 20px;
div {
display: flex;
align-items: center;
.line{
width: 5px;
height: 18px;
display: inline-block;
background: #C81B1E;
margin-right: 5px;
}
}
}
.content{
flex-grow: 1;
position: relative;
text-align: center;
.tips{
text-align: center;
color: #d88686;
background-color: #ffd9d9;
font-size: 13px;
padding: 5px 0;
font-weight: bold;
margin: 0 4px;
}
.videoBox{
width: 280px;
height: 280px;
background-color: #999999;
border-radius: 100% !important;
margin:0 auto;
text-align: center;
margin-top: 10px;
overflow: hidden !important;
-webkit-backface-visibility: hidden; //兼容ios
-webkit-transform: translate3d(0, 0, 0);
position: relative;
.my-video{
position:absolute;
left:0;
top:0;
width:100%;
height:100%;
align-items:center;
// object-fit: fill; //视频铺满 仅android可以
object-fit: cover; //视频铺满 android ios 都可以
}
/* 隐藏video 所有控件 */
.show-video::-webkit-media-controls-enclosure{
display: none !important;
}
}
.timeBox{
display: inline-block;
padding: 4px 20px;
border: #999999 1.5px solid;
margin: 10px 0;
font-size: 18px;
color: #1b1b1b;
border-radius: 3px;
}
.buttonBox{
.startVideo{
button{
border: 0px;
background-color: #24a0ed;
color: #fff;
font-size: 18px;
padding: 10px 90px;
font-weight: bold;
border-radius: 20px;
}
}
.anewVideo{
button{
border: 1px solid #eeeeee;
background-color: #fafafa;
font-size: 18px;
padding: 8px 90px;
font-weight: bold;
border-radius: 20px;
}
}
}
.initBox{
display: flex;
justify-content: center;
.startVideo{
button{
border: 0px;
background-color: #24a0ed;
color: #fff;
font-size: 18px;
padding: 10px 40px;
font-weight: bold;
border-radius: 20px;
margin-right: 20px;
}
}
.anewVideo{
button{
border: 1px solid #eeeeee;
background-color: #fafafa;
font-size: 18px;
padding: 8px 40px;
font-weight: bold;
border-radius: 20px;
}
}
}
.textBox{
.textTitle{
font-weight: bold;
margin:10px 0 5px 0;
font-size: 18px;
}
.textContent{
font-size: 16px;
text-align: left;
color: #092CAB;
}
}
}
}
.loadingBoxHide{
display: none;
}
.loadingBox {
z-index: 9999;
position: fixed;
width: 100%; /* 设置加载框的宽度 */
height: 100%; /* 设置加载框的高度 */
border: 1px solid #ccc; /* 设置边框 */
background-color: rgba(242, 242, 242, 0.5); /* 设置背景颜色 */
display: flex;
justify-content: center;
align-items: center;
flex-direction: column;
}
.lds-text{
color: #000;
font-size: 16px;
margin-top: 10px;
font-weight: bold;
}
.lds-dual-ring {
display: block;
width: 44px;
height: 44px;
margin: 1px;
border-radius: 50%;
border: 5px solid #000;
border-color: #000 transparent #000 transparent;
animation: lds-dual-ring 1.2s linear infinite;
}
@keyframes lds-dual-ring {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(360deg);
}
}
\ No newline at end of file
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { RecordVideoComponent } from './record-video.component';
describe('RecordVideoComponent', () => {
let component: RecordVideoComponent;
let fixture: ComponentFixture<RecordVideoComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ RecordVideoComponent ]
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(RecordVideoComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});
import { Component, OnInit, ChangeDetectorRef } from '@angular/core';
import { MyService } from '../../my.service';
import { ActivatedRoute, Router } from "@angular/router";
import { LifeCommonService } from "../../../common/life-common.service";
import { EmployBasicQuery } from '../../../domain/employBasicQuery';
declare const wx : any;
declare class MediaRecorder {
constructor(stream : MediaStream);
start() : void;
stop() : void;
// 其他方法和属性...
}
@Component({
selector: 'ydlife-record-video',
templateUrl: './record-video.component.html',
styleUrls: ['./record-video.component.scss']
})
export class RecordVideoComponent implements OnInit {
hiringBasicInfoId : any;
toastDialog : boolean;
toastInfo : any;
isNeedAlert : boolean;
dialogInfo : any;
approveStatus : any;
editEmployBasicInfo:EmployBasicQuery = new EmployBasicQuery();
mediaRecorder : any;
mediaStream : any;
recorderFile : any;
chunks : any = [];
stopRecordCallback : any;
videoType : any = 1;
recrodTime = 0;
intervalTime = null;
initType=1;
constructor(private activatedRoute : ActivatedRoute,
private router : Router, public lifeCommonService : LifeCommonService,
public myService : MyService, private changeDetectorRef : ChangeDetectorRef) { }
ngOnInit() {
const title = this.activatedRoute.snapshot.data[0]['title'];
this.lifeCommonService.setTitle(title);
this.hiringBasicInfoId = this.activatedRoute.snapshot.queryParams.hiringBasicInfoId ? this.activatedRoute.snapshot.queryParams.hiringBasicInfoId : null;
this.queryWholeInfo(this.hiringBasicInfoId);
}
c_video(){
this.initType=1;
const video = document.getElementsByTagName('video')[0];
video.src=this.editEmployBasicInfo.videoOssPath;
video.play();
}
openCamera(start) {
var constraints = {
audio: true,
video: {
// width: { min: 1024, ideal: 1280, max: 1920 },
// height: { min: 776, ideal: 720, max: 1080 },
deviceId: "default",
facingMode: "user" //调用前置摄像头
}
};
this.getUserMedia(constraints, (err, stream) => {
if (err) {
// this.$emit('error', err)
throw err;
} else {
// 通过 MediaRecorder 记录获取到的媒体流
const video = document.getElementsByTagName('video')[0];
this.mediaRecorder = new MediaRecorder(stream);
this.mediaStream = stream;
this.chunks = [],
video.srcObject = stream;
video.play();
this.mediaRecorder.ondataavailable = (e) => {
this.mediaRecorder.blobs.push(e.data);
this.chunks.push(e.data);
};
this.mediaRecorder.blobs = [];
this.mediaRecorder.onstop = (e) => {
this.recorderFile = new Blob(this.chunks, {
'type': this.mediaRecorder.mimeType
});
this.chunks = [];
if (null != this.stopRecordCallback) {
this.stopRecordCallback();
}
};
if (start) {
this.mediaRecorder.start();
}
}
});
}
/**
* 获取用户媒体设备(处理兼容的问题)
* @param videoEnable {boolean} - 是否启用摄像头
* @param audioEnable {boolean} - 是否启用麦克风
* @param callback {Function} - 处理回调
*/
getUserMedia(constraints, callback) {
if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {
navigator.mediaDevices.getUserMedia(constraints).then(function (stream) {
callback(false, stream);
})['catch'](function (err) {
callback(err);
});
} else if (navigator['getUserMedia']) {
navigator.getUserMedia(constraints, function (stream) {
callback(false, stream);
}, function (err) {
callback(err);
});
} else {
callback(new Error('Not support userMedia'));
}
}
/**
* 关闭媒体流
* @param stream {MediaStream} - 需要关闭的流
*/
closeStream(stream) {
if (!stream) return;
if (typeof stream.stop === 'function') {
stream.stop();
} else {
let trackList = [stream.getAudioTracks(), stream.getVideoTracks()];
for (let i = 0; i < trackList.length; i++) {
let tracks = trackList[i];
if (tracks && tracks.length > 0) {
for (let j = 0; j < tracks.length; j++) {
let track = tracks[j];
if (typeof track.stop === 'function') {
track.stop();
}
}
}
}
}
}
//开始录制
start() {
this.mediaRecorder.start();
this.videoType = 2;
this.startRecordReadTime();
}
//停止录制
stop() {
this.videoType = 3;
var element = document.getElementById("loadingBox");
element.classList.remove('loadingBoxHide');
element.classList.add('loadingBox');
this.stopRecord(() => {
this.send();
});
this.clearIntervaltime();
}
//重新录制
reStart() {
this.initType=1;
this.videoType = 2;
this.clearIntervaltime();
this.startRecordReadTime();
this.openCamera('start');
}
// 清除定时器
clearIntervaltime() {
this.recrodTime = 0;
if (this.intervalTime) {
clearInterval(this.intervalTime);
}
}
// 录制时间
startRecordReadTime() {
var that = this;
that.intervalTime = setInterval(() => {
if (that.recrodTime == 20) {
that.initType=2;
that.stop();
} else {
that.recrodTime += 1;
}
}, 1000)
}
// 停止录制
stopRecord(callback) {
// 终止录制器 关闭媒体流
this.mediaRecorder.stop();
this.stopRecordCallback = callback;
}
closeBtn() {
this.closeStream(this.mediaStream);
}
send() {
let that = this;
let fileName = 'figure.mp4' // 可自定义文件名称
var file = new File([this.recorderFile], fileName, {
type: 'video/mp4'
});
const video = document.getElementsByTagName('video')[0];
var formData = new FormData();
formData.append("file", file);
this.myService.uploadFile(formData,(e)=>{
var element = document.getElementById("loadingBox");
element.classList.remove('loadingBox');
element.classList.add('loadingBoxHide');
if(e.status==200){
let response = JSON.parse(e.responseText);
if(response.success){
that.editEmployBasicInfo.videoOssPath=response.data.filePath;
video.src = that.editEmployBasicInfo.videoOssPath;
video.play();
}
}
});
}
// blob 转化url
blobToUrl(blob) {
let url = window.URL.createObjectURL(blob)
return url
}
next() {
if (!this.editEmployBasicInfo.videoOssPath) {
this.openPopInfo('请录制并上传视频!')
return;
}
this.myService.saveBasicInfo(this.editEmployBasicInfo).subscribe((res) => {
if (res['success']) {
this.router.navigate(["/signature"], {
queryParams: { hiringBasicInfoId: this.hiringBasicInfoId },
});
} else {
this.toastDialog = true;
this.toastInfo = {
status: 1,
msg: res['message'],
timeout: 3000,
align: 'center'
};
}
})
}
// 打开弹窗
openPopInfo(message) {
this.isNeedAlert = true;
this.dialogInfo = {
title: null,
content: { value: message, align: 'center' },
footer: [{ value: '我知道了', routerLink: '', className: 'weui-dialog__btn_primary' }],
};
}
// 关闭弹窗
getPopInfo() {
this.isNeedAlert = false;
}
queryWholeInfo(hiringBasicInfoId) {
this.myService.queryWholeInfo({ hiringBasicInfoId: hiringBasicInfoId }).subscribe((res) => {
if (res['success']) {
this.approveStatus = res['data']['hiringBasicInfo']['approveStatus'];
this.editEmployBasicInfo = res['data']['hiringBasicInfo'];
if(this.editEmployBasicInfo.videoOssPath){
this.initType=2;
this.videoType = 3;
const video = document.getElementsByTagName('video')[0];
video.src = this.editEmployBasicInfo.videoOssPath;
}else{
//开启摄像头
this.initType=1;
this.openCamera(null);
}
} else {
this.editEmployBasicInfo = null;
}
})
}
viewNext() {
this.router.navigate(['/signature'], { queryParams: { hiringBasicInfoId: this.hiringBasicInfoId } });
}
goBack() {
history.go(-1)
}
}
\ No newline at end of file
......@@ -4,7 +4,7 @@
<div>
电子签名<span style="font-size: 10px;font-weight: normal;">(请书写工整,字迹清晰)</span>
</div>
<span class="page_mark" *ngIf="(type!='eNotice') && (type!='continuationRate')"> 11/11</span>
<span class="page_mark" *ngIf="(type!='eNotice') && (type!='continuationRate')"> 12/12</span>
</div>
<div class="signatureContent">
<signature-pad *ngIf="!isSignatureShow" #signaturePad [options]="signaturePadOptions" (onBeginEvent)="drawStart()" (onEndEvent)="drawComplete()">
......@@ -32,4 +32,4 @@
返回审批结果
</footer>
</div>
<ydlife-alert *ngIf="isNeedAlert" [dialogInfo]="dialogInfo" (popInfo)="getPopInfo()"></ydlife-alert>
<ydlife-alert *ngIf="isNeedAlert" [dialogInfo]="dialogInfo" (popInfo)="getPopInfo($event)"></ydlife-alert>
......@@ -86,12 +86,13 @@ export class SignatureComponent implements OnInit,OnDestroy,AfterViewInit {
}
next(){
if(this.isSignatureShow == false){
this.saveDigitalSignatures();
}else{
this.saveRecord();
this.router.navigate(['/employee_submit'],{queryParams:{ hiringBasicInfoId:this.hiringBasicInfoId,status:this.approveStatus}});
}
this.isNeedAlert = true;
this.dialogInfo = {
title: null,
content: { value: '本人承诺,报聘银盾保险经纪有限公司经纪人过程中填写的信息真实有效,报聘链接的附件文件已认真查看,并电子签字确认执行', align: 'center' },
footer: [{ value: '确认', routerLink: '', className: 'weui-dialog__btn_primary' },{ value: '关闭', routerLink: ''}],
};
}
drawComplete() {
......@@ -204,8 +205,16 @@ export class SignatureComponent implements OnInit,OnDestroy,AfterViewInit {
}
// 关闭弹窗
getPopInfo() {
getPopInfo(e) {
this.isNeedAlert = false;
if(e=='确认'){
if (this.isSignatureShow == false) {
this.saveDigitalSignatures();
} else {
this.saveRecord();
this.router.navigate(['/employee_submit'], { queryParams: { hiringBasicInfoId: this.hiringBasicInfoId, status: this.approveStatus } });
}
}
}
clearSignature(){
......
<div class="wrapper">
<div class="title">
<div><span class="line"></span>工作经历</div>
<span class="page_mark"> 2/11</span>
<span class="page_mark"> 2/12</span>
</div>
<div class="content" *ngIf="approveStatus==null || approveStatus=='-1'">
<div class="contentDetail employ">
......
......@@ -37,6 +37,7 @@ import { PersonalPhotosComponent } from './application-process/personal-photos/p
import { EmployeeIdCardComponent } from './application-process/employee-id-card/employee-id-card.component';
import { EmployeeEducationComponent } from './application-process/employee-education/employee-education.component';
import { PersonalStatementComponent } from './application-process/personal-statement/personal-statement.component';
import { RecordVideoComponent } from './application-process/record-video/record-video.component';
import { SignatureComponent } from './application-process/signature/signature.component';
import { EmployeeSubmitComponent } from './application-process/employee-submit/employee-submit.component';
import { BankCardComponent } from './application-process/bank-card/bank-card.component';
......@@ -144,6 +145,8 @@ const myRoutes: Routes = [
{ path: 'qrcode_upload',component:QrcodeUploadComponent,data: [{ title: '银盾经纪人报聘' }] },
{ path: 'personal_statement',component:PersonalStatementComponent,data: [{ type:'personal_statement',title: '银盾经纪人报聘' }] },
{ path: 'contract',component:PersonalStatementComponent,data: [{ type:'contract',title: '银盾经纪人报聘' }] },
{ path: 'recordVideo',component:RecordVideoComponent,data: [{ type:'record-video',title: '视频上传' }] },
{ path: 'signature',component:SignatureComponent,data: [{ title: '银盾经纪人报聘' }]},
{ path: 'eNoticeSignature',component:SignatureComponent,data: [{ title: '客户告知书和保险经纪服务委托协议' }]},
{ path: 'employee_submit',component:EmployeeSubmitComponent,data: [{ title: '已提交' }]},
......
......@@ -95,6 +95,7 @@ import { IntegrationDetailComponent } from './integration-detail/integration-det
import { IntegrationRuleComponent } from './integration-rule/integration-rule.component';
import { VideoComponent } from '../common/video/video.component';
import { QrcodeUploadComponent } from './application-process/qrcode-upload/qrcode-upload.component';
import { RecordVideoComponent } from './application-process/record-video/record-video.component';
import { NewsDetailComponent } from './news-detail/news-detail.component';
import { MoreFeaturesComponent } from './more-features/more-features.component';
import { MineComponent } from './mine/mine.component';
......@@ -106,7 +107,7 @@ import { SecondsTransferPipe } from '../seconds-transfer.pipe';
import { MyManagementComponent } from './my-management/my-management.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,SafeResourceUrlPipe, 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, ArticleComponent, ArticleDetailComponent,ActivityComponent,ActivityDetailComponent,AiofpComponent, ArticleReadComponent,SalaryDetailComponent,SalaryFirstYearComponent,DetailModalComponent, ProductComponent, ProductDataComponent, CommissionComponent, FileListComponent,MyCustomerComponent, CustomerRelationComponent, MyCustomerPolicyComponent, UnderwritingKnowledgeComponent, MyQuestionComponent, AskComponent, MenuItemComponent, MemberListComponent, ENoticeComponent, ENoticeSignComponent, RenewalReminderComponent, RenewalReminderDetailComponent, JointSalesComponent, JointSaleDetailComponent, IntegrationComponent, IntegrationDetailComponent, IntegrationRuleComponent, VideoComponent, QrcodeUploadComponent, NewsDetailComponent, MoreFeaturesComponent, MineComponent, YdCollegeComponent, MyTrainingComponent, TrainingRecordsComponent, CourseDetailComponent,SecondsTransferPipe, MyManagementComponent],
declarations: [MyCenterHomeComponent, MkMaterialComponent, MkMaterialDetailComponent, FileUploadComponent, ImportantAnnouncementComponent, SalesDetailComponent, AnnouncementDetailComponent, MyBusinessComponent, MyBusinessDetailComponent, PickerComponent, MyToastComponent, SalesRankComponent, TeamRankComponent, RecruitingComponent, RecruitingDetailComponent, ThanksComponent, MySettingComponent, MySettingDetailComponent, MyNewsComponent, MyTargetComponent, TeamPanelComponent, SwitchNumberPipe,SafeResourceUrlPipe, 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, ArticleComponent, ArticleDetailComponent,ActivityComponent,ActivityDetailComponent,AiofpComponent, ArticleReadComponent,SalaryDetailComponent,SalaryFirstYearComponent,DetailModalComponent, ProductComponent, ProductDataComponent, CommissionComponent, FileListComponent,MyCustomerComponent, CustomerRelationComponent, MyCustomerPolicyComponent, UnderwritingKnowledgeComponent, MyQuestionComponent, AskComponent, MenuItemComponent, MemberListComponent, ENoticeComponent, ENoticeSignComponent, RenewalReminderComponent, RenewalReminderDetailComponent, JointSalesComponent, JointSaleDetailComponent, IntegrationComponent, IntegrationDetailComponent, IntegrationRuleComponent, VideoComponent, QrcodeUploadComponent,RecordVideoComponent, NewsDetailComponent, MoreFeaturesComponent, MineComponent, YdCollegeComponent, MyTrainingComponent, TrainingRecordsComponent, CourseDetailComponent,SecondsTransferPipe, MyManagementComponent],
imports: [
CommonModule,
LifeCommonModule,
......
import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { HttpClient, HttpHeaders } from '@angular/common/http';
import { environment } from '../../environments/environment';
import * as uuid from 'uuid';
......@@ -970,4 +970,18 @@ export class MyService {
return res;
});
}
//上传文件
uploadFile(formData,callBack){
const url = this.API + "/manager/fileUpload?typeId=1690";
// 创建XMLHttpRequest对象
var xhr = new XMLHttpRequest();
// 设置请求方法和URL
xhr.open("POST", url, true);
// 发送请求并处理响应
xhr.onload = function() {
callBack(xhr);
};
// 发送请求
xhr.send(formData);
}
}
......@@ -76,6 +76,10 @@
<span>体系推荐奖金</span>
<span class="red">{{systemRecommendAward.commission | number: "1.2-2"}}<i class="iconfont icon-ar-r"></i></span>
</div>
<div class="item_detail" (click)="jumpToFirstYearSales(systemRecommendAwardB016,'原辅导人之体系推荐奖金',1,28)" *ngIf="systemRecommendAwardB016">
<span>原辅导人之体系推荐奖金</span>
<span class="red">{{systemRecommendAwardB016.commission | number: "1.2-2"}}<i class="iconfont icon-ar-r"></i></span>
</div>
<div class="item_detail" (click)="jumpToFirstYearSales(fycMeritsInfo,'团队管理绩效达标奖金',1,5)" *ngIf="fycMeritsInfo">
<span>团队管理绩效达标奖金</span>
<span class="red">{{fycMeritsInfo.commission | number: "1.2-2"}} <i class="iconfont icon-ar-r"></i></span>
......
......@@ -37,6 +37,7 @@ export class SalaryDetailComponent implements OnInit {
recommendAward:any = null;
//体系推介奖
systemRecommendAward:any = null;
systemRecommendAwardB016:any=null;
//特别管理奖
specialManagementAward:any = null;
//直接辅导岗位津贴
......@@ -248,6 +249,8 @@ export class SalaryDetailComponent implements OnInit {
this.recommendAward = this.salaryDetailsList[i];
}else if(this.salaryDetailsList[i]['project_id'] === 'DDCCD63D-EE47-5953-8CA0-CFAA83CB9A5E' || this.salaryDetailsList[i]['salaryCode'] === 'B-005'){
this.systemRecommendAward = this.salaryDetailsList[i];
}else if(this.salaryDetailsList[i]['salaryCode'] === 'B-016'){
this.systemRecommendAwardB016 = this.salaryDetailsList[i];
}else if(this.salaryDetailsList[i]['project_id'] === 'A09E7626-B77C-79A0-CC93-D929BCBB7B35' || this.salaryDetailsList[i]['project_id'] === '871C458C-CF54-F2A6-589F-EFEE1EE16B25' || this.salaryDetailsList[i]['salaryCode'] === 'B-003'){
this.specialManagementAward = this.salaryDetailsList[i];
}else if(this.salaryDetailsList[i]['project_id'] === '91E8A0DD-8696-9964-CD35-AEBA6C8FDF19' || this.salaryDetailsList[i]['salaryCode'] === 'C-002'){
......@@ -321,7 +324,7 @@ export class SalaryDetailComponent implements OnInit {
//初始化佣奖类型
initSalay(){
this.fycSalesInfo = this.rycSalesInfo = this.fycTutorInfo = this.rycTutorInfo = this.fycMeritsInfo =
this.fycSalesInfo = this.rycSalesInfo = this.fycTutorInfo = this.rycTutorInfo = this.fycMeritsInfo = this.systemRecommendAwardB016=
this.rycMeritsInfo= this.recommendAward= this.systemRecommendAward = this.specialManagementAward=
this.otherPreTaxDeduction = this.IncentiveBonus = this.addWeight = this.quarterlyBonus= this.onlineAward=
this.monthlySalesAddWeight = this.independentBrokerAllowance =this.directCounseling = this.indirectCounseling=
......
......@@ -139,7 +139,9 @@ export class SalaryFirstYearComponent implements OnInit {
this.policyList = res['data']['channelFristYearCommissionList'];
}else if(this.salaryType == 25){
this.policyList = res['data']['channelRenewalYearCommissionList'];
}else{
}else if(this.salaryType == 28){
this.policyList = res['data']['RecommendSystemCommissionC16List'];
}else{
this.OtherCommissionList = res['data']['OtherCommissionList'];
if(this.OtherCommissionList && this.OtherCommissionList.length){
for(let i=0;i<this.OtherCommissionList.length;i++){
......
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