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

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