Refactor new-patient.html: Integrated Choices.js and Flatpickr, removed Bootstrap dependency
This commit is contained in:
@@ -21,11 +21,7 @@
|
|||||||
</classpathentry>
|
</classpathentry>
|
||||||
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-21/"/>
|
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-21/"/>
|
||||||
<classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.web.container"/>
|
<classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.web.container"/>
|
||||||
<classpathentry kind="con" path="org.eclipse.buildship.core.gradleclasspathcontainer">
|
<classpathentry kind="con" path="org.eclipse.buildship.core.gradleclasspathcontainer"/>
|
||||||
<attributes>
|
|
||||||
<attribute name="org.eclipse.jst.component.dependency" value="/WEB-INF/lib"/>
|
|
||||||
</attributes>
|
|
||||||
</classpathentry>
|
|
||||||
<classpathentry kind="src" path="bin/generated-sources/annotations">
|
<classpathentry kind="src" path="bin/generated-sources/annotations">
|
||||||
<attributes>
|
<attributes>
|
||||||
<attribute name="optional" value="true"/>
|
<attribute name="optional" value="true"/>
|
||||||
|
|||||||
@@ -1,13 +1,13 @@
|
|||||||
arguments=
|
arguments=--init-script C\:\\Users\\bd091\\AppData\\Roaming\\Antigravity\\User\\globalStorage\\redhat.java\\1.50.0\\config_win\\org.eclipse.osgi\\58\\0\\.cp\\gradle\\init\\init.gradle --init-script C\:\\Users\\bd091\\AppData\\Roaming\\Antigravity\\User\\globalStorage\\redhat.java\\1.50.0\\config_win\\org.eclipse.osgi\\58\\0\\.cp\\gradle\\protobuf\\init.gradle
|
||||||
auto.sync=false
|
auto.sync=false
|
||||||
build.scans.enabled=false
|
build.scans.enabled=false
|
||||||
connection.gradle.distribution=GRADLE_DISTRIBUTION(WRAPPER)
|
connection.gradle.distribution=GRADLE_DISTRIBUTION(WRAPPER)
|
||||||
connection.project.dir=
|
connection.project.dir=
|
||||||
eclipse.preferences.version=1
|
eclipse.preferences.version=1
|
||||||
gradle.user.home=
|
gradle.user.home=
|
||||||
java.home=
|
java.home=C\:/Program Files/Java/jdk-21
|
||||||
jvm.arguments=
|
jvm.arguments=
|
||||||
offline.mode=false
|
offline.mode=false
|
||||||
override.workspace.settings=false
|
override.workspace.settings=true
|
||||||
show.console.view=false
|
show.console.view=true
|
||||||
show.executions.view=false
|
show.executions.view=true
|
||||||
|
|||||||
11
.settings/org.eclipse.jdt.core.prefs
Normal file
11
.settings/org.eclipse.jdt.core.prefs
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
eclipse.preferences.version=1
|
||||||
|
org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore
|
||||||
|
org.eclipse.jdt.core.compiler.annotation.nonnull=javax.annotation.Nonnull
|
||||||
|
org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=javax.annotation.ParametersAreNonnullByDefault
|
||||||
|
org.eclipse.jdt.core.compiler.annotation.nullable=javax.annotation.Nullable
|
||||||
|
org.eclipse.jdt.core.compiler.annotation.nullanalysis=enabled
|
||||||
|
org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=warning
|
||||||
|
org.eclipse.jdt.core.compiler.problem.nullReference=warning
|
||||||
|
org.eclipse.jdt.core.compiler.problem.nullSpecViolation=warning
|
||||||
|
org.eclipse.jdt.core.compiler.problem.potentialNullReference=warning
|
||||||
|
org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=enabled
|
||||||
4
.vscode/settings.json
vendored
Normal file
4
.vscode/settings.json
vendored
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
{
|
||||||
|
"java.configuration.updateBuildConfiguration": "interactive",
|
||||||
|
"java.compile.nullAnalysis.mode": "automatic"
|
||||||
|
}
|
||||||
@@ -3,10 +3,9 @@ package com.madeu.crm.kiosk.ctrl;
|
|||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Controller;
|
|
||||||
import org.springframework.ui.Model;
|
|
||||||
import org.springframework.web.bind.annotation.GetMapping;
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
import org.springframework.web.bind.annotation.PostMapping;
|
import org.springframework.web.bind.annotation.PostMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
import org.springframework.web.servlet.ModelAndView;
|
import org.springframework.web.servlet.ModelAndView;
|
||||||
|
|
||||||
import com.madeu.constants.Constants;
|
import com.madeu.constants.Constants;
|
||||||
@@ -21,7 +20,7 @@ import jakarta.servlet.http.HttpServletResponse;
|
|||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
|
||||||
@Slf4j
|
@Slf4j
|
||||||
@Controller
|
@RestController
|
||||||
public class KioskController extends ManagerDraftAction {
|
public class KioskController extends ManagerDraftAction {
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
@@ -30,232 +29,189 @@ public class KioskController extends ManagerDraftAction {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private WebLogHistoryService webLogHistoryService;
|
private WebLogHistoryService webLogHistoryService;
|
||||||
|
|
||||||
|
// ==================== 뷰 반환 메서드 (ModelAndView) ====================
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 키오스크 메인화면 화면으로 이동.
|
* 키오스크 메인화면 화면으로 이동.
|
||||||
*
|
|
||||||
* @param request
|
|
||||||
* @param response
|
|
||||||
* @return
|
|
||||||
*/
|
*/
|
||||||
@GetMapping("/kiosk/MainIntro.do")
|
@GetMapping("/kiosk/MainIntro.do")
|
||||||
public String selectMainIntro(HttpServletRequest request, HttpServletResponse response, Model model) {
|
public ModelAndView selectMainIntro(HttpServletRequest request, HttpServletResponse response) {
|
||||||
log.debug("KioskController selectMainIntro START");
|
log.debug("KioskController selectMainIntro START");
|
||||||
|
|
||||||
log.debug("KioskController selectMainIntro END");
|
log.debug("KioskController selectMainIntro END");
|
||||||
return "/kiosk/consultation";
|
return new ModelAndView("/kiosk/consultation");
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 키오스크 신규 환자 화면 화면으로 이동.
|
* 키오스크 신규 환자 화면으로 이동.
|
||||||
*
|
|
||||||
* @param request
|
|
||||||
* @param response
|
|
||||||
* @return
|
|
||||||
*/
|
*/
|
||||||
@GetMapping("/kiosk/NewPatientIntro.do")
|
@GetMapping("/kiosk/NewPatientIntro.do")
|
||||||
public String NewPatientIntro(HttpServletRequest request, HttpServletResponse response, Model model) {
|
public ModelAndView NewPatientIntro(HttpServletRequest request, HttpServletResponse response) {
|
||||||
log.debug("KioskController NewPatientIntro START");
|
log.debug("KioskController NewPatientIntro START");
|
||||||
|
|
||||||
log.debug("KioskController NewPatientIntro END");
|
log.debug("KioskController NewPatientIntro END");
|
||||||
return "/kiosk/new-patient";
|
return new ModelAndView("/kiosk/new-patient");
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 키오스크 기존 환자 화면 화면으로 이동.
|
* 키오스크 기존 환자 화면으로 이동.
|
||||||
*
|
|
||||||
* @param request
|
|
||||||
* @param response
|
|
||||||
* @return
|
|
||||||
*/
|
*/
|
||||||
@GetMapping("/kiosk/ExistPatientIntro.do")
|
@GetMapping("/kiosk/ExistPatientIntro.do")
|
||||||
public String ExistPatientIntro(HttpServletRequest request, HttpServletResponse response, Model model) {
|
public ModelAndView ExistPatientIntro(HttpServletRequest request, HttpServletResponse response) {
|
||||||
log.debug("KioskController ExistPatientIntro START");
|
log.debug("KioskController ExistPatientIntro START");
|
||||||
|
|
||||||
log.debug("KioskController ExistPatientIntro END");
|
log.debug("KioskController ExistPatientIntro END");
|
||||||
return "/kiosk/existing-patient";
|
return new ModelAndView("/kiosk/existing-patient");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 키오스크 동의서 화면으로 이동.
|
||||||
|
*/
|
||||||
|
@GetMapping("/kiosk/agreement.do")
|
||||||
|
public ModelAndView agreementPage(HttpServletRequest request, HttpServletResponse response) {
|
||||||
|
log.debug("KioskController agreementPage START");
|
||||||
|
log.debug("KioskController agreementPage END");
|
||||||
|
return new ModelAndView("/kiosk/agreement");
|
||||||
|
}
|
||||||
|
|
||||||
|
// ==================== API 메서드 (JSON 반환) ====================
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 진료 정보 리스트 조회 (option)
|
* 진료 정보 리스트 조회 (option)
|
||||||
*
|
|
||||||
* @param request
|
|
||||||
* @param response
|
|
||||||
* @return
|
|
||||||
*/
|
*/
|
||||||
@PostMapping("/kiosk/getTreatmentOptionList.do")
|
@PostMapping("/kiosk/getTreatmentOptionList.do")
|
||||||
public ModelAndView getTreatmentOptionList(HttpServletRequest request, HttpServletResponse response) {
|
public HashMap<String, Object> getTreatmentOptionList(HttpServletRequest request, HttpServletResponse response) {
|
||||||
log.debug("KioskController getTreatmentOptionList START");
|
log.debug("KioskController getTreatmentOptionList START");
|
||||||
|
|
||||||
HashMap<String, Object> paramMap = HttpUtil.getParameterMap(request);
|
HashMap<String, Object> paramMap = HttpUtil.getParameterMap(request);
|
||||||
HashMap<String, Object> map = new HashMap<String, Object>();
|
HashMap<String, Object> map = new HashMap<String, Object>();
|
||||||
|
|
||||||
try{
|
try {
|
||||||
map = kioskService.getTreatmentOptionList(paramMap);
|
map = kioskService.getTreatmentOptionList(paramMap);
|
||||||
}
|
} catch (Exception e) {
|
||||||
catch (Exception e) {
|
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
return null;
|
map.put("msgCode", Constants.FAIL);
|
||||||
}
|
map.put("msgDesc", "서버 오류가 발생했습니다.");
|
||||||
finally {
|
} finally {
|
||||||
if(Constants.OK == map.get("msgCode")) {
|
if (Constants.OK != map.get("msgCode")) {
|
||||||
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
map.put("msgCode", Constants.FAIL);
|
map.put("msgCode", Constants.FAIL);
|
||||||
map.put("success", false);
|
map.put("success", false);
|
||||||
if(null == map.get("msgDesc") || ("").equals(map.get("msgDesc"))) {
|
if (null == map.get("msgDesc") || ("").equals(map.get("msgDesc"))) {
|
||||||
map.put("msgDesc","정상적으로 수행되지 않았습니다. 관리자에게 문의하시기 바랍니다.");
|
map.put("msgDesc", "정상적으로 수행되지 않았습니다. 관리자에게 문의하시기 바랍니다.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
log.debug("KioskController getTreatmentOptionList END");
|
log.debug("KioskController getTreatmentOptionList END");
|
||||||
return HttpUtil.makeHashToJsonModelAndView(map);
|
return map;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 병원 기타정보 카테고리 타입 조회
|
* 병원 기타정보 카테고리 타입 조회
|
||||||
*
|
|
||||||
* @param request
|
|
||||||
* @param response
|
|
||||||
* @return
|
|
||||||
*/
|
*/
|
||||||
@PostMapping("/kiosk/getCategoryList.do")
|
@PostMapping("/kiosk/getCategoryList.do")
|
||||||
public ModelAndView getCategoryList(HttpServletRequest request, HttpServletResponse response) {
|
public HashMap<String, Object> getCategoryList(HttpServletRequest request, HttpServletResponse response) {
|
||||||
|
|
||||||
log.debug("KioskController getCategoryList START");
|
log.debug("KioskController getCategoryList START");
|
||||||
|
|
||||||
HashMap<String, Object> paramMap = HttpUtil.getParameterMap(request);
|
HashMap<String, Object> paramMap = HttpUtil.getParameterMap(request);
|
||||||
HashMap<String, Object> map = new HashMap<String, Object>();
|
HashMap<String, Object> map = new HashMap<String, Object>();
|
||||||
|
|
||||||
try{
|
try {
|
||||||
map = kioskService.getCategoryList(paramMap);
|
map = kioskService.getCategoryList(paramMap);
|
||||||
}
|
} catch (Exception e) {
|
||||||
catch (Exception e) {
|
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
return null;
|
map.put("msgCode", Constants.FAIL);
|
||||||
}
|
map.put("msgDesc", "서버 오류가 발생했습니다.");
|
||||||
finally {
|
} finally {
|
||||||
if(Constants.OK == map.get("msgCode")) {
|
if (Constants.OK != map.get("msgCode")) {
|
||||||
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
map.put("msgCode", Constants.FAIL);
|
map.put("msgCode", Constants.FAIL);
|
||||||
map.put("success", false);
|
map.put("success", false);
|
||||||
if(null == map.get("msgDesc") || ("").equals(map.get("msgDesc"))) {
|
if (null == map.get("msgDesc") || ("").equals(map.get("msgDesc"))) {
|
||||||
map.put("msgDesc","정상적으로 수행되지 않았습니다. 관리자에게 문의하시기 바랍니다.");
|
map.put("msgDesc", "정상적으로 수행되지 않았습니다. 관리자에게 문의하시기 바랍니다.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
log.debug("KioskController getCategoryList END");
|
log.debug("KioskController getCategoryList END");
|
||||||
return HttpUtil.makeHashToJsonModelAndView(map);
|
return map;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 병원 기타정보 카테고리 타입 조회
|
* 병원 기타정보 카테고리 아이템 조회
|
||||||
*
|
|
||||||
* @param request
|
|
||||||
* @param response
|
|
||||||
* @return
|
|
||||||
*/
|
*/
|
||||||
@PostMapping("/kiosk/getCategoryItem.do")
|
@PostMapping("/kiosk/getCategoryItem.do")
|
||||||
public ModelAndView getCategoryItem(HttpServletRequest request, HttpServletResponse response) {
|
public HashMap<String, Object> getCategoryItem(HttpServletRequest request, HttpServletResponse response) {
|
||||||
|
|
||||||
log.debug("KioskController getCategoryItem START");
|
log.debug("KioskController getCategoryItem START");
|
||||||
|
|
||||||
HashMap<String, Object> paramMap = HttpUtil.getParameterMap(request);
|
HashMap<String, Object> paramMap = HttpUtil.getParameterMap(request);
|
||||||
HashMap<String, Object> map = new HashMap<String, Object>();
|
HashMap<String, Object> map = new HashMap<String, Object>();
|
||||||
|
|
||||||
try{
|
try {
|
||||||
map = kioskService.getCategoryItem(paramMap);
|
map = kioskService.getCategoryItem(paramMap);
|
||||||
}
|
} catch (Exception e) {
|
||||||
catch (Exception e) {
|
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
return null;
|
map.put("msgCode", Constants.FAIL);
|
||||||
}
|
map.put("msgDesc", "서버 오류가 발생했습니다.");
|
||||||
finally {
|
} finally {
|
||||||
if(Constants.OK == map.get("msgCode")) {
|
if (Constants.OK != map.get("msgCode")) {
|
||||||
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
map.put("msgCode", Constants.FAIL);
|
map.put("msgCode", Constants.FAIL);
|
||||||
map.put("success", false);
|
map.put("success", false);
|
||||||
if(null == map.get("msgDesc") || ("").equals(map.get("msgDesc"))) {
|
if (null == map.get("msgDesc") || ("").equals(map.get("msgDesc"))) {
|
||||||
map.put("msgDesc","정상적으로 수행되지 않았습니다. 관리자에게 문의하시기 바랍니다.");
|
map.put("msgDesc", "정상적으로 수행되지 않았습니다. 관리자에게 문의하시기 바랍니다.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
log.debug("KioskController getCategoryItem END");
|
log.debug("KioskController getCategoryItem END");
|
||||||
return HttpUtil.makeHashToJsonModelAndView(map);
|
return map;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 고객 정보 리스트 조회 (option)
|
* 고객 정보 리스트 조회 (option)
|
||||||
* 예약등록 팝업
|
|
||||||
* @param request
|
|
||||||
* @param response
|
|
||||||
* @return
|
|
||||||
*/
|
*/
|
||||||
@PostMapping("/kiosk/getUserOptionList.do")
|
@PostMapping("/kiosk/getUserOptionList.do")
|
||||||
public ModelAndView getUserOptionList(HttpServletRequest request, HttpServletResponse response) {
|
public HashMap<String, Object> getUserOptionList(HttpServletRequest request, HttpServletResponse response) {
|
||||||
|
|
||||||
log.debug("KioskController getUserOptionList START");
|
log.debug("KioskController getUserOptionList START");
|
||||||
|
|
||||||
HashMap<String, Object> paramMap = HttpUtil.getParameterMap(request);
|
HashMap<String, Object> paramMap = HttpUtil.getParameterMap(request);
|
||||||
HashMap<String, Object> map = new HashMap<String, Object>();
|
HashMap<String, Object> map = new HashMap<String, Object>();
|
||||||
|
|
||||||
try{
|
try {
|
||||||
map = kioskService.getUserOptionList(paramMap);
|
map = kioskService.getUserOptionList(paramMap);
|
||||||
}
|
} catch (Exception e) {
|
||||||
catch (Exception e) {
|
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
return null;
|
map.put("msgCode", Constants.FAIL);
|
||||||
}
|
map.put("msgDesc", "서버 오류가 발생했습니다.");
|
||||||
finally {
|
} finally {
|
||||||
if(Constants.OK == map.get("msgCode")) {
|
if (Constants.OK != map.get("msgCode")) {
|
||||||
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
map.put("msgCode", Constants.FAIL);
|
map.put("msgCode", Constants.FAIL);
|
||||||
map.put("success", false);
|
map.put("success", false);
|
||||||
if(null == map.get("msgDesc") || ("").equals(map.get("msgDesc"))) {
|
if (null == map.get("msgDesc") || ("").equals(map.get("msgDesc"))) {
|
||||||
map.put("msgDesc","정상적으로 수행되지 않았습니다. 관리자에게 문의하시기 바랍니다.");
|
map.put("msgDesc", "정상적으로 수행되지 않았습니다. 관리자에게 문의하시기 바랍니다.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
log.debug("KioskController getUserOptionList END");
|
log.debug("KioskController getUserOptionList END");
|
||||||
return HttpUtil.makeHashToJsonModelAndView(map);
|
return map;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 고객 정보 리스트 조회 (option)
|
* 고객 등록
|
||||||
* 예약등록 팝업
|
|
||||||
* @param request
|
|
||||||
* @param response
|
|
||||||
* @return
|
|
||||||
*/
|
*/
|
||||||
@PostMapping("/kiosk/putUser.do")
|
@PostMapping("/kiosk/putUser.do")
|
||||||
public ModelAndView putUser(HttpServletRequest request, HttpServletResponse response) {
|
public HashMap<String, Object> putUser(HttpServletRequest request, HttpServletResponse response) {
|
||||||
|
|
||||||
log.debug("KioskController putUser START");
|
log.debug("KioskController putUser START");
|
||||||
|
|
||||||
HashMap<String, Object> paramMap = HttpUtil.getParameterMap(request);
|
HashMap<String, Object> paramMap = HttpUtil.getParameterMap(request);
|
||||||
HashMap<String, Object> map = new HashMap<String, Object>();
|
HashMap<String, Object> map = new HashMap<String, Object>();
|
||||||
|
|
||||||
StringBuffer errorMsg = new StringBuffer();
|
StringBuffer errorMsg = new StringBuffer();
|
||||||
try{
|
try {
|
||||||
paramMap.put("loginMemberId", "customer");
|
paramMap.put("loginMemberId", "customer");
|
||||||
paramMap.put("regId", "customer");
|
paramMap.put("regId", "customer");
|
||||||
paramMap.put("modId", "customer");
|
paramMap.put("modId", "customer");
|
||||||
map = kioskService.putUser(paramMap);
|
map = kioskService.putUser(paramMap);
|
||||||
}
|
} catch (Exception e) {
|
||||||
catch (Exception e) {
|
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
return null;
|
map.put("msgCode", Constants.FAIL);
|
||||||
}
|
map.put("msgDesc", "서버 오류가 발생했습니다.");
|
||||||
finally {
|
errorMsg.append(e.getMessage());
|
||||||
if (Constants.OK == map.get("msgCode")) {
|
} finally {
|
||||||
|
if (Constants.OK != map.get("msgCode")) {
|
||||||
} else {
|
|
||||||
map.put("msgCode", Constants.FAIL);
|
map.put("msgCode", Constants.FAIL);
|
||||||
map.put("success", false);
|
map.put("success", false);
|
||||||
if (null == map.get("msgDesc") || ("").equals(map.get("msgDesc"))) {
|
if (null == map.get("msgDesc") || ("").equals(map.get("msgDesc"))) {
|
||||||
@@ -263,6 +219,7 @@ public class KioskController extends ManagerDraftAction {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 로그 기록
|
||||||
try {
|
try {
|
||||||
HashMap<String, Object> visitLogParamMap = RequestLogUtil.getVisitLogParameterMap(request);
|
HashMap<String, Object> visitLogParamMap = RequestLogUtil.getVisitLogParameterMap(request);
|
||||||
HashMap<String, Object> insertMap = new HashMap<String, Object>();
|
HashMap<String, Object> insertMap = new HashMap<String, Object>();
|
||||||
@@ -275,7 +232,8 @@ public class KioskController extends ManagerDraftAction {
|
|||||||
insertMap.put("requestValue", String.valueOf(paramMap));
|
insertMap.put("requestValue", String.valueOf(paramMap));
|
||||||
insertMap.put("responseValue", String.valueOf(map));
|
insertMap.put("responseValue", String.valueOf(map));
|
||||||
insertMap.put("tId", map.get("tId"));
|
insertMap.put("tId", map.get("tId"));
|
||||||
if (("").equals(String.valueOf(errorMsg)) || null == (String.valueOf(errorMsg)) || 0 == String.valueOf(errorMsg).length()) {
|
if (("").equals(String.valueOf(errorMsg)) || null == (String.valueOf(errorMsg))
|
||||||
|
|| 0 == String.valueOf(errorMsg).length()) {
|
||||||
insertMap.put("resultCode", "SUCCESS");
|
insertMap.put("resultCode", "SUCCESS");
|
||||||
} else {
|
} else {
|
||||||
insertMap.put("resultCode", "ERROR");
|
insertMap.put("resultCode", "ERROR");
|
||||||
@@ -288,249 +246,183 @@ public class KioskController extends ManagerDraftAction {
|
|||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
log.debug("KioskController getUserOptionList END");
|
log.debug("KioskController putUser END");
|
||||||
return HttpUtil.makeHashToJsonModelAndView(map);
|
return map;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 고객 정보 조회
|
* 고객 정보 조회
|
||||||
* 바로접수 팝업
|
|
||||||
* @param request
|
|
||||||
* @param response
|
|
||||||
* @return
|
|
||||||
*/
|
*/
|
||||||
@PostMapping("/kiosk/getUser.do")
|
@PostMapping("/kiosk/getUser.do")
|
||||||
public ModelAndView getUser(HttpServletRequest request, HttpServletResponse response) {
|
public HashMap<String, Object> getUser(HttpServletRequest request, HttpServletResponse response) {
|
||||||
|
|
||||||
log.debug("KioskController getUser START");
|
log.debug("KioskController getUser START");
|
||||||
|
|
||||||
HashMap<String, Object> paramMap = HttpUtil.getParameterMap(request);
|
HashMap<String, Object> paramMap = HttpUtil.getParameterMap(request);
|
||||||
HashMap<String, Object> map = new HashMap<String, Object>();
|
HashMap<String, Object> map = new HashMap<String, Object>();
|
||||||
|
|
||||||
try{
|
try {
|
||||||
map = kioskService.getUser(paramMap);
|
map = kioskService.getUser(paramMap);
|
||||||
}
|
} catch (Exception e) {
|
||||||
catch (Exception e) {
|
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
return null;
|
map.put("msgCode", Constants.FAIL);
|
||||||
}
|
map.put("msgDesc", "서버 오류가 발생했습니다.");
|
||||||
finally {
|
} finally {
|
||||||
if(Constants.OK == map.get("msgCode")) {
|
if (Constants.OK != map.get("msgCode")) {
|
||||||
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
map.put("msgCode", Constants.FAIL);
|
map.put("msgCode", Constants.FAIL);
|
||||||
map.put("success", false);
|
map.put("success", false);
|
||||||
if(null == map.get("msgDesc") || ("").equals(map.get("msgDesc"))) {
|
if (null == map.get("msgDesc") || ("").equals(map.get("msgDesc"))) {
|
||||||
map.put("msgDesc","정상적으로 수행되지 않았습니다. 관리자에게 문의하시기 바랍니다.");
|
map.put("msgDesc", "정상적으로 수행되지 않았습니다. 관리자에게 문의하시기 바랍니다.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
log.debug("KioskController getUser END");
|
log.debug("KioskController getUser END");
|
||||||
return HttpUtil.makeHashToJsonModelAndView(map);
|
return map;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 근무 시간 조회
|
* 근무 시간 조회
|
||||||
* 바로접수 팝업
|
|
||||||
* @param request
|
|
||||||
* @param response
|
|
||||||
* @return
|
|
||||||
*/
|
*/
|
||||||
@PostMapping("/kiosk/getWorkTime.do")
|
@PostMapping("/kiosk/getWorkTime.do")
|
||||||
public ModelAndView getWorkTime(HttpServletRequest request, HttpServletResponse response) {
|
public HashMap<String, Object> getWorkTime(HttpServletRequest request, HttpServletResponse response) {
|
||||||
|
|
||||||
log.debug("KioskController getWorkTime START");
|
log.debug("KioskController getWorkTime START");
|
||||||
|
|
||||||
HashMap<String, Object> paramMap = HttpUtil.getParameterMap(request);
|
HashMap<String, Object> paramMap = HttpUtil.getParameterMap(request);
|
||||||
HashMap<String, Object> map = new HashMap<String, Object>();
|
HashMap<String, Object> map = new HashMap<String, Object>();
|
||||||
|
|
||||||
try{
|
try {
|
||||||
map = kioskService.getWorkTime(paramMap);
|
map = kioskService.getWorkTime(paramMap);
|
||||||
}
|
} catch (Exception e) {
|
||||||
catch (Exception e) {
|
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
return null;
|
map.put("msgCode", Constants.FAIL);
|
||||||
}
|
map.put("msgDesc", "서버 오류가 발생했습니다.");
|
||||||
finally {
|
} finally {
|
||||||
if(Constants.OK == map.get("msgCode")) {
|
if (Constants.OK != map.get("msgCode")) {
|
||||||
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
map.put("msgCode", Constants.FAIL);
|
map.put("msgCode", Constants.FAIL);
|
||||||
map.put("success", false);
|
map.put("success", false);
|
||||||
if(null == map.get("msgDesc") || ("").equals(map.get("msgDesc"))) {
|
if (null == map.get("msgDesc") || ("").equals(map.get("msgDesc"))) {
|
||||||
map.put("msgDesc","정상적으로 수행되지 않았습니다. 관리자에게 문의하시기 바랍니다.");
|
map.put("msgDesc", "정상적으로 수행되지 않았습니다. 관리자에게 문의하시기 바랍니다.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
log.debug("KioskController getWorkTime END");
|
log.debug("KioskController getWorkTime END");
|
||||||
return HttpUtil.makeHashToJsonModelAndView(map);
|
return map;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 진료 시술 조회
|
* 진료 시술 조회
|
||||||
* 바로접수 팝업
|
|
||||||
* @param request
|
|
||||||
* @param response
|
|
||||||
* @return
|
|
||||||
*/
|
*/
|
||||||
@PostMapping("/kiosk/getTreatmentProcedureOptionList.do")
|
@PostMapping("/kiosk/getTreatmentProcedureOptionList.do")
|
||||||
public ModelAndView getTreatmentProcedureOptionList(HttpServletRequest request, HttpServletResponse response) {
|
public HashMap<String, Object> getTreatmentProcedureOptionList(HttpServletRequest request,
|
||||||
|
HttpServletResponse response) {
|
||||||
log.debug("KioskController getTreatmentProcedureOptionList START");
|
log.debug("KioskController getTreatmentProcedureOptionList START");
|
||||||
|
|
||||||
HashMap<String, Object> paramMap = HttpUtil.getParameterMap(request);
|
HashMap<String, Object> paramMap = HttpUtil.getParameterMap(request);
|
||||||
HashMap<String, Object> map = new HashMap<String, Object>();
|
HashMap<String, Object> map = new HashMap<String, Object>();
|
||||||
|
|
||||||
try{
|
try {
|
||||||
map = kioskService.getTreatmentProcedureOptionList(paramMap);
|
map = kioskService.getTreatmentProcedureOptionList(paramMap);
|
||||||
}
|
} catch (Exception e) {
|
||||||
catch (Exception e) {
|
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
return null;
|
map.put("msgCode", Constants.FAIL);
|
||||||
}
|
map.put("msgDesc", "서버 오류가 발생했습니다.");
|
||||||
finally {
|
} finally {
|
||||||
if(Constants.OK == map.get("msgCode")) {
|
if (Constants.OK != map.get("msgCode")) {
|
||||||
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
map.put("msgCode", Constants.FAIL);
|
map.put("msgCode", Constants.FAIL);
|
||||||
map.put("success", false);
|
map.put("success", false);
|
||||||
if(null == map.get("msgDesc") || ("").equals(map.get("msgDesc"))) {
|
if (null == map.get("msgDesc") || ("").equals(map.get("msgDesc"))) {
|
||||||
map.put("msgDesc","정상적으로 수행되지 않았습니다. 관리자에게 문의하시기 바랍니다.");
|
map.put("msgDesc", "정상적으로 수행되지 않았습니다. 관리자에게 문의하시기 바랍니다.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
log.debug("KioskController getTreatmentProcedureOptionList END");
|
log.debug("KioskController getTreatmentProcedureOptionList END");
|
||||||
return HttpUtil.makeHashToJsonModelAndView(map);
|
return map;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 해당 시술 닥터 및 해당과 상담자 조회 (List, option)
|
* 해당 시술 닥터 및 해당과 상담자 조회
|
||||||
*
|
|
||||||
* @param request
|
|
||||||
* @param response
|
|
||||||
* @return
|
|
||||||
*/
|
*/
|
||||||
@PostMapping("/kiosk/getMemberDoctorConsultingOptionList.do")
|
@PostMapping("/kiosk/getMemberDoctorConsultingOptionList.do")
|
||||||
public ModelAndView getMemberDoctorConsultingOptionList(HttpServletRequest request, HttpServletResponse response) {
|
public HashMap<String, Object> getMemberDoctorConsultingOptionList(HttpServletRequest request,
|
||||||
|
HttpServletResponse response) {
|
||||||
log.debug("KioskController getMemberDoctorConsultingOptionList START");
|
log.debug("KioskController getMemberDoctorConsultingOptionList START");
|
||||||
|
|
||||||
HashMap<String, Object> paramMap = HttpUtil.getParameterMap(request);
|
HashMap<String, Object> paramMap = HttpUtil.getParameterMap(request);
|
||||||
HashMap<String, Object> map = new HashMap<String, Object>();
|
HashMap<String, Object> map = new HashMap<String, Object>();
|
||||||
|
|
||||||
try{
|
try {
|
||||||
map = kioskService.getMemberDoctorConsultingOptionList(paramMap);
|
map = kioskService.getMemberDoctorConsultingOptionList(paramMap);
|
||||||
}
|
} catch (Exception e) {
|
||||||
catch (Exception e) {
|
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
return null;
|
map.put("msgCode", Constants.FAIL);
|
||||||
}
|
map.put("msgDesc", "서버 오류가 발생했습니다.");
|
||||||
finally {
|
} finally {
|
||||||
if(Constants.OK == map.get("msgCode")) {
|
if (Constants.OK != map.get("msgCode")) {
|
||||||
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
map.put("msgCode", Constants.FAIL);
|
map.put("msgCode", Constants.FAIL);
|
||||||
map.put("success", false);
|
map.put("success", false);
|
||||||
if(null == map.get("msgDesc") || ("").equals(map.get("msgDesc"))) {
|
if (null == map.get("msgDesc") || ("").equals(map.get("msgDesc"))) {
|
||||||
map.put("msgDesc","정상적으로 수행되지 않았습니다. 관리자에게 문의하시기 바랍니다.");
|
map.put("msgDesc", "정상적으로 수행되지 않았습니다. 관리자에게 문의하시기 바랍니다.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
log.debug("KioskController getMemberDoctorConsultingOptionList END");
|
log.debug("KioskController getMemberDoctorConsultingOptionList END");
|
||||||
return HttpUtil.makeHashToJsonModelAndView(map);
|
return map;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 직원 정보 리스트 조회
|
* 직원 정보 리스트 조회
|
||||||
*
|
|
||||||
* @param request
|
|
||||||
* @param response
|
|
||||||
* @return
|
|
||||||
*/
|
*/
|
||||||
@PostMapping("/kiosk/getMemberList.do")
|
@PostMapping("/kiosk/getMemberList.do")
|
||||||
public ModelAndView getMemberList(HttpServletRequest request, HttpServletResponse response) {
|
public HashMap<String, Object> getMemberList(HttpServletRequest request, HttpServletResponse response) {
|
||||||
|
|
||||||
log.debug("KioskController getMemberList START");
|
log.debug("KioskController getMemberList START");
|
||||||
|
|
||||||
HashMap<String, Object> paramMap = HttpUtil.getParameterMap(request);
|
HashMap<String, Object> paramMap = HttpUtil.getParameterMap(request);
|
||||||
HashMap<String, Object> map = new HashMap<String, Object>();
|
HashMap<String, Object> map = new HashMap<String, Object>();
|
||||||
|
|
||||||
try{
|
try {
|
||||||
map = kioskService.getMemberList(paramMap);
|
map = kioskService.getMemberList(paramMap);
|
||||||
}
|
} catch (Exception e) {
|
||||||
catch (Exception e) {
|
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
return null;
|
map.put("msgCode", Constants.FAIL);
|
||||||
}
|
map.put("msgDesc", "서버 오류가 발생했습니다.");
|
||||||
finally {
|
} finally {
|
||||||
if(Constants.OK == map.get("msgCode")) {
|
if (Constants.OK != map.get("msgCode")) {
|
||||||
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
map.put("msgCode", Constants.FAIL);
|
map.put("msgCode", Constants.FAIL);
|
||||||
map.put("success", false);
|
map.put("success", false);
|
||||||
if(null == map.get("msgDesc") || ("").equals(map.get("msgDesc"))) {
|
if (null == map.get("msgDesc") || ("").equals(map.get("msgDesc"))) {
|
||||||
map.put("msgDesc","정상적으로 수행되지 않았습니다. 관리자에게 문의하시기 바랍니다.");
|
map.put("msgDesc", "정상적으로 수행되지 않았습니다. 관리자에게 문의하시기 바랍니다.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
log.debug("KioskController getMemberList END");
|
log.debug("KioskController getMemberList END");
|
||||||
return HttpUtil.makeHashToJsonModelAndView(map);
|
return map;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 고객 - 1년간 진료내역 조회 (수납완료건) (List, option)
|
* 고객 - 1년간 진료내역 조회 (수납완료건)
|
||||||
*
|
|
||||||
* @param request
|
|
||||||
* @param response
|
|
||||||
* @return
|
|
||||||
*/
|
*/
|
||||||
@PostMapping("/kiosk/getReserveUserOptionList.do")
|
@PostMapping("/kiosk/getReserveUserOptionList.do")
|
||||||
public ModelAndView getReserveUserOptionList(HttpServletRequest request, HttpServletResponse response) {
|
public HashMap<String, Object> getReserveUserOptionList(HttpServletRequest request, HttpServletResponse response) {
|
||||||
|
|
||||||
log.debug("KioskController getReserveUserOptionList START");
|
log.debug("KioskController getReserveUserOptionList START");
|
||||||
|
|
||||||
HashMap<String, Object> paramMap = HttpUtil.getParameterMap(request);
|
HashMap<String, Object> paramMap = HttpUtil.getParameterMap(request);
|
||||||
HashMap<String, Object> map = new HashMap<String, Object>();
|
HashMap<String, Object> map = new HashMap<String, Object>();
|
||||||
|
|
||||||
try{
|
try {
|
||||||
map = kioskService.getReserveUserOptionList(paramMap);
|
map = kioskService.getReserveUserOptionList(paramMap);
|
||||||
}
|
} catch (Exception e) {
|
||||||
catch (Exception e) {
|
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
return null;
|
map.put("msgCode", Constants.FAIL);
|
||||||
}
|
map.put("msgDesc", "서버 오류가 발생했습니다.");
|
||||||
finally {
|
} finally {
|
||||||
if(Constants.OK == map.get("msgCode")) {
|
if (Constants.OK != map.get("msgCode")) {
|
||||||
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
map.put("msgCode", Constants.FAIL);
|
map.put("msgCode", Constants.FAIL);
|
||||||
map.put("success", false);
|
map.put("success", false);
|
||||||
if(null == map.get("msgDesc") || ("").equals(map.get("msgDesc"))) {
|
if (null == map.get("msgDesc") || ("").equals(map.get("msgDesc"))) {
|
||||||
map.put("msgDesc","정상적으로 수행되지 않았습니다. 관리자에게 문의하시기 바랍니다.");
|
map.put("msgDesc", "정상적으로 수행되지 않았습니다. 관리자에게 문의하시기 바랍니다.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
log.debug("KioskController getReserveUserOptionList END");
|
log.debug("KioskController getReserveUserOptionList END");
|
||||||
return HttpUtil.makeHashToJsonModelAndView(map);
|
return map;
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 키오스크 동의서 화면으로 이동.
|
|
||||||
* @param request
|
|
||||||
* @param response
|
|
||||||
* @param model
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
@GetMapping("/kiosk/agreement.do")
|
|
||||||
public String agreementPage(HttpServletRequest request, HttpServletResponse response, Model model) {
|
|
||||||
log.debug("KioskController agreementPage START");
|
|
||||||
log.debug("KioskController agreementPage END");
|
|
||||||
return "/kiosk/agreement";
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -13,7 +13,7 @@ spring:
|
|||||||
password: apdlemdb12#$
|
password: apdlemdb12#$
|
||||||
|
|
||||||
thymeleaf:
|
thymeleaf:
|
||||||
cache: true
|
cache: false
|
||||||
|
|
||||||
file:
|
file:
|
||||||
upload-path: /nvme0n1/upload
|
upload-path: /nvme0n1/upload
|
||||||
|
|||||||
185
src/main/resources/static/css/kiosk/agreement.css
Normal file
185
src/main/resources/static/css/kiosk/agreement.css
Normal file
@@ -0,0 +1,185 @@
|
|||||||
|
/*
|
||||||
|
Agreement Page - Project Design System
|
||||||
|
Based on existing-patient.css
|
||||||
|
*/
|
||||||
|
@import url('https://fonts.googleapis.com/css2?family=Noto+Sans+KR:wght@300;400;500;700&display=swap');
|
||||||
|
|
||||||
|
:root {
|
||||||
|
--primary-color: #1B66C9;
|
||||||
|
--primary-hover: #1652a3;
|
||||||
|
--bg-color: #F8FBFF;
|
||||||
|
--card-bg: #ffffff;
|
||||||
|
--text-main: #494E53;
|
||||||
|
--text-sub: #777d85;
|
||||||
|
--border-color: #DDE2E8;
|
||||||
|
--input-bg: #FFFFFF;
|
||||||
|
|
||||||
|
--header-height: 60px;
|
||||||
|
--footer-height: 70px;
|
||||||
|
--input-height: 40px;
|
||||||
|
}
|
||||||
|
|
||||||
|
html,
|
||||||
|
body {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
height: 100%;
|
||||||
|
font-family: 'Pretendard', 'Noto Sans KR', sans-serif !important;
|
||||||
|
background-color: var(--bg-color);
|
||||||
|
overflow-y: auto;
|
||||||
|
color: var(--text-main);
|
||||||
|
}
|
||||||
|
|
||||||
|
.kiosk-container {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
min-height: 100vh;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.page-header {
|
||||||
|
height: var(--header-height);
|
||||||
|
background-color: var(--card-bg);
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
padding: 0 40px;
|
||||||
|
border-bottom: 1px solid var(--border-color);
|
||||||
|
flex-shrink: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.page-header .title {
|
||||||
|
font-size: 20px;
|
||||||
|
font-weight: 700;
|
||||||
|
color: var(--text-main);
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.page-body {
|
||||||
|
flex: 1;
|
||||||
|
padding: 24px;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.form-grid-layout {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: 350px 1fr;
|
||||||
|
/* Left sidebar for list, right for content */
|
||||||
|
gap: 20px;
|
||||||
|
width: 100%;
|
||||||
|
max-width: 1800px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.form-section-card {
|
||||||
|
background-color: var(--card-bg);
|
||||||
|
border-radius: 8px;
|
||||||
|
padding: 24px;
|
||||||
|
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.03);
|
||||||
|
border: 1px solid #EEF2F7;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 16px;
|
||||||
|
height: fit-content;
|
||||||
|
}
|
||||||
|
|
||||||
|
.section-title {
|
||||||
|
font-size: 16px;
|
||||||
|
font-weight: 700;
|
||||||
|
color: var(--primary-color);
|
||||||
|
margin-bottom: 8px;
|
||||||
|
border-bottom: 1px solid var(--border-color);
|
||||||
|
padding-bottom: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Agreement Content Area */
|
||||||
|
.agreement-content {
|
||||||
|
background: #fff;
|
||||||
|
border: 1px solid #eee;
|
||||||
|
padding: 20px;
|
||||||
|
border-radius: 4px;
|
||||||
|
min-height: 400px;
|
||||||
|
max-height: 600px;
|
||||||
|
overflow-y: auto;
|
||||||
|
font-size: 14px;
|
||||||
|
line-height: 1.6;
|
||||||
|
color: #333;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Signature Pad */
|
||||||
|
.signature-box {
|
||||||
|
border: 2px dashed #ccc;
|
||||||
|
background: #fafafa;
|
||||||
|
border-radius: 8px;
|
||||||
|
position: relative;
|
||||||
|
height: 200px;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.signature-box canvas {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
cursor: crosshair;
|
||||||
|
}
|
||||||
|
|
||||||
|
.signature-placeholder {
|
||||||
|
position: absolute;
|
||||||
|
top: 50%;
|
||||||
|
left: 50%;
|
||||||
|
transform: translate(-50%, -50%);
|
||||||
|
color: #ccc;
|
||||||
|
pointer-events: none;
|
||||||
|
font-weight: 700;
|
||||||
|
font-size: 24px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Form inputs */
|
||||||
|
input[type="text"],
|
||||||
|
.select_box {
|
||||||
|
width: 100%;
|
||||||
|
height: var(--input-height);
|
||||||
|
border: 1px solid var(--border-color);
|
||||||
|
border-radius: 4px;
|
||||||
|
padding: 0 12px;
|
||||||
|
font-size: 14px;
|
||||||
|
background-color: var(--input-bg);
|
||||||
|
box-sizing: border-box;
|
||||||
|
font-family: 'Pretendard', sans-serif;
|
||||||
|
}
|
||||||
|
|
||||||
|
.page-footer {
|
||||||
|
height: var(--footer-height);
|
||||||
|
background-color: var(--card-bg);
|
||||||
|
border-top: 1px solid var(--border-color);
|
||||||
|
display: flex;
|
||||||
|
justify-content: flex-end;
|
||||||
|
align-items: center;
|
||||||
|
padding: 0 40px;
|
||||||
|
gap: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
button {
|
||||||
|
height: 44px;
|
||||||
|
padding: 0 24px;
|
||||||
|
border-radius: 4px;
|
||||||
|
font-size: 14px;
|
||||||
|
font-weight: 500;
|
||||||
|
cursor: pointer;
|
||||||
|
border: none;
|
||||||
|
font-family: 'Pretendard', sans-serif;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cancel_btn {
|
||||||
|
background-color: #F0F2F5;
|
||||||
|
color: #494E53;
|
||||||
|
}
|
||||||
|
|
||||||
|
.registration_bth {
|
||||||
|
background-color: var(--primary-color);
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (max-width: 1199px) {
|
||||||
|
.form-grid-layout {
|
||||||
|
grid-template-columns: 1fr;
|
||||||
|
}
|
||||||
|
}
|
||||||
220
src/main/resources/static/css/kiosk/existing-patient.css
Normal file
220
src/main/resources/static/css/kiosk/existing-patient.css
Normal file
@@ -0,0 +1,220 @@
|
|||||||
|
/*
|
||||||
|
Existing Patient - Project Design System Check
|
||||||
|
Based on new-patient.css standard
|
||||||
|
*/
|
||||||
|
@import url('https://fonts.googleapis.com/css2?family=Noto+Sans+KR:wght@300;400;500;700&display=swap');
|
||||||
|
|
||||||
|
:root {
|
||||||
|
--primary-color: #1B66C9;
|
||||||
|
--primary-hover: #1652a3;
|
||||||
|
--bg-color: #F8FBFF;
|
||||||
|
--card-bg: #ffffff;
|
||||||
|
--text-main: #494E53;
|
||||||
|
--text-sub: #777d85;
|
||||||
|
--border-color: #DDE2E8;
|
||||||
|
--input-bg: #FFFFFF;
|
||||||
|
|
||||||
|
--header-height: 60px;
|
||||||
|
--footer-height: 70px;
|
||||||
|
--input-height: 40px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Base Setup */
|
||||||
|
html,
|
||||||
|
body {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
height: 100%;
|
||||||
|
font-family: 'Pretendard', 'Noto Sans KR', sans-serif !important;
|
||||||
|
background-color: var(--bg-color);
|
||||||
|
overflow-y: auto;
|
||||||
|
color: var(--text-main);
|
||||||
|
}
|
||||||
|
|
||||||
|
.kiosk-container {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
min-height: 100vh;
|
||||||
|
width: 100%;
|
||||||
|
background-color: var(--bg-color);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Header */
|
||||||
|
.page-header {
|
||||||
|
height: var(--header-height);
|
||||||
|
background-color: var(--card-bg);
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
padding: 0 40px;
|
||||||
|
border-bottom: 1px solid var(--border-color);
|
||||||
|
flex-shrink: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.page-header .title {
|
||||||
|
font-size: 20px;
|
||||||
|
font-weight: 700;
|
||||||
|
color: var(--text-main);
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Body */
|
||||||
|
.page-body {
|
||||||
|
flex: 1;
|
||||||
|
padding: 24px;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Grid Layout */
|
||||||
|
.form-grid-layout {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: repeat(3, 1fr);
|
||||||
|
gap: 20px;
|
||||||
|
width: 100%;
|
||||||
|
max-width: 1800px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Cards */
|
||||||
|
.form-section-card {
|
||||||
|
background-color: var(--card-bg);
|
||||||
|
border-radius: 8px;
|
||||||
|
padding: 24px;
|
||||||
|
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.03);
|
||||||
|
border: 1px solid #EEF2F7;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 16px;
|
||||||
|
height: fit-content;
|
||||||
|
}
|
||||||
|
|
||||||
|
.section-title {
|
||||||
|
font-size: 16px;
|
||||||
|
font-weight: 700;
|
||||||
|
color: var(--primary-color);
|
||||||
|
margin-bottom: 8px;
|
||||||
|
border-bottom: 1px solid var(--border-color);
|
||||||
|
padding-bottom: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Form Elements */
|
||||||
|
.form-row {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 6px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.form-row label {
|
||||||
|
font-size: 13px;
|
||||||
|
font-weight: 600;
|
||||||
|
color: var(--text-main);
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
input[type="text"],
|
||||||
|
input[type="date"],
|
||||||
|
.select_box {
|
||||||
|
width: 100%;
|
||||||
|
height: var(--input-height);
|
||||||
|
border: 1px solid var(--border-color);
|
||||||
|
border-radius: 4px;
|
||||||
|
padding: 0 12px;
|
||||||
|
font-size: 14px;
|
||||||
|
color: var(--text-main);
|
||||||
|
background-color: var(--input-bg);
|
||||||
|
box-sizing: border-box;
|
||||||
|
font-family: 'Pretendard', sans-serif;
|
||||||
|
}
|
||||||
|
|
||||||
|
input[readonly] {
|
||||||
|
background-color: #f9f9f9;
|
||||||
|
cursor: default;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Select Box Mockup */
|
||||||
|
.select_box {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
padding: 0;
|
||||||
|
cursor: pointer;
|
||||||
|
position: relative;
|
||||||
|
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6' viewBox='0 0 10 6'%3E%3Cpath fill='%23999' d='M5 6L0 0h10z'/%3E%3C/svg%3E");
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
background-position: right 12px center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select_box button.label {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
border: none;
|
||||||
|
background: transparent;
|
||||||
|
text-align: left;
|
||||||
|
padding: 0 30px 0 12px;
|
||||||
|
font-size: 14px;
|
||||||
|
color: var(--text-main);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Table Style for existing patient info */
|
||||||
|
.info-table {
|
||||||
|
width: 100%;
|
||||||
|
border-collapse: collapse;
|
||||||
|
margin-top: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-table th,
|
||||||
|
.info-table td {
|
||||||
|
padding: 10px;
|
||||||
|
text-align: left;
|
||||||
|
border-bottom: 1px solid #eee;
|
||||||
|
font-size: 14px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-table th {
|
||||||
|
color: var(--text-sub);
|
||||||
|
font-weight: 500;
|
||||||
|
width: 100px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-table td {
|
||||||
|
color: var(--text-main);
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Buttons */
|
||||||
|
.page-footer {
|
||||||
|
height: var(--footer-height);
|
||||||
|
background-color: var(--card-bg);
|
||||||
|
border-top: 1px solid var(--border-color);
|
||||||
|
display: flex;
|
||||||
|
justify-content: flex-end;
|
||||||
|
align-items: center;
|
||||||
|
padding: 0 40px;
|
||||||
|
gap: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
button {
|
||||||
|
height: 44px;
|
||||||
|
padding: 0 24px;
|
||||||
|
border-radius: 4px;
|
||||||
|
font-size: 14px;
|
||||||
|
font-weight: 500;
|
||||||
|
cursor: pointer;
|
||||||
|
border: none;
|
||||||
|
font-family: 'Pretendard', sans-serif;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cancel_btn {
|
||||||
|
background-color: #F0F2F5;
|
||||||
|
color: #494E53;
|
||||||
|
}
|
||||||
|
|
||||||
|
.registration_bth {
|
||||||
|
background-color: var(--primary-color);
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Responsive */
|
||||||
|
@media (max-width: 1199px) {
|
||||||
|
.form-grid-layout {
|
||||||
|
grid-template-columns: 1fr;
|
||||||
|
}
|
||||||
|
}
|
||||||
537
src/main/resources/static/css/kiosk/new-patient.css
Normal file
537
src/main/resources/static/css/kiosk/new-patient.css
Normal file
@@ -0,0 +1,537 @@
|
|||||||
|
/*
|
||||||
|
New Patient - Project Design System Applied
|
||||||
|
Font: Pretendard
|
||||||
|
Colors: Standard Project Blue (#1B66C9) & Gray (#494E53)
|
||||||
|
Layout: Compact 1080p Fit
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Font is loaded globally via head.html -> font.css, so just reference it */
|
||||||
|
|
||||||
|
:root {
|
||||||
|
--primary-color: #1B66C9;
|
||||||
|
/* Project Standard Blue */
|
||||||
|
--primary-hover: #1652a3;
|
||||||
|
--bg-color: #F8FBFF;
|
||||||
|
/* Project Standard Background */
|
||||||
|
--card-bg: #ffffff;
|
||||||
|
--text-main: #494E53;
|
||||||
|
/* Project Standard Text */
|
||||||
|
--text-sub: #777d85;
|
||||||
|
--border-color: #DDE2E8;
|
||||||
|
--input-bg: #FFFFFF;
|
||||||
|
|
||||||
|
/* Layout Variables */
|
||||||
|
--header-height: 60px;
|
||||||
|
--footer-height: 70px;
|
||||||
|
--input-height: 40px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Base Setup */
|
||||||
|
* {
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
html,
|
||||||
|
body {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
height: 100%;
|
||||||
|
font-family: 'Pretendard', 'Noto Sans KR', sans-serif !important;
|
||||||
|
background-color: var(--bg-color);
|
||||||
|
overflow-y: auto;
|
||||||
|
/* Prevent clip */
|
||||||
|
color: var(--text-main);
|
||||||
|
}
|
||||||
|
|
||||||
|
input,
|
||||||
|
button,
|
||||||
|
select,
|
||||||
|
textarea {
|
||||||
|
font-family: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Layout Container */
|
||||||
|
.new-patient-container {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
min-height: 100vh;
|
||||||
|
width: 100%;
|
||||||
|
background-color: var(--bg-color);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Header */
|
||||||
|
.page-header {
|
||||||
|
height: var(--header-height);
|
||||||
|
background-color: var(--card-bg);
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
padding: 0 40px;
|
||||||
|
border-bottom: 1px solid var(--border-color);
|
||||||
|
flex-shrink: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.page-header .title {
|
||||||
|
font-size: 20px;
|
||||||
|
font-weight: 700;
|
||||||
|
color: var(--text-main);
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Body Area */
|
||||||
|
.page-body {
|
||||||
|
flex: 1;
|
||||||
|
padding: 24px;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Grid Layout */
|
||||||
|
.form-grid-layout {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: repeat(3, 1fr);
|
||||||
|
/* Fixed 3 columns */
|
||||||
|
gap: 20px;
|
||||||
|
width: 100%;
|
||||||
|
max-width: 1800px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Cards */
|
||||||
|
.form-section-card {
|
||||||
|
background-color: var(--card-bg);
|
||||||
|
border-radius: 8px;
|
||||||
|
/* Border radius matching standard inputs often */
|
||||||
|
padding: 24px;
|
||||||
|
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.03);
|
||||||
|
border: 1px solid #EEF2F7;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 16px;
|
||||||
|
height: fit-content;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
.section-title {
|
||||||
|
font-size: 16px;
|
||||||
|
font-weight: 700;
|
||||||
|
color: var(--primary-color);
|
||||||
|
margin-bottom: 8px;
|
||||||
|
border-bottom: 1px solid var(--border-color);
|
||||||
|
padding-bottom: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Form Rows */
|
||||||
|
.form-row {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 6px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.form-row label {
|
||||||
|
font-size: 13px;
|
||||||
|
font-weight: 600;
|
||||||
|
color: var(--text-main);
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.form-row label.required::after {
|
||||||
|
content: ' *';
|
||||||
|
color: #FF5A5A;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Inputs */
|
||||||
|
input[type="text"],
|
||||||
|
input[type="tel"],
|
||||||
|
input[type="password"],
|
||||||
|
.select_box {
|
||||||
|
width: 100%;
|
||||||
|
height: var(--input-height);
|
||||||
|
border: 1px solid var(--border-color);
|
||||||
|
background-color: var(--input-bg);
|
||||||
|
border-radius: 4px;
|
||||||
|
/* Standard radius */
|
||||||
|
padding: 0 12px;
|
||||||
|
font-size: 14px;
|
||||||
|
color: var(--text-main);
|
||||||
|
box-sizing: border-box;
|
||||||
|
outline: none;
|
||||||
|
transition: 0.2s;
|
||||||
|
font-family: 'Pretendard', sans-serif;
|
||||||
|
}
|
||||||
|
|
||||||
|
input:focus,
|
||||||
|
.select_box.focus {
|
||||||
|
border-color: var(--primary-color);
|
||||||
|
background-color: #fff;
|
||||||
|
box-shadow: 0 0 0 2px rgba(27, 102, 201, 0.1);
|
||||||
|
}
|
||||||
|
|
||||||
|
input::placeholder {
|
||||||
|
color: #AAB2B9;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ===============================================
|
||||||
|
Choices.js Custom Design
|
||||||
|
=============================================== */
|
||||||
|
.choices {
|
||||||
|
margin-bottom: 0;
|
||||||
|
font-family: 'Pretendard', sans-serif;
|
||||||
|
overflow: visible;
|
||||||
|
}
|
||||||
|
|
||||||
|
.choices__inner {
|
||||||
|
border: 1px solid var(--border-color);
|
||||||
|
background-color: var(--input-bg);
|
||||||
|
border-radius: 8px;
|
||||||
|
font-size: 14px;
|
||||||
|
min-height: 44px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
padding: 0 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.choices.is-focused .choices__inner,
|
||||||
|
.choices.is-open .choices__inner {
|
||||||
|
border-color: var(--primary-color);
|
||||||
|
box-shadow: 0 0 0 2px rgba(27, 102, 201, 0.1);
|
||||||
|
}
|
||||||
|
|
||||||
|
.choices__list--single {
|
||||||
|
padding: 0;
|
||||||
|
color: var(--text-main);
|
||||||
|
}
|
||||||
|
|
||||||
|
.choices__list--single .choices__item {
|
||||||
|
width: 100%;
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Dropdown Container */
|
||||||
|
.choices__list--dropdown,
|
||||||
|
.choices__list[aria-expanded] {
|
||||||
|
border: 1px solid #E5E7EB;
|
||||||
|
border-radius: 12px;
|
||||||
|
box-shadow: 0 10px 40px rgba(0, 0, 0, 0.12);
|
||||||
|
margin-top: 6px;
|
||||||
|
background-color: #ffffff;
|
||||||
|
padding: 6px;
|
||||||
|
z-index: 100 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Dropdown Items */
|
||||||
|
.choices__list--dropdown .choices__item {
|
||||||
|
font-size: 14px;
|
||||||
|
padding: 10px 14px;
|
||||||
|
border-radius: 8px;
|
||||||
|
color: var(--text-main);
|
||||||
|
margin-bottom: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.choices__list--dropdown .choices__item--selectable.is-highlighted {
|
||||||
|
background: linear-gradient(135deg, #EBF5FF 0%, #E0F0FF 100%);
|
||||||
|
color: var(--primary-color);
|
||||||
|
}
|
||||||
|
|
||||||
|
.choices__list--dropdown .choices__item--selectable.is-selected {
|
||||||
|
background: linear-gradient(135deg, #1B66C9 0%, #2563EB 100%);
|
||||||
|
color: #ffffff;
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Search Input inside Dropdown */
|
||||||
|
.choices__input {
|
||||||
|
background-color: #F8FAFC;
|
||||||
|
border-radius: 6px;
|
||||||
|
border: 1px solid #E5E7EB;
|
||||||
|
margin-bottom: 8px;
|
||||||
|
font-size: 13px;
|
||||||
|
padding: 8px 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Arrow Icon */
|
||||||
|
.choices[data-type*="select-one"]::after {
|
||||||
|
content: '' !important;
|
||||||
|
height: 8px !important;
|
||||||
|
width: 8px !important;
|
||||||
|
border-style: solid !important;
|
||||||
|
border-color: #9CA3AF !important;
|
||||||
|
border-width: 0 2px 2px 0 !important;
|
||||||
|
transform: translateY(-70%) rotate(45deg) !important;
|
||||||
|
position: absolute !important;
|
||||||
|
right: 18px !important;
|
||||||
|
top: 50% !important;
|
||||||
|
pointer-events: none !important;
|
||||||
|
transition: all 0.2s ease !important;
|
||||||
|
margin-top: 0 !important;
|
||||||
|
background-image: none !important;
|
||||||
|
z-index: 5 !important;
|
||||||
|
display: block !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.choices[data-type*="select-one"].is-open::after {
|
||||||
|
transform: translateY(0%) rotate(225deg) !important;
|
||||||
|
border-color: var(--primary-color) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Input Placeholder Color */
|
||||||
|
.choices__placeholder {
|
||||||
|
opacity: 1;
|
||||||
|
color: #9CA3AF;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Radio */
|
||||||
|
.radio-group {
|
||||||
|
display: flex;
|
||||||
|
gap: 20px;
|
||||||
|
height: var(--input-height);
|
||||||
|
align-items: center;
|
||||||
|
background-color: var(--input-bg);
|
||||||
|
border-radius: 4px;
|
||||||
|
/* Standard radius */
|
||||||
|
padding: 0 12px;
|
||||||
|
border: 1px solid var(--border-color);
|
||||||
|
}
|
||||||
|
|
||||||
|
.radio-item {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 8px;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
.radio-item label {
|
||||||
|
margin: 0;
|
||||||
|
cursor: pointer;
|
||||||
|
font-size: 14px;
|
||||||
|
color: var(--text-main);
|
||||||
|
}
|
||||||
|
|
||||||
|
.radio-item input {
|
||||||
|
margin: 0;
|
||||||
|
cursor: pointer;
|
||||||
|
width: 16px;
|
||||||
|
height: 16px;
|
||||||
|
accent-color: var(--primary-color);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Textarea */
|
||||||
|
textarea {
|
||||||
|
width: 100%;
|
||||||
|
height: 80px;
|
||||||
|
border: 1px solid var(--border-color);
|
||||||
|
background-color: var(--input-bg);
|
||||||
|
border-radius: 4px;
|
||||||
|
padding: 12px;
|
||||||
|
font-size: 14px;
|
||||||
|
resize: none;
|
||||||
|
outline: none;
|
||||||
|
box-sizing: border-box;
|
||||||
|
font-family: 'Pretendard', sans-serif;
|
||||||
|
color: var(--text-main);
|
||||||
|
}
|
||||||
|
|
||||||
|
textarea:focus {
|
||||||
|
border-color: var(--primary-color);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Split Input */
|
||||||
|
.split-inputs {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.split-inputs input {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Footer */
|
||||||
|
.page-footer {
|
||||||
|
height: var(--footer-height);
|
||||||
|
background-color: var(--card-bg);
|
||||||
|
border-top: 1px solid var(--border-color);
|
||||||
|
display: flex;
|
||||||
|
justify-content: flex-end;
|
||||||
|
align-items: center;
|
||||||
|
padding: 0 40px;
|
||||||
|
gap: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Buttons - Matching Global Design */
|
||||||
|
button {
|
||||||
|
height: 44px;
|
||||||
|
padding: 0 24px;
|
||||||
|
border-radius: 4px;
|
||||||
|
font-size: 14px;
|
||||||
|
font-weight: 500;
|
||||||
|
cursor: pointer;
|
||||||
|
border: none;
|
||||||
|
font-family: 'Pretendard', sans-serif;
|
||||||
|
transition: background-color 0.2s;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cancel_btn {
|
||||||
|
background-color: #F0F2F5;
|
||||||
|
/* Light Gray */
|
||||||
|
color: #494E53;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cancel_btn:hover {
|
||||||
|
background-color: #E6ECF4 !important;
|
||||||
|
/* From common.css */
|
||||||
|
}
|
||||||
|
|
||||||
|
.registration_bth {
|
||||||
|
background-color: var(--primary-color);
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.registration_bth:hover {
|
||||||
|
background-color: #1652a3 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ===============================================
|
||||||
|
Flatpickr Custom Design
|
||||||
|
=============================================== */
|
||||||
|
.flatpickr-calendar {
|
||||||
|
font-family: 'Pretendard', sans-serif !important;
|
||||||
|
border-radius: 12px !important;
|
||||||
|
box-shadow: 0 10px 40px rgba(0, 0, 0, 0.12) !important;
|
||||||
|
border: 1px solid #E5E7EB !important;
|
||||||
|
width: 320px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.flatpickr-day {
|
||||||
|
border-radius: 8px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.flatpickr-day.selected,
|
||||||
|
.flatpickr-day.startRange,
|
||||||
|
.flatpickr-day.endRange,
|
||||||
|
.flatpickr-day.selected.inRange,
|
||||||
|
.flatpickr-day.startRange.inRange,
|
||||||
|
.flatpickr-day.endRange.inRange,
|
||||||
|
.flatpickr-day.selected:focus,
|
||||||
|
.flatpickr-day.startRange:focus,
|
||||||
|
.flatpickr-day.endRange:focus,
|
||||||
|
.flatpickr-day.selected:hover,
|
||||||
|
.flatpickr-day.startRange:hover,
|
||||||
|
.flatpickr-day.endRange:hover,
|
||||||
|
.flatpickr-day.selected.prevMonthDay,
|
||||||
|
.flatpickr-day.startRange.prevMonthDay,
|
||||||
|
.flatpickr-day.endRange.prevMonthDay,
|
||||||
|
.flatpickr-day.selected.nextMonthDay,
|
||||||
|
.flatpickr-day.startRange.nextMonthDay,
|
||||||
|
.flatpickr-day.endRange.nextMonthDay {
|
||||||
|
background: var(--primary-color) !important;
|
||||||
|
border-color: var(--primary-color) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.flatpickr-months .flatpickr-month {
|
||||||
|
background: transparent !important;
|
||||||
|
color: var(--text-main) !important;
|
||||||
|
fill: var(--text-main) !important;
|
||||||
|
height: 40px;
|
||||||
|
padding-top: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.flatpickr-current-month .flatpickr-monthDropdown-months .flatpickr-monthDropdown-month {
|
||||||
|
background-color: #fff !important;
|
||||||
|
color: var(--text-main) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.flatpickr-weekdays {
|
||||||
|
background: transparent !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.flatpickr-weekday {
|
||||||
|
color: #9CA3AF !important;
|
||||||
|
font-weight: 500 !important;
|
||||||
|
font-size: 13px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.flatpickr-current-month {
|
||||||
|
font-size: 110% !important;
|
||||||
|
padding-top: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.flatpickr-day.today {
|
||||||
|
border-color: var(--border-color) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.flatpickr-day.today:hover {
|
||||||
|
background: #EBF5FF !important;
|
||||||
|
border-color: #EBF5FF !important;
|
||||||
|
color: var(--text-main) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Helper classes */
|
||||||
|
.date-input-wrapper {
|
||||||
|
position: relative;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.date-input-wrapper input {
|
||||||
|
flex: 1;
|
||||||
|
padding-right: 70px;
|
||||||
|
/* Space for age text and icon */
|
||||||
|
}
|
||||||
|
|
||||||
|
.date-input-wrapper img {
|
||||||
|
position: absolute;
|
||||||
|
right: 10px;
|
||||||
|
top: 50%;
|
||||||
|
transform: translateY(-50%);
|
||||||
|
width: 18px;
|
||||||
|
opacity: 0.6;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
.age-text {
|
||||||
|
position: absolute;
|
||||||
|
right: 35px;
|
||||||
|
top: 50%;
|
||||||
|
transform: translateY(-50%);
|
||||||
|
font-size: 12px;
|
||||||
|
color: var(--primary-color);
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Dropdown */
|
||||||
|
.dropdown-menu {
|
||||||
|
border-radius: 4px;
|
||||||
|
border: 1px solid #DDE2E8;
|
||||||
|
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
|
||||||
|
}
|
||||||
|
|
||||||
|
.dropdown-menu li {
|
||||||
|
padding: 10px 12px;
|
||||||
|
font-size: 14px;
|
||||||
|
font-family: 'Pretendard', sans-serif;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dropdown-menu li:hover {
|
||||||
|
background-color: #ebf3fd;
|
||||||
|
/* Project hover color */
|
||||||
|
}
|
||||||
|
|
||||||
|
.dropdown-menu li.selected {
|
||||||
|
background-color: #ebf3fd;
|
||||||
|
color: var(--primary-color);
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Responsive Mobile */
|
||||||
|
@media (max-width: 1199px) {
|
||||||
|
.form-grid-layout {
|
||||||
|
grid-template-columns: 1fr;
|
||||||
|
gap: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.page-body {
|
||||||
|
height: auto;
|
||||||
|
}
|
||||||
|
}
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -1,10 +1,23 @@
|
|||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="ko">
|
<html lang="ko">
|
||||||
|
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
<title>병원 접수 키오스크</title>
|
<title>병원 접수 키오스크</title>
|
||||||
|
<!-- Use Standard Font -->
|
||||||
|
<link rel="stylesheet" href="/css/web/font.css">
|
||||||
<style>
|
<style>
|
||||||
|
:root {
|
||||||
|
--primary-color: #1B66C9;
|
||||||
|
--primary-hover: #1652a3;
|
||||||
|
--bg-color: #F8FBFF;
|
||||||
|
--card-bg: #ffffff;
|
||||||
|
--text-main: #494E53;
|
||||||
|
--text-sub: #777d85;
|
||||||
|
--border-color: #DDE2E8;
|
||||||
|
}
|
||||||
|
|
||||||
* {
|
* {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
@@ -12,100 +25,63 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
body {
|
body {
|
||||||
font-family: 'Segoe UI', 'Malgun Gothic', sans-serif;
|
font-family: 'Pretendard', sans-serif;
|
||||||
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
|
background-color: var(--bg-color);
|
||||||
min-height: 100vh;
|
min-height: 100vh;
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
overflow: hidden;
|
color: var(--text-main);
|
||||||
}
|
|
||||||
|
|
||||||
/* 배경 애니메이션 요소 */
|
|
||||||
.bg-animation {
|
|
||||||
position: fixed;
|
|
||||||
width: 100%;
|
|
||||||
height: 100%;
|
|
||||||
overflow: hidden;
|
|
||||||
z-index: -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
.floating-circle {
|
|
||||||
position: absolute;
|
|
||||||
border-radius: 50%;
|
|
||||||
background: rgba(255, 255, 255, 0.1);
|
|
||||||
animation: float 6s ease-in-out infinite;
|
|
||||||
}
|
|
||||||
|
|
||||||
.circle1 { width: 80px; height: 80px; top: 20%; left: 10%; animation-delay: 0s; }
|
|
||||||
.circle2 { width: 120px; height: 120px; top: 60%; left: 80%; animation-delay: 2s; }
|
|
||||||
.circle3 { width: 60px; height: 60px; top: 80%; left: 20%; animation-delay: 4s; }
|
|
||||||
|
|
||||||
@keyframes float {
|
|
||||||
0%, 100% { transform: translateY(0px) scale(1); opacity: 0.7; }
|
|
||||||
50% { transform: translateY(-20px) scale(1.1); opacity: 1; }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 메인 컨테이너 */
|
/* 메인 컨테이너 */
|
||||||
.kiosk-container {
|
.kiosk-container {
|
||||||
background: rgba(255, 255, 255, 0.15);
|
background: var(--card-bg);
|
||||||
backdrop-filter: blur(20px);
|
border: 1px solid var(--border-color);
|
||||||
border: 1px solid rgba(255, 255, 255, 0.2);
|
border-radius: 20px;
|
||||||
border-radius: 32px;
|
padding: 80px 100px;
|
||||||
padding: 60px 80px;
|
|
||||||
text-align: center;
|
text-align: center;
|
||||||
box-shadow:
|
box-shadow: 0 10px 40px rgba(0, 0, 0, 0.05);
|
||||||
0 8px 32px 0 rgba(31, 38, 135, 0.37),
|
width: 100%;
|
||||||
inset 0 1px 0 rgba(255, 255, 255, 0.4);
|
max-width: 1200px;
|
||||||
width: 90vw;
|
|
||||||
max-width: 800px;
|
|
||||||
min-height: 80vh;
|
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
animation: slideUp 0.8s ease-out;
|
align-items: center;
|
||||||
}
|
min-height: 800px;
|
||||||
|
/* Force substantial height */
|
||||||
@keyframes slideUp {
|
|
||||||
from { opacity: 0; transform: translateY(50px); }
|
|
||||||
to { opacity: 1; transform: translateY(0); }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 헤더 */
|
/* 헤더 */
|
||||||
.header {
|
.header {
|
||||||
margin-bottom: 60px;
|
margin-bottom: 80px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.hospital-logo {
|
.hospital-logo {
|
||||||
width: 80px;
|
width: 100px;
|
||||||
height: 80px;
|
height: 100px;
|
||||||
background: linear-gradient(135deg, #4facfe 0%, #00f2fe 100%);
|
background: #fff;
|
||||||
border-radius: 20px;
|
border-radius: 50%;
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
margin: 0 auto 30px;
|
margin: 0 auto 30px;
|
||||||
box-shadow: 0 10px 30px rgba(79, 172, 254, 0.3);
|
border: 2px solid #EBF3FD;
|
||||||
}
|
font-size: 50px;
|
||||||
|
|
||||||
.hospital-logo::before {
|
|
||||||
content: "🏥";
|
|
||||||
font-size: 36px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.title {
|
.title {
|
||||||
color: white;
|
color: var(--text-main);
|
||||||
font-size: 2.8rem;
|
font-size: 40px;
|
||||||
font-weight: 700;
|
font-weight: 800;
|
||||||
margin-bottom: 15px;
|
margin-bottom: 16px;
|
||||||
text-shadow: 0 2px 10px rgba(0, 0, 0, 0.2);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.subtitle {
|
.subtitle {
|
||||||
color: rgba(255, 255, 255, 0.9);
|
color: var(--text-sub);
|
||||||
font-size: 1.3rem;
|
font-size: 18px;
|
||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
line-height: 1.6;
|
line-height: 1.5;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 버튼 컨테이너 */
|
/* 버튼 컨테이너 */
|
||||||
@@ -113,296 +89,212 @@
|
|||||||
display: flex;
|
display: flex;
|
||||||
gap: 40px;
|
gap: 40px;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
flex-wrap: wrap;
|
width: 100%;
|
||||||
margin-top: 40px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 메인 버튼 스타일 */
|
/* 메인 버튼 스타일 */
|
||||||
.patient-button {
|
.patient-button {
|
||||||
background: rgba(255, 255, 255, 0.2);
|
flex: 1;
|
||||||
backdrop-filter: blur(10px);
|
max-width: 400px;
|
||||||
border: 2px solid rgba(255, 255, 255, 0.3);
|
background: #fff;
|
||||||
border-radius: 24px;
|
border: 2px solid var(--border-color);
|
||||||
padding: 50px 60px;
|
border-radius: 16px;
|
||||||
|
padding: 60px 40px;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
transition: all 0.3s cubic-bezier(0.175, 0.885, 0.32, 1.275);
|
transition: all 0.2s ease-in-out;
|
||||||
position: relative;
|
|
||||||
overflow: hidden;
|
|
||||||
min-width: 280px;
|
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
display: block;
|
display: flex;
|
||||||
}
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
.patient-button::before {
|
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.03);
|
||||||
content: '';
|
|
||||||
position: absolute;
|
|
||||||
top: 0;
|
|
||||||
left: -100%;
|
|
||||||
width: 100%;
|
|
||||||
height: 100%;
|
|
||||||
background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.2), transparent);
|
|
||||||
transition: left 0.6s;
|
|
||||||
}
|
|
||||||
|
|
||||||
.patient-button:hover::before {
|
|
||||||
left: 100%;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.patient-button:hover {
|
.patient-button:hover {
|
||||||
transform: translateY(-8px) scale(1.02);
|
transform: translateY(-5px);
|
||||||
box-shadow:
|
border-color: var(--primary-color);
|
||||||
0 20px 50px rgba(0, 0, 0, 0.15),
|
box-shadow: 0 10px 25px rgba(27, 102, 201, 0.15);
|
||||||
0 0 0 1px rgba(255, 255, 255, 0.4);
|
|
||||||
border-color: rgba(255, 255, 255, 0.5);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.patient-button:active {
|
.patient-button:active {
|
||||||
transform: translateY(-4px) scale(0.98);
|
transform: scale(0.98);
|
||||||
}
|
|
||||||
|
|
||||||
/* 새환자 버튼 */
|
|
||||||
.new-patient {
|
|
||||||
background: linear-gradient(135deg, rgba(46, 213, 115, 0.8) 0%, rgba(0, 184, 148, 0.8) 100%);
|
|
||||||
}
|
|
||||||
|
|
||||||
.new-patient:hover {
|
|
||||||
background: linear-gradient(135deg, rgba(46, 213, 115, 0.9) 0%, rgba(0, 184, 148, 0.9) 100%);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* 기존환자 버튼 */
|
|
||||||
.existing-patient {
|
|
||||||
background: linear-gradient(135deg, rgba(52, 152, 219, 0.8) 0%, rgba(155, 89, 182, 0.8) 100%);
|
|
||||||
}
|
|
||||||
|
|
||||||
.existing-patient:hover {
|
|
||||||
background: linear-gradient(135deg, rgba(52, 152, 219, 0.9) 0%, rgba(155, 89, 182, 0.9) 100%);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 버튼 아이콘 */
|
/* 버튼 아이콘 */
|
||||||
.button-icon {
|
.button-icon {
|
||||||
font-size: 4rem;
|
font-size: 60px;
|
||||||
margin-bottom: 20px;
|
margin-bottom: 30px;
|
||||||
display: block;
|
display: block;
|
||||||
|
background: #EBF3FD;
|
||||||
|
width: 120px;
|
||||||
|
height: 120px;
|
||||||
|
border-radius: 50%;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
color: var(--primary-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 버튼 텍스트 */
|
/* 버튼 텍스트 */
|
||||||
.button-text {
|
.button-text {
|
||||||
color: white;
|
color: var(--text-main);
|
||||||
font-size: 1.8rem;
|
font-size: 28px;
|
||||||
font-weight: 700;
|
font-weight: 700;
|
||||||
margin-bottom: 10px;
|
margin-bottom: 15px;
|
||||||
text-shadow: 0 2px 10px rgba(0, 0, 0, 0.3);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.button-desc {
|
.button-desc {
|
||||||
color: rgba(255, 255, 255, 0.9);
|
color: var(--text-sub);
|
||||||
font-size: 1.1rem;
|
font-size: 16px;
|
||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
line-height: 1.4;
|
line-height: 1.5;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 하단 정보 */
|
/* 하단 정보 */
|
||||||
.footer-info {
|
.footer-info {
|
||||||
margin-top: 50px;
|
margin-top: 80px;
|
||||||
color: rgba(255, 255, 255, 0.8);
|
color: #999;
|
||||||
font-size: 1rem;
|
font-size: 15px;
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: space-between;
|
flex-direction: column;
|
||||||
align-items: center;
|
gap: 10px;
|
||||||
flex-wrap: wrap;
|
|
||||||
gap: 20px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.current-time {
|
.current-time {
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
}
|
color: var(--primary-color);
|
||||||
|
font-size: 18px;
|
||||||
.help-text {
|
|
||||||
font-style: italic;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 반응형 디자인 */
|
/* 반응형 디자인 */
|
||||||
@media (max-width: 768px) {
|
@media (max-width: 1024px) {
|
||||||
.kiosk-container {
|
.kiosk-container {
|
||||||
padding: 40px 30px;
|
padding: 40px;
|
||||||
width: 95vw;
|
min-height: auto;
|
||||||
min-height: 90vh;
|
|
||||||
}
|
|
||||||
|
|
||||||
.title {
|
|
||||||
font-size: 2.2rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.subtitle {
|
|
||||||
font-size: 1.1rem;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.button-container {
|
.button-container {
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
gap: 30px;
|
|
||||||
align-items: center;
|
align-items: center;
|
||||||
|
gap: 20px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.patient-button {
|
.patient-button {
|
||||||
min-width: 100%;
|
width: 100%;
|
||||||
max-width: 400px;
|
padding: 40px;
|
||||||
padding: 40px 30px;
|
flex-direction: row;
|
||||||
|
text-align: left;
|
||||||
|
gap: 20px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.button-icon {
|
.button-icon {
|
||||||
font-size: 3rem;
|
margin-bottom: 0;
|
||||||
|
width: 80px;
|
||||||
|
height: 80px;
|
||||||
|
font-size: 40px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.button-text {
|
.button-text {
|
||||||
font-size: 1.5rem;
|
margin-bottom: 5px;
|
||||||
}
|
|
||||||
|
|
||||||
.footer-info {
|
|
||||||
flex-direction: column;
|
|
||||||
text-align: center;
|
|
||||||
gap: 10px;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 접근성 향상 */
|
/* 로딩 화면 */
|
||||||
.patient-button:focus {
|
|
||||||
outline: 3px solid #FFD700;
|
|
||||||
outline-offset: 4px;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* 로딩 애니메이션 */
|
|
||||||
.loading {
|
.loading {
|
||||||
display: none;
|
display: none;
|
||||||
position: fixed;
|
position: fixed;
|
||||||
top: 50%;
|
top: 0;
|
||||||
left: 50%;
|
left: 0;
|
||||||
transform: translate(-50%, -50%);
|
right: 0;
|
||||||
color: white;
|
bottom: 0;
|
||||||
font-size: 1.2rem;
|
background: rgba(255, 255, 255, 0.8);
|
||||||
z-index: 1000;
|
z-index: 1000;
|
||||||
}
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
.spinner {
|
color: var(--primary-color);
|
||||||
border: 3px solid rgba(255, 255, 255, 0.3);
|
font-weight: 600;
|
||||||
border-radius: 50%;
|
font-size: 18px;
|
||||||
border-top: 3px solid white;
|
|
||||||
width: 40px;
|
|
||||||
height: 40px;
|
|
||||||
animation: spin 1s linear infinite;
|
|
||||||
margin: 0 auto 15px;
|
|
||||||
}
|
|
||||||
|
|
||||||
@keyframes spin {
|
|
||||||
0% { transform: rotate(0deg); }
|
|
||||||
100% { transform: rotate(360deg); }
|
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
|
||||||
<!-- 배경 애니메이션 -->
|
|
||||||
<div class="bg-animation">
|
|
||||||
<div class="floating-circle circle1"></div>
|
|
||||||
<div class="floating-circle circle2"></div>
|
|
||||||
<div class="floating-circle circle3"></div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
<body>
|
||||||
<!-- 키오스크 메인 화면 -->
|
<!-- 키오스크 메인 화면 -->
|
||||||
<div class="kiosk-container">
|
<div class="kiosk-container">
|
||||||
<div class="header">
|
<div class="header">
|
||||||
<div class="hospital-logo"></div>
|
|
||||||
<h1 class="title">병원 접수</h1>
|
<h1 class="title">병원 접수</h1>
|
||||||
<p class="subtitle">환자 유형을 선택해 주세요<br>해당하는 버튼을 터치해 주시기 바랍니다</p>
|
<p class="subtitle">환자 유형을 선택해 주세요</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="button-container">
|
<div class="button-container">
|
||||||
<a href="#" class="patient-button new-patient" onclick="handleSelection('new')">
|
<a href="javascript:void(0);" class="patient-button" onclick="handleSelection('new')">
|
||||||
<span class="button-icon">👤➕</span>
|
<span class="button-icon">
|
||||||
|
<!-- SVG Icon for New Patient -->
|
||||||
|
<svg width="40" height="40" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path
|
||||||
|
d="M12 12C14.21 12 16 10.21 16 8C16 5.79 14.21 4 12 4C9.79 4 8 5.79 8 8C8 10.21 9.79 12 12 12ZM12 14C9.33 14 4 15.34 4 18V20H20V18C20 15.34 14.67 14 12 14Z"
|
||||||
|
fill="#1B66C9" />
|
||||||
|
</svg>
|
||||||
|
</span>
|
||||||
|
<div>
|
||||||
<div class="button-text">신규 환자</div>
|
<div class="button-text">신규 환자</div>
|
||||||
<div class="button-desc">처음 내원하시는 분<br>신규 등록이 필요합니다</div>
|
<div class="button-desc">처음 방문하셨나요?</div>
|
||||||
|
</div>
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
<a href="#" class="patient-button existing-patient" onclick="handleSelection('existing')">
|
<a href="javascript:void(0);" class="patient-button" onclick="handleSelection('existing')">
|
||||||
<span class="button-icon">👤✓</span>
|
<span class="button-icon">
|
||||||
|
<!-- SVG Icon for Existing Patient -->
|
||||||
|
<svg width="40" height="40" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path
|
||||||
|
d="M19 3H5C3.89 3 3 3.9 3 5V19C3 20.1 3.89 21 5 21H19C20.1 21 21 20.1 21 19V5C21 3.9 20.1 3 19 3ZM12 17L7 12L8.41 10.59L12 14.17L17.59 8.59L19 10L12 17Z"
|
||||||
|
fill="#1B66C9" />
|
||||||
|
</svg>
|
||||||
|
</span>
|
||||||
|
<div>
|
||||||
<div class="button-text">기존 환자</div>
|
<div class="button-text">기존 환자</div>
|
||||||
<div class="button-desc">이전에 내원하신 분<br>진료카드를 준비해 주세요</div>
|
<div class="button-desc">다시 방문하셨나요?</div>
|
||||||
|
</div>
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="footer-info">
|
<div class="footer-info">
|
||||||
<div class="current-time" id="currentTime"></div>
|
<div class="current-time" id="currentTime"></div>
|
||||||
<div class="help-text">도움이 필요하시면 안내데스크로 문의해 주세요</div>
|
<div>안내데스크 문의</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- 로딩 화면 -->
|
<!-- 로딩 화면 -->
|
||||||
<div class="loading" id="loadingScreen">
|
<div class="loading" id="loadingScreen" style="display:none; flex-direction:column;">
|
||||||
<div class="spinner"></div>
|
<div style="margin-bottom:10px;">이동 중...</div>
|
||||||
<div>접수 화면으로 이동 중...</div>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
// 현재 시간 표시
|
|
||||||
function updateTime() {
|
function updateTime() {
|
||||||
const now = new Date();
|
const now = new Date();
|
||||||
const timeString = now.toLocaleString('ko-KR', {
|
const timeString = now.toLocaleString('ko-KR', {
|
||||||
year: 'numeric',
|
hour: '2-digit', minute: '2-digit', weekday: 'long', year: 'numeric', month: 'long', day: 'numeric'
|
||||||
month: 'long',
|
|
||||||
day: 'numeric',
|
|
||||||
hour: '2-digit',
|
|
||||||
minute: '2-digit',
|
|
||||||
weekday: 'long'
|
|
||||||
});
|
});
|
||||||
document.getElementById('currentTime').textContent = timeString;
|
document.getElementById('currentTime').textContent = timeString;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 페이지 로드 시 시간 업데이트 및 1분마다 갱신
|
|
||||||
updateTime();
|
updateTime();
|
||||||
setInterval(updateTime, 60000);
|
setInterval(updateTime, 60000);
|
||||||
|
|
||||||
// 버튼 선택 처리
|
|
||||||
function handleSelection(type) {
|
function handleSelection(type) {
|
||||||
// 로딩 화면 표시
|
const loading = document.getElementById('loadingScreen');
|
||||||
document.getElementById('loadingScreen').style.display = 'block';
|
loading.style.display = 'flex';
|
||||||
|
|
||||||
// 실제 구현에서는 여기서 다음 화면으로 이동
|
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
if (type === 'new') {
|
if (type === 'new') {
|
||||||
alert('신규 환자 등록 화면으로 이동합니다.\n\n필요한 서류:\n- 신분증\n- 보험카드');
|
// alert('신규 - 신분증 지참');
|
||||||
window.location.href = '/kiosk/NewPatientIntro.do';
|
window.location.href = '/kiosk/NewPatientIntro.do';
|
||||||
} else {
|
} else {
|
||||||
alert('기존 환자 접수 화면으로 이동합니다.\n\n필요한 준비물:\n- 진료카드 또는 주민등록번호\n- 보험카드');
|
// alert('기존 - 진료카드 지참');
|
||||||
window.location.href = '/kiosk/ExistPatientIntro.do';
|
window.location.href = '/kiosk/ExistPatientIntro.do';
|
||||||
}
|
}
|
||||||
document.getElementById('loadingScreen').style.display = 'none';
|
loading.style.display = 'none';
|
||||||
}, 1500);
|
}, 500);
|
||||||
}
|
|
||||||
|
|
||||||
// 키보드 접근성 지원
|
|
||||||
document.addEventListener('keydown', function(e) {
|
|
||||||
if (e.key === '1') {
|
|
||||||
handleSelection('new');
|
|
||||||
} else if (e.key === '2') {
|
|
||||||
handleSelection('existing');
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// 터치 피드백 효과
|
|
||||||
document.querySelectorAll('.patient-button').forEach(button => {
|
|
||||||
button.addEventListener('touchstart', function() {
|
|
||||||
this.style.transform = 'scale(0.95)';
|
|
||||||
});
|
|
||||||
|
|
||||||
button.addEventListener('touchend', function() {
|
|
||||||
this.style.transform = '';
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
// 화면 절전 방지 (Wake Lock API)
|
|
||||||
if ('wakeLock' in navigator) {
|
|
||||||
navigator.wakeLock.request('screen').catch(err => {
|
|
||||||
console.log('Wake lock failed:', err);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
</html>
|
</html>
|
||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user