index.php 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275
  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 id="app" class="row">
  8. <div class="col-sm-12">
  9. <div class="wechat-reply-wrapper wechat-menu">
  10. <div class="ibox-content clearfix">
  11. <div class="view-wrapper col-sm-4">
  12. <div class="mobile-header">公众号</div>
  13. <section class="view-body">
  14. <div class="time-wrapper"><span class="time">9:36</span></div>
  15. </section>
  16. <div class="menu-footer">
  17. <ul class="flex">
  18. <li v-for="(menu, index) in menus" :class="{active:menu === checkedMenu}">
  19. <span @click="activeMenu(menu,index,null)"><i class="icon-sub"></i>{{ menu.name || '一级菜单' }}</span>
  20. <div class="sub-menu">
  21. <ul>
  22. <li v-for="(child, cindex) in menu.sub_button" :class="{active:child === checkedMenu}">
  23. <span @click="activeMenu(child,cindex,index)">{{ child.name || '二级菜单' }}</span>
  24. </li>
  25. <li v-if="menu.sub_button.length < 5" @click="addChild(menu,index)"><i class="icon-add"></i></li>
  26. </ul>
  27. </div>
  28. </li>
  29. <li v-if="menus.length < 3" @click="addMenu()"><i class="icon-add"></i></li>
  30. </ul>
  31. </div>
  32. </div>
  33. <div class="control-wrapper menu-control col-sm-8" v-show="checkedMenuId !== null">
  34. <section>
  35. <div class="control-main">
  36. <h3 class="popover-title">菜单名称 <a class="fr" href="javascript:void(0);" @click="delMenu">删除</a></h3>
  37. <p class="tips-txt">已添加子菜单,仅可设置菜单名称。</p>
  38. <div class="menu-content control-body">
  39. <form action="">
  40. <div class="form-group clearfix">
  41. <label for="" class="col-sm-3">菜单名称</label>
  42. <div class="col-sm-9 group-item">
  43. <input type="text" placeholder="菜单名称" class="form-control" v-model="checkedMenu.name">
  44. <span>字数不超过13个汉字或40个字母</span>
  45. </div>
  46. </div>
  47. <div class="form-group clearfix">
  48. <label class="col-sm-3 control-label tips" for="">规则状态</label>
  49. <div class="group-item col-sm-9">
  50. <select class="form-control m-b" name="" id="" v-model="checkedMenu.type">
  51. <?php /* <option value="text">文字消息</option> */ ?>
  52. <option value="click">关键字</option>
  53. <option value="view">跳转网页</option>
  54. <?php /* <option value="feat">事件功能</option> */ ?>
  55. <option value="miniprogram">小程序</option>
  56. </select>
  57. </div>
  58. </div>
  59. <div class="menu-control-box">
  60. <!-- 文字消息 -->
  61. <?php /* <div class="text-box item" :class="{show:checkedMenu.type=='text'}">
  62. <p>回复内容</p>
  63. <textarea v-model="checkedMenu.content" cols="60" rows="10" placeholder="请输入回复内容"></textarea>
  64. </div> */ ?>
  65. <!-- 关键字 -->
  66. <div class="keywords item" :class="{show:checkedMenu.type=='click'}">
  67. <p>关键字</p>
  68. <input type="text" placeholder="请输入关键字" class="form-control" v-model="checkedMenu.key">
  69. </div>
  70. <!-- 跳转地址 -->
  71. <div class="url item" :class="{show:checkedMenu.type=='view'}">
  72. <p>跳转地址</p>
  73. <input type="text" v-model="checkedMenu.url" placeholder="请输入跳转地址" class="form-control">
  74. </div>
  75. <!-- 事件功能 -->
  76. <?php /* <div class="feat-select item" :class="{show:type=='feat'}">
  77. <div class="radio i-checks" style="display:block">
  78. <label class="" style="padding-left: 0;">
  79. <div class="iradio_square-green" style="position: relative;">
  80. <div class="iradio_square-green" style="position: relative;">
  81. <input checked="checked" type="radio" value="2" name="feat" style="position: absolute; opacity: 0;"></div>
  82. </div>
  83. <i></i>扫码推事件
  84. </label>
  85. </div>
  86. <div class="radio i-checks" style="display:block">
  87. <label class="" style="padding-left: 0;">
  88. <div class="iradio_square-green" style="position: relative;">
  89. <div class="iradio_square-green" style="position: relative;"><input type="radio" value="2" name="feat" style="position: absolute; opacity: 0;"></div>
  90. </div>
  91. <i></i>扫码推事件且弹出“消息接收中”提示框
  92. </label>
  93. </div>
  94. <div class="radio i-checks" style="display:block">
  95. <label class="" style="padding-left: 0;">
  96. <div class="iradio_square-green" style="position: relative;">
  97. <div class="iradio_square-green" style="position: relative;"><input type="radio" value="2" name="feat" style="position: absolute; opacity: 0;"></div>
  98. </div>
  99. <i></i>弹出系统拍照发图
  100. </label>
  101. </div>
  102. <div class="radio i-checks" style="display:block">
  103. <label class="" style="padding-left: 0;">
  104. <div class="iradio_square-green" style="position: relative;">
  105. <div class="iradio_square-green" style="position: relative;"><input type="radio" value="2" name="feat" style="position: absolute; opacity: 0;"></div>
  106. </div>
  107. <i></i>弹出拍照或者相册发图
  108. </label>
  109. </div>
  110. <div class="radio i-checks" style="display:block">
  111. <label class="" style="padding-left: 0;">
  112. <div class="iradio_square-green" style="position: relative;">
  113. <div class="iradio_square-green" style="position: relative;"><input type="radio" value="2" name="feat" style="position: absolute; opacity: 0;"></div>
  114. </div>
  115. <i></i>弹出微信相册发图器
  116. </label>
  117. </div>
  118. <div class="radio i-checks" style="display:block">
  119. <label class="" style="padding-left: 0;">
  120. <div class="iradio_square-green" style="position: relative;">
  121. <div class="iradio_square-green" style="position: relative;"><input type="radio" value="2" name="feat" style="position: absolute; opacity: 0;"></div>
  122. </div>
  123. <i></i>弹出地理位置选择器
  124. </label>
  125. </div>
  126. </div> */ ?>
  127. <!-- 小程序 -->
  128. <div class="wrchat-app item" :class="{show:checkedMenu.type=='miniprogram'}">
  129. <div class="list">
  130. <p>appid</p>
  131. <input class="form-control" v-model="checkedMenu.appid" type="text" />
  132. </div>
  133. <div class="list">
  134. <p>备用网页url</p>
  135. <input class="form-control" v-model="checkedMenu.pagepath" type="text" />
  136. </div>
  137. <div class="list">
  138. <p>小程序路径</p>
  139. <input class="form-control" v-model="checkedMenu.url" type="text" />
  140. </div>
  141. </div>
  142. <!-- 多客服 -->
  143. <div class="service item">
  144. <p>回复内容</p>
  145. <textarea cols="60" rows="10"></textarea>
  146. </div>
  147. </div>
  148. </form>
  149. </div>
  150. </div>
  151. </section>
  152. </div>
  153. </div>
  154. <div class="ibox-content submit">
  155. <button class="btn btn-w-m btn-primary" @click="submit">保存发布</button>
  156. </div>
  157. </div>
  158. </div>
  159. </div>
  160. {/block}
  161. {block name="script"}
  162. <script src="{__FRAME_PATH}js/plugins/iCheck/icheck.min.js"></script>
  163. <script src="{__FRAME_PATH}js/bootstrap.min.js"></script>
  164. <script src="{__FRAME_PATH}js/content.min.js"></script>
  165. <script src="{__PLUG_PATH}reg-verify.js"></script>
  166. <script type="text/javascript">
  167. $eb = parent._mpApi;
  168. $eb.mpFrame.start(function(Vue){
  169. var $http = $eb.axios;
  170. const vm = new Vue({
  171. data:{
  172. menus:<?=$menus?>,
  173. checkedMenu:{
  174. type:'click',
  175. name:''
  176. },
  177. checkedMenuId:null,
  178. parentMenuId:null
  179. },
  180. methods:{
  181. defaultMenusData:function(){
  182. return {
  183. type:'click',
  184. name:'',
  185. sub_button:[]
  186. };
  187. },
  188. defaultChildData:function(){
  189. return {
  190. type:'click',
  191. name:''
  192. };
  193. },
  194. addMenu:function(){
  195. if(!this.check()) return false;
  196. var data = this.defaultMenusData(),id = this.menus.length;
  197. this.menus.push(data);
  198. this.checkedMenu = data;
  199. this.checkedMenuId = id;
  200. this.parentMenuId = null;
  201. },
  202. addChild:function(menu,index){
  203. if(!this.check()) return false;
  204. var data = this.defaultChildData(),id = menu.sub_button.length;
  205. menu.sub_button.push(data);
  206. this.checkedMenu = data;
  207. this.checkedMenuId = id;
  208. this.parentMenuId = index;
  209. },
  210. delMenu:function(){
  211. console.log(this.parentMenuId);
  212. this.parentMenuId === null ?
  213. this.menus.splice(this.checkedMenuId,1) : this.menus[this.parentMenuId].sub_button.splice(this.checkedMenuId,1);
  214. this.parentMenuId = null;
  215. this.checkedMenu = {};
  216. this.checkedMenuId = null;
  217. },
  218. activeMenu:function(menu,index,pid){
  219. if(!this.check()) return false;
  220. pid === null ?
  221. (this.checkedMenu = menu) : (this.checkedMenu = this.menus[pid].sub_button[index],this.parentMenuId = pid);
  222. this.checkedMenuId=index
  223. },
  224. check:function(){
  225. if(this.checkedMenuId === null) return true;
  226. if(!this.checkedMenu.name){
  227. $eb.message('请输入按钮名称!');
  228. return false;
  229. }
  230. if(this.checkedMenu.type == 'click' && !this.checkedMenu.key){
  231. $eb.message('请输入关键字!');
  232. return false;
  233. }
  234. if(this.checkedMenu.type == 'view' && !$reg.isHref(this.checkedMenu.url)){
  235. $eb.message('请输入正确的跳转地址!');
  236. return false;
  237. }
  238. if(this.checkedMenu.type == 'miniprogram'
  239. && (!this.checkedMenu.appid
  240. || !this.checkedMenu.pagepath
  241. || !this.checkedMenu.url)){
  242. $eb.message('请填写完整小程序配置!');
  243. return false;
  244. }
  245. return true;
  246. },
  247. submit:function(){
  248. if(!this.menus.length){
  249. $eb.message('error','请添加菜单!');
  250. return false;
  251. }
  252. $http.post("{:url('wechat.menus/save',array('dis'=>1))}",{button:this.menus}).then(function (res) {
  253. if(res.status == 200 && res.data.code == 200)
  254. $eb.message('success','发布菜单成功!');
  255. else
  256. return Promise.reject(res.data.msg || '发布菜单失败!');
  257. }).catch(function(err){
  258. $eb.message('error',err);
  259. })
  260. }
  261. },
  262. mounted:function(){
  263. window.vm = this;
  264. }
  265. });
  266. vm.$mount(document.getElementById('app'));
  267. });
  268. $('.i-checks').iCheck({
  269. checkboxClass: 'icheckbox_square-green',
  270. radioClass: 'iradio_square-green',
  271. });
  272. </script>
  273. {/block}