index.vue 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949
  1. <template>
  2. <view class="pos-order-list" ref="container">
  3. <!-- #ifdef MP || APP-PLUS -->
  4. <NavBar titleText="售后订单" bagColor="#F5F5F5" :iconColor="iconColor" :textColor="iconColor" :isScrolling="isScrolling" showBack></NavBar>
  5. <!-- #endif -->
  6. <view class="searchCon acea-row">
  7. <view class="search acea-row row-middle">
  8. <text class="iconfont icon-ic_search"></text>
  9. <input class="inputs" placeholder='请输入订单号/售后单号/快递单号/用户ID/手机号' placeholder-class='placeholder' confirm-type='search' name="search" v-model="where.order_id"
  10. @confirm="searchSubmit"></input>
  11. </view>
  12. <view class="btn" @click="filterShow = true">
  13. <text class="iconfont icon-ic_sort"></text>
  14. </view>
  15. </view>
  16. <view class="nav acea-row row-around row-middle" id="nav" :style="{
  17. top:popupTop
  18. }">
  19. <view class="item" :class="state == 5 ? 'on' : ''" @click="changeStatus(5)">
  20. 待处理
  21. <image src="../static/adorn.png" v-if="state == 5"></image>
  22. </view>
  23. <view class="item" :class="state == 0 ? 'on' : ''" @click="changeStatus(0)">
  24. 待审核
  25. <image src="../static/adorn.png" v-if="state == 0"></image>
  26. </view>
  27. <view class="item" :class="state == 2 ? 'on' : ''" @click="changeStatus(2)">
  28. 待退货
  29. <image src="../static/adorn.png" v-if="state == 2"></image>
  30. </view>
  31. <view class="item" :class="state == 6 ? 'on' : ''" @click="changeStatus(6)">
  32. 已完成
  33. <image src="../static/adorn.png" v-if="state == 6"></image>
  34. </view>
  35. </view>
  36. <view class="list" v-if="list.length">
  37. <view class="item" v-for="(item, index) in list" :key="index">
  38. <view class="order-num acea-row row-between-wrapper" @click="toDetail(item)">
  39. <view class="acea-row row-middle">
  40. <view>售后单号:{{ item.order_id }}</view>
  41. <view class="label" v-if="item.pink_name && !storeNum">{{item.pink_name}}</view>
  42. <view class="label" v-if="item.plat_name && storeNum">{{item.plat_name}}</view>
  43. </view>
  44. <view class="state" v-if="[0, 1, 2].includes(item.refund_type)">待审核</view>
  45. <view class="state" v-if="[4, 5].includes(item.refund_type)">
  46. 待退货({{ item.apply_type == 2 ? '快递' : '到店' }})
  47. </view>
  48. <view class="state" v-if="[3, 6].includes(item.refund_type)">已完成</view>
  49. </view>
  50. <view class="pos-order-goods">
  51. <view class="goods acea-row" @click="toDetail(item)">
  52. <scroll-view class="picTxt scroll-view" scroll-x="true" v-if="item._info.length > 1">
  53. <view class="pictrue" v-for="(val, key) in item._info" :key="key">
  54. <image :src="val.cart_info.productInfo.attrInfo?val.cart_info.productInfo.attrInfo.image:val.cart_info.productInfo.image" />
  55. </view>
  56. </scroll-view>
  57. <view class="picTxt" v-else>
  58. <view class="acea-row" v-for="(val, key) in item._info" :key="key">
  59. <view class="pictrue">
  60. <image :src="val.cart_info.productInfo.attrInfo?val.cart_info.productInfo.attrInfo.image:val.cart_info.productInfo.image" />
  61. </view>
  62. <view class="text">
  63. <view class="info line2">
  64. <!-- <text v-if="val.cart_info.is_gift == 1" class="label">[赠品]</text> -->
  65. {{ val.cart_info.productInfo.store_name }}
  66. </view>
  67. <view class="attr" v-if="val.cart_info.productInfo.attrInfo">
  68. {{ val.cart_info.productInfo.attrInfo.suk }}
  69. </view>
  70. </view>
  71. </view>
  72. </view>
  73. <view class="money">
  74. <!-- <view class="x-money">¥{{ item.pay_price }}</view> -->
  75. <BaseMoney :money="item.pay_price" symbolSize="20" integerSize="32" decimalSize="20"></BaseMoney>
  76. <view class="num">共{{ item.total_num }}件</view>
  77. <!-- <view class="y-money">
  78. ¥{{ val.cart_info.productInfo.ot_price }}
  79. </view> -->
  80. <!-- <view class="info" v-if="val.cart_info.refund_num && item._status._type !=-2">{{val.cart_info.refund_num}}件退款中</view> -->
  81. </view>
  82. </view>
  83. </view>
  84. <!-- <view class="public-total">
  85. 共{{ item.total_num }}件商品,实付款
  86. <span class="money">¥{{ item.pay_price }}</span> ( 邮费 ¥{{
  87. item.pay_postage
  88. }}
  89. )
  90. </view> -->
  91. <view class="operation acea-row row-between-wrapper">
  92. <view v-if="item.apply_type == 1" class="more acea-row row-middle">
  93. <text class="iconfont icon-ic_returnmoney"></text>仅退款
  94. </view>
  95. <view v-else-if="item.apply_type == 2 || item.apply_type == 3" class="more acea-row row-middle">
  96. <text class="iconfont icon-ic_returnofgoods"></text>退货退款
  97. </view>
  98. <view class="acea-row row-middle">
  99. <view class="btn" @click="modify(item, 1)">订单备注</view>
  100. <view class="btn on" :class="openErp?'on':''" @click="modify(item,'2',1)" v-if="[1].includes(item.apply_type) && [0].includes(item.refund_type)">
  101. 退款审核
  102. </view>
  103. <view class="btn on" :class="openErp?'on':''" @click="modify(item,'2',0)" v-if="[2,3].includes(item.apply_type) && [0].includes(item.refund_type)">
  104. 退款审核
  105. </view>
  106. <view class="btn" v-if="[2].includes(item.apply_type) && [5].includes(item.refund_type)" @click="goLogistics(item)">查看物流</view>
  107. <view class="btn on" v-if="[1,2,3].includes(item.apply_type) && [4,5].includes(item.refund_type)" @click="modify(item, 2, 1)">确认收货</view>
  108. </view>
  109. </view>
  110. </view>
  111. </view>
  112. <emptyPage v-else title="暂无订单~" src="/statics/images/noOrder.gif"></emptyPage>
  113. <Loading :loaded="loaded" :loading="loading"></Loading>
  114. <PriceChange :change="change" :orderInfo="orderInfo" :isRefund="isRefund" v-on:statusChange="statusChange($event)" v-on:closechange="changeclose($event)" v-on:savePrice="savePrice"
  115. :status="status"></PriceChange>
  116. <view class="mask" v-if="filterShow" @click="filterShow = false"></view>
  117. <view class="filter-popup" :class="{ on: filterShow }" :style="{
  118. top:popupTop
  119. }">
  120. <view class="content">
  121. <view class="item">
  122. <view class="title">按退货类型</view>
  123. <view class="acea-row list">
  124. <view class="cell" v-for="(item, index) in dateList" :key="index" :class="{ on: item.val == where.apply_type }" @click="dateChange(item.val,0)">{{ item.label }}</view>
  125. </view>
  126. </view>
  127. <view class="item" v-if="storeNum">
  128. <view class="title">按订单来源</view>
  129. <view class="acea-row list">
  130. <view class="cell" v-for="(item, index) in orderList" :key="index" :class="{ on: item.val == currentOrder }" @click="dateChange(item.val,1)">{{item.label}}</view>
  131. </view>
  132. </view>
  133. </view>
  134. </view>
  135. <home></home>
  136. </view>
  137. </template>
  138. <script>
  139. import {
  140. mapGetters
  141. } from "vuex";
  142. import {
  143. setStoreRefundRemark,
  144. setAdminRefundRemark,
  145. setStoreOfflinePay,
  146. setOfflinePay,
  147. setStoreOrderRefund,
  148. setOrderRefund,
  149. storeOrderRefundAgree,
  150. orderRefundAgree,
  151. storeRefundList,
  152. adminRefundList
  153. } from "@/api/admin";
  154. import {
  155. erpConfig
  156. } from "@/api/esp.js";
  157. import Loading from '@/components/Loading/index'
  158. import PriceChange from '../components/PriceChange/index.vue'
  159. import home from '../components/home/index.vue'
  160. import emptyPage from '@/components/emptyPage.vue'
  161. import NavBar from '@/components/NavBar.vue'
  162. import {
  163. isMoney
  164. } from '@/utils/validate.js';
  165. import {
  166. HTTP_REQUEST_URL
  167. } from '@/config/app';
  168. export default {
  169. name: "AdminOrderList",
  170. components: {
  171. Loading,
  172. PriceChange,
  173. home,
  174. emptyPage,
  175. NavBar,
  176. },
  177. computed: mapGetters(["storeNum"]),
  178. data() {
  179. return {
  180. getHeight: this.$util.getWXStatusHeight(),
  181. iconColor: '#333333',
  182. isScrolling: false,
  183. top: 0,
  184. navHeight: 0,
  185. isFixed: false,
  186. filterShow: false,
  187. openErp: false,
  188. current: "",
  189. change: false,
  190. types: 0,
  191. where: {
  192. order_id: '',
  193. refundTypes: 5,
  194. apply_type: '',
  195. page: 1,
  196. limit: 10,
  197. },
  198. list: [],
  199. loaded: false,
  200. loading: false,
  201. orderInfo: {},
  202. status: "",
  203. state: 5,
  204. isRefund: 0, //1是仅退款;0是退货退款
  205. imgHost: HTTP_REQUEST_URL,
  206. dateSelected: '',
  207. dateList: [{
  208. label: '全部',
  209. val: '',
  210. },
  211. {
  212. label: '退货退款',
  213. val: '2',
  214. },
  215. {
  216. label: '仅退款',
  217. val: '1',
  218. },
  219. ],
  220. payList: [{
  221. label: '全部',
  222. val: '',
  223. },
  224. {
  225. label: '微信支付',
  226. val: '1'
  227. },
  228. {
  229. label: '支付宝支付',
  230. val: '4'
  231. },
  232. {
  233. label: '余额支付',
  234. val: '2'
  235. },
  236. {
  237. label: '线下支付',
  238. val: '3'
  239. },
  240. ],
  241. orderList:[
  242. {
  243. label: '全部',
  244. val: '-1'
  245. },
  246. {
  247. label: '平台订单',
  248. val: '0'
  249. },
  250. {
  251. label: '供应商订单',
  252. val: '2'
  253. },
  254. {
  255. label: '门店订单',
  256. val: '1'
  257. }
  258. ],
  259. popupTop:0,
  260. currentOrder:-1
  261. };
  262. },
  263. onLoad(option) {
  264. // #ifdef MP
  265. this.popupTop = this.getHeight.barTop+this.getHeight.barHeight+'px'
  266. // #endif
  267. let type = option.types;
  268. this.getErpConfig();
  269. },
  270. onShow() {
  271. this.init();
  272. },
  273. mounted() {
  274. const query = uni.createSelectorQuery().in(this);
  275. query.select("#nav").boundingClientRect((data) => {
  276. this.top = data.top;
  277. this.navHeight = data.height;
  278. }).exec();
  279. },
  280. onPageScroll(option) {
  281. // if (this.top >= option.scrollTop) {
  282. // this.isFixed = false;
  283. // } else {
  284. // this.isFixed = true;
  285. // }
  286. },
  287. methods: {
  288. searchSubmit() {
  289. },
  290. statusChange(e) {
  291. this.status = e;
  292. },
  293. goDelivery(item) {
  294. if (this.openErp) return
  295. uni.navigateTo({
  296. url: '/pages/admin/delivery/index?id=' + item.order_id + '&listId=' + item.id + '&totalNum=' + item.total_num + '&orderStatus=' + item._status + '&comeType=1&productType=' +
  297. item.product_type+'&storeNum='+this.storeNum
  298. })
  299. },
  300. getErpConfig() {
  301. erpConfig().then(res => {
  302. this.openErp = res.data.open_erp;
  303. }).catch(err => {
  304. this.$util.Tips({
  305. title: err
  306. })
  307. })
  308. },
  309. // 获取数据
  310. getIndex: function() {
  311. let that = this;
  312. if (that.loading || that.loaded) return;
  313. that.loading = true;
  314. let funApi = '';
  315. if(this.storeNum){
  316. that.where.plat_type = this.currentOrder;
  317. funApi = adminRefundList;
  318. }else{
  319. funApi = storeRefundList;
  320. }
  321. funApi(that.where).then(
  322. res => {
  323. that.loading = false;
  324. that.loaded = res.data.length < that.where.limit;
  325. that.list.push.apply(that.list, res.data);
  326. that.where.page = that.where.page + 1;
  327. },
  328. err => {
  329. that.$util.Tips({
  330. title: err
  331. })
  332. }
  333. );
  334. },
  335. // 初始化
  336. init: function() {
  337. this.list = [];
  338. this.where.page = 1;
  339. this.loaded = false;
  340. this.loading = false;
  341. this.getIndex();
  342. this.current = "";
  343. },
  344. searchSubmit() {
  345. this.init();
  346. },
  347. // 导航切换
  348. changeStatus(val) {
  349. if (this.state != val) {
  350. this.state = val;
  351. this.where.refundTypes = val;
  352. this.init();
  353. }
  354. },
  355. // 商品操作
  356. modify: function(item, status, type) {
  357. if (this.openErp && status != 1) return
  358. this.change = true;
  359. this.status = status.toString();
  360. this.orderInfo = item;
  361. if (status == 2) {
  362. this.isRefund = type
  363. }
  364. },
  365. changeclose: function(msg) {
  366. this.change = msg;
  367. this.orderInfo = {};
  368. },
  369. objOrderRefund(data) {
  370. let that = this;
  371. let funApi = '';
  372. if(this.storeNum){
  373. funApi = setOrderRefund;
  374. }else{
  375. funApi = setStoreOrderRefund;
  376. }
  377. funApi(data).then(
  378. res => {
  379. that.change = false;
  380. that.$util.Tips({
  381. title: res.msg
  382. });
  383. that.init();
  384. },
  385. err => {
  386. that.change = false;
  387. that.$util.Tips({
  388. title: err
  389. });
  390. }
  391. );
  392. },
  393. async savePrice(opt) {
  394. let that = this,
  395. data = {},
  396. price = opt.price,
  397. refund_price = opt.refund_price,
  398. refund_status = that.orderInfo.refund_status,
  399. remark = opt.remark;
  400. data.order_id = that.orderInfo.order_id;
  401. if (that.status == 2) {
  402. if (this.isRefund) {
  403. // setOrderRefund(data).then(
  404. // res => {
  405. // that.change = false;
  406. // that.$util.Tips({title: res.msg});
  407. // that.init();
  408. // },
  409. // err => {
  410. // that.change = false;
  411. // that.$util.Tips({title: err});
  412. // }
  413. // );
  414. if (!isMoney(refund_price)) {
  415. return that.$util.Tips({
  416. title: '请输入正确的金额'
  417. });
  418. }
  419. data.price = refund_price;
  420. data.type = opt.type;
  421. this.objOrderRefund(data);
  422. } else {
  423. if (opt.type == 1) {
  424. let funApi = '';
  425. if(this.storeNum){
  426. funApi = orderRefundAgree;
  427. }else{
  428. funApi = storeOrderRefundAgree
  429. }
  430. funApi(this.orderInfo.id).then(res => {
  431. that.change = false;
  432. that.$util.Tips({
  433. title: res.msg
  434. });
  435. that.init();
  436. }).catch(err => {
  437. that.change = false;
  438. that.$util.Tips({
  439. title: err
  440. });
  441. })
  442. }
  443. // else{
  444. // data.type = opt.type;
  445. // data.refuse_reason = opt.refuse_reason;
  446. // this.objOrderRefund(data);
  447. // }
  448. if (opt.type == 2) {
  449. data.type = opt.type;
  450. data.refuse_reason = opt.refuse_reason;
  451. this.objOrderRefund(data);
  452. }
  453. }
  454. } else if (that.status == 8) {
  455. data.type = opt.type;
  456. data.refuse_reason = opt.refuse_reason;
  457. this.objOrderRefund(data);
  458. } else {
  459. if (!remark) {
  460. return this.$util.Tips({
  461. title: '请输入备注'
  462. })
  463. }
  464. data.remark = remark;
  465. let funApi = '';
  466. if(this.storeNum){
  467. funApi = setAdminRefundRemark;
  468. }else{
  469. funApi = setStoreRefundRemark;
  470. }
  471. funApi(data).then(
  472. res => {
  473. that.change = false;
  474. this.$util.Tips({
  475. title: res.msg,
  476. icon: 'success'
  477. })
  478. that.init();
  479. },
  480. err => {
  481. that.change = false;
  482. that.$util.Tips({
  483. title: err
  484. });
  485. }
  486. );
  487. }
  488. },
  489. toDetail(item) {
  490. uni.navigateTo({
  491. url: `/pages/admin/refundOrderDetail/index?id=${item.order_id}&storeNum=${this.storeNum}`
  492. })
  493. },
  494. offlinePay: function(item) {
  495. if (this.openErp) return
  496. let funApi = ''
  497. if(this.storeNum){
  498. funApi = setOfflinePay
  499. }else{
  500. funApi = setStoreOfflinePay
  501. }
  502. funApi({
  503. order_id: item.order_id
  504. }).then(
  505. res => {
  506. this.$util.Tips({
  507. title: res.msg,
  508. icon: "success"
  509. });
  510. this.init();
  511. },
  512. error => {
  513. this.$util.Tips(error);
  514. }
  515. );
  516. },
  517. dateChange(value,num) {
  518. this.filterShow = false;
  519. if(num){
  520. this.currentOrder = value;
  521. }else{
  522. this.where.apply_type = value;
  523. }
  524. this.init();
  525. },
  526. goLogistics(orderInfo) {
  527. uni.navigateTo({
  528. url: '/pages/admin/logistics/index?type=refund&orderId=' + orderInfo.order_id
  529. })
  530. },
  531. },
  532. onReachBottom() {
  533. this.getIndex()
  534. }
  535. }
  536. </script>
  537. <style lang="scss" scoped>
  538. .pos-order-list {
  539. padding-bottom: constant(safe-area-inset-bottom); ///兼容 IOS<11.2/
  540. padding-bottom: env(safe-area-inset-bottom); ///兼容 IOS>11.2/
  541. }
  542. .searchCon {
  543. padding: 10rpx 20rpx;
  544. .search {
  545. flex: 1;
  546. height: 72rpx;
  547. padding: 0 32rpx;
  548. border-radius: 36rpx;
  549. background: #FFFFFF;
  550. .iconfont {
  551. margin-right: 16rpx;
  552. font-size: 32rpx;
  553. color: #999999;
  554. }
  555. .inputs {
  556. flex: 1;
  557. font-size: 28rpx;
  558. color: #333333;
  559. }
  560. .placeholder {
  561. font-size: 26rpx;
  562. color: #ccc;
  563. }
  564. }
  565. .btn {
  566. width: 72rpx;
  567. height: 72rpx;
  568. border-radius: 50%;
  569. margin-left: 20rpx;
  570. background: #FFFFFF;
  571. text-align: center;
  572. .iconfont {
  573. font-size: 32rpx;
  574. line-height: 72rpx;
  575. color: #666666;
  576. }
  577. }
  578. }
  579. .pos-order-list .nav {
  580. position: sticky;
  581. top: 0;
  582. right: 0;
  583. left: 0;
  584. z-index: 99;
  585. background: #F5F5F5;
  586. font-size: 26rpx;
  587. line-height: 42rpx;
  588. color: #333333;
  589. .item {
  590. position: relative;
  591. padding: 28rpx 0;
  592. image {
  593. width: 14rpx;
  594. height: 14rpx;
  595. display: block;
  596. position: absolute;
  597. bottom: 20rpx;
  598. right: -4rpx;
  599. }
  600. }
  601. }
  602. .pos-order-list .nav .item.on {
  603. font-weight: 500;
  604. font-size: 30rpx;
  605. color: #2A7EFB;
  606. }
  607. .pos-order-list .list {
  608. padding: 0 20rpx;
  609. }
  610. .pos-order-list .nothing {
  611. margin-top: 120upx;
  612. text-align: center;
  613. color: #cfcfcf;
  614. }
  615. .pos-order-list .list .item {
  616. padding: 32rpx 24rpx;
  617. border-radius: 24rpx;
  618. background-color: #fff;
  619. }
  620. .pos-order-list .list .item~.item {
  621. margin-top: 20rpx;
  622. }
  623. .pos-order-list .list .item .order-num {
  624. font-size: 28rpx;
  625. line-height: 40rpx;
  626. color: #333333;
  627. .label{
  628. font-family: PingFang SC, PingFang SC;
  629. font-weight: 400;
  630. font-size: 20rpx;
  631. color: #2A7EFB;
  632. height: 32rpx;
  633. line-height: 30rpx;
  634. border-radius: 6rpx;
  635. border: 1px solid #2A7EFB;
  636. padding: 0 4rpx;
  637. margin-left: 16rpx;
  638. }
  639. }
  640. .pos-order-list .list .item .order-num .state {
  641. color: #FF7E00;
  642. }
  643. .pos-order-list .list .item .order-num .state.on {
  644. font-size: 24rpx;
  645. width: 150rpx;
  646. text-align: right;
  647. }
  648. .pos-order-list .list .item .order-num .time {
  649. font-size: 26upx;
  650. font-weight: normal;
  651. color: #999;
  652. }
  653. .pos-order-list .list .item .operation .more {
  654. position: relative;
  655. font-size: 26rpx;
  656. color: #999999;
  657. }
  658. .pos-order-list .list .item .operation .more .iconfont {
  659. margin-right: 12rpx;
  660. font-size: 34rpx;
  661. color: #2A7EFB;
  662. }
  663. .pos-order-list .list .item .operation .icon-gengduo {
  664. font-size: 50upx;
  665. color: #aaa;
  666. }
  667. .pos-order-list .list .item .operation .order .arrow {
  668. width: 0;
  669. height: 0;
  670. border-left: 11upx solid transparent;
  671. border-right: 11upx solid transparent;
  672. border-top: 20upx solid #e5e5e5;
  673. position: absolute;
  674. left: 15upx;
  675. bottom: -18upx;
  676. }
  677. .pos-order-list .list .item .operation .order .arrow:before {
  678. content: '';
  679. width: 0;
  680. height: 0;
  681. border-left: 7upx solid transparent;
  682. border-right: 7upx solid transparent;
  683. border-top: 20upx solid #fff;
  684. position: absolute;
  685. left: -7upx;
  686. bottom: 0;
  687. }
  688. .pos-order-list .list .item .operation .order {
  689. width: 200upx;
  690. background-color: #fff;
  691. border: 1px solid #eee;
  692. border-radius: 10upx;
  693. position: absolute;
  694. top: -100upx;
  695. z-index: 9;
  696. }
  697. .pos-order-list .list .item .operation .order .items {
  698. height: 77upx;
  699. line-height: 77upx;
  700. text-align: center;
  701. }
  702. .pos-order-list .list .item .operation .order .items~.items {
  703. border-top: 1px solid #f5f5f5;
  704. }
  705. .pos-order-list .list .item .operation .btn {
  706. height: 56rpx;
  707. padding: 0 24rpx;
  708. border-radius: 28rpx;
  709. border: 1rpx solid #CCCCCC;
  710. font-size: 24rpx;
  711. line-height: 54rpx;
  712. color: #333333;
  713. &.on {
  714. color: #FFFFFF !important;
  715. background-color: #2A7EFB !important;
  716. border-color: #2A7EFB !important;
  717. }
  718. }
  719. .pos-order-list .list .item .operation .btn~.btn {
  720. margin-left: 16rpx;
  721. }
  722. .pos-order-list .list .item .operation .wait {
  723. margin-left: 30rpx;
  724. }
  725. .pos-order-goods .goods {
  726. padding: 26rpx 0;
  727. }
  728. .pos-order-goods .goods~.goods {
  729. border-top: 1px dashed #e5e5e5;
  730. }
  731. .pos-order-goods .goods .picTxt {
  732. flex: 1;
  733. min-width: 0;
  734. }
  735. .pos-order-goods .goods .scroll-view {
  736. box-sizing: border-box;
  737. white-space: nowrap;
  738. .pictrue {
  739. display: inline-block;
  740. +.pictrue {
  741. margin-left: 16rpx;
  742. }
  743. }
  744. }
  745. .pos-order-goods .goods .picTxt .pictrue {
  746. width: 136rpx;
  747. height: 136rpx;
  748. }
  749. .pos-order-goods .goods .picTxt .pictrue image {
  750. width: 100%;
  751. height: 100%;
  752. border-radius: 16rpx;
  753. }
  754. .pos-order-goods .goods .picTxt .text {
  755. flex: 1;
  756. min-width: 0;
  757. padding-left: 20rpx;
  758. }
  759. .pos-order-goods .goods .picTxt .text .info {
  760. font-size: 28rpx;
  761. line-height: 40rpx;
  762. color: #333333;
  763. }
  764. .pos-order-goods .goods .picTxt .text .info .label {
  765. color: #ff4c3c;
  766. }
  767. .pos-order-goods .goods .picTxt .text .attr {
  768. margin-top: 12rpx;
  769. overflow: hidden;
  770. white-space: nowrap;
  771. text-overflow: ellipsis;
  772. font-size: 24rpx;
  773. line-height: 34rpx;
  774. color: #999999;
  775. }
  776. .pos-order-goods .goods .money {
  777. padding-left: 16rpx;
  778. text-align: right;
  779. font-size: 28upx;
  780. }
  781. .pos-order-goods .goods .money .info {
  782. margin-top: 18rpx;
  783. font-size: 24rpx;
  784. }
  785. .pos-order-goods .goods .money .x-money {
  786. color: #282828;
  787. }
  788. .pos-order-goods .goods .money .num {
  789. margin-top: 10rpx;
  790. font-size: 24rpx;
  791. line-height: 34rpx;
  792. color: #999999;
  793. }
  794. .pos-order-goods .goods .money .y-money {
  795. color: #999;
  796. text-decoration: line-through;
  797. }
  798. .public-total {
  799. font-size: 28upx;
  800. color: #282828;
  801. border-top: 1px solid #eee;
  802. height: 92upx;
  803. line-height: 92upx;
  804. text-align: right;
  805. padding: 0 30upx;
  806. background-color: #fff;
  807. }
  808. .public-total .money {
  809. color: #ff4c3c;
  810. }
  811. .mask {
  812. z-index: 900;
  813. }
  814. .filter-popup {
  815. position: fixed;
  816. top: 0;
  817. left: 0;
  818. z-index: 900;
  819. width: 100%;
  820. border-radius: 0 0 32rpx 32rpx;
  821. background: #FFFFFF;
  822. transform: translateY(-100%);
  823. transition: transform 0.3s;
  824. &.on {
  825. transform: translateY(0);
  826. }
  827. .search-box {
  828. padding: 10rpx 32rpx;
  829. }
  830. .search {
  831. height: 58rpx;
  832. padding: 0 32rpx;
  833. border-radius: 29rpx;
  834. background: #F5F5F5;
  835. }
  836. .iconfont {
  837. font-size: 28rpx;
  838. color: #999999;
  839. }
  840. .input {
  841. flex: 1;
  842. height: 58rpx;
  843. padding-left: 16rpx;
  844. font-size: 24rpx;
  845. }
  846. .content {
  847. padding: 32rpx 30rpx 58rpx;
  848. }
  849. .item {
  850. margin-top: 36rpx;
  851. &:first-child {
  852. margin-top: 0;
  853. }
  854. }
  855. .title {
  856. font-size: 28rpx;
  857. line-height: 40rpx;
  858. color: #333333;
  859. }
  860. .list {
  861. padding: 0;
  862. margin-right: -24rpx;
  863. }
  864. .cell {
  865. width: 154rpx;
  866. height: 56rpx;
  867. border: 1rpx solid #F5F5F5;
  868. border-radius: 28rpx;
  869. margin: 24rpx 24rpx 0 0;
  870. background: #F5F5F5;
  871. text-align: center;
  872. font-size: 24rpx;
  873. line-height: 54rpx;
  874. color: #333333;
  875. &.on {
  876. border-color: #2A7EFB;
  877. background: #E9F2FE;
  878. color: #2A7EFB;
  879. }
  880. }
  881. }
  882. </style>