Vue PWA mylog Source Code

WriteMyLogView.vue

그랜파 개발자 2024. 12. 8. 16:07

WriteMyLogView.vue

<!-- src/views/WriteMyLogView.vue -->
<template>
  <v-container>
    <v-card>
      <v-card-title style="font-size:1em">{{ getMylogName }}</v-card-title>

      <v-form class="pa-3 mt-n6" @submit.prevent="submitMylog">

        <v-select class="mt-2" v-model="selectedCategory" :items="myCategories" label="카테고리를 선택하세요" outlined dense></v-select>

        <v-text-field class="mt-n3" v-model="title" label="제목" required></v-text-field>
        <v-textarea class="mt-n4" style="overflow-y: hidden;" v-model="content" label="내용" rows="5" required></v-textarea>

        <div class="mt-n3" style="text-align: right">
          <v-btn type="submit" color="primary">저장</v-btn>
        </div>
        
      </v-form>
    </v-card>
    
    <div class="text-center">
      <v-progress-circular v-if="loading" indeterminate></v-progress-circular>
    </div> 

  </v-container>
</template>

<script>
import { mapActions, mapState, mapGetters } from "vuex";
import router from '@/router';  // Vue Router import

export default {
  data() {
    return {
      title: "",
      content: "",
      myCategories: [],
      selectedCategory: null, // 선택된 카테고리
    };
  },
  computed: {
    ...mapGetters('mylogs',['loading']),
    ...mapState('mylogs', ['categories']),
    getMylogName() {
      return this.$store.state.auth.user.mylogname;
    }
  },
  methods: {
    ...mapActions('mylogs', ['saveMylog', 'setError', 'fetchCategories']),

    async submitMylog() {
      if (!this.title || !this.content) {
        alert("Please fill in both fields.");
        return;
      }

      const user = this.$store.state.auth.user;
      if(user) {
        try {
          const mylog = await this.saveMylog({
            category: this.selectedCategory,
            title: this.title,        // 사용자가 입력한 마이로그 제목
            content: this.content,    // 사용자가 입력한 마이로그 내용   
            userId: user.id,          // 로그인한 사용자의 id
            userName: user.username,  // 로그인한 사용자의 이름
            createdAt: new Date()     // 저장하는 현재 시간
          })        
        } catch (error) {
          this.setError(error.message);       
        }
        router.push("/");   // home으로
      }
    }
  },

  async mounted() {
    const userId = this.$store.state.auth.user.id;
    await this.fetchCategories(userId); // Firestore에서 카테고리 데이터 가져오기
    // 카테로그 이름만 가져온다.
    this.myCategories = this.categories.map(category => category.name);
    this.myCategories.unshift('카테고리 없음');
  },
};
</script>

<style scoped>
.text-h5 {
  font-weight: bold;
}
</style>

'Vue PWA mylog Source Code' 카테고리의 다른 글

Vue PWA mylog Source 코드는?  (1) 2024.12.08
UserMyLogsView.vue  (0) 2024.12.08
SubscriptionsView.vue  (1) 2024.12.07
SearchMyLogsView.vue  (2) 2024.12.06
RegisterView.vue  (0) 2024.12.05