Browse Source

drafting blogs

fengchang 1 year ago
parent
commit
d120ff8441

+ 14 - 0
hichina-admin-backend/src/main/java/com/hichina/admin/hichinaadminbackend/controller/BlogController.java

@@ -16,6 +16,20 @@ public class BlogController {
     @Autowired
     private BlogMapper blogMapper;
 
+    @PutMapping("/batchDraft")
+    @Transactional
+    public HichinaResponse draftBlogs(@RequestBody GeneralBatchDraftRequest req){
+        
+        blogMapper.batchDraft(req.getToDraft());
+
+        HichinaResponse ret = new HichinaResponse();
+        ret.setOk(true);
+        ret.setData(req.getToDraft());
+        ret.setMessage("成功批量存草稿博客");
+
+        return ret;
+    }
+
     @DeleteMapping("/batch")
     @Transactional
     public HichinaResponse deleteBlogs(@RequestBody GeneralBatchDeleteRequest req){

+ 12 - 4
hichina-admin-backend/src/main/java/com/hichina/admin/hichinaadminbackend/mapper/BlogMapper.java

@@ -21,20 +21,28 @@ public interface BlogMapper {
             "</script>")
     void batchDelete(List<String> blogIds);
 
+    @Update("<script>" +
+            "update blog set draft=1 WHERE blog_id in \n" +
+            "    <foreach item='item' collection='blogIds' open='(' separator=',' close=')'>\n" +
+            "    #{item}" +
+            "    </foreach>" +
+            "</script>")
+    void batchDraft(List<String> blogIds);
+
 
     @Update("UPDATE blog SET head_image_url = REGEXP_SUBSTR(content, '(http|https)://[^ \\n]+(jpg|jpeg|png|gif)') WHERE last_update_time>#{startDate} and head_image_url is null or LENGTH(head_image_url)<1 and content REGEXP '(http|https)://[^ \\n]+(jpg|jpeg|png|gif)';")
     void updateCoverWithFirstImage(Date startDate);
 
-    @Select("select blog_id, title, created_time from blog where draft=0 order by created_time desc")
+    @Select("select blog_id, title, created_time, draft from blog order by created_time desc")
     List<BlogListItemDTO> findBlogSummaryList();
 
-    @Select("select count(*) from blog where draft=0 and title like CONCAT('%',CONCAT(#{query},'%'))")
+    @Select("select count(*) from blog where title like CONCAT('%',CONCAT(#{query},'%'))")
     Integer countBlogSummaryListByQuery(String query);
 
-    @Select("select count(*) from blog where draft=0")
+    @Select("select count(*) from blog")
     Integer countBlogSummaryList();
 
-    @Select("select blog_id, title, created_time from blog where draft=0 and title like CONCAT('%',CONCAT(#{query},'%')) or blog_id like CONCAT('%',CONCAT(#{query},'%')) order by created_time desc")
+    @Select("select blog_id, title, created_time, draft from blog where title like CONCAT('%',CONCAT(#{query},'%')) or blog_id like CONCAT('%',CONCAT(#{query},'%')) order by created_time desc")
     List<BlogListItemDTO> findBlogSummaryListByQuery(String query);
 
 }

+ 1 - 0
hichina-admin-backend/src/main/java/com/hichina/admin/hichinaadminbackend/model/DTO/BlogListItemDTO.java

@@ -11,4 +11,5 @@ public class BlogListItemDTO {
     private String blogId;
     private String title;
     private Date createdTime;
+    private Boolean draft;
 }

+ 12 - 0
hichina-admin-backend/src/main/java/com/hichina/admin/hichinaadminbackend/model/DTO/GeneralBatchDraftRequest.java

@@ -0,0 +1,12 @@
+package com.hichina.admin.hichinaadminbackend.model.DTO;
+
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+@Data
+@NoArgsConstructor
+public class GeneralBatchDraftRequest {
+    private List<String> toDraft;
+}

+ 65 - 1
hichina-admin-front/src/pages/BlogManagePage.vue

@@ -1,5 +1,24 @@
 <template>
   <q-page padding>
+    <q-dialog v-model="confirmDraft" persistent>
+      <q-card>
+        <q-card-section class="row items-center">
+          <q-avatar icon="signal_wifi_off" color="primary" text-color="white" />
+          <span class="q-ml-sm">确定要将所选放入草稿吗?</span>
+        </q-card-section>
+
+        <q-card-actions align="right">
+          <q-btn flat label="取消" color="primary" v-close-popup />
+          <q-btn
+            flat
+            label="确认放入草稿"
+            color="primary"
+            @click="executeDraft"
+            v-close-popup
+          />
+        </q-card-actions>
+      </q-card>
+    </q-dialog>
     <q-dialog v-model="confirmDelete" persistent>
       <q-card>
         <q-card-section class="row items-center">
@@ -39,10 +58,17 @@
           <q-btn
             style="margin-right: 50px"
             round
-            color="primary"
+            color="red"
             @click="goDelete"
             icon="delete"
           />
+          <q-btn
+            style="margin-right: 50px"
+            round
+            color="orange"
+            @click="goDraft"
+            icon="drafts"
+          />
           <q-input
             borderless
             dense
@@ -97,6 +123,26 @@ export default {
     this.$refs.blogTableRef.requestServerInteraction();
   },
   methods: {
+    executeDraft() {
+      console.log(this.selected);
+
+      var listOfId2Draft = [];
+      for (var i in this.selected) {
+        listOfId2Draft.push(this.selected[i].blogId);
+      }
+
+      var params = {};
+      params.toDraft = listOfId2Draft;
+      api
+        .put("/api/v1/blog/batchDraft", params)
+        .then((response) => {
+          this.showNotifyMessageSucceed(response.data.message);
+          this.$refs.blogTableRef.requestServerInteraction();
+        })
+        .catch((e) => {
+          this.showNotifyMessageFail(e.toString());
+        });
+    },
     executeDelete() {
       console.log("to delete selected:");
       console.log(this.selected);
@@ -125,6 +171,13 @@ export default {
       }
       this.confirmDelete = true;
     },
+    goDraft() {
+      if (this.selected.length < 1) {
+        this.showNotifyMessageFail("没有选中任何项");
+        return;
+      }
+      this.confirmDraft = true;
+    },
     onRequest(props) {
       const { page, rowsPerPage } = props.pagination;
       const filter = props.filter;
@@ -154,6 +207,7 @@ export default {
   },
   data() {
     return {
+      confirmDraft: false,
       confirmDelete: false,
       selected: [],
       loading: false,
@@ -195,6 +249,16 @@ export default {
           style:
             "max-width: 120px;min-width: 120px;text-overflow: ellipsis !important;white-space: nowrap !important;overflow: hidden !important;",
         },
+        {
+          name: "draft",
+          required: true,
+          label: "是否草稿状态",
+          align: "left",
+          field: "draft",
+          sortable: false,
+          style:
+            "max-width: 120px;min-width: 120px;text-overflow: ellipsis !important;white-space: nowrap !important;overflow: hidden !important;",
+        },
       ],
     };
   },