2022年5月29日 从svn移到git

This commit is contained in:
daihh
2022-05-29 18:59:24 +08:00
parent 9580ff8c9b
commit faa7afb65f
897 changed files with 171836 additions and 0 deletions

View File

@@ -0,0 +1,649 @@
<template>
<view>
<view style="height: 50px;"></view>
<view class="interact-fixed">
<view class="interact-bar" style="display: flex;">
<view class="interact-bar-item" style="width: 50%;">
<slot>
<view class="field" @click="openInput()">
<u-icon name="edit-pen-fill" size="18" class="field-icon"></u-icon>
<text class="wenz">说点什么..</text>
</view>
</slot>
</view>
<!-- <view v-if="answers" class="interact-bar-item">
<view class="interact-bar-icon"><image style="width:34upx;height: 31upx;" src="/static/images/icon/comment.png" alt=""></view>
<view class="interact-bar-txt">{{data.answers}}</view>
</view> -->
<view class="" style="display:flex;width: 50%;justify-content: flex-end;padding-right: 20rpx;">
<view v-if="comments" class="interact-bar-item" @click="handleComment()">
<view class="interact-bar-icon"><image style="width:40upx;height: 40upx;" src="/static/images/icon/comment.png" alt=""></view>
<view class="interact-bar-txt">{{data.comments}}</view>
</view>
<view v-if="praises" @click="addPraise" class="interact-bar-item">
<view class="interact-bar-icon" v-if="isPraise"><image style="width:40upx;height: 40upx;" src="/static/images/icon/artice-praise-active.png" alt="" ></view>
<view class="interact-bar-icon" v-else><image style="width:40upx;height: 40upx;" src="/static/images/icon/artice-praise.png" alt="" ></view>
<view class="interact-bar-txt">{{data.praises}}</view>
</view>
<view v-if="shares" @click="addShare" class="interact-bar-item">
<view class="interact-bar-icon"><image style="width:40upx;height: 40upx;" src="/static/images/icon/share.png" alt=""></view>
<view class="interact-bar-txt">分享</view>
</view>
<view v-if="favorites" @click="addFavorite()" class="interact-bar-item">
<view class="interact-bar-icon" v-if="isFavorite"><image style="width:40upx;height: 40upx;" src="/static/images/icon/favorite-active.png" alt="" ></view>
<view class="interact-bar-icon" v-else><image style="width:40upx;height: 40upx;" src="/static/images/icon/favorite.png" alt="" ></view>
<!-- <view class="interact-bar-txt">收藏</view> -->
<view class="interact-bar-txt">{{data.favorites}}</view>
<!-- 这里需要一个是否已经收藏的变量来控制已收藏就显示收藏数 -->
</view>
</view>
</view>
</view>
<u-toast ref="interactToast"></u-toast>
<u-popup :show="inputShow" @close="closeInput" @open="openInput">
<view class="users-box" v-show="usersListShow">
<view class="users-list" v-for="u in usersList" :key="u.id" @click="userSelect(u)">
<u-avatar shape="circle" :size="50" v-if="u.avatar != ''" :src="u.avatar"></u-avatar>
<view v-else>
<u-avatar shape="circle" v-if="u.sex === 1" :size="50" src="../../static/images/man.png"></u-avatar>
<u-avatar shape="circle" v-else :size="50" src="../../static/images/woman.png"></u-avatar>
</view>
<!-- <u-avatar v-else :size="25" random-bg-color :text="data.name" shape="square"></u-avatar> -->
<view class="uavatar-scale">{{u.name}}</view>
</view>
</view>
<view>
<view style="display: flex;">
<view style="flex: 1;"><u--textarea :height="150" v-model="inputValue" placeholder="写下您的评论(140字以内),可以@作者哦~" count ></u--textarea></view>
<view style="width:160upx;text-align: center;padding-top: 10px;line-height: 80upx;">
<view @click="usersClick()">@</view>
<view style="padding: 20upx;"><u-button @click="submit" type="primary" text="发布"></u-button></view>
</view>
</view>
<view>
</view>
</view>
</u-popup>
<u-popup :show="shareInfo.show" @close="closeShare" @open="addShare" mode="right">
<view style="padding: 10px 20px;line-height: 60upx;">
<view style="padding: 10upx;">请输入要分享给人的姓名</view>
<view style="padding: 10upx;">
<u--input placeholder="请输入人员姓名" border="surround" v-model="shareInfo.name"></u--input>
</view>
<view style="padding-top:20upx;">
<u-button @click="findUsers()" type="primary" text="查询"></u-button>
</view>
<view style="padding-top: 50upx;">
<!--查询内容列表-->
<view style="line-height: 60upx;" v-for="(su,suidx) in shareInfo.users" :key="suidx" @click="confirmShare(su)">{{suidx+1}}, {{su.name}} {{su.code}}</view>
</view>
</view>
</u-popup>
</view>
</template>
<script>
import apiPraises from '@/api/modules/praises.js'
import apiComment from '@/api/modules/comments.js'
import apiShares from '@/api/modules/shares.js'
import apiFavorites from '@/api/modules/favorites.js'
import apiUser from '@/api/system/user.js'
import apiCoursePortal from '@/api/modules/coursePortal.js'
import apiMessage from '@/api/system/message.js'
import { mapGetters } from 'vuex';
export default {
props: {
data:{
type:Object,
default(){
return{
id:'',
type:1,
answers:23,
favorites:23,
comments:18,
shares:16,
praises:68,
views:12,
}
}
},
align:{
type:String,
default:'right'
},
answers:{
type:Boolean,
default:false
},
comments:{
type:Boolean,
default:true
},
favorites:{
type:Boolean,
default:true
},
shares:{
type:Boolean,
default:true
},
praises:{
type:Boolean,
default:true
},
views:{
type:Boolean,
default:true
},
type:{
type:Number,
default:0 //默认是课程
},
users:{
// type:Object,
}
},
computed:{
...mapGetters(['userInfo']),
},
data(){
return {
userData:{},
usersListShow: false,
usersList: [],
isPraise:false,
isFavorite:false,
inputShow:false,
inputValue:'',
loading:false,
shareInfo:{
show:false,
name:'',
users:[],
},
toUserDig:{
show:false,
name:'',
chooseUserId:'',
chooseUserName:'',
list:[]
}
}
},
watch:{
data(newVal,oldVal){
if(newVal && newVal.id!=''){
this.checkHas();
this.loadUser();
}
}
},
mounted() {
this.checkHas();
this.loadUser();
},
methods:{
handleComment() {
this.$emit('handle-comment');
},
messageSave(refId,title,sendName,acceptName,acceptId,typeText){
let content;
let conType;
if(this.type==1){
content='课程';
conType = this.data.type;
}
if(this.type==2){
content='文章'
}
if(this.type==3){
content='案例'
}
if(this.type==4){
content='问答'
}
content=sendName+typeText+content+'-'+title
let message={
content,
refId,
refType:this.type,
sendName,
acceptName,
acceptId,
title:'系统消息',
sendType:1,
conType,
content,
}
apiMessage.save(message).then(res=>{
if(res.status==200){
}
})
},
userSelect(data) {
this.usersListShow = false;
this.userData = data;
// this.toUserDig.chooseUserId = data.id;
// this.toUserDig.chooseUserName = data.name;
this.toUserDig.chooseUserId = data.sysCreateAid;
this.toUserDig.chooseUserName = data.sysCreateBy;
this.inputValue = "@"+data.name+this.inputValue;
},
usersClick() {
if(this.usersListShow) {
this.usersListShow = false;
} else {
this.usersListShow = true;
}
},
loadUser() {
if(this.type == 1) {
this.usersList = this.users;
}
if(this.type == 2) {
this.usersList = [];
this.usersList.push({
sysCreateAid: this.data.sysCreateAid,
sysCreateBy:this.data.sysCreateBy
})
}
let ids = [];
this.usersList && this.usersList.forEach(item=>{
if(this.type == 1) {
item.sysCreateAid = item.teacherId;
}
item.avatar= '';
item.name= '';
item.sex = '';
ids.push(item.sysCreateAid);
})
this.loadUserInfos(this.usersList,ids);
},
loadUserInfos(list,userIds){
let $this=this;
const noReapetIds=[...new Set(userIds)]
apiUser.getByIds(noReapetIds).then(res=>{
if(res.status==200){
list&& list.forEach(item=>{
res.result.some(author=>{
if(author.aid==item.sysCreateAid){
if(author.avatar!=''){
item.avatar=$this.$config.fileUrl+author.avatar;
}
item.name = author.name;
item.sex = author.sex;
return true;
}
return false;
})
})
}else{
console.log('查询用户信息失败:'+res.error);
}
})
},
checkHas(){
if(this.type>0){
apiPraises.has(this.type,this.data.id).then(rs=>{
if(rs.status==200 && rs.result){
this.isPraise=true;
}else{
this.isPraise=false;
}
});
apiFavorites.has(this.type,this.data.id).then(rs=>{
if(rs.status==200 && rs.result){
this.isFavorite=true;
}else{
this.isFavorite=false;
}
})
}
},
submit(){
if(this.inputValue!=''){
let cdata={
objType:this.type,
objId:this.data.id,
parentId:'-1',
content:this.inputValue,
clevel:1,
toAid:'',
toAname:'',
}
if(this.inputValue.charAt(0) == '@' && this.toUserDig.chooseUserId!=='' && this.toUserDig.chooseUserName!=''){
cdata.toAid=this.toUserDig.chooseUserId;
cdata.toAname=this.toUserDig.chooseUserName;
}
apiComment.add(cdata).then(res=>{
if(res.status==200){
this.$refs.interactToast.show({message:'发布成功',type:'success'});
this.inputValue='';
this.data.comments++;
this.toUserDig.chooseUserId='';
this.toUserDig.chooseUserName='';
this.inputShow=false;
this.$emit("comment-success", res.result);
}else{
this.$refs.interactToast.show({message:'发布失败',type:'error'});
}
});
}
},
addPraise(){
if(this.type==0){
//console.log('未设置type值,1表课程,2表文章3表案例4表问答')
return;
}
if(this.loading){
return;
}
//需要判断是否已点赞,已点赞的不再加
let postData={
objType:this.type,
objId:this.data.id,
title:'',
}
if(this.type==1){
postData.title=this.data.name;
}else{
postData.title=this.data.title;
}
this.loading=true;
if(this.isPraise){
apiPraises.remove(this.type,this.data.id).then(res=>{
this.loading=false;
if(res.status==200){
if(res.result){
this.data.praises--;
}
this.isPraise=false;
this.$refs.interactToast.show({message:'取消点赞',type:'success'});
this.$emit("praise-success", res.result);
}else{
this.$refs.interactToast.show({message:'取消失败',type:'error'});
}
})
} else {
apiPraises.save(postData).then(res=>{
this.loading=false;
if(res.status==200){
if(res.result){
this.data.praises++;
}
this.isPraise=true;
this.$refs.interactToast.show({message:'点赞成功',type:'success'});
this.messageSave(this.data.id,this.data.title,this.userInfo.name,this.data.sysCreateBy,this.data.sysCreateAid,'点赞了我的');
this.$emit("praise-success", res.result);
}else{
this.$refs.interactToast.show({message:'点赞失败',type:'error'});
}
})
}
},
addFavorite(){
if(this.type==0){
console.log('未设置type值,1表课程,2表文章3表案例4表问答')
return;
}
if(this.loading){
return;
}
//需要判断是否已点赞,已点赞的不再加
let postData={
objType:this.type,
objId:this.data.id,
title:'',
}
if(this.type==1){
postData.title=this.data.name;
}else{
postData.title=this.data.title;
}
this.loading=true;
if(this.isFavorite) {// 已经收藏,再次点击取消收藏
apiFavorites.remove(this.type,this.data.id).then(res=>{
this.loading=false;
if(res.status==200){
this.isFavorite=false;
if(res.result){
this.data.favorites--;
}
this.$refs.interactToast.show({message:'已取消收藏',type:'success'});
// this.$emit('addFavorite',res.result);//添加收藏,如果是true代表添加成功false代表已存在
}else{
console.log('取消收藏失败:'+res.message);
}
})
} else {
apiFavorites.save(postData).then(res=>{
this.loading=false;
if(res.status==200 && res.result){
this.isFavorite=true;
this.data.favorites++;
this.$refs.interactToast.show({message:'已加入收藏',type:'success'});
if(this.type==1){
this.messageSave(this.data.id,this.data.name,this.userInfo.name,this.data.sysCreateBy,this.data.sysCreateAid,'收藏了我发布的');
}else{
this.messageSave(this.data.id,this.data.title,this.userInfo.name,this.data.sysCreateBy,this.data.sysCreateAid,'收藏了我发布的');
}
this.$emit('favorite-success',res.result);//添加收藏,如果是true代表添加成功false代表已存在
}else{
this.$refs.interactToast.show({message:'收藏失败',type:'error'});
console.log('加入收藏失败:'+res.message);
}
})
}
},
openInput(){
this.inputShow=true;
},
closeInput(){
this.inputShow=false;
},
addShare(){
//分享
this.shareInfo.show=true;
},
findUsers(){
this.shareInfo.users=[];
//模拟数据
//模拟数据
if(!this.shareInfo.name){
uni.showToast({
title: '请输入查询条件',
icon: 'none'
});
// return this.$refs.interactToast.show({message:'请输入工号或姓名',type:'warning'});
}
var name=this.shareInfo.name;
var regPos = /^\d+(\.\d+)?$/; //非负浮点数
if(regPos.test(name)){
apiUser.getByLoginName(name).then(rs=>{
if(rs.status==200){
//因为根据工号查询只会是一个人所有会有null情况而json会返回空字符串
if(rs.result!=''){
this.shareInfo.users=[rs.result];
}else{
uni.showToast({
title: '查无此用户',
icon: 'none'
});
// this.$refs.interactToast.show({message:"查无此用户",type:'warning'});
}
}else{
uni.showToast({
title: rs.message,
icon: 'none'
});
// this.$refs.interactToast.show({message:rs.message,type:'warning'});
}
})
}else{
apiUser.findByName(name).then(rs=>{
if(rs.status==200){
if(rs.result.length==0){
return uni.showToast({
title: rs.message,
icon: 'none'
});
// return this.$refs.interactToast.show({message:rs.message,type:'error'});
}
this.shareInfo.users=rs.result;
}else{
uni.showToast({
title: rs.message,
icon: 'none'
});
// this.$refs.interactToast.show({message:rs.message,type:'error'});
}
})
}
// apiUser.findByName(name).then(rs=>{
// if(rs.status==200){
// this.shareInfo.users=rs.result;
// }else{
// this.$refs.interactToast.show({message:'查询用户失败',type:'error'});
// console.log(rs.message);
// console.log(rs.error)
// }
// })
},
closeShare(){
this.shareInfo.show=false;
},
confirmShare(u){
let conType;
if(this.type == 1) {
conType = this.data.type;
}
let postData={
objType:this.type,
objId:this.data.id,
content:'',
isRead:false,
toAid:u.aid,
toAname:u.name,
conType:conType,
}
if(this.userInfo.aid==postData.toAid){
uni.showToast({
title: '不能分享给自己',
icon: 'none'
});
// return this.$message.warning("不能分享给自己")
}
apiShares.save(postData).then(rs=>{
if(rs.status==200){
if(rs.result){
this.shareInfo.show=false;
this.$refs.interactToast.show({message:'分享成功',type:'success'});
this.$emit("share-success", rs.result);
if(this.type!=3){
if(this.type==1){
this.messageSave(this.data.id,this.data.name,this.userInfo.name,u.name,u.aid,'分享给我的');
}else{
this.messageSave(this.data.id,this.data.title,this.userInfo.name,u.name,u.aid,'分享给我的');
}
}
}else{
uni.showToast({
title: '分享失败,您不能将同一资源多次分享给同一个人',
icon: 'none'
});
// this.$refs.interactToast.show({message:'分享失败,您不能将同一资源多次分享给同一个人',type:'warning'});
}
}else{
// this.$message({message:'分享失败',type:'success'});
this.$refs.interactToast.show({message:'分享处理失败',type:'error'});
console.log(rs.message);
}
});
},
}
};
</script>
<style lang="scss" scoped>
.users-box{
height: 150upx;
padding: 50upx;
display: flex;
.users-list{
width: 100upx;
.uavatar-scale{
text-align: center;
margin-top: 10upx;
}
}
}
.txtbtn{
background-color: #e9e9e9;
border: 1px solid #e0e0e0;
padding: 3px 10px;
border-radius: 6px;
font-size: 0.8em;
}
.interact-fixed{
position: fixed;
z-index: 999;
bottom: 0px;
width: 100%;
border-top: 1px solid #e8e8e8;
height: 50px;
padding-top: 10px;
background-color: #FFFFFF;
}
.interact-bar{
height: 35px;
// display: flex;
// justify-content: space-around;
padding-left: 40rpx;
.interact-bar-item {
width: 50px;
.interact-bar-icon{
text-align: center;
img{
width: 30upx;
height: 30upx;
}
}
.interact-bar-txt{
font-size: 12px;
color: #343434;
text-align: center;
}
}
}
.field{
width: 200px;
height: 40px;
line-height: 30px;
background: rgb(247,247,249);
border-radius: 10upx;
display: flex;
.field-icon{
margin-top: 2px;
margin-left: 10px;
}
.wenz{
font-size: 14px;
color: #000000;
margin-left: 2px;
margin-top: 6px;
}
}
</style>