riskOrder.vue 25 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010
  1. <template>
  2. <view class="container">
  3. <u-navbar leftIconColor="#fff" titleStyle="color:#fff;fontSize:36rpx;" :autoBack="true" bgColor="#2C6FF3"
  4. :placeholder="true" title="异常订单"></u-navbar>
  5. <!-- <view class="time-choose">
  6. <view class="flex align-center justify-between top">
  7. <view class="con-btn" @tap="changeMonth(-1)">
  8. 上一月</view>
  9. <view class="flex align-center justify-around date-container">
  10. <view class="" style="margin-right: 10rpx;" @tap="dateSelect('start')">
  11. {{dateStart?dateStart:'开始日期'}}
  12. </view>
  13. <view class="" style="margin-right: 10rpx;">至</view>
  14. <view class="" @tap="dateSelect('end')">{{dateEnd?dateEnd:'结束日期'}}</view>
  15. </view>
  16. <view class="con-btn" @tap="changeMonth(1)">下一月</view>
  17. </view>
  18. </view> -->
  19. <view class="header-container">
  20. <view class="header-text flex align-center">
  21. <image src="https://cdn.ossfile.mxrvending.com/assets/xy_merc_mini/images/order/risk-num.png"
  22. mode="widthFix"></image>您有待处理异常订单:<text style="font-weight: bold;">{{orderNum}}</text>笔
  23. </view>
  24. <view class="search">
  25. <u-search animation placeholder="可输入订单编号,设备号,用户手机号" :clearabled="false" v-model="keyword"
  26. :showAction="false" @search="search"></u-search>
  27. </view>
  28. <view class="flex align-center justify-between" style="margin-top: 28rpx;">
  29. <view class="exceptiontype-container" @tap="actionSheetShow=true">
  30. {{status?status:'选择状态'}}
  31. </view>
  32. <view class="flex align-center date-container">
  33. <view class="" style="margin-right: 10rpx;" @tap="dateSelect('start')">
  34. {{dateStart?dateStart:'开始日期'}}
  35. </view>
  36. <view class="" style="margin-right: 10rpx;">至</view>
  37. <view class="" @tap="dateSelect('end')">{{dateEnd?dateEnd:'结束日期'}}</view>
  38. </view>
  39. <view>
  40. <view class="change-month" @tap="changeMonth(-1)">
  41. 上一月
  42. </view>
  43. <view class="change-month" style="margin-left: 20rpx;" @tap="changeMonth(1)">
  44. 下一月
  45. </view>
  46. </view>
  47. </view>
  48. <!-- <view class='martop'>
  49. <u-subsection :list="list" activeColor="#2C6FF3" :current="current"
  50. @change="sectionChange"></u-subsection>
  51. </view> -->
  52. <view class="tab-wrap">
  53. <view class="tab">
  54. <u-tabs :list="list" :activeStyle="{color: '#333',fontWeight: 'bold',fontSize:'28rpx'}"
  55. :inactiveStyle="{fontSize:'28rpx'}" :scrollable="false" :current="current"
  56. @click="sectionChange" lineColor="#2C6FF3">
  57. </u-tabs>
  58. </view>
  59. </view>
  60. </view>
  61. <scroll-view class="scrollview" scroll-y="true" scroll-with-animation="true" lower-threshold="100"
  62. @scrolltolower="loadMore" :style="{height:fullHeight}">
  63. <view class="scroll-content" v-if="commList&&commList.length>0">
  64. <block v-for="(item,index) in commList" :key="item.id">
  65. <view class="abnormal-container">
  66. <view class="flex align-center justify-between">
  67. <!-- <view class="flex align-center image-container">
  68. <view style="margin-right: 16rpx;" v-for="(item1,index1) in item.orderGoods" :key="item1.id">
  69. <u--image width="110rpx" :src="item1.goodslmgUrl" mode="widthFix" :lazy-lord="true">
  70. </u--image>
  71. </view>
  72. </view> -->
  73. <view class="flex align-center error-type">
  74. <image
  75. src="https://cdn.ossfile.mxrvending.com/assets/xy_merc_mini/images/order/risk-tip.png"
  76. mode="widthFix"></image>{{item.riskTypeDesc}}
  77. </view>
  78. <view class="com-status" style="color: #FF1E1E;" v-if="item.status==1">待处理</view>
  79. <view class="com-status" style="color: #22ca08;" v-if="item.status==2">已审核</view>
  80. <view class="com-status" style="color: #ffaa00;" v-if="item.status==3">审核中</view>
  81. <view class="com-status" style="color: #bdbdbd;" v-if="item.status==4">已结束</view>
  82. </view>
  83. <view class="fx-box">
  84. <view class="device-name" v-if="item.deviceName">
  85. {{item.deviceName}}<text>({{item.deviceId}})</text>
  86. </view>
  87. <view class="device-name" v-else>{{item.deviceId}}</view>
  88. <view class="flex align-center martop12">
  89. <view class="">
  90. <view class="oc-name">订单编号:</view>{{item.orderId||'/'}}<text class="under-line-text"
  91. @tap="copy(item.orderId)">复制</text>
  92. </view>
  93. </view>
  94. <view class="flex align-center martop12">
  95. <view class="oc-name">支付类型:</view>{{item.payStatus||'/'}}
  96. </view>
  97. <view class="order-detail-item martop12">
  98. <view class="oc-name">设备类型:</view>{{item.deviceType||'/'}}
  99. </view>
  100. <view class="flex align-center martop12">
  101. <view class="oc-name">订单状态:</view><text style="color: red;">{{item.orderStatusDesc||'/'}}</text>
  102. </view>
  103. <view class="flex align-center martop12">
  104. <view class="oc-name">补扣金额:</view>¥{{$xy.delMoney(item.cutMoney)}}
  105. </view>
  106. <view class="flex align-center martop12">
  107. <view class="oc-name">联系电话:</view>{{item.memberPhone}}
  108. <view class="phone" @click="call(item.memberPhone)">
  109. <image
  110. src="https://cdn.ossfile.mxrvending.com/assets/xy_merc_mini/images/order/phone.png"
  111. mode="widthFix"></image>拨打
  112. </view>
  113. </view>
  114. <view class="flex align-center martop12">
  115. <view class="oc-name">创建时间:</view>{{item.createTime}}
  116. </view>
  117. <view class="goods-container" v-for="(item1,index1) in item.orderGoods" :key="item1.id">
  118. <view class="flex align-center justify-center image-container">
  119. <u--image radius="4" width="130rpx" height="130rpx" :src="item1.goodsImgUrl"
  120. mode="aspectFit" :lazy-lord="true"></u--image>
  121. </view>
  122. <view class="details-container">
  123. <view class="flex align-center goods-name-num justify-between">
  124. <view class="goods-name">{{item1.goodsName}}</view>
  125. <view class="goods-num">×{{item1.totalNumber}}</view>
  126. </view>
  127. <view class="gp-item">
  128. 单价:¥{{(Number(item1.totalMoney)/Number(item1.totalNumber))/100}}
  129. </view>
  130. <view class="gp-item" v-if="item1.refundMoney||item1.refundMoney!=0">
  131. 已退款:¥{{$xy.delMoney(item1.refundMoney)}}
  132. </view>
  133. <view class="goods-price flex">
  134. </view>
  135. </view>
  136. </view>
  137. <!-- <view class="flex align-center justify-end" v-if="item.cutGoodsNumber!=null">
  138. 共计<text style="color: red;font-weight: bold;">{{item.cutGoodsNumber}}</text>件
  139. </view> -->
  140. </view>
  141. <view class="flex align-center martop12 re-back" v-if="item.status!=2&&item.status!=4">
  142. <view class="oc-name">驳回原因:</view>{{item.orderStatusDesc||'/'}}
  143. </view>
  144. <view class="martop">
  145. <view class="flex justify-start">
  146. <view class="">
  147. <xbutton size='medium' round='25rpx' padding='0rpx 20rpx' bgColor='#43cf7c'
  148. width='140rpx' @tap="showlogs(item.activityId)">交易日志</xbutton>
  149. </view>
  150. <!-- <view class="marleft24">
  151. <xbutton size='medium' round='25rpx' padding='0rpx 20rpx' width='200rpx'
  152. bgColor='#43cf7c'>查看处理记录
  153. </xbutton>
  154. </view> -->
  155. <view class="marleft24">
  156. <xbutton size='medium' round='25rpx' padding='0rpx 20rpx' width='200rpx'
  157. bgColor='#43cf7c' @tap="deviceCom(item)">查看设备商品
  158. </xbutton>
  159. </view>
  160. </view>
  161. <view class="flex justify-end martop">
  162. <view class="marleft24">
  163. <xbutton size='medium' round='25rpx' padding='0rpx 20rpx'
  164. @click="block(item.memberId)">拉黑</xbutton>
  165. </view>
  166. <view v-if="item.status=='1'" class="marleft24">
  167. <xbutton size='medium' round='25rpx' padding='0rpx 20rpx'
  168. @tap='showFinishOrderView(item)'>结束</xbutton>
  169. </view>
  170. <view class="marleft24" v-if="item.status=='3'">
  171. <xbutton size='medium' round='25rpx' padding='0rpx 20rpx' @tap='backApply(item)'>撤回
  172. </xbutton>
  173. </view>
  174. <view class="marleft24">
  175. <xbutton size='medium' round='25rpx' padding='0rpx 20rpx' width='140rpx'
  176. @tap="showVideoView(item)">查看视频</xbutton>
  177. </view>
  178. <view class="marleft24" v-if="item.status=='1'">
  179. <xbutton size='medium' round='25rpx' padding='0rpx 20rpx'
  180. @tap='supplementaryDeduction(item)'>申请立即扣款</xbutton>
  181. </view>
  182. </view>
  183. </view>
  184. </view>
  185. </block>
  186. <view class="load-more" v-if="commList.length>0">
  187. <u-loadmore :status="loadmoreStatus" />
  188. </view>
  189. </view>
  190. <view v-else class='empty'>
  191. <u-empty mode="data" text="数据为空"></u-empty>
  192. </view>
  193. </scroll-view>
  194. <u-action-sheet :show="actionSheetShow" :actions="exceptionTypeList" title="请选择状态"
  195. @close="actionSheetShow = false" @select="actionsheetSelect($event)"></u-action-sheet>
  196. <!-- :minDate="minDate" :maxDate="maxDate" -->
  197. <u-datetime-picker :show="show" v-model="timeStamp" mode="date" @confirm="confirm" @cancel="close">
  198. </u-datetime-picker>
  199. <view :hidden="hiddenOrderVideos" class="popup_content">
  200. <view class="flex">
  201. <video id="myVideo" :src="videoUrl" style="width:100%;height: 372rpx; margin: 10rpx 10rpx;"></video>
  202. </view>
  203. <view class="flex" style="margin-top: 10rpx;">
  204. <view class="marleft">
  205. <xbutton size='medium' round='25rpx' padding='0rpx 20rpx' bgColor='#2C6FF3' @tap="playVideo(0)">主视频
  206. </xbutton>
  207. </view>
  208. <view class="marleft">
  209. <xbutton size='medium' round='25rpx' padding='0rpx 20rpx' bgColor='#2C6FF3' @tap="playVideo(1)">副视频
  210. </xbutton>
  211. </view>
  212. </view>
  213. </view>
  214. <view class="popup_overlay" :hidden="hiddenOrderVideos" @click="closeVideoView()"></view>
  215. <xpopup :show="blockShow" @close="blockClose" @confirm="submit" :showBtn="true" :title="popTitle">
  216. <!-- 拉黑 -->
  217. <view class="pop-content restart" v-if="popTitle=='拉黑'">
  218. 是否确定拉黑该用户?
  219. </view>
  220. <!-- 撤回 -->
  221. <view class="pop-content restart" v-if="popTitle=='撤回'">
  222. 是否确定撤回该申请?
  223. </view>
  224. </xpopup>
  225. <xpopup :show="finishOrderDetail.show" @close="blockClose" @confirm="finshOrder" :showBtn="true" title="结束订单">
  226. <view class="pop-content">
  227. <view class="text-notice">
  228. 警告:订单结束后,将不能再进行补扣
  229. </view>
  230. <view class="input">
  231. <u--textarea placeholder="请输入结束原因" border="surround" v-model="finishOrderDetail.reason" count
  232. maxlength="140"></u--textarea>
  233. </view>
  234. </view>
  235. </xpopup>
  236. </view>
  237. </template>
  238. <script>
  239. import {
  240. cancelOrder,
  241. page,
  242. todoNum,
  243. rollback
  244. } from "@/api/order/riskorder.js"
  245. import {
  246. divide
  247. } from "../../uni_modules/uview-ui/libs/function/digit";
  248. import {
  249. setBlacklist
  250. } from "@/api/order/order.js"
  251. export default {
  252. data() {
  253. return {
  254. hiddenOrderVideos: true,
  255. selOrder: undefined,
  256. videoUrl: '',
  257. minDate: '',
  258. maxDate: '',
  259. isEmpty: false,
  260. page: 1, //当前分页
  261. size: 10, //分页数据条数
  262. actionSheetShow: false,
  263. riskOrderList: [],
  264. loadmoreStatus: 'loadmore',
  265. exceptionTypeList: [],
  266. show: false,
  267. dateStart: '',
  268. dateEnd: '',
  269. dateDx: 0,
  270. // beginTime: '',
  271. // endTime: '',
  272. type: '',
  273. current: 0,
  274. status: '',
  275. list: [{
  276. name: '待处理'
  277. }, {
  278. name: '审核中'
  279. }, {
  280. name: '已审核'
  281. }, {
  282. name: '已结束'
  283. }],
  284. commList: [],
  285. orderNum: 0, //异常订单数量
  286. code: '',
  287. deviceId: '',
  288. timeStamp: new Date(), //时间picker显示时间
  289. memberId: null, //用户id
  290. goodId: null, //商品id
  291. finishOrderDetail: {
  292. show: false,
  293. reason: "未拿取商品",
  294. id: undefined
  295. },
  296. blockShow: false, //拉黑弹框
  297. keyword: '',
  298. fullHeight: 0,
  299. popTitle: '拉黑',
  300. }
  301. },
  302. computed: {
  303. orderStatus() {
  304. let status = 1
  305. switch (this.current) {
  306. case 0:
  307. status = 1
  308. break;
  309. case 1:
  310. status = 3
  311. break;
  312. case 2:
  313. status = 2
  314. break;
  315. case 3:
  316. status = 4
  317. break;
  318. default:
  319. break;
  320. }
  321. return status
  322. }
  323. },
  324. onShow() {
  325. this.getOrderNum()
  326. this.search()
  327. },
  328. onLoad() {
  329. let _this = this;
  330. const query = uni.createSelectorQuery().in(this);
  331. query.select(".scrollview").boundingClientRect((data) => {
  332. uni.getSystemInfo({
  333. success(res) {
  334. // 针对iPhone X等机型底部安全距离做适配
  335. const model = res.model;
  336. const modelInclude = [
  337. "iPhone X",
  338. 'iPhone XR',
  339. "iPhone XS",
  340. "iPhone XS MAX",
  341. "iPhone 12/13 mini",
  342. "iPhone 12/13 (Pro)",
  343. "iPhone 12/13 Pro Max",
  344. "iPhone 14 Pro Max"
  345. ];
  346. let safeDistance = modelInclude.includes(model)
  347. //动态设置商品区域高度
  348. console.log(res.windowHeight, data.top)
  349. if (safeDistance) {
  350. _this.fullHeight = res.windowHeight - data.top - 34 + 'px';
  351. } else {
  352. _this.fullHeight = res.windowHeight - data.top + 'px';
  353. }
  354. },
  355. });
  356. }).exec();
  357. this.getDict('order_risk_type').then(res => {
  358. let newData = []
  359. res.forEach(item => {
  360. newData.push({
  361. name: item.msg,
  362. code: item.code
  363. })
  364. })
  365. this.exceptionTypeList = newData;
  366. })
  367. },
  368. methods: {
  369. // function getLastMonth() {
  370. // var date = new Date();
  371. // var year = date.getFullYear(); //当前年:四位数字
  372. // var month = date.getMonth(); //当前月:0-11
  373. // if (month == 0) { //如果是0,则说明是1月份,上一个月就是去年的12月
  374. // year -= 1;
  375. // month = 12;
  376. // }
  377. // month = month < 10 ? ('0' + month) : month; //月份格式化:月份小于10则追加个0
  378. // let lastYearMonth = year + '-' + month;
  379. // return lastYearMonth;
  380. // },
  381. changeMonth(add) {
  382. this.dateDx += add;
  383. var date = new Date();
  384. var year = date.getFullYear(); //当前年:四位数字
  385. var month = date.getMonth() + 1 + this.dateDx; //当前月:0-11
  386. var yeardx = Math.ceil(month / 12) - 1
  387. month %= 12;
  388. if (month <= 0) month += 12;
  389. year += yeardx;
  390. month = month < 10 ? ('0' + month) : month;
  391. this.dateStart = year + '-' + month + '-01';
  392. var day = 28;
  393. if (2 == month) {
  394. if (year % 4 == 0) {
  395. day = 29;
  396. }
  397. } else {
  398. if (month < 8) {
  399. if (1 == month % 2) {
  400. day = 31;
  401. } else {
  402. day = 30;
  403. }
  404. } else {
  405. if (1 == month % 2) {
  406. day = 30;
  407. } else {
  408. day = 31;
  409. }
  410. }
  411. }
  412. this.dateEnd = year + '-' + month + '-' + (day < 10 ? ('0' + day) : day);
  413. this.search()
  414. },
  415. getOrderNum() {
  416. todoNum().then(res => {
  417. let orderNum = res.data
  418. if (res.code == 200) {
  419. this.orderNum = res.data
  420. } else {
  421. this.orderNum = 0
  422. }
  423. })
  424. },
  425. loadMore(e) {
  426. if (this.loadmoreStatus == 'nomore') return
  427. this.page++
  428. this.getpage()
  429. },
  430. sectionChange(e) {
  431. this.current = e.index
  432. this.search()
  433. },
  434. // 搜索列表
  435. search() {
  436. this.reset();
  437. this.getpage()
  438. },
  439. call(tell) {
  440. uni.makePhoneCall({
  441. phoneNumber: tell
  442. })
  443. },
  444. actionsheetSelect(e) {
  445. this.status = e.name
  446. this.code = e.code
  447. this.search()
  448. },
  449. copy(text) {
  450. uni.setClipboardData({
  451. data: text,
  452. success: (data) => {
  453. uni.showToast({
  454. title: '复制成功'
  455. })
  456. },
  457. fail: function(err) {
  458. },
  459. complete: function(res) {
  460. }
  461. })
  462. },
  463. dateSelect(type) {
  464. if (type == 'start') {
  465. this.type = type
  466. }
  467. if (type == 'end') {
  468. this.type = type
  469. }
  470. this.show = true
  471. },
  472. confirm(e) {
  473. console.log(e)
  474. if (this.type == 'start') {
  475. this.dateStart = uni.$u.timeFormat(e.value, 'yyyy-mm-dd')
  476. }
  477. if (this.type == 'end') {
  478. this.dateEnd = uni.$u.timeFormat(e.value, 'yyyy-mm-dd')
  479. }
  480. if (this.dateStart && this.dateEnd) {
  481. if (this.dateStart > this.dateEnd) {
  482. uni.$u.toast('开始日期不能大于结束日期')
  483. return;
  484. }
  485. }
  486. this.search()
  487. this.show = false
  488. },
  489. close() {
  490. this.show = false
  491. },
  492. supplementaryDeduction(item) {
  493. uni.setStorageSync('riskOrder', JSON.stringify(item)) //存储订单信息
  494. this.$tab.navigateTo('/pages/order/riskOrderDel?id=' + item.id + '&deviceId=' + item
  495. .deviceId)
  496. },
  497. getpage() {
  498. page({
  499. page: {
  500. current: this.page,
  501. size: this.size,
  502. },
  503. search: this.keyword,
  504. riskType: this.code, //异常类型
  505. status: this.orderStatus, //状态
  506. beginDate: this.dateStart,
  507. endDate: this.dateEnd
  508. }).then(res => {
  509. let data = res.data.records;
  510. if (data.length < 10) {
  511. this.loadmoreStatus = "nomore"
  512. } else {
  513. this.loadmoreStatus = "loadmore"
  514. }
  515. this.commList = this.commList.concat(data)
  516. console.log()
  517. })
  518. },
  519. reset() {
  520. this.loadmoreStatus == 'loadmore'
  521. this.page = 1;
  522. this.size = 10;
  523. this.commList = [];
  524. },
  525. showlogs(activtyId) {
  526. this.$tab.navigateTo('/pages/order/orderLogs?id=' + activtyId);
  527. },
  528. showVideoView(item) {
  529. console.log(item);
  530. this.hiddenOrderVideos = false;
  531. this.selOrder = item;
  532. var urls = item.video.split(',');
  533. this.selOrder.url0 = urls[0];
  534. this.selOrder.url1 = urls[1];
  535. this.playVideo(0);
  536. },
  537. playVideo(o) {
  538. if (0 == o) {
  539. this.videoUrl = this.selOrder.url0;
  540. } else {
  541. this.videoUrl = this.selOrder.url1;
  542. }
  543. },
  544. closeVideoView() {
  545. this.videoUrl = '';
  546. this.hiddenOrderVideos = true;
  547. },
  548. block(e) {
  549. this.popTitle = '拉黑'
  550. this.memberId = e
  551. this.blockShow = true;
  552. },
  553. // 关闭弹框
  554. blockClose(e) {
  555. this.blockShow = false;
  556. this.finishOrderDetail.show = false;
  557. },
  558. // 弹框确定
  559. submit() {
  560. if (this.popTitle == '拉黑') {
  561. setBlacklist({
  562. memberId: this.memberId
  563. }).then(res => {
  564. this.$modal.msg('拉黑成功~')
  565. }).catch(err => {
  566. })
  567. } else {
  568. rollback({
  569. riskId: this.goodId
  570. }).then(res => {
  571. this.$modal.msg('撤回成功~')
  572. this.search();
  573. })
  574. }
  575. this.blockClose()
  576. },
  577. showFinishOrderView(v) {
  578. this.finishOrderDetail.id = v.id;
  579. this.finishOrderDetail.reason = "未拿商品";
  580. this.finishOrderDetail.show = true;
  581. },
  582. finshOrder() {
  583. if (!uni.$u.test.rangeLength(this.finishOrderDetail.reason, [4, 140])) {
  584. this.$modal.msg('请输入结束原因')
  585. return;
  586. }
  587. cancelOrder({
  588. "id": this.finishOrderDetail.id,
  589. "reason": this.finishOrderDetail.reason
  590. }).then(res => {
  591. this.$modal.msg('提交申请成功~')
  592. this.finishOrderDetail.show = false;
  593. this.getOrderNum();
  594. this.search();
  595. })
  596. },
  597. // 撤回
  598. backApply(item) {
  599. this.popTitle = '撤回'
  600. this.goodId = item.id
  601. this.blockShow = true;
  602. },
  603. // 设备商品查看
  604. deviceCom(item){
  605. this.$tab.navigateTo(`/pages/equipment/comManage?id=${item.deviceId}&deviceName=${item.deviceName}`)
  606. }
  607. }
  608. }
  609. </script>
  610. <style lang="scss" scoped>
  611. .container {
  612. .marleft24 {
  613. margin-left: 24rpx;
  614. }
  615. .martop {
  616. margin-top: 20rpx;
  617. }
  618. .xian {
  619. border-bottom: 1px solid #5b5b5b;
  620. margin: 20rpx 0;
  621. }
  622. .marleft {
  623. margin-left: 12rpx;
  624. }
  625. // .time-choose {
  626. // background-color: #fff;
  627. // .top {
  628. // height: 80rpx;
  629. // color: #fff;
  630. // padding: 0 20rpx;
  631. // background-color: #2C6FF3;
  632. // border-radius: 0px 0px 50rpx 50rpx;
  633. // .con-btn {
  634. // padding: 0 36rpx;
  635. // }
  636. // .date-container {
  637. // min-width:380rpx;
  638. // height: 50rpx;
  639. // background-color: #fff;
  640. // padding: 0 20rpx;
  641. // border-radius: 10rpx;
  642. // line-height: 50rpx;
  643. // color: #000;
  644. // }
  645. // }
  646. // }
  647. .header-container {
  648. padding: 27rpx 13rpx 0;
  649. background-color: #fff;
  650. .header-text {
  651. width: 716;
  652. margin-left: 21rpx;
  653. height: 52rpx;
  654. font-size: 28rpx;
  655. color: #333;
  656. background: linear-gradient(90deg, #FEE2E2, #FFFFFF);
  657. >image {
  658. width: 52rpx;
  659. height: 52rpx;
  660. margin-right: 13rpx;
  661. margin-left: -21rpx;
  662. }
  663. text {
  664. color: #FF0000;
  665. font-size: 36rpx;
  666. padding: 0 12rpx;
  667. }
  668. }
  669. .search {
  670. margin-top: 37rpx;
  671. }
  672. .exceptiontype-container {
  673. background-color: #fff;
  674. border-radius: 10rpx;
  675. padding: 0 10rpx;
  676. width: 140rpx;
  677. overflow: hidden;
  678. text-overflow: ellipsis;
  679. white-space: nowrap;
  680. line-height: 50rpx;
  681. }
  682. .change-month {
  683. display: inline-block;
  684. width: 100rpx;
  685. height: 45rpx;
  686. border: 1px solid #CCCCCC;
  687. border-radius: 6rpx;
  688. line-height: 43rpx;
  689. text-align: center;
  690. border-radius: 10rpx;
  691. text-align: center;
  692. font-size: 22rpx;
  693. color: #777777;
  694. }
  695. .tab-wrap {
  696. margin-top: 20rpx;
  697. }
  698. }
  699. .scrollview {
  700. .scroll-content {
  701. width: 724rpx;
  702. margin-left: 13rpx;
  703. overflow: hidden;
  704. }
  705. .load-more {
  706. padding-bottom: 24rpx;
  707. }
  708. .empty {
  709. margin-top: 40%;
  710. }
  711. }
  712. .abnormal-container {
  713. margin-top: 20rpx;
  714. padding: 30rpx 32rpx;
  715. border-radius: 15rpx;
  716. background-color: #fff;
  717. box-shadow: 0px 0px 10rpx 0px rgba(174, 201, 255, 0.2);
  718. .error-type {
  719. font-size: 32rpx;
  720. font-weight: 800;
  721. color: #333333;
  722. >image {
  723. width: 40rpx;
  724. height: 40rpx;
  725. margin-right: 22rpx;
  726. }
  727. }
  728. .fx-box {
  729. margin-top: 24rpx;
  730. padding-left: 8rpx;
  731. font-size: 28rpx;
  732. color: #777;
  733. .device-name {
  734. font-size: 28rpx;
  735. font-weight: bold;
  736. color: #333;
  737. margin-bottom: 12rpx;
  738. >text {
  739. font-size: 24rpx;
  740. }
  741. }
  742. .under-line-text {
  743. font-size: 26rpx !important;
  744. font-weight: 500;
  745. font-style: italic;
  746. text-decoration: underline;
  747. color: #2C6FF3 !important;
  748. margin-left: 24rpx;
  749. background-color: #fff !important;
  750. }
  751. .oc-name {
  752. display: inline-block;
  753. width: 170rpx;
  754. }
  755. .phone {
  756. display: inline-block;
  757. font-size: 26rpx;
  758. font-family: PingFang SC;
  759. font-weight: 500;
  760. color: #2C6FF3;
  761. padding: 0 16rpx;
  762. line-height: 38rpx;
  763. background: #F4F8FF;
  764. border-radius: 8rpx;
  765. margin-left: 24rpx;
  766. >image {
  767. width: 20rpx;
  768. height: 20rpx;
  769. margin-right: 13rpx;
  770. }
  771. }
  772. .goods-container {
  773. height: 154rpx;
  774. margin-top: 14rpx;
  775. padding: 12rpx 12rpx 12rpx 164rpx;
  776. box-sizing: border-box;
  777. position: relative;
  778. border-radius: 8rpx;
  779. background-color: #f5f8fb;
  780. .image-container {
  781. height: 130rpx;
  782. width: 130rpx;
  783. position: absolute;
  784. left: 12rpx;
  785. top: 50%;
  786. transform: translateY(-50%);
  787. }
  788. .details-container {
  789. position: relative;
  790. padding: 12rpx;
  791. .goods-name-num {
  792. .goods-name {
  793. font-size: 26rpx;
  794. color: #333;
  795. font-weight: bold;
  796. }
  797. .goods-num {
  798. font-size: 26rpx;
  799. color: red;
  800. margin-right: 40rpx;
  801. font-weight: bold;
  802. }
  803. }
  804. .goods-price {
  805. font-size: 28rpx;
  806. }
  807. .good-act {
  808. margin-top: 12rpx;
  809. }
  810. .gp-item {
  811. width: 50%;
  812. margin-top: 12rpx;
  813. }
  814. .goodf-act {
  815. font-size: 28rpx;
  816. color: #333;
  817. margin-top: 12rpx;
  818. }
  819. .goods-btn {
  820. margin-top: 12rpx;
  821. }
  822. .refund {
  823. position: absolute;
  824. right: 0;
  825. top: 0;
  826. background-color: red;
  827. color: #fff;
  828. border-radius: 4rpx;
  829. padding: 0 12rpx;
  830. line-height: 40rpx;
  831. font-size: 24rpx;
  832. }
  833. }
  834. }
  835. }
  836. .image-container {
  837. view {
  838. width: 100rpx;
  839. height: 100rpx;
  840. background-color: #ccc;
  841. }
  842. }
  843. .orderstatus {
  844. padding: 20rpx;
  845. background-color: #43cf7c;
  846. border-radius: 80rpx;
  847. color: #fff;
  848. }
  849. }
  850. .re-back{
  851. background-color: #FFF7F7;
  852. padding:10rpx 10rpx 36rpx;
  853. line-height: 36rpx;
  854. font-size: 28rpx;
  855. border-radius: 14rpx;
  856. .oc-name {
  857. display: inline-block;
  858. width: 170rpx;
  859. }
  860. }
  861. }
  862. .popup_overlay {
  863. position: fixed;
  864. top: 0%;
  865. left: 0%;
  866. width: 100%;
  867. height: 100%;
  868. background-color: black;
  869. z-index: 1001;
  870. -moz-opacity: 0.8;
  871. opacity: .80;
  872. filter: alpha(opacity=88);
  873. }
  874. .popup_content {
  875. position: fixed;
  876. top: 50%;
  877. left: 50%;
  878. width: 700rpx;
  879. height: 500rpx;
  880. margin-left: -350rpx;
  881. margin-top: -250rpx;
  882. border: 10px solid white;
  883. background-color: white;
  884. z-index: 1002;
  885. overflow: auto;
  886. }
  887. .pop-content {
  888. padding: 24rpx;
  889. }
  890. .text-notice {
  891. color: red;
  892. font-size: 28rpx;
  893. height: 40rpx;
  894. line-height: 40rpx;
  895. }
  896. .input {
  897. margin-top: 20rpx;
  898. height: 200rpx;
  899. width: 100%;
  900. // border-style: solid;
  901. // border-width: 1rpx;
  902. // border-color: #2C6FF3;
  903. // border-radius: 10rpx;
  904. }
  905. .marginTop {
  906. margin-top: 24rpx;
  907. }
  908. .martop12 {
  909. margin-top: 12rpx;
  910. }
  911. </style>