add.html 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428
  1. {extend name="public/layout" /} {block name="title"}文章添加{/block} {block name="head"} {include file="public/head"}
  2. <style>
  3. html {
  4. background: #fff;
  5. }
  6. @media screen and (max-width: 450px){
  7. .layui-form-item{
  8. position: relative;
  9. }
  10. .layui-form-item .layui-input-inline {
  11. padding-right: 40px !important;
  12. }
  13. .adding {
  14. position: absolute;
  15. right: 10px;
  16. top: 0;
  17. }
  18. }
  19. .xm-label-block{
  20. background-color: #249efb !important;
  21. }
  22. .layui-btn-primary {
  23. color: #249EFB;
  24. border: 1px solid #249EFB;
  25. }
  26. .layui-btn-primary:hover {
  27. background-color: #E3F7FF;
  28. color: #249EFB;
  29. }
  30. </style>
  31. {/block} {block name="body"}
  32. <body>
  33. <form class="layui-form" lay-filter="layuiadmin-app-form-list" id="layuiadmin-app-form-list" style="padding: 20px 30px 0 0;">
  34. <div class="layui-form-item">
  35. <label class="layui-form-label"><i style="color:red;">*</i>标题</label>
  36. <div class="layui-input-inline">
  37. <input type="text" name="title" lay-verify="required" placeholder="请输入标题" autocomplete="off" class="layui-input">
  38. </div>
  39. </div>
  40. <div class="layui-form-item">
  41. <label class="layui-form-label"><i style="color:red;">*</i>分类</label>
  42. <div class="layui-input-inline">
  43. <select name="type" lay-filter="type" id="type" lay-verify="required" lay-search>
  44. <option value="">请选择分类</option>
  45. {volist name="type" id="t"}
  46. <option value="{$t.id}">{$t.name}</option>
  47. {/volist}
  48. </select>
  49. </div>
  50. <i class="layui-icon layui-icon-add-circle adding" style="font-size: 32px" id="addType"></i>
  51. </div>
  52. <div class="layui-form-item">
  53. <label class="layui-form-label">标签</label>
  54. <div class="layui-input-inline" id="label" style="width: 40%;">
  55. <!-- <select name="label" id="label" lay-verify="required">
  56. <option value="">请选择标签</option>
  57. </select> -->
  58. </div>
  59. <i class="layui-icon layui-icon-add-circle adding" style="font-size: 32px" id="addLabel"></i>
  60. </div>
  61. <div class="layui-form-item">
  62. <label class="layui-form-label"><i style="color:red;">*</i>封面图</label>
  63. <div class="layui-input-inline" id="upload-drag">
  64. <div class="layui-upload-drag">
  65. <i class="layui-icon">&#xe681;</i>
  66. <p>上传封面图片</p>
  67. </div>
  68. </div>
  69. </div>
  70. <div class="layui-form-item">
  71. <label class="layui-form-label"></label>
  72. <div><i style="color:red;margin-right: 5px;">*</i>建议上传封面图片宽高比例5:3,图片大小不超过5M</div>
  73. </div>
  74. <div class="layui-form-item">
  75. <label class="layui-form-label">分享封面</label>
  76. <div class="layui-input-inline" id="upload-share-drag">
  77. <div class="layui-upload-drag">
  78. <i class="layui-icon">&#xe681;</i>
  79. <p>上传分享封面</p>
  80. </div>
  81. </div>
  82. </div>
  83. <div class="layui-form-item">
  84. <label class="layui-form-label"></label>
  85. <div><i style="color:red;margin-right: 5px;">*</i>建议上传封面图片宽高比例5:4,图片大小不超过5M</div>
  86. </div>
  87. <div class="layui-form-item">
  88. <label class="layui-form-label">详情</label>
  89. <div class="layui-input-block">
  90. <script id="content" name="anli_desc" type="text/plain" style="height: 180px;"></script>
  91. </div>
  92. </div>
  93. <div class="layui-form-item">
  94. <label class="layui-form-label">继续添加</label>
  95. <div class="layui-input-block">
  96. <input type="checkbox" name="adding" title="" lay-skin="primary" {if condition="$adding eq 1"}checked{/if}>
  97. </div>
  98. </div>
  99. <div class="layui-form-item ">
  100. <label class="layui-form-label"></label>
  101. <input type="button" class="layui-btn btn layui-btn-primary" lay-submit lay-filter="layuiadmin-app-form-submit" id="layuiadmin-app-form-submit" value="确认添加">
  102. </div>
  103. <!-- <div class="layui-form-item layui-hide">
  104. <input type="button" lay-submit lay-filter="layuiadmin-app-form-submit" id="layuiadmin-app-form-submit" value="确认添加">
  105. <input type="button" lay-submit lay-filter="layuiadmin-app-form-edit" id="layuiadmin-app-form-edit" value="确认编辑">
  106. </div> -->
  107. <input type="hidden" id="category_name">
  108. </form>
  109. </body>
  110. {/block}
  111. {block name="js"}
  112. <script src="__STATIC__/layui/layui/lay/modules/xm-select.js" type="text/javascript" charset="utf-8"></script>
  113. <!-- 配置文件 -->
  114. <script type="text/javascript" src="__STATIC__/ueditor/dist/utf8-php/ueditor.config.js"></script>
  115. <!-- 编辑器源码文件 -->
  116. <script type="text/javascript" src="__STATIC__/ueditor/dist/utf8-php/ueditor.all.js"></script>
  117. <!-- 实例化编辑器 -->
  118. <script type="text/javascript">
  119. var ue = UE.getEditor('content', {
  120. zIndex: 99
  121. });
  122. </script>
  123. <script type="text/javascript" src="__STATIC__/js/plupload/js/plupload.full.min.js"></script>
  124. <script type="text/javascript" src="__STATIC__/js/plupload/ossupload.js"></script>
  125. <script src="__STATIC__/layui/layui/layui.js"></script>
  126. <script src="__STATIC__/layui/ace/ace.js"></script>
  127. <script>
  128. layui.config({
  129. base: '__LAYUI__/',
  130. urlbase: '/sys'
  131. }).extend({
  132. index: 'lib/index' //主入口模块
  133. }).use(['index', 'form', 'element', 'upload', 'layedit'], function () {
  134. var form = layui.form,
  135. layedit = layui.layedit,
  136. element = layui.element,
  137. upload = layui.upload,
  138. admin = layui.admin,
  139. $ = layui.jquery;
  140. var objdata={};
  141. //下拉框关联
  142. // var typeData = JSON.parse('{$label|raw}');
  143. form.on('select(type)', function (data) {
  144. selectdata(0);
  145. cache();
  146. });
  147. //下拉多选
  148. var options = {
  149. el: '#label',
  150. name: 'label',//表单的name属性
  151. tips: '所属标签',
  152. autoRow: true,
  153. toolbar: {
  154. //工具条,全选,清空,反选,自定义
  155. show: true,
  156. list: [
  157. 'ALL',
  158. 'CLEAR',
  159. 'REVERSE'
  160. ]
  161. },
  162. data: [],
  163. on: function(data){
  164. objdata['labels'] = data.arr;
  165. cache();
  166. }
  167. };
  168. var label = xmSelect.render(options)
  169. if(localStorage.getItem('articledata')){
  170. var bodyjson = JSON.parse(localStorage.getItem('articledata'));
  171. if(bodyjson){
  172. $('input[name="title"]').val(bodyjson.title);
  173. if(bodyjson.type){
  174. set_select('type',bodyjson.type);
  175. }
  176. label.update({data: bodyjson.labels});
  177. objdata['labels'] = bodyjson.labels;
  178. objdata['cover_img']=bodyjson.cover_img;
  179. objdata['cover_share_img']=bodyjson.cover_share_img;
  180. if(bodyjson.cover_img){
  181. $('#upload-drag').html('<img src="' + bodyjson.cover_img + '" style="height: 100%;width:100%;">');
  182. }
  183. if(bodyjson.cover_share_img){
  184. $('#upload-share-drag').html('<img src="' + bodyjson.cover_share_img + '" style="height: 100%;width:100%;">');
  185. }
  186. ue.setContent(bodyjson.anli_desc);
  187. form.render();
  188. }
  189. }
  190. function set_select(id,value){
  191. let obj=$("#"+id);
  192. let names='';
  193. for(var i=0;i<obj.find('option').length;i++){
  194. if(obj.find('option').eq(i).val()==value){
  195. obj.find("option").eq(i).attr("selected",true);
  196. names=obj.find('option').eq(i).html();
  197. }
  198. }
  199. setTimeout(function(){
  200. obj.parent().find(".layui-select-title").find("input").val(names);
  201. },500)
  202. }
  203. $('input,textarea').off('input').on('input',function(obj){
  204. cache();
  205. })
  206. $('#ueditor_0').contents().find('body').bind("keyup paste copy cut", function(e) {
  207. cache();
  208. });
  209. function cache(){
  210. setTimeout(function(){
  211. var formarray=$("form").serializeArray();
  212. for(var i in formarray){
  213. objdata[formarray[i]['name']]=formarray[i]['value']
  214. }
  215. objdata['anli_desc']=ue.getContent();
  216. var datas=JSON.stringify(objdata);
  217. localStorage.setItem('articledata',datas);
  218. },500)
  219. }
  220. upload.render({
  221. elem: '#upload-drag',
  222. url:'{:url("fileupload")}',
  223. accept: 'images',
  224. exts: 'jpg|png|bmp|jpeg|JPG|PNG|BMP|JPEG',
  225. auto: true,
  226. field: 'file',
  227. size: 5 * 1024,
  228. choose: function(obj) {
  229. obj.preview(function(index, file, result) {
  230. $('#upload-drag').html('<img src="' + result + '" style="height: 100%;width:100%;">');
  231. });
  232. },
  233. done:function(res){
  234. objdata['cover_img']=res.data.src;
  235. cache();
  236. }
  237. });
  238. upload.render({
  239. elem: '#upload-share-drag',
  240. url:'{:url("fileupload")}',
  241. accept: 'images',
  242. exts: 'jpg|png|bmp|jpeg|JPG|PNG|BMP|JPEG',
  243. auto: true,
  244. field: 'file',
  245. size: 5 * 1024,
  246. choose: function(obj) {
  247. obj.preview(function(index, file, result) {
  248. $('#upload-share-drag').html('<img src="' + result + '" style="height: 100%;width:100%;">');
  249. });
  250. },
  251. done:function(res){
  252. objdata['cover_share_img']=res.data.src;
  253. cache();
  254. }
  255. });
  256. form.on('submit(layuiadmin-app-form-submit)', function(data) {
  257. data.field.cover_img = objdata['cover_img'];
  258. data.field.cover_share_img = objdata['cover_share_img'];
  259. if (data.field.cover_img=="" || data.field.cover_img==null || data.field.cover_img==undefined) {
  260. layer.msg('请选择封面图', {anim: 0,time: 1000,icon: 5});
  261. return false;
  262. }
  263. var index = parent.layer.getFrameIndex(window.name);
  264. var formData = new FormData(data.form);
  265. ue.ready(function() {
  266. formData.append('content', ue.getContent());
  267. });
  268. var sd = layer.load(1, {
  269. shade: [0.8, '#000']
  270. });
  271. formData.append('cover_img', objdata['cover_img']);
  272. formData.append('cover_share_img', objdata['cover_share_img']);
  273. // 单击之后提交按钮不可选,防止重复提交
  274. var DISABLED = 'layui-btn-disabled';
  275. var target = '#layuiadmin-app-form-submit';
  276. $(target).addClass(DISABLED);
  277. $(target).attr('disabled', 'disabled');
  278. admin.req({
  279. url: '{:url("article/save")}',
  280. data: formData,
  281. type: 'post',
  282. processData: false,
  283. contentType: false,
  284. done: function(res) {
  285. if(res.code == 0) {
  286. objdata={};
  287. localStorage.setItem('articledata','');
  288. layer.msg('添加成功', {
  289. icon: 1,
  290. time: 1000
  291. },function(){
  292. var adding = $("input[name='adding']").is(":checked");
  293. if (adding) {
  294. location.href = "{:url('article/add')}?adding=1";
  295. } else {
  296. var index = parent.layer.getFrameIndex(window.name);
  297. parent.layer.close(index);
  298. parent.layui.table.reload('layui-table-article');
  299. }
  300. });
  301. }else{
  302. $(target).removeClass(DISABLED);
  303. $(target).removeAttr('disabled');
  304. layer.msg(res.msg, {anim: 0,time: 1000,icon: 5});
  305. }
  306. layer.close(sd);
  307. }
  308. });
  309. });
  310. //添加分类
  311. $('#addType').click(function(){
  312. layer.prompt({
  313. title: ['添加分类', 'color:#333333;background-color:#D8E6F1;'],
  314. }, function(value, index, elem) {
  315. var value = $.trim(value);
  316. if(value == '') {
  317. layer.msg('请输入分类名称', {anim: 0,time: 1000,icon: 5});
  318. return false;
  319. }
  320. if(value.length > 6) {
  321. layer.msg('分类名称超长', {anim: 0,time: 1000,icon: 5});
  322. return false;
  323. }
  324. $.post('{:url("article/addtype")}', {
  325. value: value
  326. }, function(res) {
  327. if(res.code == 0) {
  328. $('#type').append("<option selected value='"+res.data.id+"'>"+res.data.value+"</option>")
  329. form.render();
  330. layer.msg(res.msg, {
  331. anim: 0,time: 1000,icon: 6,
  332. }, function() {
  333. layer.close(index); //再执行关闭
  334. });
  335. } else {
  336. layer.msg(res.msg, {
  337. anim: 6
  338. , time:2000
  339. });
  340. }
  341. });
  342. });
  343. });
  344. //添加分类下的标签
  345. $('#addLabel').click(function(){
  346. var checktTypeId = $('#type').val();
  347. if(checktTypeId == ''){
  348. layer.msg('请先选择归属分类', {anim: 0,time: 1000,icon: 5});
  349. return false;
  350. }
  351. layer.prompt({
  352. title: ['添加标签', 'color:#333333;background-color:#D8E6F1;'],
  353. }, function(value, index, elem) {
  354. var value = $.trim(value);
  355. if(value == '') {
  356. layer.msg('请输入标签名称', {anim: 0,time: 1000,icon: 5});
  357. return false;
  358. }
  359. if(value.length > 6) {
  360. layer.msg('标签名称超长', {anim: 0,time: 1000,icon: 5});
  361. return false;
  362. }
  363. $.post('{:url("article/addtype")}', {
  364. value: value , id: checktTypeId
  365. }, function(res) {
  366. if(res.code == 0) {
  367. selectdata(res.data.id);
  368. form.render();
  369. layer.msg(res.msg, {
  370. anim: 0,time: 1000,icon: 6,
  371. }, function() {
  372. layer.close(index); //再执行关闭
  373. });
  374. } else {
  375. layer.msg(res.msg, {anim: 0,time: 1000,icon: 5});
  376. }
  377. });
  378. });
  379. });
  380. function selectdata(lid){
  381. var type = $('#type').val();
  382. setTimeout(function(){
  383. //data是ajax异步获取的
  384. $.ajax({
  385. type:"get",
  386. url:"{:url('article/label_list')}",
  387. data:{id:type,lid:lid},
  388. dataType: 'json',
  389. success:function(data) {
  390. var data = data;
  391. //通过ajax 获取json数据,异步更新多选下拉框的值
  392. label.update({data: data})
  393. objdata['labels']= data;
  394. cache();
  395. }
  396. });
  397. },100);
  398. }
  399. });
  400. </script>
  401. {/block}