_orderId.vue 54 KB

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