Subscribe.vue 48 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626
  1. <template>
  2. <div class="bookItem">
  3. <Header
  4. :headerBg="headerBg"
  5. :headerBorder="headerBorder"
  6. :userBg="userBg"
  7. :LoginNavIndex="0"
  8. ref="header"
  9. />
  10. <div class="navBar" v-if="info">
  11. <div class="navBar-left">
  12. <a class="goback" @click="$router.go(-1)"
  13. ><i class="el-icon-arrow-left"></i>主页</a
  14. >
  15. <div class="border"></div>
  16. <p>
  17. {{
  18. bookType === "jingdu"
  19. ? "二十一世纪英文报·精读课堂"
  20. : bookType === "huakan"
  21. ? "二十一世纪英文报·少儿画刊"
  22. : "二十一世纪英文报"
  23. }}
  24. </p>
  25. </div>
  26. </div>
  27. <div class="main-top" v-if="info">
  28. <div class="main-top-inner">
  29. <el-carousel
  30. class="swiper-container"
  31. trigger="click"
  32. arrow="never"
  33. height="414px"
  34. >
  35. <!-- <el-carousel-item v-for="(item1, index) in data.imgList" :key="index"> -->
  36. <el-image
  37. class="image"
  38. :src="
  39. bookType === 'jingdu'
  40. ? require('../../assets/cover-order-jingdu.png')
  41. : bookType === 'huakan'
  42. ? require('../../assets/cover-order-huakan.png')
  43. : require('../../assets/cover-order-' + studyType + '.png')
  44. "
  45. :fit="'contain'"
  46. >
  47. </el-image>
  48. <!-- </el-carousel-item> -->
  49. </el-carousel>
  50. <div class="book-info-right" v-loading="loading">
  51. <h1 class="title">
  52. {{
  53. bookType === "jingdu"
  54. ? "Teens 精读课堂(" + studyTypeName + ")"
  55. : bookType === "huakan"
  56. ? "二十一世纪英文报·少儿画刊"
  57. : "《二十一世纪学生英文报》"
  58. }}
  59. </h1>
  60. <!-- <b class="org">{{data.org}}</b><span class="date">2023.07.01-2023.07.21</span> -->
  61. <div class="sales-box">
  62. <div class="sales-left">
  63. <span>订阅价格</span>
  64. <span class="OPPOSans"
  65. >¥{{ info.price_reservation | cutMoneyFiter }}</span
  66. >
  67. <!-- <span class="old-price" v-if="info.price_discount&&info.price_discount!==info.price">¥{{info.price|cutMoneyFiter}}</span> -->
  68. <b>元 / 期</b>
  69. </div>
  70. <span class="sales-right" v-if="sales >= 1000"
  71. >累计订阅 {{ salesCn }}</span
  72. >
  73. </div>
  74. <!-- <div class="label-box">
  75. <label v-for="(itemL,indexL) in info.label_name_list" :key="indexL" :style="{background:tagBg[indexL%3],color:tagColor[indexL%3]}">
  76. {{ '# ' + itemL }}
  77. </label>
  78. </div> -->
  79. <!-- <div class="book-describe">
  80. <h2 class="title">{{data.describe.title}}</h2>
  81. <span class="author">{{'BY '+data.describe.author}}</span>
  82. <p class="describe">{{data.describe.describe}}</p>
  83. </div> -->
  84. <div class="info-box">
  85. <div class="info-item">
  86. <label>适合年龄</label>
  87. <span>{{
  88. info.issue_info
  89. ? info.issue_info.age_desc
  90. : info.iread_info.age_desc
  91. }}</span>
  92. </div>
  93. <div class="info-item">
  94. <label>期刊页数</label>
  95. <span>{{
  96. info.issue_info
  97. ? info.issue_info.page_count_desc
  98. : info.iread_info.article_count_desc
  99. }}</span>
  100. <el-tooltip placement="right" v-if="bookType === 'baozhi'">
  101. <div slot="content">双刊、特辑、寒暑假合刊除外</div>
  102. <el-button class="tooltip-btn"
  103. ><svg-icon icon-class="icon-mark"></svg-icon
  104. ></el-button>
  105. </el-tooltip>
  106. </div>
  107. <div class="info-item">
  108. <label>出版周期</label>
  109. <span>{{
  110. info.issue_info
  111. ? info.issue_info.period_desc
  112. : info.iread_info.period_desc
  113. }}</span>
  114. </div>
  115. <div class="info-item">
  116. <label>期刊定价</label>
  117. <span v-if="bookType === 'baozhi' || bookType === 'huakan'"
  118. >{{ info.issue_info.price }}元/期</span
  119. >
  120. <span v-else-if="bookType === 'jingdu'"
  121. >{{ info.iread_info.price }}元/年</span
  122. >
  123. <el-tooltip placement="right" v-if="bookType === 'baozhi'">
  124. <div slot="content">双刊、特辑、寒暑假合刊除外</div>
  125. <el-button class="tooltip-btn"
  126. ><svg-icon icon-class="icon-mark"></svg-icon
  127. ></el-button>
  128. </el-tooltip>
  129. </div>
  130. <div class="info-item" style="width: 100%">
  131. <label>主办单位</label>
  132. <span>{{
  133. info.issue_info
  134. ? info.issue_info.organizer
  135. : info.iread_info.organizer
  136. }}</span>
  137. </div>
  138. </div>
  139. <div class="info-box order-box">
  140. <div
  141. class="info-item order-item"
  142. style="margin-bottom: 16px"
  143. v-if="bookType !== 'huakan'"
  144. >
  145. <label>订阅学段</label>
  146. <div class="order-content">
  147. <ul>
  148. <li
  149. v-for="item in bookType === 'baozhi'
  150. ? $studyType
  151. : studyTypeList"
  152. :key="item.study_phase"
  153. :class="[studyType === item.study_phase ? 'active' : '']"
  154. @click="changeStudy(item)"
  155. >
  156. {{ item.study_phase_name }}
  157. </li>
  158. </ul>
  159. </div>
  160. </div>
  161. <div
  162. class="info-item order-item"
  163. style="margin-bottom: 16px"
  164. v-if="bookType === 'baozhi' || bookType === 'huakan'"
  165. >
  166. <label>订阅期数</label>
  167. <div class="order-content">
  168. <ul>
  169. <li
  170. v-for="item in orderList"
  171. :key="item.value"
  172. :class="[
  173. orderTotalNumber === item.value ? 'active' : '',
  174. totalLength < item.value && item.value !== 1000
  175. ? 'disabled'
  176. : '',
  177. ]"
  178. @click="
  179. changeOrderNumber(
  180. item,
  181. totalLength < item.value && item.value !== 1000
  182. )
  183. "
  184. >
  185. {{ item.label }}
  186. </li>
  187. <el-tooltip placement="right" style="height: 32px">
  188. <div slot="content" v-html="rules"></div>
  189. <el-button class="tooltip-btn"
  190. ><svg-icon icon-class="icon-mark"></svg-icon
  191. ></el-button>
  192. </el-tooltip>
  193. </ul>
  194. <div
  195. v-if="
  196. orderTotalNumber === 1000 &&
  197. info.issue_no_school_year_list.length > 0
  198. "
  199. class="custom-box"
  200. >
  201. <div class="custom-box-top">
  202. <h5>
  203. {{
  204. info.issue_no_school_year_list[customPage].year_begin +
  205. "-" +
  206. info.issue_no_school_year_list[customPage].year_end +
  207. " 学年"
  208. }}
  209. </h5>
  210. <div class="btn-box">
  211. <a @click="changeCustomPage('-')"
  212. ><i class="el-icon-arrow-left"></i
  213. ></a>
  214. <a @click="changeCustomPage('+')"
  215. ><i class="el-icon-arrow-right"></i
  216. ></a>
  217. </div>
  218. </div>
  219. <ul class="custom-box-bottom">
  220. <li
  221. v-for="(itemc, indexc) in info.issue_no_school_year_list[
  222. customPage
  223. ].issue_no_list"
  224. :key="indexc"
  225. :style="{
  226. width: itemc.width ? itemc.width * 52 + 'px' : '',
  227. borderRight: itemc.farRight ? 'none !important' : '',
  228. borderBottom: itemc.farBottom ? 'none !important' : '',
  229. }"
  230. :class="[
  231. customOrderNumberList.indexOf(itemc.issue_no) > -1
  232. ? 'active'
  233. : '',
  234. ]"
  235. @click="changeCustomOrder(itemc)"
  236. >
  237. <el-tooltip placement="bottom">
  238. <div slot="content">
  239. 第 {{ itemc.issue_no }} 期<br />
  240. 出版日期:{{ itemc.shelve_date }}
  241. </div>
  242. <el-button class="custom-btn">{{
  243. itemc.issue_no
  244. }}</el-button>
  245. </el-tooltip>
  246. </li>
  247. </ul>
  248. </div>
  249. <template v-if="orderTotalNumber !== -1">
  250. <b v-if="orderTotalNumber !== 1000"
  251. >{{ info.issue_no_begin }} - {{ info.issue_no_end }}</b
  252. >
  253. <b v-else>已选 {{ customOrderNumberList.length }} 期</b>
  254. <el-tooltip placement="bottom" style="height: 32px">
  255. <div slot="content">
  256. <el-table
  257. class="order-table"
  258. :data="orderTable"
  259. max-height="200px"
  260. style="width: 317px"
  261. >
  262. <el-table-column label="#" type="index" width="30">
  263. </el-table-column>
  264. <el-table-column
  265. property="issue_no"
  266. label="期"
  267. width="112"
  268. >
  269. </el-table-column>
  270. <el-table-column
  271. property="shelve_date"
  272. label="发行日期"
  273. width="100"
  274. >
  275. </el-table-column>
  276. <el-table-column
  277. property="price"
  278. label="价格"
  279. width="75"
  280. >
  281. <template slot-scope="scope">
  282. {{ scope.row.price | cutMoneyFiter }}
  283. </template>
  284. </el-table-column>
  285. </el-table>
  286. </div>
  287. <el-button class="tooltip-btn"
  288. ><svg-icon icon-class="icon-mark"></svg-icon
  289. ></el-button>
  290. </el-tooltip>
  291. </template>
  292. </div>
  293. </div>
  294. <div class="info-item order-item" v-if="bookType === 'jingdu'">
  295. <label>有效期</label>
  296. <div class="order-content">
  297. <b>365天</b>
  298. <el-tooltip placement="right">
  299. <div slot="content">{{ validityStr }}</div>
  300. <el-button class="tooltip-btn"
  301. ><svg-icon icon-class="icon-mark"></svg-icon
  302. ></el-button>
  303. </el-tooltip>
  304. </div>
  305. </div>
  306. <div
  307. class="info-item order-item"
  308. v-if="settlement || info.settlement_price"
  309. >
  310. <label>结算价格</label>
  311. <div class="order-content">
  312. <span class="OPPOSans"
  313. >¥{{
  314. settlement
  315. ? settlement.price_settlement
  316. : info.settlement_price.price_settlement | cutMoneyFiter
  317. }}</span
  318. >
  319. <span
  320. class="old-price"
  321. v-if="
  322. (settlement &&
  323. settlement.price &&
  324. settlement.price_settlement !== settlement.price) ||
  325. (info.settlement_price &&
  326. info.settlement_price.price !==
  327. info.settlement_price.price_settlement)
  328. "
  329. >¥{{
  330. settlement
  331. ? settlement.price
  332. : info.settlement_price.price | cutMoneyFiter
  333. }}</span
  334. >
  335. </div>
  336. </div>
  337. <!-- <div class="info-item order-item" v-if="bookType === 'huakan'">
  338. <label>结算价格</label>
  339. <div class="order-content">
  340. <span class="OPPOSans">¥28.80</span>
  341. <span class="old-price">¥30.20</span>
  342. </div>
  343. </div> -->
  344. </div>
  345. <div class="btn-box">
  346. <el-button
  347. class="el-button"
  348. @click="handleChangeWay('wei')"
  349. :loading="createOrderLoading"
  350. >立即购买</el-button
  351. >
  352. <!-- <el-button class="upgrade" @click="handleChangeWay('dui')">使用兑换码</el-button> -->
  353. </div>
  354. </div>
  355. </div>
  356. </div>
  357. <el-dialog
  358. :visible.sync="paymentShow"
  359. :show-close="false"
  360. :close-on-click-modal="false"
  361. width="712px"
  362. class="bookItem-dialog"
  363. v-if="paymentShow"
  364. >
  365. <Payment
  366. :data="info"
  367. :payWay="payWay"
  368. @handleClose="handleClose"
  369. @handleSuccess="handleSuccess"
  370. :orderId="orderId"
  371. :qr_code_url="qr_code_url"
  372. :order_amount="order_amount"
  373. />
  374. </el-dialog>
  375. </div>
  376. </template>
  377. <script>
  378. //这里可以导入其它文件(比如:组件,工具js,第三方插件js,json文件,图片文件等等)
  379. //例如:import 《组件名称》from ‘《组件路径》';
  380. import Header from "../../components/Header.vue";
  381. import { cutMoneyFiter } from "@/utils/defined";
  382. import { getLogin } from "@/api/ajax";
  383. import { mapState } from "vuex";
  384. import Payment from "../bookShelf/components/Payment.vue";
  385. import { getToken } from "@/utils/auth";
  386. export default {
  387. //import引入的组件需要注入到对象中才能使用
  388. components: { Header, Payment },
  389. props: [],
  390. filters: {
  391. cutMoneyFiter,
  392. },
  393. data() {
  394. //这里存放数据
  395. return {
  396. config: this.$route.query.headerConfig
  397. ? decodeURIComponent(this.$route.query.headerConfig)
  398. : "",
  399. LoginNavIndex: 0,
  400. userBg: "rgba(0, 0, 0, 0.24)",
  401. headerBorder: "#5C5C5C",
  402. headerBg: "#00ADEF",
  403. previousPage: "商城",
  404. data: {
  405. navTitle: "第 815 期 Celebrating new King",
  406. title: "第 815 期 Celebrating new King",
  407. org: "二十一世纪英文报",
  408. tagList: ["中英双语", "经典读物", "初中必读"],
  409. imgList: [
  410. require("../../assets/img1.png"),
  411. require("../../assets/bookcard-image.png"),
  412. ],
  413. describe: {
  414. title: "Bring books up to date",
  415. author: "TEENS",
  416. describe:
  417. "Should childrenn read the original or adapted version? 英国童书再版遭大量删改引争议 词数 372 测试见IV版 建议阅读时间 5分钟 Puffin ...",
  418. },
  419. price: "3.9",
  420. oldPrice: "5.99",
  421. isBuy: this.$route.query.isBuy ? this.$route.query.isBuy : false,
  422. },
  423. tagBg: ["#C9EBFF", "#FFFAC9", "#D7C9FF"], // 标签背景色
  424. tagColor: ["#006DAA", "#AA8500", "#7849C4"], // 标签字体颜色
  425. paymentShow: false, // 支付弹窗
  426. payWay: this.$route.query.paywei ? this.$route.query.paywei : "dui",
  427. bookType: this.$route.query.type ? this.$route.query.type : "baozhi", // 书籍类型
  428. bannerFlag: true, // 是否展示广告
  429. id: this.$route.query.id ? this.$route.query.id : "",
  430. info: null, // 信息
  431. courseList: [],
  432. sales: null,
  433. salesCn: "",
  434. isBuy: "false",
  435. studyType: this.$route.query.studyType ? this.$route.query.studyType : 11,
  436. studyTypeName: this.$route.query.studyTypeName
  437. ? decodeURIComponent(this.$route.query.studyTypeName)
  438. : "小学版",
  439. orderTotalNumber: 5,
  440. orderList: [
  441. {
  442. label: "5 期",
  443. value: 5,
  444. },
  445. {
  446. label: "10 期",
  447. value: 10,
  448. },
  449. {
  450. label: "20 期",
  451. value: 20,
  452. },
  453. {
  454. label: "40 期",
  455. value: 40,
  456. },
  457. {
  458. label: "年订阅(当月起订)",
  459. value: -1,
  460. },
  461. {
  462. label: "自定义",
  463. value: 1000,
  464. },
  465. ],
  466. orderTable: [
  467. {
  468. name: "915 期(合刊)",
  469. date: "2023-06-26",
  470. price: 12,
  471. },
  472. {
  473. name: "915 期(合刊)",
  474. date: "2023-06-26",
  475. price: 12,
  476. },
  477. {
  478. name: "915 期(合刊)",
  479. date: "2023-06-26",
  480. price: 12,
  481. },
  482. {
  483. name: "915 期(合刊)",
  484. date: "2023-06-26",
  485. price: 12,
  486. },
  487. {
  488. name: "915 期(合刊)",
  489. date: "2023-06-26",
  490. price: 12,
  491. },
  492. {
  493. name: "915 期(合刊)",
  494. date: "2023-06-26",
  495. price: 12,
  496. },
  497. {
  498. name: "915 期(合刊)",
  499. date: "2023-06-26",
  500. price: 12,
  501. },
  502. {
  503. name: "915 期(合刊)",
  504. date: "2023-06-26",
  505. price: 12,
  506. },
  507. {
  508. name: "915 期(合刊)",
  509. date: "2023-06-26",
  510. price: 12,
  511. },
  512. ],
  513. customPage: 0,
  514. custonList: [
  515. {
  516. title: "2019-2020 学年",
  517. total: 14,
  518. list: [
  519. {
  520. label: "759",
  521. value: "759",
  522. width: 1,
  523. number: 1, // 算完下一个去复制上一个是不是末位 如果下一个加起来的number/10有余数那就是下一行了
  524. },
  525. {
  526. label: "758",
  527. value: "758",
  528. width: 1,
  529. number: 2,
  530. },
  531. {
  532. label: "757",
  533. value: "757",
  534. width: 1,
  535. number: 3,
  536. },
  537. {
  538. label: "756",
  539. value: "756",
  540. width: 1,
  541. number: 4,
  542. },
  543. {
  544. label: "755",
  545. value: "755",
  546. width: 1,
  547. number: 5,
  548. },
  549. {
  550. label: "754",
  551. value: "754",
  552. width: 1,
  553. number: 1,
  554. },
  555. {
  556. label: "753",
  557. value: "753",
  558. width: 1,
  559. number: 1,
  560. },
  561. {
  562. label: "752",
  563. value: "752",
  564. width: 1,
  565. number: 1,
  566. },
  567. {
  568. label: "751",
  569. value: "751",
  570. width: 1,
  571. number: 1,
  572. },
  573. {
  574. label: "751",
  575. value: "751",
  576. width: 1,
  577. number: 1,
  578. farRight: true,
  579. },
  580. {
  581. label: "共同战“疫”",
  582. value: "gong",
  583. width: 2,
  584. number: 1,
  585. farBottom: true,
  586. },
  587. {
  588. label: "750",
  589. value: "750",
  590. width: 1,
  591. number: 1,
  592. farBottom: true,
  593. },
  594. {
  595. label: "769",
  596. value: "769",
  597. width: 1,
  598. number: 1,
  599. farBottom: true,
  600. },
  601. ],
  602. },
  603. ],
  604. customOrderNumberList: [],
  605. validityStr: "", // 有效期
  606. rules: "", // 折扣规则
  607. loading: false,
  608. orderId: "",
  609. qr_code_url: "",
  610. order_amount: null,
  611. userMessage: getToken() ? JSON.parse(getToken()) : null,
  612. studyTypeList: [
  613. {
  614. study_phase: 11,
  615. study_phase_name: "小学版",
  616. },
  617. {
  618. study_phase: 21,
  619. study_phase_name: "初一版",
  620. },
  621. {
  622. study_phase: 22,
  623. study_phase_name: "初二版",
  624. },
  625. {
  626. study_phase: 23,
  627. study_phase_name: "初三版",
  628. },
  629. ],
  630. settlement: null, // 结算价格
  631. createOrderLoading: false,
  632. valid_period_id: null,
  633. totalLength: 0,
  634. };
  635. },
  636. //计算属性 类似于data概念
  637. computed: {
  638. ...mapState(["$studyType"]),
  639. },
  640. //监控data中数据变化
  641. watch: {},
  642. //方法集合
  643. methods: {
  644. // 分享
  645. handleShare() {},
  646. // 收藏
  647. handlelike() {},
  648. handleChangeWay(type) {
  649. if (!this.userMessage) {
  650. this.$refs.header.handleLogin(
  651. "/subscribe?name=" +
  652. this.$route.query.name +
  653. "&type=" +
  654. this.$route.query.type +
  655. "&paywei=" +
  656. type,
  657. "url"
  658. );
  659. return false;
  660. }
  661. this.payWay = type;
  662. this.handleOrder();
  663. },
  664. // 关闭弹窗
  665. handleClose() {
  666. this.paymentShow = false;
  667. },
  668. handleSuccess() {
  669. this.paymentShow = false;
  670. },
  671. // 详情
  672. getInfo(flag) {
  673. this.loading = true;
  674. if (flag) {
  675. }
  676. if (this.bookType === "baozhi") {
  677. if (this.orderTotalNumber !== -1) {
  678. let MethodName =
  679. "/ShopServer/Client/ReservationQuery/GetReservationInfo_Issue";
  680. let data = {
  681. goods_type: 2,
  682. study_phase: this.studyType,
  683. period_count:
  684. this.orderTotalNumber !== 1000
  685. ? this.orderTotalNumber
  686. : this.customOrderNumberList.length,
  687. is_custom_select_issue_no:
  688. this.orderTotalNumber !== 1000 ? "false" : "true",
  689. };
  690. getLogin(MethodName, data)
  691. .then((res) => {
  692. this.loading = false;
  693. if (res.status === 1) {
  694. this.info = res;
  695. this.orderTable = res.issue_no_list;
  696. res.issue_no_school_year_list.forEach((item) => {
  697. item.issue_no_list.forEach((items, indexs) => {
  698. const regex = /[\u4e00-\u9fa5]/g;
  699. if (regex.test(items.issue_no)) {
  700. items.width = Math.ceil(items.issue_no.length / 3);
  701. items.number = item.issue_no_list[indexs - 1]
  702. ? item.issue_no_list[indexs - 1].number +
  703. Math.ceil(items.issue_no.length / 3)
  704. : Math.ceil(items.issue_no.length / 3);
  705. } else {
  706. items.width = 1;
  707. items.number = item.issue_no_list[indexs - 1]
  708. ? item.issue_no_list[indexs - 1].number + 1
  709. : 1;
  710. }
  711. });
  712. });
  713. }
  714. })
  715. .catch(() => {
  716. this.loading = false;
  717. });
  718. }
  719. if (
  720. this.totalLength >=
  721. (this.orderTotalNumber !== 1000
  722. ? this.orderTotalNumber
  723. : this.customOrderNumberList.length)
  724. ) {
  725. this.handleOrderPrice();
  726. } else {
  727. this.settlement = null;
  728. }
  729. } else if (this.bookType === "huakan") {
  730. this.loading = false;
  731. if (this.orderTotalNumber !== -1) {
  732. let MethodName =
  733. "/ShopServer/Client/ReservationQuery/GetReservationInfo_Issue";
  734. let data = {
  735. goods_type: 4,
  736. study_phase: 1,
  737. period_count:
  738. this.orderTotalNumber !== 1000
  739. ? this.orderTotalNumber
  740. : this.customOrderNumberList.length,
  741. is_custom_select_issue_no:
  742. this.orderTotalNumber !== 1000 ? "false" : "true",
  743. };
  744. getLogin(MethodName, data)
  745. .then((res) => {
  746. this.loading = false;
  747. if (res.status === 1) {
  748. this.info = res;
  749. this.orderTable = res.issue_no_list;
  750. res.issue_no_school_year_list.forEach((item) => {
  751. item.issue_no_list.forEach((items, indexs) => {
  752. const regex = /[\u4e00-\u9fa5]/g;
  753. if (regex.test(items.issue_no)) {
  754. items.width = Math.ceil(items.issue_no.length / 3);
  755. items.number = item.issue_no_list[indexs - 1]
  756. ? item.issue_no_list[indexs - 1].number +
  757. Math.ceil(items.issue_no.length / 3)
  758. : Math.ceil(items.issue_no.length / 3);
  759. } else {
  760. items.width = 1;
  761. items.number = item.issue_no_list[indexs - 1]
  762. ? item.issue_no_list[indexs - 1].number + 1
  763. : 1;
  764. }
  765. });
  766. });
  767. }
  768. })
  769. .catch(() => {
  770. this.loading = false;
  771. });
  772. }
  773. // this.info = {
  774. // issue_no_end: "928",
  775. // issue_no_school_year_list: [],
  776. // issue_info: {
  777. // period_desc: "每月出版,2月、 8月休刊",
  778. // age_desc: "5-8 岁",
  779. // price: 10,
  780. // organizer: "中国日报社《二十一世纪学生英文报》",
  781. // page_count_desc: "24 页",
  782. // },
  783. // price_reservation: 10,
  784. // issue_no_begin: "929",
  785. // issue_no_list: [
  786. // {
  787. // shelve_date: "2024-07-31",
  788. // issue_no: "929",
  789. // price: 2.4,
  790. // },
  791. // {
  792. // shelve_date: "2025-07-10",
  793. // issue_no: "931",
  794. // price: 2.4,
  795. // },
  796. // {
  797. // shelve_date: "2025-08-07",
  798. // issue_no: "928",
  799. // price: 2.4,
  800. // },
  801. // ],
  802. // };
  803. if (
  804. this.totalLength >=
  805. (this.orderTotalNumber !== 1000
  806. ? this.orderTotalNumber
  807. : this.customOrderNumberList.length)
  808. ) {
  809. this.handleOrderPrice();
  810. } else {
  811. this.settlement = null;
  812. }
  813. } else {
  814. let MethodName =
  815. "/ShopServer/Client/ReservationQuery/GetReservationValidPeriodList_Iread";
  816. getLogin(MethodName, {})
  817. .then((res) => {
  818. this.loading = false;
  819. if (res.status === 1) {
  820. this.valid_period_id = res.valid_period_list[0]
  821. ? res.valid_period_list[0].id
  822. : "";
  823. getLogin(
  824. "/ShopServer/Client/ReservationQuery/GetReservationInfo_Iread",
  825. {
  826. study_phase: this.studyType,
  827. valid_period_id: res.valid_period_list[0]
  828. ? res.valid_period_list[0].id
  829. : "",
  830. }
  831. )
  832. .then((ress) => {
  833. if (ress.status === 1) {
  834. this.info = ress;
  835. }
  836. })
  837. .catch(() => {});
  838. }
  839. })
  840. .catch(() => {
  841. this.loading = false;
  842. });
  843. }
  844. },
  845. // 计算结算价格
  846. handleOrderPrice(flag) {
  847. this.loading = true;
  848. let MethodName =
  849. "/ShopServer/Client/ReservationQuery/ComputeReservationSettlementPrice_Issue";
  850. let data = {
  851. goods_type: this.bookType === "huakan" ? 4 : 2,
  852. study_phase: this.studyType,
  853. period_count:
  854. this.orderTotalNumber !== 1000
  855. ? this.orderTotalNumber
  856. : this.customOrderNumberList.length,
  857. is_custom_select_issue_no:
  858. this.orderTotalNumber !== 1000 ? "false" : "true",
  859. issue_no_list: this.customOrderNumberList,
  860. };
  861. getLogin(MethodName, data)
  862. .then((res) => {
  863. this.loading = false;
  864. if (res.status === 1) {
  865. this.settlement = res;
  866. }
  867. })
  868. .catch(() => {
  869. this.loading = false;
  870. });
  871. },
  872. changeCustomOrder(item) {
  873. if (this.customOrderNumberList.indexOf(item.issue_no) > -1) {
  874. this.customOrderNumberList.splice(
  875. this.customOrderNumberList.indexOf(item.issue_no),
  876. 1
  877. );
  878. this.orderTable.splice(
  879. this.customOrderNumberList.indexOf(item.issue_no),
  880. 1
  881. );
  882. } else {
  883. this.customOrderNumberList.push(item.issue_no);
  884. this.orderTable.push(item);
  885. }
  886. this.handleOrderPrice();
  887. },
  888. async changeStudy(item) {
  889. this.studyType = item.study_phase;
  890. this.studyTypeName = item.study_phase_name;
  891. this.customOrderNumberList = [];
  892. await this.handleIssueLength();
  893. },
  894. changeOrderNumber(item, flag) {
  895. if (flag) return false;
  896. this.orderTotalNumber = item.value;
  897. this.getInfo();
  898. },
  899. getDiscountRule() {
  900. let MethodName =
  901. "/OrgServer/Client/SysConfigQuery/GetSysConfig_DiscountRule";
  902. getLogin(MethodName, {}).then((res) => {
  903. if (res.status === 1) {
  904. let str = "一次性订阅:<br/>";
  905. res.rule_list.forEach((item) => {
  906. str +=
  907. item.buy_count + " 期 " + item.discount.toFixed(1) + " 折<br/>";
  908. });
  909. this.rules = str;
  910. }
  911. });
  912. },
  913. changeCustomPage(type) {
  914. if (type === "-") {
  915. if (this.customPage !== 0) {
  916. this.customPage--;
  917. } else {
  918. this.$message.warning("已经是最新学年");
  919. }
  920. } else {
  921. if (
  922. this.customPage !==
  923. this.info.issue_no_school_year_list.length - 1
  924. ) {
  925. this.customPage++;
  926. } else {
  927. this.$message.warning("后面没有数据啦");
  928. }
  929. }
  930. },
  931. // 生成订单
  932. handleOrder() {
  933. this.createOrderLoading = true;
  934. let MethodName = "/ShopServer/Client/OrderManager/CreateOrder";
  935. let data = {
  936. is_reservation: "true",
  937. sale_model: this.bookType === "jingdu" ? 1 : 0,
  938. goods_type:
  939. this.bookType === "jingdu" ? 3 : this.bookType === "huakan" ? 4 : 2,
  940. goods_study_phase: this.bookType === "huakan" ? 1 : this.studyType,
  941. period_count:
  942. this.orderTotalNumber !== 1000
  943. ? this.orderTotalNumber
  944. : this.customOrderNumberList.length,
  945. is_custom_select_issue_no:
  946. this.orderTotalNumber !== 1000 ? "false" : "true",
  947. issue_no_list: this.customOrderNumberList,
  948. pay_type:
  949. this.payWay === "wei"
  950. ? 3
  951. : this.payWay === "zhi"
  952. ? 4
  953. : this.payWay === "dui"
  954. ? 5
  955. : null,
  956. valid_period_id: this.valid_period_id,
  957. };
  958. getLogin(MethodName, data)
  959. .then((res) => {
  960. this.createOrderLoading = false;
  961. if (res.status === 1) {
  962. this.order_amount = res.order_amount;
  963. if (this.order_amount <= 0) {
  964. } else {
  965. this.orderId = res.id;
  966. this.qr_code_url = res.qr_code_url;
  967. this.paymentShow = true;
  968. }
  969. }
  970. })
  971. .catch(() => {
  972. this.createOrderLoading = false;
  973. });
  974. // this.paymentShow = true;
  975. },
  976. getTotalSales() {
  977. let MethodName = "/ShopServer/Client/ShopHomeQuery/GetGoodsTotalSales";
  978. let data = {
  979. goods_type:
  980. this.bookType === "jingdu" ? 3 : this.bookType === "huakan" ? 4 : 2,
  981. };
  982. getLogin(MethodName, data)
  983. .then((res) => {
  984. if (res.status === 1) {
  985. this.sales = res.sale_count;
  986. if (this.sales < 1000) {
  987. this.salesCn = "";
  988. } else if (1000 <= this.sales && this.sales < 10000) {
  989. this.salesCn = this.sales.toString().substring(0, 1) + "000+";
  990. } else if (10000 <= this.sales && this.sales < 100000) {
  991. this.salesCn = this.sales.toString().substring(0, 1) + "万+";
  992. } else if (100000 <= this.sales && this.sales < 1000000) {
  993. this.salesCn = this.sales.toString().substring(0, 1) + "0万+";
  994. } else if (1000000 <= this.sales && this.sales < 10000000) {
  995. this.salesCn = this.sales.toString().substring(0, 1) + "00万+";
  996. } else if (10000000 <= this.sales && this.sales < 100000000) {
  997. this.salesCn = this.sales.toString().substring(0, 1) + "000万+";
  998. } else if (100000000 <= this.sales) {
  999. this.salesCn = this.sales.toString().substring(0, 1) + "亿+";
  1000. }
  1001. }
  1002. })
  1003. .catch(() => {});
  1004. },
  1005. // 获取已发行期数
  1006. handleIssueLength() {
  1007. let MethodName =
  1008. "/ShopServer/Client/ReservationQuery/GetReservationInfo_Issue";
  1009. let data = {
  1010. goods_type: this.bookType === "baozhi" ? 2 : 4,
  1011. study_phase: this.bookType === "baozhi" ? this.studyType : 1,
  1012. period_count:
  1013. this.orderTotalNumber !== 1000
  1014. ? this.orderTotalNumber
  1015. : this.customOrderNumberList.length,
  1016. is_custom_select_issue_no: "true",
  1017. };
  1018. getLogin(MethodName, data)
  1019. .then((res) => {
  1020. if (res.status === 1) {
  1021. this.totalLength = 0;
  1022. res.issue_no_school_year_list.forEach((item) => {
  1023. this.totalLength += item.issue_no_list.length;
  1024. });
  1025. this.getInfo();
  1026. }
  1027. })
  1028. .catch(() => {});
  1029. },
  1030. },
  1031. //生命周期 - 创建完成(可以访问当前this实例)
  1032. async created() {
  1033. if (this.config) {
  1034. let arr = this.config.split("&&&");
  1035. this.LoginNavIndex = arr[0] * 1;
  1036. this.userBg = arr[1] ? arr[1] : "rgba(0, 0, 0, 0.24)";
  1037. this.headerBorder = arr[2] ? arr[2] : "#5C5C5C";
  1038. this.headerBg = arr[3] ? arr[3] : "#00ADEF";
  1039. this.previousPage = arr[4] ? arr[4] : "商城";
  1040. }
  1041. if (this.bookType === "baozhi" || this.bookType === "huakan") {
  1042. await this.handleIssueLength();
  1043. } else {
  1044. this.getInfo();
  1045. }
  1046. this.getDiscountRule();
  1047. let date1 =
  1048. new Date().getFullYear() +
  1049. "." +
  1050. (new Date().getMonth() + 1 < 10
  1051. ? "0" + (new Date().getMonth() + 1)
  1052. : new Date().getMonth() + 1) +
  1053. "." +
  1054. new Date().getDate();
  1055. let data2 = new Date(
  1056. new Date(
  1057. new Date().getFullYear() +
  1058. 1 +
  1059. "." +
  1060. (new Date().getMonth() + 1 < 10
  1061. ? "0" + (new Date().getMonth() + 1)
  1062. : new Date().getMonth() + 1) +
  1063. "." +
  1064. new Date().getDate()
  1065. ).getTime() -
  1066. 24 * 60 * 60 * 1000
  1067. );
  1068. data2 =
  1069. data2.getFullYear() +
  1070. "." +
  1071. (data2.getMonth() + 1 < 10
  1072. ? "0" + (data2.getMonth() + 1)
  1073. : data2.getMonth() + 1) +
  1074. "." +
  1075. data2.getDate();
  1076. this.validityStr = date1 + " ~ " + data2;
  1077. if (this.$route.query.paywei) {
  1078. this.handleOrder();
  1079. }
  1080. this.getTotalSales();
  1081. },
  1082. //生命周期 - 挂载完成(可以访问DOM元素)
  1083. mounted() {},
  1084. //生命周期-创建之前
  1085. beforeCreated() {},
  1086. //生命周期-挂载之前
  1087. beforeMount() {},
  1088. //生命周期-更新之前
  1089. beforUpdate() {},
  1090. //生命周期-更新之后
  1091. updated() {},
  1092. //生命周期-销毁之前
  1093. beforeDestory() {},
  1094. //生命周期-销毁完成
  1095. destoryed() {},
  1096. //如果页面有keep-alive缓存功能,这个函数会触发
  1097. activated() {},
  1098. };
  1099. </script>
  1100. <style lang="scss" scoped>
  1101. /* @import url(); 引入css类 */
  1102. .bookItem {
  1103. background: #f7f8fa;
  1104. min-height: calc(100vh - 135px);
  1105. .main-top {
  1106. background: #ffffff;
  1107. padding: 48px 0;
  1108. margin-top: 56px;
  1109. min-height: calc(100vh - 135px);
  1110. &-inner {
  1111. width: 1200px;
  1112. margin: 0 auto;
  1113. display: flex;
  1114. .swiper-container {
  1115. width: 416px;
  1116. height: 440px;
  1117. text-align: center;
  1118. .el-image {
  1119. width: 414px;
  1120. height: 414px;
  1121. border: 1px solid #f3f3f3;
  1122. }
  1123. }
  1124. .book-info-right {
  1125. flex: 1;
  1126. padding-left: 88px;
  1127. .title {
  1128. color: #2f3742;
  1129. font-weight: 500;
  1130. font-size: 32px;
  1131. line-height: 44px;
  1132. margin: 0 0 16px 0;
  1133. }
  1134. .org,
  1135. .date {
  1136. font-weight: 500;
  1137. font-size: 14px;
  1138. line-height: 22px;
  1139. color: rgba(0, 0, 0, 0.4);
  1140. }
  1141. .date {
  1142. margin-left: 32px;
  1143. line-height: 24px;
  1144. }
  1145. .label-box {
  1146. display: flex;
  1147. flex-flow: wrap;
  1148. margin: 16px 0;
  1149. label {
  1150. margin: 0 8px 8px 0;
  1151. border-radius: 20px;
  1152. padding: 4px 12px;
  1153. font-weight: 400;
  1154. font-size: 14px;
  1155. line-height: 22px;
  1156. }
  1157. }
  1158. .book-describe {
  1159. border-top: 1px solid #e5e6eb;
  1160. border-bottom: 1px solid #e5e6eb;
  1161. padding: 16px 0;
  1162. .title {
  1163. font-weight: 500;
  1164. font-size: 16px;
  1165. line-height: 24px;
  1166. color: #000000;
  1167. margin-bottom: 8px;
  1168. }
  1169. .author {
  1170. font-weight: 400;
  1171. font-size: 12px;
  1172. line-height: 20px;
  1173. color: #000000;
  1174. margin-bottom: 8px;
  1175. display: block;
  1176. }
  1177. .describe {
  1178. font-weight: 400;
  1179. font-size: 14px;
  1180. line-height: 22px;
  1181. color: #000000;
  1182. margin: 0;
  1183. }
  1184. }
  1185. .price-box {
  1186. padding: 20px 0 16px 0;
  1187. display: flex;
  1188. align-items: flex-end;
  1189. .price {
  1190. font-weight: 500;
  1191. font-size: 32px;
  1192. line-height: 40px;
  1193. color: #ea5939;
  1194. }
  1195. .oldPrice {
  1196. padding: 0 0 2px 7px;
  1197. font-weight: 500;
  1198. font-size: 14px;
  1199. line-height: 22px;
  1200. color: rgba(0, 0, 0, 0.4);
  1201. text-decoration-line: line-through;
  1202. }
  1203. }
  1204. .info-box {
  1205. display: flex;
  1206. flex-flow: wrap;
  1207. border-bottom: 1px solid #ebebeb;
  1208. width: 680px;
  1209. margin-top: 48px;
  1210. .info-item {
  1211. width: 50%;
  1212. margin-bottom: 15px;
  1213. font-size: 14px;
  1214. line-height: 22px;
  1215. display: flex;
  1216. }
  1217. label {
  1218. color: #c2c2c2;
  1219. font-weight: 400;
  1220. margin-right: 16px;
  1221. width: 58px;
  1222. flex-shrink: 0;
  1223. display: block;
  1224. text-align: justify;
  1225. text-justify: distribute-all-lines;
  1226. text-align-last: justify;
  1227. -moz-text-align-last: justify;
  1228. -webkit-text-align-last: justify;
  1229. }
  1230. }
  1231. .order-box {
  1232. margin-bottom: 24px;
  1233. padding: 24px 0 0;
  1234. margin-top: 0;
  1235. .order-item {
  1236. margin-bottom: 24px;
  1237. width: 100%;
  1238. label {
  1239. line-height: 32px;
  1240. }
  1241. .order-content {
  1242. line-height: 32px;
  1243. ul {
  1244. margin: 0;
  1245. padding: 0;
  1246. list-style: none;
  1247. display: flex;
  1248. flex-flow: wrap;
  1249. li {
  1250. cursor: pointer;
  1251. border-radius: 2px;
  1252. background: #f2f3f5;
  1253. margin-right: 8px;
  1254. margin-bottom: 8px;
  1255. padding: 4px 15px;
  1256. color: #000;
  1257. font-size: 14px;
  1258. font-weight: 500;
  1259. line-height: 22px;
  1260. border: 1px solid #f2f3f5;
  1261. &.active {
  1262. color: #ea5939;
  1263. background: #ffffff;
  1264. border-color: #ea5939;
  1265. }
  1266. &.disabled {
  1267. cursor: not-allowed;
  1268. background: #f2f3f5;
  1269. color: #bababa;
  1270. border-color: #f2f3f5;
  1271. }
  1272. }
  1273. }
  1274. .el-table {
  1275. background: #303133;
  1276. }
  1277. }
  1278. .OPPOSans {
  1279. margin: 0 8px 0 0;
  1280. color: #ea5939;
  1281. font-size: 20px;
  1282. font-weight: 500;
  1283. line-height: 28px;
  1284. }
  1285. .old-price {
  1286. color: rgba(0, 0, 0, 1);
  1287. font-size: 12px;
  1288. font-weight: 500;
  1289. line-height: 22px;
  1290. text-decoration: line-through;
  1291. }
  1292. }
  1293. }
  1294. .btn-box {
  1295. display: flex;
  1296. .el-button {
  1297. width: 112px;
  1298. height: 40px;
  1299. background: #ea5939;
  1300. box-shadow: 0px 8px 16px rgba(234, 89, 57, 0.24);
  1301. border-radius: 4px;
  1302. font-weight: 500;
  1303. font-size: 16px;
  1304. color: #ffffff;
  1305. border: none;
  1306. }
  1307. .svg-icon {
  1308. margin-left: 7px;
  1309. }
  1310. .continue {
  1311. width: 112px;
  1312. height: 40px;
  1313. background: #175dff;
  1314. border-radius: 4px;
  1315. font-weight: 500;
  1316. font-size: 16px;
  1317. line-height: 40px;
  1318. color: rgba(255, 255, 255, 1);
  1319. display: block;
  1320. text-align: center;
  1321. box-shadow: 0px 8px 16px rgba(23, 93, 255, 0.24);
  1322. }
  1323. .upgrade {
  1324. margin-left: 16px;
  1325. display: block;
  1326. padding: 0px 24px;
  1327. height: 40px;
  1328. background: #e9e9e9;
  1329. box-shadow: 0px 8px 16px rgba(0, 0, 0, 0.06);
  1330. border-radius: 4px;
  1331. color: #595959;
  1332. font-weight: 500;
  1333. font-size: 16px;
  1334. line-height: 40px;
  1335. text-align: center;
  1336. width: 130px;
  1337. }
  1338. }
  1339. }
  1340. }
  1341. }
  1342. .main-center {
  1343. width: 1200px;
  1344. margin: 0 auto;
  1345. padding: 40px 0;
  1346. .el-tabs--card > .el-tabs__header .el-tabs__item.is-active {
  1347. border-color: #e7e7e7;
  1348. }
  1349. }
  1350. .main-bottom {
  1351. width: 1200px;
  1352. margin: 0 auto;
  1353. padding-bottom: 40px;
  1354. &-top {
  1355. display: flex;
  1356. justify-content: space-between;
  1357. p {
  1358. margin: 0;
  1359. font-weight: 500;
  1360. font-size: 24px;
  1361. line-height: 32px;
  1362. color: #1f2c5c;
  1363. font-family: initial;
  1364. }
  1365. .right {
  1366. color: rgba(0, 0, 0, 0.88);
  1367. font-weight: 400;
  1368. font-size: 16px;
  1369. line-height: 24px;
  1370. cursor: pointer;
  1371. a {
  1372. margin-right: 8px;
  1373. }
  1374. }
  1375. }
  1376. }
  1377. .list {
  1378. margin-top: 24px;
  1379. display: flex;
  1380. flex-wrap: wrap;
  1381. > div {
  1382. width: 200px;
  1383. border-radius: 8px;
  1384. overflow: hidden;
  1385. background: #ffffff;
  1386. margin-bottom: 24px;
  1387. }
  1388. }
  1389. }
  1390. .banner-box-close {
  1391. margin-top: 40px;
  1392. }
  1393. .sales-box {
  1394. display: flex;
  1395. width: 680px;
  1396. padding: 16px;
  1397. border-radius: 4px;
  1398. background: #f5f5f5;
  1399. justify-content: space-between;
  1400. align-items: flex-end;
  1401. color: #adadad;
  1402. font-size: 14px;
  1403. font-weight: 400;
  1404. line-height: 22px;
  1405. .OPPOSans {
  1406. margin: 0 8px 0 16px;
  1407. color: #ea5939;
  1408. font-size: 32px;
  1409. font-weight: 500;
  1410. line-height: 40px;
  1411. }
  1412. .old-price {
  1413. color: rgba(0, 0, 0, 0.4);
  1414. font-size: 14px;
  1415. font-weight: 500;
  1416. line-height: 22px;
  1417. text-decoration: line-through;
  1418. }
  1419. b {
  1420. color: rgba(0, 0, 0, 0.4);
  1421. font-size: 14px;
  1422. font-weight: 700;
  1423. line-height: 22px;
  1424. }
  1425. }
  1426. .custom-box {
  1427. width: 522px;
  1428. border: 1px solid #e5e6eb;
  1429. background: #fff;
  1430. margin: 4px 0 8px 0;
  1431. &-top {
  1432. padding: 8px 16px;
  1433. display: flex;
  1434. justify-content: space-between;
  1435. align-items: center;
  1436. h5 {
  1437. margin: 0;
  1438. color: #000;
  1439. font-size: 12px;
  1440. font-weight: 600;
  1441. line-height: 20px;
  1442. }
  1443. .btn-box {
  1444. a {
  1445. margin-left: 6px;
  1446. border-radius: 2px;
  1447. background: #f2f2f2;
  1448. width: 24px;
  1449. height: 24px;
  1450. display: block;
  1451. text-align: center;
  1452. line-height: 24px;
  1453. }
  1454. }
  1455. }
  1456. &-bottom {
  1457. border-top: 1px solid #e5e6eb;
  1458. li {
  1459. padding: 8px !important;
  1460. margin: 0 !important;
  1461. background: #ffffff !important;
  1462. border: none !important;
  1463. min-width: 52px;
  1464. height: 36px;
  1465. text-align: center;
  1466. border-right: 1px solid #e5e6eb !important;
  1467. border-bottom: 1px solid #e5e6eb !important;
  1468. border-radius: 0 !important;
  1469. display: flex;
  1470. .custom-btn {
  1471. border: none;
  1472. width: 100%;
  1473. background: initial;
  1474. padding: 0;
  1475. line-height: 20px;
  1476. height: 20px;
  1477. color: #000;
  1478. }
  1479. &.active {
  1480. border-right: 1px solid #f5f5f5 !important;
  1481. border-bottom: 1px solid #f5f5f5 !important;
  1482. background: #ea5939 !important;
  1483. &:hover {
  1484. .custom-btn {
  1485. color: #fff !important;
  1486. }
  1487. }
  1488. .custom-btn {
  1489. color: #fff !important;
  1490. }
  1491. }
  1492. &:hover {
  1493. .custom-btn {
  1494. color: #000 !important;
  1495. }
  1496. }
  1497. }
  1498. }
  1499. }
  1500. </style>
  1501. <style lang="scss">
  1502. .bookItem {
  1503. .el-carousel__button {
  1504. width: 8px;
  1505. height: 8px;
  1506. background: #d9d9d9;
  1507. opacity: 1;
  1508. border-radius: 4px;
  1509. }
  1510. .el-carousel__indicator.is-active {
  1511. .el-carousel__button {
  1512. background: #5e5e5e;
  1513. }
  1514. }
  1515. .el-tabs__header {
  1516. margin: 0;
  1517. }
  1518. .el-tab-pane {
  1519. background: #f8f8f8;
  1520. border: 1px solid #e7e7e7;
  1521. border-top: none;
  1522. padding: 24px;
  1523. }
  1524. .el-tabs__item {
  1525. width: 160px;
  1526. height: 38px;
  1527. text-align: center;
  1528. font-weight: 500;
  1529. font-size: 14px;
  1530. line-height: 38px;
  1531. color: #1f2c5c;
  1532. &:hover {
  1533. background: #e7e7e7;
  1534. }
  1535. &.is-active {
  1536. // background: #3459D2;
  1537. // color: #EEF3FF;
  1538. border-bottom: none;
  1539. background: #e7e7e7;
  1540. }
  1541. }
  1542. }
  1543. .bookitem-dropdown.el-dropdown-menu {
  1544. padding: 4px;
  1545. .el-dropdown-menu__item {
  1546. font-weight: 500;
  1547. font-size: 16px;
  1548. line-height: 40px;
  1549. color: #000000;
  1550. }
  1551. .el-dropdown-menu__item:focus,
  1552. .el-dropdown-menu__item:not(.is-disabled):hover {
  1553. background: #fdecee;
  1554. border-radius: 4px;
  1555. color: #ea5939;
  1556. }
  1557. }
  1558. .bookItem-dialog {
  1559. .el-dialog__header,
  1560. .el-dialog__body {
  1561. padding: 0;
  1562. }
  1563. .el-dialog {
  1564. border: 1px solid #ebebeb;
  1565. box-shadow: 0px 6px 30px 5px rgba(0, 0, 0, 0.05),
  1566. 0px 16px 24px 2px rgba(0, 0, 0, 0.04),
  1567. 0px 8px 10px -5px rgba(0, 0, 0, 0.08);
  1568. border-radius: 8px;
  1569. overflow: hidden;
  1570. }
  1571. }
  1572. .tooltip-btn {
  1573. border: none;
  1574. padding: 0;
  1575. margin-left: 6px;
  1576. color: #bebebe;
  1577. &:focus,
  1578. &:hover {
  1579. color: #bebebe;
  1580. background: none;
  1581. }
  1582. }
  1583. .order-table.el-table {
  1584. font-size: 12px;
  1585. color: #fff;
  1586. line-height: 20px;
  1587. }
  1588. .order-table.el-table th.el-table__cell {
  1589. background: #3e424b !important;
  1590. padding: 2px 5px;
  1591. }
  1592. .order-table.el-table .el-table__cell {
  1593. padding: 2px 5px;
  1594. }
  1595. .order-table.el-table thead {
  1596. font-size: 12px;
  1597. color: #fff;
  1598. line-height: 20px;
  1599. }
  1600. .order-table.el-table td.el-table__cell,
  1601. .order-table.el-table th.el-table__cell.is-leaf {
  1602. border-bottom-color: #3e424b;
  1603. }
  1604. .order-table.el-table tr,
  1605. .order-table.el-table--enable-row-hover
  1606. .el-table__body
  1607. tr:hover
  1608. > td.el-table__cell {
  1609. background: #1d2129;
  1610. }
  1611. .order-table.el-table .cell {
  1612. padding: 0 5px !important;
  1613. }
  1614. .order-table.el-table::before {
  1615. height: 0;
  1616. }
  1617. .order-table.el-table--scrollable-y .el-table__body-wrapper::-webkit-scrollbar {
  1618. display: none;
  1619. }
  1620. </style>