_id.vue 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398
  1. <template>
  2. <main>
  3. <!-- Breadcrumbs -->
  4. <div class="a-spacing-top-medium"></div>
  5. <div class="container-fluid">
  6. <div class="wayfinding-breadcrumbs-container">
  7. <ul class="a-unordered-list a-horizontal a-size-small">
  8. <li>
  9. <span class="a-list-item">
  10. <a class="a-link-normal a-color-tertiary" href="#">{{ product.category.title }}</a>
  11. </span>
  12. </li>
  13. <li>
  14. <span class="a-list-item">></span>
  15. </li>
  16. <li>
  17. <span class="a-list-item">
  18. <a class="a-link-normal a-color-tertiary" href="#">{{ product.title }}</a>
  19. </span>
  20. </li>
  21. </ul>
  22. </div>
  23. </div>
  24. <div class="container-fluid">
  25. <div class="dp-container">
  26. <div class="row">
  27. <!-- First 3 grid - Product Image and Author's section -->
  28. <div class="col-lg-3 col-md-3 col-sm-4">
  29. <div class="leftCol">
  30. <!-- Image -->
  31. <div clas="imgBlock">
  32. <div class="eBooksimg">
  33. <img :src="product.photo" class="img-fluid" />
  34. </div>
  35. </div>
  36. <!-- Follow Author -->
  37. <div class="authorFollow">
  38. <hr class="a-divider-normal" />
  39. <h1 class="authorFollowHeading">Follow The Author</h1>
  40. <div class="a-spacing-top-small">
  41. <div class="row">
  42. <!-- Author's image -->
  43. <div class="col-xl-3 col-lg-3 col-md-3 col-sm-3 col-3">
  44. <div class="smallAuthorImageContainer">
  45. <a href="#">
  46. <img :src="product.owner.photo" class="img-fluid" />
  47. </a>
  48. </div>
  49. </div>
  50. <!-- Author's Name -->
  51. <div class="col-xl-4 col-lg-3 col-md-3 col-sm-3 col-3">
  52. <div class="authorNameCol">
  53. <a href="#">{{ product.owner.name }}</a>
  54. </div>
  55. </div>
  56. <!-- Author's Follow Button -->
  57. <div class="col-xl-5 col-lg-6 col-md-6 col-sm-6 col-6">
  58. <div class="authorBtn mt-2">
  59. <a href="#">
  60. <span class="btnFollow">
  61. <span class="a-btn-inner">
  62. <button class="a-btn-text">+ Follow</button>
  63. </span>
  64. </span>
  65. </a>
  66. </div>
  67. </div>
  68. </div>
  69. </div>
  70. </div>
  71. </div>
  72. </div>
  73. <!-- Middle 6 grid Description -->
  74. <div class="col-lg-6 col-md-6 col-sm-8">
  75. <div class="centerCol">
  76. <!-- Product Title -->
  77. <div class="titleDiv">
  78. <h1 class="productTitle">
  79. <span class="largeTitle">{{ product.title }}</span>
  80. <span class="smallTitle">Paperback</span>
  81. </h1>
  82. </div>
  83. <!-- Author's name -->
  84. <div class="bylineinfo">
  85. by
  86. <a href="#" class="authorName">
  87. {{ product.owner.name }}
  88. <i
  89. class="fas fa-chevron-down"
  90. style="font-size: 8px !important; color: #555 !important;"
  91. ></i>
  92. </a> (Author)
  93. </div>
  94. <div class="reviewGroup">
  95. <no-ssr>
  96. <star-rating
  97. :rating="product.averageRating"
  98. :show-rating="false"
  99. :glow="1"
  100. :border-width="1"
  101. :rounded-corners="true"
  102. :read-only="true"
  103. :star-size="18"
  104. :star-points="[23,2,14,17,0,19,10,34,7,50,23,43,38,50,36,34,46,19,31,17]"
  105. ></star-rating>
  106. </no-ssr>
  107. </div>
  108. <hr style="margin-top: 10px;" />
  109. <!-- A tags Dummy Data -->
  110. <div class="mediaMatrix">
  111. <div class="formats">
  112. <a href="#" class="link-expander">
  113. >
  114. <span class="tmmShowPrompt">See all 18 formats and editions</span>
  115. </a>
  116. <ul>
  117. <!-- Kindle -->
  118. <li class="swatchElement" style="width: 117px;">
  119. <span class="a-list-item">
  120. <span class="a-button-toggle">
  121. <span class="a-button-inner">
  122. <a href="#" class="a-button-text">
  123. <span>Kindle</span>
  124. <br />
  125. <span class="a-color-secondary">-</span>
  126. </a>
  127. </span>
  128. </span>
  129. <span class="tmm-olp-links"></span>
  130. <span class="tmm-olp-links">
  131. <a href="#" class="a-size-mini">
  132. <span class="kcpAppBox">
  133. <span class="a-declarative">
  134. Read with Our
  135. <span class="a-text-bold">Free App</span>
  136. </span>
  137. </span>
  138. </a>
  139. </span>
  140. </span>
  141. </li>
  142. <!-- Audible -->
  143. <li class="swatchElement" style="width: 117px;">
  144. <span class="a-list-item">
  145. <span class="a-button-toggle">
  146. <span class="a-button-inner">
  147. <a href="#" class="a-button-text">
  148. <span>
  149. <img
  150. src="/img/audibleLogo.png"
  151. class="img-fluid"
  152. style="width: 20px;"
  153. />Audible
  154. </span>
  155. <br />
  156. <span class="a-color-secondary">-</span>
  157. </a>
  158. </span>
  159. </span>
  160. <span class="tmm-olp-links"></span>
  161. <span class="tmm-olp-links">
  162. <a href="#" class="a-size-mini">
  163. <span class="kcpAppBox">
  164. <span class="a-declarative">
  165. <span class="a-text-bold">Free App</span> with your Audible Trial
  166. </span>
  167. </span>
  168. </a>
  169. </span>
  170. </span>
  171. </li>
  172. <!-- Paperback -->
  173. <li class="swatchElement" style="width: 117px;">
  174. <span class="a-list-item">
  175. <span class="a-button-toggle">
  176. <span class="a-button-inner">
  177. <a href="#" class="a-button-text">
  178. <span>Paperback</span>
  179. <br />
  180. <span class="a-color-secondary">-</span>
  181. </a>
  182. </span>
  183. </span>
  184. </span>
  185. </li>
  186. </ul>
  187. </div>
  188. </div>
  189. <!-- Description -->
  190. <div class="bookDescription">
  191. <div class="bookDescriptionInner">{{ product.description }}</div>
  192. </div>
  193. <!-- Product specification -->
  194. <div class="aboutEbooksFeature">
  195. <hr />
  196. <div class="row">
  197. <div class="col-sm-4 mb-1">
  198. <div class="a-declarative">
  199. Length:
  200. <span>
  201. <a href="#">
  202. 386 pages
  203. <i class="a-icon a-icon-popover"></i>
  204. </a>
  205. </span>
  206. </div>
  207. </div>
  208. </div>
  209. </div>
  210. </div>
  211. </div>
  212. <!-- Last 3 grid Buying section -->
  213. <div class="col-lg-3 col-md-3 col-sm-6">
  214. <div class="combinedBuyBox">
  215. <div class="buyBox">
  216. <div class="a-section">
  217. <div class="clearfix">
  218. <div class="float-left">
  219. <form>
  220. <input type="radio" id="test1" name="radio-group checked" />
  221. <label for="test1">Buy Now</label>
  222. </form>
  223. </div>
  224. <!-- Product Price -->
  225. <div class="float-right">
  226. <span class="a-size-medium a-color-price offer-price a-text-normal">{{ product.price }}</span>
  227. </div>
  228. </div>
  229. </div>
  230. <div class="a-section a-spacing-none">
  231. <div class="row">
  232. <div class="col-sm-5 col-5">
  233. <select>
  234. <option value="1">Qty: &nbsp; 1</option>
  235. <option value="2">Qty: &nbsp; 2</option>
  236. <option value="3">Qty: &nbsp; 3</option>
  237. <option value="4">Qty: &nbsp; 4</option>
  238. <option value="5">Qty: &nbsp; 5</option>
  239. </select>
  240. </div>
  241. </div>
  242. </div>
  243. <div class="a-section a-spacing-small a-spacing-top-micro">
  244. <div class="row">
  245. <span class="a-color-base buyboxShippingLabel"></span>
  246. </div>
  247. </div>
  248. <div class="a-section a-spacing-small">
  249. <div class="a-section a-spacing-none">
  250. <span class="a-size-medium a-color-success">In Stock</span>
  251. </div>
  252. <div class="a-section a-spacing-mini">Shipts from and sold by Amazon.com</div>
  253. </div>
  254. <div class="a-section">
  255. <div @click="addProductToCart(product)" class="a-button-stack">
  256. <span class="a-spacing-small a-button-primary a-button-icon">
  257. <span class="a-button-inner">
  258. <i class="a-icon a-icon-cart"></i>
  259. <input type="submit" name="submit.add-to-cart" class="a-button-input" />
  260. <span class="a-button-text">Add to Cart</span>
  261. </span>
  262. </span>
  263. </div>
  264. <div class="a-button-stack">
  265. <span class="a-spacing-small a-button-primary a-button-icon">
  266. <span class="a-button-inner">
  267. <i class="a-icon a-icon-buynow"></i>
  268. <input type="submit" name="submit.add-to-cart" class="a-button-input" />
  269. <span class="a-button-text">Buy Now</span>
  270. </span>
  271. </span>
  272. </div>
  273. </div>
  274. <div class="a-row">
  275. <div class="a-spacing-top-small">
  276. <div class="a-section a-spacing-none">
  277. <div class="a-section a-spacing-none a-spacing-top-mini">
  278. This item shipts to
  279. <b>California</b>
  280. <b>Get it by Monday, Sept 23 - Monday, Sept. 30</b>
  281. Choose this date at checkout
  282. </div>
  283. </div>
  284. </div>
  285. </div>
  286. <hr />
  287. <span class="a-declarative">
  288. <a href="#" class="a-link-normal">
  289. <div class="a-row a-spacing-mini">
  290. <i class="fal fa-map-market-alt"></i>
  291. <span class="a-size-small">Deliver to California</span>
  292. </div>
  293. </a>
  294. </span>
  295. <br />
  296. <hr />
  297. <div class="a-section">
  298. <div class="clearfix">
  299. <div class="float-left">
  300. <form>
  301. <input type="radio" id="test2" name="radio-group" />
  302. <label for="test1">Buy Now</label>
  303. </form>
  304. </div>
  305. <div class="float-right">
  306. <span class="a-color-base offer-price a-text-normal">$39</span>
  307. </div>
  308. </div>
  309. </div>
  310. </div>
  311. </div>
  312. <div class="kcpAppBaseBox text-center">
  313. <img src="/img/readyondevice.png" class="img-fluid" />
  314. </div>
  315. </div>
  316. </div>
  317. <br />
  318. <hr />
  319. <div class="books-entity-teaser">
  320. <div class="bucket">
  321. <h2>More about the author</h2>
  322. <div class="content">
  323. <div class="row">
  324. <!-- Author's photo and Button -->
  325. <div class="col-md-2 col-sm-4 col-4">
  326. <div class="authorContent">
  327. <div class="authorImageSingle">
  328. <a href="#">
  329. <img :src="product.owner.photo" class="img-fluid" />
  330. </a>
  331. </div>
  332. <div class="authorFollow">
  333. <button class="followButton" type="button">
  334. <span class="pr-fb-icon"></span>
  335. <span class="pr-fb-text">Follow</span>
  336. </button>
  337. </div>
  338. </div>
  339. </div>
  340. <!-- Author's about -->
  341. <div class="col-md-10 col-sm-8 col-8 pl-0">
  342. <div class="mainContent">
  343. <h3>Biography</h3>
  344. <div id="authorBio">{{ product.owner.about }}</div>
  345. </div>
  346. </div>
  347. </div>
  348. </div>
  349. </div>
  350. </div>
  351. <ReviewSection :product="product" :reviews="reviews" />
  352. </div>
  353. </div>
  354. </main>
  355. </template>
  356. <script>
  357. import { mapActions } from 'vuex'
  358. import StarRating from 'vue-star-rating'
  359. import ReviewSection from '~/components/ReviewSection'
  360. export default {
  361. components: {
  362. StarRating,
  363. ReviewSection
  364. },
  365. async asyncData({ $axios, params }) {
  366. try {
  367. let singleProduct = $axios.$get(`/api/products/${params.id}`)
  368. let manyReviews = $axios.$get(`/api/reviews/${params.id}`)
  369. // console.log(response)
  370. const [singleResponse, reviewsResponse] = await Promise.all([
  371. singleProduct, manyReviews
  372. ])
  373. return {
  374. product: singleResponse.product,
  375. reviews: reviewsResponse.reviews
  376. }
  377. } catch (err) {
  378. console.log(err)
  379. }
  380. },
  381. methods: {
  382. ...mapActions(['addProductToCart'])
  383. }
  384. }
  385. </script>