index.vue 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116
  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;">普通订单</div>
  10. <div class="tab-item" :class="tabIndex == 1?'active':''"
  11. @click="getserviceList(servicePage),tabIndex=1;productName='';productStatus=0;">服务订单</div>
  12. </view>
  13. </view>
  14. </view>
  15. <view class="manage">
  16. <view class="search">
  17. <image src="/static/index/search.png" mode=""></image>
  18. <u-input type="text" v-model="merchantUserInfo" placeholder="请输入关键词" />
  19. <span @click="searchList">搜索</span>
  20. </view>
  21. <view class="action " @click="selectTime">
  22. <view class="cuIcon-filter"></view>
  23. </view>
  24. </view>
  25. <view class="select" v-if="tabIndex == 0">
  26. <view class="type" :class="currentIndex == index?'active':''" v-for="(item,index) in typeList" :key="index"
  27. @click="selectType(item,index)">
  28. {{item.name}}
  29. </view>
  30. </view>
  31. <view class="select" v-if="tabIndex == 1">
  32. <view class="type" :class="currentIndex == index?'active':''" v-for="(item,index) in statusList" :key="index"
  33. @click="selectSeiviceType(item,index)">
  34. {{item.name}}
  35. </view>
  36. </view>
  37. </view>
  38. <mescroll-uni class="list" :fixed="false" ref="mescrollRef" @up="getList" @init="mescrollInit" :use="false"
  39. v-if="tabIndex ==0">
  40. <view class="order_item" v-for="(item,index) in orderList" :key="item.id" @click="geDetail(item)">
  41. <view class="order_id">
  42. <view class="id_left">
  43. 订单编号:{{item.orderId}}
  44. </view>
  45. <view class="id_right" v-if="item.stateCode ==5">
  46. <!-- {{item.state}} -->
  47. 待付款
  48. </view>
  49. <view class="id_right" v-if="item.stateCode ==0" style="color: #ff9900;">
  50. 待使用
  51. </view>
  52. <view class="id_right" v-if="item.stateCode == 4" style="color:#449AFF ;">
  53. 退款/售后
  54. </view>
  55. <view class="id_right" v-if="item.stateCode ==1">
  56. 已使用
  57. </view>
  58. </view>
  59. <view class="order_product">
  60. <view class="img">
  61. <image :src="item.productImage" mode=""></image>
  62. </view>
  63. <view class="name">
  64. {{item.productName}}
  65. <span>¥{{item.orderPrice}}</span>
  66. </view>
  67. <view class="ticket" v-if="item.isUseRights">
  68. <image src="/static/product/ticket.png" mode=""></image>
  69. </view>
  70. </view>
  71. <view class="time">
  72. <view class="time_left">
  73. 顾客于{{item.buyTime}}
  74. </view>
  75. <view class="time_right" @click.stop="goRecord(item)" v-if="item.auditType =='0'">
  76. 去处理
  77. </view>
  78. </view>
  79. </view>
  80. </mescroll-uni>
  81. <!-- 服务订单 -->
  82. <mescroll-uni class="list" :fixed="false" ref="mescrollRef" @up="getserviceList" @init="mescrollInit" :use="false"
  83. v-if="tabIndex == 1">
  84. <view class="service_order" v-for="item in serviceList" :key="item.orderNo" @click="goDetail(item)">
  85. <view class="item_title">
  86. <span>订单编号:{{item.orderNo}}</span>
  87. <span>{{item.status}}</span>
  88. </view>
  89. <view class="car_id">
  90. {{item.licenseNo}}
  91. <span>{{item.checkType==0?'上门取车':'送车到站'}}</span>
  92. </view>
  93. <view class="name">
  94. {{item.productName}}
  95. <span @click.stop="goGetCar(item)" v-if="item.checkType == 0">取车地点</span>
  96. </view>
  97. <view class="time">
  98. <span>{{item.date}}</span>
  99. <span> <text>¥</text> {{item.price}}</span>
  100. </view>
  101. <view class="btn_box">
  102. <view class="btn">
  103. 实况记录
  104. </view>
  105. <view class="btn" style="margin-left: 16rpx;">
  106. 联系客服
  107. </view>
  108. <view class="btn border">
  109. 联系客户
  110. </view>
  111. <view class="btn join" @click.stop="receive(item)" v-if="item.statusCode ==2" style="margin-left: 16rpx;">
  112. 接单
  113. </view>
  114. <!-- 送车到站按钮区域开始item.checkType==1 -->
  115. <view class="" v-if="item.checkType==1" style="flex:1;display: flex;justify-content: space-around;">
  116. <view class="btn join" @click.stop="collect(item)" v-if="item.statusCode ==3">
  117. 确认收车
  118. </view>
  119. <view class="btn join" @click.stop="finish(item)" v-if="item.statusCode ==4">
  120. 检测完成
  121. </view>
  122. <view class="btn join" @click.stop="takeCar(item)" v-if="item.statusCode ==5 && item.flowStatus =='12'">
  123. 确认取车
  124. </view>
  125. <view class="btn join" @click.stop="evaluate(item)"
  126. v-if="(item.statusCode ==6 || item.statusCode ==5) && item.flowStatus !=='17' ">
  127. 去评价
  128. </view>
  129. </view>
  130. <!-- 送车到站按钮区域结束
  131. 上门取车按钮区域开始item.checkType==0 -->
  132. <view class="" v-if="item.checkType == 0" style="flex:1;display: flex;justify-content: space-around;">
  133. <view class="btn join" @click.stop="goGetCar(item)" v-if="item.statusCode ==5 && item.flowStatus == 4">
  134. 去取车
  135. </view>
  136. <view class="btn join" @click.stop="collect(item)" v-if="item.statusCode ==5 && item.flowStatus == 5">
  137. 确认取车
  138. </view>
  139. <view class="btn join" @click.stop="finish(item)"
  140. v-if="item.statusCode ==4 && item.flowStatus==7 || item.flowStatus==8">
  141. 检测完成
  142. </view>
  143. <view class="btn join" @click.stop="goAlso(item)" v-if="item.statusCode ==3 && item.flowStatus==12">
  144. 去送车
  145. </view>
  146. <view class="btn join" @click.stop="delivered(item)" v-if="item.statusCode ==3&& item.flowStatus==13">
  147. 车已送达
  148. </view>
  149. <view class="btn join" @click.stop="evaluate(item)"
  150. v-if="(item.statusCode ==6 || item.statusCode ==5) && item.flowStatus !=='17' ">
  151. 去评价
  152. </view>
  153. </view>
  154. <!-- 上门取车按钮区域结束 -->
  155. </view>
  156. <view class="add_service" @click.stop="addService(item)" v-if="item.statusCode==4 ||item.statusCode==3 ">
  157. <span>添加收费服务</span>
  158. </view>
  159. <view class="child_order">
  160. <view class="row" v-for="row in item.children" :key="row.orderNo">
  161. <view class="row_title">
  162. <span>订单编号:{{row.orderNo}}</span>
  163. <span class="row_status">{{row.status}}</span>
  164. </view>
  165. <view class="row_name">
  166. {{row.productName}}
  167. </view>
  168. <view class="row_price">
  169. <span><text>¥</text>{{row.price}}</span>
  170. <view class="row_detail" @click.stop="lookDetail(row)">
  171. 服务明细
  172. </view>
  173. </view>
  174. <view class="row_time">
  175. {{row.date}}
  176. </view>
  177. <view class="row_btn" @click.stop="editProject(row)"
  178. v-if="row.statusCode == '0' || row.statusCode == '11' ">
  179. <span>修改收费服务</span>
  180. </view>
  181. </view>
  182. </view>
  183. </view>
  184. </mescroll-uni>
  185. <rangTime ref="rangTime" :mode="mode" :isYear="true" @onSubmit="onEndTimeChange" @cut="cutPopup" />
  186. <receive @cut="isReceive =false" v-if="isReceive" />
  187. <serviceDetail :subOrderId="subOrderId" @cut="cutsubOrderId" v-if="isServiceDeatil" />
  188. <upload :type="uptype" :taskId="taskId" v-if="isUpload" @cut="isUpload = false" @upSuccess="upSuccess" />
  189. <evaluate :userId="userId" :taskId="taskId" v-if="iseEvaluate" @cut="cutEvaluate" />
  190. </view>
  191. </template>
  192. <script>
  193. import receive from '../order/components/receiveOrder.vue'
  194. import upload from '../order/components/upload.vue'
  195. import evaluate from '../order/components/evaluate.vue'
  196. import serviceDetail from '../order/components/serviceDetail.vue'
  197. import rangTime from '../../components/dengrq-datetime-picker/dateSelector/index.vue'
  198. export default {
  199. components: {
  200. rangTime,
  201. receive,
  202. serviceDetail,
  203. upload,
  204. evaluate
  205. },
  206. data() {
  207. return {
  208. search: '',
  209. mode: 1,
  210. currentIndex: 0,
  211. merchantId: '',
  212. buyStartTime: '',
  213. buyEndTime: '',
  214. typeList: [{
  215. type: '',
  216. name: '全部'
  217. },
  218. {
  219. type: 5,
  220. name: '待付款'
  221. },
  222. {
  223. type: 0,
  224. name: '待使用'
  225. },
  226. {
  227. type: 1,
  228. name: '已使用'
  229. },
  230. {
  231. type: 4,
  232. name: '售后'
  233. }
  234. ],
  235. statusList: [{
  236. type: '',
  237. name: '全部'
  238. },
  239. {
  240. type: 1,
  241. name: '待接单'
  242. },
  243. {
  244. type: 2,
  245. name: '服务中'
  246. },
  247. {
  248. type: 3,
  249. name: '已完成'
  250. },
  251. {
  252. type: 4,
  253. name: '售后'
  254. }
  255. ],
  256. ststusCode: '', //审车策划状态
  257. orderList: [],
  258. state: '',
  259. merchantUserInfo: '',
  260. upOption: {
  261. page: {
  262. num: 0,
  263. size: 10 // 每页数据的数量,默认10
  264. },
  265. noMoreSize: 5, // 配置列表的总数量要大于等于5条才显示'-- END --'的提示
  266. empty: {
  267. tip: '暂无相关数据'
  268. }
  269. },
  270. tabIndex: 0,
  271. serviceList: [],
  272. isReceive: false, //接单成功弹窗
  273. isServiceDeatil: false, //服务明细弹窗
  274. isUpload: false, //上传图片弹窗显隐
  275. uptype: '', //上传图片类型
  276. taskId: '', //上传图片传值
  277. checkType: '', //上传图片修改状态用
  278. subOrderId: '', //服务明细传递数据
  279. paramState: '', //上传完图片修改状态
  280. serveType: '', //服务类型
  281. iseEvaluate: false, //评价弹窗显隐
  282. userId: '', //评论用户id
  283. servicePage: {
  284. num: 1,
  285. size: 10
  286. }
  287. }
  288. },
  289. methods: {
  290. selectTime() {
  291. this.$refs.rangTime.open()
  292. uni.hideTabBar()
  293. },
  294. onEndTimeChange(val) {
  295. if (this.tabIndex == 0) {
  296. this.orderList = []
  297. this.buyStartTime = val.startDate
  298. this.buyEndTime = val.endDate
  299. let page = {
  300. num: 1,
  301. size: 10
  302. }
  303. this.getList(page)
  304. } else {
  305. }
  306. },
  307. cutPopup() {
  308. this.isYear = false
  309. uni.showTabBar()
  310. },
  311. mescrollInit(mescroll) {
  312. this.mescroll = mescroll;
  313. },
  314. InputBlur(e) {
  315. this.search = e.detail.value
  316. },
  317. //普通订单
  318. selectType(item, index) {
  319. this.currentIndex = index
  320. this.state = item.type
  321. this.orderList = []
  322. // this.mescroll.resetUpScroll();
  323. let page = {
  324. num: 1,
  325. size: 10
  326. }
  327. this.getList(page)
  328. },
  329. //服务订单
  330. selectSeiviceType(item, index) {
  331. this.currentIndex = index
  332. this.statusCode = item.type
  333. this.serviceList = []
  334. let page = {
  335. num: 1,
  336. size: 10
  337. }
  338. this.getserviceList(page)
  339. // this.mescroll.resetUpScroll();
  340. },
  341. searchList() {
  342. if (this.tabIndex == 0) {
  343. let page = {
  344. num: 1,
  345. size: 10
  346. }
  347. this.orderList = []
  348. this.getList(page)
  349. } else {
  350. }
  351. },
  352. //跳转至订单详情页
  353. goRecord(item) {
  354. console.log(item)
  355. uni.navigateTo({
  356. url: '/pages/order/record?orderId=' + item.orderId
  357. })
  358. },
  359. //跳转至服务订单详情页
  360. goDetail(item) {
  361. uni.navigateTo({
  362. url: '/pages/order/serviceOrder/orderDetail?taskId=' + item.taskId + '&checkType=' + item.checkType
  363. })
  364. },
  365. getList(page) {
  366. let data = {
  367. merchantId: this.merchantId,
  368. pageSize: page.size,
  369. pageNo: page.num,
  370. state: this.state,
  371. merchantUserInfo: this.merchantUserInfo,
  372. buyStartTime: this.buyStartTime,
  373. buyEndTime: this.buyEndTime
  374. }
  375. this.$http.post("/app/order/locaOrder/list", data).then(res => {
  376. this.orderList = this.orderList.concat(res.data.result.records)
  377. this.mescroll.endSuccess(res.data.result.records.length, res.data.result.total);
  378. uni.showTabBar()
  379. }).catch(() => {
  380. this.mescroll.endErr()
  381. })
  382. },
  383. geDetail(item) {
  384. uni.navigateTo({
  385. url: '/pages/order/details?orderId=' + item.orderId
  386. })
  387. },
  388. //获取服务订单列表
  389. getserviceList(page) {
  390. let data = {
  391. merchantId: this.merchantId,
  392. pageSize: page.size,
  393. pageNo: page.num,
  394. status: this.statusCode
  395. }
  396. this.$http.post("/ts/merchant/serviceOrder", data).then(res => {
  397. this.serviceList = this.serviceList.concat(res.data.result.records)
  398. this.mescroll.endSuccess(res.data.result.records.length, res.data.result.total);
  399. })
  400. .catch(() => {
  401. this.mescroll.endErr()
  402. })
  403. },
  404. // 接单
  405. receive(item) {
  406. console.log(item)
  407. let data = {
  408. taskId: item.taskId,
  409. checkType: item.checkType,
  410. paramState: '04', //商户接单成功
  411. serveType: '01'
  412. }
  413. this.$http.post("/ts/merchant/update/Serve", data).then(res => {
  414. if (res.data.code == 200) {
  415. this.isReceive = true
  416. let page = {
  417. num: 1,
  418. size: 10
  419. }
  420. this.getserviceList(page)
  421. }
  422. })
  423. },
  424. //收车上传照片
  425. collect(item) {
  426. console.log(item)
  427. this.taskId = item.taskId
  428. this.checkType = item.checkType
  429. //0 取车,1送车
  430. if (item.checkType == 0) {
  431. //收车
  432. if (item.statusCode == 5) {
  433. this.uptype = 1
  434. } else if (item.statusCode == 4) {
  435. this.uptype = 3
  436. }
  437. } else if (item.checkType == 1) {
  438. //客户送车,商户收车
  439. if (item.statusCode == 3) {
  440. this.uptype = 2
  441. } else {
  442. this.uptype = 3
  443. }
  444. }
  445. this.isUpload = true
  446. // this.upSuccess('07','01')
  447. this.paramState = '07'
  448. this.serveType = '01'
  449. },
  450. //送车到站————检测完成
  451. upSuccess() {
  452. let data = {
  453. taskId: this.taskId,
  454. checkType: this.checkType,
  455. paramState: this.paramState, //商户上传图片成功
  456. serveType: this.serveType
  457. }
  458. this.$http.post("/ts/merchant/update/Serve", data).then(res => {
  459. if (res.data.code == 200) {
  460. this.isUpload = false
  461. let page = {
  462. num: 1,
  463. size: 10
  464. }
  465. this.getserviceList(page)
  466. }
  467. })
  468. },
  469. //检测完成上传检测图片
  470. finish(item) {
  471. console.log(item)
  472. this.taskId = item.taskId
  473. this.checkType = item.checkType
  474. //0 取车,1送车
  475. if (item.checkType == 0) {
  476. if (item.statusCode == 5) {
  477. this.uptype = 1
  478. }
  479. } else if (item.checkType == 1) {
  480. //客户送车,商户收车
  481. if (item.statusCode == 4) {
  482. this.uptype = 3
  483. }
  484. }
  485. this.isUpload = true
  486. this.paramState = '12'
  487. this.serveType = '01'
  488. },
  489. //送车到站--确认取车
  490. takeCar(item) {
  491. console.log(item)
  492. let data = {
  493. taskId: item.taskId,
  494. checkType: item.checkType,
  495. paramState: '14', //
  496. serveType: '01'
  497. }
  498. this.$http.post("/ts/merchant/update/Serve", data).then(res => {
  499. if (res.data.code == 200) {
  500. this.isUpload = false
  501. let page = {
  502. num: 1,
  503. size: 10
  504. }
  505. this.getserviceList(page)
  506. }
  507. })
  508. },
  509. //评价弹窗显示
  510. evaluate(item) {
  511. console.log(item)
  512. this.iseEvaluate = true
  513. this.taskId = item.evaluate
  514. this.userId = item.userId
  515. uni.hideTabBar()
  516. },
  517. //评价弹窗隐藏
  518. cutEvaluate() {
  519. this.iseEvaluate = false
  520. uni.showTabBar()
  521. },
  522. //查看收费服务明细
  523. lookDetail(item) {
  524. this.subOrderId = item.orderNo
  525. this.isServiceDeatil = true
  526. uni.hideTabBar()
  527. },
  528. //修改服务明细
  529. editProject(row) {
  530. console.log(row)
  531. uni.navigateTo({
  532. url: '/pages/order/serviceOrder/project?orderNo=' + row.orderNo + '&checkType=' + row.checkType +
  533. '&taskId=' + row.taskId + '&productName=' + row.productName +
  534. '&type=' + 0
  535. })
  536. },
  537. cutsubOrderId() {
  538. this.isServiceDeatil = false
  539. uni.showTabBar()
  540. },
  541. //商户去取车
  542. goGetCar(item) {
  543. console.log(item)
  544. let data = {
  545. taskId: item.taskId,
  546. checkType: item.checkType,
  547. paramState: '05', //商户接单成功
  548. serveType: '01'
  549. }
  550. let that = this
  551. // uni.navigateTo({
  552. // 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`)
  553. // })
  554. uni.openLocation({
  555. longitude: Number(item.userLongitude),
  556. latitude: Number(item.userLatitude),
  557. name: item.carAddres, // 位置名称
  558. // address: e.F_Address, // 位置地点
  559. success: function(res) {
  560. console.log('打开系统位置地图成功')
  561. that.$http.post("/ts/merchant/update/Serve", data).then(res => {
  562. if (res.data.code == 200) {
  563. // this.isReceive = true
  564. let page = {
  565. num: 1,
  566. size: 10
  567. }
  568. that.getserviceList(page)
  569. }
  570. })
  571. },
  572. fail: function(error) {
  573. console.log(error)
  574. },
  575. })
  576. },
  577. //添加收费服务
  578. addService(item) {
  579. uni.navigateTo({
  580. url: '/pages/order/serviceOrder/project?checkType=' + item.checkType + '&taskId=' + item.taskId +
  581. '&orderNo=' + item.orderNo + '&productName=' + item.productName + '&type=' + 1
  582. })
  583. },
  584. //去送车修改状态
  585. goAlso(item) {
  586. let data = {
  587. taskId: item.taskId,
  588. checkType: item.checkType,
  589. paramState: '13', //商户点击去送车
  590. serveType: '01'
  591. }
  592. this.$http.post("/ts/merchant/update/Serve", data).then(res => {
  593. if (res.data.code == 200) {
  594. let page = {
  595. num: 1,
  596. size: 10
  597. }
  598. this.getserviceList(page)
  599. }
  600. })
  601. },
  602. //商户点击车已送达
  603. delivered(item) {
  604. let data = {
  605. taskId: item.taskId,
  606. checkType: item.checkType,
  607. paramState: '14', //商户点击车已送达
  608. serveType: '01'
  609. }
  610. this.$http.post("/ts/merchant/update/Serve", data).then(res => {
  611. if (res.data.code == 200) {
  612. let page = {
  613. num: 1,
  614. size: 10
  615. }
  616. this.getserviceList(page)
  617. }
  618. })
  619. }
  620. },
  621. mounted() {
  622. this.mescroll.optDown.use = false
  623. // this.getList()
  624. },
  625. onShow() {
  626. let that = this
  627. uni.getStorage({
  628. key: 'login_user_info',
  629. success: function(res) {
  630. that.merchantId = res.data.merchantId
  631. }
  632. })
  633. }
  634. }
  635. </script>
  636. <style lang="scss" scoped>
  637. .order {
  638. width: 100%;
  639. height: 100vh;
  640. background: #F7F8FC;
  641. display: flex;
  642. flex-direction: column;
  643. position: fixed;
  644. .fix {
  645. width: 100%;
  646. height: auto;
  647. background: #ffffff;
  648. position: sticky;
  649. top: 0px;
  650. border-bottom: 1px solid #EEEEEE;
  651. /*#ifdef APP-PLUS*/
  652. .top {
  653. width: 100%;
  654. height: var(--status-bar-height);
  655. background: #FFFFFF;
  656. }
  657. /*#endif*/
  658. .head {
  659. width: 100%;
  660. height: 112rpx;
  661. padding: 20rpx;
  662. display: flex;
  663. align-items: center;
  664. background: #fff;
  665. position: relative;
  666. background: #FFFFFF;
  667. .cuIcon-back {
  668. font-size: 40rpx;
  669. margin-right: 40rpx;
  670. }
  671. .case {
  672. width: 100%;
  673. position: absolute;
  674. left: 50%;
  675. transform: translateX(-50%);
  676. font-size: 36rpx;
  677. font-weight: 600;
  678. .select_type {
  679. display: flex;
  680. justify-content: space-around;
  681. .tab-item {
  682. position: relative;
  683. padding: 18rpx 0;
  684. cursor: pointer;
  685. color: #333;
  686. font-weight: 400;
  687. font-size: 28rpx;
  688. }
  689. .tab-item.active {
  690. color: #449AFF;
  691. font-weight: 600;
  692. }
  693. .tab-item.active::after {
  694. content: '';
  695. position: absolute;
  696. bottom: -28px;
  697. left: 35%;
  698. width: 38rpx;
  699. height: 100%;
  700. background: url(/static/product/tab-act.png) no-repeat;
  701. background-size: contain;
  702. }
  703. }
  704. }
  705. // .action {
  706. // position: absolute;
  707. // right: 24rpx;
  708. // }
  709. }
  710. .manage {
  711. display: flex;
  712. align-items: center;
  713. width: 100%;
  714. padding: 0 24rpx;
  715. .search {
  716. width: 93%;
  717. height: 55rpx;
  718. background: #F7F8FC;
  719. border-radius: 12rpx;
  720. padding: 0rpx 24rpx;
  721. display: flex;
  722. align-items: center;
  723. justify-content: space-between;
  724. margin-right: 20rpx;
  725. // margin: 16rpx auto 0px;
  726. image {
  727. width: 36rpx;
  728. height: 36rpx;
  729. }
  730. input {
  731. // height: 36rpx;
  732. font-size: 26rpx;
  733. }
  734. span {
  735. font-size: 26rpx;
  736. color: #333333;
  737. }
  738. }
  739. }
  740. .select {
  741. width: 100%;
  742. height: 85rpx;
  743. display: flex;
  744. align-items: center;
  745. justify-content: space-between;
  746. padding: 0px 24rpx;
  747. background-color: #FFFFFF;
  748. .type {
  749. height: 54rpx;
  750. padding: 8rpx 12rpx;
  751. background: #F2F3F5;
  752. border-radius: 8rpx;
  753. }
  754. .active {
  755. background: #ECF5FF;
  756. color: #2D88F4;
  757. }
  758. }
  759. }
  760. .list {
  761. flex: 1;
  762. width: 100%;
  763. overflow-y: auto;
  764. padding-bottom: var(--window-bottom);
  765. .order_item {
  766. width: 100%;
  767. background-color: #fff;
  768. padding: 20rpx 40rpx;
  769. margin-bottom: 20rpx;
  770. .order_id {
  771. width: 100%;
  772. height: 41rpx;
  773. font-size: 26rpx;
  774. color: #8B91A4;
  775. display: flex;
  776. justify-content: space-between;
  777. align-items: center;
  778. .id_right {}
  779. }
  780. .order_product {
  781. width: 100%;
  782. height: 132rpx;
  783. display: flex;
  784. margin: 10rpx 0px;
  785. .img {
  786. width: 132rpx;
  787. height: 132rpx;
  788. border-radius: 12rpx;
  789. overflow: hidden;
  790. image {
  791. width: 132rpx;
  792. height: 132rpx;
  793. }
  794. }
  795. .name {
  796. height: 100%;
  797. flex: 1;
  798. display: flex;
  799. flex-direction: column;
  800. justify-content: space-between;
  801. margin-left: 20rpx;
  802. font-size: 28rpx;
  803. color: #000000;
  804. span {
  805. font-size: 22rpx;
  806. color: #F0761D;
  807. }
  808. }
  809. .ticket {
  810. image {
  811. width: 50rpx;
  812. height: 50rpx;
  813. }
  814. }
  815. .schedule {
  816. width: 15%;
  817. }
  818. }
  819. .time {
  820. width: 100%;
  821. display: flex;
  822. align-items: center;
  823. justify-content: space-between;
  824. margin-top: 20rpx;
  825. .time_left {
  826. font-size: 24rpx;
  827. color: #8A91A8;
  828. }
  829. .time_right {
  830. width: 126rpx;
  831. height: 50rpx;
  832. background: rgba(240, 118, 29, 0.05);
  833. border-radius: 8rpx;
  834. border: 1px solid #F0761D;
  835. font-size: 26rpx;
  836. color: #F0761D;
  837. display: flex;
  838. align-items: center;
  839. justify-content: center;
  840. }
  841. }
  842. }
  843. .service_order {
  844. background: #FFFFFF;
  845. padding: 22rpx 32rpx;
  846. margin-bottom: 20rpx;
  847. .item_title {
  848. width: 100%;
  849. display: flex;
  850. justify-content: space-between;
  851. margin-bottom: 22rpx;
  852. span {
  853. font-size: 26rpx;
  854. color: #8B91A4;
  855. }
  856. }
  857. .car_id {
  858. font-size: 30rpx;
  859. color: #333333;
  860. font-weight: 600;
  861. display: flex;
  862. align-items: center;
  863. margin-bottom: 8rpx;
  864. span {
  865. width: 120rpx;
  866. height: 40rpx;
  867. background: #FDF6F2;
  868. border-radius: 8rpx;
  869. font-size: 24rpx;
  870. line-height: 40rpx;
  871. color: #FD4912;
  872. text-align: center;
  873. margin-left: 16rpx;
  874. }
  875. }
  876. .name {
  877. width: 100%;
  878. height: 62rpx;
  879. background: linear-gradient(90deg, #F8F9FB 0%, #FBFCFD 100%);
  880. border-radius: 12rpx;
  881. padding: 12rpx;
  882. font-size: 26rpx;
  883. color: #333333;
  884. font-weight: 600;
  885. margin-bottom: 8rpx;
  886. display: flex;
  887. justify-content: space-between;
  888. align-items: center;
  889. span {
  890. display: inline-block;
  891. width: 152rpx;
  892. height: 50rpx;
  893. background: rgba(240, 118, 29, 0.05);
  894. border-radius: 35rpx;
  895. border: 1px solid #F0761D;
  896. font-size: 26rpx;
  897. color: #F0761D;
  898. text-align: center;
  899. line-height: 50rpx;
  900. }
  901. }
  902. .time {
  903. display: flex;
  904. align-items: center;
  905. justify-content: space-between;
  906. font-size: 24rpx;
  907. color: #8A91A8;
  908. span {
  909. text {
  910. font-size: 16rpx;
  911. }
  912. color: #FD4912;
  913. }
  914. }
  915. .btn_box {
  916. display: flex;
  917. align-items: center;
  918. justify-content: end;
  919. margin-top: 20rpx;
  920. .btn {
  921. height: 51rpx;
  922. padding: 6rpx 24rpx;
  923. border-radius: 61rpx;
  924. font-size: 26rpx;
  925. border: 1px solid #CCCCCC;
  926. display: flex;
  927. align-items: center;
  928. }
  929. .border {
  930. border: 1px solid #2D88F4;
  931. color: #2D88F4;
  932. margin-left: 16rpx;
  933. }
  934. .join {
  935. background: #2D88F4;
  936. color: #FFFFFF;
  937. border: none;
  938. }
  939. }
  940. .add_service {
  941. width: 100%;
  942. height: 100rpx;
  943. background: linear-gradient(180deg, #EEF7FF 0%, #F6FBFF 100%);
  944. border-radius: 12rpx;
  945. margin-top: 20rpx;
  946. display: flex;
  947. align-items: center;
  948. justify-content: center;
  949. span {
  950. width: 204rpx;
  951. height: 50rpx;
  952. background: linear-gradient(90deg, #53A2FF 0%, #2589FF 100%);
  953. border-radius: 49rpx;
  954. font-size: 26rpx;
  955. color: #FFFFFF;
  956. display: flex;
  957. align-items: center;
  958. justify-content: center;
  959. }
  960. }
  961. .child_order {
  962. width: 100%;
  963. border-radius: 12rpx;
  964. margin: 20rpx 0px;
  965. .row {
  966. margin-bottom: 20rpx;
  967. background: linear-gradient(180deg, #EEF7FF 0%, #F6FBFF 100%);
  968. padding: 10rpx 12rpx;
  969. .row_title {
  970. width: 100%;
  971. display: flex;
  972. align-items: center;
  973. justify-content: space-between;
  974. font-size: 26rpx;
  975. color: #8B91A4;
  976. margin-bottom: 20rpx;
  977. .row_status {
  978. font-size: 28rpx;
  979. color: #FF9900;
  980. }
  981. }
  982. .row_name {
  983. font-size: 26rpx;
  984. color: #333333;
  985. margin-bottom: 7rpx;
  986. font-weight: 600;
  987. }
  988. .row_price {
  989. display: flex;
  990. align-items: center;
  991. justify-content: space-between;
  992. margin-bottom: 7rpx;
  993. span {
  994. font-size: 26rpx;
  995. color: #FD4912;
  996. font-weight: 600;
  997. text {
  998. font-size: 16rpx;
  999. }
  1000. }
  1001. .row_detail {
  1002. padding: 6rpx 24rpx;
  1003. background: #FFFFFF;
  1004. border-radius: 61rpx;
  1005. border: 1px solid #2D88F4;
  1006. font-size: 24rpx;
  1007. color: #2D88F4;
  1008. display: flex;
  1009. align-items: center;
  1010. justify-content: space-between;
  1011. }
  1012. }
  1013. .row_time {
  1014. font-size: 22rpx;
  1015. color: #888888;
  1016. margin-bottom: 16rpx;
  1017. }
  1018. .row_btn {
  1019. display: flex;
  1020. align-items: center;
  1021. justify-content: end;
  1022. span {
  1023. width: 204rpx;
  1024. height: 50rpx;
  1025. background: #2D88F4;
  1026. border-radius: 8rpx;
  1027. display: flex;
  1028. align-items: center;
  1029. justify-content: center;
  1030. font-size: 26rpx;
  1031. color: #FFFFFF;
  1032. }
  1033. }
  1034. }
  1035. }
  1036. }
  1037. }
  1038. }
  1039. </style>