feat:完成点赞功能
This commit is contained in:
11
Yi.BBS.Vue3/src/apis/agreeApi.js
Normal file
11
Yi.BBS.Vue3/src/apis/agreeApi.js
Normal file
@@ -0,0 +1,11 @@
|
||||
import myaxios from '@/utils/request'
|
||||
export function operate(discussId){
|
||||
if(discussId==undefined)
|
||||
{
|
||||
return;
|
||||
}
|
||||
return myaxios({
|
||||
url: `/agree/operate/${discussId}`,
|
||||
method: 'post'
|
||||
})
|
||||
};
|
||||
@@ -19,8 +19,8 @@
|
||||
</div>
|
||||
|
||||
|
||||
<el-button icon="Pointer" text>
|
||||
点赞</el-button>
|
||||
<el-button icon="Pointer" text @click="agree">
|
||||
点赞:{{ agreeNum??0 }}</el-button>
|
||||
<el-button icon="Star" text>
|
||||
收藏</el-button>
|
||||
|
||||
@@ -34,17 +34,38 @@
|
||||
</el-badge>
|
||||
</template>
|
||||
<script setup>
|
||||
import { h, ref } from 'vue'
|
||||
import { h, ref ,toRef,onMounted} from 'vue'
|
||||
import { useRouter } from 'vue-router'
|
||||
import AvatarInfo from './AvatarInfo.vue';
|
||||
import {operate} from '@/apis/agreeApi'
|
||||
|
||||
const props = defineProps(['title','introduction','creationTime','id','user','badge',"color","seeNum"])
|
||||
const props = defineProps(['title','introduction','creationTime','id','user','badge',"color","seeNum","agreeNum"])
|
||||
|
||||
const router = useRouter()
|
||||
const spacer = h(ElDivider, { direction: 'vertical' })
|
||||
const enterDiscuss = (id) => {
|
||||
router.push(`/article/${id}`)
|
||||
}
|
||||
const agreeNum=ref(0)
|
||||
//点赞操作
|
||||
const agree=async ()=>{
|
||||
const response= await operate(props.id)
|
||||
const res=response.data;
|
||||
//提示框,颜色区分
|
||||
if(res.isArgee)
|
||||
{
|
||||
agreeNum.value+=1;
|
||||
alert(res.message)
|
||||
}
|
||||
else
|
||||
{
|
||||
agreeNum.value-=1;
|
||||
alert(res.message)
|
||||
}
|
||||
}
|
||||
onMounted(()=>{
|
||||
agreeNum.value=props.agreeNum;
|
||||
})
|
||||
</script>
|
||||
<style scoped>
|
||||
.el-card{
|
||||
|
||||
@@ -58,14 +58,14 @@
|
||||
</div>
|
||||
</template>
|
||||
<div class="div-item" v-for="i in topDiscussList" >
|
||||
<DisscussCard :title="i.title" :introduction="i.introduction" :creationTime="i.creationTime" :id="i.id" :user="i.user" :color="i.color" :seeNum="i.seeNum" badge="置顶"/>
|
||||
<DisscussCard :title="i.title" :introduction="i.introduction" :creationTime="i.creationTime" :agreeNum="i.agreeNum" :id="i.id" :user="i.user" :color="i.color" :seeNum="i.seeNum" badge="置顶"/>
|
||||
</div>
|
||||
</el-collapse-item>
|
||||
</el-collapse>
|
||||
<el-divider v-show="topDiscussList.length>0" />
|
||||
|
||||
<div class="div-item" v-for="i in discussList" >
|
||||
<DisscussCard :title="i.title" :introduction="i.introduction" :creationTime="i.creationTime" :id="i.id" :color="i.color" :seeNum="i.seeNum" :user="i.user"/>
|
||||
<DisscussCard :title="i.title" :introduction="i.introduction" :creationTime="i.creationTime" :agreeNum="i.agreeNum" :id="i.id" :color="i.color" :seeNum="i.seeNum" :user="i.user"/>
|
||||
</div>
|
||||
<div>
|
||||
<el-pagination
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
</el-col>
|
||||
|
||||
<el-col :span="24" v-for="i in discussList">
|
||||
<DisscussCard :title="i.title" :introduction="i.introduction" :creationTime="i.creationTime" :id="i.id" :user="i.user" :seeNum="i.seeNum"/>
|
||||
<DisscussCard :title="i.title" :introduction="i.introduction" :creationTime="i.creationTime" :agreeNum="i.agreeNum" :id="i.id" :user="i.user" :seeNum="i.seeNum"/>
|
||||
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
@@ -20,10 +20,12 @@ TemplateFactory templateFactory = new();
|
||||
//string modelName = "Dictionary";
|
||||
//string nameSpaces = "Yi.RBAC";
|
||||
//List<string> entityNames = new() { "_", "_" };
|
||||
string modelName = "Setting";
|
||||
string nameSpaces = "Yi.RBAC";
|
||||
List<string> entityNames = new() { "File" };
|
||||
|
||||
//string modelName = "Setting";
|
||||
//string nameSpaces = "Yi.RBAC";
|
||||
//List<string> entityNames = new() { "File" };
|
||||
string modelName = "Exhibition";
|
||||
string nameSpaces = "Yi.BBS";
|
||||
List<string> entityNames = new() { "Agree" };
|
||||
|
||||
foreach (var entityName in entityNames)
|
||||
{
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Yi.BBS.Application.Contracts.Exhibition.Dtos.Argee
|
||||
{
|
||||
public class ArgeeDto
|
||||
{
|
||||
public ArgeeDto(bool isArgee)
|
||||
{
|
||||
IsArgee = isArgee;
|
||||
if (isArgee)
|
||||
{
|
||||
|
||||
Message = "点赞成功,点赞+1";
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
Message = "取消点赞,点赞-1";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public bool IsArgee { get; set; }
|
||||
public string Message { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -4,6 +4,17 @@
|
||||
<name>Yi.BBS.Application</name>
|
||||
</assembly>
|
||||
<members>
|
||||
<member name="T:Yi.BBS.Application.Exhibition.AgreeService">
|
||||
<summary>
|
||||
点赞功能
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Yi.BBS.Application.Exhibition.AgreeService.PostOperateAsync(System.Int64)">
|
||||
<summary>
|
||||
点赞,返回true为点赞+1,返回false为点赞-1
|
||||
</summary>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="T:Yi.BBS.Application.Exhibition.BannerService">
|
||||
<summary>
|
||||
Banner服务实现
|
||||
|
||||
@@ -0,0 +1,82 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using Cike.AutoWebApi.Setting;
|
||||
using Yi.BBS.Application.Contracts.Exhibition.Dtos.Argee;
|
||||
using Yi.BBS.Domain.Exhibition.Entities;
|
||||
using Yi.BBS.Domain.Forum.Entities;
|
||||
using Yi.Framework.Core.CurrentUsers;
|
||||
using Yi.Framework.Ddd.Repositories;
|
||||
using Yi.Framework.Ddd.Services;
|
||||
using Yi.Framework.Ddd.Services.Abstract;
|
||||
using Yi.Framework.Uow;
|
||||
|
||||
namespace Yi.BBS.Application.Exhibition
|
||||
{
|
||||
/// <summary>
|
||||
/// 点赞功能
|
||||
/// </summary>
|
||||
[AppService]
|
||||
public class AgreeService : ApplicationService, IApplicationService, IAutoApiService
|
||||
{
|
||||
|
||||
[Autowired]
|
||||
private IRepository<AgreeEntity> _repository { get; set; }
|
||||
|
||||
[Autowired]
|
||||
private IRepository<DiscussEntity> _discssRepository { get; set; }
|
||||
[Autowired]
|
||||
private ICurrentUser _currentUser { get; set; }
|
||||
|
||||
[Autowired]
|
||||
private IUnitOfWorkManager _unitOfWorkManager { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 点赞,返回true为点赞+1,返回false为点赞-1
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public async Task<ArgeeDto> PostOperateAsync(long discussId)
|
||||
{
|
||||
var entity = await _repository.GetFirstAsync(x => x.DiscussId == discussId && x.CreatorId == _currentUser.Id);
|
||||
//判断是否已经点赞过
|
||||
if (entity is null)
|
||||
{
|
||||
using (var uow = _unitOfWorkManager.CreateContext())
|
||||
{
|
||||
//没点赞过,添加记录即可,,修改总点赞数量
|
||||
await _repository.InsertAsync(new AgreeEntity(discussId));
|
||||
var discussEntity = await _discssRepository.GetByIdAsync(discussId);
|
||||
if (discussEntity is null)
|
||||
{
|
||||
throw new UserFriendlyException("主题为空");
|
||||
}
|
||||
discussEntity.AgreeNum += 1;
|
||||
await _discssRepository.UpdateAsync(discussEntity);
|
||||
uow.Commit();
|
||||
}
|
||||
return new ArgeeDto(true);
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
using (var uow = _unitOfWorkManager.CreateContext())
|
||||
{
|
||||
//点赞过,删除即可,修改总点赞数量
|
||||
await _repository.DeleteByIdAsync(entity.Id);
|
||||
var discussEntity = await _discssRepository.GetByIdAsync(discussId);
|
||||
if (discussEntity is null)
|
||||
{
|
||||
throw new UserFriendlyException("主题为空");
|
||||
}
|
||||
discussEntity.AgreeNum -= 1;
|
||||
await _discssRepository.UpdateAsync(discussEntity);
|
||||
uow.Commit();
|
||||
}
|
||||
|
||||
return new ArgeeDto(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -4,6 +4,16 @@
|
||||
<name>Yi.BBS.Domain</name>
|
||||
</assembly>
|
||||
<members>
|
||||
<member name="P:Yi.BBS.Domain.Exhibition.Entities.AgreeEntity.DiscussId">
|
||||
<summary>
|
||||
主题id
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.BBS.Domain.Exhibition.Entities.AgreeEntity.CreatorId">
|
||||
<summary>
|
||||
创建者
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Yi.BBS.Domain.Forum.Entities.ArticleEntityExtensions.Tile(System.Collections.Generic.List{Yi.BBS.Domain.Forum.Entities.ArticleEntity})">
|
||||
<summary>
|
||||
平铺自己
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using SqlSugar;
|
||||
using Yi.Framework.Data.Auditing;
|
||||
using Yi.Framework.Data.Entities;
|
||||
using Yi.Framework.Ddd.Entities;
|
||||
|
||||
namespace Yi.BBS.Domain.Exhibition.Entities
|
||||
{
|
||||
[SugarTable("Agree")]
|
||||
public class AgreeEntity : IEntity<long>, ICreationAuditedObject
|
||||
{
|
||||
public AgreeEntity()
|
||||
{
|
||||
}
|
||||
|
||||
public AgreeEntity(long discussId)
|
||||
{
|
||||
DiscussId = discussId;
|
||||
}
|
||||
|
||||
[SugarColumn(IsPrimaryKey = true)]
|
||||
public long Id { get; set; } = SnowflakeHelper.NextId;
|
||||
public DateTime CreationTime { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 主题id
|
||||
/// </summary>
|
||||
public long DiscussId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 创建者
|
||||
/// </summary>
|
||||
public long? CreatorId { get; set; }
|
||||
}
|
||||
}
|
||||
Binary file not shown.
@@ -4,6 +4,17 @@
|
||||
<name>Yi.BBS.Application</name>
|
||||
</assembly>
|
||||
<members>
|
||||
<member name="T:Yi.BBS.Application.Exhibition.AgreeService">
|
||||
<summary>
|
||||
点赞功能
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Yi.BBS.Application.Exhibition.AgreeService.PostOperateAsync(System.Int64)">
|
||||
<summary>
|
||||
点赞,返回true为点赞+1,返回false为点赞-1
|
||||
</summary>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="T:Yi.BBS.Application.Exhibition.BannerService">
|
||||
<summary>
|
||||
Banner服务实现
|
||||
|
||||
@@ -4,6 +4,16 @@
|
||||
<name>Yi.BBS.Domain</name>
|
||||
</assembly>
|
||||
<members>
|
||||
<member name="P:Yi.BBS.Domain.Exhibition.Entities.AgreeEntity.DiscussId">
|
||||
<summary>
|
||||
主题id
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.BBS.Domain.Exhibition.Entities.AgreeEntity.CreatorId">
|
||||
<summary>
|
||||
创建者
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Yi.BBS.Domain.Forum.Entities.ArticleEntityExtensions.Tile(System.Collections.Generic.List{Yi.BBS.Domain.Forum.Entities.ArticleEntity})">
|
||||
<summary>
|
||||
平铺自己
|
||||
|
||||
Binary file not shown.
Reference in New Issue
Block a user