Commit 95e44856 authored by FE-安焕焕's avatar FE-安焕焕 👣

Merge branch 'time' into 'master'

Time

See merge request !5
parents 984283a7 823d2e85
......@@ -15,7 +15,7 @@ module.exports = {
// Various Dev Server settings
host: '0.0.0.0', // can be overwritten by process.env.HOST
port: 8080, // can be overwritten by process.env.PORT, if port is in use, a free one will be determined
port: 7089, // can be overwritten by process.env.PORT, if port is in use, a free one will be determined
autoOpenBrowser: true,
errorOverlay: true,
notifyOnErrors: true,
......
......@@ -49,8 +49,8 @@ export default {
user-select: text !important;
}
.pc {
min-width: 1341px;
min-height: 741px;
height: 100%;
min-width: 860px;
}
.mobile {
......
......@@ -23,10 +23,11 @@ export function SInterview(tid) {
}})
}
// 面试管理查询
export function SerchList(parmars) {
export function SerchList(parmars, status) {
return axios.post(`${sapi}/api/interview/findListByQueryVO`,parmars,{headers: {
'Content-Type':'application/json;',
'X-Requested-With':'XMLHttpRequest'
'X-Requested-With':'XMLHttpRequest',
status
}})
}
//查看简历详情页
......@@ -37,9 +38,7 @@ export function seedetail (parmars) {
}
//面试官查询
export function Serchinterviewor() {
return axios.post(`${sapi}/api/interview/findInterviewerList`,{headers: {
'Content-Type':'application/json;',
}})
return axios.get(`${sapi}/api/interview/findInterviewerList`)
}
//邀约人查询
export function SerchInvitationOwer() {
......
......@@ -17,14 +17,15 @@ export function downloadone (parmars) {
}})
}
// 搜索
export function sousuoList (parmars) {
export function sousuoList (parmars, status) {
return axios.post(`${sapi}/api/resume/findListByQueryVO`,parmars,{headers: {
'Content-Type':'application/json'
'Content-Type':'application/json',
status
}})
}
//查看简历详情页
export function seedetail (parmars) {
return axios.get(`${sapi}/api/html/get/${parmars.resumeId}`,{headers: {
return axios.get(`${sapi}/api/html/get/${parmars.resumeId}?token=${parmars.token}`,{headers: {
'Content-Type':'application/json'
}})
}
......
<template>
<Row id="home" class="home">
<Col span="3" class="aside" style="width:17%;height:100%">
<loading v-show='showLoading'></loading>
<Col span="3" class="aside" style="width:17%;height:100%;overflow: auto;">
<img src="https://o7oe0d6qz.qnssl.com/image/homelogo.png" alt="" style="height:60px">
<Menu style="width: 100%;" ref='subMenu' :active-name="levelThreeName" :open-names="levelTwoName" @on-select="go">
<template v-for="(menu) in childMenu" >
......@@ -15,7 +16,7 @@
</Menu>
</Col>
<Col span="21" class="content" style="width:83%;height:100%">
<Row class="header" style="height:6%">
<Row class="header" style="height:50px">
<Col span="20">
<Menu mode="horizontal" :active-name="levelOneName" @on-select="selectMenu">
<MenuItem v-for="menu in menuList" :name="menu.name" :key="menu.name" >
......@@ -23,15 +24,15 @@
</MenuItem>
</Menu>
</Col>
<Col span="2" class="account" style="">
<span style="display:inline-block;line-height:6%;margin-left:30%">{{massage}}</span>
<Col span="2" class="account" style="text-align:right;">
<span style="display:inline-block;line-height:6%;margin-left:30%;">{{massage}}</span>
</Col>
<Col span="2" class="sign-out" >
<Col span="1" class="sign-out" >
<a @click="loginOut" style="margin-left:38%">退出</a>
</Col>
</Row>
<Row style="height:94%">
<router-view></router-view>
<router-view></router-view>
</Row>
</Col>
</Row>
......@@ -39,6 +40,8 @@
<script>
import {getpersonMassage,loginOUT,adoptOneSeeResumeList,getChannelMassage,judeAdmin} from '../api/home.server.js'
import localstorage from '../service/localstorage.service.js'
import loading from '../components/loading.vue'
import {mapState} from 'vuex'
export default{
data() {
return {
......@@ -150,6 +153,14 @@ import localstorage from '../service/localstorage.service.js'
}
},
computed: {
...mapState({
showLoading: state => state.loading
})
},
components: {
loading
},
methods: {
go(name) {
this.levelThreeName = name
......@@ -161,7 +172,7 @@ import localstorage from '../service/localstorage.service.js'
})
})
},
selectMenu(name, refesh) {
async selectMenu(name, refesh) {
// // refesh是否为刷新页面
this.levelOneName = name
const menus = this.menuList.filter(v => name === v.name)
......@@ -173,7 +184,7 @@ import localstorage from '../service/localstorage.service.js'
this.levelThreeName = initName.levelThreeName
}
if (menus[0].loadMenu) { // 简历管理模块需要加载渠道简历
this.getChannelMenu()
await this.getChannelMenu()
}
if (refesh&&this.$route.path.indexOf('channel') > -1) {
this.levelThreeName = this.$route.path.split('/')[2]
......@@ -202,7 +213,7 @@ import localstorage from '../service/localstorage.service.js'
},
getChannelMenu(){
this.menuList[0].child[1].child = []
getChannelMassage().then(res=>{
return getChannelMassage().then(res=>{
if (res.data.status == false || !res.data.success) {
return
}
......@@ -287,11 +298,11 @@ import localstorage from '../service/localstorage.service.js'
<style lang="less" scoped>
.home{
height: 100%;
overflow: hidden;
.aside{
// min-height: 2050px;
border-right: 1px solid #dcdee2;
box-shadow: #dcdee2 0 0 6px 1px;
// width:15%;
height: 100%;
img{
height: 49px;
width: 100%;
......@@ -311,13 +322,13 @@ import localstorage from '../service/localstorage.service.js'
line-height: 55px;
border-bottom: 1px solid rgb(220, 222, 226);
font-size: 14px;
overflow:hidden;
.sign-out{
line-height: 6%
}
.ivu-menu{
height: 35px;
line-height: 35px;
margin: 0 10px;
height: 43px;
line-height: 43px;
.ivu-menu-item{
padding: 0 13px;
margin: 0 49px;
......
<template>
<div class='loadingmark'>
<div class="loading-audio">
<svg :width="width+'px'" :height="height+'px'" xmlns="http://www.w3.org/2000/svg" :viewBox="viewBox" preserveAspectRatio="xMidYMid">
<g transform="translate(20 50)">
<circle cx="0" cy="0" r="7" fill="#11a181" transform="scale(0.99275 0.99275)" class='circle'/>
</g>
<g transform="translate(40 50)">
<circle cx="0" cy="0" r="7" fill="#11a181" transform="scale(0.773605 0.773605)" class='circle1'/>
</g>
<g transform="translate(60 50)">
<circle cx="0" cy="0" r="7" fill="#11a181" transform="scale(0.42525 0.42525)" class='circle2'/>
</g>
<g transform="translate(80 50)">
<circle cx="0" cy="0" r="7" fill="#11a181" transform="scale(0.113418 0.113418)" class='circle3'/>
</g>
</svg>
</div>
<div style="font-size: 18px;font-weight: 500;color:#11a181">Loading...</div>
</div>
</template>
<script>
export default{
name: 'loading',
props: {
width: {
type: Number,
default: 80
},
height: {
type: Number,
default: 80
}
},
created () {
this.viewBox = '0 0' + ' ' + (this.width + 10) + ' ' + this.height
},
data () {
return {
viewBox: ''
}
}
}
</script>
<style lang='less' scoped>
.loadingmark{
position:absolute;
top:0px;
left:0px;
width:100%;
height:100%;
background-color: rgba(255,255,255,0.6);
display: flex;
align-items: center;
justify-content: center;
flex-direction: column;
z-index: 1600;
}
.loading-audio {
width: 100px;
background-repeat: no-repeat;
background-size: cover;
// background-image: url('data:image/svg+xml,<svg width="135" height="140" viewBox="0 0 135 140" xmlns="http://www.w3.org/2000/svg" fill="#2d8cf0"><rect y="10" width="15" height="120" rx="6"><animate attributeName="height" begin="0.5s" dur="1s" values="120;110;100;90;80;70;60;50;40;140;120" calcMode="linear" repeatCount="indefinite" /><animate attributeName="y" begin="0.5s" dur="1s" values="10;15;20;25;30;35;40;45;50;0;10" calcMode="linear" repeatCount="indefinite" /></rect><rect x="30" y="10" width="15" height="120" rx="6"><animate attributeName="height" begin="0.25s" dur="1s" values="120;110;100;90;80;70;60;50;40;140;120" calcMode="linear" repeatCount="indefinite" /><animate attributeName="y" begin="0.25s" dur="1s" values="10;15;20;25;30;35;40;45;50;0;10" calcMode="linear" repeatCount="indefinite" /></rect><rect x="60" width="15" height="140" rx="6"><animate attributeName="height" begin="0s" dur="1s" values="120;110;100;90;80;70;60;50;40;140;120" calcMode="linear" repeatCount="indefinite" /><animate attributeName="y" begin="0s" dur="1s" values="10;15;20;25;30;35;40;45;50;0;10" calcMode="linear" repeatCount="indefinite" /></rect><rect x="90" y="10" width="15" height="120" rx="6"><animate attributeName="height" begin="0.25s" dur="1s" values="120;110;100;90;80;70;60;50;40;140;120" calcMode="linear" repeatCount="indefinite" /><animate attributeName="y" begin="0.25s" dur="1s" values="10;15;20;25;30;35;40;45;50;0;10" calcMode="linear" repeatCount="indefinite" /></rect><rect x="120" y="10" width="15" height="120" rx="6"><animate attributeName="height" begin="0.5s" dur="1s" values="120;110;100;90;80;70;60;50;40;140;120" calcMode="linear" repeatCount="indefinite" /><animate attributeName="y" begin="0.5s" dur="1s" values="10;15;20;25;30;35;40;45;50;0;10" calcMode="linear" repeatCount="indefinite" /></rect></svg>');
}
.circle{
animation: ani-demo-spin 1s linear infinite;
animation-delay:-0.375s;
}
@keyframes ani-demo-spin {
from { transform: scale(0);}
50% { transform: scale(1)}
to { transform: scale(0)}
}
.circle1{
animation: ani-demo-spin1 1s linear infinite;
animation-delay:-0.25s;
}
@keyframes ani-demo-spin1 {
from { transform: scale(0);}
50% { transform: scale(1)}
to { transform: scale(0)}
}
.circle2{
animation: ani-demo-spin2 1s linear infinite;
animation-delay:-0.125s;
}
@keyframes ani-demo-spin2 {
from { transform: scale(0);}
50% { transform: scale(1)}
to { transform: scale(0)}
}
.circle3{
animation: ani-demo-spin3 1s linear infinite;
animation-delay:0s;
}
@keyframes ani-demo-spin3 {
from { transform: scale(0);}
50% { transform: scale(1)}
to { transform: scale(0)}
}
</style>
......@@ -84,7 +84,7 @@
</div>
</div>
<div class="interview-right">
<Form :label-width="80" onsubmit="return false;">
<Form :label-width="80" onsubmit="return false;" class='emailForm'>
<FormItem label="关键词:" style="margin-top:20px;margin-left:1%">
<Input placeholder="请输入关键词" style="width:80%" v-model="keywords" @keyup.enter.native="Sousuo()"/>
</FormItem>
......@@ -97,9 +97,11 @@
</Select>
</FormItem>
<FormItem label="面试官:" style="margin-top:20px">
<Select style="width:80%;height:20px" placeholder="请选择" :label-in-value='true' @on-change='selectinterviewElement'>
<Option v-for="(item,index) in Interviewer" :key="index" :value="index" >{{item}}</Option>
</Select>
<Select style="width:80%;height:20px" :label-in-value='true' @on-change='selectinterviewElement' filterable remote
:remote-method="remoteMethod"
:loading="loading1" placeholder='请输入面试官全名' clearable>
<Option v-for='(item, index) in options' :key='index' :value='item.name'>{{item.name}}({{item.email}})</Option>
</Select>
</FormItem>
<FormItem label="状态:" class="state2">
<span v-for="(item,index) in state" style="cursor:pointer" :class="{'active2':item.sta==true}" @click="selectElement3(item.Num3,index,item.status3,item.sta)" :key="'state2'+index"> {{item.status3}}</span>
......@@ -165,17 +167,21 @@
<Modal
v-model="modal2"
:closable="false"
width='300px'>
width='400px'>
<h3 style="text-align:center">更改约面信息</h3>
<Form :label-width="80" ref="formInline" :rules="ruleInline" :model="formInline">
<FormItem label="邀约人" style="margin-top:20px" prop="UpdateOWER">
<Input v-model="formInline.UpdateOWER" :maxlength="5"/>
</FormItem>
<FormItem label="面试时间" style="margin-top:20px" prop="UpdateTIME">
<DatePicker type="datetime" style="width:185px" v-model="formInline.UpdateTIME" @on-change="selectTime" placeholder="请选择时间" :options="options3" :editable='false' format="yyyy-MM-dd HH:mm"></DatePicker>
<DatePicker type="datetime" style="width:100%;" v-model="formInline.UpdateTIME" @on-change="selectTime" placeholder="请选择时间" :options="options3" :editable='false' format="yyyy-MM-dd HH:mm"></DatePicker>
</FormItem>
<FormItem label="面试官" style="margin-top:20px" prop="UpdateVIEW">
<Input v-model="formInline.UpdateVIEW" :maxlength="5"/>
<Select v-model ='formInline.UpdateVIEW' filterable style='width:100%;' remote
:remote-method="remoteMethod"
:loading="loading1" placeholder='请输入面试官全名' clearable>
<Option v-for='(item, index) in options' :key='index' :value='item.name'>{{item.name}}({{item.email}})</Option>
</Select>
</FormItem>
</Form>
<div slot='footer' style="text-align:center">
......@@ -227,6 +233,7 @@
<script>
import moment from 'moment'
import {changeinterviewMassage,SerchList,Serchinterviewor,SerchInvitationOwer,NewAddInterview,SInterview,oppenInterview,recodeLIST,changestatus,seedetail,formstatus} from '../../api/interview.server.js'
import {findCompanyEmailByKey} from '../../api/resume.server.js'
export default {
data(){
return{
......@@ -303,7 +310,9 @@ export default {
activeName:'',
Essentialinformation:[],
serchData:[],
serchData2:[]
serchData2:[],
options: [],
loading1: false
}
},
methods: {
......@@ -404,7 +413,7 @@ export default {
})
},
// 查询面试信息
serchListInterview(page) {
serchListInterview(page,status) {
page = typeof(page)=='number'?page:1
this.searchInfo.pageIndex = page
this.pageIndex = page
......@@ -419,7 +428,7 @@ export default {
inviterName:'',
}
}
SerchList(parmars).then(res=>{
SerchList(parmars,status).then(res=>{
if(res.data.success==true){
this.spinShow=false
this.totalSize=res.data.body.totalNumber
......@@ -442,12 +451,8 @@ export default {
})
},
// 面试官查询
Serchlistinterview(){
SerchlistinterviewList(){
Serchinterviewor().then(res=>{
console.log(res)
if (!res.data.succes) {
return
}
this.Interviewer=res.data.body
this.Interviewer.unshift('不限')
})
......@@ -528,7 +533,7 @@ export default {
title: '提示',
desc: '已成功重启流程'
});
this. serchListInterview()
this.serchListInterview()
}
})
this.modal4=false
......@@ -683,10 +688,10 @@ export default {
this.clickIndex1=Tindex
},
selectinterviewElement(e){
if(e.label=='不限'){
if(e.value=='不限'){
this.interviewerName=''
}else{
this.interviewerName=e.label
this.interviewerName=e.value
}
},
selectinterviewElement2(e){
......@@ -706,16 +711,43 @@ export default {
this.pageSize=page
this.Sousuo()
},
remoteMethod: function(query){
if (query !== '') {
this.loading1 = true;
setTimeout(() => {
this.loading1 = false;
let list = []
query = query.split('(')[0]
findCompanyEmailByKey(query).then(res => {
list = res
this.options = list.data.body
// this.options.push({name: '不限', email: ''})
})
}, 500);
} else {
this.options = [];
}
},
},
mounted(){
this.serchListInterview()
this.Serchlistinterview()
this.serchListInterview(null, 'init')
// this.Serchlistinterview()
this.SerchInvitation()
this.SerchlistinterviewList()
}
}
</script>
<style>
.interview .emailForm .ivu-form-item-label{
font-size: 14px
}
.interview .ivu-form-item-content{
font-size: 14px;
}
.interview .ivu-form-item-error-tip{
font-size:12px;
}
.interview{
height: 100%;
width:100%;
......@@ -809,9 +841,13 @@ option:hover{
color: blue;
}
.Education2{
width:380px;
width:85%;
}
.Education2 span{
display: inline-block;
margin-right: 20px;
}
.Education2 :nth-child(2){
/* .Education2 :nth-child(2){
margin-left: 11%
}
.Education2 :nth-child(3){
......@@ -825,11 +861,15 @@ option:hover{
}
.Education2 :nth-child(7){
margin-left: 10%
}
} */
.state2{
width: 380px;
width: 85%;
}
.state2 :nth-child(2){
.state2 span{
display: inline-block;
margin-right: 20px;
}
/* .state2 :nth-child(2){
margin-left: 6%
}
.state2 :nth-child(3){
......@@ -858,5 +898,5 @@ option:hover{
}
.state2 :nth-child(13){
margin-left: 10%
}
} */
</style>
......@@ -2,7 +2,7 @@
<div class="allResume">
<!-- <Spin size="large" fix v-if="spinShow" style="font-size:25px">加载中...</Spin> -->
<div class="allResume-left">
<Form :label-width="80" style="width:88%;margin-left:7%">
<Form :label-width="90" style="width:88%;margin:0 auto;" class='emailForm'>
<FormItem label="关键词:" style="margin-top:20px">
<Input placeholder="请输入关键词" style="width:98%" v-model="keywords" @keyup.enter.native="SouSuo()"/>
</FormItem>
......@@ -39,42 +39,41 @@
<div style="width:47%;height:100%;float:left;background:rgb(61,169,247);margin-left:1%;line-height:80px;text-align:center;color:white;font-size:20px">数据展示</div>
<div style="width:48%;height:100%;float:left;background:rgb(253,85,83);margin-left:3%;line-height:80px;text-align:center;color:white;font-size:20px">提示语</div>
</div> -->
<div style="background:WhiteSmoke;width:100%;height:5%;line-height:5%;margin-bottom:0.5%">
<input type='checkbox' class='input-checkbox' v-model='checked' @click='checkedAll' style="margin-left:10px;cursor:pointer;margin-top:1%">
<span style="margin-left:10px">全选</span>
<Button type="primary" size="small" style="margin-left:2%;width:50px" @click="downloadAll">下载</Button>
<div style="background:WhiteSmoke;width:100%;height:40px;" class='bar'>
<input type='checkbox' class='selectAll' v-model='checked' @click='checkedAll' style="margin-left:10px;cursor:pointer;">
<span style="margin-left:5px;position:relative;">选择<Badge :count="interviewee.length" size='small' :class='["badge",{"badges1":interviewee.length>9, "badges": interviewee.length>99}]'></Badge></span>
<Button type="primary" size="small" style="margin-left:4%;width:50px" @click="downloadAll">下载</Button>
<Button type="primary" size="small" style="margin-left:2%;width:50px" @click="delateAll">删除</Button>
<Button type="primary" size="small" style="float:right;margin-right:20px;margin-top:0.6%" @click="allexport">导出列表</Button>
<Button type="primary" size="small" style="float:right;margin-right:20px;margin-top:0.6%;" @click="sendEmail">发送邮件</Button>
<!-- <Button type="primary" size="small" style="float:right;margin-right:20px;margin-top:0.6%;position:relative;position:relative" @click="transpond">
<Badge :count="interviewee.length" size='small' :class='["badge",{"badges1":interviewee.length>9, "badges": interviewee.length>99}]'></Badge>转发面试官
</Button> -->
<Button type="primary" size="small" style="margin-left:2%;" @click="transpond">
转发面试官
</Button>
<Button type="primary" size="small" class='left' @click="allexport">导出列表</Button>
<Button type="primary" size="small" class='left leftBtn' @click="sendEmail(1)">邀请面试</Button>
</div>
<div style="width:100%;float:left;margin-bottom:40px;overflow-y: auto;height:100%" class="a">
<div style="width:100%;float:left;overflow-y: auto;height:100%" class="content">
<div style="margin:50px auto;width:300px;height:200px;line-height:200px;text-align:center;font-size:20px;color:LightGray" v-show="ajaxData.length==0">暂无数据</div>
<!-- <div style="float:left;margin-left:1%;width:99%;overflow-y: auto;height:600px;margin-bottom:40px"> -->
<div class="Resumecontent" v-for='(item,i) in ajaxData' :key="i" >
<div class="detailResume" id="a" style="" @mousemove="ahove(i,item.isShow)" @mouseleave="movleave(i,item.isShow)" :class="{red:item.isShow}">
<p>
<span style="display:inline-block;height:100%;font-size: 12px;margin-top:5px;overflow:hidden;text-overflow:ellipsis;white-space: nowrap;margin-top:5px">
<input type='checkbox' name='checkboxinput' class='input-checkbox' v-model='checkboxList' :value="item.id" @click="selectInputElement(i,item.id,item.flowStatus,item.STATES, item)" style="margin-left:10px;cursor:pointer">
<div class="detailResume" id="a" style="" @mousemove="ahove(i,item.isShow)" @mouseleave="movleave(i,item.isShow)" :class="{red:item.isShow, grey: i%2!=0}">
<p style='margin-left: 10px;'>
<span style="display:inline-block;height:100%;margin-top:5px;overflow:hidden;text-overflow:ellipsis;white-space: nowrap;margin-top:5px;" class='inputcheck'>
<input type='checkbox' name='checkboxinput' class='input-checkbox' v-model='checkboxList' :value="item.id" @click="selectInputElement(i,item.id,item.flowStatus,item.STATES, item)" style="cursor:pointer">
</span>
<span style="display:inline-block;height:100%;font-size: 12px;margin-top:5px;overflow:hidden;text-overflow:ellipsis;white-space: nowrap;cursor:pointer" @click="Seedetail(item.id)" >{{item.ownerName}} <span v-show="item.ownerMobile !==''">|</span></span>
<span style="display:inline-block;height:100%;margin-top:5px;overflow:hidden;text-overflow:ellipsis;white-space: nowrap;cursor:pointer" @click="Seedetail(item.id)" >{{item.ownerName}} <span v-show="item.ownerMobile !==''">|</span></span>
<span style="display:inline-block;height:100%;font-size: 12px;margin-top:5px;overflow:hidden;text-overflow:ellipsis;white-space: nowrap;cursor:pointer" @click="Seedetail(item.id)"> {{item.ownerMobile}} <span v-show="item.ownerAge !==''">|</span></span>
<span style="display:inline-block;height:100%;font-size: 12px;margin-top:5px;overflow:hidden;text-overflow:ellipsis;white-space: nowrap;cursor:pointer" @click="Seedetail(item.id)"> {{item.ownerAge}}<span v-show="item.ownerSex !==''">|</span></span>
<span style="display:inline-block;height:100%;font-size: 12px;margin-top:5px;overflow:hidden;text-overflow:ellipsis;white-space: nowrap;cursor:pointer" @click="Seedetail(item.id)"> {{item.ownerSex}} <span v-show="item.ownerWorkYears !==''">|</span> </span>
<span style="display:inline-block;height:100%;font-size: 12px;margin-top:5px;overflow:hidden;text-overflow:ellipsis;white-space: nowrap;cursor:pointer" @click="Seedetail(item.id)"> {{item.ownerWorkYears}}<span v-show="item.ownerExpectTitles !==''">|</span></span>
<span style="display:inline-block;height:100%;font-size: 12px;margin-top:5px;overflow:hidden;text-overflow:ellipsis;white-space: nowrap;cursor:pointer" @click="Seedetail(item.id)"> {{item.ownerHighestDegree}} <span v-show="item.ownerExpectTitles !==''">|</span></span>
<span style="display:inline-block;height:100%;margin-top:5px;font-size:12px;width:15%;overflow:hidden;text-overflow:ellipsis;white-space: nowrap;cursor:pointer" @click="Seedetail(item.id)"> {{item.ownerExpectTitles}}</span>
<span style="display:inline-block;height:100%;margin-top:5px;font-size:12px;width:25%;overflow:hidden;text-overflow:ellipsis;white-space: nowrap;cursor:pointer" @click="Seedetail(item.id)"> {{item.ownerExpectTitles}}</span>
<span style="display:inline-block;height:100%;font-size: 12px;width:25%;float:right;text-align:right;margin-right:10px;margin-top:5px">
<span style="margin-right:20px;margin-top:5px" v-if="item.flowStatus=='INTERVIEW_OK'"><Icon type="ios-radio-button-on" style="color:#43CD80" /><span style="margin-left:10px">面试合适</span></span>
<span style="margin-right:20px;margin-top:5px" v-else-if="item.flowStatus=='INTERVIEW_FAIL'"><Icon type="ios-radio-button-on" style="color:red" /><span style="margin-left:10px" >面试淘汰</span></span>
<span style="margin-right:20px;margin-top:5px" v-else-if="item.flowStatus=='TO_RESULT'"><Icon type="ios-radio-button-on" style="color:red" /><span style="margin-left:10px" >面试结果待定</span></span>
<span style="margin-right:20px;margin-top:5px" v-else-if="item.flowStatus=='END'"><Icon type="ios-radio-button-on" style="color:red" /><span style="margin-left:10px" >终止面试</span></span>
<span style="margin-right:20px;margin-top:5px" v-else-if="item.flowStatus=='SEE_FAIL'"><Icon type="ios-radio-button-on" style="color:red" /><span style="margin-left:10px" >约面失败</span></span>
<span style="margin-right:20px;margin-top:5px" v-else-if="item.flowStatus=='NO_ENTRY'"><Icon type="ios-radio-button-on" style="color:red" /><span style="margin-left:10px">未入职</span></span>
<span style="margin-right:20px;margin-top:5px" v-else-if="item.flowStatus=='ARRIVED'"><Icon type="ios-radio-button-on" style="color:#43CD80" /><span style="margin-left:10px">已到达</span></span>
<span style="margin-right:20px;margin-top:5px" v-if="item.flowStatus=='INTERVIEW_OK'" class='status'><Icon type="ios-radio-button-on" style="color:#43CD80" /><span style="margin-left:10px">面试合适</span></span>
<span style="margin-right:20px;margin-top:5px" v-else-if="item.flowStatus=='INTERVIEW_FAIL'" class='status'><Icon type="ios-radio-button-on" style="color:red" /><span style="margin-left:10px" >面试淘汰</span></span>
<span style="margin-right:20px;margin-top:5px" v-else-if="item.flowStatus=='TO_RESULT'" class='status'><Icon type="ios-radio-button-on" style="color:red" /><span style="margin-left:10px" >面试结果待定</span></span>
<span style="margin-right:20px;margin-top:5px" v-else-if="item.flowStatus=='END'" class='status'><Icon type="ios-radio-button-on" style="color:red" /><span style="margin-left:10px" >终止面试</span></span>
<span style="margin-right:20px;margin-top:5px" v-else-if="item.flowStatus=='SEE_FAIL'" class='status'><Icon type="ios-radio-button-on" style="color:red" /><span style="margin-left:10px" >约面失败</span></span>
<span style="margin-right:20px;margin-top:5px" v-else-if="item.flowStatus=='NO_ENTRY'" class='status'><Icon type="ios-radio-button-on" style="color:red" /><span style="margin-left:10px">未入职</span></span>
<span style="margin-right:20px;margin-top:5px" v-else-if="item.flowStatus=='ARRIVED'" class='status'><Icon type="ios-radio-button-on" style="color:#43CD80" /><span style="margin-left:10px">已到达</span></span>
<span style="margin-right:10px;margin-top:5px" v-else-if="item.flowStatus=='TO_SEE'">
<span style="cursor:pointer" >
<select name="3" id="3" @change="selectFn2($event,item.id,item.flowStatus)">
......@@ -85,10 +84,10 @@
</select>
</span>
</span>
<span style="margin-right:20px;margin-top:5px" v-else-if="item.flowStatus=='HAS_SEE'"><Icon type="ios-radio-button-on" style="color:#43CD80" /><span style="margin-left:10px;" >已邀约</span></span>
<span style="margin-right:20px;margin-top:5px" v-else-if="item.flowStatus=='HAS_SEE'" class='status'><Icon type="ios-radio-button-on" style="color:#43CD80" /><span style="margin-left:10px;" >已邀约</span></span>
<span style="margin-right:10px;margin-top:5px" v-else-if="item.flowStatus=='OPTION'">
<span style="cursor:pointer">
<select name="4" id="4" @change="selectFn3($event,item.id,item.flowStatus)">
<select name="4" id="4" @change="selectFn3($event,item.id,item.flowStatus)" class='status'>
<option value="1">备选</option>
<option value="2">邀请面试</option>
<option value="3">PASS</option>
......@@ -96,13 +95,13 @@
</select>
</span>
</span>
<span style="margin-right:20px;margin-top:5px" v-else-if="item.flowStatus=='TO_SENT_OFFER'"><Icon type="ios-radio-button-on" style="color:#43CD80;" /><span style="margin-left:10px" >待Offer</span></span>
<span style="margin-right:20px;margin-top:5px" v-else-if="item.flowStatus=='HAS_SENT_OFFER'"><Icon type="ios-radio-button-on" style="color:#43CD80" /><span style="margin-left:10px">已发Offer</span></span>
<span style="margin-right:20px;margin-top:5px" v-else-if="item.flowStatus=='TO_ENTRY'"><Icon type="ios-radio-button-on" style="color:#43CD80" /><span style="margin-left:10px" >待入职</span></span>
<span style="margin-right:20px;margin-top:5px" v-else-if="item.flowStatus=='HAS_ENTRY'"><Icon type="ios-radio-button-on" style="color:#43CD80" /><span style="margin-left:10px">已入职</span></span>
<span style="margin-right:20px;margin-top:5px" v-else-if="item.flowStatus=='TO_SENT_OFFER'" class='status'><Icon type="ios-radio-button-on" style="color:#43CD80;" /><span style="margin-left:10px" >待Offer</span></span>
<span style="margin-right:20px;margin-top:5px" v-else-if="item.flowStatus=='HAS_SENT_OFFER'" class='status'><Icon type="ios-radio-button-on" style="color:#43CD80" /><span style="margin-left:10px">已发Offer</span></span>
<span style="margin-right:20px;margin-top:5px" v-else-if="item.flowStatus=='TO_ENTRY'" class='status'><Icon type="ios-radio-button-on" style="color:#43CD80" /><span style="margin-left:10px" >待入职</span></span>
<span style="margin-right:20px;margin-top:5px" v-else-if="item.flowStatus=='HAS_ENTRY'" class='status'><Icon type="ios-radio-button-on" style="color:#43CD80" /><span style="margin-left:10px">已入职</span></span>
<span style="margin-right:10px;margin-top:5px" v-else-if="item.flowStatus=='PASS'">
<span style="cursor:pointer" >
<select name="2" id="2" @change="selectFn4($event,item.id,item.flowStatus)">
<select name="2" id="2" @change="selectFn4($event,item.id,item.flowStatus)" class='status'>
<option value="1">PASS</option>
<option value="2">邀请面试</option>
<option value="3">备选</option>
......@@ -110,39 +109,39 @@
</select>
</span>
</span>
<select name="1" id="a" @change="selectFn1($event,item.id,item.flowStatus)" v-else-if="item.flowStatus=='TO_DO'" style="margin-right:10px;cursor:pointer">
<select name="1" id="a" @change="selectFn1($event,item.id,item.flowStatus)" v-else-if="item.flowStatus=='TO_DO'" style="margin-right:10px;cursor:pointer" class='status'>
<option value="1">待处理</option>
<option value="2">pass</option>
<option value="3">邀请面试</option>
<option value="4">备选</option>
</select>
<span><Icon type="md-download" @click="downloadONE(item.id)" style="font-size:15px;cursor:pointer;color:#0092FF"/></span>
<span ><Icon type="md-trash" v-if="item.flowStatus=='TO_SEE'" @click="undelate" style="color:#b5b5b5;font-size:15px;cursor:pointer"/></span>
<span ><Icon type="md-trash" v-if="item.flowStatus=='HAS_SEE'" @click="undelate" style="color:#b5b5b5;font-size:15px;cursor:pointer"/></span>
<span ><Icon type="md-trash" v-if="item.flowStatus=='SEE_FAIL'" @click="undelate" style="color:#b5b5b5;font-size:15px;cursor:pointer"/></span>
<span ><Icon type="md-trash" v-if="item.flowStatus=='INTERVIEW_FAIL'" @click="undelate" style="color:#b5b5b5;font-size:15px;cursor:pointer"/></span>
<span ><Icon type="md-trash" v-if="item.flowStatus=='TO_SENT_OFFER'" @click="undelate" style="color:#b5b5b5;font-size:15px;cursor:pointer"/></span>
<span ><Icon type="md-trash" v-if="item.flowStatus=='TO_ENTRY'" @click="undelate" style="color:#b5b5b5;font-size:15px;cursor:pointer"/></span>
<span ><Icon type="md-trash" v-if="item.flowStatus=='HAS_ENTRY'" @click="undelate" style="color:#b5b5b5;font-size:15px;cursor:pointer"/></span>
<span ><Icon type="md-trash" v-if="item.flowStatus=='ARRIVED'" @click="undelate" style="color:#b5b5b5;font-size:15px;cursor:pointer"/></span>
<span ><Icon type="md-trash" v-if="item.flowStatus=='NO_ENTRY'" @click="undelate" style="color:#b5b5b5;font-size:15px;cursor:pointer"/></span>
<span ><Icon type="md-trash" v-if="item.flowStatus=='END'" @click="undelate" style="color:#b5b5b5;font-size:15px;cursor:pointer"/></span>
<span ><Icon type="md-trash" v-if="item.flowStatus=='HAS_SENT_OFFER'" @click="undelate" style="color:#b5b5b5;font-size:15px;cursor:pointer"/></span>
<span ><Icon type="md-trash" v-if="item.flowStatus=='PASS'" @click="delateR(item.id)" style="font-size:15px;cursor:pointer;color:rgb(242, 93, 87);"/></span>
<span ><Icon type="md-trash" v-if="item.flowStatus=='OPTION'" @click="delateR(item.id)" style="font-size:15px;cursor:pointer;color:rgb(242, 93, 87);"/></span>
<span ><Icon type="md-trash" v-if="item.flowStatus=='TO_DO'" @click="delateR(item.id)" style="font-size:15px;cursor:pointer;color:rgb(242, 93, 87);"/></span>
<span @click="RecordSEE(item.id,item.ownerName)" style="color:#0092FF;cursor:pointer">记录</span>
<span class='record'><Icon type="md-download" @click="downloadONE(item.id)" style="font-size:15px;cursor:pointer;color:#0092FF"/></span>
<span class='record'><Icon type="md-trash" v-if="item.flowStatus=='TO_SEE'" @click="undelate" style="color:#b5b5b5;font-size:15px;cursor:pointer"/></span>
<span class='record'><Icon type="md-trash" v-if="item.flowStatus=='HAS_SEE'" @click="undelate" style="color:#b5b5b5;font-size:15px;cursor:pointer"/></span>
<span class='record'><Icon type="md-trash" v-if="item.flowStatus=='SEE_FAIL'" @click="undelate" style="color:#b5b5b5;font-size:15px;cursor:pointer"/></span>
<span class='record'><Icon type="md-trash" v-if="item.flowStatus=='INTERVIEW_FAIL'" @click="undelate" style="color:#b5b5b5;font-size:15px;cursor:pointer"/></span>
<span class='record'><Icon type="md-trash" v-if="item.flowStatus=='TO_SENT_OFFER'" @click="undelate" style="color:#b5b5b5;font-size:15px;cursor:pointer"/></span>
<span class='record'><Icon type="md-trash" v-if="item.flowStatus=='TO_ENTRY'" @click="undelate" style="color:#b5b5b5;font-size:15px;cursor:pointer"/></span>
<span class='record'><Icon type="md-trash" v-if="item.flowStatus=='HAS_ENTRY'" @click="undelate" style="color:#b5b5b5;font-size:15px;cursor:pointer"/></span>
<span class='record'><Icon type="md-trash" v-if="item.flowStatus=='ARRIVED'" @click="undelate" style="color:#b5b5b5;font-size:15px;cursor:pointer"/></span>
<span class='record'><Icon type="md-trash" v-if="item.flowStatus=='NO_ENTRY'" @click="undelate" style="color:#b5b5b5;font-size:15px;cursor:pointer"/></span>
<span class='record'><Icon type="md-trash" v-if="item.flowStatus=='END'" @click="undelate" style="color:#b5b5b5;font-size:15px;cursor:pointer"/></span>
<span class='record'><Icon type="md-trash" v-if="item.flowStatus=='HAS_SENT_OFFER'" @click="undelate" style="color:#b5b5b5;font-size:15px;cursor:pointer"/></span>
<span class='record'><Icon type="md-trash" v-if="item.flowStatus=='PASS'" @click="delateR(item.id)" style="font-size:15px;cursor:pointer;color:rgb(242, 93, 87);"/></span>
<span class='record'><Icon type="md-trash" v-if="item.flowStatus=='OPTION'" @click="delateR(item.id)" style="font-size:15px;cursor:pointer;color:rgb(242, 93, 87);"/></span>
<span class='record'><Icon type="md-trash" v-if="item.flowStatus=='TO_DO'" @click="delateR(item.id)" style="font-size:15px;cursor:pointer;color:rgb(242, 93, 87);"/></span>
<span class='recordtext' @click="RecordSEE(item.id,item.ownerName)" style="color:#0092FF;cursor:pointer">记录</span>
</span>
</p>
<p style="margin-top:5px;color:Greys">
<span style="display:inline-block;font-size: 12px;margin-left:25px;color:orange" v-show="item.hasForward=='1'" >已转</span>
<span style="display:inline-block;font-size: 12px;margin-left:25px;color:Grey" v-if="item.srcSite!==''" v-show="item.hasForward==null">{{item.deliveryTime}}投递 |</span>
<span style="display:inline-block;font-size: 12px;margin-left:25px;color:Grey" v-if="item.srcSite==''" v-show="item.hasForward==null">{{item.deliveryTime}}上传 <span v-show="item.optSource!==''"> |</span></span>
<span style="display:inline-block;font-size: 12px;margin-left:5px;color:Grey" v-if="item.srcSite!==''" v-show="item.hasForward!==null">{{item.deliveryTime}}投递 |</span>
<span style="display:inline-block;font-size: 12px;margin-left:5px;color:Grey" v-if="item.srcSite==''" v-show="item.hasForward!==null">{{item.deliveryTime}}上传 <span v-show="item.optSource!==''"> |</span></span>
<p style="margin-top:5px;color:Greys;padding-left:10px;">
<span style="display:inline-block;font-size: 12px;color:orange" v-show="item.hasForward=='1'" class='transmit' >已转</span>
<span style="display:inline-block;font-size: 12px;margin-left:20px;color:Grey" v-if="item.srcSite!==''" v-show="item.hasForward==null">{{item.deliveryTime}}投递 |</span>
<span style="display:inline-block;font-size: 12px;color:Grey;margin-left:20px" v-if="item.srcSite==''" v-show="item.hasForward==null">{{item.deliveryTime}}上传 <span v-show="item.optSource!==''"> |</span></span>
<span style="display:inline-block;font-size: 12px;margin-left:-2px;color:Grey" v-if="item.srcSite!==''" v-show="item.hasForward!==null">{{item.deliveryTime}}投递 |</span>
<span style="display:inline-block;font-size: 12px;color:Grey;margin-left:-2px" v-if="item.srcSite==''" v-show="item.hasForward!==null">{{item.deliveryTime}}上传 <span v-show="item.optSource!==''"> |</span></span>
<span style="display:inline-block;font-size: 12px;margin-left:3px;color:Grey">{{item.optSource}}<span v-show="item.srcSite!==''"> |</span></span>
<span style="display:inline-block;font-size: 12px;margin-left:3px;color:Grey">{{item.srcSite}}</span>
<span style="display:inline-block;font-size: 12px;width:30%;float:right;text-align:right;margin-right:10px;color:Grey">
<span style="display:inline-block;font-size: 12px;float:right;text-align:right;margin-right:10px;color:Grey">
<span>{{item.modifyTime}}</span>
<span>最后操作人:{{item.d}}</span>
</span>
......@@ -150,9 +149,9 @@
</div>
</div>
</div>
<div class="pageBottom" style="width:59%;background:rgba(241,241,241,1);text-align:center;position:fixed;bottom:0;height:40px">
<Page :total="totalSize" show-elevator show-total @on-change="pageChange" @on-page-size-change="pageSizeChange" :current='pageIndex' :page-size='pageSize' style="text-align:center;margin-top:4px"></Page>
</div>
<div class="pageBottom">
<Page :total="totalSize" show-elevator show-total @on-change="pageChange" @on-page-size-change="pageSizeChange" :current='pageIndex' :page-size='pageSize' style="text-align:center;margin-top:4px"></Page>
</div>
</div>
</div>
<!-- 操作记录弹出框 -->
......@@ -297,50 +296,52 @@
v-model="emailMOdal"
width='1000px'
:mask-closable='false'
:closable='false'>
:closable='false'
:styles="{top:'50px'}">
<div >
<h2 style="text-align:center;color:black" v-show="this.isShowAll==false">发送邮件</h2>
<h2 style="text-align:center;color:black" v-show="this.isShowAll==true">新建面试</h2>
<h3 style="text-align:center;color:black" v-show="this.isShowAll==true"> <span>更改为<span style="color:blue">“新建面试”</span>后,你需要从<span style="color:blue">”面试管理“</span>中对该候选人进行后续的操作。</span></h3>
<h3 style="text-align:center;color:black" v-show="this.isShowAll==true"> <span>新建面试后,你需要从<span style="color:#0092ff">“面试管理”</span>中对该候选人进行后续的操作。</span></h3>
</div>
<div class="emailModal-title">
<div class="emailModalTitle-left">
<p>
<Form :label-width="70" :model="emailInline" label-position="left" style="margin-left:5%" ref="emailInline" :rules="ruleInline" class="emailForm">
<Form :label-width="70" :model="emailInline" label-position="left" style="margin-left:5%" ref="emailInline" :rules="emailruleInline" class="emailForm">
<FormItem label="选择模板" style="margin-top:20px" prop='moo'>
<Select style="width:95%" @on-change='getEmailContentValue' v-model="emailInline.moo" >
<Option v-for="(item,index) in emailInline.modalArr" :key="index" :value="item.templateCode">{{item.templateName}}</Option>
</Select><br>
<!-- <span v-show="emailMassage==true">你尚未选择简历,请先选择简历</span> -->
</FormItem>
<FormItem label="收件人" style="margin-top:20px" :show-massage='false'>
<Input style="width:95%" v-model="emailInline.receiveEmail" @on-blur='receiveEmail'/>
<span style="position: absolute;left:0;top:30px;color:gray">输入多个邮箱地址以英文”;“分隔</span>
<FormItem label="收件人" style="margin-top:20px" prop='receiveEmail'>
<Input style="width:95%" v-model="emailInline.receiveEmail" @on-focus='getfocus("emailInline","receiveEmail")'/>
<span style="position: absolute;left:0;top:30px;color:gray;font-size:12px;" v-show='!tip'>{{tipInfo}}</span>
</FormItem>
<FormItem label="抄送" style="margin-top:20px">
<Input style="width:95%" v-model="emailInline.copyname" @on-blur='copyname'/>
<FormItem label="抄送" style="margin-top:20px" prop='copyname'>
<Input style="width:95%" v-model="emailInline.copyname" @on-focus='getfocus("emailInline","copyname")'/>
</FormItem>
<FormItem label="主题" style="margin-top:20px">
<Input style="width:95%" v-model="emailInline.theme" @on-blur='theme'/>
<FormItem label="主题" style="margin-top:20px" prop='theme'>
<Input style="width:95%" v-model="emailInline.theme" @on-focus='getfocus("emailInline","theme")'/>
</FormItem>
</Form>
</p>
</div>
<div class="emailModalTitle-right" v-show="interviewIsShow==true">
<h3 style="text-align:center;margin-top:20px">请输入约面信息</h3>
<Form :label-width="75" ref="formInline" :rules="ruleInline" :model="formInline" style="margin-top:35px" label-position="left">
<Form :label-width="80" ref="formInline" :rules="ruleInline" :model="formInline" style="margin-top:35px" label-position="left" class="emailForm">
<FormItem label="邀约人" style="margin-top:20px" prop="UpdateOWER">
<Input v-model="formInline.UpdateOWER" style="width:100%" :maxlength="5" @on-blur='UpdateOWER'/>
<Input v-model="formInline.UpdateOWER" style="width:100%" :maxlength="5" @on-focus='getfocus("formInline", "UpdateOWER")'/>
</FormItem>
<FormItem label="面试时间" style="margin-top:20px" prop="UpdateTIME">
<DatePicker type="datetime" style="width:100%" v-model="formInline.UpdateTIME" format="yyyy-MM-dd HH:mm" @on-change="changeTime" :options="options3" :editable='false' @on-blur='UpdateTIME'></DatePicker>
<DatePicker type="datetime" style="width:100%" v-model="formInline.UpdateTIME" format="yyyy-MM-dd HH:mm" @on-change="changeTime" :options="options3" :editable='false' @on-open-change='getfocus("formInline", "UpdateTIME", $event)'></DatePicker>
</FormItem>
<FormItem label="面试官" style="margin-top:20px" prop='UpdateVIEW'>
<Input v-model="formInline.UpdateVIEW" style="width:100%" :maxlength="5" @on-blur='UpdateVIEW'/>
</FormItem>
<FormItem label="" prop='sendWeixin'>
<Checkbox v-model="formInline.sendWeixin"><span style="margin-left:10px">微信通知面试官</span></Checkbox>
</FormItem>
<Select v-model ='formInline.UpdateVIEW' filterable style='width:100%;' remote
:remote-method="remoteMethod"
:loading="loading1" placeholder='请输入面试官全名' clearable @on-open-change='getfocus("formInline", "UpdateVIEW", $event)' ref='setQuery' :label='formInline.UpdateVIEW'>
<Option v-for='(item, index) in options' :key='index' :value='item.name'>{{item.name}}({{item.email}})</Option>
</Select>
</FormItem>
</Form>
</div>
......@@ -365,10 +366,11 @@
<span><Icon type="md-close" @click="delateFile(index)" style="font-size:16px;float:right;margin-right:80px" /></span>
</p>
</div>
<div slot='footer' style="text-align:center" class="Ubt">
<div slot='footer' style="text-align:center;position:relative;" class="Ubt">
<Button type='primary' @click='emailModalPush'>取消</Button>
<Button type='primary' @click='modal10=true' v-show="this.isShowAll==false" :disabled="!isDisable">发送</Button>
<Button type='primary' @click='modal10=true' v-show="this.isShowAll==true" :disabled="!isDisable">添加并发送</Button>
<Button type='primary' @click='submit' v-show="this.isShowAll==false">发送</Button>
<Button type='primary' @click='submit' v-show="this.isShowAll==true">添加并发送</Button>
<Checkbox v-model="formInline.sendWeixin" class='wechat'><span>微信通知面试官</span></Checkbox>
</div>
</Modal>
<Modal
......@@ -381,7 +383,7 @@
</div>
<div slot='footer' style="text-align:center">
<Button type='primary' @click='modal10=false'>取消</Button>
<Button type='primary' @click="confireSendEmail" :disabled="!isDisable">确定</Button>
<Button type='primary' @click="confireSendEmail">确定</Button>
</div>
</Modal>
<!-- 转发邮件 -->
......@@ -418,57 +420,63 @@
<Button type='primary' @click="sendNotice" >发送</Button>
</div>
</Modal>
<!-- 发送失败再次发送 -->
<Modal
v-model="modal11"
width='350px'
:closable='false'>
<div >
<h2 style="text-align: center;color:black">提示</h2>
<p style="text-align:center;margin-top:10px;font-size: 14px;text-align:left;">{{errorInfo}}</p>
</div>
<div slot='footer' style="text-align:center">
<Button type='primary' @click='cancelSubmit'>取消</Button>
<Button type='primary' @click="sendFail">确定</Button>
</div>
</Modal>
</div>
</template>
<script>
import moment from 'moment'
import { serchList,downloadone,sousuoList,seedetail,PASS,OPTION,deleteREsume,downloadOne,exportLIST,recodeLIST,addinterview,updatastatus,TODORes,sendEmail,getEmailMoo,getEmailContent,uploadimage, findCompanyEmailByKey,forwardResume} from '../../api/resume.server'
import {Serchinterviewor} from '../../api/interview.server.js'
import qs from 'qs'
import {
sapi
} from '../../config'
import{_debounce,_throttle} from '../../service/util.js'
import{_debounce,_throttle,emailValidata, emailRule, vidte, validator} from '../../service/util.js'
import localStorage from '../../service/localstorage.service'
import Router from 'vue-router';
import ckeditor from '../../components/ckeditor'
import {mapState} from 'vuex'
// import ckeditor from '../../../static/ckeditor'
export default {
data () {
const vidte=(rule,value,callback)=>{
if(this.emailMassage==true){
callback(new Error('你尚未选择简历,请先选择简历'))
}
else if(this.allEmailVilitor==true){
callback(new Error('不能选择多份简历,请选择单份简历'))
}
else{
callback ()
}
}
const validator = (rule, value, callback) => {
if (!value)this.$Notice.warning({title: '提示',desc: '请输入您要通知的面试官'})
callback()
}
return {
modal11: false,
errorInfo: '',
interviewee: [],
interviewerNameList: [],
tip: false,
tipInfo: '输入多个邮箱地址以英文”;“分隔',
sad:'',
loading1: false,
options: [],
editorObject: {type: '', value: ''},
ruleInline: {
UpdateOWER: [
{ required: true, message: '邀约人不能为空', trigger: 'blur' }
{ required: true, message: '邀约人不能为空', trigger: 'blur',validator: emailValidata.bind(this)}
],
UpdateTIME: [
{ required: true, message: '面试时间不能为空', trigger: 'date' }
{ required: true, message: '面试时间不能为空', trigger: 'change', type:'date', validator: emailValidata.bind(this)}
],
UpdateVIEW: [
{ required: true,message: '面试官不能为空', trigger: 'blur' }
],
moo:[
{required: false, validator: vidte, trigger: 'change'},
],
{ required: true,message: '面试官不能为空', trigger: 'change', validator: emailValidata.bind(this), type: String}
]
},
emailruleInline: {
receiveEmail: [{required: true, trigger: 'blur', pattern: emailRule, validator: emailValidata.bind(this)}],
theme: [{required: true, trigger: 'blur',message: '主题不能为空', validator: emailValidata.bind(this)}],
copyname: [{required: false, trigger: 'blur', pattern: emailRule, validator: emailValidata.bind(this), empty: true}]
},
formInline:{
UpdateOWER:'',
......@@ -519,7 +527,7 @@ import {mapState} from 'vuex'
interviewerName: ''
},
transpondRule: {
interviewerName: [{required: true, trigger: 'blur', validator: validator}]
interviewerName: [{required: true, trigger: 'blur', validator: validator.bind(this)}]
},
interviewerList: [{name: 'test', value: '1'}],
modal10:false,
......@@ -674,17 +682,15 @@ import {mapState} from 'vuex'
selectFn1(e,SID,itemsta) {
this.toseeid=SID
this.emailId=SID
this.emailIdArr.push(SID)
this.emailIdArr=[]
this.emailIdArr.push(SID)
this.isShowTwo=true
this.ITEMSTA=itemsta
// 准备约面
if(e.target.value==3){
getEmailMoo().then(res=>{
this.emailInline.modalArr.push(res.data.body[0])
})
this.emailMOdal=true
this.emailFlowStatus='TO_SEE'
this.isShowTwo=true
this.sendEmail()
}
// 简历PASS
if(e.target.value==2){
......@@ -742,7 +748,7 @@ import {mapState} from 'vuex'
nextStep(){
this.beforeBtu=true
this.modal2=false
this.emailMOdal=true
this.sendEmail()
},
selectFn2(e,SID,itemsta) {
this.ITEMSTA=itemsta
......@@ -750,12 +756,9 @@ import {mapState} from 'vuex'
this.toseeid=SID
// 准备约面
if(e.target.value==1){
getEmailMoo().then(res=>{
this.emailInline.modalArr.push(res.data.body[0])
})
this.emailMOdal=true
this.emailFlowStatus='TO_SEE'
this.isShowTwo=true
this.emailFlowStatus='TO_SEE'
this.isShowTwo=true
this.sendEmail()
}
// 简历PASS
if(e.target.value==3){
......@@ -799,12 +802,10 @@ import {mapState} from 'vuex'
this.toseeid=SID
// 准备约面
if(e.target.value==2){
getEmailMoo().then(res=>{
this.emailInline.modalArr.push(res.data.body[0])
})
this.emailMOdal=true
this.emailFlowStatus='TO_SEE'
this.isShowTwo=true
this.sendEmail()
}
// 简历PASS
if(e.target.value==3){
......@@ -848,12 +849,10 @@ import {mapState} from 'vuex'
this.emailId=SID
// 准备约面
if(e.target.value==2){
getEmailMoo().then(res=>{
this.emailInline.modalArr.push(res.data.body[0])
})
this.emailMOdal=true
this.emailFlowStatus='TO_SEE'
this.isShowTwo=true
this.sendEmail()
}
// 简历PASS
if(e.target.value==1){
......@@ -988,7 +987,7 @@ import {mapState} from 'vuex'
selectElement4(){
},
//搜索
SouSuo(page){
SouSuo(page, status){
page = typeof(page)=='number'?page:1
this.searchInfo.pageIndex = page
this.pageIndex = page
......@@ -1016,7 +1015,7 @@ import {mapState} from 'vuex'
}
this.ajaxData=[]
this.checkboxList = []
sousuoList(parmars).then(res=>{
sousuoList(parmars,status).then(res=>{
let Ishow=res.data.items
if(res.data.success==true){
this.checkboxList=[]
......@@ -1086,6 +1085,7 @@ import {mapState} from 'vuex'
// 选择input元素
selectInputElement(index,doID,doStatus,sss, item){
this.DOWNLOAD=doID
this.emailIdArr = []
sss=!sss
this.ajaxData[index].STATES=sss
Array.prototype.indexOf = function(val) {
......@@ -1154,7 +1154,6 @@ import {mapState} from 'vuex'
},
// 删除单条简历
delateONE(){
console.log(this.delateARRALL3)
deleteREsume(this.delateARRALL3).then(res=>{
if(res.data.success==true){
this.delateARRALL3.map(item => {
......@@ -1167,6 +1166,27 @@ import {mapState} from 'vuex'
},
changeTime(b){
this.UpdateTIME=b
if (!b){
this.editorObject = {
type: this.temp,
value: this.emailInline.templateContent
}
this.isDisable = false
return
} else {
this.isDisable = true
}
var reg = /<span id="email_seeTime"><span>/g
var time = b.split('-')
var year = time[0]
var mon = time[1]
var day = time[2].split(' ')[0]
var time = time[2].split(' ')[1]
var content = `<span id="email_seeTime">${year}${mon}${day}${time}<span>`
this.editorObject = {
type: this.temp,
value: this.emailInline.templateContent.replace(reg, content)
}
},
// 不可删除状态下点击
undelate(){
......@@ -1310,55 +1330,78 @@ import {mapState} from 'vuex'
this.ajaxData[index].isShow=false
},
// 发送邮件
sendEmail(){
sendEmail(type){
if(this.checkboxList.length == 0&&type) {
this.$Notice.error({
title: '提示',
desc: '你尚未选择简历,请先选择简历'
})
return
}
if (this.checkboxList.length > 1&&type){
this.$Notice.error({
title: '提示',
desc: ' 不能选择多份简历,请选择单份简历'
})
return
}
this.emailInline.modalArr=[]
this.$refs.emailInline.resetFields()
this.$refs.formInline.resetFields()
this.emailInline.moo = 'TEMP_0001'
this.emailMOdal=true
getEmailMoo().then(res=>{
this.emailInline.modalArr=res.data.body
})
this.getEmailContentValue(this.emailInline.moo)
},
getEmailContentValue(value){
if (!value){
return
}
this.isDisable=true
this.temp=value
if(this.isShowTwo==true){
this.isShowAll=true
this.interviewIsShow=true
}else{
if(this.emailIdArr.length>1&&(value=='TEMP_0001'||value=='TEMP_0005'||value=='TEMP_0006')){
this.allEmailVilitor=true
}else {
this.allEmailVilitor=false
if(this.temp=='TEMP_0001'){
this.isShowAll=true
}else{
this.isShowAll=false
}
}
if(value=='TEMP_0001'){
this.interviewIsShow=true
this.isShowAll=true
}else{
this.interviewIsShow=false
this.isShowAll=false
}
this.emailId=this.emailIdArr.length==0?'':this.emailIdArr[0]
if(value=='TEMP_0001' &&this.emailId==''){
this.interviewBtu=true
this.isShowAll=true
this.emailMassage=true
}
else if(value=='TEMP_0005' && this.emailId==''){
this.emailMassage=true
}
else if(value=='TEMP_0006' && this.emailId==''){
this.emailMassage=true
if(this.emailIdArr.length>1&&(value=='TEMP_0001'||value=='TEMP_0005'||value=='TEMP_0006')){
this.allEmailVilitor=true
}else {
this.allEmailVilitor=false
if(this.temp=='TEMP_0001'){
this.isShowAll=true
}else{
this.isShowAll=false
}
}
if(value=='TEMP_0001'){
this.interviewIsShow=true
this.isShowAll=true
}else{
this.interviewIsShow=false
this.isShowAll=false
}
this.emailId=this.emailIdArr.length==0?'':this.emailIdArr[0]
if(value=='TEMP_0001' &&this.emailId==''){
this.interviewBtu=true
this.isShowAll=true
this.emailMassage=true
}
else if(value=='TEMP_0005' && this.emailId==''){
this.emailMassage=true
}
else if(value=='TEMP_0006' && this.emailId==''){
this.emailMassage=true
}
else{
if(value=='TEMP_0001'){this.isShowAll=true}else{this.isShowAll=false}
this.interviewBtu=false
this.emailMassage=false
}
}
else{
if(value=='TEMP_0001'){this.isShowAll=true}else{this.isShowAll=false}
this.interviewBtu=false
this.emailMassage=false
}}
this.emailCode=value
let params={
resumeId:this.emailId==''?'':this.emailId,
......@@ -1373,9 +1416,10 @@ import {mapState} from 'vuex'
value: this.emailInline.templateContent || ''
}
if(res.data.body&&res.data.body.resumeInterviewVO){
this.formInline.UpdateOWER=res.data.body.resumeInterviewVO.interviewerName
this.formInline.UpdateVIEW=res.data.body.resumeInterviewVO.inviterName
this.formInline.UpdateOWER=res.data.body.resumeInterviewVO.inviterName
this.formInline.UpdateVIEW=res.data.body.resumeInterviewVO.interviewerName
this.formInline.UpdateTIME=res.data.body.resumeInterviewVO.seeTime
this.changeTime(this.formInline.UpdateTIME)
}else{
this.formInline.UpdateOWER=''
this.formInline.UpdateVIEW=''
......@@ -1383,7 +1427,6 @@ import {mapState} from 'vuex'
}
})
console.log("+++++++++++++++")
},
uploadFile(){
// this.uploadFileList=[]
......@@ -1407,6 +1450,8 @@ import {mapState} from 'vuex'
return false
},
emailModalPush(){
this.$refs.emailInline.resetFields()
this.$refs.formInline.resetFields()
this.emailInline.modalArr=[]
this.emailInline.theme=''
this.emailInline.receiveEmail=''
......@@ -1426,7 +1471,7 @@ import {mapState} from 'vuex'
this.isShowTwo=false
this.isLimitSize=false
this.uploadFileList=[]
this.SouSuo(this.pageT)
this.clearInterviewee()
},
getEditorValue(value){ // 调编辑器组件方法获取数据
return this.$refs.editor.getValue()
......@@ -1437,9 +1482,9 @@ import {mapState} from 'vuex'
},
// 确认发送邮件
confireSendEmail(){
this.sad = this.getEditorValue()
if(this.sad==''){
this.$Notice.error({
this.sad = this.getEditorValue()
if(this.sad==''){
this.$Notice.error({
title: '提示',
desc: '请填写完整的信息'
});
......@@ -1488,13 +1533,8 @@ import {mapState} from 'vuex'
});
return
}
if((this.emailIdArr.length>1)&&(this.temp=='TEMP_0001'|| this.temp=='TEMP_0005'|| this.temp=='TEMP_0006')){
this.$Notice.error({
title: '提示',
desc: '不能选择多份简历,请选择单份简历'
});
return
}
this.attachFileList=this.uploadFileList.length==0?'':this.uploadFileList
this.flowStatusTT=this.emailFlowStatus==''?'':'TO_SEE'
this.UpdateTIMETwo=this.formInline.UpdateTIME==''?'':this.formInline.UpdateTIME
......@@ -1516,6 +1556,8 @@ import {mapState} from 'vuex'
formData.append('resumeInterviewVO.resumeId',this.emailId)
formData.append('resumeInterviewVO.inviterName',this.formInline.UpdateOWER==''?'':this.formInline.UpdateOWER)
formData.append('resumeInterviewVO.interviewerName',this.formInline.UpdateVIEW==''?'':this.formInline.UpdateVIEW)
let info = this.options.find(item => item.name == this.formInline.UpdateVIEW)
formData.append('resumeInterviewVO.email',(info&&info.email) || '')
formData.append('sendWeixin',this.formInline.sendWeixin==true ? 1 : 0)
formData.append('resumeInterviewVO.seeTime',moment( this.UpdateTIMETwo).format('YYYY/MM/DD HH:mm'))
formData.append(' flowStatus',this.flowStatusTT)
......@@ -1523,10 +1565,12 @@ import {mapState} from 'vuex'
sendEmail(formData).then(res=>{
this.isDisable=true
if(res.data.success==true){
this.$Notice.success({
setTimeout(() => {
this.$Notice.success({
title: '提示',
desc: '发送邮件成功'
});
})
}, 500)
this.emailMOdal=false
this.modal10=false
this.emailInline.modalArr=[]
......@@ -1551,33 +1595,9 @@ import {mapState} from 'vuex'
this.SouSuo(this.pageT)
}
if(res.data.success==false){
this.$Notice.error({
title: '提示',
desc: '发送邮件失败'
});
this.emailMOdal=false
this.modal10=false
// this.isDisable=true
this.emailInline.modalArr=[]
this.emailInline.theme=''
this.emailInline.receiveEmail=''
this.emailInline.templateContent=''
this.sad=''
this.fileList=[]
this.emailInline.moo=''
this.emailMOdal=false
this.emailMassage=false
this.emailIdArr=[]
this.emailFlowStatus=''
this.formInline.UpdateOWER=''
this.formInline.UpdateVIEW=''
this.formInline.UpdateTIME=''
this.formInline.sendWeixin=true
this.emailInline.copyname=''
this.isShowTwo=false
this.uploadFileList=[]
this.clearInterviewee()
this.SouSuo(this.pageT)
this.modal10 = false
this.modal11 = true
this.errorInfo = res.data.body.message
}
})
}else{
......@@ -1600,13 +1620,15 @@ import {mapState} from 'vuex'
sendEmail(formData).then(res=>{
this.isDisable=true
if(res.data.success==true){
this.$Notice.success({
setTimeout(() => {
this.$Notice.success({
title: '提示',
desc: '发送邮件成功'
})
})
}, 500)
this.emailMOdal=false
this.modal10=false
// this.isDisable=true
this.emailInline.modalArr=[]
this.emailInline.theme=''
this.emailInline.receiveEmail=''
......@@ -1629,33 +1651,9 @@ import {mapState} from 'vuex'
this.SouSuo(this.pageT)
}
if(res.data.success==false){
this.$Notice.error({
title: '提示',
desc: '发送邮件失败'
});
this.emailMOdal=false
this.modal10=false
// this.isDisable=true
this.emailInline.modalArr=[]
this.emailInline.theme=''
this.emailInline.receiveEmail=''
this.emailInline.templateContent=''
this.sad=''
this.fileList=[]
this.emailInline.moo=''
this.emailMOdal=false
this.emailMassage=false
this.emailIdArr=[]
this.emailFlowStatus=''
this.formInline.UpdateOWER=''
this.formInline.UpdateVIEW=''
this.formInline.UpdateTIME=''
this.emailInline.copyname=''
this.isShowTwo=false
this.isLimitSize=false
this.uploadFileList=[]
this.clearInterviewee()
this.SouSuo(this.pageT)
this.modal10 = false
this.modal11 = true
this.errorInfo = res.data.body.message
}
})
}
......@@ -1736,47 +1734,45 @@ import {mapState} from 'vuex'
if (res.data.success == true) {
this.clearInterviewee()
this.modal8 = false
setTimeout(() => {
this.$Notice.success({
title: '提示',
desc: '发送成功'
})
}, 300)
} else{
setTimeout(() => {
this.$Notice.success({
title: '提示',
desc: '发送成功'
});
} else{
this.$Notice.error({
title: '提示',
desc: '发送失败'
});
desc: '发送失败'
})
}, 500)
this.clearInterviewee()
this.modal8 = false
}
})
})
},
remoteMethod: _debounce(function(query){
this.options = []
remoteMethod: async function(query){
if (query !== '') {
this.loading1 = true;
setTimeout(() => {
setTimeout(async () => {
this.loading1 = false;
let list = []
findCompanyEmailByKey(query).then(res => {
list = res
this.options = list.data.body
})
}, 500);
query = query.split('(')[0]
let list = await findCompanyEmailByKey(query)
this.options = list.data.body
}, 200);
} else {
this.options = [];
}
}),
},
changenotice(a){
},
receiveEmail(){
if(!(/^((([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6}\;))*(([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6})))$/.test(this.emailInline.receiveEmail))){
this.$Notice.error({
title: '提示',
desc: '请正确填写邮箱地址'
});
this.isDisable=false
return
this.tipInfo = '请正确填写邮箱地址'
this.isDisable=false
return
}else{
this.isDisable=true
}
......@@ -1825,197 +1821,312 @@ import {mapState} from 'vuex'
}else{
this.isDisable=true
}
}
},
getfocus(form, name, e){
let vm = this;
let value = this[form][name]
if(name == 'receiveEmail') {
this.tip&&this.$refs[form].fields.forEach(function (e) {
if (e.prop == name) {
e.resetField()
vm[form][name] = value
vm.tip = false
}
})
} else {
if (name=='UpdateTIME'&&e==false){ // 时间选择器关闭弹框的时候
this.$refs.formInline.validateField('UpdateTIME', (e) => {})
return
}
if (name=='UpdateVIEW'&&e==false){ // 选择关闭弹框的时候
this.$refs.formInline.validateField('UpdateVIEW', (e) => {
})
return
}
this.$refs[form].fields.forEach(function (e) {
if (e.prop == name) {
e.resetField()
vm[form][name] = value
}
})
}
},
submit() {
let flag = false
this.$refs.emailInline.validate(val => {
if (!val) {
flag = true
return
}
})
this.$refs.formInline.validate(val => {
if (!val) {
flag = true
return
}
})
if (!flag){
this.modal10=true
}
},
SerchlistinterviewList(){
Serchinterviewor().then(res=>{
this.interviewerNameList=res.data.body
})
},
cancelSubmit(){
this.emailMOdal=false
this.modal11=false
this.emailInline.modalArr=[]
this.emailInline.theme=''
this.emailInline.receiveEmail=''
this.emailInline.templateContent=''
this.sad=''
this.fileList=[]
this.emailInline.moo=''
this.emailMOdal=false
this.emailMassage=false
this.emailIdArr=[]
this.emailFlowStatus=''
this.formInline.UpdateOWER=''
this.formInline.UpdateVIEW=''
this.formInline.UpdateTIME=''
this.formInline.sendWeixin=true
this.emailInline.copyname=''
this.isShowTwo=false
this.uploadFileList=[]
this.clearInterviewee()
},
sendFail(){
this.modal11 = false
}
},
mounted(){
this.SouSuo()
this.SouSuo(null, 'init')
}
}
</script>
<style scoped lang='less'>
.allResume{
.allResume{
width: 100%;
height:100%
}
.allResume-left{
height: 100%;
width: 29%;
box-shadow:#dcdee2 0 0 6px 1px;
float: left;
}
.allResume-right{
height: 100%;
overflow: hidden;
width: 70.5%;
float: left;
margin-left:1px
}
.red{
background: LightGray
}
.resumeRightContentTop{
width: 100%;
height: 90%
}
.Resumecontent{
width: 100%;
}
.massage{
height:20px;
margin-top: 5px
}
.Recode span{
margin-left:20px
}
select::-ms-expand{display:none;}
select{
appearance:none;
-moz-appearance:none;
-webkit-appearance:none;
outline: none;
border: none;
color: #0092FF;
background-color: rgba(255,255,255,0.0)
}
.active1{
color:#0092FF
}
.sex span:first-child{
margin-left: 0px
}
.sex span:not(:first-child){
margin-left: 30px
}
.Education{
width: 100%;
}
.Education span{
width: 87px;
display:inline-block;
}
.Education span:nth-child(1){
width: 45px;
display:inline-block;
}
.state{
width: 100%;
/* border:1px solid red */
}
.state span{
width: 60px;
/* border:1px solid black; */
display: inline-block;
}
.state span:nth-child(1){
width: 45px;
display:inline-block;
}
.text1{
width: 80%;
height: 60px;
background:rgb(61,169,247) ;
margin: 30px 0 0 30px
}
.text2{
width: 80%;
height: 60px;
background:rgb(253,85,83);
margin: 30px 0 0 30px
}
.text3{
width: 80%;
height: 60px;
background:rgb(0,176,160);
margin: 30px 0 0 30px
}
.detailResume{
width:100%;
height:60px;
}
.a div:nth-child(2n){
background:rgba(241,241,241,1);
}
.emailModal-title{
height: 280px;
width: 100%;
}
.emailModalTitle-left{
height: 100%;
width: 60%;
float: left;
}
.emailModalTitle-right{
height: 100%;
width: 40%;
float: left;
}
.ckeditor{
width:100%
}
.uploadEnclosure{
width: 100%;
}
.Ubt button{
margin-left: 40px
}
.badge1{
display: inline-block;
position: absolute;
width:25%;
height:73%;
line-height: 130%;
top:-23%;
left: -10%;
background:red;
border-radius: 50%;
}
.badge{
position: absolute;
top: -32%;
right: -15px;
}
.badges {
right: -30px;
}
.badges1 {
right: -21px;
}
.interviewee{
float:left;
width:50px;
margin :10px;
height: 60px;
text-align: center;
.pic{
.bar{
display:flex;
align-items: center;
position: relative;
height:40px;
.left{
position: absolute;
right: 10px;
}
.leftBtn{
right: 90px;
}
}
img{
width:100%;
.allResume-left{
height: 100%;
width: 29.5%;
box-shadow:#dcdee2 0 0 6px 1px;
float: left;
}
.allResume-right{
height: 100%;
overflow: hidden;
width: 70.5%;
float: left;
position:relative;
}
.red{
background: LightGray
}
.resumeRightContentTop{
width: 100%;
height: 100%;
overflow: hidden;
}
.Resumecontent{
width: 100%;
}
.massage{
height:20px;
margin-top: 5px
}
p{
.Recode span{
margin-left:20px
}
select::-ms-expand{display:none;}
select{
appearance:none;
-moz-appearance:none;
-webkit-appearance:none;
outline: none;
border: none;
color: #0092FF;
background-color: rgba(255,255,255,0.0)
}
.active1{
color:#0092FF
}
.sex span{
margin-right: 20px
}
.Education{
width: 100%;
text-align: left;
}
.Education span{
margin-right:20px;
display:inline-block;
}
.Education span:nth-child(1){
margin-right:20px;
display:inline-block;
}
.state{
width: 100%;
/* border:1px solid red */
}
.state span{
margin-right:20px;
/* border:1px solid black; */
display: inline-block;
}
.state span:nth-child(1){
margin-right:20px;
display:inline-block;
}
.text1{
width: 80%;
height: 60px;
background:rgb(61,169,247) ;
margin: 30px 0 0 30px
}
.text2{
width: 80%;
height: 60px;
background:rgb(253,85,83);
margin: 30px 0 0 30px
}
.text3{
width: 80%;
height: 60px;
background:rgb(0,176,160);
margin: 30px 0 0 30px
}
.detailResume{
width:100%;
height:60px;
}
.grey{
background:rgba(241,241,241,1);
}
.emailModal-title{
height: 280px;
width: 100%;
text-align: center;
}
i{
.emailModalTitle-left{
height: 100%;
width: 60%;
float: left;
}
.emailModalTitle-right{
height: 100%;
width: 40%;
float: left;
}
.ckeditor{
width:100%
}
.uploadEnclosure{
width: 100%;
}
.Ubt button{
margin-left: 40px
}
.badge1{
display: inline-block;
position: absolute;
right:-10px;
top:-10px;
width:25%;
height:73%;
line-height: 130%;
top:-23%;
left: -10%;
background:red;
border-radius: 50%;
}
.hint{
.badge{
position: absolute;
top: -50%;
right: -18px;
}
}
.title{
.badges {
right: -35px;
}
.badges1 {
right: -25px;
}
.interviewee{
float:left;
width:50px;
margin :10px;
height: 60px;
text-align: center;
.pic{
position: relative;
height:40px;
}
img{
width:100%;
}
p{
width: 100%;
text-align: center;
}
i{
position: absolute;
right:-10px;
top:-10px;
}
.hint{
}
}
.title{
text-align: center;
width:100%;
margin-bottom: 10px;
}
.wechat{
position: absolute;
right: -5px;
top:30%;
span{
font-size: 13px;
}
}
.content{
padding-bottom: 80px;
}
.pageBottom{
width:100%;
margin-bottom: 10px;
background:rgba(241,241,241,1);
text-align:center;
position:absolute;
bottom:0;
height:40px;
}
</style>
<style>
.emailForm .ivu-form-item-label{
.allResume .emailForm .ivu-form-item-label{
font-size: 14px
}
.allResume .ivu-form-item-content{
font-size: 14px;
}
.allResume .ivu-form-item-error-tip{
font-size:12px;
}
</style>
\ No newline at end of file
......@@ -2,7 +2,7 @@
<div class="channel">
<!-- <Spin size="large" fix v-if="spinShow" style="font-size:20px">加载中...</Spin> -->
<div class="channel-left">
<Form :label-width="80" style="width:88%;margin-left:7%">
<Form :label-width="90" style="width:88%;margin:0 auto;" class='emailForm'>
<FormItem label="关键词:" style="margin-top:20px">
<Input placeholder="请输入关键词" style="width:98%" v-model="keywords" @keyup.enter.native="SouSuo(item.Num1,item.Num2,item.Num3)"/>
</FormItem>
......@@ -38,40 +38,41 @@
<div style="width:47%;height:100%;float:left;background:rgb(61,169,247);margin-left:1%;line-height:80px;text-align:center;color:white;font-size:20px">数据展示</div>
<div style="width:48%;height:100%;float:left;background:rgb(253,85,83);margin-left:3%;line-height:80px;text-align:center;color:white;font-size:20px">提示语</div>
</div>
<div style="background:WhiteSmoke;width:100%;height:5%;line-height:5%;margin-bottom:0.5%">
<input type='checkbox' class='input-checkbox' v-model='checked' @click='checkedAll' style="margin-left:10px;cursor:pointer;margin-top:1%">
<span style="margin-left:8px">全选</span>
<Button type="primary" size="small" style="margin-left:2%;width:50px" @click="downloadAll">下载</Button>
<div style="background:WhiteSmoke;width:100%;height:40px;" class='bar'>
<input type='checkbox' class='selectAll' v-model='checked' @click='checkedAll' style="margin-left:10px;cursor:pointer;">
<span style="margin-left:5px;position:relative;">选择<Badge :count="interviewee.length" size='small' :class='["badge",{"badges1":interviewee.length>9, "badges": interviewee.length>99}]'></Badge></span>
<Button type="primary" size="small" style="margin-left:4%;width:50px" @click="downloadAll">下载</Button>
<Button type="primary" size="small" style="margin-left:2%;width:50px" @click="delateAll">删除</Button>
<Button type="primary" size="small" style="float:right;margin-right:20px;margin-top:0.6%" @click="allexport">导出列表</Button>
<Button type="primary" size="small" style="float:right;margin-right:20px;margin-top:0.6%" @click="sendEmail">发送邮件</Button>
<!-- <Button type="primary" size="small" style="float:right;margin-right:20px;margin-top:0.6%;position:relative;position:relative" @click="transpond">
<Badge :count="interviewee.length" size='small' :class='["badge",{"badges1":interviewee.length>9, "badges": interviewee.length>99}]'></Badge>转发面试官
</Button> -->
<Button type="primary" size="small" style="margin-left:2%;" @click="transpond">
转发面试官
</Button>
<Button type="primary" size="small" class='left' @click="allexport">导出列表</Button>
<Button type="primary" size="small" class='left leftBtn' @click="sendEmail(1)">邀请面试</Button>
</div>
<div style="margin-bottom:40px;float:left;width:100%;overflow-y: auto;height:100%" class="a">
<div style="margin:50px auto;width:300px;height:200px;line-height:200px;text-align:center;font-size:20px;color:LightGray" v-show="ajaxData.length==0">暂无数据</div>
<div class="Resumecontent" v-for='(item,i) in ajaxData' :key="i">
<div class="detailResume" id="a" @mousemove="ahove(i,item.isShow)" @mouseleave="movleave(i,item.isShow)" :class="{red:item.isShow}" >
<p class="massage" style="margin-top:10px">
<span style="display:inline-block;height:100%;font-size: 12px;overflow:hidden;text-overflow:ellipsis;white-space: nowrap;margin-top:5px">
<input type='checkbox' name='checkboxinput' style="margin-left:10px;cursor:pointer" class='input-checkbox' v-model='checkboxList' :value="item.id" @click="selectInputElement(i,item.id,item.flowStatus,item.STATES, item)"></span>
<div class="detailResume" id="a" @mousemove="ahove(i,item.isShow)" @mouseleave="movleave(i,item.isShow)" :class="{red:item.isShow, grey: i%2!=0}" >
<p class="massage" style="margin-left:10px;">
<span style="display:inline-block;height:100%;font-size: 12px;overflow:hidden;text-overflow:ellipsis;white-space: nowrap;margin-top:5px" class='inputcheck'>
<input type='checkbox' name='checkboxinput' style="cursor:pointer" class='input-checkbox' v-model='checkboxList' :value="item.id" @click="selectInputElement(i,item.id,item.flowStatus,item.STATES, item)"></span>
<span style="display:inline-block;height:100%;font-size: 12px;overflow:hidden;text-overflow:ellipsis;white-space: nowrap;cursor:pointer" @click="Seedetail(item.id)">{{item.ownerName}} |</span>
<span style="display:inline-block;height:100%;font-size: 12px;overflow:hidden;text-overflow:ellipsis;white-space: nowrap;cursor:pointer" @click="Seedetail(item.id)"> {{item.ownerMobile}} |</span>
<span style="display:inline-block;height:100%;font-size: 12px;overflow:hidden;text-overflow:ellipsis;white-space: nowrap;cursor:pointer" @click="Seedetail(item.id)"> {{item.ownerAge}}岁 |</span>
<span style="display:inline-block;height:100%;font-size: 12px;overflow:hidden;text-overflow:ellipsis;white-space: nowrap;cursor:pointer" @click="Seedetail(item.id)"> {{item.ownerSex}} |</span>
<span style="display:inline-block;height:100%;font-size: 12px;overflow:hidden;text-overflow:ellipsis;white-space: nowrap;cursor:pointer" @click="Seedetail(item.id)"> {{item.ownerSex||'&nbsp;'}} |</span>
<span style="display:inline-block;height:100%;font-size: 12px;overflow:hidden;text-overflow:ellipsis;white-space: nowrap;cursor:pointer" @click="Seedetail(item.id)"> {{item.ownerWorkYears}}年 |</span>
<span style="display:inline-block;height:100%;font-size: 12px;overflow:hidden;text-overflow:ellipsis;white-space: nowrap;width:19%;cursor:pointer" @click="Seedetail(item.id)"> {{item.ownerExpectTitles}}</span>
<span style="display:inline-block;height:100%;font-size: 12px;float:right;text-align:right;margin-right:10px">
<span style="margin-right:30px;margin-top:5px" v-if="item.flowStatus=='INTERVIEW_OK'"><Icon type="ios-radio-button-on" style="color:#43CD80" /><span style="margin-left:10px">面试合适</span></span>
<span style="margin-right:30px;margin-top:5px" v-else-if="item.flowStatus=='INTERVIEW_FAIL'"><Icon type="ios-radio-button-on" style="color:red" /><span style="margin-left:10px" >面试淘汰</span></span>
<span style="margin-right:30px;margin-top:5px" v-else-if="item.flowStatus=='TO_RESULT'"><Icon type="ios-radio-button-on" style="color:red" /><span style="margin-left:10px" >面试结果待定</span></span>
<span style="margin-right:30px;margin-top:5px" v-else-if="item.flowStatus=='END'"><Icon type="ios-radio-button-on" style="color:red" /><span style="margin-left:10px" >终止面试</span></span>
<span style="margin-right:30px;margin-top:5px" v-else-if="item.flowStatus=='SEE_FAIL'"><Icon type="ios-radio-button-on" style="color:red" /><span style="margin-left:10px" >约面失败</span></span>
<span style="margin-right:30px;margin-top:5px" v-else-if="item.flowStatus=='ARRIVED'"><Icon type="ios-radio-button-on" style="color:#43CD80" /><span style="margin-left:10px" >已到达</span></span>
<span style="margin-right:30px;margin-top:5px" v-else-if="item.flowStatus=='NO_ENTRY'"><Icon type="ios-radio-button-on" style="color:red" /><span style="margin-left:10px">未入职</span></span>
<span style="margin-right:30px;margin-top:5px" v-else-if="item.flowStatus=='TO_SEE'">
<span style="text-align:center;cursor:pointer" >
<span style="display:inline-block;height:100%;font-size: 12px;margin-top:5px;overflow:hidden;text-overflow:ellipsis;white-space: nowrap;cursor:pointer" @click="Seedetail(item.id)"> {{item.ownerHighestDegree||'&nbsp;'}} <span v-show="item.ownerExpectTitles !==''">|</span></span>
<span style="display:inline-block;height:100%;font-size: 12px;overflow:hidden;text-overflow:ellipsis;white-space: nowrap;width:25%;cursor:pointer" @click="Seedetail(item.id)"> {{item.ownerExpectTitles}}</span>
<span style="display:inline-block;height:100%;font-size: 12px;float:right;text-align:right;margin-right:10px;width:25%;line-height:100%;margin-top:5px;">
<span style="margin-right:30px;margin-top:5px;" v-if="item.flowStatus=='INTERVIEW_OK'" class='status'><Icon type="ios-radio-button-on" style="color:#43CD80" /><span style="margin-left:10px">面试合适</span></span>
<span style="margin-right:30px;margin-top:5px" v-else-if="item.flowStatus=='INTERVIEW_FAIL'" class='status'><Icon type="ios-radio-button-on" style="color:red" /><span style="margin-left:10px" >面试淘汰</span></span>
<span style="margin-right:30px;margin-top:5px" v-else-if="item.flowStatus=='TO_RESULT'" class='status'><Icon type="ios-radio-button-on" style="color:red" /><span style="margin-left:10px" >面试结果待定</span></span>
<span style="margin-right:30px;margin-top:5px" v-else-if="item.flowStatus=='END'" class='status'><Icon type="ios-radio-button-on" style="color:red" /><span style="margin-left:10px" >终止面试</span></span>
<span style="margin-right:30px;margin-top:5px" v-else-if="item.flowStatus=='SEE_FAIL'" class='status'><Icon type="ios-radio-button-on" style="color:red" /><span style="margin-left:10px" >约面失败</span></span>
<span style="margin-right:30px;margin-top:5px" v-else-if="item.flowStatus=='ARRIVED'" class='status'><Icon type="ios-radio-button-on" style="color:#43CD80" /><span style="margin-left:10px" >已到达</span></span>
<span style="margin-right:30px;margin-top:5px" v-else-if="item.flowStatus=='NO_ENTRY'" class='status'><Icon type="ios-radio-button-on" style="color:red" /><span style="margin-left:10px">未入职</span></span>
<span style="margin-right:30px;margin-top:5px;" v-else-if="item.flowStatus=='TO_SEE'" class='status'>
<span style="text-align:left;cursor:pointer" >
<select name="3" id="3" @change="selectFn2($event,item.id)" style="height:18px;text-align:center;margin-top:5px">
<option value="1">邀请面试</option>
<option value="2">备选</option>
......@@ -80,8 +81,8 @@
</select>
</span>
</span>
<span style="margin-right:30px;margin-top:5px" v-else-if="item.flowStatus=='HAS_SEE'"><Icon type="ios-radio-button-on" style="color:#43CD80" /><span style="margin-left:10px" >已邀约</span></span>
<span style="margin-right:20px;margin-top:5px" v-else-if="item.flowStatus=='OPTION'">
<span style="margin-right:30px;margin-top:5px" v-else-if="item.flowStatus=='HAS_SEE'" class='status'><Icon type="ios-radio-button-on" style="color:#43CD80" /><span style="margin-left:10px" >已邀约</span></span>
<span style="margin-right:20px;margin-top:5px;" v-else-if="item.flowStatus=='OPTION'" class='status'>
<span>
<select name="4" id="4" @change="selectFn3($event,item.id)" style="height:18px;text-align:center;margin-top:5px;cursor:pointer">
<option value="1">备选</option>
......@@ -91,12 +92,12 @@
</select>
</span>
</span>
<span style="margin-right:20px;margin-top:5px" v-else-if="item.flowStatus=='TO_SENT_OFFER'"><Icon type="ios-radio-button-on" style="color:#43CD80" /><span style="margin-left:10px" >待Offer</span></span>
<span style="margin-right:20px;margin-top:5px" v-else-if="item.flowStatus=='HAS_SENT_OFFER'"><Icon type="ios-radio-button-on" style="color:#43CD80" /><span style="margin-left:10px">已发Offer</span></span>
<span style="margin-right:20px;margin-top:5px" v-else-if="item.flowStatus=='TO_ENTRY'"><Icon type="ios-radio-button-on" style="color:#43CD80" /><span style="margin-left:10px" >待入职</span></span>
<span style="margin-right:20px;margin-top:5px" v-else-if="item.flowStatus=='HAS_ENTRY'"><Icon type="ios-radio-button-on" style="color:#43CD80" /><span style="margin-left:10px">已入职</span></span>
<span style="margin-right:20px;margin-top:5px" v-else-if="item.flowStatus=='PASS'">
<span >
<span style="margin-right:20px;margin-top:5px" v-else-if="item.flowStatus=='TO_SENT_OFFER'" class='status'><Icon type="ios-radio-button-on" style="color:#43CD80" /><span style="margin-left:10px" >待Offer</span></span>
<span style="margin-right:20px;margin-top:5px" v-else-if="item.flowStatus=='HAS_SENT_OFFER'" class='status'><Icon type="ios-radio-button-on" style="color:#43CD80" /><span style="margin-left:10px">已发Offer</span></span>
<span style="margin-right:20px;margin-top:5px" v-else-if="item.flowStatus=='TO_ENTRY'" class='status'><Icon type="ios-radio-button-on" style="color:#43CD80" /><span style="margin-left:10px" >待入职</span></span>
<span style="margin-right:20px;margin-top:5px" v-else-if="item.flowStatus=='HAS_ENTRY'" class='status'><Icon type="ios-radio-button-on" style="color:#43CD80" /><span style="margin-left:10px">已入职</span></span>
<span style="margin-right:20px;margin-top:5px;" v-else-if="item.flowStatus=='PASS'" class='status'>
<span class='status'>
<select name="2" id="2" @change="selectFn4($event,item.id)" style="height:18px;text-align:center;margin-top:5px;cursor:pointer">
<option value="1">PASS</option>
<option value="2">邀请面试</option>
......@@ -105,44 +106,47 @@
</select>
</span>
</span>
<select name="1" id="a" @change="selectFn1($event,item.id)" v-else-if="item.flowStatus=='TO_DO'" style="height:20px;margin-top:5px;margin-right:20px;text-align:center;cursor:pointer">
<select name="1" id="a" @change="selectFn1($event,item.id)" v-else-if="item.flowStatus=='TO_DO'" style="height:20px;margin-top:5px;margin-right:20px;text-align:center;cursor:pointer" class='status'>
<option value="1">待处理</option>
<option value="2">pass</option>
<option value="3">邀请面试</option>
<option value="4">备选</option>
</select>
<span><Icon type="md-download" @click="downloadONE(item.id)" style="font-size:15px;cursor:pointer;color:#0092FF"/></span>
<span ><Icon type="md-trash" v-if="item.flowStatus=='TO_SEE'" @click="undelate" style="color:#b5b5b5;cursor:pointer;font-size:15px"/></span>
<span ><Icon type="md-trash" v-if="item.flowStatus=='HAS_SEE'" @click="undelate" style="color:#b5b5b5;cursor:pointer;font-size:15px"/></span>
<span ><Icon type="md-trash" v-if="item.flowStatus=='SEE_FAIL'" @click="undelate" style="color:#b5b5b5;cursor:pointer;font-size:15px"/></span>
<span ><Icon type="md-trash" v-if="item.flowStatus=='INTERVIEW_FAIL'" @click="undelate" style="color:#b5b5b5;cursor:pointer;font-size:15px"/></span>
<span ><Icon type="md-trash" v-if="item.flowStatus=='TO_SENT_OFFER'" @click="undelate" style="color:#b5b5b5;cursor:pointer;font-size:15px"/></span>
<span ><Icon type="md-trash" v-if="item.flowStatus=='TO_ENTRY'" @click="undelate" style="color:#b5b5b5;cursor:pointer;font-size:15px"/></span>
<span ><Icon type="md-trash" v-if="item.flowStatus=='HAS_ENTRY'" @click="undelate" style="color:#b5b5b5;cursor:pointer;font-size:15px"/></span>
<span ><Icon type="md-trash" v-if="item.flowStatus=='NO_ENTRY'" @click="undelate" style="color:#b5b5b5;cursor:pointer;font-size:15px"/></span>
<span ><Icon type="md-trash" v-if="item.flowStatus=='END'" @click="undelate" style="color:#b5b5b5;cursor:pointer;font-size:15px"/></span>
<span ><Icon type="md-trash" v-if="item.flowStatus=='HAS_SENT_OFFER'" @click="undelate" style="color:#b5b5b5;cursor:pointer;font-size:15px"/></span>
<span ><Icon type="md-trash" v-if="item.flowStatus=='ARRIVED'" @click="undelate" style="color:#b5b5b5;cursor:pointer;font-size:15px"/></span>
<span ><Icon type="md-trash" v-if="item.flowStatus=='PASS'" @click="delateR(item.id)" style=";cursor:pointer;color:rgb(242, 93, 87);;font-size:15px;"/></span>
<span ><Icon type="md-trash" v-if="item.flowStatus=='OPTION'" @click="delateR(item.id)" style="color:rgb(242, 93, 87);;font-size:15px;;cursor:pointer"/></span>
<span ><Icon type="md-trash" v-if="item.flowStatus=='TO_DO'" @click="delateR(item.id)" style="color:rgb(242, 93, 87);;font-size:15px;;cursor:pointer"/></span>
<span @click="RecordSEE(item.id,item.ownerName)" style=";cursor:pointer;color:#2d8cf0">记录</span>
<span class='record'><Icon type="md-download" @click="downloadONE(item.id)" style="font-size:15px;cursor:pointer;color:#0092FF"/></span>
<span class='record'><Icon type="md-trash" v-if="item.flowStatus=='TO_SEE'" @click="undelate" style="color:#b5b5b5;cursor:pointer;font-size:15px"/></span>
<span class='record'><Icon type="md-trash" v-if="item.flowStatus=='HAS_SEE'" @click="undelate" style="color:#b5b5b5;cursor:pointer;font-size:15px"/></span>
<span class='record'><Icon type="md-trash" v-if="item.flowStatus=='SEE_FAIL'" @click="undelate" style="color:#b5b5b5;cursor:pointer;font-size:15px"/></span>
<span class='record'><Icon type="md-trash" v-if="item.flowStatus=='INTERVIEW_FAIL'" @click="undelate" style="color:#b5b5b5;cursor:pointer;font-size:15px"/></span>
<span class='record'><Icon type="md-trash" v-if="item.flowStatus=='TO_SENT_OFFER'" @click="undelate" style="color:#b5b5b5;cursor:pointer;font-size:15px"/></span>
<span class='record'><Icon type="md-trash" v-if="item.flowStatus=='TO_ENTRY'" @click="undelate" style="color:#b5b5b5;cursor:pointer;font-size:15px"/></span>
<span class='record'><Icon type="md-trash" v-if="item.flowStatus=='HAS_ENTRY'" @click="undelate" style="color:#b5b5b5;cursor:pointer;font-size:15px"/></span>
<span class='record'><Icon type="md-trash" v-if="item.flowStatus=='NO_ENTRY'" @click="undelate" style="color:#b5b5b5;cursor:pointer;font-size:15px"/></span>
<span class='record'><Icon type="md-trash" v-if="item.flowStatus=='END'" @click="undelate" style="color:#b5b5b5;cursor:pointer;font-size:15px"/></span>
<span class='record'><Icon type="md-trash" v-if="item.flowStatus=='HAS_SENT_OFFER'" @click="undelate" style="color:#b5b5b5;cursor:pointer;font-size:15px"/></span>
<span class='record'><Icon type="md-trash" v-if="item.flowStatus=='ARRIVED'" @click="undelate" style="color:#b5b5b5;cursor:pointer;font-size:15px"/></span>
<span class='record'><Icon type="md-trash" v-if="item.flowStatus=='PASS'" @click="delateR(item.id)" style=";cursor:pointer;color:rgb(242, 93, 87);;font-size:15px;"/></span>
<span class='record'><Icon type="md-trash" v-if="item.flowStatus=='OPTION'" @click="delateR(item.id)" style="color:rgb(242, 93, 87);;font-size:15px;;cursor:pointer"/></span>
<span class='record'><Icon type="md-trash" v-if="item.flowStatus=='TO_DO'" @click="delateR(item.id)" style="color:rgb(242, 93, 87);;font-size:15px;;cursor:pointer"/></span>
<span @click="RecordSEE(item.id,item.ownerName)" style=";cursor:pointer;color:#2d8cf0;" class='recordtext'>记录</span>
</span>
</p>
<p style="margin-top:0px;color:Grey">
<span style="display:inline-block;font-size: 12px;margin-left:25px;margin-top:10px" v-if="item.srcSite!==''">{{item.deliveryTime}}投递 |</span>
<span style="display:inline-block;font-size: 12px;margin-left:25px;margin-top:10px" v-if="item.srcSite==''">{{item.deliveryTime}}上传 |</span>
<span style="display:inline-block;height:100%;font-size: 12px;margin-left:2px;margin-top:10px">{{item.optSource}} <span v-show="item.srcSite!==''">|</span> </span>
<span style="display:inline-block;height:100%;font-size: 12px;margin-top:10px">{{item.srcSite}} </span>
<span style="display:inline-block;height:100%;font-size: 12px;width:30%;float:right;text-align:right;margin-right:10px;margin-top:5px">
<span style="margin-left:15px;margin-top:5px">{{item.modifyTime}}</span>
<p style="margin-top:10px;color:Grey;padding-left:10px;" class='info'>
<span style="display:inline-block;font-size: 12px;color:orange" v-show="item.hasForward=='1'" class='transmit' >已转</span>
<span style="display:inline-block;font-size: 12px;margin-left:20px;color:Grey" v-if="item.srcSite!==''" v-show="item.hasForward==null">{{item.deliveryTime}}投递 |</span>
<span style="display:inline-block;font-size: 12px;margin-left:20px;color:Grey" v-if="item.srcSite==''" v-show="item.hasForward==null">{{item.deliveryTime}}上传 <span v-show="item.optSource!==''"> |</span></span>
<span style="display:inline-block;font-size: 12px;margin-left:-2px;color:Grey" v-if="item.srcSite!==''" v-show="item.hasForward!==null">{{item.deliveryTime}}投递 |</span>
<span style="display:inline-block;font-size: 12px;color:Grey;margin-left:-2px" v-if="item.srcSite==''" v-show="item.hasForward!==null">{{item.deliveryTime}}上传 <span v-show="item.optSource!==''"> |</span></span>
<span style="display:inline-block;font-size: 12px;margin-left:3px;color:Grey">{{item.optSource}}<span v-show="item.srcSite!==''"> |</span></span>
<span style="display:inline-block;font-size: 12px;margin-left:3px;color:Grey">{{item.srcSite}}</span>
<span style="display:inline-block;font-size: 12px;float:right;text-align:right;margin-right:10px;color:Grey;">
<span>{{item.modifyTime}}</span>
<span>最后操作人:{{item.d}}</span>
</span>
</p>
</div>
</div>
</div>
<div class="pageBottom" style="width:56.6%;background:rgba(241,241,241,1);text-align:center;position:fixed;bottom:0;height:45px">
<div class="pageBottom" style="width:100%;background:rgba(241,241,241,1);text-align:center;position:absolute;bottom:0;height:45px">
<Page :total="totalSize" show-elevator show-total @on-change="pageChange" @on-page-size-change="pageSizeChange" :current='pageIndex' :page-size='pageSize' style="text-align:center;margin-top:4px"></Page>
</div>
</div>
......@@ -289,50 +293,52 @@
v-model="emailMOdal"
width='1000px'
:mask-closable='false'
:closable='false'>
:closable='false'
:styles='{top: "50px"}'>
<div >
<h2 style="text-align:center;color:black" v-show="this.isShowAll==false">发送邮件</h2>
<h2 style="text-align:center;color:black" v-show="this.isShowAll==true">新建面试</h2>
<h3 style="text-align:center;color:black" v-show="this.isShowAll==true"> <span>更改为<span style="color:blue">“新建面试”</span>后,你需要从<span style="color:blue">”面试管理“</span>中对该候选人进行后续的操作。</span></h3>
<h3 style="text-align:center;color:black" v-show="this.isShowAll==true"> <span>新建面试后,你需要从<span style="color:#0092ff">“面试管理”</span>中对该候选人进行后续的操作。</span></h3>
</div>
<div class="emailModal-title">
<div class="emailModalTitle-left">
<p>
<Form :label-width="70" :model="emailInline" label-position="left" style="margin-left:5%" ref="emailInline" :rules="ruleInline" class="emailForm">
<Form :label-width="70" :model="emailInline" label-position="left" style="margin-left:5%" ref="emailInline" :rules="emailruleInline" class="emailForm">
<FormItem label="选择模板" style="margin-top:20px" prop='moo'>
<Select style="width:95%" @on-change='getEmailContentValue' v-model="emailInline.moo" >
<Option v-for="(item,index) in emailInline.modalArr" :key="index" :value="item.templateCode">{{item.templateName}}</Option>
</Select><br>
<!-- <span v-show="emailMassage==true">你尚未选择简历,请先选择简历</span> -->
</FormItem>
<FormItem label="收件人" style="margin-top:20px" :show-massage='false'>
<Input style="width:95%" v-model="emailInline.receiveEmail" @on-blur='receiveEmail'/>
<span style="position: absolute;left:0;top:30px;color:gray">输入多个邮箱地址以英文”;“分隔</span>
<FormItem label="收件人" style="margin-top:20px" prop='receiveEmail'>
<Input style="width:95%" v-model="emailInline.receiveEmail" @on-focus='getfocus("emailInline","receiveEmail")'/>
<span style="position: absolute;left:0;top:30px;color:gray;font-size:12px;" v-show='!tip'>{{tipInfo}}</span>
</FormItem>
<FormItem label="抄送" style="margin-top:20px">
<Input style="width:95%" v-model="emailInline.copyname" @on-blur='copyname'/>
<FormItem label="抄送" style="margin-top:20px" prop='copyname'>
<Input style="width:95%" v-model="emailInline.copyname" @on-focus='getfocus("emailInline","copyname")'/>
</FormItem>
<FormItem label="主题" style="margin-top:20px">
<Input style="width:95%" v-model="emailInline.theme" @on-blur='theme'/>
<FormItem label="主题" style="margin-top:20px" prop='theme'>
<Input style="width:95%" v-model="emailInline.theme" @on-focus='getfocus("emailInline","theme")'/>
</FormItem>
</Form>
</p>
</div>
<div class="emailModalTitle-right" v-show="interviewIsShow==true">
<h3 style="text-align:center;margin-top:20px">请输入约面信息</h3>
<Form :label-width="75" ref="formInline" :rules="ruleInline" :model="formInline" style="margin-top:35px" label-position="left">
<Form :label-width="85" ref="formInline" :rules="ruleInline" :model="formInline" style="margin-top:35px" label-position="left" class="emailForm">
<FormItem label="邀约人" style="margin-top:20px" prop="UpdateOWER">
<Input v-model="formInline.UpdateOWER" style="width:100%" :maxlength="5" @on-blur='UpdateOWER'/>
<Input v-model="formInline.UpdateOWER" style="width:100%" :maxlength="5" @on-focus='getfocus("formInline", "UpdateOWER")'/>
</FormItem>
<FormItem label="面试时间" style="margin-top:20px" prop="UpdateTIME">
<DatePicker type="datetime" style="width:100%" v-model="formInline.UpdateTIME" format="yyyy-MM-dd HH:mm" @on-change="changeTime" :options="options3" :editable='false' @on-blur='UpdateTIME'></DatePicker>
<DatePicker type="datetime" style="width:100%" v-model="formInline.UpdateTIME" format="yyyy-MM-dd HH:mm" @on-change="changeTime" :options="options3" :editable='false' @on-open-change='getfocus("formInline", "UpdateTIME", $event)'></DatePicker>
</FormItem>
<FormItem label="面试官" style="margin-top:20px" prop='UpdateVIEW'>
<Input v-model="formInline.UpdateVIEW" style="width:100%" :maxlength="5" @on-blur='UpdateVIEW'/>
<Select v-model ='formInline.UpdateVIEW' filterable style='width:100%;' remote
:remote-method="remoteMethod"
:loading="loading1" placeholder='请输入面试官全名' clearable @on-open-change='getfocus("formInline", "UpdateVIEW", $event)' ref='selList'>
<Option v-for='(item, index) in options' :key='index' :value='item.name' >{{item.name}}({{item.email}})</Option>
</Select>
</FormItem>
<FormItem label="" prop='sendWeixin'>
<Checkbox v-model="formInline.sendWeixin"><span style="margin-left:10px">微信通知面试官</span></Checkbox>
</FormItem>
</Form>
</div>
</div>
......@@ -356,10 +362,11 @@
<span><Icon type="md-close" @click="delateFile(index)" style="font-size:16px;float:right;margin-right:80px" /></span>
</p>
</div>
<div slot='footer' style="text-align:center" class="Ubt">
<div slot='footer' style="text-align:center;position: relative;" class="Ubt">
<Button type='primary' @click='emailModalPush'>取消</Button>
<Button type='primary' @click='modal10=true' v-show="this.isShowAll==false" :disabled="!isDisable">发送</Button>
<Button type='primary' @click='modal10=true' v-show="this.isShowAll==true" :disabled="!isDisable">添加并发送</Button>
<Button type='primary' @click='submit' v-show="this.isShowAll==false">发送</Button>
<Button type='primary' @click='submit' v-show="this.isShowAll==true">添加并发送</Button>
<Checkbox v-model="formInline.sendWeixin" class='wechat'><span>微信通知面试官</span></Checkbox>
</div>
</Modal>
<Modal
......@@ -408,51 +415,57 @@
<Button type='primary' @click='modal8=false'>取消</Button>
<Button type='primary' @click="sendNotice" >发送</Button>
</div>
</Modal>
<!-- 发送失败再次发送 -->
<Modal
v-model="modal11"
width='350px'
:closable='false'>
<div >
<h2 style="text-align: center;color:black">提示</h2>
<p style="text-align:center;margin-top:10px;font-size: 14px;text-align:left;">{{errorInfo}}</p>
</div>
<div slot='footer' style="text-align:center">
<Button type='primary' @click='cancelSubmit'>取消</Button>
<Button type='primary' @click="modal11=false">确定</Button>
</div>
</Modal>
</div>
</template>
<script>
import moment from 'moment'
import {adoptOneSeeResumeList, serchList,downloadone,sousuoList,seedetail,PASS,OPTION,deleteREsume,downloadOne,exportLIST,recodeLIST,addinterview,TODORes,getEmailMoo,getEmailContent, sendEmail,findCompanyEmailByKey,forwardResume } from '../../api/resume.server.js'
import {Serchinterviewor} from '../../api/interview.server.js'
import {
sapi
} from '../../config'
import{_debounce,_throttle} from '../../service/util.js'
import{_debounce,_throttle, emailValidata, emailRule, vidte, validator} from '../../service/util.js'
import ckeditor from '../../components/ckeditor'
import {mapState} from 'vuex'
import localStorage from '../../service/localstorage.service'
export default {
data(){
const validator = (rule, value, callback) => {
if (!value)this.$Notice.warning({title: '提示',desc: '请输入您要通知的面试官'})
callback()
}
const vidte=(rule,value,callback)=>{
if(this.emailMassage==true){
callback(new Error('你尚未选择简历,请先选择简历'))
}
else if(this.allEmailVilitor==true){
callback(new Error('不能选择多份简历,请选择单份简历'))
}
else{
callback ()
}
}
return {
modal11: false,
interviewee: [],
tip: false,
tipInfo: '输入多个邮箱地址以英文”;“分隔',
errorInfo: '',
ruleInline: {
UpdateOWER: [
{ required: true, message: '邀约人不能为空', trigger: 'blur' }
],
UpdateTIME: [
{ required: true, message: '面试时间不能为空', trigger: 'date' }
],
UpdateVIEW: [
{ required: true,message: '面试官不能为空', trigger: 'blur' }
],
moo:[
{required: false, validator: vidte, trigger: 'change'},
],
UpdateOWER: [
{ required: true, message: '邀约人不能为空', trigger: 'blur', validator: emailValidata.bind(this)}
],
UpdateTIME: [
{ required: true, message: '面试时间不能为空', trigger: 'change', type:'date', validator: emailValidata.bind(this)}
],
UpdateVIEW: [
{ required: true,message: '面试官不能为空', trigger: 'change', validator: emailValidata.bind(this)}
]
},
emailruleInline: {
receiveEmail: [{required: true, trigger: 'blur', pattern: emailRule, validator: emailValidata.bind(this)}],
theme: [{required: true, trigger: 'blur',message: '主题不能为空', validator: emailValidata.bind(this)}],
copyname: [{required: false, trigger: 'blur', pattern: emailRule, validator: emailValidata.bind(this), empty: true}]
},
formInline:{
UpdateOWER:'',
......@@ -474,7 +487,7 @@ export default {
interviewerName: ''
},
transpondRule: {
interviewerName: [{required: true, trigger: 'blur', validator: validator}]
interviewerName: [{required: true, trigger: 'blur', validator: validator.bind(this)}]
},
interviewerList: [{name: 'test', value: '1'}],
loading1: false,
......@@ -600,9 +613,6 @@ export default {
},
//全选与反选
checkedAll: function() {
// if(this.ajaxData.length==0){
// this.checkboxList=[]
// }
if (this.checked) {//实现反选
this.checkboxList = [];
this.ajaxData.forEach( (item) => {
......@@ -632,6 +642,7 @@ export default {
selectFn1(e,SID,itemsta) {
this.toseeid=SID
this.emailId=SID
this.emailIdArr=[]
this.emailIdArr.push(SID)
this.isShowTwo=true
this.ITEMSTA=itemsta
......@@ -643,6 +654,7 @@ export default {
this.emailMOdal=true
this.emailFlowStatus='TO_SEE'
this.isShowTwo=true
this.sendEmail()
}
// 简历PASS
if(e.target.value==2){
......@@ -701,6 +713,7 @@ export default {
this.beforeBtu=true
this.modal2=false
this.emailMOdal=true
this.sendEmail()
},
selectFn2(e,SID,itemsta) {
this.ITEMSTA=itemsta
......@@ -714,6 +727,7 @@ export default {
this.emailMOdal=true
this.emailFlowStatus='TO_SEE'
this.isShowTwo=true
this.sendEmail()
}
// 简历PASS
if(e.target.value==3){
......@@ -763,6 +777,7 @@ export default {
this.emailMOdal=true
this.emailFlowStatus='TO_SEE'
this.isShowTwo=true
this.sendEmail()
}
// 简历PASS
if(e.target.value==3){
......@@ -812,6 +827,7 @@ export default {
this.emailMOdal=true
this.emailFlowStatus='TO_SEE'
this.isShowTwo=true
this.sendEmail()
}
// 简历PASS
if(e.target.value==1){
......@@ -849,8 +865,26 @@ export default {
})
}
},
changeTime(b){
this.UpdateTIME=b
changeTime(b){
this.UpdateTIME=b
if (!b){
this.editorObject = {
type: this.temp,
value: this.emailInline.templateContent
}
return
}
var reg = /<span id="email_seeTime"><span>/g
var time = b.split('-')
var year = time[0]
var mon = time[1]
var day = time[2].split(' ')[0]
var time = time[2].split(' ')[1]
var content = `<span id="email_seeTime">${year}${mon}${day}${time}<span>`
this.editorObject = {
type: this.temp,
value: this.emailInline.templateContent.replace(reg, content)
}
},
// 查看简历详情
Seedetail(Tid){
......@@ -915,6 +949,7 @@ export default {
// 选择input元素
selectInputElement(index,doID,doStatus,sss, item){
sss=!sss
this.emailIdArr=[]
this.emailId=doID
this.ajaxData[index].STATES=sss
Array.prototype.indexOf = function(val) {
......@@ -1152,7 +1187,7 @@ export default {
})
},
//搜索
SouSuo(page){
SouSuo(page, status){
page = typeof(page)=='number'?page:1
this.searchInfo.pageIndex = page
this.pageIndex = page
......@@ -1179,7 +1214,7 @@ export default {
});
return
}
sousuoList(parmars).then(res=>{
sousuoList(parmars, status).then(res=>{
let Ishow=res.data.items
if(res.data.success==true){
this.checkboxList=[]
......@@ -1235,14 +1270,35 @@ export default {
this.ajaxData[index].isShow=false
},
// 发送邮件
sendEmail(){
sendEmail(type){
if(this.checkboxList.length == 0&&type) {
this.$Notice.error({
title: '提示',
desc: '你尚未选择简历,请先选择简历'
})
return
}
if (this.checkboxList.length > 1&&type){
this.$Notice.error({
title: '提示',
desc: '不能选择多份简历,请选择单份简历'
})
return
}
this.emailInline.modalArr=[]
this.$refs.emailInline.resetFields()
this.$refs.formInline.resetFields()
this.emailMOdal=true
getEmailMoo().then(res=>{
this.emailInline.modalArr=res.data.body
})
this.emailInline.moo = 'TEMP_0001'
this.getEmailContentValue(this.emailInline.moo)
},
getEmailContentValue(value){
if (!value){
return
}
this.isDisable=true
this.temp=value
if(this.isShowTwo==true){
......@@ -1298,9 +1354,10 @@ export default {
value: this.emailInline.templateContent || ''
}
if(res.data.body&&res.data.body.resumeInterviewVO){
this.formInline.UpdateOWER=res.data.body.resumeInterviewVO.interviewerName
this.formInline.UpdateVIEW=res.data.body.resumeInterviewVO.inviterName
this.formInline.UpdateOWER=res.data.body.resumeInterviewVO.inviterName
this.formInline.UpdateVIEW=res.data.body.resumeInterviewVO.interviewerName
this.formInline.UpdateTIME=res.data.body.resumeInterviewVO.seeTime
this.changeTime(this.formInline.UpdateTIME)
}else{
this.formInline.UpdateOWER=''
this.formInline.UpdateVIEW=''
......@@ -1352,7 +1409,7 @@ export default {
this.isShowTwo=false
this.isLimitSize=false
this.uploadFileList=[]
this.SouSuo(this.pageT)
this.clearInterviewee()
},
getEditorValue(){ // 调编辑器组件方法获取数据
return this.$refs.editor.getValue()
......@@ -1364,14 +1421,14 @@ export default {
},
// 确认发送邮件
confireSendEmail(){
this.sad=this.getEditorValue()
this.sad=this.getEditorValue()
if(this.sad==''){
this.$Notice.error({
title: '提示',
desc: '请填写完整的信息'
});
return
}
title: '提示',
desc: '请填写完整的信息'
});
return
}
if(this.emailInline.moo==''){
this.$Notice.error({
title: '提示',
......@@ -1443,17 +1500,20 @@ export default {
formData.append('resumeInterviewVO.resumeId',this.emailId)
formData.append('resumeInterviewVO.inviterName',this.formInline.UpdateOWER==''?'':this.formInline.UpdateOWER)
formData.append('resumeInterviewVO.interviewerName',this.formInline.UpdateVIEW==''?'':this.formInline.UpdateVIEW)
let info = this.options.find(item => item.name == this.formInline.UpdateVIEW)
formData.append('resumeInterviewVO.email',(info&&info.email) || '')
formData.append('sendWeixin',this.formInline.sendWeixin==true? 1:0)
formData.append('resumeInterviewVO.seeTime',moment( this.UpdateTIMETwo).format('YYYY/MM/DD HH:mm'))
formData.append(' flowStatus',this.flowStatusTT)
this.isDisable=false
sendEmail(formData).then(res=>{
this.isDisable=true
if(res.data.success==true){
this.$Notice.success({
setTimeout(() => {
this.$Notice.success({
title: '提示',
desc: '发送邮件成功'
});
})
}, 500)
this.emailMOdal=false
this.modal10=false
this.emailInline.modalArr=[]
......@@ -1478,33 +1538,9 @@ export default {
this.SouSuo(this.pageT)
}
if(res.data.success==false){
this.$Notice.error({
title: '提示',
desc: '发送邮件失败'
});
this.emailMOdal=false
this.modal10=false
// this.isDisable=true
this.emailInline.modalArr=[]
this.emailInline.theme=''
this.emailInline.receiveEmail=''
this.emailInline.templateContent=''
this.sad=''
this.fileList=[]
this.emailInline.moo=''
this.emailMOdal=false
this.emailMassage=false
this.emailIdArr=[]
this.emailFlowStatus=''
this.formInline.UpdateOWER=''
this.formInline.UpdateVIEW=''
this.formInline.UpdateTIME=''
this.formInline.sendWeixin=true
this.emailInline.copyname=''
this.isShowTwo=false
this.uploadFileList=[]
this.clearInterviewee()
this.SouSuo(this.pageT)
this.modal10 = false
this.modal11 = true
this.errorInfo = res.data.body.message
}
})
}else{
......@@ -1527,13 +1563,14 @@ export default {
sendEmail(formData).then(res=>{
this.isDisable=true
if(res.data.success==true){
this.$Notice.success({
setTimeout(() => {
this.$Notice.success({
title: '提示',
desc: '发送邮件成功'
})
})
}, 500)
this.emailMOdal=false
this.modal10=false
// this.isDisable=true
this.modal10=false
this.emailInline.modalArr=[]
this.emailInline.theme=''
this.emailInline.receiveEmail=''
......@@ -1557,34 +1594,9 @@ export default {
this.SouSuo(this.pageT)
}
if(res.data.success==false){
this.$Notice.error({
title: '提示',
desc: '发送邮件失败'
});
this.emailMOdal=false
this.modal10=false
// this.isDisable=true
this.emailInline.modalArr=[]
this.emailInline.theme=''
this.emailInline.receiveEmail=''
this.emailInline.templateContent=''
this.sad=''
this.fileList=[]
this.emailInline.moo=''
this.emailMOdal=false
this.emailMassage=false
this.emailIdArr=[]
this.emailFlowStatus=''
this.formInline.UpdateOWER=''
this.formInline.UpdateVIEW=''
this.formInline.UpdateTIME=''
this.formInline.sendWeixin=true
this.emailInline.copyname=''
this.isShowTwo=false
this.isLimitSize=false
this.uploadFileList=[]
this.clearInterviewee()
this.SouSuo(this.pageT)
this.modal10 = false
this.modal11 = true
this.errorInfo = res.data.body.message
}
})
}
......@@ -1648,9 +1660,6 @@ export default {
this.isDisable=true
}
},
getEditorValue(value){
console.log(value,3333333333)
},
delateFile(index){
this.fileList.splice(index,1)
},
......@@ -1686,28 +1695,32 @@ export default {
if (res.data.success == true) {
this.clearInterviewee()
this.modal8 = false
setTimeout(() => {
this.$Notice.success({
title: '提示',
desc: '发送成功'
})
}, 500)
} else{
setTimeout(() => {
this.$Notice.success({
title: '提示',
desc: '发送成功'
});
} else{
this.$Notice.error({
title: '提示',
desc: '发送失败'
});
desc: '发送失败'
})
}, 500)
this.clearInterviewee()
this.modal8 = false
}
})
})
},
remoteMethod: _debounce(function(query){
this.options = []
remoteMethod: function(query){
if (query !== '') {
this.loading1 = true;
setTimeout(() => {
this.loading1 = false;
let list = []
query = query.split('(')[0]
findCompanyEmailByKey(query).then(res => {
list = res
this.options = list.data.body
......@@ -1716,7 +1729,7 @@ export default {
} else {
this.options = [];
}
}, 500),
},
removeInterviewee (value) {
this.interviewee.map((item, index) => {
if (value&&item.id == value.id) {
......@@ -1744,10 +1757,103 @@ export default {
this.ajaxData.map(item => {
item.STATES = false
})
},
getfocus(form, name, e){
let vm = this;
let value = this[form][name]
if(name == 'receiveEmail') {
this.tip&&this.$refs[form].fields.forEach(function (e) {
if (e.prop == name) {
e.resetField()
vm[form][name] = value
vm.tip = false
}
})
} else {
if (name=='UpdateTIME'&&e==false){ // 时间选择器关闭弹框的时候
this.$refs.formInline.validateField('UpdateTIME', (e) => {})
return
}
if (name=='UpdateVIEW'&&e==false){ // 选择关闭弹框的时候
this.$refs.formInline.validateField('UpdateVIEW', (e) => {})
return
}
this.$refs[form].fields.forEach(function (e) {
if (e.prop == name) {
e.resetField()
vm[form][name] = value
}
})
}
},
submit() {
let flag = false
this.$refs.emailInline.validate(val => {
if (!val) {
flag = true
return
}
})
this.$refs.formInline.validate(val => {
if (!val) {
flag = true
return
}
})
if (!flag){
this.modal10=true
}
},
cancelSubmit(){
this.modal11= false
this.emailMOdal=false
this.emailInline.modalArr=[]
this.emailInline.theme=''
this.emailInline.receiveEmail=''
this.emailInline.templateContent=''
this.sad=''
this.fileList=[]
this.emailInline.moo=''
this.emailMOdal=false
this.emailMassage=false
this.emailIdArr=[]
this.emailFlowStatus=''
this.formInline.UpdateOWER=''
this.formInline.UpdateVIEW=''
this.formInline.UpdateTIME=''
this.formInline.sendWeixin=true
this.emailInline.copyname=''
this.isShowTwo=false
this.isLimitSize=false
this.uploadFileList=[]
this.clearInterviewee()
}
},
watch: {
'$route' (to, from) {
this.searchInfo={
pageSize:30,
pageIndex:1,
id:'',
SEX:'',
Edu:'',
ccc:'',
itemSelect:'',
STA:[],
status:"",
ownerWorkYears1:'',
ownerWorkYears2:'',
}
this.activeClass = 0
this.clickIndex1 = 0
this.clickIndex2 = 0
this.lickIndex3 = 0
this.keywords=''
this.lrgs=''
this.state.map(item => {
item.sta = item.status3=='不限' ?true:false
})
let parmars={
pageSize:this.searchInfo.pageSize,
pageIndex:this.searchInfo.pageIndex,
......@@ -1813,11 +1919,11 @@ export default {
}
},
deep: true
},
}
},
mounted(){
this.SouSuo()
this.SouSuo(null, 'init')
}
}
</script>
......@@ -1826,28 +1932,48 @@ export default {
width: 100%;
height: 100%
}
.wechat{
position: absolute;
right: -5px;
top:30%;
span{
font-size: 13px;
}
}
.bar{
display:flex;
align-items: center;
position: relative;
.left{
position: absolute;
right: 10px;
}
.leftBtn{
right: 90px;
}
}
.channel-left{
height:100%;
width: 29%;
height: 100%;
width: 29.5%;
box-shadow:#dcdee2 0 0 6px 1px;
float: left;
box-shadow: #dcdee2 0 0 6px 1px;
/* border: 1px solid #999999; */
}
.channel-right{
height:100%;
overflow: hidden;
width: 69%;
height: 100%;
overflow: hidden;
width: 70.5%;
float: left;
margin-left: 15px;
background:rgba(255,255,255,1);
position:relative;
}
.resumeRightContentTop{
width: 100%;
height: 90%
height: 100%;
overflow: auto;
}
.Resumecontent{
width: 100%;
margin-bottom:0px;
}
.red{
background: LightGray
......@@ -1856,7 +1982,6 @@ export default {
height:25px;
font-size: 8px;
line-height: 25px;
margin-top:10px
}
.Recode span{
margin-left:20px
......@@ -1874,34 +1999,26 @@ select{
.active3{
color:#2d8cf0;
}
.sex span:first-child{
margin-left: 0px
}
.sex span:not(:first-child){
margin-left: 30px
.sex span{
margin-right: 20px;
}
.Education{
width: 100%;
}
.Education span{
width: 87px;
display:inline-block;
}
.Education span:nth-child(1){
width: 45px;
margin-right: 20px;
display:inline-block;
}
.state{
width: 100%;
/* border:1px solid red */
margin-right: 20px;
}
.state span{
width: 60px;
/* border:1px solid black; */
margin-right: 20px;
display: inline-block;
}
.state span:nth-child(1){
width: 45px;
margin-right: 20px;
display:inline-block;
}
.text1{
......@@ -1913,7 +2030,6 @@ select{
.text2{
width: 80%;
height: 60px;
background:rgb(253,85,83);
margin: 30px 0 0 30px
}
.text3{
......@@ -1924,11 +2040,7 @@ select{
}
.detailResume{
width:100%;
/* border: 1px solid black; */
height:60px
}
.a div:nth-child(2n){
background:rgba(241,241,241,1);
height:60px;
}
.emailModal-title{
height: 280px;
......@@ -1966,14 +2078,14 @@ select{
}
.badge{
position: absolute;
top: -32%;
right: -15px;
top: -50%;
right: -18px;
}
.badges {
right: -30px;
}
.badges1 {
right: -21px;
right: -25px;
}
.interviewee{
float:left;
......@@ -2006,5 +2118,19 @@ select{
margin-bottom: 10px;
}
}
</style>
.grey{
background:rgba(241,241,241,1);
}
</style>
<style>
.emailForm .ivu-form-item-label{
font-size: 14px
}
.ivu-form-item-content{
font-size: 14px;
}
.ivu-form-item-error-tip{
font-size:12px;
}
</style>
......@@ -124,6 +124,7 @@
</template>
<script>
import {seedetail} from '../../api/resume.server'
import localStorage from '../../service/localstorage.service.js'
import {
sapi
}from '../../config'
......@@ -144,9 +145,10 @@ export default {
getDETAIL(){
this.detialID=this.$route.query.id
this.showBtn=this.$route.query.noShowBtn
console.log(this.showBtn,555555)
let token = this.$route.query.token || ''
let parmars={
resumeId:this.$route.query.id
resumeId:this.$route.query.id,
token
}
seedetail(parmars).then(res=>{
this.resume=res.data.body.resume
......@@ -166,14 +168,13 @@ export default {
},
mounted(){
this.getDETAIL()
console.log(this.$route.query.noShowBtn,8888)
}
}
</script>
<style scoped>
.resumeDetail{
width: 860px;
margin: 30px auto
margin: 30px auto;
}
.personalInformation{
width:860px;
......
......@@ -38,7 +38,7 @@
</Form>
</div>
<div class="submission">
<Button type='primary' @click="confirmSubmission" >提交</Button>
<Button type='primary' @click="confirmSubmission" :loading="loading">提交</Button>
</div>
<Modal
v-model="modal3"
......@@ -73,6 +73,7 @@ export default {
return {
docmHeight: '0',
showHeight: '0',
loading: false,
hidshow:true,
isResize:false,
modal3:false,
......@@ -193,8 +194,10 @@ export default {
mobile:this.formInline.phoneNUmber,
takeResume:this.formInline.model2
}
this.loading = true
submitMassage(parmars).then(res=>{
if(res.data.success==true){
this.loading = false
this.formInline.model1=''
this.formInline.model2=''
this.formInline.Inviter=''
......
......@@ -320,6 +320,7 @@ import {uploadFile} from '../../service/ajax'
return
}
this.uploadModal = true
this.filetile='上传中请稍后...'
uploadFile({
headers: this.headers,
data: this.dataList,
......@@ -334,9 +335,10 @@ import {uploadFile} from '../../service/ajax'
}, 200)
},
onSuccess: res => {
this.handleSuccess(res, this.files);
this.activeT=true
this.filetile='上传完成'
setTimeout(() => {
this.handleSuccess(res, this.files);
this.activeT=true
}, 1000)
},
onError: (err, response) => {
this.handleError(err, response, this.files);
......@@ -345,11 +347,12 @@ import {uploadFile} from '../../service/ajax'
},
handleProgress(e) {
this.dataList.map(item => {
item.percentage = e.percent
item.percentage = e.percent-5
})
},
handleSuccess (res, files) {
let data = res.body
this.filetile='上传完成'
for(let key in data){
let code = data[key].code
this.Code=data[key].code
......@@ -360,7 +363,7 @@ import {uploadFile} from '../../service/ajax'
if(item.Code==2){progressStatus={'2':'wrong'}}
item.status = this.progressStatus[code]
item.Code=this.Code
console.log(this.progressStatus[code])
item.percentage=100
}
})
}
......@@ -387,6 +390,7 @@ import {uploadFile} from '../../service/ajax'
this.dataList = []
this.fileName = ''
this.activeT=false
this.filetile='上传中请稍后...'
this.serchlist()
},
//下载单条简历
......
......@@ -11,11 +11,40 @@ instance.defaults.withCredentials = true;
instance.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';
instance.defaults.headers['X-Requested-With'] = 'XMLHttpRequest'
let needLoadingRequestCount = 0
function startLoading() {
store.state.loading = true
}
function endLoading() {
store.state.loading = false
}
function showFullScreenLoading () {
if (needLoadingRequestCount === 0) {
startLoading()
}
needLoadingRequestCount++
}
function tryHideFullScreenLoading() {
if (needLoadingRequestCount <= 0) return
needLoadingRequestCount--
if (needLoadingRequestCount === 0) {
setTimeout(() => {
endLoading()
}, 200)
}
}
let needLoading = ['resume/findListByQueryVO', 'sendMail/sendEmailTemplate', 'resume/forwardResume', 'interview/findListByQueryVO']
instance.interceptors.request.use(function (config) {
// 在发送请求之前做些什么
if (!config.headers['Content-Type']) {
config.headers['Content-Type'] = 'application/x-www-form-urlencoded'
}
let url = config.url.split('api/')[1]
let headers = config.headers
if (headers.status!='init'&&needLoading.includes(url)){
showFullScreenLoading()
}
delete headers.status
return config;
}, function (error) {
// 对请求错误做些什么
......@@ -28,6 +57,7 @@ instance.interceptors.response.use(function (response) {
'901': '',
'902': 'cookie已失效,请重新登录'
}
tryHideFullScreenLoading()
if(response.status >= 200 && response.status < 300){
let code = response.data&&response.data.body&&response.data.body.code || ''
if (code == '900' || code == '901' || code == '902'){
......@@ -43,7 +73,7 @@ instance.interceptors.response.use(function (response) {
store.dispatch('cookieTipsHide', false)
}, 2000)
}
// router.replace({name: 'login'})
router.replace({name: 'login'})
}
if(response.data.success){
return Promise.resolve(response)
......
......@@ -36,4 +36,91 @@ export function _throttle (fn, interval) {
fn.apply(self, args)
}
}
}
\ No newline at end of file
}
export function emailValidata (rule, value, callback){
let field = rule.field
let reg = rule.pattern
switch(field){
case 'receiveEmail':
if (!value) {
this.tip = true
this.isDisable=false
callback(new Error('收件人不能为空'))
}
else if (rule.pattern&&!rule.pattern.test(value)) {
this.tip = true
this.isDisable=false
callback(new Error('请输入正确收件人地址'))
}else {
this.tip = false
this.isDisable=true
callback()
}
break;
case 'theme':
if (!value) {
this.isDisable=false
callback(new Error('主题能为空'))
} else {
this.isDisable=true
callback()
}
break;
case 'copyname':
if (value&&reg&&!reg.test(value)) {
this.isDisable=false
callback(new Error('请输入正确抄送地址'))
} else {
this.isDisable=true
callback()
}
break;
case 'UpdateOWER':
if (!value) {
this.isDisable=false
callback(new Error('邀约人不能为空'))
} else {
this.isDisable=true
callback()
}
break;
case 'UpdateTIME':
if (!value) {
this.isDisable=false
callback(new Error('面试时间不能为空'))
} else {
this.isDisable=true
callback()
}
break;
case 'UpdateVIEW':
if (!value) {
this.isDisable=false
callback(new Error('面试官不能为空'))
} else {
this.isDisable=true
callback()
}
break;
default:
callback()
break;
}
}
export const emailRule = /^((([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6}\;))*(([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6})))$/
export function vidte(rule,value,callback){
if(this.emailMassage==true){
callback(new Error('你尚未选择简历,请先选择简历'))
}
else if(this.allEmailVilitor==true){
callback(new Error('不能选择多份简历,请选择单份简历'))
}
else{
callback ()
}
}
export function validator (rule, value, callback){
if (!value)this.$Notice.warning({title: '提示',desc: '请输入您要通知的面试官'})
callback()
}
\ No newline at end of file
......@@ -9,6 +9,7 @@ const state = {
cookieTips: false,
interviewee: [],
channelInterviewee: [],
loading: false
}
export default new Vuex.Store({
mutations,
......
......@@ -23,7 +23,7 @@ CKEDITOR.editorConfig = function( config ) {
{ name: 'document', groups: [ 'mode', 'document', 'doctools' ] },
];
config.removeButtons = 'Cut,Copy,Paste,PasteText,PasteFromWord,Save,Templates,NewPage,Preview,Print,About,ShowBlocks,Flash,PageBreak,Iframe,Anchor,SelectAll,BidiLtr,BidiRtl,Language,CreateDiv,Superscript,Subscript,Form,Checkbox,Radio,TextField,Textarea,Select,Button,ImageButton,HiddenField,Find,Replace;Smiley,Smiley,Replace';
config.removeButtons = 'Cut,Copy,Paste,PasteText,PasteFromWord,Save,Templates,NewPage,Preview,Print,About,ShowBlocks,Flash,PageBreak,Iframe,Anchor,SelectAll,BidiLtr,BidiRtl,Language,CreateDiv,Superscript,Subscript,Form,Checkbox,Radio,TextField,Textarea,Select,Button,ImageButton,HiddenField,Find,Replace;Smiley,Smiley,Replace,Styles,Format,RemoveFormat,SpecialChar,Maximize,Scayt,Source';
config.removeDialogTabs = 'image:advanced;link:advanced;flash:advanced;editdiv:advanced; creatediv:advanced;';
config.removePlugins = 'elementspath,resize'; // 移除编辑器底部状态栏显示的元素路径和调整编辑器大小的按钮
config.image_previewText = ' '; // 图片信息面板预览区内容的文字内容,默认显示CKEditor自带的内容
......
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