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

activation-once-again.vue 20KB

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