123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166 |
- <template>
- <!--MAIN-->
- <main>
- <!--REVIEW ADDRESS-->
- <div class="reviewPage mt-3">
- <div class="container-fluid c-section">
- <div class="row">
- <div class="col-sm-2"></div>
- <div class="col-sm-8">
- <div class="a-spacing-top-medium">
- <h1 class="a-spacing-base">
- <b>Create Review</b>
- </h1>
- <div class="row">
- <!-- Product Photo -->
- <div class="col-md-2 col-sm-3 col-3">
- <img :src="product.photo" style="width: 80px" />
- </div>
- <!-- Product Title -->
- <div class="col-md-10 col-sm-9 col-9 m-auto">
- <h4>
- <b>{{ product.title }}</b>
- </h4>
- </div>
- </div>
- <div class="a-spacing-top-medium"></div>
- <hr />
- <h2 class="a-spacing-base">Overall Rating</h2>
- <div class="a-row">
- <!-- Rating -->
- <no-ssr>
- <StartRating v-model="rating"></StartRating>
- </no-ssr>
- </div>
- <div class="a-row a-spacing-top-large">
- <h2>Add photo or video</h2>
- <p
- style="font-size: 14px; font-weight: 700;"
- >Shoppers find images and videos more helpful than text alone.</p>
- </div>
- <div class="a-row a-spacing-top-medium">
- <!-- Choose a Photo -->
- <label class="choosefile-button">
- <i class="fal fa-plus"></i>
- <input @change="onFileSelected" type="file" />
- </label>
- <p>{{ fileName }}</p>
- </div>
- <div class="a-spacing-top-large"></div>
- <hr />
- <!-- Headline -->
- <div class="headline a-spacing-large">
- <h2 class="a-spacing-base">Add a headline</h2>
- <input
- v-model="headline"
- type="text"
- class="a-input-text"
- style="width: 70%;"
- placeholder="What's most important to know?"
- />
- </div>
- <!-- Body -->
- <div class="a-spacing-base">
- <h2 class="a-spacing-base">Write your review</h2>
- <textarea
- v-model="body"
- placeholder="What do you like or dislike? What did you see this product for?"
- style="height:6em; width: 100%;"
- ></textarea>
- </div>
- </div>
- <br />
- <br />
- <hr />
- <div class="a-spacing-top-medium">
- <p
- style="font-size: 14px; font-weight: 700;"
- >This is how you'll appear to other customers:</p>
- <div class="media a-spacing-top-large">
- <div class="media-left">
- <img src="/img/avatar.png" class="img-fluid" style="width: 50px;" />
- </div>
- <div class="media-body pl-3 pt-2">
- <input
- :value="$auth.$state.user.name"
- type="text"
- class="a-input-text"
- style="width: 100%;" />
- </div>
- </div>
- </div>
- <div class="a-row a-spacing-top-medium">
- <span class="a-color-tertiary">Don't worry, you can always change this on your profile</span>
- </div>
- <div class="a-row text-right a-spacing-top-large">
- <span class="a-button-register">
- <span class="a-button-inner">
- <span @click="onAddReview" class="a-button-text">Submit</span>
- </span>
- </span>
- </div>
- </div>
- <div class="col-sm-2"></div>
- </div>
- <div class="a-spacing-large pb-5"></div>
- <hr />
- </div>
- </div>
- <!--/REVIEW ADDRESS-->
- </main>
- <!--/MAIN-->
- </template>
- <script>
- import StartRating from 'vue-star-rating'
- export default {
- components: {
- StartRating
- },
- async asyncData ({ $axios, params }) {
- try {
- let response = await $axios.$get(`/api/products/${params.id}`)
- return {
- product: response.product
- }
- } catch (err) {
- console.log(err)
- }
- },
- data () {
- return {
- rating: 0,
- body: '',
- headline: '',
- selectedFile: null,
- fileName: null
- }
- },
- methods: {
- onFileSelected () {
- this.selectedFile = event.target.files[0]
- this.fileName = event.target.files[0].name
- },
- async onAddReview () {
- try {
- let data = new FormData()
- data.append('headline', this.headline)
- data.append('body', this.body)
- data.append('rating', this.rating)
- data.append('photo', this.selectedFile, this.selectedFile.name)
- let response = await this.$axios.$post(`/api/reviews/${this.$route.params.id}`, data)
- if (response.success) {
- this.$router.push(`/products/${this.$route.params.id}`)
- }
- } catch (err) {
- }
- }
- }
- }
- </script>
|