Commit 3cfc9148 authored by 李明环(东信)'s avatar 李明环(东信)

职位发布初步修改完成

parent 199d91ea
...@@ -4,7 +4,7 @@ export const getUploadToken = params => instance.post("/common/file/getUploadTok ...@@ -4,7 +4,7 @@ export const getUploadToken = params => instance.post("/common/file/getUploadTok
// 获取枚举 // 获取枚举
export const getDictDataApi = params => instance.post("/common/dict/getDictData", params); export const getDictDataApi = params => instance.post("/common/dict/getDictData", params);
// 获取省市区树状数据 // 获取省市区树状数据
export const getTreeListApi = params => instance.post("/dict/dictProvinceCityDistrict/getTreeList", params); export const getTreeListApi = params => instance.postForm("/dict/dictProvinceCityDistrict/getTreeList", params);
// 获取岗位列表 // 获取岗位列表
export const dictJobTypeApi = params => instance.post("/dict/dictJobType/getTree", params); export const dictJobTypeApi = params => instance.post("/dict/dictJobType/getTree", params);
// 获取岗位列表类型(1职位,2政策,3动态) // 获取岗位列表类型(1职位,2政策,3动态)
......
import instance from "@/utils/request"; import instance from "@/utils/request";
// 创建岗位 // 创建岗位
export const createJobApi = params => instance.post("/company/job/create", params); export const createJobApi = params => instance.post("/b/position/add", params);
//更新岗位 //更新岗位
export const updateJobApi = params => instance.post("/company/job/update", params); export const updateJobApi = params => instance.post("/company/job/update", params);
......
This source diff could not be displayed because it is too large. You can view the blob instead.
<template>
<div class="filter">
<div class="menu">
<p v-for="v in menuList" :class="{ active: v.active }" :key="v.name" @click="onClickMenu(v)">{{ v.name }}</p>
</div>
<div class="content">
<!-- 学历要求 -->
<div class="filter-item education">
<p class="title">学历要求</p>
<div class="filter-select">
<div
class="select-item"
:class="{ active: v.active }"
@click="onClickEducation(v)"
v-for="(v, i) in educationList"
:key="i"
>
{{ v.text }}
</div>
</div>
</div>
<!-- 年龄要求 -->
<div class="filter-item age">
<p class="title" style="margin-bottom: 0">年龄要求</p>
<wd-slider
v-model="age"
hide-min-max
inactive-color="rgba(31, 134, 255,0.3)"
active-color="rgba(31, 134, 255,1)"
/>
</div>
<!-- 性别要求 -->
<div class="filter-item gender">
<p class="title">性别要求</p>
<div class="filter-select">
<div
class="select-item"
:class="{ active: v.active }"
@click="onClickGender(v)"
v-for="(v, i) in genderList"
:key="i"
>
{{ v.text }}
</div>
</div>
</div>
<!-- 工作年限要求 -->
<div class="filter-item workYear">
<p class="title">工作年限要求</p>
<div class="filter-select">
<div
class="select-item"
:class="{ active: v.active }"
@click="onClickWorkYear(v)"
v-for="(v, i) in workYearList"
:key="i"
>
{{ v.text }}
</div>
</div>
</div>
<!-- 专业要求 -->
<div class="filter-item major">
<p class="title">专业要求</p>
<div class="filter-select">
<div
class="select-item"
:class="{ active: v.active }"
@click="onClickMajor(v)"
v-for="(v, i) in dictJobTypeList"
:key="i"
>
{{ v.name }}
</div>
</div>
</div>
</div>
<div class="bottom-wrap">
<button class="cancel" @click="onCancel">取消</button>
<button class="confirm" @click="onConfirm">确认</button>
</div>
</div>
</template>
<script setup>
import { getEumData } from "@/utils/utils";
import { dictJobTypeApi } from "@/api/common";
// 导航
const menuList = ref([]);
const onClickMenu = data => {
menuList.value.forEach(v => (v.active = false));
data.active = true;
document.querySelector(".filter").querySelector(`.${data.className}`).scrollIntoView();
};
// 学历
const educationList = ref([]);
const onClickEducation = v => {
educationList.value.forEach(v => (v.active = false));
v.active = true;
};
// 年龄
const age = ref([0, 100]);
// 性别
const genderList = ref([]);
const onClickGender = v => {
genderList.value.forEach(v => (v.active = false));
v.active = true;
};
// 工作年限
const workYearList = ref([]);
const onClickWorkYear = v => {
workYearList.value.forEach(v => (v.active = false));
v.active = true;
};
// 专业
const dictJobTypeList = ref([]);
const onClickMajor = v => {
dictJobTypeList.value.forEach(v => (v.active = false));
v.active = true;
};
// 初始化数据
const initData = async () => {
uni.showLoading({
title: "加载中...",
mask: true
});
/* 初始化菜单 */
menuList.value = [
{ active: true, name: "学历", className: "education" },
{ active: false, name: "年龄", className: "age" },
{ active: false, name: "性别", className: "gender" },
{ active: false, name: "工作年限", className: "workYear" },
{ active: false, name: "专业", className: "major" }
];
/* 初始化数据 */
educationList.value = await getEumData("EnumEducationRequirement");
genderList.value = await getEumData("EnumGenderRequirement");
workYearList.value = [
{
text: "不限",
min: null,
max: null
},
{
text: "1年",
min: 0,
max: 1
},
{
text: "2~3年",
min: 2,
max: 3
},
{
text: "4~5年",
min: 4,
max: 5
},
{
text: "5~10年",
min: 5,
max: 10
},
{
text: "10年以上",
min: 10,
max: null
}
];
const dictJobType = await dictJobTypeApi({});
dictJobTypeList.value = dictJobType.data;
// uni.hideLoading();
};
initData();
/*
接受两个方法
1. 确认 接收数据
2. 取消
*/
const emit = defineEmits(["confirm", "cancel"]);
// 2. 取消
const onCancel = () => {
emit("cancel");
};
// 1. 确认 接收数据
const onConfirm = () => {
console.log(
educationList.value.find(v => v.active),
genderList.value.find(v => v.active),
workYearList.value.find(v => v.active),
dictJobTypeList.value.find(v => v.active)
);
emit("confirm");
};
</script>
<style lang="scss" scoped>
.filter {
position: absolute;
inset: 0;
z-index: 66666666;
display: flex;
background-color: #ffffff;
.menu {
width: 200rpx;
height: 100%;
background-color: #e8f2ff;
p {
padding: 32rpx 24rpx;
font-size: 32rpx;
color: #1b2026;
}
.active {
padding-left: 16rpx;
color: #1f86ff;
background-color: #ffffff;
border-left: 8rpx solid #1f86ff;
}
}
.content {
flex: 1;
padding: 32rpx;
padding-bottom: 80rpx;
overflow-y: auto;
.filter-item {
margin-bottom: 66rpx;
.title {
margin-bottom: 24rpx;
font-size: 24rpx;
font-weight: 600;
line-height: 36rpx;
color: #1b2026;
}
.filter-select {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 16rpx 22rpx;
.select-item {
box-sizing: border-box;
height: 60rpx;
font-size: 24rpx;
line-height: 60rpx;
color: #1b2026;
text-align: center;
background: #f0f4fa;
border: 2rpx solid #f0f4fa;
border-radius: 8rpx;
}
.active {
color: #1f86ff;
border-color: #1f86ff;
}
}
:deep(.wd-slider) {
height: auto;
padding-top: 36rpx;
.wd-slider__bar-wrapper {
margin: 12rpx;
background: red;
}
.wd-slider__button-wrapper {
top: 50%;
width: 20rpx;
.wd-slider__button {
width: 20rpx;
height: 20rpx;
background: #1f86ff;
border: 0;
box-shadow: none;
}
.wd-slider__label {
bottom: 16rpx;
left: 50%;
width: auto;
color: #1f86ff;
background-color: transparent;
transform: translateX(-50%);
}
}
}
}
}
.bottom-wrap {
position: absolute;
bottom: 0;
left: 0;
box-sizing: border-box;
display: flex;
justify-content: space-between;
width: 100%;
padding: 16rpx 64rpx;
background-color: #ffffff;
button {
display: flex;
align-items: center;
justify-content: center;
width: 294rpx;
height: 80rpx;
margin: 0;
border: 0;
}
.cancel {
color: #1f86ff;
background: #e8f2ff;
}
.confirm {
color: #ffffff;
background: #1f86ff;
}
}
}
</style>
...@@ -34,6 +34,7 @@ const iconPath = new URL(`../../static/image/icon/${props.icon}.png`, import.met ...@@ -34,6 +34,7 @@ const iconPath = new URL(`../../static/image/icon/${props.icon}.png`, import.met
margin-top: 32rpx; margin-top: 32rpx;
border-bottom: 2rpx solid rgb(31 35 41 / 15%); border-bottom: 2rpx solid rgb(31 35 41 / 15%);
.title { .title {
height: 36rpx;
margin-bottom: 32rpx; margin-bottom: 32rpx;
font-size: 32rpx; font-size: 32rpx;
font-weight: 600; font-weight: 600;
......
<template> <template>
<div class="page"> <div class="page">
<NavBar :showIcon="true" :showTitle="false" title="" backgroundBox="#FFFFFF"></NavBar> <NavBar :showIcon="true" :showTitle="false" title="" backgroundBox="#FFFFFF"></NavBar>
<!-- <Filter /> -->
<view class="title"> <view class="title">
<view class="t1">1/5填写职位信息</view> <view class="t1">1/5填写职位信息</view>
<view class="t2">选择对应的职位并填写职位信息</view> <view class="t2">选择对应的职位并填写职位信息</view>
</view> </view>
<view class="content"> <view class="content">
<selectbox :options="typeOptions" v-model="typeValue"></selectbox> <selectbox :options="EnumWorkMode" label-key="text" value-key="code" v-model="pinias.formData.workMode"></selectbox>
<form-row> <form-row>
<form-item title="职位类型"> <form-item title="职位类型">
<wd-col-picker <wd-col-picker
...@@ -18,20 +19,20 @@ ...@@ -18,20 +19,20 @@
value-key="id" value-key="id"
use-default-slot use-default-slot
> >
<view :class="`inner flex-between ${pinias.formData.jobTypeText ? '' : 'placeholder'}`"> <view :class="`inner flex-between ${pinias.formData.jobTypeName ? '' : 'placeholder'}`">
{{ pinias.formData.jobTypeText || "请选择职位类型" }} {{ pinias.formData.jobTypeName || "请选择职位类型" }}
</view> </view>
</wd-col-picker> </wd-col-picker>
</form-item> </form-item>
</form-row> </form-row>
<form-row> <form-row>
<form-item title="职位标题" icon="edit"> <form-item title="职位标题" icon="edit">
<input type="text" placeholder="输入职位标题如“财务总监”" /> <input type="text" v-model="pinias.formData.name" placeholder="输入职位标题如“财务总监”" />
</form-item> </form-item>
</form-row> </form-row>
<form-row> <form-row>
<form-item title="职位描述" :border="false" icon=""> <form-item title="职位描述" :border="false" icon="">
<textarea></textarea> <textarea v-model="pinias.formData.positionDesc" placeholder="请输入你的职位描述"></textarea>
</form-item> </form-item>
</form-row> </form-row>
<!-- <view class="switch"> <!-- <view class="switch">
...@@ -54,8 +55,8 @@ ...@@ -54,8 +55,8 @@
value-key="id" value-key="id"
use-default-slot use-default-slot
> >
<view :class="`inner flex-between ${pinias.formData.jobTypeText ? '' : 'placeholder'}`"> <view :class="`inner flex-between ${pinias.formData.jobTypeName ? '' : 'placeholder'}`">
{{ pinias.formData.jobTypeText || "请选择职位类型" }} {{ pinias.formData.jobTypeName || "请选择职位类型" }}
<view class="arrow"></view> <view class="arrow"></view>
</view> </view>
</wd-col-picker> </wd-col-picker>
...@@ -77,7 +78,7 @@ ...@@ -77,7 +78,7 @@
custom-class="textarea" custom-class="textarea"
show-word-limit show-word-limit
maxlength="500" maxlength="500"
v-model="pinias.formData.jobDesc" v-model="pinias.formData.positionDesc"
placeholder="请输入你的职位描述" placeholder="请输入你的职位描述"
/> />
</view> --> </view> -->
...@@ -96,6 +97,7 @@ ...@@ -96,6 +97,7 @@
</template> </template>
<script setup> <script setup>
// import Filter from "@/components/filter/index.vue";
import { getEumData } from "@/utils/utils"; import { getEumData } from "@/utils/utils";
import { ref } from "vue"; import { ref } from "vue";
import { dictJobTypeApi } from "@/api/common"; import { dictJobTypeApi } from "@/api/common";
...@@ -118,6 +120,7 @@ onLoad(option => { ...@@ -118,6 +120,7 @@ onLoad(option => {
}); });
/* 兼职全职枚举 */ /* 兼职全职枚举 */
const EnumWorkMode = ref([]); const EnumWorkMode = ref([]);
const workModeValue = ref();
const getEnumWorkMode = async () => { const getEnumWorkMode = async () => {
EnumWorkMode.value = await getEumData("EnumWorkMode"); EnumWorkMode.value = await getEumData("EnumWorkMode");
}; };
...@@ -154,39 +157,20 @@ const columnChange = ({ selectedItem, resolve, finish }) => { ...@@ -154,39 +157,20 @@ const columnChange = ({ selectedItem, resolve, finish }) => {
} }
}; };
const handleConfirm = ({ selectedItems, value }) => { const handleConfirm = ({ selectedItems, value }) => {
const taget = _.last(selectedItems); pinias.setFormDataKey("jobTypeName", selectedItems[1].name);
pinias.setFormDataKey("jobTypeText", taget.name); pinias.setFormDataKey("jobTypePid", selectedItems[1].id);
pinias.setFormDataKey("jobType", taget.id); pinias.setFormDataKey("jobTypeParentId", selectedItems[0].id);
}; };
const next = () => { const next = () => {
xma.hideKeyboard(); xma.hideKeyboard();
if (validateForm(pinias.formData, ["jobType", "jobTypeText", "jobName", "jobDesc"])) { console.log(pinias.formData);
if (validateForm(pinias.formData, ["jobTypePid", "jobTypeName", "name", "positionDesc"])) {
uni.navigateTo({ uni.navigateTo({
url: "/pages/recommend/releasePostion/step2" url: "/pages/recommend/releasePostion/step2"
}); });
} }
}; };
/* 类型 */
const typeValue = ref(1);
const typeOptions = [
{
label: "全职",
value: 1
},
{
label: "兼职",
value: 2
},
{
label: "见习",
value: 3
},
{
label: "实习",
value: 4
}
];
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
......
...@@ -85,7 +85,6 @@ let salaryText = ref(""); ...@@ -85,7 +85,6 @@ let salaryText = ref("");
const value = ref([]); const value = ref([]);
const columns = ref([]); const columns = ref([]);
let my = ref(pinias.formData.negotiableSalary == 1); let my = ref(pinias.formData.negotiableSalary == 1);
console.log(pinias.formData.settlementType, "pinias.formData.settlementType");
const show = ref(false); const show = ref(false);
let multiple = 1; let multiple = 1;
/* 兼职薪资基准 */ /* 兼职薪资基准 */
......
...@@ -32,7 +32,7 @@ ...@@ -32,7 +32,7 @@
<wd-tabbar <wd-tabbar
@tap="next" @tap="next"
custom-style="display: flex;justify-content: center !important;" custom-style="display: flex;justify-content: center !important;z-index:9;"
fixed fixed
placeholder placeholder
safeAreaInsetBottom safeAreaInsetBottom
...@@ -47,36 +47,13 @@ import { ref } from "vue"; ...@@ -47,36 +47,13 @@ import { ref } from "vue";
import AddressSelect from "@/components/form/address-select.vue"; import AddressSelect from "@/components/form/address-select.vue";
import { getTreeListApi } from "@/api/common"; import { getTreeListApi } from "@/api/common";
import { useReleasePostionStore } from "./store"; import { useReleasePostionStore } from "./store";
import town from "@/assets/town.json";
/* tab */ /* tab */
const pinias = useReleasePostionStore(); const pinias = useReleasePostionStore();
const showTab = ref(true); const showTab = ref(true);
const address = ref(""); const address = ref("");
import { validateForm } from "@/utils/utils"; import { validateForm } from "@/utils/utils";
const getLocaltion = () => {
showTab.value = false;
xma.chooseLocation({
success: res => {
console.log(res);
if (res.errMsg == "chooseLocation:ok") {
address.value = res.name;
}
pinias.setFormDataKey("locationLongitude", res.longitude || 106.647169);
pinias.setFormDataKey("locationLatitude", res.latitude || 26.615808);
pinias.setFormDataKey("address", res.name || "华贵保险大厦");
showTab.value = true;
/*
address: "长岭南路178号"
distance: 124
errMsg: "chooseLocation:ok"
latitude: 26.615808
longitude: 106.647169
name: "华贵保险大厦"
*/
}
});
};
// 地区选择 // 地区选择
/* 获取省市区 */ /* 获取省市区 */
const cityOpstion = ref([]); const cityOpstion = ref([]);
...@@ -84,23 +61,33 @@ const cityValue = ref([]); ...@@ -84,23 +61,33 @@ const cityValue = ref([]);
const cityText = ref(""); const cityText = ref("");
let citySelectedItems = []; let citySelectedItems = [];
getTreeListApi().then(res => { getTreeListApi({ provinceName: "贵州省" }).then(res => {
cityOpstion.value.push(res.data); cityOpstion.value.push(res.data[0].children);
}); });
const columnChangeCity = ({ selectedItem, resolve, finish }) => { const columnChangeCity = ({ selectedItem, resolve, finish }) => {
if (selectedItem.children) { if (selectedItem.children) {
console.log(selectedItem.children);
resolve(selectedItem.children); resolve(selectedItem.children);
} else { } else {
finish(); // 选择街道
if (selectedItem.children === null && town[selectedItem.code]) {
resolve(town[selectedItem.code].map((v, i) => ({ ...v, code: i })));
} else {
finish();
}
} }
}; };
const handleConfirmCity = ({ selectedItems }) => { const handleConfirmCity = ({ selectedItems }) => {
cityText.value = selectedItems.map(v => v.name).join("-"); cityText.value = selectedItems.map(v => v.name).join("-");
citySelectedItems = selectedItems; citySelectedItems = selectedItems;
const [province, city, district] = selectedItems; const [city, district, street] = selectedItems;
console.log([province, city, district]); pinias.formData.address = selectedItems.map(v => v.name).join("");
pinias.formData.provinceCode = 520000;
pinias.formData.cityCode = city.code;
pinias.formData.districtCode = district.code;
pinias.formData.street = street.name;
/* params.provinceCode = province.code; /*params.provinceCode = province.code;
params.provinceName = province.name; params.provinceName = province.name;
params.cityCode = city.code; params.cityCode = city.code;
params.cityName = city.name; params.cityName = city.name;
......
...@@ -36,12 +36,12 @@ ...@@ -36,12 +36,12 @@
> >
<view :class="`inner flex-between ${educationText ? '' : 'placeholder'}`"> <view :class="`inner flex-between ${educationText ? '' : 'placeholder'}`">
<view class="flex-align-center" bind:tap="onShowIdentitySelect"> <view class="flex-align-center" bind:tap="onShowIdentitySelect">
{{ educationText || "请选择学历要求" }} {{ educationText || "请选择学历" }}
</view> </view>
</view> </view>
</wd-picker> </wd-picker>
</form-item> </form-item>
<form-item title="学历要求"> <form-item title="年龄要求">
<wd-col-picker <wd-col-picker
v-model="value" v-model="value"
:columns="columns" :columns="columns"
...@@ -50,7 +50,7 @@ ...@@ -50,7 +50,7 @@
use-default-slot use-default-slot
> >
<view :class="`inner flex-between ${ageText ? '' : 'placeholder'}`" bind:tap="onOpen"> <view :class="`inner flex-between ${ageText ? '' : 'placeholder'}`" bind:tap="onOpen">
{{ ageText || "请选择年龄要求" }} {{ ageText || "请选择年龄范围" }}
</view> </view>
</wd-col-picker> </wd-col-picker>
</form-item> </form-item>
...@@ -109,30 +109,57 @@ ...@@ -109,30 +109,57 @@
</view> --> </view> -->
<form-row :fill="false"> <form-row :fill="false">
<form-item title="专业技术职称" icon="edit"> <form-item title="专业技术职称" icon="edit">
<input type="text" /> <input type="text" v-model="majorInputValue" placeholder="请填写职称" />
</form-item>
<form-item title="">
<wd-picker
:columns="levelOptions"
value-key="text"
label-key="text"
v-model="majorSelectValue"
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-item>
<form-item title=""> </form-item>
</form-row> </form-row>
<form-row :fill="false"> <form-row :fill="false">
<form-item title="职业资格/技能等级证书" icon="edit"> <form-item title="职业资格/技能等级证书" icon="edit">
<input type="text" /> <input type="text" v-model="certificateInputValue" placeholder="请填写职业资格" />
</form-item>
<form-item title="">
<wd-picker
:columns="levelOptions"
value-key="text"
label-key="text"
v-model="certificateSelectValue"
use-default-slot
>
<view :class="`inner flex-between ${certificateSelectValue ? '' : 'placeholder'}`">
<view class="flex-align-center" bind:tap="onShowIdentitySelect">
{{ certificateSelectValue || "请选择职业资格等级" }}
</view>
</view>
</wd-picker>
</form-item> </form-item>
<form-item title=""> </form-item>
</form-row> </form-row>
<form-row> <form-row>
<form-item title="特种作业证" icon="edit"> <form-item title="特种作业证" icon="edit">
<input type="text" /> <input v-model="pinias.formData.specialCertificates" type="text" placeholder="请填写特种作业证" />
</form-item> </form-item>
</form-row> </form-row>
</view> </view>
<wd-tabbar <wd-tabbar
@tap="next"
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="foot-btn">下一步</view> <view class="foot-btn" @tap="next">下一步</view>
</wd-tabbar> </wd-tabbar>
</div> </div>
</template> </template>
...@@ -143,6 +170,7 @@ import { getEumData, getEnumText } from "@/utils/utils"; ...@@ -143,6 +170,7 @@ import { getEumData, getEnumText } from "@/utils/utils";
import { useReleasePostionStore } from "./store"; import { useReleasePostionStore } from "./store";
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 { validateForm } from "@/utils/utils";
/* tab */ /* tab */
const pinias = useReleasePostionStore(); const pinias = useReleasePostionStore();
const identityText = ref(""); const identityText = ref("");
...@@ -216,13 +244,21 @@ const handleConfirm = ({ value, selectedItem }) => { ...@@ -216,13 +244,21 @@ const handleConfirm = ({ value, selectedItem }) => {
} }
}; };
const next = () => { /* 等级选择项 */
console.log(pinias.formData); const levelOptions = ref(["初级", "中级", "高级", "高级以上"]);
uni.navigateTo({ const getEnumCertificatesLevel = async () => {
url: "/pages/recommend/releasePostion/step5" levelOptions.value = await getEumData("EnumCertificatesLevel");
}); console.log(levelOptions.value);
}; };
getEnumCertificatesLevel();
/* 专业 major */
const majorInputValue = ref("");
const majorSelectValue = ref("");
/* 证书 certificate */
const certificateInputValue = ref("");
const certificateSelectValue = ref("");
/* 特种作业证 specialLicense */
const specialLicenseValue = ref("");
/* 初始化页面数据 */ /* 初始化页面数据 */
const initViewData = async () => { const initViewData = async () => {
if (pinias.formData.id) { if (pinias.formData.id) {
...@@ -236,6 +272,32 @@ const initViewData = async () => { ...@@ -236,6 +272,32 @@ const initViewData = async () => {
} }
}; };
initViewData(); initViewData();
const next = () => {
/* majorInputValue
majorSelectValue
certificateInputValue
certificateSelectValue
specialLicenseValue */
if (majorInputValue.value && majorSelectValue.value)
pinias.formData.positionalTitle = majorInputValue.value + "-" + majorSelectValue.value;
if (certificateInputValue.value && certificateSelectValue.value)
pinias.formData.professionalCertificates = certificateInputValue.value + "-" + certificateSelectValue.value;
console.log(pinias.formData);
if (
validateForm(pinias.formData, [
"identityRequirement",
"educationRequirement",
"positionalTitle",
"professionalCertificates",
"specialCertificates"
])
) {
uni.navigateTo({
url: "/pages/recommend/releasePostion/step5"
});
}
};
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
......
...@@ -120,7 +120,6 @@ const submit = () => { ...@@ -120,7 +120,6 @@ const submit = () => {
<style lang="scss" scoped> <style lang="scss" scoped>
@import "./common.scss"; @import "./common.scss";
.foot-btn { .foot-btn {
position: fixed; position: fixed;
display: flex; display: flex;
......
import { defineStore } from "pinia"; import { defineStore } from "pinia";
import { reactive,ref } from "vue"; import { reactive, ref } from "vue";
export const useReleasePostionStore = defineStore("useReleasePostionStore", ()=>{ export const useReleasePostionStore = defineStore("useReleasePostionStore", () => {
let formData = ref( { /* let formData = ref( {
workMode: 1, workMode: 1,
jobName: "", jobName: "",
jobType: 1, jobType: 1,
...@@ -29,51 +29,81 @@ export const useReleasePostionStore = defineStore("useReleasePostionStore", ()=> ...@@ -29,51 +29,81 @@ export const useReleasePostionStore = defineStore("useReleasePostionStore", ()=>
locationLatitude: 0, locationLatitude: 0,
contactPerson: "", contactPerson: "",
contactPhone: "" contactPhone: ""
}) }) */
function setFormDataKey(key, data) { const formData = ref({
formData.value[key] = data; workMode: 1,
} name: "",
function resetForm() { jobTypeId: 1,
jobTypePid: "",
formData.value = { jobTypeName: "",
workMode: 1, postitDesc: "",
jobName: "", negotiableSalary: 0,
jobType: 1, settlementType: 4,
jobTypeText: "", minSalary: 1,
jobDesc: "", maxSalary: 1,
negotiableSalary: 0, benefits: "",
settlementType: 4, identityRequirement: 1,
minSalary: 0, educationRequirement: 1,
maxSalary: 0, minAgeRequirement: 1,
benefits: "", maxAgeRequirement: 1,
identityRequirement: 1, recruitmentNumber: 1,
educationRequirement: 1, accommodation: 1,
minAgeRequirement: 16, provinceCode: "",
maxAgeRequirement: 60, cityCode: "",
recruitmentNumber: 1, districtCode: "",
accommodation: 1, street: "",
provinceCode: "", address: "",
cityCode: "", contactPerson: "",
districtCode: "", contactPhone: "",
town: "", articleId: "",
street: "", positionalTitle: "",
address: "", professionalCertificates: "",
locationLongitude: 0, specialCertificates: "xx证书-中级"
locationLatitude: 0, });
contactPerson: "", function setFormDataKey(key, data) {
contactPhone: "" formData.value[key] = data;
}; }
console.log('this.formthis.formDatathis.formDatathis.formDatathis.formDataData',formData.value); function resetForm() {
} formData.value = {
function setForm(data) { workMode: 1,
formData.value = data; name: "",
console.log("this.formData",formData.value ); jobTypeId: 1,
} jobTypePid: "",
return { jobTypeName: "",
formData, postitDesc: "",
setFormDataKey, negotiableSalary: 0,
resetForm, settlementType: 4,
setForm minSalary: 1,
} maxSalary: 1,
benefits: "",
identityRequirement: 1,
educationRequirement: 1,
minAgeRequirement: 1,
maxAgeRequirement: 1,
recruitmentNumber: 1,
accommodation: 1,
provinceCode: "",
cityCode: "",
districtCode: "",
street: "",
address: "",
contactPerson: "",
contactPhone: "",
articleId: "",
positionalTitle: "",
professionalCertificates: "",
specialCertificates: "xx证书-中级"
};
console.log("this.formthis.formDatathis.formDatathis.formDatathis.formDataData", formData.value);
}
function setForm(data) {
formData.value = data;
console.log("this.formData", formData.value);
}
return {
formData,
setFormDataKey,
resetForm,
setForm
};
}); });
...@@ -49,7 +49,7 @@ export const navigateTo = (url, type = "navigateTo") => { ...@@ -49,7 +49,7 @@ export const navigateTo = (url, type = "navigateTo") => {
}); });
}; };
export const formatTimestamp = (timestamp, formatString = "YYYY-MM-DD hh:mm:ss")=> { export const formatTimestamp = (timestamp, formatString = "YYYY-MM-DD hh:mm:ss") => {
const date = new Date(timestamp); const date = new Date(timestamp);
const year = date.getFullYear(); const year = date.getFullYear();
const month = ("0" + (date.getMonth() + 1)).slice(-2); const month = ("0" + (date.getMonth() + 1)).slice(-2);
...@@ -66,12 +66,12 @@ export const formatTimestamp = (timestamp, formatString = "YYYY-MM-DD hh:mm:ss") ...@@ -66,12 +66,12 @@ export const formatTimestamp = (timestamp, formatString = "YYYY-MM-DD hh:mm:ss")
.replace(/hh/g, hour) .replace(/hh/g, hour)
.replace(/mm/g, minute) .replace(/mm/g, minute)
.replace(/ss/g, second); .replace(/ss/g, second);
} };
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) {
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({
title: `请填写正确电话号码!`, title: `请填写正确电话号码!`,
...@@ -81,39 +81,49 @@ export const validateForm=(formData,requiredFields) =>{ ...@@ -81,39 +81,49 @@ export const validateForm=(formData,requiredFields) =>{
return false; return false;
} }
} else if (!formData[field]) { } else if (!formData[field]) {
console.log(field);
uni.showToast({ uni.showToast({
title: `请填写${ title: `请填写${
field === "jobTypeText" field === "jobTypeText"
? "职位类型" ? "职位类型"
: field === "jobDesc" : field === "postitDesc"
? "职位描述" ? "职位描述"
: field === "jobName" : field === "jobName"
? "职位名称" ? "职位名称"
:field==='address' : field === "address"
?'工作地址' ? "工作地址"
:field==='identityRequirement' : field === "identityRequirement"
?'身份要求' ? "身份要求"
:field==='educationRequirement' : field === "educationRequirement"
?'学历要求' ? "学历要求"
:field==='maxAgeRequirement' : field === "maxAgeRequirement"
?'年龄要求' ? "年龄要求"
:field==='contactPerson' : field === "contactPerson"
?'联系人' ? "联系人"
:field==='jobType' : field === "jobType"
?'职位类型' ? "职位类型"
:field==='position' : field === "maxAgeRequirement"
?'职位' ? "年龄"
:field==='name' : field === "position"
?'姓名' ? "职位"
:field==='avatarPath' : field === "name"
?'头像' ? "名字"
:"" : field === "positionalTitle"
? "专业技术职称"
: field === "professionalCertificates"
? "职业等级证书"
: field === "specialCertificates"
? "特种作业证书"
: field === "avatarPath"
? "头像"
: "表单"
}!`, }!`,
icon: "none", icon: "none",
duration: 2000 duration: 2000
}); });
return false; return false;
} }
} }
return true; return true;
} };
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