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

activation-once-again.vue 21KB

7ヶ月前
7ヶ月前
7ヶ月前
7ヶ月前
1年前
11ヶ月前
10ヶ月前
7ヶ月前
7ヶ月前
5ヶ月前
7ヶ月前
7ヶ月前
7ヶ月前
7ヶ月前
1年前
1年前
7ヶ月前
7ヶ月前
1年前
10ヶ月前
7ヶ月前
1年前
7ヶ月前
1年前
7ヶ月前
1年前
7ヶ月前
7ヶ月前
7ヶ月前
7ヶ月前
7ヶ月前
7ヶ月前
11ヶ月前
7ヶ月前
1年前
1年前
7ヶ月前
7ヶ月前
5ヶ月前
5ヶ月前
7ヶ月前
5ヶ月前
5ヶ月前
5ヶ月前
7ヶ月前
10ヶ月前
7ヶ月前
7ヶ月前
7ヶ月前
7ヶ月前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846
  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.name }}</text>
  8. </view>
  9. <view class="details-item">
  10. <view> 用户证件类型: </view>
  11. <text>{{ getCredentialType(orderInfos.customerIdtype)}}</text>
  12. </view>
  13. <view class="details-item">
  14. <view> 用户证件号: </view>
  15. <text>{{ orderInfos.idNum }}</text>
  16. </view>
  17. <view class="details-item">
  18. <view> 订单车牌号: </view>
  19. <text style="color: #00b38b">{{ orderInfos.vehiclePlate }}</text>
  20. </view>
  21. <view class="details-item">
  22. <view> 车牌颜色: </view>
  23. <text style="color: #00b38b">{{getVehiclePlateColor(orderInfos.vehiclePlateColor)}}</text>
  24. </view>
  25. <view class="details-item">
  26. <view> 收费车型: </view>
  27. <text>{{ orderInfos.vehicleType }}</text>
  28. </view>
  29. <view class="details-item">
  30. <view> 重新激活次数: </view>
  31. <text>{{ state.activationNum }}次</text>
  32. <text class="record" style="color:#00b38b" @click="goActivationRecord">OBU重新激活记录</text>
  33. </view>
  34. </view>
  35. <view class="title"> 卡信息 </view>
  36. <view class="card">
  37. <view class="card-left">
  38. <image :src="`${$imgUrl}card2.png`" mode=""></image>
  39. <view class="card-center">
  40. <view class="card-center-head"> {{orderInfos.cardId}} </view>
  41. <view class="tips">
  42. <!-- <text>储蓄卡</text> -->
  43. <text class="tips-card">{{getCodeName('CARD_STATE_TYPE',orderInfos.cardStatus)}}</text>
  44. </view>
  45. </view>
  46. </view>
  47. </view>
  48. <view class="title"> OBU设备信息 </view>
  49. <view class="card">
  50. <view class="card-left">
  51. <image :src="`${$imgUrl}card1.png`" mode=""></image>
  52. <view class="card-center">
  53. <view class="card-center-head"> {{orderInfos.obuId}} </view>
  54. <view class="tips">
  55. <text class="tips-card">{{getCodeName('OBU_STATE_TYPE',orderInfos.obuStatus)}}</text>
  56. </view>
  57. </view>
  58. </view>
  59. </view>
  60. <view class="picture-wrapper" @click="takePhotoMode('3')">
  61. <view class="bg">
  62. <view class="">
  63. <view class="name"> 行驶证主页 </view>
  64. <view class="value"> 上传行驶证的主页 </view>
  65. <view class="tip">
  66. <view class="tip-value"> 拍摄规范 </view>
  67. </view>
  68. </view>
  69. <image v-if="!state.form.vehPosImgUrl" class="icon" :src="`${$imgUrl}applyCard/car-zhu.png`">
  70. </image>
  71. <image v-else class="icon" :src="strReplace(state.form.vehPosImgUrl)"></image>
  72. </view>
  73. </view>
  74. <view class="picture-wrapper" @click="takePhotoMode('4')">
  75. <view class="bg">
  76. <view class="">
  77. <view class="name"> 行驶证副页 </view>
  78. <view class="value"> 上传行驶证的副页 </view>
  79. <view class="tip">
  80. <view class="tip-value"> 拍摄规范 </view>
  81. </view>
  82. </view>
  83. <image v-if="!state.form.vehNegImgUrl" class="icon" :src="`${$imgUrl}applyCard/car-fu.png`">
  84. </image>
  85. <image v-else class="icon" :src="strReplace(state.form.vehNegImgUrl)"></image>
  86. </view>
  87. </view>
  88. <button class="submit" @click="toPage">再次激活</button>
  89. <view class="mask" v-show="state.showPopup">
  90. <view class="main">
  91. <view class="top">
  92. <image class="icon-close" :src="`${$imgUrl}common/icon-close.png`" @click="cancel"></image>
  93. </view>
  94. <image class="icon-success" :src="`${$imgUrl}bluetooth/device-active-success.png`"></image>
  95. <view class="title">设备激活成功!</view>
  96. </view>
  97. </view>
  98. </view>
  99. <view class="choice-takePhoto-wrap" v-if="state.isTakePhotoModeShow" @click="cancle">
  100. <view class="choice-takePhoto">
  101. <view @click.stop="takePhoto(state.choiceIndex)" style="border-radius: 20rpx 20rpx 0 0;">拍照</view>
  102. <view @click.stop="xiangce(state.choiceIndex)">从手机相册选择</view>
  103. <view @click.stop="cancle">取消</view>
  104. </view>
  105. </view>
  106. <viewfinder v-if="state.phoneType" :phoneType="state.phoneType" :images="state.images"
  107. :showStartPhoto="state.showImg" @confirmReturn="confirmReturn" @camera="camera"></viewfinder>
  108. </template>
  109. <script lang="ts" setup>
  110. import viewfinder from "@/components/viewfinder.vue"
  111. import {
  112. reactive,
  113. ref
  114. } from "vue";
  115. import {
  116. msg,
  117. navTo,
  118. strReplace,
  119. uploadFile,
  120. desensitization,
  121. chooseImageCompress
  122. } from "@/utils/utils";
  123. import {
  124. onLoad
  125. } from '@dcloudio/uni-app'
  126. import {
  127. request,requestNew
  128. } from "@/utils/network/request.js";
  129. import {
  130. stringToJson
  131. } from "@/utils/network/encryption.js";
  132. import activeSuccess from "./components/popup-device-active-success";
  133. import * as IFCODE from "@/utils/network/api.js";
  134. import {
  135. channelId
  136. } from "@/utils/network/difference";
  137. const cmd = require("../../../static/etcUtil/cmdConfig.js");
  138. const tools = require("../../../static/etcUtil/tools.js");
  139. const bluetoothUtil = require("../../../static/etcUtil/index.js");
  140. import {
  141. getCodeName
  142. } from "@/datas/queryKey.js";
  143. import { agentId } from "@/utils/network/difference";
  144. import { secondActiveInstallApply,issueConfirm,commGetDetail,reactivateQuery,vehicleLicenseOcr,reactivateConfirm,vfjObuActive,vfjCfmActive} from "@/utils/network/api";
  145. import {
  146. getCredentialType
  147. } from "@/subpackage/after-sale/js/credentialType.js";
  148. import {
  149. getVehiclePlateColor
  150. } from "@/datas/vehiclePlateColor";
  151. const state = reactive({
  152. phoneType: 0, // 1 身份证正面 2 身份证反面 3行驶证正面 4行驶证反面
  153. choiceIndex: 1, // 1 身份证正面 2 身份证反面
  154. isTakePhotoModeShow: false, //选择拍照方式是否出来
  155. changeColor: false,
  156. showImg: true,
  157. images: '',
  158. showPopup: false,
  159. form: {
  160. vehPosImgUrl: "",
  161. vehNegImgUrl: "",
  162. vehicleIdNum: "",
  163. vehicleIdNumB: ''
  164. },
  165. activationNum: "",//激活次数
  166. vehicleId:""
  167. })
  168. //订单
  169. const orderInfos = reactive({
  170. orderId: "",
  171. name: "",
  172. ownerIdtype: "",
  173. ownerIdnum: "",
  174. vehiclePlate: "",
  175. vehiclePlateColorStr: "",
  176. vehiclePlateColor: "",
  177. vehicleType: "",
  178. cardId: "",
  179. cardStatus: "",
  180. obuId: "",
  181. obuStatus: "",
  182. outlineL: 0,
  183. outlineW: 0,
  184. outlineH: 0,
  185. type: 0,
  186. axleCount: 0,
  187. approvedCount: 0,
  188. vehicleVin: "",
  189. vehicleEngineNum: "",
  190. customerIdtype:"",
  191. idNum:""
  192. });
  193. //OBU
  194. const obu = reactive({
  195. obuId: "",
  196. startTime: "",
  197. endTime: "",
  198. version: "",
  199. approvedCount: "",
  200. axleCount: "",
  201. axleDistance: "",
  202. engineNum: "",
  203. type: "",
  204. userType: "",
  205. contractNo: "",
  206. vehiclePlate: "",
  207. vehiclePlateColor: "",
  208. vin: "",
  209. wheelCount: "",
  210. isJH: ""
  211. });
  212. let ids = '';
  213. onLoad((option) => {
  214. ids = option.id;
  215. state.vehicleId = option.vehicleId;
  216. console.log("option",option.vehicleId)
  217. if (option.status) {
  218. state.form.vehPosImgUrl=option.vehPosImgUrl
  219. state.form.vehNegImgUrl=option.vehNegImgUrl
  220. queryOrderDetail(option.vehicleId, () => { getObuId() })
  221. } else {
  222. queryOrderDetail(option.vehicleId, () => { })
  223. }
  224. });
  225. const cancel = () => {
  226. state.showPopup = false;
  227. };
  228. const toPage = () => {
  229. if (!state.form.vehPosImgUrl) {
  230. msg("请上传行驶证主页")
  231. return;
  232. }
  233. if (!state.form.vehNegImgUrl) {
  234. msg("请上传行驶证副页")
  235. return;
  236. }
  237. console.log("state.form.vehicleIdNum", state.form.vehicleIdNum, state.form.vehicleIdNumB, orderInfos.vehiclePlate)
  238. activationRecordQuery().then((val) => {
  239. console.log("激活次数", val)
  240. if (val.isLimit) {
  241. navTo(`/pages/bluetooth/bluetooth?routeType=5&vehicleId=${state.vehicleId}&difference=1&vehPosImgUrl=${state.form.vehPosImgUrl}&vehNegImgUrl=${state.form.vehNegImgUrl}`);
  242. } else {
  243. msg("一年内到达激活次数上限5次")
  244. }
  245. });
  246. };
  247. //获取订单详情
  248. const queryOrderDetail = (vehicleId : string, caback) => {
  249. const options = {
  250. type: 2,
  251. data: {
  252. vehicleId
  253. },
  254. method: "POST",
  255. showLoading: true,
  256. };
  257. requestNew(commGetDetail, options).then((res) => {
  258. let orderInfo = res;
  259. console.log(orderInfo);
  260. orderInfos.orderId = orderInfo.orderId;
  261. orderInfos.name = orderInfo.name;
  262. orderInfos.ownerIdtype = orderInfo.ownerIdtype;
  263. orderInfos.ownerIdnum = desensitization(orderInfo.ownerIdnum);
  264. orderInfos.vehiclePlate = orderInfo.vehiclePlate;
  265. orderInfos.vehiclePlateColorStr = orderInfo.vehiclePlateColorStr;
  266. orderInfos.vehiclePlateColor = orderInfo.vehiclePlateColor;
  267. orderInfos.vehicleType = orderInfo.vehicleType;
  268. orderInfos.cardId = orderInfo.cardId;
  269. orderInfos.cardStatus = orderInfo.cardStatus;
  270. orderInfos.obuId = orderInfo.obuId;
  271. orderInfos.obuStatus = orderInfo.obuStatus;
  272. orderInfos.type = orderInfo.type;
  273. orderInfos.axleCount = orderInfo.vehicleAxleCount;
  274. orderInfos.approvedCount = orderInfo.vehicleApprovedCount;
  275. orderInfos.vehicleVin = orderInfo.vehicleVin;
  276. orderInfos.vehicleEngineNum = orderInfo.vehicleEngineNum;
  277. orderInfos.customerIdtype = orderInfo.customerIdtype;
  278. orderInfos.idNum = orderInfo.idNum;
  279. caback();
  280. activationRecordQuery().then((val) => {
  281. console.log("jihuo", val)
  282. state.activationNum = val.num
  283. });
  284. });
  285. };
  286. /**
  287. * 获取OBU号 读OBU
  288. */
  289. const getObuId = () => {
  290. console.log('======获取OBU号======')
  291. let cmdArray = [cmd.HOME_DIRECTORY, cmd.OBU_SYSTEM_FILE, cmd.RANDOM_NUMBER];
  292. tools.showLoadingAlert("正在执行指令");
  293. bluetoothUtil.transCmd(cmdArray, "20", function (res) {
  294. tools.hideLoadingAlert();
  295. var status = res[1].substring(res[1].length - 4, res[1].length);
  296. console.log('获取OBU号执行结果' + status)
  297. //第一次获取随机数
  298. if (status == "9000") {
  299. obu.obuId = res[1].substring(20, 36);
  300. obu.vin = res[1].substring(18, 20);
  301. obu.version = res[1].substring(18, 19) >= 4 ? "4x" : "2x";
  302. getInstallApply()
  303. }
  304. });
  305. };
  306. /**
  307. * BDS-安装申请 请求
  308. */
  309. const getInstallApply = () => {
  310. console.log('======安装申请======')
  311. tools.showLoadingAlert("加载中");
  312. let options = {
  313. type: 2, //type: 2,JSON格式提交数据(默认表单形式提交)
  314. data: {
  315. obuId: obu.obuId,
  316. vehicleId: orderInfos.vehiclePlate + "_" + orderInfos.vehiclePlateColor,
  317. orderId: orderInfos.orderId,
  318. agentId: agentId,
  319. channelId: channelId,
  320. channelType: "1",
  321. staffId: "opId",
  322. terminalId: "999999999",
  323. }, //请求参数
  324. method: "POST", //提交方式(默认POST)
  325. showLoading: true, //是否显示加载中(默认显示)
  326. };
  327. //调用方式
  328. requestNew(secondActiveInstallApply, options)
  329. .then((res) => {
  330. orderInfos.orderId=res.order.orderNo
  331. console.log("安装申请",res.order.orderNo)
  332. tools.hideLoadingAlert();
  333. //再次获取随机数
  334. let cmdArr = [cmd.HOME_DIRECTORY, cmd.RANDOM_NUMBER];
  335. bluetoothUtil.transCmd(cmdArr, '20', function (res) {
  336. var str = res[1].substring(res[1].length - 4, res[1].length);
  337. if (str == "9000") {
  338. let cmdRandNum = res[1].substring(0, res[1].length - 4);
  339. getObuActivation(cmdRandNum);
  340. } else {
  341. tools.alertF("RANDOM_NUMBER指令长度不符" + res[1]);
  342. }
  343. })
  344. })
  345. };
  346. /**
  347. * VFJ-OBU在线激活 请求
  348. */
  349. const getObuActivation = (cmdRandNum : string) => {
  350. tools.showLoadingAlert("加载中");
  351. let options = {
  352. type: 2, //type: 2,JSON格式提交数据(默认表单形式提交)
  353. data: {
  354. random: cmdRandNum,
  355. contractSN: obu.obuId,
  356. flag:"0001"
  357. }, //请求参数
  358. method: "POST", //提交方式(默认POST)
  359. showLoading: true, //是否显示加载中(默认显示)
  360. };
  361. //调用方式
  362. requestNew(vfjObuActive, options)
  363. .then((res) => {
  364. tools.hideLoadingAlert();
  365. console.log("在线激活 请求");
  366. console.log(res);
  367. const datas = res;
  368. tools.showLoadingAlert("执行指令");
  369. bluetoothUtil.transCmd([datas.apdu], "20", function (res) {
  370. tools.hideLoadingAlert();
  371. console.log(res);
  372. if (res[0] == "9000") {
  373. console.log("在线激活执行指令88888 请求", res);
  374. cfmActiveRequest(datas.orderNo)
  375. }
  376. });
  377. })
  378. .catch((err) => {
  379. console.log(err);
  380. });
  381. };
  382. // 激活确认
  383. const cfmActiveRequest = (orderNo) => {
  384. tools.showLoadingAlert("加载中");
  385. let options = {
  386. type: 2, //type: 2,JSON格式提交数据(默认表单形式提交)
  387. data: {
  388. orderNo,
  389. result:"9000",
  390. code:"00"
  391. }, //请求参数
  392. method: "POST", //提交方式(默认POST)
  393. showLoading: true, //是否显示加载中(默认显示)
  394. };
  395. //调用方式
  396. requestNew(vfjCfmActive, options)
  397. .then((res) => {
  398. tools.hideLoadingAlert();
  399. console.log("在线激活 确认");
  400. console.log(res);
  401. getObuInstall(0, ""); //status 0 - 安装成功 || 1 - 安装失败
  402. })
  403. .catch((err) => {
  404. console.log(err);
  405. });
  406. };
  407. /**
  408. * BDS-安装确认 请求
  409. */
  410. const getObuInstall = (status : number, reason : string) => {
  411. console.log('======OBU安装确认======')
  412. tools.showLoadingAlert("加载中");
  413. let options = {
  414. type: 2, //type: 2,JSON格式提交数据(默认表单形式提交)
  415. data: {
  416. installStatus: status,
  417. failReason: reason,
  418. installType: "1",
  419. installChannelId: channelId,
  420. obuId: obu.obuId,
  421. orderId: orderInfos.orderId
  422. }, //请求参数
  423. method: "POST", //提交方式(默认POST)
  424. showLoading: true, //是否显示加载中(默认显示)
  425. };
  426. //调用方式
  427. requestNew(issueConfirm, options)
  428. .then(() => {
  429. tools.hideLoadingAlert();
  430. state.showPopup = true;
  431. submitVehicleQuery()
  432. });
  433. };
  434. const xiangce = (val) => {
  435. console.log("val", val)
  436. if (state.choiceIndex == 3) {
  437. var imageType = 1;
  438. } else {
  439. var imageType = 2;
  440. }
  441. state.changeColor = true;
  442. chooseImageCompress((res)=>{
  443. state.images = res.tempFilePath?res.tempFilePath:res.tempFilePaths[0]
  444. state.showImg = false
  445. state.phoneType = state.choiceIndex
  446. state.isTakePhotoModeShow = false
  447. })
  448. }
  449. const takePhoto = (val) => {
  450. console.log("拍照", val)
  451. state.phoneType = val;
  452. state.showImg = true;
  453. }
  454. const confirmReturn = (val) => {
  455. if (state.choiceIndex == 3) {
  456. var imageType = 1;
  457. } else {
  458. var imageType = 2;
  459. }
  460. state.changeColor = true;
  461. state.phoneType = 0
  462. state.isTakePhotoModeShow = false
  463. uploadFile(val.tempImagePath, imageType, IFCODE.vehicleLicenseOcr).then((data) => {
  464. console.log('输出内容=====================', state.choiceIndex)
  465. if (state.choiceIndex === "3") {
  466. if (data.plate_a.length > 8) {
  467. state.form.vehicleIdNum = data.plate_a.substring(0, 8);
  468. } else {
  469. state.form.vehicleIdNum = data.plate_a;
  470. }
  471. state.form.vehPosImgUrl = data.imageUrl;
  472. } else {
  473. state.form.vehNegImgUrl = data.imageUrl;
  474. state.form.vehicleIdNumB = data.plate_a;
  475. console.log('=====================', state.form.vehNegImgUrl, state)
  476. }
  477. state.isTakePhotoModeShow = false
  478. })
  479. console.log("图片地址val", val.tempImagePath)
  480. }
  481. const takePhotoMode = (index) => {
  482. console.log("index", index)
  483. state.isTakePhotoModeShow = true
  484. state.choiceIndex = index
  485. }
  486. const cancle = () => {
  487. state.isTakePhotoModeShow = false
  488. }
  489. const camera = () => {
  490. state.phoneType = 0
  491. }
  492. // 查询重新激活记录
  493. const activationRecordQuery = () => {
  494. const options = {
  495. type: 2,
  496. data: {
  497. cardId: orderInfos.cardId,
  498. obuId: orderInfos.obuId,
  499. },
  500. method: "POST",
  501. showLoading: true,
  502. };
  503. return new Promise(async (resolve, reject) => {
  504. const res = await requestNew(reactivateQuery, options);
  505. const data = res;
  506. resolve(data);
  507. }).catch((error) => {
  508. reject(error);
  509. });
  510. }
  511. // 提交车辆信息
  512. const submitVehicleQuery = () => {
  513. const options = {
  514. type: 2,
  515. data: {
  516. cardId: orderInfos.cardId,
  517. obuId: orderInfos.obuId,
  518. vehPosImgUrl: state.form.vehPosImgUrl,
  519. vehNegImgUrl: state.form.vehNegImgUrl,
  520. vehiclePlate: orderInfos.vehiclePlate,
  521. orderId: orderInfos.orderId
  522. },
  523. method: "POST",
  524. };
  525. console.log("提交车辆信息成功", options)
  526. requestNew(reactivateConfirm, options).then(() => {
  527. console.log("提交车辆信息成功")
  528. activationRecordQuery().then((val) => {
  529. console.log("jihuo", val)
  530. state.activationNum = val.num
  531. });
  532. });
  533. }
  534. const goActivationRecord = () => {
  535. uni.navigateTo({
  536. url: `/subpackage/after-sale/activation-once-again/activation-once-again-record?obuId=${orderInfos.obuId}&&cardId=${orderInfos.cardId}`
  537. })
  538. }
  539. </script>
  540. <style>
  541. page {
  542. width: 100%;
  543. height: 100%;
  544. background-color: #fff;
  545. }
  546. </style>
  547. <style lang="scss" scoped>
  548. .mask {
  549. background: rgba(0, 0, 0, .35);
  550. position: fixed;
  551. left: 0;
  552. top: 0;
  553. bottom: 0;
  554. right: 0;
  555. }
  556. .main {
  557. width: 560rpx;
  558. padding: 25rpx 20rpx 55rpx;
  559. text-align: center;
  560. background: #fff;
  561. position: absolute;
  562. left: 50%;
  563. top: 50%;
  564. transform: translate(-50%, -50%);
  565. border-radius: 20rpx;
  566. .top {
  567. text-align: right;
  568. .icon-close {
  569. width: 48rpx;
  570. height: 48rpx;
  571. }
  572. }
  573. .icon-success {
  574. width: 500rpx;
  575. height: 320rpx;
  576. margin-top: 22rpx;
  577. }
  578. .title {
  579. color: #333333;
  580. font-size: 40rpx;
  581. font-weight: 600;
  582. text-align: center;
  583. margin-top: 55rpx;
  584. }
  585. }
  586. .selectCar-box {
  587. // width: 100%;
  588. // height: 100%;
  589. padding: 30rpx;
  590. .title {
  591. font-size: 30rpx;
  592. font-family: Microsoft YaHei UI;
  593. font-weight: 400;
  594. color: #333333;
  595. margin-bottom: 30rpx;
  596. }
  597. .details {
  598. .title {
  599. font-size: 30rpx;
  600. font-family: Microsoft YaHei UI;
  601. font-weight: 400;
  602. color: #333333;
  603. margin-bottom: 30rpx;
  604. }
  605. .details-item {
  606. display: flex;
  607. font-size: 26rpx;
  608. font-family: Noto Sans S Chinese;
  609. font-weight: 400;
  610. color: #999999;
  611. margin-bottom: 30rpx;
  612. text {
  613. font-size: 26rpx;
  614. font-family: Noto Sans S Chinese;
  615. font-weight: 400;
  616. color: #333333;
  617. }
  618. }
  619. }
  620. .card {
  621. height: 150rpx;
  622. background: #ffffff;
  623. box-shadow: 0rpx 4rpx 13rpx 3rpx rgba(223, 223, 223, 0.8);
  624. border-radius: 20rpx;
  625. padding: 30rpx;
  626. display: flex;
  627. justify-content: space-between;
  628. align-items: center;
  629. margin-bottom: 60rpx;
  630. .card-left {
  631. display: flex;
  632. align-items: center;
  633. image {
  634. width: 100rpx;
  635. height: 90rpx;
  636. }
  637. .card-center {
  638. margin-left: 30rpx;
  639. .card-center-head {
  640. font-size: 32rpx;
  641. font-family: Noto Sans S Chinese;
  642. font-weight: 400;
  643. color: #333333;
  644. }
  645. .tips {
  646. font-size: 26rpx;
  647. font-family: Noto Sans S Chinese;
  648. font-weight: 400;
  649. color: #666666;
  650. .tips-card {
  651. width: 70rpx;
  652. height: 40rpx;
  653. background: #d3f2ef;
  654. border-radius: 6rpx;
  655. font-size: 20rpx;
  656. font-family: Noto Sans S Chinese;
  657. font-weight: 400;
  658. color: #0a8f8a;
  659. padding: 5rpx 10rpx;
  660. margin-left: 20rpx;
  661. }
  662. }
  663. }
  664. }
  665. .choose-item {
  666. margin-right: 20rpx;
  667. border-radius: 50%;
  668. font-size: 25rpx;
  669. .active {
  670. width: 38rpx;
  671. height: 38rpx;
  672. background: #00b38b;
  673. border-radius: 50%;
  674. }
  675. }
  676. }
  677. .remark {
  678. font-size: 26rpx;
  679. font-family: Microsoft YaHei UI;
  680. font-weight: 400;
  681. color: #666666;
  682. text-indent: 30rpx;
  683. margin-bottom: 30rpx;
  684. }
  685. .submit {
  686. margin-top: 100rpx;
  687. margin-bottom: 30rpx;
  688. width: 670rpx;
  689. height: 80rpx;
  690. background: linear-gradient(-90deg, #43a1e0 0%, #13e7c1 100%);
  691. border-radius: 40rpx;
  692. font-size: 32rpx;
  693. font-family: Noto Sans S Chinese;
  694. font-weight: 400;
  695. color: #ffffff;
  696. line-height: 80rpx;
  697. }
  698. }
  699. .picture-wrapper {
  700. margin-top: 40rpx;
  701. .bg {
  702. background: #ffffff;
  703. box-shadow: 0rpx 4rpx 13rpx 3rpx rgba(223, 223, 223, 0.8);
  704. border-radius: 20rpx;
  705. padding: 40rpx;
  706. display: flex;
  707. // align-items: center;
  708. justify-content: space-between;
  709. .name {
  710. font-size: 34rpx;
  711. font-family: Microsoft YaHei;
  712. font-weight: 400;
  713. color: #000000;
  714. line-height: 34rpx;
  715. }
  716. .value {
  717. margin-top: 20rpx;
  718. font-size: 24rpx;
  719. font-family: Microsoft YaHei;
  720. font-weight: 400;
  721. color: #999999;
  722. line-height: 24rpx;
  723. }
  724. .tip {
  725. margin-top: 20rpx;
  726. text-align: center;
  727. width: 110rpx;
  728. height: 40rpx;
  729. background: rgba(33, 190, 177, 0.2);
  730. border-radius: 6rpx;
  731. .tip-value {
  732. font-size: 20rpx;
  733. font-family: Microsoft YaHei;
  734. font-weight: 400;
  735. color: #0a8f8a;
  736. line-height: 40rpx;
  737. opacity: 1;
  738. }
  739. }
  740. }
  741. .icon {
  742. width: 294rpx;
  743. height: 188rpx;
  744. }
  745. }
  746. .choice-takePhoto {
  747. position: absolute;
  748. bottom: 0;
  749. background-color: white;
  750. width: 100%;
  751. border-radius: 20rpx 20rpx 0 0;
  752. }
  753. .choice-takePhoto>view:first-child {
  754. text-align: center;
  755. height: 80rpx;
  756. line-height: 80rpx;
  757. border-bottom: 1rpx solid rgba(127, 127, 127, 0.3);
  758. background-color: white;
  759. }
  760. .choice-takePhoto>view:last-child {
  761. text-align: center;
  762. height: 80rpx;
  763. line-height: 80rpx;
  764. border-top: 6rpx solid rgba(127, 127, 127, 0.1);
  765. background-color: white;
  766. }
  767. .choice-takePhoto>view {
  768. text-align: center;
  769. height: 80rpx;
  770. line-height: 80rpx;
  771. background-color: white;
  772. }
  773. .choice-takePhoto-wrap {
  774. width: 100%;
  775. height: 100vh;
  776. background-color: rgba(127, 127, 127, 0.2);
  777. position: fixed;
  778. left: 0;
  779. top: 0;
  780. z-index: 11111;
  781. }
  782. .record {
  783. height: 40rpx;
  784. background: #d3f2ef;
  785. border-radius: 6rpx;
  786. font-size: 20rpx;
  787. font-family: Noto Sans S Chinese;
  788. font-weight: 400;
  789. color: #0a8f8a;
  790. padding: 5rpx 10rpx;
  791. margin-left: 60rpx;
  792. }
  793. </style>