Compare commits
22 Commits
20c99b5f8c
...
25cae036c5
| Author | SHA1 | Date |
|---|---|---|
|
|
25cae036c5 | 3 weeks ago |
|
|
c744d6d25e | 3 weeks ago |
|
|
b235eca1b4 | 3 weeks ago |
|
|
678538c5cf | 3 weeks ago |
|
|
71fedb8aa1 | 3 weeks ago |
|
|
16b0bb93ed | 3 weeks ago |
|
|
80e500a6d5 | 3 weeks ago |
|
|
1ae7b35fc3 | 3 weeks ago |
|
|
6b76f06768 | 3 weeks ago |
|
|
69cf97966e | 3 weeks ago |
|
|
06086c8e44 | 3 weeks ago |
|
|
5b7984f185 | 4 weeks ago |
|
|
f2038fb1af | 4 weeks ago |
|
|
af832a5ac7 | 4 weeks ago |
|
|
fd6e35413d | 4 weeks ago |
|
|
5b91f7ba06 | 4 weeks ago |
|
|
58c4f5ba66 | 4 weeks ago |
|
|
858bfd3351 | 4 weeks ago |
|
|
4f50eff731 | 4 weeks ago |
|
|
dfba8efc18 | 4 weeks ago |
|
|
c1b3eb00d6 | 4 weeks ago |
|
|
0dfb93ce8f | 4 weeks ago |
@ -0,0 +1,50 @@
|
||||
package go.kr.project.biz.search.controller;
|
||||
|
||||
import egovframework.constant.TilesConstants;
|
||||
import egovframework.util.ApiResponseUtil;
|
||||
import go.kr.project.biz.minwon.dayanswer.model.DayAnswerDto;
|
||||
import go.kr.project.biz.search.model.SearchDto;
|
||||
import go.kr.project.biz.search.service.SearchService;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.responses.ApiResponse;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.ui.Model;
|
||||
import org.springframework.stereotype.Controller;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.ModelAttribute;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Controller
|
||||
|
||||
@Slf4j
|
||||
|
||||
@RequiredArgsConstructor
|
||||
|
||||
public class SearchController {
|
||||
|
||||
private final SearchService searchService;
|
||||
|
||||
@GetMapping("/search/search.do")
|
||||
|
||||
public String searchPageReturn () {
|
||||
return "biz/search/search" + TilesConstants.BASE;
|
||||
|
||||
}
|
||||
@PostMapping("/search/search-select.ajax")
|
||||
public ResponseEntity<?> list(@ModelAttribute SearchDto.Request.Search dto) {
|
||||
|
||||
dto.setTotalCount(0);
|
||||
dto.setPagingYn("N");
|
||||
|
||||
List<SearchDto.Response.cpMain> result = searchService.selectAllSearch(dto);
|
||||
|
||||
|
||||
return ApiResponseUtil.successWithGrid(result, dto);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,14 @@
|
||||
package go.kr.project.biz.search.mapper;
|
||||
|
||||
import go.kr.project.biz.minwon.dayanswer.model.DayAnswerDto;
|
||||
import go.kr.project.biz.search.model.SearchDto;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Mapper
|
||||
public interface SearchMapper {
|
||||
|
||||
List<SearchDto.Response.cpMain> selectAllSearch(SearchDto.Request.Search dto);
|
||||
|
||||
}
|
||||
@ -0,0 +1,41 @@
|
||||
package go.kr.project.biz.search.model;
|
||||
|
||||
import go.kr.project.system.common.model.PagingVO;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
public class SearchDto {
|
||||
|
||||
public static class Request {
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
public static class Search extends PagingVO {
|
||||
|
||||
|
||||
private String searchCondition;
|
||||
private String searchKeyword;
|
||||
private String searchStartDt;
|
||||
private String searchEndDt;
|
||||
private String worker;
|
||||
|
||||
}
|
||||
}
|
||||
public static class Response {
|
||||
@Getter
|
||||
@Setter
|
||||
public static class cpMain {
|
||||
|
||||
private String mmIngb;
|
||||
private String mmDate;
|
||||
private String mmCarno;
|
||||
private String omJno;
|
||||
private String omName;
|
||||
private String mmKeum2;
|
||||
private String mmImageGb;
|
||||
private String mmImageCnt;
|
||||
private String mmCarcheck;
|
||||
private String mmCode;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,9 @@
|
||||
package go.kr.project.biz.search.service;
|
||||
|
||||
import go.kr.project.biz.search.model.SearchDto;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface SearchService {
|
||||
List<SearchDto.Response.cpMain> selectAllSearch(SearchDto.Request.Search dto);
|
||||
}
|
||||
@ -0,0 +1,28 @@
|
||||
package go.kr.project.biz.search.service.impl;
|
||||
|
||||
import go.kr.project.biz.search.mapper.SearchMapper;
|
||||
import go.kr.project.biz.search.model.SearchDto;
|
||||
import go.kr.project.biz.search.service.SearchService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.egovframe.rte.fdl.cmmn.EgovAbstractServiceImpl;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
@Slf4j
|
||||
public class SearchServiceImpl extends EgovAbstractServiceImpl implements SearchService {
|
||||
|
||||
private final SearchMapper searchMapper;
|
||||
|
||||
@Override
|
||||
public List<SearchDto.Response.cpMain> selectAllSearch(SearchDto.Request.Search dto){
|
||||
|
||||
List<SearchDto.Response.cpMain> list = searchMapper.selectAllSearch(dto);
|
||||
|
||||
return list;
|
||||
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,17 @@
|
||||
package go.kr.project.biz.totalInfo.mapper;
|
||||
|
||||
import go.kr.project.biz.totalInfo.model.TotalInfoDto;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
@Mapper
|
||||
public interface TotalInfoMapper {
|
||||
|
||||
void updateCpMain(@Param("mmCode") String mmCode, TotalInfoDto.Request.Edit totalInfoDto);
|
||||
void updateCpAnswer(@Param("mmCode") String mmCode, TotalInfoDto.Request.Edit totalInfoDto);
|
||||
|
||||
int updateState(@Param("mmCode") String mmCode, @Param("state") String state);
|
||||
|
||||
int insertCpOwner(TotalInfoDto.Request.Edit totalInfoDto);
|
||||
|
||||
}
|
||||
@ -1,9 +1,13 @@
|
||||
package go.kr.project.biz.totalInfo.service;
|
||||
|
||||
import go.kr.project.biz.totalInfo.model.TotalInfoDto;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
public interface TotalInfoService {
|
||||
|
||||
TotalInfoDto.Response.TotalInfoResult findTotalInfo(String mmCode);
|
||||
|
||||
void updateTotalInfo(String mmCode, TotalInfoDto.Request.Edit totalInfoDto) throws Exception;
|
||||
|
||||
void updateState(String mmCode, String state);
|
||||
}
|
||||
|
||||
@ -0,0 +1,57 @@
|
||||
package go.kr.project.vo.code;
|
||||
|
||||
import lombok.Getter;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
@Getter
|
||||
public enum AsIngbEnum {
|
||||
// APP(110, "생활불편신고"), // 안전신문고(120)으로 통합됨.
|
||||
SMG_SEAL(120, "안전신문고"),
|
||||
POLICE(130, "경찰청"),
|
||||
SMG(183, "국민신문고"),
|
||||
ETC(181, "기타");
|
||||
|
||||
private int code;
|
||||
private String desc;
|
||||
|
||||
|
||||
AsIngbEnum(int code, String desc) {
|
||||
this.code = code;
|
||||
this.desc = desc;
|
||||
}
|
||||
|
||||
private static final Map<Integer, AsIngbEnum> CODE_MAP = new HashMap<>();
|
||||
private static final Map<String, AsIngbEnum> DESC_MAP = new HashMap<>();
|
||||
|
||||
static {
|
||||
for (AsIngbEnum e : values()) {
|
||||
CODE_MAP.put(e.code, e);
|
||||
DESC_MAP.put(e.desc, e);
|
||||
}
|
||||
}
|
||||
|
||||
// code → desc
|
||||
public static String getDescByCode(int code) {
|
||||
AsIngbEnum e = CODE_MAP.get(code);
|
||||
return e != null ? e.desc : null;
|
||||
}
|
||||
|
||||
// desc → code
|
||||
public static Integer getCodeByDesc(String desc) {
|
||||
AsIngbEnum e = DESC_MAP.get(desc);
|
||||
return e != null ? e.code : null;
|
||||
}
|
||||
|
||||
// code → enum
|
||||
public static AsIngbEnum fromCode(int code) {
|
||||
return CODE_MAP.get(code);
|
||||
}
|
||||
|
||||
// desc → enum
|
||||
public static AsIngbEnum fromDesc(String desc) {
|
||||
return DESC_MAP.get(desc);
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,52 @@
|
||||
package go.kr.project.vo.code;
|
||||
|
||||
import lombok.Getter;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
@Getter
|
||||
public enum AsPostCdEnum {
|
||||
|
||||
SMS("1", "문자메시지"),
|
||||
EMAIL("2", "이메일"),
|
||||
PHONE_CALL("3", "전화통화"),
|
||||
ETC("9", "기타");
|
||||
|
||||
private String code;
|
||||
private String desc;
|
||||
|
||||
|
||||
AsPostCdEnum(String code, String desc) {
|
||||
this.code = code;
|
||||
this.desc = desc;
|
||||
}
|
||||
|
||||
private static final Map<String, AsPostCdEnum> CODE_MAP = new HashMap<>();
|
||||
private static final Map<String, AsPostCdEnum> DESC_MAP = new HashMap<>();
|
||||
|
||||
static {
|
||||
for (AsPostCdEnum e : values()) {
|
||||
CODE_MAP.put(e.code, e);
|
||||
DESC_MAP.put(e.desc, e);
|
||||
}
|
||||
}
|
||||
|
||||
// code → desc
|
||||
public static String getDescByCode(String code) {
|
||||
AsPostCdEnum e = CODE_MAP.get(code);
|
||||
return e != null ? e.desc : null;
|
||||
}
|
||||
|
||||
// desc → code
|
||||
public static String getCodeByDesc(String desc) {
|
||||
AsPostCdEnum e = DESC_MAP.get(desc);
|
||||
return e != null ? e.code : null;
|
||||
}
|
||||
|
||||
// code → enum
|
||||
public static AsPostCdEnum fromCode(String code) {
|
||||
return CODE_MAP.get(code);
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,60 @@
|
||||
package go.kr.project.vo.code;
|
||||
|
||||
import lombok.Getter;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
@Getter
|
||||
public enum AsStateEnum {
|
||||
|
||||
INIT("0", "접수,초기상태"),
|
||||
WAIT("1", "답변대기"),
|
||||
TARGET_LEVY("2", "답변대상(부과)"),
|
||||
TARGET_GUIDE("3", "답변대상(계도)"),
|
||||
TARGET_DESTRUCTION_DOC("4", "답변대상(서손)"),
|
||||
FAIL("5", "답변처리 실패"),
|
||||
COMPLETE_LEVY("6", "처리완료(부과)"),
|
||||
COMPLETE_GUIDE("7", "처리완료(계도)"),
|
||||
COMPLETE_DESTRUCTION_DOC("8", "처리완료(서손)"),
|
||||
MANUAL("9", "처리완료(수기)"),
|
||||
NON_TARGET("A", "답변 미대상"),
|
||||
NON_TARGET_DESTRUCTION_DOC("B", "서손사유가 답변미대상");
|
||||
|
||||
|
||||
private String code;
|
||||
private String desc;
|
||||
|
||||
|
||||
AsStateEnum(String code, String desc) {
|
||||
this.code = code;
|
||||
this.desc = desc;
|
||||
}
|
||||
|
||||
private static final Map<String, AsStateEnum> CODE_MAP = new HashMap<>();
|
||||
private static final Map<String, AsStateEnum> DESC_MAP = new HashMap<>();
|
||||
|
||||
static {
|
||||
for (AsStateEnum e : values()) {
|
||||
CODE_MAP.put(e.code, e);
|
||||
DESC_MAP.put(e.desc, e);
|
||||
}
|
||||
}
|
||||
|
||||
// code → desc
|
||||
public static String getDescByCode(String code) {
|
||||
AsStateEnum e = CODE_MAP.get(code);
|
||||
return e != null ? e.desc : null;
|
||||
}
|
||||
|
||||
// desc → code
|
||||
public static String getCodeByDesc(String desc) {
|
||||
AsStateEnum e = DESC_MAP.get(desc);
|
||||
return e != null ? e.code : null;
|
||||
}
|
||||
|
||||
// code → enum
|
||||
public static AsStateEnum fromCode(String code) {
|
||||
return CODE_MAP.get(code);
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,55 @@
|
||||
package go.kr.project.vo.code;
|
||||
|
||||
import lombok.Getter;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
@Getter
|
||||
public enum CmCauseEnum {
|
||||
|
||||
BASIC_LIVING("1", "기초생활수급자"),
|
||||
SINGLE_PARENT("2", "한부모가족"),
|
||||
DISABILITY_VEHICLE("3", "장애인차량(감경)"),
|
||||
MINOR("4", "미성년자"),
|
||||
NATIONAL_MERIT("5", "국가유공자"),
|
||||
STATEMENT_REDUCTION("8", "의견진술감액"),
|
||||
ETC("9", "기타");
|
||||
|
||||
|
||||
private String code;
|
||||
private String desc;
|
||||
|
||||
|
||||
CmCauseEnum(String code, String desc) {
|
||||
this.code = code;
|
||||
this.desc = desc;
|
||||
}
|
||||
|
||||
private static final Map<String, CmCauseEnum> CODE_MAP = new HashMap<>();
|
||||
private static final Map<String, CmCauseEnum> DESC_MAP = new HashMap<>();
|
||||
|
||||
static {
|
||||
for (CmCauseEnum e : values()) {
|
||||
CODE_MAP.put(e.code, e);
|
||||
DESC_MAP.put(e.desc, e);
|
||||
}
|
||||
}
|
||||
|
||||
// code → desc
|
||||
public static String getDescByCode(String code) {
|
||||
CmCauseEnum e = CODE_MAP.get(code);
|
||||
return e != null ? e.desc : null;
|
||||
}
|
||||
|
||||
// desc → code
|
||||
public static String getCodeByDesc(String desc) {
|
||||
CmCauseEnum e = DESC_MAP.get(desc);
|
||||
return e != null ? e.code : null;
|
||||
}
|
||||
|
||||
// code → enum
|
||||
public static CmCauseEnum fromCode(String code) {
|
||||
return CODE_MAP.get(code);
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,4 @@
|
||||
package go.kr.project.vo.code;
|
||||
|
||||
public enum EpostDataCdEnum {
|
||||
}
|
||||
@ -0,0 +1,48 @@
|
||||
package go.kr.project.vo.code;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
public enum EpostDivKbEnum {
|
||||
|
||||
NORMAL("000", "일반"),
|
||||
REGISTERED("001", "등기"),
|
||||
SELECT_REGISTERED("201", "선택등기");
|
||||
|
||||
|
||||
private String code;
|
||||
private String desc;
|
||||
|
||||
|
||||
EpostDivKbEnum(String code, String desc) {
|
||||
this.code = code;
|
||||
this.desc = desc;
|
||||
}
|
||||
|
||||
private static final Map<String, EpostDivKbEnum> CODE_MAP = new HashMap<>();
|
||||
private static final Map<String, EpostDivKbEnum> DESC_MAP = new HashMap<>();
|
||||
|
||||
static {
|
||||
for (EpostDivKbEnum e : values()) {
|
||||
CODE_MAP.put(e.code, e);
|
||||
DESC_MAP.put(e.desc, e);
|
||||
}
|
||||
}
|
||||
|
||||
// code → desc
|
||||
public static String getDescByCode(String code) {
|
||||
EpostDivKbEnum e = CODE_MAP.get(code);
|
||||
return e != null ? e.desc : null;
|
||||
}
|
||||
|
||||
// desc → code
|
||||
public static String getCodeByDesc(String desc) {
|
||||
EpostDivKbEnum e = DESC_MAP.get(desc);
|
||||
return e != null ? e.code : null;
|
||||
}
|
||||
|
||||
// code → enum
|
||||
public static EpostDivKbEnum fromCode(String code) {
|
||||
return CODE_MAP.get(code);
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,4 @@
|
||||
package go.kr.project.vo.code;
|
||||
|
||||
public enum EpostNoticeJobCdEnum {
|
||||
}
|
||||
@ -0,0 +1,64 @@
|
||||
package go.kr.project.vo.code;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
public enum GhRecvReltCdEnum {
|
||||
|
||||
SELF("1", "본인"),
|
||||
SPOUSE("2", "배우자"),
|
||||
CHILD("3", "자녀"),
|
||||
PARENT("4", "부모"),
|
||||
SIBLING("5", "형제자매"),
|
||||
RELATIVE("6", "친지"),
|
||||
COWORKER("7", "회사동료"),
|
||||
AGENT("8", "대리수령인"),
|
||||
|
||||
ETC("9", "기타"),
|
||||
|
||||
GUARD("12", "경비원"),
|
||||
|
||||
UNMANNED_DELIVERY("13", "무인배달"),
|
||||
MAILBOX("14", "우편수취함"),
|
||||
ELECTRONIC_BOX("15", "전자수취함배달"),
|
||||
DESIGNATED_PLACE("16", "수령희망장소배달");
|
||||
|
||||
|
||||
|
||||
private String code;
|
||||
private String desc;
|
||||
|
||||
|
||||
GhRecvReltCdEnum(String code, String desc) {
|
||||
this.code = code;
|
||||
this.desc = desc;
|
||||
}
|
||||
|
||||
private static final Map<String, GhRecvReltCdEnum> CODE_MAP = new HashMap<>();
|
||||
private static final Map<String, GhRecvReltCdEnum> DESC_MAP = new HashMap<>();
|
||||
|
||||
static {
|
||||
for (GhRecvReltCdEnum e : values()) {
|
||||
CODE_MAP.put(e.code, e);
|
||||
DESC_MAP.put(e.desc, e);
|
||||
}
|
||||
}
|
||||
|
||||
// code → desc
|
||||
public static String getDescByCode(String code) {
|
||||
GhRecvReltCdEnum e = CODE_MAP.get(code);
|
||||
return e != null ? e.desc : null;
|
||||
}
|
||||
|
||||
// desc → code
|
||||
public static String getCodeByDesc(String desc) {
|
||||
GhRecvReltCdEnum e = DESC_MAP.get(desc);
|
||||
return e != null ? e.code : null;
|
||||
}
|
||||
|
||||
// code → enum
|
||||
public static GhRecvReltCdEnum fromCode(String code) {
|
||||
return CODE_MAP.get(code);
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,52 @@
|
||||
package go.kr.project.vo.code;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
public enum GhResultCdEnum {
|
||||
|
||||
DELIVERED("1", "배달완료"),
|
||||
IN_DELIVERY("2", "배달중"),
|
||||
FORWARDED_NEW_ADDRESS("3", "이사간곳발송"),
|
||||
RETURNED("4", "반송"),
|
||||
RETURN_FAILED("5", "반송불능"),
|
||||
CONTRACT_REGISTER_UPDATE("8", "계약등기 주소갱신");
|
||||
|
||||
|
||||
private String code;
|
||||
private String desc;
|
||||
|
||||
|
||||
GhResultCdEnum(String code, String desc) {
|
||||
this.code = code;
|
||||
this.desc = desc;
|
||||
}
|
||||
|
||||
private static final Map<String, GhResultCdEnum> CODE_MAP = new HashMap<>();
|
||||
private static final Map<String, GhResultCdEnum> DESC_MAP = new HashMap<>();
|
||||
|
||||
static {
|
||||
for (GhResultCdEnum e : values()) {
|
||||
CODE_MAP.put(e.code, e);
|
||||
DESC_MAP.put(e.desc, e);
|
||||
}
|
||||
}
|
||||
|
||||
// code → desc
|
||||
public static String getDescByCode(String code) {
|
||||
GhResultCdEnum e = CODE_MAP.get(code);
|
||||
return e != null ? e.desc : null;
|
||||
}
|
||||
|
||||
// desc → code
|
||||
public static String getCodeByDesc(String desc) {
|
||||
GhResultCdEnum e = DESC_MAP.get(desc);
|
||||
return e != null ? e.code : null;
|
||||
}
|
||||
|
||||
// code → enum
|
||||
public static GhResultCdEnum fromCode(String code) {
|
||||
return CODE_MAP.get(code);
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,4 @@
|
||||
package go.kr.project.vo.code;
|
||||
|
||||
public enum GhReturnCdEnum {
|
||||
}
|
||||
@ -0,0 +1,6 @@
|
||||
package go.kr.project.vo.code;
|
||||
|
||||
public enum GpPrtgbEnum {
|
||||
|
||||
|
||||
}
|
||||
@ -0,0 +1,57 @@
|
||||
package go.kr.project.vo.code;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
public enum GpStateEnum {
|
||||
|
||||
SEND_READY("0", "발송준비"),
|
||||
TAXELSE_LEVY("1", "세외수입부과"),
|
||||
VIRTUAL_ACCOUNT_GET("2", "가상계좌취득"),
|
||||
SEND("3", "발송"),
|
||||
SEND_CHECK("4", "발송확인"),
|
||||
SEND_RETURN("5", "반송"),
|
||||
PUBLIC_NOTICE("6", "공시송달"),
|
||||
INIT("7", "반송 후 주소재조회"),
|
||||
DISDOC_OR_LEVY_CANCEL("8", "서손 또는 부과취소"),
|
||||
LEVY_PAY("9", "수납")
|
||||
;
|
||||
|
||||
|
||||
|
||||
private String code;
|
||||
private String desc;
|
||||
|
||||
|
||||
GpStateEnum(String code, String desc) {
|
||||
this.code = code;
|
||||
this.desc = desc;
|
||||
}
|
||||
|
||||
private static final Map<String, GpStateEnum> CODE_MAP = new HashMap<>();
|
||||
private static final Map<String, GpStateEnum> DESC_MAP = new HashMap<>();
|
||||
|
||||
static {
|
||||
for (GpStateEnum e : values()) {
|
||||
CODE_MAP.put(e.code, e);
|
||||
DESC_MAP.put(e.desc, e);
|
||||
}
|
||||
}
|
||||
|
||||
// code → desc
|
||||
public static String getDescByCode(String code) {
|
||||
GpStateEnum e = CODE_MAP.get(code);
|
||||
return e != null ? e.desc : null;
|
||||
}
|
||||
|
||||
// desc → code
|
||||
public static String getCodeByDesc(String desc) {
|
||||
GpStateEnum e = DESC_MAP.get(desc);
|
||||
return e != null ? e.code : null;
|
||||
}
|
||||
|
||||
// code → enum
|
||||
public static GpStateEnum fromCode(String code) {
|
||||
return CODE_MAP.get(code);
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,56 @@
|
||||
package go.kr.project.vo.code;
|
||||
|
||||
import lombok.Getter;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
@Getter
|
||||
public enum MmDlgbEnum {
|
||||
|
||||
CONVERTED("0", "변환등록"),
|
||||
MANUAL("1", "수기등록"),
|
||||
AUTOMATIC("2", "자동등록"),
|
||||
RE_REGISTER("3", "재등록"),
|
||||
COPY("4", "복사등록"),
|
||||
TRANSFER_EXTERNAL("5", "관외 이첩자료 등록"),
|
||||
SMARTPHONE("6", "스마트폰단속");
|
||||
|
||||
|
||||
|
||||
private String code;
|
||||
private String desc;
|
||||
|
||||
|
||||
MmDlgbEnum(String code, String desc) {
|
||||
this.code = code;
|
||||
this.desc = desc;
|
||||
}
|
||||
|
||||
private static final Map<String, MmDlgbEnum> CODE_MAP = new HashMap<>();
|
||||
private static final Map<String, MmDlgbEnum> DESC_MAP = new HashMap<>();
|
||||
|
||||
static {
|
||||
for (MmDlgbEnum e : values()) {
|
||||
CODE_MAP.put(e.code, e);
|
||||
DESC_MAP.put(e.desc, e);
|
||||
}
|
||||
}
|
||||
|
||||
// code → desc
|
||||
public static String getDescByCode(String code) {
|
||||
MmDlgbEnum e = CODE_MAP.get(code);
|
||||
return e != null ? e.desc : null;
|
||||
}
|
||||
|
||||
// desc → code
|
||||
public static String getCodeByDesc(String desc) {
|
||||
MmDlgbEnum e = DESC_MAP.get(desc);
|
||||
return e != null ? e.code : null;
|
||||
}
|
||||
|
||||
// code → enum
|
||||
public static MmDlgbEnum fromCode(String code) {
|
||||
return CODE_MAP.get(code);
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,56 @@
|
||||
package go.kr.project.vo.code;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
public enum MmIngbEnum {
|
||||
|
||||
LIFE_INCONVENIENCE("1", "생활불편신고"),
|
||||
DISTRICT_OFFICE("2", "구청단속"),
|
||||
CITY_HALL("3", "시청단속"),
|
||||
LOCAL_ENFORCEMENT("6", "관내단속"),
|
||||
LOCAL_TO_OUTSIDE_TRANSFER("7", "관내단속>관외이첩"),
|
||||
OUTSIDE_TO_LOCAL_TRANSFER("8", "관외단속>관내이첩"),
|
||||
ETC("9", "기타"),
|
||||
OUTSIDE_TRANSFER_COMPLETE("10", "관외 이첩처리 완료"),
|
||||
INNO_LINK("11", "이노연계"),
|
||||
KNL_LINK("12", "KNL연계");
|
||||
|
||||
|
||||
|
||||
private String code;
|
||||
private String desc;
|
||||
|
||||
|
||||
MmIngbEnum(String code, String desc) {
|
||||
this.code = code;
|
||||
this.desc = desc;
|
||||
}
|
||||
|
||||
private static final Map<String, MmIngbEnum> CODE_MAP = new HashMap<>();
|
||||
private static final Map<String, MmIngbEnum> DESC_MAP = new HashMap<>();
|
||||
|
||||
static {
|
||||
for (MmIngbEnum e : values()) {
|
||||
CODE_MAP.put(e.code, e);
|
||||
DESC_MAP.put(e.desc, e);
|
||||
}
|
||||
}
|
||||
|
||||
// code → desc
|
||||
public static String getDescByCode(String code) {
|
||||
MmIngbEnum e = CODE_MAP.get(code);
|
||||
return e != null ? e.desc : null;
|
||||
}
|
||||
|
||||
// desc → code
|
||||
public static String getCodeByDesc(String desc) {
|
||||
MmIngbEnum e = DESC_MAP.get(desc);
|
||||
return e != null ? e.code : null;
|
||||
}
|
||||
|
||||
// code → enum
|
||||
public static MmIngbEnum fromCode(String code) {
|
||||
return CODE_MAP.get(code);
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,87 @@
|
||||
package go.kr.project.vo.code;
|
||||
|
||||
import lombok.Getter;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
@Getter
|
||||
public enum MmStateEnum {
|
||||
|
||||
HOLD("00", "보류자료"),
|
||||
INITIAL("01", "초기상태"),
|
||||
INITIAL_SMARTPHONE("02", "초기상태(스마트폰 단속)"),
|
||||
|
||||
RENTAL_TARGET("11", "렌터카-임차인 조회 대상"),
|
||||
|
||||
VEHICLE_CHECKED("21", "차적조회완료"),
|
||||
|
||||
STATEMENT_IN_PROGRESS("31", "의견진술중"),
|
||||
|
||||
PRE_NOTICE("42", "사전통보중"),
|
||||
|
||||
PRE_NOTICE_COMPLETE("51", "사전통보 완료"),
|
||||
DEMAND("52", "독촉"),
|
||||
SEIZURE_NOTICE("53", "압류예고"),
|
||||
SEIZURE_TARGET("54", "압류대상"),
|
||||
SEIZED("55", "압류"),
|
||||
|
||||
PRE_NOTICE_PAID("71", "사전통보수납"),
|
||||
IMPOSITION_PAID("72", "부과수납"),
|
||||
DEMAND_PAID("73", "독촉수납"),
|
||||
SEIZURE_NOTICE_PAID("74", "압류예정수납"),
|
||||
SEIZURE_PAID("75", "압류수납"),
|
||||
|
||||
STATUTE_LIMIT("76", "시효결손"),
|
||||
|
||||
IMPOSITION_CANCEL("80", "부과취소"),
|
||||
SEOCHON_PROCESS("81", "서촌처리"),
|
||||
STATEMENT_ACCEPTED("82", "의견진술수용"),
|
||||
|
||||
GUIDANCE("83", "계도"),
|
||||
GUIDANCE_PROCESSED("84", "계도처리 후 계도장출력 완료"),
|
||||
|
||||
TRANSFER_OTHER_AGENCY("85", "타기관이첩"),
|
||||
SUSPENSION_10_DAYS("86", "운행정지처분(10일)"),
|
||||
|
||||
SEOCHON_DELETE("91", "서손처리 삭제"),
|
||||
STATEMENT_DELETE("92", "의견진술 삭제"),
|
||||
|
||||
DELETED("99", "삭제자료");
|
||||
|
||||
private String code;
|
||||
private String desc;
|
||||
|
||||
|
||||
MmStateEnum(String code, String desc) {
|
||||
this.code = code;
|
||||
this.desc = desc;
|
||||
}
|
||||
|
||||
private static final Map<String, MmStateEnum> CODE_MAP = new HashMap<>();
|
||||
private static final Map<String, MmStateEnum> DESC_MAP = new HashMap<>();
|
||||
|
||||
static {
|
||||
for (MmStateEnum e : values()) {
|
||||
CODE_MAP.put(e.code, e);
|
||||
DESC_MAP.put(e.desc, e);
|
||||
}
|
||||
}
|
||||
|
||||
// code → desc
|
||||
public static String getDescByCode(String code) {
|
||||
MmStateEnum e = CODE_MAP.get(code);
|
||||
return e != null ? e.desc : null;
|
||||
}
|
||||
|
||||
// desc → code
|
||||
public static String getCodeByDesc(String desc) {
|
||||
MmStateEnum e = DESC_MAP.get(desc);
|
||||
return e != null ? e.code : null;
|
||||
}
|
||||
|
||||
// code → enum
|
||||
public static MmStateEnum fromCode(String code) {
|
||||
return CODE_MAP.get(code);
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,46 @@
|
||||
package go.kr.project.vo.code;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
public enum MrGbEnum {
|
||||
|
||||
RE_REG("3", "재등록"),
|
||||
COPY_REG("4", "복사등록");
|
||||
|
||||
private String code;
|
||||
private String desc;
|
||||
|
||||
|
||||
MrGbEnum(String code, String desc) {
|
||||
this.code = code;
|
||||
this.desc = desc;
|
||||
}
|
||||
|
||||
private static final Map<String, MrGbEnum> CODE_MAP = new HashMap<>();
|
||||
private static final Map<String, MrGbEnum> DESC_MAP = new HashMap<>();
|
||||
|
||||
static {
|
||||
for (MrGbEnum e : values()) {
|
||||
CODE_MAP.put(e.code, e);
|
||||
DESC_MAP.put(e.desc, e);
|
||||
}
|
||||
}
|
||||
|
||||
// code → desc
|
||||
public static String getDescByCode(String code) {
|
||||
MrGbEnum e = CODE_MAP.get(code);
|
||||
return e != null ? e.desc : null;
|
||||
}
|
||||
|
||||
// desc → code
|
||||
public static String getCodeByDesc(String desc) {
|
||||
MrGbEnum e = DESC_MAP.get(desc);
|
||||
return e != null ? e.code : null;
|
||||
}
|
||||
|
||||
// code → enum
|
||||
public static MrGbEnum fromCode(String code) {
|
||||
return CODE_MAP.get(code);
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,4 @@
|
||||
package go.kr.project.vo.code;
|
||||
|
||||
public enum OmIngbEnum {
|
||||
}
|
||||
@ -0,0 +1,49 @@
|
||||
package go.kr.project.vo.code;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
public enum OmNogbEnum {
|
||||
|
||||
INDIVIDUAL("11", "개인"),
|
||||
FOREIGNER("12", "외국인"),
|
||||
CORPORATION("13", "법인"),
|
||||
BUSINESS("14", "사업자"),
|
||||
ETC("15", "기타");
|
||||
|
||||
private String code;
|
||||
private String desc;
|
||||
|
||||
|
||||
OmNogbEnum(String code, String desc) {
|
||||
this.code = code;
|
||||
this.desc = desc;
|
||||
}
|
||||
|
||||
private static final Map<String, OmNogbEnum> CODE_MAP = new HashMap<>();
|
||||
private static final Map<String, OmNogbEnum> DESC_MAP = new HashMap<>();
|
||||
|
||||
static {
|
||||
for (OmNogbEnum e : values()) {
|
||||
CODE_MAP.put(e.code, e);
|
||||
DESC_MAP.put(e.desc, e);
|
||||
}
|
||||
}
|
||||
|
||||
// code → desc
|
||||
public static String getDescByCode(String code) {
|
||||
OmNogbEnum e = CODE_MAP.get(code);
|
||||
return e != null ? e.desc : null;
|
||||
}
|
||||
|
||||
// desc → code
|
||||
public static String getCodeByDesc(String desc) {
|
||||
OmNogbEnum e = DESC_MAP.get(desc);
|
||||
return e != null ? e.code : null;
|
||||
}
|
||||
|
||||
// code → enum
|
||||
public static OmNogbEnum fromCode(String code) {
|
||||
return CODE_MAP.get(code);
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,4 @@
|
||||
package go.kr.project.vo.code;
|
||||
|
||||
public enum RmIngbEnum {
|
||||
}
|
||||
@ -0,0 +1,4 @@
|
||||
package go.kr.project.vo.code;
|
||||
|
||||
public enum RmRetGbEnum {
|
||||
}
|
||||
@ -0,0 +1,4 @@
|
||||
package go.kr.project.vo.code;
|
||||
|
||||
public enum RmStateEnum {
|
||||
}
|
||||
@ -0,0 +1,50 @@
|
||||
package go.kr.project.vo.code;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
public enum SoStateEnum {
|
||||
|
||||
REQUEST("0", "요청"),
|
||||
NO_DATA("3", "자료없음"),
|
||||
COMPLETE("9", "완료"),
|
||||
RECALL_REQUEST("A", "회수요청"),
|
||||
RECALL_COMPLETE("B", "회수완료");
|
||||
|
||||
private String code;
|
||||
private String desc;
|
||||
|
||||
|
||||
SoStateEnum(String code, String desc) {
|
||||
this.code = code;
|
||||
this.desc = desc;
|
||||
}
|
||||
|
||||
private static final Map<String, SoStateEnum> CODE_MAP = new HashMap<>();
|
||||
private static final Map<String, SoStateEnum> DESC_MAP = new HashMap<>();
|
||||
|
||||
static {
|
||||
for (SoStateEnum e : values()) {
|
||||
CODE_MAP.put(e.code, e);
|
||||
DESC_MAP.put(e.desc, e);
|
||||
}
|
||||
}
|
||||
|
||||
// code → desc
|
||||
public static String getDescByCode(String code) {
|
||||
SoStateEnum e = CODE_MAP.get(code);
|
||||
return e != null ? e.desc : null;
|
||||
}
|
||||
|
||||
// desc → code
|
||||
public static String getCodeByDesc(String desc) {
|
||||
SoStateEnum e = DESC_MAP.get(desc);
|
||||
return e != null ? e.code : null;
|
||||
}
|
||||
|
||||
// code → enum
|
||||
public static SoStateEnum fromCode(String code) {
|
||||
return CODE_MAP.get(code);
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,4 @@
|
||||
package go.kr.project.vo.code;
|
||||
|
||||
public enum SuPayGbnEnum {
|
||||
}
|
||||
@ -0,0 +1,4 @@
|
||||
package go.kr.project.vo.code;
|
||||
|
||||
public enum SuStateEnum {
|
||||
}
|
||||
@ -0,0 +1,4 @@
|
||||
package go.kr.project.vo.code;
|
||||
|
||||
public enum TgBlgbEnum {
|
||||
}
|
||||
@ -0,0 +1,56 @@
|
||||
package go.kr.project.vo.code;
|
||||
|
||||
import lombok.Getter;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
@Getter
|
||||
public enum TgGbEnum {
|
||||
|
||||
INIT("0", "사전통보"),
|
||||
LEVY("1", "부과"),
|
||||
REMIND("2", "독촉"),
|
||||
SEIZURE_WARN("3", "압류예고"),
|
||||
SEIZURE_INFORM("4", "압류통지"),
|
||||
GUIDE("A", "계도");
|
||||
|
||||
|
||||
|
||||
private String code;
|
||||
private String desc;
|
||||
|
||||
|
||||
TgGbEnum(String code, String desc) {
|
||||
this.code = code;
|
||||
this.desc = desc;
|
||||
}
|
||||
|
||||
private static final Map<String, TgGbEnum> CODE_MAP = new HashMap<>();
|
||||
private static final Map<String, TgGbEnum> DESC_MAP = new HashMap<>();
|
||||
|
||||
static {
|
||||
for (TgGbEnum e : values()) {
|
||||
CODE_MAP.put(e.code, e);
|
||||
DESC_MAP.put(e.desc, e);
|
||||
}
|
||||
}
|
||||
|
||||
// code → desc
|
||||
public static String getDescByCode(String code) {
|
||||
TgGbEnum e = CODE_MAP.get(code);
|
||||
return e != null ? e.desc : null;
|
||||
}
|
||||
|
||||
// desc → code
|
||||
public static String getCodeByDesc(String desc) {
|
||||
TgGbEnum e = DESC_MAP.get(desc);
|
||||
return e != null ? e.code : null;
|
||||
}
|
||||
|
||||
// code → enum
|
||||
public static TgGbEnum fromCode(String code) {
|
||||
return CODE_MAP.get(code);
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,60 @@
|
||||
package go.kr.project.vo.code;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
public enum TgPostProcSttEnum {
|
||||
|
||||
|
||||
SEND_TARGET("01", "전송대상"),
|
||||
CANCEL("02", "발송취소"),
|
||||
SEND("03", "전송"),
|
||||
RECEIPT("05", "접수"),
|
||||
UNABLE_COUNT_OVR("21", "제작불가-매수초과"),
|
||||
UNABLE_FILE_ERR("22", "제작불가-파일오류"),
|
||||
UNABLE_ATTACHMENT1("23", "제작불가-첨부파일누락"),
|
||||
UNABLE_CANCEL_BEFORE_PROD("24", "제작불가-제작전취소"),
|
||||
UNABLE_RECEIVER_COUNT("61", "제작불가-수취인 건수 오류"),
|
||||
UNABLE_ATTACHMENT2("62", "제작불가-첨부파일 없음"),
|
||||
COMPLETE("80", "제작완료"),
|
||||
INIT("95", "배달완료");
|
||||
|
||||
|
||||
|
||||
private String code;
|
||||
private String desc;
|
||||
|
||||
|
||||
TgPostProcSttEnum(String code, String desc) {
|
||||
this.code = code;
|
||||
this.desc = desc;
|
||||
}
|
||||
|
||||
private static final Map<String, TgPostProcSttEnum> CODE_MAP = new HashMap<>();
|
||||
private static final Map<String, TgPostProcSttEnum> DESC_MAP = new HashMap<>();
|
||||
|
||||
static {
|
||||
for (TgPostProcSttEnum e : values()) {
|
||||
CODE_MAP.put(e.code, e);
|
||||
DESC_MAP.put(e.desc, e);
|
||||
}
|
||||
}
|
||||
|
||||
// code → desc
|
||||
public static String getDescByCode(String code) {
|
||||
TgPostProcSttEnum e = CODE_MAP.get(code);
|
||||
return e != null ? e.desc : null;
|
||||
}
|
||||
|
||||
// desc → code
|
||||
public static String getCodeByDesc(String desc) {
|
||||
TgPostProcSttEnum e = DESC_MAP.get(desc);
|
||||
return e != null ? e.code : null;
|
||||
}
|
||||
|
||||
// code → enum
|
||||
public static TgPostProcSttEnum fromCode(String code) {
|
||||
return CODE_MAP.get(code);
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,4 @@
|
||||
package go.kr.project.vo.code;
|
||||
|
||||
public enum TgPostSeCdEnum {
|
||||
}
|
||||
@ -0,0 +1,4 @@
|
||||
package go.kr.project.vo.code;
|
||||
|
||||
public enum UmJobGroupEnum {
|
||||
}
|
||||
@ -0,0 +1,4 @@
|
||||
package go.kr.project.vo.code;
|
||||
|
||||
public enum UmLevelcdEnum {
|
||||
}
|
||||
@ -0,0 +1,69 @@
|
||||
<?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="go.kr.project.biz.search.mapper.SearchMapper">
|
||||
|
||||
<select id="selectAllSearch"
|
||||
parameterType="go.kr.project.biz.search.model.SearchDto$Request$Search"
|
||||
resultType="go.kr.project.biz.search.model.SearchDto$Response$cpMain">
|
||||
SELECT M.MM_INGB,
|
||||
DATE_FORMAT(
|
||||
STR_TO_DATE(CONCAT(M.MM_DATE, M.MM_TIME), '%Y%m%d%H%i%s'),
|
||||
'%Y-%m-%d %H:%i:%s' ) AS mmDate,
|
||||
M.MM_CARNO,
|
||||
O.OM_JNO,
|
||||
O.OM_NAME,
|
||||
M.MM_KEUM2,
|
||||
M.MM_IMAGEGB,
|
||||
M.MM_IMAGECNT,
|
||||
M.MM_CARCHECK,
|
||||
M.MM_STATE,
|
||||
M.MM_CODE
|
||||
FROM CP_MAIN M
|
||||
LEFT OUTER JOIN CP_ANSWER A ON M.MM_CODE = AS_MMCODE
|
||||
LEFT OUTER JOIN CP_CANCEL C ON M.MM_CODE=CC_MMCODE
|
||||
JOIN CP_OWNER O ON M.MM_OMCODE=O.OM_CODE
|
||||
<where>
|
||||
<!-- 날짜 -->
|
||||
<if test="searchStartDt != null and searchStartDt != ''">
|
||||
AND as_jsdate >= REPLACE(#{searchStartDt}, '-', '')
|
||||
</if>
|
||||
<if test="searchEndDt != null and searchEndDt != ''">
|
||||
AND as_jsdate <= REPLACE(#{searchEndDt}, '-', '')
|
||||
</if>
|
||||
|
||||
<!-- 검색구분 + 검색어 -->
|
||||
<choose>
|
||||
<!-- 차량번호 -->
|
||||
<when test="searchCondition == 'title' and searchKeyword != null and searchKeyword != ''">
|
||||
AND MM_CARNO LIKE CONCAT('%', #{searchKeyword}, '%')
|
||||
</when>
|
||||
<!-- 소유자 -->
|
||||
<when test="searchCondition == 'contents' and searchKeyword != null and searchKeyword != ''">
|
||||
AND OM_NAME LIKE CONCAT('%', #{searchKeyword}, '%')
|
||||
</when>
|
||||
<!-- 주민번호 -->
|
||||
<when test="searchCondition == 'writer' and searchKeyword != null and searchKeyword != ''">
|
||||
AND OM_JNO LIKE CONCAT('%', #{searchKeyword}, '%')
|
||||
</when>
|
||||
<!-- 코드 -->
|
||||
<when test="searchCondition == 'code' and searchKeyword != null and searchKeyword != ''">
|
||||
AND MM_CODE LIKE CONCAT('%', #{searchKeyword}, '%')
|
||||
</when>
|
||||
<!-- 검색구분 없이 검색어만 있는 경우 -->
|
||||
<otherwise>
|
||||
<if test="searchKeyword != null and searchKeyword != ''">
|
||||
AND (
|
||||
MM_CARNO LIKE CONCAT('%', #{searchKeyword}, '%')
|
||||
OR OM_NAME LIKE CONCAT('%', #{searchKeyword}, '%')
|
||||
OR OM_JNO LIKE CONCAT('%', #{searchKeyword}, '%')
|
||||
OR MM_CODE LIKE CONCAT('%', #{searchKeyword}, '%')
|
||||
)
|
||||
</if>
|
||||
</otherwise>
|
||||
</choose>
|
||||
</where>
|
||||
ORDER BY AS_JSDATE DESC, AS_JSNO DESC
|
||||
</select>
|
||||
</mapper>
|
||||
@ -0,0 +1,91 @@
|
||||
<?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="go.kr.project.biz.totalInfo.mapper.TotalInfoMapper">
|
||||
|
||||
|
||||
<update id="updateCpMain"
|
||||
parameterType="go.kr.project.biz.totalInfo.model.TotalInfoDto$Request$Edit">
|
||||
|
||||
UPDATE cp_main
|
||||
SET
|
||||
MM_LAWGB = ${mmLawgb}
|
||||
MM_SGTEL = ${mmSgtel},
|
||||
MM_SGPOS = ${mmSgpos},
|
||||
MM_KEUM1 = ${mmKeum1}
|
||||
WHERE
|
||||
MM_CODE = #{mmCode}
|
||||
|
||||
</update>
|
||||
|
||||
|
||||
<update id="updateCpAnswer"
|
||||
parameterType="go.kr.project.biz.totalInfo.model.TotalInfoDto$Request$Edit">
|
||||
|
||||
UPDATE cp_answer
|
||||
SET
|
||||
AS_STATE = ${asState}
|
||||
WHERE
|
||||
MM_CODE = #{mmCode}
|
||||
|
||||
</update>
|
||||
|
||||
|
||||
<update id="updateState">
|
||||
|
||||
UPDATE cp_main
|
||||
SET
|
||||
MM_STATE = ${state}
|
||||
WHERE
|
||||
MM_CODE = #{mmCode}
|
||||
|
||||
</update>
|
||||
|
||||
<insert id="insertCpOwner"
|
||||
parameterType="go.kr.project.biz.totalInfo.model.TotalInfoDto$Request$Edit">
|
||||
|
||||
insert into cp_owner
|
||||
(
|
||||
OM_CODE,
|
||||
OM_SGGCODE,
|
||||
OM_NAME,
|
||||
OM_NO1,
|
||||
OM_JNO,
|
||||
OM_NOGB,
|
||||
OM_JUSO,
|
||||
OM_BUNJI,
|
||||
OM_ZIP,
|
||||
OM_DORO_CODE,
|
||||
OM_BLD_POSITION,
|
||||
OM_BLD_NO1,
|
||||
OM_BLD_NO2,
|
||||
OM_BLD_ADMNO,
|
||||
OM_INGB,
|
||||
OM_INDT,
|
||||
OM_BDCODE
|
||||
) VALUES (
|
||||
#{mmCode},
|
||||
#{omSggcode},
|
||||
#{omName},
|
||||
#{omNo1},
|
||||
#{omJno},
|
||||
#{omNogb},
|
||||
#{omJuso},
|
||||
#{omBunji},
|
||||
#{omZip},
|
||||
#{omDoroCode},
|
||||
#{omBldPosition},
|
||||
#{omBldNo1},
|
||||
#{omBldNo2},
|
||||
#{omBldAdmno},
|
||||
#{omIngb},
|
||||
#{omIndt},
|
||||
#{omBdcode}
|
||||
)
|
||||
</insert>
|
||||
|
||||
|
||||
|
||||
|
||||
</mapper>
|
||||
@ -0,0 +1,597 @@
|
||||
<%--
|
||||
Created by IntelliJ IDEA.
|
||||
User: kurt
|
||||
Date: 2025. 7. 31.
|
||||
Time: 오후 5:34
|
||||
To change this template use File | Settings | File Templates.
|
||||
--%>
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
|
||||
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
|
||||
|
||||
|
||||
<div class="main_body">
|
||||
|
||||
<div class="detail-card">
|
||||
<div class="card-header">
|
||||
<div class="title">민원 접수 초기자료 편집</div>
|
||||
<div class="actions">
|
||||
<span class="pill">Double Click 민원원본보기</span>
|
||||
<button type="button" class="close-btn">닫기 Esc</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 상단 네비/페이지 인디케이터 -->
|
||||
<div class="card-toolbar">
|
||||
<%-- 부모창에서 받아오는 리스트 배열 --%>
|
||||
<input type="hidden" id="mmCodes" />
|
||||
<%-- 부모창에서 받아오는 리스크 커서 --%>
|
||||
<input type="hidden" id="cursor" />
|
||||
<%-- 개별총정보 상태값 --%>
|
||||
<input type="hidden" id="infoState" value="init" />
|
||||
|
||||
<div class="page-indicator">
|
||||
<span id="cursorCnt">0</span>of <span id="total">0</span>
|
||||
</div>
|
||||
<div class="nav-group">
|
||||
<button type="button" class="nav-btn" name="navigate" data-act="first" id="first">◀◀</button>
|
||||
<button type="button" class="nav-btn" name="navigate" data-act="prev">◀</button>
|
||||
<button type="button" class="nav-btn" name="navigate" data-act="next">▶</button>
|
||||
<button type="button" class="nav-btn" name="navigate" data-act="last">▶▶</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="detail-body">
|
||||
<!-- 좌측 정보 -->
|
||||
<div class="left">
|
||||
<div class="section-title">위반 정보</div>
|
||||
<div class="subnote">등록구분/위반일시/위반내역 등</div>
|
||||
|
||||
<div class="form-grid">
|
||||
|
||||
<!-- 1줄: 등록구분 / 목록번호 -->
|
||||
<div class="form-row">
|
||||
<div class="field-group">
|
||||
<div class="lbl">등록구분</div>
|
||||
<div class="fld">
|
||||
<input type="text" name="cpMain" data-field="mmDlgb" id="mmDlgb" value="" readonly>
|
||||
</div>
|
||||
</div>
|
||||
<div class="field-group">
|
||||
<div class="lbl">목록번호</div>
|
||||
<div class="fld">
|
||||
<input type="text" name="cpMain" data-field="mmIngb" id="mmIngb" value="" readonly>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 2줄: 위반일자 / 위반시간 -->
|
||||
<div class="form-row">
|
||||
<div class="field-group">
|
||||
<div class="lbl">위반일자</div>
|
||||
<div class="fld">
|
||||
<input type="text" name="cpMain" data-field="mmDate" id="mmDate" value="" readonly>
|
||||
</div>
|
||||
</div>
|
||||
<div class="field-group">
|
||||
<div class="lbl">위반시간</div>
|
||||
<div class="fld">
|
||||
<input type="text" name="cpMain" data-field="mmLawgb" id="mmLawgb" value="" readonly>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 3줄: 위반내용 / 영상매체 -->
|
||||
<div class="form-row">
|
||||
<div class="field-group">
|
||||
<div class="lbl">위반내용</div>
|
||||
<div class="fld">
|
||||
<input type="text" name="cpMain" data-field="mmSgnm" id="mmSgnm" value="" readonly>
|
||||
</div>
|
||||
</div>
|
||||
<div class="field-group">
|
||||
<div class="lbl">영상매체</div>
|
||||
<div class="fld">
|
||||
<input type="text" name="cpAnswer" data-field="asCell" id="asCell" value="" readonly>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 4줄: 신고자 / 연락처 -->
|
||||
<div class="form-row">
|
||||
<div class="field-group">
|
||||
<div class="lbl">신고자</div>
|
||||
<div class="fld">
|
||||
<input type="text" name="cpMain" data-field="mmSgnm" id="mmSgnm" value="" readonly>
|
||||
</div>
|
||||
</div>
|
||||
<div class="field-group">
|
||||
<div class="lbl">연락처</div>
|
||||
<div class="fld">
|
||||
<input type="text" name="cpAnswer" data-field="asCell" id="asCell" value="" readonly>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 5줄: 담당자 / (빈칸) -->
|
||||
<div class="form-row">
|
||||
<div class="field-group">
|
||||
<div class="lbl">담당자</div>
|
||||
<div class="fld">
|
||||
<input type="text" name="cpMain" data-field="mmSgtel" id="mmSgtel" value="" readonly>
|
||||
</div>
|
||||
</div>
|
||||
<div class="field-group empty"></div>
|
||||
</div>
|
||||
|
||||
<!-- 6줄: 신고내용(textarea, 한 줄 전체) -->
|
||||
<div class="form-row block">
|
||||
<div class="field-group full">
|
||||
<div class="lbl">신고내용</div>
|
||||
<div class="fld">
|
||||
<textarea name="cpMain" data-field="mmSgcont" id="mmSgcont" value="" readonly></textarea>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 7줄: 위반장소 (한 줄 전체) -->
|
||||
<div class="form-row block">
|
||||
<div class="field-group full">
|
||||
<div class="lbl">위반장소</div>
|
||||
<div class="fld">
|
||||
<input type="text" data-field="" id="" value="" readonly>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 8줄: 시군구 / 법정동 -->
|
||||
<div class="form-row">
|
||||
<div class="field-group">
|
||||
<div class="lbl">시군구</div>
|
||||
<div class="fld">
|
||||
<input type="text" name="cpAnswer" data-field="asJsno" id="asJsno" value="" readonly>
|
||||
</div>
|
||||
</div>
|
||||
<div class="field-group">
|
||||
<div class="lbl">법정동</div>
|
||||
<div class="fld">
|
||||
<input type="text" name="cpAnswer" data-field="asJsno" id="asJsno" value="" readonly>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 9줄: 접수일 / 답변기한 -->
|
||||
<div class="form-row">
|
||||
<div class="field-group">
|
||||
<div class="lbl">접수일</div>
|
||||
<div class="fld">
|
||||
<input type="text" name="cpAnswer" data-field="asJsno" id="asJsno" value="" readonly>
|
||||
</div>
|
||||
</div>
|
||||
<div class="field-group">
|
||||
<div class="lbl">답변기한</div>
|
||||
<div class="fld">
|
||||
<input type="text" name="cpAnswer" data-field="asJsno" id="asJsno" value="" readonly>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 구분선 & 차량 정보 타이틀 -->
|
||||
<div class="form-divider"></div>
|
||||
<div class="section-title block">차량 정보</div>
|
||||
|
||||
<!-- 10줄: 차량번호 / (빈칸) -->
|
||||
<div class="form-row">
|
||||
<div class="field-group">
|
||||
<div class="lbl">차량번호</div>
|
||||
<div class="fld">
|
||||
<input type="text" name="cpAnswer" data-field="" id="" value="" readonly>
|
||||
</div>
|
||||
</div>
|
||||
<div class="field-group empty"></div>
|
||||
</div>
|
||||
|
||||
<!-- 11줄: 특기사항 (textarea, 한 줄 전체) -->
|
||||
<div class="form-row block">
|
||||
<div class="field-group full">
|
||||
<div class="lbl">특기사항</div>
|
||||
<div class="fld">
|
||||
<textarea name="cpMain" data-field="mmSgcont" id="mmSgcont" value="" readonly></textarea>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 12줄: 차량명 / 차량색상 -->
|
||||
<div class="form-row">
|
||||
<div class="field-group">
|
||||
<div class="lbl">차량명</div>
|
||||
<div class="fld">
|
||||
<input type="text" data-field="" value="" readonly>
|
||||
</div>
|
||||
</div>
|
||||
<div class="field-group">
|
||||
<div class="lbl">차량색상</div>
|
||||
<div class="fld">
|
||||
<input type="text" data-field="" value="" readonly>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 13줄: 연료구분 / (빈칸) -->
|
||||
<div class="form-row">
|
||||
<div class="field-group">
|
||||
<div class="lbl">연료구분</div>
|
||||
<div class="fld">
|
||||
<input type="text" data-field="" value="" readonly>
|
||||
</div>
|
||||
</div>
|
||||
<div class="field-group empty"></div>
|
||||
</div>
|
||||
|
||||
<!-- 14줄: 소유주 / 등록구분 -->
|
||||
<div class="form-row">
|
||||
<div class="field-group">
|
||||
<div class="lbl">소유주</div>
|
||||
<div class="fld">
|
||||
<input type="text" data-field="" value="" readonly>
|
||||
</div>
|
||||
</div>
|
||||
<div class="field-group">
|
||||
<div class="lbl">등록구분</div>
|
||||
<div class="fld">
|
||||
<input type="text" data-field="" value="" readonly>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 15줄: 주민번호 / 우편번호 -->
|
||||
<div class="form-row">
|
||||
<div class="field-group">
|
||||
<div class="lbl">주민번호</div>
|
||||
<div class="fld">
|
||||
<input type="text" data-field="" value="" readonly>
|
||||
</div>
|
||||
</div>
|
||||
<div class="field-group">
|
||||
<div class="lbl">우편번호</div>
|
||||
<div class="fld">
|
||||
<input type="text" data-field="" value="" readonly>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 16줄: 주소 (한 줄 전체) -->
|
||||
<div class="form-row block">
|
||||
<div class="field-group full">
|
||||
<div class="lbl">주소</div>
|
||||
<div class="fld">
|
||||
<input type="text" data-field="" value="" readonly>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 17줄: 번지 / 차대번호 -->
|
||||
<div class="form-row">
|
||||
<div class="field-group">
|
||||
<div class="lbl">번지</div>
|
||||
<div class="fld">
|
||||
<input type="text" data-field="" value="" readonly>
|
||||
</div>
|
||||
</div>
|
||||
<div class="field-group">
|
||||
<div class="lbl">차대번호</div>
|
||||
<div class="fld">
|
||||
<input type="text" data-field="" value="" readonly>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 18줄: 도로코드 / (빈칸) -->
|
||||
<div class="form-row">
|
||||
<div class="field-group">
|
||||
<div class="lbl">도로코드</div>
|
||||
<div class="fld">
|
||||
<input type="text" data-field="" value="" readonly>
|
||||
</div>
|
||||
</div>
|
||||
<div class="field-group empty"></div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 우측 사진/지도/프리뷰 -->
|
||||
<div class="right">
|
||||
<div class="section-title">사진</div>
|
||||
<div class="thumbs" id="photoThumbs">
|
||||
<%-- IMG area --%>
|
||||
</div>
|
||||
|
||||
<div class="mapbox">
|
||||
<img src="" alt="지도">
|
||||
</div>
|
||||
|
||||
<div class="preview" id="photoPreviewBox">
|
||||
<img id="photoPreview" src="${pageContext.request.contextPath}/static/img/sample-1.jpg" alt="미리보기">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="btn-area">
|
||||
<button type="button" class="btn btn-light" name="changeSt" id="non-target" value="81">미부과처리</button>
|
||||
<button type="button" class="btn btn-light" name="changeSt" id="non-target" value="">계도처리</button>
|
||||
<button type="button" class="btn btn-light" name="changeSt" id="non-target" value="">회수처리</button>
|
||||
<button type="button" class="btn btn-light" name="changeSt" id="non-target" value="">자료복사</button>
|
||||
<button type="button" class="btn btn-light" id="delay">처리보류</button>
|
||||
<button type="button" class="btn btn-light" id="delay">원본보기</button>
|
||||
<button type="button" class="btn btn-light" id="infoReadReturn">되돌리기</button>
|
||||
|
||||
<button type="button" class="btn btn-light" id="stateChange" hidden>처리상태 변경</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="statusbar">
|
||||
<div class="status-left" id="mmCode"></div>
|
||||
<div class="status-right">
|
||||
<span><span class="count-dot" id="photoCount">3</span> 사진</span>
|
||||
<label><input type="checkbox" id="hidePhoto"> 사진 안보이기</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="photoEditSection" style="display:none;">
|
||||
<jsp:include page="/WEB-INF/views/biz/totalInfo/totalInfo_photo_dialog.jsp" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- /Main body -->
|
||||
<%--<script src="https://code.jquery.com/jquery-3.7.1.min.js"></script>--%>
|
||||
<%--<script src="https://code.jquery.com/ui/1.13.2/jquery-ui.min.js"></script>--%>
|
||||
<script type="text/javascript">
|
||||
window.INIT_POP_API = {
|
||||
search: () => {
|
||||
console.log("Total Info Search!!!!")
|
||||
|
||||
const { cursor, mmCodes } = JSON.parse(localStorage.getItem("TOTAL_INFO_STATE"));
|
||||
|
||||
$.ajax({
|
||||
// PathVariable 형태로 url를 동적으로 쓰는방식이다.
|
||||
// 해당 방식 이외에 그냥 쿼리스트링으로 넘기는 방법도 있다.
|
||||
url: "/total/info/" + cursor + "/info.ajax",
|
||||
type: "GET",
|
||||
dataType: 'json',
|
||||
success: function(response) {
|
||||
|
||||
console.log(response.data)
|
||||
|
||||
|
||||
$("#mmIngb").val(response.data.cpMain.mmIngb);
|
||||
$("#mmDlgb").val(response.data.cpMain.mmDlgb);
|
||||
$("#mmLawgb").val(response.data.cpMain.mmLawgb);
|
||||
$("#mmKeum1").val(response.data.cpMain.mmKeum1);
|
||||
$("#mmKeum2").val(response.data.cpMain.mmKeum2);
|
||||
$("#mmSgcont").val(response.data.cpMain.mmSgcont);
|
||||
$("#mmSgnm").val(response.data.cpMain.mmSgnm);
|
||||
$("#mmSgtel").val(response.data.cpMain.mmSgtel);
|
||||
$("#mmDate").val(response.data.cpMain.mmDate);
|
||||
$("#asBbsNo").val(response.data.cpAnswer.asBbsNo);
|
||||
$("#asState").val(response.data.cpAnswer.asState);
|
||||
$("#asStateDt").val(response.data.cpAnswer.asStateDt);
|
||||
|
||||
$("#asCell").val(response.data.cpAnswer.asCell);
|
||||
$("#asJsno").val(response.data.cpAnswer.asJsno);
|
||||
$("#asJsdate").val(response.data.cpAnswer.asJsdate);
|
||||
|
||||
|
||||
$("#mmCode").text(response.data.cpMain.mmCode.substring(5).replace(/^(\d{4})(.*)$/, '$1-$2'))
|
||||
|
||||
// 이미지 태그 동적 추가
|
||||
|
||||
const mmCode = response.data.cpMain.mmCode;
|
||||
const imgPath = "${sessionScope.sessionVO.imgPath}";
|
||||
console.log(imgPath)
|
||||
const thumbContainer = $("#photoThumbs");
|
||||
|
||||
const imgList = ['A','B','C']; // 필요한 개수만큼
|
||||
thumbContainer.empty(); // 기존 내용 제거
|
||||
|
||||
imgList.forEach(num => {
|
||||
const img = `
|
||||
<div class="thumb">
|
||||
<img src="/images/\${mmCode}\${num}.jpg" alt="사진 ${num}" onerror="this.style.display='none'">
|
||||
</div>`
|
||||
;
|
||||
thumbContainer.append(img);
|
||||
});
|
||||
|
||||
|
||||
//네비게이터 커서 카운트
|
||||
$("#cursorCnt").text(mmCodes.indexOf(cursor) + 1);
|
||||
$("#total").text(mmCodes.length);
|
||||
|
||||
|
||||
// total info 초기상태
|
||||
$("#infoState").val("init").trigger("change");
|
||||
},
|
||||
error: function(xhr, status, error) {
|
||||
$("#result").text("조회 실패");
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
let fnBiz = {
|
||||
init: () => {
|
||||
// fnBiz.search();
|
||||
},
|
||||
|
||||
infoSave: () => {
|
||||
|
||||
const { cursor, mmCodes } = JSON.parse(localStorage.getItem("TOTAL_INFO_STATE"));
|
||||
const payload = fnBiz.collectByDataField();
|
||||
console.log("data-field payload:", payload);
|
||||
|
||||
$.ajax({
|
||||
url: "/total/info/" + cursor + "/info/edit.ajax",
|
||||
type: "POST",
|
||||
data: JSON.stringify(payload),
|
||||
contentType: "application/json",
|
||||
|
||||
success: function(response) {
|
||||
alert("수정완료.")
|
||||
},
|
||||
error: function(xhr, status, error) {
|
||||
$("#result").text("수정 실패");
|
||||
}
|
||||
});
|
||||
|
||||
},
|
||||
|
||||
changeState: (e) => {
|
||||
let state = e.target.value;
|
||||
const { cursor, mmCodes } = JSON.parse(localStorage.getItem("TOTAL_INFO_STATE"));
|
||||
|
||||
$.ajax({
|
||||
url: `/total/info/\${cursor}/\${state}/state.ajax`,
|
||||
type: "POST",
|
||||
contentType: "application/json",
|
||||
|
||||
success: function(response) {
|
||||
alert("완료.")
|
||||
},
|
||||
error: function(xhr, status, error) {
|
||||
$("#result").text("수정 실패");
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
btnSet: (infoState) => {
|
||||
|
||||
switch (infoState) {
|
||||
case "init":
|
||||
// $("#btn-area > button").prop("hidden", true);
|
||||
// $("#infoEdit").prop("hidden", false);
|
||||
// $("#infoDel").prop("hidden", false);
|
||||
// $("#delay").prop("hidden", false);
|
||||
// $("#buillPrint").prop("hidden", false);
|
||||
// $("#stateChange").prop("hidden", false);
|
||||
// $("#non-target").prop("hidden", false);
|
||||
|
||||
break;
|
||||
case "edit":
|
||||
// $("#btn-area > button").prop("hidden", true);
|
||||
// $("#infoSave").prop("hidden", false);
|
||||
// $("#infoReadReturn").prop("hidden", false);
|
||||
break;
|
||||
}
|
||||
|
||||
switch ($("#asState")) {
|
||||
case "":
|
||||
$("#destructionDocReReg").prop("hidden", false);
|
||||
}
|
||||
|
||||
},
|
||||
|
||||
collectByDataField: () => {
|
||||
const payload = {};
|
||||
$("[data-field]").each(function () {
|
||||
const key = $(this).data("field");
|
||||
const val = $(this).val();
|
||||
payload[key] = val;
|
||||
});
|
||||
return payload;
|
||||
},
|
||||
|
||||
eventListener: () => {
|
||||
/** 네비게이션 */
|
||||
$("button[name=navigate]").on("click", (e) => {
|
||||
let flag = $(e.currentTarget).data("act");
|
||||
let {cursor, mmCodes} = JSON.parse(localStorage.getItem("TOTAL_INFO_STATE"));
|
||||
if (!cursor || !mmCodes) return;
|
||||
|
||||
const idx = mmCodes.indexOf(cursor);
|
||||
let nextCursor = cursor;
|
||||
|
||||
switch (flag) {
|
||||
case "first":
|
||||
nextCursor = mmCodes[0];
|
||||
break;
|
||||
case "prev":
|
||||
nextCursor = mmCodes[Math.max(0, idx - 1)];
|
||||
break;
|
||||
case "next":
|
||||
nextCursor = mmCodes[Math.min(mmCodes.length - 1, idx + 1)];
|
||||
break;
|
||||
case "last":
|
||||
nextCursor = mmCodes[mmCodes.length - 1];
|
||||
break;
|
||||
}
|
||||
|
||||
// 스토리지 업데이트
|
||||
localStorage.setItem("TOTAL_INFO_STATE", JSON.stringify({ cursor: nextCursor, mmCodes: mmCodes }))
|
||||
//커서로 조회
|
||||
INIT_POP_API.search();
|
||||
});
|
||||
|
||||
/** 개별총정보 상태변경 트리거 */
|
||||
$("#infoState").on("change", () => {
|
||||
fnBiz.btnSet($("#infoState").val());
|
||||
})
|
||||
|
||||
/** 개별총정보 수정모드 진입*/
|
||||
$("#infoEdit").on("click", () => {
|
||||
$("input").prop("readonly", false);
|
||||
$("#infoState").val("edit").trigger("change");
|
||||
})
|
||||
/** 개별총정보 읽기모드 진입 */
|
||||
$("#infoReadReturn").on("click", () => {
|
||||
$("input").prop("readonly", true);
|
||||
INIT_POP_API.search();
|
||||
$("#infoState").val("init").trigger("change");
|
||||
})
|
||||
|
||||
/** 정보수정 */
|
||||
$("#infoSave").on("click", () => {
|
||||
|
||||
fnBiz.infoSave();
|
||||
|
||||
|
||||
|
||||
$("input").prop("readonly", true);
|
||||
INIT_POP_API.search();
|
||||
})
|
||||
|
||||
/** 상태값 변경 */
|
||||
$("button[name='changeSt']").on("click", (e) => {
|
||||
let flag = e.target.value;
|
||||
fnBiz.changeState(e, flag);
|
||||
})
|
||||
|
||||
/** 사진 더블클릭 → 원본 다이얼로그 */
|
||||
$("#photoThumbs").on("dblclick", "img", function () {
|
||||
const src = $(this).attr("src"); // 썸네일 경로
|
||||
$("#photoDialogImg").attr("src", src); // 같은 경로를 원본으로 사용 (원본/썸네일 분리돼 있으면 여기서 가공)
|
||||
|
||||
$("#photoDialog").dialog("open");
|
||||
});
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
$(function () {
|
||||
|
||||
$("#tabs").tabs();
|
||||
|
||||
INIT_POP_API.search();
|
||||
fnBiz.eventListener();
|
||||
|
||||
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
</script>
|
||||
@ -0,0 +1,264 @@
|
||||
<%--
|
||||
Created by IntelliJ IDEA.
|
||||
User: moong
|
||||
Date: 2025-11-20
|
||||
Time: 오전 10:07
|
||||
To change this template use File | Settings | File Templates.
|
||||
--%>
|
||||
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
|
||||
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
|
||||
|
||||
<div class="main_body">
|
||||
<section id="section8" class="main_bars">
|
||||
<div class="bgs-main">
|
||||
<section id="section5">
|
||||
<div class="sub_title"></div>
|
||||
<button type="button" onclick="location.href='<c:url value='/template/noticeSample/register.do'/>'" class="newbtn bg1">등록</button>
|
||||
</section>
|
||||
</div>
|
||||
</section>
|
||||
<div class="contants_body">
|
||||
<div class="gs_b_top">
|
||||
<ul class="lef">
|
||||
<li class="th">검색구분</li>
|
||||
<li>
|
||||
<select id="searchCondition" name="searchCondition" class="input">
|
||||
<option value="">검색구분</option>
|
||||
<option value="title" <c:if test="${paramVO.searchCondition eq 'title'}">selected</c:if>>차량번호</option>
|
||||
<option value="contents" <c:if test="${paramVO.searchCondition eq 'contents'}">selected</c:if>>소유자</option>
|
||||
<option value="writer" <c:if test="${paramVO.searchCondition eq 'writer'}">selected</c:if>>주민번호</option>
|
||||
<option value="code" <c:if test="${paramVO.searchCondition eq 'code'}">selected</c:if>>코드</option>
|
||||
</select>
|
||||
</li>
|
||||
<li class="th">검색어</li>
|
||||
<li><input type="text" id="searchKeyword" name="searchKeyword" class="input" value="${param.searchKeyword}"/></li>
|
||||
<li class="th">접수일자 지정</li>
|
||||
<li>
|
||||
<input type="text" id="searchStartDt" name="searchStartDt" class="input calender datepicker" value="${param.searchStartDt}" /> ~
|
||||
<input type="text" id="searchEndDt" name="searchEndDt" class="input calender datepicker" value="${param.searchEndDt}" />
|
||||
</li>
|
||||
<li>
|
||||
<button type="button" id="search_btn" class="newbtnss bg1">검색</button>
|
||||
</li>
|
||||
</ul>
|
||||
<ul class="rig2">
|
||||
<li>
|
||||
<select id="perPageSelect" class="input">
|
||||
<option value="10" <c:if test="${param.perPage eq '10'}">selected</c:if>>페이지당 10</option>
|
||||
<option value="30" <c:if test="${empty param.perPage or param.perPage eq '30'}">selected</c:if>>페이지당 30</option>
|
||||
<option value="100" <c:if test="${param.perPage eq '100'}">selected</c:if>>페이지당 100</option>
|
||||
</select>
|
||||
<span class="page_number"><span id="currentPage"></span><span class="bar">/</span><sapn id="totalPages"></sapn> Pages</span>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="gs_booking">
|
||||
<div class="row">
|
||||
<div class="col-sm-12">
|
||||
<div class="box_column">
|
||||
<div class="containers">
|
||||
<div id="grid"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
|
||||
let INIT_POPUP = null;
|
||||
let SEARCH_COND = {};
|
||||
let GRID = null;
|
||||
|
||||
// 검색조건 세팅
|
||||
let setSearchCond = function () {
|
||||
let searchCondition = $.trim(nvl($("#searchCondition").val(), ""));
|
||||
let searchKeyword = $.trim(nvl($("#searchKeyword").val(), ""));
|
||||
let searchUseYn = $.trim(nvl($("#searchUseYn").val(), ""));
|
||||
let searchStartDt = $.trim(nvl($("#searchStartDt").val(), ""));
|
||||
let searchEndDt = $.trim(nvl($("#searchEndDt").val(), ""));
|
||||
|
||||
SEARCH_COND.searchCondition = searchCondition;
|
||||
SEARCH_COND.searchKeyword = searchKeyword;
|
||||
SEARCH_COND.searchUseYn = searchUseYn;
|
||||
SEARCH_COND.searchStartDt = searchStartDt;
|
||||
SEARCH_COND.searchEndDt = searchEndDt;
|
||||
|
||||
};
|
||||
|
||||
const fnBiz = {
|
||||
|
||||
init: () => {
|
||||
initGrid();
|
||||
},
|
||||
|
||||
eventListener: () => {
|
||||
|
||||
// 엑셀 다운로드
|
||||
$('#btnExcel').on('click', function () {
|
||||
const params = $.param({
|
||||
searchCondition: $('#searchCondition').val(),
|
||||
searchKeyword: $('#searchKeyword').val(),
|
||||
searchStartDt: $('#searchStartDt').val(),
|
||||
searchEndDt: $('#searchEndDt').val()
|
||||
});
|
||||
|
||||
const url = '${pageContext.request.contextPath}/minwon/dayanswer/dayanswer-excel.do?' + params;
|
||||
window.location.href = url;
|
||||
});
|
||||
|
||||
// 검색 버튼
|
||||
$('#search_btn').on('click', function () {
|
||||
let startDate = $("#searchStartDt").val();
|
||||
let endDate = $("#searchEndDt").val();
|
||||
|
||||
if ((startDate && !endDate) || (!startDate && endDate)) {
|
||||
alert("등록일 검색 시 시작일과 종료일을 모두 입력해주세요.");
|
||||
return;
|
||||
}
|
||||
if (startDate && endDate) {
|
||||
if (!isDate(startDate) || !isDate(endDate)) {
|
||||
alert("유효한 날짜 형식이 아닙니다. (YYYY-MM-DD)");
|
||||
return;
|
||||
}
|
||||
let startDateObj = new Date(startDate);
|
||||
let endDateObj = new Date(endDate);
|
||||
if (startDateObj > endDateObj) {
|
||||
alert("시작일은 종료일보다 이후일 수 없습니다.");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
$("#page").val(1);
|
||||
GRID.readData(1);
|
||||
});
|
||||
|
||||
// 검색어 엔터
|
||||
$('#searchKeyword').on('keypress', function (e) {
|
||||
if (e.which === 13) {
|
||||
e.preventDefault();
|
||||
$('#search_btn').trigger('click');
|
||||
}
|
||||
});
|
||||
|
||||
// perPage 변경 이벤트 추가
|
||||
$('#perPageSelect').on('change', () => {
|
||||
const pagination = TuiGrid.instance.getPagination();
|
||||
if (!pagination) return;
|
||||
|
||||
pagination.setItemsPerPage($('#perPageSelect').val());
|
||||
pagination.reset(TuiGrid.instance.getRowCount());
|
||||
pagination.movePageTo(1);
|
||||
});
|
||||
|
||||
// 상태 탭 클릭
|
||||
$('.state-tabs li').on('click', function () {
|
||||
$('.state-tabs li').removeClass('on');
|
||||
$(this).addClass('on');
|
||||
|
||||
const state = $(this).data('state') || '';
|
||||
$('#tabState').val(state);
|
||||
|
||||
SEARCH_COND = {};
|
||||
GRID.readData(1);
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
/** tui-grid Set */
|
||||
const initGrid = () => {
|
||||
|
||||
const gridColumns = [
|
||||
{ header: '자료출처', name: 'mmIngb', width: 150, align: 'center' },
|
||||
{ header: '접수(위반)일시', name: 'mmDate', width: 150, align: 'center' },
|
||||
{ header: '차량번호', name: 'mmCarno', width: 150, align: 'center' },
|
||||
{ header: '주민번호', name: 'omJno', width: 150, align: 'center' },
|
||||
{ header: '소유자', name: 'omName', width: 150, align: 'center' },
|
||||
{ header: '잔액', name: 'mmKeum2', width: 150, align: 'center' },
|
||||
{ header: '영상매체', name: 'mmImageGb', width: 150, align: 'center' },
|
||||
{ header: '사진', name: 'mmImageCnt', width: 150, align: 'center' },
|
||||
{ header: '차량확인', name: 'mmCarcheck', width: 150, align: 'center' },
|
||||
{ header: '처리상태', name: 'mmState', width: 150, align: 'center' },
|
||||
{ header: 'mmCode', name: 'mmCode', sortable: true, width: 150, align: 'center', hidden: true}
|
||||
];
|
||||
|
||||
const gridDatasource = {
|
||||
api: {
|
||||
readData: {
|
||||
url: '<c:url value="/search/search-select.ajax"/>',
|
||||
method: 'POST',
|
||||
contentType: 'application/x-www-form-urlencoded',
|
||||
processData: true
|
||||
}
|
||||
},
|
||||
initialRequest: false, // 직접 readData(1) 호출할 거라 false
|
||||
serializer: function (params) {
|
||||
setSearchCond();
|
||||
SEARCH_COND.perPage = params.perPage;
|
||||
SEARCH_COND.page = params.page;
|
||||
|
||||
return $.param(SEARCH_COND);
|
||||
}
|
||||
};
|
||||
|
||||
const perPage = parseInt($('#perPageSelect').val() || 10, 10);
|
||||
|
||||
const gridOptions = {
|
||||
el: 'grid',
|
||||
rowHeaders: ['checkbox'],
|
||||
columns: gridColumns,
|
||||
noData: "처리 할 초기자료가 없습니다.",
|
||||
pageOptions: {
|
||||
useClient: false,
|
||||
perPage: perPage
|
||||
}
|
||||
};
|
||||
|
||||
// 실제 GRID 생성
|
||||
GRID = TuiGrid.of(gridOptions, gridDatasource, (res) => {
|
||||
// 서버 응답 후 페이지 정보 세팅
|
||||
const data = res.data || {};
|
||||
if (data.pagination) {
|
||||
$("#currentPage").text(data.pagination.page || '');
|
||||
$("#totalPages").text(data.pagination.totalPages || '');
|
||||
}
|
||||
|
||||
// 더블 클릭 이벤트
|
||||
GRID.on("dblclick", (e) => {
|
||||
var popUrl = '/minwon/init/init_popup.do';
|
||||
var popTitle = "initPopup";
|
||||
var popOption = "width=1400px, height=900px, resizable=yes, scrollbars=yes, location=no, top=100px, left=100px";
|
||||
|
||||
// 1) localStorage에 저장
|
||||
console.log(e)
|
||||
|
||||
let cursor = e.instance.getValue(e.rowKey, 'mmCode');
|
||||
let mmCodes = e.instance.getData().map(row => row.mmCode);
|
||||
|
||||
console.log(cursor);
|
||||
|
||||
const state = { cursor, mmCodes, savedAt: Date.now() };
|
||||
localStorage.setItem('TOTAL_INFO_STATE', JSON.stringify(state));
|
||||
|
||||
// 2) 팝업이 없거나 닫혀 있으면 새로 열기
|
||||
if (!INIT_POPUP || INIT_POPUP.closed) {
|
||||
INIT_POPUP = window.open(popUrl, popTitle, popOption);
|
||||
} else {
|
||||
// 이미 떠 있으면 새로 안 만들고, 그 창에 포커스만 줌
|
||||
INIT_POPUP.focus();
|
||||
INIT_POPUP.INIT_POP_API.search();
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
// 최초 1페이지 조회
|
||||
GRID.readData(1);
|
||||
};
|
||||
|
||||
// 레디펑션
|
||||
$(function () {
|
||||
fnBiz.init();
|
||||
fnBiz.eventListener();
|
||||
});
|
||||
|
||||
</script>
|
||||
|
||||
@ -0,0 +1,187 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
|
||||
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
|
||||
<!-- TOAST UI 이미지 에디터 CSS -->
|
||||
<link rel="stylesheet" href="<c:url value='/plugins/tui-color-picker/tui-color-picker.min.css' />" />
|
||||
<link rel="stylesheet" href="<c:url value='/plugins/tui-image-editor/tui-image-editor.css' />" />
|
||||
|
||||
<!-- 라이브러리 순서대로 로드 -->
|
||||
<script src="<c:url value='/plugins/fabric.js/fabric.min.js' />"></script>
|
||||
<script src="<c:url value='/plugins/tui-color-picker/tui-color-picker.min.js' />"></script>
|
||||
<script src="<c:url value='/plugins/tui-image-editor/tui-image-editor.min.js' />"></script>
|
||||
|
||||
|
||||
<link rel="stylesheet" href="<c:url value='/xit/xit-imageModify.css' />" />
|
||||
|
||||
|
||||
<div id="photoDialog" style="display:none;">
|
||||
|
||||
<section id="section8" class="main_bars">
|
||||
<div class="bgs-main">
|
||||
<section id="section5">
|
||||
<div class="sub_title">이미지 편집 (TOAST UI)</div>
|
||||
</section>
|
||||
</div>
|
||||
</section>
|
||||
<%-- <div class="contants_body">--%>
|
||||
<%-- <div class="gs_booking">--%>
|
||||
<%-- <div class="row">--%>
|
||||
<%-- <div class="col-sm-12">--%>
|
||||
<%-- <div class="box_column">--%>
|
||||
<%-- <!-- 이미지 에디터 컨테이너 -->--%>
|
||||
<%-- <div class="tui-image-editor-warapper" style="width: 100%; height: 700px;">--%>
|
||||
<%-- <div id="tui-image-editor"></div>--%>
|
||||
<%-- </div>--%>
|
||||
<%-- </div>--%>
|
||||
<%-- </div>--%>
|
||||
<%-- </div>--%>
|
||||
<%-- </div>--%>
|
||||
<%-- </div>--%>
|
||||
|
||||
<!-- 🔹 보기 모드 -->
|
||||
<div id="photoViewMode">
|
||||
<img id="photoDialogImg"
|
||||
src=""
|
||||
alt="사진 보기"
|
||||
style="max-width:100%; height:auto; display:block; margin:0 auto;">
|
||||
|
||||
<div style="text-align:right; margin-top:8px;">
|
||||
<button type="button" id="btnPhotoEdit" class="btn btn-light">사진 편집</button>
|
||||
<button type="button" id="btnPhotoClose" class="btn btn-light">닫기</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 🔹 편집 모드 -->
|
||||
<div id="photoEditMode" style="display:none;">
|
||||
<div class="edit-canvas-wrap">
|
||||
<!-- 나중에 cropperjs 붙일 이미지 or canvas -->
|
||||
<img id="photoEditImg"
|
||||
src=""
|
||||
alt="편집 대상"
|
||||
style="max-width:100%; height:auto; display:block; margin:0 auto;">
|
||||
</div>
|
||||
|
||||
<div class="edit-toolbar" style="text-align:right; margin-top:8px;">
|
||||
<!-- 여기부터는 예시 버튼들. 나중에 기능 붙이면 됨 -->
|
||||
<button type="button" id="btnEditRotate" class="btn btn-light">회전</button>
|
||||
<button type="button" id="btnEditApply" class="btn btn-light">적용</button>
|
||||
<button type="button" id="btnEditCancel" class="btn btn-light">취소</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script type="text/javascript">
|
||||
|
||||
let photoDialogFn = {
|
||||
photoMode: "view", // "view" | "edit"
|
||||
|
||||
setPhotoMode: (mode) => {
|
||||
photoDialogFn.photoMode = mode;
|
||||
|
||||
if (mode === "view") {
|
||||
$("#photoViewMode").show();
|
||||
$("#photoEditMode").hide();
|
||||
} else if (mode === "edit") {
|
||||
$("#photoViewMode").hide();
|
||||
$("#photoEditMode").show();
|
||||
}
|
||||
},
|
||||
|
||||
init: () => {
|
||||
// ...
|
||||
},
|
||||
|
||||
btnSet: (infoState) => {
|
||||
// ...
|
||||
},
|
||||
|
||||
eventListener: () => {
|
||||
|
||||
|
||||
/** 🔹 썸네일 더블클릭 → 보기 모드로 다이얼로그 오픈 */
|
||||
$("#photoThumbs").on("dblclick", "img", function () {
|
||||
const src = $(this).attr("src");
|
||||
|
||||
// 보기/편집 둘 다 같은 src를 기본으로 사용
|
||||
$("#photoDialogImg").attr("src", src);
|
||||
$("#photoEditImg").attr("src", src);
|
||||
|
||||
photoDialogFn.setPhotoMode("view");
|
||||
$("#photoDialog").dialog("open");
|
||||
});
|
||||
|
||||
/** 🔹 보기 모드에서 "사진 편집" 버튼 */
|
||||
$("#btnPhotoEdit").on("click", () => {
|
||||
photoDialogFn.setPhotoMode("edit");
|
||||
|
||||
// 여기서 cropperjs 또는 편집 초기화 로직 들어가면 됨
|
||||
// ex)
|
||||
// const image = document.getElementById("photoEditImg");
|
||||
// if (!fnBiz._cropper) {
|
||||
// fnBiz._cropper = new Cropper(image, {...});
|
||||
// }
|
||||
});
|
||||
|
||||
/** 🔹 보기 모드에서 "닫기" 버튼 */
|
||||
$("#btnPhotoClose").on("click", () => {
|
||||
$("#photoDialog").dialog("close");
|
||||
});
|
||||
|
||||
/** 🔹 편집 모드 "취소" → 다시 보기 모드로 */
|
||||
$("#btnEditCancel").on("click", () => {
|
||||
// 편집 취소 시, 보기 모드로 되돌리기
|
||||
photoDialogFn.setPhotoMode("view");
|
||||
// 필요하면 cropper 리셋/삭제
|
||||
// if (fnBiz._cropper) {
|
||||
// fnBiz._cropper.destroy();
|
||||
// fnBiz._cropper = null;
|
||||
// }
|
||||
});
|
||||
|
||||
/** 🔹 편집 모드 "적용" */
|
||||
$("#btnEditApply").on("click", () => {
|
||||
// 여기서 편집 적용 → 서버 저장 or preview 반영 등
|
||||
// 예: cropper.getCroppedCanvas().toDataURL() 등
|
||||
|
||||
// 일단은 그냥 보기 모드로만 전환
|
||||
photoDialogFn.setPhotoMode("view");
|
||||
});
|
||||
|
||||
/** 🔹 편집 모드 "회전" (예시) */
|
||||
$("#btnEditRotate").on("click", () => {
|
||||
// 나중에 cropper 붙이면:
|
||||
// if (photoDialogFn._cropper) {
|
||||
// photoDialogFn._cropper.rotate(90);
|
||||
// }
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
$(function () {
|
||||
|
||||
|
||||
$("#photoDialog").dialog({
|
||||
autoOpen: false,
|
||||
modal: true,
|
||||
resizable: true,
|
||||
// width: "auto",
|
||||
width: 1000,
|
||||
maxHeight: 800,
|
||||
show: { effect: "slide", direction: "right", duration: 200 },
|
||||
hide: { effect: "slide", direction: "right", duration: 200 },
|
||||
title: "사진 보기",
|
||||
open: function () {
|
||||
// 다이얼로그 내용 스크롤 맨 위로
|
||||
const $content = $(this); // .ui-dialog-content
|
||||
$content.scrollTop(0);
|
||||
$(this).dialog("widget").focus();
|
||||
|
||||
// 혹시 부모 컨테이너에 스크롤이 잡히는 경우까지 대비
|
||||
const $wrapper = $content.closest(".ui-dialog");
|
||||
$wrapper.scrollTop(0);
|
||||
$(this).dialog("widget").focus();
|
||||
}
|
||||
});
|
||||
|
||||
})
|
||||
|
||||
</script>
|
||||
@ -0,0 +1,16 @@
|
||||
<%--
|
||||
Created by IntelliJ IDEA.
|
||||
User: kurt
|
||||
Date: 2025. 11. 14.
|
||||
Time: 오후 4:11
|
||||
To change this template use File | Settings | File Templates.
|
||||
--%>
|
||||
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
|
||||
<html>
|
||||
<head>
|
||||
<title>Title</title>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@ -0,0 +1,71 @@
|
||||
@charset "utf-8";
|
||||
|
||||
|
||||
|
||||
tui-grid-content-area {border-radius: 10px;}
|
||||
|
||||
/* selected row */
|
||||
table.tui-grid-table tr.tui-grid-cell-current-row > td{
|
||||
background-color: rgba(199, 235, 235, 1);
|
||||
}
|
||||
|
||||
table.tui-grid-table tr.tui-grid-cell-current-row > td:focus{
|
||||
outline: none;
|
||||
}
|
||||
|
||||
|
||||
/* font size */
|
||||
table.tui-grid-table th{
|
||||
border-color: #fff;
|
||||
font-size: 14px;
|
||||
font-family: 'notokr-bold';
|
||||
}
|
||||
table.tui-grid-table td div{
|
||||
font-size: 0.80rem;
|
||||
}
|
||||
|
||||
|
||||
/* header color */
|
||||
table.tui-grid-table th.tui-grid-cell-header, table.tui-grid-table th.tui-grid-cell-row-header{
|
||||
background-color: #f2f4ff;
|
||||
border-right: 1px solid #fff;
|
||||
/*border-top: 2px solid #d0d0d0;*/
|
||||
font-size: 14px;
|
||||
font-weight: bold;
|
||||
}
|
||||
.tui-grid-scrollbar-right-top {background-color: #f2f4ff;}
|
||||
|
||||
.tui-grid-body-area {margin-right: 3px;}
|
||||
.tui-grid-scrollbar-y-outer-border {background-color: unset !important;}
|
||||
.tui-grid-scrollbar-right-bottom { border-bottom-right-radius: 10px;}
|
||||
/* grid cell */
|
||||
/* table.tui-grid-table td.tui-grid-cell div.tui-grid-cell-content{ */
|
||||
/* overflow: auto; */
|
||||
/* } */
|
||||
table.tui-grid-table td.tui-grid-cell-editable > div.tui-grid-cell-content{
|
||||
/* border: 1px outset; */
|
||||
cursor: pointer;
|
||||
|
||||
}
|
||||
|
||||
/* summary영역 수정 */
|
||||
.tui-grid-summary-area .tui-grid-cell {
|
||||
text-align: right;
|
||||
font-size: 11px;
|
||||
padding-right: 5px;
|
||||
background-color: rgba(238, 238, 238, 1);
|
||||
border: 1px solid white;
|
||||
}
|
||||
|
||||
.tui-grid-table tr {
|
||||
border-bottom: 1px solid #eee;
|
||||
}
|
||||
|
||||
/* "CustomButtonRenderer" print cell .. */
|
||||
table.tui-grid-table tr > td > span > p {
|
||||
color: #0000ee;
|
||||
cursor: pointer;
|
||||
padding-bottom: 1px;
|
||||
border-bottom: solid 1px;
|
||||
padding-left: 10px;
|
||||
}
|
||||
@ -0,0 +1,698 @@
|
||||
const Grid = tui.Grid;
|
||||
|
||||
const customTheme = {
|
||||
selection: {
|
||||
background: '#4daaf9',
|
||||
border: '#004082'
|
||||
},
|
||||
scrollbar: {
|
||||
background: '#f5f5f5',
|
||||
thumb: '#d9d9d9',
|
||||
active: '#c1c1c1'
|
||||
},
|
||||
row: {
|
||||
even: {
|
||||
// background: '#f2f4ff'
|
||||
background: '#fff'
|
||||
},
|
||||
hover: {
|
||||
background: '#ccc'
|
||||
}
|
||||
},
|
||||
cell: {
|
||||
normal: {
|
||||
background: '#fbfbfb',
|
||||
border: '#e0e0e0',
|
||||
showVerticalBorder: false
|
||||
},
|
||||
header: {
|
||||
background: '#f2f4ff',
|
||||
// border: '#ccc',
|
||||
text:'#09097a',
|
||||
showVerticalBorder: false
|
||||
},
|
||||
rowHeader: {
|
||||
// border: '#ccc',
|
||||
showVerticalBorder: false
|
||||
},
|
||||
editable: {
|
||||
background: '#fbfbfb'
|
||||
},
|
||||
selectedHeader: {
|
||||
background: '#d8d8d8'
|
||||
},
|
||||
focused: {
|
||||
border: '#418ed4'
|
||||
},
|
||||
disabled: {
|
||||
text: '#b0b0b0'
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class CustomRowNumberRenderer {
|
||||
constructor(props) {
|
||||
const el = document.createElement('span');
|
||||
|
||||
this.el = el;
|
||||
this.el.innerHTML = this.getRowNum(props);
|
||||
}
|
||||
|
||||
getRowNum(props) {
|
||||
// paging 처리시 : scroll인 경우 제외
|
||||
const currentPage = props.grid.getPagination()?._currentPage;
|
||||
// You can change the number `5` as your perPage option.
|
||||
return Number(props.formattedValue) + (currentPage - 1) * props.grid.getPagination()?._options?.itemsPerPage;
|
||||
}
|
||||
|
||||
getElement() {
|
||||
return this.el;
|
||||
}
|
||||
|
||||
render(props) {
|
||||
this.el.innerHTML = this.getRowNum(props);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*****************************************
|
||||
* Tui-Grid 공식문서
|
||||
* https://nhn.github.io/tui.grid/latest/
|
||||
******************************************/
|
||||
const TuiGrid = {
|
||||
instance: null,
|
||||
defaultOptions: {
|
||||
el: $('#grid'),
|
||||
//[선택]DataSource 정보(readData|createData|updateData|modifyData|deleteData 등)
|
||||
data: {
|
||||
headers: {
|
||||
AJAX: true
|
||||
},
|
||||
withCredentials: false,
|
||||
initialRequest: false,
|
||||
api: {
|
||||
readData: {
|
||||
contentType: 'application/json',
|
||||
dataType: 'json',
|
||||
method: 'get',
|
||||
initParams: {}
|
||||
}
|
||||
, createData: {url: '', method: 'POST'}
|
||||
, updateData: {url: '', method: 'PUT'}
|
||||
, modifyData: {url: '', method: 'PUT'}
|
||||
, deleteData: {url: '', method: 'DELETE'}
|
||||
}
|
||||
},
|
||||
header: {
|
||||
align:'left', //헤더 좌측정렬
|
||||
columns: [{name: "_checked", align: "center"}] //헤더 채크박스 가운데정렬
|
||||
}, //[선택]헤더정보(헤더 명칭 및 매핑 field)
|
||||
columns: [], //[필수]컬럼정보(헤더 명칭 및 매핑 field)
|
||||
rowHeaders: [], //[선택]ROW 헤더 타입(rowNum: 순번, checkbox: 체크박스)
|
||||
bodyHeight: 467, //[선택]Grid 높이 (number(단위: px)|'auto'|'fitToParent')
|
||||
minBodyHeight: 350, //[선택]Grid 최소 높이 (단위: px)
|
||||
rowHeight: 50, //[선택]Grid row 높이 (number(단위: px)|'auto' )
|
||||
minRowHeight: 50, //[선택]Grid row 최소 높이 (단위: px)
|
||||
pageOptions: {
|
||||
useClient: false,
|
||||
page: 1,
|
||||
perPage: 10
|
||||
}, //[선택]한 페이지에 출력할 건수
|
||||
columnOptions: { //[선택]고정 컬럼
|
||||
//frozenCount: 0 //고정컬럼 갯수
|
||||
frozenBorderWidth: 2 //고정컬럼 보더(border) 두께
|
||||
, resizable: true
|
||||
, minWidth: 100 //최소 사이즈
|
||||
},
|
||||
summary: [], //[선택]하단합계
|
||||
treeColumnOptions: {}, //[선택]tree 구조 grid
|
||||
},
|
||||
|
||||
of: function (options, dataSource, successCallback) {
|
||||
|
||||
this.instance = null;
|
||||
// rowNum fix
|
||||
if (options.pageOptions?.type !== 'scroll') {
|
||||
options.rowHeaders.filter((r, idx) => {
|
||||
if (r === 'rowNum') {
|
||||
options.rowHeaders[idx] = {
|
||||
type: 'rowNum',
|
||||
renderer: {
|
||||
type: CustomRowNumberRenderer
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
const newOptions = $.extend(true, {}, this.defaultOptions, options, {data: dataSource});
|
||||
newOptions.el = document.getElementById(options.el);
|
||||
//this.elId = options.el;
|
||||
|
||||
// language
|
||||
tui.Grid.setLanguage('en', {
|
||||
display: {
|
||||
noData: options?.noData
|
||||
}
|
||||
});
|
||||
// theme
|
||||
//tui.Grid.applyTheme('custom', eval(customTheme));
|
||||
//Grid.applyTheme('custom', customTheme);
|
||||
Grid.applyTheme('striped', customTheme);
|
||||
// console.log("newOpt", newOptions);
|
||||
this.instance = new tui.Grid(newOptions);
|
||||
|
||||
|
||||
this.instance.on('successResponse', function (ev) {
|
||||
// console.log(`successResponse >>>>>>>>>>>>>>>>>> `,ev);
|
||||
var msg = JSON.parse(ev.xhr.response).message; //tui-grid 기본 format 메시지
|
||||
|
||||
//if($('#totCnt span')){
|
||||
if (document.getElementById('totCnt')) {
|
||||
const res = JSON.parse(ev.xhr.response);
|
||||
// paging
|
||||
if (res.data.pagination) {
|
||||
$('#totCnt span').text(res.data.pagination.totalCount);
|
||||
// no paging
|
||||
} else {
|
||||
$('#totCnt span').text(res.count)
|
||||
}
|
||||
// console.log('totCnt >>>>> ',$('#totCnt span').text())
|
||||
}
|
||||
|
||||
if (successCallback) successCallback(JSON.parse(ev.xhr.response));
|
||||
//if(successCallback) successCallback(ev);
|
||||
});
|
||||
// 결과가 false인 경우 발생한 경우
|
||||
this.instance.on('failResponse', function (ev) {
|
||||
// console.log(`failResponse >>>>>>>>>>>>>>>>>> `,ev);
|
||||
try {
|
||||
//tui-grid 기본 format 메시지
|
||||
|
||||
const res = JSON.parse(ev.xhr.response);
|
||||
|
||||
let msg = '';
|
||||
if (!(res.message == null || res.message == undefined || res.message == '')) {
|
||||
alert(res.message);
|
||||
} else {
|
||||
alert(res);
|
||||
}
|
||||
} catch (e) {
|
||||
alert("오류가 발생하였습니다.");
|
||||
// console.error('TuiGrid::failResponse parsing error', e)
|
||||
}
|
||||
});
|
||||
// 오류가 발생한 경우
|
||||
this.instance.on('errorResponse', function (ev) {
|
||||
// console.log(`errorResponse >>>>>>>>>>>>>>>>>> `,ev);
|
||||
try {
|
||||
//tui-grid 기본 format 메시지
|
||||
const res = JSON.parse(ev.xhr.response);
|
||||
if (!(res.message == null || res.message == undefined || res.message == '')) {
|
||||
alert(res.message);
|
||||
} else {
|
||||
alert(res);
|
||||
}
|
||||
} catch (e) {
|
||||
alert("오류가 발생하였습니다.");
|
||||
// console.error('TuiGrid::errorResponse parsing error', e)
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* grid check box event start
|
||||
* */
|
||||
// 체크박스 이벤트
|
||||
this.instance.on("check", () => {
|
||||
$("#selectOption").addClass("active");
|
||||
$("#remove").attr("disabled", false);
|
||||
$("#sendMessageBtn").removeClass("disabled");
|
||||
$("#sendMessageBtn").attr("disabled", false);
|
||||
$("#checkedCount").text(GRID.getCheckedRows().length);
|
||||
$("#assigns-btn").removeClass("disabled");
|
||||
$("#assigns-btn").attr("disabled", false);
|
||||
$("#suspend-btn").attr("disabled", false);
|
||||
$("#returnBtn").attr("disabled", false);
|
||||
});
|
||||
// 체크박스 해제 이벤트
|
||||
this.instance.on("uncheck", () => {
|
||||
const checkedCount = GRID.getCheckedRows().length;
|
||||
if (checkedCount === 0) {
|
||||
$("#selectOption").removeClass("active");
|
||||
$("#remove").attr("disabled", true);
|
||||
$("#sendMessageBtn").addClass("disabled");
|
||||
$("#sendMessageBtn").attr("disabled", true);
|
||||
$("#assigns-btn").addClass("disabled");
|
||||
$("#assigns-btn").attr("disabled", true);
|
||||
$("#suspend-btn").attr("disabled", true);
|
||||
$("#returnBtn").attr("disabled", true);
|
||||
}
|
||||
$("#checkedCount").text(checkedCount);
|
||||
});
|
||||
// 전체 체크박스 이벤트
|
||||
this.instance.on("checkAll", () => {
|
||||
$("#selectOption").addClass("active");
|
||||
$("#remove").attr("disabled", false);
|
||||
$("#sendMessageBtn").removeClass("disabled");
|
||||
$("#sendMessageBtn").attr("disabled", false);
|
||||
$("#checkedCount").text(GRID.getCheckedRows().length);
|
||||
$("#assigns-btn").removeClass("disabled");
|
||||
$("#assigns-btn").attr("disabled", false);
|
||||
$("#suspend-btn").attr("disabled", false);
|
||||
$("#returnBtn").attr("disabled", false);
|
||||
});
|
||||
// 전체 체크박스 해제 이벤트
|
||||
this.instance.on("uncheckAll", () => {
|
||||
$("#selectOption").removeClass("active");
|
||||
$("#remove").attr("disabled", true);
|
||||
$("#sendMessageBtn").addClass("disabled");
|
||||
$("#sendMessageBtn").attr("disabled", true);
|
||||
$("#checkedCount").text(GRID.getCheckedRows().length);
|
||||
$("#assigns-btn").addClass("disabled");
|
||||
$("#assigns-btn").attr("disabled", true);
|
||||
$("#suspend-btn").attr("disabled", true);
|
||||
$("#returnBtn").attr("disabled", true);
|
||||
});
|
||||
/**
|
||||
* grid check box event end
|
||||
* */
|
||||
|
||||
|
||||
return this.instance;
|
||||
},
|
||||
|
||||
|
||||
/** Excel Export */
|
||||
exportExcel: function (_instance, fileName, rowHeader) {
|
||||
/* 필수값 설정 */
|
||||
var _gridId = _instance.el.id;
|
||||
var _frstColTyp = rowHeader;
|
||||
var _arrHeader = [];
|
||||
var _arrName = [];
|
||||
var _mCustomRenderer = {};
|
||||
/* =================
|
||||
* 2021.04.30. 박민규
|
||||
* 컬럼 취득 방법 변경
|
||||
* AsIs: GridConfig 에 설정한 Columns 정보
|
||||
* ToBe: instance 에 설정된 Columns 정보
|
||||
================= */
|
||||
//2021.04.30. 주석처리
|
||||
// this.getOptColumns().forEach(function(opt, idx){
|
||||
_instance.getColumns().forEach(function (opt, idx) {
|
||||
_arrHeader.push(opt.header);
|
||||
_arrName.push(opt.name);
|
||||
//2021.04.30. 주석처리
|
||||
// if(!fnIsEmpty(opt.renderer)){
|
||||
if (!(fnIsEmpty(opt.renderer) || 'DefaultRenderer' == opt.renderer.type.name || fnIsEmpty(opt.renderer.type.name))) { //브라우저별 opt.renderer.type.name 값의 차이 => Chrome: "DefaultRenderer", IE: undefined
|
||||
_mCustomRenderer[opt.name] = opt.renderer;
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
/* grid head Setting */
|
||||
var elementTHEAD = document.createElement('table');
|
||||
var $sltHeader = $('#' + _gridId + ' .tui-grid-header-area > table.tui-grid-table').clone();
|
||||
//head 처리(table 고정셀 이용 시)
|
||||
if ($sltHeader.length > 1) {
|
||||
//좌측 table의 head Selector
|
||||
var firstTableTh = $sltHeader.find('tr:last-child th');
|
||||
//우측 table row의 헤드(th)를 좌측 table row에 병합
|
||||
for (var i = 1; i < $sltHeader.length; i++) {
|
||||
$sltHeader.eq(i).find('tr').each(function (idx, row) {
|
||||
var firstTableRow = $sltHeader.eq(0).find('tr:eq(' + idx + ')');
|
||||
if (firstTableRow.length == 0) {
|
||||
//<tr> 신규생성
|
||||
var tr = document.createElement('tr');
|
||||
tr.innerHTML = row.innerHTML;
|
||||
$sltHeader.eq(0).append(tr);
|
||||
//firstTable <th>의 rowspan 변경
|
||||
for (var j = 0; j < firstTableTh.length; j++) {
|
||||
firstTableTh.eq(j).attr('rowspan', Number(firstTableTh.eq(j).attr('rowspan')) + 1);
|
||||
}
|
||||
} else {
|
||||
firstTableRow.append(row.innerHTML);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
elementTHEAD.innerHTML = $sltHeader.eq(0).find('tbody').html();
|
||||
|
||||
|
||||
/* grid body Setting */
|
||||
var elementTBODY = document.createElement('tbody');
|
||||
_instance.getData().forEach(function (row, idxRow) {
|
||||
var elementTR = document.createElement('tr');
|
||||
|
||||
//타입별 <td> element 생성( 첫번째 컬럼타입 설정 시 )
|
||||
if (!fnIsEmpty(_frstColTyp))
|
||||
elementTR.appendChild(fnCreateTdByFrstCol(_frstColTyp, row));
|
||||
//<td> element 생성
|
||||
_arrName.forEach(function (columnName, idxColumn) {
|
||||
var columnVal = '';
|
||||
var customRenderer = _mCustomRenderer[columnName];
|
||||
if (fnIsEmpty(customRenderer)) {
|
||||
//column Value 설정
|
||||
columnVal = fnNvl(row[columnName]);
|
||||
} else {
|
||||
//prop 객체 생성
|
||||
var columnInfo = {};
|
||||
columnInfo['renderer'] = customRenderer;
|
||||
columnInfo['name'] = columnName;
|
||||
var props = {};
|
||||
props['columnInfo'] = columnInfo;
|
||||
props['rowKey'] = row.rowKey;
|
||||
props['grid'] = _instance;
|
||||
|
||||
//렌더러 호출
|
||||
customRenderer.type(props);
|
||||
|
||||
//column Value 설정
|
||||
columnVal = fnNvl(row[columnName]);
|
||||
if (row.rowKey < 15) {
|
||||
// // console.log('[export]rowKey->'+row.rowKey+'/ column->'+columnName+' / value->'+row[columnName]);
|
||||
// // console.log(_instance.getRow(row.rowKey));
|
||||
}
|
||||
}
|
||||
|
||||
var elementTD = document.createElement('td');
|
||||
elementTD.innerHTML = columnVal;
|
||||
elementTR.appendChild(elementTD);
|
||||
});
|
||||
elementTBODY.appendChild(elementTR);
|
||||
});
|
||||
|
||||
|
||||
/* grid table Setting */
|
||||
var elementTABLE = document.createElement('table');
|
||||
elementTABLE.appendChild(elementTHEAD);
|
||||
elementTABLE.appendChild(elementTBODY);
|
||||
|
||||
|
||||
/* export Excel */
|
||||
var fileUtil = new luluFileExportUtil(fileName, 'table', elementTABLE);
|
||||
fileUtil.exportExcel();
|
||||
|
||||
|
||||
/* member Function Declare */
|
||||
|
||||
//isEmpty Function
|
||||
function fnIsEmpty(val) {
|
||||
if (val == undefined || val == null || val == '' || val == {} || val == [])
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
//nvl Function
|
||||
function fnNvl(val, replaceVal) {
|
||||
replaceVal = fnIsEmpty(replaceVal) ? '' : replaceVal;
|
||||
val = fnIsEmpty(val) ? replaceVal : val;
|
||||
return val;
|
||||
}
|
||||
|
||||
//<td> element 생성 Function
|
||||
function fnCreateTdByFrstCol(colType, row) {
|
||||
var returnVal = '';
|
||||
|
||||
/* column 타입별 value 설정 */
|
||||
switch (colType) {
|
||||
case 'rowNum':
|
||||
returnVal = row._attributes.rowNum;
|
||||
break;
|
||||
case 'checkbox':
|
||||
if (row._attributes.checked)
|
||||
returnVal = '☑';
|
||||
else
|
||||
returnVal = '□';
|
||||
break;
|
||||
default:
|
||||
return returnVal;
|
||||
break;
|
||||
}
|
||||
|
||||
/* <td> element 생성 */
|
||||
var elementFrstTD = document.createElement('td');
|
||||
elementFrstTD.innerHTML = returnVal;
|
||||
|
||||
|
||||
return elementFrstTD;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Button 렌더러
|
||||
* -설명: Grid의 cell에 Button을 생성 한다.
|
||||
* 버튼명칭에 format 사용이 가능하며 사용방법은 아래와 같다.
|
||||
* ex) value: 'A is {0}. B is {1}. {0}!={1}',
|
||||
* listColumns: ['컬럼1', '컬럼2']
|
||||
* @param value 버튼에 출력 할 명칭
|
||||
* @param listColumns format에 매칭할 컬럼 목록
|
||||
* @param callbackFnc 버튼 클릭 시 호출 할 함수명
|
||||
* @author 박민규
|
||||
* @date 2020.05.28.
|
||||
*/
|
||||
var LuluButtonRenderer = function (props) {
|
||||
// // console.log('XitButtonRenderer Called!!-> '+props.columnInfo.name);
|
||||
//options get
|
||||
var opt = props.columnInfo.renderer.options;
|
||||
var value = opt.value;
|
||||
var id = opt.id;
|
||||
var btnClass = opt.btnClass;
|
||||
var callbackFnc = opt.callbackFnc;
|
||||
var args = opt.listColumns;
|
||||
|
||||
//"value" Formatting
|
||||
if (args != undefined) {
|
||||
var row = props.grid.getRow(props.rowKey);
|
||||
for (var i = 0; i < args.length; i++) {
|
||||
var regEx = new RegExp('\\{' + i + '\\}', 'gi');
|
||||
value = value.replace(regEx, row[args[i]]);
|
||||
}
|
||||
}
|
||||
|
||||
//Element Setting
|
||||
//23.07.24 최정민 추
|
||||
//iuput button에서 button으로 수정 (아이콘을 넣기위함)
|
||||
//el id추가
|
||||
//버튼에 아이콘을 쓰기위하여 아이콘 클레스명 인자로 받아갈것.
|
||||
var el = document.createElement('button');
|
||||
var icon = document.createElement('i');
|
||||
icon.className = btnClass; // 원하는 아이콘 클래스를 설정하세요.
|
||||
el.className = btnClass;
|
||||
el.type = 'button';
|
||||
el.value = value;
|
||||
el.id = id;
|
||||
|
||||
//EventListener Setting
|
||||
el.addEventListener('click', function () {
|
||||
var callback = callbackFnc + '(props)';
|
||||
eval(callback);
|
||||
});
|
||||
|
||||
//Element render
|
||||
this.el = el;
|
||||
// this.render(props);
|
||||
if (props.rowKey < 15) {
|
||||
// // console.log('[Renderer]rowKey->'+props.rowKey+' column->'+props.columnInfo.name+' / el.value->'+el.value);
|
||||
}
|
||||
//DataSet Injection ( Dataset에 추가해야 "복사(ctrl+c)" 기능 사용 가능 )
|
||||
props.grid.setValue(props.rowKey, props.columnInfo.name, el.value, false);
|
||||
}
|
||||
LuluButtonRenderer.prototype.getElement = function () {
|
||||
return this.el;
|
||||
}
|
||||
LuluButtonRenderer.prototype.render = function (props) {
|
||||
this.el.value = props.value;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* column 병합 렌더러
|
||||
* -설명: 다수의 Column을 하나의 Column으로 병합하여 cell에 출력 한다.
|
||||
* 필요 시 format 사용이 가능하며 사용방법은 아래와 같다. (※포맷 사용 시 "구분자(separator)"는 적용되지 않는다)
|
||||
* [단순 컬럼 병합]
|
||||
* ex) listColumns: ['컬럼1', '컬럼2'],
|
||||
* separator: '/'
|
||||
* [포맷사용 컬럼 병합]
|
||||
* ex) listColumns: ['컬럼1', '컬럼2'],
|
||||
* format: 'A is {0}. B is {1}. {0}!={1}'
|
||||
* @param listColumns 병합할 컬럼 name 목록
|
||||
* @param separator 컬럼 연결 구분자(default: 공백(' '))
|
||||
* @param format 출력 포맷
|
||||
* @author 박민규
|
||||
* @date 2020.05.28.
|
||||
*/
|
||||
var XitColumnMergeRenderer = function (props) {
|
||||
// // console.log('XitColumnMergeRenderer Called!!-> '+props.columnInfo.name);
|
||||
//options get
|
||||
var opt = props.columnInfo.renderer.options;
|
||||
var args = opt.listColumns;
|
||||
var separator = opt.separator;
|
||||
if (fnIsEmpty(separator))
|
||||
separator = ' ';
|
||||
var value = opt.format;
|
||||
|
||||
//Columns merge
|
||||
if (fnIsEmpty(value)) {
|
||||
var arrStr = [];
|
||||
var row = props.grid.getRow(props.rowKey);
|
||||
args.forEach(function (column) {
|
||||
arrStr.push(row[column]);
|
||||
});
|
||||
value = arrStr.join(separator);
|
||||
} else {
|
||||
var row = props.grid.getRow(props.rowKey);
|
||||
for (var i = 0; i < args.length; i++) {
|
||||
var regEx = new RegExp('\\{' + i + '\\}', 'gi');
|
||||
value = value.replace(regEx, fnNvl(row[args[i]]));
|
||||
}
|
||||
}
|
||||
|
||||
function fnNvl(val) {
|
||||
if (val == undefined || val == null)
|
||||
return '';
|
||||
return val;
|
||||
}
|
||||
|
||||
function fnIsEmpty(val) {
|
||||
if (val == undefined || val == null || val == '' || val == [] || val == {})
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
//Element Setting
|
||||
var el = document.createElement('div');
|
||||
el.setAttribute('class', 'tui-grid-cell-content');
|
||||
el.innerHTML = value;
|
||||
|
||||
//Element render
|
||||
this.el = el;
|
||||
// this.render(props);
|
||||
if (props.rowKey < 15) {
|
||||
// // console.log('[Renderer]rowKey->'+props.rowKey+' column->'+props.columnInfo.name+' / el.value->'+el.innerHTML);
|
||||
}
|
||||
|
||||
//DataSet Injection ( Dataset에 추가해야 "복사(ctrl+c)" 기능 사용 가능 )
|
||||
props.grid.setValue(props.rowKey, props.columnInfo.name, el.innerHTML, false);
|
||||
}
|
||||
XitColumnMergeRenderer.prototype.getElement = function () {
|
||||
return this.el;
|
||||
}
|
||||
XitColumnMergeRenderer.prototype.render = function (props) {
|
||||
this.el.value = props.value;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Button 렌더러
|
||||
* @author 최유수
|
||||
* @date 2020.07.15.
|
||||
* formatter : 셀 안에 입력될 문자열.
|
||||
,eventType : 셀에 걸 이벤트.
|
||||
,eventFunction : 이벤트에 부여될 함수.
|
||||
|
||||
element 속성
|
||||
element : 생성 엘리먼트 속성
|
||||
type : 생성 엘리먼트의 타입
|
||||
value : 들어갈 텍스트
|
||||
*/
|
||||
/**
|
||||
* 요구사항
|
||||
* 셀 속성을 부여할때
|
||||
*
|
||||
* 1.셀에 개발자가 원하는 Element를 생성 할 수 있음
|
||||
* 2.1의 속성에 개발자가 원하는 이벤트를 부여 할 수 있음
|
||||
* 3. 2의 이벤트에 개발자가 원하는 함수를 부여 할 수 있음
|
||||
* 4. 개발자가 원하는만큼 유형을 추가 할 수 있음.(유형이 여러개일수도 아닐수도 있음)
|
||||
*/
|
||||
var CustomButtonRenderer = function (props) {
|
||||
//options get
|
||||
var opt = props.columnInfo.renderer.options;
|
||||
//formatter를 구성할 인자값(해당 인자값은 함수형일때 배열일 수 있음.)
|
||||
var formatter = opt.formatter;
|
||||
//이벤트로 사용할 함수
|
||||
var eventFunction = opt.eventFunction;
|
||||
//이벤트 속성
|
||||
var eventType = opt.eventType;
|
||||
//객체 유형
|
||||
var element = opt.element;
|
||||
//객체 속성
|
||||
var type = opt.type;
|
||||
|
||||
|
||||
var formattObject = formatter;
|
||||
if (typeof formatter == "function") {
|
||||
//formatter가 함수에 의해 구현이됨, Return값은 Arr<Object>, Objcect임;
|
||||
//Object는 formatter : Text 와 Element로 구성됨.
|
||||
formattObject = formatter(props);
|
||||
} else {
|
||||
//formatter가 단순 텍스트임.
|
||||
formattObject = opt;
|
||||
}
|
||||
|
||||
var ele = cellMaker(formattObject, eventFunction, eventType, element, type, props);
|
||||
this.el = ele;
|
||||
}
|
||||
CustomButtonRenderer.prototype.getElement = function () {
|
||||
return this.el;
|
||||
}
|
||||
|
||||
//셀을 만듦.
|
||||
var cellMaker = function (formattObject, eventFunction, eventType, element, type, props) {
|
||||
var spanEle = document.createElement("span");
|
||||
var ele;
|
||||
|
||||
//셀에 1개 이상의 데이터가 들어가는 경우
|
||||
if (formattObject instanceof Array && formattObject.length != 0) {
|
||||
formattObject.forEach(function (elementObject, index, arrays) {
|
||||
elementObject["eventFunction"] = eventFunction;
|
||||
elementObject["eventType"] = eventType;
|
||||
ele = elMaker(elementObject, props);
|
||||
$(spanEle).append(ele);
|
||||
//객체가 다수이면 띄어쓰기 함
|
||||
if (index < formattObject.length - 1) {
|
||||
$(spanEle).append(document.createTextNode('\u00a0 // \u00a0'));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
//셀에 데이터가 1개이지만 함수로 Obj를 가져와서 만듦
|
||||
if (formattObject instanceof Object) {
|
||||
formattObject["eventFunction"] = eventFunction;
|
||||
formattObject["eventType"] = eventType;
|
||||
ele = elMaker(formattObject, props);
|
||||
spanEle.appendChild(ele);
|
||||
}
|
||||
|
||||
return spanEle;
|
||||
}
|
||||
|
||||
var elMaker = function (elementObject, props) {
|
||||
var text = elementObject.formatter
|
||||
var eventType = elementObject.eventType
|
||||
var element = elementObject.element
|
||||
var eventFunction = elementObject.eventFunction
|
||||
var type = elementObject.type
|
||||
|
||||
var ele;
|
||||
if (element == "text") {
|
||||
ele = document.createElement("p");
|
||||
ele.style.whiteSpace = 'nowrap';
|
||||
ele.style.display = 'inline-block';
|
||||
ele.style.fontSize = '11px';
|
||||
ele.style.fontFamily = 'Nanum Barun Gothic';
|
||||
ele.appendChild(document.createTextNode(text));
|
||||
} else {
|
||||
ele = document.createElement(element);
|
||||
ele.type = type;
|
||||
ele.value = text;
|
||||
}
|
||||
//이벤트가 함수이면 이벤트 부여함.
|
||||
if (typeof eventFunction == "function") {
|
||||
ele.addEventListener(eventType, function (event) {
|
||||
eventFunction(props, event)
|
||||
});
|
||||
}
|
||||
|
||||
return ele;
|
||||
|
||||
}
|
||||
Loading…
Reference in New Issue