提交 6f134595 authored 作者: 赵世杰's avatar 赵世杰

1

上级 03448a8c
...@@ -23,4 +23,12 @@ export function orgSave(query) { ...@@ -23,4 +23,12 @@ export function orgSave(query) {
method: 'post', method: 'post',
data: query data: query
}) })
}
export function uploadOrg(query) {
return request({
url: '/public/import/recruit/upload/51job/org/json',
method: 'post',
data: query
})
} }
\ No newline at end of file
...@@ -24,6 +24,13 @@ export function recruitSave(query) { ...@@ -24,6 +24,13 @@ export function recruitSave(query) {
data: query data: query
}) })
} }
export function uploadRecruit(query) {
return request({
url: '/public/import/recruit/upload/51job/json',
method: 'post',
data: query
})
}
// 招聘类型 // 招聘类型
export function recruitTypeAll(query) { export function recruitTypeAll(query) {
return request({ return request({
......
...@@ -18,6 +18,14 @@ ...@@ -18,6 +18,14 @@
icon="Plus" icon="Plus"
>新增</el-button> >新增</el-button>
</el-col> </el-col>
<el-col :span="1.5">
<el-button
type="primary"
plain
@click="open2 = true;openForm = {regionCode: '610100'};"
icon="upload"
>批量上传企业</el-button>
</el-col>
</el-row> </el-row>
<el-table v-loading="loading" :data="list" show-overflow-tooltip style="width: 100%;"> <el-table v-loading="loading" :data="list" show-overflow-tooltip style="width: 100%;">
<el-table-column label="企业名称" prop="name" /> <el-table-column label="企业名称" prop="name" />
...@@ -57,7 +65,7 @@ ...@@ -57,7 +65,7 @@
v-model:limit="queryParams.pageSize" @pagination="getList" /> v-model:limit="queryParams.pageSize" @pagination="getList" />
<!-- 添加或修改账号问答框 --> <!-- 添加或修改账号问答框 -->
<el-dialog title="新增企业" v-model="open" width="480px" append-to-body :close-on-click-modal="false"> <el-dialog title="新增企业" v-model="open" width="480px" append-to-body :close-on-click-modal="false">
<el-form label-width="100px" style="padding-right: 15px;" ref="addRef" :model="openForm" :rules="rules"> <el-form label-width="100px" style="padding-right: 15px;" ref="addRef" :model="openForm" :rules="rules" v-if="open">
<el-form-item label="企业名称" prop="name"> <el-form-item label="企业名称" prop="name">
<el-input v-model="openForm.name" placeholder="请输入"/> <el-input v-model="openForm.name" placeholder="请输入"/>
</el-form-item> </el-form-item>
...@@ -79,17 +87,6 @@ ...@@ -79,17 +87,6 @@
<el-form-item label="企业介绍" prop="descr"> <el-form-item label="企业介绍" prop="descr">
<el-input v-model="openForm.descr" placeholder="请输入" type="textarea" rows="3"/> <el-input v-model="openForm.descr" placeholder="请输入" type="textarea" rows="3"/>
</el-form-item> </el-form-item>
<!-- <el-form-item label="企业LOGO" prop="logo">
<div>
<el-button type="primary" @click="$refs.fileInput.click()">上传图片</el-button>
<el-image
style="width: 100px;display: block;margin-top: 10px;"
v-if="openForm.logo"
:src="openForm.logo"
/>
</div>
<input type="file" ref="fileInput" @change="handleFileChange" style="display: none;" accept='image/*' />
</el-form-item> -->
</el-form> </el-form>
<template #footer> <template #footer>
<div class="dialog-footer"> <div class="dialog-footer">
...@@ -98,11 +95,47 @@ ...@@ -98,11 +95,47 @@
</div> </div>
</template> </template>
</el-dialog> </el-dialog>
<!-- 添加或修改账号问答框 -->
<el-dialog title="上传企业" v-model="open2" width="480px" append-to-body :close-on-click-modal="false">
<el-form label-width="100px" style="padding-right: 15px;" ref="addRef" :model="openForm" :rules="rules" v-if="open2">
<el-form-item label="行政编码" prop="regionCode">
<el-input v-model="openForm.regionCode" placeholder="请输入"/>
</el-form-item>
<el-form-item label="地址" prop="area">
<el-cascader
v-model="openForm.area"
:options="areaList"
@change="(e)=>{console.log(e)}"
style="width: 100%"
:props="{ value: 'label' }"
/>
</el-form-item>
<el-form-item label="选择文件" prop="file">
<div style="display: flex;justify-content: space-between;align-items: center;width: 100%;">
<el-input readonly style="width: 70%;" :value="openForm.file && openForm.file.name"/>
<el-button type="primary" @click="$refs.fileInput.click()">选择文件</el-button>
<input
type="file"
ref="fileInput"
@change="handleFileChange"
style="display: none;"
accept='.txt,.json'
/>
</div>
</el-form-item>
</el-form>
<template #footer>
<div class="dialog-footer">
<el-button @click="open2 = false">取 消</el-button>
<el-button type="primary" @click="submit2">提 交</el-button>
</div>
</template>
</el-dialog>
</div> </div>
</template> </template>
<script setup> <script setup>
import { orgList,orgDel,orgSave } from "@/api/enterprise"; import { orgList,orgDel,orgSave,uploadOrg } from "@/api/enterprise";
import { ref } from "vue"; import { ref } from "vue";
import { uploadFileToOss } from "@/utils/oss"; import { uploadFileToOss } from "@/utils/oss";
import { areaList,getAreaText } from '@/utils/area.js' import { areaList,getAreaText } from '@/utils/area.js'
...@@ -114,26 +147,25 @@ const queryParams = ref({ ...@@ -114,26 +147,25 @@ const queryParams = ref({
pageNum: 1, pageNum: 1,
pageSize: 10, pageSize: 10,
}) })
const open2 = ref(false);
const open = ref(false); const open = ref(false);
const openForm = ref({ const openForm = ref({
name: '', name: '',
logo: '', logo: '',
}) })
const rules = ref({ const rules = ref({
name: [{ required: true, message: "请输入企业名称", trigger: "blur" }], name: [{ required: true, message: "请输入企业名称", trigger: ['blur', 'change'] }],
regionCode: [{ required: true, message: "请输入行政编码", trigger: "blur" }], regionCode: [{ required: true, message: "请输入行政编码", trigger:['blur', 'change'] }],
area: [{ required: true, message: "请选择地址", trigger: "blur" }], area: [{ required: true, message: "请选择地址", trigger: ['blur', 'change'] }],
address: [{ required: true, message: "请输入详细地址", trigger: "blur" }], address: [{ required: true, message: "请输入详细地址", trigger: ['blur', 'change'] }],
descr: [{ required: true, message: "请输入企业介绍", trigger: "blur" }], descr: [{ required: true, message: "请输入企业介绍", trigger:['blur', 'change'] }],
logo: [{ required: true, message: "请上传logo", trigger: "blur" }] logo: [{ required: true, message: "请上传logo", trigger: ['blur', 'change'] }],
file: [{ required: true, message: "请上传文件", trigger: ['blur', 'change'] }],
}) })
// 上传文件 // 上传文件
function handleFileChange(e) { function handleFileChange(e) {
if (e.target.files.length > 0) { if (e.target.files.length > 0) {
const file = e.target.files[0]; openForm.value.file = e.target.files[0];
uploadFileToOss(file).then((url) => {
openForm.value.logo = url
});
} }
proxy.$refs.fileInput.value = null; proxy.$refs.fileInput.value = null;
} }
...@@ -163,7 +195,37 @@ function submit() { ...@@ -163,7 +195,37 @@ function submit() {
} }
}) })
} }
function submit2() {
proxy.$refs.addRef.validate(valid => {
debugger
if (valid){
const submitForm = {...openForm.value}
submitForm.province = submitForm.area[0]
submitForm.city = submitForm.area[1]
submitForm.region = submitForm.area[2]
delete submitForm.area
uploadOrg(setFormData(submitForm)).then(res => {
proxy.$modal.msgSuccess("操作成功,请等待几分钟后刷新列表查看导入结果");
open2.value = false;
})
}
})
}
const setFormData = (data) => {
const formData = new FormData()
const keys = Object.keys(data)
for(let i = 0;i<keys.length;i++) {
if (data[keys[i]]!=null&&[keys[i]]!=undefined&&data[keys[i]].constructor == Array){
// 数组参数转FormData
for(let j = 0; j < data[keys[i]].length; j++) {
formData.append(keys[i], data[keys[i]][j])
}
} else {
formData.append(keys[i], data[keys[i]])
}
}
return formData
}
/** 搜索按钮操作 */ /** 搜索按钮操作 */
function handleQuery() { function handleQuery() {
queryParams.value.pageNum = 1; queryParams.value.pageNum = 1;
......
<template>
<div class="recruitAdd">
<el-dialog title="上传岗位" v-model="dialogShow" width="1300px" @open="dialogOpen" @close="dialogClose" :close-on-click-modal="false" >
<el-form :model="form" :rules="rules" label-width="100px" style="padding-right: 40px;" ref="addRef">
<el-form-item label="职位类型" prop="industry">
<el-cascader
v-model="form.industry"
:options="industryList"
:show-all-levels="false"
@change="(e)=>{console.log(e)}"
style="width: 100%"
:disabled="form.title == '岗位详情'"
:props="{
value: 'name',
label: 'name',
children: 'chilList'
}"
/>
</el-form-item>
<el-form-item label="招聘类型" prop="recruitTypeId">
<el-select
v-model="form.recruitTypeId"
placeholder="请选择"
filterable
style="width: 100%"
:disabled="form.title == '岗位详情'"
>
<el-option
v-for="item in recruitAllList"
:key="item.id"
:label="item.name"
:value="item.id"
/>
</el-select>
</el-form-item>
<el-form-item label="学历" prop="qualificationId">
<el-select
v-model="form.qualificationId"
placeholder="请选择"
filterable
style="width: 100%"
:disabled="form.title == '岗位详情'"
>
<el-option
v-for="item in qualificationList"
:key="item.id"
:label="item.name"
:value="item.id"
/>
</el-select>
</el-form-item>
<el-form-item label="经验" prop="experienceId">
<el-select
v-model="form.experienceId"
placeholder="请选择"
filterable
style="width: 100%"
:disabled="form.title == '岗位详情'"
>
<el-option
v-for="item in experienceList"
:key="item.id"
:label="item.name"
:value="item.id"
/>
</el-select>
</el-form-item>
<el-form-item label="招聘时间" prop="time">
<el-date-picker
type="daterange"
unlink-panels
range-separator="至"
start-placeholder="开始时间"
end-placeholder="结束时间"
v-model="form.time"
value-format="YYYYMMDD"
:disabled="form.title == '岗位详情'"
/>
</el-form-item>
<el-form-item label="招聘人数" prop="times">
<el-input-number
v-model="form.times"
step="1"
placeholder="请输入"
step-strictly
:min="1"
:controls="false"
style="width: 100%;"
:disabled="form.title == '岗位详情'"
/>
</el-form-item>
<el-form-item label="薪资待遇" prop="payTimes">
<el-select
v-model="form.payTimes"
placeholder="请选择"
filterable
style="width: 100%"
:disabled="form.title == '岗位详情'"
>
<el-option
v-for="item in payTimeList"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
<el-form-item label="地址" prop="area">
<el-cascader
v-model="form.area"
:options="areaList"
@change="(e)=>{console.log(e)}"
style="width: 100%"
:props="{ value: 'label' }"
:disabled="form.title == '岗位详情'"
/>
</el-form-item>
<el-form-item label="行政编码" prop="regionCode">
<el-input v-model="form.regionCode" placeholder="请输入"/>
</el-form-item>
<el-form-item label="选择文件" prop="file">
<div style="display: flex;justify-content: space-between;align-items: center;width: 100%;">
<el-input readonly style="width: 70%;" :value="form.file && form.file.name"/>
<el-button type="primary" @click="$refs.fileInput.click()">选择文件</el-button>
<input
type="file"
ref="fileInput"
@change="handleFileChange"
style="display: none;"
accept='.txt,.json'
/>
</div>
</el-form-item>
<el-form-item />
</el-form>
<template #footer>
<span class="dialog-footer" style="text-align: center;width: 100%;display: block;">
<el-button @click="calcel" v-if="form.title != '岗位详情'">取 消</el-button>
<el-button type="primary" @click="calcel" v-if="form.title == '岗位详情'">关 闭</el-button>
<el-button type="primary" @click="submit" v-if="form.title != '岗位详情'">提交</el-button>
</span>
</template>
</el-dialog>
</div>
</template>
<script setup>
import { uploadRecruit } from "@/api/recruit";
import { areaList,getAreaText } from '@/utils/area.js'
import {
ref,
defineProps,
computed,
defineEmits,
} from "vue";
const { proxy } = getCurrentInstance();
const form = ref({});
const rules = ref({
industry: [{ required: true, message: "请输入职位类型", trigger: ['blur', 'change'] }],
recruitTypeId: [{ required: true, message: "请选择招聘类型", trigger: ['blur', 'change'] }],
qualificationId: [{ required: true, message: "请选择学历", trigger: ['blur', 'change'] }],
experienceId: [{ required: true, message: "请选择经验", trigger: ['blur', 'change'] }],
time: [{ required: true, message: "请选择招聘时间", trigger: ['blur', 'change'] }],
times: [{ required: true, message: "请输入招聘人数", trigger: ['blur', 'change'] }],
area: [{ required: true, message: "请选择地址", trigger: ['blur', 'change'] }],
address: [{ required: true, message: "请输入详细地址", trigger: ['blur', 'change'] }],
industryId: [{ required: true, message: "请选择职位类型", trigger: ['blur', 'change'] }],
file: [{ required: true, message: "请选择文件", trigger: ['blur', 'change'] }],
})
const salaryMinList = ref([
{value: "1000", label: "1000"},
{value: "2000", label: "2000"},
{value: "3000", label: "3000"},
{value: "4000", label: "4000"},
{value: "5000", label: "5000"},
{value: "6000", label: "6000"},
{value: "7000", label: "7000"},
{value: "8000", label: "8000"},
{value: "9000", label: "9000"},
{value: "10000", label: "10000"},
{value: "11000", label: "11000"},
{value: "12000", label: "12000"},
{value: "13000", label: "13000"},
{value: "14000", label: "14000"},
{value: "15000", label: "15000"},
{value: "16000", label: "16000"},
{value: "17000", label: "17000"},
{value: "18000", label: "18000"},
{value: "19000", label: "19000"},
{value: "20000", label: "20000"},
{value: "21000", label: "21000"},
{value: "22000", label: "22000"},
{value: "23000", label: "23000"},
{value: "24000", label: "24000"},
{value: "25000", label: "25000"},
{value: "26000", label: "26000"},
{value: "27000", label: "27000"},
{value: "28000", label: "28000"},
{value: "29000", label: "29000"}
])
const salaryMaxList = ref([])
const payTimeList = ref([
{value: 12, label: "12薪"},
{value: 13, label: "13薪"},
{value: 14, label: "14薪"},
{value: 15, label: "15薪"},
{value: 16, label: "16薪"},
{value: 17, label: "17薪"},
{value: 18, label: "18薪"},
{value: 19, label: "19薪"},
{value: 20, label: "20薪"},
{value: 21, label: "21薪"},
{value: 22, label: "22薪"},
{value: 23, label: "23薪"},
{value: 24, label: "24薪"},
])
const props = defineProps(["selectOp","addVisible","detailInfo","selectOp"]);
let { recruitAllList,experienceList,qualificationList,orgList,industryList } = props.selectOp;
watch(() => props.selectOp, (newValue, oldValue) => {
recruitAllList = props.selectOp.recruitAllList;
experienceList = props.selectOp.experienceList;
qualificationList = props.selectOp.qualificationList;
orgList = props.selectOp.orgList;
industryList = props.selectOp.industryList;
});
const emit = defineEmits(["changeVisible","getList"]);
const dialogShow = computed({
get: () => props.addVisible,
set: (val) => emit("changeVisible", val),
});
salaryMaxList.value = [...salaryMinList.value]
// 上传文件
function handleFileChange(e) {
if (e.target.files.length > 0) {
form.value.file = e.target.files[0];
}
proxy.$refs.fileInput.value = null;
}
function salaryMinChange(e) {
const index = salaryMinList.value.findIndex(item => item.value === e)
salaryMaxList.value = salaryMinList.value.slice(index + 1)
salaryMaxList.value.push({value: "30000", label: "30000"})
form.value.salaryMax = ''
}
function dialogClose() {
form.value = {};
proxy.$refs.addRef.resetFields()
}
function dialogOpen(){
// if (props.detailInfo.id) {
// form.value = {
// id: props.detailInfo.id,
// title: props.detailInfo.title,
// recruitTypeId: props.detailInfo.recruitTypeId,
// qualificationId: props.detailInfo.qualificationId,
// experienceId: props.detailInfo.experienceId,
// salaryMin: props.detailInfo.salaryMin,
// salaryMax: props.detailInfo.salaryMax,
// payTimes: props.detailInfo.payTimes,
// bonus: props.detailInfo.bonus,
// address: props.detailInfo.address,
// industry: [props.detailInfo.oneIndustryName,props.detailInfo.towIndustryName,props.detailInfo.industryName],
// area: [props.detailInfo.province,props.detailInfo.city,props.detailInfo.region],
// times: props.detailInfo.times,
// time: [props.detailInfo.startDate, props.detailInfo.expiredDate]
// }
// } else {
form.value.regionCode = '610100'
// }
}
function calcel() {
dialogShow.value = false;
}
function submit() {
proxy.$refs.addRef.validate(valid => {
if (!valid) return;
const submitForm = {...form.value}
submitForm.recruitType = recruitAllList.find(item => item.id == submitForm.recruitTypeId).name
submitForm.experience = experienceList.find(item => item.id == submitForm.experienceId).name
submitForm.experienceCode = experienceList.find(item => item.id == submitForm.experienceId).code
submitForm.qualification = qualificationList.find(item => item.id == submitForm.qualificationId).name
submitForm.qualificationCode = qualificationList.find(item => item.id == submitForm.qualificationId).code
// 职位类型start
submitForm.oneIndustryName = submitForm.industry[0]
submitForm.towIndustryName = submitForm.industry[1]
submitForm.industryName = submitForm.industry[2]
let v1 = industryList.find(item => item.name == submitForm.industry[0])
let v2 = v1.chilList.find(item => item.name == submitForm.industry[1])
submitForm.industryCode = v2.chilList.find(item => item.name == submitForm.industry[2]).code
delete submitForm.industry
// 职位类型end
submitForm.province = submitForm.area[0]
submitForm.city = submitForm.area[1]
submitForm.region = submitForm.area[2]
delete submitForm.area
if (submitForm.time.length == 2) {
submitForm.startDate = submitForm.time[0]
submitForm.expiredDate = submitForm.time[1]
}
delete submitForm.time;
uploadRecruit(setFormData(submitForm)).then(res => {
if(res.isSuccess) {
calcel()
proxy.$modal.msgSuccess(res.code);
emit("getList");
}
})
});
}
const setFormData = (data) => {
const formData = new FormData()
const keys = Object.keys(data)
for(let i = 0;i<keys.length;i++) {
if (data[keys[i]]!=null&&[keys[i]]!=undefined&&data[keys[i]].constructor == Array){
// 数组参数转FormData
for(let j = 0; j < data[keys[i]].length; j++) {
formData.append(keys[i], data[keys[i]][j])
}
} else {
formData.append(keys[i], data[keys[i]])
}
}
return formData
}
</script>
<style lang="scss">
.recruitAdd{
.el-form{
display: flex;
flex-wrap: wrap;
justify-content: space-between;
.el-form-item{
width: 33%;
}
.el-form-item.w100{
width: 100%;
}
}
.el-input-number{
width: 100%;
.el-input__wrapper{
padding: 1px 11px ;
.el-input__inner{
text-align: left;
width: 100%;
}
}
}
.f_b {
display: flex;
justify-content: space-between;
align-items: center;
width: 100%;
}
.salary{
.el-select{
width: 30%;
}
}
}
</style>
...@@ -78,6 +78,14 @@ ...@@ -78,6 +78,14 @@
@click="visibleOpenpay = true; detailInfo = {}" @click="visibleOpenpay = true; detailInfo = {}"
>新增</el-button> >新增</el-button>
</el-col> </el-col>
<el-col :span="1.5">
<el-button
type="primary"
plain
icon="Plus"
@click="visibleOpenpay2 = true; detailInfo = {}"
>批量上传岗位</el-button>
</el-col>
</el-row> </el-row>
<el-table v-loading="loading" :data="list" show-overflow-tooltip> <el-table v-loading="loading" :data="list" show-overflow-tooltip>
<el-table-column label="招聘企业" prop="orgName" /> <el-table-column label="招聘企业" prop="orgName" />
...@@ -123,6 +131,19 @@ ...@@ -123,6 +131,19 @@
industryList industryList
}" }"
/> />
<Add2
:addVisible="visibleOpenpay2"
@changeVisible="visibleOpenpay2 = false"
@getList="getList"
:detailInfo="detailInfo"
:selectOp="{
recruitAllList,
experienceList,
qualificationList,
orgList,
industryList
}"
/>
</div> </div>
</template> </template>
...@@ -130,6 +151,7 @@ ...@@ -130,6 +151,7 @@
import { recruitList,recruitDel,recruitTypeAll,experienceAll,qualificationAll,orgListAll,industryListAll,recruitStatus } from "@/api/recruit"; import { recruitList,recruitDel,recruitTypeAll,experienceAll,qualificationAll,orgListAll,industryListAll,recruitStatus } from "@/api/recruit";
import { ref } from "vue"; import { ref } from "vue";
import Add from "./add.vue"; import Add from "./add.vue";
import Add2 from "./add2.vue";
const { proxy } = getCurrentInstance(); const { proxy } = getCurrentInstance();
const list = ref([]); const list = ref([]);
const loading = ref(false); const loading = ref(false);
...@@ -140,6 +162,7 @@ const queryParams = ref({ ...@@ -140,6 +162,7 @@ const queryParams = ref({
}) })
const recruitAllList = ref([]) const recruitAllList = ref([])
const experienceList = ref([]) const experienceList = ref([])
const visibleOpenpay2 = ref(false)
const qualificationList = ref([]) const qualificationList = ref([])
const orgList = ref([]) const orgList = ref([])
const industryList = ref([]) const industryList = ref([])
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论