form.html 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215
  1. {extend name="../../admin/view/main"}
  2. {block name="style"}{include file='news/formstyle'}{/block}
  3. {block name='content'}
  4. <div id="NewsEditor" class="layui-clear nowrap padding-bottom-30">
  5. <div class="layui-card news-left">
  6. <div class="layui-card-body layui-hide">
  7. <div ng-if="list.length > 0" ng-repeat="x in list">
  8. <div class="news-item transition" ng-click="setItem($index,$event)" style="{{x.style}}" ng-class="x.active?'active':''">
  9. <a ng-click="delItem($index, $event)" class="transition layui-icon layui-hide">&#x1006;</a>
  10. <a ng-click="dnItem($index, $event)" class="transition layui-icon layui-hide">&#xe61a;</a>
  11. <a ng-click="upItem($index, $event)" class="transition layui-icon layui-hide">&#xe619;</a>
  12. <span class="news-title" ng-bind="x.title"></span>
  13. </div>
  14. <hr>
  15. </div>
  16. <div ng-if="list.length<1" class="news-item transition active">
  17. <a ng-click="delItem($index, $event)" class="transition layui-icon layui-hide">&#x1006;</a>
  18. <a ng-click="dnItem($index, $event)" class="transition layui-icon layui-hide">&#xe61a;</a>
  19. <a ng-click="upItem($index, $event)" class="transition layui-icon layui-hide">&#xe619;</a>
  20. <span class="news-title"></span>
  21. <hr>
  22. </div>
  23. <a class='article-add transition' ng-click="addItem()" data-text-tip="添加图文"><i class="layui-icon layui-icon-add-1"></i></a>
  24. </div>
  25. </div>
  26. <div class="layui-card news-right">
  27. <div class="layui-card-body">
  28. <form class="layui-form padding-20" role="form" name="news" onsubmit="return false">
  29. <label class="layui-form-item relative block">
  30. <span class="color-green">文章标题</span>
  31. <input maxlength="64" ng-model="item.title" required placeholder="请在这里输入标题" name='title' class="layui-input">
  32. </label>
  33. <label class="layui-form-item relative block">
  34. <span class="color-green">文章作者</span>
  35. <input maxlength="64" ng-model="item.author" required placeholder="请输入文章作者" name='author' class="layui-input">
  36. </label>
  37. <div class="layui-form-item label-required-prev">
  38. <span class="color-green">图文封面大图片</span>
  39. <div class="layui-clear">
  40. <div class="upload-image-box pull-left transition" data-tips-image="{{item.local_url}}" style="{{item.style}}">
  41. <input ng-model="item.local_url" data-auto-none value="{{item.local_url}}" type="hidden" name="local_url">
  42. </div>
  43. <div class="pull-left padding-top-15 padding-left-15">
  44. <button type="button" data-title="上传图片" data-file="btn" data-type="jpg,png,jpeg" data-field="local_url" class="layui-btn layui-btn-sm layui-btn-primary">上传图片</button>
  45. <br>
  46. <label class="think-checkbox notselect margin-top-15">
  47. <input ng-model="item.show_cover_pic" ng-checked="!!item.show_cover_pic" data-auto-none type="checkbox" value="1" name="show_cover_pic" lay-ignore> 在正文顶部显示此图片
  48. </label>
  49. </div>
  50. </div>
  51. <p class="color-desc">封面大图片建议尺寸 900像素 * 500像素</p>
  52. </div>
  53. <div class="layui-form-item label-required-prev">
  54. <span class="color-green">图文文章内容</span>
  55. <textarea class="layui-hide" ng-model="item.content" name='content'></textarea>
  56. </div>
  57. <label class="layui-form-item relative block">
  58. <span class="help-block">摘要选填,如果不填写会默认抓取正文前54个字</span>
  59. <textarea ng-model="item.digest" name="digest" class="layui-textarea" style="height:80px;line-height:18px"></textarea>
  60. </label>
  61. <label class="layui-form-item relative block">
  62. <span class="help-block">原文链接 <span class="color-blue">选填</span>,填写之后在图文左下方会出现此链接</span>
  63. <input pattern="^(http:\/\/|^https:\/\/|^\/\/)((\w|=|\?|\.|\/|&|-)+)" placeholder="请输入跳转链接地址" ng-model="item.content_source_url" maxlength="200" name='content_source_url' class="layui-input">
  64. </label>
  65. <div class="layui-form-item text-center padding-top-30">
  66. <input ng-model="x.read_num" type="hidden">
  67. <button ng-click="submit()" type="button" class="layui-btn">保存图文</button>
  68. </div>
  69. </form>
  70. </div>
  71. </div>
  72. </div>
  73. {/block}
  74. {block name='script'}
  75. <script>
  76. require(['angular', 'ckeditor'], function () {
  77. var editor;
  78. var $form = $('form[name="news"]');
  79. var $vali = $form.vali().data('validate');
  80. var app = angular.module("NewsEditor", []).run(callback);
  81. angular.bootstrap(document.getElementById(app.name), [app.name]);
  82. function callback($rootScope) {
  83. $rootScope.list = [];
  84. $rootScope.item = {};
  85. $.form.load('{:request()->url()}', {output: 'json'}, 'get', function (ret) {
  86. return $rootScope.$apply(function () {
  87. apply((ret.data || {articles: []}).articles || []);
  88. }), false;
  89. });
  90. function apply(list) {
  91. if (list.length < 1) list.push({
  92. title: '新建图文', author: '管理员', content: '文章内容',
  93. read_num: 0, local_url: '__FULL__/static/theme/img/image.png',
  94. });
  95. for (var i in list) {
  96. list[i].active = false;
  97. list[i].style = "background-image:url('" + list[i].local_url + "')";
  98. }
  99. $rootScope.list = list;
  100. $rootScope.item = $rootScope.list[0];
  101. $rootScope.setItemValue('active', true);
  102. $('.layui-card-body.layui-hide').removeClass('layui-hide');
  103. setTimeout(function () {
  104. if (editor) editor.destroy();
  105. editor = window.createEditor('[name="content"]');
  106. if (typeof editor !== 'undefined') {
  107. editor.setData($rootScope.item.content);
  108. $vali.checkAllInput();
  109. } else $('[name="content"]').on('editor.init', function (event, myEditor) {
  110. myEditor.setData($rootScope.item.content);
  111. editor = myEditor;
  112. $vali.checkAllInput();
  113. });
  114. }, 100);
  115. }
  116. $rootScope.upItem = function (index, $event) {
  117. $event.stopPropagation();
  118. var tmp = [], cur = $rootScope.list[index];
  119. if (index < 1) return false;
  120. for (var i in $rootScope.list) {
  121. (parseInt(i) === parseInt(index) - 1) && tmp.push(cur);
  122. (parseInt(i) !== parseInt(index)) && tmp.push($rootScope.list[i]);
  123. }
  124. apply(tmp);
  125. };
  126. $rootScope.dnItem = function (index, $event) {
  127. $event.stopPropagation();
  128. var tmp = [], cur = $rootScope.list[index];
  129. if (index > $rootScope.list.length - 2) return false;
  130. for (var i in $rootScope.list) {
  131. (parseInt(i) !== parseInt(index)) && tmp.push($rootScope.list[i]);
  132. (parseInt(i) === parseInt(index) + 1) && tmp.push(cur);
  133. }
  134. apply(tmp);
  135. };
  136. $rootScope.delItem = function (index, $event) {
  137. $event.stopPropagation();
  138. var list = $rootScope.list, temp = [];
  139. for (var i in list) (parseInt(i) !== parseInt(index)) && temp.push(list[i]);
  140. apply(temp);
  141. };
  142. $rootScope.setItem = function (index, $event) {
  143. $event.stopPropagation();
  144. $vali.checkAllInput();
  145. if ($form.find('.validate-error').size() > 0) return 0;
  146. if (editor.getData().length < 1) {
  147. return $.msg.tips('文章内容不能为空,请输入文章内容!');
  148. }
  149. for (var i in $rootScope.list) if (parseInt(i) !== parseInt(index)) {
  150. $rootScope.list[i].active = false;
  151. } else {
  152. $rootScope.item.content = editor.getData();
  153. $rootScope.item = $rootScope.list[i];
  154. editor.setData($rootScope.item.content);
  155. $rootScope.setItemValue('active', true);
  156. }
  157. };
  158. $rootScope.setItemValue = function (name, value) {
  159. $rootScope.item[name] = value;
  160. $rootScope.item.style = "background-image:url('" + $rootScope.item.local_url + "')";
  161. };
  162. $rootScope.addItem = function () {
  163. if ($rootScope.list.length > 7) {
  164. return $.msg.tips('最多允许增加7篇文章哦!');
  165. }
  166. $rootScope.list.push({
  167. title: '新建图文',
  168. author: '管理员',
  169. content: '文章内容',
  170. read_num: 0,
  171. local_url: '__FULL__/static/theme/img/image.png',
  172. style: "background-image:url('__FULL__/static/theme/img/image.png')"
  173. });
  174. };
  175. $rootScope.submit = function () {
  176. $vali.checkAllInput();
  177. if ($form.find('.validate-error').size() > 0) {
  178. return $.msg.tips('表单验证不成功,请输入需要的内容!');
  179. }
  180. $rootScope.item.content = editor.getData();
  181. var data = [];
  182. for (var i in $rootScope.list) data.push({
  183. id: $rootScope.list[i].id,
  184. title: $rootScope.list[i].title,
  185. author: $rootScope.list[i].author,
  186. digest: $rootScope.list[i].digest,
  187. content: $rootScope.list[i].content,
  188. read_num: $rootScope.list[i].read_num,
  189. local_url: $rootScope.list[i].local_url,
  190. show_cover_pic: $rootScope.list[i].show_cover_pic ? 1 : 0,
  191. content_source_url: $rootScope.list[i].content_source_url,
  192. });
  193. $.form.load('{:request()->url()}', {data: data}, "post");
  194. };
  195. $('[name="local_url"]').on('change', function (value) {
  196. value = this.value;
  197. $rootScope.$apply(function () {
  198. $rootScope.setItemValue('local_url', value);
  199. });
  200. });
  201. }
  202. });
  203. </script>
  204. {/block}