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.

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