index.php 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238
  1. {extend name="public/container"}
  2. {block name="head_top"}
  3. <link rel="stylesheet" type="text/css" href="{__ADMIN_PATH}css/main.css" />
  4. <link href="{__FRAME_PATH}css/plugins/iCheck/custom.css" rel="stylesheet">
  5. {/block}
  6. {block name="content"}
  7. <div v-cloak id="app" class="layui-fluid">
  8. <div class="layui-card">
  9. <div class="layui-card-header"></div>
  10. <div class="layui-card-body">
  11. <div class="wechat-reply-wrapper wechat-menu">
  12. <div class="layui-row layui-col-space10 ibox-content clearfix">
  13. <div class="layui-col-md4 view-wrapper">
  14. <div class="mobile-header">公众号</div>
  15. <section class="view-body">
  16. <div class="time-wrapper"><span class="time">9:36</span></div>
  17. </section>
  18. <div class="menu-footer">
  19. <ul class="flex">
  20. <li v-for="(menu, index) in menus" :class="{active:menu === checkedMenu}">
  21. <span @click="activeMenu(menu,index,null)"><i class="icon-sub"></i>{{ menu.name || '一级菜单' }}</span>
  22. <div class="sub-menu">
  23. <ul>
  24. <li v-for="(child, cindex) in menu.sub_button" :class="{active:child === checkedMenu}">
  25. <span @click="activeMenu(child,cindex,index)">{{ child.name || '二级菜单' }}</span>
  26. </li>
  27. <li v-if="menu.sub_button.length < 5" @click="addChild(menu,index)"><i class="icon-add"></i></li>
  28. </ul>
  29. </div>
  30. </li>
  31. <li v-if="menus.length < 3" @click="addMenu()"><i class="icon-add"></i></li>
  32. </ul>
  33. </div>
  34. </div>
  35. <div class="layui-col-md8 control-wrapper menu-control" v-show="checkedMenuId !== null">
  36. <section>
  37. <div class="control-main">
  38. <h3 class="popover-title">菜单名称 <a class="fr" href="javascript:void(0);" @click="delMenu">删除</a></h3>
  39. <p class="tips-txt">已添加子菜单,仅可设置菜单名称。</p>
  40. <div class="menu-content control-body">
  41. <form action="" class="layui-form">
  42. <div class="layui-form-item">
  43. <label class="layui-form-label">菜单名称</label>
  44. <div class="layui-input-block">
  45. <input type="text" placeholder="菜单名称" maxlength="13" class="layui-input" v-model="checkedMenu.name">
  46. <span class="layui-form-mid layui-word-aux">字数不超过13个汉字</span>
  47. </div>
  48. </div>
  49. <div class="layui-form-item">
  50. <label class="layui-form-label">规则状态</label>
  51. <div class="layui-input-block">
  52. <select lay-filter="type">
  53. <option value="click">关键字</option>
  54. <option value="view">跳转网页</option>
  55. <!-- <option value="miniprogram">小程序</option> -->
  56. </select>
  57. </div>
  58. </div>
  59. <div v-show="checkedMenu.type === 'click'" class="layui-form-item">
  60. <label class="layui-form-label">关键字</label>
  61. <div class="layui-input-block">
  62. <input type="text" placeholder="请输入关键字" class="layui-input" v-model="checkedMenu.key">
  63. </div>
  64. </div>
  65. <div v-show="checkedMenu.type === 'view'" class="layui-form-item">
  66. <label class="layui-form-label">跳转地址</label>
  67. <div class="layui-input-block">
  68. <input type="text" v-model="checkedMenu.url" placeholder="请输入跳转地址" class="layui-input">
  69. <div class="well well-lg">
  70. <span class="help-block m-b-none">首页:{$Request.domain}{:url('wap/index/index')}</span>
  71. <span class="help-block m-b-none">个人中心:{$Request.domain}{:url('wap/my/index')}</span>
  72. </div>
  73. </div>
  74. </div>
  75. <div v-show="checkedMenu.type === 'miniprogram'" class="layui-form-item">
  76. <label class="layui-form-label">appid</label>
  77. <div class="layui-input-block">
  78. <input class="layui-input" v-model="checkedMenu.appid" type="text" />
  79. </div>
  80. </div>
  81. <div v-show="checkedMenu.type === 'miniprogram'" class="layui-form-item">
  82. <label class="layui-form-label">备用网页url</label>
  83. <div class="layui-input-block">
  84. <input class="layui-input" v-model="checkedMenu.pagepath" type="text" />
  85. </div>
  86. </div>
  87. <div v-show="checkedMenu.type === 'miniprogram'" class="layui-form-item">
  88. <label class="layui-form-label">小程序路径</label>
  89. <div class="layui-input-block">
  90. <input class="layui-input" v-model="checkedMenu.url" type="text" />
  91. </div>
  92. </div>
  93. <!-- <div class="layui-form-item">
  94. <label class="layui-form-label">回复内容</label>
  95. <div class="layui-input-block">
  96. <textarea class="layui-textarea"></textarea>
  97. </div>
  98. </div> -->
  99. <div class="layui-form-item">
  100. <div class="layui-input-block">
  101. <button class="layui-btn layui-btn-normal" @click="submit">保存发布</button>
  102. </div>
  103. </div>
  104. </form>
  105. </div>
  106. </div>
  107. </section>
  108. </div>
  109. </div>
  110. </div>
  111. </div>
  112. </div>
  113. </div>
  114. {/block}
  115. {block name="script"}
  116. <script src="{__FRAME_PATH}js/plugins/iCheck/icheck.min.js"></script>
  117. <script src="{__FRAME_PATH}js/bootstrap.min.js"></script>
  118. <script src="{__FRAME_PATH}js/content.min.js"></script>
  119. <script src="{__PLUG_PATH}reg-verify.js"></script>
  120. <script type="text/javascript">
  121. parent.$('.J_menuTab').each(function () {
  122. if ($(this).hasClass('active')) {
  123. $('.layui-card-header').text($(this).text());
  124. return false;
  125. }
  126. });
  127. $eb = parent._mpApi;
  128. $eb.mpFrame.start(function(Vue){
  129. var $http = $eb.axios;
  130. const vm = new Vue({
  131. data:{
  132. menus:<?=$menus?>,
  133. checkedMenu:{
  134. type:'click',
  135. name:''
  136. },
  137. checkedMenuId:null,
  138. parentMenuId:null
  139. },
  140. methods:{
  141. defaultMenusData:function(){
  142. return {
  143. type:'click',
  144. name:'',
  145. sub_button:[]
  146. };
  147. },
  148. defaultChildData:function(){
  149. return {
  150. type:'click',
  151. name:''
  152. };
  153. },
  154. addMenu:function(){
  155. if(!this.check()) return false;
  156. var data = this.defaultMenusData(),id = this.menus.length;
  157. this.menus.push(data);
  158. this.checkedMenu = data;
  159. this.checkedMenuId = id;
  160. this.parentMenuId = null;
  161. },
  162. addChild:function(menu,index){
  163. if(!this.check()) return false;
  164. var data = this.defaultChildData(),id = menu.sub_button.length;
  165. menu.sub_button.push(data);
  166. this.checkedMenu = data;
  167. this.checkedMenuId = id;
  168. this.parentMenuId = index;
  169. },
  170. delMenu:function(){
  171. this.parentMenuId === null ?
  172. this.menus.splice(this.checkedMenuId,1) : this.menus[this.parentMenuId].sub_button.splice(this.checkedMenuId,1);
  173. this.parentMenuId = null;
  174. this.checkedMenu = {};
  175. this.checkedMenuId = null;
  176. },
  177. activeMenu:function(menu,index,pid){
  178. if(!this.check()) return false;
  179. pid === null ?
  180. (this.checkedMenu = menu) : (this.checkedMenu = this.menus[pid].sub_button[index],this.parentMenuId = pid);
  181. this.checkedMenuId=index
  182. },
  183. check:function(){
  184. if(this.checkedMenuId === null) return true;
  185. if(!this.checkedMenu.name){
  186. $eb.message('请输入按钮名称!');
  187. return false;
  188. }
  189. if(this.checkedMenu.type == 'click' && !this.checkedMenu.key){
  190. $eb.message('请输入关键字!');
  191. return false;
  192. }
  193. if(this.checkedMenu.type == 'view' && !$reg.isHref(this.checkedMenu.url)){
  194. $eb.message('请输入正确的跳转地址!');
  195. return false;
  196. }
  197. if(this.checkedMenu.type == 'miniprogram'
  198. && (!this.checkedMenu.appid
  199. || !this.checkedMenu.pagepath
  200. || !this.checkedMenu.url)){
  201. $eb.message('请填写完整小程序配置!');
  202. return false;
  203. }
  204. return true;
  205. },
  206. submit:function(){
  207. if(!this.menus.length){
  208. $eb.message('error','请添加菜单!');
  209. return false;
  210. }
  211. $http.post("{:url('wechat.menus/save',array('dis'=>1))}",{button:this.menus}).then(function (res) {
  212. if(res.status == 200 && res.data.code == 200)
  213. $eb.message('success','发布菜单成功!');
  214. else
  215. return Promise.reject(res.data.msg || '发布菜单失败!');
  216. }).catch(function(err){
  217. $eb.message('error',err);
  218. })
  219. }
  220. },
  221. mounted:function(){
  222. window.vm = this;
  223. this.$nextTick(function () {
  224. layui.form.render();
  225. layui.form.on('select(type)', function (data) {
  226. vm.checkedMenu.type = data.value;
  227. });
  228. });
  229. }
  230. });
  231. vm.$mount(document.getElementById('app'));
  232. });
  233. $('.i-checks').iCheck({
  234. checkboxClass: 'icheckbox_square-green',
  235. radioClass: 'iradio_square-green',
  236. });
  237. </script>
  238. {/block}