_orderId.vue 54 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568
  1. <template>
  2. <div class="mobile-content mobile-content-long mobile-pay" @touchmove="blurEvent()">
  3. <!--<div class="pay-head" @click="openAddrModal">
  4. <template v-if="selectedAddress && selectedAddress.name">
  5. <p class="info">
  6. {{selectedAddress.name}}&nbsp;&nbsp;&nbsp;{{selectedAddress.tel}}
  7. </p>
  8. <div class="addr">
  9. <img src="/images/mobile/center/user/addr-flag.png" alt="">
  10. <span>{{selectedAddress.area + selectedAddress.detailAddress}}</span>
  11. </div>
  12. <i class="iconfont icon-xiangyou fr"></i>
  13. </template>
  14. <template v-else>
  15. <div class="no-addr">暂无收货地址信息</div>
  16. </template>
  17. </div>-->
  18. <ul class="pay-store-list">
  19. <li class="ps-item" v-for="item in orderData">
  20. <p class="ps-store-name">
  21. <nuxt-link tag="span" :to="`/mobile/shop/${item.storeid}`" class="inline-block text-ellipse seller-name"><span>卖&nbsp;&nbsp;家:</span>{{item.storeName}}&nbsp;<i class="iconfont icon-arrow-right"></i></nuxt-link>
  22. <a class="com-mobile-link" @click.stop="linkSaler(item)"><i class="iconfont icon-kefu1"></i>联系卖家</a>
  23. </p>
  24. <div class="ps-goods-info" @click="showDetailList(item.goods)">
  25. <ul class="ps-goods-list">
  26. <li class="inline-block" v-for="goods in (item.$expand ? item.goods : item.goods.slice(0, 3))">
  27. <div class="clearfix" style="padding: .31rem .25rem;">
  28. <div class="fl">
  29. <div class="ps-goods-item text-ellipse"><span>品牌:</span>{{goods.brName || '-'}}</div>
  30. <div class="ps-goods-item text-ellipse"><span>物料名称(类目):</span>{{goods.kiName || '-'}}</div>
  31. <div class="ps-goods-item text-ellipse"><span>型号:</span>{{goods.cmpCode || '-'}}</div>
  32. <div class="ps-goods-item text-ellipse"><span>规格:</span>{{goods.spec || '-'}}</div>
  33. </div>
  34. <div class="fr">
  35. <div class="ps-goods-item text-ellipse"><span>交期(天):</span>{{goods.goodsHistory.b2cMinDelivery + '-' + goods.goodsHistory.b2cMaxDelivery}}</div>
  36. <div class="ps-goods-item text-ellipse"><span>单价:</span>{{goods.currencyName | currencyFilter}}{{baseUtils.getPriceByLevel(goods.goods.prices, goods.goods.purchaseNumber, goods.currencyName)}}</div>
  37. <div class="ps-goods-item text-ellipse"><span>起拍:</span>{{goods.minBuyQty}}</div>
  38. <div class="ps-goods-item"><span>数量(PCS):</span>
  39. <span class="input-line inline-block">
  40. <span class="inline-block" @click="setGoods('sub', goods)" :class="{disab: !goods.goods.canSub}">-</span>
  41. <input type="number" ref="numberInput" v-model="goods.goods.purchaseNumber" @blur="blurEvent('set', goods)" @focus="focusEvent()">
  42. <span class="inline-block" @click="setGoods('add', goods)" :class="{disab: !goods.goods.canAdd}">+</span>
  43. </span>
  44. </div>
  45. </div>
  46. </div>
  47. <div class="single-count text-ellipse"><span class="pay-price-title inline-block">小&nbsp;&nbsp;&nbsp;计:</span><span class="ol-price"><span>{{goods.currencyName | currencyFilter}}</span>{{goods.goods.currentPrice | priceFilter}}</span></div>
  48. </li>
  49. </ul>
  50. <div class="show-more-psgoods" v-if="item.goods.length > 3" @click="item.$expand = !item.$expand">
  51. {{item.$expand ? '收起' : '查看更多'}}
  52. <i v-show="!item.$expand" class="iconfont icon-arrow-down"></i>
  53. <i v-show="item.$expand" class="iconfont icon-arrow-up"></i>
  54. </div>
  55. </div>
  56. <!-- <div class="ps-operate-line" @click="showRuleSet(item.storeid)">
  57. <span class="title">配送方式</span>
  58. <div class="fr">
  59. <div class="inline-block">
  60. <span v-if="fareRule[item.storeid] && fareRule[item.storeid][0]">{{fareRule[item.storeid][0].method | deliveryRuleFilter}}</span>
  61. <span v-if="fareRule[item.storeid] && fareRule[item.storeid][0]">{{fareRule[item.storeid][0].ruleName}}</span>
  62. <span v-if="!(fareRule[item.storeid] && fareRule[item.storeid][0])" class="red">当前地址不支持配送,请与卖家协商处理</span>
  63. </div>
  64. <i class="iconfont icon-xiangyou" v-if="fareRule[item.storeid] && fareRule[item.storeid][0]"></i>
  65. </div>
  66. </div>-->
  67. <!-- <div class="ps-operate-line">
  68. <span class="title">物流选择</span>
  69. <div class="fr">
  70. <div class="delivery-select active inline-block">最省钱</div>
  71. <div class="delivery-select inline-block">最快</div>
  72. </div>
  73. </div>-->
  74. <!--<div class="ps-operate-line ps-operate-takeself" v-if="checkShowTakeSelf(item)" @click="showTakeSelfSet(item.storeid)">
  75. <span class="title">自提点</span>
  76. <div class="fr">
  77. <div class="inline-block">
  78. <template v-if="takeSelfData[item.storeid] && takeSelfData[item.storeid]">
  79. <span>{{takeSelfData[item.storeid][0].takename}}</span>
  80. <span>地址:{{takeSelfData[item.storeid][0].area + takeSelfData[item.storeid][0].detailAddress}}</span>
  81. <span>营业时间:{{takeSelfData[item.storeid][0].businesstime}}</span>
  82. </template>
  83. <template v-else>暂无自提点信息</template>
  84. </div>
  85. </div>
  86. </div>
  87. <div class="ps-operate-line">
  88. <span class="title">订单备注</span>
  89. <input type="text" v-model="item.remark" placeholder="选填:填写内容需和卖家协商确认">
  90. </div>-->
  91. <div class="ps-operate-line ps-fare">
  92. <div class="text-ellipse">
  93. <span class="pay-price-title inline-block">运&nbsp;&nbsp;&nbsp;费:</span><span class="ol-price"><span>{{payData.currency | currencyFilter}}</span>{{item.fare ? item.fare.fare : 0}}</span>
  94. </div>
  95. <div class="text-ellipse">
  96. <span class="pay-price-title inline-block">手续费:</span>
  97. <span class="ol-price"><span>{{payData.currency | currencyFilter}}</span>0<span class="inline-block tag" @click="showRemindStr = true">减免</span>
  98. <i class="fa fa-exclamation-circle"></i></span>
  99. <!--(<span class="ol-price fare"><span>{{payData.currency | currencyFilter}}</span>{{getPoundage(item)}}</span>)-->
  100. </div>
  101. </div>
  102. <div class="ps-operate-line ps-price">
  103. <span class="pay-price-title inline-block">合&nbsp;&nbsp;&nbsp;计:</span>
  104. <span class="ol-price"><span>{{payData.currency | currencyFilter}}</span>{{(item.goodsFarePrice || 0) | priceFilter}}</span>
  105. </div>
  106. </li>
  107. </ul>
  108. <div class="ps-operate-line ps-address" @click="openAddrModal">
  109. <div class="inline-block">
  110. <template v-if="selectedAddress && selectedAddress.name">
  111. <p class="addr">
  112. <span class="addr-title inline-block">收货地址:</span>
  113. <span class="inline-block area">{{selectedAddress.area + selectedAddress.detailAddress}}</span>
  114. </p>
  115. <p class="text-ellipse info">
  116. <span class="info-name">收货人:</span>{{selectedAddress.name}}
  117. <span class="info-phone">电话:</span>{{selectedAddress.tel}}
  118. </p>
  119. </template>
  120. <template v-else>
  121. <p class="no-addr">请维护收货地址信息</p>
  122. </template>
  123. </div>
  124. <i class="iconfont icon-xiangyou inline-block"></i>
  125. </div>
  126. <div class="ps-operate-line pay-invoice" @click="openInvoiceModal">
  127. <span class="title">发票信息:</span>
  128. <div class="fr">
  129. <p class="inline-block text-ellipse">
  130. <template v-if="selectedInvoice">
  131. <span class="inv-head inline-block text-ellipse">{{selectedInvoice.head}}</span>
  132. <span class="inv-type inline-block">({{selectedInvoice.kind === 1205 ? '专用发票' : '普通发票'}})</span>
  133. </template>
  134. <template v-else>
  135. <span>暂不开具发票</span>
  136. </template>
  137. </p>
  138. <i class="iconfont icon-xiangyou"></i>
  139. </div>
  140. </div>
  141. <div class="ps-operate-line pay-operate">
  142. <span class="title">支付方式:</span>
  143. <div class="fr">
  144. <span @click="setRemindText('暂不支持在线支付功能')"><i></i>在线支付</span>
  145. <span class="active"><i></i>线下支付</span>
  146. <!--<i class="iconfont icon-xiangyou"></i>-->
  147. </div>
  148. </div>
  149. <div class="buy-wrap" ref="buyWrap">
  150. <div class="fr">
  151. <span class="title">总计:</span><span class="ol-price price inline-block text-ellipse"><span>{{payData.currency | currencyFilter}}</span>
  152. {{allPriceNew | priceFilter}}</span>
  153. <button class="buy-btn" @click="confirmOrder">提交订单</button>
  154. </div>
  155. </div>
  156. <!-- 联系卖家弹框start -->
  157. <link-user :infoObj="currentStoreInfo"
  158. :showLink="showLink"
  159. @closeAction="showLink = false">
  160. </link-user>
  161. <!-- 联系卖家弹框end -->
  162. <!-- 产品清单弹框start -->
  163. <!--<modal-wrapper :showModal="showModal"
  164. :title="'产品清单'"
  165. @closeAction="showModal = false">
  166. <ul class="cGoods-list">
  167. <li v-for="cGoods in currentGoods" class="clearfix">
  168. <div class="fl">
  169. <div class="cg-param-line text-ellipse">
  170. <span>品牌:</span>{{cGoods.brName}}
  171. </div>
  172. <div class="cg-param-line text-ellipse">
  173. <span>物料名称(类目):</span>{{cGoods.kiName}}
  174. </div>
  175. <div class="cg-param-line text-ellipse">
  176. <span>型号:</span>{{cGoods.cmpCode}}
  177. </div>
  178. <div class="cg-param-line text-ellipse">
  179. <span>规格:</span>{{cGoods.spec}}
  180. </div>
  181. </div>
  182. <div class="fr">
  183. <p class="ol-price text-ellipse"><span>{{cGoods.currencyName | currencyFilter}}</span>{{cGoods.taxUnitprice}}</p>
  184. <p class="count text-ellipse">x&nbsp;{{cGoods.number}}</p>
  185. </div>
  186. </li>
  187. </ul>
  188. </modal-wrapper>-->
  189. <!-- 产品清单弹框end -->
  190. <!-- 选择配送方式弹框start -->
  191. <bottom-modal-wrapper :showModal="showDeliveryModal"
  192. :title="'选择配送方式'"
  193. @closeAction="onDeliveryModalClose">
  194. <ul class="delivery-rule-list">
  195. <li v-for="cdr in fareRule[currentDeliveryStoreId]" @click="checkDelivery(cdr)">
  196. <label class="bottom-modal-check mobile-cart-check" :class="{'active': cdr.$checked}">
  197. <input type="checkbox">
  198. <span>{{cdr.method | deliveryRuleFilter}}</span>
  199. </label>
  200. <div class="fr" v-if="cdr.fare && cdr.fare > 0">运费:<span class="ol-price"><span>{{cdr.currencyName | currencyFilter}}</span>{{cdr.fare || 0}}</span></div>
  201. </li>
  202. </ul>
  203. </bottom-modal-wrapper>
  204. <!-- 选择配送方式弹框end -->
  205. <!-- 选择发票弹框start -->
  206. <modal-wrapper :showModal="showInvoiceModal"
  207. :title="'选择发票'"
  208. @closeAction="showInvoiceModal = false">
  209. <ul class="invoice-list">
  210. <li @click="setInvoiceCheck(-1)">
  211. <label class="bottom-modal-check mobile-cart-check" :class="{active: selectedInvoiceIndex === -1}">
  212. <input type="checkbox">
  213. </label>
  214. <span class="inv-head">暂不开票</span>
  215. </li>
  216. <li v-for="(inv, index) in invoiceData" @click="setInvoiceCheck(index)">
  217. <label class="bottom-modal-check mobile-cart-check" :class="{'active': selectedInvoiceIndex === index}">
  218. <input type="checkbox">
  219. </label>
  220. <span class="inv-head inline-block text-ellipse">{{inv.head}}</span>
  221. <img class="inv-type" :src="`/images/mobile/center/user/${inv.kind === 1205 ? 'invoice-spec' : 'invoice-nor'}.png`" alt="">
  222. <div class="content-line" v-if="inv.kind === 1205">
  223. <div class="title inline-block">单位地址:</div>
  224. <div class="content inline-block">{{inv.companyAddress || '-'}}</div>
  225. </div>
  226. <div class="content-line" v-if="inv.kind === 1205">
  227. <div class="title inline-block">单位电话:</div>
  228. <div class="content inline-block">{{inv.companyPhone || '-'}}</div>
  229. </div>
  230. <div class="content-line" v-if="inv.kind === 1205">
  231. <div class="title inline-block">税务登记号:</div>
  232. <div class="content inline-block">{{inv.companyTaxNumber || '-'}}</div>
  233. </div>
  234. <div class="content-line" v-if="inv.kind === 1205">
  235. <div class="title inline-block">开户银行:</div>
  236. <div class="content inline-block">{{inv.bankName || '-'}}</div>
  237. </div>
  238. <div class="content-line" v-if="inv.kind === 1205">
  239. <div class="title inline-block">开户银行账户:</div>
  240. <div class="content inline-block">{{inv.bankAccount || '-'}}</div>
  241. </div>
  242. <div class="content-line">
  243. <div class="title inline-block">收票人:</div>
  244. <div class="content inline-block">{{inv.name || '-'}}</div>
  245. </div>
  246. <div class="content-line">
  247. <div class="title inline-block">联系电话:</div>
  248. <div class="content inline-block">{{inv.telephone || '-'}}</div>
  249. </div>
  250. <div class="content-line">
  251. <div class="title inline-block">详细地址:</div>
  252. <div class="content inline-block">{{inv.area + inv.detailAddress}}</div>
  253. </div>
  254. </li>
  255. </ul>
  256. </modal-wrapper>
  257. <!-- 选择发票弹框end -->
  258. <!-- 选择地址弹框start -->
  259. <!-- <modal-wrapper :showModal="showAddrModal"
  260. :title="'收货地址'"
  261. @closeAction="showAddrModal = false">
  262. <template v-if="!editAddr">
  263. <div class="addr-list-wrap">
  264. <ul class="addr-list">
  265. <li v-for="(addr, index) in addressData" :class="{active: selectedAddressIndex === index}" @click="setAddressCheck(index)">
  266. <div class="info-wrap">
  267. <div class="info-line">
  268. <label class="mobile-cart-check" :class="{active: selectedAddressIndex === index}">
  269. <input type="checkbox">
  270. </label>
  271. <span class="name inline-block text-ellipse">{{addr.name}}</span>
  272. <span class="tel inline-block text-ellipse">{{addr.tel}}</span>
  273. <i class="inline-block" v-if="addr.num === 1">默认地址</i>
  274. </div>
  275. <p>{{addr.area + addr.detailAddress}}</p>
  276. </div>
  277. <div class="edit-addr-area">
  278. <a class="inline-block addr-btn" @click.stop="addAddress(addr)"><i class="iconfont icon-xinzeng"></i>编辑</a>
  279. <a class="inline-block addr-btn" @click.stop="deleteAddress(addr)"><i class="iconfont icon-lajitong"></i>删除</a>
  280. </div>
  281. </li>
  282. </ul>
  283. <button class="add-addr-btn" @click="addAddress()"><i class="iconfont icon-add"></i>添加新地址</button>
  284. </div>
  285. </template>
  286. <address-edit v-else="editAddr" :inFix="true" :data="currentAddress" :isPersonal="true" :isSend="false" @isEditEvent="editClick"></address-edit>
  287. </modal-wrapper>-->
  288. <div class="mobile-modal addr-modal" v-if="showAddrModal" @click="showAddrModal = false">
  289. <div class="mobile-modal-box addr-modal-wrapper" @click="stopPropagation($event)">
  290. <div class="mobile-modal-header">收货地址<i @click="showAddrModal = false" class="icon-guanbi iconfont"></i></div>
  291. <div style="height: 100%;overflow-y: auto;background: #fff;padding-bottom: .3rem;">
  292. <template v-if="!editAddr">
  293. <div class="addr-list-wrap">
  294. <ul class="addr-list">
  295. <li v-for="(addr, index) in addressData" :class="{active: selectedAddressIndex === index}" @click="setAddressCheck(index)">
  296. <div class="info-wrap">
  297. <div class="info-line">
  298. <label class="mobile-cart-check" :class="{active: selectedAddressIndex === index}">
  299. <input type="checkbox">
  300. </label>
  301. <span class="name inline-block text-ellipse">{{addr.name}}</span>
  302. <span class="tel inline-block text-ellipse">{{addr.tel}}</span>
  303. <i class="inline-block" v-if="addr.num === 1">默认地址</i>
  304. </div>
  305. <p>{{addr.area + addr.detailAddress}}</p>
  306. </div>
  307. <div class="edit-addr-area">
  308. <a class="inline-block addr-btn" @click.stop="addAddress(addr)"><i class="iconfont icon-xinzeng"></i>编辑</a>
  309. <a class="inline-block addr-btn" @click.stop="deleteAddress(addr)"><i class="iconfont icon-lajitong"></i>删除</a>
  310. </div>
  311. </li>
  312. </ul>
  313. <button class="add-addr-btn" @click="addAddress()"><i class="iconfont icon-add"></i>添加新地址</button>
  314. </div>
  315. </template>
  316. <address-edit v-else="editAddr" :className="'inWrap'" :data="currentAddress" :isPersonal="true" :isSend="false" @isEditEvent="editClick"></address-edit>
  317. </div>
  318. </div>
  319. </div>
  320. <!-- <div v-if="showAddrModal" class="mobile-hover-pager">
  321. <template v-if="!editAddr">
  322. <div class="addr-list-wrap">
  323. <ul class="addr-list">
  324. <li v-for="(addr, index) in addressData" :class="{active: selectedAddressIndex === index}" @click="setAddressCheck(index)">
  325. <div class="info-wrap">
  326. <div class="info-line">
  327. <label class="mobile-cart-check" :class="{active: selectedAddressIndex === index}">
  328. <input type="checkbox">
  329. </label>
  330. <span class="name inline-block text-ellipse">{{addr.name}}</span>
  331. <span class="tel inline-block text-ellipse">{{addr.tel}}</span>
  332. <i class="inline-block" v-if="addr.num === 1">默认地址</i>
  333. </div>
  334. <p>{{addr.area + addr.detailAddress}}</p>
  335. </div>
  336. <div class="edit-addr-area">
  337. <a class="inline-block addr-btn" @click.stop="addAddress(addr)"><i class="iconfont icon-xinzeng"></i>编辑</a>
  338. <a class="inline-block addr-btn" @click.stop="deleteAddress(addr)"><i class="iconfont icon-lajitong"></i>删除</a>
  339. </div>
  340. </li>
  341. </ul>
  342. <button class="add-addr-btn" @click="addAddress()"><i class="iconfont icon-add"></i>添加新地址</button>
  343. </div>
  344. </template>
  345. <address-edit v-else="editAddr" :inFix="false" :data="currentAddress" :isPersonal="true" :isSend="false" @isEditEvent="editClick"></address-edit>
  346. </div>-->
  347. <!-- 选择地址弹框end -->
  348. <!-- 选择自提点弹框start -->
  349. <modal-wrapper :showModal="showTakeSelfModal"
  350. :title="'选择自提点'"
  351. @closeAction="showTakeSelfModal = false">
  352. <ul class="addr-list takeself-list">
  353. <li v-for="(takeself, index) in takeSelfData[currentTakeSelfStoreId]" @click="checkTakeSelf(index)" :class="{active: index === 0}">
  354. <div class="info-wrap">
  355. <div class="info-line">
  356. <label class="mobile-cart-check" :class="{active: index === 0}">
  357. <input type="checkbox">
  358. </label>
  359. <span class="name inline-block text-ellipse">{{takeself.takename}}</span>
  360. </div>
  361. <p><span>地址:</span>{{takeself.area + takeself.detailAddress}}</p>
  362. <p><span>营业时间:</span>{{takeself.businesstime}}</p>
  363. </div>
  364. </li>
  365. </ul>
  366. </modal-wrapper>
  367. <!-- 选择自提点弹框end -->
  368. <remind-box :title="remindText" :timeoutCount="timeoutCount"></remind-box>
  369. <remind-str :showRemind="showRemindStr"
  370. :text="'手续费:是指第三方支付机构在交易过程中,按照一定的百分比进行收取的费用。手续费金额=订单金额 * 0.45%'"
  371. @closeAction="showRemindStr = false"
  372. ></remind-str>
  373. </div>
  374. </template>
  375. <script>
  376. import { LinkUser, ModalWrapper, BottomModalWrapper, AddressEdit, RemindStr } from '~components/mobile/base'
  377. import { RemindBox } from '~components/mobile/common'
  378. import { goodsPurchaseOperate } from '~utils/mixin'
  379. export default {
  380. layout: 'mobile',
  381. middleware: 'authenticated',
  382. data () {
  383. return {
  384. orderData: [],
  385. // 联系卖家店铺信息
  386. currentStoreInfo: {},
  387. showLink: false,
  388. showModal: false,
  389. showDeliveryModal: false,
  390. showInvoiceModal: false,
  391. showAddrModal: false,
  392. showTakeSelfModal: false,
  393. currentGoods: [],
  394. remindText: '',
  395. timeoutCount: '',
  396. // 配送规则
  397. fareRule: {},
  398. // 自提点
  399. takeSelfData: {},
  400. // 正在修改配送方式的店铺id
  401. currentDeliveryStoreId: '',
  402. // 订单总价
  403. allOrderPrice: 0,
  404. // 选中的发票
  405. selectedInvoiceIndex: -1,
  406. // 选中的地址
  407. selectedAddressIndex: 0,
  408. // 正在修改自提点的店铺id
  409. currentTakeSelfStoreId: '',
  410. editAddr: false,
  411. currentAddress: {},
  412. showRemindStr: false
  413. }
  414. },
  415. mixins: [goodsPurchaseOperate],
  416. components: {
  417. LinkUser,
  418. ModalWrapper,
  419. RemindBox,
  420. BottomModalWrapper,
  421. AddressEdit,
  422. RemindStr
  423. },
  424. fetch ({ store, params }) {
  425. return Promise.all([
  426. store.dispatch('userCenter/loadPayInfo', {enOrderid: params.orderId}),
  427. store.dispatch('userCenter/loadAcceptAddress', {send: false}),
  428. store.dispatch('userCenter/loadPayInvoice')
  429. ])
  430. },
  431. // watch: {
  432. // '$store.state.userCenter.list.invoice.data': {
  433. // handler: function (val) {
  434. // this.invoiceData = this.baseUtils.deepCopy(val)
  435. // if (this.invoiceData && this.invoiceData.length) {
  436. // this.invoiceData.forEach(item => {
  437. // this.$set(item, '$checked', false)
  438. // })
  439. // }
  440. // },
  441. // immediate: true
  442. // }
  443. // },
  444. computed: {
  445. payData () {
  446. // // 人民币为专用增值税发票,美元不开发票 --1205专用增值税发票 --1206普通发票 --1207不开发票
  447. // let invoices = this.baseUtils.deepCopy(this.$store.state.userCenter.list.pay.data)
  448. // if (invoices.currency === 'USD') {
  449. // invoices.invoicetype = 1207
  450. // invoices.paytype = '1103'
  451. // } else {
  452. // invoices.invoicetype = 1205
  453. // invoices.paytype = '1102'
  454. // }
  455. // // 默认选择第三方配送 --1301第三方配送 --卖家配送 --1303上门自提
  456. // invoices.deliverytype = 1301
  457. // return invoices
  458. return this.baseUtils.deepCopy(this.$store.state.userCenter.list.pay.data)
  459. },
  460. addressData () {
  461. return this.$store.state.userCenter.list.address.data
  462. },
  463. invoiceData () {
  464. return this.$store.state.userCenter.list.invoice.data
  465. },
  466. // 已选择完的发票
  467. selectedInvoice () {
  468. return this.selectedInvoiceIndex > -1 ? this.invoiceData[this.selectedInvoiceIndex] : null
  469. },
  470. // // 选择中选中的发票
  471. // checkedInvoiceObj () {
  472. // return this.invoiceData.find(item => {
  473. // return item.$checked
  474. // })
  475. // },
  476. selectedAddress () {
  477. // console.log(this.addressData[this.selectedAddressIndex])
  478. return this.addressData[this.selectedAddressIndex] || {}
  479. },
  480. ruleParamsArr () {
  481. let arr = []
  482. this.orderData.forEach(item => {
  483. item.goodsPrice = this.getTotalPrice(item)
  484. arr.push({
  485. uuid: item.storeid,
  486. fare: this.getTotalPrice(item)
  487. })
  488. })
  489. return arr
  490. },
  491. allPriceNew () {
  492. let allOrderPrice = 0
  493. this.orderData.forEach((item, index) => {
  494. item.goodsPrice = this.baseUtils.priceFixed(this.getTotalPrice(item)) // 总价
  495. // 包含运费的价格
  496. // item.goodsFarePrice = this.baseUtils.priceFixed(item.goodsPrice + (item.fare && item.fare.fare ? item.fare.fare : 0))
  497. item.goodsFarePrice = item.goodsPrice
  498. // this.$set(item, 'goodsFarePrice', item.goodsPrice)
  499. allOrderPrice += item.goodsPrice
  500. })
  501. return allOrderPrice
  502. }
  503. // // 选择自提点的列表统计
  504. // showTakeSelfList () {
  505. // let arr = {}
  506. // if (!this.showDeliveryModal || !this.showTakeSelfModal) { // 为了触发更新
  507. // for (let attr in this.fareRule) {
  508. // arr[attr] = this.fareRule[attr][0] && this.fareRule[attr][0].method === 1303
  509. // }
  510. // }
  511. // return arr
  512. // }
  513. // defaultAddress () {
  514. // return this.addressData.find(item => {
  515. // return item.num === 1
  516. // })
  517. // }
  518. },
  519. created () {
  520. this.initOrderData()
  521. },
  522. methods: {
  523. // 失去焦点事件
  524. blurEvent (type, obj) {
  525. this.$refs.buyWrap.hidden = false
  526. this.$store.commit('option/SET_SHOW_MOBILE_FOOTER', true)
  527. this.$refs.numberInput.forEach((value) => {
  528. value.blur()
  529. })
  530. if (type && obj) {
  531. this.setGoods(type, obj)
  532. }
  533. },
  534. // 获得焦点事件
  535. focusEvent () {
  536. this.$refs.buyWrap.hidden = true
  537. this.$store.commit('option/SET_SHOW_MOBILE_FOOTER', false)
  538. },
  539. initOrderData () {
  540. this.payData.orderDetails.forEach(item => {
  541. item.goods = item.goodsHistory
  542. this.initGoodsStatus(item.goods, item.number)
  543. let current = this.orderData.find(objItem => {
  544. return objItem.storeid === item.storeid
  545. })
  546. if (!current) {
  547. this.orderData.push({
  548. storeName: item.storeName,
  549. storeid: item.storeid,
  550. supEnUU: item.supEnUU,
  551. goods: [item],
  552. $expand: false,
  553. goodsFarePrice: 0,
  554. goodsPrice: 0
  555. })
  556. } else {
  557. current.goods.push(item)
  558. }
  559. })
  560. this.getDeliveryRule()
  561. this.getTakeSelfInfo()
  562. },
  563. getDeliveryRule () {
  564. return this.$http.post(`/trade/distributionRule/usable/rule?area=${this.selectedAddress.area}`, this.ruleParamsArr)
  565. .then(res => {
  566. // this.fareRule = res.data || {}
  567. this.orderData.forEach(item => {
  568. this.fareRule[item.storeid] = [{
  569. fare: 0,
  570. uuid: item.storeid,
  571. ruleName: '卖家配送,全国包邮',
  572. method: 1302,
  573. currencyName: this.payData.currencyName
  574. }]
  575. })
  576. this.initFare()
  577. }, err => {
  578. this.setRemindText(err.response.data || '系统错误')
  579. })
  580. },
  581. getTakeSelfInfo () {
  582. return this.$http.post(`/trade/takeSelf/store/takeSelf`, this.ruleParamsArr)
  583. .then(res => {
  584. this.takeSelfData = res.data || {}
  585. }, err => {
  586. this.setRemindText(err.response.data || '系统错误')
  587. })
  588. },
  589. initFare () {
  590. this.allOrderPrice = 0
  591. this.orderData.forEach(item => {
  592. item.fare = this.fareRule[item.storeid] && this.fareRule[item.storeid].length ? this.fareRule[item.storeid][0] : {}
  593. item.goodsPrice = this.baseUtils.priceFixed(this.getTotalPrice(item)) // 总价
  594. // 包含运费的价格
  595. // item.goodsFarePrice = this.baseUtils.priceFixed(item.goodsPrice + (item.fare && item.fare.fare ? item.fare.fare : 0))
  596. item.goodsFarePrice = item.goodsPrice
  597. this.allOrderPrice += item.goodsFarePrice
  598. })
  599. },
  600. getTotalPrice (storeItem) {
  601. let price = 0
  602. storeItem.goods.forEach(item => {
  603. price += item.goods.currentPrice
  604. })
  605. return Number(price.toFixed(6))
  606. },
  607. getPoundage (item) {
  608. return this.baseUtils.priceFixed((item.goodsFarePrice || item.goodsPrice) * 0.00453)
  609. },
  610. linkSaler (item) {
  611. this.$http.get(`/basic/enterprise/${item.supEnUU}/info`).then(res => {
  612. this.currentStoreInfo = res.data
  613. this.showLink = true
  614. }, err => {
  615. this.setRemindText(err.response.data || '系统错误')
  616. console.log(err)
  617. })
  618. },
  619. showDetailList (goods) {
  620. this.currentGoods = goods
  621. this.showModal = true
  622. },
  623. goodsScroll (type) {
  624. console.log(type)
  625. },
  626. setRemindText: function (str) {
  627. this.remindText = str
  628. this.timeoutCount++
  629. },
  630. checkShowTakeSelf (item) {
  631. return item.fare && item.fare.method === 1303
  632. },
  633. // 显示配送规则弹框
  634. showRuleSet: function (storeid) {
  635. if (this.fareRule[storeid] && this.fareRule[storeid].length) {
  636. this.currentDeliveryStoreId = storeid
  637. this.clearCurrentDeliveryCheck()
  638. this.fareRule[this.currentDeliveryStoreId][0].$checked = true
  639. this.showDeliveryModal = true
  640. }
  641. // console.log(storeid)
  642. },
  643. clearCurrentDeliveryCheck () {
  644. this.fareRule[this.currentDeliveryStoreId].forEach(item => {
  645. if (!item.hasOwnProperty('$checked')) {
  646. this.$set(item, '$checked', false)
  647. } else {
  648. item.$checked = false
  649. }
  650. })
  651. },
  652. checkDelivery (cdr) {
  653. if (!cdr.$checked) {
  654. this.clearCurrentDeliveryCheck()
  655. cdr.$checked = true
  656. }
  657. },
  658. onDeliveryModalClose (isSubmit) {
  659. if (!isSubmit) {
  660. this.showDeliveryModal = false
  661. // this.currentDeliveryRule = {}
  662. } else {
  663. let currentDi = this.fareRule[this.currentDeliveryStoreId]
  664. for (let i = 0; i < currentDi.length; i++) {
  665. if (currentDi[i].$checked) {
  666. this.baseUtils.exchangeArr(currentDi, i, 0)
  667. break
  668. }
  669. }
  670. this.initFare()
  671. this.showDeliveryModal = false
  672. }
  673. },
  674. // 显示自提点弹框
  675. showTakeSelfSet (storeid) {
  676. if (this.takeSelfData[storeid] && this.takeSelfData[storeid].length) {
  677. this.currentTakeSelfStoreId = storeid
  678. this.showTakeSelfModal = true
  679. }
  680. },
  681. checkTakeSelf (index) {
  682. // for (let i = 0; i < this.takeSelfData[this.currentTakeSelfStoreId].length; i++) {
  683. // if (item.id === this.takeSelfData[this.currentTakeSelfStoreId][i].id) {
  684. //
  685. // break
  686. // }
  687. // }
  688. if (index > 0) {
  689. this.baseUtils.exchangeArr(this.takeSelfData[this.currentTakeSelfStoreId], index, 0)
  690. }
  691. this.showTakeSelfModal = false
  692. },
  693. setInvoiceCheck (index) {
  694. if (this.selectedInvoiceIndex === index) {
  695. return
  696. }
  697. this.selectedInvoiceIndex = index
  698. this.showInvoiceModal = false
  699. },
  700. openInvoiceModal () {
  701. if (this.invoiceData && this.invoiceData.length) {
  702. this.showInvoiceModal = true
  703. } else {
  704. this.setRemindText('暂无发票信息,请前往pc端维护')
  705. }
  706. },
  707. setAddressCheck (index) {
  708. if (this.selectedAddressIndex === index) {
  709. this.showAddrModal = false
  710. return
  711. }
  712. this.selectedAddressIndex = index
  713. this.showAddrModal = false
  714. this.getDeliveryRule()
  715. },
  716. openAddrModal () {
  717. this.showAddrModal = true
  718. if (!this.selectedAddress.id) {
  719. this.editAddr = true
  720. }
  721. },
  722. // 配送规则校验
  723. checkRule () {
  724. let flag = true
  725. for (let attr in this.fareRule) {
  726. if (!this.fareRule[attr].length) {
  727. flag = false
  728. }
  729. }
  730. return flag
  731. },
  732. // 收货地址校验
  733. checkAddress () {
  734. if (!this.selectedAddress || !this.selectedAddress.id) {
  735. this.setRemindText('请选择收货地址')
  736. return false
  737. } else if (this.selectedAddress.area.indexOf('香港') > -1) {
  738. if (this.payData.currency === 'RMB') {
  739. this.setRemindText('当前选择的币别是RMB,地址却是香港')
  740. return false
  741. }
  742. } else {
  743. if (this.payData.currency === 'USD') {
  744. this.setRemindText('当前选择的币别是USD,地址却是内陆')
  745. return false
  746. }
  747. }
  748. return true
  749. },
  750. // 提交订单流程
  751. confirmOrder () {
  752. if (this.accountInvalid) {
  753. this.setRemindText('您的账户安全等级较低,请先在pc端进行信息完善')
  754. } else {
  755. if (this.payData.status === 502 || this.payData.status === 503) {
  756. this.underLinePaySubmitted()
  757. } else {
  758. if (!this.checkRule()) {
  759. this.setRemindText('当前地址部分卖家无法配送,请重新选择地址或与卖家协商处理')
  760. } else {
  761. let infos = []
  762. let info = this.generateOrderInfo()
  763. if (info) {
  764. infos.push(info)
  765. this.doSubmit(infos)
  766. }
  767. }
  768. }
  769. }
  770. },
  771. // 待付款订单-线下付款
  772. underLinePaySubmitted () {
  773. let arr = []
  774. if (this.payData.orderids) {
  775. arr = this.payData.orderids.split(',')
  776. } else {
  777. arr.push(this.payData.orderid)
  778. }
  779. let param = {
  780. orderid: this.baseUtils.enidfilter(arr.join('-'))
  781. }
  782. // 跳转至付款页面
  783. console.log('订单已存在,直接跳转至付款页面')
  784. this.$router.push(`/mobile/center/user/doPay/${encodeURIComponent(param.orderid)}`)
  785. return param
  786. },
  787. // 处理订单数据
  788. generateOrderInfo () {
  789. let orderInfo = {
  790. id: this.payData.id,
  791. orderid: this.payData.orderid
  792. }
  793. if (this.payData.currency === 'USD' && this.selectedInvoiceIndex !== -1) {
  794. this.setRemindText('美元请选择暂不开票')
  795. return false
  796. }
  797. if (this.checkAddress()) {
  798. orderInfo.add_id = this.selectedAddress.id
  799. } else {
  800. return false
  801. }
  802. let submitParam = this.orderSubmitParams()
  803. // 发票信息
  804. if (this.selectedInvoice) {
  805. if (this.selectedInvoice.kind === 1205) {
  806. orderInfo.invoicetype = '1205'
  807. } else if (this.selectedInvoice.kind === 1206) {
  808. if (submitParam.includeConsignment) {
  809. this.setRemindText('订单中包含寄售类型商品,请选择专票')
  810. return false
  811. }
  812. orderInfo.invoicetype = '1206'
  813. }
  814. if (this.selectedInvoice.id) {
  815. orderInfo.invoiceid = this.selectedInvoice.id
  816. } else {
  817. this.setRemindText('请添加发票信息')
  818. return false
  819. }
  820. } else {
  821. orderInfo.invoicetype = '1207'
  822. }
  823. orderInfo.totalprice = submitParam.goodsPrice
  824. orderInfo.currency = this.payData.currency
  825. orderInfo.orderRemark = JSON.stringify(submitParam.remarkObj)
  826. // 1103线下 1102线上
  827. orderInfo.paytype = '1103'
  828. orderInfo.splitInfo = {
  829. ruleList: JSON.stringify(submitParam.ruleList)
  830. // takeList: JSON.stringify(submitParam.takeList)
  831. }
  832. orderInfo.orderDetails = this.convertOrderDetailParams()
  833. // console.log(orderInfo)
  834. return orderInfo
  835. // 人民币为专用增值税发票,美元不开发票 --1205专用增值税发票 --1206普通发票 --1207不开发票
  836. // 默认选择第三方配送 --1301第三方配送 --卖家配送 --1303上门自提
  837. },
  838. // 订单提交的参数整合
  839. orderSubmitParams () {
  840. let params = {
  841. // 不包含运费的价格
  842. goodsPrice: 0,
  843. // 备注
  844. remarkObj: {},
  845. // 配送方式
  846. ruleList: {},
  847. // // 自提点
  848. // takeList: {},
  849. // 是否包含寄售商品
  850. includeConsignment: false
  851. }
  852. this.orderData.forEach(item => {
  853. params.goodsPrice += item.goodsPrice
  854. params.remarkObj[item.storeid] = item.remark
  855. params.ruleList[item.storeid] = item.fare
  856. // params.takeList[item.storeid] = this.checkShowTakeSelf(item) && this.takeSelfData[item.storeid] ? [0] : null
  857. if (item.storeid === '33069557578d44e69bd91ad12d28a8d4') {
  858. params.includeConsignment = true
  859. }
  860. })
  861. return params
  862. },
  863. // 提取要提交到服务器的订单明细goods数据
  864. convertOrderDetailParams () {
  865. let orderDetails = []
  866. this.payData.orderDetails.forEach(item => {
  867. orderDetails.push({
  868. id: item.id,
  869. number: item.goods.purchaseNumber,
  870. taxUnitprice: item.taxUnitprice,
  871. remark: item.remark,
  872. goodsnumber: item.goodsnumber,
  873. storeid: item.storeid
  874. })
  875. })
  876. return orderDetails
  877. },
  878. // 提交订单请求
  879. doSubmit (orders) {
  880. this.$http.put(`/trade/order/${this.baseUtils.enidfilter(this.payData.orderid)}/ensure`, orders)
  881. .then(res => {
  882. console.log(res)
  883. if (res.data.code === 1) {
  884. if (res.data.data && res.data.data[0]) {
  885. let orderids = []
  886. let batchCodes = []
  887. for (let i = 0; i < res.data.data.length; i++) {
  888. orderids.push(res.data.data[i].orderid)
  889. for (let j = 0; j < res.data.data[i].orderDetails.length; j++) {
  890. batchCodes.push(res.data.data[i].orderDetails[j].batchCode)
  891. }
  892. }
  893. // 如果不是立即购买,删除购物车里的对应信息
  894. if (!this.payData.buyNow) {
  895. this.$http.put('/trade/cart/delete', batchCodes)
  896. }
  897. // 跳转至订单提交完成页面
  898. console.log('订单提交完成,跳转至结果页')
  899. this.$router.push(`/mobile/center/user/doPay/${encodeURIComponent(this.baseUtils.enidfilter(orderids.join('-')))}`)
  900. }
  901. } else {
  902. if (res.data.data.code === 6) {
  903. this.setRemindText(res.data.message + ',请刷新界面之后重新操作')
  904. } else if (res.data.data.code === 7) {
  905. this.setRemindText(res.data.message + ',将为您跳转到购物车界面')
  906. setTimeout(() => {
  907. this.$router.push('/mobile/center/user/cart')
  908. }, 1500)
  909. } else {
  910. this.setRemindText(res.data.message)
  911. }
  912. }
  913. }, err => {
  914. console.log(err)
  915. this.setRemindText(err.response.data || '提交订单失败')
  916. })
  917. },
  918. reloadAddress () {
  919. this.$store.dispatch('userCenter/loadAcceptAddress', {send: false})
  920. },
  921. editClick (obj) {
  922. if (obj.id) {
  923. this.reloadAddress()
  924. }
  925. this.editAddr = false
  926. },
  927. addAddress (item) {
  928. if (!item) {
  929. this.currentAddress = {}
  930. } else {
  931. this.currentAddress = item
  932. }
  933. this.editAddr = true
  934. },
  935. deleteAddress (item) {
  936. this.$http.put(`/trade/address/delete/${item.id}`).then(res => {
  937. this.setRemindText('删除成功')
  938. this.reloadAddress()
  939. }, err => {
  940. this.setRemindText(err.response.data || '删除失败,系统错误')
  941. })
  942. }
  943. }
  944. }
  945. </script>
  946. <style lang="scss" scoped>
  947. $red-text: #f43938;
  948. .mobile-pay {
  949. margin-bottom: 2.02rem;
  950. .pay-head {
  951. height: 1.3rem;
  952. padding: .25rem 0 0 .21rem;
  953. position: relative;
  954. border-bottom: .18rem solid #f1f3f7;
  955. background: url('/images/mobile/center/user/addr-border.png') no-repeat;
  956. background-size: contain;
  957. background-position: bottom;
  958. .info {
  959. padding-left: .43rem;
  960. font-size: .3rem;
  961. font-weight: bold;
  962. }
  963. .addr {
  964. width: 6.5rem;
  965. overflow: hidden;
  966. text-overflow: ellipsis;
  967. white-space: nowrap;
  968. img {
  969. height: .29rem;
  970. margin-right: .16rem;
  971. }
  972. span {
  973. font-size: .26rem;
  974. }
  975. }
  976. .icon-xiangyou {
  977. position: absolute;
  978. right: .21rem;
  979. top: .52rem;
  980. color: #bebebe;
  981. }
  982. .no-addr {
  983. margin-top: .15rem;
  984. text-align: center;
  985. padding-right: .21rem;
  986. }
  987. }
  988. .pay-store-list {
  989. .ps-item {
  990. border-bottom: .18rem solid #f1f3f7;
  991. .ps-store-name {
  992. height: .89rem;
  993. line-height: .89rem;
  994. padding: 0 .25rem;
  995. font-size: .28rem;
  996. text-align: left;
  997. .seller-name {
  998. max-width: 5rem;
  999. position: relative;
  1000. padding-right: .2rem;
  1001. span {
  1002. color: #666;
  1003. }
  1004. i {
  1005. position: absolute;
  1006. right: 0;
  1007. font-size: .32rem;
  1008. color: #bebebe;
  1009. }
  1010. }
  1011. }
  1012. .ps-goods-info {
  1013. border-top: 1px solid #e4e4e4;
  1014. border-bottom: 1px solid #e4e4e4;
  1015. .ps-goods-list {
  1016. background: #f9f9f8;
  1017. height: 100%;
  1018. li {
  1019. border-bottom: 1px solid #e4e4e4;
  1020. width: 100%;
  1021. .fl {
  1022. margin-right: .23rem;
  1023. width: 3.49rem;
  1024. }
  1025. .fr {
  1026. width: 3.2rem;
  1027. .ol-price {
  1028. font-size: .26rem;
  1029. }
  1030. }
  1031. .ps-goods-item {
  1032. font-size: .28rem;
  1033. > span {
  1034. color: #666;
  1035. }
  1036. }
  1037. .single-count {
  1038. height: .61rem;
  1039. line-height: .61rem;
  1040. background: #ebebeb;
  1041. font-size: .28rem;
  1042. color: #666;
  1043. text-align: right;
  1044. padding: 0 .21rem 0 .25rem;
  1045. .ol-price {
  1046. width: 2.1rem;
  1047. font-size: .26rem;
  1048. }
  1049. }
  1050. }
  1051. }
  1052. .show-more-psgoods {
  1053. height: .67rem;
  1054. line-height: .67rem;
  1055. font-size: .24rem;
  1056. color: #999;
  1057. text-align: center;
  1058. i {
  1059. font-size: .24rem;
  1060. color: #999;
  1061. }
  1062. }
  1063. }
  1064. }
  1065. }
  1066. .pay-price-title {
  1067. /*float: left;*/
  1068. font-size: .3rem;
  1069. }
  1070. .ps-operate-line {
  1071. height: .89rem;
  1072. line-height: .89rem;
  1073. padding: 0 .21rem 0 .25rem;
  1074. border-bottom: 1px solid #e4e4e4;
  1075. font-size: .28rem;
  1076. .fr {
  1077. height: 100%;
  1078. .inline-block {
  1079. line-height: normal;
  1080. text-align: right;
  1081. span {
  1082. color: #666;
  1083. /* &:first-child {
  1084. color: #333;
  1085. font-weight: bold;
  1086. display: block;
  1087. }*/
  1088. &.red {
  1089. color: $red-text;
  1090. }
  1091. }
  1092. }
  1093. .delivery-select {
  1094. width: 1.54rem;
  1095. height: .5rem;
  1096. line-height: .5rem;
  1097. text-align: center;
  1098. border: 1px solid #a1a1a1;
  1099. color: #999;
  1100. background: url('/images/mobile/center/user/delivery.png') no-repeat;
  1101. background-size: .2rem .2rem;
  1102. background-position: 1.3rem .25rem;
  1103. border-radius: .03rem;
  1104. margin-left: .56rem;
  1105. &:first-child {
  1106. margin-left: 0;
  1107. }
  1108. &.active {
  1109. background: url('/images/mobile/center/user/delivery-active.png') no-repeat;
  1110. background-size: .2rem .2rem;
  1111. background-position: 1.3rem .25rem;
  1112. color: #3e85f7;
  1113. border-color: #3e85f7;
  1114. }
  1115. }
  1116. i {
  1117. color: #bebebe;
  1118. margin-left: .14rem;
  1119. }
  1120. }
  1121. input {
  1122. width: 4.78rem;
  1123. margin-left: .68rem;
  1124. padding: 0 .1rem;
  1125. height: .45rem;
  1126. }
  1127. &.ps-price {
  1128. text-align: right;
  1129. /*padding-right: .31rem;*/
  1130. .inline-block {
  1131. display: inline-block;
  1132. width: 1.1rem;
  1133. font-size: .26rem;
  1134. text-align: right;
  1135. }
  1136. }
  1137. &.ps-fare {
  1138. line-height: .43rem;
  1139. font-size: .24rem;
  1140. .text-ellipse {
  1141. text-align: right;
  1142. color: #333;
  1143. .ol-price {
  1144. display: inline-block;
  1145. width: 2.3rem;
  1146. text-align: left;
  1147. font-size: .26rem;
  1148. span {
  1149. font-size: .26rem;
  1150. }
  1151. }
  1152. .pay-price-title {
  1153. display: inline-block;
  1154. width: 1.1rem;
  1155. font-size: .24rem;
  1156. text-align: right;
  1157. }
  1158. .fare {
  1159. text-decoration: line-through;
  1160. color: #666!important;
  1161. }
  1162. i {
  1163. font-size: .38rem;
  1164. color: #adacac;
  1165. }
  1166. .tag {
  1167. height: .35rem;
  1168. line-height: .35rem;
  1169. width: .58rem;
  1170. font-size: .22rem;
  1171. color: #fff;
  1172. background: #15b262;
  1173. border-radius: .02rem;
  1174. text-align: center;
  1175. margin-left: .14rem;
  1176. margin-right: .06rem;
  1177. position: relative;
  1178. top: -.06rem;
  1179. }
  1180. }
  1181. }
  1182. &.ps-address {
  1183. height: auto;
  1184. line-height: unset;
  1185. padding: .25rem 0;
  1186. position: relative;
  1187. padding-left: .21rem;
  1188. border-bottom: .11rem solid #f1f3f7;
  1189. > div {
  1190. width: 6.76rem;
  1191. padding-right: .26rem;
  1192. p {
  1193. font-size: .28rem;
  1194. }
  1195. }
  1196. i {
  1197. color: #bebebe;
  1198. }
  1199. .addr {
  1200. margin-bottom: .33rem;
  1201. .area {
  1202. width: 5rem;
  1203. word-break: break-all;
  1204. padding-left: .2rem;
  1205. }
  1206. }
  1207. .info {
  1208. .info-name {
  1209. margin-right: .46rem;
  1210. }
  1211. .info-phone {
  1212. margin-left: .5rem;
  1213. }
  1214. }
  1215. .no-addr {
  1216. text-align: center;
  1217. }
  1218. }
  1219. &.pay-operate {
  1220. border-bottom: .11rem solid #f1f3f7;
  1221. padding-top: 0;
  1222. .fr {
  1223. line-height: .78rem;
  1224. i {
  1225. position: static;
  1226. }
  1227. span {
  1228. color: #333;
  1229. font-size: .28rem;
  1230. i {
  1231. width: .23rem;
  1232. height: .23rem;
  1233. background: #bfbfbf;
  1234. display: inline-block;
  1235. border-radius: .04rem;
  1236. margin-right: .16rem;
  1237. }
  1238. &.active {
  1239. i {
  1240. background: #09a823;
  1241. }
  1242. }
  1243. &:first-child {
  1244. margin-right: 2.3rem;
  1245. }
  1246. }
  1247. }
  1248. }
  1249. &.pay-invoice {
  1250. border-bottom: .11rem solid #f1f3f7;
  1251. .fr {
  1252. font-size: .28rem;
  1253. i {
  1254. float: right;
  1255. }
  1256. p {
  1257. position: relative;
  1258. bottom: 0;
  1259. }
  1260. .inv-head {
  1261. max-width: 4rem;
  1262. }
  1263. .inv-type {
  1264. font-size: .24rem;
  1265. color: #999;
  1266. }
  1267. }
  1268. }
  1269. &.ps-operate-takeself {
  1270. height: 1.35rem;
  1271. line-height: 1.35rem;
  1272. .fr {
  1273. span {
  1274. display: block;
  1275. max-width: 5.5rem;
  1276. overflow: hidden;
  1277. text-overflow: ellipsis;
  1278. white-space: nowrap;
  1279. }
  1280. }
  1281. }
  1282. }
  1283. .ol-price {
  1284. display: inline-block;
  1285. width: 2.25rem;
  1286. color: #f43938 !important;
  1287. font-size: .32rem;
  1288. text-align: left;
  1289. span {
  1290. font-size: .26rem;
  1291. }
  1292. }
  1293. .buy-wrap {
  1294. position: fixed;
  1295. bottom: .98rem;
  1296. height: 1.02rem;
  1297. line-height: 1.02rem;
  1298. padding-left: .27rem;
  1299. background: #fff;
  1300. width: 100%;
  1301. border-top: .02rem solid #ccc;
  1302. .fr {
  1303. .title {
  1304. font-size: .28rem;
  1305. margin-right: .13rem;
  1306. }
  1307. .price {
  1308. max-width: 3.6rem;
  1309. width: auto;
  1310. vertical-align: top;
  1311. span {
  1312. margin-right: .08rem;
  1313. }
  1314. margin-right: .13rem;
  1315. }
  1316. .buy-btn {
  1317. width: 2.08rem;
  1318. height: 1.04rem;
  1319. line-height: 1.04rem;
  1320. vertical-align: middle;
  1321. text-align: center;
  1322. font-size: .28rem;
  1323. color: #fff;
  1324. background: #3f84f6;
  1325. }
  1326. }
  1327. }
  1328. .cGoods-list {
  1329. background: #fff;
  1330. li {
  1331. padding: .3rem .32rem;
  1332. border-bottom: 1px solid #e4e4e4;
  1333. .fl {
  1334. .cg-param-line {
  1335. width: 3.65rem;
  1336. margin-bottom: .23rem;
  1337. &:last-child {
  1338. margin-bottom: 0;
  1339. }
  1340. font-size: .28rem;
  1341. span {
  1342. color: #666;
  1343. }
  1344. }
  1345. }
  1346. .fr {
  1347. text-align: right;
  1348. p {
  1349. width: 2.3rem;
  1350. }
  1351. .ol-price {
  1352. margin-top: .59rem;
  1353. }
  1354. .count {
  1355. color: #999;
  1356. font-size: .24rem;
  1357. margin-top: .32rem;
  1358. }
  1359. }
  1360. }
  1361. }
  1362. .delivery-rule-list {
  1363. li {
  1364. background: #fff;
  1365. text-align: left;
  1366. padding: 0 .31rem 0 .25rem;
  1367. height: .94rem;
  1368. line-height: .94rem;
  1369. .fr {
  1370. height: 100%;
  1371. .ol-price {
  1372. margin-left: .23rem;
  1373. }
  1374. }
  1375. }
  1376. }
  1377. .invoice-list {
  1378. background: #f1f3f7;
  1379. padding: .19rem 0;
  1380. li {
  1381. margin-bottom: .19rem;
  1382. position: relative;
  1383. &:last-child {
  1384. margin-bottom: 0;
  1385. }
  1386. background: #fff;
  1387. padding: .26rem .16rem .32rem .25rem;
  1388. .inv-head {
  1389. margin-left: .17rem;
  1390. max-width: 5.3rem;
  1391. }
  1392. .inv-type {
  1393. position: absolute;
  1394. right: 0;
  1395. top: 0;
  1396. height: .85rem;
  1397. }
  1398. .content-line {
  1399. margin-top: .23rem;
  1400. padding-left: .53rem;
  1401. .title {
  1402. width: 34%;
  1403. text-align: right;
  1404. vertical-align: top;
  1405. }
  1406. .content {
  1407. width: 66%;
  1408. word-break: break-all;
  1409. }
  1410. }
  1411. }
  1412. }
  1413. .addr-list-wrap {
  1414. background: #f1f3f7;
  1415. padding: .19rem 0;
  1416. }
  1417. .addr-list {
  1418. background: #f1f3f7;
  1419. li {
  1420. margin-bottom: .19rem;
  1421. position: relative;
  1422. &:last-child {
  1423. margin-bottom: 0;
  1424. }
  1425. background: #fff;
  1426. .info-wrap {
  1427. padding: .35rem .25rem .28rem;
  1428. }
  1429. .info-line {
  1430. font-size: .3rem;
  1431. color: #666;
  1432. .name {
  1433. margin: 0 .27rem 0 .17rem;
  1434. max-width: 1.5rem;
  1435. }
  1436. .tel {
  1437. max-width: 2.3rem;
  1438. }
  1439. i {
  1440. width: 1.08rem;
  1441. height: .25rem;
  1442. line-height: .25rem;
  1443. font-size: .24rem;
  1444. text-align: center;
  1445. border: 1px solid #fc2706;
  1446. border-radius: .04rem;
  1447. color: #f43938;
  1448. font-style: normal;
  1449. margin-left: .48rem;
  1450. }
  1451. }
  1452. p {
  1453. margin-top: .19rem;
  1454. word-break: break-all;
  1455. padding-left: .54rem;
  1456. font-size: .28rem;
  1457. color: #999;
  1458. }
  1459. &.active {
  1460. .info-line {
  1461. color: #f43938;
  1462. }
  1463. p {
  1464. color: #666;
  1465. }
  1466. }
  1467. .edit-addr-area {
  1468. border-top: 1px solid #d9d9d9;
  1469. .addr-btn {
  1470. width: 50%;
  1471. height: .8rem;
  1472. line-height: .8rem;
  1473. color: #333;
  1474. text-align: center;
  1475. i {
  1476. font-size: .34rem;
  1477. margin-right: .1rem;
  1478. }
  1479. &:first-child {
  1480. border-right: 1px solid #d9d9d9;
  1481. }
  1482. }
  1483. }
  1484. }
  1485. }
  1486. .add-addr-btn {
  1487. /*position: absolute;*/
  1488. /*bottom: .26rem;*/
  1489. /*left: .52rem;*/
  1490. width: 5.67rem;
  1491. text-align: center;
  1492. display: block;
  1493. margin: .26rem auto .07rem;
  1494. height: .77rem;
  1495. line-height: .77rem;
  1496. background: #3f84f6;
  1497. border-radius: .08rem;
  1498. color: #fff;
  1499. font-size: .32rem;
  1500. i {
  1501. margin-right: .08rem;
  1502. }
  1503. }
  1504. .takeself-list {
  1505. li {
  1506. .info-line {
  1507. .name {
  1508. max-width: 5.3rem;
  1509. }
  1510. }
  1511. }
  1512. }
  1513. .input-line {
  1514. $group-height: .4rem;
  1515. input {
  1516. width: .91rem;
  1517. height: $group-height;
  1518. border-top: 1px solid #ddd;
  1519. border-bottom: 1px solid #ddd;
  1520. vertical-align: middle;
  1521. border-radius: 0;
  1522. padding: 0 .05rem;
  1523. text-align: center;
  1524. line-height: $group-height;
  1525. /* position: relative;
  1526. top: .01rem;*/
  1527. }
  1528. span {
  1529. width: .35rem;
  1530. height: $group-height;
  1531. line-height: .38rem;
  1532. text-align: center;
  1533. border: 1px solid #ddd;
  1534. font-size: .24rem;
  1535. &:first-child {
  1536. border-top-left-radius: .05rem;
  1537. border-bottom-left-radius: .05rem;
  1538. }
  1539. &:last-child {
  1540. border-top-right-radius: .05rem;
  1541. border-bottom-right-radius: .05rem;
  1542. }
  1543. &.disab {
  1544. background: #e8e8e8;
  1545. }
  1546. }
  1547. }
  1548. }
  1549. .addr-modal {
  1550. .addr-modal-wrapper {
  1551. top: 1.5rem;
  1552. bottom: 1.5rem;
  1553. left: .2rem;
  1554. right: .2rem;
  1555. background: #fff;
  1556. }
  1557. }
  1558. </style>