subject-preview.vue 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880
  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", "calenderId"],
  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. musicGroupSubject: null, // 基本信息
  155. instrumentResult: [], //乐器
  156. accessOries: [], // 辅件(打包)
  157. agreeStatus: true,
  158. authStatus: false,
  159. buyList: [], // 信息列表
  160. ids: [],
  161. chargeTypeId: null,
  162. paymentStatus: null,
  163. paymentPattern: null,
  164. };
  165. },
  166. mounted() {
  167. this.__init()
  168. },
  169. methods: {
  170. async __init() {
  171. // 获取数据
  172. let params = {
  173. musicGroupId: this.musicGroupId,
  174. subjectId: this.subjectId,
  175. calenderId: this.calenderId
  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. tempGroupRemissionCourseFee = 0, // 乐团减免费用
  328. contractGoodsIds = '' // 合同所需要的商品Id (只需要乐器编号)
  329. // 课程
  330. let mgs = this.musicGroupSubject
  331. let csi = this.courseInfo
  332. // 加上判断是否有课程信息
  333. if (mgs) {
  334. csi.forEach(item => {
  335. if (item.isStatus) {
  336. musicClassFee += parseFloat(item.courseCurrentPrice)
  337. marketPrice += parseFloat(item.courseOriginalPrice)
  338. if (item.id > 0) {
  339. courseKeys.push(item.id)
  340. }
  341. // 不可选的课程才会减免课程费用
  342. if(!item.isStudentOptional) {
  343. tempGroupRemissionCourseFee += parseFloat(item.courseCurrentPrice)
  344. }
  345. }
  346. })
  347. }
  348. // 乐器
  349. let ir = this.instrumentResult
  350. if (ir.length > 0) {
  351. ir.forEach(item => {
  352. if (item.checked) {
  353. if (item.name != '自备') {
  354. contractGoodsIds += item.goodsIdList
  355. }
  356. if (item.kitType == 'FREE') {
  357. amount += 0
  358. couponPrice = 0 // 优惠金额
  359. } else if (item.kitType == 'LEASE') {
  360. couponPrice = item.coupon // 优惠金额
  361. if (item.name != '自备') {
  362. amount += item.depositFee
  363. } else {
  364. amount += 0
  365. }
  366. } else {
  367. amount += parseFloat(item.price)
  368. couponPrice = item.coupon ? item.coupon : 0
  369. }
  370. if (item.kitType == 'LEASE') {
  371. if (item.name != '自备') {
  372. marketPrice += item.depositFee
  373. }
  374. } else {
  375. marketPrice += parseFloat(item.marketPrice)
  376. }
  377. // item.id ? goodsGroupIds[item.id] : null
  378. if (item.id) {
  379. goodsGroupIds[item.id] = item.kitType
  380. }
  381. if (item.kitType == 'LEASE') {
  382. buyList.push({
  383. name: item.name,
  384. type: '租赁',
  385. price: item.depositFee
  386. })
  387. } else if (item.kitType == 'GROUP') {
  388. // && parseFloat(item.price - couponPrice) > 0
  389. buyList.push({
  390. name: item.name,
  391. type: '团购',
  392. price: parseFloat(item.price - couponPrice)
  393. })
  394. } else if(item.kitType == 'FREE') {
  395. buyList.push({
  396. name: item.name,
  397. type: '免费',
  398. price: 0
  399. })
  400. }
  401. // 是否减免课程费用,必须团购,并且开启了减免课程费用
  402. if(item.kitType == 'GROUP' && item.groupRemissionCourseFee == 1) {
  403. musicClassFee = parseFloat(musicClassFee - tempGroupRemissionCourseFee)
  404. }
  405. }
  406. })
  407. }
  408. amount += parseFloat(tempCourseFee + musicClassFee)
  409. // if (parseFloat(tempCourseFee + musicClassFee) > 0) {
  410. buyList.unshift({
  411. name: '乐团课',
  412. type: paymentPatternType[this.paymentPattern],
  413. price: Number((tempCourseFee + musicClassFee).toFixed(2))
  414. })
  415. // }
  416. // 辅件
  417. if (this.accessOries.length > 0) {
  418. let tempAccessPrice = 0
  419. this.accessOries.forEach(item => {
  420. if (item.checked) {
  421. tempAccessPrice += parseFloat(item.price)
  422. amount += parseFloat(item.price)
  423. if (item.goodsList && item.goodsList.length > 0) {
  424. item.goodsList.forEach(childGoods => {
  425. marketPrice += parseFloat(childGoods.marketPrice)
  426. })
  427. }
  428. goodsGroupIds[item.id] = 'ACCESSORIES'
  429. }
  430. })
  431. // if (tempAccessPrice > 0) {
  432. buyList.push({
  433. name: '辅件',
  434. type: '团购',
  435. price: tempAccessPrice
  436. })
  437. // }
  438. }
  439. // console.log(amount)
  440. let tempGroupPurchasePrice = amount
  441. // 判断减去优惠金额,是否大于0(这里有可能出现负数)
  442. if (amount - couponPrice >= 0) {
  443. amount = Number((amount - couponPrice).toFixed(2))
  444. this.errorPrice = false
  445. } else {
  446. amount = 0
  447. this.errorPrice = true // 订单金额是否异常
  448. }
  449. if (amount - tempCourseFee - musicClassFee > 0) {
  450. ids.push(1, 2)
  451. }
  452. if (parseFloat(tempCourseFee + musicClassFee) > 0) {
  453. ids.push(3, 4, 5)
  454. }
  455. this.ids = ids
  456. // 计算是否使用过余额
  457. if (this.payType) {
  458. let tempPrice = Number((amount - this.balance).toFixed(2))
  459. if (tempPrice > 0) {
  460. this.needPrice = tempPrice
  461. } else {
  462. this.needPrice = 0
  463. }
  464. } else {
  465. this.needPrice = Number(amount.toFixed(2))
  466. }
  467. this.buyList = buyList
  468. this.orderInfo = {
  469. amount: Number(amount.toFixed(2)),
  470. marketPrice: Number(marketPrice.toFixed(2)),
  471. groupPurchasePrice: tempGroupPurchasePrice,
  472. couponPrice: couponPrice,
  473. goodsGroupIds: goodsGroupIds,
  474. goodsIds: goodsIds.join(','),
  475. contractGoodsIds: contractGoodsIds,
  476. courseKeys: courseKeys,
  477. musicClassFee: musicClassFee
  478. }
  479. },
  480. permission(str){
  481. return permission(str)
  482. }
  483. },
  484. };
  485. </script>
  486. <style lang="less" scoped>
  487. .noticeInfo {
  488. line-height: 1.8;
  489. h2 {
  490. font-size: 18px;
  491. color: #1a1a1a;
  492. padding-bottom: 10px;
  493. }
  494. position: relative;
  495. background: #fff;
  496. padding: 15px 16px 10px;
  497. font-size: 14px;
  498. color: #808080;
  499. }
  500. .protocolbtn {
  501. margin: 35px 0;
  502. background: #14928a;
  503. color: #fff;
  504. font-size: 18px;
  505. border-radius: 50px;
  506. text-align: center;
  507. width: 100%;
  508. }
  509. .line_bottom {
  510. border-bottom: 1px solid #ededed;
  511. }
  512. .line_top {
  513. border-top: 1px solid #ededed;
  514. }
  515. .section {
  516. padding: 16px 16px 10px;
  517. background: #fff;
  518. margin-bottom: 10px;
  519. >.title {
  520. font-size: 20px;
  521. line-height: 28px;
  522. font-weight: bold;
  523. padding-bottom: 5px;
  524. &::before {
  525. content: " ";
  526. width: 4px;
  527. height: 15px;
  528. background: #14928a;
  529. display: inline-block;
  530. margin-right: 7px;
  531. border-radius: 8px;
  532. }
  533. }
  534. .indate {
  535. font-size: 14px;
  536. padding: 6px 0;
  537. display: flex;
  538. // justify-content: space-between;
  539. justify-content: flex-end;
  540. span {
  541. color: #fa101d;
  542. }
  543. }
  544. }
  545. .options {
  546. // padding-top: .08px;
  547. .oc {
  548. border-bottom: 1px solid #ededed;
  549. &:last-child {
  550. border-bottom: 0;
  551. // margin-top: 0.08px;
  552. padding-top: 9px;
  553. }
  554. }
  555. .protocol {
  556. padding-left: 20px;
  557. font-size: 10px;
  558. line-height: 14px;
  559. }
  560. &.classInfo {
  561. .option .o_ft {
  562. color: #1a1a1a;
  563. }
  564. }
  565. &.lines {
  566. margin-top: 5px;
  567. border-top: 1px solid #ededed;
  568. }
  569. &.sale {
  570. .option {
  571. .o_bd,
  572. .o_ft {
  573. font-size: 16px;
  574. color: #f85043;
  575. font-weight: bold;
  576. }
  577. }
  578. }
  579. .option {
  580. line-height: 26px;
  581. font-size: 15px;
  582. display: flex;
  583. align-items: center;
  584. position: relative;
  585. padding: 10px 5px 5px;
  586. .o_hd {
  587. display: flex;
  588. }
  589. .o_bd {
  590. color: #1a1a1a;
  591. flex: 1;
  592. font-size: 16px;
  593. .c {
  594. font-size: 12px;
  595. }
  596. }
  597. .o_ft {
  598. font-size: 16px;
  599. color: #fa101d;
  600. del {
  601. color: #aaaaaa;
  602. font-size: 12px;
  603. }
  604. }
  605. .o_ft_price,
  606. .o_ft_price del {
  607. font-size: 16px;
  608. color: #1a1a1a;
  609. }
  610. .check_default {
  611. margin-right: 8px;
  612. display: block;
  613. width: 18px;
  614. height: 18px;
  615. background-color: #e9eaef;
  616. border-radius: 50%;
  617. &.check_active {
  618. background: url("../../../assets/images/icon_checkbox.png") no-repeat center;
  619. background-size: contain;
  620. }
  621. }
  622. }
  623. }
  624. .configuration {
  625. padding-bottom: 9px;
  626. .config_line {
  627. display: flex;
  628. justify-content: space-between;
  629. .content {
  630. width: 70%;
  631. text-align: right;
  632. }
  633. .title {
  634. font-size: 14px;
  635. color: #808080;
  636. span {
  637. padding-left: 26px;
  638. }
  639. }
  640. }
  641. .config_other {
  642. .title {
  643. // background:rgba(246,246,246,1);
  644. // height: 1px;
  645. position: relative;
  646. // margin: .15px 0;
  647. span {
  648. // position: absolute;
  649. // left: .12px;
  650. // top: -.09px;
  651. font-size: 14px;
  652. color: #808080;
  653. margin-left: 17px;
  654. display: inline-block;
  655. background-color: #fff;
  656. padding: 0 4px;
  657. }
  658. }
  659. }
  660. .content {
  661. font-size: 12px;
  662. padding-left: 16px;
  663. line-height: 22px;
  664. color: #acacac;
  665. .o_ft {
  666. color: #aaaaaa;
  667. font-size: 12px;
  668. }
  669. }
  670. .options {
  671. padding-top: 0;
  672. padding-left: 16px;
  673. .option {
  674. font-size: 14px;
  675. color: #6f6f6f;
  676. }
  677. }
  678. }
  679. .disabled {
  680. opacity: 0.7;
  681. }
  682. .buy {
  683. height: 60px;
  684. display: flex;
  685. align-items: center;
  686. padding: 0 20px;
  687. border-top: 1px solid #ffe9e9e9;
  688. color: #000000;
  689. font-size: 12px;
  690. background: #fff;
  691. .price {
  692. flex: 1;
  693. font-size: 16px;
  694. }
  695. font-size: 16px;
  696. span {
  697. color: #fa101d;
  698. }
  699. .text {
  700. font-size: 12px;
  701. width: 60px;
  702. display: inline-block;
  703. color: #000;
  704. }
  705. del {
  706. color: #b5b5b5;
  707. &.text {
  708. color: #b5b5b5;
  709. }
  710. }
  711. .btn-submit {
  712. display: inline-block;
  713. font-size: 18px;
  714. color: #fff;
  715. background: #f85043;
  716. border-radius: 100px;
  717. box-shadow: 0px 2px 4px 0px rgba(0, 0, 0, 0.19);
  718. padding: 8px 46px;
  719. }
  720. }
  721. .iframe {
  722. width: 100%;
  723. height: 100%;
  724. -webkit-overflow-scrolling: touch;
  725. overflow-y: scroll;
  726. border-top: none !important;
  727. min-height: calc(100vh - 41px);
  728. }
  729. .countDownContent {
  730. line-height: 40px;
  731. text-align: center;
  732. font-size: 14px;
  733. border-bottom: 1px solid #ccc;
  734. .van-count-down {
  735. display: inline;
  736. color: #f00;
  737. }
  738. }
  739. .loadingOrder {
  740. width: 90%;
  741. height: 180px;
  742. display: flex;
  743. align-items: center;
  744. justify-content: center;
  745. .van-loading__text {
  746. color: #444;
  747. }
  748. }
  749. .pay-section {
  750. margin-bottom: 10px;
  751. padding: 10px 8px;
  752. }
  753. .pay-name {
  754. padding-left: 10px;
  755. flex: 1 auto;
  756. font-weight: bold;
  757. }
  758. .logo {
  759. width: 24px;
  760. height: 24px;
  761. }
  762. .van-checkbox {
  763. float: right;
  764. /deep/.van-checkbox__icon .van-icon {
  765. border-color: #e9eaef;
  766. background-color: #e9eaef;
  767. }
  768. /deep/.van-checkbox__icon--checked .van-icon {
  769. background-color: #2dc7aa;
  770. border-color: #2dc7aa;
  771. }
  772. }
  773. .needprice {
  774. display: flex;
  775. justify-content: space-between;
  776. padding: 2px 0;
  777. del {
  778. font-size: 14px;
  779. color: #aaa;
  780. font-weight: bold;
  781. }
  782. span {
  783. font-size: 18px;
  784. color: #f85043;
  785. font-weight: bold;
  786. }
  787. }
  788. .couponprice {
  789. display: flex;
  790. justify-content: space-between;
  791. }
  792. .use_price {
  793. display: flex;
  794. align-items: center;
  795. font-size: 14px;
  796. font-weight: bold;
  797. img {
  798. padding-right: 8px;
  799. }
  800. span {
  801. font-size: 16px;
  802. }
  803. }
  804. </style>