選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

renewal-confirm.vue 20KB

1年前
1年前
1年前
1年前
1年前
1年前
1年前
2年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
2年前
1年前
2年前
2年前
2年前
1年前
2年前
2年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820
  1. <template>
  2. <view class="selectCar-box">
  3. <view class="details">
  4. <view class="title"> 基础信息 </view>
  5. <view class="details-item">
  6. <view> 订单编号: </view>
  7. <text>{{ orderInfos.orderId }}</text>
  8. </view>
  9. <view class="details-item">
  10. <view> 用户名称: </view>
  11. <text>{{ orderInfos.customerName }}</text>
  12. </view>
  13. <view class="details-item">
  14. <view> 用户证件类型: </view>
  15. <text>{{ getCodeName('CERTIFICATE_TYPE',orderInfos.ownerIdtype) }}</text>
  16. </view>
  17. <view class="details-item">
  18. <view> 用户证件号: </view>
  19. <text>{{ orderInfos.ownerIdnum }}</text>
  20. </view>
  21. <view class="details-item">
  22. <view> 订单车牌号: </view>
  23. <text style="color: #00b38b">{{ orderInfos.vehiclePlate }}</text>
  24. </view>
  25. <view class="details-item">
  26. <view> 车牌颜色: </view>
  27. <text style="color: #00b38b">{{
  28. orderInfos.vehiclePlateColorStr
  29. }}</text>
  30. </view>
  31. <view class="details-item">
  32. <view> 收费车型: </view>
  33. <text>{{ orderInfos.vehicleType }}</text>
  34. </view>
  35. </view>
  36. <view class="title"> 卡信息 </view>
  37. <view class="card">
  38. <view class="card-left">
  39. <image :src="`${$imgUrl}card2.png`" mode=""></image>
  40. <view class="card-center">
  41. <view class="card-center-head"> {{orderInfos.cardId}} </view>
  42. <view class="tips">
  43. <!-- <text>储蓄卡</text> -->
  44. <text class="tips-card">{{getCodeName('CARD_STATE_TYPE',orderInfos.cardStatus)}}</text>
  45. </view>
  46. <view class="choose-item1"> 有效期:{{orderInfos.cardExpireTime }}</view>
  47. </view>
  48. </view>
  49. <view class="choose-item" @click="choose(1)">
  50. <view class="active" v-if="flag.includes(1)">
  51. </view>
  52. </view>
  53. </view>
  54. <view class="title"> OBU设备信息 </view>
  55. <view class="card">
  56. <view class="card-left">
  57. <image :src="`${$imgUrl}card1.png`" mode=""></image>
  58. <view class="card-center">
  59. <view class="card-center-head"> {{orderInfos.obuId}} </view>
  60. <view class="tips">
  61. <!-- <text>储蓄卡</text> -->
  62. <text class="tips-card">{{getCodeName('OBU_STATE_TYPE',orderInfos.obuStatus)}}</text>
  63. </view>
  64. <view class="choose-item1"> 有效期:{{orderInfos.obuExpireTime }} </view>
  65. </view>
  66. </view>
  67. <view class="choose-item" @click="choose(2)">
  68. <view class="active" v-if="flag.includes(2)">
  69. </view>
  70. </view>
  71. </view>
  72. <button class="submit" @click="toPage" v-if="!state.flag">卡签续期</button>
  73. <button class="submit" @click="toBack" v-else="state.flag">返回服务中心</button>
  74. <view class="mask" v-show="state.showPopup">
  75. <view class="main">
  76. <view class="top">
  77. <image class="icon-close" :src="`${$imgUrl}common/icon-close.png`" @click="cancel"></image>
  78. </view>
  79. <image class="icon-success" :src="`${$imgUrl}bluetooth/card-success.png`"></image>
  80. <view class="title">{{state.successName}}续期成功!</view>
  81. </view>
  82. </view>
  83. </view>
  84. </template>
  85. <script setup>
  86. import {
  87. getCodeName
  88. } from "@/datas/queryKey.js";
  89. import {
  90. reactive,
  91. ref
  92. } from "vue";
  93. import {
  94. navTo,desensitization
  95. } from "@/utils/utils";
  96. import {
  97. onLoad,
  98. onUnload,
  99. onShow
  100. } from "@dcloudio/uni-app";
  101. import {
  102. request
  103. } from "@/utils/network/request.js";
  104. import {
  105. orderDetail,
  106. cardRenewal,
  107. writeCardBack,
  108. cardModifyConfirm,
  109. obuRenewal,
  110. modifyObuVehicleInfo,
  111. obuActivation,
  112. renewalTimeApi
  113. } from "@/utils/network/api.js";
  114. import {
  115. getVehiclePlateColor
  116. } from "@/datas/vehiclePlateColor";
  117. import {
  118. searchVehicleInfoQuery
  119. } from "@/subpackage/after-sale/js/publicRequest";
  120. const cmd = require("../../../static/etcUtil/cmdConfig.js");
  121. import {
  122. IntegerToHexString,
  123. AsciToHexString,
  124. } from "@/utils/util/fileData.js";
  125. import {
  126. stringToJson
  127. } from "@/utils/network/encryption";
  128. const tools = require("../../../static/etcUtil/tools.js");
  129. const bluetoothUtil = require("../../../static/etcUtil/index.js");
  130. const state = reactive({
  131. showPopup: false,
  132. flag: false,
  133. successName: "",
  134. })
  135. const flag = reactive([])
  136. const type = ref('') //1 卡 2 签 3卡签
  137. const fileDataStrings = reactive({
  138. approvedCount: 0, //核载人数
  139. cardId: "", //卡号
  140. obuId: "", //obu号
  141. obuId: "", //obu号
  142. packageNum: "", //套餐编号
  143. axleCount: 0, //轴数
  144. axleDistance: "", //轴距
  145. engineNum: "", //发动机
  146. vehicleVin: "",
  147. vehicleEngineNum: "",
  148. cardStatus: "",
  149. obuStatus: "",
  150. type: 0, //类型
  151. userType: 0, //用户类型
  152. vehiclePlate: "", //车牌
  153. vehiclePlateColor: 0, //车牌颜色
  154. vehicleDimensions: "",
  155. outlineL: 0, //外廓 长
  156. outlineW: 0, //外廓 宽
  157. outlineH: 0, //外廓 高
  158. wheelCount: "", //车轮数
  159. vehicleIdNo: "", //车牌号
  160. vehiclePlateColorStr: "",
  161. customerTel: "",
  162. customerId: "",
  163. orderId: ""
  164. });
  165. let cmdRandNum = '';
  166. const orderInfos = reactive({
  167. orderId: "",
  168. customerName: "",
  169. ownerIdtype: "",
  170. ownerIdnum: "",
  171. vehiclePlate: "",
  172. vehiclePlateColorStr: "",
  173. vehiclePlateColor: "",
  174. vehicleType: "",
  175. cardId: "",
  176. cardStatus: "",
  177. obuId: "",
  178. obuStatus: "",
  179. cardEnableTime: "",
  180. obuEnableTime: "",
  181. cardExpireTime: "",
  182. obuExpireTime: "",
  183. vehicleId: ""
  184. });
  185. let orderInfo = {};
  186. onLoad((option) => {
  187. //请求订单详情
  188. queryOrderDetail(option.id);
  189. getOrderDetails(option.id)
  190. });
  191. onShow((option) => {
  192. uni.$on('bluetoothLink', res => {
  193. console.log(res);
  194. if (res.status) {
  195. // 分别写
  196. if (flag.length == 1) {
  197. for (var i = 0; i < flag.length; i++) {
  198. if (flag[i] == 1) {
  199. state.successName = '卡'
  200. getCardRenewal()
  201. } else {
  202. state.successName = '签'
  203. getObuRenewal()
  204. }
  205. }
  206. } else {
  207. state.successName = '卡签'
  208. // 两个都要写,
  209. getCardRenewal()
  210. }
  211. }
  212. })
  213. })
  214. onUnload(() => {
  215. //移除监听
  216. uni.$off('bluetoothLink')
  217. })
  218. const choose = (data) => {
  219. if (!flag.includes(data)) {
  220. flag.push(data)
  221. console.log(flag);
  222. } else {
  223. flag.splice(flag.indexOf(data), 1)
  224. console.log(flag);
  225. }
  226. if (flag.length == 2) {
  227. type.value = '3'
  228. } else if (flag[0] == 1) {
  229. type.value = '1'
  230. } else {
  231. type.value = '2'
  232. }
  233. console.log("type.value",type.value)
  234. }
  235. //获取订单详情
  236. const queryOrderDetail = (id) => {
  237. const options = {
  238. type: 2,
  239. data: {
  240. id: id,
  241. },
  242. method: "POST",
  243. showLoading: true,
  244. };
  245. request(orderDetail, options).then((res) => {
  246. let orderInfo = JSON.parse(res.bizContent);
  247. console.log("orderInfo", orderInfo);
  248. orderInfos.orderId = orderInfo.orderId;
  249. orderInfos.customerName = orderInfo.customerName;
  250. orderInfos.ownerIdtype = orderInfo.ownerIdtype;
  251. orderInfos.ownerIdnum = desensitization(orderInfo.ownerIdnum);
  252. orderInfos.vehiclePlate = orderInfo.vehiclePlate;
  253. orderInfos.vehiclePlateColorStr = orderInfo.vehiclePlateColorStr;
  254. orderInfos.vehiclePlateColor = orderInfo.vehiclePlateColor;
  255. orderInfos.vehicleType = orderInfo.vehicleType;
  256. orderInfos.cardId = orderInfo.cardId;
  257. orderInfos.cardStatus = orderInfo.cardStatus;
  258. orderInfos.obuId = orderInfo.obuId;
  259. orderInfos.obuStatus = orderInfo.obuStatus;
  260. orderInfos.cardExpireTime = orderInfo.cardExpireTime;
  261. orderInfos.obuExpireTime = orderInfo.obuExpireTime;
  262. orderInfos.vehicleId = orderInfo.vehicleId;
  263. console.log("orderInfos.cardExpiretime", orderInfos.cardExpiretime, orderInfo.cardExpiretime)
  264. });
  265. };
  266. //卡续期 请求
  267. const getCardRenewal = () => {
  268. const options = {
  269. type: 2,
  270. data: {
  271. cardId: orderInfos.cardId,
  272. },
  273. method: "POST",
  274. showLoading: true,
  275. };
  276. request(cardRenewal, options).then((res) => {
  277. let result = stringToJson(res.bizContent);
  278. let cmdArray = result.command.split(",");
  279. console.log(cmdArray);
  280. console.log(result.cosRecordId);
  281. if (cmdArray.length > 0) {
  282. tools.showLoadingAlert("正在执行指令");
  283. bluetoothUtil.transCmd(cmdArray, "10", function(res) {
  284. tools.hideLoadingAlert();
  285. let status = res[cmdArray.length - 1].substring(res[cmdArray.length - 1].length -
  286. 4, res[cmdArray.length - 1].length);
  287. if (status == "9000") {
  288. getCommandBack(result.command, result.cosRecordId, res.toString());
  289. }
  290. })
  291. }
  292. })
  293. };
  294. /**
  295. * 写卡指令返回 请求
  296. */
  297. const getCommandBack = (command, cosRecordId, response) => {
  298. console.log('======循环写卡指令中======')
  299. tools.showLoadingAlert("加载中");
  300. let options = {
  301. type: 2, //type: 2,JSON格式提交数据(默认表单形式提交)
  302. data: {
  303. cardId: orderInfos.cardId,
  304. orderId: orderInfos.orderId,
  305. command: command,
  306. response: response,
  307. cosRecordId: cosRecordId,
  308. cosType: 2
  309. }, //请求参数
  310. method: "POST", //提交方式(默认POST)
  311. showLoading: true, //是否显示加载中(默认显示)
  312. };
  313. //调用方式
  314. request(writeCardBack, options)
  315. .then((res) => {
  316. tools.hideLoadingAlert();
  317. let result = JSON.parse(res.bizContent);
  318. if (result.orderStatus == 1 || result.orderStatus == "1") {
  319. tools.showLoadingAlert("执行指令中");
  320. bluetoothUtil.transCmd(result.command.split(","), "10", function(res) {
  321. tools.hideLoadingAlert();
  322. let response = res.toString();
  323. getCommandBack(result.command, cosRecordId, response);
  324. });
  325. } else {
  326. getCardModifyConfirm(cosRecordId)
  327. }
  328. })
  329. };
  330. //卡信息变更确认
  331. const getCardModifyConfirm = (cosRecordId) => {
  332. const options = {
  333. type: 2,
  334. data: {
  335. cardId: orderInfos.cardId,
  336. operation: 1,
  337. cosRecordId: cosRecordId
  338. },
  339. method: "POST",
  340. showLoading: true,
  341. };
  342. request(cardModifyConfirm, options).then((res) => {
  343. // 只写卡
  344. if (flag.length == 1) {
  345. sure(1)
  346. state.showPopup = true;
  347. } else {
  348. // 为2要写签
  349. getObuRenewal()
  350. }
  351. })
  352. }
  353. //去连接蓝牙
  354. const toPage = () => {
  355. console.log("flag.length", flag, type)
  356. if (flag.length == 0) {
  357. uni.showToast({
  358. title: '请至少勾选一项',
  359. icon: 'none'
  360. });
  361. } else {
  362. console.log("getCurrentPages()", getCurrentPages())
  363. navTo("/pages/bluetooth/bluetooth?routeType=5"); //去连接蓝牙
  364. }
  365. };
  366. //返回列表
  367. const toBack = () => {
  368. uni.redirectTo({
  369. url: "/pages/service/service"
  370. })
  371. }
  372. //关闭弹窗
  373. const cancel = () => {
  374. state.flag = true;
  375. state.showPopup = false;
  376. uni.navigateTo({
  377. url: `/subpackage/after-sale/deviceInfo/deviceInfo`
  378. })
  379. }
  380. //签续期 请求
  381. const getObuRenewal = () => {
  382. let cmdArray1 = [cmd.HOME_DIRECTORY, cmd.OBU_SYSTEM_FILE, cmd.RANDOM_NUMBER];
  383. tools.showLoadingAlert("正在执行指令");
  384. bluetoothUtil.transCmd(cmdArray1, "20", function(res) {
  385. tools.hideLoadingAlert();
  386. var str = res[2].substring(res[2].length - 4, res[2].length);
  387. if (str == "9000") {
  388. cmdRandNum = res[2].substring(0, res[2].length - 4);
  389. const options = {
  390. type: 2,
  391. data: {
  392. obuId: orderInfos.obuId,
  393. random: cmdRandNum
  394. },
  395. method: "POST",
  396. showLoading: true,
  397. };
  398. request(obuRenewal, options).then((res) => {
  399. let datas = stringToJson(res.bizContent);
  400. console.log("899", datas, datas.data.APDU);
  401. if (datas.data.APDU) {
  402. tools.showLoadingAlert("正在执行指令");
  403. bluetoothUtil.transCmd([datas.data.APDU], "20", function(res) {
  404. tools.hideLoadingAlert();
  405. console.log("res=====", res, res[0])
  406. let cmdArr = [cmd.HOME_DIRECTORY, cmd.OBU_DF01, cmd.OBU_EF01, cmd
  407. .RANDOM_NUMBER
  408. ];
  409. bluetoothUtil.transCmd(cmdArr, "20", function(res) {
  410. console.log("chelaing======", res)
  411. var str = res[3].substring(res[3].length - 4, res[3]
  412. .length);
  413. if (str == "9000") {
  414. cmdRandNum = res[3].substring(0, res[3].length -
  415. 4);
  416. console.log("0000000000000000000000000")
  417. getFileData((demos) => {
  418. modifyVehicle(demos);
  419. })
  420. } else {
  421. tools.alertF("RANDOM_NUMBER指令长度不符" + res[1]);
  422. }
  423. })
  424. })
  425. }
  426. })
  427. } else {
  428. tools.alertF("RANDOM_NUMBER指令长度不符" + res[1]);
  429. }
  430. })
  431. };
  432. //获取fileData
  433. const getFileData = (fun) => {
  434. searchVehicleInfoQuery(orderInfo.vehiclePlate + "_" + orderInfo.vehiclePlateColor,cmdRandNum).then((orderInfo) => {
  435. console.log("orderInfo==",orderInfo,orderInfo.fileData)
  436. fun(orderInfo.fileData);
  437. })
  438. };
  439. /**
  440. * 修改车辆信息 请求
  441. */
  442. const modifyVehicle = (ites) => {
  443. tools.showLoadingAlert("加载中");
  444. console.log('======修改车辆信息======', ites)
  445. let options = {
  446. type: 2, //type: 2,JSON格式提交数据(默认表单形式提交)
  447. data: {
  448. Status: "0",
  449. random: cmdRandNum,
  450. obuSerailNo: orderInfos.obuId,
  451. fileData: ites,
  452. orderId: orderInfos.orderId,
  453. }, //请求参数
  454. method: "POST", //提交方式(默认POST)
  455. showLoading: true, //是否显示加载中(默认显示)
  456. };
  457. //调用方式
  458. request(modifyObuVehicleInfo, options)
  459. .then((res) => {
  460. tools.hideLoadingAlert();
  461. const datas = stringToJson(res.bizContent);
  462. console.log("modifyObuVehicleInfo", modifyObuVehicleInfo, datas)
  463. tools.showLoadingAlert("正在执行指令");
  464. if (datas.data.APDU) {
  465. bluetoothUtil.transCmd([datas.data.APDU], "20", function(res) {
  466. console.log('执行指令结果', res)
  467. tools.hideLoadingAlert();
  468. if (res[0] == "9000") {
  469. //再次获取随机数
  470. let cmdArr = [cmd.HOME_DIRECTORY, cmd.RANDOM_NUMBER];
  471. bluetoothUtil.transCmd(cmdArr, '20', function(res) {
  472. var str = res[1].substring(res[1].length - 4, res[1].length);
  473. if (str == "9000") {
  474. cmdRandNum = res[1].substring(0, res[1].length - 4);
  475. getObuActivation();
  476. } else {
  477. tools.alertF("RANDOM_NUMBER指令长度不符" + res[1]);
  478. }
  479. })
  480. }
  481. });
  482. }
  483. })
  484. };
  485. /**
  486. * VFJ-OBU在线激活 请求
  487. */
  488. const getObuActivation = () => {
  489. console.log('======VFJ-OBU在线激活======')
  490. tools.showLoadingAlert("加载中");
  491. let options = {
  492. type: 2, //type: 2,JSON格式提交数据(默认表单形式提交)
  493. data: {
  494. random: cmdRandNum,
  495. obuSerailNo: orderInfos.obuId,
  496. orderId: orderInfos.orderId,
  497. }, //请求参数
  498. method: "POST", //提交方式(默认POST)
  499. showLoading: true, //是否显示加载中(默认显示)
  500. };
  501. //调用方式
  502. request(obuActivation, options)
  503. .then((res) => {
  504. tools.hideLoadingAlert();
  505. console.log("在线激活 请求");
  506. console.log(stringToJson(res.bizContent));
  507. const datas = stringToJson(res.bizContent);
  508. tools.showLoadingAlert("执行指令");
  509. console.log("在线激活 请求==========================", datas, datas.data.APDU);
  510. bluetoothUtil.transCmd([datas.data.APDU], "20", function(res) {
  511. tools.hideLoadingAlert();
  512. console.log("在线激活 请求", res);
  513. if (res[0] == "9000") {
  514. sure(2)
  515. state.showPopup = true;
  516. }
  517. });
  518. })
  519. .catch((err) => {
  520. console.log(err);
  521. });
  522. };
  523. //获取订单详情
  524. const getOrderDetails = (id) => {
  525. console.log('======获取订单信息======')
  526. const options = {
  527. type: 2,
  528. data: {
  529. id: id,
  530. },
  531. method: "POST",
  532. showLoading: true,
  533. };
  534. request(orderDetail, options).then((res) => {
  535. orderInfo = JSON.parse(res.bizContent);
  536. console.log("orderInfo", orderInfo);
  537. console.log("orderInfores", res);
  538. if (orderInfo) {
  539. fileDataStrings.userType = orderInfo.userType; //用户类型
  540. fileDataStrings.cardId = orderInfo.cardId;
  541. fileDataStrings.packageNum = orderInfo.packageNum;
  542. fileDataStrings.obuId = orderInfo.obuId;
  543. fileDataStrings.customerTel = orderInfo.customerTel;
  544. fileDataStrings.customerId = orderInfo.customerId;
  545. fileDataStrings.orderId = orderInfo.orderId;
  546. let vehicleId = orderInfo.vehiclePlate + "_" + orderInfo.vehiclePlateColor
  547. searchVehicleInfoQuery(vehicleId).then((orderInfo) => {
  548. fileDataStrings.approvedCount = parseInt(orderInfo.approvedCount); //核载人数
  549. fileDataStrings.vehicleVin = orderInfo.vin;
  550. fileDataStrings.vehicleEngineNum = orderInfo.engineNum;
  551. fileDataStrings.axleCount = parseInt(orderInfo.axleCount); //轴数
  552. fileDataStrings.engineNum = orderInfo.engineNum; //发动机
  553. fileDataStrings.type = parseInt(orderInfo.type); //类型
  554. fileDataStrings.vehiclePlate = orderInfo.vehiclePlate; //车牌
  555. fileDataStrings.vehiclePlateColor = orderInfo.vehiclePlateColor; //车牌颜色
  556. console.log("车辆信息", orderInfo)
  557. fileDataStrings.vehicleDimensions = orderInfo.vehicleDimensions;
  558. fileDataStrings.vehicleIdNo = orderInfo.vehicleEngineNum; //车编号
  559. fileDataStrings.vehiclePlateColorStr = getVehiclePlateColor(orderInfo
  560. .vehiclePlateColor);
  561. console.log("fileDataStrings", fileDataStrings);
  562. })
  563. }
  564. });
  565. };
  566. const sure = (val) => {
  567. var data = {}
  568. if (val == 1) {
  569. data = {
  570. type: "1",
  571. cardId: fileDataStrings.cardId,
  572. }
  573. } else {
  574. data = {
  575. type: "2",
  576. obuId: fileDataStrings.obuId,
  577. }
  578. }
  579. const options = {
  580. type: 2,
  581. data: data,
  582. method: "POST",
  583. showLoading: true,
  584. };
  585. request(renewalTimeApi, options).then((res) => {
  586. })
  587. }
  588. </script>
  589. <style>
  590. page {
  591. width: 100%;
  592. height: 100%;
  593. background-color: #fff;
  594. }
  595. </style>
  596. <style lang="scss" scoped>
  597. .mask {
  598. background: rgba(0, 0, 0, .35);
  599. position: fixed;
  600. left: 0;
  601. top: 0;
  602. bottom: 0;
  603. right: 0;
  604. }
  605. .main {
  606. width: 560rpx;
  607. padding: 25rpx 20rpx 55rpx;
  608. text-align: center;
  609. background: #fff;
  610. position: absolute;
  611. left: 50%;
  612. top: 50%;
  613. transform: translate(-50%, -50%);
  614. border-radius: 20rpx;
  615. .top {
  616. text-align: right;
  617. .icon-close {
  618. width: 48rpx;
  619. height: 48rpx;
  620. }
  621. }
  622. .icon-success {
  623. width: 500rpx;
  624. height: 320rpx;
  625. margin-top: 22rpx;
  626. }
  627. .title {
  628. color: #333333;
  629. font-size: 40rpx;
  630. font-weight: 600;
  631. text-align: center;
  632. margin-top: 55rpx;
  633. }
  634. }
  635. .selectCar-box {
  636. // width: 100%;
  637. // height: 100%;
  638. padding: 30rpx;
  639. .title {
  640. font-size: 30rpx;
  641. font-family: Microsoft YaHei UI;
  642. font-weight: 400;
  643. color: #333333;
  644. margin-bottom: 30rpx;
  645. }
  646. .details {
  647. .title {
  648. font-size: 30rpx;
  649. font-family: Microsoft YaHei UI;
  650. font-weight: 400;
  651. color: #333333;
  652. margin-bottom: 30rpx;
  653. }
  654. .details-item {
  655. display: flex;
  656. font-size: 26rpx;
  657. font-family: Noto Sans S Chinese;
  658. font-weight: 400;
  659. color: #999999;
  660. margin-bottom: 30rpx;
  661. text {
  662. font-size: 26rpx;
  663. font-family: Noto Sans S Chinese;
  664. font-weight: 400;
  665. color: #333333;
  666. }
  667. }
  668. }
  669. .card {
  670. height: 150rpx;
  671. background: #ffffff;
  672. box-shadow: 0rpx 4rpx 13rpx 3rpx rgba(223, 223, 223, 0.8);
  673. border-radius: 20rpx;
  674. padding: 30rpx;
  675. display: flex;
  676. justify-content: space-between;
  677. align-items: center;
  678. margin-bottom: 60rpx;
  679. .card-left {
  680. display: flex;
  681. align-items: center;
  682. image {
  683. width: 100rpx;
  684. height: 90rpx;
  685. }
  686. .card-center {
  687. margin-left: 30rpx;
  688. .card-center-head {
  689. font-size: 32rpx;
  690. font-family: Noto Sans S Chinese;
  691. font-weight: 400;
  692. color: #333333;
  693. }
  694. .tips {
  695. font-size: 26rpx;
  696. font-family: Noto Sans S Chinese;
  697. font-weight: 400;
  698. color: #666666;
  699. .tips-card {
  700. width: 70rpx;
  701. height: 40rpx;
  702. background: #d3f2ef;
  703. border-radius: 6rpx;
  704. font-size: 20rpx;
  705. font-family: Noto Sans S Chinese;
  706. font-weight: 400;
  707. color: #0a8f8a;
  708. padding: 5rpx 10rpx;
  709. margin-left: 20rpx;
  710. }
  711. }
  712. }
  713. }
  714. .choose-item1 {
  715. margin-right: 20rpx;
  716. /* width: 50rpx; */
  717. // height: 50rpx;
  718. /* border: 1rpx solid #00B38B; */
  719. border-radius: 50%;
  720. // display: flex;
  721. // justify-content: center;
  722. // align-items: center;
  723. font-size: 25rpx;
  724. // align-self: end;
  725. .active {
  726. width: 38rpx;
  727. height: 38rpx;
  728. background: #00b38b;
  729. border-radius: 50%;
  730. }
  731. }
  732. .choose-item {
  733. margin-right: 20rpx;
  734. width: 50rpx;
  735. height: 50rpx;
  736. border: 1rpx solid #00B38B;
  737. border-radius: 50%;
  738. display: flex;
  739. justify-content: center;
  740. align-items: center;
  741. .active {
  742. width: 38rpx;
  743. height: 38rpx;
  744. background: #00B38B;
  745. border-radius: 50%;
  746. }
  747. }
  748. }
  749. .remark {
  750. font-size: 26rpx;
  751. font-family: Microsoft YaHei UI;
  752. font-weight: 400;
  753. color: #666666;
  754. text-indent: 30rpx;
  755. margin-bottom: 30rpx;
  756. }
  757. .submit {
  758. margin-top: 100rpx;
  759. width: 670rpx;
  760. height: 80rpx;
  761. background: linear-gradient(-90deg, #43a1e0 0%, #13e7c1 100%);
  762. border-radius: 40rpx;
  763. font-size: 32rpx;
  764. font-family: Noto Sans S Chinese;
  765. font-weight: 400;
  766. color: #ffffff;
  767. line-height: 80rpx;
  768. }
  769. }
  770. </style>