order.vue 88 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407
  1. <template>
  2. <app-layout>
  3. <view v-if="!search" class="tab-info">
  4. <view class='main-center tab'>
  5. <view @click="tabStatus(1)" :class="['tab-item','tab-left',`${status==1?'active': ''}`]">订单列表</view>
  6. <view @click="tabStatus(2)" :class="['tab-item','tab-right',`${status==2?'active': ''}`]">售后订单</view>
  7. </view>
  8. </view>
  9. <view v-if="search" class="search-item main-between cross-center">
  10. <view class="search-input">
  11. <image class="search-icon" src='/static/image/icon/icon-search.png'></image>
  12. <input :focus="!msg" @confirm='searchMethod' confirm-type='search' v-model='keyword' placeholder-style='color:#999999;font-size:13px;' @blur="getFocus=false" @focus="getFocus=true" placeholder='请输入订单号/商品名称/收货人姓名搜索'></input>
  13. <image v-if="getFocus && keyword.length > 0" @click="clearSearch" class="search-clear" src="../image/clear.png"></image>
  14. </view>
  15. <view @click="cancelSeacrch">取消</view>
  16. </view>
  17. <view v-if="!searchResult && search && list.length == 0" class="search-history">
  18. <view v-if="candidate.length != 0" class='main-between search-title'>
  19. <view>历史搜索</view>
  20. <view @click="clear">
  21. <image class="delete-icon" src="/static/image/icon/delete.png"></image>
  22. </view>
  23. </view>
  24. <view class='flex-wrap candidate-list'>
  25. <view @click="keywordSearch(item)" class="keyword-item box-grow-0" v-for="item in candidate" :key="item">
  26. <text class="t-omit">{{item}}</text>
  27. </view>
  28. </view>
  29. </view>
  30. <view v-if="!search" class="search-area main-between cross-center">
  31. <view class="search main-center" @click="toSearch">
  32. <image class="icon-search" src="/static/image/icon/icon-search.png"></image>
  33. <text>搜索</text>
  34. </view>
  35. <view class="choose" @click='toTime'>
  36. <text v-if="date_start == ''">汇总</text>
  37. <text v-else-if="date_start == today && date_end == today+' 23:59:59'">今日</text>
  38. <text v-else-if="date_start == yesterday && date_end == yesterday+' 23:59:59'">昨日</text>
  39. <text v-else-if="date_start == weekday && date_end == today+' 23:59:59'">7日</text>
  40. <text v-else>自定义</text>
  41. <image src='./../image/open.png'></image>
  42. </view>
  43. </view>
  44. <view v-if="!search && status==1" class="main-between navs-info">
  45. <view @click="tab(-1)" class="box-grow-1 main-center cross-center navs">
  46. <text :class="[`${_num==-1?'active':'nav-text'}`]">全部</text>
  47. </view>
  48. <view @click="tab(0)" class="box-grow-1 main-center cross-center navs">
  49. <text :class="[`${_num==0?'active':'nav-text'}`]">待付款</text>
  50. </view>
  51. <view @click="tab(1)" class="box-grow-1 main-center cross-center navs">
  52. <text :class="[`${_num==1?'active':'nav-text'}`]">待发货</text>
  53. </view>
  54. <view @click="show=!show" v-if="active" class="box-grow-1 main-center navs more-navs">
  55. <text :class="[`${_num==active.value?'active':'nav-text'}`]">{{active.name}}</text>
  56. <image src="./../image/more-active.png"></image>
  57. </view>
  58. <view @click="show=!show" v-if="!active" class="box-grow-1 main-center navs more-navs">
  59. <text class="nav-text">更多状态</text>
  60. <image src="./../image/more.png"></image>
  61. </view>
  62. </view>
  63. <view v-if="!search && status==2" class="main-between navs-info">
  64. <view @click="tab(-1)" class="box-grow-1 main-center cross-center navs">
  65. <text :class="[`${_num==-1?'active':'nav-text'}`]">全部</text>
  66. </view>
  67. <view @click="tab(0)" class="box-grow-1 main-center cross-center navs">
  68. <text :class="[`${_num==0?'active':'nav-text'}`]">待审核</text>
  69. </view>
  70. <view @click="tab(1)" class="box-grow-1 main-center cross-center navs">
  71. <text :class="[`${_num==1?'active':'nav-text'}`]">待买家处理</text>
  72. </view>
  73. <view @click="tab(2)" class="box-grow-1 main-center cross-center navs">
  74. <text :class="[`${_num==2?'active':'nav-text'}`]">待卖家处理</text>
  75. </view>
  76. </view>
  77. <view v-if="!search && show" class="more-menu">
  78. <view @click="chooseItem(item.value)" v-for="item in menu" :key="item.value">{{item.name}}</view>
  79. </view>
  80. <view v-if="!search" class="search-palce"></view>
  81. <!-- 订单信息 -->
  82. <view>
  83. <view class="order-item" v-for="item in list" :key="item.id">
  84. <view @click="toDetail(item.order_id,status)">
  85. <view class="main-between order-info" v-if="status ==1">
  86. <view style="width: 80%">
  87. <view>订单号 {{item.order_no}}</view>
  88. <view v-if="item.seller_remark && item.seller_remark != null" class="remark-info">商家备注 {{item.seller_remark}}</view>
  89. </view>
  90. <view v-if="item.is_sale == 1">已完成</view>
  91. <view v-else-if="item.cancel_status == 2">待退款</view>
  92. <view v-else-if="item.is_send == 0 && item.is_pay == 1 && item.detailExpress && item.detailExpress.length > 0">部分发货</view>
  93. <view v-else-if="item.is_pay == 0">待付款</view>
  94. <view v-else-if="item.is_send == 0">待发货</view>
  95. <view v-else-if="item.is_confirm == 0">待收货</view>
  96. <view v-else-if="item.is_confirm == 1">已收货</view>
  97. </view>
  98. <view class="main-between order-info" v-if="status ==2">
  99. <view>订单号 {{item.order_no}}</view>
  100. <view class="status-txt">{{item.refund_status_cn}}</view>
  101. </view>
  102. <view class="dir-left-nowrap cross-center order-user" v-if="status ==1">
  103. <view>{{item.name ? item.name : item.nickname}}</view>
  104. <view>{{item.mobile}}</view>
  105. <view v-if="item.mobile" @click.stop='toCall(item.mobile)' class="to-tel dir-left-nowrap cross-center">
  106. <image src='./../image/tel.png'></image>
  107. <text>联系收货人</text>
  108. </view>
  109. </view>
  110. <view class="dir-left-nowrap cross-center order-user" v-if="status ==2">
  111. <view>{{item.order.name}}</view>
  112. <view>{{item.order.mobile}}</view>
  113. <view v-if="item.order.mobile" @click.stop='toCall(item.order.mobile)' class="to-tel dir-left-nowrap cross-center">
  114. <image src='./../image/tel.png'></image>
  115. <text>联系收货人</text>
  116. </view>
  117. </view>
  118. <view v-for="goods in item.detail" class="goods" :key="goods.id">
  119. <image class="goods-img" :src='goods.goods_info.goods_attr.pic_url ? goods.goods_info.goods_attr.pic_url : goods.goods_info.goods_attr.cover_pic'></image>
  120. <view v-if="item.type == 1" class="goods-status">退货退款</view>
  121. <view v-if="item.type == 2" class="goods-status">换货</view>
  122. <view class='t-omit-two goods-name'>{{goods.goods_info.goods_attr.name}}</view>
  123. <view class="goods-attr t-omit">
  124. <text v-for="attr in goods.attr_list" :key="attr.attr_id">{{attr.attr_group_name}}:{{attr.attr_name}}</text>
  125. </view>
  126. <view class="goods-num">x{{goods.num}}</view>
  127. <view class="goods-price">¥{{goods.total_price}}</view>
  128. </view>
  129. <view class="dir-right-nowrap">
  130. <view class="price-info">
  131. <text class="other">合计</text>
  132. <text v-if="status == 1">¥{{item.total_pay_price}}</text>
  133. <text v-if="status == 2">¥{{item.refund_price}}</text>
  134. <text v-if="status == 1" class="other">(含运费¥{{item.express_price}})</text>
  135. </view>
  136. </view>
  137. </view>
  138. <view class="dir-right-nowrap menu-button">
  139. <view @click.stop="toAgreeCancel(item)" v-if="item.cancel_status == 2" class="handle-btn other">同意</view>
  140. <view @click.stop="beNotRefund(item)" v-if="item.cancel_status == 2" class="handle-btn">拒绝</view>
  141. <view @click.stop="toChange(item)" v-if="item.cancel_status == 0 && item.is_pay == 0 && item.is_send == 0" class="handle-btn other">修改价格</view>
  142. <view @click.stop="toConfirm(item)" v-if="item.cancel_status == 0 && item.is_confirm == 0 && item.is_send == 1 && item.is_confirm_show == 1" class="handle-btn other">确认收货</view>
  143. <view @click.stop="toExpress(item,2)" v-if="item.cancel_status == 0 && item.is_send == 1 && item.is_confirm == 0 && item.express_no" class="handle-btn other">修改物流信息</view>
  144. <view @click="toExpressInfo(item)" v-if="item.cancel_status == 0 && item.is_send == 1 && item.is_confirm == 0 && item.detailExpress.length > 0" class="handle-btn other">查看物流</view>
  145. <view @click.stop="toSend(item)" v-if="item.address && item.cancel_status == 0 && item.is_send == 0 && item.is_pay == 1" class="handle-btn other">发货</view>
  146. <view @click.stop="toSend(item)" v-else-if="item.is_send == 0 && item.is_pay == 1 && item.detailExpress && item.detailExpress.length > 0" class="handle-btn other">发货</view>
  147. <view @click.stop="toSend(item)" v-else-if="item.address && item.cancel_status == 0 && item.is_send == 0 && item.pay_type == 2" class="handle-btn other">发货</view>
  148. <view @click="toChangeAddress(item)" v-if="item.address && item.cancel_status == 0 && item.is_send == 0 && item.is_pay == 1" class="handle-btn">修改地址</view>
  149. <view @click.stop="toRefundOrder(item.order_no)" v-if="item.have_refund == 1 && status == 1 && item.is_sale == 0" class="handle-btn">售后中</view>
  150. <view @click.stop="toCancelorder(item)" v-if="item.sign != 'gift' && item.is_send == 0 && item.cancel_status == 0" class="handle-btn">取消订单</view>
  151. <view @click.stop="toConfirm(item)" v-if="item.status == 2 && item.is_send == 1 && item.is_confirm == 0 && status == 2 && item.type == 1" class="handle-btn other">确认收货</view>
  152. <view @click.stop="toRefund(item)" v-if="item.status == 2 && item.is_send == 1 && item.is_confirm == 1 && item.is_refund == 0 && status == 2 && item.type == 1" class="handle-btn other">退款</view>
  153. <view @click.stop="toSend(item)" data-send="1" v-if="item.is_confirm == 0 && status == 2 && item.is_send == 1 && item.type == 2" class="handle-btn other">发货</view>
  154. <view @click.stop="refundHandle(2,item,1)" v-if="item.status == 2 && status == 2 && item.status_cn != '换货 卖家已发货' && item.status_cn != '退货退款 卖家已退款'" :class="['handle-btn', `${_num == 1 || _num == -1?'other':''}`]">取消售后</view>
  155. <view @click="toExpressInfo(item)" v-if="status == 2 && item.detailExpress.length > 0 && item.status == 2" class="handle-btn">物流详情</view>
  156. <view @click.stop="refundHandle(1,item)" v-if="item.status == 1 && status == 2" class="handle-btn other">同意</view>
  157. <view @click.stop="refundHandle(2,item)" v-if="item.status == 1 && status == 2" class="handle-btn">拒绝</view>
  158. <view @click.stop="lookAbout(item)" v-if=" status == 2" class="handle-btn">售后理由</view>
  159. <view @click.stop="makeRemark(item)" class="handle-btn">备注</view>
  160. </view>
  161. </view>
  162. </view>
  163. <view class='no-tip' v-if="list.length == 0">
  164. <image :src='adminImg.no_order'></image>
  165. <view>没有任何订单哦~</view>
  166. </view>
  167. <view :class="['bottom-place', `${iphone_x? 'iphone_x':''}`]"></view>
  168. <view :class="['main-between bottom-tab', `${iphone_x? 'iphone_x':''}`]">
  169. <view class="box-grow-1 tab-nav-item" @click="toRedirect('/pages/app_admin/index/index')">
  170. <image class="tab-icon" src="./../image/index.png"></image>
  171. <view>首页</view>
  172. </view>
  173. <view class="box-grow-1 tab-nav-item active" @click="reload">
  174. <image class="tab-icon" src="./../image/order-active.png"></image>
  175. <view>订单</view>
  176. </view>
  177. <view class="box-grow-1 tab-nav-item" @click="toRedirect('/pages/app_admin/goods/goods')">
  178. <image class="tab-icon" src="./../image/goods.png"></image>
  179. <view>商品</view>
  180. </view>
  181. <view class="box-grow-1 tab-nav-item" @click="toRedirect('/pages/app_admin/setting/setting')">
  182. <image class="tab-icon" src="./../image/setting.png"></image>
  183. <view>设置</view>
  184. </view>
  185. </view>
  186. <view @touchmove.stop.prevent="" class="bg cross-center" v-if="chooseTime || isRefund || noRefund || changePrice || cancelOrder || callPhone || isSend || notRefund || isReason || openAddress || noAddress || beRemark || confirmOrder">
  187. <!-- 选时间 -->
  188. <view class="dialog" v-if="chooseTime">
  189. <view class="dialog-title">筛选时间</view>
  190. <view class="flex-wrap main-between time-area">
  191. <view @click="change(0)" data-time='0' :class="[`${time == 0 ? 'active':'' }`, 'dialog-choose-item']">汇总</view>
  192. <view @click="change(1)" data-time='1' :class="[`${time == 1 ? 'active':'' }`, 'dialog-choose-item']">今日</view>
  193. <view @click="change(2)" data-time='2' :class="[`${time == 2 ? 'active':'' }`, 'dialog-choose-item']">昨日</view>
  194. <view @click="change(3)" data-time='3' :class="[`${time == 3 ? 'active':'' }`, 'dialog-choose-item']">7日</view>
  195. <view @click="change(4)" data-time='4' :class="[`${time == 4 ? 'active':'' }`, 'dialog-choose-item']">自定义</view>
  196. <view class="dialog-choose-item" style='border: 0'></view>
  197. </view>
  198. <view class="choose-time" v-if="custom">
  199. <view class="time-title">起始时间</view>
  200. <view class="year-1">年</view>
  201. <view class="month-1">月</view>
  202. <view class="day-1">日</view>
  203. <view class="year-2">年</view>
  204. <view class="month-2">月</view>
  205. <view class="day-2">日</view>
  206. <picker-view :value="start" class="picker-view" @change="startChange">
  207. <picker-view-column>
  208. <view v-for="(item,idx) in years" :key="item"
  209. :class="[{
  210. 'sure-color': startVal[0] === idx,
  211. 'cardinal-color': startVal[0] === idx + 1 || startVal[0] === idx - 1,
  212. 'even-color': startVal[0] === idx + 2 || startVal[0] === idx - 2,
  213. }]">{{item}}</view>
  214. </picker-view-column>
  215. <picker-view-column>
  216. <view v-for="(item,idx) in months" :key="item"
  217. :class="[{
  218. 'sure-color': startVal[1] === idx,
  219. 'cardinal-color': startVal[1] === idx + 1 || startVal[1] === idx - 1,
  220. 'even-color': startVal[1] === idx + 2 || startVal[1] === idx - 2,
  221. }]">{{item}}</view>
  222. </picker-view-column>
  223. <picker-view-column>
  224. <view v-for="(item,idx) in days" :key="item"
  225. :class="[{
  226. 'sure-color': startVal[2] === idx,
  227. 'cardinal-color': startVal[2] === idx + 1 || startVal[2] === idx - 1,
  228. 'even-color': startVal[2] === idx + 2 || startVal[2] === idx - 2,
  229. }]">{{item}}</view>
  230. </picker-view-column>
  231. </picker-view>
  232. <view class="time-title">结束时间时间</view>
  233. <picker-view :value="end" indicator-style="height: 36px;color: #446dfd;font-size:14px;"class="picker-view" @change="endChange">
  234. <picker-view-column>
  235. <view v-for="(item,idx) in years" :key="item"
  236. :class="[{
  237. 'sure-color': endVal[0] === idx,
  238. 'cardinal-color': endVal[0] === idx + 1 || endVal[0] === idx - 1,
  239. 'even-color': endVal[0] === idx + 2 || endVal[0] === idx - 2,
  240. }]">{{item}}</view>
  241. </picker-view-column>
  242. <picker-view-column>
  243. <view v-for="(item,idx) in months" :key="item"
  244. :class="[{
  245. 'sure-color': endVal[1] === idx,
  246. 'cardinal-color': endVal[1] === idx + 1 || endVal[1] === idx - 1,
  247. 'even-color': endVal[1] === idx + 2 || endVal[1] === idx - 2,
  248. }]">{{item}}</view>
  249. </picker-view-column>
  250. <picker-view-column>
  251. <view v-for="(item,idx) in days" :key="item"
  252. :class="[{
  253. 'sure-color': endVal[2] === idx,
  254. 'cardinal-color': endVal[2] === idx + 1 || endVal[2] === idx - 1,
  255. 'even-color': endVal[2] === idx + 2 || endVal[2] === idx - 2,
  256. }]">{{item}}</view>
  257. </picker-view-column>
  258. </picker-view>
  259. </view>
  260. <view class="main-center btn-area">
  261. <view class="submit-btn" @click='cancel'>取消</view>
  262. <view class="line"></view>
  263. <view class="submit-btn be-submit" @click='toChoose'>确认</view>
  264. </view>
  265. </view>
  266. <!-- 退款 -->
  267. <view class="dialog" v-if="isRefund">
  268. <view class="dialog-title">退款</view>
  269. <view class="main-center refund-pay" v-if="status == 1">¥{{detail.total_pay_price}}</view>
  270. <view class="main-center cross-center refund-pay" v-if="status == 2">¥
  271. <input class="refund-price" type='digit' v-model="refund_price"></input>
  272. </view>
  273. <view class="main-center refund-tip">是否确认退款给买家</view>
  274. <view class="main-center btn-area">
  275. <view class="submit-btn" @click='cancel'>取消</view>
  276. <view class="line"></view>
  277. <view class="submit-btn be-submit" v-if="status == 1" @click='cancelSubmit'>确认</view>
  278. <view class="submit-btn be-submit" v-if="status == 2" @click='agree'>确认</view>
  279. </view>
  280. </view>
  281. <view class="dialog-bg" :style="{'display': `${noRefund || notRefund ? 'block' : 'none'}`}"></view>
  282. <!-- 拒绝退款 -->
  283. <view class="dialog" v-if="noRefund || notRefund">
  284. <view v-if="noRefund" class="dialog-title">拒绝取消</view>
  285. <view v-if="notRefund" class="dialog-title">拒绝售后</view>
  286. <textarea fixed class="textarea" v-model="about" placeholder="请输入拒绝理由" placeholder-style="color:#999999;font-size:14px" auto-focus />
  287. <view class="main-center btn-area">
  288. <view class="submit-btn" @click='cancel'>取消</view>
  289. <view class="line"></view>
  290. <view v-if="noRefund" class="submit-btn be-submit" @click='noCancel'>确认</view>
  291. <view v-if="notRefund" class="submit-btn be-submit" @click='decline(0)'>确认</view>
  292. </view>
  293. </view>
  294. <!-- 备注 -->
  295. <view class="dialog" v-if="beRemark">
  296. <view class="dialog-title">备注</view>
  297. <view class="remark-input">
  298. <input maxlength="15" v-model="remark" placeholder="请输入备注内容(限15个字符)">
  299. </view>
  300. <view class="main-center btn-area">
  301. <view class="submit-btn" @click='cancel'>取消</view>
  302. <view class="line"></view>
  303. <view class="submit-btn be-submit" @click='toRemark'>确认</view>
  304. </view>
  305. </view>
  306. <!-- 改价 -->
  307. <view class="dialog" v-if="changePrice">
  308. <view v-if="changePrice" class="dialog-title">修改价格</view>
  309. <view v-if="changePrice" class="dir-left-nowrap change-price-item">
  310. <view class="label">商品总价</view>
  311. <view class="money">¥</view>
  312. <input fixed type="digit" class="price-input" @input="priceInput" :focus="changePrice?true:false" v-model='price'></input>
  313. </view>
  314. <view v-if="changePrice" class="dir-left-nowrap change-price-item">
  315. <view class="label">运费</view>
  316. <view class="money">¥</view>
  317. <input fixed type="digit" class="price-input" @input="expressInput" focus v-model='express'></input>
  318. </view>
  319. <view v-if="changePrice" class="dir-left-nowrap change-price-item">
  320. <view class="label">合计</view>
  321. <view class="total-money">{{total}}</view>
  322. </view>
  323. <view v-if="changePrice" class="main-center btn-area">
  324. <view class="submit-btn" @click='cancel'>取消</view>
  325. <view class="line"></view>
  326. <view class="submit-btn be-submit" @click='submitChange'>确认</view>
  327. </view>
  328. </view>
  329. <!-- 取消订单 -->
  330. <view class="dialog" v-if="cancelOrder">
  331. <view class="main-center cancel-tip">确定取消该订单?</view>
  332. <view class="main-center btn-area">
  333. <view class="submit-btn" @click='cancel'>取消</view>
  334. <view class="line"></view>
  335. <view class="submit-btn be-submit" @click='cancelSubmit'>确认</view>
  336. </view>
  337. </view>
  338. <!-- 售后确认收货 -->
  339. <view class="dialog" v-if="confirmOrder">
  340. <view class="main-center cancel-tip">是否确认收货?</view>
  341. <view class="main-center btn-area">
  342. <view class="submit-btn" @click='cancel'>取消</view>
  343. <view class="line"></view>
  344. <view class="submit-btn be-submit" v-if="status == 1" @click='beOrderConfirm'>确认</view>
  345. <view class="submit-btn be-submit" v-else @click='beConfirm'>确认</view>
  346. </view>
  347. </view>
  348. <!-- 打电话 -->
  349. <view class="dialog" v-if="callPhone">
  350. <view class="main-center cancel-tip">{{mobile}}</view>
  351. <view class="main-center btn-area">
  352. <view class="submit-btn" @click='cancel'>取消</view>
  353. <view class="line"></view>
  354. <view class="submit-btn be-submit" @click='call'>确认</view>
  355. </view>
  356. </view>
  357. <!-- 提示 -->
  358. <view class="dialog" v-if="noAddress">
  359. <view class="main-center dir-top-nowrap cancel-tip" style="text-align: center">
  360. <view>您还没有退货地址</view>
  361. <view>请先设置</view>
  362. </view>
  363. <view class="main-center btn-area">
  364. <view class="submit-btn" @click='noAddress=false'>取消</view>
  365. <view class="line"></view>
  366. <view class="submit-btn be-submit" @click='toRefundAdd'>去设置</view>
  367. </view>
  368. </view>
  369. <!-- 理由 -->
  370. <view class="dialog" v-if="isReason">
  371. <view class="dialog-title">售后理由</view>
  372. <view class="reason">
  373. <view class="reason-title">申请原因</view>
  374. <view class="reason-content">{{detail.remark}}</view>
  375. <view v-if="detail.pic_list.length > 0" class="reason-title">图片</view>
  376. <view class="dir-left-wrap reason-img" v-if="detail.pic_list.length > 0">
  377. <image @click='look(item)' v-for="item in detail.pic_list" :key="item" :src="item"></image>
  378. </view>
  379. </view>
  380. <view class="main-center btn-area other-btn-area">
  381. <view class="submit-btn be-submit" @click='cancel'>确认</view>
  382. </view>
  383. </view>
  384. <!-- 选地址 -->
  385. <view class="dialog" v-if="openAddress">
  386. <view class="dialog-title">选择退货地址</view>
  387. <view class="add-list">
  388. <view class="add-item" v-for="item in address" :key="item.id">
  389. <image v-if="item.id == addressId" @click='chooseAddress(item.id)' src="./../image/active.png"></image>
  390. <image v-else @click='chooseAddress(item.id)' src="/static/image/icon/form-er.png"></image>
  391. <view @click='chooseAddress(item.id)' class="add-info">
  392. <view class="main-between">
  393. <view class="add-name">{{item.name}}</view>
  394. <view>{{item.mobile}}</view>
  395. </view>
  396. <view>{{item.address}}{{item.address_detail}}</view>
  397. </view>
  398. </view>
  399. </view>
  400. <view class="main-center btn-area other-btn-area">
  401. <view class="submit-btn" @click='cancel'>取消</view>
  402. <view class="line"></view>
  403. <view class="submit-btn be-submit" @click='decline(1)'>确认</view>
  404. </view>
  405. </view>
  406. <!-- 选择配送员 -->
  407. <view class="dialog" v-if="isSend && detail.send_type == 2">
  408. <view class="dialog-title">选择配送员</view>
  409. <view class="add-list">
  410. <view class="add-item delivery-item" v-for="item in cityList" :key="item.id">
  411. <view @click='chooseDelivery(item)' class="add-info">
  412. <view class="main-between">
  413. <view class="add-name">{{item.name}}</view>
  414. <image style="left: 0" v-if="item.id == deliveryId" @click='chooseDelivery(item)' src="./../image/active.png"></image>
  415. <image style="left: 0" v-else @click='chooseDelivery(item)' src="/static/image/icon/form-er.png"></image>
  416. </view>
  417. </view>
  418. </view>
  419. </view>
  420. <view class="main-center btn-area other-btn-area">
  421. <view class="submit-btn" @click='cancel'>取消</view>
  422. <view class="line"></view>
  423. <view class="submit-btn be-submit" @click='toSendType'>确认</view>
  424. </view>
  425. </view>
  426. </view>
  427. </app-layout>
  428. </template>
  429. <script>
  430. import { mapState } from "vuex";
  431. const date = new Date()
  432. const years = []
  433. const months = []
  434. const days = []
  435. for (let i = 2015; i <= date.getFullYear(); i++) {
  436. years.push(i)
  437. }
  438. for (let i = 1; i <= 12; i++) {
  439. months.push(i)
  440. }
  441. for (let i = 1; i <= 31; i++) {
  442. days.push(i)
  443. }
  444. export default {
  445. data() {
  446. return {
  447. cancelRefund: false,
  448. time_start: [],
  449. noAddress: false,
  450. years: years,
  451. months: months,
  452. days: days,
  453. status: '1',
  454. _num: '-1',
  455. getFocus: false,
  456. more_list: false,
  457. cityList: [],
  458. deliveryId: '0',
  459. delivery: '',
  460. addressId: '0',
  461. refund_price: 0,
  462. page: 1,
  463. notRefund: false,
  464. openAddress: false,
  465. isReason: false,
  466. menu: [
  467. {
  468. name: '待收货',
  469. value: '2'
  470. },
  471. {
  472. name: '待退款',
  473. value: '4'
  474. },
  475. {
  476. name: '已收货',
  477. value: '9'
  478. },
  479. {
  480. name: '已完成',
  481. value: '3'
  482. }
  483. ],
  484. active: null,
  485. show: false,
  486. start: [],
  487. end: [],
  488. startVal: [],
  489. endVal: [],
  490. search: false,
  491. keyword: '',
  492. list: [],
  493. candidate: [],
  494. date_start: '',
  495. date_end: '',
  496. time: 0,
  497. inSearch: false,
  498. address: [],
  499. today: '',
  500. yesterday: '',
  501. weekday: '',
  502. chooseTime: false,
  503. isRefund: false,
  504. noRefund: false,
  505. confirmOrder: false,
  506. beRemark: false,
  507. remark: null,
  508. cancelOrder: false,
  509. detail: {},
  510. changePrice: false,
  511. callPhone: false,
  512. custom: false,
  513. mobile: '',
  514. isSend: false,
  515. sendType: 0,
  516. price: 0,
  517. express: 0,
  518. msg: false,
  519. searchResult: false,
  520. total: 0,
  521. about: '',
  522. iphone_x: false,
  523. loading: false
  524. }
  525. },
  526. computed: {
  527. ...mapState({
  528. theme: state => state.mallConfig.theme,
  529. userInfo: state => state.user.info,
  530. adminImg: state => state.mallConfig.__wxapp_img.app_admin,
  531. })
  532. },
  533. methods: {
  534. clearSearch() {
  535. this.keyword = '';
  536. },
  537. reload() {
  538. uni.showLoading({
  539. title: '加载中...'
  540. });
  541. this.page = 1;
  542. this.list = [];
  543. this.getList();
  544. },
  545. makeRemark(data) {
  546. this.beRemark = true;
  547. this.detail = data;
  548. if(data.seller_remark) {
  549. this.remark = data.seller_remark
  550. }
  551. },
  552. toRemark() {
  553. let that = this;
  554. that.$request({
  555. url: that.$api.app_admin.sellerRemark,
  556. method: 'post',
  557. data: {
  558. order_id: that.detail.id,
  559. seller_remark: that.remark
  560. }
  561. }).then(response=>{
  562. if(response.code == 0) {
  563. that.detail.seller_remark = that.remark;
  564. that.cancel();
  565. }else {
  566. uni.showToast({
  567. title: response.msg,
  568. icon: 'none',
  569. duration: 1000
  570. });
  571. }
  572. }).catch(response => {
  573. });
  574. },
  575. toDetail(order_id,status) {
  576. uni.navigateTo({
  577. url: '/pages/app_admin/order-detail/order-detail?id='+order_id+'&status='+status
  578. })
  579. },
  580. toRefundAdd() {
  581. this.noAddress = false;
  582. uni.navigateTo({
  583. url: `/pages/address/address?manual_btn_bg=#446dfd&is_hide_default_btn=1&is_refund_address=1`,
  584. })
  585. },
  586. toRedirect(url) {
  587. uni.redirectTo({
  588. url: url
  589. })
  590. },
  591. toChangeAddress(item) {
  592. uni.navigateTo({
  593. url: '/pages/app_admin/change-add/change-add?order_no='+item.order_no
  594. })
  595. },
  596. toExpressInfo(item) {
  597. if(item.detail.length == 1 && item.detailExpress[0].express_no) {
  598. uni.navigateTo({
  599. url: '/pages/app_admin/express/express?id='+item.id+'&express='+item.detailExpress[0].express+'&express_no='+item.detailExpress[0].express_no+'&customer_name='+item.detailExpress[0].customer_name
  600. })
  601. }else {
  602. uni.navigateTo({
  603. url: '/pages/order/express-list/express-list?order_id='+item.id
  604. })
  605. }
  606. },
  607. // 取消
  608. cancel() {
  609. this.about = '';
  610. this.date_start = '';
  611. this.time = 0;
  612. this.date_end = '';
  613. this.isRefund = false;
  614. this.chooseTime = false;
  615. this.noRefund = false;
  616. this.changePrice = false;
  617. this.cancelOrder = false;
  618. this.custom = false;
  619. this.callPhone = false;
  620. this.isSend = false;
  621. this.notRefund = false;
  622. this.openAddress = false;
  623. this.isReason = false;
  624. this.confirmOrder = false;
  625. this.addressId = 0;
  626. this.beRemark = false;
  627. this.confirmOrder = false;
  628. this.remark = null;
  629. },
  630. // 切换类别
  631. tabStatus(e) {
  632. let that = this;
  633. that.status = e;
  634. that.active = null;
  635. that.list = [];
  636. that.date_start = '';
  637. that.date_end = '';
  638. that.keyword = '';
  639. that.show = false;
  640. that.time = 0;
  641. that._num = '-1';
  642. that.page = 1;
  643. uni.showLoading({
  644. title: '加载中...'
  645. });
  646. that.getList();
  647. },
  648. toCall(e) {
  649. this.mobile = e;
  650. this.callPhone = !this.callPhone;
  651. },
  652. call() {
  653. uni.makePhoneCall({
  654. phoneNumber: this.mobile
  655. })
  656. this.callPhone = !this.callPhone;
  657. },
  658. toSearch() {
  659. this.search = true;
  660. this.list = [];
  661. this.searchResult = false;
  662. this.candidate = uni.getStorageSync('keyword');
  663. this.inSearch = false;
  664. },
  665. keywordSearch(e) {
  666. this.keyword = e;
  667. this.searchResult = true;
  668. uni.showLoading({
  669. title: '加载中...'
  670. });
  671. this.page = 1;
  672. this.getList();
  673. },
  674. beOrderConfirm() {
  675. let that = this;
  676. that.$request({
  677. url: that.$api.app_admin.confirm,
  678. data: {
  679. order_id: that.detail.id
  680. },
  681. method: 'post'
  682. }).then(response=>{
  683. that.$hideLoading();
  684. if(response.code == 0) {
  685. uni.showToast({
  686. title: response.msg,
  687. duration: 1000,
  688. type: 'success',
  689. mask: false
  690. });
  691. that.cancel();
  692. setTimeout(v=>{
  693. that.page = 1;
  694. uni.showLoading({
  695. title: '加载中...'
  696. });
  697. that.getList();
  698. },1000)
  699. }else {
  700. uni.showToast({
  701. title: response.msg,
  702. icon: 'none',
  703. duration: 1000
  704. });
  705. }
  706. }).catch(response => {
  707. that.$hideLoading();
  708. });
  709. },
  710. beConfirm(item) {
  711. let that = this;
  712. that.$request({
  713. url: that.$api.app_admin.shou_huo,
  714. data: {
  715. refund_order_id: that.detail.id
  716. },
  717. method: 'post'
  718. }).then(response=>{
  719. that.$hideLoading();
  720. if(response.code == 0) {
  721. that.cancel();
  722. that.page = 1;
  723. uni.showLoading({
  724. title: '加载中...'
  725. });
  726. that.getList();
  727. }else {
  728. uni.showToast({
  729. title: response.msg,
  730. icon: 'none',
  731. duration: 1000
  732. });
  733. }
  734. }).catch(response => {
  735. that.$hideLoading();
  736. });
  737. },
  738. // 清除搜索记录
  739. clear() {
  740. let that = this;
  741. uni.removeStorage({
  742. key: 'keyword',
  743. success(res) {
  744. that.candidate = [];
  745. uni.showToast({
  746. title: '清理成功',
  747. duration: 1000,
  748. type: 'success',
  749. mask: false
  750. });
  751. }
  752. });
  753. },
  754. // 搜索
  755. searchMethod() {
  756. var value = uni.getStorageSync('keyword');
  757. if (this.keyword.length == 0) {
  758. return
  759. } else if (value.length > 0) {
  760. value.unshift(this.keyword)
  761. } else {
  762. value = [this.keyword]
  763. }
  764. uni.showLoading({
  765. title: '加载中...'
  766. });
  767. this.page = 1;
  768. this.getList();
  769. value.forEach(function(row, index) {
  770. if (value[0] == value[index] && index > 0) {
  771. value.splice(index, 1)
  772. }
  773. })
  774. uni.setStorage({
  775. key: "keyword",
  776. data: value
  777. })
  778. this.inSearch = true;
  779. this.searchResult = true;
  780. },
  781. // 取消搜索
  782. cancelSeacrch() {
  783. uni.showLoading({
  784. title: '加载中...'
  785. });
  786. this.search = false;
  787. this.keyword = '';
  788. // this.list = [];
  789. this.page = 1;
  790. this.getList();
  791. },
  792. change(e) {
  793. let that = this;
  794. that.time = e;
  795. that.custom = false;
  796. if (that.time == 4) {
  797. that.custom = true;
  798. that.date_end = that.today;
  799. that.date_start = that.today + ' 00:00:00';
  800. }
  801. },
  802. // 确认选择时间
  803. toChoose() {
  804. let that = this;
  805. uni.showLoading({
  806. title: '加载中...'
  807. });
  808. if (that.time != 4) {
  809. that.date_start = '';
  810. that.date_end = that.today + ' 23:59:59';
  811. switch (that.time.toString()) {
  812. case '0':
  813. that.date_start = '';
  814. that.date_end = '';
  815. break;
  816. case '1':
  817. that.date_start = that.today;
  818. break;
  819. case '2':
  820. that.date_start = that.yesterday;
  821. that.date_end = that.yesterday + ' 23:59:59';
  822. break;
  823. case '3':
  824. that.date_start = that.weekday;
  825. break;
  826. }
  827. setTimeout(function() {
  828. that.page = 1;
  829. that.getList();
  830. that.chooseTime = false;
  831. }, 300)
  832. } else {
  833. let endTime = that.date_end.substring(0, 10)
  834. let startTime = that.date_start.substring(0, 10)
  835. let end = endTime.split("-");
  836. let start = startTime.split("-");
  837. if (+end[0] < +start[0]) {
  838. uni.showToast({
  839. title: '结束时间不应早于开始时间',
  840. type: 'none',
  841. duration: 1000
  842. })
  843. } else if (+end[0] == +start[0]) {
  844. if (+end[1] < +start[1]) {
  845. uni.showToast({
  846. title: '结束时间不应早于开始时间',
  847. type: 'none',
  848. duration: 1000
  849. })
  850. } else if (+end[1] == +start[1]) {
  851. if (+end[2] < +start[2]) {
  852. uni.showToast({
  853. title: '结束时间不应早于开始时间',
  854. type: 'none',
  855. duration: 1000
  856. })
  857. } else {
  858. that.page = 1;
  859. that.getList();
  860. that.chooseTime = false;
  861. }
  862. } else {
  863. that.page = 1;
  864. that.getList();
  865. that.chooseTime = false;
  866. }
  867. } else {
  868. that.page = 1;
  869. that.getList();
  870. that.chooseTime = false;
  871. }
  872. }
  873. },
  874. startChange: function(e) {
  875. const val = e.detail.value;
  876. this.startVal = e.detail.value;
  877. let years = this.years;
  878. let year = this.years[val[0]];
  879. let month = this.months[val[1]];
  880. let day = this.days[val[2]];
  881. if (month >= 1 && month <= 9) {
  882. month = "0" + month;
  883. }
  884. if (day >= 1 && day <= 9) {
  885. day = "0" + day;
  886. }
  887. this.date_start = year + '-' + month + '-' + day;
  888. },
  889. endChange: function(e) {
  890. const val = e.detail.value;
  891. this.endVal = e.detail.value;
  892. let year = this.years[val[0]];
  893. let month = this.months[val[1]];
  894. let day = this.days[val[2]];
  895. if (month >= 1 && month <= 9) {
  896. month = "0" + month;
  897. }
  898. if (day >= 1 && day <= 9) {
  899. day = "0" + day;
  900. }
  901. this.date_end = year + '-' + month + '-' + day + " 23:59:59";
  902. },
  903. // 打开时间筛选
  904. toTime() {
  905. let that = this;
  906. that.start = [];
  907. that.end = [];
  908. let startDay;
  909. let endDay;
  910. if (that.date_start) {
  911. startDay = that.date_start;
  912. } else {
  913. startDay = that.today;
  914. }
  915. if (that.date_end) {
  916. endDay = that.date_end;
  917. } else {
  918. endDay = that.today;
  919. }
  920. that.years.forEach(function(row, index) {
  921. if (startDay.substring(0, 4) == that.years[index]) {
  922. that.start[0] = +index
  923. }
  924. })
  925. that.months.forEach(function(row, index) {
  926. if (startDay.substring(5, 7) == that.months[index]) {
  927. that.start[1] = +index
  928. }
  929. })
  930. that.days.forEach(function(row, index) {
  931. if (startDay.substring(8, 10) == that.days[index]) {
  932. that.start[2] = +index
  933. }
  934. })
  935. that.startVal = that.start;
  936. if (that.date_end) {
  937. endDay = that.date_end
  938. }
  939. that.years.forEach(function(row, index) {
  940. if (endDay.substring(0, 4) == that.years[index]) {
  941. that.end[0] = +index
  942. }
  943. })
  944. that.months.forEach(function(row, index) {
  945. if (endDay.substring(5, 7) == that.months[index]) {
  946. that.end[1] = +index
  947. }
  948. })
  949. that.days.forEach(function(row, index) {
  950. if (endDay.substring(8, 10) == that.days[index]) {
  951. that.end[2] = +index
  952. }
  953. })
  954. that.endVal = that.end;
  955. that.chooseTime = !that.chooseTime;
  956. that.show = false;
  957. },
  958. // 选择更多状态
  959. chooseItem(e) {
  960. let that = this;
  961. uni.showLoading({
  962. title: '加载中...'
  963. });
  964. that._num = e;
  965. that.menu.forEach(function(row, index) {
  966. if (row.value == that._num) {
  967. that.active = row;
  968. }
  969. })
  970. that.show = !that.show;
  971. that.page = 1;
  972. that.list = [];
  973. that.getList();
  974. },
  975. // 切换状态
  976. tab(e) {
  977. this._num = e;
  978. this.show = false;
  979. this.active = null;
  980. this.list = [];
  981. this.date_start = '';
  982. this.date_end = '';
  983. this.keyword = '';
  984. this.page = 1;
  985. uni.showLoading({
  986. title: '加载中...'
  987. });
  988. this.getList();
  989. },
  990. getList() {
  991. let that = this;
  992. if(that.loading) {
  993. return false
  994. }
  995. that.loading = true;
  996. that.about = '';
  997. let url;
  998. if (this.status == 1) {
  999. url = that.$api.app_admin.order
  1000. } else if (this.status == 2) {
  1001. url = that.$api.app_admin.refund
  1002. }
  1003. that.$request({
  1004. url: url,
  1005. data: {
  1006. status: that._num,
  1007. date_end: that.date_end,
  1008. date_start: that.date_start,
  1009. page: that.page,
  1010. keyword: that.keyword
  1011. }
  1012. }).then(response=>{
  1013. that.$hideLoading();
  1014. uni.hideLoading();
  1015. that.loading = false;
  1016. if(response.code == 0) {
  1017. let list = response.data.list;
  1018. if (that.status == 2) {
  1019. let status = [];
  1020. list.forEach(function(row) {
  1021. row.detail = [row.detail];
  1022. status = row.status_cn.split(' ');
  1023. row.refund_status_cn = status[status.length - 1];
  1024. })
  1025. let address = response.data.address;
  1026. address.forEach(function(row, index) {
  1027. row.address = row.address.replace(/"/g, '')
  1028. row.address = row.address.replace(/,/g, '')
  1029. row.address = row.address.replace('[', '')
  1030. row.address = row.address.replace(']', '')
  1031. })
  1032. that.address = address;
  1033. } else {
  1034. list.forEach(function(row) {
  1035. row.order_id = row.id;
  1036. row.detail.forEach(function(res) {
  1037. if (res.refund_status == 1 || res.refund_status == 2) {
  1038. row.have_refund = 1;
  1039. }
  1040. })
  1041. })
  1042. }
  1043. that.more_list = false;
  1044. if (list.length == response.data.pagination.pageSize) {
  1045. that.more_list = true;
  1046. }
  1047. if(that.page == 1) {
  1048. that.list = list;
  1049. }else {
  1050. that.list = that.list.concat(list);
  1051. }
  1052. that.page++;
  1053. that.$forceUpdate();
  1054. }else {
  1055. uni.showToast({
  1056. title: response.msg,
  1057. icon: 'none',
  1058. duration: 1000
  1059. });
  1060. }
  1061. }).catch(response => {
  1062. that.loading = false;
  1063. that.$hideLoading();
  1064. uni.hideLoading();
  1065. });
  1066. },
  1067. toCancelorder(e) {
  1068. this.detail = e;
  1069. this.cancelOrder = !this.cancelOrder;
  1070. },
  1071. cancelSubmit() {
  1072. let that = this;
  1073. uni.showLoading({
  1074. title: '加载中...'
  1075. });
  1076. that.$request({
  1077. url: that.$api.app_admin.cancel,
  1078. data: {
  1079. status: 1,
  1080. remark: '',
  1081. order_id: that.detail.id
  1082. },
  1083. method: 'post'
  1084. }).then(response => {
  1085. uni.hideLoading();
  1086. if (response.code == 0) {
  1087. uni.showToast({
  1088. title: '取消成功',
  1089. duration: 2000,
  1090. type: 'success',
  1091. mask: false
  1092. });
  1093. // that.list = [];
  1094. that.isRefund = false;
  1095. that.cancelOrder = false;
  1096. that.page = 1;
  1097. uni.showLoading({
  1098. title: '加载中...'
  1099. });
  1100. that.getList();
  1101. } else {
  1102. uni.showToast({
  1103. title: response.msg,
  1104. icon: 'none',
  1105. duration: 1000
  1106. });
  1107. }
  1108. }).catch(response => {
  1109. uni.hideLoading();
  1110. uni.showToast({
  1111. title: response,
  1112. icon: 'none',
  1113. duration: 1000
  1114. });
  1115. });
  1116. },
  1117. toChange(e) {
  1118. this.detail = e;
  1119. this.changePrice = !this.changePrice;
  1120. this.price = e.total_goods_price;
  1121. this.express = e.express_price;
  1122. this.total = '¥' + e.total_pay_price;
  1123. },
  1124. priceInput: function(e) {
  1125. if (e.detail.value > -0.01) {
  1126. this.total = '¥' + (+e.detail.value + +this.express).toFixed(2)
  1127. } else {
  1128. this.total = '数据有误'
  1129. }
  1130. },
  1131. expressInput: function(e) {
  1132. if (e.detail.value > -0.01) {
  1133. this.total = '¥' + (+e.detail.value + +this.price).toFixed(2)
  1134. } else {
  1135. this.total = '数据有误'
  1136. }
  1137. },
  1138. // 确认修改价格
  1139. submitChange() {
  1140. let that = this;
  1141. uni.showLoading({
  1142. title: '加载中...'
  1143. });
  1144. if (that.price > -0.01 && that.express > -0.01) {
  1145. that.$request({
  1146. url: that.$api.app_admin.update_price,
  1147. data: {
  1148. order_id: that.detail.id,
  1149. total_price: that.price,
  1150. express_price: that.express
  1151. },
  1152. method: 'post'
  1153. }).then(response => {
  1154. uni.hideLoading();
  1155. if (response.code == 0) {
  1156. uni.showToast({
  1157. title: response.msg,
  1158. duration: 2000,
  1159. type: 'success',
  1160. mask: false
  1161. });
  1162. that.page = 1;
  1163. // that.list = [];
  1164. that.changePrice = false;
  1165. that.getList();
  1166. } else {
  1167. uni.showToast({
  1168. title: response.msg,
  1169. icon: 'none',
  1170. duration: 1000
  1171. });
  1172. }
  1173. }).catch(response => {
  1174. uni.hideLoading();
  1175. uni.showToast({
  1176. title: response,
  1177. icon: 'none',
  1178. duration: 1000
  1179. });
  1180. });
  1181. } else {
  1182. if (!that.price || typeof(that.price) != 'number') {
  1183. uni.showToast({
  1184. title: '商品总价必须大于等于0',
  1185. icon: 'none',
  1186. duration: 1000
  1187. });
  1188. } else if (!that.express || typeof(that.express) != 'number') {
  1189. uni.showToast({
  1190. title: '运费必须大于等于0',
  1191. icon: 'none',
  1192. duration: 1000
  1193. });
  1194. }
  1195. }
  1196. },
  1197. toRefundOrder(e) {
  1198. let that = this;
  1199. that.list = [];
  1200. that.more_list = false;
  1201. that.keyword = e;
  1202. that.status = 2;
  1203. that.search = true;
  1204. that.searchMethod();
  1205. },
  1206. toSend(e) {
  1207. let that = this;
  1208. that.detail = e;
  1209. if(that.detail.send_type != 2) {
  1210. if (that.detail.status_cn) {
  1211. uni.navigateTo({
  1212. url: '/pages/app_admin/send/send?order_refund_id=' + that.detail.id + '&id=' + that.detail.order_id
  1213. })
  1214. } else {
  1215. uni.navigateTo({
  1216. url: '/pages/app_admin/send/send?id=' + that.detail.id
  1217. })
  1218. }
  1219. }else {
  1220. that.isSend = true;
  1221. }
  1222. },
  1223. toExpress(e,is_send) {
  1224. let id = e.id;
  1225. let order_refund_id = e.refund;
  1226. if (id > 0) {
  1227. uni.navigateTo({
  1228. url: '/pages/app_admin/send/send?id=' + id + '&is_send=' + is_send
  1229. })
  1230. } else if (order_refund_id) {
  1231. uni.navigateTo({
  1232. url: '/pages/app_admin/send/send?order_refund_id=' + order_refund_id + '&is_send=' + is_send
  1233. })
  1234. }
  1235. },
  1236. toSendType() {
  1237. let that = this;
  1238. let para;
  1239. if (that.sendType == 1 || that.detail.send_type == 2) {
  1240. uni.showLoading({
  1241. title: '加载中...'
  1242. });
  1243. para = {
  1244. is_express: 0,
  1245. words: '',
  1246. order_id: that.detail.id
  1247. };
  1248. if(that.detail.send_type == 2) {
  1249. para.man = that.delivery;
  1250. }
  1251. that.$request({
  1252. url: that.$api.app_admin.send,
  1253. data: para,
  1254. method: 'post'
  1255. }).then(response => {
  1256. uni.hideLoading();
  1257. if (response.code == 0) {
  1258. uni.showToast({
  1259. title: response.msg,
  1260. type: 'success',
  1261. mask: false,
  1262. duration: 2000
  1263. });
  1264. // that.list = [];
  1265. that.page = 1;
  1266. that.isSend = false;
  1267. that.sendType = 0;
  1268. that.getList();
  1269. } else {
  1270. uni.showToast({
  1271. title: response.msg,
  1272. icon: 'none',
  1273. duration: 1000
  1274. });
  1275. }
  1276. }).catch(response => {
  1277. uni.hideLoading();
  1278. uni.showToast({
  1279. title: response,
  1280. icon: 'none',
  1281. duration: 1000
  1282. });
  1283. });
  1284. }
  1285. },
  1286. look(e) {
  1287. uni.previewImage({
  1288. current: e, // 当前显示图片的http链接
  1289. urls: [e] // 需要预览的图片http链接列表
  1290. })
  1291. },
  1292. lookAbout(e) {
  1293. this.detail = e;
  1294. this.isReason = true;
  1295. },
  1296. toConfirm(e) {
  1297. this.detail = e;
  1298. this.confirmOrder = !this.confirmOrder;
  1299. },
  1300. toRefund(e) {
  1301. this.detail = e;
  1302. this.refund_price = e.refund_price;
  1303. this.isRefund = !this.isRefund;
  1304. },
  1305. agree() {
  1306. let that = this;
  1307. uni.showLoading({
  1308. title: '处理中...'
  1309. });
  1310. if (that.detail.refund_price > 0) {
  1311. that.$request({
  1312. url: that.$api.app_admin.refund_handle,
  1313. data: {
  1314. order_refund_id: that.detail.id,
  1315. type: that.detail.type,
  1316. is_agree: 1,
  1317. refund_price: that.refund_price,
  1318. merchant_remark: that.about
  1319. },
  1320. method: 'post'
  1321. }).then(response => {
  1322. uni.hideLoading();
  1323. if (response.code == 0) {
  1324. uni.showModal({
  1325. title: '提示',
  1326. content: response.msg,
  1327. showCancel: false,
  1328. success: function (res) {
  1329. if (res.confirm) {
  1330. // that.list = [];
  1331. that.notRefund = false;
  1332. that.openAddress = false;
  1333. that.isRefund = false;
  1334. that.addressId = 0;
  1335. that.page = 1;
  1336. uni.showLoading({
  1337. title: '加载中...'
  1338. });
  1339. that.getList();
  1340. }
  1341. }
  1342. });
  1343. } else {
  1344. uni.showToast({
  1345. title: response.msg,
  1346. icon: 'none',
  1347. duration: 1000
  1348. });
  1349. }
  1350. }).catch(response => {
  1351. uni.hideLoading();
  1352. uni.showToast({
  1353. title: response,
  1354. icon: 'none',
  1355. duration: 1000
  1356. });
  1357. });
  1358. } else {
  1359. uni.showToast({
  1360. title: '退款金额需大于零',
  1361. icon: 'none',
  1362. duration: 1000
  1363. });
  1364. }
  1365. },
  1366. refundHandle(type,detail,cancel) {
  1367. if (cancel == 1) {
  1368. this.cancelRefund = true;
  1369. }
  1370. if (type == 1) {
  1371. if (this.address.length == 0) {
  1372. this.noAddress = true;
  1373. } else {
  1374. this.detail = detail;
  1375. this.openAddress = true;
  1376. }
  1377. } else if (type == 2) {
  1378. this.detail = detail;
  1379. this.notRefund = true;
  1380. }
  1381. },
  1382. toAgreeCancel(e) {
  1383. this.detail = e;
  1384. this.isRefund = !this.isRefund;
  1385. },
  1386. decline(type) {
  1387. let that = this;
  1388. if (type == 1) {
  1389. if (that.addressId < 1) {
  1390. uni.showToast({
  1391. title: '请选择地址',
  1392. icon: 'none',
  1393. duration: 1000
  1394. });
  1395. return false;
  1396. }
  1397. }
  1398. if (that.cancelRefund) {
  1399. type = 2;
  1400. }
  1401. uni.showLoading({
  1402. title: '处理中...'
  1403. });
  1404. that.$request({
  1405. url: that.$api.app_admin.refund_handle,
  1406. data: {
  1407. order_refund_id: that.detail.id,
  1408. type: that.detail.type,
  1409. is_agree: type,
  1410. address_id: that.addressId,
  1411. refund_price: that.detail.refund_price,
  1412. merchant_remark: that.about
  1413. },
  1414. method: 'post'
  1415. }).then(response => {
  1416. uni.hideLoading();
  1417. if (response.code == 0) {
  1418. uni.showModal({
  1419. title: '提示',
  1420. content: response.msg,
  1421. showCancel: false,
  1422. success: function (res) {
  1423. if (res.confirm) {
  1424. that.page = 1;
  1425. // that.list = [];
  1426. that.notRefund = false;
  1427. that.cancelOrder = false;
  1428. that.openAddress = false;
  1429. that.addressId = 0;
  1430. that.getList();
  1431. }
  1432. }
  1433. });
  1434. } else {
  1435. uni.showToast({
  1436. title: response.msg,
  1437. icon: 'none',
  1438. duration: 1000
  1439. });
  1440. }
  1441. }).catch(response => {
  1442. uni.hideLoading();
  1443. uni.showToast({
  1444. title: response,
  1445. icon: 'none',
  1446. duration: 1000
  1447. });
  1448. });
  1449. },
  1450. chooseAddress(e) {
  1451. if (this.addressId == e) {
  1452. this.addressId = ''
  1453. }else {
  1454. this.addressId = e
  1455. }
  1456. },
  1457. chooseDelivery(e) {
  1458. if (this.getDeliveryId == e.id) {
  1459. this.deliveryId = ''
  1460. }else {
  1461. this.deliveryId = e.id
  1462. this.delivery = "(" + e.id + ")" + e.name;
  1463. }
  1464. },
  1465. noCancel() {
  1466. let that = this;
  1467. uni.showLoading({
  1468. title: '处理中...'
  1469. });
  1470. that.$request({
  1471. url: that.$api.app_admin.cancel,
  1472. data: {
  1473. status: 2,
  1474. remark: that.about,
  1475. order_id: that.detail.id
  1476. },
  1477. method: 'post'
  1478. }).then(response => {
  1479. uni.hideLoading();
  1480. if (response.code == 0) {
  1481. uni.showToast({
  1482. title: response.msg,
  1483. type: 'success',
  1484. mask: false,
  1485. duration: 2000
  1486. });
  1487. // that.list = [];
  1488. that.page = 1;
  1489. that.noRefund = false;
  1490. that.getList();
  1491. } else {
  1492. uni.showToast({
  1493. title: response.msg,
  1494. icon: 'none',
  1495. duration: 1000
  1496. });
  1497. }
  1498. }).catch(response => {
  1499. uni.hideLoading();
  1500. uni.showToast({
  1501. title: response,
  1502. icon: 'none',
  1503. duration: 1000
  1504. });
  1505. });
  1506. },
  1507. beNotRefund(e) {
  1508. this.detail = e;
  1509. this.noRefund = !this.noRefund;
  1510. },
  1511. },
  1512. onReachBottom: function() {
  1513. if (this.more_list) {
  1514. this.getList();
  1515. }
  1516. },
  1517. onShow: function() {
  1518. // this.list = [];
  1519. this.page = 1;
  1520. this.getList();
  1521. },
  1522. onLoad(options) {
  1523. let that = this;
  1524. that.$showLoading({
  1525. type: 'global',
  1526. text: '加载中...'
  1527. });
  1528. that.status = '1';
  1529. that._num = '-1';
  1530. var myDate = new Date();
  1531. // 今天
  1532. let year = myDate.getFullYear();
  1533. let month = myDate.getMonth() + 1;
  1534. if (month >= 1 && month <= 9) {
  1535. month = "0" + month;
  1536. }
  1537. let now = myDate.getDate();
  1538. that.today = year + "-" + month + "-" + now;
  1539. var timestamp = Date.parse(new Date());
  1540. // 昨天
  1541. let yesterTime = (timestamp / 1000 - 24 * 60 * 60) * 1000;
  1542. let yesterDate = new Date(yesterTime)
  1543. let yester_year = yesterDate.getFullYear();
  1544. let yester_month = yesterDate.getMonth() + 1;
  1545. if (yester_month >= 1 && yester_month <= 9) {
  1546. yester_month = "0" + yester_month;
  1547. }
  1548. let yester_now = yesterDate.getDate();
  1549. that.yesterday = yester_year + "-" + yester_month + "-" + yester_now;
  1550. // 7天
  1551. let weekTime = (timestamp / 1000 - 24 * 60 * 60 * 7) * 1000;
  1552. let weekDate = new Date(weekTime)
  1553. let week_year = weekDate.getFullYear();
  1554. let week_month = weekDate.getMonth() + 1;
  1555. if (week_month >= 1 && week_month <= 9) {
  1556. week_month = "0" + week_month;
  1557. }
  1558. let week_now = weekDate.getDate();
  1559. that.weekday = week_year + "-" + week_month + "-" + week_now;
  1560. uni.getSystemInfo({
  1561. success: function (res) {
  1562. if(res.model.indexOf('iPhone X') > -1 || res.model.indexOf('iPhone 11') > -1 || res.model.indexOf('iPhone11') > -1 || res.model.indexOf('iPhone12') > -1 || res.model.indexOf('Unknown Device') > -1) {
  1563. that.iphone_x = true;
  1564. }
  1565. }
  1566. })
  1567. that.$request({
  1568. url: that.$api.app_admin.delivery
  1569. }).then(response=>{
  1570. if(response.code == 0) {
  1571. this.cityList = response.data.list;
  1572. this.deliveryId = response.data.list[0].id;
  1573. this.delivery = "(" + response.data.list[0].id + ")" + response.data.list[0].name
  1574. }else {
  1575. uni.showToast({
  1576. title: response.msg,
  1577. icon: 'none',
  1578. duration: 1000
  1579. });
  1580. }
  1581. }).catch(response => {
  1582. uni.hideLoading();
  1583. });
  1584. if(options.msg) {
  1585. that.msg = true;
  1586. }
  1587. if(options.status > -1) {
  1588. that._num = options.status
  1589. }
  1590. if(options.refund > 0) {
  1591. that.status = 2
  1592. }
  1593. if (options.no) {
  1594. if (options.no.slice(0, 2) == "RE") {
  1595. that.status = 2;
  1596. }
  1597. that.search = true;
  1598. that.inSearch = true;
  1599. that.keyword = options.no;
  1600. this.getList();
  1601. }
  1602. }
  1603. }
  1604. </script>
  1605. <style scoped lang="scss">
  1606. .dialog-bg {
  1607. width: 100%;
  1608. height: 100%;
  1609. position: fixed;
  1610. background-color: rgba(0, 0, 0, 0.5);
  1611. left: 0;
  1612. top: 0;
  1613. }
  1614. .tab {
  1615. margin: #{24rpx} auto;
  1616. width: #{320rpx};
  1617. height: #{56rpx};
  1618. }
  1619. .bottom-tab.iphone_x {
  1620. height: #{146rpx};
  1621. padding-bottom: #{50rpx};
  1622. }
  1623. .bottom-tab {
  1624. width: 100%;
  1625. height: #{96rpx};
  1626. background-color: #fff;
  1627. font-size: #{20rpx};
  1628. color: #9096ad;
  1629. padding-top: #{14rpx};
  1630. z-index: 999;
  1631. position: fixed;
  1632. bottom: 0;
  1633. left: 0;
  1634. right: 0;
  1635. }
  1636. .tab-nav-item {
  1637. text-align: center;
  1638. }
  1639. .tab-icon {
  1640. height: #{48rpx};
  1641. width: #{48rpx};
  1642. display: inline-block;
  1643. }
  1644. .tab-nav-item.active {
  1645. color: #446dfd;
  1646. }
  1647. .tab-nav-item view {
  1648. margin-top: #{-5rpx};
  1649. }
  1650. .tab-info {
  1651. background-color: #fff;
  1652. position: fixed;
  1653. z-index: 2;
  1654. top: 0;
  1655. left: 0;
  1656. right: 0;
  1657. height: #{104rpx};
  1658. }
  1659. .tab-item {
  1660. width: #{160rpx};
  1661. text-align: center;
  1662. height: #{56rpx};
  1663. line-height: #{54rpx};
  1664. background-color: #fff;
  1665. color: #666;
  1666. font-size: #{24rpx};
  1667. display: block;
  1668. }
  1669. .tab-item.tab-left {
  1670. border-top-left-radius: #{28rpx};
  1671. border-bottom-left-radius: #{28rpx};
  1672. border: #{2rpx} solid #446dfd;
  1673. border-right: 0;
  1674. }
  1675. .tab-item.tab-right {
  1676. border-top-right-radius: #{28rpx};
  1677. border-bottom-right-radius: #{28rpx};
  1678. border: #{2rpx} solid #446dfd;
  1679. border-left: 0;
  1680. }
  1681. .tab-item.active {
  1682. background-color: #446dfd;
  1683. color: #fff;
  1684. }
  1685. .search-area {
  1686. position: fixed;
  1687. z-index: 3;
  1688. top: #{104rpx};
  1689. left: 0;
  1690. right: 0;
  1691. height: #{88rpx};
  1692. line-height: #{88rpx};
  1693. background-color: #efeff4;
  1694. padding: 0 #{48rpx} 0 #{24rpx};
  1695. }
  1696. .search {
  1697. height: #{56rpx};
  1698. line-height: #{56rpx};
  1699. border-radius: #{28rpx};
  1700. background-color: #fff;
  1701. color: #b2b2b2;
  1702. width: #{528rpx};
  1703. text-align: center;
  1704. }
  1705. .choose {
  1706. color: #446dfd;
  1707. font-size: #{26rpx};
  1708. }
  1709. .choose image {
  1710. width: #{22rpx};
  1711. height: #{12rpx};
  1712. margin-left: #{12rpx};
  1713. }
  1714. .navs-info {
  1715. background-color: #fff;
  1716. border-bottom: #{1rpx} solid #e2e2e2;
  1717. position: fixed;
  1718. z-index: 2;
  1719. top: #{182rpx};
  1720. left: 0;
  1721. right: 0;
  1722. padding-top: #{10rpx};
  1723. }
  1724. .navs {
  1725. height: #{100rpx};
  1726. font-size: #{28rpx};
  1727. color: #666;
  1728. text-align: center;
  1729. position: relative;
  1730. }
  1731. .navs.more-navs {
  1732. line-height: #{100rpx};
  1733. }
  1734. .navs .active {
  1735. color: #446dfd;
  1736. display: inline-block;
  1737. height: #{100rpx};
  1738. line-height: #{102rpx};
  1739. border-bottom: #{2rpx} solid #446dfd;
  1740. }
  1741. .navs image {
  1742. height: #{16rpx};
  1743. width: #{16rpx};
  1744. margin-left: #{16rpx};
  1745. display: block;
  1746. float: right;
  1747. margin-top: #{42rpx};
  1748. }
  1749. .order-item {
  1750. background-color: #fff;
  1751. padding: #{24rpx};
  1752. margin: #{20rpx} #{24rpx} 0;
  1753. border-radius: #{16rpx};
  1754. display: block;
  1755. }
  1756. .order-info {
  1757. font-size: #{24rpx};
  1758. color: #353535;
  1759. margin-bottom: #{24rpx};
  1760. .remark-info {
  1761. margin-top: #{8rpx};
  1762. }
  1763. }
  1764. .order-user {
  1765. height: #{72rpx};
  1766. background-color: #f7f7f7;
  1767. padding-left: #{28rpx};
  1768. font-size: #{24rpx};
  1769. color: #353535;
  1770. }
  1771. .order-user view:first-of-type {
  1772. margin-right: #{32rpx};
  1773. }
  1774. .to-tel {
  1775. color: #446dfd;
  1776. font-size: #{24rpx};
  1777. margin-left: #{20rpx};
  1778. height: #{72rpx};
  1779. line-height: #{72rpx};
  1780. }
  1781. .to-tel image {
  1782. height: 14px;
  1783. width: 14px;
  1784. margin-right: #{12rpx};
  1785. display: inline-block;
  1786. }
  1787. .goods {
  1788. height: #{160rpx};
  1789. margin-top: #{24rpx};
  1790. position: relative;
  1791. font-size: #{24rpx};
  1792. color: #353535;
  1793. margin-bottom: #{24rpx};
  1794. .goods-status {
  1795. height: #{40rpx};
  1796. line-height: #{40rpx};
  1797. color: #fff;
  1798. width: #{160rpx};
  1799. position: absolute;
  1800. bottom: 0;
  1801. left: 0;
  1802. text-align: center;
  1803. background-color: #446dfd;
  1804. border-bottom-left-radius: #{4rpx};
  1805. border-bottom-right-radius: #{4rpx};
  1806. }
  1807. .goods-img {
  1808. height: #{160rpx};
  1809. width: #{160rpx};
  1810. float: left;
  1811. margin-right: #{20rpx};
  1812. border-radius: #{4rpx};
  1813. }
  1814. .goods-attr {
  1815. font-size: #{24rpx};
  1816. color: #999;
  1817. position: absolute;
  1818. top: #{78rpx};
  1819. left: #{180rpx};
  1820. width: 70%;
  1821. text {
  1822. margin-right: #{20rpx};
  1823. }
  1824. }
  1825. .goods-num {
  1826. font-size: #{24rpx};
  1827. color: #999;
  1828. position: absolute;
  1829. top: #{126rpx};
  1830. left: #{180rpx};
  1831. }
  1832. .goods-price {
  1833. font-size: #{24rpx};
  1834. color: #353535;
  1835. position: absolute;
  1836. bottom: 0;
  1837. right: 0;
  1838. }
  1839. }
  1840. .price-info {
  1841. font-size: #{28rpx};
  1842. color: #353535;
  1843. }
  1844. .price-info .other {
  1845. font-size: #{24rpx};
  1846. color: #999;
  1847. }
  1848. .handle-btn {
  1849. height: #{48rpx};
  1850. display: flex;
  1851. align-items: center;
  1852. padding: 0 #{24rpx};
  1853. border-radius: #{24rpx};
  1854. border: #{2rpx} solid #bbb;
  1855. color: #353535;
  1856. font-size: #{24rpx};
  1857. margin-left: #{16rpx};
  1858. }
  1859. .handle-btn.other {
  1860. border: #{2rpx} solid #446dfd;
  1861. color: #446dfd;
  1862. }
  1863. .more-menu {
  1864. position: fixed;
  1865. z-index: 5;
  1866. top: #{270rpx};
  1867. padding-top: #{22rpx};
  1868. right: #{22rpx};
  1869. width: #{196rpx};
  1870. background-color: #fff;
  1871. font-size: #{28rpx};
  1872. color: #666;
  1873. border-bottom: #{1rpx} solid #e0e0e0;
  1874. }
  1875. .more-menu.go-out, .search-history.go-out {
  1876. display: none;
  1877. }
  1878. .more-menu view {
  1879. width: #{196rpx};
  1880. height: #{68rpx};
  1881. line-height: #{68rpx};
  1882. text-align: center;
  1883. border-left: #{1rpx} solid #e0e0e0;
  1884. border-right: #{1rpx} solid #e0e0e0;
  1885. }
  1886. .search-item {
  1887. height: #{96rpx};
  1888. background-color: #efeff4;
  1889. padding: 0 #{24rpx};
  1890. font-size: #{28rpx};
  1891. color: #00c203;
  1892. }
  1893. .search-input {
  1894. height: #{64rpx};
  1895. position: relative;
  1896. width: #{620rpx};
  1897. .search-clear {
  1898. position: absolute;
  1899. right: #{15rpx};
  1900. top: #{21rpx};
  1901. width: #{30rpx};
  1902. height: #{30rpx};
  1903. z-index: 100;
  1904. }
  1905. }
  1906. .search-input .search-icon {
  1907. height: #{22rpx};
  1908. width: #{22rpx};
  1909. position: absolute;
  1910. top: #{21rpx};
  1911. left: #{28rpx};
  1912. z-index: 10;
  1913. }
  1914. .search-input input {
  1915. padding-left: #{62rpx};
  1916. padding-right: #{70rpx};
  1917. background-color: #fff;
  1918. border-radius: #{32rpx};
  1919. height: #{64rpx};
  1920. font-size: #{26rpx};
  1921. color: #353535;
  1922. }
  1923. .search-history {
  1924. position: absolute;
  1925. top: #{96rpx};
  1926. left: 0;
  1927. right: 0;
  1928. height: 100%;
  1929. background-color: #fff;
  1930. padding: #{24rpx} #{4rpx};
  1931. font-size: #{28rpx};
  1932. color: #666;
  1933. z-index: 20;
  1934. }
  1935. .search-title {
  1936. padding: 0 #{20rpx};
  1937. margin-bottom: #{24rpx};
  1938. }
  1939. .keyword-item {
  1940. height: #{64rpx};
  1941. line-height: #{64rpx};
  1942. padding: 0 #{20rpx};
  1943. background-color: #f7f7f7;
  1944. color: #333;
  1945. border-radius: #{32rpx};
  1946. font-size: #{28rpx};
  1947. margin-left: #{20rpx};
  1948. margin-bottom: #{20rpx};
  1949. max-width: 90%;
  1950. }
  1951. .bg {
  1952. background-color: rgba(0, 0, 0, 0.3);
  1953. position: fixed;
  1954. top: 0;
  1955. left: 0;
  1956. height: 100%;
  1957. width: 100%;
  1958. z-index: 100;
  1959. }
  1960. .dialog {
  1961. width: #{620rpx};
  1962. border-radius: #{16rpx};
  1963. margin: 0 auto;
  1964. background-color: #fff;
  1965. z-index: 20;
  1966. }
  1967. .remark-input {
  1968. padding: 0 #{32rpx};
  1969. height: #{80rpx};
  1970. margin-bottom: #{32rpx};
  1971. color: #353535;
  1972. input {
  1973. border-radius: #{16rpx};
  1974. background-color: #F7F7F7;
  1975. height: #{80rpx};
  1976. line-height: #{80rpx};
  1977. padding: 0 #{24rpx};
  1978. }
  1979. }
  1980. .dialog-title {
  1981. font-size: #{32rpx};
  1982. color: #353535;
  1983. width: #{620rpx};
  1984. margin: #{32rpx} auto #{40rpx};
  1985. text-align: center;
  1986. }
  1987. .dialog-choose-item {
  1988. width: #{170rpx};
  1989. height: #{68rpx};
  1990. line-height: #{68rpx};
  1991. text-align: center;
  1992. border-radius: #{34rpx};
  1993. border: #{2rpx} solid #ddd;
  1994. color: #666;
  1995. font-size: #{28rpx};
  1996. margin-bottom: #{16rpx};
  1997. }
  1998. .send-item {
  1999. width: #{180rpx};
  2000. height: #{68rpx};
  2001. line-height: #{66rpx};
  2002. text-align: center;
  2003. border-radius: #{34rpx};
  2004. border: #{2rpx} solid #ddd;
  2005. color: #666;
  2006. background-color: #fff;
  2007. font-size: #{28rpx};
  2008. margin: 0 #{30rpx} #{36rpx};
  2009. }
  2010. .send-item.active {
  2011. color: #fff;
  2012. border: #{2rpx} solid #446dfd;
  2013. background-color: #446dfd;
  2014. }
  2015. .dialog-choose-item.active {
  2016. color: #446dfd;
  2017. border: #{2rpx} solid #446dfd;
  2018. }
  2019. .btn-area {
  2020. height: #{88rpx};
  2021. position: relative;
  2022. border-top: #{2rpx} solid #e2e2e2;
  2023. }
  2024. .btn-area.other-btn-area {
  2025. margin-top: #{10rpx};
  2026. }
  2027. .btn-area .line {
  2028. height: #{32rpx};
  2029. width: #{1rpx};
  2030. background-color: #e2e2e2;
  2031. position: absolute;
  2032. top: #{28rpx};
  2033. left: 0;
  2034. right: 0;
  2035. margin: 0 auto;
  2036. }
  2037. .submit-btn {
  2038. height: #{88rpx};
  2039. line-height: #{88rpx};
  2040. font-size: #{32rpx};
  2041. color: #666;
  2042. width: #{310rpx};
  2043. text-align: center;
  2044. }
  2045. .submit-btn.be-submit {
  2046. color: #446dfd;
  2047. }
  2048. .textarea {
  2049. height: #{252rpx};
  2050. width: #{492rpx};
  2051. padding: #{24rpx} #{32rpx};
  2052. font-size: #{28rpx};
  2053. border-radius: #{16rpx};
  2054. border: #{2rpx} solid #e2e2e2;
  2055. text-align: left;
  2056. margin: #{32rpx} auto;
  2057. }
  2058. .change-price-item {
  2059. position: relative;
  2060. height: #{64rpx};
  2061. line-height: #{64rpx};
  2062. color: #353535;
  2063. font-size: #{28rpx};
  2064. margin-bottom: #{26rpx};
  2065. }
  2066. .change-price-item:first-of-type {
  2067. margin-bottom: #{32rpx};
  2068. }
  2069. .change-price-item:last-of-type {
  2070. margin: #{24rpx} 0 #{34rpx};
  2071. }
  2072. .label {
  2073. height: #{64rpx};
  2074. line-height: #{64rpx};
  2075. text-align: right;
  2076. width: #{178rpx};
  2077. }
  2078. .price-input {
  2079. width: #{298rpx};
  2080. height: #{64rpx};
  2081. margin-left: #{24rpx};
  2082. border-radius: #{32rpx};
  2083. padding-left: #{62rpx};
  2084. background-color: #f7f7f7;
  2085. }
  2086. .money {
  2087. position: absolute;
  2088. left: #{234rpx};
  2089. }
  2090. .time-title {
  2091. margin-left: #{32rpx};
  2092. color: #666;
  2093. font-size: #{28rpx};
  2094. margin-bottom: #{20rpx};
  2095. }
  2096. .choose-time {
  2097. position: relative;
  2098. }
  2099. .year-1 {
  2100. position: absolute;
  2101. left: #{192rpx};
  2102. top: #{146rpx};
  2103. }
  2104. .month-1 {
  2105. position: absolute;
  2106. left: #{380rpx};
  2107. top: #{146rpx};
  2108. }
  2109. .day-1 {
  2110. position: absolute;
  2111. right: #{32rpx};
  2112. top: #{146rpx};
  2113. }
  2114. .year-2 {
  2115. position: absolute;
  2116. left: #{192rpx};
  2117. bottom: #{88rpx};
  2118. }
  2119. .month-2 {
  2120. position: absolute;
  2121. left: #{380rpx};
  2122. bottom: #{88rpx};
  2123. }
  2124. .day-2 {
  2125. position: absolute;
  2126. right: #{32rpx};
  2127. bottom: #{88rpx};
  2128. }
  2129. .reason {
  2130. padding-left: #{32rpx};
  2131. }
  2132. .reason-title {
  2133. font-size: #{28rpx};
  2134. color: #999;
  2135. margin-bottom: #{20rpx};
  2136. }
  2137. .reason-content {
  2138. font-size: #{28rpx};
  2139. color: #353535;
  2140. width: #{556rpx};
  2141. margin-bottom: #{26rpx};
  2142. }
  2143. .reason-img {
  2144. margin-bottom: #{14rpx};
  2145. }
  2146. .reason-img image {
  2147. height: #{180rpx};
  2148. width: #{180rpx};
  2149. margin: 0 #{8rpx} #{8rpx} 0;
  2150. }
  2151. .add-list {
  2152. margin-top: #{50rpx};
  2153. max-height: #{388rpx};
  2154. overflow: auto;
  2155. padding: 0 #{36rpx};
  2156. }
  2157. .add-item {
  2158. padding: #{32rpx} 0;
  2159. margin-left: #{64rpx};
  2160. position: relative;
  2161. font-size: #{28rpx};
  2162. color: #353535;
  2163. border-bottom: #{1rpx} solid #e2e2e2;
  2164. }
  2165. .add-item.delivery-item {
  2166. padding-left: #{64rpx};
  2167. margin-left: 0;
  2168. }
  2169. .add-item:last-of-type {
  2170. border-bottom: 0;
  2171. }
  2172. .add-item image {
  2173. height: #{36rpx};
  2174. width: #{36rpx};
  2175. position: absolute;
  2176. left: #{-66rpx};
  2177. top: 50%;
  2178. margin-top: #{-18rpx};
  2179. }
  2180. .add-item .add-active {
  2181. position: absolute;
  2182. left: #{-64rpx};
  2183. top: 50%;
  2184. margin-top: #{-18rpx};
  2185. }
  2186. .add-item .add-name {
  2187. width: #{220rpx};
  2188. overflow: hidden;
  2189. text-overflow: ellipsis;
  2190. white-space: nowrap;
  2191. }
  2192. .add-item.delivery-item .add-name {
  2193. width: #{400rpx};
  2194. }
  2195. .no-tip {
  2196. position: fixed;
  2197. top: #{400rpx};
  2198. left: 0;
  2199. right: 0;
  2200. margin: 0 auto;
  2201. color: #666666;
  2202. font-size: #{24rpx};
  2203. width: #{240rpx};
  2204. text-align: center;
  2205. }
  2206. .no-tip image {
  2207. height: #{240rpx};
  2208. width: #{240rpx};
  2209. margin-bottom: #{20rpx};
  2210. }
  2211. .refund-price {
  2212. width: #{160rpx};
  2213. border: #{2rpx} solid #e2e2e2;
  2214. border-radius: #{5rpx};
  2215. font-size: #{32rpx};
  2216. padding: 0 #{5rpx};
  2217. }
  2218. .bottom-place {
  2219. height: #{116rpx};
  2220. }
  2221. .bottom-place.iphone_x {
  2222. height: #{166rpx};
  2223. }
  2224. .delete-icon {
  2225. height: #{34rpx};
  2226. width: #{28rpx};
  2227. }
  2228. .candidate-list {
  2229. max-height: #{420rpx};
  2230. overflow: hidden;
  2231. }
  2232. .icon-search {
  2233. height: #{24rpx};
  2234. width: #{24rpx};
  2235. margin-top: #{16rpx};
  2236. }
  2237. .icon-search+text {
  2238. color:#b2b2b2;
  2239. font-size:#{24rpx};
  2240. margin:0 #{5rpx};
  2241. }
  2242. .search-palce {
  2243. height: #{292rpx};
  2244. }
  2245. .goods-name {
  2246. padding-top: #{5rpx};
  2247. }
  2248. .menu-button {
  2249. margin-top: #{24rpx};
  2250. }
  2251. .time-area {
  2252. margin-bottom: #{24rpx};
  2253. padding: 0 #{32rpx};
  2254. }
  2255. .picker-view {
  2256. width: #{556rpx};
  2257. height: #{216rpx};
  2258. margin: 0 auto #{20rpx};
  2259. text-align: center;
  2260. .sure-color {
  2261. color: #446dfd;
  2262. }
  2263. .cardinal-color {
  2264. color: #999999;
  2265. }
  2266. .even-color {
  2267. color: #cdcdcd;
  2268. }
  2269. }
  2270. .picker-view view {
  2271. line-height: #{72rpx};
  2272. }
  2273. .refund-pay {
  2274. font-size: #{36rpx};
  2275. color: #353535;
  2276. font-weight: bold;
  2277. }
  2278. .refund-tip {
  2279. font-size: #{32rpx};
  2280. color: #353535;
  2281. margin: #{4rpx} 0 #{45rpx};
  2282. }
  2283. .total-money {
  2284. margin-left: #{56rpx};
  2285. }
  2286. .cancel-tip {
  2287. font-size: #{32rpx};
  2288. color: #353535;
  2289. margin: #{74rpx} 0 #{60rpx};
  2290. }
  2291. .send-type {
  2292. margin-bottom: #{24rpx};
  2293. padding: 0 #{32rpx};
  2294. }
  2295. </style>