Ver código fonte

Merge branch 'dev' of https://git.citupro.com/zhengnaiwen_citu/menduner into dev

lifanagju_citu 7 meses atrás
pai
commit
4ed223b8e6

+ 3 - 3
src/views/recruit/enterprise/hirePosition/components/add.vue

@@ -70,17 +70,17 @@ const handleSave = async () => {
   const baseInfo = await baseInfoRef.value[0].getQuery()
   if (baseInfo === 'failed') return
   const requirement = await jobRequirementsRef.value[0].getQuery()
-  if (!baseInfo.expireTime) {
-    Snackbar.warning('请选择职位过期时间')
+  if (!baseInfo.expireTime || !baseInfo.hirePrice) {
+    Snackbar.warning('请将必填项填写完整')
     window.scrollTo({ top: 0, behavior: 'smooth' })
     return
   }
+  if (!requirement?.areaId) return Snackbar.warning('请选择工作城市')
   if (!baseInfo || !requirement) return Snackbar.warning('请将信息填写完整')
   
   submitParams = Object.assign(baseInfo, requirement, { currency_type: 0 }) // currency_type: 写死0(人民币)
   if (route.query && route.query.id) submitParams.id = route.query.id // 有id则为编辑
 
-  if (!baseInfo.hirePrice) return Snackbar.warning('请填写点数!')
   saveEmit(submitParams) // 正常发布,到列表中发起支付(暂定解决方案)
 }
 

+ 1 - 1
src/views/recruit/enterprise/hirePosition/components/baseInfo.vue

@@ -78,7 +78,7 @@ const items = ref({
       type: 'number',
       key: 'hirePrice',
       value: null,
-      label: '请填写点数 (1赏金=10点数,点数填入不得少于10且为10的倍数)',
+      label: '请填写点数 * (1赏金=10点数,点数填入不得少于10且为10的倍数)',
       suffix: '点',
       hideDetails: true,
       change: val => hirePriceChange(val, 'hirePrice')

+ 6 - 48
src/views/recruit/enterprise/hirePosition/components/jobRequirements.vue

@@ -56,7 +56,6 @@ defineOptions({ name: 'position-add-job-requirements'})
 import CtForm from '@/components/CtForm'
 import { reactive, ref, watch } from 'vue'
 import { getDict } from '@/hooks/web/useDictionaries'
-import { cityToProvince } from '@/utils/areaDeal'
 import { getTagTreeDataApi } from '@/api/enterprise'
 
 const props = defineProps({
@@ -164,33 +163,15 @@ const items = ref({
       items: []
     },
     {
-      type: 'autocomplete',
-      key: 'workAreaProvinceId',
-      value: null,
-      label: '工作城市:省 *',
-      outlined: true,
-      itemText: 'name',
-      itemValue: 'id',
-      returnSelect: true,
-      noParam: true,
-      col: 6,
-      flexStyle: 'mr-3',
-      rules: [v => !!v || '请选择工作城市:省'],
-      items: [],
-      change: null
-    },
-    {
-      type: 'autocomplete',
+      type: 'cascade',
       key: 'areaId',
       value: null,
-      label: '工作城市:市 *',
-      outlined: true,
+      default: null,
+      label: '工作城市 *',
       itemText: 'name',
       itemValue: 'id',
-      col: 6,
-      rules: [v => !!v || '请选择工作城市:市'],
+      clearable: false,
       items: [],
-      change: null
     },
     {
       type: 'text',
@@ -225,25 +206,13 @@ const getDictData = async () => {
   })
 }
 
-const provinceChange = (value, val, obj) => {
-  const item = items.value.options.find(e => e.key === 'areaId')
-  if (!item) return
-  item.items = obj.children || []
-  item.value = null
-}
 getDict('areaTreeData', null, 'areaTreeData').then(({ data }) => {
   data = data?.length && data || []
   if (!data?.length) return console.error('areaTreeData获取失败!')
-  // const china = data.find(e => e.id === '1')
-  // const chinaTreeData = china?.children?.length ? china.children : []
   const chinaTreeData = data
-  //
   if (!chinaTreeData?.length) return console.error('chinaTreeData获取失败!')
-  const item = items.value.options.find(e => e.key === 'workAreaProvinceId')
-  if (item?.items) {
-    item.items = chinaTreeData
-    item.change = provinceChange
-  }
+  const item = items.value.options.find(e => e.key === 'areaId')
+  if (item?.items) item.items = chinaTreeData
 })
 
 const getQuery = async () => {
@@ -268,7 +237,6 @@ watch(
     await getDictData()
     if (!Object.keys(val).length) return
     // 编辑
-    let workAreaId = ''
     items.value.options.forEach(e => {
       if (e.labelKey) {
         query[e.key] = val[e.key]
@@ -277,20 +245,10 @@ watch(
       }
       if (e.noParam) return
       e.value = val[e.key]
-      if (e.key === 'areaId' && val[e.key]) workAreaId = val[e.key]
       if (e.key === 'tagList' && val[e.key] && val[e.key].length) {
         tag.value = val[e.key] && val[e.key].length ? val[e.key] : []
       }
     })
-    if (workAreaId) { // 省份回显
-      const province = items.value.options.find(pv => pv.key === 'workAreaProvinceId')
-      if (province) {
-        const dealReturnObj = await cityToProvince(workAreaId, {}, province.items || [])
-        const city = items.value.options.find(pv => pv.key === 'areaId')
-        if (city) city.items = dealReturnObj.cityList || []
-        province.value = dealReturnObj.pid || ''
-      }
-    }
   },
   { immediate: true },
   { deep: true }

+ 1 - 0
src/views/recruit/enterprise/positionManagement/components/add.vue

@@ -75,6 +75,7 @@ const handleSave = async () => {
     window.scrollTo({ top: 0, behavior: 'smooth' })
     return
   }
+  if (!requirement?.areaId) return Snackbar.warning('请选择工作城市')
   if (!baseInfo || !requirement) return Snackbar.warning('请将信息填写完整')
   
   submitParams = Object.assign(baseInfo, requirement, { currency_type: 0 }) // currency_type: 写死0(人民币)

+ 6 - 48
src/views/recruit/enterprise/positionManagement/components/jobRequirements.vue

@@ -56,7 +56,6 @@ defineOptions({ name: 'position-add-job-requirements'})
 import CtForm from '@/components/CtForm'
 import { reactive, ref, watch } from 'vue'
 import { getDict } from '@/hooks/web/useDictionaries'
-import { cityToProvince } from '@/utils/areaDeal'
 import { getTagTreeDataApi } from '@/api/enterprise'
 
 const props = defineProps({
@@ -164,33 +163,15 @@ const items = ref({
       items: []
     },
     {
-      type: 'autocomplete',
-      key: 'workAreaProvinceId',
-      value: null,
-      label: '工作城市:省 *',
-      outlined: true,
-      itemText: 'name',
-      itemValue: 'id',
-      returnSelect: true,
-      noParam: true,
-      col: 6,
-      flexStyle: 'mr-3',
-      rules: [v => !!v || '请选择工作城市:省'],
-      items: [],
-      change: null
-    },
-    {
-      type: 'autocomplete',
+      type: 'cascade',
       key: 'areaId',
       value: null,
-      label: '工作城市:市 *',
-      outlined: true,
+      default: null,
+      label: '工作城市 *',
       itemText: 'name',
       itemValue: 'id',
-      col: 6,
-      rules: [v => !!v || '请选择工作城市:市'],
+      clearable: false,
       items: [],
-      change: null
     },
     {
       type: 'text',
@@ -225,25 +206,13 @@ const getDictData = async () => {
   })
 }
 
-const provinceChange = (value, val, obj) => {
-  const item = items.value.options.find(e => e.key === 'areaId')
-  if (!item) return
-  item.items = obj.children || []
-  item.value = null
-}
 getDict('areaTreeData', null, 'areaTreeData').then(({ data }) => {
   data = data?.length && data || []
   if (!data?.length) return console.error('areaTreeData获取失败!')
-  // const china = data.find(e => e.id === '1')
-  // const chinaTreeData = china?.children?.length ? china.children : []
   const chinaTreeData = data
-  //
   if (!chinaTreeData?.length) return console.error('chinaTreeData获取失败!')
-  const item = items.value.options.find(e => e.key === 'workAreaProvinceId')
-  if (item?.items) {
-    item.items = chinaTreeData
-    item.change = provinceChange
-  }
+  const item = items.value.options.find(e => e.key === 'areaId')
+  if (item?.items) item.items = chinaTreeData
 })
 
 const getQuery = async () => {
@@ -268,7 +237,6 @@ watch(
     await getDictData()
     if (!Object.keys(val).length) return
     // 编辑
-    let workAreaId = ''
     items.value.options.forEach(e => {
       if (e.labelKey) {
         query[e.key] = val[e.key]
@@ -277,20 +245,10 @@ watch(
       }
       if (e.noParam) return
       e.value = val[e.key]
-      if (e.key === 'areaId' && val[e.key]) workAreaId = val[e.key]
       if (e.key === 'tagList' && val[e.key] && val[e.key].length) {
         tag.value = val[e.key] && val[e.key].length ? val[e.key] : []
       }
     })
-    if (workAreaId) { // 省份回显
-      const province = items.value.options.find(pv => pv.key === 'workAreaProvinceId')
-      if (province) {
-        const dealReturnObj = await cityToProvince(workAreaId, {}, province.items || [])
-        const city = items.value.options.find(pv => pv.key === 'areaId')
-        if (city) city.items = dealReturnObj.cityList || []
-        province.value = dealReturnObj.pid || ''
-      }
-    }
   },
   { immediate: true },
   { deep: true }

+ 1 - 1
src/views/recruit/personal/PersonalCenter/resume/online/components/basicInfo.vue

@@ -136,7 +136,7 @@ let completeStatus = false
 const overlay = ref(false) // 加载中
 let baseInfo = ref({})
 let userInfo = ref({})
-const getBasicInfo = () => { // 获取基础信息
+const getBasicInfo = () => {
   const key = localStorage.getItem('baseInfo')
   if (!key || !Object.keys(key).length) return
   baseInfo.value = JSON.parse(key) // 人才信息

+ 1 - 1
src/views/recruit/personal/PersonalCenter/resume/online/components/dict.js

@@ -72,7 +72,7 @@ export const dealJobData = (list) => {
       if (item.isArray) {
         if (e[item.key] && e[item.key].length) {
           const result = e[item.key].map(val => {
-            return obj = dictObj[item.value].find(i => i[item.itemKey] === val)
+            return obj = dictObj[item.value].find(i => Number(i[item.itemKey]) === Number(val))
           })
           e[item.label] = result && result.length ? result.filter(Boolean) : []
         }

+ 49 - 22
src/views/recruit/personal/PersonalCenter/resume/online/components/jobIntention.vue

@@ -138,23 +138,49 @@ const items = ref({
     {
       type: 'number',
       key: 'payFrom',
-      value: null,
-      label: '期望薪资(最低要求) *',
+      value: '',
       col: 6,
-      flexStyle: 'mr-3',
+      label: '期望薪资(最低要求) *',
       suffix: '元',
-      outlined: true,
-      rules: [v => !!v || '请输入薪资最低要求']
+      rules: [
+        value => {
+          if (value) return true
+          return '请填写最低薪资'
+        },
+        value => {
+          if (value >= 1) return true
+          return '数额不得小于1'
+        },
+        value => {
+          const payTo = items.value.options.find(e => e.key === 'payTo').value
+          if (Number(value) < payTo ? Number(payTo) : 0) return true
+          return '应低于最高薪资'
+        }
+      ]
     },
     {
       type: 'number',
       key: 'payTo',
-      value: null,
-      label: '期望薪资(最高要求) *',
+      value: '',
       col: 6,
+      label: '期望薪资(最高要求) *',
+      flexStyle: 'mx-3',
       suffix: '元',
-      outlined: true,
-      rules: [v => !!v || '请输入薪资最高要求']
+      rules: [
+        value => {
+          if (value) return true
+          return '请填写最高薪资'
+        },
+        value => {
+          if (value >= 1) return true
+          return '数额不得小于1'
+        },
+        value => {
+          const payFrom = items.value.options.find(e => e.key === 'payFrom').value
+          if (Number(value) > payFrom ? Number(payFrom) : 0) return true
+          return '应高于最低薪资'
+        }
+      ]
     },
     {
       type: 'autocomplete',
@@ -167,19 +193,14 @@ const items = ref({
       flexStyle: 'mr-3',
       itemValue: 'value',
       rules: [v => !!v || '请选择求职类型'],
-      items: [
-        { label: '全职', value: '0' },
-        { label: '兼职', value: '1' },
-        { label: '临时', value: '2' },
-        { label: '实习', value: '3' }
-      ]
+      items: []
     },
     {
       type: 'cascade',
       key: 'workAreaId',
       value: null,
       default: null,
-      label: '所在城市',
+      label: '期望城市',
       itemText: 'name',
       itemValue: 'id',
       required: true,
@@ -192,7 +213,6 @@ const items = ref({
       key: 'interestedAreaIdList',
       value: '',
       placeholder: '其它感兴趣的城市'
-      // label: '其它感兴趣的城市'
     }
   ]
 })
@@ -206,14 +226,22 @@ getDict('areaTreeData', null, 'areaTreeData').then(({ data }) => {
   if (item?.items) item.items = chinaTreeData
 })
 
+// 求职类型
+getDict('menduner_job_type').then(({ data }) => {
+  data = data?.length && data || []
+  items.value.options.find(e => e.key === 'jobType').items = data
+})
+
 // 获取求职意向
 const interestList = ref([])
 const getJobInterested = async () => {
   const data = await getResumeJobInterested()
   // 完成度展示
   emit('complete', { status: Boolean(data?.length), id: 'jobIntention' })
-  if (!data.length) return
-  interestList.value = data
+  if (!data.length) {
+    interestList.value = []
+    return
+  }
   interestList.value = dealJobData(data)
 }
 getJobInterested()
@@ -243,7 +271,6 @@ const handleIndustryClear = (k) => {
   query.industryIdList = query.industryIdList.filter(i => i !== k.id)
   const index = currentSelect.findIndex(i => i.id === k.id)
   if (index !== -1) currentSelect.splice(index, 1)
-  console.log(k, 'industry', query.industryIdList, currentSelect)
 }
 
 // 其它感兴趣的城市
@@ -254,8 +281,8 @@ const handleArea = (list, arr) => {
   areaSelect = arr
 }
 const handleAreaClear = (k) => {
-  query.interestedAreaIdList = query.interestedAreaIdList.filter(i => i !== k.id)
-  const index = areaSelect.findIndex(i => i.id === k.id)
+  query.interestedAreaIdList = query.interestedAreaIdList.filter(i => Number(i) !== Number(k.id))
+  const index = areaSelect.findIndex(i => Number(i.id) === Number(k.id))
   if (index !== -1) areaSelect.splice(index, 1)
 }
 

+ 1 - 2
src/views/recruit/personal/PersonalCenter/resume/online/components/selfEvaluation.vue

@@ -15,7 +15,7 @@
         :rules="advantageRules"
       ></v-textarea>
       <div class="text-end">
-        <v-btn class="half-button mr-3" variant="tonal" @click="isEdit = false">{{ $t('common.cancel') }}</v-btn>
+        <v-btn class="half-button mr-3" variant="tonal" @click="isEdit = false; getData()">{{ $t('common.cancel') }}</v-btn>
         <v-btn color="primary" class="half-button" @click="handleSave">{{ $t('common.save') }}</v-btn>
       </div>
     </div>
@@ -42,7 +42,6 @@ const useStore = useUserStore()
 const getData = async () => {
   await useStore.getUserBaseInfos(JSON.parse(localStorage.getItem('userInfo'))?.id)
   const baseInfo = JSON.parse(localStorage.getItem('baseInfo'))
-  // if (!baseInfo) return
   advantage.value = baseInfo?.advantage || ''
   // 完成度展示
   emit('complete', { status: Boolean(advantage.value), id: 'selfEvaluation' })

+ 1 - 5
src/views/recruit/personal/PersonalCenter/resume/online/components/vocationalSkills.vue

@@ -101,17 +101,13 @@ getData()
 
 // 保存 职业技能
 const handleSave = async () => {
-  // console.log(1, 'console', formPageRef.value.formRef)
-  const { valid } = await formPageRef.value.validate()
-  console.log(222, valid)
+  const { valid } = await formPageRef.value.formRef.validate()
   if (!valid) return
   const obj = {}
   formItems.value.options.forEach(e => {
-    // obj[e.key] = e.value - 0
     obj[e.key] = e.value
   })
   if (editId.value) obj.id = editId.value
-  console.log(1, 'obj', obj)
   await saveResumePersonSkill(obj)
   Snackbar.success('保存成功!')
   isEdit.value = false

+ 3 - 6
src/views/recruit/personal/PersonalCenter/resume/online/index.vue

@@ -81,13 +81,10 @@ const completeNum = ref(0)
 const complete = (val) => {
   if (!val?.id) return
   completeNum.value = 0
+  const data = items.value.find(e => e.id === val.id)
+  data.status = val.status || false
   items.value.forEach(e => {
-    if (e.id === val.id) {
-      e.status = val.status || false
-    }
-    if (e.status) {
-      completeNum.value++
-    }
+    if (e.status) complete.value++
   })
 }
 </script>