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

activation-once-again.vue 20KB

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