您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

basic.vue 9.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260
  1. <template>
  2. <div style="width: 100%;">
  3. <a-form :model="createForm" layout="vertical" class="resume-form">
  4. <a-row :gutter="20">
  5. <a-col span="24">
  6. <a-form-item required label="上传相片" name="photo">
  7. <upload upload_txt="上传相片" @uploadSuccess="uploadPhotoSuccess"
  8. :success_image="addOtherForm.photo_img" images_length="1" image_type="1"></upload>
  9. </a-form-item>
  10. </a-col>
  11. <a-col span="8">
  12. <a-form-item label="简历是否可见" name="hide_resume">
  13. <a-radio-group v-model:value="createForm.hide_resume" button-style="solid" size="mini">
  14. <a-radio-button :value="1" style="width: 50%;">是</a-radio-button>
  15. <a-radio-button :value="2" style="width: 50%;">否</a-radio-button>
  16. </a-radio-group>
  17. </a-form-item>
  18. </a-col>
  19. <a-col span="8">
  20. <a-form-item label="家政版块是否可见" name="house_keeping_status">
  21. <a-radio-group v-model:value="createForm.house_keeping_status" button-style="solid"
  22. size="mini">
  23. <a-radio-button :value="1" style="width: 50%;">是</a-radio-button>
  24. <a-radio-button :value="2" style="width: 50%;">否</a-radio-button>
  25. </a-radio-group>
  26. </a-form-item>
  27. </a-col>
  28. <a-col span="8">
  29. <a-form-item required label="性别" name="gender">
  30. <a-radio-group v-model:value="createForm.gender" button-style="solid" size="mini"
  31. >
  32. <a-radio-button value="男" style="width: 50%;">男</a-radio-button>
  33. <a-radio-button value="女" style="width: 50%;">女</a-radio-button>
  34. </a-radio-group>
  35. </a-form-item>
  36. </a-col>
  37. <a-col span="8">
  38. <a-form-item required label="姓名">
  39. <a-input v-model:value="createForm.name" placeholder="请输入姓名" size="mini" />
  40. </a-form-item>
  41. </a-col>
  42. <a-col span="8">
  43. <a-form-item required label="出生日期" name="dob">
  44. <a-date-picker v-model:value="addOtherForm.dob" @Change="dobChange" style="width: 100%;"
  45. size="mini" :disabledDate="disabledDateFront" />
  46. </a-form-item>
  47. </a-col>
  48. <a-col span="8">
  49. <a-form-item required label="身份证" name="id_number">
  50. <a-input v-model:value="createForm.id_number" placeholder="请输入身份证" size="mini" />
  51. </a-form-item>
  52. </a-col>
  53. <a-col span="8">
  54. <a-form-item label="工作经验(年)" name="work_experience">
  55. <a-input-number :min="0" type="number" v-model:value="createForm.work_experience"
  56. placeholder="请输入工作经验" style="width: 100%;" size="mini" />
  57. </a-form-item>
  58. </a-col>
  59. <a-col span="8">
  60. <a-form-item required label="学历" name="education">
  61. <a-xuanze :dict="2006" placeholder="请选择学历" @saveSelect="saveEducation"
  62. :select_content="createForm.education"></a-xuanze>
  63. </a-form-item>
  64. </a-col>
  65. <a-col span="8">
  66. <a-form-item required label="户口所在地">
  67. <a-jilian :dict="2009" @saveCascader="regLevelSave" placeholder="请选择户口所在地"
  68. :cascader_content="addOtherForm.reg_level_cascader"></a-jilian>
  69. </a-form-item>
  70. </a-col>
  71. <a-col span="8">
  72. <a-form-item required label="现居地">
  73. <a-jilian :dict="2009" @saveCascader="nowLevelSave" placeholder="请选择现居地"
  74. :cascader_content="addOtherForm.now_level_cascader"></a-jilian>
  75. </a-form-item>
  76. </a-col>
  77. <a-col span="8">
  78. <a-form-item label="职称">
  79. <a-xuanze :dict="2014" placeholder="请选择职称" @saveSelect="saveTitle"
  80. :select_content="createForm.title"></a-xuanze>
  81. </a-form-item>
  82. </a-col>
  83. <a-col span="8">
  84. <a-form-item label="婚姻状况">
  85. <a-xuanze :dict="2011" placeholder="请选择婚姻状况" @saveSelect="saveMaritalStatus"
  86. :select_content="createForm.marital_status"></a-xuanze>
  87. </a-form-item>
  88. </a-col>
  89. <a-col span="8">
  90. <a-form-item label="民族">
  91. <a-xuanze :dict="208" placeholder="请选择民族" @saveSelect="saveEthnicity"
  92. :select_content="createForm.ethnicity"></a-xuanze>
  93. </a-form-item>
  94. </a-col>
  95. <a-col span="8">
  96. <a-form-item label="政治面貌">
  97. <a-xuanze :dict="2010" placeholder="请选择政治面貌" @saveSelect="savePoliticalStatus"
  98. :select_content="createForm.political_status"></a-xuanze>
  99. </a-form-item>
  100. </a-col>
  101. <a-col span="8">
  102. <a-form-item label="籍贯">
  103. <a-jilian :dict="2009" @saveCascader="nativePlaceSave" placeholder="请选择籍贯"
  104. :cascader_content="addOtherForm.native_place_txt"></a-jilian>
  105. </a-form-item>
  106. </a-col>
  107. <a-col span="8">
  108. <a-form-item label="身高(厘米cm)">
  109. <a-input-number :min="0" type="number" v-model:value="createForm.height" placeholder="请输入身高"
  110. style="width: 100%;" size="mini" />
  111. </a-form-item>
  112. </a-col>
  113. <a-col span="8">
  114. <a-form-item label="体重(千克kg)">
  115. <a-input-number :min="0" type="number" v-model:value="createForm.weight" placeholder="请输入体重"
  116. style="width: 100%;" size="mini" />
  117. </a-form-item>
  118. </a-col>
  119. <a-col span="24">
  120. <a-flex justify="flex-end">
  121. <a-space>
  122. <a-button @click="resetForm" size="mini">取消</a-button>
  123. <a-button type="primary" @click="sumbitForm" size="mini">保存</a-button>
  124. </a-space>
  125. </a-flex>
  126. </a-col>
  127. </a-row>
  128. </a-form>
  129. </div>
  130. </template>
  131. <script setup lang="ts">
  132. import { ref, onMounted, computed, defineProps, watch, defineEmits, createVNode } from 'vue';
  133. import { PostJobapplicantAdd, PostJobapplicantUpdate, GetJobapplicantDetail } from '@/apis/models';
  134. import Upload from '@/components/upload/one.vue';
  135. import { intersectionAlike } from '@/utils/dataHelper';
  136. import { warnToast, successToast } from '@/utils/toastHelper';
  137. import { dataForm, otherDataForm, reset } from '@/views/jobSeeker/resume/add/basic/data.ts';
  138. import { useCommon } from '@/hooks/useCommon';
  139. let { store, dayjs, richOption, ExclamationCircleOutlined, Modal, imageprefix, disabledDateFront } = useCommon();
  140. const dayjsRef = ref(dayjs);
  141. let props = defineProps(['customer_record']);
  142. const emit = defineEmits();
  143. let createForm = ref<JobseekerBasicType.JobseekerBasicFormType>(dataForm)
  144. let addOtherForm = ref<JobseekerBasicType.OtherFormType>(otherDataForm)
  145. onMounted(() => {
  146. getBasic()
  147. })
  148. const getBasic = () => {
  149. GetJobapplicantDetail({customer_id: props.customer_record.customer_id}).then(res => {
  150. createForm.value = intersectionAlike(createForm.value, res.data)
  151. createForm.value.id = res.data.id;
  152. createForm.value.customer_id = res.data.customer_id;
  153. addOtherForm.value = {
  154. dob: dayjsRef.value(res.data.dob),
  155. reg_level_cascader: [res.data.reg_level1, res.data.reg_level2, res.data.reg_level3, res.data.reg_level4],
  156. now_level_cascader: [res.data.now_level1, res.data.now_level2, res.data.now_level3, res.data.now_level4],
  157. native_place_txt: res.data.native_place_txt,
  158. photo_img: imageprefix + res.data.photo
  159. }
  160. })
  161. }
  162. // 营业执照
  163. const uploadPhotoSuccess = (data : Object) => {
  164. addOtherForm.value.photo_img = imageprefix + data
  165. createForm.value.photo = data
  166. }
  167. // 出生日期
  168. const dobChange = (val) => {
  169. createForm.value.dob = dayjsRef.value(val).format('YYYY-MM-DD');
  170. }
  171. // 学历
  172. const educationPlaceholder = ref('请选择学历');
  173. const saveEducation = (data) => {
  174. createForm.value.education = data.val.key;
  175. }
  176. // 职称
  177. const titlePlaceholder = ref('请选择职称')
  178. const saveTitle = (data) => {
  179. createForm.value.title = data.val.key;
  180. }
  181. // 婚姻状态
  182. const maritalStatusPlaceholder = ref('请选择婚姻状态')
  183. const saveMaritalStatus = (data) => {
  184. createForm.value.marital_status = data.val.key;
  185. }
  186. // 民族
  187. const ethnicityPlaceholder = ref('请选择民族')
  188. const saveEthnicity = (data) => {
  189. createForm.value.ethnicity = data.val.key;
  190. }
  191. // 政治面貌
  192. const politicalStatusPlaceholder = ref('请选择政治面貌')
  193. const savePoliticalStatus = (data) => {
  194. createForm.value.political_status = data.val.key;
  195. }
  196. // 户口所在地
  197. const regLevelSave = (data) => {
  198. for (let i = 0; i < 4; i++) {
  199. createForm.value[`reg_level${i + 1}`] = data.arr1[i] || 0;
  200. }
  201. }
  202. // 现居地
  203. const nowLevelSave = (data) => {
  204. for (let i = 0; i < 4; i++) {
  205. createForm.value[`now_level${i + 1}`] = data.arr1[i] || 0;
  206. }
  207. }
  208. // 籍贯
  209. const nativePlaceSave = (data) => {
  210. if (data.arr1.length == 1) {
  211. return false;
  212. } else {
  213. createForm.value.native_place = data.arr1[1];
  214. }
  215. }
  216. const sumbitForm = () => {
  217. if (createForm.value.id) {
  218. PostJobapplicantUpdate(createForm.value).then(res => {
  219. successToast('保存成功');
  220. getBasic();
  221. }).catch(err => {
  222. })
  223. } else {
  224. PostJobapplicantAdd(createForm.value).then(res => {
  225. successToast('保存成功');
  226. getBasic();
  227. }).catch(err => {
  228. })
  229. }
  230. }
  231. const resetForm = () => {
  232. createForm.value = reset().dataForm as JobseekerBasicType.JobseekerBasicFormType;
  233. addOtherForm.value = reset().otherDataForm as JobseekerBasicType.OtherFormType;
  234. }
  235. // watch(() => [props.form_state], (newVal) => {
  236. // state.value = newVal[0];
  237. // getBasic();
  238. // })
  239. </script>
  240. <style>
  241. </style>