_orderId.vue 54 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565
  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" 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. if (type && obj) {
  528. this.setGoods(type, obj)
  529. }
  530. },
  531. // 获得焦点事件
  532. focusEvent () {
  533. this.$refs.buyWrap.hidden = true
  534. this.$store.commit('option/SET_SHOW_MOBILE_FOOTER', false)
  535. },
  536. initOrderData () {
  537. this.payData.orderDetails.forEach(item => {
  538. item.goods = item.goodsHistory
  539. this.initGoodsStatus(item.goods, item.number)
  540. let current = this.orderData.find(objItem => {
  541. return objItem.storeid === item.storeid
  542. })
  543. if (!current) {
  544. this.orderData.push({
  545. storeName: item.storeName,
  546. storeid: item.storeid,
  547. supEnUU: item.supEnUU,
  548. goods: [item],
  549. $expand: false,
  550. goodsFarePrice: 0,
  551. goodsPrice: 0
  552. })
  553. } else {
  554. current.goods.push(item)
  555. }
  556. })
  557. this.getDeliveryRule()
  558. this.getTakeSelfInfo()
  559. },
  560. getDeliveryRule () {
  561. return this.$http.post(`/trade/distributionRule/usable/rule?area=${this.selectedAddress.area}`, this.ruleParamsArr)
  562. .then(res => {
  563. // this.fareRule = res.data || {}
  564. this.orderData.forEach(item => {
  565. this.fareRule[item.storeid] = [{
  566. fare: 0,
  567. uuid: item.storeid,
  568. ruleName: '卖家配送,全国包邮',
  569. method: 1302,
  570. currencyName: this.payData.currencyName
  571. }]
  572. })
  573. this.initFare()
  574. }, err => {
  575. this.setRemindText(err.response.data || '系统错误')
  576. })
  577. },
  578. getTakeSelfInfo () {
  579. return this.$http.post(`/trade/takeSelf/store/takeSelf`, this.ruleParamsArr)
  580. .then(res => {
  581. this.takeSelfData = res.data || {}
  582. }, err => {
  583. this.setRemindText(err.response.data || '系统错误')
  584. })
  585. },
  586. initFare () {
  587. this.allOrderPrice = 0
  588. this.orderData.forEach(item => {
  589. item.fare = this.fareRule[item.storeid] && this.fareRule[item.storeid].length ? this.fareRule[item.storeid][0] : {}
  590. item.goodsPrice = this.baseUtils.priceFixed(this.getTotalPrice(item)) // 总价
  591. // 包含运费的价格
  592. // item.goodsFarePrice = this.baseUtils.priceFixed(item.goodsPrice + (item.fare && item.fare.fare ? item.fare.fare : 0))
  593. item.goodsFarePrice = item.goodsPrice
  594. this.allOrderPrice += item.goodsFarePrice
  595. })
  596. },
  597. getTotalPrice (storeItem) {
  598. let price = 0
  599. storeItem.goods.forEach(item => {
  600. price += item.goods.currentPrice
  601. })
  602. return Number(price.toFixed(6))
  603. },
  604. getPoundage (item) {
  605. return this.baseUtils.priceFixed((item.goodsFarePrice || item.goodsPrice) * 0.00453)
  606. },
  607. linkSaler (item) {
  608. this.$http.get(`/basic/enterprise/${item.supEnUU}/info`).then(res => {
  609. this.currentStoreInfo = res.data
  610. this.showLink = true
  611. }, err => {
  612. this.setRemindText(err.response.data || '系统错误')
  613. console.log(err)
  614. })
  615. },
  616. showDetailList (goods) {
  617. this.currentGoods = goods
  618. this.showModal = true
  619. },
  620. goodsScroll (type) {
  621. console.log(type)
  622. },
  623. setRemindText: function (str) {
  624. this.remindText = str
  625. this.timeoutCount++
  626. },
  627. checkShowTakeSelf (item) {
  628. return item.fare && item.fare.method === 1303
  629. },
  630. // 显示配送规则弹框
  631. showRuleSet: function (storeid) {
  632. if (this.fareRule[storeid] && this.fareRule[storeid].length) {
  633. this.currentDeliveryStoreId = storeid
  634. this.clearCurrentDeliveryCheck()
  635. this.fareRule[this.currentDeliveryStoreId][0].$checked = true
  636. this.showDeliveryModal = true
  637. }
  638. // console.log(storeid)
  639. },
  640. clearCurrentDeliveryCheck () {
  641. this.fareRule[this.currentDeliveryStoreId].forEach(item => {
  642. if (!item.hasOwnProperty('$checked')) {
  643. this.$set(item, '$checked', false)
  644. } else {
  645. item.$checked = false
  646. }
  647. })
  648. },
  649. checkDelivery (cdr) {
  650. if (!cdr.$checked) {
  651. this.clearCurrentDeliveryCheck()
  652. cdr.$checked = true
  653. }
  654. },
  655. onDeliveryModalClose (isSubmit) {
  656. if (!isSubmit) {
  657. this.showDeliveryModal = false
  658. // this.currentDeliveryRule = {}
  659. } else {
  660. let currentDi = this.fareRule[this.currentDeliveryStoreId]
  661. for (let i = 0; i < currentDi.length; i++) {
  662. if (currentDi[i].$checked) {
  663. this.baseUtils.exchangeArr(currentDi, i, 0)
  664. break
  665. }
  666. }
  667. this.initFare()
  668. this.showDeliveryModal = false
  669. }
  670. },
  671. // 显示自提点弹框
  672. showTakeSelfSet (storeid) {
  673. if (this.takeSelfData[storeid] && this.takeSelfData[storeid].length) {
  674. this.currentTakeSelfStoreId = storeid
  675. this.showTakeSelfModal = true
  676. }
  677. },
  678. checkTakeSelf (index) {
  679. // for (let i = 0; i < this.takeSelfData[this.currentTakeSelfStoreId].length; i++) {
  680. // if (item.id === this.takeSelfData[this.currentTakeSelfStoreId][i].id) {
  681. //
  682. // break
  683. // }
  684. // }
  685. if (index > 0) {
  686. this.baseUtils.exchangeArr(this.takeSelfData[this.currentTakeSelfStoreId], index, 0)
  687. }
  688. this.showTakeSelfModal = false
  689. },
  690. setInvoiceCheck (index) {
  691. if (this.selectedInvoiceIndex === index) {
  692. return
  693. }
  694. this.selectedInvoiceIndex = index
  695. this.showInvoiceModal = false
  696. },
  697. openInvoiceModal () {
  698. if (this.invoiceData && this.invoiceData.length) {
  699. this.showInvoiceModal = true
  700. } else {
  701. this.setRemindText('暂无发票信息,请前往pc端维护')
  702. }
  703. },
  704. setAddressCheck (index) {
  705. if (this.selectedAddressIndex === index) {
  706. this.showAddrModal = false
  707. return
  708. }
  709. this.selectedAddressIndex = index
  710. this.showAddrModal = false
  711. this.getDeliveryRule()
  712. },
  713. openAddrModal () {
  714. this.showAddrModal = true
  715. if (!this.selectedAddress.id) {
  716. this.editAddr = true
  717. }
  718. },
  719. // 配送规则校验
  720. checkRule () {
  721. let flag = true
  722. for (let attr in this.fareRule) {
  723. if (!this.fareRule[attr].length) {
  724. flag = false
  725. }
  726. }
  727. return flag
  728. },
  729. // 收货地址校验
  730. checkAddress () {
  731. if (!this.selectedAddress || !this.selectedAddress.id) {
  732. this.setRemindText('请选择收货地址')
  733. return false
  734. } else if (this.selectedAddress.area.indexOf('香港') > -1) {
  735. if (this.payData.currency === 'RMB') {
  736. this.setRemindText('当前选择的币别是RMB,地址却是香港')
  737. return false
  738. }
  739. } else {
  740. if (this.payData.currency === 'USD') {
  741. this.setRemindText('当前选择的币别是USD,地址却是内陆')
  742. return false
  743. }
  744. }
  745. return true
  746. },
  747. // 提交订单流程
  748. confirmOrder () {
  749. if (this.accountInvalid) {
  750. this.setRemindText('您的账户安全等级较低,请先在pc端进行信息完善')
  751. } else {
  752. if (this.payData.status === 502 || this.payData.status === 503) {
  753. this.underLinePaySubmitted()
  754. } else {
  755. if (!this.checkRule()) {
  756. this.setRemindText('当前地址部分卖家无法配送,请重新选择地址或与卖家协商处理')
  757. } else {
  758. let infos = []
  759. let info = this.generateOrderInfo()
  760. if (info) {
  761. infos.push(info)
  762. this.doSubmit(infos)
  763. }
  764. }
  765. }
  766. }
  767. },
  768. // 待付款订单-线下付款
  769. underLinePaySubmitted () {
  770. let arr = []
  771. if (this.payData.orderids) {
  772. arr = this.payData.orderids.split(',')
  773. } else {
  774. arr.push(this.payData.orderid)
  775. }
  776. let param = {
  777. orderid: this.baseUtils.enidfilter(arr.join('-'))
  778. }
  779. // 跳转至付款页面
  780. console.log('订单已存在,直接跳转至付款页面')
  781. this.$router.push(`/mobile/center/user/doPay/${encodeURIComponent(param.orderid)}`)
  782. return param
  783. },
  784. // 处理订单数据
  785. generateOrderInfo () {
  786. let orderInfo = {
  787. id: this.payData.id,
  788. orderid: this.payData.orderid
  789. }
  790. if (this.payData.currency === 'USD' && this.selectedInvoiceIndex !== -1) {
  791. this.setRemindText('美元请选择暂不开票')
  792. return false
  793. }
  794. if (this.checkAddress()) {
  795. orderInfo.add_id = this.selectedAddress.id
  796. } else {
  797. return false
  798. }
  799. let submitParam = this.orderSubmitParams()
  800. // 发票信息
  801. if (this.selectedInvoice) {
  802. if (this.selectedInvoice.kind === 1205) {
  803. orderInfo.invoicetype = '1205'
  804. } else if (this.selectedInvoice.kind === 1206) {
  805. if (submitParam.includeConsignment) {
  806. this.setRemindText('订单中包含寄售类型商品,请选择专票')
  807. return false
  808. }
  809. orderInfo.invoicetype = '1206'
  810. }
  811. if (this.selectedInvoice.id) {
  812. orderInfo.invoiceid = this.selectedInvoice.id
  813. } else {
  814. this.setRemindText('请添加发票信息')
  815. return false
  816. }
  817. } else {
  818. orderInfo.invoicetype = '1207'
  819. }
  820. orderInfo.totalprice = submitParam.goodsPrice
  821. orderInfo.currency = this.payData.currency
  822. orderInfo.orderRemark = JSON.stringify(submitParam.remarkObj)
  823. // 1103线下 1102线上
  824. orderInfo.paytype = '1103'
  825. orderInfo.splitInfo = {
  826. ruleList: JSON.stringify(submitParam.ruleList)
  827. // takeList: JSON.stringify(submitParam.takeList)
  828. }
  829. orderInfo.orderDetails = this.convertOrderDetailParams()
  830. // console.log(orderInfo)
  831. return orderInfo
  832. // 人民币为专用增值税发票,美元不开发票 --1205专用增值税发票 --1206普通发票 --1207不开发票
  833. // 默认选择第三方配送 --1301第三方配送 --卖家配送 --1303上门自提
  834. },
  835. // 订单提交的参数整合
  836. orderSubmitParams () {
  837. let params = {
  838. // 不包含运费的价格
  839. goodsPrice: 0,
  840. // 备注
  841. remarkObj: {},
  842. // 配送方式
  843. ruleList: {},
  844. // // 自提点
  845. // takeList: {},
  846. // 是否包含寄售商品
  847. includeConsignment: false
  848. }
  849. this.orderData.forEach(item => {
  850. params.goodsPrice += item.goodsPrice
  851. params.remarkObj[item.storeid] = item.remark
  852. params.ruleList[item.storeid] = item.fare
  853. // params.takeList[item.storeid] = this.checkShowTakeSelf(item) && this.takeSelfData[item.storeid] ? [0] : null
  854. if (item.storeid === '33069557578d44e69bd91ad12d28a8d4') {
  855. params.includeConsignment = true
  856. }
  857. })
  858. return params
  859. },
  860. // 提取要提交到服务器的订单明细goods数据
  861. convertOrderDetailParams () {
  862. let orderDetails = []
  863. this.payData.orderDetails.forEach(item => {
  864. orderDetails.push({
  865. id: item.id,
  866. number: item.goods.purchaseNumber,
  867. taxUnitprice: item.taxUnitprice,
  868. remark: item.remark,
  869. goodsnumber: item.goodsnumber,
  870. storeid: item.storeid
  871. })
  872. })
  873. return orderDetails
  874. },
  875. // 提交订单请求
  876. doSubmit (orders) {
  877. this.$http.put(`/trade/order/${this.baseUtils.enidfilter(this.payData.orderid)}/ensure`, orders)
  878. .then(res => {
  879. console.log(res)
  880. if (res.data.code === 1) {
  881. if (res.data.data && res.data.data[0]) {
  882. let orderids = []
  883. let batchCodes = []
  884. for (let i = 0; i < res.data.data.length; i++) {
  885. orderids.push(res.data.data[i].orderid)
  886. for (let j = 0; j < res.data.data[i].orderDetails.length; j++) {
  887. batchCodes.push(res.data.data[i].orderDetails[j].batchCode)
  888. }
  889. }
  890. // 如果不是立即购买,删除购物车里的对应信息
  891. if (!this.payData.buyNow) {
  892. this.$http.put('/trade/cart/delete', batchCodes)
  893. }
  894. // 跳转至订单提交完成页面
  895. console.log('订单提交完成,跳转至结果页')
  896. this.$router.push(`/mobile/center/user/doPay/${encodeURIComponent(this.baseUtils.enidfilter(orderids.join('-')))}`)
  897. }
  898. } else {
  899. if (res.data.data.code === 6) {
  900. this.setRemindText(res.data.message + ',请刷新界面之后重新操作')
  901. } else if (res.data.data.code === 7) {
  902. this.setRemindText(res.data.message + ',将为您跳转到购物车界面')
  903. setTimeout(() => {
  904. this.$router.push('/mobile/center/user/cart')
  905. }, 1500)
  906. } else {
  907. this.setRemindText(res.data.message)
  908. }
  909. }
  910. }, err => {
  911. console.log(err)
  912. this.setRemindText(err.response.data || '提交订单失败')
  913. })
  914. },
  915. reloadAddress () {
  916. this.$store.dispatch('userCenter/loadAcceptAddress', {send: false})
  917. },
  918. editClick (obj) {
  919. if (obj.id) {
  920. this.reloadAddress()
  921. }
  922. this.editAddr = false
  923. },
  924. addAddress (item) {
  925. if (!item) {
  926. this.currentAddress = {}
  927. } else {
  928. this.currentAddress = item
  929. }
  930. this.editAddr = true
  931. },
  932. deleteAddress (item) {
  933. this.$http.put(`/trade/address/delete/${item.id}`).then(res => {
  934. this.setRemindText('删除成功')
  935. this.reloadAddress()
  936. }, err => {
  937. this.setRemindText(err.response.data || '删除失败,系统错误')
  938. })
  939. }
  940. }
  941. }
  942. </script>
  943. <style lang="scss" scoped>
  944. $red-text: #f43938;
  945. .mobile-pay {
  946. margin-bottom: 2.02rem;
  947. .pay-head {
  948. height: 1.3rem;
  949. padding: .25rem 0 0 .21rem;
  950. position: relative;
  951. border-bottom: .18rem solid #f1f3f7;
  952. background: url('/images/mobile/center/user/addr-border.png') no-repeat;
  953. background-size: contain;
  954. background-position: bottom;
  955. .info {
  956. padding-left: .43rem;
  957. font-size: .3rem;
  958. font-weight: bold;
  959. }
  960. .addr {
  961. width: 6.5rem;
  962. overflow: hidden;
  963. text-overflow: ellipsis;
  964. white-space: nowrap;
  965. img {
  966. height: .29rem;
  967. margin-right: .16rem;
  968. }
  969. span {
  970. font-size: .26rem;
  971. }
  972. }
  973. .icon-xiangyou {
  974. position: absolute;
  975. right: .21rem;
  976. top: .52rem;
  977. color: #bebebe;
  978. }
  979. .no-addr {
  980. margin-top: .15rem;
  981. text-align: center;
  982. padding-right: .21rem;
  983. }
  984. }
  985. .pay-store-list {
  986. .ps-item {
  987. border-bottom: .18rem solid #f1f3f7;
  988. .ps-store-name {
  989. height: .89rem;
  990. line-height: .89rem;
  991. padding: 0 .25rem;
  992. font-size: .28rem;
  993. text-align: left;
  994. .seller-name {
  995. max-width: 5rem;
  996. position: relative;
  997. padding-right: .2rem;
  998. span {
  999. color: #666;
  1000. }
  1001. i {
  1002. position: absolute;
  1003. right: 0;
  1004. font-size: .32rem;
  1005. color: #bebebe;
  1006. }
  1007. }
  1008. }
  1009. .ps-goods-info {
  1010. border-top: 1px solid #e4e4e4;
  1011. border-bottom: 1px solid #e4e4e4;
  1012. .ps-goods-list {
  1013. background: #f9f9f8;
  1014. height: 100%;
  1015. li {
  1016. border-bottom: 1px solid #e4e4e4;
  1017. width: 100%;
  1018. .fl {
  1019. margin-right: .23rem;
  1020. width: 3.49rem;
  1021. }
  1022. .fr {
  1023. width: 3.2rem;
  1024. .ol-price {
  1025. font-size: .26rem;
  1026. }
  1027. }
  1028. .ps-goods-item {
  1029. font-size: .28rem;
  1030. > span {
  1031. color: #666;
  1032. }
  1033. }
  1034. .single-count {
  1035. height: .61rem;
  1036. line-height: .61rem;
  1037. background: #ebebeb;
  1038. font-size: .28rem;
  1039. color: #666;
  1040. text-align: right;
  1041. padding: 0 .21rem 0 .25rem;
  1042. .ol-price {
  1043. width: 2.1rem;
  1044. font-size: .26rem;
  1045. }
  1046. }
  1047. }
  1048. }
  1049. .show-more-psgoods {
  1050. height: .67rem;
  1051. line-height: .67rem;
  1052. font-size: .24rem;
  1053. color: #999;
  1054. text-align: center;
  1055. i {
  1056. font-size: .24rem;
  1057. color: #999;
  1058. }
  1059. }
  1060. }
  1061. }
  1062. }
  1063. .pay-price-title {
  1064. /*float: left;*/
  1065. font-size: .3rem;
  1066. }
  1067. .ps-operate-line {
  1068. height: .89rem;
  1069. line-height: .89rem;
  1070. padding: 0 .21rem 0 .25rem;
  1071. border-bottom: 1px solid #e4e4e4;
  1072. font-size: .28rem;
  1073. .fr {
  1074. height: 100%;
  1075. .inline-block {
  1076. line-height: normal;
  1077. text-align: right;
  1078. span {
  1079. color: #666;
  1080. /* &:first-child {
  1081. color: #333;
  1082. font-weight: bold;
  1083. display: block;
  1084. }*/
  1085. &.red {
  1086. color: $red-text;
  1087. }
  1088. }
  1089. }
  1090. .delivery-select {
  1091. width: 1.54rem;
  1092. height: .5rem;
  1093. line-height: .5rem;
  1094. text-align: center;
  1095. border: 1px solid #a1a1a1;
  1096. color: #999;
  1097. background: url('/images/mobile/center/user/delivery.png') no-repeat;
  1098. background-size: .2rem .2rem;
  1099. background-position: 1.3rem .25rem;
  1100. border-radius: .03rem;
  1101. margin-left: .56rem;
  1102. &:first-child {
  1103. margin-left: 0;
  1104. }
  1105. &.active {
  1106. background: url('/images/mobile/center/user/delivery-active.png') no-repeat;
  1107. background-size: .2rem .2rem;
  1108. background-position: 1.3rem .25rem;
  1109. color: #3e85f7;
  1110. border-color: #3e85f7;
  1111. }
  1112. }
  1113. i {
  1114. color: #bebebe;
  1115. margin-left: .14rem;
  1116. }
  1117. }
  1118. input {
  1119. width: 4.78rem;
  1120. margin-left: .68rem;
  1121. padding: 0 .1rem;
  1122. height: .45rem;
  1123. }
  1124. &.ps-price {
  1125. text-align: right;
  1126. /*padding-right: .31rem;*/
  1127. .inline-block {
  1128. display: inline-block;
  1129. width: 1.1rem;
  1130. font-size: .26rem;
  1131. text-align: right;
  1132. }
  1133. }
  1134. &.ps-fare {
  1135. line-height: .43rem;
  1136. font-size: .24rem;
  1137. .text-ellipse {
  1138. text-align: right;
  1139. color: #333;
  1140. .ol-price {
  1141. display: inline-block;
  1142. width: 2.3rem;
  1143. text-align: left;
  1144. font-size: .26rem;
  1145. span {
  1146. font-size: .26rem;
  1147. }
  1148. }
  1149. .pay-price-title {
  1150. display: inline-block;
  1151. width: 1.1rem;
  1152. font-size: .24rem;
  1153. text-align: right;
  1154. }
  1155. .fare {
  1156. text-decoration: line-through;
  1157. color: #666!important;
  1158. }
  1159. i {
  1160. font-size: .38rem;
  1161. color: #adacac;
  1162. }
  1163. .tag {
  1164. height: .35rem;
  1165. line-height: .35rem;
  1166. width: .58rem;
  1167. font-size: .22rem;
  1168. color: #fff;
  1169. background: #15b262;
  1170. border-radius: .02rem;
  1171. text-align: center;
  1172. margin-left: .14rem;
  1173. margin-right: .06rem;
  1174. position: relative;
  1175. top: -.06rem;
  1176. }
  1177. }
  1178. }
  1179. &.ps-address {
  1180. height: auto;
  1181. line-height: unset;
  1182. padding: .25rem 0;
  1183. position: relative;
  1184. padding-left: .21rem;
  1185. border-bottom: .11rem solid #f1f3f7;
  1186. > div {
  1187. width: 6.76rem;
  1188. padding-right: .26rem;
  1189. p {
  1190. font-size: .28rem;
  1191. }
  1192. }
  1193. i {
  1194. color: #bebebe;
  1195. }
  1196. .addr {
  1197. margin-bottom: .33rem;
  1198. .area {
  1199. width: 5rem;
  1200. word-break: break-all;
  1201. padding-left: .2rem;
  1202. }
  1203. }
  1204. .info {
  1205. .info-name {
  1206. margin-right: .46rem;
  1207. }
  1208. .info-phone {
  1209. margin-left: .5rem;
  1210. }
  1211. }
  1212. .no-addr {
  1213. text-align: center;
  1214. }
  1215. }
  1216. &.pay-operate {
  1217. border-bottom: .11rem solid #f1f3f7;
  1218. padding-top: 0;
  1219. .fr {
  1220. line-height: .78rem;
  1221. i {
  1222. position: static;
  1223. }
  1224. span {
  1225. color: #333;
  1226. font-size: .28rem;
  1227. i {
  1228. width: .23rem;
  1229. height: .23rem;
  1230. background: #bfbfbf;
  1231. display: inline-block;
  1232. border-radius: .04rem;
  1233. margin-right: .16rem;
  1234. }
  1235. &.active {
  1236. i {
  1237. background: #09a823;
  1238. }
  1239. }
  1240. &:first-child {
  1241. margin-right: 2.3rem;
  1242. }
  1243. }
  1244. }
  1245. }
  1246. &.pay-invoice {
  1247. border-bottom: .11rem solid #f1f3f7;
  1248. .fr {
  1249. font-size: .28rem;
  1250. i {
  1251. float: right;
  1252. }
  1253. p {
  1254. position: relative;
  1255. bottom: 0;
  1256. }
  1257. .inv-head {
  1258. max-width: 4rem;
  1259. }
  1260. .inv-type {
  1261. font-size: .24rem;
  1262. color: #999;
  1263. }
  1264. }
  1265. }
  1266. &.ps-operate-takeself {
  1267. height: 1.35rem;
  1268. line-height: 1.35rem;
  1269. .fr {
  1270. span {
  1271. display: block;
  1272. max-width: 5.5rem;
  1273. overflow: hidden;
  1274. text-overflow: ellipsis;
  1275. white-space: nowrap;
  1276. }
  1277. }
  1278. }
  1279. }
  1280. .ol-price {
  1281. display: inline-block;
  1282. width: 2.25rem;
  1283. color: #f43938 !important;
  1284. font-size: .32rem;
  1285. text-align: left;
  1286. span {
  1287. font-size: .26rem;
  1288. }
  1289. }
  1290. .buy-wrap {
  1291. position: fixed;
  1292. bottom: .98rem;
  1293. height: 1.02rem;
  1294. line-height: 1.02rem;
  1295. padding-left: .27rem;
  1296. background: #fff;
  1297. width: 100%;
  1298. border-top: .02rem solid #ccc;
  1299. .fr {
  1300. .title {
  1301. font-size: .28rem;
  1302. margin-right: .13rem;
  1303. }
  1304. .price {
  1305. max-width: 3.6rem;
  1306. width: auto;
  1307. vertical-align: top;
  1308. span {
  1309. margin-right: .08rem;
  1310. }
  1311. margin-right: .13rem;
  1312. }
  1313. .buy-btn {
  1314. width: 2.08rem;
  1315. height: 1.04rem;
  1316. line-height: 1.04rem;
  1317. vertical-align: middle;
  1318. text-align: center;
  1319. font-size: .28rem;
  1320. color: #fff;
  1321. background: #3f84f6;
  1322. }
  1323. }
  1324. }
  1325. .cGoods-list {
  1326. background: #fff;
  1327. li {
  1328. padding: .3rem .32rem;
  1329. border-bottom: 1px solid #e4e4e4;
  1330. .fl {
  1331. .cg-param-line {
  1332. width: 3.65rem;
  1333. margin-bottom: .23rem;
  1334. &:last-child {
  1335. margin-bottom: 0;
  1336. }
  1337. font-size: .28rem;
  1338. span {
  1339. color: #666;
  1340. }
  1341. }
  1342. }
  1343. .fr {
  1344. text-align: right;
  1345. p {
  1346. width: 2.3rem;
  1347. }
  1348. .ol-price {
  1349. margin-top: .59rem;
  1350. }
  1351. .count {
  1352. color: #999;
  1353. font-size: .24rem;
  1354. margin-top: .32rem;
  1355. }
  1356. }
  1357. }
  1358. }
  1359. .delivery-rule-list {
  1360. li {
  1361. background: #fff;
  1362. text-align: left;
  1363. padding: 0 .31rem 0 .25rem;
  1364. height: .94rem;
  1365. line-height: .94rem;
  1366. .fr {
  1367. height: 100%;
  1368. .ol-price {
  1369. margin-left: .23rem;
  1370. }
  1371. }
  1372. }
  1373. }
  1374. .invoice-list {
  1375. background: #f1f3f7;
  1376. padding: .19rem 0;
  1377. li {
  1378. margin-bottom: .19rem;
  1379. position: relative;
  1380. &:last-child {
  1381. margin-bottom: 0;
  1382. }
  1383. background: #fff;
  1384. padding: .26rem .16rem .32rem .25rem;
  1385. .inv-head {
  1386. margin-left: .17rem;
  1387. max-width: 5.3rem;
  1388. }
  1389. .inv-type {
  1390. position: absolute;
  1391. right: 0;
  1392. top: 0;
  1393. height: .85rem;
  1394. }
  1395. .content-line {
  1396. margin-top: .23rem;
  1397. padding-left: .53rem;
  1398. .title {
  1399. width: 34%;
  1400. text-align: right;
  1401. vertical-align: top;
  1402. }
  1403. .content {
  1404. width: 66%;
  1405. word-break: break-all;
  1406. }
  1407. }
  1408. }
  1409. }
  1410. .addr-list-wrap {
  1411. background: #f1f3f7;
  1412. padding: .19rem 0;
  1413. }
  1414. .addr-list {
  1415. background: #f1f3f7;
  1416. li {
  1417. margin-bottom: .19rem;
  1418. position: relative;
  1419. &:last-child {
  1420. margin-bottom: 0;
  1421. }
  1422. background: #fff;
  1423. .info-wrap {
  1424. padding: .35rem .25rem .28rem;
  1425. }
  1426. .info-line {
  1427. font-size: .3rem;
  1428. color: #666;
  1429. .name {
  1430. margin: 0 .27rem 0 .17rem;
  1431. max-width: 1.5rem;
  1432. }
  1433. .tel {
  1434. max-width: 2.3rem;
  1435. }
  1436. i {
  1437. width: 1.08rem;
  1438. height: .25rem;
  1439. line-height: .25rem;
  1440. font-size: .24rem;
  1441. text-align: center;
  1442. border: 1px solid #fc2706;
  1443. border-radius: .04rem;
  1444. color: #f43938;
  1445. font-style: normal;
  1446. margin-left: .48rem;
  1447. }
  1448. }
  1449. p {
  1450. margin-top: .19rem;
  1451. word-break: break-all;
  1452. padding-left: .54rem;
  1453. font-size: .28rem;
  1454. color: #999;
  1455. }
  1456. &.active {
  1457. .info-line {
  1458. color: #f43938;
  1459. }
  1460. p {
  1461. color: #666;
  1462. }
  1463. }
  1464. .edit-addr-area {
  1465. border-top: 1px solid #d9d9d9;
  1466. .addr-btn {
  1467. width: 50%;
  1468. height: .8rem;
  1469. line-height: .8rem;
  1470. color: #333;
  1471. text-align: center;
  1472. i {
  1473. font-size: .34rem;
  1474. margin-right: .1rem;
  1475. }
  1476. &:first-child {
  1477. border-right: 1px solid #d9d9d9;
  1478. }
  1479. }
  1480. }
  1481. }
  1482. }
  1483. .add-addr-btn {
  1484. /*position: absolute;*/
  1485. /*bottom: .26rem;*/
  1486. /*left: .52rem;*/
  1487. width: 5.67rem;
  1488. text-align: center;
  1489. display: block;
  1490. margin: .26rem auto .07rem;
  1491. height: .77rem;
  1492. line-height: .77rem;
  1493. background: #3f84f6;
  1494. border-radius: .08rem;
  1495. color: #fff;
  1496. font-size: .32rem;
  1497. i {
  1498. margin-right: .08rem;
  1499. }
  1500. }
  1501. .takeself-list {
  1502. li {
  1503. .info-line {
  1504. .name {
  1505. max-width: 5.3rem;
  1506. }
  1507. }
  1508. }
  1509. }
  1510. .input-line {
  1511. $group-height: .4rem;
  1512. input {
  1513. width: .91rem;
  1514. height: $group-height;
  1515. border-top: 1px solid #ddd;
  1516. border-bottom: 1px solid #ddd;
  1517. vertical-align: middle;
  1518. border-radius: 0;
  1519. padding: 0 .05rem;
  1520. text-align: center;
  1521. line-height: $group-height;
  1522. /* position: relative;
  1523. top: .01rem;*/
  1524. }
  1525. span {
  1526. width: .35rem;
  1527. height: $group-height;
  1528. line-height: .38rem;
  1529. text-align: center;
  1530. border: 1px solid #ddd;
  1531. font-size: .24rem;
  1532. &:first-child {
  1533. border-top-left-radius: .05rem;
  1534. border-bottom-left-radius: .05rem;
  1535. }
  1536. &:last-child {
  1537. border-top-right-radius: .05rem;
  1538. border-bottom-right-radius: .05rem;
  1539. }
  1540. &.disab {
  1541. background: #e8e8e8;
  1542. }
  1543. }
  1544. }
  1545. }
  1546. .addr-modal {
  1547. .addr-modal-wrapper {
  1548. top: 1.5rem;
  1549. bottom: 1.5rem;
  1550. left: .2rem;
  1551. right: .2rem;
  1552. background: #fff;
  1553. }
  1554. }
  1555. </style>