完成基本功能

This commit is contained in:
wxl 2024-12-25 00:05:30 +08:00
parent cb7fde76d7
commit d215cf0a81
29 changed files with 2478 additions and 7 deletions

View File

@ -14,10 +14,14 @@ import com.dd.admin.business.noteImg.domain.NoteImgDto;
import com.dd.admin.business.noteImg.domain.NoteImgVo; import com.dd.admin.business.noteImg.domain.NoteImgVo;
import com.dd.admin.business.noteImg.entity.NoteImg; import com.dd.admin.business.noteImg.entity.NoteImg;
import com.dd.admin.business.noteImg.service.NoteImgService; import com.dd.admin.business.noteImg.service.NoteImgService;
import com.dd.admin.business.upNotes.domain.UpNotesDto;
import com.dd.admin.business.upNotes.domain.UpNotesVo;
import com.dd.admin.business.upNotes.service.UpNotesService;
import com.dd.admin.common.aop.operationLog.aop.OperLog; import com.dd.admin.common.aop.operationLog.aop.OperLog;
import com.dd.admin.common.aop.operationLog.aop.OperType; import com.dd.admin.common.aop.operationLog.aop.OperType;
import com.dd.admin.common.model.result.ResultBean; import com.dd.admin.common.model.result.ResultBean;
import com.dd.admin.common.security.SecurityUtil; import com.dd.admin.common.security.SecurityUtil;
import com.dd.admin.common.security.jwt.JwtTokenUtil;
import com.dd.admin.common.utils.AddressUtils; import com.dd.admin.common.utils.AddressUtils;
import com.dd.admin.common.utils.IPUtils; import com.dd.admin.common.utils.IPUtils;
import com.dd.admin.common.utils.RandomXiaohongshuAuthorName; import com.dd.admin.common.utils.RandomXiaohongshuAuthorName;
@ -45,16 +49,85 @@ public class ApiController {
HttpServletRequest request; HttpServletRequest request;
@Autowired @Autowired
NoteImgService noteImgService; NoteImgService noteImgService;
@Autowired
UpNotesService upNotesService;
@Autowired
private JwtTokenUtil jwtTokenUtil;
@ApiOperation(value = "获取所有笔记") @ApiOperation(value = "获取所有笔记")
@ApiOperationSupport(order = 1) @ApiOperationSupport(order = 1)
@GetMapping("/api/notes") @GetMapping("/api/notes")
@OperLog(operModule = "获取所有笔记",operType = OperType.QUERY,operDesc = "获取所有笔记") @OperLog(operModule = "获取所有笔记", operType = OperType.QUERY, operDesc = "获取所有笔记")
public ResultBean<IPage<NoteVo>> page(NoteDto noteDto) { public ResultBean<IPage<NoteVo>> page(NoteDto noteDto) {
// 1. 通过noteService根据传入的NoteDto参数查询笔记的分页信息获取包含笔记数据的分页对象
IPage<NoteVo> pageInfo = noteService.selectNotePage(noteDto); IPage<NoteVo> pageInfo = noteService.selectNotePage(noteDto);
// 2. 创建一个用于存储当前用户点赞笔记信息的列表初始化为空
List<UpNotesVo> upNotesVos = new ArrayList<>();
// 3. 从请求头中获取名为"token"的token字符串用于后续解析获取用户ID
String token = request.getHeader("token");
String authorId = "";
try {
// 4. 尝试使用jwtTokenUtil工具类从获取到的token中解析出用户名这里假设用户名就是用户ID如果解析成功则赋值给authorId变量
authorId = jwtTokenUtil.getUsernameFromToken(token);
} catch (Exception e) {
// 5. 如果在解析token过程中出现异常此处捕获异常但不做任何处理authorId仍为空字符串后续可根据此情况决定是否继续相关业务逻辑
}
// 6. 判断解析出的用户ID是否不为空即是否成功获取到了用户ID
if (StringUtil.isNotEmpty(authorId)) {
// 7. 如果获取到了用户ID创建一个UpNotesDto对象用于设置查询条件
UpNotesDto upNotesDto = new UpNotesDto();
// 8. 将获取到的用户ID设置到UpNotesDto对象中作为查询当前用户点赞笔记的条件表示要查询该用户点赞的笔记
upNotesDto.setFollowId(authorId);
// 9. 通过upNotesService根据设置好的查询条件查询当前用户点赞的笔记列表并将结果赋值给upNotesVos列表
upNotesVos = upNotesService.selectUpNotesList(upNotesDto);
}
// 10. 通过upNotesService查询所有笔记的点赞数量统计信息获取一个包含各笔记点赞数量相关信息的列表
List<UpNotesVo> selectAllUpCount = upNotesService.selectAllUpCount();
// 11. 获取前面查询到的笔记分页信息中的具体笔记记录列表后续要对这些笔记记录进行相关属性的设置操作
List<NoteVo> records = pageInfo.getRecords();
// 12. 为了能在下面的lambda表达式中使用upNotesVos变量创建一个final修饰的变量来引用它因为lambda表达式中访问的外部变量需要是final或者事实上的final不可重新赋值
List<UpNotesVo> finalUpNotesVos = upNotesVos;
// 13. 同样为了在lambda表达式中使用authorId变量创建一个final修饰的变量来引用它
String finalAuthorId = authorId;
// 14. 使用Java 8的Stream API对每条笔记记录进行遍历处理
records.stream().forEach(noteVo -> {
// 15. 判断当前用户ID是否不为空即是否获取到了用户ID且有效如果为空则不进行当前用户对该笔记点赞状态的判断设置操作
if (StringUtil.isNotEmpty(finalAuthorId)) {
// 16. 在当前用户点赞笔记列表finalUpNotesVos通过Stream的filter操作筛选出与当前遍历的笔记noteVo的ID相等的点赞笔记记录然后获取第一个匹配的记录如果有的话否则返回null
UpNotesVo upNote = finalUpNotesVos.stream().filter(upNotesVo -> noteVo.getNoteId().equals(upNotesVo.getNoteId())).findFirst().orElse(null);
// 17. 如果找到了对应的点赞笔记记录即upNote不为null说明当前用户点赞了这条笔记将笔记的IsUp属性设置为true表示已点赞状态
if (upNote!= null) {
noteVo.setIsUp(Boolean.TRUE);
}
}
// 18. 在所有笔记的点赞数量统计信息列表selectAllUpCount通过Stream的filter操作筛选出与当前遍历的笔记noteVo的ID相等的记录然后获取第一个匹配的记录如果有的话否则返回null
UpNotesVo noteCount = selectAllUpCount.stream().filter(upNotesVo -> upNotesVo.getNoteId().equals(noteVo.getNoteId())).findFirst().orElse(null);
// 19. 如果找到了对应的点赞数量统计记录即noteCount不为null将笔记的UpCount属性设置为该记录中的点赞数量从而为每条笔记设置对应的点赞数量信息
if (noteCount!= null) {
noteVo.setUpCount(noteCount.getUpCount());
}
});
// 20. 将处理好的包含笔记信息已设置点赞状态和点赞数量的分页对象包装在ResultBean中返回以便前端或其他调用方获取处理后的结果数据
return ResultBean.success(pageInfo); return ResultBean.success(pageInfo);
} }
@ApiOperation(value = "获取ip地址")
@ApiOperationSupport(order = 1)
@GetMapping("/api/getIpAddress")
@OperLog(operModule = "获取ip地址",operType = OperType.QUERY,operDesc = "获取单个笔记")
public ResultBean<String> getIpAddress() {
String ipAddr = IPUtils.getIpAddr(request);
String realAddress = AddressUtils.getRealAddress(ipAddr);
return ResultBean.success(realAddress);
}
@ApiOperation(value = "获取单个笔记") @ApiOperation(value = "获取单个笔记")
@ApiOperationSupport(order = 1) @ApiOperationSupport(order = 1)
@GetMapping("/api/getNote") @GetMapping("/api/getNote")

View File

@ -2,20 +2,35 @@ package com.dd.admin.business.api;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.metadata.OrderItem;
import com.dd.admin.business.author.entity.Author; import com.dd.admin.business.author.entity.Author;
import com.dd.admin.business.author.service.AuthorService; import com.dd.admin.business.author.service.AuthorService;
import com.dd.admin.business.file.entity.File; import com.dd.admin.business.file.entity.File;
import com.dd.admin.business.file.service.FileService; import com.dd.admin.business.file.service.FileService;
import com.dd.admin.business.follow.entity.Follow;
import com.dd.admin.business.follow.service.FollowService;
import com.dd.admin.business.note.domain.NoteDto; import com.dd.admin.business.note.domain.NoteDto;
import com.dd.admin.business.note.domain.NoteVo;
import com.dd.admin.business.note.entity.Note; import com.dd.admin.business.note.entity.Note;
import com.dd.admin.business.note.service.NoteService; import com.dd.admin.business.note.service.NoteService;
import com.dd.admin.business.noteImg.entity.NoteImg; import com.dd.admin.business.noteImg.entity.NoteImg;
import com.dd.admin.business.noteImg.service.NoteImgService; import com.dd.admin.business.noteImg.service.NoteImgService;
import com.dd.admin.business.starNotes.domain.StarNotesDto;
import com.dd.admin.business.starNotes.domain.StarNotesVo;
import com.dd.admin.business.starNotes.entity.StarNotes;
import com.dd.admin.business.starNotes.service.StarNotesService;
import com.dd.admin.business.upNotes.domain.UpNotesDto;
import com.dd.admin.business.upNotes.domain.UpNotesVo;
import com.dd.admin.business.upNotes.entity.UpNotes;
import com.dd.admin.business.upNotes.service.UpNotesService;
import com.dd.admin.common.aop.operationLog.aop.OperLog; import com.dd.admin.common.aop.operationLog.aop.OperLog;
import com.dd.admin.common.aop.operationLog.aop.OperType; import com.dd.admin.common.aop.operationLog.aop.OperType;
import com.dd.admin.common.model.result.ResultBean; import com.dd.admin.common.model.result.ResultBean;
import com.dd.admin.common.utils.AddressUtils; import com.dd.admin.common.utils.AddressUtils;
import com.dd.admin.common.utils.CommonUtil;
import com.dd.admin.common.utils.IPUtils; import com.dd.admin.common.utils.IPUtils;
import com.dd.admin.common.utils.StringUtil;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@ -43,6 +58,182 @@ public class AuthApi {
NoteImgService noteImgService; NoteImgService noteImgService;
@Value("${server.port}") @Value("${server.port}")
String port; String port;
@Autowired
UpNotesService upNotesService;
@Autowired
StarNotesService starNotesService;
@Autowired
FollowService followService;
@ApiOperation(value = "获取所有笔记")
@ApiOperationSupport(order = 1)
@GetMapping("/api/auth/notes")
@OperLog(operModule = "获取所有笔记",operType = OperType.QUERY,operDesc = "获取所有笔记")
public ResultBean<IPage<NoteVo>> page(NoteDto noteDto) {
String authorId = String.valueOf(request.getAttribute("authorId"));
IPage<NoteVo> pageInfo = noteService.selectNotePage(noteDto);
List<NoteVo> records = pageInfo.getRecords();
UpNotesDto upNotesDto = new UpNotesDto();
upNotesDto.setFollowId(authorId);
List<UpNotesVo> upNotesVos = upNotesService.selectUpNotesList(upNotesDto);
List<UpNotesVo> selectAllUpCount = upNotesService.selectAllUpCount();
records.stream().forEach(noteVo->{
UpNotesVo upNote = upNotesVos.stream().filter(upNotesVo -> noteVo.getNoteId().equals(upNotesVo.getNoteId())).findFirst().orElse(null);
if(upNote!=null){
noteVo.setIsUp(Boolean.TRUE);
}
UpNotesVo noteCount = selectAllUpCount.stream().filter(upNotesVo -> upNotesVo.getNoteId().equals(noteVo.getNoteId())).findFirst().orElse(null);
if(noteCount!=null){
noteVo.setUpCount(noteCount.getUpCount());
}
});
return ResultBean.success(pageInfo);
}
@ApiOperation(value = "获取所有笔记")
@ApiOperationSupport(order = 1)
@GetMapping("/api/auth/getFollowNotes")
@OperLog(operModule = "获取所有笔记",operType = OperType.QUERY,operDesc = "获取所有笔记")
public ResultBean<IPage<NoteVo>> getFollowNotes(NoteDto noteDto) {
String followId = String.valueOf(request.getAttribute("authorId"));
List<Follow> follows = followService.selectFollowListByFollowId(followId);
IPage<NoteVo> pageInfo = new IPage<NoteVo>() {
@Override
public List<OrderItem> orders() {
return null;
}
@Override
public List<NoteVo> getRecords() {
return null;
}
@Override
public IPage<NoteVo> setRecords(List<NoteVo> records) {
return null;
}
@Override
public long getTotal() {
return 0;
}
@Override
public IPage<NoteVo> setTotal(long total) {
return null;
}
@Override
public long getSize() {
return 0;
}
@Override
public IPage<NoteVo> setSize(long size) {
return null;
}
@Override
public long getCurrent() {
return 0;
}
@Override
public IPage<NoteVo> setCurrent(long current) {
return null;
}
};
if(CollectionUtil.isNotEmpty(follows)){
String authorIds = CommonUtil.getIds(follows, "authorId");
noteDto.setAuthorIds(authorIds);
pageInfo = noteService.selectNotePage(noteDto);
List<NoteVo> records = pageInfo.getRecords();
UpNotesDto upNotesDto = new UpNotesDto();
upNotesDto.setFollowId(followId);
List<UpNotesVo> upNotesVos = upNotesService.selectUpNotesList(upNotesDto);
List<UpNotesVo> selectAllUpCount = upNotesService.selectAllUpCount();
records.stream().forEach(noteVo->{
UpNotesVo upNote = upNotesVos.stream().filter(upNotesVo -> noteVo.getNoteId().equals(upNotesVo.getNoteId())).findFirst().orElse(null);
if(upNote!=null){
noteVo.setIsUp(Boolean.TRUE);
}
UpNotesVo noteCount = selectAllUpCount.stream().filter(upNotesVo -> upNotesVo.getNoteId().equals(noteVo.getNoteId())).findFirst().orElse(null);
if(noteCount!=null){
noteVo.setUpCount(noteCount.getUpCount());
}
});
}
return ResultBean.success(pageInfo);
}
@ApiOperation(value = "获取所有点赞笔记")
@ApiOperationSupport(order = 1)
@GetMapping("/api/auth/getUpNotes")
@OperLog(operModule = "获取所有点赞笔记",operType = OperType.QUERY,operDesc = "获取所有点赞笔记")
public ResultBean<IPage<NoteVo>> getUpNotes(NoteDto noteDto) {
String authorId = String.valueOf(request.getAttribute("authorId"));
IPage<NoteVo> pageInfo = noteService.selectMineUpNotes(authorId);
List<NoteVo> records = pageInfo.getRecords();
UpNotesDto upNotesDto = new UpNotesDto();
upNotesDto.setFollowId(authorId);
List<UpNotesVo> upNotesVos = upNotesService.selectUpNotesList(upNotesDto);
List<UpNotesVo> selectAllUpCount = upNotesService.selectAllUpCount();
records.stream().forEach(noteVo->{
UpNotesVo upNote = upNotesVos.stream().filter(upNotesVo -> noteVo.getNoteId().equals(upNotesVo.getNoteId())).findFirst().orElse(null);
if(upNote!=null){
noteVo.setIsUp(Boolean.TRUE);
}
UpNotesVo noteCount = selectAllUpCount.stream().filter(upNotesVo -> upNotesVo.getNoteId().equals(noteVo.getNoteId())).findFirst().orElse(null);
if(noteCount!=null){
noteVo.setUpCount(noteCount.getUpCount());
}
});
return ResultBean.success(pageInfo);
}
@ApiOperation(value = "获取所有收藏笔记")
@ApiOperationSupport(order = 1)
@GetMapping("/api/auth/getStarNotes")
@OperLog(operModule = "获取所有收藏笔记",operType = OperType.QUERY,operDesc = "获取所有收藏笔记")
public ResultBean<IPage<NoteVo>> getStarNotes(NoteDto noteDto) {
String authorId = String.valueOf(request.getAttribute("authorId"));
IPage<NoteVo> pageInfo = noteService.selectMineStarNotes(authorId);
List<NoteVo> records = pageInfo.getRecords();
UpNotesDto upNotesDto = new UpNotesDto();
upNotesDto.setFollowId(authorId);
List<UpNotesVo> upNotesVos = upNotesService.selectUpNotesList(upNotesDto);
List<UpNotesVo> selectAllUpCount = upNotesService.selectAllUpCount();
records.stream().forEach(noteVo->{
UpNotesVo upNote = upNotesVos.stream().filter(upNotesVo -> noteVo.getNoteId().equals(upNotesVo.getNoteId())).findFirst().orElse(null);
if(upNote!=null){
noteVo.setIsUp(Boolean.TRUE);
}
UpNotesVo noteCount = selectAllUpCount.stream().filter(upNotesVo -> upNotesVo.getNoteId().equals(noteVo.getNoteId())).findFirst().orElse(null);
if(noteCount!=null){
noteVo.setUpCount(noteCount.getUpCount());
}
});
return ResultBean.success(pageInfo);
}
@ApiOperation(value = "获取博主信息") @ApiOperation(value = "获取博主信息")
@ApiOperationSupport(order = 1) @ApiOperationSupport(order = 1)
@ -55,6 +246,49 @@ public class AuthApi {
} }
@ApiOperation(value = "获取博主笔记")
@ApiOperationSupport(order = 1)
@GetMapping("/api/auth/getMineNotes")
@OperLog(operModule = "获取博主笔记",operType = OperType.QUERY,operDesc = "获取博主笔记")
public ResultBean<IPage<NoteVo>> getMineNotes(NoteDto noteDto) {
String authorId = String.valueOf(request.getAttribute("authorId"));
noteDto.setAuthorId(authorId);
IPage<NoteVo> pageInfo = noteService.selectNotePage(noteDto);
return ResultBean.success(pageInfo);
}
@ApiOperation(value = "点赞笔记")
@ApiOperationSupport(order = 1)
@PostMapping("/api/auth/upNote")
@OperLog(operModule = "点赞笔记",operType = OperType.ADD,operDesc = "点赞笔记")
public ResultBean upNote(@RequestBody NoteDto noteDto) {
String followId = String.valueOf(request.getAttribute("authorId"));
Author follow = authorService.getById(followId);
Boolean upNote = Boolean.FALSE;
//查看在不在点赞列表
UpNotes upNotes = upNotesService.selectOneByFollowId(noteDto.getNoteId(),noteDto.getAuthorId(), followId);
//不在证明是点赞
if(upNotes==null){
upNotes = new UpNotes();
upNotes.setAuthorId(noteDto.getAuthorId());
upNotes.setAuthorName(noteDto.getAuthorName());
upNotes.setFollowId(follow.getAuthorId());
upNotes.setFollowName(follow.getAuthorName());
upNotes.setNoteId(noteDto.getNoteId());
upNotes.setNoteTitle(noteDto.getNoteTitle());
upNote = Boolean.TRUE;
upNotesService.save(upNotes);
}else{
//在则表示取消赞删除数据
upNotesService.removeById(upNotes);
}
return ResultBean.success(upNote);
};
@ApiOperation(value = "创建笔记") @ApiOperation(value = "创建笔记")
@ApiOperationSupport(order = 1) @ApiOperationSupport(order = 1)
@PostMapping("/api/auth/addNote") @PostMapping("/api/auth/addNote")

View File

@ -54,6 +54,8 @@ public class NoteDto {
@ApiModelProperty(value = "作者ID") @ApiModelProperty(value = "作者ID")
private String authorId; private String authorId;
private String authorIds;
@ApiModelProperty(value = "作者头像") @ApiModelProperty(value = "作者头像")
private String authorAvatar; private String authorAvatar;

View File

@ -83,7 +83,10 @@ public class NoteVo {
private String ipRealAddress; private String ipRealAddress;
@ApiModelProperty(value = "点赞数") @ApiModelProperty(value = "点赞数")
private Long upCount; private Integer upCount = 0;
@ApiModelProperty(value = "被当前达人点赞")
private Boolean isUp = Boolean.FALSE;
@ApiModelProperty(value = "收藏数") @ApiModelProperty(value = "收藏数")
private Long starCount; private Long starCount;

View File

@ -1,6 +1,7 @@
package com.dd.admin.business.note.mapper; package com.dd.admin.business.note.mapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.dd.admin.business.noteImg.domain.NoteImgVo;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@ -25,4 +26,7 @@ public interface NoteMapper extends BaseMapper<Note> {
IPage<NoteVo> selectNotePage(Page<NoteVo> page, @Param("noteDto") NoteDto noteDto); IPage<NoteVo> selectNotePage(Page<NoteVo> page, @Param("noteDto") NoteDto noteDto);
List<NoteVo> selectNoteList(@Param("noteDto") NoteDto noteDto); List<NoteVo> selectNoteList(@Param("noteDto") NoteDto noteDto);
IPage<NoteVo> selectMineUpNotes(Page<NoteVo> page, @Param("followId")String followId);
IPage<NoteVo> selectMineStarNotes(Page<NoteVo> page, @Param("followId")String followId);
} }

View File

@ -32,7 +32,16 @@
<select id="selectNotePage" resultType="com.dd.admin.business.note.domain.NoteVo"> <select id="selectNotePage" resultType="com.dd.admin.business.note.domain.NoteVo">
select select
*,CREATE_TIME AS createTimeStr *,CREATE_TIME AS createTimeStr
from business_note where 1 = 1 from business_note where deleted = 0
<if test="noteDto.authorId != null and noteDto.authorId != ''">
and AUTHOR_ID = #{noteDto.authorId}
</if>
<if test="noteDto.authorIds != null and noteDto.authorId != ''">
and AUTHOR_ID in ${noteDto.authorIds}
</if>
<if test="noteDto.ipRealAddress != null and noteDto.ipRealAddress != ''">
and IP_REAL_ADDRESS = #{noteDto.ipRealAddress}
</if>
order by CREATE_TIME desc order by CREATE_TIME desc
</select> </select>
@ -41,4 +50,15 @@
* *
from business_note where 1 = 1 from business_note where 1 = 1
</select> </select>
<select id="selectMineUpNotes" resultType="com.dd.admin.business.note.domain.NoteVo">
select * from business_note a left join business_up_notes b on a.note_id = b.note_id
where b.follow_id = #{followId}
order by b.create_time desc
</select>
<select id="selectMineStarNotes" resultType="com.dd.admin.business.note.domain.NoteVo">
select * from business_note a left join business_star_notes b on a.note_id = b.note_id
where b.follow_id = #{followId}
order by b.create_time desc
</select>
</mapper> </mapper>

View File

@ -1,10 +1,13 @@
package com.dd.admin.business.note.service; package com.dd.admin.business.note.service;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.dd.admin.business.note.entity.Note; import com.dd.admin.business.note.entity.Note;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.dd.admin.business.note.domain.NoteVo; import com.dd.admin.business.note.domain.NoteVo;
import com.dd.admin.business.note.domain.NoteDto; import com.dd.admin.business.note.domain.NoteDto;
import org.apache.ibatis.annotations.Param;
import java.util.List; import java.util.List;
/** /**
@ -23,4 +26,9 @@ public interface NoteService extends IService<Note> {
//笔记表-列表 //笔记表-列表
List<NoteVo> selectNoteList(NoteDto noteDto); List<NoteVo> selectNoteList(NoteDto noteDto);
IPage<NoteVo> selectMineUpNotes( String followId);
IPage<NoteVo> selectMineStarNotes( String followId);
} }

View File

@ -33,4 +33,16 @@ public class NoteServiceImpl extends ServiceImpl<NoteMapper, Note> implements No
public List<NoteVo> selectNoteList(NoteDto noteDto) { public List<NoteVo> selectNoteList(NoteDto noteDto) {
return baseMapper.selectNoteList(noteDto); return baseMapper.selectNoteList(noteDto);
} }
@Override
public IPage<NoteVo> selectMineUpNotes(String followId) {
Page page = PageFactory.defaultPage();
return baseMapper.selectMineUpNotes(page,followId);
}
@Override
public IPage<NoteVo> selectMineStarNotes(String followId) {
Page page = PageFactory.defaultPage();
return baseMapper.selectMineStarNotes(page,followId);
}
} }

View File

@ -8,6 +8,8 @@ import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.FieldFill; import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableField;
import java.io.Serializable; import java.io.Serializable;
import com.dd.admin.business.note.domain.NoteVo;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
@ -27,7 +29,7 @@ public class NoteImgVo {
@ApiModelProperty(value = "关联id") @ApiModelProperty(value = "关联id")
private String noteImgId; private NoteVo noteImgId;
@ApiModelProperty(value = "图片上传的文件id") @ApiModelProperty(value = "图片上传的文件id")
private String imgId; private String imgId;

View File

@ -25,4 +25,5 @@ public interface NoteImgMapper extends BaseMapper<NoteImg> {
IPage<NoteImgVo> selectNoteImgPage(Page<NoteImgVo> page, @Param("noteImgDto") NoteImgDto noteImgDto); IPage<NoteImgVo> selectNoteImgPage(Page<NoteImgVo> page, @Param("noteImgDto") NoteImgDto noteImgDto);
List<NoteImgVo> selectNoteImgList(@Param("noteImgDto") NoteImgDto noteImgDto); List<NoteImgVo> selectNoteImgList(@Param("noteImgDto") NoteImgDto noteImgDto);
} }

View File

@ -34,4 +34,5 @@
</if> </if>
order by IMG_SORT asc order by IMG_SORT asc
</select> </select>
</mapper> </mapper>

View File

@ -43,6 +43,8 @@ public class ApiInterceptor implements HandlerInterceptor {
if (StrUtil.isBlank(token)) { if (StrUtil.isBlank(token)) {
throw new ApiException("请登录后访问"); throw new ApiException("请登录后访问");
} }
//解析token //解析token
System.out.println(token); System.out.println(token);
String authorId = jwtTokenUtil.getUsernameFromToken(token); String authorId = jwtTokenUtil.getUsernameFromToken(token);

View File

@ -24,10 +24,11 @@ public class AddressUtils {
String rspStr = RegionUtil.getRegion(ip); String rspStr = RegionUtil.getRegion(ip);
if (StringUtils.isNotEmpty(rspStr)) { if (StringUtils.isNotEmpty(rspStr)) {
String[] obj = rspStr.split("\\|"); String[] obj = rspStr.split("\\|");
String region = obj[2]; // String region = obj[2];
String city = obj[3]; String city = obj[3];
return String.format("%s%s", region, city); // return String.format("%s%s", region, city);
return String.format("%s", city);
} }
} catch (Exception e) { } catch (Exception e) {
log.error("获取地理位置异常 {}", e.toString()); log.error("获取地理位置异常 {}", e.toString());

View File

@ -0,0 +1,41 @@
import request from '@/utils/request'
export function getFollowPage(params) {
return request({
url: '/admin/follow/page',
method: 'get',
params
})
}
export function getFollowList(params) {
return request({
url: '/admin/follow/list',
method: 'get',
params
})
}
export function addFollow(data) {
return request({
url: '/admin/follow/add',
method: 'post',
data: data
})
}
export function editFollow(data) {
return request({
url: '/admin/follow/update',
method: 'post',
data: data
})
}
export function deleteFollow(followId) {
return request({
url: '/admin/follow/delete/' + followId,
method: 'get'
})
}

View File

@ -0,0 +1,41 @@
import request from '@/utils/request'
export function getNoteImgPage(params) {
return request({
url: '/admin/noteImg/page',
method: 'get',
params
})
}
export function getNoteImgList(params) {
return request({
url: '/admin/noteImg/list',
method: 'get',
params
})
}
export function addNoteImg(data) {
return request({
url: '/admin/noteImg/add',
method: 'post',
data: data
})
}
export function editNoteImg(data) {
return request({
url: '/admin/noteImg/update',
method: 'post',
data: data
})
}
export function deleteNoteImg(noteImgId) {
return request({
url: '/admin/noteImg/delete/' + noteImgId,
method: 'get'
})
}

View File

@ -0,0 +1,41 @@
import request from '@/utils/request'
export function getStarNotesPage(params) {
return request({
url: '/admin/starNotes/page',
method: 'get',
params
})
}
export function getStarNotesList(params) {
return request({
url: '/admin/starNotes/list',
method: 'get',
params
})
}
export function addStarNotes(data) {
return request({
url: '/admin/starNotes/add',
method: 'post',
data: data
})
}
export function editStarNotes(data) {
return request({
url: '/admin/starNotes/update',
method: 'post',
data: data
})
}
export function deleteStarNotes(starNotesId) {
return request({
url: '/admin/starNotes/delete/' + starNotesId,
method: 'get'
})
}

View File

@ -0,0 +1,41 @@
import request from '@/utils/request'
export function getUpNotesPage(params) {
return request({
url: '/admin/upNotes/page',
method: 'get',
params
})
}
export function getUpNotesList(params) {
return request({
url: '/admin/upNotes/list',
method: 'get',
params
})
}
export function addUpNotes(data) {
return request({
url: '/admin/upNotes/add',
method: 'post',
data: data
})
}
export function editUpNotes(data) {
return request({
url: '/admin/upNotes/update',
method: 'post',
data: data
})
}
export function deleteUpNotes(upNotesId) {
return request({
url: '/admin/upNotes/delete/' + upNotesId,
method: 'get'
})
}

View File

@ -0,0 +1,106 @@
<template>
<div>
<el-dialog
:close-on-click-modal="false"
top="8vh"
width="40%"
:visible.sync="dialogVisible"
center
@close="handleCancel"
>
<div class="el-dialog-div">
<el-form
:rules="rules"
ref="dataForm"
:model="temp"
label-position="right"
label-width="120px"
style="height: 90%;"
>
<el-form-item label="" prop="id" class="is-required">
<el-input v-model="temp.id" placeholder="" />
</el-form-item>
<el-form-item label="被关注id" prop="authorId" class="is-required">
<el-input v-model="temp.authorId" placeholder="被关注id" />
</el-form-item>
<el-form-item label="被关注名字" prop="authorName" class="is-required">
<el-input v-model="temp.authorName" placeholder="被关注名字" />
</el-form-item>
<el-form-item label="关注者" prop="followId" class="is-required">
<el-input v-model="temp.followId" placeholder="关注者" />
</el-form-item>
<el-form-item label="关注者名字" prop="followName" class="is-required">
<el-input v-model="temp.followName" placeholder="关注者名字" />
</el-form-item>
<el-form-item label="创建时间" prop="createTime" class="is-required">
<el-input v-model="temp.createTime" placeholder="创建时间" />
</el-form-item>
</el-form>
</div>
<div slot="footer" class="dialog-footer">
<el-button @click="handleCancel"> </el-button>
<el-button type="primary" @click="submit"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import {addFollow} from "@/api/business/follow/follow";
import {setRequiredFields} from "@/utils";
const requiredFields = []
export default {
name: "addForm",
data() {
return {
rules: setRequiredFields(requiredFields),
dialogVisible: false,
temp: {
id:'',
authorId:'',
authorName:'',
followId:'',
followName:'',
createTime:'',
},
}
},
methods: {
open() {
this.dialogVisible = true
},
submit() {
this.$refs['dataForm'].validate((valid) => {
if (valid) {
addFollow(this.temp).then(response =>{
this.handleCancel()
this.$emit('ok', response.data)
})
} else {
console.log('error submit!!');
return false;
}
});
},
handleCancel() {
//
this.temp = this.$options.data().temp
this.dialogVisible = false
this.$refs['dataForm'].resetFields();
}
},
}
</script>
<style scoped>
</style>

View File

@ -0,0 +1,107 @@
<template>
<div>
<el-dialog
:close-on-click-modal="false"
top="8vh"
width="40%"
:visible.sync="dialogVisible"
center
@close="handleCancel"
>
<div class="el-dialog-div">
<el-form
:rules="rules"
ref="dataForm"
:model="temp"
label-position="right"
label-width="120px"
style="height: 90%;"
>
<el-form-item label="" prop="id" class="is-required">
<el-input v-model="temp.id" placeholder="" />
</el-form-item>
<el-form-item label="被关注id" prop="authorId" class="is-required">
<el-input v-model="temp.authorId" placeholder="被关注id" />
</el-form-item>
<el-form-item label="被关注名字" prop="authorName" class="is-required">
<el-input v-model="temp.authorName" placeholder="被关注名字" />
</el-form-item>
<el-form-item label="关注者" prop="followId" class="is-required">
<el-input v-model="temp.followId" placeholder="关注者" />
</el-form-item>
<el-form-item label="关注者名字" prop="followName" class="is-required">
<el-input v-model="temp.followName" placeholder="关注者名字" />
</el-form-item>
<el-form-item label="创建时间" prop="createTime" class="is-required">
<el-input v-model="temp.createTime" placeholder="创建时间" />
</el-form-item>
</el-form>
</div>
<div slot="footer" class="dialog-footer">
<el-button @click="handleCancel"> </el-button>
<el-button type="primary" @click="submit"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { editFollow } from "@/api/business/follow/follow";
import {setRequiredFields} from "@/utils";
const requiredFields = []
export default {
name: "editForm",
data() {
return {
rules: setRequiredFields(requiredFields),
dialogVisible: false,
temp: {
id:'',
authorId:'',
authorName:'',
followId:'',
followName:'',
createTime:'',
},
}
},
methods: {
open(row) {
this.temp = this.$options.data().temp
this.temp = row
this.dialogVisible = true
},
submit() {
this.$refs['dataForm'].validate((valid) => {
if (valid) {
editFollow(this.temp).then(response => {
this.handleCancel()
this.$emit('ok', response.data)
})
} else {
console.log('error submit!!');
return false;
}
});
},
handleCancel() {
//
this.temp = this.$options.data().temp
this.dialogVisible = false
this.$refs['dataForm'].resetFields()
}
},
}
</script>
<style scoped>
</style>

View File

@ -0,0 +1,243 @@
<template>
<div class="app-container">
<div class="filter-container">
<el-input
v-model="listQuery.keyword"
size="small"
placeholder="请输入关键词"
clearable
class="filter-item"
style="width: 200px;margin-left: 10px;"
/>
<el-button-group style="margin-left: 10px;">
<el-button
size="small"
class="filter-item"
type="primary"
icon="el-icon-search"
@click="search"
>
搜索
</el-button>
<el-button
size="small"
class="filter-item"
type="primary"
icon="el-icon-refresh"
@click="refresh"
>
重置
</el-button>
</el-button-group>
<el-button
size="small"
class="filter-item"
type="primary"
icon="el-icon-plus"
style="margin-left: 10px;"
@click="add"
>
新增
</el-button>
</div>
<el-table
v-loading="listLoading"
:data="list"
element-loading-text="Loading"
border
fit
height="100%"
class="table-container"
highlight-current-row
>
<el-table-column
label="序号"
width="150"
align="center"
>
<template slot-scope="scope">
{{ scope.$index+1 }}
</template>
</el-table-column>
<el-table-column
label=""
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.id }}
</template>
</el-table-column>
<el-table-column
label="被关注id"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.authorId }}
</template>
</el-table-column>
<el-table-column
label="被关注名字"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.authorName }}
</template>
</el-table-column>
<el-table-column
label="关注者"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.followId }}
</template>
</el-table-column>
<el-table-column
label="关注者名字"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.followName }}
</template>
</el-table-column>
<el-table-column
label="创建时间"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.createTime }}
</template>
</el-table-column>
<el-table-column
fixed="right"
label="操作"
width="200"
align="center"
>
<template slot-scope="scope">
<el-button-group>
<el-button
type="primary"
icon="el-icon-edit"
size="mini"
@click="edit(scope)"
>
修改
</el-button>
<el-button
type="danger"
icon="el-icon-delete"
size="mini"
@click="del(scope)"
>
删除
</el-button>
</el-button-group>
</template>
</el-table-column>
</el-table>
<pagination
:total="total"
:page.sync="listQuery.page"
:limit.sync="listQuery.limit"
@pagination="fetchData"
/>
<add-form ref="addForm" @ok="addOk" />
<edit-form ref="editForm" @ok="editOk" />
</div>
</template>
<script>
import {getFollowPage,deleteFollow} from "@/api/business/follow/follow";
import {deepClone,success} from "@/utils";
import confirm from "@/utils/confirm";
import Pagination from '@/components/Pagination'
import addForm from "@/views/business/follow/addFollow";
import editForm from "@/views/business/follow/editFollow";
export default {
name: 'follow',
components: {addForm,editForm,Pagination},
data() {
return {
total: 0,
list: [],
listLoading: true,
listQuery: {
page: 1,
limit: 50,
keyword: ''
},
temp: {},
}
},
created() {
this.fetchData()
},
methods: {
search() {
this.fetchData()
},
refresh() {
this.listQuery = this.$options.data().listQuery
this.fetchData()
},
fetchData() {
this.listLoading = true
getFollowPage(this.listQuery).then(response => {
const { records, total } = response.data
this.list = records
this.total = total
this.listLoading = false
})
},
add(){
this.$refs.addForm.open()
},
addOk(){
this.fetchData()
},
edit(scope) {
const temp = deepClone(scope.row)
this.$refs.editForm.open(temp)
},
editOk(){
this.fetchData()
},
del(scope) {
confirm("确定要删除吗?").then(res=>{
if(res){
deleteFollow(scope.row.followId).then(response => {
console.log(response)
success('删除成功')
this.fetchData()
})
}
})
},
}
}
</script>
<style scoped>
</style>

View File

@ -0,0 +1,116 @@
<template>
<div>
<el-dialog
:close-on-click-modal="false"
top="8vh"
width="40%"
:visible.sync="dialogVisible"
center
@close="handleCancel"
>
<div class="el-dialog-div">
<el-form
:rules="rules"
ref="dataForm"
:model="temp"
label-position="right"
label-width="120px"
style="height: 90%;"
>
<el-form-item label="关联id" prop="noteImgId" class="is-required">
<el-input v-model="temp.noteImgId" placeholder="关联id" />
</el-form-item>
<el-form-item label="图片上传的文件id" prop="imgId" class="is-required">
<el-input v-model="temp.imgId" placeholder="图片上传的文件id" />
</el-form-item>
<el-form-item label="相应的笔记id" prop="noteId" class="is-required">
<el-input v-model="temp.noteId" placeholder="相应的笔记id" />
</el-form-item>
<el-form-item label="图片排序" prop="imgSort" class="is-required">
<el-input v-model="temp.imgSort" placeholder="图片排序" />
</el-form-item>
<el-form-item label="作者ID" prop="authorId" class="is-required">
<el-input v-model="temp.authorId" placeholder="作者ID" />
</el-form-item>
<el-form-item label="创建时间" prop="createTime" class="is-required">
<el-input v-model="temp.createTime" placeholder="创建时间" />
</el-form-item>
<el-form-item label="修改时间" prop="updateTime" class="is-required">
<el-input v-model="temp.updateTime" placeholder="修改时间" />
</el-form-item>
<el-form-item label="图片地址" prop="imgUrl" class="is-required">
<el-input v-model="temp.imgUrl" placeholder="图片地址" />
</el-form-item>
</el-form>
</div>
<div slot="footer" class="dialog-footer">
<el-button @click="handleCancel"> </el-button>
<el-button type="primary" @click="submit"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import {addNoteImg} from "@/api/business/noteImg/noteImg";
import {setRequiredFields} from "@/utils";
const requiredFields = []
export default {
name: "addForm",
data() {
return {
rules: setRequiredFields(requiredFields),
dialogVisible: false,
temp: {
noteImgId:'',
imgId:'',
noteId:'',
imgSort:'',
authorId:'',
createTime:'',
updateTime:'',
imgUrl:'',
},
}
},
methods: {
open() {
this.dialogVisible = true
},
submit() {
this.$refs['dataForm'].validate((valid) => {
if (valid) {
addNoteImg(this.temp).then(response =>{
this.handleCancel()
this.$emit('ok', response.data)
})
} else {
console.log('error submit!!');
return false;
}
});
},
handleCancel() {
//
this.temp = this.$options.data().temp
this.dialogVisible = false
this.$refs['dataForm'].resetFields();
}
},
}
</script>
<style scoped>
</style>

View File

@ -0,0 +1,117 @@
<template>
<div>
<el-dialog
:close-on-click-modal="false"
top="8vh"
width="40%"
:visible.sync="dialogVisible"
center
@close="handleCancel"
>
<div class="el-dialog-div">
<el-form
:rules="rules"
ref="dataForm"
:model="temp"
label-position="right"
label-width="120px"
style="height: 90%;"
>
<el-form-item label="关联id" prop="noteImgId" class="is-required">
<el-input v-model="temp.noteImgId" placeholder="关联id" />
</el-form-item>
<el-form-item label="图片上传的文件id" prop="imgId" class="is-required">
<el-input v-model="temp.imgId" placeholder="图片上传的文件id" />
</el-form-item>
<el-form-item label="相应的笔记id" prop="noteId" class="is-required">
<el-input v-model="temp.noteId" placeholder="相应的笔记id" />
</el-form-item>
<el-form-item label="图片排序" prop="imgSort" class="is-required">
<el-input v-model="temp.imgSort" placeholder="图片排序" />
</el-form-item>
<el-form-item label="作者ID" prop="authorId" class="is-required">
<el-input v-model="temp.authorId" placeholder="作者ID" />
</el-form-item>
<el-form-item label="创建时间" prop="createTime" class="is-required">
<el-input v-model="temp.createTime" placeholder="创建时间" />
</el-form-item>
<el-form-item label="修改时间" prop="updateTime" class="is-required">
<el-input v-model="temp.updateTime" placeholder="修改时间" />
</el-form-item>
<el-form-item label="图片地址" prop="imgUrl" class="is-required">
<el-input v-model="temp.imgUrl" placeholder="图片地址" />
</el-form-item>
</el-form>
</div>
<div slot="footer" class="dialog-footer">
<el-button @click="handleCancel"> </el-button>
<el-button type="primary" @click="submit"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { editNoteImg } from "@/api/business/noteImg/noteImg";
import {setRequiredFields} from "@/utils";
const requiredFields = []
export default {
name: "editForm",
data() {
return {
rules: setRequiredFields(requiredFields),
dialogVisible: false,
temp: {
noteImgId:'',
imgId:'',
noteId:'',
imgSort:'',
authorId:'',
createTime:'',
updateTime:'',
imgUrl:'',
},
}
},
methods: {
open(row) {
this.temp = this.$options.data().temp
this.temp = row
this.dialogVisible = true
},
submit() {
this.$refs['dataForm'].validate((valid) => {
if (valid) {
editNoteImg(this.temp).then(response => {
this.handleCancel()
this.$emit('ok', response.data)
})
} else {
console.log('error submit!!');
return false;
}
});
},
handleCancel() {
//
this.temp = this.$options.data().temp
this.dialogVisible = false
this.$refs['dataForm'].resetFields()
}
},
}
</script>
<style scoped>
</style>

View File

@ -0,0 +1,263 @@
<template>
<div class="app-container">
<div class="filter-container">
<el-input
v-model="listQuery.keyword"
size="small"
placeholder="请输入关键词"
clearable
class="filter-item"
style="width: 200px;margin-left: 10px;"
/>
<el-button-group style="margin-left: 10px;">
<el-button
size="small"
class="filter-item"
type="primary"
icon="el-icon-search"
@click="search"
>
搜索
</el-button>
<el-button
size="small"
class="filter-item"
type="primary"
icon="el-icon-refresh"
@click="refresh"
>
重置
</el-button>
</el-button-group>
<el-button
size="small"
class="filter-item"
type="primary"
icon="el-icon-plus"
style="margin-left: 10px;"
@click="add"
>
新增
</el-button>
</div>
<el-table
v-loading="listLoading"
:data="list"
element-loading-text="Loading"
border
fit
height="100%"
class="table-container"
highlight-current-row
>
<el-table-column
label="序号"
width="150"
align="center"
>
<template slot-scope="scope">
{{ scope.$index+1 }}
</template>
</el-table-column>
<el-table-column
label="关联id"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.noteImgId }}
</template>
</el-table-column>
<el-table-column
label="图片上传的文件id"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.imgId }}
</template>
</el-table-column>
<el-table-column
label="相应的笔记id"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.noteId }}
</template>
</el-table-column>
<el-table-column
label="图片排序"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.imgSort }}
</template>
</el-table-column>
<el-table-column
label="作者ID"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.authorId }}
</template>
</el-table-column>
<el-table-column
label="创建时间"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.createTime }}
</template>
</el-table-column>
<el-table-column
label="修改时间"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.updateTime }}
</template>
</el-table-column>
<el-table-column
label="图片地址"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.imgUrl }}
</template>
</el-table-column>
<el-table-column
fixed="right"
label="操作"
width="200"
align="center"
>
<template slot-scope="scope">
<el-button-group>
<el-button
type="primary"
icon="el-icon-edit"
size="mini"
@click="edit(scope)"
>
修改
</el-button>
<el-button
type="danger"
icon="el-icon-delete"
size="mini"
@click="del(scope)"
>
删除
</el-button>
</el-button-group>
</template>
</el-table-column>
</el-table>
<pagination
:total="total"
:page.sync="listQuery.page"
:limit.sync="listQuery.limit"
@pagination="fetchData"
/>
<add-form ref="addForm" @ok="addOk" />
<edit-form ref="editForm" @ok="editOk" />
</div>
</template>
<script>
import {getNoteImgPage,deleteNoteImg} from "@/api/business/noteImg/noteImg";
import {deepClone,success} from "@/utils";
import confirm from "@/utils/confirm";
import Pagination from '@/components/Pagination'
import addForm from "@/views/business/noteImg/addNoteImg";
import editForm from "@/views/business/noteImg/editNoteImg";
export default {
name: 'noteImg',
components: {addForm,editForm,Pagination},
data() {
return {
total: 0,
list: [],
listLoading: true,
listQuery: {
page: 1,
limit: 50,
keyword: ''
},
temp: {},
}
},
created() {
this.fetchData()
},
methods: {
search() {
this.fetchData()
},
refresh() {
this.listQuery = this.$options.data().listQuery
this.fetchData()
},
fetchData() {
this.listLoading = true
getNoteImgPage(this.listQuery).then(response => {
const { records, total } = response.data
this.list = records
this.total = total
this.listLoading = false
})
},
add(){
this.$refs.addForm.open()
},
addOk(){
this.fetchData()
},
edit(scope) {
const temp = deepClone(scope.row)
this.$refs.editForm.open(temp)
},
editOk(){
this.fetchData()
},
del(scope) {
confirm("确定要删除吗?").then(res=>{
if(res){
deleteNoteImg(scope.row.noteImgId).then(response => {
console.log(response)
success('删除成功')
this.fetchData()
})
}
})
},
}
}
</script>
<style scoped>
</style>

View File

@ -0,0 +1,116 @@
<template>
<div>
<el-dialog
:close-on-click-modal="false"
top="8vh"
width="40%"
:visible.sync="dialogVisible"
center
@close="handleCancel"
>
<div class="el-dialog-div">
<el-form
:rules="rules"
ref="dataForm"
:model="temp"
label-position="right"
label-width="120px"
style="height: 90%;"
>
<el-form-item label="" prop="starNoteId" class="is-required">
<el-input v-model="temp.starNoteId" placeholder="" />
</el-form-item>
<el-form-item label="" prop="noteId" class="is-required">
<el-input v-model="temp.noteId" placeholder="" />
</el-form-item>
<el-form-item label="" prop="noteTitle" class="is-required">
<el-input v-model="temp.noteTitle" placeholder="" />
</el-form-item>
<el-form-item label="被关注id" prop="authorId" class="is-required">
<el-input v-model="temp.authorId" placeholder="被关注id" />
</el-form-item>
<el-form-item label="被关注名字" prop="authorName" class="is-required">
<el-input v-model="temp.authorName" placeholder="被关注名字" />
</el-form-item>
<el-form-item label="关注者" prop="followId" class="is-required">
<el-input v-model="temp.followId" placeholder="关注者" />
</el-form-item>
<el-form-item label="关注者名字" prop="followName" class="is-required">
<el-input v-model="temp.followName" placeholder="关注者名字" />
</el-form-item>
<el-form-item label="创建时间" prop="createTime" class="is-required">
<el-input v-model="temp.createTime" placeholder="创建时间" />
</el-form-item>
</el-form>
</div>
<div slot="footer" class="dialog-footer">
<el-button @click="handleCancel"> </el-button>
<el-button type="primary" @click="submit"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import {addStarNotes} from "@/api/business/starNotes/starNotes";
import {setRequiredFields} from "@/utils";
const requiredFields = []
export default {
name: "addForm",
data() {
return {
rules: setRequiredFields(requiredFields),
dialogVisible: false,
temp: {
starNoteId:'',
noteId:'',
noteTitle:'',
authorId:'',
authorName:'',
followId:'',
followName:'',
createTime:'',
},
}
},
methods: {
open() {
this.dialogVisible = true
},
submit() {
this.$refs['dataForm'].validate((valid) => {
if (valid) {
addStarNotes(this.temp).then(response =>{
this.handleCancel()
this.$emit('ok', response.data)
})
} else {
console.log('error submit!!');
return false;
}
});
},
handleCancel() {
//
this.temp = this.$options.data().temp
this.dialogVisible = false
this.$refs['dataForm'].resetFields();
}
},
}
</script>
<style scoped>
</style>

View File

@ -0,0 +1,117 @@
<template>
<div>
<el-dialog
:close-on-click-modal="false"
top="8vh"
width="40%"
:visible.sync="dialogVisible"
center
@close="handleCancel"
>
<div class="el-dialog-div">
<el-form
:rules="rules"
ref="dataForm"
:model="temp"
label-position="right"
label-width="120px"
style="height: 90%;"
>
<el-form-item label="" prop="starNoteId" class="is-required">
<el-input v-model="temp.starNoteId" placeholder="" />
</el-form-item>
<el-form-item label="" prop="noteId" class="is-required">
<el-input v-model="temp.noteId" placeholder="" />
</el-form-item>
<el-form-item label="" prop="noteTitle" class="is-required">
<el-input v-model="temp.noteTitle" placeholder="" />
</el-form-item>
<el-form-item label="被关注id" prop="authorId" class="is-required">
<el-input v-model="temp.authorId" placeholder="被关注id" />
</el-form-item>
<el-form-item label="被关注名字" prop="authorName" class="is-required">
<el-input v-model="temp.authorName" placeholder="被关注名字" />
</el-form-item>
<el-form-item label="关注者" prop="followId" class="is-required">
<el-input v-model="temp.followId" placeholder="关注者" />
</el-form-item>
<el-form-item label="关注者名字" prop="followName" class="is-required">
<el-input v-model="temp.followName" placeholder="关注者名字" />
</el-form-item>
<el-form-item label="创建时间" prop="createTime" class="is-required">
<el-input v-model="temp.createTime" placeholder="创建时间" />
</el-form-item>
</el-form>
</div>
<div slot="footer" class="dialog-footer">
<el-button @click="handleCancel"> </el-button>
<el-button type="primary" @click="submit"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { editStarNotes } from "@/api/business/starNotes/starNotes";
import {setRequiredFields} from "@/utils";
const requiredFields = []
export default {
name: "editForm",
data() {
return {
rules: setRequiredFields(requiredFields),
dialogVisible: false,
temp: {
starNoteId:'',
noteId:'',
noteTitle:'',
authorId:'',
authorName:'',
followId:'',
followName:'',
createTime:'',
},
}
},
methods: {
open(row) {
this.temp = this.$options.data().temp
this.temp = row
this.dialogVisible = true
},
submit() {
this.$refs['dataForm'].validate((valid) => {
if (valid) {
editStarNotes(this.temp).then(response => {
this.handleCancel()
this.$emit('ok', response.data)
})
} else {
console.log('error submit!!');
return false;
}
});
},
handleCancel() {
//
this.temp = this.$options.data().temp
this.dialogVisible = false
this.$refs['dataForm'].resetFields()
}
},
}
</script>
<style scoped>
</style>

View File

@ -0,0 +1,263 @@
<template>
<div class="app-container">
<div class="filter-container">
<el-input
v-model="listQuery.keyword"
size="small"
placeholder="请输入关键词"
clearable
class="filter-item"
style="width: 200px;margin-left: 10px;"
/>
<el-button-group style="margin-left: 10px;">
<el-button
size="small"
class="filter-item"
type="primary"
icon="el-icon-search"
@click="search"
>
搜索
</el-button>
<el-button
size="small"
class="filter-item"
type="primary"
icon="el-icon-refresh"
@click="refresh"
>
重置
</el-button>
</el-button-group>
<el-button
size="small"
class="filter-item"
type="primary"
icon="el-icon-plus"
style="margin-left: 10px;"
@click="add"
>
新增
</el-button>
</div>
<el-table
v-loading="listLoading"
:data="list"
element-loading-text="Loading"
border
fit
height="100%"
class="table-container"
highlight-current-row
>
<el-table-column
label="序号"
width="150"
align="center"
>
<template slot-scope="scope">
{{ scope.$index+1 }}
</template>
</el-table-column>
<el-table-column
label=""
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.starNoteId }}
</template>
</el-table-column>
<el-table-column
label=""
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.noteId }}
</template>
</el-table-column>
<el-table-column
label=""
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.noteTitle }}
</template>
</el-table-column>
<el-table-column
label="被关注id"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.authorId }}
</template>
</el-table-column>
<el-table-column
label="被关注名字"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.authorName }}
</template>
</el-table-column>
<el-table-column
label="关注者"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.followId }}
</template>
</el-table-column>
<el-table-column
label="关注者名字"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.followName }}
</template>
</el-table-column>
<el-table-column
label="创建时间"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.createTime }}
</template>
</el-table-column>
<el-table-column
fixed="right"
label="操作"
width="200"
align="center"
>
<template slot-scope="scope">
<el-button-group>
<el-button
type="primary"
icon="el-icon-edit"
size="mini"
@click="edit(scope)"
>
修改
</el-button>
<el-button
type="danger"
icon="el-icon-delete"
size="mini"
@click="del(scope)"
>
删除
</el-button>
</el-button-group>
</template>
</el-table-column>
</el-table>
<pagination
:total="total"
:page.sync="listQuery.page"
:limit.sync="listQuery.limit"
@pagination="fetchData"
/>
<add-form ref="addForm" @ok="addOk" />
<edit-form ref="editForm" @ok="editOk" />
</div>
</template>
<script>
import {getStarNotesPage,deleteStarNotes} from "@/api/business/starNotes/starNotes";
import {deepClone,success} from "@/utils";
import confirm from "@/utils/confirm";
import Pagination from '@/components/Pagination'
import addForm from "@/views/business/starNotes/addStarNotes";
import editForm from "@/views/business/starNotes/editStarNotes";
export default {
name: 'starNotes',
components: {addForm,editForm,Pagination},
data() {
return {
total: 0,
list: [],
listLoading: true,
listQuery: {
page: 1,
limit: 50,
keyword: ''
},
temp: {},
}
},
created() {
this.fetchData()
},
methods: {
search() {
this.fetchData()
},
refresh() {
this.listQuery = this.$options.data().listQuery
this.fetchData()
},
fetchData() {
this.listLoading = true
getStarNotesPage(this.listQuery).then(response => {
const { records, total } = response.data
this.list = records
this.total = total
this.listLoading = false
})
},
add(){
this.$refs.addForm.open()
},
addOk(){
this.fetchData()
},
edit(scope) {
const temp = deepClone(scope.row)
this.$refs.editForm.open(temp)
},
editOk(){
this.fetchData()
},
del(scope) {
confirm("确定要删除吗?").then(res=>{
if(res){
deleteStarNotes(scope.row.starNotesId).then(response => {
console.log(response)
success('删除成功')
this.fetchData()
})
}
})
},
}
}
</script>
<style scoped>
</style>

View File

@ -0,0 +1,116 @@
<template>
<div>
<el-dialog
:close-on-click-modal="false"
top="8vh"
width="40%"
:visible.sync="dialogVisible"
center
@close="handleCancel"
>
<div class="el-dialog-div">
<el-form
:rules="rules"
ref="dataForm"
:model="temp"
label-position="right"
label-width="120px"
style="height: 90%;"
>
<el-form-item label="" prop="upNoteId" class="is-required">
<el-input v-model="temp.upNoteId" placeholder="" />
</el-form-item>
<el-form-item label="" prop="noteId" class="is-required">
<el-input v-model="temp.noteId" placeholder="" />
</el-form-item>
<el-form-item label="" prop="noteTitle" class="is-required">
<el-input v-model="temp.noteTitle" placeholder="" />
</el-form-item>
<el-form-item label="被关注id" prop="authorId" class="is-required">
<el-input v-model="temp.authorId" placeholder="被关注id" />
</el-form-item>
<el-form-item label="被关注名字" prop="authorName" class="is-required">
<el-input v-model="temp.authorName" placeholder="被关注名字" />
</el-form-item>
<el-form-item label="关注者" prop="followId" class="is-required">
<el-input v-model="temp.followId" placeholder="关注者" />
</el-form-item>
<el-form-item label="关注者名字" prop="followName" class="is-required">
<el-input v-model="temp.followName" placeholder="关注者名字" />
</el-form-item>
<el-form-item label="创建时间" prop="createTime" class="is-required">
<el-input v-model="temp.createTime" placeholder="创建时间" />
</el-form-item>
</el-form>
</div>
<div slot="footer" class="dialog-footer">
<el-button @click="handleCancel"> </el-button>
<el-button type="primary" @click="submit"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import {addUpNotes} from "@/api/business/upNotes/upNotes";
import {setRequiredFields} from "@/utils";
const requiredFields = []
export default {
name: "addForm",
data() {
return {
rules: setRequiredFields(requiredFields),
dialogVisible: false,
temp: {
upNoteId:'',
noteId:'',
noteTitle:'',
authorId:'',
authorName:'',
followId:'',
followName:'',
createTime:'',
},
}
},
methods: {
open() {
this.dialogVisible = true
},
submit() {
this.$refs['dataForm'].validate((valid) => {
if (valid) {
addUpNotes(this.temp).then(response =>{
this.handleCancel()
this.$emit('ok', response.data)
})
} else {
console.log('error submit!!');
return false;
}
});
},
handleCancel() {
//
this.temp = this.$options.data().temp
this.dialogVisible = false
this.$refs['dataForm'].resetFields();
}
},
}
</script>
<style scoped>
</style>

View File

@ -0,0 +1,117 @@
<template>
<div>
<el-dialog
:close-on-click-modal="false"
top="8vh"
width="40%"
:visible.sync="dialogVisible"
center
@close="handleCancel"
>
<div class="el-dialog-div">
<el-form
:rules="rules"
ref="dataForm"
:model="temp"
label-position="right"
label-width="120px"
style="height: 90%;"
>
<el-form-item label="" prop="upNoteId" class="is-required">
<el-input v-model="temp.upNoteId" placeholder="" />
</el-form-item>
<el-form-item label="" prop="noteId" class="is-required">
<el-input v-model="temp.noteId" placeholder="" />
</el-form-item>
<el-form-item label="" prop="noteTitle" class="is-required">
<el-input v-model="temp.noteTitle" placeholder="" />
</el-form-item>
<el-form-item label="被关注id" prop="authorId" class="is-required">
<el-input v-model="temp.authorId" placeholder="被关注id" />
</el-form-item>
<el-form-item label="被关注名字" prop="authorName" class="is-required">
<el-input v-model="temp.authorName" placeholder="被关注名字" />
</el-form-item>
<el-form-item label="关注者" prop="followId" class="is-required">
<el-input v-model="temp.followId" placeholder="关注者" />
</el-form-item>
<el-form-item label="关注者名字" prop="followName" class="is-required">
<el-input v-model="temp.followName" placeholder="关注者名字" />
</el-form-item>
<el-form-item label="创建时间" prop="createTime" class="is-required">
<el-input v-model="temp.createTime" placeholder="创建时间" />
</el-form-item>
</el-form>
</div>
<div slot="footer" class="dialog-footer">
<el-button @click="handleCancel"> </el-button>
<el-button type="primary" @click="submit"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { editUpNotes } from "@/api/business/upNotes/upNotes";
import {setRequiredFields} from "@/utils";
const requiredFields = []
export default {
name: "editForm",
data() {
return {
rules: setRequiredFields(requiredFields),
dialogVisible: false,
temp: {
upNoteId:'',
noteId:'',
noteTitle:'',
authorId:'',
authorName:'',
followId:'',
followName:'',
createTime:'',
},
}
},
methods: {
open(row) {
this.temp = this.$options.data().temp
this.temp = row
this.dialogVisible = true
},
submit() {
this.$refs['dataForm'].validate((valid) => {
if (valid) {
editUpNotes(this.temp).then(response => {
this.handleCancel()
this.$emit('ok', response.data)
})
} else {
console.log('error submit!!');
return false;
}
});
},
handleCancel() {
//
this.temp = this.$options.data().temp
this.dialogVisible = false
this.$refs['dataForm'].resetFields()
}
},
}
</script>
<style scoped>
</style>

View File

@ -0,0 +1,263 @@
<template>
<div class="app-container">
<div class="filter-container">
<el-input
v-model="listQuery.keyword"
size="small"
placeholder="请输入关键词"
clearable
class="filter-item"
style="width: 200px;margin-left: 10px;"
/>
<el-button-group style="margin-left: 10px;">
<el-button
size="small"
class="filter-item"
type="primary"
icon="el-icon-search"
@click="search"
>
搜索
</el-button>
<el-button
size="small"
class="filter-item"
type="primary"
icon="el-icon-refresh"
@click="refresh"
>
重置
</el-button>
</el-button-group>
<el-button
size="small"
class="filter-item"
type="primary"
icon="el-icon-plus"
style="margin-left: 10px;"
@click="add"
>
新增
</el-button>
</div>
<el-table
v-loading="listLoading"
:data="list"
element-loading-text="Loading"
border
fit
height="100%"
class="table-container"
highlight-current-row
>
<el-table-column
label="序号"
width="150"
align="center"
>
<template slot-scope="scope">
{{ scope.$index+1 }}
</template>
</el-table-column>
<el-table-column
label=""
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.upNoteId }}
</template>
</el-table-column>
<el-table-column
label=""
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.noteId }}
</template>
</el-table-column>
<el-table-column
label=""
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.noteTitle }}
</template>
</el-table-column>
<el-table-column
label="被关注id"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.authorId }}
</template>
</el-table-column>
<el-table-column
label="被关注名字"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.authorName }}
</template>
</el-table-column>
<el-table-column
label="关注者"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.followId }}
</template>
</el-table-column>
<el-table-column
label="关注者名字"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.followName }}
</template>
</el-table-column>
<el-table-column
label="创建时间"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.createTime }}
</template>
</el-table-column>
<el-table-column
fixed="right"
label="操作"
width="200"
align="center"
>
<template slot-scope="scope">
<el-button-group>
<el-button
type="primary"
icon="el-icon-edit"
size="mini"
@click="edit(scope)"
>
修改
</el-button>
<el-button
type="danger"
icon="el-icon-delete"
size="mini"
@click="del(scope)"
>
删除
</el-button>
</el-button-group>
</template>
</el-table-column>
</el-table>
<pagination
:total="total"
:page.sync="listQuery.page"
:limit.sync="listQuery.limit"
@pagination="fetchData"
/>
<add-form ref="addForm" @ok="addOk" />
<edit-form ref="editForm" @ok="editOk" />
</div>
</template>
<script>
import {getUpNotesPage,deleteUpNotes} from "@/api/business/upNotes/upNotes";
import {deepClone,success} from "@/utils";
import confirm from "@/utils/confirm";
import Pagination from '@/components/Pagination'
import addForm from "@/views/business/upNotes/addUpNotes";
import editForm from "@/views/business/upNotes/editUpNotes";
export default {
name: 'upNotes',
components: {addForm,editForm,Pagination},
data() {
return {
total: 0,
list: [],
listLoading: true,
listQuery: {
page: 1,
limit: 50,
keyword: ''
},
temp: {},
}
},
created() {
this.fetchData()
},
methods: {
search() {
this.fetchData()
},
refresh() {
this.listQuery = this.$options.data().listQuery
this.fetchData()
},
fetchData() {
this.listLoading = true
getUpNotesPage(this.listQuery).then(response => {
const { records, total } = response.data
this.list = records
this.total = total
this.listLoading = false
})
},
add(){
this.$refs.addForm.open()
},
addOk(){
this.fetchData()
},
edit(scope) {
const temp = deepClone(scope.row)
this.$refs.editForm.open(temp)
},
editOk(){
this.fetchData()
},
del(scope) {
confirm("确定要删除吗?").then(res=>{
if(res){
deleteUpNotes(scope.row.upNotesId).then(response => {
console.log(response)
success('删除成功')
this.fetchData()
})
}
})
},
}
}
</script>
<style scoped>
</style>