save.html 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292
  1. <style>
  2. .ck-editor__editable_inline {
  3. height: 400px !important;
  4. }
  5. </style>
  6. <article class="cl pd-20">
  7. <form action="{:url('/sys/article/save')}" method="post" class="form form-horizontal" id="form-save">
  8. <input type="hidden" name="id" value="{$data['id']}">
  9. <input type="hidden" name="cjid" value="{$data['cjid']}">
  10. <input type="hidden" name="content_type" value="{$data['content_type']}">
  11. <div class="row cl">
  12. <label class="form-label col-xs-4 col-sm-2">
  13. <span class="c-red">*</span>栏目:</label>
  14. <div class="formControls col-xs-8 col-sm-6">
  15. <span class="select-box inline">
  16. <select name="cid" class="select" id="cid">
  17. <option value="">所有栏目</option>
  18. {foreach $category_tree as $value}
  19. <option value="{$value.id}" {eq name='data.cid' value="$value.id" }selected{/eq}>{$value.name}
  20. </option>
  21. {notempty name="value.child"}
  22. {foreach $value.child as $val}
  23. <option value="{$val.id}" {eq name='data.cid' value="$val.id" }selected{/eq}>--{$val.name}
  24. </option>
  25. {notempty name="val.child"}
  26. {foreach $val.child as $vo}
  27. <option value="{$vo.id}" {eq name='data.cid' value="$vo.id" }selected{/eq}>&nbsp;&nbsp;└
  28. --{$vo.name}
  29. </option>
  30. {/foreach}
  31. {/notempty}
  32. {/foreach}
  33. {/notempty}
  34. {/foreach}
  35. </select>
  36. </span>
  37. </div>
  38. <div class="col-3"> </div>
  39. </div>
  40. <div class="row cl">
  41. <label class="form-label col-xs-4 col-sm-2">
  42. <span class="c-red">*</span>标题:</label>
  43. <div class="formControls col-xs-8 col-sm-6">
  44. <input type="text" class="input-text" value="{$data.title}" placeholder="请填写标题" id="title" name="title">
  45. </div>
  46. <div class="col-3"> </div>
  47. </div>
  48. <div class="row cl">
  49. <label class="form-label col-xs-4 col-sm-2">
  50. 作者: </label>
  51. <div class="formControls col-xs-4 col-sm-2">
  52. <input type="text" class="input-text" value="{$data.writer}" placeholder="作者" id="writer" name="writer">
  53. </div>
  54. <label class="form-label col-xs-4 col-sm-2">
  55. 来源:</label>
  56. <div class="formControls col-xs-4 col-sm-2">
  57. <input type="text" class="input-text" value="{$data.source}" placeholder="来源" id="source" name="source">
  58. </div>
  59. <div class="col-3"> </div>
  60. </div>
  61. <div class="row cl">
  62. <div class="col-3"> </div>
  63. </div>
  64. <div class="row cl">
  65. <label class="form-label col-xs-4 col-sm-2">
  66. 标题图:</label>
  67. <div class="formControls col-xs-6 col-sm-4">
  68. <input type="text" class="input-text" value="{$data.titlepic}" name="titlepic" id="titlepic">
  69. <div style="width: 160px;height: 160px;">
  70. <a href="javascript:void(0);" onclick="addTitlePic()">
  71. <img id="view-titlepic"
  72. src="{$data.titlepic ? $data.titlepic : '/static/images/upload_picture.png'}" alt="标题图"
  73. title="{$data.titlepic ? '更换' : '添加'}标题图" style="max-width: 160px;max-height: 160px;">
  74. </a>
  75. </div>
  76. </div>
  77. <label class="form-label col-xs-2 col-sm-2">
  78. <a class="btn btn-success radius" href="javascript:addTitlePic();">{$data.titlepic ? '更换' :
  79. '添加'}标题图</a></label>
  80. <div class="col-3"> </div>
  81. </div>
  82. <div class="row cl">
  83. <label class="form-label col-xs-4 col-sm-2">
  84. 关键词:</label>
  85. <div class="formControls col-xs-8 col-sm-6">
  86. <input type="text" class="input-text" value="{$data.keywords}" placeholder="关键词" id="keywords"
  87. name="keywords">
  88. <span class="c-red">多个关键词用英文','分割</span>
  89. </div>
  90. <div class="col-3"> </div>
  91. </div>
  92. <div class="row cl">
  93. <label class="form-label col-xs-4 col-sm-2">内容简介:</label>
  94. <div class="formControls col-xs-8 col-sm-6">
  95. <textarea name="summary" id="summary" cols="" rows="" class="textarea" placeholder="说点什么...最多输入500个字符"
  96. datatype="*10-100" dragonfly="true" onKeyUp="textarealength(this,500)">{$data.summary}</textarea>
  97. <p class="textarea-numberbar">
  98. <em class="textarea-length">0</em>/500
  99. </p>
  100. </div>
  101. <div class="col-3"> </div>
  102. </div>
  103. <div class="row cl">
  104. <label class="form-label col-xs-4 col-sm-2">文章正文:</label>
  105. </div>
  106. <div class="row cl">
  107. <label class="form-label col-xs-1 col-sm-1"></label>
  108. <div class="formControls col-xs-11 col-sm-10">
  109. <div id="editor">{$data.content|raw}</div>
  110. </div>
  111. </div>
  112. <div class="row cl">
  113. <label class="form-label col-xs-2 col-sm-2">
  114. 点击量:</label>
  115. <div class="formControls col-xs-4 col-sm-2">
  116. <input type="number" class="input-text" value="{$data.hits}" id="hits" name="hits"
  117. style="width: 120px;">
  118. </div>
  119. <label class="form-label col-xs-2 col-sm-2">
  120. 排序:</label>
  121. <div class="formControls col-xs-4 col-sm-2">
  122. <input type="number" class="input-text" value="{$data.sort}" id="sort" name="sort"
  123. style="width: 120px;">
  124. </div>
  125. </div>
  126. <div class="row cl">
  127. <div class="col-xs-8 col-sm-9 col-xs-offset-4 col-sm-offset-3">
  128. <button type="button" class="btn btn-success radius" id="form-button-save">确&nbsp;定</button>
  129. <button type="button" class="btn btn-default radius" onclick="window.history.back();"
  130. style="margin-left:20px;">取&nbsp;消</button>
  131. </div>
  132. </div>
  133. </form>
  134. </article>
  135. <!-- 标题图上传 -->
  136. <div>
  137. <form id="form-upload_picture">
  138. <input type="file" hidden name="image" id="upload_picture">
  139. </form>
  140. </div>
  141. <!--请在下方写此页面业务相关的脚本-->
  142. <script type="text/javascript" src="/static/plugins/jquery.validation/1.14.0/jquery.validate.js"></script>
  143. <script type="text/javascript" src="/static/plugins/jquery.validation/1.14.0/messages_zh.js"></script>
  144. <script type="text/javascript" src="/static/plugins/jquery.validation/1.14.0/validate-methods.js"></script>
  145. <script type="text/javascript" src="/static/plugins/ckeditor/ckeditor5/ckeditor.js"></script>
  146. <script type="text/javascript">
  147. $(function () {
  148. ClassicEditor.create(document.querySelector('#editor'), {
  149. toolbar: {
  150. items: [
  151. 'sourceEditing', '|',
  152. 'bold', 'italic', 'strikethrough', 'underline', 'subscript', 'superscript', '|',
  153. 'heading', '|',
  154. 'fontfamily', 'fontsize', 'fontColor', 'fontBackgroundColor', 'highlight', '|',
  155. 'alignment', 'outdent', 'indent', '|',
  156. 'undo', 'redo',
  157. '-',
  158. 'link', 'imageUpload', 'imageInsert', 'mediaEmbed', 'insertTable', '|',
  159. 'code', 'codeBlock', 'blockQuote', '|',
  160. 'findAndReplace', 'horizontalLine', 'numberedList', 'bulletedList',
  161. ],
  162. shouldNotGroupWhenFull: true
  163. },
  164. licenseKey: '',
  165. //图片上传
  166. simpleUpload: {
  167. // The URL the images are uploaded to.
  168. uploadUrl: '/sys/file_manager/ckeditorUploadImage?infoid={$data.id}&cjid={$data.cjid}'
  169. },
  170. //自定义字体
  171. fontFamily: {
  172. options: [
  173. 'default',
  174. '微软雅黑,Microsoft YaHei',
  175. '新宋体,NSimSun',
  176. '楷体_GB2312,KaiTi_GB2312',
  177. '黑体,SimHei',
  178. '隶书,LiSu',
  179. '幼园,YouYuan',
  180. 'Blackoak Std',
  181. 'Arial',
  182. 'Georgia',
  183. 'Tahoma',
  184. 'Trebuchet MS',
  185. 'verdana',
  186. ]
  187. },
  188. }).then(editor => {
  189. window.editor = editor;
  190. }).catch(error => {
  191. console.error('Oops, something went wrong!');
  192. console.error('Please, report the following error on https://github.com/ckeditor/ckeditor5/issues with the build id and the error stack trace:');
  193. console.warn('Build id: z4e2d8lqju9w-6lwv92tbu4hm');
  194. console.error(error);
  195. });
  196. })
  197. // window.editor.editing.view.change(writer => {
  198. // writer.setStyle('height', '400px', editor.editing.view.document.getRoot());
  199. // });
  200. function validator(params) {
  201. return $("#form-save").validate({
  202. debug: true,
  203. rules: {
  204. title: {
  205. required: true,
  206. }
  207. , summary: {
  208. maxlength: 500,
  209. }
  210. , sort: {
  211. max: 99
  212. }
  213. , cid: {
  214. required: true
  215. }
  216. },
  217. messages: {
  218. title: {
  219. required: "标题不能为空"
  220. }
  221. , cid: {
  222. required: "栏目不能为空"
  223. }
  224. }
  225. });
  226. }
  227. $("#form-button-save").click(function () {
  228. if (!validator().form()) {
  229. return false
  230. }
  231. const content = window.editor.getData();
  232. $("<input/>").attr("type", "hidden").attr("name", "content").val(content).appendTo($("#form-save"));
  233. $("#form-save")[0].submit();
  234. })
  235. //添加标题图
  236. const file = document.querySelector('input[type="file"]');
  237. function uploadPicture() {
  238. // file模拟input点击事件
  239. var evt = new MouseEvent("click", {
  240. bubbles: false,
  241. cancelable: true,
  242. view: window,
  243. });
  244. file.dispatchEvent(evt, uploadfn());
  245. }
  246. function uploadfn() {
  247. file.oninput = function () {
  248. if (file.files && file.files[0]) {
  249. var formData = new FormData();
  250. formData.append("upload_file", file.files[0]);
  251. $.ajax({
  252. url: '{:url("/sys/file_manager/uploadImage")}',
  253. type: "post",
  254. data: formData,
  255. processData: false, // 告诉jQuery不要去处理发送的数据
  256. contentType: false, // 告诉jQuery不要去设置Content-Type请求头
  257. dataType: 'json',
  258. success: function (res) {
  259. // console.log(res);
  260. var img = res.data.filename;
  261. $("#view-titlepic").attr('src', img);
  262. $("#titlepic").val(img);
  263. layer.msg(res.msg, {
  264. icon: 1,
  265. time: 1000
  266. });
  267. },
  268. error: function (res) {
  269. layer.msg(res.msg, {
  270. icon: 5,
  271. time: 1000
  272. });
  273. return false;
  274. },
  275. complete: function () {
  276. document.getElementById('form-upload_picture').reset();
  277. }
  278. });
  279. }
  280. }
  281. }
  282. </script>