applyEducationCode.vue 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556
  1. <!-- 退役军人职业教育码申请 -->
  2. <template>
  3. <view class="apply-code">
  4. <u-form :model="form" ref="uForm" label-width="160" label-align="left">
  5. <u-form-item label="姓名:" prop="veteName" :required="true">
  6. <u-input v-model="form.veteName" placeholder="请输入真实姓名" />
  7. </u-form-item>
  8. <u-form-item label="身份证号:" prop="veteIdCard" :required="true">
  9. <u-input v-model="form.veteIdCard" placeholder="请输入身份证号" @blur="idNumberChange" />
  10. </u-form-item>
  11. <u-form-item label="性别:" prop="veteSex" :required="true">
  12. <u-input v-model="form.veteSex" placeholder="输入身份证自动获取" disabled />
  13. </u-form-item>
  14. <u-form-item label="民族:" prop="nation" :required="true">
  15. <u-input v-model="form.nation" placeholder="请输入您的民族" />
  16. </u-form-item>
  17. <u-form-item label="联系电话:" prop="vetePhone" :required="true">
  18. <u-input v-model="form.vetePhone" placeholder="请输入您的联系电话" maxlength="11" />
  19. </u-form-item>
  20. <u-form-item label="QQ:" prop="qqNum">
  21. <u-input v-model="form.qqNum" placeholder="请输入您的QQ" />
  22. </u-form-item>
  23. <u-form-item label="微信:" prop="wxNum">
  24. <u-input v-model="form.wxNum" placeholder="请输入您的微信" />
  25. </u-form-item>
  26. <u-form-item label="文化程度:" prop="degrEduc" :required="true">
  27. <u-input v-model="form.degrEduc" placeholder="请选择您的文化程度" type="select" @click="degrEducShow = true"/>
  28. </u-form-item>
  29. <u-form-item label="政治面貌:" prop="politOutlook" :required="true">
  30. <u-input v-model="form.politOutlook" placeholder="请选择您的政治面貌" type="select" @click="politOutlookShow = true"/>
  31. </u-form-item>
  32. <u-form-item label="户籍类别:" prop="houseTypeId" :required="true">
  33. <u-radio-group v-model="form.houseTypeId" @change="houseTypeChange">
  34. <u-radio v-for="(item, index) in houseTypeList" :key="index" :name="item.value">
  35. {{ item.label }}
  36. </u-radio>
  37. </u-radio-group>
  38. </u-form-item>
  39. <u-form-item label="户籍地:" prop="veteHousehRegi" :required="true">
  40. <u-input v-model="form.veteHousehRegi" placeholder="请选择您的户籍地" type="select" @click="regionShow = true"/>
  41. </u-form-item>
  42. <u-form-item label="户籍区域:" prop="" :required="true">
  43. <u-input v-model="form.veteHousehArea" placeholder="请选择您的户籍区域" type="select" @click="areaShow = true"/>
  44. </u-form-item>
  45. <u-form-item label="就业状况:" prop="jobStatus" :required="true">
  46. <u-radio-group v-model="form.jobStatus" @change="employmentStatusChange">
  47. <u-radio v-for="(item, index) in employmentStatusList" :key="index" :name="item.value">
  48. {{ item.label }}
  49. </u-radio>
  50. </u-radio-group>
  51. </u-form-item>
  52. <u-form-item label="薪资范围:" prop="salaryRange" :required="true">
  53. <u-input v-model="form.salaryRange" placeholder="请选择您的薪资范围" type="select" @click="salaryRangeShow = true"/>
  54. </u-form-item>
  55. <u-form-item label="现家庭详细地址:" label-position="top" label-width="200" label-align="left" prop="veteResiAddress" :required="true">
  56. <u-input v-model="form.veteResiAddress" placeholder="请输入您的现家庭详细地址" />
  57. </u-form-item>
  58. <u-form-item label="近期1寸免冠照片:" label-position="top" label-width="200" label-align="left" prop="national">
  59. <view class="pic">
  60. <u-upload
  61. ref="uUpload"
  62. :action="action"
  63. :auto-upload="true"
  64. :custom-btn="true"
  65. :show-upload-list="false"
  66. max-count="1"
  67. :limitType="['png', 'jpg']"
  68. @on-success="uploadSuccess"
  69. >
  70. <view class="pic-upload-box" slot="addBtn">
  71. <view class="pic-upload">
  72. <image src="../../static/img/upload-add.png" mode=""/>
  73. <view class="font">上传照片</view>
  74. </view>
  75. <view class="tips">支持jpg.png格式</view>
  76. </view>
  77. </u-upload>
  78. <view class="pic-photograph" @click="photograph">
  79. <image src="../../static/img/paizhao.png" mode=""></image>
  80. <view class="font">立即拍照</view>
  81. </view>
  82. <view class="pic-url" v-if="form.files.length > 0">
  83. <view class="icon">
  84. <u-icon name="close" color="#fff" size="16" @click="clearFile"></u-icon>
  85. </view>
  86. <image :src="form.files[0].filesUrl" mode=""/>
  87. </view>
  88. </view>
  89. </u-form-item>
  90. <u-form-item>
  91. <u-button type="primary" class="submit" @click="submit">提交简历</u-button>
  92. </u-form-item>
  93. </u-form>
  94. <!-- 文化程度下拉 -->
  95. <u-select v-model="degrEducShow" :list="degrEducList" @confirm="degrEducChange" :default-value="degrEducIndex"/>
  96. <!-- 政治面貌下拉 -->
  97. <u-select v-model="politOutlookShow" :list="politOutlookList" @confirm="politOutlookChange" :default-value="politOutlookIndex"/>
  98. <!-- 户籍地下拉 -->
  99. <city-select-province v-model="regionShow" :default-region="['贵州省', '贵阳市']" @city-change="regionConfirm"/>
  100. <!-- 户籍区域下拉 -->
  101. <u-city-select v-model="areaShow" :default-region="[]" @city-change="areaConfirm"/>
  102. <!-- 工资范围下拉 -->
  103. <u-select v-model="salaryRangeShow" :list="salaryRangeList" @confirm="salaryRangeChange" :default-value="salaryRangeIndex"/>
  104. </view>
  105. </template>
  106. <script>
  107. import citySelectProvince from '../../uview-ui/components/u-city-select-province/u-city-select-province.vue'
  108. export default {
  109. components: {
  110. citySelectProvince
  111. },
  112. data() {
  113. return {
  114. // 上传地址
  115. action: this.config.uploadUrl,
  116. form: {
  117. veteName: '',
  118. veteIdCard: '',
  119. veteSex: '',
  120. national: '',
  121. phoneNumber: '',
  122. qqNum: '',
  123. wxNum: '',
  124. degrEduc: '',
  125. degrEducId: '',
  126. houseType: '',
  127. houseTypeId:'',
  128. politOutlook: '',
  129. politOutlookId:'',
  130. veteHousehRegi: '',
  131. veteHousehArea: '',
  132. veteResiAddress: '',
  133. veteDateBirth:'',
  134. veteStatus: '1',
  135. veteAttribute: '',
  136. files: [],
  137. jobStatus: '',
  138. jobStatusId: '',
  139. salaryRange: '',
  140. salaryRangeId: ''
  141. },
  142. // 表单验证
  143. rules: {
  144. veteName: [
  145. { required: true, message: '请输入姓名', trigger: [ 'change', 'blur' ]}
  146. ],
  147. veteIdCard: [
  148. {
  149. required: true,
  150. pattern: /(^\d{8}(0\d|10|11|12)([0-2]\d|30|31)\d{3}$)|(^\d{6}(18|19|20)\d{2}(0[1-9]|10|11|12)([0-2]\d|30|31)\d{3}(\d|X|x)$)/,
  151. // 正则检验前先将值转为字符串
  152. transform(value) {
  153. return String(value);
  154. },
  155. message: '请正确输入身份证号',
  156. trigger: ['change', 'blur']
  157. }
  158. ],
  159. vetePhone: [
  160. {
  161. pattern: /^(?:(?:\+|00)86)?1[3-9]\d{9}$/,
  162. message: '请正确输入手机号',
  163. required: true,
  164. trigger: ['change', 'blur'],
  165. }
  166. ],
  167. veteHousehRegi:[
  168. {
  169. required: true,
  170. message: '请选择户籍',
  171. trigger: ['change', 'blur'],
  172. }
  173. ],
  174. veteResiAddress:[
  175. {
  176. required: true,
  177. message: '请填写详细地址',
  178. trigger: ['change', 'blur'],
  179. }
  180. ],
  181. nation:[
  182. {
  183. required: true,
  184. message: '请填写民族',
  185. trigger: ['change', 'blur'],
  186. }
  187. ],
  188. degrEduc:[
  189. {
  190. required: true,
  191. message: '请选择文化程度',
  192. trigger: ['change', 'blur'],
  193. }
  194. ],
  195. politOutlook:[
  196. {
  197. required: true,
  198. message: '请选择政治面貌',
  199. trigger: ['change', 'blur']
  200. }
  201. ],
  202. houseTypeId:[
  203. {
  204. required: true,
  205. message: '请选择户籍类别',
  206. trigger: ['change', 'blur']
  207. }
  208. ],
  209. salaryRange: [
  210. {
  211. required: true,
  212. message: '请选择薪资范围',
  213. trigger: ['change', 'blur']
  214. }
  215. ],
  216. jobStatus: [
  217. {
  218. required: true,
  219. message: '请选择就业状态',
  220. trigger: ['change', 'blur']
  221. }
  222. ]
  223. },
  224. // 文化程度
  225. degrEducShow: false,
  226. degrEducList: [],
  227. degrEducIndex: [],
  228. // 政治面貌
  229. politOutlookShow: false,
  230. politOutlookList: [],
  231. politOutlookIndex: [],
  232. // 户籍地
  233. regionShow: false,
  234. // 户籍类型
  235. houseTypeShow: false,
  236. houseTypeList: [],
  237. houseTypeIndex: [],
  238. // 户籍区域
  239. areaShow: false,
  240. // 薪资范围
  241. salaryRangeShow: false,
  242. salaryRangeList: [],
  243. salaryRangeIndex: [],
  244. // 就业状态
  245. employmentStatusList: []
  246. }
  247. },
  248. onLoad() {
  249. this.getVeteDegrEduc();
  250. this.getVetePolitOutlook();
  251. this.getVeteHouseType();
  252. this.getSalaryRange();
  253. this.getEmploymentStatus();
  254. this.getVeteEducData();
  255. },
  256. onReady() {
  257. this.$refs.uForm.setRules(this.rules);
  258. this.form.vetePhone = this.vuex_user.mobile;
  259. },
  260. methods: {
  261. /**
  262. * 获取已经提交的数据
  263. */
  264. getVeteEducData(){
  265. this.$u.api.getVeteEducData().then(res => {
  266. if(res.code == 200){
  267. for(let key in res.data.veteEduc) {
  268. if(key !== 'files'){
  269. this.form[key] = res.data.veteEduc[key];
  270. }
  271. };
  272. if (res.data.veteEduc) {
  273. this.form.veteSex = res.data.veteEduc.veteSex === 0 ? '男' : '女';
  274. // 文化程度
  275. this.degrEducList.forEach((item, index) => {
  276. if (item.text === res.data.veteEduc.degrEducId) {
  277. this.degrEducIndex = [index]
  278. }
  279. })
  280. // 政治面貌
  281. this.politOutlookList.forEach((item, index) => {
  282. if (item.text === res.data.veteEduc.politOutlookId) {
  283. this.politOutlookIndex = [index]
  284. }
  285. })
  286. // 户籍类型
  287. this.houseTypeList.forEach((item, index) => {
  288. if (item.text === res.data.veteEduc.houseTypeId) {
  289. this.houseTypeIndex = [index]
  290. }
  291. })
  292. }
  293. this.form.files = res.data.files;
  294. }
  295. });
  296. },
  297. /**
  298. * 获取文化程度类别
  299. */
  300. getVeteDegrEduc(){
  301. this.$u.api.getDictdataUrl({key:'degr_educ'}).then(res=>{
  302. if(res.code == 200){
  303. this.degrEducList = res.data.map(item => {
  304. return {
  305. ...item,
  306. value: item.text
  307. }
  308. });
  309. }
  310. });
  311. },
  312. /**
  313. * 文化程度下拉变化
  314. */
  315. degrEducChange(item) {
  316. this.form.degrEduc = item[0].label
  317. this.form.degrEducId = item[0].value
  318. },
  319. /**
  320. * 获取政治面貌类别
  321. */
  322. getVetePolitOutlook(){
  323. this.$u.api.getDictdataUrl({ key: 'polit_outlook' }).then(res => {
  324. if(res.code == 200){
  325. this.politOutlookList = res.data.map(item => {
  326. return {
  327. ...item,
  328. value: item.text
  329. }
  330. });
  331. }
  332. });
  333. },
  334. /**
  335. * 政治面貌下拉改变
  336. */
  337. politOutlookChange(item) {
  338. this.form.politOutlook = item[0].label
  339. this.form.politOutlookId = item[0].value
  340. },
  341. /**
  342. * 户籍地
  343. */
  344. regionConfirm(e){
  345. this.form.veteHousehRegi = `${e.province.label}-${e.city.label}`
  346. },
  347. /**
  348. * 户籍区域
  349. */
  350. areaConfirm(e) {
  351. this.form.veteHousehArea = `${e.province.label}-${e.city.label}-${e.area.label}`
  352. },
  353. /**
  354. * 获取户籍类别
  355. */
  356. getVeteHouseType(){
  357. this.$u.api.getDictdataUrl({ key:'house_type' }).then(res => {
  358. if(res.code === 200){
  359. this.houseTypeList = res.data.map(item => {
  360. return {
  361. ...item,
  362. value: item.text
  363. }
  364. });
  365. }
  366. });
  367. },
  368. /**
  369. * 户籍类别单选触发
  370. */
  371. houseTypeChange(val){
  372. this.houseTypeList.forEach(item => {
  373. if (item.value === val) {
  374. this.form.houseType = item.label
  375. }
  376. })
  377. },
  378. /**
  379. * 就业状态单选触发
  380. * @param { String } val
  381. */
  382. employmentStatusChange(val) {
  383. // this.employmentStatusList.forEach(item => {
  384. // if (item.value === val) {
  385. // this.form.jobStatus =
  386. // }
  387. // })
  388. },
  389. /**
  390. * 获取薪资范围
  391. */
  392. getSalaryRange(){
  393. this.$u.api.getDictdataUrl({ key:'salary_range' }).then(res => {
  394. if(res.code === 200){
  395. this.salaryRangeList = res.data.map(item => {
  396. return {
  397. ...item,
  398. value: item.text
  399. }
  400. });
  401. }
  402. });
  403. },
  404. /**
  405. * 薪资范围
  406. * @param {Object} e
  407. */
  408. salaryRangeChange(e) {
  409. this.form.salaryRange = e[0].label
  410. this.form.salaryRangeId = e[0].value
  411. },
  412. /**
  413. * 就业状态
  414. */
  415. getEmploymentStatus(){
  416. this.$u.api.getDictdataUrl({ key:'member_job_status' }).then(res => {
  417. if(res.code === 200){
  418. this.employmentStatusList = res.data.map(item => {
  419. return {
  420. ...item,
  421. value: item.text
  422. }
  423. });
  424. }
  425. });
  426. },
  427. /**
  428. * @param { String } val
  429. */
  430. idNumberChange(val) {
  431. const reg =
  432. /^\d{6}((?:19|20)((?:\d{2}(?:0[13578]|1[02])(?:0[1-9]|[12]\d|3[01]))|(?:\d{2}(?:0[13456789]|1[012])(?:0[1-9]|[12]\d|30))|(?:\d{2}02(?:0[1-9]|1\d|2[0-8]))|(?:(?:0[48]|[2468][048]|[13579][26])0229)))\d{2}(\d)[xX\d]$/
  433. if (!reg.test(val)) {
  434. return
  435. }
  436. // 根据身份证得出性别
  437. this.form.veteSex = (parseInt(val.substr(16, 1)) % 2 === 1 ? '男' : '女');
  438. // 设置出生日期
  439. this.form.veteDateBirth = val.substring(6, 10) + "-" + val.substring(10, 12) + "-" + val.substring(12, 14) + ' 00:00:00';
  440. // 根据身份证号获取基本信息
  441. this.$u.api.getIdInfo({ id: this.form.veteIdCard }).then(res=>{
  442. if (res.code === 200) {
  443. if (res.data) {
  444. this.form.nation = res.data.nation;
  445. this.form.veteName = res.data.veteName;
  446. this.form.vetePhone = res.data.vetePhone;
  447. this.form.veteResiAddress = res.data.veteResiAddress;
  448. }
  449. } else{
  450. uni.showToast({
  451. icon: 'none',
  452. title: res.msg
  453. })
  454. }
  455. })
  456. },
  457. /**
  458. * 图片上传成功
  459. */
  460. uploadSuccess(e) {
  461. this.form.files = []
  462. this.form.files.push({ filesType: 6, filesUrl: e.data.url})
  463. },
  464. /**
  465. * 拍照
  466. */
  467. photograph() {
  468. uni.chooseImage({
  469. count: 1,
  470. sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图,默认二者都有
  471. sourceType: ['camera'], //从相册选择
  472. success: (res) => {
  473. const tempFilePaths = res.tempFilePaths;
  474. uni.uploadFile({
  475. url: this.config.uploadUrl, // 服务器地址
  476. fileType: "image",// ZFB必填,不然报错
  477. filePath: tempFilePaths[0], // 这个就是我们上面拍照返回或者先中照片返回的数组
  478. name: 'imgFile',
  479. success: (uploadFileRes) => {
  480. const file = JSON.parse(uploadFileRes.data)
  481. this.form.files = []
  482. this.form.files.push({ filesType: 6, filesUrl: file.data.url})
  483. }
  484. });
  485. }
  486. })
  487. },
  488. /**
  489. * 清空图片文件
  490. */
  491. clearFile() {
  492. uni.showModal({
  493. title: '提示',
  494. content: '您确定要删除此项吗?',
  495. success: async (res) => {
  496. if (res.confirm) {
  497. this.form.files = []
  498. }
  499. }
  500. });
  501. },
  502. submit() {
  503. console.log(this.form)
  504. this.$refs.uForm.validate(valid => {
  505. if (valid) {
  506. if (this.form.files.length < 1){
  507. uni.showToast({
  508. title: '请上传所需图片',
  509. icon:'none',
  510. duration: 2000
  511. });
  512. } else {
  513. let params = {
  514. veteEduc: {}
  515. };
  516. params.files = this.form.files
  517. for(let key in this.form) {
  518. if (key !== 'files') {
  519. params.veteEduc[key] = this.form[key];
  520. }
  521. };
  522. params.veteEduc.veteSex = params.veteEduc.veteSex === '男' ? 0 : 1;
  523. this.$u.api.veteEduc(params).then(res => {
  524. if (res.code === 200 ) {
  525. uni.showToast({
  526. title: '提交成功,等待审核!',
  527. duration: 2000,
  528. success: () => {
  529. this.$u.route('/pages/applyEducationCode/applyEducationSuccess')
  530. }
  531. });
  532. } else {
  533. uni.showToast({
  534. title: res.msg,
  535. icon:'none',
  536. duration: 2000
  537. });
  538. }
  539. })
  540. }
  541. }
  542. });
  543. }
  544. }
  545. }
  546. </script>
  547. <style lang="scss" scoped>
  548. @import './applyEducationCode.scss';
  549. </style>