follow.html 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349
  1. {extend name="app/shop/view/base.html" /}
  2. {block name="resources"}
  3. <link rel="stylesheet" href="WECHAT_CSS/wx_follow.css">
  4. <style>
  5. .layui-layout-admin.admin-style-2 .layui-body .body-content{background-color: transparent;}
  6. </style>
  7. {/block}
  8. {block name="main"}
  9. <div class="layui-tab-brief clearfix fourstage-nav">
  10. <ul class="layui-tab-title">
  11. <li>
  12. <a href='{:addon_url("wechat://shop/replay/replay")}'>关键词自动回复</a>
  13. </li>
  14. <li><a href='{:addon_url("wechat://shop/replay/default")}'>默认回复</a></li>
  15. <li class='layui-this'>
  16. <a href='{:addon_url("wechat://shop/replay/follow")}'>关注后自动回复</a>
  17. </li>
  18. </ul>
  19. <div class="weixin-normal rule-autoreplay-page">
  20. <div id="load_rule_list"></div>
  21. <!--添加回复-->
  22. <div class="layui-form rule-container" id="add_reply" style="display: none">
  23. <input type="hidden" name="layer_index" value="">
  24. <input type="hidden" name="rule_id" value="">
  25. <input type="hidden" name="key_id" value="-1">
  26. <!--<div class="arrow"><i class="layui-icon">&#xe603;</i></div>-->
  27. <!--<a href="javascript:;" class="close&#45;&#45;circle js-close">×</a>-->
  28. <div>
  29. <div class="misc">
  30. <!-- <a href="javascript:;" class="js-replay" nc-event="click" nc-action="emotion">表情</a> -->
  31. <a href="javascript:;" class="js-replay" nc-event="click" nc-action="hyperlink">插入链接</a>
  32. <a href="javascript:;" class="image" onclick="material(5);">文本消息</a>
  33. <!-- <a href="javascript:;" class="js-replay" nc-event="click" nc-action="music">音乐</a> -->
  34. <a href="javascript:;" class="js-replay" onclick="material(1);">选择图文</a>
  35. <!--<div class="others">-->
  36. <!--<a href="javascript:;">其他<i class="caret"></i></a>-->
  37. <!--<ul class="dropdown-menu">-->
  38. <!--{volist name="link_list" id="vo"}-->
  39. <!--<li><a class="js-open-goods" data-action-type="{$vo.name}" data-complex-mode="true" href="javascript:;">{$vo.title}</a></li>-->
  40. <!--{/volist}-->
  41. <!--</ul>-->
  42. <!--</div>-->
  43. </div>
  44. <div class="layui-form-item">
  45. <textarea placeholder="请输入内容" class="layui-textarea" name="reply_content" maxlength="300" lay-verify="required|content" ></textarea>
  46. <div class="complex-backdrop">
  47. <div class="complex-content"></div>
  48. </div>
  49. <div class="layui-input-block" style="margin-top:10px;margin-left: 0;">
  50. <button class="layui-btn" type="button" lay-submit lay-filter="add_reply">确定</button>
  51. <span class="pull-right">还能输入 <i>300</i> 个字</span>
  52. </div>
  53. </div>
  54. <input type="hidden" value="" id="hidden_reply_type"/>
  55. </div>
  56. </div>
  57. </div>
  58. </div>
  59. <!-- 插入链接 -->
  60. <div class="layui-form" id="hyperlink" style="display:none">
  61. <div class="layui-form-item" style="margin-bottom:0;">
  62. <div class="layui-input-inline">
  63. <input type="text" name="title" lay-verify="required|title" autocomplete="off" placeholder="http://" class="layui-input">
  64. </div>
  65. <button class="layui-btn" lay-submit lay-filter="hyperlink">确定</button>
  66. </div>
  67. </div>
  68. <!-- 音乐素材 -->
  69. <div class="layui-form" id="music" style="display:none">
  70. <div class="layui-form-item ">
  71. <label class="layui-form-label msg-music-thumb"><a href="javascript:;" class="js-replay" nc-event="click" nc-action="thumbnail"><i class="layui-icon">&#xe654;</i></a></label>
  72. <div class="layui-input-inline ">
  73. <input type="text" name="title" placeholder="音乐标题" autocomplete="off" class="layui-input" lay-verify="required|title" style="margin-bottom: 10px;">
  74. <textarea placeholder="音乐描述" class="layui-textarea" name="description" maxlength="300" lay-verify="required|description" ></textarea>
  75. </div>
  76. </div>
  77. <div class="layui-form-item ">
  78. <label class="layui-form-label">普通音质</label>
  79. <div class="layui-input-inline ">
  80. <input type="text" name="music_url" placeholder="填写音乐地址" autocomplete="off" class="layui-input" lay-verify="required|url">
  81. </div>
  82. </div>
  83. <div class="layui-form-item ">
  84. <label class="layui-form-label">高清音质</label>
  85. <div class="layui-input-inline ">
  86. <input type="text" name="hq_music_url" placeholder="填写音乐地址" autocomplete="off" class="layui-input" lay-verify="required|url">
  87. </div>
  88. </div>
  89. <div class="layui-form-item">
  90. <button class="layui-btn" lay-submit lay-filter="music" style="float: right; margin-right: 10px;">确定</button>
  91. </div>
  92. <input type="hidden" name="thumb_attachment_id" value="">
  93. </div>
  94. {/block}
  95. {block name="script"}
  96. <script type='text/javascript' src='WECHAT_JS/wx_follow.js'></script>
  97. <script src="WECHAT_JS/common.js"></script>
  98. <script type="text/javascript">
  99. $(function () {
  100. $.fn.extend({
  101. insertAtCaret: function(myValue, type){
  102. var $t=$(this)[0];
  103. if (document.selection) {
  104. this.focus();
  105. sel = document.selection.createRange();
  106. sel.text = myValue;
  107. this.focus();
  108. }
  109. else
  110. if ($t.selectionStart || $t.selectionStart == '0') {
  111. var startPos = $t.selectionStart;
  112. var endPos = $t.selectionEnd;
  113. var scrollTop = $t.scrollTop;
  114. if(type == 'url'){
  115. if($t.value.substring(0, startPos).indexOf("href") != -1){
  116. var num_1 = $t.value.substring(0, startPos).indexOf("'");
  117. var num_2 = $t.value.substring(0, startPos).indexOf("'", num_1 + 1);
  118. var text = $t.value.substring(0, startPos).slice(num_1 + 1 ,num_2);
  119. $t.value = $t.value.substring(0, startPos).replace(text, myValue);
  120. }else{
  121. $t.value = "<a href='"+ myValue +"'>"+ $t.value.substring(0, startPos) +"</a>";
  122. }
  123. }
  124. // $t.value = $t.value.substring(0, startPos) + myValue + $t.value.substring(endPos, $t.value.length);
  125. this.focus();
  126. $t.selectionStart = startPos + myValue.length;
  127. $t.selectionEnd = startPos + myValue.length;
  128. $t.scrollTop = scrollTop;
  129. }
  130. else {
  131. this.value += myValue;
  132. this.focus();
  133. }
  134. }
  135. })
  136. var replay = new WxReplay(3,[3,6,9]);
  137. replay.getData({"_this": replay, "rule_type": 'AFTER'});//数据初始化
  138. replay.pageInit({"_this": replay});//分页初始化
  139. // $(".js-replay").bind("click", {"_this": replay}, replay.e); //元素事件
  140. $(".rule-autoreplay-page,.replay-button").delegate(".js-replay","click",{"_this": replay},replay.e);
  141. //form 操作模块
  142. layui.use(['form'], function () {
  143. var form = layui.form;
  144. //添加和修改回复
  145. form.on('submit(add_reply)', function (data) {
  146. var d = data.field;
  147. var rule_id = d.rule_id;
  148. var key_id = d.key_id;
  149. var reply_content = $.trim(d.reply_content);
  150. var layer_index = d.layer_index;
  151. var type = $("#hidden_reply_type").val() ? $("#hidden_reply_type").val() : "text";
  152. var param = {
  153. url: ns.url('wechat://shop/replay/editReplays'),
  154. data: {"rule_id": rule_id,"reply_content":reply_content, "key_id":key_id, "type" : type,"replay_type":"follow"},
  155. success: function (res) {
  156. layer.msg(res.message);
  157. if (res.code >= 0) {
  158. $(".layui-laypage-btn").click();
  159. $('#add_reply').css("display","none");
  160. location.reload();
  161. }
  162. }
  163. };
  164. replay.sendAjax(param);
  165. });
  166. //插入链接 确定
  167. form.on('submit(hyperlink)', function (data, index) {
  168. var d = data.field;
  169. var url = d.title;
  170. if (url.indexOf('http://') == -1 && url.indexOf('https://') == -1) {
  171. url = 'http://' + url;
  172. }
  173. var textarea = $("textarea[name='reply_content']").val();
  174. if(textarea.indexOf("href") != -1){
  175. var num_1 = textarea.indexOf("'");
  176. var num_2 = textarea.indexOf("'", num_1 + 1);
  177. var text = textarea.slice(num_1 + 1 ,num_2);
  178. var value = textarea.replace(text, url);
  179. }else{
  180. var value = "<a href='"+ url +"'>"+ textarea +"</a>";
  181. }
  182. $("#add_reply").find("textarea[name='reply_content']").val(value);
  183. layer.close(layer.index);
  184. });
  185. //音乐 确定
  186. form.on('submit(music)', function (data, index) {
  187. var d = data.field;
  188. var thumb_attachment_id = d.thumb_attachment_id;
  189. var title = d.title;
  190. var description = d.description;
  191. var music_url = d.music_url;
  192. var hq_music_url = d.hq_music_url;
  193. var active_pic = '';
  194. active_pic += '<div class="voice-wrapper" data-voice-src="'+music_url+'">';
  195. active_pic += '<span class="voice-player">';
  196. active_pic += '<a href="javascript:;" class="close--circle js-delete-complex">×</a>';
  197. active_pic += '<span class="stop">点击播放</span>';
  198. active_pic += '<span class="second"></span>';
  199. active_pic += '<i class="play" style="display:none;"></i>';
  200. active_pic += '</span>';
  201. active_pic += '</div>';
  202. $("#add_reply").find(".complex-content").html(active_pic);
  203. $('.complex-backdrop').css("display","block");
  204. $("#add_reply").find("textarea[name='reply_content']").val(music_url);
  205. layer.close(layer.index);
  206. });
  207. });
  208. //关闭 清除
  209. $(".js-close").click(function(){
  210. $("#add_reply").find("textarea[name='reply_content']").val();
  211. $('.complex-backdrop').css("display","none");
  212. $('#add_reply').css("display","none");
  213. $(".layui-layer-shade").remove();
  214. });
  215. //清除
  216. $("body").on('click',".js-delete-complex",function(){
  217. $("#add_reply").find("textarea[name='reply_content']").val('');
  218. $('.complex-backdrop').css("display","none");
  219. });
  220. });
  221. //音乐回调
  222. function albumUploadSuccess(o,name){
  223. $("#hidden_reply_type").val('image');
  224. var active_pic = '';
  225. active_pic += '<div class="ng ng-single ng-image">';
  226. active_pic += '<a class="picture" target="_blank" href=""><img src="'+nc.img(o[0]['small_pic_path'])+'" alt=""/></a>';
  227. active_pic += '</div>';
  228. $("#add_reply").find(".complex-content").html(active_pic);
  229. $('.complex-backdrop').css("display","block");
  230. $("#add_reply").find("textarea[name='reply_content']").val(o[0]['small_pic_path']);
  231. }
  232. //图文回调
  233. function chooseGraphicMessage(data) {
  234. var active_pic = '';
  235. active_pic += '<div class="ng ng-single">';
  236. active_pic += '<a href="javascript:;" class="close--circle js-delete-complex">×</a>';
  237. active_pic += '<div class="ng-item">';
  238. active_pic += '<span class="label label-success">图 文</span>';
  239. active_pic += '<div class="ng-title">';
  240. active_pic += '<a href="'+data.value[0].url+'" target="_blank" class="new-window" title="'+data.value[0].title+'">' + data.value[0].title + '</a>';
  241. active_pic += '</div>';
  242. active_pic += '</div>';
  243. active_pic += '<div class="ng-item view-more">';
  244. active_pic += '<a href="'+data.value[0].url+'" target="_blank" class="clearfix new-window">';
  245. active_pic += '<span class="pull-left">阅读全文</span>';
  246. active_pic += '<span class="pull-right">&gt;</span>';
  247. active_pic += '</a>';
  248. active_pic += '</div>';
  249. active_pic += '</div>';
  250. $("#add_reply").find(".complex-content").html(active_pic);
  251. $('.complex-backdrop').css("display", "block");
  252. $("#add_reply").find("textarea[name='reply_content']").val(data.value[0].title);
  253. $("#hidden_reply_type").val('articles');
  254. $("#hidden_media_id").val(data.media_id);
  255. }
  256. function chooseTextMessage(data){
  257. var active_pic = '';
  258. active_pic += '<div class="ng ng-single">';
  259. active_pic += '<a href="javascript:;" class="close--circle js-delete-complex">×</a>';
  260. active_pic += '<div class="ng-item">';
  261. active_pic += '<span class="label label-success">文 本</span>';
  262. active_pic += '<div class="ng-title">';
  263. active_pic += '<a href="javascript:;" title="'+data.value.content+'">' + data.value.content + '</a>';
  264. active_pic += '</div>';
  265. // active_pic += '<a href="h" target="_blank" class="new-window" title="' + data.value.content + '"><span class="label label-success">' + data.value.content + '</span></a>';
  266. active_pic += '</div>';
  267. active_pic += '<div class="ng-item view-more">';
  268. active_pic += '<a href="" target="_blank" class="clearfix new-window">';
  269. active_pic += '<span class="pull-left">阅读全文</span>';
  270. active_pic += '<span class="pull-right">&gt;</span>';
  271. active_pic += '</a>';
  272. active_pic += '</div>';
  273. active_pic += '</div>';
  274. $("#add_reply").find(".complex-content").html(active_pic);
  275. $('.complex-backdrop').css("display", "block");
  276. $("#add_reply").find("textarea[name='reply_content']").val(data.value.content);
  277. $("#add_reply").find("span.pull-right").hide();
  278. $("#hidden_reply_type").val('text');
  279. $("#hidden_media_id").val(data.media_id);
  280. }
  281. //弹出框的位置
  282. $("body").on('click',".add-reply-menu",function(){
  283. var x = $(this).position().top;
  284. var y = $(this).position().left;
  285. var real_x = 16;
  286. var real_y = 72;
  287. $('.rule-container').css('top', real_x);
  288. $('.rule-container').css('left', real_y);
  289. var m = '<i class="layui-icon">&#xe603;</i>';
  290. $('.rule-container .arrow').html(m);
  291. $('.rule-container .arrow').css('right', 'auto');
  292. $('.rule-container .arrow').css('left', '-13px');
  293. $('.pull-right').find('i').text(300);
  294. });
  295. //编辑弹出框的位置
  296. $("body").on('click',".js-edit-it",function(){
  297. var x = $(this).position().top;
  298. var real_x = x;
  299. var real_y = 85;
  300. $('.rule-container').css('top', real_x);
  301. $('.rule-container').css('right', real_y);
  302. var s = '<i class="layui-icon">&#xe602;</i>';
  303. $('.rule-container .arrow').html(s);
  304. $('.rule-container .arrow').css('left', 'auto');
  305. $('.rule-container .arrow').css('right', 3);
  306. var text_leng = $('.rule-container').find(".layui-textarea").val().length;
  307. var left_leng = 300 - text_leng;
  308. $('.pull-right').find('i').text(left_leng);
  309. });
  310. $("body").on('keydown',".layui-textarea",function(){
  311. var text_leng = $(this).val().length;
  312. var left_leng = 300 - text_leng;
  313. $('.pull-right').find('i').text(left_leng);
  314. })
  315. </script>
  316. {/block}