order.vue 56 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025
  1. <template>
  2. <view>
  3. <!-- <sjs src="../../../utils/formatFuc.sjs" module="utils" /> -->
  4. <view class="poster" v-if="myqr_show">
  5. <view>
  6. <image :src="myqr_url" :style="'width:' + myqr_width + 'rpx;'" mode="widthFix"></image>
  7. <view class="tool">
  8. <view>
  9. <button open-type="share" class="share-btn">
  10. <image class="img" style="width: 85rpx; margin-right: 25rpx" mode="widthFix" src="/static/images/share/p_dy.png"></image>
  11. </button>
  12. </view>
  13. <view>
  14. <image class="img" mode="widthFix" @tap="goSaveQrcode" src="/static/images/share/p_save.png"></image>
  15. </view>
  16. </view>
  17. <view style="text-align: center">
  18. <image class="closeImg" @tap="hidePoster" src="/static/images/share/close.png"></image>
  19. </view>
  20. </view>
  21. </view>
  22. <view class="appoint-tabs-wrapper">
  23. <view :class="'appoint-tab-item ' + (showType == 0 ? 'active' : '')" data-tab="0" @tap="onTabChange">全 部</view>
  24. <view :class="'appoint-tab-item ' + (showType == 1 ? 'active' : '')" data-tab="1" @tap="onTabChange">待支付</view>
  25. <view :class="'appoint-tab-item ' + (showType == 2 ? 'active' : '')" data-tab="2" @tap="onTabChange">待服务</view>
  26. <view :class="'appoint-tab-item ' + (showType == 3 ? 'active' : '')" data-tab="3" @tap="onTabChange">售后</view>
  27. <!-- <view class="appoint-tab-item {{showType==4?'active':''}}" data-tab="4" bindtap="onTabChange">待评价</view> -->
  28. </view>
  29. <view class="container" :style="'filter:blur(' + myqr_blur + 'rpx)'">
  30. <!-- <view class="orders-switch">
  31. <view class="item {{ showType == 0 ? 'active' : ''}}" bindtap="switchTab" data-index='0'>
  32. <view class="txt">全部</view>
  33. </view>
  34. <view class="item {{ showType == 1 ? 'active' : ''}}" bindtap="switchTab" data-index='1'>
  35. <view class="txt">待付款</view>
  36. </view> -->
  37. <!-- <view class="item {{ showType == 2 ? 'active' : ''}}" bindtap="switchTab" data-index='2'>
  38. <view class="txt">待发货</view>
  39. </view> -->
  40. <!-- <view class="item {{ showType == 3 ? 'active' : ''}}" bindtap="switchTab" data-index='3'>
  41. <view class="txt">待上门</view>
  42. </view>
  43. <view class="item {{ showType == 4 ? 'active' : ''}}" bindtap="switchTab" data-index='4'>
  44. <view class="txt">待评价</view>
  45. </view>
  46. </view> -->
  47. <!-- <van-tabs active="{{showType }}" color="#09afff" bind:change="onTabChange">
  48. <van-tab title="全部" name="0"></van-tab>
  49. <van-tab title="待付款" name="1"></van-tab>
  50. <van-tab title="服务中" name="3"></van-tab>
  51. <van-tab title="待评价" name="4"></van-tab>
  52. </van-tabs> -->
  53. <!--
  54. <view class="appoint-tabs-wrapper">
  55. <view class="appoint-tab-item {{showType==0?'active':''}}" data-tab="0" bindtap="onTabChange">全 部</view>
  56. <view class="appoint-tab-item {{showType==1?'active':''}}" data-tab="1" bindtap="onTabChange">待付款</view>
  57. <view class="appoint-tab-item {{showType==3?'active':''}}" data-tab="3" bindtap="onTabChange">服务中</view>
  58. <view class="appoint-tab-item {{showType==4?'active':''}}" data-tab="4" bindtap="onTabChange">待评价</view>
  59. </view> -->
  60. <view class="no-order" v-if="orderList.length <= 0">
  61. <view class="c">
  62. <text>还没有任何订单呢</text>
  63. </view>
  64. </view>
  65. <view class="orders">
  66. <!-- 工单提醒 -->
  67. <block v-if="showType == 0">
  68. <view v-for="(item, index) in tipsList" :key="index" class="tips-item">
  69. <view class="tips-item-title">
  70. <view class="item-title-left">
  71. <image mode="aspectFit"
  72. src="https://jzmall.lifejingzhi.com/file/jzmall-dy/icon-store.png"></image>
  73. <text>服务提醒</text>
  74. </view>
  75. <view class="item-title-right">{{item.statusName}}</view>
  76. </view>
  77. <view class="tips-item-line">
  78. <view class="line-left">
  79. 预约时间
  80. </view>
  81. <view class="line-right" v-if="item.bookDateTime.split(',').length>=3">
  82. {{item.bookDateTime.split(',')[0]}}
  83. <text>{{item.bookDateTime.split(',')[1]}}</text>
  84. {{item.bookDateTime.split(',')[2]}}
  85. </view>
  86. <view class="line-right" v-else>
  87. {{item.bookDateTime.split(',')[0]}}
  88. {{item.bookDateTime.split(',')[1]}}
  89. </view>
  90. </view>
  91. <view class="tips-item-line">
  92. <view class="line-left">
  93. 服务项目
  94. </view>
  95. <view class="line-right">
  96. {{item.skuName}}
  97. </view>
  98. </view>
  99. <view class="tips-item-line">
  100. <view class="line-left">
  101. 上门信息
  102. </view>
  103. <view class="line-right">
  104. {{item.bookInfo.split('|')[0]}}
  105. </view>
  106. </view>
  107. <view class="tips-item-line" style="margin-top:-18rpx;">
  108. <view class="line-left">
  109. </view>
  110. <view class="line-right">
  111. {{item.bookInfo.split('|')[1]}}
  112. </view>
  113. </view>
  114. <view class="tips-item-content" v-if="item.tip">
  115. 提醒:{{item.tip}}
  116. </view>
  117. </view>
  118. </block>
  119. <view v-if="orderList.length>0&&tipsList.length>0&&showType == 0" class="order-devide">
  120. <view class="line"></view>
  121. <view class="devide-text">订单列表</view>
  122. <view class="line"></view>
  123. </view>
  124. <view class="order" v-for="(item, index) in orderList" :key="index" :data-status="item.orderStatusVal" @tap="goOrderDetailNew" :data-id="item.id">
  125. <view class="h">
  126. <view class="l" v-if="item.orderStatusVal == '待预约' || item.orderStatusVal == '服务中' || item.orderStatusVal == '服务已完成'|| item.orderStatusVal == '退款中'">已支付</view>
  127. <view class="l" v-else>{{ item.orderStatusVal }}</view>
  128. <view class="r" v-if="item.orderStatusVal == '待预约' || item.orderStatusVal == '服务中' || item.orderStatusVal == '服务已完成'|| item.orderStatusVal == '退款中'">
  129. {{ item.orderStatusVal }}
  130. </view>
  131. <view class="r" v-else></view>
  132. </view>
  133. <!-- open-type="redirect" -->
  134. <!-- <navigator :url="'../orderDetail/orderDetail?id=' + item.id"> -->
  135. <view class="goods" >
  136. <view class="img">
  137. <image :src="item.picUrl + '?w=200'"></image>
  138. </view>
  139. <view class="info">
  140. <!-- <view class="info-orderSn" >订单编号: {{item.orderSn}}</view> -->
  141. <view class="info-main">
  142. <text class="product-name">{{ item.goodsName }}</text>
  143. <text class="price">¥{{ item.orderPrice }}</text>
  144. </view>
  145. <view class="sku-name" v-if="item.increaseSumPrice">
  146. <view>加购: {{ item.unitDescribe }}*{{ item.unitIncreaseNumber }}</view>
  147. <view>¥{{ item.increaseSumPrice }}</view>
  148. </view>
  149. <view class="sku-name">规格:{{ item.skuName }}</view>
  150. <!-- <text class="number">共{{item.number}}件商品</text> -->
  151. <text class="other-info">服务{{ item.serviceTimes }}次</text>
  152. <!-- <text class="other-info" wx:if="{{utils.getNotServiceTimes(item.serviceTimes,item.servedTimes)>0}}"> {{utils.getNotServiceTimes(item.serviceTimes,item.servedTimes)}}次未服务</text> -->
  153. <!-- 支付倒计时 payOverTime -->
  154. <view v-if="item.payOverTime > 0" class="over-time">{{ formatOverTime(item.payOverTime) }} 后订单关闭</view>
  155. </view>
  156. <!-- <view class="status">
  157. </view> -->
  158. </view>
  159. <!-- </navigator> -->
  160. <view class="b">
  161. <view class="l">
  162. <text>实付款:¥{{ item.actualPrice }}</text>
  163. </view>
  164. </view>
  165. <!-- 提醒 -->
  166. <view class="status-tips" v-if="item.orderStatusVal == '已退款'">
  167. <image mode="aspectFit" src="https://jzmall.lifejingzhi.com/file/jzmall-dy/icon-refund-tips.png"></image>
  168. <view class="tips-title">已退款</view>
  169. <view>已按照原支付路径退回</view>
  170. </view>
  171. <view class="status-tips" v-if="item.orderStatusVal == '服务已完成'" :data-id="item.id" @tap="goCheck">
  172. <image mode="aspectFit" src="https://jzmall.lifejingzhi.com/file/jzmall-dy/icon-customer-msg.png"></image>
  173. <view class="tips-title">服务验收:</view>
  174. <view>服务已完成,请评价</view>
  175. </view>
  176. <view class="customer-msg" v-if="item.customerServiceReminder">
  177. <view class="msg-title">提醒:</view>
  178. <view class="msg-text">{{ item.customerServiceReminder }}</view>
  179. </view>
  180. <view class="customer-msg" v-if="item.ticketStatus == 1">
  181. <view class="msg-title">提醒:</view>
  182. <view class="msg-text">您的售后工单正在处理中,请耐心等待</view>
  183. </view>
  184. <view class="customer-msg" v-if="item.ticketStatus == 2" :data-id="item.id" @tap="orderDetail">
  185. <view class="msg-title">提醒:</view>
  186. <view class="msg-text">您的售后工单已完成,可以去评价了哦</view>
  187. </view>
  188. <!-- 操作事件 -->
  189. <view class="order-operate-wrapper">
  190. <!-- <view catchtap="deleteOrder" wx:if="{{item.handleOption.delete}}" data-id="{{item.id}}" class="del">删除订单
  191. </view> -->
  192. <view @tap.stop.prevent="cancelOrder" v-if="item.handleOption.cancel" :data-id="item.id" class="del">取消订单</view>
  193. <view @tap.stop.prevent="showRefundDia" v-if="item.handleOption.refund" :data-id="item.id" class="del">申请退款</view>
  194. <!-- v-if="item.handleOption.refund" -->
  195. <!-- <view data-id="{{item.id}}" data-sn="{{item.orderSn}}" data-aid="{{item.addressId}}"
  196. data-type="{{item.type}}" wx:if="{{item.handleOption.book}}" class="eval-btn">评价</view> -->
  197. <!-- 抖音评价 20231007屏蔽 by leo 启用工单上的服务验收
  198. <rate-button class="eval-btn" order-id="{{item.orderSn}}" bind:init="handleInit" bind:success="handleSuccess" bind:error="handleError" />-->
  199. <!-- <view catchtap="confirmOrder" wx:if="{{item.handleOption.confirm}}" data-id="{{item.id}}">待上门</view> -->
  200. <!-- <view catchtap="refundOrder" wx:if="{{item.handleOption.refund&&item.goodsList[0].goodsSn!='1036016'}}" data-id="{{item.id}}">申请退款</view> -->
  201. <!-- <view data-id="{{item.goodsList[0].goodsId}}" catchtap="shareFriendOrCircle" >分享商品</view> -->
  202. <view
  203. @tap.stop.prevent="appointService"
  204. :data-id="item.id"
  205. :data-sn="item.orderSn"
  206. :data-aid="item.addressId"
  207. :data-type="item.type"
  208. v-if="item.handleOption.book"
  209. :data-detail="item.detailId"
  210. :data-voucherId="item.voucherId"
  211. class="appoint"
  212. >
  213. 预约服务
  214. </view>
  215. <view @tap.stop.prevent="cancelAppoint" :data-serid="item.bookedDetailId" :data-id="item.id" :data-times="item.serviceTimes" v-if="item.handleOption.canCancelBook" class="del">取消预约</view>
  216. <view
  217. @tap.stop.prevent="modifyAppoint"
  218. :data-id="item.id"
  219. :data-serid="item.bookedDetailId"
  220. :data-times="item.serviceTimes"
  221. :data-sn="item.orderSn"
  222. :data-aid="item.addressId"
  223. :data-type="item.type"
  224. v-if="item.handleOption.canModify"
  225. class="warning-color">
  226. 修改预约
  227. </view>
  228. <view @tap.stop.prevent="payOrder" :data-id="item.id" :data-sn="item.orderSn" v-if="item.handleOption.pay" class="appoint">继续支付</view>
  229. <view class="btn-rebuy" @tap.stop.prevent="buyAgain" :data-id="item.goodsId" v-if="item.handleOption.rebuy">再来一单</view>
  230. </view>
  231. <view class="remain-content" v-if="item.showAppointmentAlert">
  232. 还剩{{item.notAppointmentTimes}}次可约,请记得预约哦
  233. </view>
  234. </view>
  235. </view>
  236. </view>
  237. <contact-mov :pageX="30" :pageY="420"></contact-mov>
  238. <view class="refund-order-overlay" v-if="refundTipShow">
  239. <view class="refund-order-dialog">
  240. <view class="refund-dia-tips">您遇到任何问题都可联系在线客服,我们将竭诚为您解决问题!</view>
  241. <view class="dia-btn-wrapper">
  242. <view class="dia-cancel-btn" @tap="refundOrder">继续退款</view>
  243. <view v-if="false" style="width:240rpx;float:left;"> <!--绕过校验 -->
  244. <!-- https://developer.open-douyin.com/docs/resource/zh-CN/mini-app/develop/component/industry/trading-system/pay-button-sdk#e606dcbb -->
  245. <pay-button class="paybt" :mode="refundBt.mode" :order-status="refundBt.orderStatus" :refund-total-amount="refundBt.refundTotalAmount" :order-id="refundBt.orderId" :biz-line="refundBt.bizLine"
  246. @error="refundError" >
  247. </pay-button>
  248. </view>
  249. <view class="dia-conf-btn" @tap="goIM">联系在线客服</view>
  250. </view>
  251. </view>
  252. </view>
  253. <!-- 修改预约/预约 -->
  254. <view class="refund-order-overlay" v-if="appointDiaShow">
  255. <view class="refund-order-dialog refund-order-dia-success">
  256. <view class="refund-dia-title">请选择您要修改的服务</view>
  257. <view class="modify-list">
  258. <view class="modify-item" v-for="(item,index) in serModifyList" :key="index" @tap="switchSer" :data-serid="item.id">
  259. <image src="https://mall.zhaijieshi.cc/file/wx-dy/radio-select.png" mode="aspectFit"
  260. v-if="item.id==serviceId"></image>
  261. <image src="https://mall.zhaijieshi.cc/file/wx-dy/radio-unselect.png" mode="aspectFit"
  262. v-else></image>
  263. <view :class="(item.id==serviceId?'current-modify':'')">{{item.bookTime}}</view>
  264. </view>
  265. </view>
  266. <view class="dia-btn-wrapper">
  267. <view class="dia-cancel-btn" @tap="appointModifyConf">确定</view>
  268. </view>
  269. </view>
  270. <image @tap="closeModify" src="https://jzmall.lifejingzhi.com/file/mall-uni/icon-close.png" class="modify-close"></image>
  271. </view>
  272. <!-- 选择取消原因 -->
  273. <!-- 第一步 -->
  274. <view class="appoint-overlay-wrapper remark-overlay" v-if="cancelFirstShow" @tap="onCancelPopupCloseFir">
  275. <view class="remark-select" @tap.stop.prevent="onCancelClick">
  276. <view class="title" style="text-align: left;">请选择要取消的服务</view>
  277. <view class="remark-list ser-list">
  278. <view :class="'remark-item ser-item '+(item.id==serviceId?'current-ser':'')" @tap="switchSer" :data-serid="item.id"
  279. v-for="(item, index) in serModifyList" :key="index" style="justify-content:flex-start;">
  280. <image mode="aspectFit"
  281. src="https://jzmall.lifejingzhi.com/file/mall-uni/icon-ser-selected.png"
  282. class="radio-img" v-if="item.id==serviceId"></image>
  283. <image mode="aspectFit"
  284. src="https://jzmall.lifejingzhi.com/file/mall-uni/icon-ser-unselect.png"
  285. class="radio-img" v-else></image>
  286. <view :class="'remark-value '+(item.id==serviceId?'current-cancel':'')">{{ item.bookTime }}</view>
  287. <view class="ser-right">已预约</view>
  288. </view>
  289. </view>
  290. <view class="remark-conf-btn" @tap.stop.prevent="cancelFirstConfirm">下一步</view>
  291. </view>
  292. </view>
  293. <view class="appoint-overlay-wrapper remark-overlay" v-if="cancelShow" @tap="onCancelPopupClose">
  294. <view class="remark-select" @tap.stop.prevent="onCancelClick">
  295. <view class="title">选择取消原因</view>
  296. <view class="remark-list">
  297. <view class="remark-item" :data-id="item.id" @tap.stop.prevent="cancelItemSelect"
  298. v-for="(item, index) in cancelList" :key="index">
  299. <view class="remark-value">{{ item.value }}</view>
  300. <image mode="aspectFit"
  301. src="https://jzmall.lifejingzhi.com/file/jzmall-dy/icon-select-popup.png"
  302. class="radio-img" v-if="cancelReason == item.id"></image>
  303. <image mode="aspectFit"
  304. src="https://jzmall.lifejingzhi.com/file/jzmall-dy/icon-unselect-popup.png"
  305. class="radio-img" v-else></image>
  306. </view>
  307. </view>
  308. <view class="remark-conf-btn" @tap.stop.prevent="cancelItemConfirm">取消预约</view>
  309. </view>
  310. </view>
  311. </view>
  312. </template>
  313. <script>
  314. var util = require('../../../utils/util.js');
  315. var api = require('../../../config/api.js');
  316. var app = getApp();
  317. import contactMov from '@/components/contact-mov';
  318. export default {
  319. components:{contactMov},
  320. data() {
  321. return {
  322. timer: '',
  323. orderList: [],
  324. showType: 0,
  325. page: 1,
  326. limit: 10,
  327. totalPages: 1,
  328. myqr_show: false,
  329. //我的分享二维码
  330. myqr_url: null,
  331. myqr_blur: 0,
  332. //背景模糊值
  333. myqr_width: 0,
  334. hasLogin: false,
  335. goodsId: '',
  336. tipsList:[],
  337. refundTipShow:false,
  338. refundId:'',
  339. refundBt:{
  340. mode:'',
  341. bizLine:'',
  342. orderStatus:'',
  343. orderId:'0',
  344. refundId:'',
  345. refundTotalAmount:''
  346. },
  347. serModifyList:[],
  348. serviceId:'',
  349. appointOrderId:'',
  350. appointDiaType:'',//1修改预约 2取消预约
  351. appointDiaShow:false,
  352. cancelShow:false,
  353. cancelList: [{
  354. id: 19,
  355. value: '【个人原因】临时有事暂时不预约'
  356. },
  357. {
  358. id: 20,
  359. value: '【个人原因】先囤着以后再约'
  360. },
  361. {
  362. id: 22,
  363. value: '【个人原因】计划有变不需要了'
  364. },
  365. {
  366. id: 21,
  367. value: '【商家原因】保洁师无法上门服务'
  368. },
  369. {
  370. id: 23,
  371. value: ' 其他'
  372. }
  373. ],
  374. cancelReason: '',
  375. cancelFirstShow:false,
  376. };
  377. },
  378. onLoad: function (options) {
  379. // 页面初始化 options为页面跳转所带来的参数
  380. if (options.tab) {
  381. this.setData({
  382. showType: options.tab
  383. });
  384. } else {
  385. try {
  386. let query = uni.getEnterOptionsSync().query;
  387. let keys = Object.keys(query);
  388. if (keys.length > 0) {
  389. let str = keys[0]; //{\"showType\": 1}
  390. let json = str.replace(/\"/g, '').replace(/\\/g, '"');
  391. let tab = JSON.parse(json).showType;
  392. if (tab != null && tab != '' && tab != undefined) {
  393. this.setData({
  394. showType: '0' //全部订单,写死因为历史后台传的是1
  395. });
  396. }
  397. }
  398. } catch (error) {
  399. console.log('CatchClause', error);
  400. console.log('CatchClause', error);
  401. console.info(error);
  402. }
  403. }
  404. },
  405. onHide: function () {
  406. console.log('onHide');
  407. clearInterval(this.timer);
  408. },
  409. onUnload: function () {
  410. console.log('onunload');
  411. clearInterval(this.timer);
  412. },
  413. onReachBottom() {
  414. if (this.totalPages > this.page) {
  415. this.setData({
  416. page: this.page + 1
  417. });
  418. this.getOrderList();
  419. } else if (this.orderList.length > 0) {
  420. uni.showToast({
  421. title: '没有更多订单了',
  422. icon: 'none',
  423. duration: 2000
  424. });
  425. return false;
  426. }
  427. },
  428. onReady: function () {
  429. // 页面渲染完成
  430. },
  431. onShow: function () {
  432. // 页面显示
  433. this.setData({
  434. orderList: [],
  435. page: 1
  436. });
  437. // wx.pageScrollTo({
  438. // scrollTop: 0,
  439. // duration: 1000,
  440. // });
  441. this.getOrderList();
  442. },
  443. methods: {
  444. formatOverTime(time){
  445. var minute='00';
  446. var second='00';
  447. if(time>0){
  448. minute=(Math.floor(time/60)<10?('0'+Math.floor(time/60)):Math.floor(time/60));
  449. second=(Number(time%60).toFixed(0)<10?('0'+Number(time%60).toFixed(0)):Number(time%60).toFixed(0));
  450. }
  451. var result="00:"+minute+":"+second;
  452. return result;
  453. },
  454. getOrderList() {
  455. uni.showLoading({
  456. title: '加载中'
  457. });
  458. let that = this;
  459. util.request(api.OrderList, {
  460. showType: that.showType,
  461. page: that.page,
  462. limit: that.limit
  463. }).then((res) => {
  464. uni.hideLoading();
  465. if (res.errno === 0) {
  466. console.log(res.data);
  467. that.setData({
  468. orderList: that.orderList.concat(res.data.data.orders),
  469. totalPages: res.data.pages,
  470. tipsList:res.data.data.tips
  471. });
  472. clearInterval(this.timer);
  473. // 如果有未支付订单,倒计时定时器
  474. let isHasOver = this.orderList.some((item) => {
  475. return item.payOverTime > 0;
  476. });
  477. console.log(isHasOver);
  478. if (isHasOver) {
  479. let timer = setInterval(() => {
  480. let list = this.orderList;
  481. let newList = [];
  482. list.forEach((item) => {
  483. let obj = item;
  484. if (item.payOverTime > 0) {
  485. obj.payOverTime = item.payOverTime - 1;
  486. }
  487. newList.push(obj);
  488. });
  489. this.setData({
  490. orderList: newList
  491. });
  492. }, 1000);
  493. this.setData({
  494. timer: timer
  495. });
  496. }
  497. }
  498. });
  499. },
  500. orderDetail(e) {
  501. let id = e.currentTarget.dataset.id;
  502. uni.navigateTo({
  503. url: '/pages/ucenter/orderDetail/orderDetail?id=' + id
  504. });
  505. },
  506. switchTab: function (event) {
  507. let showType = event.currentTarget.dataset.index;
  508. this.setData({
  509. orderList: [],
  510. showType: showType,
  511. page: 1,
  512. // limit: 10,
  513. totalPages: 1
  514. });
  515. this.getOrderList();
  516. },
  517. onTabChange(e) {
  518. // let showType = e.detail.name;
  519. let showType = e.currentTarget.dataset.tab;
  520. this.setData({
  521. orderList: [],
  522. showType: showType,
  523. page: 1,
  524. // limit: 10,
  525. totalPages: 1
  526. });
  527. this.getOrderList();
  528. },
  529. appointServiceOld(e) {
  530. let id = e.currentTarget.dataset.id;
  531. let addressId = e.currentTarget.dataset.aid;
  532. let type = e.currentTarget.dataset.type;
  533. if (type && type == 5) {
  534. uni.navigateTo({
  535. url: '/pages/ucenter/coupon/couponGoods?id=1'
  536. });
  537. return;
  538. }
  539. if (addressId == null || addressId == 0) {
  540. uni.navigateTo({
  541. url: '/pages/ucenter/appointOrder/appointOrder?orderId=' + id
  542. });
  543. } else {
  544. //买约分离 没有地址的预约
  545. uni.navigateTo({
  546. url: '/pages/ucenter/serviceDetail/serviceDetail?orderId=' + id
  547. });
  548. }
  549. },
  550. appointService(e) {
  551. let id = e.currentTarget.dataset.id;
  552. let addressId = e.currentTarget.dataset.aid;
  553. let type = e.currentTarget.dataset.type;
  554. let detailId = e.currentTarget.dataset.detail;
  555. let voucherId = e.currentTarget.dataset.voucherId;
  556. uni.navigateTo({
  557. url: '/pages/ucenter/appointOrder/appointOrder?orderId=' + id + '&serviceId=' + detailId+'&voucherId='+voucherId
  558. });
  559. },
  560. qrtouchstart: function () {
  561. this.setData({
  562. myqr_blur: 0,
  563. myqr_show: false
  564. });
  565. },
  566. shareFriendOrCircle: function (e) {
  567. // let that = this;
  568. // if (!app.globalData.hasLogin) {
  569. // wx.navigateTo({
  570. // url: "/pages/auth/login/login"
  571. // });
  572. // return;
  573. // }
  574. // //获取分享id 用来追踪链接
  575. // //引荐人和非引荐人的 链接不同
  576. // let imgUrl = that.data.goods.shareWxUrl ? that.data.goods.shareWxUrl : that.data.goods.gallery[0];
  577. // var path = '/pages/goods/goods?id=' + that.data.id + '&rId=' + that.data.userInfo.id;
  578. // if (that.data.userInfo.isDis) { //是引荐人
  579. // path = '/pages/goods/goods?id=' + that.data.id + '&shareId=' + that.data.wxShareId;
  580. // }
  581. // this.hidePoster();
  582. // return {
  583. // title: that.data.goods.name,
  584. // desc: that.data.myqr_ads,
  585. // path: path,
  586. // imageUrl: imgUrl
  587. // }
  588. },
  589. // 保存分享图
  590. saveShare: function () {
  591. let that = this;
  592. uni.showLoading({
  593. title: '图片保存中'
  594. });
  595. console.log(that);
  596. uni.downloadFile({
  597. url: that.myqr_url,
  598. success: function (res) {
  599. console.log(res);
  600. uni.saveImageToPhotosAlbum({
  601. filePath: res.tempFilePath,
  602. success: function (res) {
  603. uni.hideLoading();
  604. uni.showModal({
  605. title: '存图成功',
  606. content: '图片成功保存到相册了,可以分享到朋友圈了',
  607. showCancel: false,
  608. confirmText: '好的',
  609. confirmColor: '#a78845',
  610. success: function (res) {
  611. if (res.confirm) {
  612. console.log('用户点击确定');
  613. that.setData({
  614. myqr_show: false,
  615. myqr_blur: 0
  616. });
  617. }
  618. }
  619. });
  620. },
  621. fail: function (res) {
  622. uni.hideLoading();
  623. uni.showModal({
  624. title: '警告',
  625. content: '不授权无法保存',
  626. showCancel: false
  627. });
  628. that.setData({
  629. myqr_show: false,
  630. myqr_blur: 0
  631. });
  632. }
  633. });
  634. },
  635. fail: function (res) {
  636. uni.hideLoading();
  637. console.log(res);
  638. }
  639. });
  640. },
  641. // “去付款”按钮点击效果
  642. payOrder: function (e) {
  643. // #ifdef MP-TOUTIAO
  644. this.orderPrepay(e);
  645. // #endif
  646. // #ifdef MP-ALIPAY
  647. this.aliPrepay(e);
  648. // #endif
  649. },
  650. orderPrepay(e){
  651. let that = this;
  652. let id = e.currentTarget.dataset.id;
  653. let ordern = e.currentTarget.dataset.sn;
  654. util.request(
  655. api.OrderPayCheck,
  656. {
  657. orderId: id
  658. },
  659. 'POST'
  660. ).then(function (res) {
  661. if (res.errno === 0) {
  662. const outOrderNo = res.data;
  663. console.log(res);
  664. uni.continueToPay({
  665. // orderId: this.data.orderId, // 内部订单号
  666. outOrderNo: outOrderNo,
  667. // 外部订单号 2个订单号必填一个
  668. success: (res) => {
  669. console.log(res);
  670. const { orderId, outOrderNo } = res;
  671. console.log('success res', res);
  672. console.log('orderId', orderId, 'outOrderNo', outOrderNo);
  673. uni.redirectTo({
  674. url: '/pages/ucenter/order/order'
  675. });
  676. },
  677. fail: (res) => {
  678. console.log(res);
  679. const { orderId, outOrderNo, errNo, errMsg, errLogId } = res;
  680. if (errLogId) {
  681. console.log('查询订单信息失败', errNo, errMsg, errLogId);
  682. }
  683. if (orderId || outOrderNo) {
  684. console.log('支付失败', errNo, errMsg, orderId, outOrderNo);
  685. console.log('订单号' + outOrderNo);
  686. // wx.navigateTo({
  687. // url: '/pages/ucenter/orderDetail/orderDetail?id='+outOrderNo
  688. // });
  689. }
  690. util.showErrorToast('支付失败');
  691. }
  692. });
  693. }
  694. });
  695. },
  696. aliPrepay(e){
  697. let that = this;
  698. let id = e.currentTarget.dataset.id;
  699. let ordern = e.currentTarget.dataset.sn;
  700. uni.showLoading({
  701. title: '加载中'
  702. });
  703. util.request(api.aliPrepay, {
  704. orderId:id
  705. }).then(function (res) {
  706. if (res.errno === 0) {
  707. //是否跳转新支付结果页面
  708. let goNewPage=res.data.goNewPage;
  709. let tradeNo=res.data.payment.tradeNo;
  710. let outOrderNo=res.data.payment.outTradeNo;
  711. my.tradePay({
  712. tradeNO:tradeNo,
  713. success: (payres) => {
  714. uni.hideLoading();
  715. console.log('ali调起支付成功');
  716. console.log(payres);
  717. let resultCode=payres.resultCode;
  718. if(resultCode=='9000'){
  719. uni.redirectTo({
  720. url: '/pages/ucenter/order/order'
  721. });
  722. }else{
  723. uni.showModal({
  724. title: '提示',
  725. content: payres.memo,
  726. showCancel: false,
  727. });
  728. }
  729. },
  730. fail: (failres) => {
  731. console.log(failres);
  732. uni.hideLoading();
  733. }
  734. });
  735. } else {
  736. uni.hideLoading();
  737. uni.showModal({
  738. title: '提醒',
  739. showCancel: false,
  740. content: res.errmsg
  741. });
  742. }
  743. })
  744. .catch((res) => {
  745. uni.hideLoading();
  746. util.showErrorToast(res.errmsg);
  747. });
  748. },
  749. // “删除”点击效果
  750. deleteOrder: function (e) {
  751. let that = this;
  752. let id = e.currentTarget.dataset.id;
  753. uni.showModal({
  754. title: '',
  755. content: '确定要删除此订单?',
  756. success: function (res) {
  757. if (res.confirm) {
  758. util.request(
  759. api.OrderDelete,
  760. {
  761. orderId: id
  762. },
  763. 'POST'
  764. ).then(function (res) {
  765. if (res.errno === 0) {
  766. uni.showToast({
  767. title: '删除订单成功'
  768. });
  769. util.redirect('/pages/ucenter/order/order');
  770. } else {
  771. util.showErrorToast(res.errmsg);
  772. }
  773. });
  774. }
  775. }
  776. });
  777. },
  778. // “取消订单”点击效果
  779. cancelOrder: function (e) {
  780. let that = this;
  781. let id = e.currentTarget.dataset.id;
  782. uni.showModal({
  783. title: '',
  784. content: '确定要取消此订单?',
  785. success: function (res) {
  786. if (res.confirm) {
  787. util.request(
  788. api.OrderCancel,
  789. {
  790. orderId: id
  791. },
  792. 'POST'
  793. ).then(function (res) {
  794. if (res.errno === 0) {
  795. uni.showToast({
  796. title: '取消订单成功'
  797. });
  798. util.redirect('/pages/ucenter/order/order');
  799. } else {
  800. util.showErrorToast(res.errmsg);
  801. }
  802. });
  803. }
  804. }
  805. });
  806. },
  807. // “待上门”点击效果
  808. confirmOrder: function (e) {
  809. let that = this;
  810. let id = e.currentTarget.dataset.id;
  811. uni.showModal({
  812. title: '',
  813. content: '确认上门服务?',
  814. success: function (res) {
  815. if (res.confirm) {
  816. util.request(
  817. api.OrderConfirm,
  818. {
  819. orderId: id
  820. },
  821. 'POST'
  822. ).then(function (res) {
  823. if (res.errno === 0) {
  824. uni.showToast({
  825. title: '确认上门成功!'
  826. });
  827. util.redirect('/pages/ucenter/order/order');
  828. } else {
  829. util.showErrorToast(res.errmsg);
  830. }
  831. });
  832. }
  833. }
  834. });
  835. },
  836. // “取消订单并退款”点击效果
  837. refundOrderOld: function (e) {
  838. let that = this;
  839. let id = e.currentTarget.dataset.id;
  840. uni.showModal({
  841. title: '',
  842. content: '确定要取消此订单?',
  843. success: function (res) {
  844. if (res.confirm) {
  845. util.request(
  846. api.OrderRefund,
  847. {
  848. orderId: id
  849. },
  850. 'POST'
  851. ).then(function (res) {
  852. if (res.errno === 0) {
  853. uni.showToast({
  854. title: '取消订单成功'
  855. });
  856. util.redirect('/pages/ucenter/order/order');
  857. } else {
  858. util.showErrorToast(res.errmsg);
  859. }
  860. });
  861. }
  862. }
  863. });
  864. },
  865. refundError:function(e) {
  866. console.log(e.detail);
  867. const { errNo, errMsg } = e.detail;
  868. console.log("errNo", errNo, "errMsg", errMsg);
  869. if (errNo === 21514) {
  870. tt.showToast({
  871. title: "失败", // 内容
  872. icon: "none", // 图标
  873. });
  874. } else if (errNo === 21513) {
  875. tt.showToast({
  876. title: "获取中", // 内容
  877. icon: "none", // 图标
  878. });
  879. }else{
  880. tt.showToast({
  881. title: "失败:"+e.detail.errMsg+',errNo:'+e.detail.errNo, // 内容
  882. icon: "none", // 图标
  883. });
  884. }
  885. },
  886. showRefundDia:function(e){
  887. let id = e.currentTarget.dataset.id;
  888. this.setData({
  889. refundTipShow:true,
  890. refundId:id
  891. });
  892. },
  893. refundOrder: function (e) {
  894. this.setData({
  895. refundTipShow:false
  896. });
  897. uni.navigateTo({
  898. url: '/pages/ucenter/applyRefund/applyRefund?id=' + this.refundId
  899. });
  900. },
  901. buyAgain(e) {
  902. let id = e.currentTarget.dataset.id;
  903. uni.navigateTo({
  904. url: '/pages/goods/goods?id=' + id
  905. });
  906. },
  907. goCheck(e) {
  908. let id = e.currentTarget.dataset.id;
  909. uni.navigateTo({
  910. url: '/pages/ucenter/orderDetail/orderDetail?id=' + id
  911. });
  912. },
  913. goOrderDetailNew(e) {
  914. let status= e.currentTarget.dataset.status;
  915. let id = e.currentTarget.dataset.id;
  916. console.log(status);
  917. if(status=='未支付'){
  918. uni.navigateTo({
  919. url: '/pages/ucenter/orderDetail/orderDetailPay?id=' + id
  920. });
  921. }else{
  922. uni.navigateTo({
  923. url: '/pages/ucenter/orderDetail/orderDetail?id=' + id
  924. });
  925. }
  926. },
  927. handleInit(event) {
  928. const { status } = event.detail;
  929. console.log(status);
  930. },
  931. handleSuccess(event) {
  932. const { result } = event.detail;
  933. // 团购订单不支持查看评价,此时可决定按钮是否展示
  934. console.log(result);
  935. },
  936. handleError(event) {
  937. const { errMsg, errNo } = event.detail;
  938. // errNo(错误码,对应某种具体报错原因)
  939. // errMsg(报错信息)
  940. console.log(errMsg, errNo);
  941. },
  942. goSaveQrcode() {
  943. console.log('占位:函数 goSaveQrcode 未声明');
  944. },
  945. hidePoster() {
  946. console.log('占位:函数 hidePoster 未声明');
  947. },
  948. goIM() {
  949. this.setData({
  950. refundTipShow:false
  951. });
  952. console.info('goIm');
  953. uni.navigateTo({
  954. url: '/pages/chat/im/im'
  955. });
  956. },
  957. switchSer(e){
  958. let serid = e.currentTarget.dataset.serid;
  959. this.setData({
  960. serviceId:serid
  961. });
  962. },
  963. appointModifyConf(){
  964. if(this.serviceId==''||this.serviceId==null){
  965. uni.showToast({
  966. title: '请选择要修改的服务',
  967. icon:'none'
  968. });
  969. return false;
  970. }else{
  971. this.setData({
  972. appointDiaShow:false
  973. });
  974. uni.navigateTo({
  975. url: '/pages/ucenter/appointOrder/appointOrder?orderId=' + this.appointOrderId + '&serviceId=' +
  976. this.serviceId
  977. });
  978. }
  979. },
  980. closeModify(){
  981. this.setData({
  982. appointDiaShow:false
  983. });
  984. },
  985. modifyAppoint(e){
  986. let id = e.currentTarget.dataset.id;
  987. let serid = e.currentTarget.dataset.serid;
  988. let times = e.currentTarget.dataset.times;
  989. this.setData({
  990. appointOrderId:id
  991. });
  992. if(times>1){
  993. this.setData({
  994. appointDiaShow:true,
  995. serviceId:''
  996. });
  997. util.request(
  998. api.getBooked,
  999. {orderId: id},
  1000. 'GET'
  1001. ).then(res=> {
  1002. if (res.errno === 0) {
  1003. this.setData({
  1004. serModifyList:res.data
  1005. })
  1006. }
  1007. });
  1008. }else{
  1009. uni.navigateTo({
  1010. url: '/pages/ucenter/appointOrder/appointOrder?orderId=' + id + '&serviceId=' +
  1011. serid
  1012. });
  1013. }
  1014. },
  1015. onCancelClick() {
  1016. },
  1017. cancelAppoint(e){
  1018. let id = e.currentTarget.dataset.id;
  1019. let serid = e.currentTarget.dataset.serid;
  1020. let times = e.currentTarget.dataset.times;
  1021. this.setData({
  1022. appointOrderId:id
  1023. });
  1024. if(times>1){
  1025. this.setData({
  1026. cancelFirstShow:true,
  1027. serviceId:''
  1028. });
  1029. util.request(
  1030. api.getBooked,
  1031. {orderId: id},
  1032. 'GET'
  1033. ).then(res=> {
  1034. if (res.errno === 0) {
  1035. this.setData({
  1036. serModifyList:res.data
  1037. })
  1038. }
  1039. });
  1040. }else{
  1041. this.setData({
  1042. cancelShow:true,
  1043. serviceId:serid
  1044. });
  1045. }
  1046. },
  1047. cancelItemSelect(e) {
  1048. this.setData({
  1049. cancelReason: e.currentTarget.dataset.id
  1050. });
  1051. },
  1052. onCancelPopupClose() {
  1053. this.setData({
  1054. cancelShow: false
  1055. });
  1056. },
  1057. onCancelPopupCloseFir(){
  1058. this.setData({
  1059. cancelFirstShow: false
  1060. });
  1061. },
  1062. cancelFirstConfirm(){
  1063. if(this.serviceId==''||this.serviceId==null){
  1064. uni.showToast({
  1065. title: '请选择要取消的服务',
  1066. icon:'none'
  1067. });
  1068. return false;
  1069. }
  1070. this.setData({
  1071. cancelFirstShow: false,
  1072. cancelShow: true
  1073. });
  1074. },
  1075. cancelItemConfirm() {
  1076. let that = this;
  1077. if (that.cancelReason == '') {
  1078. util.showErrorToast('请选择取消原因');
  1079. return;
  1080. }
  1081. uni.showLoading({
  1082. title: '提交中'
  1083. });
  1084. util.request(
  1085. api.OrderBookCancel, {
  1086. detailId: this.serviceId,
  1087. cancelReason: this.cancelReason
  1088. },
  1089. 'POST'
  1090. ).then((res) => {
  1091. uni.hideLoading();
  1092. if (res.errno === 0) {
  1093. uni.showToast({
  1094. title: '提交成功'
  1095. });
  1096. this.setData({
  1097. cancelShow: false,
  1098. orderList: [],
  1099. page: 1
  1100. });
  1101. this.getOrderList();
  1102. }else{
  1103. uni.showToast({
  1104. title: res.errmsg,
  1105. icon: 'none',
  1106. duration: 2000
  1107. });
  1108. }
  1109. });
  1110. },
  1111. }
  1112. };
  1113. </script>
  1114. <style>
  1115. page {
  1116. /* height: 100%; */
  1117. width: 100%;
  1118. background: #f4f4f4;
  1119. }
  1120. .orders-switch {
  1121. width: 100%;
  1122. background: #fff;
  1123. height: 84rpx;
  1124. /* border-bottom: 1px solid rgba(0,0,0,.15); */
  1125. }
  1126. .orders-switch .item {
  1127. display: inline-block;
  1128. height: 82rpx;
  1129. width: 18%;
  1130. padding: 0 15rpx;
  1131. text-align: center;
  1132. }
  1133. .orders-switch .item .txt {
  1134. display: inline-block;
  1135. height: 82rpx;
  1136. padding: 0 20rpx;
  1137. line-height: 82rpx;
  1138. color: #9a9ba1;
  1139. font-size: 30rpx;
  1140. width: 170rpx;
  1141. }
  1142. .orders-switch .item.active .txt {
  1143. color: #ab956d;
  1144. border-bottom: 4rpx solid #ab956d;
  1145. }
  1146. .no-order {
  1147. width: 100%;
  1148. height: auto;
  1149. margin: 0 auto;
  1150. }
  1151. .no-order .c {
  1152. width: 100%;
  1153. height: auto;
  1154. padding-top: 400rpx;
  1155. }
  1156. .no-order .c text {
  1157. margin: 0 auto;
  1158. display: block;
  1159. width: 258rpx;
  1160. height: 29rpx;
  1161. line-height: 29rpx;
  1162. text-align: center;
  1163. font-size: 29rpx;
  1164. color: #999;
  1165. }
  1166. .orders {
  1167. height: auto;
  1168. width: 750rpx;
  1169. /* overflow: hidden; */
  1170. padding: 0 24rpx;
  1171. margin-top: 110rpx;
  1172. }
  1173. .order {
  1174. /* margin-top: 20rpx; */
  1175. background: #fff;
  1176. padding: 0 24rpx 24rpx 24rpx;
  1177. border-radius: 24rpx;
  1178. margin-bottom: 24rpx;
  1179. }
  1180. .order .h {
  1181. height: 72rpx;
  1182. border-bottom: 2rpx solid #e0e0e0;
  1183. color: #191919;
  1184. font-size: 28rpx;
  1185. font-weight: bold;
  1186. display: flex;
  1187. align-items: center;
  1188. justify-content: space-between;
  1189. }
  1190. .order .h .l {
  1191. }
  1192. .order .h .r {
  1193. }
  1194. .order .goods {
  1195. display: flex;
  1196. /* align-items: center; */
  1197. padding: 24rpx 0 0;
  1198. position: relative;
  1199. }
  1200. .order .goods .img {
  1201. height: 190rpx;
  1202. width: 190rpx;
  1203. background: #f4f4f4;
  1204. }
  1205. .order .goods .img image {
  1206. height: 190rpx;
  1207. width: 190rpx;
  1208. overflow: hidden;
  1209. border-radius: 10rpx;
  1210. }
  1211. .order .goods .info {
  1212. height: 145.83rpx;
  1213. flex: 1;
  1214. padding-left: 20rpx;
  1215. }
  1216. .info-orderSn {
  1217. font-size: 28rpx;
  1218. font-weight: bold;
  1219. }
  1220. .info-main {
  1221. display: flex;
  1222. height: 40rpx;
  1223. align-items: center;
  1224. justify-content: space-between;
  1225. /* margin-bottom: 58rpx; */
  1226. }
  1227. .info .sku-name {
  1228. color: #666666;
  1229. font-size: 24rpx;
  1230. margin: 10rpx 0;
  1231. height: 34rpx;
  1232. line-height: 34rpx;
  1233. display: flex;
  1234. justify-content: space-between;
  1235. }
  1236. .product-name {
  1237. line-height: 40rpx;
  1238. font-size: 28rpx;
  1239. /* padding-left: 20rpx;
  1240. text-indent: -16rpx; */
  1241. overflow: hidden;
  1242. text-overflow: ellipsis;
  1243. white-space: nowrap;
  1244. width: 328rpx;
  1245. font-weight: bold;
  1246. color: rgba(0, 0, 0, 0.9);
  1247. }
  1248. .info-main .price {
  1249. color: rgba(0, 0, 0, 0.9);
  1250. font-size: 24rpx;
  1251. font-weight: bold;
  1252. }
  1253. .info .other-info {
  1254. font-size: 24rpx;
  1255. color: rgba(0, 0, 0, 0.9);
  1256. line-height: 34rpx;
  1257. }
  1258. .order .goods .status {
  1259. width: 105rpx;
  1260. color: #b4282d;
  1261. font-size: 25rpx;
  1262. }
  1263. .order .b {
  1264. height: 44rpx;
  1265. line-height: 44rpx;
  1266. /* border-top: 1px solid #f4f4f4; */
  1267. font-size: 26rpx;
  1268. color: #666;
  1269. text-align: right;
  1270. }
  1271. .order .b text {
  1272. font-size: 24rpx;
  1273. color: rgba(0, 0, 0, 0.9);
  1274. font-weight: bold;
  1275. }
  1276. .order .b .l {
  1277. /* float: left; */
  1278. }
  1279. .order .b .r {
  1280. float: right;
  1281. }
  1282. .order .b .btn {
  1283. margin-top: 19rpx;
  1284. height: 64.5rpx;
  1285. line-height: 64.5rpx;
  1286. text-align: center;
  1287. padding: 0 20rpx;
  1288. border-radius: 5rpx;
  1289. font-size: 28rpx;
  1290. color: #fff;
  1291. background: #b4282d;
  1292. }
  1293. .order-operate-wrapper {
  1294. /* height: 80rpx; */
  1295. display: flex;
  1296. align-items: center;
  1297. justify-content: flex-end;
  1298. flex: 1;
  1299. flex-wrap: wrap;
  1300. border-top: 2rpx solid #e0e0e0;
  1301. padding: 10rpx 0 12rpx;
  1302. margin: 20rpx 0 0;
  1303. }
  1304. /* .order-operate-wrapper::after {
  1305. content: '';
  1306. flex: auto;
  1307. } */
  1308. .order-operate-wrapper > view {
  1309. text-align: center;
  1310. font-size: 28rpx;
  1311. color: #fff;
  1312. margin-left: 20rpx;
  1313. width: 190rpx;
  1314. height: 72rpx;
  1315. line-height: 72rpx;
  1316. background: linear-gradient(90deg, #ff9c49 0%, #ff8219 100%);
  1317. border-radius: 72rpx;
  1318. margin-top: 10rpx;
  1319. font-weight: bold;
  1320. }
  1321. .order-operate-wrapper > view.del {
  1322. border: 2rpx solid #d8d8d8;
  1323. /* color: #666666; */
  1324. color: rgba(0,0,0,0.85);
  1325. background: #fff;
  1326. }
  1327. .order-operate-wrapper > view.appoint {
  1328. background: linear-gradient(90deg, #00baff 0%, #008dff 100%);
  1329. }
  1330. .myqr {
  1331. position: fixed;
  1332. z-index: 999;
  1333. width: 100%;
  1334. text-align: center;
  1335. height: auto;
  1336. padding-top: 50rpx;
  1337. top: 0;
  1338. left: 0;
  1339. right: 0;
  1340. bottom: 0;
  1341. }
  1342. .myqr .cancel {
  1343. width: 60rpx;
  1344. height: 60rpx;
  1345. margin-top: 30rpx;
  1346. margin-left: 480rpx;
  1347. }
  1348. .myqr .img {
  1349. width: 480rpx;
  1350. }
  1351. .myqr .btn {
  1352. width: 120rpx;
  1353. height: 120rpx;
  1354. line-height: 120rpx;
  1355. margin-top: 20rpx;
  1356. padding: 30rpx;
  1357. background: #ffffff;
  1358. border-radius: 60rpx;
  1359. }
  1360. /* 会员卡蒙层的样式 */
  1361. .poster {
  1362. position: fixed;
  1363. top: 0;
  1364. bottom: 0;
  1365. right: 0;
  1366. left: 0;
  1367. background-color: #333333d1;
  1368. /* padding: 0rpx 80rpx;
  1369. padding-top: 20%;*/
  1370. z-index: 99;
  1371. height: 100%;
  1372. text-align: center;
  1373. justify-content: center;
  1374. align-items: center;
  1375. display: flex;
  1376. }
  1377. .title {
  1378. color: #fff;
  1379. margin: 20rpx 0;
  1380. font-size: 30rpx;
  1381. }
  1382. .ads {
  1383. margin: 10rpx 0rpx;
  1384. color: #fff;
  1385. }
  1386. .tool {
  1387. display: flex;
  1388. text-align: center;
  1389. justify-content: baseline;
  1390. width: 100%;
  1391. margin-top: 20rpx;
  1392. }
  1393. .tool view {
  1394. flex: 1;
  1395. }
  1396. .img {
  1397. width: 99rpx;
  1398. }
  1399. .closeImg {
  1400. width: 57rpx;
  1401. height: 57rpx;
  1402. }
  1403. .share-btn {
  1404. background-color: transparent;
  1405. }
  1406. .share-btn::after {
  1407. border: none;
  1408. }
  1409. .m-card {
  1410. width: 100%;
  1411. height: 230rpx;
  1412. margin: 20rpx 0;
  1413. }
  1414. .m-card image {
  1415. width: 100%;
  1416. height: 230rpx;
  1417. }
  1418. .appoint-tabs-wrapper {
  1419. height: 88rpx;
  1420. display: flex;
  1421. align-items: center;
  1422. line-height: 88rpx;
  1423. justify-content: space-around;
  1424. position: fixed;
  1425. left: 0;
  1426. right: 0;
  1427. top: 0;
  1428. background: #fff;
  1429. z-index: 99;
  1430. }
  1431. .appoint-tab-item {
  1432. font-weight: bold;
  1433. font-size: 30rpx;
  1434. color: #191919;
  1435. /* width:80rpx; */
  1436. }
  1437. .appoint-tab-item.active {
  1438. color: #fe2b54;
  1439. /* border-bottom:4rpx solid #09afff; */
  1440. }
  1441. .detail-btn {
  1442. width: 148rpx;
  1443. text-align: center;
  1444. line-height: 60rpx;
  1445. text-align: center;
  1446. font-size: 26rpx;
  1447. color: #00b9ff;
  1448. margin-top: -20rpx;
  1449. /* margin-left:340rpx; */
  1450. width: 170rpx;
  1451. height: 60rpx;
  1452. background: #ffffff;
  1453. border: 2rpx solid #00b9ff;
  1454. border-radius: 60px;
  1455. float: right;
  1456. }
  1457. .status-tips {
  1458. height: 56rpx;
  1459. background: #ebebeb;
  1460. border-radius: 10rpx;
  1461. display: flex;
  1462. align-items: center;
  1463. padding: 0 0 0 16rpx;
  1464. margin-top: 24rpx;
  1465. }
  1466. .status-tips image {
  1467. width: 36rpx;
  1468. height: 32rpx;
  1469. }
  1470. .status-tips view {
  1471. font-size: 24rpx;
  1472. color: #2e3333;
  1473. }
  1474. .status-tips .tips-title {
  1475. color: #191919;
  1476. font-weight: bold;
  1477. margin: 0 16rpx;
  1478. }
  1479. .customer-msg {
  1480. background: #ebebeb;
  1481. border-radius: 10rpx;
  1482. display: flex;
  1483. padding: 12rpx 16rpx;
  1484. margin-top: 24rpx;
  1485. }
  1486. .customer-msg .msg-title {
  1487. color: #fe2b54;
  1488. font-weight: bold;
  1489. font-size: 24rpx;
  1490. white-space: nowrap;
  1491. }
  1492. .customer-msg .msg-text {
  1493. line-height: 34rpx;
  1494. display: -webkit-box;
  1495. -webkit-box-orient: vertical;
  1496. -webkit-line-clamp: 2;
  1497. text-overflow: ellipsis;
  1498. overflow: hidden;
  1499. font-size: 24rpx;
  1500. color: #000000;
  1501. }
  1502. .over-time {
  1503. position: absolute;
  1504. top: 170rpx;
  1505. right: 0;
  1506. line-height: 40rpx;
  1507. color: #ad0000;
  1508. font-size: 28rpx;
  1509. }
  1510. .eval-btn {
  1511. text-align: center;
  1512. font-size: 24rpx;
  1513. color: #fff;
  1514. margin-left: 20rpx;
  1515. width: 160rpx;
  1516. height: 56rpx;
  1517. line-height: 56rpx;
  1518. background: linear-gradient(90deg, #ff9c49 0%, #ff8219 100%);
  1519. border-radius: 56rpx;
  1520. margin-top: 10rpx;
  1521. border: 2rpx solid #ff8219;
  1522. color: #ff8219;
  1523. background: #fff;
  1524. }
  1525. .order-operate-wrapper view.eval-btn {
  1526. border: 2rpx solid #ff8219;
  1527. color: #ff8219;
  1528. background: #fff;
  1529. }
  1530. .tips-item{
  1531. background: #fff;
  1532. border-radius:12rpx;
  1533. padding:30rpx 0rpx 0;
  1534. margin-bottom: 20rpx;
  1535. }
  1536. .tips-item-title{
  1537. display: flex;
  1538. height:40rpx;
  1539. align-items: center;
  1540. justify-content: space-between;
  1541. margin-bottom:20rpx;
  1542. padding:0 32rpx;
  1543. }
  1544. .item-title-left{
  1545. display: flex;
  1546. align-items: center;
  1547. }
  1548. .item-title-left image{
  1549. width:28rpx;
  1550. height:28rpx;
  1551. margin-right:8rpx;
  1552. }
  1553. .item-title-left text{
  1554. font-size: 28rpx;
  1555. font-weight: bold;
  1556. color:#333;
  1557. }
  1558. .item-title-right{
  1559. height: 34rpx;
  1560. background: #FFFFFF;
  1561. border-radius: 4rpx;
  1562. border: 1rpx solid #5FB306;
  1563. padding:0 8rpx;
  1564. line-height: 34rpx;
  1565. font-size: 22rpx;
  1566. color: #5FB306;
  1567. }
  1568. .tips-item-line{
  1569. display: flex;
  1570. height:44rpx;
  1571. margin-bottom:20rpx;
  1572. align-items: center;
  1573. justify-content: space-between;
  1574. padding:0 32rpx;
  1575. }
  1576. .tips-item-line .line-left{
  1577. font-size: 28rpx;
  1578. color: #999999;
  1579. }
  1580. .tips-item-line .line-right{
  1581. font-size: 28rpx;
  1582. color: #333333;
  1583. font-weight: bold;
  1584. width:500rpx;
  1585. overflow: hidden;
  1586. white-space: nowrap;
  1587. text-overflow: ellipsis;
  1588. text-align: right;
  1589. }
  1590. .line-right text{
  1591. color: #5FB306;
  1592. }
  1593. .tips-item-content{
  1594. background: #FF4447;
  1595. border-radius: 0rpx 0rpx 14rpx 14rpx;
  1596. padding:24rpx 24rpx 24rpx 32rpx;
  1597. line-height: 40rpx;
  1598. font-size: 28rpx;
  1599. color: rgba(255,255,255,0.9);
  1600. }
  1601. .order-devide{
  1602. height:40rpx;
  1603. margin-bottom:20rpx;
  1604. display: flex;
  1605. align-items: center;
  1606. justify-content: space-between;
  1607. padding:0 4rpx;
  1608. }
  1609. .order-devide .line{
  1610. width: 290rpx;
  1611. height: 1rpx;
  1612. background: #979797;
  1613. }
  1614. .order-devide .devide-text{
  1615. font-size: 28rpx;
  1616. color: #999999;
  1617. }
  1618. /* 退款弹框 */
  1619. .refund-order-overlay {
  1620. width: 750rpx;
  1621. height: 100vh;
  1622. background: rgba(0, 0, 0, 0.5);
  1623. display: flex;
  1624. align-items: center;
  1625. justify-content: center;
  1626. position: fixed;
  1627. top: 0;
  1628. bottom: 0;
  1629. z-index:999;
  1630. flex-direction: column;
  1631. }
  1632. .refund-order-dialog {
  1633. width: 606rpx;
  1634. height: 644rpx;
  1635. border-radius: 14rpx;
  1636. background: #ffffff;
  1637. border-radius: 20rpx;
  1638. position: relative;
  1639. padding: 300rpx 30rpx 40rpx;
  1640. background: url('https://jzmall.lifejingzhi.com/file/jzmall-dy/dia-bg-refund.png') no-repeat;
  1641. background-color: #FFFFFF;
  1642. background-size: 606rpx 210rpx;
  1643. }
  1644. .refund-order-dialog.refund-order-dia-success{
  1645. padding: 200rpx 30rpx 40rpx;
  1646. background-image: url('https://jzmall.lifejingzhi.com/file/jzmall-dy/dia-bg-refund-success.png');
  1647. height:auto;
  1648. }
  1649. .refund-order-dia-success .dia-btn-wrapper{
  1650. justify-content: center;
  1651. }
  1652. .refund-order-dia-success .dia-cancel-btn{
  1653. width:484rpx;
  1654. font-weight: bold;
  1655. border: 2rpx solid #0093FF;
  1656. color: #0093FF;
  1657. }
  1658. .refund-dia-title {
  1659. height: 56rpx;
  1660. font-weight: bold;
  1661. font-size: 40rpx;
  1662. color: rgba(0,0,0,0.85);
  1663. line-height: 56rpx;
  1664. text-align: center;
  1665. margin:60rpx 0 34rpx;
  1666. }
  1667. .refund-dia-tips {
  1668. width: 540rpx;
  1669. color: #333333;
  1670. line-height: 46rpx;
  1671. font-size: 32rpx;
  1672. color: rgba(0,0,0,0.85);
  1673. text-align: center;
  1674. white-space: wrap;
  1675. margin-bottom: 120rpx;
  1676. font-weight: bold;
  1677. }
  1678. .dia-btn-wrapper {
  1679. height:94rpx;
  1680. display: flex;
  1681. justify-content: space-between;
  1682. }
  1683. .dia-cancel-btn{
  1684. width: 248rpx;
  1685. height: 94rpx;
  1686. line-height: 94rpx;
  1687. border-radius: 94rpx;
  1688. border: 2rpx solid #0093FF;
  1689. font-size: 32rpx;
  1690. color: #0093FF;
  1691. /* font-weight: bold; */
  1692. text-align: center;
  1693. }
  1694. .dia-conf-btn{
  1695. width: 258rpx;
  1696. height: 94rpx;
  1697. line-height: 94rpx;
  1698. border-radius: 94rpx;
  1699. font-size: 32rpx;
  1700. color: #fff;
  1701. font-weight: bold;
  1702. background: #0093FF;
  1703. text-align: center;
  1704. }
  1705. .modify-list{
  1706. margin:0 0 44rpx;
  1707. max-height: 400rpx;
  1708. overflow-y: scroll;
  1709. }
  1710. .modify-item{
  1711. height: 46rpx;
  1712. margin-bottom:18rpx;
  1713. display: flex;
  1714. align-items: center;
  1715. justify-content: center;
  1716. line-height:46rpx;
  1717. }
  1718. .modify-item image{
  1719. width:30rpx;
  1720. height:30rpx;
  1721. margin-right:16rpx;
  1722. }
  1723. .modify-item view{
  1724. font-size: 32rpx;
  1725. color: rgba(102,102,102,0.85);
  1726. }
  1727. .modify-item view.current-modify{
  1728. color: rgba(0,0,0,0.85);
  1729. font-weight: bold;
  1730. }
  1731. .modify-close{
  1732. width:80rpx;
  1733. height:80rpx;
  1734. margin-top:58rpx;
  1735. }
  1736. .warning-color {
  1737. background: linear-gradient(90deg, #af4318 0%, #c96405 100%) !important;
  1738. }
  1739. /* 选择备注 */
  1740. .appoint-overlay-wrapper.remark-overlay {
  1741. display: flex;
  1742. align-items: flex-end;
  1743. justify-content: center;
  1744. position: fixed;
  1745. top: 0;
  1746. left: 0;
  1747. width: 100%;
  1748. height: 100%;
  1749. background-color: rgba(0, 0, 0, 0.7);
  1750. z-index: 999;
  1751. }
  1752. .remark-select {
  1753. width: 750rpx;
  1754. padding: 0 24rpx 56rpx;
  1755. background: #ffffff;
  1756. border-radius: 24rpx 24rpx 0 0;
  1757. }
  1758. .remark-select .title {
  1759. font-weight: 600;
  1760. color: #191919;
  1761. font-size: 30rpx;
  1762. height: 90rpx;
  1763. line-height: 90rpx;
  1764. text-align: center;
  1765. border-bottom: 2rpx solid #e0e0e0;
  1766. }
  1767. .remark-item .remark-value {
  1768. color: #191919;
  1769. font-size: 26rpx;
  1770. font-weight: bold;
  1771. flex: 1;
  1772. text-align: left;
  1773. }
  1774. .remark-list .remark-item {
  1775. height: 84rpx;
  1776. display: flex;
  1777. border-bottom: 2rpx solid #e0e0e0;
  1778. align-items: center;
  1779. }
  1780. .remark-item .radio-img {
  1781. width: 26rpx;
  1782. height: 26rpx;
  1783. }
  1784. .remark-conf-btn {
  1785. width: 652rpx;
  1786. height: 90rpx;
  1787. line-height: 90rpx;
  1788. border-radius: 90rpx;
  1789. border: 4rpx solid #ff8219;
  1790. text-align: center;
  1791. font-size: 36rpx;
  1792. color: #ff8219;
  1793. margin: 0 auto;
  1794. margin-top: 54rpx;
  1795. }
  1796. .remark-list .remark-item.ser-item{
  1797. border:none;
  1798. background: #B5EDFF;
  1799. border-radius: 12px;
  1800. height:130rpx;
  1801. padding:0 30rpx;
  1802. margin-bottom:24rpx;
  1803. }
  1804. .remark-list .remark-item.ser-item.current-ser{
  1805. background: #FA6400;
  1806. }
  1807. .remark-item.ser-item .remark-value{
  1808. color:#666;
  1809. font-size: 32rpx;
  1810. font-weight:normal;
  1811. flex:1;
  1812. }
  1813. .remark-item.ser-item view{
  1814. color:#666;
  1815. font-size: 32rpx;
  1816. font-weight:normal;
  1817. }
  1818. .remark-item.ser-item.current-ser .remark-value{
  1819. color:#fff;
  1820. font-weight:bold;
  1821. }
  1822. .remark-item.ser-item.current-ser view{
  1823. color:#fff;
  1824. font-weight:bold;
  1825. }
  1826. .remark-item.ser-item .radio-img{
  1827. width:30rpx;
  1828. height:30rpx;
  1829. margin-right:26rpx;
  1830. }
  1831. .ser-right{
  1832. text-align:right;
  1833. }
  1834. .remark-list.ser-list{
  1835. min-height:500rpx;
  1836. max-height: 800rpx;
  1837. overflow-y: scroll;
  1838. }
  1839. .remain-content{
  1840. height: 50rpx;
  1841. background-color: #B5EDFF;
  1842. color: #000;
  1843. line-height: 50rpx;
  1844. border-radius: 12rpx;
  1845. font-size: 24rpx;
  1846. font-weight: bold;
  1847. padding-left: 20rpx;
  1848. }
  1849. .paybt{
  1850. display: inline-block;
  1851. color: #606060;
  1852. border: 2rpx solid #ccc;
  1853. height: 96rpx;
  1854. padding: 0 32rpx;
  1855. border-radius: 56rpx;
  1856. font-size: 40rpx;
  1857. line-height: 96rpx;
  1858. }
  1859. </style>