authentication.vue 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420
  1. <template>
  2. <view>
  3. <u-form :model="form" ref="uForm" label-width="150">
  4. <u-form-item label="身份证号" prop="veteIdCard" :required="true" style="margin-bottom: 24rpx;">
  5. <u-input v-model="form.veteIdCard" @blur="getIdcardData" />
  6. </u-form-item>
  7. <u-form-item label="姓名" prop="veteName" :required="true">
  8. <u-input v-model="form.veteName" />
  9. </u-form-item>
  10. <u-form-item label="民族" prop="nation" :required="true" >
  11. <u-input v-model="form.nation" />
  12. </u-form-item>
  13. <u-form-item label="性别" >
  14. <u-input v-model="veteSex" placeholder="输入身份证自动获取" disabled />
  15. </u-form-item>
  16. <u-form-item label="联系电话" prop="vetePhone" :required="true">
  17. <u-input v-model="form.vetePhone" maxlength="11" />
  18. </u-form-item>
  19. <u-form-item label="文化程度" prop="degrEduc" :required="true" >
  20. <u-select v-model="degrEducShow" :list="degrEducList" :default-value="[3]" value-name="text" @confirm="degrEducConfirm"></u-select>
  21. <u-input v-model="form.degrEduc" placeholder="请选择" disabled="disabled" @click="degrEducShow = true" />
  22. </u-form-item>
  23. <u-form-item label="政治面貌" prop="politOutlook" :required="true" >
  24. <u-select v-model="politOutlookShow" :list="politOutlookList" value-name="text" @confirm="politOutlookConfirm"></u-select>
  25. <u-input v-model="form.politOutlook" placeholder="请选择" disabled="disabled" @click="politOutlookShow = true" />
  26. </u-form-item>
  27. <u-form-item label="户籍类别" prop="houseType" :required="true" >
  28. <u-select v-model="houseTypeShow" :list="houseTypeList" value-name="text" @confirm="houseTypeConfirm"></u-select>
  29. <u-input v-model="form.houseType" placeholder="请选择" disabled="disabled" @click="houseTypeShow = true" />
  30. </u-form-item>
  31. <!-- <u-form-item label="申请人" >
  32. <u-radio-group v-model="form.veteStatus" @change="veteStatusChange" >
  33. <u-radio shape="circle" name="1">本人申请</u-radio>
  34. <u-radio shape="circle" name="2">子女代申请</u-radio>
  35. </u-radio-group>
  36. </u-form-item> -->
  37. <!-- <u-form-item label="出生日期" @click="birthTime = true" >
  38. <u-input v-model="form.veteDateBirth" placeholder="输入身份证自动获取" disabled />
  39. </u-form-item> -->
  40. <!-- <u-form-item label="人员属性" prop="veteAttribute" :required="true">
  41. <u-checkbox-group @change="checkboxGroupChange" :wrap="false">
  42. <u-checkbox v-model="item.checked" v-for="(item, index) in checkboxList" :key="index" :name="item.label">{{ item.label }}</u-checkbox>
  43. </u-checkbox-group>
  44. </u-form-item> -->
  45. <!-- <u-form-item label="入伍时间" prop="veteInEnlist" :required="true">
  46. <u-input type="select"
  47. :select-open="veteInEnlistShow" v-model="form.veteInEnlist" placeholder="请选择入伍时间" @click="veteInEnlistShow = true"></u-input>
  48. </u-form-item>
  49. <u-form-item label="退伍时间" prop="veteOutEnlist" :required="true">
  50. <u-input type="select"
  51. :select-open="veteOutEnlistShow" v-model="form.veteOutEnlist" placeholder="请选择入伍时间" @click="veteOutEnlistShow = true"></u-input>
  52. </u-form-item> -->
  53. <u-form-item label="户籍地" prop="veteHousehRegi" :required="true">
  54. <u-input type="select"
  55. :select-open="regiShow" v-model="form.veteHousehRegi" disabled="disabled" placeholder="请正确选择,否则可能影响使用" @click="regiShow = true"></u-input>
  56. </u-form-item>
  57. <u-form-item label="居住地址" prop="veteResiAddress" :required="true">
  58. <u-input v-model="form.veteResiAddress" placeholder="省市区街道/门牌号" />
  59. </u-form-item>
  60. <u-form-item label="qq" >
  61. <u-input v-model="form.qqNum" />
  62. </u-form-item>
  63. <u-form-item label="微信" >
  64. <u-input v-model="form.wxNum" />
  65. </u-form-item>
  66. <view class="upload-wrap u-flex u-flex-wrap u-row-left">
  67. <view class="upload-wrap-title">近期一寸免冠照(必选):</view>
  68. <!-- <u-upload :action="action" prop="files1" :show-progress="false" upload-text="身份证人像面" max-count="1" @on-success="files1Success"></u-upload>
  69. <u-upload :action="action" :show-progress="false" upload-text="身份证国徽面" max-count="1" @on-success="files2Success"></u-upload>
  70. <u-upload :action="action" :show-progress="false" upload-text="手持身份证" max-count="1" @on-success="files3Success"></u-upload>
  71. <u-upload :action="action" :show-progress="false" upload-text="户口本" max-count="1" @on-success="files4Success"></u-upload>
  72. <u-upload :action="action" :show-progress="false" upload-text="退役证" max-count="1" @on-success="files5Success"></u-upload> -->
  73. <u-upload :action="action" :show-progress="true" upload-text="上传图片" max-count="1" @on-success="files6Success"></u-upload>
  74. </view>
  75. <!-- <u-form-item label="身份证人像面" prop="pic" label-width="200" :required="true">
  76. </u-form-item>
  77. <u-form-item label="身份证国徽面" prop="pic" label-width="200" :required="true">
  78. </u-form-item> -->
  79. </u-form>
  80. <u-button class="submit-btn" @click="submit">提交</u-button>
  81. <u-picker mode="region" v-model="regiShow" :default-region='["贵州省", "贵阳市", "南明区"]' @confirm="regionConfirm"></u-picker>
  82. <u-picker mode="time" v-model="veteInEnlistShow" @confirm="veteInEnlistConfirm"></u-picker>
  83. <u-picker mode="time" v-model="veteOutEnlistShow" @confirm="veteOutEnlistConfirm"></u-picker>
  84. </view>
  85. </template>
  86. <script>
  87. export default {
  88. data() {
  89. let that = this;
  90. return {
  91. action:this.config.uploadUrl,
  92. birthTime:false,
  93. regiShow:false,
  94. veteInEnlistShow:false,
  95. veteOutEnlistShow:false,
  96. politOutlookShow:false,
  97. houseTypeShow:false,
  98. degrEducShow:false,
  99. veteSex:'',
  100. checkboxList:[],
  101. politOutlookList:[],
  102. houseTypeList:[],
  103. degrEducList:[],
  104. form: {
  105. veteName: '',
  106. veteIdCard: '',
  107. veteDateBirth:'',
  108. veteSex:'',
  109. veteStatus:'1',
  110. veteAttribute:'',
  111. veteInEnlist:'',
  112. veteOutEnlist:'',
  113. vetePhone:'',
  114. veteHousehRegi:'',
  115. veteResiAddress:'',
  116. nation:'',
  117. qqNum:'',
  118. wxNum:'',
  119. degrEduc:'',
  120. degrEducId:'',
  121. houseType:'',
  122. houseTypeId:'',
  123. politOutlook:'',
  124. politOutlookId:'',
  125. files:[]
  126. },
  127. rules: {
  128. veteName: [{
  129. required: true,
  130. message: '请输入姓名',
  131. // 可以单个或者同时写两个触发验证方式
  132. trigger: ['change', 'blur'],
  133. }],
  134. veteIdCard: [{
  135. required: true,
  136. 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)$)/,
  137. // 正则检验前先将值转为字符串
  138. transform(value) {
  139. return String(value);
  140. },
  141. message: '请正确输入身份证号',
  142. trigger: ['change', 'blur'],
  143. }],
  144. veteAttribute:[{
  145. required: true,
  146. message: '请输入人员属性',
  147. }],
  148. veteInEnlist:[{
  149. required: true,
  150. message: '请选择入伍时间',
  151. }],
  152. veteOutEnlist:[{
  153. required: true,
  154. message: '请选择退伍时间',
  155. }],
  156. vetePhone:[{
  157. pattern: /^(?:(?:\+|00)86)?1[3-9]\d{9}$/,
  158. message: '请正确输入手机号',
  159. required: true,
  160. trigger: ['change', 'blur'],
  161. }],
  162. veteHousehRegi:[{
  163. required: true,
  164. message: '请选择户籍',
  165. }],
  166. veteResiAddress:[{
  167. required: true,
  168. message: '请填写详细地址',
  169. }],
  170. nation:[{
  171. required: true,
  172. message: '请填写民族',
  173. }],
  174. degrEduc:[{
  175. required: true,
  176. message: '请选择文化程度',
  177. }],
  178. politOutlook:[{
  179. required: true,
  180. message: '请选择政治面貌',
  181. }],
  182. houseType:[{
  183. required: true,
  184. message: '请选择户籍类别',
  185. }]
  186. }
  187. }
  188. },
  189. onLoad() {
  190. this.getVeteAttribute();
  191. this.getVeteDegrEduc();
  192. this.getVetePolitOutlook();
  193. this.getVeteHouseType();
  194. },
  195. onReady() {
  196. this.$refs.uForm.setRules(this.rules);
  197. this.form.vetePhone = this.vuex_user.mobile;
  198. },
  199. onShow() {
  200. // 获取已经提交的数据
  201. // this.getVeteEducData();
  202. },
  203. methods: {
  204. // 获取已经提交的数据
  205. getVeteEducData(){
  206. this.$u.api.getVeteEducData().then(res=>{
  207. console.log('getVeteEducData',res);
  208. if(res.code == 200){
  209. for(let key in res.data.veteEduc) {
  210. if(key!='files'){
  211. this.form[key] = res.data.veteEduc[key];
  212. }
  213. };
  214. this.form.files = res.data.files;
  215. }
  216. console.log('this.form',this.form);
  217. });
  218. },
  219. // 获取人员属性
  220. getVeteAttribute(){
  221. this.$u.api.getDictdataUrl({key:'vete_attribute'}).then(res=>{
  222. console.log('getVeteAttribute',res);
  223. if(res.code == 200){
  224. this.checkboxList = res.data;
  225. }
  226. });
  227. },
  228. // 获取文化程度类别
  229. getVeteDegrEduc(){
  230. this.$u.api.getDictdataUrl({key:'degr_educ'}).then(res=>{
  231. if(res.code == 200){
  232. this.degrEducList = res.data;
  233. }
  234. });
  235. },
  236. degrEducConfirm(e){
  237. console.log('degrEducConfirm',e);
  238. this.form.degrEduc = e[0].label;
  239. this.form.degrEducId = e[0].value;
  240. },
  241. // 获取政治面貌类别
  242. getVetePolitOutlook(){
  243. this.$u.api.getDictdataUrl({key:'polit_outlook'}).then(res=>{
  244. if(res.code == 200){
  245. this.politOutlookList = res.data;
  246. }
  247. });
  248. },
  249. politOutlookConfirm(e){
  250. console.log('politOutlookConfirm',e);
  251. this.form.politOutlook = e[0].label;
  252. this.form.politOutlookId = e[0].value;
  253. },
  254. // 获取户籍类别
  255. getVeteHouseType(){
  256. this.$u.api.getDictdataUrl({key:'house_type'}).then(res=>{
  257. if(res.code == 200){
  258. this.houseTypeList = res.data;
  259. }
  260. });
  261. },
  262. houseTypeConfirm(e){
  263. console.log('houseTypeConfirm',e);
  264. this.form.houseType = e[0].label;
  265. this.form.houseTypeId = e[0].value;
  266. },
  267. // 户籍地区回调
  268. regionConfirm(e) {
  269. // console.log('户籍地区回调',e)
  270. this.form.veteHousehRegi = e.province.label + '-' + e.city.label + '-' + e.area.label;
  271. },
  272. files1Success(e){
  273. this.form.files.push({filesType:1,filesUrl:e.data.url})
  274. },
  275. files2Success(e){
  276. this.form.files.push({filesType:2,filesUrl:e.data.url})
  277. },
  278. files3Success(e){
  279. this.form.files.push({filesType:3,filesUrl:e.data.url})
  280. },
  281. files4Success(e){
  282. this.form.files.push({filesType:4,filesUrl:e.data.url})
  283. },
  284. files5Success(e){
  285. this.form.files.push({filesType:5,filesUrl:e.data.url})
  286. },
  287. files6Success(e){
  288. this.form.files.push({filesType:6,filesUrl:e.data.url})
  289. },
  290. //入伍时间
  291. veteInEnlistConfirm(e){
  292. console.log('入伍时间',e)
  293. this.form.veteInEnlist = `${e.year}-${e.month}-${e.day} 00:00:00`
  294. },
  295. //退伍时间
  296. veteOutEnlistConfirm(e){
  297. console.log('退伍时间',e)
  298. this.form.veteOutEnlist = `${e.year}-${e.month}-${e.day} 00:00:00`
  299. },
  300. getIdcardData(){
  301. if(!/^\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]$/.test(this.form.veteIdCard)){
  302. // alert('身份证号非法.');
  303. return;
  304. }
  305. this.form.veteDateBirth=(RegExp.$1).substr(0,4)+'-'+(RegExp.$1).substr(4,2)+'-'+(RegExp.$1).substr(6,2)+' 00:00:00';//设置出生日期
  306. this.form.veteSex=(parseInt(this.form.veteIdCard.charAt(this.form.veteIdCard.length-2))%2==0?'1':'0');//设置性别 0 男 1 女
  307. this.veteSex=(parseInt(this.form.veteIdCard.charAt(this.form.veteIdCard.length-2))%2==0?'女':'男');//设置性别 0 男 1 女
  308. uni.showLoading({
  309. title:'数据查询中'
  310. });
  311. this.$u.api.getIdInfo({id:this.form.veteIdCard}).then(res=>{
  312. uni.hideLoading();
  313. if(res.code === 200){
  314. if (res.data) {
  315. this.form.nation = res.data.nation;
  316. this.form.veteName = res.data.veteName;
  317. this.form.vetePhone = res.data.vetePhone;
  318. this.form.veteResiAddress = res.data.veteResiAddress;
  319. }
  320. }else{
  321. uni.showToast({
  322. icon:'none',
  323. title:res.msg
  324. })
  325. }
  326. console.log('getIdInfo',res)
  327. }).catch(err=>{
  328. uni.hideLoading();
  329. // uni.showToast({
  330. // icon:'none',
  331. // title:'网络出错'
  332. // })
  333. })
  334. },
  335. veteStatusChange(e){
  336. console.log('veteStatusChange',e)
  337. this.form.veteStatus = e;
  338. },
  339. // checkbox选择发生变化
  340. checkboxGroupChange(e) {
  341. // console.log('checkboxGroupChange',e)
  342. this.form.veteAttribute = e.toString();
  343. // console.log('this.form',this.form)
  344. },
  345. submit() {
  346. this.$refs.uForm.validate(valid => {
  347. console.log('this.form',this.form);
  348. if (valid) {
  349. console.log('验证通过');
  350. if(this.form.files.length<1){
  351. uni.showToast({
  352. title: '请上传所需图片',
  353. icon:'none',
  354. duration: 2000
  355. });
  356. return;
  357. }else{
  358. console.log('this.form',this.form);
  359. let params = {veteEduc:{}};
  360. params.files = this.form.files
  361. for(let key in this.form) {
  362. if(key!='files'){
  363. params.veteEduc[key] = this.form[key];
  364. }
  365. };
  366. console.log('params',params);
  367. this.$u.api.veteEduc(params)
  368. .then(res=>{
  369. if(res.code == 200 ){
  370. uni.showToast({
  371. title: '提交成功,等待审核!',
  372. duration: 2000,
  373. success:function(){
  374. uni.switchTab({
  375. url: '../index/index'
  376. })
  377. }
  378. });
  379. }else{
  380. uni.showToast({
  381. title: res.msg,
  382. icon:'none',
  383. duration: 2000
  384. });
  385. }
  386. console.log('认证',JSON.parse(JSON.stringify(res)));
  387. }).catch(err=>{
  388. uni.showToast({
  389. title: '请重试!',
  390. icon:'none',
  391. duration: 2000
  392. });
  393. });
  394. }
  395. } else {
  396. console.log('验证失败');
  397. return;
  398. }
  399. });
  400. }
  401. }
  402. }
  403. </script>
  404. <style lang="scss" scoped>
  405. page{background-color: #e5e6e6;padding-top: 24rpx;padding-bottom: 58rpx;}
  406. .u-form-item{background-color: #fff;margin: 0 24rpx;padding-left: 24rpx;padding-right: 24rpx;}
  407. .upload-wrap{background-color: #fff;margin: 0 24rpx 24rpx;padding-bottom: 24rpx;}
  408. .upload-wrap-title{width: 100%;margin: 24rpx;}
  409. .submit-btn{margin: 24rpx;border: 0;background-color: #2b82e4;box-shadow: none;color: #fff;}
  410. // @import './authentication.scss'
  411. </style>