Merge branch 'master' of http://118.219.150.34:50501/DBNT/FAISP
# Conflicts: # src/main/resources/templates/fragments/leftMenu.html
commit
479126666f
|
|
@ -13,7 +13,7 @@ import com.dbnt.faisp.main.fipTarget.service.FipTargetService;
|
||||||
import com.dbnt.faisp.main.organMgt.service.OrganConfigService;
|
import com.dbnt.faisp.main.organMgt.service.OrganConfigService;
|
||||||
import com.dbnt.faisp.main.userInfo.model.UserInfo;
|
import com.dbnt.faisp.main.userInfo.model.UserInfo;
|
||||||
import com.dbnt.faisp.main.userInfo.service.UserInfoService;
|
import com.dbnt.faisp.main.userInfo.service.UserInfoService;
|
||||||
|
import com.dbnt.faisp.util.Excel;
|
||||||
import com.dbnt.faisp.util.ParamMap;
|
import com.dbnt.faisp.util.ParamMap;
|
||||||
import com.dbnt.faisp.util.Utils;
|
import com.dbnt.faisp.util.Utils;
|
||||||
|
|
||||||
|
|
@ -160,7 +160,7 @@ public class FipTargetController {
|
||||||
return partInfo.getPiSeq();
|
return partInfo.getPiSeq();
|
||||||
}
|
}
|
||||||
|
|
||||||
@GetMapping("/PartInfoHistoryPage")
|
@GetMapping("/partInfoHistoryPage")
|
||||||
public ModelAndView PartInfoHistoryPage(PartInfo partInfo) {
|
public ModelAndView PartInfoHistoryPage(PartInfo partInfo) {
|
||||||
ModelAndView mav = new ModelAndView("fipTarget/partInfoHistory");
|
ModelAndView mav = new ModelAndView("fipTarget/partInfoHistory");
|
||||||
mav.addObject("partInfoList", fipTargetService.selectPartInfoSeq(partInfo));
|
mav.addObject("partInfoList", fipTargetService.selectPartInfoSeq(partInfo));
|
||||||
|
|
@ -474,11 +474,37 @@ public class FipTargetController {
|
||||||
public ModelAndView ipShipList(@AuthenticationPrincipal UserInfo loginUser, ShipInfo shipInfo, HttpServletResponse response) {
|
public ModelAndView ipShipList(@AuthenticationPrincipal UserInfo loginUser, ShipInfo shipInfo, HttpServletResponse response) {
|
||||||
ModelAndView mav = new ModelAndView("fipTarget/ipShipList");
|
ModelAndView mav = new ModelAndView("fipTarget/ipShipList");
|
||||||
shipInfo.setDownOrganCdList(loginUser.getDownOrganCdList());
|
shipInfo.setDownOrganCdList(loginUser.getDownOrganCdList());
|
||||||
|
|
||||||
|
//엑셀다운
|
||||||
|
if(shipInfo.getExcel() != null && shipInfo.getExcel().equals("Y")){
|
||||||
|
String[] headers = {"hangro", "owner_nm", "ship_nm", "ship_weight", "susong", "operation_cnt", "close_yn", "wrt_dt"};
|
||||||
|
String[] headerNames = { "항로", "사업자"+System.lineSeparator()+"(한국대리점)", "선명", "국제"+System.lineSeparator()+"총톤수", "수송능력", "운항횟수", "휴항", "최종수정일"};
|
||||||
|
String[] columnType = { "String", "String", "String", "String", "String", "String", "String","String"};
|
||||||
|
String sheetName="";
|
||||||
|
String excelFileName="";
|
||||||
|
if(shipInfo.getSiType().equals("KRCN")) {
|
||||||
|
sheetName = "한-중 국제여객선 현황";
|
||||||
|
excelFileName = "한-중 국제여객선 현황";
|
||||||
|
}else if(shipInfo.getSiType().equals("KRJPRU")) {
|
||||||
|
sheetName = "한-일,러 국제여객선 현황";
|
||||||
|
excelFileName = "한-일,러 국제여객선 현황";
|
||||||
|
}
|
||||||
|
|
||||||
|
List<ParamMap> ipShipList= fipTargetService.selectShipInfoListToExcle(shipInfo);
|
||||||
|
|
||||||
|
try {
|
||||||
|
Utils.ipShipDownExcel(ipShipList, response, headers, headerNames,columnType, sheetName, excelFileName);
|
||||||
|
} catch (IOException e) {
|
||||||
|
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
//메뉴권한 확인
|
//메뉴권한 확인
|
||||||
String accessAuth = authMgtService.selectAccessConfigList(loginUser.getUserSeq(), "/target/ipShipList?siType="+shipInfo.getSiType()).get(0).getAccessAuth();
|
String accessAuth = authMgtService.selectAccessConfigList(loginUser.getUserSeq(), "/target/ipShipList?siType="+shipInfo.getSiType()).get(0).getAccessAuth();
|
||||||
mav.addObject("accessAuth", accessAuth);
|
mav.addObject("accessAuth", accessAuth);
|
||||||
shipInfo.setQueryInfo();
|
shipInfo.setQueryInfo();
|
||||||
|
mav.addObject("shipInfoList", fipTargetService.selectShipInfoList(shipInfo));
|
||||||
|
shipInfo.setContentCnt(fipTargetService.selectShipInfoListCnt(shipInfo));
|
||||||
shipInfo.setPaginationInfo();
|
shipInfo.setPaginationInfo();
|
||||||
mav.addObject("uesrId", loginUser.getUserId());
|
mav.addObject("uesrId", loginUser.getUserId());
|
||||||
mav.addObject("searchParams", shipInfo);
|
mav.addObject("searchParams", shipInfo);
|
||||||
|
|
@ -489,13 +515,69 @@ public class FipTargetController {
|
||||||
public ModelAndView ipShipEditModal(@AuthenticationPrincipal UserInfo loginUser,ShipInfo shipInfo) {
|
public ModelAndView ipShipEditModal(@AuthenticationPrincipal UserInfo loginUser,ShipInfo shipInfo) {
|
||||||
ModelAndView mav = new ModelAndView("fipTarget/ipShipEditModal");
|
ModelAndView mav = new ModelAndView("fipTarget/ipShipEditModal");
|
||||||
//메뉴권한 확인
|
//메뉴권한 확인
|
||||||
String accessAuth = authMgtService.selectAccessConfigList(loginUser.getUserSeq(), "/target/partWorkList").get(0).getAccessAuth();
|
String accessAuth = authMgtService.selectAccessConfigList(loginUser.getUserSeq(), "/target/ipShipList?siType="+shipInfo.getSiType()).get(0).getAccessAuth();
|
||||||
mav.addObject("accessAuth", accessAuth);
|
mav.addObject("accessAuth", accessAuth);
|
||||||
|
mav.addObject("siType", shipInfo.getSiType());
|
||||||
|
|
||||||
return mav;
|
return mav;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@PostMapping("/saveShipInfo")
|
||||||
|
public void saveShipInfo (@AuthenticationPrincipal UserInfo loginUser, ShipInfo shipInfo){
|
||||||
|
shipInfo.setWrtNm(loginUser.getUserId());
|
||||||
|
shipInfo.setWrtPart(loginUser.getOfcCd());
|
||||||
|
shipInfo.setWrtTitle(loginUser.getTitleCd());
|
||||||
|
shipInfo.setWrtUserSeq(loginUser.getUserSeq());
|
||||||
|
shipInfo.setWrtOrgan(loginUser.getOgCd());
|
||||||
|
shipInfo.setWrtDt(LocalDateTime.now());
|
||||||
|
fipTargetService.saveShipInfo(shipInfo);
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping("/shipInfoView")
|
||||||
|
public ModelAndView shipInfoView(@AuthenticationPrincipal UserInfo loginUser,ShipInfo shipInfo) {
|
||||||
|
ModelAndView mav = new ModelAndView("fipTarget/ipShipViewModal");
|
||||||
|
mav.addObject("shipInfo", fipTargetService.selectShipInfo(shipInfo));
|
||||||
|
//메뉴권한 확인
|
||||||
|
String accessAuth = authMgtService.selectAccessConfigList(loginUser.getUserSeq(), "/target/ipShipList?siType="+shipInfo.getSiType()).get(0).getAccessAuth();
|
||||||
|
mav.addObject("accessAuth", accessAuth);
|
||||||
|
//첫번째 작성 UserSeq
|
||||||
|
mav.addObject("wrtUserSeq", fipTargetService.selectFirstWrtId(shipInfo));
|
||||||
|
|
||||||
|
mav.addObject("userSeq", loginUser.getUserSeq());
|
||||||
|
return mav;
|
||||||
|
}
|
||||||
|
|
||||||
|
@PostMapping("/updateShipInfo")
|
||||||
|
public ShipInfo updateShipInfo (@AuthenticationPrincipal UserInfo loginUser,ShipInfo shipInfo){
|
||||||
|
shipInfo.setWrtNm(loginUser.getUserId());
|
||||||
|
shipInfo.setWrtPart(loginUser.getOfcCd());
|
||||||
|
shipInfo.setWrtTitle(loginUser.getTitleCd());
|
||||||
|
shipInfo.setWrtUserSeq(loginUser.getUserSeq());
|
||||||
|
shipInfo.setWrtOrgan(loginUser.getOgCd());
|
||||||
|
shipInfo.setWrtDt(LocalDateTime.now());
|
||||||
|
return fipTargetService.updateShipInfo(shipInfo);
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping("/ipShipHistory")
|
||||||
|
public ModelAndView ipShipHistory(ShipInfo shipInfo) {
|
||||||
|
ModelAndView mav = new ModelAndView("fipTarget/ipShipHistory");
|
||||||
|
mav.addObject("shipInfoList", fipTargetService.selectShipInfoSeq(shipInfo));
|
||||||
|
return mav;
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping("/ipShipHistoryView")
|
||||||
|
@ResponseBody
|
||||||
|
public ShipInfo ipShipHistoryView(ShipInfo shipInfo){
|
||||||
|
return fipTargetService.selectIpShipHistoryView(shipInfo);
|
||||||
|
}
|
||||||
|
|
||||||
|
@PostMapping("/deleteShipInfo")
|
||||||
|
@ResponseBody
|
||||||
|
public void deleteShipInfo(@RequestBody ShipInfo shipInfo) {
|
||||||
|
fipTargetService.deleteShipInfo(shipInfo);
|
||||||
|
}
|
||||||
|
|
||||||
|
//국제여객선 끝
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@ package com.dbnt.faisp.main.fipTarget.mapper;
|
||||||
import com.dbnt.faisp.main.fipTarget.model.PartInfo;
|
import com.dbnt.faisp.main.fipTarget.model.PartInfo;
|
||||||
import com.dbnt.faisp.main.fipTarget.model.PartInfoFile;
|
import com.dbnt.faisp.main.fipTarget.model.PartInfoFile;
|
||||||
import com.dbnt.faisp.main.fipTarget.model.PartWork;
|
import com.dbnt.faisp.main.fipTarget.model.PartWork;
|
||||||
|
import com.dbnt.faisp.main.fipTarget.model.ShipInfo;
|
||||||
import com.dbnt.faisp.main.fipTarget.model.Vulnerable;
|
import com.dbnt.faisp.main.fipTarget.model.Vulnerable;
|
||||||
import com.dbnt.faisp.util.ParamMap;
|
import com.dbnt.faisp.util.ParamMap;
|
||||||
|
|
||||||
|
|
@ -51,6 +52,15 @@ public interface FipTargetMapper {
|
||||||
|
|
||||||
Vulnerable selectVulnInfo(Vulnerable vulnerable);
|
Vulnerable selectVulnInfo(Vulnerable vulnerable);
|
||||||
|
|
||||||
|
List<ShipInfo> selectShipInfoList(ShipInfo shipInfo);
|
||||||
|
|
||||||
|
Integer selectShipInfoListCnt(ShipInfo shipInfo);
|
||||||
|
|
||||||
|
ShipInfo selectShipInfo(ShipInfo shipInfo);
|
||||||
|
|
||||||
|
List<ParamMap> selectShipInfoListToExcle(ShipInfo shipInfo);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -38,7 +38,7 @@ public class ShipInfo extends BaseModel implements Serializable{
|
||||||
@Column(name = "start_point")
|
@Column(name = "start_point")
|
||||||
private String startPoint;
|
private String startPoint;
|
||||||
@Column(name = "end_point")
|
@Column(name = "end_point")
|
||||||
private Integer endPoint;
|
private String endPoint;
|
||||||
@Column(name = "distance_nm")
|
@Column(name = "distance_nm")
|
||||||
private String distanceNm;
|
private String distanceNm;
|
||||||
@Column(name = "distance_km")
|
@Column(name = "distance_km")
|
||||||
|
|
@ -50,7 +50,7 @@ public class ShipInfo extends BaseModel implements Serializable{
|
||||||
@Column(name = "operation_cnt")
|
@Column(name = "operation_cnt")
|
||||||
private String operationCnt;
|
private String operationCnt;
|
||||||
@Column(name = "ship_weight")
|
@Column(name = "ship_weight")
|
||||||
private Integer shipWeight;
|
private Double shipWeight;
|
||||||
@Column(name = "passenger_cnt")
|
@Column(name = "passenger_cnt")
|
||||||
private Integer passengerCnt;
|
private Integer passengerCnt;
|
||||||
@Column(name = "freight_cnt")
|
@Column(name = "freight_cnt")
|
||||||
|
|
@ -76,6 +76,9 @@ public class ShipInfo extends BaseModel implements Serializable{
|
||||||
@Transient
|
@Transient
|
||||||
private String excel;
|
private String excel;
|
||||||
|
|
||||||
|
@Transient
|
||||||
|
private String weightStr;
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,26 @@
|
||||||
|
package com.dbnt.faisp.main.fipTarget.repository;
|
||||||
|
|
||||||
|
|
||||||
|
import com.dbnt.faisp.main.fipTarget.model.ShipInfo;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
|
||||||
|
import org.springframework.data.jpa.repository.JpaRepository;
|
||||||
|
import org.springframework.data.jpa.repository.Query;
|
||||||
|
import org.springframework.data.repository.query.Param;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public interface ShipInfoRepository extends JpaRepository<ShipInfo, ShipInfo.ShipInfoId> {
|
||||||
|
|
||||||
|
ShipInfo findTopBySiTypeOrderBySiSeqDesc(String siType);
|
||||||
|
|
||||||
|
List<ShipInfo> findBySiSeqAndSiTypeOrderByVersionNoDesc(Integer siSeq, String siType);
|
||||||
|
|
||||||
|
void deleteBySiSeqAndSiType(Integer siSeq, String siType);
|
||||||
|
|
||||||
|
@Query(value = "SELECT wrt_user_seq FROM ship_info WHERE si_seq=:siSeq AND si_type=:siType order by version_no asc limit 1", nativeQuery = true)
|
||||||
|
Integer getWrtUserSeq(@Param("siSeq") Integer siSeq,@Param("siType") String siType);
|
||||||
|
}
|
||||||
|
|
@ -12,6 +12,8 @@ import com.dbnt.faisp.main.fipTarget.model.PartWork;
|
||||||
import com.dbnt.faisp.main.fipTarget.model.PartWork.PartWorkId;
|
import com.dbnt.faisp.main.fipTarget.model.PartWork.PartWorkId;
|
||||||
import com.dbnt.faisp.main.fipTarget.model.PartWorkFile;
|
import com.dbnt.faisp.main.fipTarget.model.PartWorkFile;
|
||||||
import com.dbnt.faisp.main.fipTarget.model.PartWorkFile.PartWorkFileId;
|
import com.dbnt.faisp.main.fipTarget.model.PartWorkFile.PartWorkFileId;
|
||||||
|
import com.dbnt.faisp.main.fipTarget.model.ShipInfo;
|
||||||
|
import com.dbnt.faisp.main.fipTarget.model.ShipInfo.ShipInfoId;
|
||||||
import com.dbnt.faisp.main.fipTarget.model.VulnFile;
|
import com.dbnt.faisp.main.fipTarget.model.VulnFile;
|
||||||
import com.dbnt.faisp.main.fipTarget.model.VulnFile.VulnFileId;
|
import com.dbnt.faisp.main.fipTarget.model.VulnFile.VulnFileId;
|
||||||
import com.dbnt.faisp.main.fipTarget.model.Vulnerable;
|
import com.dbnt.faisp.main.fipTarget.model.Vulnerable;
|
||||||
|
|
@ -19,6 +21,7 @@ import com.dbnt.faisp.main.fipTarget.repository.PartInfoFileRepository;
|
||||||
import com.dbnt.faisp.main.fipTarget.repository.PartInfoRepository;
|
import com.dbnt.faisp.main.fipTarget.repository.PartInfoRepository;
|
||||||
import com.dbnt.faisp.main.fipTarget.repository.PartWorkFileRepository;
|
import com.dbnt.faisp.main.fipTarget.repository.PartWorkFileRepository;
|
||||||
import com.dbnt.faisp.main.fipTarget.repository.PartWorkRepository;
|
import com.dbnt.faisp.main.fipTarget.repository.PartWorkRepository;
|
||||||
|
import com.dbnt.faisp.main.fipTarget.repository.ShipInfoRepository;
|
||||||
import com.dbnt.faisp.main.fipTarget.repository.VulnFileRepository;
|
import com.dbnt.faisp.main.fipTarget.repository.VulnFileRepository;
|
||||||
import com.dbnt.faisp.main.fipTarget.repository.VulnRepository;
|
import com.dbnt.faisp.main.fipTarget.repository.VulnRepository;
|
||||||
import com.dbnt.faisp.util.ParamMap;
|
import com.dbnt.faisp.util.ParamMap;
|
||||||
|
|
@ -31,6 +34,8 @@ import org.springframework.transaction.annotation.Transactional;
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
import java.text.DecimalFormat;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
|
|
@ -45,6 +50,7 @@ public class FipTargetService extends BaseService {
|
||||||
private final PartWorkFileRepository partWorkFileRepository;
|
private final PartWorkFileRepository partWorkFileRepository;
|
||||||
private final VulnRepository vulnRepository;
|
private final VulnRepository vulnRepository;
|
||||||
private final VulnFileRepository vulnFileRepository;
|
private final VulnFileRepository vulnFileRepository;
|
||||||
|
private final ShipInfoRepository shipInfoRepository;
|
||||||
private final FipTargetMapper fipTargetMapper;
|
private final FipTargetMapper fipTargetMapper;
|
||||||
|
|
||||||
@Transactional
|
@Transactional
|
||||||
|
|
@ -407,6 +413,87 @@ public class FipTargetService extends BaseService {
|
||||||
vulnRepository.deleteById(vulnerable.getVulnKey());
|
vulnRepository.deleteById(vulnerable.getVulnKey());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Transactional
|
||||||
|
public void saveShipInfo(ShipInfo shipInfo) {
|
||||||
|
ShipInfo dbShip = shipInfoRepository.findTopBySiTypeOrderBySiSeqDesc(shipInfo.getSiType());
|
||||||
|
if(dbShip == null) {
|
||||||
|
shipInfo.setSiSeq(1);
|
||||||
|
shipInfo.setVersionNo(1);
|
||||||
|
}else {
|
||||||
|
shipInfo.setSiSeq(dbShip.getSiSeq()+1);
|
||||||
|
shipInfo.setVersionNo(1);
|
||||||
|
}
|
||||||
|
shipInfoRepository.save(shipInfo);
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<ShipInfo> selectShipInfoList(ShipInfo shipInfo) {
|
||||||
|
List<ShipInfo> List = fipTargetMapper.selectShipInfoList(shipInfo);
|
||||||
|
DecimalFormat formatter3 = new DecimalFormat("#,##0.####");
|
||||||
|
for(ShipInfo tmpList : List) {
|
||||||
|
if(tmpList.getShipWeight() != null) {
|
||||||
|
tmpList.setWeightStr(formatter3.format(tmpList.getShipWeight()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return List;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Integer selectShipInfoListCnt(ShipInfo shipInfo) {
|
||||||
|
return fipTargetMapper.selectShipInfoListCnt(shipInfo);
|
||||||
|
}
|
||||||
|
|
||||||
|
public ShipInfo selectShipInfo(ShipInfo shipInfo) {
|
||||||
|
return fipTargetMapper.selectShipInfo(shipInfo);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Transactional
|
||||||
|
public ShipInfo updateShipInfo(ShipInfo shipInfo) {
|
||||||
|
ShipInfo dbShip = shipInfoRepository.findById(new ShipInfoId(shipInfo.getSiSeq(),shipInfo.getSiType(), shipInfo.getVersionNo())).orElse(null);
|
||||||
|
ShipInfo shipTmp = new ShipInfo();
|
||||||
|
shipTmp.setSiSeq(dbShip.getSiSeq());
|
||||||
|
shipTmp.setSiType(dbShip.getSiType());
|
||||||
|
shipTmp.setVersionNo(dbShip.getVersionNo()+1);
|
||||||
|
shipTmp.setStartPoint(shipInfo.getStartPoint());
|
||||||
|
shipTmp.setEndPoint(shipInfo.getEndPoint());
|
||||||
|
shipTmp.setOwnerNm(shipInfo.getOwnerNm());
|
||||||
|
shipTmp.setShipNm(shipInfo.getShipNm());
|
||||||
|
shipTmp.setDistanceNm(shipInfo.getDistanceNm());
|
||||||
|
shipTmp.setDistanceKm(shipInfo.getDistanceKm());
|
||||||
|
shipTmp.setShipWeight(shipInfo.getShipWeight());
|
||||||
|
shipTmp.setPassengerCnt(shipInfo.getPassengerCnt());
|
||||||
|
shipTmp.setFreightCnt(shipInfo.getFreightCnt());
|
||||||
|
shipTmp.setOperationCnt(shipInfo.getOperationCnt());
|
||||||
|
shipTmp.setCloseYn(shipInfo.getCloseYn());
|
||||||
|
shipTmp.setDescription(shipInfo.getDescription());
|
||||||
|
shipTmp.setWrtNm(shipInfo.getWrtNm());
|
||||||
|
shipTmp.setWrtPart(shipInfo.getWrtPart());
|
||||||
|
shipTmp.setWrtTitle(shipInfo.getWrtTitle());
|
||||||
|
shipTmp.setWrtUserSeq(shipInfo.getWrtUserSeq());
|
||||||
|
shipTmp.setWrtOrgan(shipInfo.getWrtOrgan());
|
||||||
|
shipTmp.setWrtDt(shipInfo.getWrtDt());
|
||||||
|
return shipInfoRepository.save(shipTmp);
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<ShipInfo> selectShipInfoSeq(ShipInfo shipInfo) {
|
||||||
|
return shipInfoRepository.findBySiSeqAndSiTypeOrderByVersionNoDesc(shipInfo.getSiSeq(),shipInfo.getSiType());
|
||||||
|
}
|
||||||
|
|
||||||
|
public ShipInfo selectIpShipHistoryView(ShipInfo shipInfo) {
|
||||||
|
return shipInfoRepository.findById(new ShipInfoId(shipInfo.getSiSeq(),shipInfo.getSiType(), shipInfo.getVersionNo())).orElse(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Transactional
|
||||||
|
public void deleteShipInfo(ShipInfo shipInfo) {
|
||||||
|
shipInfoRepository.deleteBySiSeqAndSiType(shipInfo.getSiSeq(),shipInfo.getSiType());
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<ParamMap> selectShipInfoListToExcle(ShipInfo shipInfo) {
|
||||||
|
return fipTargetMapper.selectShipInfoListToExcle(shipInfo);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Integer selectFirstWrtId(ShipInfo shipInfo) {
|
||||||
|
return shipInfoRepository.getWrtUserSeq(shipInfo.getSiSeq(),shipInfo.getSiType());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,7 @@ package com.dbnt.faisp.util;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
import java.io.PrintWriter;
|
import java.io.PrintWriter;
|
||||||
|
import java.text.DecimalFormat;
|
||||||
import java.time.format.DateTimeFormatter;
|
import java.time.format.DateTimeFormatter;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
@ -877,4 +878,85 @@ public class Utils {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void ipShipDownExcel(List<ParamMap> ipShipList, HttpServletResponse response, String[] headers,
|
||||||
|
String[] headerNames, String[] columnType, String sheetName, String excelFileName) throws IOException {
|
||||||
|
DecimalFormat formatter3 = new DecimalFormat("#,##0.####");
|
||||||
|
if(Utils.isNotEmpty(ipShipList)) {
|
||||||
|
// 메모리에 100개의 행을 유지합니다. 행의 수가 넘으면 디스크에 적습니다.
|
||||||
|
XSSFWorkbook wb = new XSSFWorkbook();
|
||||||
|
Sheet sheet = wb.createSheet(sheetName);
|
||||||
|
Row headerRow = sheet.createRow(0);
|
||||||
|
CellStyle cellStyle1 = wb.createCellStyle(); //쉼표들어간 숫자 양식
|
||||||
|
CellStyle cellStyle2 = wb.createCellStyle();
|
||||||
|
CellStyle cellStyle3 = wb.createCellStyle();//숫자양식
|
||||||
|
CellStyle headerStyle = wb.createCellStyle(); //숫자양식
|
||||||
|
|
||||||
|
XSSFDataFormat format = wb.createDataFormat();
|
||||||
|
cellStyle1.setDataFormat(format.getFormat("#,##0"));
|
||||||
|
cellStyle2.setDataFormat(format.getFormat("#,##0"));
|
||||||
|
cellStyle3.setWrapText(true);
|
||||||
|
cellStyle1.setAlignment(HorizontalAlignment.CENTER);
|
||||||
|
cellStyle2.setAlignment(HorizontalAlignment.CENTER);
|
||||||
|
cellStyle3.setAlignment(HorizontalAlignment.CENTER);
|
||||||
|
headerStyle.setAlignment(HorizontalAlignment.CENTER);
|
||||||
|
headerStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
|
||||||
|
headerStyle.setFillForegroundColor((short)3);
|
||||||
|
headerStyle.setFillForegroundColor(IndexedColors.LIME.getIndex());
|
||||||
|
headerStyle.setWrapText(true);
|
||||||
|
|
||||||
|
//로우그리기
|
||||||
|
for(int i=0; i<ipShipList.size(); i++) {
|
||||||
|
ParamMap rowData = ipShipList.get(i);
|
||||||
|
Row row = sheet.createRow(i+1);
|
||||||
|
rowData.set("hangro", rowData.get("start_point")+"/"+rowData.get("end_point")+System.lineSeparator()+"("+rowData.get("distance_nm")+","+rowData.get("distance_km")+")");
|
||||||
|
if(rowData.get("ship_weight") != null) {
|
||||||
|
rowData.set("ship_weight", formatter3.format(rowData.get("ship_weight")));
|
||||||
|
}
|
||||||
|
rowData.set("susong", "여객: "+rowData.get("passenger_cnt")+"명"+System.lineSeparator()+"화물 :"+rowData.get("freight_cnt")+"TEU");
|
||||||
|
|
||||||
|
for(int j=0; j<headers.length; j++) {
|
||||||
|
Cell cell = row.createCell(j);
|
||||||
|
|
||||||
|
if(columnType[j].equalsIgnoreCase("Money")) {
|
||||||
|
cell.setCellValue(rowData.getInt(headers[j]));
|
||||||
|
cell.setCellStyle(cellStyle1);
|
||||||
|
} else if(columnType[j].equalsIgnoreCase("double")) {
|
||||||
|
cell.setCellValue(rowData.getInt(headers[j]));
|
||||||
|
cell.setCellStyle(cellStyle2);
|
||||||
|
} else if(columnType[j].equalsIgnoreCase("String")) {
|
||||||
|
cell.setCellValue(rowData.getString(headers[j]));
|
||||||
|
cell.setCellStyle(cellStyle3);
|
||||||
|
} else {
|
||||||
|
cell.setCellValue(rowData.getString(headers[j]));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//헤더그리기
|
||||||
|
for(int j=0; j<headerNames.length; j++) {
|
||||||
|
Cell cell = headerRow.createCell(j);
|
||||||
|
cell.setCellValue(headerNames[j]);
|
||||||
|
cell.setCellStyle(headerStyle);
|
||||||
|
sheet.autoSizeColumn(j);
|
||||||
|
sheet.setColumnWidth(j, (sheet.getColumnWidth(j)) +(short)1024);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//엑셀이름 한글깨짐방지
|
||||||
|
String outputFileName = new String(excelFileName.getBytes("KSC5601"), "8859_1");
|
||||||
|
|
||||||
|
response.setHeader("Set-Cookie", "fileDownload=true; path=/");
|
||||||
|
response.setHeader("Content-Disposition", String.format("attachment; filename=\""+outputFileName+"_"+Utils.getTimeStampString("yyyyMMdd_HHmm")+".xlsx\""));
|
||||||
|
|
||||||
|
wb.write(response.getOutputStream());
|
||||||
|
wb.close();
|
||||||
|
} else {
|
||||||
|
createNoDataAlert(response);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -529,4 +529,110 @@
|
||||||
where vuln_key = #{vulnKey}
|
where vuln_key = #{vulnKey}
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
|
<select id="selectShipInfoList" resultType="ShipInfo" parameterType="ShipInfo">
|
||||||
|
select si.si_seq,
|
||||||
|
version_no,
|
||||||
|
si_type,
|
||||||
|
start_point,
|
||||||
|
end_point,
|
||||||
|
distance_nm,
|
||||||
|
distance_km,
|
||||||
|
owner_nm,
|
||||||
|
ship_nm,
|
||||||
|
ship_weight,
|
||||||
|
passenger_cnt,
|
||||||
|
freight_cnt,
|
||||||
|
operation_cnt,
|
||||||
|
close_yn,
|
||||||
|
wrt_dt
|
||||||
|
from ship_info si,
|
||||||
|
(select si_seq ,max(version_no) as lastVer
|
||||||
|
from ship_info group by si_seq) b
|
||||||
|
where si.si_seq = b.si_seq
|
||||||
|
and si.version_no = b.lastVer
|
||||||
|
and si.si_type = #{siType}
|
||||||
|
order by si.si_seq desc
|
||||||
|
limit #{rowCnt} offset #{firstIndex}
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<select id="selectShipInfoListCnt" resultType="Integer" parameterType="ShipInfo">
|
||||||
|
select count(*)
|
||||||
|
from(
|
||||||
|
select si.si_seq,
|
||||||
|
version_no,
|
||||||
|
si_type,
|
||||||
|
start_point,
|
||||||
|
end_point,
|
||||||
|
distance_nm,
|
||||||
|
distance_km,
|
||||||
|
owner_nm,
|
||||||
|
ship_nm,
|
||||||
|
ship_weight,
|
||||||
|
passenger_cnt,
|
||||||
|
freight_cnt,
|
||||||
|
operation_cnt,
|
||||||
|
close_yn,
|
||||||
|
wrt_dt
|
||||||
|
from ship_info si,
|
||||||
|
(select si_seq ,max(version_no) as lastVer
|
||||||
|
from ship_info group by si_seq) b
|
||||||
|
where si.si_seq = b.si_seq
|
||||||
|
and si.version_no = b.lastVer
|
||||||
|
and si.si_type = #{siType}
|
||||||
|
order by si.si_seq desc
|
||||||
|
) a
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<select id="selectShipInfo" resultType="ShipInfo" parameterType="ShipInfo">
|
||||||
|
select si.si_seq,
|
||||||
|
version_no,
|
||||||
|
si_type,
|
||||||
|
start_point,
|
||||||
|
end_point,
|
||||||
|
distance_nm,
|
||||||
|
distance_km,
|
||||||
|
owner_nm,
|
||||||
|
ship_nm,
|
||||||
|
ship_weight,
|
||||||
|
passenger_cnt,
|
||||||
|
freight_cnt,
|
||||||
|
operation_cnt,
|
||||||
|
close_yn,
|
||||||
|
description,
|
||||||
|
wrt_dt
|
||||||
|
from ship_info si,
|
||||||
|
(select si_seq ,max(version_no) as lastVer
|
||||||
|
from ship_info group by si_seq) b
|
||||||
|
where si.si_seq = b.si_seq
|
||||||
|
and si.version_no = b.lastVer
|
||||||
|
and si.si_seq = #{siSeq}
|
||||||
|
and si.si_type = #{siType}
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<select id="selectShipInfoListToExcle" resultType="com.dbnt.faisp.util.ParamMap" parameterType="ShipInfo">
|
||||||
|
select si.si_seq,
|
||||||
|
version_no,
|
||||||
|
si_type,
|
||||||
|
start_point,
|
||||||
|
end_point,
|
||||||
|
distance_nm,
|
||||||
|
distance_km,
|
||||||
|
owner_nm,
|
||||||
|
ship_nm,
|
||||||
|
ship_weight,
|
||||||
|
passenger_cnt,
|
||||||
|
freight_cnt,
|
||||||
|
operation_cnt,
|
||||||
|
close_yn,
|
||||||
|
to_char(wrt_dt, 'YYYY-MM-DD HH24:MI') as wrt_dt
|
||||||
|
from ship_info si,
|
||||||
|
(select si_seq ,max(version_no) as lastVer
|
||||||
|
from ship_info group by si_seq) b
|
||||||
|
where si.si_seq = b.si_seq
|
||||||
|
and si.version_no = b.lastVer
|
||||||
|
and si.si_type = #{siType}
|
||||||
|
order by si.si_seq desc
|
||||||
|
</select>
|
||||||
|
|
||||||
|
|
||||||
</mapper>
|
</mapper>
|
||||||
|
|
@ -52,3 +52,21 @@
|
||||||
.modal-xxl{
|
.modal-xxl{
|
||||||
--bs-modal-width : 1440px;
|
--bs-modal-width : 1440px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*사이드바 카테고리 트리*/
|
||||||
|
.btn-toggle:hover, .btn-toggle:focus {
|
||||||
|
color: rgba(0, 0, 0, .85);
|
||||||
|
background-color: #d2f4ea;
|
||||||
|
}
|
||||||
|
.btn-toggle::before {
|
||||||
|
width: 1.25em;
|
||||||
|
line-height: 0;
|
||||||
|
content: url("/img/bootstrap-icons-1.9.1/caret-right-fill.svg");
|
||||||
|
transition: transform .35s ease;
|
||||||
|
transform-origin: 0.5em 50%;
|
||||||
|
}
|
||||||
|
.btn-toggle[aria-expanded="true"]::before {
|
||||||
|
content: url("/img/bootstrap-icons-1.9.1/caret-down-fill.svg");
|
||||||
|
/*왜 안돌까?*/
|
||||||
|
/*transform: rotate(90deg);*/
|
||||||
|
}
|
||||||
|
|
@ -299,7 +299,7 @@ $(document).on('click', '#updatePartInfo', function (){
|
||||||
|
|
||||||
function showHistory(piSeq){
|
function showHistory(piSeq){
|
||||||
$.ajax({
|
$.ajax({
|
||||||
url: '/target/PartInfoHistoryPage',
|
url: '/target/partInfoHistoryPage',
|
||||||
data: {
|
data: {
|
||||||
piSeq: piSeq
|
piSeq: piSeq
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,15 @@ $(document).on('click', '#krjpruTab', function (){
|
||||||
|
|
||||||
$(document).on('click', '#addKRCN', function (){
|
$(document).on('click', '#addKRCN', function (){
|
||||||
const siType = 'KRCN';
|
const siType = 'KRCN';
|
||||||
|
showEditModal(siType);
|
||||||
|
})
|
||||||
|
|
||||||
|
$(document).on('click', '#addKRJPRU', function (){
|
||||||
|
const siType = 'KRJPRU';
|
||||||
|
showEditModal(siType);
|
||||||
|
})
|
||||||
|
|
||||||
|
function showEditModal(siType){
|
||||||
$.ajax({
|
$.ajax({
|
||||||
url: '/target/ipShipEditModal',
|
url: '/target/ipShipEditModal',
|
||||||
data: {siType: siType},
|
data: {siType: siType},
|
||||||
|
|
@ -22,4 +31,237 @@ $(document).on('click', '#addKRCN', function (){
|
||||||
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
$(document).on('click', '#saveShipInfo', function (){
|
||||||
|
if($('#startPoint').val() == ''){
|
||||||
|
alert('출발지를 입력해주세요.');
|
||||||
|
$('#startPoint').focus();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if($('#endPoint').val() == ''){
|
||||||
|
alert('도착지를 입력해주세요');
|
||||||
|
$('#endPoint').focus();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if($('#distanceNm').val() == ''){
|
||||||
|
alert('거리(해리)를 입력해주세요');
|
||||||
|
$('#distanceNm').focus();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if($('#distanceKm').val() == ''){
|
||||||
|
alert('거리(Km)를 입력해주세요');
|
||||||
|
$('#distanceKm').focus();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if($('#ownerNm').val() == ''){
|
||||||
|
alert('사업자를를 입력해주세요');
|
||||||
|
$('#ownerNm').focus();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if($('#shipNm').val() == ''){
|
||||||
|
alert('선명을 입력해주세요');
|
||||||
|
$('#shipNm').focus();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(confirm("저장하시겠습니까?")){
|
||||||
|
contentFade("in");
|
||||||
|
const formData = new FormData($("#shipInfoSave")[0]);
|
||||||
|
$.ajax({
|
||||||
|
type : 'POST',
|
||||||
|
data : formData,
|
||||||
|
url : "/target/saveShipInfo",
|
||||||
|
processData: false,
|
||||||
|
contentType: false,
|
||||||
|
success : function(result) {
|
||||||
|
alert("저장되었습니다.");
|
||||||
|
contentFade("out");
|
||||||
|
location.reload();
|
||||||
|
},
|
||||||
|
error : function(xhr, status) {
|
||||||
|
alert("저장에 실패하였습니다.")
|
||||||
|
contentFade("out");
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
$(document).on('click', '.shipInfoTr', function (){
|
||||||
|
const siSeq = (Number($(this).find(".siSeq").val()));
|
||||||
|
const siType = $(this).find(".siType").val();
|
||||||
|
showViewModal(siSeq,siType);
|
||||||
|
})
|
||||||
|
|
||||||
|
$(document).on('click', '#viewTab', function (){
|
||||||
|
const siSeq = (Number($(this).data('siseq')));
|
||||||
|
const siType = $(this).data('sitype');
|
||||||
|
showViewModal(siSeq,siType);
|
||||||
|
})
|
||||||
|
|
||||||
|
function showViewModal(siSeq,siType){
|
||||||
|
$.ajax({
|
||||||
|
url: '/target/shipInfoView',
|
||||||
|
data: {
|
||||||
|
siSeq: siSeq,
|
||||||
|
siType: siType
|
||||||
|
},
|
||||||
|
type: 'GET',
|
||||||
|
dataType:"html",
|
||||||
|
success: function(html){
|
||||||
|
$("#ipShipModalContent").empty().append(html);
|
||||||
|
$("#ipShipModal").modal('show');
|
||||||
|
},
|
||||||
|
error:function(){
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
$(document).on('click', '#historyTab', function (){
|
||||||
|
const siSeq = (Number($(this).data('siseq')));
|
||||||
|
const siType = $(this).data('sitype');
|
||||||
|
showHistory(siSeq,siType);
|
||||||
|
})
|
||||||
|
|
||||||
|
function showHistory(siSeq,siType){
|
||||||
|
$.ajax({
|
||||||
|
url: '/target/ipShipHistory',
|
||||||
|
data: {
|
||||||
|
siSeq: siSeq,
|
||||||
|
siType: siType
|
||||||
|
},
|
||||||
|
type: 'GET',
|
||||||
|
dataType:"html",
|
||||||
|
success: function(html){
|
||||||
|
$("#ipShipModalContent").empty().append(html);
|
||||||
|
$("#ipShipModal").modal('show');
|
||||||
|
},
|
||||||
|
error:function(){
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
$(document).on('click', '#updateShipInfo', function (){
|
||||||
|
if($('#startPointM').val() == ''){
|
||||||
|
alert('출발지를 입력해주세요.');
|
||||||
|
$('#startPointM').focus();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if($('#endPointM').val() == ''){
|
||||||
|
alert('도착지를 입력해주세요');
|
||||||
|
$('#endPointM').focus();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if($('#distanceNmM').val() == ''){
|
||||||
|
alert('거리(해리)를 입력해주세요');
|
||||||
|
$('#distanceNmM').focus();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if($('#distanceKmM').val() == ''){
|
||||||
|
alert('거리(Km)를 입력해주세요');
|
||||||
|
$('#distanceKmM').focus();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if($('#ownerNmM').val() == ''){
|
||||||
|
alert('사업자를를 입력해주세요');
|
||||||
|
$('#ownerNmM').focus();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if($('#shipNmM').val() == ''){
|
||||||
|
alert('선명을 입력해주세요');
|
||||||
|
$('#shipNmM').focus();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if(confirm("수정하시겠습니까?")){
|
||||||
|
contentFade("in");
|
||||||
|
const formData = new FormData($("#shipInfoUpdate")[0]);
|
||||||
|
$.ajax({
|
||||||
|
type : 'POST',
|
||||||
|
data : formData,
|
||||||
|
url : "/target/updateShipInfo",
|
||||||
|
processData: false,
|
||||||
|
contentType: false,
|
||||||
|
success : function(result) {
|
||||||
|
alert("수정되었습니다.");
|
||||||
|
contentFade("out");
|
||||||
|
showViewModal(result.siSeq,result.siType);
|
||||||
|
},
|
||||||
|
error : function(xhr, status) {
|
||||||
|
alert("수정에 실패하였습니다.")
|
||||||
|
contentFade("out");
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
$(document).on('click', '.historyInfoTr', function (){
|
||||||
|
$(this).find('.hisChk').prop('checked',true)
|
||||||
|
if($(this).find('.hisChk').prop('checked')){
|
||||||
|
$('.hisChk').prop('checked',false);
|
||||||
|
$(this).find('.hisChk').prop('checked',true)
|
||||||
|
}
|
||||||
|
$.ajax({
|
||||||
|
url: '/target/ipShipHistoryView',
|
||||||
|
data: {
|
||||||
|
siSeq: Number($(this).find(".siSeq").val()),
|
||||||
|
siType: $(this).find(".siType").val(),
|
||||||
|
versionNo : Number($(this).find(".verNo").val())
|
||||||
|
},
|
||||||
|
type: 'GET',
|
||||||
|
dataType:"json",
|
||||||
|
success: function(data){
|
||||||
|
$('#hHangro').val(data.startPoint+' / '+data.endPoint+'('+data.distanceNm+','+data.distanceKm+')');
|
||||||
|
$('#hOwnerNm').val(data.ownerNm);
|
||||||
|
$('#hShipNm').val(data.shipNm);
|
||||||
|
$('#hShipWeight').val(data.shipWeight);
|
||||||
|
$('#hSusong').val('여객 : '+data.passengerCnt+'명'+'\n'+'화물 : '+data.freightCnt+'TEU')
|
||||||
|
$('#hOperationCnt').val(data.operationCnt);
|
||||||
|
$('#hCloseYn').val(data.closeYn);
|
||||||
|
console.log(data);
|
||||||
|
},
|
||||||
|
error:function(){
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})
|
||||||
|
|
||||||
|
$(document).on('click', '#deleteShipInfo', function (){
|
||||||
|
const siSeq = $('#vSiSeq').val();
|
||||||
|
const siType = $('#vSiType').val();
|
||||||
|
if(confirm("삭제하시겠습니까?")){
|
||||||
|
contentFade("in");
|
||||||
|
$.ajax({
|
||||||
|
type : 'POST',
|
||||||
|
url : "/target/deleteShipInfo",
|
||||||
|
data : JSON.stringify({siSeq:siSeq,siType:siType}),
|
||||||
|
contentType: 'application/json',
|
||||||
|
beforeSend: function (xhr){
|
||||||
|
xhr.setRequestHeader($("[name='_csrf_header']").val(), $("[name='_csrf']").val());
|
||||||
|
},
|
||||||
|
success : function(data) {
|
||||||
|
alert("삭제 처리되었습니다.");
|
||||||
|
location.reload();
|
||||||
|
},
|
||||||
|
error : function(xhr, status) {
|
||||||
|
alert("삭제 처리에 실패하였습니다");
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
$(document).on('click', '#goExcel', function (){
|
||||||
|
if(confirm("엑셀로 다운로드 하시겠습니까?")){
|
||||||
|
$('input[name=excel]').val('Y');
|
||||||
|
$('#searchFm').submit();
|
||||||
|
$('input[name=excel]').val('');
|
||||||
|
}else{
|
||||||
|
false;
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
$(document).on('click', '#btn-close', function (){
|
||||||
|
location.reload();
|
||||||
})
|
})
|
||||||
|
|
@ -2,69 +2,74 @@
|
||||||
<html lang="ko" xmlns:th="http://www.thymeleaf.org">
|
<html lang="ko" xmlns:th="http://www.thymeleaf.org">
|
||||||
|
|
||||||
<div class="modal-header">
|
<div class="modal-header">
|
||||||
<h5 class="modal-title" id="menuEditModalLabel">국제여객선 등록</h5>
|
<h5 class="modal-title" th:text="${siType eq 'KRCN' ? '한-중 국제여객선 등록' : siType eq 'KRJPRU' ? '한-일,러 국제여객선 등록' : null}"></h5>
|
||||||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-body">
|
<div class="modal-body">
|
||||||
<form id="partInfoSave" method="post">
|
<form id="shipInfoSave" method="post">
|
||||||
<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="siType" th:value="${siType}">
|
||||||
<h5 class="text-center">항로</h5>
|
<h5 class="text-center">항로</h5>
|
||||||
<div class="mb-2 row">
|
<div class="mb-2 row">
|
||||||
<label for="startPoint" class="col-sm-2 col-form-label text-center">출발</label>
|
<label for="startPoint" class="col-sm-2 col-form-label text-center">출발</label>
|
||||||
<div class="col-sm-3">
|
<div class="col-sm-3">
|
||||||
<input type="text" class="form-control" id="startPoint" name="startPoint" placeholder="직접입력">
|
<input type="text" class="form-control" id="startPoint" name="startPoint">
|
||||||
</div>
|
</div>
|
||||||
<label for="endPoint" class="col-sm-2 col-form-label text-center">도착</label>
|
<label for="endPoint" class="col-sm-2 col-form-label text-center">도착</label>
|
||||||
<div class="col-sm-3">
|
<div class="col-sm-3">
|
||||||
<input type="text" class="form-control" id="endPoint" name="endPoint" placeholder="직접입력">
|
<input type="text" class="form-control" id="endPoint" name="endPoint">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="mb-2 row">
|
<div class="mb-2 row">
|
||||||
<label for="distanceNm" class="col-sm-2 col-form-label text-center">거리(해리)</label>
|
<label for="distanceNm" class="col-sm-2 col-form-label text-center">거리(해리)</label>
|
||||||
<div class="col-sm-3">
|
<div class="col-sm-3">
|
||||||
<input type="text" class="form-control" id="distanceNm" name="distanceNm" placeholder="직접입력">
|
<input type="text" class="form-control" id="distanceNm" name="distanceNm" placeholder="ex:OOO해리">
|
||||||
</div>
|
</div>
|
||||||
<label for="distanceKm" class="col-sm-2 col-form-label text-center">거리(KM)</label>
|
<label for="distanceKm" class="col-sm-2 col-form-label text-center">거리(KM)</label>
|
||||||
<div class="col-sm-3">
|
<div class="col-sm-3">
|
||||||
<input type="text" class="form-control" id="distanceKm" name="distanceKm" placeholder="직접입력">
|
<input type="text" class="form-control" id="distanceKm" name="distanceKm" placeholder="ex:OOOKm">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<br><br>
|
<br><br>
|
||||||
<div class="mb-3 row">
|
<div class="mb-3 row">
|
||||||
<label for="shipWeight" class="col-sm-2 col-form-label text-center">국제총톤 수</label>
|
<label for="shipWeight" class="col-sm-2 col-form-label text-center">국제총톤 수</label>
|
||||||
<div class="col-sm-4">
|
<div class="col-sm-4">
|
||||||
<input type="text" class="form-control" id="shipWeight" name="shipWeight" placeholder="직접입력">
|
<input type="number" class="form-control" id="shipWeight" name="shipWeight">
|
||||||
</div>
|
</div>
|
||||||
<label for="passengerCnt" class="col-sm-2 col-form-label text-center">여객</label>
|
<label for="passengerCnt" class="col-sm-2 col-form-label text-center">여객</label>
|
||||||
<div class="col-sm-4">
|
<div class="col-sm-4">
|
||||||
<input type="text" class="form-control" id="passengerCnt" name="passengerCnt" placeholder="직접입력">
|
<input type="number" class="form-control" id="passengerCnt" name="passengerCnt" placeholder="단위:명">
|
||||||
</div>
|
</div>
|
||||||
<label for="freightCnt" class="col-sm-2 col-form-label text-center">화물</label>
|
<label for="freightCnt" class="col-sm-2 col-form-label text-center">화물</label>
|
||||||
<div class="col-sm-4">
|
<div class="col-sm-4">
|
||||||
<input type="text" class="form-control" id="freightCnt" name="freightCnt" placeholder="직접입력">
|
<input type="number" class="form-control" id="freightCnt" name="freightCnt" placeholder="단위:TEU">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<br><br>
|
<br><br>
|
||||||
<div class="mb-4 row">
|
<div class="mb-4 row">
|
||||||
<label for="ownerNm" class="col-sm-2 col-form-label text-center">사업자</label>
|
<label for="ownerNm" class="col-sm-2 col-form-label text-center">사업자</label>
|
||||||
<div class="col-sm-4">
|
<div class="col-sm-4">
|
||||||
<input type="text" class="form-control" id="ownerNm" name="ownerNm" placeholder="직접입력">
|
<input type="text" class="form-control" id="ownerNm" name="ownerNm">
|
||||||
</div>
|
</div>
|
||||||
<label for="shipNm" class="col-sm-2 col-form-label text-center">선명</label>
|
<label for="shipNm" class="col-sm-2 col-form-label text-center">선명</label>
|
||||||
<div class="col-sm-4">
|
<div class="col-sm-4">
|
||||||
<input type="text" class="form-control" id="shipNm" name="shipNm" placeholder="직접입력">
|
<input type="text" class="form-control" id="shipNm" name="shipNm">
|
||||||
</div>
|
</div>
|
||||||
<label for="operationCnt" class="col-sm-2 col-form-label text-center">운항횟수</label>
|
<label for="operationCnt" class="col-sm-2 col-form-label text-center">운항횟수</label>
|
||||||
<div class="col-sm-4">
|
<div class="col-sm-4">
|
||||||
<input type="text" class="form-control" id="operationCnt" name="operationCnt" placeholder="직접입력">
|
<input type="text" class="form-control" id="operationCnt" name="operationCnt" placeholder="ex:주0회(00H)">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="mb-1 row">
|
<div class="mb-1 row">
|
||||||
<label for="closeYn" class="col-sm-2 col-form-label text-center">휴항</label>
|
<label for="closeYn" class="col-sm-2 col-form-label text-center">휴항</label>
|
||||||
<div class="col-sm-4">
|
<div class="col-sm-2">
|
||||||
<input type="text" class="form-control" id="closeYn" name="closeYn" placeholder="직접입력">
|
<select class="form-select form-select-sm" id="closeYn" name="closeYn">
|
||||||
</div>
|
<option value="">선택</option>
|
||||||
|
<option value="O">O</option>
|
||||||
|
<option value="X">X</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="mb-1 row">
|
<div class="mb-1 row">
|
||||||
<label for="description" class="col-sm-2 col-form-label text-center">비고</label>
|
<label for="description" class="col-sm-2 col-form-label text-center">비고</label>
|
||||||
|
|
@ -76,8 +81,8 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-footer justify-content-between">
|
<div class="modal-footer justify-content-between">
|
||||||
<div class="col-auto">
|
<div class="col-auto">
|
||||||
<button type="button" id="btn-close" class="btn btn-secondary" data-bs-dismiss="modal">닫기</button>
|
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">닫기</button>
|
||||||
<button type="button" class="btn btn-primary" id="savePartInfo">저장</button>
|
<button type="button" class="btn btn-primary" id="saveShipInfo">저장</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</html>
|
</html>
|
||||||
|
|
@ -0,0 +1,98 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="ko" xmlns:th="http://www.thymeleaf.org">
|
||||||
|
|
||||||
|
<div class="modal-header">
|
||||||
|
<h5 class="modal-title" th:text="${shipInfo.siType eq 'KRCN' ? '한-중 국제여객선 수정이력' : shipInfo.siType eq 'KRJPRU' ? '한-일,러 국제여객선 수정이력' : null}"></h5>
|
||||||
|
<button type="button" class="btn-close" data-bs-dismiss="modal"
|
||||||
|
aria-label="Close"></button>
|
||||||
|
</div>
|
||||||
|
<div class="modal-body">
|
||||||
|
<ul class="nav nav-tabs" id="userTab" role="tablist">
|
||||||
|
<li class="nav-item" role="presentation">
|
||||||
|
<button class="nav-link" id="viewTab" th:data-siseq="${shipInfoList[0].siSeq}" th:data-sitype="${shipInfoList[0].siType}" data-bs-toggle="tab" data-bs-target="#accessTabPanel" type="button" role="tab" aria-controls="accessTabPanel" aria-selected="true">현황상세</button>
|
||||||
|
</li>
|
||||||
|
<li class="nav-item" role="presentation">
|
||||||
|
<button class="nav-link active" id="historyTab" th:data-siseq="${shipInfoList[0].siSeq}" th:data-sitype="${shipInfoList[0].siType}" data-bs-toggle="tab" data-bs-target="#approvalTabPanel" type="button" role="tab" aria-controls="approvalTabPanel" aria-selected="false">수정이력</button>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
<div class="row justify-content-start">
|
||||||
|
<div class="col-4">
|
||||||
|
<div class="card">
|
||||||
|
<div class="card-body">
|
||||||
|
<div class="row">
|
||||||
|
<table class="table table-striped" id="categoryTable">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th></th>
|
||||||
|
<th>작성자</th>
|
||||||
|
<th>등록일</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody class="overflow-scroll">
|
||||||
|
<tr class="historyInfoTr" th:each="si:${shipInfoList}">
|
||||||
|
<td><input type="checkbox" class="hisChk">
|
||||||
|
<input type="hidden" class="siSeq" th:value="${si.siSeq}">
|
||||||
|
<input type="hidden" class="siType" th:value="${si.siType}">
|
||||||
|
<input type="hidden" class="verNo" th:value="${si.versionNo}"></td>
|
||||||
|
<td th:text="${si.wrtNm}"></td>
|
||||||
|
<td th:text="${#temporals.format(si.wrtDt, 'yyyy-MM-dd')}"></td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-8" id="valueDiv">
|
||||||
|
<div class="row mb-3">
|
||||||
|
<label for="cat1Cd" class="col-sm-4 col-form-label col-form-label-sm text-center">항로</label>
|
||||||
|
<div class="col-sm-7">
|
||||||
|
<input type="text" class="form-control" id="hHangro" readonly>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row mb-3">
|
||||||
|
<label for="cat1Cd" class="col-sm-4 col-form-label col-form-label-sm text-center">사업자</label>
|
||||||
|
<div class="col-sm-7">
|
||||||
|
<input type="text" class="form-control" id="hOwnerNm" readonly>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row mb-3">
|
||||||
|
<label for="cat2Cd" class="col-sm-4 col-form-label col-form-label-sm text-center">선명</label>
|
||||||
|
<div class="col-sm-7">
|
||||||
|
<input type="text" class="form-control" id="hShipNm" readonly>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row mb-3">
|
||||||
|
<label for="cat3Cd" class="col-sm-4 col-form-label col-form-label-sm text-center">국제총톤수</label>
|
||||||
|
<div class="col-sm-7">
|
||||||
|
<input type="text" class="form-control" id="hShipWeight" readonly>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row mb-3">
|
||||||
|
<label for="cat3Cd" class="col-sm-4 col-form-label col-form-label-sm text-center">수송능력</label>
|
||||||
|
<div class="col-sm-7">
|
||||||
|
<textarea class="form-control" id="hSusong" readonly></textarea>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row mb-3">
|
||||||
|
<label for="cat2Cd" class="col-sm-4 col-form-label col-form-label-sm text-center">운항횟수</label>
|
||||||
|
<div class="col-sm-7">
|
||||||
|
<input type="text" class="form-control" id="hOperationCnt" readonly>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row mb-3">
|
||||||
|
<label for="cat3Cd" class="col-sm-4 col-form-label col-form-label-sm text-center">휴항</label>
|
||||||
|
<div class="col-sm-7">
|
||||||
|
<input type="text" class="form-control" id="hCloseYn" readonly>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="modal-footer justify-content-between">
|
||||||
|
<div class="col-auto">
|
||||||
|
<button type="button" class="btn btn-secondary"
|
||||||
|
data-bs-dismiss="modal">닫기</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</html>
|
||||||
|
|
@ -13,6 +13,7 @@
|
||||||
<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">
|
||||||
|
<button id="goExcel">엑셀 다운</button>
|
||||||
<ul class="nav nav-tabs" id="userTab" role="tablist">
|
<ul class="nav nav-tabs" id="userTab" role="tablist">
|
||||||
<li class="nav-item" role="presentation">
|
<li class="nav-item" role="presentation">
|
||||||
<button class="nav-link" th:classappend="${searchParams.siType eq 'KRCN'?' active':''}" id="krcnTab" data-bs-toggle="tab" type="button" role="tab">한-중 국제여객선 현황</button>
|
<button class="nav-link" th:classappend="${searchParams.siType eq 'KRCN'?' active':''}" id="krcnTab" data-bs-toggle="tab" type="button" role="tab">한-중 국제여객선 현황</button>
|
||||||
|
|
@ -21,25 +22,11 @@
|
||||||
<button class="nav-link" th:classappend="${searchParams.siType eq 'KRJPRU'?' active':''}" id="krjpruTab" data-bs-toggle="tab" type="button" role="tab">한-일,러 국제여객선 현황</button>
|
<button class="nav-link" th:classappend="${searchParams.siType eq 'KRJPRU'?' active':''}" id="krjpruTab" data-bs-toggle="tab" type="button" role="tab">한-일,러 국제여객선 현황</button>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<form method="get" th:action="@{/equip/List}">
|
<form id="searchFm" method="get" th:action="@{/target/ipShipList}">
|
||||||
<input type="hidden" name="pageIndex" id="pageIndex" th:value="${searchParams.pageIndex}">
|
<input type="hidden" name="pageIndex" id="pageIndex" th:value="${searchParams.pageIndex}">
|
||||||
<div class="row justify-content-between pe-3 py-1">
|
<input type="hidden" name="siType" th:value="${searchParams.siType}">
|
||||||
<div class="col-auto">
|
<input type="hidden" name="excel">
|
||||||
<select class="form-select" name="rowCnt" id="rowCnt">
|
<input type="submit" class="btn btn-sm btn-primary col-auto" id="searchBtn" value="검색" style="display:none;">
|
||||||
<th:block th:each="num : ${#numbers.sequence(1,5)}">
|
|
||||||
<option th:value="${num*10}" th:text="${num*10}" th:selected="${searchParams.rowCnt==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>
|
|
||||||
</div>
|
|
||||||
</form>
|
</form>
|
||||||
<div class="row justify-content-start">
|
<div class="row justify-content-start">
|
||||||
<div class="col-12">
|
<div class="col-12">
|
||||||
|
|
@ -60,8 +47,28 @@
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
<tr>
|
<tr class="shipInfoTr" th:each="si:${shipInfoList}">
|
||||||
|
<th:block>
|
||||||
|
<input type="hidden" class="siSeq" th:value="${si.siSeq}">
|
||||||
|
<input type="hidden" class="siType" th:value="${si.siType}">
|
||||||
|
<input type="hidden" class="verNo" th:value="${si.versionNo}">
|
||||||
|
</th:block>
|
||||||
|
<td th:inline="text">
|
||||||
|
[[${si.startPoint}]]/[[${si.endPoint}]]
|
||||||
|
<br/>
|
||||||
|
([[${si.distanceNm}]],[[${si.distanceKm}]])
|
||||||
|
</td>
|
||||||
|
<td th:text="${si.ownerNm}"></td>
|
||||||
|
<td th:text="${si.shipNm}"></td>
|
||||||
|
<td th:text="${si.weightStr}"></td>
|
||||||
|
<td th:inline="text">
|
||||||
|
여객:[[${si.passengerCnt}]]명
|
||||||
|
<br/>
|
||||||
|
화물:[[${si.freightCnt}]]TEU
|
||||||
|
</td>
|
||||||
|
<td th:text="${si.operationCnt}"></td>
|
||||||
|
<td th:text="${si.closeYn}"></td>
|
||||||
|
<td th:text="${#temporals.format(si.wrtDt, 'yyyy-MM-dd HH:mm')}"></td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,99 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="ko" xmlns:th="http://www.thymeleaf.org">
|
||||||
|
|
||||||
|
<div class="modal-header">
|
||||||
|
<h5 class="modal-title" th:text="${shipInfo.siType eq 'KRCN' ? '한-중 국제여객선 상세' : shipInfo.siType eq 'KRJPRU' ? '한-일,러 국제여객선 상세' : null}"></h5>
|
||||||
|
<button type="button" id="btn-close" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
||||||
|
</div>
|
||||||
|
<div class="modal-body">
|
||||||
|
<ul class="nav nav-tabs" id="userTab" role="tablist">
|
||||||
|
<li class="nav-item" role="presentation">
|
||||||
|
<button class="nav-link active" id="viewTab" th:data-siseq="${shipInfo.siSeq}" th:data-sitype="${shipInfo.siType}" data-bs-toggle="tab" data-bs-target="#accessTabPanel" type="button" role="tab" aria-controls="accessTabPanel" aria-selected="true">현황상세</button>
|
||||||
|
</li>
|
||||||
|
<li class="nav-item" role="presentation">
|
||||||
|
<button class="nav-link" id="historyTab" th:data-siseq="${shipInfo.siSeq}" th:data-sitype="${shipInfo.siType}" data-bs-toggle="tab" data-bs-target="#approvalTabPanel" type="button" role="tab" aria-controls="approvalTabPanel" aria-selected="false">수정이력</button>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
<form id="shipInfoUpdate" method="post">
|
||||||
|
<input type="hidden" name="_csrf_header" th:value="${_csrf.headerName}"/>
|
||||||
|
<input type="hidden" th:name="${_csrf.parameterName}" th:value="${_csrf.token}"/>
|
||||||
|
<input type="hidden" id="vSiSeq" name="siSeq" th:value="${shipInfo.siSeq}">
|
||||||
|
<input type="hidden" id="vSiType" name="siType" th:value="${shipInfo.siType}">
|
||||||
|
<input type="hidden" name="versionNo" th:value="${shipInfo.versionNo}">
|
||||||
|
<h5 class="text-center">항로</h5>
|
||||||
|
<div class="mb-2 row">
|
||||||
|
<label for="startPointM" class="col-sm-2 col-form-label text-center">출발</label>
|
||||||
|
<div class="col-sm-3">
|
||||||
|
<input type="text" class="form-control" id="startPointM" name="startPoint" th:value="${shipInfo.startPoint}">
|
||||||
|
</div>
|
||||||
|
<label for="endPointM" class="col-sm-2 col-form-label text-center">도착</label>
|
||||||
|
<div class="col-sm-3">
|
||||||
|
<input type="text" class="form-control" id="endPointM" name="endPoint" th:value="${shipInfo.endPoint}">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="mb-2 row">
|
||||||
|
<label for="distanceNmM" class="col-sm-2 col-form-label text-center">거리(해리)</label>
|
||||||
|
<div class="col-sm-3">
|
||||||
|
<input type="text" class="form-control" id="distanceNmM" name="distanceNm" th:value="${shipInfo.distanceNm}" placeholder="ex:OOO해리">
|
||||||
|
</div>
|
||||||
|
<label for="distanceKmM" class="col-sm-2 col-form-label text-center">거리(KM)</label>
|
||||||
|
<div class="col-sm-3">
|
||||||
|
<input type="text" class="form-control" id="distanceKmM" name="distanceKm" th:value="${shipInfo.distanceKm}" placeholder="ex:OOOKm">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<br><br>
|
||||||
|
<div class="mb-3 row">
|
||||||
|
<label for="shipWeightM" class="col-sm-2 col-form-label text-center">국제총톤 수</label>
|
||||||
|
<div class="col-sm-4">
|
||||||
|
<input type="number" class="form-control" id="shipWeightM" name="shipWeight" th:value="${shipInfo.shipWeight}">
|
||||||
|
</div>
|
||||||
|
<label for="passengerCntM" class="col-sm-2 col-form-label text-center">여객</label>
|
||||||
|
<div class="col-sm-4">
|
||||||
|
<input type="number" class="form-control" id="passengerCntM" name="passengerCnt" th:value="${shipInfo.passengerCnt}" placeholder="단위:명">
|
||||||
|
</div>
|
||||||
|
<label for="freightCntM" class="col-sm-2 col-form-label text-center">화물</label>
|
||||||
|
<div class="col-sm-4">
|
||||||
|
<input type="number" class="form-control" id="freightCntM" name="freightCnt" th:value="${shipInfo.freightCnt}" placeholder="단위:TEU">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<br><br>
|
||||||
|
<div class="mb-4 row">
|
||||||
|
<label for="ownerNmM" class="col-sm-2 col-form-label text-center">사업자</label>
|
||||||
|
<div class="col-sm-4">
|
||||||
|
<input type="text" class="form-control" id="ownerNmM" name="ownerNm" th:value="${shipInfo.ownerNm}">
|
||||||
|
</div>
|
||||||
|
<label for="shipNmM" class="col-sm-2 col-form-label text-center">선명</label>
|
||||||
|
<div class="col-sm-4">
|
||||||
|
<input type="text" class="form-control" id="shipNmM" name="shipNm" th:value="${shipInfo.shipNm}">
|
||||||
|
</div>
|
||||||
|
<label for="operationCntM" class="col-sm-2 col-form-label text-center">운항횟수</label>
|
||||||
|
<div class="col-sm-4">
|
||||||
|
<input type="text" class="form-control" id="operationCntM" name="operationCnt" th:value="${shipInfo.operationCnt}" placeholder="ex:주0회(00H)">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="mb-1 row">
|
||||||
|
<label for="closeYnM" class="col-sm-2 col-form-label text-center">휴항</label>
|
||||||
|
<div class="col-sm-2">
|
||||||
|
<select class="form-select form-select-sm" id="closeYnM" name="closeYn">
|
||||||
|
<option value="">선택</option>
|
||||||
|
<option value="O" th:selected="${shipInfo.closeYn eq 'O'}">O</option>
|
||||||
|
<option value="X" th:selected="${shipInfo.closeYn eq 'X'}">X</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="mb-1 row">
|
||||||
|
<label for="descriptionM" class="col-sm-2 col-form-label text-center">비고</label>
|
||||||
|
<div class="col-sm-4">
|
||||||
|
<textarea id="descriptionM" name="description" rows="4" cols="50" th:utext="${shipInfo.description}"></textarea>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
<div class="modal-footer justify-content-between">
|
||||||
|
<div class="col-auto">
|
||||||
|
<button type="button" class="btn btn-secondary" id="btn-close" data-bs-dismiss="modal">닫기</button>
|
||||||
|
<button type="button" class="btn btn-danger" id="deleteShipInfo" th:if="${accessAuth eq 'ACC003'} or ${wrtUserSeq eq userSeq}">삭제</button>
|
||||||
|
<button type="button" class="btn btn-warning" id="updateShipInfo" th:if="${accessAuth eq 'ACC003'} or ${wrtUserSeq eq userSeq}">수정</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</html>
|
||||||
|
|
@ -4,36 +4,59 @@
|
||||||
<a href="/" class="d-flex">
|
<a href="/" class="d-flex">
|
||||||
<img id="logo" th:src="@{/img/logo.png}" alt="logo" title="logo">
|
<img id="logo" th:src="@{/img/logo.png}" alt="logo" title="logo">
|
||||||
</a>
|
</a>
|
||||||
<ul class="nav nav-pills flex-column my-3">
|
<div class="flex-shrink-0 pe-3 py-3 bg-transparent">
|
||||||
<li th:each="firstMenu:${session.menuList}">
|
<ul class="list-unstyled ps-0">
|
||||||
<th:block th:each="cat1Code:${session.commonCode.get('CAT1')}">
|
<li class="mb-1" th:each="firstMenu:${session.menuList}">
|
||||||
|
<th:block th:each="cat1Code:${session.commonCode.get('CAT1')}">
|
||||||
<th:block th:if="${cat1Code.itemCd eq firstMenu.cat1Cd}">
|
<th:block th:if="${cat1Code.itemCd eq firstMenu.cat1Cd}">
|
||||||
<a href="#" class="nav-link link-dark firstMenuLink" th:text="${cat1Code.itemValue}"></a>
|
<button class="btn btn-toggle align-items-center rounded collapsed"
|
||||||
<div class="menuDiv secondMenu h-100 bg-white" style="display: none">
|
data-bs-toggle="collapse" aria-expanded="false"
|
||||||
<ul class="nav nav-pills flex-column">
|
th:data-bs-target="'#collapse'+${cat1Code.itemCd}" th:text="${cat1Code.itemValue}">
|
||||||
<li th:each="secondMenu:${firstMenu.childList}">
|
</button>
|
||||||
|
<div class="collapse ps-3" th:id="|collapse${cat1Code.itemCd}|">
|
||||||
|
<ul class="btn-toggle-nav list-unstyled fw-normal pb-1">
|
||||||
|
<li th:each="secondMenu:${firstMenu.childList}">
|
||||||
<th:block th:each="cat2Code:${session.commonCode.get('CAT2')}">
|
<th:block th:each="cat2Code:${session.commonCode.get('CAT2')}">
|
||||||
<th:block th:if="${cat2Code.itemCd eq secondMenu.cat2Cd}">
|
<th:block th:if="${cat2Code.itemCd eq secondMenu.cat2Cd}">
|
||||||
<a class="nav-link link-dark secondMenuLink" th:text="${cat2Code.itemValue}" th:href="${#lists.isEmpty(secondMenu.childList)?secondMenu.menuUrl:'#'}"></a>
|
<ul class="list-unstyled ps-0">
|
||||||
<div class="menuDiv thirdMenu h-100 bg-white" style="display: none" th:if="${#lists.isEmpty(secondMenu.childList) ne true}">
|
<li class="mb-1">
|
||||||
<ul class="nav nav-pills flex-column">
|
<th:block th:unless="${#lists.isEmpty(secondMenu.childList)}">
|
||||||
<li th:each="thirdMenu:${secondMenu.childList}">
|
<button class="btn btn-toggle align-items-center rounded collapsed"
|
||||||
|
data-bs-toggle="collapse" aria-expanded="false" th:onclick="location.href='#'"
|
||||||
|
th:data-bs-target="'#collapse'+${cat2Code.itemCd}" th:text="${cat2Code.itemValue}">
|
||||||
|
</button>
|
||||||
|
</th:block>
|
||||||
|
<th:block th:if="${#lists.isEmpty(secondMenu.childList)}">
|
||||||
|
<a th:href="@{${secondMenu.menuUrl}}" class="bi bi-dash link-dark rounded ps-3 text-decoration-none"
|
||||||
|
th:text="${cat2Code.itemValue}"></a>
|
||||||
|
</th:block>
|
||||||
|
<div class="collapse ps-3" th:id="|collapse${cat2Code.itemCd}|">
|
||||||
|
<ul class="btn-toggle-nav list-unstyled fw-normal pb-1">
|
||||||
|
<li th:each="thirdMenu:${secondMenu.childList}">
|
||||||
<th:block th:each="cat3Code:${session.commonCode.get('CAT3')}">
|
<th:block th:each="cat3Code:${session.commonCode.get('CAT3')}">
|
||||||
<th:block th:if="${cat3Code.itemCd eq thirdMenu.cat3Cd}">
|
<th:block th:if="${cat3Code.itemCd eq thirdMenu.cat3Cd}">
|
||||||
<a class="nav-link link-dark" th:text="${cat3Code.itemValue}" th:href="${thirdMenu.menuUrl}"></a>
|
<ul class="list-unstyled ps-0">
|
||||||
|
<li>
|
||||||
|
<a th:href="@{${thirdMenu.menuUrl}}" class="bi bi-dash link-dark rounded ps-3 text-decoration-none"
|
||||||
|
th:text="${cat3Code.itemValue}"></a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
</th:block>
|
</th:block>
|
||||||
</th:block>
|
</th:block>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
</th:block>
|
</th:block>
|
||||||
</th:block>
|
</th:block>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</th:block>
|
</th:block>
|
||||||
</th:block>
|
</th:block>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</html>
|
</html>
|
||||||
Loading…
Reference in New Issue