applyEducationCode.vue 16 KB

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