You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

arrears.vue 20KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031
  1. <template>
  2. <view class="content-box" style="margin-top: 30rpx;">
  3. <view class="list" v-if="state.list.length>0">
  4. <u-checkbox-group @change="checkboxGroupChange" ref="checkbox">
  5. <view class="item" v-for="(item, index) in state.list" :key="index"
  6. :class="item.suppleStatus=='PAY'?'finished':''">
  7. <view class="head">
  8. <view class="name">
  9. <image :src="`${$imgUrl}user/icon-ETC.png`" class="icon"></image>
  10. <text class="title m-10">{{item.cardId}}</text>
  11. <text class="tag-green" v-if="item.suppleStatus=='NOTPAY'">待支付</text>
  12. <text class="tag-green" v-else-if="item.suppleStatus=='PAY'">已支付</text>
  13. <text class="tag-green" v-else>已下支付单</text>
  14. </view>
  15. <view class="status text-black">{{item.vehiclePlate}}</view>
  16. </view>
  17. <view class="detail">
  18. <view class="orders">
  19. <view class="order-text">
  20. <text class="type">补缴类型:</text>
  21. <text class="value">{{item.suppleType=='TRAFFIC'?'流水欠费补缴':'卡账欠费补缴'}}</text>
  22. </view>
  23. <view class="order-text">
  24. <text class="type">补缴单号:</text>
  25. <text class="value">{{item.suppleNo}}</text>
  26. </view>
  27. <view class="order-text">
  28. <text class="type">补缴单生成时间:</text>
  29. <text class="value">{{item.insertTime}}</text>
  30. </view>
  31. </view>
  32. <u-checkbox @change="checkboxChange" v-model="item.checked" :name="item.suppleNo"
  33. v-if="item.suppleStatus=='NOTPAY'">
  34. </u-checkbox>
  35. </view>
  36. <view class="detail1">
  37. <view class="order-text1">
  38. <text class="type">{{item.extolllaneName}}</text>
  39. <text class="value">{{item.exTime}}</text>
  40. </view>
  41. <view class="order-text1">
  42. <text class="type">{{item.entolllaneName}}</text>
  43. <text class="value">{{item.enTime}}</text>
  44. </view>
  45. </view>
  46. <view class="bottom">
  47. <view class="bottom-left"><text class="tit1">通行金额:¥</text><text
  48. class="amount1">{{item.fee}}</text>
  49. </view>
  50. <view class="bottom-left"><text class="tit1">服务费用:¥</text><text
  51. class="amount1">{{item.serviceFee}}</text>
  52. </view>
  53. <view class="bottom-left"><text class="tit">欠费总金额:¥</text><text
  54. class="amount">{{item.totalFee}}</text>
  55. </view>
  56. </view>
  57. </view>
  58. </u-checkbox-group>
  59. <!-- <view class="item">
  60. <view class="head">
  61. <view class="name">
  62. <image :src="`${$imgUrl}user/icon-ETC.png`" class="icon"></image>
  63. <text class="title m-10">20230010330</text>
  64. <text class="tag-green">待支付</text>
  65. </view>
  66. <view class="status text-black">贵A123456</view>
  67. </view>
  68. <view class="detail">
  69. <view class="orders">
  70. <view class="order-text">
  71. <text class="type">补缴单号:</text>
  72. <text class="value">01872753475754</text>
  73. </view>
  74. <view class="order-text odd">
  75. <text class="type">补缴单生成时间:</text>
  76. <text class="value">2023-01-12 15:09:18</text>
  77. </view>
  78. </view>
  79. </view>
  80. <view class="bottom">
  81. <view class="bottom-left"><text class="tit">欠费金额:¥</text><text class="amount">1200.00</text>
  82. </view>
  83. <view class="btns-box">
  84. <view class="btn btn-primary" @click="$util.navTo(`/pages/order/refund-confirm`)">支付</view>
  85. </view>
  86. </view>
  87. </view>
  88. <view class="item finished">
  89. <view class="head">
  90. <view class="name">
  91. <image :src="`${$imgUrl}user/icon-ETC.png`" class="icon"></image>
  92. <text class="title m-10">20230010330</text>
  93. <text class="tag-grey">已支付</text>
  94. </view>
  95. <view class="status text-black">贵A123456</view>
  96. </view>
  97. <view class="detail">
  98. <view class="orders">
  99. <view class="order-text">
  100. <text class="type">补缴单号:</text>
  101. <text class="value">01872753475754</text>
  102. </view>
  103. <view class="order-text odd">
  104. <text class="type">补缴单生成时间:</text>
  105. <text class="value">2023-01-12 15:09:18</text>
  106. </view>
  107. </view>
  108. </view>
  109. <view class="bottom">
  110. <view class="bottom-left"><text class="tit">欠费金额:¥</text><text class="amount">1200.00</text>
  111. </view>
  112. <view class="btns-box">
  113. <view class="btn btn-disable">已支付</view>
  114. </view>
  115. </view>
  116. </view> -->
  117. </view>
  118. <view class="tips" v-else>
  119. ~暂无数据~
  120. </view>
  121. <view class="footer">
  122. <u-checkbox-group>
  123. <u-checkbox @change="checkboxChangeAll" v-model="item.checked" v-for="(item, index) in list2"
  124. :key="index" :name="item.name">{{item.name}}</u-checkbox>
  125. </u-checkbox-group>
  126. <view class="footer-right">
  127. <view class="row1">
  128. 合计:¥{{allPrice}}
  129. </view>
  130. <view class="btn" @click="wxPayment">
  131. 支付
  132. </view>
  133. </view>
  134. </view>
  135. </view>
  136. </template>
  137. <script lang="ts" setup>
  138. import {
  139. pathToBase64
  140. } from "@/utils/util/imageTool.js";
  141. import {
  142. getItem
  143. } from "@/utils/storage.ts"
  144. import {
  145. wechatAppID,
  146. wechatSecret,
  147. CardBillQuery,
  148. CardBillPlaceOrder,
  149. CardBillPayStatus,
  150. wechatPayConfigId,
  151. aliPayConfigId,
  152. obtainUserId
  153. } from "@/utils/network/api.js";
  154. import {
  155. request
  156. } from "@/utils/network/request.js";
  157. import {
  158. stringToJson
  159. } from "@/utils/network/encryption";
  160. import {
  161. onLoad,
  162. onShow,
  163. onPullDownRefresh
  164. } from "@dcloudio/uni-app";
  165. import {
  166. ref,
  167. reactive
  168. } from "vue"
  169. import {
  170. confirm,
  171. msg
  172. } from "@/utils/utils";
  173. const state = reactive({
  174. list: [],
  175. suppleNoList: [],
  176. openid: '',
  177. orderId: ''
  178. })
  179. const checkbox = ref()
  180. const list2 = reactive([{
  181. name: '全选',
  182. checked: false,
  183. disabled: false
  184. }])
  185. const allPrice = ref(0)
  186. const all = ref(true)
  187. // 获取列表数据
  188. const getlist = () => {
  189. allPrice.value = 0
  190. const options = {
  191. type: 2,
  192. data: {
  193. opId: getItem('openId')
  194. },
  195. method: "POST",
  196. showLoading: true,
  197. };
  198. request(CardBillQuery, options).then((res) => {
  199. const data = stringToJson(res.bizContent);
  200. console.log(data);
  201. data.data = data.data.map(val => {
  202. val.checked = false
  203. val.fee = val.fee / 100
  204. val.totalFee = val.totalFee / 100
  205. val.serviceFee = val.serviceFee / 100
  206. return val
  207. })
  208. state.list = data.data
  209. console.log(state.list, "我是处理后得列表");
  210. });
  211. }
  212. const checkboxChangeAll = (e) => {
  213. console.log(e);
  214. allPrice.value = 0
  215. state.suppleNoList = []
  216. if (e.value) {
  217. state.list.map(val => {
  218. val.checked = true;
  219. if (val.suppleStatus == 'NOTPAY') {
  220. allPrice.value += val.totalFee
  221. state.suppleNoList.push(val.suppleNo)
  222. }
  223. })
  224. } else {
  225. state.list.map(val => {
  226. val.checked = false;
  227. })
  228. }
  229. console.log(state.suppleNoList, "支付集合");
  230. }
  231. const checkboxChange = (e) => {
  232. console.log(e);
  233. }
  234. const checkboxGroupChange = (e) => {
  235. console.log(e);
  236. state.suppleNoList = e
  237. let arr = []
  238. allPrice.value = 0
  239. state.suppleNoList.forEach((item, i) => {
  240. state.list.forEach((val, index) => {
  241. if (item == val.suppleNo) {
  242. arr.push(val.totalFee)
  243. }
  244. })
  245. })
  246. arr.forEach(item => {
  247. allPrice.value += item
  248. })
  249. console.log(state.suppleNoList, "支付集合");
  250. }
  251. //获取微信小程序openid
  252. const getOpenID = () => {
  253. uni.login({
  254. provider: "weixin",
  255. success: function(e) {
  256. uni.request({
  257. url: `https://api.weixin.qq.com/sns/jscode2session?appid=${wechatAppID}&secret=${wechatSecret}&js_code=${e.code}&grant_type=authorization_code`,
  258. success: (res: any) => {
  259. state.openid = res.data.openid;
  260. console.log(state.openid, "微信登录获得");
  261. },
  262. });
  263. },
  264. });
  265. };
  266. //掉起微信支付
  267. const wxPayment = () => {
  268. if (state.suppleNoList.length > 0) {
  269. // #ifdef MP-WEIXIN
  270. const options = {
  271. type: 2,
  272. data: {
  273. openid: state.openid,
  274. suppleNoList: state.suppleNoList,
  275. totalFee: allPrice.value * 100,
  276. payConfigId: wechatPayConfigId,
  277. },
  278. method: "POST",
  279. showLoading: true,
  280. };
  281. request(CardBillPlaceOrder, options).then((res) => {
  282. const data = stringToJson(res.bizContent);
  283. state.orderId = data.orderId
  284. uni.requestPayment({
  285. provider: "wxpay",
  286. orderInfo: "",
  287. timeStamp: data.timestamp,
  288. nonceStr: data.noncestr,
  289. package: data.wxPackage ?data.wxPackage: "",
  290. signType: data.signType,
  291. paySign: data.sign,
  292. success: function(e) {
  293. console.log("支付成功", e);
  294. const dataaa = stringToJson(res.bizContent);
  295. checkOrder(dataaa.orderId);
  296. },
  297. fail: function(err) {
  298. confirm(err, () => {}, "支付失败", false);
  299. },
  300. });
  301. });
  302. // #endif
  303. // #ifdef MP-ALIPAY
  304. my.getAuthCode({
  305. scopes: 'auth_base',
  306. success: res => {
  307. const optionsUser = {
  308. type: 2,
  309. data: {
  310. payConfigId: aliPayConfigId,
  311. code: res.authCode
  312. },
  313. method: "POST",
  314. showLoading: true,
  315. };
  316. console.log('支付宝用户编号请求:',optionsUser)
  317. request(obtainUserId, optionsUser).then((res) => {
  318. console.log('支付宝用户编号返回:',res)
  319. const data = stringToJson(res.bizContent);
  320. const optionsali = {
  321. type: 2,
  322. data: {
  323. openid: data.openId,
  324. suppleNoList: state.suppleNoList,
  325. totalFee: allPrice.value * 100,
  326. payConfigId: "6a9a54123456578934edfre132b1234",
  327. },
  328. method: "POST",
  329. showLoading: true,
  330. };
  331. console.log('支付下单请求:',optionsali)
  332. request(CardBillPlaceOrder, optionsali).then((res) => {
  333. console.log('支付下单返回:',res)
  334. const data = stringToJson(res.bizContent);
  335. my.tradePay ({
  336. // 调用统一收单交易创建接口(alipay.trade.create),获得返回字段支付宝交易号 trade_no
  337. tradeNO: data.tranPackage,
  338. success: res => {
  339. console.log("支付成功", res);
  340. allPrice.value = 0
  341. const options = {
  342. type: 2,
  343. data: {
  344. opId: getItem('openId')
  345. },
  346. method: "POST",
  347. showLoading: true,
  348. };
  349. request(CardBillQuery, options).then((res) => {
  350. const data = stringToJson(res.bizContent);
  351. console.log(data);
  352. data.data = data.data.map(val => {
  353. val.checked = false
  354. val.fee = val.fee / 100
  355. val.totalFee = val.totalFee / 100
  356. val.serviceFee = val.serviceFee / 100
  357. return val
  358. })
  359. state.list = data.data
  360. console.log(state.list, "我是处理后得列表");
  361. })
  362. },
  363. fail: res => {
  364. console.log("支付失败", res);
  365. },
  366. });
  367. });
  368. });
  369. },
  370. fail: err => {
  371. console.log('my.getAuthCode 调用失败', err)
  372. }
  373. });
  374. // #endif
  375. } else {
  376. msg("未勾选补缴订单!")
  377. }
  378. };
  379. //支付成功改变订单状态
  380. const checkOrder = (orderId) => {
  381. const options = {
  382. type: 2,
  383. data: {
  384. orderId: orderId,
  385. },
  386. method: "POST",
  387. showLoading: true,
  388. };
  389. request(CardBillPayStatus, options).then((res) => {
  390. msg("支付成功!");
  391. getlist()
  392. });
  393. };
  394. onLoad(() => {
  395. getlist()
  396. getOpenID()
  397. console.log(state);
  398. })
  399. onPullDownRefresh(()=>{
  400. getlist()
  401. })
  402. </script>
  403. <style lang="scss">
  404. page {
  405. background: #eef7f7;
  406. }
  407. .content-box {
  408. padding-bottom: 115rpx;
  409. .tips {
  410. font-size: 25rpx;
  411. color: #d2d2d2;
  412. text-align: center;
  413. }
  414. .footer {
  415. display: flex;
  416. align-items: center;
  417. padding: 0 30rpx;
  418. background: #fff;
  419. height: 100rpx;
  420. border-top: 1rpx solid #cdcdcd;
  421. position: fixed;
  422. bottom: 0;
  423. width: 100%;
  424. box-sizing: border-box;
  425. .footer-right {
  426. align-items: center;
  427. display: flex;
  428. justify-content: flex-end;
  429. flex: 1;
  430. .row1 {
  431. font-size: 29rpx;
  432. }
  433. .btn {
  434. text-align: center;
  435. width: 150rpx;
  436. height: 60rpx;
  437. background: #13E7C1;
  438. line-height: 60rpx;
  439. border-radius: 10rpx;
  440. font-size: 29rpx;
  441. color: #fff;
  442. margin-left: 30rpx;
  443. }
  444. }
  445. }
  446. }
  447. .search-btn {
  448. color: white;
  449. background-color: #00B38B;
  450. width: 140rpx;
  451. height: 75rpx;
  452. line-height: 75rpx;
  453. font-size: 32rpx;
  454. border-radius: 40rpx;
  455. text-align: center;
  456. margin-right: 30rpx;
  457. margin-top: 10rpx;
  458. }
  459. .search-box {
  460. margin: 30rpx 30rpx 20rpx 30rpx;
  461. height: 72rpx;
  462. height: 81rpx;
  463. background: #FFFFFF;
  464. border: 1px solid #DCDCDC;
  465. border-radius: 40rpx;
  466. display: flex;
  467. justify-content: center;
  468. align-items: center;
  469. box-sizing: border-box;
  470. flex: 1;
  471. }
  472. .search-box .icon {
  473. width: 48rpx;
  474. height: 48rpx;
  475. margin: 0 20rpx;
  476. }
  477. .search-box .search {
  478. flex: 1;
  479. margin-right: 20rpx;
  480. height: 100%;
  481. padding: 0 10rpx;
  482. font-size: 28rpx;
  483. color: #00b38b;
  484. }
  485. .scroll-view {
  486. white-space: nowrap;
  487. position: sticky;
  488. top: 0;
  489. background: #ffffff;
  490. box-shadow: 0rpx 2rpx 6rpx 0rpx rgba(223, 223, 223, 0.8);
  491. }
  492. .top-menu {
  493. display: flex;
  494. }
  495. .top-menu .tab {
  496. font-size: 26rpx;
  497. padding: 38rpx 30rpx;
  498. color: #333;
  499. position: relative;
  500. }
  501. .top-menu .active .border {
  502. position: absolute;
  503. width: 70%;
  504. height: 16rpx;
  505. background: #00b38b;
  506. opacity: 0.3;
  507. bottom: 40rpx;
  508. z-index: -99;
  509. left: 15%;
  510. border-radius: 6rpx;
  511. }
  512. .top-menu .active {
  513. font-weight: bold;
  514. font-size: 28rpx;
  515. }
  516. .top-menu .active::before {
  517. width: 100%;
  518. height: 16rpx;
  519. background: #00b38b;
  520. opacity: 0.3;
  521. }
  522. .search-time {
  523. display: flex;
  524. margin: 20rpx 30rpx 48rpx 30rpx;
  525. justify-content: space-between;
  526. .time-btn {
  527. width: 130rpx;
  528. height: 80rpx;
  529. background: #00B38B;
  530. border-radius: 40rpx;
  531. color: #FFFFFF;
  532. font-size: 32rpx;
  533. line-height: 80rpx;
  534. text-align: center;
  535. }
  536. .show-info {
  537. width: 260rpx;
  538. height: 80rpx;
  539. padding: 0 31rpx;
  540. background: #FFFFFF;
  541. border: 1px solid #DCDCDC;
  542. border-radius: 40rpx;
  543. display: flex;
  544. justify-content: space-between;
  545. align-items: center;
  546. .show-text {
  547. display: flex;
  548. align-items: center;
  549. }
  550. .date-text {
  551. color: #999999;
  552. font-size: 28rpx;
  553. }
  554. .text-val {
  555. color: #333
  556. }
  557. .line {
  558. width: 25rpx;
  559. height: 1rpx;
  560. background: #999999;
  561. margin: 0 24rpx;
  562. }
  563. }
  564. .show-info2 {
  565. width: 541rpx;
  566. height: 80rpx;
  567. padding: 0 31rpx;
  568. background: #FFFFFF;
  569. border: 1px solid #DCDCDC;
  570. border-radius: 40rpx;
  571. display: flex;
  572. justify-content: space-between;
  573. align-items: center;
  574. .show-text {
  575. display: flex;
  576. align-items: center;
  577. flex: 1;
  578. justify-content: space-evenly;
  579. }
  580. .date-text {
  581. color: #999999;
  582. font-size: 28rpx;
  583. }
  584. .text-val {
  585. color: #333
  586. }
  587. .line {
  588. width: 25rpx;
  589. height: 1rpx;
  590. background: #999999;
  591. margin: 0 24rpx;
  592. }
  593. }
  594. }
  595. .count {
  596. margin: 0 30rpx 25rpx 30rpx;
  597. font-size: 28rpx;
  598. font-family: Noto Sans S Chinese;
  599. font-weight: 400;
  600. color: #999999;
  601. line-height: 36rpx;
  602. }
  603. .search-payment-box {
  604. width: 260rpx;
  605. height: 80rpx;
  606. padding: 0 31rpx;
  607. background: #FFFFFF;
  608. border: 1px solid #DCDCDC;
  609. border-radius: 40rpx;
  610. display: flex;
  611. justify-content: space-between;
  612. align-items: center;
  613. color: #999999;
  614. }
  615. .list {
  616. padding: 0 30rpx;
  617. display: flex;
  618. flex-direction: column;
  619. }
  620. .bg-white {
  621. background: #FFFFFF;
  622. border-radius: 30rpx 30rpx 0 0;
  623. }
  624. .bg-white .sub-tabs {
  625. display: flex;
  626. justify-content: space-evenly;
  627. align-items: center;
  628. }
  629. .bg-white .sub-item {
  630. padding: 10rpx 0;
  631. margin: 20rpx 0 30rpx;
  632. border-bottom: 6rpx solid #fff;
  633. font-size: 26rpx;
  634. }
  635. .bg-white .active {
  636. border-bottom: 6rpx solid #00B38B;
  637. color: #00B38B;
  638. font-size: 30rpx;
  639. font-weight: bold;
  640. }
  641. .bg-none {
  642. background: none;
  643. border-radius: 30rpx 30rpx 0 0;
  644. }
  645. .list .item {
  646. background: #ffffff;
  647. box-shadow: 0rpx 2rpx 6rpx 0rpx rgba(223, 223, 223, 0.8);
  648. border-radius: 20rpx;
  649. box-sizing: border-box;
  650. display: flex;
  651. flex-direction: column;
  652. margin-bottom: 30rpx;
  653. }
  654. .list.bg-white .item {
  655. box-shadow: 0rpx 4rpx 13rpx 3rpx rgba(223, 223, 223, 0.8);
  656. }
  657. .list .item .head {
  658. display: flex;
  659. justify-content: space-between;
  660. align-items: center;
  661. padding: 20rpx 28rpx;
  662. border-bottom: 1px solid #dcdcdc;
  663. }
  664. .list .item .head {
  665. .head-row {
  666. display: flex;
  667. width: 100%;
  668. justify-content: space-between;
  669. align-items: center;
  670. }
  671. .name {}
  672. .name>text {
  673. font-size: 25rpx;
  674. font-family: Noto Sans S Chinese;
  675. font-weight: 400;
  676. color: #999999;
  677. line-height: 36rpx;
  678. }
  679. }
  680. .list .item .head .icon {
  681. width: 48rpx;
  682. height: 48rpx;
  683. }
  684. .list .item .head .name {
  685. display: flex;
  686. align-items: center;
  687. }
  688. .list .text-green {
  689. font-size: 26rpx;
  690. color: #00b38b;
  691. }
  692. .list .text-orange {
  693. font-size: 26rpx;
  694. color: #ff8000;
  695. }
  696. .list .text-black {
  697. font-size: 28rpx;
  698. color: #333;
  699. font-weight: 500;
  700. }
  701. .list .title {
  702. font-size: 30rpx;
  703. color: #333;
  704. }
  705. .list .tag-green {
  706. font-size: 22rpx;
  707. height: 40rpx;
  708. line-height: 40rpx;
  709. padding: 0 12rpx;
  710. border-radius: 6rpx;
  711. background: #d9f4ee;
  712. color: #00b38b;
  713. }
  714. .list .tag-grey {
  715. font-size: 22rpx;
  716. height: 40rpx;
  717. line-height: 40rpx;
  718. padding: 0 12rpx;
  719. border-radius: 6rpx;
  720. background: #e8e8e8;
  721. color: #666;
  722. }
  723. .list .detail {
  724. display: flex;
  725. justify-content: space-between;
  726. align-items: center;
  727. padding: 30rpx 32rpx;
  728. }
  729. .list .detail1 {
  730. display: flex;
  731. justify-content: space-between;
  732. align-items: center;
  733. padding: 0rpx 32rpx 30rpx 32rpx;
  734. .order-text1 {
  735. display: flex;
  736. flex-direction: column;
  737. width: 50%;
  738. .type {
  739. font-size: 26rpx;
  740. color: #999;
  741. }
  742. .value {
  743. font-size: 26rpx;
  744. color: #333;
  745. }
  746. }
  747. }
  748. .list .detail .type {
  749. font-size: 26rpx;
  750. color: #999;
  751. }
  752. .list .detail .value {
  753. font-size: 26rpx;
  754. color: #333;
  755. }
  756. .list .finished .detail .value {
  757. color: #999;
  758. }
  759. .list .detail .odd {
  760. margin: 20rpx 0;
  761. }
  762. .list .cny {
  763. font-size: 26rpx;
  764. color: #333;
  765. }
  766. .list .finished .cny {
  767. color: #999;
  768. }
  769. .list .amount {
  770. font-size: 40rpx;
  771. font-weight: bold;
  772. }
  773. .list .bottom .amount {
  774. color: #ff8000;
  775. }
  776. .list .finished .amount {
  777. color: #999;
  778. }
  779. .list .btns {
  780. position: relative;
  781. display: flex;
  782. align-items: center;
  783. justify-content: flex-end;
  784. border-top: 1px solid #dcdcdc;
  785. margin: 0 30rpx;
  786. padding: 20rpx 0;
  787. }
  788. .list .bottom {
  789. display: flex;
  790. border-top: 1px solid #dcdcdc;
  791. margin: 0 30rpx;
  792. padding: 20rpx 0;
  793. flex-direction: column;
  794. align-items: flex-start;
  795. .tit {
  796. font-size: 30rpx;
  797. }
  798. .tit1 {
  799. font-size: 26rpx;
  800. color: #999;
  801. }
  802. .amount1 {
  803. font-size: 26rpx;
  804. color: #333;
  805. }
  806. }
  807. .list .btn {
  808. height: 60rpx;
  809. line-height: 58rpx;
  810. border-radius: 30rpx;
  811. padding: 0 24rpx;
  812. font-size: 26rpx;
  813. box-sizing: border-box;
  814. margin-right: 20rpx;
  815. }
  816. .list .btns .btn:last-child {
  817. margin: 0;
  818. }
  819. .list .btns .state {
  820. position: absolute;
  821. left: 0;
  822. font-size: 26rpx;
  823. font-family: Noto Sans S Chinese;
  824. font-weight: 400;
  825. color: #999999;
  826. line-height: 58rpx;
  827. text {
  828. font-size: 26rpx;
  829. font-family: Noto Sans S Chinese;
  830. font-weight: 400;
  831. color: #00B38B;
  832. line-height: 58rpx;
  833. }
  834. }
  835. .list .btn-primary {
  836. border: 1px solid #00b38b;
  837. color: #00b38b;
  838. }
  839. .list .btn-disable {
  840. border: 1px solid #999;
  841. color: #999;
  842. }
  843. .list .btn-normal {
  844. border: 1px solid #dcdcdc;
  845. color: #333;
  846. }
  847. .m-10 {
  848. margin: 0 10rpx;
  849. }
  850. //
  851. .detail2 {
  852. display: flex;
  853. justify-content: space-between;
  854. align-items: center;
  855. padding: 30rpx 32rpx;
  856. position: relative;
  857. view {
  858. text-align: center;
  859. text {
  860. display: block;
  861. margin: 20rpx 0;
  862. }
  863. view {
  864. font-size: 24rpx;
  865. font-family: Noto Sans S Chinese;
  866. font-weight: 400;
  867. color: #999999;
  868. line-height: 36rpx;
  869. text {
  870. margin: 0;
  871. }
  872. }
  873. }
  874. .indicator {
  875. position: absolute;
  876. left: 50%;
  877. top: 50%;
  878. transform: translate(-50%, -50%);
  879. display: flex;
  880. flex-direction: column;
  881. text {
  882. margin: 0;
  883. font-size: 26rpx;
  884. font-family: Noto Sans S Chinese;
  885. font-weight: 400;
  886. color: #666666;
  887. line-height: 36rpx;
  888. }
  889. image {
  890. width: 186rpx;
  891. height: 12rpx;
  892. }
  893. }
  894. .state {
  895. position: absolute;
  896. left: 0;
  897. font-size: 26rpx;
  898. font-family: Noto Sans S Chinese;
  899. font-weight: 400;
  900. color: #999999;
  901. line-height: 58rpx;
  902. }
  903. }
  904. .emptyView {
  905. margin-top: 120rpx;
  906. }
  907. </style>