add_article.html 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613
  1. {extend name="public/layout" /} {block name="title"}公司实力添加{/block} {block name="body"}
  2. <!--<link rel="stylesheet" href="__LAYUI__/common.css" media="all">-->
  3. <style type="text/css">
  4. html,
  5. body {
  6. display: block;
  7. width: 100%;
  8. background-color: #fff;
  9. }
  10. .layui-fluid {
  11. display: block;
  12. border-radius: 5px;
  13. background-color: #ffffff;
  14. box-sizing: border-box;
  15. padding: 15px 30px;
  16. }
  17. .layui-icon{font-size:18px !important;line-height: 38px;}
  18. .layui-tab {
  19. padding: 15px;
  20. height: 100%;
  21. }
  22. .layui-table-view .layui-table th,
  23. .layui-table-view .layui-table td {
  24. text-align: center;
  25. border-color: #B6CADE;
  26. }
  27. .layui-table thead tr,
  28. .layui-table-header {
  29. background-color: #D8E6F1;
  30. }
  31. .input-indent-box {
  32. display: inline;
  33. width: 80%;
  34. }
  35. .input-indent-box-small {
  36. display: inline;
  37. width: 20%;
  38. }
  39. .adding {
  40. cursor: pointer;
  41. }
  42. .upload-img .area i {
  43. font-size: 50px;
  44. color: #009688;
  45. }
  46. .evi-block {
  47. float: left;
  48. margin-right: 10px;
  49. }
  50. /*///*/
  51. .imageDiv {
  52. display: inline-block;
  53. width: 140px;
  54. height: 125px;
  55. -webkit-box-sizing: border-box;
  56. -moz-box-sizing: border-box;
  57. box-sizing: border-box;
  58. border: 1px dashed darkgray;
  59. background: #f8f8f8;
  60. position: relative;
  61. overflow: hidden;
  62. }
  63. .addImages {
  64. display: inline-block;
  65. width: 140px;
  66. height: 125px;
  67. -webkit-box-sizing: border-box;
  68. -moz-box-sizing: border-box;
  69. box-sizing: border-box;
  70. border: 1px dashed darkgray;
  71. background: #f8f8f8;
  72. position: relative;
  73. overflow: hidden;
  74. }
  75. .text-detail {
  76. margin-top: 40px;
  77. text-align: center;
  78. }
  79. .text-detail>span {
  80. font-size: 40px;
  81. }
  82. .imageDiv div {
  83. width: 100%;
  84. height: 100%;
  85. position: absolute;
  86. top: 0px;
  87. background-color: #e6e6e600;
  88. }
  89. .imageDiv div i {
  90. font-size: 31px;
  91. position: absolute;
  92. top: 37%;
  93. left: 40%;
  94. }
  95. .imageDiv div:hover {
  96. background-color: #e6e6e680;
  97. }
  98. .imageDiv div:hover i {
  99. display: block;
  100. cursor: pointer;
  101. }
  102. .rotate180 {
  103. -webkit-transform: rotate(180deg);
  104. transform: rotate(180deg);
  105. }
  106. .layui-edge.rotate180 {
  107. margin-top: -9px;
  108. }
  109. .layui-input-inline.input-longer-inline {
  110. width: 350px;
  111. }
  112. .goback {
  113. float: right;
  114. }
  115. .goback a {
  116. color: #269efb;
  117. }
  118. .goback i {
  119. position: relative !important;
  120. }
  121. @media screen and (max-width: 450px){
  122. .layui-form-item{
  123. position: relative;
  124. }
  125. .layui-form-item .layui-input-inline {
  126. padding-right: 40px !important;
  127. }
  128. .adding {
  129. position: absolute;
  130. right: 10px;
  131. top: 0;
  132. }
  133. }
  134. input:disabled, input[disabled]{
  135. color: black;
  136. opacity: 1;
  137. -webkit-text-fill-color:black;
  138. -webkit-opacity:1;
  139. }
  140. .layui-btn-primary {
  141. color: #249EFB;
  142. border: 1px solid #249EFB;
  143. }
  144. .layui-btn-primary:hover {
  145. background-color: #E3F7FF;
  146. color: #249EFB;
  147. }
  148. .layui-card-body {
  149. padding: 10px 0;
  150. }
  151. .layui-border-btn,.layui-border-btn:hover {
  152. background-color: #fff;
  153. color: #249EFB;
  154. border: 1px solid #249EFB;
  155. }
  156. #symbshowed video{max-height: 400px;margin-top: 15px;}
  157. .isimgupload{width:190px;height: 152px;}
  158. .layui-upload-drag{width:100%;height: 90px;}
  159. </style>
  160. <body>
  161. <div class="layui-fluid">
  162. <div class="layui-card">
  163. <div class="layui-card-body">
  164. <form class="layui-form" enctype="multipart/form-data" lay-filter="evidence-form">
  165. <div class="layui-form-item">
  166. <label class="layui-form-label"><i style="color:red;">*</i>标题</label>
  167. <div class="layui-input-inline">
  168. <input class="layui-input inputBox" name="title" placeholder="请输入标题" type="text" value="">
  169. </div>
  170. </div>
  171. <div class="layui-form-item">
  172. <label class="layui-form-label"><span style="color: red;"></span></label>
  173. <div class="layui-input-inline input-longer-inline">
  174. <input type="radio" name="type" value="1" title="视频" lay-filter="type" checked/>
  175. <input type="radio" name="type" value="2" title="图片" lay-filter="type"/>
  176. <input type="radio" name="type" value="3" title="VR" lay-filter="type"/>
  177. <input type="radio" name="type" value="4" title="VR作品" lay-filter="type"/>
  178. </div>
  179. </div>
  180. <div class="layui-form-item video">
  181. <div class="layui-form-item">
  182. <label class="layui-form-label">视频封面图</label>
  183. <div class="layui-input-inline isimgupload" style="position: relative;">
  184. <div class="" id="upload-drag">
  185. <div class="layui-upload-drag">
  186. <i class="layui-icon">&#xe681;</i>
  187. <p>上传图片</p>
  188. </div>
  189. </div>
  190. </div>
  191. </div>
  192. <div class="layui-form-item">
  193. <label class="layui-form-label"></label>
  194. <div><i style="color:red;margin-right:5px;">*</i>视频封面比例建议按照全屏比例750X1334,或者宽高比例5:3,图片大小不超过1M</div>
  195. </div>
  196. <label class="layui-form-label"><span style="color: red;">*</span>视频</label>
  197. <div class="layui-input-inline" style="width: 290px;display: block;" id="container">
  198. <a class="layui-btn btn layui-border-btn" id="selectfiles" href="javascript:void(0);">选择视频</a>
  199. <a class="layui-btn btn layui-border-btn" id="postfiles" href="javascript:void(0);">开始上传</a>
  200. <div id="ossfile"></div>
  201. <div id="symbshowed"></div>
  202. <div class="layui-form-mid layui-word-aux" style="color: red!important;margin-left:10px;">注:选择视频并上传,限制280M内</div>
  203. <!--报错信息返回展示-->
  204. <pre id="console"></pre>
  205. <input type="hidden" value="" id="fileuri">
  206. <!--上传到OSS哪个文件下,在这里定义 -->
  207. <input type="hidden" value="dailyWechatArticle" id="wechat_label_name">
  208. <input id="category_name" type="hidden" value="company_strength" />
  209. </div>
  210. </div>
  211. <div class="layui-form-item img layui-hide">
  212. <label class="layui-form-label labels">配图片</label>
  213. <div class="imgs" style="width:80%;margin-left: 5px;">
  214. <div class="picDiv" id="draggable" style="margin: 20px 0px;">
  215. <div class="addImages" id="img">
  216. <div class="text-detail">
  217. <span>+</span>
  218. <p>选择单、多图</p>
  219. </div>
  220. </div>
  221. </div>
  222. </div>
  223. </div>
  224. <div class="layui-form-item img layui-hide">
  225. <label class="layui-form-label"></label>
  226. <div><i style="color:red;margin-right: 5px;">*</i>建议上传图片宽高比例5:3,图片大小不超过1M</div>
  227. </div>
  228. <div class="layui-form-item vr layui-hide">
  229. <label class="layui-form-label"><i style="color:red;">*</i>VR地址</label>
  230. <div class="layui-input-inline">
  231. <input class="layui-input inputBox" name="vrurl" placeholder="请输入vr地址" type="text" value="">
  232. </div>
  233. </div>
  234. <div class="layui-form-item vrAuthEle layui-hide">
  235. <label class="layui-form-label"><i style="color:red;">*</i>VR作品</label>
  236. <div class="layui-input-inline" style="width: 400px;display: block;">
  237. <a class="layui-btn btn layui-border-btn" style="margin-top: 5px;" id="selectVRCreate" href="javascript:void(0);">选择VR作品</a>
  238. <span id="vrWorks"></span>
  239. </div>
  240. </div>
  241. <div class="layui-form-item">
  242. <label class="layui-form-label">描述</label>
  243. <div class="layui-input-block" id="contentbody">
  244. <div id="textarea_id">
  245. <textarea id="anli_content" name="desc" placeholder="图片相关描述" autocomplete="off" class="layui-textarea"></textarea>
  246. </div>
  247. <div id="script_id" style="display: none;">
  248. <textarea id='anli_content2' name='desc2' style="height: 350px;"></textarea>
  249. </div>
  250. </div>
  251. </div>
  252. <div class="layui-form-item submit-btn">
  253. <input class="layui-btn layui-btn-primary" style="margin-left:12%;" type="button" lay-submit lay-filter="layuiadmin-evidence-submit" id="layuiadmin-evidence-submit" value="确认提交">
  254. </div>
  255. </form>
  256. </div>
  257. </div>
  258. </div>
  259. </body>
  260. {/block} {block name="js"}
  261. <!-- 配置文件 -->
  262. <script type="text/javascript" src="__STATIC__/ueditor/dist/utf8-php/ueditor.config.js"></script>
  263. <!-- 编辑器源码文件 -->
  264. <script type="text/javascript" src="__STATIC__/ueditor/dist/utf8-php/ueditor.all.js"></script>
  265. <!-- 实例化编辑器 -->
  266. <script type="text/javascript">
  267. var ue = UE.getEditor('anli_content2');
  268. </script>
  269. <script type="text/javascript" src="__STATIC__/js/plupload/js/plupload.full.min.js"></script>
  270. <script type="text/javascript" src="__STATIC__/js/plupload/ossupload.js"></script>
  271. <script type="text/javascript" src="__STATIC__/js/Sortable.js"></script>
  272. <script src="https://gosspublic.alicdn.com/aliyun-oss-sdk-6.3.1.min.js" async></script>
  273. <script>
  274. layui.config({
  275. base: '__LAYUI__/' //静态资源所在路径
  276. ,
  277. urlbase: '/sys'
  278. }).extend({
  279. index: 'lib/index' //主入口模块
  280. }).use(['index', 'form', 'table', 'layedit', 'element', 'upload'], function() {
  281. var $ = layui.$,
  282. element = layui.element,
  283. upload = layui.upload,
  284. layedit = layui.layedit,
  285. form = layui.form;
  286. var files = [];
  287. var objdata={};
  288. var indexs=0;
  289. var html01 = '';
  290. var html02 = '';
  291. var textarea,length,vrlinkVal;
  292. $('#postfiles').click(function(){
  293. var timess=setInterval(function(){
  294. if($('#ossfile').find('.progress-bar').attr('aria-valuenow')==100){
  295. setTimeout(function(){
  296. objdata['video_url']=$('#fileuri').val();
  297. cache();
  298. },1000)
  299. clearInterval(timess);
  300. }
  301. },100)
  302. })
  303. function set_select(id,value){
  304. let obj=$("#"+id);
  305. let names='';
  306. for(var i=0;i<obj.find('option').length;i++){
  307. if(obj.find('option').eq(i).val()==value){
  308. obj.find("option").eq(i).attr("selected",true);
  309. names=obj.find('option').eq(i).html();
  310. }
  311. }
  312. setTimeout(function(){
  313. obj.parent().find(".layui-select-title").find("input").val(names);
  314. },500)
  315. }
  316. $('input,textarea').off('input').on('input',function(obj){
  317. cache();
  318. })
  319. function cache(){
  320. setTimeout(function(){
  321. var formarray=$("form").serializeArray();
  322. for(var i in formarray){
  323. objdata[formarray[i]['name']]=formarray[i]['value']
  324. }
  325. if(indexs==2){
  326. objdata['desc2']=ue.getContent('anli_content2');
  327. }
  328. objdata['video_url']=$('#fileuri').val();
  329. var datas=JSON.stringify(objdata);
  330. localStorage.setItem('gssldata',datas);
  331. },500)
  332. }
  333. //vr作品
  334. $('#selectVRCreate').click(function(){
  335. layer.open({
  336. type: 2,
  337. title: ['选择VR作品', 'color:#333333;background-color:#D8E6F1;'],
  338. content: '{:url("building/group")}?id=' + vrlinkVal||"",
  339. area: ['80%', '80%'],
  340. btn: ['确定', '取消'],
  341. yes: function (index, layero) {
  342. let data = layero.find('iframe').contents().find("#hiddentext").val();
  343. if (data) {
  344. let vrObject = JSON.parse(data);
  345. vrlinkVal = vrObject.id;
  346. $("#vrWorks").text(vrObject.name);
  347. }
  348. layer.close(index);
  349. //点击确认触发 iframe 内容中的按钮提交
  350. }
  351. });
  352. })
  353. //视频封面图
  354. upload.render({
  355. elem: '#upload-drag',
  356. accept: 'image',
  357. url:'{:url("imgUpload")}',
  358. exts: 'png|jpg|jpeg',
  359. auto: true,
  360. field: 'file',
  361. size: 3 * 1024,
  362. choose: function(obj) {
  363. obj.preview(function(index, file, result) {
  364. $('#upload-drag').html('<img class="fmimages" src="' + result + '" style="height: 100%;width:100%;">');
  365. });
  366. },
  367. done:function(res){
  368. objdata['cover']=res.data.src;
  369. cache();
  370. }
  371. });
  372. $('.isimgupload').hover(function(){
  373. if($("#upload-drag:has(img.fmimages)").length>0){
  374. $('.imageDiv').show();
  375. }
  376. },function(){
  377. $('.imageDiv').hide();
  378. })
  379. //图片类型配图
  380. upload.render({
  381. elem: '#img',
  382. accept: 'images',
  383. url: '/upload/',
  384. exts: 'jpg|png|bmp|jpeg|JPG|PNG|BMP|JPEG',
  385. field: '',
  386. size: 5 * 1024,
  387. auto: false,
  388. multiple: true,
  389. choose: function(obj) {
  390. files = obj.pushFile();
  391. length = $('.imageDiv').length;
  392. obj.preview(function(index, file, result) {
  393. length++;
  394. if(length > 9) {
  395. if(length == 10) layer.msg('限制九张图片以下');
  396. delete files[index];
  397. } else {
  398. ossuploadimg(file).then(f => {
  399. files[index]['imglink'] = f;
  400. $('.picDiv').prepend('<div class="imageDiv" data-id="' + index + '"><img src="' + result + '" alt="' + file.name + '" class="layui-upload-img" width="100%" height="100%"><div><i class="layui-icon layui-icon-delete" prop="del"></i> <i class="layui-icon layui-icon-search" prop="view" data-image="'+result+'" style="margin-left:25px;"></i></div></div>');
  401. })
  402. }
  403. });
  404. }
  405. });
  406. $('.picDiv').on('click', 'i', function(e) {
  407. var that = this;
  408. if (e.target.attributes[1].nodeValue === 'view') {
  409. layer.photos({ photos: {"data": [{"src": e.target.attributes[2].nodeValue}]} ,closeBtn:true});
  410. } else {
  411. layer.confirm('确定删除该图片么?',{title:['信息', 'color:#333333;background-color:#D8E6F1;'],}, function(index) {
  412. var imgDiv = $(that).closest('.imageDiv');
  413. if(id = imgDiv.data('id')) {
  414. delete files[id];
  415. }
  416. imgDiv.remove();
  417. layer.close(index);
  418. });
  419. }
  420. });
  421. function ossuploadimg(file) {
  422. return new Promise((resolve,reject) => {
  423. var client = new OSS({
  424. region: "oss-cn-hangzhou",
  425. accessKeyId: "LTAI5tHjWupJSCAycy2yVbQZ",
  426. accessKeySecret: "eNFicm77Cfq3u7ZnQyw1urFmFNpf3w",
  427. bucket: "zyzswzh",
  428. secure: true
  429. });
  430. var date = new Date().getTime();
  431. var objectName = 'broker/' + date + "/" + Date.now() + ".jpeg";
  432. client.put(objectName, file).then(function (result) {
  433. resolve(result.name);
  434. }).catch(function (error) {
  435. reject(error)
  436. });
  437. })
  438. }
  439. //客户见证添加
  440. form.on('submit(layuiadmin-evidence-submit)', function(data) {
  441. var formData = new FormData(data.form);
  442. //监听分类,去除图片或视频
  443. var radio = $('input:radio:checked').val();
  444. formData.delete('file');
  445. if(radio == 1) {
  446. var video_url = $('#fileuri').val();
  447. formData.append('video_url',video_url);
  448. if (video_url=='') {
  449. layer.msg('请选择视频', {anim: 6,time: 1000,icon: 5});
  450. return false;
  451. }
  452. if (objdata['cover'] == "" || objdata['cover'] == null || objdata['cover'] == undefined) {
  453. objdata['cover'] = "";
  454. objdata['covers']= "";
  455. }
  456. formData.append('cover', objdata['cover']);
  457. }else if(radio == 2){
  458. ue.ready(function () {
  459. formData.append('desc', ue.getContent());
  460. });
  461. if (files && !Object.keys(files).length) {
  462. layer.msg('请选择图片', { anim: 0, time: 1000, icon: 5 });
  463. return false;
  464. }
  465. let imgArr = []
  466. Object.keys(files).forEach(key => {
  467. imgArr.push(files[key].imglink)
  468. })
  469. formData.append('covers', imgArr.join(","));
  470. }else if(radio == 3){
  471. ue.ready(function () {
  472. formData.append('desc', ue.getContent());
  473. });
  474. if (objdata['vr'] == "") {
  475. layer.msg('请填写vr链接地址', { anim: 0, time: 1000, icon: 5 });
  476. return false;
  477. }
  478. } else {
  479. if (!vrlinkVal) {
  480. layer.msg('请选择VR作品', { anim: 0, time: 1000, icon: 5 });
  481. return false;
  482. }
  483. formData.append('vr_group_ids', vrlinkVal)
  484. }
  485. // 单击之后提交按钮不可选,防止重复提交
  486. var DISABLED = 'layui-btn-disabled';
  487. var target = '#layuiadmin-evidence-submit';
  488. $(target).addClass(DISABLED);
  489. $(target).attr('disabled', 'disabled');
  490. $.ajax({
  491. url: '{:url("agents/add_article")}',
  492. type: 'post',
  493. data: formData,
  494. dataType: 'json',
  495. processData: false,
  496. contentType: false,
  497. success: function(res) {
  498. if(res.code === 0) {
  499. objdata={};
  500. layer.msg(res.msg, {
  501. anim: 0,time: 1000,icon: 6,
  502. }, function() {
  503. var index = parent.layer.getFrameIndex(window.name);
  504. parent.layer.close(index);
  505. parent.layui.table.reload('evidence-table');
  506. });
  507. } else {
  508. layer.msg(res.msg, {anim: 0,time: 1000,icon: 5});
  509. $(target).removeClass(DISABLED);
  510. $(target).removeAttr('disabled');
  511. }
  512. },
  513. error : function(e){
  514. $(target).removeClass(DISABLED);
  515. $(target).removeAttr('disabled');
  516. }
  517. });
  518. return false;
  519. });
  520. form.on('radio(type)', function(data) {
  521. if(data.value == 1) {
  522. indexs = 1;
  523. $('#contentbody #textarea_id textarea').html(html01);
  524. $('#contentbody #textarea_id').css('display','block');
  525. $('#contentbody #script_id').css('display','none');
  526. $('.layui-layedit').remove();
  527. $('.layui-textarea').removeClass('layui-hide');
  528. $('.video').removeClass('layui-hide');
  529. $('.img').addClass('layui-hide');
  530. $('.vr').addClass('layui-hide');
  531. $(".vrAuthEle").addClass('layui-hide');
  532. $('#anli_content').change(function(obj){
  533. cache();
  534. })
  535. form.render();
  536. } else if(data.value == 2) {
  537. indexs = 2;
  538. //加载ueditor编辑器
  539. $('#contentbody #textarea_id').css('display','none');
  540. $('#contentbody #script_id').css('display','block');
  541. setTimeout(function(){
  542. $('#ueditor_0').contents().find('body').bind("keyup paste copy cut", function(e) {
  543. cache();
  544. });
  545. },1000)
  546. $('.img').removeClass('layui-hide');
  547. $('.video').addClass('layui-hide');
  548. $('.vr').addClass('layui-hide');
  549. $(".vrAuthEle").addClass('layui-hide');
  550. ue.setContent(html02);
  551. form.render();
  552. } else if(data.value == 3) {
  553. $('#contentbody #textarea_id').css('display','block');
  554. $('#contentbody #script_id').css('display','none');
  555. $(".vrAuthEle").addClass('layui-hide');
  556. $('.video').addClass('layui-hide');
  557. $('.img').addClass('layui-hide');
  558. $('.vr').removeClass('layui-hide');
  559. } else {
  560. $('.img').addClass('layui-hide');
  561. $('.video').addClass('layui-hide');
  562. $('.vr').addClass('layui-hide');
  563. $(".vrAuthEle").removeClass('layui-hide');
  564. }
  565. cache();
  566. });
  567. });
  568. </script>
  569. {/block}