招聘会

parent a61f8e84
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
"files.eol": "\n", "files.eol": "\n",
"typescript.tsdk": "node_modules/typescript/lib", "typescript.tsdk": "node_modules/typescript/lib",
"[vue]": { "[vue]": {
"editor.defaultFormatter": "esbenp.prettier-vscode" "editor.defaultFormatter": "octref.vetur"
}, },
"[typescript]": { "[typescript]": {
"editor.defaultFormatter": "esbenp.prettier-vscode" "editor.defaultFormatter": "esbenp.prettier-vscode"
......
...@@ -8,7 +8,7 @@ export const getArticleDetailApi = id => instance.post(`/article/detail/${id}`); ...@@ -8,7 +8,7 @@ export const getArticleDetailApi = id => instance.post(`/article/detail/${id}`);
export const getArticleTypesApi = type => instance.post(`/article/category/list/${type}`); export const getArticleTypesApi = type => instance.post(`/article/category/list/${type}`);
//招聘会报名状态 //招聘会报名状态
export const registerStatus = articleId => instance.post(`/jobFair/register/status/${articleId}`); export const registerStatus = articleId => instance.post(`/article/jobFair/check/${articleId}`);
// 参加招聘会 // 参加招聘会
......
...@@ -49,6 +49,10 @@ export const companyReviewInfo = params => instance.post("/b/company/review/info ...@@ -49,6 +49,10 @@ export const companyReviewInfo = params => instance.post("/b/company/review/info
export const companyReviewUpdate = params => instance.post("/b/company/review/update", params); export const companyReviewUpdate = params => instance.post("/b/company/review/update", params);
//职位列表 //职位列表
export const positionList = params => instance.post("/b/position/list", params); export const positionList = params => instance.post("/b/position/list", params);
//批量创建岗位
export const positionAddList = params => instance.post("/b/position/addList", params);
//批量更新职位
export const positionuUdateList = params => instance.post("/b/position/updateList", params);
//根据id获取反馈信息 //根据id获取反馈信息
export const feedbackById = params => instance.post(`/feedback/${params}`); export const feedbackById = params => instance.post(`/feedback/${params}`);
...@@ -39,6 +39,7 @@ const iconPath = new URL(`../../static/image/icon/${props.icon}.png`, import.met ...@@ -39,6 +39,7 @@ const iconPath = new URL(`../../static/image/icon/${props.icon}.png`, import.met
font-size: 32rpx; font-size: 32rpx;
font-weight: 600; font-weight: 600;
line-height: 36rpx; line-height: 36rpx;
white-space: nowrap;
} }
.icon { .icon {
position: absolute; position: absolute;
......
...@@ -26,10 +26,14 @@ ...@@ -26,10 +26,14 @@
placeholder placeholder
safeAreaInsetBottom safeAreaInsetBottom
> >
<wd-button @tap="next" :disabled="data.bmStutas || !data.bm" round="false" class="foot-btn">{{ <!-- <wd-button @tap="next" :disabled="data.bmStutas || !data.bm" round="false" class="foot-btn">{{
!data.bmStutas && data.bm ? "立即报名" : data.bmStutas ? "已报名" : "报名结束" !data.bmStutas && data.bm ? "立即报名" : data.bmStutas ? "已报名" : "报名结束"
}}</wd-button> -->
<wd-button @tap="next" :disabled="!data.bm" round="false" class="foot-btn">{{
data.bm ? "立即报名" : "报名结束"
}}</wd-button> }}</wd-button>
</wd-tabbar> </wd-tabbar>
<wd-action-sheet v-model="show" :actions="actions" @close="close" @select="select" />
</div> </div>
</template> </template>
...@@ -39,6 +43,15 @@ import evn from "@/utils/config.js"; ...@@ -39,6 +43,15 @@ import evn from "@/utils/config.js";
import { ref } from "vue"; import { ref } from "vue";
import dayjs from "dayjs"; import dayjs from "dayjs";
const data = ref({}); const data = ref({});
const show = ref(false);
const actions = ref([
{
name: "更新岗位"
},
{
name: "新增岗位"
}
]);
let articleId = ref(null); let articleId = ref(null);
onLoad(({ id }) => { onLoad(({ id }) => {
articleId.value = id; articleId.value = id;
...@@ -53,12 +66,27 @@ onLoad(({ id }) => { ...@@ -53,12 +66,27 @@ onLoad(({ id }) => {
data.value.bm = false; data.value.bm = false;
} }
registerStatus(id).then(Res => { // registerStatus(id).then(Res => {
data.value.bmStutas = Res.data; // data.value.bmStutas = Res.data;
}); // });
}); });
console.log("data.value", data.value.bm, data.value.bmStutas);
}); });
function showActions() {}
function close() {
show.value = false;
}
function select({ item, index }) {
if (index == 0) {
xma.navigateTo({
url: `/pages/signUp/addPost?articleId=${articleId.value}&type=update`
});
} else {
xma.navigateTo({
url: `/pages/signUp/addPost?articleId=${articleId.value}&type=add`
});
}
}
onShow(() => { onShow(() => {
const currentTime = Date.now(); const currentTime = Date.now();
getArticleDetailApi(articleId.value).then(res => { getArticleDetailApi(articleId.value).then(res => {
...@@ -71,16 +99,14 @@ onShow(() => { ...@@ -71,16 +99,14 @@ onShow(() => {
data.value.bm = false; data.value.bm = false;
} }
registerStatus(articleId.value).then(Res => { // registerStatus(articleId.value).then(Res => {
data.value.bmStutas = Res.data; // data.value.bmStutas = Res.data;
}); // });
}); });
}); });
const form = ref();
function next() { function next() {
xma.navigateTo({ show.value = true;
url: `/pages/signUp/index?articleId=${articleId.value}`
});
} }
</script> </script>
......
<template> <template>
<div class="page"> <div class="page">
<NavBar :showIcon="true" :showTitle="true" title="岗位信息" backgroundBox="#FFFFFF"></NavBar> <NavBar :showIcon="true" :showTitle="true" title="岗位信息" backgroundBox="#FFFFFF"></NavBar>
<wd-tabs sticky :offset-top="0" v-model="tab"> <view class="from-1" v-if="pageType == 'update'">
<block v-for="item in tabList" :key="item.id"> <wd-checkbox-group v-model="value">
<wd-tab :title="item.name"> <view class="wd-cell-item" v-for="i in gwList" :key="i.id">
<view class="from-1" v-if="tab == 0"> <wd-checkbox :modelValue="i.id"></wd-checkbox>
<wd-checkbox-group v-model="value"> <view class="right">
<view class="wd-cell-item" v-for="i in gwList" :key="i.id"> <view class="position-name">{{ i.name }}</view>
<wd-checkbox :value="i"></wd-checkbox> <view class="tip">贵阳|{{ i.workDic }}{{ i.jobTypeName }}</view>
<view class="right">
<view class="position-name">{{ i.name }}</view>
<view class="tip">贵阳|{{ i.workDic }}{{ i.jobTypeName }}</view>
</view>
</view>
</wd-checkbox-group>
</view> </view>
<view v-else> </view>
<view class="from-2" v-for="(item, index) in jobForm" :key="index"> </wd-checkbox-group>
<view class="title">新增岗位信息{{ index + 1 }}</view> </view>
<selectbox <view v-else>
@update="initSalaryColumns" <view class="from-2" v-for="(item, index) in jobForm" :key="index">
:options="EnumWorkMode" <view class="title">新增岗位信息{{ index + 1 }}</view>
label-key="text" <selectbox
value-key="code" @update="initSalaryColumns"
v-model="item.workMode" :options="EnumWorkMode"
></selectbox> label-key="text"
<!-- 职位类型 --> value-key="code"
<form-row> v-model="item.workMode"
<form-item title="职位类型"> ></selectbox>
<wd-col-picker <!-- 职位类型 -->
v-model="positionTypeValue" <form-row>
:columns="columns" <form-item title="职位类型">
:column-change="columnChange" <wd-col-picker
@confirm="params => handleConfirm(params, item)" v-model="positionTypeValue"
label-key="name" :columns="columns"
value-key="id" :column-change="columnChange"
use-default-slot @confirm="params => handleConfirm(params, item)"
> label-key="name"
<view :class="`inner flex-between ${item.jobTypeName ? '' : 'placeholder'}`"> value-key="id"
{{ item.jobTypeName || "请选择职位类型" }} use-default-slot
</view> >
</wd-col-picker> <view :class="`inner flex-between ${item.jobTypeName ? '' : 'placeholder'}`">
</form-item> {{ item.jobTypeName || "请选择职位类型" }}
</form-row> </view>
<!-- 职位标题 --> </wd-col-picker>
<form-row> </form-item>
<form-item title="职位标题" icon="arrow"> </form-row>
<input type="text" v-model="item.name" placeholder="输入职位标题如“财务总监”" /> <!-- 职位标题 -->
</form-item> <form-row>
</form-row> <form-item title="职位标题" icon="arrow">
<!-- 职位描述 --> <input type="text" v-model="item.name" placeholder="输入职位标题如“财务总监”" />
<form-row> </form-item>
<form-item title="职位描述" :border="false" icon=""> </form-row>
<textarea v-model="item.positionDesc" placeholder="请输入你的职位描述"></textarea> <!-- 职位描述 -->
</form-item> <form-row>
</form-row> <form-item title="职位描述" :border="false" icon="">
<view class="transverse"> <textarea v-model="item.positionDesc" placeholder="请输入你的职位描述"></textarea>
<form-item title="职位薪资" icon=""> </form-item>
<view </form-row>
v-if="item.settlementType == 4" <view class="transverse">
:class="`inner flex-between ${item.salaryText ? '' : 'placeholder'}`" <form-item title="职位薪资" icon="">
@click="onOpen(item, index)" <view
> v-if="item.settlementType == 4"
{{ item.salaryText || "请选择月薪范围" }} :class="`inner flex-between ${item.salaryText ? '' : 'placeholder'}`"
@click="onOpen(item, index)"
>
{{ item.salaryText || "请选择月薪范围" }}
<!-- <view class="arrow"></view> --> <!-- <view class="arrow"></view> -->
<checkbox <checkbox
class="checkbox" class="checkbox"
:value="item.negotiableSalary" :value="item.negotiableSalary"
@click="onChecked(item)" @click="onChecked(item)"
:checked="item.negotiableSalary == 1" :checked="item.negotiableSalary == 1"
>面议</checkbox >面议</checkbox
> >
</view> </view>
<view <view
v-else v-else
:class="`inner flex-between ${item.salaryText ? '' : 'placeholder'}`" :class="`inner flex-between ${item.salaryText ? '' : 'placeholder'}`"
@click="onOpen(item, index)" @click="onOpen(item, index)"
> >
{{ item.salaryText || "请选择时薪范围" }} {{ item.salaryText || "请选择时薪范围" }}
<!-- <view class="arrow"></view> --> <!-- <view class="arrow"></view> -->
<checkbox <checkbox
class="checkbox" class="checkbox"
:value="item.negotiableSalary" :value="item.negotiableSalary"
@click="onChecked(item)" @click="onChecked(item)"
:checked="item.negotiableSalary == 1" :checked="item.negotiableSalary == 1"
>面议</checkbox >面议</checkbox
> >
</view> </view>
</form-item> </form-item>
<form-item title="工作地址" icon=""> <form-item title="工作地址" icon="">
<wd-col-picker <wd-col-picker
v-model="cityValue" v-model="cityValue"
:columns="cityOpstion" :columns="cityOpstion"
value-key="code" value-key="code"
label-key="name" label-key="name"
:column-change="columnChangeCity" :column-change="columnChangeCity"
@confirm="params => handleConfirmCity(params, item)" @confirm="params => handleConfirmCity(params, item)"
use-default-slot use-default-slot
> >
<p :class="{ placeholder: !item.cityText }" class="text-single"> <p :class="{ placeholder: !item.cityText }" class="text-single">
{{ item.cityText || "请选择公司所在地" }} {{ item.cityText || "请选择公司所在地" }}
</p> </p>
</wd-col-picker> </wd-col-picker>
</form-item> </form-item>
</view>
<form-item title="是否提供食宿" icon="">
<wd-radio-group v-model="item.accommodation" inline shape="dot">
<wd-radio v-for="(v, n) in radioOpstion" :value="v.code" :key="n">{{ v.text }}</wd-radio>
</wd-radio-group>
</form-item>
<form-item title="福利待遇" icon="">
<view class="welfare">
<view
v-for="(el, nl) in item.myBenefits"
:class="`t ${el.active ? 'active' : ''}`"
@tap="onChangeBenefits(el, item)"
:key="nl"
>{{ el.text }}</view
>
</view>
</form-item>
<form-item title="身份要求" icon="">
<wd-picker
:columns="identityPostion"
value-key="code"
label-key="text"
v-model="item.identityRequirement"
@confirm="params => handleConfirmIdentity(params, item)"
use-default-slot
>
<view :class="`inner flex-between ${item.identityText ? '' : 'placeholder'}`">
<view class="flex-align-center">
{{ item.identityText || "请选择身份要求" }}
</view> </view>
<form-item title="是否提供食宿" icon=""> </view>
<wd-radio-group v-model="item.accommodation" inline shape="dot"> </wd-picker>
<wd-radio v-for="(v, n) in radioOpstion" :value="v.code" :key="n">{{ v.text }}</wd-radio> </form-item>
</wd-radio-group> <view class="transverse">
</form-item> <form-item title="学历要求" icon="">
<form-item title="福利待遇" icon=""> <wd-picker
<view class="welfare"> :columns="educationPostion"
<view value-key="code"
v-for="(el, nl) in item.myBenefits" label-key="text"
:class="`t ${el.active ? 'active' : ''}`" v-model="item.educationRequirement"
@tap="onChangeBenefits(el, item)" @confirm="params => handleConfirmEducation(params, item)"
:key="nl" use-default-slot
>{{ el.text }}</view >
> <view :class="`inner flex-between ${item.educationText ? '' : 'placeholder'}`">
<view class="flex-align-center">
{{ item.educationText || "请选择学历" }}
</view> </view>
</form-item>
<form-item title="身份要求" icon="">
<wd-picker
:columns="identityPostion"
value-key="code"
label-key="text"
v-model="item.identityRequirement"
@confirm="params => handleConfirmIdentity(params, item)"
use-default-slot
>
<view :class="`inner flex-between ${item.identityText ? '' : 'placeholder'}`">
<view class="flex-align-center">
{{ item.identityText || "请选择身份要求" }}
</view>
</view>
</wd-picker>
</form-item>
<view class="transverse">
<form-item title="学历要求" icon="">
<wd-picker
:columns="educationPostion"
value-key="code"
label-key="text"
v-model="item.educationRequirement"
@confirm="params => handleConfirmEducation(params, item)"
use-default-slot
>
<view :class="`inner flex-between ${item.educationText ? '' : 'placeholder'}`">
<view class="flex-align-center">
{{ item.educationText || "请选择学历" }}
</view>
</view>
</wd-picker> </form-item
><form-item title="年龄要求" icon="">
<wd-col-picker
v-model="ageValue"
:columns="ageColumns"
:column-change="ageColumnChange"
@confirm="params => ageHandleConfirm(params, item)"
use-default-slot
>
<view :class="`inner flex-between ${item.ageText ? '' : 'placeholder'}`">
{{ item.ageText || "请选择年龄范围" }}
</view>
</wd-col-picker>
</form-item>
</view> </view>
<form-row :fill="false"> </wd-picker> </form-item
<form-item title="职业资格/技能等级证书" icon="edit"> ><form-item title="年龄要求" icon="">
<input type="text" v-model="certificateInputValue" placeholder="请填写职业资格" /> <wd-col-picker
</form-item> v-model="ageValue"
<form-item title=""> :columns="ageColumns"
<wd-picker :column-change="ageColumnChange"
:columns="levelOptions" @confirm="params => ageHandleConfirm(params, item)"
value-key="text" use-default-slot
label-key="text" >
v-model="certificateSelectValue" <view :class="`inner flex-between ${item.ageText ? '' : 'placeholder'}`">
use-default-slot {{ item.ageText || "请选择年龄范围" }}
> </view>
<view :class="`inner flex-between ${certificateSelectValue ? '' : 'placeholder'}`"> </wd-col-picker>
<view class="flex-align-center" bind:tap="onShowIdentitySelect"> </form-item>
{{ certificateSelectValue || "请选择职业资格等级" }}
</view>
</view>
</wd-picker>
</form-item>
</form-row>
</view>
</view>
</wd-tab>
</block>
<wd-popup
v-model="salaryShow"
position="bottom"
custom-style="height:40%;border-radius: 20rpx;z-index:999;"
@close="handleClose"
>
<view class="title-box"
><view></view>
<view class="title">薪资选择</view>
<wd-icon @click="handleClose" name="close" size="30rpx"></wd-icon>
</view> </view>
<wd-picker-view <form-row :fill="false">
@change="params => salaryHandleConfirm(params, item)" <form-item title="专业技术职称" icon="edit">
use-default-slot <input type="text" @input="inputMajor($event, item)" v-model="majorInputValue" placeholder="请填写职称" />
:columns="salaryColumns" </form-item>
v-if="salaryShow" <form-item title="">
v-model="salaryValue" <wd-picker
></wd-picker-view> :columns="levelOptions"
<view style="display: flex; justify-content: center; width: 100%" value-key="text"
><wd-button style="width: 80%" @click="handleClose" block :round="false">确定</wd-button></view label-key="text"
> v-model="majorSelectValue"
</wd-popup> @confirm="params => handMajoration(params, item)"
</wd-tabs> use-default-slot
>
<view :class="`inner flex-between ${majorSelectValue ? '' : 'placeholder'}`">
<view class="flex-align-center" bind:tap="onShowIdentitySelect">
{{ majorSelectValue || "请选择职业等级" }}
</view>
</view>
</wd-picker>
</form-item>
</form-row>
<form-row :fill="false">
<form-item title="职业资格/技能等级证书" icon="edit">
<input
type="text"
@input="inputLeve($event, item)"
v-model="certificateInputValue"
placeholder="请填写职业资格"
/>
</form-item>
<form-item title="">
<wd-picker
:columns="levelOptions"
value-key="text"
label-key="text"
@confirm="params => handlelevelation(params, item)"
v-model="certificateSelectValue"
use-default-slot
>
<view :class="`inner flex-between ${certificateSelectValue ? '' : 'placeholder'}`">
<view class="flex-align-center">
{{ certificateSelectValue || "请选择职业资格等级" }}
</view>
</view>
</wd-picker>
</form-item>
</form-row>
<form-item title="特种作业证" icon="edit">
<input v-model="item.specialCertificates" type="text" placeholder="请填写特种作业证" />
</form-item>
<form-row :fill="false">
<form-item title="招聘人数" icon="edit">
<input type="number" v-model="item.recruitmentNumber" placeholder="请输入招聘人数" />
</form-item>
<form-item title="联系电话" icon="edit">
<input type="number" v-model="item.contactPhone" placeholder="请输入联系电话" />
</form-item> </form-row
><form-item title="联系人" icon="edit">
<input type="text" v-model="item.contactPerson" placeholder="请输入联系人" />
</form-item>
</view>
</view>
<wd-popup
v-model="salaryShow"
position="bottom"
custom-style="height:40%;border-radius: 20rpx;z-index:999;"
@close="handleClose"
>
<view class="title-box"
><view></view>
<view class="title">薪资选择</view>
<wd-icon @click="handleClose" name="close" size="30rpx"></wd-icon>
</view>
<wd-picker-view
@change="params => salaryHandleConfirm(params, item)"
use-default-slot
:columns="salaryColumns"
v-if="salaryShow"
v-model="salaryValue"
></wd-picker-view>
<view style="display: flex; justify-content: center; width: 100%"
><wd-button style="width: 80%" @click="handleClose" block :round="false">确定</wd-button></view
>
</wd-popup>
<wd-tabbar <wd-tabbar
v-if="tab == 0" v-if="pageType == 'update'"
custom-style="display: flex;justify-content: center !important;z-index:1;" custom-style="display: flex;justify-content: center !important;z-index:1;"
fixed fixed
placeholder placeholder
safeAreaInsetBottom safeAreaInsetBottom
> >
<view class="footer"> <button class="foot-btn" @click="openMask">下一步</button></view> <view class="footer"> <button class="foot-btn" @click="submitFrom">提交报名</button></view>
</wd-tabbar> </wd-tabbar>
<wd-tabbar <wd-tabbar
v-else v-else
...@@ -232,7 +266,7 @@ ...@@ -232,7 +266,7 @@
> >
<view class="footer"> <view class="footer">
<button class="foot-btn1" @click="addPost">继续添加</button> <button class="foot-btn1" @click="addPost">继续添加</button>
<button class="foot-btn" @click="openMask">提交报名</button></view <button class="foot-btn" @click="submitFrom">提交报名</button></view
> >
</wd-tabbar> </wd-tabbar>
</div> </div>
...@@ -240,15 +274,16 @@ ...@@ -240,15 +274,16 @@
<script setup> <script setup>
import { ref } from "vue"; import { ref } from "vue";
import { positionList } from "@/api/user"; import { positionList, positionAddList, positionuUdateList } from "@/api/user";
import Selectbox from "@/components/form/selectbox.vue"; import Selectbox from "@/components/form/selectbox.vue";
import FormItem from "@/components/form/form-item.vue"; import FormItem from "@/components/form/form-item.vue";
import FormRow from "@/components/form/form-row.vue"; import FormRow from "@/components/form/form-row.vue";
import { dictJobTypeApi, getTreeListApi } from "@/api/common"; import { dictJobTypeApi, getTreeListApi } from "@/api/common";
import { validateForm } from "@/utils/utils";
import town from "@/assets/town.json"; import town from "@/assets/town.json";
import { getEumData } from "@/utils/utils"; import { getEumData } from "@/utils/utils";
const tab = ref(1); const tab = ref(0);
const value = ref([]); const value = ref([]);
const gwList = ref([]); const gwList = ref([]);
const columns = ref([]); const columns = ref([]);
...@@ -267,10 +302,16 @@ let salaryText = ref(""); ...@@ -267,10 +302,16 @@ let salaryText = ref("");
const salaryColumns = ref([]); const salaryColumns = ref([]);
/* 是否提供住宿 */ /* 是否提供住宿 */
const radioOpstion = ref([]); const radioOpstion = ref([]);
const certificateInputValue = ref("");
const certificateSelectValue = ref("");
const majorInputValue = ref("");
const majorSelectValue = ref("");
/* 职业类型 */ /* 职业类型 */
const positionTypeValue = ref([]); const positionTypeValue = ref([]);
/* 兼职全职枚举 */ /* 兼职全职枚举 */
const EnumWorkMode = ref([]); const EnumWorkMode = ref([]);
const articleIds = ref("");
const pageType = ref("");
/* 等级选择项 */ /* 等级选择项 */
const levelOptions = ref(["初级", "中级", "高级", "高级以上"]); const levelOptions = ref(["初级", "中级", "高级", "高级以上"]);
...@@ -290,9 +331,9 @@ const jobForm = ref([ ...@@ -290,9 +331,9 @@ const jobForm = ref([
maxSalary: null, maxSalary: null,
benefits: "", benefits: "",
identityRequirement: 1, identityRequirement: 1,
educationRequirement: null, educationRequirement: 0,
minAgeRequirement: null, minAgeRequirement: 0,
maxAgeRequirement: null, maxAgeRequirement: 0,
recruitmentNumber: 1, recruitmentNumber: 1,
accommodation: 0, accommodation: 0,
provinceCode: "", provinceCode: "",
...@@ -302,10 +343,10 @@ const jobForm = ref([ ...@@ -302,10 +343,10 @@ const jobForm = ref([
address: "", address: "",
contactPerson: "", contactPerson: "",
contactPhone: "", contactPhone: "",
articleId: "",
positionalTitle: "", positionalTitle: "",
professionalCertificates: "", professionalCertificates: "",
specialCertificates: "", specialCertificates: "",
articleId: articleIds.value,
salaryText: "", //显示 salaryText: "", //显示
myBenefits: [ myBenefits: [
{ {
...@@ -335,6 +376,10 @@ const jobForm = ref([ ...@@ -335,6 +376,10 @@ const jobForm = ref([
] ]
} }
]); ]);
onLoad(({ articleId, type }) => {
articleIds.value = articleId;
pageType.value = type;
});
const tabList = ref([ const tabList = ref([
{ id: 213213, name: "选择已有岗位", type: 1 }, { id: 213213, name: "选择已有岗位", type: 1 },
{ id: 1651651, name: "新增岗位", type: 2 } { id: 1651651, name: "新增岗位", type: 2 }
...@@ -390,6 +435,9 @@ positionList({}).then(res => { ...@@ -390,6 +435,9 @@ positionList({}).then(res => {
item.workDic = EnumWorkMode.value.find(v => v.code == item.workMode).text; item.workDic = EnumWorkMode.value.find(v => v.code == item.workMode).text;
return item; return item;
}); });
res.data = res.data.filter(item => {
return !item.articleId;
});
gwList.value = res.data; gwList.value = res.data;
}); });
const getJobType = () => { const getJobType = () => {
...@@ -412,9 +460,11 @@ const columnChange = ({ selectedItem, resolve, finish }) => { ...@@ -412,9 +460,11 @@ const columnChange = ({ selectedItem, resolve, finish }) => {
}; };
const handleConfirm = (params, item) => { const handleConfirm = (params, item) => {
const { selectedItems, value } = params; const { selectedItems, value } = params;
item.jobTypeName = selectedItems[1].name; item.jobTypeName = selectedItems[1].name;
item.jobTypePid = selectedItems[1].id; item.jobTypeId = selectedItems[1].id;
item.jobTypeParentId = selectedItems[0].id; item.jobTypePid = selectedItems[0].id;
console.log("selectedItems", item.jobTypeName, item.jobTypeId, item.jobTypePid);
}; };
// 职业类型 // 职业类型
// 地址 // 地址
...@@ -438,9 +488,11 @@ const handleConfirmCity = (params, item) => { ...@@ -438,9 +488,11 @@ const handleConfirmCity = (params, item) => {
const [city, district, street] = selectedItems; const [city, district, street] = selectedItems;
item.address = selectedItems.map(v => v.name || "").join(""); item.address = selectedItems.map(v => v.name || "").join("");
item.provinceCode = 520000; item.provinceCode = 520000;
item.cityName = city.name;
item.cityCode = city.code; item.cityCode = city.code;
item.districtCode = district.code; item.districtCode = district.code;
item.street = street ? street.name : ""; item.street = street ? street.name : "";
console.log("item.cityName", item.cityName);
}; };
// 地址 // 地址
...@@ -585,6 +637,99 @@ const handleConfirmEducation = (params, item) => { ...@@ -585,6 +637,99 @@ const handleConfirmEducation = (params, item) => {
const { selectedItems, value } = params; const { selectedItems, value } = params;
item.educationText = selectedItems.text; item.educationText = selectedItems.text;
}; };
const inputLeve = (e, item) => {
const { value } = e.detail;
item.professionalCertificates = value + "-" + certificateSelectValue.value;
};
const handlelevelation = (params, item) => {
const { selectedItems, value } = params;
item.professionalCertificates = certificateInputValue.value + "-" + value;
};
const inputMajor = (e, item) => {
const { value } = e.detail;
item.positionalTitle = value + "-" + majorSelectValue.value;
};
const handMajoration = (params, item) => {
const { selectedItems, value } = params;
item.positionalTitle = majorInputValue.value + "-" + value;
};
const selectedJobs = ref([]);
const submitFrom = () => {
if (pageType.value == "update") {
let updateArr = gwList.value.filter(item => value.value.includes(String(item.id)));
updateArr = updateArr.map(item => {
return {
id: item.id,
articleId: articleIds.value
};
});
if (updateArr.length > 0) {
xma.showLoading({
title: "提交中...",
mask: true
});
positionuUdateList(updateArr).then(res => {
xma.hideLoading();
if (res.code == 200) {
xma.navigateBack({
delta: 1
});
}
});
} else {
xma.showToast({
title: "请选择职位",
icon: "none"
});
}
} else {
console.log("jobForm.value", jobForm.value);
const allValid =
jobForm.value.length > 0 &&
jobForm.value.every(item => {
return (
item &&
validateForm(item, [
"jobTypeId",
"jobTypeName",
"name",
"positionDesc",
"address",
"identityRequirement",
"educationRequirement",
"positionalTitle",
"professionalCertificates",
"specialCertificates",
"contactPhone",
"contactPerson"
])
);
});
if (allValid) {
xma.showLoading({
title: "提交中...",
mask: true
});
positionAddList(jobForm.value).then(res => {
xma.hideLoading();
if (res.code == 200) {
xma.navigateBack({
delta: 1
});
}
});
} else {
xma.showToast({
title: "请填写完整",
icon: "none"
});
}
}
};
function openMask() {
tab.value = 1;
}
function addPost() { function addPost() {
jobForm.value.push({ jobForm.value.push({
workMode: 1, workMode: 1,
...@@ -611,10 +756,10 @@ function addPost() { ...@@ -611,10 +756,10 @@ function addPost() {
address: "", address: "",
contactPerson: "", contactPerson: "",
contactPhone: "", contactPhone: "",
articleId: "",
positionalTitle: "", positionalTitle: "",
professionalCertificates: "", professionalCertificates: "",
specialCertificates: "", specialCertificates: "",
articleId: articleIds.value,
salaryText: "", //显示 salaryText: "", //显示
myBenefits: [ myBenefits: [
{ {
......
...@@ -38,14 +38,16 @@ import { getCompanyInfoApi } from "@/api/user"; ...@@ -38,14 +38,16 @@ import { getCompanyInfoApi } from "@/api/user";
import { useStore } from "./store"; import { useStore } from "./store";
const pinias = useStore(); const pinias = useStore();
const enterpriseInformation = ref({}); const enterpriseInformation = ref({});
onLoad(options => { const articleIds = ref("");
onLoad(({ articleId }) => {
articleIds.value = articleId;
getCompanyInfoApi().then(res => { getCompanyInfoApi().then(res => {
enterpriseInformation.value = res.data; enterpriseInformation.value = res.data;
}); });
}); });
const next = () => { const next = () => {
uni.navigateTo({ uni.navigateTo({
url: "/pages/signUp/addPost" url: `/pages/signUp/addPost?articleId=${articleIds.value}`
}); });
}; };
</script> </script>
......
...@@ -71,6 +71,7 @@ export const formatTimestamp = (timestamp, formatString = "YYYY-MM-DD hh:mm:ss") ...@@ -71,6 +71,7 @@ export const formatTimestamp = (timestamp, formatString = "YYYY-MM-DD hh:mm:ss")
export const validateForm = (formData, requiredFields) => { export const validateForm = (formData, requiredFields) => {
const phoneRegex = /^1[3-9]\d{9}$/; // 正则表达式匹配中国大陆手机号码 const phoneRegex = /^1[3-9]\d{9}$/; // 正则表达式匹配中国大陆手机号码
for (const field of requiredFields) { for (const field of requiredFields) {
const fieldValue = formData[field];
if (field === "contactPhone" || field === "phone") { if (field === "contactPhone" || field === "phone") {
if (!formData[field] || !phoneRegex.test(formData[field])) { if (!formData[field] || !phoneRegex.test(formData[field])) {
uni.showToast({ uni.showToast({
...@@ -80,7 +81,7 @@ export const validateForm = (formData, requiredFields) => { ...@@ -80,7 +81,7 @@ export const validateForm = (formData, requiredFields) => {
}); });
return false; return false;
} }
} else if (!formData[field]) { } else if (fieldValue === null || fieldValue === undefined || fieldValue === "") {
console.log(field); console.log(field);
uni.showToast({ uni.showToast({
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment