Prechádzať zdrojové kódy

update:书签分类列表添加增删改操作v1

zhiqiang.lv 2 mesiacov pred
rodič
commit
27ed110759

+ 112 - 4
src/main/java/top/lvzhiqiang/controller/BookmarkInfoController.java

@@ -1,13 +1,16 @@
 package top.lvzhiqiang.controller;
 
 import com.alibaba.fastjson.JSONObject;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
+import top.lvzhiqiang.dto.R;
 import top.lvzhiqiang.entity.BookmarkCategory;
 import top.lvzhiqiang.entity.BookmarkInfo;
+import top.lvzhiqiang.enumeration.ResultCodeEnum;
+import top.lvzhiqiang.exception.BusinessException;
+import top.lvzhiqiang.exception.ParameterException;
 import top.lvzhiqiang.mapper.BookmarkMapper;
+import top.lvzhiqiang.mapper.CoinMapper;
+import top.lvzhiqiang.util.StringUtils;
 
 import javax.annotation.Resource;
 import java.util.Comparator;
@@ -26,6 +29,111 @@ public class BookmarkInfoController {
 
     @Resource
     private BookmarkMapper bookmarkMapper;
+    @Resource
+    private CoinMapper coinMapper;
+
+    /**
+     * insertOrUpdateBookmark
+     *
+     * @author lvzhiqiang
+     * 2025/9/25 16:36
+     */
+    @RequestMapping("/insertOrUpdate")
+    @ResponseBody
+    public R insertOrUpdate(String id, String title, String url, String tags, String remark, String level1Category, String level2Category, String level3Category, String crudType, String userName) {
+        if (StringUtils.isEmpty(crudType)) {
+            throw new ParameterException("crudType为空!");
+        }
+
+        Integer userId;
+        if (StringUtils.isEmpty(userName)) {
+            throw new ParameterException("userName为空!");
+        } else {
+            JSONObject coinUser = coinMapper.findUserByUsername(userName);
+            if (coinUser == null) {
+                throw new ParameterException("用户不存在!");
+            }
+            userId = coinUser.getInteger("id");
+        }
+
+        if ("1".equals(crudType)) {
+            // 新增
+            if (StringUtils.isEmpty(title) || StringUtils.isEmpty(url)) {
+                throw new ParameterException("参数为空!");
+            }
+
+            BookmarkInfo bookmarkInfo = new BookmarkInfo();
+            bookmarkInfo.setTitle(title.trim());
+            bookmarkInfo.setUrl(url.trim());
+            bookmarkInfo.setTags(tags);
+            bookmarkInfo.setRemark(remark);
+            bookmarkInfo.setAccountId(String.valueOf(userId));
+
+            String categoryId;
+            if (StringUtils.isNotEmpty(level3Category)) {
+                categoryId = level3Category;
+            } else if (StringUtils.isNotEmpty(level2Category)) {
+                categoryId = level2Category;
+            } else if (StringUtils.isNotEmpty(level1Category)) {
+                categoryId = level1Category;
+            } else {
+                throw new ParameterException("分类为空!");
+            }
+            bookmarkInfo.setCategoryId(Integer.valueOf(categoryId));
+
+            bookmarkMapper.insertBookmark(bookmarkInfo);
+        } else if ("2".equals(crudType)) {
+            // 修改
+            if (StringUtils.isEmpty(id)) {
+                throw new ParameterException("id为空!");
+            }
+
+            BookmarkInfo bookmarkInfo = bookmarkMapper.findBookmarkById(Long.valueOf(id));
+            if (bookmarkInfo == null) {
+                throw new BusinessException(ResultCodeEnum.UNKNOWN_ERROR.getCode(), "id 不存在!");
+            }
+
+            if (StringUtils.isNotEmpty(title)) {
+                bookmarkInfo.setTitle(title);
+            }
+            if (StringUtils.isNotEmpty(url)) {
+                bookmarkInfo.setUrl(url);
+            }
+            if (StringUtils.isNotEmpty(tags)) {
+                bookmarkInfo.setTags(tags);
+            }
+            if (StringUtils.isNotEmpty(remark)) {
+                bookmarkInfo.setRemark(remark);
+            }
+
+            if (StringUtils.isNotEmpty(level3Category)) {
+                bookmarkInfo.setCategoryId(Integer.valueOf(level3Category));
+            } else if (StringUtils.isNotEmpty(level2Category)) {
+                bookmarkInfo.setCategoryId(Integer.valueOf(level2Category));
+            } else if (StringUtils.isNotEmpty(level1Category)) {
+                bookmarkInfo.setCategoryId(Integer.valueOf(level1Category));
+            }
+
+            bookmarkMapper.updateBookmark(bookmarkInfo);
+        }
+
+        return R.ok().data("success");
+    }
+
+    @RequestMapping("/delete/{id}")
+    @ResponseBody
+    public R delete(@PathVariable Long id) {
+        if (id == null) {
+            throw new ParameterException("id为空!");
+        }
+
+        int count = bookmarkMapper.deleteBookmark(id);
+        if (count > 0) {
+            return R.ok();
+        } else {
+            return R.error().message("删除0条");
+        }
+    }
 
     /**
      * 获取完整分类树

+ 1 - 1
src/main/java/top/lvzhiqiang/entity/BookmarkInfo.java

@@ -53,7 +53,7 @@ public class BookmarkInfo implements Serializable {
     /**
      * 是否收藏,默认为false
      */
-    private Boolean isFavorite;
+    private Integer isFavorite;
     private String isFavoriteStr;
 
     /**

+ 15 - 2
src/main/java/top/lvzhiqiang/mapper/BookmarkMapper.java

@@ -1,8 +1,7 @@
 package top.lvzhiqiang.mapper;
 
 import com.alibaba.fastjson.JSONObject;
-import org.apache.ibatis.annotations.Param;
-import org.apache.ibatis.annotations.Select;
+import org.apache.ibatis.annotations.*;
 import top.lvzhiqiang.entity.BookmarkCategory;
 import top.lvzhiqiang.entity.BookmarkInfo;
 
@@ -119,4 +118,18 @@ public interface BookmarkMapper {
             " </foreach>" +
             "</script>"})
     List<BookmarkInfo> findBookmarkList(Map<String, Object> params);
+
+    @Insert("INSERT INTO bookmark_info(title, url, tags, remark, account_id, category_id) " +
+            "VALUES (#{title}, #{url}, #{tags}, #{remark}, #{accountId}, #{categoryId})")
+    void insertBookmark(BookmarkInfo bookmarkInfo);
+
+    @Select("select * from bookmark_info where id = #{id}")
+    BookmarkInfo findBookmarkById(Long id);
+
+    @Update("update bookmark_info set title=#{title},url=#{url},tags=#{tags},remark=#{remark},account_id=#{accountId}," +
+            "category_id=#{categoryId} where id = #{id}")
+    void updateBookmark(BookmarkInfo bookmarkInfo);
+
+    @Delete("delete from bookmark_info where id = #{id}")
+    int deleteBookmark(Long id);
 }

+ 1 - 1
src/main/java/top/lvzhiqiang/service/impl/CoinServiceImpl.java

@@ -1995,7 +1995,7 @@ public class CoinServiceImpl implements CoinService {
             // 名称
             bookmarkInfo.setTitle("<a target=\"_blank\" href=\" " + bookmarkInfo.getUrl() + "\">" + bookmarkInfo.getTitle() + "</a>");
             // 是否收藏
-            bookmarkInfo.setIsFavoriteStr(bookmarkInfo.getIsFavorite() ? "是" : "否");
+            bookmarkInfo.setIsFavoriteStr(bookmarkInfo.getIsFavorite() == 1 ? "是" : "否");
             // 状态
             bookmarkInfo.setStatusStr(bookmarkInfo.getStatus() == 1 ? "正常" : "失效");
             // 备注

+ 97 - 2
src/main/resources/static/js/my-coin.js

@@ -309,7 +309,7 @@ function handleSelectChange(objj) {
             $.each(returnEn, function (index, obj) {
                 theadStr += '<th returnEn="' + obj + '">' + returnCn[index] + '</th>';
             });
-            if (nameEn === 'watchlist' || nameEn === 'image' || nameEn === 'music' || nameEn === 'youtubeLive' || nameEn === 'goldenQuotes') {
+            if (nameEn === 'watchlist' || nameEn === 'image' || nameEn === 'music' || nameEn === 'youtubeLive' || nameEn === 'goldenQuotes' || nameEn === 'bookmark') {
                 theadStr += '<th>操作</th>';
             }
 
@@ -713,6 +713,10 @@ function mainSearch(url, nameEn, slideDiv, typetype, needCustomFlag) {
                         str += '<button class="apis-quiet-div-goldenQuotes-update" operationType="update" symbolName="' + dataDetail.id + '">编辑</button>';
                         str += '<button class="apis-quiet-div-goldenQuotes-delete" operationType="delete" symbolName="' + dataDetail.id + '">删除</button>';
                         str += '</td>';
+                    } else if (nameEn === 'bookmark') {
+                        str += '<td style="padding: 0px 10px 0px 10px;">';
+                        str += '<button class="apis-quiet-div-bookmark-delete" operationType="delete" symbolName="' + dataDetail.id + '">删除</button>';
+                        str += '</td>';
                     }
 
                     str += '</tr>';
@@ -735,8 +739,11 @@ function mainSearch(url, nameEn, slideDiv, typetype, needCustomFlag) {
                 } else if (nameEn === 'goldenQuotes') {
                     $(".apis-quiet-div-goldenQuotes-update").unbind("click");
                     $(".apis-quiet-div-goldenQuotes-delete").unbind("click");
+                } else if (nameEn === 'bookmark') {
+                    $(".apis-quiet-div-bookmark-delete").unbind("click");
                 }
 
+
                 $('#' + slideDiv).find(".contentTD").html(str);
 
                 initContentEvent(nameEn);
@@ -1064,6 +1071,33 @@ function initContentEvent(nameEn) {
                 }
             });
         });
+    } else if (nameEn === 'bookmark') {
+        $(".apis-quiet-div-bookmark-delete").click(function () {
+            var symbol = $(this).attr("symbolName");
+            $.ajax({
+                url: "bookmarkInfo/delete/" + symbol, //请求的url地址
+                type: "get", //请求方式
+                async: true, //请求是否异步,默认为异步,这也是ajax重要特性
+                success: function (data) {
+                    //请求成功时处理
+                    if (data != null && $.trim(data) != "" && data.success) {
+                        $(".apis-quiet-div-button2").click();
+                    } else {
+                        alert(data.message);
+                    }
+                },
+                beforeSend: function () {
+                    $(".quiet-loading").css("display", "block");
+                },
+                complete: function () {
+                    $(".quiet-loading").css("display", "none");
+                },
+                error: function (data) {
+                    //请求出错处理
+                    alert('error:' + data);
+                }
+            });
+        });
     } else if (nameEn === 'music') {
         $("ul li").click(function () {
             $.ajax({
@@ -1524,6 +1558,51 @@ function insertOrUpdateGoldenQuotesSubmit(){
     });
 }
 
+function insertOrUpdateBookmarkSubmit(){
+    var formData = new FormData($("#popup-form")[0]);
+    formData.append("userName", getCookie('username'));
+    formData.append("level1Category",  $("#apis-quiet-div-bookmark-level1CategoryField").val());
+    formData.append("level2Category",$("#apis-quiet-div-bookmark-level2CategoryField").val());
+    formData.append("level3Category", $("#apis-quiet-div-bookmark-level3CategoryField").val());
+    $.ajax({
+        url: "bookmarkInfo/insertOrUpdate", //请求的url地址
+        dataType: "json", //返回格式为json
+        data: formData, //参数值
+        type: "post", //请求方式
+        processData: false,// 告诉jQuery不要去处理发送的数据
+        contentType: false,// 告诉jQuery不要去设置Content-Type请求头
+        async: true, //请求是否异步,默认为异步,这也是ajax重要特性
+        success: function (data) {
+            //$(".popup > .watchlist-loading").css("display", "none");
+            //请求成功时处理
+            if (data != null && $.trim(data) != "" && data.success) {
+                //$("#insertOrUpdateAlert").html(JSON.stringify(data.data));
+                var quietSelectOption = $("#apis-quiet-select option:selected");
+                if ($(quietSelectOption).attr("nameen") === 'bookmark') {
+                    $(".apis-quiet-div-button2").click();
+                }
+            } else {
+                //$("#insertOrUpdateAlert").html(data.message);
+            }
+
+            // 在请求成功后填充数据到结果区域
+            $("#result-content").text(JSON.stringify(data, null, 2));
+            $("#loading-icon").fadeOut();
+            $("#result-container").fadeIn();  // 显示结果区域
+        },
+        beforeSend: function () {
+            //$(".popup > .watchlist-loading").css("display", "block");
+            showLoading();  // 显示加载状态
+        },
+        complete: function () {
+        },
+        error: function (data) {
+            //请求出错处理
+            console.log("insertOrUpdateBookmark-submit error," + JSON.stringify(data, null, 2));
+        }
+    });
+}
+
 function insertOrUpdateCurrentHoldingSubmit(){
     var formData = new FormData($("#popup-form")[0]);
     formData.append("userName", getCookie('username'));
@@ -1578,7 +1657,7 @@ function initOther4Popup(){
         var slideDiv = $(this).attr("slideDiv");
         quietPop(url, nameEn, slideDiv, typetype);
 
-        if (nameEn != 'watchlist' && nameEn != 'image' && nameEn != 'music' && nameEn != 'currentHolding' && nameEn != 'goldenQuotes') {
+        if (nameEn != 'watchlist' && nameEn != 'image' && nameEn != 'music' && nameEn != 'currentHolding' && nameEn != 'goldenQuotes' && nameEn != 'bookmark') {
             return;
         }
 
@@ -1606,6 +1685,8 @@ function initOther4Popup(){
             insertOrUpdateCurrentHoldingSubmit();
         } else if (nameEn === 'goldenQuotes') {
             insertOrUpdateGoldenQuotesSubmit();
+        } else if (nameEn === 'bookmark') {
+            insertOrUpdateBookmarkSubmit();
         }
     });
 
@@ -1708,6 +1789,20 @@ function quietPop(url, nameEn, slideDiv, typetype) {
         $("#popup-form-hidden-nameEn").val(nameEn);
 
         $("#draggable-popup > h2").text("InsertOrUpdateGoldenQuotes");
+    } else if (nameEn === 'bookmark') {
+        let formContent = "";
+        formContent += '<div class="form-item"><label for="id">Id:</label><input type="text" name="id" placeholder="可为空"></div>';
+        formContent += '<div class="form-item"><label for="title">title:</label><input type="text" name="title" placeholder="不可为空"></div>';
+        formContent += '<div class="form-item"><label for="url">url:</label><input type="text" name="url" placeholder="不可为空"></div>';
+        formContent += '<div class="form-item"><label for="tags">tags:</label><input type="text" name="tags" placeholder="可为空"></div>';
+        formContent += '<div class="form-item"><label for="remark">remark:</label><input type="text" name="remark" placeholder="可为空"></div>';
+        formContent += '<div class="form-item"><label for="crudType">crudType:</label><select id="apis-quiet-div-bookmark-crudType" name="crudType"><option value="1">insert</option><option value="2">update</option></select></div>';
+
+        $("#form-container-2").html(formContent);
+
+        $("#popup-form-hidden-nameEn").val(nameEn);
+
+        $("#draggable-popup > h2").text("InsertOrUpdateBookmark");
     } else if (nameEn === 'watchlist') {
         let formContent = "";
         formContent += '<div class="form-item"><label for="symbol">名称:</label><input type="text" name="symbol" placeholder="不可为空"></div>';