@@ -1 +1 @@ | |||
import{_ as r,r as s,o as d,c as p,a as e,b as a,w as c,d as l,p as i,e as u}from"./index-XVS5hQ4e.js";const h={},t=o=>(i("data-v-80d1ee2a"),o=o(),u(),o),m={class:"nopage"},f=t(()=>e("span",{style:{color:"#0074D9"}},"4",-1)),v=t(()=>e("span",{style:{color:"#67C23A"}},"0",-1)),x=t(()=>e("span",{style:{color:"#0074D9"}},"4",-1)),y=t(()=>e("p",null,"你页面走丢了~",-1));function b(o,k){const n=s("a-button"),_=s("router-link");return d(),p("div",m,[f,v,x,e("div",null,[y,e("p",null,[a(_,{to:"/job/home"},{default:c(()=>[a(n,{type:"primary"},{default:c(()=>[l("返回首页")]),_:1})]),_:1})])])])}const w=r(h,[["render",b],["__scopeId","data-v-80d1ee2a"]]);export{w as default}; | |||
import{_ as r,r as s,o as d,c as p,a as e,b as a,w as c,d as l,p as i,e as u}from"./index-F9n6oHAB.js";const h={},t=o=>(i("data-v-80d1ee2a"),o=o(),u(),o),m={class:"nopage"},f=t(()=>e("span",{style:{color:"#0074D9"}},"4",-1)),v=t(()=>e("span",{style:{color:"#67C23A"}},"0",-1)),x=t(()=>e("span",{style:{color:"#0074D9"}},"4",-1)),y=t(()=>e("p",null,"你页面走丢了~",-1));function b(o,k){const n=s("a-button"),_=s("router-link");return d(),p("div",m,[f,v,x,e("div",null,[y,e("p",null,[a(_,{to:"/job/home"},{default:c(()=>[a(n,{type:"primary"},{default:c(()=>[l("返回首页")]),_:1})]),_:1})])])])}const w=r(h,[["render",b],["__scopeId","data-v-80d1ee2a"]]);export{w as default}; |
@@ -6,8 +6,8 @@ | |||
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> | |||
<script src="https://map.qq.com/api/gljs?v=1.exp&key=MPBBZ-HUICZ-EGRXB-7AHZI-R4GQZ-QWBSO"></script> | |||
<title>菊城人才网</title> | |||
<script type="module" crossorigin src="/assets/index-XVS5hQ4e.js"></script> | |||
<link rel="stylesheet" crossorigin href="/assets/index-HfhjWLuW.css"> | |||
<script type="module" crossorigin src="/assets/index-F9n6oHAB.js"></script> | |||
<link rel="stylesheet" crossorigin href="/assets/index-OlZ5X-qT.css"> | |||
</head> | |||
<body> | |||
<div id="app"></div> |
@@ -43,10 +43,9 @@ instance.interceptors.request.use(function (config) { | |||
// 添加响应拦截器 | |||
instance.interceptors.response.use(function (response) { | |||
switch (response.data.code) { | |||
case -1: | |||
// msgModel(response.data.msg) | |||
msgModel(response.data.msg) | |||
break; | |||
case 0: | |||
break; | |||
@@ -96,6 +95,7 @@ export const httpPost : Function = (url : string, data : object, cb : Function) | |||
const resData = res; | |||
typeHelper.isFunction(cb) && cb(resData); | |||
}).catch(err => { | |||
console.log(err) | |||
cb(err.response) | |||
}) | |||
} |
@@ -1,9 +1,16 @@ | |||
<template> | |||
<img :src="imgObj.src" alt="" :style="{width: imgObj.width,height: imgObj.height,'object-fit': imgObj.mode, 'border-radius': 0} "> | |||
<img :src="imgObj.src" alt="" | |||
:style="{width: imgObj.width,height: imgObj.height,'object-fit': imgObj.mode, 'border-radius': 0} " | |||
@click="preImage(imgObj.src)"> | |||
<a-modal v-model:open="imageBigOpen" centered :footer="null" @cancel="close"> | |||
<img :src="imgObj.src" style="width: 100%; height: 100%;"> | |||
</a-modal> | |||
</template> | |||
<script lang="ts" setup> | |||
import { ref, onMounted, defineProps, watch, computed } from 'vue'; | |||
let imageBigOpen = ref<Boolean>(false) | |||
const props = defineProps({ | |||
imgObj: { | |||
type: Object, | |||
@@ -18,14 +25,25 @@ | |||
mode ?: String, | |||
} | |||
const imgObj = ref<imgType>({ | |||
src : '', | |||
src: '', | |||
width: 0, | |||
height : 0, | |||
mode : '', | |||
height: 0, | |||
mode: '', | |||
}) | |||
watch(() => [props.imgObj], (newVal: any) => { | |||
if(newVal[0]) { | |||
// 预览 | |||
const preImage = (src) => { | |||
imageBigOpen.value = true | |||
} | |||
const close = (src) => { | |||
imageBigOpen.value = false | |||
} | |||
watch(() => [props.imgObj], (newVal : any) => { | |||
if (newVal[0]) { | |||
imgObj.value = newVal[0] | |||
} | |||
}, { immediate: true }) |
@@ -21,6 +21,8 @@ | |||
import { ref, onMounted, computed, defineProps, watch, defineEmits } from 'vue'; | |||
import axios from 'axios'; | |||
import { message } from 'ant-design-vue'; | |||
import { useCommon } from '@/hooks/useCommon'; | |||
let { imageprefix } = useCommon(); | |||
const props = defineProps(['upload_txt', 'success_image', 'images_length', 'image_type']); | |||
const emit = defineEmits(); | |||
const headers = ref<Object>({ | |||
@@ -59,7 +61,7 @@ | |||
uid: '-1', // 文件唯一标识,建议设置为负数,防止和内部产生的 id 冲突 | |||
name: e.file.name, // 文件名 | |||
status: 'done', // 状态有:uploading done error removed | |||
url: "https://rcsc-test.jcjob.cn/img" + res.data.data.filename | |||
url: imageprefix + res.data.data.filename | |||
}] | |||
} else { | |||
if (imagesList.value.length < imagesLength.value) { | |||
@@ -68,7 +70,7 @@ | |||
uid: '-' + (imagesList.value.length + 1), // 文件唯一标识,建议设置为负数,防止和内部产生的 id 冲突 | |||
name: e.file.name, // 文件名 | |||
status: 'done', // 状态有:uploading done error removed | |||
url: "https://rcsc-test.jcjob.cn/img" + res.data.data.filename | |||
url: imageprefix + res.data.data.filename | |||
}) | |||
} else { | |||
message.danger('最多上传5张'); |
@@ -152,6 +152,7 @@ | |||
onOk() { | |||
PostJobseekAddfavorite({job_id: job_id }).then(res => { | |||
successToast('已收藏') | |||
mapContainer.value = null | |||
getDetail(); | |||
}) | |||
}, | |||
@@ -169,6 +170,7 @@ | |||
onOk() { | |||
PostJobseekDelfavorite({job_id: job_id }).then(res => { | |||
successToast('已取消收藏') | |||
mapContainer.value = null | |||
getDetail(); | |||
}) | |||
}, | |||
@@ -186,6 +188,7 @@ | |||
onOk() { | |||
PostJobseekAddapplication({job_id: job_id }).then(res => { | |||
successToast('已投递') | |||
mapContainer.value = null | |||
getDetail(); | |||
}) | |||
}, |
@@ -1,7 +1,7 @@ | |||
<template> | |||
<a-row :gutter="[10,10]"> | |||
<a-col span="8" v-for="(item, index) in jobList"> | |||
<a-card hoverable style="width: 100%;background-color: #fff;border-radius: 10px;padding: 20px;"> | |||
<a-card hoverable style="width: 100%;background-color: #fff;border-radius: 10px;padding: 20px;" @click="toDetail(item.id, item.company_id)"> | |||
<a-flex vertical style="width: 100%;background-color: #fff;border-radius: 10px;padding: 20px;"> | |||
<a-space direction="vertical" :size="20"> | |||
<a-flex justify="space-between" style="width: 100%;"> | |||
@@ -20,7 +20,7 @@ | |||
<a-flex justify="space-between" style="width: 100%;"> | |||
<div>{{item.full_name}}</div> | |||
<a-button type="primary" size="small" | |||
@click="toDetail(item.id, item.company_id)">查看详情</a-button> | |||
>查看详情</a-button> | |||
</a-flex> | |||
<a-flex style="width: 100%;color: #BEBEBE;"> | |||
{{item.locations ? item.locations[0].name : '未知地址'}} |
@@ -5,7 +5,7 @@ | |||
<div class="company-box"> | |||
<a-row :gutter="[10,10]"> | |||
<a-col v-for="(item, index) in companyList"> | |||
<div style="color: #4FBE70" @click="toCompanyDetail(item.id)"> {{item.full_name}}</div> | |||
<div style="color: #808080" @click="toCompanyDetail(item.id)"> {{item.full_name}}</div> | |||
</a-col> | |||
</a-row> | |||
</div> | |||
@@ -14,7 +14,7 @@ | |||
<div class="company-box"> | |||
<a-row :gutter="[10,10]"> | |||
<a-col v-for="(item, index) in companyList"> | |||
<div style="color: #4FBE70" @click="toCompanyDetail(item.id)"> {{item.full_name}}</div> | |||
<div style="color: #808080" @click="toCompanyDetail(item.id)"> {{item.full_name}}</div> | |||
</a-col> | |||
</a-row> | |||
</div> |
@@ -12,7 +12,8 @@ | |||
<template v-else> | |||
<a-row :gutter="[10,20]" > | |||
<a-col span="8" v-for="(item, index) in jobList"> | |||
<a-flex vertical style="width: 100%;background-color: #fff;border-radius: 10px;padding: 20px;border-radius: 8px;"> | |||
<a-card hoverable @click="toDetail(item.id, item.company_id)"> | |||
<a-flex vertical style="width: 100%;background-color: #fff;border-radius: 10px;padding: 20px;border-radius: 8px;" > | |||
<a-space direction="vertical" :size="10"> | |||
<a-flex justify="space-between" style="width: 100%;"> | |||
<div style="font-size: 18px; font-weight: 600;">{{item.name}}</div> | |||
@@ -29,14 +30,14 @@ | |||
<a-space direction="vertical"> | |||
<a-flex justify="space-between" style="width: 100%;"> | |||
<div>{{item.full_name}}</div> | |||
<a-button type="primary" size="small" | |||
@click="toDetail(item.id, item.company_id)">查看详情</a-button> | |||
<!-- <a-button type="primary" size="small">查看详情</a-button> --> | |||
</a-flex> | |||
<a-flex style="width: 100%;color: #bebebe;"> | |||
{{item.locations ? item.locations[0].name : '未知地址'}} | |||
</a-flex> | |||
</a-space> | |||
</a-flex> | |||
</a-card> | |||
</a-col> | |||
<a-col span="24"> | |||
<a-flex justify="center"> | |||
@@ -205,6 +206,15 @@ | |||
sessionStorage.setItem('mode', 'detail') | |||
emit('detail') | |||
} | |||
const toCompanyDetail = (company_id : Number) => { | |||
sessionStorage.setItem('tab_key', 1) | |||
sessionStorage.setItem('pubilc_id', company_id) | |||
sessionStorage.setItem('mode', 'detail') | |||
emit('detail') | |||
} | |||
onMounted(() => { | |||
getData(); |
@@ -4,6 +4,12 @@ | |||
<template v-if="state"> | |||
<a-form :model="createForm" layout="vertical" class="resume-form"> | |||
<a-row :gutter="20"> | |||
<a-col span="24"> | |||
<a-form-item label="上传相片" name="photo"> | |||
<upload upload_txt="上传相片" @uploadSuccess="uploadPhotoSuccess" | |||
:success_image="addOtherForm.photo_img" images_length="1" image_type="1"></upload> | |||
</a-form-item> | |||
</a-col> | |||
<a-col span="12"> | |||
<a-form-item label="简历是否可见" name="hide_resume"> | |||
<a-radio-group v-model:value="createForm.hide_resume" button-style="solid" size="large" | |||
@@ -187,8 +193,8 @@ | |||
</a-row> | |||
</a-col> | |||
<a-col span="6"> | |||
<image-container | |||
:imgObj="{src: 'https://rcsc-test.jcjob.cn/img'+detail.photo ,width: '150px',height:'210px'}"></image-container> | |||
<image-container v-if="detail.photo" | |||
:imgObj="{src: imageprefix + detail.photo ,width: '150px',height:'210px'}"></image-container> | |||
</a-col> | |||
</a-row> | |||
</template> | |||
@@ -210,11 +216,12 @@ | |||
<script setup lang="ts"> | |||
import { ref, onMounted, computed, defineProps, watch, defineEmits, createVNode } from 'vue'; | |||
import { PostJobapplicantAdd, PostJobapplicantUpdate, GetJobapplicantDetail } from '@/apis/models'; | |||
import Upload from '@/components/form/upload.vue'; | |||
import { intersectionAlike } from '@/utils/dataHelper'; | |||
import { warnToast, successToast } from '@/utils/toastHelper'; | |||
import { dataForm, otherDataForm, reset } from '@/components/jobseeker/resume/basic/data.ts'; | |||
import { useCommon } from '@/hooks/useCommon'; | |||
let { store, dayjs, richOption, ExclamationCircleOutlined, Modal } = useCommon(); | |||
let { store, dayjs, richOption, ExclamationCircleOutlined, Modal, imageprefix } = useCommon(); | |||
const dayjsRef = ref(dayjs); | |||
let props = defineProps(['form_state']); | |||
const emit = defineEmits(); | |||
@@ -236,10 +243,17 @@ | |||
dob: dayjsRef.value(res.data.dob), | |||
reg_level_cascader: [res.data.reg_level1, res.data.reg_level2, res.data.reg_level3, res.data.reg_level4], | |||
now_level_cascader: [res.data.now_level1, res.data.now_level2, res.data.now_level3, res.data.now_level4], | |||
native_place_txt: res.data.native_place_txt | |||
native_place_txt: res.data.native_place_txt, | |||
photo_img: imageprefix + res.data.photo | |||
} | |||
}) | |||
} | |||
// 营业执照 | |||
const uploadPhotoSuccess = (data : Object) => { | |||
addOtherForm.value.photo_img = imageprefix + data | |||
createForm.value.photo = data | |||
} | |||
// 出生日期 | |||
const dobChange = (val) => { | |||
@@ -249,31 +263,31 @@ | |||
// 学历 | |||
const educationPlaceholder = ref('请选择学历'); | |||
const saveEducation = (data) => { | |||
createForm.value.education = data.val; | |||
createForm.value.education = data.val.key; | |||
} | |||
// 职称 | |||
const titlePlaceholder = ref('请选择职称') | |||
const saveTitle = (data) => { | |||
createForm.value.title = data.val; | |||
createForm.value.title = data.val.key; | |||
} | |||
// 婚姻状态 | |||
const maritalStatusPlaceholder = ref('请选择婚姻状态') | |||
const saveMaritalStatus = (data) => { | |||
createForm.value.marital_status = data.val; | |||
createForm.value.marital_status = data.val.key; | |||
} | |||
// 民族 | |||
const ethnicityPlaceholder = ref('请选择民族') | |||
const saveEthnicity = (data) => { | |||
createForm.value.ethnicity = data.val; | |||
createForm.value.ethnicity = data.val.key; | |||
} | |||
// 政治面貌 | |||
const politicalStatusPlaceholder = ref('请选择政治面貌') | |||
const savePoliticalStatus = (data) => { | |||
createForm.value.political_status = data.val; | |||
createForm.value.political_status = data.val.key; | |||
} | |||
@@ -24,14 +24,15 @@ export let dataForm = { | |||
height: 0, | |||
weight: 0, | |||
political_status: 0, | |||
native_place: 0 | |||
native_place: 0, | |||
} | |||
export let otherDataForm = { | |||
dob: '', | |||
reg_level_cascader: '', | |||
now_level_cascader: '', | |||
native_place_txt: '' | |||
native_place_txt: '', | |||
photo_img: '' | |||
} | |||
@@ -68,7 +69,8 @@ export const reset = () => { | |||
dob: '', | |||
reg_level_cascader: '', | |||
now_level_cascader: '', | |||
native_place_txt: '' | |||
native_place_txt: '', | |||
photo_img: '' | |||
} | |||
return { dataForm, otherDataForm } |
@@ -51,7 +51,7 @@ | |||
<a-row> | |||
<a-space direction="vertical"> | |||
<a-col span="24"> | |||
固 话:{{detail.mobile}} | |||
固 话:{{detail.landline}} | |||
</a-col> | |||
<a-col span="24"> | |||
手机号码:{{detail.mobile}} |
@@ -32,7 +32,7 @@ | |||
</template> | |||
<template v-else> | |||
<a-list :data-source="certificateList"> | |||
<template #loadMore> | |||
<template #loadMore v-if="certificateList.length > 0"> | |||
<a-flex justify="center"> | |||
<a-space> | |||
<div v-if="!loading"> |
@@ -44,7 +44,7 @@ | |||
</template> | |||
<template v-else> | |||
<a-list :data-source=" experienceList"> | |||
<template #loadMore> | |||
<template #loadMore v-if="experienceList.length > 0"> | |||
<a-flex justify="center"> | |||
<a-space> | |||
<div v-if="!loading" > |
@@ -42,7 +42,7 @@ | |||
<a-tab-pane :key="3" tab="其他意向"> | |||
<a-row :gutter="20"> | |||
<a-col span="12"> | |||
<a-form-item label="其他职位" name="other_positions"> | |||
<a-form-item label="其他职位"> | |||
<a-input v-model:value="basicForm.other_positions" placeholder="请输入其他职位" | |||
size="large" /> | |||
</a-form-item> | |||
@@ -114,65 +114,68 @@ | |||
</a-row> | |||
</a-tab-pane> | |||
</a-tabs> | |||
</a-form> | |||
</template> | |||
<template v-else> | |||
<a-typography> | |||
<a-typography-title :level="5"> | |||
意向职位 | |||
</a-typography-title> | |||
</a-typography> | |||
<a-typography-paragraph> | |||
<a-space direction="vertical"> | |||
<template v-for="(item,index) in positionList"> | |||
<div> | |||
{{item.level1_txt}}/{{item.level2_txt}} | |||
<a-divider type="vertical" /> | |||
<a-button size="small" type="text" @click="toPositionEdit(item)"> | |||
<EditOutlined /> | |||
</a-button> | |||
<a-divider type="vertical" /> | |||
<a-popconfirm title="是否删除该意向职位" @confirm="delPosition(item.id)"> | |||
<a-button size="small" type="text" > | |||
<DeleteOutlined /> | |||
<template v-if="positionList.length > 0"> | |||
<a-typography> | |||
<a-typography-title :level="5"> | |||
意向职位 | |||
</a-typography-title> | |||
</a-typography> | |||
<a-typography-paragraph> | |||
<a-space direction="vertical"> | |||
<template v-for="(item,index) in positionList"> | |||
<div> | |||
{{item.level1_txt}}/{{item.level2_txt}} | |||
<a-divider type="vertical" /> | |||
<a-button size="small" type="text" @click="toPositionEdit(item)"> | |||
<EditOutlined /> | |||
</a-button> | |||
</a-popconfirm> | |||
</div> | |||
</template> | |||
</a-space> | |||
</a-typography-paragraph> | |||
<a-typography> | |||
<a-typography-title :level="5"> | |||
意向地区 | |||
</a-typography-title> | |||
</a-typography> | |||
<a-typography-paragraph> | |||
<a-space direction="vertical"> | |||
<template v-for="(item,index) in areaList"> | |||
<div> | |||
{{item.level1_txt}} | |||
<span v-if="item.level2_txt">/</span> | |||
{{item.level2_txt}} | |||
<span v-if="item.level3_txt">/</span> | |||
{{item.level3_txt}} | |||
<span v-if="item.level4_txt">/</span> | |||
{{item.level4_txt}} | |||
<a-divider type="vertical" /> | |||
<a-button size="small" type="text" @click="toEdit(item)"> | |||
<EditOutlined /> | |||
</a-button> | |||
<a-divider type="vertical" /> | |||
<a-popconfirm title="是否删除该意向地区" @confirm="delArea(item.id)"> | |||
<a-button size="small" type="text" > | |||
<DeleteOutlined /> | |||
<a-divider type="vertical" /> | |||
<a-popconfirm title="是否删除该意向职位" @confirm="delPosition(item.id)"> | |||
<a-button size="small" type="text"> | |||
<DeleteOutlined /> | |||
</a-button> | |||
</a-popconfirm> | |||
</div> | |||
</template> | |||
</a-space> | |||
</a-typography-paragraph> | |||
</template> | |||
<template v-if="areaList.length > 0"> | |||
<a-typography> | |||
<a-typography-title :level="5"> | |||
意向地区 | |||
</a-typography-title> | |||
</a-typography> | |||
<a-typography-paragraph> | |||
<a-space direction="vertical"> | |||
<template v-for="(item,index) in areaList"> | |||
<div> | |||
{{item.level1_txt}} | |||
<span v-if="item.level2_txt">/</span> | |||
{{item.level2_txt}} | |||
<span v-if="item.level3_txt">/</span> | |||
{{item.level3_txt}} | |||
<span v-if="item.level4_txt">/</span> | |||
{{item.level4_txt}} | |||
<a-divider type="vertical" /> | |||
<a-button size="small" type="text" @click="toEdit(item)"> | |||
<EditOutlined /> | |||
</a-button> | |||
</a-popconfirm> | |||
</div> | |||
</template> | |||
</a-space> | |||
</a-typography-paragraph> | |||
<a-divider type="vertical" /> | |||
<a-popconfirm title="是否删除该意向地区" @confirm="delArea(item.id)"> | |||
<a-button size="small" type="text"> | |||
<DeleteOutlined /> | |||
</a-button> | |||
</a-popconfirm> | |||
</div> | |||
</template> | |||
</a-space> | |||
</a-typography-paragraph> | |||
</template> | |||
<template v-if="basic"> | |||
<a-typography> | |||
<a-typography-title :level="5"> | |||
@@ -193,7 +196,7 @@ | |||
</a-button> | |||
<a-divider type="vertical" /> | |||
<a-popconfirm title="是否删除其他意向" @confirm="delBasic(basic.id)"> | |||
<a-button size="small" type="text" > | |||
<a-button size="small" type="text"> | |||
<DeleteOutlined /> | |||
</a-button> | |||
</a-popconfirm> | |||
@@ -212,7 +215,7 @@ | |||
import { dataAreaForm, dataPositionForm, dataBasicForm, otherDataForm, reset } from '@/components/jobseeker/resume/intention/data.ts'; | |||
import { EditOutlined, FileSearchOutlined, RedoOutlined, DeleteOutlined } from '@ant-design/icons-vue'; | |||
import { useCommon } from '@/hooks/useCommon'; | |||
let { store, dayjs,commomParams, richOption, ExclamationCircleOutlined, Modal } = useCommon(); | |||
let { store, dayjs, commomParams, richOption, ExclamationCircleOutlined, Modal } = useCommon(); | |||
const dayjsRef = ref(dayjs); | |||
let props = defineProps(['form_state']); | |||
const emit = defineEmits(); | |||
@@ -236,6 +239,7 @@ | |||
PostJobapplicantDesirebasedetail().then(res => { | |||
basic.value = res.data | |||
basicForm.value = intersectionAlike(basicForm.value, res.data) | |||
console.log(basicForm.value) | |||
basicForm.value.id = res.data.id; | |||
}) | |||
} | |||
@@ -275,29 +279,27 @@ | |||
PostJobapplicantAdddesirearea(areaForm.value).then(res => { | |||
successToast('保存成功'); | |||
getArea(); | |||
activeKey.value = 2 | |||
resetForm('area') | |||
}).catch(err => { | |||
}) | |||
} | |||
} | |||
const toEdit = (item : Object) => { | |||
areaForm.value.id = item.id; | |||
getDetail(areaForm.value.id) | |||
emit("editEdit") | |||
} | |||
// 详情 | |||
const getDetail = (val) => { | |||
PostJobapplicantDesireareadetail({id: val}).then(res => { | |||
PostJobapplicantDesireareadetail({ id: val }).then(res => { | |||
areaForm.value = intersectionAlike(areaForm.value, res.data) | |||
areaForm.value.id = res.data.id; | |||
for (var i = 1; i <= 4; i++) { | |||
if (res.data['level' + i]) { | |||
addOtherForm.value.area.push(res.data['level' + i]); | |||
} | |||
if (res.data['level' + i]) { | |||
addOtherForm.value.area.push(res.data['level' + i]); | |||
} | |||
} | |||
}) | |||
} | |||
@@ -328,29 +330,28 @@ | |||
PostJobapplicantAdddesireindustry(positionForm.value).then(res => { | |||
successToast('保存成功'); | |||
getPosition(); | |||
activeKey.value = 3 | |||
resetForm('position') | |||
}).catch(err => { | |||
}) | |||
} | |||
} | |||
const toPositionEdit = (item : Object) => { | |||
positionForm.value.id = item.id; | |||
getPositionDetail(positionForm.value.id) | |||
activeKey.value = 2 | |||
emit("editEdit") | |||
} | |||
// 详情 | |||
const getPositionDetail = (val) => { | |||
PostJobapplicantDesireindustrydetail({id: val}).then(res => { | |||
PostJobapplicantDesireindustrydetail({ id: val }).then(res => { | |||
positionForm.value = intersectionAlike(positionForm.value, res.data) | |||
positionForm.value.id = res.data.id; | |||
for (var i = 1; i <= 2; i++) { | |||
if (res.data['level' + i]) { | |||
addOtherForm.value.position.push(res.data['level' + i]); | |||
} | |||
if (res.data['level' + i]) { | |||
addOtherForm.value.position.push(res.data['level' + i]); | |||
} | |||
} | |||
}) | |||
} | |||
@@ -423,13 +424,13 @@ | |||
}) | |||
} | |||
} | |||
const toBasicEdit = (item : Object) => { | |||
getBasic() | |||
activeKey.value = 3 | |||
emit("editEdit") | |||
} | |||
const delBasic = (id : number) => { | |||
commomParams.value.delParam = { id: id }; | |||
PostJobapplicantDeldesirebase(commomParams.value.delParam).then(res => { | |||
@@ -438,19 +439,19 @@ | |||
getBasic(); | |||
}) | |||
} | |||
const resetForm = (val) => { | |||
if (val == 'area') { | |||
areaForm = reset().dataForm as JobseekerIntentionType.JobseekerIntentionAreaFormType; | |||
areaForm.value = reset().dataAreaForm as JobseekerIntentionType.JobseekerIntentionAreaFormType; | |||
} | |||
if (val == 'position') { | |||
positionForm = reset().dataForm as JobseekerIntentionType.JobseekerIntentionPositionFormType; | |||
positionForm.value = reset().dataPositionForm as JobseekerIntentionType.JobseekerIntentionPositionFormType; | |||
} | |||
if (val == 'basic') { | |||
basicForm = reset().dataForm as JobseekerIntentionType.JobseekerIntentionBasicFormType; | |||
basicForm.value = reset().dataBasicForm as JobseekerIntentionType.JobseekerIntentionBasicFormType; | |||
} | |||
addOtherForm = reset().dataForm as JobseekerIntentionType.OtherFormType; | |||
addOtherForm.value = reset().otherDataForm as JobseekerIntentionType.OtherFormType; | |||
state.value = false; | |||
emit("quitEdit") | |||
} | |||
@@ -458,6 +459,8 @@ | |||
watch(() => [props.form_state], (newVal) => { | |||
state.value = newVal[0]; | |||
getBasic(); | |||
getPosition(); | |||
getArea(); | |||
}) | |||
</script> | |||
@@ -81,15 +81,15 @@ | |||
if (createForm.value.id) { | |||
PostJobapplicantUpdateintroduction(createForm.value).then(res => { | |||
successToast('保存成功'); | |||
getBasic(); | |||
resetForm() | |||
getBasic(); | |||
}).catch(err => { | |||
}) | |||
} else { | |||
PostJobapplicantAddintroduction(createForm.value).then(res => { | |||
successToast('保存成功'); | |||
getBasic(); | |||
resetForm() | |||
getBasic(); | |||
}).catch(err => { | |||
}) | |||
} |
@@ -33,6 +33,14 @@ | |||
<a-input v-model:value="createForm.computer_skills" placeholder="请输入计算机能力" size="large"/> | |||
</a-form-item> | |||
</a-col> | |||
<a-col span="24"> | |||
<a-flex justify="flex-end"> | |||
<a-space> | |||
<a-button @click="resetForm" size="large">取消</a-button> | |||
<a-button type="primary" @click="sumbitForm" size="large">保存</a-button> | |||
</a-space> | |||
</a-flex> | |||
</a-col> | |||
</a-row> | |||
</a-form> | |||
</template> | |||
@@ -84,7 +92,7 @@ | |||
import { PostJobapplicantAddskill, PostJobapplicantUpdateskill, PostJobapplicantSkilldetail } from '@/apis/models'; | |||
import { intersectionAlike } from '@/utils/dataHelper'; | |||
import { warnToast, successToast } from '@/utils/toastHelper'; | |||
import { dataForm, otherDataForm, reset } from '@/components/jobseeker/resume/contact/data.ts'; | |||
import { dataForm, otherDataForm, reset } from '@/components/jobseeker/resume/skill/data.ts'; | |||
import { useCommon } from '@/hooks/useCommon'; | |||
let { store, dayjs, richOption, ExclamationCircleOutlined, Modal } = useCommon(); | |||
const dayjsRef = ref(dayjs); | |||
@@ -108,22 +116,22 @@ | |||
// 英语 | |||
const saveEnglish = (data) => { | |||
createForm.value.english = data.val; | |||
createForm.value.english = data.val.key; | |||
} | |||
// 国语 | |||
const saveMandarin = (data) => { | |||
createForm.value.mandarin = data.val; | |||
createForm.value.mandarin = data.val.key; | |||
} | |||
// 粤语 | |||
const saveCantonese = (data) => { | |||
createForm.value.cantonese = data.val; | |||
createForm.value.cantonese = data.val.key; | |||
} | |||
// 第二外语 | |||
const saveOtherLanguage = (data) => { | |||
createForm.value.english = data.val; | |||
createForm.value.other_language = data.val.key; | |||
} | |||
const sumbitForm = () => { | |||
@@ -146,6 +154,7 @@ | |||
const resetForm = () => { | |||
createForm.value = reset().dataForm as JobseekerSkillType.JobseekerSkillFormType; | |||
console.log(createForm.value) | |||
state.value = false; | |||
emit("quitEdit") | |||
} |
@@ -55,7 +55,7 @@ | |||
</template> | |||
<template v-else> | |||
<a-list :data-source="trainList"> | |||
<template #loadMore> | |||
<template #loadMore v-if="trainList.length > 0"> | |||
<a-flex justify="center"> | |||
<a-space> | |||
<div v-if="!loading" > | |||
@@ -63,7 +63,6 @@ | |||
</div> | |||
</a-space> | |||
</a-flex> | |||
</template> | |||
<template #renderItem="{ item }"> | |||
<a-list-item> | |||
@@ -193,12 +192,14 @@ | |||
PostJobapplicantUpdatetraining(createForm.value).then(res => { | |||
successToast('保存成功'); | |||
resetForm() | |||
getData(); | |||
}).catch(err => { | |||
}) | |||
} else { | |||
PostJobapplicantAddtraining(createForm.value).then(res => { | |||
successToast('保存成功'); | |||
resetForm() | |||
getData(); | |||
}).catch(err => { | |||
}) | |||
} | |||
@@ -209,7 +210,6 @@ | |||
time.value = '' | |||
createForm.value = reset().dataForm as JobseekerTrainType.JobseekerTrainFormType; | |||
state.value = false; | |||
getData(); | |||
emit("quitEdit") | |||
} | |||
@@ -103,15 +103,30 @@ | |||
:deep(.ant-menu-submenu-selected::after) { | |||
border-bottom-color: #4FBE70 !important; | |||
} | |||
:deep(.ant-menu-submenu-open::after) { | |||
/* :deep(.ant-menu-submenu-open::after) { | |||
color: #4FBE70 !important; | |||
} */ | |||
:deep(.ant-menu-item-selected::after) { | |||
border-bottom-color: #4FBE70 !important; | |||
} | |||
:deep(.ant-menu-item-selected) { | |||
:deep(.ant-menu-submenu-open) { | |||
color: #4FBE70 !important; | |||
background-color: #ffffff !important; | |||
border-bottom-color: #4FBE70 !important; | |||
} | |||
:deep(.ant-menu-item-active) { | |||
color: #4FBE70 !important; | |||
background-color: #ffffff !important; | |||
} | |||
/* | |||
:deep(.ant-menu-item-active::after) { | |||
color: #ffffff !important; | |||
border-bottom-color: #4FBE70 !important; | |||
@@ -119,7 +134,7 @@ | |||
.ant-menu-item-selected .ant-menu-item-title { | |||
color: #4FBE70 !important; | |||
} */ | |||
} | |||
</style> |
@@ -140,7 +140,8 @@ export const useCommon = () => { | |||
}; | |||
// 照片前缀 | |||
const imageprefix : string = 'https://admin1.jcjob.cn/img/' | |||
// const imageprefix : string = 'https://admin1.jcjob.cn/img/' | |||
const imageprefix : string = 'https://rcsc-test.jcjob.cn/img/' | |||
@@ -20,7 +20,7 @@ import EditButton from '@/components/common/edit-button.vue'; | |||
import { routesModuleList } from '@/router/dynamic'; | |||
import { routesManageModuleList } from '@/router/manageDynamic'; | |||
router.beforeEach((to, from, next) => { | |||
document.title = `菊城人才市场后台管理`; | |||
document.title = `菊城人才网`; | |||
if (store.state.permissions.permissionList == null) { | |||
store.commit('getToken', { | |||
token: sessionStorage.getItem('token') ? sessionStorage.getItem('token') : '' |
@@ -140,14 +140,21 @@ button:focus-visible { | |||
.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled) { | |||
background: #4FBE70 !important; | |||
border-color: #4FBE70 !important; | |||
color: #ffffff !important; | |||
} | |||
.ant-radio-button-wrapper:hover { | |||
color: #4FBE70 !important; | |||
background: #ffffff !important; | |||
} | |||
.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled)::before { | |||
background-color: none !important; | |||
} | |||
.resume-form { | |||
background-color: #f8f8f8; | |||
padding: 16px; | |||
border-radius: 8px; | |||
} | |||
} | |||
@@ -4,6 +4,7 @@ export const getModel : Function = (url : string) => { | |||
return function (params : object) { | |||
return new Promise((resolve, reject) => { | |||
httpGet(url, params, function (response) { | |||
console.log(response) | |||
if (response.data.code == 0) { | |||
resolve(response.data) | |||
} else { | |||
@@ -18,6 +19,7 @@ export const postModel : Function = (url : string) => { | |||
return function (params : object) { | |||
return new Promise((resolve, reject) => { | |||
httpPost(url, params, function (response) { | |||
console.log(response) | |||
if (response.data.code == 0) { | |||
resolve(response.data) | |||
} else { |
@@ -259,4 +259,12 @@ | |||
width: 100%; | |||
height: 400px; | |||
} | |||
:deep(.ant-card) { | |||
padding: 0 !important; | |||
} | |||
:deep(.ant-card-body) { | |||
padding: 0 !important; | |||
} | |||
</style> |
@@ -16,9 +16,6 @@ | |||
<div> | |||
会员编号:{{basic.id}} | |||
</div> | |||
<div> | |||
关注公众号:{{basic.id}} | |||
</div> | |||
</template> | |||
<template #avatar> | |||
<a-avatar :src="'https://rcsc-test.jcjob.cn/img'+basic.photo" :size="96" /> | |||
@@ -28,22 +25,27 @@ | |||
<a-descriptions :column="3"> | |||
<a-descriptions-item | |||
label="登录账号">{{basic.mobile ? basic.mobile : '未知'}}</a-descriptions-item> | |||
<a-descriptions-item><a-button @click="detail(basic)" type="link" class="main-color"> | |||
<a-descriptions-item><a-button @click="detail(basic)" type="link" | |||
class="main-color"> | |||
<FileSearchOutlined style="color: #4FBE70" />预览简历 | |||
</a-button></a-descriptions-item> | |||
<a-descriptions-item label="简历是否可见"> | |||
<a-switch @change="changeResumeState" v-model:checked="createForm.hide_resume" :checkedValue="1" :unCheckedValue="2" checked-children="开" un-checked-children="关"></a-switch> | |||
<a-switch @change="changeResumeState" v-model:checked="createForm.hide_resume" | |||
:checkedValue="1" :unCheckedValue="2" checked-children="开" | |||
un-checked-children="关"></a-switch> | |||
</a-descriptions-item> | |||
<a-descriptions-item label="QQ"> | |||
{{basic.qq ? basic.qq : '未填写'}} | |||
</a-descriptions-item> | |||
<a-descriptions-item> | |||
<a-button type="link" class="main-color" @click="refreshResume"> | |||
<RedoOutlined style="color: #4FBE70" :spin="refreshing" rotate="90"/>刷新简历 | |||
<RedoOutlined style="color: #4FBE70" :spin="refreshing" rotate="90" />刷新简历 | |||
</a-button> | |||
</a-descriptions-item> | |||
<a-descriptions-item label="简历是否在家政可见"> | |||
<a-switch @change="changeResumeState" v-model:checked="createForm.house_keeping_status" :checkedValue="1" :unCheckedValue="2" checked-children="开" un-checked-children="关"></a-switch> | |||
<a-switch @change="changeResumeState" | |||
v-model:checked="createForm.house_keeping_status" :checkedValue="1" | |||
:unCheckedValue="2" checked-children="开" un-checked-children="关"></a-switch> | |||
</a-descriptions-item> | |||
<a-descriptions-item label="电子邮箱"> | |||
{{basic.email ? basic.email : '未填写'}} | |||
@@ -52,7 +54,13 @@ | |||
{{seeLength}}次 | |||
</a-descriptions-item> | |||
<a-descriptions-item label="是否接收面试邀请通知"> | |||
<a-switch @change="changeResumeState" v-model:checked="createForm.remind_interview" :checkedValue="1" :unCheckedValue="2" checked-children="开" un-checked-children="关"></a-switch> | |||
<a-switch @change="changeResumeState" | |||
v-model:checked="createForm.remind_interview" :checkedValue="1" | |||
:unCheckedValue="2" checked-children="开" un-checked-children="关"></a-switch> | |||
</a-descriptions-item> | |||
<a-descriptions-item :span="3" label="关注公众号,接收面试消息"> | |||
<image-container | |||
:imgObj="{src: '/images/gongzhonghao.png',width: '50px',height:'50px'}"></image-container> | |||
</a-descriptions-item> | |||
</a-descriptions> | |||
</div> | |||
@@ -69,16 +77,16 @@ | |||
<invite-apply v-if="activeKey == 2"></invite-apply> | |||
</a-tab-pane> | |||
<a-tab-pane :key="3" tab="谁看过我"> | |||
<invite-seeme v-if="activeKey == 3"></invite-seeme> | |||
<invite-seeme v-if="activeKey == 3"></invite-seeme> | |||
</a-tab-pane> | |||
<a-tab-pane :key="4" tab="收藏的职位"> | |||
<invite-collect v-if="activeKey == 4"></invite-collect> | |||
<invite-collect v-if="activeKey == 4"></invite-collect> | |||
</a-tab-pane> | |||
</a-tabs> | |||
</a-col> | |||
</a-row> | |||
</div> | |||
<resume-detail v-if="detail_record" :detail_record="detail_record"></resume-detail> | |||
<resume-detail v-if="detail_record" :detail_record="detail_record"></resume-detail> | |||
</template> | |||
<script setup lang="ts"> | |||
@@ -92,50 +100,50 @@ | |||
import { warnToast, successToast } from '@/utils/toastHelper'; | |||
import { EditOutlined, FileSearchOutlined, RedoOutlined } from '@ant-design/icons-vue'; | |||
import { useCommon } from '@/hooks/useCommon'; | |||
let { commomParams, ExclamationCircleOutlined, Modal, onMenu,showOtherModal1 } = useCommon(); | |||
let { commomParams, ExclamationCircleOutlined, Modal, onMenu, showOtherModal1 } = useCommon(); | |||
let jobList = ref<Object[]>([]) | |||
let basic = ref<Object>({}) | |||
let seeLength = ref<Number>(0) | |||
let activeKey = ref<Number>(1) | |||
let refreshing = ref<Boolean>(false) | |||
let createForm = ref<Object>({ | |||
hide_resume: 1, | |||
house_keeping_status: 2, | |||
remind_interview: 2 | |||
}) | |||
const toResume = () => { | |||
onMenu('/jobseeker/resume') | |||
} | |||
const refreshResume = () => { | |||
refreshing.value = true; | |||
successToast('简历已刷新') | |||
refreshing.value = false | |||
} | |||
const changeResumeState = (val) => { | |||
createForm.value.id = basic.value.id, | |||
PostJobapplicantUpdate(createForm.value) | |||
PostJobapplicantUpdate(createForm.value) | |||
} | |||
let detail_record = ref<Object>(null) | |||
const detail = (record) => { | |||
detail_record.value = record; | |||
showOtherModal1() | |||
} | |||
onMounted(async () => { | |||
let res = await GetJobseekerDetail({ customer_id: sessionStorage.getItem('id') }) | |||
basic.value = res.data; | |||
createForm.value.hide_resume = res.data.hide_resume; | |||
createForm.value.house_keeping_status = res.data.house_keeping_status; | |||
createForm.value.remind_interview = res.data.remind_interview; | |||
if(createForm.value.remind_interview == 1) { | |||
let res1 =await GetPersonInterviewList({ status: 0 }) | |||
if (createForm.value.remind_interview == 1) { | |||
let res1 = await GetPersonInterviewList({ status: 0 }) | |||
if (res1.data.list.length > 0) { | |||
Modal.confirm({ | |||
title: `您有${res1.data.list.length}条待查看面试邀请`, | |||
@@ -144,10 +152,10 @@ | |||
okText: '前往查看', | |||
cancelText: '关闭', | |||
onOk() { | |||
}, | |||
onCancel() { | |||
}, | |||
}); | |||
} | |||
@@ -155,8 +163,8 @@ | |||
let res2 = GetViewHistoryList() | |||
seeLength.value = res2.data.viewhistorys ? res2.data.viewhistorys.length : 0 | |||
}) | |||
</script> | |||
@@ -249,7 +249,7 @@ | |||
// 退出编辑 | |||
const quitEdit = () => { | |||
editObj.value[editingKey.value] = false; | |||
console.log(editObj.value) | |||
editingKey.value = null | |||
} | |||
const abc = ref(null) |