운영계획 페이지 작업중.

강석 최 2022-09-08 14:28:20 +09:00
parent 199697a3c5
commit f825579952
8 changed files with 165 additions and 81 deletions

View File

@ -22,9 +22,10 @@ public class FpiMgtController { // 외사경찰견문관리
public ModelAndView monthPlanPage(@AuthenticationPrincipal UserInfo loginUser, BoardPlan boardPlan){ public ModelAndView monthPlanPage(@AuthenticationPrincipal UserInfo loginUser, BoardPlan boardPlan){
ModelAndView mav = new ModelAndView("igActivities/fpiMgt/monthPlan/monthPlan"); ModelAndView mav = new ModelAndView("igActivities/fpiMgt/monthPlan/monthPlan");
mav.addObject("loginUser", loginUser); mav.addObject("loginUser", loginUser);
boardPlan.setWrtNm(loginUser.getUserNm());
boardPlan.setQueryInfo(); boardPlan.setQueryInfo();
mav.addObject("monthPlanList", null); mav.addObject("planList", monthPlanService.selectBoardPlanList(boardPlan));
boardPlan.setContentCnt(0); boardPlan.setContentCnt(monthPlanService.selectBoardPlanListCnt(boardPlan));
boardPlan.setPaginationInfo(); boardPlan.setPaginationInfo();
mav.addObject("searchParams", boardPlan); mav.addObject("searchParams", boardPlan);
return mav; return mav;

View File

@ -1,6 +1,7 @@
package com.dbnt.faisp.fpiMgt.monthPlan; package com.dbnt.faisp.fpiMgt.monthPlan;
import com.dbnt.faisp.fpiMgt.monthPlan.mapper.MonthPlanMapper;
import com.dbnt.faisp.fpiMgt.monthPlan.model.BoardPlan; import com.dbnt.faisp.fpiMgt.monthPlan.model.BoardPlan;
import com.dbnt.faisp.fpiMgt.monthPlan.model.PlanFile; import com.dbnt.faisp.fpiMgt.monthPlan.model.PlanFile;
import com.dbnt.faisp.fpiMgt.monthPlan.model.PlanMainInfo; import com.dbnt.faisp.fpiMgt.monthPlan.model.PlanMainInfo;
@ -20,6 +21,7 @@ public class MonthPlanService {
private final BoardPlanRepository boardPlanRepository; private final BoardPlanRepository boardPlanRepository;
private final PlanFileRepository planFileRepository; private final PlanFileRepository planFileRepository;
private final PlanMainInfoRepository planMainInfoRepository; private final PlanMainInfoRepository planMainInfoRepository;
private final MonthPlanMapper monthPlanMapper;
public BoardPlan selectBoardPlan(Integer planKey) { public BoardPlan selectBoardPlan(Integer planKey) {
BoardPlan savedPlan = boardPlanRepository.findById(planKey).orElse(null); BoardPlan savedPlan = boardPlanRepository.findById(planKey).orElse(null);
@ -47,4 +49,12 @@ public class MonthPlanService {
} }
return planSeq; return planSeq;
} }
public List<BoardPlan> selectBoardPlanList(BoardPlan boardPlan) {
return monthPlanMapper.selectBoardPlanList(boardPlan);
}
public Integer selectBoardPlanListCnt(BoardPlan boardPlan) {
return monthPlanMapper.selectBoardPlanListCnt(boardPlan);
}
} }

View File

@ -0,0 +1,14 @@
package com.dbnt.faisp.fpiMgt.monthPlan.mapper;
import com.dbnt.faisp.fpiMgt.monthPlan.model.BoardPlan;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
@Mapper
public interface MonthPlanMapper {
List<BoardPlan> selectBoardPlanList(BoardPlan boardPlan);
Integer selectBoardPlanListCnt(BoardPlan boardPlan);
}

View File

@ -1,16 +0,0 @@
package com.dbnt.faisp.fpiMgt.monthPlan.mapper;
import com.dbnt.faisp.menuMgt.model.MenuMgt;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
@Mapper
public interface fpiMgtMapper {
List<MenuMgt> selectMenuMgtList(MenuMgt menuMgt);
Integer selectMenuMgtListCnt(MenuMgt menuMgt);
List<MenuMgt> selectAccessMenuListWhereUserSeq(Integer userSeq);
}

View File

@ -49,7 +49,7 @@ public class BoardPlan extends BaseModel {
@Column(name = "wrt_nm") @Column(name = "wrt_nm")
private String wrtNm; private String wrtNm;
@Column(name = "wrt_dt") @Column(name = "wrt_dt")
@DateTimeFormat(pattern = "yyyy-MM-dd") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm")
private LocalDateTime wrtDt; private LocalDateTime wrtDt;
@Transient @Transient

View File

@ -0,0 +1,41 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.dbnt.faisp.fpiMgt.monthPlan.mapper.MonthPlanMapper">
<select id="selectBoardPlanList" resultType="BoardPlan" parameterType="BoardPlan">
select a.plan_key,
a.content_title,
a.plan_state,
a.plan_dt,
a.section_apprv,
a.head_apprv,
a.wrt_organ,
a.wrt_nm,
a.wrt_dt,
b.file_seq
from board_plan a
left outer join (select plan_key,
max(file_seq) as file_seq
from plan_file
group by plan_key) b
on a.plan_key = b.plan_key
<where>
<if test='wrtNm != null and wrtNm != ""'>
and a.wrt_nm = #{wrtNm}
</if>
</where>
order by plan_key desc
limit #{rowCnt} offset #{firstIndex}
</select>
<select id="selectBoardPlanListCnt" resultType="int" parameterType="BoardPlan">
select count(*)
from board_plan a
<where>
<if test='wrtNm != null and wrtNm != ""'>
and a.wrt_nm = #{wrtNm}
</if>
</where>
</select>
</mapper>

View File

@ -13,70 +13,103 @@
<div class="row mx-0"> <div class="row mx-0">
<div class="col-12 card text-center"> <div class="col-12 card text-center">
<div class="card-body"> <div class="card-body">
<form method="get" th:action="@{/menuMgt/menuMgtPage}"> <ul class="nav nav-tabs" id="userTab" role="tablist">
<input type="hidden" name="pageIndex" id="pageIndex" th:value="${searchParams.pageIndex}"> <li class="nav-item" role="presentation">
<div class="row justify-content-between pe-3 py-1"> <button class="nav-link active" id="monthPlanTab" data-bs-toggle="tab" data-bs-target="#monthPlanPanel" type="button" role="tab" aria-controls="monthPlanPanel" aria-selected="true">내 월간 계획</button>
<div class="col-auto"> </li>
<select class="form-select" name="rowCnt" id="rowCnt"> <li class="nav-item" role="presentation">
<th:block th:each="num : ${#numbers.sequence(1,5)}"> <button class="nav-link" id="apprvStayTab" data-bs-toggle="tab" data-bs-target="#apprvStayPanel" type="button" role="tab" aria-controls="apprvStayPanel" aria-selected="false">결재대기목록</button>
<option th:value="${num*10}" th:text="${num*10}" th:selected="${searchParams.rowCnt eq num*10}"></option> </li>
</th:block> <li class="nav-item" role="presentation">
</select> <button class="nav-link" id="apprvCommitTab" data-bs-toggle="tab" data-bs-target="#apprvCommitPanel" type="button" role="tab" aria-controls="apprvCommitPanel" aria-selected="false">결재처리목록</button>
</div> </li>
<div class="col-auto"> </ul>
<div class="row justify-content-end"> <div class="tab-content border border-top-0 p-2" id="planContent">
<div class="col-auto"> <form method="get" th:action="@{/menuMgt/menuMgtPage}">
<input type="text" class="form-control form-control-sm"> <input type="hidden" name="pageIndex" id="pageIndex" th:value="${searchParams.pageIndex}">
<div class="row justify-content-between pe-3 py-1">
<div class="col-auto">
<select class="form-select" name="rowCnt" id="rowCnt">
<th:block th:each="num : ${#numbers.sequence(1,5)}">
<option th:value="${num*10}" th:text="${num*10}" th:selected="${searchParams.rowCnt eq num*10}"></option>
</th:block>
</select>
</div>
<div class="col-auto">
<div class="row justify-content-end">
<div class="col-auto">
<input type="text" class="form-control form-control-sm">
</div>
<input type="submit" class="btn btn-sm btn-primary col-auto" id="searchBtn" value="검색">
</div> </div>
<input type="submit" class="btn btn-sm btn-primary col-auto" id="searchBtn" value="검색">
</div> </div>
</div> </div>
</div> </form>
</form> <div class="row justify-content-start">
<div class="row justify-content-start"> <div class="col-12">
<div class="col-12"> <div class="card">
<div class="card"> <div class="card-body">
<div class="card-body"> <div class="row">
<div class="row"> <table class="table table-hover">
<table class="table table-striped"> <thead>
<thead> <tr>
<tr> <th></th>
<th><input type="checkbox" class="allChk"></th> <th>제목</th>
</tr> <th>시행일자</th>
</thead> <th>작성자</th>
<tbody> <th>작성일시</th>
</tbody> <th>첨부파일</th>
</table> <th>상태</th>
</div> </tr>
<div class="row justify-content-between"> </thead>
<div class="col-auto"></div> <tbody>
<div class="col-auto"> <tr th:each="plan:${planList}">
<nav aria-label="Page navigation"> <td><input type="checkbox"></td>
<ul class="pagination"> <td th:text="${plan.contentTitle}"></td>
<th:block th:if="${searchParams.pageIndex>3}"> <td th:text="${#temporals.format(plan.planDt, 'yyyy-MM-dd')}"></td>
<li class="page-item" th:data-pageindex="${(searchParams.pageIndex)-3}"> <td th:text="${plan.wrtNm}"></td>
<a class="page-link" href="#" aria-label="Previous"> <td th:text="${#temporals.format(plan.wrtDt, 'yyyy-MM-dd HH:mm')}"></td>
<span aria-hidden="true">&laquo;</span> <td></td>
</a> <td th:if="${plan.sectionApprv eq 'T'}">계장결재</td>
</li> <td th:if="${plan.sectionApprv eq 'F'}">계장반려</td>
</th:block> <td th:if="${plan.headApprv eq 'T'}">부장결재</td>
<th:block th:each="num : ${#numbers.sequence(searchParams.startNum, searchParams.endNum)}"> <td th:if="${plan.headApprv eq 'F'}">부장반려</td>
<li class="page-item" th:data-pageindex="${num}" th:classappend="${searchParams.pageIndex eq num?'active':''}"> <td th:if="${plan.planState eq 'T'}">임시저장</td>
<a class="page-link" href="#" th:text="${num}"></a> <td th:if="${#strings.isEmpty(plan.sectionApprv) and #strings.isEmpty(plan.headApprv) and plan.planState eq 'S'}">결재대기</td>
</li> </tr>
</th:block> </tbody>
<th:block th:if="${searchParams.maxNum>searchParams.endNum+2}"> </table>
<li class="page-item" th:data-pageindex="${(searchParams.pageIndex)+3}">
<a class="page-link" href="#" aria-label="Next">
<span aria-hidden="true">&raquo;</span>
</a>
</li>
</th:block>
</ul>
</nav>
</div> </div>
<div class="col-auto"> <div class="row justify-content-between">
<input type="button" class="btn btn-success" value="등록" id="addPlanBtn"> <div class="col-auto"></div>
<div class="col-auto">
<nav aria-label="Page navigation">
<ul class="pagination">
<th:block th:if="${searchParams.pageIndex>3}">
<li class="page-item" th:data-pageindex="${(searchParams.pageIndex)-3}">
<a class="page-link" href="#" aria-label="Previous">
<span aria-hidden="true">&laquo;</span>
</a>
</li>
</th:block>
<th:block th:each="num : ${#numbers.sequence(searchParams.startNum, searchParams.endNum)}">
<li class="page-item" th:data-pageindex="${num}" th:classappend="${searchParams.pageIndex eq num?'active':''}">
<a class="page-link" href="#" th:text="${num}"></a>
</li>
</th:block>
<th:block th:if="${searchParams.maxNum>searchParams.endNum+2}">
<li class="page-item" th:data-pageindex="${(searchParams.pageIndex)+3}">
<a class="page-link" href="#" aria-label="Next">
<span aria-hidden="true">&raquo;</span>
</a>
</li>
</th:block>
</ul>
</nav>
</div>
<div class="col-auto">
<input type="button" class="btn btn-success" value="등록" id="addPlanBtn">
</div>
</div> </div>
</div> </div>
</div> </div>

View File

@ -4,15 +4,16 @@
<input type="hidden" name="_csrf_header" th:value="${_csrf.headerName}"/> <input type="hidden" name="_csrf_header" th:value="${_csrf.headerName}"/>
<input type="hidden" th:name="${_csrf.parameterName}" th:value="${_csrf.token}"/> <input type="hidden" th:name="${_csrf.parameterName}" th:value="${_csrf.token}"/>
<input type="hidden" name="planKey" th:value="${plan.planKey}"> <input type="hidden" name="planKey" th:value="${plan.planKey}">
<input type="hidden" name="wrtOrgan" th:value="${plan.wrtOrgan}">
<input type="hidden" name="planState" id="planState" th:value="${plan.planState}"> <input type="hidden" name="planState" id="planState" th:value="${plan.planState}">
<div class="mb-3 row"> <div class="mb-3 row">
<label for="wrtNm" class="col-sm-2 col-form-label text-center">작성자</label> <label for="wrtNm" class="col-sm-2 col-form-label text-center">작성자</label>
<div class="col-sm-2"> <div class="col-sm-2">
<input type="text" class="form-control" id="wrtNm" name="wrtNm" th:value="${plan.wrtNm}" readonly> <input type="text" class="form-control" id="wrtNm" name="wrtNm" th:value="${plan.wrtNm}" readonly>
</div> </div>
<label for="wrdDt" class="col-sm-2 col-form-label text-center">작성일</label> <label for="wrtDt" class="col-sm-2 col-form-label text-center">작성일</label>
<div class="col-sm-2"> <div class="col-sm-2">
<input type="text" class="form-control" id="wrdDt" name="wrdDt" th:value="${#temporals.format(plan.wrtDt, 'yyyy-MM-dd HH:mm')}" readonly> <input type="text" class="form-control" id="wrtDt" name="wrtDt" th:value="${#temporals.format(plan.wrtDt, 'yyyy-MM-dd HH:mm')}" readonly>
</div> </div>
<label for="planDt" class="col-sm-2 col-form-label text-center">시행일자</label> <label for="planDt" class="col-sm-2 col-form-label text-center">시행일자</label>
<div class="col-sm-2"> <div class="col-sm-2">