index.vue 38 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545
  1. <template>
  2. <view class="order">
  3. <view class="fix">
  4. <view class="top"></view>
  5. <view class="head">
  6. <view class="case">
  7. <view class="select_type">
  8. <div class="tab-item" :class="tabIndex == 0?'active':''"
  9. @click="getList(servicePage),tabIndex=0;productName='';productStatus=0;merchantUserInfo = '';orderList = [];buyStartTime = '';buyEndTime = ''">
  10. 普通订单</div>
  11. <div class="tab-item" :class="tabIndex == 1?'active':''"
  12. @click="getserviceList(servicePage),tabIndex=1;productName='';productStatus=0;merchantUserInfo = '';serviceList = [];buyStartTime = '';buyEndTime = ''">
  13. 服务订单</div>
  14. </view>
  15. </view>
  16. </view>
  17. <view class="manage">
  18. <view class="search">
  19. <image src="/static/index/search.png" mode=""></image>
  20. <u-input type="text" v-model="merchantUserInfo" placeholder="请输入关键词" />
  21. <span @click="searchList">搜索</span>
  22. </view>
  23. <view class="action " @click="selectTime">
  24. <view class="cuIcon-filter"></view>
  25. </view>
  26. </view>
  27. <view class="select" v-if="tabIndex == 0">
  28. <view class="type" :class="currentIndex == index?'active':''" v-for="(item,index) in typeList" :key="index"
  29. @click="selectType(item,index)">
  30. {{item.name}}
  31. </view>
  32. </view>
  33. <view class="select" v-if="tabIndex == 1">
  34. <view class="type" :class="currentIndex == index?'active':''" v-for="(item,index) in statusList" :key="index"
  35. @click="selectSeiviceType(item,index)">
  36. {{item.name}}
  37. </view>
  38. </view>
  39. </view>
  40. <mescroll-uni class="list" :fixed="false" ref="mescrollRef" @up="getList" @init="mescrollInit" :use="false"
  41. v-if="tabIndex ==0">
  42. <view class="order_item" v-for="(item,index) in orderList" :key="item.id" @click="geDetail(item)">
  43. <view class="order_id">
  44. <view class="id_left">
  45. 订单编号:{{item.orderId}}
  46. </view>
  47. <view class="id_right" v-if="item.stateCode ==0" style="color: #ff9900;">
  48. 待使用
  49. </view>
  50. <view class="id_right" v-if="item.stateCode ==1">
  51. 已使用
  52. </view>
  53. <!-- <view class="id_right" v-if="item.stateCode == 2">
  54. 待评价
  55. </view>
  56. <view class="id_right" v-if="item.stateCode ==3">
  57. 已过期
  58. </view> -->
  59. <view class="id_right" v-if="item.stateCode == 5">
  60. 待付款
  61. </view>
  62. <view class="id_right" v-if="item.stateCode == 6">
  63. 支付中
  64. </view>
  65. <view class="id_right" v-if="item.stateCode == 7">
  66. 支付失败
  67. </view>
  68. <view class="id_right" v-if="item.stateCode == 8">
  69. 已撤销
  70. </view>
  71. <view class="id_right" v-if="item.stateCode == 9">
  72. 已退款
  73. </view>
  74. <view class="id_right" v-if="item.stateCode == 10">
  75. 订单关闭
  76. </view>
  77. <view class="id_right" v-if="item.stateCode == 11">
  78. 已取消
  79. </view>
  80. <!-- <view class="id_right" v-if="item.stateCode == 4 && item.refundType !=1" style="color:#449AFF ;">
  81. 退款/售后
  82. </view> -->
  83. <view class="id_right" v-if="item.refundType ==0 && item.stateCode == 4">
  84. 售后申请中
  85. </view>
  86. <view class="id_right" v-if="item.refundType ==1 && item.stateCode == 4">
  87. 退款成功
  88. </view>
  89. <view class="id_right" v-if="item.refundType ==2 && item.stateCode == 4">
  90. 退款中
  91. </view>
  92. <view class="id_right" v-if="item.refundType ==3 && item.stateCode == 4">
  93. 退款失败
  94. </view>
  95. <view class="id_right" v-if="item.refundType ==4 && item.stateCode == 4">
  96. 拒绝退款
  97. </view>
  98. <view class="id_right" v-if="item.refundType ==99 && item.stateCode == 4">
  99. 挂起
  100. </view>
  101. </view>
  102. <!-- <view class="order_id" v-if="item.stateCode == 4 && item.refundType ">
  103. </view> -->
  104. <!-- 普通订单 -->
  105. <view class="order_product" v-if="item.categoryId != 1945013773786701826">
  106. <view class="img" >
  107. <image :src="item.productImage" mode=""></image>
  108. </view>
  109. <view class="name">
  110. {{item.productName}}
  111. <span class="exceed" v-if="item.orderType == 4"
  112. style="color: #999999;">适用范围:{{item.remark==1?'本店可用':item.remark==2?'部分分类商品可用':'部分分类商品不可用'}}</span>
  113. <span v-if="item.orderType == 4" style="color: #999999;"> 使用期限:{{item.startTime}} --{{item.endTime}}</span>
  114. <span v-if="item.orderType != 4">¥{{item.orderPrice}}</span>
  115. </view>
  116. <view class="ticket" v-if="item.isUseRights">
  117. <image src="/static/product/ticket.png" mode=""></image>
  118. </view>
  119. </view>
  120. <!-- 钣金喷漆订单 -->
  121. <view class="spec" v-if="item.categoryId == 1945013773786701826">
  122. <view class="" v-if="item.orderLinkCategorySpecItems && item.orderLinkCategorySpecItems.length>0">
  123. <view class="order_product"
  124. v-for="(specitem, specIndex) in item.orderLinkCategorySpecItems.slice(0, item.isShow ? item.orderLinkCategorySpecItems.length : 2)"
  125. :key="specIndex">
  126. <view class="img">
  127. <image :src="item.productImage" mode=""></image>
  128. </view>
  129. <view class="spec_item">
  130. <view class="top">
  131. {{item.productName}}
  132. </view>
  133. <view class="content">
  134. <view class="left">
  135. <view class="cventer">
  136. {{specitem.partName}} {{specitem.positionName}}
  137. </view>
  138. <view class="foot">
  139. {{specitem.craftName}}
  140. </view>
  141. </view>
  142. <view class="right">
  143. <span style="font-size: 22rpx;color: #333333;">¥{{specitem.soldPrice}}</span>
  144. <span
  145. style="text-decoration: line-through;font-size: 18rpx;color: #999999;">¥{{specitem.price}}</span>
  146. </view>
  147. </view>
  148. </view>
  149. </view>
  150. </view>
  151. <view class="is_show" @click.stop="unfold(index)"
  152. v-if="item.orderLinkCategorySpecItems&&item.orderLinkCategorySpecItems.length > 2">
  153. {{item.isShow?'收起查看':'展开查看'}}
  154. <image src="/static/order/hidden.png" mode="" v-if="item.isShow"></image>
  155. <image src="/static/order/show.png" mode="" v-else></image>
  156. </view>
  157. </view>
  158. <view class="time">
  159. <view class="time_left">
  160. {{item.orderStateTimeName}}:{{item.orderStateTime}}
  161. </view>
  162. <view class="time_right" @click.stop="goRecord(item)" v-if="item.auditType =='0'">
  163. 去处理
  164. </view>
  165. <view class="all_price" v-if="item.categoryId == 1945013773786701826">
  166. <span style="font-size: 22rpx;color: #FD4912;margin-right: 10rpx;">¥已优惠{{item.couponPrice}}</span>
  167. <span style="font-size: 26rpx;color: #FD4912;"><text
  168. style="font-size: 22rpx;">¥</text>{{item.orderPrice}}</span>
  169. </view>
  170. </view>
  171. </view>
  172. </mescroll-uni>
  173. <!-- 服务订单 -->
  174. <mescroll-uni class="list" :fixed="false" ref="mescrollRef" @up="getserviceList" @init="mescrollInit" :use="false"
  175. v-if="tabIndex == 1">
  176. <view class="service_order" v-for="item in serviceList" :key="item.orderNo" @click="goDetail(item)">
  177. <view class="item_title">
  178. <span>订单编号:{{item.orderNo}}</span>
  179. <span>{{item.status}}</span>
  180. </view>
  181. <view class="car_id">
  182. {{item.licenseNo}}
  183. <!-- <span>{{item.checkType==0?'上门取车':'送车到站'}}</span> -->
  184. <span v-if="item.checkType==0">上门取车</span>
  185. <span v-if="item.checkType==1">送车到站</span>
  186. <span v-if="item.checkType==21">搭电救援</span>
  187. <span v-if="item.checkType==22">换胎救援</span>
  188. <span v-if="item.checkType==23">拖车救援</span>
  189. </view>
  190. <view class="name">
  191. {{item.productName}}
  192. <span @click.stop="goGetCar(item)" v-if="item.checkType == 0">取车地点</span>
  193. </view>
  194. <view class="time">
  195. <span>{{item.date}}</span>
  196. <span> <text>¥</text> {{item.rightsId?0:item.price}}</span>
  197. </view>
  198. <view class="btn_box">
  199. <view class="btn" @click.stop="goLive(item)">
  200. 实况记录
  201. </view>
  202. <view class="btn" style="margin-left: 16rpx;" @click.stop="callService(item)">
  203. 联系客服
  204. </view>
  205. <view class="btn border" @click.stop="callUser(item)">
  206. 联系客户
  207. </view>
  208. <!-- 03显示救援接单 -->
  209. <view class="btn join" @click.stop="receive(item)" v-if="item.checkType<20 && item.statusCode ==2"
  210. style="margin-left: 16rpx;">
  211. 接单
  212. </view>
  213. <view class="btn join" @click.stop="receive(item)" v-if="item.checkType>20 && item.flowStatus =='03'"
  214. style="margin-left: 16rpx;">
  215. 接单
  216. </view>
  217. <!-- 送车到站按钮区域开始item.checkType==1 -->
  218. <view class="" v-if="item.checkType==1" style="flex:1;display: flex;justify-content: space-around;">
  219. <view class="btn join" @click.stop="collect(item)" v-if="item.statusCode ==3 && item.flowStatus =='05'">
  220. 确认收车
  221. </view>
  222. <view class="btn join" @click.stop="finish(item)" v-if="item.statusCode ==4">
  223. 检测完成
  224. </view>
  225. <view class="btn join" @click.stop="takeCar(item)" v-if="item.statusCode ==5 && item.flowStatus =='12'">
  226. 确认取车
  227. </view>
  228. <view class="btn join" @click.stop="evaluate(item)" v-if="item.flowStatus =='16' ">
  229. 去评价
  230. </view>
  231. </view>
  232. <!-- 送车到站按钮区域结束
  233. 上门取车按钮区域开始item.checkType==0 -->
  234. <view class="" v-if="item.checkType == 0" style="flex:1;display: flex;justify-content: space-around;">
  235. <view class="btn join" @click.stop="goGetCar(item)" v-if="item.statusCode ==5 && item.flowStatus == 4">
  236. 去取车
  237. </view>
  238. <view class="btn join" @click.stop="collect(item)" v-if="item.statusCode ==5 && item.flowStatus == 5">
  239. 确认取车
  240. </view>
  241. <view class="btn join" @click.stop="finish(item)"
  242. v-if="item.statusCode ==4 && item.flowStatus==7 || item.flowStatus==8">
  243. 检测完成
  244. </view>
  245. <view class="btn join" @click.stop="goAlso(item)" v-if="item.statusCode ==3 && item.flowStatus==12">
  246. 去送车
  247. </view>
  248. <view class="btn join" @click.stop="delivered(item)" v-if="item.statusCode ==3&& item.flowStatus==13">
  249. 车已送达
  250. </view>
  251. <view class="btn join" @click.stop="evaluate(item)" v-if=" item.flowStatus =='16' ">
  252. 去评价
  253. </view>
  254. </view>
  255. <!-- 上门取车按钮区域结束 -->
  256. <!-- 救援相关按钮 -->
  257. <view class="" v-if="item.checkType >20 " style="flex:1;display: flex;justify-content: space-around;">
  258. <!--flowStatus == 04 显示-->
  259. <view class="btn join" @click.stop="depart(item)" v-if="item.flowStatus == '04'">
  260. 出发
  261. </view>
  262. <view class="btn join" @click.stop="arrive(item)" v-if="item.flowStatus == '05'">
  263. 到达现场
  264. </view>
  265. <view class="btn join" @click.stop="help(item)"
  266. v-if="item.statusCode ==4 && item.flowStatus=='07' || item.flowStatus=='06'|| item.flowStatus=='08'">
  267. 救援完成
  268. </view>
  269. <view class="btn join" @click.stop="evaluate(item)" v-if=" item.flowStatus =='12' ">
  270. 去评价
  271. </view>
  272. </view>
  273. </view>
  274. <!-- 年审 -->
  275. <view class="add_service" @click.stop="addService(item)" v-if="item.checkType<20 &&item.statusCode==4 ">
  276. <span>添加收费服务</span>
  277. </view>
  278. <!-- 救援 -->
  279. <view class="add_service" @click.stop="addService(item)"
  280. v-if="item.checkType>20&&(item.flowStatus== '06'||item.flowStatus== '07'||item.flowStatus== '08') ">
  281. <span>添加收费服务</span>
  282. </view>
  283. <view class="child_order">
  284. <view class="row" v-for="row in item.children" :key="row.orderNo">
  285. <view class="row_title">
  286. <span>订单编号:{{row.orderNo}}</span>
  287. <span class="row_status">{{row.status}}</span>
  288. </view>
  289. <view class="row_name">
  290. {{row.productName}}
  291. </view>
  292. <view class="row_price">
  293. <span><text>¥</text>{{row.price}}</span>
  294. <view class="row_detail" @click.stop="lookDetail(row)">
  295. 服务明细
  296. </view>
  297. </view>
  298. <view class="row_time">
  299. {{row.date}}
  300. </view>
  301. <view class="row_btn" @click.stop="editProject(row)"
  302. v-if="(row.statusCode == '0'|| row.statusCode == '7')&&item.count==0 ">
  303. <span>修改收费服务</span>
  304. </view>
  305. </view>
  306. </view>
  307. </view>
  308. </mescroll-uni>
  309. <rangTime ref="rangTime" :mode="mode" :isYear="true" @onSubmit="onEndTimeChange" @cut="cutPopup" />
  310. <receive @cut="isReceive =false" v-if="isReceive" :titleCheckType="titleCheckType" />
  311. <serviceDetail :subOrderId="subOrderId" @cut="cutsubOrderId" v-if="isServiceDeatil" />
  312. <upload :type="uptype" :taskId="taskId" v-if="isUpload" @cut="isUpload = false" @upSuccess="upSuccess" />
  313. <evaluate :userId="userId" :taskId="taskId" v-if="iseEvaluate" @cut="cutEvaluate" />
  314. </view>
  315. </template>
  316. <script>
  317. import receive from '../order/components/receiveOrder.vue'
  318. import upload from '../order/components/upload.vue'
  319. import evaluate from '../order/components/evaluate.vue'
  320. import serviceDetail from '../order/components/serviceDetail.vue'
  321. import rangTime from '../../components/dengrq-datetime-picker/dateSelector/index.vue'
  322. export default {
  323. components: {
  324. rangTime,
  325. receive,
  326. serviceDetail,
  327. upload,
  328. evaluate
  329. },
  330. data() {
  331. return {
  332. search: '',
  333. mode: 1,
  334. currentIndex: 0,
  335. merchantId: '',
  336. buyStartTime: '',
  337. buyEndTime: '',
  338. typeList: [{
  339. type: '',
  340. name: '全部'
  341. },
  342. {
  343. type: 5,
  344. name: '待付款'
  345. },
  346. {
  347. type: 0,
  348. name: '待使用'
  349. },
  350. {
  351. type: 1,
  352. name: '已使用'
  353. },
  354. {
  355. type: 4,
  356. name: '售后'
  357. }
  358. ],
  359. statusList: [{
  360. type: '',
  361. name: '全部'
  362. },
  363. {
  364. type: 1,
  365. name: '待接单'
  366. },
  367. {
  368. type: 2,
  369. name: '服务中'
  370. },
  371. {
  372. type: 3,
  373. name: '已完成'
  374. },
  375. {
  376. type: 4,
  377. name: '售后'
  378. }
  379. ],
  380. ststusCode: '', //审车策划状态
  381. orderList: [],
  382. state: '',
  383. merchantUserInfo: '',
  384. upOption: {
  385. page: {
  386. num: 0,
  387. size: 10 // 每页数据的数量,默认10
  388. },
  389. noMoreSize: 5, // 配置列表的总数量要大于等于5条才显示'-- END --'的提示
  390. empty: {
  391. tip: '暂无相关数据'
  392. }
  393. },
  394. tabIndex: 0,
  395. serviceList: [],
  396. isReceive: false, //接单成功弹窗
  397. isServiceDeatil: false, //服务明细弹窗
  398. isUpload: false, //上传图片弹窗显隐
  399. uptype: '', //上传图片类型
  400. taskId: '', //上传图片传值
  401. checkType: '', //上传图片修改状态用
  402. subOrderId: '', //服务明细传递数据
  403. paramState: '', //上传完图片修改状态
  404. serveType: '', //服务类型
  405. iseEvaluate: false, //评价弹窗显隐
  406. userId: '', //评论用户id
  407. servicePage: {
  408. num: 1,
  409. size: 10
  410. },
  411. titleCheckType: null, //接单提示区分
  412. }
  413. },
  414. methods: {
  415. //展开/收起查看钣金喷漆子选项
  416. unfold(index) {
  417. this.orderList[index].isShow = !this.orderList[index].isShow;
  418. this.$forceUpdate();
  419. },
  420. //联系客户
  421. callUser(item) {
  422. uni.makePhoneCall({
  423. phoneNumber: item.contactsPhone,
  424. success: () => {
  425. uni.showToast({
  426. title: '正在拨号',
  427. icon: 'none'
  428. })
  429. },
  430. fail: (err) => {
  431. uni.showToast({
  432. title: '拨打失败: ' + err.errMsg,
  433. icon: 'none'
  434. })
  435. }
  436. })
  437. },
  438. //俩系客服
  439. callService(item) {
  440. uni.makePhoneCall({
  441. phoneNumber: item.custSerPhone,
  442. success: () => {
  443. uni.showToast({
  444. title: '正在拨号',
  445. icon: 'none'
  446. })
  447. },
  448. fail: (err) => {
  449. uni.showToast({
  450. title: '拨打失败: ' + err.errMsg,
  451. icon: 'none'
  452. })
  453. }
  454. })
  455. },
  456. //跳转实况记录
  457. goLive(item) {
  458. uni.navigateTo({
  459. url: '/pages/order/serviceOrder/live?taskId=' + item.taskId + '&checkType=' + item.checkType
  460. })
  461. },
  462. selectTime() {
  463. this.$refs.rangTime.open()
  464. uni.hideTabBar()
  465. },
  466. onEndTimeChange(val) {
  467. this.buyStartTime = val.startDate
  468. this.buyEndTime = val.endDate
  469. if (this.tabIndex == 0) {
  470. this.orderList = []
  471. let page = {
  472. num: 1,
  473. size: 10
  474. }
  475. this.getList(page)
  476. } else {
  477. this.serviceList = []
  478. let page = {
  479. num: 1,
  480. size: 10
  481. }
  482. this.getserviceList(page)
  483. }
  484. },
  485. cutPopup() {
  486. this.isYear = false
  487. uni.showTabBar()
  488. },
  489. mescrollInit(mescroll) {
  490. this.mescroll = mescroll;
  491. },
  492. InputBlur(e) {
  493. this.search = e.detail.value
  494. },
  495. //普通订单
  496. selectType(item, index) {
  497. this.currentIndex = index
  498. this.state = item.type
  499. this.orderList = []
  500. // this.mescroll.resetUpScroll();
  501. let page = {
  502. num: 1,
  503. size: 10
  504. }
  505. this.getList(page)
  506. },
  507. //服务订单
  508. selectSeiviceType(item, index) {
  509. this.currentIndex = index
  510. this.statusCode = item.type
  511. this.serviceList = []
  512. let page = {
  513. num: 1,
  514. size: 10
  515. }
  516. this.getserviceList(page)
  517. // this.mescroll.resetUpScroll();
  518. },
  519. searchList() {
  520. if (this.tabIndex == 0) {
  521. let page = {
  522. num: 1,
  523. size: 10
  524. }
  525. this.orderList = []
  526. this.getList(page)
  527. } else {
  528. this.serviceList = []
  529. let page = {
  530. num: 1,
  531. size: 10
  532. }
  533. this.getserviceList(page)
  534. }
  535. },
  536. //跳转至订单详情页
  537. goRecord(item) {
  538. console.log(item)
  539. uni.navigateTo({
  540. url: '/pages/order/record?orderId=' + item.orderId
  541. })
  542. },
  543. //跳转至服务订单详情页
  544. goDetail(item) {
  545. uni.navigateTo({
  546. url: '/pages/order/serviceOrder/orderDetail?taskId=' + item.taskId + '&checkType=' + item.checkType +
  547. '&rightsId=' + item.rightsId
  548. })
  549. },
  550. getList(page) {
  551. let data = {
  552. merchantId: this.merchantId,
  553. pageSize: page.size,
  554. pageNo: page.num,
  555. state: this.state,
  556. merchantUserInfo: this.merchantUserInfo,
  557. buyStartTime: this.buyStartTime,
  558. buyEndTime: this.buyEndTime
  559. }
  560. this.$http.post("/app/order/locaOrder/list", data).then(res => {
  561. this.orderList = this.orderList.concat(res.data.result.records)
  562. // 展开/收起
  563. this.orderList.forEach(item => {
  564. item.isShow = false
  565. })
  566. console.log(this.orderList)
  567. this.mescroll.endSuccess(res.data.result.records.length, res.data.result.total);
  568. uni.showTabBar()
  569. }).catch(() => {
  570. this.mescroll.endErr()
  571. })
  572. },
  573. geDetail(item) {
  574. uni.navigateTo({
  575. url: '/pages/order/details?orderId=' + item.orderId
  576. })
  577. },
  578. //获取服务订单列表
  579. getserviceList(page) {
  580. let data = {
  581. merchantId: this.merchantId,
  582. pageSize: page.size,
  583. pageNo: page.num,
  584. status: this.statusCode,
  585. searchContent: this.merchantUserInfo,
  586. buyStartTime: this.buyStartTime,
  587. buyEndTime: this.buyEndTime
  588. }
  589. this.$http.post("/ts/merchant/serviceOrder", data).then(res => {
  590. this.serviceList = this.serviceList.concat(res.data.result.records)
  591. this.mescroll.endSuccess(res.data.result.records.length, res.data.result.total);
  592. })
  593. .catch(() => {
  594. this.mescroll.endErr()
  595. })
  596. },
  597. // 接单
  598. receive(item) {
  599. console.log(item)
  600. this.titleCheckType = item.checkType
  601. let data = {
  602. taskId: item.taskId,
  603. checkType: item.checkType,
  604. paramState: '04', //商户接单成功
  605. // serveType: '01'//救援02
  606. }
  607. item.checkType < 20 ? data.serveType = '01' : data.serveType = '02'
  608. this.$http.post("/ts/merchant/update/Serve", data).then(res => {
  609. if (res.data.code == 200) {
  610. this.isReceive = true
  611. this.serviceList = []
  612. let page = {
  613. num: 1,
  614. size: 10
  615. }
  616. this.getserviceList(page)
  617. }
  618. })
  619. },
  620. //收车上传照片
  621. collect(item) {
  622. console.log(item)
  623. this.taskId = item.taskId
  624. this.checkType = item.checkType
  625. //0 取车,1送车
  626. if (item.checkType == 0) {
  627. //收车
  628. // if (item.statusCode == 5) {
  629. this.uptype = 1
  630. // }
  631. // else if (item.statusCode == 4) {
  632. // this.uptype = 3
  633. // }
  634. } else if (item.checkType == 1) {
  635. //客户送车,商户收车
  636. // if (item.statusCode == 3) {
  637. this.uptype = 2
  638. // }
  639. /* else {
  640. this.uptype = 3
  641. } */
  642. }
  643. this.paramState = '07'
  644. this.serveType = '01'
  645. this.isUpload = true
  646. // this.upSuccess('07','01')
  647. },
  648. //送车到站————检测完成
  649. upSuccess() {
  650. let data = {
  651. taskId: this.taskId,
  652. checkType: this.checkType,
  653. paramState: this.paramState, //商户上传图片成功
  654. serveType: this.serveType
  655. }
  656. this.$http.post("/ts/merchant/update/Serve", data).then(res => {
  657. if (res.data.code == 200) {
  658. this.isUpload = false
  659. this.serviceList = []
  660. let page = {
  661. num: 1,
  662. size: 10
  663. }
  664. this.getserviceList(page)
  665. } else {
  666. this.isUpload = false
  667. this.serviceList = []
  668. let page = {
  669. num: 1,
  670. size: 10
  671. }
  672. this.getserviceList(page)
  673. uni.showToast({
  674. icon: 'none',
  675. title: res.data.message
  676. })
  677. }
  678. })
  679. },
  680. //检测完成上传检测图片
  681. finish(item) {
  682. console.log(item)
  683. this.taskId = item.taskId
  684. this.checkType = item.checkType
  685. this.uptype = 3
  686. //0 取车,1送车
  687. // if (item.checkType == 0) {
  688. // // if (item.statusCode == 5) {
  689. // this.uptype = 1
  690. // // }
  691. // } else if (item.checkType == 1) {
  692. // //客户送车,商户收车
  693. // if (item.statusCode == 4) {
  694. // this.uptype = 3
  695. // }
  696. // }
  697. this.isUpload = true
  698. this.paramState = '12'
  699. this.serveType = '01'
  700. this.serviceList = []
  701. let page = {
  702. num: 1,
  703. size: 10
  704. }
  705. this.getserviceList(page)
  706. },
  707. //送车到站--确认取车
  708. takeCar(item) {
  709. console.log(item)
  710. let data = {
  711. taskId: item.taskId,
  712. checkType: item.checkType,
  713. paramState: '14', //
  714. serveType: '01'
  715. }
  716. this.$http.post("/ts/merchant/update/Serve", data).then(res => {
  717. if (res.data.code == 200) {
  718. this.isUpload = false
  719. this.serviceList = []
  720. let page = {
  721. num: 1,
  722. size: 10
  723. }
  724. this.getserviceList(page)
  725. }
  726. })
  727. },
  728. //评价弹窗显示
  729. evaluate(item) {
  730. console.log(item)
  731. this.iseEvaluate = true
  732. this.taskId = item.taskId
  733. this.userId = item.userId
  734. uni.hideTabBar()
  735. },
  736. //评价弹窗隐藏
  737. cutEvaluate() {
  738. this.iseEvaluate = false
  739. uni.showTabBar()
  740. this.serviceList = []
  741. let page = {
  742. num: 1,
  743. size: 10
  744. }
  745. this.getserviceList(page)
  746. },
  747. //查看收费服务明细
  748. lookDetail(item) {
  749. this.subOrderId = item.orderNo
  750. this.isServiceDeatil = true
  751. uni.hideTabBar()
  752. },
  753. //修改服务明细
  754. editProject(row) {
  755. console.log(row)
  756. uni.navigateTo({
  757. url: '/pages/order/serviceOrder/project?orderNo=' + row.orderNo + '&checkType=' + row.checkType +
  758. '&taskId=' + row.taskId + '&productName=' + row.productName +
  759. '&type=' + 0
  760. })
  761. },
  762. cutsubOrderId() {
  763. this.isServiceDeatil = false
  764. uni.showTabBar()
  765. },
  766. //商户去取车
  767. goGetCar(item) {
  768. // 清除之前的定时器,实现防抖
  769. if (this.getCarDebounceTimer) {
  770. clearTimeout(this.getCarDebounceTimer);
  771. }
  772. // 2000ms后执行真正的逻辑
  773. this.getCarDebounceTimer = setTimeout(() => {
  774. console.log(item);
  775. let data = {
  776. taskId: item.taskId,
  777. checkType: item.checkType,
  778. paramState: '05', //商户接单成功
  779. serveType: '01'
  780. };
  781. let that = this;
  782. this.serviceList = [];
  783. let page = {
  784. num: 1,
  785. size: 10
  786. };
  787. this.getserviceList(page);
  788. uni.openLocation({
  789. longitude: Number(item.userLongitude),
  790. latitude: Number(item.userLatitude),
  791. name: item.carAddres, // 位置名称(注意:原代码可能笔误,应该是carAddress?)
  792. // address: e.F_Address, // 位置地点
  793. success: function(res) {
  794. console.log('打开系统位置地图成功');
  795. that.$http.post("/ts/merchant/update/Serve", data).then(res => {
  796. if (res.data.code == 200) {
  797. // this.isReceive = true
  798. }
  799. });
  800. },
  801. fail: function(error) {
  802. console.log(error);
  803. },
  804. });
  805. // 执行完成后清空定时器(可选,防止内存泄漏)
  806. this.getCarDebounceTimer = null;
  807. }, 2000); // 防抖间隔2000ms
  808. },
  809. // goGetCar(item) {
  810. // console.log(item)
  811. // let data = {
  812. // taskId: item.taskId,
  813. // checkType: item.checkType,
  814. // paramState: '05', //商户接单成功
  815. // serveType: '01'
  816. // }
  817. // let that = this
  818. // // uni.navigateTo({
  819. // // url: (window.location.href = `https://uri.amap.com/navigation?to=${item.userLongitude},${item.userLatitude},${item.carAddress}&mode=car&policy=1&src=https://gawl.gazhcs.com/wap/index.html&callnative=0`)
  820. // // })
  821. // this.serviceList = []
  822. // let page = {
  823. // num: 1,
  824. // size: 10
  825. // }
  826. // this.getserviceList(page)
  827. // uni.openLocation({
  828. // longitude: Number(item.userLongitude),
  829. // latitude: Number(item.userLatitude),
  830. // name: item.carAddres, // 位置名称
  831. // // address: e.F_Address, // 位置地点
  832. // success: function(res) {
  833. // console.log('打开系统位置地图成功')
  834. // that.$http.post("/ts/merchant/update/Serve", data).then(res => {
  835. // if (res.data.code == 200) {
  836. // // this.isReceive = true
  837. // }
  838. // })
  839. // },
  840. // fail: function(error) {
  841. // console.log(error)
  842. // },
  843. // })
  844. // },
  845. //救援出发
  846. depart(item) {
  847. console.log(item)
  848. let data = {
  849. taskId: item.taskId,
  850. checkType: item.checkType,
  851. paramState: '05', //商户出发成功
  852. serveType: '02'
  853. }
  854. this.$http.post("/ts/merchant/update/Serve", data).then(res => {
  855. if (res.data.code == 200) {
  856. // this.isReceive = true
  857. this.serviceList = []
  858. let page = {
  859. num: 1,
  860. size: 10
  861. }
  862. this.getserviceList(page)
  863. }
  864. })
  865. },
  866. //救援到达现场
  867. arrive(item) {
  868. // this.taskId = item.taskId
  869. // this.checkType = item.checkType
  870. // this.uptype = 4 //道路救援
  871. // this.paramState = '06'
  872. // this.serveType = '02'
  873. let params = {
  874. taskId: item.taskId,
  875. checkType: item.checkType,
  876. uptype: 4, // 道路救援
  877. paramState: '06',
  878. serveType: '02',
  879. // isUpload: true
  880. }
  881. let queryString = Object.keys(params)
  882. .map(key => `${key}=${encodeURIComponent(params[key])}`)
  883. .join('&');
  884. uni.navigateTo({
  885. // url:'/pages/order/arriveUpload、${queryString}' paramState
  886. url: `/pages/order/arriveUpload?taskId=${item.taskId}&checkType=${item.checkType}&uptype=4&paramState=06&serveType=02&jumptype=0`
  887. })
  888. },
  889. //救援完成拍照
  890. help(item) {
  891. console.log(item)
  892. this.taskId = item.taskId
  893. this.checkType = item.checkType
  894. this.uptype = 3
  895. this.isUpload = true
  896. this.paramState = '11'
  897. this.serveType = '02'
  898. this.serviceList = []
  899. let page = {
  900. num: 1,
  901. size: 10
  902. }
  903. this.getserviceList(page)
  904. },
  905. //添加收费服务
  906. addService(item) {
  907. this.$http.get("/ts/merchant/addPaidServiceCheck?taskId=" + item.taskId).then(res => {
  908. console.log(res)
  909. if (res.data.result) {
  910. uni.navigateTo({
  911. url: '/pages/order/serviceOrder/project?checkType=' + item.checkType + '&taskId=' + item.taskId +
  912. '&orderNo=' + item.orderNo + '&productName=' + item.productName + '&type=' + 1
  913. })
  914. } else {
  915. uni.showToast({
  916. icon: 'none',
  917. title: '存在未支付服务项'
  918. })
  919. }
  920. })
  921. },
  922. //去送车修改状态
  923. goAlso(item) {
  924. let data = {
  925. taskId: item.taskId,
  926. checkType: item.checkType,
  927. paramState: '13', //商户点击去送车
  928. serveType: '01'
  929. }
  930. this.$http.post("/ts/merchant/update/Serve", data).then(res => {
  931. if (res.data.code == 200) {
  932. this.serviceList = []
  933. let page = {
  934. num: 1,
  935. size: 10
  936. }
  937. this.getserviceList(page)
  938. }
  939. })
  940. },
  941. //商户点击车已送达
  942. delivered(item) {
  943. let data = {
  944. taskId: item.taskId,
  945. checkType: item.checkType,
  946. paramState: '14', //商户点击车已送达
  947. serveType: '01'
  948. }
  949. this.$http.post("/ts/merchant/update/Serve", data).then(res => {
  950. if (res.data.code == 200) {
  951. this.serviceList = []
  952. let page = {
  953. num: 1,
  954. size: 10
  955. }
  956. this.getserviceList(page)
  957. }
  958. })
  959. }
  960. },
  961. mounted() {
  962. this.mescroll.optDown.use = false
  963. // this.getList()
  964. },
  965. onShow() {
  966. let that = this
  967. uni.getStorage({
  968. key: 'login_user_info',
  969. success: function(res) {
  970. that.merchantId = res.data.merchantId
  971. that.serviceList = []
  972. that.orderList = []
  973. let page = {
  974. num: 1,
  975. size: 10
  976. }
  977. that.getList(page)
  978. that.getserviceList(page)
  979. }
  980. })
  981. },
  982. }
  983. </script>
  984. <style lang="scss" scoped>
  985. .order {
  986. width: 100%;
  987. height: 100vh;
  988. background: #F7F8FC;
  989. display: flex;
  990. flex-direction: column;
  991. position: fixed;
  992. .fix {
  993. width: 100%;
  994. height: auto;
  995. background: #ffffff;
  996. position: sticky;
  997. top: 0px;
  998. border-bottom: 1px solid #EEEEEE;
  999. /*#ifdef APP-PLUS*/
  1000. .top {
  1001. width: 100%;
  1002. height: var(--status-bar-height);
  1003. background: #FFFFFF;
  1004. }
  1005. /*#endif*/
  1006. .head {
  1007. width: 100%;
  1008. height: 112rpx;
  1009. padding: 20rpx;
  1010. display: flex;
  1011. align-items: center;
  1012. background: #fff;
  1013. position: relative;
  1014. background: #FFFFFF;
  1015. .cuIcon-back {
  1016. font-size: 40rpx;
  1017. margin-right: 40rpx;
  1018. }
  1019. .case {
  1020. width: 100%;
  1021. position: absolute;
  1022. left: 50%;
  1023. transform: translateX(-50%);
  1024. font-size: 36rpx;
  1025. font-weight: 600;
  1026. .select_type {
  1027. display: flex;
  1028. justify-content: space-around;
  1029. .tab-item {
  1030. position: relative;
  1031. padding: 18rpx 0;
  1032. cursor: pointer;
  1033. color: #333;
  1034. font-weight: 400;
  1035. font-size: 28rpx;
  1036. }
  1037. .tab-item.active {
  1038. color: #449AFF;
  1039. font-weight: 600;
  1040. }
  1041. .tab-item.active::after {
  1042. content: '';
  1043. position: absolute;
  1044. bottom: -28px;
  1045. left: 35%;
  1046. width: 38rpx;
  1047. height: 100%;
  1048. background: url(/static/product/tab-act.png) no-repeat;
  1049. background-size: contain;
  1050. }
  1051. }
  1052. }
  1053. // .action {
  1054. // position: absolute;
  1055. // right: 24rpx;
  1056. // }
  1057. }
  1058. .manage {
  1059. display: flex;
  1060. align-items: center;
  1061. width: 100%;
  1062. padding: 0 24rpx;
  1063. .search {
  1064. width: 93%;
  1065. height: 55rpx;
  1066. background: #F7F8FC;
  1067. border-radius: 12rpx;
  1068. padding: 0rpx 24rpx;
  1069. display: flex;
  1070. align-items: center;
  1071. justify-content: space-between;
  1072. margin-right: 20rpx;
  1073. // margin: 16rpx auto 0px;
  1074. image {
  1075. width: 36rpx;
  1076. height: 36rpx;
  1077. }
  1078. input {
  1079. // height: 36rpx;
  1080. font-size: 26rpx;
  1081. }
  1082. span {
  1083. font-size: 26rpx;
  1084. color: #333333;
  1085. }
  1086. }
  1087. }
  1088. .select {
  1089. width: 100%;
  1090. height: 85rpx;
  1091. display: flex;
  1092. align-items: center;
  1093. justify-content: space-between;
  1094. padding: 0px 24rpx;
  1095. background-color: #FFFFFF;
  1096. .type {
  1097. height: 54rpx;
  1098. padding: 8rpx 12rpx;
  1099. background: #F2F3F5;
  1100. border-radius: 8rpx;
  1101. }
  1102. .active {
  1103. background: #ECF5FF;
  1104. color: #2D88F4;
  1105. }
  1106. }
  1107. }
  1108. .list {
  1109. flex: 1;
  1110. width: 100%;
  1111. overflow-y: auto;
  1112. padding-bottom: var(--window-bottom);
  1113. .order_item {
  1114. width: 100%;
  1115. background-color: #fff;
  1116. padding: 20rpx 40rpx;
  1117. margin-bottom: 20rpx;
  1118. .order_id {
  1119. width: 100%;
  1120. height: 41rpx;
  1121. font-size: 26rpx;
  1122. color: #8B91A4;
  1123. display: flex;
  1124. justify-content: space-between;
  1125. align-items: center;
  1126. .id_right {}
  1127. }
  1128. .order_product {
  1129. width: 100%;
  1130. height: 132rpx;
  1131. display: flex;
  1132. margin: 10rpx 0px;
  1133. margin-bottom: 20rpx;
  1134. .img {
  1135. width: 132rpx;
  1136. height: 132rpx;
  1137. border-radius: 12rpx;
  1138. overflow: hidden;
  1139. image {
  1140. width: 132rpx;
  1141. height: 132rpx;
  1142. }
  1143. }
  1144. .name {
  1145. height: 100%;
  1146. flex: 1;
  1147. display: flex;
  1148. flex-direction: column;
  1149. justify-content: space-between;
  1150. margin-left: 20rpx;
  1151. font-size: 28rpx;
  1152. color: #000000;
  1153. span {
  1154. font-size: 22rpx;
  1155. color: #F0761D;
  1156. }
  1157. .exceed {
  1158. width: 500rpx;
  1159. overflow: hidden;
  1160. text-overflow: ellipsis;
  1161. white-space: nowrap;
  1162. }
  1163. }
  1164. .ticket {
  1165. image {
  1166. width: 50rpx;
  1167. height: 50rpx;
  1168. }
  1169. }
  1170. .schedule {
  1171. width: 15%;
  1172. }
  1173. .spec_item {
  1174. flex: 1;
  1175. margin-left: 20rpx;
  1176. display: flex;
  1177. flex-direction: column;
  1178. justify-content: space-between;
  1179. .top {
  1180. font-size: 26rpx;
  1181. height: 38rpx;
  1182. color: #000000;
  1183. margin-bottom: 6rpx;
  1184. }
  1185. .content {
  1186. width: 100%;
  1187. flex: 1;
  1188. display: flex;
  1189. justify-content: space-between;
  1190. padding-top: 15rpx;
  1191. .left {
  1192. display: flex;
  1193. flex-direction: column;
  1194. justify-content: space-between;
  1195. font-size: 22rpx;
  1196. color: #333333;
  1197. }
  1198. .right {
  1199. text-align: right;
  1200. display: flex;
  1201. flex-direction: column;
  1202. justify-content: space-between;
  1203. }
  1204. }
  1205. }
  1206. }
  1207. .is_show {
  1208. display: flex;
  1209. align-items: center;
  1210. justify-content: center;
  1211. font-size: 24rpx;
  1212. color: #2D88F4;
  1213. image {
  1214. width: 20rpx;
  1215. height: 20rpx;
  1216. margin-left: 10rpx;
  1217. }
  1218. }
  1219. .time {
  1220. width: 100%;
  1221. display: flex;
  1222. align-items: center;
  1223. justify-content: space-between;
  1224. margin-top: 20rpx;
  1225. .time_left {
  1226. // width: 30%;
  1227. font-size: 24rpx;
  1228. color: #8A91A8;
  1229. }
  1230. .time_right {
  1231. min-width: 126rpx;
  1232. height: 50rpx;
  1233. background: rgba(240, 118, 29, 0.05);
  1234. border-radius: 8rpx;
  1235. border: 1px solid #F0761D;
  1236. font-size: 26rpx;
  1237. color: #F0761D;
  1238. display: flex;
  1239. align-items: center;
  1240. justify-content: center;
  1241. }
  1242. .all_price {
  1243. min-width: 33%;
  1244. margin-left: 10rpx;
  1245. }
  1246. }
  1247. }
  1248. .service_order {
  1249. background: #FFFFFF;
  1250. padding: 22rpx 32rpx;
  1251. margin-bottom: 20rpx;
  1252. .item_title {
  1253. width: 100%;
  1254. display: flex;
  1255. justify-content: space-between;
  1256. margin-bottom: 22rpx;
  1257. span {
  1258. font-size: 26rpx;
  1259. color: #8B91A4;
  1260. }
  1261. }
  1262. .car_id {
  1263. font-size: 30rpx;
  1264. color: #333333;
  1265. font-weight: 600;
  1266. display: flex;
  1267. align-items: center;
  1268. margin-bottom: 8rpx;
  1269. span {
  1270. width: 120rpx;
  1271. height: 40rpx;
  1272. background: #FDF6F2;
  1273. border-radius: 8rpx;
  1274. font-size: 24rpx;
  1275. line-height: 40rpx;
  1276. color: #FD4912;
  1277. text-align: center;
  1278. margin-left: 16rpx;
  1279. }
  1280. }
  1281. .name {
  1282. width: 100%;
  1283. height: 62rpx;
  1284. background: linear-gradient(90deg, #F8F9FB 0%, #FBFCFD 100%);
  1285. border-radius: 12rpx;
  1286. padding: 12rpx;
  1287. font-size: 26rpx;
  1288. color: #333333;
  1289. font-weight: 600;
  1290. margin-bottom: 8rpx;
  1291. display: flex;
  1292. justify-content: space-between;
  1293. align-items: center;
  1294. span {
  1295. display: inline-block;
  1296. width: 152rpx;
  1297. height: 50rpx;
  1298. background: rgba(240, 118, 29, 0.05);
  1299. border-radius: 35rpx;
  1300. border: 1px solid #F0761D;
  1301. font-size: 26rpx;
  1302. color: #F0761D;
  1303. text-align: center;
  1304. line-height: 50rpx;
  1305. }
  1306. }
  1307. .time {
  1308. display: flex;
  1309. align-items: center;
  1310. justify-content: space-between;
  1311. font-size: 24rpx;
  1312. color: #8A91A8;
  1313. span {
  1314. text {
  1315. font-size: 16rpx;
  1316. }
  1317. color: #FD4912;
  1318. }
  1319. }
  1320. .btn_box {
  1321. display: flex;
  1322. align-items: center;
  1323. justify-content: end;
  1324. margin-top: 20rpx;
  1325. .btn {
  1326. height: 51rpx;
  1327. padding: 6rpx 24rpx;
  1328. border-radius: 61rpx;
  1329. font-size: 26rpx;
  1330. border: 1px solid #CCCCCC;
  1331. display: flex;
  1332. align-items: center;
  1333. }
  1334. .border {
  1335. border: 1px solid #2D88F4;
  1336. color: #2D88F4;
  1337. margin-left: 16rpx;
  1338. }
  1339. .join {
  1340. background: #2D88F4;
  1341. color: #FFFFFF;
  1342. border: none;
  1343. }
  1344. }
  1345. .add_service {
  1346. width: 100%;
  1347. height: 100rpx;
  1348. background: linear-gradient(180deg, #EEF7FF 0%, #F6FBFF 100%);
  1349. border-radius: 12rpx;
  1350. margin-top: 20rpx;
  1351. display: flex;
  1352. align-items: center;
  1353. justify-content: center;
  1354. span {
  1355. width: 204rpx;
  1356. height: 50rpx;
  1357. background: linear-gradient(90deg, #53A2FF 0%, #2589FF 100%);
  1358. border-radius: 49rpx;
  1359. font-size: 26rpx;
  1360. color: #FFFFFF;
  1361. display: flex;
  1362. align-items: center;
  1363. justify-content: center;
  1364. }
  1365. }
  1366. .child_order {
  1367. width: 100%;
  1368. border-radius: 12rpx;
  1369. margin: 20rpx 0px;
  1370. .row {
  1371. margin-bottom: 20rpx;
  1372. background: linear-gradient(180deg, #EEF7FF 0%, #F6FBFF 100%);
  1373. padding: 10rpx 12rpx;
  1374. .row_title {
  1375. width: 100%;
  1376. display: flex;
  1377. align-items: center;
  1378. justify-content: space-between;
  1379. font-size: 26rpx;
  1380. color: #8B91A4;
  1381. margin-bottom: 20rpx;
  1382. .row_status {
  1383. font-size: 28rpx;
  1384. color: #FF9900;
  1385. }
  1386. }
  1387. .row_name {
  1388. font-size: 26rpx;
  1389. color: #333333;
  1390. margin-bottom: 7rpx;
  1391. font-weight: 600;
  1392. }
  1393. .row_price {
  1394. display: flex;
  1395. align-items: center;
  1396. justify-content: space-between;
  1397. margin-bottom: 7rpx;
  1398. span {
  1399. font-size: 26rpx;
  1400. color: #FD4912;
  1401. font-weight: 600;
  1402. text {
  1403. font-size: 16rpx;
  1404. }
  1405. }
  1406. .row_detail {
  1407. padding: 6rpx 24rpx;
  1408. background: #FFFFFF;
  1409. border-radius: 61rpx;
  1410. border: 1px solid #2D88F4;
  1411. font-size: 24rpx;
  1412. color: #2D88F4;
  1413. display: flex;
  1414. align-items: center;
  1415. justify-content: space-between;
  1416. }
  1417. }
  1418. .row_time {
  1419. font-size: 22rpx;
  1420. color: #888888;
  1421. margin-bottom: 16rpx;
  1422. }
  1423. .row_btn {
  1424. display: flex;
  1425. align-items: center;
  1426. justify-content: end;
  1427. span {
  1428. width: 204rpx;
  1429. height: 50rpx;
  1430. background: #2D88F4;
  1431. border-radius: 8rpx;
  1432. display: flex;
  1433. align-items: center;
  1434. justify-content: center;
  1435. font-size: 26rpx;
  1436. color: #FFFFFF;
  1437. }
  1438. }
  1439. }
  1440. }
  1441. }
  1442. }
  1443. }
  1444. </style>