| @@ -1 +1 @@ | |||
| import{d as r,r as o,o as p,c,w as t,a as _,b as u,e,_ as i}from"./index-cCn3CK44.js";const m=r({__name:"404",setup(l){const s=()=>{sessionStorage.pageType=="company"?e.push("/manage/home"):sessionStorage.pageType=="personal"?e.push("/jobseeker/home"):e.push("/job/home")};return(d,h)=>{const a=o("a-button"),n=o("a-result");return p(),c(n,{status:"404",title:"404","sub-title":"Sorry, the page you visited does not exist."},{extra:t(()=>[u(a,{type:"primary",onClick:s},{default:t(()=>[_("返回首页")]),_:1})]),_:1})}}}),x=i(m,[["__scopeId","data-v-9cda8440"]]);export{x as default}; | |||
| import{d as r,r as o,o as p,c,w as t,a as _,b as u,e,_ as i}from"./index-d9zHASBb.js";const m=r({__name:"404",setup(l){const s=()=>{sessionStorage.pageType=="company"?e.push("/manage/home"):sessionStorage.pageType=="personal"?e.push("/jobseeker/home"):e.push("/job/home")};return(d,h)=>{const a=o("a-button"),n=o("a-result");return p(),c(n,{status:"404",title:"404","sub-title":"Sorry, the page you visited does not exist."},{extra:t(()=>[u(a,{type:"primary",onClick:s},{default:t(()=>[_("返回首页")]),_:1})]),_:1})}}}),x=i(m,[["__scopeId","data-v-9cda8440"]]);export{x 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-cCn3CK44.js"></script> | |||
| <link rel="stylesheet" crossorigin href="/assets/index-ia0wri7Z.css"> | |||
| <script type="module" crossorigin src="/assets/index-d9zHASBb.js"></script> | |||
| <link rel="stylesheet" crossorigin href="/assets/index-lEQJ0AIX.css"> | |||
| </head> | |||
| <body> | |||
| <div id="app"></div> | |||
| @@ -4,16 +4,18 @@ import { warnToast, successToast } from '@/utils/toastHelper'; | |||
| import { router } from '@/router'; | |||
| import { createVNode } from 'vue'; | |||
| import { useCommon } from '@/hooks/useCommon'; | |||
| let { commomParams, ExclamationCircleOutlined, Modal } = useCommon(); | |||
| let { store, commomParams, ExclamationCircleOutlined, Modal } = useCommon(); | |||
| import { useMenu } from '@/hooks/useMenu'; | |||
| let { routerCur } = useMenu(); | |||
| const msgModel = (val) => { | |||
| const msgModel = (val, code) => { | |||
| Modal.confirm({ | |||
| title: val, | |||
| centered: true, | |||
| icon: createVNode(ExclamationCircleOutlined), | |||
| okText: '确认', | |||
| onOk() { | |||
| }, | |||
| onCancel() { | |||
| @@ -45,7 +47,7 @@ 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, response.data.code) | |||
| break; | |||
| case 0: | |||
| break; | |||
| @@ -53,21 +55,40 @@ instance.interceptors.response.use(function (response) { | |||
| return response; | |||
| break; | |||
| case 401: | |||
| msgModel(response.data.msg) | |||
| msgModel(response.data.msg, response.data.code) | |||
| setTimeout(() => { | |||
| if (routerCur() == '/job/home') { | |||
| sessionStorage.clear() | |||
| location.reload() | |||
| } else { | |||
| store.commit('getPageType', { | |||
| pageType: '' | |||
| }) | |||
| store.commit('setShowLoginBox', { | |||
| showLoginBox: false | |||
| }) | |||
| sessionStorage.clear() | |||
| sessionStorage.setItem('pageType', '') | |||
| store.commit('permissions/SET_PERMISSION', null) | |||
| store.commit('permissions/SET_MENU', []) | |||
| router.push('/job/home') | |||
| } | |||
| }, 2000) | |||
| break; | |||
| case 403: | |||
| msgModel(response.data.msg) | |||
| msgModel(response.data.msg, response.data.code) | |||
| break; | |||
| case 404: | |||
| break; | |||
| case 600: | |||
| if (response.data.errors && Object.keys(response.data.errors).length > 0) { | |||
| msgModel(response.data.errors) | |||
| msgModel(response.data.errors, response.data.code) | |||
| } else { | |||
| msgModel(response.data.msg) | |||
| msgModel(response.data.msg, response.data.code) | |||
| } | |||
| break; | |||
| default: | |||
| msgModel(response.data.msg) | |||
| msgModel(response.data.msg, response.data.code) | |||
| // warnToast(response.data.msg); | |||
| } | |||
| // 2xx 范围内的状态码都会触发该函数。 | |||
| @@ -17,6 +17,8 @@ export const PostJobseekerEditPwd = postModel(url.JobseekerEditPwd); | |||
| export const PostCompanyLoginByMobile = postModel(url.CompanyLoginByMobile); | |||
| export const PostJobseekerResetPwd = postModel(url.JobseekerResetPwd); | |||
| export const PostCustomerTokenExpiration = postModel(url.CustomerTokenExpiration); | |||
| // 招聘会 | |||
| export const PostRecruitmentBookcompany = getModel(url.RecruitmentBookcompany);// 获取招聘会参与的企业 | |||
| export const PostRecruitmentList = getModel(url.RecruitmentList);// 招聘会列表 | |||
| @@ -94,6 +96,8 @@ export const PostCompanycustomercodeDel = postModel(url.CompanycustomercodeDel); | |||
| export const PostCompanycustomercodeUpdate = postModel(url.CompanycustomercodeUpdate); // 编辑 | |||
| export const GetCompanycustomercodeList = getModel(url.CompanycustomercodeList); // 列表 | |||
| export const GetCompanycustomercodeDetail = getModel(url.CompanycustomercodeDetail); // 添加 | |||
| export const GetCompanyRecruiters = getModel(url.CompanyRecruiters); // 列表 | |||
| export const PostCustomerUpdate = postModel(url.CustomerUpdate); // 编辑 | |||
| // 展示广告位 | |||
| export const GetAdvertscheduleList = getModel(url.AdvertscheduleList); // 添加 | |||
| @@ -14,6 +14,7 @@ declare namespace urlType { | |||
| Jobseekerlogin: String, | |||
| JobseekerResetPwd: String, | |||
| SysconfigDetail: String, | |||
| CustomerTokenExpiration: String, | |||
| // 招聘会 | |||
| RecruitmentBookcompany : String, | |||
| @@ -84,6 +85,8 @@ declare namespace urlType { | |||
| CompanycustomercodeUpdate : String, | |||
| CompanycustomercodeList : String, | |||
| CompanycustomercodeDetail : String, | |||
| CompanyRecruiters : String, | |||
| CustomerUpdate : String, | |||
| // 展示广告位 | |||
| AdvertscheduleList | |||
| @@ -18,6 +18,7 @@ export const url : urlType.url = { | |||
| JobseekerResetPwd: web + '/jobseeker/resetpwd', // 修改密码 | |||
| 'SysconfigDetail': common + '/sysconfig/detail', // 详情 | |||
| 'CustomerTokenExpiration': common + '/customer/token_expiration', // 详情 | |||
| @@ -86,7 +87,9 @@ export const url : urlType.url = { | |||
| CompanycustomercodeUpdate: web + '/companycustomercode/update', // 编辑 | |||
| CompanycustomercodeList: web + '/companycustomercode/list', // 列表 | |||
| CompanycustomercodeDetail: web + '/companycustomercode/detail', // 详情 | |||
| CompanyRecruiters: web + '/company/recruiters', // 详情 | |||
| CustomerUpdate: common + '/customer/turn_jobseeker', // 详情 | |||
| // 展示广告位 | |||
| AdvertscheduleList: web + '/advertschedule/list', // 详情 | |||
| @@ -9,6 +9,9 @@ | |||
| <template #meet_status="{ record }"> | |||
| <slot name="meet_status" :record='record'></slot> | |||
| </template> | |||
| <template #status="{ record }"> | |||
| <slot name="status" :record='record'></slot> | |||
| </template> | |||
| </a-table> | |||
| </template> | |||
| @@ -104,7 +104,7 @@ | |||
| import { warnToast, successToast } from '@/utils/toastHelper'; | |||
| let { store, commomParams, dayjs, richOption, ExclamationCircleOutlined, Modal, showOtherModal1 } = useCommon(); | |||
| let props = defineProps(['id']); | |||
| let job_id = ref<Number>(props.id) | |||
| let job_id = ref<Number>(sessionStorage.getItem('job_id') ? sessionStorage.getItem('job_id') : '') | |||
| let detail = ref<Object>(null); | |||
| let spinning = ref<Boolean>(false) | |||
| let token = ref(sessionStorage.getItem('token') ? sessionStorage.getItem('token') : '') | |||
| @@ -199,7 +199,7 @@ | |||
| detail.value = null | |||
| getDetail() | |||
| } | |||
| }) | |||
| },{immediate: true}) | |||
| </script> | |||
| <style scoped lang="less"> | |||
| @@ -5,7 +5,7 @@ | |||
| > | |||
| <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%;"> | |||
| <a-flex justify="space-between" style="width: 100%;">{{item.id}} | |||
| <div style="font-size: 18px; font-weight: 600;" @click="toDetail(item.id, item.company_id)">{{item.name}}</div> | |||
| <div style="color: #4FBE70;font-size: 18px;">{{item.pay_range_text}}</div> | |||
| </a-flex> | |||
| @@ -43,9 +43,7 @@ | |||
| sessionStorage.setItem('tab_key', 1) | |||
| sessionStorage.setItem('pubilc_id', company_id) | |||
| sessionStorage.setItem('mode', 'detail') | |||
| router.push({ | |||
| path: '/personal' | |||
| }) | |||
| window.open('/company/detail', "_blank"); | |||
| } | |||
| const toDetail = (job_id : Number, company_id : Number) => { | |||
| @@ -53,9 +51,7 @@ | |||
| sessionStorage.setItem('tab_key', 2) | |||
| sessionStorage.setItem('pubilc_id', company_id) | |||
| sessionStorage.setItem('mode', 'detail') | |||
| router.push({ | |||
| path: '/personal' | |||
| }) | |||
| window.open('/company/detail', "_blank"); | |||
| } | |||
| watch(() => props.list, (newVal) => { | |||
| jobList.value = newVal | |||
| @@ -11,7 +11,7 @@ | |||
| <a-col span="18"> | |||
| <a-row :gutter="[10,10]"> | |||
| <a-col span="8" v-for="(item, index) in data1"> | |||
| <a-card hoverable style="width: 100%;height: 222px;" @click="toCompanyDetail(item.id)"> | |||
| <a-card hoverable style="width: 100%;height: 222px;" @click="toCompanyDetail(item.company_id)"> | |||
| <template #cover> | |||
| <div style="width: 100%;padding-top: 20px;"> | |||
| <a-flex justify="center" align="center"> | |||
| @@ -94,7 +94,7 @@ | |||
| <template v-if="showData"> | |||
| <a-row :gutter="[10,10]" style="margin-top: 10px;"> | |||
| <a-col span="6" v-for="(item, index) in data2"> | |||
| <a-card hoverable style="width: 100%;height: 222px;" @click="toCompanyDetail(item.id)"> | |||
| <a-card hoverable style="width: 100%;height: 222px;" @click="toCompanyDetail(item.company_id)"> | |||
| <template #cover> | |||
| <div style="width: 100%;padding-top: 20px;"> | |||
| <a-flex justify="center" align="center"> | |||
| @@ -158,9 +158,7 @@ | |||
| const toCompanyDetail = (val : Number) => { | |||
| sessionStorage.setItem('pubilc_id', val) | |||
| sessionStorage.setItem('mode', 'detail') | |||
| router.push({ | |||
| path: '/personal' | |||
| }) | |||
| window.open('/company/detail', "_blank"); | |||
| } | |||
| const toArticle = (item) => { | |||
| @@ -124,7 +124,7 @@ | |||
| <script lang="ts" setup> | |||
| import { ref, onMounted, computed, defineProps, defineEmits } from 'vue'; | |||
| import ATopMenu from '@/components/layout/menu/aMenu.vue'; | |||
| import { PostCustomerVerify, GetPersonInterviewList, GetCompanyResumeList, PostCompanyJobList } from '@/apis/models'; | |||
| import { PostCustomerVerify, GetPersonInterviewList, GetCompanyResumeList, PostCustomerTokenExpiration, PostCompanyJobList } from '@/apis/models'; | |||
| import { warnToast, successToast } from '@/utils/toastHelper'; | |||
| import { store } from '@/store/index'; | |||
| import { router } from '@/router/index'; | |||
| @@ -156,22 +156,24 @@ | |||
| } | |||
| const quit = () => { | |||
| if(routerCur() == '/job/home') { | |||
| sessionStorage.clear() | |||
| location.reload() | |||
| } else { | |||
| store.commit('getPageType', { | |||
| pageType: '' | |||
| }) | |||
| store.commit('setShowLoginBox', { | |||
| showLoginBox: false | |||
| }) | |||
| sessionStorage.clear() | |||
| sessionStorage.setItem('pageType', '') | |||
| store.commit('permissions/SET_PERMISSION', null) | |||
| store.commit('permissions/SET_MENU', []) | |||
| router.push('/job/home') | |||
| } | |||
| PostCustomerTokenExpiration().then(res => { | |||
| if(routerCur() == '/job/home') { | |||
| sessionStorage.clear() | |||
| location.reload() | |||
| } else { | |||
| store.commit('getPageType', { | |||
| pageType: '' | |||
| }) | |||
| store.commit('setShowLoginBox', { | |||
| showLoginBox: false | |||
| }) | |||
| sessionStorage.clear() | |||
| sessionStorage.setItem('pageType', '') | |||
| store.commit('permissions/SET_PERMISSION', null) | |||
| store.commit('permissions/SET_MENU', []) | |||
| router.push('/job/home') | |||
| } | |||
| }) | |||
| } | |||
| @@ -2,27 +2,29 @@ | |||
| <a-menu mode="horizontal" v-model:openKeys="openSubMenu" @openChange="onOpenChange" | |||
| v-model:selectedKeys="selectedMenu" style="background: #0A130D; height: '90vh';color: #ffffff;"> | |||
| <template v-for="(item,index) in menuList"> | |||
| <template v-if="!item.children"> | |||
| <a-menu-item :key="item.path" @click="onMenu(item.path)"> | |||
| <span>{{item.meta.title}}</span> | |||
| </a-menu-item> | |||
| </template> | |||
| <template v-else> | |||
| <a-sub-menu :key="item.path"> | |||
| <template #title>{{item.meta.title}}</template> | |||
| <template v-for="(twoItem, twoIndex) in item.children"> | |||
| <a-sub-menu v-if="twoItem.children" :key="twoItem.path"> | |||
| <template #title> | |||
| {{twoItem.meta.title}} | |||
| </template> | |||
| <a-menu-item v-for="(threeItem, threeIndex) in twoItem.children" :key="threeItem.path" | |||
| @click="onMenu(threeItem.path)">{{ threeItem.meta.title }}</a-menu-item> | |||
| </a-sub-menu> | |||
| <a-menu-item v-else @click="onMenu(twoItem.path)" :key="twoItem.path"> | |||
| {{ twoItem.meta.title }} | |||
| </a-menu-item> | |||
| </template> | |||
| </a-sub-menu> | |||
| <template v-if="item.meta.title != '企业详情' && item.meta.title != '职位详情'"> | |||
| <template v-if="!item.children"> | |||
| <a-menu-item :key="item.path" @click="onMenu(item.path)"> | |||
| <span>{{item.meta.title}}</span> | |||
| </a-menu-item> | |||
| </template> | |||
| <template v-else> | |||
| <a-sub-menu :key="item.path"> | |||
| <template #title>{{item.meta.title}}</template> | |||
| <template v-for="(twoItem, twoIndex) in item.children"> | |||
| <a-sub-menu v-if="twoItem.children" :key="twoItem.path"> | |||
| <template #title> | |||
| {{twoItem.meta.title}} | |||
| </template> | |||
| <a-menu-item v-for="(threeItem, threeIndex) in twoItem.children" :key="threeItem.path" | |||
| @click="onMenu(threeItem.path)">{{ threeItem.meta.title }}</a-menu-item> | |||
| </a-sub-menu> | |||
| <a-menu-item v-else @click="onMenu(twoItem.path)" :key="twoItem.path"> | |||
| {{ twoItem.meta.title }} | |||
| </a-menu-item> | |||
| </template> | |||
| </a-sub-menu> | |||
| </template> | |||
| </template> | |||
| </template> | |||
| </a-menu> | |||
| @@ -6,9 +6,13 @@ export const cols = <ColType.type[]>[ | |||
| }, { | |||
| title: '绑定的账号', | |||
| dataIndex: 'customer.username' | |||
| }, { | |||
| title: '联系方式', | |||
| dataIndex: 'customer.mobile' | |||
| }, { | |||
| title: '使用状态', | |||
| dataIndex: 'customer_id' | |||
| dataIndex: 'customer_id', | |||
| slots: { customRender: 'status' }, | |||
| }, { | |||
| title: '生成时间', | |||
| dataIndex: 'created_at', | |||
| @@ -6,6 +6,10 @@ | |||
| </template> | |||
| <a-biaoge :data="commomParams.table.data" :columns="commomParams.table.columns" :pagination="commomParams.page" | |||
| @page="getPage" :loading="loading"> | |||
| <template #status="{ record }"> | |||
| <a-tag color="green" v-if="record.customer_id ==0">未使用</a-tag> | |||
| <a-tag color="red" v-else>已使用</a-tag> | |||
| </template> | |||
| <template #default="{ record }"> | |||
| <a-row :gutter="20"> | |||
| <a-col> | |||
| @@ -24,8 +24,6 @@ | |||
| watch(() => props.search_params, (newVal) => { | |||
| emit('searchData', commomParams.value.search) | |||
| },{ | |||
| immediate: true | |||
| }) | |||
| const getData = () => { | |||
| @@ -0,0 +1,18 @@ | |||
| export const cols = <ColType.type[]>[ | |||
| { | |||
| title: '绑定的账号', | |||
| dataIndex: 'username' | |||
| }, { | |||
| title: '联系方式', | |||
| dataIndex: 'mobile' | |||
| },{ | |||
| title: '绑定时间', | |||
| dataIndex: 'created_at', | |||
| }, | |||
| { | |||
| title: '操作', | |||
| dataIndex: 'operation', | |||
| slots: { customRender: 'operation' }, | |||
| }, | |||
| ] | |||
| @@ -0,0 +1,146 @@ | |||
| <template> | |||
| <a-search @searchData="searchData" @clearData="clearData" :search_params="commomParams.search"></a-search> | |||
| <a-card title="转换验证码"> | |||
| <template #extra> | |||
| <a-button @click="getCode" type="primary" size="large">生成验证码</a-button> | |||
| </template> | |||
| <a-biaoge :data="commomParams.table.data" :columns="commomParams.table.columns" :pagination="commomParams.page" | |||
| @page="getPage" :loading="loading"> | |||
| <template #status="{ record }"> | |||
| <a-tag color="green" v-if="record.customer_id ==0">未使用</a-tag> | |||
| <a-tag color="red" v-else>已使用</a-tag> | |||
| </template> | |||
| <template #default="{ record }"> | |||
| <a-row :gutter="20"> | |||
| <a-col> | |||
| <a-dropdown placement="bottomRight"> | |||
| <template #overlay> | |||
| <a-menu> | |||
| <a-menu-item key="1"> | |||
| <a-button @click="unbind(record.id)" block>解除授权</a-button> | |||
| </a-menu-item> | |||
| </a-menu> | |||
| </template> | |||
| <a-button> | |||
| 操作 | |||
| <DownOutlined /> | |||
| </a-button> | |||
| </a-dropdown> | |||
| </a-col> | |||
| </a-row> | |||
| </template> | |||
| </a-biaoge> | |||
| </a-card> | |||
| </template> | |||
| <script setup lang="ts"> | |||
| import { ref, onMounted, computed, defineEmits, createVNode } from 'vue'; | |||
| import { PostCompanycustomercodeAdd, PostCompanycustomercodeDel, PostCustomerUpdate, GetCompanyRecruiters } from '@/apis/models'; | |||
| import ASearch from '@/components/user/manage/search.vue'; | |||
| import { useCommon } from '@/hooks/useCommon'; | |||
| import { cols } from '@/components/user/manage/columns'; | |||
| import { warnToast, successToast } from '@/utils/toastHelper'; | |||
| const emit = defineEmits(); | |||
| let { commomParams, ExclamationCircleOutlined, Modal } = useCommon(); | |||
| let loading = ref<Boolean>(true); | |||
| onMounted(() => { | |||
| getData(); | |||
| }) | |||
| const searchData = (data : object) => { | |||
| commomParams.value.search = data | |||
| getData(); | |||
| } | |||
| const clearData = (data : object) => { | |||
| if (data) { | |||
| commomParams.value.search = data | |||
| } else { | |||
| commomParams.value.search = { | |||
| page: 1, | |||
| pagesize: 10, | |||
| sort: 'id', | |||
| sortby: 'asc', | |||
| keyword: '' | |||
| } | |||
| } | |||
| getData(); | |||
| } | |||
| const getPage = (data : object) => { | |||
| commomParams.value.search.page = data.current; | |||
| commomParams.value.search.pagesize = data.pageSize; | |||
| getData(); | |||
| } | |||
| const getData = async () => { | |||
| try { | |||
| loading.value = true; | |||
| let res = await GetCompanyRecruiters(); | |||
| loading.value = false; | |||
| commomParams.value.table.data = res.data.customers; | |||
| commomParams.value.table.columns = cols; | |||
| commomParams.value.page = { | |||
| current: commomParams.value.search.page, | |||
| pageSize: commomParams.value.search.pagesize, | |||
| total: res.data.total, | |||
| pageSizeOptions: ['10', '20', '30', '40'], | |||
| hideOnSinglePage: false, | |||
| showSizeChanger: true | |||
| }; | |||
| } catch { | |||
| loading.value = false; | |||
| } | |||
| } | |||
| // 修改 | |||
| const edit = (record : Object) => { | |||
| emit('toEdit', { record: record }) | |||
| } | |||
| const unbind = (id) => { | |||
| Modal.confirm({ | |||
| title: '是否要解除授权该账号', | |||
| icon: createVNode(ExclamationCircleOutlined), | |||
| centered: true, | |||
| onOk() { | |||
| PostCustomerUpdate({ id: id, role: 1 }).then(res => { | |||
| successToast('解除授权成功') | |||
| getData() | |||
| }) | |||
| }, | |||
| onCancel() { | |||
| }, | |||
| }); | |||
| } | |||
| const del = (id : number) => { | |||
| commomParams.value.delParam = { id: id }; | |||
| Modal.confirm({ | |||
| title: '是否要删除此验证码', | |||
| icon: createVNode(ExclamationCircleOutlined), | |||
| centered: true, | |||
| onOk() { | |||
| PostCompanycustomercodeDel(commomParams.value.delParam).then(res => { | |||
| successToast('删除成功'); | |||
| getData(); | |||
| }) | |||
| }, | |||
| onCancel() { | |||
| }, | |||
| }); | |||
| } | |||
| </script> | |||
| <style scoped lang="less"> | |||
| </style> | |||
| @@ -0,0 +1,52 @@ | |||
| <template> | |||
| <a-form :model="commomParams.search"> | |||
| <a-row :gutter="20"> | |||
| <a-col span="6"> | |||
| <a-form-item> | |||
| <a-input-search v-model:value="commomParams.search.keyword" placeholder="请输入验证码" enter-button="搜索" | |||
| @search="getData" /> | |||
| </a-form-item> | |||
| </a-col> | |||
| <a-col span="6"> | |||
| <a-button type="primary" @click="clearSearch">重置</a-button> | |||
| </a-col> | |||
| </a-row> | |||
| </a-form> | |||
| </template> | |||
| <script lang="ts" setup> | |||
| import { ref, onMounted, watch, computed } from 'vue'; | |||
| import { useCommon } from '@/hooks/useCommon'; | |||
| let { commomParams } = useCommon(); | |||
| let props = defineProps(['search_params']); | |||
| const emit = defineEmits(); | |||
| watch(() => props.search_params, (newVal) => { | |||
| emit('searchData', commomParams.value.search) | |||
| }) | |||
| const getData = () => { | |||
| emit('searchData', commomParams.value.search) | |||
| } | |||
| // 清空搜索 | |||
| const clearSearch = () => { | |||
| commomParams.value.search = { | |||
| page: 1, | |||
| pagesize: 10, | |||
| sort: 'id', | |||
| sortby: 'asc', | |||
| keyword: '' | |||
| } | |||
| emit('clearData', commomParams.value.search) | |||
| } | |||
| </script> | |||
| <style> | |||
| </style> | |||
| @@ -56,7 +56,7 @@ | |||
| <script setup lang="ts"> | |||
| import { ref, onMounted, computed, onBeforeUnmount } from 'vue'; | |||
| import { PostJobseekerEditPwd, PostSmsSend, GetCaptcha, PostJobseekerResetPwd } from '@/apis/models'; | |||
| import { PostJobseekerEditPwd, PostSmsSend,PostCustomerTokenExpiration, GetCaptcha, PostJobseekerResetPwd } from '@/apis/models'; | |||
| import { warnToast, successToast } from '@/utils/toastHelper'; | |||
| import { store } from '@/store/index'; | |||
| import { router } from '@/router/index'; | |||
| @@ -136,22 +136,25 @@ | |||
| } | |||
| const quit = () => { | |||
| if (routerCur() == '/job/home') { | |||
| sessionStorage.clear() | |||
| location.reload() | |||
| } else { | |||
| store.commit('getPageType', { | |||
| pageType: '' | |||
| }) | |||
| store.commit('setShowLoginBox', { | |||
| showLoginBox: false | |||
| }) | |||
| sessionStorage.clear() | |||
| sessionStorage.setItem('pageType', '') | |||
| store.commit('permissions/SET_PERMISSION', null) | |||
| store.commit('permissions/SET_MENU', []) | |||
| router.push('/job/home') | |||
| } | |||
| PostCustomerTokenExpiration().then(res => { | |||
| if (routerCur() == '/job/home') { | |||
| sessionStorage.clear() | |||
| location.reload() | |||
| } else { | |||
| store.commit('getPageType', { | |||
| pageType: '' | |||
| }) | |||
| store.commit('setShowLoginBox', { | |||
| showLoginBox: false | |||
| }) | |||
| sessionStorage.clear() | |||
| sessionStorage.setItem('pageType', '') | |||
| store.commit('permissions/SET_PERMISSION', null) | |||
| store.commit('permissions/SET_MENU', []) | |||
| router.push('/job/home') | |||
| } | |||
| }) | |||
| } | |||
| const resetForm = () => { | |||
| @@ -180,6 +180,26 @@ const RegisterRoute : AppRouteRecordRaw = { | |||
| }, | |||
| }; | |||
| // 新窗口 | |||
| export const OutpageCompanyRoute: AppRouteRecordRaw = { | |||
| path: '/company/detail', | |||
| name: 'outpageCompany', | |||
| component: routerList.OutpageCompany, | |||
| meta: { | |||
| title: '企业详情' | |||
| } | |||
| } | |||
| export const OutpageJobRoute: AppRouteRecordRaw = { | |||
| path: '/job/detail', | |||
| name: 'outpageJob', | |||
| component: routerList.OutpageJob, | |||
| meta: { | |||
| title: '职位详情' | |||
| } | |||
| } | |||
| export const routesModuleList : AppRouteModule[] = [ | |||
| @@ -193,4 +213,6 @@ export const routesModuleList : AppRouteModule[] = [ | |||
| RelationshipRoute, | |||
| NewsRoute, | |||
| // RegisterRoute | |||
| OutpageCompanyRoute, | |||
| OutpageJobRoute | |||
| ]; | |||
| @@ -35,6 +35,10 @@ import JobseekerResume from '@/views/jobseeker/resume/index.vue'; | |||
| import JobseekerSearch from '@/views/jobseeker/search/index.vue'; | |||
| import JobseekerPassword from '@/views/jobseeker/password/index.vue'; | |||
| // 新窗口 | |||
| import OutpageCompany from '@/views/common/outpage/company.vue'; | |||
| import OutpageJob from '@/views/common/outpage/job.vue'; | |||
| export const routerList = { | |||
| Home, | |||
| Job, | |||
| @@ -66,5 +70,7 @@ export const routerList = { | |||
| JobseekerRecommend, | |||
| JobseekerResume, | |||
| JobseekerSearch, | |||
| JobseekerPassword | |||
| JobseekerPassword, | |||
| OutpageCompany, | |||
| OutpageJob | |||
| } | |||
| @@ -6,10 +6,12 @@ import { HomeOutlined } from '@ant-design/icons-vue'; | |||
| import LOGIN from '@/views/login/login.vue'; | |||
| // import HOME from '@/views/home/home.vue'; | |||
| import Layout from '@/components/layout/index.vue'; | |||
| import { routesModuleList } from '@/router/dynamic'; | |||
| import { routesManageModuleList } from '@/router/manageDynamic'; | |||
| // // 登录路由 | |||
| // 登录路由 | |||
| export const LoginRoute: AppRouteRecordRaw = { | |||
| path: '/login', | |||
| name: 'login', | |||
| @@ -20,6 +22,7 @@ export const LoginRoute: AppRouteRecordRaw = { | |||
| } | |||
| // layout路由 | |||
| export const LayoutRoute : AppRouteRecordRaw = { | |||
| path: '', | |||
| @@ -36,7 +39,8 @@ export const LayoutRoute : AppRouteRecordRaw = { | |||
| } | |||
| export const basicRoutes = [ | |||
| LoginRoute, | |||
| LayoutRoute | |||
| LayoutRoute, | |||
| ] | |||
| @@ -44,7 +44,6 @@ const actions = { | |||
| try { | |||
| // let res = await LOGIN.permissions(); | |||
| // let arr = res.data.data; | |||
| console.log(rootState) | |||
| if(rootState.token && rootState.role === 'company' && rootState.pageType == 'company' ) { | |||
| LayoutRoute.children = []; | |||
| commit('SET_MENU', []); | |||
| @@ -75,6 +74,7 @@ const actions = { | |||
| routerAdd(NotFound); | |||
| let initialRoutes = routerInit(); | |||
| commit('SET_PERMISSION', [...initialRoutes]); | |||
| debugger | |||
| } | |||
| } catch { | |||
| @@ -0,0 +1,226 @@ | |||
| <template> | |||
| <div class="content-padding-inline" style="margin: 30px 0;"> | |||
| <a-row :gutter="[10,10]" type="flex" justify="center"> | |||
| <a-col span="18"> | |||
| <div v-if="mode== 'detail'"> | |||
| <a-page-header> | |||
| <a-list item-layout="vertical"> | |||
| <a-list-item> | |||
| <a-list-item-meta> | |||
| <template #title> | |||
| <div style="font-size: 24px; font-family: bold;">{{companyDetail.full_name}}</div> | |||
| </template> | |||
| <template #description> | |||
| <div> | |||
| 企业编号:{{companyDetail.id}} | |||
| </div> | |||
| </template> | |||
| </a-list-item-meta> | |||
| </a-list-item> | |||
| </a-list> | |||
| <a-tabs v-model:activeKey="activeKey" type="card" @change="activeChange"> | |||
| <a-tab-pane :key="1" tab="企业信息"> | |||
| <template v-if="activeKey == 1"> | |||
| <div style="margin: 20px 0; padding: 20px;background-color: #ffffff;border-radius: 8px;"> | |||
| <a-descriptions title="公司介绍" layout="vertical"> | |||
| <a-descriptions-item> | |||
| <div v-html="companyDetail.introduction"></div> | |||
| </a-descriptions-item> | |||
| </a-descriptions> | |||
| </div> | |||
| <div style="margin: 20px 0; padding: 20px;background-color: #ffffff;"> | |||
| <a-descriptions :column="7" title="公司概况" layout="vertical"> | |||
| <a-descriptions-item label="所属行业" span="2" | |||
| v-if="companyDetail.situation">{{companyDetail.situation.industry_text}}/{{companyDetail.situation.industry2_text}}</a-descriptions-item> | |||
| <a-descriptions-item label="公司性质" | |||
| v-if="companyDetail.situation">{{companyDetail.situation.nature_text}}</a-descriptions-item> | |||
| <a-descriptions-item label="公司规模" | |||
| v-if="companyDetail.situation">{{companyDetail.situation.scale_text }}</a-descriptions-item> | |||
| <a-descriptions-item label="成立时间" | |||
| v-if="companyDetail.situation">{{companyDetail.situation.establishment_date }}</a-descriptions-item> | |||
| </a-descriptions> | |||
| </div> | |||
| <div style="margin: 20px 0; padding: 20px;background-color: #ffffff;border-radius: 8px;"> | |||
| <a-descriptions :column="7" title="联系方式" layout="vertical"> | |||
| <a-descriptions-item label="联系地址" | |||
| span="2">{{companyDetail.detail_address}}</a-descriptions-item> | |||
| <a-descriptions-item label="联系人">{{companyDetail.contact}}</a-descriptions-item> | |||
| <a-descriptions-item label="联系手机">{{companyDetail.mobile}}</a-descriptions-item> | |||
| <a-descriptions-item label="联系电话">{{companyDetail.phone}}</a-descriptions-item> | |||
| <a-descriptions-item label="Email">{{companyDetail.email}}</a-descriptions-item> | |||
| <a-descriptions-item label="传真">{{companyDetail.fax}}</a-descriptions-item> | |||
| </a-descriptions> | |||
| </div> | |||
| <div style="margin: 20px 0; padding: 20px;background-color: #ffffff;border-radius: 8px;"> | |||
| <a-descriptions :column="7" title="企业相册" layout="vertical"> | |||
| <a-descriptions-item><image-container :need="true" | |||
| :imgObj="{src: imageprefix + companyDetail.photo,width: '200px',height:'200px', mode: 'fill'}"></image-container></a-descriptions-item> | |||
| </a-descriptions> | |||
| </div> | |||
| <div style="margin: 20px 0; padding: 20px;background-color: #ffffff;border-radius: 8px;"> | |||
| <a-descriptions :column="1" title="地图位置" layout="vertical"> | |||
| <a-descriptions-item span="24"> | |||
| <map-marker v-if="companyDetail.latitude && companyDetail.longitude" :lat="companyDetail.latitude" :lng="companyDetail.longitude"></map-marker> | |||
| </a-descriptions-item> | |||
| </a-descriptions> | |||
| </div> | |||
| </template> | |||
| </a-tab-pane> | |||
| <a-tab-pane :key="2" tab="招聘职位" force-render> | |||
| <template v-if="activeKey == 2"> | |||
| <template v-if="!jobList || jobList.length == 0"> | |||
| <a-empty style="height: 100vh;"> | |||
| <template #description> | |||
| 本企业未有招聘信息 | |||
| </template> | |||
| </a-empty> | |||
| </template> | |||
| <template v-else> | |||
| <a-row :gutter="10"> | |||
| <a-col span="8"> | |||
| <div style="background-color: #ffffff;padding-bottom: 20px; border-radius: 8px;"> | |||
| <job-card :list="jobList" @detail="toDetail"></job-card> | |||
| <a-flex justify="center"> | |||
| <a-space> | |||
| <a-pagination simple v-model:current="current" :total="total" | |||
| @change="pageChange" /> | |||
| </a-space> | |||
| </a-flex> | |||
| </div> | |||
| </a-col> | |||
| <a-col span="16"> | |||
| <div style="padding: 20px;background-color: #ffffff;border-radius: 8px;"> | |||
| <job-detail v-if="job_id" :id="job_id"></job-detail> | |||
| </div> | |||
| </a-col> | |||
| </a-row> | |||
| </template> | |||
| </template> | |||
| </a-tab-pane> | |||
| </a-tabs> | |||
| </a-page-header> | |||
| </div> | |||
| </a-col> | |||
| </a-row> | |||
| </div> | |||
| </template> | |||
| <script setup lang="ts"> | |||
| import { ref, onMounted, computed, watch, onBeforeUnmount } from 'vue'; | |||
| import JobDetail from '@/components/job/detail/index.vue' | |||
| import JobCard from '@/components/job/card/index.vue' | |||
| import JobList from '@/components/job/list/index.vue' | |||
| import JobInternship from '@/components/job/internship/index.vue' | |||
| import MapMarker from '@/components/map/marker.vue' | |||
| import { PostCompanyInfo, GetJobCompanyjobs } from '@/apis/models'; | |||
| import { ArrowLeftOutlined } from '@ant-design/icons-vue'; | |||
| import { router } from '@/router'; | |||
| import { useCommon } from '@/hooks/useCommon'; | |||
| let { imageprefix } = useCommon(); | |||
| let activeKey = ref<Number>(sessionStorage.getItem('tab_key') ? Number(sessionStorage.getItem('tab_key')) : 1) | |||
| let companyDetail = ref<object>({}) | |||
| let jobList = ref<object[]>([]) | |||
| let pubilc_id = ref<Number>(0) | |||
| let current = ref<Number>(1) | |||
| let total = ref<Number>(0) | |||
| let job_id = ref<Number>(sessionStorage.getItem('job_id') ? Number(sessionStorage.getItem('job_id')) : 0) | |||
| let mode = ref<String>(sessionStorage.getItem('mode')) | |||
| const toDetail = (data) => { | |||
| job_id.value = data.id; | |||
| } | |||
| const activeChange = (data) => { | |||
| sessionStorage.removeItem('job_id') | |||
| getJobCompanyjobs() | |||
| } | |||
| const pageChange = (page) => { | |||
| current.value = page | |||
| getJobCompanyjobs(page) | |||
| } | |||
| const getJobCompanyjobs = (page) => { | |||
| GetJobCompanyjobs({ company_id: pubilc_id.value ? pubilc_id.value : sessionStorage.getItem('id'), page: current.value, pagesize: 3 }).then(res => { | |||
| total.value = res.data.total; | |||
| if (res.data.jobs.length > 3) { | |||
| jobList.value = res.data.jobs.slice(0, 3) | |||
| } else { | |||
| jobList.value = res.data.jobs | |||
| } | |||
| job_id.value = sessionStorage.getItem('job_id') ? Number(sessionStorage.getItem('job_id')) : jobList.value[0].id | |||
| }) | |||
| } | |||
| const back = (page) => { | |||
| sessionStorage.removeItem('pubilc_id') | |||
| sessionStorage.removeItem('mode') | |||
| sessionStorage.removeItem('tab_key') | |||
| sessionStorage.removeItem('job_id') | |||
| mode.value = sessionStorage.getItem('mode') | |||
| } | |||
| const showDetail = (page) => { | |||
| mode.value = sessionStorage.getItem('mode') | |||
| activeKey.value = sessionStorage.getItem('tab_key') ? Number(sessionStorage.getItem('tab_key')) : 1 | |||
| job_id.value = sessionStorage.getItem('job_id') ? Number(sessionStorage.getItem('job_id')) : 0; | |||
| pubilc_id.value = sessionStorage.getItem('pubilc_id') ? Number(sessionStorage.getItem('pubilc_id')) : pubilc_id.value; | |||
| if (sessionStorage.getItem('pubilc_id') != 0 || sessionStorage.getItem('id') != 0) { | |||
| PostCompanyInfo({ id: pubilc_id.value ? pubilc_id.value : sessionStorage.getItem('id') }).then(res => { | |||
| companyDetail.value = res.data | |||
| }) | |||
| getJobCompanyjobs(current.value) | |||
| } | |||
| if(activeKey.value == 1) { | |||
| window.open('/company/detail', "_blank"); | |||
| } else{ | |||
| window.open('/job/detail', "_blank"); | |||
| } | |||
| } | |||
| onMounted(() => { | |||
| if (mode.value == 'detail') { | |||
| // job_id.value = sessionStorage.getItem('job_id') ? Number(sessionStorage.getItem('job_id')) : 0; | |||
| // console.log(job_id.value ) | |||
| pubilc_id.value = sessionStorage.getItem('pubilc_id') ? Number(sessionStorage.getItem('pubilc_id')) : pubilc_id.value; | |||
| if (sessionStorage.getItem('pubilc_id') != 0 || sessionStorage.getItem('id') != 0) { | |||
| PostCompanyInfo({ id: pubilc_id.value ? pubilc_id.value : sessionStorage.getItem('id') }).then(res => { | |||
| companyDetail.value = res.data; | |||
| }) | |||
| getJobCompanyjobs(current.value) | |||
| } | |||
| } | |||
| }) | |||
| onBeforeUnmount(() => { | |||
| sessionStorage.removeItem('pubilc_id') | |||
| sessionStorage.removeItem('mode') | |||
| sessionStorage.removeItem('tab_key') | |||
| sessionStorage.removeItem('job_id') | |||
| }) | |||
| </script> | |||
| <style scoped lang="less"> | |||
| :deep(.ant-list-item) { | |||
| padding: 0 !important; | |||
| } | |||
| :deep(.ant-card) { | |||
| padding: 0 !important; | |||
| } | |||
| :deep(.ant-card-body) { | |||
| padding: 0 !important; | |||
| } | |||
| </style> | |||
| @@ -0,0 +1,142 @@ | |||
| <template> | |||
| <div class="content-padding-inline" style="margin: 30px 0;"> | |||
| <a-row :gutter="[10,10]" type="flex" justify="center"> | |||
| <a-col span="18"> | |||
| <template v-if="!jobList || jobList.length == 0"> | |||
| <a-empty style="height: 100vh;"> | |||
| <template #description> | |||
| 本企业未有招聘信息 | |||
| </template> | |||
| </a-empty> | |||
| </template> | |||
| <template v-else> | |||
| <a-row :gutter="10"> | |||
| <a-col span="8"> | |||
| <div style="background-color: #ffffff;padding-bottom: 20px; border-radius: 8px;"> | |||
| <job-card :list="jobList" @detail="toDetail"></job-card> | |||
| <a-flex justify="center"> | |||
| <a-space> | |||
| <a-pagination simple v-model:current="current" :total="total" | |||
| @change="pageChange" /> | |||
| </a-space> | |||
| </a-flex> | |||
| </div> | |||
| </a-col> | |||
| <a-col span="16"> | |||
| <div style="padding: 20px;background-color: #ffffff;border-radius: 8px;"> | |||
| <job-detail v-if="job_id" :id="job_id"></job-detail> | |||
| </div> | |||
| </a-col> | |||
| </a-row> | |||
| </template> | |||
| </a-col> | |||
| </a-row> | |||
| </div> | |||
| </template> | |||
| <script setup lang="ts"> | |||
| import { ref, onMounted, computed, watch, onBeforeUnmount } from 'vue'; | |||
| import JobDetail from '@/components/job/detail/index.vue' | |||
| import JobCard from '@/components/job/card/index.vue' | |||
| import JobList from '@/components/job/list/index.vue' | |||
| import JobInternship from '@/components/job/internship/index.vue' | |||
| import MapMarker from '@/components/map/marker.vue' | |||
| import { PostCompanyInfo, GetJobCompanyjobs } from '@/apis/models'; | |||
| import { ArrowLeftOutlined } from '@ant-design/icons-vue'; | |||
| import { router } from '@/router'; | |||
| import { useCommon } from '@/hooks/useCommon'; | |||
| let { imageprefix } = useCommon(); | |||
| let activeKey = ref<Number>(sessionStorage.getItem('tab_key') ? Number(sessionStorage.getItem('tab_key')) : 1) | |||
| let companyDetail = ref<object>({}) | |||
| let jobList = ref<object[]>([]) | |||
| let pubilc_id = ref<Number>(0) | |||
| let current = ref<Number>(1) | |||
| let total = ref<Number>(0) | |||
| let job_id = ref<Number>(0) | |||
| let mode = ref<String>(sessionStorage.getItem('mode')) | |||
| const toDetail = (data) => { | |||
| job_id.value = data.id; | |||
| } | |||
| const pageChange = (page) => { | |||
| current.value = page | |||
| getJobCompanyjobs(page) | |||
| } | |||
| const getJobCompanyjobs = (page) => { | |||
| GetJobCompanyjobs({ company_id: pubilc_id.value ? pubilc_id.value : sessionStorage.getItem('id'), page: page, pagesize: 3 }).then(res => { | |||
| total.value = res.data.total; | |||
| if (res.data.jobs.length > 3) { | |||
| jobList.value = res.data.jobs.slice(0, 3) | |||
| } else { | |||
| jobList.value = res.data.jobs | |||
| } | |||
| job_id.value = jobList.value[0].id | |||
| }) | |||
| } | |||
| const back = (page) => { | |||
| sessionStorage.removeItem('pubilc_id') | |||
| sessionStorage.removeItem('mode') | |||
| sessionStorage.removeItem('tab_key') | |||
| sessionStorage.removeItem('job_id') | |||
| mode.value = sessionStorage.getItem('mode') | |||
| } | |||
| const showDetail = (page) => { | |||
| mode.value = sessionStorage.getItem('mode') | |||
| activeKey.value = sessionStorage.getItem('tab_key') ? Number(sessionStorage.getItem('tab_key')) : 1 | |||
| job_id.value = sessionStorage.getItem('job_id') ? Number(sessionStorage.getItem('job_id')) : 0; | |||
| pubilc_id.value = sessionStorage.getItem('pubilc_id') ? Number(sessionStorage.getItem('pubilc_id')) : pubilc_id.value; | |||
| if (sessionStorage.getItem('pubilc_id') != 0 || sessionStorage.getItem('id') != 0) { | |||
| PostCompanyInfo({ id: pubilc_id.value ? pubilc_id.value : sessionStorage.getItem('id') }).then(res => { | |||
| companyDetail.value = res.data | |||
| }) | |||
| getJobCompanyjobs(current.value) | |||
| } | |||
| window.open('/company/detail', "_blank"); | |||
| } | |||
| onMounted(() => { | |||
| if (mode.value == 'detail') { | |||
| job_id.value = sessionStorage.getItem('job_id') ? Number(sessionStorage.getItem('job_id')) : 0; | |||
| pubilc_id.value = sessionStorage.getItem('pubilc_id') ? Number(sessionStorage.getItem('pubilc_id')) : pubilc_id.value; | |||
| if (sessionStorage.getItem('pubilc_id') != 0 || sessionStorage.getItem('id') != 0) { | |||
| PostCompanyInfo({ id: pubilc_id.value ? pubilc_id.value : sessionStorage.getItem('id') }).then(res => { | |||
| companyDetail.value = res.data; | |||
| }) | |||
| getJobCompanyjobs(current.value) | |||
| } | |||
| } | |||
| }) | |||
| onBeforeUnmount(() => { | |||
| sessionStorage.removeItem('pubilc_id') | |||
| sessionStorage.removeItem('mode') | |||
| sessionStorage.removeItem('tab_key') | |||
| sessionStorage.removeItem('job_id') | |||
| }) | |||
| </script> | |||
| <style scoped lang="less"> | |||
| :deep(.ant-list-item) { | |||
| padding: 0 !important; | |||
| } | |||
| :deep(.ant-card) { | |||
| padding: 0 !important; | |||
| } | |||
| :deep(.ant-card-body) { | |||
| padding: 0 !important; | |||
| } | |||
| </style> | |||
| @@ -165,16 +165,17 @@ | |||
| } | |||
| const showDetail = (page) => { | |||
| mode.value = sessionStorage.getItem('mode') | |||
| // mode.value = sessionStorage.getItem('mode') | |||
| activeKey.value = sessionStorage.getItem('tab_key') ? Number(sessionStorage.getItem('tab_key')) : 1 | |||
| job_id.value = sessionStorage.getItem('job_id') ? Number(sessionStorage.getItem('job_id')) : 0; | |||
| pubilc_id.value = sessionStorage.getItem('pubilc_id') ? Number(sessionStorage.getItem('pubilc_id')) : pubilc_id.value; | |||
| if (sessionStorage.getItem('pubilc_id') != 0 || sessionStorage.getItem('id') != 0) { | |||
| PostCompanyInfo({ id: pubilc_id.value ? pubilc_id.value : sessionStorage.getItem('id') }).then(res => { | |||
| companyDetail.value = res.data | |||
| }) | |||
| getJobCompanyjobs(current.value) | |||
| } | |||
| // job_id.value = sessionStorage.getItem('job_id') ? Number(sessionStorage.getItem('job_id')) : 0; | |||
| // pubilc_id.value = sessionStorage.getItem('pubilc_id') ? Number(sessionStorage.getItem('pubilc_id')) : pubilc_id.value; | |||
| // if (sessionStorage.getItem('pubilc_id') != 0 || sessionStorage.getItem('id') != 0) { | |||
| // PostCompanyInfo({ id: pubilc_id.value ? pubilc_id.value : sessionStorage.getItem('id') }).then(res => { | |||
| // companyDetail.value = res.data | |||
| // }) | |||
| // getJobCompanyjobs(current.value) | |||
| // } | |||
| window.open('/company/detail', "_blank"); | |||
| } | |||
| @@ -60,7 +60,7 @@ | |||
| <script setup lang="ts"> | |||
| import { ref, onMounted, computed, onBeforeUnmount } from 'vue'; | |||
| import { PostJobseekerEditPwd, PostSmsSend, GetCaptcha, PostJobseekerResetPwd } from '@/apis/models'; | |||
| import { PostJobseekerEditPwd, PostSmsSend,PostCustomerTokenExpiration, GetCaptcha, PostJobseekerResetPwd } from '@/apis/models'; | |||
| import { warnToast, successToast } from '@/utils/toastHelper'; | |||
| import { store } from '@/store/index'; | |||
| import { router } from '@/router/index'; | |||
| @@ -140,22 +140,25 @@ | |||
| } | |||
| const quit = () => { | |||
| if(routerCur() == '/job/home') { | |||
| sessionStorage.clear() | |||
| location.reload() | |||
| } else { | |||
| store.commit('getPageType', { | |||
| pageType: '' | |||
| }) | |||
| store.commit('setShowLoginBox', { | |||
| showLoginBox: false | |||
| }) | |||
| sessionStorage.clear() | |||
| sessionStorage.setItem('pageType', '') | |||
| store.commit('permissions/SET_PERMISSION', null) | |||
| store.commit('permissions/SET_MENU', []) | |||
| router.push('/job/home') | |||
| } | |||
| PostCustomerTokenExpiration().then(res => { | |||
| if(routerCur() == '/job/home') { | |||
| sessionStorage.clear() | |||
| location.reload() | |||
| } else { | |||
| store.commit('getPageType', { | |||
| pageType: '' | |||
| }) | |||
| store.commit('setShowLoginBox', { | |||
| showLoginBox: false | |||
| }) | |||
| sessionStorage.clear() | |||
| sessionStorage.setItem('pageType', '') | |||
| store.commit('permissions/SET_PERMISSION', null) | |||
| store.commit('permissions/SET_MENU', []) | |||
| router.push('/job/home') | |||
| } | |||
| }) | |||
| } | |||
| const resetForm = () => { | |||
| @@ -325,6 +325,7 @@ | |||
| sessionStorage.setItem('role', 'company') | |||
| sessionStorage.setItem('pageType', 'company') | |||
| sessionStorage.setItem('id', res.data.company_id) | |||
| sessionStorage.setItem('primary', res.data.is_primary) | |||
| store.commit('permissions/SET_PERMISSION', null) | |||
| store.commit('permissions/SET_MENU', []) | |||
| resetForm() | |||
| @@ -353,6 +354,7 @@ | |||
| sessionStorage.setItem('role', 'company') | |||
| sessionStorage.setItem('pageType', 'company') | |||
| sessionStorage.setItem('id', res.data.company_id) | |||
| sessionStorage.setItem('primary', res.data.is_primary) | |||
| store.commit('permissions/SET_PERMISSION', null) | |||
| store.commit('permissions/SET_MENU', []) | |||
| resetForm() | |||
| @@ -13,6 +13,7 @@ | |||
| <user-password v-if="curKey == 2"></user-password> | |||
| <user-email v-if="curKey == 3"></user-email> | |||
| <user-conver v-if="curKey == 4"></user-conver> | |||
| <user-manage v-if="curKey == 5"></user-manage> | |||
| </div> | |||
| </a-col> | |||
| </a-row> | |||
| @@ -27,8 +28,15 @@ | |||
| import UserPassword from '@/components/user/password/index.vue' | |||
| import UserEmail from '@/components/user/email/index.vue' | |||
| import UserConver from '@/components/user/conver/index.vue' | |||
| import UserManage from '@/components/user/manage/index.vue' | |||
| let companyList = ref<object[]>([{}, {}, {}, {}, {}, {}]) | |||
| let menu_list = ref([{ title: '费用管理', key: 1 },{ title: '重置密码', key: 2},{ title: '修改邮箱', key: 3},{ title: '生成招聘者代码', key: 4}]) | |||
| let menu_list = ref([{ title: '费用管理', key: 1 },{ title: '重置密码', key: 2},{ title: '修改邮箱', key: 3}]) | |||
| onMounted(() => { | |||
| if(sessionStorage.getItem('primary') && sessionStorage.getItem('primary') == 1) { | |||
| menu_list.value.push({ title: '生成招聘者代码', key: 4}, { title: '管理HR账号', key: 5}) | |||
| } | |||
| }) | |||
| let curKey = ref<Number>(1) | |||
| const changeKey = (data) => { | |||
| curKey.value = data.key; | |||