최초 세팅

This commit is contained in:
bd091
2025-10-18 11:06:19 +09:00
commit bf0778601f
2497 changed files with 572903 additions and 0 deletions

View File

@@ -0,0 +1,374 @@
/*!
* Datetimepicker for Bootstrap 3
* version : 4.17.47
* https://github.com/Eonasdan/bootstrap-datetimepicker/
*/
.bootstrap-datetimepicker-widget {
list-style: none;
}
.bootstrap-datetimepicker-widget.dropdown-menu {
display: block;
margin: 2px 0;
padding: 4px;
width: 19em;
}
@media (min-width: 768px) {
.bootstrap-datetimepicker-widget.dropdown-menu.timepicker-sbs {
width: 38em;
}
}
@media (min-width: 992px) {
.bootstrap-datetimepicker-widget.dropdown-menu.timepicker-sbs {
width: 38em;
}
}
@media (min-width: 1200px) {
.bootstrap-datetimepicker-widget.dropdown-menu.timepicker-sbs {
width: 38em;
}
}
.bootstrap-datetimepicker-widget.dropdown-menu:before,
.bootstrap-datetimepicker-widget.dropdown-menu:after {
content: '';
display: inline-block;
position: absolute;
}
.bootstrap-datetimepicker-widget.dropdown-menu.bottom:before {
border-left: 7px solid transparent;
border-right: 7px solid transparent;
border-bottom: 7px solid #ccc;
border-bottom-color: rgba(0, 0, 0, 0.2);
top: -7px;
left: 7px;
}
.bootstrap-datetimepicker-widget.dropdown-menu.bottom:after {
border-left: 6px solid transparent;
border-right: 6px solid transparent;
border-bottom: 6px solid white;
top: -6px;
left: 8px;
}
.bootstrap-datetimepicker-widget.dropdown-menu.top:before {
border-left: 7px solid transparent;
border-right: 7px solid transparent;
border-top: 7px solid #ccc;
border-top-color: rgba(0, 0, 0, 0.2);
bottom: -7px;
left: 6px;
}
.bootstrap-datetimepicker-widget.dropdown-menu.top:after {
border-left: 6px solid transparent;
border-right: 6px solid transparent;
border-top: 6px solid white;
bottom: -6px;
left: 7px;
}
.bootstrap-datetimepicker-widget.dropdown-menu.pull-right:before {
left: auto;
right: 6px;
}
.bootstrap-datetimepicker-widget.dropdown-menu.pull-right:after {
left: auto;
right: 7px;
}
.bootstrap-datetimepicker-widget .list-unstyled {
margin: 0;
}
.bootstrap-datetimepicker-widget a[data-action] {
padding: 6px 0;
}
.bootstrap-datetimepicker-widget a[data-action]:active {
box-shadow: none;
}
.bootstrap-datetimepicker-widget .timepicker-hour,
.bootstrap-datetimepicker-widget .timepicker-minute,
.bootstrap-datetimepicker-widget .timepicker-second {
width: 54px;
font-weight: bold;
font-size: 1.2em;
margin: 0;
}
.bootstrap-datetimepicker-widget button[data-action] {
padding: 6px;
}
.bootstrap-datetimepicker-widget .btn[data-action="incrementHours"]::after {
position: absolute;
width: 1px;
height: 1px;
margin: -1px;
padding: 0;
overflow: hidden;
clip: rect(0, 0, 0, 0);
border: 0;
content: "Increment Hours";
}
.bootstrap-datetimepicker-widget .btn[data-action="incrementMinutes"]::after {
position: absolute;
width: 1px;
height: 1px;
margin: -1px;
padding: 0;
overflow: hidden;
clip: rect(0, 0, 0, 0);
border: 0;
content: "Increment Minutes";
}
.bootstrap-datetimepicker-widget .btn[data-action="decrementHours"]::after {
position: absolute;
width: 1px;
height: 1px;
margin: -1px;
padding: 0;
overflow: hidden;
clip: rect(0, 0, 0, 0);
border: 0;
content: "Decrement Hours";
}
.bootstrap-datetimepicker-widget .btn[data-action="decrementMinutes"]::after {
position: absolute;
width: 1px;
height: 1px;
margin: -1px;
padding: 0;
overflow: hidden;
clip: rect(0, 0, 0, 0);
border: 0;
content: "Decrement Minutes";
}
.bootstrap-datetimepicker-widget .btn[data-action="showHours"]::after {
position: absolute;
width: 1px;
height: 1px;
margin: -1px;
padding: 0;
overflow: hidden;
clip: rect(0, 0, 0, 0);
border: 0;
content: "Show Hours";
}
.bootstrap-datetimepicker-widget .btn[data-action="showMinutes"]::after {
position: absolute;
width: 1px;
height: 1px;
margin: -1px;
padding: 0;
overflow: hidden;
clip: rect(0, 0, 0, 0);
border: 0;
content: "Show Minutes";
}
.bootstrap-datetimepicker-widget .btn[data-action="togglePeriod"]::after {
position: absolute;
width: 1px;
height: 1px;
margin: -1px;
padding: 0;
overflow: hidden;
clip: rect(0, 0, 0, 0);
border: 0;
content: "Toggle AM/PM";
}
.bootstrap-datetimepicker-widget .btn[data-action="clear"]::after {
position: absolute;
width: 1px;
height: 1px;
margin: -1px;
padding: 0;
overflow: hidden;
clip: rect(0, 0, 0, 0);
border: 0;
content: "Clear the picker";
}
.bootstrap-datetimepicker-widget .btn[data-action="today"]::after {
position: absolute;
width: 1px;
height: 1px;
margin: -1px;
padding: 0;
overflow: hidden;
clip: rect(0, 0, 0, 0);
border: 0;
content: "Set the date to today";
}
.bootstrap-datetimepicker-widget .picker-switch {
text-align: center;
}
.bootstrap-datetimepicker-widget .picker-switch::after {
position: absolute;
width: 1px;
height: 1px;
margin: -1px;
padding: 0;
overflow: hidden;
clip: rect(0, 0, 0, 0);
border: 0;
content: "Toggle Date and Time Screens";
}
.bootstrap-datetimepicker-widget .picker-switch td {
padding: 0;
margin: 0;
height: auto;
width: auto;
line-height: inherit;
}
.bootstrap-datetimepicker-widget .picker-switch td span {
line-height: 2.5;
height: 2.5em;
width: 100%;
}
.bootstrap-datetimepicker-widget table {
width: 100%;
margin: 0;
}
.bootstrap-datetimepicker-widget table td,
.bootstrap-datetimepicker-widget table th {
text-align: center;
border-radius: 4px;
}
.bootstrap-datetimepicker-widget table th {
height: 20px;
line-height: 20px;
width: 20px;
}
.bootstrap-datetimepicker-widget table th.picker-switch {
width: 145px;
}
.bootstrap-datetimepicker-widget table th.disabled,
.bootstrap-datetimepicker-widget table th.disabled:hover {
background: none;
color: #777777;
cursor: not-allowed;
}
.bootstrap-datetimepicker-widget table th.prev::after {
position: absolute;
width: 1px;
height: 1px;
margin: -1px;
padding: 0;
overflow: hidden;
clip: rect(0, 0, 0, 0);
border: 0;
content: "Previous Month";
}
.bootstrap-datetimepicker-widget table th.next::after {
position: absolute;
width: 1px;
height: 1px;
margin: -1px;
padding: 0;
overflow: hidden;
clip: rect(0, 0, 0, 0);
border: 0;
content: "Next Month";
}
.bootstrap-datetimepicker-widget table thead tr:first-child th {
cursor: pointer;
}
.bootstrap-datetimepicker-widget table thead tr:first-child th:hover {
background: #eeeeee;
}
.bootstrap-datetimepicker-widget table td {
height: 54px;
line-height: 54px;
width: 54px;
}
.bootstrap-datetimepicker-widget table td.cw {
font-size: .8em;
height: 20px;
line-height: 20px;
color: #777777;
}
.bootstrap-datetimepicker-widget table td.day {
height: 20px;
line-height: 20px;
width: 20px;
}
.bootstrap-datetimepicker-widget table td.day:hover,
.bootstrap-datetimepicker-widget table td.hour:hover,
.bootstrap-datetimepicker-widget table td.minute:hover,
.bootstrap-datetimepicker-widget table td.second:hover {
background: #eeeeee;
cursor: pointer;
}
.bootstrap-datetimepicker-widget table td.old,
.bootstrap-datetimepicker-widget table td.new {
color: #777777;
}
.bootstrap-datetimepicker-widget table td.today {
position: relative;
}
.bootstrap-datetimepicker-widget table td.today:before {
content: '';
display: inline-block;
border: solid transparent;
border-width: 0 0 7px 7px;
border-bottom-color: #337ab7;
border-top-color: rgba(0, 0, 0, 0.2);
position: absolute;
bottom: 4px;
right: 4px;
}
.bootstrap-datetimepicker-widget table td.active,
.bootstrap-datetimepicker-widget table td.active:hover {
background-color: #337ab7;
color: #fff;
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
}
.bootstrap-datetimepicker-widget table td.active.today:before {
border-bottom-color: #fff;
}
.bootstrap-datetimepicker-widget table td.disabled,
.bootstrap-datetimepicker-widget table td.disabled:hover {
background: none;
color: #777777;
cursor: not-allowed;
}
.bootstrap-datetimepicker-widget table td span {
display: inline-block;
width: 54px;
height: 54px;
line-height: 54px;
margin: 2px 1.5px;
cursor: pointer;
border-radius: 4px;
}
.bootstrap-datetimepicker-widget table td span:hover {
background: #eeeeee;
}
.bootstrap-datetimepicker-widget table td span.active {
background-color: #337ab7;
color: #fff;
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
}
.bootstrap-datetimepicker-widget table td span.old {
color: #777777;
}
.bootstrap-datetimepicker-widget table td span.disabled,
.bootstrap-datetimepicker-widget table td span.disabled:hover {
background: none;
color: #777777;
cursor: not-allowed;
}
.bootstrap-datetimepicker-widget.usetwentyfour td.hour {
height: 27px;
line-height: 27px;
}
.bootstrap-datetimepicker-widget.wider {
width: 21em;
}
.bootstrap-datetimepicker-widget .datepicker-decades .decade {
line-height: 1.8em !important;
}
.input-group.date .input-group-addon {
cursor: pointer;
}
.sr-only {
position: absolute;
width: 1px;
height: 1px;
margin: -1px;
padding: 0;
overflow: hidden;
clip: rect(0, 0, 0, 0);
border: 0;
}

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,69 @@
//! moment.js locale configuration
//! locale : Korean [ko]
//! author : Kyungwook, Park : https://github.com/kyungw00k
//! author : Jeeeyul Lee <jeeeyul@gmail.com>
;(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined'
&& typeof require === 'function' ? factory(require('../moment')) :
typeof define === 'function' && define.amd ? define(['../moment'], factory) :
factory(global.moment)
}(this, (function (moment) { 'use strict';
var ko = moment.defineLocale('ko', {
months : '1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월'.split('_'),
monthsShort : '1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월'.split('_'),
weekdays : '일요일_월요일_화요일_수요일_목요일_금요일_토요일'.split('_'),
weekdaysShort : '일_월_화_수_목_금_토'.split('_'),
weekdaysMin : '일_월_화_수_목_금_토'.split('_'),
longDateFormat : {
LT : 'A h:mm',
LTS : 'A h:mm:ss',
L : 'YYYY.MM.DD',
LL : 'YYYY년 MMMM D일',
LLL : 'YYYY년 MMMM D일 A h:mm',
LLLL : 'YYYY년 MMMM D일 dddd A h:mm',
l : 'YYYY.MM.DD',
ll : 'YYYY년 MMMM D일',
lll : 'YYYY년 MMMM D일 A h:mm',
llll : 'YYYY년 MMMM D일 dddd A h:mm'
},
calendar : {
sameDay : '오늘 LT',
nextDay : '내일 LT',
nextWeek : 'dddd LT',
lastDay : '어제 LT',
lastWeek : '지난주 dddd LT',
sameElse : 'L'
},
relativeTime : {
future : '%s 후',
past : '%s 전',
s : '몇 초',
ss : '%d초',
m : '1분',
mm : '%d분',
h : '한 시간',
hh : '%d시간',
d : '하루',
dd : '%d일',
M : '한 달',
MM : '%d달',
y : '일 년',
yy : '%d년'
},
dayOfMonthOrdinalParse : /\d{1,2}일/,
ordinal : '%d일',
meridiemParse : /오전|오후/,
isPM : function (token) {
return token === '오후';
},
meridiem : function (hour, minute, isUpper) {
return hour < 12 ? '오전' : '오후';
}
});
return ko;
})));

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,888 @@
/****************************************************************************
* 로그아웃
****************************************************************************/
function fn_logout(){
logout();
window.location ='/mobilelogin/logout.do';
}
/****************************************************************************
* 로그아웃(session 종료)
****************************************************************************/
function fn_sessionLogout(){
if(checkMobile()){
getLoginInfo();
}
else{
window.location ='/weblogin/logout.do';
}
}
/****************************************************************************
* 숫자 3자리 콤마 이벤트
****************************************************************************/
function fn_numberFormat(str) {
str = String(str);
return str.replace(/(\d)(?=(?:\d{3})+(?!\d))/g, '$1,');
}
/****************************************************************************
* 페이지 이동
****************************************************************************/
function fn_leftFormAction(action){
let newForm = $("<form><form/>");
newForm.attr("name","submitForm");
newForm.attr("method","POST");
if(-1 != action.indexOf("?")) {
let actionArr = action.split('?');
newForm.attr("action",actionArr[0]);
let paramUrlArr = actionArr[1].split('&');
for(let i = 0; i < paramUrlArr.length; i++){
let paramArr = paramUrlArr[i].split('=');
newForm.append($('<input/>',{type:'hidden',name:paramArr[0],value:paramArr[1]}));
}
}
else {
newForm.attr("action",action);
}
// newForm.append($('<input/>',{type:'hidden',name:"menuCode",value:menuCode}));
newForm.appendTo('body');
newForm.submit();
}
/****************************************************************************
* 페이지 이동2
****************************************************************************/
function fn_leftFormAction2(action){
let newForm = $("<form><form/>");
newForm.attr("name","submitForm");
newForm.attr("method","POST");
if(-1 != action.indexOf("?")) {
let actionArr = action.split('?');
newForm.attr("action",actionArr[0]);
let paramUrlArr = actionArr[1].split('&');
for(let i = 0; i < paramUrlArr.length; i++){
let paramArr = paramUrlArr[i].split('=');
newForm.append($('<input/>',{type:'hidden',name:paramArr[0],value:paramArr[1]}));
}
}
else {
newForm.attr("action",action);
}
newForm.append($('<input/>',{type:'hidden'}));
newForm.appendTo('body');
newForm.submit();
}
/****************************************************************************
* 탭 - 페이지 이동
****************************************************************************/
function fn_tapPageMove(referMenu, referTap, url){
let pagingParam = "&referMenu="+referMenu;
pagingParam += "&referTap="+referTap;
location.href = url+pagingParam;
}
/****************************************************************************
* 탭 - 페이지 이동
****************************************************************************/
function fn_tapPageBack(referMenu, referTap){
let url = "";
let pagingParam = "";
pagingParam += "?referMenu="+referMenu;
pagingParam += "&referTap="+referTap;
if("home" == referMenu){
url = "/home";
}else if("medical" == referMenu){
url = "/medical";
}else{
url = "/home";
}
location.href = url+pagingParam;
}
/****************************************************************************
* 새창 이동 (미리보기)
****************************************************************************/
function fn_openPopup(action){
let newForm = $("<form><form/>");
newForm.attr("name","submitForm");
newForm.attr("method","POST");
newForm.attr("target","_blank");
if(-1 != action.indexOf("?")) {
let actionArr = action.split('?');
newForm.attr("action",actionArr[0]);
let paramUrlArr = actionArr[1].split('&');
for(let i = 0; i < paramUrlArr.length; i++){
let paramArr = paramUrlArr[i].split('=');
newForm.append($('<input/>',{type:'hidden',name:paramArr[0],value:paramArr[1]}));
}
}
else {
newForm.attr("action",action);
}
newForm.appendTo('body');
newForm.submit();
}
/****************************************************************************
* 뒤로가기
****************************************************************************/
function fn_back(){
history.back();
}
/****************************************************************************
* 새로고침
****************************************************************************/
function fn_reload(){
location.reload();
}
/****************************************************************************
* 전화번호 형식 변경
* type:0이면 중간번호 가리기
****************************************************************************/
function fn_setFormatPhone(num,type){
let formatNum = '';
if(11 == num.length){
if(0 == type){
formatNum = num.replace(/(\d{3})(\d{4})(\d{4})/, '$1-****-$3');
}
else{
formatNum = num.replace(/(\d{3})(\d{4})(\d{4})/, '$1-$2-$3');
}
}
else if(8 == num.length){
formatNum = num.replace(/(\d{4})(\d{4})/, '$1-$2');
}
else{
if(0 == num.indexOf('02')){
if(0 == type){
formatNum = num.replace(/(\d{2})(\d{4})(\d{4})/, '$1-****-$3');
}
else{
formatNum = num.replace(/(\d{2})(\d{4})(\d{4})/, '$1-$2-$3');
}
}
else{
if(0 == type){
formatNum = num.replace(/(\d{3})(\d{3})(\d{4})/, '$1-***-$3');
}
else{
formatNum = num.replace(/(\d{3})(\d{3})(\d{4})/, '$1-$2-$3');
}
}
}
return formatNum;
}
/****************************************************************************
* 날짜 보이는 영역에 셋팅
****************************************************************************/
function fn_selectDateTime(paramId, paramValue){
$("#"+paramId).val(paramValue);
}
/****************************************************************************
* datePicker 생성
****************************************************************************/
function fn_datePicker(id){
$(id).datetimepicker({
allowInputToggle: true,
format: 'YYYY-MM-DD'
});
}
/****************************************************************************
* datePicker
****************************************************************************/
function fn_searchDatePicker(startId, endId){
$(startId).datetimepicker({
allowInputToggle: true,
format: 'YYYY-MM-DD',
defaultDate: moment()
});
$(endId).datetimepicker({
allowInputToggle: true,
useCurrent: false, //Important! See issue #1075
format: 'YYYY-MM-DD',
defaultDate: moment()
});
/*$(endId).data("DateTimePicker").minDate(fn_getToDate());*/
//$(endId).data("DateTimePicker").maxDate(fn_getToDate());
//$(startId).data("DateTimePicker").maxDate(fn_getToDate());
$(startId).on("dp.change", function (e) {
$(endId).data("DateTimePicker").minDate(e.date);
if($(endId).data("DateTimePicker").date() < e.date){
$(endId).data("DateTimePicker").date(e.date);
}
});
}
/****************************************************************************
* dateTimePicker 생성
****************************************************************************/
function fn_dateTimePicker1(id, value){
if(value){
$(id).datetimepicker({
allowInputToggle: true,
format: 'HH:mm',
defaultDate: moment().format('YYYY-MM-DD')+'T'+ value
});
}
else{
$(id).datetimepicker({
allowInputToggle: true,
format: 'HH:mm'
});
}
}
/****************************************************************************
* dateTimePicker 생성 (AM, PM 선택)
****************************************************************************/
function fn_dateTimePicker2(id){
$(id).datetimepicker({
allowInputToggle: true,
format: 'LT'
});
}
/****************************************************************************
* dateTimePicker 생성
****************************************************************************/
function fn_dateTimePicker3(id){
$(id).datetimepicker({
allowInputToggle: true,
format: 'YYYY-MM-DD HH:mm'
});
}
/****************************************************************************
* dateTimePicker 생성 (AM, PM 선택)
****************************************************************************/
function fn_dateMonthPicker(id){
$(id).datetimepicker({
allowInputToggle: true,
format: 'YYYY-MM',
defaultDate: moment().format('YYYY-MM')
});
}
/****************************************************************************
* null 확인
****************************************************************************/
function fn_emptyYn(value){
if( value == "" || value == null || value == undefined || ( value != null && typeof value == "object" && !Object.keys(value).length ) ){
return true
}
else{
return false
}
}
/****************************************************************************
* 오늘 날짜 조회
****************************************************************************/
function fn_getToDate() {
let toDate = new Date();
let newToDate = fn_formatToDate(toDate.getFullYear(), 4) + '-' + fn_formatToDate(toDate.getMonth() + 1, 2) + '-' + fn_formatToDate(toDate.getDate(), 2);
return newToDate;
}
/****************************************************************************
* 어제 날짜 조회
****************************************************************************/
function fn_getToYesterday() {
let toDate = new Date();
let newToDate = fn_formatToDate(toDate.getFullYear(), 4) + '-' + fn_formatToDate(toDate.getMonth() + 1, 2) + '-' + fn_formatToDate(toDate.getDate()-1, 2);
return newToDate;
}
/****************************************************************************
* 날짜 형식 맞추기
****************************************************************************/
function fn_formatToDate(day, number) {
let temp = '';
day = day.toString();
if (day.length < number) {
for (i = 0; i < number - day.length; i++){
temp += '0';
}
}
return temp + day;
}
/****************************************************************************
* 날짜 요일 조회
****************************************************************************/
function fn_getDayName(param){
let paramArray = param.split('-');
let week = new Array('일', '월', '화', '수', '목', '금', '토');
let dt = new Date(parseInt(paramArray[0]), parseInt(paramArray[1])-1, parseInt(paramArray[2]));
let dayName = week[dt.getDay()];
return dayName;
}
/*************************************************************************
* 날짜 형식 변환
* A: 년월일
* B: 월일
* C: 년월일 시간
* D: 년.월.일
* E: 년.월.일 (년도4자리)
* F: 월/일(요일) (년도4자리)
* G: 년.월.일(요일) (년도4자리)
* H: YYMMDD (8자리)
**************************************************************************/
function setFormatDate(type, param) {
let retureValue = param;
if("A" == type){
let dateArray = param.split("-");
retureValue = dateArray[0]+"년 "+dateArray[1]+"월 "+dateArray[2]+"일";
}
else if("B" == type){
let dateArray = param.split("-");
retureValue = dateArray[1]+"월 "+dateArray[2]+"일";
}
else if("C" == type){
let tempArray = param.split(" ");
let dateArray1 = tempArray[0].split("-");
let dateArray2 = tempArray[1];
retureValue = dateArray1[0]+"년 "+dateArray1[1]+"월 "+dateArray1[2]+"일 "+dateArray2;
}
else if("D" == type){
let dateArray = param.split("-");
retureValue = dateArray[0].substring(2, 4)+"."+dateArray[1]+"."+dateArray[2];
}
else if("E" == type){
let dateArray = param.split("-");
retureValue = dateArray[0].substring(0, 4)+"."+dateArray[1]+"."+dateArray[2];
}
else if("F" == type){
let dateArray = param.split("-");
const week = ['일', '월', '화', '수', '목', '금', '토'];
const dayOfWeek = week[new Date(dateArray[0], dateArray[1], dateArray[2]).getDay()];
retureValue = dateArray[1]+"/"+dateArray[2]+"("+dayOfWeek+")";
}
else if("G" == type){
// 년.월.일(요일)
let dateArray = param.split("-");
const week = ['일', '월', '화', '수', '목', '금', '토'];
const dayOfWeek = week[new Date(dateArray[0], dateArray[1], dateArray[2]).getDay()];
retureValue = dateArray[0].substring(0, 4)+"."+dateArray[1]+"."+dateArray[2]+"("+dayOfWeek+")";
}
else if("H" == type){
let dateArray = param.split("-");
retureValue = dateArray[0].substr(2, 4)+dateArray[1]+dateArray[2];
}
return retureValue;
}
/****************************************************************************
* 빈값 체크
****************************************************************************/
function fn_emptyCheck(param){
if(param === null || param === "" || param === "null" || param === "NULL" || param === undefined || param === "undefined"){
return false;
}
else{
return true;
}
}
/****************************************************************************
* 길이 체크
****************************************************************************/
function fn_lengthCheck(str, maxLength){
let strLength = str.length;
if(strLength > maxLength){
return false;
}
else{
return true;
}
}
/****************************************************************************
* 날짜 체크
****************************************************************************/
function fn_dateCheck(value){
let strLength = value.length;
let cnt = 0;
let searchChar = "-"; // 찾으려는 문자
let pos = value.indexOf(searchChar); // pos는 0의 값을 가짐
if(10 == strLength){
while(-1 !== pos){
cnt++;
pos = value.indexOf(searchChar, pos + 1) // 첫 번째 - 이후의 인덱스부터 -를 찾음
}
if(2 == cnt){
return true;
}
else{
return false;
}
}
else{
return false;
}
// let date = value.split("-");
// let y = parseInt(date[0], 10),
// m = parseInt(date[1], 10),
// d = parseInt(date[2], 10);
//
// let dateRegex = /^(?=\d)(?:(?:31(?!.(?:0?[2469]|11))|(?:30|29)(?!.0?2)|29(?=.0?2.(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00)))(?:\x20|$))|(?:2[0-8]|1\d|0?[1-9]))([-.\/])(?:1[012]|0?[1-9])\1(?:1[6-9]|[2-9]\d)?\d\d(?:(?=\x20\d)\x20|$))?(((0?[1-9]|1[012])(:[0-5]\d){0,2}(\x20[AP]M))|([01]\d|2[0-3])(:[0-5]\d){1,2})?$/;
// if(dateRegex.test(d+'-'+m+'-'+y)){
// return true;
// }else{
// return false;
// }
}
/****************************************************************************
* 날짜 시간 체크
****************************************************************************/
function fn_dateTimeCheck(value){
let strLength = value.length;
let cnt = 0;
let searchChar = "-"; // 찾으려는 문자
let pos = value.indexOf(searchChar); // pos는 0의 값을 가짐
if(10 == strLength){
while(-1 !== pos){
cnt++;
pos = value.indexOf(searchChar, pos + 1) // 첫 번째 - 이후의 인덱스부터 -를 찾음
}
if(2 == cnt){
return true;
}
else{
return false;
}
}
else{
return false;
}
// let date = value.split("-");
// let y = parseInt(date[0], 10),
// m = parseInt(date[1], 10),
// d = parseInt(date[2], 10);
//
// let dateRegex = /^(?=\d)(?:(?:31(?!.(?:0?[2469]|11))|(?:30|29)(?!.0?2)|29(?=.0?2.(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00)))(?:\x20|$))|(?:2[0-8]|1\d|0?[1-9]))([-.\/])(?:1[012]|0?[1-9])\1(?:1[6-9]|[2-9]\d)?\d\d(?:(?=\x20\d)\x20|$))?(((0?[1-9]|1[012])(:[0-5]\d){0,2}(\x20[AP]M))|([01]\d|2[0-3])(:[0-5]\d){1,2})?$/;
// if(dateRegex.test(d+'-'+m+'-'+y)){
// return true;
// }else{
// return false;
// }
}
/****************************************************************************
* 첨부파일 최대 용량
****************************************************************************/
function fn_maxFileSize(){
return 52428800;
}
/****************************************************************************
* 첨부파일 최대 갯수 : 10
****************************************************************************/
function fn_maxFileCount(){
return 10;
}
/****************************************************************************
* 첨부파일 최대 갯수 : 5
****************************************************************************/
function fn_maxFileCount2(){
return 5;
}
/****************************************************************************
* 약관 페이지 이동
****************************************************************************/
function fn_selectPolicyIntro(param){
let pagingParam = '?policyType='+param;
fn_openPopup("/webpolicy/policyDetailIntro.do"+pagingParam);
}
/****************************************************************************
* 기본 프로필 사진 처리
****************************************************************************/
function fn_setProfileUrlEmpty(param, widthParam, heightParam, index, className){
if(fn_emptyCheck(param)){
if(widthParam<heightParam){
$("."+className+index).attr("src",param);
$("."+className+index).css("width","100%");
}
else{
$("."+className+index).attr("src",param);
$("."+className+index).css("height","100%");
}
}
else{
$("."+className+index).attr("src","/image/web/profile-empty.svg");
$("."+className+index).css("width","100%");
}
}
/****************************************************************************
* 기본 프로필 사진 처리2
****************************************************************************/
function fn_setProfileUrlEmpty2(fileUrlParam,widthParam, heightParam){
let object = new Object;
if(fn_emptyCheck(fileUrlParam)){
//파일 경로가 있지만 가로가 더 작은 경우
if(parseInt(widthParam)<parseInt(heightParam)){
object.styleValue = 'width:100%;';
}
else{
//경로가 있지만 세로가 더 작은 경우
object.styleValue = 'height:100%;';
}
object.urlValue = fileUrlParam;
}
else{
//파일 경로가 없는경우
object.urlValue = '/image/web/profile-empty.svg';
object.styleValue = 'width:100%;';
}
return object;
}
/****************************************************************************
* 기본 프로필 사진 경로만 있을경우
****************************************************************************/
function fn_setProfileUrlSizeNone(fileUrlParam,profileIdParam,_callback){
let image = new Image();
image.src = fileUrlParam;
let widthParam = 0;
let heightParam = 0;
let object = new Object;
if(!fn_emptyCheck(fileUrlParam)){
//파일 경로가 없는경우
object.urlValue = '/image/web/profile-empty.svg';
object.styleValue = 'width:100%;';
$("#"+profileIdParam).attr('src',object.urlValue).attr('style',object.styleValue);
}
else{
image.onload = function () {
widthParam = image.width;
heightParam = image.height;
//_callback();
//파일 경로가 있지만 가로가 더 작은 경우
if(widthParam<heightParam){
object.styleValue = 'width:100%;';
}
else{
//경로가 있지만 세로가 더 작은 경우
object.styleValue = 'height:100%;';
}
object.urlValue = fileUrlParam;
$("#"+profileIdParam).attr('src',object.urlValue).attr('style',object.styleValue);
}
}
return object;
}
/****************************************************************************
* 디데이 구하기
****************************************************************************/
function fn_setDday(param){
if(fn_emptyCheck(param)){
const today = new Date();
let dateArray = param.split("-");
const paramDay = new Date(dateArray[0], dateArray[1]-1, dateArray[2]);
if(paramDay>today){
const gapDay = paramDay.getTime() - today.getTime();
const resultDate = Math.ceil(gapDay / (1000 * 60 * 60 * 24));
return 'D-'+resultDate;
}
else{
const gapDay = today.getTime() - paramDay.getTime();
const resultDate = Math.ceil(gapDay / (1000 * 60 * 60 * 24))-1;
if(0==resultDate){
return 'D-day';
}
else{
return '';
}
}
}
}
/****************************************************************************
* selectBox 선택 시 색상
****************************************************************************/
function fn_selectColor(param){
let selectValue = $(param).val();
if(""!=selectValue){
$(param).css("color","#121212");
}else{
$(param).css("color","#969696");
}
}
/****************************************************************************
* 프로필 화면 이동
****************************************************************************/
function fn_userProfileIntro(param){
location.href = "/webuserprofile/selectListUserProfileIntro.do?userName="+param;
//fn_leftFormAction2("", "/webuserprofile/selectListUserProfileIntro.do?userName="+param+"&loginId="+param2);
}
/****************************************************************************
* 검색 화면 이동
****************************************************************************/
function fn_searchFeedIntro(param,param2){
fn_leftFormAction2(menuClass, "/websearch/selectListSearchIntro.do?searchText=#"+param+"&searchType="+param2);
}
/****************************************************************************
* 전화번호 형식 (가운데 마스킹 처리)
****************************************************************************/
function fn_setFormatPhoneNumber(param){
if(fn_emptyCheck(param)){
return param
.replace(/(\d{3})(\d{4})(\d{4})/, '$1-$2-$3')
.split('-')
.reduce((pre, cur, idx) => (idx === 1 ? pre + '****' : pre + cur), '');
}
else {
return '';
}
}
function modalCloseEvent(){
$(".loading-image-layer").hide();
let modalCheck = false;
let modalArrLength = modalArr.length;
for(let i=0;i<modalArrLength;i++){
let modalName = modalArr[i];
if(location.hash=='#'+modalName){
modalCheck = true;
break;
}
}
if(location.hash=='#'+modalArr[modalArr.length-1]){
modalBackYn = 'N';
}
else{
let modalName = modalArr[modalArr.length-1];
modalBackYn = 'Y';
if("commonModal"==modalName && true==modalCheck){
modalEvent.close();
}
else if("jobPostingApplyPopup"==modalName && true==modalCheck){
$("#jobPostingApplyPopup .modal-header img").click();
}
else if("contentPopup"==modalName && true==modalCheck){
$("#contentPopup .modal-header img").click();
}
else if("areaPopup"==modalName && true==modalCheck){
$("#areaPopup .modal-header img").click();
}
else if("jobPopup"==modalName && true==modalCheck){
$("#jobPopup .modal-header img").click();
}
else if("userFeedTagPopup"==modalName && true==modalCheck){
$("#userFeedTagPopup .modal-header img").click();
}
else if("feedCommentPopup"==modalName && true==modalCheck){
$("#feedCommentPopup .modal-header img").click();
}
else if("branchPopup"==modalName && true==modalCheck){
$("#branchPopup .modal-header img").click();
}
else if("userTagPopup"==modalName && true==modalCheck){
$("#userTagPopup .modal-header img").click();
}
else if("feedAndCommentPopup"==modalName && true==modalCheck){
$("#feedAndCommentPopup .modal-header img").click();
}
else if("branchSelectPopup"==modalName && true==modalCheck){
$("#branchSelectPopup .modal-header img").click();
}
else if("interestKeywordTagPopup"==modalName && true==modalCheck){
$("#interestKeywordTagPopup .modal-header img").click();
}
else{
//hash명이 정의되지않은 이름일시 팝업 전부 닫기
let modalArrLength = modalArr.length;
for(let i=0;i<modalArrLength;i++){
fn_modalBackCloseEvent(modalArr[modalArr.length-1]);
}
modalArr = new Array();
}
}
const scrollPosition = pageYOffset;
if(0==modalArr.length){
//팝업이 다 닫혀있다면 새로고침 켜기
window.scrollTo(0,scrollPosition+1);
//setRefreshOn();
}else{
//팝업이 한개라도 열려있다면 새로고침 끄기
//setRefreshOff();
}
}
//모달 Array에 있는 이름으로 닫기
function fn_modalBackCloseEvent(modalNameParam){
if("commonModal"==modalNameParam){
modalEvent.close();
}
else if("jobPostingApplyPopup"==modalNameParam){
$("#jobPostingApplyPopup .modal-header img").click();
}
else if("contentPopup"==modalNameParam){
$("#contentPopup .modal-header img").click();
}
else if("areaPopup"==modalNameParam){
$("#areaPopup .modal-header img").click();
}
else if("jobPopup"==modalNameParam){
$("#jobPopup .modal-header img").click();
}
else if("userFeedTagPopup"==modalNameParam){
$("#userFeedTagPopup .modal-header img").click();
}
else if("feedCommentPopup"==modalNameParam){
$("#feedCommentPopup .modal-header img").click();
}
else if("branchPopup"==modalNameParam){
$("#branchPopup .modal-header img").click();
}
else if("userTagPopup"==modalNameParam){
$("#userTagPopup .modal-header img").click();
}
else if("feedAndCommentPopup"==modalNameParam){
$("#feedAndCommentPopup .modal-header img").click();
}
else if("branchSelectPopup"==modalNameParam){
$("#branchSelectPopup .modal-header img").click();
}
else if("interestKeywordTagPopup"==modalNameParam){
$("#interestKeywordTagPopup .modal-header img").click();
}
}
function checkMobile(){
return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);
}
// 30분단위 시간값 셋팅
function fn_setTimeValue(target, defaultTime){
let timeHTML = '';
for(let i = 0; i <= 23; i++){
let hour = i;
if(hour <10) hour = '0' + hour;
if(i==0){
timeHTML += '<li class="option_list_item first">'+hour+':00</li>';
timeHTML += '<li class="option_list_item">'+hour+':30</li>';
}
else{
timeHTML += '<li class="option_list_item">'+hour+':00</li>';
timeHTML += '<li class="option_list_item">'+hour+':30</li>';
}
}
$('#'+target).empty().html(timeHTML);
$('#'+target).siblings("button").text(defaultTime);
$('#'+target).siblings("input").val(defaultTime);
// 옵션 선택 이벤트
$('#'+target + '>.option_list_item').on('click', function() {
let selectedOption = $(this).text();
$(this).parent().siblings("button").text(selectedOption);
$(this).parent().siblings("input").val(selectedOption);
});
}
// 공백처리
function fn_formatNull(param){
if(null==param){
return '';
}else{
return param;
}
}

View File

@@ -0,0 +1,720 @@
/****************************************************************************
* 조직 조회
****************************************************************************/
function fn_selectListGroupOption(){
let result = [];
let formData = new FormData();
$.ajax({
url: encodeURI('/webgroup/selectListGroupOption.do'),
data: formData,
dataType: "json",
processData: false,
contentType: false,
type: 'POST',
async: false,
success: function(data){
if('0'==data.msgCode){
result = data.rows;
}
else if(data.msgCode=='-1'){
modalEvent.warning("조회 오류", data.msgDesc);
}
else{
modalEvent.danger("조회 오류", "조회 중 오류가 발생하였습니다. 잠시후 다시시도하십시오.");
}
},
error : function(xhr, status, error) {
modalEvent.danger("조회 오류", "조회 중 오류가 발생하였습니다. 잠시후 다시시도하십시오.");
},
beforeSend:function(){
},
complete:function(){
}
});
return result;
}
/****************************************************************************
* 직무 조회
****************************************************************************/
function fn_selectListDutyOption(){
let result = [];
let formData = new FormData();
$.ajax({
url: encodeURI('/webduty/selectListDutyOption.do'),
data: formData,
dataType: "json",
processData: false,
contentType: false,
type: 'POST',
async: false,
success: function(data){
if('0'==data.msgCode){
result = data.rows;
}
else if(data.msgCode=='-1'){
modalEvent.warning("조회 오류", data.msgDesc);
}
else{
modalEvent.danger("조회 오류", "조회 중 오류가 발생하였습니다. 잠시후 다시시도하십시오.");
}
},
error : function(xhr, status, error) {
modalEvent.danger("조회 오류", "조회 중 오류가 발생하였습니다. 잠시후 다시시도하십시오.");
},
beforeSend:function(){
},
complete:function(){
}
});
return result;
}
/****************************************************************************
* 닥터 option 조회
****************************************************************************/
function fn_selectListMemberDoctorOption(){
let result = [];
let formData = new FormData();
$.ajax({
url: encodeURI('/webmember/selectListMemberDoctorOption.do'),
data: formData,
dataType: "json",
processData: false,
contentType: false,
type: 'POST',
async: false,
success: function(data){
if('0'==data.msgCode){
result = data.rows;
}
else if(data.msgCode=='-1'){
modalEvent.warning("조회 오류", data.msgDesc);
}
else{
modalEvent.danger("조회 오류", "조회 중 오류가 발생하였습니다. 잠시후 다시시도하십시오.");
}
},
error : function(xhr, status, error) {
modalEvent.danger("조회 오류", "조회 중 오류가 발생하였습니다. 잠시후 다시시도하십시오.");
},
beforeSend:function(){
},
complete:function(){
}
});
return result;
}
/****************************************************************************
* 연차유형 조회
****************************************************************************/
function fn_selectListVacationOption(){
let result = [];
let formData = new FormData();
$.ajax({
url: encodeURI('/webvacation/selectListVacationOption.do'),
data: formData,
dataType: "json",
processData: false,
contentType: false,
type: 'POST',
async: false,
success: function(data){
if('0'==data.msgCode){
result = data.rows;
}
else if(data.msgCode=='-1'){
modalEvent.warning("조회 오류", data.msgDesc);
}
else{
modalEvent.danger("조회 오류", "조회 중 오류가 발생하였습니다. 잠시후 다시시도하십시오.");
}
},
error : function(xhr, status, error) {
modalEvent.danger("조회 오류", "조회 중 오류가 발생하였습니다. 잠시후 다시시도하십시오.");
},
beforeSend:function(){
},
complete:function(){
}
});
return result;
}
/****************************************************************************
* 예약/바로접수 등록 권한 체크(헤더)
****************************************************************************/
function fn_reserveRelationCheck(){
let result;
let formData = new FormData();
formData.append("menuName","예약현황")
$.ajax({
url: encodeURI('/webauth/selectHeaderRelation.do'),
data: formData,
dataType: "json",
processData: false,
contentType: false,
type: 'POST',
async: false,
success: function(data){
if('0'==data.msgCode){
result = data.rows.insertUseYn==='Y';
}
else if(data.msgCode=='-1'){
modalEvent.warning("조회 오류", data.msgDesc);
}
else{
modalEvent.danger("조회 오류", "조회 중 오류가 발생하였습니다. 잠시후 다시시도하십시오.");
}
},
error : function(xhr, status, error) {
modalEvent.danger("조회 오류", "조회 중 오류가 발생하였습니다. 잠시후 다시시도하십시오.");
},
beforeSend:function(){
},
complete:function(){
}
});
return result;
}
/****************************************************************************
* 신환 등록 권한 체크(헤더)
****************************************************************************/
function fn_userRelationCheck(){
let result;
let formData = new FormData();
formData.append("menuName","고객 목록")
$.ajax({
url: encodeURI('/webauth/selectHeaderRelation.do'),
data: formData,
dataType: "json",
processData: false,
contentType: false,
type: 'POST',
async: false,
success: function(data){
if('0'==data.msgCode){
result = data.rows.insertUseYn==='Y';
}
else if(data.msgCode=='-1'){
modalEvent.warning("조회 오류", data.msgDesc);
}
else{
modalEvent.danger("조회 오류", "조회 중 오류가 발생하였습니다. 잠시후 다시시도하십시오.");
}
},
error : function(xhr, status, error) {
modalEvent.danger("조회 오류", "조회 중 오류가 발생하였습니다. 잠시후 다시시도하십시오.");
},
beforeSend:function(){
},
complete:function(){
}
});
return result;
}
/****************************************************************************
* 권한 조회
****************************************************************************/
function fn_selectListAuthOption(){
let result = [];
let formData = new FormData();
$.ajax({
url: encodeURI('/webauth/selectListAuthOption.do'),
data: formData,
dataType: "json",
processData: false,
contentType: false,
type: 'POST',
async: false,
success: function(data){
if('0'==data.msgCode){
result = data.rows;
}
else if(data.msgCode=='-1'){
modalEvent.warning("조회 오류", data.msgDesc);
}
else{
modalEvent.danger("조회 오류", "조회 중 오류가 발생하였습니다. 잠시후 다시시도하십시오.");
}
},
error : function(xhr, status, error) {
modalEvent.danger("조회 오류", "조회 중 오류가 발생하였습니다. 잠시후 다시시도하십시오.");
},
beforeSend:function(){
},
complete:function(){
}
});
return result;
}
/****************************************************************************
* 진료 조회
****************************************************************************/
function fn_selectListTreatmentOption2(){
let result = [];
let formData = new FormData();
$.ajax({
url: encodeURI('/webtreatment/selectListTreatmentOption.do'),
data: formData,
dataType: "json",
processData: false,
contentType: false,
type: 'POST',
async: false,
success: function(data){
if('0'==data.msgCode){
result = data.rows;
}
else if(data.msgCode=='-1'){
modalEvent.warning("조회 오류", data.msgDesc);
}
else{
modalEvent.danger("조회 오류", "조회 중 오류가 발생하였습니다. 잠시후 다시시도하십시오.");
}
},
error : function(xhr, status, error) {
modalEvent.danger("조회 오류", "조회 중 오류가 발생하였습니다. 잠시후 다시시도하십시오.");
},
beforeSend:function(){
},
complete:function(){
}
});
return result;
}
/****************************************************************************
* 거래처 조회
****************************************************************************/
function fn_selectListCompanyOption(){
let result = [];
let formData = new FormData();
$.ajax({
url: encodeURI('/webcompany/selectListCompanyOption.do'),
data: formData,
dataType: "json",
processData: false,
contentType: false,
type: 'POST',
async: false,
success: function(data){
if('0'==data.msgCode){
result = data.rows;
}
else if(data.msgCode=='-1'){
modalEvent.warning("조회 오류", data.msgDesc);
}
else{
modalEvent.danger("조회 오류", "조회 중 오류가 발생하였습니다. 잠시후 다시시도하십시오.");
}
},
error : function(xhr, status, error) {
modalEvent.danger("조회 오류", "조회 중 오류가 발생하였습니다. 잠시후 다시시도하십시오.");
},
beforeSend:function(){
},
complete:function(){
}
});
return result;
}
/****************************************************************************
* 예약경로 조회
****************************************************************************/
function fn_selectListReserveCategoryItemOption(){
let formData = new FormData();
let result=[];
$.ajax({
url: encodeURI('/webcategory/selectCategoryItemList.do'),
data: formData,
dataType: "json",
processData: false,
contentType: false,
type: 'POST',
async: false,
success: function(data){
if('0'==data.msgCode){
if (0 < Object.keys(data.rows).length) {
Object.keys(data.rows).forEach(category => {
if('예약경로'===data.rows[category][0].categoryName){
result=data.rows[category];
}
});
}
}
else if(data.msgCode=='-1'){
modalEvent.warning("조회 오류", data.msgDesc);
}
else{
modalEvent.danger("조회 오류", "조회 중 오류가 발생하였습니다. 잠시후 다시시도하십시오.");
}
},
error : function(xhr, status, error) {
modalEvent.danger("조회 오류", "조회 중 오류가 발생하였습니다. 잠시후 다시시도하십시오.");
},
beforeSend:function(){
},
complete:function(){
}
});
return result;
}
/****************************************************************************
* 닥터 /상담자 조회
****************************************************************************/
function fn_selectListReserveMemberOption(param, param2){
let result=[];
// if(true != fn_emptyCheck(param)){
// return result;
// }
if(true != fn_emptyCheck(param2)){
return result;
}
let formData = new FormData();
formData.append("searchDate", param);
formData.append("muTreatmentProcedureId", param2);
$.ajax({
url: encodeURI('/webmember/selectListMemberDoctorConsultingOption.do'),
data: formData,
dataType: "json",
processData: false,
contentType: false,
type: 'POST',
async: false,
success: function(data){
if('0'==data.msgCode){
result=data.rows;
}
else if(data.msgCode=='-1'){
modalEvent.warning("조회 오류", data.msgDesc);
}
else{
modalEvent.danger("조회 오류", "조회 중 오류가 발생하였습니다. 잠시후 다시시도하십시오.");
}
},
error : function(xhr, status, error) {
modalEvent.danger("조회 오류", "조회 중 오류가 발생하였습니다. 잠시후 다시시도하십시오.");
},
beforeSend:function(){
},
complete:function(){
}
});
return result;
}
/****************************************************************************
* 진료 시술 조회
****************************************************************************/
function fn_selectListTreatmentProcedureOption(param){
let result=[];
if(true != fn_emptyCheck(param)){
return result;
}
let formData = new FormData();
formData.append("muTreatmentId", param);
$.ajax({
url: encodeURI('/webtreatmentprocedure/selectListTreatmentProcedureOption2.do'),
data: formData,
dataType: "json",
processData: false,
contentType: false,
type: 'POST',
async: false,
success: function(data){
if('0'==data.msgCode){
result=data.rows;
}
else if(data.msgCode=='-1'){
modalEvent.warning("조회 오류", data.msgDesc);
}
else{
modalEvent.danger("조회 오류", "조회 중 오류가 발생하였습니다. 잠시후 다시시도하십시오.");
}
},
error : function(xhr, status, error) {
modalEvent.danger("조회 오류", "조회 중 오류가 발생하였습니다. 잠시후 다시시도하십시오.");
},
beforeSend:function(){
},
complete:function(){
}
});
return result;
}
/****************************************************************************
* 고객 - 1년간 진료내역 조회 (수납완료건) (List, option)
****************************************************************************/
function fn_selectListReserveUserOption(param){
let result=[];
if(true != fn_emptyCheck(param)){
return result;
}
let formData = new FormData();
formData.append("muUserId", param);
$.ajax({
url: encodeURI('/webreserve/selectListReserveUserOption.do'),
data: formData,
dataType: "json",
processData: false,
contentType: false,
type: 'POST',
async: false,
success: function(data){
if('0'==data.msgCode){
result=data.rows;
}
else if(data.msgCode=='-1'){
modalEvent.warning("조회 오류", data.msgDesc);
}
else{
modalEvent.danger("조회 오류", "조회 중 오류가 발생하였습니다. 잠시후 다시시도하십시오.");
}
},
error : function(xhr, status, error) {
modalEvent.danger("조회 오류", "조회 중 오류가 발생하였습니다. 잠시후 다시시도하십시오.");
},
beforeSend:function(){
},
complete:function(){
}
});
return result;
}
/****************************************************************************
* 검색필터 조회 (header 공통위해 user.js에서 가져옴.)
****************************************************************************/
function fn_selectCategoryList2(){
let result = []
let formData = new FormData();
formData.append("menuClass", menuClass);
$.ajax({
url: encodeURI('/webcategory/selectCategoryList.do'),
data: formData,
dataType: "json",
processData: false,
contentType: false,
type: 'POST',
async: false,
success: function(data){
if('0'==data.msgCode){
if(0<data.rows.length){
result = data.rows;
}
}
else{
modalEvent.danger("조회 오류", data.msgDesc);
}
},
error : function(xhr, status, error) {
modalEvent.danger("조회 오류", "조회 중 오류가 발생하였습니다. 잠시후 다시시도하십시오.");
},
beforeSend:function(){
},
complete:function(){
}
});
return result;
}
/****************************************************************************
* 근무시간 조회
****************************************************************************/
function fn_searchSetTime(target,searchDate){
let result = []
let formData = new FormData();
formData.append("menuClass", menuClass);
$.ajax({
url: encodeURI('/webhospital/selectWorkTime.do'),
data: formData,
dataType: "json",
processData: false,
contentType: false,
type: 'POST',
async: false,
success: function(data){
if('0'==data.msgCode){
if(0<data.rows.length){
result = data.rows;
fn_setOperatingHours(target,searchDate,result[0])
}
}
else{
modalEvent.danger("조회 오류", data.msgDesc);
}
},
error : function(xhr, status, error) {
modalEvent.danger("조회 오류", "조회 중 오류가 발생하였습니다. 잠시후 다시시도하십시오.");
},
beforeSend:function(){
},
complete:function(){
}
});
return result;
}
function fn_setWorkTimeValue(target,openStartTime,openEndTime){
let timeHTML = '';
let startTime = openStartTime.split(':')[0]
let endTime = openEndTime.split(':')[0]
for(let i = startTime; i < endTime; i++) {
let hour = i;
if (i == 0) {
timeHTML += '<li class="option_list_item first">' + hour + ':00</li>';
timeHTML += '<li class="option_list_item">' + hour + ':30</li>';
} else {
timeHTML += '<li class="option_list_item">' + hour + ':00</li>';
timeHTML += '<li class="option_list_item">' + hour + ':30</li>';
}
}
$('#'+target).empty().html(timeHTML);
$('#'+target).siblings("button").text(openStartTime);
$('#'+target).siblings("input").val(openStartTime);
// 옵션 선택 이벤트
$('#'+target + '>.option_list_item').on('click', function() {
let selectedOption = $(this).text();
$(this).parent().siblings("button").text(selectedOption);
$(this).parent().siblings("input").val(selectedOption);
});
}
function fn_setOperatingHours(target,searchDate,data) {
const daysOfWeek = ['sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat'];
const today = new Date(searchDate).getDay()
const todayIndex = daysOfWeek[today];
const openYn = data[`${todayIndex}OpenYn`];
if (openYn === 'Y') {
const openStartTime = data[`${todayIndex}OpenStartTime`];
const openEndTime = data[`${todayIndex}OpenEndTime`];
fn_setWorkTimeValue(target,openStartTime, openEndTime);
}
}
/****************************************************************************
* 모달 검색필터 조회 (header 공통위해 user.js에서 가져옴.)
****************************************************************************/
function fn_selectModalOtherOption2(categoryCode){
let formData = new FormData();
formData.append('categoryCode', categoryCode);
$.ajax({
url: encodeURI('/webcategory/selectCategoryItem.do'),
data: formData,
dataType: "json",
processData: false,
contentType: false,
type: 'POST',
async: false,
success: function(data){
if('0' === data.msgCode){
if (data.rows && 0 < Object.keys(data.rows).length) {
let categoryName = '';
$('.select_box button').each(function() {
categoryName = $(this).text();
if (Object.values(data.rows).some(item => item.categoryName === categoryName)) {
let ulElement = $(this).parent().find('ul');
ulElement.html('');
Object.values(data.rows).forEach(categoryItem => {
if (categoryItem.categoryName === categoryName) {
let categoryItemCode = categoryItem.categoryItemCode;
let categoryItemName = categoryItem.categoryItemName;
let nationality = '';
if (categoryItem.categoryName === '국적') {
nationality = categoryItemName.toLowerCase().includes('한국'.toLowerCase()) ? 'local' : 'foreigner';
} else if (categoryItem.categoryName === '고객구분') {
let url = categoryItem.filePath.replace("C:", "");
categoryItemName = `<img src="${url}">`;
}
let listHTML = `<li class="option_list_item ${nationality}" data-code="${categoryCode}" id="li_${categoryItemCode}">${categoryItemName}</li>`;
ulElement.append(listHTML);
}
});
}
});
}
} else if(data.msgCode=='-1'){
modalEvent.warning("조회 오류", data.msgDesc);
} else {
modalEvent.danger("조회 오류", "조회 중 오류가 발생하였습니다. 잠시후 다시시도하십시오.");
}
},
error : function(xhr, status, error) {
modalEvent.danger("조회 오류", "조회 중 오류가 발생하였습니다. 잠시후 다시시도하십시오.");
},
beforeSend:function(){
},
complete:function(){
}
});
}

View File

@@ -0,0 +1,112 @@
/****************************************************************************
* 이벤트 정보 조회
****************************************************************************/
function fn_selectEvent(){
let formData = new FormData();
formData.append("muAppEventId", muAppEventId)
$.ajax({
url: encodeURI('/mobileevent/selectEvent.do'),
data: formData,
dataType: "json",
processData: false,
contentType: false,
type: 'POST',
async: false,
success: function(data){
if('0'==data.msgCode){
if(0 < data.rows.length){
const event = data.rows[0];
$('.img_box').append(`<img style="width: 100%; height: 100%;" src="${decodeURI(event.filePath)}" alt="${event.title}">`);
$('.text_box').append(`<p>${decodeURI(event.title)}</p>
<p>기간 ${event.eventStartDate} ~ ${event.eventEndDate}</p>`);
$('.content_box .title').text(event.content);
$('.content_box div').append(event.detail);
// swiperWrapper.empty(); // 기존 콘텐츠 초기화
//
// events.forEach((event, index) => {
// // swiper-slide 클래스를 생성하여 이벤트 정보 삽입
// const className = `swiper-slide slide-${index + 1}`;
//
// const slideHTML = `
// <div class="${className}">
// <div class="banner_box" onClick="location.href='home_event.html?id=${event.muAppEventId}'">
// <div class="img_box">
// <img style="width: 100%; height: 100%;" src="${decodeURI(event.filePath)}" alt="${event.title}">
// </div>
// <div class="text_box">
// <p>${event.title}</p>
// <p>${event.content}</p>
// </div>
// </div>
// </div>
// `;
//
// // swiper-wrapper에 추가
// swiperWrapper.append(slideHTML);
// const homeSwiper = new Swiper('.homeSwiper', {
// loop: true,
// autoplay: true,
// direction: 'horizontal',
// pagination: {
// el: '.swiper-pagination',
// type: 'bullets'
// },
// });
// });
}
}
else if(data.msgCode=='-1'){
modalEvent.warning("조회 오류", data.msgDesc);
}
else{
modalEvent.danger("조회 오류", "조회 중 오류가 발생하였습니다. 잠시후 다시시도하십시오.");
}
},
error : function(xhr, status, error) {
modalEvent.danger("조회 오류", "조회 중 오류가 발생하였습니다. 잠시후 다시시도하십시오.");
},
beforeSend:function(){
},
complete:function(){
}
});
}
/****************************************************************************
* 페이지 init
****************************************************************************/
function fn_pageInit(){
//메인이벤트조회
fn_selectEvent();
}
/****************************************************************************
* 페이지 event
****************************************************************************/
function fn_pageEvent(){
// 아아디 keypress
$(document).on('keypress', '#loginId', function(e){
fn_enter(e);
});
// 비밀번호 keypress
$(document).on('keypress', '#password', function(e){
fn_enter(e);
});
// 로그인 버튼
$("#btnLogin").click(function(){
fn_login();
});
}
$(function(){
// 페이지 init
fn_pageInit();
// 페이지 event
fn_pageEvent();
});

View File

@@ -0,0 +1,286 @@
/****************************************************************************
* 메인이벤트조회
****************************************************************************/
function fn_selectMainEventList(){
let formData = new FormData();
formData.append("exposedYn", "Y")
$.ajax({
url: encodeURI('/mobilehome/selectListEvent.do'),
data: formData,
dataType: "json",
processData: false,
contentType: false,
type: 'POST',
async: false,
success: function(data){
if('0'==data.msgCode){
if(0 < data.rows.length){
const events = data.rows;
const swiperWrapper = $('.swiper-wrapper');
swiperWrapper.empty(); // 기존 콘텐츠 초기화
events.forEach((event, index) => {
// swiper-slide 클래스를 생성하여 이벤트 정보 삽입
const className = `swiper-slide slide-${index + 1}`;
const slideHTML = `
<div class="${className}">
<div class="banner_box" onClick="fn_tapPageMove('home', 'home', '/mobileevent/selectEventIntro.do?muAppEventId=${event.muAppEventId}')">
<div class="img_box">
<img style="width: 100%; height: 100%;" src="${decodeURI(event.filePath)}" alt="${event.title}">
</div>
<div class="text_box">
<p>${event.title}</p>
<p>${event.content}</p>
</div>
<div class="dday_box">
<p>
남은기간<br/>
<span>D - ${0<event.daysRemaining?event.daysRemaining:0}</span>
</p>
</div>
</div>
</div>
`;
// swiper-wrapper에 추가
swiperWrapper.append(slideHTML);
const homeSwiper = new Swiper('.homeSwiper', {
loop: true,
autoplay: true,
direction: 'horizontal',
/*pagination: {
el: '.swiper-pagination',
type: 'bullets'
},*/
});
});
}
}
else if(data.msgCode=='-1'){
modalEvent.warning("조회 오류", data.msgDesc);
}
else{
modalEvent.danger("조회 오류", "조회 중 오류가 발생하였습니다. 잠시후 다시시도하십시오.");
}
},
error : function(xhr, status, error) {
modalEvent.danger("조회 오류", "조회 중 오류가 발생하였습니다. 잠시후 다시시도하십시오.");
},
beforeSend:function(){
},
complete:function(){
}
});
}
/****************************************************************************
* 이벤트 리스트 조회
****************************************************************************/
function fn_selectEventList(){
let formData = new FormData();
$.ajax({
url: encodeURI('/mobilehome/selectListEvent.do'),
data: formData,
dataType: "json",
processData: false,
contentType: false,
type: 'POST',
async: false,
success: function(data){
if('0'==data.msgCode){
let innerHTML='';
if(0 < data.rows.length){
const events = data.rows;
// 기존 콘텐츠 초기화
events.forEach((event, index) => {
innerHTML += `
<div class="banner_box" onClick="fn_eventIntro('${event.muAppEventId}')">
<div class="img_box">
<img style="width: 100%; height: 100%;" src="${decodeURI(event.filePath)}" alt="${event.title}">
</div>
<div class="text_box">
<p>${event.title}</p>
<p>${event.content}</p>
</div>
<div class="dday_box">
<p>
남은기간<br/>
<span>D - ${0<event.daysRemaining?event.daysRemaining:0}</span>
</p>
</div>
</div>
`;
});
}else {
innerHTML = '<div style="text-align: center;height: 280px; padding-top: 140px;">등록된 이벤트가 없습니다.</div>'
}
$('#event').empty().html(innerHTML).trigger("create");
} else if (data.msgCode == '-1') {
modalEvent.warning("조회 오류", data.msgDesc);
}
else{
modalEvent.danger("조회 오류", "조회 중 오류가 발생하였습니다. 잠시후 다시시도하십시오.");
}
},
error : function(xhr, status, error) {
modalEvent.danger("조회 오류", "조회 중 오류가 발생하였습니다. 잠시후 다시시도하십시오.");
},
beforeSend:function(){
},
complete:function(){
}
});
}
/****************************************************************************
* 메인컨텐츠 보드조회
****************************************************************************/
function fn_selectMainBoardList(){
let formData = new FormData();
formData.append("exposedYn","Y")
$.ajax({
url: encodeURI('/mobilehome/selectListMedicalBoard.do'),
data: formData,
dataType: "json",
processData: false,
contentType: false,
type: 'POST',
async: false,
success: function(data){
if('0'==data.msgCode){
if (0 < Object.keys(data.rows).length) {
const boards = data.rows;
const boardWrapper = $('#home');
$('.popular_box').remove(); // 기존 콘텐츠 초기화
// 각 boardId에 대해 처리
Object.keys(boards).forEach((boardId) => {
const board = boards[boardId];
const boardDiv = document.createElement('div');
boardDiv.className = 'popular_box';
// 첫 번째 board의 제목과 콘텐츠 추가
boardDiv.innerHTML = `
<p class="title">${board[0].boardTitle}</p>
<p>${board[0].boardContent}</p>
`;
// 각 콘텐츠 항목을 처리
board.forEach((content, index) => {
const contentUl = document.createElement('ul');
contentUl.className = 'list_box';
contentUl.innerHTML = `
<li onclick="fn_medicalIntro('${content.muAppContentId}')">
<p class="number">${index + 1}</p>
<div>
<div class="img_box">
<img style="width: 48px; height: 48px;" src="${decodeURI(content.filePath2)}" alt="${content.title}">
</div>
<div class="text_box">
<p class="label">${content.title}</p>
<p>${content.content}</p>
</div>
</div>
</li>
`;
// boardDiv에 contentUl 추가
boardDiv.appendChild(contentUl);
});
// boardWrapper에 boardDiv 추가
boardWrapper.append(boardDiv);
});
}else{
}
} else if (data.msgCode=='-1'){
modalEvent.warning("조회 오류", data.msgDesc);
}
else{
modalEvent.danger("조회 오류", "조회 중 오류가 발생하였습니다. 잠시후 다시시도하십시오.");
}
},
error : function(xhr, status, error) {
modalEvent.danger("조회 오류", "조회 중 오류가 발생하였습니다. 잠시후 다시시도하십시오.");
},
beforeSend:function(){
},
complete:function(){
}
});
}
/****************************************************************************
* 이벤트 상세페이지 이동
****************************************************************************/
function fn_eventIntro(id){
fn_tapPageMove("home", "event", '/mobileevent/selectEventIntro.do?muAppEventId='+id);
// location.href = '/mobileevent/selectEventIntro.do?muAppEventId='+id;
}
/****************************************************************************
* 시술 상세페이지 이동
****************************************************************************/
function fn_medicalIntro(id){
location.href = '/mobilemedical/selectMedicalIntro.do?muAppContentId='+id;
}
/****************************************************************************
* 페이지 init
****************************************************************************/
function fn_pageInit(){
//메인이벤트조회
fn_selectMainEventList();
// 메인컨텐츠 보드조회
fn_selectMainBoardList();
//main 높이값 - class
if($('.notify_box').hasClass('open')){
$('main').addClass('short');
}else{
$('main').addClass('short2');
}
}
/****************************************************************************
* 페이지 event
****************************************************************************/
function fn_pageEvent(){
$('.nav_box a[aria-controls="event"]').on('click', function(event) {
fn_selectEventList();
});
}
/****************************************************************************
* 페이지 탭 선택
****************************************************************************/
function fn_pageTapSelect(){
$(".navTap").removeClass("active");
$(".tabContent").removeClass("active");
if("home" == referTap){
$("#navTap_home a").click();
}else if("event" == referTap){
$("#navTap_event a").click();
}else{
$("#navTap_home a").click();
}
}
$(function(){
// 페이지 init
fn_pageInit();
// 페이지 event
fn_pageEvent();
// 페이지 탭 선택
fn_pageTapSelect()
});

View File

@@ -0,0 +1,250 @@
////////////////////////////// 하이브리드 함수 시작 ///////////////
let deviceUuid1 = '';
let phoneType1 = '';
let modelName1 = '';
let osVersion1 = '';
let pushKey1 = '';
let appVersion1 = '';
let deviceYn = 'N';
//모바일 단말 체크
let isMobile = {
Android: function () {
return navigator.userAgent.match(/Android/i) == null ? false : true;
},
IOS: function () {
return navigator.userAgent.match(/iPhone|iPad|iPod/i) == null ? false : true;
}
};
//함수1: 로그인 정보 네이티브 앱에 저장
//웹에서 => 모바일 함수 호출 시 자동으로 함수2 호출됨
function setLoginInfo(loginId, password, loginType) {
if(null!=navigator.userAgent.match(/madeu-mobile/)){
if(isMobile.Android()){//안드로이드
window.madeu.setLoginInfo(loginId, password, loginType);
}
else if(isMobile.IOS()){//아이폰
let postData = {
"name": "setLoginInfo",
"loginId": loginId,
"password": password,
"loginType": loginType
};
window.webkit.messageHandlers.madeu.postMessage(postData);
}
}
}
//함수2: 로그인 정보 가져오기
//웹에서 => 모바일 함수 호출 시 함수3 자동 호출됨
function getLoginInfo() {
if(null!=navigator.userAgent.match(/madeu-mobile/)){
if(isMobile.Android()){//안드로이드
window.madeu.getLoginInfo();
}
else if(isMobile.IOS()){//아이폰
let postData = {
"name": "getLoginInfo"
};
window.webkit.messageHandlers.madeu.postMessage(postData);
}
}
}
//함수3: 로그인 정보 설정
//모바일에서 => 웹 함수 호출 시 함수4 호출됨
function fn_initLoginInfo(loginId, password, loginType) {
//로그인 로직 추가
if("MU"==loginType){
fn_login(loginId, password);
}else{
fn_snsLogin(loginId, loginType);
}
}
//함수4: 디바이스 정보 가져오기
//웹에서 => 모바일 함수 호출 시 함수5 자동 호출
function getDeviceInfo() {
if(null!=navigator.userAgent.match(/madeu-mobile/)){
if(isMobile.Android()){//안드로이드
window.madeu.getDeviceInfo();
}
else if(isMobile.IOS()){//아이폰
let postData = {
"name": "getDeviceInfo"
};
window.webkit.messageHandlers.madeu.postMessage(postData);
}
}
}
//함수5: 디바이스 정보 설정
function fn_initDeviceInfo(deviceUuid, phoneType, modelName, osVersion, pushKey, appVersion) {
//로그인 성공 시 서버에 저장 로직 추가
//앱버전 체크후 업데이트 페이지 이동
//안드로이드 마켓 이동경로
//아이폰 앱 스토어 이동경로
deviceUuid1 = deviceUuid;
phoneType1 = phoneType;
modelName1 = modelName;
osVersion1 = osVersion;
pushKey1 = pushKey;
appVersion1 = appVersion;
deviceYn = 'Y';
}
//함수6: 새로고침 함수 시작
//웹에서 => 모바일 함수 호출 시 자동으로 함수2 호출됨
function setRefreshOn() {
if(null!=navigator.userAgent.match(/madeu-mobile/)){
if(isMobile.Android()){//안드로이드
window.madeu.setRefreshOn();
}
else if(isMobile.IOS()){//아이폰
let postData = {
"name": "setRefreshOn"
};
window.webkit.messageHandlers.madeu.postMessage(postData);
}
}
}
//함수7: 새로고침 함수 종료
//웹에서 => 모바일 함수 호출 시 자동으로 함수2 호출됨
function setRefreshOff() {
if(null!=navigator.userAgent.match(/madeu-mobile/)){
if(isMobile.Android()){//안드로이드
window.madeu.setRefreshOff();
}
else if(isMobile.IOS()){//아이폰
let postData = {
"name": "setRefreshOff"
};
window.webkit.messageHandlers.madeu.postMessage(postData);
}
}
}
function openPopup() {
if(null!=navigator.userAgent.match(/madeu-mobile/)){
if(isMobile.Android()){//안드로이드
window.madeu.openPopup();
}
else if(isMobile.IOS()){//아이폰
let postData = {
"name": "openPopup"
};
window.webkit.messageHandlers.madeu.postMessage(postData);
}
}
}
function closePopup() {
if(null!=navigator.userAgent.match(/madeu-mobile/)){
if(isMobile.Android()){//안드로이드
window.madeu.closePopup();
}
else if(isMobile.IOS()){//아이폰
let postData = {
"name": "closePopup"
};
window.webkit.messageHandlers.madeu.postMessage(postData);
}
}
}
function logout() {
if(null!=navigator.userAgent.match(/madeu-mobile/)){
if(isMobile.Android()){//안드로이드
window.madeu.logOut();
}
else if(isMobile.IOS()){//아이폰
let postData = {
"name": "logOut"
};
window.webkit.messageHandlers.madeu.postMessage(postData);
}
}
}
/* 전화걸기 */
function call(phoneNumber) {
if(null!=navigator.userAgent.match(/madeu-mobile/)){
if(isMobile.Android()){//안드로이드
window.madeu.call(phoneNumber);
}
else if(isMobile.IOS()){//아이폰
let postData = {
"name": "call",
"phoneNumber":phoneNumber
};
window.webkit.messageHandlers.madeu.postMessage({name:'call',phoneNumber:phoneNumber});
}
}
}
function openWebLinkUrl(newUrl) {
if(null!=navigator.userAgent.match(/madeu-mobile/)){
if(isMobile.Android()){//안드로이드
window.madeu.openWebLinkUrl(newUrl);
}
else if(isMobile.IOS()){//아이폰
let postData = {
"name": "openWebLinkUrl",
"newUrl": newUrl
};
window.webkit.messageHandlers.madeu.postMessage(postData);
}
}
}
//모바일에서 => 웹 함수 호출
function fn_callStateRinging() {
let videoContent = $(".swiper-slide.swiper-slide-active .image_wrap .image_box video")[0];
let activeIdData = $(".swiper-slide.swiper-slide-active")[0].id;
let activeIdNumber = activeIdData.replace('slideIndex_', '');
if(null!=videoContent){
let videoTime = videoContent.duration;
let playAndMute = $(".swiper-slide.swiper-slide-active .image_wrap .playAndMute img")[0];
videoContent.pause();
$(playAndMute).attr('src','/image/web/video/play.svg').attr('style','opacity: 1');
//비디오 프로그래스바 정지
fn_progressBarStop(videoTime,activeIdNumber);
}else{
let imageContent = $(".swiper-slide.swiper-slide-active .image_wrap .image_box img")[0];
branchClickEvent(activeIdNumber);
}
}
//사진 및 비디오 선택 이벤트 app
function fn_selectFile(typeParam,fileTypeParam,imageMaxCountParam,videoMaxCountParam){
if(null!=navigator.userAgent.match(/madeu-mobile/)){
if(isMobile.Android()){//안드로이드
window.madeu.selectFile(typeParam, fileTypeParam,imageMaxCountParam,videoMaxCountParam);
}
else if(isMobile.IOS()){//아이폰
let postData = {
"name": "selectFile",
"type": typeParam,
"fileType": fileTypeParam,
"imageMaxCount": imageMaxCountParam,
"videoMaxCount": videoMaxCountParam
};
window.webkit.messageHandlers.madeu.postMessage(postData);
}
}
}
////////////////////////////// 하이브리드 함수 종료 ///////////////

View File

@@ -0,0 +1,573 @@
let isRunning = false;
let phoneAuthYn = "N";
let userData = {};
let certCellFlag = "N";
let num = 60 * 3; // 몇분을 설정할지의 대한 변수 선언
let myVar;
let duplicateSuccess = false;
/****************************************************************************
* 정보입력 페이지 이동
****************************************************************************/
function fn_joinInputIntro() {
let serviceAgreement = $('#service_agreement').prop('checked');
let collectionAgreement = $('#collection_agreement').prop('checked');
let marketingAgreement = $('#marketing_agreement').prop('checked');
if (!serviceAgreement) {
modalEvent.warning('등록', '서비스 이용 약관은 필수 동의 사항입니다.')
return;
}
if (!collectionAgreement) {
modalEvent.warning('등록', '개인정보 수집 및 이용 약관은 필수 동의 사항입니다.')
return;
}
let param = "?serviceAgreement=" + serviceAgreement;
param += "&collectionAgreement=" + collectionAgreement;
param += "&marketingAgreement=" + marketingAgreement;
location.href = '/mobilejoin/joinInputIntro.do'+param;
}
/****************************************************************************
* 가입 완료버튼
****************************************************************************/
function fn_join(){
if(""==loginType){ //snsType MU:메이드유,K:카카오,N:네이버,A:애플
loginType = "MU";
}
let membershipAccount = $("#membershipAccount").val();
let membershipPassword = $("#membershipPassword").val();
let passwordCheck = $("#passwordCheck").val();
let userName = $("#userName").val();
let phoneNumber = $("#phoneNumber").val().replace(/-/g, "");
let introUser = $("#introUser").attr('data');
let reg_password = /^(?=.*[a-zA-Z])((?=.*\d)(?=.*\W)).{8,20}$/;
/* 디바이스 정보 추가 ( 임시 하드코딩 )*/
// let phoneType = 'A'
// let deviceUuid = 'e3fc0d3e-e1c7-49ea-bce3-6994721eb711'
// let pushKey = ''
// let modelName = 'galaxy'
// let osVersion = '1'
if(true != fn_emptyCheck(membershipAccount)){
modalEvent.warning("등록", "아이디를 입력하세요");
return;
}else if(membershipAccount.length<4){
modalEvent.warning("등록", "아이디는 최소 4자 이상 입력해야합니다.");
return;
}else if(!duplicateSuccess&&"MU"==loginType){
modalEvent.warning("등록", "아이디 중복여부를 확인하세요.");
return;
}
if("MU"==loginType){
if(true != fn_emptyCheck(membershipPassword)){
modalEvent.warning("등록", "비밀번호를 입력하세요");
return;
}else if(!reg_password.test(membershipPassword)) {
modalEvent.warning("등록", "비밀번호는 숫자,영문,특수문자 조합 최소 8자리 최대 20자리로 입력해야합니다.");
return;
}else{
if(membershipPassword!==passwordCheck){
modalEvent.warning("등록", "비밀번호가 일치하지 않습니다.");
return;
}
}
}
if(true != fn_emptyCheck(marketingAgreement)){
modalEvent.warning("등록", "마케팅 수신 동의여부가 없습니다.");
return;
}
if(true != fn_emptyCheck(userName)){
modalEvent.warning("등록", "성함이 없습니다.");
return;
}else if(userName.length<2){
modalEvent.warning("등록", "성함은 최소 2자 이상 입력해야합니다.");
return;
}
if(true != fn_emptyCheck(phoneNumber)){
modalEvent.warning("등록", "휴대폰번호가 없습니다.");
return;
}
if('Y'!==phoneAuthYn){
modalEvent.warning("등록", "휴대폰인증을 진행하세요");
return;
}
let formData = new FormData();
formData.append("membershipAccount", membershipAccount);
formData.append("membershipPassword", membershipPassword);
formData.append("passwordCheck", passwordCheck);
formData.append("userName", userName);
formData.append("phoneNumber", phoneNumber);
formData.append("introUser", introUser);
formData.append("loginType", loginType);
formData.append("marketingAgreement", marketingAgreement);
// formData.append("phoneType", phoneType);
// formData.append("deviceUuid", deviceUuid);
// formData.append("pushKey", pushKey);
// formData.append("modelName", modelName);
// formData.append("osVersion", osVersion);
$.ajax({
url: encodeURI('/mobilejoin/insertUser.do'),
data: formData,
dataType: "json",
processData: false,
contentType: false,
type: 'POST',
async: true,
success: function (data) {
if ('0' == data.msgCode) {
modalEvent.success("성공", "회원가입 되었습니다.", function () {
fn_joinToLogin(membershipAccount, membershipPassword);
})
} else {
modalEvent.danger("등록 오류", data.msgDesc, function (){
// location.href = '/mobilelogin/loginIntro.do';
fn_leftFormAction("/mobilehome/loginIntro.do");
});
}
},
error: function (xhr, status, error) {
modalEvent.danger("등록 오류", "등록 중 오류가 발생하였습니다. 잠시후 다시시도하십시오.");
},
beforeSend: function () {
},
complete: function () {
}
})
}
/****************************************************************************
* 회원가입 후 로그인
****************************************************************************/
function fn_joinToLogin(param1, param2){
let ajaxUrl = "";
if('MU'==loginType){
ajaxUrl = "/login.do";
}else{
ajaxUrl = "/snsLogin.do";
}
let formData = new FormData();
formData.append("loginId", param1);
formData.append("password", param2);
formData.append("loginType", loginType);
formData.append("deviceUuid", deviceUuid1);
formData.append("phoneType", phoneType1);
formData.append("modelName", modelName1);
formData.append("osVersion", osVersion1);
formData.append("pushKey", pushKey1);
formData.append("appVersion", appVersion1);
formData.append("deviceYn", deviceYn);
$.ajax({
url: encodeURI('/mobilelogin'+ajaxUrl),
data: formData,
dataType: 'json',
processData: false,
contentType: false,
type: 'POST',
async: true,
success: function(data){
if('0'==data.msgCode){
fn_leftFormAction("/mobilehome/homeIntro.do");
}
else{
modalEvent.danger("로그인 오류", data.msgDesc);
}
},
error : function(xhr, status, error) {
modalEvent.danger("로그인 오류", "조회 중 오류가 발생하였습니다. 잠시후 다시시도하십시오.");
},
beforeSend:function(){
},
complete:function(){
}
});
}
/****************************************************************************
* 아이디 중복확인
****************************************************************************/
function fn_duplicateCheck(){
let membershipAccount = $("#membershipAccount").val();
if(true != fn_emptyCheck(membershipAccount)){
modalEvent.warning("등록", "아이디를 입력하세요");
return;
}else if(membershipAccount.length<4){
modalEvent.warning("등록", "아이디는 최소 4자 이상 입력해야합니다.");
return;
}
let formData = new FormData();
formData.append("membershipAccount", membershipAccount);
$.ajax({
url: encodeURI('/mobilejoin/checkMembershipId.do'),
data: formData,
dataType: "json",
processData: false,
contentType: false,
type: 'POST',
async: true,
success: function (data) {
if ('0' == data.msgCode) {
if (data.success === 'true') {
modalEvent.success("", "사용 가능한 아이디입니다.", function () {
duplicateSuccess = true;
$('.first').append('<a id="idUseYn" style="font-size: small;color: #3985EA;">사용 가능한 아이디</a>')
checkAllFields();
})
} else {
modalEvent.success("", "이미 존재하는 아이디입니다.", function () {
$('.first').append('<a id="idUseYn" style="font-size: small;color: red;">중복된 아이디</a>')
})
}
} else {
modalEvent.danger("등록 오류", "이미 사용중인 아이디입니다. 다른 아이디를 입력해주세요.");
}
},
error: function (xhr, status, error) {
modalEvent.danger("등록 오류", "등록 중 오류가 발생하였습니다. 잠시후 다시시도하십시오.");
},
beforeSend: function () {
},
complete: function () {
}
})
}
/****************************************************************************
* 추천인 아이디 확인
****************************************************************************/
function fn_checkUser(){
let introUser = $("#introUser").val();
if(true != fn_emptyCheck(introUser)){
return;
}
let formData = new FormData();
formData.append("membershipAccount", introUser);
$.ajax({
url: encodeURI('/mobilejoin/checkMembershipId.do'),
data: formData,
dataType: "json",
processData: false,
contentType: false,
type: 'POST',
async: true,
success: function (data) {
if ('0' == data.msgCode) {
if($('#introUserCheck')){
$('#introUserCheck').remove();
}
if (0<data.rows.length) {
$('#introUser').parent().parent().append('<a id="introUserCheck" style="font-size: small;color: #3985EA;">확인되었습니다.</a>')
$('#introUser').attr('data',data.rows.muUserId);
} else {
$('#introUser').parent().parent().append('<a id="introUserCheck" style="font-size: small;color: red;">존재하지 않는 추천인 입니다.</a>')
}
} else {
modalEvent.danger("등록 오류", data.msgDesc);
}
},
error: function (xhr, status, error) {
modalEvent.danger("등록 오류", "등록 중 오류가 발생하였습니다. 잠시후 다시시도하십시오.");
},
beforeSend: function () {
},
complete: function () {
}
})
}
/****************************************************************************
* 휴대폰 본인인증
****************************************************************************/
function fn_sendAuthNum(){
let phoneNumber = $("#phoneNumber").val();
let reg_tel = /^[0-9]{10,11}$/;
if(true != fn_emptyCheck(phoneNumber)){
modalEvent.warning("조회", "휴대폰번호를 입력하세요.");
return;
}else{
if(reg_tel.test(phoneNumber) != true) {
modalEvent.warning("조회", "휴대폰번호는 숫자 10~11자리여야 합니다.");
return;
}else{
// 인증번호 발송
fn_insertPhoneAuth();
}
}
}
/****************************************************************************
* 인증번호 등록
****************************************************************************/
function fn_insertPhoneAuth(){
isRunning = false;
let phoneNumber = $("#phoneNumber").val();
let authType = "JN";
let formData = new FormData();
formData.append("phoneNumber", phoneNumber);
formData.append("authType", authType);
$.ajax({
url: encodeURI('/mobilephoneauth/insertPhoneAuth.do'),
data: formData,
dataType: 'json',
processData: false,
contentType: false,
type: 'POST',
async: true,
success: function(data){
if(data.msgCode=='0'){
modalEvent.success("", data.msgDesc, function(){
isRunning = true;
fn_startTimer();
$("#sendAuthNumBtn").text("재전송");
$(".certification_box2").show();
});
}else{
modalEvent.danger("", data.msgDesc);
}
},
error : function(xhr, status, error) {
modalEvent.danger("", "정상적으로 수행되지 않았습니다. 인터넷에 연결되어 있는지 확인해 보시기 바랍니다.");
},
beforeSend:function(xhr){
xhr.setRequestHeader("token", sessionStorage.getItem("token"));
},
complete:function(){
}
});
}
/****************************************************************************
* 타이머 함수 실행
****************************************************************************/
function fn_startTimer() {
// 남은 시간(초)
let count = 180;
let display = document.querySelector('#timer');
let minutes, seconds;
let timer = setInterval(function () {
if(isRunning){
minutes = parseInt(count / 60, 10);
seconds = parseInt(count % 60, 10);
minutes = minutes < 10 ? "0" + minutes : minutes;
seconds = seconds < 10 ? "0" + seconds : seconds;
display.textContent = "유효시간 " + minutes + ":" + seconds;
isRunning = true;
}else{
clearInterval(timer);
display.textContent = "";
isRunning = false;
}
// 타이머 종료
if (--count < 0) {
clearInterval(timer);
display.textContent = "";
isRunning = false;
$("#authNumber").val("");
}
}, 1000);
}
/****************************************************************************
* 인증번호 확인 조회
****************************************************************************/
function fn_selectPhoneAuthCheck(){
let phoneNumber = $("#phoneNumber").val();
let authNumber = $("#authNumber").val();
let reg_tel = /^[0-9]{10,11}$/;
if(true != fn_emptyCheck(phoneNumber)){
modalEvent.warning("조회", "휴대폰번호는 필수 값입니다.");
return;
}else{
if(reg_tel.test(phoneNumber) != true) {
modalEvent.warning("조회", "휴대폰번호는 숫자 10~11자리여야 합니다.");
return;
}else{
phoneNumber = phoneNumber.replace("-", "");
}
}
if(true != fn_emptyCheck(authNumber)){
modalEvent.warning("조회", "인증번호를 입력하세요.");
return;
}
let formData = new FormData();
formData.append("phoneNumber", phoneNumber);
formData.append("authNumber", authNumber);
$.ajax({
url: encodeURI('/mobilephoneauth/selectPhoneAuthCheck.do'),
data: formData,
dataType: 'json',
processData: false,
contentType: false,
type: 'POST',
async: false,
success: function(data){
if(data.msgCode=='0'){
modalEvent.success("", data.msgDesc);
phoneAuthYn = "Y";
clearInterval(timer);
isRunning = false;
// checkAllFields();
const completeButton = $('.button_box button');
completeButton.addClass('active');
completeButton.attr("disabled", false);
}else{
modalEvent.danger("조회 오류", data.msgDesc);
phoneAuthYn = "N";
checkAllFields();
}
},
error : function(xhr, status, error) {
modalEvent.danger("조회 오류", "정상적으로 수행되지 않았습니다. 인터넷에 연결되어 있는지 확인해 보시기 바랍니다.");
phoneAuthYn = "N";
checkAllFields();
},
beforeSend:function(xhr){
xhr.setRequestHeader("token", sessionStorage.getItem("token"));
},
complete:function(){
}
});
}
function checkAllFields(changeElement) {
const requiredFields = document.querySelectorAll('#membershipAccount,#membershipPassword,#passwordCheck,#userName,#phoneNumber,#authNumber');
let allFilled = true;
const completeButton = $('.button_box button');
if(changeElement && changeElement[0]===$("#membershipAccount")[0]){
duplicateSuccess=false;
allFilled = false;
$("#idUseYn").remove();
}
requiredFields.forEach(function (field) {
if (field.value.trim() === '') {
allFilled = false;
}
if(!duplicateSuccess){
allFilled = false;
}
if('Y'!==phoneAuthYn){
allFilled = false;
}
});
if(allFilled) {
completeButton.addClass('active');
completeButton.attr("disabled", false);
}else {
completeButton.removeClass('active')
completeButton.attr("disabled", true);
}
}
function alertFunc() {
var min = num / 60;
min = Math.floor(min);
var sec = num - (60 * min);
sec = sec > 9 ? sec : "0"+sec ;
if(num == 0){
certCellFlag = "T";
clearInterval(myVar) // num 이 0초가 되었을대 clearInterval로 타이머 종료
}
num--;
}
/****************************************************************************
* 페이지 init
****************************************************************************/
function fn_pageInit() {
getDeviceInfo();
if(''!=loginType && ''!=snsEmail){
$("#membershipAccount").val(snsEmail);
$("#membershipAccount").css("disabled",true);
$("#duplicateCheckBtn").css("display","none");
$("#passwordLi").css("display","none");
}
}
/****************************************************************************
* 페이지 event
****************************************************************************/
function fn_pageEvent() {
$('#membershipAccount,#membershipPassword,#passwordCheck,#userName,#phoneNumber,#authNumber').each(function () {
$(this).on('change', ()=>checkAllFields($(this)));
});
$("#introUser").change(function () {
fn_checkUser();
});
// 다음버튼
$("#btn_joinInputIntro").click(function () {
fn_joinInputIntro();
});
// 전체동의 체크
$("#all_agreement").change(function () {
const checkboxes = document.querySelectorAll('input[name="join_agreement"]');
checkboxes.forEach(function (checkbox) {
checkbox.checked = this.checked;
}, this);
});
}
$(function () {
// 페이지 init
fn_pageInit();
// 페이지 event
fn_pageEvent();
});

View File

@@ -0,0 +1,98 @@
/****************************************************************************
* 정보입력 페이지 이동
****************************************************************************/
function fn_joinInputIntro(){
let serviceAgreement = $('#service_agreement').prop('checked');
let collectionAgreement = $('#collection_agreement').prop('checked');
let marketingAgreement = $('#marketing_agreement').prop('checked');
if(!serviceAgreement){
modalEvent.warning('등록','서비스 이용 약관은 필수 동의 사항입니다.')
return;
}
if(!collectionAgreement){
modalEvent.warning('등록','개인정보 수집 및 이용 약관은 필수 동의 사항입니다.')
return;
}
let param = "?serviceAgreement="+serviceAgreement;
param += "&collectionAgreement="+collectionAgreement;
param += "&marketingAgreement="+marketingAgreement;
param += "&snsEmail="+snsEmail;
param += "&loginType="+loginType;
location.href = '/mobilejoin/joinInputIntro.do'+param;
}
/****************************************************************************
* 페이지 init
****************************************************************************/
function fn_pageInit(){
}
/****************************************************************************
* 페이지 event
****************************************************************************/
function fn_pageEvent(){
// 아아디 keypress
$(document).on('keypress', '#loginId', function(e) {
fn_enter(e);
});
// 비밀번호 keypress
$(document).on('keypress', '#password', function(e) {
fn_enter(e);
});
// 다음버튼
$("#btn_joinInputIntro").click(function () {
fn_joinInputIntro();
});
// 다음버튼
$("#all_agreement").click(function () {
fn_checkAll();
});
// 전체동의 체크
// $("#all_agreement").change(function () {
// const checkboxes = document.querySelectorAll('input[name="join_agreement"]');
// checkboxes.forEach(function(checkbox) {
// checkbox.checked = this.checked;
// }, this);
// });
}
/****************************************************************************
* 전체선택
****************************************************************************/
function fn_checkAll(){
if( $("#all_agreement").is(':checked') ){
$("input[name=join_agreement]").prop("checked", true);
}else{
$("input[name=join_agreement]").prop("checked", false);
}
}
/****************************************************************************
* 전체선택 확인
****************************************************************************/
function fn_checkYn(){
let rowsCount = $("input:checkbox[name=join_agreement]").length;
let rowsCheckCount = $("input:checkbox[name=join_agreement]:checked").length;
if(rowsCount==rowsCheckCount){
$("#all_agreement").prop("checked", true);
}else{
$("#all_agreement").prop("checked", false);
}
}
$(function(){
// 페이지 init
fn_pageInit();
// 페이지 event
fn_pageEvent();
});

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,182 @@
/****************************************************************************
* 아이디, 패스워드 엔터 이벤트
****************************************************************************/
function fn_enter(e){
if(e.which){
// 파이어폭스
if(13 == e.which) {
//로그인 액션 스크립트
fn_login();
}
}
else{
// 윈도우, 사파리, 크롬
if(13 == event.keyCode) {
//로그인 액션 스크립트
fn_login();
}
}
}
/****************************************************************************
* 로그인 이벤트
****************************************************************************/
function fn_login(){
let loginId = $("#loginId").val();
let password = $("#password").val();
if(true != fn_emptyCheck(loginId)){
modalEvent.warning("", "아이디를 입력하세요");
$("#loginId").focus();
return;
}
if(true != fn_emptyCheck(password)) {
modalEvent.warning("", "비밀번호를 입력하세요");
$("#password").focus();
return;
}
// 로그인할 때 한 번 더 호출
getDeviceInfo();
let formData = new FormData();
formData.append("loginId", loginId);
formData.append("password", password);
formData.append("deviceUuid", deviceUuid1);
formData.append("phoneType", phoneType1);
formData.append("modelName", modelName1);
formData.append("osVersion", osVersion1);
formData.append("pushKey", pushKey1);
formData.append("appVersion", appVersion1);
formData.append("deviceYn", deviceYn);
$.ajax({
url: encodeURI('/mobilelogin/login.do'),
data: formData,
dataType: 'json',
processData: false,
contentType: false,
type: 'POST',
async: true,
success: function(data){
if('0'==data.msgCode){
setLoginInfo(loginId,password,"MU");
// location.href = '/home';
fn_leftFormAction("/home");
}
else{
modalEvent.danger("로그인 오류", data.msgDesc);
}
},
error : function(xhr, status, error) {
modalEvent.danger("로그인 오류", "조회 중 오류가 발생하였습니다. 잠시후 다시시도하십시오.");
},
beforeSend:function(){
},
complete:function(){
}
});
}
/****************************************************************************
* 로그인 이벤트 (카카오)
****************************************************************************/
function loginWithKakao(){
Kakao.Auth.authorize({
redirectUri : 'http://nrm.madeu.co.kr/mobilesnslogin/kakaoLoginCallBackIntro.do'
// redirectUri: 'http://localhost:8080/mobilesnslogin/kakaoLoginCallBackIntro.do',
});
}
/****************************************************************************
* 페이지 init
****************************************************************************/
function fn_pageInit(){
getDeviceInfo();
// getLoginInfo();
<!--kakao-->
Kakao.init('5b8e8d554e06d9b6cd5f1fb628ed301a');
Kakao.isInitialized();
<!--apple-->
// AppleID.auth.init({
// clientId : 'com.play-entree.mobile',
// scope : 'email',
// redirectURI : 'http://nrm.madeu.co.kr/mobilesnslogin/appleLoginCallBackIntro.do',
// state : 'play-entree',
// nonce : 'entree',
// usePopup : false //or false defaults to false
// });
<!--naver-->
let clientId = "EhgHX46SiQBMflqt41YB";
let callbackUrl = "http://nrm.madeu.co.kr/mobilesnslogin/naverLoginCallBackIntro.do";
// let callbackUrl = "http://localhost:8080/mobilesnslogin/naverLoginCallBackIntro.do";
let naverLogin = new naver.LoginWithNaverId({
clientId: clientId,
callbackUrl: callbackUrl,
isPopup: false,
loginButton: {color: "green", type: 1, height: 50}
});
naverLogin.init();
$(document).on("click", "#naverLogin", function(){
let btnNaverLogin = document.getElementById("naverIdLogin").firstChild;
btnNaverLogin.click();
});
}
/****************************************************************************
* 페이지 event
****************************************************************************/
function fn_pageEvent(){
// 아아디 keypress
$(document).on('keypress', '#loginId', function(e) {
fn_enter(e);
});
// 비밀번호 keypress
$(document).on('keypress', '#password', function(e) {
fn_enter(e);
});
// 로그인 버튼
$("#btnLogin").click(function () {
fn_login();
});
// 회원가입 버튼
$("#btnJoin").click(function () {
fn_joinIntro();
});
// 계정찾기 버튼
$("#btnFindAccount").click(function () {
fn_findAccountIntro();
});
// 비밀번호 찾기 버튼
$("#btnFindPassword").click(function () {
fn_findPasswordIntro();
});
$("#naverLogin").on("click", function(){
let btnNaverLogin = document.getElementById("naverIdLogin").firstChild;
btnNaverLogin.click();
});
}
$(function(){
// 페이지 init
fn_pageInit();
// 페이지 event
fn_pageEvent();
});

View File

@@ -0,0 +1,64 @@
/****************************************************************************
* 시술 정보 조회
****************************************************************************/
function fn_selectMedical(){
let formData = new FormData();
formData.append("muAppContentId", muAppContentId)
$.ajax({
url: encodeURI('/mobilemedical/selectMedical.do'),
data: formData,
dataType: "json",
processData: false,
contentType: false,
type: 'POST',
async: false,
success: function(data){
if('0'==data.msgCode){
if(0 < data.rows.length){
const content = data.rows[0];
$('.img_box').append(`<img style="width: 100%; height: 100%;" src="${decodeURI(content.filePath)}" alt="${content.title}">`);
$('.text_box').append(`<p>${content.title}</p>`);
$('.content_box div').append(content.detail);
$('.content_box .article').append(content.content);
}
}
else if(data.msgCode=='-1'){
modalEvent.warning("조회 오류", data.msgDesc);
}
else{
modalEvent.danger("조회 오류", "조회 중 오류가 발생하였습니다. 잠시후 다시시도하십시오.");
}
},
error : function(xhr, status, error) {
modalEvent.danger("조회 오류", "조회 중 오류가 발생하였습니다. 잠시후 다시시도하십시오.");
},
beforeSend:function(){
},
complete:function(){
}
});
}
/****************************************************************************
* 페이지 init
****************************************************************************/
function fn_pageInit(){
fn_selectMedical();
}
/****************************************************************************
* 페이지 event
****************************************************************************/
function fn_pageEvent(){
}
$(function(){
// 페이지 init
fn_pageInit();
// 페이지 event
fn_pageEvent();
});

View File

@@ -0,0 +1,336 @@
/****************************************************************************
* 메인이벤트조회
****************************************************************************/
function fn_selectMainEventList(){
let formData = new FormData();
formData.append("exposedYn", "Y")
$.ajax({
url: encodeURI('/mobilehome/selectListEvent.do'),
data: formData,
dataType: "json",
processData: false,
contentType: false,
type: 'POST',
async: false,
success: function(data){
if('0'==data.msgCode){
if(0 < data.rows.length){
const events = data.rows;
const swiperWrapper = $('.swiper-wrapper');
swiperWrapper.empty(); // 기존 콘텐츠 초기화
events.forEach((event, index) => {
// swiper-slide 클래스를 생성하여 이벤트 정보 삽입
const className = `swiper-slide slide-${index + 1}`;
const slideHTML = `
<div class="${className}">
<div class="banner_box" onClick="fn_eventIntro('${event.muAppEventId}')">
<div class="img_box">
<img style="width: 100%; height: 100%;" src="${decodeURI(event.filePath)}" alt="${event.title}">
</div>
<div class="dday_box">
<p>
남은기간<br/>
<span>D - ${0<event.daysRemaining?event.daysRemaining:0}</span>
</p>
</div>
</div>
</div>
`;
// swiper-wrapper에 추가
swiperWrapper.append(slideHTML);
const homeSwiper = new Swiper('.homeSwiper', {
loop: true,
autoplay: true,
direction: 'horizontal',
/*pagination: {
el: '.swiper-pagination',
type: 'bullets'
},*/
});
});
}else{
$('.tab_panel').css('padding-top',0);
}
}
else if(data.msgCode=='-1'){
modalEvent.warning("조회 오류", data.msgDesc);
}
else{
modalEvent.danger("조회 오류", "조회 중 오류가 발생하였습니다. 잠시후 다시시도하십시오.");
}
},
error : function(xhr, status, error) {
modalEvent.danger("조회 오류", "조회 중 오류가 발생하였습니다. 잠시후 다시시도하십시오.");
},
beforeSend:function(){
},
complete:function(){
}
});
}
/****************************************************************************
* 메인컨텐츠 보드조회
****************************************************************************/
function fn_selectListMedicalBoardJson(){
let formData = new FormData();
$.ajax({
url: encodeURI('/mobilemedical/selectListMedicalBoard.do'),
data: formData,
dataType: "json",
processData: false,
contentType: false,
type: 'POST',
async: false,
success: function(data){
const boardWrapper = $('#popularity');
$('.popular_box').remove(); // 기존 콘텐츠 초기화
if (0 < Object.keys(data.rows).length) {
const boards = data.rows;
console.log(boards);
// 각 boardId에 대해 처리
Object.keys(boards).forEach((boardId,index) => {
const board = boards[boardId];
const boardDiv = document.createElement('div');
boardDiv.className = `popular_box ${index===0?'first':''}`;
// 첫 번째 board의 제목과 콘텐츠 추가
boardDiv.innerHTML = `
<p class="title">${board[0].boardTitle}</p>
<p>${board[0].boardContent}</p>
`;
// 각 콘텐츠 항목을 처리
board.forEach((content, index) => {
const contentUl = document.createElement('ul');
contentUl.className='list_box';
contentUl.innerHTML = `
<li onclick="fn_medicalIntro('${content.muAppContentId}')">
<p class="number">${index + 1}</p>
<div>
<div class="img_box">
<img style="width: 48px; height: 48px;" src="${decodeURI(content.filePath2)}" alt="${content.title}">
</div>
<div class="text_box">
<p class="label">${content.title}</p>
<p>${content.content}</p>
</div>
</div>
</li>
`;
// boardDiv에 contentUl 추가
boardDiv.appendChild(contentUl);
});
// boardWrapper에 boardDiv 추가
boardWrapper.append(boardDiv);
});
} else if (data.msgCode=='-1'){
modalEvent.warning("조회 오류", data.msgDesc);
}
else{
boardWrapper.append(`<div class="popular_box" style="width: 100%;height:72px;padding: 0;margin: 0;border: none;display: flex;align-items: center;justify-content: center;background: white">
<p class="user">조회 정보가 없습니다.</p>
</div>`);
}
},
error : function(xhr, status, error) {
modalEvent.danger("조회 오류", "조회 중 오류가 발생하였습니다. 잠시후 다시시도하십시오.");
},
beforeSend:function(){
},
complete:function(){
}
});
}
/****************************************************************************
* 시술 리스트 정보 조회
****************************************************************************/
function fn_selectListMedicalJson(){
let contentWrapper = ''
switch (categoryCode) {
case 'popular':
contentWrapper = $('#popularity ul');
break;
case 'petit':
contentWrapper = $('#petit ul');
break;
case 'skin':
contentWrapper = $('#skin ul');
break;
case 'fat':
contentWrapper = $('#diet ul');
break;
}
contentWrapper.empty();
let formData = new FormData();
formData.append("categoryCode", categoryCode)
$.ajax({
url: encodeURI('/mobilemedical/selectListMedical.do'),
data: formData,
dataType: "json",
processData: false,
contentType: false,
type: 'POST',
async: false,
success: function(data){
if('0'==data.msgCode){
if(0 < data.rows.length) {
const contents = data.rows;
contents.forEach((content, index) => {
const innerHtml = `
<li class="${0 === index ? 'first' : ''}" onclick="fn_medicalIntro('${content.muAppContentId}')">
<div class="img_box">
<img style="width: 72px; height: 72px;" src="${decodeURI(content.filePath2)}" alt="${content.title}">
</div>
<div class="text_box">
<p class="label">${content.title}</p>
<p>${content.content}</p>
</div>
</li>
`
contentWrapper.append(innerHtml);
});
}else{
contentWrapper.append(`<div class="" style="width: 100%;height:72px;padding: 0;margin: 0;border: none;display: flex;align-items: center;justify-content: center;background: white">
<p class="user">조회 정보가 없습니다.</p>
</div>`);
}
}
else if(data.msgCode=='-1'){
modalEvent.warning("조회 오류", data.msgDesc);
}
else{
modalEvent.danger("조회 오류", "조회 중 오류가 발생하였습니다. 잠시후 다시시도하십시오.");
}
},
error : function(xhr, status, error) {
modalEvent.danger("조회 오류", "조회 중 오류가 발생하였습니다. 잠시후 다시시도하십시오.");
},
beforeSend:function(){
},
complete:function(){
}
});
}
/****************************************************************************
* 검색하기
****************************************************************************/
function fn_medicalSearch(target){
if(target){
categoryCode = $(target).data('code')
}else{
categoryCode = $('.nav-tabs .active p').data('code');
}
if("popular" == categoryCode){
referTap = "popularity";
}else if("petit" == categoryCode){
referTap = "petit";
}else if("skin" == categoryCode){
referTap = "skin";
}else if("fat" == categoryCode){
referTap = "diet";
}else{
referTap = "popularity";
}
if('popular'===categoryCode||''===categoryCode){
fn_selectListMedicalBoardJson();
}else{
fn_selectListMedicalJson();
}
}
/***************************************************************************
* 이벤트 상세페이지 이동
****************************************************************************/
function fn_eventIntro(id){
fn_tapPageMove("medical", referTap, '/mobileevent/selectEventIntro.do?muAppEventId='+id);
// location.href = '/mobileevent/selectEventIntro.do?muAppEventId='+id;
}
/****************************************************************************
* 시술 상세페이지 이동
****************************************************************************/
function fn_medicalIntro(id){
fn_tapPageMove("medical", referTap, '/mobilemedical/selectMedicalIntro.do?muAppContentId='+id);
// location.href = '/mobilemedical/selectMedicalIntro.do?muAppContentId='+id;
}
/****************************************************************************
* 페이지 init
****************************************************************************/
function fn_pageInit(){
if($('.notify_box').hasClass('open')){
$('main').addClass('short');
}else{
$('main').addClass('short2');
}
if(!categoryCode){
}else{
// 모든 <a> 태그 안의 <p> 태그를 순환
$('.nav-tabs p').each(function() {
const dataCode = $(this).data('code'); // 각 <p> 태그의 텍스트 가져오기
// 특정 텍스트와 일치하는지 확인
if (dataCode === categoryCode) {
$(this).siblings('li').addClass('active');// 텍스트 색상 변경
}
});
}
fn_medicalSearch();
fn_selectMainEventList();
}
/****************************************************************************
* 페이지 event
****************************************************************************/
function fn_pageEvent(){
$('.nav_box a').on('click', function(event) {
fn_medicalSearch(event.target);
});
}
/****************************************************************************
* 페이지 탭 선택
****************************************************************************/
function fn_pageTapSelect(){
$(".navTap").removeClass("active");
$(".tabContent").removeClass("active");
if("popularity" == referTap){
$("#navTap_popularity a").click();
}else if("petit" == referTap){
$("#navTap_petit a").click();
}else if("skin" == referTap){
$("#navTap_skin a").click();
}else if("diet" == referTap){
$("#navTap_diet a").click();
}else{
$("#navTap_popularity a").click();
}
}
$(function(){
// 페이지 탭 선택
fn_pageTapSelect();
// 페이지 init
fn_pageInit();
// 페이지 event
fn_pageEvent();
});

View File

@@ -0,0 +1,163 @@
/****************************************************************************
* 멤버십충전 내역 조회
****************************************************************************/
function fn_selectListMembershipChargeJson(){
let formData = new FormData();
formData.append("membershipSearchDate",membershipSearchDate);
formData.append("sortBy",sortBy);
$.ajax({
url: encodeURI('/mobilemembership/selectListMembershipCharge.do'),
data: formData,
dataType: "json",
processData: false,
contentType: false,
type: 'POST',
async: false,
success: function(data){
if('0'==data.msgCode){
const ListWrapper = $('.list_btm');
ListWrapper.empty();
if(0<data.totalCount){
let innerHtml = '<ul>';
data.rows.forEach((chargeData,index)=>{
innerHtml+=`<li>
<div>
<p>${chargeData.writeDate}</p>
<p>${chargeData.chargePaymentItemName}</p>
</div>
<div class="right_box">
<p>충전 금액</p>
<p>${chargeData.rechargeAmount}</p>
</div>
</li>`
})
innerHtml += '</ul>';
ListWrapper.append(innerHtml)
} else {
const innerHtml = '<ul><li style="padding: 15px 20px; margin-top: 10px;">멤버십 충전내역이 없습니다.</li>';
ListWrapper.append(innerHtml);
}
} else if (data.msgCode == '-1') {
modalEvent.warning("조회 오류", data.msgDesc);
} else {
modalEvent.danger("조회 오류", "조회 중 오류가 발생하였습니다. 잠시후 다시시도하십시오.");
}
},
error: function(xhr, status, error) {
modalEvent.danger("조회 오류", "조회 중 오류가 발생하였습니다. 잠시후 다시시도하십시오.");
},
beforeSend:function(){
},
complete:function(){
}
});
}
/****************************************************************************
* 검색하기
****************************************************************************/
function fn_membershipChargeSearch(param){
sortBy = $(".button_box .on").attr("id");
fn_selectListMembershipChargeJson();
}
/****************************************************************************
* 페이지 init
****************************************************************************/
function fn_pageInit(){
if(isMobile.Android()){
// 안드로이드
let value;
let year;
let month;
$("#mmDatepicker").click(function(e){
e.preventDefault();
value = prompt("monthPicker");
if(null === value || !value){
// 오늘
let toDate = new Date();
year = toDate.getFullYear();
month = toDate.getMonth() + 1;
if(month < 10) month = "0" + month;
}else{
let valueArr = value.split("-");
year = valueArr[0];
month = valueArr[1];
if(month < 10) month = "0" + month;
}
membershipSearchDate = year+"-"+month;
$(this).val(membershipSearchDate);
fn_selectListMembershipChargeJson();
});
}else if(isMobile.IOS()){
// IOS
let value; /*$(this).val() */
let year;
let month;
$("#mmDatepicker").change(function(){
value = $(this).val();
if(!value){
// 오늘
let toDate = new Date();
year = toDate.getFullYear();
month = toDate.getMonth() + 1;
if(month < 10) month = "0" + month;
}else{
let valueArr = $(this).val().split("-");
year = valueArr[0];
month = valueArr[1];
if(month < 10) month = "0" + month;
}
membershipSearchDate = year+"-"+month;
$(this).val(membershipSearchDate);
fn_selectListMembershipChargeJson();
});
}
if(membershipSearchDate){
$("#mmDatepicker").val(membershipSearchDate)
}else{
// 오늘
let toDate = new Date();
let year = toDate.getFullYear();
let month = toDate.getMonth() + 1;
if(month < 10) month = "0" + month;
$("#mmDatepicker").val( year+'-'+month).trigger("change");
membershipSearchDate = year+'-'+month;
}
//멤버십 충전내역 조회
fn_membershipChargeSearch();
}
/****************************************************************************
* 페이지 event
****************************************************************************/
function fn_pageEvent(){
$(".button_box button").on('click', function(){
$(".button_box .on").removeClass('on');
$(this).addClass('on');
fn_membershipChargeSearch();
});
}
$(function(){
// 페이지 init
fn_pageInit();
// 페이지 event
fn_pageEvent();
});

View File

@@ -0,0 +1,167 @@
/****************************************************************************
* 멤버십사용 내역 조회
****************************************************************************/
function fn_selectListMembershipUseJson(){
let formData = new FormData();
formData.append("membershipSearchDate",membershipSearchDate);
formData.append("sortBy",sortBy);
$.ajax({
url: encodeURI('/mobilemembership/selectListMembershipUse.do'),
data: formData,
dataType: "json",
processData: false,
contentType: false,
type: 'POST',
async: false,
success: function(data){
if('0'==data.msgCode){
const ListWrapper = $('.list_btm');
ListWrapper.empty();
if(0<data.totalCount){
let innerHtml = '<ul>';
data.rows.forEach((useData,index)=>{
innerHtml+=`<li>
<div>
<p>${useData.writeDate}</p>
<p>
<span>${useData.treatmentName}</span>
<span>${useData.procedureName}</span>
</p>
</div>
<div class="right_box">
<p>사용 금액</p>
<p>${useData.usedAmount}</p>
</div>
</li>`
})
innerHtml += '</ul>';
ListWrapper.append(innerHtml)
} else {
const innerHtml = '<ul><li style="padding: 15px 20px; margin-top: 10px;">멤버십 사용내역이 없습니다.</li>';
ListWrapper.append(innerHtml);
}
} else if (data.msgCode == '-1') {
modalEvent.warning("조회 오류", data.msgDesc);
} else {
modalEvent.danger("조회 오류", "조회 중 오류가 발생하였습니다. 잠시후 다시시도하십시오.");
}
},
error: function(xhr, status, error) {
modalEvent.danger("조회 오류", "조회 중 오류가 발생하였습니다. 잠시후 다시시도하십시오.");
},
beforeSend:function(){
},
complete:function(){
}
});
}
/****************************************************************************
* 검색하기
****************************************************************************/
function fn_membershipUseSearch(param){
sortBy = $(".button_box .on").attr("id");
fn_selectListMembershipUseJson();
}
/****************************************************************************
* 페이지 init
****************************************************************************/
function fn_pageInit(){
if(isMobile.Android()){
// 안드로이드
let value;
let year;
let month;
$("#mmDatepicker").click(function(e){
e.preventDefault();
value = prompt("monthPicker");
if(null === value || !value){
// 오늘
let toDate = new Date();
year = toDate.getFullYear();
month = toDate.getMonth() + 1;
if(month < 10) month = "0" + month;
}else{
let valueArr = value.split("-");
year = valueArr[0];
month = valueArr[1];
if(month < 10) month = "0" + month;
}
membershipSearchDate = year+"-"+month;
$(this).val(membershipSearchDate);
fn_selectListMembershipUseJson();
});
}else if(isMobile.IOS()){
// IOS
let value; /**/
let year;
let month;
$("#mmDatepicker").change(function(){
value = $(this).val();
if(!value){
// 오늘
let toDate = new Date();
year = toDate.getFullYear();
month = toDate.getMonth() + 1;
if(month < 10) month = "0" + month;
}else{
let valueArr = $(this).val().split("-");
year = valueArr[0];
month = valueArr[1];
if(month < 10) month = "0" + month;
}
membershipSearchDate = year+"-"+month;
$(this).val(membershipSearchDate);
fn_selectListMembershipUseJson();
});
}
if(membershipSearchDate){
$("#mmDatepicker").val(membershipSearchDate)
}else{
// 오늘
let toDate = new Date();
let year = toDate.getFullYear();
let month = toDate.getMonth() + 1;
if(month < 10) month = "0" + month;
$("#mmDatepicker").val( year+'-'+month).trigger("change");
membershipSearchDate = year+'-'+month;
}
//멤버십 충전내역 조회
fn_membershipUseSearch();
}
/****************************************************************************
* 페이지 event
****************************************************************************/
function fn_pageEvent(){
$(".button_box button").on('click', function(){
$(".button_box .on").removeClass('on');
$(this).addClass('on');
fn_membershipUseSearch();
});
}
$(function(){
// 페이지 init
fn_pageInit();
// 페이지 event
fn_pageEvent();
});

View File

@@ -0,0 +1,240 @@
/* ##############################################################
설 명 : [Modal]마이페이지- 회원탈퇴 팝업
작성일 : 2024. 09. 24.
작성자 : NTsoft
수정일 수정자 수정내용
------- -------- ---------------------------
2024. 09. 24. NTsoft 최초 생성
*/
let userAccountDeleteModal = {
callback : null,
reqParam : null,
dataList : null,
/* 모달 초기화 작업 */
init : function () {
$('#userAccountDeleteModal').remove();
$('body').append( this.HtmlTemplate);
//그리드 이벤트
this.setEvent();
},
/* 그리드 이벤트 설정 */
setEvent:function() {
$('#userAccountDeleteModal .btnCancle').on("click", function(){
userAccountDeleteModal.close();
});
$('#userAccountDeleteModal .btnSave').on("click", function(){
userAccountDeleteModal.save("I");
});
},
/* 데이터 선택 */
setSelect:function(selectNumber) {
let checkedData = dataList[selectNumber];
if(dataList==null||checkedData==undefined){
return ;
}
if( userAccountDeleteModal.callback ) {
userAccountDeleteModal.callback(checkedData);
}
userAccountDeleteModal.close();
},
// 상세 조회
search:function(state) {
let muAttendanceId = userAccountDeleteModal.reqParam.muAttendanceId;
let muAttendanceId2 = userAccountDeleteModal.reqParam.muAttendanceId2;
let muMemberId = userAccountDeleteModal.reqParam.muMemberId;
let attendanceDate = userAccountDeleteModal.reqParam.attendanceDate;
if(true != fn_emptyCheck(muAttendanceId) && true != fn_emptyCheck(muAttendanceId2)){
modalEvent.warning("수정", "근태 정보가 없습니다.");
return;
}
if(true != fn_emptyCheck(muMemberId)){
modalEvent.warning("수정", "직원 정보가 없습니다.");
return;
}
if(true != fn_emptyCheck(attendanceDate)){
modalEvent.warning("수정", "근태날짜 정보가 없습니다.");
return;
}
let formData = new FormData();
formData.append("menuClass", menuClass);
formData.append("muAttendanceId", muAttendanceId);
formData.append("muAttendanceId2", muAttendanceId2);
$.ajax({
url: encodeURI('/webattendance/selectAttendanceCommute.do'),
data: formData,
dataType: "json",
processData: false,
contentType: false,
type: 'POST',
async: true,
success: function(data){
if('0'==data.msgCode){
if(0<data.rows.length){
$("#userAccountDeleteModal #modalMemberNameId").text(data.rows[0].memberName+'('+data.rows[0].loginId+')');
$("#userAccountDeleteModal #modalAttendanceDate").text(attendanceDate);
// $("#userAccountDeleteModal #modalStartTime").siblings("button").text(data.rows[0].startTime);
$("#userAccountDeleteModal #modalStartTime").val(data.rows[0].startTime||"00:00");
// $("#userAccountDeleteModal #modalEndTime").siblings("button").text(data.rows[0].endTime);
$("#userAccountDeleteModal #modalEndTime").val(data.rows[0].endTime||"00:00");
}
}
else{
modalEvent.danger("조회 오류", data.msgDesc);
}
},
error : function(xhr, status, error) {
modalEvent.danger("조회 오류", "조회 중 오류가 발생하였습니다. 잠시후 다시시도하십시오.");
},
beforeSend:function(){
},
complete:function(){
}
});
},
//저장
save:function(state) {
let muAttendanceId = userAccountDeleteModal.reqParam.muAttendanceId;
let muAttendanceId2 = userAccountDeleteModal.reqParam.muAttendanceId2;
let muMemberId = userAccountDeleteModal.reqParam.muMemberId;
let attendanceDate = userAccountDeleteModal.reqParam.attendanceDate;
let startTime = $("#userAccountDeleteModal #modalStartTime").val();
let endTime = $("#userAccountDeleteModal #modalEndTime").val();
if(true != fn_emptyCheck(muAttendanceId) && true != fn_emptyCheck(muAttendanceId2)){
modalEvent.warning("수정", "근태 정보가 없습니다.");
return;
}
if(true != fn_emptyCheck(muMemberId)){
modalEvent.warning("수정", "직원 정보가 없습니다.");
return;
}
if(true != fn_emptyCheck(attendanceDate)){
modalEvent.warning("수정", "날짜 정보가 없습니다.");
return;
}
if(true != fn_emptyCheck(startTime)){
modalEvent.warning("수정", "출근 시간 정보가 없습니다.");
return;
}
if(true != fn_emptyCheck(endTime)){
modalEvent.warning("수정", "퇴근 시간 정보가 없습니다.");
return;
}
if(startTime>=endTime){
modalEvent.warning("수정", "출/퇴근기록을 다시 확인해주세요");
return;
}
modalEvent.info("수정", "출/퇴근 정보를 수정하시겠습니까?", function(){
let formData = new FormData();
formData.append("menuClass", menuClass);
formData.append("muAttendanceId", muAttendanceId);
formData.append("muAttendanceId2", muAttendanceId2);
formData.append("muMemberId", muMemberId);
formData.append("attendanceDate", attendanceDate);
formData.append("startTime", startTime);
formData.append("endTime", endTime);
$.ajax({
url: encodeURI('/webattendance/updateAttendanceCommute.do'),
data: formData,
dataType: "json",
processData: false,
contentType: false,
type: 'POST',
async: true,
success: function(data){
if('0'==data.msgCode){
modalEvent.success("수정 성공", data.msgDesc, function(){
if( userAccountDeleteModal.callback ) {
userAccountDeleteModal.callback();
}
userAccountDeleteModal.close();
});
}
else{
modalEvent.danger("수정 오류", data.msgDesc);
}
},
error : function(xhr, status, error) {
modalEvent.danger("수정 오류", "등록 중 오류가 발생하였습니다. 잠시후 다시시도하십시오.");
},
beforeSend:function(){
},
complete:function(){
}
});
});
},
/*
* 팝업
* callback : 콜백함수, reqParam: 팝업파라미터
*/
popup:function(callback, reqParam) {
// 초기화 후 열기
userAccountDeleteModal.init();
//콜백함수 지정.
userAccountDeleteModal.callback = callback;
userAccountDeleteModal.reqParam = reqParam;
userAccountDeleteModal.dataList = null;
fn_dateTimePicker1("#modalStartTime", "00:00");
fn_dateTimePicker1("#2", "00:00");
setTimeout(function(){
$('#userAccountDeleteModal').modal('show')
}, 200);
userAccountDeleteModal.search();
},
/*
* 팝업 닫기
*/
close:function() {
$('#userAccountDeleteModal').modal('hide');
setTimeout(function(){
$('#userAccountDeleteModal').remove();
},500);
},
HtmlTemplate : `
<div class="modal withdrawal_modal fade" id="userAccountDeleteModal" tabindex="-1" aria-labelledby="exampleModalLabel" aria-hidden="">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<p class="label">회원탈퇴</p>
</div>
<div class="modal-body">
<p>회원탈퇴를 진행하시겠습니까?</p>
</div>
<div class="modal-footer">
<div class="btn_box">
<button class="close_btn">취소</button>
<button class="save_btn">탈퇴하기</button>
</div>
</div>
</div>
</div>
</div>
`
};

View File

@@ -0,0 +1,225 @@
/****************************************************************************
* 멤버십 정보 조회
****************************************************************************/
function fn_selectMembershipJson(){
let formData = new FormData();
$.ajax({
url: encodeURI('/mobilemembership/selectTotalMembershipBalance.do'),
data: formData,
dataType: "json",
processData: false,
contentType: false,
type: 'POST',
async: false,
success: function(data){
if('0'==data.msgCode){
if(0 < data.rows.length) {
$("#membershipBalance").text(data.rows[0].membershipBalance+' 원');
}
}
else if(data.msgCode=='-1'){
modalEvent.warning("조회 오류", data.msgDesc);
}
else{
modalEvent.danger("조회 오류", "조회 중 오류가 발생하였습니다. 잠시후 다시시도하십시오.");
}
},
error : function(xhr, status, error) {
modalEvent.danger("조회 오류", "조회 중 오류가 발생하였습니다. 잠시후 다시시도하십시오.");
},
beforeSend:function(){
},
complete:function(){
}
});
}
function fn_deleteUser(){
modalEvent.info("삭제", "앱 탈퇴를 진행하시겠습니까?", function(){
let formData = new FormData();
$.ajax({
url: encodeURI('/mobilelogin/deleteUser.do'),
data: formData,
dataType: "json",
processData: false,
contentType: false,
type: 'POST',
async: true,
success: function(data){
if('0'==data.msgCode){
modalEvent.success("성공", "탈퇴가 완료되었습니다.", function(){
location.href = "/mobilelogin/logout.do"
});
}
else{
modalEvent.danger("등록 오류", data.msgDesc);
}
},
error : function(xhr, status, error) {
modalEvent.danger("등록 오류", "등록 중 오류가 발생하였습니다. 잠시후 다시시도하십시오.");
},
beforeSend:function(){
},
complete:function(){
}
});
});
}
/****************************************************************************
* 디바이스 푸시 알림 여부 조회
****************************************************************************/
function fn_selectDevicePushYn(){
let formData = new FormData();
$.ajax({
url: encodeURI('/mobiledevice/selectDevicePushYn.do'),
data: formData,
dataType: "json",
processData: false,
contentType: false,
type: 'POST',
async: false,
success: function(data){
if('0'==data.msgCode){
let autoPushYn = data.rows[0].autoPushYn;
let marketingPushYn = data.rows[0].marketingPushYn;
if("Y" == autoPushYn){
$("#autoPushYn").prop("checked", true);
}else{
$("#autoPushYn").prop("checked", false);
}
if("Y" == marketingPushYn){
$("#marketingPushYn").prop("checked", true);
}else{
$("#marketingPushYn").prop("checked", false);
}
}
else if(data.msgCode=='-1'){
modalEvent.warning("조회 오류", data.msgDesc);
}
else{
modalEvent.danger("조회 오류", "조회 중 오류가 발생하였습니다. 잠시후 다시시도하십시오.");
}
},
error : function(xhr, status, error) {
modalEvent.danger("조회 오류", "조회 중 오류가 발생하였습니다. 잠시후 다시시도하십시오.");
},
beforeSend:function(){
},
complete:function(){
}
});
}
/****************************************************************************
* 디바이스 푸시 알림 여부 수정
****************************************************************************/
function fn_updateDevicePushYn(type, pushYn){
let formData = new FormData();
formData.append("type", type);
formData.append("pushYn", pushYn);
$.ajax({
url: encodeURI('/mobiledevice/updateDevicePushYn.do'),
data: formData,
dataType: "json",
processData: false,
contentType: false,
type: 'POST',
async: false,
success: function(data){
if('0'==data.msgCode){
}
else if(data.msgCode=='-1'){
modalEvent.warning("수정 오류", data.msgDesc);
}
else{
modalEvent.danger("수정 오류", "수정 중 오류가 발생하였습니다. 잠시후 다시시도하십시오.");
}
},
error : function(xhr, status, error) {
modalEvent.danger("수정 오류", "수정 중 오류가 발생하였습니다. 잠시후 다시시도하십시오.");
},
beforeSend:function(){
},
complete:function(){
}
});
}
/****************************************************************************
* 페이지 init
****************************************************************************/
function fn_pageInit(){
//멤버십 포인트 조회
fn_selectMembershipJson();
//main 높이값 - class
if($('.notify_box').hasClass('open')){
$('main').addClass('short');
}else{
$('main').addClass('short2');
}
// 푸시 알림
fn_selectDevicePushYn();
$("#autoPushYn").change(function(){
let pushYn = "N";
if($(this).is(":checked")){
pushYn = "Y"
}
fn_updateDevicePushYn("auto", pushYn);
});
$("#marketingPushYn").change(function(){
let pushYn = "N";
if($(this).is(":checked")){
pushYn = "Y"
}
fn_updateDevicePushYn("marketing", pushYn);
});
}
/****************************************************************************
* 페이지 event
****************************************************************************/
function fn_pageEvent(){
// 아아디 keypress
$(document).on('keypress', '#loginId', function(e) {
fn_enter(e);
});
// 비밀번호 keypress
$(document).on('keypress', '#password', function(e) {
fn_enter(e);
});
// 로그인 버튼
$("#btnLogin").click(function () {
fn_login();
});
}
$(function(){
// 페이지 init
fn_pageInit();
// 페이지 event
fn_pageEvent();
});

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,136 @@
/* ##############################################################
설 명 : [Modal]공지사항 상세/수정 팝업
작성일 : 2023. 01. 19.
작성자 : NTsoft
수정일 수정자 수정내용
------- -------- ---------------------------
2023. 01. 19. NTsoft 최초 생성
*/
let mobileNoticeSelectModal = {
callback : null,
reqParam : null,
dataList : null,
/* 모달 초기화 작업 */
init : function () {
$('#mobileNoticeSelectModal').remove();
$('body').append( this.HtmlTemplate);
//그리드 이벤트
this.setEvent();
},
/* 그리드 이벤트 설정 */
setEvent:function() {
$('#mobileNoticeSelectModal .btnCancle').on("click", function(){
mobileNoticeSelectModal.close();
});
},
/* 데이터 선택 */
setSelect:function(selectNumber) {
let checkedData = dataList[selectNumber];
if(dataList==null||checkedData==undefined){
return ;
}
if( mobileNoticeSelectModal.callback ) {
mobileNoticeSelectModal.callback(checkedData);
}
mobileNoticeSelectModal.close();
},
// 상세 조회
search:function(state) {
let muNoticeId = mobileNoticeSelectModal.reqParam.muNoticeId;
if(true != fn_emptyCheck(muNoticeId)){
modalEvent.warning("조회", "공지사항 정보가 없습니다.");
return;
}
let formData = new FormData();
formData.append("muNoticeId", muNoticeId);
$.ajax({
url: encodeURI('/mobilenotice/selectNotice.do'),
data: formData,
dataType: "json",
processData: false,
contentType: false,
type: 'POST',
async: true,
success: function(data){
if('0'==data.msgCode){
$("#mobileNoticeSelectModal #modalTitle").text(data.rows[0].title);
$("#mobileNoticeSelectModal #modalContent").empty().html(data.rows[0].content.replace(/\n/g,"<br/>"));
$("#mobileNoticeSelectModal #writeDate").text(data.rows[0].writeDate);
$("#mobileNoticeSelectModal #writeTime").text(data.rows[0].writeTime);
}
else{
modalEvent.danger("조회 오류", data.msgDesc);
}
},
error : function(xhr, status, error) {
modalEvent.danger("조회 오류", "조회 중 오류가 발생하였습니다. 잠시후 다시시도하십시오.");
},
beforeSend:function(){
},
complete:function(){
}
});
},
/*
* 팝업
* callback : 콜백함수, reqParam: 팝업파라미터
*/
popup:function(callback, reqParam) {
// 초기화 후 열기
mobileNoticeSelectModal.init();
//콜백함수 지정.
mobileNoticeSelectModal.callback = callback;
mobileNoticeSelectModal.reqParam = reqParam;
mobileNoticeSelectModal.dataList = null;
setTimeout(function(){
$('#mobileNoticeSelectModal').modal('show')
}, 200);
mobileNoticeSelectModal.search();
},
/*
* 팝업 닫기
*/
close:function() {
$('#mobileNoticeSelectModal').modal('hide');
setTimeout(function(){
$('#mobileNoticeSelectModal').remove();
},500);
},
HtmlTemplate : `
<div id="mobileNoticeSelectModal" class="modal notice_modal fade" tabindex="-1" aria-labelledby="exampleModalLabel" aria-hidden="">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<p class="label" id="modalTitle"></p>
<p>
<span id="writeDate"></span>
<span id="writeTime"></span>
</p>
</div>
<div class="modal-body">
<p id="modalContent"></p>
</div>
<div class="modal-footer">
<div class="btn_box">
<button class="ok_btn btnCancle">확인</button>
</div>
</div>
</div>
</div>
</div>
`
};

View File

@@ -0,0 +1,83 @@
let noticeSelectId = "";
/****************************************************************************
* 공지사항 정보 리스트 조회
****************************************************************************/
function fn_selectListMobileNoticeJson(){
let formData = new FormData();
$.ajax({
url: encodeURI('/mobilenotice/selectListNotice.do'),
data: formData,
dataType: "json",
processData: false,
contentType: false,
type: 'POST',
async: true,
success: function(data){
if('0'==data.msgCode){
$('.content_box ul').empty();
if(0<data.totalCount){
data.rows.forEach((noticeData,index)=>{
const innerHtml = ` <li onclick="fn_selectNoticePopup('${noticeData.muNoticeId}')">
<p>${noticeData.title}</p>
<p>${noticeData.writeDate}</p>
</li>`;
$('.content_box ul').append(innerHtml);
});
} else {
const innerHtml = `<li><p>공지사항이 없습니다</p></li>`;
$('.content_box ul').append(innerHtml);
}
} else if (data.msgCode == '-1') {
modalEvent.warning("조회 오류", data.msgDesc);
} else {
modalEvent.danger("조회 오류", "조회 중 오류가 발생하였습니다. 잠시후 다시 시도하십시오.");
}
},
error : function(xhr, status, error) {
modalEvent.danger("조회 오류", "조회 중 오류가 발생하였습니다. 잠시후 다시시도하십시오.");
},
beforeSend:function(){
},
complete:function(){
}
});
}
function fn_selectNoticePopup(param){
let reqParam = {
"muNoticeId" : param
};
mobileNoticeSelectModal.popup(function(obj, reqParam) {
fn_selectListMobileNoticeJson();
}, reqParam);
}
/****************************************************************************
* 페이지 init
****************************************************************************/
function fn_pageInit(){
fn_selectListMobileNoticeJson();
}
/****************************************************************************
* 페이지 event
****************************************************************************/
function fn_pageEvent(){
}
$(function(){
// 페이지 init
fn_pageInit();
// 페이지 event
fn_pageEvent();
});

View File

@@ -0,0 +1,143 @@
/* ##############################################################
설 명 : [Modal]공지사항 상세/수정 팝업
작성일 : 2023. 01. 19.
작성자 : NTsoft
수정일 수정자 수정내용
------- -------- ---------------------------
2023. 01. 19. NTsoft 최초 생성
*/
let mobilePushSelectModal = {
callback : null,
reqParam : null,
dataList : null,
/* 모달 초기화 작업 */
init : function () {
$('#mobilePushSelectModal').remove();
$('body').append( this.HtmlTemplate);
//그리드 이벤트
this.setEvent();
},
/* 그리드 이벤트 설정 */
setEvent:function() {
$('#mobilePushSelectModal .ok_btn').on("click", function(){
mobilePushSelectModal.close();
});
},
/* 데이터 선택 */
setSelect:function(selectNumber) {
let checkedData = dataList[selectNumber];
if(dataList==null||checkedData==undefined){
return ;
}
if( mobilePushSelectModal.callback ) {
mobilePushSelectModal.callback(checkedData);
}
mobilePushSelectModal.close();
},
// 상세 조회
search:function(state) {
let muPushId = mobilePushSelectModal.reqParam.muPushId;
if(true != fn_emptyCheck(muPushId)){
modalEvent.warning("조회", "알림 정보가 없습니다.");
return;
}
let formData = new FormData();
formData.append("muPushId", muPushId);
$.ajax({
url: encodeURI('/mobilepush/selectPush.do'),
data: formData,
dataType: "json",
processData: false,
contentType: false,
type: 'POST',
async: true,
success: function(data){
if('0'==data.msgCode){
$("#mobilePushSelectModal #modalTitle").text(data.rows[0].title);
$("#mobilePushSelectModal #sendDate").text(data.rows[0].sendDate);
$("#mobilePushSelectModal #sendTime").text(data.rows[0].sendTime);
$("#mobilePushSelectModal #modalContent").empty().html(data.rows[0].content.replace(/\n/g,"<br/>"));
}
else{
modalEvent.danger("조회 오류", data.msgDesc);
}
},
error : function(xhr, status, error) {
modalEvent.danger("조회 오류", "조회 중 오류가 발생하였습니다. 잠시후 다시시도하십시오.");
},
beforeSend:function(){
},
complete:function(){
}
});
},
/*
* 팝업
* callback : 콜백함수, reqParam: 팝업파라미터
*/
popup:function(callback, reqParam) {
// 초기화 후 열기
mobilePushSelectModal.init();
//콜백함수 지정.
mobilePushSelectModal.callback = callback;
mobilePushSelectModal.reqParam = reqParam;
mobilePushSelectModal.dataList = null;
setTimeout(function(){
$('#mobilePushSelectModal').modal('show')
}, 200);
mobilePushSelectModal.search();
},
/*
* 팝업 닫기
*/
close:function() {
$('#mobilePushSelectModal').modal('hide');
if(mobilePushSelectModal.callback){
mobilePushSelectModal.callback();
}
setTimeout(function(){
$('#mobilePushSelectModal').remove();
},500);
},
HtmlTemplate : `
<div class="modal noticeSelect_modal fade" id="mobilePushSelectModal" tabindex="-1" aria-labelledby="exampleModalLabel" aria-hidden="">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<p class="label" id="modalTitle">진료 접수 알림</p>
<p>
<span id="sendDate">2021-07-07</span>,
<span id="sendTime">14:00</span>
</p>
</div>
<div class="modal-body">
<p id="modalContent">
OOO 님, 진료 접수가 완료 되었습니다.
데스크에서 안내가 있을 때 까지 잠시만 기다려주세요!
</p>
</div>
<div class="modal-footer">
<div class="btn_box">
<button class="ok_btn">확인</button>
</div>
</div>
</div>
</div>
</div>
`
};

View File

@@ -0,0 +1,121 @@
let pushSelectId = "";
/****************************************************************************
* 공지사항 정보 리스트 조회
****************************************************************************/
function fn_selectListMobilePushJson(){
let formData = new FormData();
$.ajax({
url: encodeURI('/mobilepush/selectListPush.do'),
data: formData,
dataType: "json",
processData: false,
contentType: false,
type: 'POST',
async: true,
success: function(data){
if('0'==data.msgCode){
let listHTML = '';
if(0<data.totalCount){
listHTML += fn_pushListHTML(data.rows);
}else {
listHTML += '<div class="notify_box first">';
listHTML += ' <div class="text_box">';
listHTML += ' <p>알림이 없습니다</p>';
listHTML += ' </div>';
listHTML += '</div>';
}
$("#pushList").empty().html(listHTML).trigger("create");
} else if (data.msgCode == '-1') {
modalEvent.warning("조회 오류", data.msgDesc);
} else {
modalEvent.danger("조회 오류", "조회 중 오류가 발생하였습니다. 잠시후 다시 시도하십시오.");
}
},
error: function(xhr, status, error) {
modalEvent.danger("조회 오류", "조회 중 오류가 발생하였습니다. 잠시후 다시시도하십시오.");
},
beforeSend:function(){
},
complete:function(){
}
});
}
function fn_pushListHTML(param){
let listHTML = '';
for(let i=0; i<param.length; i++) {
if(0==i){
// 첫 번째 first
listHTML += '<div class="notify_box first" onclick="fn_selectPushPopup(\''+param[i].muPushId+'\')">';
}else{
listHTML += '<div class="notify_box" onclick="fn_selectPushPopup(\''+param[i].muPushId+'\')">';
}
// 날짜별 푸시 리스트
if(true == fn_emptyCheck(param[i-1])){
if(param[i].sendDate == param[i-1].sendDate){
}else{
// 이전 데이터와 날짜가 같지 않으면
listHTML += ' <p class="date">'+param[i].sendDate+'</p>';
}
}else{
// 이전 데이터가 없으면
listHTML += ' <p class="date">'+param[i].sendDate+'</p>';
}
if("N" == param[i].userCheckYn){
// new : 새 알림에 new 넣어주기 -> 아이콘 옆에 빨간표시 때문
listHTML += ' <div class="text_box new">';
}else{
listHTML += ' <div class="text_box">';
}
listHTML += ' <p class="label">'+param[i].title+'</p>';
listHTML += ' <p>'+param[i].content+'</p>';
listHTML += ' <p class="time">'+param[i].sendTime+'</p>';
listHTML += ' </div>';
listHTML += '</div>';
}
return listHTML;
}
function fn_selectPushPopup(param){
let reqParam = {
"muPushId" : param
};
mobilePushSelectModal.popup(function(obj, reqParam) {
fn_selectListMobilePushJson();
}, reqParam);
}
/****************************************************************************
* 페이지 init
****************************************************************************/
function fn_pageInit(){
fn_selectListMobilePushJson();
}
/****************************************************************************
* 페이지 event
****************************************************************************/
function fn_pageEvent(){
}
$(function(){
// 페이지 init
fn_pageInit();
// 페이지 event
fn_pageEvent();
});

View File

@@ -0,0 +1,530 @@
let date = new Date();
let workTime = [];
let holiday = [];
let publicHolidayUseYn='';
function getSelectedDateTime() {
// 선택된 날짜
const selectedDate = $('.dates .on').text();
// 선택된 시간
const selectedTime =$('.times button.on').text();
// 선택된 진료
const selectedClinic = $('.clinic_list button.on').text();
// 선택된 시술
const selectedProcedures = getSelectedProcedures();
if (selectedDate && selectedTime) {
console.log('선택된 날짜:', selectedDate);
console.log('선택된 시간:', selectedTime);
return { date: selectedDate, time: selectedTime };
} else {
console.log('날짜 또는 시간이 선택되지 않았습니다.');
return null;
}
}
function getSelectedProcedures() {
// 선택된 시술 체크박스 리스트 가져오기
const selectedProcedures = [];
document.querySelectorAll('input[name="reservation_list"]:checked').forEach(checkbox => {
const procedureLabel = checkbox.nextElementSibling.textContent;
selectedProcedures.push(procedureLabel);
});
return selectedProcedures;
}
/****************************************************************************
* 진료 시간데이타 설정
****************************************************************************/
function fn_selectHospitalWorkTimeCombo() {
let formData = new FormData();
$.ajax({
url: encodeURI('/mobilehospital/selectHospitalWorkTime.do'),
data: formData,
dataType: "json",
processData: false,
contentType: false,
type: 'POST',
async: false,
success: function(data) {
if ('0' == data.msgCode) {
workTime = data.workTime[0];
holiday = data.holiday;
publicHolidayUseYn = data.workTime[0].publicHolidayUseYn;
} else if (data.msgCode == '-1') {
modalEvent.warning("조회 오류", data.msgDesc);
} else {
modalEvent.danger("조회 오류", "조회 중 오류가 발생하였습니다. 잠시후 다시 시도하십시오.");
}
},
error: function(xhr, status, error) {
modalEvent.danger("조회 오류", "조회 중 오류가 발생하였습니다. 잠시후 다시 시도하십시오.");
}
});
}
function fn_setWorkTime(){
let selectDay = $('.dates .date.on');
let year = date.getFullYear();
let month = ('0' + (date.getMonth() + 1)).slice(-2);
if(selectDay)
if (selectDay.hasClass('prev')) {
// 이전 달 조회 시 월과 연도 조정
month = ('0' + ((date.getMonth() + 1) - 1 || 12)).slice(-2); // 1월일 경우 12월로 설정
if ((date.getMonth() + 1) === 1) year--; // 1월에서 이전 달은 전년도 12월
} else if (selectDay.hasClass('next')) {
// 다음 달 조회 시 월과 연도 조정
month = ('0' + ((date.getMonth() + 1) + 1 > 12 ? 1 : (date.getMonth() + 1) + 1)).slice(-2); // 12월일 경우 다음 달은 1월
if ((date.getMonth() + 1) === 12) year++; // 12월에서 다음 달은 다음 해 1월
}
let day = $('.dates .date.on').text();
let todayDate = `${year}.${month}.${day}`; // 조회할 날짜 형식
let selectDate = new Date(year,month-1,day)
let dayOfWeek = selectDate.getDay();
switch (dayOfWeek) {
case 0 :
dayOfWeek = 'sun'
break;
case 1 :
dayOfWeek = 'mon'
break;
case 2 :
dayOfWeek = 'tue'
break;
case 3 :
dayOfWeek = 'wed'
break;
case 4 :
dayOfWeek = 'thu'
break;
case 5 :
dayOfWeek = 'fri'
break;
case 6 :
dayOfWeek = 'sat'
break;
}
// 요일에 따라 진료 시간 가져오기
let todayWorkStart = workTime[`${dayOfWeek}OpenStartTime`];
let todayWorkEnd = workTime[`${dayOfWeek}OpenEndTime`];
let todayHoliday = holiday.find(holidayData => holidayData.locDate === todayDate);
let timeHtml = fn_setWorkTimeValue(todayWorkStart,todayWorkEnd,selectDate)
let workTimeContainer = $('.times'); // 진료 시간이 뿌려질 컨테이너
workTimeContainer.empty(); // 기존 내용 제거
if (todayHoliday&&(('Y'===publicHolidayUseYn && 'publicHoliday'===todayHoliday.dateType)
||'hospitalHoliday'===todayHoliday.dateType)) {
// 공휴일 또는 휴무일 처리
workTimeContainer.append(`<p>오늘은 휴무입니다.</p>`);
} else{
if (timeHtml) {
// 진료 시간이 있으면 출력
workTimeContainer.append(timeHtml);
$('.times button').on('click', function(event) {
$('.times button').removeClass('on');
$(this).addClass('on');
});
}
else{
// 진료 시간이 없으면 기본 처리
workTimeContainer.append(`<p>진료 시간이 없습니다.</p>`);
}
}
}
function fn_setWorkTimeValue(openStartTime, openEndTime,thisDate) {
let timeHTML = '';
const now = new Date(); // 현재 시간
const currentHour = now.getHours(); // 현재 시간의 시간 값
const currentMinutes = now.getMinutes(); // 현재 시간의 분 값
const startTime = parseInt(openStartTime.split(':')[0], 10);
const endTime = parseInt(openEndTime.split(':')[0], 10);
// 선택된 날짜가 오늘인지 확인
const isToday = thisDate.getDate() === now.getDate() &&
thisDate.getMonth() === now.getMonth() &&
thisDate.getFullYear() === now.getFullYear();
for (let i = startTime; i < endTime; i++) {
let hour = ('0' + i).slice(-2);
// 오늘인 경우 현재 시간 이전 버튼 비활성화 또는 숨김 처리
if (!isToday || (isToday && i > currentHour)) {
timeHTML += `<button>${hour}:00</button>`;
timeHTML += `<button>${hour}:30</button>`;
} else if (isToday && i === currentHour) {
// 현재 시간의 경우 30분 단위로 현재 분과 비교하여 생성
if (currentMinutes < 30) {
timeHTML += `<button>${hour}:30</button>`;
}
}
}
return timeHTML;
}
/****************************************************************************
* 진료 콤보데이타 설정
****************************************************************************/
function fn_setTreatmentCombo(){
let formData = new FormData();
$.ajax({
url: encodeURI('/mobiletreatment/selectListTreatmentOption.do'),
data: formData,
dataType: "json",
processData: false,
contentType: false,
type: 'POST',
async: false,
success: function(data){
let innerHtml = '';
let otherTreatmentIds = [];
if ('0' == data.msgCode) {
const treatmentWrapper = $('.clinic_list');
treatmentWrapper.empty();
if(0<data.rows.length){
data.rows.forEach((treatmentData,index)=>{
let className = (index === 0) ? 'first' : '';
let treatmentName = treatmentData.treatmentName;
if (treatmentName !== '쁘띠' && treatmentName !== '피부' && treatmentName !== '비만') {
otherTreatmentIds.push(treatmentData.muTreatmentId); // 기타 항목으로 분류
} else {
// 기타가 아닌 경우는 그대로 처리
innerHtml = `<li class="${className}">
<button class="treatment-button" data-muTreatmentId="${treatmentData.muTreatmentId}">${treatmentName}</button>
</li>`;
treatmentWrapper.append(innerHtml);
}
});
// "기타" 항목들이 있으면, 하나의 '기타' 항목으로 리스트에 추가
if (otherTreatmentIds.length > 0) {
innerHtml = `<li>
<button class="treatment-button" data-muTreatmentId="${otherTreatmentIds.join(',')}">기타</button>
</li>`;
treatmentWrapper.append(innerHtml);
}
$('.treatment-button').on('click', function() {
let muTreatmentId = $(this).data('mutreatmentid'); // 버튼에서 muTreatmentId 가져오기
fn_setTreatmentProcedureCombo(muTreatmentId); // 함수 호출
});
} else {
innerHtml = `<li><span>진료항목이 없습니다.</span></li>`;
treatmentWrapper.append(innerHtml);
}
} else if (data.msgCode == '-1') {
modalEvent.warning("조회 오류", data.msgDesc);
} else {
modalEvent.danger("조회 오류", "조회 중 오류가 발생하였습니다. 잠시후 다시 시도하십시오.");
}
},
error: function(xhr, status, error) {
modalEvent.danger("조회 오류", "조회 중 오류가 발생하였습니다. 잠시후 다시 시도하십시오.");
}
});
}
/****************************************************************************
* 예약등록
****************************************************************************/
function fn_insertReserveIntro(){
let reserveYear = date.getFullYear();
let reserveMonth = ('0' + (date.getMonth() + 1)).slice(-2);
let selectDate = $('.dates .date.on');
if(selectDate)
if (selectDate.hasClass('prev')) {
// 이전 달 조회 시 월과 연도 조정
reserveMonth = ('0' + ((date.getMonth() + 1) - 1 || 12)).slice(-2); // 1월일 경우 12월로 설정
if ((date.getMonth() + 1) === 1) reserveYear--; // 1월에서 이전 달은 전년도 12월
} else if (selectDate.hasClass('next')) {
// 다음 달 조회 시 월과 연도 조정
reserveMonth = ('0' + ((date.getMonth() + 1) + 1 > 12 ? 1 : (date.getMonth() + 1) + 1)).slice(-2); // 12월일 경우 다음 달은 1월
if ((date.getMonth() + 1) === 12) reserveYear++; // 12월에서 다음 달은 다음 해 1월
}
let reserveDay = ('0' + date.getDate()).slice(-2);
let reserveDate = reserveYear + '-' + reserveMonth + '-' + reserveDay;
let muProcedureId = '';
let procedureName = '';
$('input[name="reservation_list"]:checked').each(function() {
if(muProcedureId){
muProcedureId+=', '+$(this).data("muprocedureid");
}else{
muProcedureId+=$(this).data("muprocedureid");
}
const procedure = $(this).siblings('label').text().trim();
if(procedureName){
procedureName+=', '+procedure;
}else{
procedureName+=procedure;
}
});
let reserveTime = $('.times .on').text();
let muTreatmentId = $('.treatment-button.on').data('mutreatmentid');
let treatmentName = $('.treatment-button.on').text();
let pagingParam = "?reserveDate=" + reserveDate;
pagingParam += "&reserveTime="+reserveTime;
pagingParam += "&muTreatmentId="+muTreatmentId;
pagingParam += "&treatmentName="+treatmentName;
pagingParam += "&muProcedureId="+muProcedureId;
pagingParam += "&procedureName="+procedureName;
location.href = '/mobilereservation/selectReserveIntro.do'+pagingParam;
}
/****************************************************************************
* 시술 콤보데이타 설정
****************************************************************************/
function fn_setTreatmentProcedureCombo(param){
let result = [];
let formData = new FormData();
formData.append("muTreatmentId",param)
$.ajax({
url: encodeURI('/mobiletreatmentprocedure/selectListTreatmentProcedureOption.do'),
data: formData,
dataType: "json",
processData: false,
contentType: false,
type: 'POST',
async: false,
success: function(data){
if('0'==data.msgCode) {
const procedureWrapper = $('.reservation_list');
procedureWrapper.empty();
if (0 < data.rows.length) {
data.rows.forEach((procedureData, index) => {
let className = (index === 0) ? 'first' : '';
const innerHtml = `<li class="${className}">
<input type="checkbox" id="checkbox${index + 1}" data-muProcedureId="${procedureData.muTreatmentProcedureId}" name="reservation_list">
<label for="checkbox${index + 1}">${procedureData.treatmentProcedureName}</button>
</li>`;
procedureWrapper.append(innerHtml);
});
} else {
const innerHtml = `<li><span>진료항목이 없습니다.</span></li>`;
procedureWrapper.append(innerHtml);
}
}
else if(data.msgCode=='-1'){
modalEvent.warning("조회 오류", data.msgDesc);
}
else{
modalEvent.danger("조회 오류", "조회 중 오류가 발생하였습니다. 잠시후 다시시도하십시오.");
}
},
error : function(xhr, status, error) {
modalEvent.danger("조회 오류", "조회 중 오류가 발생하였습니다. 잠시후 다시시도하십시오.");
},
beforeSend:function(){
},
complete:function(){
}
});
}
/****************************************************************************
* 예약 캘린더 렌더링
****************************************************************************/
function fn_renderCalender(){
const viewYear = date.getFullYear();
const viewMonth = date.getMonth();
document.querySelector('.year').textContent = `${viewYear}`;
document.querySelector('.month').textContent = `${viewMonth + 1}`;
//이전달 마지막날
const prevLast = new Date(viewYear, viewMonth, 0);
//이달 마지막날
const thisLast = new Date(viewYear, viewMonth + 1, 0);
const PLDate = prevLast.getDate();
const PLDay = prevLast.getDay();
const TLDate = thisLast.getDate();
const TLDay = thisLast.getDay();
const prevDates = [];
const thisDates = [...Array(TLDate + 1).keys()].slice(1);
const nextDates = [];
if (PLDay !== 6) {
for (let i = 0; i < PLDay + 1; i++) {
prevDates.unshift(PLDate - i);
}
}
for (let i = 1; i < 7 - TLDay; i++) {
nextDates.push(i);
}
const dates = prevDates.concat(thisDates, nextDates);
const firstDateIndex = dates.indexOf(1);
const lastDateIndex = dates.lastIndexOf(TLDate);
const today = new Date(); // 오늘 날짜 가져오기
const todayYear = today.getFullYear();
const todayMonth = today.getMonth();
const todayDate = today.getDate();
// 각 날짜에 클래스 추가 (이전 달, 이번 달, 다음 달)
dates.forEach((date, i) => {
let condition;
if (i < firstDateIndex) {
condition = 'prev'; // 이전 달 날짜
} else if (i >= firstDateIndex && i <= lastDateIndex) {
condition = 'this'; // 이번 달 날짜
} else {
condition = 'next'; // 다음 달 날짜
}
// 지난 날짜 확인 (이번 달의 현재 날짜 이전 날짜만)
let isPastDate = (condition === 'this') &&
((viewYear < todayYear) ||
(viewYear === todayYear && viewMonth === todayMonth && date < todayDate));
// 지난 날짜일 경우 'past' 클래스를 추가
if (isPastDate || viewYear < todayYear || (viewYear === todayYear && viewMonth < todayMonth)) {
condition += ' past';
}
dates[i] = `<div class="date ${condition}">${date}</div>`;
});
document.querySelector('.dates').innerHTML = dates.join('');
// 오늘 날짜 강조
if (viewMonth === todayMonth && viewYear === todayYear) {
for (let date of document.querySelectorAll('.this')) {
if (+date.innerText === todayDate) {
date.classList.add('today');
date.classList.add('on');
break;
}
}
}
// 지난 날짜 선택 불가 처리
for (let pastDate of document.querySelectorAll('.past')) {
pastDate.classList.add('disabled'); // 선택 불가 클래스를 추가
pastDate.style.pointerEvents = 'none'; // 클릭 이벤트를 비활성화하여 선택할 수 없게 만듦
}
}
function checkAllFields(changeElement) {
let selectedCheckboxes = $('input[name="reservation_list"]:checked').length;
let date = $('.date.on').length;
let time = $('.times .on').length;
let treatment = $('.treatment-button.on').length;
const completeButton = $('.button_box button');
if(selectedCheckboxes&&date&&time&&treatment){
completeButton.addClass('active');
completeButton.attr("disabled", false);
}else {
completeButton.removeClass('active')
completeButton.attr("disabled", true);
}
}
/****************************************************************************
* 페이지 init
****************************************************************************/
function fn_pageInit(){
fn_renderCalender();
fn_setTreatmentCombo();
fn_selectHospitalWorkTimeCombo();
fn_setWorkTime();
}
/****************************************************************************
* 페이지 event
****************************************************************************/
function fn_pageEvent(){
//이전달 조회
$('.nav_btn.prev').on('click', function(event) {
// 현재 달보다 이전 달로 이동하려고 할 때 이벤트 중지
if (date.getMonth() <= new Date().getMonth() && date.getFullYear() <= new Date().getFullYear()) {
return; // 현재 달보다 과거라면 동작하지 않음
}
date.setMonth(date.getMonth() - 1);
date.setDate(1); // 이전 달의 첫 번째 날짜로 설정
fn_renderCalender(true); // skipTodayHighlight를 true로 설정하여 오늘 날짜 강조 건너뜀
// 현재 날짜와 선택한 날짜 비교
const today = new Date();
const selectedDate = new Date(date.getFullYear(), date.getMonth(), 1); // 선택한 달의 첫 번째 날짜
if (selectedDate >= today) {
$('.date.this').first().addClass('on'); // 선택한 날짜가 현재 날짜 이상일 때만 'on' 클래스 추가
}
fn_setWorkTime(); // 선택 날짜에 맞춰 진료 시간 설정
});
//다음달 조회
$('.nav_btn.next').on('click', function(event) {
date.setMonth(date.getMonth() + 1);
date.setDate(1); // 다음 달의 첫 번째 날짜로 설정
fn_renderCalender(true); // skipTodayHighlight를 true로 설정하여 오늘 날짜 강조 건너뜀
$('.date.this').first().addClass('on'); // 첫 번째 날짜에 'on' 클래스 추가
fn_setWorkTime(); // 선택 날짜에 맞춰 진료 시간 설정
});
//진료 선택
$('.clinic_list button').on('click', function() {
// 모든 버튼에서 'on' 클래스 제거
$('.clinic_list button').removeClass('on');
// 클릭한 버튼에 'on' 클래스 추가
$(this).addClass('on');
});
$('.calender_main').on('click','.date:not(.past)', function() {
$('.date.on').removeClass('on');
$(this).addClass('on');
const year = $('.year').text();
const month = $('.month').text();
const day = $('.date.on').text();
date.setFullYear(year,month-1,day);
fn_setWorkTime($(this));
});
$('.date,.times,.treatment-button,.reservation_list').each(function () {
$(this).on('click', ()=>checkAllFields($(this)));
});
$('.next_btn').on('click', ()=>fn_insertReserveIntro());
}
$(function(){
// 페이지 init
fn_pageInit();
// 페이지 event
fn_pageEvent();
});

View File

@@ -0,0 +1,123 @@
/* ##############################################################
설 명 : [Modal] 접수 대기 상세 팝업
작성일 : 2024. 10. 02.
작성자 : NTsoft
수정일 수정자 수정내용
------- -------- ---------------------------
2024. 10. 02. NTsoft 최초 생성
*/
let selectPastReserveModal = {
callback : null,
reqParam : null,
dataList : null,
/* 모달 초기화 작업 */
init : function () {
$('#selectPastReserveModal').remove();
$('body').append( this.HtmlTemplate);
//그리드 이벤트
this.setEvent();
},
/* 그리드 이벤트 설정 */
setEvent:function() {
$('#selectPastReserveModal .btnCancle').on("click", function(){
selectPastReserveModal.close();
});
},
setData: function() {
$('#selectPastReserveModal #userName').text(this.reqParam.userName);
$('#selectPastReserveModal #waitingCount').text(this.reqParam.waitingCount || '0');
$('#selectPastReserveModal #reserveDate').text(`${this.reqParam.reserveDate}, ${this.reqParam.reserveTime}`);
$('#selectPastReserveModal #treatmentName').text(this.reqParam.treatmentName);
$('#selectPastReserveModal #treatmentProcedureName').text(this.reqParam.treatmentProcedureName);
$('#selectPastReserveModal #status').text(fn_setReserveStatus(this.reqParam.status));
},
/* 데이터 선택 */
setSelect:function(selectNumber) {
let checkedData = dataList[selectNumber];
if(dataList==null||checkedData==undefined){
return ;
}
if( selectPastReserveModal.callback ) {
selectPastReserveModal.callback(checkedData);
}
selectPastReserveModal.close();
},
// 상세 조회
search:function(state) {
},
/*
* 팝업
* callback : 콜백함수, reqParam: 팝업파라미터
*/
popup:function(callback, reqParam) {
// 초기화 후 열기
selectPastReserveModal.init();
//콜백함수 지정.
selectPastReserveModal.callback = callback;
selectPastReserveModal.reqParam = reqParam;
selectPastReserveModal.dataList = null;
// 데이터 바인딩
this.setData();
setTimeout(function(){
$('#selectPastReserveModal').modal('show')
}, 200);
selectPastReserveModal.search();
},
/*
* 팝업 닫기
*/
close:function() {
$('#selectPastReserveModal').modal('hide');
setTimeout(function(){
$('#selectPastReserveModal').remove();
},500);
},
HtmlTemplate : `
<div class="modal past_promise_modal fade" id="selectPastReserveModal" tabindex="-1" aria-labelledby="exampleModalLabel" aria-hidden="">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<p class="label">
안녕하세요 <span id="userName"></span>님!<br/>
방문해주셔서 감사합니다.
</p>
</div>
<div class="modal-body">
<ul>
<li class="first">
<p class="label">예약 일시</p>
<p id="reserveDate"></p>
</li>
<li>
<p class="label">예약 유형</p>
<p id="treatmentName"></p>
</li>
<li>
<p class="label">시술</p>
<p id="treatmentProcedureName"></p>
</li>
<li>
<p class="label">상태</p>
<p class="blue" id="status"></p>
</li>
</ul>
</div>
<div class="modal-footer">
<div class="btn_box">
<button class="close_btn btnCancle">닫기</button>
</div>
</div>
</div>
</div>
</div>
`
};

View File

@@ -0,0 +1,128 @@
/* ##############################################################
설 명 : [Modal] 접수 대기 상세 팝업
작성일 : 2024. 10. 02.
작성자 : NTsoft
수정일 수정자 수정내용
------- -------- ---------------------------
2024. 10. 02. NTsoft 최초 생성
*/
let selectPromiseCompletedModal = {
callback : null,
reqParam : null,
dataList : null,
/* 모달 초기화 작업 */
init : function () {
$('#selectPromiseCompletedModal').remove();
$('body').append( this.HtmlTemplate);
//그리드 이벤트
this.setEvent();
},
/* 그리드 이벤트 설정 */
setEvent:function() {
$('#selectPromiseCompletedModal .btnCancle').on("click", function(){
selectPromiseCompletedModal.close();
});
},
setData: function() {
$('#selectPromiseCompletedModal #userName').text(this.reqParam.userName);
$('#selectPromiseCompletedModal #waitingCount').text(this.reqParam.waitingCount || '0');
$('#selectPromiseCompletedModal #reserveDate').text(`${this.reqParam.reserveDate}, ${this.reqParam.reserveTime}`);
$('#selectPromiseCompletedModal #treatmentName').text(this.reqParam.treatmentName);
$('#selectPromiseCompletedModal #treatmentProcedureName').text(this.reqParam.treatmentProcedureName);
$('#selectPromiseCompletedModal #status').text(fn_setReserveStatus(this.reqParam.status));
},
/* 데이터 선택 */
setSelect:function(selectNumber) {
let checkedData = dataList[selectNumber];
if(dataList==null||checkedData==undefined){
return ;
}
if( selectPromiseCompletedModal.callback ) {
selectPromiseCompletedModal.callback(checkedData);
}
selectPromiseCompletedModal.close();
},
// 상세 조회
search:function(state) {
},
/*
* 팝업
* callback : 콜백함수, reqParam: 팝업파라미터
*/
popup:function(callback, reqParam) {
// 초기화 후 열기
selectPromiseCompletedModal.init();
//콜백함수 지정.
selectPromiseCompletedModal.callback = callback;
selectPromiseCompletedModal.reqParam = reqParam;
selectPromiseCompletedModal.dataList = null;
// 데이터 바인딩
this.setData();
setTimeout(function(){
$('#selectPromiseCompletedModal').modal('show')
}, 200);
selectPromiseCompletedModal.search();
},
/*
* 팝업 닫기
*/
close:function() {
$('#selectPromiseCompletedModal').modal('hide');
setTimeout(function(){
$('#selectPromiseCompletedModal').remove();
},500);
},
HtmlTemplate : `
<div class="modal promise_completed_modal fade" id="selectPromiseCompletedModal" tabindex="-1" aria-labelledby="exampleModalLabel" aria-hidden="">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<p class="label">
안녕하세요 <span id="userName"></span>님!<br/>
방문해주셔서 감사합니다.
</p>
</div>
<div class="modal-body">
<div class="text_box">
<p>진료 대기 고객</p>
<p class="blue" id="waitingCount"></p>
<p>진료 접수가 완료되었습니다.<br/>진료 안내까지 잠시만 기다려주세요.</p>
</div>
<ul>
<li class="first">
<p class="label">예약 일시</p>
<p id="reserveDate"></p>
</li>
<li>
<p class="label">예약 유형</p>
<p id="treatmentName"></p>
</li>
<li>
<p class="label">시술</p>
<p id="treatmentProcedureName"></p>
</li>
<li>
<p class="label">상태</p>
<p class="blue" id="status"></p>
</li>
</ul>
</div>
<div class="modal-footer">
<div class="btn_box">
<button class="close_btn btnCancle">닫기</button>
</div>
</div>
</div>
</div>
</div>
`
};

View File

@@ -0,0 +1,176 @@
/* ##############################################################
설 명 : [Modal] 접수 대기 상세 팝업
작성일 : 2024. 10. 02.
작성자 : NTsoft
수정일 수정자 수정내용
------- -------- ---------------------------
2024. 10. 02. NTsoft 최초 생성
*/
let selectReservePendingModal = {
callback : null,
reqParam : null,
dataList : null,
/* 모달 초기화 작업 */
init : function () {
$('#selectReservePendingModal').remove();
$('body').append( this.HtmlTemplate);
//그리드 이벤트
this.setEvent();
},
/* 그리드 이벤트 설정 */
setEvent:function() {
$('#selectReservePendingModal .btnCancle').on("click", function(){
selectReservePendingModal.close();
});
$('#selectReservePendingModal .btnSave').on("click", function(){
selectReservePendingModal.save();
});
},
setData: function() {
$('#selectReservePendingModal #userName').text(this.reqParam.userName);
$('#selectReservePendingModal #reserveDate').text(`${this.reqParam.reserveDate}, ${this.reqParam.reserveTime}`);
$('#selectReservePendingModal #treatmentName').text(this.reqParam.treatmentName);
$('#selectReservePendingModal #treatmentProcedureName').text(this.reqParam.treatmentProcedureName);
$('#selectReservePendingModal #status').text(fn_setReserveStatus(this.reqParam.status));
},
/* 데이터 선택 */
setSelect:function(selectNumber) {
let checkedData = dataList[selectNumber];
if(dataList==null||checkedData==undefined){
return ;
}
if( selectReservePendingModal.callback ) {
selectReservePendingModal.callback(checkedData);
}
selectReservePendingModal.close();
},
// 상세 조회
search:function(state) {
},
/*
* 팝업
* callback : 콜백함수, reqParam: 팝업파라미터
*/
popup:function(callback, reqParam) {
// 초기화 후 열기
selectReservePendingModal.init();
//콜백함수 지정.
selectReservePendingModal.callback = callback;
selectReservePendingModal.reqParam = reqParam;
selectReservePendingModal.dataList = null;
// 데이터 바인딩
this.setData();
setTimeout(function(){
$('#selectReservePendingModal').modal('show')
}, 200);
selectReservePendingModal.search();
},
/*
* 팝업 닫기
*/
save:function() {
let muReserveId = selectReservePendingModal.reqParam.muReserveId;
if(true != fn_emptyCheck(muReserveId)){
modalEvent.warning("수정", "예약 정보가 없습니다.");
return;
}
modalEvent.info("수정", "예약을 취소하시겠습니까?", function(){
let formData = new FormData();
formData.append("muReserveId", muReserveId);
formData.append("status", 'TN');
$.ajax({
url: encodeURI('/mobilereservation/updateReserveStatus.do'),
data: formData,
dataType: "json",
processData: false,
contentType: false,
type: 'POST',
async: true,
success: function(data){
if('0'==data.msgCode){
modalEvent.success("수정 성공", data.msgDesc, function(){
if( selectReservePendingModal.callback ) {
selectReservePendingModal.callback();
}
selectReservePendingModal.close();
});
}
else{
modalEvent.danger("예약취소 오류", data.msgDesc);
}
},
error : function(xhr, status, error) {
modalEvent.danger("예약취소 오류", "취소 중 오류가 발생하였습니다. 잠시후 다시시도하십시오.");
},
beforeSend:function(){
},
complete:function(){
}
});
});
},
/*
* 팝업 닫기
*/
close:function() {
$('#selectReservePendingModal').modal('hide');
setTimeout(function(){
$('#selectReservePendingModal').remove();
},500);
},
HtmlTemplate : `
<div class="modal promise_pending_modal fade" id="selectReservePendingModal" tabindex="-1" aria-labelledby="exampleModalLabel" aria-hidden="">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<p class="label">
안녕하세요 <span id="userName"></span>님!<br/>
방문해주셔서 감사합니다.
</p>
</div>
<div class="modal-body">
<ul>
<li class="first">
<p class="label">예약 일시</p>
<p id="reserveDate"></p>
</li>
<li>
<p class="label">예약 유형</p>
<p id="treatmentName"></p>
</li>
<li>
<p class="label">시술</p>
<p id="treatmentProcedureName"></p>
</li>
<li>
<p class="label">상태</p>
<p class="blue" id="status"></p>
</li>
</ul>
</div>
<div class="modal-footer">
<div class="btn_box">
<button class="cancel_btn btnSave">예약 취소</button>
<button class="ok_btn btnCancle">확인</button>
</div>
</div>
</div>
</div>
</div>
`
};

View File

@@ -0,0 +1,76 @@
/****************************************************************************
* 페이지 데이터 렌더링
****************************************************************************/
function fn_setReserveData(){
$('#reserveDate').text(`${reserveDate}, ${reserveTime}`);
$('#treatmentName').text(treatmentName);
$('#procedureName').text(procedureName);
}
/****************************************************************************
* 예약 등록
****************************************************************************/
function fn_insertReserve(){
let etc = $('textarea').val();
let formData = new FormData();
formData.append("reserveDate",reserveDate)
formData.append("reserveTime",reserveTime)
formData.append("muTreatmentId",muTreatmentId)
formData.append("treatmentName",treatmentName)
formData.append("muProcedureId",muProcedureId)
formData.append("procedureName",procedureName)
formData.append("etc",etc)
$.ajax({
url: encodeURI('/mobilereservation/insertReserve.do'),
data: formData,
dataType: "json",
processData: false,
contentType: false,
type: 'POST',
async: false,
success: function(data){
const param = {
}
if('0'==data.msgCode) {
modalEvent.success("등록 성공","예약이 완료되었습니다.", function(){
location.href ='/reservation'
});
}
else{
modalEvent.danger("등록 오류", "등록 중 오류가 발생하였습니다. 잠시후 다시시도하십시오.");
}
},
error : function(xhr, status, error) {
modalEvent.danger("조회 오류", "조회 중 오류가 발생하였습니다. 잠시후 다시시도하십시오.");
},
beforeSend:function(){
},
complete:function(){
}
});
}
/****************************************************************************
* 페이지 init
****************************************************************************/
function fn_pageInit(){
fn_setReserveData();
}
/****************************************************************************
* 페이지 event
****************************************************************************/
function fn_pageEvent(){
$('.next_btn').on('click', ()=>fn_insertReserve());
}
$(function(){
// 페이지 init
fn_pageInit();
// 페이지 event
fn_pageEvent();
});

View File

@@ -0,0 +1,279 @@
/****************************************************************************
* 예약내역 조회
****************************************************************************/
function fn_selectListReservationJson(){
let formData = new FormData();
$.ajax({
url: encodeURI('/mobilereservation/selectListReservation.do'),
data: formData,
dataType: "json",
processData: false,
contentType: false,
type: 'POST',
async: false,
success: function(data){
if('0'==data.msgCode){
const presentWrapper = $('.present_reservation');
presentWrapper.empty();
if(0<data.totalCount){
let innerHtml = '<p class="title">예약 내역</p>';
data.rows.forEach((reserveData,index)=>{
const data = JSON.stringify(reserveData)
if('R'===reserveData.status) {
innerHtml+=`<div class="reservation_box promise_completed" onclick=fn_selectPromiseCompletedPopup(${JSON.stringify(reserveData)})><!-- promise_completed : 접수완료 box -->
<div class="left_box">
<p class="date">${reserveData.reserveDate}</p>
<p>${reserveData.reserveTime} ${reserveData.treatmentName}-${reserveData.treatmentProcedureName} 예약</p>
</div>
<div class="right_box">
<p>진료대기고객</p>
<p>${reserveData.waitingCount}명</p>
</div>
</div>`
}else{
innerHtml+=`<div class="reservation_box promise_pending" onclick=${'T'===reserveData.status}?fn_selectReservePendingPopup(${data}):fn_selectPastReservePopup(${data})><!-- promise_pending : 접수대기 box -->
<div class="left_box">
<p class="date">${reserveData.reserveDate}</p>
<p>${reserveData.reserveTime} ${reserveData.treatmentName}-${reserveData.treatmentProcedureName} 예약</p>
</div>
<div class="right_box">
<p>상태</p>
<p>${fn_setReserveStatus(reserveData.status)}</p>
</div>
</div>`
}
})
presentWrapper.append(innerHtml)
} else {
const innerHtml = '<p class="title">예약 내역</p>' +
'<div style="padding: 15px 20px; margin-top: 10px;"><span>예약내역이 없습니다.</span></div>';
presentWrapper.append(innerHtml);
presentWrapper.hide();
}
} else if (data.msgCode == '-1') {
modalEvent.warning("조회 오류", data.msgDesc);
} else {
modalEvent.danger("조회 오류", "조회 중 오류가 발생하였습니다. 잠시후 다시시도하십시오.");
}
},
error: function(xhr, status, error) {
modalEvent.danger("조회 오류", "조회 중 오류가 발생하였습니다. 잠시후 다시시도하십시오.");
},
beforeSend:function(){
},
complete:function(){
}
});
}
/****************************************************************************
* 지난 예약 내역 조회
****************************************************************************/
function fn_selectListReservationHistoryJson(){
let formData = new FormData();
formData.append('searchDate',searchDate)
$.ajax({
url: encodeURI('/mobilereservation/selectListReservationHistory.do'),
data: formData,
dataType: "json",
processData: false,
contentType: false,
type: 'POST',
async: false,
success: function(data){
$('.past_reservation .reservation_box').remove();
const pastWrapper = $('.past_reservation');
if('0'==data.msgCode){
if(0<data.totalCount){
data.rows.forEach((reserveData,index)=>{
const innerHtml =`<div class="reservation_box past_promise" onclick=fn_selectPastReservePopup(${JSON.stringify(reserveData)})><!-- past_promise : 진료끝 box -->
<div class="left_box">
<p class="date">${reserveData.reserveDate}</p>
<p>${reserveData.reserveTime} ${reserveData.treatmentName}-${reserveData.treatmentProcedureName} 예약</p>
</div>
<div class="right_box">
<p>${fn_setReserveStatus(reserveData.status)}</p>
</div>
</div>`
pastWrapper.append(innerHtml)
})
}else{
const innerHtml = '<div class="reservation_box" style="border: none; padding: 15px 20px; margin-top: 10px;"><span>조회결과가 없습니다.</span></div>';
pastWrapper.append(innerHtml)
}
} else if (data.msgCode=='-1'){
modalEvent.warning("조회 오류", data.msgDesc);
}
else{
modalEvent.danger("조회 오류", "조회 중 오류가 발생하였습니다. 잠시후 다시시도하십시오.");
}
},
error : function(xhr, status, error) {
modalEvent.danger("조회 오류", "조회 중 오류가 발생하였습니다. 잠시후 다시시도하십시오.");
},
beforeSend:function(){
},
complete:function(){
}
});
}
/****************************************************************************
* 접수 대기 상세 팝업
****************************************************************************/
function fn_selectReservePendingPopup(param){
selectReservePendingModal.popup(function (obj, param) {
fn_selectListReservationJson();
}, param);
}
/****************************************************************************
* 진료끝 상세 팝업
****************************************************************************/
function fn_selectPastReservePopup(param){
selectPastReserveModal.popup(function (obj, param) {
fn_selectListReservationJson();
}, param);
}
/****************************************************************************
* 접수 완료 상세 팝업
****************************************************************************/
function fn_selectPromiseCompletedPopup(param){
selectPromiseCompletedModal.popup(function (obj, param) {
fn_selectListReservationJson();
}, param);
}
/****************************************************************************
* 예약상태 표시
****************************************************************************/
function fn_setReserveStatus(param){
switch (param) {
case 'T':
return '예약';
case 'TN':
return '예약취소';
case 'R':
return '접수';
case 'RN':
return '접수취소';
case 'G':
return '진료중';
case 'Y':
return '진료끝';
default:
return '알 수 없는 상태'; // 예상치 못한 코드에 대한 처리
}
}
/****************************************************************************
* 검색하기
****************************************************************************/
function fn_ReservationHistorySearch(param){
fn_selectListReservationHistoryJson();
}
/****************************************************************************
* 페이지 init
****************************************************************************/
function fn_pageInit(){
if($('.notify_box').hasClass('open')){
$('main').addClass('short');
}else{
$('main').addClass('short2');
}
if(isMobile.Android()){
// 안드로이드
let value;
let year;
let month;
$("#mmDatepicker").click(function(e){
e.preventDefault();
value = prompt("monthPicker");
if(null === value || !value){
// 오늘
let toDate = new Date();
year = toDate.getFullYear();
month = toDate.getMonth() + 1;
if(month < 10) month = "0" + month;
}else{
let valueArr = value.split("-");
year = valueArr[0];
month = valueArr[1];
if(month < 10) month = "0" + month;
}
searchDate = year+"-"+month;
$(this).val(searchDate);
fn_ReservationHistorySearch();
});
}else if(isMobile.IOS()){
// IOS
let value; /**/
let year;
let month;
$("#mmDatepicker").change(function(){
value = $(this).val();
if(!value){
// 오늘
let toDate = new Date();
year = toDate.getFullYear();
month = toDate.getMonth() + 1;
if(month < 10) month = "0" + month;
}else{
let valueArr = $(this).val().split("-");
year = valueArr[0];
month = valueArr[1];
if(month < 10) month = "0" + month;
}
searchDate = year+"-"+month;
$(this).val(searchDate);
fn_ReservationHistorySearch();
});
}
if(searchDate){
$("#mmDatepicker").val(searchDate)
}else{
// 오늘
let toDate = new Date();
let year = toDate.getFullYear();
let month = toDate.getMonth() + 1;
if(month < 10) month = "0" + month;
$("#mmDatepicker").val(year+'-'+month);
searchDate = year+'-'+month;
}
//예약내역조회
fn_selectListReservationJson();
//지난예약조회
fn_ReservationHistorySearch();
}
/****************************************************************************
* 페이지 event
****************************************************************************/
function fn_pageEvent(){
}
$(function(){
// 페이지 init
fn_pageInit();
// 페이지 event
fn_pageEvent();
});

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,21 @@
const swiper = new Swiper('.swiper', {
// Optional parameters
direction: 'vertical',
loop: true,
// If we need pagination
pagination: {
el: '.swiper-pagination',
},
// Navigation arrows
navigation: {
nextEl: '.swiper-button-next',
prevEl: '.swiper-button-prev',
},
// And if we need scrollbar
scrollbar: {
el: '.swiper-scrollbar',
},
});

View File

@@ -0,0 +1,367 @@
/* ##############################################################
설 명 : [Modal]공지사항 상세/수정 팝업
작성일 : 2023. 01. 19.
작성자 : NTsoft
수정일 수정자 수정내용
------- -------- ---------------------------
2023. 01. 19. NTsoft 최초 생성
*/
// let timer;
let isRunning = false;
let phoneAuthYn = "N";
let updateEmailModal = {
callback : null,
reqParam : null,
dataList : null,
/* 모달 초기화 작업 */
init : function () {
$('#updateEmailModal').remove();
$('body').append( this.HtmlTemplate);
//그리드 이벤트
this.setEvent();
},
/* 그리드 이벤트 설정 */
setEvent:function() {
$('#updateEmailModal .btnCancle').on("click", function(){
updateEmailModal.close();
});
$('#updateEmailModal .btnSave').on("click", function(){
updateEmailModal.save("I");
});
$("#updateEmailModal #modalOpenDate").datetimepicker({
allowInputToggle: true,
format: 'YYYY-MM-DD',
defaultDate: moment()
});
},
/* 데이터 선택 */
setSelect:function(selectNumber) {
let checkedData = dataList[selectNumber];
if(dataList==null||checkedData==undefined){
return ;
}
if( updateEmailModal.callback ) {
updateEmailModal.callback(checkedData);
}
updateEmailModal.close();
},
//저장
save:function(state) {
let email = $("#updateEmailModal #email").val();
let phoneNumber = $("#updateEmailModal #phoneNumber").val();
let authNumber = $("#updateEmailModal #authNumber").val();
let reg_email = /^([0-9a-zA-Z_\.-]+)@([0-9a-zA-Z_-]+)(\.[0-9a-zA-Z_-]+){1,2}$/;
let reg_tel = /^[0-9]{10,11}$/;
// if(true != fn_emptyCheck(email)){
// modalEvent.warning("수정", "이메일을 입력하세요.");
// return;
// }else{
// if(!reg_email.test(email)) {
// modalEvent.warning("수정", "이메일 형식에 맞게 입력해주세요.");
// return;
// }else if(true != fn_lengthCheck(email, 255)) {
// modalEvent.warning("수정", "이메일은 255자를 넘을 수 없습니다.");
// return;
// }
// }
if(true != fn_emptyCheck(phoneNumber)){
modalEvent.warning("수정", "휴대폰번호를 입력해주세요.");
return;
}else{
if(reg_tel.test(phoneNumber) != true) {
modalEvent.warning("수정", "휴대폰번호는 숫자 10~11자리여야 합니다.");
return;
}else{
phoneNumber = phoneNumber.replace("-", "");
}
}
if(phoneAuthYn === "Y"){
if(true !== fn_emptyCheck(authNumber)){
modalEvent.warning("수정", "인증번호는 필수 입력정보 입니다.");
return;
}
modalEvent.info("수정", "휴대폰 번호를 수정하시겠습니까?", function(){
let formData = new FormData();
formData.append("email", email);
formData.append("phoneNumber", phoneNumber);
formData.append("authNumber", authNumber);
$.ajax({
url: encodeURI('/mobileuser/updateEmail.do'),
data: formData,
dataType: 'json',
processData: false,
contentType: false,
type: 'POST',
async: true,
success: function(data){
if(data.msgCode=='0'){
let msgDesc = data.msgDesc;
modalEvent.success("", "휴대폰 번호가 수정되었습니다.", function(){
if( updateEmailModal.callback ) {
updateEmailModal.callback();
}
updateEmailModal.close();
});
}else{
modalEvent.danger("", data.msgDesc);
}
},
error : function(xhr, status, error) {
modalEvent.danger("", "정상적으로 수행되지 않았습니다. 인터넷에 연결되어 있는지 확인해 보시기 바랍니다.");
},
complete:function(){
}
});
});
}else{
modalEvent.warning("수정", "휴대폰 인증을 진행하세요.");
}
},
/*
* 팝업
* callback : 콜백함수, reqParam: 팝업파라미터
*/
popup:function(callback, reqParam) {
// 초기화 후 열기
updateEmailModal.init();
//콜백함수 지정.
updateEmailModal.callback = callback;
updateEmailModal.reqParam = reqParam;
updateEmailModal.dataList = null;
setTimeout(function(){
$('#updateEmailModal').modal('show')
}, 200);
},
/*
* 팝업 닫기
*/
close:function() {
$('#updateEmailModal').modal('hide');
setTimeout(function(){
$('#updateEmailModal').remove();
},500);
},
HtmlTemplate : `
<div class="modal myInfo_modal fade" id="updateEmailModal" tabindex="-1" aria-labelledby="exampleModalLabel" aria-hidden="">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<p class="label">휴대폰 번호 수정</p>
</div>
<div class="modal-body">
<ul>
<li class="label">휴대폰 번호</li>
<li class="ipbt">
<input id="phoneNumber" type="tel" placeholder="-없이 번호 입력">
<button id="sendAuthNumBtn" onClick="fn_sendAuthNum()">인증번호 발송</button>
</li>
<li class="ipbt">
<input id="authNumber" type="password" placeholder="인증번호 입력">
<button id="authNumBtn" onClick="fn_selectPhoneAuthCheck()">인증번호 확인</button>
</li>
<p id="timer" style="color: #3985EA;padding: 10px;margin: auto;"></p>
<li class="label" style="display:none;">이메일</li>
<li style="display:none;"><input id="email" type="email" placeholder="e-mail@mail.com"></li>
</ul>
</div>
<div class="modal-footer">
<div class="btn_box">
<button class="close_btn btnCancle">닫기</button>
<button class="save_btn btnSave">저장</button>
</div>
</div>
</div>
</div>
</div>
`
};
/****************************************************************************
* 인증번호 발송
****************************************************************************/
function fn_sendAuthNum(){
let phoneNumber = $("#updateEmailModal #phoneNumber").val();
let reg_tel = /^[0-9]{10,11}$/;
if(true != fn_emptyCheck(phoneNumber)){
modalEvent.warning("조회", "휴대폰번호를 입력하세요.");
return;
}else{
if(reg_tel.test(phoneNumber) != true) {
modalEvent.warning("조회", "휴대폰번호는 숫자 10~11자리여야 합니다.");
return;
}else{
// 인증번호 발송
fn_insertPhoneAuth();
}
}
}
/****************************************************************************
* 인증번호 등록
****************************************************************************/
function fn_insertPhoneAuth(){
isRunning = false;
let phoneNumber = $("#updateEmailModal #phoneNumber").val();
let authType = "EM";
let formData = new FormData();
formData.append("phoneNumber", phoneNumber);
formData.append("authType", authType);
$.ajax({
url: encodeURI('/mobilephoneauth/insertPhoneAuth.do'),
data: formData,
dataType: 'json',
processData: false,
contentType: false,
type: 'POST',
async: true,
success: function(data){
if(data.msgCode=='0'){
modalEvent.success("", data.msgDesc, function(){
isRunning = true;
fn_startTimer();
$("#sendAuthNumBtn").text("재전송");
$(".certification_box2").show();
});
}else{
modalEvent.danger("", data.msgDesc);
}
},
error : function(xhr, status, error) {
modalEvent.danger("", "정상적으로 수행되지 않았습니다. 인터넷에 연결되어 있는지 확인해 보시기 바랍니다.");
},
beforeSend:function(xhr){
xhr.setRequestHeader("token", sessionStorage.getItem("token"));
},
complete:function(){
}
});
}
/****************************************************************************
* 타이머 함수 실행
****************************************************************************/
function fn_startTimer() {
// 남은 시간(초)
let count = 180;
let display = document.querySelector('#timer');
let minutes, seconds;
let timer = setInterval(function () {
if(isRunning){
minutes = parseInt(count / 60, 10);
seconds = parseInt(count % 60, 10);
minutes = minutes < 10 ? "0" + minutes : minutes;
seconds = seconds < 10 ? "0" + seconds : seconds;
display.textContent = "유효시간 " + minutes + ":" + seconds;
isRunning = true;
}else{
clearInterval(timer);
display.textContent = "";
isRunning = false;
}
// 타이머 종료
if (--count < 0) {
clearInterval(timer);
display.textContent = "";
isRunning = false;
$("#authNumber").val("");
}
}, 1000);
}
/****************************************************************************
* 인증번호 확인 조회
****************************************************************************/
function fn_selectPhoneAuthCheck(){
let phoneNumber = $("#updateEmailModal #phoneNumber").val();
let authNumber = $("#authNumber").val();
let reg_tel = /^[0-9]{10,11}$/;
if(true != fn_emptyCheck(phoneNumber)){
modalEvent.warning("조회", "휴대폰번호는 필수 값입니다.");
return;
}else{
if(reg_tel.test(phoneNumber) != true) {
modalEvent.warning("조회", "휴대폰번호는 숫자 10~11자리여야 합니다.");
return;
}else{
phoneNumber = phoneNumber.replace("-", "");
}
}
if(true != fn_emptyCheck(authNumber)){
modalEvent.warning("조회", "인증번호를 입력하세요.");
return;
}
let formData = new FormData();
formData.append("phoneNumber", phoneNumber);
formData.append("authNumber", authNumber);
$.ajax({
url: encodeURI('/mobilephoneauth/selectPhoneAuthCheck.do'),
data: formData,
dataType: 'json',
processData: false,
contentType: false,
type: 'POST',
async: false,
success: function(data){
if(data.msgCode=='0'){
modalEvent.success("", data.msgDesc);
phoneAuthYn = "Y";
clearInterval(timer);
isRunning = false;
}else{
modalEvent.danger("조회 오류", data.msgDesc);
phoneAuthYn = "N";
$("#insertUserBtn").attr("disabled", true);
}
},
error : function(xhr, status, error) {
modalEvent.danger("조회 오류", "정상적으로 수행되지 않았습니다. 인터넷에 연결되어 있는지 확인해 보시기 바랍니다.");
phoneAuthYn = "N";
$(".btn-right").attr("disabled", true);
},
beforeSend:function(xhr){
xhr.setRequestHeader("token", sessionStorage.getItem("token"));
},
complete:function(){
}
});
}

View File

@@ -0,0 +1,187 @@
/* ##############################################################
설 명 : [Modal]공지사항 상세/수정 팝업
작성일 : 2023. 01. 19.
작성자 : NTsoft
수정일 수정자 수정내용
------- -------- ---------------------------
2023. 01. 19. NTsoft 최초 생성
*/
let updatePasswordModal = {
callback : null,
reqParam : null,
dataList : null,
/* 모달 초기화 작업 */
init : function () {
$('#updatePasswordModal').remove();
$('body').append( this.HtmlTemplate);
//그리드 이벤트
this.setEvent();
},
/* 그리드 이벤트 설정 */
setEvent:function() {
$('#updatePasswordModal .btnCancle').on("click", function(){
updatePasswordModal.close();
});
$('#updatePasswordModal .btnSave').on("click", function(){
updatePasswordModal.save("I");
});
$("#updatePasswordModal #modalOpenDate").datetimepicker({
allowInputToggle: true,
format: 'YYYY-MM-DD',
defaultDate: moment()
});
},
/* 데이터 선택 */
setSelect:function(selectNumber) {
let checkedData = dataList[selectNumber];
if(dataList==null||checkedData==undefined){
return ;
}
if( updatePasswordModal.callback ) {
updatePasswordModal.callback(checkedData);
}
updatePasswordModal.close();
},
//저장
save:function(state) {
let currentPassword = $("#updatePasswordModal #currentPassword").val();
let newPassword = $("#updatePasswordModal #newPassword").val();
let confirmNewPassword = $("#updatePasswordModal #confirmNewPassword").val();
let reg_password = /^(?=.*[a-zA-Z])((?=.*\d)(?=.*\W)).{8,20}$/;
if(true != fn_emptyCheck(currentPassword)) {
modalEvent.warning("수정", "기존 비밀번호를 입력하세요");
return;
}
if(true != fn_emptyCheck(newPassword)) {
modalEvent.warning("수정", "새 비밀번호를 입력하세요");
return;
}
else if(!reg_password.test(newPassword)){
modalEvent.warning("수정", "비밀번호는 숫자,영문,특수문자 조합 최소 8자리 최대 20자리로 입력해야합니다");
return;
}
else{
if(true != fn_lengthCheck(newPassword, 100)) {
modalEvent.warning("수정", "비밀번호 정보는 100자를 넘을 수 없습니다.");
return;
}
}
if(true != fn_emptyCheck(confirmNewPassword)) {
modalEvent.warning("수정", "새 비밀번호 확인을 입력하세요");
return;
}
else if(!reg_password.test(confirmNewPassword)){
modalEvent.warning("수정", "비밀번호 확인은 숫자,영문,특수문자 조합 최소 8자리 최대 20자리로 입력해야합니다");
return;
}
else{
if(true != fn_lengthCheck(confirmNewPassword, 100)) {
modalEvent.warning("수정", "비밀번호 확인 정보는 100자를 넘을 수 없습니다.");
return;
}
}
modalEvent.info("수정", "비밀번호를 수정하시겠습니까?", function(){
let formData = new FormData();
formData.append("currentPassword", currentPassword);
formData.append("newPassword", newPassword);
formData.append("confirmNewPassword", confirmNewPassword);
$.ajax({
url: encodeURI('/mobileuser/updatePassword.do'),
data: formData,
dataType: "json",
processData: false,
contentType: false,
type: 'POST',
async: true,
success: function(data){
if('0'==data.msgCode){
modalEvent.success("수정 성공", data.msgDesc, function(){
if( updatePasswordModal.callback ) {
updatePasswordModal.callback();
}
updatePasswordModal.close();
});
}
else{
modalEvent.danger("수정 오류", data.msgDesc);
}
},
error : function(xhr, status, error) {
modalEvent.danger("수정 오류", "수정 중 오류가 발생하였습니다. 잠시후 다시시도하십시오.");
},
beforeSend:function(){
},
complete:function(){
}
});
});
},
/*
* 팝업
* callback : 콜백함수, reqParam: 팝업파라미터
*/
popup:function(callback, reqParam) {
// 초기화 후 열기
updatePasswordModal.init();
//콜백함수 지정.
updatePasswordModal.callback = callback;
updatePasswordModal.reqParam = reqParam;
updatePasswordModal.dataList = null;
setTimeout(function(){
$('#updatePasswordModal').modal('show')
}, 200);
},
/*
* 팝업 닫기
*/
close:function() {
$('#updatePasswordModal').modal('hide');
setTimeout(function(){
$('#updatePasswordModal').remove();
},500);
},
HtmlTemplate : `
<div class="modal password_modal fade" id="updatePasswordModal" tabindex="-1" aria-labelledby="exampleModalLabel" aria-hidden="">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<p class="label">비밀번호 변경</p>
</div>
<div class="modal-body">
<ul>
<li class="label">기존 비밀번호</li>
<li><input id="currentPassword" type="password" placeholder="기존 비밀번호를 입력해주세요."></li>
<li class="label">새로운 비밀번호</li>
<li><input id="newPassword" type="password" placeholder="변경할 비밀번호를 입력해주세요."></li>
<li><input id="confirmNewPassword" type="password" placeholder="비밀번호 재확인"></li>
</ul>
</div>
<div class="modal-footer">
<div class="btn_box">
<button class="close_btn btnCancle">닫기</button>
<button class="save_btn btnSave">저장</button>
</div>
</div>
</div>
</div>
</div>
`
};

View File

@@ -0,0 +1,133 @@
/****************************************************************************
* 계정정보 조회
****************************************************************************/
function fn_selectUserAccountJson(){
let formData = new FormData();
$.ajax({
url: encodeURI('/mobileuser/selectUserAccount.do'),
data: formData,
dataType: "json",
processData: false,
contentType: false,
type: 'POST',
async: false,
success: function(data){
if('0'==data.msgCode){
if(0<data.rows.length){
const accountData = data.rows[0];
$("#membershipAccount").text(accountData.membershipAccount||'');
$("#loginType").text(accountData.loginType);
$("#phoneNumber").text(accountData.phoneNumber||'');
$("#email").text(accountData.email||'');
$("#introUserName").text(accountData.introUserName||'');
}else{
modalEvent.warning("조회 오류", data.msgDesc);
}
} else if (data.msgCode == '-1') {
modalEvent.warning("조회 오류", data.msgDesc);
} else {
modalEvent.danger("조회 오류", "조회 중 오류가 발생하였습니다. 잠시후 다시시도하십시오.");
}
},
error: function(xhr, status, error) {
modalEvent.danger("조회 오류", "조회 중 오류가 발생하였습니다. 잠시후 다시시도하십시오.");
},
beforeSend:function(){
},
complete:function(){
}
});
}
/****************************************************************************
* 회원탈퇴
****************************************************************************/
function fn_deleteUser(){
modalEvent.info("삭제", "앱 탈퇴를 진행하시겠습니까?", function(){
let formData = new FormData();
$.ajax({
url: encodeURI('/mobilelogin/deleteUser.do'),
data: formData,
dataType: "json",
processData: false,
contentType: false,
type: 'POST',
async: true,
success: function(data){
if('0'==data.msgCode){
modalEvent.success("성공", "탈퇴가 완료되었습니다.", function(){
location.href = "/mobilelogin/logout.do"
});
}
else{
modalEvent.danger("등록 오류", data.msgDesc);
}
},
error : function(xhr, status, error) {
modalEvent.danger("등록 오류", "등록 중 오류가 발생하였습니다. 잠시후 다시시도하십시오.");
},
beforeSend:function(){
},
complete:function(){
}
});
});
}
/****************************************************************************
* 비밀번호 변경 모달
****************************************************************************/
function fn_updatePasswordModal(){
let param = {};
updatePasswordModal.popup(function(obj, reqParam) {
fn_selectUserAccountJson();
}, param);
}
/****************************************************************************
* 이메일 변경 모달
****************************************************************************/
function fn_updateEmailModal(){
let param = {};
updateEmailModal.popup(function(obj, reqParam) {
fn_selectUserAccountJson();
}, param);
}
/****************************************************************************
* 페이지 init
****************************************************************************/
function fn_pageInit(){
//계정정보 조회
fn_selectUserAccountJson();
}
/****************************************************************************
* 페이지 event
****************************************************************************/
function fn_pageEvent(){
$('#mmDatepicker').on('dp.change', function(){
fn_membershipChargeSearch();
});
$(".button_box button").on('click', function(){
$(".button_box .on").removeClass('on');
$(this).addClass('on');
fn_membershipChargeSearch();
});
}
$(function(){
// 페이지 init
fn_pageInit();
// 페이지 event
fn_pageEvent();
});

View File

@@ -0,0 +1,273 @@
let isRunning = false;
let phoneAuthYn = "N";
let userData = {};
let certCellFlag = "N";
let num = 60 * 3; // 몇분을 설정할지의 대한 변수 선언
let myVar;
let duplicateSuccess = false;
/****************************************************************************
* 완료버튼
****************************************************************************/
function fn_selectUserId() {
let userName = $("#userName").val();
let phoneNumber = $("#phoneNumber").val().replace(/-/g, "");
if (true != fn_emptyCheck(userName)) {
modalEvent.warning("등록", "성함이 없습니다.");
return;
}
if (true != fn_emptyCheck(phoneNumber)) {
modalEvent.warning("등록", "휴대폰번호가 없습니다.");
return;
}
if ('Y' !== phoneAuthYn) {
modalEvent.warning("등록", "휴대폰인증을 진행하세요");
return;
}
// 폼을 동적으로 생성하여 전송
let newForm = $("<form></form>");
newForm.attr("name", "submitForm");
newForm.attr("method", "POST");
newForm.attr("action", encodeURI('/mobileuser/selectUserId.do')); // 대상 URL 설정
// 입력된 데이터 추가
newForm.append($('<input/>', { type: 'hidden', name: 'userName', value: userName }));
newForm.append($('<input/>', { type: 'hidden', name: 'phoneNumber', value: phoneNumber }));
// 페이지에 폼 추가 및 제출
newForm.appendTo('body');
newForm.submit();
}
/****************************************************************************
* 휴대폰 본인인증
****************************************************************************/
function fn_sendAuthNum(){
let phoneNumber = $("#phoneNumber").val();
let reg_tel = /^[0-9]{10,11}$/;
if(true != fn_emptyCheck(phoneNumber)){
modalEvent.warning("조회", "휴대폰번호를 입력하세요.");
return;
}else{
if(reg_tel.test(phoneNumber) != true) {
modalEvent.warning("조회", "휴대폰번호는 숫자 10~11자리여야 합니다.");
return;
}else{
// 인증번호 발송
fn_insertPhoneAuth();
}
}
}
/****************************************************************************
* 인증번호 등록
****************************************************************************/
function fn_insertPhoneAuth(){
isRunning = false;
let phoneNumber = $("#phoneNumber").val();
let authType = "ID";
let formData = new FormData();
formData.append("phoneNumber", phoneNumber);
formData.append("authType", authType);
$.ajax({
url: encodeURI('/mobilephoneauth/insertPhoneAuth.do'),
data: formData,
dataType: 'json',
processData: false,
contentType: false,
type: 'POST',
async: true,
success: function(data){
if(data.msgCode=='0'){
modalEvent.success("", data.msgDesc, function(){
isRunning = true;
fn_startTimer();
$("#sendAuthNumBtn").text("재전송");
$(".certification_box2").show();
});
}else{
modalEvent.danger("", data.msgDesc);
}
},
error : function(xhr, status, error) {
modalEvent.danger("", "정상적으로 수행되지 않았습니다. 인터넷에 연결되어 있는지 확인해 보시기 바랍니다.");
},
beforeSend:function(xhr){
xhr.setRequestHeader("token", sessionStorage.getItem("token"));
},
complete:function(){
}
});
}
/****************************************************************************
* 타이머 함수 실행
****************************************************************************/
function fn_startTimer() {
// 남은 시간(초)
let count = 180;
let display = document.querySelector('#timer');
let minutes, seconds;
let timer = setInterval(function () {
if(isRunning){
minutes = parseInt(count / 60, 10);
seconds = parseInt(count % 60, 10);
minutes = minutes < 10 ? "0" + minutes : minutes;
seconds = seconds < 10 ? "0" + seconds : seconds;
display.textContent = "유효시간 " + minutes + ":" + seconds;
isRunning = true;
}else{
clearInterval(timer);
display.textContent = "";
isRunning = false;
}
// 타이머 종료
if (--count < 0) {
clearInterval(timer);
display.textContent = "";
isRunning = false;
$("#authNumber").val("");
}
}, 1000);
}
/****************************************************************************
* 인증번호 확인 조회
****************************************************************************/
function fn_selectPhoneAuthCheck(){
let phoneNumber = $("#phoneNumber").val();
let authNumber = $("#authNumber").val();
let reg_tel = /^[0-9]{10,11}$/;
if(true != fn_emptyCheck(phoneNumber)){
modalEvent.warning("조회", "휴대폰번호는 필수 값입니다.");
return;
}else{
if(reg_tel.test(phoneNumber) != true) {
modalEvent.warning("조회", "휴대폰번호는 숫자 10~11자리여야 합니다.");
return;
}else{
phoneNumber = phoneNumber.replace("-", "");
}
}
if(true != fn_emptyCheck(authNumber)){
modalEvent.warning("조회", "인증번호를 입력하세요.");
return;
}
let formData = new FormData();
formData.append("phoneNumber", phoneNumber);
formData.append("authNumber", authNumber);
$.ajax({
url: encodeURI('/mobilephoneauth/selectPhoneAuthCheck.do'),
data: formData,
dataType: 'json',
processData: false,
contentType: false,
type: 'POST',
async: false,
success: function(data){
if(data.msgCode=='0'){
modalEvent.success("", data.msgDesc, function (){
$(".certification_box2").hide();
});
phoneAuthYn = "Y";
clearInterval(timer);
isRunning = false;
// checkAllFields();
const completeButton = $('.button_box button');
completeButton.addClass('active');
completeButton.attr("disabled", false);
}else{
modalEvent.danger("조회 오류", data.msgDesc);
phoneAuthYn = "N";
// checkAllFields();
}
},
error : function(xhr, status, error) {
modalEvent.danger("조회 오류", "정상적으로 수행되지 않았습니다. 인터넷에 연결되어 있는지 확인해 보시기 바랍니다.");
phoneAuthYn = "N";
// checkAllFields();
},
beforeSend:function(xhr){
xhr.setRequestHeader("token", sessionStorage.getItem("token"));
},
complete:function(){
}
});
}
function alertFunc() {
var min = num / 60;
min = Math.floor(min);
var sec = num - (60 * min);
sec = sec > 9 ? sec : "0"+sec ;
if(num == 0){
certCellFlag = "T";
clearInterval(myVar) // num 이 0초가 되었을대 clearInterval로 타이머 종료
}
num--;
}
function fn_errorMsgPop(){
modalEvent.warning('오류',errorMsg)
}
/****************************************************************************
* 페이지 init
****************************************************************************/
function fn_pageInit() {
if(errorMsg){
fn_errorMsgPop()
}
}
/****************************************************************************
* 페이지 event
****************************************************************************/
function fn_pageEvent() {
// 다음버튼
$("#btn_selectUserId").click(function () {
fn_selectUserId();
});
$("#back_btn").click(function () {
location.href='/mobile'
});
}
$(function () {
// 페이지 init
fn_pageInit();
// 페이지 event
fn_pageEvent();
});

View File

@@ -0,0 +1,287 @@
let isRunning = false;
let phoneAuthYn = "N";
let certCellFlag = "N";
let num = 60 * 3; // 몇분을 설정할지의 대한 변수 선언
let myVar;
/****************************************************************************
* 다음 버튼(휴대폰인증페이지 이동)
****************************************************************************/
function fn_selectUserPhoneNumber() {
let membershipAccount = $("#membershipAccount").val();
if (true != fn_emptyCheck(membershipAccount)) {
modalEvent.warning("등록", "아이디가 없습니다.");
return;
}
// 폼을 동적으로 생성하여 전송
let newForm = $("<form></form>");
newForm.attr("name", "submitForm");
newForm.attr("method", "POST");
newForm.attr("action", encodeURI('/mobileuser/selectUserPhoneNumber.do')); // 대상 URL 설정
// 입력된 데이터 추가
newForm.append($('<input/>', { type: 'hidden', name: 'membershipAccount', value: membershipAccount }));
// 페이지에 폼 추가 및 제출
newForm.appendTo('body');
newForm.submit();
}
/****************************************************************************
* 완료버튼 -비밀번호 재설정페이지 이동
****************************************************************************/
function fn_updateUserPasswordIntro() {
let phoneNumber = $("#phoneNumber").val();
if(userPhoneNumber!==phoneNumber){
modalEvent.warning("등록", "등록된 휴대폰번호가 아닙니다.");
return;
}
if ('Y' !== phoneAuthYn) {
modalEvent.warning("등록", "휴대폰인증을 진행하세요");
return;
}
// 폼을 동적으로 생성하여 전송
let newForm = $("<form></form>");
newForm.attr("name", "submitForm");
newForm.attr("method", "POST");
newForm.attr("action", encodeURI('/mobileuser/updateUserPasswordIntro.do')); // 대상 URL 설정
// 입력된 데이터 추가
newForm.append($('<input/>', { type: 'hidden', name: 'userPhoneNumber', value: phoneNumber }));
newForm.append($('<input/>', { type: 'hidden', name: 'membershipAccount', value: membershipAccount }));
// 페이지에 폼 추가 및 제출
newForm.appendTo('body');
newForm.submit();
}
/****************************************************************************
* 휴대폰 본인인증
****************************************************************************/
function fn_sendAuthNum(){
let phoneNumber = $("#phoneNumber").val();
let reg_tel = /^[0-9]{10,11}$/;
if(userPhoneNumber!==phoneNumber){
modalEvent.warning("조회", "등록된 휴대폰번호를 입력하세요.");
return;
}
if(true != fn_emptyCheck(phoneNumber)){
modalEvent.warning("조회", "휴대폰번호를 입력하세요.");
return;
}else{
if(reg_tel.test(phoneNumber) != true) {
modalEvent.warning("조회", "휴대폰번호는 숫자 10~11자리여야 합니다.");
return;
}else{
// 인증번호 발송
fn_insertPhoneAuth();
}
}
}
/****************************************************************************
* 인증번호 등록
****************************************************************************/
function fn_insertPhoneAuth(){
isRunning = false;
let phoneNumber = $("#phoneNumber").val();
let authType = 'PW';
let formData = new FormData();
formData.append("phoneNumber", phoneNumber);
formData.append("authType", authType);
$.ajax({
url: encodeURI('/mobilephoneauth/insertPhoneAuth.do'),
data: formData,
dataType: 'json',
processData: false,
contentType: false,
type: 'POST',
async: true,
success: function(data){
if(data.msgCode=='0'){
modalEvent.success("", data.msgDesc, function(){
isRunning = true;
fn_startTimer();
$("#sendAuthNumBtn").text("재전송");
$(".certification_box2").show();
});
}else{
modalEvent.danger("", data.msgDesc);
}
},
error : function(xhr, status, error) {
modalEvent.danger("", "정상적으로 수행되지 않았습니다. 인터넷에 연결되어 있는지 확인해 보시기 바랍니다.");
},
beforeSend:function(xhr){
xhr.setRequestHeader("token", sessionStorage.getItem("token"));
},
complete:function(){
}
});
}
/****************************************************************************
* 타이머 함수 실행
****************************************************************************/
function fn_startTimer() {
// 남은 시간(초)
let count = 180;
let display = document.querySelector('#timer');
let minutes, seconds;
let timer = setInterval(function () {
if(isRunning){
minutes = parseInt(count / 60, 10);
seconds = parseInt(count % 60, 10);
minutes = minutes < 10 ? "0" + minutes : minutes;
seconds = seconds < 10 ? "0" + seconds : seconds;
display.textContent = "유효시간 " + minutes + ":" + seconds;
isRunning = true;
}else{
clearInterval(timer);
display.textContent = "";
isRunning = false;
}
// 타이머 종료
if (--count < 0) {
clearInterval(timer);
display.textContent = "";
isRunning = false;
$("#authNumber").val("");
}
}, 1000);
}
/****************************************************************************
* 인증번호 확인 조회
****************************************************************************/
function fn_selectPhoneAuthCheck(){
let phoneNumber = $("#phoneNumber").val();
let authNumber = $("#authNumber").val();
let reg_tel = /^[0-9]{10,11}$/;
if(true != fn_emptyCheck(phoneNumber)){
modalEvent.warning("조회", "휴대폰번호는 필수 값입니다.");
return;
}else{
if(reg_tel.test(phoneNumber) != true) {
modalEvent.warning("조회", "휴대폰번호는 숫자 10~11자리여야 합니다.");
return;
}else{
phoneNumber = phoneNumber.replace("-", "");
}
}
if(true != fn_emptyCheck(authNumber)){
modalEvent.warning("조회", "인증번호를 입력하세요.");
return;
}
let formData = new FormData();
formData.append("phoneNumber", phoneNumber);
formData.append("authNumber", authNumber);
$.ajax({
url: encodeURI('/mobilephoneauth/selectPhoneAuthCheck.do'),
data: formData,
dataType: 'json',
processData: false,
contentType: false,
type: 'POST',
async: false,
success: function(data){
if(data.msgCode=='0'){
modalEvent.success("", data.msgDesc);
phoneAuthYn = "Y";
clearInterval(timer);
isRunning = false;
checkAllFields();
}else{
modalEvent.danger("조회 오류", data.msgDesc);
phoneAuthYn = "N";
checkAllFields();
}
},
error : function(xhr, status, error) {
modalEvent.danger("조회 오류", "정상적으로 수행되지 않았습니다. 인터넷에 연결되어 있는지 확인해 보시기 바랍니다.");
phoneAuthYn = "N";
checkAllFields();
},
beforeSend:function(xhr){
xhr.setRequestHeader("token", sessionStorage.getItem("token"));
},
complete:function(){
}
});
}
function alertFunc() {
var min = num / 60;
min = Math.floor(min);
var sec = num - (60 * min);
sec = sec > 9 ? sec : "0"+sec ;
if(num == 0){
certCellFlag = "T";
clearInterval(myVar) // num 이 0초가 되었을대 clearInterval로 타이머 종료
}
num--;
}
function fn_errorMsgPop(){
modalEvent.warning('오류',errorMsg);
}
/****************************************************************************
* 페이지 init
****************************************************************************/
function fn_pageInit() {
if(errorMsg){
fn_errorMsgPop();
}
}
/****************************************************************************
* 페이지 event
****************************************************************************/
function fn_pageEvent() {
// 다음버튼
$("#btn_selectUserPhoneNumber").click(function () {
fn_selectUserPhoneNumber();
});
$("#back_btn").click(function () {
location.href='/mobile'
});
}
$(function () {
// 페이지 init
fn_pageInit();
// 페이지 event
fn_pageEvent();
});

View File

@@ -0,0 +1,72 @@
/****************************************************************************
* 다음버튼 -비밀번호 재설정
****************************************************************************/
function fn_updateUserPassword() {
let membershipPassword = $("#membershipPassword").val();
let passwordCheck= $("#passwordCheck").val();
if(true != fn_emptyCheck(membershipPassword)){
modalEvent.warning("등록", "비밀번호를 입력하세요");
return;
}
if(true != fn_emptyCheck(passwordCheck)){
modalEvent.warning("등록", "비밀번호 재확인을 입력하세요");
return;
}
if(membershipPassword!==passwordCheck){
modalEvent.warning("등록", "비밀번호가 일치하지 않습니다.");
return;
}
// 폼을 동적으로 생성하여 전송
let newForm = $("<form></form>");
newForm.attr("name", "submitForm");
newForm.attr("method", "POST");
newForm.attr("action", encodeURI('/mobileuser/updateUserPassword.do')); // 대상 URL 설정
// 입력된 데이터 추가
newForm.append($('<input/>', { type: 'hidden', name: 'userPhoneNumber', value: userPhoneNumber }));
newForm.append($('<input/>', { type: 'hidden', name: 'membershipAccount', value: membershipAccount }));
newForm.append($('<input/>', { type: 'hidden', name: 'membershipPassword', value: membershipPassword }));
newForm.append($('<input/>', { type: 'hidden', name: 'passwordCheck', value: passwordCheck }));
// 페이지에 폼 추가 및 제출
newForm.appendTo('body');
newForm.submit();
}
function fn_errorMsgPop(){
modalEvent.warning('오류',errorMsg)
}
/****************************************************************************
* 페이지 init
****************************************************************************/
function fn_pageInit() {
if(errorMsg){
fn_errorMsgPop()
}
}
/****************************************************************************
* 페이지 event
****************************************************************************/
function fn_pageEvent() {
// 다음버튼
$("#btn_selectUserPhoneNumber").click(function () {
fn_selectUserPhoneNumber();
});
$("#back_btn").click(function () {
location.href='/mobile'
});
}
$(function () {
// 페이지 init
fn_pageInit();
// 페이지 event
fn_pageEvent();
});

View File

@@ -0,0 +1,69 @@
/****************************************************************************
* 예약 등록
****************************************************************************/
function fn_insertUserInquiry(){
let title = $('#title').val();
let content = $('#content').val();
if(true != fn_emptyCheck(title)){
modalEvent.warning("등록", "문의 제목을 입력하세요.");
return;
}
if(true != fn_emptyCheck(content)){
modalEvent.warning("등록", "문의 내용을 입력하세요");
return;
}
let formData = new FormData();
formData.append("title",title)
formData.append("content",content)
$.ajax({
url: encodeURI('/mobileuserinquiry/insertUserInquiry.do'),
data: formData,
dataType: "json",
processData: false,
contentType: false,
type: 'POST',
async: false,
success: function(data){
const param = {
}
if('0'==data.msgCode) {
modalEvent.success("등록 성공","1:1 문의가 등록되었습니다.", function(){
location.href ='/mobilecustomerservice/selectListUserInquiryIntro.do'
});
}
else{
modalEvent.danger("등록 오류", "등록 중 오류가 발생하였습니다. 잠시후 다시시도하십시오.");
}
},
error : function(xhr, status, error) {
modalEvent.danger("조회 오류", "조회 중 오류가 발생하였습니다. 잠시후 다시시도하십시오.");
},
beforeSend:function(){
},
complete:function(){
}
});
}
/****************************************************************************
* 페이지 init
****************************************************************************/
function fn_pageInit(){
}
/****************************************************************************
* 페이지 event
****************************************************************************/
function fn_pageEvent(){
}
$(function(){
// 페이지 init
fn_pageInit();
// 페이지 event
fn_pageEvent();
});

View File

@@ -0,0 +1,146 @@
/* ##############################################################
설 명 : [Modal]공지사항 상세/수정 팝업
작성일 : 2023. 01. 19.
작성자 : NTsoft
수정일 수정자 수정내용
------- -------- ---------------------------
2023. 01. 19. NTsoft 최초 생성
*/
let userInquirySelectModal = {
callback : null,
reqParam : null,
dataList : null,
/* 모달 초기화 작업 */
init : function () {
$('#userInquirySelectModal').remove();
$('body').append( this.HtmlTemplate);
//그리드 이벤트
this.setEvent();
},
/* 그리드 이벤트 설정 */
setEvent:function() {
$('#userInquirySelectModal .btnCancle').on("click", function(){
userInquirySelectModal.close();
});
},
/* 데이터 선택 */
setSelect:function(selectNumber) {
let checkedData = dataList[selectNumber];
if(dataList==null||checkedData==undefined){
return ;
}
if( userInquirySelectModal.callback ) {
userInquirySelectModal.callback(checkedData);
}
userInquirySelectModal.close();
},
// 상세 조회
search:function(state) {
let muUserInquiryId = userInquirySelectModal.reqParam.muUserInquiryId;
if(true != fn_emptyCheck(muUserInquiryId)){
modalEvent.warning("조회", "문의사항 정보가 없습니다.");
return;
}
let formData = new FormData();
formData.append("muUserInquiryId", muUserInquiryId);
$.ajax({
url: encodeURI('/mobileuserinquiry/selectUserInquiry.do'),
data: formData,
dataType: "json",
processData: false,
contentType: false,
type: 'POST',
async: true,
success: function(data){
if('0'==data.msgCode){
$("#userInquirySelectModal #modalTitle").text(data.rows[0].title);
$("#userInquirySelectModal #modalContent").empty().html(data.rows[0].content.replace(/\n/g,"<br/>"));
$("#userInquirySelectModal #writeDate").text(data.rows[0].writeDate);
$("#userInquirySelectModal #writeTime").text(data.rows[0].writeTime);
if(data.rows[0].answer){
$("#userInquirySelectModal #answer").empty().html(data.rows[0].answer.replace(/\n/g,"<br/>"));
$("#userInquirySelectModal #answerDate").text(data.rows[0].answerDate);
$("#userInquirySelectModal #answerTime").text(data.rows[0].answerTime);
$("#userInquirySelectModal .modal-body").css('display','block')
}
}
else{
modalEvent.danger("조회 오류", data.msgDesc);
}
},
error : function(xhr, status, error) {
modalEvent.danger("조회 오류", "조회 중 오류가 발생하였습니다. 잠시후 다시시도하십시오.");
},
beforeSend:function(){
},
complete:function(){
}
});
},
/*
* 팝업
* callback : 콜백함수, reqParam: 팝업파라미터
*/
popup:function(callback, reqParam) {
// 초기화 후 열기
userInquirySelectModal.init();
//콜백함수 지정.
userInquirySelectModal.callback = callback;
userInquirySelectModal.reqParam = reqParam;
userInquirySelectModal.dataList = null;
setTimeout(function(){
$('#userInquirySelectModal').modal('show')
}, 200);
userInquirySelectModal.search();
},
/*
* 팝업 닫기
*/
close:function() {
$('#userInquirySelectModal').modal('hide');
setTimeout(function(){
$('#userInquirySelectModal').remove();
},500);
},
HtmlTemplate : `
<div class="modal inquirySelect_modal fade" id="userInquirySelectModal" tabindex="-1" aria-labelledby="exampleModalLabel" aria-hidden="">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<p class="label" id="modalTitle">이벤트 시술 가격 문의</p>
<p>
<span id="writeDate">2021-07-07</span>
<span id="writeTime">14:00</span>
</p>
<p id="modalContent" class="inquiry_content">추석 연휴간 휴진하게 되어, 예약이 불가능합니다. 추석 연휴간 휴진하게 되어, 예약이 불가능합니다.</p>
</div>
<div class="modal-body" style="display:none">
<p class="label">문의 답변</p>
<p>
<span id="answerDate">2021-07-07</span>
<span id="answerTime">14:00</span>
</p>
<p id="answer" class="inquiry_answer">추석 연휴간 휴진하게 되어, 예약이 불가능합니다. 추석 연휴간 휴진하게 되어, 예약이 불가능합니다.</p>
</div>
<div class="modal-footer">
<div class="btn_box">
<button class="ok_btn btnCancle">확인</button>
</div>
</div>
</div>
</div>
</div>
`
};

View File

@@ -0,0 +1,79 @@
/****************************************************************************
* 1:1문의내역 리스트 조회
****************************************************************************/
function fn_selectListUserInquiryJson(){
let formData = new FormData();
$.ajax({
url: encodeURI('/mobileuserinquiry/selectListUserInquiry.do'),
data: formData,
dataType: "json",
processData: false,
contentType: false,
type: 'POST',
async: true,
success: function(data){
if('0'==data.msgCode){
$('main ul').empty();
if(0<data.totalCount){
data.rows.forEach((inquiryData,index)=>{
const innerHtml = ` <li onclick="fn_selectInquiryPopup('${inquiryData.muUserInquiryId}')">
<div>
<p>${inquiryData.title}</p>
<p>${inquiryData.writeDate}</p>
</div>
<div><p>${inquiryData.answerStatus}</p></div>
</li>`;
$('main ul').append(innerHtml);
});
} else {
const innerHtml = `<li><p>문의내역이 없습니다</p></li>`;
$('main ul').append(innerHtml);
}
}
else{
modalEvent.danger("조회 오류", data.msgDesc);
}
},
error : function(xhr, status, error) {
modalEvent.danger("조회 오류", "조회 중 오류가 발생하였습니다. 잠시후 다시시도하십시오.");
},
beforeSend:function(){
},
complete:function(){
}
});
}
function fn_selectInquiryPopup(param){
let reqParam = {
"muUserInquiryId" : param
};
userInquirySelectModal.popup(function(obj, reqParam) {
fn_selectListUserInquiryJson();
}, reqParam);
}
/****************************************************************************
* 페이지 init
****************************************************************************/
function fn_pageInit(){
fn_selectListUserInquiryJson();
}
/****************************************************************************
* 페이지 event
****************************************************************************/
function fn_pageEvent(){
}
$(function(){
// 페이지 init
fn_pageInit();
// 페이지 event
fn_pageEvent();
});

View File

@@ -0,0 +1,288 @@
/****************************************************************************
* 최근 6개 인바디 데이터 조회
****************************************************************************/
function fn_selectListRecentUserPhysicalJson(){
let formData = new FormData();
$.ajax({
url: encodeURI('/mobileuserphysical/selectRecentUserPhysicalList.do'),
data: formData,
dataType: "json",
processData: false,
contentType: false,
type: 'POST',
async: false,
success: function(data){
if('0'==data.msgCode){
if(0<data.totalCount){
const labels = data.rows.map(item => item.writeDate);
const bmiValues = data.rows.map(item => item.bmi);
while (labels.length < 6) {
labels.push(''); // 빈 라벨 추가
bmiValues.push(null); // 빈 데이터 추가
}
fn_drawBmiChart(labels, bmiValues);
// 최대 및 최소 BMI 계산
const maxBmi = Math.max(...bmiValues.filter(value => value !== null));
const minBmi = Math.min(...bmiValues.filter(value => value !== null));
// 최고 및 최저 BMI 값을 표시
const bmiInfoDiv = document.querySelector('.bmi-info');
bmiInfoDiv.textContent = `최고 ${maxBmi} | 최저 ${minBmi}`;
//검색일자 인바디 데이터 조회
fn_UserPhysicalSearch();
} else {
console.log("없음");
$('.exist_box').empty();
const innerHtml = '<div class="none_box" style="margin: 20px">' +
'<p>측정된 기록이 없어요 😭</p>' +
'<p>인바디 / BMI 측정은 내원시 요청하실 수 있어요</p>' +
'</div>';
$('main').append(innerHtml)
}
} else if (data.msgCode == '-1') {
modalEvent.warning("조회 오류", data.msgDesc);
} else {
modalEvent.danger("조회 오류", "조회 중 오류가 발생하였습니다. 잠시후 다시시도하십시오.");
}
},
error: function(xhr, status, error) {
modalEvent.danger("조회 오류", "조회 중 오류가 발생하였습니다. 잠시후 다시시도하십시오.");
},
beforeSend:function(){
},
complete:function(){
}
});
}
/****************************************************************************
* 검색일자 인바디 데이터 조회
****************************************************************************/
function fn_selectListUserPhysicalJson(){
let formData = new FormData();
formData.append('physicalSearchDate',physicalSearchDate)
$.ajax({
url: encodeURI('/mobileuserphysical/selectUserPhysicalList.do'),
data: formData,
dataType: "json",
processData: false,
contentType: false,
type: 'POST',
async: false,
success: function(data){
const pastWrapper = $('.past_reservation');
if('0'==data.msgCode){
$('.bodyinfo_wrap').empty();
if(0<data.totalCount){
data.rows.forEach((physicalData,index)=>{
const innerHtml =`<div class="bodyinfo_box">
<p class="date">${physicalData.writeDate}</p>
<ul>
<li>
<p class="label">키</p>
<p><span>${physicalData.height}</span> <span>cm</span></p>
</li>
<li>
<p class="label">몸무게</p>
<p><span>${physicalData.weight}</span> <span>kg</span></p>
</li>
<li>
<p class="label">BMI</p>
<p><span>${physicalData.bmi}</span> <span>kg/m2</span></p>
</li>
</ul>
</div>`
$('.bodyinfo_wrap').append(innerHtml)
})
}else{
const innerHtml = '<div class="none_box" style="margin: 20px">' +
'<p>측정된 기록이 없어요 😭</p>' +
'<p>인바디 / BMI 측정은 내원시 요청하실 수 있어요</p>' +
'</div>';
$('.bodyinfo_wrap').append(innerHtml)
}
} else if (data.msgCode=='-1'){
modalEvent.warning("조회 오류", data.msgDesc);
}
else{
modalEvent.danger("조회 오류", "조회 중 오류가 발생하였습니다. 잠시후 다시시도하십시오.");
}
},
error : function(xhr, status, error) {
modalEvent.danger("조회 오류", "조회 중 오류가 발생하였습니다. 잠시후 다시시도하십시오.");
},
beforeSend:function(){
},
complete:function(){
}
});
}
/****************************************************************************
* 검색하기
****************************************************************************/
function fn_UserPhysicalSearch(param){
fn_selectListUserPhysicalJson();
}
// 차트를 그리는 함수
function fn_drawBmiChart(labels, bmiValues) {
const ctx = document.getElementById('myChart').getContext('2d');
const maxDataValue = Math.max(...bmiValues) * 1.5;
const myChart = new Chart(ctx, {
type: 'bar',
data: {
labels: labels,
datasets: [{
label: 'BMI',
data: bmiValues,
backgroundColor: '#00FF00',
borderColor: '#00FF00',
borderWidth: 1,
barThickness: 10
}]
},
options: {
scales: {
y: {
beginAtZero: true,
max: maxDataValue,
ticks: {
stepSize: 10,
color: '#ffffff'
},
grid: {
color: '#333333'
}
},
x: {
ticks: {
color: '#ffffff'
},
grid: {
color: '#333333'
}
}
},
plugins: {
legend: {
display: false
},
tooltip: {
enabled: true
},
datalabels: {
anchor: 'end',
align: 'top',
color: '#00FF00',
formatter: function (value) {
return value !== null ? value.toFixed(1) : '';
}
}
},
animation: {
duration: 1000
}
},
plugins: [ChartDataLabels]
});
}
/****************************************************************************
* 페이지 init
****************************************************************************/
function fn_pageInit(){
if(isMobile.Android()){
// 안드로이드
let value;
let year;
let month;
$("#mmDatepicker").click(function(e){
e.preventDefault();
value = prompt("monthPicker");
if(!value){
// 오늘
let toDate = new Date();
year = toDate.getFullYear();
month = toDate.getMonth() + 1;
if(month < 10) month = "0" + month;
}else{
let valueArr = value.split("-");
year = valueArr[0];
month = valueArr[1];
if(month < 10) month = "0" + month;
}
physicalSearchDate = year+"-"+month;
$(this).val(physicalSearchDate);
fn_selectListUserPhysicalJson();
});
}else if(isMobile.IOS()){
// IOS
let value; /**/
let year;
let month;
$("#mmDatepicker").change(function(){
value = $(this).val()
if(!value){
// 오늘
let toDate = new Date();
year = toDate.getFullYear();
month = toDate.getMonth() + 1;
if(month < 10) month = "0" + month;
}else{
let valueArr = $(this).val().split("-");
year = valueArr[0];
month = valueArr[1];
if(month < 10) month = "0" + month;
}
physicalSearchDate = year+"-"+month;
$(this).val(physicalSearchDate);
fn_selectListUserPhysicalJson();
});
}
if(physicalSearchDate){
$("#mmDatepicker").val(physicalSearchDate)
}else{
// 오늘
let toDate = new Date();
let year = toDate.getFullYear();
let month = toDate.getMonth() + 1;
if(month < 10) month = "0" + month;
$("#mmDatepicker").val( year+'-'+month).trigger("change");
physicalSearchDate = year+"-"+month;
}
//최근 인바디 데이터 조회
fn_selectListRecentUserPhysicalJson();
}
/****************************************************************************
* 페이지 event
****************************************************************************/
function fn_pageEvent(){
}
$(function(){
// 페이지 init
fn_pageInit();
// 페이지 event
fn_pageEvent();
});