예제는 code.vue 공통코드 화면 입니다. 예제의 code.vue 공통코드 화면의 검색조건 <OnePopText > 은 단일 TEXT 검색과 멀티 TEXT검색을 사용하였습니다. ( 팝업 (돋보기아이콘)을 사용하지 않은 경우입니다. )
<ONEPopText … multi oneTextPop onlyMulti />
multi : 검색조건 <ONEPopText>를 사용할 경우, 항상 multi 설정해줍니다. oneTextPop : 인풋 code 와 name 을 UI를 분리 하지 않고, code 만 사용하는 설정입니다. onlyMulti : 팝업을 사용하지 않겠다는 설정입니다. 돋보기 모양을 없애줍니다.

multi oneTextPop onlyMulti 설정 했을 경우의 검색조건 UI

여러 개의 코드 값을 넣고, SELECT 버튼을 누룹니다.

<template v-slot:searchCondition>
<ONESearchCondition ref="searchCard" v-show="this.conditionVisible">
<ONEPopText label="T_SUBCD" scale="2" v-model="dsSearch.subCdPop" :maxlength="50" @enter="onSearch" multi oneTextPop onlyMulti/>
<ONEPopText label="T_SUBNM" scale="2" v-model="dsSearch.subNmPop" :maxlength="50" @enter="onSearch" multi oneTextPop onlyMulti/>
</ONESearchCondition>
</template>
data () {
return {
// 검색 조건
dsSearch: {
subCdPop: { code: '' },
subCd: '',
subNmPop: { code: '' },
subNm: ''
}
}
},
async onSearch (obj) {
...
// ONEPopText 를 사용할 때, 반드시 검색조건 데이터 아래와 같이 세팅합니다.
**this.dsSearch.subCd = this.dsSearch.subCdPop.code // ex) dsSearch.subCdPop.code => dsSearch.subCd 에 옮겨 담습니다.
this.dsSearch.subNm = this.dsSearch.subNmPop.code**
const sendData = [{
ds_json: [this.dsSearch]
}]
this.$fetch('code', sendData)
...
},
@Override
public List getCodeList(Map<String, String> map) throws Exception {
List rtnList = new ArrayList();
Map<String, Object> dsSearch = new HashMap();
dsSearch.putAll(map);
Object subCdItem = ((Map) dsSearch.get("subCdPop")).get("multiVal");
Object subNmItem = ((Map) dsSearch.get("subNmPop")).get("multiVal");
List subCodeList = !ObjectUtils.isEmpty(subCdItem) ? (List) subCdItem : null;
List subNameList = !ObjectUtils.isEmpty(subNmItem) ? (List) subNmItem : null;
/****************************************************************
* 멀티 여부 판단 할 새로운 변수 추가.
****************************************************************/
/********************************************************************************************************************************/
이 부분은 조금 특별한 경우 입니다. 보통... 이 부분은 안 쓰는데. 어떻게 로직을 만들려고 노력했는지 분석해 보시면 좋을것 같습니다.
String subMultiYn = "";
String subNameMultiYn = "";
if (("").equals(subCodeList) || subCodeList == null ) {
subMultiYn = "N";
} else if (!("").equals(subCodeList) || subCodeList != null ){
subMultiYn = "Y";
}
if (("").equals(subNameList) || subNameList == null ) {
subNameMultiYn = "N";
} else if (!("").equals(subNameList) || subNameList != null ){
subNameMultiYn = "Y";
}
dsSearch.put("codeMultiYn", subMultiYn);
dsSearch.put("nameMultiYn", subNameMultiYn);
/********************************************************************************************************************************/
String subCodeMultiCondKey = "";
String subNameMultiCondKey = "";
if (subCodeList != null && subCodeList.size() > 0) {
subCodeMultiCondKey = commonPopupService.addMultiCondVal(subCodeMultiCondKey, "subCd",subCodeList);
}
if (subNameList != null && subNameList.size() > 0) {
subNameMultiCondKey = commonPopupService.addMultiCondVal(subNameMultiCondKey, "subNm",subNameList);
}
if (!StringUtil.isEmpty(subCodeMultiCondKey)) dsSearch.put("subCodeMultiCondKey", subCodeMultiCondKey);
if (!StringUtil.isEmpty(subNameMultiCondKey)) dsSearch.put("subNameMultiCondKey", subNameMultiCondKey);
rtnList = commonDao.getList("code.getCodeList", dsSearch);
if (!StringUtil.isEmpty(subCodeMultiCondKey)) commonPopupService.removeMultiCondVal(subCodeMultiCondKey);
if (!StringUtil.isEmpty(subNameMultiCondKey)) commonPopupService.removeMultiCondVal(subNameMultiCondKey);
return rtnList;
}
<select id="getCodeList" fetchSize="5000" resultType="egovmap">
<![CDATA[
SELECT /* code.getCodeList 2020-11-09 이승빈 */
A.SERIALKEY
, A.MAIN_CD
, A.MAIN_NM
, A.USE_YN
, A.EDITABLE_YN
, A.UDF1
, A.UDF2
, A.UDF3
, A.UDF4
, A.UDF5
FROM M_CODE A
]]>
WHERE 1 = 1
AND A.DEL_YN = 'N'
<if test='subCd != null and subCd != "" and "N".equals(codeMultiYn)' >
<![CDATA[
AND EXISTS (
SELECT
1
FROM M_CODE_DETAIL MCD
WHERE A.MAIN_CD = MCD.MAIN_CD
AND MCD.DEL_YN = 'N'
AND MCD.SUB_CD = #{subCd}
)
]]>
</if>
<if test='subCd != null and subCd != "" and "Y".equals(codeMultiYn)'>
<![CDATA[
AND EXISTS (
SELECT
1
FROM M_CODE_DETAIL MCD
**JOIN (SELECT DISTINCT COL_VAL AS COLVAL
FROM M_MULTICOND /* M_MULTICOND 테이블이 무엇인지, 무슨 역할을 하는지 한번 찾아보세요 */
WHERE 1=1
AND MULTI_KEY_VAL = #{subCodeMultiCondKey}) AS SUBCD_MULTI
ON MCD.SUB_CD = SUBCD_MULTI.COLVAL**
WHERE 1=1
AND A.MAIN_CD = MCD.MAIN_CD
AND MCD.DEL_YN = 'N'
)
]]>
</if>
<if test='subNm != null and subNm != "" and "N".equals(nameMultiYn)' >
<![CDATA[
AND EXISTS (
SELECT
1
FROM M_CODE_DETAIL MCD
WHERE A.MAIN_CD = MCD.MAIN_CD
AND MCD.DEL_YN = 'N'
AND MCD.LANG_TYPE = #{$userLangType}
AND UPPER(MCD.SUB_NM) LIKE UPPER(CONCAT('%', #{subNm}, '%'))
)
]]>
</if>
<if test='subNm != null and subNm != "" and "Y".equals(nameMultiYn)'>
<![CDATA[
AND EXISTS (
SELECT
1
FROM M_CODE_DETAIL MCD
**JOIN (SELECT DISTINCT COL_VAL AS COLVAL
FROM M_MULTICOND
WHERE 1=1
AND MULTI_KEY_VAL = #{subNameMultiCondKey}) AS SUBNM_MULTI
ON MCD.SUB_NM = SUBNM_MULTI.COLVAL**
WHERE 1=1
AND A.MAIN_CD = MCD.MAIN_CD
AND MCD.LANG_TYPE = #{$userLangType}
AND MCD.DEL_YN = 'N'
)
]]>
</if>
<if test="mainCd != null and mainCd != '' " >
<![CDATA[
AND A.MAIN_CD = #{mainCd}
]]>
</if>
<if test="mainNm != null and mainNm != '' " >
<![CDATA[
AND UPPER(A.MAIN_NM) LIKE UPPER(CONCAT('%', #{mainNm}, '%'))
]]>
</if>
<if test="useYn != null and useYn != '' " >
<![CDATA[
AND A.USE_YN = #{useYn}
]]>
</if>
</select>