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

1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
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>