Commit 140cbb56 authored by 郝聪敏's avatar 郝聪敏

添加prettierrc配置文件

parent 16973291
root = true
[*]
charset = utf-8
indent_style = space
indent_size = 2
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true
......@@ -12,3 +12,5 @@ yarn-error.log*
*.ntvs*
*.njsproj
*.sln
.eslintcache
\ No newline at end of file
module.exports = {
"printWidth": 200,
"trailingComma": "es5",
"singleQuote": true,
}
\ No newline at end of file
......@@ -6,27 +6,27 @@
<script>
window.onload = function() {
document.addEventListener("touchstart", function(event) {
document.addEventListener('touchstart', function(event) {
if (event.touches.length > 1) {
event.preventDefault();
}
});
document.addEventListener("gesturestart", function(event) {
document.addEventListener('gesturestart', function(event) {
event.preventDefault();
});
};
export default {
name: "App",
name: 'App',
data() {
return {
appClass: "pc"
appClass: 'pc',
};
},
created: function() {
if (document.documentElement.clientWidth <= 640) {
this.appClass = "mobile";
this.appClass = 'mobile';
}
}
},
};
</script>
......@@ -38,7 +38,7 @@ export default {
width: 100%;
cursor: auto;
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;
-moz-osx-font-smoothing: grayscale;
color: #2c3e50;
......
import axios from "../service/http.service";
import { sapi } from "../config";
import qs from "qs";
import axios from '../service/http.service';
import { sapi } from '../config';
import qs from 'qs';
// 获取个人信息
export function getpersonMassage(params) {
// params=qs.stringify(params)
return axios.get(`${sapi}/api/login/me`, params, {
headers: {
"Content-Type": "application/json"
}
'Content-Type': 'application/json',
},
});
}
// 用户退出
......@@ -15,31 +15,31 @@ export function loginOUT() {
// params=qs.stringify(params)
return axios.get(`${sapi}/api/login/logout`, {
headers: {
"Content-Type": "application/json"
}
'Content-Type': 'application/json',
},
});
}
// 通过某一来源查询简历信息
export function adoptOneSeeResumeList(parmars) {
return axios.post(`${sapi}/api/resume/findListBySource`, parmars, {
headers: {
"Content-Type": "application/json"
}
'Content-Type': 'application/json',
},
});
}
// 通过渠道机简历信息
export function getChannelMassage() {
return axios.get(`${sapi}/api/resume/getSourceList`, {
headers: {
"Content-Type": "application/json"
}
'Content-Type': 'application/json',
},
});
}
// 判断是否为超级管理员
export function judeAdmin() {
return axios.get(`${sapi}/api/user/isAdmin`, {
headers: {
"Content-Type": "application/json"
}
'Content-Type': 'application/json',
},
});
}
import axios from "../service/http.service";
import { sapi } from "../config";
import qs from "qs";
import axios from '../service/http.service';
import { sapi } from '../config';
import qs from 'qs';
// 更改约面信息
export function changeinterviewMassage(parmars) {
return axios.post(`${sapi}/api/resumeInterview/update`, parmars, {
headers: {
"Content-Type": "application/json;"
}
'Content-Type': 'application/json;',
},
});
}
// 重启面试
......@@ -14,34 +14,34 @@ export function oppenInterview(tid, tstatus) {
console.log(tid, tstatus);
return axios.post(`${sapi}/api/resumeFlow/reset/${tid}/${tstatus}`, {
headers: {
"Content-Type": "application/json;"
}
'Content-Type': 'application/json;',
},
});
}
// 终止面试
export function SInterview(tid) {
return axios.post(`${sapi}/api/resumeFlow/end/${tid}`, {
headers: {
"Content-Type": "application/json;"
}
'Content-Type': 'application/json;',
},
});
}
// 面试管理查询
export function SerchList(parmars, status) {
return axios.post(`${sapi}/api/interview/findListByQueryVO`, parmars, {
headers: {
"Content-Type": "application/json;",
"X-Requested-With": "XMLHttpRequest",
status
}
'Content-Type': 'application/json;',
'X-Requested-With': 'XMLHttpRequest',
status,
},
});
}
// 查看简历详情页
export function seedetail(parmars) {
return axios.get(`${sapi}/api/html/get/${parmars.uid}`, {
headers: {
"Content-Type": "application/json"
}
'Content-Type': 'application/json',
},
});
}
// 面试官查询
......@@ -52,39 +52,39 @@ export function Serchinterviewor() {
export function SerchInvitationOwer() {
return axios.post(`${sapi}/api/interview/findInviterList`, {
headers: {
"Content-Type": "application/json;"
}
'Content-Type': 'application/json;',
},
});
}
// 新增约面信息
export function NewAddInterview(parmars) {
return axios.post(`${sapi}/api/resumeInterview/add`, parmars, {
headers: {
"Content-Type": "application/json;"
}
'Content-Type': 'application/json;',
},
});
}
// 查询记录
export function recodeLIST(parmars) {
return axios.post(`${sapi}/api/resumeFlow/history/${parmars.resumeId}`, {
headers: {
"Content-Type": "application/json"
}
'Content-Type': 'application/json',
},
});
}
// 变更状态
export function changestatus(tid, tstatus) {
return axios.post(`${sapi}/api/resumeFlow/uploadStatus/${tid}/${tstatus}`, {
headers: {
"Content-Type": "application/json"
}
'Content-Type': 'application/json',
},
});
}
// 获取终止面试前的前一个状态
export function formstatus(parmars) {
return axios.post(`${sapi}/api/resumeFlow/getPreReset/${parmars.resumeId}`, {
headers: {
"Content-Type": "application/json"
}
'Content-Type': 'application/json',
},
});
}
import axios from "../service/http.service";
import { sapi } from "../config";
import qs from "qs";
import axios from '../service/http.service';
import { sapi } from '../config';
import qs from 'qs';
// 登录
export function login(params) {
// params=qs.stringify(params)
return axios.post(`${sapi}/api/login/doLogin`, params, {
headers: {
"Content-Type": "application/json"
}
'Content-Type': 'application/json',
},
});
}
// 修改密码
......@@ -15,7 +15,7 @@ export function updatePsd(params) {
// params=qs.stringify(params)
return axios.post(`${sapi}/api/login/modifyPassword`, params, {
headers: {
"Content-Type": "application/json"
}
'Content-Type': 'application/json',
},
});
}
import axios from "../service/http.service";
import { sapi } from "../config";
import qs from "qs";
import axios from '../service/http.service';
import { sapi } from '../config';
import qs from 'qs';
// 查询简历列表
export function serchList(parmars) {
return axios.post(`${sapi}/api/resume/findList`, parmars, {
headers: {
"Content-Type": "application/json"
}
'Content-Type': 'application/json',
},
});
}
// 下载简历(单条)
......@@ -14,88 +14,73 @@ export function downloadone(parmars) {
parmars = qs.stringify(parmars);
return axios.post(`${sapi}/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, status) {
return axios.post(`${sapi}/api/resume/findListByQueryVO`, parmars, {
headers: {
"Content-Type": "application/json",
status
}
'Content-Type': 'application/json',
status,
},
});
}
// 查看简历详情页
export function seedetail(parmars) {
return axios.get(`${sapi}/api/html/get/${parmars.uid}`, {
headers: {
"Content-Type": "application/json"
}
'Content-Type': 'application/json',
},
});
}
// 简历pass
export function PASS(parmars) {
return axios.post(
`${sapi}/api/resumeFlow/uploadStatus/${parmars.id}/${parmars.status}`,
"",
{
headers: {
"Content-Type": "application/json"
}
}
);
return axios.post(`${sapi}/api/resumeFlow/uploadStatus/${parmars.id}/${parmars.status}`, '', {
headers: {
'Content-Type': 'application/json',
},
});
}
// 待处理
export function TODORes(parmars) {
return axios.post(
`${sapi}/api/resumeFlow/uploadStatus/${parmars.id}/${parmars.status}`,
"",
{
headers: {
"Content-Type": "application/json"
}
}
);
return axios.post(`${sapi}/api/resumeFlow/uploadStatus/${parmars.id}/${parmars.status}`, '', {
headers: {
'Content-Type': 'application/json',
},
});
}
// 备选
export function OPTION(parmars) {
return axios.post(
`${sapi}/api/resumeFlow/uploadStatus/${parmars.id}/${parmars.status}`,
"",
{
headers: {
"Content-Type": "application/json"
}
}
);
return axios.post(`${sapi}/api/resumeFlow/uploadStatus/${parmars.id}/${parmars.status}`, '', {
headers: {
'Content-Type': 'application/json',
},
});
}
// 删除简历
export function deleteREsume(deleteallArr) {
return axios.post(`${sapi}/api/resume/delete`, JSON.stringify(deleteallArr), {
headers: {
"Content-Type": "application/json"
}
'Content-Type': 'application/json',
},
});
}
// 单条下载简历
export function downloadOne(parmars) {
return axios.get(
`${sapi}/api/resume/download/formatted/one?resumeId=${parmars.resumeId}`,
{
headers: {
// 'Content-Type':'application/x-www-form-urlencoded'
}
}
);
return axios.get(`${sapi}/api/resume/download/formatted/one?resumeId=${parmars.resumeId}`, {
headers: {
// 'Content-Type':'application/x-www-form-urlencoded'
},
});
}
// 批量下载简历
export function downloadALL() {
return axios.get(`${sapi}/api/resumeFile/download/formatted/compress`, {
headers: {
"Content-Type": "application/x-www-form-urlencoded"
}
'Content-Type': 'application/x-www-form-urlencoded',
},
});
}
// 导出列表
......@@ -104,8 +89,8 @@ export function exportLIST(parmars) {
`${sapi}/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"
}
'Content-Type': 'application/json',
},
}
);
}
......@@ -113,69 +98,66 @@ export function exportLIST(parmars) {
export function recodeLIST(parmars) {
return axios.post(`${sapi}/api/resumeFlow/history/${parmars.resumeId}`, {
headers: {
"Content-Type": "application/json"
}
'Content-Type': 'application/json',
},
});
}
// 通过某一来源查询简历信息
export function adoptOneSeeResumeList(parmars) {
return axios.post(`${sapi}/api/resume/findListBySource`, parmars, {
headers: {
"Content-Type": "application/json"
}
'Content-Type': 'application/json',
},
});
}
// 新增约面信息
export function addinterview(parmars) {
return axios.post(`${sapi}/api/resumeInterview/add`, parmars, {
headers: {
"Content-Type": "application/json"
}
'Content-Type': 'application/json',
},
});
}
// 修改流程状态
export function updatastatus(parmars) {
return axios.post(
`${sapi}/api/resumeFlow/uploadStatus/${parmars.id}/${parmars.status}`,
{
headers: {
"Content-Type": "application/json"
}
}
);
return axios.post(`${sapi}/api/resumeFlow/uploadStatus/${parmars.id}/${parmars.status}`, {
headers: {
'Content-Type': 'application/json',
},
});
}
// 获取邮件模板
export function getEmailMoo() {
return axios.post(`${sapi}/api/emailTemplate/getAllTemplateList`, {
headers: {
"Content-Type": "application/json"
}
'Content-Type': 'application/json',
},
});
}
// 根据获取id邮件模板内容
export function getEmailContent(parmars) {
return axios.post(`${sapi}/api/emailTemplate/loadTemplate`, parmars, {
headers: {
"Content-Type": "application/json"
}
'Content-Type': 'application/json',
},
});
}
// 上传图片
export function uploadimage() {
return axios.get(`${sapi}/api/ckeditor/uploadImage`, {
headers: {
"Content-Type": "application/json"
}
'Content-Type': 'application/json',
},
});
}
// 发送邮件
export function sendEmail(parmars) {
return axios.post(`${sapi}/api/sendMail/sendEmailTemplate`, parmars, {
headers: {
"Content-Type": "multipart/form-data"
'Content-Type': 'multipart/form-data',
// 'Content-Disposition':'multipart/form-data'
// 'Content-Type':'application/json'
}
},
});
}
export function findCompanyEmailByKey(key) {
......@@ -186,41 +168,38 @@ export function findCompanyEmailByKey(key) {
export function forwardResume(params) {
return axios.post(`${sapi}/api/resume/forwardResume`, params, {
headers: {
"Content-Type": "application/json"
}
'Content-Type': 'application/json',
},
});
}
export function getPdf(parmars) {
return axios.get(`${sapi}/api/resume/getResumePdfByResumeId/${parmars.uid}`, {
responseType: "arraybuffer",
responseType: 'arraybuffer',
headers: {
"Content-Type": "application/json"
}
'Content-Type': 'application/json',
},
});
}
// 是否展示原件的PDF
export function isShowPDF(parmars) {
return axios.get(`${sapi}/api/resume/isShowOriPdf/${parmars.uid}`, {
headers: {
"Content-Type": "application/json"
}
'Content-Type': 'application/json',
},
});
}
export function getpdfUrl(parmars) {
return axios.get(`${sapi}/api/resume/getResumePdfUrl/${parmars.uid}`, {
headers: {
"Content-Type": "application/json"
}
'Content-Type': 'application/json',
},
});
}
// 获取职位列表
export function getlist(parmars) {
return axios.get(
`${sapi}/api/resume/findPositionList?optSourceCode=${parmars.optSourceCode}`,
{
headers: {
"Content-Type": "application/json"
}
}
);
return axios.get(`${sapi}/api/resume/findPositionList?optSourceCode=${parmars.optSourceCode}`, {
headers: {
'Content-Type': 'application/json',
},
});
}
import axios from "../service/http.service";
import { sapi } from "../config";
import qs from "qs";
import axios from '../service/http.service';
import { sapi } from '../config';
import qs from 'qs';
// 账号列表查询
export function queryaccountList(params) {
return axios.post(`${sapi}/api/user/findList`, params, {
headers: {
"Content-Type": "application/json;"
}
'Content-Type': 'application/json;',
},
});
}
// 添加账户
export function addAccount(params) {
return axios.post(`${sapi}/api/user/add`, params, {
headers: {
"Content-Type": "application/json"
}
'Content-Type': 'application/json',
},
});
}
// 删除单条账户
export function Delateaccount(parmars) {
return axios.get(`${sapi}/api/user/delete/${parmars.id}`, {
headers: {
"Content-Type": "application/json"
}
'Content-Type': 'application/json',
},
});
}
// 批量删除
export function delateAllAccount(DelateARR) {
return axios.post(`${sapi}//api/user/delete`, JSON.stringify(DelateARR), {
headers: {
"Content-Type": "application/json"
}
'Content-Type': 'application/json',
},
});
}
// 恢复初始密码
export function recoveryPassword(parmars) {
return axios.post(`${sapi}/api/user/initial/${parmars.id}`, {
headers: {
"Content-Type": "application/json"
}
'Content-Type': 'application/json',
},
});
}
// 查询邮箱列表
export function queryemailList(parmars) {
return axios.post(`${sapi}/api/email/list`, parmars, {
headers: {
"Content-Type": "application/json"
}
'Content-Type': 'application/json',
},
});
}
// 同步邮箱
export function Synchronization(parmars) {
return axios.post(`${sapi}/api/email/bindAndSync`, parmars, {
headers: {
"Content-Type": "application/json"
}
'Content-Type': 'application/json',
},
});
}
// 解绑邮箱
export function jiebangEmail(id) {
return axios.post(`${sapi}/api/email/unbind/${id}`, {
headers: {
"Content-Type": "application/x-www-form-urlencoded"
}
'Content-Type': 'application/x-www-form-urlencoded',
},
});
}
// 修改邮箱并重新绑定
export function updateemailTWO(parmars) {
return axios.post(`${sapi}/api/email/modify`, parmars, {
headers: {
"Content-Type": "application/json"
}
'Content-Type': 'application/json',
},
});
}
// 批量解绑邮箱
export function UntyingAll(UntyingAllARR) {
return axios.post(
`${sapi}/api/email/unbind/batch`,
JSON.stringify(UntyingAllARR),
{
headers: {
"Content-Type": "application/json"
}
}
);
return axios.post(`${sapi}/api/email/unbind/batch`, JSON.stringify(UntyingAllARR), {
headers: {
'Content-Type': 'application/json',
},
});
}
// 获取二维码
export function getErcode() {
return axios.get(`${sapi}/api/qrCode/getInterviewQrcode`, {
headers: {
"Content-Type": "application/json"
}
'Content-Type': 'application/json',
},
});
}
// //修改账户
export function updateAccount(parmars) {
return axios.post(`${sapi}/api/user/modify/${parmars.id}`, parmars, {
headers: {
"Content-Type": "application/json"
}
'Content-Type': 'application/json',
},
});
}
import axios from "../service/http.service";
import { sapi } from "../config";
import qs from "qs";
import axios from '../service/http.service';
import { sapi } from '../config';
import qs from 'qs';
// 提交应聘登记表
export function submitMassage(params) {
// params=qs.stringify(params)
return axios.post(`${sapi}/api/interview/arrive`, params, {
headers: { "Content-Type": "application/json" }
headers: { 'Content-Type': 'application/json' },
});
}
import axios from "../service/http.service";
import { sapi } from "../config";
import qs from "qs";
import axios from '../service/http.service';
import { sapi } from '../config';
import qs from 'qs';
// 获取上传批次号
export function getuploadNumber() {
// params=qs.stringify(params)
return axios.get(`${sapi}/api/resume/upload/batchNum`, {
headers: {
"Content-Type": "application/json"
}
'Content-Type': 'application/json',
},
});
}
// 上传文件
......@@ -17,31 +17,31 @@ export function uploadfile(parmars) {
// 'Content-Type':'multipart/form-data',
processData: false,
contentType: false,
async: false
}
async: false,
},
});
}
// 查询上传列表记录
export function serchList(parmars) {
return axios.post(`${sapi}/api/resume/upload/history`, parmars, {
headers: {
"Content-Type": "application/json"
}
'Content-Type': 'application/json',
},
});
}
// 查询简历详情
export function serchRESUMEdetail(parmars) {
return axios.get(`${sapi}/api/html/get/${parmars.uid}`, {
headers: {
"Content-Type": "application/json"
}
'Content-Type': 'application/json',
},
});
}
// 查询简历详情
export function deleteREsumeUPLOad(deleteallArr) {
return axios.post(`${sapi}/api/resume/delete`, JSON.stringify(deleteallArr), {
headers: {
"Content-Type": "application/json"
}
'Content-Type': 'application/json',
},
});
}
......@@ -3,12 +3,7 @@
<!-- bidirectional data binding(双向数据绑定) -->
<Modal v-model="modal" :fullscreen="fullscreen">
<Input v-model="value"></Input>
<editor
@getValue="getInfo"
:uploadUrl="uploadUrl"
:value="value"
height="400px"
></editor>
<editor @getValue="getInfo" :uploadUrl="uploadUrl" :value="value" height="400px"></editor>
<div slot="footer">
<Button @click="getInfo">获取内容</Button>
</div>
......@@ -20,77 +15,69 @@
</Input>
</FormItem>
<FormItem prop="password">
<Input
type="password"
v-model="formInline.password"
placeholder="Password"
>
<Input type="password" v-model="formInline.password" placeholder="Password">
<Icon type="ios-lock-outline" slot="prepend"></Icon>
</Input>
</FormItem>
<FormItem>
<Button type="primary" @click="handleSubmit('formInline')"
>Signin</Button
>
<Button type="primary" @click="handleSubmit('formInline')">Signin</Button>
</FormItem>
</Form>
</div>
</template>
<script>
import editor from "./ckeditor.vue";
import { sapi } from "../config/index.js";
import localStorage from "../service/localstorage.service.js";
import editor from './ckeditor.vue';
import { sapi } from '../config/index.js';
import localStorage from '../service/localstorage.service.js';
export default {
data() {
return {
modal: true,
fullscreen: true,
content: "<h2>I am Example</h2>",
content1: "<h2>I am Example</h2>",
uploadUrl: `${sapi}/api/ckeditor/uploadImage?token=${localStorage.get(
"token"
)}&&backUrl=/getimage`,
value: "22",
content: '<h2>I am Example</h2>',
content1: '<h2>I am Example</h2>',
uploadUrl: `${sapi}/api/ckeditor/uploadImage?token=${localStorage.get('token')}&&backUrl=/getimage`,
value: '22',
editorOption: {
// some quill options
},
formInline: {
user: "",
password: ""
user: '',
password: '',
},
ruleInline: {
user: [
{
required: false,
message: "Please fill in the user name",
trigger: "blur",
message: 'Please fill in the user name',
trigger: 'blur',
pattern: /^1[3456789]\d{9}$/,
validator: function(rule, value, call) {
console.log(rule, value);
return call(new Error());
}
}
},
},
],
password: [
{
required: true,
message: "Please fill in the password.",
trigger: "blur"
message: 'Please fill in the password.',
trigger: 'blur',
},
{
type: "string",
type: 'string',
min: 6,
message: "The password length cannot be less than 6 bits",
trigger: "blur"
}
]
}
message: 'The password length cannot be less than 6 bits',
trigger: 'blur',
},
],
},
};
},
watch: {},
components: {
editor
editor,
},
// manually control the data synchronization
// 如果需要手动控制数据同步,父组件需要显式地处理changed事件
......@@ -106,12 +93,12 @@ export default {
// this.$Message.error('Fail!');
// }
// })
this.$refs[name].validateField("user", error => {
console.log("------", error);
this.$refs[name].validateField('user', error => {
console.log('------', error);
});
}
},
},
computed: {},
mounted() {}
mounted() {},
};
</script>
......@@ -3,17 +3,15 @@
</template>
<script>
function GetQueryString(name) {
var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
var reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)', 'i');
var r = window.location.search.substr(1).match(reg); // 获取url中"?"符后的字符串并正则匹配
var context = "";
var context = '';
if (r != null) {
context = r[2];
}
reg = null;
r = null;
return context == null || context == "" || context == "undefined"
? ""
: decodeURIComponent(context);
return context == null || context == '' || context == 'undefined' ? '' : decodeURIComponent(context);
}
export default {
data() {
......@@ -21,11 +19,7 @@ export default {
},
mounted() {
console.log(777);
window.parent.CKEDITOR.tools.callFunction(
GetQueryString("CKEditorFuncNum"),
GetQueryString("ImageUrl"),
GetQueryString("Message")
);
}
window.parent.CKEDITOR.tools.callFunction(GetQueryString('CKEditorFuncNum'), GetQueryString('ImageUrl'), GetQueryString('Message'));
},
};
</script>
......@@ -2,36 +2,15 @@
<Row id="home" class="home">
<loading v-show="showLoading"></loading>
<Col span="3" class="aside" style="width:17%;height:100%;overflow: auto;">
<img
src="http://xyqbui.lkbang.net/image/homelogo.png"
alt=""
style="height:70px"
/>
<Menu
style="width: 100%;"
ref="subMenu"
:active-name="levelThreeName"
:open-names="levelTwoName"
@on-select="go"
>
<img src="http://xyqbui.lkbang.net/image/homelogo.png" alt="" style="height:70px" />
<Menu style="width: 100%;" ref="subMenu" :active-name="levelThreeName" :open-names="levelTwoName" @on-select="go">
<template v-for="menu in childMenu">
<Submenu
:name="menu.name"
:key="menu.name"
v-show="!(isAdmin == false && menu.item == '账户管理')"
>
<Submenu :name="menu.name" :key="menu.name" v-show="!(isAdmin == false && menu.item == '账户管理')">
<template slot="title">
<Icon :type="menu.icon" style="font-size:20px;font-weight:bold" />
{{ menu.item }}
</template>
<MenuItem
v-for="(child, index) in menu.child"
:key="index"
:name="child.name"
@click="go"
:active-name="levelThreeName"
>{{ child.item }}</MenuItem
>
<MenuItem v-for="(child, index) in menu.child" :key="index" :name="child.name" @click="go" :active-name="levelThreeName">{{ child.item }}</MenuItem>
</Submenu>
</template>
</Menu>
......@@ -39,24 +18,14 @@
<Col span="21" class="content" style="width:83%;height:100%;">
<Row class="header" style="height:50px;">
<Col span="20">
<Menu
mode="horizontal"
:active-name="levelOneName"
@on-select="selectMenu"
>
<MenuItem
v-for="menu in menuList"
:name="menu.name"
:key="menu.name"
>
<Menu mode="horizontal" :active-name="levelOneName" @on-select="selectMenu">
<MenuItem v-for="menu in menuList" :name="menu.name" :key="menu.name">
{{ menu.item }}
</MenuItem>
</Menu>
</Col>
<Col span="2" class="account" style="text-align:right;">
<span style="display:inline-block;line-height:6%;margin-left:30%;">{{
massage
}}</span>
<span style="display:inline-block;line-height:6%;margin-left:30%;">{{ massage }}</span>
</Col>
<Col span="1" class="sign-out">
<a @click="loginOut" style="float:right">退出</a>
......@@ -69,142 +38,136 @@
</Row>
</template>
<script>
import {
getpersonMassage,
loginOUT,
adoptOneSeeResumeList,
getChannelMassage,
judeAdmin
} from "../api/home.server.js";
import localstorage from "../service/localstorage.service.js";
import loading from "../components/loading.vue";
import { mapState } from "vuex";
import { getpersonMassage, loginOUT, adoptOneSeeResumeList, getChannelMassage, judeAdmin } from '../api/home.server.js';
import localstorage from '../service/localstorage.service.js';
import loading from '../components/loading.vue';
import { mapState } from 'vuex';
export default {
data() {
return {
massage: "",
massage: '',
isAdmin: false,
arr: [],
biaoshi: "",
biaoshi: '',
channelARR: [],
isadmin: "",
isadmin: '',
pageindex: 0,
pageSize: 10,
condition: "",
xiabiao: "",
itemSelect: "",
type: "",
levelOneName: "1",
levelTwoName: ["1-1", "2-1", "3-1", "4-1"],
levelThreeName: "1-1-1",
condition: '',
xiabiao: '',
itemSelect: '',
type: '',
levelOneName: '1',
levelTwoName: ['1-1', '2-1', '3-1', '4-1'],
levelThreeName: '1-1-1',
menuList: [
{
name: "1",
item: "简历管理",
name: '1',
item: '简历管理',
loadMenu: true,
child: [
{
name: "1-1",
item: "全部管理",
icon: "ios-apps-outline",
name: '1-1',
item: '全部管理',
icon: 'ios-apps-outline',
child: [
{
name: "1-1-1",
item: "全部简历",
route: "/allResume"
}
]
name: '1-1-1',
item: '全部简历',
route: '/allResume',
},
],
},
{
name: "1-2",
item: "渠道简历",
icon: "ios-list",
child: []
}
]
name: '1-2',
item: '渠道简历',
icon: 'ios-list',
child: [],
},
],
},
{
name: "2",
item: "面试管理",
name: '2',
item: '面试管理',
child: [
{
name: "2-1",
item: "面试管理",
icon: "ios-paper-outline",
name: '2-1',
item: '面试管理',
icon: 'ios-paper-outline',
child: [
{
name: "2-1-1",
item: "全部简历",
route: "/interview"
}
]
}
]
name: '2-1-1',
item: '全部简历',
route: '/interview',
},
],
},
],
},
{
name: "3",
item: "上传简历",
name: '3',
item: '上传简历',
child: [
{
name: "3-1",
item: "上传简历",
icon: "ios-cloud-upload-outline",
name: '3-1',
item: '上传简历',
icon: 'ios-cloud-upload-outline',
child: [
{
name: "3-1-1",
item: "上传简历",
route: "/upload"
}
]
}
]
name: '3-1-1',
item: '上传简历',
route: '/upload',
},
],
},
],
},
{
name: "4",
item: "系统管理",
name: '4',
item: '系统管理',
isAdmin: true,
child: [
{
name: "4-1",
item: "账户管理",
icon: "ios-contact-outline",
name: '4-1',
item: '账户管理',
icon: 'ios-contact-outline',
show: true,
child: [
{
name: "4-1-1",
item: "账户管理",
route: "/account"
}
]
name: '4-1-1',
item: '账户管理',
route: '/account',
},
],
},
{
name: "4-2",
item: "邮箱管理",
icon: "ios-mail-outline",
name: '4-2',
item: '邮箱管理',
icon: 'ios-mail-outline',
child: [
{
name: "4-2-1",
item: "邮箱管理",
route: "/emailMange"
}
]
name: '4-2-1',
item: '邮箱管理',
route: '/emailMange',
},
],
},
{
name: "4-3",
item: "二维码管理",
icon: "ios-qr-scanner",
name: '4-3',
item: '二维码管理',
icon: 'ios-qr-scanner',
child: [
{
name: "4-3-1",
item: "二维码管理",
route: "/QRcode"
}
]
}
]
}
name: '4-3-1',
item: '二维码管理',
route: '/QRcode',
},
],
},
],
},
],
childMenu: []
childMenu: [],
};
},
watch: {
......@@ -212,15 +175,15 @@ export default {
if (to.params.fromInterview) {
this.getActiveName();
}
}
},
},
computed: {
...mapState({
showLoading: state => state.loading
})
showLoading: state => state.loading,
}),
},
components: {
loading
loading,
},
methods: {
go(name) {
......@@ -237,8 +200,7 @@ export default {
// // refesh是否为刷新页面
this.levelOneName = name;
const menus = this.menuList.filter(v => name === v.name);
this.childMenu =
menus.length > 0 ? menus[0].child : this.menuList[0].child;
this.childMenu = menus.length > 0 ? menus[0].child : this.menuList[0].child;
if (!refesh) {
// 点击菜单默认展示第一个菜单
this.levelTwoName = [];
......@@ -250,8 +212,8 @@ export default {
// 简历管理模块需要加载渠道简历
await this.getChannelMenu();
}
if (refesh && this.$route.path.indexOf("channel") > -1) {
this.levelThreeName = this.$route.path.split("/")[2];
if (refesh && this.$route.path.indexOf('channel') > -1) {
this.levelThreeName = this.$route.path.split('/')[2];
}
this.$nextTick(() => {
this.$refs.subMenu.updateOpened();
......@@ -262,16 +224,16 @@ export default {
// 获取个人信息
getmassage() {
getpersonMassage().then(res => {
this.massage = (res.data.body && res.data.body.userName) || "";
this.massage = (res.data.body && res.data.body.userName) || '';
});
},
// 用户退出
loginOut() {
loginOUT().then(res => {
if (res.data.success == true) {
localstorage.remove("token");
localstorage.remove("isADMIN");
this.$router.replace("/login");
localstorage.remove('token');
localstorage.remove('isADMIN');
this.$router.replace('/login');
}
});
},
......@@ -286,9 +248,7 @@ export default {
var obj = {
name: `${item.sourceName}`,
item: item.sourceName,
route: `/channel/${item.sourceCode}?handUpload=${
item.handUpload == null ? "" : item.handUpload
}`
route: `/channel/${item.sourceCode}?handUpload=${item.handUpload == null ? '' : item.handUpload}`,
};
this.menuList[0].child[1].child.push(obj);
});
......@@ -296,12 +256,12 @@ export default {
},
getActiveName(change) {
const pathName = this.$route.path;
if (pathName.indexOf("channel") > -1) {
this.levelOneName = "1";
this.levelThreeName = pathName.split("/")[2];
if (pathName.indexOf('channel') > -1) {
this.levelOneName = '1';
this.levelThreeName = pathName.split('/')[2];
this.levelTwoName = [];
this.levelTwoName.push("1-2");
this.selectMenu(this.levelOneName, "refresh");
this.levelTwoName.push('1-2');
this.selectMenu(this.levelOneName, 'refresh');
return;
}
this.menuList.map(parent => {
......@@ -316,14 +276,14 @@ export default {
});
});
});
this.selectMenu(this.levelOneName, "refresh");
this.selectMenu(this.levelOneName, 'refresh');
},
getInitName(name, menu, child) {
// 超级管理员
const isAdmin = menu.isAdmin;
const hightMenu = {
levelTwoName: "",
levelThreeName: ""
levelTwoName: '',
levelThreeName: '',
};
if (isAdmin || isAdmin == undefined) {
// 默认展示一级菜单
......@@ -345,7 +305,7 @@ export default {
},
goBack() {
this.getActiveName();
}
},
},
mounted() {
this.getmassage();
......@@ -353,12 +313,12 @@ export default {
this.judgeadmin();
if (window.history && window.history.pushState) {
history.pushState(null, null, document.URL);
window.addEventListener("popstate", this.goBack, false);
window.addEventListener('popstate', this.goBack, false);
}
},
destroyed() {
window.removeEventListener("popstate", this.goBack, false);
}
window.removeEventListener('popstate', this.goBack, false);
},
};
</script>
......
<template>
<div class="loadingmark">
<div class="loading-audio">
<svg
:width="width + 'px'"
:height="height + 'px'"
xmlns="http://www.w3.org/2000/svg"
:viewBox="viewBox"
preserveAspectRatio="xMidYMid"
>
<svg :width="width + 'px'" :height="height + 'px'" xmlns="http://www.w3.org/2000/svg" :viewBox="viewBox" preserveAspectRatio="xMidYMid">
<g transform="translate(20 50)">
<circle
cx="0"
cy="0"
r="7"
fill="#11a181"
transform="scale(0.99275 0.99275)"
class="circle"
/>
<circle cx="0" cy="0" r="7" fill="#11a181" transform="scale(0.99275 0.99275)" class="circle" />
</g>
<g transform="translate(40 50)">
<circle
cx="0"
cy="0"
r="7"
fill="#11a181"
transform="scale(0.773605 0.773605)"
class="circle1"
/>
<circle cx="0" cy="0" r="7" fill="#11a181" transform="scale(0.773605 0.773605)" class="circle1" />
</g>
<g transform="translate(60 50)">
<circle
cx="0"
cy="0"
r="7"
fill="#11a181"
transform="scale(0.42525 0.42525)"
class="circle2"
/>
<circle cx="0" cy="0" r="7" fill="#11a181" transform="scale(0.42525 0.42525)" class="circle2" />
</g>
<g transform="translate(80 50)">
<circle
cx="0"
cy="0"
r="7"
fill="#11a181"
transform="scale(0.113418 0.113418)"
class="circle3"
/>
<circle cx="0" cy="0" r="7" fill="#11a181" transform="scale(0.113418 0.113418)" class="circle3" />
</g>
</svg>
</div>
......@@ -55,25 +21,25 @@
</template>
<script>
export default {
name: "loading",
name: 'loading',
props: {
width: {
type: Number,
default: 80
default: 80,
},
height: {
type: Number,
default: 80
}
default: 80,
},
},
created() {
this.viewBox = "0 0" + " " + (this.width + 10) + " " + this.height;
this.viewBox = '0 0' + ' ' + (this.width + 10) + ' ' + this.height;
},
data() {
return {
viewBox: ""
viewBox: '',
};
}
},
};
</script>
<style lang="less" scoped>
......
const sapi = "http://recruitapi-ai3.liangkebang.net";
const sapi = 'http://recruitapi-ai3.liangkebang.net';
export { sapi };
module.exports =
process.env.NODE_ENV === "production"
? require("./prod.config.js")
: require("./env.config.js");
module.exports = process.env.NODE_ENV === 'production' ? require('./prod.config.js') : require('./env.config.js');
const sapi = "//api.stantoo.com";
const sapi = '//api.stantoo.com';
export { sapi };
......@@ -3,233 +3,68 @@
<!-- <Spin size="large" fix v-if="spinShow" style="font-size:25px">加载中...</Spin> -->
<div class="interview-left">
<div class="leftcontentTop" style="height:100px;display:none">
<div
style="height:90%;float:left;width:30%;background:rgb(0,146,255);margin-left:1%;margin-top:10px"
></div>
<div
style="height:90%;float:left;width:30%;background:rgb(253,85,83);margin-left:3%;margin-top:10px"
></div>
<div
style="height:90%;float:left;width:30%;background:rgb(0,176,160);margin-left:3%;margin-top:10px"
></div>
<div style="height:90%;float:left;width:30%;background:rgb(0,146,255);margin-left:1%;margin-top:10px"></div>
<div style="height:90%;float:left;width:30%;background:rgb(253,85,83);margin-left:3%;margin-top:10px"></div>
<div style="height:90%;float:left;width:30%;background:rgb(0,176,160);margin-left:3%;margin-top:10px"></div>
</div>
<div
style="float:left;margin-left:1%;width:99%;overflow-y: auto;height:95%;margin-bottom:40px"
>
<div
style="margin:50px auto;width:300px;height:200px;line-height:200px;text-align:center;font-size:20px;color:LightGray"
v-show="Essentialinformation.length == 0"
>
<div style="float:left;margin-left:1%;width:99%;overflow-y: auto;height:95%;margin-bottom:40px">
<div style="margin:50px auto;width:300px;height:200px;line-height:200px;text-align:center;font-size:20px;color:LightGray" 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">
<p style="margin-top:7px">
<span
style="margin-left:10px;overflow: hidden;text-overflow:ellipsis;white-space: nowrap;display:inline-block;cursor:pointer"
@click="Seedetail(item.id, item.uid, item.flowStatus)"
<span style="margin-left:10px;overflow: hidden;text-overflow:ellipsis;white-space: nowrap;display:inline-block;cursor:pointer" @click="Seedetail(item.id, item.uid, item.flowStatus)"
>{{ item.ownerName }} |</span
>
<span
@click="Seedetail(item.id, item.uid, item.flowStatus)"
style="overflow: hidden;text-overflow:ellipsis;white-space: nowrap;display:inline-block;cursor:pointer"
<span @click="Seedetail(item.id, item.uid, item.flowStatus)" style="overflow: hidden;text-overflow:ellipsis;white-space: nowrap;display:inline-block;cursor:pointer"
>{{ item.ownerMobile }} |</span
>
<span
@click="Seedetail(item.id, item.uid, item.flowStatus)"
style="overflow: hidden;text-overflow:ellipsis;white-space: nowrap;display:inline-block;width:20%;cursor:pointer"
>{{ item.ownerExpectTitles }}</span
>
<span
style="color:#2d8cf0;float:right;margin-right:5%;cursor:pointer"
@click="
updateInterview(
item.id,
item.interviewerName,
item.seeTime,
item.inviterName
)
"
>更改约面信息</span
>
<span @click="Seedetail(item.id, item.uid, item.flowStatus)" style="overflow: hidden;text-overflow:ellipsis;white-space: nowrap;display:inline-block;width:20%;cursor:pointer">{{
item.ownerExpectTitles
}}</span>
<span style="color:#2d8cf0;float:right;margin-right:5%;cursor:pointer" @click="updateInterview(item.id, item.interviewerName, item.seeTime, item.inviterName)">更改约面信息</span>
</p>
<p style="margin-top:8px;color:Grey">
<span style="margin-left:10px;display:inline-block;width:22%;"
>邀约人: {{ item.inviterName }}
</span>
<span style="margin-left:7%;display:inline-block;width:22%;"
>面试官: {{ item.interviewerName }}</span
>
<span style="float:right;margin-right:5%"
>面试时间:{{ item.seeTime }}</span
>
<span style="margin-left:10px;display:inline-block;width:22%;">邀约人: {{ item.inviterName }} </span>
<span style="margin-left:7%;display:inline-block;width:22%;">面试官: {{ item.interviewerName }}</span>
<span style="float:right;margin-right:5%">面试时间:{{ item.seeTime }}</span>
</p>
</div>
<div class="contentState">
<p style="margin-top:8px">
<span style="margin-left:20px" @click="modal4 = true"
>当前状态</span
>
<span
style="float:right;margin:0 20px 0 0px;color:#2d8cf0;cursor:pointer"
@click="Stopinterview(item.id)"
v-if="item.flowStatus == 'OPTION'"
>终止面试</span
>
<span
style="float:right;margin:0 20px 0 0px;color:#2d8cf0;cursor:pointer"
@click="Stopinterview(item.id)"
v-if="item.flowStatus == 'TO_SEE'"
>终止面试</span
>
<span
style="float:right;margin:0 20px 0 0px;color:#2d8cf0;cursor:pointer"
@click="Stopinterview(item.id)"
v-if="item.flowStatus == 'HAS_SEE'"
>终止面试</span
>
<span
style="float:right;margin:0 20px 0 0px;color:#2d8cf0;cursor:pointer"
@click="Stopinterview(item.id)"
v-if="item.flowStatus == 'SEE_FAIL'"
>终止面试</span
>
<span
style="float:right;margin:0 20px 0 0px;color:#2d8cf0;cursor:pointer"
@click="Stopinterview(item.id)"
v-if="item.flowStatus == 'INTERVIEW_FAIL'"
>终止面试</span
>
<span
style="float:right;margin:0 20px 0 0px;color:#2d8cf0;cursor:pointer"
@click="Stopinterview(item.id)"
v-if="item.flowStatus == 'TO_SENT_OFFER'"
>终止面试</span
>
<span
style="float:right;margin:0 20px 0 0px;color:#2d8cf0;cursor:pointer"
@click="Stopinterview(item.id)"
v-if="item.flowStatus == 'TO_ENTRY'"
>终止面试</span
>
<span
style="float:right;margin:0 20px 0 0px;color:#2d8cf0;cursor:pointer"
@click="Stopinterview(item.id)"
v-if="item.flowStatus == 'HAS_ENTRY'"
>终止面试</span
>
<span
style="float:right;margin:0 20px 0 0px;color:#2d8cf0;cursor:pointer"
@click="Stopinterview(item.id)"
v-if="item.flowStatus == 'NO_ENTRY'"
>终止面试</span
>
<span
style="float:right;margin:0 20px 0 0px;color:#2d8cf0;cursor:pointer"
@click="Stopinterview(item.id)"
v-if="item.flowStatus == 'PASS'"
>终止面试</span
>
<span
style="float:right;margin:0 20px 0 0px;color:#2d8cf0;cursor:pointer"
@click="Stopinterview(item.id)"
v-if="item.flowStatus == 'HAS_SENT_OFFER'"
>终止面试</span
>
<span
style="float:right;margin:0 20px 0 0px;color:#2d8cf0;cursor:pointer"
@click="Stopinterview(item.id)"
v-if="item.flowStatus == 'ARRIVED'"
>终止面试</span
>
<span
style="float:right;margin:0 20px 0 10px;color:#2d8cf0;cursor:pointer"
@click="OPPeninterview(item.id, item.flowStatus)"
v-if="item.flowStatus == 'END'"
>重启面试</span
>
<span style="margin-left:20px" @click="modal4 = true">当前状态</span>
<span style="float:right;margin:0 20px 0 0px;color:#2d8cf0;cursor:pointer" @click="Stopinterview(item.id)" v-if="item.flowStatus == 'OPTION'">终止面试</span>
<span style="float:right;margin:0 20px 0 0px;color:#2d8cf0;cursor:pointer" @click="Stopinterview(item.id)" v-if="item.flowStatus == 'TO_SEE'">终止面试</span>
<span style="float:right;margin:0 20px 0 0px;color:#2d8cf0;cursor:pointer" @click="Stopinterview(item.id)" v-if="item.flowStatus == 'HAS_SEE'">终止面试</span>
<span style="float:right;margin:0 20px 0 0px;color:#2d8cf0;cursor:pointer" @click="Stopinterview(item.id)" v-if="item.flowStatus == 'SEE_FAIL'">终止面试</span>
<span style="float:right;margin:0 20px 0 0px;color:#2d8cf0;cursor:pointer" @click="Stopinterview(item.id)" v-if="item.flowStatus == 'INTERVIEW_FAIL'">终止面试</span>
<span style="float:right;margin:0 20px 0 0px;color:#2d8cf0;cursor:pointer" @click="Stopinterview(item.id)" v-if="item.flowStatus == 'TO_SENT_OFFER'">终止面试</span>
<span style="float:right;margin:0 20px 0 0px;color:#2d8cf0;cursor:pointer" @click="Stopinterview(item.id)" v-if="item.flowStatus == 'TO_ENTRY'">终止面试</span>
<span style="float:right;margin:0 20px 0 0px;color:#2d8cf0;cursor:pointer" @click="Stopinterview(item.id)" v-if="item.flowStatus == 'HAS_ENTRY'">终止面试</span>
<span style="float:right;margin:0 20px 0 0px;color:#2d8cf0;cursor:pointer" @click="Stopinterview(item.id)" v-if="item.flowStatus == 'NO_ENTRY'">终止面试</span>
<span style="float:right;margin:0 20px 0 0px;color:#2d8cf0;cursor:pointer" @click="Stopinterview(item.id)" v-if="item.flowStatus == 'PASS'">终止面试</span>
<span style="float:right;margin:0 20px 0 0px;color:#2d8cf0;cursor:pointer" @click="Stopinterview(item.id)" v-if="item.flowStatus == 'HAS_SENT_OFFER'">终止面试</span>
<span style="float:right;margin:0 20px 0 0px;color:#2d8cf0;cursor:pointer" @click="Stopinterview(item.id)" v-if="item.flowStatus == 'ARRIVED'">终止面试</span>
<span style="float:right;margin:0 20px 0 10px;color:#2d8cf0;cursor:pointer" @click="OPPeninterview(item.id, item.flowStatus)" v-if="item.flowStatus == 'END'">重启面试</span>
</p>
<p class="nowstatus" style="margin-top:8px;color:Grey">
<span
style="margin:0 20px 0 20px"
v-if="item.flowStatus == 'OPTION'"
>备选</span
>
<span
style="margin:0 20px 0 20px"
v-if="item.flowStatus == 'TO_SEE'"
>准备约面</span
>
<span
style="margin:0 20px 0 20px"
v-if="item.flowStatus == 'HAS_SEE'"
>已邀约</span
>
<span
style="margin:0 20px 0 20px"
v-if="item.flowStatus == 'SEE_FAIL'"
>邀约失败</span
>
<span
style="margin:0 20px 0 20px"
v-if="item.flowStatus == 'INTERVIEW_FAIL'"
>面试淘汰</span
>
<span
style="margin:0 20px 0 20px"
v-if="item.flowStatus == 'TO_SENT_OFFER'"
>待offer</span
>
<span
style="margin:0 20px 0 20px"
v-if="item.flowStatus == 'TO_ENTRY'"
>待入职</span
>
<span
style="margin:0 20px 0 20px"
v-if="item.flowStatus == 'HAS_ENTRY'"
>已入职</span
>
<span
style="margin:0 20px 0 20px"
v-if="item.flowStatus == 'NO_ENTRY'"
>未入职</span
>
<span
style="margin:0 20px 0 20px;color:red"
v-if="item.flowStatus == 'END'"
>终止面试</span
>
<span
style="margin:0 20px 0 20px"
v-if="item.flowStatus == 'PASS'"
>PASS</span
>
<span
style="margin:0 20px 0 20px"
v-if="item.flowStatus == 'HAS_SENT_OFFER'"
>已发offer</span
>
<span
style="margin:0 20px 0 20px"
v-if="item.flowStatus == 'TO_RESULT'"
>面试结果待定</span
>
<span
style="margin:0 20px 0 20px"
v-if="item.flowStatus == 'ARRIVED'"
>已到达</span
>
<span style="margin:0 20px 0 20px" v-if="item.flowStatus == 'OPTION'">备选</span>
<span style="margin:0 20px 0 20px" v-if="item.flowStatus == 'TO_SEE'">准备约面</span>
<span style="margin:0 20px 0 20px" v-if="item.flowStatus == 'HAS_SEE'">已邀约</span>
<span style="margin:0 20px 0 20px" v-if="item.flowStatus == 'SEE_FAIL'">邀约失败</span>
<span style="margin:0 20px 0 20px" v-if="item.flowStatus == 'INTERVIEW_FAIL'">面试淘汰</span>
<span style="margin:0 20px 0 20px" v-if="item.flowStatus == 'TO_SENT_OFFER'">待offer</span>
<span style="margin:0 20px 0 20px" v-if="item.flowStatus == 'TO_ENTRY'">待入职</span>
<span style="margin:0 20px 0 20px" v-if="item.flowStatus == 'HAS_ENTRY'">已入职</span>
<span style="margin:0 20px 0 20px" v-if="item.flowStatus == 'NO_ENTRY'">未入职</span>
<span style="margin:0 20px 0 20px;color:red" v-if="item.flowStatus == 'END'">终止面试</span>
<span style="margin:0 20px 0 20px" v-if="item.flowStatus == 'PASS'">PASS</span>
<span style="margin:0 20px 0 20px" v-if="item.flowStatus == 'HAS_SENT_OFFER'">已发offer</span>
<span style="margin:0 20px 0 20px" v-if="item.flowStatus == 'TO_RESULT'">面试结果待定</span>
<span style="margin:0 20px 0 20px" v-if="item.flowStatus == 'ARRIVED'">已到达</span>
<span v-show="item.flowStatus !== 'END'">
<select
style="border:0;margin-right:10px;float:right;cursor:pointer"
@change="selectchangeElement($event, item.id)"
v-model="statusValue"
>
<select style="border:0;margin-right:10px;float:right;cursor:pointer" @change="selectchangeElement($event, item.id)" v-model="statusValue">
<option value="0" style="color:#2d8cf0">变更状态 ∨</option>
<option value="1" style="color:#2d8cf0">已邀约 </option>
<option value="3" style="color:#2d8cf0">邀约失败</option>
......@@ -240,26 +75,17 @@
<option value="9" style="color:#2d8cf0">已入职</option>
</select>
</span>
<span
v-show="item.flowStatus == 'END'"
style="float:right;margin-right:10px;"
>
<span v-show="item.flowStatus == 'END'" style="float:right;margin-right:10px;">
变更状态 ∨
</span>
</p>
</div>
<div class="contentRecord" style="text-align:center">
<p style="margin-top:3px">
<span
style="color:#2d8cf0;cursor:pointer"
@click="RecordSEE(item.id, item.ownerName)"
>操作记录</span
>
<span style="color:#2d8cf0;cursor:pointer" @click="RecordSEE(item.id, item.ownerName)">操作记录</span>
</p>
<p style="font-size:12px;color:Grey">
最后操作人|<span style="margin-left:8px;text-align:center">{{
item.d
}}</span>
最后操作人|<span style="margin-left:8px;text-align:center">{{ item.d }}</span>
</p>
<p style="color:Grey">{{ item.modifyTime }}</p>
</div>
......@@ -281,12 +107,7 @@
<div class="interview-right">
<Form :label-width="80" onsubmit="return false;" class="emailForm">
<FormItem label="关键词:" style="margin-top:20px;margin-left:1%">
<Input
placeholder="请输入关键词"
style="width:80%"
v-model="keywords"
@keyup.enter.native="Sousuo()"
/>
<Input placeholder="请输入关键词" style="width:80%" v-model="keywords" @keyup.enter.native="Sousuo()" />
</FormItem>
<FormItem label="学历:" class="Education2">
<span
......@@ -301,18 +122,8 @@
>
</FormItem>
<FormItem label="邀约人:" style="margin-top:20px">
<Select
style="width:80%"
placeholder="请选择"
:label-in-value="true"
@on-change="selectinterviewElement2"
>
<Option
v-for="(item, index) in Inviter"
:key="index"
:value="index"
>{{ item }}</Option
>
<Select style="width:80%" placeholder="请选择" :label-in-value="true" @on-change="selectinterviewElement2">
<Option v-for="(item, index) in Inviter" :key="index" :value="index">{{ item }}</Option>
</Select>
</FormItem>
<FormItem label="面试官:" style="margin-top:20px">
......@@ -327,207 +138,70 @@
placeholder="请输入面试官全名"
clearable
>
<Option
v-for="(item, index) in options"
:key="index"
:value="item.name"
>{{ item.name }}({{ item.email }})</Option
>
<Option v-for="(item, index) in options" :key="index" :value="item.name">{{ item.name }}({{ item.email }})</Option>
</Select>
</FormItem>
<FormItem label="状态:" class="state2">
<span
v-for="(item, index) in state"
style="cursor:pointer"
:class="{ active2: item.sta == true }"
@click="selectElement3(item.Num3, index, item.status3, item.sta)"
:key="'state2' + index"
>
<span v-for="(item, index) in state" style="cursor:pointer" :class="{ active2: item.sta == true }" @click="selectElement3(item.Num3, index, item.status3, item.sta)" :key="'state2' + index">
{{ item.status3 }}</span
>
</FormItem>
</Form>
<Button
type="primary"
size="small"
style="width:150px;margin-left:150px;font-size:15px"
@click="Sousuo"
>搜索</Button
>
<Button type="primary" size="small" style="width:150px;margin-left:150px;font-size:15px" @click="Sousuo">搜索</Button>
</div>
<!-- 操作记录弹出框 -->
<Modal
v-model="recordModal"
width="550px"
:footer-hide="true"
:closable="false"
>
<Modal v-model="recordModal" width="550px" :footer-hide="true" :closable="false">
<div>
<h2 style="text-align: center;color:black">操作记录</h2>
<h2 style="text-align: center;color:#999999;margin-top:10px">
候选人:{{ toseename }}
</h2>
<h2 style="text-align: center;color:#999999;margin-top:10px">候选人:{{ toseename }}</h2>
<div v-for="(item, index) in recordList" :key="index">
<p style="margin-top:30px;" class="Recode">
<span style="display:inline-block;width:70px;margin-left:15px;">{{
item.approveUserName
}}</span>
<span style="display:inline-block;width:140px">{{
item.dateTime
}}</span>
<span
style="color:#0092FF;display:inline-block;width:70px;"
v-if="item.previousState == 'INTERVIEW_OK'"
>面试合适</span
>
<span
style="color:#0092FF;display:inline-block;width:70px;"
v-if="item.previousState == 'INTERVIEW_FAIL'"
>面试淘汰</span
>
<span
style="color:#0092FF;display:inline-block;width:70px;"
v-if="item.previousState == 'END'"
>终止面试</span
>
<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="color:#0092FF;display:inline-block;width:70px;"
v-if="item.previousState == 'ARRIVED'"
>已到达</span
>
<span style="display:inline-block;width:70px;margin-left:15px;">{{ item.approveUserName }}</span>
<span style="display:inline-block;width:140px">{{ item.dateTime }}</span>
<span style="color:#0092FF;display:inline-block;width:70px;" v-if="item.previousState == 'INTERVIEW_OK'">面试合适</span>
<span style="color:#0092FF;display:inline-block;width:70px;" v-if="item.previousState == 'INTERVIEW_FAIL'">面试淘汰</span>
<span style="color:#0092FF;display:inline-block;width:70px;" v-if="item.previousState == 'END'">终止面试</span>
<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="color:#0092FF;display:inline-block;width:70px;" v-if="item.previousState == 'ARRIVED'">已到达</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
>
<span style="color:#0092FF" v-if="item.afterState == 'ARRIVED'"
>已到达</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>
<span style="color:#0092FF" v-if="item.afterState == 'ARRIVED'">已到达</span>
</p>
</div>
</div>
<div style="height:30px;width:100%;text-align:center;margin-top:30px">
<Button type="primary" size="small" @click="recordModal = false"
>关闭</Button
>
<Button type="primary" size="small" @click="recordModal = false">关闭</Button>
</div>
</Modal>
<!-- 更改面试信息弹出框 -->
<Modal v-model="modal2" :closable="false" width="400px">
<h3 style="text-align:center">更改约面信息</h3>
<Form
:label-width="80"
ref="formInline"
:rules="ruleInline"
:model="formInline"
>
<Form :label-width="80" ref="formInline" :rules="ruleInline" :model="formInline">
<FormItem label="邀约人" style="margin-top:20px" prop="UpdateOWER">
<Input v-model="formInline.UpdateOWER" :maxlength="5" />
</FormItem>
......@@ -544,22 +218,8 @@
></DatePicker>
</FormItem>
<FormItem label="面试官" style="margin-top:20px" prop="UpdateVIEW">
<Select
v-model="formInline.UpdateVIEW"
filterable
style="width:100%;"
remote
:remote-method="remoteMethod"
:loading="loading1"
placeholder="请输入面试官全名"
clearable
>
<Option
v-for="(item, index) in options"
:key="index"
:value="item.name"
>{{ item.name }}({{ item.email }})</Option
>
<Select v-model="formInline.UpdateVIEW" filterable style="width:100%;" remote :remote-method="remoteMethod" :loading="loading1" placeholder="请输入面试官全名" clearable>
<Option v-for="(item, index) in options" :key="index" :value="item.name">{{ item.name }}({{ item.email }})</Option>
</Select>
</FormItem>
</Form>
......@@ -580,17 +240,9 @@
<!-- 重启面试弹出框 -->
<Modal v-model="modal4" :closable="false" width="240px">
<h3 style="text-align:center">提示</h3>
<p style="text-align:center">
终止面试时的简历状态为: {{ OPPeninterviewSTA }}
<br />请选择重启后的状态
</p>
<p style="text-align:center">终止面试时的简历状态为: {{ OPPeninterviewSTA }}<br />请选择重启后的状态</p>
<div style="text-align:center;margin-top:15px;">
<select
name="a"
id="333333"
@change="selectFnelement($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="2">Pass</option>
<option value="3">备选</option>
......@@ -610,7 +262,7 @@
</div>
</template>
<script>
import moment from "moment";
import moment from 'moment';
import {
changeinterviewMassage,
SerchList,
......@@ -622,117 +274,111 @@ import {
recodeLIST,
changestatus,
seedetail,
formstatus
} from "../../api/interview.server.js";
import { findCompanyEmailByKey } from "../../api/resume.server.js";
formstatus,
} from '../../api/interview.server.js';
import { findCompanyEmailByKey } from '../../api/resume.server.js';
export default {
data() {
return {
pageT: "",
statusValue: "0",
pageT: '',
statusValue: '0',
ruleInline: {
UpdateOWER: [
{ required: true, message: "邀约人不能为空", trigger: "blur" }
],
UpdateTIME: [
{ required: true, message: "面试时间不能为空", trigger: "date" }
],
UpdateVIEW: [
{ required: true, message: "面试官不能为空", trigger: "blur" }
]
UpdateOWER: [{ required: true, message: '邀约人不能为空', trigger: 'blur' }],
UpdateTIME: [{ required: true, message: '面试时间不能为空', trigger: 'date' }],
UpdateVIEW: [{ required: true, message: '面试官不能为空', trigger: 'blur' }],
},
formInline: {
UpdateOWER: "",
UpdateTIME: "",
UpdateVIEW: ""
UpdateOWER: '',
UpdateTIME: '',
UpdateVIEW: '',
},
recordModal: false,
modal2: false,
modal3: false,
modal4: false,
modal5: false,
interdeTailSta: "",
changestatuss: "",
interdeTailSta: '',
changestatuss: '',
spinShow: true,
Ishow: [],
aaaaa: "",
detailID: "",
aaaaa: '',
detailID: '',
nowstate: [
{ value: "已邀约", label: "已邀约" },
{ value: "邀约失败", label: "邀约失败" },
{ value: "面试淘汰", label: "面试淘汰" },
{ value: "待offer", label: "待offer" },
{ value: "已发offer", label: "已发offer" },
{ value: "待入职", label: "待入职" },
{ value: "未入职", label: "未入职" },
{ value: "已入职", label: "已入职" }
{ value: '已邀约', label: '已邀约' },
{ value: '邀约失败', label: '邀约失败' },
{ value: '面试淘汰', label: '面试淘汰' },
{ value: '待offer', label: '待offer' },
{ value: '已发offer', label: '已发offer' },
{ value: '待入职', label: '待入职' },
{ value: '未入职', label: '未入职' },
{ value: '已入职', label: '已入职' },
],
keywords: "",
keywords: '',
recordList: [],
oppenInterviewStatus: "TO_DO",
oppenInterviewID: "",
OPPeninterviewSTA: "",
toseename: "",
oppenInterviewStatus: 'TO_DO',
oppenInterviewID: '',
OPPeninterviewSTA: '',
toseename: '',
clickIndex1: 0,
clickIndex2: 0,
clickIndex3: 0,
// UpdateOWER:'',
// UpdateTIME:'',
// UpdateVIEW:'',
UpdateID: "",
UpdateID: '',
options3: {
disabledDate(date) {
return date && date.valueOf() < Date.now() - 3600 * 24 * 1000;
}
},
},
Interviewer: [],
Inviter: [],
stopinterviewID: "",
stopinterviewID: '',
Interviewoperation: 0,
UpdateOWERNEW: "",
UpdateTIMENEW: "",
UpdateVIEWNEW: "",
highestDegreeNum: "",
emailName: "",
UpdateOWERNEW: '',
UpdateTIMENEW: '',
UpdateVIEWNEW: '',
highestDegreeNum: '',
emailName: '',
flowStatusList: [],
inviterName: "", // 邀约人
interviewerName: "", // 面试官
changestatusSTATUS: "",
inviterName: '', // 邀约人
interviewerName: '', // 面试官
changestatusSTATUS: '',
pageIndex: 1,
pageSize: 30,
totalSize: null,
searchInfo: {
pageSize: 30,
pageIndex: 1,
STA: []
STA: [],
},
Education2: [
{ Num2: "", status2: "不限" },
{ Num2: "0", status2: "专科以下" },
{ Num2: "1", status2: "专科及以上" },
{ Num2: "2", status2: "本科及以上" },
{ Num2: "3", status2: "硕士及以上" },
{ Num2: "4", status2: "博士及以上" },
{ Num2: "99", status2: "985/211" }
{ 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: "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: "HAS_SENT_OFFER", status3: "已发offer", sta: false },
{ Num3: "HAS_ENTRY", status3: "已入职", sta: false },
{ Num3: "NO_ENTRY", status3: "未入职", sta: false },
{ Num3: "END", status3: "终止面试", sta: false }
{ Num3: [], status3: '不限', sta: true },
{ 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: 'HAS_SENT_OFFER', status3: '已发offer', sta: false },
{ Num3: 'HAS_ENTRY', status3: '已入职', sta: false },
{ Num3: 'NO_ENTRY', status3: '未入职', sta: false },
{ Num3: 'END', status3: '终止面试', sta: false },
],
OPtionData: [{ value: "0", label: "面试淘汰" }],
activeName: "",
OPtionData: [{ value: '0', label: '面试淘汰' }],
activeName: '',
Essentialinformation: [],
serchData: [],
serchData2: [],
options: [],
loading1: false
loading1: false,
};
},
methods: {
......@@ -747,7 +393,7 @@ export default {
this.toseename = sname;
this.recordModal = true;
const parmars = {
resumeId: RID
resumeId: RID,
};
recodeLIST(parmars).then(res => {
this.ownerName = res.data.body.ownerName;
......@@ -763,10 +409,7 @@ export default {
},
// 更改面试信息弹出框
updateInterview(InterID, InterOWOR, InterTime, InterVIEW) {
(this.formInline.UpdateOWER = InterVIEW),
(this.formInline.UpdateVIEW = InterOWOR),
(this.formInline.UpdateTIME = InterTime),
(this.UpdateID = InterID);
(this.formInline.UpdateOWER = InterVIEW), (this.formInline.UpdateVIEW = InterOWOR), (this.formInline.UpdateTIME = InterTime), (this.UpdateID = InterID);
this.modal2 = true;
},
selectTime(b) {
......@@ -786,7 +429,7 @@ export default {
OPPeninterview(tid, sta4) {
this.oppenInterviewID = tid;
const parmars = {
resumeId: tid
resumeId: tid,
};
formstatus(parmars).then(res => {
if (res.data.success == true) {
......@@ -799,10 +442,10 @@ export default {
UpdateStatus(LLL) {
const STATUS = LLL;
if (this.STATUS == "终止面试") {
if (this.STATUS == '终止面试') {
this.modal3 = true;
}
if (this.STATUS == "重启面试") {
if (this.STATUS == '重启面试') {
this.modal4 = true;
}
},
......@@ -811,26 +454,22 @@ export default {
const parmars = {
resumeId: this.UpdateID,
inviterName: this.formInline.UpdateOWER,
seeTime: moment(this.formInline.UpdateTIME).format("YYYY-MM-DD HH:mm"),
seeTime: moment(this.formInline.UpdateTIME).format('YYYY-MM-DD HH:mm'),
interviewerName: this.formInline.UpdateVIEW,
email: this.emailName
email: this.emailName,
};
if (
this.formInline.UpdateOWER == "" ||
this.formInline.UpdateTIME == "" ||
this.formInline.UpdateVIEW == ""
) {
if (this.formInline.UpdateOWER == '' || this.formInline.UpdateTIME == '' || this.formInline.UpdateVIEW == '') {
this.$Notice.error({
title: "提示",
desc: "请您填写完整的约面信息"
title: '提示',
desc: '请您填写完整的约面信息',
});
return;
}
changeinterviewMassage(parmars).then(res => {
if (res.data.success == true) {
this.formInline.UpdateTIME == "";
this.formInline.UpdateVIEW == "";
this.formInline.UpdateOWER == "";
this.formInline.UpdateTIME == '';
this.formInline.UpdateVIEW == '';
this.formInline.UpdateOWER == '';
this.modal2 = false;
this.Sousuo(this.pageT);
}
......@@ -838,19 +477,19 @@ export default {
},
// 查询面试信息
serchListInterview(page, status) {
page = typeof page === "number" ? page : 1;
page = typeof page === 'number' ? page : 1;
this.searchInfo.pageIndex = page;
this.pageIndex = page;
const parmars = {
pageSize: this.searchInfo.pageSize,
pageIndex: this.searchInfo.pageIndex,
parameter: {
keywordString: "",
highestDegreeNum: "",
keywordString: '',
highestDegreeNum: '',
flowStatusList: [],
interviewerName: "",
inviterName: ""
}
interviewerName: '',
inviterName: '',
},
};
SerchList(parmars, status).then(res => {
if (res.data.success == true) {
......@@ -862,8 +501,7 @@ export default {
item.interviewerName = item.interviewerName;
item.inviterName = item.inviterName;
item.modifier = item.modifier;
item.c =
item.modifier == "" ? item.modifier : item.modifier.split("_");
item.c = item.modifier == '' ? item.modifier : item.modifier.split('_');
item.d = item.c[0];
item.modifyTime = item.modifyTime;
item.ownerExpectTitles = item.ownerExpectTitles;
......@@ -880,7 +518,7 @@ export default {
SerchlistinterviewList() {
Serchinterviewor().then(res => {
this.Interviewer = res.data.body;
this.Interviewer.unshift("不限");
this.Interviewer.unshift('不限');
});
},
// 邀约人查询
......@@ -890,7 +528,7 @@ export default {
return;
}
this.Inviter = res.data.body;
this.Inviter.unshift("不限");
this.Inviter.unshift('不限');
});
},
// 新增约面信息
......@@ -899,11 +537,11 @@ export default {
resumeId: this.UpdateOWERNEW,
inviterName: this.UpdateTIMENEW,
interviewerName: this.UpdateVIEWNEW,
seeTime: this.UpdateTIMENEW
seeTime: this.UpdateTIMENEW,
};
NewAddInterview(parmars).then(res => {
if (res.data.success == true) {
this.$Message.success("新增约面信息成功");
this.$Message.success('新增约面信息成功');
}
});
},
......@@ -919,108 +557,106 @@ export default {
// 操作重启时选择的状态
selectFnelement(e) {
if (e.target.value == 1) {
this.oppenInterviewStatus = "TO_DO";
this.oppenInterviewStatus = 'TO_DO';
}
if (e.target.value == 2) {
this.oppenInterviewStatus = "PASS";
this.oppenInterviewStatus = 'PASS';
}
if (e.target.value == 3) {
this.oppenInterviewStatus = "OPTION";
this.oppenInterviewStatus = 'OPTION';
}
if (e.target.value == 4) {
this.oppenInterviewStatus = "OPTION";
this.oppenInterviewStatus = 'OPTION';
}
if (e.target.value == 5) {
this.oppenInterviewStatus = "HAS_SEE";
this.oppenInterviewStatus = 'HAS_SEE';
}
if (e.target.value == 6) {
this.oppenInterviewStatus = "SEE_FAIL";
this.oppenInterviewStatus = 'SEE_FAIL';
}
if (e.target.value == 10) {
this.oppenInterviewStatus = "INTERVIEW_FAIL";
this.oppenInterviewStatus = 'INTERVIEW_FAIL';
}
if (e.target.value == 11) {
this.oppenInterviewStatus = "TO_SENT_OFFER";
this.oppenInterviewStatus = 'TO_SENT_OFFER';
}
if (e.target.value == 12) {
this.oppenInterviewStatus = "HAS_SENT_OFFER";
this.oppenInterviewStatus = 'HAS_SENT_OFFER';
}
if (e.target.value == 13) {
this.oppenInterviewStatus = "TO_ENTRY";
this.oppenInterviewStatus = 'TO_ENTRY';
}
},
// 重启面试
OPPinterview() {
oppenInterview(this.oppenInterviewID, this.oppenInterviewStatus).then(
res => {
if (res.data.success == true) {
this.$Notice.success({
title: "提示",
desc: "已成功重启流程"
});
this.serchListInterview();
}
oppenInterview(this.oppenInterviewID, this.oppenInterviewStatus).then(res => {
if (res.data.success == true) {
this.$Notice.success({
title: '提示',
desc: '已成功重启流程',
});
this.serchListInterview();
}
);
});
this.modal4 = false;
},
// 选择变更状态时的元素
selectchangeElement(e, SID) {
if (e.target.value == 1) {
this.changestatusSTATUS = "HAS_SEE";
this.changestatusSTATUS = 'HAS_SEE';
changestatus(SID, this.changestatusSTATUS).then(res => {
this.serchListInterview(this.pageT, "init");
this.serchListInterview(this.pageT, 'init');
});
}
if (e.target.value == 2) {
this.changestatusSTATUS = "HAS_SEE";
this.changestatusSTATUS = 'HAS_SEE';
changestatus(SID, this.changestatusSTATUS).then(res => {
this.serchListInterview(this.pageT, "init");
this.serchListInterview(this.pageT, 'init');
});
}
if (e.target.value == 3) {
this.changestatusSTATUS = "SEE_FAIL";
this.changestatusSTATUS = 'SEE_FAIL';
changestatus(SID, this.changestatusSTATUS).then(res => {
this.serchListInterview(this.pageT, "init");
this.serchListInterview(this.pageT, 'init');
});
}
if (e.target.value == 4) {
this.changestatusSTATUS = "INTERVIEW_FAIL";
this.changestatusSTATUS = 'INTERVIEW_FAIL';
changestatus(SID, this.changestatusSTATUS).then(res => {
this.serchListInterview(this.pageT, "init");
this.serchListInterview(this.pageT, 'init');
});
}
if (e.target.value == 5) {
this.changestatusSTATUS = "TO_SENT_OFFER";
this.changestatusSTATUS = 'TO_SENT_OFFER';
changestatus(SID, this.changestatusSTATUS).then(res => {
this.serchListInterview(this.pageT, "init");
this.serchListInterview(this.pageT, 'init');
});
}
if (e.target.value == 6) {
this.changestatusSTATUS = "HAS_SENT_OFFER";
this.changestatusSTATUS = 'HAS_SENT_OFFER';
changestatus(SID, this.changestatusSTATUS).then(res => {
this.serchListInterview(this.pageT, "init");
this.serchListInterview(this.pageT, 'init');
});
}
if (e.target.value == 7) {
this.changestatusSTATUS = "TO_ENTRY";
this.changestatusSTATUS = 'TO_ENTRY';
changestatus(SID, this.changestatusSTATUS).then(res => {
this.serchListInterview(this.pageT, "init");
this.serchListInterview(this.pageT, 'init');
});
}
if (e.target.value == 8) {
this.changestatusSTATUS = "NO_ENTRY";
this.changestatusSTATUS = 'NO_ENTRY';
changestatus(SID, this.changestatusSTATUS).then(res => {
this.serchListInterview(this.pageT, "init");
this.serchListInterview(this.pageT, 'init');
});
}
if (e.target.value == 9) {
this.changestatusSTATUS = "HAS_ENTRY";
this.changestatusSTATUS = 'HAS_ENTRY';
changestatus(SID, this.changestatusSTATUS).then(res => {
this.serchListInterview(this.pageT, "init");
this.serchListInterview(this.pageT, 'init');
});
}
this.statusValue = "0";
this.statusValue = '0';
},
selectElement3(tItem, Tindex, status3, sta3) {
sta3 = !sta3;
......@@ -1065,20 +701,20 @@ export default {
this.detailID = Tid;
this.interdeTailSta = sta;
const newpage = this.$router.resolve({
name: "resumeDetail",
name: 'resumeDetail',
params: {},
query: {
id: this.DOWNID,
noShowBtn: "",
noShowBtn: '',
ID: this.detailID,
status: this.interdeTailSta
}
status: this.interdeTailSta,
},
});
window.open(newpage.href, "_blank");
window.open(newpage.href, '_blank');
},
// 搜索
Sousuo(page) {
page = typeof page === "number" ? page : 1;
page = typeof page === 'number' ? page : 1;
this.searchInfo.pageIndex = page;
this.pageIndex = page;
const parmars = {
......@@ -1090,8 +726,8 @@ export default {
flowStatusList: this.searchInfo.STA,
interviewerName: this.interviewerName,
inviterName: this.inviterName,
handUpload: ""
}
handUpload: '',
},
};
SerchList(parmars).then(res => {
const Ishow = res.data.items;
......@@ -1104,8 +740,7 @@ export default {
item.interviewerName = item.interviewerName;
item.inviterName = item.inviterName;
item.modifier = item.modifier;
item.c =
item.modifier == "" ? item.modifier : item.modifier.split("_");
item.c = item.modifier == '' ? item.modifier : item.modifier.split('_');
item.d = item.c[0];
item.modifyTime = item.modifyTime;
item.ownerExpectTitles = item.ownerExpectTitles;
......@@ -1124,15 +759,15 @@ export default {
this.clickIndex1 = Tindex;
},
selectinterviewElement(e) {
if (e.value == "不限") {
this.interviewerName = "";
if (e.value == '不限') {
this.interviewerName = '';
} else {
this.interviewerName = e.value;
}
},
selectinterviewElement2(e) {
if (e.label == "不限") {
this.inviterName = "";
if (e.label == '不限') {
this.inviterName = '';
} else {
this.inviterName = e.label;
}
......@@ -1148,12 +783,12 @@ export default {
this.Sousuo();
},
remoteMethod: function(query) {
if (query !== "") {
if (query !== '') {
this.loading1 = true;
setTimeout(() => {
this.loading1 = false;
let list = [];
query = query.split("(")[0];
query = query.split('(')[0];
findCompanyEmailByKey(query).then(res => {
if (res.data.success == true) {
list = res;
......@@ -1170,14 +805,14 @@ export default {
} else {
this.options = [];
}
}
},
},
mounted() {
this.serchListInterview(null, "init");
this.serchListInterview(null, 'init');
// this.Serchlistinterview()
this.SerchInvitation();
this.SerchlistinterviewList();
}
},
};
</script>
<style>
......
......@@ -12,44 +12,20 @@
<h3>登录</h3>
</div>
<div class="login_content">
<Form
ref="formInline"
:model="formInline"
:rules="ruleInline"
style="height:161px"
>
<Form ref="formInline" :model="formInline" :rules="ruleInline" style="height:161px">
<FormItem prop="user" style="height:60px">
<Input
type="text"
v-model="formInline.user"
placeholder="请输入企业邮箱账号"
class="wordStyle"
size="large"
>
<Input type="text" v-model="formInline.user" placeholder="请输入企业邮箱账号" class="wordStyle" size="large">
<Icon type="ios-person-outline" slot="prepend"></Icon>
</Input>
</FormItem>
<FormItem prop="password">
<Input
type="password"
v-model="formInline.password"
placeholder="请输入密码"
class="wordStyle"
@keyup.enter.native="login"
size="large"
>
<Input type="password" v-model="formInline.password" placeholder="请输入密码" class="wordStyle" @keyup.enter.native="login" size="large">
<Icon type="ios-lock-outline" slot="prepend"></Icon>
</Input>
<span
style="color:red;margin-top;5px"
v-show="noteconTime == true"
>{{ notecontent }}</span
>
<span style="color:red;margin-top;5px" v-show="noteconTime == true">{{ notecontent }}</span>
</FormItem>
</Form>
<Button type="primary" class="loginBtu" @click.prevent="login"
>登录</Button
>
<Button type="primary" class="loginBtu" @click.prevent="login">登录</Button>
</div>
<div class="copy">
......@@ -61,66 +37,66 @@
</div>
</template>
<script>
import { login } from "../../api/login.server.js";
import localstorage from "../../service/localstorage.service.js";
import { login } from '../../api/login.server.js';
import localstorage from '../../service/localstorage.service.js';
export default {
data() {
return {
channelarr: [],
notecontent: "",
notecontent: '',
noteconTime: false,
ISIDMIN: "",
ISIDMIN: '',
formInline: {
user: "",
password: ""
user: '',
password: '',
},
ruleInline: {
user: [
{
required: true,
pattern: /\w[-\w.+]*@([A-Za-z0-9][-A-Za-z0-9]+\.)+[A-Za-z]{2,14}/,
message: "请输入正确的邮箱账号",
trigger: "blur"
}
message: '请输入正确的邮箱账号',
trigger: 'blur',
},
],
password: [
{ required: true, message: "请输入正确的密码", trigger: "blur" }
{ 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!");
this.$Message.success('Success!');
} else {
this.$Message.error("Fail!");
this.$Message.error('Fail!');
}
});
},
login() {
const params = {
userCode: this.formInline.user,
password: this.formInline.password
password: this.formInline.password,
};
if (this.formInline.user == "" || this.formInline.password == "") {
if (this.formInline.user == '' || this.formInline.password == '') {
return;
}
login(params).then(res => {
if (res.data.body.code == "100") {
if (res.data.body.code == '100') {
this.$router.push({
name: "update",
params: { userCode: this.formInline.user }
name: 'update',
params: { userCode: this.formInline.user },
});
return;
}
if (res.data.success == true) {
this.ISIDMIN = res.data.body;
localstorage.set("token", res.data.body.token);
this.$router.push({ name: "allResume" });
localstorage.set("isADMIN", JSON.stringify(this.ISIDMIN));
localstorage.set('token', res.data.body.token);
this.$router.push({ name: 'allResume' });
localstorage.set('isADMIN', JSON.stringify(this.ISIDMIN));
return;
}
if (res.data.success == false) {
......@@ -131,8 +107,8 @@ export default {
}, 3000);
}
});
}
}
},
},
};
</script>
<style scoped>
......
......@@ -14,44 +14,19 @@
<div class="updatePsd_content">
<Form ref="formInline" :model="formInline" class="formcontent">
<FormItem class="formitemcontent">
<Input
type="password"
v-model="formInline.password"
placeholder="Password"
class="wordStyle2"
@on-change="verification"
size="large"
>
<Input type="password" v-model="formInline.password" placeholder="Password" class="wordStyle2" @on-change="verification" size="large">
<Icon type="ios-lock-outline" slot="prepend"></Icon>
</Input>
<span style="color:Grey;margin-left:30px" v-show="fistcontent"
>4-20位且不得与默认密码相同</span
>
<span style="color:Grey;margin-left:30px" v-show="fistcontent">4-20位且不得与默认密码相同</span>
</FormItem>
<FormItem style="margin-top:-20px" class="formitemcontent">
<Input
type="password"
v-model="formInline.passwordTwo"
placeholder="Password"
class="wordStyle2"
@keyup.enter.native="loginT"
size="large"
>
<Input type="password" v-model="formInline.passwordTwo" placeholder="Password" class="wordStyle2" @keyup.enter.native="loginT" size="large">
<Icon type="ios-lock-outline" slot="prepend"></Icon>
</Input>
<span
style="color:Grey;margin-left:30px;color:red"
v-show="twocontent"
>{{ twocontentmessage }}</span
>
<span style="color:Grey;margin-left:30px;color:red" v-show="twocontent">{{ twocontentmessage }}</span>
</FormItem>
</Form>
<Button
type="primary"
style="height:40px;width:100%;border-radius: 5px;background:rgb(0, 146, 255);color:rgb(255,255,255);font-size:18px;margin-top:10px"
@click="loginT"
>登录</Button
>
<Button type="primary" style="height:40px;width:100%;border-radius: 5px;background:rgb(0, 146, 255);color:rgb(255,255,255);font-size:18px;margin-top:10px" @click="loginT">登录</Button>
</div>
<div class="copy">
<p>量化派为你提供全程服务</p>
......@@ -62,29 +37,29 @@
</div>
</template>
<script>
import { updatePsd } from "../../api/login.server.js";
import { updatePsd } from '../../api/login.server.js';
export default {
data() {
return {
formInline: {
passwordTwo: "",
password: ""
passwordTwo: '',
password: '',
},
fistcontent: true,
twocontent: false,
twocontentmessage: "",
twocontentmessage: '',
channelarr: [],
Massage: "",
ISIDMIN: ""
Massage: '',
ISIDMIN: '',
};
},
methods: {
handleSubmit(name) {
this.$refs[name].validate(valid => {
if (valid) {
this.$Message.success("Success!");
this.$Message.success('Success!');
} else {
this.$Message.error("Fail!");
this.$Message.error('Fail!');
}
});
},
......@@ -92,21 +67,18 @@ export default {
const params = {
userCode: this.$route.params.userCode,
password: this.formInline.password,
confirmPassWord: this.formInline.passwordTwo
confirmPassWord: this.formInline.passwordTwo,
};
if (this.formInline.passwordTwo !== this.formInline.password) {
this.twocontentmessage = "输入密码不一致,请重新输入";
this.twocontentmessage = '输入密码不一致,请重新输入';
this.twocontent = true;
setTimeout(() => {
this.twocontent = false;
}, 3000);
return;
}
if (
this.formInline.passwordTwo.length < 4 ||
this.formInline.password.length < 4
) {
this.twocontentmessage = "请输入4-20位密码";
if (this.formInline.passwordTwo.length < 4 || this.formInline.password.length < 4) {
this.twocontentmessage = '请输入4-20位密码';
this.twocontent = true;
setTimeout(() => {
this.twocontent = false;
......@@ -114,28 +86,28 @@ export default {
return;
}
if (this.formInline.password.length > 20) {
this.twocontentmessage = "请输入4-20位密码";
this.twocontentmessage = '请输入4-20位密码';
setTimeout(() => {
this.twocontent = false;
}, 3000);
return;
}
if (this.formInline.password.length < 4) {
this.twocontentmessage = "请输入4-20位密码";
this.twocontentmessage = '请输入4-20位密码';
setTimeout(() => {
this.twocontent = false;
}, 3000);
return;
}
if (this.formInline.password.length == 0) {
this.twocontentmessage = "密码不能为空";
this.twocontentmessage = '密码不能为空';
setTimeout(() => {
this.twocontent = false;
}, 3000);
return;
}
if (this.formInline.passwordTwo.length == 0) {
this.twocontentmessage = "请输入相同的确认密码";
this.twocontentmessage = '请输入相同的确认密码';
setTimeout(() => {
this.twocontent = false;
}, 3000);
......@@ -144,9 +116,9 @@ export default {
updatePsd(params).then(res => {
if (res.data.success == true) {
this.ISIDMIN = res.data.body;
localStorage.setItem("isADMIN", JSON.stringify(this.ISIDMIN));
localStorage.setItem("token", res.data.body.token);
this.$router.replace({ name: "allResume" });
localStorage.setItem('isADMIN', JSON.stringify(this.ISIDMIN));
localStorage.setItem('token', res.data.body.token);
this.$router.replace({ name: 'allResume' });
}
if (res.data.success == false) {
this.Massage = res.data.body.message;
......@@ -160,7 +132,7 @@ export default {
},
verification() {
if (this.formInline.password == 123456) {
this.twocontentmessage = "输入密码与初始密码相同,请重新输入";
this.twocontentmessage = '输入密码与初始密码相同,请重新输入';
setTimeout(() => {
this.twocontent = false;
}, 3000);
......@@ -168,7 +140,7 @@ export default {
if (this.formInline.password.length == 0) {
this.fistcontent = true;
}
if (this.formInline.password == "") {
if (this.formInline.password == '') {
this.fistcontent = true;
}
if (this.formInline.password.length < 4) {
......@@ -180,8 +152,8 @@ export default {
if (this.formInline.password.length > 20) {
this.fistcontent = true;
}
}
}
},
},
};
</script>
<style scoped>
......
......@@ -3,94 +3,52 @@
<div class="personalInformation" v-show="JSON.stringify(resume) !== '{}'">
<p class="detailTitel">
<span>
<img
src="http://xyqbui.lkbang.net/image/icon_%E5%9F%BA%E6%9C%AC%E4%BF%A1%E6%81%AF_23_16px.png"
style="height:16px;width:23px; vertical-align: middle;margin-top:-4px"
/>
<img src="http://xyqbui.lkbang.net/image/icon_%E5%9F%BA%E6%9C%AC%E4%BF%A1%E6%81%AF_23_16px.png" style="height:16px;width:23px; vertical-align: middle;margin-top:-4px" />
</span>
<span style="margin-left:7px;font-size:16px;color:#0092FF"
>基本信息</span
>
<span style="margin-left:7px;font-size:16px;color:#0092FF">基本信息</span>
</p>
<div class="massageTitle">
<p>
<span class="bassMassage"
>姓名:{{ resume && resume.ownerName }}</span
>
<span class="bassMassageRight"
>年龄:{{ resume && resume.ownerAge }}</span
>
<span class="bassMassage">姓名:{{ resume && resume.ownerName }}</span>
<span class="bassMassageRight">年龄:{{ resume && resume.ownerAge }}</span>
</p>
<p>
<span class="bassMassage"
>联系电话:{{ resume && resume.ownerMobile }}</span
>
<span class="bassMassageRight"
>职位:{{ resume && resume.ownerExpectTitles }}</span
>
<span class="bassMassage">联系电话:{{ resume && resume.ownerMobile }}</span>
<span class="bassMassageRight">职位:{{ resume && resume.ownerExpectTitles }}</span>
</p>
<p>
<span class="bassMassage"
>电子邮箱:{{ resume && resume.email }}</span
>
<span class="bassMassageRight"
>学历:{{ resume && resume.ownerHighestDegree }}</span
>
<span class="bassMassage">电子邮箱:{{ resume && resume.email }}</span>
<span class="bassMassageRight">学历:{{ resume && resume.ownerHighestDegree }}</span>
</p>
<p>
<span class="bassMassage"
>所在地:{{ resume && resume.locationCity }}</span
>
<span class="bassMassageRight"
>经验:{{ resume && resume.workYearsOriginal }}</span
>
<span class="bassMassage">所在地:{{ resume && resume.locationCity }}</span>
<span class="bassMassageRight">经验:{{ resume && resume.workYearsOriginal }}</span>
</p>
<p>
<span class="bassMassage"
>求职状态:{{ resume && resume.statusMessage }}</span
>
<span class="bassMassage">求职状态:{{ resume && resume.statusMessage }}</span>
<span class="bassMassageRight"></span>
</p>
<p>
<span class="bassMassage"
>期望行业:{{ resume && resume.industries }}</span
>
<span class="bassMassageRight"
>期望薪资:{{ resume && resume.expectSalary }}</span
>
<span class="bassMassage">期望行业:{{ resume && resume.industries }}</span>
<span class="bassMassageRight">期望薪资:{{ resume && resume.expectSalary }}</span>
</p>
<p>
<span class="bassMassage"
>期望职位:{{ resume && resume.expectTitles }}</span
>
<span class="bassMassageRight"
>期望地区:{{ resume && resume.city }}</span
>
<span class="bassMassage">期望职位:{{ resume && resume.expectTitles }}</span>
<span class="bassMassageRight">期望地区:{{ resume && resume.city }}</span>
</p>
</div>
</div>
<div class="workExperience" v-show="roList.length !== 0">
<p class="detailTitel">
<span>
<img
src="http://xyqbui.lkbang.net/image/icon_%E5%B7%A5%E4%BD%9C%E7%BB%8F%E5%8E%86_20_18px.png"
style="height:16px;width:23px;vertical-align: middle;margin-top:-4px"
/>
<img src="http://xyqbui.lkbang.net/image/icon_%E5%B7%A5%E4%BD%9C%E7%BB%8F%E5%8E%86_20_18px.png" style="height:16px;width:23px;vertical-align: middle;margin-top:-4px" />
</span>
<span style="margin-left:7px;font-size:16px;color:#0092FF;"
>工作经历</span
>
<span style="margin-left:7px;font-size:16px;color:#0092FF;">工作经历</span>
</p>
<div
class="workExperience-detail"
v-for="(item, index) in roList"
:key="index"
>
<div class="workExperience-detail" v-for="(item, index) in roList" :key="index">
<div class="workExperience-top">
<p style="height:28px;line-height:28px;font-size:14px;">
<span style="margin-left:30px"
>{{ item.startTime }}-{{ item.endTime }}</span
>
<span style="margin-left:30px">{{ item.startTime }}-{{ item.endTime }}</span>
<span style="margin-left:18px"
><span
>{{ item.company }}<span>({{ item.workTime }})</span></span
......@@ -102,9 +60,7 @@
</span>
</p>
<p style="height:28px;line-height:28px;font-size:14px;">
<span style="float:right;margin-right:30px">{{
item.department
}}</span>
<span style="float:right;margin-right:30px">{{ item.department }}</span>
</p>
</div>
<div class="workExperience-bottom">{{ item.desc }}</div>
......@@ -113,27 +69,15 @@
<div class="projectExperience" v-show="rpList.length !== 0">
<p class="detailTitel">
<span>
<img
src="http://xyqbui.lkbang.net/image/icon_%E9%A1%B9%E7%9B%AE%E7%BB%8F%E5%8E%86_20_20px.png"
style="height:14px;width:19px; vertical-align: middle;margin-top:-4px;margin-left:2px"
<img src="http://xyqbui.lkbang.net/image/icon_%E9%A1%B9%E7%9B%AE%E7%BB%8F%E5%8E%86_20_20px.png" style="height:14px;width:19px; vertical-align: middle;margin-top:-4px;margin-left:2px"
/></span>
<span style="margin-left:7px;font-size:16px;color:#0092FF"
>项目经历</span
>
<span style="margin-left:7px;font-size:16px;color:#0092FF">项目经历</span>
</p>
<div
class="projectExperience-detail"
v-for="(item, index) in rpList"
:key="index"
>
<div class="projectExperience-detail" v-for="(item, index) in rpList" :key="index">
<div class="projectExperience-top">
<p style="height:28px;line-height:28px;font-size:14px;">
<span style="margin-left:30px"
>{{ item.startYear }}/{{ item.startMonth }}-{{ item.endYear }}/{{
item.endMonth
}}</span
>
<span style="margin-left:30px">{{ item.startYear }}/{{ item.startMonth }}-{{ item.endYear }}/{{ item.endMonth }}</span>
<span style="margin-left:18px"
><span>{{ item.name }}<span></span></span
></span>
......@@ -147,28 +91,14 @@
</div>
<div class="internshipExperience" v-show="riList.length !== 0">
<p class="detailTitel">
<span>
<img
src="http://xyqbui.lkbang.net/image/icon_%E5%AE%9E%E4%B9%A0%E7%BB%8F%E5%8E%86_21_18px.png"
style="height:16px;width:23px; vertical-align: middle;margin-top:-4px"
/></span>
<span> <img src="http://xyqbui.lkbang.net/image/icon_%E5%AE%9E%E4%B9%A0%E7%BB%8F%E5%8E%86_21_18px.png" style="height:16px;width:23px; vertical-align: middle;margin-top:-4px"/></span>
<span style="margin-left:7px;font-size:16px;color:#0092FF"
>实习经历</span
>
<span style="margin-left:7px;font-size:16px;color:#0092FF">实习经历</span>
</p>
<div
class="internshipExperience-detail"
v-for="(item, index) in riList"
:key="index"
>
<div class="internshipExperience-detail" v-for="(item, index) in riList" :key="index">
<div class="internshipExperience-top">
<p style="height:28px;line-height:28px;font-size:14px;">
<span style="margin-left:30px"
>{{ item.startYear }}/{{ item.startMonth }}-{{ item.endYear }}/{{
item.endMonth
}}</span
>
<span style="margin-left:30px">{{ item.startYear }}/{{ item.startMonth }}-{{ item.endYear }}/{{ item.endMonth }}</span>
<span style="margin-left:18px"
><span>{{ item.company }}<span></span></span
></span>
......@@ -186,28 +116,14 @@
</div>
<div class="educationalExperience" v-show="reList.length !== 0">
<p class="detailTitel">
<span>
<img
src="http://xyqbui.lkbang.net/image/icon_%E6%95%99%E8%82%B2%E7%BB%8F%E5%8E%86_26_20px.png"
style="height:16px;width:23px; vertical-align: middle;margin-top:-4px"
/></span>
<span> <img src="http://xyqbui.lkbang.net/image/icon_%E6%95%99%E8%82%B2%E7%BB%8F%E5%8E%86_26_20px.png" style="height:16px;width:23px; vertical-align: middle;margin-top:-4px"/></span>
<span style="margin-left:7px;font-size:16px;color:#0092FF"
>教育经历</span
>
<span style="margin-left:7px;font-size:16px;color:#0092FF">教育经历</span>
</p>
<div
class="educationalExperience-detail"
v-for="(item, index) in reList"
:key="index"
>
<div class="educationalExperience-detail" v-for="(item, index) in reList" :key="index">
<div class="educationalExperience-content">
<div class="educationalExperience-left">
<p style="line-height:25px;margin-top:20px">
{{ item.school }}(({{ item.startYear }}.{{ item.startMonth }}-{{
item.endYear
}}.{{ item.endMonth }}))
</p>
<p style="line-height:25px;margin-top:20px">{{ item.school }}(({{ item.startYear }}.{{ item.startMonth }}-{{ item.endYear }}.{{ item.endMonth }}))</p>
<p style="margin-top:20px;">专业:{{ item.major }}</p>
</div>
<div class="educationalExperience-right">
......@@ -218,15 +134,9 @@
</div>
<div class="Self-evaluation" v-show="JSON.stringify(resume) !== '{}'">
<p class="detailTitel">
<span>
<img
src="http://xyqbui.lkbang.net/image/icon_%E8%87%AA%E6%88%91%E8%AF%84%E4%BB%B7_18_18px.png"
style="height:16px;width:23px; vertical-align: middle;margin-top:-4px"
/></span>
<span> <img src="http://xyqbui.lkbang.net/image/icon_%E8%87%AA%E6%88%91%E8%AF%84%E4%BB%B7_18_18px.png" style="height:16px;width:23px; vertical-align: middle;margin-top:-4px"/></span>
<span style="margin-left:7px;font-size:16px;color:#0092FF"
>自我评价</span
>
<span style="margin-left:7px;font-size:16px;color:#0092FF">自我评价</span>
</p>
<div class="evaluation-content">
{{ resume && resume.selfEvaluate }}
......@@ -235,9 +145,9 @@
</div>
</template>
<script>
import { seedetail } from "../../api/resume.server";
import localStorage from "../../service/localstorage.service.js";
import { sapi } from "../../config";
import { seedetail } from '../../api/resume.server';
import localStorage from '../../service/localstorage.service.js';
import { sapi } from '../../config';
export default {
data() {
return {
......@@ -246,18 +156,18 @@ export default {
roList: [],
rpList: [],
reList: [],
downresume: "",
detialID: "",
showBtn: ""
downresume: '',
detialID: '',
showBtn: '',
};
},
methods: {
getDETAIL() {
this.detialID = this.$route.query.ID;
this.showBtn = this.$route.query.noShowBtn;
const token = this.$route.query.token || "";
const token = this.$route.query.token || '';
const parmars = {
uid: this.$route.query.id
uid: this.$route.query.id,
// uid:"0646215721cc43ccb51ff3e979959e35"
};
seedetail(parmars).then(res => {
......@@ -267,11 +177,11 @@ export default {
this.rpList = res.data.body.rpList;
this.reList = res.data.body.reList;
});
}
},
},
mounted() {
this.getDETAIL();
}
},
};
</script>
<style scoped>
......@@ -279,7 +189,7 @@ export default {
width: 860px;
margin: 30px auto;
color: #000000;
font-family: "\5FAE\8F6F\96C5\9ED1";
font-family: '\5FAE\8F6F\96C5\9ED1';
}
.personalInformation {
width: 860px;
......
......@@ -4,49 +4,16 @@
<h3 style="margin-top:5px;font-size:0.35rem">应聘登记表</h3>
</div>
<div class="sweepcode_content">
<Form
:label-width="120"
:model="formInline"
:rules="ruleInline"
ref="formInline"
class="fontsize"
label-position="left"
style="margin-left:3%"
>
<FormItem
label="邀约人"
prop="Inviter"
style="margin-top:10px;font-size:15px"
>
<Input
placeholder="请输入"
style="width:85%;"
v-model="formInline.Inviter"
size="large"
/>
<Form :label-width="120" :model="formInline" :rules="ruleInline" ref="formInline" class="fontsize" label-position="left" style="margin-left:3%">
<FormItem label="邀约人" prop="Inviter" style="margin-top:10px;font-size:15px">
<Input placeholder="请输入" style="width:85%;" v-model="formInline.Inviter" size="large" />
</FormItem>
<FormItem label="邀约人手机" style="" class="phone">
<Input
placeholder="请输入"
style="width:85%;"
v-model="formInline.InviterPhoneNumber"
size="large"
@on-blur="jedugePhone"
/><br />
<span
style="position: absolute;top: 100%;left: 0;line-height: 1;padding-top: 6px;color:#ed4014;display:inline-block;height:30px;"
v-show="isV == true"
>请输入正确的手机号码</span
>
<Input placeholder="请输入" style="width:85%;" v-model="formInline.InviterPhoneNumber" size="large" @on-blur="jedugePhone" /><br />
<span style="position: absolute;top: 100%;left: 0;line-height: 1;padding-top: 6px;color:#ed4014;display:inline-block;height:30px;" v-show="isV == true">请输入正确的手机号码</span>
</FormItem>
<FormItem label="面试时间" prop="time" class="dateTime">
<Input
placeholder="请输入"
style="width:40%;"
v-model="formInline.date"
:readonly="true"
size="large"
/>
<Input placeholder="请输入" style="width:40%;" v-model="formInline.date" :readonly="true" size="large" />
<TimePicker
type="time"
placeholder="请选择时间"
......@@ -60,55 +27,28 @@
></TimePicker>
</FormItem>
<FormItem label="应聘职位" prop="position" class="position">
<Input
placeholder="请输入"
style="width:85%;"
v-model="formInline.position"
size="large"
/>
<Input placeholder="请输入" style="width:85%;" v-model="formInline.position" size="large" />
</FormItem>
<FormItem label="应聘来源" prop="model1" class="model1">
<Select v-model="formInline.model1" style="width:85%;" size="large">
<Option
v-for="item in origen"
:value="item.value"
:key="item.value"
>{{ item.label }}</Option
>
<Option v-for="item in origen" :value="item.value" :key="item.value">{{ item.label }}</Option>
</Select>
</FormItem>
<FormItem label="姓名" prop="name" class="name">
<Input
placeholder="请与简历保持一致"
style="width:85%;"
v-model="formInline.name"
size="large"
/>
<Input placeholder="请与简历保持一致" style="width:85%;" v-model="formInline.name" size="large" />
</FormItem>
<FormItem label="手机号码" prop="phoneNUmber" class="phoneNUmber">
<Input
placeholder="请输入"
style="width:85%;"
v-model="formInline.phoneNUmber"
size="large"
/>
<Input placeholder="请输入" style="width:85%;" v-model="formInline.phoneNUmber" size="large" />
</FormItem>
<FormItem label="是否携带简历" prop="model2" class="model2">
<Select v-model="formInline.model2" style="width:85%;" size="large">
<Option
v-for="item in isGET"
:value="item.value"
:key="item.value"
>{{ item.label }}</Option
>
<Option v-for="item in isGET" :value="item.value" :key="item.value">{{ item.label }}</Option>
</Select>
</FormItem>
</Form>
</div>
<div class="submission">
<Button type="primary" @click="confirmSubmission" :loading="loading"
>提交</Button
>
<Button type="primary" @click="confirmSubmission" :loading="loading">提交</Button>
</div>
<Modal v-model="modal3" width="200px" :closable="false">
<div>
......@@ -134,177 +74,147 @@
</div>
</template>
<script>
import moment from "moment";
import { submitMassage } from "../../api/sweepCode.server.js";
import moment from 'moment';
import { submitMassage } from '../../api/sweepCode.server.js';
export default {
data() {
return {
docmHeight: "0",
showHeight: "0",
docmHeight: '0',
showHeight: '0',
loading: false,
hidshow: true,
isResize: false,
modal3: false,
modal4: false,
ruleInline: {
Inviter: [{ required: true, message: "请输入邀约人", trigger: "blur" }],
time: [
{ required: true, message: "面试时间不能为空", trigger: "date" }
],
Inviter: [{ required: true, message: '请输入邀约人', trigger: 'blur' }],
time: [{ required: true, message: '面试时间不能为空', trigger: 'date' }],
// InviterPhoneNumber: [
// { required: false, pattern:/^[1][3,4,5,7,8,6,9][0-9]{9}$/, message: '请输入正确的手机号', trigger: 'blur' }
// ],
position: [
{ required: true, message: "请输入应聘职位", trigger: "blur" }
],
model1: [
{ required: true, message: "请输入应聘来源", trigger: "blur" }
],
name: [{ required: true, message: "请输入姓名", trigger: "blur" }],
position: [{ required: true, message: '请输入应聘职位', trigger: 'blur' }],
model1: [{ required: true, message: '请输入应聘来源', trigger: 'blur' }],
name: [{ required: true, message: '请输入姓名', trigger: 'blur' }],
phoneNUmber: [
{ required: true, message: "请输入正确的手机号码", trigger: "blur" },
{ required: true, message: '请输入正确的手机号码', trigger: 'blur' },
{
required: true,
pattern: /^[1][3,4,5,7,8,6,9][0-9]{9}$/,
message: "请输入正确的手机号",
trigger: "blur"
}
message: '请输入正确的手机号',
trigger: 'blur',
},
],
model2: [
{ required: true, message: "请选择是否携带简历", trigger: "blur" }
]
model2: [{ required: true, message: '请选择是否携带简历', trigger: 'blur' }],
},
saleDate: "",
saleDate: '',
isV: false,
options3: {
disabledDate(date) {
return (
(date && date.valueOf() < Date.now() - 3600 * 24 * 1000) ||
date.valueOf() > Date.now()
);
}
return (date && date.valueOf() < Date.now() - 3600 * 24 * 1000) || date.valueOf() > Date.now();
},
},
origen: [
{
value: "智联招聘",
label: "智联招聘"
value: '智联招聘',
label: '智联招聘',
},
{
value: "51Job",
label: "51Job"
value: '51Job',
label: '51Job',
},
{
value: "boss直聘",
label: "boss直聘"
value: 'boss直聘',
label: 'boss直聘',
},
{
value: "拉勾网",
label: "拉勾网"
value: '拉勾网',
label: '拉勾网',
},
{
value: "内部推荐",
label: "内部推荐"
value: '内部推荐',
label: '内部推荐',
},
{
value: "猎聘网",
label: "猎聘网"
value: '猎聘网',
label: '猎聘网',
},
{
value: "其他",
label: "其他"
}
value: '其他',
label: '其他',
},
],
isGET: [
{
value: "",
label: ""
value: '',
label: '',
},
{
value: "",
label: ""
}
value: '',
label: '',
},
],
formInline: {
model1: "",
model2: "",
Inviter: "",
InviterPhoneNumber: "",
date: "",
time: "",
position: "",
phoneNUmber: "",
name: ""
model1: '',
model2: '',
Inviter: '',
InviterPhoneNumber: '',
date: '',
time: '',
position: '',
phoneNUmber: '',
name: '',
},
isV: false,
hh: [
"01",
"02",
"03",
"04",
"05",
"06",
"07",
"08",
"09",
"10",
"11",
"12"
],
mm: ["00", "10", "20", "30", "40", "50", "60"]
hh: ['01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12'],
mm: ['00', '10', '20', '30', '40', '50', '60'],
};
},
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.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("请填写完整的信息");
this.$Message.error('请填写完整的信息');
return;
}
if (!/^[1][3,4,5,7,8,6,9][0-9]{9}$/.test(this.formInline.phoneNUmber)) {
this.$Message.error("请输入正确的手机号");
this.$Message.error('请输入正确的手机号');
return;
}
if (
this.formInline.InviterPhoneNumber !== "" &&
!/^[1][3,4,5,7,8,6,9][0-9]{9}$/.test(this.formInline.InviterPhoneNumber)
) {
this.$Message.error("请输入正确的手机号");
if (this.formInline.InviterPhoneNumber !== '' && !/^[1][3,4,5,7,8,6,9][0-9]{9}$/.test(this.formInline.InviterPhoneNumber)) {
this.$Message.error('请输入正确的手机号');
return;
}
const parmars = {
invitePerson: this.formInline.Inviter,
inviterMobile: this.formInline.InviterPhoneNumber,
dateTime:
moment(this.formInline.date).format("YYYY-MM-DD") +
" " +
this.formInline.time,
dateTime: moment(this.formInline.date).format('YYYY-MM-DD') + ' ' + this.formInline.time,
interviewTitle: this.formInline.position,
source: this.formInline.model1,
name: this.formInline.name,
mobile: this.formInline.phoneNUmber,
takeResume: this.formInline.model2
takeResume: this.formInline.model2,
};
this.loading = true;
submitMassage(parmars).then(res => {
if (res.data.success == true) {
this.loading = false;
this.formInline.model1 = "";
this.formInline.model2 = "";
this.formInline.Inviter = "";
this.formInline.InviterPhoneNumber = "";
this.formInline.time = "";
this.formInline.position = "";
this.formInline.name = "";
this.formInline.phoneNUmber = "";
this.formInline.model1 = '';
this.formInline.model2 = '';
this.formInline.Inviter = '';
this.formInline.InviterPhoneNumber = '';
this.formInline.time = '';
this.formInline.position = '';
this.formInline.name = '';
this.formInline.phoneNUmber = '';
this.modal4 = true;
}
......@@ -320,25 +230,21 @@ export default {
this.modal3 = true;
},
jedugePhone() {
if (this.formInline.InviterPhoneNumber == "") {
if (this.formInline.InviterPhoneNumber == '') {
this.isV = false;
return;
}
if (
!/^[1][3,4,5,7,8,6,9][0-9]{9}$/.test(this.formInline.InviterPhoneNumber)
) {
if (!/^[1][3,4,5,7,8,6,9][0-9]{9}$/.test(this.formInline.InviterPhoneNumber)) {
this.isV = true;
}
if (
/^[1][3,4,5,7,8,6,9][0-9]{9}$/.test(this.formInline.InviterPhoneNumber)
) {
if (/^[1][3,4,5,7,8,6,9][0-9]{9}$/.test(this.formInline.InviterPhoneNumber)) {
this.isV = false;
}
},
// 阻止弹出键盘
defaultRRRR() {
document.activeElement.blur();
}
},
},
mounted() {
this.welconme();
......@@ -349,10 +255,9 @@ export default {
this.saleDate = `${year}/${month}/${day}`;
this.formInline.date = this.saleDate;
function getRem() {
var html = document.getElementsByTagName("html")[0];
var oWidth =
document.body.clientWidth || document.documentElement.clientWidth;
html.style.fontSize = oWidth / 7.5 + "px";
var html = document.getElementsByTagName('html')[0];
var oWidth = document.body.clientWidth || document.documentElement.clientWidth;
html.style.fontSize = oWidth / 7.5 + 'px';
}
this.$nextTick(() => {
getRem();
......@@ -369,7 +274,7 @@ export default {
};
},
beforeDestroy() {
document.getElementsByTagName("html")[0].removeAttribute("style");
document.getElementsByTagName('html')[0].removeAttribute('style');
},
watch: {
showHeight: function() {
......@@ -378,8 +283,8 @@ export default {
} else {
this.hidshow = true;
}
}
}
},
},
};
</script>
......
......@@ -18,13 +18,13 @@
</div>
</template>
<script>
import { getErcode, downloadErcode } from "../../api/stystem.server.js";
import { sapi } from "../../config";
import { getErcode, downloadErcode } from '../../api/stystem.server.js';
import { sapi } from '../../config';
export default {
data() {
return {
url: "",
url2: ""
url: '',
url2: '',
};
},
methods: {
......@@ -38,11 +38,11 @@ export default {
},
downPic(img) {
window.location.href = `${sapi}/api/qrCode/downQrCode`;
}
},
},
mounted() {
this.getercode();
}
},
};
</script>
<style>
......
......@@ -2,77 +2,37 @@
<div class="account">
<div class="addAcount">
<p style="margin-top:0.5%">
<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;color:Grey">以下内容均为必填项</span>
</p>
<Form :label-width="100" :model="formInline" :rules="ruleInline">
<FormItem label="登录账号" style="margin-top:1%" prop="emailNumber">
<Input
placeholder="请输入企业邮箱"
style="width:300px"
v-model="formInline.emailNumber"
/>
<Input placeholder="请输入企业邮箱" style="width:300px" v-model="formInline.emailNumber" />
</FormItem>
<FormItem label="手机号码" style="margin-top:1%" prop="PhoneNumber">
<Input
placeholder="请输入正确的手机号"
style="width:300px"
v-model="formInline.PhoneNumber"
/>
<Input placeholder="请输入正确的手机号" style="width:300px" v-model="formInline.PhoneNumber" />
</FormItem>
<FormItem label="真实姓名" style="margin-top:1%" prop="PerName">
<Input
placeholder="请输入真实姓名"
style="width:300px"
v-model="formInline.PerName"
:maxlength="5"
/>
<Input placeholder="请输入真实姓名" style="width:300px" v-model="formInline.PerName" :maxlength="5" />
</FormItem>
</Form>
<p>
<span style="margin-left:25px;fnt-size:14px">初始登录密码</span>
<span style="margin-left:10px"
>默认是"123456",新用户首次登录需修改后才能进入系统。</span
>
<span style="margin-left:30px"
><Button
type="primary"
size="small"
style="color:#ffffff;margin-left:20px;width:60px"
@click="addacount"
>
添加</Button
></span
>
<span style="margin-left:10px">默认是"123456",新用户首次登录需修改后才能进入系统。</span>
<span style="margin-left:30px"><Button type="primary" size="small" style="color:#ffffff;margin-left:20px;width:60px" @click="addacount"> 添加</Button></span>
</p>
</div>
<div class="accountMange">
<div class="accountMange-top">
<p style="height:40px;line-height:40px">
<span style="font-size:18px;color:#2d8cf0;margin-left:18px"
>账户管理</span
>
<span style="margin-left:10px;color:Grey"
>删除后该用户将无法登录,该账户上传的简历仍然保留。</span
>
<span style="font-size:18px;color:#2d8cf0;margin-left:18px">账户管理</span>
<span style="margin-left:10px;color:Grey">删除后该用户将无法登录,该账户上传的简历仍然保留。</span>
</p>
<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(checkboxList)"
style="margin-left:25px;margin-top:15px;cursor:pointer"
/><span style="margin-left:10px">全选</span>
<span
style="margin-left:40px;color:#2d8cf0;cursor:pointer"
@click="delateall"
>删除</span
<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(checkboxList)" style="margin-left:25px;margin-top:15px;cursor:pointer" /><span style="margin-left:10px"
>全选</span
>
<span style="margin-left:40px;color:#2d8cf0;cursor:pointer" @click="delateall">删除</span>
</p>
</div>
<!-- <Table ref="selection" :columns="columns4" :data="data1"></Table> -->
......@@ -80,34 +40,14 @@
<!-- <Spin size="large" fix v-if="spinShow" style="font-size:25px">加载中...</Spin> -->
<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;cursor:pointer"
@click="delateArr(item.id)"
/>
<input type="checkbox" name="checkboxinput" class="input-checkbox" v-model="checkboxList" :value="item.id" style="margin-left:25px;cursor:pointer" @click="delateArr(item.id)" />
<span style="margin-left:5px">{{ item.userName }}</span>
<span style="margin-left:35px">{{ item.userCode }}</span>
<span style="margin-left:35px">{{ item.phone }}</span>
<span style="margin-left:35px">{{ item.createTime }}</span>
<span
style="margin-left:35px;color:#2d8cf0;cursor:pointer"
@click="recoveryModal(item.id)"
>恢复初始密码</span
>
<span
style="margin-left:35px;color:#2d8cf0;cursor:pointer"
@click="updateModal(item)"
>修改</span
>
<span
style="margin-left:35px;color:#2d8cf0;cursor:pointer"
@click="delateMaodal(item.id)"
>删除</span
>
<span style="margin-left:35px;color:#2d8cf0;cursor:pointer" @click="recoveryModal(item.id)">恢复初始密码</span>
<span style="margin-left:35px;color:#2d8cf0;cursor:pointer" @click="updateModal(item)">修改</span>
<span style="margin-left:35px;color:#2d8cf0;cursor:pointer" @click="delateMaodal(item.id)">删除</span>
</div>
<div style="height:10px;background:white;width:100%;"></div>
</div>
......@@ -137,38 +77,15 @@
</Modal>
<Modal v-model="modal6" :closable="false" width="450px">
<h3 style="text-align:center;font-size:14px">修改信息</h3>
<Form
:label-width="100"
:model="formInline"
:rules="ruleInline"
class="updateClassModal"
>
<Form :label-width="100" :model="formInline" :rules="ruleInline" class="updateClassModal">
<FormItem label="登录账号" style="margin-top:1%" prop="emailNumber">
<Input
placeholder="请输入企业邮箱"
style="width:300px;"
v-model="formInline.updateemailNumber"
disabled
/>
<Input placeholder="请输入企业邮箱" style="width:300px;" v-model="formInline.updateemailNumber" disabled />
</FormItem>
<FormItem
label="手机号码"
style="margin-top:1%"
prop="updatePhoneNumber"
>
<Input
placeholder="请输入正确的手机号"
style="width:300px;"
v-model="formInline.updatePhoneNumber"
/>
<FormItem label="手机号码" style="margin-top:1%" prop="updatePhoneNumber">
<Input placeholder="请输入正确的手机号" style="width:300px;" v-model="formInline.updatePhoneNumber" />
</FormItem>
<FormItem label="真实姓名" style="margin-top:1%" prop="updatePerName">
<Input
placeholder="请输入真实姓名"
style="width:300px;"
v-model="formInline.updatePerName"
:maxlength="5"
/>
<Input placeholder="请输入真实姓名" style="width:300px;" v-model="formInline.updatePerName" :maxlength="5" />
</FormItem>
</Form>
<div slot="footer" style="text-align:center">
......@@ -203,14 +120,7 @@
</div>
</template>
<script>
import {
queryaccountList,
addAccount,
Delateaccount,
delateAllAccount,
recoveryPassword,
updateAccount
} from "../../api/stystem.server.js";
import { queryaccountList, addAccount, Delateaccount, delateAllAccount, recoveryPassword, updateAccount } from '../../api/stystem.server.js';
export default {
data() {
return {
......@@ -221,67 +131,67 @@ export default {
modal6: false,
checkboxList: [],
checked: false,
updateAccountId: "",
pageT: "",
userName: "",
userCode: "",
Massage: "",
updateAccountId: '',
pageT: '',
userName: '',
userCode: '',
Massage: '',
spinShow: true,
delateARR: [],
id: "",
I: "",
id: '',
I: '',
pageIndex: 1,
pageSize: 30,
totalSize: null,
searchInfo: {
pageSize: 30,
pageIndex: 1,
id: ""
id: '',
},
formInline: {
PhoneNumber: "",
PerName: "",
emailNumber: "",
updatePhoneNumber: "",
updatePerName: "",
updateemailNumber: ""
PhoneNumber: '',
PerName: '',
emailNumber: '',
updatePhoneNumber: '',
updatePerName: '',
updateemailNumber: '',
},
ruleInline: {
PhoneNumber: [
{
required: true,
pattern: /^[1][3,4,5,7,8,6,9][0-9]{9}$/,
message: "请输入正确的手机号",
trigger: "blur"
}
message: '请输入正确的手机号',
trigger: 'blur',
},
],
PerName: [
{ required: true, message: "请输入真实的姓名", trigger: "blur" },
{ type: "string", message: "", trigger: "blur" }
{ required: true, message: '请输入真实的姓名', trigger: 'blur' },
{ type: 'string', message: '', trigger: 'blur' },
],
updateemailNumber: [
{
required: true,
pattern: /^[1][3,4,5,7,8,6,9][0-9]{9}$/,
message: "请输入正确的手机号",
trigger: "blur"
}
message: '请输入正确的手机号',
trigger: 'blur',
},
],
updatePerName: [
{ required: true, message: "请输入真实的姓名", trigger: "blur" },
{ type: "string", message: "", trigger: "blur" }
{ required: true, message: '请输入真实的姓名', trigger: 'blur' },
{ type: 'string', message: '', trigger: 'blur' },
],
emailNumber: [
{
required: true,
pattern: /\w[-\w.+]*@([A-Za-z0-9][-A-Za-z0-9]+\.)+[A-Za-z]{2,14}/,
message: "请输入正确的邮箱账号",
trigger: "blur"
}
]
message: '请输入正确的邮箱账号',
trigger: 'blur',
},
],
},
ajaxData: [],
checkData: [] // 双向数据绑定的数组
checkData: [], // 双向数据绑定的数组
};
},
methods: {
......@@ -289,10 +199,10 @@ export default {
this.$refs.selection.selectAll(status);
},
ok() {
this.$Message.info("Clicked ok");
this.$Message.info('Clicked ok');
},
cancel() {
this.$Message.info("Clicked cancel");
this.$Message.info('Clicked cancel');
},
//
delateArr(DElateID) {
......@@ -328,44 +238,39 @@ export default {
id: this.updateAccountId,
userCode: this.formInline.updateemailNumber,
userName: this.formInline.updatePerName,
phone: this.formInline.updatePhoneNumber
phone: this.formInline.updatePhoneNumber,
};
if (
this.formInline.updatePhoneNumber == "" ||
this.formInline.updatePerName == ""
) {
if (this.formInline.updatePhoneNumber == '' || this.formInline.updatePerName == '') {
this.$Notice.error({
title: "提示",
desc: "请您填写正确的手机号码或姓名",
duration: 2
title: '提示',
desc: '请您填写正确的手机号码或姓名',
duration: 2,
});
return;
}
if (
!/^[1][3,4,5,7,8,6,9][0-9]{9}$/.test(this.formInline.updatePhoneNumber)
) {
if (!/^[1][3,4,5,7,8,6,9][0-9]{9}$/.test(this.formInline.updatePhoneNumber)) {
this.$Notice.error({
title: "提示",
desc: "请您填写正确的手机号",
duration: 2
title: '提示',
desc: '请您填写正确的手机号',
duration: 2,
});
return;
}
updateAccount(parmars).then(res => {
if (res.data.success == true) {
this.$Notice.success({
title: "提示",
desc: "修改成功",
duration: 2
title: '提示',
desc: '修改成功',
duration: 2,
});
this.modal6 = false;
this.SearchList();
}
if (res.data.success == false) {
this.$Notice.error({
title: "提示",
title: '提示',
desc: res.data.body.message,
duration: 2
duration: 2,
});
this.modal6 = false;
}
......@@ -376,74 +281,66 @@ export default {
const parmars = {
userCode: this.formInline.emailNumber,
userName: this.formInline.PerName,
phone: this.formInline.PhoneNumber
phone: this.formInline.PhoneNumber,
};
if (
this.formInline.PhoneNumber == "" ||
this.formInline.PerName == "" ||
this.formInline.emailNumber == ""
) {
if (this.formInline.PhoneNumber == '' || this.formInline.PerName == '' || this.formInline.emailNumber == '') {
this.$Notice.error({
title: "提示",
desc: "请您填写正确的账号或姓名",
duration: 2
title: '提示',
desc: '请您填写正确的账号或姓名',
duration: 2,
});
return;
}
if (!/^[1][3,4,5,7,8,6,9][0-9]{9}$/.test(this.formInline.PhoneNumber)) {
this.$Notice.error({
title: "提示",
desc: "请您填写正确的手机号",
duration: 2
title: '提示',
desc: '请您填写正确的手机号',
duration: 2,
});
return;
}
if (
!/\w[-\w.+]*@([A-Za-z0-9][-A-Za-z0-9]+\.)+[A-Za-z]{2,14}/.test(
this.formInline.emailNumber
)
) {
if (!/\w[-\w.+]*@([A-Za-z0-9][-A-Za-z0-9]+\.)+[A-Za-z]{2,14}/.test(this.formInline.emailNumber)) {
this.$Notice.error({
title: "提示",
desc: "请您填写正确邮箱账号",
duration: 2
title: '提示',
desc: '请您填写正确邮箱账号',
duration: 2,
});
return;
}
addAccount(parmars).then(res => {
if (res.data.success == true) {
this.$Notice.success({
title: "提示",
desc: "添加成功",
duration: 2
title: '提示',
desc: '添加成功',
duration: 2,
});
this.SearchList();
this.formInline.PhoneNumber = "";
this.formInline.PerName = "";
this.formInline.emailNumber = "";
this.formInline.PhoneNumber = '';
this.formInline.PerName = '';
this.formInline.emailNumber = '';
}
if (res.data.body.code == 0) {
this.Massage = res.data.body.message;
this.$Notice.error({
title: "提示",
title: '提示',
desc: this.Massage,
duration: 2
duration: 2,
});
this.formInline.PhoneNumber = "";
this.formInline.PerName = "";
this.formInline.emailNumber = "";
this.formInline.PhoneNumber = '';
this.formInline.PerName = '';
this.formInline.emailNumber = '';
}
});
},
// 查询账户列表
SearchList(page) {
page = typeof page === "number" ? page : 1;
page = typeof page === 'number' ? page : 1;
this.searchInfo.pageIndex = page;
this.pageIndex = page;
const parmars = {
pageSize: this.searchInfo.pageSize,
pageIndex: this.searchInfo.pageIndex
pageIndex: this.searchInfo.pageIndex,
};
queryaccountList(parmars).then(res => {
if (res.data.success == true) {
......@@ -467,7 +364,7 @@ export default {
// 删除单条账户
delateAccount() {
const parmars = {
id: this.I
id: this.I,
};
Delateaccount(parmars).then(res => {
if (res.data.success == true) {
......@@ -481,9 +378,9 @@ export default {
delateall() {
if (this.checkboxList.length == 0 || this.delateArr.length == 0) {
this.$Notice.error({
title: "提示",
desc: "选项不能为空",
duration: "2"
title: '提示',
desc: '选项不能为空',
duration: '2',
});
return;
}
......@@ -494,9 +391,9 @@ export default {
delateAllAccount(this.delateARR).then(res => {
if (res.data.success == true) {
this.$Notice.success({
title: "提示",
desc: "删除成功",
duration: "2"
title: '提示',
desc: '删除成功',
duration: '2',
});
this.modal3 = false;
this.SearchList(this.pageT);
......@@ -511,14 +408,14 @@ export default {
// 确认恢复初始密码
recovery() {
const parmars = {
id: this.I
id: this.I,
};
recoveryPassword(parmars).then(res => {
if (res.data.success == true) {
this.$Notice.success({
title: "提示",
desc: "恢复密码成功",
duration: "2"
title: '提示',
desc: '恢复密码成功',
duration: '2',
});
this.modal1 = false;
}
......@@ -533,7 +430,7 @@ export default {
this.searchInfo.pageSize = page;
this.pageSize = page;
this.SearchList();
}
},
},
watch: {
checkboxList: {
......@@ -548,12 +445,12 @@ export default {
this.checked = false;
}
},
deep: true
}
deep: true,
},
},
mounted() {
this.SearchList();
}
},
};
</script>
<style scoped>
......
......@@ -2,26 +2,14 @@
<div class="emailMange">
<div class="addEmail">
<p style="margin-top:10px">
<span style="font-size:18px;color:#2d8cf0;margin-left:18px"
>新增接收邮箱</span
>
<span style="margin-left:10px;color:Grey"
>绑定邮箱以接收简历,仅可绑定一个邮箱</span
>
<span style="font-size:18px;color:#2d8cf0;margin-left:18px">新增接收邮箱</span>
<span style="margin-left:10px;color:Grey">绑定邮箱以接收简历,仅可绑定一个邮箱</span>
</p>
<Form :label-width="100" :model="formInline" :rules="ruleInline">
<FormItem label="邮箱账号" style="margin-top:20px" prop="emailNumber">
<Input
placeholder="请输入企业邮箱"
style="width:300px"
v-model="formInline.emailNumber"
/>
<Input placeholder="请输入企业邮箱" style="width:300px" v-model="formInline.emailNumber" />
</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:ss"
......@@ -33,78 +21,28 @@
:editable="false"
></DatePicker
><br />
<span style="font-size:8px;margin-left:0px;"
><Icon type="md-information-circle" />最长可同步30天</span
>
<span style="font-size:8px;margin-left:0px;"><Icon type="md-information-circle" />最长可同步30天</span>
</FormItem>
<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"
type="password"
/><br />
<span style="font-size:8px;position: relative;top:0px left:30px"
><Icon
type="md-information-circle"
/>邮箱密码在绑定后再次修改,请及时点击修改来更新。</span
>
<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" type="password" /><br />
<span style="font-size:8px;position: relative;top:0px left:30px"><Icon type="md-information-circle" />邮箱密码在绑定后再次修改,请及时点击修改来更新。</span>
</FormItem>
<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"
:maxlength="5"
/>
<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" :maxlength="5" />
</FormItem>
<Button
type="primary"
style="position: absolute;top:130px;left: 910px;"
:disabled="disabled"
@click="bindingSynchronizat"
>绑定并开始同步</Button
>
<Button type="primary" style="position: absolute;top:130px;left: 910px;" :disabled="disabled" @click="bindingSynchronizat">绑定并开始同步</Button>
</Form>
</div>
<div class="Emailmange">
<p style="height:40px;line-height:40px">
<span style="font-size:18px;color:#2d8cf0;margin-left:18px"
>邮箱管理</span
>
<span style="margin-left:10px;color:Grey"
>解绑后不再接受该邮箱下的简历,之前接收的简历仍然保留。</span
>
<span style="font-size:18px;color:#2d8cf0;margin-left:18px">邮箱管理</span>
<span style="margin-left:10px;color:Grey">解绑后不再接受该邮箱下的简历,之前接收的简历仍然保留。</span>
</p>
<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;cursor:pointer"
v-show="idAdmin == true"
/>
<span style="margin-left:5px;cursor:pointer" v-show="idAdmin == true"
>全选</span
>
<span
style="margin-left:40px;color:#2d8cf0;cursor:pointer"
@click="UntyingAllmodeal"
v-show="idAdmin == true"
>解绑</span
>
<input type="checkbox" class="input-checkbox" v-model="checked" v-on:click="checkedAll" style="margin-left:25px;cursor:pointer" v-show="idAdmin == true" />
<span style="margin-left:5px;cursor:pointer" v-show="idAdmin == true">全选</span>
<span style="margin-left:40px;color:#2d8cf0;cursor:pointer" @click="UntyingAllmodeal" v-show="idAdmin == true">解绑</span>
</p>
<!-- <Spin size="large" fix v-if="spinShow" style="font-size:25px" v-show="idAdmin==true">加载中...</Spin> -->
<div v-for="item in ajaxData" :key="item.id" class="emailList">
......@@ -119,26 +57,12 @@
/>
<span style="margin-left:0.3%">{{ item.belongs }}</span>
<span style="margin-left:0.5%;">{{ item.emailName }}</span>
<span style="margin-left:0.5%;"
>同步时间 | {{ item.syncStartDate }}</span
>
<span style="margin-left:0.5%;">同步时间 | {{ item.syncStartDate }}</span>
<span style="margin-left:2%;">新建时间 | {{ item.createTime }}</span>
<span
style="margin-left:1%;color:#2d8cf0;cursor:pointer"
@click="UpdateEMAIL(item.emailName, item.belongs, item.id)"
>修改</span
>
<span
style="margin-left:1%;color:#2d8cf0;cursor:pointer"
@click="UnbindingModal(item.id)"
>解绑</span
>
<span style="margin-left:5%;" v-if="item.c == '正常'">{{
item.syncMailMsg
}}</span>
<span style="margin-left:5%;color:red" v-if="item.c == '系统'">{{
item.syncMailMsg
}}</span>
<span style="margin-left:1%;color:#2d8cf0;cursor:pointer" @click="UpdateEMAIL(item.emailName, item.belongs, item.id)">修改</span>
<span style="margin-left:1%;color:#2d8cf0;cursor:pointer" @click="UnbindingModal(item.id)">解绑</span>
<span style="margin-left:5%;" v-if="item.c == '正常'">{{ item.syncMailMsg }}</span>
<span style="margin-left:5%;color:red" v-if="item.c == '系统'">{{ item.syncMailMsg }}</span>
</div>
<div class="pageBottom" v-show="this.idAdmin == true">
<Page
......@@ -157,23 +81,16 @@
<Modal v-model="modal1" :closable="false" :footer-hide="true" width="250px">
<h3 style="text-align:center">提示</h3>
<p style="text-align:center">系统错误,请联系开发者!</p>
<h2
style="text-align:center;font-size:18px;color:#2d8cf0"
@click="modal1 = false"
>
<h2 style="text-align:center;font-size:18px;color:#2d8cf0" @click="modal1 = false">
确定
</h2>
</Modal>
<!-- 同步成功 -->
<Modal v-model="modal2" :closable="false" :footer-hide="true" width="270px">
<h3 style="text-align:center">提示</h3>
<p style="height:30px;line-height:30px">
同步完成,如密码发生改变,请及时点击<br /><span>修改</span>来重置密码
</p>
<p style="height:30px;line-height:30px">同步完成,如密码发生改变,请及时点击<br /><span>修改</span>来重置密码</p>
<!-- <h2 style="text-align:center;font-size:18px;color:#2d8cf0;height:40px;line-height:40px;margin-top:30px" @click="pushlist">我已知晓</h2> -->
<Button type="primary" style="margin:40px 0 0 80px" @click="iKnow"
>我已知晓</Button
>
<Button type="primary" style="margin:40px 0 0 80px" @click="iKnow">我已知晓</Button>
</Modal>
<!-- 同步绑定 -->
<Modal v-model="modal3" :closable="false" :footer-hide="true" width="250px">
......@@ -186,45 +103,14 @@
<div style="height:230px">
<Form>
<FormItem label="邮箱账号" style="margin-top:20px" prop="emailNumber">
<Input
placeholder="请输入企业邮箱"
v-model="Uusername"
style="width:300px;color:Gainsboro"
disabled
/>
<Input placeholder="请输入企业邮箱" v-model="Uusername" style="width:300px;color:Gainsboro" disabled />
</FormItem>
<FormItem
label="邮箱密码"
prop="emailPsd"
:label-width="180"
style="position: absolute;top:130px;left:-105px"
>
<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"
:options="options3"
/>邮箱密码在绑定后再次修改,请及时点击修改来更新。</span
>
<FormItem label="邮箱密码" prop="emailPsd" :label-width="180" style="position: absolute;top:130px;left:-105px">
<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" :options="options3" />邮箱密码在绑定后再次修改,请及时点击修改来更新。</span>
</FormItem>
<FormItem
label="所属人"
style=" position: absolute;top:220px;left: -100px"
prop="UserName"
:label-width="180"
>
<Input
placeholder="请输入所属着真实的姓名"
style="width:300px"
v-model="Ublengs"
:maxlength="5"
/>
<FormItem label="所属人" style=" position: absolute;top:220px;left: -100px" prop="UserName" :label-width="180">
<Input placeholder="请输入所属着真实的姓名" style="width:300px" v-model="Ublengs" :maxlength="5" />
</FormItem>
</Form>
</div>
......@@ -257,14 +143,8 @@
</div>
</template>
<script>
import {
queryemailList,
Synchronization,
jiebangEmail,
updateemailTWO,
UntyingAll
} from "../../api/stystem.server.js";
import moment from "moment";
import { queryemailList, Synchronization, jiebangEmail, updateemailTWO, UntyingAll } from '../../api/stystem.server.js';
import moment from 'moment';
export default {
data() {
return {
......@@ -274,30 +154,27 @@ export default {
modal4: false,
modal5: false,
modal6: false,
condition: "",
Massage: "",
pageT: "",
condition: '',
Massage: '',
pageT: '',
spinShow: true,
idAdmin: "",
admin: "",
NAme: "",
DATA: "",
Tname: "",
idAdmin: '',
admin: '',
NAme: '',
DATA: '',
Tname: '',
options3: {
disabledDate(date) {
return (
(date && date.valueOf() > Date.now()) ||
date.valueOf() < Date.now() - 3600 * 1000 * 30 * 24
);
}
return (date && date.valueOf() > Date.now()) || date.valueOf() < Date.now() - 3600 * 1000 * 30 * 24;
},
},
UpassWord: "",
Uusername: "",
decisionStartTime: "",
Ublengs: "",
Uid: "",
UpassWord: '',
Uusername: '',
decisionStartTime: '',
Ublengs: '',
Uid: '',
UntyingAllARR: [],
Tblengs: "",
Tblengs: '',
checkboxList: [],
checked: false,
disabled: false,
......@@ -307,12 +184,12 @@ export default {
searchInfo: {
pageSize: 30,
pageIndex: 1,
id: ""
id: '',
},
formInline: {
emailNumber: "",
emailPsd: "",
UserName: ""
emailNumber: '',
emailPsd: '',
UserName: '',
},
ruleInline: {
emailNumber: [
......@@ -320,19 +197,15 @@ export default {
{
required: true,
pattern: /\w[-\w.+]*@([A-Za-z0-9][-A-Za-z0-9]+\.)+[A-Za-z]{2,14}/,
message: "请输入正确的邮箱账号",
trigger: "blur"
}
],
emailPsd: [
{ required: true, message: "请输入正确的密码", trigger: "blur" }
message: '请输入正确的邮箱账号',
trigger: 'blur',
},
],
UserName: [
{ required: true, message: "请输入正确的姓名", trigger: "blur" }
]
emailPsd: [{ required: true, message: '请输入正确的密码', trigger: 'blur' }],
UserName: [{ required: true, message: '请输入正确的姓名', trigger: 'blur' }],
},
ajaxData: [],
checkData: [] // 双向数据绑定的数组
checkData: [], // 双向数据绑定的数组
};
},
methods: {
......@@ -352,16 +225,11 @@ export default {
},
// 绑定同步邮箱
bindingSynchronizat() {
if (
this.formInline.emailNumber == "" ||
this.formInline.emailPsd == "" ||
this.formInline.UserName == "" ||
this.DATA == ""
) {
if (this.formInline.emailNumber == '' || this.formInline.emailPsd == '' || this.formInline.UserName == '' || this.DATA == '') {
this.$Notice.error({
title: "提示",
desc: "请您填写完整的信息",
duration: "2"
title: '提示',
desc: '请您填写完整的信息',
duration: '2',
});
return;
}
......@@ -371,17 +239,17 @@ export default {
emailName: this.formInline.emailNumber,
emailPassword: this.formInline.emailPsd,
belongs: this.formInline.UserName,
syncStartDate: moment(this.DATA).format("YYYY-MM-DD HH:mm:ss")
syncStartDate: moment(this.DATA).format('YYYY-MM-DD HH:mm:ss'),
};
Synchronization(parmars).then(
res => {
if (res.data.success == true) {
this.modal3 = false;
this.modal2 = true;
this.formInline.emailNumber = "";
this.formInline.emailPsd = "";
this.formInline.UserName = "";
this.DATA = "";
this.formInline.emailNumber = '';
this.formInline.emailPsd = '';
this.formInline.UserName = '';
this.DATA = '';
this.SearchList();
// this.disabled=false
}
......@@ -390,16 +258,16 @@ export default {
this.disabled = false;
this.Massage = res.data.body.message;
this.$Notice.error({
title: "提示",
title: '提示',
desc: this.Massage,
duration: 2
duration: 2,
});
}
},
() => {
this.modal3 = false;
// this.modal1=true
this.formInline.emailPsd = "";
this.formInline.emailPsd = '';
}
);
},
......@@ -412,12 +280,12 @@ export default {
},
// 查询邮箱列表
SearchList(page) {
page = typeof page === "number" ? page : 1;
page = typeof page === 'number' ? page : 1;
this.searchInfo.pageIndex = page;
this.pageIndex = page;
const parmars = {
pageSize: this.searchInfo.pageSize,
pageIndex: this.searchInfo.pageIndex
pageIndex: this.searchInfo.pageIndex,
};
queryemailList(parmars).then(res => {
if (res.data.success == true) {
......@@ -433,10 +301,7 @@ export default {
item.STA = false;
item.syncFlag = item.syncFlag;
item.syncMailMsg = item.syncMailMsg;
item.c =
item.syncMailMsg == null
? item.syncMailMsg
: item.syncMailMsg.substring(0, 2);
item.c = item.syncMailMsg == null ? item.syncMailMsg : item.syncMailMsg.substring(0, 2);
return item;
});
}
......@@ -461,11 +326,11 @@ export default {
},
// 修改后重新绑定邮箱并保存
UpdateemailTwo() {
if (this.UpassWord == "" || this.Uusername == "" || this.Ublengs == "") {
if (this.UpassWord == '' || this.Uusername == '' || this.Ublengs == '') {
this.$Notice.error({
title: "提示",
desc: "请您填写完整的信息",
duration: "2"
title: '提示',
desc: '请您填写完整的信息',
duration: '2',
});
return;
}
......@@ -473,25 +338,25 @@ export default {
emailName: this.Uusername,
emailPassword: this.UpassWord,
belongs: this.Ublengs,
id: this.Uid
id: this.Uid,
};
updateemailTWO(parmars).then(res => {
if (res.data.success == true) {
this.UpassWord = "";
this.UpassWord = '';
this.modal4 = false;
this.SearchList(this.pageT);
this.$Notice.success({
title: "提示",
desc: "修改成功",
duration: "2"
title: '提示',
desc: '修改成功',
duration: '2',
});
} else {
this.$Notice.error({
title: "提示",
desc: "你填写的密码有误",
duration: "2"
title: '提示',
desc: '你填写的密码有误',
duration: '2',
});
this.UpassWord = "";
this.UpassWord = '';
}
});
},
......@@ -504,9 +369,9 @@ export default {
jiebangEmail(this.NAme).then(res => {
if (res.data.success == true) {
this.$Notice.success({
title: "提示",
desc: "解绑成功",
duration: 2
title: '提示',
desc: '解绑成功',
duration: 2,
});
this.modal5 = false;
this.SearchList(this.pageT);
......@@ -517,9 +382,9 @@ export default {
UntyingAllmodeal() {
if (this.UntyingAllARR.length == 0) {
this.$Notice.error({
title: "提示",
desc: "选项不能为空",
duration: 2
title: '提示',
desc: '选项不能为空',
duration: 2,
});
return;
}
......@@ -534,9 +399,9 @@ export default {
UntyingAll(this.UntyingAllARR).then(res => {
if (res.data.success == true) {
this.$Notice.success({
title: "提示",
desc: "解绑成功",
duration: 2
title: '提示',
desc: '解绑成功',
duration: 2,
});
this.modal6 = false;
this.SearchList(this.pageT);
......@@ -553,45 +418,38 @@ export default {
this.SearchList(this.pageT);
},
isadminmethods() {
this.admin = localStorage.getItem("isADMIN");
this.admin = localStorage.getItem('isADMIN');
const c = JSON.parse(this.admin);
this.idAdmin = c.isAdmin;
},
updatapassT() {
this.modal4 = false;
this.UpassWord = "";
this.UpassWord = '';
},
changeStartTime: function(e, b) {
this.DATA = b;
var time = e;
var that = this;
var days =
new Date(
new Date().getFullYear(),
new Date().getMonth() + 1,
0
).getDate() - 1;
var startEndTime = time
? new Date(time).valueOf() - days * 24 * 60 * 60 * 1000
: "";
var endEndTime = time ? new Date(time).valueOf() : "";
if (time === "") {
var days = new Date(new Date().getFullYear(), new Date().getMonth() + 1, 0).getDate() - 1;
var startEndTime = time ? new Date(time).valueOf() - days * 24 * 60 * 60 * 1000 : '';
var endEndTime = time ? new Date(time).valueOf() : '';
if (time === '') {
this.decisionStartTime = {
disabledDate(data) {
return data.valueOf() < 0;
}
},
};
} else {
this.decisionStartTime = {
disabledDate(data) {
if (that.qualityCheck.decisionEndTime === "") {
if (that.qualityCheck.decisionEndTime === '') {
return new Date();
}
return data.valueOf() < startEndTime || data.valueOf() > endEndTime;
}
},
};
}
}
},
},
watch: {
......@@ -603,13 +461,13 @@ export default {
this.checked = false;
}
},
deep: true
}
deep: true,
},
},
mounted() {
this.isadminmethods();
this.SearchList();
}
},
};
</script>
<style>
......
......@@ -3,44 +3,18 @@
<div class="upload-left">
<div class="uploadC" style="background:rgba(244,244,244,1);height:300px">
<div class="upload-title">
<Input
type="text"
v-model="fileName"
style="width:70%;margin-left:4%;margin-top:40px"
></Input>
<input
ref="input"
class="nativeInput"
type="file"
:class="['prefixCls' + '-input']"
@change="handleChange"
:multiple="true"
:format="['pdf', 'doc', 'docx']"
:accept="accept"
/>
<Button
@click="selFiles"
style="width:20%;margin-top:40px;margin-left:-4px;color:black"
>选择文件</Button
>
<Input type="text" v-model="fileName" style="width:70%;margin-left:4%;margin-top:40px"></Input>
<input ref="input" class="nativeInput" type="file" :class="['prefixCls' + '-input']" @change="handleChange" :multiple="true" :format="['pdf', 'doc', 'docx']" :accept="accept" />
<Button @click="selFiles" style="width:20%;margin-top:40px;margin-left:-4px;color:black">选择文件</Button>
<div class="contentTips">
<p
style="font-size:12px;margin-left:5%;text-align:center;height:40px;line-height:40px;width:90%;display:inline-block;margin-top:30px"
>
<p style="font-size:12px;margin-left:5%;text-align:center;height:40px;line-height:40px;width:90%;display:inline-block;margin-top:30px">
单个文件不能大于2MB,仅支持word,pdf格式,暂时不支持压缩格式
</p>
<p
style="font-size:12px;margin-left:2%;text-align:center;height:40px;line-height:40px;width:90%"
>
<p style="font-size:12px;margin-left:2%;text-align:center;height:40px;line-height:40px;width:90%">
支持最多二十份简历批量上传
</p>
</div>
<Button
@click="uploadBtn"
style="width:20%;margin-left:38%;margin-top:30px"
type="primary"
>上传</Button
>
<Button @click="uploadBtn" style="width:20%;margin-left:38%;margin-top:30px" type="primary">上传</Button>
</div>
<!-- 上传文件 -->
<Modal v-model="uploadModal" :closable="false" :mask-closable="false">
......@@ -50,34 +24,13 @@
</h4>
<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;"
v-show="item.Code == 0"
>{{ item.title }}</span
>
<span
class="title"
style="float:right;color:red"
v-show="item.Code == 1"
<span class="title" style="float:right;" v-show="item.Code == 0">{{ item.title }}</span>
<span class="title" style="float:right;color:red" v-show="item.Code == 1"
>{{ item.title }}
<Checkbox
v-model="item.sStatus"
@on-change="selectfile(item.sStatus, item.name)"
></Checkbox
>
<Checkbox v-model="item.sStatus" @on-change="selectfile(item.sStatus, item.name)"></Checkbox>
</span>
<span
class="title"
style="float:right;color:red"
v-show="item.Code == 2"
>{{ item.title }}</span
>
<Progress
:percent="item.percentage"
hide-info
:status="item.status"
></Progress>
<span class="title" style="float:right;color:red" v-show="item.Code == 2">{{ item.title }}</span>
<Progress :percent="item.percentage" hide-info :status="item.status"></Progress>
</div>
</div>
<div slot="footer">
......@@ -99,65 +52,26 @@
</Modal>
</div>
<div class="leftcontrentFotter">
<h5
style="width:100%;height:40px;background:rgb(0,176,160);text-align:center;line-height:40px;color:white;font-size:15px;font-weight:bold"
>
<h5 style="width:100%;height:40px;background:rgb(0,176,160);text-align:center;line-height:40px;color:white;font-size:15px;font-weight:bold">
上传记录
</h5>
<div
style="width:100%;background:rgb(0,176,160); opacity: 0.7;overflow-y:auto;height:93%;"
>
<div style="width:100%;background:rgb(0,176,160); opacity: 0.7;overflow-y:auto;height:93%;">
<!-- <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, item.uid)"
style="margin-top:10px"
>
<span
style="color:#000000;margin:10px 0 0 10px;display:inline-block;overflow:hidden;text-overflow:ellipsis;white-space: nowrap; cursor:pointer"
>{{ item.name }} |</span
>
<span
style="color:#000000;display:inline-block;overflow:hidden;text-overflow:ellipsis;white-space: nowrap; cursor:pointer"
>{{ item.mobile }} |</span
>
<span
style="color:#000000;display:inline-block;overflow:hidden;text-overflow:ellipsis;white-space: nowrap; cursor:pointer"
>{{ item.age }}岁|</span
>
<span
style="color:#000000;display:inline-block;overflow:hidden;text-overflow:ellipsis;white-space: nowrap; cursor:pointer"
>{{ item.gender }} |</span
>
<span
style="color:#000000;display:inline-block;overflow:hidden;text-overflow:ellipsis;white-space: nowrap; cursor:pointer"
>{{ item.workYears }}年 |</span
>
<span
style="color:#000000;display:inline-block;overflow:hidden;text-overflow:ellipsis;white-space: nowrap; cursor:pointer"
>{{ item.degree }} |</span
>
<span
style="color:#000000;width:28%;display:inline-block;overflow:hidden;text-overflow:ellipsis;white-space: nowrap; cursor:pointer"
>{{ item.expectedTitle }}</span
>
<div class="contentMASSAGE" v-for="(item, index) in ajaxData" :key="index">
<p @click="getResumeData(item.resumeId, item.uid)" style="margin-top:10px">
<span style="color:#000000;margin:10px 0 0 10px;display:inline-block;overflow:hidden;text-overflow:ellipsis;white-space: nowrap; cursor:pointer">{{ item.name }} |</span>
<span style="color:#000000;display:inline-block;overflow:hidden;text-overflow:ellipsis;white-space: nowrap; cursor:pointer">{{ item.mobile }} |</span>
<span style="color:#000000;display:inline-block;overflow:hidden;text-overflow:ellipsis;white-space: nowrap; cursor:pointer">{{ item.age }}岁|</span>
<span style="color:#000000;display:inline-block;overflow:hidden;text-overflow:ellipsis;white-space: nowrap; cursor:pointer">{{ item.gender }} |</span>
<span style="color:#000000;display:inline-block;overflow:hidden;text-overflow:ellipsis;white-space: nowrap; cursor:pointer">{{ item.workYears }}年 |</span>
<span style="color:#000000;display:inline-block;overflow:hidden;text-overflow:ellipsis;white-space: nowrap; cursor:pointer">{{ item.degree }} |</span>
<span style="color:#000000;width:28%;display:inline-block;overflow:hidden;text-overflow:ellipsis;white-space: nowrap; cursor:pointer">{{ item.expectedTitle }}</span>
</p>
<p style="margin-top:0px;color:Grey">
<span style="color:Grey;margin:5px 0 0 10px;display:inline-block"
>{{ item.createTime }}入库|</span
>
<span style="color:Grey;margin:5px 0 0 10px;display:inline-block">{{ item.createTime }}入库|</span>
<span>{{ item.creator }}</span>
</p>
<Button
type="primary"
style="margin:-55px 0 0 83%;width:60px;z-index:99"
@click="delateONEModal(item.resumeId)"
>删除</Button
>
<Button type="primary" style="margin:-55px 0 0 83%;width:60px;z-index:99" @click="delateONEModal(item.resumeId)">删除</Button>
</div>
</div>
</div>
......@@ -168,34 +82,15 @@
</p>
<div style="width:100%;float:left;">
<div style="margin:0 auto;width:860px">
<div
class="personalInformation"
v-show="JSON.stringify(resume) !== '{}'"
>
<div class="personalInformation" v-show="JSON.stringify(resume) !== '{}'">
<p class="bestmessage">
<span>
<img
src="http://xyqbui.lkbang.net/image/icon_%E5%9F%BA%E6%9C%AC%E4%BF%A1%E6%81%AF_23_16px.png"
style="height:16px;width:23px;vertical-align: middle;margin-top:-4px"
/></span>
<span> <img src="http://xyqbui.lkbang.net/image/icon_%E5%9F%BA%E6%9C%AC%E4%BF%A1%E6%81%AF_23_16px.png" style="height:16px;width:23px;vertical-align: middle;margin-top:-4px"/></span>
<span style="margin-left:7px;font-size:16px;color:#0092FF"
>基本信息</span
>
<span style="float:right;width:50px;height:24px;margin-right:5px"
><Button
type="primary"
size="small"
style="width:50px;height:24px"
@click="downloadONE(downloadId)"
>下载</Button
></span
>
<span style="margin-left:7px;font-size:16px;color:#0092FF">基本信息</span>
<span style="float:right;width:50px;height:24px;margin-right:5px"><Button type="primary" size="small" style="width:50px;height:24px" @click="downloadONE(downloadId)">下载</Button></span>
</p>
<div class="personalInformation-left">
<p style="margin-top:20px">
姓名:{{ resume && resume.ownerName }}
</p>
<p style="margin-top:20px">姓名:{{ resume && resume.ownerName }}</p>
<p>联系电话:{{ resume && resume.ownerMobile }}</p>
<p>电子邮箱:{{ resume && resume.email }}</p>
<p>所在地:{{ resume && resume.locationCity }}</p>
......@@ -204,45 +99,27 @@
<p>期望职位:{{ resume && resume.expectTitles }}</p>
</div>
<div class="personalInformation-right">
<p style="margin-top:20px">
年龄:{{ resume && resume.ownerAge }}
</p>
<p style="margin-top:20px">年龄:{{ resume && resume.ownerAge }}</p>
<p>职位:{{ resume && resume.ownerExpectTitles }}</p>
<p>学历:{{ resume && resume.ownerHighestDegree }}</p>
<p>经验:{{ resume && resume.workYearsOriginal }}</p>
<p style="margin-top:30px">
期望薪资:{{ resume && resume.expectSalary }}
</p>
<p style="margin-top:30px">期望薪资:{{ resume && resume.expectSalary }}</p>
<p>期望地区:{{ resume && resume.city }}</p>
</div>
</div>
<div class="workExperience" v-show="roList.length !== 0">
<p class="bestmessage">
<span>
<img
img
src="http://xyqbui.lkbang.net/image/icon_%E5%B7%A5%E4%BD%9C%E7%BB%8F%E5%8E%86_20_18px.png"
style="height:16px;width:23px; vertical-align: middle;margin-top:-4px"
/></span>
<span> <img img src="http://xyqbui.lkbang.net/image/icon_%E5%B7%A5%E4%BD%9C%E7%BB%8F%E5%8E%86_20_18px.png" style="height:16px;width:23px; vertical-align: middle;margin-top:-4px"/></span>
<span style="margin-left:7px;font-size:16px;color:#0092FF"
>工作经历</span
>
<span style="margin-left:7px;font-size:16px;color:#0092FF">工作经历</span>
</p>
<div
class="workExperience-detail"
v-for="(item, index) in roList"
:key="index"
>
<div class="workExperience-detail" v-for="(item, index) in roList" :key="index">
<div class="workExperience-top">
<p style="height:28px;line-height:28px;font-size:14px;">
<span style="margin-left:30px"
>{{ item.startTime }}-{{ item.endTime }}</span
>
<span style="margin-left:30px">{{ item.startTime }}-{{ item.endTime }}</span>
<span style="margin-left:18px"
><span
>{{ item.company
}}<span>({{ item.workTime }})</span></span
>{{ item.company }}<span>({{ item.workTime }})</span></span
></span
>
<span style="float:right;margin-right:30px">
......@@ -251,9 +128,7 @@
</span>
</p>
<p style="height:28px;line-height:28px;font-size:14px;">
<span style="float:right;margin-right:30px">{{
item.department
}}</span>
<span style="float:right;margin-right:30px">{{ item.department }}</span>
</p>
</div>
<div class="workExperience-bottom">{{ item.desc }}</div>
......@@ -262,27 +137,15 @@
<div class="projectExperience" v-show="rpList.length !== 0">
<p class="bestmessage">
<span>
<img
src="http://xyqbui.lkbang.net/image/icon_%E9%A1%B9%E7%9B%AE%E7%BB%8F%E5%8E%86_20_20px.png"
style="height:14px;width:19px; vertical-align: middle;margin-top:-4px;margin-left:2px"
<img src="http://xyqbui.lkbang.net/image/icon_%E9%A1%B9%E7%9B%AE%E7%BB%8F%E5%8E%86_20_20px.png" style="height:14px;width:19px; vertical-align: middle;margin-top:-4px;margin-left:2px"
/></span>
<span style="margin-left:7px;font-size:16px;color:#0092FF"
>项目经历</span
>
<span style="margin-left:7px;font-size:16px;color:#0092FF">项目经历</span>
</p>
<div
class="projectExperience-detail"
v-for="(item, index) in rpList"
:key="index"
>
<div class="projectExperience-detail" v-for="(item, index) in rpList" :key="index">
<div class="projectExperience-top">
<p style="height:28px;line-height:28px;font-size:14px;">
<span style="margin-left:30px"
>{{ item.startYear }}/{{ item.startMonth }}-{{
item.endYear
}}/{{ item.endMonth }}</span
>
<span style="margin-left:30px">{{ item.startYear }}/{{ item.startMonth }}-{{ item.endYear }}/{{ item.endMonth }}</span>
<span style="margin-left:18px"
><span>{{ item.name }}<span></span></span
></span>
......@@ -296,28 +159,14 @@
</div>
<div class="internshipExperience" v-show="riList.length !== 0">
<p class="bestmessage">
<span>
<img
src="http://xyqbui.lkbang.net/image/icon_%E5%AE%9E%E4%B9%A0%E7%BB%8F%E5%8E%86_21_18px.png"
style="height:16px;width:23px; vertical-align: middle;margin-top:-4px"
/></span>
<span> <img src="http://xyqbui.lkbang.net/image/icon_%E5%AE%9E%E4%B9%A0%E7%BB%8F%E5%8E%86_21_18px.png" style="height:16px;width:23px; vertical-align: middle;margin-top:-4px"/></span>
<span style="margin-left:7px;font-size:16px;color:#0092FF"
>实习经历</span
>
<span style="margin-left:7px;font-size:16px;color:#0092FF">实习经历</span>
</p>
<div
class="internshipExperience-detail"
v-for="(item, index) in riList"
:key="index"
>
<div class="internshipExperience-detail" v-for="(item, index) in riList" :key="index">
<div class="internshipExperience-top">
<p style="height:28px;line-height:28px;font-size:14px;">
<span style="margin-left:30px"
>{{ item.startYear }}/{{ item.startMonth }}-{{
item.endYear
}}/{{ item.endMonth }}</span
>
<span style="margin-left:30px">{{ item.startYear }}/{{ item.startMonth }}-{{ item.endYear }}/{{ item.endMonth }}</span>
<span style="margin-left:18px"
><span>{{ item.company }}<span></span></span
></span>
......@@ -326,9 +175,7 @@
</span>
</p>
<p style="height:28px;line-height:28px;font-size:14px;">
<span style="float:right;margin-right:30px">{{
item.title
}}</span>
<span style="float:right;margin-right:30px">{{ item.title }}</span>
</p>
</div>
<div class="internshipExperience-bottom">{{ item.desc }}</div>
......@@ -336,28 +183,14 @@
</div>
<div class="educationalExperience" v-show="reList.length !== 0">
<p class="bestmessage">
<span>
<img
src="http://xyqbui.lkbang.net/image/icon_%E6%95%99%E8%82%B2%E7%BB%8F%E5%8E%86_26_20px.png"
style="height:16px;width:23px; vertical-align: middle;margin-top:-4px"
/></span>
<span> <img src="http://xyqbui.lkbang.net/image/icon_%E6%95%99%E8%82%B2%E7%BB%8F%E5%8E%86_26_20px.png" style="height:16px;width:23px; vertical-align: middle;margin-top:-4px"/></span>
<span style="margin-left:7px;font-size:16px;color:#0092FF"
>教育经历</span
>
<span style="margin-left:7px;font-size:16px;color:#0092FF">教育经历</span>
</p>
<div
class="educationalExperience-detail"
v-for="(item, index) in reList"
:key="index"
>
<div class="educationalExperience-detail" v-for="(item, index) in reList" :key="index">
<div class="educationalExperience-content">
<div class="educationalExperience-left">
<p style="line-height:25px;margin-top:20px">
{{ item.school }}(({{ item.startYear }}.{{
item.startMonth
}}-{{ item.endYear }}.{{ item.endMonth }}))
</p>
<p style="line-height:25px;margin-top:20px">{{ item.school }}(({{ item.startYear }}.{{ item.startMonth }}-{{ item.endYear }}.{{ item.endMonth }}))</p>
<p style="margin-top:20px;">专业:{{ item.major }}</p>
</div>
<div class="educationalExperience-right">
......@@ -368,15 +201,9 @@
</div>
<div class="Self-evaluation" v-show="JSON.stringify(resume) !== '{}'">
<p class="bestmessage">
<span>
<img
src="http://xyqbui.lkbang.net/image/icon_%E8%87%AA%E6%88%91%E8%AF%84%E4%BB%B7_18_18px.png"
style="height:16px;width:23px; vertical-align: middle;margin-top:-4px"
/></span>
<span> <img src="http://xyqbui.lkbang.net/image/icon_%E8%87%AA%E6%88%91%E8%AF%84%E4%BB%B7_18_18px.png" style="height:16px;width:23px; vertical-align: middle;margin-top:-4px"/></span>
<span style="margin-left:7px;font-size:16px;color:#0092FF"
>自我评价</span
>
<span style="margin-left:7px;font-size:16px;color:#0092FF">自我评价</span>
</p>
<div class="evaluation-content">
{{ resume && resume.selfEvaluate }}
......@@ -388,82 +215,76 @@
</div>
</template>
<script>
import {
getuploadNumber,
uploadfile,
serchList,
serchRESUMEdetail,
deleteREsumeUPLOad
} from "../../api/upload.server";
import { sapi } from "../../config";
import { uploadFile } from "../../service/ajax";
import { getuploadNumber, uploadfile, serchList, serchRESUMEdetail, deleteREsumeUPLOad } from '../../api/upload.server';
import { sapi } from '../../config';
import { uploadFile } from '../../service/ajax';
export default {
data() {
return {
uploadList: [],
dataList: [],
fileName: "",
fileName: '',
ajaxData: [],
delateARRALL: [],
replaceArr: [],
downloadId: "",
downloadId: '',
pageIndex: 1,
pageSize: 30,
isReplace: true,
newArr: [],
replaceName: "",
replaceName: '',
searchInfo: {
pageSize: 30,
pageIndex: 1
pageIndex: 1,
},
Sid: "",
Sid: '',
single: true,
checkboxList: [],
filetile: "上传中请稍后...",
filetile: '上传中请稍后...',
totalSize: null,
uploadModal: false,
accept: ".doc,.docx,.pdf",
accept: '.doc,.docx,.pdf',
fileSize: 2048,
progressStatus: {
0: "active",
2: "wrong",
1: "wrong"
0: 'active',
2: 'wrong',
1: 'wrong',
},
files: null,
activeT: false,
change: false,
massage: "",
Massage: "",
Code: "",
massage: '',
Massage: '',
Code: '',
action: `${sapi}/api/resume/upload`,
batchNum: "",
batchNum: '',
modal3: false,
modal1: false,
modal2: false,
modal6: false,
Filename: "",
uploadNUmber: "",
Filename: '',
uploadNUmber: '',
// uploadList:[],
a: [],
files: null,
b: "",
b: '',
uploadFile: [],
resume: {}, // 简历基本详情
riList: [], // 实习经历列表
roList: [], // 工作经历列表
rpList: [], // 项目经历列表
reList: [], // 教育经历列表
serchID: ""
serchID: '',
};
},
methods: {
handleChange(e) {
this.fileName = "";
this.fileName = '';
this.dataList = [];
const files = e.target.files;
this.files = e.target.files;
for (const key in files) {
if (key != "length" && key != "item") {
if (key != 'length' && key != 'item') {
const file = files[key];
const temp = {
name: file.name,
......@@ -472,10 +293,10 @@ export default {
type: file.type,
size: file.size,
title: null,
status: "active"
status: 'active',
};
this.dataList.push(temp);
this.fileName += files[key].name + ";";
this.fileName += files[key].name + ';';
}
}
if (!files) {
......@@ -486,44 +307,44 @@ export default {
uploadBtn() {
if (this.dataList.length < 1) {
this.$Notice.error({
title: "提示",
desc: "请您选择文件在上传",
duration: 2
title: '提示',
desc: '请您选择文件在上传',
duration: 2,
});
return;
}
if (this.dataList.length > 20) {
this.$Notice.error({
title: "提示",
desc: "批量上传文件不能大于20份",
duration: 2
title: '提示',
desc: '批量上传文件不能大于20份',
duration: 2,
});
this.$refs.input.value = "";
this.fileName = "";
this.$refs.input.value = '';
this.fileName = '';
this.dataList = [];
return;
}
if (this.handleMaxSize()) {
this.$Notice.error({
title: "提示",
desc: "单份文件不能大于2MB",
duration: 2
title: '提示',
desc: '单份文件不能大于2MB',
duration: 2,
});
this.$refs.input.value = "";
this.fileName = "";
this.$refs.input.value = '';
this.fileName = '';
this.dataList = [];
return;
}
this.uploadModal = true;
this.filetile = "上传中请稍后...";
this.filetile = '上传中请稍后...';
uploadFile({
headers: this.headers,
data: this.dataList,
batchNum: this.batchNum,
action: this.action,
batchNum: this.batchNum,
appendName: "batchNum",
appendFile: "recFile",
appendName: 'batchNum',
appendFile: 'recFile',
onProgress: e => {
setTimeout(() => {
this.handleProgress(e);
......@@ -537,7 +358,7 @@ export default {
},
onError: (err, response) => {
this.handleError(err, response, this.files);
}
},
});
},
handleProgress(e) {
......@@ -548,16 +369,14 @@ export default {
selectfile(data, name) {
this.replaceName = name;
if (data == false) {
this.replaceArr = this.replaceArr.filter(
item => item !== this.replaceName
);
this.replaceArr = this.replaceArr.filter(item => item !== this.replaceName);
} else {
this.replaceArr.push(this.replaceName);
}
},
handleSuccess(res, files) {
const data = res.body;
this.filetile = "上传完成";
this.filetile = '上传完成';
for (const key in data) {
const code = data[key].code;
this.Code = data[key].code;
......@@ -570,7 +389,7 @@ export default {
if (key == item.name) {
item.title = this.Massage;
if (item.Code == 2) {
progressStatus = { 2: "wrong" };
progressStatus = { 2: 'wrong' };
}
item.status = this.progressStatus[code];
item.Code = this.Code;
......@@ -594,12 +413,12 @@ export default {
},
closeModal() {
this.uploadModal = false;
this.$refs.input.value = "";
this.$refs.input.value = '';
this.dataList = [];
// this.replaceArr = []
this.fileName = "";
this.fileName = '';
this.activeT = false;
this.filetile = "上传中请稍后...";
this.filetile = '上传中请稍后...';
this.serchlist();
},
// 下载单条简历
......@@ -623,7 +442,7 @@ export default {
},
// 查询记录列表
serchlist(page) {
page = typeof page === "number" ? page : 1;
page = typeof page === 'number' ? page : 1;
this.searchInfo.pageIndex = page;
this.pageIndex = page;
const parmars = {
......@@ -631,8 +450,8 @@ export default {
pageIndex: this.searchInfo.pageIndex,
parameter: {
batchNum: this.batchNum,
replaceFileNameList: this.replaceArr
}
replaceFileNameList: this.replaceArr,
},
};
serchList(parmars).then(res => {
if (res.data.success == true) {
......@@ -649,8 +468,7 @@ export default {
item.expectedTitle = item.expectedTitle;
item.status = item.status;
item.uid = item.uid;
item.creator =
item.creator == "" ? item.creator : item.creator.split("_")[0];
item.creator = item.creator == '' ? item.creator : item.creator.split('_')[0];
item.createTime = item.createTime;
return item;
});
......@@ -661,7 +479,7 @@ export default {
getResumeData(sid, Uid) {
this.downloadId = sid;
const parmars = {
uid: Uid
uid: Uid,
};
serchRESUMEdetail(parmars).then(res => {
this.resume = res.data.body.resume;
......@@ -687,16 +505,16 @@ export default {
this.roList = [];
this.rpList = [];
this.reList = [];
this.downloadId = "";
this.downloadId = '';
this.serchlist();
}
});
}
},
},
async mounted() {
await this.getnumber();
this.serchlist();
}
},
};
</script>
<style lang="less" scoped>
......
import Vue from "vue";
import Router from "vue-router";
import Vue from 'vue';
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 login = r =>
require.ensure([], () => r(require("@/page/login/login.vue")), "login");
const update = r =>
require.ensure([], () => r(require("@/page/login/update.vue")), "update");
const pdfdetail = r =>
require.ensure(
[],
() => r(require("@/page/resume/pdfdetail.vue")),
"pdfdetail"
);
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"
);
const editor = r =>
require.ensure([], () => r(require("@/components/editor.vue")), "editor");
const getimage = r =>
require.ensure([], () => r(require("@/components/getimage.vue")), "getimage");
const login = r => require.ensure([], () => r(require('@/page/login/login.vue')), 'login');
const update = r => require.ensure([], () => r(require('@/page/login/update.vue')), 'update');
const pdfdetail = r => require.ensure([], () => r(require('@/page/resume/pdfdetail.vue')), 'pdfdetail');
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');
const editor = r => require.ensure([], () => r(require('@/components/editor.vue')), 'editor');
const getimage = r => require.ensure([], () => r(require('@/components/getimage.vue')), 'getimage');
// z注释
Vue.use(Router);
export default new Router({
mode: "history",
mode: 'history',
routes: [
{
path: "/",
redirect: "/home"
path: '/',
redirect: '/home',
},
{
path: "/login",
name: "login",
path: '/login',
name: 'login',
component: login,
meta: {
allowBack: false
}
allowBack: false,
},
},
{
path: "/sweepCode",
name: "sweepCode",
component: sweepCode
path: '/sweepCode',
name: 'sweepCode',
component: sweepCode,
},
{
path: "/update",
name: "update",
component: update
path: '/update',
name: 'update',
component: update,
},
{
path: "/getimage",
name: "getimage",
component: getimage
path: '/getimage',
name: 'getimage',
component: getimage,
},
{
path: "/resumeDetail",
name: "resumeDetail",
component: resumeDetail
path: '/resumeDetail',
name: 'resumeDetail',
component: resumeDetail,
},
{
path: "/pdfdetail",
name: "pdfdetail",
component: pdfdetail
path: '/pdfdetail',
name: 'pdfdetail',
component: pdfdetail,
},
{
path: "/editor",
name: "editor",
component: editor
path: '/editor',
name: 'editor',
component: editor,
},
{
path: "/home",
name: "home",
path: '/home',
name: 'home',
component: home,
children: [
{
path: "/interview",
name: "interview",
component: interview
path: '/interview',
name: 'interview',
component: interview,
},
{
path: "/allResume",
name: "allResume",
component: allResume
path: '/allResume',
name: 'allResume',
component: allResume,
},
{
path: "/channel/:channelname",
name: "channel",
component: channel
path: '/channel/:channelname',
name: 'channel',
component: channel,
},
{
path: "/account",
name: "account",
component: account
path: '/account',
name: 'account',
component: account,
},
{
path: "/emailMange",
name: "emailMange",
component: emailMange
path: '/emailMange',
name: 'emailMange',
component: emailMange,
},
{
path: "/QRcode",
name: "QRcode",
component: QRcode
path: '/QRcode',
name: 'QRcode',
component: QRcode,
},
{
path: "/upload",
name: "upload",
component: upload
}
]
}
]
path: '/upload',
name: 'upload',
component: upload,
},
],
},
],
});
// https://github.com/ElemeFE/element/blob/dev/packages/upload/src/ajax.js
import axios from "./http.service.js";
import axios from './http.service.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.method = 'post';
err.url = action;
return err;
}
......@@ -34,11 +34,10 @@ export function uploadFile(option) {
.post(action, formData, {
onUploadProgress: function(progressEvent) {
if (progressEvent.total > 0) {
progressEvent.percent =
(progressEvent.loaded / progressEvent.total) * 100;
progressEvent.percent = (progressEvent.loaded / progressEvent.total) * 100;
}
option.onProgress(progressEvent);
}
},
})
.then(res => {
option.onSuccess(res.data);
......@@ -48,7 +47,7 @@ export function uploadFile(option) {
});
}
export default function upload(option) {
if (typeof XMLHttpRequest === "undefined") {
if (typeof XMLHttpRequest === 'undefined') {
return;
}
......@@ -86,15 +85,15 @@ export default function upload(option) {
option.onSuccess(getBody(xhr));
};
xhr.open("post", action, true);
if ("withCredentials" in xhr) {
xhr.open('post', action, true);
if ('withCredentials' in xhr) {
xhr.withCredentials = true;
}
const headers = option.headers || {};
if (headers["X-Requested-With"] !== null) {
xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");
if (headers['X-Requested-With'] !== null) {
xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
}
for (const item in headers) {
......
import Cookie from "js-cookie";
import Cookie from 'js-cookie';
export default {
set: function(name, value) {
......@@ -9,5 +9,5 @@ export default {
},
remove: function(name) {
Cookie.remove(name);
}
},
};
import axios from "axios";
import Promise from "./promise.service.js";
import { Notice } from "iview";
import Vue from "vue";
import router from "../router/index.js";
import store from "../store";
import axios from 'axios';
import Promise from './promise.service.js';
import { Notice } from 'iview';
import Vue from 'vue';
import router from '../router/index.js';
import store from '../store';
var instance = axios.create({});
instance.defaults.timeout = 3600000;
instance.defaults.withCredentials = true;
instance.defaults.headers.post["Content-Type"] =
"application/x-www-form-urlencoded";
instance.defaults.headers["X-Requested-With"] = "XMLHttpRequest";
instance.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';
instance.defaults.headers['X-Requested-With'] = 'XMLHttpRequest';
let needLoadingRequestCount = 0;
function startLoading() {
store.state.loading = true;
......@@ -34,22 +33,16 @@ function tryHideFullScreenLoading() {
}, 200);
}
}
const needLoading = [
"resume/findListByQueryVO",
"sendMail/sendEmailTemplate",
"resume/forwardResume",
"interview/findListByQueryVO",
"resume/delete"
];
const needLoading = ['resume/findListByQueryVO', 'sendMail/sendEmailTemplate', 'resume/forwardResume', 'interview/findListByQueryVO', 'resume/delete'];
instance.interceptors.request.use(
function(config) {
// 在发送请求之前做些什么
if (!config.headers["Content-Type"]) {
config.headers["Content-Type"] = "application/x-www-form-urlencoded";
if (!config.headers['Content-Type']) {
config.headers['Content-Type'] = 'application/x-www-form-urlencoded';
}
const url = config.url.split("api/")[1];
const url = config.url.split('api/')[1];
const headers = config.headers;
if (headers.status != "init" && needLoading.includes(url)) {
if (headers.status != 'init' && needLoading.includes(url)) {
showFullScreenLoading();
}
delete headers.status;
......@@ -64,38 +57,37 @@ instance.interceptors.response.use(
function(response) {
// 在发送请求之前做些什么
const errorInfo = {
900: "cookie已失效,请重新登录",
901: "",
902: "您的账号已在其他地方登录,如不是您个人操作,请及时修改密码"
900: 'cookie已失效,请重新登录',
901: '',
902: '您的账号已在其他地方登录,如不是您个人操作,请及时修改密码',
};
tryHideFullScreenLoading();
if (response.status >= 200 && response.status < 300) {
const code =
(response.data && response.data.body && response.data.body.code) || "";
if (code == "900" || code == "901" || code == "902") {
if (!store.state.cookieTips && code != "901") {
store.dispatch("cookieTipsShow", true);
const code = (response.data && response.data.body && response.data.body.code) || '';
if (code == '900' || code == '901' || code == '902') {
if (!store.state.cookieTips && code != '901') {
store.dispatch('cookieTipsShow', true);
Notice.error({
render: h => {
return h(
"div",
'div',
{
style: {
paddingRight: "5px",
fontSize: "14px",
lineHeight: "20px",
color: "#17233d"
}
paddingRight: '5px',
fontSize: '14px',
lineHeight: '20px',
color: '#17233d',
},
},
errorInfo[code]
);
}
},
});
setTimeout(() => {
store.dispatch("cookieTipsHide", false);
store.dispatch('cookieTipsHide', false);
}, 2000);
}
router.replace({ name: "login" });
router.replace({ name: 'login' });
}
if (response.data.success) {
return Promise.resolve(response);
......
import localstorage from "./localstorage.service.js";
import localstorage from './localstorage.service.js';
export default {
init: function(router) {
router.beforeEach((to, form, next) => {
const token = localstorage.get("token");
if (
to.meta &&
!to.meta.allowBack &&
window.history &&
window.history.pushState
) {
const token = localstorage.get('token');
if (to.meta && !to.meta.allowBack && window.history && window.history.pushState) {
// 登录页面不能后退
history.pushState(null, null, document.URL);
}
if (
to.name == "login" ||
to.name == "update" ||
to.name == "sweepCode" ||
to.name == "resumeDetail" ||
to.name == "pdfdetail"
) {
if (to.name == 'login' || to.name == 'update' || to.name == 'sweepCode' || to.name == 'resumeDetail' || to.name == 'pdfdetail') {
next();
return;
}
......@@ -28,5 +17,5 @@ export default {
}
next();
});
}
},
};
......@@ -7,5 +7,5 @@ export default {
},
remove: function(name) {
window.localStorage.removeItem(name);
}
},
};
module.exports = require("es6-promise");
module.exports = require('es6-promise');
......@@ -43,61 +43,61 @@ export function emailValidata(rule, value, callback) {
const field = rule.field;
const reg = rule.pattern;
switch (field) {
case "receiveEmail":
case 'receiveEmail':
if (!value) {
this.tip = true;
this.isDisable = false;
callback(new Error("收件人不能为空"));
callback(new Error('收件人不能为空'));
} else if (rule.pattern && !rule.pattern.test(value)) {
this.tip = true;
this.isDisable = false;
callback(new Error("请输入正确收件人地址"));
callback(new Error('请输入正确收件人地址'));
} else {
this.tip = false;
this.isDisable = true;
callback();
}
break;
case "theme":
case 'theme':
if (!value) {
this.isDisable = false;
callback(new Error("主题能为空"));
callback(new Error('主题能为空'));
} else {
this.isDisable = true;
callback();
}
break;
case "copyname":
case 'copyname':
if (value && reg && !reg.test(value)) {
this.isDisable = false;
callback(new Error("请输入正确抄送地址"));
callback(new Error('请输入正确抄送地址'));
} else {
this.isDisable = true;
callback();
}
break;
case "UpdateOWER":
case 'UpdateOWER':
if (!value) {
this.isDisable = false;
callback(new Error("邀约人不能为空"));
callback(new Error('邀约人不能为空'));
} else {
this.isDisable = true;
callback();
}
break;
case "UpdateTIME":
case 'UpdateTIME':
if (!value) {
this.isDisable = false;
callback(new Error("面试时间不能为空"));
callback(new Error('面试时间不能为空'));
} else {
this.isDisable = true;
callback();
}
break;
case "UpdateVIEW":
case 'UpdateVIEW':
if (!value) {
this.isDisable = false;
callback(new Error("面试官不能为空"));
callback(new Error('面试官不能为空'));
} else {
this.isDisable = true;
callback();
......@@ -111,15 +111,14 @@ export function emailValidata(rule, value, callback) {
export const emailRule = /^((([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6}\;))*(([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6})))$/;
export function vidte(rule, value, callback) {
if (this.emailMassage == true) {
callback(new Error("你尚未选择简历,请先选择简历"));
callback(new Error('你尚未选择简历,请先选择简历'));
} else if (this.allEmailVilitor == true) {
callback(new Error("不能选择多份简历,请选择单份简历"));
callback(new Error('不能选择多份简历,请选择单份简历'));
} else {
callback();
}
}
export function validator(rule, value, callback) {
if (!value)
this.$Notice.warning({ title: "提示", desc: "请输入您要通知的面试官" });
if (!value) this.$Notice.warning({ title: '提示', desc: '请输入您要通知的面试官' });
callback();
}
// // action.js
import * as types from "./muationsType";
import * as types from './muationsType';
const action = {
cookieTipsShow({ commit }, value) {
commit(types.COOKIE_SHOW, value);
......@@ -12,6 +12,6 @@ const action = {
},
clearInterviewee({ commit }, value) {
commit(types.CLEAR_INTERVIEWEE, value);
}
},
};
export default action;
import Vuex from "vuex";
import Vue from "vue";
import mutations from "./mutations.js";
import actions from "./actions.js";
import Vuex from 'vuex';
import Vue from 'vue';
import mutations from './mutations.js';
import actions from './actions.js';
Vue.use(Vuex);
......@@ -9,10 +9,10 @@ const state = {
cookieTips: false,
interviewee: [],
channelInterviewee: [],
loading: false
loading: false,
};
export default new Vuex.Store({
mutations,
actions,
state
state,
});
export const COOKIE_SHOW = "COOKIE_SHOW";
export const COOKIE_HIDE = "COOKIE_HIDE";
export const ADD_INTERVIEWEE = "ADD_INTERVIEWEE";
export const REMOVE_INTERVIEWEE = "REMOVE_INTERVIEWEE";
export const CLEAR_INTERVIEWEE = "CLEAR_INTERVIEWEE";
export const COOKIE_SHOW = 'COOKIE_SHOW';
export const COOKIE_HIDE = 'COOKIE_HIDE';
export const ADD_INTERVIEWEE = 'ADD_INTERVIEWEE';
export const REMOVE_INTERVIEWEE = 'REMOVE_INTERVIEWEE';
export const CLEAR_INTERVIEWEE = 'CLEAR_INTERVIEWEE';
import {
COOKIE_SHOW,
COOKIE_HIDE,
ADD_INTERVIEWEE,
REMOVE_INTERVIEWEE,
CLEAR_INTERVIEWEE
} from "./muationsType";
import { COOKIE_SHOW, COOKIE_HIDE, ADD_INTERVIEWEE, REMOVE_INTERVIEWEE, CLEAR_INTERVIEWEE } from './muationsType';
export default {
[COOKIE_SHOW](state, value) {
state.cookieTips = value || true;
......@@ -15,7 +9,7 @@ export default {
[ADD_INTERVIEWEE](state, object) {
let flag = false;
const data = object.data;
if (object.type == "channel") {
if (object.type == 'channel') {
console.log(data);
state.channelInterviewee.map(item => {
if (data && item.id == data.id) {
......@@ -38,7 +32,7 @@ export default {
},
[REMOVE_INTERVIEWEE](state, object) {
const data = object.data;
if (object.type == "channel") {
if (object.type == 'channel') {
state.channelInterviewee.map((item, index) => {
if (data && item.id == data.id) {
state.channelInterviewee.splice(index, 1);
......@@ -54,11 +48,11 @@ export default {
},
[CLEAR_INTERVIEWEE](state, object) {
const type = object.type;
if (type == "channel") {
if (type == 'channel') {
state.channelInterviewee = [];
console.log("===");
console.log('===');
} else {
state.interviewee = [];
}
}
},
};
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