Soleilw 1 anno fa
parent
commit
a8ab63b1bb

+ 8
- 2
src/apis/models/index.ts Vedi File

@@ -18,7 +18,12 @@ export const PostViewhistoryList = getModel(url.ViewhistoryList);// 获取简历
export const PostInterviewList = getModel(url.InterviewList); // 获取应聘记录列表

// 企业管理中心
export const GetCompanyRecommentResume = getModel(url.CompanyRecommentResume); // 推荐简历
export const PostCompanyProfile = getModel(url.CompanyProfile); // 企业基本资料
export const PostCompanyEdit = postModel(url.CompanyEdit); // 编辑企业
export const PostCompanyDetailInfo = getModel(url.CompanyDetailInfo); // 企业详细信息【可编辑】
export const PostCompanyPhotoUpload = postModel(url.CompanyPhotoUpload); // 修改企业图片
export const PostCompanyLicenseUpload = postModel(url.CompanyLicenseUpload); // 更换营业执照接口
export const PostCompanyLogin = postModel(url.CompanyLogin); // 登录
export const PostCompanyInfo = getModel(url.CompanyInfo); // 企业信息
export const PostCompanyProbationList = getModel(url.CompanyProbationList); // 见习基地
@@ -31,13 +36,14 @@ export const PostCompanyEmailEdit = postModel(url.CompanyEmailEdit); // 修改
// 职位管理
export const PostCompanyJobAdd = getModel(url.CompanyJobAdd); // 添加职位
export const PostCompanyJobEdit = postModel(url.CompanyJobEdit); // 编辑职位
export const PostCompanyJobList = postModel(url.CompanyJobList); // 企业职位列表
export const PostCompanyJobList = getModel(url.CompanyJobList); // 企业职位列表
export const PostCompanyJobInfo = getModel(url.CompanyJobInfo); // 职位信息

// 部门管理
export const PostCompanyDepartmentAdd = getModel(url.CompanyDepartmentAdd); // 新增部门
export const PostCompanyDepartmentAdd = postModel(url.CompanyDepartmentAdd); // 新增部门
export const PostCompanyDepartmentEdit = postModel(url.CompanyDepartmentEdit); // 编辑部门
export const PostCompanyDepartmentList = postModel(url.CompanyDepartmentList); // 部门列表
export const PostCompanyDepartmentDel = postModel(url.CompanyDepartmentDel); // 部门删除
export const PostCompanyRecrBookList = getModel(url.CompanyRecrBookList); // 已预定招聘会列表

// 企业开通微信小程序账号公司权限

+ 6
- 0
src/apis/types/url.d.ts Vedi File

@@ -16,7 +16,12 @@ declare namespace urlType {
InterviewList : String,

// 企业管理中心
CompanyRecommentResume : String,
CompanyProfile : String,
CompanyEdit: String,
CompanyDetailInfo: String,
CompanyPhotoUpload: String,
CompanyLicenseUpload: String,
CompanyLogin : String,
CompanyInfo : String,
CompanyProbationList : String,
@@ -34,6 +39,7 @@ declare namespace urlType {
CompanyDepartmentAdd : String,
CompanyDepartmentEdit : String,
CompanyDepartmentList : String,
CompanyDepartmentDel: String,
CompanyRecrBookList : String,

// 企业开通微信小程序账号公司权限

+ 6
- 0
src/apis/url.ts Vedi File

@@ -19,7 +19,12 @@ export const url : urlType.url = {
InterviewList: web + '/interview/list', // 获取应聘记录列表
// 企业管理中心
CompanyRecommentResume: web + '/company/recomment_resume', // 推荐简历
CompanyProfile: web + '/company/profile', // 企业基本资料
CompanyEdit: web + '/company/edit', // 编辑企业
CompanyDetailInfo: web + '/company/detail_info', // 企业详细信息【可编辑】
CompanyPhotoUpload: web + '/company/photo_upload', // 修改企业图片
CompanyLicenseUpload: web + '/company/license_upload', // 更换营业执照接口
CompanyLogin: web + '/company/login', // 登录
CompanyInfo: web + '/company/info', // 企业信息
CompanyProbationList: web + '/company/probation_list', // 见习基地
@@ -37,6 +42,7 @@ export const url : urlType.url = {
CompanyDepartmentAdd: web + '/company/department_add', // 新增部门
CompanyDepartmentEdit: web + '/company/department_edit', // 编辑部门
CompanyDepartmentList: web + '/company/department_list', // 部门列表
CompanyDepartmentDel: web + '/company/department_del', // 部门删除
CompanyRecrBookList: web + '/company/recr_book_list', // 已预定招聘会列表
// 企业开通微信小程序账号公司权限

+ 126
- 88
src/components/company/basic/index.vue Vedi File

@@ -4,7 +4,7 @@
<a-col span="12">
<a-row>
<a-col span="24">
<a-form-item label="企业名称" name="full_name">
<a-form-item label="企业名称" name="full_name">
<a-input v-model:value="createForm.full_name" placeholder="请输入企业名称" />
</a-form-item>
</a-col>
@@ -14,18 +14,18 @@
</a-form-item>
</a-col>
<a-col span="24">
<a-form-item label="成立日期" name="establishment_date">
<a-form-item label="成立日期" name="establishment_date">
<a-date-picker v-model:value="addOtherForm.chengli_date" @Change="establishmentDateChange"
style="width: 100%;" />
</a-form-item>
</a-col>
<a-col span="24">
<a-form-item label="联系人" name="contact">
<a-form-item label="联系人" name="contact">
<a-input v-model:value="createForm.contact" placeholder="请输入联系人" />
</a-form-item>
</a-col>
<a-col span="24">
<a-form-item label="联系电话" name="phone">
<a-form-item label="联系固话" name="phone">
<a-input v-model:value="createForm.phone" placeholder="请输入联系电话" />
</a-form-item>
</a-col>
@@ -36,14 +36,14 @@
</a-col>
<a-col span="24">
<a-form-item label="所属行业">
<!-- <a-c-cascader :dict="2004" @saveCascader="industrySave" placeholder="请选择所属行业"
:cascader_content="addOtherForm.company_industry_cascader"></a-c-cascader> -->
<a-jilian :dict="2004" @saveCascader="industrySave" placeholder="请选择所属行业"
:cascader_content="addOtherForm.company_industry_cascader"></a-jilian>
</a-form-item>
</a-col>
<a-col span="24">
<a-form-item label="所在地区">
<!-- <a-c-cascader :dict="2009" @saveCascader="compantAddressSave" placeholder="请选择公司地址"
:cascader_content="addOtherForm.company_address_cascader"></a-c-cascader> -->
<a-jilian :dict="2009" @saveCascader="compantAddressSave" placeholder="请选择公司地址"
:cascader_content="addOtherForm.company_address_cascader"></a-jilian>
</a-form-item>
</a-col>
<a-col span="24">
@@ -53,14 +53,14 @@
</a-col>
<a-col span="24">
<a-form-item label="企业性质">
<!-- <a-c-cascader :dict="2002" @saveCascader="natureSave" placeholder="请选择企业性质"
:cascader_content="addOtherForm.company_nature_cascader"></a-c-cascader> -->
<a-jilian :dict="2002" @saveCascader="natureSave" placeholder="请选择企业性质"
:cascader_content="addOtherForm.company_nature_cascader"></a-jilian>
</a-form-item>
</a-col>
<a-col span="24">
<a-form-item label="企业规模">
<!-- <a-c-select :dict="2003" placeholder="请选择企业规模" @saveSelect="scaleSave"
:select_content="addOtherForm.company_scale_cascader"></a-c-select> -->
<a-xuanze :dict="2003" placeholder="请选择企业规模" @saveSelect="scaleSave"
:select_content="addOtherForm.company_scale_cascader"></a-xuanze>
</a-form-item>
</a-col>
<a-col span="24">
@@ -68,9 +68,9 @@
<a-input v-model:value="createForm.fax" placeholder="请输入传真" />
</a-form-item>
</a-col>
<a-col span="24">
<a-form-item label="详细地址" name="address">
<a-form-item label="详细地址" name="address">
<a-input v-model:value="createForm.address" placeholder="请输入详细地址" />
</a-form-item>
</a-col>
@@ -81,23 +81,37 @@
</a-col>
<a-col span="24">
<a-form-item label="企业介绍">
<!-- <QuillEditor theme="snow" :options="options" toolbar="full" v-model:content="addOtherForm.content"
@update:content="onEditorUpdate($event)" contentType="html" /> -->
<QuillEditor theme="snow" :options="options" toolbar="full"
v-model:content="addOtherForm.content" @update:content="onEditorUpdate($event)"
contentType="html" />
</a-form-item>
</a-col>
<a-col span="24">
<a-form-item label="保存">
<a-button type="primary" block @click="sumbitForm">保存</a-button>
</a-form-item>
</a-col>
</a-row>
</a-col>
</a-row>
</a-form>
<a-button block>保存</a-button>
</template>

<script setup lang="ts">
import { ref, onMounted, computed, defineProps, watch, defineEmits } from 'vue';
// import dayjs from 'dayjs';
// import 'dayjs/locale/zh-cn';
// dayjs.locale('zh-cn');
// const dayjsRef = ref(dayjs);
import { PostCompanyDetailInfo, PostCompanyEdit } from '@/apis/models';
import { intersectionAlike } from '@/utils/dataHelper';
import { warnToast, successToast } from '@/utils/toastHelper';
import dayjs from 'dayjs';
import 'dayjs/locale/zh-cn';
dayjs.locale('zh-cn');
const dayjsRef = ref(dayjs);
const options = ref({
debug: 'info',
modules: {
},
placeholder: '请输入企业简介'
})

let createForm : companyListType.addrFormType = ref({
full_name: '',
@@ -115,24 +129,15 @@
street: 0,
address: '',
industry: 0,
industry2: 0,
nature: 0,
scale: 0,
introduction: '',
photo: '',
photo_status: 1,
license_path: '',
license_status: 1,
login_name: '',
login_pwd: '',
company_photos: [],
})

let addOtherForm = ref<companyListType.addOtherFormType>({
chengli_date: '',
content: '',
photo_img: '',
license_img: '',
company_photo_img: '',
company_address_cascader: '',
company_industry_cascader: '',
company_nature_cascader: '',
@@ -141,10 +146,59 @@


onMounted(async () => {
getBasic()
// let res = await listSection({ page: 1, pagesize: 10, sort: 'id', sortby: "asc", keyword: "" });
// section_list.value = res.data.sections;
})

const getBasic = () => {
PostCompanyDetailInfo().then(res => {
createForm.value = intersectionAlike(createForm.value, res.data)
addOtherForm.value = {
chengli_date: dayjsRef.value(res.data.establishment_date),
content: res.data.introduction,
company_address_cascader: res.data.province_name + res.data.city_name + res.data.district_name + res.data.street_name,
company_industry_cascader: res.data.industry_text + res.data.industry2_text,
company_nature_cascader : res.data.nature_text,
company_scale_cascader: res.data.scale_text,
}
})
}

// 成立日期
const establishmentDateChange = (val) => {
createForm.value.establishment_date = dayjsRef.value(val).format('YYYY-MM-DD');
}

// 所属行业 industrySave
const industrySave = (data) => {
createForm.value.industry = data.arr1[0] ? data.arr1[0] : 0;
createForm.value.industry2 = data.arr1[1] ? data.arr1[1] : 0;
}

// 选择地址
const compantAddressSave = (data) => {
createForm.value.province = data.arr1[0] ? data.arr1[0] : 0;
createForm.value.city = data.arr1[1] ? data.arr1[1] : 0;
createForm.value.district = data.arr1[2] ? data.arr1[2] : 0;
createForm.value.street = data.arr1[3] ? data.arr1[3] : 0;
}

// 企业性质
const natureSave = (data) => {
createForm.value.nature = data.arr1[1] ? data.arr1[1] : 0;
}

// 企业规模
const scaleSave = (data) => {
createForm.value.scale = data.val ? data.val : 0;
}

// 富文本
const onEditorUpdate = (data) => {
createForm.value.introduction = data
}

// 上传图片
// 企业照片
// const uploadPhotoSuccess = (data : Object) => {
@@ -162,65 +216,49 @@
// addOtherForm.value.company_photo_img = "http://114.132.245.7:242494" + data
// createForm.value.company_photos.push({ photo: data })
// }
// // 成立日期
// const establishmentDateChange = (val) => {
// createForm.value.establishment_date = dayjsRef.value(val).format('YYYY-MM-DD');
// }


// // 选择地址
// const compantAddressSave = (data) => {
// createForm.value.province = data.arr1[0] ? data.arr1[0] : 0;
// createForm.value.city = data.arr1[1] ? data.arr1[1] : 0;
// createForm.value.district = data.arr1[2] ? data.arr1[2] : 0;
// createForm.value.street = data.arr1[3] ? data.arr1[3] : 0;
// }

// // 所属行业 industrySave
// const industrySave = (data) => {
// createForm.value.industry = data.arr1[1] ? data.arr1[1] : 0;
// }

// // 企业性质
// const natureSave = (data) => {
// createForm.value.nature = data.arr1[1] ? data.arr1[1] : 0;
// }

// // 企业规模
// const scaleSave = (data) => {
// createForm.value.scale = data.val ? data.val : 0;
// }

// // 富文本
// const onEditorUpdate = (data) => {
// createForm.value.introduction = data
// }

// const sumbitForm = () => {
// console.log(createForm.value)
// if (createForm.value.full_name) {
// if (!createForm.value.id) {
// addCompany(createForm.value).then(res => {
// message.success('新增企业成功');
// hideModal();
// resetForm();
// emit('successAdd');
// }).catch(err => {
// })
// } else {
// PostCompanyEdit(createForm.value).then(res => {
// message.success('修改企业信息成功');
// hideModal();
// resetForm();
// emit('successAdd');
// }).catch(err => {
// })
// }

// } else {
// message.warning('请补充完整信息');
// }
// }
const sumbitForm = () => {
console.log(createForm.value)
PostCompanyEdit(createForm.value).then(res => {
successToast('保存成功');
resetForm();
getBasic();
}).catch(err => {
})
}
const resetForm = () => {
createForm.value = {
chengli_date: '',
content: '',
company_address_cascader: '',
company_industry_cascader: '',
company_nature_cascader: '',
company_scale_cascader: '',
}
createForm.value = {
full_name: '',
registration_number: '',
establishment_date: '',
contact: '',
phone: '',
mobile: '',
email: '',
fax: '',
website: '',
province: 0,
city: 0,
district: 0,
street: 0,
address: '',
industry: 0,
industry2: 0,
nature: 0,
scale: 0,
introduction: '',
}
}
</script>

<style>

+ 23
- 0
src/components/company/department/columns.ts Vedi File

@@ -0,0 +1,23 @@

export const cols = <ColType.type[]>[
{
title: '部门名称',
dataIndex: 'name'
}, {
title: '联系人',
dataIndex: 'contact'
}, {
title: '联系固话',
dataIndex: 'phone'
}, {
title: '联系手机',
dataIndex: 'mobile'
}, {
title: '电子邮件',
dataIndex: 'email'
},{
title: '操作',
dataIndex: 'operation',
slots: { customRender: 'operation' },
},
]

+ 107
- 187
src/components/company/department/index.vue Vedi File

@@ -1,15 +1,22 @@
<template>
<a-tabs v-model:activeKey="activeKey">
<a-tab-pane key="1" tab="部门管理">
<a-table :data-source="dataSource" :columns="columns">
<template #operation="{ record }">
<a-popconfirm v-if="dataSource.length" title="Sure to delete?" @confirm="onDelete(record.key)">
<a>删除</a>
</a-popconfirm>
<div style="margin: 16px;">
<a-search @searchData="searchData" @clearData="clearData"
:search_params="commomParams.search"></a-search>
</div>
<a-biaoge :data="commomParams.table.data" :columns="commomParams.table.columns"
:pagination="commomParams.page" @page="getPage" :loading="loading">
<template #default="{ record }">
<a-row :gutter="20">
<a-popconfirm title="是否删除该部门?" @confirm="del(record.id)">
<a-col><a-button type="primary" size="small" danger>删除</a-button></a-col>
</a-popconfirm>
</a-row>
</template>
</a-table>
</a-biaoge>
</a-tab-pane>
<a-tab-pane key="2" tab="填写资料" force-render>
<a-tab-pane key="2" tab="部门资料" force-render>
<a-form :model="createForm" :label-col="{span: 4}" labelAlign="right">
<a-row gutter="20">
<a-col span="12">
@@ -25,7 +32,7 @@
</a-form-item>
</a-col>
<a-col span="24">
<a-form-item required label="联系话" name="phone">
<a-form-item required label="联系话" name="phone">
<a-input v-model:value="createForm.phone" placeholder="请输入联系电话" />
</a-form-item>
</a-col>
@@ -39,6 +46,11 @@
<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>
@@ -49,191 +61,99 @@

<script setup lang="ts">
import { ref, onMounted, computed } from 'vue';
import { PostCompanyDepartmentAdd, PostCompanyDepartmentList, PostCompanyDepartmentDel } from '@/apis/models';
import ASearch from '@/components/company/department/search.vue';
import { useCommon } from '@/hooks/useCommon';
import { cols } from '@/components/company/department/columns';
import { warnToast, successToast } from '@/utils/toastHelper';
let activeKey = ref<String>("1")
let { commomParams } = 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 PostCompanyDepartmentList();
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 {
loading.value = false;
}
}

let createForm : companyListType.addrFormType = ref({
name: '',
company_id: 0,
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: '',
}
}
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' },
},
])
const del = (id: number) => {
commomParams.value.delParam = { id: id };
PostCompanyDepartmentDel(commomParams.value.delParam).then(res => {
successToast('删除成功');
getData();
})
}
</script>

<style scoped lang="less">
@@ -242,12 +162,12 @@
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>

+ 44
- 0
src/components/company/department/search.vue Vedi File

@@ -0,0 +1,44 @@
<template>
<a-form :model="commomParams.search">
<a-row :gutter="20">
<a-col span="12">
<a-form-item>
<a-input-search v-model:value="commomParams.search.keyword" placeholder="请输入部门名称" enter-button="搜索"
@search="getData" />
</a-form-item>
</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) => {
console.log(newVal)
})

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>

+ 58
- 4
src/components/company/image/index.vue Vedi File

@@ -1,21 +1,75 @@
<template>
<upload upload_txt="上传企业图片" @uploadSuccess="uploadPhotoSuccess"
:success_image="addOtherForm.photo_img" images_length="1"></upload>
<a-form :model="createForm" :label-col="{span: 6}" labelAlign="right">
<a-row gutter="20">
<a-col span="12">
<a-row>
<a-col span="24">
<a-form-item label="上传企业图片" name="photo">
<upload upload_txt="上传企业图片" @uploadSuccess="uploadPhotoSuccess"
:success_image="addOtherForm.photo_img" images_length="1" image_type="3"></upload>
</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 { PostCompanyDetailInfo, PostCompanyPhotoUpload } from '@/apis/models';
import Upload from '@/components/form/upload.vue';
import { warnToast, successToast } from '@/utils/toastHelper';
let createForm = ref({
photo: '',
})
let addOtherForm = ref({
photo_img: '',
})
onMounted(async () => {
getBasic()
// let res = await listSection({ page: 1, pagesize: 10, sort: 'id', sortby: "asc", keyword: "" });
// section_list.value = res.data.sections;
})
const getBasic = () => {
PostCompanyDetailInfo().then(res => {
createForm.value.photo = res.data.photo
addOtherForm.value = {
photo_img: "https://rcsc-test.jcjob.cn/img/" + res.data.photo,
}
})
}
// 营业执照
const uploadPhotoSuccess = (data : Object) => {
addOtherForm.value.photo_img = "http://114.132.85.7:8894" + data
addOtherForm.value.photo_img = "https://rcsc-test.jcjob.cn/img/" + data
createForm.value.photo = data
}
const saveForm = () => {
PostCompanyPhotoUpload(createForm.value).then(res => {
successToast('保存成功')
resetForm();
getBasic();
})
}
const resetForm = () => {
addOtherForm = {
photo_img: '',
}
createForm.value = {
photo: ''
}
}
</script>

<style>

+ 60
- 6
src/components/company/licence/index.vue Vedi File

@@ -1,20 +1,74 @@
<template>
<upload upload_txt="上传营业执照" @uploadSuccess="uploadPhotoSuccess"
:success_image="addOtherForm.photo_img" images_length="1"></upload>
<a-form :model="createForm" :label-col="{span: 6}" labelAlign="right">
<a-row gutter="20">
<a-col span="12">
<a-row>
<a-col span="24">
<a-form-item label="上传营业执照" name="photo">
<upload upload_txt="上传营业执照" @uploadSuccess="uploadPhotoSuccess"
:success_image="addOtherForm.license_img" images_length="1" image_type="4"></upload>
</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 { PostCompanyDetailInfo, PostCompanyLicenseUpload } from '@/apis/models';
import Upload from '@/components/form/upload.vue';
import { warnToast, successToast } from '@/utils/toastHelper';
let createForm = ref({
license_path: '',
})
let addOtherForm = ref({
photo_img: '',
license_img: '',
})
onMounted(async () => {
getBasic()
// let res = await listSection({ page: 1, pagesize: 10, sort: 'id', sortby: "asc", keyword: "" });
// section_list.value = res.data.sections;
})
const getBasic = () => {
PostCompanyDetailInfo().then(res => {
createForm.value.license_path = res.data.license_path
addOtherForm.value = {
license_img: "https://rcsc-test.jcjob.cn/img/" + res.data.license_path,
}
})
}
// 营业执照
const uploadPhotoSuccess = (data : Object) => {
addOtherForm.value.photo_img = "http://114.132.85.7:8894" + data
createForm.value.photo = data
addOtherForm.value.license_img = "https://rcsc-test.jcjob.cn/img/" + data
createForm.value.license_path = data
}
const saveForm = () => {
PostCompanyLicenseUpload(createForm.value).then(res => {
successToast('保存成功')
resetForm();
getBasic();
})
}
const resetForm = () => {
addOtherForm = {
license_img: '',
}
createForm.value = {
license_path: ''
}
}
</script>


+ 6
- 6
src/components/form/upload.vue Vedi File

@@ -1,6 +1,6 @@
<template>
<div style="display: flex;">
<img v-if="imagesLength == 1 && imageUrl" :src="imageUrl" alt="avatar" width="200px" height="400px"
<img v-if="imagesLength == 1 && imageUrl" :src="imageUrl" alt="avatar" width="100px" height="100px"
style="margin-right: 10px;" />
<template v-else>
<template v-for="(item, index) in imagesList">
@@ -21,7 +21,7 @@
import { ref, onMounted, computed, defineProps, watch, defineEmits } from 'vue';
import axios from 'axios';
import { message } from 'ant-design-vue';
const props = defineProps(['upload_txt', 'success_image', 'images_length']);
const props = defineProps(['upload_txt', 'success_image', 'images_length', 'image_type']);
const emit = defineEmits();
const headers = ref<Object>({
Authorization: sessionStorage.getItem('token'),
@@ -35,6 +35,7 @@
let imageUrl = ref<String>(props.success_image) // 图片路径
let uploadTxt = ref<String>(props.upload_txt)
let imagesLength = ref<Number>(props.images_length)
let imagesType= ref<Number>(props.image_type)
watch(() => props.success_image, (newVal : string, oldVal : string) => {
imageUrl.value = newVal;
})
@@ -48,18 +49,17 @@
let formdata = new FormData()
formdata.append('image', e.file)
axios({
url: 'http://114.132.85.7:8889/common/image/upload?imgtype=1',
url: 'https://rcsc-test.jcjob.cn/api/common/image/upload?imgtype=' + imagesType.value,
method: 'post',
data: formdata,
headers: headers.value
}).then((res) => {

if (imagesLength.value === 1) {
imagesList.value = [{
uid: '-1', // 文件唯一标识,建议设置为负数,防止和内部产生的 id 冲突
name: e.file.name, // 文件名
status: 'done', // 状态有:uploading done error removed
url: "http://114.132.85.7:8894" + res.data.data.filename
url: "https://rcsc-test.jcjob.cn/img" + res.data.data.filename
}]
} else {
if (imagesList.value.length < imagesLength.value) {
@@ -68,7 +68,7 @@
uid: '-' + (imagesList.value.length + 1), // 文件唯一标识,建议设置为负数,防止和内部产生的 id 冲突
name: e.file.name, // 文件名
status: 'done', // 状态有:uploading done error removed
url: "http://114.132.85.7:8894" + res.data.data.filename
url: "https://rcsc-test.jcjob.cn/img" + res.data.data.filename
})
} else {
message.danger('最多上传5张');

+ 40
- 0
src/components/form/xuanze.vue Vedi File

@@ -0,0 +1,40 @@
<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>

</template>

<script lang="ts" setup>
import { ref, onMounted, defineProps, watch, defineEmits } from 'vue';
import { GetDictTree } from '@/apis/models';
const props = defineProps(['dict', 'placeholder', 'select_content']);
let listOptions = ref([]);
let selectValue = ref<String>();
let placeholder = ref('请选择');
placeholder.value = props.placeholder
watch(() => [props.dict, props.select_content],
(newVal:string, oldVal:string) => {
GetDictTree({
code: newVal[0]
}).then((res:object) => {
listOptions.value = res.data.dicts
})
selectValue.value = newVal[1];
})

onMounted(() => {
GetDictTree({
code: props.dict
}).then((res:object) => {
listOptions.value = res.data.dicts
})
})
const emit = defineEmits();
const handleChange = (val) => {
emit('saveSelect', { val: val });
}
</script>

<style>
</style>

+ 43
- 0
src/components/invite/manage/columns.ts Vedi File

@@ -0,0 +1,43 @@

export const cols = <ColType.type[]>[
{
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: 'email',
key: 'email',
},
{
title: '推荐简历(未看)',
dataIndex: 'email',
key: 'email',
},
{
title: '操作',
dataIndex: 'operation',
slots: { customRender: 'operation' },
},
]

+ 120
- 132
src/components/invite/manage/index.vue Vedi File

@@ -1,143 +1,131 @@
<template>
<a-table :data-source="dataSource" :columns="columns">
<template #operation="{ record }">
<a-dropdown>
<template #overlay>
<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>
</template>
<a-button>
刷新
<DownOutlined />
</a-button>
</a-dropdown>
<div style="margin: 16px;">
<a-search @searchData="searchData" @clearData="clearData"
:search_params="commomParams.search"></a-search>
</div>
<a-biaoge :data="commomParams.table.data" :columns="commomParams.table.columns"
:pagination="commomParams.page" @page="getPage" :loading="loading">
<template #default="{ record }">
<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-row>
</template>
</a-table>
</a-biaoge>
</template>

<script setup lang="ts">
import { ref, onMounted, computed } from 'vue';
import { UserOutlined, DownOutlined } from '@ant-design/icons-vue';
let dataSource = ref([
{
key: '第一部部门第一部部门第一部部门',
name: '第一部',
age: '已暂停',
address: '2020111111',
phone: '12',
email: '12.com',
}, {
key: '第一部部门第一部部门第一部部门',
name: '第一部',
age: '已暂停',
address: '2020111111',
phone: '12',
email: '12.com',
import { PostCompanyJobList } from '@/apis/models';
import ASearch from '@/components/invite/manage/search.vue';
import { useCommon } from '@/hooks/useCommon';
import { cols } from '@/components/invite/manage/columns';
import { warnToast, successToast } from '@/utils/toastHelper';
let { commomParams } = 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: ''
}
}
, {
key: '第一部部门第一部部门第一部部门',
name: '第一部',
age: '已暂停',
address: '2020111111',
phone: '12',
email: '12.com',
}, {
key: '第一部部门第一部部门第一部部门',
name: '第一部',
age: '已暂停',
address: '2020111111',
phone: '12',
email: '12.com',
}, {
key: '第一部部门第一部部门第一部部门',
name: '第一部',
age: '已暂停',
address: '2020111111',
phone: '12',
email: '12.com',
}, {
key: '第一部部门第一部部门第一部部门',
name: '第一部',
age: '已暂停',
address: '2020111111',
phone: '12',
email: '12.com',
}, {
key: '第一部部门第一部部门第一部部门',
name: '第一部',
age: '已暂停',
address: '2020111111',
phone: '12',
email: '12.com',
}, {
key: '第一部部门第一部部门第一部部门',
name: '第一部',
age: '已暂停',
address: '2020111111',
phone: '12',
email: '12.com',
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 PostCompanyJobList();
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 {
loading.value = false;
}
])
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: 'email',
key: 'email',
},
{
title: '推荐简历(未看)',
dataIndex: 'email',
key: 'email',
},
{
title: '操作',
dataIndex: 'operation',
slots: { customRender: 'operation' },
},
])
}

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 del = (id: number) => {
commomParams.value.delParam = { id: id };
PostCompanyDepartmentDel(commomParams.value.delParam).then(res => {
successToast('删除成功');
getData();
})
}
</script>

<style scoped lang="less">

+ 44
- 0
src/components/invite/manage/search.vue Vedi File

@@ -0,0 +1,44 @@
<template>
<a-form :model="commomParams.search">
<a-row :gutter="20">
<a-col span="12">
<a-form-item>
<a-input-search v-model:value="commomParams.search.keyword" placeholder="请输入职位名称" enter-button="搜索"
@search="getData" />
</a-form-item>
</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) => {
console.log(newVal)
})

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>

+ 207
- 32
src/components/invite/position/info.vue Vedi File

@@ -12,14 +12,12 @@
</a-form-item>
</a-col>
<a-col span="24">
<a-form-item required label="联系人" name="contact">
<a-input v-model:value="createForm.contact" placeholder="请输入联系人" />
</a-form-item>
</a-col>
<a-col span="24">
<a-form-item label="所属部门" name="department_id">
<!-- <a-c-select-common placeholder="请选择部门" :list="department_list" @searchKey="searchDepartment"
@saveSearch="saveDepartmentSearch"></a-c-select-common> -->
<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-option v-for="item in department_list" :key="item.id" :value="item.id"
:label="item.name" label-in-value>{{item.name}}</a-select-option>
</a-select>
</a-form-item>
</a-col>
<a-col span="24">
@@ -32,37 +30,38 @@
<a-input v-model:value="createForm.invite_count" placeholder="请输入招聘人数" />
</a-form-item>
</a-col>

<a-col span="24">
<a-form-item required label="联系电话" name="phone">
<a-input v-model:value="createForm.phone" placeholder="请输入联系电话" />
</a-form-item>
</a-col>
<a-col span="24">
<a-form-item required label="职位类别" :label-col="{span: 0}">
<!-- <a-c-cascader :dict="2004" @saveCascader="industry1Save" placeholder="请选择职位类别"
:cascader_content="addOtherForm.company_industry1_cascader"></a-c-cascader> -->
<a-form-item required label="职位类别">
<a-tree-select v-model:value="value" style="width: 100%" :tree-data="jobTypeData"
tree-checkable allow-clear :show-checked-strategy="SHOW_PARENT"
placeholder="职位类别(最多三个,多选只取前三)" tree-node-filter-prop="label"
:fieldNames="jobTypeFieldNames" :maxTagCount="3" @change="jobTypeChange" />
</a-form-item>
</a-col>
<a-col span="24">
<a-form-item required label="工作地区" name="name">
<!-- <a-c-cascader :dict="2009" @saveCascader="location1Save" placeholder="请选择工作区域"
:cascader_content="addOtherForm.company_location1_cascader"></a-c-cascader> -->
<a-form-item required label="工作区域">
<a-row gutter="20">
<a-tree-select v-model:value="value" 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-form-item>
</a-col>
<a-col span="24">
<a-form-item required label="职位描述" name="describe_text" >
<!-- <QuillEditor theme="snow" :options="options" toolbar="full"
<a-form-item required label="职位描述" name="describe_text">
<QuillEditor theme="snow" :options="options" toolbar="full"
v-model:content="addOtherForm.describe_content"
@update:content="onEditorDescribeUpdate($event)" contentType="html" /> -->
@update:content="onEditorDescribeUpdate($event)" contentType="html" />
</a-form-item>
</a-col>

<a-col span="24">
<a-form-item label="薪资范围" name="pay_range">
<!-- <a-c-select :dict="2005" placeholder="请选择月薪要求范围" @saveSelect="savePayRange"></a-c-select> -->
<a-xuanze :dict="2005" placeholder="请选择月薪要求范围" @saveSelect="savePayRange"
:select_content="addOtherForm.company_scale_cascader"></a-xuanze>
</a-form-item>
</a-col>

<a-col span="24">
<a-form-item required label="有效天数" name="useful_life">
<a-input-number :min="0" type="number" v-model:value="createForm.useful_life"
@@ -71,8 +70,8 @@
</a-col>
<a-col span="24">
<a-form-item required label="到期日期">
<!-- <a-date-picker v-model:value="addOtherForm.daoqi_date" @Change="disabledDateChange"
style="width: 100%;" /> -->
<a-date-picker v-model:value="addOtherForm.daoqi_date" @Change="disabledDateChange"
style="width: 100%;" />
</a-form-item>
</a-col>
<a-col span="24">
@@ -81,18 +80,67 @@
</a-form-item>
</a-col>
<a-col span="24">
<a-form-item required label="职位性质">
<!-- <a-date-picker v-model:value="addOtherForm.daoqi_date" @Change="disabledDateChange"
style="width: 100%;" /> -->
<a-form-item label="职位性质">
<a-radio-group v-model:value="createForm.member_type" button-style="solid">
<a-radio-button :value="1">全职</a-radio-button>
<a-radio-button :value="2">兼职</a-radio-button>
<a-radio-button :value="3">临时</a-radio-button>
<a-radio-button :value="4">实习</a-radio-button>
<a-radio-button :value="5">校园招聘</a-radio-button>
</a-radio-group>
</a-form-item>
</a-col>
<!-- <a-col span="24">
<a-form-item label="是否全职" name="fulltime">
<a-radio-group v-model:value="createForm.fulltime" button-style="solid">
<a-radio-button :value="1">是</a-radio-button>
<a-radio-button :value="2">否</a-radio-button>
</a-radio-group>
</a-form-item>
</a-col>
<a-col span="24">
<a-form-item label="是否兼职" name="parttime">
<a-radio-group v-model:value="createForm.parttime" button-style="solid">
<a-radio-button :value="1">是</a-radio-button>
<a-radio-button :value="2">否</a-radio-button>
</a-radio-group>
</a-form-item>
</a-col>
<a-col span="24">
<a-form-item label="是否临时" name="casual">
<a-radio-group v-model:value="createForm.casual" button-style="solid">
<a-radio-button :value="1">是</a-radio-button>
<a-radio-button :value="2">否</a-radio-button>
</a-radio-group>
</a-form-item>
</a-col>
<a-col span="24">
<a-form-item label="是否实习" name="practical">
<a-radio-group v-model:value="createForm.practical" button-style="solid">
<a-radio-button :value="1">是</a-radio-button>
<a-radio-button :value="2">否</a-radio-button>
</a-radio-group>
</a-form-item>
</a-col>
<a-col span="24">
<a-form-item label="校园招聘" name="campus">
<a-radio-group v-model:value="createForm.campus" button-style="solid">
<a-radio-button :value="1">是</a-radio-button>
<a-radio-button :value="2">否</a-radio-button>
</a-radio-group>
</a-form-item>
</a-col> -->
<a-col span="24">
<a-form-item required label="食宿要求">
<a-xuanze :dict="2016" placeholder="请选择食宿要求" @saveSelect="saveShisu"
:select_content="addOtherForm.company_scale_cascader"></a-xuanze>
<!-- <a-c-select :dict="2016" placeholder="请选择食宿要求" @saveSelect="saveShisu"></a-c-select> -->
</a-form-item>
</a-col>
<a-col span="24">
<a-form-item required label="节假日休息情况" >
<a-form-item required label="节假日休息情况">
<a-xuanze :dict="2017" placeholder="请选择节假日休息情况" @saveSelect="saveHolidays"
:select_content="addOtherForm.company_scale_cascader"></a-xuanze>
<!-- <a-c-select :dict="2017" placeholder="请选择节假日休息情况" @saveSelect="saveHolidays"></a-c-select> -->
</a-form-item>
</a-col>
@@ -104,14 +152,141 @@

<script setup lang="ts">
import { ref, onMounted, computed } from 'vue';
import { GetDictTree, PostCompanyDepartmentList } from '@/apis/models';

let createForm : companyListType.addrFormType = ref({
name: '',
company_id: 0,
urgent: 2,
name: '',
department_id: 0,
invite_count: '',
job_type: [],
job_location: [],
describe_text: '',
pay_range: 0,
key_word: '',
useful_life: 0,
disabled_date: '',
fulltime: 2,
parttime: 2,
casual: 2,
practical: 2,
campus: 2,
shisu: 0,
holidays: 0,
experience: 0,
school_degree: 0,
degree_better: 0,
profelevel: 0,
certification: 0,
language: 0,
language_degree: 0,
sex: 3,
age_min: 0,
age_max: 0,
marital_status: 3,
major: '',
license: [],
household_province: 0,
household_city: 0,
location_province: 0,
location_city: 0,
location_town: 0,
contact: '',
possession: '',
phone: '',
phone_public: 2,
mobile: '',
mobile_public: 2,
email: '',
email_public: 2,
fax: '',
fax_public: 2,
other_address: '',
interview_address: '',
})


let addOtherForm = ref<companyListType.addOtherFormType>({
company_industry1_cascader: '',
company_industry2_cascader: '',
company_industry3_cascader: '',
company_location1_cascader: '',
company_location2_cascader: '',
company_location3_cascader: '',
company_location4_cascader: '',
company_location5_cascader: '',
describe_content: '',
daoqi_date: '',
company_jiguan_cascader: '',
company_suozaidi_cascader: '',
})


let jobTypeData = ref<Object[]>([])
const jobTypeFieldNames = ref({ label: 'name', value: 'id', children: 'children' });
let jobAddressData = ref<Object[]>([])
const jobAddressFieldNames = ref({ label: 'name', value: 'id', children: 'children' });
onMounted(() => {
GetDictTree({
code: 2004
}).then(res => {
jobTypeData.value = res.data.dicts
})
GetDictTree({
code: 2009
}).then(res => {
jobAddressData.value = res.data.dicts
})
})

// 选择部门
let department_list = ref<Object[]>([])
const departmentSearch = (val) => {
PostCompanyDepartmentList({ keyword: val }).then(res => {
department_list.value = res.data.list;
})
}
const departmentChange = (val : Object) => {
createForm.value.department_id = val.key;
}
// 职位类别
const jobTypeChange = (val) => {

}
// 工作区域
const jobAddressChange = (val) => {

}
// 职位描述
const onEditorDescribeUpdate = (data) => {
createForm.value.describe_text = data
}
// 薪资范围
const savePayRange = (data) => {
createForm.value.pay_range = data.val;
}
// 到期日期
const disabledDateChange = (val) => {
createForm.value.disabled_date = dayjsRef.value(val).format('YYYY-MM-DD');
}
// 食宿要求
const saveShisu = (data) => {
createForm.value.shisu = data.val;
}
// 节假日要求
const saveHolidays = (data) => {
createForm.value.holidays = data.val;
}
</script>

<style>

+ 38
- 31
src/components/job/card/index.vue Vedi File

@@ -1,30 +1,43 @@
<template>
<div class="job-box">
<div class="job-title">
<div class="aaaa mt10">
<div>前端工程师</div>
<div>500000-7000元</div>
<template v-for="(item, index) in list">
<div class="job-box">
<div class="job-title">
<div class="aaaa mt10">
<div>前端工程师</div>
<div>500000-7000元</div>
</div>
<div>
<a-tag>Tag 1</a-tag>
<a-tag>Tag 1</a-tag>
<a-tag>Tag 1</a-tag>
<a-tag>Tag 1</a-tag>
</div>
</div>
<div>
<a-tag>Tag 1</a-tag>
<a-tag>Tag 1</a-tag>
<a-tag>Tag 1</a-tag>
<a-tag>Tag 1</a-tag>
<div class="job-company">
<div class="aaaa mt10">
<div>中山市海港城安域有限公司</div>
<div>查看更多</div>
</div>
<!-- <div>
小榄镇
</div> -->
</div>
</div>
<div class="job-company">
<div class="aaaa mt10">
<div>中山市海港城安域有限公司</div>
<div>查看更多</div>
</div>
<!-- <div>
小榄镇
</div> -->
</div>
</div>
</template>
</template>

<script>
<script setup lang="ts">
import { ref, onMounted, watch, computed } from 'vue';
import { useCommon } from '@/hooks/useCommon';
import { StarOutlined } from '@ant-design/icons-vue';
let { commomParams } = useCommon();
let props = defineProps(['list']);
const emit = defineEmits();
let list = ref<Object[]>([])
watch(() => [props.list], (newVal) => {
console.log(newVal[0])
list.value = newVal[0]
})
</script>

<style lang="less" scoped>
@@ -34,19 +47,21 @@
justify-content: space-around;
// align-items: center;
width: 100%;
.job-title {
padding: 20px;
background-color: #ffffff;

.aaaa {
display: flex;
justify-content: space-between;
}
}
.job-company {
padding: 20px;
background-color: #cccccc;

.aaaa {
display: flex;
justify-content: space-between;
@@ -58,12 +73,4 @@
.mt10 {
margin-bottom: 10px;
}


</style>

+ 14
- 9
src/components/job/swiper/index.vue Vedi File

@@ -102,11 +102,8 @@
store.commit('setShowLoginBox', {
showLoginBox: false
})
store.commit('getRoleName', {
roleName: 'company'
})
sessionStorage.setItem('role', 'company')
sessionStorage.setItem('token', 'admin')
sessionStorage.setItem('role', 'company')
store.commit('permissions/SET_PERMISSION', null)
store.commit('permissions/SET_MENU', [])
router.push('/manage/home')
@@ -121,8 +118,8 @@
// 企业登录
let loginForm = ref<Object>({
username: "",
password: "",
username: "13602882703",
password: "123456789",
cpt_id: "",
captcha: ""
})
@@ -134,11 +131,19 @@
store.commit('setShowLoginBox', {
showLoginBox: false
})
store.commit('getRoleName', {
roleName: 'company'
store.commit('getToken', {
token: res.data.jwttoken.accesstoken
})
store.commit('getRole', {
role: 'company'
})
store.commit('getPageType', {
pageType: 'company'
})
sessionStorage.setItem('role', 'company')
sessionStorage.setItem('token', res.data.jwttoken.accesstoken)
sessionStorage.setItem('role', 'company')
sessionStorage.setItem('pageType', 'company')
sessionStorage.setItem('id', res.data.company_id)
store.commit('permissions/SET_PERMISSION', null)
store.commit('permissions/SET_MENU', [])
router.push('/manage/home')

+ 93
- 69
src/components/job/talents/index.vue Vedi File

@@ -1,79 +1,103 @@
<template>
<div class="talent-box">
<a-list item-layout="vertical">
<a-list-item>
<a-list-item-meta>
<template #title>
人才
</template>
<template #description>
<div>
Text
<a-divider type="vertical" />
<a href="#">Link</a>
<a-divider type="vertical" />
<a href="#">Link</a>
<a-row :gutter="[10,10]">
<a-col span="12" v-for="(item, index) in list">
<div class="talent-box">
<a-list item-layout="vertical">
<a-list-item>
<a-list-item-meta>
<template #title>
{{item.seekername}}
</template>
<template #description>
<div>
{{item.gender}}
<a-divider type="vertical" />
{{item.education_text}}
<a-divider type="vertical" />
{{item.now_level1_text}}{{item.now_level2_text}}
</div>
</template>
<template #avatar>
<a-avatar src="https://zos.alipayobjects.com/rmsportal/ODTLcjxAfvqbxHnVXCYX.png"
:size="48" />
</template>
</a-list-item-meta>
<div style="margin-left: 64px; overflow: hidden;
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
text-overflow: ellipsis;">
<div v-html="item.introduction"></div>
</div>
</template>
<template #avatar>
<a-avatar src="https://zos.alipayobjects.com/rmsportal/ODTLcjxAfvqbxHnVXCYX.png" :size="48" />
</template>
</a-list-item-meta>
<div style="margin-left: 64px;">
1、我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我
</div>
</a-list-item>
</a-list>
<!-- <a-list item-layout="horizontal" :split="false" position="bottom">
<a-list-item>
<template #actions>
<a-button>
<StarOutlined />
收藏
</a-button>
<a-button>
投简历
</a-button>
</template>
<a-list-item-meta>
<template #title>
人才
</template>
<template #description>
<div>
Text
<a-divider type="vertical" />
<a href="#">Link</a>
<a-divider type="vertical" />
<a href="#">Link</a>
<div>我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我</div>
</a-list-item>
</a-list>
<!-- <a-list item-layout="horizontal" :split="false" position="bottom">
<a-list-item>
<template #actions>
<a-button>
<StarOutlined />
收藏
</a-button>
<a-button>
投简历
</a-button>
</template>
<a-list-item-meta>
<template #title>
人才
</template>
<template #description>
<div>
Text
<a-divider type="vertical" />
<a href="#">Link</a>
<a-divider type="vertical" />
<a href="#">Link</a>
<div>我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我</div>
</div>
</template>
<template #avatar>
<a-avatar src="https://zos.alipayobjects.com/rmsportal/ODTLcjxAfvqbxHnVXCYX.png" :size="48" />
</template>
</a-list-item-meta>
<div style="width: 30%;">
<a-row>
<a-col span="24">
地点:广东省,中山市
</a-col>
<a-col span="24">
期望:环境更加环境更加环境更加环境更
</a-col>
<a-col span="24">
时间:2023-12-19
</a-col>
</a-row>
</div>
</template>
<template #avatar>
<a-avatar src="https://zos.alipayobjects.com/rmsportal/ODTLcjxAfvqbxHnVXCYX.png" :size="48" />
</template>
</a-list-item-meta>
<div style="width: 30%;">
<a-row>
<a-col span="24">
地点:广东省,中山市
</a-col>
<a-col span="24">
期望:环境更加环境更加环境更加环境更
</a-col>
<a-col span="24">
时间:2023-12-19
</a-col>
</a-row>
</div>
</a-list-item>
</a-list> -->
</div>
</a-list-item>
</a-list> -->
</div>
</a-col>
<a-col span="24">
<div style="display: flex;align-items: center;justify-content: center;padding: 30px;font-size: 24px;">查看更多
</div>
</a-col>
</a-row>

</template>

<script setup lang="ts">
import { ref, onMounted, watch, computed } from 'vue';
import { useCommon } from '@/hooks/useCommon';
import { StarOutlined } from '@ant-design/icons-vue';
let { commomParams } = useCommon();
let props = defineProps(['list']);
const emit = defineEmits();
let list = ref<Object[]>([])
watch(() => [props.list], (newVal) => {
console.log(newVal[0])
list.value = newVal[0]
})
</script>

<style scoped lang="less">

+ 142
- 96
src/components/layout/header/aHeader.vue Vedi File

@@ -9,97 +9,103 @@
<a-top-menu></a-top-menu>
</a-col>
<a-col span="4">
<div class="login-label" @click="toLogin">
<template v-if="logined == 'company'">
<a-dropdown placement="bottomRight">
<template #overlay>
<a-menu @click="handleMenuClick">
<a-menu-item key="1">
<a-space :size="80">
<div>发布中</div>
<div>0分</div>
</a-space>
</a-menu-item>
<a-menu-item key="2">
<a-space :size="80">
<div>未查看</div>
<div>1000分</div>
</a-space>
</a-menu-item>
<a-menu-item key="3">
<a-space :size="80">
<div>管理中心</div>
</a-space>
</a-menu-item>
<a-menu-item key="3">
<a-space :size="80">
<div>职位管理</div>
</a-space>
</a-menu-item>
<a-menu-item key="3">
<a-space :size="80">
<div>简历管理</div>
</a-space>
</a-menu-item>
<a-menu-item key="3">
<a-space :size="80">
<div @click="quit">安全退出</div>
</a-space>
</a-menu-item>
</a-menu>
</template>
<a-space :size="10">
<div style="color: aliceblue;">admin</div>
<a-avatar style="color: #f56a00; background-color: #fde3cf">U</a-avatar>
</a-space>
</a-dropdown>
<div class="login-label">
<template v-if="token">
<template v-if="role == 'company'">
<a-button size="small" @click="returnHome" v-if="pageType == 'company'">返回首页</a-button>
<a-dropdown placement="bottomRight">
<template #overlay>
<a-menu @click="handleMenuClick">
<a-menu-item key="1">
<a-space :size="80">
<div>发布中</div>
<div>0分</div>
</a-space>
</a-menu-item>
<a-menu-item key="2">
<a-space :size="80">
<div>未查看</div>
<div>1000分</div>
</a-space>
</a-menu-item>
<a-menu-item key="3" v-if="pageType != 'company'">
<a-space :size="80">
<div>管理中心</div>
</a-space>
</a-menu-item>
<a-menu-item key="4">
<a-space :size="80">
<div>职位管理</div>
</a-space>
</a-menu-item>
<a-menu-item key="5">
<a-space :size="80">
<div>简历管理</div>
</a-space>
</a-menu-item>
<a-menu-item key="6">
<a-space :size="80">
<div @click="quit">安全退出</div>
</a-space>
</a-menu-item>
</a-menu>
</template>
<a-space :size="10">
<div style="color: aliceblue;">admin</div>
<a-avatar style="color: #f56a00; background-color: #fde3cf">U</a-avatar>
</a-space>
</a-dropdown>
</template>
<template v-else-if="role == 'personal'">
<a-button size="small" @click="returnHome" v-if="pageType == 'company'">返回首页</a-button>
<a-dropdown placement="bottomRight">
<template #overlay>
<a-menu @click="handleMenuClick">
<a-menu-item key="1">
<a-space :size="80">
<div>面试通知</div>
<div>0分</div>
</a-space>
</a-menu-item>
<a-menu-item key="2">
<a-space :size="80">
<div>简历完成度</div>
<div><a-rate v-model:value="value" /></div>
</a-space>
</a-menu-item>
<a-menu-item key="3">
<a-space :size="80">
<div>管理中心</div>
</a-space>
</a-menu-item>
<a-menu-item key="4">
<a-space :size="80">
<div>修改简历</div>
</a-space>
</a-menu-item>
<a-menu-item key="5">
<a-space :size="80">
<div>搜索职位</div>
</a-space>
</a-menu-item>
<a-menu-item key="6">
<a-space :size="80">
<div>安全退出</div>
</a-space>
</a-menu-item>
</a-menu>
</template>
<a-space :size="10">
<div style="color: aliceblue;">admin</div>
<a-avatar style="color: #f56a00; background-color: #fde3cf">U</a-avatar>
</a-space>
</a-dropdown>
</template>
</template>
<template v-else-if="logined == 'personal'">
<a-dropdown placement="bottomRight">
<template #overlay>
<a-menu @click="handleMenuClick">
<a-menu-item key="1">
<a-space :size="80">
<div>面试通知</div>
<div>0分</div>
</a-space>
</a-menu-item>
<a-menu-item key="2">
<a-space :size="80">
<div>简历完成度</div>
<div><a-rate v-model:value="value" /></div>
</a-space>
</a-menu-item>
<a-menu-item key="3">
<a-space :size="80">
<div>管理中心</div>
</a-space>
</a-menu-item>
<a-menu-item key="3">
<a-space :size="80">
<div>修改简历</div>
</a-space>
</a-menu-item>
<a-menu-item key="3">
<a-space :size="80">
<div>搜索职位</div>
</a-space>
</a-menu-item>
<a-menu-item key="3">
<a-space :size="80">
<div>安全退出</div>
</a-space>
</a-menu-item>
</a-menu>
</template>
<a-space :size="10">
<div style="color: aliceblue;">admin</div>
<a-avatar style="color: #f56a00; background-color: #fde3cf">U</a-avatar>
</a-space>
</a-dropdown>
</template>
<template v-else>
登录/注册
<template v-else >
<div @click="toLogin">
登录/注册
</div>
</template>
</div>
</a-col>
@@ -113,27 +119,60 @@
import { store } from '@/store/index';
import { router } from '@/router/index';
const emit = defineEmits();
const token = computed(() => {
return store.state.token
})
const role = computed(() => {
return store.state.role
})
const pageType = computed(() => {
return store.state.pageType
})
const toLogin = () => {
store.commit('setShowLoginBox', {
showLoginBox: true
})
}
const logined = computed(() => {
return sessionStorage.getItem('role')
})
const quit = () => {
store.commit('setShowLoginBox', {
showLoginBox: true
})
store.commit('getRoleName', {
roleName: ''
})
sessionStorage.clear()
store.commit('permissions/SET_PERMISSION', null)
store.commit('permissions/SET_MENU', [])
router.push('/job/home')
}
const returnHome = () => {
store.commit('getPageType', {
pageType: ''
})
store.commit('setShowLoginBox', {
showLoginBox: false
})
sessionStorage.setItem('pageType', '')
store.commit('permissions/SET_PERMISSION', null)
store.commit('permissions/SET_MENU', [])
router.push('/job/home')
}
const handleMenuClick = (val) => {
if(val.key == 3) {
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>

<style lang="less" scoped>
@@ -146,10 +185,17 @@
}

.login-label {
width: 100%;
height: 100%;
display: flex;
align-items: center;
justify-content: flex-end;
color: #fff;
}
:deep(.ant-btn) {
margin-right: 20px !important;
}
</style>

+ 19
- 1
src/main.ts Vedi File

@@ -6,15 +6,30 @@ import { store } from './store';
import Antd from 'ant-design-vue';

import 'ant-design-vue/dist/reset.css';

import { QuillEditor } from '@vueup/vue-quill'
import '@vueup/vue-quill/dist/vue-quill.snow.css';

import CommonLeftSider from '@/components/common/left-sider.vue';
import ABiaoge from '@/components/biaoge/index.vue';
import AJilian from '@/components/form/jilian.vue';
import AXuanze from '@/components/form/xuanze.vue';
import { routesModuleList } from '@/router/dynamic';
import { routesManageModuleList } from '@/router/manageDynamic';
router.beforeEach((to, from, next) => {
document.title = `菊城人才市场后台管理`;
if (store.state.permissions.permissionList == null) {
store.commit('getToken', {
token: sessionStorage.getItem('token') ? sessionStorage.getItem('token') : ''
})
store.commit('getRole', {
role: sessionStorage.getItem('role') ? sessionStorage.getItem('role') : ''
})
store.commit('getPageType', {
pageType: sessionStorage.getItem('pageType') ? sessionStorage.getItem('pageType') : ''
})
store.commit('setShowLoginBox', {
showLoginBox: false
})
store.dispatch('permissions/FETCH_PERMISSION').then(() => {
next({
path: to.path
@@ -28,6 +43,9 @@ router.beforeEach((to, from, next) => {
const app = createApp(App);
app.component('common-left-sider', CommonLeftSider);
app.component('a-biaoge', ABiaoge);
app.component('a-jilian', AJilian);
app.component('a-xuanze', AXuanze);
app.component('QuillEditor', QuillEditor)
app.use(router);
app.use(store);
app.use(Antd);

+ 13
- 9
src/store/mutations.ts Vedi File

@@ -6,23 +6,27 @@ const setShowLoginBox = (state, payload) => {
state.showLoginBox = payload.showLoginBox;
}

const getLogined = (state, payload) => {
state.logined = payload.logined;
const getIntoRegister = (state, payload) => {
state.intoRegister = payload.intoRegister;
}

const getRoleName = (state, payload) => {
state.roleName = payload.roleName;
const getToken = (state, payload) => {
state.token = payload.token;
}

const getIntoRegister = (state, payload) => {
state.intoRegister = payload.intoRegister;
const getRole = (state, payload) => {
state.role = payload.role;
}

const getPageType = (state, payload) => {
state.pageType = payload.pageType;
}

export const mutations = {
getRouteName,
setShowLoginBox,
getLogined,
getRoleName,
getIntoRegister
getIntoRegister,
getToken,
getRole,
getPageType
}

+ 4
- 3
src/store/state.ts Vedi File

@@ -3,7 +3,8 @@ import { StateType } from './types'
export const state = <StateType>{
routeName: '',
showLoginBox: false,
logined: false,
roleName: '',
intoRegister: false
intoRegister: false,
token: '',
role: '',
pageType: ''
}

+ 4
- 3
src/store/types.ts Vedi File

@@ -1,7 +1,8 @@
export interface StateType {
routeName ?: String,
showLoginBox ?: Boolean,
logined ?: Boolean,
roleName ?: String,
intoRegister ?: Boolean
intoRegister ?: Boolean,
token ?: String,
role ?: String,
pageType ?: String
}

+ 12
- 5
src/store/usePermissionStore.ts Vedi File

@@ -24,25 +24,33 @@ const mutations = {
state.permissionList = routes
},
SET_MENU(state, menu) {
console.log(3123,menu)
state.menuList = menu
}
};

const actions = {
async FETCH_PERMISSION({
commit
commit,rootState
}) {
try {
// let res = await LOGIN.permissions();
// let arr = res.data.data;
if(sessionStorage.getItem('role') === 'company') {
console.log(rootState)
if(rootState.token && rootState.role === 'company' && rootState.pageType == 'company' ) {
LayoutRoute.children = [];
commit('SET_MENU', []);
commit('SET_PERMISSION', null);
LayoutRoute.children = routesManageModuleList;
commit('SET_MENU', LayoutRoute.children);
console.log(...routesManageModuleList)
routerAdd(LayoutRoute);
let initialRoutes = routerInit();
commit('SET_PERMISSION', [...initialRoutes]);
} else if(rootState.token && rootState.role === 'personal' && rootState.pageType == 'personal'){
LayoutRoute.children = [];
commit('SET_MENU', []);
commit('SET_PERMISSION', null);
LayoutRoute.children = routesModuleList;
commit('SET_MENU', LayoutRoute.children);
routerAdd(LayoutRoute);
let initialRoutes = routerInit();
commit('SET_PERMISSION', [...initialRoutes]);
@@ -52,7 +60,6 @@ const actions = {
commit('SET_PERMISSION', null);
LayoutRoute.children = routesModuleList;
commit('SET_MENU', LayoutRoute.children);
console.log(LayoutRoute.children)
routerAdd(LayoutRoute);
let initialRoutes = routerInit();
commit('SET_PERMISSION', [...initialRoutes]);

+ 44
- 27
src/views/job/personal/index.vue Vedi File

@@ -8,11 +8,11 @@
<a-list-item>
<a-list-item-meta>
<template #title>
广东省高新技术企业发展有限公司
{{companyDetail.full_name}}
</template>
<template #description>
<div>
企业编号: 123445
企业编号:{{companyDetail.id}}
</div>
</template>
</a-list-item-meta>
@@ -22,39 +22,43 @@
<a-tabs v-model:activeKey="activeKey">
<a-tab-pane key="1" tab="企业信息">
<div style="margin: 20px 0; padding: 20px;background-color: #ffffff;">
企业介绍
<div v-html="companyDetail.introduction"></div>
</div>
<div style="margin: 20px 0; padding: 20px;background-color: #ffffff;">
<a-descriptions :column="6" title="公司概况" layout="vertical">
<a-descriptions-item label="所属行业" span="2">Zhou Maomao</a-descriptions-item>
<a-descriptions-item label="公司性质">1810000000</a-descriptions-item>
<a-descriptions-item label="公司规模">Hangzhou, Zhejiang</a-descriptions-item>
<a-descriptions-item label="成立时间">empty</a-descriptions-item>
</a-descriptions>
<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;">
<a-descriptions :column="6" title="联系方式" layout="vertical">
<a-descriptions-item label="联系地址" span="2">Zhou Maomao</a-descriptions-item>
<a-descriptions-item label="联系人">1810000000</a-descriptions-item>
<a-descriptions-item label="联系电话">Hangzhou, Zhejiang</a-descriptions-item>
<a-descriptions-item label="Email">empty</a-descriptions-item>
<a-descriptions-item label="传真">empty</a-descriptions-item>
</a-descriptions>
<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>
</a-tab-pane>
<a-tab-pane key="2" tab="招聘职位" force-render>
<a-row :gutter="10">
<a-col span="6">
<a-row :gutter="[10,10]">
<a-col span="24" v-for="(item, index) in companyList">
<job-card></job-card>
</a-col>
<a-col span="24" >
<a-pagination simple v-model:current="current" :total="50" />
<a-col span="24" v-for="(item, index) in companyList">
<job-card :list="jobList"></job-card>
</a-col>
</a-row>
<a-col span="24">
<a-pagination simple v-model:current="current" :total="50" />
</a-col>
</a-row>
</a-col>
<a-col span="18" >
<a-col span="18">
<div style="padding: 20px;background-color: #ffffff;">
<job-detail></job-detail>
</div>
@@ -68,12 +72,25 @@

<script setup lang="ts">
import { ref, onMounted, computed, watch } from 'vue';
import JobSearch from '@/components/job/search/index.vue'
import JobList from '@/components/job/list/index.vue'
import JobInternship from '@/components/job/internship/index.vue'
import JobDetail from '@/components/job/detail/index.vue'
import JobCard from '@/components/job/card/index.vue'
let companyList = ref<object[]>([{}, {}, {}])
import { PostCompanyInfo, PostCompanyJobList } from '@/apis/models';
let companyDetail = ref<object>({})
let jobList = ref<object[]>([])

onMounted(() => {
PostCompanyInfo({ id: sessionStorage.getItem('id') }).then(res => {
companyDetail.value = res.data
})

PostCompanyJobList().then(res => {
if (res.data.list.length > 3) {
jobList.value = res.data.list.slice(0, 3)
} else {
jobList.value = res.data.list
}
})
})
</script>

<style scoped lang="less">

+ 18
- 3
src/views/manage/basic/index.vue Vedi File

@@ -4,7 +4,7 @@
<a-col span="18">
<a-row>
<a-col span="4">
<common-left-sider :menu_list="menu_list" :selected_key="[1]" @changeKey="changeKey"></common-left-sider>
<common-left-sider :menu_list="menu_list" :selected_key="[1]" @changeKey="changeKey" @click="clickMenu"></common-left-sider>
</a-col>
<a-col span="20">
<div style="width: 100%;background-color: #fff;padding: 10px;">
@@ -26,13 +26,28 @@
import CompanyDepartment from '@/components/company/department/index.vue'
import CompanyLicence from '@/components/company/licence/index.vue'
import CompanyImage from '@/components/company/image/index.vue'
import { store } from '@/store';
import { useMenu } from '@/hooks/useMenu';
let { onMenu, routerCur, routerArrayCur, routerArrayParentChildCur } = useMenu();
let companyList = ref<object[]>([{}, {}, {}, {}, {}, {}])
let menu_list = ref([{name: '基本资料',key: 1},{name: '部门管理',key: 2},{name: '上传营业执照',key: 3},{name: '上传企业图片',key: 4},{name: '资料预览',key:5},{name: '联系方式',key: 6}])
let menu_list = ref([{name: '基本资料',key: 1},{name: '部门管理',key: 2},{name: '上传营业执照',key: 3},{name: '上传企业图片',key: 4},{name: '资料预览',key:5}])
let curKey = ref<Number>(1)
const changeKey = (data) => {
curKey.value = data.key;
}
console.log(1233232)
const clickMenu = (val) => {
if(val.key === 5) {
store.commit('getPageType', {
pageType: ''
})
sessionStorage.setItem('pageType', '')
store.commit('permissions/SET_PERMISSION', null)
store.commit('permissions/SET_MENU', [])
onMenu('/personal')
}
}
</script>

<style>

+ 12
- 11
src/views/manage/home/index.vue Vedi File

@@ -39,14 +39,7 @@
<div style="width: 100%">
推荐简历
</div>
<a-row :gutter="[10,10]">
<a-col span="12" v-for="(item, index) in companyList">
<job-talents></job-talents>
</a-col>
<a-col span="24">
<div style="display: flex;align-items: center;justify-content: center;padding: 30px;font-size: 24px;">查看更多</div>
</a-col>
</a-row>
<job-talents :list="jobList"></job-talents>
</a-col>
</a-row>
</div>
@@ -56,14 +49,22 @@
<script setup lang="ts">
import { ref, computed, onMounted } from 'vue';
import JobTalents from '@/components/job/talents/index.vue'
import { PostCompanyProfile } from '@/apis/models';
let companyList = ref<object[]>([{}, {}, {}, {}, {}, {}])
console.log(1233232)
import { PostCompanyProfile, GetCompanyRecommentResume } from '@/apis/models';
let jobList = ref<object[]>([])
let basic = ref<Object>({})
onMounted(() => {
PostCompanyProfile().then(res => {
basic.value = res.data
})
GetCompanyRecommentResume().then(res => {
if (res.data.list.length > 10) {
jobList.value = res.data.list.slice(0, 10)
} else {
jobList.value = res.data.list
}
})
})
</script>


Loading…
Annulla
Salva