Files
jobslink-user-clent/pages/recruit/subPage/task.vue
2025-08-05 18:28:07 +08:00

1059 lines
41 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!-- 发布任务 -->
<template>
<view>
<view class="u-demo-block__content">
<!-- 注意如果需要兼容微信小程序最好通过setRules方法设置rules规则 -->
<u--form labelPosition="left" :model="info" ref="form1" :rules="rules">
<view style="font-size: 30rpx; font-weight: bold; padding: 20rpx 0 0">岗位信息</view>
<u-form-item label="岗位名称" prop="jobName" borderBottom labelWidth="80" ref="item1">
<u--input v-model="info.jobName" border="none" placeholder="请输入岗位名称"></u--input>
</u-form-item>
<u-form-item
label="发布时间"
labelWidth="80"
prop="stime"
borderBottom
@click="
showStime = true;
hideKeyboard();
"
ref="item1"
>
<u--input
v-model="info.stime"
disabledColor="#ffffff"
placeholder="请选择发布时间"
border="none"
></u--input>
<u-icon slot="right" name="arrow-right"></u-icon>
</u-form-item>
<u-form-item
label="结束时间"
labelWidth="80"
prop="etime"
borderBottom
@click="
showEtime = true;
hideKeyboard();
"
ref="item2"
>
<u--input
v-model="info.etime"
disabledColor="#ffffff"
placeholder="请选择结束时间"
border="none"
></u--input>
<u-icon slot="right" name="arrow-right"></u-icon>
</u-form-item>
<view style="font-size: 30rpx; font-weight: bold; padding: 20rpx 0 0">岗位要求</view>
<u-form-item label="招聘人数" prop="peopleNum" borderBottom labelWidth="80" ref="item3">
<u--input
type="number"
v-model="info.peopleNum"
maxlength="7"
border="none"
placeholder="请输入招聘人数"
></u--input>
</u-form-item>
<u-form-item label="参考工资" prop="wage" borderBottom labelWidth="80" ref="item1">
<u--input
v-model="info.wage"
type="number"
maxlength="7"
@blur="onBlurWage"
border="none"
placeholder="请输入参考工资"
>
<template slot="suffix">
<u-form-item
class="wageunitLeft"
prop="wageUnitCategory"
labelWidth="0"
border="surround"
@click="
showWage = true;
hideKeyboard();
"
ref="item4"
>
<u--input
v-model="info.wageUnitCategoryName"
disabledColor="#ffffff"
placeholder="请选择单位"
style="width: 80px"
border="none"
></u--input>
<u-icon slot="right" name="arrow-right"></u-icon>
</u-form-item>
</template>
</u--input>
</u-form-item>
<!-- <u-form-item label="参考工资" prop="wage" labelWidth="80" borderBottom
@click="showWage = true; hideKeyboard()" ref="item4">
<u--input v-model="info.wage" disabledColor="#ffffff" placeholder="请选择参考工资"
border="none"></u--input>
<u-icon slot="right" name="arrow-right"></u-icon>
</u-form-item> -->
<u-form-item
label="行业类型"
prop="tradeNames"
labelWidth="80"
borderBottom
@click="
showTrade = true;
hideKeyboard();
"
ref="item5"
>
<u--input
v-model="info.tradeNames"
disabledColor="#ffffff"
placeholder="请选择行业类型"
border="none"
></u--input>
<u-icon slot="right" name="arrow-right"></u-icon>
</u-form-item>
<u-form-item
label="工种"
prop="skillNames"
labelWidth="80"
borderBottom
@click="
showSkills = true;
hideKeyboard();
"
ref="item6"
>
<u--input
v-model="info.skillNames"
disabledColor="#ffffff"
placeholder="请选择工种"
border="none"
></u--input>
<u-icon slot="right" name="arrow-right"></u-icon>
</u-form-item>
<u-form-item label="岗位描述" labelWidth="80" ref="item1"></u-form-item>
<view>
<u--textarea
v-model="info.jobDescription"
placeholder="参考示例:任务名称:保姆 工作内容: 一日三餐,卫生打扫 工资: 200元/天 年龄要求: 25-40岁 工作经验要求: 有过住家保姆经验, 会做饭,受过高等教育的优先"
count
height="100"
maxlength="200"
></u--textarea>
</view>
<u-form-item prop="jobDescription" borderBottom labelWidth="80" ref="item1"></u-form-item>
<view style="font-size: 30rpx; font-weight: bold; padding: 20rpx 0 0">人员要求</view>
<!-- <u-form-item label="人员属性" prop="userNature" labelWidth="80" borderBottom
@click="showNature = true; hideKeyboard()" ref="item7">
<u--input v-model="info.userNature" disabledColor="#ffffff" placeholder="请选择人员属性"
border="none"></u--input>
<u-icon slot="right" name="arrow-right"></u-icon>
</u-form-item> -->
<u-form-item
label="年龄要求"
prop="ageDesc"
labelWidth="80"
borderBottom
@click="
showAge = true;
hideKeyboard();
"
ref="item8"
>
<u--input
v-model="info.ageDesc"
disabledColor="#ffffff"
placeholder="请选择年龄要求"
border="none"
></u--input>
<u-icon slot="right" name="arrow-right"></u-icon>
</u-form-item>
<u-form-item
label="学历要求"
prop="educationLabel"
labelWidth="80"
borderBottom
@click="
showEdu = true;
hideKeyboard();
"
ref="item9"
>
<u--input
v-model="info.educationLabel"
disabledColor="#ffffff"
placeholder="请选择学历要求"
border="none"
></u--input>
<u-icon slot="right" name="arrow-right"></u-icon>
</u-form-item>
<u-form-item
label="经验要求"
prop="experienceDesc"
labelWidth="80"
borderBottom
@click="
showExpe = true;
hideKeyboard();
"
ref="item10"
>
<u--input
v-model="info.experienceDesc"
disabledColor="#ffffff"
placeholder="请选择学历要求"
border="none"
></u--input>
<u-icon slot="right" name="arrow-right"></u-icon>
</u-form-item>
<view style="font-size: 30rpx; font-weight: bold; padding: 20rpx 0 0">企业信息</view>
<u-form-item label="用工单位" prop="jobCompanyName" borderBottom labelWidth="80" ref="item1">
<u--input
v-model="info.jobCompanyName"
:disabled="true"
border="none"
disabledColor="#ffffff"
placeholder="请输入用工单位"
></u--input>
</u-form-item>
<u-form-item label="企业信用代码" prop="jobCompanyScale" borderBottom labelWidth="80" ref="item1">
<u--input
v-model="info.jobCompanyScale"
border="none"
:disabled="true"
disabledColor="#ffffff"
placeholder="请输入企业信用代码"
></u--input>
</u-form-item>
<u-form-item label="所属行业" prop="jobCompanyIndustry" borderBottom labelWidth="80" ref="item1">
<u--input
v-model="info.jobCompanyIndustry"
border="none"
:disabled="true"
disabledColor="#ffffff"
placeholder="请输入所属行业"
></u--input>
</u-form-item>
<u-form-item label="所属社区" prop="createDept" borderBottom labelWidth="80" ref="item1">
<custom-tree-select
style="width: 100%"
:listData="deptTreeData"
v-model="info.createDept"
data-label="title"
data-value="value"
boxStyle="border: 0; paddingLeft: 0;"
search
border
placeholder="请选择所属社区"
/>
</u-form-item>
<u-form-item label="企业性质" prop="jobCompanyNature" borderBottom labelWidth="80" ref="item1">
<u--input
v-model="info.jobCompanyNature"
border="none"
:disabled="true"
disabledColor="#ffffff"
placeholder="请输入企业性质"
></u--input>
</u-form-item>
<u-form-item label="企业介绍" labelWidth="80" ref="item1"></u-form-item>
<view>
<u--textarea
v-model="info.jobCompanyDescription"
placeholder="请输入企业介绍"
count
height="100"
maxlength="200"
></u--textarea>
</view>
<u-form-item prop="jobCompanyDescription" borderBottom labelWidth="80" ref="item1"></u-form-item>
<u-form-item label="联系人" prop="callName" borderBottom labelWidth="80" ref="item1">
<u--input v-model="info.callName" border="none" placeholder="请输入联系人"></u--input>
</u-form-item>
<u-form-item label="手机号" prop="callTel" borderBottom labelWidth="80" ref="item1">
<u--input v-model="info.callTel" border="none" placeholder="请输入手机号"></u--input>
</u-form-item>
<u-form-item label="座机" prop="callNumber" borderBottom labelWidth="80" ref="item1">
<u--input v-model="info.callNumber" border="none" placeholder="请输入座机"></u--input>
</u-form-item>
<u-form-item
label="注册地址"
labelWidth="70"
prop="cityId"
borderBottom
ref="item1"
@click="
showCityId = true;
hideKeyboard();
"
>
<PickerTree
placeholder="请选择注册地址"
:tree="area.data"
valueName="value"
:visibel="showCityId"
v-model="info.cityId"
@cancel="showCityId = false"
border="none"
returnValue="label"
:deep="3"
></PickerTree>
</u-form-item>
<u-form-item label="工作地址" prop="address" borderBottom labelWidth="80" ref="item1">
<view
class="addressinfo"
@click="selectMap"
:style="{ fontSize: '15px', color: info.address ? '#333333' : '#c0c4cc' }"
>
{{ info.address || '请选择' }}
</view>
<!-- <textarea placeholder-style="color: rgb(192, 196, 204); fontSize: 15px" @focus="selectMap"
v-model="info.address" placeholder="请输入详细地址" style="width: 100%;" /> -->
<!-- <lin-select :list="addressOptions" value-key="location" name-key="title" max-height="180"
:loading="loading" loading-text="数据加载中" placeholder="请输入详细地址" @input="selectInput"
v-model="info.address" @confirm="selectConfirm" /> -->
</u-form-item>
<!-- <view class="map">
<super-map ref="uMap" style="width: 100%;height: 100%;" :latitude="latitude" :longitude="longitude"
:open="true" :zoom="14" :min-zoom="10" :max-zoom="20" @regionchange="show = false"
:MapUrl="$config.supperMap" :flag-tip="false"></super-map>
</view> -->
<!-- <map class="map" :latitude="latitude" :longitude="longitude" :markers="covers"></map> -->
</u--form>
<u-button type="primary" text="提交" customStyle="margin-top: 50px" @click="submit"></u-button>
<u-button type="error" text="重置" customStyle="margin-top: 10px" @click="reset"></u-button>
<u-picker
:show="showWage"
ref="wagePicker"
keyName="label"
:columns="wageColumns"
@confirm="wageConfirm"
@cancel="wageClose"
@close="wageClose"
></u-picker>
<u-picker
:show="showTrade"
ref="tradePicker"
keyName="name"
:columns="tradeColumns"
@confirm="tradeConfirm"
@cancel="tradeClose"
@close="tradeClose"
></u-picker>
<u-picker
:show="showSkills"
ref="skillPicker"
keyName="name"
:columns="skillColumns"
@change="skillsChange"
@confirm="skillConfirm"
@cancel="skillClose"
@close="skillClose"
></u-picker>
<!-- <u-picker :show="showNature" ref="naturePicker" :columns="natureColumns"
@confirm="natureConfirm" @cancel="natureClose" @close="natureClose">
</u-picker> -->
<u-picker
:show="showAge"
ref="agePicker"
keyName="label"
:columns="ageColumns"
@confirm="ageConfirm"
@cancel="ageClose"
@close="ageClose"
></u-picker>
<u-picker
:show="showEdu"
ref="eduPicker"
keyName="label"
:columns="eduColumns"
@confirm="eduConfirm"
@cancel="eduClose"
@close="eduClose"
></u-picker>
<u-picker
:show="showExpe"
ref="expePicker"
keyName="label"
:columns="expeColumns"
@confirm="expeConfirm"
@cancel="expeClose"
@close="expeClose"
></u-picker>
<u-datetime-picker
:show="showStime"
:value="birthday"
mode="date"
closeOnClickOverlay
@confirm="stimeConfirm"
@cancel="stimeClose"
@close="stimeClose"
></u-datetime-picker>
<u-datetime-picker
:show="showEtime"
:value="birthday"
mode="date"
closeOnClickOverlay
@confirm="etimeConfirm"
@cancel="etimeClose"
@close="etimeClose"
></u-datetime-picker>
<sylj-selectLocation
ref="selectLocationPop"
@ok="selectedOk"
:apikey="$config.apiKey"
></sylj-selectLocation>
</view>
</view>
</template>
<script>
import dic from '@/common/dic.js';
import { submitInfo, getWorktypesBaseList, findTradeList, getDictionary, getDeptAllTree } from '@/api/userrecruit.js';
import PickerTree from './enterpriceCertification/pickerTree.vue';
import syljSelectLocation from '@/components/sylj-selectLocation/sylj-selectLocation.vue';
import { mapGetters } from 'vuex';
import { querySearch } from '../../../api/map';
import { debounce } from '@/untils/tools.js';
export default {
data() {
return {
deptTreeData: [],
addressOptions: [],
loading: false,
latitude: 31.05, //中心点
longitude: 104.2,
covers: [
{
//marker标记位置
id: 0,
latitude: 0,
longitude: 0,
// width:30,
// height:30,
iconPath: '../../../static/img/location.png',
},
],
value2: '招工内容',
fileList1: [],
disabled1: false,
tips: '',
value: '',
showCalendar: false,
showStime: false,
showCityId: false,
showEtime: false,
info: {
jobName: '', // 招工名称
stime: '', // 发布时间
etime: '', // 结束时间
peopleNum: '', // 招聘人数
wage: '', // 参考工资
wageUnitCategory: '', // 工资单位
wageUnitCategoryName: '',
tradeId: '', // 行业类型id
tradeNames: '', // 行业类型名称
worktypeIds: '', // 工种一级id
skillIds: '', // 工种二级id
worktypeNames: '', // 工种名称
skillNames: '', // 工种二级名称
jobDescription: '', // 任务描述
// userNature: '', // 人员属性
educationLabel: dic.eduArr[0][0].label, // 学历要求前端显示
ageDesc: dic.ageArr[0][0].label, // 年龄要求
education: dic.eduArr[0][0].value, // 学历要求
experienceDesc: dic.expeArr[0][0].label, // 经验要求
cityId: '',
jobCompanyName: '', // 用工单位
jobCompanyScale: '', // 企业信用代码
jobCompanyIndustry: '', // 所属行业
jobCompanyNature: '', // 企业性质
jobCompanyDescription: '', // 企业介绍
callName: '', // 联系人
callTel: '', // 手机号
callNumber: '', // 座机
address: '', // 公司详细地址
createDept: [],
// userInfo: {
// name: '楼兰',
// sex: '',
// birthday: ''
// },
// radiovalue1: '苹果',
// checkboxValue1: [],
// intro: '',
// code: ''
},
showWage: false, // 参考工资选项是否展示
showTrade: false, // 行业类型是否显示
showSkills: false, // 工种类型是否显示
showNature: false, // 人员属性
showAge: false, // 年龄要求
showEdu: false, // 学历要求
showExpe: false, // 经验要求
birthday: Number(new Date()),
wageColumns: dic.wageUnitCategoryState,
tradeColumns: dic.tradeArr,
skillColumns: [],
skillColumnsIndex: [0, 0],
natureColumns: dic.natureArr,
ageColumns: dic.ageArr,
eduColumns: dic.eduArr,
expeColumns: dic.expeArr,
wallMaxAndMin: [],
rules: {
jobName: {
type: 'string',
required: true,
message: '请输入招工名称',
trigger: ['change'],
},
stime: {
type: 'string',
required: true,
message: '请输入开始时间',
trigger: ['change'],
},
etime: {
type: 'string',
required: true,
message: '请选择结束时间',
trigger: ['change'],
},
peopleNum: {
type: 'number',
required: true,
message: '请输入招聘人数',
trigger: ['change'],
},
wage: {
type: 'string',
required: true,
message: '请输入参考工资',
trigger: ['change'],
},
tradeNames: {
type: 'string',
required: true,
message: '请选择行业类型',
trigger: ['change'],
},
skillNames: {
type: 'string',
required: true,
message: '请选择工种',
trigger: ['change'],
},
jobDescription: {
type: 'string',
min: 20,
required: true,
message: '请输入岗位描述最少20个字符',
trigger: ['change'],
},
ageDesc: {
type: 'string',
required: true,
message: '请选择年龄',
trigger: ['change'],
},
educationLabel: {
type: 'string',
required: true,
message: '请选择学历',
trigger: ['change'],
},
experienceDesc: {
type: 'string',
required: true,
message: '请选择经验要求',
trigger: ['change'],
},
cityId: {
type: 'string',
required: true,
message: '请选择注册地址',
trigger: ['change'],
},
jobCompanyName: {
type: 'string',
required: true,
message: '请输入用工单位',
trigger: ['change'],
},
jobCompanyScale: {
type: 'string',
required: true,
message: '请输入企业信用代码',
trigger: ['change'],
},
jobCompanyIndustry: {
type: 'string',
required: true,
message: '请输入所属行业',
trigger: ['change'],
},
jobCompanyNature: {
type: 'string',
required: true,
message: '请输入企业性质',
trigger: ['change'],
},
jobCompanyDescription: {
type: 'string',
required: true,
message: '请输入企业介绍',
trigger: ['change'],
},
callName: {
type: 'string',
required: true,
message: '请输入联系人',
trigger: ['change'],
},
callTel: {
type: 'string',
required: true,
message: '请输入手机号',
trigger: ['change'],
},
address: {
type: 'string',
required: true,
message: '请输入工作地址',
trigger: ['change'],
},
createDept: {
type: 'array',
required: true,
message: '请选择所属社区',
trigger: ['change'],
},
},
};
},
components: {
PickerTree,
},
props: {
company: {
default: null,
},
},
computed: {
...mapGetters(['area']),
},
created() {
const { id: staId, label: staLabel } = dic.wageUnitCategoryState[0].filter((item) => item.id == 3)[0];
this.info.wageUnitCategory = staId;
this.info.wageUnitCategoryName = staLabel;
this.getTreeDept();
if (this.company) {
this.backfill(this.company);
}
this.getWorkTypes();
this.dictionary();
},
watch: {
company(val) {
if (!val) return;
this.backfill(val);
},
},
methods: {
selectedOk(data) {
const { infomation, location, name, address } = data;
const { lon, lat } = location;
this.latitude = lat;
this.longitude = lon;
this.info.address = `${data.address}${data.name && '(' + data.name + ')'}`;
},
selectMap() {
const that = this;
// uni.getLocation({
// type: 'wgs84',
// success: function(res) {
// console.log(res)
// uni.hideLoading();
// console.log('当前位置的经度:' + res.longitude);
// console.log('当前位置的纬度:' + res.latitude);
// // that.$refs.selectLocationPop.open(res.longitude, res.latitude, that.$config.apiKey);
// },
// fail: function(err) {
// console.log('获取失败');
// uni.hideLoading();
// },
// });
that.$refs.selectLocationPop.open(that.longitude, that.latitude, that.$config.apiKey);
console.log(this.latitude, this.longitude);
console.log('聚焦');
},
async getTreeDept() {
let resData = await getDeptAllTree();
if (resData.data.code === 200) {
this.deptTreeData = resData.data.data;
console.log('dept', resData.data.data);
}
},
selectInput: debounce(function (val) {
// querySearch(val, '3CXBZ-SKHCL-QC6PH-MLJAE-ZYCFK-6MBR5').then(res => {
// console.log(res)
// if (res.data.status === 0) {
// this.addressOptions = res.data.data;
// }
// });
}, 600),
selectConfirm() {},
onBlurWage(value) {
const val = this.wallMaxAndMin;
if (!val.length) {
return;
}
switch (true) {
case value < Math.min(...val):
this.info.wage = String(Math.min(...val));
return;
case value > Math.max(...val):
this.info.wage = String(Math.max(...val));
return;
}
},
async dictionary() {
let params = {
code: `wages_limit_${this.info.wageUnitCategory}`,
};
this.info.wage = '';
let resData = await getDictionary(params);
if (resData.data.code === 200) {
const arr = resData.data.data.map((item) => Number(item.dictKey));
this.wallMaxAndMin = arr;
}
},
async backfill(info) {
console.log(info, 'bos');
if (info.reviewState === 9) {
this.info.wage = info.wage;
this.info.jobName = info.jobName;
this.info.stime = info.stime;
this.info.etime = info.etime;
this.info.peopleNum = info.peopleNum;
this.info.tradeId = info.tradeId;
this.info.tradeNames = info.tradeNames;
this.info.worktypeIds = info.worktypeIds;
this.info.skillNames = info.skillNames;
this.info.jobDescription = info.jobDescription;
this.info.ageDesc = info.ageDesc;
this.info.education = info.education;
this.info.educationLabel = dic.eduArr[0].filter((vitem) => vitem.value === info.education)[0].label;
this.info.experienceDesc = info.experienceDesc;
this.info.cityId = info.cityId;
this.info.jobCompanyName = info.jobCompanyName;
this.info.jobCompanyScale = info.jobCompanyScale;
this.info.jobCompanyIndustry = info.jobCompanyIndustry;
this.info.jobCompanyNature = info.jobCompanyNature;
this.info.jobCompanyDescription = info.jobCompanyDescription;
this.info.createDept = [String(info.createDept)];
this.info.callName = info.callName;
this.info.callTel = info.callTel;
this.info.callNumber = info.callNumber;
this.info.address = info.address;
} else {
this.info.jobCompanyScale = info.companyTid;
this.info.jobCompanyName = info.comname;
this.info.callName = info.manager;
this.info.callTel = info.telphone;
this.info.jobCompanyDescription = info.companyDesc;
this.info.jobCompanyNature = info.companyNature;
// this.info.tradeId = info.tradeId
// this.info.tradeNames = info.tradeNames
this.info.jobCompanyIndustry = info.tradeNames;
}
},
wageConfirm(e) {
const { value } = e;
this.info.wageUnitCategoryName = value[0].label;
this.info.wageUnitCategory = value[0].id;
this.showWage = false;
this.dictionary();
},
tradeConfirm(e) {
const { value } = e;
this.info.tradeId = value[0].id;
this.info.tradeNames = value[0].name;
this.showTrade = false;
},
skillConfirm(e) {
const { value, indexs } = e;
this.skillColumnsIndex = indexs;
this.info.skillNames = this.getSkilDataNameWhereId(indexs).join('-');
this.showSkills = false;
},
ageConfirm(e) {
const { value } = e;
this.info.ageDesc = value[0].label;
this.showAge = false;
},
eduConfirm(e) {
const { value } = e;
this.info.education = value[0].value;
this.info.educationLabel = value[0].label;
this.showEdu = false;
},
expeConfirm(e) {
const { value } = e;
this.info.experienceDesc = value[0].label;
this.showExpe = false;
},
expeClose() {
this.showExpe = false;
},
eduClose() {
this.showEdu = false;
},
ageClose() {
this.showAge = false;
},
skillClose() {
this.showSkills = false;
},
wageClose(e) {
this.showWage = false;
},
tradeClose(e) {
this.showTrade = false;
},
sexSelect(e) {
this.info.userInfo.sex = e.name;
this.$refs.form1.validateField('userInfo.sex');
},
change(e) {
// console.log(e);
},
formatter(day) {
const d = new Date();
let month = d.getMonth() + 1;
const date = d.getDate();
if (day.month == month && day.day == date + 3) {
day.bottomInfo = '有优惠';
day.dot = true;
}
return day;
},
calendarConfirm(e) {
this.showCalendar = false;
this.info.hotel = `${e[0]} / ${e[e.length - 1]}`;
this.$refs.form1.validateField('hotel');
},
codeChange(text) {
this.tips = text;
},
getCode() {
if (this.$refs.uCode.canGetCode) {
// 模拟向后端请求验证码
uni.showLoading({
title: '正在获取验证码',
});
setTimeout(() => {
uni.hideLoading();
// 这里此提示会被this.start()方法中的提示覆盖
uni.$u.toast('验证码已发送');
// 通知验证码组件内部开始倒计时
this.$refs.uCode.start();
}, 2000);
} else {
uni.$u.toast('倒计时结束后再发送');
}
},
calendarClose() {
this.showCalendar = false;
this.$refs.form1.validateField('hotel');
},
stimeClose() {
this.showStime = false;
this.$refs.form1.validateField('userInfo.birthday');
},
stimeConfirm(e) {
this.showStime = false;
this.info.stime = uni.$u.timeFormat(e.value, 'yyyy-mm-dd') + ' 00:00:00';
this.$refs.form1.validateField('userInfo.birthday');
},
etimeClose() {
this.showEtime = false;
this.$refs.form1.validateField('userInfo.birthday');
},
etimeConfirm(e) {
this.showEtime = false;
this.info.etime = uni.$u.timeFormat(e.value, 'yyyy-mm-dd') + ' 23:59:59';
this.$refs.form1.validateField('userInfo.birthday');
},
submit() {
// 如果有错误会在catch中返回报错信息数组校验通过则在then中返回true
// this.$refs.form1.validate().then(res => {
// uni.$u.toast('校验通过')
// }).catch(errors => {
// uni.$u.toast('校验失败')
// })
let vali = [''];
const names = this.getSkilDataNameWhereId(this.skillColumnsIndex, true);
const ids = this.getSkilDataNameWhereId(this.skillColumnsIndex, false);
this.info.jobType = 0;
let params = {
...this.info,
worktypeIds: ids[0], // 工种一级id
skillIds: ids[1], // 工种二级id
worktypeNames: names[0], // 工种名称
skillNames: names[1], // 工种二级名称
};
if (this.company.reviewState === 9) {
params.id = this.company.id;
}
let that = this;
this.$refs.form1
.validate()
.then((res) => {
if (!this.info.wageUnitCategory) {
return this.$api.msg('请选择参考工资单位');
}
params.lon = that.longitude;
params.lat = that.latitude;
params.createDept = params.createDept[0];
submitInfo(params).then((res) => {
if (res.data.code == 200) {
that.reset();
uni.$u.toast('发布成功');
setTimeout(() => {
this.navTo('/pages/recruit/subPage/index');
}, 1000);
}
});
})
.catch((errors) => {
uni.$u.toast('请完善内容');
});
},
reset() {
// jobCompanyName: '', // 用工单位
// jobCompanyScale: '', // 企业信用代码
// jobCompanyIndustry: '', // 所属行业
// jobCompanyNature: '', // 企业性质
// jobCompanyDescription: '', // 企业介绍
const validateList = [
'jobName',
'stime',
'etime',
'peopleNum',
'wage',
'tradeId',
'tradeNames',
'worktypeIds',
'skillIds',
'worktypeNames',
'skillNames',
'jobDescription',
'ageDesc',
'education',
'educationLabel',
'experienceDesc',
'cityId',
'jobCompanyName',
'jobCompanyScale',
'jobCompanyIndustry',
'jobCompanyNature',
'jobCompanyDescription',
'createDept',
'callName',
'callTel',
'callNumber',
'address',
];
this.$refs.form1.resetFields();
this.$refs.form1.clearValidate();
setTimeout(() => {
this.$refs.form1.clearValidate(validateList);
this.backfill(this.company);
// 或者使用 this.$refs.form1.clearValidate()
}, 10);
},
hideKeyboard() {
uni.hideKeyboard();
},
skillsChange(e) {
const { columnIndex, index, picker = this.$refs.uPicker } = e;
let [index1, index2] = this.skillColumnsIndex;
switch (columnIndex) {
case 0:
index1 = index;
index2 = 0;
break;
case 1:
index2 = index;
break;
}
const Indexs = [index1, index2];
picker.setColumnValues(
1,
this.skillData[index1].child.map((item) => item.name)
);
this.skillColumnsIndex = Indexs;
},
getSkilDataNameWhereId(Indexs, type = true) {
if (!this.skillData) {
return;
}
const [index1, index2] = Indexs;
const work1 = this.skillData[index1];
const work2 = work1.child[index2];
if (type) {
return [work1.name, work2.name];
} else {
return [work1.id, work2.id];
}
},
async getWorkTypes() {
let resData = await getWorktypesBaseList({
type: 1,
});
if (resData.data.code === 200) {
const { data } = resData.data;
const arr = [];
// 1、 空间换时间策略/user/userrecruit/saveApp
arr.push(data.map((item) => item.name));
arr.push(data[0].child.map((item) => item.name));
this.skillColumnsIndex = [0, 0];
this.skillData = data;
this.skillColumns = arr;
}
},
},
};
</script>
<style>
.map {
width: 100%;
height: 350rpx;
margin-top: 30rpx;
}
.wageunitLeft {
border-left: 3rpx solid rgb(192, 196, 204, 0.6);
padding-left: 20rpx;
}
/deep/.wageunitLeft .u-form-item__body {
padding: 0;
}
.addressinfo {
width: 100%;
height: fit-content;
min-height: 21px;
}
</style>