| @@ -5,7 +5,7 @@ | |||
| <link rel="icon" type="image/svg+xml" href="/logo_1.jpg" /> | |||
| <meta name="viewport" content="width=device-width, initial-scale=1.0" /> | |||
| <title>菊城人才市场后台管理</title> | |||
| <script type="module" crossorigin src="/assets/index-DozG8ZEx.js"></script> | |||
| <script type="module" crossorigin src="/assets/index-B7CKfjVf.js"></script> | |||
| <link rel="stylesheet" crossorigin href="/assets/index-4yw9NuJU.css"> | |||
| </head> | |||
| <body> | |||
| @@ -252,4 +252,9 @@ export const PostDictAdd = postModel(url.DictAdd); | |||
| export const PostDictDel = postModel(url.DictDel); | |||
| export const PostDictUpdate = postModel(url.DictUpdate); | |||
| export const GetDictList = getModel(url.DictList); | |||
| export const GetDictDetail = getModel(url.DictDetail); | |||
| export const GetDictDetail = getModel(url.DictDetail); | |||
| // 导出数据 | |||
| export const PostCompanyExport = PostModel(url.CompanyExport); | |||
| export const PostJobseekerExport = PostModel(url.JobseekerExport); | |||
| export const PostJobExport = PostModel(url.JobExport); | |||
| @@ -228,5 +228,10 @@ declare namespace urlType { | |||
| DictUpdate: String, // 编辑 | |||
| DictList: String, // 列表 | |||
| DictDetail: String, // 详情 | |||
| // 导出数据 | |||
| CompanyExport: String, // 详情 | |||
| JobseekerExport: String, // 详情 | |||
| JobExport: String, // 详情 | |||
| } | |||
| } | |||
| @@ -243,4 +243,9 @@ export const url : urlType.url = { | |||
| DictUpdate: common + '/dict/update', // 编辑 | |||
| DictList: common + '/dict/list', // 列表 | |||
| DictDetail: common + '/dict/detail', // 详情 | |||
| // 导出数据 | |||
| CompanyExport: admin + '/company/export', | |||
| JobseekerExport: admin + '/jobseeker/export', | |||
| JobExport: admin + '/job/export', | |||
| } | |||
| @@ -16,7 +16,7 @@ | |||
| let { routerTo } = useAsRouter(); | |||
| const download = () => { | |||
| PostActivityExportUsers().then(res => { | |||
| let url = 'https://rcsc-test.jcjob.cn/img' + res.data.excel_url; | |||
| let url = import.meta.env.MODE == 'production' ? 'https://admin1.jcjob.cn/img' + res.data.excel_url : 'https://rcsc-test.jcjob.cn/img' + res.data.excel_url; | |||
| window.open(url); | |||
| }) | |||
| } | |||
| @@ -1,6 +1,10 @@ | |||
| <template> | |||
| <list-search @searchData="searchData" @clearData="clearData" :search_params="commomParams.search"></list-search> | |||
| <a-c-operation @refresh="clearData"></a-c-operation> | |||
| <a-c-operation @refresh="clearData"> | |||
| <a-col> | |||
| <a-button type="primary" @click="download">导出数据</a-button> | |||
| </a-col> | |||
| </a-c-operation> | |||
| <a-c-table :data="commomParams.table.data" :columns="commomParams.table.columns" :pagination="commomParams.page" | |||
| @page="getPage" :loading="loading"> | |||
| <template #photo_image="{ record }"> | |||
| @@ -36,7 +40,7 @@ | |||
| import ListDepartment from '@/views/company/list/department/index.vue'; | |||
| import ListPosition from '@/views/company/list/position/index.vue'; | |||
| import ListBind from '@/views/company/list/bind/index.vue'; | |||
| import { getCompanyList } from '@/apis/models'; | |||
| import { getCompanyList , PostCompanyExport} from '@/apis/models'; | |||
| import { useCommon } from '@/hooks/useCommon'; | |||
| import { cols } from '@/views/company/list/columns'; | |||
| import { router } from '@/router'; | |||
| @@ -152,6 +156,13 @@ | |||
| // getData(); | |||
| // }) | |||
| // } | |||
| const download = () => { | |||
| PostCompanyExport().then(res => { | |||
| let url = import.meta.env.MODE == 'production' ? 'https://admin1.jcjob.cn/img' + res.data.excel_url : 'https://rcsc-test.jcjob.cn/img' + res.data.excel_url; | |||
| window.open(url); | |||
| }) | |||
| } | |||
| </script> | |||
| <style lang="less" scoped> | |||
| @@ -1,7 +1,11 @@ | |||
| <template> | |||
| <position-search @searchData="searchData" @clearData="clearData" | |||
| :search_params="commomParams.search"></position-search> | |||
| <a-c-operation @refresh="clearData" @add="add"></a-c-operation> | |||
| <a-c-operation @refresh="clearData" @add="add"> | |||
| <a-col> | |||
| <a-button type="primary" @click="download">导出数据</a-button> | |||
| </a-col> | |||
| </a-c-operation> | |||
| <a-c-table :data="commomParams.table.data" :columns="commomParams.table.columns" :pagination="commomParams.page" | |||
| @page="getPage" :loading="loading"> | |||
| <template #default="{ record }"> | |||
| @@ -13,114 +17,120 @@ | |||
| dfd | |||
| </template> | |||
| </a-c-table> | |||
| <position-add v-if="openForm" :edit_record="edit_record" @successAdd="successAdd" @closeAdd="closeAdd"></position-add> | |||
| <position-add v-if="openForm" :edit_record="edit_record" @successAdd="successAdd" | |||
| @closeAdd="closeAdd"></position-add> | |||
| </template> | |||
| <script lang="ts" setup> | |||
| import { ref, onMounted, watch, computed, onBeforeUnmount } from 'vue'; | |||
| import PositionSearch from '@/views/company/position/search/index.vue'; | |||
| import PositionAdd from '@/views/company/position/add/add.vue'; | |||
| import { GetCompanyJobList } from '@/apis/models'; | |||
| import { useCommon } from '@/hooks/useCommon'; | |||
| import { cols } from '@/views/company/position/columns'; | |||
| import { message } from 'ant-design-vue'; | |||
| let { store, commomParams, showModal, showOtherModal1 } = useCommon(); | |||
| let loading = ref<Boolean>(true); | |||
| let openForm = ref<Boolean>(false); | |||
| onMounted(() => { | |||
| if(sessionStorage.getItem('company_id')) { | |||
| commomParams.value.search.company_id = sessionStorage.getItem('company_id') | |||
| } | |||
| getData(commomParams.value.search); | |||
| }) | |||
| onBeforeUnmount(() => { | |||
| sessionStorage.removeItem('company_id') | |||
| sessionStorage.removeItem('company_name') | |||
| openForm.value = false | |||
| }) | |||
| const add = (data : object) => { | |||
| openForm.value = true | |||
| import { ref, onMounted, watch, computed, onBeforeUnmount } from 'vue'; | |||
| import PositionSearch from '@/views/company/position/search/index.vue'; | |||
| import PositionAdd from '@/views/company/position/add/add.vue'; | |||
| import { GetCompanyJobList, PostJobExport } from '@/apis/models'; | |||
| import { useCommon } from '@/hooks/useCommon'; | |||
| import { cols } from '@/views/company/position/columns'; | |||
| import { message } from 'ant-design-vue'; | |||
| let { store, commomParams, showModal, showOtherModal1 } = useCommon(); | |||
| let loading = ref<Boolean>(true); | |||
| let openForm = ref<Boolean>(false); | |||
| onMounted(() => { | |||
| if (sessionStorage.getItem('company_id')) { | |||
| commomParams.value.search.company_id = sessionStorage.getItem('company_id') | |||
| } | |||
| getData(commomParams.value.search); | |||
| }) | |||
| const searchData = (data : object) => { | |||
| commomParams.value.search = data | |||
| getData(); | |||
| } | |||
| onBeforeUnmount(() => { | |||
| sessionStorage.removeItem('company_id') | |||
| sessionStorage.removeItem('company_name') | |||
| openForm.value = false | |||
| }) | |||
| const clearData = (data : object) => { | |||
| sessionStorage.removeItem('company_id') | |||
| sessionStorage.removeItem('company_name') | |||
| openForm.value = false | |||
| if (data) { | |||
| commomParams.value.search = data | |||
| } else { | |||
| commomParams.value.search = { | |||
| page: 1, | |||
| pagesize: 10, | |||
| sort: 'id', | |||
| sortby: 'desc', | |||
| keyword: '' | |||
| } | |||
| } | |||
| getData(); | |||
| } | |||
| const add = (data: object) => { | |||
| openForm.value = true | |||
| } | |||
| 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 GetCompanyJobList(commomParams.value.search); | |||
| loading.value = false; | |||
| commomParams.value.table.data = res.data.rows; | |||
| 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 (err) { | |||
| loading.value = false; | |||
| const searchData = (data: object) => { | |||
| commomParams.value.search = data | |||
| getData(); | |||
| } | |||
| const clearData = (data: object) => { | |||
| sessionStorage.removeItem('company_id') | |||
| sessionStorage.removeItem('company_name') | |||
| openForm.value = false | |||
| if (data) { | |||
| commomParams.value.search = data | |||
| } else { | |||
| commomParams.value.search = { | |||
| page: 1, | |||
| pagesize: 10, | |||
| sort: 'id', | |||
| sortby: 'desc', | |||
| keyword: '' | |||
| } | |||
| } | |||
| getData(); | |||
| } | |||
| // 编辑 | |||
| let edit_record = ref<Object>(null) | |||
| const edit = (record : object) => { | |||
| openForm.value = true | |||
| edit_record.value = record; | |||
| showModal() | |||
| } | |||
| const successAdd = () => { | |||
| getData(); | |||
| } | |||
| const closeAdd = () => { | |||
| openForm.value = false | |||
| edit_record.value = null; | |||
| 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 GetCompanyJobList(commomParams.value.search); | |||
| loading.value = false; | |||
| commomParams.value.table.data = res.data.rows; | |||
| 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 (err) { | |||
| loading.value = false; | |||
| } | |||
| } | |||
| // 删除 | |||
| // const delOneRole = (id: number) => { | |||
| // commomParams.value.delRecord = { id: id }; | |||
| // PostRoleDel(commomParams.value.delRecord).then(res => { | |||
| // message.success('删除成功'); | |||
| // getData(); | |||
| // }) | |||
| // } | |||
| </script> | |||
| // 编辑 | |||
| let edit_record = ref<Object>(null) | |||
| const edit = (record: object) => { | |||
| openForm.value = true | |||
| edit_record.value = record; | |||
| showModal() | |||
| } | |||
| const successAdd = () => { | |||
| getData(); | |||
| } | |||
| const closeAdd = () => { | |||
| openForm.value = false | |||
| edit_record.value = null; | |||
| } | |||
| <style lang="less" scoped> | |||
| </style> | |||
| // 删除 | |||
| // const delOneRole = (id: number) => { | |||
| // commomParams.value.delRecord = { id: id }; | |||
| // PostRoleDel(commomParams.value.delRecord).then(res => { | |||
| // message.success('删除成功'); | |||
| // getData(); | |||
| // }) | |||
| // } | |||
| const download = () => { | |||
| PostJobExport().then(res => { | |||
| let url = import.meta.env.MODE == 'production' ? 'https://admin1.jcjob.cn/img' + res.data.excel_url : 'https://rcsc-test.jcjob.cn/img' + res.data.excel_url; | |||
| window.open(url); | |||
| }) | |||
| } | |||
| </script> | |||
| <style lang="less" scoped></style> | |||
| @@ -1,11 +1,15 @@ | |||
| <template> | |||
| <resume-search @searchData="searchData" @clearData="clearData" :search_params="commomParams.search"></resume-search> | |||
| <a-c-operation @refresh="clearData" :need_add="false"></a-c-operation> | |||
| <a-c-operation @refresh="clearData" :need_add="false"> | |||
| <a-col> | |||
| <a-button type="primary" @click="download">导出数据</a-button> | |||
| </a-col> | |||
| </a-c-operation> | |||
| <a-c-table :data="commomParams.table.data" :columns="commomParams.table.columns" :pagination="commomParams.page" | |||
| @page="getPage" :loading="loading"> | |||
| <template #status="{ record }"> | |||
| {{record.status_txt}} | |||
| <span v-if="record.audit_memo">({{record.audit_memo}})</span> | |||
| {{ record.status_txt }} | |||
| <span v-if="record.audit_memo">({{ record.audit_memo }})</span> | |||
| </template> | |||
| <template #default="{ record }"> | |||
| <a-row :gutter="10"> | |||
| @@ -14,7 +18,7 @@ | |||
| <a-popconfirm title="该简历通过审核?" @confirm="pass(record)"> | |||
| <a-col v-if="record.status == 1"><a-button type="primary" size="small">通过</a-button></a-col> | |||
| </a-popconfirm> | |||
| <a-col v-if="record.status == 1"><a-button type="primary" size="small" @click="interview(record)" | |||
| <a-col v-if="record.status == 1"><a-button type="primary" size="small" @click="interview(record)" | |||
| danger>不通过</a-button></a-col> | |||
| <!-- <a-popconfirm title="是否要推送该简历到ES?" @confirm="pushEs(record.customer_id)"> | |||
| <a-col><a-button type="primary" size="small" primary>推送该简历到ES</a-button></a-col> | |||
| @@ -29,159 +33,164 @@ | |||
| <a-textarea v-model:value="form.aduit_memo" placeholder="请输入不通过原因" /> | |||
| </a-modal> | |||
| </template> | |||
| <script lang="ts" setup> | |||
| import { ref, onMounted, watch, computed, createVNode } from 'vue'; | |||
| import ResumeSearch from '@/views/jobSeeker/resume/search/index.vue'; | |||
| import ResumeAdd from '@/views/jobSeeker/resume/add/add.vue'; | |||
| import ResumeDetail from '@/views/jobSeeker/resume/detail/detail.vue'; | |||
| import { PostJobseekerList, PostJobapplicantUpdate, PostEsJobseeker, GetCustomerUpdate } from '@/apis/models'; | |||
| import { useCommon } from '@/hooks/useCommon'; | |||
| import { cols } from '@/views/jobSeeker/resume/columns'; | |||
| import { UserOutlined, DownOutlined } from '@ant-design/icons-vue'; | |||
| let { store, commomParams, showModal, showOtherModal1, message, ExclamationCircleOutlined, Modal } = useCommon(); | |||
| let loading = ref<Boolean>(true); | |||
| let openForm = ref<Boolean>(false); | |||
| onMounted(() => { | |||
| commomParams.value.search.rand = false | |||
| commomParams.value.search.sort = 'refreshtime' | |||
| getData(); | |||
| }) | |||
| const searchData = (data : object) => { | |||
| import { ref, onMounted, watch, computed, createVNode } from 'vue'; | |||
| import ResumeSearch from '@/views/jobSeeker/resume/search/index.vue'; | |||
| import ResumeAdd from '@/views/jobSeeker/resume/add/add.vue'; | |||
| import ResumeDetail from '@/views/jobSeeker/resume/detail/detail.vue'; | |||
| import { PostJobseekerList, PostJobapplicantUpdate, PostEsJobseeker, GetCustomerUpdate, PostJobseekerExport } from '@/apis/models'; | |||
| import { useCommon } from '@/hooks/useCommon'; | |||
| import { cols } from '@/views/jobSeeker/resume/columns'; | |||
| import { UserOutlined, DownOutlined } from '@ant-design/icons-vue'; | |||
| let { store, commomParams, showModal, showOtherModal1, message, ExclamationCircleOutlined, Modal } = useCommon(); | |||
| let loading = ref<Boolean>(true); | |||
| let openForm = ref<Boolean>(false); | |||
| onMounted(() => { | |||
| commomParams.value.search.rand = false | |||
| commomParams.value.search.sort = 'refreshtime' | |||
| getData(); | |||
| }) | |||
| const searchData = (data: object) => { | |||
| commomParams.value.search = data | |||
| getData(); | |||
| } | |||
| const clearData = (data: object) => { | |||
| commomParams.value.search.rand = false | |||
| if (data) { | |||
| commomParams.value.search = data | |||
| getData(); | |||
| } | |||
| const clearData = (data : object) => { | |||
| commomParams.value.search.rand = false | |||
| if (data) { | |||
| commomParams.value.search = data | |||
| } else { | |||
| commomParams.value.search = { | |||
| page: 1, | |||
| pagesize: 10, | |||
| sort: 'refreshtime', | |||
| sortby: 'desc', | |||
| keyword: '', | |||
| rand: false | |||
| } | |||
| } | |||
| 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 PostJobseekerList(commomParams.value.search); | |||
| loading.value = false; | |||
| commomParams.value.table.data = res.data.seekers; | |||
| 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; | |||
| } else { | |||
| commomParams.value.search = { | |||
| page: 1, | |||
| pagesize: 10, | |||
| sort: 'refreshtime', | |||
| sortby: 'desc', | |||
| keyword: '', | |||
| rand: false | |||
| } | |||
| } | |||
| // 编辑 | |||
| let edit_record = ref<Object>(null) | |||
| const edit = (record : object) => { | |||
| openForm.value = true | |||
| edit_record.value = record; | |||
| showModal() | |||
| 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 PostJobseekerList(commomParams.value.search); | |||
| loading.value = false; | |||
| commomParams.value.table.data = res.data.seekers; | |||
| 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 successAdd = () => { | |||
| } | |||
| // 编辑 | |||
| let edit_record = ref<Object>(null) | |||
| const edit = (record: object) => { | |||
| openForm.value = true | |||
| edit_record.value = record; | |||
| showModal() | |||
| } | |||
| const successAdd = () => { | |||
| getData(); | |||
| } | |||
| const closeAdd = () => { | |||
| openForm.value = false | |||
| edit_record.value = null; | |||
| } | |||
| // 删除 | |||
| // const delOneRole = (id : number) => { | |||
| // commomParams.value.delRecord = { id: id }; | |||
| // PostRoleDel(commomParams.value.delRecord).then(res => { | |||
| // message.success('删除成功'); | |||
| // getData(); | |||
| // }) | |||
| // } | |||
| // 审核 | |||
| const pass = (record) => { | |||
| PostJobapplicantUpdate({ customer_id: record.customer_id, id: record.id, status: 2 }).then(res => { | |||
| message.success('审核通过'); | |||
| getData(); | |||
| } | |||
| const closeAdd = () => { | |||
| openForm.value = false | |||
| edit_record.value = null; | |||
| } | |||
| // 删除 | |||
| // const delOneRole = (id : number) => { | |||
| // commomParams.value.delRecord = { id: id }; | |||
| // PostRoleDel(commomParams.value.delRecord).then(res => { | |||
| // message.success('删除成功'); | |||
| // getData(); | |||
| // }) | |||
| // } | |||
| // 审核 | |||
| const pass = (record) => { | |||
| PostJobapplicantUpdate({ customer_id: record.customer_id, id: record.id, status: 2 }).then(res => { | |||
| message.success('审核通过'); | |||
| getData(); | |||
| }) | |||
| } | |||
| // 邀请面试 | |||
| let openInterview = ref<Boolean>(false); | |||
| let form = { | |||
| id: 0, | |||
| customer_id: 0, | |||
| status: 3, | |||
| aduit_memo: '' | |||
| } | |||
| const interview = (record : Object) => { | |||
| openInterview.value = true | |||
| form.id = record.id; | |||
| form.customer_id = record.customer_id; | |||
| form.status = 3 | |||
| form.aduit_memo = record.audit_memo ? record.audit_memo : '不通过' | |||
| } | |||
| }) | |||
| } | |||
| // 邀请面试 | |||
| let openInterview = ref<Boolean>(false); | |||
| let form = { | |||
| id: 0, | |||
| customer_id: 0, | |||
| status: 3, | |||
| aduit_memo: '' | |||
| } | |||
| const interview = (record: Object) => { | |||
| openInterview.value = true | |||
| form.id = record.id; | |||
| form.customer_id = record.customer_id; | |||
| form.status = 3 | |||
| form.aduit_memo = record.audit_memo ? record.audit_memo : '不通过' | |||
| } | |||
| const unpass = () => { | |||
| PostJobapplicantUpdate(form).then(res => { | |||
| message.success('审核不通过'); | |||
| openInterview.value = false | |||
| getData(); | |||
| }) | |||
| } | |||
| const unpass = () => { | |||
| PostJobapplicantUpdate(form).then(res => { | |||
| message.success('审核不通过'); | |||
| openInterview.value = false | |||
| getData(); | |||
| }) | |||
| } | |||
| const pushEs = (customer_id) => { | |||
| PostEsJobseeker({ customer_ids: [customer_id] }).then(res => { | |||
| message.success('推送成功'); | |||
| }) | |||
| } | |||
| const pushEs = (customer_id) => { | |||
| PostEsJobseeker({ customer_ids: [customer_id] }).then(res => { | |||
| message.success('推送成功'); | |||
| }) | |||
| } | |||
| let detail_record = ref<Object>(null) | |||
| const detail = (record) => { | |||
| detail_record.value = record; | |||
| showOtherModal1() | |||
| } | |||
| const successPermission = () => { | |||
| detail_record.value = null; | |||
| } | |||
| let detail_record = ref<Object>(null) | |||
| const detail = (record) => { | |||
| detail_record.value = record; | |||
| showOtherModal1() | |||
| } | |||
| const successPermission = () => { | |||
| detail_record.value = null; | |||
| } | |||
| const closePermission = () => { | |||
| detail_record.value = null; | |||
| } | |||
| const closePermission = () => { | |||
| detail_record.value = null; | |||
| } | |||
| const download = () => { | |||
| PostJobseekerExport().then(res => { | |||
| let url = import.meta.env.MODE == 'production' ? 'https://admin1.jcjob.cn/img' + res.data.excel_url : 'https://rcsc-test.jcjob.cn/img' + res.data.excel_url; | |||
| window.open(url); | |||
| }) | |||
| } | |||
| </script> | |||
| <style lang="less" scoped> | |||
| </style> | |||
| <style lang="less" scoped></style> | |||