export const PostCompanyFamousList = getModel(url.CompanyFamousList); // 知名企业/推荐企业 | export const PostCompanyFamousList = getModel(url.CompanyFamousList); // 知名企业/推荐企业 | ||||
// 用户管理 | // 用户管理 | ||||
export const PostCompanyFee = getModel(url.CompanyFee); // 费用管理 | |||||
export const GetCompanyFee = getModel(url.CompanyFee); // 费用管理 | |||||
export const PostCompanyPwdEdit = postModel(url.CompanyPwdEdit); // 修改密码 | export const PostCompanyPwdEdit = postModel(url.CompanyPwdEdit); // 修改密码 | ||||
export const PostCompanyEmailEdit = postModel(url.CompanyEmailEdit); // 修改邮箱 | export const PostCompanyEmailEdit = postModel(url.CompanyEmailEdit); // 修改邮箱 | ||||
// 职位管理 | // 职位管理 | ||||
export const PostCompanyJobAdd = getModel(url.CompanyJobAdd); // 添加职位 | |||||
export const PostCompanyJobAdd = postModel(url.CompanyJobAdd); // 添加职位 | |||||
export const PostCompanyJobEdit = postModel(url.CompanyJobEdit); // 编辑职位 | export const PostCompanyJobEdit = postModel(url.CompanyJobEdit); // 编辑职位 | ||||
export const PostCompanyJobList = getModel(url.CompanyJobList); // 企业职位列表 | export const PostCompanyJobList = getModel(url.CompanyJobList); // 企业职位列表 | ||||
export const PostCompanyJobInfo = getModel(url.CompanyJobInfo); // 职位信息 | |||||
export const GetCompanyJobInfo = getModel(url.CompanyJobInfo); // 职位信息 | |||||
export const PostCompanyJobDel = postModel(url.CompanyJobDel); // 职位删除 | |||||
export const PostCompanyJobRecycle= postModel(url.CompanyJobRecycle); // 职位放到回收站 | |||||
// 部门管理 | // 部门管理 | ||||
export const PostCompanyDepartmentAdd = postModel(url.CompanyDepartmentAdd); // 新增部门 | export const PostCompanyDepartmentAdd = postModel(url.CompanyDepartmentAdd); // 新增部门 | ||||
export const PostCompanyDepartmentEdit = postModel(url.CompanyDepartmentEdit); // 编辑部门 | export const PostCompanyDepartmentEdit = postModel(url.CompanyDepartmentEdit); // 编辑部门 | ||||
export const PostCompanyDepartmentList = postModel(url.CompanyDepartmentList); // 部门列表 | |||||
export const GetCompanyDepartmentList = getModel(url.CompanyDepartmentList); // 部门列表 | |||||
export const PostCompanyDepartmentDel = postModel(url.CompanyDepartmentDel); // 部门删除 | export const PostCompanyDepartmentDel = postModel(url.CompanyDepartmentDel); // 部门删除 | ||||
export const PostCompanyRecrBookList = getModel(url.CompanyRecrBookList); // 已预定招聘会列表 | export const PostCompanyRecrBookList = getModel(url.CompanyRecrBookList); // 已预定招聘会列表 | ||||
CompanyJobEdit : String, | CompanyJobEdit : String, | ||||
CompanyJobList : String, | CompanyJobList : String, | ||||
CompanyJobInfo : String, | CompanyJobInfo : String, | ||||
CompanyJobDel: String, | |||||
CompanyJobRecycle: String, | |||||
// 部门管理 | // 部门管理 | ||||
CompanyDepartmentAdd : String, | CompanyDepartmentAdd : String, | ||||
CompanyDepartmentEdit : String, | CompanyDepartmentEdit : String, |
CompanyJobEdit: web + '/company/job_edit', // 编辑职位 | CompanyJobEdit: web + '/company/job_edit', // 编辑职位 | ||||
CompanyJobList: web + '/company/job_list', // 企业职位列表 | CompanyJobList: web + '/company/job_list', // 企业职位列表 | ||||
CompanyJobInfo: web + '/company/job_info', // 职位信息 | CompanyJobInfo: web + '/company/job_info', // 职位信息 | ||||
CompanyJobDel: web + '/company/job_del', // 职位删除 | |||||
CompanyJobRecycle: web + '/company/job_recycle', // 职位放到回收站 | |||||
// 部门管理 | // 部门管理 | ||||
CompanyDepartmentAdd: web + '/company/department_add', // 新增部门 | CompanyDepartmentAdd: web + '/company/department_add', // 新增部门 | ||||
CompanyDepartmentEdit: web + '/company/department_edit', // 编辑部门 | CompanyDepartmentEdit: web + '/company/department_edit', // 编辑部门 |
<script setup lang="ts"> | <script setup lang="ts"> | ||||
import { ref, onMounted, computed } from 'vue'; | import { ref, onMounted, computed } from 'vue'; | ||||
import { PostCompanyDepartmentAdd, PostCompanyDepartmentList, PostCompanyDepartmentDel } from '@/apis/models'; | |||||
import { PostCompanyDepartmentAdd, GetCompanyDepartmentList, PostCompanyDepartmentDel } from '@/apis/models'; | |||||
import ASearch from '@/components/company/department/search.vue'; | import ASearch from '@/components/company/department/search.vue'; | ||||
import { useCommon } from '@/hooks/useCommon'; | import { useCommon } from '@/hooks/useCommon'; | ||||
import { cols } from '@/components/company/department/columns'; | import { cols } from '@/components/company/department/columns'; | ||||
const getData = async () => { | const getData = async () => { | ||||
try { | try { | ||||
loading.value = true; | loading.value = true; | ||||
let res = await PostCompanyDepartmentList(); | |||||
let res = await GetCompanyDepartmentList(); | |||||
loading.value = false; | loading.value = false; | ||||
commomParams.value.table.data = res.data.rows; | commomParams.value.table.data = res.data.rows; | ||||
commomParams.value.table.columns = cols; | commomParams.value.table.columns = cols; |
}) | }) | ||||
const emit = defineEmits(); | const emit = defineEmits(); | ||||
const parentChange = (val, selectedOptions) => { | const parentChange = (val, selectedOptions) => { | ||||
console.log(val) | |||||
emit('saveCascader', {arr1: val, arr2: selectedOptions}); | emit('saveCascader', {arr1: val, arr2: selectedOptions}); | ||||
} | } | ||||
</script> | </script> |
<template> | <template> | ||||
<a-select v-model:value="selectValue" @change="handleChange" :placeholder="placeholder"> | |||||
<a-select-option v-for="item in listOptions" :key="item.id" :value="item.id">{{item.name}}</a-select-option> | |||||
<a-select v-model:value="selectValue" @change="handleChange" :placeholder="placeholder" label-in-value> | |||||
<a-select-option v-for="item in listOptions" :key="item.id" :value="item.id" :label="item.name">{{item.name}}</a-select-option> | |||||
</a-select> | </a-select> | ||||
</template> | </template> | ||||
let listOptions = ref([]); | let listOptions = ref([]); | ||||
let selectValue = ref<String>(props.select_content); | let selectValue = ref<String>(props.select_content); | ||||
let placeholder = ref<String>(props.placeholder); | let placeholder = ref<String>(props.placeholder); | ||||
console.log(props.placeholder) | |||||
watch(() => [props.dict, props.select_content], | watch(() => [props.dict, props.select_content], | ||||
(newVal:string, oldVal:string) => { | (newVal:string, oldVal:string) => { | ||||
GetDictTree({ | GetDictTree({ | ||||
}).then((res:object) => { | }).then((res:object) => { | ||||
listOptions.value = res.data.dicts | listOptions.value = res.data.dicts | ||||
}) | }) | ||||
selectValue.value = newVal[1]; | |||||
}) | |||||
selectValue.value = newVal[1] == 0 ? props.placeholder : newVal[1] ; | |||||
}, { immediate: true }) | |||||
onMounted(() => { | onMounted(() => { | ||||
GetDictTree({ | GetDictTree({ |
}, | }, | ||||
{ | { | ||||
title: '所属部门', | title: '所属部门', | ||||
dataIndex: 'age', | |||||
key: 'age', | |||||
dataIndex: 'department_name', | |||||
key: 'department_name', | |||||
}, | }, | ||||
{ | { | ||||
title: '状态', | title: '状态', | ||||
dataIndex: 'address', | |||||
key: 'address', | |||||
dataIndex: 'status_text', | |||||
key: 'status_text', | |||||
}, | }, | ||||
{ | { | ||||
title: '招聘时间', | title: '招聘时间', | ||||
dataIndex: 'phone', | |||||
key: 'phone', | |||||
dataIndex: 'publish_date', | |||||
key: 'publish_date', | |||||
}, | }, | ||||
{ | { | ||||
title: '浏览数', | title: '浏览数', | ||||
dataIndex: 'email', | |||||
key: 'email', | |||||
dataIndex: 'click_count', | |||||
key: 'click_count', | |||||
}, | }, | ||||
{ | { | ||||
title: '应聘简历(未看)', | title: '应聘简历(未看)', | ||||
dataIndex: 'email', | |||||
key: 'email', | |||||
dataIndex: 'apply_count_none_view', | |||||
key: 'apply_count_none_view', | |||||
}, | }, | ||||
{ | { | ||||
title: '推荐简历(未看)', | title: '推荐简历(未看)', | ||||
dataIndex: 'email', | |||||
key: 'email', | |||||
dataIndex: 'recommend_count_none_view', | |||||
key: 'recommend_count_none_view', | |||||
}, | }, | ||||
{ | { | ||||
title: '操作', | title: '操作', |
<template> | <template> | ||||
<div style="margin: 16px;"> | <div style="margin: 16px;"> | ||||
<a-search @searchData="searchData" @clearData="clearData" | |||||
:search_params="commomParams.search"></a-search> | |||||
<a-search @searchData="searchData" @clearData="clearData" :search_params="commomParams.search"></a-search> | |||||
</div> | </div> | ||||
<a-biaoge :data="commomParams.table.data" :columns="commomParams.table.columns" | |||||
:pagination="commomParams.page" @page="getPage" :loading="loading"> | |||||
<a-biaoge :data="commomParams.table.data" :columns="commomParams.table.columns" :pagination="commomParams.page" | |||||
@page="getPage" :loading="loading"> | |||||
<template #default="{ record }"> | <template #default="{ record }"> | ||||
<a-row :gutter="20"> | <a-row :gutter="20"> | ||||
<a-col><a-menu @click="handleMenuClick"> | |||||
<a-menu-item key="1"> | |||||
修改 | |||||
</a-menu-item> | |||||
<a-menu-item key="2"> | |||||
发布 | |||||
</a-menu-item> | |||||
<a-menu-item key="3"> | |||||
暂停 | |||||
</a-menu-item> | |||||
<a-menu-item key="3"> | |||||
删除 | |||||
</a-menu-item> | |||||
<a-menu-item key="3"> | |||||
放入回收站 | |||||
</a-menu-item> | |||||
<a-menu-item key="3"> | |||||
查看 | |||||
</a-menu-item> | |||||
</a-menu></a-col> | |||||
<a-col> | |||||
<a-dropdown placement="bottomRight"> | |||||
<template #overlay> | |||||
<a-menu> | |||||
<a-menu-item key="1"> | |||||
<a-button @click="edit(record)">修改</a-button> | |||||
</a-menu-item> | |||||
<a-menu-item key="2"> | |||||
发布 | |||||
</a-menu-item> | |||||
<a-menu-item key="3"> | |||||
暂停 | |||||
</a-menu-item> | |||||
<a-menu-item key="3"> | |||||
删除 | |||||
</a-menu-item> | |||||
<a-menu-item key="3"> | |||||
<a-button @click="putInRecycle(record.id)">放入回收站</a-button> | |||||
</a-menu-item> | |||||
<a-menu-item key="3"> | |||||
查看 | |||||
</a-menu-item> | |||||
</a-menu> | |||||
</template> | |||||
<a-button> | |||||
操作 | |||||
<DownOutlined /> | |||||
</a-button> | |||||
</a-dropdown> | |||||
</a-col> | |||||
</a-row> | </a-row> | ||||
</template> | </template> | ||||
</a-biaoge> | </a-biaoge> | ||||
</template> | </template> | ||||
<script setup lang="ts"> | <script setup lang="ts"> | ||||
import { ref, onMounted, computed } from 'vue'; | |||||
import { PostCompanyJobList } from '@/apis/models'; | |||||
import { ref, onMounted, computed, defineEmits } from 'vue'; | |||||
import { PostCompanyJobList, PostCompanyJobRecycle } from '@/apis/models'; | |||||
import ASearch from '@/components/invite/manage/search.vue'; | import ASearch from '@/components/invite/manage/search.vue'; | ||||
import { useCommon } from '@/hooks/useCommon'; | import { useCommon } from '@/hooks/useCommon'; | ||||
import { cols } from '@/components/invite/manage/columns'; | import { cols } from '@/components/invite/manage/columns'; | ||||
import { warnToast, successToast } from '@/utils/toastHelper'; | import { warnToast, successToast } from '@/utils/toastHelper'; | ||||
import { DownOutlined } from '@ant-design/icons-vue'; | |||||
import { ExclamationCircleOutlined } from '@ant-design/icons-vue'; | |||||
import { createVNode } from 'vue'; | |||||
import { Modal } from 'ant-design-vue'; | |||||
const emit = defineEmits(); | |||||
let { commomParams } = useCommon(); | let { commomParams } = useCommon(); | ||||
let loading = ref<Boolean>(true); | let loading = ref<Boolean>(true); | ||||
loading.value = true; | loading.value = true; | ||||
let res = await PostCompanyJobList(); | let res = await PostCompanyJobList(); | ||||
loading.value = false; | loading.value = false; | ||||
commomParams.value.table.data = res.data.rows; | |||||
commomParams.value.table.data = res.data.list; | |||||
commomParams.value.table.columns = cols; | commomParams.value.table.columns = cols; | ||||
commomParams.value.page = { | commomParams.value.page = { | ||||
current: commomParams.value.search.page, | current: commomParams.value.search.page, | ||||
} | } | ||||
} | } | ||||
let createForm : companyListType.addrFormType = ref({ | |||||
name: '', | |||||
contact: '', | |||||
phone: '', | |||||
mobile: '', | |||||
email: '', | |||||
}) | |||||
const saveForm = () => { | |||||
PostCompanyDepartmentAdd(createForm.value).then(res => { | |||||
successToast('保存成功') | |||||
getData() | |||||
resetForm() | |||||
activeKey.value = "1" | |||||
}) | |||||
} | |||||
const resetForm = () => { | |||||
createForm.value = { | |||||
name: '', | |||||
contact: '', | |||||
phone: '', | |||||
mobile: '', | |||||
email: '', | |||||
} | |||||
// 修改 | |||||
const edit = (record : Object) => { | |||||
emit('toEdit', { record: record }) | |||||
} | } | ||||
const del = (id: number) => { | |||||
commomParams.value.delParam = { id: id }; | |||||
PostCompanyDepartmentDel(commomParams.value.delParam).then(res => { | |||||
successToast('删除成功'); | |||||
getData(); | |||||
}) | |||||
// 放入回收站 | |||||
const putInRecycle = (id) => { | |||||
Modal.confirm({ | |||||
title: '是否要放入回收站', | |||||
icon: createVNode(ExclamationCircleOutlined), | |||||
onOk() { | |||||
PostCompanyJobRecycle({ id: id }).then(res => { | |||||
successToast('已放入回收站') | |||||
}) | |||||
}, | |||||
onCancel() { | |||||
}, | |||||
}); | |||||
} | } | ||||
// const del = (id : number) => { | |||||
// commomParams.value.delParam = { id: id }; | |||||
// PostCompanyDepartmentDel(commomParams.value.delParam).then(res => { | |||||
// successToast('删除成功'); | |||||
// getData(); | |||||
// }) | |||||
// } | |||||
</script> | </script> | ||||
<style scoped lang="less"> | <style scoped lang="less"> |
<template> | <template> | ||||
<a-form :model="createForm" :label-col="{span: 8}" labelAlign="right"> | <a-form :model="createForm" :label-col="{span: 8}" labelAlign="right"> | ||||
<a-row gutter="20"> | |||||
<a-row :gutter="20"> | |||||
<a-col span="12"> | <a-col span="12"> | ||||
<a-row> | <a-row> | ||||
<a-col span="24"> | <a-col span="24"> | ||||
</a-form-item> | </a-form-item> | ||||
</a-col> | </a-col> | ||||
<a-col span="24"> | <a-col span="24"> | ||||
<a-form-item label="是否公开传真" name="fax_public" > | |||||
<a-form-item label="是否公开传真" name="fax_public"> | |||||
<a-radio-group v-model:value="createForm.fax_public" button-style="solid"> | <a-radio-group v-model:value="createForm.fax_public" button-style="solid"> | ||||
<a-radio-button :value="1">是</a-radio-button> | <a-radio-button :value="1">是</a-radio-button> | ||||
<a-radio-button :value="2">否</a-radio-button> | <a-radio-button :value="2">否</a-radio-button> | ||||
</template> | </template> | ||||
<script setup lang="ts"> | <script setup lang="ts"> | ||||
import { ref, onMounted, computed } from 'vue'; | |||||
import { GetDictTree } from '@/apis/models'; | |||||
import { ref, onMounted, computed, watch, defineEmits, defineProps } from 'vue'; | |||||
import { PostCompanyJobAdd, PostCompanyJobEdit } from '@/apis/models'; | |||||
import { warnToast, successToast } from '@/utils/toastHelper'; | |||||
import { intersectionAlike } from '@/utils/dataHelper'; | |||||
const emit = defineEmits(); | |||||
const props = defineProps(['job_detail']); | |||||
let createForm : companyListType.addrFormType = ref({ | let createForm : companyListType.addrFormType = ref({ | ||||
contact: '', | contact: '', | ||||
interview_address: '', | interview_address: '', | ||||
}) | }) | ||||
const job_id = ref<number>(null); | |||||
watch(() => [props.job_detail], async (newVal : string[], oldVal) => { | |||||
if (newVal[0]) { | |||||
job_id.value = newVal[0].id; | |||||
createForm.value.id = newVal[0].id; | |||||
createForm.value = intersectionAlike(createForm.value, newVal[0]); | |||||
} | |||||
}, { immediate: true }) | |||||
const sumbitForm = () => { | const sumbitForm = () => { | ||||
console.log(createForm.value) | |||||
// PostCompanyEdit(createForm.value).then(res => { | |||||
// successToast('保存成功'); | |||||
// resetForm(); | |||||
// }).catch(err => { | |||||
// }) | |||||
const newObject = { ...JSON.parse(sessionStorage.getItem('first')), ...JSON.parse(sessionStorage.getItem('second')), ...createForm.value } | |||||
console.log(newObject) | |||||
if(!job_id.value) { | |||||
PostCompanyJobAdd(newObject).then(res => { | |||||
successToast('保存成功'); | |||||
sessionStorage.removeItem('first') | |||||
sessionStorage.removeItem('firstOther') | |||||
sessionStorage.removeItem('second') | |||||
sessionStorage.removeItem('secondOther') | |||||
resetForm(); | |||||
}).catch(err => { | |||||
}) | |||||
} else { | |||||
PostCompanyJobEdit(newObject).then(res => { | |||||
successToast('编辑成功'); | |||||
sessionStorage.removeItem('first') | |||||
sessionStorage.removeItem('firstOther') | |||||
sessionStorage.removeItem('second') | |||||
sessionStorage.removeItem('secondOther') | |||||
resetForm(); | |||||
}).catch(err => { | |||||
}) | |||||
} | |||||
emit('saveSuccess') | |||||
} | } | ||||
const resetForm = () => { | const resetForm = () => { | ||||
createForm.value = { | createForm.value = { | ||||
contact: '', | contact: '', |
<template> | <template> | ||||
<a-form :model="createForm" :label-col="{span: 6}" labelAlign="right"> | <a-form :model="createForm" :label-col="{span: 6}" labelAlign="right"> | ||||
<a-row gutter="20"> | |||||
<a-row :gutter="20"> | |||||
<a-col span="12"> | <a-col span="12"> | ||||
<a-row> | <a-row> | ||||
<a-col span="24"> | <a-col span="24"> | ||||
<a-form-item required label="工作经验"> | <a-form-item required label="工作经验"> | ||||
<a-xuanze :dict="2021" placeholder="请选择工作经验" @saveSelect="saveExperience" | <a-xuanze :dict="2021" placeholder="请选择工作经验" @saveSelect="saveExperience" | ||||
:select_content="addOtherForm.experience_select"></a-xuanze> | |||||
:select_content="createForm.experience"></a-xuanze> | |||||
</a-form-item> | </a-form-item> | ||||
</a-col> | </a-col> | ||||
<a-col span="24"> | <a-col span="24"> | ||||
<a-form-item label="学历"> | <a-form-item label="学历"> | ||||
<a-xuanze :dict="2006" placeholder="请选择学历" @saveSelect="saveSchoolDegree" | <a-xuanze :dict="2006" placeholder="请选择学历" @saveSelect="saveSchoolDegree" | ||||
:select_content="addOtherForm.school_degree_select"></a-xuanze> | |||||
:select_content="createForm.school_degree"></a-xuanze> | |||||
</a-form-item> | </a-form-item> | ||||
</a-col> | </a-col> | ||||
<a-col span="24"> | <a-col span="24"> | ||||
<a-col span="24"> | <a-col span="24"> | ||||
<a-form-item required label="职称要求"> | <a-form-item required label="职称要求"> | ||||
<a-xuanze :dict="2006" placeholder="请选择职称要求" @saveSelect="saveProfelevel" | <a-xuanze :dict="2006" placeholder="请选择职称要求" @saveSelect="saveProfelevel" | ||||
:select_content="addOtherForm.profe_level_select"></a-xuanze> | |||||
:select_content="createForm.profelevel"></a-xuanze> | |||||
</a-form-item> | </a-form-item> | ||||
</a-col> | </a-col> | ||||
<a-col span="24"> | <a-col span="24"> | ||||
<a-form-item required label="技能认证"> | <a-form-item required label="技能认证"> | ||||
<a-xuanze :dict="2015" placeholder="请选择技能认证" @saveSelect="saveCertification" | <a-xuanze :dict="2015" placeholder="请选择技能认证" @saveSelect="saveCertification" | ||||
:select_content="addOtherForm.certification_select"></a-xuanze> | |||||
:select_content="createForm.certification"></a-xuanze> | |||||
</a-form-item> | </a-form-item> | ||||
</a-col> | </a-col> | ||||
<a-col span="24"> | <a-col span="24"> | ||||
<a-form-item label="语言要求"> | <a-form-item label="语言要求"> | ||||
<a-xuanze :dict="2007" placeholder="请选择语言要求" @saveSelect="saveLanguage" | <a-xuanze :dict="2007" placeholder="请选择语言要求" @saveSelect="saveLanguage" | ||||
:select_content="addOtherForm.language_select"></a-xuanze> | |||||
:select_content="createForm.language"></a-xuanze> | |||||
</a-form-item> | </a-form-item> | ||||
</a-col> | </a-col> | ||||
<a-col span="24"> | <a-col span="24"> | ||||
<a-form-item label="掌握程度"> | <a-form-item label="掌握程度"> | ||||
<a-xuanze :dict="2007" placeholder="请选择掌握程度" @saveSelect="saveLanguageDegree" | <a-xuanze :dict="2007" placeholder="请选择掌握程度" @saveSelect="saveLanguageDegree" | ||||
:select_content="addOtherForm.language_degree_select"></a-xuanze> | |||||
:select_content="createForm.language_degree"></a-xuanze> | |||||
</a-form-item> | </a-form-item> | ||||
</a-col> | </a-col> | ||||
<a-col span="24"> | <a-col span="24"> | ||||
</template> | </template> | ||||
<script setup lang="ts"> | <script setup lang="ts"> | ||||
import { ref, onMounted, computed } from 'vue'; | |||||
import { GetDictTree } from '@/apis/models'; | |||||
import { ref, onMounted, computed, watch, defineEmits, defineProps } from 'vue'; | |||||
import { GetDictTree, PostCompanyJobAdd, alreadyValue } from '@/apis/models'; | |||||
import { warnToast, successToast } from '@/utils/toastHelper'; | |||||
import { intersectionAlike } from '@/utils/dataHelper'; | |||||
const emit = defineEmits(); | |||||
const props = defineProps(['job_detail']); | |||||
let licenseOption = ref<Object[]>([]) | let licenseOption = ref<Object[]>([]) | ||||
onMounted(async () => { | |||||
GetDictTree({ | |||||
code: 2018 | |||||
}).then(res => { | |||||
licenseOption.value = res.data.dicts | |||||
}) | |||||
}) | |||||
let createForm : companyListType.addrFormType = ref({ | let createForm : companyListType.addrFormType = ref({ | ||||
experience: 0, | experience: 0, | ||||
school_degree: 0, | school_degree: 0, | ||||
let addOtherForm = ref<companyListType.addOtherFormType>({ | let addOtherForm = ref<companyListType.addOtherFormType>({ | ||||
experience_select: '请选择工作经验', | |||||
school_degree_select: '请选择学历', | |||||
profe_level_select: '请选择职称要求', | |||||
certification_select: '请选择技能认证', | |||||
language_select: '请选择语言要求', | |||||
language_degree_select: '请选择掌握程度', | |||||
company_jiguan_cascader: '', | |||||
company_suozaidi_cascader: '', | |||||
company_jiguan_cascader: [], | |||||
company_suozaidi_cascader: [], | |||||
}) | |||||
const job_id = ref<object>(null); | |||||
watch(() => [props.job_detail], async (newVal : string[], oldVal) => { | |||||
let res = await GetDictTree({ code: 2018 }) | |||||
licenseOption.value = res.data.dicts; | |||||
if (newVal[0]) { | |||||
job_id.value = newVal[0].id; | |||||
createForm.value = intersectionAlike(createForm.value, newVal[0]); | |||||
addOtherForm.value = { | |||||
company_jiguan_cascader: [newVal[0].household_province, newVal[0].household_city], | |||||
company_suozaidi_cascader: addToLocationArray(newVal[0]) | |||||
} | |||||
sessionStorage.setItem("second", JSON.stringify(createForm.value)) | |||||
sessionStorage.setItem("secondOther", JSON.stringify(addOtherForm.value)) | |||||
addOtherForm.value = sessionStorage.getItem('secondOther') ? JSON.parse(sessionStorage.getItem('secondOther')) : addOtherForm.value | |||||
createForm.value = sessionStorage.getItem('second') ? JSON.parse(sessionStorage.getItem('second')) : createForm.value | |||||
} | |||||
}, { immediate: true }) | |||||
const addToLocationArray = (data) => { | |||||
let locationArray = []; | |||||
if (data.location_province !== 0) { | |||||
locationArray.push(data.location_province); | |||||
} | |||||
if (data.location_city !== 0) { | |||||
locationArray.push(data.location_city); | |||||
} | |||||
if (data.location_town !== 0) { | |||||
locationArray.push(data.location_town); | |||||
} | |||||
return locationArray; | |||||
} | |||||
onMounted(async () => { | |||||
}) | }) | ||||
// 工作经验 | // 工作经验 | ||||
const saveExperience = (data) => { | const saveExperience = (data) => { | ||||
createForm.value.experience = data.val; | |||||
createForm.value.experience = data.val.key; | |||||
} | } | ||||
// 学历要求 | // 学历要求 | ||||
const saveSchoolDegree = (data) => { | const saveSchoolDegree = (data) => { | ||||
createForm.value.school_degree = data.val; | |||||
createForm.value.school_degree = data.val.key; | |||||
} | } | ||||
// 职称要求 | // 职称要求 | ||||
const saveProfelevel = (data) => { | const saveProfelevel = (data) => { | ||||
createForm.value.profelevel = data.val; | |||||
createForm.value.profelevel = data.val.key; | |||||
} | } | ||||
// 技能认证 | // 技能认证 | ||||
const saveCertification = (data) => { | const saveCertification = (data) => { | ||||
createForm.value.certification = data.val; | |||||
createForm.value.certification = data.val.key; | |||||
} | } | ||||
// 语言要求 | // 语言要求 | ||||
const saveLanguage = (data) => { | const saveLanguage = (data) => { | ||||
createForm.value.language = data.val; | |||||
createForm.value.language = data.val.key; | |||||
} | } | ||||
// 掌握程度 | // 掌握程度 | ||||
const saveLanguageDegree = (data) => { | const saveLanguageDegree = (data) => { | ||||
createForm.value.language_degree = data.val; | |||||
createForm.value.language_degree = data.val.key;; | |||||
} | } | ||||
// 选择籍贯 | // 选择籍贯 | ||||
const compantJiguanSave = (data) => { | const compantJiguanSave = (data) => { | ||||
addOtherForm.value.company_jiguan_cascader = data.arr1; | |||||
createForm.value.household_province = data.arr1[0] ? data.arr1[0] : 0; | createForm.value.household_province = data.arr1[0] ? data.arr1[0] : 0; | ||||
createForm.value.household_city = data.arr1[1] ? data.arr1[1] : 0; | createForm.value.household_city = data.arr1[1] ? data.arr1[1] : 0; | ||||
} | } | ||||
// 选择所在地 | // 选择所在地 | ||||
const compantSuozaidiSave = (data) => { | const compantSuozaidiSave = (data) => { | ||||
addOtherForm.value.company_suozaidi_cascader = data.arr1; | |||||
createForm.value.location_province = data.arr1[0] ? data.arr1[0] : 0; | createForm.value.location_province = data.arr1[0] ? data.arr1[0] : 0; | ||||
createForm.value.location_city = data.arr1[1] ? data.arr1[1] : 0; | createForm.value.location_city = data.arr1[1] ? data.arr1[1] : 0; | ||||
createForm.value.location_town = data.arr1[2] ? data.arr1[2] : 0; | createForm.value.location_town = data.arr1[2] ? data.arr1[2] : 0; | ||||
} | } | ||||
const sumbitForm = () => { | const sumbitForm = () => { | ||||
console.log(createForm.value) | console.log(createForm.value) | ||||
// PostCompanyEdit(createForm.value).then(res => { | |||||
// successToast('保存成功'); | |||||
// resetForm(); | |||||
// }).catch(err => { | |||||
// }) | |||||
sessionStorage.setItem("second", JSON.stringify(createForm.value)) | |||||
sessionStorage.setItem("secondOther", JSON.stringify(addOtherForm.value)) | |||||
emit('saveSuccess', { key: "3" }) | |||||
} | } | ||||
const resetForm = () => { | const resetForm = () => { | ||||
addOtherForm.value = { | addOtherForm.value = { | ||||
chengli_date: '', | |||||
content: '', | |||||
photo_img: '', | |||||
license_img: '', | |||||
company_photo_img: '', | |||||
company_address_cascader: '', | |||||
company_industry_cascader: '', | |||||
company_nature_cascader: '', | |||||
company_scale_cascader: '', | |||||
company_jiguan_cascader: '', | |||||
company_suozaidi_cascader: '' | |||||
} | } | ||||
createForm.value = { | createForm.value = { | ||||
experience: 0, | experience: 0, |
<template> | <template> | ||||
<a-tabs v-model:activeKey="activeKey"> | <a-tabs v-model:activeKey="activeKey"> | ||||
<a-tab-pane key="1" tab="职位信息"> | <a-tab-pane key="1" tab="职位信息"> | ||||
<position-info></position-info> | |||||
<position-info :job_detail="jobDetail" @saveSuccess="saveSuccessInfo"></position-info> | |||||
</a-tab-pane> | </a-tab-pane> | ||||
<a-tab-pane key="2" tab="职位要求" force-render> | <a-tab-pane key="2" tab="职位要求" force-render> | ||||
<position-demand></position-demand> | |||||
<position-demand :job_detail="jobDetail" @saveSuccess="saveSuccessDemand"></position-demand> | |||||
</a-tab-pane> | </a-tab-pane> | ||||
<a-tab-pane key="3" tab="联系方式"> | |||||
<position-contact></position-contact> | |||||
<a-tab-pane key="3" tab="联系方式"> | |||||
<position-contact :job_detail="jobDetail" @saveSuccess="saveSuccessContact"></position-contact> | |||||
</a-tab-pane> | </a-tab-pane> | ||||
</a-tabs> | </a-tabs> | ||||
</template> | </template> | ||||
<script setup lang="ts"> | <script setup lang="ts"> | ||||
import { ref, onMounted, computed } from 'vue'; | |||||
import { ref, onMounted, watch, defineProps, defineEmits } from 'vue'; | |||||
import PositionInfo from '@/components/invite/position/info.vue' | import PositionInfo from '@/components/invite/position/info.vue' | ||||
import PositionDemand from '@/components/invite/position/demand.vue' | import PositionDemand from '@/components/invite/position/demand.vue' | ||||
import PositionContact from '@/components/invite/position/contact.vue' | import PositionContact from '@/components/invite/position/contact.vue' | ||||
let createForm : companyListType.addrFormType = ref({ | |||||
name: '', | |||||
company_id: 0, | |||||
contact: '', | |||||
phone: '', | |||||
mobile: '', | |||||
email: '', | |||||
}) | |||||
let dataSource = ref([ | |||||
{ | |||||
key: '1', | |||||
name: '第一部部门第一部部门第一部部门', | |||||
age: '王二狗', | |||||
address: '082-12331231', | |||||
phone: '1223245645646', | |||||
email: '6146545@126.com', | |||||
}, | |||||
{ | |||||
key: '1', | |||||
name: '第一部部门第一部部门第一部部门', | |||||
age: '王二狗', | |||||
address: '082-12331231', | |||||
phone: '1223245645646', | |||||
email: '6146545@126.com', | |||||
}, { | |||||
key: '1', | |||||
name: '第一部部门第一部部门第一部部门', | |||||
age: '王二狗', | |||||
address: '082-12331231', | |||||
phone: '1223245645646', | |||||
email: '6146545@126.com', | |||||
}, { | |||||
key: '1', | |||||
name: '第一部部门第一部部门第一部部门', | |||||
age: '王二狗', | |||||
address: '082-12331231', | |||||
phone: '1223245645646', | |||||
email: '6146545@126.com', | |||||
}, { | |||||
key: '1', | |||||
name: '第一部部门第一部部门第一部部门', | |||||
age: '王二狗', | |||||
address: '082-12331231', | |||||
phone: '1223245645646', | |||||
email: '6146545@126.com', | |||||
}, { | |||||
key: '1', | |||||
name: '第一部部门第一部部门第一部部门', | |||||
age: '王二狗', | |||||
address: '082-12331231', | |||||
phone: '1223245645646', | |||||
email: '6146545@126.com', | |||||
}, { | |||||
key: '1', | |||||
name: '第一部部门第一部部门第一部部门', | |||||
age: '王二狗', | |||||
address: '082-12331231', | |||||
phone: '1223245645646', | |||||
email: '6146545@126.com', | |||||
}, { | |||||
key: '1', | |||||
name: '第一部部门第一部部门第一部部门', | |||||
age: '王二狗', | |||||
address: '082-12331231', | |||||
phone: '1223245645646', | |||||
email: '6146545@126.com', | |||||
}, { | |||||
key: '1', | |||||
name: '第一部部门第一部部门第一部部门', | |||||
age: '王二狗', | |||||
address: '082-12331231', | |||||
phone: '1223245645646', | |||||
email: '6146545@126.com', | |||||
}, { | |||||
key: '1', | |||||
name: '第一部部门第一部部门第一部部门', | |||||
age: '王二狗', | |||||
address: '082-12331231', | |||||
phone: '1223245645646', | |||||
email: '6146545@126.com', | |||||
}, { | |||||
key: '1', | |||||
name: '第一部部门第一部部门第一部部门', | |||||
age: '王二狗', | |||||
address: '082-12331231', | |||||
phone: '1223245645646', | |||||
email: '6146545@126.com', | |||||
}, { | |||||
key: '1', | |||||
name: '第一部部门第一部部门第一部部门', | |||||
age: '王二狗', | |||||
address: '082-12331231', | |||||
phone: '1223245645646', | |||||
email: '6146545@126.com', | |||||
}, { | |||||
key: '1', | |||||
name: '第一部部门第一部部门第一部部门', | |||||
age: '王二狗', | |||||
address: '082-12331231', | |||||
phone: '1223245645646', | |||||
email: '6146545@126.com', | |||||
}, { | |||||
key: '1', | |||||
name: '第一部部门第一部部门第一部部门', | |||||
age: '王二狗', | |||||
address: '082-12331231', | |||||
phone: '1223245645646', | |||||
email: '6146545@126.com', | |||||
}, { | |||||
key: '1', | |||||
name: '第一部部门第一部部门第一部部门', | |||||
age: '王二狗', | |||||
address: '082-12331231', | |||||
phone: '1223245645646', | |||||
email: '6146545@126.com', | |||||
}, { | |||||
key: '1', | |||||
name: '第一部部门第一部部门第一部部门', | |||||
age: '王二狗', | |||||
address: '082-12331231', | |||||
phone: '1223245645646', | |||||
email: '6146545@126.com', | |||||
}, { | |||||
key: '1', | |||||
name: '第一部部门第一部部门第一部部门', | |||||
age: '王二狗', | |||||
address: '082-12331231', | |||||
phone: '1223245645646', | |||||
email: '6146545@126.com', | |||||
}, { | |||||
key: '1', | |||||
name: '第一部部门第一部部门第一部部门', | |||||
age: '王二狗', | |||||
address: '082-12331231', | |||||
phone: '1223245645646', | |||||
email: '6146545@126.com', | |||||
}, { | |||||
key: '1', | |||||
name: '第一部部门第一部部门第一部部门', | |||||
age: '王二狗', | |||||
address: '082-12331231', | |||||
phone: '1223245645646', | |||||
email: '6146545@126.com', | |||||
}, { | |||||
key: '1', | |||||
name: '第一部部门第一部部门第一部部门', | |||||
age: '王二狗', | |||||
address: '082-12331231', | |||||
phone: '1223245645646', | |||||
email: '6146545@126.com', | |||||
}, | |||||
]) | |||||
let columns = ref([ | |||||
{ | |||||
title: '部门名称', | |||||
dataIndex: 'name', | |||||
key: 'name', | |||||
}, | |||||
{ | |||||
title: '联系人', | |||||
dataIndex: 'age', | |||||
key: 'age', | |||||
}, | |||||
{ | |||||
title: '联系电话', | |||||
dataIndex: 'address', | |||||
key: 'address', | |||||
}, | |||||
{ | |||||
title: '联系手机', | |||||
dataIndex: 'phone', | |||||
key: 'phone', | |||||
}, | |||||
{ | |||||
title: '电子邮件', | |||||
dataIndex: 'email', | |||||
key: 'email', | |||||
}, | |||||
{ | |||||
title: '操作', | |||||
dataIndex: 'operation', | |||||
slots: { customRender: 'operation' }, | |||||
}, | |||||
]) | |||||
</script> | |||||
import { GetCompanyJobInfo } from '@/apis/models'; | |||||
const props = defineProps(['job_id']); | |||||
const emit = defineEmits(); | |||||
const jobDetail = ref<object>(null); | |||||
watch(() => [props.job_id], (newVal : string[], oldVal) => { | |||||
if(newVal[0]) { | |||||
GetCompanyJobInfo({id: newVal[0]}).then(res => { | |||||
jobDetail.value = res.data | |||||
}) | |||||
} | |||||
}, { immediate: true }) | |||||
<style scoped lang="less"> | |||||
:deep(.ant-table-thead >tr>th) { | |||||
background-color: #fff !important; | |||||
border: none !important; | |||||
color: #bbb !important; | |||||
} | |||||
:deep(.ant-table-thead >tr>th::before) { | |||||
display: none !important; | |||||
const activeKey = ref<String>('1'); | |||||
const saveSuccessInfo = (data) => { | |||||
activeKey.value = data.key; | |||||
} | } | ||||
:deep(.ant-table-tbody >tr >td) { | |||||
border: none !important; | |||||
const saveSuccessDemand = (data) => { | |||||
activeKey.value = data.key; | |||||
} | } | ||||
const saveSuccessContact = () => { | |||||
emit('currentMenuKey', {key : 2}) | |||||
} | |||||
</script> | |||||
<style scoped lang="less"> | |||||
</style> | </style> |
<template> | <template> | ||||
<a-form :model="createForm" :label-col="{span: 6}" labelAlign="right"> | <a-form :model="createForm" :label-col="{span: 6}" labelAlign="right"> | ||||
<a-row gutter="20"> | |||||
<a-row :gutter="20"> | |||||
<a-col span="12"> | <a-col span="12"> | ||||
<a-row> | <a-row> | ||||
<a-col span="24"> | <a-col span="24"> | ||||
</a-col> | </a-col> | ||||
<a-col span="24"> | <a-col span="24"> | ||||
<a-form-item label="选择部门" name="department_id"> | <a-form-item label="选择部门" name="department_id"> | ||||
<a-select v-model:value="value" @change="departmentChange" placeholder="请选择部门" show-search | |||||
:filter-option="false" label-in-value @search="departmentSearch"> | |||||
<a-select v-model:value="addOtherForm.department_name" @change="departmentChange" | |||||
placeholder="请进行搜索选择部门" show-search :filter-option="false" label-in-value | |||||
@search="departmentSearch"> | |||||
<a-select-option v-for="item in department_list" :key="item.id" :value="item.id" | <a-select-option v-for="item in department_list" :key="item.id" :value="item.id" | ||||
:label="item.name" label-in-value>{{item.name}}</a-select-option> | :label="item.name" label-in-value>{{item.name}}</a-select-option> | ||||
</a-select> | </a-select> | ||||
</a-col> | </a-col> | ||||
<a-col span="24"> | <a-col span="24"> | ||||
<a-form-item required label="职位类别"> | <a-form-item required label="职位类别"> | ||||
<a-tree-select v-model:value="addOtherForm.job_type" style="width: 100%" | |||||
<a-tree-select v-model:value="createForm.job_type" style="width: 100%" | |||||
:tree-data="jobTypeData" tree-checkable allow-clear :show-checked-strategy="SHOW_PARENT" | :tree-data="jobTypeData" tree-checkable allow-clear :show-checked-strategy="SHOW_PARENT" | ||||
placeholder="职位类别(最多三个,多选只取前三)" tree-node-filter-prop="label" | placeholder="职位类别(最多三个,多选只取前三)" tree-node-filter-prop="label" | ||||
:fieldNames="jobTypeFieldNames" :maxTagCount="3" @change="jobTypeChange" /> | :fieldNames="jobTypeFieldNames" :maxTagCount="3" @change="jobTypeChange" /> | ||||
</a-col> | </a-col> | ||||
<a-col span="24"> | <a-col span="24"> | ||||
<a-form-item required label="工作区域"> | <a-form-item required label="工作区域"> | ||||
<a-row gutter="20"> | |||||
<a-tree-select v-model:value="addOtherForm.job_address" style="width: 100%" | |||||
:tree-data="jobAddressData" tree-checkable allow-clear | |||||
:show-checked-strategy="SHOW_PARENT" placeholder="工作区域(最多三个,多选只取前三)" | |||||
tree-node-filter-prop="label" :fieldNames="jobAddressFieldNames" :maxTagCount="3" | |||||
@change="jobAddressChange" /> | |||||
</a-row> | |||||
<a-tree-select v-model:value="createForm.job_location" style="width: 100%" | |||||
:tree-data="jobAddressData" tree-checkable allow-clear | |||||
:show-checked-strategy="SHOW_PARENT" placeholder="工作区域(最多四个,多选只取前四)" | |||||
tree-node-filter-prop="label" :fieldNames="jobAddressFieldNames" :maxTagCount="4" | |||||
@change="jobAddressChange" /> | |||||
</a-form-item> | </a-form-item> | ||||
</a-col> | </a-col> | ||||
<a-col span="24"> | <a-col span="24"> | ||||
<a-col span="24"> | <a-col span="24"> | ||||
<a-form-item label="薪资范围" name="pay_range"> | <a-form-item label="薪资范围" name="pay_range"> | ||||
<a-xuanze :dict="2005" placeholder="请选择月薪要求范围" @saveSelect="savePayRange" | <a-xuanze :dict="2005" placeholder="请选择月薪要求范围" @saveSelect="savePayRange" | ||||
:select_content="addOtherForm.company_scale_cascader"></a-xuanze> | |||||
:select_content="addOtherForm.pay_range_cascader"></a-xuanze> | |||||
</a-form-item> | </a-form-item> | ||||
</a-col> | </a-col> | ||||
</a-form-item> | </a-form-item> | ||||
</a-col> | </a-col> | ||||
<a-col span="24"> | <a-col span="24"> | ||||
<a-form-item required label="保存"> | |||||
<a-button type="primary" block @click="sumbitForm">保存</a-button> | |||||
<a-form-item required label="操作"> | |||||
<a-button type="primary" block @click="sumbitForm">下一步</a-button> | |||||
</a-form-item> | </a-form-item> | ||||
</a-col> | </a-col> | ||||
</a-row> | </a-row> | ||||
</template> | </template> | ||||
<script setup lang="ts"> | <script setup lang="ts"> | ||||
import { ref, onMounted, computed } from 'vue'; | |||||
import { GetDictTree, PostCompanyDepartmentList } from '@/apis/models'; | |||||
import { ref, onMounted, computed, watch, defineEmits, defineProps } from 'vue'; | |||||
import { GetDictTree, GetCompanyDepartmentList, PostCompanyJobAdd } from '@/apis/models'; | |||||
import { TreeSelect } from 'ant-design-vue'; | import { TreeSelect } from 'ant-design-vue'; | ||||
import { warnToast, successToast } from '@/utils/toastHelper'; | |||||
import { intersectionAlike } from '@/utils/dataHelper'; | |||||
const emit = defineEmits(); | |||||
const props = defineProps(['job_detail']); | |||||
import dayjs from 'dayjs'; | import dayjs from 'dayjs'; | ||||
import 'dayjs/locale/zh-cn'; | import 'dayjs/locale/zh-cn'; | ||||
dayjs.locale('zh-cn'); | dayjs.locale('zh-cn'); | ||||
}, | }, | ||||
placeholder: '请输入企业简介' | placeholder: '请输入企业简介' | ||||
}) | }) | ||||
let createForm : companyListType.addrFormType = ref({ | let createForm : companyListType.addrFormType = ref({ | ||||
urgent: 2, | urgent: 2, | ||||
department_id: 0, | department_id: 0, | ||||
let addOtherForm = ref({ | let addOtherForm = ref({ | ||||
department_name: '请选择部门', | |||||
describe_content: '', | describe_content: '', | ||||
daoqi_date: '', | daoqi_date: '', | ||||
job_nature: '', | job_nature: '', | ||||
job_type: [], | |||||
job_address: [], | |||||
pay_range_cascader: '', | |||||
shisu_select: '', | shisu_select: '', | ||||
holidays_select: '', | holidays_select: '', | ||||
}) | }) | ||||
const job_id = ref<object>(null); | |||||
watch(() => [props.job_detail], async (newVal : string[], oldVal) => { | |||||
let res = await GetDictTree({ code: 2004 }); | |||||
jobTypeData.value = res.data.dicts; | |||||
let res1 = await GetDictTree({ code: 2009 }); | |||||
jobAddressData.value = res1.data.dicts; | |||||
if (newVal[0]) { | |||||
job_id.value = newVal[0].id; | |||||
createForm.value = intersectionAlike(createForm.value, newVal[0]); | |||||
addOtherForm.value = { | |||||
department_name: '请选择部门', | |||||
describe_content: newVal[0].describe_text, | |||||
daoqi_date: dayjsRef.value(newVal[0].disabled_date), | |||||
pay_range_cascader: newVal[0].pay_range, | |||||
shisu_select: newVal[0].shisu, | |||||
holidays_select: newVal[0].holidays, | |||||
} | |||||
if(newVal[0].fulltime == 1) { | |||||
addOtherForm.value.job_nature = 1 | |||||
return; | |||||
} else if(newVal[0].parttime == 1) { | |||||
addOtherForm.value.job_nature =2 | |||||
return; | |||||
}else if(newVal[0].casual == 1) { | |||||
addOtherForm.value.job_nature = 3 | |||||
return; | |||||
}else if(newVal[0].practical == 1) { | |||||
addOtherForm.value.job_nature =4 | |||||
return; | |||||
}else if(newVal[0].campus == 1) { | |||||
addOtherForm.value.job_nature = 5 | |||||
return; | |||||
} | |||||
sessionStorage.setItem("first", JSON.stringify(createForm.value)) | |||||
sessionStorage.setItem("firstOther", JSON.stringify(addOtherForm.value)) | |||||
} else { | |||||
addOtherForm.value = sessionStorage.getItem('firstOther') ? JSON.parse(sessionStorage.getItem('firstOther')) : addOtherForm.value | |||||
addOtherForm.value.daoqi_date = addOtherForm.value.daoqi_date ? dayjsRef.value(addOtherForm.value.daoqi_date) : '' | |||||
createForm.value = sessionStorage.getItem('first') ? JSON.parse(sessionStorage.getItem('first')) : createForm.value | |||||
} | |||||
}, { immediate: true }) | |||||
let jobTypeData = ref<Object[]>([]) | let jobTypeData = ref<Object[]>([]) | ||||
let jobAddressData = ref<Object[]>([]) | let jobAddressData = ref<Object[]>([]) | ||||
const jobAddressFieldNames = ref({ label: 'name', value: 'id', children: 'children' }); | const jobAddressFieldNames = ref({ label: 'name', value: 'id', children: 'children' }); | ||||
const SHOW_PARENT = TreeSelect.SHOW_ALL; | const SHOW_PARENT = TreeSelect.SHOW_ALL; | ||||
onMounted(() => { | |||||
GetDictTree({ | |||||
code: 2004 | |||||
}).then(res => { | |||||
jobTypeData.value = res.data.dicts | |||||
}) | |||||
GetDictTree({ | |||||
code: 2009 | |||||
}).then(res => { | |||||
jobAddressData.value = res.data.dicts | |||||
}) | |||||
onMounted(async () => { | |||||
}) | }) | ||||
// 选择部门 | // 选择部门 | ||||
let department_list = ref<Object[]>([]) | let department_list = ref<Object[]>([]) | ||||
const departmentSearch = (val) => { | const departmentSearch = (val) => { | ||||
PostCompanyDepartmentList({ keyword: val }).then(res => { | |||||
department_list.value = res.data.list; | |||||
GetCompanyDepartmentList({ keyword: val }).then(res => { | |||||
department_list.value = res.data.rows; | |||||
}) | }) | ||||
} | } | ||||
const departmentChange = (val : Object) => { | const departmentChange = (val : Object) => { | ||||
addOtherForm.value.department_name = val.option.label; | |||||
createForm.value.department_id = val.key; | createForm.value.department_id = val.key; | ||||
} | } | ||||
// 薪资范围 | // 薪资范围 | ||||
const savePayRange = (data) => { | const savePayRange = (data) => { | ||||
createForm.value.pay_range = data.val; | |||||
addOtherForm.value.pay_range_cascader = data.val.option.label; | |||||
createForm.value.pay_range = data.val.key; | |||||
} | } | ||||
// 到期日期 | // 到期日期 | ||||
// 食宿要求 | // 食宿要求 | ||||
const saveShisu = (data) => { | const saveShisu = (data) => { | ||||
createForm.value.shisu = data.val; | |||||
console.log(data) | |||||
addOtherForm.value.shisu_select = data.val.option.label; | |||||
createForm.value.shisu = data.val.key; | |||||
} | } | ||||
// 节假日要求 | // 节假日要求 | ||||
const saveHolidays = (data) => { | const saveHolidays = (data) => { | ||||
createForm.value.holidays = data.val; | |||||
addOtherForm.value.holidays_select = data.val.option.label; | |||||
createForm.value.holidays = data.val.key; | |||||
} | } | ||||
const sumbitForm = () => { | const sumbitForm = () => { | ||||
console.log(createForm.value) | |||||
// PostCompanyEdit(createForm.value).then(res => { | |||||
// successToast('保存成功'); | |||||
// resetForm(); | |||||
// }).catch(err => { | |||||
// }) | |||||
sessionStorage.setItem("first", JSON.stringify(createForm.value)) | |||||
sessionStorage.setItem("firstOther", JSON.stringify(addOtherForm.value)) | |||||
emit('saveSuccess', { key: "2" }) | |||||
} | } | ||||
const resetForm = () => { | const resetForm = () => { | ||||
createForm.value = { | |||||
addOtherForm.value = { | |||||
department_name: '请选择部门', | |||||
describe_content: '', | describe_content: '', | ||||
daoqi_date: '', | daoqi_date: '', | ||||
job_nature: '', | job_nature: '', | ||||
job_type: [], | |||||
job_address: [], | |||||
pay_range_cascader: '', | |||||
shisu_select: '', | shisu_select: '', | ||||
holidays_select: '', | holidays_select: '', | ||||
} | } |
</a-dropdown> | </a-dropdown> | ||||
</template> | </template> | ||||
<template v-else-if="role == 'personal'"> | <template v-else-if="role == 'personal'"> | ||||
<a-button size="small" @click="returnHome" v-if="pageType == 'company'">返回首页</a-button> | |||||
<a-button size="small" @click="returnHome" v-if="pageType == 'personal'">返回首页</a-button> | |||||
<a-dropdown placement="bottomRight"> | <a-dropdown placement="bottomRight"> | ||||
<template #overlay> | <template #overlay> | ||||
<a-menu @click="handleMenuClick"> | <a-menu @click="handleMenuClick"> | ||||
store.commit('permissions/SET_MENU', []) | store.commit('permissions/SET_MENU', []) | ||||
router.push('/manage/home') | router.push('/manage/home') | ||||
} | } | ||||
if(val.key == 6) { | |||||
store.commit('getPageType', { | |||||
pageType: 'company' | |||||
}) | |||||
sessionStorage.setItem('pageType', 'company') | |||||
store.commit('permissions/SET_PERMISSION', null) | |||||
store.commit('permissions/SET_MENU', []) | |||||
router.push('/manage/home') | |||||
} | |||||
} | } | ||||
</script> | </script> | ||||
<template> | |||||
<a-form :model="createForm" :label-col="{span: 4}" labelAlign="right"> | |||||
<a-row gutter="20"> | |||||
<a-col span="12"> | |||||
<a-row> | |||||
<a-col span="24"> | |||||
<a-form-item required label="邮箱" name="email"> | |||||
<a-input v-model:value="createForm.email" placeholder="请输入邮箱" /> | |||||
</a-form-item> | |||||
</a-col> | |||||
<a-col span="24"> | |||||
<a-form-item label="保存"> | |||||
<a-button type="primary" block @click="saveForm">保存</a-button> | |||||
</a-form-item> | |||||
</a-col> | |||||
</a-row> | |||||
</a-col> | |||||
</a-row> | |||||
</a-form> | |||||
</template> | |||||
<script setup lang="ts"> | |||||
import { ref, onMounted, computed } from 'vue'; | |||||
import { PostCompanyEmailEdit } from '@/apis/models'; | |||||
import { warnToast, successToast } from '@/utils/toastHelper'; | |||||
let createForm : companyListType.addrFormType = ref({ | |||||
email: '' | |||||
}) | |||||
const saveForm = () => { | |||||
PostCompanyEmailEdit(createForm.value).then(res => { | |||||
successToast('修改成功') | |||||
resetForm() | |||||
}) | |||||
} | |||||
const resetForm = () => { | |||||
createForm.value = { | |||||
email: '' | |||||
} | |||||
} | |||||
</script> | |||||
<style scoped lang="less"> | |||||
</style> |
<template> | <template> | ||||
<a-row> | <a-row> | ||||
<a-col :span="6"> | <a-col :span="6"> | ||||
<a-statistic title="总点数" value="10000" style="margin-right: 50px" /> | |||||
<a-statistic title="总点数" :value="feeDetail.total_fee" style="margin-right: 50px" /> | |||||
</a-col> | </a-col> | ||||
<a-col :span="6"> | <a-col :span="6"> | ||||
<a-statistic title="剩余点数" value="999" /> | |||||
<a-statistic title="剩余点数" :value="feeDetail.balance_fee" /> | |||||
</a-col> | </a-col> | ||||
<a-col :span="6"> | <a-col :span="6"> | ||||
<a-statistic title="开通日期" value="2012-12-20" /> | |||||
<a-statistic title="开通日期" :value="feeDetail.start_date" /> | |||||
</a-col> | </a-col> | ||||
<a-col :span="6"> | <a-col :span="6"> | ||||
<a-statistic title="有效期限" value="2012-12-20" /> | |||||
<a-statistic title="有效期限" :value="feeDetail.end_date" /> | |||||
</a-col> | </a-col> | ||||
</a-row> | </a-row> | ||||
</template> | </template> | ||||
<script> | |||||
<script setup lang="ts"> | |||||
import { ref, onMounted, computed, watch, defineEmits, defineProps } from 'vue'; | |||||
import { GetCompanyFee } from '@/apis/models'; | |||||
let feeDetail = ref<Object>({}) | |||||
onMounted(() => { | |||||
GetCompanyFee().then(res => { | |||||
feeDetail.value = res.data | |||||
}) | |||||
}) | |||||
</script> | </script> | ||||
<style> | <style> |
<a-col span="12"> | <a-col span="12"> | ||||
<a-row> | <a-row> | ||||
<a-col span="24"> | <a-col span="24"> | ||||
<a-form-item required label="登录密码" name="name"> | |||||
<a-input v-model:value="createForm.name" placeholder="请输入登录密码" /> | |||||
<a-form-item required label="旧密码" name="old_password"> | |||||
<a-input v-model:value="createForm.old_password" placeholder="请输入旧密码" /> | |||||
</a-form-item> | </a-form-item> | ||||
</a-col> | </a-col> | ||||
<a-col span="24"> | <a-col span="24"> | ||||
<a-form-item required label="注册的手机号" name="name"> | |||||
<a-input v-model:value="createForm.name" placeholder="请输入手机号" /> | |||||
<a-form-item required label="新密码" name="new_password"> | |||||
<a-input v-model:value="createForm.new_password" placeholder="请输入新密码" /> | |||||
</a-form-item> | </a-form-item> | ||||
</a-col> | </a-col> | ||||
<a-col span="24"> | <a-col span="24"> | ||||
<a-form-item required label="确认密码" name="contact"> | |||||
<a-input v-model:value="createForm.contact" placeholder="请输入确认密码" /> | |||||
<a-form-item required label="确认密码" name="comform_password"> | |||||
<a-input v-model:value="createForm.comform_password" placeholder="请输入确认密码" /> | |||||
</a-form-item> | |||||
</a-col> | |||||
<a-col span="24"> | |||||
<a-form-item label="保存"> | |||||
<a-button type="primary" block @click="saveForm">保存</a-button> | |||||
</a-form-item> | </a-form-item> | ||||
</a-col> | </a-col> | ||||
</a-row> | </a-row> | ||||
<script setup lang="ts"> | <script setup lang="ts"> | ||||
import { ref, onMounted, computed } from 'vue'; | import { ref, onMounted, computed } from 'vue'; | ||||
import { PostCompanyPwdEdit } from '@/apis/models'; | |||||
import { warnToast, successToast } from '@/utils/toastHelper'; | |||||
let createForm : companyListType.addrFormType = ref({ | let createForm : companyListType.addrFormType = ref({ | ||||
name: '', | |||||
company_id: 0, | |||||
contact: '', | |||||
phone: '', | |||||
mobile: '', | |||||
email: '', | |||||
old_password: '', | |||||
new_password: '', | |||||
comform_password: '' | |||||
}) | }) | ||||
const saveForm = () => { | |||||
if(createForm.value.new_password != createForm.value.comform_password) { | |||||
warnToast('新密码和确认密码不一致') | |||||
return false; | |||||
} | |||||
PostCompanyPwdEdit(createForm.value).then(res => { | |||||
successToast('修改成功,请重新登录') | |||||
resetForm() | |||||
}) | |||||
} | |||||
const resetForm = () => { | |||||
createForm.value = { | |||||
old_password: '', | |||||
new_password: '', | |||||
comform_password: '' | |||||
} | |||||
} | |||||
let dataSource = ref([ | |||||
{ | |||||
key: '1', | |||||
name: '第一部部门第一部部门第一部部门', | |||||
age: '王二狗', | |||||
address: '082-12331231', | |||||
phone: '1223245645646', | |||||
email: '6146545@126.com', | |||||
}, | |||||
{ | |||||
key: '1', | |||||
name: '第一部部门第一部部门第一部部门', | |||||
age: '王二狗', | |||||
address: '082-12331231', | |||||
phone: '1223245645646', | |||||
email: '6146545@126.com', | |||||
}, { | |||||
key: '1', | |||||
name: '第一部部门第一部部门第一部部门', | |||||
age: '王二狗', | |||||
address: '082-12331231', | |||||
phone: '1223245645646', | |||||
email: '6146545@126.com', | |||||
}, { | |||||
key: '1', | |||||
name: '第一部部门第一部部门第一部部门', | |||||
age: '王二狗', | |||||
address: '082-12331231', | |||||
phone: '1223245645646', | |||||
email: '6146545@126.com', | |||||
}, { | |||||
key: '1', | |||||
name: '第一部部门第一部部门第一部部门', | |||||
age: '王二狗', | |||||
address: '082-12331231', | |||||
phone: '1223245645646', | |||||
email: '6146545@126.com', | |||||
}, { | |||||
key: '1', | |||||
name: '第一部部门第一部部门第一部部门', | |||||
age: '王二狗', | |||||
address: '082-12331231', | |||||
phone: '1223245645646', | |||||
email: '6146545@126.com', | |||||
}, { | |||||
key: '1', | |||||
name: '第一部部门第一部部门第一部部门', | |||||
age: '王二狗', | |||||
address: '082-12331231', | |||||
phone: '1223245645646', | |||||
email: '6146545@126.com', | |||||
}, { | |||||
key: '1', | |||||
name: '第一部部门第一部部门第一部部门', | |||||
age: '王二狗', | |||||
address: '082-12331231', | |||||
phone: '1223245645646', | |||||
email: '6146545@126.com', | |||||
}, { | |||||
key: '1', | |||||
name: '第一部部门第一部部门第一部部门', | |||||
age: '王二狗', | |||||
address: '082-12331231', | |||||
phone: '1223245645646', | |||||
email: '6146545@126.com', | |||||
}, { | |||||
key: '1', | |||||
name: '第一部部门第一部部门第一部部门', | |||||
age: '王二狗', | |||||
address: '082-12331231', | |||||
phone: '1223245645646', | |||||
email: '6146545@126.com', | |||||
}, { | |||||
key: '1', | |||||
name: '第一部部门第一部部门第一部部门', | |||||
age: '王二狗', | |||||
address: '082-12331231', | |||||
phone: '1223245645646', | |||||
email: '6146545@126.com', | |||||
}, { | |||||
key: '1', | |||||
name: '第一部部门第一部部门第一部部门', | |||||
age: '王二狗', | |||||
address: '082-12331231', | |||||
phone: '1223245645646', | |||||
email: '6146545@126.com', | |||||
}, { | |||||
key: '1', | |||||
name: '第一部部门第一部部门第一部部门', | |||||
age: '王二狗', | |||||
address: '082-12331231', | |||||
phone: '1223245645646', | |||||
email: '6146545@126.com', | |||||
}, { | |||||
key: '1', | |||||
name: '第一部部门第一部部门第一部部门', | |||||
age: '王二狗', | |||||
address: '082-12331231', | |||||
phone: '1223245645646', | |||||
email: '6146545@126.com', | |||||
}, { | |||||
key: '1', | |||||
name: '第一部部门第一部部门第一部部门', | |||||
age: '王二狗', | |||||
address: '082-12331231', | |||||
phone: '1223245645646', | |||||
email: '6146545@126.com', | |||||
}, { | |||||
key: '1', | |||||
name: '第一部部门第一部部门第一部部门', | |||||
age: '王二狗', | |||||
address: '082-12331231', | |||||
phone: '1223245645646', | |||||
email: '6146545@126.com', | |||||
}, { | |||||
key: '1', | |||||
name: '第一部部门第一部部门第一部部门', | |||||
age: '王二狗', | |||||
address: '082-12331231', | |||||
phone: '1223245645646', | |||||
email: '6146545@126.com', | |||||
}, { | |||||
key: '1', | |||||
name: '第一部部门第一部部门第一部部门', | |||||
age: '王二狗', | |||||
address: '082-12331231', | |||||
phone: '1223245645646', | |||||
email: '6146545@126.com', | |||||
}, { | |||||
key: '1', | |||||
name: '第一部部门第一部部门第一部部门', | |||||
age: '王二狗', | |||||
address: '082-12331231', | |||||
phone: '1223245645646', | |||||
email: '6146545@126.com', | |||||
}, { | |||||
key: '1', | |||||
name: '第一部部门第一部部门第一部部门', | |||||
age: '王二狗', | |||||
address: '082-12331231', | |||||
phone: '1223245645646', | |||||
email: '6146545@126.com', | |||||
}, | |||||
]) | |||||
let columns = ref([ | |||||
{ | |||||
title: '部门名称', | |||||
dataIndex: 'name', | |||||
key: 'name', | |||||
}, | |||||
{ | |||||
title: '联系人', | |||||
dataIndex: 'age', | |||||
key: 'age', | |||||
}, | |||||
{ | |||||
title: '联系电话', | |||||
dataIndex: 'address', | |||||
key: 'address', | |||||
}, | |||||
{ | |||||
title: '联系手机', | |||||
dataIndex: 'phone', | |||||
key: 'phone', | |||||
}, | |||||
{ | |||||
title: '电子邮件', | |||||
dataIndex: 'email', | |||||
key: 'email', | |||||
}, | |||||
{ | |||||
title: '操作', | |||||
dataIndex: 'operation', | |||||
slots: { customRender: 'operation' }, | |||||
}, | |||||
]) | |||||
</script> | </script> | ||||
<style scoped lang="less"> | <style scoped lang="less"> | ||||
:deep(.ant-table-thead >tr>th) { | |||||
background-color: #fff !important; | |||||
border: none !important; | |||||
color: #bbb !important; | |||||
} | |||||
:deep(.ant-table-thead >tr>th::before) { | |||||
display: none !important; | |||||
} | |||||
:deep(.ant-table-tbody >tr >td) { | |||||
border: none !important; | |||||
} | |||||
</style> | </style> |
export const findidx : Function = (arr: any, val: any) => { | |||||
export const findidx : Function = (arr : any, val : any) => { | |||||
return arr.findIndex(item => { | return arr.findIndex(item => { | ||||
return item.id === val | |||||
return item.id === val | |||||
}) | }) | ||||
} | } | ||||
export const intersectionAlike : Function = (objA: any, objB: any) => { | |||||
export const intersectionAlike : Function = (objA : any, objB : any) => { | |||||
const result = {}; | const result = {}; | ||||
for (const keyA in objA) { | for (const keyA in objA) { | ||||
if (objB.hasOwnProperty(keyA)) { | |||||
result[keyA] = objB[keyA]; | |||||
} | |||||
if (objB.hasOwnProperty(keyA)) { | |||||
if (Array.isArray(objB[keyA])) { | |||||
result[keyA] = [...objB[keyA]]; // 使用扩展运算符创建数组的副本 | |||||
} else { | |||||
result[keyA] = objB[keyA]; | |||||
} | |||||
} | |||||
} | } | ||||
return result; | return result; | ||||
} | } | ||||
export const hasValue : Function = (obj: any) => { | |||||
export const hasValue : Function = (obj : any) => { | |||||
let result = ''; | let result = ''; | ||||
result = Object.keys(obj).filter(key => obj[key] !== 0).map(key => `${obj[key]}`).join('') | result = Object.keys(obj).filter(key => obj[key] !== 0).map(key => `${obj[key]}`).join('') | ||||
return result; | return result; | ||||
} | } | ||||
export const divObj : Function = (obj: any) => { | |||||
export const divObj : Function = (obj : any) => { | |||||
const result = [] | const result = [] | ||||
obj.reduce((acc, curr, index) => { | obj.reduce((acc, curr, index) => { | ||||
curr.idx = index; | |||||
result.push(curr) | |||||
// const key = `node${index}Info`; | |||||
// acc[key] = curr; | |||||
// return acc; | |||||
curr.idx = index; | |||||
result.push(curr) | |||||
// const key = `node${index}Info`; | |||||
// acc[key] = curr; | |||||
// return acc; | |||||
}, {}); | }, {}); | ||||
return result; | return result; | ||||
} | } | ||||
export const alreadyValue: Function = (obj: any) => { | |||||
const result = [] | |||||
obj.reduce((acc, curr, index) => { | |||||
curr.idx = index; | |||||
result.push(curr) | |||||
// const key = `node${index}Info`; | |||||
// acc[key] = curr; | |||||
// return acc; | |||||
}, {}); | |||||
export const alreadyValue : Function = (obj : any) => { | |||||
const result = [] | |||||
obj.reduce((acc, curr, index) => { | |||||
curr.idx = index; | |||||
result.push(curr) | |||||
// const key = `node${index}Info`; | |||||
// acc[key] = curr; | |||||
// return acc; | |||||
}, {}); | |||||
return result; | |||||
return result; | |||||
} | } |
<a-col span="18"> | <a-col span="18"> | ||||
<a-row> | <a-row> | ||||
<a-col span="4"> | <a-col span="4"> | ||||
<common-left-sider :menu_list="menu_list" :selected_key="[1]" | |||||
<common-left-sider :menu_list="menu_list" v-model:selectedKeys="selectedKeys" | |||||
@changeKey="changeKey"></common-left-sider> | @changeKey="changeKey"></common-left-sider> | ||||
</a-col> | </a-col> | ||||
<a-col span="20"> | <a-col span="20"> | ||||
<div style="width: 100%;background-color: #fff;padding: 10px;"> | <div style="width: 100%;background-color: #fff;padding: 10px;"> | ||||
<invite-position v-if="curKey == 1"></invite-position> | |||||
<invite-manage v-if="curKey == 2"></invite-manage> | |||||
<invite-position :job_id="job_id" v-if="curKey == 1" @currentMenuKey="currentMenuKey"></invite-position> | |||||
<invite-manage v-if="curKey == 2" @toEdit="toEdit"></invite-manage> | |||||
<invite-recycle v-if="curKey == 3"></invite-recycle> | <invite-recycle v-if="curKey == 3"></invite-recycle> | ||||
</div> | </div> | ||||
</a-col> | </a-col> | ||||
import InvitePosition from '@/components/invite/position/index.vue' | import InvitePosition from '@/components/invite/position/index.vue' | ||||
import InviteManage from '@/components/invite/manage/index.vue' | import InviteManage from '@/components/invite/manage/index.vue' | ||||
import InviteRecycle from '@/components/invite/recycle/index.vue' | import InviteRecycle from '@/components/invite/recycle/index.vue' | ||||
let companyList = ref<object[]>([{}, {}, {}, {}, {}, {}]) | |||||
let menu_list = ref([{ name: '发布招聘', key: 1 }, { name: '招聘职位管理', key: 2 }, { name: '招聘回收站', key: 3 }]) | let menu_list = ref([{ name: '发布招聘', key: 1 }, { name: '招聘职位管理', key: 2 }, { name: '招聘回收站', key: 3 }]) | ||||
let curKey = ref<Number>(1) | let curKey = ref<Number>(1) | ||||
let selectedKeys = ref<Number[]>([1]) | |||||
const changeKey = (data) => { | const changeKey = (data) => { | ||||
curKey.value = data.key; | curKey.value = data.key; | ||||
} | } | ||||
let job_id = ref<Number>(0) | |||||
const toEdit = (data) => { | |||||
curKey.value = 1; | |||||
console.log(data.record.id) | |||||
job_id.value = data.record.id | |||||
} | |||||
const currentMenuKey = (data) => { | |||||
curKey.value = 2; | |||||
selectedKeys.value = [2] | |||||
} | |||||
</script> | </script> | ||||
<style> | <style> |
<div style="width: 100%;background-color: #fff;padding: 10px;"> | <div style="width: 100%;background-color: #fff;padding: 10px;"> | ||||
<user-expense v-if="curKey == 1"></user-expense> | <user-expense v-if="curKey == 1"></user-expense> | ||||
<user-password v-if="curKey == 2"></user-password> | <user-password v-if="curKey == 2"></user-password> | ||||
<user-password v-if="curKey == 3"></user-password> | |||||
</div> | </div> | ||||
</a-col> | </a-col> | ||||
</a-row> | </a-row> | ||||
import UserExpense from '@/components/user/expense/index.vue' | import UserExpense from '@/components/user/expense/index.vue' | ||||
import UserPassword from '@/components/user/password/index.vue' | import UserPassword from '@/components/user/password/index.vue' | ||||
let companyList = ref<object[]>([{}, {}, {}, {}, {}, {}]) | let companyList = ref<object[]>([{}, {}, {}, {}, {}, {}]) | ||||
let menu_list = ref([{ name: '费用管理', key: 1 },{ name: '修改登录密码', key: 2}]) | |||||
let menu_list = ref([{ name: '费用管理', key: 1 },{ name: '修改登录密码', key: 2},{ name: '修改邮箱', key: 3}]) | |||||
let curKey = ref<Number>(1) | let curKey = ref<Number>(1) | ||||
const changeKey = (data) => { | const changeKey = (data) => { | ||||
curKey.value = data.key; | curKey.value = data.key; |