| @@ -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) | |||