add_article.php 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348
  1. {extend name="public/container"}
  2. {block name='head_top'}
  3. <style>
  4. .layui-form-item .special-label{
  5. width: 50px;
  6. float: left;
  7. height: 30px;
  8. line-height: 38px;
  9. margin-left: 10px;
  10. margin-top: 5px;
  11. border-radius: 5px;
  12. background-color: #0092DC;
  13. text-align: center;
  14. }
  15. .layui-form-item .special-label i{
  16. display: inline-block;
  17. width: 18px;
  18. height: 18px;
  19. font-size: 18px;
  20. color: #fff;
  21. }
  22. .layui-form-item .label-box{
  23. border: 1px solid;
  24. border-radius: 10px;
  25. position: relative;
  26. padding: 10px;
  27. height: 30px;
  28. color: #fff;
  29. background-color: #393D49;
  30. text-align: center;
  31. cursor: pointer;
  32. display: inline-block;
  33. line-height: 10px;
  34. }
  35. .layui-form-item .label-box p{
  36. line-height: inherit;
  37. }
  38. .layui-form-mid{
  39. margin-left: 18px;
  40. }
  41. .m-t-5{
  42. margin-top:5px;
  43. }
  44. .cate{
  45. margin-top:10px;
  46. }
  47. .edui-default .edui-for-image .edui-icon{
  48. background-position: -380px 0px;
  49. }
  50. [v-cloak]{
  51. display: none;
  52. }
  53. </style>
  54. <script type="text/javascript" charset="utf-8" src="{__ADMIN_PATH}plug/ueditor/third-party/zeroclipboard/Zeroclipboard.js"></script>
  55. <script type="text/javascript" charset="utf-8" src="{__ADMIN_PATH}plug/ueditor/ueditor.config.js"></script>
  56. <script type="text/javascript" charset="utf-8" src="{__ADMIN_PATH}plug/ueditor/ueditor.all.min.js"></script>
  57. {/block}
  58. {block name="content"}
  59. <div class="layui-fluid" style="background: #fff">
  60. <div class="layui-row layui-col-space15" id="app" v-cloak="">
  61. <form action="" class="layui-form">
  62. <div class="layui-col-md12">
  63. <div class="layui-card" v-cloak="">
  64. <div class="layui-card-body" style="padding: 10px 150px;">
  65. <div class="layui-form-item">
  66. <label class="layui-form-label">新闻标题:</label>
  67. <div class="layui-input-block">
  68. <input type="text" name="title" v-model="formData.title" autocomplete="off" placeholder="请输入新闻名称" class="layui-input">
  69. </div>
  70. </div>
  71. <div class="layui-form-item">
  72. <label class="layui-form-label">新闻简介:</label>
  73. <div class="layui-input-block">
  74. <textarea placeholder="请输入新闻简介" v-model="formData.synopsis" class="layui-textarea"></textarea>
  75. </div>
  76. </div>
  77. <div class="layui-form-item cate">
  78. <label class="layui-form-label">文章分类:</label>
  79. <div class="layui-input-block">
  80. <select class="chosen-select" v-model="formData.cid" style="width:100%;" lay-filter="getSelect">
  81. <option value="0" >选择分类</option>
  82. <option v-for="(item,idx) in all" :value="idx" :key="idx">{{item}}</option>
  83. </select>
  84. </div>
  85. </div>
  86. <div class="layui-form-item m-t-5">
  87. <label class="layui-form-label">新闻排序:</label>
  88. <div class="layui-input-block">
  89. <input type="number" style="width: 20%" name="sort" v-model="formData.sort" autocomplete="off" class="layui-input">
  90. </div>
  91. </div>
  92. <div class="layui-form-item m-t-5" v-cloak="">
  93. <label class="layui-form-label">
  94. <div>新闻封面:</div>
  95. <div>(500*280px)</div>
  96. </label>
  97. <div class="layui-input-block">
  98. <div class="upload-image-box" v-if="formData.image_input" @mouseenter="enter()" @mouseleave="leave()">
  99. <img :src="formData.image_input" alt="">
  100. <div class="mask" v-show="mask" style="display: block">
  101. <p><i class="fa fa-eye" @click="look(formData.image_input)"></i><i class="fa fa-trash-o" @click="formData.image_input = ''"></i></p>
  102. </div>
  103. </div>
  104. <div class="upload-image" v-show="!formData.image_input" @click="upload('image_input')">
  105. <div class="fiexd"><i class="fa fa-plus"></i></div>
  106. <p>上传图片</p>
  107. </div>
  108. </div>
  109. </div>
  110. <div class="layui-form-item m-t-5">
  111. <label class="layui-form-label">插入视频:</label>
  112. <div class="layui-input-block">
  113. <input type="text" name="title" v-model="link" style="width:50%;display:inline-block;margin-right: 10px;" autocomplete="off" placeholder="请输入视频链接" class="layui-input">
  114. <button type="button" class="layui-btn layui-btn-sm layui-btn-normal" @click="uploadVideo()">确认添加</button>
  115. <button type="button" class="layui-btn layui-btn-sm layui-btn-normal" id="ossupload">上传视频</button>
  116. </div>
  117. <div class="layui-input-block" style="width: 50%;margin-top: 20px" v-show="is_video">
  118. <div class="layui-progress" style="margin-bottom: 10px">
  119. <div class="layui-progress-bar layui-bg-blue" :style="'width:'+videoWidth+'%'"></div>
  120. </div>
  121. <button type="button" class="layui-btn layui-btn-sm layui-btn-danger" @click="cancelUpload">取消</button>
  122. </div>
  123. <div class="layui-form-mid layui-word-aux">输入链接将视为添加视频直接添加,请确保视频链接的正确性</div>
  124. </div>
  125. <div class="layui-form-item m-t-5">
  126. <label class="layui-form-label">新闻内容:</label>
  127. <div class="layui-input-block">
  128. <textarea id="myEditor" style="width:100%;height: 500px">{{formData.content}}</textarea>
  129. </div>
  130. </div>
  131. <div class="layui-form-item submit" style="margin-bottom: 10px">
  132. <div class="layui-input-block">
  133. <button class="layui-btn layui-btn-normal" type="button" @click="save">{$id ? '确认修改':'立即提交'}</button>
  134. <button class="layui-btn layui-btn-primary clone" @click="clone_form">取消</button>
  135. </div>
  136. </div>
  137. </div>
  138. </div>
  139. </div>
  140. </form>
  141. </div>
  142. </div>
  143. <script type="text/javascript" src="{__ADMIN_PATH}js/layuiList.js"></script>
  144. {/block}
  145. {block name='script'}
  146. <script>
  147. var id={$id};
  148. var article=<?=isset($article) ? $article : "{}"?>;
  149. var all={$all};
  150. require(['vue','zh-cn','request','aliyun-oss','plupload','OssUpload'],function(Vue) {
  151. new Vue({
  152. el: "#app",
  153. data: {
  154. formData: {
  155. title:article.title || '',
  156. cid:article.cid || 0,
  157. synopsis:article.synopsis || '',
  158. sort:article.sort || 0,
  159. image_input:article.image_input || '',
  160. label:article.label || [],
  161. content:article.profile ? (article.profile.content || '') : '',
  162. },
  163. all:all,
  164. but_title:'上传视频',
  165. link:'',
  166. label:'',
  167. mask:false,
  168. ue:null,
  169. uploader:null,
  170. is_video:false,
  171. videoWidth:0,
  172. },
  173. methods:{
  174. uploadVideo:function(){
  175. if(this.link.substr(0,7).toLowerCase() == "http://" || this.link.substr(0,8).toLowerCase() == "https://"){
  176. this.setContent(this.link);
  177. }else{
  178. layList.msg('请输入正确的视频链接');
  179. }
  180. },
  181. setContent:function(link){
  182. this.ue.setContent('<div><video style="width: 100%" src="'+link+'" class="video-ue" controls="controls">\n' +
  183. 'your browser does not support the video tag\n' +
  184. '</video></div><br>',true);
  185. },
  186. save:function(){
  187. var that=this;
  188. that.formData.content = that.ue.getContent();
  189. if(!that.formData.title) return layList.msg('请输入新闻标题!');
  190. if(that.formData.cid<=0) return layList.msg('请选择分类!');
  191. if(!that.formData.synopsis) return layList.msg('请输入新闻简介!');
  192. if(!that.formData.image_input) return layList.msg('请上传新闻封面图');
  193. layList.loadFFF();
  194. layList.basePost(layList.U({a:'save_article',q:{id:id}}),that.formData,function (res) {
  195. layList.loadClear();
  196. if(parseInt(id)==0) {
  197. layList.layer.confirm('添加成功,您要继续添加图文吗?', {
  198. btn: ['继续添加', '立即提交'] //按钮
  199. }, function () {
  200. window.location.reload();
  201. }, function () {
  202. parent.layer.closeAll();
  203. window.location.href = layList.U({a: 'index', p: {type: 1}});
  204. });
  205. }else{
  206. layList.msg('修改成功',function () {
  207. parent.layer.closeAll();
  208. window.location.href = layList.U({a: 'index', p: {type: 1}});
  209. })
  210. }
  211. },function (res) {
  212. layList.loadClear();
  213. layList.msg(res.msg);
  214. });
  215. },
  216. clone_form:function(){
  217. if (parseInt(id) == 0) {
  218. var that = this;
  219. if(that.formData.image_input) return layList.msg('请先删除上传的图片在尝试取消');
  220. parent.layer.closeAll();
  221. }
  222. parent.layer.closeAll();
  223. },
  224. //取消
  225. cancelUpload:function(){
  226. this.uploader.stop();
  227. this.is_video = false;
  228. this.videoWidth = 0;
  229. },
  230. //上传图片
  231. upload:function(key,count){
  232. ossUpload.createFrame('请选择图片',{fodder:key,max_count:count === undefined ? 0 : count},{w:800,h:550});
  233. },
  234. //删除图片
  235. delect:function(act,key,index){
  236. var that=this;
  237. switch (act){
  238. case 1:
  239. Ks3.delObject({Key: key},function () {
  240. that.formData.image_input={};
  241. },function () {
  242. that.formData.image_input={};
  243. });
  244. break;
  245. }
  246. },
  247. delLabel:function (index) {
  248. this.formData.label.splice(index,1);
  249. this.$set(this.formData,'label',this.formData.label);
  250. },
  251. addLabrl:function () {
  252. if(this.label){
  253. if(this.label.length > 4) return layList.msg('您输入的标签字数太长');
  254. var length=this.formData.label.length;
  255. if(length >= 2) return layList.msg('标签最多添加2个');
  256. for(var i=0;i<length;i++){
  257. if(this.formData.label[i]==this.label) return layList.msg('请勿重复添加');
  258. }
  259. this.formData.label.push(this.label);
  260. this.$set(this.formData,'label',this.formData.label);
  261. this.label='';
  262. }
  263. },
  264. //查看图片
  265. look:function(pic){
  266. $eb.openImage(pic);
  267. },
  268. //鼠标移入事件
  269. enter:function(item){
  270. if(item){
  271. item.is_show=true;
  272. }else{
  273. this.mask=true;
  274. }
  275. },
  276. //鼠标移出事件
  277. leave:function(item){
  278. if(item){
  279. item.is_show=false;
  280. }else{
  281. this.mask=false;
  282. }
  283. },
  284. changeIMG:function(key,value,multiple){
  285. if(multiple){
  286. var that = this;
  287. value.map(function (v) {
  288. that.formData[key].push({pic:v,is_show:false});
  289. });
  290. this.$set(this.formData,key,this.formData[key]);
  291. }else{
  292. this.$set(this.formData,key,value);
  293. }
  294. }
  295. },
  296. mounted:function () {
  297. var that = this;
  298. this.$nextTick(function () {
  299. layList.form.render();
  300. layList.form.on('select(getSelect)',function (data) {
  301. that.formData.cid = data.value;
  302. });
  303. //实例化编辑器
  304. UE.registerUI('imagenone',function(editor,name){
  305. var $btn = new UE.ui.Button({
  306. name : 'image',
  307. onclick : function(){
  308. ossUpload.createFrame('选择图片',{fodder:'editor'},{w:800,h:550});
  309. },
  310. title: '选择图片'
  311. });
  312. return $btn;
  313. });
  314. this.ue = UE.getEditor('myEditor');
  315. that.uploader = ossUpload.upload({
  316. id:'ossupload',
  317. FilesAddedSuccess:function(){
  318. that.is_video = true;
  319. },
  320. uploadIng:function (file) {
  321. that.videoWidth = file.percent;
  322. },
  323. success:function (res) {
  324. layList.msg('上传成功');
  325. that.videoWidth = 0;
  326. that.is_video = false;
  327. that.setContent(res.url);
  328. },
  329. fail:function (err) {
  330. that.videoWidth = 0;
  331. that.is_video = false;
  332. layList.msg(err);
  333. }
  334. })
  335. }.bind(this));
  336. window.changeIMG = that.changeIMG;
  337. //选择图片插入到编辑器中
  338. window.insertEditor = function(list){
  339. that.ue.execCommand('insertimage', list);
  340. }
  341. },
  342. updated:function(){
  343. layList.form.render();
  344. }
  345. })
  346. })
  347. </script>
  348. {/block}