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.

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