859c64b75d2c9f266b654a6d3feb693c.php 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430
  1. <?php /*a:5:{s:63:"D:\phpstudy_pro\WWW\CRMEB\app\admin\view\wechat\reply\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. <script src="/system/frame/js/bootstrap.min.js"></script>
  26. <script src="/system/frame/js/content.min.js"></script>
  27. <script src="/system/frame/js/ajaxfileupload.js"></script>
  28. <script src="/static/plug/moment.js"></script>
  29. <!--<script type="text/javascript" src="/static/plug/basket.js"></script>-->
  30. <script type="text/javascript" src="/static/plug/requirejs/require.js"></script>
  31. <?php /* <script type="text/javascript" src="/static/plug/requirejs/require-basket-load.js"></script> */ ?>
  32. <script>
  33. var hostname = location.hostname;
  34. if(location.port) hostname += ':' + location.port;
  35. requirejs.config({
  36. map: {
  37. '*': {
  38. 'css': '/static/plug/requirejs/require-css.js'
  39. }
  40. },
  41. shim:{
  42. 'iview':{
  43. deps:['css!iviewcss']
  44. },
  45. 'layer':{
  46. deps:['css!layercss']
  47. }
  48. },
  49. baseUrl:'//'+hostname+'/',
  50. paths: {
  51. 'static':'static',
  52. 'system':'system',
  53. 'vue':'static/plug/vue/dist/vue.min',
  54. 'axios':'static/plug/axios.min',
  55. 'iview':'static/plug/iview/dist/iview.min',
  56. 'iviewcss':'static/plug/iview/dist/styles/iview',
  57. 'lodash':'static/plug/lodash',
  58. 'layer':'static/plug/layer/layer',
  59. 'layercss':'static/plug/layer/theme/default/layer',
  60. 'jquery':'static/plug/jquery/jquery.min',
  61. 'moment':'static/plug/moment',
  62. 'sweetalert':'static/plug/sweetalert2/sweetalert2.all.min',
  63. 'formCreate':'/static/plug/form-create/form-create.min',
  64. },
  65. basket: {
  66. excludes:['system/js/index','system/util/mpVueComponent','system/util/mpVuePackage']
  67. // excludes:['system/util/mpFormBuilder','system/js/index','system/util/mpVueComponent','system/util/mpVuePackage']
  68. }
  69. });
  70. </script>
  71. <script type="text/javascript" src="/system/util/mpFrame.js"></script>
  72. </head>
  73. <body class="gray-bg">
  74. <div class="wrapper wrapper-content">
  75. <div id="app" class="row">
  76. <div class="col-sm-12">
  77. <div class="wechat-reply-wrapper">
  78. <div class="ibox-title"><p>{{msg}}</p></div>
  79. <div class="ibox-content clearfix">
  80. <div class="view-wrapper col-sm-4">
  81. <div class="mobile-header">公众号</div>
  82. <section class="view-body" style="overflow:scroll;">
  83. <div class="time-wrapper"><span class="time">9:36</span></div>
  84. <div class="view-item text-box clearfix" :class="{show:type=='text'}">
  85. <div class="avatar fl"><img src="/system/images/head.gif" /></div>
  86. <div class="box-content fl">
  87. {{dataGroup.text.content}}
  88. </div>
  89. </div>
  90. <div class="view-item news-box" :class="{show:type=='news'}" v-if="dataGroup.news.length >0">
  91. <div class="vn-content" v-if="dataGroup.news.length ==1">
  92. <div class="vn-title">{{dataGroup.news[0].title}}</div>
  93. <div class="vn-time">{{dataGroup.news[0].date}}</div>
  94. <div class="vn-picture" :style="{backgroundImage: 'url('+dataGroup.news[0].image+')'}"></div>
  95. <div class="vn-picture-info">{{dataGroup.news[0].description}}</div>
  96. <div class="vn-more">
  97. <a :href="dataGroup.news[0].url">阅读原文</a>
  98. </div>
  99. </div>
  100. <div class="vn-content" v-else>
  101. <div class="con-item-box">
  102. <div class="vn-picture" :style="{backgroundImage: 'url('+dataGroup.news[0].image+')'}"></div>
  103. <div class="first-title">{{dataGroup.news[0].title}}</div>
  104. </div>
  105. <div class="con-item-list clearfix" v-for="(newinfos,index) in dataGroup.news" v-if="index>0">
  106. <div class="list-tit-info fl">{{newinfos.title}}</div>
  107. <div class="list-pic fr" :style="{backgroundImage: 'url('+newinfos.image+')'}"></div>
  108. </div>
  109. </div>
  110. </div>
  111. <div class="view-item text-box clearfix" :class="{show:type=='image'}">
  112. <div class="avatar fl"><img src="/system/images/head.gif" /></div>
  113. <div class="box-content fl">
  114. <img class="picbox" :src="dataGroup.image.src" alt="" />
  115. </div>
  116. </div>
  117. <?php /* <div class="view-item music-box clearfix" :class="{show:type=='voice'}">
  118. <div class="avatar fl"><img src="/system/images/head.gif" /></div>
  119. <div class="box-content fl">
  120. <p>{{musicTit}}</p>
  121. <p>{{musicInfo}}</p>
  122. <div class="music-icon"><i class="fa fa-music"></i></div>
  123. </div>
  124. </div> */ /* <div class="view-item video-box" :class="{show:type=='video'}">
  125. <div class="vn-content">
  126. <div class="vn-title">{{videoTit}}</div>
  127. <div class="vn-time">11月11日</div>
  128. <div class="video-content">
  129. <video src="" width="100%" controls="" preload=""></video>
  130. </div>
  131. </div>
  132. <div class="vn-more">{{videoInfo}}</div>
  133. </div> */ ?>
  134. </section>
  135. </div>
  136. <div class="control-wrapper col-sm-8">
  137. <section>
  138. <form action="" method="post" enctype="multipart/form-data">
  139. <div class="control-title">{{msg}}</div>
  140. <div class="control-body">
  141. <div class="form-group clearfix">
  142. <label class="col-sm-2 control-label tips" for="">规则状态</label>
  143. <div class="group-item col-sm-10">
  144. <div class="radio i-checks" style="display:inline;margin-left: 16px;">
  145. <label class="" style="padding-left: 0;">
  146. <input style="position: relative;top: 1px;left: 3px;" checked="checked" v-model="status" type="radio" value="1" name="status">
  147. 启用</label>
  148. </div>
  149. <div class="radio i-checks" style="display:inline;margin-left: 32px;">
  150. <label class="" style="padding-left: 0;">
  151. <input style="position: relative;top: 1px;left: 3px;" type="radio" value="0" v-model="status" name="status">
  152. 禁用
  153. </label>
  154. </div>
  155. </div>
  156. </div>
  157. <div class="form-group clearfix">
  158. <label class="col-sm-2 tips" for="">消息类型</label>
  159. <div class="col-sm-10 group-item">
  160. <select class="form-control m-b" v-model="type" name="account">
  161. <option value="text">文字消息</option>
  162. <option value="image">图片消息</option>
  163. <option value="news">图文消息</option>
  164. <option value="voice">声音消息</option>
  165. </select>
  166. </div>
  167. </div>
  168. <div class="control-main">
  169. <!-- 文字 -->
  170. <div class="control-item control-main-txt" :class="{show:type=='text'}">
  171. <div class="form-group clearfix">
  172. <label class="col-sm-2 tips" for="">规则内容</label>
  173. <div class="col-sm-10 group-item">
  174. <textarea v-model="dataGroup.text.content" name="" id="" cols="30" rows="10" placeholder="请输入内容"></textarea>
  175. </div>
  176. </div>
  177. </div>
  178. <!-- 图文 -->
  179. <div class="control-item control-main-news" :class="{show:type=='news'}">
  180. <div class="form-group clearfix">
  181. <label class="col-sm-2 tips" for="">选取图文</label>
  182. <div class="col-sm-10 group-item" @click="selectNews" style="cursor: pointer;"><span>选择图文消息</span></div>
  183. </div>
  184. </div>
  185. <!-- 图片 -->
  186. <div class="control-item control-main-picture" :class="{show:type=='image'}">
  187. <div class="form-group clearfix">
  188. <label class="col-sm-2 tips" for="">图片地址</label>
  189. <div class="col-sm-10 group-item">
  190. <input v-model="dataGroup.image.src" class="form-control" readonly type="text" placeholder="请上传图片"/>
  191. <span id="flag" class="file-btn" @click="uploadImg">上传</span>
  192. </div>
  193. </div>
  194. <div class="tips-info">
  195. <span>文件最大2Mb,支持bmp/png/jpeg/jpg/gif格式</span>
  196. <div class="upload-img"><img src="" alt="" /><span>上传图片</span></div>
  197. </div>
  198. </div>
  199. <!-- 音乐 -->
  200. <div class="control-item control-main-music" :class="{show:type=='voice'}">
  201. <div class="form-group clearfix">
  202. <label class="col-sm-2 tips" for="">上传声音</label>
  203. <div class="col-sm-10 group-item">
  204. <input class="form-control" type="text" readonly placeholder="请上传音乐文件或输入音乐URL地址" v-model="dataGroup.voice.src"/>
  205. <span class="file-btn" @click="uploadMusic">上传</span>
  206. </div>
  207. </div>
  208. </div>
  209. <!-- 视屏 -->
  210. <div class="control-item control-main-video" :class="{show:type=='video'}">
  211. <div class="form-group clearfix">
  212. <label class="col-sm-2 tips" for="">视频标题</label>
  213. <div class="col-sm-10 group-item">
  214. <input class="form-control" type="text" placeholder="视频标题"/>
  215. </div>
  216. </div>
  217. <div class="form-group clearfix">
  218. <label class="col-sm-2 tips" for="">视频上传</label>
  219. <div class="col-sm-10 group-item">
  220. <input class="form-control" type="text" placeholder="请上传音乐文件或输入视频URL地址"/>
  221. <span class="file-btn">上传</span>
  222. </div>
  223. </div>
  224. <div class="tips-info">
  225. <p>文件最大10MB,只支持MP4格式</p>
  226. </div>
  227. <div class="form-group">
  228. <label class="col-sm-2 tips" for="">视频描述</label>
  229. <div class="col-sm-10 group-item">
  230. <textarea name="" id="" cols="30" rows="10" placeholder="请输入内容"></textarea>
  231. </div>
  232. </div>
  233. <input id="file" type="file" name="file" style="display: none;" />
  234. </div>
  235. </div>
  236. </div>
  237. <div style="text-align: center;"><button type="button" class="btn btn-w-m btn-primary" @click="submit">提交</button></div>
  238. </form>
  239. </section>
  240. </div>
  241. </div>
  242. </div>
  243. </div>
  244. </div>
  245. <script type="text/javascript">
  246. $eb = parent._mpApi, $upload = $('#file');
  247. $eb.mpFrame.start(function (Vue) {
  248. var $http = $eb.axios;
  249. const vm = new Vue({
  250. data: {
  251. status: 1,
  252. msg: '',
  253. type: 'text',
  254. textBox: '',
  255. pic: '',
  256. key:'',
  257. dataGroup:{
  258. text:{
  259. content:''
  260. },
  261. image:{
  262. src:''
  263. },
  264. voice:{
  265. src:''
  266. },
  267. news:[]
  268. },
  269. uploadColl: function () {
  270. },
  271. uploadLink: ''
  272. },
  273. methods: {
  274. transfer:function (str){
  275. var s = "";
  276. if (str.length === 0) { return "";}
  277. s = str.replace(/&amp;/g, "&");
  278. s = s.replace(/&lt;/g, "<");
  279. s = s.replace(/&gt;/g, ">");
  280. s = s.replace(/&nbsp;/g, " ");
  281. s = s.replace(/&#39;/g, "\'");
  282. s = s.replace(/&quot;/g, "\"");
  283. return s;
  284. },
  285. submit: function(){
  286. if(!this.check()) return false;
  287. $eb.axios.post("<?php echo Url('save',array('key'=>$key)); ?>",{key:this.key,status:this.status,data:this.dataGroup[this.type],type:this.type}).then(function(res){
  288. if(res.status == 200 && res.data.code == 200){
  289. $eb.message('success','设置成功!');
  290. }
  291. else
  292. $eb.message('error',res.data.msg || '设置失败!');
  293. }).catch(this.returnError);
  294. },
  295. check: function(){
  296. var dataGroup = this.dataGroup;
  297. switch (this.type){
  298. case 'text':
  299. if(dataGroup.text.content == '')
  300. return this.returnError('请输入文字消息内容');
  301. break;
  302. case 'image':
  303. if(dataGroup.image.src == '')
  304. return this.returnError('请上传图片');
  305. break;
  306. case 'news':
  307. if(dataGroup.news.length < 1)
  308. return this.returnError('请选择图文消息');
  309. break;
  310. case 'voice':
  311. if(dataGroup.voice.src == '')
  312. return this.returnError('请上传声音');
  313. break;
  314. }
  315. return true;
  316. },
  317. returnError:function(err){
  318. $eb.message('error',err);
  319. return false;
  320. },
  321. uploadImg: function () {
  322. var vm = this;
  323. this.uploadLink = "<?php echo Url('upload_img'); ?>";
  324. $('#file').attr('accept','image/*');
  325. this.uploadColl = function(pic){
  326. vm.dataGroup.image.src = vm.transfer(pic);
  327. };
  328. $('#file').trigger('click');
  329. },
  330. uploadMusic:function(){
  331. var vm = this;
  332. this.uploadLink = "<?php echo Url('upload_file'); ?>";
  333. $('#file').attr('accept','audio/*');
  334. this.uploadColl = function(pic){
  335. vm.dataGroup.voice.src = pic;
  336. };
  337. $('#file').trigger('click');
  338. },
  339. upload: function () {
  340. var vm = this;
  341. $('#file').on('change', function () {
  342. $.ajaxFileUpload({
  343. url: vm.uploadLink,
  344. type: 'post',
  345. secureuri: false, //一般设置为false
  346. data:{'file':'file'},
  347. fileElementId: 'file', // 上传文件的id、name属性名
  348. dataType: 'json', //返回值类型,一般设置为json、application/json
  349. success: function (data, status) {
  350. if(data.code == 200){
  351. vm.uploadColl && vm.uploadColl(data.data);
  352. $eb.message('success','上传成功!');
  353. }else{
  354. $eb.message('error',data.msg);
  355. }
  356. vm.upload();
  357. },
  358. error: function (data, status, e) {
  359. $eb.message('error','上传失败!');
  360. vm.upload();
  361. }
  362. });
  363. });
  364. },
  365. selectNews:function(){
  366. var vm = this,i;
  367. parent._selectNews$eb = function(data){
  368. var newsList = [];
  369. data.new.map((news)=>{
  370. newsList.push({
  371. title:news.title,
  372. description:news.synopsis,
  373. url:news.url,
  374. image:news.image_input,
  375. date:moment(news.add_time*1000).format('M月D日'),
  376. id:news.id
  377. });
  378. });
  379. vm.dataGroup.news = newsList;
  380. delete parent._selectNews$eb;
  381. $eb.closeModalFrame(i);
  382. };
  383. i = $eb.createModalFrame('选择图文消息',"<?php echo Url('admin/wechat.wechatNewsCategory/select',['callback'=>'_selectNews$eb','type'=>$type]); ?>",{w:975});
  384. }
  385. },
  386. mounted: function () {
  387. window.vm = this;
  388. this.upload();
  389. this.key = "<?php echo htmlentities($key); ?>"
  390. this.msg = "<?php echo htmlentities($title); ?>";
  391. var res= <?php echo json_encode($replay_arr); ?>;
  392. window.vm.type = res.type;
  393. window.vm.status = res.status;
  394. if(res.type == 'image') {
  395. window.vm.dataGroup.image.src = res.data.src;
  396. }else if(res.type == 'text'){
  397. window.vm.dataGroup.text.content = res.data.content;
  398. }else if(res.type == 'voice'){
  399. window.vm.dataGroup.voice.src = res.data.src;
  400. }else if(res.type == 'news'){
  401. window.vm.dataGroup.news = res.data;
  402. }
  403. if(window.vm.used_key){
  404. window.vm.keyword = res.key;
  405. }
  406. }
  407. });
  408. vm.$mount(document.getElementById('app'));
  409. });
  410. </script>
  411. </div>
  412. </body>
  413. </html>