|
@@ -3,7 +3,7 @@
|
|
|
<view class="f-straight wrapper">
|
|
|
<uni-forms ref="form" :modelValue="formData" :rules="rules" validateTrigger="bind" label-width="90px" label-align="right">
|
|
|
<uni-forms-item label="招聘类型" name="type" required>
|
|
|
- <uni-data-picker popup-title="请选择招聘类型" v-model="formData.type" :localdata="jobType" :clear-icon="false" :map="{ text: 'key', value: 'value'}"></uni-data-picker>
|
|
|
+ <uni-data-picker popup-title="请选择招聘类型" v-model="formData.type" :localdata="jobType" :clear-icon="false" :map="{ text: 'key', value: 'value'}" @change="typeChange"></uni-data-picker>
|
|
|
</uni-forms-item>
|
|
|
<uni-forms-item label="学历要求" name="eduType" required>
|
|
|
<uni-data-picker popup-title="请选择学历要求" v-model="formData.eduType" :localdata="dictObj?.edu || []" :clear-icon="false" :map="{ text: 'label', value: 'value'}"></uni-data-picker>
|
|
@@ -11,17 +11,17 @@
|
|
|
<uni-forms-item label="工作经验" name="expType" required>
|
|
|
<uni-data-picker popup-title="请选择工作经验" v-model="formData.expType" :localdata="dictObj?.exp || []" :clear-icon="false" :map="{ text: 'label', value: 'value'}"></uni-data-picker>
|
|
|
</uni-forms-item>
|
|
|
- <uni-forms-item label="最低薪资" name="payFrom" required label-width="90px">
|
|
|
+ <uni-forms-item label="最低薪资" name="payFrom" :required="Boolean(!salary?.length)" label-width="90px">
|
|
|
<view class="d-flex">
|
|
|
- <uni-number-box v-model="formData.payFrom" :disabled="salary?.length" :min="1" :max="999999999" :step="1000" :width="100" @change="payChange"></uni-number-box>
|
|
|
- <uni-data-checkbox v-model="salary" multiple :localdata="[{ text: '薪资面议', value: 1 }]" selectedColor="#00B760" class="ss-m-l-20" @change="salaryChange"></uni-data-checkbox>
|
|
|
+ <uni-number-box v-model="formData.payFrom" :disabled="Boolean(salary?.length)" :min="1" :max="999999999" :step="salaryStep" :width="100" @change="payChange"></uni-number-box>
|
|
|
+ <uni-data-checkbox v-model="salary" multiple :localdata="[{ text: '薪资面议', value: 1 }]" selectedColor="#00B760" class="ss-m-l-20" ></uni-data-checkbox>
|
|
|
</view>
|
|
|
</uni-forms-item>
|
|
|
- <uni-forms-item label="最高薪资" name="payTo" required label-width="90px">
|
|
|
- <uni-number-box v-model="formData.payTo" :disabled="salary?.length" :min="payToMin" :max="999999999" :step="1000" :width="100"></uni-number-box>
|
|
|
+ <uni-forms-item label="最高薪资" name="payTo" :required="Boolean(!salary?.length)" label-width="90px">
|
|
|
+ <uni-number-box v-model="formData.payTo" :disabled="Boolean(salary?.length)" :min="payToMin" :max="999999999" :step="salaryStep" :width="100"></uni-number-box>
|
|
|
</uni-forms-item>
|
|
|
- <uni-forms-item label="计薪时段" name="payUnit" required>
|
|
|
- <uni-data-picker popup-title="请选择计薪时段" v-model="formData.payUnit" :orderby="salary?.length" :localdata="dictObj?.payUnit || []" :clear-icon="false" :map="{ text: 'label', value: 'value'}"></uni-data-picker>
|
|
|
+ <uni-forms-item label="计薪时段" name="payUnit" :required="Boolean(!salary?.length)">
|
|
|
+ <uni-data-picker popup-title="请选择计薪时段" :placeholder="Boolean(salary?.length) ? '薪资面议' : '请选择'" v-model="formData.payUnit" :readonly="Boolean(salary?.length)" :localdata="dictObj?.payUnit || []" :clear-icon="false" :map="{ text: 'label', value: 'value'}"></uni-data-picker>
|
|
|
</uni-forms-item>
|
|
|
<uni-forms-item label="工作城市" name="areaId" required label-width="90px">
|
|
|
<uni-data-picker popup-title="请选择工作城市" v-model="formData.areaId" :localdata="dictObj?.areaTreeData || []" :clear-icon="false" :map="{ text: 'name', value: 'id'}"></uni-data-picker>
|
|
@@ -29,26 +29,54 @@
|
|
|
<uni-forms-item required label="详情地址" name="address">
|
|
|
<uni-easyinput v-model="formData.address" placeholder="请填写详细地址"></uni-easyinput>
|
|
|
</uni-forms-item>
|
|
|
+ <uni-forms-item label="职位关键字" name="tagList">
|
|
|
+ <view class="tagsBox" @tap="portraitOpen">
|
|
|
+ <view class="tags" v-if="tagList?.length">
|
|
|
+ <view
|
|
|
+ v-for="tag in tagList"
|
|
|
+ :key="tag"
|
|
|
+ class="tag"
|
|
|
+ >
|
|
|
+ {{ tag }}
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ <uni-icons
|
|
|
+ type="icon-Edit"
|
|
|
+ color="#00B760"
|
|
|
+ class="ss-m-t-20"
|
|
|
+ custom-prefix="iconfont"
|
|
|
+ size="18"
|
|
|
+ ></uni-icons>
|
|
|
+ </view>
|
|
|
+ </uni-forms-item>
|
|
|
</uni-forms>
|
|
|
+ <portrait ref="portraitRef" @submit="portraitSubmit"></portrait>
|
|
|
</view>
|
|
|
</template>
|
|
|
<script setup>
|
|
|
-import { ref } from 'vue'
|
|
|
+import { ref, unref } from 'vue'
|
|
|
import { dictObj } from '@/utils/position.js'
|
|
|
import { getEnterprisePubJobTypePermission } from '@/api/new/position'
|
|
|
-
|
|
|
-console.log('dictObj:', dictObj)
|
|
|
+import portrait from './portrait.vue'
|
|
|
+const emit = defineEmits(['requireTypeChange'])
|
|
|
+const props = defineProps({
|
|
|
+ data: {
|
|
|
+ type: Object,
|
|
|
+ default: () => {}
|
|
|
+ }
|
|
|
+})
|
|
|
|
|
|
const formData = ref({
|
|
|
- type: '',
|
|
|
- eduType: '',
|
|
|
- expType: '',
|
|
|
- payFrom: '',
|
|
|
- payTo: '',
|
|
|
- payUnit: '',
|
|
|
- areaId: '',
|
|
|
- address: '',
|
|
|
+ type: props.data?.type || '',
|
|
|
+ eduType: props.data?.eduType || '',
|
|
|
+ expType: props.data?.expType || '',
|
|
|
+ payFrom: props.data?.payFrom || '',
|
|
|
+ payTo: props.data?.payTo || '',
|
|
|
+ payUnit: props.data?.payUnit || '',
|
|
|
+ areaId: props.data?.areaId || '',
|
|
|
+ address: props.data?.address || '',
|
|
|
})
|
|
|
+const tagList = ref(props.data?.tagList?.length ? props.data.tagList : [])
|
|
|
|
|
|
const rules = {
|
|
|
type:{
|
|
@@ -60,59 +88,59 @@ const rules = {
|
|
|
expType:{
|
|
|
rules: [{required: true, errorMessage: '请选择工作经验' }]
|
|
|
},
|
|
|
- // payFrom:{
|
|
|
- // rules: salary.value?.length ? [] : [
|
|
|
- // {
|
|
|
- // required: true,
|
|
|
- // errorMessage: '请填写最低薪资',
|
|
|
- // },
|
|
|
- // {
|
|
|
- // validateFunction: function (rule, value, data, callback) {
|
|
|
- // if (value < 1) {
|
|
|
- // callback('数额不得小于1')
|
|
|
- // }
|
|
|
- // return true
|
|
|
- // }
|
|
|
- // },
|
|
|
- // {
|
|
|
- // validateFunction: function (rule, value, data, callback) {
|
|
|
- // if (!formData.value?.payTo || (Number(value) < formData.value.payTo ? Number(formData.value.payTo) : 0)) {
|
|
|
- // return true
|
|
|
- // } else {
|
|
|
- // callback('应低于最高薪资')
|
|
|
- // }
|
|
|
- // }
|
|
|
- // }
|
|
|
- // ]
|
|
|
- // },
|
|
|
- // payTo:{
|
|
|
- // rules: salary.value?.length ? [] : [
|
|
|
- // {
|
|
|
- // required: true,
|
|
|
- // errorMessage: '请填写最高薪资',
|
|
|
- // },
|
|
|
- // {
|
|
|
- // validateFunction: function (rule, value, data, callback) {
|
|
|
- // if (value < 1) {
|
|
|
- // callback('数额不得小于1')
|
|
|
- // }
|
|
|
- // return true
|
|
|
- // }
|
|
|
- // },
|
|
|
- // {
|
|
|
- // validateFunction: function (rule, value, data, callback) {
|
|
|
- // if (!formData.value?.payFrom || (Number(value) > formData.value?.payFrom ? Number(formData.value?.payFrom) : 0)) {
|
|
|
- // return true
|
|
|
- // } else {
|
|
|
- // callback('应高于最低薪资')
|
|
|
- // }
|
|
|
- // }
|
|
|
- // }
|
|
|
- // ]
|
|
|
- // },
|
|
|
- // payUnit: salary.value?.length ? { rules: null } : {
|
|
|
- // rules: [{required: true, errorMessage: '请选择计薪时段' }]
|
|
|
- // },
|
|
|
+ payFrom:{
|
|
|
+ rules: [
|
|
|
+ {
|
|
|
+ required: true,
|
|
|
+ errorMessage: '请填写最低薪资',
|
|
|
+ },
|
|
|
+ {
|
|
|
+ validateFunction: function (rule, value, data, callback) {
|
|
|
+ if (value < 1) {
|
|
|
+ callback('数额不得小于1')
|
|
|
+ }
|
|
|
+ return true
|
|
|
+ }
|
|
|
+ },
|
|
|
+ {
|
|
|
+ validateFunction: function (rule, value, data, callback) {
|
|
|
+ if (!formData.value?.payTo || (Number(value) < formData.value.payTo ? Number(formData.value.payTo) : 0)) {
|
|
|
+ return true
|
|
|
+ } else {
|
|
|
+ callback('应低于最高薪资')
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ ]
|
|
|
+ },
|
|
|
+ payTo:{
|
|
|
+ rules: [
|
|
|
+ {
|
|
|
+ required: true,
|
|
|
+ errorMessage: '请填写最高薪资',
|
|
|
+ },
|
|
|
+ {
|
|
|
+ validateFunction: function (rule, value, data, callback) {
|
|
|
+ if (value < 1) {
|
|
|
+ callback('数额不得小于1')
|
|
|
+ }
|
|
|
+ return true
|
|
|
+ }
|
|
|
+ },
|
|
|
+ {
|
|
|
+ validateFunction: function (rule, value, data, callback) {
|
|
|
+ if (!formData.value?.payFrom || (Number(value) > formData.value?.payFrom ? Number(formData.value?.payFrom) : 0)) {
|
|
|
+ return true
|
|
|
+ } else {
|
|
|
+ callback('应高于最低薪资')
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ ]
|
|
|
+ },
|
|
|
+ payUnit: {
|
|
|
+ rules: [{required: true, errorMessage: '请选择计薪时段' }]
|
|
|
+ },
|
|
|
areaId:{
|
|
|
rules: [{required: true, errorMessage: '请选择工作城市' }]
|
|
|
},
|
|
@@ -121,14 +149,6 @@ const rules = {
|
|
|
},
|
|
|
}
|
|
|
|
|
|
-// 薪资面议
|
|
|
-const salary = ref(false)
|
|
|
-const salaryChange = (e) => {
|
|
|
- // const value = e.detail.value.length ? e.detail.value[0] : ''
|
|
|
- // if (value) {
|
|
|
- // }
|
|
|
-}
|
|
|
-
|
|
|
const jobType = ref([])
|
|
|
const getJobTypeList = async () => {
|
|
|
const res = await getEnterprisePubJobTypePermission()
|
|
@@ -136,14 +156,56 @@ const getJobTypeList = async () => {
|
|
|
}
|
|
|
getJobTypeList()
|
|
|
|
|
|
-const payToMin = ref(1)
|
|
|
+// 薪资面议
|
|
|
+const salaryStep = 1000
|
|
|
+const payToMin = ref(0)
|
|
|
const payChange = (val) => {
|
|
|
payToMin.value = val
|
|
|
- if (val > formData.value.payTo) formData.value.payTo = val
|
|
|
+ if (val > formData.value.payTo) formData.value.payTo = val + salaryStep
|
|
|
+}
|
|
|
+
|
|
|
+const portraitRef = ref()
|
|
|
+const portraitOpen = () => {
|
|
|
+ portraitRef.value?.handleOpen()
|
|
|
+}
|
|
|
+const portraitSubmit = (arr) => {
|
|
|
+ tagList.value = arr?.length ? arr : []
|
|
|
+}
|
|
|
+
|
|
|
+const typeChange = (e) => {
|
|
|
+ const bool = Boolean(e?.detail?.value?.length ? e.detail.value[0]?.text === '实习' : false)
|
|
|
+ emit('requireTypeChange', bool)
|
|
|
+}
|
|
|
+
|
|
|
+const form = ref()
|
|
|
+const salary = ref(props.data?.payUnit === null ? [1] : [])
|
|
|
+const getQuery = async () => {
|
|
|
+ const valid = await unref(form).validate()
|
|
|
+ if (!valid) return
|
|
|
+ const obj = {
|
|
|
+ hirePrice: 0,
|
|
|
+ hire: false,
|
|
|
+ salary: Boolean(salary.value?.length),
|
|
|
+ tagList: tagList.value,
|
|
|
+ ...formData.value
|
|
|
+ }
|
|
|
+
|
|
|
+ obj && Object.keys(obj).length && Object.keys(obj).forEach(key => {
|
|
|
+ if (['areaId', 'eduType', 'expType'].includes(key) && obj[key] === -1) obj[key] = null
|
|
|
+ if (obj.salary && ['payFrom', 'payTo', 'payUnit'].includes(key)) obj[key] = null
|
|
|
+ })
|
|
|
+
|
|
|
+ console.log('岗位要求:', obj)
|
|
|
+ return obj
|
|
|
}
|
|
|
|
|
|
+defineExpose({
|
|
|
+ getQuery
|
|
|
+})
|
|
|
+
|
|
|
</script>
|
|
|
<style lang="scss" scoped>
|
|
|
+$px: 30rpx;
|
|
|
.positionTemplate {
|
|
|
display: flex;
|
|
|
.picker {
|
|
@@ -155,9 +217,22 @@ const payChange = (val) => {
|
|
|
line-height: 34px;
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
-// :deep(.uni-forms-item__content) {
|
|
|
-// max-width: 100%;
|
|
|
-// overflow: hidden;
|
|
|
-// }
|
|
|
+.tagsBox {
|
|
|
+ display: flex;
|
|
|
+ flex-wrap: wrap;
|
|
|
+ .tags {
|
|
|
+ padding-top: 10px;
|
|
|
+ display: flex;
|
|
|
+ flex-wrap: wrap;
|
|
|
+ .tag {
|
|
|
+ margin: 0 10rpx 10rpx 0;
|
|
|
+ border: 2rpx solid #00B760;
|
|
|
+ color: #00B760;
|
|
|
+ white-space: nowrap;
|
|
|
+ padding: 4rpx 10rpx;
|
|
|
+ border-radius: 10rpx;
|
|
|
+ font-size: 24rpx;
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
</style>
|