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 = { ...@@ -15,7 +15,7 @@ module.exports = {
// Various Dev Server settings // Various Dev Server settings
host: '0.0.0.0', // can be overwritten by process.env.HOST 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, autoOpenBrowser: true,
errorOverlay: true, errorOverlay: true,
notifyOnErrors: true, notifyOnErrors: true,
......
...@@ -49,8 +49,8 @@ export default { ...@@ -49,8 +49,8 @@ export default {
user-select: text !important; user-select: text !important;
} }
.pc { .pc {
min-width: 1341px; height: 100%;
min-height: 741px; min-width: 860px;
} }
.mobile { .mobile {
......
...@@ -23,10 +23,11 @@ export function SInterview(tid) { ...@@ -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: { return axios.post(`${sapi}/api/interview/findListByQueryVO`,parmars,{headers: {
'Content-Type':'application/json;', 'Content-Type':'application/json;',
'X-Requested-With':'XMLHttpRequest' 'X-Requested-With':'XMLHttpRequest',
status
}}) }})
} }
//查看简历详情页 //查看简历详情页
...@@ -37,9 +38,7 @@ export function seedetail (parmars) { ...@@ -37,9 +38,7 @@ export function seedetail (parmars) {
} }
//面试官查询 //面试官查询
export function Serchinterviewor() { export function Serchinterviewor() {
return axios.post(`${sapi}/api/interview/findInterviewerList`,{headers: { return axios.get(`${sapi}/api/interview/findInterviewerList`)
'Content-Type':'application/json;',
}})
} }
//邀约人查询 //邀约人查询
export function SerchInvitationOwer() { export function SerchInvitationOwer() {
......
...@@ -17,14 +17,15 @@ export function downloadone (parmars) { ...@@ -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: { return axios.post(`${sapi}/api/resume/findListByQueryVO`,parmars,{headers: {
'Content-Type':'application/json' 'Content-Type':'application/json',
status
}}) }})
} }
//查看简历详情页 //查看简历详情页
export function seedetail (parmars) { 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' 'Content-Type':'application/json'
}}) }})
} }
......
<template> <template>
<Row id="home" class="home"> <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"> <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"> <Menu style="width: 100%;" ref='subMenu' :active-name="levelThreeName" :open-names="levelTwoName" @on-select="go">
<template v-for="(menu) in childMenu" > <template v-for="(menu) in childMenu" >
...@@ -15,7 +16,7 @@ ...@@ -15,7 +16,7 @@
</Menu> </Menu>
</Col> </Col>
<Col span="21" class="content" style="width:83%;height:100%"> <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"> <Col span="20">
<Menu mode="horizontal" :active-name="levelOneName" @on-select="selectMenu"> <Menu mode="horizontal" :active-name="levelOneName" @on-select="selectMenu">
<MenuItem v-for="menu in menuList" :name="menu.name" :key="menu.name" > <MenuItem v-for="menu in menuList" :name="menu.name" :key="menu.name" >
...@@ -23,15 +24,15 @@ ...@@ -23,15 +24,15 @@
</MenuItem> </MenuItem>
</Menu> </Menu>
</Col> </Col>
<Col span="2" class="account" style=""> <Col span="2" class="account" style="text-align:right;">
<span style="display:inline-block;line-height:6%;margin-left:30%">{{massage}}</span> <span style="display:inline-block;line-height:6%;margin-left:30%;">{{massage}}</span>
</Col> </Col>
<Col span="2" class="sign-out" > <Col span="1" class="sign-out" >
<a @click="loginOut" style="margin-left:38%">退出</a> <a @click="loginOut" style="margin-left:38%">退出</a>
</Col> </Col>
</Row> </Row>
<Row style="height:94%"> <Row style="height:94%">
<router-view></router-view> <router-view></router-view>
</Row> </Row>
</Col> </Col>
</Row> </Row>
...@@ -39,6 +40,8 @@ ...@@ -39,6 +40,8 @@
<script> <script>
import {getpersonMassage,loginOUT,adoptOneSeeResumeList,getChannelMassage,judeAdmin} from '../api/home.server.js' import {getpersonMassage,loginOUT,adoptOneSeeResumeList,getChannelMassage,judeAdmin} from '../api/home.server.js'
import localstorage from '../service/localstorage.service.js' import localstorage from '../service/localstorage.service.js'
import loading from '../components/loading.vue'
import {mapState} from 'vuex'
export default{ export default{
data() { data() {
return { return {
...@@ -150,6 +153,14 @@ import localstorage from '../service/localstorage.service.js' ...@@ -150,6 +153,14 @@ import localstorage from '../service/localstorage.service.js'
} }
}, },
computed: {
...mapState({
showLoading: state => state.loading
})
},
components: {
loading
},
methods: { methods: {
go(name) { go(name) {
this.levelThreeName = name this.levelThreeName = name
...@@ -161,7 +172,7 @@ import localstorage from '../service/localstorage.service.js' ...@@ -161,7 +172,7 @@ import localstorage from '../service/localstorage.service.js'
}) })
}) })
}, },
selectMenu(name, refesh) { async selectMenu(name, refesh) {
// // refesh是否为刷新页面 // // refesh是否为刷新页面
this.levelOneName = name this.levelOneName = name
const menus = this.menuList.filter(v => name === v.name) const menus = this.menuList.filter(v => name === v.name)
...@@ -173,7 +184,7 @@ import localstorage from '../service/localstorage.service.js' ...@@ -173,7 +184,7 @@ import localstorage from '../service/localstorage.service.js'
this.levelThreeName = initName.levelThreeName this.levelThreeName = initName.levelThreeName
} }
if (menus[0].loadMenu) { // 简历管理模块需要加载渠道简历 if (menus[0].loadMenu) { // 简历管理模块需要加载渠道简历
this.getChannelMenu() await this.getChannelMenu()
} }
if (refesh&&this.$route.path.indexOf('channel') > -1) { if (refesh&&this.$route.path.indexOf('channel') > -1) {
this.levelThreeName = this.$route.path.split('/')[2] this.levelThreeName = this.$route.path.split('/')[2]
...@@ -202,7 +213,7 @@ import localstorage from '../service/localstorage.service.js' ...@@ -202,7 +213,7 @@ import localstorage from '../service/localstorage.service.js'
}, },
getChannelMenu(){ getChannelMenu(){
this.menuList[0].child[1].child = [] this.menuList[0].child[1].child = []
getChannelMassage().then(res=>{ return getChannelMassage().then(res=>{
if (res.data.status == false || !res.data.success) { if (res.data.status == false || !res.data.success) {
return return
} }
...@@ -287,11 +298,11 @@ import localstorage from '../service/localstorage.service.js' ...@@ -287,11 +298,11 @@ import localstorage from '../service/localstorage.service.js'
<style lang="less" scoped> <style lang="less" scoped>
.home{ .home{
height: 100%; height: 100%;
overflow: hidden;
.aside{ .aside{
// min-height: 2050px;
border-right: 1px solid #dcdee2; border-right: 1px solid #dcdee2;
box-shadow: #dcdee2 0 0 6px 1px; box-shadow: #dcdee2 0 0 6px 1px;
// width:15%; height: 100%;
img{ img{
height: 49px; height: 49px;
width: 100%; width: 100%;
...@@ -311,13 +322,13 @@ import localstorage from '../service/localstorage.service.js' ...@@ -311,13 +322,13 @@ import localstorage from '../service/localstorage.service.js'
line-height: 55px; line-height: 55px;
border-bottom: 1px solid rgb(220, 222, 226); border-bottom: 1px solid rgb(220, 222, 226);
font-size: 14px; font-size: 14px;
overflow:hidden;
.sign-out{ .sign-out{
line-height: 6% line-height: 6%
} }
.ivu-menu{ .ivu-menu{
height: 35px; height: 43px;
line-height: 35px; line-height: 43px;
margin: 0 10px;
.ivu-menu-item{ .ivu-menu-item{
padding: 0 13px; padding: 0 13px;
margin: 0 49px; 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 @@ ...@@ -84,7 +84,7 @@
</div> </div>
</div> </div>
<div class="interview-right"> <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%"> <FormItem label="关键词:" style="margin-top:20px;margin-left:1%">
<Input placeholder="请输入关键词" style="width:80%" v-model="keywords" @keyup.enter.native="Sousuo()"/> <Input placeholder="请输入关键词" style="width:80%" v-model="keywords" @keyup.enter.native="Sousuo()"/>
</FormItem> </FormItem>
...@@ -97,9 +97,11 @@ ...@@ -97,9 +97,11 @@
</Select> </Select>
</FormItem> </FormItem>
<FormItem label="面试官:" style="margin-top:20px"> <FormItem label="面试官:" style="margin-top:20px">
<Select style="width:80%;height:20px" placeholder="请选择" :label-in-value='true' @on-change='selectinterviewElement'> <Select style="width:80%;height:20px" :label-in-value='true' @on-change='selectinterviewElement' filterable remote
<Option v-for="(item,index) in Interviewer" :key="index" :value="index" >{{item}}</Option> :remote-method="remoteMethod"
</Select> :loading="loading1" placeholder='请输入面试官全名' clearable>
<Option v-for='(item, index) in options' :key='index' :value='item.name'>{{item.name}}({{item.email}})</Option>
</Select>
</FormItem> </FormItem>
<FormItem label="状态:" class="state2"> <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> <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 @@ ...@@ -165,17 +167,21 @@
<Modal <Modal
v-model="modal2" v-model="modal2"
:closable="false" :closable="false"
width='300px'> width='400px'>
<h3 style="text-align:center">更改约面信息</h3> <h3 style="text-align:center">更改约面信息</h3>
<Form :label-width="80" ref="formInline" :rules="ruleInline" :model="formInline"> <Form :label-width="80" ref="formInline" :rules="ruleInline" :model="formInline">
<FormItem label="邀约人" style="margin-top:20px" prop="UpdateOWER"> <FormItem label="邀约人" style="margin-top:20px" prop="UpdateOWER">
<Input v-model="formInline.UpdateOWER" :maxlength="5"/> <Input v-model="formInline.UpdateOWER" :maxlength="5"/>
</FormItem> </FormItem>
<FormItem label="面试时间" style="margin-top:20px" prop="UpdateTIME"> <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>
<FormItem label="面试官" style="margin-top:20px" prop="UpdateVIEW"> <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> </FormItem>
</Form> </Form>
<div slot='footer' style="text-align:center"> <div slot='footer' style="text-align:center">
...@@ -227,6 +233,7 @@ ...@@ -227,6 +233,7 @@
<script> <script>
import moment from 'moment' import moment from 'moment'
import {changeinterviewMassage,SerchList,Serchinterviewor,SerchInvitationOwer,NewAddInterview,SInterview,oppenInterview,recodeLIST,changestatus,seedetail,formstatus} from '../../api/interview.server.js' 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 { export default {
data(){ data(){
return{ return{
...@@ -303,7 +310,9 @@ export default { ...@@ -303,7 +310,9 @@ export default {
activeName:'', activeName:'',
Essentialinformation:[], Essentialinformation:[],
serchData:[], serchData:[],
serchData2:[] serchData2:[],
options: [],
loading1: false
} }
}, },
methods: { methods: {
...@@ -404,7 +413,7 @@ export default { ...@@ -404,7 +413,7 @@ export default {
}) })
}, },
// 查询面试信息 // 查询面试信息
serchListInterview(page) { serchListInterview(page,status) {
page = typeof(page)=='number'?page:1 page = typeof(page)=='number'?page:1
this.searchInfo.pageIndex = page this.searchInfo.pageIndex = page
this.pageIndex = page this.pageIndex = page
...@@ -419,7 +428,7 @@ export default { ...@@ -419,7 +428,7 @@ export default {
inviterName:'', inviterName:'',
} }
} }
SerchList(parmars).then(res=>{ SerchList(parmars,status).then(res=>{
if(res.data.success==true){ if(res.data.success==true){
this.spinShow=false this.spinShow=false
this.totalSize=res.data.body.totalNumber this.totalSize=res.data.body.totalNumber
...@@ -442,12 +451,8 @@ export default { ...@@ -442,12 +451,8 @@ export default {
}) })
}, },
// 面试官查询 // 面试官查询
Serchlistinterview(){ SerchlistinterviewList(){
Serchinterviewor().then(res=>{ Serchinterviewor().then(res=>{
console.log(res)
if (!res.data.succes) {
return
}
this.Interviewer=res.data.body this.Interviewer=res.data.body
this.Interviewer.unshift('不限') this.Interviewer.unshift('不限')
}) })
...@@ -528,7 +533,7 @@ export default { ...@@ -528,7 +533,7 @@ export default {
title: '提示', title: '提示',
desc: '已成功重启流程' desc: '已成功重启流程'
}); });
this. serchListInterview() this.serchListInterview()
} }
}) })
this.modal4=false this.modal4=false
...@@ -683,10 +688,10 @@ export default { ...@@ -683,10 +688,10 @@ export default {
this.clickIndex1=Tindex this.clickIndex1=Tindex
}, },
selectinterviewElement(e){ selectinterviewElement(e){
if(e.label=='不限'){ if(e.value=='不限'){
this.interviewerName='' this.interviewerName=''
}else{ }else{
this.interviewerName=e.label this.interviewerName=e.value
} }
}, },
selectinterviewElement2(e){ selectinterviewElement2(e){
...@@ -706,16 +711,43 @@ export default { ...@@ -706,16 +711,43 @@ export default {
this.pageSize=page this.pageSize=page
this.Sousuo() 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(){ mounted(){
this.serchListInterview() this.serchListInterview(null, 'init')
this.Serchlistinterview() // this.Serchlistinterview()
this.SerchInvitation() this.SerchInvitation()
this.SerchlistinterviewList()
} }
} }
</script> </script>
<style> <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{ .interview{
height: 100%; height: 100%;
width:100%; width:100%;
...@@ -809,9 +841,13 @@ option:hover{ ...@@ -809,9 +841,13 @@ option:hover{
color: blue; color: blue;
} }
.Education2{ .Education2{
width:380px; width:85%;
}
.Education2 span{
display: inline-block;
margin-right: 20px;
} }
.Education2 :nth-child(2){ /* .Education2 :nth-child(2){
margin-left: 11% margin-left: 11%
} }
.Education2 :nth-child(3){ .Education2 :nth-child(3){
...@@ -825,11 +861,15 @@ option:hover{ ...@@ -825,11 +861,15 @@ option:hover{
} }
.Education2 :nth-child(7){ .Education2 :nth-child(7){
margin-left: 10% margin-left: 10%
} } */
.state2{ .state2{
width: 380px; width: 85%;
} }
.state2 :nth-child(2){ .state2 span{
display: inline-block;
margin-right: 20px;
}
/* .state2 :nth-child(2){
margin-left: 6% margin-left: 6%
} }
.state2 :nth-child(3){ .state2 :nth-child(3){
...@@ -858,5 +898,5 @@ option:hover{ ...@@ -858,5 +898,5 @@ option:hover{
} }
.state2 :nth-child(13){ .state2 :nth-child(13){
margin-left: 10% margin-left: 10%
} } */
</style> </style>
This diff is collapsed.
This diff is collapsed.
...@@ -124,6 +124,7 @@ ...@@ -124,6 +124,7 @@
</template> </template>
<script> <script>
import {seedetail} from '../../api/resume.server' import {seedetail} from '../../api/resume.server'
import localStorage from '../../service/localstorage.service.js'
import { import {
sapi sapi
}from '../../config' }from '../../config'
...@@ -144,9 +145,10 @@ export default { ...@@ -144,9 +145,10 @@ export default {
getDETAIL(){ getDETAIL(){
this.detialID=this.$route.query.id this.detialID=this.$route.query.id
this.showBtn=this.$route.query.noShowBtn this.showBtn=this.$route.query.noShowBtn
console.log(this.showBtn,555555) let token = this.$route.query.token || ''
let parmars={ let parmars={
resumeId:this.$route.query.id resumeId:this.$route.query.id,
token
} }
seedetail(parmars).then(res=>{ seedetail(parmars).then(res=>{
this.resume=res.data.body.resume this.resume=res.data.body.resume
...@@ -166,14 +168,13 @@ export default { ...@@ -166,14 +168,13 @@ export default {
}, },
mounted(){ mounted(){
this.getDETAIL() this.getDETAIL()
console.log(this.$route.query.noShowBtn,8888)
} }
} }
</script> </script>
<style scoped> <style scoped>
.resumeDetail{ .resumeDetail{
width: 860px; width: 860px;
margin: 30px auto margin: 30px auto;
} }
.personalInformation{ .personalInformation{
width:860px; width:860px;
......
...@@ -38,7 +38,7 @@ ...@@ -38,7 +38,7 @@
</Form> </Form>
</div> </div>
<div class="submission"> <div class="submission">
<Button type='primary' @click="confirmSubmission" >提交</Button> <Button type='primary' @click="confirmSubmission" :loading="loading">提交</Button>
</div> </div>
<Modal <Modal
v-model="modal3" v-model="modal3"
...@@ -73,6 +73,7 @@ export default { ...@@ -73,6 +73,7 @@ export default {
return { return {
docmHeight: '0', docmHeight: '0',
showHeight: '0', showHeight: '0',
loading: false,
hidshow:true, hidshow:true,
isResize:false, isResize:false,
modal3:false, modal3:false,
...@@ -193,8 +194,10 @@ export default { ...@@ -193,8 +194,10 @@ export default {
mobile:this.formInline.phoneNUmber, mobile:this.formInline.phoneNUmber,
takeResume:this.formInline.model2 takeResume:this.formInline.model2
} }
this.loading = true
submitMassage(parmars).then(res=>{ submitMassage(parmars).then(res=>{
if(res.data.success==true){ if(res.data.success==true){
this.loading = false
this.formInline.model1='' this.formInline.model1=''
this.formInline.model2='' this.formInline.model2=''
this.formInline.Inviter='' this.formInline.Inviter=''
......
...@@ -320,6 +320,7 @@ import {uploadFile} from '../../service/ajax' ...@@ -320,6 +320,7 @@ import {uploadFile} from '../../service/ajax'
return return
} }
this.uploadModal = true this.uploadModal = true
this.filetile='上传中请稍后...'
uploadFile({ uploadFile({
headers: this.headers, headers: this.headers,
data: this.dataList, data: this.dataList,
...@@ -334,9 +335,10 @@ import {uploadFile} from '../../service/ajax' ...@@ -334,9 +335,10 @@ import {uploadFile} from '../../service/ajax'
}, 200) }, 200)
}, },
onSuccess: res => { onSuccess: res => {
this.handleSuccess(res, this.files); setTimeout(() => {
this.activeT=true this.handleSuccess(res, this.files);
this.filetile='上传完成' this.activeT=true
}, 1000)
}, },
onError: (err, response) => { onError: (err, response) => {
this.handleError(err, response, this.files); this.handleError(err, response, this.files);
...@@ -345,11 +347,12 @@ import {uploadFile} from '../../service/ajax' ...@@ -345,11 +347,12 @@ import {uploadFile} from '../../service/ajax'
}, },
handleProgress(e) { handleProgress(e) {
this.dataList.map(item => { this.dataList.map(item => {
item.percentage = e.percent item.percentage = e.percent-5
}) })
}, },
handleSuccess (res, files) { handleSuccess (res, files) {
let data = res.body let data = res.body
this.filetile='上传完成'
for(let key in data){ for(let key in data){
let code = data[key].code let code = data[key].code
this.Code=data[key].code this.Code=data[key].code
...@@ -360,7 +363,7 @@ import {uploadFile} from '../../service/ajax' ...@@ -360,7 +363,7 @@ import {uploadFile} from '../../service/ajax'
if(item.Code==2){progressStatus={'2':'wrong'}} if(item.Code==2){progressStatus={'2':'wrong'}}
item.status = this.progressStatus[code] item.status = this.progressStatus[code]
item.Code=this.Code item.Code=this.Code
console.log(this.progressStatus[code]) item.percentage=100
} }
}) })
} }
...@@ -387,6 +390,7 @@ import {uploadFile} from '../../service/ajax' ...@@ -387,6 +390,7 @@ import {uploadFile} from '../../service/ajax'
this.dataList = [] this.dataList = []
this.fileName = '' this.fileName = ''
this.activeT=false this.activeT=false
this.filetile='上传中请稍后...'
this.serchlist() this.serchlist()
}, },
//下载单条简历 //下载单条简历
......
...@@ -11,11 +11,40 @@ instance.defaults.withCredentials = true; ...@@ -11,11 +11,40 @@ instance.defaults.withCredentials = true;
instance.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded'; instance.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';
instance.defaults.headers['X-Requested-With'] = 'XMLHttpRequest' 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) { instance.interceptors.request.use(function (config) {
// 在发送请求之前做些什么 // 在发送请求之前做些什么
if (!config.headers['Content-Type']) { if (!config.headers['Content-Type']) {
config.headers['Content-Type'] = 'application/x-www-form-urlencoded' 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; return config;
}, function (error) { }, function (error) {
// 对请求错误做些什么 // 对请求错误做些什么
...@@ -28,6 +57,7 @@ instance.interceptors.response.use(function (response) { ...@@ -28,6 +57,7 @@ instance.interceptors.response.use(function (response) {
'901': '', '901': '',
'902': 'cookie已失效,请重新登录' '902': 'cookie已失效,请重新登录'
} }
tryHideFullScreenLoading()
if(response.status >= 200 && response.status < 300){ if(response.status >= 200 && response.status < 300){
let code = response.data&&response.data.body&&response.data.body.code || '' let code = response.data&&response.data.body&&response.data.body.code || ''
if (code == '900' || code == '901' || code == '902'){ if (code == '900' || code == '901' || code == '902'){
...@@ -43,7 +73,7 @@ instance.interceptors.response.use(function (response) { ...@@ -43,7 +73,7 @@ instance.interceptors.response.use(function (response) {
store.dispatch('cookieTipsHide', false) store.dispatch('cookieTipsHide', false)
}, 2000) }, 2000)
} }
// router.replace({name: 'login'}) router.replace({name: 'login'})
} }
if(response.data.success){ if(response.data.success){
return Promise.resolve(response) return Promise.resolve(response)
......
...@@ -36,4 +36,91 @@ export function _throttle (fn, interval) { ...@@ -36,4 +36,91 @@ export function _throttle (fn, interval) {
fn.apply(self, args) 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 = { ...@@ -9,6 +9,7 @@ const state = {
cookieTips: false, cookieTips: false,
interviewee: [], interviewee: [],
channelInterviewee: [], channelInterviewee: [],
loading: false
} }
export default new Vuex.Store({ export default new Vuex.Store({
mutations, mutations,
......
...@@ -23,7 +23,7 @@ CKEDITOR.editorConfig = function( config ) { ...@@ -23,7 +23,7 @@ CKEDITOR.editorConfig = function( config ) {
{ name: 'document', groups: [ 'mode', 'document', 'doctools' ] }, { 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.removeDialogTabs = 'image:advanced;link:advanced;flash:advanced;editdiv:advanced; creatediv:advanced;';
config.removePlugins = 'elementspath,resize'; // 移除编辑器底部状态栏显示的元素路径和调整编辑器大小的按钮 config.removePlugins = 'elementspath,resize'; // 移除编辑器底部状态栏显示的元素路径和调整编辑器大小的按钮
config.image_previewText = ' '; // 图片信息面板预览区内容的文字内容,默认显示CKEditor自带的内容 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