作者 杨育虎

Merge remote-tracking branch 'origin/master'

@@ -53,7 +53,7 @@ class GroupController extends AdminBaseController @@ -53,7 +53,7 @@ class GroupController extends AdminBaseController
53 */ 53 */
54 public function index(){ 54 public function index(){
55 $group=$this->GroupModel->getAllGroup()->toArray(); 55 $group=$this->GroupModel->getAllGroup()->toArray();
56 - dump($group); 56 + //dump($group);
57 $this->assign('group',$group); 57 $this->assign('group',$group);
58 return $this->fetch(); 58 return $this->fetch();
59 } 59 }
@@ -81,7 +81,7 @@ class GroupController extends AdminBaseController @@ -81,7 +81,7 @@ class GroupController extends AdminBaseController
81 $update['delete_time']=time(); 81 $update['delete_time']=time();
82 $result=$this->GroupModel->where($map)->Update($update); 82 $result=$this->GroupModel->where($map)->Update($update);
83 if ($result){ 83 if ($result){
84 - $this->success('删除成功!'); 84 + $this->success('删除成功!');
85 }else{ 85 }else{
86 $this->error('操作失败!'); 86 $this->error('操作失败!');
87 } 87 }
@@ -139,11 +139,52 @@ class GroupController extends AdminBaseController @@ -139,11 +139,52 @@ class GroupController extends AdminBaseController
139 } 139 }
140 $this->error('添加失败'); 140 $this->error('添加失败');
141 } 141 }
  142 + /**
  143 + *群内人员信息
  144 + */
  145 + public function groupPeople(){
  146 + $Group=$this->GroupModel;
  147 + $group=$Group->getGroup(input('id'));
  148 + $map['g.delete_time']=null;
  149 + $map['g.group_id']=input('id');
  150 + $list=db('group_user')
  151 + ->alias('g')
  152 + ->field('g.id as gid,u.*')
  153 + ->where($map)
  154 + ->join('user u','g.user_id=u.id')
  155 + ->paginate('20');
  156 + $page = $list->render();
  157 + $this->assign('group', $group);
  158 + $this->assign('list', $list);
  159 + $this->assign('page', $page);
  160 + return $this->fetch();
  161 + }
142 162
  163 + /**
  164 + * 拉黑用户
  165 + */
  166 + public function banUser(){
  167 + $map['id']=input('id');
  168 + $result=db('group_user')->where($map)->delete();
  169 + if ($result==1){
  170 + $this->success('删除用户!');
  171 + }else{
  172 + $this->error('删除失败!');
  173 + }
  174 + }
143 175
  176 + public function groupPeopleAdd(){
144 177
145 -  
146 -  
147 - 178 + $user_id=explode(',',input('user_id'));
  179 + dump($user_id);
  180 + foreach ($user_id as $k=>$v){
  181 + $insert[$k]['user_id']=$v;
  182 + $insert[$k]['group_id']=input('group_id');
  183 + $insert[$k]['addtime']=time();
  184 + }
  185 + dump($insert);
  186 + db('group_user')->insertAll($insert);
  187 + // $this->success();
  188 + }
148 189
149 } 190 }
@@ -53,6 +53,45 @@ class CommonController extends AdminBaseController @@ -53,6 +53,45 @@ class CommonController extends AdminBaseController
53 return $this->fetch(); 53 return $this->fetch();
54 } 54 }
55 55
  56 + public function selectUsersMore()
  57 + {
  58 + $param = $this->request->param();
  59 + $ids = $this->request->param('ids');
  60 + $selectedIds = explode(',',$ids);
  61 + if (!is_array($selectedIds)) {
  62 + $selectedIds = [$selectedIds];
  63 + }
  64 +
  65 + $where['user_type'] = ['in','1,2,3'];
  66 + $request = input('request.');
  67 +
  68 + if (!empty($request['uid'])) {
  69 + $where['id'] = intval($request['uid']);
  70 + }
  71 + $keywordComplex = [];
  72 + if (!empty($request['keyword'])) {
  73 + $keyword = $request['keyword'];
  74 +
  75 + $keywordComplex['user_login|user_nickname|mobile'] = ['like', "%$keyword%"];
  76 + }
  77 + $usersQuery = Db::name('user');
  78 + $list = $usersQuery->field('id,user_nickname,user_login,avatar,mobile')
  79 + ->whereOr($keywordComplex)
  80 + ->where($where)
  81 + ->order("create_time DESC")
  82 + ->paginate(50);
  83 + $list->appends($param);
  84 +
  85 + $this->assign('selectedIds', $selectedIds);
  86 + $this->assign('uid', isset($param['uid']) ? $param['uid'] : '');
  87 + $this->assign('keyword', isset($param['keyword']) ? $param['keyword'] : '');
  88 + $this->assign('ids', isset($param['ids']) ? $param['ids'] : '');
  89 + $this->assign('list', $list->items());
  90 + $this->assign('page', $list->render());
  91 +
  92 + return $this->fetch();
  93 + }
  94 +
56 public function selectGroup(){ 95 public function selectGroup(){
57 $param = $this->request->param(); 96 $param = $this->request->param();
58 $ids = $this->request->param('ids'); 97 $ids = $this->request->param('ids');
@@ -47,12 +47,15 @@ class FriendsController extends WeChatBaseController @@ -47,12 +47,15 @@ class FriendsController extends WeChatBaseController
47 if (empty($isin)){ 47 if (empty($isin)){
48 $this->error(); 48 $this->error();
49 } 49 }
  50 + $silence=$this->GroupModel->silenceCheck($user_id,$group_id);
  51 +
50 $group=$this->GroupModel->getGroup($group_id); 52 $group=$this->GroupModel->getGroup($group_id);
51 $info=$this->GroupModel->getFriendsInfo($group_id); 53 $info=$this->GroupModel->getFriendsInfo($group_id);
52 $article=$this->GroupModel->getArticleList($group_id)->toArray(); 54 $article=$this->GroupModel->getArticleList($group_id)->toArray();
53 foreach ($article as $k=>$v){ 55 foreach ($article as $k=>$v){
54 $article[$k]['pic']=cmf_get_image_url(json_decode($v['amore'],true)['thumbnail']); 56 $article[$k]['pic']=cmf_get_image_url(json_decode($v['amore'],true)['thumbnail']);
55 } 57 }
  58 + $this->assign('silence',$silence);
56 $this->assign('info',$info); 59 $this->assign('info',$info);
57 $this->assign('group',$group); 60 $this->assign('group',$group);
58 $this->assign('article',$article); 61 $this->assign('article',$article);
@@ -178,4 +178,21 @@ class GroupModel extends Model @@ -178,4 +178,21 @@ class GroupModel extends Model
178 return $article; 178 return $article;
179 } 179 }
180 180
  181 + /**
  182 + * 检查是否可用发送朋友圈
  183 + * @param $user_id
  184 + * @param $group_id
  185 + */
  186 + public function silenceCheck($user_id,$group_id){
  187 + /*检查是否为版主*/
  188 + /*检查是否开启禁言*/
  189 + $group=$this->getGroup($group_id);
  190 + if ($group['silence']=='0'){
  191 + return 0;
  192 + }
  193 + if ($user_id==$group['owner']){
  194 + return 0;
  195 + }
  196 + return 1;
  197 + }
181 } 198 }
  1 +<include file="public@header"/>
  2 +</head>
  3 +<body>
  4 +<div class="wrap">
  5 + <ul class="nav nav-tabs">
  6 + <li class="active"><a>{$group.name}</a></li>
  7 + </ul>
  8 + <form class="well form-inline margin-top-20 js-ajax-form" method="post" action="{:url('groupPeopleAdd',['group_id'=>$group.id])}">
  9 + 添加用户
  10 + <input class="form-control" type="text" required="" placeholder="请选择用户" onclick="doSelectUsers();" id="js-users-name-input" readonly="" aria-required="true">
  11 + <input class="form-control" type="hidden" value="" name="user_id" id="js-users-id-input"/>
  12 + <input type="submit" class="btn btn-primary js-ajax-submit" value="确定"/>
  13 +
  14 + <a class="btn btn-danger" href="{:url('user/adminIndex/index')}">清空</a>
  15 + </form>
  16 + <form method="post" class="js-ajax-form">
  17 + <table class="table table-hover table-bordered">
  18 + <thead>
  19 + <tr>
  20 + <th>ID</th>
  21 + <th>{:lang('USERNAME')}</th>
  22 + <th>姓名</th>
  23 + <th>头像</th>
  24 + <th>手机</th>
  25 + <th>注册时间</th>
  26 + <th>{:lang('LAST_LOGIN_TIME')}</th>
  27 + <th>{:lang('LAST_LOGIN_IP')}</th>
  28 + <th>{:lang('STATUS')}</th>
  29 + <th>{:lang('ACTIONS')}</th>
  30 + </tr>
  31 + </thead>
  32 + <tbody>
  33 + <php>
  34 + $user_statuses=array("0"=>lang('USER_STATUS_BLOCKED'),"1"=>lang('USER_STATUS_ACTIVATED'),"2"=>lang('USER_STATUS_UNVERIFIED'));
  35 + </php>
  36 + <foreach name="list" item="vo">
  37 + <tr>
  38 + <td>{$vo.gid}</td>
  39 + <td>{$vo['user_login']?$vo['user_login']:($vo['mobile']?$vo['mobile']:lang('THIRD_PARTY_USER'))}
  40 + </td>
  41 + <td>{$vo['user_nickname']?$vo['user_nickname']:lang('NOT_FILLED')}</td>
  42 + <td><img width="25" height="25" src="{:url('user/public/avatar',array('id'=>$vo['id']))}"/></td>
  43 + <td>{$vo.mobile}</td>
  44 + <td>{:date('Y-m-d H:i:s',$vo['create_time'])}</td>
  45 + <td>{:date('Y-m-d H:i:s',$vo['last_login_time'])}</td>
  46 + <td>{$vo.last_login_ip}</td>
  47 + <td>{$user_statuses[$vo['user_status']]}</td>
  48 + <td>
  49 + <neq name="vo.id" value="1">
  50 + <empty name="vo.user_status">
  51 + <a href="{:url('adminIndex/cancelban',array('id'=>$vo['id']))}"
  52 + class="js-ajax-dialog-btn"
  53 + data-msg="{:lang('ACTIVATE_USER_CONFIRM_MESSAGE')}">{:lang('ACTIVATE_USER')}</a>
  54 + <else/>
  55 + <a href="{:url('banUser',array('id'=>$vo['gid']))}" class="js-ajax-dialog-btn"
  56 + data-msg="{:lang('BLOCK_USER_CONFIRM_MESSAGE')}">{:lang('BLOCK_USER')}</a>
  57 + </empty>
  58 + <else/>
  59 + <a style="color: #ccc;">{:lang('BLOCK_USER')}</a>
  60 + </neq>
  61 + </td>
  62 + </tr>
  63 + </foreach>
  64 + </tbody>
  65 + </table>
  66 + <div class="pagination">{$page}</div>
  67 + </form>
  68 +</div>
  69 +<script src="__STATIC__/js/admin.js"></script>
  70 +<script type="application/javascript">
  71 + function doSelectUsers() {
  72 + var selectedUsersId = $('#js-users-id-input').val();
  73 + openIframeLayer("{:url('portal/Common/selectUsersMore')}?ids=" + selectedUsersId, '请选择分类', {
  74 + area: ['1200px', '800px'],
  75 + btn: ['确定', '取消'],
  76 + yes: function (index, layero) {
  77 + //do something
  78 + var iframeWin = window[layero.find('iframe')[0]['name']];
  79 + var selectedUsers = iframeWin.confirm();
  80 + if (selectedUsers.selectedUsersId.length == 0) {
  81 + layer.msg('请选择分类');
  82 + return;
  83 + }
  84 + $('#js-users-id-input').val(selectedUsers.selectedUsersId.join(','));
  85 + $('#js-users-name-input').val(selectedUsers.selectedUsersName.join(' '));
  86 + //console.log(layer.getFrameIndex(index));
  87 + layer.close(index); //如果设定了yes回调,需进行手工关闭
  88 + }
  89 + });
  90 + }
  91 +</script>
  92 +</body>
  93 +</html>
@@ -27,6 +27,7 @@ @@ -27,6 +27,7 @@
27 <td> 27 <td>
28 <a href="{:url('GroupEdit',['id'=>$vo.id])}">编辑圈子</a> 28 <a href="{:url('GroupEdit',['id'=>$vo.id])}">编辑圈子</a>
29 <a href="{:url('GroupArticle',['id'=>$vo.id])}">圈子文章管理</a> 29 <a href="{:url('GroupArticle',['id'=>$vo.id])}">圈子文章管理</a>
  30 + <a href="{:url('GroupPeople',['id'=>$vo.id])}">圈子人员管理</a>
30 </td> 31 </td>
31 32
32 <td><a class="js-ajax-delete" href="{:url('GroupDel',['id'=>$vo.id])}">删除</a></td> 33 <td><a class="js-ajax-delete" href="{:url('GroupDel',['id'=>$vo.id])}">删除</a></td>
  1 +<include file="public@header"/>
  2 +</head>
  3 +<body>
  4 +<div class="wrap js-check-wrap" style="min-width: inherit">
  5 + <form class="well form-inline margin-top-20" method="post" action="">
  6 + 用户ID:
  7 + <input class="form-control" type="text" name="uid" style="width: 200px;" value="{$uid}"
  8 + placeholder="请输入用户ID">
  9 + 关键字:
  10 + <input class="form-control" type="text" name="keyword" style="width: 200px;" value="{$keyword}"
  11 + placeholder="昵称/电话">
  12 + <input type="submit" class="btn btn-primary" value="搜索"/>
  13 + <a class="btn btn-danger" href="">清空</a>
  14 + </form>
  15 + <form method="post" class="js-ajax-form" action="">
  16 + <table class="table table-hover table-bordered table-list">
  17 + <thead>
  18 + <tr>
  19 + <th width="16">
  20 + <label>
  21 + <input type="checkbox" class="js-check-all" data-direction="x" data-checklist="js-check-x">
  22 + </label>
  23 + </th>
  24 + <th width="50">ID</th>
  25 + <th>姓名</th>
  26 + <th>头像</th>
  27 + <th>电话</th>
  28 + </tr>
  29 + </thead>
  30 + <tbody id="tb">
  31 + <foreach name="list" item="vo">
  32 + <tr id="check-tr">
  33 + <td >
  34 + <input type="checkbox" id="in{$vo.id}" class="js-check" data-yid="js-check-y" data-xid="js-check-x" name="ids[]"
  35 + value="{$vo.id}" data-name="{$vo.user_login}" <if condition="in_array($vo['id'],$selectedIds)"> checked</if> >
  36 + </td>
  37 + <td>{$vo.id}</td>
  38 + <td>{$vo.user_login|default=$vo.user_nickname}</td>
  39 + <td><img width="50px" src="{$vo.avatar}"></td>
  40 + <td>{$vo.mobile}</td>
  41 + </tr>
  42 + </foreach>
  43 + </tbody>
  44 + </table>
  45 + </form>
  46 +</div>
  47 +<script src="__STATIC__/js/admin.js"></script>
  48 +<script>
  49 + // $('.js-check').click(function(e) {
  50 + // var sel_id='in'+e.currentTarget.defaultValue;
  51 + //
  52 + // $( ".js-check" ).each( function(res) {
  53 + // console.log(res)
  54 + // $(".js-check").eq(res).prop("checked",false)
  55 + // $('#'+sel_id).prop("checked",true)
  56 + // } );
  57 + // }
  58 + //
  59 + // )
  60 + $('.data-item-tr').click(function (e) {
  61 +
  62 + console.log(e);
  63 + var $this = $(this);
  64 + if ($(e.target).is('input')) {
  65 + return;
  66 + }
  67 +
  68 + var $input = $this.find('input');
  69 + if ($input.is(':checked')) {
  70 + $input.prop('checked', false);
  71 + } else {
  72 + $input.prop('checked', true);
  73 + }
  74 + });
  75 +
  76 + function confirm() {
  77 + var selectedUsersId = [];
  78 + var selectedUsersName = [];
  79 + var selectedUsers = [];
  80 + $('.js-check:checked').each(function () {
  81 + var $this = $(this);
  82 + selectedUsersId.push($this.val());
  83 + selectedUsersName.push($this.data('name'));
  84 +
  85 + selectedUsers.push({
  86 + id: $this.val(),
  87 + name: $this.data('name')
  88 + });
  89 + });
  90 +
  91 + return {
  92 + selectedUsers: selectedUsers,
  93 + selectedUsersId: selectedUsersId,
  94 + selectedUsersName: selectedUsersName
  95 + };
  96 + }
  97 +</script>
  98 +</body>
  99 +</html>
@@ -31,9 +31,11 @@ @@ -31,9 +31,11 @@
31 <div style="font-size: 0.28rem;">{$group.descripe}</div> 31 <div style="font-size: 0.28rem;">{$group.descripe}</div>
32 </div> 32 </div>
33 <div class='content_box' hidden> 33 <div class='content_box' hidden>
34 - <div class="top_btn">  
35 - <div class='collect_box'>发动态</div>  
36 - </div> 34 + <if condition="$silence==0">
  35 + <div class="top_btn">
  36 + <div class='collect_box'>发动态</div>
  37 + </div>
  38 + </if>
37 <volist name="$info" id="v"> 39 <volist name="$info" id="v">
38 <div class='content_item' > 40 <div class='content_item' >
39 <div class='left_box'> 41 <div class='left_box'>