Merge branch 'main' of http://211.119.124.110:3000/xit-app/adds-fo.git into main
commit
36b1d95100
@ -0,0 +1,438 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%>
|
||||
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
|
||||
|
||||
<c:set var="prefixName" scope="request">폐기관리 등록</c:set>
|
||||
|
||||
<!-- inner page html -->
|
||||
<div class="content-wrapper">
|
||||
<!-- Content -->
|
||||
<div class="container flex-grow-1 px-0">
|
||||
<!-- Page Body -->
|
||||
<div class="card">
|
||||
<!-- 입력 영역 -->
|
||||
<form id="bssh--${pageName}" name="bssh">
|
||||
<!-- hidden -->
|
||||
<label for="bssh--${pageName}" style="margin-top: 10px; padding-left: 20px;"><strong>취급업체 정보</strong></label>
|
||||
<div class="row my-1 mx-4 g-1 border-card rounded-3">
|
||||
<div class="col-md-4">
|
||||
<label for="bsshNm--${pageName}" class="w-px-130 bg-lighter pe-2 col-form-label text-sm-end">업체명</label>
|
||||
<input type="text" class="form-control w-60" id="bsshNm--${pageName}" name="bsshNm" data-map="bsshNm" readonly>
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
<label for="bsshCd--${pageName}" class="w-px-130 bg-lighter pe-2 col-form-label text-sm-end">식별번호</label>
|
||||
<input type="text" class="form-control w-60" id="bsshNm--${pageName}" name="bsshCd" data-map="bsshCd" readonly>
|
||||
</div>
|
||||
<button type="button" class="btn btn-search w-px-120" id="btnBsshSearch--${pageName}" title="검색">검색</button>
|
||||
<div class="col-md-4">
|
||||
<label for="rprsntvNm--${pageName}" class="w-px-130 bg-lighter pe-2 col-form-label text-sm-end">대표자명</label>
|
||||
<input type="text" class="form-control w-60" id="rprsntvNm--${pageName}" name="rprsntvNm" data-map="rprsntvNm" readonly>
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
<label for="prmisnNo--${pageName}" class="w-px-130 bg-lighter pe-2 col-form-label text-sm-end">허가번호</label>
|
||||
<input type="text" class="form-control w-60" id="prmisnNo--${pageName}" name="prmisnNo" data-map="prmisnNo" readonly>
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
<label for="bizrNo--${pageName}" class="w-px-130 bg-lighter pe-2 col-form-label text-sm-end">사업자등록번호</label>
|
||||
<input type="text" class="form-control w-60" id="bizrno--${pageName}" name="bizrno" data-map="bizrno" readonly>
|
||||
</div>
|
||||
<div class="col-md-8">
|
||||
<label for="dsusePrvCd--${pageName}" class="w-px-130 bg-lighter pe-2 col-form-label text-sm-end">폐기사유</label>
|
||||
<select class="form-select" id="dsusePrvCd--${pageName}" name="dsusePrvCd">
|
||||
<c:forEach items="${ADDS04}" var="item">
|
||||
<option value="${item.code}">${item.value}</option>
|
||||
</c:forEach>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row my-1 mx-1 g-1 border-card rounded"></div>
|
||||
</form>
|
||||
<div>
|
||||
</div>
|
||||
<span class="container-page-btn">
|
||||
<span class="container-window-btn-right">
|
||||
<!-- 업무 버튼 -->
|
||||
<button type="button" class="btn btn-primary w-px-80" id="btnSave--${pageName}" title="저장">저장</button>
|
||||
</span>
|
||||
</span>
|
||||
</div>
|
||||
<!-- / 업무 버튼 표시 -->
|
||||
</div> <!-- / Content <div class="container flex-grow-1 px-0"> -->
|
||||
</div> <!-- / inner page html <div class="content-wrapper"> -->
|
||||
|
||||
<script>
|
||||
/**************************************************************************
|
||||
* Global Variable
|
||||
**************************************************************************/
|
||||
pageObject["${pageName}"] = {};
|
||||
|
||||
/**************************************************************************
|
||||
* script 진입
|
||||
**************************************************************************/
|
||||
$(document).ready(function() {
|
||||
// pageObject
|
||||
let $P = pageObject["${pageName}"];
|
||||
|
||||
// FormFields
|
||||
$P.bsshFormFields = new AddsFormFields("#bssh--${pageName}");
|
||||
$P.productFormFields = new AddsFormFields("#product--${pageName}");
|
||||
|
||||
/**************************************************************************
|
||||
* DatasetControl
|
||||
**************************************************************************/
|
||||
$P.control = new DatasetControl({
|
||||
prefix: "dsuseMgtReceiptBssh"
|
||||
, prefixName: "마약류 취급업체 조회"
|
||||
, keymapper: info => info ? info.bsshCd : ""
|
||||
, dataGetter: obj => obj.${infoPrefix}Info
|
||||
, infoSize: "xl"
|
||||
});
|
||||
|
||||
$P.bsshList = new Dataset({
|
||||
prefix: "dsuseMgtReceiptBsshList"
|
||||
, prefixName: "마약류 취급업체 조회"
|
||||
, keymapper: info => info ? info.bsshCd : ""
|
||||
, dataGetter: obj => obj
|
||||
, infoSize: "xl"
|
||||
});
|
||||
|
||||
$P.productControl = new DatasetControl({
|
||||
prefix: "dsuseMgtReceiptProduct"
|
||||
, prefixName: "마약류 제품 조회"
|
||||
, keymapper: info => info ? info.prductCd : ""
|
||||
, dataGetter: obj => obj.${infoPrefix}Info
|
||||
, infoSize: "xl"
|
||||
});
|
||||
|
||||
$P.productList = new Dataset({
|
||||
prefix: "dsuseMgtReceiptProductList"
|
||||
, prefixName: "마약류 제품 조회"
|
||||
, keymapper: info => info ? info.prductCd : ""
|
||||
, dataGetter: obj => {
|
||||
if (!obj.success){
|
||||
dialog.alert(obj.message);
|
||||
return false;
|
||||
}
|
||||
return obj.data;
|
||||
}
|
||||
, infoSize: "xl"
|
||||
, formats: {
|
||||
prdValidDe: dateFormat
|
||||
}
|
||||
});
|
||||
|
||||
$P.detailControl = new DatasetControl({
|
||||
urls : {
|
||||
load : wctx.url("/adds/nims/dsuseMgtDetail-list.do")
|
||||
}
|
||||
, prefix : "dsuseMgtDetail"
|
||||
, prefixName : "신청서접수상세"
|
||||
, keymapper : info => info ? info.DSCDMNG_SN : ""
|
||||
, dataGetter : obj => obj.dsuseMgtDetailList
|
||||
, formats : {
|
||||
PRD_VALID_DE: dateFormat
|
||||
}
|
||||
});
|
||||
$P.detailControl.query = { "schDscdmngId" : ${DSCDMNG_ID}};
|
||||
$P.detailControl.load(1);
|
||||
|
||||
/**************************************************************************
|
||||
* DatasetControl 이벤트
|
||||
**************************************************************************/
|
||||
// 현재 선택 자료 변경 이벤트
|
||||
$P.control.onCurrentChange = item => {
|
||||
if (!item) return;
|
||||
|
||||
$P.bsshFormFields.set($P.control, item);
|
||||
// 업무구분에 따른 URL 변경
|
||||
//$P.fnSetURL(item.data.bsshCd);
|
||||
}
|
||||
|
||||
$P.productControl.onCurrentChange = item => {
|
||||
if (!item) return;
|
||||
|
||||
// Dataset 셋팅
|
||||
$P.productFormFields.set($P.productControl, item);
|
||||
// 업무구분에 따른 URL 변경
|
||||
//$P.fnSetURL(item.data.bsshCd);
|
||||
}
|
||||
|
||||
// 저장 callback
|
||||
$P.control.onSave = (resp) => {
|
||||
let dialogTitle = $("#" + $P.control.prefix + "Dialog--${openerPageName}").find("h5.modal-title").html();
|
||||
let showMessage = resp.rtnMsg.replace(/[S]|[F]/g, dialogTitle);
|
||||
|
||||
// 메시지 출력
|
||||
dialog.alert({
|
||||
content: showMessage
|
||||
, init: () => { setDialogZindex(); }
|
||||
, onOK: () => { }
|
||||
});
|
||||
|
||||
if (resp.saved) {
|
||||
dialog.close($P.control.prefix + "Dialog--${openerPageName}");
|
||||
}
|
||||
}
|
||||
|
||||
$P.control.getBsshInfo = () => {
|
||||
let dialogTitle = "마약류 취급업체 조회";
|
||||
let params = {openPage : "bssh--${pageName}"};
|
||||
|
||||
ajax.get({
|
||||
url : wctx.url("/adds/nims/bssh-popup.do")
|
||||
, data : params
|
||||
, success : resp => {
|
||||
dialog.open({
|
||||
id : "bsshPopupDialog"
|
||||
, title : dialogTitle
|
||||
, content : resp
|
||||
, size : $P.control.infoSize
|
||||
, onClose : () => { $P.control.setData(); }
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
$P.productControl.getProductInfo = () => {
|
||||
let dialogTitle = "마약류 제품 조회";
|
||||
let params = {openPage : "product--${pageName}"};
|
||||
|
||||
ajax.get({
|
||||
url : wctx.url("/adds/nims/product-popup.do")
|
||||
, data : params
|
||||
, success : resp => {
|
||||
dialog.open({
|
||||
id : "productMainDialog"
|
||||
, title : dialogTitle
|
||||
, content : resp
|
||||
, size : $P.productControl.infoSize
|
||||
, onClose : () => { $P.productControl.setData(); }
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// 저장
|
||||
$P.control.save = (jsonBssh, datasetListPrd, fileArr) => {
|
||||
let saveBsshData = {
|
||||
...jsonBssh,
|
||||
rndDtlRptCnt: datasetListPrd.length,
|
||||
userId: "${currentUser.account}"
|
||||
}
|
||||
|
||||
let create = (jsonBssh.dscdmngId == "");
|
||||
|
||||
upload({
|
||||
url: '<c:url value="${apiHost}/api/biz/nims/v1/saveDsuseMgtReceipt" />'
|
||||
, data: {
|
||||
dsuseMgtJsonStr: JSON.stringify(saveBsshData),
|
||||
dsuseMgtDtlsJsonStr: JSON.stringify(datasetListPrd),
|
||||
// 폐기상품이미지목록
|
||||
dsusePrdImgFiles: fileArr
|
||||
}
|
||||
, success: resp => {
|
||||
if(!resp.success){
|
||||
dialog.alert({
|
||||
content: resp.message
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
//$P.control.onSave(resp)
|
||||
dialog.alert("저장됐습니다.");
|
||||
dialog.close("dsuseMgtReceiptDialog");
|
||||
//this._load();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
$P.productList.onDatasetChange = item => {
|
||||
if (!item) return;
|
||||
|
||||
let empty = $P.productList.empty;
|
||||
|
||||
// 업무별 DataTables(그리드) tr, td
|
||||
let foundContent = document.getElementById("productListRow--productList").content;
|
||||
let foundTr = $(foundContent).find("tr")[0].cloneNode(false);
|
||||
let foundTds = $(foundContent).find("td");
|
||||
|
||||
foundTds.each(function() {
|
||||
foundTr.appendChild(this.cloneNode(true));
|
||||
});
|
||||
|
||||
//
|
||||
let replacer = (str, dataItem) => str
|
||||
.replace(/{onclick}/gi, "pageObject['${pageName}'].productList.setCurrent('" + dataItem.getValue("prductCd") + "');");
|
||||
|
||||
let trs = empty ? [document.getElementById("$productListNotFound--productList").content.outerHTML]
|
||||
: $P.productList.inStrings(foundTr.outerHTML, replacer);
|
||||
|
||||
$("#table-responsive--${pageName}")[0].changeContent(trs.join(), true, true);
|
||||
|
||||
fnMakeGridImageViewer($("#tbody--productList").find("td.prdDsuseImg").get(), "dsusePrdImgFiles");
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* DataTables 이벤트
|
||||
**************************************************************************/
|
||||
|
||||
/**************************************************************************
|
||||
* 사용자 함수(function)
|
||||
**************************************************************************/
|
||||
// 검색 자료 재조회
|
||||
$P.fnRefreshList = () => {
|
||||
$P.control.untilPageNum = $P.control.query.pageNum;
|
||||
$P.control.query.fetchSize = $P.control.defaultFetchSize * $P.control.query.pageNum;
|
||||
$P.control.load(1);
|
||||
}
|
||||
|
||||
// 업무구분에 따른 URL 설정
|
||||
$P.fnSetURL = (taskSeCd) => {
|
||||
// $P.control.urls.create = wctx.url("/" + taskSeCd + "${infoPrefixUrl}" + "/040/create.do"); // 등록
|
||||
// $P.control.urls.update = wctx.url("/" + taskSeCd + "${infoPrefixUrl}" + "/040/update.do"); // 수정
|
||||
}
|
||||
|
||||
// 전자우편 안내문 등록 버튼 이벤트
|
||||
$P.fnSearchBssh = (title) => {
|
||||
$P.control.getBsshInfo();
|
||||
}
|
||||
|
||||
$P.fnSearchProduct = (title) => {
|
||||
$P.productControl.getProductInfo();
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 버튼 clickEvent
|
||||
**************************************************************************/
|
||||
// 저장
|
||||
$P.fnSave = () => {
|
||||
// validate 확인
|
||||
if (!customValidate($("#frmEdit--${pageName}").find("input, select, textarea"))) return;
|
||||
|
||||
let bsshData = $P.bsshFormFields.get();
|
||||
if(bsshData.bsshCd == ""){
|
||||
dialog.alert({
|
||||
content: "마약류 취급업체 정보를 입력해주세요."
|
||||
});
|
||||
return false;
|
||||
}
|
||||
|
||||
let dsProd = $P.productList.getDataset();
|
||||
if(dsProd.length == 0){
|
||||
dialog.alert({
|
||||
content: "폐기 제품 정보를 입력해주세요."
|
||||
});
|
||||
return false;
|
||||
}
|
||||
|
||||
let fileArr = [];
|
||||
$("#tbody--productList").find("input[type='file'][name='dsusePrdImgFiles']").each(function() {
|
||||
fileArr.push(this.files[0]);
|
||||
});
|
||||
|
||||
if(dsProd.length != fileArr.length){
|
||||
dialog.alert({
|
||||
content: "입력되지 않은 폐기 제품 이미지가 있습니다."
|
||||
});
|
||||
return false;
|
||||
}
|
||||
|
||||
dialog.alert({
|
||||
content: "현재 " + $P.control.prefixName + " 정보를 저장하시겠습니까?"
|
||||
, init: () => { setDialogZindex(); }
|
||||
, onOK: () => {
|
||||
$P.control.save(bsshData, dsProd, fileArr); // formFields
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
//추가
|
||||
$P.fnAdd = () => {
|
||||
if(!$P.productFormFields.get().prductCd){
|
||||
dialog.alert({
|
||||
content: "제품 정보를 입력해주세요."
|
||||
});
|
||||
return false;
|
||||
}
|
||||
if(!$P.productFormFields.get().dsuseQy){
|
||||
dialog.alert({
|
||||
content: "폐기수량을 입력해 주세요"
|
||||
});
|
||||
return false;
|
||||
}
|
||||
|
||||
let isDup = $P.productList
|
||||
.getDataset()
|
||||
.filter(item => item.prductCd == $P.productFormFields.get().prductCd)
|
||||
.length > 0;
|
||||
|
||||
if(isDup){
|
||||
dialog.alert({
|
||||
content: "등록한 상품[" + $P.productFormFields.get().prductCd + "]입니다"
|
||||
});
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
$P.productList.addData([$P.productFormFields.get()]);
|
||||
// FIXME: 상품필드 초기화 코드 추가
|
||||
//
|
||||
}
|
||||
|
||||
$P.fnDel = () => {
|
||||
// validate 확인
|
||||
if (!customValidate($("#frmEdit--${pageName}").find("input, select, textarea"))) return;
|
||||
|
||||
dialog.alert({
|
||||
content: "현재 " + $P.control.prefixName + " 정보를 저장하시겠습니까?"
|
||||
, init: () => { setDialogZindex(); }
|
||||
, onOK: () => {
|
||||
$P.control.save($P.bsshFormFields.get()); // formFields
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 초기 셋팅
|
||||
**************************************************************************/
|
||||
// 이벤트 설정
|
||||
$P.setEvent = () => {
|
||||
// 안내문 등록 버튼 이벤트
|
||||
$("#btnBsshSearch--${pageName}").on("click", function() {
|
||||
$P.fnSearchBssh($(this).attr("title"));
|
||||
});
|
||||
|
||||
$("#btnProductSearch--${pageName}").on("click", function() {
|
||||
$P.fnSearchProduct($(this).attr("title"));
|
||||
});
|
||||
|
||||
// 버튼 이벤트
|
||||
$("#btnSave--${pageName}").on("click", () => $P.fnSave()); // 저장
|
||||
|
||||
$("#btnAdd--${pageName}").on("click", () => $P.fnAdd()); // 추가
|
||||
|
||||
$("#btnDel--${pageName}").on("click", () => $P.fnDel()); // 추가
|
||||
|
||||
}
|
||||
|
||||
// 초기 화면 설정
|
||||
$P.initForm = () => {
|
||||
fnMakeScrollableTable($("#table-responsive--${pageName}")[0], $P.scrollDataList);
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**************************************************************************
|
||||
* 최초 실행 함수
|
||||
**************************************************************************/
|
||||
// 1. 이벤트 설정
|
||||
$P.setEvent();
|
||||
|
||||
// 2. 초기 화면 설정
|
||||
$P.initForm();
|
||||
|
||||
// 3. Dataset 설정
|
||||
$P.control.setData([${dsuseReceptInfo}]);
|
||||
$P.productControl.setData([${opnnDlbrMbrInfo}]);
|
||||
});
|
||||
|
||||
</script>
|
@ -0,0 +1,16 @@
|
||||
/**************************************************************************
|
||||
* 서버의 파일 정보로 javascript File 객체 생성
|
||||
**************************************************************************/
|
||||
async function fnCreateFileFromFileInfo(fileInfo){
|
||||
|
||||
let response = await fetch(fileInfo.URL);
|
||||
let data = await response.blob();
|
||||
let metadata = {
|
||||
type: fileInfo.MIME_TYPE
|
||||
};
|
||||
let file = new File([data], fileInfo.FILE_NM, metadata);
|
||||
file.id = fileInfo.FILE_ID;
|
||||
file.url = fileInfo.URL;
|
||||
|
||||
return new Promise(resolve => { resolve(file); });
|
||||
}
|
Loading…
Reference in New Issue