您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

userInfoUploading.vue 14KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528
  1. <template>
  2. <div>
  3. <custom-header title="用户信息" :back="config.hasReturn === 'true'"></custom-header>
  4. <div style="padding-top: 20rpx">
  5. <form-builder-vue :formData="formData" :config="config" @radioChange="radioChange" @submit="submit"
  6. @uploadImgOcr='uploadImg'>
  7. </form-builder-vue>
  8. </div>
  9. <!-- <agreement v-if="false" :start="start" @disagree="disagree" @consent="consent">
  10. <view class="text">为了更好的向您提供服务,我们需要收集您的用户、车辆等信息用于ETC发行、售后。请您务必审慎阅读、充分理解<a
  11. href="https://cli.im/url">《用户协议》</a>和<a>《隐私政策》</a>各条款。如果您同意,请点击下面按钮开始接受我们的服务,如果不同意将会限制您使用部分功能。
  12. </view>
  13. </agreement> -->
  14. </div>
  15. <!-- -->
  16. </template>
  17. <script setup lang='ts'>
  18. import CustomHeader from '@/components/CustomHeader.vue';
  19. import formBuilderVue from '@/components/form-builder/form-builder-vue3'
  20. // import Agreement from '@/components/Agreement.vue';
  21. import {
  22. TypeData,
  23. Index
  24. } from '@/components/form-builder/tools'
  25. // import {
  26. // IdCard
  27. // } from '../../static/data/testData.js'
  28. import {
  29. reactive,
  30. ref,
  31. nextTick
  32. } from 'vue'
  33. import {
  34. onLoad
  35. } from '@dcloudio/uni-app';
  36. import {
  37. request
  38. } from '@/utils/network/request'
  39. import {
  40. useQdOrderStore
  41. } from '@/stores/qdOrder.js'
  42. import {
  43. etcOcrCard,
  44. ocrAllQuery,
  45. fileUpload,
  46. fileURL
  47. } from "@/utils/network/api.js";
  48. const qdOrderStore = useQdOrderStore()
  49. //获取页面配置
  50. onLoad((opin) => {
  51. console.log(opin)
  52. let qdOrderNo: any
  53. if (opin && opin.qdOrderNo) {
  54. qdOrderNo = qdOrderNo = opin.qdOrderNo
  55. } else {
  56. qdOrderNo = uni.getStorageSync('qdOrderNo')
  57. }
  58. request('ac8756cc31eb4816b8eaeb71907ff9c1', {
  59. data: {
  60. qdOrderNo,
  61. pageStep: 1
  62. }
  63. }).then((res) => {
  64. let data = JSON.parse(res.bizContent)
  65. formData.value = JSON.parse(data.config.tableConfig)
  66. qdOrderStore.setQdOrder(data.qdOrder)
  67. nextTick(() => {
  68. if (data.qdOrder.userType == 1) {
  69. // 个人办理
  70. danChange(false)
  71. } else {
  72. // 单位办理
  73. danChange(true)
  74. }
  75. })
  76. delete data.config.tableConfig
  77. config.value = Object.assign(data.config, config.value)
  78. })
  79. })
  80. // const start = ref(true)
  81. let config = ref < any > ({
  82. hasReturn: 'true',
  83. submitName: '下一步',
  84. titleWidth: 160,
  85. isHeader: true,
  86. })
  87. let formData = ref < any > ([{
  88. 'title': '营业执照',
  89. 'type': 14,
  90. 'vertical': 2,
  91. 'underline': false,
  92. 'required': false,
  93. 'placeholderImg': fileURL + 'image/applyCard/zhizhao.png',
  94. 'inputType': 1,
  95. 'value': 'userName',
  96. 'hint': '上传企业的营业执照',
  97. 'show': true,
  98. }, {
  99. 'title': '人像面',
  100. 'type': 14,
  101. 'vertical': 2,
  102. 'underline': false,
  103. 'required': false,
  104. 'placeholderImg': fileURL + '/image/applyCard/renxiang.png',
  105. 'inputType': 1,
  106. 'value': 'userIdPoImageUrl',
  107. 'hint': '上传身份证的人像面',
  108. 'show': false,
  109. },
  110. {
  111. 'title': '国徽面',
  112. 'type': 14,
  113. 'vertical': 2,
  114. 'underline': false,
  115. 'required': false,
  116. 'placeholderImg': fileURL + 'image/applyCard/guohui.png',
  117. 'inputType': 1,
  118. 'value': 'userIdNeImageUrl',
  119. 'hint': '上传身份证的国徽面',
  120. 'show': false,
  121. },
  122. {
  123. 'title': '委托书',
  124. 'type': 14,
  125. 'vertical': 2,
  126. 'underline': false,
  127. 'required': false,
  128. 'placeholderImg': fileURL + 'image/applyCard/weituoshu.png',
  129. 'inputType': 1,
  130. 'value': 'userIdPoImageUrl',
  131. 'hint': '上传文字清晰的委托书',
  132. 'show': true,
  133. },
  134. {
  135. 'title': '识别信息如下',
  136. 'type': 100,
  137. 'show': false,
  138. },
  139. {
  140. 'title': '公司名称',
  141. 'type': 2,
  142. 'inputType': 'number',
  143. 'vertical': 1,
  144. 'userName': '',
  145. 'value': 'userName',
  146. 'required': false,
  147. 'hint': '请输入公司名称',
  148. 'underline': true,
  149. 'maxlength': 3,
  150. 'show': true,
  151. }, {
  152. 'title': '部门名称',
  153. 'type': 2,
  154. 'inputType': 'number',
  155. 'vertical': 1,
  156. 'userName': '',
  157. 'value': 'department',
  158. 'required': false,
  159. 'hint': '请输入部门名称',
  160. 'underline': true,
  161. 'maxlength': 3,
  162. 'show': true,
  163. },
  164. {
  165. 'title': '社会信用代码',
  166. 'type': 2,
  167. 'inputType': 'number',
  168. 'vertical': 1,
  169. 'userName': '',
  170. 'value': 'userIdNum',
  171. 'required': false,
  172. 'hint': '请输入社会信用代码',
  173. 'underline': true,
  174. 'maxlength': 3,
  175. 'show': true,
  176. },
  177. {
  178. 'uploadCarBottom': true,
  179. 'title': '姓名',
  180. 'type': 2,
  181. 'inputType': 'number',
  182. 'vertical': 1,
  183. 'userName': '',
  184. 'value': 'userName',
  185. 'required': false,
  186. 'hint': '请输入姓名',
  187. 'underline': true,
  188. 'maxlength': 3,
  189. 'show': false,
  190. }, {
  191. 'title': '联系方式',
  192. 'type': 2,
  193. 'inputType': 'number',
  194. 'vertical': 1,
  195. 'userName': '',
  196. 'value': 'tel',
  197. 'required': false,
  198. 'hint': '请输入联系方式',
  199. 'underline': true,
  200. 'maxlength': 11,
  201. 'show': false,
  202. }, {
  203. 'title': '证件号码',
  204. 'type': 2,
  205. 'value': 'userIdNum',
  206. 'required': false,
  207. 'underline': true,
  208. 'hint': '请输入证件号码',
  209. 'show': false,
  210. }, {
  211. 'title': '住址',
  212. 'type': 2,
  213. 'value': 'address',
  214. 'required': false,
  215. 'underline': true,
  216. 'hint': '请输入住址',
  217. 'show': false,
  218. }, {
  219. 'title': '本人办理',
  220. 'type': 7,
  221. 'underline': true,
  222. 'value': 'isSelf',
  223. 'itemData': [{
  224. 'checked': true, //默认选中
  225. 'value': '1',
  226. 'name': '是'
  227. }, {
  228. 'checked': false,
  229. 'value': '2',
  230. 'name': '否'
  231. }],
  232. }, {
  233. 'title': '经办人证件人像面',
  234. 'type': 14,
  235. 'vertical': 2,
  236. 'underline': false,
  237. 'required': false,
  238. 'placeholderImg': fileURL + '/image/applyCard/renxiang.png',
  239. 'inputType': 1,
  240. 'value': 'agentPosImgUrl',
  241. 'hint': '上传身份证的人像面',
  242. 'show': true
  243. },
  244. {
  245. 'title': '经办人证件国徽面',
  246. 'type': 14,
  247. 'vertical': 2,
  248. 'underline': false,
  249. 'required': false,
  250. 'placeholderImg': fileURL + 'image/applyCard/guohui.png',
  251. 'inputType': 1,
  252. 'value': 'agentNegImgUrl',
  253. 'hint': '上传身份证的国徽面',
  254. 'show': true
  255. }, {
  256. 'title': '经办人姓名',
  257. 'type': 2,
  258. 'underline': true,
  259. 'value': 'agentName',
  260. 'hint': '请输入经办人姓名',
  261. 'show': true
  262. }, {
  263. 'title': '经办人电话',
  264. 'type': 2,
  265. 'underline': true,
  266. 'value': 'agentTel',
  267. 'hint': '请输入经办人电话',
  268. 'titleShow': true,
  269. 'inputType': 'tel',
  270. 'show': true
  271. }, {
  272. 'title': '经办人证件号码',
  273. 'type': 2,
  274. 'underline': true,
  275. 'value': 'agentIdNum',
  276. 'hint': '请输入证件号码',
  277. 'show': true
  278. },
  279. ])
  280. function businesses(key) {
  281. if (key) {
  282. formData.value[Index('经办人姓名', formData.value)].show = true
  283. formData.value[Index('经办人姓名', formData.value)].show = true
  284. formData.value[Index('经办人证件号码', formData.value)].show = true
  285. formData.value[Index('经办人电话', formData.value)].show = true
  286. formData.value[Index('经办人证件识别信息如下', formData.value)].show = true
  287. formData.value[Index('经办人证件人像面', formData.value)].show = true
  288. formData.value[Index('经办人证件国徽面', formData.value)].show = true
  289. } else {
  290. formData.value[Index('经办人姓名', formData.value)].show = false
  291. formData.value[Index('经办人证件号码', formData.value)].show = false
  292. formData.value[Index('经办人电话', formData.value)].show = false
  293. formData.value[Index('经办人证件识别信息如下', formData.value)].show = false
  294. formData.value[Index('经办人证件人像面', formData.value)].show = false
  295. formData.value[Index('经办人证件国徽面', formData.value)].show = false
  296. }
  297. }
  298. //单项选择器
  299. function radioChange(e: any, item: TypeData) {
  300. if (item.title === '本人办理') {
  301. if (e.detail.value === '1') {
  302. businesses(true)
  303. } else {
  304. businesses(false)
  305. }
  306. }
  307. }
  308. function handleDan(key) {
  309. formData.value[Index('营业执照', formData.value)].show = key
  310. formData.value[Index('委托书', formData.value)].show = key
  311. formData.value[Index('公司名称', formData.value)].show = key
  312. formData.value[Index('部门名称', formData.value)].show = key
  313. formData.value[Index('社会信用代码', formData.value)].show = key
  314. formData.value[Index('本人办理', formData.value)].show = !key
  315. formData.value[Index('人像面', formData.value)].show = !key
  316. formData.value[Index('国徽面', formData.value)].show = !key
  317. formData.value[Index('证件号码', formData.value)].show = !key
  318. formData.value[Index('住址', formData.value)].show = !key
  319. formData.value[Index('姓名', formData.value)].show = !key
  320. formData.value[Index('联系方式', formData.value)].show = !key
  321. }
  322. // setTimeout(() => {
  323. // danChange(true)
  324. // }, 600)
  325. // 提交个人信息接口
  326. let submitCode = '22'
  327. //判断单位办理还是个人办理
  328. function danChange(key) {
  329. if (key) {
  330. // 单位办理
  331. businesses(false)
  332. handleDan(false)
  333. formData.value[Index('部门名称', formData.value)].department = '本部'
  334. submitCode = '20'
  335. } else {
  336. // 个人办理
  337. businesses(true)
  338. handleDan(true)
  339. submitCode = '22'
  340. }
  341. }
  342. // 社会信用代码
  343. function cardImageOcrYY(fileList, item) {
  344. const data = {
  345. type: 'business_license',
  346. base64: fileList.path,
  347. };
  348. request(ocrAllQuery, {
  349. data: data,
  350. }).then((res) => {
  351. let data: any = JSON.parse(res.bizContent)
  352. if (data.result) {
  353. submitQuery.address = '初始'
  354. submitQuery.userIdType = '203'
  355. formData.value[Index('公司名称', formData.value)].userName = JSON.parse(data.result
  356. .businessLicense)[
  357. '名称'];
  358. formData.value[Index('社会信用代码', formData.value)].userIdNum = JSON.parse(data.result.businessLicense)[
  359. '统一社会信用代码'];
  360. cardFileImageUpdate(fileList, item)
  361. }
  362. });
  363. }
  364. // 委托书
  365. function cardFileImageUpdate(fileList, item) {
  366. var data = {
  367. fileBase64: fileList.path,
  368. };
  369. request(fileUpload, {
  370. showLoading: true,
  371. data: data,
  372. }).then((res) => {
  373. let data: any = JSON.parse(res.bizContent)
  374. if (item.title == '委托书') {
  375. formData.value[Index('委托书', formData.value)].proxyUrl = data.data.url;
  376. } else {
  377. formData.value[Index('营业执照', formData.value)].posImgUrl = data.data.url;
  378. }
  379. });
  380. }
  381. let submitQuery = reactive < any > ({})
  382. // 身份证类别识别
  383. function idCardOcr(fileList, item) {
  384. let imageType;
  385. if (item.title == '人像面' || item.title == '经办人证件人像面') {
  386. imageType = '1'
  387. } else if (item.title == '国徽面' || item.title == '经办人证件国徽面') {
  388. imageType = '2'
  389. }
  390. const data = {
  391. source: "1",
  392. agencyId: "52010106004",
  393. imageType: imageType,
  394. fileName: fileList.fileName,
  395. imageBase64: fileList.path,
  396. };
  397. request(etcOcrCard, {
  398. data: data,
  399. }).then((res) => {
  400. let data: any = JSON.parse(res.bizContent)
  401. if (imageType == '1') {
  402. // 人像面
  403. if (!data.name || !data.idno) {
  404. uni.showModal({
  405. title: '提示',
  406. content: '识别错误,请上传正确的图片',
  407. success: function(res) {
  408. // if (res.confirm) {
  409. // console.log('用户点击确定');
  410. // } else if (res.cancel) {
  411. // console.log('用户点击取消');
  412. // }
  413. }
  414. });
  415. return
  416. }
  417. if (item.title == '经办人证件人像面') {
  418. formData.value[Index('经办人证件人像面', formData.value)].agentPosImgUrl = data.imageUrl
  419. formData.value[Index('经办人姓名', formData.value)].agentName = data.name
  420. formData.value[Index('经办人证件号码', formData.value)].agentIdNum = data.idno
  421. submitQuery.agentIdType = '101' //身份证
  422. submitQuery.agentAddress = data.address //经办人住址
  423. // submitQuery.agentGender = data.gender == '男' ? 'MAN' : 'WOMAN' //经办人性别
  424. } else {
  425. formData.value[Index('人像面', formData.value)].userPosImgUrl = data.imageUrl
  426. formData.value[Index('姓名', formData.value)].userName = data.name
  427. formData.value[Index('证件号码', formData.value)].userIdNum = data.idno
  428. formData.value[Index('住址', formData.value)].address = data.address
  429. submitQuery.userIdType = '101' //身份证
  430. // submitQuery.customerGender = data.gender == '男' ? 'MAN' : 'WOMAN' //用户性别
  431. }
  432. } else {
  433. if (!data.enddate) {
  434. uni.showModal({
  435. title: '提示',
  436. content: '识别错误,请上传正确的图片',
  437. success: function(res) {
  438. // if (res.confirm) {
  439. // console.log('用户点击确定');
  440. // } else if (res.cancel) {
  441. // console.log('用户点击取消');
  442. // }
  443. }
  444. });
  445. return
  446. }
  447. formData.value[Index(item.title, formData.value)].userPosImgUrl = data.imageUrl
  448. if (item.title == '经办人证件国徽面') {
  449. formData.value[Index('经办人证件国徽面', formData.value)].agentNegImgUrl = data.imageUrl
  450. submitQuery.agentIdVld = data.enddate //经办人证件有效期
  451. } else {
  452. formData.value[Index('国徽面', formData.value)].userNegImgUrl = data.imageUrl
  453. submitQuery.customerIdVld = data.enddate //证件有效期
  454. }
  455. }
  456. // console.log('成功',data);
  457. // if (val === "1") {
  458. // state.form.userName = data.name;
  459. // state.form.gender = data.gender;
  460. // state.form.userIdNum = data.idno;/
  461. // state.form.userPosImgUrl = data.imageUrl;
  462. // state.form.address = data.address;
  463. // } else {
  464. // state.form.customerIdVld = data.enddate;
  465. // state.form.userNegImgUrl = data.imageUrl;
  466. // }
  467. });
  468. }
  469. //图像文件上传
  470. function uploadImg(fileList, item) {
  471. if (['人像面', '国徽面', '经办人证件人像面', '经办人证件国徽面'].includes(item.title)) {
  472. idCardOcr(fileList, item)
  473. } else if (item.title == '营业执照') {
  474. cardImageOcrYY(fileList, item)
  475. } else {
  476. cardFileImageUpdate(fileList, item)
  477. }
  478. }
  479. function submit(item: any) {
  480. let data = {
  481. ...submitQuery,
  482. orderId: qdOrderStore.orderInfo.value.orderId
  483. }
  484. for (const key in item) {
  485. if (item[key]) {
  486. data[key] = item[key]
  487. }
  488. }
  489. let {
  490. commitInterface,
  491. jumpPage
  492. } = config.value
  493. request(submitCode, {
  494. data,
  495. }).then((res) => {
  496. if (res.statusCode === 0) {
  497. // qdOrderStore.orderInfo.value.orderId = JSON.parse(res.bizContent).orderId
  498. uni.navigateTo({
  499. url: '/' + jumpPage,
  500. animationType: 'pop-in',
  501. animationDuration: 500
  502. })
  503. }
  504. })
  505. // });
  506. }
  507. </script>
  508. <style lang='scss' scoped>
  509. </style>