applylist.vue 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712
  1. <template>
  2. <view class="pages">
  3. <u-navbar
  4. title="报名记录"
  5. :placeholder="true"
  6. :autoBack="false"
  7. @leftClick="leftClick"
  8. :safeAreaInsetTop="true"
  9. bgColor="#ED0000"
  10. :titleStyle="{color:'#fff'}"
  11. leftIconColor="#fff"
  12. >
  13. </u-navbar>
  14. <view class="tabs-wrap">
  15. <u-tabs
  16. :list="tabsList"
  17. lineColor="#EE0D0D"
  18. :current="tabsCurrent"
  19. :activeStyle="{color:'#EE0D0D','font-weight': '600','font-size':'30rpx'}"
  20. :inactiveStyle="{color:'#7F7F7F'}"
  21. itemStyle="width:25%;box-sizing:border-box;padding:24rpx"
  22. @click="tabsClick"></u-tabs>
  23. </view>
  24. <view class="page-wrap">
  25. <mescroll-body class="" ref="mescrollRef" @init="mescrollInit" @down="downCallback" @up="upCallback" :down="downOption" :up="upOption">
  26. <view class="order">
  27. <view v-for="(item,index) in orderListWithClass" class="order-item"
  28. :class="item.class"
  29. @click="goDetails(item)" :key="item.id">
  30. <view class="top u-flex u-row-between">
  31. <text>{{item.theatreName}}</text>
  32. <text>{{item.status|filterApplyState}}</text>
  33. </view>
  34. <view class="info u-flex u-col-top">
  35. <image class="img" :src="item.performImg"></image>
  36. <view class="text">
  37. <view class="name">{{item.performName}}</view>
  38. <view class="time">{{item.performDate}} {{item.performTimeStart}}</view>
  39. <view class="position">{{item.goodsName}}/{{item.seatTypeName}}</view>
  40. <view class="statistics">
  41. <text>共{{item.viewerNum}}张</text>
  42. <text class="label">合计:</text>
  43. <text class="price">¥{{item.priceTotal}}</text>
  44. </view>
  45. </view>
  46. </view>
  47. <view class="btn-wrap u-flex u-row-right">
  48. <view
  49. class="btn"
  50. :class="btn.class"
  51. @click.stop="clickEven(btn.fun,item)"
  52. v-for="(btn,index) in statusBtn[item.status]" :key="index">
  53. {{btn.name}}
  54. </view>
  55. </view>
  56. </view>
  57. </view>
  58. </mescroll-body>
  59. </view>
  60. <u-toast ref="uToast"></u-toast>
  61. <tabbar :tabbarIndexProps="1" />
  62. </view>
  63. </template>
  64. <script>
  65. import tabbar from "../components/tabbar.vue";
  66. // 引入mescroll-mixins.js
  67. import MescrollMixin from "@/uni_modules/mescroll-uni/components/mescroll-uni/mescroll-mixins.js";
  68. // #ifdef H5
  69. import wxH5 from "weixin-jsapi";
  70. // #endif
  71. export default {
  72. mixins: [MescrollMixin], // 使用mixin
  73. components:{
  74. tabbar
  75. },
  76. data() {
  77. return {
  78. downOption: {
  79. },
  80. // 上拉加载的配置(可选, 绝大部分情况无需配置)
  81. upOption: {
  82. // page: {
  83. // size: 10 // 每页数据的数量,默认10
  84. // },
  85. // noMoreSize: 5, // 配置列表的总数量要大于等于5条才显示'-- END --'的提示
  86. // empty: {
  87. // tip: '暂无相关数据'
  88. // }
  89. },
  90. staticUrl:this.$commonConfig.staticUrl,
  91. goodsKey:1,
  92. hasfetch:false,
  93. tabsCurrent:1,
  94. tabsList:[
  95. {name:'全部',status:null,},
  96. {name:'待审核',status:'0',badge:{isDot:false,value:null}},
  97. {name:'审核成功',status:'1',badge:{isDot:false,value:null}},
  98. {name:'审核失败',status:'2',badge:{isDot:false,value:null}}
  99. ],
  100. status:'',
  101. dataList:[],
  102. statusBtn:{// 状态(0待支付,2超时取消,3支付完成,待使用,4退款中,5己退款,6退款失败,7己使用,8己超期 9关闭)
  103. 0:[{name:'取消申请',fun:'cancelApply',class:''},{name:'查看详情',fun:'goApplyDetails',class:''}],
  104. 1:[{name:'订单列表',fun:'goOrderDetails',class:'red'}],
  105. 2:[{name:'查看详情',fun:'goApplyDetails',class:''}],
  106. 3:[],
  107. //,{name:'评价',fun:'evaluate',class:'green'}
  108. 4:[],
  109. 5:[],
  110. 6:[],
  111. // ,{name:'查看评价',fun:'viewEvaluate',class:'green'}
  112. 7:[],
  113. 8:[],
  114. 9:[]
  115. },
  116. orderBadge:{
  117. noPayNum:0,
  118. deliverNum:0,
  119. collectNum:0,
  120. commentNum:0,
  121. refundNum:0,
  122. },
  123. templateIdList:[],//微信小程序订阅消息
  124. }
  125. },
  126. computed: {
  127. orderListWithClass() {
  128. return this.dataList.map(order => {
  129. // let spliceData = order.detailList.splice(0,2);
  130. // let moreData = order.detailList.splice(2,order.detailList.length);
  131. // let moreData = order.detailList.slice(2);
  132. // if(order.detailList.length>2){
  133. // moreData = order.detailList;
  134. // }
  135. return {
  136. ...order,
  137. // spliceData:spliceData,
  138. // moreData:moreData,
  139. // showMore:false,
  140. class: {
  141. 0: 'status-0',
  142. 1: 'status-1',
  143. 2: 'status-2',
  144. 3: 'status-3',
  145. 4: 'status-4',
  146. 5: 'status-5',
  147. 6: 'status-6',
  148. 7: 'status-7',
  149. 8: 'status-8'
  150. }[order.status] || ''
  151. }
  152. })
  153. }
  154. },
  155. onLoad(page) {
  156. // console.log('page',page);
  157. const status = page.status;
  158. const index = this.tabsList.findIndex(item => item.status === status);
  159. this.tabsCurrent = index>=0?index:0;
  160. // this.getTemplateIdList();//获取模板列表
  161. },
  162. onShow() {
  163. setTimeout(()=>{
  164. this.hasfetch&&this.reloadList()
  165. },500);
  166. // this.statisticsOrder();
  167. },
  168. methods: {
  169. leftClick(){
  170. uni.reLaunch({url: '/center/center'});
  171. },
  172. /*下拉刷新的回调, 重置列表为第一页 (此处可删,mixins已默认)
  173. downCallback(){
  174. this.mescroll.resetUpScroll();
  175. },
  176. /*上拉加载的回调*/
  177. upCallback(page) {
  178. // this.statisticsOrder();
  179. // 此处可以继续请求其他接口
  180. // if(page.num == 1){
  181. // // 请求其他接口...
  182. // }
  183. // 如果希望先请求其他接口,再触发upCallback,可参考以下写法
  184. // if(!this.hasTypeId){
  185. // this.shopNewsType();
  186. // return // 此处return,先获取xx
  187. // }
  188. let pageNum = page.num; // 页码, 默认从1开始
  189. let pageSize = page.size; // 页长, 默认每页10条
  190. let params = {
  191. pageNum : page.num,
  192. pageSize : page.size,
  193. statusIn : this.tabsList[this.tabsCurrent]?.status||'',
  194. userid:this.vuex_member_info.id
  195. // status : this.tabsList[this.tabsCurrent].status,
  196. }
  197. // console.log('this.params',params);
  198. this.$u.api.teamApplyList(params).then(data => {
  199. this.hasfetch = true;
  200. console.log('data',JSON.parse(JSON.stringify(data)));
  201. // 接口返回的当前页数据列表 (数组)
  202. let curPageData = data.data.rows;
  203. // console.log('curPageData',JSON.parse(JSON.stringify(curPageData)));
  204. // 接口返回的当前页数据长度 (如列表有26个数据,当前页返回8个,则curPageLen=8)
  205. let curPageLen = curPageData.length;
  206. // 接口返回的总页数 (如列表有26个数据,每页10条,共3页; 则totalPage=3)
  207. // let totalPage = data.data.data.totalPage;
  208. // 接口返回的总数据量(如列表有26个数据,每页10条,共3页; 则totalSize=26)
  209. let totalSize = data.data.total;
  210. // 接口返回的是否有下一页 (true/false)
  211. // let hasNext = data.xxx;
  212. // console.log('totalPage',totalPage,'curPageLen',curPageLen);
  213. //设置列表数据
  214. if(page.num == 1) this.dataList = []; //如果是第一页需手动置空列表
  215. this.dataList = this.dataList.concat(curPageData); //追加新数据
  216. // 请求成功,隐藏加载状态
  217. //方法一(推荐): 后台接口有返回列表的总页数 totalPage
  218. // this.mescroll.endByPage(curPageLen, totalPage);
  219. //方法二(推荐): 后台接口有返回列表的总数据量 totalSize
  220. this.mescroll.endBySize(curPageLen, totalSize);
  221. }).catch(err => {
  222. this.mescroll.endErr()
  223. console.log(err)
  224. });
  225. },
  226. /*若希望重新加载列表,只需调用此方法即可(内部会自动page.num=1,再主动触发up.callback)*/
  227. reloadList() {
  228. this.mescroll.resetUpScroll();
  229. },
  230. tabsClick(item){
  231. // this.status = item.status;
  232. this.tabsCurrent = item.index;
  233. this.reloadList()
  234. // console.log('item',item);
  235. },
  236. goOrderDetails(item){
  237. uni.$u.route('/center/order', {
  238. status: 0
  239. });
  240. // uni.$u.route('/center/orderdetails', {
  241. // id: item.id
  242. // });
  243. },
  244. goDetails(item){
  245. console.log('goDetails',item);
  246. if(item.status==1){
  247. this.goOrderDetails(item)
  248. }else{
  249. this.goApplyDetails(item)
  250. }
  251. },
  252. goApplyDetails(item){
  253. uni.$u.route('/center/applydetails', {
  254. id: item.id
  255. });
  256. },
  257. toggleMore(item,index){
  258. // console.log('toggleMore',item);
  259. this.orderListWithClass[index].showMore = !this.orderListWithClass[index].showMore
  260. this.goodsKey++;
  261. },
  262. clickEven(fun,item){
  263. // console.log('fun',fun);
  264. let funObj = {
  265. pay: this.pay,
  266. goOrderDetails:this.goOrderDetails,
  267. goApplyDetails:this.goApplyDetails,
  268. evaluate:this.evaluate,
  269. refund:this.refund,
  270. cancelOrder:this.cancelOrder,
  271. cancelApply:this.cancelApply,
  272. viewRefund:this.viewRefund,
  273. confirmReceipt:this.confirmReceipt,
  274. viewEvaluate:this.viewEvaluate
  275. };
  276. // console.log('funObj[fun]',funObj[fun]);
  277. if (fun in funObj) {
  278. funObj[fun](item);
  279. }
  280. },
  281. getTemplateIdList(){
  282. this.$u.api.templateIdList({templateLabel:'order_pay'}).then(res=>{
  283. console.log('getTemplateIdList',res.data);
  284. this.templateIdList = res.data.list.map(item=>{
  285. return item.templateId
  286. });
  287. // if(this.templateIdList.length>0){
  288. // this.templateEven();
  289. // }
  290. }).catch(err=>{
  291. console.log('getTemplateIdList',err);
  292. })
  293. },
  294. pay(item){
  295. console.log('pay',item);
  296. // #ifdef H5
  297. this.gotoPay(item.id);
  298. // #endif
  299. // #ifdef MP
  300. this.setTemplate(item.id);
  301. // #endif
  302. // uni.$u.route('/shopping/pay', {
  303. // orderId: item.id,
  304. // // openid: that.vuex_wechatOpenid,
  305. // payAmount:item.orderPrice
  306. // });
  307. },
  308. evaluate(item){
  309. // console.log('logistics',item);
  310. uni.$u.route('/shopping/evaluate', {
  311. id: item.id
  312. });
  313. },
  314. comment(orderId,orderDetailId,goodsId){
  315. uni.$u.route('/shopping/addcomment', {
  316. orderId,
  317. orderDetailId,
  318. goodsId
  319. });
  320. },
  321. viewComment(orderDetailId,goodsId,goods){
  322. uni.$u.route('/shopping/viewcomment', {
  323. orderDetailId,
  324. goodsId,
  325. goods:JSON.stringify(goods)
  326. });
  327. },
  328. refund(item){
  329. // console.log('logistics',item);
  330. uni.$u.route('/shopping/refund', {
  331. id: item.id
  332. });
  333. },
  334. cancelOrder(item){
  335. let that = this;
  336. uni.showModal({
  337. title: '提示',
  338. content: '确认取消吗!',
  339. success: res => {
  340. if (res.confirm) {
  341. this.$u.api.cancelOrder({orderId:item.id}).then(res=>{
  342. this.$refs.uToast.show({
  343. message:res.msg,
  344. complete() {
  345. that.reloadList();
  346. }
  347. });
  348. // uni.$u.toast(res.msg);
  349. console.log('res',res.data);
  350. }).catch(err=>{
  351. console.log('cancelOrder',err);
  352. })
  353. }
  354. }
  355. });
  356. // console.log('logistics',item);
  357. },
  358. cancelApply(item){
  359. let that = this;
  360. uni.showModal({
  361. title: '提示',
  362. content: '确认取消吗!',
  363. success: res => {
  364. if (res.confirm) {
  365. this.$u.api.teamApplyClose({applyId:item.id}).then(res=>{
  366. this.$refs.uToast.show({
  367. message:res.msg,
  368. complete() {
  369. that.reloadList();
  370. }
  371. });
  372. // uni.$u.toast(res.msg);
  373. console.log('res',res.data);
  374. }).catch(err=>{
  375. console.log('teamApplyClose',err);
  376. })
  377. }
  378. }
  379. });
  380. },
  381. viewRefund(item){
  382. uni.$u.route('/center/viewRefund', {
  383. orderId: item.id
  384. });
  385. },
  386. confirmReceipt(item){
  387. let that = this;
  388. uni.showModal({
  389. title: '提示',
  390. content: '确认收货吗!',
  391. success: res => {
  392. if (res.confirm) {
  393. this.$u.api.confirmReceipt({orderId:item.id}).then(res=>{
  394. uni.showToast({
  395. title:res.msg,
  396. duration:2000,
  397. complete() {
  398. that.reloadList();
  399. }
  400. });
  401. console.log('res',res.data);
  402. }).catch(err=>{
  403. console.log('confirmReceipt',err);
  404. })
  405. }
  406. }
  407. })
  408. },
  409. viewEvaluate(item){
  410. uni.$u.route('/shopping/orderdetails', {
  411. id: item.id
  412. });
  413. },
  414. // 设置小程序订阅消息
  415. setTemplate(orderId) {
  416. let that = this;
  417. console.log('templateIdList',this.templateIdList);
  418. uni.requestSubscribeMessage({
  419. tmplIds: that.templateIdList,
  420. success (res) {
  421. // that.gotoPay();
  422. console.log("success:",res);
  423. },
  424. fail (res) {
  425. console.log("fail:",res);
  426. },
  427. complete (res) {
  428. that.gotoPay(orderId);
  429. console.log("complete:",res);
  430. }
  431. })
  432. },
  433. gotoPay(orderId){
  434. this.$u.api.gotoPay({orderId:orderId,openid:''}).then(res=>{
  435. this.payResult = res.data.payInfo;
  436. this.payResult.package = res.data.payInfo.packageValue;
  437. // #ifdef H5
  438. this.initConfig(this.payResult)
  439. // #endif
  440. // #ifdef MP
  441. this.wxPay()
  442. // #endif
  443. // if(this.params.paymentMode==1||this.params.paymentMode==4){
  444. // this.wxPay()
  445. // }else{
  446. // uni.$u.route('/shopping/paysuccess');
  447. // }
  448. console.log('gotoPayres',res.data);
  449. }).catch(err=>{
  450. this.paypass = '';
  451. this.checkPassShow = false;
  452. console.log('gotoPay',err);
  453. })
  454. },
  455. wxPay(){
  456. let that = this;
  457. uni.requestPayment({
  458. ... this.payResult,
  459. "provider": "wxpay",
  460. "orderInfo": {
  461. // "appid": "wx499********7c70e", // 微信开放平台 - 应用 - AppId,注意和微信小程序、公众号 AppId 可能不一致
  462. // "noncestr": "c5sEwbaNPiXAF3iv", // 随机字符串
  463. // "package": "Sign=WXPay", // 固定值
  464. // "partnerid": "148*****52", // 微信支付商户号
  465. // "prepayid": "wx202254********************fbe90000", // 统一下单订单号
  466. // "timestamp": 1597935292, // 时间戳(单位:秒)
  467. // "sign": "A842B45937F6EFF60DEC7A2EAA52D5A0" // 签名,这里用的 MD5/RSA 签名
  468. },
  469. success(res) {
  470. setTimeout(()=>{
  471. this.tabsCurrent = 2;
  472. this.reloadList();
  473. },1500)
  474. // that.payQuery();
  475. },
  476. fail(e) {
  477. console.log('wxPayfail',e);
  478. }
  479. })
  480. },
  481. payQuery(){
  482. let that = this;
  483. let retryCount = 0;
  484. let maxRetryCount = 5; // 设置最大重试次数
  485. let interval = 2000; // 设置间隔时间为2秒
  486. let timeout = 10000; // 设置超时时间为10秒
  487. let timer;
  488. uni.showLoading({
  489. title:'支付结果查询中'
  490. })
  491. timer = setInterval(() => {
  492. retryCount++;
  493. if (retryCount > maxRetryCount || retryCount * interval > timeout) {
  494. clearInterval(timer);
  495. uni.hideLoading();
  496. console.log("支付查询超时或达到最大重试次数");
  497. // 在这里添加超时或达到最大重试次数的处理逻辑
  498. this.reloadList()
  499. } else {
  500. console.log("第" + retryCount + "次查询");
  501. // 调用查询支付状态的方法
  502. // 如果支付状态为成功,则清除定时器并处理成功的逻辑
  503. // 如果支付状态为失败,则清除定时器并处理失败的逻辑
  504. this.$u.api.payQuery({orderId:this.orderId}).then(res=>{
  505. // 0-未支付 1-已支付 2-支付中 3-支付失败 4-支付退款
  506. let payStatus = res.data.payStatus;
  507. if(payStatus===1){
  508. uni.$u.route('/center/paysuccess');
  509. }else if(payStatus===0||payStatus===2){
  510. this.payQuery()
  511. }else if(payStatus===3){
  512. uni.toast('支付失败')
  513. }
  514. clearInterval(timer);
  515. }).catch(err=>{
  516. console.log('payQuery',err);
  517. }).finally(()=>{
  518. uni.hideLoading()
  519. })
  520. }
  521. }, interval);
  522. },
  523. statisticsOrder(){
  524. this.$u.api.statisticsOrder().then(res=>{
  525. let data = res.data || {};
  526. this.orderBadge = Object.assign(this.orderBadge,data);
  527. let {noPayNum,deliverNum,collectNum,commentNum,refundNum} = res.data;
  528. let noPayNumindex = this.tabsList.findIndex(item => item.status == 0);
  529. this.tabsList[1].badge.isDot = false;
  530. this.tabsList[1].badge.value = noPayNum;
  531. this.tabsList[2].badge.isDot = false;
  532. this.tabsList[2].badge.value = deliverNum;
  533. this.tabsList[3].badge.isDot = false;
  534. this.tabsList[3].badge.value = collectNum;
  535. this.tabsList[4].badge.isDot = false;
  536. this.tabsList[4].badge.value = commentNum;
  537. this.tabsList[5].badge.isDot = false;
  538. this.tabsList[5].badge.value = refundNum;
  539. // console.log('statisticsOrder',res.data);
  540. // console.log('this.orderBadge',this.orderBadge);
  541. }).catch(err=>{
  542. console.log('memberInfo',err.data);
  543. })
  544. },
  545. /**
  546. * 公众号微信支付
  547. */
  548. initConfig() {
  549. // #ifdef H5
  550. let that = this
  551. wxH5.config({
  552. debug: false, // 这里一般在测试阶段先用ture,等打包给后台的时候就改回false,
  553. appId: that.payResult.appId, // 必填,公众号的唯一标识
  554. timestamp: that.payResult.timeStamp, // 必填,生成签名的时间戳
  555. nonceStr: that.payResult.nonceStr, // 必填,生成签名的随机串
  556. signature: that.payResult.paySign, // 必填,签名
  557. jsApiList: ['chooseWXPay', 'checkJsApi'] // 必填,需要使用的JS接口列表
  558. })
  559. wxH5.ready(() => {
  560. wxH5.chooseWXPay({
  561. timestamp: that.payResult.timeStamp, // 支付签名时间戳,注意微信jssdk中的所有使用timestamp字段均为小写。但最新版的支付后台生成签名使用的timeStamp字段名需大写其中的S字符
  562. nonceStr: that.payResult.nonceStr, // 支付签名随机串,不长于 32 位
  563. package: that.payResult.packageValue, // 统一支付接口返回的prepay_id参数值,提交格式如:prepay_id=\*\*\*)
  564. signType: 'SHA1', // 签名方式,默认为'SHA1',使用新版支付需传入'MD5'
  565. paySign: that.payResult.paySign, // 支付签名
  566. success: () => {
  567. setTimeout(()=>{
  568. that.tabsCurrent = 2;
  569. that.reloadList();
  570. },1500)
  571. // that.payQuery();
  572. },
  573. fail: (e) => {
  574. uni.$u.route('/center/order', {
  575. status: 0
  576. });
  577. console.log('wxPayfail', e);
  578. },
  579. cancel: () => {
  580. uni.$u.route('/center/order', {
  581. status: 0
  582. });
  583. that.cansubmit = true;
  584. }
  585. })
  586. })
  587. // #endif
  588. }
  589. }
  590. }
  591. </script>
  592. <style>
  593. page{
  594. background-color: #F5F5F5;
  595. }
  596. </style>
  597. <style lang="scss" scoped>
  598. .tabs-wrap{
  599. background-color: #fff;
  600. margin-bottom: 10rpx;
  601. }
  602. .list-item{
  603. overflow: hidden;
  604. width: 48%;
  605. margin-bottom: 30rpx;
  606. background-color: #fff;
  607. .image-wrap{
  608. margin-bottom: 20rpx;
  609. }
  610. }
  611. .order-item{
  612. margin-bottom: 20rpx;
  613. background: #FFFFFF;
  614. box-shadow: 0rpx 2rpx 12rpx 0rpx rgba(221,221,221,0.5);
  615. border-radius: 20rpx;
  616. padding: 32rpx;
  617. content-visibility: auto;
  618. contain-intrinsic-size: 346rpx;
  619. .top{
  620. font-size: 24rpx;
  621. font-weight: 400;
  622. color: #7F7F7F;
  623. line-height: 36rpx;
  624. margin-bottom: 36rpx;
  625. }
  626. .info{
  627. margin-bottom: 30rpx;
  628. .img{
  629. width: 180rpx;
  630. height: 160rpx;
  631. }
  632. .text{
  633. font-size: 24rpx;
  634. font-weight: 400;
  635. color: #7F7F7F;
  636. padding-left: 26rpx;
  637. flex: 1;
  638. .name{
  639. font-size: 28rpx;
  640. font-weight: bold;
  641. color: #363636;
  642. margin-bottom: 20rpx;
  643. }
  644. .time{
  645. margin-bottom: 20rpx;
  646. }
  647. .position{
  648. margin-bottom: 20rpx;
  649. }
  650. .statistics{
  651. text-align: right;
  652. }
  653. .label{
  654. font-size: 24rpx;
  655. font-weight: 400;
  656. color: #363636;
  657. margin-left: 10rpx;
  658. }
  659. .price{
  660. font-size: 32rpx;
  661. font-weight: bold;
  662. color: #ED0000;
  663. }
  664. }
  665. }
  666. .btn-wrap{
  667. }
  668. .btn{
  669. padding: 12rpx 40rpx;
  670. border: 1px solid #E5E5E5;
  671. color: #7F7F7F;
  672. text-align: center;
  673. border-radius: 8rpx;
  674. font-size: 24rpx;
  675. &.red{border-color: #ED0000;color: #ED0000;}
  676. &.red.solid{border-color: #ED0000;background-color:#ED0000;color: #fff;}
  677. &.green{color: #00A447;border-color: #00A447;}
  678. &:not(:first-child){
  679. margin-left: 20rpx;
  680. }
  681. }
  682. &.status-0{.status{color:#FF3C3F;}}
  683. &.status-1{.status{color:#FF3C3F;}}
  684. &.status-2{.status{color:#0099EB;}}
  685. &.status-3{.status{color:#00A447;}}
  686. &.status-4{.status{color:#FF3C3F;}}
  687. &.status-5{.status{color:#FF3C3F;}}
  688. &.status-6{.status{color:#FF3C3F;}}
  689. &.status-7{.status{color:#FFB100;}}
  690. }
  691. </style>