프로젝트

43. 스카우트 목록 추가

uni5948 2022. 1. 26. 11:35

43. 스카우트 목록 추가

21. 스카우트 목록 추가 연동

  • 스카우트 목록 추가 버튼 생성

선수 상세 페이지에 선수 정보 하단에 버튼 생성(Player_One.vue)

<el-button type="primary" @click="handleScout" plain>스카우트</el-button>
 
<template>
    <div>
        <h3>선수 상세 페이지</h3>
        {{no}}
            <el-container>
            <el-aside width="200px">
                Aside
                <img :src="`${playerimg}`" style="width: 200px; height: 200px" />
            </el-aside>
            <el-main>
                Main
            <el-form-item label="이름">
                {{player.playername}}
            </el-form-item>
            <el-form-item label="나이">
                {{player.playerage}} 세
            </el-form-item>
            <el-form-item label="신장">
                {{player.playerheight}} cm
            </el-form-item>
            <el-form-item label="몸무게">
                {{player.playerweight}} kg
            </el-form-item>
            <el-form-item label="포지션">
                {{player.playerposition}}
            </el-form-item>
            <el-form-item label="국적">
                {{player.playercountry}}
            </el-form-item>
            <el-form-item label="몸 값">
                {{player.playerprice}} \
            </el-form-item>
            <el-form-item label="소속 팀">
                {{teamname}}
            </el-form-item>
            <el-form-item label="에이전트">
                {{agentname}}
            </el-form-item>
            </el-main>
            </el-container>
        <hr />
        <el-button type="primary" @click="handleScout" plain>스카우트</el-button>
        <hr />
더보기
        <input type="hidden" v-model="text"
            placeholder="검색" @keyup.enter="handleSearch" />
        <table border="1">
            <tr>
                <td>리뷰</td>
                <td>평점</td>
            </tr>
            <tr v-for="review in reviews" v-bind:key="review">
                <td>{{review.content}}</td>
                <td>{{review.rating}}/10</td>
            </tr>
        </table>
        <el-pagination
                background layout="prev, pager, next" :total="totalpage"
                @current-change="handleCurrentChange">
            </el-pagination>
        <hr />
            <span class="ml-3 w-35 text-gray-600 inline-flex items-center">내용</span>
                <el-input v-model="content" type="textarea" placeholder="리뷰 내용 입력" style="width: 300px;" ></el-input>
            <br />
            <span class="ml-3 w-35 text-gray-600 inline-flex items-center">평점</span>
                <select v-model="rating" >
                    <option value=1>1</option>
                    <option value=2>2</option>
                    <option value=3>3</option>
                    <option value=4>4</option>
                    <option value=5>5</option>
                    <option value=6>6</option>
                    <option value=7>7</option>
                    <option value=8>8</option>
                    <option value=9>9</option>
                    <option value=10>10</option>
                </select>
            <br />
        <el-button type="primary" @click="handleReview" plain>리뷰 등록</el-button>

    </div>
</template>

스카우트 버튼 추가

  • 스카우트 기능 구현

스카우트 목록 추가할 때 선수 정보를 받아와 저장한다.

스카우트 목록 추가는 로그인된 사용자만 가능하다.

<script>
    import axios from 'axios';
    export default {
        methods: {
더보기
            async handleContent(){
                const url = `/REST/playerone?no=${this.no}`;
                const headers = {"Content-Type":"application/json"};
                const response = await axios.get(url, headers);
                console.log(response);
                this.player = response.data.player;
                this.playerimg = response.data.playerimg;
                this.teamname = response.data.teamname;
                this.agentname = response.data.agentname;
            },
            async handleReview() {
                //유효성 검사
                if(this.content.length === 0){
                    alert("리뷰 내용을 입력하세요.");
                }
                else{
                    const url = `/REST/reviewinsert?pno=${this.no}`;
                    const headers = {"Content-Type":"application/json",
                    token : this.token};
                     const body = {content : this.content, rating : this.rating};
                    if(this.token != null){
                        const response = await axios.post(url,body,{headers});
                        // console.log(response);
                        if(response.data.status === 200){
                            alert("리뷰 등록에 성공했습니다.");
                        }
                    }
                    else{
                        alert("로그인 후 이용 가능합니다.");
                        this.$router.push({name:'Login'}); // 로그인 화면으로 이동
                    }
                }
            },
            //리뷰 목록
            //페이지 이동
            async handleCurrentChange(val){
                this.page = val;
                await this.handleSearch();
            },
            async handleSearch() {
                const url = `/REST/pnoreview?page=1&pno=${this.no}`;
                const headers = {"Content-Type":"application/json"};
                const response = await axios.get(url,{headers});
                // console.log(response);
                this.reviews = response.data.review;
 
                const url1 = `/REST/pnoreviewcount?pno=${this.no}` //선수 별 리뷰 숫자 조회 주소 입력
                const response1 = await axios.get(url1);
                // console.log(response1);
                //선수 별 리뷰 숫자를 통해 페이지네이션 숫자 생성
                this.totalpage = Number(response1.data.count);
            },
            //스카우트 목록 추가
            async handleScout(){
                const url = `/REST/scoutinsert`;
                const headers = {"Content-Type":"application/json",
                    token : this.token};
                const body = {player : this.player};
                if(this.token != null){
                    const response = await axios.post(url,body,{headers});
                    console.log(response);
                    if(response.data.status === 200){
                            alert("스카우트 목록에 추가하였습니다..");
                        }
                    }
                else{
                    alert("로그인 후 이용 가능합니다.");
                    this.$router.push({name:'Login'}); // 로그인 화면으로 이동
                }
            }
        },
        async created(){
            await this.handleSearch();
        },
        data(){
            return {
                //선수 정보
                player : '',
                playerimg : '',
                teamname : '',
                agentname : '',
                no : this.$route.query.no,

                //리뷰 목록
                reviews : [],
                page : 1,
                totalpage : 0,
                text : '',

                //리뷰 등록
                //세션 스토리지에서 토큰 읽기
                token : sessionStorage.getItem("TOKEN"),
                content : '',
                rating : 0,

            }
        },
        async mounted(){
            await this.handleContent();
        }
       
    }
</script>

<style scoped>

</style>
 
 
  • 스카우트 목록 추가

1. 로그인 하지 않았을 경우

로그인 하지 않았을 경우

2. 기존에 스카우트 목록에 추가된 선수일 경우

기존에 스카우트 목록에 추가된 선수일 경우

3. 스카우트 목록 추가 성공

스카우트 목록 추가 성공

4. db 확인

89번 선수 등록 성공

'프로젝트' 카테고리의 다른 글

45. 스카우트 목록 1개 조회  (0) 2022.02.04
44. 스카우트 목록 조회  (0) 2022.01.27
42. 선수 등록  (0) 2022.01.25
41. 리뷰 목록  (0) 2022.01.24
40. 리뷰 등록  (0) 2022.01.23