dev_bert
kyebyungha 3 years ago
commit 91fe44c3e7

@ -9,12 +9,28 @@
<option name="autoReloadType" value="SELECTIVE" />
</component>
<component name="ChangeListManager">
<list default="true" id="4099ff18-820b-4e43-a4c5-6159d58dccc4" name="변경" comment="아기정보입력 생년월일 형식 수정&#10;추천이유식 &gt; 카트팝업 검색 기능 및 조회 적용">
<list default="true" id="4099ff18-820b-4e43-a4c5-6159d58dccc4" name="변경" comment="회원가입 밸리데이션 및 유효성체크 보완">
<change afterPath="$PROJECT_DIR$/src/main/webapp/WEB-INF/views/ftl/m/member_env/view_set_account_phone_02.ftl" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/webapp/WEB-INF/views/ftl/m/member_env/view_set_account_phone_20220416.ftl" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/webapp/WEB-INF/views/ftl/m/member_env/view_set_account_phone_confirm.ftl" afterDir="false" />
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/webapp/WEB-INF/views/ftl/m/memory/memory_common.ftl" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/webapp/WEB-INF/views/ftl/m/memory/memory_common.ftl" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/webapp/WEB-INF/views/ftl/m/memory/memory_daily.ftl" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/webapp/WEB-INF/views/ftl/m/memory/memory_daily.ftl" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/webapp/WEB-INF/views/ftl/m/memory/memory_timeline.ftl" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/webapp/WEB-INF/views/ftl/m/memory/memory_timeline.ftl" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/webapp/WEB-INF/views/ftl/m/memory/memory_week.ftl" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/webapp/WEB-INF/views/ftl/m/memory/memory_week.ftl" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/java/com/backoffice/api/ApiSMSController.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/backoffice/api/ApiSMSController.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/java/com/backoffice/api/bo/APIMemberBO.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/backoffice/api/bo/APIMemberBO.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/java/com/backoffice/api/bo/APIMemberBOImpl.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/backoffice/api/bo/APIMemberBOImpl.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/java/com/backoffice/m/login/M_LoginController.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/backoffice/m/login/M_LoginController.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/java/com/backoffice/m/member_env/M_Member_envController.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/backoffice/m/member_env/M_Member_envController.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/resources/sqlmap/admin/bf/com.backoffice.admin.bf.bf_recommend.xml" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/resources/sqlmap/admin/bf/com.backoffice.admin.bf.bf_recommend.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/resources/sqlmap/api/com.backoffice.api.bf.xml" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/resources/sqlmap/api/com.backoffice.api.bf.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/webapp/WEB-INF/views/ftl/m/bf_food/list_bf_cart_popup.ftl" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/webapp/WEB-INF/views/ftl/m/bf_food/list_bf_cart_popup.ftl" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/webapp/WEB-INF/views/ftl/m/bf_food/list_bf_ingre_recommend.ftl" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/webapp/WEB-INF/views/ftl/m/bf_food/list_bf_ingre_recommend.ftl" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/webapp/WEB-INF/views/ftl/m/bf_food/view_bf_homemade_popup.ftl" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/webapp/WEB-INF/views/ftl/m/bf_food/view_bf_homemade_popup.ftl" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/webapp/WEB-INF/views/ftl/m/include/confirm.ftl" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/webapp/WEB-INF/views/ftl/m/include/confirm.ftl" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/webapp/WEB-INF/views/ftl/m/login/view_join_member_04.ftl" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/webapp/WEB-INF/views/ftl/m/login/view_join_member_04.ftl" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/webapp/WEB-INF/views/ftl/m/login/view_pw_reset_phone_01.ftl" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/webapp/WEB-INF/views/ftl/m/login/view_pw_reset_phone_01.ftl" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/webapp/WEB-INF/views/ftl/m/member_env/setting_sync_confirm.ftl" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/webapp/WEB-INF/views/ftl/m/member_env/setting_sync_confirm.ftl" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/webapp/WEB-INF/views/ftl/m/member_env/setting_sync_confirm_end.ftl" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/webapp/WEB-INF/views/ftl/m/member_env/setting_sync_confirm_end.ftl" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/webapp/WEB-INF/views/ftl/m/member_env/view_set_account_phone.ftl" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/webapp/WEB-INF/views/ftl/m/member_env/view_set_account_phone.ftl" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/webapp/static/js/util.js" beforeDir="false" />
</list>
<option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />
@ -60,7 +76,7 @@
<property name="RunOnceActivity.OpenProjectViewOnStart" value="true" />
<property name="RunOnceActivity.ShowReadmeOnStart" value="true" />
<property name="WebServerToolWindowFactoryState" value="false" />
<property name="last_opened_file_path" value="$PROJECT_DIR$/src/main/webapp/WEB-INF/views/ftl/m/bf_food" />
<property name="last_opened_file_path" value="$PROJECT_DIR$/src/main/webapp/WEB-INF/views/ftl/m/member_env" />
<property name="project.structure.last.edited" value="프로젝트" />
<property name="project.structure.proportion" value="0.0" />
<property name="project.structure.side.proportion" value="0.0" />
@ -69,11 +85,11 @@
</component>
<component name="RecentsManager">
<key name="CopyFile.RECENT_KEYS">
<recent name="C:\project\bf\src\main\webapp\WEB-INF\views\ftl\m\member_env" />
<recent name="C:\project\bf\src\main\webapp\m\js" />
<recent name="C:\project\bf\src\main\webapp\static\js" />
<recent name="C:\project\bf\src\main\webapp\WEB-INF\views\ftl\m\bf_food" />
<recent name="C:\project\bf\src\main\webapp\WEB-INF\views\ftl\m\bf_family_baby" />
<recent name="C:\project\bf\src\main\webapp\WEB-INF\views\ftl\m\member_env" />
<recent name="C:\project\bf\src\main\webapp\WEB-INF\views\ftl\m\login" />
<recent name="C:\project\bf\src\main\webapp\m\img" />
</key>
</component>
<component name="RunManager">
@ -217,7 +233,9 @@
<workItem from="1649917548966" duration="1302000" />
<workItem from="1649921550394" duration="230000" />
<workItem from="1649928321125" duration="16823000" />
<workItem from="1650020162949" duration="8111000" />
<workItem from="1650020162949" duration="8484000" />
<workItem from="1650082025322" duration="596000" />
<workItem from="1650099253570" duration="21289000" />
</task>
<task id="LOCAL-00001" summary="최초 커밋">
<created>1645354476031</created>
@ -450,7 +468,21 @@
<option name="project" value="LOCAL" />
<updated>1650025938024</updated>
</task>
<option name="localTasksCounter" value="34" />
<task id="LOCAL-00034" summary="메모리 공유기능 적용 - 카카오, URL복사">
<created>1650035532550</created>
<option name="number" value="00034" />
<option name="presentableId" value="LOCAL-00034" />
<option name="project" value="LOCAL" />
<updated>1650035532550</updated>
</task>
<task id="LOCAL-00035" summary="회원가입 밸리데이션 및 유효성체크 보완">
<created>1650110425602</created>
<option name="number" value="00035" />
<option name="presentableId" value="LOCAL-00035" />
<option name="project" value="LOCAL" />
<updated>1650110425602</updated>
</task>
<option name="localTasksCounter" value="36" />
<servers />
</component>
<component name="TypeScriptGeneratedFilesManager">
@ -470,8 +502,6 @@
<component name="VcsManagerConfiguration">
<option name="CHECK_CODE_SMELLS_BEFORE_PROJECT_COMMIT" value="false" />
<option name="CHECK_NEW_TODO" value="false" />
<MESSAGE value="추천홈메이드이유식 &gt; 팝업 &gt; 연관식품 삭제" />
<MESSAGE value="예방접종 표시 오류 수정" />
<MESSAGE value="음악설정 수정&#10;부모정보 변경 삭제" />
<MESSAGE value="비밀번호 찾기 기능 적용&#10;로그인 회원가입 형식 변경" />
<MESSAGE value="닉네임 변경기능 적용" />
@ -495,6 +525,8 @@
<MESSAGE value="추천이유식 - 추천이유식 식재료 팝업 및 카트 팝업 적용." />
<MESSAGE value="추천이유식 - 추천이유식 식재료 팝업 및 카트 팝업 적용.-2" />
<MESSAGE value="아기정보입력 생년월일 형식 수정&#10;추천이유식 &gt; 카트팝업 검색 기능 및 조회 적용" />
<option name="LAST_COMMIT_MESSAGE" value="아기정보입력 생년월일 형식 수정&#10;추천이유식 &gt; 카트팝업 검색 기능 및 조회 적용" />
<MESSAGE value="메모리 공유기능 적용 - 카카오, URL복사" />
<MESSAGE value="회원가입 밸리데이션 및 유효성체크 보완" />
<option name="LAST_COMMIT_MESSAGE" value="회원가입 밸리데이션 및 유효성체크 보완" />
</component>
</project>

@ -2,6 +2,8 @@ package com.backoffice.api;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import com.backoffice.constants.ConstantSystem;
import com.backoffice.admin.bf.ConstantBF;
import com.backoffice.admin.member.member_issued_pwd.A_Member_issued_pwdBO;
@ -512,6 +514,140 @@ public class ApiSMSController extends AbstractControllerManager{
}
/**
*
* @param model
* @param request
* @param response
* @return
*/
@RequestMapping(value="send_sms_change_phone", produces="text/plain;charset=UTF-8")
@ResponseBody
public String send_sms_change_phone(@ModelAttribute("model") ModelMap model, HttpServletRequest request, HttpServletResponse response) {
HttpSession session = request.getSession(false);
DataMap rm_mem = (DataMap) session.getAttribute(ConstantSystem.SESSION_RM_MEMBER);
DataMap paramMap = this.getDataMapFromRequest(request);
// need params
String[] arrParam = {"phone_num"};
// check head parameter
int isValid = checkHeaderParam(AbstractControllerManager.CHECK_NEED_PARAMS, paramMap);
String json = "empty";
DataMap map_json = new DataMap();
map_json.put("RESULT", "false");
map_json.put("RESULT_CODE", "200");
String ip = "";
HttpServletRequest req = ((ServletRequestAttributes)RequestContextHolder.currentRequestAttributes()).getRequest();
ip = req.getHeader("X-FORWARDED-FOR");
if (ip == null){
ip = req.getRemoteAddr();
}
//바꿀 전화번호가 회원의 기존 전화번호와 같을 경우 처리 불가
if(rm_mem.get("phone_num").equals(paramMap.get("phone_num"))) {
map_json.put("MSG", "변경 전화번호가 이전 전화번호와 같습니다.");
json = RenaStringUtil.getJSONFromMap(map_json);
return json;
}
json = RenaStringUtil.getJSONFromMap(map_json);
if(isValid == 0){
// check parameter for api
if(checkNeedParam(arrParam, paramMap) == true){
map_json.put("RESULT", "false");
json = RenaStringUtil.getJSONFromMap(map_json);
}else{
try {
map_json.put("RESULT", "true");
String is_test = RenaStringUtil.getData(paramMap, "is_test");
String phone_num = RenaStringUtil.getData(paramMap, "phone_num");
String check_num = DateUtil.getUniqueNumber(4);
paramMap.put("check_num", check_num);
paramMap.put("sms_cd_no", SMS_STATUS_READY);
ConstantResultCode.putResultCode(map_json, true, ConstantResultCode.RESULT_MEMBER_IS_BEING); // json result code
String s_no = String.valueOf(apiSMSBO.insert_sms_log(paramMap));
paramMap.put("s_no", s_no);
String arr[] = new String[7];
arr[0] = "sms"; // SMS/LMS 발송 구분
arr[1] = "sona_" + s_no; // 발송 결과 확인을 위한 고객이 생성 관리 하는 Unique Key (MAX 40byte) (해당 키를 이용하여 어떤 발송 건인지에 대한 구분을 해줌. 겹치지 않을만한 무작위 문자열)
arr[2] = "폰 인증"; // LMS 발송 시 제목으로 사용 SMS 발송 시는 수신자에게 내용이 보이지 않습니다.
arr[3] = "[이유식당] 인증번호 : " + check_num; // 본문 (90byte 제한: SMS의 경우)
arr[4] = SEND_PHONE_NUM; // 발신 번호(010-0000-0000 or 01000000000)
arr[5] = phone_num; // 수신 번호(010-0000-0000 or 01000000000)
arr[6] = "0"; // 예약 일자 "2013-07-30 12:00:00" 또는 "0" 0 또는 빈값(null)은 즉시 발송
String api_id = ConstantSystem.API_ID;
String api_key = ConstantSystem.API_KEY;
ApiClass api = new ApiClass(api_id, api_key);
String responseXml = null;
ApiResult res = null;
String sms_code = null;
String sms_msg = null;
try{
if("Y".equals(is_test) == false){
responseXml = api.send(arr);
res = api.getResult( responseXml );
System.out.println( "code = [" + res.getCode() + "] mesg=[" + res.getMesg() + "]" );
if( res.getCode().compareTo("0000") == 0 )
{
String resultXml = api.getResultXml(responseXml);
System.out.println("result xml : \n" + resultXml);
}
sms_code = res.getCode();
sms_msg = res.getMesg();
}else{
sms_code = "test_code";
sms_msg = "input:" + check_num;
}
paramMap.put("sms_cd_no", SMS_STATUS_READY);
}catch(Exception ex1){
sms_code = "EX";
sms_msg = ex1.getMessage();
paramMap.put("sms_cd_no", SMS_STATUS_SEND_FAIL);
}
paramMap.put("sms_code", sms_code);
paramMap.put("sms_msg", sms_msg);
apiSMSBO.update_sms_log_by_s_no(paramMap);
map_json.put("s_no", s_no);
map_json.put("check_num", check_num);
map_json.put("sms_code", sms_code);
map_json.put("sms_msg", sms_msg);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
map_json.put("RESULT", "false");
map_json.put("MSG", "시스템 장애가 발생하였습니다");
}
json = RenaStringUtil.getJSONFromMap(map_json);
}
}
return json;
}
@RequestMapping(value="confirm_sms", produces="text/plain;charset=UTF-8")
@ResponseBody
public String confirm_sms(@ModelAttribute("model") ModelMap model, HttpServletRequest request, HttpServletResponse response) {
@ -690,6 +826,132 @@ public class ApiSMSController extends AbstractControllerManager{
return json;
}
/**
* sms
* @param model
* @param request
* @return
*/
@RequestMapping(value="confirm_change_phone_sms", produces="text/plain;charset=UTF-8")
@ResponseBody
public String confirm_change_phone_sms(@ModelAttribute("model") ModelMap model, HttpServletRequest request) {
DataMap paramMap = this.getDataMapFromRequest(request);
// need params
String[] arrParam = {"s_no","phone_num","check_num"};
// check head parameter
int isValid = checkHeaderParam(AbstractControllerManager.CHECK_NEED_PARAMS, paramMap);
String json = "empty";
DataMap map_json = new DataMap();
map_json.put("RESULT", "false");
map_json.put("RESULT_CODE", "200");
HttpServletRequest req = ((ServletRequestAttributes)RequestContextHolder.currentRequestAttributes()).getRequest();
json = RenaStringUtil.getJSONFromMap(map_json);
if(isValid == 0){
// check parameter for api
if(checkNeedParam(arrParam, paramMap) == true){
map_json.put("RESULT", "false");
json = RenaStringUtil.getJSONFromMap(map_json);
}else{
try {
map_json.put("RESULT", "true");
/** 인증코드 확인 시작 **/
DataMap rm_check = apiSMSBO.select_sms_log_for_check(paramMap);
if(rm_check == null){
paramMap.put("sms_cd_no", SMS_STATUS_CHECK_FAIL);
apiSMSBO.update_sms_log_by_s_no(paramMap);
map_json.put("check_status", "N");
}else{
paramMap.put("sms_cd_no", SMS_STATUS_CHECK_SUCCESS);
apiSMSBO.update_sms_log_by_s_no(paramMap);
map_json.put("check_status", "Y");
map_json.put("s_no", "");
map_json.put("RESULT_CODE", "200");
json = RenaStringUtil.getJSONFromMap(map_json);
return json;
}
/** 인증코드 확인 종료 **/
//System.out.println(json);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
map_json.put("RESULT", "false");
map_json.put("MSG", "시스템 장애가 발생하였습니다");
}
json = RenaStringUtil.getJSONFromMap(map_json);
}
}
return json;
}
/**
*
* @param model
* @param request
* @return
*/
@RequestMapping(value="ajax_change_phone", produces="text/plain;charset=UTF-8")
@ResponseBody
public String ajax_change_phone(@ModelAttribute("model") ModelMap model, HttpServletRequest request) {
HttpSession session = request.getSession(false);
DataMap rm_mem = (DataMap) session.getAttribute(ConstantSystem.SESSION_RM_MEMBER);
DataMap paramMap = this.getDataMapFromRequest(request);
// need params
String[] arrParam = {"phone_num"};
// check head parameter
int isValid = checkHeaderParam(AbstractControllerManager.CHECK_NEED_PARAMS, paramMap);
String json = "empty";
DataMap map_json = new DataMap();
map_json.put("RESULT", "false");
map_json.put("RESULT_CODE", "200");
HttpServletRequest req = ((ServletRequestAttributes)RequestContextHolder.currentRequestAttributes()).getRequest();
json = RenaStringUtil.getJSONFromMap(map_json);
if(isValid == 0){
// check parameter for api
if(checkNeedParam(arrParam, paramMap) == true){
map_json.put("RESULT", "false");
json = RenaStringUtil.getJSONFromMap(map_json);
}else{
try {
paramMap.put("email", rm_mem.get("email"));
aPIMemberBO.update_member_phone(paramMap);
map_json.put("RESULT", "true");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
map_json.put("RESULT", "false");
map_json.put("MSG", "시스템 장애가 발생하였습니다");
}
json = RenaStringUtil.getJSONFromMap(map_json);
}
}
System.out.println("json:" + json);
String callback = RenaStringUtil.getData(paramMap, "callback");
//json = callback + "(" + json + ")";
return json;
}
/**
*
* @param model

@ -7,6 +7,8 @@ public interface APIMemberBO {
DataMap select_member_is_being_member_id(DataMap paramMap) throws Exception;
DataMap select_member_with_pwd(DataMap paramMap) throws Exception;
DataMap select_member_with_email_phone(DataMap paramMap) throws Exception;
Object update_member_phone(DataMap paramMap) throws Exception;
Object reset_pwd(DataMap paramMap) throws Exception;
Object update_member_with_pwd(DataMap paramMap) throws Exception;
}

@ -105,4 +105,24 @@ public class APIMemberBOImpl extends AbstractBOManager implements APIMemberBO {
return resultObj;
}
@Override
public Object update_member_phone(DataMap paramMap) throws Exception{
Object resultObj = null;
try {
generalDAO.setNamespace(SQLMAP_NAMESPACE);
generalDAO.startTransaction();
generalDAO.update("update_member_phone", paramMap);
generalDAO.commitTransaction();
} catch (SQLException e) {
throw e;
}finally{
generalDAO.endTransaction();
}
return resultObj;
}
}

@ -313,6 +313,7 @@ public class M_LoginController extends AbstractControllerManager{
return "m/login/view_pw_reset_phone_02";
}
@RequestMapping(value="logout")
public String logout(@ModelAttribute("model") ModelMap model, HttpServletRequest request, HttpServletResponse response
, RedirectAttributes redirectAttributes) {

@ -64,6 +64,31 @@ public class M_Member_envController extends AbstractControllerManager{
M_Util gmUtil = new M_Util();
/**
* SMS
* @param model
* @param request
* @return
*/
@RequestMapping(value="view_set_account_phone_confirm")
public String view_set_account_phone_confirm(@ModelAttribute("model") ModelMap model, HttpServletRequest request){
DataMap paramMap = gmUtil.getDataMapFromRequest(request);
gmUtil.redirectParam(model, paramMap);
return "m/member_env/view_set_account_phone_confirm";
}
/**
*
* @param model
* @param request
* @return
*/
@RequestMapping(value="view_set_account_phone_02")
public String view_set_account_phone_02(@ModelAttribute("model") ModelMap model, HttpServletRequest request){
DataMap paramMap = gmUtil.getDataMapFromRequest(request);
gmUtil.redirectParam(model, paramMap);
return "m/member_env/view_set_account_phone_02";
}
/**
* > > > ()

@ -63,6 +63,7 @@
FROM (
SELECT dbi_no
,food_cd
,meaning
,name_real
,keyword1
,keyword2

@ -136,4 +136,9 @@
AND password = #password#
</update>
<update id="update_member_phone" parameterClass="dataMap">
UPDATE tbl_member_confirm
SET phone_num = #phone_num#
WHERE email = #email#
</update>
</sqlMap>

@ -5,7 +5,7 @@
<div class="bf_food_modal">
<div class="cart_search">
<input id="search_text" name="search_text" onkeydown="javascript:if(event.keyCode == 13){fncCartList(); return false;}" placeholder="구매완료할 식재료를 검색해주세요.">
<input id="search_text" name="search_text" onkeydown="javascript:if(event.keyCode == 13){fncCartList(); return false;}" placeholder="구매완료 처리할 식재료를 검색해주세요.">
<button onclick="fncCartList()">검색</button>
</div>
@ -36,6 +36,13 @@
<div>${item['g']!}g</div>
</div>
</#list>
<#else>
<div class="item">
<div class="box">
<div><label>카트데 담긴 식재료가 없습니다.</label></div>
</div>
<div></div>
</div>
</#if>
</div>
</form>

@ -60,7 +60,7 @@
<div class="list">
<#if model['ingre']?has_content>
<#list model['ingre'] as item>
<a href="#" class="recommend_item bf_ingre">${item['name_real']!}</a>
<a href="#" class="recommend_item bf_ingre">${item['name_real']!}&nbsp;<p style="color:#5CD1E5;font-size:9pt">${item['meaning']!}</p></a>
</#list>
</#if>
</div>

@ -43,7 +43,7 @@
<!-- nutrition_introduce_box -->
<div class="nutrition_introduce_box">
<h2>조리과정</h2>
<h2>레시피</h2>
<p>
<#if model['rm']['recipe1']?exists><span class="recipe">${model['rm']['recipe1']!}</span></#if>
<#if model['rm']['recipe2']?exists><span class="recipe">${model['rm']['recipe2']!}</span></#if>
@ -76,36 +76,6 @@
</div>
<!-- //nutrition_introduce_in -->
<#if (model['rm_child']['m']>5)&&(model['rm_child']['m']<60)>
<!-- nutrition_subMain_suggest -->
<div class="nutrition_subMain_suggest">
<h2>영양추천</h2>
<div class="nutrition_subMain_suggest_in">
<h3>연관식재료</h3>
<ul class="nutrition_subMain_suggest_list">
<#if model['ingre']?has_content>
<#list model['ingre'] as item>
<li>
<a href="view_bf_ingredient.do?return_url=list_bf_ingredient&dbi_no=${item['dbi_no']!}">
<p class="img"><img src="${URL_STATIC_ROOT}/m/db/ingre/${item['food_cd']!}.png" onerror="this.src='${URL_STATIC_ROOT}/m/db/homemade/bowl.png';" ></p>
<p class="tit">${item['name_real']!}</p>
<ul>
<li>
<#if item['keyword1']?exists>${item['keyword1']!}</#if>
<#if item['keyword2']?exists>, ${item['keyword2']!}</#if>
<#if item['keyword3']?exists>, ${item['keyword3']!}</#if>
</li>
<li>조회수 ${item['views']!}</li>
</ul>
</a>
</li>
</#list>
</#if>
</ul>
</div>
</div>
<!-- //nutrition_subMain_suggest -->
</#if>
</div>
<!-- //nutrition_introduce_main -->

@ -36,13 +36,14 @@
//SMS 아이디 또는 패스워드를 찾기 위한 인증코드 발송
function ajax_send_sms(flag) {
if (is_loading == false) {
is_loading = true;
var phone_num = $('#phone').val();
if(phone_num == ''){
Swal.fire({ text: "휴대폰 번호를 입력해주세요.", icon: 'warning', showConfirmButton: false, timer: 1500 }); // success
is_loading == false
// stop_timer();
}else{
$.ajax({
@ -57,8 +58,7 @@
dataType:'json',
error:function(request,status,error){
alert("code:"+request.status+"\n"+"message:"+request.responseText+"\n"+"error:"+error);
// stop_timer();
is_loading == false
},
success:function(result){
console.log(result);
@ -69,25 +69,65 @@
if(RESULT == "true") {
if(s_no != ''){
// start_timer();
// Swal.fire({ text: "발송되었습니다.", icon: 'success', showConfirmButton: false, timer: 1500 }); // success
//아이디 찾기의 경우
if(flag == 1) {
if(flag == 1) { //아이디 찾기의 경우
location.href = "${URL_ROOT}/m/login/view_find_id_02.do?phone_num=" + phone_num + "&s_no=" + s_no;
} else if(flag == 2) { //패스워드 찾기의 경우
location.href = "${URL_ROOT}/m/login/view_pw_reset_phone_02.do?phone_num=" + phone_num + "&s_no=" + s_no;
}
}else{
Swal.fire({ text: "인증코드가 발송되지 않았습니다.", icon: 'warning', showConfirmButton: false, timer: 1500 }); // success
// stop_timer();
}
} else {
// Swal.fire({ text: RESULT_MSG, icon: 'success', showConfirmButton: false, timer: 1500 }); // success
// stop_timer();
location.href='${URL_ROOT}/m/login/view_find_id_no_result.do?email=' + RESULT_MSG;
}
is_loading = false;
}
});
}
}
}
//전화번호 변경을 위한 인증코드 발송
function ajax_send_change_phone(flag) {
if (is_loading == false) {
is_loading = true;
var phone_num = $('#phone').val();
if(phone_num == ''){
Swal.fire({ text: "휴대폰 번호를 입력해주세요.", icon: 'warning', showConfirmButton: false, timer: 1500 }); // success
is_loading == false
}else{
$.ajax({
url:'${URL_ROOT}/api/sms/send_sms_change_phone.do?1=1',
type:'get',
data: {
"pt": 0
,"is_test":"N"
,"phone_num": phone_num
,"sms_use_cd_no": "SMS_CHANGE_PWD"
},
dataType:'json',
error:function(request,status,error){
alert("code:"+request.status+"\n"+"message:"+request.responseText+"\n"+"error:"+error);
is_loading == false
},
success:function(result){
console.log(result);
var RESULT = result.RESULT;
var RESULT_MSG = result.MSG;
var s_no = result.s_no;
if(RESULT == "true") {
if(s_no != ''){
location.href = "${URL_ROOT}/m/member_env/view_set_account_phone_confirm.do?phone_num=" + phone_num + "&s_no=" + s_no;
}else{
Swal.fire({ text: "인증코드가 발송되지 않았습니다.", icon: 'warning', showConfirmButton: false, timer: 1500 }); // success
}
} else {
Swal.fire({ text: RESULT_MSG, icon: 'warning', showConfirmButton: false, timer: 1500 }); // success
}
is_loading = false;
}
@ -145,6 +185,88 @@
}
}
//전화번호 변경을 위한 인증번호 확인
function ajax_confirm_change_phone_sms() {
if (is_loading == false) {
is_loading = true;
var s_no = $('#s_no').val();
var phone_num = $('#phone').val();
var check_num = $('#check_num').val();
if(check_num == ''){
Swal.fire({ text: "인증번호를 입력해주세요.", icon: 'warning', showConfirmButton: false, timer: 1500 }); // success
is_loading = false;
}else{
$.ajax({
url:'${URL_ROOT}/api/sms/confirm_change_phone_sms.do?1=1',
type:'post',
data: {
"pt": 0
,"is_test":"N"
,"s_no": s_no
,"phone_num": phone_num
,"check_num": check_num
,"sms_use_cd_no": "SMS_CHANGE_PWD"
},
dataType:'json',
error:function(request,status,error){
alert("code:"+request.status+"\n"+"message:"+request.responseText+"\n"+"error:"+error);
// stop_timer();
},
success:function(result){
console.log(result);
// var RESULT = result.RESULT;
// var RESULT_MSG = result.RESULT_MSG;
if(result.check_status == 'Y'){
// stop_timer();
location.href='${URL_ROOT}/m/member_env/view_set_account_phone_02.do?phone=' + phone_num + "&check_num=" + check_num;
}else{
Swal.fire({ text: "인증에 실패했습니다.", icon: 'warning', showConfirmButton: false, timer: 1500 }); // success
is_loading = false;
}
$('#check_status').val(result.check_status);
}
});
}
}
}
//전화번호 변경 처리
function ajax_change_phone() {
if (is_loading == false) {
is_loading = true;
var phone_num = $('#phone').val();
$.ajax({
url:'${URL_ROOT}/api/sms/ajax_change_phone.do?1=1',
type:'post',
data: {
"phone_num": phone_num
},
dataType:'json',
error:function(request,status,error){
is_loading = false;
alert("code:"+request.status+"\n"+"message:"+request.responseText+"\n"+"error:"+error);
},
success:function(result){
console.log(result);
// var RESULT = result.RESULT;
// var RESULT_MSG = result.RESULT_MSG;
if(result.RESULT_CODE == '200'){
Swal.fire({text: '전화번호가 변경 되었습니다.'}).then((result)=>{ window.location.href = '${URL_ROOT}/m/member_env/setting_nm.do?return_url=setting&view_nm=view_set_account' })
}else{
Swal.fire({ text: "전화번호 변경처리 실패했습니다.", icon: 'warning', showConfirmButton: false, timer: 1500 }); // success
}
is_loading = false;
}
});
}
}
//SMS 패스워드변경을 위한 인증번호 확인
function ajax_confirm_pw_sms() {
if (is_loading == false) {

@ -162,6 +162,8 @@
<#--location.href = "${URL_ROOT}/m/bf_food/list_bf_homemade_recommend.do?smc_no=" + $("#smc_no").val() + "&return_url=list_bf_homemade_recommend";-->
location.href = "${URL_ROOT}/m/bf_food/list_bf_homemade_recommend.do?return_url=list_bf_homemade_recommend";
}
</script>
</html>

@ -25,6 +25,7 @@
<script src="${URL_STATIC_ROOT}/static/js/moment.js" type="text/javascript" ></script>
<script src="../js/common.js" type="text/javascript" ></script>
<script src="../js/util.js" type="text/javascript" ></script>
<script src="${URL_STATIC_ROOT}/static/renamaster/js/cookie.js"></script>
<script src="${URL_STATIC_ROOT}/static/renamaster/js/renamaster_map.js"></script>
<script src="${URL_STATIC_ROOT}/static/renamaster/js/renamaster_util.js"></script>

@ -16,10 +16,10 @@
<div class="search_phone">
<h3>비밀번호 재설정</h3>
<div class="input_search_phone">
<input type="password" id="password_1" name="password_1" value="" class="input_box" placeholder="영문/숫자/특수문자2조합 9~15자 이내로 작성해주세요." />
<input type="password" maxlength="15" id="password_1" name="password_1" value="" class="input_box" placeholder="영문/숫자/특수문자2조합 9~15자 이내로 작성해주세요." />
</div>
<div class="input_search_phone">
<input type="password" id="password_2" name="password_2" placeholder="비밀번호 재입력" class="input_box" placeholder="비밀번호를 확인해주세요."/>
<input type="password" maxlength="15" id="password_2" name="password_2" placeholder="비밀번호 재입력" class="input_box" placeholder="비밀번호를 확인해주세요."/>
</div>
<div class="input_search_phone_btn">
<a href="javascript:fncChangePw();">로그인</a>

@ -16,7 +16,7 @@
<div class="search_phone">
<p>전화번호</p>
<div class="input_search_phone">
<input type="number" id="phone" name="phone" value="" placeholder="가입 시 사용한 전화번호를 입력하세요" class="input_box" onfocus="this.placeholder=''" onblur="this.placeholder='가입 시 사용한 전화번호를 입력하세요'" />
<input type="text" maxlength="15" onkeyup="this.value = phone_mask(this.value)" id="phone" name="phone" value="" placeholder="가입 시 사용한 전화번호를 입력하세요.(숫자만 가능)" class="input_box" />
</div>
<div class="input_search_phone_btn">
<a href="javascript:ajax_send_sms(1);">인증코드 발송</a>

@ -22,7 +22,7 @@
</div>
<p>인증코드</p>
<div class="input_search_phone">
<input type="number" id="check_num" name="check_num" placeholder="인증코드를 입력하세요" class="input_box" />
<input type="text" maxlength="4" id="check_num" name="check_num" placeholder="인증코드를 입력하세요" class="input_box" />
</div>
<div class="input_search_phone_btn">
<a href="javascript:ajax_confirm_sms();">인증코드 확인</a>

@ -22,12 +22,12 @@
<div class="sign_up_chk">
<h5>이름</h5>
<div class="input_name">
<input type="text" id="name" name="name" placeholder="이름을 입력하세요" class="input_box" onfocus="this.placeholder=''"
<input type="text" id="name" name="name" placeholder="이름을 입력하세요" maxlength="30" class="input_box" onfocus="this.placeholder=''"
onblur="this.placeholder='이름을 입력하세요'" />
</div>
<h5>전화번호</h5>
<div class="input_phone">
<input type="number" id="phone" name="phone" placeholder="010-xxxx-zzzz" value="" class="input_box" onfocus="this.placeholder=''"
<input type="text" maxlength="15" id="phone" name="phone" onkeyup="this.value = phone_mask(this.value)" placeholder="010-xxxx-zzzz" value="" class="input_box" onfocus="this.placeholder=''"
onblur="this.placeholder='전화번호를 입력하세요'" />
</div>
@ -44,7 +44,6 @@
<!-- //wrap -->
</body>
<script>
var is_loading = false;
var s_time = 180;

@ -34,7 +34,7 @@
</div>
<h5>인증코드</h5>
<div class="input_sign_phone">
<input type="text" id="check_num" name="check_num" class="input_box" />
<input type="text" maxlength="4" id="check_num" name="check_num" class="input_box" />
</div>
<div class="input_search_phone_btn">
@ -93,7 +93,7 @@
// Swal.fire({ text: "인증되었습니다.", icon: 'success', showConfirmButton: false, timer: 1500 }); // success
location.href='${URL_ROOT}/m/login/view_join_member_02.do';
}else{
Swal.fire({ text: "인증에 실패했습니다.", icon: 'warning', showConfirmButton: false, timer: 1500 }); // success
Swal.fire({ text: "인증에 실패했습니다. 인증번호가 맞지 않거나 인증시간 3분 초과입니다.", icon: 'warning', showConfirmButton: false, timer: 1500 }); // success
is_loading = false;
}

@ -53,7 +53,7 @@
console.log(result);
if(result.RESULT == "0") {
$("#syncDiv").show();
$(".result").show();
alert("인증 성공 하였습니다.");
} else {
Swal.fire({text: '인증 실패 하였습니다. 인증코드 확인 부탁드립니다.'});

@ -13,7 +13,7 @@
<div class="search_pw_email">
<p>이메일</p>
<div class="input_search_phone">
<input type="text" id="email" name="email" placeholder="가입 시 사용한 이메일을 입력하세요" class="input_box" onfocus="this.placeholder=''" onblur="this.placeholder='가입 시 사용한 이메일을 입력하세요'" />
<input type="text" maxlength="30" id="email" name="email" placeholder="가입 시 사용한 이메일을 입력하세요" class="input_box" onfocus="this.placeholder=''" onblur="this.placeholder='가입 시 사용한 이메일을 입력하세요'" />
<div class="input_search_phone_btn">
<a href="javascript:ajax_find_pwd();">인증요청</a>
</div>

@ -17,7 +17,7 @@
</div>
<p>인증코드</p>
<div class="input_search_phone">
<input type="number" id="check_num" name="check_num" placeholder="인증코드를 입력하세요" class="input_box" />
<input type="text" maxlength="4" id="check_num" name="check_num" placeholder="인증코드를 입력하세요" class="input_box" />
</div>
<div class="input_search_phone_btn">
<a href="javascript:ajax_confirm_email();">인증코드 확인</a>

@ -11,14 +11,13 @@
<div id="search_pw" class="search_pw">
<div class="search_pw_email">
<p>이메일</p>
<p>전화번호</p>
<div class="input_search_phone">
<input type="number" id="phone" name="phone" placeholder="가입 시 사용한 전화번호를 입력하세요" class="input_box" onfocus="this.placeholder=''" onblur="this.placeholder='가입 시 사용한 전화번호를 입력하세요'" />
<input type="text" maxlength="15" id="phone" name="phone" onkeyup="this.value = phone_mask(this.value)" placeholder="가입 시 사용한 전화번호를 입력하세요" class="input_box" />
<div class="input_search_phone_btn">
<a href="javascript:ajax_send_sms(2);">인증요청</a>
</div>
</div>
</div>
</div>

@ -22,7 +22,7 @@
</div>
<p>인증코드</p>
<div class="input_search_phone">
<input type="number" id="check_num" name="check_num" placeholder="인증코드를 입력하세요" class="input_box" />
<input type="text" maxlength="4" id="check_num" name="check_num" placeholder="인증코드를 입력하세요" class="input_box" />
</div>
<div class="input_search_phone_btn">
<a href="javascript:ajax_confirm_pw_sms();">인증코드 확인</a>

@ -3,7 +3,7 @@
<body class="bg_setting">
<div class="wrap">
<header class="header_wrapper">
<a href="javascript:history.back();" class="side_Lbtn hidden pre_btn">이전으로</a>
<a href="${URL_ROOT}/m/member_env/setting_nm.do?view_nm=setting" class="side_Lbtn hidden pre_btn">이전으로</a>
<h1 class="header_title">계정 연동 하기</h1>
<a href="#" class="side_Rbtn hidden"></a>
</header>
@ -11,7 +11,7 @@
<div class="l_list">
<h1 class="l_title">이미 가입한 사용자 설정에서 인증코드를 입력하세요.</h1>
<div class="cont_code input">
<input class="view_code" id="sync_num" name="sync_num" placeholder="인증코드를 입력하세요.">
<input class="view_code" type="text" maxlength="4" id="sync_num" name="sync_num" placeholder="인증코드를 입력하세요.">
<button class="btn_auth" id="btn_auth">인증하기</button>
</div>
<div class="description">

@ -3,7 +3,7 @@
<body class="bg_setting">
<div class="wrap">
<header class="header_wrapper">
<a href="javascript:history.back();" class="side_Lbtn hidden pre_btn">이전으로</a>
<a href="${URL_ROOT}/m/member_env/setting_nm.do?view_nm=setting" class="side_Lbtn hidden pre_btn">이전으로</a>
<h1 class="header_title">계정 연동</h1>
<a href="#" class="side_Rbtn hidden"></a>
</header>

@ -1,218 +1,28 @@
<#include "/m/include/index_top.ftl">
<body class="bg_setting">
<div class="wrap">
<header class="header_wrapper">
<a href="javascript:back.return_url()" class="side_Lbtn hidden pre_btn">이전으로</a>
<h1 class="header_title">계정관리</h1>
<a href="#" class="side_Rbtn hidden"></a>
</header>
<main class="m_set_account m_set_account_name">
<form name="frmMember" id="frmMember" method="POST">
<input type="hidden" name="is_test" id="is_test" value="N" />
<input type="hidden" name="s_no" id="s_no" value="" />
<input type="hidden" name="sms_use_cd_no" id="sms_use_cd_no" value="SMS_USE_CODE_UPDATE"/>
<input type="hidden" name="check_status" id="check_status" value=""/>
<h1 class="l_title">변경하실 휴대전화 번호를 입력해주세요</h1>
<div class="l_list">
<div class="p_list_item p_border_box">
<div class="p_input_box">
<input type="number" id="phone_num" name="phone_num" class="required" data-tit="휴대전화번호" placeholder="'-'없이 번호만 입력" >
</div>
</div>
<div class="m_set_account_btn"><button type="button" id="" name="" class="btns blue_btn" onclick="auth.ajax_send_sms()">인증요청</button></div>
</div>
<div class="l_list">
<p class="l_info">※ 휴대폰으로 전송된 인증번호를 입력해주세요.</p>
<div class="timer_box">인증 유효 시간 <span id="id_limit_time" class="timer emphasis_tit">02:59</span></div>
<div class="p_list_item p_border_box">
<div class="p_input_box">
<#-- 인증 문자 발송 후 required 클래스 추가 -->
<input type="text" id="check_num" name="check_num" class="" data-tit="인증번호" placeholder="인증번호 입력">
</div>
</div>
<div class="m_set_account_btn"><button type="submit" id="id_check_num" name="" class="btns grey_btn">인증확인</button></div>
<input type="hidden" id="s_no" value="">
<div class="wrap">
<header class="header_wrapper">
<a href="javascript:history.back();" class="side_Lbtn hidden pre_btn">이전으로</a>
<h1 class="header_title">전화번호 변경</h1>
<a href="#" class="side_Rbtn hidden"></a>
</header>
<div id="search_pw" class="search_pw">
<div class="search_pw_email">
<p>전화번호</p>
<div class="input_search_phone">
<input type="text" maxlength="15" id="phone" name="phone" onkeyup="this.value = phone_mask(this.value)" placeholder="변경하실 휴대전화 번호를 입력하세요" class="input_box" />
<div class="input_search_phone_btn">
<a href="javascript:ajax_send_change_phone();">인증코드발송</a>
</div>
</form>
<#include "/m/include/index_bottom_info.ftl">
</main>
</div>
</div>
</div>
<script>
var member = {
init: function(){
$('#frmMember').on('submit',function(e){
if(!auth.timer_check){
e.preventDefault()
return;
}
if($('#check_status').val()!='Y'){
e.preventDefault()
auth.ajax_confirm_sms()
return;
}
e.preventDefault()
return;
})
},
ajax_update_sn_member_phone: function(){
var data = $('#frmMember').serialize()
$.ajax({
url:'${URL_ROOT}/m/member_env/ajax_update_member_phone.do?1=1',
type:'post',
data: data,
dataType:'json',
error:function(request,status,error){
Swal.fire({text: '오류가 발생했습니다'})
auth.is_loading = false
},
success:function(result){
console.log(result)
var RESULT = result.RESULT
if(RESULT == 0){ //0:RESULT_SUCCESS
Swal.fire({text: '변경되었습니다'}).then((result) => { location.reload(); })
}else if(RESULT == 5){ //5: RESULT_CUSTOM_MSG
Swal.fire({html: result.MSG})
}else{
Swal.fire({text: '변경에 실패했습니다'})
}
},
})
},
}
var auth = {
timer_check : null,
init:function(){
},
start_timer : function() {
this.stop_timer()
$('#id_check_num').addClass('blue_btn')
$('#id_check_num').removeClass('grey_btn')
this.timer_check = setInterval(function() {
if(s_time <= 0){
this.stop_timer()
Swal.fire({text: '인증 시간이 만료되었습니다'})
}else{
var min = parseInt((--s_time%3600)/60)
var sec = s_time%60
var remain_time = (min < 10? "0" + min : min) + ":" + (sec < 10 ? "0" + sec : sec)
$('#id_limit_time').text(remain_time)
}
}.bind(this), 1000)
},
stop_timer : function(){
s_time = 180
clearInterval(this.timer_check)
this.is_loading = false
this.timer_check = null
// 버튼 끄기
$('#id_check_num').addClass('grey_btn')
$('#id_check_num').removeClass('blue_btn')
// send_sms 결과 초기화
$('#s_no').val('')
$('#check_status').val('')
$('#check_num').val('')
$('#check_num').removeClass('required')
},
ajax_send_sms: function(){
if (!SNValidator.validateWithAlert('#frmMember')) {
this.stop_timer()
return;
} else if(!SNUtil.regPh.test($("#phone_num").val())){
this.stop_timer()
Swal.fire({text: '올바른 휴대전화 번호를 입력하세요'})
return;
} else {
this.stop_timer()
}
var data = $('#frmMember').serialize()
$.ajax({
url:'${URL_ROOT}/api/sms/send_sms.do?1=1',
type:'post',
data: data,
dataType:'json',
error:function(request,status,error){
this.stop_timer()
Swal.fire({text: '오류가 발생했습니다'})
}.bind(this),
success:function(result){
console.log(result)
this.stop_timer()
var RESULT = result.RESULT
var RESULT_MSG = result.RESULT_MSG
var s_no = result.s_no
if(result.RESULT_CODE == "401"){ //401: member is being
this.stop_timer();
Swal.fire({text: result.sms_msg})
}else if(result.RESULT == 'true'){
// confirm_sms DATA세팅
this.start_timer();
$('#s_no').val(s_no);
$('#check_num').addClass('required')
Swal.fire({text: '발송되었습니다'})
}else{
this.stop_timer();
Swal.fire({text: '오류가 발생했습니다'})
}
}.bind(this),
})
},
ajax_confirm_sms: function(){
if (!SNValidator.validateWithAlert('#frmMember')) {
return;
}
var data = $('#frmMember').serialize()
$.ajax({
url:'${URL_ROOT}/api/sms/confirm_sms.do?1=1',
type:'post',
data: data,
dataType:'json',
error:function(request,status,error){
Swal.fire({text: '오류가 발생했습니다'})
}.bind(this),
success:function(result){
console.log(result)
if(result.RESULT == 'true' && result.check_status == 'Y'){
// confirm_sms DATA세팅
$('#check_status').val(result.check_status)
//완료처리
member.ajax_update_sn_member_phone()
}else{
Swal.fire({text: '올바른 인증번호를 입력하세요'})
}
}.bind(this),
})
}
}
$(function(){
auth.init()
member.init()
})
</script>
<#include "/m/member_env/include_return_url.ftl">
</div>
</body>
<#include "/m/include/index_bottom.ftl">
<#include "/m/include/confirm.ftl">
<#include "/m/include/index_bottom.ftl">

@ -0,0 +1,42 @@
<#include "/m/include/index_top.ftl">
<body>
<!-- wrap -->
<div class="wrap" id="view_search_id">
<!-- header_sub -->
<header class="header_wrapper">
<a href="javascript:history.back();" class="side_Lbtn hidden pre_btn">이전으로</a>
<h1 class="header_title">아이디 찾기</h1>
</header>
<!-- //header_sub -->
<!-- search_id -->
<div id="search_id" class="search_id">
<div class="search_phone">
<h3>전화번호</h3>
<div class="input_search_phone">
<input readonly type="number" id="phone" name="phone" value="${model['phone']}" class="input_box" />
<p>* 번호로 인증코드를 발송하였습니다.</p>
</div>
<p>인증코드</p>
<div class="input_search_phone">
<input readonly type="text" maxlength="4" id="check_num" name="check_num" value="${model['check_num']}" class="input_box" />
<p id="checkNumTextDiv">인증코드가 확인 되었습니다.</p>
</div>
<div class="input_search_phone_btn">
<a href="javascript:ajax_change_phone();">변경하기</a>
</div>
</div>
</div>
</div>
</div>
<!-- nutrition_kinds -->
</div>
<!-- //wrap -->
</body>
<#include "/m/include/confirm.ftl">
<#include "/m/include/index_bottom.ftl">

@ -0,0 +1,218 @@
<#include "/m/include/index_top.ftl">
<body class="bg_setting">
<div class="wrap">
<header class="header_wrapper">
<a href="javascript:back.return_url()" class="side_Lbtn hidden pre_btn">이전으로</a>
<h1 class="header_title">계정관리</h1>
<a href="#" class="side_Rbtn hidden"></a>
</header>
<main class="m_set_account m_set_account_name">
<form name="frmMember" id="frmMember" method="POST">
<input type="hidden" name="is_test" id="is_test" value="N" />
<input type="hidden" name="s_no" id="s_no" value="" />
<input type="hidden" name="sms_use_cd_no" id="sms_use_cd_no" value="SMS_USE_CODE_UPDATE"/>
<input type="hidden" name="check_status" id="check_status" value=""/>
<h1 class="l_title">변경하실 휴대전화 번호를 입력해주세요</h1>
<div class="l_list">
<div class="p_list_item p_border_box">
<div class="p_input_box">
<input type="number" id="phone_num" name="phone_num" class="required" data-tit="휴대전화번호" placeholder="'-'없이 번호만 입력" >
</div>
</div>
<div class="m_set_account_btn"><button type="button" id="" name="" class="btns blue_btn" onclick="auth.ajax_send_sms()">인증요청</button></div>
</div>
<div class="l_list">
<p class="l_info">※ 휴대폰으로 전송된 인증번호를 입력해주세요.</p>
<div class="timer_box">인증 유효 시간 <span id="id_limit_time" class="timer emphasis_tit">02:59</span></div>
<div class="p_list_item p_border_box">
<div class="p_input_box">
<#-- 인증 문자 발송 후 required 클래스 추가 -->
<input type="text" id="check_num" name="check_num" class="" data-tit="인증번호" placeholder="인증번호 입력">
</div>
</div>
<div class="m_set_account_btn"><button type="submit" id="id_check_num" name="" class="btns grey_btn">인증확인</button></div>
</div>
</form>
<#include "/m/include/index_bottom_info.ftl">
</main>
</div>
<script>
var member = {
init: function(){
$('#frmMember').on('submit',function(e){
if(!auth.timer_check){
e.preventDefault()
return;
}
if($('#check_status').val()!='Y'){
e.preventDefault()
auth.ajax_confirm_sms()
return;
}
e.preventDefault()
return;
})
},
ajax_update_sn_member_phone: function(){
var data = $('#frmMember').serialize()
$.ajax({
url:'${URL_ROOT}/m/member_env/ajax_update_member_phone.do?1=1',
type:'post',
data: data,
dataType:'json',
error:function(request,status,error){
Swal.fire({text: '오류가 발생했습니다'})
auth.is_loading = false
},
success:function(result){
console.log(result)
var RESULT = result.RESULT
if(RESULT == 0){ //0:RESULT_SUCCESS
Swal.fire({text: '변경되었습니다'}).then((result) => { location.reload(); })
}else if(RESULT == 5){ //5: RESULT_CUSTOM_MSG
Swal.fire({html: result.MSG})
}else{
Swal.fire({text: '변경에 실패했습니다'})
}
},
})
},
}
var auth = {
timer_check : null,
init:function(){
},
start_timer : function() {
this.stop_timer()
$('#id_check_num').addClass('blue_btn')
$('#id_check_num').removeClass('grey_btn')
this.timer_check = setInterval(function() {
if(s_time <= 0){
this.stop_timer()
Swal.fire({text: '인증 시간이 만료되었습니다'})
}else{
var min = parseInt((--s_time%3600)/60)
var sec = s_time%60
var remain_time = (min < 10? "0" + min : min) + ":" + (sec < 10 ? "0" + sec : sec)
$('#id_limit_time').text(remain_time)
}
}.bind(this), 1000)
},
stop_timer : function(){
s_time = 180
clearInterval(this.timer_check)
this.is_loading = false
this.timer_check = null
// 버튼 끄기
$('#id_check_num').addClass('grey_btn')
$('#id_check_num').removeClass('blue_btn')
// send_sms 결과 초기화
$('#s_no').val('')
$('#check_status').val('')
$('#check_num').val('')
$('#check_num').removeClass('required')
},
ajax_send_sms: function(){
if (!SNValidator.validateWithAlert('#frmMember')) {
this.stop_timer()
return;
} else if(!SNUtil.regPh.test($("#phone_num").val())){
this.stop_timer()
Swal.fire({text: '올바른 휴대전화 번호를 입력하세요'})
return;
} else {
this.stop_timer()
}
var data = $('#frmMember').serialize()
$.ajax({
url:'${URL_ROOT}/api/sms/send_sms.do?1=1',
type:'post',
data: data,
dataType:'json',
error:function(request,status,error){
this.stop_timer()
Swal.fire({text: '오류가 발생했습니다'})
}.bind(this),
success:function(result){
console.log(result)
this.stop_timer()
var RESULT = result.RESULT
var RESULT_MSG = result.RESULT_MSG
var s_no = result.s_no
if(result.RESULT_CODE == "401"){ //401: member is being
this.stop_timer();
Swal.fire({text: result.sms_msg})
}else if(result.RESULT == 'true'){
// confirm_sms DATA세팅
this.start_timer();
$('#s_no').val(s_no);
$('#check_num').addClass('required')
Swal.fire({text: '발송되었습니다'})
}else{
this.stop_timer();
Swal.fire({text: '오류가 발생했습니다'})
}
}.bind(this),
})
},
ajax_confirm_sms: function(){
if (!SNValidator.validateWithAlert('#frmMember')) {
return;
}
var data = $('#frmMember').serialize()
$.ajax({
url:'${URL_ROOT}/api/sms/confirm_sms.do?1=1',
type:'post',
data: data,
dataType:'json',
error:function(request,status,error){
Swal.fire({text: '오류가 발생했습니다'})
}.bind(this),
success:function(result){
console.log(result)
if(result.RESULT == 'true' && result.check_status == 'Y'){
// confirm_sms DATA세팅
$('#check_status').val(result.check_status)
//완료처리
member.ajax_update_sn_member_phone()
}else{
Swal.fire({text: '올바른 인증번호를 입력하세요'})
}
}.bind(this),
})
}
}
$(function(){
auth.init()
member.init()
})
</script>
<#include "/m/member_env/include_return_url.ftl">
</body>
<#include "/m/include/index_bottom.ftl">

@ -0,0 +1,42 @@
<#include "/m/include/index_top.ftl">
<body>
<!-- wrap -->
<div class="wrap" id="view_search_id">
<!-- header_sub -->
<header class="header_wrapper">
<a href="javascript:history.back();" class="side_Lbtn hidden pre_btn">이전으로</a>
<h1 class="header_title">아이디 찾기</h1>
</header>
<!-- //header_sub -->
<!-- search_id -->
<div id="search_id" class="search_id">
<input type="hidden" id="s_no" value="${model['s_no']}">
<div class="search_phone">
<h3>전화번호</h3>
<div class="input_search_phone">
<input readonly type="number" id="phone" name="phone" value="${model['phone_num']}" class="input_box" />
<p>* 번호로 인증코드를 발송하였습니다.</p>
</div>
<p>인증코드</p>
<div class="input_search_phone">
<input type="text" maxlength="4" id="check_num" name="check_num" value="" class="input_box" />
</div>
<div class="input_search_phone_btn">
<a href="javascript:ajax_confirm_change_phone_sms();">인증코드 확인</a>
</div>
</div>
</div>
</div>
</div>
<!-- nutrition_kinds -->
</div>
<!-- //wrap -->
</body>
<#include "/m/include/confirm.ftl">
<#include "/m/include/index_bottom.ftl">

@ -0,0 +1,8 @@
// 전화번호 숫자와 대시만 허용
function phone_mask(objValue) {
var v = objValue;
v = v.replace(/[a-zA-Z]/g, "");
v = v.replace( /[\{\}\[\]\/?,;:|\)*~`!^\-_+<>@\#$%&\\\=\(\'\"]/gi, "");
return v;
}
Loading…
Cancel
Save