Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

drivingLicense.vue 28KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880
  1. <template>
  2. <view class="bg-content">
  3. <image
  4. class="bg-image"
  5. mode="widthFix"
  6. src="https://qtzl.etcjz.cn/default-bucket/20240324/3eba2095f5204798a1f8101b_beijing.jpg"
  7. ></image>
  8. <view class="content-re">
  9. <custom-header
  10. title="车辆信息"
  11. :back="config.hasReturn === 'true'"
  12. ></custom-header>
  13. <view style="padding: 20rpx 0">
  14. <form-builder-vue
  15. @radioChange="radioChange"
  16. :formData="formData"
  17. :config="config"
  18. @uploadImgOcr="uploadImg"
  19. @submit="submit"
  20. @handleBlurs="handleBlurs"
  21. @handleChange="handleChange"
  22. @handleUseUserType="handleUseUserType"
  23. >
  24. </form-builder-vue>
  25. </view>
  26. </view>
  27. </view>
  28. </template>
  29. <script setup lang='ts'>
  30. import CustomHeader from "@/components/CustomHeader.vue";
  31. import FormBuilderVue from "@/components/form-builder/form-builder-vue3.vue";
  32. import { TypeData, Index } from "@/components/form-builder/tools";
  33. import { reactive, ref, nextTick } from "vue";
  34. import { onLoad } from "@dcloudio/uni-app";
  35. import { useQdOrderStore } from "@/stores/qdOrder.js";
  36. import ocrHandle from "./ocrHandle";
  37. import fromData from "./fromData.js";
  38. import { requestNew, request } from "@/utils/network/request";
  39. // 初始化响应式数据
  40. const orderNo = ref("");
  41. const vanType = ref(0);
  42. const qdOrderStore = useQdOrderStore();
  43. const config = ref<any>({
  44. submitName: "下一步",
  45. titleWidth: 250,
  46. isHeader: true,
  47. hasReturn: "true",
  48. });
  49. const formData = ref<any>(fromData);
  50. const isUpOwner = ref(false);
  51. const qdOrderVal = ref<any>({});
  52. const ocrDatas = ref<any>(null); // 添加OCR数据的ref
  53. const ownerType = ref(0); // 0: 个人, 1: 企业
  54. let orderType = "";//订单类型
  55. const handleUseUserType = (e, item) => {
  56. if(e != 0) {
  57. formData.value[Index('道路运输许可证', formData.value)].show = false;
  58. formData.value[Index('经营许可证编号', formData.value)].show = false;
  59. } else {
  60. formData.value[Index('道路运输许可证', formData.value)].show = true;
  61. formData.value[Index('经营许可证编号', formData.value)].show = true;
  62. }
  63. }
  64. // 定义个人车主信息表单项
  65. const personalOwnerFields = [
  66. {
  67. underline: false,
  68. titleShow: false,
  69. disabled: false,
  70. vertical: "1",
  71. id: "id_1687057765030",
  72. title: "车主信息",
  73. type: "100",
  74. required: false,
  75. },
  76. {
  77. underline: false,
  78. titleShow: false,
  79. disabled: false,
  80. vertical: "1",
  81. id: "id_owner_type_toggle",
  82. title: "车主类型",
  83. type: "7",
  84. value: "ownerType",
  85. required: false,
  86. itemData: [
  87. { value: 0, name: "个人", checked: true },
  88. { value: 1, name: "企业", checked: false }
  89. ],
  90. ownerType: 0,
  91. },
  92. {
  93. placeholderImg: "image/applyCard/renxiang.png",
  94. underline: false,
  95. titleShow: false,
  96. hint: "上传身份证的人像面",
  97. disabled: false,
  98. vertical: "1",
  99. id: "id_1686971502045",
  100. title: "人像面",
  101. type: "14",
  102. value: "userPosImgUrl",
  103. required: true,
  104. show: false,
  105. componentKey: Date.now(),
  106. },
  107. {
  108. placeholderImg: "image/applyCard/guohui.png",
  109. underline: false,
  110. titleShow: false,
  111. hint: "上传身份证的国徽面",
  112. disabled: false,
  113. vertical: "1",
  114. id: "id_1686971729660",
  115. title: "国徽面",
  116. type: "14",
  117. value: "userNegImgUrl",
  118. required: true,
  119. show: false,
  120. componentKey: Date.now(),
  121. },
  122. {
  123. placeholderImg: "image/applyCard/weituoshu.png",
  124. underline: false,
  125. titleShow: false,
  126. hint: "上传文字清晰的委托书",
  127. disabled: false,
  128. vertical: "1",
  129. id: "id_1686971922491",
  130. title: "委托书",
  131. type: "14",
  132. value: "proxyUrl",
  133. required: true,
  134. show: false,
  135. componentKey: Date.now(),
  136. },
  137. {
  138. underline: true,
  139. maxlength: "20",
  140. titleShow: true,
  141. hint: "请输入姓名",
  142. disabled: false,
  143. vertical: "1",
  144. id: "id_1686974639025",
  145. title: "姓名",
  146. type: "2",
  147. value: "userName",
  148. required: true,
  149. show: false,
  150. },
  151. {
  152. underline: true,
  153. maxlength: "11",
  154. titleShow: true,
  155. vertical: "1",
  156. title: "联系方式",
  157. type: "2",
  158. required: true,
  159. checkReg: "^1[3456789]\\d{9}$",
  160. hint: "请输入联系方式",
  161. checkPrompt: "请输入正确的联系方式",
  162. disabled: false,
  163. inputType: "tel",
  164. id: "id_1686974684640",
  165. value: "mobile",
  166. mobile: "",
  167. show: false,
  168. },
  169. {
  170. underline: true,
  171. maxlength: "18",
  172. titleShow: true,
  173. vertical: "1",
  174. title: "证件号码",
  175. type: "2",
  176. required: true,
  177. checkReg: "(^\\d{15}$)|(^\\d{18}$)|(^\\d{17}(\\d|X)$)",
  178. hint: "请输入证件号码",
  179. checkPrompt: "请输入正确的身份证号",
  180. disabled: false,
  181. id: "id_1686974751416",
  182. value: "userIdNum",
  183. show: false,
  184. },
  185. {
  186. underline: true,
  187. titleShow: true,
  188. hint: "请输入住址",
  189. disabled: false,
  190. vertical: "1",
  191. id: "id_1686974837416",
  192. title: "住址",
  193. type: "2",
  194. value: "address",
  195. required: true,
  196. }
  197. ];
  198. // 定义企业车主信息表单项
  199. const enterpriseOwnerFields = [
  200. {
  201. underline: false,
  202. titleShow: false,
  203. disabled: false,
  204. vertical: "1",
  205. id: "id_1687057765030",
  206. title: "车主信息",
  207. type: "100",
  208. required: false,
  209. },
  210. {
  211. underline: false,
  212. titleShow: false,
  213. disabled: false,
  214. vertical: "1",
  215. id: "id_owner_type_toggle",
  216. title: "车主类型",
  217. type: "7",
  218. value: "ownerType",
  219. required: false,
  220. itemData: [
  221. { value: 0, name: "个人", checked: false },
  222. { value: 1, name: "企业", checked: true }
  223. ],
  224. ownerType: 1,
  225. },
  226. {
  227. placeholderImg: "image/applyCard/zhizhao.png",
  228. underline: false,
  229. titleShow: false,
  230. hint: "上传企业营业执照",
  231. disabled: false,
  232. vertical: "1",
  233. id: "id_1686971502046",
  234. title: "营业执照",
  235. type: "14",
  236. value: "businessLicenseUrl",
  237. required: true,
  238. show: false,
  239. componentKey: Date.now(),
  240. },
  241. {
  242. placeholderImg: "image/applyCard/weituoshu.png",
  243. underline: false,
  244. titleShow: false,
  245. hint: "上传文字清晰的委托书",
  246. disabled: false,
  247. vertical: "1",
  248. id: "id_1686971922492",
  249. title: "委托书",
  250. type: "14",
  251. value: "proxyUrl",
  252. required: true,
  253. show: false,
  254. componentKey: Date.now(),
  255. },
  256. {
  257. underline: true,
  258. maxlength: "100",
  259. titleShow: true,
  260. hint: "请输入公司名称",
  261. disabled: false,
  262. vertical: "1",
  263. id: "id_1686974639026",
  264. title: "公司名称",
  265. type: "2",
  266. value: "unitName",
  267. required: true,
  268. show: false,
  269. },
  270. // {
  271. // underline: true,
  272. // maxlength: "11",
  273. // titleShow: true,
  274. // vertical: "1",
  275. // title: "联系方式",
  276. // type: "2",
  277. // required: true,
  278. // checkReg: "^1[3456789]\\d{9}$",
  279. // hint: "请输入联系方式",
  280. // checkPrompt: "请输入正确的联系方式",
  281. // disabled: false,
  282. // inputType: "tel",
  283. // id: "id_1686974684641",
  284. // value: "mobile",
  285. // mobile: "",
  286. // show: false,
  287. // },
  288. {
  289. underline: true,
  290. maxlength: "18",
  291. titleShow: true,
  292. vertical: "1",
  293. title: "社会信用代码",
  294. type: "2",
  295. required: true,
  296. hint: "请输入社会信用代码",
  297. disabled: false,
  298. id: "id_1686974751417",
  299. value: "screditCode",
  300. show: false,
  301. },
  302. {
  303. underline: true,
  304. titleShow: true,
  305. hint: "请输入住址",
  306. disabled: false,
  307. vertical: "1",
  308. id: "id_1686974837417",
  309. title: "住址",
  310. type: "2",
  311. value: "adress",
  312. required: true,
  313. show: false,
  314. }
  315. ];
  316. onLoad((opin) => {
  317. // 调用trackEvent接口获取订单信息
  318. orderNo.value = opin.orderNo;
  319. const params = {
  320. orderNo: orderNo.value,
  321. };
  322. trackEvent(params);
  323. });
  324. function trackEvent(params) {
  325. requestNew("/iaw/h5/order/web/queryOrder", {
  326. data: params,
  327. }).then((res) => {
  328. if (res.code === 0) {
  329. qdOrderVal.value = res.data;
  330. vanType.value = res.data.vanType;
  331. qdOrderStore.qdOrderVal = res.data; // 将整个订单数据存入store
  332. // 设置车牌号
  333. const vehiclePlateIndex = Index("车牌号", formData.value);
  334. if (vehiclePlateIndex !== -1 && res.data.vehiclePlate) {
  335. formData.value[vehiclePlateIndex][formData.value[vehiclePlateIndex].value] = res.data.vehiclePlate;
  336. }
  337. // 设置车轴数默认值为2
  338. const axleCountIndex = Index("车轴数", formData.value);
  339. if (axleCountIndex !== -1) {
  340. formData.value[axleCountIndex][formData.value[axleCountIndex].value] = "2";
  341. }
  342. orderType = res.data.userType;
  343. // handleHide()
  344. }
  345. });
  346. }
  347. async function handleBlurs(e, item) {
  348. if (item.value === "axleCount") {
  349. // await handleVehicCharge(formData);
  350. // handleVehicUsePropert(formData);
  351. }
  352. }
  353. async function handleChange(e, item) {
  354. if (item.value === "userName") {
  355. submitQuery.idName = e.detail.value;
  356. }
  357. if (item.value === "ownerName") {
  358. submitQuery.man = e.detail.value;
  359. }
  360. if (item.value === "mobile") {
  361. submitQuery.mobile = e.detail.value;
  362. }
  363. // 处理企业相关字段
  364. if (item.value === "unitName") {
  365. submitQuery.companyName = e.detail.value;
  366. }
  367. if (item.value === "screditCode") {
  368. submitQuery.socialCreditCode = e.detail.value;
  369. }
  370. if (item.value === "adress") {
  371. submitQuery.companyAddress = e.detail.value;
  372. }
  373. }
  374. // 点击收费车型时获取选项
  375. async function handleClick(e, item) {
  376. if (item.value === "feeVehicleType" || item.title === "收费车型") {
  377. const ocrData = ocrDatas.value || {};
  378. const axleCountItem = formData.value[Index("车轴数", formData.value)];
  379. const approvedCount = formData.value[Index("核定载人数", formData.value)];
  380. const totalMass = formData.value[Index("总质量(kg)", formData.value)];
  381. const vehicleDimensions = formData.value[Index("外廓尺寸", formData.value)];
  382. // 检查是否输入了车轴数
  383. if (!axleCountItem || !axleCountItem[axleCountItem.value]) {
  384. uni.showToast({
  385. title: "请输入车轴数",
  386. icon: "none",
  387. duration: 2000,
  388. });
  389. return;
  390. }
  391. // 获取收费车型选项
  392. const feeVehicleParams = {
  393. approvedCount: approvedCount[approvedCount.value],
  394. axleCount: Number(axleCountItem[axleCountItem.value]),
  395. totalMass: totalMass[totalMass.value],
  396. vanType: qdOrderStore.qdOrderVal.vanType,
  397. vehicleDimensions: vehicleDimensions[vehicleDimensions.value],
  398. };
  399. // 调用获取收费车型选项接口
  400. const res = await requestNew("/iaw/h5/order/web/vehicCharge", {
  401. data: feeVehicleParams,
  402. });
  403. if (res.code === 0) {
  404. // 更新收费车型选项
  405. const feeVehicleTypeItem =
  406. formData.value[Index("收费车型", formData.value)];
  407. const vehicChargeVal = [res.data];
  408. if (feeVehicleTypeItem) {
  409. feeVehicleTypeItem.options = vehicChargeVal.map((item) => ({
  410. label: item.feeVehicleTypeStr,
  411. value: item.feeVehicleType,
  412. }));
  413. // 默认选中第一个选项
  414. if (vehicChargeVal.length > 0) {
  415. feeVehicleTypeItem[feeVehicleTypeItem.value] =
  416. vehicChargeVal[0].feeVehicleTypeStr;
  417. }
  418. }
  419. }
  420. }
  421. }
  422. function isTractorHandle() {
  423. const index = Index("车辆用户类型", formData.value);
  424. formData.value[index].disabled = false;
  425. }
  426. //单项选择器
  427. function radioChange(e: any, item: TypeData) {
  428. if (item.title === "是否牵引车") {
  429. if (parseInt(e.detail.value) == 1) {
  430. formData.value[Index("道路运输证", formData.value)].show = false;
  431. } else {
  432. formData.value[Index("道路运输证", formData.value)].show = true;
  433. }
  434. }
  435. // 处理车主类型切换
  436. if (item.title === "车主类型") {
  437. const selectedType = parseInt(e.detail.value);
  438. ownerType.value = selectedType;
  439. switchOwnerType(selectedType);
  440. }
  441. }
  442. // 切换车主类型表单
  443. function switchOwnerType(type: number) {
  444. // 找到车主信息开始的位置
  445. const ownerInfoIndex = formData.value.findIndex(item => item.title === "车主信息");
  446. if (ownerInfoIndex !== -1) {
  447. // 先清除当前车主信息相关数据(在移除表单项之前)
  448. clearOwnerData(type);
  449. // 移除现有的车主信息相关表单项
  450. let removeCount = 0;
  451. for (let i = ownerInfoIndex; i < formData.value.length; i++) {
  452. removeCount++;
  453. // 如果遇到下一个主要部分,停止计数
  454. if (i > ownerInfoIndex && formData.value[i].type === "100") {
  455. removeCount--;
  456. break;
  457. }
  458. }
  459. // 移除旧的车主信息表单项
  460. formData.value.splice(ownerInfoIndex, removeCount);
  461. // 根据类型添加对应的表单项,并强制更新componentKey
  462. const fieldsToAdd = type === 0 ? personalOwnerFields : enterpriseOwnerFields;
  463. // 为每个图片组件生成新的componentKey
  464. const updatedFields = fieldsToAdd.map(field => {
  465. if (field.type === "14") { // 图片组件
  466. return { ...field, componentKey: Date.now() + Math.random() };
  467. }
  468. return field;
  469. });
  470. formData.value.splice(ownerInfoIndex, 0, ...updatedFields);
  471. // 强制清除所有相关数据
  472. nextTick(() => {
  473. // 清除formData中的字段
  474. clearOwnerData(type);
  475. // 强制清除submitQuery中的数据
  476. if (submitQuery) {
  477. // 清除所有可能的图片相关数据
  478. submitQuery.ownerPosImgUrl = '';
  479. submitQuery.ownerNegImgUrl = '';
  480. submitQuery.proxyUrl = '';
  481. submitQuery.businessLicenseUrl = '';
  482. submitQuery.idName = '';
  483. submitQuery.mobile = '';
  484. submitQuery.idno = '';
  485. submitQuery.ownerIdAddress = '';
  486. submitQuery.companyName = '';
  487. submitQuery.socialCreditCode = '';
  488. submitQuery.companyAddress = '';
  489. }
  490. });
  491. //单位订单不需要委托书,个人需要
  492. if(orderType != "PERSONAL_USER"){
  493. // 找到委托书的位置
  494. const weiTuoIndex = formData.value.findIndex(item => item.title === "委托书");
  495. if (weiTuoIndex !== -1) {
  496. formData.value.splice(weiTuoIndex,1)
  497. }
  498. }
  499. console.log(type, "type")
  500. }
  501. }
  502. // 清除车主信息相关数据
  503. function clearOwnerData(type: number) {
  504. // 通用清除函数
  505. const clearFields = (fields: string[]) => {
  506. fields.forEach(field => {
  507. const index = formData.value.findIndex(item => item.value === field);
  508. if (index !== -1) {
  509. // 清除字段值
  510. formData.value[index][field] = '';
  511. // 如果是图片字段,还需要清除imgUrl属性并强制重新渲染
  512. if (field.includes('ImgUrl') || field === 'proxyUrl') {
  513. formData.value[index].imgUrl = '';
  514. // 通过修改key来强制重新渲染组件
  515. formData.value[index].componentKey = Date.now() + Math.random();
  516. console.log(`清除图片字段: ${field}, 新componentKey: ${formData.value[index].componentKey}`);
  517. }
  518. }
  519. });
  520. };
  521. // 清除所有可能的图片字段,不管是什么类型
  522. const allImageFields = ['userPosImgUrl', 'userNegImgUrl', 'proxyUrl', 'businessLicenseUrl'];
  523. allImageFields.forEach(field => {
  524. const index = formData.value.findIndex(item => item.value === field);
  525. if (index !== -1) {
  526. formData.value[index][field] = '';
  527. formData.value[index].imgUrl = '';
  528. formData.value[index].componentKey = Date.now() + Math.random();
  529. }
  530. });
  531. // 清除submitQuery中的相关数据
  532. if (type === 0) {
  533. // 清除个人车主信息相关数据
  534. const personalFields = ['userPosImgUrl', 'userNegImgUrl', 'proxyUrl', 'userName', 'mobile', 'userIdNum', 'address'];
  535. clearFields(personalFields);
  536. // 清除submitQuery中的个人相关数据
  537. if (submitQuery) {
  538. submitQuery.ownerPosImgUrl = '';
  539. submitQuery.ownerNegImgUrl = '';
  540. submitQuery.proxyUrl = '';
  541. submitQuery.idName = '';
  542. submitQuery.mobile = '';
  543. submitQuery.idno = '';
  544. submitQuery.ownerIdAddress = '';
  545. }
  546. } else {
  547. // 清除企业车主信息相关数据
  548. const enterpriseFields = ['businessLicenseUrl', 'proxyUrl', 'unitName', 'screditCode', 'adress'];
  549. clearFields(enterpriseFields);
  550. // 清除submitQuery中的企业相关数据
  551. if (submitQuery) {
  552. submitQuery.businessLicenseUrl = '';
  553. submitQuery.proxyUrl = '';
  554. submitQuery.companyName = '';
  555. submitQuery.socialCreditCode = '';
  556. submitQuery.companyAddress = '';
  557. }
  558. }
  559. }
  560. //有哪些字段隐藏哪些字段
  561. function handleHide() {
  562. if (formData.value[Index("道路运输证", formData.value)]) {
  563. formData.value[Index("道路运输证", formData.value)].show = true;
  564. }
  565. }
  566. // 货车或者客车切换
  567. function checkCarTpe(key) {
  568. // true为客车,false为货车
  569. // formData.value[Index('总质量(kg)', formData.value)].show = key
  570. // formData.value[Index('整备质量(kg)', formData.value)].show = key
  571. formData.value[Index("核定载质量(kg)", formData.value)].show = key;
  572. formData.value[Index("准牵引总质量(kg)", formData.value)].show = key;
  573. if (formData.value[Index("道路运输证", formData.value)]) {
  574. formData.value[Index("道路运输证", formData.value)].show = key;
  575. formData.value[Index("是否牵引车", formData.value)].show = key;
  576. }
  577. // formData.value[Index('车轴数', formData.value)].show = key
  578. if (formData.value[Index("车头照", formData.value)]) {
  579. formData.value[Index("车头照", formData.value)].show = key;
  580. }
  581. const dataItem = formData.value[Index("车辆用户类型", formData.value)];
  582. dataItem.disabled = true;
  583. dataItem[dataItem.value] = 0;
  584. }
  585. // ocr图片处理和额外请求参数处理
  586. const {
  587. uploadImgHandle,
  588. submitQuery,
  589. ocrDataFu,
  590. handleVehicCharge,
  591. handleVehicUsePropert,
  592. uploadImgHandleId,
  593. } = ocrHandle();
  594. function uploadImg(fileList, item) {
  595. uploadImgHandle(fileList, item, formData);
  596. uploadImgHandleId(fileList, item, formData);
  597. }
  598. let isLock = false;
  599. async function submit(item: any) {
  600. if (submitQuery.idName !== undefined) {
  601. isUpOwner.value = true;
  602. }
  603. // 构建请求参数
  604. const requestData: any = {
  605. orderNo: orderNo.value,
  606. loginSource: "431bfdc8b9c645e0b293b85d6ce1948n",
  607. };
  608. // 从表单数据中提取值并添加到请求数据中
  609. const vehiclePlateItem = formData.value[Index("车牌号", formData.value)];
  610. const axleCountItem = formData.value[Index("车轴数", formData.value)];
  611. const approvedCountItem = formData.value[Index("核定载人数", formData.value)];
  612. const totalMassItem = formData.value[Index("总质量(kg)", formData.value)];
  613. const maintenaceMassItem =
  614. formData.value[Index("整备质量(kg)", formData.value)];
  615. const permittedWeightItem =
  616. formData.value[Index("核定载质量(kg)", formData.value)];
  617. const permittedTowWeightItem =
  618. formData.value[Index("准牵引总质量(kg)", formData.value)];
  619. const vehicleDimensionsItem =
  620. formData.value[Index("外廓尺寸", formData.value)];
  621. const vehicleTypeItem = formData.value[Index("车辆类型", formData.value)];
  622. const vehicleModelItem = formData.value[Index("品牌型号", formData.value)];
  623. const engineNumItem = formData.value[Index("发动机号码", formData.value)];
  624. const vinItem = formData.value[Index("车辆识别代码", formData.value)];
  625. const ownerNameItem = formData.value[Index("所有人", formData.value)];
  626. const issueDateItem = formData.value[Index("发证日期", formData.value)];
  627. const registerDateItem = formData.value[Index("注册日期", formData.value)];
  628. const vehPosImgUrlItem = formData.value[Index("行驶证主页", formData.value)];
  629. const vehNegImgUrlItem = formData.value[Index("行驶证副页", formData.value)];
  630. const feeVehicleTypeItem = formData.value[Index("收费车型", formData.value)];
  631. const useCharacter = formData.value[Index("使用性质", formData.value)];
  632. const tractorSignItem = formData.value[Index("是否牵引车", formData.value)];
  633. const useUserType = formData.value[Index("车辆用户类型", formData.value)];
  634. // 获取企业信息表单项
  635. const companyNameItem = formData.value[Index("公司名称", formData.value)];
  636. const socialCreditCodeItem = formData.value[Index("社会信用代码", formData.value)];
  637. const businessLicenseItem = formData.value[Index("营业执照", formData.value)];
  638. const companyAddressItem = formData.value[Index("住址", formData.value)];
  639. const roadTransportPermitPicItem = formData.value[Index('道路运输许可证', formData.value)];
  640. const licenseIdNumItem = formData.value[Index('经营许可证编号', formData.value)];
  641. if (roadTransportPermitPicItem && roadTransportPermitPicItem[roadTransportPermitPicItem.value]) {
  642. requestData.roadTransportPermitPicUrl = roadTransportPermitPicItem[roadTransportPermitPicItem.value];
  643. }
  644. if (licenseIdNumItem && licenseIdNumItem[licenseIdNumItem.value]) {
  645. requestData.licenseIdNum = licenseIdNumItem[licenseIdNumItem.value];;// = vehiclePlateItem[vehiclePlateItem.value];
  646. }
  647. // 添加表单数据到请求参数
  648. if (vehiclePlateItem && vehiclePlateItem[vehiclePlateItem.value]) {
  649. requestData.vehiclePlate = vehiclePlateItem[vehiclePlateItem.value];
  650. }
  651. if (axleCountItem && axleCountItem[axleCountItem.value]) {
  652. requestData.axleCount = parseInt(axleCountItem[axleCountItem.value]);
  653. }
  654. if (approvedCountItem && approvedCountItem[approvedCountItem.value]) {
  655. requestData.approvedCount = parseInt(
  656. approvedCountItem[approvedCountItem.value]
  657. );
  658. }
  659. if (totalMassItem && totalMassItem[totalMassItem.value]) {
  660. requestData.totalMass = parseInt(totalMassItem[totalMassItem.value]);
  661. }
  662. if (maintenaceMassItem && maintenaceMassItem[maintenaceMassItem.value]) {
  663. requestData.maintenaceMass = parseInt(
  664. maintenaceMassItem[maintenaceMassItem.value]
  665. );
  666. }
  667. if (permittedWeightItem && permittedWeightItem[permittedWeightItem.value]) {
  668. requestData.permittedWeight = parseInt(
  669. permittedWeightItem[permittedWeightItem.value]
  670. );
  671. }
  672. if (
  673. permittedTowWeightItem &&
  674. permittedTowWeightItem[permittedTowWeightItem.value]
  675. ) {
  676. requestData.permittedTowWeight = parseInt(
  677. permittedTowWeightItem[permittedTowWeightItem.value]
  678. );
  679. }
  680. if (
  681. vehicleDimensionsItem &&
  682. vehicleDimensionsItem[vehicleDimensionsItem.value]
  683. ) {
  684. requestData.vehicleDimensions = vehicleDimensionsItem[
  685. vehicleDimensionsItem.value
  686. ]
  687. .replace("mm", "")
  688. .trim();
  689. }
  690. if (vehicleTypeItem && vehicleTypeItem[vehicleTypeItem.value]) {
  691. requestData.vehicleType = vehicleTypeItem[vehicleTypeItem.value];
  692. }
  693. if (vehicleModelItem && vehicleModelItem[vehicleModelItem.value]) {
  694. requestData.vehicleModel = vehicleModelItem[vehicleModelItem.value];
  695. }
  696. if (engineNumItem && engineNumItem[engineNumItem.value]) {
  697. requestData.engineNum = engineNumItem[engineNumItem.value];
  698. }
  699. if (vinItem && vinItem[vinItem.value]) {
  700. requestData.vin = vinItem[vinItem.value];
  701. }
  702. if (ownerNameItem && ownerNameItem[ownerNameItem.value]) {
  703. requestData.ownerName = ownerNameItem[ownerNameItem.value];
  704. }
  705. if (issueDateItem && issueDateItem[issueDateItem.value]) {
  706. requestData.issueDate = issueDateItem[issueDateItem.value];
  707. }
  708. if (registerDateItem && registerDateItem[registerDateItem.value]) {
  709. requestData.registerDate = registerDateItem[registerDateItem.value];
  710. }
  711. if (vehPosImgUrlItem && vehPosImgUrlItem[vehPosImgUrlItem.value]) {
  712. requestData.vehPosImgUrl = vehPosImgUrlItem[vehPosImgUrlItem.value];
  713. }
  714. if (vehNegImgUrlItem && vehNegImgUrlItem[vehNegImgUrlItem.value]) {
  715. requestData.vehNegImgUrl = vehNegImgUrlItem[vehNegImgUrlItem.value];
  716. }
  717. if (feeVehicleTypeItem && feeVehicleTypeItem.feeVehicleType) {
  718. requestData.feeVehicleType = feeVehicleTypeItem.feeVehicleType;
  719. }
  720. if (tractorSignItem && tractorSignItem[tractorSignItem.value] !== undefined) {
  721. requestData.tractorSign =
  722. parseInt(tractorSignItem[tractorSignItem.value]) || 0;
  723. }
  724. if (useUserType && useUserType[useUserType.value] !== undefined) {
  725. requestData.useUserType = parseInt(useUserType[useUserType.value]) || 0;
  726. }
  727. if (useCharacter && useCharacter[useCharacter.value] !== undefined) {
  728. requestData.character = parseInt(useCharacter[useCharacter.value]) || 0;
  729. }
  730. // 添加订单相关数据
  731. requestData.vanType = qdOrderVal.value.vanType;
  732. requestData.vehiclePlateColor = qdOrderVal.value.vehiclePlateColor || 0;
  733. // requestData.character = 2; // 固定值
  734. requestData.vehicleSign = 2; // 固定值:后装
  735. requestData.tractorSign = 0;
  736. // 添加 submitQuery 中的数据
  737. // 处理图片URL,提取路径部分
  738. const extractImagePath = (url) => {
  739. if (!url) return '';
  740. if (url.includes('default-bucket')) {
  741. return url.split('default-bucket/')[1];
  742. } else if (url.includes('zhywpt-issuer')) {
  743. return url.split('qtzl.etcjz.cn/')[1];
  744. }
  745. return url;
  746. };
  747. console.log(submitQuery, "submitQuery");
  748. console.log("当前车主类型:", ownerType.value);
  749. console.log("企业表单数据:", {
  750. companyName: companyNameItem ? companyNameItem[companyNameItem.value] : null,
  751. socialCreditCode: socialCreditCodeItem ? socialCreditCodeItem[socialCreditCodeItem.value] : null,
  752. companyAddress: companyAddressItem ? companyAddressItem[companyAddressItem.value] : null,
  753. businessLicense: businessLicenseItem ? businessLicenseItem[businessLicenseItem.value] : null
  754. });
  755. if (submitQuery.mobile) requestData.ownerTel = submitQuery.mobile;
  756. if (submitQuery.userIdType) requestData.ownerIdType = submitQuery.userIdType;
  757. if (submitQuery.proxyUrl) requestData.proxyUrl = submitQuery.proxyUrl;
  758. if (submitQuery.vehBodyUrl) requestData.vehBodyUrl = submitQuery.vehBodyUrl;
  759. console.log("图片上传状态:", {
  760. proxyUrl: submitQuery.proxyUrl,
  761. vehBodyUrl: submitQuery.vehBodyUrl,
  762. businessLicenseUrl: submitQuery.businessLicenseUrl
  763. });
  764. if (submitQuery.ownerIdAddress) requestData.ownerIdAddress = submitQuery.ownerIdAddress;
  765. // 处理企业信息
  766. if (ownerType.value == 1) {
  767. // 企业模式:传递企业相关信息
  768. if (companyNameItem && companyNameItem[companyNameItem.value]) {
  769. requestData.idName = companyNameItem[companyNameItem.value];
  770. }
  771. if (socialCreditCodeItem && socialCreditCodeItem[socialCreditCodeItem.value]) {
  772. requestData.ownerIdNum = socialCreditCodeItem[socialCreditCodeItem.value];
  773. // requestData.licenseldNum = socialCreditCodeItem[socialCreditCodeItem.value]; // 也作为licenseldNum传递
  774. }
  775. if (companyAddressItem && companyAddressItem[companyAddressItem.value]) {
  776. requestData.ownerIdAddress = companyAddressItem[companyAddressItem.value];
  777. }
  778. if (businessLicenseItem && businessLicenseItem[businessLicenseItem.value]) {
  779. requestData.ownerPosImgUrl = businessLicenseItem[businessLicenseItem.value];
  780. }
  781. // 从submitQuery中获取营业执照图片(OCR处理过的)
  782. if (submitQuery.businessLicenseUrl) {
  783. requestData.ownerPosImgUrl = submitQuery.businessLicenseUrl;
  784. }
  785. requestData.ownerType = 1; // 标识为企业
  786. requestData.userIdType = "203"; // 企业信用代码类型
  787. } else {
  788. // 个人模式:传递个人身份证信息
  789. if (submitQuery.idno) requestData.ownerIdNum = submitQuery.idno;
  790. if (submitQuery.idName) requestData.idName = submitQuery.idName;
  791. if (submitQuery.ownerNegImgUrl) requestData.ownerNegImgUrl = extractImagePath(submitQuery.ownerNegImgUrl);
  792. if (submitQuery.ownerPosImgUrl) requestData.ownerPosImgUrl = extractImagePath(submitQuery.ownerPosImgUrl);
  793. requestData.ownerType = 0; // 标识为个人
  794. }
  795. return requestNew("/iaw/h5/order/web/upVehicle", {
  796. data: requestData,
  797. }).then((res) => {
  798. //判断是否需要输入身份信息
  799. if (res.code === 0 && res.data.flag === 2) {
  800. uni.navigateTo({
  801. url: `/pages/payment/payment?orderNo=${orderNo.value}`,
  802. animationType: 'pop-in',
  803. animationDuration: 500
  804. })
  805. } else {
  806. // uni.showToast({
  807. // title: res.message,
  808. // icon: 'none',
  809. // duration: 2000
  810. // });
  811. // submitQuery.idName = undefined
  812. uni.showModal({
  813. title: "提示",
  814. content: res.message,
  815. success: function (res) {
  816. if (res.confirm) {
  817. // 根据当前车主类型添加对应的表单项
  818. const fieldsToAdd = ownerType.value === 0 ? personalOwnerFields : enterpriseOwnerFields;
  819. formData.value.push(...fieldsToAdd);
  820. //单位订单不需要委托书,个人需要
  821. if(orderType != "PERSONAL_USER"){
  822. // 找到委托书的位置
  823. const weiTuoIndex = formData.value.findIndex(item => item.title === "委托书");
  824. formData.value.splice(weiTuoIndex,1)
  825. }
  826. } else if (res.cancel) {
  827. }
  828. },
  829. });
  830. }
  831. });
  832. }
  833. </script>
  834. <style lang='scss' scoped>
  835. </style>