123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562 |
- <template>
- <view class='page'>
- <headerline navstyle="left:25%;width:50%;" :reditem='unreadnum' :isback="true" :shownav="true" :navitem="navitem" :navselect="navselect" @tapnav="tapnav" :statusbarheight='statusBarHeight' :islogo="false" ></headerline>
-
- <block v-if="isloading==false">
- <block v-if="navselect==0">
- <block v-if="friend_lists.length>0">
-
- <block v-for="(m,index) in friend_lists" :key='index'>
-
- <view class="lines" style="margin-top: 10px;">
- <view>
- <image @tap='openuser(m.user)' :src="image_cache(m.user.avatar)" class="avatar"></image>
- </view>
- <view>
- <view >
- <span class='nickname' @tap='openuser(m.user)'>{{m.user.nickname}}</span>申请添加您为好友
-
- <view style='float: right;display: inline-block;color: #999;padding-right: 10px;'>{{timestampFormat(m.addtime)}}</view>
- </view>
- <scroll-view scroll-y="true" :scroll-top="m.mark.length*20" v-if="m.mark.length>0" style="max-height:32px;">
- <view v-for="(m1,index1) in m.mark" :key='index1' class="mark">
- {{m1}}
-
- </view>
- </scroll-view>
- <view v-if="m.status==0">
-
- <button class="btns ok" @tap="deal_userapply(m.id,1,index)">
- <uni-icons type='checkmarkempty' style="color:#FFF"></uni-icons>
- 同意</button>
- <button class="btns clear" @tap="deal_userapply(m.id,2,index)">
- <uni-icons type='closeempty'></uni-icons>拒绝</button>
-
-
- </view>
- <view v-else style="color:#666;font-size: 14px;">
- <block v-if="m.status==1">已同意</block>
- <block v-else>已拒绝</block>
- </view>
- </view>
- </view>
-
- </block>
- </block>
- <view class="nodata" v-else >
- 暂无好友验证消息
-
- </view>
-
- </block>
-
-
- <block v-else>
- <block v-if="group_lists.length>0">
-
- <block v-for="(m,index) in group_lists" :key='index'>
- <view class="times">{{timestampFormat(m.addtime)}}</view>
- <view class="lines">
- <view>
- <image @tap='openuser(m.user)' :src="image_cache(m.user.avatar)" class="avatar"></image>
- </view>
- <view>
- <view >
- <span class='nickname' @tap='openuser(m.user)'>{{m.user.nickname}}</span>申请加入<span class='nickname' @tap='opengroup(m.group)'>{{m.group.nickname}}</span>
- </view>
- <scroll-view scroll-y="true" :scroll-top="m.content1.length*20" v-if="m.content1.length>0" style="max-height:32px;">
- <view v-for="(m1,index1) in m.content1" :key='index1' class="mark">
- {{m1}}
-
- </view>
- </scroll-view>
- <view v-if="m.status==0">
-
- <button class="btns ok" @tap="deal_apply(m.id,1,index)">
- <uni-icons type='checkmarkempty' style="color:#FFF"></uni-icons>
- 同意</button>
- <button class="btns clear" @tap="deal_apply(m.id,2,index)">
- <uni-icons type='closeempty'></uni-icons>拒绝</button>
-
-
- </view>
- <view v-else style="color:#666;font-size: 14px;">
- <block v-if="m.apply_uid!=userid">其他人</block>
- <block v-if="m.status==1">已同意</block>
- <block v-else>已拒绝</block>
- </view>
- </view>
- </view>
-
- </block>
- </block>
- <view class="nodata" v-else >
- 暂无群组验证消息
-
- </view>
- </block>
-
- </block>
-
- <view class="loading" v-else style="padding-top: 70px;" >
- <view class="spinner">
- <view class="rect1"></view>
- <view class="rect2"></view>
- <view class="rect3"></view>
- <view class="rect4"></view>
- <view class="rect5"></view>
- </view>
- </view>
- <layer v-if="showlayer" title="确定要拒绝申请?" placeholder="请输入拒绝理由" isradio=true radiotext="同时设置为黑名单" btn_ok="确认" @close="showlayer=false;" @sub="layer_sub" ></layer>
-
- </view>
- </template>
- <script>
- import api from "../../library/index.js"
- import http from "../../library/http.js"
- import config from "../../config.js"
- import uniIcons from '../../components/uni-icons/uni-icons.vue'
- import headerline from '../../components/header.vue'
- import layer from '../../components/layer.vue'
- var windowHeight= uni.getSystemInfoSync().windowHeight;
- var statusBarHeight = uni.getSystemInfoSync().statusBarHeight ;
- var contenttop=statusBarHeight+45;
- var conentheight=windowHeight-contenttop;
- var lottHeight= conentheight-30;
- var lottTop= contenttop + 30;
- export default {
- components: {
- uniIcons,
- headerline,
- layer
- },
- data() {
- return {
- statusBarHeight: statusBarHeight+ 'px',
- contenttop:contenttop+'px',
- contentheight:conentheight+'px',
- lottHeight:lottHeight+'px',
- lottTop:lottTop+'px',
- shownav:true,
- navitem:['好友','群组'],
- navselect:0,
- system:uni.getStorageSync('system'),
-
- userid:uni.getStorageSync('access_token'),
- user:uni.getStorageSync('userInfo'),
- group_lists:uni.getStorageSync('group_applylist'),
- friend_lists:uni.getStorageSync('friend_applylist'),
- isloading:true,
- page:1,
- showlayer:false,
- senddata:{},
- index:0,
- applytype:'friend',
- unreadnum:[0,0],
- num1:0,
- num2:0,
-
- }
- },
- methods: {
- timestampFormat( timestamp ) {
- let curTimestamp = parseInt(new Date().getTime() / 1000), //当前时间戳
- timestampDiff = curTimestamp - timestamp, // 参数时间戳与当前时间戳相差秒数
- curDate = new Date( curTimestamp * 1000 ), // 当前时间日期对象
- tmDate = new Date( timestamp * 1000 ), // 参数时间戳转换成的日期对象
- Y = tmDate.getFullYear(),
- m = tmDate.getMonth() + 1, d = tmDate.getDate(),
- H = tmDate.getHours(), i = tmDate.getMinutes(),
- s = tmDate.getSeconds();
- if ( timestampDiff < 60 ) { // 一分钟以内
- return "刚刚";
- } else if( timestampDiff < 3600 ) { // 一小时前之内
- return Math.floor( timestampDiff / 60 ) + "分钟前";
- } else if ( curDate.getFullYear() == Y && curDate.getMonth()+1 == m && curDate.getDate() == d ) {
- return '今天 ' + ((String(H).length == 1 ? '0' : '') + H) + ':' + ((String(i).length == 1 ? '0' : '') + i);
- } else {
- var newDate = new Date( (curTimestamp - 86400) * 1000 ); // 参数中的时间戳加一天转换成的日期对象
- if ( newDate.getFullYear() == Y && newDate.getMonth()+1 == m && newDate.getDate() == d ) {
- return '昨天 ' + ((String(H).length == 1 ? '0' : '') + H) + ':' + ((String(i).length == 1 ? '0' : '') + i);
- } else if ( curDate.getFullYear() == Y ) {
- return ((String(m).length == 1 ? '0' : '') + m) + '月' + ((String(d).length == 1 ? '0' : '') + d) + '日 ' + ((String(H).length == 1 ? '0' : '') + H) + ':' + ((String(i).length == 1 ? '0' : '') + i);
- } else {
- return Y + '年' + ((String(m).length == 1 ? '0' : '') + m) + '月' + ((String(d).length == 1 ? '0' : '') + d) + '日 ' + ((String(H).length == 1 ? '0' : '') + H) + ':' + ((String(i).length == 1 ? '0' : '') + i);
- }
- }
- },
- openuser(m){
- this.$jump('friend.detail',m);
- },
- opengroup(m){
- this.$jump('group.detail',m);
- },
- layer_sub(e){
-
- var data=this.senddata;
-
- if(this.applytype=='group'){
- data['apply']=e;
- this.$socket.send(data);
- this.group_lists[this.index].status=this.senddata.status;
- this.group_lists[this.index].apply_uid=this.user.id;
- this.showlayer=false;
- }
- else
- {
- this.friend_lists[this.index].status=this.senddata.status;
- data['apply']=JSON.stringify(e);
- http.setWait(false).post('user.php?act=handleFriendApply',data).then(res=>{
- if(res.code==200){
- this.getFriendData();
- this.showlayer=false;
- }else{
- uni.showToast({
- title:'网络错误,请稍后再试',
- icon:'none'
- })
- }
-
-
- })
-
-
-
- }
-
-
- },
- deal_apply(applyid,status,index) {
- if(status==1){
-
- this.senddata={type:'deal_group_apply',userid:this.user.id,applyid:applyid,status:status}
- this.index=index;
- this.$socket.send(this.senddata);
- this.group_lists[this.index].status=this.senddata.status;
- this.group_lists[this.index].apply_uid=this.user.id;
-
- }else{
- this.showlayer=true;
- this.senddata={type:'deal_group_apply',userid:this.user.id,applyid:applyid,status:status}
- this.index=index;
- this.applytype='group';
- }
-
-
-
- },
-
- deal_userapply(applyid,status,index) {
-
- if(status==1){
-
- this.friend_lists[index].status=status;
-
- http.setWait(false).post('user.php?act=handleFriendApply',{userid:this.user.id,id:applyid,status:status}).then(res=>{
- if(res.code==200){
- this.getFriendData();
-
- }else{
- uni.showToast({
- title:'网络错误,请稍后再试',
- icon:'none'
- })
- }
-
-
- })
-
- }
- else{
- this.showlayer=true;
- this.senddata={userid:this.user.id,id:applyid,status:status};
- this.index=index;
- this.applytype='friend';
- }
-
-
- },
- tapnav(e){
- this.navselect=e;
- this.page=1;
- if(e==1) this.getGroupData();
- else this.getFriendData();
- },
- getFriendData(){
-
- try{
- if(this.friend_lists.length>0)
- this.isloading=false;
- else
- this.isloading=true;
- }catch(e){
- //TODO handle the exception
- this.isloading=true;
- }
-
-
- http.setWait(false).get('user.php?act=getFriendApply',{userid:this.user.id,page:this.page}).then(res=>{
- if(res.code==200){
- this.isloading=false;
-
- if(this.page==1){
- this.friend_lists=res.data;
- uni.setStorageSync('friend_applylist',res.data);
- var num=0;
- for(var i=0;i<res.data.length;i++){
- var item=res.data[i];
- if(item.status==0){
- num=1;
- break;
- }
- }
- this.setunread(0,num);
- }
- else {
- this.friend_lists.push(...res.data)
- this.page++;
- }
-
- }else{
- uni.showToast({
- title:'网络错误,请稍后再试',
- icon:'none'
- })
- }
-
-
- })
-
- },
-
- setunread(index,num){
- if(index==0) this.num1=num;
- else this.num2=num;
-
- this.unreadnum.splice(0,2);
- this.unreadnum.push(this.num1);
- this.unreadnum.push(this.num2);
- this.$forceUpdate();
- },
- getGroupData(){
- try{
- if(this.group_lists.length>0)
- this.isloading=false;
- else
- this.isloading=true;
- }catch(e){
- //TODO handle the exception
- this.isloading=true;
- }
-
- http.setWait(false).get('group.php?act=applylist',{userid:this.user.id,page:this.page}).then(res=>{
- if(res.code==200){
- this.isloading=false;
- if(this.page==1){
- this.group_lists=res.data;
- uni.setStorageSync('group_applylist',res.data);
- var num=0;
- for(var i=0;i<res.data.length;i++){
- var item=res.data[i];
- if(item.status==0){
- num=1;
- break;
- }
- }
- this.setunread(1,num);
-
- }
- else {
- this.group_lists.push(...res.data);
- this.page++;
- }
-
- }else{
- uni.showToast({
- title:'网络错误,请稍后再试',
- icon:'none'
- })
- }
-
-
- })
-
- }
-
- },
- onReachBottom() {
- if(this.page==1)this.page++;
- if(this.navselect==1)this.getGroupData();
- else this.getFriendData();
- },
-
- onPullDownRefresh() {
- this.page=1;
- if(this.navselect==1)this.getGroupData();
- else this.getFriendData();
- },
- onLoad(opts) {
- if(opts.type=='group') this.navselect=1;
- else this.navselect=0;
-
-
-
- this.getGroupData();
- this.getFriendData();
- this.$socket.on('deal_response', (res) => {
-
- uni.showToast({
- title:res.data.message,
- icon:'none'
- })
- this.page=1;
- if(this.navselect==1) this.getGroupData();
- else this.getFriendData();
-
-
- })
- },
- onUnload() {
- this.$socket.off('deal_response')
- }
-
-
- }
- </script>
- <style lang="scss">
- @import "@/static/css/group.css";
- .page{
- background-color: #FAFAFA;
- }
- .nodata{
- height: 30px;
- line-height: 30px;
- text-align: center;
- color: #666;
- }
- .lines{
- margin: 0px auto;
- background-color: #FFF;
- padding: 5px 0px;
- width: 100%;
- display: table;
- table-layout: fixed;
- }
- .lines > view{
- display: table-cell;
- }
- .lines > view:first-child{
- width: 60px;
- text-align: right;
- }
- .lines > view:nth-child(2){
-
- text-align: left;
- padding-left: 10px;;
- line-height: 20px;
- vertical-align: top;
- }
- .lines .avatar{
- height: 50px;
- width: 50px;
- border-radius: 5px;
- vertical-align: middle;
- }
- .lines .nickname{
- color: #2319DC;
- display: inline-block;
- }
- .lines .btns{
- padding: 0px 10px;
- height: 25px;
- line-height: 25px;
- text-align: center;
- border-radius: 5px;
- font-size: 14px;
- display: inline-block;
- vertical-align: middle;
- cursor: pointer;
- margin-right: 20px;
- }
- .lines .btns.clear{
- border: 1px solid #666;
- color: #666;
- background-color: #fff;
- }
- .lines .btns.ok{
- // background: -webkit-linear-gradient(left top, #3388ff , #2319dc);
- // background: -o-linear-gradient(bottom right, #3388ff, #2319dc);
- // background: -moz-linear-gradient(bottom right, #3388ff, #2319dc);
- // background: linear-gradient(to bottom right, #3388ff , #2319dc);
- background: $base-color;
- color: #fff;
- }
- .lines .mark{
- color: #666;
- font-size: 12px;;
- height: 16px;
- line-height: 16px;;
- }
- .times{
- height: 25px;
- line-height: 25px;
- text-align: center;
- color: #999;
- font-size: 12px;
- }
- .loading {
- //loading动画
- display: flex;
- justify-content: center;
-
- @keyframes stretchdelay {
-
- 0%,
- 40%,
- 100% {
- transform: scaleY(0.6);
- }
-
- 20% {
- transform: scaleY(1.0);
- }
- }
-
- .spinner {
- margin: 20upx 0;
- width: 60upx;
- height: 25px;
- display: flex;
- align-items: center;
- justify-content: space-between;
-
- view {
- background-color: #ff9800;
- height: 25px;
- width: 3px;
- border-radius: 3px;
- animation: stretchdelay 1.2s infinite ease-in-out;
- }
-
- .rect2 {
- animation-delay: -1.1s;
- }
-
- .rect3 {
- animation-delay: -1.0s;
- }
-
- .rect4 {
- animation-delay: -0.9s;
- }
-
- .rect5 {
- animation-delay: -0.8s;
- }
- }
- }
- </style>
|