index.vue 39 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563
  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. mescroll.optDown.use = false;
  492. },
  493. InputBlur(e) {
  494. this.search = e.detail.value
  495. },
  496. //普通订单
  497. selectType(item, index) {
  498. this.currentIndex = index
  499. this.state = item.type
  500. this.orderList = []
  501. // this.mescroll.resetUpScroll();
  502. let page = {
  503. num: 1,
  504. size: 10
  505. }
  506. this.getList(page)
  507. },
  508. //服务订单
  509. selectSeiviceType(item, index) {
  510. this.currentIndex = index
  511. this.statusCode = item.type
  512. this.serviceList = []
  513. let page = {
  514. num: 1,
  515. size: 10
  516. }
  517. this.getserviceList(page)
  518. // this.mescroll.resetUpScroll();
  519. },
  520. searchList() {
  521. if (this.tabIndex == 0) {
  522. let page = {
  523. num: 1,
  524. size: 10
  525. }
  526. this.orderList = []
  527. this.getList(page)
  528. } else {
  529. this.serviceList = []
  530. let page = {
  531. num: 1,
  532. size: 10
  533. }
  534. this.getserviceList(page)
  535. }
  536. },
  537. //跳转至订单详情页
  538. goRecord(item) {
  539. console.log(item)
  540. uni.navigateTo({
  541. url: '/pages/order/record?orderId=' + item.orderId
  542. })
  543. },
  544. //跳转至服务订单详情页
  545. goDetail(item) {
  546. uni.navigateTo({
  547. url: '/pages/order/serviceOrder/orderDetail?taskId=' + item.taskId + '&checkType=' + item.checkType +
  548. '&rightsId=' + item.rightsId
  549. })
  550. },
  551. getList(page) {
  552. let data = {
  553. merchantId: this.merchantId,
  554. pageSize: page.size,
  555. pageNo: page.num,
  556. state: this.state,
  557. merchantUserInfo: this.merchantUserInfo,
  558. buyStartTime: this.buyStartTime,
  559. buyEndTime: this.buyEndTime
  560. }
  561. this.$http.post("/app/order/locaOrder/list", data).then(res => {
  562. this.orderList = this.orderList.concat(res.data.result.records)
  563. // 展开/收起
  564. this.orderList.forEach(item => {
  565. item.isShow = false
  566. })
  567. if (this.mescroll) {
  568. this.mescroll.endSuccess(res.data.result.records.length, res.data.result.total);
  569. }
  570. uni.showTabBar()
  571. }).catch(() => {
  572. if (this.mescroll) {
  573. this.mescroll.endErr()
  574. }
  575. })
  576. },
  577. geDetail(item) {
  578. uni.navigateTo({
  579. url: '/pages/order/details?orderId=' + item.orderId
  580. })
  581. },
  582. //获取服务订单列表
  583. getserviceList(page) {
  584. let data = {
  585. merchantId: this.merchantId,
  586. pageSize: page.size,
  587. pageNo: page.num,
  588. status: this.statusCode,
  589. searchContent: this.merchantUserInfo,
  590. buyStartTime: this.buyStartTime,
  591. buyEndTime: this.buyEndTime
  592. }
  593. this.$http.post("/ts/merchant/serviceOrder", data).then(res => {
  594. this.serviceList = this.serviceList.concat(res.data.result.records)
  595. if (this.mescroll) {
  596. this.mescroll.endSuccess(res.data.result.records.length, res.data.result.total);
  597. }
  598. })
  599. .catch(() => {
  600. if (this.mescroll) {
  601. this.mescroll.endErr()
  602. }
  603. })
  604. },
  605. // 接单
  606. receive(item) {
  607. console.log(item)
  608. this.titleCheckType = item.checkType
  609. let data = {
  610. taskId: item.taskId,
  611. checkType: item.checkType,
  612. paramState: '04', //商户接单成功
  613. // serveType: '01'//救援02
  614. }
  615. item.checkType < 20 ? data.serveType = '01' : data.serveType = '02'
  616. this.$http.post("/ts/merchant/update/Serve", data).then(res => {
  617. if (res.data.code == 200) {
  618. this.isReceive = true
  619. this.serviceList = []
  620. let page = {
  621. num: 1,
  622. size: 10
  623. }
  624. this.getserviceList(page)
  625. }
  626. })
  627. },
  628. //收车上传照片
  629. collect(item) {
  630. console.log(item)
  631. this.taskId = item.taskId
  632. this.checkType = item.checkType
  633. //0 取车,1送车
  634. if (item.checkType == 0) {
  635. //收车
  636. // if (item.statusCode == 5) {
  637. this.uptype = 1
  638. // }
  639. // else if (item.statusCode == 4) {
  640. // this.uptype = 3
  641. // }
  642. } else if (item.checkType == 1) {
  643. //客户送车,商户收车
  644. // if (item.statusCode == 3) {
  645. this.uptype = 2
  646. // }
  647. /* else {
  648. this.uptype = 3
  649. } */
  650. }
  651. this.paramState = '07'
  652. this.serveType = '01'
  653. this.isUpload = true
  654. // this.upSuccess('07','01')
  655. },
  656. //送车到站————检测完成
  657. upSuccess() {
  658. let data = {
  659. taskId: this.taskId,
  660. checkType: this.checkType,
  661. paramState: this.paramState, //商户上传图片成功
  662. serveType: this.serveType
  663. }
  664. this.$http.post("/ts/merchant/update/Serve", data).then(res => {
  665. if (res.data.code == 200) {
  666. this.isUpload = false
  667. this.serviceList = []
  668. let page = {
  669. num: 1,
  670. size: 10
  671. }
  672. this.getserviceList(page)
  673. } else {
  674. this.isUpload = false
  675. this.serviceList = []
  676. let page = {
  677. num: 1,
  678. size: 10
  679. }
  680. this.getserviceList(page)
  681. uni.showToast({
  682. icon: 'none',
  683. title: res.data.message
  684. })
  685. }
  686. })
  687. },
  688. //检测完成上传检测图片
  689. finish(item) {
  690. console.log(item)
  691. this.taskId = item.taskId
  692. this.checkType = item.checkType
  693. this.uptype = 3
  694. //0 取车,1送车
  695. // if (item.checkType == 0) {
  696. // // if (item.statusCode == 5) {
  697. // this.uptype = 1
  698. // // }
  699. // } else if (item.checkType == 1) {
  700. // //客户送车,商户收车
  701. // if (item.statusCode == 4) {
  702. // this.uptype = 3
  703. // }
  704. // }
  705. this.isUpload = true
  706. this.paramState = '12'
  707. this.serveType = '01'
  708. this.serviceList = []
  709. let page = {
  710. num: 1,
  711. size: 10
  712. }
  713. this.getserviceList(page)
  714. },
  715. //送车到站--确认取车
  716. takeCar(item) {
  717. console.log(item)
  718. let data = {
  719. taskId: item.taskId,
  720. checkType: item.checkType,
  721. paramState: '14', //
  722. serveType: '01'
  723. }
  724. this.$http.post("/ts/merchant/update/Serve", data).then(res => {
  725. if (res.data.code == 200) {
  726. this.isUpload = false
  727. this.serviceList = []
  728. let page = {
  729. num: 1,
  730. size: 10
  731. }
  732. this.getserviceList(page)
  733. }
  734. })
  735. },
  736. //评价弹窗显示
  737. evaluate(item) {
  738. console.log(item)
  739. this.iseEvaluate = true
  740. this.taskId = item.taskId
  741. this.userId = item.userId
  742. uni.hideTabBar()
  743. },
  744. //评价弹窗隐藏
  745. cutEvaluate() {
  746. this.iseEvaluate = false
  747. uni.showTabBar()
  748. this.serviceList = []
  749. let page = {
  750. num: 1,
  751. size: 10
  752. }
  753. this.getserviceList(page)
  754. },
  755. //查看收费服务明细
  756. lookDetail(item) {
  757. this.subOrderId = item.orderNo
  758. this.isServiceDeatil = true
  759. uni.hideTabBar()
  760. },
  761. //修改服务明细
  762. editProject(row) {
  763. console.log(row)
  764. uni.navigateTo({
  765. url: '/pages/order/serviceOrder/project?orderNo=' + row.orderNo + '&checkType=' + row.checkType +
  766. '&taskId=' + row.taskId + '&productName=' + row.productName +
  767. '&type=' + 0
  768. })
  769. },
  770. cutsubOrderId() {
  771. this.isServiceDeatil = false
  772. uni.showTabBar()
  773. },
  774. //商户去取车
  775. goGetCar(item) {
  776. // 清除之前的定时器,实现防抖
  777. if (this.getCarDebounceTimer) {
  778. clearTimeout(this.getCarDebounceTimer);
  779. }
  780. // 2000ms后执行真正的逻辑
  781. this.getCarDebounceTimer = setTimeout(() => {
  782. console.log(item);
  783. let data = {
  784. taskId: item.taskId,
  785. checkType: item.checkType,
  786. paramState: '05', //商户接单成功
  787. serveType: '01'
  788. };
  789. let that = this;
  790. this.serviceList = [];
  791. let page = {
  792. num: 1,
  793. size: 10
  794. };
  795. this.getserviceList(page);
  796. uni.openLocation({
  797. longitude: Number(item.userLongitude),
  798. latitude: Number(item.userLatitude),
  799. name: item.carAddres, // 位置名称(注意:原代码可能笔误,应该是carAddress?)
  800. // address: e.F_Address, // 位置地点
  801. success: function(res) {
  802. console.log('打开系统位置地图成功');
  803. that.$http.post("/ts/merchant/update/Serve", data).then(res => {
  804. if (res.data.code == 200) {
  805. // this.isReceive = true
  806. }
  807. });
  808. },
  809. fail: function(error) {
  810. console.log(error);
  811. },
  812. });
  813. // 执行完成后清空定时器(可选,防止内存泄漏)
  814. this.getCarDebounceTimer = null;
  815. }, 2000); // 防抖间隔2000ms
  816. },
  817. // goGetCar(item) {
  818. // console.log(item)
  819. // let data = {
  820. // taskId: item.taskId,
  821. // checkType: item.checkType,
  822. // paramState: '05', //商户接单成功
  823. // serveType: '01'
  824. // }
  825. // let that = this
  826. // // uni.navigateTo({
  827. // // 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`)
  828. // // })
  829. // this.serviceList = []
  830. // let page = {
  831. // num: 1,
  832. // size: 10
  833. // }
  834. // this.getserviceList(page)
  835. // uni.openLocation({
  836. // longitude: Number(item.userLongitude),
  837. // latitude: Number(item.userLatitude),
  838. // name: item.carAddres, // 位置名称
  839. // // address: e.F_Address, // 位置地点
  840. // success: function(res) {
  841. // console.log('打开系统位置地图成功')
  842. // that.$http.post("/ts/merchant/update/Serve", data).then(res => {
  843. // if (res.data.code == 200) {
  844. // // this.isReceive = true
  845. // }
  846. // })
  847. // },
  848. // fail: function(error) {
  849. // console.log(error)
  850. // },
  851. // })
  852. // },
  853. //救援出发
  854. depart(item) {
  855. console.log(item)
  856. let data = {
  857. taskId: item.taskId,
  858. checkType: item.checkType,
  859. paramState: '05', //商户出发成功
  860. serveType: '02'
  861. }
  862. this.$http.post("/ts/merchant/update/Serve", data).then(res => {
  863. if (res.data.code == 200) {
  864. // this.isReceive = true
  865. this.serviceList = []
  866. let page = {
  867. num: 1,
  868. size: 10
  869. }
  870. this.getserviceList(page)
  871. }
  872. })
  873. },
  874. //救援到达现场
  875. arrive(item) {
  876. // this.taskId = item.taskId
  877. // this.checkType = item.checkType
  878. // this.uptype = 4 //道路救援
  879. // this.paramState = '06'
  880. // this.serveType = '02'
  881. let params = {
  882. taskId: item.taskId,
  883. checkType: item.checkType,
  884. uptype: 4, // 道路救援
  885. paramState: '06',
  886. serveType: '02',
  887. // isUpload: true
  888. }
  889. let queryString = Object.keys(params)
  890. .map(key => `${key}=${encodeURIComponent(params[key])}`)
  891. .join('&');
  892. uni.navigateTo({
  893. // url:'/pages/order/arriveUpload、${queryString}' paramState
  894. url: `/pages/order/arriveUpload?taskId=${item.taskId}&checkType=${item.checkType}&uptype=4&paramState=06&serveType=02&jumptype=0`
  895. })
  896. },
  897. //救援完成拍照
  898. help(item) {
  899. console.log(item)
  900. this.taskId = item.taskId
  901. this.checkType = item.checkType
  902. this.uptype = 3
  903. this.isUpload = true
  904. this.paramState = '11'
  905. this.serveType = '02'
  906. this.serviceList = []
  907. let page = {
  908. num: 1,
  909. size: 10
  910. }
  911. this.getserviceList(page)
  912. },
  913. //添加收费服务
  914. addService(item) {
  915. this.$http.get("/ts/merchant/addPaidServiceCheck?taskId=" + item.taskId).then(res => {
  916. console.log(res)
  917. if (res.data.result) {
  918. uni.navigateTo({
  919. url: '/pages/order/serviceOrder/project?checkType=' + item.checkType + '&taskId=' + item.taskId +
  920. '&orderNo=' + item.orderNo + '&productName=' + item.productName + '&type=' + 1
  921. })
  922. } else {
  923. uni.showToast({
  924. icon: 'none',
  925. title: '存在未支付服务项'
  926. })
  927. }
  928. })
  929. },
  930. //去送车修改状态
  931. goAlso(item) {
  932. let data = {
  933. taskId: item.taskId,
  934. checkType: item.checkType,
  935. paramState: '13', //商户点击去送车
  936. serveType: '01'
  937. }
  938. this.$http.post("/ts/merchant/update/Serve", data).then(res => {
  939. if (res.data.code == 200) {
  940. this.serviceList = []
  941. let page = {
  942. num: 1,
  943. size: 10
  944. }
  945. this.getserviceList(page)
  946. }
  947. })
  948. },
  949. //商户点击车已送达
  950. delivered(item) {
  951. let data = {
  952. taskId: item.taskId,
  953. checkType: item.checkType,
  954. paramState: '14', //商户点击车已送达
  955. serveType: '01'
  956. }
  957. this.$http.post("/ts/merchant/update/Serve", data).then(res => {
  958. if (res.data.code == 200) {
  959. this.serviceList = []
  960. let page = {
  961. num: 1,
  962. size: 10
  963. }
  964. this.getserviceList(page)
  965. }
  966. })
  967. }
  968. },
  969. onShow() {
  970. const app = getApp()
  971. if (app.globalData) {
  972. const { currentIndex, tabIndex } = app.globalData
  973. if (currentIndex !== '' && currentIndex != null) {
  974. this.currentIndex = currentIndex
  975. }
  976. if (tabIndex !== '' && tabIndex != null) {
  977. this.tabIndex = tabIndex
  978. }
  979. app.globalData.currentIndex = ''
  980. app.globalData.tabIndex = ''
  981. }
  982. const that = this
  983. uni.getStorage({
  984. key: 'login_user_info',
  985. success(res) {
  986. that.merchantId = res.data.merchantId
  987. that.serviceList = []
  988. that.orderList = []
  989. const page = { num: 1, size: 10 }
  990. that.$nextTick(() => {
  991. if (that.tabIndex == 0) {
  992. that.getList(page)
  993. } else if (that.tabIndex == 1) {
  994. that.getserviceList(page)
  995. }
  996. })
  997. }
  998. })
  999. },
  1000. }
  1001. </script>
  1002. <style lang="scss" scoped>
  1003. .order {
  1004. width: 100%;
  1005. height: 100vh;
  1006. background: #F7F8FC;
  1007. display: flex;
  1008. flex-direction: column;
  1009. position: fixed;
  1010. .fix {
  1011. width: 100%;
  1012. height: auto;
  1013. background: #ffffff;
  1014. position: sticky;
  1015. top: 0px;
  1016. border-bottom: 1px solid #EEEEEE;
  1017. /*#ifdef APP-PLUS*/
  1018. .top {
  1019. width: 100%;
  1020. height: var(--status-bar-height);
  1021. background: #FFFFFF;
  1022. }
  1023. /*#endif*/
  1024. .head {
  1025. width: 100%;
  1026. height: 112rpx;
  1027. padding: 20rpx;
  1028. display: flex;
  1029. align-items: center;
  1030. background: #fff;
  1031. position: relative;
  1032. background: #FFFFFF;
  1033. .cuIcon-back {
  1034. font-size: 40rpx;
  1035. margin-right: 40rpx;
  1036. }
  1037. .case {
  1038. width: 100%;
  1039. position: absolute;
  1040. left: 50%;
  1041. transform: translateX(-50%);
  1042. font-size: 36rpx;
  1043. font-weight: 600;
  1044. .select_type {
  1045. display: flex;
  1046. justify-content: space-around;
  1047. .tab-item {
  1048. position: relative;
  1049. padding: 18rpx 0;
  1050. cursor: pointer;
  1051. color: #333;
  1052. font-weight: 400;
  1053. font-size: 28rpx;
  1054. }
  1055. .tab-item.active {
  1056. color: #449AFF;
  1057. font-weight: 600;
  1058. }
  1059. .tab-item.active::after {
  1060. content: '';
  1061. position: absolute;
  1062. bottom: -28px;
  1063. left: 35%;
  1064. width: 38rpx;
  1065. height: 100%;
  1066. background: url(/static/product/tab-act.png) no-repeat;
  1067. background-size: contain;
  1068. }
  1069. }
  1070. }
  1071. // .action {
  1072. // position: absolute;
  1073. // right: 24rpx;
  1074. // }
  1075. }
  1076. .manage {
  1077. display: flex;
  1078. align-items: center;
  1079. width: 100%;
  1080. padding: 0 24rpx;
  1081. .search {
  1082. width: 93%;
  1083. height: 55rpx;
  1084. background: #F7F8FC;
  1085. border-radius: 12rpx;
  1086. padding: 0rpx 24rpx;
  1087. display: flex;
  1088. align-items: center;
  1089. justify-content: space-between;
  1090. margin-right: 20rpx;
  1091. // margin: 16rpx auto 0px;
  1092. image {
  1093. width: 36rpx;
  1094. height: 36rpx;
  1095. }
  1096. input {
  1097. // height: 36rpx;
  1098. font-size: 26rpx;
  1099. }
  1100. span {
  1101. font-size: 26rpx;
  1102. color: #333333;
  1103. }
  1104. }
  1105. }
  1106. .select {
  1107. width: 100%;
  1108. height: 85rpx;
  1109. display: flex;
  1110. align-items: center;
  1111. justify-content: space-between;
  1112. padding: 0px 24rpx;
  1113. background-color: #FFFFFF;
  1114. .type {
  1115. height: 54rpx;
  1116. padding: 8rpx 12rpx;
  1117. background: #F2F3F5;
  1118. border-radius: 8rpx;
  1119. }
  1120. .active {
  1121. background: #ECF5FF;
  1122. color: #2D88F4;
  1123. }
  1124. }
  1125. }
  1126. .list {
  1127. flex: 1;
  1128. width: 100%;
  1129. overflow-y: auto;
  1130. padding-bottom: var(--window-bottom);
  1131. .order_item {
  1132. width: 100%;
  1133. background-color: #fff;
  1134. padding: 20rpx 40rpx;
  1135. margin-bottom: 20rpx;
  1136. .order_id {
  1137. width: 100%;
  1138. height: 41rpx;
  1139. font-size: 26rpx;
  1140. color: #8B91A4;
  1141. display: flex;
  1142. justify-content: space-between;
  1143. align-items: center;
  1144. .id_right {}
  1145. }
  1146. .order_product {
  1147. width: 100%;
  1148. height: 132rpx;
  1149. display: flex;
  1150. margin: 10rpx 0px;
  1151. margin-bottom: 20rpx;
  1152. .img {
  1153. width: 132rpx;
  1154. height: 132rpx;
  1155. border-radius: 12rpx;
  1156. overflow: hidden;
  1157. image {
  1158. width: 132rpx;
  1159. height: 132rpx;
  1160. }
  1161. }
  1162. .name {
  1163. height: 100%;
  1164. flex: 1;
  1165. display: flex;
  1166. flex-direction: column;
  1167. justify-content: space-between;
  1168. margin-left: 20rpx;
  1169. font-size: 28rpx;
  1170. color: #000000;
  1171. span {
  1172. font-size: 22rpx;
  1173. color: #F0761D;
  1174. }
  1175. .exceed {
  1176. width: 500rpx;
  1177. overflow: hidden;
  1178. text-overflow: ellipsis;
  1179. white-space: nowrap;
  1180. }
  1181. }
  1182. .ticket {
  1183. image {
  1184. width: 50rpx;
  1185. height: 50rpx;
  1186. }
  1187. }
  1188. .schedule {
  1189. width: 15%;
  1190. }
  1191. .spec_item {
  1192. flex: 1;
  1193. margin-left: 20rpx;
  1194. display: flex;
  1195. flex-direction: column;
  1196. justify-content: space-between;
  1197. .top {
  1198. font-size: 26rpx;
  1199. height: 38rpx;
  1200. color: #000000;
  1201. margin-bottom: 6rpx;
  1202. }
  1203. .content {
  1204. width: 100%;
  1205. flex: 1;
  1206. display: flex;
  1207. justify-content: space-between;
  1208. padding-top: 15rpx;
  1209. .left {
  1210. display: flex;
  1211. flex-direction: column;
  1212. justify-content: space-between;
  1213. font-size: 22rpx;
  1214. color: #333333;
  1215. }
  1216. .right {
  1217. text-align: right;
  1218. display: flex;
  1219. flex-direction: column;
  1220. justify-content: space-between;
  1221. }
  1222. }
  1223. }
  1224. }
  1225. .is_show {
  1226. display: flex;
  1227. align-items: center;
  1228. justify-content: center;
  1229. font-size: 24rpx;
  1230. color: #2D88F4;
  1231. image {
  1232. width: 20rpx;
  1233. height: 20rpx;
  1234. margin-left: 10rpx;
  1235. }
  1236. }
  1237. .time {
  1238. width: 100%;
  1239. display: flex;
  1240. align-items: center;
  1241. justify-content: space-between;
  1242. margin-top: 20rpx;
  1243. .time_left {
  1244. // width: 30%;
  1245. font-size: 24rpx;
  1246. color: #8A91A8;
  1247. }
  1248. .time_right {
  1249. min-width: 126rpx;
  1250. height: 50rpx;
  1251. background: rgba(240, 118, 29, 0.05);
  1252. border-radius: 8rpx;
  1253. border: 1px solid #F0761D;
  1254. font-size: 26rpx;
  1255. color: #F0761D;
  1256. display: flex;
  1257. align-items: center;
  1258. justify-content: center;
  1259. }
  1260. .all_price {
  1261. min-width: 33%;
  1262. margin-left: 10rpx;
  1263. }
  1264. }
  1265. }
  1266. .service_order {
  1267. background: #FFFFFF;
  1268. padding: 22rpx 32rpx;
  1269. margin-bottom: 20rpx;
  1270. .item_title {
  1271. width: 100%;
  1272. display: flex;
  1273. justify-content: space-between;
  1274. margin-bottom: 22rpx;
  1275. span {
  1276. font-size: 26rpx;
  1277. color: #8B91A4;
  1278. }
  1279. }
  1280. .car_id {
  1281. font-size: 30rpx;
  1282. color: #333333;
  1283. font-weight: 600;
  1284. display: flex;
  1285. align-items: center;
  1286. margin-bottom: 8rpx;
  1287. span {
  1288. width: 120rpx;
  1289. height: 40rpx;
  1290. background: #FDF6F2;
  1291. border-radius: 8rpx;
  1292. font-size: 24rpx;
  1293. line-height: 40rpx;
  1294. color: #FD4912;
  1295. text-align: center;
  1296. margin-left: 16rpx;
  1297. }
  1298. }
  1299. .name {
  1300. width: 100%;
  1301. height: 62rpx;
  1302. background: linear-gradient(90deg, #F8F9FB 0%, #FBFCFD 100%);
  1303. border-radius: 12rpx;
  1304. padding: 12rpx;
  1305. font-size: 26rpx;
  1306. color: #333333;
  1307. font-weight: 600;
  1308. margin-bottom: 8rpx;
  1309. display: flex;
  1310. justify-content: space-between;
  1311. align-items: center;
  1312. span {
  1313. display: inline-block;
  1314. width: 152rpx;
  1315. height: 50rpx;
  1316. background: rgba(240, 118, 29, 0.05);
  1317. border-radius: 35rpx;
  1318. border: 1px solid #F0761D;
  1319. font-size: 26rpx;
  1320. color: #F0761D;
  1321. text-align: center;
  1322. line-height: 50rpx;
  1323. }
  1324. }
  1325. .time {
  1326. display: flex;
  1327. align-items: center;
  1328. justify-content: space-between;
  1329. font-size: 24rpx;
  1330. color: #8A91A8;
  1331. span {
  1332. text {
  1333. font-size: 16rpx;
  1334. }
  1335. color: #FD4912;
  1336. }
  1337. }
  1338. .btn_box {
  1339. display: flex;
  1340. align-items: center;
  1341. justify-content: end;
  1342. margin-top: 20rpx;
  1343. .btn {
  1344. height: 51rpx;
  1345. padding: 6rpx 24rpx;
  1346. border-radius: 61rpx;
  1347. font-size: 26rpx;
  1348. border: 1px solid #CCCCCC;
  1349. display: flex;
  1350. align-items: center;
  1351. }
  1352. .border {
  1353. border: 1px solid #2D88F4;
  1354. color: #2D88F4;
  1355. margin-left: 16rpx;
  1356. }
  1357. .join {
  1358. background: #2D88F4;
  1359. color: #FFFFFF;
  1360. border: none;
  1361. }
  1362. }
  1363. .add_service {
  1364. width: 100%;
  1365. height: 100rpx;
  1366. background: linear-gradient(180deg, #EEF7FF 0%, #F6FBFF 100%);
  1367. border-radius: 12rpx;
  1368. margin-top: 20rpx;
  1369. display: flex;
  1370. align-items: center;
  1371. justify-content: center;
  1372. span {
  1373. width: 204rpx;
  1374. height: 50rpx;
  1375. background: linear-gradient(90deg, #53A2FF 0%, #2589FF 100%);
  1376. border-radius: 49rpx;
  1377. font-size: 26rpx;
  1378. color: #FFFFFF;
  1379. display: flex;
  1380. align-items: center;
  1381. justify-content: center;
  1382. }
  1383. }
  1384. .child_order {
  1385. width: 100%;
  1386. border-radius: 12rpx;
  1387. margin: 20rpx 0px;
  1388. .row {
  1389. margin-bottom: 20rpx;
  1390. background: linear-gradient(180deg, #EEF7FF 0%, #F6FBFF 100%);
  1391. padding: 10rpx 12rpx;
  1392. .row_title {
  1393. width: 100%;
  1394. display: flex;
  1395. align-items: center;
  1396. justify-content: space-between;
  1397. font-size: 26rpx;
  1398. color: #8B91A4;
  1399. margin-bottom: 20rpx;
  1400. .row_status {
  1401. font-size: 28rpx;
  1402. color: #FF9900;
  1403. }
  1404. }
  1405. .row_name {
  1406. font-size: 26rpx;
  1407. color: #333333;
  1408. margin-bottom: 7rpx;
  1409. font-weight: 600;
  1410. }
  1411. .row_price {
  1412. display: flex;
  1413. align-items: center;
  1414. justify-content: space-between;
  1415. margin-bottom: 7rpx;
  1416. span {
  1417. font-size: 26rpx;
  1418. color: #FD4912;
  1419. font-weight: 600;
  1420. text {
  1421. font-size: 16rpx;
  1422. }
  1423. }
  1424. .row_detail {
  1425. padding: 6rpx 24rpx;
  1426. background: #FFFFFF;
  1427. border-radius: 61rpx;
  1428. border: 1px solid #2D88F4;
  1429. font-size: 24rpx;
  1430. color: #2D88F4;
  1431. display: flex;
  1432. align-items: center;
  1433. justify-content: space-between;
  1434. }
  1435. }
  1436. .row_time {
  1437. font-size: 22rpx;
  1438. color: #888888;
  1439. margin-bottom: 16rpx;
  1440. }
  1441. .row_btn {
  1442. display: flex;
  1443. align-items: center;
  1444. justify-content: end;
  1445. span {
  1446. width: 204rpx;
  1447. height: 50rpx;
  1448. background: #2D88F4;
  1449. border-radius: 8rpx;
  1450. display: flex;
  1451. align-items: center;
  1452. justify-content: center;
  1453. font-size: 26rpx;
  1454. color: #FFFFFF;
  1455. }
  1456. }
  1457. }
  1458. }
  1459. }
  1460. }
  1461. }
  1462. </style>