keys.form.html 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343
  1. {extend name='extra@admin/content' /}
  2. {block name="style"}
  3. <style>
  4. .layui-box .control-label {
  5. margin: 0;
  6. padding-left: 0;
  7. padding-right: 0;
  8. }
  9. .layui-box textarea {
  10. width: 95%
  11. }
  12. </style>
  13. {/block}
  14. {block name="content"}
  15. <div class='mobile-preview pull-left'>
  16. <div class='mobile-header'>公众号</div>
  17. <div class='mobile-body'>
  18. <iframe id="phone-preview" frameborder="0" scrolling="no" marginheight="0" marginwidth="0"></iframe>
  19. </div>
  20. </div>
  21. <div class="row" style="min-width:1130px">
  22. <!-- 效果预览区域 开始 -->
  23. <!--<div class="col-xs-4" style="width:320px;">-->
  24. <!--<div style="position:relative" class="phone-container animated fadeIn">-->
  25. <!--<img style='width:100%' src="__PUBLIC__/static/theme/default/img/wechat/mobile_head.png" alt=""/>-->
  26. <!--<div class="phone-screen">-->
  27. <!--<iframe id="phone-preview" frameborder="0" scrolling="no" marginheight="0" marginwidth="0"></iframe>-->
  28. <!--</div>-->
  29. <!--</div>-->
  30. <!--</div>-->
  31. <!-- 效果预览区域 结束 -->
  32. <div class='col-xs-6' style="margin-left:15px">
  33. <form class="form-horizontal" role="form" data-auto="true" action="__SELF__" method="post">
  34. <fieldset class="layui-elem-field layui-box" style="height:580px;position:absolute;width:535px">
  35. <legend>{$title}</legend>
  36. <div>
  37. {if !isset($vo.keys) or ($vo.keys neq 'default' and $vo.keys neq 'subscribe')}
  38. <div class="form-group">
  39. <label class="col-md-2 control-label layui-form-label ">关 键 字</label>
  40. <div class="col-md-9">
  41. <input required="required" title='请输入关键字' maxlength='20' name='keys' class="layui-input"
  42. value='{$vo.keys|default=""}'>
  43. </div>
  44. </div>
  45. {else}
  46. <div class="form-group">
  47. <label class="col-md-2 control-label layui-form-label label-required">规则状态</label>
  48. <div class="col-md-9">
  49. <div class="mt-radio-inline" style='padding-bottom:0'>
  50. {if !isset($vo.status) or $vo.status neq 0}
  51. <label class="layui-form-label">
  52. <input data-none-auto type="radio" checked name="status" value="1"> 启用
  53. </label>
  54. <label class="layui-form-label">
  55. <input data-none-auto type="radio" name="status" value="0"> 禁用
  56. </label>
  57. {else}
  58. <label class="layui-form-label">
  59. <input data-none-auto type="radio" name="status" value="1"> 启用
  60. </label>
  61. <label class="layui-form-label">
  62. <input data-none-auto type="radio" checked name="status" value="0"> 禁用
  63. </label>
  64. {/if}
  65. </div>
  66. </div>
  67. </div>
  68. {/if}
  69. <div class="form-group">
  70. <label class="col-md-2 control-label layui-form-label label-required">消息类型</label>
  71. <div class="col-md-9">
  72. <select name='type' class='layui-input'>
  73. {if !isset($vo.type) or $vo.type eq 'text'}
  74. <option value='text' selected>文字</option>
  75. {else}
  76. <option value='text'>文字</option>
  77. {/if}
  78. {if isset($vo.type) and $vo.type eq 'news'}
  79. <option value='news' selected>图文</option>
  80. {else}
  81. <option value='news'>图文</option>
  82. {/if}
  83. {if isset($vo.type) and $vo.type eq 'image'}
  84. <option value='image' selected>图片</option>
  85. {else}
  86. <option value='image'>图片</option>
  87. {/if}
  88. <!--{if isset($vo.type) and $vo.type eq 'voice'}-->
  89. <!--<option value='voice' selected>语音</option>-->
  90. <!--{else}-->
  91. <!--<option value='voice'>语音</option>-->
  92. <!--{/if}-->
  93. {if isset($vo.type) and $vo.type eq 'music'}
  94. <option value='music' selected>音乐</option>
  95. {else}
  96. <option value='music'>音乐</option>
  97. {/if}
  98. {if isset($vo.type) and $vo.type eq 'video'}
  99. <option value='video' selected>视频</option>
  100. {else}
  101. <option value='video'>视频</option>
  102. {/if}
  103. </select>
  104. </div>
  105. </div>
  106. <div class="form-group" data-keys-type='text'>
  107. <label class="col-md-2 control-label layui-form-label label-required">规则内容</label>
  108. <div class="col-md-9">
  109. <textarea name="content" maxlength="10000" class="form-control" style="height:100px">{$vo.content|default='说点什么吧'}</textarea>
  110. </div>
  111. </div>
  112. <div class="form-group" data-keys-type='news'>
  113. <label class="col-md-2 control-label layui-form-label">选取图文</label>
  114. <div class="col-md-9">
  115. <a class="btn btn-link"
  116. data-iframe="{:url('wechat/news/select')}?field={:encode('news_id')}">
  117. 选择图文
  118. </a>
  119. <input type="hidden" class='layui-input' value="{$vo.news_id|default=0}" name="news_id"/>
  120. </div>
  121. </div>
  122. <div class="form-group" data-keys-type='image'>
  123. <label class="col-md-2 control-label layui-form-label label-required">图片地址</label>
  124. <div class="col-md-9">
  125. <input type="text" class="layui-input"
  126. onchange="$(this).nextAll('img').attr('src', this.value);"
  127. value="{$vo.image_url|default='__PUBLIC__/static/theme/default/img/image.png'}"
  128. name="image_url" required="required" title="请上传图片或输入图片URL地址"/>
  129. <p class="help-block">文件最大2Mb,支持bmp/png/jpeg/jpg/gif格式</p>
  130. <img style="width:112px;height:auto;" data-tips-image
  131. src='{$vo.image_url|default="__PUBLIC__/static/theme/default/img/image.png"}'/>
  132. <a data-file="one" data-type="bmp,png,jpeg,jpg,gif" data-field="image_url"
  133. class='btn btn-link'>上传图片</a>
  134. </div>
  135. </div>
  136. <div class="form-group" data-keys-type='voice'>
  137. <label class="col-md-2 control-label layui-form-label label-required">上传语音</label>
  138. <div class="col-md-9">
  139. <div class="input-group">
  140. <input class='layui-input' type="text" value="{$vo.voice_url|default=''}"
  141. name="voice_url" required="required" title="请上传语音文件或输入语音URL地址  "/>
  142. <a data-file="one" data-type="mp3,wma,wav,amr" data-field="voice_url"
  143. class="input-group-addon">
  144. <i class="fa fa-file"></i>
  145. </a>
  146. </div>
  147. <p class="help-block">文件最大2Mb,播放长度不超过60s,mp3/wma/wav/amr格式</p>
  148. </div>
  149. </div>
  150. <div class="form-group" data-keys-type='music'>
  151. <label class="col-md-2 control-label layui-form-label">音乐标题</label>
  152. <div class="col-md-9">
  153. <input class='layui-input' value="{$vo.music_title|default='音乐标题'}"
  154. name="music_title" required="required" title="请输入音乐标题"/>
  155. </div>
  156. </div>
  157. <div class="form-group" data-keys-type='music'>
  158. <label class="col-md-2 control-label layui-form-label label-required">上传音乐</label>
  159. <div class="col-md-9">
  160. <div class="input-group">
  161. <input class='layui-input' type="text" value="{$vo.music_url|default=''}"
  162. name="music_url" required="required" title="请上传音乐文件或输入音乐URL地址  "/>
  163. <a data-file="one" data-type="mp3,wma,wav,amr" data-field="music_url"
  164. class="input-group-addon"><i class="fa fa-file"></i>
  165. </a>
  166. </div>
  167. </div>
  168. </div>
  169. <div class="form-group" data-keys-type='music'>
  170. <label class="col-md-2 control-label layui-form-label">音乐描述</label>
  171. <div class="col-md-9">
  172. <input name="music_desc" class="layui-input" value="{$vo.music_desc|default='音乐描述'}"/>
  173. </div>
  174. </div>
  175. <div class="form-group" data-keys-type='music'>
  176. <label class="col-md-2 control-label layui-form-label">音乐图片</label>
  177. <div class="col-md-9">
  178. <input onchange="$(this).nextAll('img').attr('src', this.value);"
  179. type="text" class="layui-input"
  180. value="{$vo.music_image|default='__PUBLIC__/static/theme/default/img/image.png'}"
  181. name="music_image" required="required" title="请上传音乐图片或输入音乐图片URL地址  "/>
  182. <p class="help-block">文件最大64KB,只支持JPG格式</p>
  183. <img style="width:112px;height:auto;" data-tips-image
  184. src='{$vo.music_image|default="__PUBLIC__/static/theme/default/img/image.png"}'/>
  185. <a data-file="one" data-type="jpg" data-field="music_image" class='btn btn-link'>上传图片</a>
  186. </div>
  187. </div>
  188. <div class="form-group" data-keys-type='video'>
  189. <label class="col-md-2 control-label layui-form-label">视频标题</label>
  190. <div class="col-md-9">
  191. <input class='layui-input' value="{$vo.video_title|default='视频标题'}" name="video_title"
  192. required="required" title="请输入视频标题"/>
  193. </div>
  194. </div>
  195. <div class="form-group" data-keys-type='video'>
  196. <label class="col-md-2 control-label layui-form-label label-required">上传视频</label>
  197. <div class="col-md-9">
  198. <div class="input-group">
  199. <input class='layui-input' type="text" value="{$vo.video_url|default=''}"
  200. name="video_url" required="required" title="请上传音乐视频或输入音乐视频URL地址  "/>
  201. <a data-file="one" data-type="mp4" data-field="video_url" class="input-group-addon">
  202. <i class="fa fa-file"></i>
  203. </a>
  204. </div>
  205. <p class="help-block">文件最大10MB,只支持MP4格式</p>
  206. </div>
  207. </div>
  208. <div class="form-group" data-keys-type='video'>
  209. <label class="col-md-2 control-label layui-form-label">视频描述</label>
  210. <div class="col-md-9">
  211. <textarea name="video_desc" maxlength="50" class="form-control" style="height:100px">{$vo.video_desc|default='视频描述'}</textarea>
  212. </div>
  213. </div>
  214. <div class="text-center" style="position:absolute;bottom:20px;width:100%;">
  215. <div class="hr-line-dashed"></div>
  216. <button class="layui-btn menu-submit">保存数据</button>
  217. {if !isset($vo.keys) || !in_array($vo.keys,['default','subscribe'])}
  218. <button onclick="$.msg.confirm('确定取消编辑吗?', function () {
  219. history.back()
  220. })"
  221. class="layui-btn layui-btn-danger" type='button'>取消编辑
  222. </button>
  223. {/if}
  224. </div>
  225. {if isset($vo['id'])}<input type='hidden' value='{$vo.id}' name='id'/>{/if}
  226. </div>
  227. </fieldset>
  228. </form>
  229. </div>
  230. </div>
  231. {/block}
  232. {block name="script"}
  233. <script>
  234. $(function () {
  235. /**
  236. * 默认类型事件
  237. * @type String
  238. */
  239. $('body').off('change', 'select[name=type]').on('change', 'select[name=type]', function () {
  240. var value = $(this).val(), $form = $(this).parents('form');
  241. var $current = $form.find('[data-keys-type="' + value + '"]').removeClass('hide');
  242. $form.find('[data-keys-type]').not($current).addClass('hide');
  243. switch (value) {
  244. case 'news':
  245. return $('[name="news_id"]').trigger('change');
  246. case 'text':
  247. return $('[name="content"]').trigger('change');
  248. case 'image':
  249. return $('[name="image_url"]').trigger('change');
  250. case 'video':
  251. return $('[name="video_url"]').trigger('change');
  252. case 'music':
  253. return $('[name="music_url"]').trigger('change');
  254. case 'voice':
  255. return $('[name="voice_url"]').trigger('change');
  256. }
  257. });
  258. function showReview(params) {
  259. $('#phone-preview').attr('src', '{:url("@wechat/review")}?' + $.param(params || {}));
  260. }
  261. // 图文显示预览
  262. $('body').off('change', '[name="news_id"]').on('change', '[name="news_id"]', function () {
  263. showReview({type: 'news', content: this.value});
  264. });
  265. // 文字显示预览
  266. $('body').off('change', '[name="content"]').on('change', '[name="content"]', function () {
  267. showReview({type: 'text', content: this.value});
  268. });
  269. // 图片显示预览
  270. $('body').off('change', '[name="image_url"]').on('change', '[name="image_url"]', function () {
  271. showReview({type: 'image', content: this.value});
  272. });
  273. // 音乐显示预览
  274. var musicSelector = '[name="music_url"],[name="music_title"],[name="music_desc"],[name="music_image"]';
  275. $('body').off('change', musicSelector).on('change', musicSelector, function () {
  276. var params = {type: 'music'}, $parent = $(this).parents('form');
  277. params.title = $parent.find('[name="music_title"]').val();
  278. params.url = $parent.find('[name="music_url"]').val();
  279. params.image = $parent.find('[name="music_image"]').val();
  280. params.desc = $parent.find('[name="music_desc"]').val();
  281. showReview(params);
  282. });
  283. // 视频显示预览
  284. var videoSelector = '[name="video_title"],[name="video_url"],[name="video_desc"]';
  285. $('body').off('change', videoSelector).on('change', videoSelector, function () {
  286. var params = {type: 'video'}, $parent = $(this).parents('form');
  287. params.title = $parent.find('[name="video_title"]').val();
  288. params.url = $parent.find('[name="video_url"]').val();
  289. params.desc = $parent.find('[name="video_desc"]').val();
  290. showReview(params);
  291. });
  292. // 默认事件触发
  293. $('select[name=type]').map(function () {
  294. $(this).trigger('change');
  295. });
  296. });
  297. </script>
  298. {/block}