标签管理

This commit is contained in:
WangHao 2021-05-24 00:26:30 +08:00
parent 900076723f
commit 6414758036
24 changed files with 571 additions and 235 deletions

View File

@ -181,7 +181,8 @@ public class SqBookmarkController extends BaseController
public AjaxResult add(@RequestBody SqBookmark sqBookmark) public AjaxResult add(@RequestBody SqBookmark sqBookmark)
{ {
sqBookmark.setUserid(getAuthUser().getUserId()); sqBookmark.setUserid(getAuthUser().getUserId());
return toAjax(sqBookmarkService.insertSqBookmark(sqBookmark)); int i = sqBookmarkService.insertSqBookmark(sqBookmark);
return new AjaxResult(200,(i>0&&i!=999)?"success":"repetition");
} }
/** /**

View File

@ -37,6 +37,40 @@ public class SqTagController extends BaseController
/**
* 获取所有的书签TAG 并且翻页
*/
@GetMapping("/listByUser")
public TableDataInfo listByUser()
{
startPage();
List<SqTag> list = sqTagService.selectSqTagList(new SqTag(getAuthUser().getUserId()));
return getDataTable(list);
}
/**
* 模糊查书签TAG
*/
@GetMapping("/listByUserLike")
public TableDataInfo listByUserLike()
{
startPage();
List<SqTag> list = sqTagService.selectSqTagList(new SqTag(getAuthUser().getUserId()));
return getDataTable(list);
}
// 以下是系统管理员的操作
/** /**
* 查询书签_标签列表 * 查询书签_标签列表

View File

@ -174,16 +174,6 @@ public class SqBookmarkTest extends BaseSpringBootTest{
* @return * @return
* @throws Exception * @throws Exception
*/ */
private HttpSession getLoginSession() throws Exception{
// mock request get login session
// url = /xxx/xxx/{username}/{password}
MvcResult result = this.mockMvc
.perform((MockMvcRequestBuilders.post("/login")))
.andExpect(MockMvcResultMatchers.status().isOk())
.andReturn();
return result.getRequest().getSession();
}

View File

@ -15,8 +15,12 @@ import org.junit.Test;
import org.mybatis.spring.SqlSessionTemplate; import org.mybatis.spring.SqlSessionTemplate;
import org.omg.PortableServer.THREAD_POLICY_ID; import org.omg.PortableServer.THREAD_POLICY_ID;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.web.servlet.MvcResult;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.result.MockMvcResultMatchers;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import javax.servlet.http.HttpSession;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
@ -38,10 +42,19 @@ public class SqMenuTest extends BaseSpringBootTest{
SqBookmarkMapper sqBookmarkMapper; SqBookmarkMapper sqBookmarkMapper;
@Autowired @Autowired
SqlSessionTemplate sqlSessionTemplate; SqlSessionTemplate sqlSessionTemplate;
@Test @Test
public void addMenuUplinkSeries() { public void addMenuUplinkSeries() {
List<com.ruoyi.bookmark.domain.SqMenu> sqMenus = sqMenuMapper.selectbymenuUplinkSeries(); List<com.ruoyi.bookmark.domain.SqMenu> sqMenus = sqMenuMapper.selectbymenuUplinkSeries();
if (null!=sqMenus&&!sqMenus.isEmpty()) { if (null!=sqMenus&&!sqMenus.isEmpty()) {
for (com.ruoyi.bookmark.domain.SqMenu s:sqMenus) { for (com.ruoyi.bookmark.domain.SqMenu s:sqMenus) {
@ -88,6 +101,11 @@ public class SqMenuTest extends BaseSpringBootTest{
} }
@Test
public void test67(){
iSqBookmarkService.bookmarkDeleteRepetition(1L);
}
/** /**
* 初始化是否有下级目录 subordinate 0无下级 1有下级 * 初始化是否有下级目录 subordinate 0无下级 1有下级

View File

@ -62,6 +62,7 @@
"vue": "2.6.10", "vue": "2.6.10",
"vue-count-to": "1.0.13", "vue-count-to": "1.0.13",
"vue-cropper": "0.4.9", "vue-cropper": "0.4.9",
"vue-material": "^1.0.0-beta-15",
"vue-quill-editor": "3.0.6", "vue-quill-editor": "3.0.6",
"vue-router": "3.0.2", "vue-router": "3.0.2",
"vue-splitpane": "1.0.4", "vue-splitpane": "1.0.4",

View File

@ -1,5 +1,5 @@
<template> <template>
<div id="app"> <div id="app" style="overflow: hidden;">
<router-view /> <router-view />
</div> </div>
</template> </template>

View File

@ -1,5 +1,36 @@
import request from '@/utils/request' import request from '@/utils/request'
// 查询书签_标签列表
export function listByUser(query) {
return request({
url: '/system/tag/listByUser',
method: 'get',
params: query
})
}
// 查询书签_标签列表
export function listByUserLike(query) {
return request({
url: '/system/tag/listByUserLike',
method: 'get',
params: query
})
}
// 查询书签_标签列表 // 查询书签_标签列表
export function listTag(query) { export function listTag(query) {
return request({ return request({

View File

@ -0,0 +1 @@
<?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 t="1620535693527" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3174" data-spm-anchor-id="a313x.7781069.0.i4" width="32" height="32" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><style type="text/css"></style></defs><path d="M492.544 663.7568c-6.7584 0-13.7216-2.6624-18.8416-7.7824l-113.0496-113.0496c-5.9392-4.9152-9.6256-12.0832-9.6256-20.2752 0-14.7456 11.6736-26.624 26.4192-26.624h0.6144c6.9632 0 13.9264 2.8672 18.8416 7.7824l114.4832 114.4832a26.58304 26.58304 0 0 1-18.8416 45.4656z" fill="#4e6ef2" p-id="3175"></path><path d="M312.7296 909.312c-9.4208 0-18.8416-3.072-26.8288-9.0112-13.5168-9.8304-20.2752-27.2384-16.9984-44.032l37.888-221.5936-161.3824-157.696c-11.8784-11.4688-16.384-29.4912-11.264-45.4656 5.12-15.9744 19.2512-27.8528 35.84-30.3104l222.8224-31.9488 100.5568-202.3424c7.3728-14.9504 22.528-24.576 39.3216-24.7808h0.2048c16.7936 0 32.5632 9.6256 39.936 24.7808l99.7376 202.3424 223.232 32.3584c15.9744 1.4336 30.9248 13.1072 36.4544 29.9008 5.12 16.5888 0.8192 33.5872-10.8544 45.056l-121.856 118.5792c-12.0832 11.8784-31.5392 11.6736-43.4176-0.6144a30.72 30.72 0 0 1 0.6144-43.4176l96.4608-93.7984-205.2096-29.696c-10.0352-1.4336-18.6368-7.7824-23.1424-16.7936L533.0944 225.28l-92.3648 185.9584c-4.5056 9.0112-13.1072 15.36-23.1424 16.7936l-204.3904 29.2864 148.0704 144.7936c7.168 6.9632 10.4448 17.2032 8.8064 27.2384l-35.0208 204.8 183.7056-96.6656c9.0112-4.7104 19.6608-4.7104 28.672 0l181.0432 95.0272-69.4272-283.8528c-4.096-16.384 6.144-33.1776 22.528-37.0688 16.5888-4.096 33.1776 6.144 37.0688 22.528l78.4384 320.3072c3.2768 13.312 0.2048 27.648-8.6016 38.5024-8.6016 10.6496-21.7088 17.2032-35.6352 16.384-6.144-0.2048-13.1072-1.6384-19.456-4.9152l-200.0896-105.0624-199.68 105.0624c-6.5536 3.2768-13.7216 4.9152-20.8896 4.9152zM737.28 868.7616c0 0.2048 0 0.2048 0 0z m-407.7568-2.048l-0.2048 0.6144c0.2048-0.2048 0.2048-0.4096 0.2048-0.6144z m-24.576-16.9984c-0.2048 0-0.2048 0.2048-0.4096 0.2048l0.4096-0.2048z m582.0416-387.2768c0.6144 0.2048 1.2288 0.2048 1.8432 0.2048l-1.8432-0.2048zM188.416 432.7424c0 0.2048 0 0.2048 0 0zM548.4544 194.1504z m-30.72 0z" fill="#4e6ef2" p-id="3176"></path><path d="M676.0448 258.6624c-7.7824 0-15.7696-3.072-21.7088-9.0112a30.5152 30.5152 0 0 1 0-43.4176l82.5344-82.5344c12.0832-12.0832 31.5392-12.0832 43.4176 0s12.0832 31.5392 0 43.4176l-82.5344 82.5344c-5.9392 6.144-13.7216 9.0112-21.7088 9.0112zM120.2176 796.0576c-7.7824 0-15.7696-3.072-21.7088-9.0112a30.5152 30.5152 0 0 1 0-43.4176l121.0368-121.0368c12.0832-12.0832 31.5392-12.0832 43.4176 0s12.0832 31.5392 0 43.4176l-121.0368 121.0368c-5.9392 5.9392-13.9264 9.0112-21.7088 9.0112zM709.2224 356.1472c-7.7824 0-15.7696-3.072-21.7088-9.0112a30.5152 30.5152 0 0 1 0-43.4176l73.728-74.1376a30.5152 30.5152 0 0 1 43.4176 0c12.0832 11.8784 12.0832 31.3344 0 43.4176l-73.728 74.1376c-5.9392 6.144-13.7216 9.0112-21.7088 9.0112z" fill="#4e6ef2" p-id="3177"></path></svg>

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 64 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

View File

@ -28,7 +28,11 @@
</div> </div>
<div class="bookmark-official bookmark-list-tag-top">{{bm.urls}}&nbsp;·&nbsp;</div> <div class="bookmark-official bookmark-list-tag-top">{{bm.urls}}&nbsp;·&nbsp;</div>
<div class="bookmark-time bookmark-list-tag-top">{{bm.createTime|changeTime}}</div> <div class="bookmark-time bookmark-list-tag-top">{{bm.createTime|changeTime}}</div>
<div class="bookmark-time bookmark-list-tag-top">{{bm.bookmarkStar}}</div> <div class="bookmark-time bookmark-list-tag-top" v-if="bm.bookmarkStar == 1">
<svg-icon slot="prefix" icon-class="str" style="font-size: 18px;"/>
<!-- <i class="el-icon-star-on" style="color: #569cd5;font-size: 18px;margin-top: 4px"></i>-->
</div>
<div class="bookmark-time" v-if="bm.tagNameAll!=null&&bm.tagNameAll!=''" > <div class="bookmark-time" v-if="bm.tagNameAll!=null&&bm.tagNameAll!=''" >
<el-tag v-for="item in JSON.parse(bm.tagNameAll)" class="bookmark-list-tag bookmark-list-tag-top" style="float: left" type="info" data-tagid="item.tagId" size="mini"> <el-tag v-for="item in JSON.parse(bm.tagNameAll)" class="bookmark-list-tag bookmark-list-tag-top" style="float: left" type="info" data-tagid="item.tagId" size="mini">
@ -69,7 +73,7 @@
isBookmarkIcon:false, isBookmarkIcon:false,
Ueditor:undefined, Ueditor:undefined,
seen:false, seen:false,
current:0, current:0
} }
}, },
mounted(){ mounted(){
@ -109,15 +113,39 @@
}, },
/** 星标 **/ /** 星标 **/
updateStarById:function(bookmarkId,bookmarkStar){ updateStarById:function(bookmarkId,bookmarkStar){
var that = this;
console.log("bookmarkStar:"+bookmarkStar) console.log("bookmarkStar:"+bookmarkStar)
var param={ var param={
bookmarkId:bookmarkId, bookmarkId:bookmarkId,
bookmarkStr:bookmarkStar==0?1:0 bookmarkStr:bookmarkStar
} }
console.log("bookmarkStar2:"+param.bookmarkStar) console.log("bookmarkStar2:"+param.bookmarkStar)
updateBookmarkStarById(param).then(response => { updateBookmarkStarById(param).then(response => {
if (response.code === 200) { if (response.code === 200) {
this.msgSuccess("设置成功"); this.msgSuccess("设置成功");
// let list = this.bookmarkList;
// for (var i=0;i<list.length;i++){
// if (list[i].bookmarkId == bookmarkId) {
// that.$set(this.bookmarkList[i], `bookmarkStr`, 0)
// console.log("bookmarkStar2:"+this.bookmarkList[i].bookmarkStr)
// break;
// }
// }
// //
// for (var item of list) {
// if (item.bookmarkId == bookmarkId){
// //
// console.log(item.bookmarkId+" "+bookmarkId);
// console.log("item.bookmarkstatus1 = "+ item.bookmarkStr);
// item.bookmarkStr = bookmarkStar;
// this.$set(item, `showAlert`, true)
// console.log("item.bookmarkstatus2 = "+ item.bookmarkStr);
// this.bookmarkList = list;
// break;
// }
//
// }
} }
}); });
}, },
@ -145,6 +173,7 @@
/**搜索高亮 开始**/ /**搜索高亮 开始**/
highLight(item, highLight) { highLight(item, highLight) {
// console.log("")
return this.highLightTableMsg(item, highLight) return this.highLightTableMsg(item, highLight)
}, },
highLightTableMsg(msg, highLightStr) { highLightTableMsg(msg, highLightStr) {

View File

@ -27,7 +27,12 @@ import 'element-ui/lib/theme-chalk/index.css'
//媒体查詢 //媒体查詢
import '@/assets/styles/base.css' import '@/assets/styles/base.css'
// 全局引入VueMaterial组件库 https://vuematerial.io/
// import VueMaterial from 'vue-material'
// import 'vue-material/dist/vue-material.min.css'
// import 'vue-material/dist/theme/default.css'
//
// Vue.use(VueMaterial)

View File

@ -19,7 +19,7 @@
<div class="mdui-btn-group head-tag-button"> <div class="mdui-btn-group head-tag-button">
<!-- <div :class="['classification',property=='0'?' classification-click':'']" @click="showopen(0)"><span>网页</span></div>--> <!-- <div :class="['classification',property=='0'?' classification-click':'']" @click="showopen(0)"><span>网页</span></div>-->
<button @click="goRouter(1)" :class="['mdui-btn mdui-color-theme-accent mdui-ripple ',property=='1'?' mdui-btn-active mdui-color-blue-50 mdui-text-color-blue-600':'']">个人中心</button> <button @click="goRouter(1)" :class="['mdui-btn mdui-color-theme-accent mdui-ripple ',property=='1'?' mdui-btn-active mdui-color-blue-50 mdui-text-color-blue-600':'']">个人中心</button>
<button @click="goRouter(7)" :class="['mdui-btn mdui-color-theme-accent mdui-ripple ',property=='7'?' mdui-btn-active mdui-color-blue-50 mdui-text-color-blue-600':'']">外观设置</button> <!-- <button @click="goRouter(7)" :class="['mdui-btn mdui-color-theme-accent mdui-ripple ',property=='7'?' mdui-btn-active mdui-color-blue-50 mdui-text-color-blue-600':'']">外观设置</button>-->
<button @click="goRouter(2)" :class="['mdui-btn mdui-color-theme-accent mdui-ripple ',property=='2'?' mdui-btn-active mdui-color-blue-50 mdui-text-color-blue-600':'']">系统设置</button> <button @click="goRouter(2)" :class="['mdui-btn mdui-color-theme-accent mdui-ripple ',property=='2'?' mdui-btn-active mdui-color-blue-50 mdui-text-color-blue-600':'']">系统设置</button>
<button @click="goRouter(3)" :class="['mdui-btn mdui-color-theme-accent mdui-ripple ',property=='3'?' mdui-btn-active mdui-color-blue-50 mdui-text-color-blue-600':'']">导入书签</button> <button @click="goRouter(3)" :class="['mdui-btn mdui-color-theme-accent mdui-ripple ',property=='3'?' mdui-btn-active mdui-color-blue-50 mdui-text-color-blue-600':'']">导入书签</button>
<button @click="goRouter(4)" :class="['mdui-btn mdui-color-theme-accent mdui-ripple ',property=='4'?' mdui-btn-active mdui-color-blue-50 mdui-text-color-blue-600':'']">备份导出</button> <button @click="goRouter(4)" :class="['mdui-btn mdui-color-theme-accent mdui-ripple ',property=='4'?' mdui-btn-active mdui-color-blue-50 mdui-text-color-blue-600':'']">备份导出</button>
@ -70,7 +70,7 @@
that.$router.push({ that.$router.push({
path: "/content", path: "/content",
query: { query: {
menuId: 'BOOKMARK' menuId: 'newest'
} }
}) })
break; break;

View File

@ -24,7 +24,8 @@
<div class="sousouright-iconadd"> <div class="sousouright-iconadd">
<el-dropdown trigger="click" size="small" :hide-on-click="true" > <el-dropdown trigger="click" size="small" :hide-on-click="true" >
<span class="el-dropdown-link"> <span class="el-dropdown-link">
<i class="el-icon-plus" style="font-size: 18px;"/> <!-- <i class="el-icon-plus" style="font-size: 18px;"/>-->
<el-button icon="el-icon-plus" style="border:0px;font-size: 18px;" size="mini"></el-button>
</span> </span>
<el-dropdown-menu slot="dropdown" class="sq-dropdown"> <el-dropdown-menu slot="dropdown" class="sq-dropdown">
<el-dropdown-item class="filter-item" icon="el-icon-plus" @click.native="addbookmarkurl">添加连接 <el-dropdown-item class="filter-item" icon="el-icon-plus" @click.native="addbookmarkurl">添加连接
@ -38,7 +39,7 @@
<el-dropdown trigger="click" size="small" :hide-on-click="false"> <el-dropdown trigger="click" size="small" :hide-on-click="false">
<span class="el-dropdown-link"> <span class="el-dropdown-link">
<el-avatar :size="28" <el-avatar style="margin-top: 5px" :size="28"
src="https://up.raindrop.io/collection/templates/social-media-logos-6/97social.png"></el-avatar> src="https://up.raindrop.io/collection/templates/social-media-logos-6/97social.png"></el-avatar>
</span> </span>
<el-dropdown-menu slot="dropdown" class="sq-dropdown"> <el-dropdown-menu slot="dropdown" class="sq-dropdown">
@ -55,14 +56,15 @@
<div class="filter-tbar"> <div class="filter-tbar">
<div class="filter-classification"> <div class="filter-classification">
<div :class="['classification',property=='0'?' classification-click':'']" @click="showopen(0)"><span>网页</span></div> <div :class="['classification',property=='0'?' classification-click':'']" @click="showopen(0)"><span>网页</span></div>
<div :class="['classification',property=='1'?' classification-click':'']" @click="showopen(1)"><span>文本</span></div> <!-- <div :class="['classification',property=='1'?' classification-click':'']" @click="showopen(1)"><span>文本</span></div>-->
<div :class="['classification',property=='2'?' classification-click':'']" @click="showopen(2)"><span>其他</span></div> <div :class="['classification',property=='2'?' classification-click':'']" @click="showopen(2)"><span>其他</span></div>
</div> </div>
<div class="setUpThe"> <div class="setUpThe">
<div class="filter-content"> <div class="filter-content">
<el-dropdown trigger="hover" size="small" @command="handleCommand"> <el-dropdown trigger="hover" size="small" @command="handleCommand">
<div class="el-dropdown-link dropdownList"> <div class="el-dropdown-link dropdownList">
<i class="el-icon-document-checked "></i> <!-- <i class="el-icon-document-checked "></i>-->
<el-button icon="el-icon-document-checked" style="border:0px;font-size: 18px;" size="mini"></el-button>
</div> </div>
<el-dropdown-menu slot="dropdown" class="filter-sort-dropdown"> <el-dropdown-menu slot="dropdown" class="filter-sort-dropdown">
<el-dropdown-item class="filter-item" command="0"><i class="el-icon-bottom"></i>按时间排序() <el-dropdown-item class="filter-item" command="0"><i class="el-icon-bottom"></i>按时间排序()
@ -80,7 +82,7 @@
<div class="filter-content"> <div class="filter-content">
<el-dropdown trigger="hover" size="small"> <el-dropdown trigger="hover" size="small">
<div class="el-dropdown-link dropdownList"> <div class="el-dropdown-link dropdownList">
<i class="el-icon-tickets "></i> <el-button icon="el-icon-tickets" style="border:0px;font-size: 18px;" size="mini"></el-button>
</div> </div>
<el-dropdown-menu slot="dropdown" class="filter-sort-dropdown"> <el-dropdown-menu slot="dropdown" class="filter-sort-dropdown">
<el-dropdown-item class="filter-item"><i class="el-icon-bottom"></i>按时间排序()</el-dropdown-item> <el-dropdown-item class="filter-item"><i class="el-icon-bottom"></i>按时间排序()</el-dropdown-item>
@ -105,8 +107,8 @@
<div class="nullbookmark" v-if="showimg"> <div class="nullbookmark" v-if="showimg">
<div class="nullbookmark-img"> <div class="nullbookmark-img">
</div> </div>
<div style="color: #000000" class="nullbookmark-text"> <div class="nullbookmark-text">
此目录还未添加收藏 空空如也
</div> </div>
</div> </div>
@ -411,7 +413,7 @@
} }
console.log("routedata"+routedata) console.log("routedata"+routedata)
if (routedata == 'newest'||routedata == 'asterisk'||routedata == 'seeYouLater'||routedata == 'recycle') { if ((sousuo != null && sousuo != undefined && sousuo != '')||routedata == 'newest'||routedata == 'asterisk'||routedata == 'seeYouLater'||routedata == 'recycle') {
that.queryParams.menuId=null; that.queryParams.menuId=null;
this.listByUserAndPolymerization(routedata); this.listByUserAndPolymerization(routedata);
@ -606,14 +608,25 @@
this.msgSuccess("修改成功"); this.msgSuccess("修改成功");
this.open = false; this.open = false;
this.getList(); this.getList();
}else{
this.msgError("新增失败,系统错误!");
this.open = false;
} }
}); });
} else { } else {
addBookmark(this.form).then(response => { addBookmark(this.form).then(response => {
if (response.code === 200) { if (response.code === 200) {
if(response.data === 'repetition'){
this.msgSuccess("新增失败,此书签已经存在了!");
this.open = false;
return;
}
this.msgSuccess("新增成功"); this.msgSuccess("新增成功");
this.open = false; this.open = false;
this.getList(); this.getList();
}else{
this.msgError("新增失败,系统错误!");
this.open = false;
} }
}); });
} }
@ -705,24 +718,24 @@
} }
}); });
}, },
/** 全部书签**/ // /** **/
getBookmarkList() { // getBookmarkList() {
this.loading = true; // this.loading = true;
selectByUseridList(this.queryParams).then(response => { // selectByUseridList(this.queryParams).then(response => {
if (response.code == 200) { // if (response.code == 200) {
this.bookmarkList = this.bookmarkList.concat(response.rows); // this.bookmarkList = this.bookmarkList.concat(response.rows);
this.total = response.total; // this.total = response.total;
this.listloading = false // this.listloading = false
this.loading = false; // this.loading = false;
console.log("请求完毕" + this.queryParams.pageNum) // console.log("" + this.queryParams.pageNum)
} else { // } else {
// // //
this.noMore = true; // this.noMore = true;
this.listloading = false // this.listloading = false
this.loading = false; // this.loading = false;
} // }
}); // });
}, // },
/** 最新 星标 回收站 稍后看**/ /** 最新 星标 回收站 稍后看**/
listByUserAndPolymerization(str) { listByUserAndPolymerization(str) {
console.log(" 最新 星标 回收站 稍后看"); console.log(" 最新 星标 回收站 稍后看");
@ -735,12 +748,16 @@
this.total = response.total; this.total = response.total;
this.listloading = false this.listloading = false
this.loading = false; this.loading = false;
if (response.total == 0){
this.showimg = true;//
}
console.log("请求完毕" + this.queryParams.pageNum) console.log("请求完毕" + this.queryParams.pageNum)
} else { } else {
// //
this.noMore = true; this.noMore = true;
this.listloading = false this.listloading = false
this.loading = false; this.loading = false;
this.showimg = true;
} }
}); });
}, },
@ -787,7 +804,7 @@
/** 查询书签管理列表 */ /** 查询书签管理列表 */
getList() { getList() {
this.loading = true; this.loading = true;
selectBymenuIdUserID(this.queryParams).then(response => { listByUserAndPolymerization(this.queryParams).then(response => {
if (response.code == 200) { if (response.code == 200) {
this.bookmarkList = response.rows; this.bookmarkList = response.rows;
this.total = response.total; this.total = response.total;
@ -810,14 +827,9 @@
var routedata = this.queryParams.menuId; var routedata = this.queryParams.menuId;
if(routedata == 'newest'||routedata == 'asterisk'||routedata == 'seeYouLater'||routedata == 'recycle'){ if(routedata == 'newest'||routedata == 'asterisk'||routedata == 'seeYouLater'||routedata == 'recycle'){
this.listByUserAndPolymerization(routedata); this.listByUserAndPolymerization(routedata);
// //
// this.getBookmarkList();
// }else if (this.queryParams.menuId == 'RECYCLE') {
// //
// this.getrecycleList();
}else{ }else{
// //
this.getlistByMenuId(); this.listByUserAndPolymerization(routedata);
} }
}, },
/**查询便签 滚动加载分页拼接*/ /**查询便签 滚动加载分页拼接*/
@ -965,7 +977,13 @@
<style scoped> <style scoped>
/*.isbookmarkContainer{*/
/* background-color: #f0f0f2;*/
/* background-image: url(https://shijiechao.oss-cn-hangzhou.aliyuncs.com/wp-content/uploads/2020/12/top_bg.png);*/
/* background-repeat: no-repeat;*/
/* background-attachment: fixed;*/
/* background-position: center top;*/
/*}*/
.button-new-tag { .button-new-tag {
margin-left: 10px; margin-left: 10px;
@ -1019,21 +1037,23 @@
.nullbookmark-img { .nullbookmark-img {
margin: 0 auto; margin: 0 auto;
width: 250px; width: 450px;
height: 250px; height: 250px;
justify-content: center; justify-content: center;
align-content: center; align-content: center;
background-image: url("https://s1.ax1x.com/2020/08/22/dawFp9.png"); background-image: url("../../../assets/image/ts.png");
background-repeat: no-repeat; background-repeat: no-repeat;
background-size: 100% 100%; background-size: 100% 100%;
opacity: 0.75;
} }
.nullbookmark-text { .nullbookmark-text {
margin: 0 auto; margin: 0 auto;
width: 250px; width: 250px;
text-align: center; text-align: center;
color: #D4D4D4 !important; color: #D4D4D4;
font-size: 18px;
/*font-family: "Arial","Microsoft YaHei","黑体","宋体",sans-serif;*/
} }
.editBookamrk { .editBookamrk {
@ -1104,10 +1124,10 @@
height: 40px; height: 40px;
-webkit-box-pack: justify; -webkit-box-pack: justify;
justify-content: space-between; justify-content: space-between;
-webkit-box-align: center;
align-items: center; align-items: center;
box-sizing: border-box; box-sizing: border-box;
} }
.filter-classification { .filter-classification {
@ -1125,7 +1145,7 @@
} }
.filter-content { .filter-content {
margin-left: 13px; margin-left: 2px;
} }
@ -1331,7 +1351,7 @@
display: flex; display: flex;
justify-content: center; justify-content: center;
align-items: center; align-items: center;
width: 50px; width: 60px;
} }
.sq-dropdown { .sq-dropdown {

View File

@ -20,11 +20,26 @@
<div class="main-right"> <div class="main-right">
<!-- <svg-icon icon-class="tool" class="svgicon"/>--> <!-- <svg-icon icon-class="tool" class="svgicon"/>-->
<div class="aside-title" @click="goRouter(8)"><i class="el-icon-folder"></i><span>最新</span></div> <div class="aside-title" @click="goRouter(8)"><i class="el-icon-folder"></i>
<div class="aside-title" @click="goRouter(9)"><i class="el-icon-star-off"></i><span>星标</span></div> <span>最新</span>
<div class="aside-title" @click="goRouter(10)"><i class="el-icon-reading"></i><span>稍后看</span></div> <span class="menuCount">112</span>
<div class="aside-title"><i class="el-icon-view"></i><span>发现</span></div> </div>
<div class="aside-title"><i class="el-icon-message"></i><span>收件箱</span></div> <div class="aside-title" @click="goRouter(9)"><i class="el-icon-star-off"></i>
<span>星标</span>
<span class="menuCount">92</span>
</div>
<div class="aside-title" @click="goRouter(10)"><i class="el-icon-reading"></i>
<span>稍后看</span>
<span class="menuCount">5</span>
</div>
<div class="aside-title"><i class="el-icon-view"></i>
<span>发现</span>
<span class="menuCount"></span>
</div>
<div class="aside-title"><i class="el-icon-message"></i>
<span>收件箱</span>
<span class="menuCount">5</span>
</div>
<div class="aside-titleB" @mouseenter="eidtMenuText=!eidtMenuText" @mouseleave="eidtMenuText=!eidtMenuText"> <div class="aside-titleB" @mouseenter="eidtMenuText=!eidtMenuText" @mouseleave="eidtMenuText=!eidtMenuText">
@ -73,32 +88,42 @@
</el-input> </el-input>
<i v-if="!searchBkMenu" @click="searchBkMenuCk" class="el-icon-close" style="font-size: 25px;margin-left: 5px;margin-bottom: 2px"></i> <i v-if="!searchBkMenu" @click="searchBkMenuCk" class="el-icon-close" style="font-size: 25px;margin-left: 5px;margin-bottom: 2px"></i>
</div> </div>
<!-- <transition name="el-zoom-in-top">-->
<!-- 目录--> <!-- 目录-->
<div class="areaTree" v-show="menuListShow"> <el-collapse-transition>
<div class="areaTree transition-box" v-show="menuListShow">
<ul id="treeDemo" class="ztree"></ul> <ul id="treeDemo" class="ztree"></ul>
</div> </div>
<!-- </transition>--> </el-collapse-transition>
<div class="reminder" STYLE="">工具箱</div>
<!-- TAG标签 -->
<usertag/>
<!-- <div class="reminder" STYLE="">工具箱</div>-->
<div class="aside-titleB" @mouseenter="eidtTAGText=!eidtTAGText" @mouseleave="eidtTAGText=!eidtTAGText">
<i @click="tagListShowCk" :class="tagListShow ? 'el-icon-caret-bottom aside-titleB_childi_one':'el-icon-caret-right aside-titleB_childi_one'" ></i>
<i class="el-icon-price-tag aside-titleB_childi_two"></i>
<span >工具箱</span>
<div style="margin-left: 40%" v-show="eidtTAGText">
<i class="el-icon-search" style="font-size: 19px;margin-left: 5px;margin-top: 7px" @click="searchBkTagCk"></i>
<i class="el-icon-folder-add" style="font-size: 19px;margin-left: 5px;margin-top: 7px" @click="addBkTagCk"></i>
</div>
</div>
<!-- <div class="aside-title"><i class="el-icon-s-flag" style="color: #569cd5"></i><span>RSS订阅</span></div>--> <!-- <div class="aside-title"><i class="el-icon-s-flag" style="color: #569cd5"></i><span>RSS订阅</span></div>-->
<div class="aside-title" @click="goRouter(7)"><i class="el-icon-collection"></i><span>标签管理</span></div> <!-- <div class="aside-title" @click="goRouter(7)"><i class="el-icon-collection"></i><span>功能管理</span></div>-->
<div class="aside-title" @click="goRouter(6)"><i class="el-icon-delete" ></i><span>垃圾桶</span></div> <div class="aside-title" @click="goRouter(6)"><i class="el-icon-delete" ></i><span>垃圾桶</span></div>
<div class="aside-title"><i class="el-icon-chat-dot-square"></i><span>意见反馈</span></div> <!-- <div class="aside-title"><i class="el-icon-chat-dot-square"></i><span>意见反馈</span></div>-->
<div class="aside-title" @click="goRouter(2)"><i class="el-icon-suitcase"></i><span>小工具</span></div> <!-- <div class="aside-title" @click="goRouter(2)"><i class="el-icon-suitcase"></i><span>小工具</span></div>-->
<div class="aside-title " style="margin-bottom: 100px" @click="goRouter(11)"><i class="el-icon-setting"></i><span>更多设置</span></div> <div class="aside-title " style="margin-bottom: 100px" @click="goRouter(11)"><i class="el-icon-setting"></i><span>更多设置</span></div>
</div> </div>
@ -111,8 +136,8 @@
<!-- 拖拽 --> <!-- 拖拽 -->
<!-- <div class="isresize" style="cursor:w-resize">--> <div class="isresize" style="cursor:w-resize">
<!-- </div>--> </div>
@ -173,11 +198,12 @@
import "../ztree/zTreeStyle.css" import "../ztree/zTreeStyle.css"
import "../ztree/jquery.ztree.exedit.js" import "../ztree/jquery.ztree.exedit.js"
import {listMenuByUserId,listByMenuId} from "@/api/bookmark/menu"; import {listMenuByUserId,listByMenuId} from "@/api/bookmark/menu";
import usertag from '../tag/usertag.vue'
export default { export default {
name: 'areaTree', name: 'areaTree',
components: { components: {
Treeselect Treeselect,usertag
}, },
data: function () { data: function () {
@ -187,10 +213,6 @@
menuListShow:true,//list menuListShow:true,//list
eidtMenuText:false,// eidtMenuText:false,//
addBkTAG:true,//TAG
searchBkTAG:true,//TAG
tagListShow:false,//TAGlist
eidtTAGText:false,//TAG
queryParams: { queryParams: {
@ -370,24 +392,7 @@
}, },
/**添加书签目录**/
addBkTagCk(){
this.addBkTAG = this.addBkTAG?false:true;
this.searchBkTAG = true;
this.tagListShow = true;
},
/**搜索书签目录**/
searchBkTagCk(){
this.searchBkMenu = this.searchBkTAG?false:true;
this.addBkTAG = true;
this.tagListShow = true;
},
/**搜索书签目录**/
tagListShowCk(){
this.tagListShow = this.tagListShow?false:true;
this.addBkTAG = true;
this.searchBkTAG = true;
},
/**图片失败显示**/ /**图片失败显示**/
errorHandler() { errorHandler() {
@ -413,7 +418,8 @@
console.log("开始拖拽") console.log("开始拖拽")
var resize = document.getElementsByClassName('isresize'); var resize = document.getElementsByClassName('isresize');
var left = document.getElementsByClassName('main-right'); var left = document.getElementsByClassName('main-right');
var mid = document.getElementsByClassName('el-container mid is-vertical'); // var mid = document.getElementsByClassName('el-container mid is-vertical');
var mid = document.getElementsByClassName('mid');
var box = document.getElementsByClassName('box'); var box = document.getElementsByClassName('box');
var transition = document.getElementsByClassName('transition-box'); var transition = document.getElementsByClassName('transition-box');
@ -886,7 +892,8 @@
that.$router.push({ that.$router.push({
path: "/content", path: "/content",
query: { query: {
menuId: 'recycle' menuId: 'recycle',
t:Date.now()
} }
}) })
break; break;
@ -1000,7 +1007,6 @@
</script> </script>
<style scoped> <style scoped>
body { body {
/*font-family: "Helvetica Neue", Helvetica, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "微软雅黑", Arial, sans-serif;*/ /*font-family: "Helvetica Neue", Helvetica, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "微软雅黑", Arial, sans-serif;*/
font-family: "Merriweather", "Open Sans", "Microsoft Jhenghei", "Microsoft Yahei", sans-serif; font-family: "Merriweather", "Open Sans", "Microsoft Jhenghei", "Microsoft Yahei", sans-serif;
@ -1213,6 +1219,11 @@
.separator { .separator {
float: left; float: left;
} }
.menuCount{
float: right;
margin-right:18px!important;
color: #9e9e9e
}
.filter-sort i { .filter-sort i {
margin-left: -4px; margin-left: -4px;

View File

@ -0,0 +1,159 @@
<template>
<div class="main" >
<div class="aside-titleB" @mouseenter="eidtTAGText=!eidtTAGText" @mouseleave="eidtTAGText=!eidtTAGText">
<i @click="tagListShowCk" :class="tagListShow ? 'el-icon-caret-bottom aside-titleB_childi_one':'el-icon-caret-right aside-titleB_childi_one'" ></i>
<i class="el-icon-price-tag aside-titleB_childi_two"></i>
<span >标签管理</span>
<div style="margin-left: 40%" v-show="eidtTAGText">
<i class="el-icon-search" style="font-size: 19px;margin-left: 5px;margin-top: 7px" @click="searchBkTagCk"></i>
<i class="el-icon-folder-add" style="font-size: 19px;margin-left: 5px;margin-top: 7px" @click="addBkTagCk"></i>
</div>
</div>
<div style="display: flex;justify-items: center;align-items: center">
<el-input
v-if="!addBkTAG"
placeholder="输入书签名字"
v-model="input4"
size="mini"
style="width: 80%;margin-left: 5%"
>
<i slot="prefix" class="el-input__icon el-icon-circle-plus-outline"></i>
</el-input>
<i v-if="!addBkTAG" @click="addBkTagCk" class="el-icon-close" style="font-size: 25px;margin-left: 5px;margin-bottom: 2px"></i>
</div>
<div style="display: flex;justify-items: center;align-items: center">
<el-input
v-if="!searchBkTAG"
placeholder="搜索书签"
v-model="input4"
size="mini"
style="width: 80%;margin-left: 5%"
>
<i slot="prefix" class="el-icon-search" style="margin-left: 5px"></i>
</el-input>
<i v-if="!searchBkTAG" @click="searchBkTagCk" class="el-icon-close" style="font-size: 25px;margin-left: 5px;margin-bottom: 2px"></i>
</div>
<el-collapse-transition>
<div v-if=" tagListShow">
<!-- TAG标签 -->
<div v-if=" !(tagList == undefined ||tagList == null || tagList.length <= 0)" v-for="item in tagList" >
<div class="aside-title name transition-box" id="item.id">
<i class="el-icon-collection-tag" style="font-size: 15px"/> {{item.name}}
<!-- <el-tag type="info" size="mini">{{item.name}}</el-tag>-->
</div>
</div>
<div v-if=" !(tagList == undefined ||tagList == null || tagList.length <= 0)" class="aside-title name transition-box" >加载更多</div>
<!-- 无标签 -->
<div v-if=" tagList == undefined ||tagList == null || tagList.length <= 0" class="aside-title name transition-box" >暂无标签</div>
</div>
</el-collapse-transition>
</div>
</template>
<script>
import {listByUser,listByUserLike} from "@/api/bookmark/tag";
export default {
name: 'areaTree',
components: {},
data: function () {
return {
msg:'暂无标签',
tagList:[],
tagParams: {
pageNum: 1,
pageSize: 8
},
addBkTAG:true,//TAG
searchBkTAG:true,//TAG
tagListShow:false,//TAGlist
eidtTAGText:false,//TAG
}
},
created(){
this.listByUser();
},
methods: {
/** 查询书签 */
listByUser: function () {
listByUser(this.tagParams).then(response => {
if (response.code === 200) {
this.tagList=response.rows;
}
});
},
/**添加书签目录**/
addBkTagCk(){
this.addBkTAG = this.addBkTAG?false:true;
this.searchBkTAG = true;
this.tagListShow = true;
},
/**搜索书签目录**/
searchBkTagCk(){
this.searchBkTAG = this.searchBkTAG?false:true;
this.addBkTAG = true;
this.tagListShow = true;
},
/**搜索书签目录**/
tagListShowCk(){
this.tagListShow = this.tagListShow?false:true;
this.addBkTAG = true;
this.searchBkTAG = true;
},
}
}
</script>
<style scoped>
.name{
padding-left: 50px;
}
.aside-title:hover{
background-color: #e8e8e8;
color: #1c84c6;
}
.aside-titleB{
display: flex;
height: 32px;
align-items: center;
justify-items: center;
}
.aside-titleB:hover {
background-color: #e8e8e8;
}
/**第一个元素**/
.aside-titleB_childi_one{
margin-left: 5px;
font-size: 15px;
margin-right: 11px;
vertical-align: middle;
}
/**第二个元素**/
.aside-titleB_childi_two{
margin-left: -4px;
font-size: 20px;
margin-right: 11px;
vertical-align: middle;
}
.aside-titleB span{
font-size: 14px;
}
</style>

View File

@ -1366,7 +1366,7 @@
if (!node.isAjaxing) { if (!node.isAjaxing) {
var isParent = data.nodeIsParent(setting, node); var isParent = data.nodeIsParent(setting, node);
var icon = (isParent && node.iconOpen && node.iconClose) ? (node.open ? node.iconOpen : node.iconClose) : node[setting.data.key.icon]; var icon = (isParent && node.iconOpen && node.iconClose) ? (node.open ? node.iconOpen : node.iconClose) : node[setting.data.key.icon];
if (icon) icoStyle.push("background:url(", icon, ") 0 0 no-repeat;background-position:center;background-size:20px 20px;border-radius: 50%;"); if (icon) icoStyle.push("background:url(", icon, ") 0 0 no-repeat;background-position:center;background-size:20px 20px;");//border-radius: 50%; 目录的图标
if (setting.view.showIcon == false || !tools.apply(setting.view.showIcon, [setting.treeId, node], true)) { if (setting.view.showIcon == false || !tools.apply(setting.view.showIcon, [setting.treeId, node], true)) {
icoStyle.push("display:none;"); icoStyle.push("display:none;");
} }

View File

@ -78,6 +78,9 @@ export default {
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
/*html{*/
/* overflow: hidden;*/
/*}*/
.dashboard-editor-container { .dashboard-editor-container {
padding: 32px; padding: 32px;
background-color: rgb(240, 242, 245); background-color: rgb(240, 242, 245);

View File

@ -113,9 +113,19 @@ public class SqBookmark
/** 排序的方式 **/ /** 排序的方式 **/
@Transient @Transient
private String sort; private String sort;
/** 搜索 **/
@Transient
private String sousuo;
private List<Map<String,Object>> sqTags; private List<Map<String,Object>> sqTags;
public SqBookmark (){
}
public SqBookmark (String url,Long userid){
this.url = url;
this.userid = userid;
}
} }

View File

@ -80,4 +80,7 @@ public class SqTag
private Date createTime; private Date createTime;
public SqTag(Long userId){
this.userId = userId;
}
} }

View File

@ -25,6 +25,8 @@ import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.bookmarkhtml.Const; import com.ruoyi.common.utils.bookmarkhtml.Const;
import com.ruoyi.common.utils.bookmarkhtml.HtmlName; import com.ruoyi.common.utils.bookmarkhtml.HtmlName;
import com.ruoyi.common.utils.bookmarkhtml.ImportHtml; import com.ruoyi.common.utils.bookmarkhtml.ImportHtml;
import com.sun.org.apache.bcel.internal.generic.RETURN;
import org.jacoco.agent.rt.internal_f3994fa.core.internal.flow.IFrame;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@ -119,6 +121,12 @@ public class SqBookmarkServiceImpl implements ISqBookmarkService
@Transactional @Transactional
public int insertSqBookmark(SqBookmark sqBookmark) public int insertSqBookmark(SqBookmark sqBookmark)
{ {
//判断标签是否已经存在了 999
List<SqBookmark> list = sqBookmarkMapper.select(new SqBookmark(sqBookmark.getUrl(),sqBookmark.getUserid()));
if (!(list==null||list.isEmpty()))
return 999;
JSONArray objects = new JSONArray(); JSONArray objects = new JSONArray();
JSONObject json = null; JSONObject json = null;
//获取官网urls //获取官网urls
@ -378,7 +386,7 @@ public class SqBookmarkServiceImpl implements ISqBookmarkService
@Override @Override
public int updateBookmarkStarById(Long userId, Long bookmarkId, Integer bookmarkStr) { public int updateBookmarkStarById(Long userId, Long bookmarkId, Integer bookmarkStr) {
return sqBookmarkMapper.updateSqBookmarkByStar(bookmarkId,userId,bookmarkStr==1?1:0); return sqBookmarkMapper.updateSqBookmarkByStar(bookmarkId,userId,bookmarkStr==1?0:1);
} }
@Override @Override
@ -501,23 +509,32 @@ public class SqBookmarkServiceImpl implements ISqBookmarkService
@Override @Override
public List<SqBookmark> listByUserAndPolymerization(SqBookmark sqBookmark) { public List<SqBookmark> listByUserAndPolymerization(SqBookmark sqBookmark) {
SqBookmark searchBookmark = new SqBookmark(); SqBookmark search = new SqBookmark();
searchBookmark.setUserid(sqBookmark.getUserid()); search.setUserid(sqBookmark.getUserid());
search.setSort(sqBookmark.getSort());
search.setSousuo(sqBookmark.getSousuo());
//未删除的
search.setIdelete(Const.BKDELETE);
if(sqBookmark.getType().equals(Const.RECYCLE)){
searchBookmark.setIdelete(Const.BKNOTDELETE);//删除的 if (sqBookmark.getType()==null){
}else{ //搜索情况下走这里
searchBookmark.setIdelete(Const.BKDELETE);//未删除的 return sqBookmarkMapper.listByUserAndPolymerization(search);
} }
if(sqBookmark.getType().equals(Const.RECYCLE)){
if (sqBookmark.getType().equals(Const.NEWEST)){//最新的 search.setIdelete(Const.BKNOTDELETE);//删除的
}else if (sqBookmark.getType().equals(Const.NEWEST)){//最新的
//无处理 //无处理
}else if(sqBookmark.getType().equals(Const.ASTERISK)){ }else if(sqBookmark.getType().equals(Const.ASTERISK)){
searchBookmark.setBookmarkStar(1); search.setBookmarkStar(1);
}else if(sqBookmark.getType().equals(Const.SEEYOULATER)){//稍后看 }else if(sqBookmark.getType().equals(Const.SEEYOULATER)){//稍后看
searchBookmark.setSeeYouLater(1); search.setSeeYouLater(1);
}else {
//默认的目录Muidid
search.setMenuId(Long.valueOf(sqBookmark.getType()));
} }
return sqBookmarkMapper.listByUserAndPolymerization(searchBookmark);
return sqBookmarkMapper.listByUserAndPolymerization(search);
} }

View File

@ -187,6 +187,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="idelete != null "> and idelete = #{idelete}</if> <if test="idelete != null "> and idelete = #{idelete}</if>
<if test="bookmarkStar != null "> and bookmark_star = #{bookmarkStar}</if> <if test="bookmarkStar != null "> and bookmark_star = #{bookmarkStar}</if>
<if test="seeYouLater != null "> and see_you_later = #{seeYouLater}</if> <if test="seeYouLater != null "> and see_you_later = #{seeYouLater}</if>
<if test="(sousuo == null or sousuo == '') and menuId!=null and menuId!=''"> and menu_id = #{menuId}</if>
<if test="start != null and start != ''"> and start = #{start}</if>
<if test="sousuo != null and sousuo != ''"> and title like concat('%', #{sousuo}, '%')</if>
order by order by
<choose> <choose>
<when test="sort == 0"> <when test="sort == 0">