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, '&lt;') + "</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">
-                            &nbsp;
+                            &nbsp;<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">
-                            &nbsp;
+                            &nbsp;<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">
-                            &nbsp;
+                            &nbsp;<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