瀏覽代碼

deploy

master
Soleilw 1 年之前
父節點
當前提交
0908ff1ef8

dist/assets/404-d9O5V6co.js → dist/assets/404-3K917MHn.js 查看文件

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};

dist/assets/index-F9n6oHAB.js
文件差異過大導致無法顯示
查看文件


+ 0
- 1
dist/assets/index-HfhjWLuW.css
文件差異過大導致無法顯示
查看文件


+ 1
- 0
dist/assets/index-OlZ5X-qT.css
文件差異過大導致無法顯示
查看文件


+ 2
- 2
dist/index.html 查看文件

<meta name="viewport" content="width=device-width, initial-scale=1.0" /> <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> <script src="https://map.qq.com/api/gljs?v=1.exp&key=MPBBZ-HUICZ-EGRXB-7AHZI-R4GQZ-QWBSO"></script>
<title>菊城人才网</title> <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> </head>
<body> <body>
<div id="app"></div> <div id="app"></div>

+ 2
- 2
src/apis/index.ts 查看文件



// 添加响应拦截器 // 添加响应拦截器
instance.interceptors.response.use(function (response) { instance.interceptors.response.use(function (response) {

switch (response.data.code) { switch (response.data.code) {
case -1: case -1:
// msgModel(response.data.msg)
msgModel(response.data.msg)
break; break;
case 0: case 0:
break; break;
const resData = res; const resData = res;
typeHelper.isFunction(cb) && cb(resData); typeHelper.isFunction(cb) && cb(resData);
}).catch(err => { }).catch(err => {
console.log(err)
cb(err.response) cb(err.response)
}) })
} }

+ 25
- 7
src/components/common/image-container.vue 查看文件

<template> <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> </template>


<script lang="ts" setup> <script lang="ts" setup>
import { ref, onMounted, defineProps, watch, computed } from 'vue'; import { ref, onMounted, defineProps, watch, computed } from 'vue';
let imageBigOpen = ref<Boolean>(false)

const props = defineProps({ const props = defineProps({
imgObj: { imgObj: {
type: Object, type: Object,
mode ?: String, mode ?: String,
} }
const imgObj = ref<imgType>({ const imgObj = ref<imgType>({
src : '',
src: '',
width: 0, 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] imgObj.value = newVal[0]
} }
}, { immediate: true }) }, { immediate: true })

+ 4
- 2
src/components/form/upload.vue 查看文件

import { ref, onMounted, computed, defineProps, watch, defineEmits } from 'vue'; import { ref, onMounted, computed, defineProps, watch, defineEmits } from 'vue';
import axios from 'axios'; import axios from 'axios';
import { message } from 'ant-design-vue'; 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 props = defineProps(['upload_txt', 'success_image', 'images_length', 'image_type']);
const emit = defineEmits(); const emit = defineEmits();
const headers = ref<Object>({ const headers = ref<Object>({
uid: '-1', // 文件唯一标识,建议设置为负数,防止和内部产生的 id 冲突 uid: '-1', // 文件唯一标识,建议设置为负数,防止和内部产生的 id 冲突
name: e.file.name, // 文件名 name: e.file.name, // 文件名
status: 'done', // 状态有:uploading done error removed status: 'done', // 状态有:uploading done error removed
url: "https://rcsc-test.jcjob.cn/img" + res.data.data.filename
url: imageprefix + res.data.data.filename
}] }]
} else { } else {
if (imagesList.value.length < imagesLength.value) { if (imagesList.value.length < imagesLength.value) {
uid: '-' + (imagesList.value.length + 1), // 文件唯一标识,建议设置为负数,防止和内部产生的 id 冲突 uid: '-' + (imagesList.value.length + 1), // 文件唯一标识,建议设置为负数,防止和内部产生的 id 冲突
name: e.file.name, // 文件名 name: e.file.name, // 文件名
status: 'done', // 状态有:uploading done error removed status: 'done', // 状态有:uploading done error removed
url: "https://rcsc-test.jcjob.cn/img" + res.data.data.filename
url: imageprefix + res.data.data.filename
}) })
} else { } else {
message.danger('最多上传5张'); message.danger('最多上传5张');

+ 3
- 0
src/components/job/detail/index.vue 查看文件

onOk() { onOk() {
PostJobseekAddfavorite({job_id: job_id }).then(res => { PostJobseekAddfavorite({job_id: job_id }).then(res => {
successToast('已收藏') successToast('已收藏')
mapContainer.value = null
getDetail(); getDetail();
}) })
}, },
onOk() { onOk() {
PostJobseekDelfavorite({job_id: job_id }).then(res => { PostJobseekDelfavorite({job_id: job_id }).then(res => {
successToast('已取消收藏') successToast('已取消收藏')
mapContainer.value = null
getDetail(); getDetail();
}) })
}, },
onOk() { onOk() {
PostJobseekAddapplication({job_id: job_id }).then(res => { PostJobseekAddapplication({job_id: job_id }).then(res => {
successToast('已投递') successToast('已投递')
mapContainer.value = null
getDetail(); getDetail();
}) })
}, },

+ 2
- 2
src/components/job/home/choiceness-job/job-list.vue 查看文件

<template> <template>
<a-row :gutter="[10,10]"> <a-row :gutter="[10,10]">
<a-col span="8" v-for="(item, index) in jobList"> <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-flex vertical style="width: 100%;background-color: #fff;border-radius: 10px;padding: 20px;">
<a-space direction="vertical" :size="20"> <a-space direction="vertical" :size="20">
<a-flex justify="space-between" style="width: 100%;"> <a-flex justify="space-between" style="width: 100%;">
<a-flex justify="space-between" style="width: 100%;"> <a-flex justify="space-between" style="width: 100%;">
<div>{{item.full_name}}</div> <div>{{item.full_name}}</div>
<a-button type="primary" size="small" <a-button type="primary" size="small"
@click="toDetail(item.id, item.company_id)">查看详情</a-button>
>查看详情</a-button>
</a-flex> </a-flex>
<a-flex style="width: 100%;color: #BEBEBE;"> <a-flex style="width: 100%;color: #BEBEBE;">
{{item.locations ? item.locations[0].name : '未知地址'}} {{item.locations ? item.locations[0].name : '未知地址'}}

+ 2
- 2
src/components/job/internship/index.vue 查看文件

<div class="company-box"> <div class="company-box">
<a-row :gutter="[10,10]"> <a-row :gutter="[10,10]">
<a-col v-for="(item, index) in companyList"> <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-col>
</a-row> </a-row>
</div> </div>
<div class="company-box"> <div class="company-box">
<a-row :gutter="[10,10]"> <a-row :gutter="[10,10]">
<a-col v-for="(item, index) in companyList"> <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-col>
</a-row> </a-row>
</div> </div>

+ 13
- 3
src/components/job/list/index.vue 查看文件

<template v-else> <template v-else>
<a-row :gutter="[10,20]" > <a-row :gutter="[10,20]" >
<a-col span="8" v-for="(item, index) in jobList"> <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-space direction="vertical" :size="10">
<a-flex justify="space-between" style="width: 100%;"> <a-flex justify="space-between" style="width: 100%;">
<div style="font-size: 18px; font-weight: 600;">{{item.name}}</div> <div style="font-size: 18px; font-weight: 600;">{{item.name}}</div>
<a-space direction="vertical"> <a-space direction="vertical">
<a-flex justify="space-between" style="width: 100%;"> <a-flex justify="space-between" style="width: 100%;">
<div>{{item.full_name}}</div> <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>
<a-flex style="width: 100%;color: #bebebe;"> <a-flex style="width: 100%;color: #bebebe;">
{{item.locations ? item.locations[0].name : '未知地址'}} {{item.locations ? item.locations[0].name : '未知地址'}}
</a-flex> </a-flex>
</a-space> </a-space>
</a-flex> </a-flex>
</a-card>
</a-col> </a-col>
<a-col span="24"> <a-col span="24">
<a-flex justify="center"> <a-flex justify="center">
sessionStorage.setItem('mode', 'detail') sessionStorage.setItem('mode', 'detail')
emit('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(() => { onMounted(() => {
getData(); getData();

+ 23
- 9
src/components/jobseeker/resume/basic/basic.vue 查看文件

<template v-if="state"> <template v-if="state">
<a-form :model="createForm" layout="vertical" class="resume-form"> <a-form :model="createForm" layout="vertical" class="resume-form">
<a-row :gutter="20"> <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-col span="12">
<a-form-item label="简历是否可见" name="hide_resume"> <a-form-item label="简历是否可见" name="hide_resume">
<a-radio-group v-model:value="createForm.hide_resume" button-style="solid" size="large" <a-radio-group v-model:value="createForm.hide_resume" button-style="solid" size="large"
</a-row> </a-row>
</a-col> </a-col>
<a-col span="6"> <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-col>
</a-row> </a-row>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { ref, onMounted, computed, defineProps, watch, defineEmits, createVNode } from 'vue'; import { ref, onMounted, computed, defineProps, watch, defineEmits, createVNode } from 'vue';
import { PostJobapplicantAdd, PostJobapplicantUpdate, GetJobapplicantDetail } from '@/apis/models'; import { PostJobapplicantAdd, PostJobapplicantUpdate, GetJobapplicantDetail } from '@/apis/models';
import Upload from '@/components/form/upload.vue';
import { intersectionAlike } from '@/utils/dataHelper'; import { intersectionAlike } from '@/utils/dataHelper';
import { warnToast, successToast } from '@/utils/toastHelper'; import { warnToast, successToast } from '@/utils/toastHelper';
import { dataForm, otherDataForm, reset } from '@/components/jobseeker/resume/basic/data.ts'; import { dataForm, otherDataForm, reset } from '@/components/jobseeker/resume/basic/data.ts';
import { useCommon } from '@/hooks/useCommon'; import { useCommon } from '@/hooks/useCommon';
let { store, dayjs, richOption, ExclamationCircleOutlined, Modal } = useCommon();
let { store, dayjs, richOption, ExclamationCircleOutlined, Modal, imageprefix } = useCommon();
const dayjsRef = ref(dayjs); const dayjsRef = ref(dayjs);
let props = defineProps(['form_state']); let props = defineProps(['form_state']);
const emit = defineEmits(); const emit = defineEmits();
dob: dayjsRef.value(res.data.dob), 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], 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], 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) => { const dobChange = (val) => {
// 学历 // 学历
const educationPlaceholder = ref('请选择学历'); const educationPlaceholder = ref('请选择学历');
const saveEducation = (data) => { const saveEducation = (data) => {
createForm.value.education = data.val;
createForm.value.education = data.val.key;
} }


// 职称 // 职称
const titlePlaceholder = ref('请选择职称') const titlePlaceholder = ref('请选择职称')
const saveTitle = (data) => { const saveTitle = (data) => {
createForm.value.title = data.val;
createForm.value.title = data.val.key;
} }


// 婚姻状态 // 婚姻状态
const maritalStatusPlaceholder = ref('请选择婚姻状态') const maritalStatusPlaceholder = ref('请选择婚姻状态')
const saveMaritalStatus = (data) => { const saveMaritalStatus = (data) => {
createForm.value.marital_status = data.val;
createForm.value.marital_status = data.val.key;
} }


// 民族 // 民族
const ethnicityPlaceholder = ref('请选择民族') const ethnicityPlaceholder = ref('请选择民族')
const saveEthnicity = (data) => { const saveEthnicity = (data) => {
createForm.value.ethnicity = data.val;
createForm.value.ethnicity = data.val.key;
} }


// 政治面貌 // 政治面貌
const politicalStatusPlaceholder = ref('请选择政治面貌') const politicalStatusPlaceholder = ref('请选择政治面貌')
const savePoliticalStatus = (data) => { const savePoliticalStatus = (data) => {
createForm.value.political_status = data.val;
createForm.value.political_status = data.val.key;
} }





+ 5
- 3
src/components/jobseeker/resume/basic/data.ts 查看文件

height: 0, height: 0,
weight: 0, weight: 0,
political_status: 0, political_status: 0,
native_place: 0
native_place: 0,
} }


export let otherDataForm = { export let otherDataForm = {
dob: '', dob: '',
reg_level_cascader: '', reg_level_cascader: '',
now_level_cascader: '', now_level_cascader: '',
native_place_txt: ''
native_place_txt: '',
photo_img: ''
} }




dob: '', dob: '',
reg_level_cascader: '', reg_level_cascader: '',
now_level_cascader: '', now_level_cascader: '',
native_place_txt: ''
native_place_txt: '',
photo_img: ''
} }


return { dataForm, otherDataForm } return { dataForm, otherDataForm }

+ 1
- 1
src/components/jobseeker/resume/contact/contact.vue 查看文件

<a-row> <a-row>
<a-space direction="vertical"> <a-space direction="vertical">
<a-col span="24"> <a-col span="24">
固&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;话:{{detail.mobile}}
固&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;话:{{detail.landline}}
</a-col> </a-col>
<a-col span="24"> <a-col span="24">
手机号码:{{detail.mobile}} 手机号码:{{detail.mobile}}

+ 1
- 1
src/components/jobseeker/resume/credential/credential.vue 查看文件

</template> </template>
<template v-else> <template v-else>
<a-list :data-source="certificateList"> <a-list :data-source="certificateList">
<template #loadMore>
<template #loadMore v-if="certificateList.length > 0">
<a-flex justify="center"> <a-flex justify="center">
<a-space> <a-space>
<div v-if="!loading"> <div v-if="!loading">

+ 1
- 1
src/components/jobseeker/resume/experience/experience.vue 查看文件

</template> </template>
<template v-else> <template v-else>
<a-list :data-source=" experienceList"> <a-list :data-source=" experienceList">
<template #loadMore>
<template #loadMore v-if="experienceList.length > 0">
<a-flex justify="center"> <a-flex justify="center">
<a-space> <a-space>
<div v-if="!loading" > <div v-if="!loading" >

+ 82
- 79
src/components/jobseeker/resume/intention/intention.vue 查看文件

<a-tab-pane :key="3" tab="其他意向"> <a-tab-pane :key="3" tab="其他意向">
<a-row :gutter="20"> <a-row :gutter="20">
<a-col span="12"> <a-col span="12">
<a-form-item label="其他职位" name="other_positions">
<a-form-item label="其他职位">
<a-input v-model:value="basicForm.other_positions" placeholder="请输入其他职位" <a-input v-model:value="basicForm.other_positions" placeholder="请输入其他职位"
size="large" /> size="large" />
</a-form-item> </a-form-item>
</a-row> </a-row>
</a-tab-pane> </a-tab-pane>
</a-tabs> </a-tabs>

</a-form> </a-form>
</template> </template>
<template v-else> <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-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-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"> <template v-if="basic">
<a-typography> <a-typography>
<a-typography-title :level="5"> <a-typography-title :level="5">
</a-button> </a-button>
<a-divider type="vertical" /> <a-divider type="vertical" />
<a-popconfirm title="是否删除其他意向" @confirm="delBasic(basic.id)"> <a-popconfirm title="是否删除其他意向" @confirm="delBasic(basic.id)">
<a-button size="small" type="text" >
<a-button size="small" type="text">
<DeleteOutlined /> <DeleteOutlined />
</a-button> </a-button>
</a-popconfirm> </a-popconfirm>
import { dataAreaForm, dataPositionForm, dataBasicForm, otherDataForm, reset } from '@/components/jobseeker/resume/intention/data.ts'; import { dataAreaForm, dataPositionForm, dataBasicForm, otherDataForm, reset } from '@/components/jobseeker/resume/intention/data.ts';
import { EditOutlined, FileSearchOutlined, RedoOutlined, DeleteOutlined } from '@ant-design/icons-vue'; import { EditOutlined, FileSearchOutlined, RedoOutlined, DeleteOutlined } from '@ant-design/icons-vue';
import { useCommon } from '@/hooks/useCommon'; 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); const dayjsRef = ref(dayjs);
let props = defineProps(['form_state']); let props = defineProps(['form_state']);
const emit = defineEmits(); const emit = defineEmits();
PostJobapplicantDesirebasedetail().then(res => { PostJobapplicantDesirebasedetail().then(res => {
basic.value = res.data basic.value = res.data
basicForm.value = intersectionAlike(basicForm.value, res.data) basicForm.value = intersectionAlike(basicForm.value, res.data)
console.log(basicForm.value)
basicForm.value.id = res.data.id; basicForm.value.id = res.data.id;
}) })
} }
PostJobapplicantAdddesirearea(areaForm.value).then(res => { PostJobapplicantAdddesirearea(areaForm.value).then(res => {
successToast('保存成功'); successToast('保存成功');
getArea(); getArea();
activeKey.value = 2
resetForm('area') resetForm('area')

}).catch(err => { }).catch(err => {
}) })
} }
} }
const toEdit = (item : Object) => { const toEdit = (item : Object) => {
areaForm.value.id = item.id; areaForm.value.id = item.id;
getDetail(areaForm.value.id) getDetail(areaForm.value.id)
emit("editEdit") emit("editEdit")
} }
// 详情 // 详情
const getDetail = (val) => { const getDetail = (val) => {
PostJobapplicantDesireareadetail({id: val}).then(res => {
PostJobapplicantDesireareadetail({ id: val }).then(res => {
areaForm.value = intersectionAlike(areaForm.value, res.data) areaForm.value = intersectionAlike(areaForm.value, res.data)
areaForm.value.id = res.data.id; areaForm.value.id = res.data.id;
for (var i = 1; i <= 4; i++) { 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]);
}
} }
}) })
} }
PostJobapplicantAdddesireindustry(positionForm.value).then(res => { PostJobapplicantAdddesireindustry(positionForm.value).then(res => {
successToast('保存成功'); successToast('保存成功');
getPosition(); getPosition();
activeKey.value = 3
resetForm('position') resetForm('position')
}).catch(err => { }).catch(err => {
}) })
} }
} }
const toPositionEdit = (item : Object) => { const toPositionEdit = (item : Object) => {
positionForm.value.id = item.id; positionForm.value.id = item.id;
getPositionDetail(positionForm.value.id) getPositionDetail(positionForm.value.id)
activeKey.value = 2 activeKey.value = 2
emit("editEdit") emit("editEdit")
} }
// 详情 // 详情
const getPositionDetail = (val) => { const getPositionDetail = (val) => {
PostJobapplicantDesireindustrydetail({id: val}).then(res => {
PostJobapplicantDesireindustrydetail({ id: val }).then(res => {
positionForm.value = intersectionAlike(positionForm.value, res.data) positionForm.value = intersectionAlike(positionForm.value, res.data)
positionForm.value.id = res.data.id; positionForm.value.id = res.data.id;
for (var i = 1; i <= 2; i++) { 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]);
}
} }
}) })
} }
}) })
} }
} }
const toBasicEdit = (item : Object) => { const toBasicEdit = (item : Object) => {
getBasic() getBasic()
activeKey.value = 3 activeKey.value = 3
emit("editEdit") emit("editEdit")
} }
const delBasic = (id : number) => { const delBasic = (id : number) => {
commomParams.value.delParam = { id: id }; commomParams.value.delParam = { id: id };
PostJobapplicantDeldesirebase(commomParams.value.delParam).then(res => { PostJobapplicantDeldesirebase(commomParams.value.delParam).then(res => {
getBasic(); getBasic();
}) })
} }


const resetForm = (val) => { const resetForm = (val) => {
if (val == 'area') { if (val == 'area') {
areaForm = reset().dataForm as JobseekerIntentionType.JobseekerIntentionAreaFormType;
areaForm.value = reset().dataAreaForm as JobseekerIntentionType.JobseekerIntentionAreaFormType;
} }
if (val == 'position') { if (val == 'position') {
positionForm = reset().dataForm as JobseekerIntentionType.JobseekerIntentionPositionFormType;
positionForm.value = reset().dataPositionForm as JobseekerIntentionType.JobseekerIntentionPositionFormType;
} }
if (val == 'basic') { 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; state.value = false;
emit("quitEdit") emit("quitEdit")
} }
watch(() => [props.form_state], (newVal) => { watch(() => [props.form_state], (newVal) => {
state.value = newVal[0]; state.value = newVal[0];
getBasic(); getBasic();
getPosition();
getArea();
}) })
</script> </script>



+ 2
- 2
src/components/jobseeker/resume/introduction/introduction.vue 查看文件

if (createForm.value.id) { if (createForm.value.id) {
PostJobapplicantUpdateintroduction(createForm.value).then(res => { PostJobapplicantUpdateintroduction(createForm.value).then(res => {
successToast('保存成功'); successToast('保存成功');
getBasic();
resetForm() resetForm()
getBasic();
}).catch(err => { }).catch(err => {
}) })
} else { } else {
PostJobapplicantAddintroduction(createForm.value).then(res => { PostJobapplicantAddintroduction(createForm.value).then(res => {
successToast('保存成功'); successToast('保存成功');
getBasic();
resetForm() resetForm()
getBasic();
}).catch(err => { }).catch(err => {
}) })
} }

+ 14
- 5
src/components/jobseeker/resume/skill/skill.vue 查看文件

<a-input v-model:value="createForm.computer_skills" placeholder="请输入计算机能力" size="large"/> <a-input v-model:value="createForm.computer_skills" placeholder="请输入计算机能力" size="large"/>
</a-form-item> </a-form-item>
</a-col> </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-row>
</a-form> </a-form>
</template> </template>
import { PostJobapplicantAddskill, PostJobapplicantUpdateskill, PostJobapplicantSkilldetail } from '@/apis/models'; import { PostJobapplicantAddskill, PostJobapplicantUpdateskill, PostJobapplicantSkilldetail } from '@/apis/models';
import { intersectionAlike } from '@/utils/dataHelper'; import { intersectionAlike } from '@/utils/dataHelper';
import { warnToast, successToast } from '@/utils/toastHelper'; 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'; import { useCommon } from '@/hooks/useCommon';
let { store, dayjs, richOption, ExclamationCircleOutlined, Modal } = useCommon(); let { store, dayjs, richOption, ExclamationCircleOutlined, Modal } = useCommon();
const dayjsRef = ref(dayjs); const dayjsRef = ref(dayjs);


// 英语 // 英语
const saveEnglish = (data) => { const saveEnglish = (data) => {
createForm.value.english = data.val;
createForm.value.english = data.val.key;
} }


// 国语 // 国语
const saveMandarin = (data) => { const saveMandarin = (data) => {
createForm.value.mandarin = data.val;
createForm.value.mandarin = data.val.key;
} }


// 粤语 // 粤语
const saveCantonese = (data) => { const saveCantonese = (data) => {
createForm.value.cantonese = data.val;
createForm.value.cantonese = data.val.key;
} }


// 第二外语 // 第二外语
const saveOtherLanguage = (data) => { const saveOtherLanguage = (data) => {
createForm.value.english = data.val;
createForm.value.other_language = data.val.key;
} }


const sumbitForm = () => { const sumbitForm = () => {


const resetForm = () => { const resetForm = () => {
createForm.value = reset().dataForm as JobseekerSkillType.JobseekerSkillFormType; createForm.value = reset().dataForm as JobseekerSkillType.JobseekerSkillFormType;
console.log(createForm.value)
state.value = false; state.value = false;
emit("quitEdit") emit("quitEdit")
} }

+ 3
- 3
src/components/jobseeker/resume/train/train.vue 查看文件

</template> </template>
<template v-else> <template v-else>
<a-list :data-source="trainList"> <a-list :data-source="trainList">
<template #loadMore>
<template #loadMore v-if="trainList.length > 0">
<a-flex justify="center"> <a-flex justify="center">
<a-space> <a-space>
<div v-if="!loading" > <div v-if="!loading" >
</div> </div>
</a-space> </a-space>
</a-flex> </a-flex>
</template> </template>
<template #renderItem="{ item }"> <template #renderItem="{ item }">
<a-list-item> <a-list-item>
PostJobapplicantUpdatetraining(createForm.value).then(res => { PostJobapplicantUpdatetraining(createForm.value).then(res => {
successToast('保存成功'); successToast('保存成功');
resetForm() resetForm()
getData();
}).catch(err => { }).catch(err => {
}) })
} else { } else {
PostJobapplicantAddtraining(createForm.value).then(res => { PostJobapplicantAddtraining(createForm.value).then(res => {
successToast('保存成功'); successToast('保存成功');
resetForm() resetForm()
getData();
}).catch(err => { }).catch(err => {
}) })
} }
time.value = '' time.value = ''
createForm.value = reset().dataForm as JobseekerTrainType.JobseekerTrainFormType; createForm.value = reset().dataForm as JobseekerTrainType.JobseekerTrainFormType;
state.value = false; state.value = false;
getData();
emit("quitEdit") emit("quitEdit")
} }



+ 19
- 4
src/components/layout/menu/aMenu.vue 查看文件

:deep(.ant-menu-submenu-selected::after) { :deep(.ant-menu-submenu-selected::after) {
border-bottom-color: #4FBE70 !important; border-bottom-color: #4FBE70 !important;
} }
:deep(.ant-menu-submenu-open::after) {
/* :deep(.ant-menu-submenu-open::after) {
color: #4FBE70 !important; 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; 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) { :deep(.ant-menu-item-active::after) {
color: #ffffff !important; color: #ffffff !important;
border-bottom-color: #4FBE70 !important; border-bottom-color: #4FBE70 !important;
.ant-menu-item-selected .ant-menu-item-title { .ant-menu-item-selected .ant-menu-item-title {
color: #4FBE70 !important; color: #4FBE70 !important;
} */
}


</style> </style>

+ 2
- 1
src/hooks/useCommon.ts 查看文件

}; };


// 照片前缀 // 照片前缀
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/'







+ 1
- 1
src/main.ts 查看文件

import { routesModuleList } from '@/router/dynamic'; import { routesModuleList } from '@/router/dynamic';
import { routesManageModuleList } from '@/router/manageDynamic'; import { routesManageModuleList } from '@/router/manageDynamic';
router.beforeEach((to, from, next) => { router.beforeEach((to, from, next) => {
document.title = `菊城人才市场后台管理`;
document.title = `菊城人才`;
if (store.state.permissions.permissionList == null) { if (store.state.permissions.permissionList == null) {
store.commit('getToken', { store.commit('getToken', {
token: sessionStorage.getItem('token') ? sessionStorage.getItem('token') : '' token: sessionStorage.getItem('token') ? sessionStorage.getItem('token') : ''

+ 8
- 1
src/style.css 查看文件

.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled) { .ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled) {
background: #4FBE70 !important; background: #4FBE70 !important;
border-color: #4FBE70 !important; border-color: #4FBE70 !important;
color: #ffffff !important;
} }


.ant-radio-button-wrapper:hover { .ant-radio-button-wrapper:hover {
color: #4FBE70 !important; color: #4FBE70 !important;
background: #ffffff !important;
}

.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled)::before {
background-color: none !important;
} }


.resume-form { .resume-form {
background-color: #f8f8f8; background-color: #f8f8f8;
padding: 16px; padding: 16px;
border-radius: 8px; border-radius: 8px;
}
}


+ 2
- 0
src/utils/reqHelper.ts 查看文件

return function (params : object) { return function (params : object) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
httpGet(url, params, function (response) { httpGet(url, params, function (response) {
console.log(response)
if (response.data.code == 0) { if (response.data.code == 0) {
resolve(response.data) resolve(response.data)
} else { } else {
return function (params : object) { return function (params : object) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
httpPost(url, params, function (response) { httpPost(url, params, function (response) {
console.log(response)
if (response.data.code == 0) { if (response.data.code == 0) {
resolve(response.data) resolve(response.data)
} else { } else {

+ 8
- 0
src/views/common/personal/index.vue 查看文件

width: 100%; width: 100%;
height: 400px; height: 400px;
} }
:deep(.ant-card) {
padding: 0 !important;
}
:deep(.ant-card-body) {
padding: 0 !important;
}
</style> </style>

+ 34
- 26
src/views/jobseeker/home/index.vue 查看文件

<div> <div>
会员编号:{{basic.id}} 会员编号:{{basic.id}}
</div> </div>
<div>
关注公众号:{{basic.id}}
</div>
</template> </template>
<template #avatar> <template #avatar>
<a-avatar :src="'https://rcsc-test.jcjob.cn/img'+basic.photo" :size="96" /> <a-avatar :src="'https://rcsc-test.jcjob.cn/img'+basic.photo" :size="96" />
<a-descriptions :column="3"> <a-descriptions :column="3">
<a-descriptions-item <a-descriptions-item
label="登录账号">{{basic.mobile ? basic.mobile : '未知'}}</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" />预览简历 <FileSearchOutlined style="color: #4FBE70" />预览简历
</a-button></a-descriptions-item> </a-button></a-descriptions-item>
<a-descriptions-item label="简历是否可见"> <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>
<a-descriptions-item label="QQ"> <a-descriptions-item label="QQ">
{{basic.qq ? basic.qq : '未填写'}} {{basic.qq ? basic.qq : '未填写'}}
</a-descriptions-item> </a-descriptions-item>
<a-descriptions-item> <a-descriptions-item>
<a-button type="link" class="main-color" @click="refreshResume"> <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-button>
</a-descriptions-item> </a-descriptions-item>
<a-descriptions-item label="简历是否在家政可见"> <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>
<a-descriptions-item label="电子邮箱"> <a-descriptions-item label="电子邮箱">
{{basic.email ? basic.email : '未填写'}} {{basic.email ? basic.email : '未填写'}}
{{seeLength}}次 {{seeLength}}次
</a-descriptions-item> </a-descriptions-item>
<a-descriptions-item label="是否接收面试邀请通知"> <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-item>
</a-descriptions> </a-descriptions>
</div> </div>
<invite-apply v-if="activeKey == 2"></invite-apply> <invite-apply v-if="activeKey == 2"></invite-apply>
</a-tab-pane> </a-tab-pane>
<a-tab-pane :key="3" tab="谁看过我"> <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>
<a-tab-pane :key="4" tab="收藏的职位"> <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-tab-pane>
</a-tabs> </a-tabs>
</a-col> </a-col>
</a-row> </a-row>
</div> </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> </template>


<script setup lang="ts"> <script setup lang="ts">
import { warnToast, successToast } from '@/utils/toastHelper'; import { warnToast, successToast } from '@/utils/toastHelper';
import { EditOutlined, FileSearchOutlined, RedoOutlined } from '@ant-design/icons-vue'; import { EditOutlined, FileSearchOutlined, RedoOutlined } from '@ant-design/icons-vue';
import { useCommon } from '@/hooks/useCommon'; import { useCommon } from '@/hooks/useCommon';
let { commomParams, ExclamationCircleOutlined, Modal, onMenu,showOtherModal1 } = useCommon();
let { commomParams, ExclamationCircleOutlined, Modal, onMenu, showOtherModal1 } = useCommon();
let jobList = ref<Object[]>([]) let jobList = ref<Object[]>([])
let basic = ref<Object>({}) let basic = ref<Object>({})
let seeLength = ref<Number>(0) let seeLength = ref<Number>(0)
let activeKey = ref<Number>(1) let activeKey = ref<Number>(1)
let refreshing = ref<Boolean>(false) let refreshing = ref<Boolean>(false)
let createForm = ref<Object>({ let createForm = ref<Object>({
hide_resume: 1, hide_resume: 1,
house_keeping_status: 2, house_keeping_status: 2,
remind_interview: 2 remind_interview: 2
}) })


const toResume = () => { const toResume = () => {
onMenu('/jobseeker/resume') onMenu('/jobseeker/resume')
} }
const refreshResume = () => { const refreshResume = () => {
refreshing.value = true; refreshing.value = true;
successToast('简历已刷新') successToast('简历已刷新')
refreshing.value = false refreshing.value = false
} }
const changeResumeState = (val) => { const changeResumeState = (val) => {
createForm.value.id = basic.value.id, createForm.value.id = basic.value.id,
PostJobapplicantUpdate(createForm.value)
PostJobapplicantUpdate(createForm.value)
} }
let detail_record = ref<Object>(null) let detail_record = ref<Object>(null)
const detail = (record) => { const detail = (record) => {
detail_record.value = record; detail_record.value = record;
showOtherModal1() showOtherModal1()
} }
onMounted(async () => { onMounted(async () => {
let res = await GetJobseekerDetail({ customer_id: sessionStorage.getItem('id') }) let res = await GetJobseekerDetail({ customer_id: sessionStorage.getItem('id') })
basic.value = res.data; basic.value = res.data;
createForm.value.hide_resume = res.data.hide_resume; createForm.value.hide_resume = res.data.hide_resume;
createForm.value.house_keeping_status = res.data.house_keeping_status; createForm.value.house_keeping_status = res.data.house_keeping_status;
createForm.value.remind_interview = res.data.remind_interview; 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) { if (res1.data.list.length > 0) {
Modal.confirm({ Modal.confirm({
title: `您有${res1.data.list.length}条待查看面试邀请`, title: `您有${res1.data.list.length}条待查看面试邀请`,
okText: '前往查看', okText: '前往查看',
cancelText: '关闭', cancelText: '关闭',
onOk() { onOk() {
}, },
onCancel() { onCancel() {
}, },
}); });
} }


let res2 = GetViewHistoryList() let res2 = GetViewHistoryList()
seeLength.value = res2.data.viewhistorys ? res2.data.viewhistorys.length : 0 seeLength.value = res2.data.viewhistorys ? res2.data.viewhistorys.length : 0
}) })
</script> </script>



+ 1
- 1
src/views/jobseeker/resume/index.vue 查看文件

// 退出编辑 // 退出编辑
const quitEdit = () => { const quitEdit = () => {
editObj.value[editingKey.value] = false; editObj.value[editingKey.value] = false;
console.log(editObj.value)
editingKey.value = null
} }


const abc = ref(null) const abc = ref(null)

Loading…
取消
儲存