Commit 53aa20b2 authored by zhangderong's avatar zhangderong

no message

parent 2743827d
This source diff could not be displayed because it is too large. You can view the blob instead.
<template> <template>
<div id="app"> <div id="app" :class="appClass">
<router-view/> <router-view/>
</div> </div>
</template> </template>
...@@ -7,17 +7,26 @@ ...@@ -7,17 +7,26 @@
<script> <script>
export default { export default {
name: 'App', name: 'App',
data() {
return {
appClass: 'pc',
}
},
created: function () {
if (document.documentElement.clientWidth <= 640) {
this.appClass = 'mobile'
}
}
}; };
</script> </script>
<style> <style>
#app { #app{
position: absolute; position: absolute;
top: 0; top: 0;
bottom: 0; bottom: 0;
width: 100%; width: 100%;
min-width: 1341px; cursor:pointer;
min-height: 741px;
text-align: left; text-align: left;
font-family: 'PingFangSC-Regular', 'Avenir', Helvetica, Arial, sans-serif; font-family: 'PingFangSC-Regular', 'Avenir', Helvetica, Arial, sans-serif;
-webkit-font-smoothing: antialiased; -webkit-font-smoothing: antialiased;
...@@ -29,4 +38,13 @@ export default { ...@@ -29,4 +38,13 @@ export default {
-ms-user-select: text !important; /*IE10*/ -ms-user-select: text !important; /*IE10*/
user-select: text !important; user-select: text !important;
} }
.pc {
min-width: 1341px;
min-height: 741px;
}
.mobile {
min-width: unset;
min-height: unset;
}
</style> </style>
import axios from '../service/http.service'
import {
baseApi,contractApi
} from '../config/env.config'
import qs from 'qs'
// 获取个人信息
export function getpersonMassage(params) {
// params=qs.stringify(params)
return axios.get(`/text/api/login/me`,params,{headers: {
'Content-Type':'application/json',
'X-Requested-With':'XMLHttpRequest'
}})
}
// 用户退出
export function loginOUT() {
// params=qs.stringify(params)
return axios.get(`/text/api/login/logout`,{headers: {
'Content-Type':'application/json',
'X-Requested-With':'XMLHttpRequest'
}})
}
//通过某一来源查询简历信息
export function adoptOneSeeResumeList(parmars) {
return axios.post(`/text/api/resume/findListBySource`,parmars,{headers: {
'Content-Type':'application/json',
'X-Requested-With':'XMLHttpRequest'
}})
}
//通过渠道机简历信息
export function getChannelMassage() {
return axios.get(`/text/api/resume/getSourceList`,{headers: {
'Content-Type':'application/json',
'X-Requested-With':'XMLHttpRequest'
}})
}
\ No newline at end of file
...@@ -10,14 +10,15 @@ export function changeinterviewMassage(parmars) { ...@@ -10,14 +10,15 @@ export function changeinterviewMassage(parmars) {
}}) }})
} }
// 重启面试 // 重启面试
export function oppenInterview() { export function oppenInterview(tid,tstatus) {
return axios.post(`/text/api/resumeFlow/reset/14/TO_SEE`,{headers: { console.log(tid,tstatus)
return axios.post(`/text/api/resumeFlow/reset/${tid}/${tstatus}`,{headers: {
'Content-Type':'application/json;', 'Content-Type':'application/json;',
}}) }})
} }
// 终止面试 // 终止面试
export function SInterview(parmars) { export function SInterview(tid) {
return axios.post(`/text/api/resumeFlow/end/14`,parmars,{headers: { return axios.post(`/text/api/resumeFlow/end/${tid}`,{headers: {
'Content-Type':'application/json;', 'Content-Type':'application/json;',
}}) }})
} }
...@@ -25,6 +26,13 @@ export function SInterview(parmars) { ...@@ -25,6 +26,13 @@ export function SInterview(parmars) {
export function SerchList(parmars) { export function SerchList(parmars) {
return axios.post(`/text/api/interview/findListByQueryVO`,parmars,{headers: { return axios.post(`/text/api/interview/findListByQueryVO`,parmars,{headers: {
'Content-Type':'application/json;', 'Content-Type':'application/json;',
'X-Requested-With':'XMLHttpRequest'
}})
}
//查看简历详情页
export function seedetail (parmars) {
return axios.get(`/text/api/html/get/${parmars.resumeId}`,{headers: {
'Content-Type':'application/json'
}}) }})
} }
//面试官查询 //面试官查询
...@@ -44,4 +52,16 @@ export function NewAddInterview(parmars) { ...@@ -44,4 +52,16 @@ export function NewAddInterview(parmars) {
return axios.post(`/text/api/resumeInterview/add`,parmars,{headers: { return axios.post(`/text/api/resumeInterview/add`,parmars,{headers: {
'Content-Type':'application/json;', 'Content-Type':'application/json;',
}}) }})
}
// 查询记录
export function recodeLIST (parmars) {
return axios.post(`/text/api/resumeFlow/history/${parmars.resumeId}`,{headers: {
'Content-Type':'application/json'
}})
}
// 变更状态
export function changestatus (tid,tstatus) {
return axios.post(`/text/api/resumeFlow/uploadStatus/${tid}/${tstatus}`,{headers: {
'Content-Type':'application/json'
}})
} }
\ No newline at end of file
...@@ -7,6 +7,14 @@ import qs from 'qs' ...@@ -7,6 +7,14 @@ import qs from 'qs'
export function login(params) { export function login(params) {
// params=qs.stringify(params) // params=qs.stringify(params)
return axios.post(`/text/api/login/doLogin`,params,{headers: { return axios.post(`/text/api/login/doLogin`,params,{headers: {
'Content-Type':'application/json',
'X-Requested-With':'XMLHttpRequest'
}})
}
//修改密码
export function updatePsd(params) {
// params=qs.stringify(params)
return axios.post(`/text/api/login/modifyPassword`,params,{headers: {
'Content-Type':'application/json' 'Content-Type':'application/json'
}}) }})
} }
\ No newline at end of file
...@@ -15,4 +15,83 @@ export function downloadone (parmars) { ...@@ -15,4 +15,83 @@ export function downloadone (parmars) {
return axios.post(`/text/api/resumeFile/download/formatted/one`,parmars,{headers: { return axios.post(`/text/api/resumeFile/download/formatted/one`,parmars,{headers: {
'Content-Type':'application/x-www-form-urlencoded' 'Content-Type':'application/x-www-form-urlencoded'
}}) }})
}
// 搜索
export function sousuoList (parmars) {
return axios.post(`/text/api/resume/findListByQueryVO`,parmars,{headers: {
'Content-Type':'application/json',
'X-Requested-With':'XMLHttpRequest'
}})
}
//查看简历详情页
export function seedetail (parmars) {
return axios.get(`/text/api/html/get/${parmars.resumeId}`,{headers: {
'Content-Type':'application/json'
}})
}
// 简历pass
export function PASS (parmars) {
console.log(parmars)
return axios.post(`/text/api/resumeFlow/uploadStatus/${parmars.id}/${parmars.status}`,'',{headers: {
'Content-Type':'application/json'
}})
}
// 准备约面
export function TOSEE (parmars) {
return axios.post(`/text/api/resumeFlow/uploadStatus/${parmars.id}/${parmars.status}`,'',{headers: {
'Content-Type':'application/json'
}})
}
// 备选
export function OPTION (parmars) {
return axios.post(`/text/api/resumeFlow/uploadStatus/${parmars.id}/${parmars.status}`,'',{headers: {
'Content-Type':'application/json'
}})
}
// 删除简历
export function deleteREsume (deleteallArr) {
return axios.post(`/text/api/resume/delete`,JSON.stringify(deleteallArr),{headers: {
'Content-Type':'application/json',
'X-Requested-With':'XMLHttpRequest'
}})
}
// 单条下载简历
export function downloadOne (parmars) {
console.log(parmars.resumeId)
return axios.get(`/text/api/resume/download/formatted/one?resumeId=${parmars.resumeId}`,{headers: {
// 'Content-Type':'application/x-www-form-urlencoded'
}})
}
// 批量下载简历
export function downloadALL () {
return axios.get(`/text/api/resumeFile/download/formatted/compress`,{headers: {
'Content-Type':'application/x-www-form-urlencoded'
}})
}
// 导出列表
export function exportLIST (parmars) {
return axios.get(`/text/api/excel/output?optSource=${parmars.optSource}&keywordString=${parmars.keywordString}&company=${parmars.company}&ownerSex=${parmars.ownerSex}&highestDegreeNum=${parmars.highestDegreeNum}&flowStatusList=${parmars.flowStatusList}&ownerWorkYears1=${parmars.ownerWorkYears1}&ownerWorkYears2=${parmars.ownerWorkYears2}`,
{headers: {
'Content-Type':'application/json'
}})
}
// 操作记录
export function recodeLIST (parmars) {
return axios.post(`/text/api/resumeFlow/history/${parmars.resumeId}`,{headers: {
'Content-Type':'application/json'
}})
}
//通过某一来源查询简历信息
export function adoptOneSeeResumeList(parmars) {
return axios.post(`/text/api/resume/findListBySource`,parmars,{headers: {
'Content-Type':'application/json',
'X-Requested-With':'XMLHttpRequest'
}})
}
// 新增约面信息
export function addinterview(parmars) {
return axios.post(`/text/api/resumeInterview/add`,parmars,{headers: {
'Content-Type':'application/json',
'X-Requested-With':'XMLHttpRequest'
}})
} }
\ No newline at end of file
...@@ -23,8 +23,8 @@ export function Delateaccount(parmars){ ...@@ -23,8 +23,8 @@ export function Delateaccount(parmars){
}}) }})
} }
//批量删除 //批量删除
export function delateAllAccount(params){ export function delateAllAccount(DelateARR){
return axios.post(`/text//api/user/delete`,params,{headers: { return axios.post(`/text//api/user/delete`,JSON.stringify(DelateARR),{headers: {
'Content-Type':'application/json', 'Content-Type':'application/json',
}}) }})
} }
...@@ -36,26 +36,40 @@ export function recoveryPassword(parmars){ ...@@ -36,26 +36,40 @@ export function recoveryPassword(parmars){
} }
//查询邮箱列表 //查询邮箱列表
export function queryemailList(parmars){ export function queryemailList(parmars){
console.log(parmars)
return axios.post(`/text/api/email/list`,parmars,{headers: { return axios.post(`/text/api/email/list`,parmars,{headers: {
'Content-Type':'application/json', 'Content-Type':'application/json',
}}) }})
} }
// 同步邮箱 // 同步邮箱
export function Synchronization(parmars){ export function Synchronization(parmars){
parmars=qs.stringify(parmars) return axios.post(`/text/api/email/bindAndSync`,parmars,{headers: {
console.log(parmars) 'Content-Type':'application/json',
return axios.post(`/text/api/email/bind`,parmars,{headers: {
'Content-Type':'application/x-www-form-urlencoded',
'X-Requested-With':'XMLHttpRequest' 'X-Requested-With':'XMLHttpRequest'
}}) }})
} }
// 解绑邮箱 // 解绑邮箱
export function jiebangEmail(parmars){ export function jiebangEmail(id){
parmars=qs.stringify(parmars) return axios.post(`/text/api/email/unbind/${id}`,{headers: {
console.log(parmars)
return axios.post(`/text/api/email/unbind`,parmars,{headers: {
'Content-Type':'application/x-www-form-urlencoded', 'Content-Type':'application/x-www-form-urlencoded',
'X-Requested-With':'XMLHttpRequest' 'X-Requested-With':'XMLHttpRequest'
}}) }})
}
// 修改邮箱并重新绑定
export function updateemailTWO(parmars){
return axios.post(`/text/api/email/modify`,parmars,{headers: {
'Content-Type':'application/json',
'X-Requested-With':'XMLHttpRequest'
}})
}
// 批量解绑邮箱
export function UntyingAll(UntyingAllARR){
return axios.post(`/text/api/email/unbind/batch`,JSON.stringify(UntyingAllARR),{headers: {
'Content-Type':'application/json',
}})
}
// 获取二维码
export function getErcode(){
return axios.get(`/text/qrCode/getInterviewQrcode`,{headers: {
'Content-Type':'application/json',
}})
} }
\ No newline at end of file
import axios from '../service/http.service'
import {
baseApi,contractApi
} from '../config/env.config'
import qs from 'qs'
// 提交应聘登记表
export function submitMassage(params) {
// params=qs.stringify(params)
return axios.post(`/text/api/interview/arrive`,params,{headers: {
'Content-Type':'application/json',
'X-Requested-With':'XMLHttpRequest'
}})
}
\ No newline at end of file
import axios from '../service/http.service'
import {
baseApi,contractApi
} from '../config/env.config'
import qs from 'qs'
// 获取上传批次号
export function getuploadNumber() {
// params=qs.stringify(params)
return axios.get(`/text/api/resume/upload/batchNum`,{headers: {
'Content-Type':'application/json',
'X-Requested-With':'XMLHttpRequest'
}})
}
//上传文件
export function uploadfile(parmars) {
return axios.post(`/text/api/resume/upload`,parmars,{headers: {
// 'Content-Type':'multipart/form-data',
processData : false,
contentType : false,
async: false,
}})
}
// 查询上传列表记录
export function serchList(parmars) {
return axios.post(`/text/api/resume/upload/history`,parmars,{headers: {
'Content-Type':'application/json',
}})
}
// 查询简历详情
export function serchRESUMEdetail(parmars) {
return axios.get(`/text/api/html/get/${parmars.resumeId}`,{headers: {
'Content-Type':'application/json',
}})
}
// 查询简历详情
export function deleteREsumeUPLOad(deleteallArr) {
return axios.post(`/text/api/resume/delete`,JSON.stringify(deleteallArr),{headers: {
'Content-Type':'application/json',
}})
}
<template>
<div>
<div class="login">
<div class="login-content">
<div class="loginContent-left">
<img src="../../assets/login.jpg">
</div>
<div class="loginContent-right">
<div class="logo">
<img src="../../assets/log.png">
<h3>首次登录请修改密码</h3>
</div>
<div class="login_content">
<Form ref="formInline" :model="formInline" :rules="ruleInline" >
<FormItem prop="user">
<Input type="text" v-model="formInline.user" placeholder="Username" class="wordStyle"/>
<Icon type="ios-person-outline" slot="prepend"></Icon>
</FormItem>
<FormItem prop="password">
<Input type="password" v-model="formInline.password" placeholder="Password" class="wordStyle"/>
<Icon type="ios-lock-outline" slot="prepend"></Icon>
</FormItem>
<FormItem>
<button style="width:440px;margin-left:30px; border-radius: 5px;background:rgb(0, 146, 255);color:rgb(255,255,255)">登录</button>
</FormItem>
</Form>
</div>
<div class="copy">
<p>量化派为你提供全程服务</p>
<p>量化派版权所有</p>
</div>
</div>
</div>
</div>
</div>
</template>
<script>
export default {
data () {
return {
formInline: {
user: '',
password: ''
},
ruleInline: {
user: [
{ required: true, message: '请输入正确的手机号', trigger: 'blur' }
],
password: [
{ required: true, message: '请输入正确的密码', trigger: 'blur' },
{ type: 'string', min: 4, message: '', trigger: 'blur' }
]
}
}
},
methods: {
handleSubmit(name) {
this.$refs[name].validate((valid) => {
if (valid) {
this.$Message.success('Success!');
} else {
this.$Message.error('Fail!');
}
})
}
}
}
</script>
<style>
.login{
width:100%;
height:100%;
background: #EAEAEA;
}
.login-content{
width: 1100px;
height: 1000px;
margin-left: 500px
}
.loginContent-left {
float: left;
width: 600px;
height: 800px
}
.loginContent-right{
float: left;
width: 500px;
height: 800px;
background: #ffffff
}
.loginContent-left img{
width: 100%;
height: 100%;
}
.logo{
width:100%;
height:140px;
margin-top:80px;
}
.logo img {
width: 100px;
height: 60px;
margin-left: 30px
}
.logo h3{
font-size: 25px;
color: black;
margin-left: 40px
}
.login_content{
height: 200px;
width: 100%;
}
.copy{
width: 100%;
height:100px;
margin-top: 200px;
}
.copy p{
margin-left: 30px
}
.wordStyle{
width: 440px;
margin-left: 30px
}
</style>
<template> <template>
<Row id="home" class="home"> <Row id="home" class="home">
<Col span="3" class="aside"> <Col span="3" class="aside" style="width:15%;height:100%">
<img src="https://org.modao.cc/uploads4/images/3427/34274354/v2_prfn6r.png" alt=""> <img src="../assets/homelogo.png" alt="" style="height:60px">
<Menu style="width: 100%;" ref='subMenu' :active-name="vSubName" :open-names="vName" @on-select="go"> <Menu style="width: 100%;" ref='subMenu' :active-name="vSubName" :open-names="vName" @on-select="go">
<Submenu v-for="menu in childMenu" :name="menu.name" :key="menu.name"> <Submenu v-for="menu in childMenu" :name="menu.name" :key="menu.name">
<template slot="title"> <template slot="title">
<Icon type="ios-paper" /> <Icon type="ios-paper"/>
{{menu.item}} {{menu.item}}
</template> </template>
<MenuItem v-for="child in menu.child" :key="child.name" :name="child.name" @click="go">{{child.item}}</MenuItem> <MenuItem v-for="child in menu.child" :key="child.name" :name="child.name" @click="go">{{child.item}}</MenuItem>
</Submenu> </Submenu>
</Menu> </Menu>
</Col> </Col>
<Col span="21" class="content"> <Col span="21" class="content" style="width:85%">
<Row class="header"> <Row class="header">
<Col span="20"> <Col span="20">
<Menu mode="horizontal" :active-name="hName" @on-select="selectMenu"> <Menu mode="horizontal" :active-name="hName" @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" >
{{menu.item}} {{menu.item}}
</MenuItem> </MenuItem>
</Menu> </Menu>
</Col> </Col>
<Col span="2" class="account"> <Col span="2" class="account">
13718672532 {{massage}}
</Col> </Col>
<Col span="2" class="sign-out"> <Col span="2" class="sign-out">
<a @click="loginOut" >退出</a> <a @click="loginOut" >退出</a>
...@@ -35,43 +35,118 @@ ...@@ -35,43 +35,118 @@
</Row> </Row>
</template> </template>
<script> <script>
import {getpersonMassage,loginOUT,adoptOneSeeResumeList,getChannelMassage} from '../api/home.server.js'
export default{ export default{
data() { data() {
return { return {
massage:'',
arr:[],
biaoshi:'',
channelARR:[],
isadmin:'',
pageindex:0,
pageSize:10,
condition:'',
xiabiao:'',
itemSelect:'',
name: '1', name: '1',
hName: '1', hName: '1',
vName: ['1'], vName: ['1'],
vSubName: '1-1', vSubName: '1-1',
menuList: [ menuList: [
{ name: '1', item: '简历管理', child: [{ name: '1', item: '全部简历', child: [{ name: '1-1', item:'全部简历', route: '/allResume' }] }] }, { name: '1', item: '简历管理', child: [{ name: '1', item: '全部管理', child: [{ name: '1-1', item:'全部简历', route: '/allResume' }] },
{ name: '2', item: '渠道简历', child: [] }]},
{ name: '2', item: '面试管理', child: [{ name: '1', item: '面试管理', child: [{ name: '1-1', item:'全部简历', route: '/interview' }] }] }, { name: '2', item: '面试管理', child: [{ name: '1', item: '面试管理', child: [{ name: '1-1', item:'全部简历', route: '/interview' }] }] },
{ name: '3', item: '上传简历', child: [{ name: '1', item: '上传简历', child: [{ name: '1-1', item:'上传简历', route: '/upload' }] }] }, { name: '3', item: '上传简历', child: [{ name: '1', item: '上传简历', child: [{ name: '1-1', item:'上传简历', route: '/upload' }] }] },
{ name: '4', item: '系统管理', child: [{ name: '1', item: '账户管理', child: [{ name: '1-1', item:'账户管理', route: '/account' }] }, { name: '4', item: '系统管理', child: [{ name: '1', item: '账户管理', child: [{ name: '1-1', item:'账户管理', route: '/account' }] },
{ name: '2', item: '邮箱管理', child: [{ name: '1-2', item:'邮箱管理', route: '/emailMange' }] }, { name: '2', item: '邮箱管理', child: [{ name: '2-1', item:'邮箱管理', route: '/emailMange' }] },
{ name: '3', item: '二维码管理', child: [{ name: '1-3', item:'账户管理', route: '/QRcode' }] } { name: '3', item: '二维码管理', child: [{ name: '3-1', item:'二维码管理', route: '/QRcode' }] }
] }, ] },
], ],
childMenu: [{ name: '1', item: '全部简历', child: [{ name: '1-1', item:'全部简历', route: '/allResume' }] }] childMenu: [{ name: '1', item: '全部简历', child: [{ name: '1-1', item:'全部简历', route: '' }] },
{ name: '2', item: '渠道简历', child: [{ name: 'name', item:'item', route: 'router' }] }]
} }
}, },
methods: { methods: {
go(name) { go(name) {
let vName = name.split('-')[1] let vName = name.split('-')[0]
const menu = this.childMenu.filter(v => vName === v.name) const menu = this.childMenu.filter(v => vName === v.name)
const route = menu.length === 1 ? menu[0].child.filter(v => name === v.name)[0].route : '/allResume' const route = menu.length === 1 ? menu[0].child.filter(v => name === v.name)[0].route :''
this.$router.push(route) this.$router.push(route)
}, },
loginOut() {
this.$router.push('/login')
},
selectMenu(name) { selectMenu(name) {
const menus = this.menuList.filter(v => name === v.name) const menus = this.menuList.filter(v => name === v.name)
this.childMenu = menus.length > 0 ? menus[0].child : [{ name: '1', item: '全部简历', child: [{ name: '1-1', item:'全部简历', route: '/user/login' }] }] this.childMenu = menus.length > 0 ? menus[0].child : [{ name: '1', item: '全部简历', child: [{ name: '1-1', item:'全部简历', route: '/user/login' }] }]
if(name=='4' &&this.isadmin=='false'){
this.vSubName='2-1'
}else{
this.vSubName='1-1'
}
if(name=='1'){
this.menuList[0].child[1].child=[]
this.a()
}
this.go(this.vSubName) this.go(this.vSubName)
},
// 获取个人信息
getmassage(){
getpersonMassage().then(res=>{
this.massage=res.data.body.userName
})
},
// 用户退出
loginOut(){
loginOUT().then(res=>{
if(res.data.success==true){
this.$router.push('/login')
}
})
},
a(){
getChannelMassage().then(res=>{
this.channelARR=res.data.body
this.channelARR.map((item,index) => {
var obj = {
name: `2-${index+1}`,
item: item.sourceName,
route: `/channel/${item.sourceCode}`
}
this.menuList[0].child[1].child.push(obj)
})
})
},
getActiveName () {
this.menuList.map(parent => {
parent.child.map(child => {
child.child.map(grandson => {
if (grandson.route == this.$route.path) {
console.log(grandson.route,grandson,44445555555555555,parent)
this.vSubName = grandson.name
this.hName = parent.name
console.log(this.vSubName,this.hName,19987654)
}
})
})
})
this.selectMenu(this.hName)
},
// 普通用户权限
getMenu(){
let condition=localStorage.getItem('isADMIN')
this.isadmin=condition
if(condition == 'false'){
this.menuList[3].child.splice(0,1)
}
// this.selectMenu(this.name)
} }
}, },
mounted() {} mounted() {
this.getmassage()
this.getMenu()
this.getActiveName()
}
} }
</script> </script>
...@@ -79,9 +154,10 @@ ...@@ -79,9 +154,10 @@
.home{ .home{
height: 100%; height: 100%;
.aside{ .aside{
min-height: 1100px; // 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%;
img{ img{
height: 49px; height: 49px;
width: 100%; width: 100%;
......
<template>
<Row class="login">
<Col span="16" class="left">
<img src="https://org.modao.cc/uploads4/images/3427/34276822/v2_prfobz.jpg" alt="">
</Col>
<Col span="8" class="right">
<Row class="head">
<img src="https://org.modao.cc/uploads4/images/3427/34274354/v2_prfn6r.png" alt="">
<h1>登录</h1>
</Row>
<Row class="login-content">
<span class="tip"><Icon type="md-alert" /> 请输入正确的手机号码</span>
<Input type="text" placeholder="请输入11为手机号">
<Icon color="#2d8cf0" type="ios-person-outline" slot="prepend"></Icon>
</Input>
<span class="tip"><Icon type="md-alert" /> 请输入正确的密码</span>
<Input type="password" placeholder="请输入密码">
<Icon color="#2d8cf0" type="ios-lock-outline" slot="prepend"></Icon>
</Input>
<Button type="primary" @click="login" >登录</Button>
<span class="tip"><Icon type="md-alert" />账号与密码不匹配,请重新输入</span>
</Row>
<Row class="foot">
<span>量化派为您提供全程服务</span>
<span>量化派版权所有</span>
</Row>
</Col>
</Row>
</template>
<script>
export default {
methods: {
login() {
this.$router.push('/allResume')
}
}
}
</script>
<style lang="less" scoped>
.login{
height: 100%;
padding: 6% 22%;
background: #F5F5F5;
display: flex;
.left{
img{
height: 100%;
width: 100%;
}
}
.right{
padding: 80px 20px;
background: #fff;
.head{
img{
width: 63%;
}
}
.foot{
position: absolute;
bottom: 40px;
span{
display: block;
}
}
}
}
</style>
<style lang="less">
.login-content{
text-align: center;
.tip{
color: red;
}
button{
width: 100%;
margin-bottom: 10px;
}
.ivu-input-wrapper{
margin-bottom: 20px;
border-bottom: 1px solid #dcdee2;
.ivu-input-group-prepend{
border: 0;
background: #fff;
.ivu-icon{
font-size: 20px !important;
font-weight: 300 !important;
}
}
input{
border: 0;
&:focus{
outline: 0 !important;
box-shadow: none;
}
}
}
}
</style>
\ No newline at end of file
...@@ -5,9 +5,13 @@ import iView from 'iview'; ...@@ -5,9 +5,13 @@ import iView from 'iview';
import 'iview/dist/styles/iview.css'; import 'iview/dist/styles/iview.css';
import App from './App'; import App from './App';
import router from './router'; import router from './router';
import initRouter from './service/init.service.js'
import { HappyScroll } from 'vue-happy-scroll'
import 'vue-happy-scroll/docs/happy-scroll.css'
Vue.component('happy-scroll', HappyScroll)
Vue.use(iView); Vue.use(iView);
Vue.config.productionTip = false; Vue.config.productionTip = false;
initRouter.init(router)
/* eslint-disable no-new */ /* eslint-disable no-new */
new Vue({ new Vue({
el: '#app', el: '#app',
......
...@@ -2,124 +2,165 @@ ...@@ -2,124 +2,165 @@
<div class="interview"> <div class="interview">
<div class="interview-left"> <div class="interview-left">
<div class="leftcontentTop" style="height:120px"> <div class="leftcontentTop" style="height:120px">
<div style="height:100%;float:left;width:20%;background:rgb(0,146,255);margin-left:30px"></div> <div style="height:90%;float:left;width:30%;background:rgb(0,146,255);margin-left:3%;margin-top:10px"></div>
<div style="height:100%;float:left;width:30%;background:rgb(253,85,83);margin-left:30px"></div> <div style="height:90%;float:left;width:30%;background:rgb(253,85,83);margin-left:3%;margin-top:10px"></div>
<div style="height:100%;float:left;width:30%;background:rgb(0,176,160);margin-left:30px"></div> <div style="height:90%;float:left;width:30%;background:rgb(0,176,160);margin-left:3%;margin-top:10px"></div>
</div> </div>
<div style="margin-bottom:40px;float:left;margin-left:20px;width:100%">
<div style="margin:50px auto;width:300px;height:200px;line-height:200px;text-align:center;font-size:20px" v-show="Essentialinformation.length==0">暂无数据</div>
<div class="leftcontentContent" v-for="(item,index) in Essentialinformation " :key='index'> <div class="leftcontentContent" v-for="(item,index) in Essentialinformation " :key='index'>
<div class="contentMassage" > <div class="contentMassage">
<p style="font-size:16px;color:black" > <p style="margin-top:7px">
<span style="margin-left:10px">{{item.ownerName}} |</span> <span style="margin-left:10px;overflow: hidden;text-overflow:ellipsis;white-space: nowrap;display:inline-block;" @click="Seedetail(item.id)">{{item.ownerName}} |</span>
<span>{{item.ownerMobile}} |</span> <span @click="Seedetail(item.id)" style="overflow: hidden;text-overflow:ellipsis;white-space: nowrap;display:inline-block;">{{item.ownerMobile}} |</span>
<span>{{item.ownerExpectTitles}}</span> <span @click="Seedetail(item.id)" style="overflow: hidden;text-overflow:ellipsis;white-space: nowrap;display:inline-block;width:20%">{{item.ownerExpectTitles}}</span>
<span style="margin-left:100px;color:#2d8cf0" @click="updateInterview(item.interviewerName,item.seeTime,item.inviterName)" v-if="item.flowStatus=='OPTION'">更改约面信息</span> <span style="color:#2d8cf0;float:right;margin-right:35px" @click="updateInterview(item.id,item.interviewerName,item.seeTime,item.inviterName)">更改约面信息</span>
<span style="margin-left:100px;color:#999999" @click="updateInterview" v-if="item.status==2">暂无约面信息</span> </p>
</p> <p style="margin-top:8px">
<p style="font-size:14px;margin-top:15px"> <span style="margin-left:10px;display:inline-block;width:22%;">邀约人: {{item.inviterName}} </span>
<span style="margin-left:10px">邀约人: {{item.interviewerName}} </span> <span style="margin-left:7%;display:inline-block;width:22%;">面试官: {{item.interviewerName}}</span>
<span style="margin-left:20px">面试官: {{item.inviterName}}</span> <span style="float:right;margin-right:35px">面试时间:{{ item.seeTime}}</span>
<span style="margin-left:35px">面试时间:{{ item.seeTime}}</span> </p>
</p> </div>
</div> <div class="contentState">
<div class="contentState"> <p style="margin-top:8px">
<p style="font-size:14px;">
<span style="margin-left:20px" @click="modal4=true">当前状态</span> <span style="margin-left:20px" @click="modal4=true">当前状态</span>
<!-- <span style="float:right;margin:0 20px 0 10px;color:#2d8cf0" @click="UpdateStatus(item.status)">{{item.status}}</span> --> <span style="float:right;margin:0 20px 0 0px;color:#2d8cf0" @click="Stopinterview(item.id)" v-if="item.flowStatus=='OPTION'">终止面试</span>
<span style="float:right;margin:0 20px 0 10px;color:#2d8cf0" v-if="item.flowStatus=='OPTION'" @click="Stopinterview">终止面试</span> <span style="float:right;margin:0 20px 0 0px;color:#2d8cf0" @click="Stopinterview(item.id)" v-if="item.flowStatus=='TO_SEE'">终止面试</span>
<span style="float:right;margin:0 20px 0 10px;color:#2d8cf0" v-if="item.flowStatus=='TO_DO'" @click="OPPeninterview">重启面试</span> <span style="float:right;margin:0 20px 0 0px;color:#2d8cf0" @click="Stopinterview(item.id)" v-if="item.flowStatus=='HAS_SEE'">终止面试</span>
<span style="float:right;margin:0 20px 0 0px;color:#2d8cf0" @click="Stopinterview(item.id)" v-if="item.flowStatus=='SEE_FAIL'">终止面试</span>
<span style="float:right;margin:0 20px 0 0px;color:#2d8cf0" @click="Stopinterview(item.id)" v-if="item.flowStatus=='INTERVIEW_FAIL'">终止面试</span>
<span style="float:right;margin:0 20px 0 0px;color:#2d8cf0" @click="Stopinterview(item.id)" v-if="item.flowStatus=='TO_SENT_OFFER'">终止面试</span>
<span style="float:right;margin:0 20px 0 0px;color:#2d8cf0" @click="Stopinterview(item.id)" v-if="item.flowStatus=='TO_ENTRY'">终止面试</span>
<span style="float:right;margin:0 20px 0 0px;color:#2d8cf0" @click="Stopinterview(item.id)" v-if="item.flowStatus=='HAS_ENTRY'">终止面试</span>
<span style="float:right;margin:0 20px 0 0px;color:#2d8cf0" @click="Stopinterview(item.id)" v-if="item.flowStatus=='NO_ENTRY'">终止面试</span>
<span style="float:right;margin:0 20px 0 0px;color:#2d8cf0" @click="Stopinterview(item.id)" v-if="item.flowStatus=='PASS'">终止面试</span>
<span style="float:right;margin:0 20px 0 0px;color:#2d8cf0" @click="Stopinterview(item.id)" v-if="item.flowStatus=='HAS_SENT_OFFER'">终止面试</span>
<span style="float:right;margin:0 20px 0 10px;color:#2d8cf0" @click="OPPeninterview(item.id)" v-if="item.flowStatus=='END'">重启面试</span>
</p> </p>
<p style="font-size:14px;margin-top:15px"> <p class="nowstatus" style="margin-top:8px">
<span style="margin:0 20px 0 10px" v-if="item.flowStatus=='OPTION'">面试结果待定</span> <span style="margin:0 20px 0 20px" v-if="item.flowStatus=='OPTION'">备选</span>
<select name="1" id="a" style="margin-left:20px" @change="selectFn2($event)"> <span style="margin:0 20px 0 20px" v-if="item.flowStatus=='TO_SEE'">准备约面</span>
<option value="1">待处理</option> <span style="margin:0 20px 0 20px" v-if="item.flowStatus=='HAS_SEE'">已邀约</span>
<option value="2">Pass</option> <span style="margin:0 20px 0 20px" v-if="item.flowStatus=='SEE_FAIL'">邀约失败</span>
<option value="3">备选</option> <span style="margin:0 20px 0 20px" v-if="item.flowStatus=='INTERVIEW_FAIL'">面试淘汰</span>
<option value="4">待邀约</option> <span style="margin:0 20px 0 20px" v-if="item.flowStatus=='TO_SENT_OFFER'">待offer</span>
<option value="5" >已邀约</option> <span style="margin:0 20px 0 20px" v-if="item.flowStatus=='TO_ENTRY'">待入职</span>
<option value="6">邀约失败</option> <span style="margin:0 20px 0 20px" v-if="item.flowStatus=='HAS_ENTRY'">已入职</span>
<option value="7">已面试</option> <span style="margin:0 20px 0 20px" v-if="item.flowStatus=='NO_ENTRY'">未入职</span>
<option value="8">未面试</option> <span style="margin:0 20px 0 20px" v-if="item.flowStatus=='END'">终止面试</span>
<option value="9">面试通过</option> <span style="margin:0 20px 0 20px" v-if="item.flowStatus=='PASS'">PASS</span>
<option value="10">面试淘汰</option> <span style="margin:0 20px 0 20px" v-if="item.flowStatus=='HAS_SENT_OFFER'">已发offer</span>
<option value="11">待Offer</option> <span style="margin:0 20px 0 20px" v-if="item.flowStatus=='TO_RESULT'">面试结果待定</span>
<option value="12">已发Offer</option> <span>
<option value="13">待入职</option> <!-- <Select style="width:40%;float:right;color:#1E90FF" placeholder="变更状态" :label-in-value='true' @on-change="selectchangeElement($event,item.id)" size="small">
</select> <Option v-for="(item,index) in nowstate" :key="index" :value="index" >{{item.label}}</Option>
<!-- <span style="float:right;margin:0 20px 0 10px;color:#2d8cf0">变更状态<br> </Select> -->
<Icon type="ios-arrow-down" style="margin-left:20px;color:#999999"/> <select style="border:0;margin-right:10px;float:right" @change="selectchangeElement($event,item.id)">
</span> --> <option value="0" style="color:#2d8cf0">变更状态 ∨</option>
<option value="2" style="color:#2d8cf0">已邀约 </option>
<option value="3" style="color:#2d8cf0">邀约失败</option>
<option value="4" style="color:#2d8cf0">面试淘汰</option>
<option value="5" style="color:#2d8cf0">待offer</option>
<option value="6" style="color:#2d8cf0">已发offer</option>
<option value="7" style="color:#2d8cf0">待入职</option>
<option value="8" style="color:#2d8cf0">未入职</option>
<option value="9" style="color:#2d8cf0">已入职</option>
</select>
</span>
</p> </p>
</div> </div>
<div class="contentRecord"> <div class="contentRecord" style="text-align:center">
<p style="color:#2d8cf0" @click="Recode">操作记录</p> <p style="margin-top:3px"><span style="color:#2d8cf0;" @click="RecordSEE(item.id,item.ownerName)">操作记录</span></p>
<p>最后操作人|<span style="margin-left:8px">{{item.modifier}}</span></p> <p style="font-size:12px">最后操作人|<span style="margin-left:8px;text-align:center">{{item.d}}</span></p>
<p>{{item.modifyTime}}</p> <p>{{item.modifyTime}}</p>
</div> </div>
<div style="height:10px;width:100%;background:#F2F2F2;float:left"></div> </div>
</div> </div>
<div class="InpageBottom"> <div class="InpageBottom">
<Page :total="100" show-elevator style="text-align:center;margin-top:8px"/> <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> </div>
<div class="interview-right"> <div class="interview-right">
<Form :label-width="80"> <Form :label-width="80">
<FormItem label="关键词:" style="margin-top:20px"> <FormItem label="关键搜索:" style="margin-top:20px;margin-left:1%" @keyup.enter.native="Sousuo">
<Input placeholder="请输入关键词" style="width:280px"/> <Input placeholder="请输入关键词" style="width:65%" v-model="keywords"/>
</FormItem> </FormItem>
<FormItem label="学历:" class="Education2"> <FormItem label="学历:" class="Education2">
<span v-for="(item,index) in Education" :class="{'active':index==clickIndex1}" @click="clickIndex1 = index" :key="index"> {{item}}</span> <span v-for="(item,index) in Education2" :class="{'active2':index==clickIndex1}" @click="selectSeeElement(item.Num2,index)" :key="'Education2'+index" class="edu"> {{item.status2}}</span>
</FormItem> </FormItem>
<FormItem label="邀约人:" style="margin-top:20px"> <FormItem label="邀约人:" style="margin-top:20px">
<Select style="width:160px" placeholder="请选择"> <Select style="width:65%" placeholder="请选择" :label-in-value='true' @on-change="selectinterviewElement2">
<Option value="0" >请选择</Option> <!-- <Option value="">不限</Option> -->
<Option value="1">张三</Option> <Option v-for="(item,index) in Inviter" :key="index" :value="index" >{{item}}</Option>
<Option value="2">赵四</Option> </Select>
<Option value="3">王五</Option>
<Option value="4">马六</Option>
</Select>
</FormItem> </FormItem>
<FormItem label="面试官:" style="margin-top:20px"> <FormItem label="面试官:" style="margin-top:20px">
<Select style="width:160px;height:20px" placeholder="请选择"> <Select style="width:65%;height:20px" placeholder="请选择" :label-in-value='true' @on-change='selectinterviewElement'>
<Option value="0" >请选择</Option> <!-- <Option value="">不限</Option> -->
<Option value="1">张三</Option> <Option v-for="(item,index) in Interviewer" :key="index" :value="index" >{{item}}</Option>
<Option value="2">赵四</Option> </Select>
<Option value="3">王五</Option>
<Option value="4">马六</Option>
</Select>
</FormItem> </FormItem>
<FormItem label="状态:" class="state2"> <FormItem label="状态:" class="state2">
<span v-for="(item,index) in state" :class="{'active':index==clickIndex2}" @click="clickIndex2 = index" :key="index"> {{item}}</span> <span v-for="(item,index) in state" :class="{'active2':item.sta==true}" @click="selectElement3(item.Num3,index,item.status3,item.sta)" :key="'state2'+index"> {{item.status3}}</span>
</FormItem> </FormItem>
</Form> </Form>
<button style="width:200px;margin-left:150px; border-radius: 5px;background:rgb(0, 146, 255);color:rgb(255,255,255);font-size:18px" @click="SerchInvitation">搜索</button> <Button type="primary" size='small' style="width:200px;margin-left:150px;font-size:15px" @click="Sousuo">搜索</Button>
</div> </div>
<!-- 操作记录弹出框 --> <!-- 操作记录弹出框 -->
<Modal <Modal
v-model="modal1" v-model="recordModal"
@on-ok="ok" width='550px'
:closable='false'
width='500px'
:footer-hide="true" :footer-hide="true"
@on-cancel="cancel"> :closable='false'>
<div style="height:600px"> <div>
<h2 style="text-align: center;color:black">操作记录</h2> <h2 style="text-align: center;color:black" >操作记录</h2>
<h2 style="text-align: center;color:#999999">候选人:陈意</h2> <h2 style="text-align: center;color:#999999;margin-top:10px">候选人:{{toseename}}</h2>
<p style="margin-top:30px;text-align:center" class="Recode" > <div v-for="(item,index) in recordList" :key="index">
<span>李宁</span> <p style="margin-top:30px;" class="Recode">
<span>2019-07-02</span> <span style="display:inline-block;width:70px;margin-left:15px;">{{item.approveUserName}}</span>
<span>15:22:22</span> <span style="display:inline-block;width:140px">{{item.dateTime}}</span>
<span style="color:blue">将一个状态</span> <span style="color:#0092FF;display:inline-block;width:70px;" v-if=" item.previousState=='INTERVIEW_OK'">面试合适</span>
<span>变更为</span> <span style="color:#0092FF;display:inline-block;width:70px;" v-if=" item.previousState=='INTERVIEW_FAIL'">面试淘汰</span>
<span style="color:blue">另一个状态</span> <span style="color:#0092FF;display:inline-block;width:70px;" v-if=" item.previousState=='END'">终止面试</span>
</p> <span style="color:#0092FF;display:inline-block;width:70px;" v-if=" item.previousState=='SEE_FAIL'">约面失败</span>
<span style="color:#0092FF;display:inline-block;width:70px;" v-if=" item.previousState=='NO_ENTRY'">未入职</span>
<span style="color:#0092FF;display:inline-block;width:70px;" v-if=" item.previousState=='TO_SEE'">准备约面</span>
<span style="color:#0092FF;display:inline-block;width:70px;" v-if=" item.previousState=='HAS_SEE'">已邀约</span>
<span style="color:#0092FF;display:inline-block;width:70px;" v-if=" item.previousState=='OPTION'">备选</span>
<span style="color:#0092FF;display:inline-block;width:70px;" v-if=" item.previousState=='TO_SENT_OFFER'">待Offer</span>
<span style="color:#0092FF;display:inline-block;width:70px;" v-if=" item.previousState=='HAS_SENT_OFFER'">已发offer</span>
<span style="color:#0092FF;display:inline-block;width:70px;" v-if=" item.previousState=='TO_ENTRY'">待入职</span>
<span style="color:#0092FF;display:inline-block;width:70px;" v-if=" item.previousState=='HAS_ENTRY'">已入职</span>
<span style="color:#0092FF;display:inline-block;width:70px;" v-if=" item.previousState=='PASS'">PASS</span>
<span style="color:#0092FF;display:inline-block;width:70px;" v-if=" item.previousState=='TO_DO'">待处理</span>
<span style="color:#0092FF;display:inline-block;width:70px;" v-if=" item.previousState=='RESET'">重启面试</span>
<span style="display:inline-block;width:50px;">变更为</span>
<span style="color:#0092FF" v-if=" item.afterState=='INTERVIEW_OK'">面试合适</span>
<span style="color:#0092FF" v-if=" item.afterState=='INTERVIEW_FAIL'">面试淘汰</span>
<span style="color:#0092FF" v-if=" item.afterState=='END'">终止面试</span>
<span style="color:#0092FF" v-if=" item.afterState=='SEE_FAIL'">约面失败</span>
<span style="color:#0092FF" v-if=" item.afterState=='NO_ENTRY'">未入职</span>
<span style="color:#0092FF" v-if=" item.afterState=='TO_SEE'">准备约面</span>
<span style="color:#0092FF" v-if=" item.afterState=='HAS_SEE'">已邀约</span>
<span style="color:#0092FF" v-if=" item.afterState=='OPTION'">备选</span>
<span style="color:#0092FF" v-if=" item.afterState=='TO_SENT_OFFER'">待Offer</span>
<span style="color:#0092FF" v-if=" item.afterState=='HAS_SENT_OFFER'">已发offer</span>
<span style="color:#0092FF" v-if=" item.afterState=='TO_ENTRY'">待入职</span>
<span style="color:#0092FF" v-if=" item.afterState=='HAS_ENTRY'">已入职</span>
<span style="color:#0092FF" v-if=" item.afterState=='PASS'">PASS</span>
<span style="color:#0092FF" v-if=" item.afterState=='TO_DO'">待处理</span>
<span style="color:#0092FF" v-if=" item.afterState=='RESET'">重启面试</span>
</p>
</div>
</div> </div>
<div style="height:30px;width:100%;text-align:center"> <div style="height:30px;width:100%;text-align:center;margin-top:30px">
<p style="height:20px;width:40px;color:#1E90FF;font-size:16px; border-radius: 5px;margin-left:220px" @click="modal1=false"> <p style="height:20px;width:40px;font-size:16px;color:#0092FF; border-radius: 5px;margin-left:220px" @click="recordModal=false">
关闭 关闭
</p> </p>
</div> </div>
</Modal> </Modal>
<!-- 更改面试信息弹出框 --> <!-- 更改面试信息弹出框 -->
<Modal <Modal
v-model="modal2" v-model="modal2"
...@@ -129,43 +170,19 @@ ...@@ -129,43 +170,19 @@
@on-cancel="cancel"> @on-cancel="cancel">
<h3 style="text-align:center">更改约面信息</h3> <h3 style="text-align:center">更改约面信息</h3>
<Form :label-width="80"> <Form :label-width="80">
<FormItem label="*邀约人" style="margin-top:20px"> <FormItem label="邀约人" style="margin-top:20px" >
<Input v-model="UpdateOWER"/> <Input v-model="UpdateOWER" :maxlength="5"/>
</FormItem> </FormItem>
<FormItem label="*面试时间" style="margin-top:20px"> <FormItem label="面试时间" style="margin-top:20px">
<DatePicker type="datetime" style="width:185px" v-model="UpdateTIME"></DatePicker> <DatePicker type="datetime" style="width:185px" v-model="UpdateTIME" @on-change="selectTime" placeholder="请选择时间" :options="options3" :editable='false'></DatePicker>
</FormItem> </FormItem>
<FormItem label="*面试官" style="margin-top:20px"> <FormItem label="面试官" style="margin-top:20px" >
<Input v-model="UpdateVIEW"/> <Input v-model="UpdateVIEW" :maxlength="5"/>
</FormItem> </FormItem>
</Form> </Form>
<div slot='footer' style="text-align:center"> <div slot='footer' style="text-align:center">
<Button type='primary' @click='modal2=false'>取消</Button> <Button type='primary' @click='modal2=false'>取消</Button>
<Button type='primary' >确定</Button> <Button type='primary' @click="changeUpdate">确定</Button>
</div>
</Modal>
<!-- 新增约面录入信息弹出框 -->
<Modal
v-model="modal5"
@on-ok="ok"
:closable="false"
width='300px'
@on-cancel="cancel">
<h3 style="text-align:center">录入约面信息</h3>
<Form :label-width="80">
<FormItem label="*邀约人" style="margin-top:20px">
<Input v-model="UpdateOWERNEW" placeholder="请输入邀约人全名"/>
</FormItem>
<FormItem label="*面试时间" style="margin-top:20px">
<DatePicker type="datetime" style="width:185px" v-model="UpdateTIMENEW"></DatePicker>
</FormItem>
<FormItem label="*面试官" style="margin-top:20px">
<Input v-model="UpdateVIEWNEW" placeholder="请输入面试官全名"/>
</FormItem>
</Form>
<div slot='footer' style="text-align:center">
<Button type='primary' @click='modal5=false'>取消</Button>
<Button type='primary' >确定</Button>
</div> </div>
</Modal> </Modal>
<!-- 终止面试弹出框 --> <!-- 终止面试弹出框 -->
...@@ -192,16 +209,12 @@ ...@@ -192,16 +209,12 @@
<h3 style="text-align:center">提示</h3> <h3 style="text-align:center">提示</h3>
<p style="text-align:center">结束流程时的简历状态为:待邀约,<br>请选择重启后的状态</p> <p style="text-align:center">结束流程时的简历状态为:待邀约,<br>请选择重启后的状态</p>
<div style="text-align:center;margin-top:15px;"> <div style="text-align:center;margin-top:15px;">
<select name="a" id="333333" @change="selectFn($event)" style="text-align:center;margin-top:15px;display:inline-block"> <select name="a" id="333333" @change="selectFnelement($event)" style="text-align:center;margin-top:15px;display:inline-block">
<option value="1">待处理</option> <option value="1">待处理</option>
<option value="2">Pass</option> <option value="2">Pass</option>
<option value="3">备选</option> <option value="3">备选</option>
<option value="4">待邀约</option>
<option value="5" >已邀约</option> <option value="5" >已邀约</option>
<option value="6">邀约失败</option> <option value="6">邀约失败</option>
<option value="7">已面试</option>
<option value="8">未面试</option>
<option value="9">面试通过</option>
<option value="10">面试淘汰</option> <option value="10">面试淘汰</option>
<option value="11">待Offer</option> <option value="11">待Offer</option>
<option value="12">已发Offer</option> <option value="12">已发Offer</option>
...@@ -210,34 +223,66 @@ ...@@ -210,34 +223,66 @@
</div> </div>
<div slot='footer' style="text-align:center"> <div slot='footer' style="text-align:center">
<Button type='primary' @click='modal4=false'>取消</Button> <Button type='primary' @click='modal4=false'>取消</Button>
<Button type='primary' >确定</Button> <Button type='primary' @click="OPPinterview">确定</Button>
</div> </div>
</Modal> </Modal>
</div> </div>
</template> </template>
<script> <script>
import {changeinterviewMassage,SerchList,Serchinterviewor,SerchInvitationOwer,NewAddInterview,SInterview,oppenInterview} from '../../api/interview.server.js' import moment from 'moment'
import {changeinterviewMassage,SerchList,Serchinterviewor,SerchInvitationOwer,NewAddInterview,SInterview,oppenInterview,recodeLIST,changestatus,seedetail} from '../../api/interview.server.js'
export default { export default {
data(){ data(){
return{ return{
modal1:false, recordModal:false,
modal2:false, modal2:false,
modal3:false, modal3:false,
modal4:false, modal4:false,
modal5:false, modal5:false,
Ishow:[],
aaaaa:'',
nowstate:[{value:'已邀约',label:'已邀约'},{value:'邀约失败',label:'邀约失败'},{value:'面试淘汰',label:'面试淘汰'},{value:'待offer',label:'待offer'},{value:'已发offer',label:'已发offer'},{value:'待入职',label:'待入职'},{value:'未入职',label:'未入职'},{value:'已入职',label:'已入职'},],
keywords:'',
recordList:[],
oppenInterviewStatus:'TO_DO',
oppenInterviewID:'',
toseename:'',
clickIndex1: 0, clickIndex1: 0,
clickIndex2: 0, clickIndex2: 0,
clickIndex3: 0, clickIndex3: 0,
UpdateOWER:'', UpdateOWER:'',
UpdateTIME:'', UpdateTIME:'',
UpdateVIEW:'', UpdateVIEW:'',
UpdateID:'',
options3: {
disabledDate (date) {
return date && date.valueOf() <Date.now()-3600*24*1000;
}
},
Interviewer:[{value:'',label:'不限'}],
Inviter:[{value:'',label:'不限'}],
stopinterviewID:'',
Interviewoperation:0,
UpdateOWERNEW:'', UpdateOWERNEW:'',
UpdateTIMENEW:'', UpdateTIMENEW:'',
UpdateVIEWNEW:'', UpdateVIEWNEW:'',
pageIndex:'', highestDegreeNum:'',
pageSize:"30", flowStatusList:[],
Education:['不限','专科以下','专科及以上','本科及以上','硕士及以上','博士及以上','985/211'], inviterName:'',//邀约人
state:['不限','准备约面','已邀约','邀约失败','面试淘汰','待Offer','待入职','已入职','未入职','终止面试'], interviewerName:'',//面试官
changestatusSTATUS:'',
pageIndex:1,
pageSize:30,
totalSize:null,
searchInfo:{
pageSize:30,
pageIndex:1,
STA:[],
},
Education2:[{Num2:'',status2:'不限'},{Num2:"0",status2:'专科以下'},{Num2:'1',status2:'专科及以上'},{Num2:'2',status2:'本科及以上'},{Num2:'3',status2:'硕士及以上'},{Num2:'4',status2:'博士及以上'},{Num2:'99',status2:'985/211'}],
state:[{Num3:[],status3:'不限',sta:true},{Num3:'TO_DO',status3:'待处理',sta:false},{Num3:'OPTION',status3:'备选',sta:false},{Num3:'PASS',status3:'Pass',sta:false},{Num3:'TO_SEE',status3:'邀请面试',sta:false},{Num3:'HAS_SEE',status3:'已邀约',sta:false},{Num3:'SEE_FAIL',status3:'邀约失败',sta:false},
{Num3:'INTERVIEW_FAIL',status3:'面试淘汰',sta:false},{Num3:'TO_SENT_OFFER',status3:'待Offer',sta:false},{Num3:'TO_ENTRY',status3:'待入职',sta:false},{Num3:'HAS_ENTRY',status3:'已入职',sta:false},{Num3:'NO_ENTRY',status3:'未入职',sta:false},{Num3:'END',status3:'终止面试',sta:false},],
OPtionData:[{value:'0',label:'面试淘汰'}],
activeName:'', activeName:'',
Essentialinformation:[], Essentialinformation:[],
serchData:[], serchData:[],
...@@ -258,28 +303,50 @@ export default { ...@@ -258,28 +303,50 @@ export default {
this.modal5=true this.modal5=true
} }
}, },
//操作记录 // 操作记录查询
Recode(){ RecordSEE(RID,sname){
this.modal1=true this.toseename=sname
this.recordModal=true
let parmars={
resumeId:RID
}
recodeLIST(parmars).then(res=>{
this.ownerName=res.data.body.ownerName
this.recordList=res.data.body.map((item,index)=>{
item.ownerName=item.ownerName
item.approveUserName=item.approveUserName
item.dateTime=item.dateTime
item.previousState=item.previousState
item.afterState=item.afterState
return item
})
})
}, },
//更改面试信息弹出框 //更改面试信息弹出框
updateInterview(InterOWOR,InterTime,InterVIEW){ updateInterview(InterID,InterOWOR,InterTime,InterVIEW){
this.UpdateOWER=InterOWOR, this.UpdateOWER=InterVIEW,
this.UpdateVIEW=InterOWOR,
this.UpdateTIME=InterTime, this.UpdateTIME=InterTime,
this.UpdateVIEW=InterVIEW, this.UpdateID=InterID
this.modal2=true this.modal2=true
}, },
selectTime(b){
console.log(b)
this.UpdateTIME=b
},
//准备约面取消 //准备约面取消
StopInterview(){ StopInterview(){
this.status=status this.status=status
this.modal2=false this.modal2=false
}, },
//终止面试弹出框 //终止面试弹出框
Stopinterview(){ Stopinterview(sid){
this.stopinterviewID=sid
this.modal3=true this.modal3=true
}, },
//重启面试 //重启面试
OPPeninterview(){ OPPeninterview(tid){
this.oppenInterviewID=tid
this.modal4=true this.modal4=true
}, },
//操作状态 //操作状态
...@@ -287,7 +354,6 @@ export default { ...@@ -287,7 +354,6 @@ export default {
let STATUS=LLL; let STATUS=LLL;
if(this.STATUS=='终止面试'){ if(this.STATUS=='终止面试'){
console.log(this.STATUS)
this.modal3=true this.modal3=true
} }
if(this.STATUS=='重启面试'){ if(this.STATUS=='重启面试'){
...@@ -298,40 +364,49 @@ export default { ...@@ -298,40 +364,49 @@ export default {
// 更改约面信息 // 更改约面信息
changeUpdate(){ changeUpdate(){
let parmars={ let parmars={
id:'', resumeId:this.UpdateID,
inviterName:'', inviterName:this.UpdateOWER,
seeTime:'', seeTime:moment(this.UpdateTIME).format('YYYY-MM-DD HH:mm:ss'),
interviewerName:'' interviewerName:this.UpdateVIEW
}
if(this.UpdateOWER==''||this.UpdateTIME==""||this.UpdateVIEW==''){
this.$Message.error('请填写完整的约面信息')
return
} }
changeinterviewMassage(parmars).then(res=>{ changeinterviewMassage(parmars).then(res=>{
if(res.data.success==true){ if(res.data.success==true){
this.modal2=false; this.modal2=false;
this.serchListInterview()
} }
}) })
}, },
// 查询面试信息 // 查询面试信息
serchListInterview() { serchListInterview(page) {
page = typeof(page)=='number'?page:1
this.searchInfo.pageIndex = page
this.pageIndex = page
let parmars={ let parmars={
pageSize:this.pageSize, pageSize:this.searchInfo.pageSize,
pageIndex:this.pageIndex, pageIndex:this.searchInfo.pageIndex,
parameter:{ parameter:{
// keywordString:'', keywordString:'',
// highestDegreeNum:'', highestDegreeNum:'',
// // flowStatusList:'', flowStatusList:[],
// interviewerName:'', interviewerName:'',
// inviterName:'', inviterName:'',
// highSchoolFlag:'',
} }
} }
SerchList(parmars).then(res=>{ SerchList(parmars).then(res=>{
if(res.data.success==true){ if(res.data.success==true){
this.totalSize=res.data.body.totalNumber
this.Essentialinformation=res.data.body.items.map((item,index)=>{ this.Essentialinformation=res.data.body.items.map((item,index)=>{
item.id=item.id item.id=item.id
item.flowStatus=item.flowStatus item.flowStatus=item.flowStatus
item.interviewerName= item.interviewerName item.interviewerName= item.interviewerName
item.inviterName=item.inviterName item.inviterName=item.inviterName
item.modifier=item.modifier item.modifier=item.modifier
item.c=item.modifier==''?item.modifier:item.modifier.split('_')
item.d=item.c[0]
item.modifyTime=item.modifyTime item.modifyTime=item.modifyTime
item.ownerExpectTitles=item.ownerExpectTitles item.ownerExpectTitles=item.ownerExpectTitles
item.ownerMobile=item.ownerMobile item.ownerMobile=item.ownerMobile
...@@ -345,23 +420,15 @@ export default { ...@@ -345,23 +420,15 @@ export default {
// 面试官查询 // 面试官查询
Serchlistinterview(){ Serchlistinterview(){
Serchinterviewor().then(res=>{ Serchinterviewor().then(res=>{
console.log(res) this.Interviewer=res.data.body
if(res.data.success==true){ this.Interviewer.unshift('不限')
this.serchData=res.data.body.map((item,index)=>{
// item.ower=item[0]
})
this.$Message.success('查询成功')
}
}) })
}, },
// 邀约人查询 // 邀约人查询
SerchInvitation(){ SerchInvitation(){
SerchInvitationOwer().then(res=>{ SerchInvitationOwer().then(res=>{
if(res.data.success==true){ this.Inviter=res.data.body
this.serchData2=res.data.body.map((item,index)=>{ this.Inviter.unshift('不限')
// item.ower=item[0]
})
}
}) })
}, },
...@@ -381,93 +448,332 @@ export default { ...@@ -381,93 +448,332 @@ export default {
}, },
// 终止面试 // 终止面试
STOPinterview(){ STOPinterview(){
SInterview().then(res=>{ SInterview(this.stopinterviewID).then(res=>{
if(res.data.success==true){ if(res.data.success==true){
this.$Message.success('已终止面试')
this.modal3=false this.modal3=false
this. serchListInterview()
} }
}) })
}, },
// 操作重启时选择的状态
selectFnelement(e){
if(e.target.value==1){
this.oppenInterviewStatus='TO_DO'
}
if(e.target.value==2){
this.oppenInterviewStatus='PASS'
}
if(e.target.value==3){
this.oppenInterviewStatus='OPTION'
}
if(e.target.value==4){
this.oppenInterviewStatus='OPTION'
}
if(e.target.value==5){
this.oppenInterviewStatus='HAS_SEE'
}
if(e.target.value==6){
this.oppenInterviewStatus='SEE_FAIL'
}
if(e.target.value==10){
this.oppenInterviewStatus='INTERVIEW_FAIL'
}
if(e.target.value==11){
this.oppenInterviewStatus='TO_SENT_OFFER'
}
if(e.target.value==12){
this.oppenInterviewStatus='HAS_SENT_OFFER'
}
if(e.target.value==13){
this.oppenInterviewStatus='TO_ENTRY'
}
},
//重启面试 //重启面试
OPPinterview(){ OPPinterview(){
oppenInterview().then(res=>{ console.log(this.oppenInterviewStatus)
oppenInterview(this.oppenInterviewID,this.oppenInterviewStatus).then(res=>{
if(res.data.success==true){ if(res.data.success==true){
this.$Message.success('重启流程成功') this.$Message.success('重启流程成功')
this. serchListInterview()
this.modal4=false this.modal4=false
} }
}) })
}, },
// 选择变更状态时的元素
}, selectchangeElement(e,SID){
mounted(){ if(e.target.value==1){
this.changestatusSTATUS='TO_SEE'
changestatus(SID, this.changestatusSTATUS).then(res=>{
this. serchListInterview()
})
this. serchListInterview()
}
if(e.target.value==2){
console.log(e.target.label)
this.changestatusSTATUS='HAS_SEE'
changestatus(SID, this.changestatusSTATUS).then(res=>{
this. serchListInterview()
})
this. serchListInterview()
}
if(e.target.value==3){
this.changestatusSTATUS='SEE_FAIL'
changestatus(SID, this.changestatusSTATUS).then(res=>{
this. serchListInterview()
})
this. serchListInterview()
}
if(e.target.value==4){
this.changestatusSTATUS='INTERVIEW_FAIL'
changestatus(SID, this.changestatusSTATUS).then(res=>{
this. serchListInterview()
})
this. serchListInterview()
}
if(e.target.value==5){
this.changestatusSTATUS='TO_SENT_OFFER'
changestatus(SID, this.changestatusSTATUS).then(res=>{
this. serchListInterview()
})
this. serchListInterview()
}
if(e.target.value==6){
this.changestatusSTATUS='HAS_SENT_OFFER'
changestatus(SID, this.changestatusSTATUS).then(res=>{
this. serchListInterview()
})
this. serchListInterview()
}
if(e.target.value==7){
this.changestatusSTATUS='TO_ENTRY'
changestatus(SID, this.changestatusSTATUS).then(res=>{
this. serchListInterview()
})
this. serchListInterview()
}
if(e.target.value==8){
this.changestatusSTATUS='NO_ENTRY'
changestatus(SID, this.changestatusSTATUS).then(res=>{
this. serchListInterview()
})
this. serchListInterview()
}
if(e.target.value==9){
this.changestatusSTATUS='HAS_ENTRY'
changestatus(SID, this.changestatusSTATUS).then(res=>{
this. serchListInterview()
})
this. serchListInterview()
}
},
selectElement3(tItem,Tindex,status3,sta3){
sta3=!sta3
this.state[Tindex].sta=sta3
if(Tindex==0){
this.searchInfo.STA=[]
this.state.map((item,index)=>{
if(index!==0){
item.sta=false
}
if(index==0){
item.sta=true
}
return item
})
return
}
if(Tindex!==0){
this.state[0].sta=false
}
if(sta3==true){
this.searchInfo.STA.push(tItem)
}
if(sta3==false){
Array.prototype.indexOf = function(val) {
for (var i = 0; i < this.length; i++) {
if (this[i] == val) return i;
}
return -1;
}
Array.prototype.remove = function(val) {
var index = this.indexOf(val);
if (index > -1) {
this.splice(index, 1);
}
}
this.searchInfo.STA.remove(tItem)
}
},
Seedetail(Tid){
this.DOWNID=Tid
let parmars={
resumeId:Tid
}
seedetail(parmars).then(res=>{
console.log(res)
this.resume=res.data.body.resume
this.riList=res.data.body.riList
this.roList=res.data.body.roList
this.rpList=res.data.body.rpList
this.reList=res.data.body.reList
localStorage.setItem('a',JSON.stringify(this.resume))
localStorage.setItem('b',JSON.stringify(this.riList))
localStorage.setItem('c',JSON.stringify(this.roList))
localStorage.setItem('d',JSON.stringify(this.rpList))
localStorage.setItem('e',JSON.stringify(this.reList))
localStorage.setItem('downID',JSON.stringify(this.DOWNID))
})
let newpage = this.$router.resolve({
name: 'resumeDetail',
params:{},
query:{}
})
window.open(newpage.href, '_blank');
},
//搜索
Sousuo(page){
page = typeof(page)=='number'?page:1
this.searchInfo.pageIndex = page
this.pageIndex = page
let parmars={
pageSize:this.searchInfo.pageSize,
pageIndex:this.searchInfo.pageIndex,
parameter:{
keywordString:this.keywords,
highestDegreeNum:this.highestDegreeNum,
flowStatusList:this.searchInfo.STA,
interviewerName:this.interviewerName,
inviterName:this.inviterName,
}
}
SerchList(parmars).then(res=>{
let Ishow=res.data.items
if(res.data.success==true){
this.totalSize=res.data.body.totalNumber
this.Essentialinformation=res.data.body.items.map((item,index)=>{
item.id=item.id
item.flowStatus=item.flowStatus
item.interviewerName= item.interviewerName
item.inviterName=item.inviterName
item.modifier=item.modifier
item.c=item.modifier==''?item.modifier:item.modifier.split('_')
item.d=item.c[0]
item.modifyTime=item.modifyTime
item.ownerExpectTitles=item.ownerExpectTitles
item.ownerMobile=item.ownerMobile
item.ownerName=item.ownerName
item.seeTime=item.seeTime
return item
})
}
})
},
// 选择要搜索的元素
selectSeeElement(Titem,Tindex){
this.highestDegreeNum=Titem
this.clickIndex1=Tindex
},
selectinterviewElement(e){
if(e.label=='不限'){
this.interviewerName=''
}else{
this.interviewerName=e.label
}
},
selectinterviewElement2(e){
if(e.label=='不限'){
this.inviterName=''
}else{
this.inviterName=e.label
}
},
//改变页码
pageChange(page){
this.SearchList(page)
},
pageSizeChange(page){
this.searchInfo.pageSize=page
this.pageSize=page
this.SearchList()
},
},
mounted(){
this.serchListInterview() this.serchListInterview()
} this.Serchlistinterview()
this.SerchInvitation()
}
} }
</script> </script>
<style> <style>
.interview{ .interview{
min-height: 1100px; /* min-height: 2000px; */
width:100%; width:100%;
background:#F2F2F2; background:#EDEDED
} }
.interview-left{ .interview-left{
min-height: 1100px; /* min-height: 1900px; */
width: 65%; height: 800px;
float: left; overflow-y: auto;
background: #F2F2F2; overflow-x:hidden;
width: 63%;
float: left;
background: #F2F2F2;
} }
.interview-right{ .interview-right{
min-height: 1100px; height:500px;
width: 30%; width: 36%;
float: left; float: left;
margin-left: 3px; background:white;
background: white margin-top:10px;
margin-left: 1%;
} }
.leftcontentTop{ .leftcontentTop{
height: 120px; height: 120px;
width: 100%; width: 100%;
} }
.leftcontentContent{ .leftcontentContent{
/* height: 1000px; */
width: 100%; width: 100%;
margin-top: 10px margin-top: 10px;
margin-bottom: 40px
} }
.contentMassage{ .contentMassage{
width: 50%; width: 53%;
height: 80px; height: 60px;
float: left; float: left;
margin-left: 15px; margin-left: 1%;
background: white; background: white;
margin-top: 10px
/* margin-bottom: 35px */
} }
.contentState{ .contentState{
width: 20%; width:22%;
height: 80px; height: 60px;
float: left; float: left;
margin-left: 25px; margin-left: 1%;
background: white; background: white;
margin-top: 10px
/* margin-bottom: 35px */
} }
.contentRecord{ .contentRecord{
width:15%; width:19%;
height: 80px; height: 60px;
float: left; float: left;
margin-left: 25px; margin-left: 1%;
background: white; background: white;
text-align: center; margin-top: 10px
line-height: 24px /* margin-bottom: 35px */
}
.Recode span{
margin-left:20px
} }
.InpageBottom{ .InpageBottom{
height: 40px; height: 40px;
width: 1000px; width: 49.3%;
background:#EDEDED; background:#EDEDED;
position: fixed; position: fixed;
bottom: 0; bottom: 0;
margin-left:30px;
/* margin-top:40px */
} }
.active{ .active2{
color: blue; color: #0092FF
} }
select::-ms-expand{display:none;} select::-ms-expand{display:none;}
select{ select{
...@@ -476,7 +782,7 @@ select{ ...@@ -476,7 +782,7 @@ select{
-webkit-appearance:none; -webkit-appearance:none;
outline: none; outline: none;
border: none; border: none;
color: blue color: #0092FF
} }
option::-ms-expand{ display: none; } option::-ms-expand{ display: none; }
option{ option{
...@@ -492,17 +798,55 @@ option:hover{ ...@@ -492,17 +798,55 @@ option:hover{
.active{ .active{
color: blue; color: blue;
} }
.Education2 span:not(:first-child){ .Education2{
margin-left: 35px width:360px;
} }
.Education2 span:nth-child(6){ .Education2 :nth-child(2){
margin-left: 4px margin-left: 10%
} }
.Education2 :nth-child(3){
.state2 span:not(:first-child){ margin-left: 10%
margin-left: 18px }
.Education2 :nth-child(4){
margin-left:11px
}
.Education2 :nth-child(6){
margin-left: 10%
}
.Education2 :nth-child(7){
margin-left: 10%
}
.state2{
width: 370px;
}
.state2 :nth-child(2){
margin-left: 10%
}
.state2 :nth-child(3){
margin-left: 9%
}
.state2 :nth-child(4){
margin-left: 9%
}
.state2 :nth-child(5){
margin-left: 10%
}
.state2 :nth-child(7){
margin-left: 11%
}
.state2 :nth-child(8){
margin-left: 12%
}
.state2 :nth-child(9){
margin-left: 11%
}
.state2 :nth-child(12){
margin-left: 10%
}
.state2 :nth-child(11){
margin-left: 9%
} }
.state2 span:nth-child(8){ .state2 :nth-child(13){
margin-left:0px margin-left: 10%
} }
</style> </style>
...@@ -23,8 +23,9 @@ ...@@ -23,8 +23,9 @@
</Input> </Input>
</FormItem> </FormItem>
</Form> </Form>
<button type="primary" style="height:30px;width:440px;margin-left:30px; border-radius: 5px;background:rgb(0, 146, 255);color:rgb(255,255,255)" @click="login">登录</button> <span type="primary" style="line-height:30px;height:30px;width:440px;margin-left:30px; border-radius: 5px;background:rgb(0, 146, 255);color:rgb(255,255,255);display:inline-block;text-align:center" @click="login">登录</span>
</div> </div>
<div class="copy"> <div class="copy">
<p>量化派为你提供全程服务</p> <p>量化派为你提供全程服务</p>
<p>量化派版权所有</p> <p>量化派版权所有</p>
...@@ -40,6 +41,8 @@ import { login} from '../../api/login.server.js' ...@@ -40,6 +41,8 @@ import { login} from '../../api/login.server.js'
export default { export default {
data () { data () {
return { return {
channelarr:[],
ISIDMIN:'',
formInline: { formInline: {
user: '', user: '',
password: '' password: ''
...@@ -70,17 +73,17 @@ export default { ...@@ -70,17 +73,17 @@ export default {
userCode:this.formInline.user, userCode:this.formInline.user,
password:this.formInline.password password:this.formInline.password
} }
// if(this.formInline.password=='123456'){
// this.$router.push({name:'updatePsd'})
// return
// }
login(params).then(res=>{ login(params).then(res=>{
console.log(res) if(res.data.body.code=='100'){
this.$router.push({name:'text',params:{userCode:this.formInline.user}})
console.log('3323aa')
}
if(res.data.success==true){ if(res.data.success==true){
this.ISIDMIN=res.data.body
this.$router.push({name:"allResume"}) this.$router.push({name:"allResume"})
localStorage.setItem('isADMIN',JSON.stringify(this.ISIDMIN))
} }
}) })
// this.$router.push({name:"allResume"})
} }
} }
} }
......
<template> <template>
<div> <div>
llllll <div class="updatePsd">
<div class="updatePsd-content">
<div class="updatePsdContent-left">
<img src="../../assets/login.jpg">
</div>
<div class="updatePsdContent-right">
<div class="logo">
<img src="../../assets/log.jpg">
<h3>首次登录请修改密码</h3>
</div>
<div class="updatePsd_content">
<Form ref="formInline" :model="formInline" :rules="ruleInline" >
<FormItem prop="password">
<Input type="password" v-model="formInline.password" placeholder="Password" class="wordStyle" >
<Icon type="ios-lock-outline" slot="prepend"></Icon>
</Input>
</FormItem>
<FormItem prop="passwordTwo">
<Input type="password" v-model="formInline.passwordTwo" placeholder="Password" class="wordStyle" >
<Icon type="ios-lock-outline" slot="prepend"></Icon>
</Input>
</FormItem>
</Form>
<button type="primary" style="height:30px;width:440px;margin-left:30px; border-radius: 5px;background:rgb(0, 146, 255);color:rgb(255,255,255)" @click="loginT">登录</button>
</div>
<div class="copy">
<p>量化派为你提供全程服务</p>
<p>量化派版权所有</p>
</div>
</div>
</div>
</div>
</div> </div>
</template> </template>
<script> <script>
import { updatePsd} from '../../api/login.server.js'
export default { export default {
data () {
} return {
formInline: {
passwordTwo: '',
password: ''
},
channelarr:[],
ISIDMIN:'',
ruleInline: {
passwordTwo: [
{ required: true, message: '请输入相同的的密码', trigger: 'blur' },
{ type: 'string', min: 4, message: '', trigger: 'blur' }
],
password: [
{ required: true, message: '请输入正确的密码', trigger: 'blur' },
{ type: 'string', min: 4, message: '', trigger: 'blur' }
]
}
}
},
methods: {
handleSubmit(name) {
this.$refs[name].validate((valid) => {
if (valid) {
this.$Message.success('Success!');
} else {
this.$Message.error('Fail!');
}
})
},
loginT(){
let params={
userCode:this.$route.params.userCode,
password:this.formInline.password,
confirmPassWord:this.formInline.passwordTwo
}
updatePsd(params).then(res=>{
if(res.data.body.code=='101'){
this.$Message.error('输入的密码与初始密码相同,请输入不同的密码')
return
}
if(res.data.body.code=='102'){
this.$Message.error('两次输入的密码不一致,请输入不同的密码')
return
}
if(res.data.success==true){
this.ISIDMIN=res.data.body
localStorage.setItem('isADMIN',JSON.stringify(this.ISIDMIN))
this.$router.push({name:'allResume'})
}
})
}
}
}
</script> </script>
<style> <style>
.updatePsd{
width:100%;
height:100%;
background: #EAEAEA;
}
.updatePsd-content{
width: 1200px;
height: 1000px;
margin-left: 500px;
}
.updatePsdContent-left {
float: left;
width: 620px;
height: 740px
}
.updatePsdContent-right{
float: left;
width: 500px;
height: 740px;
background: #ffffff
}
.updatePsdContent-left img{
width: 100%;
height: 100%;
}
.logo{
width:100%;
height:140px;
margin-top:80px;
}
.logo img {
width: 100px;
height: 60px;
margin-left: 30px
}
.logo h3{
font-size: 20px;
color: black;
margin-left: 40px
}
.updatePsd_content{
height: 200px;
width: 100%;
}
.copy{
width: 100%;
height:100px;
margin-top: 200px;
}
.copy p{
margin-left: 30px
}
.wordStyle{
width: 440px;
margin-left: 30px
}
</style> </style>
...@@ -3,55 +3,35 @@ ...@@ -3,55 +3,35 @@
<div class="allResume-left"> <div class="allResume-left">
<Form :label-width="80"> <Form :label-width="80">
<FormItem label="关键词:" style="margin-top:20px"> <FormItem label="关键词:" style="margin-top:20px">
<Input placeholder="请输入关键词" style="width:300px" v-model="keywords"/> <Input placeholder="请输入关键词" style="width:85%" v-model="keywords" @keyup.enter.native="SouSuo(item.Num1,item.Num2,item.Num3)"/>
</FormItem> </FormItem>
<FormItem label="历任公司:"> <FormItem label="历任公司:">
<Input placeholder="请输入历任公司" style="width:300px" v-model="lrgs"/> <Input placeholder="请输入历任公司" style="width:85%" v-model="lrgs" @keyup.enter.native="SouSuo(item.Num1,item.Num2,item.Num3)"/>
</FormItem> </FormItem>
<FormItem label="性别:" class="sex"> <FormItem label="性别:" class="sex">
<span v-for="(item,index) in sexs" :class="{'active':index==clickIndex1}" @click="selectElement1(item,index)" :key="index" > {{item}}</span> <span v-for="(item,index) in sexs" :class="{'active1':index==clickIndex1}" @click="selectElement1(item.status1,index)" :key="index" > {{item.status1}}</span>
</FormItem> </FormItem>
<FormItem label="学历:" class="Education"> <FormItem label="学历:" class="Education">
<span v-for="(item,index) in Education" :class="{'active':index==clickIndex2}" @click="selectElement2(item,index)" :key="index"> {{item}}</span> <span v-for="(item,index) in Education" :class="{'active1':index==clickIndex2}" @click="selectElement2(item.Num2,index)" :key="index"> {{item.status2}}</span>
</FormItem> </FormItem>
<FormItem label="状态:" class="state"> <FormItem label="状态:" class="state">
<span v-for="(item,index) in state" :class="{'active':index==clickIndex3}" @click="selectElement3(item,index)" :key="index"> {{item}}</span> <span v-for="(item,index) in state" :class="{'active1':item.sta==true}" @click="selectElement3(item.Num3,index,item.status3,item.sta)" :key="index"> {{item.status3}}</span>
</FormItem> </FormItem>
<FormItem label="工作年限:"> <FormItem label="工作年限:" style="margin-left:20px">
<span style="width:100px"> <span style="width:100px;margin-left:10px">
<Select style="width:100px" placeholder="不限"> <Select style="width:100px" placeholder="不限" :label-in-value='true' v-model="searchInfo.ownerWorkYears1" @on-change='judge1'>
<Option value="0" >不限</Option> <Option v-for="item in ownerWorkYears1" :value="item.value" :key="item.value">{{item.label}}</Option>
<Option value="1">0</Option>
<Option value="2">1</Option>
<Option value="3">2</Option>
<Option value="4">3</Option>
<Option value="5">4</Option>
<Option value="6">5</Option>
<Option value="7">6</Option>
<Option value="8">7</Option>
<Option value="9">8</Option>
<Option value="10">9</Option>
<Option value="11">10</Option>
</Select> </Select>
<span>-</span> <span>-</span>
<Select style="width:100px" placeholder="不限"> <Select style="width:100px" placeholder="不限" :label-in-value='true' v-model="searchInfo.ownerWorkYears2" @on-change='judge2'>
<Option value="0" >不限</Option> <Option v-for="item in ownerWorkYears2" :value="item.value" :key="item.value">{{item.label}}</Option>
<Option value="1">0</Option>
<Option value="2">1</Option>
<Option value="3">2</Option>
<Option value="4">3</Option>
<Option value="5">4</Option>
<Option value="6">5</Option>
<Option value="7">6</Option>
<Option value="8">7</Option>
<Option value="9">8</Option>
<Option value="10">9</Option>
<Option value="11">10</Option>
</Select> </Select>
</span> </span><br>
<span v-show="Black==true" style="color:red;margin-left:10%">最低年限不能大于最高年限</span>
</FormItem> </FormItem>
</Form> </Form>
<button style="width:200px;margin-left:88px; border-radius: 5px;background:rgb(0, 146, 255);color:rgb(255,255,255);font-size:18px">搜索</button> <Button type="primary" style="width:30%;margin-left:30%;font-size:13px" @click="SouSuo(item.Num1,item.Num2,item.Num3)">搜索</Button>
<div class="text1"></div> <div class="text1"></div>
<div class="text2"></div> <div class="text2"></div>
<div class="text3"></div> <div class="text3"></div>
...@@ -59,81 +39,155 @@ ...@@ -59,81 +39,155 @@
<div class="allResume-right"> <div class="allResume-right">
<div class="resumeRightContentTop"> <div class="resumeRightContentTop">
<div style="width:100%;height:80px;margin-top:20px"> <div style="width:100%;height:80px;margin-top:20px">
<div style="width:45%;height:100%;float:left;background:rgb(61,169,247);margin-left:60px"></div> <div style="width:40%;height:100%;float:left;background:rgb(61,169,247);margin-left:60px;line-height:80px;text-align:center;color:white;font-size:20px">数据展示</div>
<div style="width:45%;height:100%;float:left;background:rgb(253,85,83);margin-left:30px"></div> <div style="width:40%;height:100%;float:left;background:rgb(253,85,83);margin-left:30px;line-height:80px;text-align:center;color:white;font-size:20px">提示语</div>
</div> </div>
<div style="margin-top:20px;height:30px;line-height:30px;border-bottom:1px solid black"> <div style="background:background:rgba(255,255,255,1);width:100%;margin-top:20px;height:40px;line-height:40px;border-bottom:1px solid black">
<input type='checkbox' class='input-checkbox' v-model='checked' v-on:click='checkedAll' style="margin-left:20px"><span style="margin-left:10px">全选</span> <input type='checkbox' class='input-checkbox' v-model='checked' @click='checkedAll' style="margin-left:10px"><span style="margin-left:10px">全选</span>
<span style="margin-left:20px;background:#2d8cf0;width:60px;height:30px">下载简历</span> <Button type="primary" size="small" style="margin-left:2%;width:50px" @click="downloadAll">下载</Button>
<span style="margin-left:20px">删除</span> <Button type="primary" size="small" style="margin-left:2%;width:50px" @click="delateAll">删除</Button>
<span style="margin-left:73%">导出列表</span> <Button type="primary" size="small" style="float:right;margin-right:10px;" @click="allexport">导出列表</Button>
</div> </div>
<div class="Resumecontent"> <div style="width:100%;float:left;margin-bottom:40px">
<div v-for='(item,i) in ajaxData' :key="i" id="a"> <div style="margin:50px auto;width:300px;height:200px;line-height:200px;text-align:center;font-size:20px" v-show="ajaxData.length==0">暂无数据</div>
<div style="width:500px;float:left;" class="massage"> <div class="Resumecontent" v-for='(item,i) in ajaxData' :key="i">
<input type='checkbox' name='checkboxinput' class='input-checkbox' v-model='checkboxList' :value="item.id"> <div class="detailResume" id="a" style="background:rgba(241,241,241,1);">
<span>{{item.ownerName}} |</span><span>{{item.ownerMobile}} |</span><span>{{item.ownerAge}}岁 |</span> <p style="margin-top:10px">
<span>{{item.ownerSex}} |</span><span>{{item.ownerWorkYears}} |</span><span>{{item.ownerExpectTitles}}<br></span> <span style="display:inline-block;height:100%;font-size: 12px;margin-top:5px;overflow:hidden;text-overflow:ellipsis;white-space: nowrap;"><input type='checkbox' name='checkboxinput' class='input-checkbox' v-model='checkboxList' :value="item.id" @click="selectInputElement(i,item.id,item.flowStatus,item.STATES)" style="margin-left:10px;"></span>
<span >{{item.modifyTime}} 投递 |</span> <span style="display:inline-block;height:100%;font-size: 12px;margin-top:5px;overflow:hidden;text-overflow:ellipsis;white-space: nowrap;" @click="Seedetail(item.id)">{{item.ownerName}} <span v-show="item.ownerMobile !==''">|</span></span>
<span>{{item.optSource}} |</span><span>{{item.srcSite}}</span><br> <span style="display:inline-block;height:100%;font-size: 12px;margin-top:5px;overflow:hidden;text-overflow:ellipsis;white-space: nowrap;" @click="Seedetail(item.id)"> {{item.ownerMobile}} <span v-show="item.ownerAge !==''">|</span></span>
</div> <span style="display:inline-block;height:100%;font-size: 12px;margin-top:5px;overflow:hidden;text-overflow:ellipsis;white-space: nowrap;" @click="Seedetail(item.id)"> {{item.ownerAge}}<span v-show="item.ownerSex !==''">|</span></span>
<div style="width:300px;float:left;height:60px;text-align:right;margin-left:40px"> <span style="display:inline-block;height:100%;font-size: 12px;margin-top:5px;overflow:hidden;text-overflow:ellipsis;white-space: nowrap;" @click="Seedetail(item.id)"> {{item.ownerSex}} <span v-show="item.ownerWorkYears !==''">|</span> </span>
<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="display:inline-block;height:100%;font-size: 12px;margin-top:5px;overflow:hidden;text-overflow:ellipsis;white-space: nowrap;" @click="Seedetail(item.id)"> {{item.ownerWorkYears}}<span v-show="item.ownerExpectTitles !==''">|</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="display:inline-block;height:100%;margin-top:5px;font-size:12px;width:15%;overflow:hidden;text-overflow:ellipsis;white-space: nowrap;" @click="Seedetail(item.id)"> {{item.ownerExpectTitles}}</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="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: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: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: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: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:30px;margin-top:5px" v-else-if="item.flowStatus=='TO_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=='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=='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=='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=='OPTION'"><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=='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=='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=='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_SENT_OFFER'"><Icon type="ios-radio-button-on" style="color:#43CD80" /><span style="margin-left:10px">已发Offer</span></span> <span style="margin-right:10px;margin-top:5px" v-else-if="item.flowStatus=='TO_SEE'">
<span style="margin-right:30px;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 >
<span style="margin-right:30px;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> <select name="3" id="3" @change="selectFn2($event,item.id)">
<select name="1" id="a" style="margin-right:20px;margin-top:5px" @change="selectFn($event)" v-else-if="item.flowStatus=='TO_DO'"> <option value="1">邀请面试</option>
<option value="2">备选</option>
<option value="3">PASS</option>
</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:10px;margin-top:5px" v-else-if="item.flowStatus=='OPTION'">
<span >
<select name="4" id="4" @change="selectFn3($event,item.id)">
<option value="1">备选</option>
<option value="2">邀请面试</option>
<option value="3">PASS</option>
</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:10px;margin-top:5px" v-else-if="item.flowStatus=='PASS'">
<span >
<select name="2" id="2" @change="selectFn4($event,item.id)">
<option value="1">PASS</option>
<option value="2">邀请面试</option>
<option value="3">备选</option>
</select>
</span>
</span>
<select name="1" id="a" @change="selectFn1($event,item.id)" v-else-if="item.flowStatus=='TO_DO'" style="margin-right:10px">
<option value="1">待处理</option> <option value="1">待处理</option>
<option value="2">pass</option> <option value="2">pass</option>
<option value="3">准备约面</option> <option value="3">邀请面试</option>
<option value="4">备选</option> <option value="4">备选</option>
</select> </select>
<p style="font-size:18px;margin:5px 35px 0 0"> <span><Icon type="md-download" @click="downloadONE(item.id)" style="font-size:15px"/></span>
<span><Icon type="md-download" @click="downLoad(item.id)"/></span> <span ><Icon type="md-trash" v-if="item.flowStatus=='TO_SEE'" @click="undelate" style="color:#b5b5b5;font-size:15px"/></span>
<span ><Icon type="md-trash" /></span> <span ><Icon type="md-trash" v-if="item.flowStatus=='HAS_SEE'" @click="undelate" style="color:#b5b5b5;font-size:15px"/></span>
</p> <span ><Icon type="md-trash" v-if="item.flowStatus=='SEE_FAIL'" @click="undelate" style="color:#b5b5b5;font-size:15px"/></span>
</div> <span ><Icon type="md-trash" v-if="item.flowStatus=='INTERVIEW_FAIL'" @click="undelate" style="color:#b5b5b5;font-size:15px"/></span>
<div style="width:190px;float:left;height:60px;margin-left:40px"> <span ><Icon type="md-trash" v-if="item.flowStatus=='TO_SENT_OFFER'" @click="undelate" style="color:#b5b5b5;font-size:15px"/></span>
<span style="margin:10px 0 0 10px;display:inline-block">最后操作人 |</span><span style="margin-left:13px">{{item.modifier}}</span><br> <span ><Icon type="md-trash" v-if="item.flowStatus=='TO_ENTRY'" @click="undelate" style="color:#b5b5b5;font-size:15px"/></span>
<span style="margin-left:10px">{{item.modifyTime}}</span> <span ><Icon type="md-trash" v-if="item.flowStatus=='HAS_ENTRY'" @click="undelate" style="color:#b5b5b5;font-size:15px"/></span>
<p style="height:40px;width:30px;margin:-35px 0 0 180px;color:blue" @click="RecodeFrame">操作记录</p> <span ><Icon type="md-trash" v-if="item.flowStatus=='NO_ENTRY'" @click="undelate" style="color:#b5b5b5;font-size:15px"/></span>
</div> <span ><Icon type="md-trash" v-if="item.flowStatus=='END'" @click="undelate" style="color:#b5b5b5;font-size:15px"/></span>
</div> <span ><Icon type="md-trash" v-if="item.flowStatus=='HAS_SENT_OFFER'" @click="undelate" style="color:#b5b5b5;font-size:15px"/></span>
</div> <span ><Icon type="md-trash" v-if="item.flowStatus=='PASS'" @click="delateR(item.id)" style="font-size:15px"/></span>
</div> <span ><Icon type="md-trash" v-if="item.flowStatus=='OPTION'" @click="delateR(item.id)" style="font-size:15px"/></span>
<div class="pageBottom"> <span ><Icon type="md-trash" v-if="item.flowStatus=='TO_DO'" @click="delateR(item.id)" style="font-size:15px"/></span>
<Page :total="100" show-elevator style="text-align:center;margin-top:8px"/> <span @click="RecordSEE(item.id,item.ownerName)" style="color:#0092FF">记录</span>
</div> </span>
</p>
<p style="margin-top:10px">
<span style="display:inline-block;font-size: 12px;margin-left:25px">{{item.deliveryTime}}投递 |</span>
<span style="display:inline-block;font-size: 12px;margin-left:3px">{{item.optSource}}<span v-show="item.srcSite!==''"> |</span></span>
<span style="display:inline-block;font-size: 12px;margin-left:3px">{{item.srcSite}}</span>
<span style="display:inline-block;font-size: 12px;width:30%;float:right;text-align:right;margin-right:10px">
<span>{{item.modifyTime}}</span>
<span>最后操作人:{{item.d}}</span>
</span>
</p>
</div>
</div>
</div>
<div class="pageBottom" style="width:59%;background:rgba(255,255,255,1);text-align:center;position:fixed;bottom:0">
<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> </div>
<!-- 操作记录弹出框 --> <!-- 操作记录弹出框 -->
<Modal <Modal
v-model="modal1" v-model="modal1"
@on-ok="ok"
width='500px' width='500px'
:footer-hide="true" :footer-hide="true"
:closable='false' :closable='false'>
@on-cancel="cancel"> <div>
<div style="height:600px"> <h2 style="text-align: center;color:black" >操作记录</h2>
<h2 style="text-align: center;color:black">操作记录</h2> <h2 style="text-align: center;color:#999999">候选人:{{toseename}}</h2>
<h2 style="text-align: center;color:#999999">候选人:陈意</h2> <div v-for="(item,index) in recordList" :key="index">
<p style="margin-top:30px;text-align:center" class="Recode" > <p style="margin-top:30px;text-align:center" class="Recode">
<span>李宁</span> <span>{{item.approveUserName}}</span>
<span>2019-07-02</span> <span>{{item.dateTime}}</span>
<span>15:22:22</span> <span style="color:blue" v-if=" item.previousState=='INTERVIEW_OK'">面试合适</span>
<span style="color:blue">将一个状态</span> <span style="color:blue" v-if=" item.previousState=='INTERVIEW_FAIL'">面试淘汰</span>
<span>变更为</span> <span style="color:blue" v-if=" item.previousState=='END'">终止面试</span>
<span style="color:blue">另一个状态</span> <span style="color:blue" v-if=" item.previousState=='SEE_FAIL'">约面失败</span>
</p> <span style="color:blue" v-if=" item.previousState=='NO_ENTRY'">未入职</span>
<span style="color:blue" v-if=" item.previousState=='TO_SEE'">准备约面</span>
<span style="color:blue" v-if=" item.previousState=='HAS_SEE'">已邀约</span>
<span style="color:blue" v-if=" item.previousState=='OPTION'">备选</span>
<span style="color:blue" v-if=" item.previousState=='TO_SENT_OFFER'">待Offer</span>
<span style="color:blue" v-if=" item.previousState=='HAS_SENT_OFFER'">已发offer</span>
<span style="color:blue" v-if=" item.previousState=='TO_ENTRY'">待入职</span>
<span style="color:blue" v-if=" item.previousState=='HAS_ENTRY'">已入职</span>
<span style="color:blue" v-if=" item.previousState=='PASS'">PASS</span>
<span style="color:blue" v-if=" item.previousState=='TO_DO'">待处理</span>
<span style="color:blue" v-if=" item.previousState=='RESET'">重启面试</span>
<span>变更为</span>
<span style="color:blue" v-if=" item.afterState=='INTERVIEW_OK'">面试合适</span>
<span style="color:blue" v-if=" item.afterState=='INTERVIEW_FAIL'">面试淘汰</span>
<span style="color:blue" v-if=" item.afterState=='END'">终止面试</span>
<span style="color:blue" v-if=" item.afterState=='SEE_FAIL'">约面失败</span>
<span style="color:blue" v-if=" item.afterState=='NO_ENTRY'">未入职</span>
<span style="color:blue" v-if=" item.afterState=='TO_SEE'">准备约面</span>
<span style="color:blue" v-if=" item.afterState=='HAS_SEE'">已邀约</span>
<span style="color:blue" v-if=" item.afterState=='OPTION'">备选</span>
<span style="color:blue" v-if=" item.afterState=='TO_SENT_OFFER'">待Offer</span>
<span style="color:blue" v-if=" item.afterState=='HAS_SENT_OFFER'">已发offer</span>
<span style="color:blue" v-if=" item.afterState=='TO_ENTRY'">待入职</span>
<span style="color:blue" v-if=" item.afterState=='HAS_ENTRY'">已入职</span>
<span style="color:blue" v-if=" item.afterState=='PASS'">PASS</span>
<span style="color:blue" v-if=" item.afterState=='TO_DO'">待处理</span>
<span style="color:blue" v-if=" item.afterState=='RESET'">重启面试</span>
</p>
</div>
</div> </div>
<div style="height:30px;width:100%;text-align:center"> <div style="height:30px;width:100%;text-align:center;margin-top:30px">
<p style="height:20px;width:40px;font-size:16px;color:blue; border-radius: 5px;margin-left:220px" @click="modal1=false"> <p style="height:20px;width:40px;font-size:16px;color:blue; border-radius: 5px;margin-left:220px" @click="modal1=false">
关闭 关闭
</p> </p>
...@@ -142,54 +196,183 @@ ...@@ -142,54 +196,183 @@
<!-- 准备约面弹出框 --> <!-- 准备约面弹出框 -->
<Modal <Modal
v-model="modal2" v-model="modal2"
@on-ok="ok" width='380px'
width='280px' :closable='false'>
:closable='false'
@on-cancel="cancel">
<div > <div >
<h2 style="text-align: center;color:black">提示</h2> <h2 style="text-align: center;color:black">提示</h2>
<p style="margin-top:20px;line-height:25px"> <p style="margin-top:20px;line-height:25px">
<span>更改<span style="color:blue">约面”</span>的状态后,你需要从<span style="color:blue">”面试管理“</span>中对该候选人进行后续的操作。</span> <span>更改<span style="color:blue">“邀请约面”</span>的状态后,你需要从<span style="color:blue">”面试管理“</span>中对该候选人进行后续的操作。</span>
</p> </p>
<p style="margin-top:20px;line-height:25px"> <p style="margin-top:20px;line-height:25px">
<span>如需将简历恢复为初始状态,你可在<span style="color:blue">”面试管理“</span>中操作 <Form :label-width="80">
<span style="color:blue">”终止面试“</span>,然后在点击<span style="color:blue">”重启流程“</span></span> <FormItem label="邀约人" style="margin-top:20px" >
<Input v-model="UpdateOWER" style="width:180px" :maxlength="5"/>
</FormItem>
<FormItem label="面试时间" style="margin-top:20px">
<DatePicker type="datetime" style="width:180px" v-model="UpdateTIME" format="yyyy-MM-dd HH:mm:ss" @on-change="changeTime" :options="options3" :editable='false'></DatePicker>
</FormItem>
<FormItem label="面试官" style="margin-top:20px">
<Input v-model="UpdateVIEW" style="width:180px" :maxlength="5"/>
</FormItem>
</Form>
</p> </p>
</div> </div>
<div slot='footer' style="text-align:center"> <div slot='footer' style="text-align:center">
<Button type='primary' @click='modal2=false'>取消</Button> <Button type='primary' @click='pushlist'>取消</Button>
<Button type='primary' >确定</Button> <Button type='primary' @click="addINTERVIEW" >确定</Button>
</div> </div>
</Modal> </Modal>
<!-- 可删除状态下,删除提示框 -->
<Modal
v-model="modal3"
width='280px'
:closable='false'>
<div >
<h2 style="text-align: center;color:black">提示</h2>
<p>删除后不可恢复,是否确定永久删除简历?</p>
</div>
<div slot='footer' style="text-align:center">
<Button type='primary' @click='modal3=false'>取消</Button>
<Button type='primary' @click="delateONE" >确定</Button>
</div>
</Modal>
<Modal
v-model="modal7"
width='280px'
:closable='false'>
<div >
<h2 style="text-align: center;color:black">提示</h2>
<p>删除后不可恢复,是否确定永久删除简历?</p>
</div>
<div slot='footer' style="text-align:center">
<Button type='primary' @click='modal7=false'>取消</Button>
<Button type='primary' @click="cofdelateAll" >确定</Button>
</div>
</Modal>
<!-- 不可删除状态下,删除提示框 -->
<Modal
v-model="modal4"
width='280px'
:closable='false'>
<div >
<h2 style="text-align: center;color:black">提示</h2>
<p>进入面试管理中的候选人,都不可删除。如需继续删除,请在面试管理中操作”终止面试“后,再重启流程,然后返回该页面进行删除。</p>
</div>
<div slot='footer' style="text-align:center">
<Button type='primary' @click='modal4=false'>取消</Button>
<Button type='primary' @click="tointerview">面试管理</Button>
</div>
</Modal>
<!-- 批量删除有不可删除状态时弹出框 -->
<Modal
v-model="modal5"
width='280px'
:closable='false'>
<div >
<h2 style="text-align: center;color:black">提示</h2>
<p style="text-align: center;height:40px;line-height:40px">您选中的简历中包含不可删除简历</p>
</div>
<div slot='footer' style="text-align:center">
<Button type='primary' @click='modal5=false'>确定</Button>
</div>
</Modal>
<!-- 没有选择元素时下载提示 -->
<Modal
v-model="modal6"
width='280px'
:closable='false'>
<div >
<h2 style="text-align: center;color:black">提示</h2>
<p style="text-align: center;">请选择元素再进行下载</p>
</div>
<div slot='footer' style="text-align:center">
<Button type='primary' @click='modal6=false'>取消</Button>
</div>
</Modal>
</div> </div>
</template> </template>
<script> <script>
import { serchList,downloadone} from '../../api/resume.server.js' import { serchList,downloadone,sousuoList,seedetail,PASS,TOSEE,OPTION,deleteREsume,downloadOne,exportLIST,recodeLIST,addinterview} from '../../api/resume.server'
import qs from 'qs'
import Router from 'vue-router';
export default { export default {
data () { data () {
return { return {
modal1:false, modal1:false,
modal2:false, modal2:false,
modal3:false,
modal4:false,
modal5:false,
modal6:false,
modal7:false,
DOSTA:'',
options3: {
disabledDate (date) {
return date && date.valueOf() <Date.now()-3600*24*1000;
}
},
checkboxList:[], checkboxList:[],
Black:false,
ownerName:'',
midStr:'',
toseename:'',
UpdateOWER:'',
UpdateTIME:'',
UpdateVIEW:'',
DOWNID:'',
resume:[],//简历基本详情
riList:[],//实习经历列表
roList:[],//工作经历列表
rpList:[],//项目经历列表
reList:[],//教育经历列表
a:[],
checked: false, checked: false,
activeClass: 0, activeClass: 0,
clickIndex1: 0, clickIndex1: 0,
clickIndex2: 0, clickIndex2: 0,
clickIndex3: 0, clickIndex3:0,
keywords:'', keywords:'',
recordList:[],
all:'all',
lrgs:'', lrgs:'',
a:'',
toseeid:'',
item:[], item:[],
STATE:'',
delateARRALL:[],
delateARRALL2:[],
flowStatusarr:[],
flowStatusarr2:[],
DELATEARR:[],
quanxuan:[],
orignarr:['TO_SEE','HAS_SEE','SEE_FAIL','INTERVIEW_FAIL','TO_SENT_OFFER','TO_ENTRY','HAS_ENTRY','NO_ENTRY','END'],
totalSize:null,
pageSize:30,
pageIndex:1,
searchInfo:{ searchInfo:{
pageSize:30, pageSize:30,
pageIndex:'', pageIndex:1,
id:'' id:'',
SEX:'',
Edu:'',
ccc:'',
STA:[],
status:"",
ownerWorkYears1:'',
ownerWorkYears2:'',
}, },
arr:[], arr:[],
sexs:['不限','',''], sexs:[{Num1:'',status1:'不限'},{Num1:'0',status1:""},{Num1:'0',status1:''}],
Education:['不限','专科以下','专科及以上','本科及以上','硕士及以上','博士及以上','985/211'], Education:[{Num2:'',status2:'不限'},{Num2:"0",status2:'专科以下'},{Num2:'1',status2:'专科及以上'},{Num2:'2',status2:'本科及以上'},{Num2:'3',status2:'硕士及以上'},{Num2:'4',status2:'博士及以上'},{Num2:'99',status2:'985/211'}],
state:['不限','待处理','备选','Pass','准备约面','已邀约','邀约失败','面试淘汰','待Offer','待入职','已入职','未入职','终止面试'], state:[{Num3:[],status3:'不限',sta:true},{Num3:'TO_DO',status3:'待处理',sta:false},{Num3:'OPTION',status3:'备选',sta:false},{Num3:'PASS',status3:'Pass',sta:false},{Num3:'TO_SEE',status3:'邀请面试',sta:false},{Num3:'HAS_SEE',status3:'已邀约',sta:false},{Num3:'SEE_FAIL',status3:'邀约失败',sta:false},
{Num3:'INTERVIEW_FAIL',status3:'面试淘汰',sta:false},{Num3:'TO_SENT_OFFER',status3:'待Offer',sta:false},{Num3:'TO_ENTRY',status3:'待入职',sta:false},{Num3:'HAS_ENTRY',status3:'已入职',sta:false},{Num3:'NO_ENTRY',status3:'未入职',sta:false},{Num3:'END',status3:'终止面试',sta:false},],
active:'', active:'',
ownerWorkYears1:[{value:'',label:'不限'},{value:0,label:'0'},{value:1,label:'1'},{value:2,label:'2'},{value:3,label:'3'},{value:4,label:'4'},{value:5,label:'5'},
{value:6,label:'6'},{value:7,label:'7'},{value:8,label:'8'},{value:9,label:'9'},{value:10,label:'10'}],
ownerWorkYears2:[{value:'',label:'不限'},{value:0,label:'0'},{value:1,label:'1'},{value:2,label:'2'},{value:3,label:'3'},{value:4,label:'4'},{value:5,label:'5'},
{value:6,label:'6'},{value:7,label:'7'},{value:8,label:'8'},{value:9,label:'9'},{value:10,label:'10'}],
value:[], value:[],
ajaxData: [], ajaxData: [],
checkData: [] // 双向数据绑定的数组 checkData: [] // 双向数据绑定的数组
...@@ -205,7 +388,7 @@ import { serchList,downloadone} from '../../api/resume.server.js' ...@@ -205,7 +388,7 @@ import { serchList,downloadone} from '../../api/resume.server.js'
} }
}, },
deep: true deep: true
} }
}, },
methods: { methods: {
...@@ -213,46 +396,229 @@ import { serchList,downloadone} from '../../api/resume.server.js' ...@@ -213,46 +396,229 @@ import { serchList,downloadone} from '../../api/resume.server.js'
checkedAll: function() { checkedAll: function() {
if (this.checked) {//实现反选 if (this.checked) {//实现反选
this.checkboxList = []; this.checkboxList = [];
this.ajaxData.forEach( (item) => {
this.checkboxList = [];
this.delateARRALL=[];
this.flowStatusarr=[]
item.STATES=false
});
} else { //实现全选 } else { //实现全选
this.checkboxList = []; this.checkboxList = [];
this.ajaxData.forEach( (item) => { this.ajaxData.forEach( (item) => {
this.checkboxList.push(item.id); this.checkboxList.push(item.id);
this.delateARRALL.push(item.id);
this.flowStatusarr.push(item.flowStatus)
item.STATES=true
}); });
} }
}, },
RecodeFrame(){ // 准备约面
this.modal1=true tosee(){
let parmars={
status:"TO_SEE",
id:this.toseeid,
}
TOSEE(parmars).then(res=>{
if(res.data.success==true){
this.modal2=false
this.SearchList()
}
})
}, },
//操作处理面试状态 //操作处理面试状态
selectFn(e) { selectFn1(e,SID) {
this.toseeid=SID
// 准备约面
if(e.target.value==3){ if(e.target.value==3){
this.modal2=true
// TOSEE().then()
}
// 简历PASS
if(e.target.value==2){
let parmars={
status:"PASS",
id:SID,
}
PASS(parmars).then(res=>{
if(res.data.success==true){
this.SearchList()
}
})
this.SearchList()
}
// 简历备选
if(e.target.value==4){
let parmars={
status:"OPTION",
id:SID,
}
OPTION(parmars).then(res=>{
if(res.data.success==true){
this.SearchList()
}
})
this.SearchList()
}
},
addINTERVIEW(){
let parmars={
resumeId: this.toseeid,
inviterName:this.UpdateOWER,
interviewerName:this.UpdateVIEW,
seeTime:this.UpdateTIME
}
if(this.UpdateOWER==''||this.UpdateVIEW==''||this.UpdateTIME==''){
this.$Message.error('请填写完整的约面信息')
return
}
addinterview(parmars).then(res=>{
if(res.data.success==true){
this.modal2=false
this.SearchList()
}
if(res.data.body.code==0){
this.modal2=false
this.SearchList()
}
})
},
selectFn2(e,SID) {
this.toseeid=SID
// 准备约面
if(e.target.value==1){
let parmars={
status:"TO_SEE",
id:SID,
}
this.modal2=true this.modal2=true
} }
// 简历PASS
if(e.target.value==3){
let parmars={
status:"PASS",
id:SID,
}
PASS(parmars).then(res=>{
if(res.data.success==true){
// this.SearchList()
}
})
this.SearchList()
}
// 简历备选
if(e.target.value==2){
let parmars={
status:"OPTION",
id:SID,
}
OPTION(parmars).then(res=>{
if(res.data.success==true){
// this.SearchList()
}
})
this.SearchList()
}
},
selectFn3(e,SID) {
this.toseeid=SID
// 准备约面
if(e.target.value==2){
let parmars={
status:"TO_SEE",
id:SID,
}
this.modal2=true
}
// 简历PASS
if(e.target.value==3){
let parmars={
status:"PASS",
id:SID,
}
PASS(parmars).then(res=>{
if(res.data.success==true){
// this.SearchList()
}
})
this.SearchList()
}
// 简历备选
if(e.target.value==1){
let parmars={
status:"OPTION",
id:SID,
}
OPTION(parmars).then(res=>{
if(res.data.success==true){
// this.SearchList()
}
})
this.SearchList()
}
},
selectFn4(e,SID) {
this.toseeid=SID
// 准备约面
if(e.target.value==2){
let parmars={
status:"TO_SEE",
id:SID,
}
this.modal2=true
}
// 简历PASS
if(e.target.value==1){
let parmars={
status:"PASS",
id:SID,
}
PASS(parmars).then(res=>{
if(res.data.success==true){
// this.SearchList()
}
})
this.SearchList()
}
// 简历备选
if(e.target.value==3){
let parmars={
status:"OPTION",
id:SID,
}
OPTION(parmars).then(res=>{
if(res.data.success==true){
// this.SearchList()
}
})
this.SearchList()
}
}, },
// *****************************************
ok () {
this.$Message.info('Clicked ok');
},
cancel () {
this.$Message.info('Clicked cancel');
},
// *********************************************
//查询简历列表 //查询简历列表
SearchList(){ SearchList(page){
page = typeof(page)=='number'?page:1
this.searchInfo.pageIndex = page
this.pageIndex = page
let parmars={ let parmars={
pageSize:this.searchInfo.pageSize, pageSize:this.searchInfo.pageSize,
pageIndex:this.searchInfo.pageIndex pageIndex:this.searchInfo.pageIndex
} }
serchList(parmars).then(res=>{ serchList(parmars).then(res=>{
console.log(res)
if(res.data.success==true){ if(res.data.success==true){
console.log(res.data.body.items) this.totalSize=res.data.body.totalNumber
this.quanxuan.push(res.data.body.items.id)
this.ajaxData=res.data.body.items.map((item,index)=>{ this.ajaxData=res.data.body.items.map((item,index)=>{
item.id=item.id
item.ownerName=item.ownerName item.ownerName=item.ownerName
item.ownerSex=item.ownerSex item.ownerSex=item.ownerSex
item.deliveryTime=item.deliveryTime
item.belongs=item.belongs item.belongs=item.belongs
item.emailSendtime=item.emailSendtime item.emailSendtime=item.emailSendtime
item.ownerMobile=item.ownerMobile item.ownerMobile=item.ownerMobile
...@@ -265,38 +631,364 @@ import { serchList,downloadone} from '../../api/resume.server.js' ...@@ -265,38 +631,364 @@ import { serchList,downloadone} from '../../api/resume.server.js'
item.srcSite=item.srcSite item.srcSite=item.srcSite
item.optSource=item.optSource item.optSource=item.optSource
item.modifier=item.modifier item.modifier=item.modifier
item.STATES=false
item.c=item.modifier==''?item.modifier:item.modifier.split('_')
item.d=item.c[0]
return item return item
}) })
} }
}) })
}, },
//选择元素 //选择搜索元素
selectElement1(tItem,Tindex){ selectElement1(tItem,Tindex){
let Item=tItem; this.searchInfo.SEX=Tindex==0?'':tItem;
this.clickIndex1=Tindex this.clickIndex1=Tindex
console.log(Item)
}, },
selectElement2(tItem,Tindex){ selectElement2(tItem,Tindex){
let Item=tItem; this.searchInfo.Edu=tItem;
this.clickIndex2=Tindex this.clickIndex2=Tindex
console.log(Item)
}, },
selectElement3(tItem,Tindex){ selectElement3(tItem,Tindex,status3,sta3){
let Item=tItem; sta3=!sta3
this.clickIndex3=Tindex this.state[Tindex].sta=sta3
console.log(Item) if(Tindex==0){
this.searchInfo.STA=[]
this.state.map((item,index)=>{
if(index!==0){
item.sta=false
}
if(index==0){
item.sta=true
}
return item
})
return
}
if(Tindex!==0){
this.state[0].sta=false
}
if(sta3==true){
this.searchInfo.STA.push(tItem)
}
if(sta3==false){
Array.prototype.indexOf = function(val) {
for (var i = 0; i < this.length; i++) {
if (this[i] == val) return i;
}
return -1;
}
Array.prototype.remove = function(val) {
var index = this.indexOf(val);
if (index > -1) {
this.splice(index, 1);
}
}
this.searchInfo.STA.remove(tItem)
}
}, },
//下载单条简历 //获取option的值
downLoad(ID){ selectElement4(){
},
//搜索
SouSuo(page){
page = typeof(page)=='number'?page:1
this.searchInfo.pageIndex = page
this.pageIndex = page
let parmars={ let parmars={
resumeId:ID pageSize:this.searchInfo.pageSize,
pageIndex:this.searchInfo.pageIndex,
parameter:{
optSourceCode:'',
keywordString:this.keywords==''?'':this.keywords,
company:this.lrgs==''?'':this.lrgs,
ownerSex:this.searchInfo.SEX,
highestDegreeNum:this.searchInfo.Edu,
flowStatusList:this.searchInfo.STA,
ownerWorkYears1:this.searchInfo.ownerWorkYears1,
ownerWorkYears2:this.searchInfo.ownerWorkYears2,
}
} }
downloadone(parmars).then(res=>{ if(this.searchInfo.ownerWorkYears1>this.searchInfo.ownerWorkYears2){
if(res.data.success=true){ this.$Message.error('最低年限不能大于最高年限')
this.$Message.success('下载成功') return
}
if(this.searchInfo.ownerWorkYears2<this.searchInfo.ownerWorkYears1){
this.$Message.error('最高年限不能小于最小年限')
return
}
sousuoList(parmars).then(res=>{
let Ishow=res.data.items
if(res.data.success==true){
this.totalSize=res.data.body.totalNumber
this.ajaxData=res.data.body.items.map((item,index)=>{
item.id=item.id
item.ownerName=item.ownerName
item.ownerSex=item.ownerSex
item.belongs=item.belongs
item.emailSendtime=item.emailSendtime
item.ownerMobile=item.ownerMobile
item.ownerHighestDegree=item.ownerHighestDegree
item.ownerExpectTitles=item.ownerExpectTitles
item.flowStatus=item.flowStatus
item.ownerAge=item.ownerAge
item.ownerWorkYears=item.ownerWorkYears
item.modifyTime=item.modifyTime
item.srcSite=item.srcSite
item.optSource=item.optSource
item.STATES=false
item.modifier=item.modifier
item.c=item.modifier==''?item.modifier:item.modifier.split('_')
item.d=item.c[0]
return item
})
} }
}) })
}, },
// 判断输入年限的大小
judge1(value){
this.searchInfo.ownerWorkYears1=value.value
},
judge2(value){
this.searchInfo.ownerWorkYears2=value.value
if(this.searchInfo.ownerWorkYears1>this.searchInfo.ownerWorkYears2){
this.Black=true
let t1=setTimeout(() => {
this.Black=false
}, 3000)
}
},
// 操作记录查询
RecordSEE(RID,sname){
this.toseename=sname
this.modal1=true
let parmars={
resumeId:RID
}
recodeLIST(parmars).then(res=>{
this.ownerName=res.data.body.ownerName
this.recordList=res.data.body.map((item,index)=>{
item.ownerName=item.ownerName
item.approveUserName=item.approveUserName
item.dateTime=item.dateTime
item.previousState=item.previousState
item.afterState=item.afterState
return item
})
})
},
// 选择input元素
selectInputElement(index,doID,doStatus,sss){
sss=!sss
this.ajaxData[index].STATES=sss
Array.prototype.indexOf = function(val) {
for (var i = 0; i < this.length; i++) {
if (this[i] == val) return i;
}
return -1;
}
Array.prototype.remove = function(val) {
var index = this.indexOf(val);
if (index > -1) {
this.splice(index, 1);
}
}
if(sss==true){
this.delateARRALL.push(doID)
this.delateARRALL2.push(doID)
this.flowStatusarr.push(doStatus)
}
if(sss==false){
this.delateARRALL.remove(doID)
this.delateARRALL2.remove(doID)
this.flowStatusarr.remove(doStatus)
}
},
//查看简历详情
Seedetail(Tid){
this.DOWNID=Tid
let parmars={
resumeId:Tid
}
seedetail(parmars).then(res=>{
console.log(res)
this.resume=res.data.body.resume
this.riList=res.data.body.riList
this.roList=res.data.body.roList
this.rpList=res.data.body.rpList
this.reList=res.data.body.reList
localStorage.setItem('a',JSON.stringify(this.resume))
localStorage.setItem('b',JSON.stringify(this.riList))
localStorage.setItem('c',JSON.stringify(this.roList))
localStorage.setItem('d',JSON.stringify(this.rpList))
localStorage.setItem('e',JSON.stringify(this.reList))
localStorage.setItem('downID',JSON.stringify(this.DOWNID))
})
let newpage = this.$router.resolve({
name: 'resumeDetail',
params:{},
query:{}
})
window.open(newpage.href, '_blank');
// window.open.href="http://192.168.28.10:8080/#/resumeDetail"
},
//下载单条简历
downloadONE(downID){
window.location.href=`/text/api/resume/download/formatted/one?resumeId=${downID}`
},
// 批量下载简历
downloadAll(){
if(this.checkboxList==''){
this.modal6=true
return
}
let url='/text/api/resume/download/formatted/compress'
this.checkboxList.map((item,index)=>{
url+=index==0?`?resumeId=${item}`:`&resumeId=${item}`
})
window.location.href=url
},
// 可删除状态下点击
delateR(delateid){
this.delateARRALL2.push(delateid)
this.modal3=true
},
// 删除单条简历
delateONE(){
deleteREsume(this.delateARRALL2).then(res=>{
if(res.data.success==true){
this.modal3=false
this.SearchList()
}
})
},
changeTime(b){
this.UpdateTIME=b
console.log(b)
},
// 不可删除状态下点击
undelate(){
this.modal4=true
},
// 批量删除
delateAll(){
var array1 = this.orignarr;//数组1
var array2 = this.flowStatusarr;//数组2
var tempArray1 = [];//临时数组1
var tempArray2 = [];//临时数组2
Array.prototype.indexOf = function(val) {
for (var i = 0; i < this.length; i++) {
if (this[i] == val) return i;
}
return -1;
}
Array.prototype.remove = function(val) {
var index = this.indexOf(val);
if (index > -1) {
this.splice(index, 1);
}
}
for(var i=0;i<array2.length;i++){
tempArray1[array2[i]]=true;//将数array2 中的元素值作为tempArray1 中的键,值为true;
}
for(var i=0;i<array1.length;i++){
if(tempArray1[array1[i]]){
tempArray2.push(array1[i]);//过滤array1 中与array2 相同的元素;
}
}
if(tempArray2.length!==0){
this.modal5=true
}
if(this.delateARRALL.length==0){
this.$Message.error('未选择删除元素')
return
}
if(tempArray2.length==0){
this.modal7=true
}
},
//确认批量删除
cofdelateAll(){
var array1 = this.orignarr;//数组1
var array2 = this.flowStatusarr;//数组2
var tempArray1 = [];//临时数组1
var tempArray2 = [];//临时数组2
for(var i=0;i<array2.length;i++){
tempArray1[array2[i]]=true;//将数array2 中的元素值作为tempArray1 中的键,值为true;
}
for(var i=0;i<array1.length;i++){
if(tempArray1[array1[i]]){
tempArray2.push(array1[i]);//过滤array1 中与array2 相同的元素;
}
}
if(tempArray2.length!==0){
this.modal5=true
}
Array.prototype.indexOf = function(val) {
for (var i = 0; i < this.length; i++) {
if (this[i] == val) return i;
}
return -1;
}
Array.prototype.remove = function(val) {
var index = this.indexOf(val);
if (index > -1) {
this.splice(index, 1);
}
}
this.DELATEARR=this.delateARRALL
deleteREsume(this.DELATEARR).then(res=>{
if(res.data.success==true){
this.modal7=false
this.delateARRALL=[]
this.flowStatusarr=[]
this.SearchList()
}
})
},
// 批量导出
allexport(){
let parmars={
optSourceCode:'',
keywordString:this.keywords==''?'':this.keywords,
company:this.lrgs==''?'':this.lrgs,
ownerSex:this.searchInfo.SEX,
highestDegreeNum:this.searchInfo.Edu,
flowStatusList:this.clickIndex3=0?this.searchInfo.STA=[]:this.searchInfo.STA,
ownerWorkYears1:this.searchInfo.ownerWorkYears1,
ownerWorkYears2:this.searchInfo.ownerWorkYears2,
}
if(this.searchInfo.ownerWorkYears1>this.searchInfo.ownerWorkYears2){
this.$Message.error('最低年限不能大于最高年限')
return
}
if(this.searchInfo.ownerWorkYears2<this.searchInfo.ownerWorkYears1){
this.$Message.error('最高年限不能小于最小年限')
return
}
window.location.href=`/text/api/excel/output?optSourceCode=${parmars.optSourceCode}&keywordString=${parmars.keywordString}&company=${parmars.company}&ownerSex=${parmars.ownerSex}&highestDegreeNum=${parmars.highestDegreeNum}&flowStatusList=${parmars.flowStatusList}&ownerWorkYears1=${parmars.ownerWorkYears1}&ownerWorkYears2=${parmars.ownerWorkYears2}`
},
//改变页码
pageChange(page){
this.SearchList(page)
},
pageSizeChange(page){
this.searchInfo.pageSize=page
this.pageSize=page
this.SearchList()
},
// 跳转到面试管理
tointerview(){
this.$router.push('/interview')
},
// 刷新列表
pushlist(){
this.modal2=false
this.SearchList()
},
}, },
mounted(){ mounted(){
this.SearchList() this.SearchList()
...@@ -306,44 +998,36 @@ import { serchList,downloadone} from '../../api/resume.server.js' ...@@ -306,44 +998,36 @@ import { serchList,downloadone} from '../../api/resume.server.js'
<style> <style>
.allResume{ .allResume{
width: 100%; width: 100%;
min-height: 1100px; /* min-height: 1100px; */
} }
.allResume-left{ .allResume-left{
min-height: 1100px; height: 800px;
/* width: 410px; */ width: 29%;
width: 26%; box-shadow:#dcdee2 0 0 6px 1px;
float: left; float: left;
/* border: 1px solid #999999; */
} }
.allResume-right{ .allResume-right{
/* height: 1500px; */ /* min-height: 2000px; */
min-height:1800px; height: 800px;
width: 72%; overflow-y: auto;
width: 70%;
float: left; float: left;
margin-left: 15px; margin-left:1%;
border:1px solid black background:rgba(255,255,255,1);
}
.resumeRightContentTop{
width: 100%;
/* border: 1px solid black; */
} }
.Resumecontent{ .Resumecontent{
width: 100%; width: 100%;
margin-top:10px margin-top:10px;
} }
.massage{ .massage{
height: 60px; height:20px;
width:600px; margin-top: 5px
line-height: 22px;
margin-left: 20px
}
.massage span{
margin-left: 5px;
height: 30px;
line-height: 30px
}
.pageBottom{
height: 40px;
width:1000px;
background:#EDEDED;
position: fixed;
bottom: 0;
} }
.Recode span{ .Recode span{
margin-left:20px margin-left:20px
...@@ -355,10 +1039,10 @@ select{ ...@@ -355,10 +1039,10 @@ select{
-webkit-appearance:none; -webkit-appearance:none;
outline: none; outline: none;
border: none; border: none;
color: blue color: #0092FF
} }
.active{ .active1{
color: blue; color:#0092FF
} }
.sex span:first-child{ .sex span:first-child{
margin-left: 0px margin-left: 0px
...@@ -366,64 +1050,75 @@ color: blue ...@@ -366,64 +1050,75 @@ color: blue
.sex span:not(:first-child){ .sex span:not(:first-child){
margin-left: 30px margin-left: 30px
} }
.Education span:not(:first-child){ .Education{
margin-left: 35px width: 330px;
} }
.Education span:nth-child(2){ .Education span:nth-child(2){
margin-left: 44px margin-left: 20%
} }
.Education span:nth-child(3){ .Education span:nth-child(3){
margin-left: 54px margin-left: 19%
}
.Education span:nth-child(4){
margin-left: 48px
} }
.Education span:nth-child(5){ .Education span:nth-child(5){
margin-left: 5px margin-left: 12%
} }
.state span:not(:first-child){ .Education span:nth-child(6){
margin-left: 28px margin-left: 7%;
} }
.state span:nth-child(7){ .state{
margin-left:3px width: 350px;
}
.state span:nth-child(2){
margin-left:10%
}
.state span:nth-child(3){
margin-left:10%
}
.state span:nth-child(4){
margin-left:10%
}
.state span:nth-child(5){
margin-left:10px
} }
.state span:nth-child(6){ .state span:nth-child(7){
margin-left: 20px margin-left:10%
} }
.state span:nth-child(8){ .state span:nth-child(8){
margin-left: 15px margin-left:10%
} }
.state span:nth-child(9){ .state span:nth-child(9){
margin-left: 15px margin-left:10%
}
.state span:nth-child(10){
margin-left: 15px
} }
.state span:nth-child(11){ .state span:nth-child(11){
margin-left: 10px margin-left:10%
} }
.state span:nth-child(12){ .state span:nth-child(12){
margin-left: 19px margin-left:10%
} }
.state span:nth-child(13){ .state span:nth-child(13){
margin-left: 6px margin-left:10%
} }
.text1{ .text1{
width: 80%; width: 80%;
height: 140px; height: 60px;
background:rgb(61,169,247) ; background:rgb(61,169,247) ;
margin: 30px 0 0 30px margin: 30px 0 0 30px
} }
.text2{ .text2{
width: 80%; width: 80%;
height: 140px; height: 60px;
background:rgb(253,85,83); background:rgb(253,85,83);
margin: 30px 0 0 30px margin: 30px 0 0 30px
} }
.text3{ .text3{
width: 80%; width: 80%;
height: 140px; height: 60px;
background:rgb(0,176,160); background:rgb(0,176,160);
margin: 30px 0 0 30px margin: 30px 0 0 30px
} }
.detailResume{
width:100%;
height:60px;
/* margin-top:40px */
}
</style> </style>
<template>
<div class="channel">
<div class="channel-left">
<Form :label-width="80">
<FormItem label="关键词:" style="margin-top:20px">
<Input placeholder="请输入关键词" style="width:85%" v-model="keywords" @keyup.enter.native="SouSuo(item.Num1,item.Num2,item.Num3)"/>
</FormItem>
<FormItem label="历任公司:">
<Input placeholder="请输入历任公司" style="width:85%" v-model="lrgs" @keyup.enter.native="SouSuo(item.Num1,item.Num2,item.Num3)"/>
</FormItem>
<FormItem label="性别:" class="sex">
<span v-for="(item,index) in sexs" :class="{'active3':index==clickIndex1}" @click="selectElement1(item.status1,index)" :key="index" > {{item.status1}}</span>
</FormItem>
<FormItem label="学历:" class="Education">
<span v-for="(item,index) in Education" :class="{'active3':index==clickIndex2}" @click="selectElement2(item.Num2,index)" :key="index"> {{item.status2}}</span>
</FormItem>
<FormItem label="状态:" class="state">
<span v-for="(item,index) in state" :class="{'active3':item.sta==true}" @click="selectElement3(item.Num3,index,item.status3,item.sta)" :key="index"> {{item.status3}}</span>
</FormItem>
<FormItem label="工作年限:" style="margin-left:20px">
<span style="width:100px;margin-left:10px">
<Select style="width:100px" placeholder="不限" :label-in-value='true' v-model="searchInfo.ownerWorkYears1" @on-change="judge1">
<Option v-for="item in ownerWorkYears1" :value="item.value" :key="item.value">{{item.label}}</Option>
</Select>
<span>-</span>
<Select style="width:100px" placeholder="不限" :label-in-value='true' v-model="searchInfo.ownerWorkYears2" @on-change="judge2">
<Option v-for="item in ownerWorkYears2" :value="item.value" :key="item.value">{{item.label}}</Option>
</Select>
</span><br>
<span v-show="Black==true" style="color:red;margin-left:10%">!最低年限不能大于最高年限</span>
</FormItem>
</Form>
<Button type="primary" style="width:30%;margin-left:30%;font-size:13px" @click="SouSuo(item.Num1,item.Num2,item.Num3)">搜索</Button>
<div class="text1"></div>
<div class="text2"></div>
<div class="text3"></div>
</div>
<div class="channel-right">
<div class="resumeRightContentTop">
<div style="width:100%;height:80px;margin-top:20px">
<div style="width:40%;height:100%;float:left;background:rgb(61,169,247);margin-left:60px;line-height:80px;text-align:center;color:white;font-size:20px">数据展示</div>
<div style="width:40%;height:100%;float:left;background:rgb(253,85,83);margin-left:30px;line-height:80px;text-align:center;color:white;font-size:20px">提示语</div>
</div>
<div style="background:background:rgba(241,241,241,1);width:100%;margin-top:20px;height:40px;line-height:40px;border-bottom:1px solid black">
<input type='checkbox' class='input-checkbox' v-model='checked' @click='checkedAll' style="margin-left:1%"><span style="margin-left:8px">全选</span>
<Button type="primary" size="small" style="margin-left:2%;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:10px;" @click="allexport">导出列表</Button>
</div>
<div style="margin-bottom:40px;float:left;width:100%">
<div style="margin:50px auto;width:300px;height:200px;line-height:200px;text-align:center;font-size:20px" v-show="ajaxData.length==0">暂无数据</div>
<div class="Resumecontent" v-for='(item,i) in ajaxData' :key="i">
<div class="detailResume" id="a" style="background:rgba(241,241,241,1);height:65px">
<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;" class='input-checkbox' v-model='checkboxList' :value="item.id" @click="selectInputElement(i,item.id,item.flowStatus,item.STATES)"></span>
<span style="display:inline-block;height:100%;font-size: 12px;overflow:hidden;text-overflow:ellipsis;white-space: nowrap;" @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;" @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;" @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;" @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;" @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%" @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=='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" >
<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>
<option value="3">PASS</option>
</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>
<select name="4" id="4" @change="selectFn3($event,item.id)" style="height:18px;text-align:center;margin-top:5px">
<option value="1">备选</option>
<option value="2">邀请面试</option>
<option value="3">PASS</option>
</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 >
<select name="2" id="2" @change="selectFn4($event,item.id)" style="height:18px;text-align:center;margin-top:5px">
<option value="1">PASS</option>
<option value="2">邀请面试</option>
<option value="3">备选</option>
</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">
<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)"/></span>
<span ><Icon type="md-trash" v-if="item.flowStatus=='TO_SEE'" @click="undelate" style="color:#b5b5b5"/></span>
<span ><Icon type="md-trash" v-if="item.flowStatus=='HAS_SEE'" @click="undelate" style="color:#b5b5b5"/></span>
<span ><Icon type="md-trash" v-if="item.flowStatus=='SEE_FAIL'" @click="undelate" style="color:#b5b5b5"/></span>
<span ><Icon type="md-trash" v-if="item.flowStatus=='INTERVIEW_FAIL'" @click="undelate" style="color:#b5b5b5"/></span>
<span ><Icon type="md-trash" v-if="item.flowStatus=='TO_SENT_OFFER'" @click="undelate" style="color:#b5b5b5"/></span>
<span ><Icon type="md-trash" v-if="item.flowStatus=='TO_ENTRY'" @click="undelate" style="color:#b5b5b5"/></span>
<span ><Icon type="md-trash" v-if="item.flowStatus=='HAS_ENTRY'" @click="undelate" style="color:#b5b5b5"/></span>
<span ><Icon type="md-trash" v-if="item.flowStatus=='NO_ENTRY'" @click="undelate" style="color:#b5b5b5"/></span>
<span ><Icon type="md-trash" v-if="item.flowStatus=='END'" @click="undelate" style="color:#b5b5b5"/></span>
<span ><Icon type="md-trash" v-if="item.flowStatus=='HAS_SENT_OFFER'" @click="undelate" style="color:#b5b5b5"/></span>
<span ><Icon type="md-trash" v-if="item.flowStatus=='PASS'" @click="delateR(item.id)"/></span>
<span ><Icon type="md-trash" v-if="item.flowStatus=='OPTION'" @click="delateR(item.id)"/></span>
<span ><Icon type="md-trash" v-if="item.flowStatus=='TO_DO'" @click="delateR(item.id)"/></span>
<span @click="RecordSEE(item.id,item.ownerName)">记录</span>
</span>
</p>
<p style="margin-top:10px">
<span style="display:inline-block;height:100%;font-size: 12px;margin-left:14px;margin-top:5px">{{item.deliveryTime}} </span>
<span style="display:inline-block;height:100%;font-size: 12px;margin-left:14px">{{item.optSource}} |</span>
<span style="display:inline-block;height:100%;font-size: 12px;margin-left:14px">{{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>
<span>最后操作人:{{item.d}}</span>
</span>
</p>
</div>
</div>
</div>
<div class="pageBottom" style="width:57.5%;background:rgba(255,255,255,1);text-align:center;position:fixed;bottom:0">
<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>
<!-- 操作记录弹出框 -->
<Modal
v-model="modal1"
width='500px'
:footer-hide="true"
:closable='false'>
<div>
<h2 style="text-align: center;color:black" >操作记录</h2>
<h2 style="text-align: center;color:#999999">候选人:{{toseename}}</h2>
<div v-for="(item,index) in recordList" :key="index">
<p style="margin-top:30px;text-align:center" class="Recode">
<span>{{item.approveUserName}}</span>
<span>{{item.dateTime}}</span>
<span style="color:blue" v-if=" item.previousState=='INTERVIEW_OK'">面试合适</span>
<span style="color:blue" v-if=" item.previousState=='INTERVIEW_FAIL'">面试淘汰</span>
<span style="color:blue" v-if=" item.previousState=='END'">终止面试</span>
<span style="color:blue" v-if=" item.previousState=='SEE_FAIL'">约面失败</span>
<span style="color:blue" v-if=" item.previousState=='NO_ENTRY'">未入职</span>
<span style="color:blue" v-if=" item.previousState=='TO_SEE'">准备约面</span>
<span style="color:blue" v-if=" item.previousState=='HAS_SEE'">已邀约</span>
<span style="color:blue" v-if=" item.previousState=='OPTION'">备选</span>
<span style="color:blue" v-if=" item.previousState=='TO_SENT_OFFER'">待Offer</span>
<span style="color:blue" v-if=" item.previousState=='HAS_SENT_OFFER'">已发offer</span>
<span style="color:blue" v-if=" item.previousState=='TO_ENTRY'">待入职</span>
<span style="color:blue" v-if=" item.previousState=='HAS_ENTRY'">已入职</span>
<span style="color:blue" v-if=" item.previousState=='PASS'">PASS</span>
<span style="color:blue" v-if=" item.previousState=='TO_DO'">待处理</span>
<span style="color:blue" v-if=" item.previousState=='RESET'">重启面试</span>
<span>变更为</span>
<span style="color:blue" v-if=" item.afterState=='INTERVIEW_OK'">面试合适</span>
<span style="color:blue" v-if=" item.afterState=='INTERVIEW_FAIL'">面试淘汰</span>
<span style="color:blue" v-if=" item.afterState=='END'">终止面试</span>
<span style="color:blue" v-if=" item.afterState=='SEE_FAIL'">约面失败</span>
<span style="color:blue" v-if=" item.afterState=='NO_ENTRY'">未入职</span>
<span style="color:blue" v-if=" item.afterState=='TO_SEE'">准备约面</span>
<span style="color:blue" v-if=" item.afterState=='HAS_SEE'">已邀约</span>
<span style="color:blue" v-if=" item.afterState=='OPTION'">备选</span>
<span style="color:blue" v-if=" item.afterState=='TO_SENT_OFFER'">待Offer</span>
<span style="color:blue" v-if=" item.afterState=='HAS_SENT_OFFER'">已发offer</span>
<span style="color:blue" v-if=" item.afterState=='TO_ENTRY'">待入职</span>
<span style="color:blue" v-if=" item.afterState=='HAS_ENTRY'">已入职</span>
<span style="color:blue" v-if=" item.afterState=='PASS'">PASS</span>
<span style="color:blue" v-if=" item.afterState=='TO_DO'">待处理</span>
<span style="color:blue" v-if=" item.afterState=='RESET'">重启面试</span>
</p>
</div>
</div>
<div style="height:30px;width:100%;text-align:center;margin-top:30px">
<p style="height:20px;width:40px;font-size:16px;color:blue; border-radius: 5px;margin-left:220px" @click="modal1=false">
关闭
</p>
</div>
</Modal>
<!-- 准备约面弹出框 -->
<Modal
v-model="modal2"
width='380px'
:closable='false'>
<div >
<h2 style="text-align: center;color:black">提示</h2>
<p style="margin-top:20px;line-height:25px">
<span>更改为<span style="color:blue">“邀请约面”</span>的状态后,你需要从<span style="color:blue">”面试管理“</span>中对该候选人进行后续的操作。</span>
</p>
<p style="margin-top:20px;line-height:25px">
<Form :label-width="80">
<FormItem label="邀约人" style="margin-top:20px">
<Input v-model="UpdateOWER" style="width:180px" :maxlength="5"/>
</FormItem>
<FormItem label="面试时间" style="margin-top:20px">
<DatePicker type="datetime" style="width:180px" v-model="UpdateTIME" format="yyyy-MM-dd HH:mm:ss" @on-change="changeTime" :editable='false' :options="options3"></DatePicker>
</FormItem>
<FormItem label="面试官" style="margin-top:20px">
<Input v-model="UpdateVIEW" style="width:180px" :maxlength="5"/>
</FormItem>
</Form>
</p>
</div>
<div slot='footer' style="text-align:center">
<Button type='primary' @click='pushlist'>取消</Button>
<Button type='primary' @click="addINTERVIEW" >确定</Button>
</div>
</Modal>
<!-- 可删除状态下,删除提示框 -->
<Modal
v-model="modal3"
width='280px'
:closable='false'>
<div >
<h2 style="text-align: center;color:black">提示</h2>
<p>删除后不可恢复,是否确定永久删除简历?</p>
</div>
<div slot='footer' style="text-align:center">
<Button type='primary' @click='modal3=false'>取消</Button>
<Button type='primary' @click="delateONE" >确定</Button>
</div>
</Modal>
<!-- 不可删除状态下,删除提示框 -->
<Modal
v-model="modal4"
width='280px'
:closable='false'>
<div >
<h2 style="text-align: center;color:black">提示</h2>
<p>进入面试管理中的候选人,都不可删除。如需继续删除,请在面试管理中操作”终止面试“后,再重启流程,然后返回该页面进行删除。</p>
</div>
<div slot='footer' style="text-align:center">
<Button type='primary' @click='modal4=false'>取消</Button>
<Button type='primary' @click="tointerview">面试管理</Button>
</div>
</Modal>
<!-- 批量删除有不可删除状态时弹出框 -->
<Modal
v-model="modal5"
width='280px'
:closable='false'>
<div >
<h2 style="text-align: center;color:black">提示</h2>
<p style="text-align: center;height:40px;line-height:40px">您选中的简历中包含不可删除简历</p>
</div>
<div slot='footer' style="text-align:center">
<Button type='primary' @click='modal5=false'>确定</Button>
</div>
</Modal>
<Modal
v-model="modal7"
width='280px'
:closable='false'>
<div >
<h2 style="text-align: center;color:black">提示</h2>
<p>删除后不可恢复,是否确定永久删除简历?</p>
</div>
<div slot='footer' style="text-align:center">
<Button type='primary' @click='modal7=false'>取消</Button>
<Button type='primary' @click="cofdelateAll" >确定</Button>
</div>
</Modal>
</div>
</template>
<script>
// console.log(this,this.$route)
import {adoptOneSeeResumeList, serchList,downloadone,sousuoList,seedetail,PASS,TOSEE,OPTION,deleteREsume,downloadOne,exportLIST,recodeLIST,addinterview} from '../../api/resume.server.js'
export default {
data(){
return {
a:[],
checked: false,
activeClass: 0,
clickIndex1: 0,
clickIndex2: 0,
clickIndex3:0,
keywords:'',
biaoshi:'',
toseeid:'',
options3: {
disabledDate (date) {
return date && date.valueOf() <Date.now()-3600*24*1000;
}
},
Black:false,
recordList:[],
all:'all',
lrgs:'',
a:'',
id:'',
modal1:false,
modal2:false,
modal3:false,
modal4:false,
modal5:false,
modal7:false,
optcode:'',
toseename:'',
UpdateOWER:'',
UpdateTIME:'',
UpdateVIEW:'',
item:[],
delateARRALL:[],
delateARRALL2:[],
flowStatusarr:[],
quanxuan:[],
orignarr:['TO_SEE','HAS_SEE','SEE_FAIL','INTERVIEW_FAIL','TO_SENT_OFFER','TO_ENTRY','HAS_ENTRY','NO_ENTRY','END'],
totalSize:null,
pageSize:30,
pageIndex:1,
searchInfo:{
pageSize:30,
pageIndex:1,
id:'',
SEX:'',
Edu:'',
ccc:'',
itemSelect:'',
STA:[],
status:"",
ownerWorkYears1:'',
ownerWorkYears2:'',
},
arr:[],
sexs:[{Num1:'',status1:'不限'},{Num1:'0',status1:""},{Num1:'0',status1:''}],
Education:[{Num2:'',status2:'不限'},{Num2:"0",status2:'专科以下'},{Num2:'1',status2:'专科及以上'},{Num2:'2',status2:'本科及以上'},{Num2:'3',status2:'硕士及以上'},{Num2:'4',status2:'博士及以上'},{Num2:'99',status2:'985/211'}],
state:[{Num3:[],status3:'不限',sta:true},{Num3:'TO_DO',status3:'待处理',sta:false},{Num3:'OPTION',status3:'备选',sta:false},{Num3:'PASS',status3:'Pass',sta:false},{Num3:'TO_SEE',status3:'邀请面试',sta:false},{Num3:'HAS_SEE',status3:'已邀约',sta:false},{Num3:'SEE_FAIL',status3:'邀约失败',sta:false},
{Num3:'INTERVIEW_FAIL',status3:'面试淘汰',sta:false},{Num3:'TO_SENT_OFFER',status3:'待Offer',sta:false},{Num3:'TO_ENTRY',status3:'待入职',sta:false},{Num3:'HAS_ENTRY',status3:'已入职',sta:false},{Num3:'NO_ENTRY',status3:'未入职',sta:false},{Num3:'END',status3:'终止面试',sta:false},],
active:'',
ownerWorkYears1:[{value:'',label:'不限'},{value:0,label:'0'},{value:1,label:'1'},{value:2,label:'2'},{value:3,label:'3'},{value:4,label:'4'},{value:5,label:'5'},
{value:6,label:'6'},{value:7,label:'7'},{value:8,label:'8'},{value:9,label:'9'},{value:10,label:'10'}],
ownerWorkYears2:[{value:'',label:'不限'},{value:0,label:'0'},{value:1,label:'1'},{value:2,label:'2'},{value:3,label:'3'},{value:4,label:'4'},{value:5,label:'5'},
{value:6,label:'6'},{value:7,label:'7'},{value:8,label:'8'},{value:9,label:'9'},{value:10,label:'10'}],
value:[],
ajaxData: [],
checkData: [],
checkboxList:[]
}
},
methods:{
quxiaoxi(){
let parmars={
pageSize:this.searchInfo.pageSize,
pageIndex:this.searchInfo.pageIndex,
parameter:{
optSourceCode:this.$route.params.channelname
}
}
adoptOneSeeResumeList(parmars).then(res=>{
if(res.data.success==true){
this.totalSize=res.data.body.totalNumber
this.quanxuan.push(res.data.body.items.id)
this.ajaxData=res.data.body.items.map((item,index)=>{
item.id=item.id
item.ownerName=item.ownerName
item.ownerSex=item.ownerSex
item.deliveryTime=item.deliveryTime
item.belongs=item.belongs
item.emailSendtime=item.emailSendtime
item.ownerMobile=item.ownerMobile
item.ownerHighestDegree=item.ownerHighestDegree
item.ownerExpectTitles=item.ownerExpectTitles
item.flowStatus=item.flowStatus
item.ownerAge=item.ownerAge
item.ownerWorkYears=item.ownerWorkYears
item.modifyTime=item.modifyTime
item.srcSite=item.srcSite
item.STATES=false
item.optSource=item.optSource
item.modifier=item.modifier
item.c=item.modifier==''?item.modifier:item.modifier.split('_')
item.d=item.c[0]
return item
})
}
})
},
// 判断输入年限的大小
judge1(value){
this.searchInfo.ownerWorkYears1=value.value
},
judge2(value){
this.searchInfo.ownerWorkYears2=value.value
if(this.searchInfo.ownerWorkYears1>this.searchInfo.ownerWorkYears2){
this.Black=true
setInterval(() => {
this.Black=false
}, 3000)
}
},
//全选与反选
checkedAll: function() {
if (this.checked) {//实现反选
this.checkboxList = [];
this.ajaxData.forEach( (item) => {
this.checkboxList = [];
this.delateARRALL=[];
this.flowStatusarr=[]
item.STATES=false
});
} else { //实现全选
this.checkboxList = [];
this.ajaxData.forEach( (item) => {
this.checkboxList.push(item.id);
this.delateARRALL.push(item.id);
this.flowStatusarr.push(item.flowStatus)
item.STATES=true
});
}
},
// 准备约面
tosee(){
let parmars={
status:"TO_SEE",
id:this.toseeid,
}
TOSEE(parmars).then(res=>{
if(res.data.success==true){
this.modal2=false
}
})
},
//操作处理面试状态
selectFn1(e,SID) {
this.toseeid=SID
// 准备约面
if(e.target.value==3){
this.modal2=true
TOSEE().then()
}
// 简历PASS
if(e.target.value==2){
let parmars={
status:"PASS",
id:SID,
}
PASS(parmars).then(res=>{
if(res.data.success==true){
this.quxiaoxi()
}
})
this.quxiaoxi()
}
// 简历备选
if(e.target.value==4){
let parmars={
status:"OPTION",
id:SID,
}
OPTION(parmars).then(res=>{
if(res.data.success==true){
this.quxiaoxi()
}
})
this.quxiaoxi()
}
},
selectFn2(e,SID) {
this.toseeid=SID
// 准备约面
if(e.target.value==1){
let parmars={
status:"TO_SEE",
id:SID,
}
this.modal2=true
}
// 简历PASS
if(e.target.value==3){
let parmars={
status:"PASS",
id:SID,
}
PASS(parmars).then(res=>{
if(res.data.success==true){
this.quxiaoxi()
}
})
this.quxiaoxi()
}
// 简历备选
if(e.target.value==2){
let parmars={
status:"OPTION",
id:SID,
}
OPTION(parmars).then(res=>{
if(res.data.success==true){
this.quxiaoxi()
}
})
this.quxiaoxi()
}
},
selectFn3(e,SID) {
this.toseeid=SID
// 准备约面
if(e.target.value==2){
let parmars={
status:"TO_SEE",
id:SID,
}
this.modal2=true
}
// 简历PASS
if(e.target.value==3){
let parmars={
status:"PASS",
id:SID,
}
PASS(parmars).then(res=>{
if(res.data.success==true){
this.quxiaoxi()
}
})
this.quxiaoxi()
}
// 简历备选
if(e.target.value==1){
let parmars={
status:"OPTION",
id:SID,
}
OPTION(parmars).then(res=>{
if(res.data.success==true){
this.quxiaoxi()
}
})
this.quxiaoxi()
}
},
selectFn4(e,SID) {
this.toseeid=SID
// 准备约面
if(e.target.value==2){
let parmars={
status:"TO_SEE",
id:SID,
}
this.modal2=true
}
// 简历PASS
if(e.target.value==1){
let parmars={
status:"PASS",
id:SID,
}
PASS(parmars).then(res=>{
if(res.data.success==true){
this.quxiaoxi()
}
})
this.quxiaoxi()
}
// 简历备选
if(e.target.value==3){
let parmars={
status:"OPTION",
id:SID,
}
OPTION(parmars).then(res=>{
if(res.data.success==true){
this.quxiaoxi()
}
})
this.quxiaoxi()
}
},
addINTERVIEW(){
let parmars={
resumeId: this.toseeid,
inviterName:this.UpdateOWER,
interviewerName:this.UpdateVIEW,
seeTime:this.UpdateTIME
}
if(this.UpdateOWER==''||this.UpdateTIME==''||this.UpdateVIEW==''){
this.$Message.error('请填写完整的约面信息')
return
}
addinterview(parmars).then(res=>{
if(res.data.success==true){
this.modal2=false
this.quxiaoxi()
}
if(res.data.body.code==0){
this.modal2=false
this.quxiaoxi()
}
})
},
changeTime(b){
this.UpdateTIME=b
},
// 查看简历详情
Seedetail(Tid){
this.DOWNID=Tid
let parmars={
resumeId:Tid
}
seedetail(parmars).then(res=>{
console.log(res)
this.resume=res.data.body.resume
this.riList=res.data.body.riList
this.roList=res.data.body.roList
this.rpList=res.data.body.rpList
this.reList=res.data.body.reList
localStorage.setItem('a',JSON.stringify(this.resume))
localStorage.setItem('b',JSON.stringify(this.riList))
localStorage.setItem('c',JSON.stringify(this.roList))
localStorage.setItem('d',JSON.stringify(this.rpList))
localStorage.setItem('e',JSON.stringify(this.reList))
localStorage.setItem('downID',JSON.stringify(this.DOWNID))
})
let newpage = this.$router.resolve({
name: 'resumeDetail',
params:{},
query:{}
})
window.open(newpage.href, '_blank');
},
pageChange(page){
this.SearchList(page)
},
pageSizeChange(page){
this.searchInfo.pageSize=page
this.pageSize=page
this.SearchList()
},
// 跳转到面试管理
tointerview(){
this.$router.push('/interview')
},
downloadAll(){},
// 可删除状态下点击
delateR(delateid){
this.delateARRALL2.push(delateid)
this.modal3=true
},
// 删除单条简历
delateONE(){
deleteREsume(this.delateARRALL2).then(res=>{
if(res.data.success==true){
this.modal3=false
this.quxiaoxi()
}
})
},
// 选择input元素
selectInputElement(index,doID,doStatus,sss){
sss=!sss
this.ajaxData[index].STATES=sss
Array.prototype.indexOf = function(val) {
for (var i = 0; i < this.length; i++) {
if (this[i] == val) return i;
}
return -1;
}
Array.prototype.remove = function(val) {
var index = this.indexOf(val);
if (index > -1) {
this.splice(index, 1);
}
}
if(sss==true){
this.delateARRALL.push(doID)
this.delateARRALL2.push(doID)
this.flowStatusarr.push(doStatus)
}
if(sss==false){
this.delateARRALL.remove(doID)
this.delateARRALL2.remove(doID)
this.flowStatusarr.remove(doStatus)
}
},
//选择搜索元素
selectElement1(tItem,Tindex){
this.searchInfo.SEX=Tindex==0?'':tItem;
this.clickIndex1=Tindex
},
selectElement2(tItem,Tindex){
this.searchInfo.Edu=tItem;
this.clickIndex2=Tindex
},
selectElement3(tItem,Tindex,status3,sta3){
sta3=!sta3
this.state[Tindex].sta=sta3
if(Tindex==0){
this.searchInfo.STA=[]
this.state.map((item,index)=>{
if(index!==0){
item.sta=false
}
if(index==0){
item.sta=true
}
return item
})
return
}
if(Tindex!==0){
this.state[0].sta=false
}
if(sta3==true){
this.searchInfo.STA.push(tItem)
}
if(sta3==false){
Array.prototype.indexOf = function(val) {
for (var i = 0; i < this.length; i++) {
if (this[i] == val) return i;
}
return -1;
}
Array.prototype.remove = function(val) {
var index = this.indexOf(val);
if (index > -1) {
this.splice(index, 1);
}
}
this.searchInfo.STA.remove(tItem)
}
},
// 不可删除状态下点击
undelate(){
this.modal4=true
},
// 批量删除
delateAll(){
var array1 = this.orignarr;//数组1
var array2 = this.flowStatusarr;//数组2
var tempArray1 = [];//临时数组1
var tempArray2 = [];//临时数组2
Array.prototype.indexOf = function(val) {
for (var i = 0; i < this.length; i++) {
if (this[i] == val) return i;
}
return -1;
}
Array.prototype.remove = function(val) {
var index = this.indexOf(val);
if (index > -1) {
this.splice(index, 1);
}
}
for(var i=0;i<array2.length;i++){
tempArray1[array2[i]]=true;//将数array2 中的元素值作为tempArray1 中的键,值为true;
}
for(var i=0;i<array1.length;i++){
if(tempArray1[array1[i]]){
tempArray2.push(array1[i]);//过滤array1 中与array2 相同的元素;
}
}
if(tempArray2.length!==0){
this.modal5=true
}
if(this.delateARRALL.length==0){
this.$Message.error('未选择删除元素')
return
}
if(tempArray2.length==0){
this.modal7=true
}
},
//确认批量删除
cofdelateAll(){
var array1 = this.orignarr;//数组1
var array2 = this.flowStatusarr;//数组2
var tempArray1 = [];//临时数组1
var tempArray2 = [];//临时数组2
for(var i=0;i<array2.length;i++){
tempArray1[array2[i]]=true;//将数array2 中的元素值作为tempArray1 中的键,值为true;
}
for(var i=0;i<array1.length;i++){
if(tempArray1[array1[i]]){
tempArray2.push(array1[i]);//过滤array1 中与array2 相同的元素;
}
}
if(tempArray2.length!==0){
this.modal5=true
}
Array.prototype.indexOf = function(val) {
for (var i = 0; i < this.length; i++) {
if (this[i] == val) return i;
}
return -1;
}
Array.prototype.remove = function(val) {
var index = this.indexOf(val);
if (index > -1) {
this.splice(index, 1);
}
}
this.DELATEARR=this.delateARRALL
deleteREsume(this.DELATEARR).then(res=>{
if(res.data.success==true){
this.modal7=false
this.delateARRALL=[]
this.flowStatusarr=[]
this.quxiaoxi()
}
})
},
// 刷新列表
pushlist(){
this.modal2=false
this.quxiaoxi()
},
// 批量导出
allexport(){
this.optcode=this.$route.params.channelname
console.log( this.optcode)
let parmars={
optSourceCode:this.optcode,
keywordString:this.keywords==''?'':this.keywords,
company:this.lrgs==''?'':this.lrgs,
ownerSex:this.searchInfo.SEX,
highestDegreeNum:this.searchInfo.Edu,
flowStatusList:this.clickIndex3=0?this.searchInfo.STA=[]:this.searchInfo.STA,
ownerWorkYears1:this.searchInfo.ownerWorkYears1,
ownerWorkYears2:this.searchInfo.ownerWorkYears2,
}
if(this.searchInfo.ownerWorkYears1>this.searchInfo.ownerWorkYears2){
this.$Message.error('最低年限不能大于最高年限')
return
}
if(this.searchInfo.ownerWorkYears2<this.searchInfo.ownerWorkYears1){
this.$Message.error('最高年限不能小于最小年限')
return
}
window.location.href=`/text/api/excel/output?optSourceCode=${parmars.optSourceCode}&keywordString=${parmars.keywordString}&company=${parmars.company}&ownerSex=${parmars.ownerSex}&highestDegreeNum=${parmars.highestDegreeNum}&flowStatusList=${parmars.flowStatusList}&ownerWorkYears1=${parmars.ownerWorkYears1}&ownerWorkYears2=${parmars.ownerWorkYears2}`
},
//下载单条简历
downloadONE(downID){
window.location.href=`/text/api/resume/download/formatted/one?resumeId=${downID}`
},
// 操作记录查询
RecordSEE(RID,sname){
this.toseename=sname
this.modal1=true
let parmars={
resumeId:RID
}
recodeLIST(parmars).then(res=>{
this.ownerName=res.data.body.ownerName
this.recordList=res.data.body.map((item,index)=>{
item.ownerName=item.ownerName
item.approveUserName=item.approveUserName
item.dateTime=item.dateTime
item.previousState=item.previousState
item.afterState=item.afterState
return item
})
})
},
//搜索
SouSuo(){
let parmars={
pageSize:this.searchInfo.pageSize,
pageIndex:this.searchInfo.pageIndex,
parameter:{
optSourceCode:this.$route.params.channelname,
keywordString:this.keywords==''?'':this.keywords,
company:this.lrgs==''?'':this.lrgs,
ownerSex:this.searchInfo.SEX,
highestDegreeNum:this.searchInfo.Edu,
flowStatusList:this.clickIndex3=0?this.searchInfo.STA=[]:this.searchInfo.STA,
ownerWorkYears1:this.searchInfo.ownerWorkYears1,
ownerWorkYears2:this.searchInfo.ownerWorkYears2,
}
}
if(this.searchInfo.ownerWorkYears1>this.searchInfo.ownerWorkYears2){
this.$Message.error('最低年限不能大于最高年限')
return
}
if(this.searchInfo.ownerWorkYears2<this.searchInfo.ownerWorkYears1){
this.$Message.error('最高年限不能小于最小年限')
return
}
sousuoList(parmars).then(res=>{
let Ishow=res.data.items
if(res.data.success==true){
this.ajaxData=res.data.body.items.map((item,index)=>{
item.id=item.id
item.ownerName=item.ownerName
item.ownerSex=item.ownerSex
item.belongs=item.belongs
item.emailSendtime=item.emailSendtime
item.ownerMobile=item.ownerMobile
item.ownerHighestDegree=item.ownerHighestDegree
item.ownerExpectTitles=item.ownerExpectTitles
item.flowStatus=item.flowStatus
item.ownerAge=item.ownerAge
item.ownerWorkYears=item.ownerWorkYears
item.modifyTime=item.modifyTime
item.srcSite=item.srcSite
item.STATES=false
item.optSource=item.optSource
item.modifier=item.modifier
item.c=item.modifier==''?item.modifier:item.modifier.split('_')
item.d=item.c[0]
return item
})
this.searchInfo.ownerWorkYears1=''
this.searchInfo.ownerWorkYears2=''
this.keywords=''
this.lrgs=''
}
})
},
},
watch: {
'$route' (to, from) {
// console.log(this.$route.params.channelname,123456)
let parmars={
pageSize:this.searchInfo.pageSize,
pageIndex:this.searchInfo.pageIndex,
parameter:{
optSourceCode:this.$route.params.channelname
}
}
adoptOneSeeResumeList(parmars).then(res=>{
if(res.data.success==true){
this.totalSize=res.data.body.totalNumber
this.quanxuan.push(res.data.body.items.id)
this.ajaxData=res.data.body.items.map((item,index)=>{
item.id=item.id
item.ownerName=item.ownerName
item.ownerSex=item.ownerSex
item.deliveryTime=item.deliveryTime
item.belongs=item.belongs
item.emailSendtime=item.emailSendtime
item.ownerMobile=item.ownerMobile
item.ownerHighestDegree=item.ownerHighestDegree
item.ownerExpectTitles=item.ownerExpectTitles
item.flowStatus=item.flowStatus
item.ownerAge=item.ownerAge
item.ownerWorkYears=item.ownerWorkYears
item.modifyTime=item.modifyTime
item.srcSite=item.srcSite
item.STATES=false
item.optSource=item.optSource
item.modifier=item.modifier
item.c=item.modifier==''?item.modifier:item.modifier.split('_')
item.d=item.c[0]
return item
})
}
})
},
checkboxList: {
handler: function (val, oldVal) {
if (this.checkboxList.length === this.ajaxData.length) {
this.checked=true;
} else {
this.checked=false;
}
},
deep: true
}
},
mounted(){
this.quxiaoxi()
}
}
</script>
<style>
.channel{
width: 100%;
/* min-height: 1100px; */
}
.channel-left{
height:800px;
width: 29%;
float: left;
box-shadow: #dcdee2 0 0 6px 1px;
/* border: 1px solid #999999; */
}
.channel-right{
height:800px;
overflow-y: auto;
overflow-x: hidden;
width: 69%;
float: left;
margin-left: 15px;
background:rgba(255,255,255,1);
}
.resumeRightContentTop{
width: 100%;
}
.Resumecontent{
width: 100%;
margin-top:10px;
}
.massage{
height:25px;
font-size: 8px;
line-height: 25px;
margin-top:10px
}
.Recode span{
margin-left:20px
}
select::-ms-expand{display:none;}
select{
appearance:none;
-moz-appearance:none;
-webkit-appearance:none;
outline: none;
border: none;
color:#2d8cf0
}
.active3{
color:#2d8cf0;
}
.sex span:first-child{
margin-left: 0px
}
.sex span:not(:first-child){
margin-left: 30px
}
.Education{
width: 70%;
}
.Education span:nth-child(2){
margin-left: 20%
}
.Education span:nth-child(3){
margin-left: 19%
}
.Education span:nth-child(5){
margin-left: 12%
}
.Education span:nth-child(6){
margin-left: 5%
}
.state{
width: 85%;
}
.state span:nth-child(2){
margin-left:10%
}
.state span:nth-child(3){
margin-left:10%
}
.state span:nth-child(4){
margin-left:10%
}
.state span:nth-child(5){
margin-left:10%
}
.state span:nth-child(7){
margin-left:11%
}
.state span:nth-child(8){
margin-left:12%
}
.state span:nth-child(9){
margin-left:12%
}
.state span:nth-child(11){
margin-left:10%
}
.state span:nth-child(12){
margin-left:10%
}
.state span:nth-child(13){
margin-left:10%
}
.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%;
/* border: 1px solid black; */
height:60px
}
</style>
<template>
<div class="resumeDetail">
<div class="personalInformation" style="margin-top:60px;width:100%">
<p style="width:90%;height:30px;line-height:30px;background:rgba(0,146,255,1);">
<img src="../../assets/bastmassage.png" alt="" style="width:29px;height:20px;margin-left:20px;vertical-align:middle;margin-top:-7px">
<span style="font-size:18px;margin:5px 0 0 5px;color:#FFFFFF">基本信息</span>
<span style="border-radius:5px;width:80px;height:30px;background:rgba(0,146,255,1); position: absolute;left:75%;line-height:30px;text-align:center;font-size:20px;color:#FFFFFF" @click="downloadONE(downresume)">下载</span>
</p>
<div style="width:40%;height:250px;float:left;margin-left:60px">
<span class="userD">姓名:{{resume.ownerName}}</span><br>
<span class="userD">联系电话:{{resume.ownerMobile}}</span><br>
<span class="userD">电子邮箱:{{resume.email}}</span><br>
<span class="userD">所在地:{{resume.locationCity}}</span><br>
</div>
<div style="float:left;height:250px;width:40%">
<span class="ageD">年龄:{{resume.ownerAge}}</span><br>
<span class="ageD">职位:{{resume.ownerExpectTitles}}</span><br>
<span class="ageD">学历:{{resume.ownerHighestDegree}}</span><br>
<span class="ageD">经验:{{resume.workYearsOriginal}}</span><br>
</div>
</div>
<div style="float:left;width:100%">
<p style="width:90%;height:30px;line-height30px;background:rgba(0,146,255,1);">
<img src="../../assets/qiuzhi.png" alt="" style="width:29px;height:20px;margin-left:20px;vertical-align:middle;margin-top:-7px">
<span style="font-size:18px;margin:5px 0 0 5px;color:#FFFFFF">求职状态:{{resume.statusMessage}}</span>
</p>
<div style="width:40%;height:150px;float:left;margin-left:60px">
<span class="qiwangzhiye">期望行业:{{resume.industries}}</span><br>
<span class="qiwangzhiye">期望职位:{{resume.expectTitles}}</span>
</div>
<div style="width:40%;height:150px;float:left;">
<span class="noneyD">期望薪资:{{resume.expectSalary}}</span><br>
<span class="noneyD">期望地点:{{resume.city}}</span>
</div>
</div>
<div class="workExperience" style="float:left;width:100%">
<p style="width:90%;height:30px;line-height:30px;background:rgba(0,146,255,1);">
<img src="../../assets/gongzuo.png" alt="" style="width:29px;height:20px;margin-left:20px;vertical-align:middle;margin-top:-7px">
<span style="font-size:18px;margin:5px 0 0 5px;color:#FFFFFF">工作经历</span>
</p>
<div v-for="(item,index) in roList" :key="index">
<p style="width:80%;margin-left:60px;margin-top:20px" >
<span style="margin-left:10px;font-size:15px">{{item.startTime}}-{{item.endTime}}</span>
<span style="margin-left:20px;font-size:15px">{{item.company}}({{item.workTime}})</span>
<span style="float:right;margin-right:20px;font-size:15px;color:#333333">{{item.industry}}{{item.companyType}}</span><br>
<span style="float:right;margin-right:20px;font-size:15px;color:#333333">{{item.department}}
</span>
<p style="width:72%;margin-left:90px;margin-top:20px;font-size:14px;line-height:30px">{{item.desc}}</p>
</p>
<!-- <hr style="width:80%;margin-left:60px;margin-top:10px"> -->
</div>
</div>
<div class="projectExperience" style="float:left;width:100%">
<p style="width:90%;height:30px;line-height:30px;background:rgba(0,146,255,1);">
<img src="../../assets/xiangmujili.png" alt="" style="width:29px;height:20px;margin-left:20px;vertical-align:middle;margin-top:-7px">
<span style="font-size:18px;margin:5px 0 0 5px;color:#FFFFFF">项目经历</span>
</p>
<div v-for="(item,index) in rpList" :key="index">
<p style="width:80%;margin-left:60px;margin-top:20px" >
<span style="margin-left:10px;font-size:15px">{{item.startYear}}/{{item.startMonth}}-{{item.endYear}}/{{item.endMonth}}</span>
<span style="margin-left:20px;font-size:15px">{{item.name}}</span>
<span style="float:right;margin-right:20px;font-size:15px;color:#333333">{{item.post}}</span><br>
<p style="width:72%;margin-left:90px;margin-top:15px;font-size:16px;line-height:30px">{{item.desc}}</p>
</p>
<!-- <hr style="width:980px;margin-left:60px;margin-top:10px"> -->
</div>
</div>
<div class="internshipExperience" style="float:left;width:100%">
<p style="width:90%;height:30px;line-height:30px;background:rgba(0,146,255,1);">
<img src="../../assets/shixi.png" alt="" style="width:29px;height:20px;margin-left:20px;vertical-align:middle;margin-top:-7px">
<span style="font-size:18px;margin:5px 0 0 5px;color:#FFFFFF">实习经历</span>
</p>
<div v-for="(item,index) in riList" :key="index">
<p style="width:80%;margin-left:60px;margin-top:20px" >
<span style="margin-left:10px;font-size:15px">{{item.startYear}}/{{item.startMonth}}-{{item.endYear}}/{{item.endMonth}}</span>
<span style="margin-left:20px;font-size:15px">{{item.company}}</span>
<span style="float:right;margin-right:20px;font-size:15px;color:#333333">{{item.industry}}</span><br>
<span style="float:right;margin-right:20px;font-size:15px;color:#333333">{{item.title}}</span>
<p style="width:72%;margin-left:90px;margin-top:20px;font-size:15px;line-height:30px">{{item.desc}}</p>
</p>
<!-- <hr style="width:980px;margin-left:60px;margin-top:10px"> -->
</div>
</div>
<div class="educationalExperience" style="float:left;width:100%">
<p style="width:90%;height:30px;line-height:30px;background:rgba(0,146,255,1);">
<img src="../../assets/jiaoyu.png" alt="" style="width:29px;height:20px;margin-left:20px;vertical-align:middle;margin-top:-7px">
<span style="font-size:18px;margin:5px 0 0 5px;color:#FFFFFF">教育经历</span>
</p>
<div v-for="(item,index) in reList" :key="index">
<p style="margin-top:30px">
<span style="margin-left:60px;font-size:15px">{{item.school}}(({{item.startYear}}.{{item.startMonth}}-{{item.endYear}}.{{item.endMonth}}))</span><br>
<span style="margin-left:60px;font-size:15px;display:inline-block;margin-top:30px">专业:{{item.major}}</span>
<span style="margin-left:360px;font-size:15px;display:inline-block;margin-top:30px">学历:{{item.degree}}</span>
</p>
</div>
</div>
<div class="Self-evaluation" style="float:left;width:100%" >
<p style="width:90%;height:30px;line-height:30px;background:rgba(0,146,255,1);">
<img src="../../assets/ziwopingjia.png" alt="" style="width:29px;height:20px;margin-left:20px;vertical-align:middle;margin-top:-7px">
<span style="font-size:18px;margin:5px 0 0 5px;color:#FFFFFF">自我评价</span>
</p>
<div>
<p style="margin-top:30px;margin-left:60px;font-size:15px;width:80%;line-height:30px">
{{resume.selfEvaluate}}
</p>
</div>
</div>
</div>
</template>
<script>
export default {
data(){
return {
resume:{},
riList:[],
roList:[],
rpList:[],
reList:[],
downresume:'',
}
},
methods: {
getDETAIL(){
this.resume=JSON.parse(localStorage.getItem('a'))
this.riList=JSON.parse(localStorage.getItem('b'))
this.roList=JSON.parse(localStorage.getItem('c'))//工作经历
this.rpList=JSON.parse(localStorage.getItem('d'))
this.reList=JSON.parse(localStorage.getItem('e'))
this.downresume=JSON.parse(localStorage.getItem('downID'))
},
// 下载简历
downloadONE(downID){
window.location.href=`/text/api/resume/download/formatted/one?resumeId=${downID}`
},
},
mounted(){
this.getDETAIL()
}
}
</script>
<style>
.resumeDetail{
width: 60%;
/* min-height:8000px; */
margin:0 auto;
/* border: 1px solid black; */
background: rgba(241,241,241,0.8)
}
ul,li{
list-style: none;
}
.personalInformation{
float: left;
}
.qiuzhi{
float: left;
}
.userD{
font-size: 15px;
line-height: 28px;
margin-top:25px;
display: inline-block;
}
.ageD{
font-size: 15px;
line-height: 28px;
margin-top:25px;
display: inline-block;
}
.qiwangzhiye{
font-size: 15px;
line-height: 28px;
margin-top:25px;
display: inline-block;
}
.noneyD{
font-size: 15px;
line-height: 28px;
margin-top:25px;
display: inline-block;
}
.qiwangzhiwei{
width: 300px;
height: 30px;
display: inline-block;
}
.qiwangdidianD{
width: 300px;
height: 30px;
display: inline-block;
margin-left: 100px
}
.workExperience{
}
.projectExperience{
margin-top:30px
}
.internshipExperience{
margin-top: 30px;
}
.educationalExperience{
margin-top: 30px;
}
.Self-evaluation{
margin-top: 30px;
}
</style>
<template>
<div id="Sweepcode">
<h2 class="header">应聘登记表</h2>
<div class="sweepcode_content">
<Form :label-width="100" :model="formInline" :rules="ruleInline" style="background:Gainsboro">
<FormItem label="邀约人" style="position:absolute;left:-40px;top:70px" prop="Inviter" >
<Input placeholder="请输入" style="width:260px;margin-left:31px" v-model="formInline.Inviter"/>
</FormItem>
<FormItem label="邀约手机号" style="position:absolute;left:-20px;top:120px" >
<Input placeholder="请输入" style="width:260px;border:0 !import;margin-left:10px" v-model="formInline.InviterPhoneNumber"/>
</FormItem>
<FormItem label="面试时间" style="position:absolute;left:-30px;top:170px" >
<DatePicker type="date" placeholder="请选择日期" style="width: 127px;margin-left:20px" v-model="formInline.date" @on-change="selectDate"></DatePicker>
<TimePicker type="time" placeholder="请选择时间" style="width: 127px" v-model="formInline.time" format="HH:mm" @on-change="selectTime"></TimePicker>
</FormItem>
<FormItem label="应聘职位" style="position:absolute;left:-30px;top:220px" >
<Input placeholder="请输入" style="width:260px;margin-left:20px" v-model="formInline.position"/>
</FormItem>
<FormItem label="应聘来源" style="position:absolute;left:-30px;top:270px" >
<Select v-model="formInline.model1" style="width:260px;margin-left:20px">
<Option v-for="item in origen" :value="item.value" :key="item.value">{{ item.label }}</Option>
</Select>
</FormItem>
<FormItem label="姓名" style="position:absolute;left:-50px;top:320px" >
<Input placeholder="请与简历保持一致" style="width:260px;margin-left:40px" v-model="formInline.name" />
</FormItem>
<FormItem label="手机号码" style="position:absolute;left:-30px;top:370px" >
<Input placeholder="请输入" style="width:260px;margin-left:20px" v-model="formInline.phoneNUmber"/>
</FormItem>
<FormItem label="是否携带简历" style="position:absolute;left:-10px;top:420px" >
<Select v-model="formInline.model2" style="width:260px;margin-left:0px">
<Option v-for="item in isGET" :value="item.value" :key="item.value">{{ item.label }}</Option>
</Select>
</FormItem>
</Form>
<div class="submission">
<h4 style="font-size:1rem" @click="confirmSubmission">提交</h4>
</div>
</div>
<Modal
v-model="modal3"
width='200px'
:closable='false'>
<div >
<h2 style="text-align: center;color:black">欢迎来到量星球</h2>
<p>您好,为了更好的面试体验,请仔细填写以下信息,预计用时1-2分钟</p>
</div>
<div slot='footer' style="text-align:center">
<Button type='primary' @click='modal3=false'>确定</Button>
</div>
</Modal>
<Modal
v-model="modal4"
width='200px'
:closable='false'>
<div >
<p style="text-align:center;font-size:16px">HR已知晓您的到来,请稍等片刻</p>
</div>
<div slot='footer' style="text-align:center">
<Button type='primary' @click='modal4=false'>好的</Button>
</div>
</Modal>
</div>
</template>
<script>
import {submitMassage} from '../../api/sweepCode.server.js'
export default {
data(){
return {
modal3:false,
modal4:false,
origen:[
{
value: '智联招聘',
label: '智联招聘'
},
{
value: '51Job',
label: '51Job'
},
{
value: 'boss直聘',
label: 'boss直聘'
},
{
value: '拉勾网',
label: '拉勾网'
},
{
value: '内部推荐',
label: '内部推荐'
},
{
value: '其他',
label: '其他'
},
],
isGET:[
{
value: '',
label: ''
},
{
value: '',
label: ''
},
],
ruleInline:{
model1: [
{ required: true, message: '请输入正确的应聘来源', trigger: 'blur' },
{ type: 'string', message: '', trigger: 'blur' }
],
},
formInline:{
model1:'',
model2:'',
Inviter:'',
InviterPhoneNumber:'',
date:'',
time:'',
position:'',
phoneNUmber:'',
name:'',
}
}
},
methods:{
// 确认提交
confirmSubmission(){
if(this.formInline.model1==''||this.formInline.model2==''||this.formInline.Inviter==''||this.formInline.date==''||this.formInline.time===''||this.formInline.position==''||this.formInline.phoneNUmber==''||this.formInline.name==''){
this.$Message.error('请填写完整的信息')
}
let parmars={
invitePerson:this.formInline.Inviter,
inviterMobile:this.formInline.InviterPhoneNumber,
dateTime:this.formInline.date + ' ' +this.formInline.time,
interviewTitle:this.formInline.position,
source:this.formInline.model1,
name:this.formInline.name,
mobile:this.formInline.phoneNUmber,
takeResume:this.formInline.model2
}
console.log(parmars)
submitMassage(parmars).then(res=>{
if(res.data.success==true){
this.modal4=true
}
})
},
selectDate(a){
console.log(a)
this.formInline.date=a
console.log(this.formInline.data)
},
selectTime(b){
console.log(b)
this.formInline.time=b
},
welconme(){
this.modal3=true
}
},
mounted(){
this.welconme()
}
}
</script>
<style lang="less" scoped>
#Sweepcode{
font-size: 66vw;
background: Gainsboro
}
.header{
font-size: 1rem;
border-bottom: 1px solid Grey;
text-align: center;
height: 3rem;
line-height: 3rem
}
.submission{
position: fixed;
bottom: 0;
height: 40px;
width: 100%;
background:LightGray;
line-height: 40px;
text-align: center
}
</style>
\ No newline at end of file
...@@ -3,14 +3,55 @@ ...@@ -3,14 +3,55 @@
<h3 style="color:#2d8cf0;font-size:18px;margin:14px 0 0 15px">二维码管理</h3> <h3 style="color:#2d8cf0;font-size:18px;margin:14px 0 0 15px">二维码管理</h3>
<h5 style="margin:24px 0 0 15px;display:inline-block">前台扫描二维码</h5> <h5 style="margin:24px 0 0 15px;display:inline-block">前台扫描二维码</h5>
<div class="Qrcode"> <div class="Qrcode">
<img src=""> <img :src="url" style="width:100%;height:100%">
</div> </div>
<p class="xiazai">下载</p> <p class="xiazai" @click="downPic">下载</p>
</div> </div>
</template> </template>
<script> <script>
import {getErcode} from '../../api/stystem.server.js'
export default { export default {
data(){
return {
url:'',
url2:''
}
},
methods:{
//取到二维码
getercode(){
getErcode().then(res=>{
console.log(res)
if(res.data.success==true){
this.url=res.data.body
}
})
},
downPic (img) {
// this.url2='/text/qrCode/getQrCodeBase64'
var image = new Image()
image.setAttribute('crossOrigin', 'anonymous')
image.onload = function () {
var canvas = document.createElement('canvas')
canvas.width = image.width
canvas.height = image.height
var context = canvas.getContext('2d')
context.drawImage(image, 0, 0, image.width, image.height)
var url = canvas.toDataURL('image/png') // 得到图片的base64编码数据
var a = document.createElement('a') // 生成一个a元素
var event = new MouseEvent('click') // 创建一个单击事件
a.download = img.name || 'photo' // 设置图片名称
a.href = url // 将生成的URL设置为a.href属性
a.dispatchEvent(event) // 触发a的单击事件
}
image.src = img.url
}
},
mounted(){
this.getercode()
console.log( this.url2='/text/qrCode/getQrCodeBase64')
}
} }
</script> </script>
<style> <style>
......
...@@ -5,18 +5,18 @@ ...@@ -5,18 +5,18 @@
<span style="font-size:18px;color:#2d8cf0;margin-left:18px;">新增账户</span> <span style="font-size:18px;color:#2d8cf0;margin-left:18px;">新增账户</span>
<span style="margin-left:10px">以下内容均为必填项</span> <span style="margin-left:10px">以下内容均为必填项</span>
</p> </p>
<Form :label-width="100" :model="formInline" :rules="ruleInline"> <Form :label-width="130" :model="formInline" :rules="ruleInline">
<FormItem label="配置登录账号" style="margin-top:20px" prop="PhoneNumber"> <FormItem label="配置登录账号" style="margin-top:20px" prop="PhoneNumber">
<Input placeholder="请输入正确的手机号" style="width:300px" v-model="formInline.PhoneNumber"/> <Input placeholder="请输入正确的手机号" style="width:300px" v-model="formInline.PhoneNumber"/>
</FormItem> </FormItem>
<FormItem label="绑定真实姓名" style="margin-top:20px" prop="PerName"> <FormItem label="绑定真实姓名" style="margin-top:20px" prop="PerName">
<Input placeholder="请输入真实姓名" style="width:300px" v-model="formInline.PerName"/> <Input placeholder="请输入真实姓名" style="width:300px" v-model="formInline.PerName" :maxlength="5"/>
</FormItem> </FormItem>
</Form> </Form>
<p> <p>
<span style="margin-left:18px">初始登录密码</span> <span style="margin-left:18px">初始登录密码</span>
<span style="margin-left:8px">默认是"123456",新用户首次登录需修改后才能进入系统。</span> <span style="margin-left:8px">默认是"123456",新用户首次登录需修改后才能进入系统。</span>
<span style=""><button style="width:55px;height:25px;font-size:14px;background:#2d8cf0;color:#ffffff;margin-left:20px; border-radius: 5px" @click="addacount"> 添加</button></span> <span style=""><Button type="primary" size='small' style="color:#ffffff;margin-left:20px; border-radius: 5px" @click="addacount"> 添加</Button></span>
</p> </p>
</div> </div>
<div class="accountMange"> <div class="accountMange">
...@@ -25,21 +25,27 @@ ...@@ -25,21 +25,27 @@
<span style="margin-left:10px">删除后该用户将无法登录,该账户上传的简历仍然保留。</span> <span style="margin-left:10px">删除后该用户将无法登录,该账户上传的简历仍然保留。</span>
</p> </p>
<p style="border-bottom:1px solid black;line-height:30px"> <p style="border-bottom:1px solid black;line-height:30px;margin-bottom:10px">
<input type='checkbox' class='input-checkbox' v-model='checked' v-on:click='checkedAll' style="margin-left:25px"><span style="margin-left:10px">全选</span> <input type='checkbox' class='input-checkbox' v-model='checked' v-on:click='checkedAll(checkboxList)' style="margin-left:25px;margin-top:15px"><span style="margin-left:10px">全选</span>
<span style="margin-left:40px;color:#2d8cf0" >删除</span> <span style="margin-left:40px;color:#2d8cf0" @click="delateall">删除</span>
</p> </p>
<!-- <Table ref="selection" :columns="columns4" :data="data1"></Table> --> <!-- <Table ref="selection" :columns="columns4" :data="data1"></Table> -->
<div v-for='item in ajaxData' :key="item.id" class="detailQQ"> <div style="overflow-y: auto;height:480px;amrgin-bottom:40px">
<input type='checkbox' name='checkboxinput' class='input-checkbox' v-model='checkboxList' :value="item.id" style="margin-left:25px;margin-top:20px"> <div v-for='item in ajaxData' :key="item.id" style="">
<div class="detailQQ">
<input type='checkbox' name='checkboxinput' class='input-checkbox' v-model='checkboxList' :value="item.id" style="margin-left:25px" @click="delateArr(item.id)">
<span style="margin-left:5px" >{{item.userName}}</span> <span style="margin-left:5px" >{{item.userName}}</span>
<span style="margin-left:35px">{{item.userCode}}</span> <span style="margin-left:35px">{{item.userCode}}</span>
<span style="margin-left:35px">{{item.createTime}}</span> <span style="margin-left:35px">{{item.createTime}}</span>
<span style="margin-left:35px;color:#2d8cf0" @click="recoveryModal(item.id)">恢复初始密码</span> <span style="margin-left:35px;color:#2d8cf0" @click="recoveryModal(item.id)">恢复初始密码</span>
<span style="margin-left:35px;color:#2d8cf0" @click="delateMaodal(item.id)">删除</span> <span style="margin-left:35px;color:#2d8cf0" @click="delateMaodal(item.id)">删除</span>
</div>
<div style="height:10px;background:white;width:100%;"></div>
</div> </div>
</div>
<div class="pageBottom"> <div class="pageBottom">
<Page :total="100" show-elevator style="text-align:center;margin-top:8px"/> <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:8px"></Page>
</div> </div>
</div> </div>
<!-- 恢复初始密码 --> <!-- 恢复初始密码 -->
...@@ -70,6 +76,31 @@ ...@@ -70,6 +76,31 @@
<Button type='primary' @click="delateAccount">确定</Button> <Button type='primary' @click="delateAccount">确定</Button>
</div> </div>
</Modal> </Modal>
<Modal
v-model="modal3"
@on-ok="ok"
:closable="false"
width='250px'
@on-cancel="cancel">
<h3 style="text-align:center">提示</h3>
<p style="text-align:center">是否确定删除这些账户</p>
<div slot='footer' style="text-align:center">
<Button type='primary' @click='modal3=false'>取消</Button>
<Button type='primary' @click="delateAll">确定</Button>
</div>
</Modal>
<Modal
v-model="modal4"
@on-ok="ok"
:closable="false"
width='250px'
@on-cancel="cancel">
<h3 style="text-align:center">提示</h3>
<p style="text-align:center">未选择要上传的远元素</p>
<div slot='footer' style="text-align:center">
<Button type='primary' @click='modal4=false'>确定</Button>
</div>
</Modal>
</div> </div>
</template> </template>
<script> <script>
...@@ -79,16 +110,22 @@ export default { ...@@ -79,16 +110,22 @@ export default {
return { return {
modal1:false, modal1:false,
modal2:false, modal2:false,
modal3:false,
modal4:false,
checkboxList:[], checkboxList:[],
checked: false, checked: false,
userName:'', userName:'',
userCode:'', userCode:'',
delateARR:[],
id:'', id:'',
I:'', I:'',
pageIndex:1,
pageSize:30,
totalSize:null,
searchInfo:{ searchInfo:{
pageSize:30, pageSize:30,
pageIndex:'', pageIndex:1,
id:'' id:''
}, },
formInline: { formInline: {
PhoneNumber: '', PhoneNumber: '',
...@@ -103,7 +140,7 @@ export default { ...@@ -103,7 +140,7 @@ export default {
{ type: 'string', message: '', trigger: 'blur' } { type: 'string', message: '', trigger: 'blur' }
] ]
}, },
ajaxData:[], ajaxData:[],
checkData: [] ,// 双向数据绑定的数组 checkData: [] ,// 双向数据绑定的数组
} }
}, },
...@@ -116,17 +153,25 @@ export default { ...@@ -116,17 +153,25 @@ export default {
}, },
cancel () { cancel () {
this.$Message.info('Clicked cancel'); this.$Message.info('Clicked cancel');
},
//
delateArr(DElateID){
this.delateARR.push(DElateID)
}, },
//全选与反选 //全选与反选
checkedAll: function() { checkedAll: function() {
if (this.checked) {//实现反选 if (this.checked) {//实现反选
this.checkboxList = []; this.checkboxList = [];
this.checkboxList.push(item.id)
this.delateARR.push(item.id)
} else { //实现全选 } else { //实现全选
this.checkboxList = []; this.checkboxList = [];
this.ajaxData.forEach( (item) => { this.ajaxData.forEach( (item) => {
this.checkboxList.push(item.id); this.checkboxList.push(item.id);
this.delateARR.push(item.id)
}); });
} }
console.log(11111111,this.delateARR,this.checkboxList)
}, },
//添加账户 //添加账户
addacount(){ addacount(){
...@@ -138,6 +183,11 @@ export default { ...@@ -138,6 +183,11 @@ export default {
this.$Message.error('请填写正确的手机号和真实的姓名') this.$Message.error('请填写正确的手机号和真实的姓名')
return return
} }
if(!(/^[1][3,4,5,7,8,6,9][0-9]{9}$/.test(this.formInline.PhoneNumber))){
this.$Message.error('输入正确的手机号')
return
}
addAccount(parmars).then(res=>{ addAccount(parmars).then(res=>{
if(res.data.success==true){ if(res.data.success==true){
this.$Message.success('添加成功') this.$Message.success('添加成功')
...@@ -149,15 +199,17 @@ export default { ...@@ -149,15 +199,17 @@ export default {
} , } ,
//查询账户列表 //查询账户列表
SearchList(){ SearchList(page){
page = typeof(page)=='number'?page:1
this.searchInfo.pageIndex = page
this.pageIndex = page
let parmars={ let parmars={
pageSize:this.searchInfo.pageSize, pageSize:this.searchInfo.pageSize,
pageIndex:this.searchInfo.pageIndex pageIndex:this.searchInfo.pageIndex,
} }
queryaccountList(parmars).then(res=>{ queryaccountList(parmars).then(res=>{
console.log(res)
if(res.data.success==true){ if(res.data.success==true){
// console.log(res.data.body.items) this.totalSize=res.data.body.totalNumber
this.ajaxData=res.data.body.items.map((item,index)=>{ this.ajaxData=res.data.body.items.map((item,index)=>{
item.id=item.id item.id=item.id
item.userName=item.userName item.userName=item.userName
...@@ -170,9 +222,7 @@ export default { ...@@ -170,9 +222,7 @@ export default {
}, },
//删除单条账户弹框 //删除单条账户弹框
delateMaodal(DID){ delateMaodal(DID){
console.log(DID)
this.I=DID this.I=DID
console.log(this.I)
this.modal2=true this.modal2=true
}, },
//删除单条账户 //删除单条账户
...@@ -188,22 +238,27 @@ export default { ...@@ -188,22 +238,27 @@ export default {
this.SearchList() this.SearchList()
}) })
}, },
//批量删除账户 // 批量删除弹出框
delateAll(id){ delateall(){
let parmars={ if(this.checkboxList.length==0||this.delateArr.length==0){
1:id this.modal4=true
return
} }
delateAllAccount(parmars).then(res=>{ this.modal3=true
},
//批量删除账户
delateAll(){
delateAllAccount(this.delateARR).then(res=>{
if(res.data.success==true){ if(res.data.success==true){
this.$Message.success('删除成功') this.$Message.success('删除成功')
this.modal3=false
this.SearchList()
} }
}) })
}, },
//恢复初始密码弹窗 //恢复初始密码弹窗
recoveryModal(ID){ recoveryModal(ID){
console.log(ID)
this.I=ID this.I=ID
console.log(this.I)
this.modal1=true this.modal1=true
}, },
//确认恢复初始密码 //确认恢复初始密码
...@@ -211,15 +266,22 @@ export default { ...@@ -211,15 +266,22 @@ export default {
let parmars={ let parmars={
id:this.I id:this.I
} }
console.log(parmars)
recoveryPassword(parmars).then(res=>{ recoveryPassword(parmars).then(res=>{
console.log(res)
if(res.data.success==true){ if(res.data.success==true){
this.$Message.success('恢复密码成功') this.$Message.success('恢复密码成功')
this.modal1=false this.modal1=false
} }
}) })
} },
//改变页码
pageChange(page){
this.SearchList(page)
},
pageSizeChange(page){
this.searchInfo.pageSize=page
this.pageSize=page
this.SearchList()
},
}, },
watch: { watch: {
checkboxList: { checkboxList: {
...@@ -244,17 +306,23 @@ export default { ...@@ -244,17 +306,23 @@ export default {
<style> <style>
.pageBottom{ .pageBottom{
height: 40px; height: 40px;
width:1800px; width: 81.4%;
background:#EDEDED; background:#EDEDED;
position: fixed; position: fixed;
bottom: 0; bottom: 0;
} }
.accountMange{
margin-top:10px;
}
.detailQQ{ .detailQQ{
height: 30px; height: 40px;
width: 100% line-height: 40px;
width: 100%;
background: rgba(244,244,244,1);
/* margin-top: 10px */
} }
.detailQQ :nth-child(2){ .detailQQ :nth-child(2){
width: 40px; width: 80px;
display: inline-block; display: inline-block;
} }
.detailQQ :nth-child(3){ .detailQQ :nth-child(3){
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
<div class="emailMange"> <div class="emailMange">
<div class="addEmail"> <div class="addEmail">
<p style="margin-top:10px"> <p style="margin-top:10px">
<span style="font-size:18px;color:#2d8cf0;margin-left:18px">新增账户</span> <span style="font-size:18px;color:#2d8cf0;margin-left:18px">新增接受邮箱</span>
<span style="margin-left:10px">绑定邮箱以接收简历</span> <span style="margin-left:10px">绑定邮箱以接收简历</span>
</p> </p>
<Form :label-width="100" :model="formInline" :rules="ruleInline"> <Form :label-width="100" :model="formInline" :rules="ruleInline">
...@@ -10,48 +10,53 @@ ...@@ -10,48 +10,53 @@
<Input placeholder="请输入企业邮箱" style="width:300px" v-model="formInline.emailNumber"/> <Input placeholder="请输入企业邮箱" style="width:300px" v-model="formInline.emailNumber"/>
</FormItem> </FormItem>
<FormItem label="请选择开始同步的时间" style="margin-top:20px; position: absolute;top:30px;left: 490px" :label-width="180"> <FormItem label="请选择开始同步的时间" style="margin-top:20px; position: absolute;top:30px;left: 490px" :label-width="180">
<DatePicker type="datetime" format="yyyy-MM-dd HH:mm" placeholder="请选择日期" style="width: 200px"></DatePicker><br> <DatePicker type="datetime" format="yyyy-MM-dd HH:mm:ss" placeholder="请选择日期" style="width: 200px" v-model="DATA" @on-change="selectTime" :options="options3" :editable='false'></DatePicker><br>
<span style="font-size:8px;margin-left:0px;"><Icon type="md-information-circle" />如不选取默认同步邮箱中的所有简历</span> <span style="font-size:8px;margin-left:0px;"><Icon type="md-information-circle" />如不选取默认同步邮箱中的所有简历</span>
</FormItem> </FormItem>
<FormItem label="邮箱密码" style="margin-top:20px; position: absolute;top:110px;left: -80px" prop="emailPsd" :label-width="180"> <FormItem label="邮箱密码" style="margin-top:20px; position: absolute;top:110px;left: -80px" prop="emailPsd" :label-width="180">
<Input placeholder="请输入企业邮箱" style="width:300px" v-model="formInline.emailPsd"/><br> <Input placeholder="请输入企业邮箱密码" style="width:300px" v-model="formInline.emailPsd" type="password" /><br>
<span style="font-size:8px;position: relative;top:0px left:30px"><Icon type="md-information-circle" />邮箱密码在绑定后再次修改,请及时点击修改来更新。</span> <span style="font-size:8px;position: relative;top:0px left:30px"><Icon type="md-information-circle" />邮箱密码在绑定后再次修改,请及时点击修改来更新。</span>
</FormItem> </FormItem>
<FormItem label="所属人" style="margin-top:20px; position: absolute;top:110px;left: 410px" prop="UserName" :label-width="180"> <FormItem label="所属人" style="margin-top:20px; position: absolute;top:110px;left: 410px" prop="UserName" :label-width="180">
<Input placeholder="请输入企业邮箱" style="width:300px" v-model="formInline.UserName"/> <Input placeholder="请输入企业邮箱" style="width:300px" v-model="formInline.UserName" :maxlength="5"/>
</FormItem> </FormItem>
<button type="primary" style=" width:110px;height:30px;position: absolute;top:130px;left: 910px;border-radius: 5px;background:rgb(0, 146, 255);color:rgb(255,255,255)" @click="bindingSynchronization">绑定并开始同步</button> <span type="primary" style="line-height:30px;text-align:center; width:110px;height:30px;position: absolute;top:130px;left: 910px;border-radius: 5px;background:rgb(0, 146, 255);color:rgb(255,255,255)" @click="bindingSynchronizat">绑定并开始同步</span>
</Form> </Form>
</div> </div>
<div class="Emailmange"> <div class="Emailmange">
<p style="height:40px;line-height:40px"> <p style="height:40px;line-height:40px">
<span style="font-size:18px;color:#2d8cf0;margin-left:18px">账户管理</span> <span style="font-size:18px;color:#2d8cf0;margin-left:18px">邮箱管理</span>
<span style="margin-left:10px">删除后该用户将无法登录,该账户上传的简历仍然保留。</span> <span style="margin-left:10px">解绑后不在接受该邮箱下的简历,之前接受的简历仍然保留。</span>
</p> </p>
<p style="border-bottom:1px solid black;line-height:30px"> <p style="border-bottom:1px solid black;line-height:30px">
<input type='checkbox' class='input-checkbox' v-model='checked' v-on:click='checkedAll' style="margin-left:25px">全选 <input type='checkbox' class='input-checkbox' v-model='checked' v-on:click='checkedAll' style="margin-left:25px"><span style="margin-left:15px">全选</span>
<span style="margin-left:40px;color:#2d8cf0">解绑</span> <span style="margin-left:40px;color:#2d8cf0" @click="UntyingAll">解绑</span>
</p> </p>
<div v-for='item in ajaxData' :key="item.id" class="emailList"> <div v-for='item in ajaxData' :key="item.id" class="emailList">
<input type='checkbox' name='checkboxinput' class='input-checkbox' v-model='checkboxList' :value="item.id" style="margin-left:25px;margin-top:20px"> <input type='checkbox' name='checkboxinput' class='input-checkbox' v-model='checkboxList' :value="item.id" style="margin-left:25px;margin-top:20px" @click="selectUntyingEle(item.id)"/>
<span style="margin-left:5px" >{{item.belongs}}</span> <span style="margin-left:5px" >{{item.belongs}}</span>
<span style="margin-left:35px;">{{item.emailName}}</span> <span style="margin-left:35px;">{{item.emailName}}</span>
<span style="margin-left:35px;">同步时间|{{item.syncStartDate}}开始</span> <span style="margin-left:35px;">同步时间 | {{item.syncStartDate}} <span style="margin-left:10px">开始</span> </span>
<span style="margin-left:10px">新建时间|{{item.lastSyncDate}}</span> <span style="margin-left:10px">新建时间 | {{item.createTime}}</span>
<span style="margin-left:35px;color:#2d8cf0" @click="modal4=true">修改</span> <span style="margin-left:35px;color:#2d8cf0" @click="UpdateEMAIL(item.emailName,item.belongs,item.id)">修改</span>
<span style="margin-left:35px;color:#2d8cf0" @click="UnbindingModal(item.emailName)">解绑</span> <span style="margin-left:35px;color:#2d8cf0" @click="UnbindingModal(item.id)">解绑</span>
<span style="margin-left:150px">正在进行</span> <!-- <span style="margin-left:150px" v-if="item.c=='正常'" >{{item.syncMailMsg}}</span>
<span style="margin-left:150px;color:red" v-if="item.c=='系统'" >{{item.syncMailMsg}}</span> -->
<!-- <span style="margin-left:150px" >{{item.syncMailMsg}}</span> -->
<span style="margin-left:150px" v-if="item.c=='正常'" >{{item.syncMailMsg}}</span>
<span style="margin-left:150px;color:red" v-if="item.c=='系统'" >{{item.syncMailMsg}}</span>
</div> </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:8px"></Page>
</div>
</div> </div>
<!--同步失败--> <!--同步失败-->
<Modal <Modal
v-model="modal1" v-model="modal1"
@on-ok="ok"
:closable="false" :closable="false"
:footer-hide="true" :footer-hide="true"
width='250px' width='250px'>
@on-cancel="cancel">
<h3 style="text-align:center">提示</h3> <h3 style="text-align:center">提示</h3>
<p style="text-align:center">系统错误,请联系开发者!</p> <p style="text-align:center">系统错误,请联系开发者!</p>
<h2 style="text-align:center;font-size:18px;color:#2d8cf0" @click="modal1=false">确定</h2> <h2 style="text-align:center;font-size:18px;color:#2d8cf0" @click="modal1=false">确定</h2>
...@@ -59,14 +64,12 @@ ...@@ -59,14 +64,12 @@
<!-- 同步成功 --> <!-- 同步成功 -->
<Modal <Modal
v-model="modal2" v-model="modal2"
@on-ok="ok"
:closable="false" :closable="false"
:footer-hide="true" :footer-hide="true"
width='250px' width='250px'>
@on-cancel="cancel"> <h3 style="text-align:center">提示</h3>
<h3 style="text-align:center">提示</h3> <p style="height:30px;line-height:30px">同步完成,如密码发生改变,请及时点击<br><span>修改</span>来重置密码</p>
<p style="text-align:center">同步完成,如密码发生改变,请及时点击<span>修改</span>来重置密码</p> <h2 style="text-align:center;font-size:18px;color:#2d8cf0;height:40px;line-height:40px;margin-top:30px" @click="pushlist">我已知晓</h2>
<h2 style="text-align:center;font-size:18px;color:#2d8cf0" @click="modal2=false">我已知晓</h2>
</Modal> </Modal>
<!-- 同步绑定 --> <!-- 同步绑定 -->
<Modal <Modal
...@@ -83,33 +86,26 @@ ...@@ -83,33 +86,26 @@
<!-- 修改弹出框 --> <!-- 修改弹出框 -->
<Modal <Modal
v-model="modal4" v-model="modal4"
@on-ok="ok"
:closable="false" :closable="false"
width='860px' width='460px'>
@on-cancel="cancel">
<span>修改绑定邮箱</span> <span>修改绑定邮箱</span>
<div style="height:160px"> <div style="height:260px">
<Form> <Form>
<FormItem label="邮箱账号" style="margin-top:20px" prop="emailNumber"> <FormItem label="邮箱账号" style="margin-top:20px" prop="emailNumber">
<Input placeholder="请输入企业邮箱" v-model="formInline.emailNumber" style="width:300px"/> <Input placeholder="请输入企业邮箱" v-model="Uusername" style="width:300px"/>
</FormItem>
<FormItem label="请选择开始同步的时间" :label-width="180" style="position: absolute;top:50px;left:350px">
<DatePicker type="datetime" format="yyyy-MM-dd HH:mm" placeholder="请选择日期" style="width: 200px"></DatePicker><br>
<span style="font-size:8px;margin-left:0px;"><Icon type="md-information-circle" />如不选取默认同步邮箱中的所有简历</span>
</FormItem> </FormItem>
<FormItem label="邮箱密码" prop="emailPsd" :label-width="180" style="position: absolute;top:130px;left:-105px"> <FormItem label="邮箱密码" prop="emailPsd" :label-width="180" style="position: absolute;top:130px;left:-105px">
<Input placeholder="请输入企业邮箱密码" style="width:300px" v-model="formInline.emailPsd"/><br> <Input placeholder="请输入企业邮箱密码" style="width:300px" v-model="UpassWord" type="password" autocomplete="new-password"/><br>
<span style="font-size:8px;position: relative;top:0px left:30px"><Icon type="md-information-circle" />邮箱密码在绑定后再次修改,请及时点击修改来更新。</span> <span style="font-size:8px;position: relative;top:0px left:30px"><Icon type="md-information-circle" :options="options3" />邮箱密码在绑定后再次修改,请及时点击修改来更新。</span>
</FormItem> </FormItem>
<FormItem label="所属人" style="margin-top:20px; position: absolute;top:110px;left: 300px" prop="UserName" :label-width="180"> <FormItem label="所属人" style="margin-top:20px; position: absolute;top:220px;left: -100px" prop="UserName" :label-width="180">
<Input placeholder="请输入所属着真实的姓名" style="width:280px" v-model="formInline.UserName"/> <Input placeholder="请输入所属着真实的姓名" style="width:300px" v-model="Ublengs" :maxlength="5"/>
</FormItem> </FormItem>
</Form> </Form>
</div> </div>
<div slot='footer' style="text-align:center"> <div slot='footer' style="text-align:center">
<Button type='primary' @click='modal4=false'>取消</Button> <Button type='primary' @click='modal4=false'>取消</Button>
<Button type='primary' >修改并重新绑定</Button> <Button type='primary' @click="UpdateemailTwo" >保存</Button>
<Button type='primary' >仅修改</Button>
</div> </div>
</Modal> </Modal>
<!-- 解绑弹出框 --> <!-- 解绑弹出框 -->
...@@ -129,7 +125,7 @@ ...@@ -129,7 +125,7 @@
</div> </div>
</template> </template>
<script> <script>
import { queryemailList,Synchronization,jiebangEmail} from '../../api/stystem.server.js' import { queryemailList,Synchronization,jiebangEmail,updateemailTWO,UntyingAll} from '../../api/stystem.server.js'
export default { export default {
data(){ data(){
return { return {
...@@ -139,12 +135,28 @@ export default { ...@@ -139,12 +135,28 @@ export default {
modal4:false, modal4:false,
modal5:false, modal5:false,
NAme:"", NAme:"",
DATA:"",
Tname:'',
options3: {
disabledDate (date) {
return date && date.valueOf() > Date.now();
}
},
UpassWord:'',
Uusername:'',
Ublengs:'',
Uid:'',
UntyingAllARR:[],
Tblengs:'',
checkboxList:[], checkboxList:[],
checked: false, checked: false,
pageIndex:1,
pageSize:30,
totalSize:null,
searchInfo:{ searchInfo:{
pageSize:30, pageSize:30,
pageIndex:'', pageIndex:1,
id:'' id:'',
}, },
formInline: { formInline: {
emailNumber: '', emailNumber: '',
...@@ -158,11 +170,9 @@ export default { ...@@ -158,11 +170,9 @@ export default {
], ],
emailPsd: [ emailPsd: [
{ required: true, message: '请输入正确的密码', trigger: 'blur' }, { required: true, message: '请输入正确的密码', trigger: 'blur' },
{ type: 'string', min: 11, message: '', trigger: 'blur' }
], ],
UserName:[ UserName:[
{ required: true, message: '请输入正确的姓名', trigger: 'blur' }, { required: true, message: '请输入正确的姓名', trigger: 'blur' },
{ type: 'string', min: 4, message: '', trigger: 'blur' }
] ]
}, },
ajaxData: [], ajaxData: [],
...@@ -178,6 +188,7 @@ export default { ...@@ -178,6 +188,7 @@ export default {
this.checkboxList = []; this.checkboxList = [];
this.ajaxData.forEach( (item) => { this.ajaxData.forEach( (item) => {
this.checkboxList.push(item.id); this.checkboxList.push(item.id);
this.UntyingAllARR.push(item.id)
}); });
} }
}, },
...@@ -188,66 +199,138 @@ export default { ...@@ -188,66 +199,138 @@ export default {
this.$Message.info('Clicked cancel'); this.$Message.info('Clicked cancel');
}, },
//绑定同步邮箱 //绑定同步邮箱
bindingSynchronization(){ bindingSynchronizat(){
if(this.formInline.emailNumber==''&&this.formInline.emailPsd==''&&this.formInline.UserName==''){ if(this.formInline.emailNumber==''||this.formInline.emailPsd==''||this.formInline.UserName==''||this.DATA==''){
this.$Message.error('正确填写信息') this.$Message.error('填写完整的正确信息')
return return
} }
this.modal3=true this.modal3=true
let parmars={ let parmars={
emailName:this.formInline.emailNumber, emailName:this.formInline.emailNumber,
emailPassword:this.formInline.emailPsd, emailPassword:this.formInline.emailPsd,
belongs:this.formInline.UserName belongs:this.formInline.UserName,
syncStartDate:this.DATA
} }
Synchronization(parmars).then(res=>{ Synchronization(parmars).then(res=>{
if(res.data.success==true){ if(res.data.success==true){
this.modal3=false this.modal3=false
this.modal2=true this.modal2=true
this.SearchList() this.formInline.emailNumber=''
this.formInline.emailPsd=''
this.formInline.UserName=''
this.DATA=''
}else{
this.modal3=false
// this.modal1=true
} }
},()=>{ },()=>{
this.modal3=false this.modal3=false
this.modal1=true // this.modal1=true
this.formInline.emailPsd=''
}) })
},
//选择同步的时间
selectTime(b){
this.DATA=b
}, },
//查询邮箱列表 //查询邮箱列表
SearchList(){ SearchList(page){
page = typeof(page)=='number'?page:1
this.searchInfo.pageIndex = page
this.pageIndex = page
let parmars={ let parmars={
pageSize:this.searchInfo.pageSize, pageSize:this.searchInfo.pageSize,
pageIndex:this.searchInfo.pageIndex pageIndex:this.searchInfo.pageIndex,
} }
queryemailList(parmars).then(res=>{ queryemailList(parmars).then(res=>{
if(res.data.success==true){ if(res.data.success==true){
// console.log(res.data.body.items) this.totalSize=res.data.body.totalNumber
this.ajaxData=res.data.body.items.map((item,index)=>{ this.ajaxData=res.data.body.items.map((item,index)=>{
item.syncStartDate=item.syncStartDate item.syncStartDate=item.syncStartDate
item.lastSyncDate=item.lastSyncDate item.syncFlag=item.syncFlag
item.createTime=item.createTime
item.belongs=item.belongs item.belongs=item.belongs
item.emailName=item.emailName item.emailName=item.emailName
item.id=item.id
item.syncFlag=item.syncFlag
item.syncMailMsg=item.syncMailMsg
item.c= item.syncMailMsg==null? item.syncMailMsg:item.syncMailMsg.substring(0,2)
return item return item
}) })
} }
}) })
}, },
//改变页码
pageChange(page){
this.SearchList(page)
},
pageSizeChange(page){
this.searchInfo.pageSize=page
this.pageSize=page
this.SearchList()
},
// 修改邮箱弹出框
UpdateEMAIL(Tname,Tblengs,Tid){
this.modal4=true
this.Uusername=Tname
this.Ublengs=Tblengs
this.Uid=Tid
},
// 修改后重新绑定邮箱并保存
UpdateemailTwo(){
if(this.UpassWord==''||this.Uusername==''||this.Ublengs==''){
this.$Message.error('请正确填写信息')
return
}
let parmars={
emailName:this.Uusername,
emailPassword:this.UpassWord,
belongs:this.Ublengs,
id:this.Uid
}
updateemailTWO(parmars).then(res=>{
if(res.data.success==true){
this.modal4=false
this.SearchList()
}else{
this.modal4=false
}
})
},
//解绑弹出框 //解绑弹出框
UnbindingModal(EMi){ UnbindingModal(Eid){
this.NAme=EMi, this.NAme=Eid,
this.modal5=true this.modal5=true
}, },
//确认解绑邮箱 //确认解绑邮箱
Unbinding(){ Unbinding(){
let parmars={ jiebangEmail(this.NAme).then(res=>{
name:this.NAme
}
jiebangEmail(parmars).then(res=>{
if(res.data.success==true){ if(res.data.success==true){
this.$Message.success('解绑成功') this.$Message.success('解绑成功')
this.modal5=false this.modal5=false
this.SearchList() this.SearchList()
} }
}) })
} },
// 选择批量解绑的项
selectUntyingEle(id){
this.UntyingAllARR.push(id)
},
// 批量解绑邮箱
UntyingAll(){
UntyingAll(this.UntyingAllARR).then(res=>{
if(res.data.success==true){
this.$Message.success('解绑成功')
this.SearchList()
}
})
},
pushlist(){
this.modal2=false
this.SearchList()
}
}, },
watch: { watch: {
...@@ -272,14 +355,10 @@ export default { ...@@ -272,14 +355,10 @@ export default {
</script> </script>
<style> <style>
.addEmail{ .addEmail{
height: 220px; height: 220px;
/* border: 1px solid black; */
} }
.Emailmange{ .Emailmange{
height: 1000px; min-height: 500px
/* border: 1px solid black; */
} }
.emailList{ .emailList{
height: 40px; height: 40px;
......
<template> <template>
<div class="upload"> <div class="upload">
<div class="upload-left"> <div class="upload-left">
<div class="UleftcontentTop" > <div class='uploadC' style="background:rgba(244,244,244,1);height:300px">
<!-- <input type="text" class="detailTW" v-model="Filename"> <div class='upload'>
<Upload <Input type='text' v-model='fileName' style='width:70%;margin-left:4%;margin-top:40px'></Input>
:before-upload="handleUpload" <input
multiple ref="input"
action="//jsonplaceholder.typicode.com/posts/"> class='nativeInput'
<Button class="detailTB">选择文件</Button> type="file"
</Upload> --> :class="['prefixCls' + '-input']"
<input type="text" class="detailTW" v-model="Filename"> @change="handleChange"
<file-upload :multiple="true"
ref="upload" :format="['html','doc','pdf','txt','docx']"
v-model="files" :accept="accept"
post-action="/post.method" >
put-action="/put.method" <Button @click='selFiles' style='width:20%;margin-top:40px;margin-left:-4px;color:black'>选择文件</Button>
@input-file="inputFile" </div>
@input-filter="inputFilter" <div class='contentTips'>
> <p style="font-size:12px;margin-left:2%;text-align:center;height:40px;line-height:40px">单个文件不能大于2MB,支持html,doc,docx,txt,pdf等格式,暂时不支持压缩格式</p>
<p style="width:100px;height:30px;line-height:30px;background:#2d8cf0;color:#ffffff;margin:20px 0 0 390px">选择文件</p> <p style="font-size:12px;margin-left:2%;text-align:center;height:40px;line-height:40px">支持最多二十份简历批量上传</p>
</file-upload> </div>
<Button @click='uploadBtn' style='width:20%;margin-left:40%;' type='primary'>上传</Button>
<p> <!-- 上传文件 -->
<span class="format">单个文件不能大于2MB,支持html,word,txt,pdf等格式,暂时不支持压缩格式</span><br> <Modal v-model='uploadModal' :closable='false'>
<span class="number">支持最多二十份简历批量上传</span> <div>
</p> <h4 style="font-size:20px;text-align:center;margin-bottom:20px">上传文件</h4>
<Button class="clickUpload" type="primary" @click.prevent="$refs.upload.active = true" >开始上传</Button> <div v-for='(item,index) in dataList' class='process' :key='index'>
<p style='padding-top:5px;'>{{item.name}}</p>
<span class='title' style="float:right">{{item.title}}</span>
<Progress :percent="item.percentage" hide-info :status='item.status'></Progress>
</div>
</div>
<div slot='footer' >
<Button @click='closeModal' v-show="activeT==true">完成</Button>
</div>
</Modal>
<!-- 单个文件不得大于2M -->
<Modal v-model='modal1' width="320" :closable='false'>
<div>
<h4 style="font-size:20px;text-align:center;margin-bottom:20px">提示</h4>
<div>
<h5 style="font-size:20px;text-align:center;margin-bottom:20px">单份文档不得大于2M</h5>
</div>
</div>
<div slot='footer'>
<Button @click='modal1=false'>确定</Button>
</div>
</Modal>
<!-- 未选择文件上传 -->
<Modal v-model='modal2' width="320" :closable='false'>
<div>
<h4 style="font-size:20px;text-align:center;margin-bottom:20px">提示</h4>
<div>
<h5 style="font-size:20px;text-align:center;margin-bottom:20px">请选择文件在上传</h5>
</div> </div>
</div>
<div slot='footer'>
<Button @click='modal2=false'>确定</Button>
</div>
</Modal>
<!-- 批量上传文件大于20个 -->
<Modal v-model='modal3' width="320" :closable='false'>
<div>
<h4 style="font-size:20px;text-align:center;margin-bottom:20px">提示</h4>
<div>
<h5 style="font-size:20px;text-align:center;margin-bottom:20px">批量上传文件请不要大于20个</h5>
</div>
</div>
<div slot='footer'>
<Button @click='modal3=false'>确定</Button>
</div>
</Modal>
</div>
<div class="leftcontrentFotter"> <div class="leftcontrentFotter">
<h5 style="width:100%;height:40px;background:rgb(0,176,160);text-align:center;line-height:40px;color:white">上传记录</h5> <h5 style="width:100%;height:40px;background:rgb(0,176,160);text-align:center;line-height:40px;color:white">上传记录</h5>
<div style="width:100%;background:rgb(0,176,160); opacity: 0.7"> <div style="width:100%;background:rgb(0,176,160); opacity: 0.7;height:462px;overflow-y:auto;">
<span>{{Filename}}</span> <div style="width:100%;height:10px;background:rgb(0,176,160)"></div>
<div class="contentMASSAGE" v-for="(item,index) in ajaxData" :key="index">
<p @click="getResumeData(item.resumeId)" style="margin-top:5px">
<span style="color:#000000;margin:5px 0 0 10px;display:inline-block;overflow:hidden;text-overflow:ellipsis;white-space: nowrap;">{{item.name}} |</span>
<span style="color:#000000;display:inline-block;overflow:hidden;text-overflow:ellipsis;white-space: nowrap;">{{item.mobile}} |</span>
<span style="color:#000000;display:inline-block;overflow:hidden;text-overflow:ellipsis;white-space: nowrap;">{{item.age}}岁|</span>
<span style="color:#000000;display:inline-block;overflow:hidden;text-overflow:ellipsis;white-space: nowrap;">{{item.gender}} |</span>
<span style="color:#000000;display:inline-block;overflow:hidden;text-overflow:ellipsis;white-space: nowrap;">{{item.workYears}}年 |</span>
<span style="color:#000000;display:inline-block;overflow:hidden;text-overflow:ellipsis;white-space: nowrap;">{{item.degree}} |</span>
<span style="color:#000000;width:28%;display:inline-block;overflow:hidden;text-overflow:ellipsis;white-space: nowrap;">{{item.expectedTitle}}</span>
</p>
<p style="margin-top:0px">
<span style="color:#000000;margin:5px 0 0 10px;display:inline-block">{{item.createTime}}入库|</span>
<span>{{item.creator}}</span>
</p>
<Button type="primary" size="small" style="margin:-60px 0 0 85%" @click="delateONE(item.resumeId)">删除</Button>
</div>
</div> </div>
</div> </div>
</div> </div>
<div class="upload-right"> <div class="upload-right">
<p style="height:40px;width:100%;line-height:40px;background:#F2F2F2"><span style="margin-left:30px;color:#2d8cf0;font-size:16px">预览</span></p> <p style="height:40px;width:100%;line-height:40px;background:#F2F2F2">
<div class="detailUload"> <span style="margin-left:30px;color:#2d8cf0;font-size:16px">预览</span>
<p style="width:60px;height:30px;line-height:30px;text-align:center;margin-left:1020px;margin-top:10px;background:#2d8cf0; border-radius: 5px;"><span style="color:white">下载</span></p> <span v-show="downloadId!==''" style="margin-right:5%;float:right;width:60px;height:25px;line-height:25px;text-align:center;display:inline-block;font-size:15px;background:#0092FF;color:#FFFFFF;margin-top:7px;border-radius:5px" @click="downloadONE(downloadId)">下载</span>
</div> </p>
<div >
</div> <div class="personalInformation" style="margin-top:10px" v-show="JSON.stringify(resume)!=='{}'">
<!-- 上传记录弹出框 --> <p style="width:90%;height:30px;line-height:30px;background:rgba(0,146,255,1);margin-left:5%">
<Modal <img src="../../assets/bastmassage.png" alt="" style="width:25px;height:25px;display:inline-block;vertical-align:middle;margin-top:-7px">
v-model="modal3" <span style="font-size:15px;margin:5px 0 0 5px;color:#FFFFFF; ">基本信息</span>
@on-ok="ok" </p>
:closable="false" <div style="width:40%;height:200px;float:left;margin-left:10%">
width='830px' <span class="userD">姓名:{{resume.ownerName}}</span><br>
@on-cancel="cancel"> <span class="userD">联系电话:{{resume.ownerMobile}}</span><br>
<Progress :percent="100" status="active"> <span class="userD">电子邮箱:{{resume.email}}</span><br>
<span></span> <span class="userD">所在地:{{resume.locationCity}}</span><br>
<Icon type="checkmark-circled"></Icon> </div>
<span>{{Filename}}成功</span> <div style="float:left;height:200px;width:40%;">
</Progress> <span class="ageD">年龄:{{resume.ownerAge}}</span><br>
<div slot='footer' style="text-align:center"> <span class="ageD">职位:{{resume.ownerExpectTitles}}</span><br>
<Button type='primary' @click='modal3=false'>取消</Button> <span class="ageD">学历:{{resume.ownerHighestDegree}}</span><br>
<Button type='primary' >确定</Button> <span class="ageD">经验:{{resume.workYearsOriginal}}</span><br>
</div>
</div>
<div style="float:left;width:100%" v-show="JSON.stringify(resume)!=='{}'">
<p style="width:90%;height:30px;line-height:30px;background:rgba(0,146,255,1);margin-left:5%;float:left">
<img src="../../assets/qiuzhi.png" alt="" style="width:25px;height:25px;display:inline-block;vertical-align:middle;margin-top:-7px">
<span style="font-size:15px;margin:5px 0 0 5px;color:#FFFFFF; ">求职状态:{{resume.statusMessage}}</span>
</p>
<div style="width:40%;float:left;margin-left:10%;height:100px">
<span class="qiwangzhiye">期望行业:{{resume.industries}}</span><br>
<span class="qiwangzhiye">期望职位:{{resume.expectTitles}}</span>
</div>
<div style="width:40%;float:left;height:100px">
<span class="noneyD">期望薪资:{{resume.expectSalary}}</span><br>
<span class="noneyD">期望地点:{{resume.city}}</span>
</div>
</div>
<div class="workExperience" style="float:left;width:100%" v-show="roList.length !==0 ">
<p style="width:90%;height:30px;line-height:30px;background:rgba(0,146,255,1);margin-left:5%;float:left">
<img src="../../assets/gongzuo.png" alt="" style="width:25px;height:25px;display:inline-block;vertical-align:middle;margin-top:-7px">
<span style="font-size:15px;margin:5px 0 0 5px;color:#FFFFFF">工作经历</span>
</p>
<div style="width:82%;float:left;margin-left:8%" v-for="(item,index) in roList" :key="index" >
<p style="width:100%;height:60px;margin-top:20px">
<span style="margin-left:10px;font-size:15px">{{item.startTime}}-{{item.endTime}}</span>
<span style="margin-left:20px;font-size:15px">{{item.company}}({{item.workTime}})</span>
<span style="float:right;margin-right:20px;font-size:15px;color:#333333">{{item.industry}}{{item.companyType}}</span><br>
<span style="float:right;margin-right:20px;font-size:15px;color:#333333">{{item.department}}</span>
</p>
<p style="width:93%;margin-left:30px;margin-top:20px;font-size:13px;line-height:30px;">{{item.desc}}</p>
<!-- <hr style="width:93%;margin-left:30px;margin-top:10px"> -->
</div>
</div>
<div class="projectExperience" style="float:left;width:100%;margin-top:20px" v-show="rpList.length !==0 ">
<p style="width:90%;height:30px;line-height:30px;background:rgba(0,146,255,1);float:left;margin-left:5%">
<img src="../../assets/xiangmujili.png" alt="" style="width:20px;height:20px;display:inline-block;vertical-align:middle;margin-top:-7px;margin-left:5px;">
<span style="font-size:15px;margin:5px 0 0 5px;color:#FFFFFF">项目经历</span>
</p>
<div style="width:82%;float:left;margin-left:8%;" v-for="(item,index) in rpList" :key="index">
<p style="width:100%;height:40px;line-height:40px;margin-top:20px">
<span style="font-size:15px">{{item.startYear}}/{{item.startMonth}}-{{item.endYear}}/{{item.endMonth}}</span>
<span style="margin-left:20px;font-size:15px">{{item.name}}</span>
<span style="float:right;margin-right:15px;font-size:15px">{{item.post}}</span>
<p style="width:93%;margin-left:30px">{{item.desc}}</p>
</p>
<!-- <hr style="width:93%;margin-left:30px;margin-top:10px"> -->
</div>
</div>
<div class="internshipExperience" style="float:left;width:100%;margin-top:20px" v-show="riList.length !==0 ">
<p style="width:90%;height:30px;line-height:30px;background:rgba(0,146,255,1);float:left;margin-left:5%">
<img src="../../assets/shixi.png" alt="" style="width:20px;height:20px;display:inline-block;vertical-align:middle;margin-top:-7px;margin-left:5px;">
<span style="font-size:15px;margin:5px 0 0 5px;color:#FFFFFF">实习经历</span>
</p>
<div style="width:82%;float:left;margin-left:8%;" v-for="(item,index) in riList" :key="index">
<p style="width:100%;height:40px;line-height:40px;margin-top:20px;">
<span>{{item.startYear}}/{{item.startMonth}}-{{item.endYear}}/{{item.endMonth}}</span>
<span style="margin-left:20px">{{item.company}}</span>
<span style="float:right;margin-right:15px;">{{item.industry}}</span>
<span style="float:right;margin-right:15px;">{{item.title}}</span>
<p style="width:93%;margin-left:30px">{{item.desc}}</p>
</p>
<!-- <hr style="width:93%;margin-left:30px;margin-top:10px"> -->
</div>
</div>
<div class="educationalExperience" style="float:left;width:100%;margin-top:20px" v-show="reList.length !==0">
<p style="width:90%;height:30px;line-height:30px;background:rgba(0,146,255,1);float:left;margin-left:5%">
<img src="../../assets/jiaoyu.png" alt="" style="width:20px;height:20px;display:inline-block;vertical-align:middle;margin-top:-7px;margin-left:5px;">
<span style="font-size:15px;margin:5px 0 0 5px;color:#FFFFFF">教育经历</span>
</p>
<div v-for="(item,index) in reList" :key="index">
<p style="margin-top:30px;width:80%;margin-left:7%">
<span style="margin-left:12px;font-size:15px;display:inline-block;margin-top:10px;height:30px;line-height:30px">{{item.school}}(({{item.startYear}}.{{item.startMonth}}-{{item.endYear}}.{{item.endMonth}}))</span><br>
<span style="margin-left:12px;font-size:15px;display:inline-block;height:30px;wmargin-top:10px;line-height:30px">专业:{{item.major}}</span>
<span style="margin-left:360px;font-size:15px;display:inline-block;height:30px;margin-top:10px;line-height:30px">学历:{{item.degree}}</span>
</p>
</div>
</div>
<div class="Self-evaluation" style="float:left;width:100%;margin-top:20px;" v-show="JSON.stringify(resume)!=='{}'" >
<p style="width:90%;height:30px;line-height:30px;background:rgba(0,146,255,1);float:left;margin-left:5%">
<img src="../../assets/ziwopingjia.png" alt="" style="width:20px;height:20px;display:inline-block;vertical-align:middle;margin-top:-7px;margin-left:5px;">
<span style="font-size:15px;margin:5px 0 0 5px;color:#FFFFFF">自我评价</span>
</p>
<div style="margin-top:20px">
<p style="margin-top:30px;margin-left:90px;font-size:15px;width:80%;line-height:40px;">
{{resume.selfEvaluate}}
</p>
</div>
</div>
</div>
</div> </div>
</Modal>
</div> </div>
</template> </template>
<script> <script>
import Vue from 'vue'; import {getuploadNumber,uploadfile,serchList,serchRESUMEdetail,deleteREsumeUPLOad} from '../../api/upload.server'
const VueUploadComponent = require('vue-upload-component') import ajax from '../../service/ajax'
Vue.component('file-upload', VueUploadComponent)
export default { export default {
data () { data () {
return { return {
file: null, uploadList: [],
loadingStatus: false, dataList: [],
fileName: '',
ajaxData:[],
delateARRALL:[],
downloadId:'',
pageIndex:1,
pageSize:30,
searchInfo:{
pageSize:30,
pageIndex:1,
},
totalSize:null,
uploadModal: false,
accept: '.html,.doc,.docx,.txt,.pdf',
fileSize:2048,
progressStatus: {
'0': 'nomal',
'2': 'wrong',
'1': 'active'
},
files: null,
activeT:false,
massage:'',
Massage:'',
action: '/text/api/resume/upload',
batchNum: '',
modal3:false, modal3:false,
modal1:false,
modal2:false,
Filename:'', Filename:'',
files: [] uploadNUmber:'',
// uploadList:[],
a:[],
files:null,
b:'',
uploadFile: [],
resume:{},//简历基本详情
riList:[],//实习经历列表
roList:[],//工作经历列表
rpList:[],//项目经历列表
reList:[],//教育经历列表
serchID:''
} }
}, },
methods: { methods: {
handleUpload (file) { handleChange (e) {
this.file = file; this.fileName = ''
this.Filename=file.name; this.dataList = []
return false; const files = e.target.files;
this.files = e.target.files
for (let key in files){
if (key!='length' && key!='item'){
let file = files[key]
let temp = {
name: file.name,
data: file,
percentage: 0,
type: file.type,
size: file.size,
title:null,
status: "normal"
}
this.dataList.push(temp)
this.fileName += files[key].name + ';'
}
}
if (!files) {
return;
}
this.$refs.input.value = null;
}, },
ok () { uploadBtn() {
this.$Message.info('Clicked ok'); if (this.dataList.length < 1) {
this.modal2=true
return
}
if (this.dataList.length > 20){
this.modal3=true
this.$refs.input.value = ''
this.fileName = ''
this.dataList = []
return
}
if (this.handleMaxSize()) {
this.modal1=true
this.$refs.input.value = ''
this.fileName = ''
this.dataList = []
return
}
this.uploadModal = true
ajax({
headers: this.headers,
data: this.dataList,
batchNum: this.batchNum,
action: this.action,
batchNum: this.batchNum,
appendName: 'batchNum',
appendFile: 'recFile',
onProgress: e => {
this.handleProgress(e);
},
onSuccess: res => {
this.handleSuccess(res, this.files);
this.activeT=true
},
onError: (err, response) => {
this.handleError(err, response, this.files);
}
})
}, },
cancel () { handleProgress(e) {
this.$Message.info('Clicked cancel'); this.dataList.map(item => {
item.percentage = e.percent
})
}, },
upload () { handleSuccess (res, files) {
this.loadingStatus = true; let data = res.body
this.modal3=true for(let key in data){
setTimeout(() => { let code = data[key].code
this.file = null; this.Massage=data[key].message
this.loadingStatus = false; this.dataList.map(item => {
this.$Message.success('Success') if (key == item.name) {
}, 1500); item.title = this.Massage
item.status = this.progressStatus[code]
}
})
}
}, },
inputFile: function (newFile, oldFile) { handleError (err, res, files) {
if (newFile && oldFile && !newFile.active && oldFile.active) {
// 获得相应数据 },
console.log('response', newFile.response) handleMaxSize () {
if (newFile.xhr) { let isLimit = false
// 获得响应状态码 this.dataList.map(item => {
console.log('status', newFile.xhr.status) if (item.size/1024 > this.fileSize) {
} isLimit = true
} return
}, }
/** })
* Pretreatment return isLimit
* @param Object|undefined newFile 读写 },
* @param Object|undefined oldFile 只读 selFiles () {
* @param Function prevent 阻止回调 this.$refs.input.click()
* @return undefined },
*/ closeModal(){
inputFilter: function (newFile, oldFile, prevent) { this.uploadModal = false
if (newFile && !oldFile) { this.$refs.input.value = ''
// 过滤不是图片后缀的文件 this.dataList = []
if (!/\.(jpeg|jpe|jpg|gif|png|webp)$/i.test(newFile.name)) { this.fileName = ''
return prevent() this.serchlist()
} },
} //下载单条简历
downloadONE(downID){
// 创建 blob 字段 用于图片预览 window.location.href=`/text/api/resume/download/formatted/one?resumeId=${downID}`
newFile.blob = '' },
let URL = window.URL || window.webkitURL // 获取上传批次号
if (URL && URL.createObjectURL) { getnumber(){
newFile.blob = URL.createObjectURL(newFile.file) getuploadNumber().then(res=>{
} this.batchNum=res.data.body
})
},
//改变页码
pageChange(page){
this.SearchList(page)
},
pageSizeChange(page){
this.searchInfo.pageSize=page
this.pageSize=page
this.SearchList()
},
// 查询记录列表
serchlist(page){
page = typeof(page)=='number'?page:1
this.searchInfo.pageIndex = page
this.pageIndex = page
let parmars={
pageSize:this.searchInfo.pageSize,
pageIndex:this.searchInfo.pageIndex,
parameter:this.batchNum
}
serchList(parmars).then(res=>{
if(res.data.success==true){
this.totalSize=res.data.body.totalNumber
this.ajaxData=res.data.body.items.map((item,index)=>{
item.resumeId=item.resumeId
item.name=item.name
item.mobile=item.mobile
item.age=item.age
item.gender=item.gender
item.workYears=item.workYears
item.degree=item.degree
item.expectedTitle=item.expectedTitle
item.status=item.status
item.creator=item.creator==''?item.creator:item.creator.split('_')[0]
item.createTime=item.createTime
return item
})
}
})
},
// 获取简历详情页数据
getResumeData(sid){
this.downloadId=sid
let parmars={
resumeId:sid
}
serchRESUMEdetail(parmars).then(res=>{
this.resume=res.data.body.resume
this.riList=res.data.body.riList
this.roList=res.data.body.roList
this.reList=res.data.body.reList
this.rpList=res.data.body.rpList
})
},
// 删除单条简历
delateONE(idS){
this.delateARRALL.push(idS)
deleteREsumeUPLOad(this.delateARRALL).then(res=>{
if(res.data.success==true){
this.resume={}
this.riList=[]
this.roList=[]
this.rpList=[]
this.reList=[]
this.downloadId=''
this.serchlist()
}
})
}, },
components: { },
FileUpload: VueUploadComponent mounted(){
} this.getnumber()
this. serchlist()
} }
} }
</script> </script>
<style> <style lang='less'>
.upload{ .upload{
min-height: 1200px;
width: 100%; width: 100%;
background: #F2F2F2 background: #F2F2F2
} }
.upload-left{ .upload-left{
width: 500px; width: 32%;
min-height: 1200px;
border: 1px solid black;
float: left; float: left;
} }
.upload-right{ .upload-right{
min-height: 1200px; width: 67%;
width: 1100px;
border: 1px solid #999999;
float: left; float: left;
overflow-y: auto;
overflow-x: hidden;
height:802px;
border: 1px solid black
} }
.UleftcontentTop{ .UleftcontentTop{
height: 300px; height: 300px;
...@@ -161,7 +478,6 @@ Vue.component('file-upload', VueUploadComponent) ...@@ -161,7 +478,6 @@ Vue.component('file-upload', VueUploadComponent)
} }
.detailUload{ .detailUload{
min-height: 1200px;
width: 100%; width: 100%;
border: 1px solid black; border: 1px solid black;
margin-top: 3px; margin-top: 3px;
...@@ -169,8 +485,17 @@ Vue.component('file-upload', VueUploadComponent) ...@@ -169,8 +485,17 @@ Vue.component('file-upload', VueUploadComponent)
} }
.leftcontrentFotter{ .leftcontrentFotter{
min-height: 00px; min-height: 00px;
display: block display: block;
}
.contentMASSAGE{
width:90%;
height:50px;
margin-top: 3%;
margin-left: 5%;
background: white;
border-radius: 5px
} }
.detailTW{ .detailTW{
height: 30px; height: 30px;
...@@ -202,4 +527,58 @@ Vue.component('file-upload', VueUploadComponent) ...@@ -202,4 +527,58 @@ Vue.component('file-upload', VueUploadComponent)
top: 120px; top: 120px;
left: 190px left: 190px
} }
.leftcontrentFotter-content{
width:95%;
height: 40px;
background: white;
margin-left: 12px;
color: black
}
.upload-pageBottom{
width: 26.2%;
text-align: center;
height:40px;
position: fixed;
bottom:0px;
background:rgba(0,176,160,0.7)
}
.uploadC{
.upload{
.nativeInput{
display:none
}
}
.contentTips{
margin:20px 10px 30px 10px;
.p{
margin:10px;
}
}
.title{
float:right
}
.process{
margin-top:10px;
}
}
.userD{
margin-top:20px;
display: inline-block;
font-size:14px
}
.ageD{
margin-top:20px;
display: inline-block;
font-size:14px
}
.qiwangzhiye{
margin-top:20px;
display: inline-block;
font-size:14px
}
.noneyD{
margin-top:20px;
display: inline-block;
font-size:14px
}
</style> </style>
...@@ -4,20 +4,23 @@ import Router from 'vue-router'; ...@@ -4,20 +4,23 @@ import Router from 'vue-router';
const home = r => require.ensure([], () => r(require('@/components/home.vue')), 'home'); const home = r => require.ensure([], () => r(require('@/components/home.vue')), 'home');
// const changepsd = r => require.ensure([], () => r(require('@/components/changepsd.vue')), 'changepsd'); // const changepsd = r => require.ensure([], () => r(require('@/components/changepsd.vue')), 'changepsd');
const login = r => require.ensure([], () => r(require('@/page/login/login.vue')), 'login'); const login = r => require.ensure([], () => r(require('@/page/login/login.vue')), 'login');
const text = r => require.ensure([], () => r(require('@/page/login/text.vue')), 'text');
const resumeDetail = r =>require.ensure([], () => r(require('@/page/resume/resumeDetail.vue')),'resumeDetail')
const interview = r => require.ensure([], () => r(require('@/page/interview/interview.vue')), 'interview'); const interview = r => require.ensure([], () => r(require('@/page/interview/interview.vue')), 'interview');
const allResume = r => require.ensure([], () => r(require('@/page/resume/allResume.vue')), 'allResume'); const allResume = r => require.ensure([], () => r(require('@/page/resume/allResume.vue')), 'allResume');
const channel = r => require.ensure([], () => r(require('@/page/resume/channel.vue')), 'channel');
const account = r => require.ensure([], () => r(require('@/page/system/account.vue')), 'account'); const account = r => require.ensure([], () => r(require('@/page/system/account.vue')), 'account');
const emailMange = r => require.ensure([], () => r(require('@/page/system/emailMange.vue')), 'emailMange'); const emailMange = r => require.ensure([], () => r(require('@/page/system/emailMange.vue')), 'emailMange');
const QRcode = r => require.ensure([], () => r(require('@/page/system/QRcode.vue')), 'QRcode'); const QRcode = r => require.ensure([], () => r(require('@/page/system/QRcode.vue')), 'QRcode');
const upload = r => require.ensure([], () => r(require('@/page/upload/upload.vue')), 'upload'); const upload = r => require.ensure([], () => r(require('@/page/upload/upload.vue')), 'upload');
const sweepCode = r => require.ensure([], () => r(require('@/page/sweepCode/sweepCode.vue')), 'sweepCode');
Vue.use(Router); Vue.use(Router);
export default new Router({ export default new Router({
// mode: 'history', mode: 'history',
routes: [ routes: [
{ {
path: '/', path: '/',
...@@ -25,13 +28,22 @@ export default new Router({ ...@@ -25,13 +28,22 @@ export default new Router({
}, { }, {
path: '/login', path: '/login',
name: 'login', name: 'login',
component: login, component: login,},
{
path:'/text',
name:'text',
component:text
},
{
path: '/resumeDetail',
name: 'resumeDetail',
component: resumeDetail
},
{
path: '/sweepCode',
name: 'sweepCode',
component: sweepCode
}, },
// {
// path: '/changepsd',
// name: 'changepsd',
// component: changepsd
// },
{ {
path: '/home', path: '/home',
name: 'home', name: 'home',
...@@ -47,6 +59,11 @@ export default new Router({ ...@@ -47,6 +59,11 @@ export default new Router({
name: 'allResume', name: 'allResume',
component: allResume component: allResume
}, },
{
path: '/channel/:channelname',
name: 'channel',
component: channel
},
{ {
path: '/account', path: '/account',
name: 'account', name: 'account',
...@@ -66,6 +83,10 @@ export default new Router({ ...@@ -66,6 +83,10 @@ export default new Router({
path: '/upload', path: '/upload',
name: 'upload', name: 'upload',
component: upload component: upload
},{
path: '/resumeDetail',
name: 'resumeDetail',
component: resumeDetail
}, },
] ]
}, },
......
// https://github.com/ElemeFE/element/blob/dev/packages/upload/src/ajax.js
function getError(action, option, xhr) {
const msg = `fail to post ${action} ${xhr.status}'`;
const err = new Error(msg);
err.status = xhr.status;
err.method = 'post';
err.url = action;
return err;
}
function getBody(xhr) {
const text = xhr.responseText || xhr.response;
if (!text) {
return text;
}
try {
return JSON.parse(text);
} catch (e) {
return text;
}
}
export default function upload(option) {
if (typeof XMLHttpRequest === 'undefined') {
return;
}
const xhr = new XMLHttpRequest();
const action = option.action;
if (xhr.upload) {
xhr.upload.onprogress = function progress(e) {
if (e.total > 0) {
e.percent = e.loaded / e.total * 100;
}
option.onProgress(e);
};
}
const formData = new FormData();
if (option.data) {
option.data.map(item => {
formData.append(option.appendFile, item.data);
})
}
formData.append(option.appendName, option.batchNum);
xhr.onerror = function error(e) {
option.onError(e);
};
xhr.onload = function onload() {
if (xhr.status < 200 || xhr.status >= 300) {
return option.onError(getError(action, option, xhr), getBody(xhr));
}
option.onSuccess(getBody(xhr));
};
xhr.open('post', action, true);
if (option.withCredentials && 'withCredentials' in xhr) {
xhr.withCredentials = true;
}
const headers = option.headers || {};
// if (headers['X-Requested-With'] !== null) {
// xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
// }
for (let item in headers) {
if (headers.hasOwnProperty(item) && headers[item] !== null) {
xhr.setRequestHeader(item, headers[item]);
}
}
xhr.send(formData);
}
import Cookie from 'js-cookie'
export default{
set: function (name, value) {Cookie.set(name, value)},
get: function (name) {
return Cookie.get(name)
},
remove: function (name) {Cookie.remove(name)}
}
\ No newline at end of file
import axios from 'axios' import axios from 'axios'
// import Promise from './promise.service.js' import Promise from './promise.service.js'
// import {Notice} from 'iview' import {Notice} from 'iview'
// import Vue from 'vue' import Vue from 'vue'
// var instance = axios.create({}); var instance = axios.create({});
// instance.defaults.timeout = 2500; instance.defaults.timeout = 2500;
// //instance.defaults.headers.common['Authorization'] = AUTH_TOKEN; // instance.defaults.headers.common['Authorization'] = AUTH_TOKEN;
// 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'
// instance.defaults.headers['X-auth-Token'] = 'XMLHttpRequest' instance.defaults.headers['X-auth-Token'] = 'XMLHttpRequest'
// 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'
// } }
// return config; return config;
// }, function (error) { }, function (error) {
// // 对请求错误做些什么 // 对请求错误做些什么
// return Promise.reject(error); return Promise.reject(error);
// }); });
// instance.interceptors.response.use(function (response) { instance.interceptors.response.use(function (response) {
// // 在发送请求之前做些什么 // 在发送请求之前做些什么
// if(response.status >= 200 && response.status < 300){ if(response.status >= 200 && response.status < 300){
// if(response.data.success){ if (response.data.body.code == '900'){
// return Promise.resolve(response.data.body) window.location.href = `${window.location.origin}/login`
// } else { }
// if (response.data.body.message){ if(response.data.success){
// Notice.error({desc:`${response.data.body.message}`}) return Promise.resolve(response)
// } }
// return Promise.reject(response.data);
// } else {
// } else { if (response.data.body.message){
// return Promise.reject(response.data); Notice.error({desc:`${response.data.body.message}`})
// } }
// if (resopnse.status == 403 || resopnse.status == 401){ return Promise.resolve(response);
// if (response.data.body.message){ }
// Notice.error({desc:`${response.data.body.messag}`}) } else {
// } return Promise.resolve(response);
// window.location.replace = `${window.location.origin}/login` }
// } return response;
// return response; }, error => {
// }, error => { Notice.error({desc:`${error.response.data.body.message}`})
// console.log(error) });
// }); export default instance
// export default instance // export default axios
export default axios
import Cookie from './cookie.service.js'
export default{
init: function (router) {
router.beforeEach((to, form, next) => {
let token = Cookie.get('quantgroup_token')
if (!token&&to.name!=='login'&&to.name!=='text') {
console.log(32322)
console.log(to.name!=='text',to.name!=='login',!token,token)
window.location.href = `${window.location.origin}/login`
return
}
next()
})
}
}
\ No newline at end of file
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