Merge branch 'master' of https://gitee.com/virus010101/linfeng-community
This commit is contained in:
commit
fab5a3f8fb
38
README.md
38
README.md
@ -5,9 +5,9 @@
|
|||||||
|
|
||||||
#### 1.介绍
|
#### 1.介绍
|
||||||
|
|
||||||
林风社交论坛uniapp**小程序/H5/APP版本**基于SpringBoot+MybatisPlus+Shiro+Quartz+jwt+websocket+Redis+Vue+Uniapp的前后端分离的社交论坛问答发帖/BBS项目。 项目分为Uniapp用户端(**兼容H5、微信小程序、APP端**)和Vue后台管理端(包括完整的权限处理), 基于以下技术栈开发:SpringBoot、MybatisPlus、Shiro、Quartz、jwt、websocket、Redis、Vue、Uniapp、MySQL。
|
林风社交论坛uniapp**小程序/H5/APP版本**基于SpringBoot+MybatisPlus+Shiro+Quartz+jwt+websocket+Redis+Vue+Uniapp的前后端分离的社交论坛问答发帖/BBS,SNS项目。 项目分为Uniapp用户端(**兼容H5、微信小程序、APP端**)和Vue后台管理端(包括完整的权限处理), 基于以下技术栈开发:SpringBoot、MybatisPlus、Shiro、Quartz、jwt、websocket、Redis、Vue、Uniapp、MySQL。
|
||||||
|
|
||||||
功能:图文帖,长文贴,短视频,圈子,私聊,微信支付(小程序/H5/app),付费贴,积分签到,钱包充值,积分余额兑换,话题标签,抽奖大转盘,手机号邮箱登录,虚拟用户发帖,举报,第三方广告,会员模块,即时通讯IM ,好友模块等丰富功能,直接看演示更直观↓↓↓↓↓
|
功能:图文帖,长文贴,短视频,圈子,私聊,微信支付(小程序/H5/app),付费贴,积分签到,钱包充值,积分余额兑换,话题标签,抽奖大转盘,手机号邮箱登录,虚拟用户发帖,举报,第三方广告,会员模块,即时通讯IM ,好友模块,投票,打赏,用户经验等级等丰富功能,直接看演示更直观↓↓↓↓↓
|
||||||
|
|
||||||
***后台前端的代码在 src\main\resources\static\linfeng-community-vue目录下!***
|
***后台前端的代码在 src\main\resources\static\linfeng-community-vue目录下!***
|
||||||
|
|
||||||
@ -149,12 +149,40 @@ https://net.linfeng.tech/version/version.html
|
|||||||
|
|
||||||
#### 6.标准版更新记录
|
#### 6.标准版更新记录
|
||||||
|
|
||||||
**当前版本V1.9.0**
|
**当前版本V1.9.1**
|
||||||
|
|
||||||
|
###### **V1.9.1发布**
|
||||||
|
|
||||||
|
<u>2023.8.9</u>
|
||||||
|
|
||||||
|
【新增】1.新增用户经验等级模块和用户LV标识
|
||||||
|
|
||||||
|
【新增】2.新增积分打赏模块
|
||||||
|
|
||||||
|
【新增】3.新增帖子列表暗黑系列皮肤
|
||||||
|
|
||||||
|
【新增】4.新增小程序端支持获取微信头像昵称
|
||||||
|
|
||||||
|
【新增】5.会员开通支持余额支付
|
||||||
|
|
||||||
|
【新增】6.支持后台增减用户积分
|
||||||
|
|
||||||
|
【新增】7.支持后台指定用户会员状态和有效期限
|
||||||
|
|
||||||
|
【新增】8.支持后台创建圈子
|
||||||
|
|
||||||
|
【优化】9.支持后台圈子分类、问答限制等修改
|
||||||
|
|
||||||
|
【优化】10.增加发帖积分奖励每日限制次数防止盗刷
|
||||||
|
|
||||||
|
【优化】11.帖子内容增加链接标识及跳转
|
||||||
|
|
||||||
|
【优化】12.优化分享海报可能变形的问题
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
###### **V1.9.0发布**
|
###### **V1.9.0发布**
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<u>2023.6.27</u>
|
<u>2023.6.27</u>
|
||||||
|
|
||||||
【新增】1.新增限制进圈问答审核模块
|
【新增】1.新增限制进圈问答审核模块
|
||||||
|
@ -38,6 +38,7 @@ import io.linfeng.common.utils.R;
|
|||||||
@RestController
|
@RestController
|
||||||
@RequestMapping("admin/user")
|
@RequestMapping("admin/user")
|
||||||
public class AppUserController {
|
public class AppUserController {
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private AppUserService appUserService;
|
private AppUserService appUserService;
|
||||||
|
|
||||||
@ -63,14 +64,7 @@ public class AppUserController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@PostMapping("/save")
|
|
||||||
@RequiresPermissions("admin:user:save")
|
|
||||||
@ApiOperation("用户保存")
|
|
||||||
public R save(@RequestBody AppUserEntity user){
|
|
||||||
appUserService.save(user);
|
|
||||||
|
|
||||||
return R.ok();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@PostMapping("/update")
|
@PostMapping("/update")
|
||||||
|
@ -97,6 +97,7 @@ public class AppUserServiceImpl extends ServiceImpl<AppUserDao, AppUserEntity> i
|
|||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public void ban(Integer id) {
|
public void ban(Integer id) {
|
||||||
Integer status = this.lambdaQuery().eq(AppUserEntity::getUid, id).one().getStatus();
|
Integer status = this.lambdaQuery().eq(AppUserEntity::getUid, id).one().getStatus();
|
||||||
if (status.equals(Constant.USER_BANNER)) {
|
if (status.equals(Constant.USER_BANNER)) {
|
||||||
@ -104,6 +105,7 @@ public class AppUserServiceImpl extends ServiceImpl<AppUserDao, AppUserEntity> i
|
|||||||
}
|
}
|
||||||
this.lambdaUpdate()
|
this.lambdaUpdate()
|
||||||
.set(AppUserEntity::getStatus, 1)
|
.set(AppUserEntity::getStatus, 1)
|
||||||
|
.set(AppUserEntity::getUpdateTime,new Date())
|
||||||
.eq(AppUserEntity::getUid, id)
|
.eq(AppUserEntity::getUid, id)
|
||||||
.update();
|
.update();
|
||||||
}
|
}
|
||||||
@ -117,6 +119,7 @@ public class AppUserServiceImpl extends ServiceImpl<AppUserDao, AppUserEntity> i
|
|||||||
}
|
}
|
||||||
boolean update = this.lambdaUpdate()
|
boolean update = this.lambdaUpdate()
|
||||||
.set(AppUserEntity::getStatus, 0)
|
.set(AppUserEntity::getStatus, 0)
|
||||||
|
.set(AppUserEntity::getUpdateTime,new Date())
|
||||||
.eq(AppUserEntity::getUid, id)
|
.eq(AppUserEntity::getUid, id)
|
||||||
.update();
|
.update();
|
||||||
if(!update){
|
if(!update){
|
||||||
@ -201,6 +204,7 @@ public class AppUserServiceImpl extends ServiceImpl<AppUserDao, AppUserEntity> i
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public void updateAppUserInfo(AppUserUpdateForm appUserUpdateForm, AppUserEntity user) {
|
public void updateAppUserInfo(AppUserUpdateForm appUserUpdateForm, AppUserEntity user) {
|
||||||
if (!ObjectUtil.isEmpty(appUserUpdateForm.getAvatar())) {
|
if (!ObjectUtil.isEmpty(appUserUpdateForm.getAvatar())) {
|
||||||
user.setAvatar(appUserUpdateForm.getAvatar());
|
user.setAvatar(appUserUpdateForm.getAvatar());
|
||||||
|
@ -133,6 +133,7 @@ public class PostServiceImpl extends ServiceImpl<PostDao, PostEntity> implements
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public void addCollection(AddCollectionForm request, AppUserEntity user) {
|
public void addCollection(AddCollectionForm request, AppUserEntity user) {
|
||||||
Boolean collection = postCollectionService.isCollection(user.getUid(), request.getId());
|
Boolean collection = postCollectionService.isCollection(user.getUid(), request.getId());
|
||||||
if(collection){
|
if(collection){
|
||||||
@ -198,6 +199,7 @@ public class PostServiceImpl extends ServiceImpl<PostDao, PostEntity> implements
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public void addComment(AddCommentForm request, AppUserEntity user) {
|
public void addComment(AddCommentForm request, AppUserEntity user) {
|
||||||
if(user.getStatus()!=0){
|
if(user.getStatus()!=0){
|
||||||
throw new LinfengException("您的账号已被禁用!");
|
throw new LinfengException("您的账号已被禁用!");
|
||||||
|
@ -9,8 +9,8 @@
|
|||||||
level-bg-color="#000000"></u-avatar>
|
level-bg-color="#000000"></u-avatar>
|
||||||
</view>
|
</view>
|
||||||
<view class="center">
|
<view class="center">
|
||||||
<view style="display: flex;align-items: center;justify-content: space-between;">
|
<view class="post-top-box">
|
||||||
<view style="display: flex;align-items: center;">
|
<view class="uname">
|
||||||
<text v-if="item.userInfo.type == 1" class="official">官方</text>
|
<text v-if="item.userInfo.type == 1" class="official">官方</text>
|
||||||
<text class="username">{{ item.userInfo.username.substring(0, 10) }}</text>
|
<text class="username">{{ item.userInfo.username.substring(0, 10) }}</text>
|
||||||
</view>
|
</view>
|
||||||
@ -240,7 +240,15 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
.post-top-box{
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
}
|
||||||
|
.uname{
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
.post-list-item {
|
.post-list-item {
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
'<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0' +
|
'<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0' +
|
||||||
(coverSupport ? ', viewport-fit=cover' : '') + '" />')
|
(coverSupport ? ', viewport-fit=cover' : '') + '" />')
|
||||||
</script>
|
</script>
|
||||||
<title></title>
|
<title>林风社交论坛开源版</title>
|
||||||
<!--preload-links-->
|
<!--preload-links-->
|
||||||
<!--app-context-->
|
<!--app-context-->
|
||||||
</head>
|
</head>
|
||||||
|
@ -85,7 +85,7 @@
|
|||||||
if (index === 0) {
|
if (index === 0) {
|
||||||
this.page1 = 1;
|
this.page1 = 1;
|
||||||
this.getFollowUserPost();
|
this.getFollowUserPost();
|
||||||
}else if (index === 1) {
|
} else if (index === 1) {
|
||||||
this.page2 = 1;
|
this.page2 = 1;
|
||||||
this.getLastPost();
|
this.getLastPost();
|
||||||
}
|
}
|
||||||
|
@ -49,10 +49,10 @@
|
|||||||
if (res.code === 0) {
|
if (res.code === 0) {
|
||||||
uni.setStorageSync("hasLogin", true);
|
uni.setStorageSync("hasLogin", true);
|
||||||
uni.setStorageSync("token", res.token);
|
uni.setStorageSync("token", res.token);
|
||||||
|
that.getUserInfo();
|
||||||
uni.switchTab({
|
uni.switchTab({
|
||||||
url: '/pages/index/index'
|
url: '/pages/index/index'
|
||||||
});
|
});
|
||||||
that.getUserInfo();
|
|
||||||
}
|
}
|
||||||
uni.hideLoading();
|
uni.hideLoading();
|
||||||
})
|
})
|
||||||
|
@ -355,6 +355,10 @@
|
|||||||
});
|
});
|
||||||
},
|
},
|
||||||
getPostDetail() {
|
getPostDetail() {
|
||||||
|
uni.showLoading({
|
||||||
|
mask: true,
|
||||||
|
title: '加载中'
|
||||||
|
});
|
||||||
this.$H
|
this.$H
|
||||||
.get('post/detail', {
|
.get('post/detail', {
|
||||||
id: this.postId
|
id: this.postId
|
||||||
@ -369,6 +373,7 @@
|
|||||||
}, 1500);
|
}, 1500);
|
||||||
}
|
}
|
||||||
this.postDetail = res.result;
|
this.postDetail = res.result;
|
||||||
|
uni.hideLoading();
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
cancelCollection() {
|
cancelCollection() {
|
||||||
|
@ -4,8 +4,8 @@
|
|||||||
(function() {
|
(function() {
|
||||||
window.SITE_CONFIG = {};
|
window.SITE_CONFIG = {};
|
||||||
|
|
||||||
// api接口请求地址
|
// api接口请求地址 你的线上api域名
|
||||||
window.SITE_CONFIG["baseUrl"] = "";
|
window.SITE_CONFIG["baseUrl"] = "https://api.xxx.com";
|
||||||
|
|
||||||
// cdn地址 = 域名 + 版本号
|
// cdn地址 = 域名 + 版本号
|
||||||
window.SITE_CONFIG["domain"] = "./"; // 域名
|
window.SITE_CONFIG["domain"] = "./"; // 域名
|
||||||
|
Loading…
Reference in New Issue
Block a user