From a75bcc7c2b0fc98bd3a8abc100a4ad4ec11b9c26 Mon Sep 17 00:00:00 2001 From: wyu <kknd09321@nate.com> Date: 화, 28 12월 2021 15:54:35 +0900 Subject: [PATCH] Merge branch 'master' of http://192.168.0.25:9001/r/owl-kisa --- src/main/java/kr/wisestone/owl/web/controller/QnaController.java | 21 + src/main/webapp/scripts/app/common/common.controller.js | 8 src/main/webapp/views/user/userModify.html | 1 src/main/webapp/views/qna/qnaList.html | 13 src/main/java/kr/wisestone/owl/service/GuideService.java | 7 src/main/java/kr/wisestone/owl/web/controller/NoticeController.java | 13 src/main/webapp/views/faq/faqList.html | 13 src/main/resources/mybatis/query-template/guide-template.xml | 33 ++ src/main/java/kr/wisestone/owl/service/QnaService.java | 7 src/main/webapp/scripts/app/guide/guideList.controller.js | 93 +++++ src/main/java/kr/wisestone/owl/mapper/GuideMapper.java | 4 src/main/java/kr/wisestone/owl/service/impl/NoticeServiceImpl.java | 15 src/main/java/kr/wisestone/owl/service/impl/IssueHistoryServiceImpl.java | 2 src/main/java/kr/wisestone/owl/web/controller/FaqController.java | 21 + src/main/webapp/views/common/sidebar.html | 6 src/main/java/kr/wisestone/owl/service/FaqService.java | 7 src/main/java/kr/wisestone/owl/service/impl/FaqServiceImpl.java | 90 +++++ src/main/resources/mybatis/query-template/faq-template.xml | 33 ++ src/main/webapp/scripts/app/qna/qnaList.controller.js | 79 +++++ src/main/java/kr/wisestone/owl/service/impl/QnaServiceImpl.java | 64 ++++ src/main/java/kr/wisestone/owl/vo/NoticeVo.java | 9 src/main/resources/system_prod.properties | 4 src/main/webapp/views/guide/guideList.html | 13 src/main/resources/mybatis/query-template/notice-template.xml | 2 src/main/java/kr/wisestone/owl/web/controller/GuideController.java | 21 + src/main/java/kr/wisestone/owl/service/impl/GuideServiceImpl.java | 91 +++++ src/main/webapp/scripts/app/faq/faqList.controller.js | 93 +++++ src/main/webapp/i18n/ko/global.json | 21 + src/main/webapp/scripts/app/notice/noticeList.controller.js | 79 +++++ src/main/java/kr/wisestone/owl/mapper/FaqMapper.java | 4 src/main/webapp/WEB-INF/i18n/code_ko_KR.properties | 9 src/main/webapp/custom_components/js-table/tableColumnGenerator.directive.js | 9 src/main/java/kr/wisestone/owl/service/NoticeService.java | 2 src/main/webapp/views/common/header.html | 2 34 files changed, 843 insertions(+), 46 deletions(-) diff --git a/src/main/java/kr/wisestone/owl/mapper/FaqMapper.java b/src/main/java/kr/wisestone/owl/mapper/FaqMapper.java index 4589538..03a5313 100644 --- a/src/main/java/kr/wisestone/owl/mapper/FaqMapper.java +++ b/src/main/java/kr/wisestone/owl/mapper/FaqMapper.java @@ -11,4 +11,8 @@ List<Map<String, Object>> find(FaqCondition faqCondition); Long count(FaqCondition faqCondition); + + List<Map<String, Object>> findNotActivation(FaqCondition faqCondition); + + Long countNotActivation(FaqCondition faqCondition); } diff --git a/src/main/java/kr/wisestone/owl/mapper/GuideMapper.java b/src/main/java/kr/wisestone/owl/mapper/GuideMapper.java index 6aa1ef5..01f4871 100644 --- a/src/main/java/kr/wisestone/owl/mapper/GuideMapper.java +++ b/src/main/java/kr/wisestone/owl/mapper/GuideMapper.java @@ -11,4 +11,8 @@ List<Map<String, Object>> find(GuideCondition guideCondition); Long count(GuideCondition guideCondition); + + List<Map<String, Object>> findNotActivation(GuideCondition guideCondition); + + Long countNotActivation(GuideCondition guideCondition); } diff --git a/src/main/java/kr/wisestone/owl/service/FaqService.java b/src/main/java/kr/wisestone/owl/service/FaqService.java index f969424..b06bbab 100644 --- a/src/main/java/kr/wisestone/owl/service/FaqService.java +++ b/src/main/java/kr/wisestone/owl/service/FaqService.java @@ -8,7 +8,10 @@ import kr.wisestone.owl.web.form.GuideForm; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.ui.Model; +import org.springframework.web.servlet.ModelAndView; +import javax.servlet.http.HttpServletRequest; import java.util.List; import java.util.Map; @@ -24,4 +27,8 @@ Faq activeFaq(FaqForm faqForm); void detailFaq(Map<String, Object> resJsonData, FaqCondition faqCondition); + + ModelAndView downloadExcel(HttpServletRequest request, Model model); + + void remove(FaqForm make); } diff --git a/src/main/java/kr/wisestone/owl/service/GuideService.java b/src/main/java/kr/wisestone/owl/service/GuideService.java index 2f7db78..495162d 100644 --- a/src/main/java/kr/wisestone/owl/service/GuideService.java +++ b/src/main/java/kr/wisestone/owl/service/GuideService.java @@ -6,7 +6,10 @@ import kr.wisestone.owl.web.form.GuideForm; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.ui.Model; +import org.springframework.web.servlet.ModelAndView; +import javax.servlet.http.HttpServletRequest; import java.util.List; import java.util.Map; @@ -22,4 +25,8 @@ Guide activeGuide(GuideForm guideForm); void detailGuide(Map<String, Object> resJsonData, GuideCondition guideCondition); + + ModelAndView downloadExcel(HttpServletRequest request, Model model); + + void remove(GuideForm make); } diff --git a/src/main/java/kr/wisestone/owl/service/NoticeService.java b/src/main/java/kr/wisestone/owl/service/NoticeService.java index cd89cbb..dbb25e8 100644 --- a/src/main/java/kr/wisestone/owl/service/NoticeService.java +++ b/src/main/java/kr/wisestone/owl/service/NoticeService.java @@ -28,4 +28,6 @@ void sendNotice(NoticeForm noticeForm); ModelAndView downloadExcel(HttpServletRequest request, Model model); + + void remove(NoticeForm make); } diff --git a/src/main/java/kr/wisestone/owl/service/QnaService.java b/src/main/java/kr/wisestone/owl/service/QnaService.java index 8a4302c..c30dacc 100644 --- a/src/main/java/kr/wisestone/owl/service/QnaService.java +++ b/src/main/java/kr/wisestone/owl/service/QnaService.java @@ -6,7 +6,10 @@ import kr.wisestone.owl.web.form.QnaForm; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.ui.Model; +import org.springframework.web.servlet.ModelAndView; +import javax.servlet.http.HttpServletRequest; import java.util.List; import java.util.Map; @@ -21,4 +24,8 @@ Qna modifyQna(QnaForm qnaForm); void detailQna(Map<String, Object> resJsonData, QnaCondition qnaCondition); + + ModelAndView downloadExcel(HttpServletRequest request, Model model); + + void remove(QnaForm make); } diff --git a/src/main/java/kr/wisestone/owl/service/impl/FaqServiceImpl.java b/src/main/java/kr/wisestone/owl/service/impl/FaqServiceImpl.java index d796c94..aa6eaea 100644 --- a/src/main/java/kr/wisestone/owl/service/impl/FaqServiceImpl.java +++ b/src/main/java/kr/wisestone/owl/service/impl/FaqServiceImpl.java @@ -1,29 +1,38 @@ package kr.wisestone.owl.service.impl; +import com.google.common.collect.Lists; +import kr.wisestone.owl.common.ExcelConditionCheck; import kr.wisestone.owl.config.kafka.KafkaSender; import kr.wisestone.owl.constant.Constants; +import kr.wisestone.owl.constant.MngPermission; import kr.wisestone.owl.constant.MsgConstants; import kr.wisestone.owl.domain.Faq; import kr.wisestone.owl.domain.Guide; import kr.wisestone.owl.domain.User; +import kr.wisestone.owl.domain.UserLevel; import kr.wisestone.owl.exception.OwlRuntimeException; import kr.wisestone.owl.mapper.FaqMapper; +import kr.wisestone.owl.mapper.NoticeMapper; import kr.wisestone.owl.repository.FaqRepository; -import kr.wisestone.owl.service.FaqService; -import kr.wisestone.owl.service.UserService; +import kr.wisestone.owl.service.*; import kr.wisestone.owl.util.ConvertUtil; -import kr.wisestone.owl.vo.FaqVo; -import kr.wisestone.owl.vo.ResPage; +import kr.wisestone.owl.vo.*; import kr.wisestone.owl.web.condition.FaqCondition; +import kr.wisestone.owl.web.condition.NoticeCondition; import kr.wisestone.owl.web.form.FaqForm; import kr.wisestone.owl.web.form.GuideForm; +import kr.wisestone.owl.web.form.NoticeForm; +import kr.wisestone.owl.web.view.ExcelView; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.ui.Model; +import org.springframework.web.servlet.ModelAndView; +import javax.servlet.http.HttpServletRequest; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -42,6 +51,21 @@ @Autowired private FaqMapper faqMapper; + + @Autowired + private WorkspaceService workspaceService; + + @Autowired + private UserLevelService userLevelService; + + @Autowired + private UserWorkspaceService userWorkspaceService; + + @Autowired + private ExcelView excelView; + + @Autowired + private ExcelConditionCheck excelConditionCheck; @Override protected JpaRepository<Faq, Long> getRepository() { @@ -78,8 +102,19 @@ faqCondition.setPageSize(pageable.getPageSize()); faqCondition.setTitle(faqCondition.getTitle()); - List<Map<String, Object>> results = this.faqMapper.find(faqCondition); - Long totalCount = this.faqMapper.count(faqCondition); + User user = this.webAppUtil.getLoginUserObject(); + UserLevel userLevel = this.userLevelService.getUserLevel(user.getUserLevel().getId()); + + List<Map<String, Object>> results = Lists.newArrayList(); + Long totalCount = 0L; + if (this.userWorkspaceService.checkWorkspaceManager(user) + || MngPermission.checkMngPermission(userLevel.getPermission(), MngPermission.USER_PERMISSION_MNG_FAQ)) { + results = this.faqMapper.find(faqCondition); + totalCount = this.faqMapper.count(faqCondition); + } else { + results = this.faqMapper.findNotActivation(faqCondition); + totalCount = this.faqMapper.countNotActivation(faqCondition); + } int totalPage = (int) Math.ceil((totalCount - 1) / pageable.getPageSize()) + 1; List<FaqVo> faqVos = ConvertUtil.convertListToListClass(results, FaqVo.class); @@ -164,4 +199,47 @@ resJsonData.put(Constants.RES_KEY_CONTENTS, faqVo); } + + @Override + public void remove(FaqForm faqForm) { + if (faqForm.getRemoveIds().size() < 1) { + throw new OwlRuntimeException( + this.messageAccessor.getMessage(MsgConstants.COMPANY_REMOVE_NOT_SELECT)); + } + for (Long id : faqForm.getRemoveIds()) { + this.faqRepository.deleteById(id); + this.faqRepository.flush(); + } + } + + @Override + public ModelAndView downloadExcel(HttpServletRequest request, Model model) { + ModelAndView modelAndView = this.workspaceService.checkUseExcelDownload(model); + if (modelAndView != null) { + return modelAndView; + } + + Map<String, Object> conditions = new HashMap<>(); + // �뿊�� �떎�슫濡쒕뱶�뿉 �븘�슂�븳 寃��깋 議곌굔 �젙蹂대�� 異붿텧�븯怨� 寃��깋 議곌굔 異붿텧�뿉 �삤瑜섍� 諛쒖깮�븯硫� 寃쎄퀬瑜� �몴�떆�빐以��떎. + modelAndView = this.excelConditionCheck.checkCondition(conditions, request, model); + if (modelAndView != null) { + return modelAndView; + } + + FaqCondition faqCondition = FaqCondition.make(conditions); + List<Map<String, Object>> results = this.faqMapper.find(faqCondition); + List<FaqVo> faqVos = ConvertUtil.convertListToListClass(results, FaqVo.class); + + // code_ko_KR �뿉 code紐� �꽕�젙 + ExportExcelVo excelInfo = new ExportExcelVo(); + excelInfo.setFileName(this.messageAccessor.message("FAQ 紐⑸줉")); + excelInfo.addAttrInfos(new ExportExcelAttrVo("title", this.messageAccessor.message("faq.title"), 6, ExportExcelAttrVo.ALIGN_CENTER)); + excelInfo.addAttrInfos(new ExportExcelAttrVo("registerDate", this.messageAccessor.message("faq.registerDate"), 10, ExportExcelAttrVo.ALIGN_CENTER)); + excelInfo.addAttrInfos(new ExportExcelAttrVo("writer", this.messageAccessor.message("faq.registerId"), 10, ExportExcelAttrVo.ALIGN_CENTER)); + + excelInfo.setDatas(faqVos); + + model.addAttribute(Constants.EXCEL, excelInfo); + return new ModelAndView(this.excelView); + } } diff --git a/src/main/java/kr/wisestone/owl/service/impl/GuideServiceImpl.java b/src/main/java/kr/wisestone/owl/service/impl/GuideServiceImpl.java index 4cb9a19..2c9b7d3 100644 --- a/src/main/java/kr/wisestone/owl/service/impl/GuideServiceImpl.java +++ b/src/main/java/kr/wisestone/owl/service/impl/GuideServiceImpl.java @@ -1,26 +1,38 @@ package kr.wisestone.owl.service.impl; +import com.google.common.collect.Lists; +import kr.wisestone.owl.common.ExcelConditionCheck; import kr.wisestone.owl.constant.Constants; +import kr.wisestone.owl.constant.MngPermission; import kr.wisestone.owl.constant.MsgConstants; import kr.wisestone.owl.domain.Guide; +import kr.wisestone.owl.domain.User; +import kr.wisestone.owl.domain.UserLevel; import kr.wisestone.owl.exception.OwlRuntimeException; import kr.wisestone.owl.mapper.GuideMapper; import kr.wisestone.owl.repository.GuideRepository; import kr.wisestone.owl.service.GuideService; +import kr.wisestone.owl.service.UserLevelService; +import kr.wisestone.owl.service.UserWorkspaceService; +import kr.wisestone.owl.service.WorkspaceService; import kr.wisestone.owl.util.CommonUtil; import kr.wisestone.owl.util.ConvertUtil; -import kr.wisestone.owl.vo.GuideVo; -import kr.wisestone.owl.vo.ManageUserVo; -import kr.wisestone.owl.vo.ResPage; +import kr.wisestone.owl.vo.*; import kr.wisestone.owl.web.condition.GuideCondition; +import kr.wisestone.owl.web.condition.NoticeCondition; import kr.wisestone.owl.web.form.GuideForm; +import kr.wisestone.owl.web.form.NoticeForm; +import kr.wisestone.owl.web.view.ExcelView; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.ui.Model; +import org.springframework.web.servlet.ModelAndView; +import javax.servlet.http.HttpServletRequest; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -33,6 +45,21 @@ @Autowired private GuideMapper guideMapper; + + @Autowired + private WorkspaceService workspaceService; + + @Autowired + private ExcelView excelView; + + @Autowired + private ExcelConditionCheck excelConditionCheck; + + @Autowired + private UserLevelService userLevelService; + + @Autowired + private UserWorkspaceService userWorkspaceService; @Override protected JpaRepository<Guide, Long> getRepository() { @@ -69,8 +96,19 @@ guideCondition.setPageSize(pageable.getPageSize()); guideCondition.setTitle(guideCondition.getTitle()); - List<Map<String, Object>> results = this.guideMapper.find(guideCondition); - Long totalCount = this.guideMapper.count(guideCondition); + User user = this.webAppUtil.getLoginUserObject(); + UserLevel userLevel = this.userLevelService.getUserLevel(user.getUserLevel().getId()); + + List<Map<String, Object>> results = Lists.newArrayList(); + Long totalCount = 0L; + if (this.userWorkspaceService.checkWorkspaceManager(user) + || MngPermission.checkMngPermission(userLevel.getPermission(), MngPermission.USER_PERMISSION_MNG_GUIDE)) { + results = this.guideMapper.find(guideCondition); + totalCount = this.guideMapper.count(guideCondition); + } else { + results = this.guideMapper.findNotActivation(guideCondition); + totalCount = this.guideMapper.countNotActivation(guideCondition); + } int totalPage = (int) Math.ceil((totalCount - 1) / pageable.getPageSize()) + 1; List<GuideVo> guideVos = ConvertUtil.convertListToListClass(results, GuideVo.class); @@ -158,4 +196,47 @@ resJsonData.put(Constants.RES_KEY_CONTENTS, guideVo); } + + @Override + public void remove(GuideForm guideForm) { + if (guideForm.getRemoveIds().size() < 1) { + throw new OwlRuntimeException( + this.messageAccessor.getMessage(MsgConstants.COMPANY_REMOVE_NOT_SELECT)); + } + for (Long id : guideForm.getRemoveIds()) { + this.guideRepository.deleteById(id); + this.guideRepository.flush(); + } + } + + @Override + public ModelAndView downloadExcel(HttpServletRequest request, Model model) { + ModelAndView modelAndView = this.workspaceService.checkUseExcelDownload(model); + if (modelAndView != null) { + return modelAndView; + } + + Map<String, Object> conditions = new HashMap<>(); + // �뿊�� �떎�슫濡쒕뱶�뿉 �븘�슂�븳 寃��깋 議곌굔 �젙蹂대�� 異붿텧�븯怨� 寃��깋 議곌굔 異붿텧�뿉 �삤瑜섍� 諛쒖깮�븯硫� 寃쎄퀬瑜� �몴�떆�빐以��떎. + modelAndView = this.excelConditionCheck.checkCondition(conditions, request, model); + if (modelAndView != null) { + return modelAndView; + } + + GuideCondition guideCondition = GuideCondition.make(conditions); + List<Map<String, Object>> results = this.guideMapper.find(guideCondition); + List<GuideVo> guideVos = ConvertUtil.convertListToListClass(results, GuideVo.class); + + // code_ko_KR �뿉 code紐� �꽕�젙 + ExportExcelVo excelInfo = new ExportExcelVo(); + excelInfo.setFileName(this.messageAccessor.message("媛��씠�뱶 紐⑸줉")); + excelInfo.addAttrInfos(new ExportExcelAttrVo("title", this.messageAccessor.message("guide.title"), 6, ExportExcelAttrVo.ALIGN_CENTER)); + excelInfo.addAttrInfos(new ExportExcelAttrVo("registerDate", this.messageAccessor.message("guide.registerDate"), 10, ExportExcelAttrVo.ALIGN_CENTER)); + excelInfo.addAttrInfos(new ExportExcelAttrVo("writer", this.messageAccessor.message("guide.registerId"), 10, ExportExcelAttrVo.ALIGN_CENTER)); + + excelInfo.setDatas(guideVos); + + model.addAttribute(Constants.EXCEL, excelInfo); + return new ModelAndView(this.excelView); + } } diff --git a/src/main/java/kr/wisestone/owl/service/impl/IssueHistoryServiceImpl.java b/src/main/java/kr/wisestone/owl/service/impl/IssueHistoryServiceImpl.java index 3f9f4ec..80b12e2 100644 --- a/src/main/java/kr/wisestone/owl/service/impl/IssueHistoryServiceImpl.java +++ b/src/main/java/kr/wisestone/owl/service/impl/IssueHistoryServiceImpl.java @@ -450,7 +450,7 @@ public void recordRemoveWorkflowToIssueStatus(String oldIssueStatusName, String newIssueStatusName, StringBuilder description) { description.append("<ul class=\"activity-list\">"); - String title = "<span translate=\"common.upddetectReservationIssueStatusateWorkflowNotExist\">蹂�寃쎈맂 �썙�겕�뵆濡쒖슦�뿉�꽌 �긽�깭媛� 議댁옱�븯吏� �븡�븘 �씠�뒋�쓽 �긽�깭媛� 蹂�寃쎈릺�뿀�뒿�땲�떎.</span>"; + String title = "<span translate=\"common.updateWorkflowNotExist\">蹂�寃쎈맂 �썙�겕�뵆濡쒖슦�뿉�꽌 �긽�깭媛� 議댁옱�븯吏� �븡�븘 �씠�뒋�쓽 �긽�깭媛� 蹂�寃쎈릺�뿀�뒿�땲�떎.</span>"; // �씠�젰 �젙蹂대�� html �깭洹몃줈 留뚮뱾�뼱 以��떎. this.makeIssueHistoryHtml(description, title, oldIssueStatusName, newIssueStatusName); diff --git a/src/main/java/kr/wisestone/owl/service/impl/NoticeServiceImpl.java b/src/main/java/kr/wisestone/owl/service/impl/NoticeServiceImpl.java index da7d162..480f85b 100644 --- a/src/main/java/kr/wisestone/owl/service/impl/NoticeServiceImpl.java +++ b/src/main/java/kr/wisestone/owl/service/impl/NoticeServiceImpl.java @@ -16,6 +16,7 @@ import kr.wisestone.owl.vo.*; import kr.wisestone.owl.web.condition.CompanyFieldCondition; import kr.wisestone.owl.web.condition.NoticeCondition; +import kr.wisestone.owl.web.form.CompanyFieldForm; import kr.wisestone.owl.web.form.NoticeForm; import kr.wisestone.owl.web.view.ExcelView; import org.apache.commons.lang3.StringUtils; @@ -171,6 +172,18 @@ } @Override + public void remove(NoticeForm noticeForm) { + if (noticeForm.getRemoveIds().size() < 1) { + throw new OwlRuntimeException( + this.messageAccessor.getMessage(MsgConstants.COMPANY_REMOVE_NOT_SELECT)); + } + for (Long id : noticeForm.getRemoveIds()) { + this.noticeRepository.deleteById(id); + this.noticeRepository.flush(); + } + } + + @Override public ModelAndView downloadExcel(HttpServletRequest request, Model model) { ModelAndView modelAndView = this.workspaceService.checkUseExcelDownload(model); if (modelAndView != null) { @@ -193,7 +206,7 @@ excelInfo.setFileName(this.messageAccessor.message("怨듭��궗�빆 紐⑸줉")); excelInfo.addAttrInfos(new ExportExcelAttrVo("title", this.messageAccessor.message("notice.title"), 6, ExportExcelAttrVo.ALIGN_CENTER)); excelInfo.addAttrInfos(new ExportExcelAttrVo("registerDate", this.messageAccessor.message("notice.registerDate"), 10, ExportExcelAttrVo.ALIGN_CENTER)); - excelInfo.addAttrInfos(new ExportExcelAttrVo("registerId", this.messageAccessor.message("notice.registerId"), 10, ExportExcelAttrVo.ALIGN_CENTER)); + excelInfo.addAttrInfos(new ExportExcelAttrVo("writer", this.messageAccessor.message("notice.registerId"), 10, ExportExcelAttrVo.ALIGN_CENTER)); excelInfo.setDatas(noticeVos); diff --git a/src/main/java/kr/wisestone/owl/service/impl/QnaServiceImpl.java b/src/main/java/kr/wisestone/owl/service/impl/QnaServiceImpl.java index 92b538a..2c1aef7 100644 --- a/src/main/java/kr/wisestone/owl/service/impl/QnaServiceImpl.java +++ b/src/main/java/kr/wisestone/owl/service/impl/QnaServiceImpl.java @@ -1,5 +1,6 @@ package kr.wisestone.owl.service.impl; +import kr.wisestone.owl.common.ExcelConditionCheck; import kr.wisestone.owl.config.kafka.KafkaSender; import kr.wisestone.owl.constant.Constants; import kr.wisestone.owl.constant.MsgConstants; @@ -9,18 +10,25 @@ import kr.wisestone.owl.repository.QnaRepository; import kr.wisestone.owl.service.QnaService; import kr.wisestone.owl.service.UserService; +import kr.wisestone.owl.service.WorkspaceService; import kr.wisestone.owl.util.ConvertUtil; -import kr.wisestone.owl.vo.QnaVo; -import kr.wisestone.owl.vo.ResPage; +import kr.wisestone.owl.vo.*; +import kr.wisestone.owl.web.condition.NoticeCondition; import kr.wisestone.owl.web.condition.QnaCondition; +import kr.wisestone.owl.web.form.NoticeForm; import kr.wisestone.owl.web.form.QnaForm; +import kr.wisestone.owl.web.view.ExcelView; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.ui.Model; +import org.springframework.web.servlet.ModelAndView; +import javax.servlet.http.HttpServletRequest; +import java.util.HashMap; import java.util.List; import java.util.Map; @@ -38,6 +46,15 @@ @Autowired private QnaMapper qnaMapper; + + @Autowired + private WorkspaceService workspaceService; + + @Autowired + private ExcelView excelView; + + @Autowired + private ExcelConditionCheck excelConditionCheck; @Override protected JpaRepository<Qna, Long> getRepository() { @@ -130,4 +147,47 @@ resJsonData.put(Constants.RES_KEY_CONTENTS, qnaVo); } + + @Override + public void remove(QnaForm qnaForm) { + if (qnaForm.getRemoveIds().size() < 1) { + throw new OwlRuntimeException( + this.messageAccessor.getMessage(MsgConstants.COMPANY_REMOVE_NOT_SELECT)); + } + for (Long id : qnaForm.getRemoveIds()) { + this.qnaRepository.deleteById(id); + this.qnaRepository.flush(); + } + } + + @Override + public ModelAndView downloadExcel(HttpServletRequest request, Model model) { + ModelAndView modelAndView = this.workspaceService.checkUseExcelDownload(model); + if (modelAndView != null) { + return modelAndView; + } + + Map<String, Object> conditions = new HashMap<>(); + // �뿊�� �떎�슫濡쒕뱶�뿉 �븘�슂�븳 寃��깋 議곌굔 �젙蹂대�� 異붿텧�븯怨� 寃��깋 議곌굔 異붿텧�뿉 �삤瑜섍� 諛쒖깮�븯硫� 寃쎄퀬瑜� �몴�떆�빐以��떎. + modelAndView = this.excelConditionCheck.checkCondition(conditions, request, model); + if (modelAndView != null) { + return modelAndView; + } + + QnaCondition qnaCondition = QnaCondition.make(conditions); + List<Map<String, Object>> results = this.qnaMapper.find(qnaCondition); + List<QnaVo> qnaVos = ConvertUtil.convertListToListClass(results, QnaVo.class); + + // code_ko_KR �뿉 code紐� �꽕�젙 + ExportExcelVo excelInfo = new ExportExcelVo(); + excelInfo.setFileName(this.messageAccessor.message("QNA 紐⑸줉")); + excelInfo.addAttrInfos(new ExportExcelAttrVo("title", this.messageAccessor.message("qna.title"), 6, ExportExcelAttrVo.ALIGN_CENTER)); + excelInfo.addAttrInfos(new ExportExcelAttrVo("registerDate", this.messageAccessor.message("qna.registerDate"), 10, ExportExcelAttrVo.ALIGN_CENTER)); + excelInfo.addAttrInfos(new ExportExcelAttrVo("writer", this.messageAccessor.message("qna.registerId"), 10, ExportExcelAttrVo.ALIGN_CENTER)); + + excelInfo.setDatas(qnaVos); + + model.addAttribute(Constants.EXCEL, excelInfo); + return new ModelAndView(this.excelView); + } } diff --git a/src/main/java/kr/wisestone/owl/vo/NoticeVo.java b/src/main/java/kr/wisestone/owl/vo/NoticeVo.java index 9bffab6..69b6fda 100644 --- a/src/main/java/kr/wisestone/owl/vo/NoticeVo.java +++ b/src/main/java/kr/wisestone/owl/vo/NoticeVo.java @@ -7,6 +7,7 @@ private Long id; private String title; private String description; + private String writer; private Boolean modifyPermissionCheck = Boolean.FALSE; // 怨듭� �궗�빆 �닔�젙�� 愿�由ъ옄留� 媛��뒫 public NoticeVo(){} @@ -35,6 +36,14 @@ this.description = description; } + public String getWriter() { + return writer; + } + + public void setWriter(String writer) { + this.writer = writer; + } + public Boolean getModifyPermissionCheck() { return modifyPermissionCheck; } diff --git a/src/main/java/kr/wisestone/owl/web/controller/FaqController.java b/src/main/java/kr/wisestone/owl/web/controller/FaqController.java index a8de623..2d28d62 100644 --- a/src/main/java/kr/wisestone/owl/web/controller/FaqController.java +++ b/src/main/java/kr/wisestone/owl/web/controller/FaqController.java @@ -5,15 +5,19 @@ import kr.wisestone.owl.web.condition.FaqCondition; import kr.wisestone.owl.web.form.EventForm; import kr.wisestone.owl.web.form.FaqForm; +import kr.wisestone.owl.web.form.NoticeForm; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Pageable; import org.springframework.http.MediaType; import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.servlet.ModelAndView; +import javax.servlet.http.HttpServletRequest; import java.util.HashMap; import java.util.Map; @@ -85,5 +89,22 @@ return this.setSuccessMessage(resJsonData); } + + @RequestMapping(value = "/faq/remove", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE) + public + @ResponseBody + Map<String, Object> remove(@RequestBody Map<String, Map<String, Object>> params) { + Map<String, Object> resJsonData = new HashMap<>(); + Map<String, Object> content = params.get(Constants.REQ_KEY_CONTENT); + + this.faqService.remove(FaqForm.make(content)); + + return this.setSuccessMessage(resJsonData); + } + + @RequestMapping(value = "/faq/downloadExcel", method = RequestMethod.POST) + public ModelAndView downloadExcel(HttpServletRequest request, Model model) { + return this.faqService.downloadExcel(request, model); + } } diff --git a/src/main/java/kr/wisestone/owl/web/controller/GuideController.java b/src/main/java/kr/wisestone/owl/web/controller/GuideController.java index 886abc6..1b81ec9 100644 --- a/src/main/java/kr/wisestone/owl/web/controller/GuideController.java +++ b/src/main/java/kr/wisestone/owl/web/controller/GuideController.java @@ -5,15 +5,19 @@ import kr.wisestone.owl.web.condition.GuideCondition; import kr.wisestone.owl.web.form.GuideForm; import kr.wisestone.owl.web.form.GuideForm; +import kr.wisestone.owl.web.form.NoticeForm; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Pageable; import org.springframework.http.MediaType; import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.servlet.ModelAndView; +import javax.servlet.http.HttpServletRequest; import java.util.HashMap; import java.util.Map; @@ -85,5 +89,22 @@ return this.setSuccessMessage(resJsonData); } + + @RequestMapping(value = "/guide/remove", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE) + public + @ResponseBody + Map<String, Object> remove(@RequestBody Map<String, Map<String, Object>> params) { + Map<String, Object> resJsonData = new HashMap<>(); + Map<String, Object> content = params.get(Constants.REQ_KEY_CONTENT); + + this.guideService.remove(GuideForm.make(content)); + + return this.setSuccessMessage(resJsonData); + } + + @RequestMapping(value = "/guide/downloadExcel", method = RequestMethod.POST) + public ModelAndView downloadExcel(HttpServletRequest request, Model model) { + return this.guideService.downloadExcel(request, model); + } } diff --git a/src/main/java/kr/wisestone/owl/web/controller/NoticeController.java b/src/main/java/kr/wisestone/owl/web/controller/NoticeController.java index 74a4969..c17abb4 100644 --- a/src/main/java/kr/wisestone/owl/web/controller/NoticeController.java +++ b/src/main/java/kr/wisestone/owl/web/controller/NoticeController.java @@ -3,6 +3,7 @@ import kr.wisestone.owl.constant.Constants; import kr.wisestone.owl.service.NoticeService; import kr.wisestone.owl.web.condition.NoticeCondition; +import kr.wisestone.owl.web.form.CompanyFieldForm; import kr.wisestone.owl.web.form.NoticeForm; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Pageable; @@ -88,6 +89,18 @@ return this.setSuccessMessage(resJsonData); } + // 怨듭� �궘�젣 + @RequestMapping(value = "/notice/remove", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE) + public + @ResponseBody + Map<String, Object> remove(@RequestBody Map<String, Map<String, Object>> params) { + Map<String, Object> resJsonData = new HashMap<>(); + Map<String, Object> content = params.get(Constants.REQ_KEY_CONTENT); + + this.noticeService.remove(NoticeForm.make(content)); + + return this.setSuccessMessage(resJsonData); + } @RequestMapping(value = "/notice/downloadExcel", method = RequestMethod.POST) public ModelAndView downloadExcel(HttpServletRequest request, Model model) { diff --git a/src/main/java/kr/wisestone/owl/web/controller/QnaController.java b/src/main/java/kr/wisestone/owl/web/controller/QnaController.java index 9f63733..2d528aa 100644 --- a/src/main/java/kr/wisestone/owl/web/controller/QnaController.java +++ b/src/main/java/kr/wisestone/owl/web/controller/QnaController.java @@ -3,16 +3,20 @@ import kr.wisestone.owl.constant.Constants; import kr.wisestone.owl.service.QnaService; import kr.wisestone.owl.web.condition.QnaCondition; +import kr.wisestone.owl.web.form.NoticeForm; import kr.wisestone.owl.web.form.QnaForm; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Pageable; import org.springframework.http.MediaType; import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.servlet.ModelAndView; +import javax.servlet.http.HttpServletRequest; import java.util.HashMap; import java.util.Map; @@ -72,5 +76,22 @@ return this.setSuccessMessage(resJsonData); } + + @RequestMapping(value = "/qna/remove", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE) + public + @ResponseBody + Map<String, Object> remove(@RequestBody Map<String, Map<String, Object>> params) { + Map<String, Object> resJsonData = new HashMap<>(); + Map<String, Object> content = params.get(Constants.REQ_KEY_CONTENT); + + this.qnaService.remove(QnaForm.make(content)); + + return this.setSuccessMessage(resJsonData); + } + + @RequestMapping(value = "/qna/downloadExcel", method = RequestMethod.POST) + public ModelAndView downloadExcel(HttpServletRequest request, Model model) { + return this.qnaService.downloadExcel(request, model); + } } diff --git a/src/main/resources/mybatis/query-template/faq-template.xml b/src/main/resources/mybatis/query-template/faq-template.xml index 3da048a..66edd4b 100644 --- a/src/main/resources/mybatis/query-template/faq-template.xml +++ b/src/main/resources/mybatis/query-template/faq-template.xml @@ -34,4 +34,37 @@ </if> </select> + <select id="findNotActivation" resultType="java.util.HashMap" parameterType="kr.wisestone.owl.web.condition.FaqCondition"> + SELECT + DISTINCT n.id as id, + n.title as title, + n.description as description, + n.register_id as registerId, + n.status as status, + u.name as writer, + SUBSTRING (n.register_date, 1, 10) as registerDate + FROM faq n + INNER JOIN user u on u.id = n.register_id + WHERE 1=1 + AND n.status > 0 + <if test="title != '' and title != null"> + AND n.title like CONCAT('%',#{title},'%') + </if> + ORDER BY ID DESC + <if test="page != null and !page.equals('')"> + limit #{pageSize} offset #{page}; + </if> + </select> + + <select id="countNotActivation" resultType="java.lang.Long" parameterType="kr.wisestone.owl.web.condition.FaqCondition"> + SELECT + count(DISTINCT n.id) + FROM faq n + WHERE 1=1 + AND n.status > 0 + <if test="title != '' and title != null"> + AND n.title like CONCAT('%',#{title},'%') + </if> + </select> + </mapper> diff --git a/src/main/resources/mybatis/query-template/guide-template.xml b/src/main/resources/mybatis/query-template/guide-template.xml index 75b976a..6b93775 100644 --- a/src/main/resources/mybatis/query-template/guide-template.xml +++ b/src/main/resources/mybatis/query-template/guide-template.xml @@ -34,4 +34,37 @@ </if> </select> + <select id="findNotActivation" resultType="java.util.HashMap" parameterType="kr.wisestone.owl.web.condition.GuideCondition"> + SELECT + DISTINCT n.id as id, + n.title as title, + n.description as description, + n.register_id as registerId, + n.status as status, + u.name as writer, + SUBSTRING (n.register_date, 1, 10) as registerDate + FROM guide n + INNER JOIN user u on u.id = n.register_id + WHERE 1=1 + AND n.status > 0 + <if test="title != '' and title != null"> + AND n.title like CONCAT('%',#{title},'%') + </if> + ORDER BY ID DESC + <if test="page != null and !page.equals('')"> + limit #{pageSize} offset #{page}; + </if> + </select> + + <select id="countNotActivation" resultType="java.lang.Long" parameterType="kr.wisestone.owl.web.condition.GuideCondition"> + SELECT + count(DISTINCT n.id) + FROM guide n + WHERE 1=1 + AND n.status > 0 + <if test="title != '' and title != null"> + AND n.title like CONCAT('%',#{title},'%') + </if> + </select> + </mapper> diff --git a/src/main/resources/mybatis/query-template/notice-template.xml b/src/main/resources/mybatis/query-template/notice-template.xml index 28024a8..ddc5c00 100644 --- a/src/main/resources/mybatis/query-template/notice-template.xml +++ b/src/main/resources/mybatis/query-template/notice-template.xml @@ -9,8 +9,10 @@ n.title as title, n.description as description, n.register_id as registerId, + u.name as writer, SUBSTRING (n.register_date, 1, 10) as registerDate FROM notice n + INNER JOIN user u on u.id = n.register_id WHERE 1=1 <if test="title != '' and title != null"> AND n.title like CONCAT('%',#{title},'%') diff --git a/src/main/resources/system_prod.properties b/src/main/resources/system_prod.properties index faf1461..22e64d0 100644 --- a/src/main/resources/system_prod.properties +++ b/src/main/resources/system_prod.properties @@ -71,14 +71,14 @@ # added by zenith at 20200623 use.aws=false -use.scheduler=false +use.scheduler=true # upload path attached.file.path=/dev-upload/ profile.file.path=/dev-profile # aws bucket name -aws.bucket.name=wisestone-test +aws.bucket.name=files # aws bucket access key aws.access.key=AKIARX6BJQMZKUYEEJVD aws.access.password=eAQvouvSJJFl47h2dkMJji/6OtzsGBGF4h9Df3qH diff --git a/src/main/webapp/WEB-INF/i18n/code_ko_KR.properties b/src/main/webapp/WEB-INF/i18n/code_ko_KR.properties index 4fd3b7b..d5a7dc0 100644 --- a/src/main/webapp/WEB-INF/i18n/code_ko_KR.properties +++ b/src/main/webapp/WEB-INF/i18n/code_ko_KR.properties @@ -124,6 +124,15 @@ notice.title=\uC81C\uBAA9 notice.registerDate=\uB4F1\uB85D\uC77C notice.registerId=\uB4F1\uB85D\uC790 +faq.title=\uC81C\uBAA9 +faq.registerDate=\uB4F1\uB85D\uC77C +faq.registerId=\uB4F1\uB85D\uC790 +guide.title=\uC81C\uBAA9 +guide.registerDate=\uB4F1\uB85D\uC77C +guide.registerId=\uB4F1\uB85D\uC790 +qna.title=\uC81C\uBAA9 +qna.registerDate=\uB4F1\uB85D\uC77C +qna.registerId=\uB4F1\uB85D\uC790 department.departmentName=\uBD80\uC11C\uBA85 department.departmentDescription=\uBD80\uC11C\uC124\uBA85 department.departmentCount=\uBD80\uC11C\uC778\uC6D0 diff --git a/src/main/webapp/custom_components/js-table/tableColumnGenerator.directive.js b/src/main/webapp/custom_components/js-table/tableColumnGenerator.directive.js index d881a4f..d2299f9 100644 --- a/src/main/webapp/custom_components/js-table/tableColumnGenerator.directive.js +++ b/src/main/webapp/custom_components/js-table/tableColumnGenerator.directive.js @@ -727,7 +727,8 @@ break; case "NOTICE_REGISTER": - makeTag += '<img src="/assets/images/logineyes.png" style="width:30px;"> <span class="fc-blue bold">OWL ITS TEAM</span>'; + //makeTag += '<img src="/assets/images/logineyes.png" style="width:30px;"> <span class="fc-blue bold">OWL ITS TEAM</span>'; + makeTag += '<img src="/assets/images/logineyes.png" style="width:30px;"> <span class="fc-blue bold">' + scope.data.writer+ '</span>'; break; case "GUIDE_MODIFY": if ($rootScope.checkMngPermission('USER_PERMISSION_MNG_GUIDE')) { @@ -783,11 +784,13 @@ makeTag += '<img src="/assets/images/logineyes.png" style="width:30px;"> <span class="fc-blue bold">' + scope.data.writer + '</span>'; break; case "FAQ_ACTIVE" : - makeTag += "<label class='switch'><input type='checkbox' ng-model='data.activation' ng-click='event.activation(data)'><span class='slider round'></span></label>"; + if ($rootScope.checkMngPermission('USER_PERMISSION_MNG_FAQ')) { + makeTag += "<label class='switch'><input type='checkbox' ng-model='data.activation' ng-click='event.activation(data)'><span class='slider round'></span></label>"; + } break; case "QNA_MODIFY": - if ($rootScope.checkMngPermission('USER_PERMISSION_MNG_QNA')) { + if ($rootScope.checkMngPermission('USER_PERMISSION_MNG_QNA') || $rootScope.user.id === scope.data.registerId) { makeTag += "<span class='titlename cursor table-word-break-all' ng-click='event.modify(data.id)'>" + scope.data.title.replace(/</gi, '<') + "</span>"; } else { diff --git a/src/main/webapp/i18n/ko/global.json b/src/main/webapp/i18n/ko/global.json index 661618c..e6ec15c 100644 --- a/src/main/webapp/i18n/ko/global.json +++ b/src/main/webapp/i18n/ko/global.json @@ -562,7 +562,10 @@ "failedNoticeRegistration": "怨듭��궗�빆 �벑濡� �떎�뙣", "failedToLookupNotificationList": "怨듭� �궗�빆 紐⑸줉 議고쉶 �떎�뙣", "failedToModifyNotice": "怨듭� �궗�빆 �닔�젙 �떎�뙣", - "failedToLookupNotificationDetails": "怨듭��궗�빆 �긽�꽭 �젙蹂� 議고쉶 �떎�뙣" + "failedToLookupNotificationDetails": "怨듭��궗�빆 �긽�꽭 �젙蹂� 議고쉶 �떎�뙣", + "delete": "怨듭��궗�빆 �궘�젣", + "wantToDeleteSelectNotice": "�꽑�깮�븳 怨듭��궗�빆�쓣 �궘�젣�븯寃좎뒿�땲源�? �궘�젣�맂 怨듭��궗�빆�� 蹂듦뎄�븷 �닔 �뾾�뒿�땲�떎.", + "notHaveDeletePermissionExists": "�궘�젣 沅뚰븳�씠 �뾾�뒗 怨듭��궗�빆�씠 議댁옱�빀�땲�떎." }, "manageUser": { "manageUser": "�궗�슜�옄 沅뚰븳 愿�由�", @@ -597,7 +600,10 @@ "failedToModifyFAQ": "FAQ �닔�젙 �떎�뙣", "failedToLookupFAQDetails": "FAQ �긽�꽭 �젙蹂� 議고쉶 �떎�뙣", "failedToActivation": "FAQ �솢�꽦 �떎�뙣", - "activation": "�솢�꽦�솕" + "activation": "�솢�꽦�솕", + "delete": "FAQ �궘�젣", + "wantToDeleteSelect": "�꽑�깮�븳 FAQ瑜� �궘�젣�븯寃좎뒿�땲源�? �궘�젣�맂 FAQ�뒗 蹂듦뎄�븷 �닔 �뾾�뒿�땲�떎.", + "notHaveDeletePermissionExists": "�궘�젣 沅뚰븳�씠 �뾾�뒗 FAQ媛� 議댁옱�빀�땲�떎." }, "QNA": { "QNA": "QnA", @@ -608,7 +614,10 @@ "failedQNARegistration": "QnA �벑濡� �떎�뙣.", "failedToLookupQNAList": "QnA 紐⑸줉 議고쉶 �떎�뙣", "failedToModifyQNA": "QnA �닔�젙 �떎�뙣", - "failedToLookupQNADetails": "QnA �긽�꽭 �젙蹂� 議고쉶 �떎�뙣" + "failedToLookupQNADetails": "QnA �긽�꽭 �젙蹂� 議고쉶 �떎�뙣", + "delete": "QnA �궘�젣", + "wantToDeleteSelect": "�꽑�깮�븳 QnA瑜� �궘�젣�븯寃좎뒿�땲源�? �궘�젣�맂 QnA�뒗 蹂듦뎄�븷 �닔 �뾾�뒿�땲�떎.", + "notHaveDeletePermissionExists": "�궘�젣 沅뚰븳�씠 �뾾�뒗 QnA媛� 議댁옱�빀�땲�떎." }, "event": { "event": "�씠踰ㅽ듃", @@ -634,7 +643,10 @@ "failedToModifyGuide": "媛��씠�뱶 �닔�젙 �떎�뙣", "failedToLookupGuideDetails": "媛��씠�뱶 �긽�꽭 �젙蹂� 議고쉶 �떎�뙣", "failedToActivation": "媛��씠�뱶 �솢�꽕 �떎�뙣", - "activation": "�솢�꽦�솕" + "activation": "�솢�꽦�솕", + "delete": "媛��씠�뱶 �궘�젣", + "wantToDeleteSelect": "�꽑�깮�븳 媛��씠�뱶瑜� �궘�젣�븯寃좎뒿�땲源�? �궘�젣�맂 媛��씠�뱶�뒗 蹂듦뎄�븷 �닔 �뾾�뒿�땲�떎.", + "notHaveDeletePermissionExists": "�궘�젣 沅뚰븳�씠 �뾾�뒗 媛��씠�뱶媛� 議댁옱�빀�땲�떎." }, "inquiry": { "toInquiry": "臾몄쓽�븯湲�", @@ -798,6 +810,7 @@ "disableParticipationWorkspace": "李몄뿬 �뾽臾� 怨듦컙 鍮꾪솢�꽦�솕 �븣由�", "disableParticipationWorkspaceMessage": "�쁽�옱 �씠�슜�븯怨� �엳�뒗 �뾽臾� 怨듦컙�뿉�꽌 �젣�쇅�릺�뿀�뒿�땲�떎.", "alertsAboutSystem": "�떆�뒪�뀥 �븣由� �젙蹂�", + "alertSystem": "�떆�뒪�뀥 �븣由�", "newAlert": "�깉濡쒖슫 �븣由쇱씠 �솕�뒿�땲�떎.", "pleaseWait": "�옞�떆留� 湲곕떎�젮二쇱꽭�슂...", "createIssue": "�씠�뒋 �깮�꽦", diff --git a/src/main/webapp/scripts/app/common/common.controller.js b/src/main/webapp/scripts/app/common/common.controller.js index 8a4e5bb..3ca4ae2 100644 --- a/src/main/webapp/scripts/app/common/common.controller.js +++ b/src/main/webapp/scripts/app/common/common.controller.js @@ -68,8 +68,12 @@ // 硫붿씤 �긽�떒 寃��깋 function searchAll() { - $rootScope.setCookie("searchKeyword", $scope.vm.searchAll.keyWord, 60000); - moveMenu("issues.list"); + if ($rootScope.isDefined($scope.vm.searchAll.keyWord)) { + $rootScope.setCookie("searchKeyword", $scope.vm.searchAll.keyWord, 60000); + moveMenu("issues.list"); + } else { + SweetAlert.warning($filter("translate")("common.alertSystem"), $filter("translate")("issue.pleaseEnterIssueKeyWord")); + } } function setLastIssueType() { diff --git a/src/main/webapp/scripts/app/faq/faqList.controller.js b/src/main/webapp/scripts/app/faq/faqList.controller.js index 9b5cc19..80b8f1a 100644 --- a/src/main/webapp/scripts/app/faq/faqList.controller.js +++ b/src/main/webapp/scripts/app/faq/faqList.controller.js @@ -18,6 +18,7 @@ makeTableConfigs : makeTableConfigs, // �뀒�씠釉� �꽕�젙 makeSearchConditions : makeSearchConditions, add : add, // faq �벑濡� + removes : removes }; // 蹂��닔 @@ -62,6 +63,10 @@ $scope.vm.tableConfigs = []; $scope.vm.tableConfigs.push($tableProvider.config() + .setDType("checkbox") + .setHWidth("width-20-p") + .setDAlign("text-center")); + $scope.vm.tableConfigs.push($tableProvider.config() .setHName("common.number") .setHWidth("width-60-p bold") .setDAlign("text-center") @@ -83,12 +88,14 @@ .setDAlign("text-center") .setDType("renderer") .setDRenderer("FAQ_REGISTER")); - $scope.vm.tableConfigs.push($tableProvider.config() - .setHName("guide.activation") - .setHWidth("width-80-p bold") - .setDType("renderer") - .setDAlign("text-center pdr0 pdt0 pdl0 pdb0") - .setDRenderer("FAQ_ACTIVE")); + if ($rootScope.checkMngPermission('USER_PERMISSION_MNG_FAQ')) { + $scope.vm.tableConfigs.push($tableProvider.config() + .setHName("guide.activation") + .setHWidth("width-80-p bold") + .setDType("renderer") + .setDAlign("text-center pdr0 pdt0 pdl0 pdb0") + .setDRenderer("FAQ_ACTIVE")); + } } // 紐⑸줉 議고쉶 @@ -181,6 +188,80 @@ }); } + function removes() { + var removeIds = []; + var removePermission = true; + + angular.forEach($scope.vm.responseData.data, function (data) { + if (data.checked && $rootScope.checkMngPermission('USER_PERMISSION_MNG_FAQ')) { + removeIds.push(data.id); + } + + if (data.checked && !$rootScope.checkMngPermission('USER_PERMISSION_MNG_FAQ')) { + removePermission = false; + } + }); + + if (!removePermission) { + SweetAlert.swal({ + html : true, + title : $filter("translate")("common.deleteFailed"), // �궘�젣 �떎�뙣 + text : $filter("translate")("FAQ.notHaveDeletePermissionExists"), + type : "error" + }); + return; + } + + if (removeIds.length < 1) { + SweetAlert.swal({ + title : $filter("translate")("common.checkPurgingTargets"), // �궘�젣 ���긽 �솗�씤 + text : $filter("translate")("common.selectDestinationDeletion"), // �궘�젣 ���긽�쓣 �꽑�깮�븯�꽭�슂. + type : "warning" + }); + return; + } + + // �궘�젣 �븣由� + SweetAlert.swal({ + title : $filter("translate")("FAQ.delete"), + text : $filter("translate")("FAQ.wantToDeleteSelect"), + type : "warning", + showCancelButton : true, + confirmButtonColor : "#DD6B55", + confirmButtonText : $filter("translate")("common.delete"), // �궘�젣 + cancelButtonText : $filter("translate")("common.cancel"), // 痍⑥냼 + closeOnConfirm : false, + closeOnCancel : true + }, + function (isConfirm) { + SweetAlert.close(); + + if (isConfirm) { + $rootScope.spinner = true; + + Faq.remove($resourceProvider.getContent( + { removeIds : removeIds }, + $resourceProvider.getPageContent(0, 0))).then(function (result) { + + if (result.data.message.status === "success") { + $timeout(function () { + SweetAlert.success($filter("translate")("common.deleteSucceeded"), result.data.message.message); // �궘�젣 �꽦怨� + }, 100); + + $scope.fn.getPageList(0); + } + else { + $timeout(function () { + SweetAlert.error($filter("translate")("common.deleteFailed"), result.data.message.message); // �궘�젣 �떎�뙣 + }, 100); + } + + $rootScope.spinner = false; + }); + } + }); + } + // �뀒�씠釉� �꽕�젙 $scope.fn.makeTableConfigs(); // 紐⑸줉 議고쉶 diff --git a/src/main/webapp/scripts/app/guide/guideList.controller.js b/src/main/webapp/scripts/app/guide/guideList.controller.js index a67d971..951d1f7 100644 --- a/src/main/webapp/scripts/app/guide/guideList.controller.js +++ b/src/main/webapp/scripts/app/guide/guideList.controller.js @@ -20,6 +20,7 @@ makeTableConfigs : makeTableConfigs, // �뀒�씠釉� �꽕�젙 makeSearchConditions : makeSearchConditions, add : add, // guide �벑濡� + removes : removes }; // 蹂��닔 @@ -64,6 +65,10 @@ $scope.vm.tableConfigs = []; $scope.vm.tableConfigs.push($tableProvider.config() + .setDType("checkbox") + .setHWidth("width-20-p") + .setDAlign("text-center")); + $scope.vm.tableConfigs.push($tableProvider.config() .setHName("common.number") .setHWidth("width-60-p bold") .setDAlign("text-center") @@ -85,12 +90,14 @@ .setDAlign("text-center") .setDType("renderer") .setDRenderer("GUIDE_REGISTER")); - $scope.vm.tableConfigs.push($tableProvider.config() - .setHName("guide.activation") - .setHWidth("width-80-p bold") - .setDType("renderer") - .setDAlign("text-center pdr0 pdt0 pdl0 pdb0") - .setDRenderer("GUIDE_ACTIVE")); + if ($rootScope.checkMngPermission('USER_PERMISSION_MNG_GUIDE')) { + $scope.vm.tableConfigs.push($tableProvider.config() + .setHName("guide.activation") + .setHWidth("width-80-p bold") + .setDType("renderer") + .setDAlign("text-center pdr0 pdt0 pdl0 pdb0") + .setDRenderer("GUIDE_ACTIVE")); + } } // 紐⑸줉 議고쉶 @@ -182,6 +189,80 @@ }); } + function removes() { + var removeIds = []; + var removePermission = true; + + angular.forEach($scope.vm.responseData.data, function (data) { + if (data.checked && $rootScope.checkMngPermission('USER_PERMISSION_MNG_GUIDE')) { + removeIds.push(data.id); + } + + if (data.checked && !$rootScope.checkMngPermission('USER_PERMISSION_MNG_GUIDE')) { + removePermission = false; + } + }); + + if (!removePermission) { + SweetAlert.swal({ + html : true, + title : $filter("translate")("common.deleteFailed"), // �궘�젣 �떎�뙣 + text : $filter("translate")("guide.notHaveDeletePermissionExists"), + type : "error" + }); + return; + } + + if (removeIds.length < 1) { + SweetAlert.swal({ + title : $filter("translate")("common.checkPurgingTargets"), // �궘�젣 ���긽 �솗�씤 + text : $filter("translate")("common.selectDestinationDeletion"), // �궘�젣 ���긽�쓣 �꽑�깮�븯�꽭�슂. + type : "warning" + }); + return; + } + + // �궘�젣 �븣由� + SweetAlert.swal({ + title : $filter("translate")("guide.delete"), + text : $filter("translate")("guide.wantToDeleteSelect"), + type : "warning", + showCancelButton : true, + confirmButtonColor : "#DD6B55", + confirmButtonText : $filter("translate")("common.delete"), // �궘�젣 + cancelButtonText : $filter("translate")("common.cancel"), // 痍⑥냼 + closeOnConfirm : false, + closeOnCancel : true + }, + function (isConfirm) { + SweetAlert.close(); + + if (isConfirm) { + $rootScope.spinner = true; + + Guide.remove($resourceProvider.getContent( + { removeIds : removeIds }, + $resourceProvider.getPageContent(0, 0))).then(function (result) { + + if (result.data.message.status === "success") { + $timeout(function () { + SweetAlert.success($filter("translate")("common.deleteSucceeded"), result.data.message.message); // �궘�젣 �꽦怨� + }, 100); + + $scope.fn.getPageList(0); + } + else { + $timeout(function () { + SweetAlert.error($filter("translate")("common.deleteFailed"), result.data.message.message); // �궘�젣 �떎�뙣 + }, 100); + } + + $rootScope.spinner = false; + }); + } + }); + } + // �뀒�씠釉� �꽕�젙 $scope.fn.makeTableConfigs(); // 紐⑸줉 議고쉶 diff --git a/src/main/webapp/scripts/app/notice/noticeList.controller.js b/src/main/webapp/scripts/app/notice/noticeList.controller.js index b7f0bed..295712b 100644 --- a/src/main/webapp/scripts/app/notice/noticeList.controller.js +++ b/src/main/webapp/scripts/app/notice/noticeList.controller.js @@ -18,6 +18,7 @@ makeTableConfigs : makeTableConfigs, // �뀒�씠釉� �꽕�젙 makeSearchConditions : makeSearchConditions, add : add, // 怨듭��궗�빆 �벑濡� + removes : removes }; // 蹂��닔 @@ -60,6 +61,10 @@ function makeTableConfigs() { $scope.vm.tableConfigs = []; + $scope.vm.tableConfigs.push($tableProvider.config() + .setDType("checkbox") + .setHWidth("width-20-p") + .setDAlign("text-center")); $scope.vm.tableConfigs.push($tableProvider.config() .setHName("common.number") .setHWidth("width-60-p bold") @@ -162,6 +167,80 @@ }); } + function removes() { + var removeIds = []; + var removePermission = true; + + angular.forEach($scope.vm.responseData.data, function (data) { + if (data.checked && $rootScope.checkMngPermission('USER_PERMISSION_MNG_NOTICE') || $rootScope.user.id === data.registerId) { + removeIds.push(data.id); + } + + if (data.checked && !$rootScope.checkMngPermission('USER_PERMISSION_MNG_NOTICE')) { + removePermission = false; + } + }); + + if (!removePermission) { + SweetAlert.swal({ + html : true, + title : $filter("translate")("common.deleteFailed"), // �궘�젣 �떎�뙣 + text : $filter("translate")("notice.notHaveDeletePermissionExists"), + type : "error" + }); + return; + } + + if (removeIds.length < 1) { + SweetAlert.swal({ + title : $filter("translate")("common.checkPurgingTargets"), // �궘�젣 ���긽 �솗�씤 + text : $filter("translate")("common.selectDestinationDeletion"), // �궘�젣 ���긽�쓣 �꽑�깮�븯�꽭�슂. + type : "warning" + }); + return; + } + + // �궘�젣 �븣由� + SweetAlert.swal({ + title : $filter("translate")("notice.delete"), // "�뾽泥� �궘�젣" + text : $filter("translate")("notice.wantToDeleteSelectNotice"), // "�꽑�깮�븳 怨듭��궗�빆�쓣 �궘�젣�븯寃좎뒿�땲源�? �궘�젣�맂 怨듭��궗�빆�� 蹂듦뎄�븷 �닔 �뾾�뒿�땲�떎." + type : "warning", + showCancelButton : true, + confirmButtonColor : "#DD6B55", + confirmButtonText : $filter("translate")("common.delete"), // �궘�젣 + cancelButtonText : $filter("translate")("common.cancel"), // 痍⑥냼 + closeOnConfirm : false, + closeOnCancel : true + }, + function (isConfirm) { + SweetAlert.close(); + + if (isConfirm) { + $rootScope.spinner = true; + + Notice.remove($resourceProvider.getContent( + { removeIds : removeIds }, + $resourceProvider.getPageContent(0, 0))).then(function (result) { + + if (result.data.message.status === "success") { + $timeout(function () { + SweetAlert.success($filter("translate")("common.deleteSucceeded"), result.data.message.message); // �궘�젣 �꽦怨� + }, 100); + + $scope.fn.getPageList(0); + } + else { + $timeout(function () { + SweetAlert.error($filter("translate")("common.deleteFailed"), result.data.message.message); // �궘�젣 �떎�뙣 + }, 100); + } + + $rootScope.spinner = false; + }); + } + }); + } + // �뀒�씠釉� �꽕�젙 $scope.fn.makeTableConfigs(); // 紐⑸줉 議고쉶 diff --git a/src/main/webapp/scripts/app/qna/qnaList.controller.js b/src/main/webapp/scripts/app/qna/qnaList.controller.js index 0d1a134..1077fbe 100644 --- a/src/main/webapp/scripts/app/qna/qnaList.controller.js +++ b/src/main/webapp/scripts/app/qna/qnaList.controller.js @@ -18,6 +18,7 @@ makeTableConfigs : makeTableConfigs, // �뀒�씠釉� �꽕�젙 makeSearchConditions : makeSearchConditions, add : add, // qna �벑濡� + removes : removes }; // 蹂��닔 @@ -60,6 +61,10 @@ function makeTableConfigs() { $scope.vm.tableConfigs = []; + $scope.vm.tableConfigs.push($tableProvider.config() + .setDType("checkbox") + .setHWidth("width-20-p") + .setDAlign("text-center")); $scope.vm.tableConfigs.push($tableProvider.config() .setHName("common.number") .setHWidth("width-60-p bold") @@ -162,6 +167,80 @@ }); } + function removes() { + var removeIds = []; + var removePermission = true; + + angular.forEach($scope.vm.responseData.data, function (data) { + if (data.checked && ($rootScope.checkMngPermission('USER_PERMISSION_MNG_QNA') || $rootScope.user.id === data.registerId)) { + removeIds.push(data.id); + } + + if (data.checked && $rootScope.user.id !== data.registerId && !$rootScope.checkMngPermission('USER_PERMISSION_MNG_QNA')) { + removePermission = false; + } + }); + + if (!removePermission) { + SweetAlert.swal({ + html : true, + title : $filter("translate")("common.deleteFailed"), // �궘�젣 �떎�뙣 + text : $filter("translate")("QNA.notHaveDeletePermissionExists"), + type : "error" + }); + return; + } + + if (removeIds.length < 1) { + SweetAlert.swal({ + title : $filter("translate")("common.checkPurgingTargets"), // �궘�젣 ���긽 �솗�씤 + text : $filter("translate")("common.selectDestinationDeletion"), // �궘�젣 ���긽�쓣 �꽑�깮�븯�꽭�슂. + type : "warning" + }); + return; + } + + // �궘�젣 �븣由� + SweetAlert.swal({ + title : $filter("translate")("QNA.delete"), + text : $filter("translate")("QNA.wantToDeleteSelect"), + type : "warning", + showCancelButton : true, + confirmButtonColor : "#DD6B55", + confirmButtonText : $filter("translate")("common.delete"), // �궘�젣 + cancelButtonText : $filter("translate")("common.cancel"), // 痍⑥냼 + closeOnConfirm : false, + closeOnCancel : true + }, + function (isConfirm) { + SweetAlert.close(); + + if (isConfirm) { + $rootScope.spinner = true; + + Qna.remove($resourceProvider.getContent( + { removeIds : removeIds }, + $resourceProvider.getPageContent(0, 0))).then(function (result) { + + if (result.data.message.status === "success") { + $timeout(function () { + SweetAlert.success($filter("translate")("common.deleteSucceeded"), result.data.message.message); // �궘�젣 �꽦怨� + }, 100); + + $scope.fn.getPageList(0); + } + else { + $timeout(function () { + SweetAlert.error($filter("translate")("common.deleteFailed"), result.data.message.message); // �궘�젣 �떎�뙣 + }, 100); + } + + $rootScope.spinner = false; + }); + } + }); + } + // �뀒�씠釉� �꽕�젙 $scope.fn.makeTableConfigs(); // 紐⑸줉 議고쉶 diff --git a/src/main/webapp/views/common/header.html b/src/main/webapp/views/common/header.html index 34e2058..519dd8b 100644 --- a/src/main/webapp/views/common/header.html +++ b/src/main/webapp/views/common/header.html @@ -59,7 +59,7 @@ --> <div class="messages-notifications os-dropdown-trigger os-dropdown-position-left" ui-sref="notices.list" style="padding-top:5px;"> - <span class="new-messages-push"></span> +<!-- <span class="new-messages-push"></span>--> <i class="dripicons-broadcast"></i> </div> diff --git a/src/main/webapp/views/common/sidebar.html b/src/main/webapp/views/common/sidebar.html index dc7725e..2272044 100644 --- a/src/main/webapp/views/common/sidebar.html +++ b/src/main/webapp/views/common/sidebar.html @@ -373,21 +373,21 @@ </div> <span translate="notice.notice">怨듭��궗�빆</span></a> </li> - <li class="" ng-if="$root.checkMngPermission('USER_PERMISSION_MNG_FAQ')"> + <li class=""> <a ui-sref="faqs.list" tabindex="-1"> <div class="icon-w"> <div class="os-icon os-icon-ui-92"></div> </div> <span translate="FAQ.manageFAQ">FAQ 愿�由�</span></a> </li> - <li class="" ng-if="$root.checkMngPermission('USER_PERMISSION_MNG_QNA')"> + <li class=""> <a ui-sref="qna.list" tabindex="-1"> <div class="icon-w"> <div class="os-icon os-icon-phone-21"></div> </div> <span translate="QNA.manageQNA">QnA 愿�由�</span></a> </li> - <li class="" ng-if="$root.checkMngPermission('USER_PERMISSION_MNG_GUIDE')"> + <li class=""> <a ui-sref="guide.list" tabindex="-1"> <div class="icon-w"> <div class="os-icon os-icon-phone-21"></div> diff --git a/src/main/webapp/views/faq/faqList.html b/src/main/webapp/views/faq/faqList.html index 7a260d1..4a4d2eb 100644 --- a/src/main/webapp/views/faq/faqList.html +++ b/src/main/webapp/views/faq/faqList.html @@ -86,7 +86,18 @@ </div> </div> <div class="col-sm-6 text-right"> - + <form class="form-inline justify-content-sm-end pull-right ng-pristine ng-valid" method="post" action="/faq/downloadExcel" name="faqListForm"> + <input type="hidden" name="conditions" autocomplete="off"> + <div class="btn-group"> + <button aria-expanded="false" aria-haspopup="true" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown" type="button"><span translate="common.addFunction" class="ng-scope">異붽�湲곕뒫</span> + </button> + <div aria-labelledby="dropdownMenuButton2" class="dropdown-menu left-menu" x-placement="bottom-start"> + <a class="dropdown-item cursor ng-isolate-scope" form-submit="faqListForm" make-search-conditions="fn.makeSearchConditions()"><span translate="common.allDownloadExcel" class="ng-scope">�뿊�� �떎�슫濡쒕뱶</span></a> + <a class="dropdown-item cursor" ng-click="fn.removes()"> <span translate="common.selectDelete" class="ng-scope">�궘�젣</span></a> + + </div> + </div> + </form> </div> </div> </div> diff --git a/src/main/webapp/views/guide/guideList.html b/src/main/webapp/views/guide/guideList.html index 11d8d66..1886c5d 100644 --- a/src/main/webapp/views/guide/guideList.html +++ b/src/main/webapp/views/guide/guideList.html @@ -86,7 +86,18 @@ </div> </div> <div class="col-sm-6 text-right"> - + <form class="form-inline justify-content-sm-end pull-right ng-pristine ng-valid" method="post" action="/guide/downloadExcel" name="guideListForm"> + <input type="hidden" name="conditions" autocomplete="off"> + <div class="btn-group"> + <button aria-expanded="false" aria-haspopup="true" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown" type="button"><span translate="common.addFunction" class="ng-scope">異붽�湲곕뒫</span> + </button> + <div aria-labelledby="dropdownMenuButton2" class="dropdown-menu left-menu" x-placement="bottom-start"> + <a class="dropdown-item cursor ng-isolate-scope" form-submit="guideListForm" make-search-conditions="fn.makeSearchConditions()"><span translate="common.allDownloadExcel" class="ng-scope">�뿊�� �떎�슫濡쒕뱶</span></a> + <a class="dropdown-item cursor" ng-click="fn.removes()"> <span translate="common.selectDelete" class="ng-scope">�궘�젣</span></a> + + </div> + </div> + </form> </div> </div> </div> diff --git a/src/main/webapp/views/qna/qnaList.html b/src/main/webapp/views/qna/qnaList.html index 33bddd3..52317b9 100644 --- a/src/main/webapp/views/qna/qnaList.html +++ b/src/main/webapp/views/qna/qnaList.html @@ -86,7 +86,18 @@ </div> </div> <div class="col-sm-6 text-right"> - + <form class="form-inline justify-content-sm-end pull-right ng-pristine ng-valid" method="post" action="/qna/downloadExcel" name="qnaListForm"> + <input type="hidden" name="conditions" autocomplete="off"> + <div class="btn-group"> + <button aria-expanded="false" aria-haspopup="true" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown" type="button"><span translate="common.addFunction" class="ng-scope">異붽�湲곕뒫</span> + </button> + <div aria-labelledby="dropdownMenuButton2" class="dropdown-menu left-menu" x-placement="bottom-start"> + <a class="dropdown-item cursor ng-isolate-scope" form-submit="qnaListForm" make-search-conditions="fn.makeSearchConditions()"><span translate="common.allDownloadExcel" class="ng-scope">�뿊�� �떎�슫濡쒕뱶</span></a> + <a class="dropdown-item cursor" ng-click="fn.removes()"> <span translate="common.selectDelete" class="ng-scope">�궘�젣</span></a> + + </div> + </div> + </form> </div> </div> </div> diff --git a/src/main/webapp/views/user/userModify.html b/src/main/webapp/views/user/userModify.html index 38a2fd3..923e526 100644 --- a/src/main/webapp/views/user/userModify.html +++ b/src/main/webapp/views/user/userModify.html @@ -48,7 +48,6 @@ date-time-picker option="Y" ng-disabled="vm.form.realtimeNotify" - ng-required="!vm.form.realtimeNotify" placeholder="�씠硫붿씪 �븣由� �떆媛꾩쓣 �꽕�젙�빐二쇱꽭�슂." ng-model="vm.form.reservationNotifyTime"> </div> -- Gitblit v1.8.0