bfcfe4fc86e1ea7546f6eec7a56bc4e7.php 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359
  1. <?php /*a:5:{s:63:"D:\phpstudy_pro\WWW\CRMEB\app\admin\view\wechat\menus\index.php";i:1595820902;s:61:"D:\phpstudy_pro\WWW\CRMEB\app\admin\view\public\container.php";i:1595820902;s:62:"D:\phpstudy_pro\WWW\CRMEB\app\admin\view\public\frame_head.php";i:1595820902;s:57:"D:\phpstudy_pro\WWW\CRMEB\app\admin\view\public\style.php";i:1595820902;s:64:"D:\phpstudy_pro\WWW\CRMEB\app\admin\view\public\frame_footer.php";i:1595820902;}*/ ?>
  2. <!DOCTYPE html>
  3. <html lang="zh-CN">
  4. <head>
  5. <meta charset="utf-8">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <?php if(empty($is_layui) || (($is_layui instanceof \think\Collection || $is_layui instanceof \think\Paginator ) && $is_layui->isEmpty())): ?>
  8. <link href="/system/frame/css/bootstrap.min.css?v=3.4.0" rel="stylesheet">
  9. <?php endif; ?>
  10. <link href="/static/plug/layui/css/layui.css" rel="stylesheet">
  11. <link href="/system/css/layui-admin.css" rel="stylesheet">
  12. <link href="/system/frame/css/font-awesome.min.css?v=4.3.0" rel="stylesheet">
  13. <link href="/system/frame/css/animate.min.css" rel="stylesheet">
  14. <link href="/system/frame/css/style.min.css?v=3.0.0" rel="stylesheet">
  15. <script src="/system/frame/js/jquery.min.js"></script>
  16. <script src="/system/frame/js/bootstrap.min.js"></script>
  17. <script src="/static/plug/layui/layui.all.js"></script>
  18. <script>
  19. $eb = parent._mpApi;
  20. window.controlle="<?php echo strtolower(trim(preg_replace("/[A-Z]/", "_\\0", app('request')->controller()), "_"));?>";
  21. window.module="<?php echo app('http')->getName();?>";
  22. </script>
  23. <title></title>
  24. <link rel="stylesheet" type="text/css" href="/system/css/main.css" />
  25. <link href="/system/frame/css/plugins/iCheck/custom.css" rel="stylesheet">
  26. <!--<script type="text/javascript" src="/static/plug/basket.js"></script>-->
  27. <script type="text/javascript" src="/static/plug/requirejs/require.js"></script>
  28. <?php /* <script type="text/javascript" src="/static/plug/requirejs/require-basket-load.js"></script> */ ?>
  29. <script>
  30. var hostname = location.hostname;
  31. if(location.port) hostname += ':' + location.port;
  32. requirejs.config({
  33. map: {
  34. '*': {
  35. 'css': '/static/plug/requirejs/require-css.js'
  36. }
  37. },
  38. shim:{
  39. 'iview':{
  40. deps:['css!iviewcss']
  41. },
  42. 'layer':{
  43. deps:['css!layercss']
  44. }
  45. },
  46. baseUrl:'//'+hostname+'/',
  47. paths: {
  48. 'static':'static',
  49. 'system':'system',
  50. 'vue':'static/plug/vue/dist/vue.min',
  51. 'axios':'static/plug/axios.min',
  52. 'iview':'static/plug/iview/dist/iview.min',
  53. 'iviewcss':'static/plug/iview/dist/styles/iview',
  54. 'lodash':'static/plug/lodash',
  55. 'layer':'static/plug/layer/layer',
  56. 'layercss':'static/plug/layer/theme/default/layer',
  57. 'jquery':'static/plug/jquery/jquery.min',
  58. 'moment':'static/plug/moment',
  59. 'sweetalert':'static/plug/sweetalert2/sweetalert2.all.min',
  60. 'formCreate':'/static/plug/form-create/form-create.min',
  61. },
  62. basket: {
  63. excludes:['system/js/index','system/util/mpVueComponent','system/util/mpVuePackage']
  64. // excludes:['system/util/mpFormBuilder','system/js/index','system/util/mpVueComponent','system/util/mpVuePackage']
  65. }
  66. });
  67. </script>
  68. <script type="text/javascript" src="/system/util/mpFrame.js"></script>
  69. </head>
  70. <body class="gray-bg">
  71. <div class="wrapper wrapper-content">
  72. <div id="app" class="row">
  73. <div class="col-sm-12">
  74. <div class="wechat-reply-wrapper wechat-menu">
  75. <div class="ibox-content clearfix">
  76. <div class="view-wrapper col-sm-4">
  77. <div class="mobile-header">公众号</div>
  78. <section class="view-body">
  79. <div class="time-wrapper"><span class="time">9:36</span></div>
  80. </section>
  81. <div class="menu-footer">
  82. <ul class="flex">
  83. <li v-for="(menu, index) in menus" :class="{active:menu === checkedMenu}">
  84. <span @click="activeMenu(menu,index,null)"><i class="icon-sub"></i>{{ menu.name || '一级菜单' }}</span>
  85. <div class="sub-menu">
  86. <ul>
  87. <li v-for="(child, cindex) in menu.sub_button" :class="{active:child === checkedMenu}">
  88. <span @click="activeMenu(child,cindex,index)">{{ child.name || '二级菜单' }}</span>
  89. </li>
  90. <li v-if="menu.sub_button.length < 5" @click="addChild(menu,index)"><i class="icon-add"></i></li>
  91. </ul>
  92. </div>
  93. </li>
  94. <li v-if="menus.length < 3" @click="addMenu()"><i class="icon-add"></i></li>
  95. </ul>
  96. </div>
  97. </div>
  98. <div class="control-wrapper menu-control col-sm-8" v-show="checkedMenuId !== null">
  99. <section>
  100. <div class="control-main">
  101. <h3 class="popover-title">菜单名称 <a class="fr" href="javascript:void(0);" @click="delMenu">删除</a></h3>
  102. <p class="tips-txt">已添加子菜单,仅可设置菜单名称。</p>
  103. <div class="menu-content control-body">
  104. <form action="">
  105. <div class="form-group clearfix">
  106. <label for="" class="col-sm-2">菜单名称</label>
  107. <div class="col-sm-9 group-item">
  108. <input type="text" placeholder="菜单名称" class="form-control" v-model="checkedMenu.name">
  109. <span>字数不超过13个汉字或40个字母</span>
  110. </div>
  111. </div>
  112. <div class="form-group clearfix">
  113. <label class="col-sm-2 control-label tips" for="">规则状态</label>
  114. <div class="group-item col-sm-9">
  115. <select class="form-control m-b" name="" id="" v-model="checkedMenu.type">
  116. <?php /* <option value="text">文字消息</option> */ ?>
  117. <option value="click">关键字</option>
  118. <option value="view">跳转网页</option>
  119. <?php /* <option value="feat">事件功能</option> */ ?>
  120. <option value="miniprogram">小程序</option>
  121. </select>
  122. </div>
  123. </div>
  124. <div class="menu-control-box">
  125. <!-- 文字消息 -->
  126. <?php /* <div class="text-box item" :class="{show:checkedMenu.type=='text'}">
  127. <p>回复内容</p>
  128. <textarea v-model="checkedMenu.content" cols="60" rows="10" placeholder="请输入回复内容"></textarea>
  129. </div> */ ?>
  130. <!-- 关键字 -->
  131. <div class="keywords item" :class="{show:checkedMenu.type=='click'}">
  132. <p>关键字</p>
  133. <input type="text" placeholder="请输入关键字" class="form-control" v-model="checkedMenu.key">
  134. </div>
  135. <!-- 跳转地址 -->
  136. <div class="url item" :class="{show:checkedMenu.type=='view'}">
  137. <p>跳转地址</p>
  138. <input type="text" v-model="checkedMenu.url" placeholder="请输入跳转地址" class="form-control">
  139. <p class="text-left"></p>
  140. <div class="well well-lg">
  141. <span class="help-block m-b-none">首页:<?php echo htmlentities(app('request')->domain()); ?></span>
  142. <span class="help-block m-b-none">个人中心:<?php echo htmlentities(app('request')->domain()); ?>/user</span>
  143. </div>
  144. </div>
  145. <!-- 事件功能 -->
  146. <?php /* <div class="feat-select item" :class="{show:type=='feat'}">
  147. <div class="radio i-checks" style="display:block">
  148. <label class="" style="padding-left: 0;">
  149. <div class="iradio_square-green" style="position: relative;">
  150. <div class="iradio_square-green" style="position: relative;">
  151. <input checked="checked" type="radio" value="2" name="feat" style="position: absolute; opacity: 0;"></div>
  152. </div>
  153. <i></i>扫码推事件
  154. </label>
  155. </div>
  156. <div class="radio i-checks" style="display:block">
  157. <label class="" style="padding-left: 0;">
  158. <div class="iradio_square-green" style="position: relative;">
  159. <div class="iradio_square-green" style="position: relative;"><input type="radio" value="2" name="feat" style="position: absolute; opacity: 0;"></div>
  160. </div>
  161. <i></i>扫码推事件且弹出“消息接收中”提示框
  162. </label>
  163. </div>
  164. <div class="radio i-checks" style="display:block">
  165. <label class="" style="padding-left: 0;">
  166. <div class="iradio_square-green" style="position: relative;">
  167. <div class="iradio_square-green" style="position: relative;"><input type="radio" value="2" name="feat" style="position: absolute; opacity: 0;"></div>
  168. </div>
  169. <i></i>弹出系统拍照发图
  170. </label>
  171. </div>
  172. <div class="radio i-checks" style="display:block">
  173. <label class="" style="padding-left: 0;">
  174. <div class="iradio_square-green" style="position: relative;">
  175. <div class="iradio_square-green" style="position: relative;"><input type="radio" value="2" name="feat" style="position: absolute; opacity: 0;"></div>
  176. </div>
  177. <i></i>弹出拍照或者相册发图
  178. </label>
  179. </div>
  180. <div class="radio i-checks" style="display:block">
  181. <label class="" style="padding-left: 0;">
  182. <div class="iradio_square-green" style="position: relative;">
  183. <div class="iradio_square-green" style="position: relative;"><input type="radio" value="2" name="feat" style="position: absolute; opacity: 0;"></div>
  184. </div>
  185. <i></i>弹出微信相册发图器
  186. </label>
  187. </div>
  188. <div class="radio i-checks" style="display:block">
  189. <label class="" style="padding-left: 0;">
  190. <div class="iradio_square-green" style="position: relative;">
  191. <div class="iradio_square-green" style="position: relative;"><input type="radio" value="2" name="feat" style="position: absolute; opacity: 0;"></div>
  192. </div>
  193. <i></i>弹出地理位置选择器
  194. </label>
  195. </div>
  196. </div> */ ?>
  197. <!-- 小程序 -->
  198. <div class="wrchat-app item" :class="{show:checkedMenu.type=='miniprogram'}">
  199. <div class="list">
  200. <p>appid</p>
  201. <input class="form-control" v-model="checkedMenu.appid" type="text" />
  202. </div>
  203. <div class="list">
  204. <p>备用网页url</p>
  205. <input class="form-control" v-model="checkedMenu.url" type="text" />
  206. </div>
  207. <div class="list">
  208. <p>小程序路径</p>
  209. <input class="form-control" v-model="checkedMenu.pagepath" type="text" />
  210. </div>
  211. </div>
  212. <!-- 多客服 -->
  213. <div class="service item">
  214. <p>回复内容</p>
  215. <textarea cols="60" rows="10"></textarea>
  216. </div>
  217. </div>
  218. </form>
  219. </div>
  220. </div>
  221. </section>
  222. </div>
  223. </div>
  224. <div class="ibox-content submit">
  225. <button class="btn btn-w-m btn-primary" @click="submit">保存发布</button>
  226. </div>
  227. </div>
  228. </div>
  229. </div>
  230. <script src="/system/frame/js/plugins/iCheck/icheck.min.js"></script>
  231. <script src="/system/frame/js/bootstrap.min.js"></script>
  232. <script src="/system/frame/js/content.min.js"></script>
  233. <script src="/static/plug/reg-verify.js"></script>
  234. <script type="text/javascript">
  235. $eb = parent._mpApi;
  236. $eb.mpFrame.start(function(Vue){
  237. var $http = $eb.axios;
  238. const vm = new Vue({
  239. data:{
  240. menus:<?=$menus?>,
  241. checkedMenu:{
  242. type:'click',
  243. name:''
  244. },
  245. checkedMenuId:null,
  246. parentMenuId:null
  247. },
  248. methods:{
  249. defaultMenusData:function(){
  250. return {
  251. type:'click',
  252. name:'',
  253. sub_button:[]
  254. };
  255. },
  256. defaultChildData:function(){
  257. return {
  258. type:'click',
  259. name:''
  260. };
  261. },
  262. addMenu:function(){
  263. if(!this.check()) return false;
  264. var data = this.defaultMenusData(),id = this.menus.length;
  265. this.menus.push(data);
  266. this.checkedMenu = data;
  267. this.checkedMenuId = id;
  268. this.parentMenuId = null;
  269. },
  270. addChild:function(menu,index){
  271. if(!this.check()) return false;
  272. var data = this.defaultChildData(),id = menu.sub_button.length;
  273. menu.sub_button.push(data);
  274. this.checkedMenu = data;
  275. this.checkedMenuId = id;
  276. this.parentMenuId = index;
  277. },
  278. delMenu:function(){
  279. console.log(this.parentMenuId);
  280. this.parentMenuId === null ?
  281. this.menus.splice(this.checkedMenuId,1) : this.menus[this.parentMenuId].sub_button.splice(this.checkedMenuId,1);
  282. this.parentMenuId = null;
  283. this.checkedMenu = {};
  284. this.checkedMenuId = null;
  285. },
  286. activeMenu:function(menu,index,pid){
  287. if(!this.check()) return false;
  288. pid === null ?
  289. (this.checkedMenu = menu) : (this.checkedMenu = this.menus[pid].sub_button[index],this.parentMenuId = pid);
  290. this.checkedMenuId=index
  291. },
  292. check:function(){
  293. if(this.checkedMenuId === null) return true;
  294. if(!this.checkedMenu.name){
  295. $eb.message('请输入按钮名称!');
  296. return false;
  297. }
  298. if(this.checkedMenu.type == 'click' && !this.checkedMenu.key){
  299. $eb.message('请输入关键字!');
  300. return false;
  301. }
  302. if(this.checkedMenu.type == 'view' && !$reg.isHref(this.checkedMenu.url)){
  303. $eb.message('请输入正确的跳转地址!');
  304. return false;
  305. }
  306. if(this.checkedMenu.type == 'miniprogram'
  307. && (!this.checkedMenu.appid
  308. || !this.checkedMenu.pagepath
  309. || !this.checkedMenu.url)){
  310. $eb.message('请填写完整小程序配置!');
  311. return false;
  312. }
  313. return true;
  314. },
  315. submit:function(){
  316. if(!this.menus.length){
  317. $eb.message('error','请添加菜单!');
  318. return false;
  319. }
  320. $http.post("<?php echo url('wechat.menus/save',array('dis'=>1)); ?>",{button:this.menus}).then(function (res) {
  321. if(res.status == 200 && res.data.code == 200)
  322. $eb.message('success','发布菜单成功!');
  323. else
  324. return Promise.reject(res.data.msg || '发布菜单失败!');
  325. }).catch(function(err){
  326. $eb.message('error',err);
  327. })
  328. }
  329. },
  330. mounted:function(){
  331. window.vm = this;
  332. }
  333. });
  334. vm.$mount(document.getElementById('app'));
  335. });
  336. $('.i-checks').iCheck({
  337. checkboxClass: 'icheckbox_square-green',
  338. radioClass: 'iradio_square-green',
  339. });
  340. </script>
  341. </div>
  342. </body>
  343. </html>