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>
<div id="app">
<div id="app" :class="appClass">
<router-view/>
</div>
</template>
......@@ -7,17 +7,26 @@
<script>
export default {
name: 'App',
data() {
return {
appClass: 'pc',
}
},
created: function () {
if (document.documentElement.clientWidth <= 640) {
this.appClass = 'mobile'
}
}
};
</script>
<style>
#app {
#app{
position: absolute;
top: 0;
bottom: 0;
width: 100%;
min-width: 1341px;
min-height: 741px;
cursor:pointer;
text-align: left;
font-family: 'PingFangSC-Regular', 'Avenir', Helvetica, Arial, sans-serif;
-webkit-font-smoothing: antialiased;
......@@ -29,4 +38,13 @@ export default {
-ms-user-select: text !important; /*IE10*/
user-select: text !important;
}
.pc {
min-width: 1341px;
min-height: 741px;
}
.mobile {
min-width: unset;
min-height: unset;
}
</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) {
}})
}
// 重启面试
export function oppenInterview() {
return axios.post(`/text/api/resumeFlow/reset/14/TO_SEE`,{headers: {
export function oppenInterview(tid,tstatus) {
console.log(tid,tstatus)
return axios.post(`/text/api/resumeFlow/reset/${tid}/${tstatus}`,{headers: {
'Content-Type':'application/json;',
}})
}
// 终止面试
export function SInterview(parmars) {
return axios.post(`/text/api/resumeFlow/end/14`,parmars,{headers: {
export function SInterview(tid) {
return axios.post(`/text/api/resumeFlow/end/${tid}`,{headers: {
'Content-Type':'application/json;',
}})
}
......@@ -25,6 +26,13 @@ export function SInterview(parmars) {
export function SerchList(parmars) {
return axios.post(`/text/api/interview/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'
}})
}
//面试官查询
......@@ -45,3 +53,15 @@ export function NewAddInterview(parmars) {
'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'
export function login(params) {
// params=qs.stringify(params)
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'
}})
}
\ No newline at end of file
......@@ -16,3 +16,82 @@ export function downloadone (parmars) {
'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){
}})
}
//批量删除
export function delateAllAccount(params){
return axios.post(`/text//api/user/delete`,params,{headers: {
export function delateAllAccount(DelateARR){
return axios.post(`/text//api/user/delete`,JSON.stringify(DelateARR),{headers: {
'Content-Type':'application/json',
}})
}
......@@ -36,26 +36,40 @@ export function recoveryPassword(parmars){
}
//查询邮箱列表
export function queryemailList(parmars){
console.log(parmars)
return axios.post(`/text/api/email/list`,parmars,{headers: {
'Content-Type':'application/json',
}})
}
// 同步邮箱
export function Synchronization(parmars){
parmars=qs.stringify(parmars)
console.log(parmars)
return axios.post(`/text/api/email/bind`,parmars,{headers: {
'Content-Type':'application/x-www-form-urlencoded',
return axios.post(`/text/api/email/bindAndSync`,parmars,{headers: {
'Content-Type':'application/json',
'X-Requested-With':'XMLHttpRequest'
}})
}
// 解绑邮箱
export function jiebangEmail(parmars){
parmars=qs.stringify(parmars)
console.log(parmars)
return axios.post(`/text/api/email/unbind`,parmars,{headers: {
export function jiebangEmail(id){
return axios.post(`/text/api/email/unbind/${id}`,{headers: {
'Content-Type':'application/x-www-form-urlencoded',
'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>
<Row id="home" class="home">
<Col span="3" class="aside">
<img src="https://org.modao.cc/uploads4/images/3427/34274354/v2_prfn6r.png" alt="">
<Col span="3" class="aside" style="width:15%;height:100%">
<img src="../assets/homelogo.png" alt="" style="height:60px">
<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">
<template slot="title">
<Icon type="ios-paper" />
<Icon type="ios-paper"/>
{{menu.item}}
</template>
<MenuItem v-for="child in menu.child" :key="child.name" :name="child.name" @click="go">{{child.item}}</MenuItem>
</Submenu>
</Menu>
</Col>
<Col span="21" class="content">
<Col span="21" class="content" style="width:85%">
<Row class="header">
<Col span="20">
<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}}
</MenuItem>
</Menu>
</Col>
<Col span="2" class="account">
13718672532
{{massage}}
</Col>
<Col span="2" class="sign-out">
<a @click="loginOut" >退出</a>
......@@ -35,43 +35,118 @@
</Row>
</template>
<script>
import {getpersonMassage,loginOUT,adoptOneSeeResumeList,getChannelMassage} from '../api/home.server.js'
export default{
data() {
return {
massage:'',
arr:[],
biaoshi:'',
channelARR:[],
isadmin:'',
pageindex:0,
pageSize:10,
condition:'',
xiabiao:'',
itemSelect:'',
name: '1',
hName: '1',
vName: ['1'],
vSubName: '1-1',
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: '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: '2', item: '邮箱管理', child: [{ name: '1-2', item:'邮箱管理', route: '/emailMange' }] },
{ name: '3', item: '二维码管理', child: [{ name: '1-3', item:'账户管理', route: '/QRcode' }] }
{ name: '2', item: '邮箱管理', child: [{ name: '2-1', item:'邮箱管理', route: '/emailMange' }] },
{ 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: {
go(name) {
let vName = name.split('-')[1]
let vName = name.split('-')[0]
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)
},
loginOut() {
this.$router.push('/login')
},
selectMenu(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' }] }]
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)
},
// 获取个人信息
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>
......@@ -79,9 +154,10 @@
.home{
height: 100%;
.aside{
min-height: 1100px;
// min-height: 2050px;
border-right: 1px solid #dcdee2;
box-shadow: #dcdee2 0 0 6px 1px;
// width:15%;
img{
height: 49px;
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';
import 'iview/dist/styles/iview.css';
import App from './App';
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.config.productionTip = false;
initRouter.init(router)
/* eslint-disable no-new */
new Vue({
el: '#app',
......
This diff is collapsed.
......@@ -23,8 +23,9 @@
</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="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 class="copy">
<p>量化派为你提供全程服务</p>
<p>量化派版权所有</p>
......@@ -40,6 +41,8 @@ import { login} from '../../api/login.server.js'
export default {
data () {
return {
channelarr:[],
ISIDMIN:'',
formInline: {
user: '',
password: ''
......@@ -70,17 +73,17 @@ export default {
userCode:this.formInline.user,
password:this.formInline.password
}
// if(this.formInline.password=='123456'){
// this.$router.push({name:'updatePsd'})
// return
// }
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){
this.ISIDMIN=res.data.body
this.$router.push({name:"allResume"})
localStorage.setItem('isADMIN',JSON.stringify(this.ISIDMIN))
}
})
// this.$router.push({name:"allResume"})
}
}
}
......
<template>
<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>
</template>
<script>
export default {
}
import { updatePsd} from '../../api/login.server.js'
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>
<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>
This diff is collapsed.
This diff is collapsed.
<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 @@
<h3 style="color:#2d8cf0;font-size:18px;margin:14px 0 0 15px">二维码管理</h3>
<h5 style="margin:24px 0 0 15px;display:inline-block">前台扫描二维码</h5>
<div class="Qrcode">
<img src="">
<img :src="url" style="width:100%;height:100%">
</div>
<p class="xiazai">下载</p>
<p class="xiazai" @click="downPic">下载</p>
</div>
</template>
<script>
import {getErcode} from '../../api/stystem.server.js'
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>
<style>
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
......@@ -4,20 +4,23 @@ import Router from 'vue-router';
const home = r => require.ensure([], () => r(require('@/components/home.vue')), 'home');
// const changepsd = r => require.ensure([], () => r(require('@/components/changepsd.vue')), 'changepsd');
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 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 emailMange = r => require.ensure([], () => r(require('@/page/system/emailMange.vue')), 'emailMange');
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 sweepCode = r => require.ensure([], () => r(require('@/page/sweepCode/sweepCode.vue')), 'sweepCode');
Vue.use(Router);
export default new Router({
// mode: 'history',
mode: 'history',
routes: [
{
path: '/',
......@@ -25,13 +28,22 @@ export default new Router({
}, {
path: '/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',
name: 'home',
......@@ -47,6 +59,11 @@ export default new Router({
name: 'allResume',
component: allResume
},
{
path: '/channel/:channelname',
name: 'channel',
component: channel
},
{
path: '/account',
name: 'account',
......@@ -66,6 +83,10 @@ export default new Router({
path: '/upload',
name: '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
This diff is collapsed.
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