subject-preview.vue 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864
  1. <template>
  2. <div style="background: #F3F4F8;">
  3. <div class="noticeInfo">
  4. <h2>缴费说明</h2>
  5. 1、为确保声部平衡,请家长确认 注册声部为孩子的最终录取声部。<br />
  6. 2、为保障每个声部人数达标,我们都进行了超员20%的录取,系统将按照提交注册的先后顺序安排名额。超员后 有可能出现无法注册的情况,请您理解。如果其他声部仍有名额,我们将优先调配您的孩子;
  7. <div class="line_bottom" style="margin: 20px 0 0;"></div>
  8. </div>
  9. <div class="section">
  10. <h2 class="title">乐团课程</h2>
  11. <div class="options">
  12. <div class="option" :class="[!item.isStudentOptional ? 'disabled' : '']" v-for="(item, index) in courseInfo" :key="index" @click="onCourseChange(item)">
  13. <div class="o_hd"><i class="check_default" :class="[item.isStatus ? 'check_active' : '']"></i></div>
  14. <div class="o_bd">{{ item.courseType | coursesType }}</div>
  15. <span class="o_ft" style="color: #1a1a1a;">
  16. 原价:<del style=" font-size: 16px; color: #1a1a1a">¥{{ item.courseOriginalPrice | moneyFormat }}</del>
  17. </span>
  18. </div>
  19. </div>
  20. <div class="options sale lines">
  21. <div class="option">
  22. <div class="o_bd"></div>
  23. <span class="o_ft">
  24. 现价 ¥<span style="font-size: 20px">{{ orderInfo.musicClassFee | moneyFormat }}</span>
  25. </span>
  26. </div>
  27. </div>
  28. </div>
  29. <div class="section" v-if="instrumentResult.length > 0">
  30. <h2 class="title">乐器</h2>
  31. <div class="options">
  32. <div v-for="(con, index) in instrumentResult" :key="index" @click="instrumentF(con)" :class="[ instrumentResult.length > 1 ? 'oc' : '' ]">
  33. <div class="option">
  34. <div class="o_hd"><i class="check_default" :class="[ con.checked ? 'check_active' : '' ]"></i></div>
  35. <div class="o_bd">
  36. {{ con.name }}
  37. </div>
  38. <span class="o_ft o_ft_price" v-if="con.price && con.kitType == 'FREE'">
  39. 原价<del>:¥{{ con.marketPrice | moneyFormat }}</del>
  40. </span>
  41. <span class="o_ft o_ft_price" v-if="con.price && con.kitType == 'GROUP'">
  42. 原价<del>:¥{{ con.marketPrice | moneyFormat }}</del>
  43. </span>
  44. </div>
  45. <div class="configuration" v-if="con.marketPrice">
  46. <div class="config config_line">
  47. <div class="title"><span>配置</span></div>
  48. <div class="content">
  49. <p>{{ con.goodsList[0].specification }}</p>
  50. </div>
  51. </div>
  52. </div>
  53. <div class="options sale" style="margin-bottom: 5px;" v-if="con.marketPrice">
  54. <div class="option">
  55. <div class="o_bd"></div>
  56. <template v-if="(con.kitType == 'LEASE')">
  57. <span class="o_ft">
  58. 押金:¥<span style="font-size: 20px">{{ Number((con.depositFee - con.coupon).toFixed(2)) | moneyFormat }}</span>
  59. </span>
  60. </template>
  61. <template v-if="con.price && con.kitType == 'FREE'">
  62. <span class="o_ft">
  63. 免费领用
  64. </span>
  65. </template>
  66. <span class="o_ft" v-if="con.price && con.kitType == 'GROUP'">
  67. 现价:¥<span style="font-size: 20px">{{ Number((con.price - con.coupon).toFixed(2)) | moneyFormat }}</span>
  68. </span>
  69. </div>
  70. </div>
  71. </div>
  72. </div>
  73. </div>
  74. <div class="section" v-if="accessOries.length > 0" key="accessOries">
  75. <h2 class="title">辅件</h2>
  76. <div class="options" v-for="(instr, index) in accessOries" :key="index" @click="onAuxiliarie(instr)">
  77. <div class="option">
  78. <div class="o_hd"><i class="check_default" :class="[ instr.checked ? 'check_active' : '' ]"></i></div>
  79. <div class="o_bd">{{ instr.name }}</div>
  80. <span class="o_ft" style="font-size: 14px;">
  81. <!-- <del>原价:¥{{ instr.marketPrice }}</del> -->
  82. <template v-if="instr.price == 0">免费</template>
  83. <template v-else>现价:¥{{ instr.price | moneyFormat }}</template>
  84. <!-- {{ instr.price == 0 ? '免费' : '现价:¥' + instr.price | moneyFormat }} -->
  85. </span>
  86. </div>
  87. <div class="configuration" v-if="instr.goodsList.length > 1">
  88. <div class="config config_other">
  89. <div class="title"><span>配置</span></div>
  90. <div class="content" v-for="item in instr.goodsList" :key="item.id">
  91. <div class="option" style="padding: 0 5px;">
  92. <div class="o_bd" style="font-size: 14px">{{ item.name }}</div>
  93. <!-- <span class="o_ft">¥{{ item.marketPrice }}</span> -->
  94. </div>
  95. </div>
  96. </div>
  97. </div>
  98. </div>
  99. </div>
  100. <!-- 原价现价 -->
  101. <div class="section">
  102. <div class="needprice markerprice">
  103. <del>原价</del>
  104. <del>¥{{ orderInfo.marketPrice | moneyFormat }}</del>
  105. </div>
  106. <div class="needprice grouopprice">
  107. <span>仅需支付</span>
  108. <span>¥{{ orderInfo.amount | moneyFormat }}</span>
  109. </div>
  110. </div>
  111. <div class="buy">
  112. <div class="price">
  113. <p class="use_price">
  114. <img class="logo" src="@/assets/images/mycard.png" alt="">
  115. <span>¥{{ needPrice | moneyFormat }}</span>
  116. </p>
  117. </div>
  118. <a class="btn-submit">购买</a>
  119. </div>
  120. </div>
  121. </template>
  122. <script>
  123. import { permission } from '@/utils/directivePage'
  124. import { getSubjectGoodsAndInfoPreview } from '@/api/buildTeam'
  125. const paymentPatternType = {
  126. 0: '按月',
  127. 1: '按学期',
  128. 2: '一次性'
  129. }
  130. export default {
  131. props: ["subjectId"],
  132. data() {
  133. const query = this.$route.query
  134. return {
  135. musicGroupId: query.id,
  136. result: {}, // 返回结果
  137. instrument: {}, // 乐器类型
  138. baseInfo: {}, // 其它类
  139. money: 580,
  140. balance: 0, // 余额
  141. needPrice: 0, // 还需支付
  142. payType: false, // 是否余额支付
  143. orderInfo: {
  144. marketPrice: 0,
  145. amount: 0, // 现价总金额
  146. groupPurchasePrice: 0, // 现价
  147. goodsGroupIds: null,
  148. goodsIds: null,
  149. contractGoodsIds: null, // 选中所有商品ID
  150. couponPrice: 0, //
  151. musicClassFee: 0
  152. }, // 金额列表,金额计算
  153. courseInfo: null, // 课程信息
  154. courseScheduleStatus: false, // 课程状态
  155. musicGroupSubject: null, // 基本信息
  156. instrumentResult: [], //乐器
  157. accessOries: [], // 辅件(打包)
  158. agreeStatus: true,
  159. authStatus: false,
  160. buyList: [], // 信息列表
  161. ids: [],
  162. chargeTypeId: null,
  163. paymentStatus: null,
  164. paymentPattern: null,
  165. };
  166. },
  167. mounted() {
  168. this.__init()
  169. },
  170. methods: {
  171. async __init() {
  172. // 获取数据
  173. let params = {
  174. musicGroupId: this.musicGroupId,
  175. subjectId: this.subjectId
  176. }
  177. await getSubjectGoodsAndInfoPreview(params).then(res => {
  178. let result = res
  179. if (result.code == 200) {
  180. let tempResult = result.data
  181. this.paymentPattern = tempResult.musicGroupPaymentCalender ? tempResult.musicGroupPaymentCalender.paymentPattern : 2
  182. let tempInfo = tempResult.musicGroupPaymentCalender? tempResult.musicGroupPaymentCalender.musicGroupPaymentCalenderCourseSettingsList : null
  183. // 判断是否有课程
  184. if (tempInfo && tempInfo.length > 0) {
  185. // 默认课程都选中
  186. this.courseInfo = tempInfo
  187. } else {
  188. // 判断是否有课程,如果没有课程则默认显示0
  189. this.courseInfo = [{
  190. id: -1,
  191. courseCurrentPrice: 0,
  192. courseOriginalPrice: 0,
  193. isStudentOptional: false,
  194. courseType: 'MUSIC'
  195. }]
  196. }
  197. this.courseInfo.forEach(item => {
  198. item.isStatus = true
  199. })
  200. this.musicGroupSubject = tempResult.musicGroupSubjectPlan
  201. let instrumentInfo = {}
  202. tempResult.musicGroupSubjectGoodsGroupList.forEach((item) => {
  203. if (item.type == "INSTRUMENT") {
  204. // 获取乐器所有提供方式
  205. let KGPTJ = item.kitGroupPurchaseTypeJson ? JSON.parse(item.kitGroupPurchaseTypeJson) : {}
  206. for (let single in KGPTJ) {
  207. let tempItem = Object.assign({}, item) // 深拷贝
  208. tempItem.marketPrice = tempItem.goodsList[0].marketPrice
  209. tempItem.kitType = single // 优惠模式
  210. tempItem.coupon = KGPTJ[single] // 优惠金额
  211. if (instrumentInfo.id) {
  212. tempItem.checked = false
  213. if (single == 'GROUP') { // 团购
  214. if ((instrumentInfo.kitType == 'GROUP' && instrumentInfo.price < tempItem.price) || instrumentInfo.kitType ==
  215. 'LEASE' || instrumentInfo.kitType == 'FREE') {
  216. this.instrumentResult.forEach(instrRes => {
  217. instrRes.checked = false
  218. })
  219. tempItem.checked = true
  220. instrumentInfo = {
  221. id: tempItem.id,
  222. price: tempItem.price,
  223. kitType: single
  224. }
  225. }
  226. } else if (single == 'LEASE') { // 租赁
  227. if (instrumentInfo.kitType == 'LEASE' && instrumentInfo.price < tempItem.price) {
  228. this.instrumentResult.forEach(instrRes => {
  229. instrRes.checked = false
  230. })
  231. tempItem.checked = true
  232. instrumentInfo = {
  233. id: tempItem.id,
  234. price: tempItem.price,
  235. kitType: single
  236. }
  237. }
  238. } else if (single == 'FREE') { // 免费
  239. if (instrumentInfo.kitType == 'FREE' && instrumentInfo.price < tempItem.price) {
  240. this.instrumentResult.forEach(instrRes => {
  241. instrRes.checked = false
  242. })
  243. tempItem.checked = true
  244. instrumentInfo = {
  245. id: tempItem.id,
  246. price: tempItem.price,
  247. kitType: single
  248. }
  249. }
  250. }
  251. } else {
  252. tempItem.checked = true
  253. instrumentInfo = {
  254. id: tempItem.id,
  255. price: tempItem.price,
  256. kitType: single
  257. }
  258. }
  259. this.instrumentResult.push(tempItem)
  260. }
  261. } else if (item.type == "ACCESSORIES") {
  262. item.checked = true
  263. this.accessOries.push(item)
  264. }
  265. })
  266. // 添加自备选项
  267. if (this.instrumentResult.length > 0) {
  268. this.instrumentResult.push({
  269. id: -1,
  270. kitType: 'owned',
  271. name: '自备',
  272. price: 0,
  273. marketPrice: 0,
  274. checked: false
  275. })
  276. }
  277. }
  278. // 初始化计算金额
  279. this.calcPrice()
  280. })
  281. },
  282. onCourseChange(item) {
  283. // 判断用户是否可以选择
  284. if (item.isStudentOptional) {
  285. item.isStatus = !item.isStatus
  286. this.calcPrice()
  287. }
  288. },
  289. onClickCheckbox() { //是否使用余额支付
  290. if (!this.payType) {
  291. if (this.orderInfo.amount >= this.balance) {
  292. this.needPrice = Number((this.orderInfo.amount - this.balance).toFixed(2))
  293. } else {
  294. this.needPrice = 0
  295. }
  296. } else {
  297. this.needPrice = this.orderInfo.amount
  298. }
  299. this.payType = !this.payType
  300. },
  301. onAuxiliarie(item) {
  302. // 辅件切换状态
  303. item.checked = !item.checked
  304. // 重新计算金额
  305. this.calcPrice()
  306. },
  307. instrumentF(item) {
  308. // 乐器切换状态
  309. this.instrumentResult.forEach(item => {
  310. item.checked = false
  311. })
  312. item.checked = true
  313. // 重新计算金额
  314. this.calcPrice()
  315. },
  316. calcPrice() {
  317. let buyList = [],
  318. ids = []
  319. let amount = 0,
  320. marketPrice = 0,
  321. goodsGroupIds = {},
  322. courseKeys = [],
  323. couponPrice = 0, // 优惠金额
  324. goodsIds = [],
  325. tempCourseFee = 0,
  326. musicClassFee = 0,
  327. contractGoodsIds = '' // 合同所需要的商品Id (只需要乐器编号)
  328. // 课程
  329. let mgs = this.musicGroupSubject
  330. let csi = this.courseInfo
  331. // 加上判断是否有课程信息
  332. if (mgs) {
  333. csi.forEach(item => {
  334. if (item.isStatus) {
  335. musicClassFee += parseFloat(item.courseCurrentPrice)
  336. marketPrice += parseFloat(item.courseOriginalPrice)
  337. if (item.id > 0) {
  338. courseKeys.push(item.id)
  339. }
  340. }
  341. })
  342. }
  343. // 乐器
  344. let ir = this.instrumentResult
  345. if (ir.length > 0) {
  346. ir.forEach(item => {
  347. if (item.checked) {
  348. if (item.name != '自备') {
  349. contractGoodsIds += item.goodsIdList
  350. }
  351. if (item.kitType == 'FREE') {
  352. amount += 0
  353. couponPrice = 0 // 优惠金额
  354. } else if (item.kitType == 'LEASE') {
  355. couponPrice = item.coupon // 优惠金额
  356. if (item.name != '自备') {
  357. amount += item.depositFee
  358. } else {
  359. amount += 0
  360. }
  361. } else {
  362. amount += parseFloat(item.price)
  363. couponPrice = item.coupon ? item.coupon : 0
  364. }
  365. if (item.kitType == 'LEASE') {
  366. if (item.name != '自备') {
  367. marketPrice += item.depositFee
  368. }
  369. } else {
  370. marketPrice += parseFloat(item.marketPrice)
  371. }
  372. // item.id ? goodsGroupIds[item.id] : null
  373. if (item.id) {
  374. goodsGroupIds[item.id] = item.kitType
  375. }
  376. if (item.kitType == 'LEASE') {
  377. buyList.push({
  378. name: item.name,
  379. type: '租赁',
  380. price: item.depositFee
  381. })
  382. } else if (item.kitType == 'GROUP' && parseFloat(item.price - couponPrice) > 0) {
  383. buyList.push({
  384. name: item.name,
  385. type: '团购',
  386. price: parseFloat(item.price - couponPrice)
  387. })
  388. }
  389. }
  390. })
  391. }
  392. amount += parseFloat(tempCourseFee + musicClassFee)
  393. if (!this.courseScheduleStatus) {
  394. marketPrice += parseFloat(musicClassFee)
  395. }
  396. if (parseFloat(tempCourseFee + musicClassFee) > 0) {
  397. buyList.unshift({
  398. name: '乐团课',
  399. type: paymentPatternType[this.paymentPattern],
  400. price: Number((tempCourseFee + musicClassFee).toFixed(2))
  401. })
  402. }
  403. // 辅件
  404. if (this.accessOries.length > 0) {
  405. let tempAccessPrice = 0
  406. this.accessOries.forEach(item => {
  407. if (item.checked) {
  408. tempAccessPrice += parseFloat(item.price)
  409. amount += parseFloat(item.price)
  410. if (item.goodsList && item.goodsList.length > 0) {
  411. item.goodsList.forEach(childGoods => {
  412. marketPrice += parseFloat(childGoods.marketPrice)
  413. })
  414. }
  415. goodsGroupIds[item.id] = 'ACCESSORIES'
  416. }
  417. })
  418. if (tempAccessPrice > 0) {
  419. buyList.push({
  420. name: '辅件',
  421. type: '团购',
  422. price: tempAccessPrice
  423. })
  424. }
  425. }
  426. // console.log(amount)
  427. let tempGroupPurchasePrice = amount
  428. // 判断减去优惠金额,是否大于0(这里有可能出现负数)
  429. if (amount - couponPrice >= 0) {
  430. amount = Number((amount - couponPrice).toFixed(2))
  431. this.errorPrice = false
  432. } else {
  433. amount = 0
  434. this.errorPrice = true // 订单金额是否异常
  435. }
  436. if (amount - tempCourseFee - musicClassFee > 0) {
  437. ids.push(1, 2)
  438. }
  439. if (parseFloat(tempCourseFee + musicClassFee) > 0) {
  440. ids.push(3, 4, 5)
  441. }
  442. this.ids = ids
  443. // 计算是否使用过余额
  444. if (this.payType) {
  445. let tempPrice = Number((amount - this.balance).toFixed(2))
  446. if (tempPrice > 0) {
  447. this.needPrice = tempPrice
  448. } else {
  449. this.needPrice = 0
  450. }
  451. } else {
  452. this.needPrice = Number(amount.toFixed(2))
  453. }
  454. this.buyList = buyList
  455. this.orderInfo = {
  456. amount: Number(amount.toFixed(2)),
  457. marketPrice: Number(marketPrice.toFixed(2)),
  458. groupPurchasePrice: tempGroupPurchasePrice,
  459. couponPrice: couponPrice,
  460. goodsGroupIds: goodsGroupIds,
  461. goodsIds: goodsIds.join(','),
  462. contractGoodsIds: contractGoodsIds,
  463. courseKeys: courseKeys,
  464. musicClassFee: musicClassFee
  465. }
  466. },
  467. permission(str){
  468. return permission(str)
  469. }
  470. },
  471. };
  472. </script>
  473. <style lang="less" scoped>
  474. .noticeInfo {
  475. h2 {
  476. font-size: 18px;
  477. color: #1a1a1a;
  478. padding-bottom: 10px;
  479. }
  480. position: relative;
  481. background: #fff;
  482. padding: 15px 16px 10px;
  483. font-size: 14px;
  484. color: #808080;
  485. }
  486. .protocolbtn {
  487. margin: 35px 0;
  488. background: #14928a;
  489. color: #fff;
  490. font-size: 18px;
  491. border-radius: 50px;
  492. text-align: center;
  493. width: 100%;
  494. }
  495. .line_bottom {
  496. border-bottom: 1px solid #ededed;
  497. }
  498. .line_top {
  499. border-top: 1px solid #ededed;
  500. }
  501. .section {
  502. padding: 16px 16px 10px;
  503. background: #fff;
  504. margin-bottom: 10px;
  505. >.title {
  506. font-size: 20px;
  507. line-height: 28px;
  508. font-weight: bold;
  509. padding-bottom: 5px;
  510. &::before {
  511. content: " ";
  512. width: 4px;
  513. height: 15px;
  514. background: #14928a;
  515. display: inline-block;
  516. margin-right: 7px;
  517. border-radius: 8px;
  518. }
  519. }
  520. .indate {
  521. font-size: 14px;
  522. padding: 6px 0;
  523. display: flex;
  524. // justify-content: space-between;
  525. justify-content: flex-end;
  526. span {
  527. color: #fa101d;
  528. }
  529. }
  530. }
  531. .options {
  532. // padding-top: .08px;
  533. .oc {
  534. border-bottom: 1px solid #ededed;
  535. &:last-child {
  536. border-bottom: 0;
  537. // margin-top: 0.08px;
  538. padding-top: 9px;
  539. }
  540. }
  541. .protocol {
  542. padding-left: 20px;
  543. font-size: 10px;
  544. line-height: 14px;
  545. }
  546. &.classInfo {
  547. .option .o_ft {
  548. color: #1a1a1a;
  549. }
  550. }
  551. &.lines {
  552. margin-top: 5px;
  553. border-top: 1px solid #ededed;
  554. }
  555. &.sale {
  556. .option {
  557. .o_bd,
  558. .o_ft {
  559. font-size: 16px;
  560. color: #f85043;
  561. font-weight: bold;
  562. }
  563. }
  564. }
  565. .option {
  566. line-height: 26px;
  567. font-size: 15px;
  568. display: flex;
  569. align-items: center;
  570. position: relative;
  571. padding: 10px 5px 5px;
  572. .o_hd {
  573. display: flex;
  574. }
  575. .o_bd {
  576. color: #1a1a1a;
  577. flex: 1;
  578. font-size: 16px;
  579. .c {
  580. font-size: 12px;
  581. }
  582. }
  583. .o_ft {
  584. font-size: 16px;
  585. color: #fa101d;
  586. del {
  587. color: #aaaaaa;
  588. font-size: 12px;
  589. }
  590. }
  591. .o_ft_price,
  592. .o_ft_price del {
  593. font-size: 16px;
  594. color: #1a1a1a;
  595. }
  596. .check_default {
  597. margin-right: 8px;
  598. display: block;
  599. width: 18px;
  600. height: 18px;
  601. background-color: #e9eaef;
  602. border-radius: 50%;
  603. &.check_active {
  604. background: url("../../../assets/images/icon_checkbox.png") no-repeat center;
  605. background-size: contain;
  606. }
  607. }
  608. }
  609. }
  610. .configuration {
  611. padding-bottom: 9px;
  612. .config_line {
  613. display: flex;
  614. justify-content: space-between;
  615. .content {
  616. width: 70%;
  617. text-align: right;
  618. }
  619. .title {
  620. font-size: 14px;
  621. color: #808080;
  622. span {
  623. padding-left: 26px;
  624. }
  625. }
  626. }
  627. .config_other {
  628. .title {
  629. // background:rgba(246,246,246,1);
  630. // height: 1px;
  631. position: relative;
  632. // margin: .15px 0;
  633. span {
  634. // position: absolute;
  635. // left: .12px;
  636. // top: -.09px;
  637. font-size: 14px;
  638. color: #808080;
  639. margin-left: 17px;
  640. display: inline-block;
  641. background-color: #fff;
  642. padding: 0 4px;
  643. }
  644. }
  645. }
  646. .content {
  647. font-size: 12px;
  648. padding-left: 16px;
  649. line-height: 22px;
  650. color: #acacac;
  651. .o_ft {
  652. color: #aaaaaa;
  653. font-size: 12px;
  654. }
  655. }
  656. .options {
  657. padding-top: 0;
  658. padding-left: 16px;
  659. .option {
  660. font-size: 14px;
  661. color: #6f6f6f;
  662. }
  663. }
  664. }
  665. .disabled {
  666. opacity: 0.7;
  667. }
  668. .buy {
  669. height: 60px;
  670. display: flex;
  671. align-items: center;
  672. padding: 0 20px;
  673. border-top: 1px solid #ffe9e9e9;
  674. color: #000000;
  675. font-size: 12px;
  676. background: #fff;
  677. .price {
  678. flex: 1;
  679. font-size: 16px;
  680. }
  681. font-size: 16px;
  682. span {
  683. color: #fa101d;
  684. }
  685. .text {
  686. font-size: 12px;
  687. width: 60px;
  688. display: inline-block;
  689. color: #000;
  690. }
  691. del {
  692. color: #b5b5b5;
  693. &.text {
  694. color: #b5b5b5;
  695. }
  696. }
  697. .btn-submit {
  698. display: inline-block;
  699. font-size: 18px;
  700. color: #fff;
  701. background: #f85043;
  702. border-radius: 100px;
  703. box-shadow: 0px 2px 4px 0px rgba(0, 0, 0, 0.19);
  704. padding: 8px 46px;
  705. }
  706. }
  707. .iframe {
  708. width: 100%;
  709. height: 100%;
  710. -webkit-overflow-scrolling: touch;
  711. overflow-y: scroll;
  712. border-top: none !important;
  713. min-height: calc(100vh - 41px);
  714. }
  715. .countDownContent {
  716. line-height: 40px;
  717. text-align: center;
  718. font-size: 14px;
  719. border-bottom: 1px solid #ccc;
  720. .van-count-down {
  721. display: inline;
  722. color: #f00;
  723. }
  724. }
  725. .loadingOrder {
  726. width: 90%;
  727. height: 180px;
  728. display: flex;
  729. align-items: center;
  730. justify-content: center;
  731. .van-loading__text {
  732. color: #444;
  733. }
  734. }
  735. .pay-section {
  736. margin-bottom: 10px;
  737. padding: 10px 8px;
  738. }
  739. .pay-name {
  740. padding-left: 10px;
  741. flex: 1 auto;
  742. font-weight: bold;
  743. }
  744. .logo {
  745. width: 24px;
  746. height: 24px;
  747. }
  748. .van-checkbox {
  749. float: right;
  750. /deep/.van-checkbox__icon .van-icon {
  751. border-color: #e9eaef;
  752. background-color: #e9eaef;
  753. }
  754. /deep/.van-checkbox__icon--checked .van-icon {
  755. background-color: #2dc7aa;
  756. border-color: #2dc7aa;
  757. }
  758. }
  759. .needprice {
  760. display: flex;
  761. justify-content: space-between;
  762. padding: 2px 0;
  763. del {
  764. font-size: 14px;
  765. color: #aaa;
  766. font-weight: bold;
  767. }
  768. span {
  769. font-size: 18px;
  770. color: #f85043;
  771. font-weight: bold;
  772. }
  773. }
  774. .couponprice {
  775. display: flex;
  776. justify-content: space-between;
  777. }
  778. .use_price {
  779. display: flex;
  780. align-items: center;
  781. font-size: 14px;
  782. font-weight: bold;
  783. img {
  784. padding-right: 8px;
  785. }
  786. span {
  787. font-size: 16px;
  788. }
  789. }
  790. </style>