Kaynağa Gözat

dev moments

lym 1 ay önce
ebeveyn
işleme
12ef7fe55e
100 değiştirilmiş dosya ile 2888 ekleme ve 2 silme
  1. 4 0
      pom.xml
  2. 228 0
      src/main/java/org/lym/pom/controller/moment/IndexController.java
  3. 56 0
      src/main/java/org/lym/pom/controller/moment/VueController.java
  4. 97 0
      src/main/java/org/lym/pom/controller/moment/ui/GlobalViewInterceptor.java
  5. 36 0
      src/main/java/org/lym/pom/controller/moment/ui/SetMsgToFrontOnExForPageRequestAspect.java
  6. 48 0
      src/main/java/org/lym/pom/controller/moment/ui/model/PageRequestModel.java
  7. 35 0
      src/main/java/org/lym/pom/controller/moment/ui/model/PageResponseModel.java
  8. 22 0
      src/main/java/org/lym/pom/controller/moment/ui/model/ResultModel.java
  9. 27 0
      src/main/java/org/lym/pom/controller/moment/ui/request/AdminBooleanRequest.java
  10. 15 0
      src/main/java/org/lym/pom/controller/moment/ui/request/BasePageRequest.java
  11. 15 0
      src/main/java/org/lym/pom/controller/moment/ui/request/FaqRequest.java
  12. 18 0
      src/main/java/org/lym/pom/controller/moment/ui/request/IndexRequest.java
  13. 15 0
      src/main/java/org/lym/pom/controller/moment/ui/request/MessageRequest.java
  14. 14 0
      src/main/java/org/lym/pom/controller/moment/ui/request/SearchRequest.java
  15. 15 0
      src/main/java/org/lym/pom/controller/moment/ui/request/UserRequest.java
  16. 36 0
      src/main/java/org/lym/pom/controller/moment/ui/request/article/ArticleAddTypeRequest.java
  17. 35 0
      src/main/java/org/lym/pom/controller/moment/ui/request/article/ArticleAdminPageRequest.java
  18. 40 0
      src/main/java/org/lym/pom/controller/moment/ui/request/article/ArticleAdminTypePageRequest.java
  19. 23 0
      src/main/java/org/lym/pom/controller/moment/ui/request/article/ArticleAuthorPageRequest.java
  20. 38 0
      src/main/java/org/lym/pom/controller/moment/ui/request/article/ArticleSaveArticleRequest.java
  21. 23 0
      src/main/java/org/lym/pom/controller/moment/ui/request/article/ArticleUserPageRequest.java
  22. 26 0
      src/main/java/org/lym/pom/controller/moment/ui/request/comment/CommentCreateRequest.java
  23. 34 0
      src/main/java/org/lym/pom/controller/moment/ui/request/config/ConfigAddRequest.java
  24. 29 0
      src/main/java/org/lym/pom/controller/moment/ui/request/config/ConfigPageRequest.java
  25. 36 0
      src/main/java/org/lym/pom/controller/moment/ui/request/config/ConfigUpdateRequest.java
  26. 29 0
      src/main/java/org/lym/pom/controller/moment/ui/request/faq/FaqAdminPageRequest.java
  27. 23 0
      src/main/java/org/lym/pom/controller/moment/ui/request/faq/FaqAuthorPageRequest.java
  28. 34 0
      src/main/java/org/lym/pom/controller/moment/ui/request/faq/FaqSaveFaqRequest.java
  29. 25 0
      src/main/java/org/lym/pom/controller/moment/ui/request/faq/FaqSolutionRequest.java
  30. 23 0
      src/main/java/org/lym/pom/controller/moment/ui/request/faq/FaqUserPageRequest.java
  31. 23 0
      src/main/java/org/lym/pom/controller/moment/ui/request/file/FileUploadImgRequest.java
  32. 23 0
      src/main/java/org/lym/pom/controller/moment/ui/request/github/GithubOauthLoginRequest.java
  33. 23 0
      src/main/java/org/lym/pom/controller/moment/ui/request/message/MessagePageRequest.java
  34. 33 0
      src/main/java/org/lym/pom/controller/moment/ui/request/tag/TagCreateRequest.java
  35. 38 0
      src/main/java/org/lym/pom/controller/moment/ui/request/tag/TagPageRequest.java
  36. 29 0
      src/main/java/org/lym/pom/controller/moment/ui/request/user/UserAdminPageRequest.java
  37. 19 0
      src/main/java/org/lym/pom/controller/moment/ui/request/user/UserBaseLoginRequest.java
  38. 25 0
      src/main/java/org/lym/pom/controller/moment/ui/request/user/UserEmailLoginRequest.java
  39. 24 0
      src/main/java/org/lym/pom/controller/moment/ui/request/user/UserOptLogPageRequest.java
  40. 27 0
      src/main/java/org/lym/pom/controller/moment/ui/request/user/UserRegisterRequest.java
  41. 21 0
      src/main/java/org/lym/pom/controller/moment/ui/request/user/UserTokenLogoutRequest.java
  42. 27 0
      src/main/java/org/lym/pom/controller/moment/ui/request/user/UserUpdateInfoRequest.java
  43. 25 0
      src/main/java/org/lym/pom/controller/moment/ui/request/user/UserUpdatePwdRequest.java
  44. 25 0
      src/main/java/org/lym/pom/controller/moment/ui/request/user/UserUpdateRoleRequest.java
  45. 61 0
      src/main/java/org/lym/pom/controller/moment/ui/response/article/ArticleInfoResponse.java
  46. 58 0
      src/main/java/org/lym/pom/controller/moment/ui/response/article/ArticleQueryTypesResponse.java
  47. 62 0
      src/main/java/org/lym/pom/controller/moment/ui/response/article/ArticleUserPageResponse.java
  48. 50 0
      src/main/java/org/lym/pom/controller/moment/ui/response/comment/CommentPageResponse.java
  49. 44 0
      src/main/java/org/lym/pom/controller/moment/ui/response/config/ConfigResponse.java
  50. 27 0
      src/main/java/org/lym/pom/controller/moment/ui/response/faq/FaqHotsResponse.java
  51. 52 0
      src/main/java/org/lym/pom/controller/moment/ui/response/faq/FaqInfoResponse.java
  52. 59 0
      src/main/java/org/lym/pom/controller/moment/ui/response/faq/FaqUserPageResponse.java
  53. 40 0
      src/main/java/org/lym/pom/controller/moment/ui/response/message/MessagePageResponse.java
  54. 61 0
      src/main/java/org/lym/pom/controller/moment/ui/response/tag/TagPageResponse.java
  55. 37 0
      src/main/java/org/lym/pom/controller/moment/ui/response/tag/TagQueryResponse.java
  56. 40 0
      src/main/java/org/lym/pom/controller/moment/ui/response/user/UserInfoResponse.java
  57. 36 0
      src/main/java/org/lym/pom/controller/moment/ui/response/user/UserOptLogPageResponse.java
  58. 41 0
      src/main/java/org/lym/pom/controller/moment/ui/response/user/UserPageResponse.java
  59. 18 0
      src/main/java/org/lym/pom/controller/moment/ui/service/ApprovalApiService.java
  60. 48 0
      src/main/java/org/lym/pom/controller/moment/ui/service/ArticleApiService.java
  61. 20 0
      src/main/java/org/lym/pom/controller/moment/ui/service/CommentApiService.java
  62. 56 0
      src/main/java/org/lym/pom/controller/moment/ui/service/ConfigApiService.java
  63. 33 0
      src/main/java/org/lym/pom/controller/moment/ui/service/FaqApiService.java
  64. 15 0
      src/main/java/org/lym/pom/controller/moment/ui/service/FileApiService.java
  65. 15 0
      src/main/java/org/lym/pom/controller/moment/ui/service/GithubApiService.java
  66. 22 0
      src/main/java/org/lym/pom/controller/moment/ui/service/MessageApiService.java
  67. 21 0
      src/main/java/org/lym/pom/controller/moment/ui/service/PostsApiService.java
  68. 17 0
      src/main/java/org/lym/pom/controller/moment/ui/service/SearchApiService.java
  69. 40 0
      src/main/java/org/lym/pom/controller/moment/ui/service/TagApiService.java
  70. 56 0
      src/main/java/org/lym/pom/controller/moment/ui/service/UserApiService.java
  71. 59 0
      src/main/java/org/lym/pom/controller/moment/ui/vo/PostsVO.java
  72. 25 0
      src/main/java/org/lym/pom/controller/moment/ui/vo/SolutionVO.java
  73. 25 0
      src/main/java/org/lym/pom/controller/moment/ui/vo/TagVO.java
  74. 61 0
      src/main/java/org/lym/pom/entity/UserNotifyEntity.java
  75. 36 0
      src/main/java/org/lym/pom/repository/mongo/enums/NotifyChannelEnum.java
  76. 36 0
      src/main/java/org/lym/pom/repository/mongo/enums/NotifyContentTypeEnum.java
  77. 40 0
      src/main/java/org/lym/pom/repository/mongo/enums/NotifyTypeEnum.java
  78. 0 0
      src/main/resources/static/a.txt
  79. 5 0
      src/main/resources/static/css/bootstrap.min.css
  80. 0 0
      src/main/resources/static/css/toastr.min.css
  81. 2 2
      src/main/resources/static/dictionaryEnums.html
  82. 5 0
      src/main/resources/static/js/bootstrap.min.js
  83. 0 0
      src/main/resources/static/js/feather.min.js
  84. 1 0
      src/main/resources/static/js/jquery.min.js
  85. 0 0
      src/main/resources/static/js/md5.min.js
  86. 0 0
      src/main/resources/static/js/toastr.min.js
  87. 0 0
      src/main/resources/static/vue-admin-dist/css/app.79c430ac847b714d59da93e4d940cb4a.css
  88. 0 0
      src/main/resources/static/vue-admin-dist/css/app.79c430ac847b714d59da93e4d940cb4a.css.map
  89. BIN
      src/main/resources/static/vue-admin-dist/fonts/fontello.068ca2b.ttf
  90. BIN
      src/main/resources/static/vue-admin-dist/fonts/fontello.e73a064.eot
  91. BIN
      src/main/resources/static/vue-admin-dist/fonts/ionicons.143146f.woff2
  92. BIN
      src/main/resources/static/vue-admin-dist/fonts/ionicons.99ac330.woff
  93. BIN
      src/main/resources/static/vue-admin-dist/fonts/ionicons.d535a25.ttf
  94. 72 0
      src/main/resources/static/vue-admin-dist/img/fontello.9354499.svg
  95. 24 0
      src/main/resources/static/vue-admin-dist/img/ionicons.a2c4a26.svg
  96. 0 0
      src/main/resources/static/vue-admin-dist/js/app.c4063b2d3281675632f1.js
  97. 0 0
      src/main/resources/static/vue-admin-dist/js/app.c4063b2d3281675632f1.js.map
  98. 2 0
      src/main/resources/static/vue-admin-dist/js/manifest.114fae91ceb109348ca6.js
  99. 0 0
      src/main/resources/static/vue-admin-dist/js/manifest.114fae91ceb109348ca6.js.map
  100. 5 0
      src/main/resources/static/vue-admin-dist/js/vendor.47c96e8badf75687412c.js

+ 4 - 0
pom.xml

@@ -83,6 +83,10 @@
             <artifactId>lombok</artifactId>
         </dependency>
 
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-thymeleaf</artifactId>
+        </dependency>
     </dependencies>
 
     <build>

+ 228 - 0
src/main/java/org/lym/pom/controller/moment/IndexController.java

@@ -0,0 +1,228 @@
+package org.lym.pom.controller.moment;
+
+import com.google.common.collect.Sets;
+import lombok.extern.slf4j.Slf4j;
+import org.lym.pom.service.PostService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.util.ObjectUtils;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import pub.developers.forum.api.model.PageRequestModel;
+import pub.developers.forum.api.model.PageResponseModel;
+import pub.developers.forum.api.model.ResultModel;
+import pub.developers.forum.api.request.article.ArticleUserPageRequest;
+import pub.developers.forum.api.response.article.ArticleQueryTypesResponse;
+import pub.developers.forum.api.response.article.ArticleUserPageResponse;
+import pub.developers.forum.api.response.config.ConfigResponse;
+import pub.developers.forum.api.response.faq.FaqHotsResponse;
+import pub.developers.forum.api.service.ArticleApiService;
+import pub.developers.forum.api.service.ConfigApiService;
+import pub.developers.forum.api.service.FaqApiService;
+import pub.developers.forum.common.enums.ConfigTypeEn;
+import pub.developers.forum.common.support.GlobalViewConfig;
+import pub.developers.forum.common.support.SafesUtil;
+import pub.developers.forum.portal.request.IndexRequest;
+import pub.developers.forum.portal.support.WebConst;
+import pub.developers.forum.portal.support.WebUtil;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author lym
+ **/
+@Slf4j
+@Controller
+@RequestMapping("/")
+public class IndexController {
+
+    private static final String ALL_TYPE_NAME = "全部文章";
+
+    @Autowired
+    private PostService articleApiService;
+
+    @Value("${custom-config.view.index-page.sidebar-type-names:公告 & 活动}")
+    private String sideBarTypeNames;
+
+    @Resource
+    private WebUtil webUtil;
+
+    @Resource
+    private GlobalViewConfig globalViewConfig;
+
+    @Resource
+    private ConfigApiService configApiService;
+
+    @GetMapping
+    public String index(IndexRequest request, Model model, HttpServletRequest servletRequest, HttpServletResponse response) {
+        if (!ObjectUtils.isEmpty(request.getToken())) {
+            WebUtil.cookieAddSid(response, request.getToken());
+        }
+
+        request.setType(ObjectUtils.isEmpty(request.getType()) ? ALL_TYPE_NAME : request.getType());
+
+        model.addAttribute("currentDomain", WebConst.DOMAIN_ARTICLE);
+        model.addAttribute("toast", request.getToast());
+        model.addAttribute("token", request.getToken());
+
+        ResultModel<List<ConfigResponse>> configResult = configApiService.queryAvailable(Sets.newHashSet(ConfigTypeEn.HOME_CAROUSEL.getValue()
+                , ConfigTypeEn.SIDEBAR_CAROUSEL.getValue()));
+        if (configResult.getSuccess() && !ObjectUtils.isEmpty(configResult.getData())) {
+            // 从配置中找轮播图等配置
+            model.addAttribute("homeCarouselList", webUtil.carouselList(configResult.getData(), ConfigTypeEn.HOME_CAROUSEL));
+            model.addAttribute("sideCarouselList", webUtil.carouselList(configResult.getData(), ConfigTypeEn.SIDEBAR_CAROUSEL));
+        } else {
+            model.addAttribute("homeCarouselList", new ArrayList<>());
+            model.addAttribute("sideCarouselList", new ArrayList<>());
+        }
+
+        model.addAttribute("sideBarTypes", sideBarTypes());
+        model.addAttribute("hotFaqList", hotFaqList());
+        model.addAttribute("typeList", typeList(request));
+        model.addAttribute("usedTags", webUtil.usedTags());
+
+        // 文章列表请求参数
+        ResultModel<PageResponseModel<ArticleUserPageResponse>> resultModel = userPage(request);
+        if (resultModel.getSuccess() && !ObjectUtils.isEmpty(resultModel.getData())) {
+            PageResponseModel<ArticleUserPageResponse> pageResponseModel = resultModel.getData();
+
+            model.addAttribute("articleList", webUtil.buildArticles(pageResponseModel.getList()));
+            model.addAttribute("pager", pager(request, pageResponseModel));
+        } else {
+            model.addAttribute("articleList", webUtil.buildArticles(new ArrayList<>()));
+
+            PageResponseModel pageResponseModel = new PageResponseModel();
+            pageResponseModel.setTotal(0L);
+            model.addAttribute("pager", pager(request, pageResponseModel));
+        }
+
+        return "index";
+    }
+
+    private ResultModel<PageResponseModel<ArticleUserPageResponse>> userPage(IndexRequest request) {
+        PageRequestModel<ArticleUserPageRequest> pageRequestModel = new PageRequestModel<>();
+        pageRequestModel.setPageNo(request.getPageNo());
+        pageRequestModel.setPageSize(globalViewConfig.getPageSize());
+        pageRequestModel.setFilter(ArticleUserPageRequest.builder()
+                .typeName(ALL_TYPE_NAME.equals(request.getType()) ? null : request.getType())
+                .build());
+        // todo 分页查询所有用户已经审核通过的 xx 类型 or 某篇文章;
+        // 1. 查推荐 feed
+        // 2. 根据 id 查
+        return articleApiService.userPage(pageRequestModel);
+    }
+
+    private Map<String, Object> pager(IndexRequest request, PageResponseModel pageResponseModel) {
+        String queryPath = "?type=" + request.getType() + "&" + WebConst.PAGE_NO_NAME + "=";
+        return webUtil.buildPager(request.getPageNo(), queryPath, pageResponseModel);
+    }
+
+    private List<Map<String, Object>> hotFaqList() {
+        List<Map<String, Object>> postsList = new ArrayList<>();
+
+        ResultModel<List<FaqHotsResponse>> resultModel = faqApiService.hots(10);
+        if (!resultModel.getSuccess()) {
+            return postsList;
+        }
+
+        SafesUtil.ofList(resultModel.getData()).forEach(faqHotsResponse -> {
+            Map<String, Object> posts = new HashMap<>();
+            posts.put("id", faqHotsResponse.getId());
+            posts.put("title", faqHotsResponse.getTitle());
+            posts.put("createdAt", faqHotsResponse.getCreateAt());
+            postsList.add(posts);
+        });
+
+        return postsList;
+    }
+
+    private List<Map<String, Object>> sideBarTypes() {
+        List<Map<String, Object>> res = new ArrayList<>();
+
+        if (ObjectUtils.isEmpty(sideBarTypeNames)) {
+            return res;
+        }
+
+        String[] types = sideBarTypeNames.split(",");
+        for (String typeName : types) {
+            if (ObjectUtils.isEmpty(typeName)) {
+                continue;
+            }
+            Map<String, Object> type = new HashMap<>();
+            type.put("name", typeName);
+            type.put("postsList", typeList(typeName));
+            res.add(type);
+        }
+
+        return res;
+    }
+
+    private List<Map<String, Object>> typeList(String typeName) {
+        List<Map<String, Object>> postsList = new ArrayList<>();
+        if (ObjectUtils.isEmpty(typeName)) {
+            return postsList;
+        }
+
+        PageRequestModel<ArticleUserPageRequest> pageRequestModel = new PageRequestModel<>();
+        pageRequestModel.setPageNo(1);
+        pageRequestModel.setPageSize(10);
+        pageRequestModel.setFilter(ArticleUserPageRequest.builder()
+                .typeName(typeName)
+                .build());
+        ResultModel<PageResponseModel<ArticleUserPageResponse>> resultModel = articleApiService.userPage(pageRequestModel);
+        if (!resultModel.getSuccess()) {
+            return postsList;
+        }
+
+        PageResponseModel<ArticleUserPageResponse> pageResponseModel = resultModel.getData();
+        SafesUtil.ofList(pageResponseModel.getList()).forEach(articleUserPageResponse -> {
+            Map<String, Object> posts = new HashMap<>();
+            posts.put("id", articleUserPageResponse.getId());
+            posts.put("title", articleUserPageResponse.getTitle());
+            posts.put("createdAt", articleUserPageResponse.getCreateAt());
+            postsList.add(posts);
+        });
+
+        return postsList;
+    }
+
+    private List<Map<String, Object>> typeList(IndexRequest request) {
+        List<Map<String, Object>> typeList = new ArrayList<>();
+        Long allRefCount = 0L;
+
+        Map<String, Object> all = new HashMap<>();
+        all.put("name", ALL_TYPE_NAME);
+        all.put("selected", request.getType().equals(ALL_TYPE_NAME));
+        typeList.add(all);
+
+        ResultModel<List<ArticleQueryTypesResponse>> resultModel = articleApiService.queryAllTypes();
+        if (resultModel.getSuccess() && !ObjectUtils.isEmpty(resultModel.getData())) {
+            List<ArticleQueryTypesResponse> responses = resultModel.getData();
+            for (ArticleQueryTypesResponse response : responses) {
+                if (response.getRefCount().equals(0L)) {
+                    continue;
+                }
+
+                allRefCount += response.getRefCount();
+
+                Map<String, Object> type = new HashMap<>();
+                type.put("name", response.getName());
+                type.put("refCount", response.getRefCount());
+                type.put("selected", request.getType().equals(response.getName()));
+                typeList.add(type);
+            }
+        }
+
+        all.put("refCount", allRefCount);
+
+        return typeList;
+    }
+}

+ 56 - 0
src/main/java/org/lym/pom/controller/moment/VueController.java

@@ -0,0 +1,56 @@
+package org.lym.pom.controller.moment;
+
+import jakarta.servlet.http.HttpServletRequest;
+import org.lym.pom.controller.moment.ui.response.user.UserInfoResponse;
+import org.shoulder.core.dto.response.BaseResult;
+import org.shoulder.core.exception.BaseRuntimeException;
+import org.springframework.stereotype.Controller;
+import org.springframework.util.ObjectUtils;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+/**
+ * @author lym
+ **/
+@Controller
+@RequestMapping("/")
+public class VueController {
+
+    @GetMapping(value = {"/article/editor", "/faq/editor", "/faq/editor/{id}", "/article/editor/{id}"})
+    public String editor() {
+        return "vue-index";
+    }
+
+    @GetMapping(value = {"/admin"
+            , "/admin/user-manager", "/admin/user-opt-log"
+            , "/admin/article-manager", "/admin/article-type"
+            , "/admin/faq-manager"
+            , "/admin/message-manager"
+            , "/admin/tag-manager"})
+    public String admin(HttpServletRequest request) {
+        String sid = parseSessionInfo(request);
+        if (ObjectUtils.isEmpty(sid)) {
+            throw new BaseRuntimeException("用户未登录");
+        }
+
+        BaseResult<UserInfoResponse> BaseResult = parseUserInfo(sid);
+        if (!BaseResult.isSuccess() || ObjectUtils.isEmpty(BaseResult.getData())) {
+            throw new BaseRuntimeException(BaseResult.getMsg());
+        }
+        UserInfoResponse userInfoResponse = BaseResult.getData();
+        if ("USER".equals(userInfoResponse.getRole())) {
+            throw new BaseRuntimeException("无权限访问");
+        }
+
+        return "vue-admin";
+    }
+
+    private String parseSessionInfo(HttpServletRequest request) {
+        return "todoSessionId";
+    }
+
+    private BaseResult<UserInfoResponse> parseUserInfo(String sid) {
+        return BaseResult.success();
+    }
+
+}

+ 97 - 0
src/main/java/org/lym/pom/controller/moment/ui/GlobalViewInterceptor.java

@@ -0,0 +1,97 @@
+package org.lym.pom.controller.moment.ui;
+
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+import org.springframework.util.ObjectUtils;
+import org.springframework.web.servlet.HandlerInterceptor;
+import org.springframework.web.servlet.ModelAndView;
+import pub.developers.forum.api.model.ResultModel;
+import pub.developers.forum.api.response.user.UserInfoResponse;
+import pub.developers.forum.api.service.MessageApiService;
+import pub.developers.forum.api.service.UserApiService;
+import pub.developers.forum.common.constant.Constant;
+import pub.developers.forum.common.support.GlobalViewConfig;
+import pub.developers.forum.common.support.RequestContext;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 接口请求后填充用户信息,方便template获取
+ *
+ * @author lym
+ **/
+@Slf4j
+@Component
+public class GlobalViewInterceptor implements HandlerInterceptor {
+
+    @Resource
+    private UserApiService userApiService;
+
+    @Resource
+    private MessageApiService messageApiService;
+
+    @Resource
+    private GlobalViewConfig globalViewConfig;
+
+    @Override
+    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
+        RequestContext.init();
+
+        String sid = WebUtil.cookieGetSid(request);
+        if (ObjectUtils.isEmpty(sid)) {
+            return true;
+        }
+
+        if (!ObjectUtils.isEmpty(sid)) {
+            ResultModel<UserInfoResponse> resultModel = userApiService.info(sid);
+            if (resultModel.getSuccess() && !ObjectUtils.isEmpty(resultModel.getData())) {
+                WebContext.setCurrentSid(sid);
+                WebContext.setCurrentUser(resultModel.getData());
+            }
+        }
+
+        return true;
+    }
+
+    @Override
+    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
+        try {
+            UserInfoResponse loginUserInfo = WebContext.getCurrentUser();
+
+            // 重定向请求不需要添加
+            if (!ObjectUtils.isEmpty(modelAndView) && !modelAndView.getViewName().startsWith(WebConst.REQUEST_REDIRECT_PREFIX)) {
+                if (!ObjectUtils.isEmpty(loginUserInfo)) {
+                    request.setAttribute(Constant.REQUEST_HEADER_TOKEN_KEY, WebUtil.cookieGetSid(request));
+
+                    Map<String, Object> loginUser = new HashMap<>();
+                    loginUser.put("id", loginUserInfo.getId());
+                    loginUser.put("nickname", loginUserInfo.getNickname());
+                    loginUser.put("avatar", loginUserInfo.getAvatar());
+                    loginUser.put("role", loginUserInfo.getRole());
+                    loginUser.put("unReadMsgNumber", countUnRead());
+
+                    modelAndView.getModel().put("loginUser", loginUser);
+                }
+                modelAndView.getModel().put("isLogin", !ObjectUtils.isEmpty(loginUserInfo));
+
+                modelAndView.getModel().put("globalConfig", globalViewConfig);
+            }
+        } finally {
+            WebContext.removeAll();
+            RequestContext.removeAll();
+        }
+    }
+
+    private Long countUnRead() {
+        ResultModel<Long> countResult = messageApiService.countUnRead();
+        if (countResult.getSuccess() && !ObjectUtils.isEmpty(countResult.getData())) {
+            return countResult.getData();
+        }
+        return 0L;
+    }
+
+}

+ 36 - 0
src/main/java/org/lym/pom/controller/moment/ui/SetMsgToFrontOnExForPageRequestAspect.java

@@ -0,0 +1,36 @@
+package org.lym.pom.controller.moment.ui;
+
+import org.aspectj.lang.ProceedingJoinPoint;
+import org.aspectj.lang.annotation.Around;
+import org.aspectj.lang.annotation.Aspect;
+import org.shoulder.core.exception.BaseRuntimeException;
+import org.shoulder.core.util.ServletUtil;
+import org.springframework.stereotype.Component;
+import org.springframework.web.bind.annotation.GetMapping;
+
+/**
+ * 对于页面Get请求,异常了将异常 msg 作为前端的提示返回 modelAndView
+ *
+ * @author lym
+ **/
+@Component
+@Aspect
+public class SetMsgToFrontOnExForPageRequestAspect {
+
+    @Around("execution(* pub.developers.forum.portal..*.*(..)) && @annotation(getMapping)")
+    public Object process(ProceedingJoinPoint joinPoint, GetMapping getMapping) throws Throwable {
+        String toastMessage;
+
+        try {
+            return joinPoint.proceed();
+        } catch (BaseRuntimeException bizException) {
+            toastMessage = bizException.getMessage();
+        } catch (Exception e) {
+            toastMessage = "未知异常";
+        }
+
+        ServletUtil.getRequest().setAttribute("toast", toastMessage);
+        return "error";
+    }
+
+}

+ 48 - 0
src/main/java/org/lym/pom/controller/moment/ui/model/PageRequestModel.java

@@ -0,0 +1,48 @@
+package org.lym.pom.controller.moment.ui.model;
+
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+import java.io.Serializable;
+
+/**
+ * @author Qiangqiang.Bian
+ * @create 20/7/23
+ * @desc
+ **/
+@Getter
+@NoArgsConstructor
+public class PageRequestModel<T> implements Serializable {
+    private static final Integer DEF_PAGE_SIZE = 10;
+    private static final Integer DEF_PAGE_NO = 1;
+
+    private Integer pageSize = DEF_PAGE_SIZE;
+
+    private Integer pageNo = DEF_PAGE_NO;
+
+    @Setter
+    private T filter;
+
+    public PageRequestModel(Integer pageSize, Integer pageNo, T filter) {
+        setPageSize(pageSize);
+        setPageNo(pageNo);
+        this.filter = filter;
+    }
+
+    public void setPageSize(Integer pageSize) {
+        if (pageSize <= 0) {
+            this.pageSize = DEF_PAGE_SIZE;
+        } else {
+            this.pageSize = pageSize;
+        }
+    }
+
+    public void setPageNo(Integer pageNo) {
+        if (pageNo <= 0) {
+            this.pageNo = DEF_PAGE_NO;
+        } else {
+            this.pageNo = pageNo;
+        }
+    }
+}

+ 35 - 0
src/main/java/org/lym/pom/controller/moment/ui/model/PageResponseModel.java

@@ -0,0 +1,35 @@
+package org.lym.pom.controller.moment.ui.model;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @author Qiangqiang.Bian
+ * @create 20/7/23
+ * @desc
+ **/
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class PageResponseModel<T> implements Serializable {
+
+    private List<T> list;
+    private Long total;
+    private Integer size;
+
+    public static <T> PageResponseModel<T> build(Long total, Integer size, List<T> list) {
+        PageResponseModel<T> result = new PageResponseModel<>();
+        result.setSize(size);
+        result.setTotal(total);
+        result.setList(list);
+
+        return result;
+    }
+
+}

+ 22 - 0
src/main/java/org/lym/pom/controller/moment/ui/model/ResultModel.java

@@ -0,0 +1,22 @@
+package org.lym.pom.controller.moment.ui.model;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @author Qiangqiang.Bian
+ * @create 20/7/23
+ * @desc
+ **/
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class ResultModel<T> {
+    private Integer code = 200;
+    private String message = "success";
+    private Boolean success = Boolean.TRUE;
+    private T data;
+}

+ 27 - 0
src/main/java/org/lym/pom/controller/moment/ui/request/AdminBooleanRequest.java

@@ -0,0 +1,27 @@
+package org.lym.pom.controller.moment.ui.request;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+/**
+ * @author Qiangqiang.Bian
+ * @create 2020/12/9
+ * @desc
+ **/
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class AdminBooleanRequest implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    private Long id;
+
+    private Boolean is;
+
+}

+ 15 - 0
src/main/java/org/lym/pom/controller/moment/ui/request/BasePageRequest.java

@@ -0,0 +1,15 @@
+package org.lym.pom.controller.moment.ui.request;
+
+import lombok.Data;
+
+/**
+ * @author Qiangqiang.Bian
+ * @create 2020/10/25
+ * @desc
+ **/
+@Data
+public class BasePageRequest {
+
+    private int pageNo = 1;
+
+}

+ 15 - 0
src/main/java/org/lym/pom/controller/moment/ui/request/FaqRequest.java

@@ -0,0 +1,15 @@
+package org.lym.pom.controller.moment.ui.request;
+
+import lombok.Data;
+
+/**
+ * @author Qiangqiang.Bian
+ * @create 2020/10/25
+ * @desc
+ **/
+@Data
+public class FaqRequest extends BasePageRequest {
+
+    private String type;
+
+}

+ 18 - 0
src/main/java/org/lym/pom/controller/moment/ui/request/IndexRequest.java

@@ -0,0 +1,18 @@
+package org.lym.pom.controller.moment.ui.request;
+
+import lombok.Data;
+
+/**
+ * @author Qiangqiang.Bian
+ * @create 2020/10/24
+ * @desc
+ **/
+@Data
+public class IndexRequest extends BasePageRequest {
+
+    private String type;
+
+    private String toast;
+
+    private String token;
+}

+ 15 - 0
src/main/java/org/lym/pom/controller/moment/ui/request/MessageRequest.java

@@ -0,0 +1,15 @@
+package org.lym.pom.controller.moment.ui.request;
+
+import lombok.Data;
+
+/**
+ * @author Qiangqiang.Bian
+ * @create 2020/12/5
+ * @desc
+ **/
+@Data
+public class MessageRequest extends BasePageRequest {
+
+    private String type;
+
+}

+ 14 - 0
src/main/java/org/lym/pom/controller/moment/ui/request/SearchRequest.java

@@ -0,0 +1,14 @@
+package org.lym.pom.controller.moment.ui.request;
+
+import lombok.Data;
+
+/**
+ * @author Qiangqiang.Bian
+ * @create 2020/12/2
+ * @desc
+ **/
+@Data
+public class SearchRequest extends BasePageRequest {
+
+    private String key;
+}

+ 15 - 0
src/main/java/org/lym/pom/controller/moment/ui/request/UserRequest.java

@@ -0,0 +1,15 @@
+package org.lym.pom.controller.moment.ui.request;
+
+import lombok.Data;
+
+/**
+ * @author Qiangqiang.Bian
+ * @create 2020/10/25
+ * @desc
+ **/
+@Data
+public class UserRequest extends BasePageRequest {
+
+    private String type;
+
+}

+ 36 - 0
src/main/java/org/lym/pom/controller/moment/ui/request/article/ArticleAddTypeRequest.java

@@ -0,0 +1,36 @@
+package org.lym.pom.controller.moment.ui.request.article;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+/**
+ * @author Qiangqiang.Bian
+ * @create 2020/10/31
+ * @desc
+ **/
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class ArticleAddTypeRequest implements Serializable {
+
+    /**
+     * 名称
+     */
+    private String name;
+
+    /**
+     * 描述
+     */
+    private String description;
+
+    /**
+     * 作用域
+     */
+    private String scope;
+
+}

+ 35 - 0
src/main/java/org/lym/pom/controller/moment/ui/request/article/ArticleAdminPageRequest.java

@@ -0,0 +1,35 @@
+package org.lym.pom.controller.moment.ui.request.article;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+/**
+ * @author Qiangqiang.Bian
+ * @create 2020/12/9
+ * @desc
+ **/
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class ArticleAdminPageRequest implements Serializable {
+
+    private Long typeId;
+
+    private String auditState;
+
+    private Boolean official;
+
+    private Boolean top;
+
+    private Boolean marrow;
+
+    private Long userId;
+
+    private String title;
+
+}

+ 40 - 0
src/main/java/org/lym/pom/controller/moment/ui/request/article/ArticleAdminTypePageRequest.java

@@ -0,0 +1,40 @@
+package org.lym.pom.controller.moment.ui.request.article;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+/**
+ * @author Qiangqiang.Bian
+ * @create 2020/12/12
+ * @desc
+ **/
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class ArticleAdminTypePageRequest implements Serializable {
+
+    /**
+     * 名称
+     */
+    private String name;
+
+    /**
+     * 描述
+     */
+    private String description;
+
+    /**
+     * 作用域
+     */
+    private String scope;
+
+    /**
+     * 审核状态
+     */
+    private String auditState;
+}

+ 23 - 0
src/main/java/org/lym/pom/controller/moment/ui/request/article/ArticleAuthorPageRequest.java

@@ -0,0 +1,23 @@
+package org.lym.pom.controller.moment.ui.request.article;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+/**
+ * @author Qiangqiang.Bian
+ * @create 2020/11/1
+ * @desc
+ **/
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class ArticleAuthorPageRequest implements Serializable {
+
+    private Long userId;
+
+}

+ 38 - 0
src/main/java/org/lym/pom/controller/moment/ui/request/article/ArticleSaveArticleRequest.java

@@ -0,0 +1,38 @@
+package org.lym.pom.controller.moment.ui.request.article;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+import java.util.Set;
+
+/**
+ * @author Qiangqiang.Bian
+ * @create 2020/10/31
+ * @desc
+ **/
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class ArticleSaveArticleRequest implements Serializable {
+
+    private Long id;
+
+    private Long typeId;
+
+    private String title;
+
+    private String contentType;
+
+    private String markdownContent;
+
+    private String htmlContent;
+
+    private String headImg;
+
+    private Set<Long> tagIds;
+
+}

+ 23 - 0
src/main/java/org/lym/pom/controller/moment/ui/request/article/ArticleUserPageRequest.java

@@ -0,0 +1,23 @@
+package org.lym.pom.controller.moment.ui.request.article;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+/**
+ * @author Qiangqiang.Bian
+ * @create 2020/11/1
+ * @desc
+ **/
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class ArticleUserPageRequest implements Serializable {
+
+    private String typeName;
+
+}

+ 26 - 0
src/main/java/org/lym/pom/controller/moment/ui/request/comment/CommentCreateRequest.java

@@ -0,0 +1,26 @@
+package org.lym.pom.controller.moment.ui.request.comment;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+/**
+ * @author Qiangqiang.Bian
+ * @create 2020/11/6
+ * @desc
+ **/
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class CommentCreateRequest implements Serializable {
+
+    private Long postsId;
+
+    private String content;
+
+    private Long replyId;
+}

+ 34 - 0
src/main/java/org/lym/pom/controller/moment/ui/request/config/ConfigAddRequest.java

@@ -0,0 +1,34 @@
+package org.lym.pom.controller.moment.ui.request.config;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @author Qiangqiang.Bian
+ * @create 2020/12/26
+ * @desc
+ **/
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class ConfigAddRequest implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    private String type;
+
+    private String name;
+
+    private String content;
+
+    private Date startAt;
+
+    private Date endAt;
+
+}

+ 29 - 0
src/main/java/org/lym/pom/controller/moment/ui/request/config/ConfigPageRequest.java

@@ -0,0 +1,29 @@
+package org.lym.pom.controller.moment.ui.request.config;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+/**
+ * @author Qiangqiang.Bian
+ * @create 2020/12/26
+ * @desc
+ **/
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class ConfigPageRequest implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    private String state;
+
+    private String type;
+
+    private String name;
+
+}

+ 36 - 0
src/main/java/org/lym/pom/controller/moment/ui/request/config/ConfigUpdateRequest.java

@@ -0,0 +1,36 @@
+package org.lym.pom.controller.moment.ui.request.config;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @author Qiangqiang.Bian
+ * @create 2020/12/26
+ * @desc
+ **/
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class ConfigUpdateRequest implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    private Long id;
+
+    private String type;
+
+    private String name;
+
+    private String content;
+
+    private Date startAt;
+
+    private Date endAt;
+
+}

+ 29 - 0
src/main/java/org/lym/pom/controller/moment/ui/request/faq/FaqAdminPageRequest.java

@@ -0,0 +1,29 @@
+package org.lym.pom.controller.moment.ui.request.faq;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+/**
+ * @author Qiangqiang.Bian
+ * @create 2020/12/10
+ * @desc
+ **/
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class FaqAdminPageRequest implements Serializable {
+
+    private String title;
+
+    private String auditState;
+
+    private Long userId;
+
+    private Long commentId;
+
+}

+ 23 - 0
src/main/java/org/lym/pom/controller/moment/ui/request/faq/FaqAuthorPageRequest.java

@@ -0,0 +1,23 @@
+package org.lym.pom.controller.moment.ui.request.faq;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+/**
+ * @author Qiangqiang.Bian
+ * @create 2020/11/1
+ * @desc
+ **/
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class FaqAuthorPageRequest implements Serializable {
+
+    private Long userId;
+
+}

+ 34 - 0
src/main/java/org/lym/pom/controller/moment/ui/request/faq/FaqSaveFaqRequest.java

@@ -0,0 +1,34 @@
+package org.lym.pom.controller.moment.ui.request.faq;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+import java.util.Set;
+
+/**
+ * @author Qiangqiang.Bian
+ * @create 2020/11/1
+ * @desc
+ **/
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class FaqSaveFaqRequest implements Serializable {
+
+    private Long id;
+
+    private String title;
+
+    private String contentType;
+
+    private String markdownContent;
+
+    private String htmlContent;
+
+    private Set<Long> tagIds;
+
+}

+ 25 - 0
src/main/java/org/lym/pom/controller/moment/ui/request/faq/FaqSolutionRequest.java

@@ -0,0 +1,25 @@
+package org.lym.pom.controller.moment.ui.request.faq;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+/**
+ * @author Qiangqiang.Bian
+ * @create 2020/11/19
+ * @desc
+ **/
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class FaqSolutionRequest implements Serializable {
+
+    private Long faqId;
+
+    private Long commentId;
+
+}

+ 23 - 0
src/main/java/org/lym/pom/controller/moment/ui/request/faq/FaqUserPageRequest.java

@@ -0,0 +1,23 @@
+package org.lym.pom.controller.moment.ui.request.faq;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+/**
+ * @author Qiangqiang.Bian
+ * @create 2020/11/1
+ * @desc
+ **/
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class FaqUserPageRequest implements Serializable {
+
+    private int solution;
+
+}

+ 23 - 0
src/main/java/org/lym/pom/controller/moment/ui/request/file/FileUploadImgRequest.java

@@ -0,0 +1,23 @@
+package org.lym.pom.controller.moment.ui.request.file;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+/**
+ * @author Qiangqiang.Bian
+ * @create 2020/11/23
+ * @desc
+ **/
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class FileUploadImgRequest implements Serializable {
+
+    private byte[] base64;
+    private String fileName;
+}

+ 23 - 0
src/main/java/org/lym/pom/controller/moment/ui/request/github/GithubOauthLoginRequest.java

@@ -0,0 +1,23 @@
+package org.lym.pom.controller.moment.ui.request.github;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import pub.developers.forum.api.request.user.UserBaseLoginRequest;
+
+import java.io.Serializable;
+
+/**
+ * @author Qiangqiang.Bian
+ * @create 2021/5/15
+ * @desc
+ **/
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class GithubOauthLoginRequest extends UserBaseLoginRequest implements Serializable {
+
+    private String code;
+}

+ 23 - 0
src/main/java/org/lym/pom/controller/moment/ui/request/message/MessagePageRequest.java

@@ -0,0 +1,23 @@
+package org.lym.pom.controller.moment.ui.request.message;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+/**
+ * @author Qiangqiang.Bian
+ * @create 2020/7/31
+ * @desc
+ **/
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class MessagePageRequest implements Serializable {
+
+    private String typeDesc;
+
+}

+ 33 - 0
src/main/java/org/lym/pom/controller/moment/ui/request/tag/TagCreateRequest.java

@@ -0,0 +1,33 @@
+package org.lym.pom.controller.moment.ui.request.tag;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+/**
+ * @author Qiangqiang.Bian
+ * @create 2020/7/31
+ * @desc
+ **/
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class TagCreateRequest implements Serializable {
+
+    private String groupName;
+
+    /**
+     * 名称
+     */
+    private String name;
+
+    /**
+     * 描述
+     */
+    private String description;
+
+}

+ 38 - 0
src/main/java/org/lym/pom/controller/moment/ui/request/tag/TagPageRequest.java

@@ -0,0 +1,38 @@
+package org.lym.pom.controller.moment.ui.request.tag;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+/**
+ * @author Qiangqiang.Bian
+ * @create 20/9/9
+ * @desc
+ **/
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class TagPageRequest implements Serializable {
+
+    private String groupName;
+
+    /**
+     * 名称
+     */
+    private String name;
+
+    /**
+     * 描述
+     */
+    private String description;
+
+    /**
+     * 审核状态
+     */
+    private String auditState;
+
+}

+ 29 - 0
src/main/java/org/lym/pom/controller/moment/ui/request/user/UserAdminPageRequest.java

@@ -0,0 +1,29 @@
+package org.lym.pom.controller.moment.ui.request.user;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+/**
+ * @author Qiangqiang.Bian
+ * @create 2020/9/8
+ * @desc
+ **/
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class UserAdminPageRequest implements Serializable {
+
+    private String nickname;
+
+    private String email;
+
+    private String role;
+
+    private String state;
+
+}

+ 19 - 0
src/main/java/org/lym/pom/controller/moment/ui/request/user/UserBaseLoginRequest.java

@@ -0,0 +1,19 @@
+package org.lym.pom.controller.moment.ui.request.user;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author Qiangqiang.Bian
+ * @create 2020/12/4
+ * @desc
+ **/
+@Data
+public class UserBaseLoginRequest implements Serializable {
+
+    private String ua;
+
+    private String ip;
+
+}

+ 25 - 0
src/main/java/org/lym/pom/controller/moment/ui/request/user/UserEmailLoginRequest.java

@@ -0,0 +1,25 @@
+package org.lym.pom.controller.moment.ui.request.user;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+/**
+ * @author Qiangqiang.Bian
+ * @create 2020/10/19
+ * @desc
+ **/
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class UserEmailLoginRequest extends UserBaseLoginRequest implements Serializable {
+
+    private String email;
+
+    private String password;
+
+}

+ 24 - 0
src/main/java/org/lym/pom/controller/moment/ui/request/user/UserOptLogPageRequest.java

@@ -0,0 +1,24 @@
+package org.lym.pom.controller.moment.ui.request.user;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+/**
+ * @author Qiangqiang.Bian
+ * @create 2020/12/9
+ * @desc
+ **/
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class UserOptLogPageRequest implements Serializable {
+
+    private String type;
+
+    private Long operatorId;
+}

+ 27 - 0
src/main/java/org/lym/pom/controller/moment/ui/request/user/UserRegisterRequest.java

@@ -0,0 +1,27 @@
+package org.lym.pom.controller.moment.ui.request.user;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+/**
+ * @author Qiangqiang.Bian
+ * @create 20/7/30
+ * @desc
+ **/
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class UserRegisterRequest extends UserBaseLoginRequest implements Serializable {
+
+    private String email;
+
+    private String nickname;
+
+    private String password;
+
+}

+ 21 - 0
src/main/java/org/lym/pom/controller/moment/ui/request/user/UserTokenLogoutRequest.java

@@ -0,0 +1,21 @@
+package org.lym.pom.controller.moment.ui.request.user;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @author Qiangqiang.Bian
+ * @create 2020/12/4
+ * @desc
+ **/
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class UserTokenLogoutRequest extends UserBaseLoginRequest {
+
+    private String token;
+
+}

+ 27 - 0
src/main/java/org/lym/pom/controller/moment/ui/request/user/UserUpdateInfoRequest.java

@@ -0,0 +1,27 @@
+package org.lym.pom.controller.moment.ui.request.user;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+/**
+ * @author Qiangqiang.Bian
+ * @create 2020/9/8
+ * @desc
+ **/
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class UserUpdateInfoRequest implements Serializable {
+
+    private String email;
+
+    private String nickname;
+
+    private String signature;
+
+}

+ 25 - 0
src/main/java/org/lym/pom/controller/moment/ui/request/user/UserUpdatePwdRequest.java

@@ -0,0 +1,25 @@
+package org.lym.pom.controller.moment.ui.request.user;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+/**
+ * @author Qiangqiang.Bian
+ * @create 2020/9/8
+ * @desc
+ **/
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class UserUpdatePwdRequest implements Serializable {
+
+    private String oldPassword;
+
+    private String newPassword;
+
+}

+ 25 - 0
src/main/java/org/lym/pom/controller/moment/ui/request/user/UserUpdateRoleRequest.java

@@ -0,0 +1,25 @@
+package org.lym.pom.controller.moment.ui.request.user;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+/**
+ * @author Qiangqiang.Bian
+ * @create 2020/9/8
+ * @desc
+ **/
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class UserUpdateRoleRequest implements Serializable {
+
+    private Long userId;
+
+    private String role;
+
+}

+ 61 - 0
src/main/java/org/lym/pom/controller/moment/ui/response/article/ArticleInfoResponse.java

@@ -0,0 +1,61 @@
+package org.lym.pom.controller.moment.ui.response.article;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import pub.developers.forum.api.vo.TagVO;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @author Qiangqiang.Bian
+ * @create 2020/11/3
+ * @desc
+ **/
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class ArticleInfoResponse implements Serializable {
+
+    private Long id;
+
+    private Long typeId;
+
+    private String auditState;
+
+    private Boolean official;
+
+    private Boolean top;
+
+    private Boolean marrow;
+
+    private String title;
+
+    private String htmlContent;
+
+    private String markdownContent;
+
+    private String headImg;
+
+    private Long authorId;
+
+    private String authorNickname;
+
+    private String authorAvatar;
+
+    private Date createAt;
+
+    private Date updateAt;
+
+    private Long views;
+
+    private Long approvals;
+
+    private Long comments;
+
+    private List<TagVO> tags;
+}

+ 58 - 0
src/main/java/org/lym/pom/controller/moment/ui/response/article/ArticleQueryTypesResponse.java

@@ -0,0 +1,58 @@
+package org.lym.pom.controller.moment.ui.response.article;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+/**
+ * @author Qiangqiang.Bian
+ * @create 2020/10/31
+ * @desc
+ **/
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class ArticleQueryTypesResponse implements Serializable {
+
+    private Long id;
+
+    private String name;
+
+    private Long refCount;
+
+    /**
+     * 描述
+     */
+    private String description;
+
+    /**
+     * 作用域
+     */
+    private String scope;
+
+    /**
+     * 创建人
+     */
+    private Long creatorId;
+
+    /**
+     * 审核状态
+     */
+    private String auditState;
+
+    /**
+     * 创建时间
+     */
+    private String createAt;
+
+    /**
+     * 更新时间
+     */
+    private String updateAt;
+
+
+}

+ 62 - 0
src/main/java/org/lym/pom/controller/moment/ui/response/article/ArticleUserPageResponse.java

@@ -0,0 +1,62 @@
+package org.lym.pom.controller.moment.ui.response.article;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import pub.developers.forum.api.vo.TagVO;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @author Qiangqiang.Bian
+ * @create 2020/11/1
+ * @desc
+ **/
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class ArticleUserPageResponse implements Serializable {
+
+    private Long id;
+
+    private String auditState;
+
+    private String category;
+
+    private String categoryDesc;
+
+    private Boolean official;
+
+    private Boolean top;
+
+    private Boolean marrow;
+
+    private String title;
+
+    private String introduction;
+
+    private String headImg;
+
+    private Long authorId;
+
+    private String authorNickname;
+
+    private String authorAvatar;
+
+    private Date createAt;
+
+    private Date updateAt;
+
+    private Long views;
+
+    private Long approvals;
+
+    private Long comments;
+
+    private List<TagVO> tags;
+
+}

+ 50 - 0
src/main/java/org/lym/pom/controller/moment/ui/response/comment/CommentPageResponse.java

@@ -0,0 +1,50 @@
+package org.lym.pom.controller.moment.ui.response.comment;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @author Qiangqiang.Bian
+ * @create 2020/11/6
+ * @desc
+ **/
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class CommentPageResponse implements Serializable {
+
+    private Long id;
+
+    private Date createAt;
+
+    private String content;
+
+    private Long replyId;
+
+    /**评论人*/
+    private Commentator commentator;
+
+    /**被回复人*/
+    private Commentator respondent;
+
+    /**回复列表*/
+    private List<CommentPageResponse> replies;
+
+    @Data
+    @Builder
+    @AllArgsConstructor
+    @NoArgsConstructor
+    public static class Commentator {
+        private Long id;
+        private String nickname;
+        private String avatar;
+    }
+
+}

+ 44 - 0
src/main/java/org/lym/pom/controller/moment/ui/response/config/ConfigResponse.java

@@ -0,0 +1,44 @@
+package org.lym.pom.controller.moment.ui.response.config;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @author Qiangqiang.Bian
+ * @create 2020/12/26
+ * @desc
+ **/
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class ConfigResponse implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    private Long id;
+
+    private String state;
+
+    private String type;
+
+    private String name;
+
+    private String content;
+
+    private Date startAt;
+
+    private Date endAt;
+
+    private Long creator;
+
+    private Date createAt;
+
+    private Date updateAt;
+
+}

+ 27 - 0
src/main/java/org/lym/pom/controller/moment/ui/response/faq/FaqHotsResponse.java

@@ -0,0 +1,27 @@
+package org.lym.pom.controller.moment.ui.response.faq;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @author Qiangqiang.Bian
+ * @create 2020/11/17
+ * @desc
+ **/
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class FaqHotsResponse implements Serializable {
+
+    private Long id;
+
+    private String title;
+
+    private Date createAt;
+}

+ 52 - 0
src/main/java/org/lym/pom/controller/moment/ui/response/faq/FaqInfoResponse.java

@@ -0,0 +1,52 @@
+package org.lym.pom.controller.moment.ui.response.faq;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import pub.developers.forum.api.vo.TagVO;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @author Qiangqiang.Bian
+ * @create 2020/11/17
+ * @desc
+ **/
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class FaqInfoResponse implements Serializable {
+
+    private Long id;
+
+    private String auditState;
+
+    private String title;
+
+    private String htmlContent;
+
+    private String markdownContent;
+
+    private Long authorId;
+
+    private String authorNickname;
+
+    private String authorAvatar;
+
+    private Date createAt;
+
+    private Date updateAt;
+
+    private Long views;
+
+    private Long approvals;
+
+    private Long comments;
+
+    private List<TagVO> tags;
+
+}

+ 59 - 0
src/main/java/org/lym/pom/controller/moment/ui/response/faq/FaqUserPageResponse.java

@@ -0,0 +1,59 @@
+package org.lym.pom.controller.moment.ui.response.faq;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import pub.developers.forum.api.vo.SolutionVO;
+import pub.developers.forum.api.vo.TagVO;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @author Qiangqiang.Bian
+ * @create 2020/11/1
+ * @desc
+ **/
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class FaqUserPageResponse implements Serializable {
+
+    private Long id;
+
+    private String category;
+
+    private String auditState;
+
+    private String categoryDesc;
+
+    private String title;
+
+    private String introduction;
+
+    private Long authorId;
+
+    private String authorNickname;
+
+    private String authorAvatar;
+
+    private Date createAt;
+
+    private Date updateAt;
+
+    private Long views;
+
+    private Long approvals;
+
+    private Long comments;
+
+    private List<TagVO> tags;
+
+    private SolutionVO solution;
+
+    private String solutionDesc;
+
+}

+ 40 - 0
src/main/java/org/lym/pom/controller/moment/ui/response/message/MessagePageResponse.java

@@ -0,0 +1,40 @@
+package org.lym.pom.controller.moment.ui.response.message;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @author Qiangqiang.Bian
+ * @create 2020/7/31
+ * @desc
+ **/
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class MessagePageResponse implements Serializable {
+
+    private Long id;
+
+    private String read;
+
+    private String sender;
+
+    private String senderAvatar;
+
+    private String senderName;
+
+    private String typeDesc;
+
+    private String title;
+
+    private String infoId;
+
+    private Date createAt;
+
+}

+ 61 - 0
src/main/java/org/lym/pom/controller/moment/ui/response/tag/TagPageResponse.java

@@ -0,0 +1,61 @@
+package org.lym.pom.controller.moment.ui.response.tag;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+/**
+ * @author Qiangqiang.Bian
+ * @create 20/9/9
+ * @desc
+ **/
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class TagPageResponse implements Serializable {
+
+    private Long id;
+
+    /**
+     * 创建时间
+     */
+    private String createAt;
+
+    /**
+     * 更新时间
+     */
+    private String updateAt;
+
+    private String groupName;
+
+    /**
+     * 名称
+     */
+    private String name;
+
+    /**
+     * 描述
+     */
+    private String description;
+
+    /**
+     * 引用统计
+     */
+    private Long refCount;
+
+    /**
+     * 创建人
+     */
+    private Long creatorId;
+
+    /**
+     * 审核状态
+     */
+    private String auditState;
+
+
+}

+ 37 - 0
src/main/java/org/lym/pom/controller/moment/ui/response/tag/TagQueryResponse.java

@@ -0,0 +1,37 @@
+package org.lym.pom.controller.moment.ui.response.tag;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+/**
+ * @author Qiangqiang.Bian
+ * @create 2020/10/31
+ * @desc
+ **/
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class TagQueryResponse implements Serializable {
+
+    private Long id;
+
+    private String groupName;
+
+    /**
+     * 名称
+     */
+    private String name;
+
+    /**
+     * 描述
+     */
+    private String description;
+
+    private Long refCount;
+
+}

+ 40 - 0
src/main/java/org/lym/pom/controller/moment/ui/response/user/UserInfoResponse.java

@@ -0,0 +1,40 @@
+package org.lym.pom.controller.moment.ui.response.user;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @author Qiangqiang.Bian
+ * @create 2020/10/27
+ * @desc
+ **/
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class UserInfoResponse implements Serializable {
+
+    private Long id;
+
+    private String email;
+
+    private String role;
+
+    private String nickname;
+
+    private String sex;
+
+    private String avatar;
+
+    private String signature;
+
+    private Date createAt;
+
+    private Date lastLoginTime;
+
+}

+ 36 - 0
src/main/java/org/lym/pom/controller/moment/ui/response/user/UserOptLogPageResponse.java

@@ -0,0 +1,36 @@
+package org.lym.pom.controller.moment.ui.response.user;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+/**
+ * @author Qiangqiang.Bian
+ * @create 2020/12/9
+ * @desc
+ **/
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class UserOptLogPageResponse implements Serializable {
+
+    private Long userId;
+
+    private String avatar;
+
+    private String email;
+
+    private String nickname;
+
+    private String type;
+
+    private String content;
+
+    private String createAt;
+
+
+}

+ 41 - 0
src/main/java/org/lym/pom/controller/moment/ui/response/user/UserPageResponse.java

@@ -0,0 +1,41 @@
+package org.lym.pom.controller.moment.ui.response.user;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+/**
+ * @author Qiangqiang.Bian
+ * @create 2020/9/8
+ * @desc
+ **/
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class UserPageResponse implements Serializable {
+
+    private Long id;
+
+    private String email;
+
+    private String role;
+
+    private String nickname;
+
+    private String sex;
+
+    private String state;
+
+    private String avatar;
+
+    private String signature;
+
+    private String createAt;
+
+    private String updateAt;
+
+}

+ 18 - 0
src/main/java/org/lym/pom/controller/moment/ui/service/ApprovalApiService.java

@@ -0,0 +1,18 @@
+package org.lym.pom.controller.moment.ui.service;
+
+import pub.developers.forum.api.model.ResultModel;
+
+/**
+ * @author Qiangqiang.Bian
+ * @create 2020/12/1
+ * @desc
+ **/
+public interface ApprovalApiService {
+
+    ResultModel<Long> create(Long postsId);
+
+    ResultModel<Long> delete(Long postsId);
+
+    ResultModel<Boolean> hasApproval(Long postsId);
+
+}

+ 48 - 0
src/main/java/org/lym/pom/controller/moment/ui/service/ArticleApiService.java

@@ -0,0 +1,48 @@
+package org.lym.pom.controller.moment.ui.service;
+
+import pub.developers.forum.api.model.PageRequestModel;
+import pub.developers.forum.api.model.PageResponseModel;
+import pub.developers.forum.api.model.ResultModel;
+import pub.developers.forum.api.request.AdminBooleanRequest;
+import pub.developers.forum.api.request.article.*;
+import pub.developers.forum.api.response.article.ArticleInfoResponse;
+import pub.developers.forum.api.response.article.ArticleQueryTypesResponse;
+import pub.developers.forum.api.response.article.ArticleUserPageResponse;
+
+import java.util.List;
+
+/**
+ * @author Qiangqiang.Bian
+ * @create 2020/10/31
+ * @desc
+ **/
+public interface ArticleApiService {
+
+    ResultModel<List<ArticleQueryTypesResponse>> queryAllTypes();
+
+    ResultModel<List<ArticleQueryTypesResponse>> queryAdminTypes();
+
+    ResultModel<PageResponseModel<ArticleUserPageResponse>> adminPage(PageRequestModel<ArticleAdminPageRequest> pageRequestModel);
+
+    ResultModel<List<ArticleQueryTypesResponse>> queryEditArticleTypes();
+
+    ResultModel addType(ArticleAddTypeRequest request);
+
+    ResultModel<Long> saveArticle(ArticleSaveArticleRequest request);
+
+    ResultModel<PageResponseModel<ArticleUserPageResponse>> userPage(PageRequestModel<ArticleUserPageRequest> pageRequestModel);
+
+    ResultModel<PageResponseModel<ArticleUserPageResponse>> authorPage(PageRequestModel<ArticleAuthorPageRequest> pageRequestModel);
+
+    ResultModel<ArticleInfoResponse> info(Long id);
+
+    ResultModel adminTop(AdminBooleanRequest booleanRequest);
+
+    ResultModel adminOfficial(AdminBooleanRequest booleanRequest);
+
+    ResultModel adminMarrow(AdminBooleanRequest booleanRequest);
+
+    ResultModel<PageResponseModel<ArticleQueryTypesResponse>> typePage(PageRequestModel<ArticleAdminTypePageRequest> pageRequestModel);
+
+    ResultModel typeAuditState(AdminBooleanRequest booleanRequest);
+}

+ 20 - 0
src/main/java/org/lym/pom/controller/moment/ui/service/CommentApiService.java

@@ -0,0 +1,20 @@
+package org.lym.pom.controller.moment.ui.service;
+
+import pub.developers.forum.api.model.PageRequestModel;
+import pub.developers.forum.api.model.PageResponseModel;
+import pub.developers.forum.api.model.ResultModel;
+import pub.developers.forum.api.request.comment.CommentCreateRequest;
+import pub.developers.forum.api.response.comment.CommentPageResponse;
+
+/**
+ * @author Qiangqiang.Bian
+ * @create 2020/11/6
+ * @desc
+ **/
+public interface CommentApiService {
+
+    ResultModel create(CommentCreateRequest request);
+
+    ResultModel<PageResponseModel<CommentPageResponse>> page(PageRequestModel<Long> pageRequest);
+
+}

+ 56 - 0
src/main/java/org/lym/pom/controller/moment/ui/service/ConfigApiService.java

@@ -0,0 +1,56 @@
+package org.lym.pom.controller.moment.ui.service;
+
+import pub.developers.forum.api.model.PageRequestModel;
+import pub.developers.forum.api.model.PageResponseModel;
+import pub.developers.forum.api.model.ResultModel;
+import pub.developers.forum.api.request.AdminBooleanRequest;
+import pub.developers.forum.api.request.config.ConfigAddRequest;
+import pub.developers.forum.api.request.config.ConfigPageRequest;
+import pub.developers.forum.api.request.config.ConfigUpdateRequest;
+import pub.developers.forum.api.response.config.ConfigResponse;
+
+import java.util.List;
+import java.util.Set;
+
+/**
+ * @author Qiangqiang.Bian
+ * @create 2020/12/26
+ * @desc
+ **/
+public interface ConfigApiService {
+
+    /**
+     * 添加
+     * @param request
+     * @return
+     */
+    ResultModel add(ConfigAddRequest request);
+
+    /**
+     * 更新
+     * @param request
+     * @return
+     */
+    ResultModel update(ConfigUpdateRequest request);
+
+    /**
+     * 更新状态
+     * @param request
+     * @return
+     */
+    ResultModel state(AdminBooleanRequest request);
+
+    /**
+     * 分页查询
+     * @param pageRequestModel
+     * @return
+     */
+    ResultModel<PageResponseModel<ConfigResponse>> page(PageRequestModel<ConfigPageRequest> pageRequestModel);
+
+    /**
+     * 类别查询可用
+     * @param types
+     * @return
+     */
+    ResultModel<List<ConfigResponse>> queryAvailable(Set<String> types);
+}

+ 33 - 0
src/main/java/org/lym/pom/controller/moment/ui/service/FaqApiService.java

@@ -0,0 +1,33 @@
+package org.lym.pom.controller.moment.ui.service;
+
+import pub.developers.forum.api.model.PageRequestModel;
+import pub.developers.forum.api.model.PageResponseModel;
+import pub.developers.forum.api.model.ResultModel;
+import pub.developers.forum.api.request.faq.*;
+import pub.developers.forum.api.response.faq.FaqHotsResponse;
+import pub.developers.forum.api.response.faq.FaqInfoResponse;
+import pub.developers.forum.api.response.faq.FaqUserPageResponse;
+
+import java.util.List;
+
+/**
+ * @author Qiangqiang.Bian
+ * @create 2020/11/1
+ * @desc
+ **/
+public interface FaqApiService {
+
+    ResultModel<Long> saveFaq(FaqSaveFaqRequest request);
+
+    ResultModel<PageResponseModel<FaqUserPageResponse>> adminPage(PageRequestModel<FaqAdminPageRequest> pageRequestModel);
+
+    ResultModel<PageResponseModel<FaqUserPageResponse>> userPage(PageRequestModel<FaqUserPageRequest> pageRequestModel);
+
+    ResultModel<PageResponseModel<FaqUserPageResponse>> authorPage(PageRequestModel<FaqAuthorPageRequest> pageRequestModel);
+
+    ResultModel<FaqInfoResponse> info(Long id);
+
+    ResultModel<List<FaqHotsResponse>> hots(int size);
+
+    ResultModel solution(FaqSolutionRequest request);
+}

+ 15 - 0
src/main/java/org/lym/pom/controller/moment/ui/service/FileApiService.java

@@ -0,0 +1,15 @@
+package org.lym.pom.controller.moment.ui.service;
+
+import pub.developers.forum.api.model.ResultModel;
+import pub.developers.forum.api.request.file.FileUploadImgRequest;
+
+/**
+ * @author Qiangqiang.Bian
+ * @create 2020/11/23
+ * @desc
+ **/
+public interface FileApiService {
+
+    ResultModel<String> uploadImg(FileUploadImgRequest request);
+
+}

+ 15 - 0
src/main/java/org/lym/pom/controller/moment/ui/service/GithubApiService.java

@@ -0,0 +1,15 @@
+package org.lym.pom.controller.moment.ui.service;
+
+import pub.developers.forum.api.model.ResultModel;
+import pub.developers.forum.api.request.github.GithubOauthLoginRequest;
+
+/**
+ * @author Qiangqiang.Bian
+ * @create 2021/5/15
+ * @desc
+ **/
+public interface GithubApiService {
+
+    ResultModel<String> oauthLogin(GithubOauthLoginRequest request);
+
+}

+ 22 - 0
src/main/java/org/lym/pom/controller/moment/ui/service/MessageApiService.java

@@ -0,0 +1,22 @@
+package org.lym.pom.controller.moment.ui.service;
+
+import pub.developers.forum.api.model.PageRequestModel;
+import pub.developers.forum.api.model.PageResponseModel;
+import pub.developers.forum.api.model.ResultModel;
+import pub.developers.forum.api.request.message.MessagePageRequest;
+import pub.developers.forum.api.response.message.MessagePageResponse;
+
+/**
+ * @author Qiangqiang.Bian
+ * @create 20/7/30
+ * @desc
+ **/
+public interface MessageApiService {
+
+    ResultModel<PageResponseModel<MessagePageResponse>> page(PageRequestModel<MessagePageRequest> request);
+
+    ResultModel markIsRead(Long messageId);
+
+    ResultModel<Long> countUnRead();
+
+}

+ 21 - 0
src/main/java/org/lym/pom/controller/moment/ui/service/PostsApiService.java

@@ -0,0 +1,21 @@
+package org.lym.pom.controller.moment.ui.service;
+
+import pub.developers.forum.api.model.PageRequestModel;
+import pub.developers.forum.api.model.PageResponseModel;
+import pub.developers.forum.api.model.ResultModel;
+import pub.developers.forum.api.request.AdminBooleanRequest;
+import pub.developers.forum.api.vo.PostsVO;
+
+/**
+ * @author Qiangqiang.Bian
+ * @create 2020/11/25
+ * @desc
+ **/
+public interface PostsApiService {
+
+    ResultModel delete(Long id);
+
+    ResultModel<PageResponseModel<PostsVO>> pagePostsFood(PageRequestModel pageRequestModel);
+
+    ResultModel auditState(AdminBooleanRequest booleanRequest);
+}

+ 17 - 0
src/main/java/org/lym/pom/controller/moment/ui/service/SearchApiService.java

@@ -0,0 +1,17 @@
+package org.lym.pom.controller.moment.ui.service;
+
+import pub.developers.forum.api.model.PageRequestModel;
+import pub.developers.forum.api.model.PageResponseModel;
+import pub.developers.forum.api.model.ResultModel;
+import pub.developers.forum.api.vo.PostsVO;
+
+/**
+ * @author Qiangqiang.Bian
+ * @create 2020/12/2
+ * @desc
+ **/
+public interface SearchApiService {
+
+    ResultModel<PageResponseModel<PostsVO>> pagePostsSearch(PageRequestModel<String> pageRequestModel);
+
+}

+ 40 - 0
src/main/java/org/lym/pom/controller/moment/ui/service/TagApiService.java

@@ -0,0 +1,40 @@
+package org.lym.pom.controller.moment.ui.service;
+
+import pub.developers.forum.api.model.PageRequestModel;
+import pub.developers.forum.api.model.PageResponseModel;
+import pub.developers.forum.api.model.ResultModel;
+import pub.developers.forum.api.request.AdminBooleanRequest;
+import pub.developers.forum.api.request.tag.TagCreateRequest;
+import pub.developers.forum.api.request.tag.TagPageRequest;
+import pub.developers.forum.api.response.tag.TagPageResponse;
+import pub.developers.forum.api.response.tag.TagQueryResponse;
+import pub.developers.forum.api.vo.PostsVO;
+
+import java.util.List;
+import java.util.Set;
+
+/**
+ * @author Qiangqiang.Bian
+ * @create 20/7/30
+ * @desc
+ **/
+public interface TagApiService {
+
+    ResultModel<List<TagQueryResponse>> queryAllRef();
+
+    ResultModel create(TagCreateRequest request);
+
+    ResultModel<TagQueryResponse> getByName(String name);
+
+    ResultModel<List<TagQueryResponse>> queryAll();
+
+    ResultModel<List<TagQueryResponse>> queryInIds(Set<Long> ids);
+
+    ResultModel<PageResponseModel<PostsVO>> pagePosts(PageRequestModel<Long> pageRequestModel);
+
+    ResultModel<PageResponseModel<PostsVO>> pagePostsByTagIds(PageRequestModel<Set<Long>> pageRequestModel);
+
+    ResultModel<PageResponseModel<TagPageResponse>> page(PageRequestModel<TagPageRequest> pageRequestModel);
+
+    ResultModel auditState(AdminBooleanRequest booleanRequest);
+}

+ 56 - 0
src/main/java/org/lym/pom/controller/moment/ui/service/UserApiService.java

@@ -0,0 +1,56 @@
+package org.lym.pom.controller.moment.ui.service;
+
+import pub.developers.forum.api.model.PageRequestModel;
+import pub.developers.forum.api.model.PageResponseModel;
+import pub.developers.forum.api.model.ResultModel;
+import pub.developers.forum.api.request.AdminBooleanRequest;
+import pub.developers.forum.api.request.user.*;
+import pub.developers.forum.api.response.user.UserInfoResponse;
+import pub.developers.forum.api.response.user.UserOptLogPageResponse;
+import pub.developers.forum.api.response.user.UserPageResponse;
+
+/**
+ * @author Qiangqiang.Bian
+ * @create 20/7/30
+ * @desc
+ **/
+public interface UserApiService {
+
+    ResultModel enable(Long uid);
+
+    ResultModel disable(Long uid);
+
+    ResultModel follow(Long followed);
+
+    ResultModel cancelFollow(Long followed);
+
+    ResultModel<PageResponseModel<UserPageResponse>> pageFollower(PageRequestModel<Long> pageRequestModel);
+
+    ResultModel<PageResponseModel<UserPageResponse>> pageFans(PageRequestModel<Long> pageRequestModel);
+
+    ResultModel<Boolean> hasFollow(Long followed);
+
+    ResultModel<UserInfoResponse> info(String token);
+
+    ResultModel<UserInfoResponse> info(Long uid);
+
+    ResultModel<String> register(UserRegisterRequest request);
+
+    ResultModel<String> emailLogin(UserEmailLoginRequest request);
+
+    ResultModel logout(UserTokenLogoutRequest request);
+
+    ResultModel updateInfo(UserUpdateInfoRequest request);
+
+    ResultModel updateHeadImg(String linkFilenameData);
+
+    ResultModel updatePwd(UserUpdatePwdRequest request);
+
+    ResultModel<PageResponseModel<UserPageResponse>> adminPage(PageRequestModel<UserAdminPageRequest> pageRequestModel);
+
+    ResultModel<PageResponseModel<UserPageResponse>> pageActive(PageRequestModel pageRequestModel);
+
+    ResultModel<PageResponseModel<UserOptLogPageResponse>> pageOptLog(PageRequestModel<UserOptLogPageRequest> pageRequestModel);
+
+    ResultModel updateRole(AdminBooleanRequest booleanRequest);
+}

+ 59 - 0
src/main/java/org/lym/pom/controller/moment/ui/vo/PostsVO.java

@@ -0,0 +1,59 @@
+package org.lym.pom.controller.moment.ui.vo;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @author Qiangqiang.Bian
+ * @create 2020/11/20
+ * @desc
+ **/
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class PostsVO implements Serializable {
+
+    private Boolean official;
+
+    private Boolean top;
+
+    private Boolean marrow;
+
+    private String headImg;
+
+    private Long id;
+
+    private String category;
+
+    private String categoryDesc;
+
+    private String title;
+
+    private String introduction;
+
+    private Long authorId;
+
+    private String authorNickname;
+
+    private String authorAvatar;
+
+    private Date createAt;
+
+    private Long views;
+
+    private Long approvals;
+
+    private Long comments;
+
+    private List<TagVO> tags;
+
+    private SolutionVO solution;
+
+}

+ 25 - 0
src/main/java/org/lym/pom/controller/moment/ui/vo/SolutionVO.java

@@ -0,0 +1,25 @@
+package org.lym.pom.controller.moment.ui.vo;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+/**
+ * @author Qiangqiang.Bian
+ * @create 2020/11/1
+ * @desc
+ **/
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class SolutionVO implements Serializable {
+
+    private Long id;
+
+    private String content;
+
+}

+ 25 - 0
src/main/java/org/lym/pom/controller/moment/ui/vo/TagVO.java

@@ -0,0 +1,25 @@
+package org.lym.pom.controller.moment.ui.vo;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+/**
+ * @author Qiangqiang.Bian
+ * @create 2020/8/6
+ * @desc
+ **/
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class TagVO implements Serializable {
+
+    private Long id;
+
+    private String name;
+
+}

+ 61 - 0
src/main/java/org/lym/pom/entity/UserNotifyEntity.java

@@ -0,0 +1,61 @@
+package org.lym.pom.entity;
+
+import lombok.Data;
+import org.shoulder.data.mybatis.template.entity.BaseEntity;
+
+/**
+ * @author lym
+ */
+@Data
+//@Entity
+//@Table(name="tb_user_notify")
+public class UserNotifyEntity extends BaseEntity {
+
+
+    /**
+     * 消息发送渠道
+     *
+     * @see org.lym.pom.repository.mongo.enums.NotifyChannelEnum
+     */
+    private String channel;
+
+    /**
+     * 通知类型
+     *
+     * @see org.lym.pom.repository.mongo.enums.NotifyTypeEnum
+     */
+    private String type;
+
+    /**
+     * 已读 Y N
+     */
+    private String read;
+
+    /**
+     * 触发人
+     */
+    private String sourceUserId;
+
+    /**
+     * 收件人
+     */
+    private String receiverUserId;
+
+    /**
+     * 标题
+     */
+    private String title;
+
+    /**
+     * 内容格式
+     *
+     * @see org.lym.pom.repository.mongo.enums.NotifyContentTypeEnum
+     */
+    private String contentType;
+
+    /**
+     * 内容
+     */
+    private String content;
+
+}

+ 36 - 0
src/main/java/org/lym/pom/repository/mongo/enums/NotifyChannelEnum.java

@@ -0,0 +1,36 @@
+package org.lym.pom.repository.mongo.enums;
+
+import org.lym.pom.entity.UserNotifyEntity;
+import org.shoulder.core.dictionary.model.NameAsIdDictionaryItemEnum;
+
+/**
+ * 通知渠道:触达用户的方式
+ *
+ * @author lym
+ * @see UserNotifyEntity#channel
+ */
+public enum NotifyChannelEnum implements NameAsIdDictionaryItemEnum<NotifyChannelEnum> {
+
+    MSG("MSG", "站内信"),
+    MAIL("MAIL", "邮件"),
+    SMS("SMS", "短信"),
+    ;
+
+    private final String storageName;
+    private final String displayName;
+
+    NotifyChannelEnum(String storageName, String displayName) {
+
+        this.storageName = storageName;
+        this.displayName = displayName;
+    }
+
+    @Override
+    public String getDisplayName() {
+        return displayName;
+    }
+
+    public String getStorageName() {
+        return storageName;
+    }
+}

+ 36 - 0
src/main/java/org/lym/pom/repository/mongo/enums/NotifyContentTypeEnum.java

@@ -0,0 +1,36 @@
+package org.lym.pom.repository.mongo.enums;
+
+import org.lym.pom.entity.UserNotifyEntity;
+import org.shoulder.core.dictionary.model.NameAsIdDictionaryItemEnum;
+
+/**
+ * 通知内容类型
+ *
+ * @author lym
+ * @see UserNotifyEntity#contentType
+ */
+public enum NotifyContentTypeEnum implements NameAsIdDictionaryItemEnum<NotifyContentTypeEnum> {
+
+    HTML("HTML", "网页 HTML"),
+    TXT("TXT", "文本 TXT"),
+    TEMPLATE("TEMPLATE", "模板 TEMPLATE"),
+    ;
+
+    private final String storageName;
+    private final String displayName;
+
+    NotifyContentTypeEnum(String storageName, String displayName) {
+
+        this.storageName = storageName;
+        this.displayName = displayName;
+    }
+
+    @Override
+    public String getDisplayName() {
+        return displayName;
+    }
+
+    public String getStorageName() {
+        return storageName;
+    }
+}

+ 40 - 0
src/main/java/org/lym/pom/repository/mongo/enums/NotifyTypeEnum.java

@@ -0,0 +1,40 @@
+package org.lym.pom.repository.mongo.enums;
+
+import org.shoulder.core.dictionary.model.NameAsIdDictionaryItemEnum;
+
+/**
+ * 通知类型枚举
+ *
+ * @see org.lym.pom.entity.UserNotifyEntity#type
+ * @author lym
+ */
+public enum NotifyTypeEnum implements NameAsIdDictionaryItemEnum<NotifyTypeEnum> {
+
+    USER_REGISTER_NOTIFY_ADMIN("USER_REGISTER_NOTIFY_ADMIN", "新用户注册通知管理员"),
+    APPROVAL_ARTICLE("APPROVAL_ARTICLE", "文章被点赞"),
+    COMMENT_ARTICLE("COMMENT_ARTICLE", "文章被评论"),
+
+    APPROVAL_FAQ("APPROVAL_FAQ", "关注问答更新"),
+    COMMENT_FAQ("COMMENT_FAQ", "评论 & 回复"),
+
+    FOLLOW_USER("FOLLOW_USER", "用户关注"),
+    ;
+
+
+    private final String storageName;
+    private final String displayName;
+
+    NotifyTypeEnum(String storageName, String displayName) {
+        this.storageName = storageName;
+        this.displayName = displayName;
+    }
+
+    @Override
+    public String getDisplayName() {
+        return displayName;
+    }
+
+    public String getStorageName() {
+        return storageName;
+    }
+}

+ 0 - 0
src/main/resources/static/a.txt


Dosya farkı çok büyük olduğundan ihmal edildi
+ 5 - 0
src/main/resources/static/css/bootstrap.min.css


Dosya farkı çok büyük olduğundan ihmal edildi
+ 0 - 0
src/main/resources/static/css/toastr.min.css


+ 2 - 2
src/main/resources/static/dictionaryEnums.html

@@ -24,7 +24,7 @@
                                 querySingleDictionaryItems(dictionaryType);
                             });
                         } else {
-                            alert('listByType 查询失败:' + response.message);
+                            alert('listByType 查询失败:' + response.msg);
                         }
                     },
                     error: function (jqXHR, textStatus, errorThrown) {
@@ -42,7 +42,7 @@
                         if (response.code == '0') {
                             displayDictionaryItems(dictionaryType, response.data.list);
                         } else {
-                            alert('listByType 查询失败:' + response.message);
+                            alert('listByType 查询失败:' + response.msg);
                         }
                     },
                     error: function (jqXHR, textStatus, errorThrown) {

Dosya farkı çok büyük olduğundan ihmal edildi
+ 5 - 0
src/main/resources/static/js/bootstrap.min.js


Dosya farkı çok büyük olduğundan ihmal edildi
+ 0 - 0
src/main/resources/static/js/feather.min.js


Dosya farkı çok büyük olduğundan ihmal edildi
+ 1 - 0
src/main/resources/static/js/jquery.min.js


Dosya farkı çok büyük olduğundan ihmal edildi
+ 0 - 0
src/main/resources/static/js/md5.min.js


Dosya farkı çok büyük olduğundan ihmal edildi
+ 0 - 0
src/main/resources/static/js/toastr.min.js


Dosya farkı çok büyük olduğundan ihmal edildi
+ 0 - 0
src/main/resources/static/vue-admin-dist/css/app.79c430ac847b714d59da93e4d940cb4a.css


Dosya farkı çok büyük olduğundan ihmal edildi
+ 0 - 0
src/main/resources/static/vue-admin-dist/css/app.79c430ac847b714d59da93e4d940cb4a.css.map


BIN
src/main/resources/static/vue-admin-dist/fonts/fontello.068ca2b.ttf


BIN
src/main/resources/static/vue-admin-dist/fonts/fontello.e73a064.eot


BIN
src/main/resources/static/vue-admin-dist/fonts/ionicons.143146f.woff2


BIN
src/main/resources/static/vue-admin-dist/fonts/ionicons.99ac330.woff


BIN
src/main/resources/static/vue-admin-dist/fonts/ionicons.d535a25.ttf


+ 72 - 0
src/main/resources/static/vue-admin-dist/img/fontello.9354499.svg

@@ -0,0 +1,72 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg xmlns="http://www.w3.org/2000/svg">
+<metadata>Copyright (C) 2017 by original authors @ fontello.com</metadata>
+<defs>
+<font id="fontello" horiz-adv-x="1000" >
+<font-face font-family="fontello" font-weight="400" font-stretch="normal" units-per-em="1000" ascent="850" descent="-150" />
+<missing-glyph horiz-adv-x="1000" />
+<glyph glyph-name="bold" unicode="&#xe800;" d="M310 1q41-18 78-18 210 0 210 187 0 64-23 101-15 24-34 41t-38 26-45 14-47 6-53 1q-40 0-56-6 0-29 0-88t-1-88q0-5 0-38t0-54 2-47 7-37z m-8 417q23-4 61-4 46 0 80 7t61 25 42 50 14 79q0 39-16 68t-45 46-60 24-69 8q-28 0-73-7 0-28 3-84t2-85q0-15 0-45t-1-44q0-26 1-38z m-302-497l1 53q9 2 48 9t59 15q4 7 7 15t4 19 4 18 1 21 0 19v36q0 548-12 572-2 5-12 8t-25 6-28 4-27 3-17 2l-2 46q55 1 190 6t208 6q13 0 38-1t38 0q39 0 76-7t72-24 60-39 41-59 16-76q0-29-9-54t-22-40-36-32-41-25-47-22q86-20 144-75t57-138q0-56-20-101t-52-72-77-48-91-27-98-8q-25 0-74 2t-74 1q-59 0-171-6t-129-7z" horiz-adv-x="785.7" />
+
+<glyph glyph-name="italic" unicode="&#xe801;" d="M0-78l10 48q12 4 34 9t40 11 33 13q16 19 23 56 1 4 35 162t63 303 29 165v14q-13 8-30 11t-39 4-32 3l10 58q19-1 67-4t84-4 67-1q27 0 55 1t68 4 54 4q-2-22-10-50-17-6-57-16t-60-19q-5-10-8-23t-5-23-4-25-4-24q-15-82-49-234t-43-198q-1-5-7-32t-11-51-9-46-4-32l1-10q9-3 103-18-2-24-9-55-6 0-18-1t-18-1q-16 0-49 6t-48 6q-77 1-115 1-28 0-79-5t-68-7z" horiz-adv-x="571.4" />
+
+<glyph glyph-name="thumb-tack" unicode="&#xe802;" d="M650 779q12 0 24-5 19-8 29-23t11-35v-719q0-19-11-35t-29-23q-10-4-24-4-27 0-47 18l-246 236-246-236q-20-19-46-19-13 0-25 5-18 7-29 23t-11 35v719q0 19 11 35t29 23q12 5 25 5h585z" horiz-adv-x="714.3" />
+
+<glyph glyph-name="link" unicode="&#xe803;" d="M813 171q0 23-16 38l-116 116q-16 16-38 16-24 0-40-18 1-1 10-10t12-12 9-11 7-14 2-15q0-23-16-38t-38-16q-8 0-15 2t-14 7-11 9-12 12-10 10q-19-17-19-40 0-23 16-38l115-116q15-15 38-15 22 0 38 15l82 81q16 16 16 37z m-393 394q0 22-15 38l-115 115q-16 16-38 16-22 0-38-15l-82-82q-16-15-16-37 0-22 16-38l116-116q15-15 38-15 23 0 40 17-2 2-11 11t-12 12-8 10-7 14-2 16q0 22 15 38t38 15q9 0 16-2t14-7 11-8 12-12 10-11q18 17 18 41z m500-394q0-66-48-113l-82-81q-46-47-113-47-68 0-114 48l-115 115q-46 47-46 114 0 68 49 116l-49 49q-48-49-116-49-67 0-114 47l-116 116q-47 47-47 114t47 113l82 82q47 46 114 46 67 0 114-47l115-116q46-46 46-113 0-69-49-117l49-49q48 49 116 49 67 0 114-47l116-116q47-47 47-114z" horiz-adv-x="928.6" />
+
+<glyph glyph-name="picture-o" unicode="&#xe804;" d="M357 529q0-45-31-76t-76-32-76 32-31 76 31 76 76 31 76-31 31-76z m572-215v-250h-786v107l178 179 90-89 285 285z m53 393h-893q-7 0-12-5t-6-13v-678q0-7 6-13t12-5h893q7 0 13 5t5 13v678q0 8-5 13t-13 5z m89-18v-678q0-37-26-63t-63-27h-893q-36 0-63 27t-26 63v678q0 37 26 63t63 27h893q37 0 63-27t26-63z" horiz-adv-x="1071.4" />
+
+<glyph glyph-name="repeat" unicode="&#xe805;" d="M857 707v-250q0-14-10-25t-26-11h-250q-23 0-32 23-10 22 7 38l77 77q-82 77-194 77-58 0-111-23t-91-61-61-91-23-111 23-111 61-91 91-61 111-23q66 0 125 29t100 82q4 6 13 7 8 0 14-5l76-77q5-4 6-11t-5-13q-60-74-147-114t-182-41q-87 0-167 34t-136 92-92 137-34 166 34 166 92 137 136 92 167 34q82 0 158-31t137-88l72 72q17 18 39 8 22-9 22-33z" horiz-adv-x="857.1" />
+
+<glyph glyph-name="undo" unicode="&#xe806;" d="M857 350q0-87-34-166t-91-137-137-92-166-34q-96 0-183 41t-147 114q-4 6-4 13t5 11l76 77q6 5 14 5 9-1 13-7 41-53 100-82t126-29q58 0 110 23t92 61 61 91 22 111-22 111-61 91-92 61-110 23q-55 0-105-20t-90-57l77-77q17-16 8-38-10-23-33-23h-250q-15 0-25 11t-11 25v250q0 24 22 33 22 10 39-8l72-72q60 57 137 88t159 31q87 0 166-34t137-92 91-137 34-166z" horiz-adv-x="857.1" />
+
+<glyph glyph-name="trash-o" unicode="&#xe807;" d="M286 439v-321q0-8-5-13t-13-5h-36q-8 0-13 5t-5 13v321q0 8 5 13t13 5h36q8 0 13-5t5-13z m143 0v-321q0-8-5-13t-13-5h-36q-8 0-13 5t-5 13v321q0 8 5 13t13 5h36q8 0 13-5t5-13z m142 0v-321q0-8-5-13t-12-5h-36q-8 0-13 5t-5 13v321q0 8 5 13t13 5h36q7 0 12-5t5-13z m72-404v529h-500v-529q0-12 4-22t8-15 6-5h464q2 0 6 5t8 15 4 22z m-375 601h250l-27 65q-4 5-9 6h-177q-6-1-10-6z m518-18v-36q0-8-5-13t-13-5h-54v-529q0-46-26-80t-63-34h-464q-37 0-63 33t-27 79v531h-53q-8 0-13 5t-5 13v36q0 8 5 13t13 5h172l39 93q9 21 31 35t44 15h178q23 0 44-15t30-35l39-93h173q8 0 13-5t5-13z" horiz-adv-x="785.7" />
+
+<glyph glyph-name="floppy-o" unicode="&#xe808;" d="M214-7h429v214h-429v-214z m500 0h72v500q0 8-6 21t-11 20l-157 156q-5 6-19 12t-22 5v-232q0-22-15-38t-38-16h-322q-22 0-37 16t-16 38v232h-72v-714h72v232q0 22 16 38t37 16h465q22 0 38-16t15-38v-232z m-214 518v178q0 8-5 13t-13 5h-107q-7 0-13-5t-5-13v-178q0-7 5-13t13-5h107q7 0 13 5t5 13z m357-18v-518q0-22-15-38t-38-16h-750q-23 0-38 16t-16 38v750q0 22 16 38t38 16h517q23 0 50-12t42-26l156-157q16-15 27-42t11-49z" horiz-adv-x="857.1" />
+
+<glyph glyph-name="compress" unicode="&#xe809;" d="M429 314v-250q0-14-11-25t-25-10-25 10l-81 81-185-186q-5-5-13-5t-12 5l-64 64q-6 6-6 13t6 13l185 185-80 80q-11 11-11 25t11 25 25 11h250q14 0 25-11t11-25z m421 375q0-7-6-12l-185-186 80-80q11-11 11-25t-11-25-25-11h-250q-14 0-25 11t-10 25v250q0 14 10 25t25 10 25-10l81-80 185 185q6 5 13 5t13-5l63-64q6-5 6-13z" horiz-adv-x="857.1" />
+
+<glyph glyph-name="eye" unicode="&#xe80a;" d="M929 314q-85 132-213 197 34-58 34-125 0-103-73-177t-177-73-177 73-73 177q0 67 34 125-128-65-213-197 75-114 187-182t242-68 243 68 186 182z m-402 215q0 11-8 19t-19 7q-70 0-120-50t-50-119q0-11 8-19t19-8 19 8 8 19q0 48 34 82t82 34q11 0 19 8t8 19z m473-215q0-19-11-38-78-129-210-206t-279-77-279 77-210 206q-11 19-11 38t11 39q78 128 210 205t279 78 279-78 210-205q11-20 11-39z" horiz-adv-x="1000" />
+
+<glyph glyph-name="eye-slash" unicode="&#xe80b;" d="M310 105l43 79q-48 35-76 88t-27 114q0 67 34 125-128-65-213-197 94-144 239-209z m217 424q0 11-8 19t-19 7q-70 0-120-50t-50-119q0-11 8-19t19-8 19 8 8 19q0 48 34 82t82 34q11 0 19 8t8 19z m202 106q0-4 0-5-59-105-176-316t-176-316l-28-50q-5-9-15-9-7 0-75 39-9 6-9 16 0 7 25 49-80 36-147 96t-117 137q-11 17-11 38t11 39q86 131 212 207t277 76q50 0 100-10l31 54q5 9 15 9 3 0 10-3t18-9 18-10 18-10 10-7q9-5 9-15z m21-249q0-78-44-142t-117-91l157 280q4-25 4-47z m250-72q0-19-11-38-22-36-61-81-84-96-194-149t-234-53l41 74q119 10 219 76t169 171q-65 100-158 164l35 63q53-36 102-85t81-103q11-19 11-39z" horiz-adv-x="1000" />
+
+<glyph glyph-name="question-circle" unicode="&#xe80c;" d="M500 82v107q0 8-5 13t-13 5h-107q-8 0-13-5t-5-13v-107q0-8 5-13t13-5h107q8 0 13 5t5 13z m143 375q0 49-31 91t-77 65-95 23q-136 0-207-119-9-13 4-24l74-55q4-4 10-4 9 0 14 7 30 38 48 51 19 14 48 14 27 0 48-15t21-33q0-21-11-34t-38-25q-35-15-65-48t-29-70v-20q0-8 5-13t13-5h107q8 0 13 5t5 13q0 10 12 27t30 28q18 10 28 16t25 19 25 27 16 34 7 45z m214-107q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
+
+<glyph glyph-name="times" unicode="&#xe80d;" d="M724 112q0-22-15-38l-76-76q-16-15-38-15t-38 15l-164 165-164-165q-16-15-38-15t-38 15l-76 76q-16 16-16 38t16 38l164 164-164 164q-16 16-16 38t16 38l76 76q16 16 38 16t38-16l164-164 164 164q16 16 38 16t38-16l76-76q15-15 15-38t-15-38l-164-164 164-164q15-15 15-38z" horiz-adv-x="785.7" />
+
+<glyph glyph-name="align-left" unicode="&#xe80f;" d="M1000 100v-71q0-15-11-25t-25-11h-928q-15 0-25 11t-11 25v71q0 15 11 25t25 11h928q15 0 25-11t11-25z m-214 214v-71q0-15-11-25t-25-11h-714q-15 0-25 11t-11 25v71q0 15 11 25t25 11h714q15 0 25-11t11-25z m143 215v-72q0-14-11-25t-25-11h-857q-15 0-25 11t-11 25v72q0 14 11 25t25 10h857q14 0 25-10t11-25z m-215 214v-72q0-14-10-25t-25-10h-643q-15 0-25 10t-11 25v72q0 14 11 25t25 11h643q14 0 25-11t10-25z" horiz-adv-x="1000" />
+
+<glyph glyph-name="align-center" unicode="&#xe810;" d="M1000 100v-71q0-15-11-25t-25-11h-928q-15 0-25 11t-11 25v71q0 15 11 25t25 11h928q15 0 25-11t11-25z m-214 214v-71q0-15-11-25t-25-11h-500q-14 0-25 11t-11 25v71q0 15 11 25t25 11h500q15 0 25-11t11-25z m143 215v-72q0-14-11-25t-25-11h-786q-14 0-25 11t-11 25v72q0 14 11 25t25 10h786q14 0 25-10t11-25z m-215 214v-72q0-14-10-25t-25-10h-358q-14 0-25 10t-10 25v72q0 14 10 25t25 11h358q14 0 25-11t10-25z" horiz-adv-x="1000" />
+
+<glyph glyph-name="align-right" unicode="&#xe811;" d="M1000 100v-71q0-15-11-25t-25-11h-928q-15 0-25 11t-11 25v71q0 15 11 25t25 11h928q15 0 25-11t11-25z m0 214v-71q0-15-11-25t-25-11h-714q-14 0-25 11t-11 25v71q0 15 11 25t25 11h714q15 0 25-11t11-25z m0 215v-72q0-14-11-25t-25-11h-857q-14 0-25 11t-11 25v72q0 14 11 25t25 10h857q15 0 25-10t11-25z m0 214v-72q0-14-11-25t-25-10h-643q-14 0-25 10t-10 25v72q0 14 10 25t25 11h643q15 0 25-11t11-25z" horiz-adv-x="1000" />
+
+<glyph glyph-name="arrows-alt" unicode="&#xf0b2;" d="M716 548l-198-198 198-198 80 80q17 18 39 8 22-9 22-33v-250q0-14-10-25t-26-11h-250q-23 0-32 23-10 21 7 38l81 81-198 198-198-198 80-81q17-17 8-38-10-23-33-23h-250q-15 0-25 11t-11 25v250q0 24 22 33 22 10 39-8l80-80 198 198-198 198-80-80q-11-11-25-11-7 0-14 3-22 9-22 33v250q0 14 11 25t25 11h250q23 0 33-23 9-21-8-38l-80-81 198-198 198 198-81 81q-17 17-7 38 9 23 32 23h250q15 0 26-11t10-25v-250q0-24-22-33-7-3-14-3-14 0-25 11z" horiz-adv-x="857.1" />
+
+<glyph glyph-name="bars" unicode="&#xf0c9;" d="M857 100v-71q0-15-10-25t-26-11h-785q-15 0-25 11t-11 25v71q0 15 11 25t25 11h785q15 0 26-11t10-25z m0 286v-72q0-14-10-25t-26-10h-785q-15 0-25 10t-11 25v72q0 14 11 25t25 10h785q15 0 26-10t10-25z m0 285v-71q0-14-10-25t-26-11h-785q-15 0-25 11t-11 25v71q0 15 11 26t25 10h785q15 0 26-10t10-26z" horiz-adv-x="857.1" />
+
+<glyph glyph-name="list-ul" unicode="&#xf0ca;" d="M214 64q0-44-31-76t-76-31-76 31-31 76 31 76 76 31 76-31 31-76z m0 286q0-45-31-76t-76-31-76 31-31 76 31 76 76 31 76-31 31-76z m786-232v-107q0-7-5-13t-13-5h-678q-8 0-13 5t-5 13v107q0 7 5 12t13 6h678q7 0 13-6t5-12z m-786 518q0-45-31-76t-76-31-76 31-31 76 31 76 76 31 76-31 31-76z m786-232v-108q0-7-5-12t-13-5h-678q-8 0-13 5t-5 12v108q0 7 5 12t13 5h678q7 0 13-5t5-12z m0 285v-107q0-7-5-12t-13-6h-678q-8 0-13 6t-5 12v107q0 8 5 13t13 5h678q7 0 13-5t5-13z" horiz-adv-x="1000" />
+
+<glyph glyph-name="list-ol" unicode="&#xf0cb;" d="M213-54q0-45-31-70t-75-26q-60 0-96 37l31 49q28-25 60-25 16 0 28 8t12 24q0 35-59 31l-14 31q4 6 18 24t24 31 20 21v1q-9 0-27-1t-27 0v-30h-59v85h186v-49l-53-65q28-6 45-27t17-49z m1 350v-89h-202q-4 20-4 30 0 29 14 52t31 38 37 27 31 24 14 25q0 14-9 22t-22 7q-25 0-45-32l-47 33q13 28 40 44t59 16q40 0 68-23t28-63q0-28-19-51t-42-36-42-28-20-30h71v34h59z m786-178v-107q0-7-5-13t-13-5h-678q-8 0-13 5t-5 13v107q0 8 5 13t13 5h678q7 0 13-6t5-12z m-786 502v-56h-187v56h60q0 22 0 67t1 68v7h-1q-5-10-28-30l-40 42 76 71h59v-225h60z m786-216v-108q0-7-5-12t-13-5h-678q-8 0-13 5t-5 12v108q0 7 5 12t13 5h678q7 0 13-5t5-12z m0 285v-107q0-7-5-12t-13-6h-678q-8 0-13 6t-5 12v107q0 8 5 13t13 5h678q7 0 13-5t5-13z" horiz-adv-x="1000" />
+
+<glyph glyph-name="strikethrough" unicode="&#xf0cc;" d="M982 350q8 0 13-5t5-13v-36q0-7-5-12t-13-5h-964q-8 0-13 5t-5 12v36q0 8 5 13t13 5h964z m-712 36q-16 19-29 44-27 55-27 105 0 101 75 173 74 71 219 71 28 0 94-11 36-7 98-27 6-21 12-66 8-68 8-102 0-10-3-25l-7-2-46 4-8 1q-28 83-58 114-49 51-117 51-64 0-101-33-38-32-38-81 0-41 37-78t156-72q38-12 96-37 33-16 53-29h-414z m283-143h229q4-22 4-51 0-62-23-119-13-31-40-58-20-19-61-45-44-27-85-37-45-12-113-12-64 0-109 13l-78 23q-32 8-40 15-5 5-5 12v8q0 60-1 87 0 17 0 38l1 20v25l57 1q8-19 17-40t12-31 7-15q20-32 45-52 24-20 59-32 33-12 73-12 36 0 78 15 43 14 68 48 26 34 26 72 0 47-45 87-19 16-76 40z" horiz-adv-x="1000" />
+
+<glyph glyph-name="underline" unicode="&#xf0cd;" d="M27 726q-21 1-25 2l-2 49q7 1 22 1 34 0 63-3 74-4 93-4 47 0 93 2 65 2 82 3 31 0 48 1l-1-8 1-36v-5q-33-5-69-5-33 0-44-14-7-7-7-73 0-7 0-18t0-15l1-127 8-157q3-69 28-112 20-33 54-52 49-26 98-26 59 0 107 16 31 10 55 28 27 20 37 36 20 31 29 63 12 41 12 128 0 44-2 72t-6 68-8 89l-2 33q-3 37-13 49-19 20-43 19l-56-1-8 2 1 48h47l114-6q43-2 110 6l10-1q3-22 3-29 0-4-2-17-25-7-47-8-41-6-44-9-8-8-8-23 0-4 0-15t1-17q5-11 13-221 3-109-9-170-8-42-23-68-21-36-62-69-42-31-102-49-61-19-142-19-93 0-159 26-66 26-99 68-34 42-47 109-9 45-9 132v186q0 105-9 119-14 20-82 22z m830-787v36q0 8-5 13t-13 5h-821q-8 0-13-5t-5-13v-36q0-8 5-13t13-5h821q8 0 13 5t5 13z" horiz-adv-x="857.1" />
+
+<glyph glyph-name="table" unicode="&#xf0ce;" d="M286 82v107q0 8-5 13t-13 5h-179q-7 0-12-5t-6-13v-107q0-8 6-13t12-5h179q8 0 13 5t5 13z m0 214v108q0 7-5 12t-13 5h-179q-7 0-12-5t-6-12v-108q0-7 6-12t12-5h179q8 0 13 5t5 12z m285-214v107q0 8-5 13t-12 5h-179q-8 0-13-5t-5-13v-107q0-8 5-13t13-5h179q7 0 12 5t5 13z m-285 429v107q0 8-5 13t-13 5h-179q-7 0-12-5t-6-13v-107q0-8 6-13t12-5h179q8 0 13 5t5 13z m285-215v108q0 7-5 12t-12 5h-179q-8 0-13-5t-5-12v-108q0-7 5-12t13-5h179q7 0 12 5t5 12z m286-214v107q0 8-5 13t-13 5h-178q-8 0-13-5t-5-13v-107q0-8 5-13t13-5h178q8 0 13 5t5 13z m-286 429v107q0 8-5 13t-12 5h-179q-8 0-13-5t-5-13v-107q0-8 5-13t13-5h179q7 0 12 5t5 13z m286-215v108q0 7-5 12t-13 5h-178q-8 0-13-5t-5-12v-108q0-7 5-12t13-5h178q8 0 13 5t5 12z m0 215v107q0 8-5 13t-13 5h-178q-8 0-13-5t-5-13v-107q0-8 5-13t13-5h178q8 0 13 5t5 13z m72 178v-607q0-37-27-63t-63-26h-750q-36 0-63 26t-26 63v607q0 37 26 63t63 27h750q37 0 63-27t27-63z" horiz-adv-x="928.6" />
+
+<glyph glyph-name="columns" unicode="&#xf0db;" d="M89-7h340v643h-358v-625q0-7 6-13t12-5z m768 18v625h-357v-643h339q8 0 13 5t5 13z m72 678v-678q0-37-27-63t-63-27h-750q-36 0-63 27t-26 63v678q0 37 26 63t63 27h750q37 0 63-27t27-63z" horiz-adv-x="928.6" />
+
+<glyph glyph-name="quote-left" unicode="&#xf10d;" d="M429 314v-214q0-45-32-76t-76-31h-214q-44 0-76 31t-31 76v393q0 58 23 111t61 91 91 61 111 23h35q15 0 26-11t10-25v-72q0-14-10-25t-26-10h-35q-59 0-101-42t-42-101v-18q0-22 16-38t37-16h125q45 0 76-31t32-76z m500 0v-214q0-45-32-76t-76-31h-214q-44 0-76 31t-31 76v393q0 58 23 111t61 91 91 61 111 23h35q15 0 26-11t10-25v-72q0-14-10-25t-26-10h-35q-59 0-101-42t-42-101v-18q0-22 16-38t37-16h125q45 0 76-31t32-76z" horiz-adv-x="928.6" />
+
+<glyph glyph-name="code" unicode="&#xf121;" d="M344 69l-28-28q-5-5-12-5t-13 5l-260 261q-6 5-6 12t6 13l260 260q5 6 13 6t12-6l28-28q6-5 6-13t-6-12l-219-220 219-219q6-6 6-13t-6-13z m330 596l-208-721q-2-7-9-11t-13-1l-34 9q-8 3-11 9t-2 14l209 720q2 8 8 11t13 2l35-10q7-2 11-9t1-13z m367-363l-260-261q-6-5-13-5t-13 5l-28 28q-5 6-5 13t5 13l219 219-219 220q-5 5-5 12t5 13l28 28q6 6 13 6t13-6l260-260q5-5 5-13t-5-12z" horiz-adv-x="1071.4" />
+
+<glyph glyph-name="superscript" unicode="&#xf12b;" d="M501 86v-93h-139l-89 141-13 23q-4 5-6 12h-2q0-2-1-4t-2-4-2-4q-5-11-14-25l-86-139h-144v93h71l110 162-103 152h-76v94h154l77-127q1-2 13-24 4-5 6-11h2q1 5 6 11l14 24 78 127h143v-94h-69l-103-149 114-165h61z m355 379v-115h-287l-1 15q-3 16-3 26 0 36 15 65t36 48 47 37 47 30 36 30 15 36q0 21-17 35t-39 13q-29 0-54-21-8-6-20-22l-59 52q15 20 35 37 47 36 105 36 61 0 99-33t38-89q0-31-13-57t-35-43-45-33-46-28-37-28-17-36h130v45h70z" horiz-adv-x="857.1" />
+
+<glyph glyph-name="subscript" unicode="&#xf12c;" d="M501 86v-93h-139l-89 141-13 23q-4 5-6 12h-2q0-2-1-4t-2-4-2-4q-5-11-14-25l-86-139h-144v93h71l110 162-103 152h-76v94h154l77-127q1-2 13-24 4-5 6-11h2q1 5 6 11l14 24 78 127h143v-94h-69l-103-149 114-165h61z m356-121v-115h-287l-2 15q-2 25-2 26 0 35 15 65t36 48 47 37 47 30 36 30 15 36q0 21-17 35t-39 13q-28 0-54-21-8-6-20-22l-59 52q15 20 35 37 45 36 105 36 62 0 100-33t37-89q0-37-19-66t-47-48-55-35-49-35-23-41h130v45h70z" horiz-adv-x="857.1" />
+
+<glyph glyph-name="header" unicode="&#xf1dc;" d="M939-79q-25 0-74 2t-75 2q-24 0-73-2t-74-2q-13 0-21 12t-7 25q0 18 9 26t22 9 29 4 25 9q18 11 18 78l0 218q0 12-1 17-7 3-28 3h-376q-22 0-29-3 0-5 0-17l-1-207q0-79 21-91 9-6 26-8t32-2 25-8 11-26q0-14-6-26t-21-13q-26 0-78 2t-77 2q-24 0-71-2t-71-2q-13 0-20 12t-7 25q0 17 9 25t20 10 26 4 24 9q18 13 18 80l-1 31v454q0 2 1 15t0 20-1 21-2 24-4 20-6 18-9 10q-8 5-25 7t-29 1-23 7-10 26q0 14 6 26t20 13q26 0 78-2t77-2q23 0 71 2t70 2q14 0 21-13t7-26q0-17-9-25t-22-8-27-2-24-7q-20-12-20-90l1-178q0-12 0-18 7-2 22-2h390q14 0 21 2 1 6 1 18l0 178q0 78-19 90-10 6-33 7t-37 7-14 28q0 14 7 26t21 13q24 0 74-2t73-2q24 0 72 2t72 2q14 0 21-13t7-26q0-17-10-25t-22-8-29-2-24-7q-20-13-20-90l1-526q0-66 19-78 9-6 25-8t30-2 23-9 10-25q0-14-6-26t-20-13z" horiz-adv-x="1000" />
+
+<glyph glyph-name="window-maximize" unicode="&#xf2d0;" d="M143 64h714v429h-714v-429z m857 625v-678q0-37-26-63t-63-27h-822q-36 0-63 27t-26 63v678q0 37 26 63t63 27h822q37 0 63-27t26-63z" horiz-adv-x="1000" />
+</font>
+</defs>
+</svg>

Dosya farkı çok büyük olduğundan ihmal edildi
+ 24 - 0
src/main/resources/static/vue-admin-dist/img/ionicons.a2c4a26.svg


Dosya farkı çok büyük olduğundan ihmal edildi
+ 0 - 0
src/main/resources/static/vue-admin-dist/js/app.c4063b2d3281675632f1.js


Dosya farkı çok büyük olduğundan ihmal edildi
+ 0 - 0
src/main/resources/static/vue-admin-dist/js/app.c4063b2d3281675632f1.js.map


+ 2 - 0
src/main/resources/static/vue-admin-dist/js/manifest.114fae91ceb109348ca6.js

@@ -0,0 +1,2 @@
+!function(r){var n=window.webpackJsonp;window.webpackJsonp=function(e,u,c){for(var f,i,p,a=0,l=[];a<e.length;a++)i=e[a],o[i]&&l.push(o[i][0]),o[i]=0;for(f in u)Object.prototype.hasOwnProperty.call(u,f)&&(r[f]=u[f]);for(n&&n(e,u,c);l.length;)l.shift()();if(c)for(a=0;a<c.length;a++)p=t(t.s=c[a]);return p};var e={},o={2:0};function t(n){if(e[n])return e[n].exports;var o=e[n]={i:n,l:!1,exports:{}};return r[n].call(o.exports,o,o.exports,t),o.l=!0,o.exports}t.m=r,t.c=e,t.d=function(r,n,e){t.o(r,n)||Object.defineProperty(r,n,{configurable:!1,enumerable:!0,get:e})},t.n=function(r){var n=r&&r.__esModule?function(){return r.default}:function(){return r};return t.d(n,"a",n),n},t.o=function(r,n){return Object.prototype.hasOwnProperty.call(r,n)},t.p="/",t.oe=function(r){throw console.error(r),r}}([]);
+//# sourceMappingURL=manifest.114fae91ceb109348ca6.js.map

Dosya farkı çok büyük olduğundan ihmal edildi
+ 0 - 0
src/main/resources/static/vue-admin-dist/js/manifest.114fae91ceb109348ca6.js.map


Dosya farkı çok büyük olduğundan ihmal edildi
+ 5 - 0
src/main/resources/static/vue-admin-dist/js/vendor.47c96e8badf75687412c.js


Bu fark içinde çok fazla dosya değişikliği olduğu için bazı dosyalar gösterilmiyor