Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.

ocrHandle.ts 5.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. import { reactive, ref } from "vue";
  2. import { request, requestNew } from "@/utils/network/request";
  3. import { Index, handleDataList } from "@/components/form-builder/tools";
  4. import { etcOcrCard, ocrAllQuery, fileUpload } from "@/utils/network/api.js";
  5. import { useQdOrderStore } from "@/stores/qdOrder.js";
  6. // 配合formBuilderVue3模板使用
  7. export default function () {
  8. let submitQuery = ref<any>({});
  9. let registerQuery = reactive<any>({});
  10. const qdOrderStore = useQdOrderStore();
  11. // 社会信用代码ocr识别
  12. function cardImageOcrYY(fileList, item, formData) {
  13. const params = {
  14. type: "business_license",
  15. url: fileList.url,
  16. };
  17. submitQuery.value.userIdType = "203"; //203 公司信用代码
  18. // 将图片上传
  19. cardFileImageUpdate(fileList, item, formData);
  20. //暂不识别营业执照
  21. return
  22. // request(ocrAllQuery, {
  23. // data: params
  24. // }).then(res => {
  25. // let data : any = JSON.parse(res.bizContent);
  26. // console.log(data, '公司ocr', '请求参数', params)
  27. // if (data.result) {
  28. // submitQuery.value.userIdType = "203"; //203 公司信用代码
  29. // const corporateName = formData.value[Index("公司名称", formData.value)];
  30. // const businessLicense = JSON.parse(data.result.businessLicense)
  31. // corporateName[corporateName.value] = businessLicense["名称"] || '';
  32. // submitQuery.value.address = businessLicense[
  33. // "住所"
  34. // ] || ''; //公司地址ocr获取不到,手动填写
  35. // const creditNum = formData.value[Index("社会信用代码", formData.value)];
  36. // creditNum[creditNum.value] = businessLicense[
  37. // "统一社会信用代码"
  38. // ];
  39. // // 将图片上传
  40. // cardFileImageUpdate(fileList, item, formData);
  41. // }
  42. // });
  43. }
  44. // 委托书
  45. function cardFileImageUpdate(fileList, item, formData) {
  46. const dataItem = formData.value[Index(item.title, formData.value)];
  47. dataItem[dataItem.value] = fileList.pathDomain;
  48. }
  49. // 身份证类别识别
  50. function idCardOcr(fileList, item, formData) {
  51. let imageType;
  52. if (item.title == "人像面" || item.title == "经办人证件人像面") {
  53. imageType = "1";
  54. } else if (item.title == "国徽面" || item.title == "经办人证件国徽面") {
  55. imageType = "2";
  56. }
  57. const data = {
  58. source: "1",
  59. agencyId: qdOrderStore.qdOrderVal.agencyId,
  60. imageType: imageType,
  61. fileName: fileList.fileName,
  62. // imageBase64: fileList.path,
  63. url: fileList.url,
  64. };
  65. uni.showLoading({
  66. title: '正在识别图片...',
  67. mask: true
  68. });
  69. requestNew('/iaw/ocr/idCardOcr', {
  70. data: data
  71. }).then(res => {
  72. if (res.code !== 0) return
  73. let data : any = res.data;
  74. let ocrData = [
  75. ];
  76. const itemData = formData.value[Index(item.title, formData.value)]
  77. itemData[itemData.value] = fileList.pathDomain
  78. console.log(data, 'dataocr');
  79. if (imageType == "1") {
  80. // 人像面
  81. if (!data.name || !data.idno) {
  82. uni.showModal({
  83. title: "提示",
  84. content: "很抱歉,我们无法识别您的证件,请按规范上传正反面,确保图片清晰、背景简洁(如白墙或桌面),减少证件反光和阴影",
  85. success: function (res) { }
  86. });
  87. return;
  88. }
  89. if (item.title == "经办人证件人像面") {
  90. ocrData = ocrData.concat([
  91. {
  92. title: "经办人姓名",
  93. key: "name"
  94. },
  95. {
  96. title: "经办人证件号码",
  97. key: "idno"
  98. }
  99. ]);
  100. submitQuery.value.agentIdType = 101; //身份证类型
  101. submitQuery.value.agentAddress = data.address; //经办人住址
  102. // registerQuery.agentGender = data.gender == '男' ? 'MALE' : 'FEMALE' //经办人性别
  103. } else {
  104. ocrData = ocrData.concat([
  105. {
  106. title: "姓名",
  107. key: "name"
  108. },
  109. {
  110. title: "证件号码",
  111. key: "idno"
  112. },
  113. {
  114. title: "住址",
  115. key: "address"
  116. }
  117. ]);
  118. submitQuery.value.userIdType = 101; //身份证
  119. registerQuery.gender = data.gender == '男' ? 'MALE' : 'FEMALE' //用户性别
  120. }
  121. } else {
  122. if (!data.enddate) {
  123. uni.showModal({
  124. title: "提示",
  125. content: "很抱歉,我们无法识别您的证件,请按规范上传正反面,确保图片清晰、背景简洁(如白墙或桌面),减少证件反光和阴影",
  126. success: function (res) { }
  127. });
  128. return;
  129. }
  130. if (item.title == "经办人证件国徽面") {
  131. submitQuery.value.agentIdVld = data.enddate; //经办人证件有效期
  132. } else {
  133. submitQuery.value.customerIdVld = data.enddate; //证件有效期
  134. }
  135. }
  136. // 处理数据展示
  137. handleDataList(ocrData, data, formData);
  138. console.log(formData, 'formData');
  139. }).finally(()=>{
  140. uni.hideLoading();
  141. });
  142. }
  143. //图像文件上传
  144. function uploadImgHandle(fileList, item, formData) {
  145. if (
  146. ["人像面", "国徽面", "经办人证件人像面", "经办人证件国徽面"].includes(
  147. item.title
  148. )
  149. ) {
  150. idCardOcr(fileList, item, formData);
  151. } else if (item.title == "营业执照") {
  152. cardImageOcrYY(fileList, item, formData);
  153. } else {
  154. cardFileImageUpdate(fileList, item, formData);
  155. }
  156. }
  157. return {
  158. uploadImgHandle,
  159. submitQuery
  160. };
  161. }