Browse Source

[更新]微信菜单增加小程序支持

Anyon 7 years ago
parent
commit
6436925093
2 changed files with 32 additions and 8 deletions
  1. 7 4
      application/wechat/controller/Menu.php
  2. 25 4
      application/wechat/view/menu.index.html

+ 7 - 4
application/wechat/controller/Menu.php

@@ -116,13 +116,16 @@ class Menu extends BasicAdmin {
      */
     protected function _push() {
         $result = Db::name($this->table)
-            ->field('id,index,pindex,name,type,content')
-            ->where('status', '1')
-            ->order('sort ASC,id ASC')
-            ->select();
+                ->field('id,index,pindex,name,type,content')
+                ->where('status', '1')
+                ->order('sort ASC,id ASC')
+                ->select();
         foreach ($result as &$row) {
             empty($row['content']) && $row['content'] = uniqid();
             switch ($row['type']) {
+                case 'miniprogram':
+                    list($row['appid'], $row['pagepath']) = explode(',', $row['content']);
+                    break;
                 case 'view':
                     $row['url'] = preg_match('#^(\w+:)?//#i', $row['content']) ? $row['content'] : url($row['content'], '', true, true);
                     break;

+ 25 - 4
application/wechat/view/menu.index.html

@@ -90,6 +90,9 @@
                         <input class="cuci-radio" type="radio" name="menu-type" value="event"> 事件功能
                     </label>
                     <label class="col-xs-5 font-noraml">
+                        <input class="cuci-radio" type="radio" name="menu-type" value="miniprogram"> 小程序
+                    </label>
+                    <label class="col-xs-5 font-noraml">
                         <input class="cuci-radio" type="radio" name="menu-type" value="customservice"> 多客服
                     </label>
                 </div>
@@ -232,8 +235,17 @@
                 $html.find('input[name="menu-type"]').on('click', function () {
                     $span.attr('data-type', this.value || 'text');
                     var content = $span.data('content') || '';
+                    var type = this.value;
                     var html = function () {
-                        switch (this.value) {
+                        switch (type) {
+                            case 'miniprogram':
+                                var tpl = '<div><div>小程序APPID<input style="display:block;margin-bottom:10px" class="form-control input-sm" value="{appid}" name="appid"/></div>Pagepath<textarea style="resize:none;height:180px;" name="pagepath" class="form-control input-sm">{content}</textarea></div>';
+                                var _appid = '', _content = '';
+                                if (content.indexOf(',') > 0) {
+                                    _appid = content.split(',')[0];
+                                    _content = content.split(',')[1];
+                                }
+                                return tpl.replace('{appid}', _appid).replace('{content}', _content);
                             case 'customservice':
                             case 'text':
                                 return '<div>回复内容<textarea style="resize:none;height:225px" name="content" class="form-control input-sm">{content}</textarea></div>'.replace('{content}', content);
@@ -262,7 +274,12 @@
                     }.call(this);
                     var $html = $(html), $input = $html.find('input,textarea');
                     $input.on('change keyup click', function () {
-                        $span.data('content', $(this).val() || $(this).html());
+                        // 将input值写入到span上
+                        $span.data(this.name, $(this).val() || $(this).html());
+                        // 如果是小程序,合并内容到span的content上
+                        if (type === 'miniprogram') {
+                            $span.data('content', $span.data('appid') + ',' + $span.data('pagepath'));
+                        }
                     });
                     $('.editor-content-input').html($html);
                 }).filter('input[value="{type}"]'.replace('{type}', type)).trigger('click');
@@ -274,12 +291,16 @@
          */
         menu.prototype.submit = function () {
             var data = [];
-
             function getdata($span) {
                 var menudata = {};
                 menudata.name = $span.text();
                 menudata.type = $span.attr('data-type');
-                menudata.content = $span.data('content') || '';
+                // 小程序要特殊处理
+                if (menudata.type === 'miniprogram') {
+                    menudata.content = $span.data('appid') + ',' + $span.data('pagepath');
+                } else {
+                    menudata.content = $span.data('content') || '';
+                }
                 return menudata;
             }