edit.vue 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810
  1. <template>
  2. <div class="card-edit">
  3. <a-form :model="dataModel" autocomplete="off" @finish="onFinish">
  4. <a-divider orientation="left">求职人员信息</a-divider>
  5. <a-row :gutter="24">
  6. <a-col :span="8">
  7. <a-form-item label="姓名" :label-col="{ span: 6 }"
  8. name="name" :rules="[{ required: true, message: '请输入姓名!' }]">
  9. <a-input v-model:value="dataModel.name" placeholder=""/>
  10. </a-form-item>
  11. </a-col>
  12. <a-col :span="8">
  13. <a-form-item label="身份证号码" :label-col="{ span: 6 }"
  14. name="identityNumber" :rules="[{ required: true, message: '请输入身份证号码!' }]" >
  15. <a-input v-model:value="dataModel.identityNumber" placeholder=""/>
  16. </a-form-item>
  17. </a-col>
  18. <a-col :span="8">
  19. <a-form-item label="性别" :label-col="{span:6}"
  20. name="sex" :rules="[{ required: true, message: '请选择性别!' }]">
  21. <a-select
  22. ref="select"
  23. v-model:value="dataModel.sex"
  24. :options="genderList"
  25. :field-names="{ label: 'name', value: 'value' }"
  26. :allow-clear="true"
  27. >
  28. </a-select>
  29. </a-form-item>
  30. </a-col>
  31. </a-row>
  32. <a-row :gutter="24">
  33. <a-col :span="8">
  34. <a-form-item label="重点人员类别" :label-col="{span:6}" name="keyPersonTypeID"
  35. :rules="[{ required: true, message: '请选择重点人员类别!' }]">
  36. <a-select
  37. ref="select"
  38. v-model:value="dataModel.keyPersonTypeID"
  39. :options="keyPersonTypeList"
  40. :field-names="{ label: 'name', value: 'value' }"
  41. :allow-clear="true"
  42. >
  43. </a-select>
  44. </a-form-item>
  45. </a-col>
  46. <a-col :span="8">
  47. <a-form-item label="就业状态" :label-col="{span:6}" name="jobStatusID"
  48. :rules="[{ required: true, message: '请选择就业状态!' }]">
  49. <a-select
  50. ref="select"
  51. v-model:value="dataModel.jobStatusID"
  52. :options="jobStatusList"
  53. :field-names="{ label: 'name', value: 'value' }"
  54. :allow-clear="true"
  55. >
  56. </a-select>
  57. </a-form-item>
  58. </a-col>
  59. <a-col :span="8">
  60. <a-form-item label="所属驿站" :label-col="{span:6}" name="siteID"
  61. :rules="[{ required: true, message: '请选择所属驿站!' }]">
  62. <a-select
  63. ref="select"
  64. v-model:value="dataModel.siteID"
  65. :options="siteList"
  66. :field-names="{ label: 'siteName', value: 'siteID' }"
  67. :allow-clear="true"
  68. >
  69. </a-select>
  70. </a-form-item>
  71. </a-col>
  72. </a-row>
  73. <a-row :gutter="24">
  74. <a-col :span="8">
  75. <a-form-item
  76. label="联系人"
  77. :label-col="{ span: 6 }"
  78. name="userName">
  79. <a-input v-model:value="dataModel.userName" placeholder=""/>
  80. </a-form-item>
  81. </a-col>
  82. <a-col :span="8">
  83. <a-form-item label="联系电话" :label-col="{ span: 6 }"
  84. name="userMobile" :rules="[{ required: true,message: '请输入联系电话!' }]">
  85. <a-input v-model:value="dataModel.userMobile" placeholder=""/>
  86. </a-form-item>
  87. </a-col>
  88. <a-col :span="8">
  89. <a-form-item
  90. label="地址"
  91. :label-col="{ span: 6 }"
  92. name="address"
  93. :rules="[{ required: true, message: '请输入地址!' }]"
  94. >
  95. <a-input v-model:value="dataModel.address" placeholder=""/>
  96. </a-form-item>
  97. </a-col>
  98. </a-row>
  99. <a-divider orientation="left">其它信息</a-divider>
  100. <a-row :gutter="24">
  101. <a-col :span="8">
  102. <a-form-item label="民族" :label-col="{ span: 6 }" name="nation">
  103. <!-- <a-input v-model:value="dataModel.nation" placeholder=""/>-->
  104. <a-select
  105. ref="select"
  106. v-model:value="dataModel.nation"
  107. :options="nationList"
  108. :field-names="{ label: 'name', value: 'value' }"
  109. :allow-clear="true"
  110. ></a-select>
  111. </a-form-item>
  112. </a-col>
  113. <a-col :span="8">
  114. <a-form-item label="政治面貌" :label-col="{span:6}" name="politicsStatusID">
  115. <a-select
  116. ref="select"
  117. v-model:value="dataModel.politicsStatusID"
  118. :options="politicsStatusList"
  119. :field-names="{ label: 'name', value: 'value' }"
  120. :allow-clear="true"
  121. >
  122. </a-select>
  123. </a-form-item>
  124. </a-col>
  125. <a-col :span="8">
  126. <a-form-item label="出生地" :label-col="{ span: 6 }" name="birthPlace">
  127. <a-input v-model:value="dataModel.birthPlace" placeholder=""/>
  128. </a-form-item>
  129. </a-col>
  130. </a-row>
  131. <a-row :gutter="24">
  132. <a-col :span="8">
  133. <a-form-item label="出生日期" :label-col="{ span: 6 }" name="birthDay" >
  134. <a-date-picker
  135. v-model:value="dataModel.birthDay"
  136. picker="date"
  137. value-format="YYYY-MM-DD"/>
  138. </a-form-item>
  139. </a-col>
  140. <a-col :span="8">
  141. <a-form-item label="户口性质" :label-col="{span:6}" name="familyNatureID" >
  142. <a-select
  143. ref="select"
  144. v-model:value="dataModel.familyNatureID"
  145. :options="familyNatureList"
  146. :field-names="{ label: 'name', value: 'value' }"
  147. :allow-clear="true"
  148. >
  149. </a-select>
  150. </a-form-item>
  151. </a-col>
  152. <a-col :span="8">
  153. <a-form-item label="文化程度" :label-col="{span:6}" name="cultureRank">
  154. <a-select
  155. ref="select"
  156. v-model:value="dataModel.cultureRank"
  157. :options="cultureList"
  158. :field-names="{ label: 'name', value: 'value' }"
  159. :allow-clear="true"
  160. >
  161. </a-select>
  162. </a-form-item>
  163. </a-col>
  164. </a-row>
  165. <a-row :gutter="24">
  166. <a-col :span="8">
  167. <a-form-item label="健康状况" :label-col="{span:6}" name="healthID">
  168. <a-select
  169. ref="select"
  170. v-model:value="dataModel.healthID"
  171. :options="healthList"
  172. :field-names="{ label: 'name', value: 'value' }"
  173. :allow-clear="true"
  174. >
  175. </a-select>
  176. </a-form-item>
  177. </a-col>
  178. <a-col :span="8">
  179. <a-form-item label="婚姻状况" :label-col="{span:6}" name="maritalStatusID">
  180. <a-select
  181. ref="select"
  182. v-model:value="dataModel.maritalStatusID"
  183. :options="maritalStatusList"
  184. :field-names="{ label: 'name', value: 'value' }"
  185. :allow-clear="true"
  186. >
  187. </a-select>
  188. </a-form-item>
  189. </a-col>
  190. <a-col :span="8">
  191. <a-form-item
  192. label="血型"
  193. :label-col="{ span: 6 }"
  194. name="bloodTypeID" >
  195. <a-select
  196. ref="select"
  197. v-model:value="dataModel.bloodTypeID"
  198. :options="bloodTypeList"
  199. :field-names="{ label: 'name', value: 'value' }"
  200. :allow-clear="true"
  201. >
  202. </a-select>
  203. </a-form-item>
  204. </a-col>
  205. </a-row>
  206. <a-row :gutter="24">
  207. <a-col :span="8">
  208. <a-form-item
  209. label="身高"
  210. :label-col="{ span: 6 }"
  211. name="height">
  212. <a-input v-model:value="dataModel.height" placeholder="" suffix="cm"/>
  213. </a-form-item>
  214. </a-col>
  215. <a-col :span="8">
  216. <a-form-item
  217. label="体重"
  218. :label-col="{ span: 6 }"
  219. name="weight" >
  220. <a-input v-model:value="dataModel.weight" placeholder="" suffix="kg"/>
  221. </a-form-item>
  222. </a-col>
  223. <a-col :span="8">
  224. <a-form-item
  225. label="视力"
  226. :label-col="{ span: 6 }"
  227. name="vision">
  228. <a-input v-model:value="dataModel.vision" placeholder=""/>
  229. </a-form-item>
  230. </a-col>
  231. </a-row>
  232. <a-row :gutter="24">
  233. <a-col :span="8">
  234. <a-form-item label="省份" :label-col="{span:6}" name="provinceCode">
  235. <a-select
  236. ref="select"
  237. v-model:value="dataModel.provinceCode"
  238. :options="provinceList"
  239. :field-names="{ label: 'name', value: 'code' }"
  240. :allow-clear="true"
  241. >
  242. </a-select>
  243. </a-form-item>
  244. </a-col>
  245. <a-col :span="8">
  246. <a-form-item label="市/县" :label-col="{span:6}" name="regionCode">
  247. <a-select
  248. ref="select"
  249. v-model:value="dataModel.regionCode"
  250. :options="regionList"
  251. :field-names="{ label: 'name', value: 'code' }"
  252. :allow-clear="true"
  253. @change="regionChange"
  254. >
  255. </a-select>
  256. </a-form-item>
  257. </a-col>
  258. <a-col :span="8">
  259. <a-form-item label="镇街" :label-col="{span:6}" name="streetCode">
  260. <a-select
  261. ref="select"
  262. v-model:value="dataModel.streetCode"
  263. :options="streetList"
  264. :field-names="{ label: 'name', value: 'code' }"
  265. :allow-clear="true"
  266. >
  267. </a-select>
  268. </a-form-item>
  269. </a-col>
  270. </a-row>
  271. <a-row :gutter="24">
  272. <a-col :span="8">
  273. <a-form-item
  274. label="家庭住址"
  275. :label-col="{ span: 6 }"
  276. name="familyAddress" >
  277. <a-input v-model:value="dataModel.familyAddress" placeholder=""/>
  278. </a-form-item>
  279. </a-col>
  280. <a-col :span="8">
  281. <a-form-item
  282. label="邮政编码"
  283. :label-col="{ span: 6 }"
  284. name="postalCode">
  285. <a-input v-model:value="dataModel.postalCode" placeholder=""/>
  286. </a-form-item>
  287. </a-col>
  288. <a-col :span="8">
  289. <a-form-item
  290. label="电子邮箱"
  291. :label-col="{ span: 6 }"
  292. name="email">
  293. <a-input v-model:value="dataModel.email" placeholder=""/>
  294. </a-form-item>
  295. </a-col>
  296. </a-row>
  297. <a-row :gutter="24">
  298. <a-col :span="16">
  299. <a-form-item label="兴趣爱好" :label-col="{ span: 3}" name="hobby" >
  300. <a-textarea v-model:value="dataModel.hobby" placeholder="兴趣爱好" :rows="2" />
  301. </a-form-item>
  302. </a-col>
  303. </a-row>
  304. <a-row :gutter="24">
  305. <a-col :span="16">
  306. <a-form-item label="个人技能" :label-col="{ span: 3 }" name="personalSkills" >
  307. <a-textarea v-model:value="dataModel.personalSkills" placeholder="个人技能" :rows="4" />
  308. </a-form-item>
  309. </a-col>
  310. </a-row>
  311. <a-row>
  312. <a-col :span="24" style="text-align: right; margin-top: 20px; margin-right: 20px">
  313. <Space>
  314. <a-button @click="addEducation">
  315. <template #icon>
  316. <plus-circle-outlined/>
  317. </template>
  318. 新增
  319. </a-button>
  320. </Space>
  321. </a-col>
  322. </a-row>
  323. <a-divider orientation="left">教育经历</a-divider>
  324. <a-row>
  325. <a-col style="margin-bottom: 20px;">
  326. <a-table :columns="educationColumns" :data-source="educationData" :pagination="false" bordered>
  327. <template #bodyCell="{ column ,index}">
  328. <template v-if="column.key === 'schoolName'">
  329. <div>
  330. <a-input v-model:value="educationData[index][column.key]" style="width: 200px" />
  331. </div>
  332. </template>
  333. <template v-if="column.key === 'cultureRank'">
  334. <div>
  335. <a-select
  336. ref="select"
  337. v-model:value="educationData[index][column.key]"
  338. :options="cultureList"
  339. :field-names="{ label: 'name', value: 'value' }"
  340. :allow-clear="false" style="width: 200px" >
  341. </a-select>
  342. </div>
  343. </template>
  344. <template v-if="column.key === 'schoolTime'">
  345. <div>
  346. <a-date-picker
  347. v-model:value="educationData[index][column.key]"
  348. picker="date" :allow-clear="false"
  349. value-format="YYYY-MM-DD"
  350. />
  351. </div>
  352. </template>
  353. <template v-if="column.key === 'overTime'">
  354. <div>
  355. <a-date-picker
  356. v-model:value="educationData[index][column.key]"
  357. picker="date" :allow-clear="false"
  358. value-format="YYYY-MM-DD"
  359. />
  360. </div>
  361. </template>
  362. <template v-if="column.key === 'major'">
  363. <div>
  364. <a-input
  365. v-model:value="educationData[index][column.key]" style="width: 200px"
  366. />
  367. </div>
  368. </template>
  369. <template v-if="column.key === 'educationOperation'">
  370. <a-button type="link" size="small" @click="delEducation(index)">删除</a-button>
  371. </template>
  372. </template>
  373. </a-table>
  374. </a-col>
  375. </a-row>
  376. <a-row>
  377. <a-col :span="24" style="text-align: right; margin-top: 20px; margin-right: 20px">
  378. <Space>
  379. <a-button @click="addExperience">
  380. <template #icon>
  381. <plus-circle-outlined/>
  382. </template>
  383. 新增
  384. </a-button>
  385. </Space>
  386. </a-col>
  387. </a-row>
  388. <a-divider orientation="left">工作经历</a-divider>
  389. <a-row>
  390. <a-col style="margin-bottom: 20px;">
  391. <a-table :columns="experienceColumns" :data-source="experienceData" :pagination="false"
  392. bordered>
  393. <template #bodyCell="{ column ,index}">
  394. <template v-if="column.key === 'startTime'">
  395. <div>
  396. <a-date-picker v-model:value="experienceData[index][column.key]"
  397. picker="date" value-format="YYYY-MM-DD" :allow-clear="false" />
  398. </div>
  399. </template>
  400. <template v-if="column.key === 'endTime'">
  401. <div>
  402. <a-date-picker v-model:value="experienceData[index][column.key]"
  403. picker="date" value-format="YYYY-MM-DD" :allow-clear="false" />
  404. </div>
  405. </template>
  406. <template v-if="column.key === 'workAddress'">
  407. <div>
  408. <a-input
  409. v-model:value="experienceData[index][column.key]" style="width: 200px"
  410. />
  411. </div>
  412. </template>
  413. <template v-if="column.key === 'duties'">
  414. <div>
  415. <a-input
  416. v-model:value="experienceData[index][column.key]" style="width: 200px"
  417. />
  418. </div>
  419. </template>
  420. <template v-if="column.key === 'experienceOperation'">
  421. <a-button type="link" size="small" @click="deleteExperience(index)">删除</a-button>
  422. </template>
  423. </template>
  424. </a-table>
  425. </a-col>
  426. </a-row>
  427. <a-form-item class="buttom-btns">
  428. <a-button @click="onClose">取消</a-button>
  429. <a-button type="primary" html-type="submit">提交</a-button>
  430. </a-form-item>
  431. </a-form>
  432. </div>
  433. </template>
  434. <script lang="ts">
  435. import {defineComponent, reactive, ref, toRefs} from 'vue';
  436. import type {SelectProps, TableColumnsType} from 'ant-design-vue';
  437. import {message} from "ant-design-vue";
  438. import {useTabsViewStore} from '@/store/modules/tabsView';
  439. import BUploadFile from '@/components/file/uploadFile.vue';
  440. import {get} from "@/api/common";
  441. import {getSysDictionaryList} from '@/api/system/dictionary';
  442. import {getDataById, getEducationList, getExperienceList, save} from '@/api/jobUserManager/jobuser';
  443. import {getSiteList} from "@/api/baseSettings/siteInfo";
  444. import {getInfo} from "@/api/account";
  445. interface FormState {
  446. dataModel: any;
  447. }
  448. export default defineComponent(
  449. {
  450. components: {BUploadFile},
  451. setup() {
  452. // const router = useRouter();
  453. const isAllowCommit = ref(true);
  454. const formState = reactive<FormState>({dataModel: {}});
  455. const formTableState = reactive({loading: false});
  456. const searchParams = reactive({
  457. pageIndex: 1,
  458. pageSize: 99
  459. });
  460. const provinceList = ref<SelectProps['options']>([{name: '广东省', code: '440000000000000'}]);
  461. const siteList = ref<any>([]);
  462. const genderList = ref<SelectProps['options']>();
  463. const keyPersonTypeList = ref<SelectProps['options']>();
  464. const jobStatusList = ref<SelectProps['options']>();
  465. const maritalStatusList = ref<SelectProps['options']>();
  466. const healthList = ref<SelectProps['options']>();
  467. const bloodTypeList = ref<SelectProps['options']>();
  468. const cultureList = ref<SelectProps['options']>();
  469. const politicsStatusList = ref<SelectProps['options']>();
  470. const regionList = ref<SelectProps['options']>();
  471. const streetList = ref<SelectProps['options']>();
  472. const familyNatureList = ref<SelectProps['options']>();
  473. const nationList = ref<SelectProps['options']>();
  474. const educationData = ref([]);
  475. const educationColumns: TableColumnsType = [
  476. {
  477. title: '序号',
  478. align: "center",
  479. key: 'educationID',
  480. width: 120,
  481. customRender: item => `${searchParams.pageSize * (searchParams.pageIndex - 1) + item.index + 1}`
  482. },
  483. {
  484. title: '学校名',
  485. dataIndex: 'schoolName',
  486. key: 'schoolName',
  487. align: "center",
  488. width: 120
  489. },
  490. {
  491. title: '文化程度',
  492. dataIndex: 'cultureRank',
  493. key: 'cultureRank',
  494. align: "center",
  495. width: 120
  496. },
  497. {
  498. title: '就读时间',
  499. dataIndex: 'schoolTime',
  500. key: 'schoolTime',
  501. align: "center",
  502. width: 120
  503. },
  504. {
  505. title: '毕业时间',
  506. dataIndex: 'overTime',
  507. key: 'overTime',
  508. align: "center",
  509. width: 120
  510. },
  511. {
  512. title: '专业',
  513. dataIndex: 'major',
  514. key: 'major',
  515. align: "center",
  516. width: 120
  517. },
  518. {title: '操作', key: 'educationOperation', fixed: 'right', width: 120, align: "center"},
  519. ];
  520. // const fullpath = router.currentRoute.value.fullPath;
  521. const tabsViewStore = useTabsViewStore();
  522. const isEdit = true;
  523. const fileList = ref();
  524. const setFileList = (files) => {
  525. fileList.value = files;
  526. };
  527. const inputDataValidate = () =>{
  528. isAllowCommit.value = true;
  529. const identReg = /^[1-9]{1}[0-9]{14}$|^[1-9]{1}[0-9]{16}([0-9]|[xX])$/;
  530. if(!formState.dataModel.identityNumber.match(identReg)){
  531. message.error("输入的身份证号码有误!");
  532. isAllowCommit.value = false;
  533. }
  534. const mobileReg = /^1[3|4|5|6|7|8|9]\d{9}$/;
  535. if(!mobileReg.test(formState.dataModel.userMobile)){
  536. message.error("输入的联系电话有误!");
  537. isAllowCommit.value = false;
  538. }
  539. const emailReg = /^[a-z0-9]+([._\\-]*[a-z0-9])*@([a-z0-9]+[-a-z0-9]*[a-z0-9]+.){1,63}[a-z0-9]+$/;
  540. if(formState.dataModel.email!=null && formState.dataModel.email.trim()!==""){
  541. if(!emailReg.test(formState.dataModel.email)){
  542. message.error("输入的电子邮箱有误!");
  543. isAllowCommit.value = false;
  544. }
  545. }
  546. };
  547. const getAllSites = () => {
  548. getSiteList({pageIndex:1,pageSize:9999}).then((result :any) => {
  549. siteList.value = result.list;
  550. })
  551. }
  552. const getHealthList = () => {
  553. getSysDictionaryList('Health').then((data) => {
  554. healthList.value = data;
  555. });
  556. };
  557. const getGenderList = () => {
  558. getSysDictionaryList('Gender').then((data) => {
  559. genderList.value = data;
  560. });
  561. };
  562. const getCultureList = () => {
  563. getSysDictionaryList('CultureLevel').then((data) => {
  564. cultureList.value = data;
  565. });
  566. };
  567. const getJobStatusList = () => {
  568. getSysDictionaryList('JobStatus').then((data) => {
  569. jobStatusList.value = data;
  570. });
  571. };
  572. const getNationList = () => {
  573. getSysDictionaryList('NationType').then((data) => {
  574. nationList.value = data;
  575. });
  576. };
  577. const getBloodTypeList = () => {
  578. getSysDictionaryList('BloodType').then((data) => {
  579. bloodTypeList.value = data;
  580. });
  581. };
  582. const getFamilyNatureList = () => {
  583. getSysDictionaryList('FamilyNature').then((data) => {
  584. familyNatureList.value = data;
  585. });
  586. };
  587. const getKeyPersonTypeList = () => {
  588. getSysDictionaryList('KeyPersonType').then((data) => {
  589. keyPersonTypeList.value = data;
  590. });
  591. };
  592. const getMaritalStatusList = () => {
  593. getSysDictionaryList('MaritalStatus').then((data) => {
  594. maritalStatusList.value = data;
  595. });
  596. };
  597. const getPoliticsStatusList = () => {
  598. getSysDictionaryList('PoliticsStatus').then((data) => {
  599. politicsStatusList.value = data;
  600. });
  601. };
  602. get('system/area/getCityList', {}).then(data => {
  603. regionList.value = data;
  604. });
  605. const changeCity = () => {
  606. if (formState.dataModel.regionCode) {
  607. get('system/area/getAreaList', {code: formState.dataModel.regionCode}).then(data => {
  608. streetList.value = data;
  609. // formState.dataModel.streetCode = "";
  610. })
  611. }
  612. }
  613. const regionChange = async function () {
  614. formState.dataModel.streetCode = null;
  615. changeCity();
  616. }
  617. const loadEducation = (id: any) => {
  618. getEducationList(id).then(data => {
  619. if (data)
  620. educationData.value = data;
  621. });
  622. }
  623. const addEducation = () => {
  624. (educationData.value as any[]).push({
  625. schoolName: '',
  626. cultureRank: null,
  627. schoolTime: null,
  628. overTime: null,
  629. major: ''
  630. });
  631. }
  632. const delEducation = (record) => {
  633. (educationData.value as any[]).splice(record, 1);
  634. }
  635. const experienceColumns: TableColumnsType = [
  636. {
  637. title: '序号',
  638. align: "center",
  639. key: 'experienceID',
  640. width: 120,
  641. customRender: item => `${searchParams.pageSize * (searchParams.pageIndex - 1) + item.index + 1}`
  642. },
  643. {
  644. title: '开始时间',
  645. dataIndex: 'startTime',
  646. key: 'startTime',
  647. align: "center",
  648. width: 120
  649. },
  650. {
  651. title: '结束时间',
  652. dataIndex: 'endTime',
  653. key: 'endTime',
  654. align: "center",
  655. width: 120
  656. },
  657. {
  658. title: '工作单位',
  659. dataIndex: 'workAddress',
  660. key: 'workAddress',
  661. align: "center",
  662. width: 120
  663. },
  664. {
  665. title: '职务',
  666. dataIndex: 'duties',
  667. key: 'duties',
  668. align: "center",
  669. width: 120
  670. },
  671. {title: '操作', key: 'experienceOperation', fixed: 'right', width: 120, align: "center"},
  672. ]
  673. const experienceData = ref([]);
  674. const loadExperienceData = (id: any) => {
  675. getExperienceList(id).then(data => {
  676. if (data) {
  677. experienceData.value = data;
  678. }
  679. })
  680. }
  681. const deleteExperience = (record) => {
  682. (experienceData.value as any[]).splice(record, 1);
  683. }
  684. const addExperience = () => {
  685. (experienceData.value as any[]).push({
  686. startTime: null,
  687. endTime: null,
  688. workAddress: null,
  689. duties: null,
  690. });
  691. }
  692. const onClose = (reload: any) => {
  693. tabsViewStore.closeCurrentTabByPath('/jobusermgr/jobseeker/add');
  694. tabsViewStore.closeCurrentTabByPath('/jobusermgr/jobseeker/edit');
  695. tabsViewStore.openTab('/jobusermgr/jobseeker/index', {reload: reload});
  696. };
  697. const onFinish = () => {
  698. inputDataValidate();
  699. if(isAllowCommit.value){
  700. formState.dataModel.jobEducation = educationData.value;
  701. formState.dataModel.jobExperience = experienceData.value;
  702. save(formState.dataModel).then(result => {
  703. if (result) {
  704. onClose(1)
  705. }
  706. });
  707. }
  708. }
  709. const loadData = (id: any) => {
  710. getAllSites();
  711. getHealthList();
  712. getGenderList();
  713. getCultureList();
  714. getJobStatusList();
  715. getNationList();
  716. getBloodTypeList();
  717. getFamilyNatureList();
  718. getKeyPersonTypeList();
  719. getMaritalStatusList();
  720. getPoliticsStatusList();
  721. getInfo().then((loginUserInfo:any)=>{
  722. getDataById(id,loginUserInfo.userID).then(data => {
  723. formState.dataModel = data;
  724. if (formState.dataModel.regionCode) {
  725. changeCity();
  726. }
  727. });
  728. });
  729. };
  730. return {
  731. ...toRefs(formState),
  732. isEdit,
  733. loadData,
  734. onClose,
  735. onFinish,
  736. setFileList,
  737. addEducation,
  738. delEducation,
  739. loadEducation,
  740. inputDataValidate,
  741. siteList,
  742. regionList,
  743. streetList,
  744. cultureList,
  745. genderList,
  746. healthList,
  747. jobStatusList,
  748. provinceList,
  749. bloodTypeList,
  750. maritalStatusList,
  751. familyNatureList,
  752. formState,
  753. educationData,
  754. experienceData,
  755. formTableState,
  756. keyPersonTypeList,
  757. politicsStatusList,
  758. changeCity,
  759. regionChange,
  760. loadExperienceData,
  761. deleteExperience,
  762. addExperience,
  763. experienceColumns,
  764. educationColumns,
  765. nationList
  766. }
  767. },
  768. created() {
  769. const id = history.state.params?.id;
  770. this.loadData(id);
  771. if (id) {
  772. this.loadEducation(id);
  773. this.loadExperienceData(id);
  774. }
  775. }
  776. })
  777. </script>