홈페이지 게시판 순서변경

This commit is contained in:
pjs
2026-02-19 21:01:36 +09:00
parent ae1ac1ea0f
commit 836c8031c0
7 changed files with 303 additions and 7 deletions

View File

@@ -38,6 +38,7 @@
,HC.CATEGORY_NO
,HCB.THUMBNAIL_BOTTOM_TXT
,HCB.HASHTAG
,HCB.ORD_NO
,DATE_FORMAT(HCB.REG_DATE, '%Y-%m-%d') as REG_DT
,MM.NAME as REG_NM
,DATE_FORMAT(HCB.EVENT_START_DT, '%Y-%m-%d') as START_DT
@@ -65,7 +66,7 @@
ORDER BY ${webTreatmentPetitSort}
</when>
<otherwise>
ORDER BY CATEGORY_NO, POST_NO ASC
ORDER BY HCB.ORD_NO DESC
</otherwise>
</choose>
LIMIT 18446744073709551615
@@ -315,4 +316,16 @@
AND HC.CATEGORY_DIV_CD = #{categoryDivCd}
ORDER BY HC.CATEGORY_NO ASC
</select>
<update id="updateContentsBbsOrdNo" parameterType="hashmap">
/** ContentsBbsSql.updateContentsBbsOrdNo **/
UPDATE HP_CONTENTS_BBS
SET ORD_NO = #{ordNo}
,MOD_ID = #{modId}
,MOD_DATE = NOW()
WHERE USE_YN = 'Y'
AND CATEGORY_DIV_CD = #{categoryDivCd}
AND CATEGORY_NO = #{categoryNo}
AND POST_NO = #{postNo}
</update>
</mapper>

View File

@@ -391,6 +391,58 @@ function fn_deleteWebTreatmentPetit() {
});
}
/****************************************************************************
* 출력순서 저장
****************************************************************************/
function fn_saveOrdNo() {
if ("Y" != updateUseYn) {
modalEvent.warning("", "수정 권한이 없습니다.");
return false;
}
let orderList = [];
let totalRows = webTreatmentPetitGridOptions.api.getDisplayedRowCount();
for (let i = 0; i < totalRows; i++) {
let rowNode = webTreatmentPetitGridOptions.api.getDisplayedRowAtIndex(i);
orderList.push({
categoryNo: rowNode.data.categoryNo,
postNo: rowNode.data.postNo,
ordNo: totalRows - i // 상단이 큰 값 (DESC 정렬)
});
}
modalEvent.info("순서저장", "변경된 출력순서를 저장하시겠습니까?", function () {
let data = {
menuClass: menuClass,
categoryDivCd: categoryDivCd,
orderList: orderList
};
$.ajax({
url: encodeURI('/contentsBbs/updateOrdNo.do'),
data: JSON.stringify(data),
dataType: "json",
contentType: 'application/json; charset=utf-8',
type: 'POST',
async: true,
success: function (data) {
if ('0' == data.msgCode) {
modalEvent.success("순서저장 성공", data.msgDesc, function () {
$("#btnSaveOrdNo").prop("disabled", true).css("opacity", "0.5");
fn_selectListWebTreatmentPetitJson();
});
} else {
modalEvent.danger("순서저장 오류", data.msgDesc);
}
},
error: function (xhr, status, error) {
modalEvent.danger("순서저장 오류", "순서 저장 중 오류가 발생하였습니다. 잠시후 다시시도하십시오.");
}
});
});
}
/****************************************************************************
* 검색 엔터 이벤트
****************************************************************************/
@@ -504,7 +556,7 @@ function fn_updateWebTreatmentPetitIntro(postNo, categoryNo) {
let webTreatmentPetitColumnDefs = [
{ field: "checkbox", headerName: "", minWidth: 55, maxWidth: 55, headerCheckboxSelection: true, checkboxSelection: true },
{ field: "checkbox", headerName: "", minWidth: 55, maxWidth: 55, rowDrag: true, headerCheckboxSelection: true, checkboxSelection: true },
{ field: "rowNum", headerName: "번호", minWidth: 60, maxWidth: 60, sortable: false, cellStyle: { textAlign: 'center' } },
{ field: "categoryNm", headerName: "카테고리", minWidth: 120, maxWidth: 130, cellStyle: { textAlign: 'center' } },
{ field: "title", headerName: "제목", minWidth: 150, cellStyle: { cursor: 'pointer', color: '#3985EA' } },
@@ -517,7 +569,7 @@ let webTreatmentPetitColumnDefs = [
console.log('Current categoryDivCd:', categoryDivCd);
if (categoryDivCd === '02' || categoryDivCd === '04') {
webTreatmentPetitColumnDefs = [
{ field: "checkbox", headerName: "", minWidth: 55, maxWidth: 55, headerCheckboxSelection: true, checkboxSelection: true },
{ field: "checkbox", headerName: "", minWidth: 55, maxWidth: 55, rowDrag: true, headerCheckboxSelection: true, checkboxSelection: true },
{ field: "rowNum", headerName: "번호", minWidth: 60, maxWidth: 60, sortable: false, cellStyle: { textAlign: 'center' } },
{ field: "categoryNm", headerName: "카테고리", minWidth: 120, maxWidth: 130, cellStyle: { textAlign: 'center' } },
{ field: "title", headerName: "제목", minWidth: 150, cellStyle: { cursor: 'pointer', color: '#3985EA' } },
@@ -533,6 +585,8 @@ if (categoryDivCd === '02' || categoryDivCd === '04') {
// let the grid know which columns and what data to use
let webTreatmentPetitGridOptions = {
suppressRowTransform: true,
rowDragManaged: true,
animateRows: true,
columnDefs: webTreatmentPetitColumnDefs,
defaultColDef: { // 리스트 기본 설정
flex: 1,
@@ -562,6 +616,10 @@ let webTreatmentPetitGridOptions = {
fn_updateWebTreatmentPetitIntro(cell.data.postNo, cell.data.categoryNo);
}
},
onRowDragEnd: function (event) {
// 드래그 완료 시 순서저장 버튼 활성화
$("#btnSaveOrdNo").prop("disabled", false).css("opacity", "1");
},
onSelectionChanged: function (treatmentpetit) { //체크박스 선택
delList = treatmentpetit.api.getSelectedRows();
console.log(delList);
@@ -679,6 +737,11 @@ function fn_pageTreatmentPetit() {
fn_deleteWebTreatmentPetit();
});
// 순서저장 버튼
$("#btnSaveOrdNo").click(function () {
fn_saveOrdNo();
});
// 기간 선택 콤보 이벤트
const target = $("#webTreatmentPetitSearchDateType").siblings("ul.select_option_list");
target.find("li.option_list_item").click(function () {

View File

@@ -73,6 +73,10 @@
</div>
<div class="right_btn_box">
<button id="btnSaveOrdNo" class="treatmentpetit_btn" disabled
style="opacity: 0.5; margin-right: 5px;">
<img src="/image/web/notice_btn_icon.svg" alt="순서저장">순서저장
</button>
<button id="btnInsertWebTreatmentPetit" class="treatmentpetit_btn">
<img src="/image/web/notice_btn_icon.svg" alt="등록">등록
</button>
@@ -98,7 +102,7 @@
</th:block>
<th:block layout:fragment="layout_script">
<script src="/js/web/ag-grid-community-29.3.5.min.js"></script>
<script src="/js/web/contentsBbs/ContentsBbsSelectList.js?v=3"></script>
<script src="/js/web/contentsBbs/ContentsBbsSelectList.js?v=4"></script>
</th:block>
</html>