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 19KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009
  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. checkOrder();
  295. },
  296. fail: function(err) {
  297. confirm(err, () => {}, "支付失败", false);
  298. },
  299. });
  300. });
  301. // #endif
  302. // #ifdef MP-ALIPAY
  303. my.getAuthCode({
  304. scopes: 'auth_user',
  305. success: res => {
  306. const optionsUser = {
  307. type: 2,
  308. data: {
  309. payConfigId: aliPayConfigId,
  310. code: res.authCode
  311. },
  312. method: "POST",
  313. showLoading: true,
  314. };
  315. console.log('支付宝用户编号请求:',optionsUser)
  316. request(obtainUserId, optionsUser).then((res) => {
  317. console.log('支付宝用户编号返回:',res)
  318. const data = stringToJson(res.bizContent);
  319. const optionsali = {
  320. type: 2,
  321. data: {
  322. openid: data.userId,
  323. suppleNoList: state.suppleNoList,
  324. totalFee: allPrice.value * 100,
  325. payConfigId: aliPayConfigId,
  326. },
  327. method: "POST",
  328. showLoading: true,
  329. };
  330. console.log('支付下单请求:',optionsali)
  331. request(CardBillPlaceOrder, optionsali).then((res) => {
  332. console.log('支付下单返回:',res)
  333. const data = stringToJson(res.bizContent);
  334. state.orderId = data.orderId
  335. my.tradePay ({
  336. // 调用统一收单交易创建接口(alipay.trade.create),获得返回字段支付宝交易号 trade_no
  337. tradeNO: data.prepayId,
  338. success: res => {
  339. console.log("支付成功", res);
  340. checkOrder();
  341. },
  342. fail: res => {
  343. confirm(res, () => {}, "支付失败", false);
  344. },
  345. });
  346. });
  347. });
  348. },
  349. fail: err => {
  350. console.log('my.getAuthCode 调用失败', err)
  351. }
  352. });
  353. // #endif
  354. } else {
  355. msg("未勾选补缴订单!")
  356. }
  357. };
  358. //支付成功改变订单状态
  359. const checkOrder = () => {
  360. const options = {
  361. type: 2,
  362. data: {
  363. orderId: state.orderId,
  364. },
  365. method: "POST",
  366. showLoading: true,
  367. };
  368. request(CardBillPayStatus, options).then((res) => {
  369. msg("支付成功!");
  370. getlist()
  371. });
  372. };
  373. onLoad(() => {
  374. getlist()
  375. getOpenID()
  376. console.log(state);
  377. })
  378. onPullDownRefresh(()=>{
  379. getlist()
  380. })
  381. </script>
  382. <style lang="scss">
  383. page {
  384. background: #eef7f7;
  385. }
  386. .content-box {
  387. padding-bottom: 115rpx;
  388. .tips {
  389. font-size: 25rpx;
  390. color: #d2d2d2;
  391. text-align: center;
  392. }
  393. .footer {
  394. display: flex;
  395. align-items: center;
  396. padding: 0 30rpx;
  397. background: #fff;
  398. height: 100rpx;
  399. border-top: 1rpx solid #cdcdcd;
  400. position: fixed;
  401. bottom: 0;
  402. width: 100%;
  403. box-sizing: border-box;
  404. .footer-right {
  405. align-items: center;
  406. display: flex;
  407. justify-content: flex-end;
  408. flex: 1;
  409. .row1 {
  410. font-size: 29rpx;
  411. }
  412. .btn {
  413. text-align: center;
  414. width: 150rpx;
  415. height: 60rpx;
  416. background: #13E7C1;
  417. line-height: 60rpx;
  418. border-radius: 10rpx;
  419. font-size: 29rpx;
  420. color: #fff;
  421. margin-left: 30rpx;
  422. }
  423. }
  424. }
  425. }
  426. .search-btn {
  427. color: white;
  428. background-color: #00B38B;
  429. width: 140rpx;
  430. height: 75rpx;
  431. line-height: 75rpx;
  432. font-size: 32rpx;
  433. border-radius: 40rpx;
  434. text-align: center;
  435. margin-right: 30rpx;
  436. margin-top: 10rpx;
  437. }
  438. .search-box {
  439. margin: 30rpx 30rpx 20rpx 30rpx;
  440. height: 72rpx;
  441. height: 81rpx;
  442. background: #FFFFFF;
  443. border: 1px solid #DCDCDC;
  444. border-radius: 40rpx;
  445. display: flex;
  446. justify-content: center;
  447. align-items: center;
  448. box-sizing: border-box;
  449. flex: 1;
  450. }
  451. .search-box .icon {
  452. width: 48rpx;
  453. height: 48rpx;
  454. margin: 0 20rpx;
  455. }
  456. .search-box .search {
  457. flex: 1;
  458. margin-right: 20rpx;
  459. height: 100%;
  460. padding: 0 10rpx;
  461. font-size: 28rpx;
  462. color: #00b38b;
  463. }
  464. .scroll-view {
  465. white-space: nowrap;
  466. position: sticky;
  467. top: 0;
  468. background: #ffffff;
  469. box-shadow: 0rpx 2rpx 6rpx 0rpx rgba(223, 223, 223, 0.8);
  470. }
  471. .top-menu {
  472. display: flex;
  473. }
  474. .top-menu .tab {
  475. font-size: 26rpx;
  476. padding: 38rpx 30rpx;
  477. color: #333;
  478. position: relative;
  479. }
  480. .top-menu .active .border {
  481. position: absolute;
  482. width: 70%;
  483. height: 16rpx;
  484. background: #00b38b;
  485. opacity: 0.3;
  486. bottom: 40rpx;
  487. z-index: -99;
  488. left: 15%;
  489. border-radius: 6rpx;
  490. }
  491. .top-menu .active {
  492. font-weight: bold;
  493. font-size: 28rpx;
  494. }
  495. .top-menu .active::before {
  496. width: 100%;
  497. height: 16rpx;
  498. background: #00b38b;
  499. opacity: 0.3;
  500. }
  501. .search-time {
  502. display: flex;
  503. margin: 20rpx 30rpx 48rpx 30rpx;
  504. justify-content: space-between;
  505. .time-btn {
  506. width: 130rpx;
  507. height: 80rpx;
  508. background: #00B38B;
  509. border-radius: 40rpx;
  510. color: #FFFFFF;
  511. font-size: 32rpx;
  512. line-height: 80rpx;
  513. text-align: center;
  514. }
  515. .show-info {
  516. width: 260rpx;
  517. height: 80rpx;
  518. padding: 0 31rpx;
  519. background: #FFFFFF;
  520. border: 1px solid #DCDCDC;
  521. border-radius: 40rpx;
  522. display: flex;
  523. justify-content: space-between;
  524. align-items: center;
  525. .show-text {
  526. display: flex;
  527. align-items: center;
  528. }
  529. .date-text {
  530. color: #999999;
  531. font-size: 28rpx;
  532. }
  533. .text-val {
  534. color: #333
  535. }
  536. .line {
  537. width: 25rpx;
  538. height: 1rpx;
  539. background: #999999;
  540. margin: 0 24rpx;
  541. }
  542. }
  543. .show-info2 {
  544. width: 541rpx;
  545. height: 80rpx;
  546. padding: 0 31rpx;
  547. background: #FFFFFF;
  548. border: 1px solid #DCDCDC;
  549. border-radius: 40rpx;
  550. display: flex;
  551. justify-content: space-between;
  552. align-items: center;
  553. .show-text {
  554. display: flex;
  555. align-items: center;
  556. flex: 1;
  557. justify-content: space-evenly;
  558. }
  559. .date-text {
  560. color: #999999;
  561. font-size: 28rpx;
  562. }
  563. .text-val {
  564. color: #333
  565. }
  566. .line {
  567. width: 25rpx;
  568. height: 1rpx;
  569. background: #999999;
  570. margin: 0 24rpx;
  571. }
  572. }
  573. }
  574. .count {
  575. margin: 0 30rpx 25rpx 30rpx;
  576. font-size: 28rpx;
  577. font-family: Noto Sans S Chinese;
  578. font-weight: 400;
  579. color: #999999;
  580. line-height: 36rpx;
  581. }
  582. .search-payment-box {
  583. width: 260rpx;
  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. color: #999999;
  593. }
  594. .list {
  595. padding: 0 30rpx;
  596. display: flex;
  597. flex-direction: column;
  598. }
  599. .bg-white {
  600. background: #FFFFFF;
  601. border-radius: 30rpx 30rpx 0 0;
  602. }
  603. .bg-white .sub-tabs {
  604. display: flex;
  605. justify-content: space-evenly;
  606. align-items: center;
  607. }
  608. .bg-white .sub-item {
  609. padding: 10rpx 0;
  610. margin: 20rpx 0 30rpx;
  611. border-bottom: 6rpx solid #fff;
  612. font-size: 26rpx;
  613. }
  614. .bg-white .active {
  615. border-bottom: 6rpx solid #00B38B;
  616. color: #00B38B;
  617. font-size: 30rpx;
  618. font-weight: bold;
  619. }
  620. .bg-none {
  621. background: none;
  622. border-radius: 30rpx 30rpx 0 0;
  623. }
  624. .list .item {
  625. background: #ffffff;
  626. box-shadow: 0rpx 2rpx 6rpx 0rpx rgba(223, 223, 223, 0.8);
  627. border-radius: 20rpx;
  628. box-sizing: border-box;
  629. display: flex;
  630. flex-direction: column;
  631. margin-bottom: 30rpx;
  632. }
  633. .list.bg-white .item {
  634. box-shadow: 0rpx 4rpx 13rpx 3rpx rgba(223, 223, 223, 0.8);
  635. }
  636. .list .item .head {
  637. display: flex;
  638. justify-content: space-between;
  639. align-items: center;
  640. padding: 20rpx 28rpx;
  641. border-bottom: 1px solid #dcdcdc;
  642. }
  643. .list .item .head {
  644. .head-row {
  645. display: flex;
  646. width: 100%;
  647. justify-content: space-between;
  648. align-items: center;
  649. }
  650. .name {}
  651. .name>text {
  652. font-size: 25rpx;
  653. font-family: Noto Sans S Chinese;
  654. font-weight: 400;
  655. color: #999999;
  656. line-height: 36rpx;
  657. }
  658. }
  659. .list .item .head .icon {
  660. width: 48rpx;
  661. height: 48rpx;
  662. }
  663. .list .item .head .name {
  664. display: flex;
  665. align-items: center;
  666. }
  667. .list .text-green {
  668. font-size: 26rpx;
  669. color: #00b38b;
  670. }
  671. .list .text-orange {
  672. font-size: 26rpx;
  673. color: #ff8000;
  674. }
  675. .list .text-black {
  676. font-size: 28rpx;
  677. color: #333;
  678. font-weight: 500;
  679. }
  680. .list .title {
  681. font-size: 30rpx;
  682. color: #333;
  683. }
  684. .list .tag-green {
  685. font-size: 22rpx;
  686. height: 40rpx;
  687. line-height: 40rpx;
  688. padding: 0 12rpx;
  689. border-radius: 6rpx;
  690. background: #d9f4ee;
  691. color: #00b38b;
  692. }
  693. .list .tag-grey {
  694. font-size: 22rpx;
  695. height: 40rpx;
  696. line-height: 40rpx;
  697. padding: 0 12rpx;
  698. border-radius: 6rpx;
  699. background: #e8e8e8;
  700. color: #666;
  701. }
  702. .list .detail {
  703. display: flex;
  704. justify-content: space-between;
  705. align-items: center;
  706. padding: 30rpx 32rpx;
  707. }
  708. .list .detail1 {
  709. display: flex;
  710. justify-content: space-between;
  711. align-items: center;
  712. padding: 0rpx 32rpx 30rpx 32rpx;
  713. .order-text1 {
  714. display: flex;
  715. flex-direction: column;
  716. width: 50%;
  717. .type {
  718. font-size: 26rpx;
  719. color: #999;
  720. }
  721. .value {
  722. font-size: 26rpx;
  723. color: #333;
  724. }
  725. }
  726. }
  727. .list .detail .type {
  728. font-size: 26rpx;
  729. color: #999;
  730. }
  731. .list .detail .value {
  732. font-size: 26rpx;
  733. color: #333;
  734. }
  735. .list .finished .detail .value {
  736. color: #999;
  737. }
  738. .list .detail .odd {
  739. margin: 20rpx 0;
  740. }
  741. .list .cny {
  742. font-size: 26rpx;
  743. color: #333;
  744. }
  745. .list .finished .cny {
  746. color: #999;
  747. }
  748. .list .amount {
  749. font-size: 40rpx;
  750. font-weight: bold;
  751. }
  752. .list .bottom .amount {
  753. color: #ff8000;
  754. }
  755. .list .finished .amount {
  756. color: #999;
  757. }
  758. .list .btns {
  759. position: relative;
  760. display: flex;
  761. align-items: center;
  762. justify-content: flex-end;
  763. border-top: 1px solid #dcdcdc;
  764. margin: 0 30rpx;
  765. padding: 20rpx 0;
  766. }
  767. .list .bottom {
  768. display: flex;
  769. border-top: 1px solid #dcdcdc;
  770. margin: 0 30rpx;
  771. padding: 20rpx 0;
  772. flex-direction: column;
  773. align-items: flex-start;
  774. .tit {
  775. font-size: 30rpx;
  776. }
  777. .tit1 {
  778. font-size: 26rpx;
  779. color: #999;
  780. }
  781. .amount1 {
  782. font-size: 26rpx;
  783. color: #333;
  784. }
  785. }
  786. .list .btn {
  787. height: 60rpx;
  788. line-height: 58rpx;
  789. border-radius: 30rpx;
  790. padding: 0 24rpx;
  791. font-size: 26rpx;
  792. box-sizing: border-box;
  793. margin-right: 20rpx;
  794. }
  795. .list .btns .btn:last-child {
  796. margin: 0;
  797. }
  798. .list .btns .state {
  799. position: absolute;
  800. left: 0;
  801. font-size: 26rpx;
  802. font-family: Noto Sans S Chinese;
  803. font-weight: 400;
  804. color: #999999;
  805. line-height: 58rpx;
  806. text {
  807. font-size: 26rpx;
  808. font-family: Noto Sans S Chinese;
  809. font-weight: 400;
  810. color: #00B38B;
  811. line-height: 58rpx;
  812. }
  813. }
  814. .list .btn-primary {
  815. border: 1px solid #00b38b;
  816. color: #00b38b;
  817. }
  818. .list .btn-disable {
  819. border: 1px solid #999;
  820. color: #999;
  821. }
  822. .list .btn-normal {
  823. border: 1px solid #dcdcdc;
  824. color: #333;
  825. }
  826. .m-10 {
  827. margin: 0 10rpx;
  828. }
  829. //
  830. .detail2 {
  831. display: flex;
  832. justify-content: space-between;
  833. align-items: center;
  834. padding: 30rpx 32rpx;
  835. position: relative;
  836. view {
  837. text-align: center;
  838. text {
  839. display: block;
  840. margin: 20rpx 0;
  841. }
  842. view {
  843. font-size: 24rpx;
  844. font-family: Noto Sans S Chinese;
  845. font-weight: 400;
  846. color: #999999;
  847. line-height: 36rpx;
  848. text {
  849. margin: 0;
  850. }
  851. }
  852. }
  853. .indicator {
  854. position: absolute;
  855. left: 50%;
  856. top: 50%;
  857. transform: translate(-50%, -50%);
  858. display: flex;
  859. flex-direction: column;
  860. text {
  861. margin: 0;
  862. font-size: 26rpx;
  863. font-family: Noto Sans S Chinese;
  864. font-weight: 400;
  865. color: #666666;
  866. line-height: 36rpx;
  867. }
  868. image {
  869. width: 186rpx;
  870. height: 12rpx;
  871. }
  872. }
  873. .state {
  874. position: absolute;
  875. left: 0;
  876. font-size: 26rpx;
  877. font-family: Noto Sans S Chinese;
  878. font-weight: 400;
  879. color: #999999;
  880. line-height: 58rpx;
  881. }
  882. }
  883. .emptyView {
  884. margin-top: 120rpx;
  885. }
  886. </style>