Untitled

 avatar
unknown
javascript
2 years ago
4.7 kB
5
Indexable
<template>
    <div class="container mt-4">
        <div class="card">
            <div class="card-body">
                <h4 class="card-title">Create Post</h4>
                <hr>
                <form @submit.prevent="store">
                    <div class="row">
                        <div class="col-md-6">
                            <div class="mb-3">
                                <label for="">Title</label>
                                <input type="text" class="form-control" v-model="post.title"
                                    placeholder="Masukan judul post">
                                <!-- validation -->
                                <small v-if="validation.title" class="text-danger">
                                    {{ validation.title[0] }}
                                </small>
                            </div>

                        </div>

                        <div class="col-md-6">
                            <div class="mb-3">
                                <label for="">Category</label>
                                <select class="form-control" v-model="post.category_id">
                                    <option value="">Pilih Kategori</option>
                                    <option v-for="category in categories" :key="category.id" :value="category.id">
                                        {{ category.name }}
                                    </option>
                                </select>
                                <!-- validation -->
                                <small v-if="validation.category_id" class="text-danger">
                                    {{ validation.category_id[0] }}
                                </small>
                            </div>

                        </div>
                    </div>

                    <div class="row">
                        <div class="col-md">
                            <div class="mb-3">
                                <label for="content">Content</label>
                                <textarea name="" v-model="post.content" class="form-control" cols="30"
                                    rows="10"></textarea>

                                <!-- validation -->
                                <small v-if="validation.content" class="text-danger">
                                    {{ validation.content[0] }}
                                </small>
                            </div>
                        </div>
                    </div>

                    <div class="row">
                        <div class="col-md">
                            <button class="btn btn-primary" type="submit">Submit</button>
                        </div>
                    </div>
                </form>
            </div>
        </div>
    </div>
</template>

<script>
import axios from 'axios';
import { useRouter, useRoute } from 'vue-router';
import { onMounted, reactive, ref } from 'vue';

export default {

    setup() {
        const post = reactive({
            title: '',
            category_id: '',
            content: ''
        });

        const validation = ref([]);
        const categories = ref([]);

        const router = useRouter();
        const route = useRoute();

        onMounted(() => {
            axios.get('http://localhost:8000/api/category').then(response => {
                categories.value = response.data.data;
                // console.log(response);
            }).catch(error => {
                console.log(error);
            })

            axios.get(`http://localhost:8000/api/post/${route.params.id}`).then(response => {
                post.title = response.data.data.title;
                post.category_id = response.data.data.category_id;
                post.content = response.data.data.content;
            }).catch(error => {
                console.log(error);
            })
        });

        function update() {
            let title = post.title;
            let category_id = post.category_id;
            let content = post.content;

            axios.put(`http://localhost:8000/api/post/${route.params.id}`, {
                title: title,
                category_id: category_id,
                content: content
            }).then(() => {
                router.push({
                    name: 'post.index'
                })
            }).catch(error => {
                validation.value = error.response.data
            });
        }

        return { post, validation, router, update }
    }

}
</script>
Editor is loading...