招聘网页
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

basic.vue 12KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349
  1. <template>
  2. <div style="width: 100%;">
  3. <template v-if="state">
  4. <a-form :model="createForm" layout="vertical" class="resume-form">
  5. <a-row :gutter="20">
  6. <a-col span="24">
  7. <a-form-item label="上传相片" name="photo">
  8. <upload upload_txt="上传相片" @uploadSuccess="uploadPhotoSuccess"
  9. :success_image="addOtherForm.photo_img" images_length="1" image_type="1"></upload>
  10. </a-form-item>
  11. </a-col>
  12. <a-col span="12">
  13. <a-form-item label="简历是否可见" name="hide_resume">
  14. <a-radio-group v-model:value="createForm.hide_resume" button-style="solid" size="large"
  15. style="width: 100%;">
  16. <a-radio-button :value="1" style="width: 50%;">是</a-radio-button>
  17. <a-radio-button :value="2" style="width: 50%;">否</a-radio-button>
  18. </a-radio-group>
  19. </a-form-item>
  20. </a-col>
  21. <a-col span="12">
  22. <a-form-item label="家政版块是否可见" name="house_keeping_status">
  23. <a-radio-group v-model:value="createForm.house_keeping_status" button-style="solid"
  24. size="large" style="width: 100%;">
  25. <a-radio-button :value="1" style="width: 50%;">是</a-radio-button>
  26. <a-radio-button :value="2" style="width: 50%;">否</a-radio-button>
  27. </a-radio-group>
  28. </a-form-item>
  29. </a-col>
  30. <a-col span="12">
  31. <a-form-item label="姓名" name="name">
  32. <a-input v-model:value="createForm.name" placeholder="请输入姓名" size="large" />
  33. </a-form-item>
  34. </a-col>
  35. <a-col span="12">
  36. <a-form-item label="性别" name="gender">
  37. <a-radio-group v-model:value="createForm.gender" button-style="solid" size="large"
  38. style="width: 100%;">
  39. <a-radio-button value="男" style="width: 50%;">男</a-radio-button>
  40. <a-radio-button value="女" style="width: 50%;">女</a-radio-button>
  41. </a-radio-group>
  42. </a-form-item>
  43. </a-col>
  44. <a-col span="12">
  45. <a-form-item label="出生日期" name="dob">
  46. <a-date-picker v-model:value="addOtherForm.dob" @Change="dobChange" style="width: 100%;"
  47. size="large" :disabledDate="disabledDateFront" />
  48. </a-form-item>
  49. </a-col>
  50. <a-col span="12">
  51. <a-form-item label="身份证" name="id_number">
  52. <a-input v-model:value="createForm.id_number" placeholder="请输入身份证" size="large" />
  53. </a-form-item>
  54. </a-col>
  55. <a-col span="12">
  56. <a-form-item label="工作经验(年)" name="work_experience">
  57. <a-input-number :min="0" type="number" v-model:value="createForm.work_experience"
  58. placeholder="请输入工作经验" style="width: 100%;" size="large" />
  59. </a-form-item>
  60. </a-col>
  61. <a-col span="12">
  62. <a-form-item label="学历" name="education">
  63. <a-xuanze :dict="2006" placeholder="请选择学历" @saveSelect="saveEducation"
  64. :select_content="createForm.education"></a-xuanze>
  65. </a-form-item>
  66. </a-col>
  67. <a-col span="12">
  68. <a-form-item label="户口所在地">
  69. <a-jilian :dict="2009" @saveCascader="regLevelSave" placeholder="请选择户口所在地"
  70. :cascader_content="addOtherForm.reg_level_cascader"></a-jilian>
  71. </a-form-item>
  72. </a-col>
  73. <a-col span="12">
  74. <a-form-item label="现居地">
  75. <a-jilian :dict="2009" @saveCascader="nowLevelSave" placeholder="请选择现居地"
  76. :cascader_content="addOtherForm.now_level_cascader"></a-jilian>
  77. </a-form-item>
  78. </a-col>
  79. <a-col span="12">
  80. <a-form-item label="职称">
  81. <a-xuanze :dict="2014" placeholder="请选择职称" @saveSelect="saveTitle"
  82. :select_content="createForm.title"></a-xuanze>
  83. </a-form-item>
  84. </a-col>
  85. <a-col span="12">
  86. <a-form-item label="婚姻状况">
  87. <a-xuanze :dict="2011" placeholder="请选择婚姻状况" @saveSelect="saveMaritalStatus"
  88. :select_content="createForm.marital_status"></a-xuanze>
  89. </a-form-item>
  90. </a-col>
  91. <a-col span="12">
  92. <a-form-item label="民族">
  93. <a-xuanze :dict="2012" placeholder="请选择民族" @saveSelect="saveEthnicity"
  94. :select_content="createForm.ethnicity"></a-xuanze>
  95. </a-form-item>
  96. </a-col>
  97. <a-col span="12">
  98. <a-form-item label="政治面貌">
  99. <a-xuanze :dict="2010" placeholder="请选择政治面貌" @saveSelect="savePoliticalStatus"
  100. :select_content="createForm.political_status"></a-xuanze>
  101. </a-form-item>
  102. </a-col>
  103. <a-col span="12">
  104. <a-form-item label="籍贯">
  105. <a-jilian :dict="2009" @saveCascader="nativePlaceSave" placeholder="请选择籍贯"
  106. :cascader_content="addOtherForm.native_place_txt"></a-jilian>
  107. </a-form-item>
  108. </a-col>
  109. <a-col span="12">
  110. <a-form-item label="身高(厘米cm)">
  111. <a-input-number :min="0" type="number" v-model:value="createForm.height" placeholder="请输入身高"
  112. style="width: 100%;" size="large" />
  113. </a-form-item>
  114. </a-col>
  115. <a-col span="12">
  116. <a-form-item label="体重(千克kg)">
  117. <a-input-number :min="0" type="number" v-model:value="createForm.weight" placeholder="请输入体重"
  118. style="width: 100%;" size="large" />
  119. </a-form-item>
  120. </a-col>
  121. <a-col span="24">
  122. <a-flex justify="flex-end">
  123. <a-space>
  124. <a-button @click="resetForm" size="large">取消</a-button>
  125. <a-button type="primary" @click="sumbitForm" size="large">保存</a-button>
  126. </a-space>
  127. </a-flex>
  128. </a-col>
  129. </a-row>
  130. </a-form>
  131. </template>
  132. <template v-else>
  133. <template v-if="detail">
  134. <a-row :gutter="[20,20]">
  135. <a-col span="10">
  136. <a-row>
  137. <a-space direction="vertical">
  138. <a-col span="24">
  139. 姓&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;名:{{detail.name}}
  140. </a-col>
  141. <a-col span="24">
  142. 性&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;别:{{detail.gender}}
  143. </a-col>
  144. <a-col span="24">
  145. 身份证号:{{detail.id_number}}
  146. </a-col>
  147. <a-col span="24">
  148. 民&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;族:{{detail.ethnicity_txt}}
  149. </a-col>
  150. <a-col span="24">
  151. 身&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;高:{{detail.height}}cm
  152. </a-col>
  153. <a-col span="24">
  154. 政治面貌:{{detail.political_status_txt}}
  155. </a-col>
  156. <a-col span="24">
  157. 联系方式:{{detail.mobile}}
  158. </a-col>
  159. <a-col span="24">
  160. 邮&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;箱:{{detail.email}}
  161. </a-col>
  162. </a-space>
  163. </a-row>
  164. </a-col>
  165. <a-col span="8">
  166. <a-row>
  167. <a-space direction="vertical">
  168. <a-col span="24">
  169. 出生日期:{{detail.dob}}
  170. </a-col>
  171. <a-col span="24">
  172. 婚姻状况:{{detail.marital_status_txt}}
  173. </a-col>
  174. <a-col span="24">
  175. 学&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;历:{{detail.education_txt}}
  176. </a-col>
  177. <a-col span="24">
  178. 体&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;重:{{detail.weight}}kg
  179. </a-col>
  180. <a-col span="24">
  181. 现居地址:{{detail.now_level1_txt ? detail.now_level1_txt : ''}}{{detail.now_level2_txt ? detail.now_level2_txt : ''}}{{detail.now_level3_txt ? detail.now_level3_txt : ''}}{{detail.now_level4_txt ? detail.now_level4_txt : ''}}
  182. </a-col>
  183. <a-col span="24">
  184. 籍&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;贯:{{detail.native_place_txt}}
  185. </a-col>
  186. <a-col span="24">
  187. 户口地址:{{detail.now_level1_txt ? detail.now_level1_txt : ''}}{{detail.now_level2_txt ? detail.now_level2_txt : ''}}{{detail.now_level3_txt ? detail.now_level3_txt : ''}}{{detail.now_level4_txt ? detail.now_level4_txt : ''}}
  188. </a-col>
  189. </a-space>
  190. </a-row>
  191. </a-col>
  192. <a-col span="6">
  193. <image-container v-if="detail.photo" :need="true"
  194. :imgObj="{src: imageprefix + detail.photo ,width: '150px',height:'210px'}"></image-container>
  195. </a-col>
  196. </a-row>
  197. </template>
  198. <template v-else>
  199. <a-row>
  200. <a-col span="24">
  201. <a-empty>
  202. <template #description>
  203. 暂无信息
  204. </template>
  205. </a-empty>
  206. </a-col>
  207. </a-row>
  208. </template>
  209. </template>
  210. </div>
  211. </template>
  212. <script setup lang="ts">
  213. import { ref, onMounted, computed, defineProps, watch, defineEmits, createVNode } from 'vue';
  214. import { PostJobapplicantAdd, PostJobapplicantUpdate, GetJobapplicantDetail } from '@/apis/models';
  215. import Upload from '@/components/form/upload.vue';
  216. import { intersectionAlike } from '@/utils/dataHelper';
  217. import { warnToast, successToast } from '@/utils/toastHelper';
  218. import { dataForm, otherDataForm, reset } from '@/components/jobseeker/resume/basic/data.ts';
  219. import { useCommon } from '@/hooks/useCommon';
  220. let { store, dayjs, richOption, ExclamationCircleOutlined, Modal, imageprefix, disabledDateFront } = useCommon();
  221. const dayjsRef = ref(dayjs);
  222. let props = defineProps(['form_state']);
  223. const emit = defineEmits();
  224. let state = ref<Boolean>(false)
  225. let detail = ref(null)
  226. let createForm = ref<JobseekerBasicType.JobseekerBasicFormType>(dataForm)
  227. let addOtherForm = ref<JobseekerBasicType.OtherFormType>(otherDataForm)
  228. onMounted(() => {
  229. getBasic()
  230. })
  231. const getBasic = () => {
  232. GetJobapplicantDetail().then(res => {
  233. detail.value = res.data;
  234. createForm.value = intersectionAlike(createForm.value, res.data)
  235. createForm.value.id = res.data.id;
  236. addOtherForm.value = {
  237. dob: dayjsRef.value(res.data.dob),
  238. reg_level_cascader: [res.data.reg_level1, res.data.reg_level2, res.data.reg_level3, res.data.reg_level4],
  239. now_level_cascader: [res.data.now_level1, res.data.now_level2, res.data.now_level3, res.data.now_level4],
  240. native_place_txt: res.data.native_place_txt,
  241. photo_img: imageprefix + res.data.photo
  242. }
  243. })
  244. }
  245. // 营业执照
  246. const uploadPhotoSuccess = (data : Object) => {
  247. addOtherForm.value.photo_img = imageprefix + data
  248. createForm.value.photo = data
  249. }
  250. // 出生日期
  251. const dobChange = (val) => {
  252. createForm.value.dob = dayjsRef.value(val).format('YYYY-MM-DD');
  253. }
  254. // 学历
  255. const educationPlaceholder = ref('请选择学历');
  256. const saveEducation = (data) => {
  257. createForm.value.education = data.val.key;
  258. }
  259. // 职称
  260. const titlePlaceholder = ref('请选择职称')
  261. const saveTitle = (data) => {
  262. createForm.value.title = data.val.key;
  263. }
  264. // 婚姻状态
  265. const maritalStatusPlaceholder = ref('请选择婚姻状态')
  266. const saveMaritalStatus = (data) => {
  267. createForm.value.marital_status = data.val.key;
  268. }
  269. // 民族
  270. const ethnicityPlaceholder = ref('请选择民族')
  271. const saveEthnicity = (data) => {
  272. createForm.value.ethnicity = data.val.key;
  273. }
  274. // 政治面貌
  275. const politicalStatusPlaceholder = ref('请选择政治面貌')
  276. const savePoliticalStatus = (data) => {
  277. createForm.value.political_status = data.val.key;
  278. }
  279. // 户口所在地
  280. const regLevelSave = (data) => {
  281. for (let i = 0; i < 4; i++) {
  282. createForm.value[`reg_level${i + 1}`] = data.arr1[i] || 0;
  283. }
  284. }
  285. // 现居地
  286. const nowLevelSave = (data) => {
  287. for (let i = 0; i < 4; i++) {
  288. createForm.value[`now_level${i + 1}`] = data.arr1[i] || 0;
  289. }
  290. }
  291. // 籍贯
  292. const nativePlaceSave = (data) => {
  293. if (data.arr1.length == 1) {
  294. return false;
  295. } else {
  296. createForm.value.native_place = data.arr1[1];
  297. }
  298. }
  299. const sumbitForm = () => {
  300. if (createForm.value.id) {
  301. PostJobapplicantUpdate(createForm.value).then(res => {
  302. successToast('保存成功');
  303. getBasic();
  304. resetForm()
  305. }).catch(err => {
  306. })
  307. } else {
  308. PostJobapplicantAdd(createForm.value).then(res => {
  309. successToast('保存成功');
  310. getBasic();
  311. resetForm()
  312. }).catch(err => {
  313. })
  314. }
  315. }
  316. const resetForm = () => {
  317. createForm.value = reset().dataForm as JobseekerBasicType.JobseekerBasicFormType;
  318. addOtherForm.value = reset().otherDataForm as JobseekerBasicType.OtherFormType;
  319. state.value = false;
  320. emit("quitEdit")
  321. }
  322. watch(() => [props.form_state], (newVal) => {
  323. state.value = newVal[0];
  324. getBasic();
  325. })
  326. </script>
  327. <style>
  328. </style>