parkingFee.vue 41 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619
  1. <template>
  2. <scroll-view
  3. scroll-y="true"
  4. :class="{ 'scroll-Y': true, 'color-scroll-Y': custTypeId !== 0 }"
  5. scroll-bottom="1000"
  6. >
  7. <wx-points-commit ref="wxPointsCommit"></wx-points-commit>
  8. <!-- <authorize ref="authorize"></authorize>-->
  9. <my-protocol-modal
  10. ref="szProtocolModal"
  11. title="会员协议政策更新提示"
  12. ></my-protocol-modal>
  13. <view class="wrap">
  14. <view class="parkingFee">
  15. <view
  16. class="parkingFee-top"
  17. :style="{
  18. 'background-image':
  19. 'url(./static/images/parking-bgi.png);background-attachment: fixed;',
  20. }"
  21. >
  22. <view
  23. :class="{
  24. top_content: true,
  25. blue_top_content: custTypeId === 1,
  26. green_top_content: custTypeId === 2,
  27. }"
  28. :style="{
  29. 'background-image':
  30. custTypeId === 1 ? `url(${picUrl}${blueHeadBg});` : '',
  31. }"
  32. >
  33. <view class="title_box">
  34. <text class="btn">缴费说明</text>
  35. </view>
  36. <view class="info" :class="!init_ch ? 'info_show' : ''"
  37. ><text>{{ parkInfoEntity.payinstruction }}</text></view
  38. >
  39. </view>
  40. <view
  41. class="top_down"
  42. @click="top_display"
  43. v-if="!init_ch && parkInfoEntity.payinstruction.length > 60"
  44. >︾</view
  45. >
  46. <view class="top_down" @click="top_display" v-else>︽</view>
  47. <view
  48. :class="{
  49. top_menu: true,
  50. blue_top_menu: custTypeId === 1,
  51. green_top_menu: custTypeId === 2,
  52. }"
  53. v-if="custTypeId >= 0"
  54. >
  55. <view class="menu_item" @click="doRouter">
  56. <image
  57. :src="`./static/images/icon2${colorAry[custTypeId]}.png`"
  58. />
  59. <text>缴费记录</text>
  60. </view>
  61. <view class="menu_item" @click="doRouter3">
  62. <image
  63. :src="`./static/images/icon3${colorAry[custTypeId]}.png`"
  64. />
  65. <text>停车券兑换</text>
  66. </view>
  67. <view class="menu_item" @click="doRouter1">
  68. <image
  69. :src="`./static/images/icon4${colorAry[custTypeId]}.png`"
  70. />
  71. <text>停车开票</text>
  72. </view>
  73. <view class="menu_item" @click="doRouter2">
  74. <image
  75. :src="`./static/images/icon1${colorAry[custTypeId]}.png`"
  76. />
  77. <text>车辆管理</text>
  78. </view>
  79. </view>
  80. </view>
  81. <view
  82. :class="{
  83. 'parkingFee-bottom': true,
  84. 'blue-parkingFee-bottom': custTypeId === 1,
  85. 'green-parkingFee-bottom': custTypeId === 2,
  86. }"
  87. >
  88. <view class="parkingFee-search">
  89. <view class="search_tip" v-if="custTypeId === 0">
  90. <view>车辆类型</view>
  91. <view class="search_tip_pt">
  92. <view
  93. :class="carType == 0 ? 'search_tip_pt_index' : ''"
  94. @click="toggleType(0)"
  95. >普通车牌</view
  96. >
  97. <view
  98. :class="carType == 1 ? 'search_tip_pt_index' : ''"
  99. @click="toggleType(1)"
  100. >新能源</view
  101. >
  102. <view
  103. :class="carType == 2 ? 'search_tip_pt_index' : ''"
  104. @click="toggleType(2)"
  105. >特殊车牌</view
  106. >
  107. </view>
  108. </view>
  109. <view
  110. :class="{
  111. blueClassify: custTypeId === 1,
  112. greenClassify: custTypeId === 2,
  113. }"
  114. v-else
  115. >
  116. <view
  117. :class="{ classifyItem: true, isChecked: carType === index }"
  118. v-for="(item, index) in classifyList"
  119. :key="index"
  120. >
  121. <view @click="toggleType(index)">{{ item }}</view>
  122. </view>
  123. </view>
  124. <view class="input-box">
  125. <view
  126. class="li"
  127. @click="clickShowKeyboard(0)"
  128. :class="[active === 0 ? 'active' : '']"
  129. >
  130. {{ numArr[0] }}
  131. </view>
  132. <view
  133. class="li"
  134. @click="clickShowKeyboard(1)"
  135. :class="[active === 1 ? 'active' : '']"
  136. >
  137. {{ numArr[1] }}
  138. </view>
  139. <view class="input_box_dian">·</view>
  140. <view
  141. class="li"
  142. @click="clickShowKeyboard(2)"
  143. :class="[active === 2 ? 'active' : '']"
  144. >
  145. {{ numArr[2] }}
  146. </view>
  147. <view
  148. class="li"
  149. @click="clickShowKeyboard(3)"
  150. :class="[active === 3 ? 'active' : '']"
  151. >
  152. {{ numArr[3] }}
  153. </view>
  154. <view
  155. class="li"
  156. @click="clickShowKeyboard(4)"
  157. :class="[active === 4 ? 'active' : '']"
  158. >
  159. {{ numArr[4] }}
  160. </view>
  161. <view
  162. class="li"
  163. @click="clickShowKeyboard(5)"
  164. :class="[active === 5 ? 'active' : '']"
  165. >
  166. {{ numArr[5] }}
  167. </view>
  168. <view
  169. class="li"
  170. @click="clickShowKeyboard(6)"
  171. :class="[active === 6 ? 'active' : '']"
  172. >
  173. {{ numArr[6] }}
  174. </view>
  175. <view
  176. class="li"
  177. @click="clickShowKeyboard(7)"
  178. :class="[active === 7 ? 'active' : '']"
  179. v-if="carType == 1"
  180. >
  181. <text v-if="numArr[7]">{{ numArr[7] }}</text>
  182. </view>
  183. </view>
  184. <uni-button
  185. type="primary"
  186. class="search-btn"
  187. :class="disabledBtn ? 'disabled-btn' : ''"
  188. :disabled="disabledBtn"
  189. @click="preHandleSearch"
  190. >
  191. 查询缴费
  192. </uni-button>
  193. </view>
  194. <view class="vehicleMgt-list">
  195. <view class="vehicleMgt-title">
  196. <view>历史车辆</view>
  197. <!-- <image src="./static/images/icon5.png" class="vehicleMgt-title-img"/> -->
  198. </view>
  199. <view class="vehicleMgt-content" v-if="carList.length">
  200. <view
  201. class="item"
  202. v-for="(item, index) in carList"
  203. :key="index"
  204. @click="toHandleSearch(item, 1)"
  205. :class="vehicleNumber == item ? 'vehicleMgt-content_cls' : ''"
  206. >{{ item | formatCarno }}</view
  207. >
  208. </view>
  209. </view>
  210. </view>
  211. </view>
  212. </view>
  213. <plate-number
  214. ref="plateKeyboard"
  215. :carType="carType"
  216. :active="active"
  217. :ind="ind"
  218. :numArr="numArr"
  219. @carnoArr="updateCarno"
  220. ></plate-number>
  221. </scroll-view>
  222. </template>
  223. <script>
  224. import authorize from '@/components/authorize/authorize.vue';
  225. import plateNumber from '@/components/plate-number/plateNumber.vue';
  226. import { REG_SOURCE } from '@/constants.js';
  227. import { mapState } from 'vuex';
  228. import MemberCacheTool from '@/utils/member-cache-tool.js';
  229. import { buildShareSource } from '@/utils/utils.js';
  230. const app = getApp();
  231. export default {
  232. components: {
  233. authorize,
  234. plateNumber,
  235. },
  236. data() {
  237. return {
  238. vehicleMgt_content_index: -1, //历史车辆选中
  239. carType: 0, //车辆类型
  240. init_ch: false, // 字体超出隐藏显示
  241. search_price: false, //查询按钮隐藏显示
  242. parkInfoEntity: {},
  243. show_chinese: false, //是否显示汉字键盘
  244. show_allBoard: false, //是否显示英文数字键盘
  245. plate_number: '', //车牌号
  246. ind: null,
  247. numArr: ['', '', '', '', '', '', ''],
  248. active: null,
  249. carList: [], // 车辆列表
  250. classifyList: ['普通车牌', '新能源', '特殊车牌'], // 车牌类型
  251. vehicleNumber: '',
  252. localimgPic: '',
  253. hourMoney: '',
  254. showSq: false,
  255. blueHeadBg: 'parkingFee/fee-head-bg.png',
  256. picUrl: this.$picUrl,
  257. colorAry: ['', '-blue', '-green'],
  258. openId: null,
  259. options: null,
  260. preUrl: '',
  261. radiusType: null,
  262. payUrl: '',
  263. };
  264. },
  265. mounted() {
  266. this.$request({
  267. // url: this.$baseURL + 'api/1.0/park/checkCarIsInPark',
  268. url: this.$baseURL + 'api/1.0/park/parkingOrderSwitchBj',
  269. method: 'POST',
  270. header: JSON.parse(uni.getStorageSync('handleUser')),
  271. timeout: 10000,
  272. })
  273. .then((res) => {
  274. // console.log(res.data, 'radius')
  275. if (res.data.code === 0) {
  276. this.radiusType = res.data.data;
  277. } else {
  278. uni.showToast({
  279. title: res.data.msg,
  280. duration: 2000,
  281. icon: 'none',
  282. });
  283. }
  284. })
  285. .catch((err) => {
  286. uni.hideLoading();
  287. uni.showToast({
  288. title: '网络超时请稍后再试',
  289. duration: 2000,
  290. icon: 'none',
  291. });
  292. console.log(err);
  293. });
  294. },
  295. computed: {
  296. disabledBtn() {
  297. return this.numArr.findIndex((val) => !val) !== -1;
  298. },
  299. ...mapState({
  300. custTypeId: (state) => state.custTypeId,
  301. }),
  302. },
  303. // 分享
  304. onShareAppMessage() {
  305. let mallid = app.globalData.mallid;
  306. let pullVipcode = app.globalData?.member?.vipcode ?? null;
  307. let shareLink = 'pages/parkingFee/parkingFee?mallid=' + mallid;
  308. if (pullVipcode) {
  309. shareLink += '&pullVipcode=' + pullVipcode;
  310. }
  311. shareLink += '&' + buildShareSource('parking', '');
  312. // console.log('share app link ===> ', shareLink)
  313. return {
  314. title: '停车缴费', // 分享标题
  315. imageUrl: '', // 分享图标
  316. path: shareLink,
  317. };
  318. },
  319. // 分享
  320. onShareTimeline() {
  321. let mallid = app.globalData.mallid;
  322. let pullVipcode = app.globalData?.member?.vipcode ?? null;
  323. let shareLink = 'pages/parkingFee/parkingFee?mallid=' + mallid;
  324. if (pullVipcode) {
  325. shareLink += '&pullVipcode=' + pullVipcode;
  326. }
  327. shareLink += '&' + buildShareSource('parking', '');
  328. // console.log('share app link ===> ', shareLink)
  329. return {
  330. title: '停车缴费', // 分享标题
  331. imageUrl: '', // 分享图标
  332. path: shareLink,
  333. };
  334. },
  335. async onLoad(params) {
  336. this.options = params;
  337. await this.$onLaunched;
  338. this.localimgPic = this.$staticPicUrl + '/wxminilocalimg/parkingFee/';
  339. app.globalData.pullVipcode = params.pullVipcode || '';
  340. // app.globalData.mallid = params.mallid || app.globalData.mallid
  341. var ths = this;
  342. if (app.globalData.member) {
  343. // ths.getParkInfo()
  344. app.globalData.isNewMember = '';
  345. // 场景二维码记录(是否扫码进入)
  346. app.globalData.paramsScene = {};
  347. ths.$saveSceneQrcodeDetail(
  348. 'page',
  349. 'parkingFee',
  350. '停车缴费',
  351. '',
  352. '',
  353. '',
  354. ''
  355. );
  356. }
  357. // 埋点初始化
  358. this.parkingTrack = new this.$trackFactory('parking_query_payment', {});
  359. this.parkingTrack.track(1);
  360. // console.log('this.parkingTrack::::', this.parkingTrack)
  361. // 埋点本地化
  362. this.preUrl = uni.getStorageSync('previousUrl');
  363. uni.setStorageSync('previousUrl', '/pages/parkingFee/home.vue');
  364. },
  365. onShow() {
  366. const _this = this;
  367. const openId =
  368. uni.getStorageSync('openId') ||
  369. uni.getStorageSync('member').openid ||
  370. app.globalData.openId;
  371. if (openId) {
  372. this.openId = openId;
  373. this.getParkInfo();
  374. this.showSq = false;
  375. } else {
  376. const regSource = REG_SOURCE.PARKING;
  377. app.globalData.regSource = regSource;
  378. if (this.options?.regSource) {
  379. app.globalData.regSource = REG_SOURCE[this.options?.regSource];
  380. }
  381. if (this.options?.tpName) {
  382. app.globalData.tpName = this.options?.tpName;
  383. }
  384. this.$refs.authorize.login('/pages/parkingFee/parkingFee', () => {
  385. const openId =
  386. uni.getStorageSync('openId') ||
  387. uni.getStorageSync('member').openid ||
  388. app.globalData.openId;
  389. _this.openId = openId;
  390. _this.getParkInfo();
  391. });
  392. this.showSq = true;
  393. }
  394. this.$refs['szProtocolModal'].open();
  395. },
  396. methods: {
  397. toggleType(carType) {
  398. this.ind = 0;
  399. this.active = 0;
  400. this.carType = carType;
  401. // console.log(this.numArr)
  402. if (carType === 1) {
  403. this.numArr = [
  404. this.numArr[0],
  405. this.numArr[1],
  406. this.numArr[2],
  407. this.numArr[3],
  408. this.numArr[4],
  409. this.numArr[5],
  410. this.numArr[6],
  411. this.numArr[7],
  412. ];
  413. } else {
  414. this.numArr = [
  415. this.numArr[0],
  416. this.numArr[1],
  417. this.numArr[2],
  418. this.numArr[3],
  419. this.numArr[4],
  420. this.numArr[5],
  421. this.numArr[6],
  422. ];
  423. }
  424. },
  425. // 获取停车场信息
  426. getParkInfo: function () {
  427. uni.showLoading({
  428. title: '加载中',
  429. });
  430. const openId =
  431. uni.getStorageSync('openId') ||
  432. uni.getStorageSync('member').openid ||
  433. app.globalData.openId;
  434. let params = {
  435. mallid: app.globalData.mallid,
  436. groupId: app.globalData.groupId,
  437. openid: openId,
  438. // vipcode: app.globalData.member.vipcode
  439. };
  440. this.$md(params);
  441. this.$request({
  442. url: this.$baseURL + 'api/1.0/park/parkInfo',
  443. data: params,
  444. method: 'POST',
  445. header: JSON.parse(uni.getStorageSync('handleUser')),
  446. })
  447. .then((res) => {
  448. uni.hideLoading();
  449. if (res.data.code === 0) {
  450. const data = res.data.data || {};
  451. this.carList = data.carList;
  452. this.parkInfoEntity = data.parkInfoEntity;
  453. this.hourMoney =
  454. parseFloat(this.parkInfoEntity.needmoney) /
  455. parseFloat(this.parkInfoEntity.tohours);
  456. let reg = /[;;]/g;
  457. this.parkInfoEntity.payinstruction =
  458. this.parkInfoEntity.payinstruction.replace(reg, '\r\n');
  459. this.parkInfoEntity.hourMoney = this.hourMoney;
  460. uni.setStorageSync('parkinfo', JSON.stringify(this.parkInfoEntity));
  461. } else {
  462. uni.showToast({
  463. title: res.data.msg,
  464. duration: 2000,
  465. icon: 'none',
  466. });
  467. }
  468. })
  469. .catch((err) => {
  470. uni.hideLoading();
  471. uni.showToast({
  472. title: '网络超时请稍后再试',
  473. duration: 2000,
  474. icon: 'none',
  475. });
  476. console.log(err);
  477. });
  478. },
  479. //缴费说明隐藏显示
  480. top_display() {
  481. this.init_ch = !this.init_ch;
  482. },
  483. // 唤起键盘
  484. clickShowKeyboard(index) {
  485. this.ind = index;
  486. this.active = index;
  487. if (index === 0) {
  488. this.$refs['plateKeyboard'].openKeyboardCN();
  489. } else {
  490. this.$refs['plateKeyboard'].closeKeyboardCN();
  491. this.$refs['plateKeyboard'].openKeyboardEN();
  492. }
  493. },
  494. // 接收子组件数据
  495. updateCarno(val) {
  496. this.numArr = val.numArr;
  497. this.vehicleNumber = this.numArr.join('');
  498. this.active = val.active;
  499. this.ind = val.ind;
  500. },
  501. // 节流函数
  502. throttle(fc, waitTime = 500, imme = true) {
  503. if (imme) {
  504. if (!this.flag) {
  505. this.flag = true;
  506. typeof fc === 'function' && fc();
  507. this.timer = setTimeout(() => {
  508. this.flag = false;
  509. }, waitTime);
  510. }
  511. } else {
  512. if (!this.flag) {
  513. this.flag = true;
  514. this.timer = setTimeout(() => {
  515. this.flag = false;
  516. typeof fc === 'function' && fc();
  517. }, waitTime);
  518. }
  519. }
  520. },
  521. // 校验车牌号
  522. preHandleSearch() {
  523. this.throttle(() => {
  524. this.handleSearch(this.vehicleNumber, '$ClickQueryAndPayment', 0);
  525. }, 3000);
  526. },
  527. // 历史车牌快速查询
  528. toHandleSearch(carno, history) {
  529. this.throttle(() => {
  530. this.handleSearch(carno, '$ClickHistoryAndPayment', history);
  531. }, 3000);
  532. },
  533. // 查询车费信息
  534. handleSearch(carno, clickEvent = '$ClickQueryAndPayment', history) {
  535. this.vehicleNumber = carno;
  536. uni.showLoading({
  537. title: '加载中',
  538. });
  539. const openId = MemberCacheTool.getOpenId(app);
  540. const params = {
  541. carno,
  542. mallid: app.globalData.mallid,
  543. openid: openId,
  544. vipcode: app.globalData.member?.vipcode,
  545. mobile: app.globalData.member?.mobile,
  546. groupId: app.globalData.groupId,
  547. createuser: 'sys_miniprogram',
  548. };
  549. // TODO: 暂定埋点传参为车牌类型,是否需要其他参数比如车牌号码;埋点位置是否要放在查询接口回调函数中
  550. this.$md(params);
  551. // console.log('this.radiusType:::::',this.radiusType)
  552. if (this.radiusType === null) {
  553. this.payUrl = 'api/1.0/park/checkCarIsInParkAndCarFee';
  554. } else if (this.radiusType === 0) {
  555. this.payUrl = 'api/1.0/park/checkCarIsInPark';
  556. }
  557. this.$store.commit('setRadiusType', this.radiusType);
  558. var myDate = new Date();
  559. Date.prototype.Format = function (fmt) {
  560. // author: meizz
  561. var o = {
  562. 'M+': this.getMonth() + 1, // 月份
  563. 'd+': this.getDate(), // 日
  564. 'h+': this.getHours(), // 小时
  565. 'm+': this.getMinutes(), // 分
  566. 's+': this.getSeconds(), // 秒
  567. 'q+': Math.floor((this.getMonth() + 3) / 3), // 季度
  568. S: this.getMilliseconds(), // 毫秒
  569. };
  570. if (/(y+)/.test(fmt))
  571. fmt = fmt.replace(
  572. RegExp.$1,
  573. (this.getFullYear() + '').substr(4 - RegExp.$1.length)
  574. );
  575. for (var k in o)
  576. if (new RegExp('(' + k + ')').test(fmt))
  577. fmt = fmt.replace(
  578. RegExp.$1,
  579. RegExp.$1.length == 1
  580. ? o[k]
  581. : ('00' + o[k]).substr(('' + o[k]).length)
  582. );
  583. return fmt;
  584. };
  585. var time2 = new Date().Format('yyyy-MM-dd hh:mm:ss');
  586. this.parkingTrack.track(100, {
  587. source_type: '首页',
  588. source_name: '停车功能球',
  589. plate_type: this.carType,
  590. plate_num: carno,
  591. is_historical_license: history,
  592. query_time: time2,
  593. });
  594. this.$request({
  595. // url: this.$baseURL + 'api/1.0/park/checkCarIsInPark',
  596. url: this.$baseURL + this.payUrl,
  597. data: params,
  598. method: 'POST',
  599. timeout: 60000 * 2,
  600. header: JSON.parse(uni.getStorageSync('handleUser')),
  601. // timeout: 10000,
  602. })
  603. .then((res) => {
  604. uni.hideLoading();
  605. if (res.data.code === 0) {
  606. // 埋点-业务查询成功
  607. this.parkingTrack.track(200);
  608. uni.navigateTo({
  609. url: './parkingFeeDetail?carno=' + carno,
  610. });
  611. } else if (res.data.code === 1) {
  612. // 当前车辆没有查到账单
  613. this.parkingTrack.track(400, {
  614. fail_reason: res.data?.msg,
  615. query_time: time2,
  616. });
  617. uni.navigateTo({
  618. url:
  619. './parkingFeePayment?msg=' + res.data.msg + '&carno=' + carno,
  620. });
  621. } else if (res.data.code === 2) {
  622. // 月租车
  623. uni.navigateTo({
  624. url: './parkingFeeHint/parkingFeeHint?carno=' + carno,
  625. });
  626. } else {
  627. this.parkingTrack.track(400, {
  628. fail_reason: res.data?.msg,
  629. query_time: time2,
  630. });
  631. uni.showToast({
  632. title: res.data?.msg,
  633. duration: 2000,
  634. icon: 'none',
  635. });
  636. }
  637. })
  638. .catch((err) => {
  639. this.parkingTrack.track(400, {
  640. fail_reason: '网络超时请稍后再试',
  641. query_time: time2,
  642. });
  643. uni.hideLoading();
  644. uni.showToast({
  645. title: '网络超时请稍后再试',
  646. duration: 2000,
  647. icon: 'none',
  648. });
  649. console.log(err);
  650. });
  651. },
  652. // 车牌号校验
  653. // isVehicleNumber(vehicleNumber) {
  654. // if (vehicleNumber.length == 7) {
  655. // this.vehicleNumber = vehicleNumber.join('')
  656. // var express =
  657. // /^(([京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领][A-Z](([0-9]{5}[DF])|([DF]([A-HJ-NP-Z0-9])[0-9]{4})))|([京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领][A-Z][A-HJ-NP-Z0-9]{4}[A-HJ-NP-Z0-9挂学警港澳使领]))$/;
  658. // if (!express.test(this.vehicleNumber)) {
  659. // uni.showToast({
  660. // title: '请输入正确的车牌号',
  661. // duration: 2000,
  662. // icon: 'none'
  663. // })
  664. // return false
  665. // }
  666. // return true
  667. // }
  668. // if (vehicleNumber.length == 8) {
  669. // this.vehicleNumber = vehicleNumber.join('')
  670. // var express =
  671. // /^([京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[a-zA-Z](([DF]((?![IO])[a-zA-Z0-9](?![IO]))[0-9]{4})|([0-9]{5}[DF]))|[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}[A-Z0-9]{4}[A-Z0-9挂学警港澳]{1})$/;
  672. // if (!express.test(this.vehicleNumber)) {
  673. // uni.showToast({
  674. // title: '请输入正确的车牌号',
  675. // duration: 2000,
  676. // icon: 'none'
  677. // })
  678. // return false
  679. // }
  680. // return true
  681. // }
  682. // },
  683. // 缴费记录
  684. doRouter: function () {
  685. // 埋点
  686. this.parkingTrack.track(101);
  687. uni.navigateTo({
  688. url: './parkingFeeList',
  689. });
  690. },
  691. // 车牌管理
  692. doRouter2: function () {
  693. // 埋点
  694. this.parkingTrack.track(104);
  695. uni.navigateTo({
  696. url: './vehicleManagement',
  697. });
  698. },
  699. //停车发票
  700. doRouter1: function () {
  701. // 埋点
  702. this.parkingTrack.track(103);
  703. // 北京停车场开票
  704. // if (this.parkInfoEntity.parkMallCode === 3) {
  705. // uni.navigateToMiniProgram({
  706. // appId: this.$etcpAppId,
  707. // path: this.$etcpAppInvoicePath,
  708. // envVersion: 'release',
  709. // })
  710. // return
  711. // }
  712. uni.navigateTo({
  713. url: './parkingReceipt/parkingReceipt',
  714. });
  715. },
  716. //停车券兑换
  717. doRouter3: function () {
  718. // 埋点
  719. this.parkingTrack.track(102);
  720. uni.navigateTo({
  721. url: '/pages/pointsMall/pointsMall?exchangeTypes=2',
  722. });
  723. },
  724. },
  725. };
  726. </script>
  727. <style lang="less"></style>
  728. <style lang="less" scoped>
  729. @import '../../styles/common.less';
  730. .scroll-Y {
  731. width: 100%;
  732. // display: flex;
  733. // flex-direction: column;
  734. height: 100vh;
  735. }
  736. .color-scroll-Y {
  737. background: #e7e9ea;
  738. }
  739. .wrap {
  740. display: flex;
  741. flex-direction: column;
  742. width: 100%;
  743. .parkingFee {
  744. display: flex;
  745. flex-direction: column;
  746. .parkingFee-top {
  747. display: flex;
  748. flex-direction: column;
  749. background-size: 100% 30%;
  750. // height: 350rpx;
  751. // margin-bottom: 25px;
  752. .top_content {
  753. padding: 25rpx 35rpx;
  754. box-sizing: border-box;
  755. display: flex;
  756. flex-direction: column;
  757. text {
  758. font-size: 24rpx;
  759. color: #898989;
  760. text-align: left;
  761. }
  762. .title_box {
  763. display: flex;
  764. align-items: center;
  765. justify-content: space-between;
  766. margin-bottom: 20rpx;
  767. .btn {
  768. padding: 0rpx 14rpx;
  769. box-sizing: border-box;
  770. border-radius: 20rpx;
  771. font-size: 30rpx;
  772. color: #000;
  773. text-align: center;
  774. }
  775. }
  776. .info {
  777. padding-left: 18rpx;
  778. font-size: 27rpx;
  779. width: 95%;
  780. color: #666;
  781. line-height: 45rpx;
  782. }
  783. .info_show {
  784. word-break: break-all;
  785. text-overflow: ellipsis;
  786. overflow: hidden;
  787. display: -webkit-box;
  788. -webkit-line-clamp: 2;
  789. -webkit-box-orient: vertical;
  790. }
  791. }
  792. .blue_top_content {
  793. .color_top_content('blue');
  794. background-position: 0 0;
  795. background-size: 100% 100%;
  796. background-repeat: no-repeat;
  797. }
  798. .green_top_content {
  799. .color_top_content('green');
  800. }
  801. .color_top_content(@value) {
  802. @color: 'color-@{value}';
  803. background-color: @@color;
  804. text {
  805. color: @color-white;
  806. }
  807. .title_box {
  808. .btn {
  809. color: @color-gold;
  810. }
  811. }
  812. .info {
  813. font-size: 24rpx;
  814. }
  815. }
  816. .top_down {
  817. width: 100%;
  818. text-align: center;
  819. color: #b0a9a9;
  820. }
  821. }
  822. .top_menu {
  823. margin-top: 10rpx;
  824. background: #fff;
  825. padding-top: 50rpx;
  826. box-sizing: border-box;
  827. display: flex;
  828. justify-content: space-between;
  829. border-radius: 15rpx;
  830. // position: absolute;
  831. // left: 50%;
  832. box-shadow: 0 0 5rpx #666;
  833. // transform: translateX(-50%);
  834. top: 160rpx;
  835. width: 700rpx;
  836. margin-left: 25rpx;
  837. height: 250rpx;
  838. .menu_item {
  839. display: flex;
  840. flex-direction: column;
  841. align-items: center;
  842. width: 33.3%;
  843. image {
  844. width: 100rpx;
  845. height: 100rpx;
  846. }
  847. text {
  848. font-size: 30rpx;
  849. margin-top: 10rpx;
  850. }
  851. }
  852. }
  853. .blue_top_menu {
  854. .color_top_menu('blue');
  855. background: @color-pink;
  856. }
  857. .green_top_menu {
  858. .color_top_menu('green');
  859. background: @color-light-green;
  860. }
  861. .color_top_menu(@value) {
  862. @color: 'color-@{value}';
  863. margin-top: 0;
  864. margin-left: 0;
  865. padding-top: 0;
  866. width: 100%;
  867. height: 211rpx;
  868. color: @@color;
  869. border-radius: 0;
  870. align-items: center;
  871. .menu_item {
  872. width: 25%;
  873. image {
  874. width: 83rpx;
  875. height: 83rpx;
  876. }
  877. text {
  878. font-size: 24rpx;
  879. margin-top: 20rpx;
  880. }
  881. }
  882. }
  883. .parkingFee-bottom {
  884. width: 100%;
  885. display: flex;
  886. flex-direction: column;
  887. padding: 14rpx 25rpx;
  888. box-sizing: border-box;
  889. padding-bottom: 65px;
  890. // 车牌号查询
  891. .parkingFee-search {
  892. width: 100%;
  893. display: flex;
  894. flex-direction: column;
  895. background: #fff;
  896. border-radius: 15rpx;
  897. padding: 26rpx 25rpx 20rpx;
  898. box-sizing: border-box;
  899. .search_tip {
  900. margin-bottom: 10rpx;
  901. width: 100%;
  902. margin-left: -1rpx;
  903. font-size: 24rpx;
  904. display: flex;
  905. justify-content: space-between;
  906. align-items: center;
  907. font-size: 30rpx;
  908. .search_tip_pt {
  909. font-size: 28rpx;
  910. width: 470rpx;
  911. display: flex;
  912. justify-content: space-around;
  913. align-items: center;
  914. border: 1rpx solid #8d8d8d;
  915. height: 70rpx;
  916. color: #8d8d8d;
  917. overflow: hidden;
  918. border-radius: 50rpx;
  919. view {
  920. height: 100%;
  921. border-radius: 50rpx;
  922. line-height: 65rpx;
  923. text-align: center;
  924. }
  925. view:nth-child(1) {
  926. width: 37%;
  927. }
  928. view:nth-child(2) {
  929. width: 36%;
  930. }
  931. view:nth-child(3) {
  932. width: 37%;
  933. }
  934. .search_tip_pt_index {
  935. color: #fff;
  936. background-image: linear-gradient(to right, #7e4fa1, #433c7f);
  937. }
  938. }
  939. }
  940. // 车牌号 & 虚拟键盘
  941. .input-box {
  942. width: 100%;
  943. height: 100rpx;
  944. margin: auto;
  945. background: rgba(255, 255, 255, 1);
  946. border-radius: 0.4rem;
  947. margin: 1rem auto;
  948. display: flex;
  949. justify-content: center;
  950. .li {
  951. flex: 1;
  952. border: 1px solid rgba(206, 208, 210, 1);
  953. box-sizing: border-box;
  954. margin: 0 2px;
  955. font-size: 50rpx;
  956. display: flex;
  957. align-items: center;
  958. justify-content: center;
  959. color: #703a98;
  960. image {
  961. width: 80%;
  962. height: 100%;
  963. }
  964. &.active {
  965. border-color: #3e67ff;
  966. }
  967. }
  968. .input_box_dian {
  969. display: flex;
  970. justify-content: center;
  971. align-items: center;
  972. font-size: 120rpx;
  973. color: #703a98;
  974. }
  975. }
  976. .search-btn {
  977. color: #fff;
  978. margin: 0 auto;
  979. height: 90rpx;
  980. width: 98%;
  981. line-height: 90rpx;
  982. border-radius: 80rpx;
  983. font-size: 34rpx;
  984. text-align: center;
  985. background-image: linear-gradient(to right, #7e4fa1, #433c7f);
  986. }
  987. .disabled-btn {
  988. background-color: #c1c1c1 !important;
  989. background-image: none !important;
  990. }
  991. }
  992. .vehicleMgt-list {
  993. display: flex;
  994. flex-direction: column;
  995. margin-bottom: 35rpx;
  996. margin-top: 20rpx;
  997. .vehicleMgt-title {
  998. width: 91%;
  999. display: flex;
  1000. justify-content: space-between;
  1001. margin-left: 4%;
  1002. // padding-left: 30rpx;
  1003. padding-top: 30rpx;
  1004. box-sizing: border-box;
  1005. border-top: 1px solid #f2f2f2;
  1006. font-size: 30rpx;
  1007. .vehicleMgt-title-img {
  1008. width: 30rpx;
  1009. height: 30rpx;
  1010. }
  1011. }
  1012. .vehicleMgt-content {
  1013. width: 94%;
  1014. margin-left: 3%;
  1015. display: flex;
  1016. flex-wrap: wrap;
  1017. // justify-content: space-around;
  1018. border-radius: 15rpx;
  1019. .item {
  1020. width: 30%;
  1021. height: 60rpx;
  1022. margin-top: 30rpx;
  1023. margin-left: 16rpx;
  1024. text-align: center;
  1025. box-sizing: border-box;
  1026. border: 2rpx solid #dcdcdc;
  1027. line-height: 60rpx;
  1028. font-size: 26rpx;
  1029. border-radius: 10rpx;
  1030. color: #a5a5a5;
  1031. }
  1032. .vehicleMgt-content_cls {
  1033. color: #703a98;
  1034. border: 2rpx solid #703a98;
  1035. }
  1036. // .item::after {
  1037. // content: '';
  1038. // display: block;
  1039. // height: 1px;
  1040. // width: 92%;
  1041. // position: absolute;
  1042. // background-color: #F2F2F2;
  1043. // bottom: 0px;
  1044. // left: 4%;
  1045. // }
  1046. // .item:last-child::after {
  1047. // display: none;
  1048. // }
  1049. }
  1050. }
  1051. .search-list {
  1052. display: flex;
  1053. flex-direction: column;
  1054. background: #fff;
  1055. padding: 0 30rpx;
  1056. box-sizing: border-box;
  1057. margin-top: 20rpx;
  1058. border-radius: 15rpx;
  1059. width: 100%;
  1060. .list_item {
  1061. padding: 38rpx 0;
  1062. box-sizing: border-box;
  1063. display: flex;
  1064. align-items: center;
  1065. justify-content: space-between;
  1066. border-bottom: 1px solid #f2f2f2;
  1067. text {
  1068. font-size: 28rpx;
  1069. }
  1070. button {
  1071. height: 60rpx;
  1072. line-height: 60rpx;
  1073. margin: 0;
  1074. }
  1075. }
  1076. }
  1077. }
  1078. .blue-parkingFee-bottom {
  1079. .color-parkingFee-bottom('blue');
  1080. }
  1081. .green-parkingFee-bottom {
  1082. .color-parkingFee-bottom('green');
  1083. }
  1084. .color-parkingFee-bottom(@value) {
  1085. @color: 'color-@{value}';
  1086. width: auto;
  1087. padding-bottom: 0;
  1088. padding: 22rpx 20rpx 0 20rpx;
  1089. .parkingFee-search {
  1090. padding: 0 0 31rpx 0;
  1091. .blueClassify {
  1092. .colorClassify('blue');
  1093. }
  1094. .greenClassify {
  1095. .colorClassify('green');
  1096. }
  1097. .input-box {
  1098. width: 682rpx;
  1099. .li {
  1100. color: @@color;
  1101. &.active {
  1102. border-color: @@color;
  1103. }
  1104. }
  1105. .input_box_dian {
  1106. color: @@color;
  1107. }
  1108. }
  1109. .search-btn {
  1110. font-size: 34rpx;
  1111. background-image: none;
  1112. background-color: @@color;
  1113. }
  1114. }
  1115. .vehicleMgt-list {
  1116. background-color: @color-white;
  1117. .vehicleMgt-title {
  1118. padding-top: 0;
  1119. padding: 23rpx;
  1120. margin-left: 0;
  1121. }
  1122. .vehicleMgt-content {
  1123. width: 100%;
  1124. margin-left: 0;
  1125. padding: 16rpx 35rpx 25rpx 35rpx;
  1126. box-sizing: border-box;
  1127. .item {
  1128. font-size: 28rpx;
  1129. margin-top: 0;
  1130. margin-left: 0;
  1131. margin-right: 30rpx;
  1132. margin-top: 41rpx;
  1133. &:nth-child(-n + 3) {
  1134. margin-top: 0;
  1135. }
  1136. &:nth-child(3n) {
  1137. margin-right: 0;
  1138. }
  1139. }
  1140. .vehicleMgt-content_cls {
  1141. color: @color-white;
  1142. border: 0px;
  1143. background-color: @@color;
  1144. }
  1145. }
  1146. }
  1147. }
  1148. }
  1149. }
  1150. // 缴费说明
  1151. .payInstruct_wrap {
  1152. width: 300px;
  1153. margin: 0 auto;
  1154. display: flex;
  1155. flex-direction: column;
  1156. background: #fff;
  1157. border-radius: 20rpx;
  1158. .scroll {
  1159. height: 600rpx;
  1160. display: flex;
  1161. flex-direction: column;
  1162. padding: 20rpx;
  1163. box-sizing: border-box;
  1164. .payInstruct_title {
  1165. font-size: 30rpx;
  1166. text-align: center;
  1167. padding: 20rpx 0;
  1168. box-sizing: border-box;
  1169. border-bottom: 1px solid #f2f2f2;
  1170. }
  1171. .payInstruct_con {
  1172. display: flex;
  1173. width: 100%;
  1174. padding: 20rpx 10rpx;
  1175. box-sizing: border-box;
  1176. text {
  1177. font-size: 28rpx;
  1178. color: #999;
  1179. }
  1180. }
  1181. }
  1182. }
  1183. .class-van-button-small {
  1184. min-width: 0;
  1185. border-radius: 10rpx;
  1186. margin: 10rpx 3rpx;
  1187. box-shadow: 10rpx 10rpx 10rpx #aaa;
  1188. }
  1189. .class-plate-box {
  1190. width: 100%;
  1191. padding: 24rpx 0;
  1192. box-sizing: border-box;
  1193. position: relative;
  1194. }
  1195. .plate_number {
  1196. width: 100%;
  1197. display: flex;
  1198. flex-direction: column;
  1199. .plate_number_wrap {
  1200. width: 100%;
  1201. display: flex;
  1202. flex-direction: column;
  1203. background: #eaf1f9;
  1204. padding: 0 0 10rpx;
  1205. box-sizing: border-box;
  1206. .close-box {
  1207. width: 100%;
  1208. font-size: 24rpx;
  1209. color: #3e67ff;
  1210. text-align: right;
  1211. margin-right: 1.25rem;
  1212. view {
  1213. padding: 10px;
  1214. }
  1215. }
  1216. .plate_chinese_box {
  1217. width: 100%;
  1218. display: flex;
  1219. flex-wrap: wrap;
  1220. justify-content: center;
  1221. button {
  1222. width: 9%;
  1223. height: 2.5rem;
  1224. line-height: 2.5rem;
  1225. text-align: center;
  1226. padding: 0;
  1227. font-size: 28rpx;
  1228. .class-van-button-small;
  1229. }
  1230. }
  1231. }
  1232. }
  1233. .allBoard {
  1234. width: 100%;
  1235. display: flex;
  1236. flex-direction: column;
  1237. .allBoard_wrap {
  1238. width: 100%;
  1239. display: flex;
  1240. flex-direction: column;
  1241. background: #eaf1f9;
  1242. padding: 0 0 10rpx;
  1243. box-sizing: border-box;
  1244. }
  1245. .close-box {
  1246. padding-top: 22rpx;
  1247. box-sizing: border-box;
  1248. font-size: 24rpx;
  1249. color: #3e67ff;
  1250. text-align: right;
  1251. margin-right: 1.25rem;
  1252. }
  1253. .plate_number_box {
  1254. width: 100%;
  1255. display: flex;
  1256. flex-wrap: wrap;
  1257. justify-content: center;
  1258. button {
  1259. width: 9%;
  1260. height: 2.5rem;
  1261. line-height: 2.5rem;
  1262. text-align: center;
  1263. padding: 0;
  1264. font-size: 28rpx;
  1265. .class-van-button-small;
  1266. }
  1267. }
  1268. }
  1269. .delBtn {
  1270. color: #fff;
  1271. height: 38rpx;
  1272. line-height: 38rpx;
  1273. font-size: 20rpx;
  1274. width: 124rpx;
  1275. border-radius: 7px;
  1276. text-align: center;
  1277. padding: 4px;
  1278. background-color: #c69c6d;
  1279. }
  1280. .payThe {
  1281. background-color: #fff;
  1282. width: 100%;
  1283. .pay_index {
  1284. text-align: center;
  1285. width: 200rpx;
  1286. padding-top: 10rpx;
  1287. margin: 0rpx auto;
  1288. }
  1289. .pay_title {
  1290. width: 500rpx;
  1291. display: flex;
  1292. align-items: center;
  1293. margin-top: 30rpx;
  1294. }
  1295. .pay_title1 {
  1296. width: 100%;
  1297. margin-top: 20rpx;
  1298. display: flex;
  1299. align-items: center;
  1300. }
  1301. .pay_title_yhj {
  1302. margin-left: 60rpx;
  1303. font-size: 20rpx;
  1304. }
  1305. .pay_title_yhj1 {
  1306. margin-left: 35rpx;
  1307. font-size: 20rpx;
  1308. }
  1309. .payjf {
  1310. font-size: 20rpx;
  1311. margin-left: 30rpx;
  1312. }
  1313. .paySelect {
  1314. color: rgba(16, 16, 16, 100);
  1315. font-size: 20rpx;
  1316. font-family: Arial;
  1317. border: 1px solid rgba(187, 187, 187, 100);
  1318. border-radius: 10rpx;
  1319. margin-left: 80rpx;
  1320. width: 260rpx;
  1321. height: 80rpx;
  1322. }
  1323. .paySelect1 {
  1324. color: rgba(16, 16, 16, 100);
  1325. font-size: 20rpx;
  1326. font-family: Arial;
  1327. border: 1px solid rgba(187, 187, 187, 100);
  1328. border-radius: 10rpx;
  1329. margin-left: 80rpx;
  1330. width: 260rpx;
  1331. height: 80rpx;
  1332. display: flex;
  1333. align-items: center;
  1334. }
  1335. .pay-se {
  1336. width: 120rpx;
  1337. height: 100%;
  1338. background-color: #d8dce6;
  1339. .pay-se-l {
  1340. height: 48%;
  1341. text-align: center;
  1342. font-size: 50rpx;
  1343. line-height: 68rpx;
  1344. }
  1345. .pay-se-l1 {
  1346. border-left: 1px solid rgba(187, 187, 187, 100);
  1347. border-bottom: 1px solid rgba(187, 187, 187, 100);
  1348. }
  1349. .pay-se-l2 {
  1350. border-left: 1px solid rgba(187, 187, 187, 100);
  1351. }
  1352. }
  1353. .payjfzk {
  1354. font-size: 20rpx;
  1355. color: #8b8c8b;
  1356. margin-top: 10rpx;
  1357. margin-left: 210rpx;
  1358. }
  1359. .pay_time {
  1360. font-size: 28rpx;
  1361. margin-left: 180rpx;
  1362. padding-bottom: 40rpx;
  1363. }
  1364. .pay_time1 {
  1365. margin-top: 26rpx;
  1366. }
  1367. }
  1368. .pay_jiaof {
  1369. width: 97%;
  1370. height: 60rpx;
  1371. line-height: 60rpx;
  1372. margin-left: 10rpx;
  1373. background-color: #c69c6d;
  1374. text-align: center;
  1375. color: rgba(255, 255, 255, 100);
  1376. font-size: 28rpx;
  1377. font-family: Microsoft Yahei;
  1378. border-radius: 10rpx;
  1379. margin-top: 20rpx;
  1380. }
  1381. .sq_content {
  1382. width: 700rpx;
  1383. background-color: #fff;
  1384. position: fixed;
  1385. bottom: 25px;
  1386. left: 25rpx;
  1387. height: 50px;
  1388. display: flex;
  1389. justify-content: space-between;
  1390. align-items: center;
  1391. border-radius: 15rpx;
  1392. font-size: 16px;
  1393. color: #c69c6d;
  1394. padding: 0rpx 30rpx;
  1395. box-sizing: border-box;
  1396. }
  1397. .sq_content .btn {
  1398. width: 180rpx;
  1399. height: 30px;
  1400. line-height: 30px;
  1401. text-align: center;
  1402. color: #fff;
  1403. background-color: #c69c6d;
  1404. margin-top: -3px;
  1405. border-radius: 25px;
  1406. }
  1407. // 停车券弹窗
  1408. .ticketPopup {
  1409. display: flex;
  1410. flex-direction: column;
  1411. background: #fff;
  1412. border-radius: 20rpx 20rpx 0 0;
  1413. z-index: 999;
  1414. .popup-title {
  1415. display: flex;
  1416. justify-content: center;
  1417. align-items: center;
  1418. padding: 30rpx 42rpx;
  1419. box-sizing: border-box;
  1420. border-bottom: 1px solid #f2f2f2;
  1421. position: relative;
  1422. text {
  1423. color: #999;
  1424. font-size: 28rpx;
  1425. }
  1426. .useRule-text {
  1427. position: absolute;
  1428. right: 42rpx;
  1429. color: rgb(58, 130, 248);
  1430. }
  1431. }
  1432. .popup_scroll {
  1433. height: 70vh;
  1434. background: #f2f2f2;
  1435. }
  1436. .popup_content {
  1437. width: 100%;
  1438. height: 100%;
  1439. display: flex;
  1440. flex-direction: column;
  1441. padding: 10rpx 20rpx;
  1442. box-sizing: border-box;
  1443. .item {
  1444. display: flex;
  1445. background: #fff;
  1446. margin-bottom: 20rpx;
  1447. border-radius: 10rpx;
  1448. .item-left {
  1449. flex: 1;
  1450. display: flex;
  1451. align-items: center;
  1452. padding: 20rpx 0;
  1453. box-sizing: border-box;
  1454. position: relative;
  1455. .item-type {
  1456. position: absolute;
  1457. top: 0;
  1458. left: 0;
  1459. background: #fff5f1;
  1460. border-radius: 10rpx 0 10rpx 0;
  1461. width: 205rpx;
  1462. display: flex;
  1463. justify-content: center;
  1464. text {
  1465. color: #999;
  1466. font-size: 20rpx;
  1467. text-align: center;
  1468. line-height: 28rpx;
  1469. }
  1470. }
  1471. .item-value {
  1472. color: #c69c6d;
  1473. font-size: 40rpx;
  1474. padding: 10rpx 30rpx;
  1475. box-sizing: border-box;
  1476. width: 205rpx;
  1477. display: flex;
  1478. justify-content: center;
  1479. .b {
  1480. color: #c69c6d;
  1481. font-weight: 600;
  1482. font-size: 60rpx;
  1483. }
  1484. }
  1485. .color_disabled {
  1486. color: #999 !important;
  1487. }
  1488. }
  1489. .item-right {
  1490. display: flex;
  1491. align-items: center;
  1492. justify-content: center;
  1493. border-radius: 0 8rpx 8rpx 0;
  1494. position: relative;
  1495. text {
  1496. color: #c69c6d;
  1497. font-size: 24rpx;
  1498. padding: 0 20rpx;
  1499. box-sizing: border-box;
  1500. }
  1501. .color_disabled {
  1502. color: #999;
  1503. }
  1504. // 对勾
  1505. .dot {
  1506. position: absolute;
  1507. top: 0;
  1508. right: 0;
  1509. width: 2.25rem;
  1510. height: 2.375rem;
  1511. }
  1512. }
  1513. }
  1514. }
  1515. }
  1516. // 弹窗按钮
  1517. .popup_button {
  1518. width: 100%;
  1519. display: flex;
  1520. align-items: center;
  1521. justify-content: space-between;
  1522. padding: 10rpx 20rpx;
  1523. box-sizing: border-box;
  1524. text {
  1525. height: 110rpx;
  1526. line-height: 110rpx;
  1527. text-align: center;
  1528. }
  1529. .cancel_btn {
  1530. background: #fff;
  1531. color: #ed1c24 !important;
  1532. }
  1533. .ok_btn {
  1534. background: #c69c6d;
  1535. color: #fff !important;
  1536. width: 120px;
  1537. height: 40px;
  1538. line-height: 40px;
  1539. border-radius: 40px;
  1540. }
  1541. }
  1542. </style>