프로젝트

44. 스카우트 목록 조회

uni5948 2022. 1. 27. 11:05

44. 스카우트 목록 조회

22. member 별 스카우트 목록 조회 연동

 

  • 스카우트 목록 페이지 라우터 추가

1. 스카우트 목록 파일 생성

스카우트 목록 파일 생성

2. 라우터 추가

2-1. index.js

import { createWebHistory, createRouter } from "vue-router";

import Home from '@/components/Home'
import Join from '@/components/Join'
import Login from '@/components/Login'
import Logout from '@/components/Logout'
import Registration from '@/components/Registration'
import PlayerList from '@/components/PlayerList'
import Player_One from '@/components/Player_One'
import ScoutList from '@/components/ScoutList'

const routes = [
    {path:'/',  name:'Home', component:Home},
    {path:'/Join',  name:'Join', component:Join},
    {path:'/Login',  name:'Login', component:Login},
    {path:'/Logout',  name:'Logout', component:Logout},
    {path:'/Registration',  name:'Registration', component:Registration},
    {path:'/PlayerList',  name:'PlayerList', component:PlayerList},
    {path:'/Player_One',  name:'Player_One', component:Player_One},
    {path:'/ScoutList',  name:'ScoutList', component:ScoutList},
]

const router = createRouter({
    history: createWebHistory(),
    routes,
});

export default router;
 
2-2. App.vue
스카우트 목록은 로그인한 유저만 접근 가능하도록 한다.(admin 계정도 접근 불가)
 
<template>
  <div id="nav">
    <router-link to="/">home</router-link>|
    <router-link v-if="!logged" to="/Join">Join</router-link>|
    <router-link v-if="!logged" to="/Login">Login</router-link>|
    <router-link v-if="logged" to="/Logout">Logout</router-link>|
    <router-link v-if="adminLogged" to="/Registration">Registration</router-link>|
    <router-link to="/PlayerList">PlayerList</router-link>|
    <router-link v-if="!adminLogged & logged" to="/ScoutList">ScoutList</router-link>|

    <hr />
    <el-menu
      :default-active="activeIndex" class="el-menu-demo" mode="horizontal"
      @select="handleSelect">
    <el-menu-item v-if="logged" index="1">Processing Center</el-menu-item>
    </el-menu>
    <router-view />
  </div>
</template>

<script>
export default {
  created() {
    this.changeLogged();
  },
  methods: {
    changeLogged() {
      const token  = sessionStorage.getItem("TOKEN");
      const role = sessionStorage.getItem("ROLE");
      if(token != null) { // 로그인 되었을 경우
        this.logged =true;
        if(role === "ADMIN"){ // 로그인 후 role이 admin일 경우
          this.adminLogged = true;
        }
        else{ //로그인 후 role이 admin이 아닐 경우
          this.adminLogged = false;
        }
      }
      else{ // 로그인 되지 않았을 경우
        this.logged = false;
      }
    },

  }
}
</script>

<style>
</style>
 
  • 화면 확인

 

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

로그인 하지 않았을 경우

2. admin 계정으로 로그인 한 경우

admin 계정으로 로그인 한 경우

3. user 계정으로 로그인 한 경우

user 계정으로 로그인 한 경우
  • 스카우트 목록 구현
<template>
    <div>
        <h3>스카우트 목록</h3>
        <input type="hidden" v-model="text"
            placeholder="검색" @keyup.enter="handleSearch" />
        <table border="1">
            <tr>
                <td>번호</td>
                <td>이름</td>
                <td>나이</td>
                <td>국적</td>
                <td>포지션</td>
                <td>몸 값</td>
            </tr>
            <tr v-for="scoutlist in scoutlists" v-bind:key="scoutlist">
                <td>{{scoutlist.scoutno}}</td>
                <td><a href="#" @click="nextPage(scoutlist.player.playerno)">{{scoutlist.player.playername}}</a></td>
                <td>{{scoutlist.player.playerage}}</td>
                <td>{{scoutlist.player.playercountry}}</td>
                <td>{{scoutlist.player.playerposition}}</td>
                <td>{{scoutlist.player.playerprice}}</td>
            </tr>
        </table>
    </div>
</template>

<script>
    import axios from 'axios';
    export default {
        methods:{
            async handleSearch() {
                const url = `/REST/mscout?page=${this.page}`;
                const headers = {"Content-Type":"application/json",
                    token : this.token}
                const response = await axios.get(url, {headers});
                console.log(response);
                this.scoutlists = response.data.scoutlist;
            },
            async nextPage(playerno) {
                this.$router.push({name: 'Player_One', query:{no:playerno}});
            }
        },
        async created(){
            await this.handleSearch();
        },
        data(){
            return{
                //세션 스토리지에서 토큰 읽기
                token : sessionStorage.getItem("TOKEN"),
                page : '',
                scoutlists : [],
                player: []
            }
        }
    }
</script>

<style scoped>

</style>
 
  • 스카우트 목록 확인

스카우트 목록 확인

  • 페이지네이션 추가

1. 스카우트 목록 숫자 조회(백엔드)

1-1. 스카우트 저장소(ScoutRepository)

userid를 이용해 스카우트 목록의 갯수를 조회한다.


    // member 별 스카우트 목록 숫자 조회
    Long countAllByMember_Userid(String userid);

1-2. 스카우트 서비스(ScoutService)

    // member 별 스카우트 목록 숫자 조회
    public Long getScoutCountByUserid(String id);
 
1-3. 스카우트 서비스(ReviewServiceImpl)
 
    // member 별 스카우트 목록 숫자 조회
    @Override
    public Long getScoutCountByUserid(String id) {
        return sRepository.countAllByMember_Userid(id);
    }
 
1-4. 스카우트 컨트롤러(ScoutController)
// member 별 스카우트 숫자 조회
    //127.0.0.1:8080/REST/scoutcount
    @RequestMapping(value = "/scoutcount", method = {RequestMethod.GET},
    consumes = MediaType.ALL_VALUE,
    produces = MediaType.APPLICATION_JSON_VALUE)
    public Map<String, Object> scoutcountGET(Scout scout,
    @RequestHeader("token") String token) {
        Map<String, Object> map = new HashMap<>();
        try{
            String memberid = jwtUtil.extractUsername(token); // 토큰을 통해 회원 정보 찾기
            Member member = mService.selectUserOne(memberid); // member 정보 찾기
            if(memberid.equals(member.getUserid())){
                Long scoutcount = sService.getScoutCountByUserid(memberid);
                map.put("status", 200);
                map.put("scoutlist",scoutcount);
            }
        }
        catch(Exception e){
            e.printStackTrace();
            map.put("status", e.hashCode());
        }
        return map;
    }

1-5. 스카우트 목록 숫자 조회

토큰을 통해 userid를 찾아낸다.

스카우트 목록 숫자 조회

2. 페이지네이션 구현(프론트엔드)

<template>
    <div>
        <h3>스카우트 목록</h3>
        <input type="hidden" v-model="text"
            placeholder="검색" @keyup.enter="handleSearch" />
        <table border="1">
            <tr>
                <td>번호</td>
                <td>이름</td>
                <td>나이</td>
                <td>국적</td>
                <td>포지션</td>
                <td>몸 값</td>
            </tr>
            <tr v-for="scoutlist in scoutlists" v-bind:key="scoutlist">
                <td>{{scoutlist.scoutno}}</td>
                <td><a href="#" @click="nextPage(scoutlist.player.playerno)">{{scoutlist.player.playername}}</a></td>
                <td>{{scoutlist.player.playerage}}</td>
                <td>{{scoutlist.player.playercountry}}</td>
                <td>{{scoutlist.player.playerposition}}</td>
                <td>{{scoutlist.player.playerprice}}</td>
            </tr>
        </table>
        <el-pagination
            background layout="prev, pager, next" :total="totalpage"
            @current-change="handleCurrentChange">
        </el-pagination>
    </div>
</template>

<script>
    import axios from 'axios';
    export default {
        methods:{
            //페이지 이동
            async handleCurrentChange(val){
                this.page = val;
                await this.handleSearch();
            },
            async handleSearch() {
                const url = `/REST/mscout?page=${this.page}`;
                const headers = {"Content-Type":"application/json",
                    token : this.token}
                const response = await axios.get(url, {headers});
                console.log(response);
                this.scoutlists = response.data.scoutlist;
 
                const url1 = `REST/scoutcount` //스카우트 숫자 조회 주소 입력
                const response1 = await axios.get(url1, {headers}); //userid를 찾기 위해 토큰 사용
                console.log(response1);
                //스카우트 숫자를 통해 페이지네이션 숫자 생성
                this.totalpage = Number(response1.data.count);
            },
            async nextPage(playerno) {
                this.$router.push({name: 'Player_One', query:{no:playerno}});
            }
        },
        async created(){
            await this.handleSearch();
        },
        data(){
            return{
                //세션 스토리지에서 토큰 읽기
                token : sessionStorage.getItem("TOKEN"),
                page : '',
                scoutlists : [],
                player: [],
                totalpage : ''
            }
        }
    }
</script>

<style scoped>

</style>
 
  • 페이지네이션, 스카우트 목록 확인

페이지네이션, 스카우트 목록 확인

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

46. 스카우트 목록 삭제  (0) 2022.02.05
45. 스카우트 목록 1개 조회  (0) 2022.02.04
43. 스카우트 목록 추가  (0) 2022.01.26
42. 선수 등록  (0) 2022.01.25
41. 리뷰 목록  (0) 2022.01.24