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

activation-once-again.vue 21KB

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