瀏覽代碼

Merge branch 'talksec_b' into unrate

stanley-king 6 年之前
父節點
當前提交
8715e0b8fe

+ 0 - 14
.idea/php-test-framework.xml

@@ -1,14 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
-  <component name="PhpTestFrameworkVersionCache">
-    <tools_cache>
-      <tool tool_name="PHPUnit">
-        <cache>
-          <versions>
-            <info id="Local" version="5.4.4" />
-          </versions>
-        </cache>
-      </tool>
-    </tools_cache>
-  </component>
-</project>

+ 0 - 8
.idea/php.xml

@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
-  <component name="PhpUnit">
-    <phpunit_settings>
-      <PhpUnitSettings load_method="PHPUNIT_PHAR" custom_loader_path="" phpunit_phar_path="$PROJECT_DIR$/../phpunit-5.4.4.phar" />
-    </phpunit_settings>
-  </component>
-</project>

+ 5 - 2
data/model/room.model.php

@@ -160,9 +160,12 @@ class roomModel extends Model
     }
 
     /////////////////////////////////////////////
-    public function roomApplys($room,$field="*",$limit=10,$order='apply_id desc')
+    public function applyCnts($cond){
+        return $this->table('room_apply')->where($cond)->count();
+    }
+    public function roomApplys($room,$field="*",$page=20,$order='apply_id desc')
     {
-        return $this->table('room_apply')->field($field)->where(['room_id' => $room])->order($order)->limit($limit)->select();
+        return $this->table('room_apply')->field($field)->where(['room_id' => $room])->page($page)->order($order)->select();
     }
     public function findApply($apply_id){
         return $this->table('room_apply')->field('*')->where(['apply_id' => $apply_id])->find();

+ 8 - 1
data/resource/mobile/talk/css/homepage.css

@@ -58,7 +58,14 @@ html,body {
 
 .quit a {
     margin: 10px auto;
-    width: 320px;
+    width: 80%;
+}
+
+.join_item_btn {
+    width: 100%;
+    position: fixed;
+    bottom: 30px;
+    background: #ffffff;
 }
 
 .group_info {

+ 41 - 0
data/resource/mobile/talk/css/room_apply.css

@@ -0,0 +1,41 @@
+.weui-cells {
+    margin-top: 0;
+}
+
+.weui-cell__hd img {
+    width: 40px;
+    display: block;
+}
+
+.apply_name {
+    font-size: 15px;
+}
+
+.abstract, .state {
+    font-size: 12px;
+    color: #666666;
+}
+
+.weui-cell:before {
+    left: 0;
+}
+
+.handle {
+    font-size: 12px;
+    color: #ffffff;
+}
+
+.refusal_btn, .agree_btn {
+    padding: 5px 10px;
+    border-radius: 14px;
+    cursor: pointer;
+}
+
+.refusal_btn {
+    background: #DD4545;
+    margin-right: 10px;
+}
+
+.agree_btn {
+    background: #2B2B2B;
+}

+ 192 - 0
data/resource/mobile/talk/js/room_apply.js

@@ -0,0 +1,192 @@
+$(function () {
+    FastClick.attach(document.body);
+
+    var getHrefArguments = function (getKey) {
+        var arguments_object = {};
+        var location = window.location.href;
+        var location_arguments = location.split("?");
+        var arguments = location_arguments[1].split("&");
+
+        for (var i = 0; i < arguments.length; i++) {
+            arguments_object[arguments[i].split("=")[0]] = arguments[i].split("=")[1];
+        }
+        return arguments_object[getKey];
+    };
+
+
+    var GetApplyList = function () {
+        this.curpage = 1;
+        this.hasmore = true;
+        this.init = function () {
+            this.getData();
+        };
+        this.getData = function (curpage) {
+            var _self = this;
+            if(!_self.hasmore) return;
+            $.showLoading();
+            $.get("/mobile/index.php", {
+                act: "member_talk",
+                op: "ajax_room_apply",
+                room_id: getHrefArguments("talk_id"),
+                client_type: "ajax",
+                curpage: _self.curpage
+            }, function (res) {
+                $.hideLoading();
+                var applyList = JSON.parse(res);
+                if (applyList.code != 200) {
+                    $.alert(applyList.message);
+                    return;
+                }
+                var applyHTML = new ApplyHTML(applyList.datas.applys);
+                applyHTML.appendHTML("#apply_list");
+                if (applyList.datas.mobile_page.hasmore) {
+                    _self.curpage = applyList.datas.mobile_page.curpage+1;
+                    _self.hasmore = true;
+                    applyHTML.loadHTML("#load_state");
+                }
+                else {
+                    $(window).off('scroll');
+                    _self.hasmore = false;
+                    applyHTML.endHTML("#load_state");
+                }
+            })
+        };
+    };
+
+
+    var ApplyHTML = function (datas) {
+        this.applyList = datas;
+        this.endHTML = function(id){
+            var endHTML = "<div class=\"weui-loadmore weui-loadmore_line\">\n" +
+                "  <span class=\"weui-loadmore__tips\">我是有底线的</span>\n" +
+                "</div>";
+
+            $(id).empty().append(endHTML);
+        };
+        this.loadHTML = function(id){
+            var loadHTML = "<div class=\"weui-loadmore\">\n" +
+                "  <i class=\"weui-loading\"></i>\n" +
+                "  <span class=\"weui-loadmore__tips\">正在加载</span>\n" +
+                "</div>";
+            $(id).empty().append(loadHTML);
+        };
+        this.appendHTML = function (id) {
+            var html = "";
+            for (var i = 0; i < this.applyList.length; i++) {
+                if (this.applyList[i].step == 1 || this.applyList[i].step == 2) {
+                    if (this.applyList[i].step == 1) {
+                        html += "<div class=\"weui-cell\">\n" +
+                            "        <div class=\"weui-cell__hd\">\n" +
+                            "            <img src=\"" + this.applyList[i].avatar + "\">\n" +
+                            "        </div>\n" +
+                            "        <div class=\"weui-cell__bd\">\n" +
+                            "            <p class=\"apply_name\">" + this.applyList[i].nickname + "</p>\n" +
+                            "            <p class=\"abstract\">" + this.applyList[i].msg + "</p>\n" +
+                            "        </div>\n" +
+                            "        <div class=\"weui-cell__ft\">\n" +
+                            "            <span class=\"state\">已接受</span>\n" +
+                            "        </div>\n" +
+                            "    </div>"
+                    }
+                    else {
+                        html += "<div class=\"weui-cell\">\n" +
+                            "        <div class=\"weui-cell__hd\">\n" +
+                            "            <img src=\"" + this.applyList[i].avatar + "\">\n" +
+                            "        </div>\n" +
+                            "        <div class=\"weui-cell__bd\">\n" +
+                            "            <p class=\"apply_name\">"+ this.applyList[i].nickname +"</p>\n" +
+                            "            <p class=\"abstract\">"+this.applyList[i].msg+"</p>\n" +
+                            "        </div>\n" +
+                            "        <div class=\"weui-cell__ft\">\n" +
+                            "            <span class=\"state\">已拒绝</span>\n" +
+                            "        </div>\n" +
+                            "    </div>"
+                    }
+                }
+                else {
+                    html += "<div class=\"weui-cell\">\n" +
+                        "        <div class=\"weui-cell__hd\">\n" +
+                        "            <img src=\"" + this.applyList[i].avatar + "\">\n" +
+                        "        </div>\n" +
+                        "        <div class=\"weui-cell__bd\">\n" +
+                        "            <p class=\"apply_name\">" + this.applyList[i].nickname + "</p>\n" +
+                        "            <p class=\"abstract\">" + this.applyList[i].msg + "</p>\n" +
+                        "        </div>\n" +
+                        "        <div class=\"weui-cell__ft\">\n" +
+                        "            <div class=\"handle\">\n" +
+                        "                <span class=\"refusal_btn\" data-apply-id=\"" + this.applyList[i].apply_id + "\">拒绝</span>\n" +
+                        "                <span class=\"agree_btn\" data-apply-id=\"" + this.applyList[i].apply_id + "\">同意</span>\n" +
+                        "            </div>\n" +
+                        "        </div>\n" +
+                        "    </div>"
+                }
+            }
+            $(id).append(html);
+        }
+    };
+
+
+    var get_apply_list = new GetApplyList();
+    get_apply_list.init();
+
+    $(window).on('scroll',function(){
+        clearTimeout(this.timer);
+        this.timer = setTimeout(function(){
+            var scrollTop = $(this).scrollTop();
+            var scrollHeight = $(document).height();
+            var windowHeight = $(this).height();
+            if(scrollTop + windowHeight == scrollHeight){
+                get_apply_list.getData();
+            }
+        },500);
+    });
+
+    $(document).on('click','.refusal_btn',function(){
+        var apply_id = $(this).attr('data-apply-id');
+        console.log(apply_id);
+        $.showLoading();
+        var _self = $(this);
+        $.get("/mobile/index.php", {
+            act: "member_talk",
+            op: "pass_apply",
+            apply_id: apply_id,
+            step:2,
+            client_type: "ajax",
+        }, function (res) {
+            $.hideLoading();
+            var data = JSON.parse(res);
+            if (data.code != 200) {
+                $.alert(data.message);
+                return;
+            }
+
+            _self.parent().parent().append("<div class=\"weui-cell__ft\"><span class=\"state\">已拒绝</span></div>");
+            _self.parent().remove();
+            $.toast('操作成功',1000);
+        })
+    });
+
+    $(document).on('click','.agree_btn',function(){
+        var apply_id = $(this).attr('data-apply-id');
+        console.log(apply_id);
+        $.showLoading();
+        var _self = $(this);
+        $.get("/mobile/index.php", {
+            act: "member_talk",
+            op: "pass_apply",
+            apply_id: apply_id,
+            step:1,
+            client_type: "ajax",
+        }, function (res) {
+            $.hideLoading();
+            var data = JSON.parse(res);
+            if (data.code != 200) {
+                $.alert(data.message);
+                return;
+            }
+            _self.parent().parent().append("<div class=\"weui-cell__ft\"><span class=\"state\">已接受</span></div>");
+            _self.parent().remove();
+            $.toast('操作成功',1000);
+        })
+    });
+});

+ 75 - 68
helper/room/tpl_group_home.php

@@ -14,6 +14,7 @@ require_once(BASE_ROOT_PATH . '/helper/util_helper.php');
 
 use Exception;
 use url_helper;
+use author_url;
 use util;
 
 class tpl_group_home
@@ -74,7 +75,6 @@ class tpl_group_home
         echo $html;
     }
 
-
     public function show_qrcode_btn()
     {
         if(isset($this->participants[$this->cur_user])){
@@ -82,7 +82,6 @@ class tpl_group_home
         }
     }
 
-
     public function show_group_notice()
     {
         $html = "";
@@ -121,7 +120,6 @@ class tpl_group_home
         echo $html;
     }
 
-
     private function isManager($user)
     {
         return intval($user) === $this->room_info->owner();
@@ -187,36 +185,40 @@ class tpl_group_home
             $notice = empty($this->room_info->notice()) ? "未设置" : "已设置";
             $desc = empty($this->room_info->room_desc()) ? "未设置" : "已设置";
             $level = $this->room_info->level() == 0 ? "未认证" : "已认证";
-            $apply = 17 > 0 ? "待处理" . 17 : "";
 
+            $cnt = $this->mod_room->applyCnts(['room_id'=>$this->room_id,"step"=>0]);
+            $apply = $cnt > 0 ? "待处理" . $cnt : "";
 
-            $html .= "<a class=\"weui-cell weui-cell_access\" id='edit_group_name' href=\"javascript:;\">
-                        <div class=\"weui-cell__bd\">
-                            <p>群名称</p>
-                        </div>
-                        <div class=\"weui-cell__ft\">{$name}</div>
-                    </a>
-                    
-                    <a class=\"weui-cell weui-cell_access\" id=\"edit_group_avatar\" href=\"javascript:;\" onclick='uploader.click()'>
-                        <div class=\"weui-cell__bd\">
-                            <p>群头像</p>
-                        </div>
-                        <div class=\"weui-cell__ft\">
-                            <img src='{$avartar}' class='g_avatar' alt=''>
-                            <input type='file' name='file' enctype='multipart/form-data' id='uploader' style=\"display: none;\">
-                        </div>
-                    </a>
-                    
-                    <a class=\"weui-cell weui-cell_access\" href=\"javascript:;\">
-                        <div class=\"weui-cell__bd\">
-                            <p>群认证</p>
-                        </div>
-                        <div class=\"weui-cell__ft\">{$level}</div>
-                    </a>";
+            $html .= "<div class=\"weui-cells\">
+                        <a class=\"weui-cell weui-cell_access\" id='edit_group_name' href=\"javascript:;\">
+                            <div class=\"weui-cell__bd\">
+                                <p>群名称</p>
+                            </div>
+                            <div class=\"weui-cell__ft\">{$name}</div>
+                        </a>
+                        
+                        <a class=\"weui-cell weui-cell_access\" id=\"edit_group_avatar\" href=\"javascript:;\" onclick='uploader.click()'>
+                            <div class=\"weui-cell__bd\">
+                                <p>群头像</p>
+                            </div>
+                            <div class=\"weui-cell__ft\">
+                                <img src='{$avartar}' class='g_avatar' alt=''>
+                                <input type='file' name='file' enctype='multipart/form-data' id='uploader' style=\"display: none;\">
+                            </div>
+                        </a>
+                        
+                        <a class=\"weui-cell weui-cell_access\" href=\"javascript:;\">
+                            <div class=\"weui-cell__bd\">
+                                <p>群认证</p>
+                            </div>
+                            <div class=\"weui-cell__ft\">{$level}</div>
+                        </a>
+                    </div>";
         }
 
         if ($this->isManager($this->cur_user)) {
-            $html.="<a class=\"weui-cell weui-cell_access\" href=\"javascript:;\" id=\"edit_room_notice\">
+            $html.="<div class=\"weui-cells\">
+                    <a class=\"weui-cell weui-cell_access\" href=\"javascript:;\" id=\"edit_room_notice\">
                         <div class=\"weui-cell__bd\">
                             <p>群公告</p>
                         </div>
@@ -230,12 +232,13 @@ class tpl_group_home
                         <div class=\"weui-cell__ft\" id=\"room-desc-btn\">{$desc}</div>
                     </a>
                     
-                    <a class=\"weui-cell weui-cell_access\" href=\"javascript:;\" id=\"edit_room_desc\">
+                    <a class=\"weui-cell weui-cell_access\" href=\"/mobile/index.php?act=member_talk&op=room_apply&talk_id={$this->room_id}\">
                         <div class=\"weui-cell__bd\">
                             <p>进群申请</p>
                         </div>
                         <div class=\"weui-cell__ft\" id=\"room-apply-btn\">{$apply}</div>
-                    </a>";
+                    </a>
+                    </div>";
         }
 
         echo $html;
@@ -247,33 +250,35 @@ class tpl_group_home
 
         if (!empty($this->participants) && isset($this->participants[$this->cur_user])) {
             $html .= "
-            <a class=\"weui-cell weui-cell_access\" href=\"javascript:;\" id='edit_nickname'>
-                <div class=\"weui-cell__bd\">
-                    <p>我在本群的昵称</p>
-                </div>
-                <div class=\"weui-cell__ft\">{$this->participants[$this->cur_user]['nickname']}</div>
-            </a>";
+            <div class=\"weui-cells\">
+                <a class=\"weui-cell weui-cell_access\" href=\"javascript:;\" id='edit_nickname'>
+                    <div class=\"weui-cell__bd\">
+                        <p>我在本群的昵称</p>
+                    </div>
+                    <div class=\"weui-cell__ft group-nickname\">{$this->participants[$this->cur_user]['nickname']}</div>
+                </a>
+            </div>";
         }
 
         if ($this->isManager($this->cur_user)) {
             $html .= "
-            <a class=\"weui-cell weui-cell_access\" href=\"javascript:;\" id='change_owner' >
-                <div class=\"weui-cell__bd\">
-                    <p>转让管理员</p>
-                </div>
-            </a>";
+            <div class=\"weui-cells\">
+                <a class=\"weui-cell weui-cell_access\" href=\"javascript:;\" id='change_owner' >
+                    <div class=\"weui-cell__bd\">
+                        <p>转让管理员</p>
+                    </div>
+                </a>
+            </div>";
         }
 
         echo $html;
     }
 
-
     public function show_group_footer()
     {
         $html = "";
         if(isset($this->participants[$this->cur_user]))
         {
-
             $html .="<div class=\"weui-cells\">";
             if ($this->isManager($this->cur_user)) {
                 $pwd = $this->room_info->passwd();
@@ -284,8 +289,9 @@ class tpl_group_home
                                     <p>群密码</p>
                                 </div>
                                 <div class=\"weui-cell__ft\">
-                                    <label for=\"talk_top\" class=\"weui-switch-cp\">
-                                        <input id=\"talk_top\" class=\"weui-switch-cp__input\" type=\"checkbox\" checked='{$pwd}'>
+
+                                    <label for=\"group_pwd\" class=\"weui-switch-cp\">
+                                        <input id=\"group_pwd\" class=\"weui-switch-cp__input\" type=\"checkbox\" checked>
                                         <div class=\"weui-switch-cp__box\"></div>
                                     </label>
                                 </div>
@@ -298,8 +304,8 @@ class tpl_group_home
                                     <p>群密码</p>
                                 </div>
                                 <div class=\"weui-cell__ft\">
-                                    <label for=\"talk_top\" class=\"weui-switch-cp\">
-                                        <input id=\"talk_top\" class=\"weui-switch-cp__input\" type=\"checkbox\">
+                                    <label for=\"group_pwd\" class=\"weui-switch-cp\">
+                                        <input id=\"group_pwd\" class=\"weui-switch-cp__input\" type=\"checkbox\">
                                         <div class=\"weui-switch-cp__box\"></div>
                                     </label>
                                 </div>
@@ -344,7 +350,6 @@ class tpl_group_home
         echo $html;
     }
 
-
     public function show_footer_btn()
     {
         $html = "";
@@ -367,41 +372,46 @@ class tpl_group_home
             $pwd = $this->room_info->passwd();
             if($pwd){
                 $html .= "
-                <div class=\"quit\" id=\"add_group_pwd\">
-                    <a href=\"javascript:;\" class=\"weui-btn weui-btn_primary\">密码入群</a>
-                </div>
-                <div class=\"quit\" id=\"add_group_apply\">
-                    <a href=\"javascript:;\" class=\"weui-btn weui-btn_primary\">申请加群</a>
+                <div class=\"join_item_btn\">
+                   <div class=\"quit\" id=\"add_group_pwd\">
+                        <a href=\"javascript:;\" class=\"weui-btn weui-btn_primary\">密码入群</a>
+                    </div>
+                    <div class=\"quit\" id=\"add_group_apply\">
+                        <a href=\"javascript:;\" class=\"weui-btn weui-btn_primary\">申请加群</a>
+                    </div> 
                 </div>";
             }
             else
             {
                 $html .= "
-                <div class=\"quit\" id=\"add_group\">
-                    <a href=\"javascript:;\" class=\"weui-btn weui-btn_primary\">立即入群</a>
+                <div class=\"join_item_btn\">
+                    <div class=\"quit\" id=\"add_group\">
+                        <a href=\"javascript:;\" class=\"weui-btn weui-btn_primary\">立即入群</a>
+                    </div>
                 </div>";
             }
         }
         echo $html;
     }
 
-
-
     public function show_qrcode()
     {
         $name = $this->room_info->name();
         $avatar = $this->room_info->avatar();
         $desc = $this->room_info->room_desc();
 
-        $url = url_helper::room_invite_url($this->room_id,$this->cur_user);
-        $save_path = BASE_UPLOAD_PATH."/room/qrcodes/{$this->room_id}_{$this->cur_user}.png";
+//        $url = url_helper::room_invite_url($this->room_id,$this->cur_user);
+//        $save_path = BASE_UPLOAD_PATH."/room/qrcodes/{$this->room_id}_{$this->cur_user}.png";
+//        $qrcode_path = BASE_SITE_URL . "/data/upload/room/qrcodes/{$this->room_id}_{$this->cur_user}.png?v=" . time();
+
+        $url = author_url::room_detail_url('room',$this->room_id);
+        $save_path = BASE_UPLOAD_PATH."/room/qrcodes/{$this->room_id}.png";
+        $qrcode_path = BASE_SITE_URL . "/data/upload/room/qrcodes/{$this->room_id}.png?v=" . time();
 
         if(!file_exists($save_path)) {
             util::qrcode_path($url, $save_path);
         }
 
-        $qrcode_path = BASE_SITE_URL . "/data/upload/room/qrcodes/{$this->room_id}_{$this->cur_user}.png?v=" . time();
-
         $html = "<div class=\"qrcode\">
                         <div class=\"qrcode_info\">
                             <img src=\"$avatar\" class=\"qrcode_avatar_img\" alt=\"\">
@@ -413,14 +423,11 @@ class tpl_group_home
                         <div class=\"group_qrcode\">
                             <img src=\"$qrcode_path\" alt=\"\">
                         </div>
+                        <p class=\"prompt\">
+                            扫一扫上面的二维码图案。加入群聊
+                        </p>
+                        <span class=\"close_btn\"></span>
                     </div>
-                    <div class=\"group_qrcode\">
-                        <img src=\"{$qrcode_path}\" alt=\"\">
-                    </div>
-                    <p class=\"prompt\">
-                        扫一扫上面的二维码图案。加入群聊
-                    </p>
-                    <span class=\"close_btn\"></span>
                  </div>";
 
         echo $html;

+ 10 - 1
helper/url_helper.php

@@ -79,7 +79,12 @@ class url_helper
     }
     public static function room_invite_url($room_id,$relay_id)
     {
-        $url = BASE_SITE_URL . "/mobile/index.php?act=index&op=room_invite&client_type=ajax&room_id={$room_id}&inviter={$inviter}&relay_id={$relay_id}";
+        $url = BASE_SITE_URL . "/mobile/index.php?act=index&op=room_invite&client_type=ajax&room_id={$room_id}&relay_id={$relay_id}";
+        return $url;
+    }
+    public static function room_detail_url($talk_type,$talk_id)
+    {
+        $url = BASE_SITE_URL . "/mobile/index.php?act=member_talk&op=room_detail&client_type=wap&talk_type={$talk_type}&talk_id={$talk_id}";
         return $url;
     }
 }
@@ -152,4 +157,8 @@ class author_url
         $url = BASE_SITE_URL . "/mobile/index.php?act=index&op=room_invite&client_type=ajax&room_id={$room_id}&relay_id={$relay_id}";
         return $url;
     }
+    public static function room_detail_url($talk_type,$talk_id){
+        $url = BASE_SITE_URL . "/mobile/index.php?act=index&op=room_detail&client_type=wap&talk_type={$talk_type}&talk_id={$talk_id}";
+        return $url;
+    }
 }

+ 2 - 2
mobile/control/control.php

@@ -297,9 +297,9 @@ class mbMemberControl extends mobileControl
 
 function bonus_version()
 {
-    return "v=20180820";
+    return "v=2018082201";
 }
 function shop_version()
 {
-    return "v=20180820";
+    return "v=2018082201";
 }

+ 18 - 0
mobile/control/index.php

@@ -141,6 +141,24 @@ class indexControl extends specialControl
             return self::outsuccess(null,"talk/share_bonus");
         }
     }
+
+
+    public function room_detailOp(){
+        $talk_type = trim($_GET['talk_type']);
+        $talk_id = intval($_GET["talk_id"]);
+
+        if(session_helper::need_wechat_author())
+        {
+            $author = new thrid_author\wxauthor();
+            $url = author_url::room_detail_url($talk_type,$talk_id);
+            $url = $author->enter($url);
+            Log::record("url:$url",Log::DEBUG);
+            return self::outsuccess(['direct_uri' => $url],"redirect");
+        }
+
+        $url = url_helper::room_detail_url($talk_type,$talk_id);
+        return self::outsuccess(['direct_uri' => $url],"redirect");
+    }
 }
 
 class tpl_member

+ 171 - 35
mobile/control/member_talk.php

@@ -92,6 +92,7 @@ class member_talkControl extends mbMemberControl
 
         $uids = [];
         foreach ($members as $member) {
+            if($member['member_id'] == session_helper::memberid()) continue;
             $uids[] = $member['member_id'];
         }
 
@@ -120,7 +121,7 @@ class member_talkControl extends mbMemberControl
                 return self::outerr(errcode::ErrParamter);
             }
             $result = $this->roomsg($msgid,$room_id);
-            $msgs = $this->format_message($result['uids'],$result['msgs'],$type,0);
+            $msgs = $this->format_message($result['uids'],$result['msgs'],$type,0,$room_id);
         }
         elseif($type == 'chatwo')
         {
@@ -138,11 +139,19 @@ class member_talkControl extends mbMemberControl
         return self::outsuccess(["msgs" => $msgs]);
     }
 
-    private function format_message($uids,$msgs,$type,$other)
+    private function format_message($uids,$msgs,$type,$other=0,$room_id=0)
     {
         $members = [];
         if(!empty($uids))
         {
+            $room_members = Model('room')->getRoomParts(["room_id"=>$room_id],'member_id,member_nick',false);
+            $nicknames = [];
+            if(!empty($room)) {
+                foreach ($room_members as $room_member){
+                    $nicknames[$room_member['member_id']] = $room_member['member_nick'];
+                }
+            }
+
             $items = Model('member')->getMemberList(['member_id' => ['in',$uids]]);
             foreach ($items as $item)
             {
@@ -151,11 +160,14 @@ class member_talkControl extends mbMemberControl
                     $info = new member_info($item);
 
                     $val = [];
+                    $mid = $info->member_id();
+                    $nickname = empty($nicknames[$mid]) ? $info->nickname() : $nicknames[$mid];
+
                     $val['avatar'] = $info->avatar();
-                    $val['nickname'] = $info->nickname();
-                    $val['userid'] = $info->member_id();
+                    $val['nickname'] = $nickname;
+                    $val['userid'] = $mid;
 
-                    $members[$info->member_id()] = $val;
+                    $members[$mid] = $val;
                 }
                 catch (Exception $ex) {
                     Log::record($ex->getMessage(),Log::ERR);
@@ -214,7 +226,7 @@ class member_talkControl extends mbMemberControl
         if(!empty($room)){
             $hide_msg = intval($room[0]["hide_msg"]);
         }else{
-            $hide_msg = 0;
+            return ['uids' => [],'msgs' => []];
         }
 
         $msgid = $msgid > $hide_msg ? $msgid : $hide_msg;
@@ -351,7 +363,18 @@ class member_talkControl extends mbMemberControl
 
         $ret = room\factory_client::instance()->invite($room_id,$this->room_creator($room_id),[session_helper::memberid()]);
 
-        return self::outsuccess(['result' => $ret]);
+        if($ret === false) {
+            return self::outerr(errcode::ErrRoom,"进群失败");
+        }
+        else
+        {
+
+            $mod_room = Model('room');
+            $room = $mod_room->getRoom($room_id);
+            $info = new room\room_info($room);
+            $result['name'] = $info->name();
+            return self::outsuccess(['result' => $ret]);
+        }
     }
 
     public function leave_faceOp()
@@ -577,6 +600,7 @@ class member_talkControl extends mbMemberControl
         }
 
         if($ret) {
+            room\factory_client::instance()->change($room_id);
             return self::outsuccess(null);
         } else {
             return self::outerr(errcode::ErrDB);
@@ -687,21 +711,28 @@ class member_talkControl extends mbMemberControl
 
     public function change_passwdOp(){
         $room_id = intval($_GET['room_id']);
+        $use_pass = intval($_GET['use_pass']);
         if($room_id <= 0) {
             return self::outerr(errcode::ErrParamter);
         }
 
-        $passwd = strtolower(trim($_GET['passwd']));
+        if($use_pass)
+        {
+            $passwd = strtolower(trim($_GET['passwd']));
 
-        if (!preg_match("/^[a-z0-9]+$/u", $passwd)) {
-            return self::outerr(errcode::ErrParamter,"密码只能包含英文字母或数字,不区分大小写");
-        }
+            $len = strlen($passwd);
+            if($len <4 || $len >8) {
+                return self::outerr(errcode::ErrParamter,"密码长度请再4至8个字符之间");
+            }
 
-        $len = strlen($passwd);
-        if($len <=0 || $len >8) {
-            return self::outerr(errcode::ErrParamter,"密码不能为空或超过8个字符");
+            if (!preg_match("/^[a-z0-9]+$/u", $passwd)) {
+                return self::outerr(errcode::ErrParamter,"密码只能包含英文字母或数字,不区分大小写");
+            }
+        }else{
+            $passwd = "";
         }
 
+
         $mod_room = Model('room');
         $item = $mod_room->getRoom($room_id);
         if(empty($item)) {
@@ -757,22 +788,68 @@ class member_talkControl extends mbMemberControl
         }
     }
 
-    public function room_applyOp()
+    //////////////////////////////////////////
+    public function send_applyOp()
     {
-        $room_id = intval($_GET['room']);
-        $msg = trim($_GET['msg']);
-        $member = session_helper::memberid();
-
-        if($room_id <= 0 || strlen($msg) >=100) {
+        $room_id = intval($_GET['room_id']);
+        if($room_id <= 0) {
             return self::outerr(errcode::ErrParamter,"请求失败");
         }
 
-        $room_mod = Model('room');
-        $add = $room_mod->addApply($room_id,$member,$msg);
-        if($add){
-            return self::outsuccess(null,"申请成功");
-        } else {
-            return self::outerr(errcode::ErrDB,"提交失败");
+        $member = session_helper::memberid();
+        $mod_room = Model('room');
+        $room = $mod_room->getRoom($room_id);
+        if(empty($room)) {
+            return self::outerr(errcode::ErrParamter,"房间不存在");
+        }
+
+        $pwd = $room['passwd'];
+        $owner = $room['room_owner'];
+        if(empty($pwd)) {
+            $ret = room\factory_client::instance()->invite($room_id,$owner,[$member]);
+            if($ret === false) {
+                return self::outerr(errcode::ErrRoom,"进群失败");
+            }
+            else
+            {
+                $members = member_info::get_members($ret['newusers']);
+                $result['invitees'] = $members;
+                return self::outsuccess($result);
+            }
+        }
+        else
+        {
+            $apply = intval($_GET['apply']);
+            if(empty($apply))
+            {
+                if(strtolower(trim($_GET['passwd'])) === strtolower($pwd)){
+                    $ret = room\factory_client::instance()->invite($room_id,$owner,[$member]);
+                    if($ret === false) {
+                        return self::outerr(errcode::ErrRoom,"进群失败");
+                    }
+                    else
+                    {
+                        $members = member_info::get_members($ret['newusers']);
+                        $result['invitees'] = $members;
+                        return self::outsuccess($result);
+                    }
+                }else{
+                    return self::outerr(errcode::ErrParamter,"群密码有误");
+                }
+            }
+            else
+            {
+                $msg = trim($_GET['msg']);
+                if(strlen($msg) >= 100){
+                    return self::outerr(errcode::ErrParamter,"消息过长");
+                }
+                $add = $mod_room->addApply($room_id,$member,$msg);
+                if($add){
+                    return self::outsuccess(null,"申请成功");
+                } else {
+                    return self::outerr(errcode::ErrDB,"提交失败");
+                }
+            }
         }
     }
 
@@ -782,25 +859,84 @@ class member_talkControl extends mbMemberControl
         $step  = intval($_GET['step']);
         $member = session_helper::memberid();
 
-        if($apply <=0 && $step <=0 ) {
+        if($apply <=0 || $step <=0 || $step >2 ) {
             return self::outerr(errcode::ErrParamter,"请求失败");
         }
 
-        $room_mod = Model('room');
-        $edit = $room_mod->editApply($apply,$member,$step);
-        if(!$edit){
+        $mod_room = Model('room');
+        if($step == 1)
+        {
+            $item = $mod_room->findApply($apply);
+            $ret  = room\factory_client::instance()->invite($item["room_id"],$member,[$item['member_id']]);
+            if($ret === false)
+            {
+                return self::outerr(errcode::ErrDB,"操作失败");
+            }
+        } else
+        {
+            //todo refuse notice
+        }
+
+        $edit = $mod_room->editApply($apply,$member,$step);
+        if($edit){
+            return self::outsuccess(null,"操作成功");
+        }else{
             return self::outerr(errcode::ErrDB,"提交失败");
         }
+    }
 
-        if($step == 1)
-        {
-            $item = $room_mod->findApply($apply);
-            room\factory_client::instance()->invite($item["room_id"],$member,[$item['member_id']]);
+    public function room_applyOp(){
+        return self::outsuccess(null,'talk/room_apply');
+    }
+
+    public function ajax_room_applyOp()
+    {
+        $room_id = intval($_GET['room_id']);
+        if($room_id <= 0){
+            return self::outerr(errcode::ErrParamter,"缺少必要参数");
+        }
+
+        $mod_room = Model('room');
+        $item = $mod_room->getRoom($room_id);
+        if(empty($item)) {
+            return self::outerr(errcode::ErrParamter,"错误的群信息");
         }
 
-        return self::outsuccess(null,"操作成功");
+        $member = session_helper::memberid();
+        $info = new room\room_info($item);
+        Log::record("room:{$room_id} user:$member",Log::DEBUG);
+        if($info->owner() != $member) {
+            return self::outerr(errcode::ErrTalk,"只有管理员可以查看申请列表");
+        }
+
+        $hasmore = false;
+        $per_page = 20;
+        $applys = $mod_room->roomApplys($room_id,"*",$per_page);
+        if(!empty($applys)){
+            foreach ($applys as $k => $apply){
+                $info = new member_info($apply['member_id']);
+                $member = $info->filter();
+                $applys[$k]['avatar'] = $member['avatar'];
+                $applys[$k]['is_man'] = $member['is_man'];
+                $applys[$k]['nickname'] = $member['nickname'];
+                $applys[$k]['step_msg'] = $this->step_to_str($apply['step']);
+            }
+
+            if(count($applys) >= $per_page) $hasmore = true;
+        }
+
+        return self::outsuccess(["applys"=>$applys,"mobile_page"=>["hasmore"=>$hasmore,"curpage"=>$this->cur_page]]);
     }
 
+    private function step_to_str($step)
+    {
+        switch ($step){
+            case '0': return "申请中";
+            case '1': return "已接受";
+            case '2': return "已拒绝";
+            default : return "申请中";
+        }
+    }
 
     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
     public function share_bonusOp()

+ 168 - 15
mobile/templates/default/talk/homepage_room.php

@@ -32,13 +32,10 @@
     </div>
     <div id="callback"></div>
 </div>
-<div class="weui-cells">
-    <?php $output['tpl']->show_group_body(); ?>
-</div>
 
-<div class="weui-cells">
-    <?php $output['tpl']->show_personal_settings(); ?>
-</div>
+<?php $output['tpl']->show_group_body(); ?>
+
+<?php $output['tpl']->show_personal_settings(); ?>
 
 <?php $output['tpl']->show_group_footer(); ?>
 
@@ -66,6 +63,11 @@
 
             var jsBridge = new Bridge();
 
+
+            if($('#add_group_pwd').length > 0 || $('#add_group_apply').length > 0 || $('#add_group').length > 0) {
+                $('html').css({"min-height":"100%",background:"#ffffff"})
+            }
+
             var ajaxFileUpload = function () {
                 $.showLoading();
                 $.ajaxFileUpload({
@@ -126,7 +128,7 @@
                         } else {
                             console.log(result.datas.avatar);
                             $(".g_avatar").attr("src", result.datas.avatar);
-                            $.toast('修改成功');
+                            $.toast('修改成功',1000);
                         }
                     });
 
@@ -192,7 +194,7 @@
                                         '</div>'
                                 }
                                 $('div[data-last="true"]').after(html);
-                                $.toast('添加成功');
+                                $.toast('添加成功',1000);
                             }
                         });
                 });
@@ -233,7 +235,7 @@
                             for (var i = 0; i < del_users.length; i++) {
                                 $('div[data-member-id=' + datas.friends[i] + ']').remove();
                             }
-                            $.toast('删除成功');
+                            $.toast('删除成功',1000);
                         }else
                         {
                             $.alert("请先移交管理员权限后,再离开聊天");
@@ -270,7 +272,7 @@
                                 $.alert(result.message);
                                 return;
                             }
-                            $.toast('转让成功');
+                            $.toast('转让成功',1000);
                             setTimeout(function () {
                                 window.location.reload();
                             },1000);
@@ -356,7 +358,7 @@
                                     var new_group_name = input.trim();
                                     $('#edit_group_name .weui-cell__ft').text(new_group_name);
                                     $('.group_name h3').text(new_group_name);
-                                    $.toast('修改成功');
+                                    $.toast('修改成功',1000);
                                 });
                         }
                         else {
@@ -394,7 +396,9 @@
                                     }
                                     var new_group_name = input.trim();
                                     $('.weui-flex__item[data-member-id="'+cur_mid+'"] p').text(new_group_name);
-                                    $.toast('修改成功');
+                                    $('.group-nickname').text(new_group_name);
+                                    $.toast('修改成功',1000);
+
                                 });
                         }
                         else {
@@ -434,7 +438,7 @@
                                     $('.group_notice_board p').text(new_notice);
                                     $('#room-notice-btn').text("已设置");
                                     $('.group_notice_board').show();
-                                    $.toast('修改成功');
+                                    $.toast('修改成功',1000);
                                 });
                         }
                         else {
@@ -475,7 +479,7 @@
                                     var room_desc = input.trim();
                                     $('.group_name p').text(room_desc);
                                     $('#room-desc-btn').text("已设置");
-                                    $.toast('修改成功');
+                                    $.toast('修改成功',1000);
                                 });
                         }
                         else {
@@ -548,7 +552,96 @@
                         }
                     };
                     jsBridge.call_native_handler('on_native_click', JSON.stringify(jsonobject));
-                    $.toast('清除成功');
+                    $.toast('清除成功',1000);
+                });
+            });
+
+
+            $('#add_group').on('click', function () {
+                $.showLoading();
+                $.get('/mobile/index.php?act=member_talk&op=send_apply',
+                    {
+                        room_id: talk_id,
+                        client_type: 'ajax'
+                    }, function (res) {
+                        $.hideLoading();
+                        var result = JSON.parse(res);
+                        console.log(result);
+                        if (result.code != 200) {
+                            $.alert(result.message);
+                            return;
+                        }
+                        $.toast('进入成功',1000);
+                    });
+            });
+
+            $('#add_group_pwd').on('click', function () {
+                $.prompt({
+                    title: '密码进群',
+                    text: '请输入密码(最长8位)',
+                    empty: false, // 是否允许为空
+                    onOK: function (input) {
+                        if (input && input.trim().length <= 8) {
+                            $.showLoading();
+                            $.get('/mobile/index.php?act=member_talk&op=send_apply',
+                                {
+                                    passwd :input,
+                                    room_id: talk_id,
+                                    client_type: 'ajax'
+                                }, function (res) {
+                                    $.hideLoading();
+                                    var result = JSON.parse(res);
+                                    console.log(result);
+                                    if (result.code != 200) {
+                                        $.alert(result.message);
+                                        return;
+                                    }
+                                    $.toast('进入成功',1000);
+                                });
+                        }
+                        else {
+                            $.alert('密码最长为8位,可以由英文字母和数字任意组成,不区分大小写');
+                        }
+                    },
+                    onCancel: function () {
+                        //点击取消
+                    }
+                });
+            });
+
+
+            $('#add_group_apply').on('click', function () {
+                $.prompt({
+                    title: '申请入群',
+                    text: '请输入自我介绍(30字符以内)',
+                    empty: false,
+                    onOK: function (input) {
+                        if (input && input.trim().length <= 30) {
+                            $.showLoading();
+                            $.get('/mobile/index.php?act=member_talk&op=send_apply',
+                                {
+                                    apply:1,
+                                    msg :input,
+                                    room_id: talk_id,
+                                    client_type: 'ajax'
+                                }, function (res) {
+                                    $.hideLoading();
+                                    var result = JSON.parse(res);
+                                    console.log(result);
+                                    if (result.code != 200) {
+                                        $.alert(result.message);
+                                        return;
+                                    }
+                                    $.toast('申请成功',1000);
+                                });
+                        }
+                        else {
+                            $.alert('入群申请不要最长为30字符');
+                        }
+                    },
+                    onCancel: function () {
+                        //点击取消
+                    }
                 });
             });
 
@@ -574,6 +667,66 @@
             $('.pop').on('touchmove',function(e){
                 e.preventDefault();
             });
+
+            $('#group_pwd').on('click',function(e){
+
+                if(!$(this).is(':checked')) {
+                    e.preventDefault();
+                    $.showLoading();
+                    $.get('/mobile/index.php?act=member_talk&op=change_passwd',
+                        {
+                            room_id: talk_id,
+                            client_type: 'ajax',
+                            use_pass:0
+                        }, function (res) {
+                            $.hideLoading();
+                            var result = JSON.parse(res);
+                            if (result.code != 200) {
+                                $.alert(result.message);
+                                return;
+                            }
+                            $('#group_pwd').removeAttr('checked');
+                        });
+                }
+                else {
+                    $.prompt({
+                        title: '修改群密码',
+                        text: '请设置4-8位群密码',
+                        empty: false,
+                        onOK: function (input) {
+                            if (input && (input.trim().length <= 8 && input.trim().length >= 4)) {
+                                //点击确认
+                                $.showLoading();
+                                $.get('/mobile/index.php?act=member_talk&op=change_passwd',
+                                    {
+                                        passwd: input,
+                                        room_id: talk_id,
+                                        client_type: 'ajax',
+                                        use_pass:1
+                                    }, function (res) {
+                                        $.hideLoading();
+                                        var result = JSON.parse(res);
+                                        if (result.code != 200) {
+                                            $.alert(result.message);
+                                            $('#group_pwd').removeAttr('checked');
+                                            return;
+                                        }
+                                        $('#group_pwd').attr('checked',true);
+                                        $.toast('群密码设置成功',1000);
+                                    });
+                            }
+                            else {
+                                $('#group_pwd').removeAttr('checked');
+                                $.alert('群密码设置错误,请重试');
+                            }
+
+                        },
+                        onCancel: function () {
+                            $('#group_pwd').removeAttr('checked');
+                        }
+                    });
+                }
+            });
         }
     );
 </script>

+ 25 - 0
mobile/templates/default/talk/room_apply.php

@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <meta name="viewport" content="width=device-width,initial-scale=1,user-scalable=0">
+    <title>入群申请</title>
+    <link type="text/css" rel="stylesheet"
+          href="<?php echo RESOURCE_SITE_URL; ?>/mobile/talk/css/weui.css?<?php echo bonus_version(); ?>"/>
+    <link rel="stylesheet"
+          href="https://cdn.bootcss.com/jquery-weui/1.2.0/css/jquery-weui.min.css?<?php echo bonus_version(); ?>">
+    <link type="text/css" rel="stylesheet"
+          href="<?php echo RESOURCE_SITE_URL; ?>/mobile/talk/css/room_apply.css?<?php echo bonus_version(); ?>"/>
+</head>
+<body>
+
+    <div class="weui-cells" id="apply_list"></div>
+    <div id="load_state"></div>
+
+    <script src="<?php echo RESOURCE_SITE_URL; ?>/mobile/comm/zepto.min.js?<?php echo bonus_version(); ?>"></script>
+    <script src="<?php echo RESOURCE_SITE_URL; ?>/mobile/comm/fastclick.js?<?php echo bonus_version(); ?>"></script>
+    <script src="https://cdn.bootcss.com/jquery/1.11.0/jquery.min.js?<?php echo bonus_version(); ?>"></script>
+    <script src="https://cdn.bootcss.com/jquery-weui/1.2.0/js/jquery-weui.min.js?<?php echo bonus_version(); ?>"></script>
+    <script src="<?php echo RESOURCE_SITE_URL; ?>/mobile/talk/js/room_apply.js?<?php echo bonus_version(); ?>"></script>
+</body>
+</html>

+ 4 - 1
shop/control/store_goods_online.php

@@ -103,7 +103,7 @@ class store_goods_onlineControl extends BaseSellerControl {
         Tpl::output('brand_list', $brand_list);
 
         // 取得商品规格的输入值
-        $goods_array = $model_goods->getGoodsList($where, 'goods_id,goods_marketprice,goods_price,goods_storage,goods_serial,goods_storage_alarm,goods_spec,oms_id');
+        $goods_array = $model_goods->getGoodsList($where, 'goods_id,goods_marketprice,goods_price,goods_storage,goods_serial,goods_storage_alarm,goods_spec,oms_id,goods_lowest_price');
         $sp_value = array();
         if (is_array($goods_array) && !empty($goods_array)) {
 
@@ -132,6 +132,7 @@ class store_goods_onlineControl extends BaseSellerControl {
                     $id = str_replace ( ',', '', implode ( ',', $matchs ) );
                     $sp_value ['i_' . $id . '|marketprice'] = $v['goods_marketprice'];
                     $sp_value ['i_' . $id . '|price'] = $v['goods_price'];
+                    $sp_value ['i_' . $id . '|lowest_price'] = $v['goods_lowest_price'];
                     $sp_value ['i_' . $id . '|id'] = $v['goods_id'];
                     $sp_value ['i_' . $id . '|stock'] = $v['goods_storage'];
                     $sp_value ['i_' . $id . '|alarm'] = $v['goods_storage_alarm'];
@@ -421,6 +422,7 @@ class store_goods_onlineControl extends BaseSellerControl {
                     $update['gc_id_3']           = $update_common['gc_id_3'];
                     $update['brand_id']          = $update_common['brand_id'];
                     $update['goods_price']       = $value['price'];
+                    $update['goods_lowest_price']= floatval($value['lowest_price']);
                     $update['goods_marketprice'] = $value['marketprice'] == 0 ? $update_common['goods_marketprice'] : $value['marketprice'];
                     $update['goods_serial']      = $value['sku'];
                     $update['oms_id']            = intval($value['oms_id']);
@@ -473,6 +475,7 @@ class store_goods_onlineControl extends BaseSellerControl {
                     $insert['brand_id']          = $update_common['brand_id'];
                     $insert['goods_price']       = $value['price'];
                     $insert['goods_promotion_price']=$value['price'];
+                    $insert['goods_lowest_price']= floatval($value['lowest_price']);
                     $insert['goods_marketprice'] = $value['marketprice'] == 0 ? $update_common['goods_marketprice'] : $value['marketprice'];
                     $insert['goods_serial']      = $value['sku'];
                     $insert['oms_id']            = intval($value['oms_id']);

File diff suppressed because it is too large
+ 9 - 1
shop/templates/default/seller/store_goods_add.step2.php