jobIntention.vue 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  1. <!-- -->
  2. <template>
  3. <view class="ss-m-x-30 ss-m-y-30">
  4. <uni-forms ref="form" :modelValue="formData" :rules="rules" validateTrigger="bind">
  5. <uni-forms-item label="期望岗位" name="positionId" required label-width="90px">
  6. <uni-data-picker
  7. popup-title="请选择期望岗位"
  8. v-model="formData.positionId"
  9. :localdata="dictObj?.positionTreeData || []"
  10. :clear-icon="false"
  11. :map="{ text: 'nameCn', value: 'id'}"
  12. ></uni-data-picker>
  13. </uni-forms-item>
  14. <uni-forms-item label="期望行业" name="industryIdList" required label-width="90px">
  15. <m-select
  16. label="请选择期望行业"
  17. :items="dictObj?.industryTreeData || []"
  18. item-label="nameCn"
  19. item-value="id"
  20. multiple
  21. v-model="formData.industryIdList"
  22. ></m-select>
  23. </uni-forms-item>
  24. <uni-forms-item label="最低薪资" name="payFrom" required label-width="90px">
  25. <uni-number-box v-model="formData.payFrom" :min="1" :max="999999999" :step="1000" :width="150" @change="payChange"></uni-number-box>
  26. </uni-forms-item>
  27. <uni-forms-item label="最高薪资" name="payTo" required label-width="90px">
  28. <uni-number-box v-model="formData.payTo" :min="payToMin" :max="999999999" :step="1000" :width="150"></uni-number-box>
  29. </uni-forms-item>
  30. <uni-forms-item label="求职类型" name="jobType" required label-width="90px">
  31. <uni-data-picker popup-title="请选择求职类型" v-model="formData.jobType" :localdata="dictObj?.jobType || []" :clear-icon="false" :map="{ text: 'label', value: 'value'}"></uni-data-picker>
  32. </uni-forms-item>
  33. <uni-forms-item label="工作城市" name="workAreaId" required label-width="90px">
  34. <uni-data-picker popup-title="请选择工作城市" v-model="formData.workAreaId" :localdata="dictObj?.areaTreeData || []" :clear-icon="false" :map="{ text: 'name', value: 'id'}"></uni-data-picker>
  35. </uni-forms-item>
  36. <uni-forms-item label="其它感兴趣的城市" name="interestedAreaIdList" label-width="90px">
  37. <m-select
  38. label="请选择其它感兴趣的城市"
  39. :items="dictObj?.areaTreeData || []"
  40. item-label="name"
  41. item-value="id"
  42. multiple
  43. v-model="formData.interestedAreaIdList"
  44. >
  45. </m-select>
  46. </uni-forms-item>
  47. </uni-forms>
  48. <view class="f-horizon-center">
  49. <button
  50. v-if="editId"
  51. size="default"
  52. class="delete-button commonBtnStyle MiSans-Medium"
  53. :disabled="deleteDisabled"
  54. @click="handleDelete"
  55. >删 除</button>
  56. <button
  57. size="default"
  58. class="MiSans-Medium"
  59. :class="{'save-button': editId, 'commonBtnStyle': editId, 'send-button': !editId}"
  60. :disabled="disabled"
  61. @click="submit"
  62. >保 存</button>
  63. </view>
  64. </view>
  65. </template>
  66. <script setup>
  67. import { ref, unref } from 'vue'
  68. import { dictObj } from '@/utils/position.js'
  69. import { saveResumeJobInterested, getResumeJobInterested, deleteResumeJobInterested } from '@/api/resume.js'
  70. import { onLoad } from '@dcloudio/uni-app'
  71. import { cloneDeep } from 'lodash-es'
  72. import MSelect from '@/components/FilterList/select.vue'
  73. let formData = ref({ positionId: '', payFrom: 0, payTo: 0 })
  74. const form = ref()
  75. const editId = ref(null)
  76. // 获取求职意向
  77. async function getJobInterested (id) {
  78. const { data } = await getResumeJobInterested()
  79. if (!data || !data.length) {
  80. return
  81. }
  82. const obj = data.find(k => k.id === id)
  83. formData.value = cloneDeep(obj)
  84. const interest = obj.interestedAreaIdList
  85. formData.value.interestedAreaIdList = interest && interest.length ? interest.map(e => +e) : []
  86. if (dictObj && dictObj?.areaTreeData) {
  87. const type = typeof dictObj.areaTreeData[0].id
  88. formData.value.workAreaId = type === 'string' ? obj.workAreaId.toString() : Number(obj.workAreaId)
  89. }
  90. }
  91. onLoad((options) => {
  92. if (options.id) {
  93. editId.value = options.id
  94. getJobInterested(options.id)
  95. }
  96. })
  97. // 提交
  98. const disabled = ref(false)
  99. const submit = async () => {
  100. const valid = await unref(form).validate()
  101. if (!valid) return
  102. disabled.value = true
  103. try {
  104. await saveResumeJobInterested(formData.value)
  105. uni.showToast({
  106. icon: 'success',
  107. title: '保存成功'
  108. })
  109. setTimeout(() => {
  110. editId.value = null
  111. uni.navigateBack({
  112. delta: 1
  113. })
  114. disabled.value = false
  115. }, 1000)
  116. } catch (err) {
  117. disabled.value = false
  118. uni.showToast({
  119. icon: 'none',
  120. title: err.msg
  121. })
  122. }
  123. }
  124. // 删除
  125. const deleteDisabled = ref(false)
  126. const handleDelete = async () => {
  127. deleteDisabled.value = true
  128. try {
  129. await deleteResumeJobInterested(editId.value)
  130. uni.showToast({
  131. icon: 'success',
  132. title: '删除成功'
  133. })
  134. setTimeout(() => {
  135. editId.value = null
  136. uni.navigateBack({
  137. delta: 1
  138. })
  139. deleteDisabled.value = false
  140. }, 1000)
  141. } catch (err) {
  142. deleteDisabled.value = false
  143. uni.showToast({
  144. icon: 'none',
  145. title: err.msg
  146. })
  147. }
  148. }
  149. const rules = {
  150. positionId:{
  151. rules: [{required: true, errorMessage: '请选择期望岗位' }]
  152. },
  153. industryIdList:{
  154. rules: [{required: true, errorMessage: '请选择期望行业' }]
  155. },
  156. payFrom:{
  157. rules: [{required: true, errorMessage: '请输入薪资最低要求' }]
  158. },
  159. payTo:{
  160. rules: [{required: true, errorMessage: '请输入薪资最高要求' }]
  161. },
  162. jobType:{
  163. rules: [{required: true, errorMessage: '请选择求职类型' }]
  164. },
  165. workAreaId:{
  166. rules: [{required: true, errorMessage: '请选择工作城市' }]
  167. },
  168. }
  169. const payToMin = ref(1)
  170. const payChange = (val) => {
  171. payToMin.value = val
  172. if (val > formData.value.payTo) formData.value.payTo = val
  173. }
  174. </script>
  175. <style lang="scss" scoped>
  176. :deep(.uni-forms-item__content) {
  177. max-width: 100%;
  178. overflow: hidden;
  179. }
  180. </style>