index.php 20 KB

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