refundList.vue 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854
  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="header-container">
  6. <view class="search">
  7. <u-search animation placeholder="请输入订单编号,设备号,用户手机号" :clearabled="false" v-model="keyword"
  8. :showAction="false" @search="search"></u-search>
  9. <view class="scan-icon" @click="scan">
  10. <u-icon name="scan" size="22" color="#909399"></u-icon>
  11. </view>
  12. </view>
  13. <view class="flex align-center justify-between" style="margin-top: 28rpx;">
  14. <view class="exceptiontype-container" @tap="actionSheetShow=true">
  15. {{orderStatus.name?orderStatus.name:'选择状态'}}
  16. </view>
  17. <view class="flex align-center date-container">
  18. <view class="" style="margin-right: 10rpx;" @tap="dateSelect('start')">
  19. {{dateStart?dateStart:'开始日期'}}
  20. </view>
  21. <view class="" style="margin-right: 10rpx;">至</view>
  22. <view class="" @tap="dateSelect('end')">{{dateend?dateend:'结束日期'}}</view>
  23. </view>
  24. <view>
  25. <view class="change-month" @tap="changeMonth(-1)">
  26. 上一月
  27. </view>
  28. <view class="change-month" style="margin-left: 20rpx;" @tap="changeMonth(1)">
  29. 下一月
  30. </view>
  31. </view>
  32. </view>
  33. </view>
  34. <scroll-view @scrolltolower="loadMore" class="scrollview" :scroll-with-animation="true" scroll-y
  35. lower-threshold="100" :style="{height:fullHeight}">
  36. <view class="order-content" v-if="list&&list.length>0">
  37. <block v-for="(item,index) in list" :key="item.id">
  38. <view class="scrollview-container">
  39. <view class="flex align-center order-top">
  40. <view class="">订单编号:{{item.orderId}}</view>
  41. <view class="refund-status">
  42. <view class="com-status" style="color: #FF1E1E;" v-if="item.refundStatus==1">待处理</view>
  43. <view class="com-status" style="color: #aaff00;" v-if="item.refundStatus==2">退款中</view>
  44. <view class="com-status" style="color: #bdbdbd;" v-if="item.refundStatus==3">已拒绝</view>
  45. <view class="com-status" style="color: #22ca08;" v-if="item.refundStatus==4">已退款</view>
  46. <view class="com-status" style="color: #ff5500;" v-if="item.refundStatus==5">退款失败</view>
  47. </view>
  48. </view>
  49. <view class="ddxx-box">
  50. <!-- <view class="flex align-center justify-between">
  51. <view class="flex align-center">
  52. <view class="flex align-end" v-for="(item1,index1) in item.orderRefundGoods"
  53. :key="item1.id">
  54. <u--image radius="4" width="130rpx" height="130rpx" :src="item1.cover" mode="widthFix"
  55. :lazy-lord="true"></u--image>
  56. <view class="">×{{item1.totalNumber}}</view>
  57. </view>
  58. </view>
  59. </view> -->
  60. <view class="flex align-center con-item">
  61. <view class="oc-name">设备id:</view>{{item.deviceId}}
  62. </view>
  63. <view class="flex align-center con-item martop12">
  64. <view class="oc-name">申请时间:</view>{{item.createTime}}
  65. </view>
  66. <view class="flex align-center con-item martop12">
  67. <view class="oc-name">退款原因:</view>{{item.reason}}
  68. </view>
  69. <view class="flex align-center con-item martop12">
  70. <view class="oc-name">商品及说明:</view>{{item.description||'/'}}
  71. </view>
  72. <view class="flex align-center martop12">
  73. <view class="oc-name">联系电话:</view>{{item.memberTel}}
  74. <view class="phone"
  75. @click="$tab.navigateTo(`/pages/order/userInfo?id=${item.memberTel}`)">
  76. 会员信息
  77. </view>
  78. </view>
  79. <!-- <view class="flex align-center con-item">
  80. 线路:{{item.placeName}}
  81. </view> -->
  82. <view class="flex align-center justify-between con-item martop12">
  83. <view class="flex align-center ">
  84. <view class="oc-name">订单金额:</view>¥{{(Number(item.refundTotal)/100).toFixed(2)}}
  85. </view>
  86. <view class="refundamount-text marleft"
  87. v-if="item.refundStatus==2||item.refundStatus==4||item.refundStatus==5">
  88. 退款金额:¥{{(Number(item.refundMoney)/100).toFixed(2)}}
  89. </view>
  90. </view>
  91. <!-- <view class="flex align-end martop">
  92. <view class="image-box" v-for="(item2,index2) in item.imgUrls" :key="index2">
  93. <u--image radius="4" width="160rpx" height="160rpx" :src="item2" mode="widthFix"
  94. :lazy-lord="true"></u--image>
  95. </view>
  96. </view> -->
  97. <view class="goods-container" v-for="(item1,index1) in item.orderRefundGoods"
  98. :key="item1.id">
  99. <view class="flex align-center justify-center image-container">
  100. <u--image radius="4" width="130rpx" height="130rpx" :src="item1.cover"
  101. mode="aspectFit" :lazy-lord="true"></u--image>
  102. </view>
  103. <view class="details-container">
  104. <view class="flex align-center goods-name-num justify-between">
  105. <view class="goods-name">{{item1.goodsName}}</view>
  106. <view class="goods-num">×{{item1.totalNumber}}</view>
  107. </view>
  108. <view class="gp-item">
  109. 单价:¥{{(Number(item1.totalMoney)/Number(item1.totalNumber))/100}}
  110. </view>
  111. </view>
  112. </view>
  113. </view>
  114. <view class="flex align-center justify-end" style="padding-top:12rpx;">
  115. <view class="">
  116. <xbutton size='medium' round='25rpx' padding='0rpx 20rpx' bgColor='#43cf7c'
  117. width='140rpx' @tap="showVideoView(item)">查看视频</xbutton>
  118. </view>
  119. <view style="margin-left: 24rpx;"
  120. v-if="item.refundStatus==1||item.refundStatus==3||item.refundStatus==5">
  121. <xbutton size='medium' round='25rpx' padding='0rpx 20rpx' width="150rpx"
  122. @click='refund(item)'>
  123. 退款</xbutton>
  124. </view>
  125. </view>
  126. </view>
  127. </block>
  128. <u-loadmore :status="loadmoreStatus" />
  129. </view>
  130. <view v-else class='empty'>
  131. <u-empty mode="data" text="数据为空"></u-empty>
  132. </view>
  133. </scroll-view>
  134. <u-popup :show="refundShow" mode="center" :safeAreaInsetBottom="false" @close="refundShow=false" @open="open">
  135. <view class="refund-container">
  136. <u-radio-group placement="row" v-model="radioType" @change="radioChange">
  137. <u-radio :customStyle="{marginRight: '24rpx'}" activeColor="#2C6FF3" label="系统退款" name="2">
  138. </u-radio>
  139. <u-radio activeColor="#2C6FF3" label="拒绝退款" name="3"></u-radio>
  140. </u-radio-group>
  141. <view v-if="radioType=='2'">
  142. <view class="martop" v-for="(item,index) in orderGoods" :key="item.id">
  143. <view class="flex align-center" @tap="checked(item)">
  144. <view class="checked">
  145. <image v-if="item.checked"
  146. src="https://cdn.ossfile.mxrvending.com/assets/xy_merc_mini/images/commodity/selected.png"
  147. mode="widthFix">
  148. </image>
  149. <image v-else
  150. src="https://cdn.ossfile.mxrvending.com/assets/xy_merc_mini/images/commodity/select.png"
  151. mode="widthFix"></image>
  152. </view>
  153. <view class="">{{item.goodsName}}*{{item.totalNumber}}</view>
  154. </view>
  155. <view class="flex align-center" style="margin-top: 24rpx;">
  156. <u-number-box button-size="30" v-model="item.refundNum" class='martop'></u-number-box>
  157. <view class='marleft'>
  158. <u--input placeholder="退款金额" @blur="refundGoodsChange" type="digit"
  159. v-model="item.totalMoney" border="surround">
  160. </u--input>
  161. </view>
  162. </view>
  163. </view>
  164. </view>
  165. <view class='martop'>
  166. <u--textarea v-model="remark" placeholder="备注"></u--textarea>
  167. </view>
  168. <view class="martop" v-if="radioType=='2'">总退款金额:¥{{refundTotalMoney}}</view>
  169. <view class="flex align-center justify-end martop">
  170. <view class="">
  171. <xbutton width='200rpx' @click='refundShow=false'>取消</xbutton>
  172. </view>
  173. <view class='marleft'>
  174. <xbutton width='200rpx' @click="refundSure">确定</xbutton>
  175. </view>
  176. </view>
  177. </view>
  178. </u-popup>
  179. <u-datetime-picker :show="show" mode="date" v-model="nowDate" @confirm="confirm" :closeOnClickOverlay="true"
  180. @close="close" @cancel="close"></u-datetime-picker>
  181. <u-action-sheet :show="actionSheetShow" :actions="actions" title="请选择订单状态" @close="actionSheetShow = false"
  182. @select="actionsheetSelect($event)"></u-action-sheet>
  183. <xvideo :list="videoList" ref="video" showBtn></xvideo>
  184. </view>
  185. </template>
  186. <script>
  187. import {
  188. refundList,
  189. hendel
  190. } from "@/api/order/order.js"
  191. import xvideo from "./components/xvideo.vue"
  192. export default {
  193. components: {
  194. xvideo
  195. },
  196. data() {
  197. return {
  198. refundList: [],
  199. refundListlenght: '',
  200. isEmpty: false,
  201. refundShow: false,
  202. show: false,
  203. actionSheetShow: false,
  204. mode: 'single',
  205. index: 1,
  206. unchecked: false,
  207. actions: [{
  208. name: "全部",
  209. label: ""
  210. }, {
  211. name: "待处理",
  212. label: 1
  213. }, {
  214. name: '已退款',
  215. label: 2
  216. }, {
  217. name: '已拒绝',
  218. label: 3
  219. }],
  220. orderStatus: {
  221. name: '全部',
  222. label: ''
  223. }, //退款状态
  224. date: '', //创建时间
  225. list: [], //订单列表
  226. page: 1, //当前分页
  227. size: 10, //分页数据条数
  228. loadmoreStatus: 'loadmore', //加载更多
  229. type: '',
  230. dateStart: '',
  231. dateend: '',
  232. keyword: '',
  233. orderGoods: null,
  234. radioType: '2',
  235. remark: '',
  236. id: null, //退款订单id
  237. nowDate: Number(new Date()),
  238. // refundTotalMoney: 0,
  239. refundReason: [],
  240. videoList: null,
  241. fullHeight: 0,
  242. dateDx:0
  243. }
  244. },
  245. async onLoad() {
  246. let _this = this;
  247. const query = uni.createSelectorQuery().in(this);
  248. query.select(".scrollview").boundingClientRect((data) => {
  249. uni.getSystemInfo({
  250. success(res) {
  251. // 针对iPhone X等机型底部安全距离做适配
  252. const model = res.model;
  253. const modelInclude = [
  254. "iPhone X",
  255. 'iPhone XR',
  256. "iPhone XS",
  257. "iPhone XS MAX",
  258. "iPhone 12/13 mini",
  259. "iPhone 12/13 (Pro)",
  260. "iPhone 12/13 Pro Max",
  261. "iPhone 14 Pro Max"
  262. ];
  263. let safeDistance = modelInclude.includes(model)
  264. //动态设置商品区域高度
  265. console.log(res.windowHeight, data.top)
  266. if (safeDistance) {
  267. _this.fullHeight = res.windowHeight - data.top - 34 + 'px';
  268. } else {
  269. _this.fullHeight = res.windowHeight - data.top + 'px';
  270. }
  271. },
  272. });
  273. }).exec();
  274. await this.getRefundReason()
  275. await this.getList()
  276. },
  277. computed: {
  278. refundTotalMoney() {
  279. let num = 0;
  280. if (this.orderGoods) {
  281. this.orderGoods.forEach(i => {
  282. if (i.checked) {
  283. num += Number(i.totalMoney)
  284. }
  285. })
  286. }
  287. return num
  288. }
  289. },
  290. // watch: {
  291. // orderGoods: {
  292. // handler(newVal, oldVal) {
  293. // let num = 0;
  294. // if (newVal) {
  295. // newVal.forEach(i => {
  296. // if (i.checked) {
  297. // num += Number(i.totalMoney)
  298. // }
  299. // })
  300. // }
  301. // this.refundTotalMoney = num
  302. // },
  303. // deep: true,
  304. // immediate: true
  305. // }
  306. // },
  307. methods: {
  308. getRefundReason() {
  309. return new Promise((resolve, reject) => {
  310. this.getDict('order_refund_refund_reason').then(res => {
  311. let newData = []
  312. res.forEach(item => {
  313. newData.push({
  314. name: item.msg,
  315. code: item.code
  316. })
  317. })
  318. this.refundReason = newData;
  319. resolve(res)
  320. }).catch(err => {
  321. reject(err)
  322. })
  323. })
  324. },
  325. changeMonth(add) {
  326. this.dateDx += add;
  327. var date = new Date();
  328. var year = date.getFullYear(); //当前年:四位数字
  329. var month = date.getMonth() + 1 + this.dateDx; //当前月:0-11
  330. var yeardx = Math.ceil(month / 12) - 1
  331. month %= 12;
  332. if (month <= 0) month += 12;
  333. year += yeardx;
  334. month = month < 10 ? ('0' + month) : month;
  335. this.dateStart = year + '-' + month + '-01';
  336. var day = 28;
  337. if (2 == month) {
  338. if (year % 4 == 0) {
  339. day = 29;
  340. }
  341. } else {
  342. if (month < 8) {
  343. if (1 == month % 2) {
  344. day = 31;
  345. } else {
  346. day = 30;
  347. }
  348. } else {
  349. if (1 == month % 2) {
  350. day = 30;
  351. } else {
  352. day = 31;
  353. }
  354. }
  355. }
  356. this.dateend = year + '-' + month + '-' + (day < 10 ? ('0' + day) : day);
  357. this.search();
  358. },
  359. dateSelect(type) {
  360. if (type == 'start') {
  361. this.type = type
  362. }
  363. if (type == 'end') {
  364. this.type = type
  365. }
  366. this.show = true
  367. },
  368. confirm(e) {
  369. this.show = false
  370. if (this.type == 'start') {
  371. this.dateStart = uni.$u.timeFormat(e.value, 'yyyy-mm-dd')
  372. }
  373. if (this.type == 'end') {
  374. this.dateend = uni.$u.timeFormat(e.value, 'yyyy-mm-dd')
  375. }
  376. this.reset()
  377. this.getList()
  378. },
  379. close() {
  380. this.show = false
  381. },
  382. search() {
  383. this.reset()
  384. this.getList()
  385. },
  386. //扫码
  387. scan() {
  388. uni.scanCode({
  389. success: (res) => {
  390. this.keyword = res.result;
  391. this.search()
  392. }
  393. });
  394. },
  395. open() {
  396. this.refundShow = true
  397. },
  398. //获取数据列表
  399. getList() {
  400. refundList({
  401. page: {
  402. current: this.page,
  403. size: this.size,
  404. },
  405. refundStatus: this.orderStatus.label, //退款状态
  406. beginCreateTime: this.dateStart, //时间
  407. endCreateTime: this.dateend
  408. }).then(res => {
  409. let data = res.data.records;
  410. let newData = [];
  411. console.log('res', data)
  412. data.forEach(i => {
  413. if (i.imgUrls) {
  414. i.imgUrls = i.imgUrls.split(',')
  415. }
  416. let refundTotal = 0;
  417. if (i.orderRefundGoods) { //处理无数据情况
  418. i.orderRefundGoods.forEach(j => {
  419. refundTotal += j.totalMoney
  420. })
  421. }
  422. if (this.refundReason.length > 0) {
  423. this.refundReason.forEach(j => {
  424. if (i.reason == j.code) {
  425. i.reason = j.name
  426. }
  427. })
  428. }
  429. i.refundTotal = refundTotal
  430. newData.push(i)
  431. })
  432. if (newData.length < 10) {
  433. this.loadmoreStatus = "nomore"
  434. } else {
  435. this.loadmoreStatus = "loadmore"
  436. }
  437. this.list = this.list.concat(newData)
  438. })
  439. },
  440. //重置数据
  441. reset() {
  442. this.loadmoreStatus == 'loadmore'
  443. this.page = 1;
  444. this.size = 10;
  445. this.list = [];
  446. },
  447. //上拉加载
  448. loadMore(e) {
  449. if (this.loadmoreStatus == 'nomore') return
  450. this.page++
  451. this.getList()
  452. },
  453. //退款按钮
  454. refund(e) {
  455. this.id = e.id;
  456. let orderRefundGoods = JSON.parse(JSON.stringify(e.orderRefundGoods));
  457. let arr = []
  458. if (orderRefundGoods && orderRefundGoods.length > 0) {
  459. arr = orderRefundGoods.map(i => {
  460. i.checked = false;
  461. i.refundNum = 1;
  462. i.totalMoney = Number(i.totalMoney) / 100
  463. return i
  464. });
  465. } else {
  466. arr = []
  467. }
  468. this.orderGoods = JSON.parse(JSON.stringify(arr))
  469. this.refundShow = true
  470. },
  471. //退款状态选择
  472. actionsheetSelect(e) {
  473. this.orderStatus = e
  474. this.search()
  475. },
  476. //退款选项
  477. radioChange(e) {},
  478. //选中商品
  479. checked(item) {
  480. this.orderGoods.forEach(i => {
  481. if (i.id == item.id) {
  482. i.checked = !i.checked
  483. }
  484. })
  485. this.orderGoods = JSON.parse(JSON.stringify(this.orderGoods))
  486. },
  487. refundGoodsChange(e) {
  488. if (!this.$xy.testPrice(e)) {
  489. this.$modal.msg('输入价格最低为分!')
  490. }
  491. },
  492. // 退款处理确认按钮
  493. refundSure() {
  494. let ordersGoods = [];
  495. if (this.radioType == 2) {
  496. for (var i = 0; i < this.orderGoods.length; i++) {
  497. let item = this.orderGoods[i]
  498. if (item.checked) {
  499. if (!this.$xy.testPrice(item.totalMoney)) {
  500. this.$modal.msg('输入价格最低为分!')
  501. return
  502. }
  503. ordersGoods.push({
  504. goodsId: item.goodsId,
  505. totalNumber: item.refundNum,
  506. refundMoney: item.totalMoney * 100
  507. })
  508. }
  509. }
  510. if (ordersGoods && ordersGoods.length == 0) {
  511. this.$modal.msg('请选择退款商品!')
  512. return
  513. }
  514. }
  515. let params = {
  516. id: this.id,
  517. refundStatus: Number(this.radioType),
  518. ordersGoods: ordersGoods,
  519. remark: this.remark
  520. }
  521. console.log('params', params)
  522. hendel(params).then(res => {
  523. if (res.code == 200) {
  524. this.$modal.msg('订单处理成功~')
  525. this.search()
  526. } else {
  527. this.$modal.msg('订单处理失败~')
  528. }
  529. this.orderGoods = null;
  530. this.refundShow = false;
  531. })
  532. },
  533. showVideoView(item) {
  534. this.$refs.video.show = true
  535. this.videoList = [
  536. item.urlVideo0,
  537. item.urlVideo1
  538. ]
  539. },
  540. playVideo(o) {
  541. if (0 == o) {
  542. this.videoUrl = this.selOrder.url0;
  543. } else {
  544. this.videoUrl = this.selOrder.url1;
  545. }
  546. },
  547. closeVideoView() {
  548. this.videoUrl = '';
  549. this.hiddenOrderVideos = true;
  550. },
  551. }
  552. }
  553. </script>
  554. <style lang="scss" scoped>
  555. .container {
  556. .martop {
  557. margin-top: 30rpx;
  558. }
  559. .empty {
  560. margin-top: 40%;
  561. }
  562. .marleft {
  563. margin-left: 20rpx;
  564. }
  565. .scrollview {
  566. width: 724rpx;
  567. margin-left: 13rpx;
  568. }
  569. .header-container {
  570. padding: 20rpx 13rpx;
  571. background-color: #fff;
  572. .search {
  573. position: relative;
  574. .scan-icon {
  575. position: absolute;
  576. right: 24rpx;
  577. top: 50%;
  578. transform: translateY(-50%);
  579. z-index: 2;
  580. }
  581. }
  582. .params-list {
  583. .date-container {
  584. background-color: #fff;
  585. padding: 12rpx 24rpx;
  586. border-radius: 15rpx;
  587. }
  588. }
  589. .picker-container {
  590. width: 150rpx;
  591. padding: 12rpx 24rpx;
  592. border-radius: 15rpx;
  593. background-color: #fff;
  594. }
  595. .exceptiontype-container {
  596. background-color: #fff;
  597. border-radius: 10rpx;
  598. padding: 0 10rpx;
  599. width: 140rpx;
  600. overflow: hidden;
  601. text-overflow: ellipsis;
  602. white-space: nowrap;
  603. line-height: 50rpx;
  604. }
  605. .change-month {
  606. display: inline-block;
  607. width: 100rpx;
  608. height: 45rpx;
  609. border: 1px solid #CCCCCC;
  610. border-radius: 6rpx;
  611. line-height: 43rpx;
  612. text-align: center;
  613. border-radius: 10rpx;
  614. text-align: center;
  615. font-size: 22rpx;
  616. color: #777777;
  617. }
  618. }
  619. .order-content {
  620. overflow: hidden;
  621. }
  622. .scrollview-container {
  623. background-color: #fff;
  624. margin-top: 20rpx;
  625. padding: 20rpx;
  626. border-radius: 15rpx;
  627. box-shadow: 0 5rpx 4rpx rgba(179, 179, 179, 0.3);
  628. .order-top {
  629. position: relative;
  630. font-size: 28rpx;
  631. color: #333;
  632. font-weight: bold;
  633. .refund-status {
  634. position: absolute;
  635. right: 0;
  636. top: 0;
  637. }
  638. }
  639. .ddxx-box {
  640. padding: 20rpx 13rpx;
  641. border-radius: 12rpx;
  642. font-size: 28rpx;
  643. color: #777;
  644. .martop12 {
  645. margin-top: 12rpx;
  646. }
  647. .goods-container {
  648. height: 154rpx;
  649. padding: 12rpx 12rpx 12rpx 164rpx;
  650. box-sizing: border-box;
  651. position: relative;
  652. border-radius: 8rpx;
  653. background-color: #f5f8fb;
  654. margin-top: 13rpx;
  655. .image-container {
  656. height: 130rpx;
  657. width: 130rpx;
  658. position: absolute;
  659. left: 12rpx;
  660. top: 50%;
  661. transform: translateY(-50%);
  662. }
  663. .details-container {
  664. position: relative;
  665. padding: 12rpx;
  666. .goods-name-num {
  667. .goods-name {
  668. font-size: 26rpx;
  669. color: #333;
  670. font-weight: bold;
  671. }
  672. .goods-num {
  673. font-size: 26rpx;
  674. color: red;
  675. margin-right: 40rpx;
  676. font-weight: bold;
  677. }
  678. }
  679. .goods-price {
  680. font-size: 28rpx;
  681. }
  682. .good-act {
  683. margin-top: 12rpx;
  684. }
  685. .gp-item {
  686. width: 50%;
  687. margin-top: 12rpx;
  688. }
  689. .goodf-act {
  690. font-size: 28rpx;
  691. color: #333;
  692. margin-top: 12rpx;
  693. }
  694. .goods-btn {
  695. margin-top: 12rpx;
  696. }
  697. .refund {
  698. position: absolute;
  699. right: 0;
  700. top: 0;
  701. background-color: red;
  702. color: #fff;
  703. border-radius: 4rpx;
  704. padding: 0 12rpx;
  705. line-height: 40rpx;
  706. font-size: 24rpx;
  707. }
  708. }
  709. }
  710. .oc-name {
  711. display: inline-block;
  712. width: 170rpx;
  713. }
  714. .phone {
  715. display: inline-block;
  716. font-size: 26rpx;
  717. font-family: PingFang SC;
  718. font-weight: 500;
  719. color: #2C6FF3;
  720. padding: 0 16rpx;
  721. line-height: 38rpx;
  722. background: #F4F8FF;
  723. border-radius: 8rpx;
  724. margin-left: 24rpx;
  725. }
  726. }
  727. .con-item {
  728. margin-top: 12rpx;
  729. }
  730. .untreated-btn {
  731. color: red;
  732. }
  733. .refunded-text {
  734. margin-left: 10rpx;
  735. color: #5e90d9;
  736. }
  737. .refundamount-text {
  738. color: red;
  739. }
  740. .image-box+.image-box {
  741. margin-left: 12rpx;
  742. }
  743. }
  744. .btn {
  745. margin-top: 12rpx;
  746. }
  747. .refund-container {
  748. background-color: #fff;
  749. width: 600rpx;
  750. padding: 20rpx 30rpx;
  751. .checked {
  752. width: 36rpx;
  753. height: 36rpx;
  754. margin-right: 12rpx;
  755. image {
  756. width: 36rpx;
  757. height: 36rpx;
  758. }
  759. }
  760. }
  761. }
  762. </style>