applyEducationCode.vue 16 KB

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