applyEducationCode.vue 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372
  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="houseType" :required="true">
  33. <u-input v-model="form.houseType" placeholder="请选择您的户籍类型" type="select" @click="houseTypeShow = true"/>
  34. </u-form-item>
  35. <u-form-item label="户籍地:" prop="veteHousehRegi" :required="true">
  36. <u-input v-model="form.veteHousehRegi" placeholder="请选择您的户籍地" type="select" @click="regionShow = true"/>
  37. </u-form-item>
  38. <u-form-item label="现家庭详细地址:" label-position="top" label-width="200" label-align="left" prop="veteResiAddress" :required="true">
  39. <u-input v-model="form.veteResiAddress" placeholder="请输入您的现家庭详细地址" />
  40. </u-form-item>
  41. <u-form-item label="近期1寸免冠照片:" label-position="top" label-width="200" label-align="left" prop="national">
  42. <view class="pic">
  43. <u-upload ref="uUpload" :action="action" :auto-upload="true" :custom-btn="true" max-count="1" :limitType="['png', 'jpg']" @on-success="uploadSuccess">
  44. <view class="pic-upload-box" v-if="form.files.length === 0" slot="addBtn">
  45. <view class="pic-upload">
  46. <image src="../../static/img/upload-add.png" mode=""/>
  47. <view class="font">上传照片</view>
  48. </view>
  49. <view class="tips">支持jpg.png格式</view>
  50. </view>
  51. </u-upload>
  52. <view class="pic-photograph" @click="photograph" v-if="form.files.length === 0">
  53. <image src="../../static/img/paizhao.png" mode=""></image>
  54. <view class="font">立即拍照</view>
  55. </view>
  56. </view>
  57. </u-form-item>
  58. <u-form-item>
  59. <u-button type="primary" class="submit" @click="submit">提交简历</u-button>
  60. </u-form-item>
  61. </u-form>
  62. <!-- 文化程度下拉 -->
  63. <u-select v-model="degrEducShow" :list="degrEducList" @confirm="degrEducChange"/>
  64. <!-- 政治面貌下拉 -->
  65. <u-select v-model="politOutlookShow" :list="politOutlookList" @confirm="politOutlookChange"/>
  66. <!-- 户籍地 -->
  67. <u-picker mode="region" v-model="regionShow" :default-region='["贵州省", "贵阳市", "南明区"]' @confirm="regionConfirm"/>
  68. <!-- 户籍类型下拉 -->
  69. <u-select v-model="houseTypeShow" :list="houseTypeList" @confirm="houseTypeChange"/>
  70. </view>
  71. </template>
  72. <script>
  73. export default {
  74. data() {
  75. return {
  76. // 上传地址
  77. action: this.config.uploadUrl,
  78. form: {
  79. veteName: '',
  80. veteIdCard: '',
  81. veteSex: '',
  82. national: '',
  83. phoneNumber: '',
  84. qqNum: '',
  85. wxNum: '',
  86. degrEduc: '',
  87. degrEducId: '',
  88. houseType: '',
  89. houseTypeId:'',
  90. politOutlook: '',
  91. politOutlookId:'',
  92. veteHousehRegi: '',
  93. veteResiAddress: '',
  94. veteDateBirth:'',
  95. veteStatus: '1',
  96. veteAttribute: '',
  97. houseType: '',
  98. houseTypeId: '',
  99. veteDateBirth: '',
  100. files: []
  101. },
  102. // 表单验证
  103. rules: {
  104. veteName: [
  105. { required: true, message: '请输入姓名', trigger: [ 'change', 'blur' ]}
  106. ],
  107. veteIdCard: [
  108. {
  109. required: true,
  110. 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)$)/,
  111. // 正则检验前先将值转为字符串
  112. transform(value) {
  113. return String(value);
  114. },
  115. message: '请正确输入身份证号',
  116. trigger: ['change', 'blur']
  117. }
  118. ],
  119. vetePhone: [
  120. {
  121. pattern: /^(?:(?:\+|00)86)?1[3-9]\d{9}$/,
  122. message: '请正确输入手机号',
  123. required: true,
  124. trigger: ['change', 'blur'],
  125. }
  126. ],
  127. veteHousehRegi:[
  128. {
  129. required: true,
  130. message: '请选择户籍',
  131. }
  132. ],
  133. veteResiAddress:[
  134. {
  135. required: true,
  136. message: '请填写详细地址',
  137. }
  138. ],
  139. nation:[
  140. {
  141. required: true,
  142. message: '请填写民族',
  143. }
  144. ],
  145. degrEduc:[
  146. {
  147. required: true,
  148. message: '请选择文化程度',
  149. }
  150. ],
  151. politOutlook:[
  152. {
  153. required: true,
  154. message: '请选择政治面貌',
  155. }
  156. ],
  157. houseType:[
  158. {
  159. required: true,
  160. message: '请选择户籍类别',
  161. }
  162. ]
  163. },
  164. // 文化程度
  165. degrEducShow: false,
  166. degrEducList: [],
  167. // 政治面貌
  168. politOutlookShow: false,
  169. politOutlookList: [],
  170. // 户籍地
  171. regionShow: false,
  172. // 户籍类型
  173. houseTypeShow: false,
  174. houseTypeList: []
  175. }
  176. },
  177. onLoad() {
  178. this.getVeteEducData();
  179. this.getVeteDegrEduc();
  180. this.getVetePolitOutlook();
  181. this.getVeteHouseType();
  182. },
  183. onReady() {
  184. this.$refs.uForm.setRules(this.rules);
  185. this.form.vetePhone = this.vuex_user.mobile;
  186. },
  187. methods: {
  188. /**
  189. * 获取已经提交的数据
  190. */
  191. getVeteEducData(){
  192. this.$u.api.getVeteEducData().then(res => {
  193. if(res.code == 200){
  194. for(let key in res.data.veteEduc) {
  195. if(key !== 'files'){
  196. this.form[key] = res.data.veteEduc[key];
  197. }
  198. };
  199. this.form.files = res.data.files;
  200. }
  201. });
  202. },
  203. /**
  204. * 获取文化程度类别
  205. */
  206. getVeteDegrEduc(){
  207. this.$u.api.getDictdataUrl({key:'degr_educ'}).then(res=>{
  208. if(res.code == 200){
  209. this.degrEducList = res.data.map(item => {
  210. return {
  211. ...item,
  212. value: item.text
  213. }
  214. });
  215. }
  216. });
  217. },
  218. /**
  219. * 文化程度下拉变化
  220. */
  221. degrEducChange(item) {
  222. this.form.degrEduc = item[0].label
  223. this.form.degrEducId = item[0].value
  224. },
  225. /**
  226. * 获取政治面貌类别
  227. */
  228. getVetePolitOutlook(){
  229. this.$u.api.getDictdataUrl({ key: 'polit_outlook' }).then(res => {
  230. if(res.code == 200){
  231. this.politOutlookList = res.data;
  232. }
  233. });
  234. },
  235. /**
  236. * 政治面貌下拉改变
  237. */
  238. politOutlookChange(item) {
  239. this.form.politOutlook = item[0].label
  240. this.form.politOutlookId = item[0].value
  241. },
  242. /**
  243. * 户籍地
  244. */
  245. regionConfirm(e){
  246. this.form.veteHousehRegi = `${e.province.label}-${e.city.label}-${e.area.label}`
  247. },
  248. /**
  249. * 获取户籍类别
  250. */
  251. getVeteHouseType(){
  252. this.$u.api.getDictdataUrl({ key:'house_type' }).then(res => {
  253. if(res.code === 200){
  254. this.houseTypeList = res.data.map(item => {
  255. return {
  256. ...item,
  257. value: item.text
  258. }
  259. });
  260. }
  261. });
  262. },
  263. /**
  264. * 户籍类别下拉变化
  265. */
  266. houseTypeChange(e){
  267. this.form.houseType = e[0].label;
  268. this.form.houseTypeId = e[0].value;
  269. },
  270. /**
  271. * @param { String } val
  272. */
  273. idNumberChange(val) {
  274. const reg =
  275. /^\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]$/
  276. if (!reg.test(val)) {
  277. return
  278. }
  279. // 根据身份证得出性别
  280. this.form.veteSex = (parseInt(val.substr(16, 1)) % 2 === 1 ? '男' : '女');
  281. // 设置出生日期
  282. this.form.veteDateBirth = val.substring(6, 10) + "-" + val.substring(10, 12) + "-" + val.substring(12, 14) + ' 00:00:00';
  283. // 根据身份证号获取基本信息
  284. this.$u.api.getIdInfo({ id: this.form.veteIdCard }).then(res=>{
  285. if (res.code === 200) {
  286. if (res.data) {
  287. this.form.nation = res.data.nation;
  288. this.form.veteName = res.data.veteName;
  289. this.form.vetePhone = res.data.vetePhone;
  290. this.form.veteResiAddress = res.data.veteResiAddress;
  291. }
  292. } else{
  293. uni.showToast({
  294. icon: 'none',
  295. title: res.msg
  296. })
  297. }
  298. })
  299. },
  300. /**
  301. * 图片上传成功
  302. */
  303. uploadSuccess(e) {
  304. this.form.files = []
  305. this.form.files.push({ filesType: 6, filesUrl: e.data.url})
  306. },
  307. /**
  308. * 拍照
  309. */
  310. photograph() {
  311. uni.chooseImage({
  312. count: 1,
  313. sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图,默认二者都有
  314. sourceType: ['camera'], //从相册选择
  315. success: (res) => {
  316. console.log(res);
  317. }
  318. })
  319. },
  320. submit() {
  321. this.$refs.uForm.validate(valid => {
  322. if (valid) {
  323. if (this.form.files.length < 1){
  324. uni.showToast({
  325. title: '请上传所需图片',
  326. icon:'none',
  327. duration: 2000
  328. });
  329. } else {
  330. let params = {
  331. veteEduc: {}
  332. };
  333. params.files = this.form.files
  334. for(let key in this.form) {
  335. if (key !== 'files') {
  336. params.veteEduc[key] = this.form[key];
  337. }
  338. };
  339. params.veteEduc.veteSex = params.veteEduc.veteSex === '男' ? 1 : 0
  340. this.$u.api.veteEduc(params).then(res => {
  341. if (res.code === 200 ) {
  342. uni.showToast({
  343. title: '提交成功,等待审核!',
  344. duration: 2000,
  345. success: () => {
  346. this.$u.route('/pages/applyEducationCode/applyEducationSuccess')
  347. }
  348. });
  349. } else {
  350. uni.showToast({
  351. title: res.msg,
  352. icon:'none',
  353. duration: 2000
  354. });
  355. }
  356. })
  357. }
  358. }
  359. });
  360. }
  361. }
  362. }
  363. </script>
  364. <style lang="scss" scoped>
  365. @import './applyEducationCode.scss';
  366. </style>