add.php 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365
  1. <?php use common\widgets\UeditorWidget; ?>
  2. <script src="/js/mobiscroll/mobiscroll.core-2.5.2.js" type="text/javascript"></script>
  3. <script src="/js/mobiscroll/mobiscroll.core-2.5.2-zh.js" type="text/javascript"></script>
  4. <link href="/css/mobiscroll/mobiscroll.core-2.5.2.css" rel="stylesheet" type="text/css" />
  5. <link href="/css/mobiscroll/mobiscroll.animation-2.5.2.css" rel="stylesheet" type="text/css" />
  6. <script src="/js/mobiscroll/mobiscroll.datetime-2.5.1.js" type="text/javascript"></script>
  7. <script src="/js/mobiscroll/mobiscroll.datetime-2.5.1-zh.js" type="text/javascript"></script>
  8. <!-- S 可根据自己喜好引入样式风格文件 -->
  9. <script src="/js/mobiscroll/mobiscroll.android-ics-2.5.2.js" type="text/javascript"></script>
  10. <link href="/css/mobiscroll/mobiscroll.android-ics-2.5.2.css" rel="stylesheet" type="text/css" />
  11. <!-- E 可根据自己喜好引入样式风格文件 -->
  12. <div class="page-title">
  13. <div class="title-env">
  14. <h1 class="title">添加文章</h1>
  15. </div>
  16. <div class="breadcrumb-env">
  17. <ol class="breadcrumb bc-1">
  18. <li>
  19. <a href="/"><i class="fa-home"></i>Home</a>
  20. </li>
  21. <li>
  22. <a href="javascript:void(0)">商城管理</a>
  23. </li>
  24. <li class="active">
  25. <strong>文章管理</strong>
  26. </li>
  27. </ol>
  28. </div>
  29. </div>
  30. <div class="row">
  31. <div class="col-sm-12">
  32. <div class="panel panel-default">
  33. <div class="panel-body">
  34. <form role="form" class="form-horizontal">
  35. <div class="form-group">
  36. <label class="col-sm-2 control-label">*标题:</label>
  37. <div class="col-sm-10">
  38. <input type="text" class="form-control" name="title" placeholder="">
  39. <p></p>
  40. </div>
  41. </div>
  42. <div class="form-group">
  43. <label class="col-sm-2 control-label">阅读量:</label>
  44. <div class="col-sm-10">
  45. <input type="tel" class="form-control" name="viewNum" placeholder="选填,默认为0,实际阅读量会在此基础上累加">
  46. <p></p>
  47. </div>
  48. </div>
  49. <div class="form-group">
  50. <label class="col-sm-2 control-label" for="field-1">创建时间:</label>
  51. <div class="col-sm-10">
  52. <input type="text" id="appDateTime" class="form-control" name="createTime" placeholder="请选择,没有选择默认为当前时间">
  53. <p></p>
  54. </div>
  55. </div>
  56. <div class="form-group-separator"></div>
  57. <div class="form-group">
  58. <label class="col-sm-2 control-label">图片:</label>
  59. <div>
  60. <div style="margin-left:16px;width:113px;height:174px;float:left;display:inline-block">
  61. 封面[ 手机竖拍 ]:
  62. <div style="width:97px;height:110px;display:inline-block;margin-bottom:3px;">
  63. <img src="/images/nopicture.png" name="cover" style="width:97px;height:110px;" class="img-thumbnail" />
  64. </div>
  65. <a href="javascript:;" class="a-upload">
  66. <input type="file" id="cover" accept="image/*" value="" />选择图片
  67. </a>
  68. <input type="hidden" name="cover" value="" />
  69. </div>
  70. <div style="clear:both;margin-left:228px;"><p></p></div>
  71. </div>
  72. </div>
  73. <div class="form-group-separator"></div>
  74. <div class="form-group">
  75. <label class="col-sm-2 control-label" for="field-3">*摘要:</label>
  76. <div class="col-sm-10">
  77. <textarea name="summary" class="form-control"></textarea>
  78. <p></p>
  79. </div>
  80. </div>
  81. <div class="form-group-separator"></div>
  82. <div class="form-group">
  83. <label class="col-sm-2 control-label" for="field-3">*内容:</label>
  84. <div class="col-sm-10">
  85. <?= UeditorWidget::widget(['name' => 'content','content' => '']); ?>
  86. <p></p>
  87. </div>
  88. </div>
  89. <div class="form-group-separator"></div>
  90. <div class="form-group">
  91. <label class="col-sm-2 control-label">*所属分类</label>
  92. <div class="col-sm-10">
  93. <div style="border:1px solid #CCC;padding-left:8px;border-radius:4px;">
  94. <?php
  95. if(!empty($categoryList)){
  96. foreach($categoryList as $clKey => $clVal){
  97. if(!empty($clVal['child'])){
  98. echo '<label class="checkbox-inline" style="padding-left:0px;">'.$clVal['categoryName'].'</label><p>';
  99. foreach($clVal['child'] as $ccKey => $ccVal)
  100. {
  101. echo '&nbsp;&nbsp;&nbsp;|-- <label class="checkbox-inline"><input name="categoryId" value="'.$ccVal['id'].'" type="checkbox">'.$ccVal['categoryName'].'</label>';
  102. }
  103. echo '</p>';
  104. }else{
  105. echo '<label class="checkbox-inline"><input name="categoryId" value="'.$clVal['id'].'" type="checkbox">'.$clVal['categoryName'].'</label><p></p>';
  106. }
  107. }
  108. }
  109. ?>
  110. </div>
  111. <p name="categoryIdMention"></p>
  112. </div>
  113. </div>
  114. <div class="form-group">
  115. <label class="col-sm-2 control-label" for="field-4">*文章状态</label>
  116. <div class="col-sm-10">
  117. <div class="radio-inline">
  118. <label>
  119. <input type="radio" name="status" checked value="0">
  120. 上线
  121. </label>
  122. </div>
  123. <div class="radio-inline">
  124. <label>
  125. <input type="radio" name="status" value="1">
  126. 下线
  127. </label>
  128. </div>
  129. </div>
  130. </div>
  131. <div class="form-group-separator"></div>
  132. <div class="form-group" style="text-align:center;">
  133. <button type="button" onclick="addSubmit('click',this)" class="btn btn-info btn-single">确认</button>
  134. <button type="button" onclick="history.go(-1);" class="btn btn-info btn-single">返回</button>
  135. </div>
  136. </form>
  137. </div>
  138. </div>
  139. </div>
  140. </div>
  141. <!-- footer -->
  142. <?php
  143. use backend\widgets\FooterWidget;
  144. ?>
  145. <?= FooterWidget::widget()?>
  146. <!-- footer -->
  147. <script src="/js/lrz/dist/lrz.bundle.js"></script>
  148. <script>
  149. //添加文章验证流程
  150. var title = $("input[name=title]");
  151. var viewNum = $("input[name=viewNum]");
  152. var createTime = $("input[name=createTime]");
  153. var cover = $(":input[name=cover]");
  154. var summary = $("textarea[name=summary]");
  155. var content = $("textarea[name=content]");
  156. var needValidate = [title,summary];
  157. //添加文章验证流程
  158. addSubmit();
  159. function addSubmit()
  160. {
  161. setStats(title, '请填写文章标题', function(val, mess){
  162. var info=[false, mess];
  163. if(isNotNull(val) == false){
  164. info[1] = '请填写文章标题';
  165. }else if(getLength(val) >=0 && getLength(val) <=40){
  166. info[0] = true;
  167. info[1] = '填写正确';
  168. }else{
  169. info[0] = false;
  170. }
  171. return info;
  172. });
  173. setStats(summary, '请填写摘要', function(val, mess){
  174. var info=[false, mess];
  175. if(getLength(val) > 0){
  176. info[0] = true;
  177. info[1] = '填写正确';
  178. }else{
  179. info[1] = '请填写摘要';
  180. }
  181. return info;
  182. });
  183. setStats(content, '请填写简介!', function(val, mess){
  184. var info=[false, mess];
  185. if(getLength(val) > 0){
  186. info[0] = true;
  187. info[1] = '填写正确';
  188. }else{
  189. info[1] = '请填写简介!';
  190. }
  191. return info;
  192. });
  193. if(arguments[0] == 'click'){//用户点击提交
  194. var submitButton = arguments[1];//获取提交按钮对象
  195. var submitButtonObj = $(submitButton);
  196. if(submitButtonObj.attr('submitStatus') == 'yes'){
  197. xhPopMsg('提交中……,请稍等',1000);
  198. return;//表单已经提交成功,不允许重复提交
  199. }
  200. var verifyStatus = true;
  201. for(var m=0;m<needValidate.length;m++){
  202. var singleObj = needValidate[m];
  203. if(singleObj.attr('addStatus') == undefined){
  204. singleObj.blur();
  205. }
  206. if(singleObj.attr('addStatus') == 'no'){
  207. verifyStatus = false;
  208. continue;
  209. }
  210. }
  211. //简介的判断
  212. // if(isNotNull(content.val()) == false){
  213. // content.siblings('p').addClass('help-error-mention').html('请填写简介哈');
  214. // verifyStatus = false;
  215. // }else{
  216. // content.siblings('p').removeClass('help-error-mention').html('');
  217. // }
  218. //确认有没选择分类
  219. var checkNum = $(":input[name=categoryId]:checked").length;
  220. if(parseInt(checkNum) < 1){
  221. $("p[name=categoryIdMention]").addClass('help-error-mention').html('请选择分类');
  222. verifyStatus = false;
  223. }else{
  224. $("p[name=categoryIdMention]").removeClass('help-error-mention').html('');
  225. }
  226. if(verifyStatus){
  227. var statusValue = $('input:radio[name=status]:checked').val();//文章状态
  228. var categoryVal = '';
  229. $(":input[name=categoryId]:checked").each(function(){
  230. categoryVal += $(this).val()+',';
  231. });
  232. var data = "title="+title.val()+"&viewNum="+viewNum.val();
  233. data += "&cover="+cover.val()+"&createTime="+createTime.val();
  234. data += "&content="+content.val()+"&summary="+summary.val();
  235. data += "&_csrf=<?= Yii::$app->request->csrfToken ?>&status="+statusValue+"&categoryId="+categoryVal;
  236. $.ajax({type:"POST",url:'/article/save-add',data:data,dataType:'json',async:false,success:function(data){
  237. if(data.code == 'A0001'){
  238. submitButtonObj.attr('submitStatus','yes');
  239. xhPopMsg(data.msg,1300);//调用定时浮层 XXX毫秒后消失
  240. setTimeout(function(){
  241. window.location.href='/article/list';
  242. },1400);
  243. }
  244. }
  245. });
  246. }
  247. }
  248. }
  249. function setStats(obj,mess,check)
  250. {
  251. obj.focus(function(){
  252. $(this).removeAttr('addStatus');
  253. $(this).siblings('p').removeClass('help-error-mention').html('');
  254. $(this).parent().parent().removeClass("has-success").removeClass('has-error');
  255. });
  256. obj.blur(function(){
  257. var objVal = obj.val();
  258. var info = check(objVal,mess);
  259. if(info[0]){
  260. $(this).attr('addStatus','yes');
  261. $(this).siblings('p').removeClass('help-error-mention').html('');
  262. $(this).parent().parent().addClass("has-success").removeClass("has-error");
  263. }else{
  264. $(this).attr('addStatus','no');
  265. $(this).siblings('p').addClass('help-error-mention').html(info[1]);
  266. $(this).parent().parent().addClass("has-error").removeClass("has-success");
  267. }
  268. });
  269. }
  270. document.querySelector('#cover').addEventListener('change', function () {
  271. //参数说明 https://github.com/think2011/localResizeIMG/wiki/2.-%E5%8F%82%E6%95%B0%E6%96%87%E6%A1%A3
  272. lrz(this.files[0],{
  273. width: 500,// 图片最大不超过的宽度,默认为原图宽度,高度不设时会适应宽度。
  274. fieldName:'Filedata',//文件名
  275. quality:1,//图片质量 0.1 - 1
  276. })
  277. .then(function (rst) {
  278. // 处理成功会执行
  279. rst.formData.append('fileLen', rst.fileLen);
  280. rst.formData.append('_csrf', '<?= Yii::$app->request->csrfToken?>');
  281. $.ajax({
  282. //url: '/main/img', // 这个地址做了跨域处理,可以用于实际调试
  283. url: '/upload/upload-file', // 这个地址做了跨域处理,可以用于实际调试
  284. data: rst.formData,
  285. processData: false,
  286. contentType: false,
  287. type: 'POST',
  288. dataType:'json',
  289. success: function (data) {
  290. $("img[name=cover]").attr('src','<?= Yii::$app->params['imgUrl']; ?>'+data.url);
  291. $("input[name='cover']").val(data.url);
  292. }
  293. });
  294. })
  295. .catch(function (err) {
  296. // 处理失败会执行
  297. })
  298. .always(function () {
  299. // 不管是成功失败,都会执行
  300. });
  301. });
  302. //选择创建时间
  303. $(function () {
  304. var currYear = (new Date()).getFullYear();
  305. var opt ={};
  306. opt.date = {preset : 'date'};
  307. opt.datetime = {preset : 'datetime'};
  308. opt.time = {preset : 'time'};
  309. opt.default = {
  310. theme: 'android-ics light', //皮肤样式
  311. display: 'modal', //显示方式
  312. mode: 'scroller', //日期选择模式
  313. lang:'zh',
  314. dateFormat: 'yy-mm-dd',
  315. showNow: true,
  316. nowText: "今天",
  317. startYear:currYear - 10, //开始年份
  318. endYear:currYear + 10 //结束年份
  319. };
  320. var optDateTime = $.extend(opt['datetime'], opt['default']);
  321. $("#appDateTime").mobiscroll(optDateTime).datetime(optDateTime);
  322. });
  323. </script>