1
0

update_step.html 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479
  1. {extend name="public/layout"/} {block name="title"}在施工地{/block} {block name="body"}
  2. <style>
  3. html{background:#fff;height: 100%;}
  4. .mdt30{margin-top:30px;}
  5. .mdt20{margin-top:20px;}
  6. .ids{display:inline-block;}
  7. .mdlr10{margin:0 10px;}
  8. .layui-input-block input,.layui-upload-drag,.sjsselect,.layui-input:hover, .layui-textarea:hover,.layui-textarea{border:1px solid #333 !important;}
  9. .layui-form-label,.input::placeholder,input::-webkit-input-placeholder{color:#333;}
  10. .sjsselect{width:100%;height:38px;}
  11. .layui-form-box{width:94%;margin:0 auto;display: block;}
  12. .layuiSubmit{margin-left:110px;padding:0 30px !important;display: block;}
  13. .layui-upload-drag{height: 32px;padding: 30px 18px;line-height: 32px;}
  14. .layui-input:focus,.layui-textarea:focus{border:1px solid #333 !important;}
  15. .imglistbtn .addImages,.imglistbtn .imageDiv{width:100px;height: 100px;border:1px dashed #ccc;position:relative;}
  16. .imglistbtn .imageDiv{float:left;margin:0 10px 10px 0;overflow: hidden;}
  17. .imglistbtn .addImages{margin-right: 0;}
  18. .imglistbtn .text-detail p{text-align: center;line-height: 100px;width:100%;}
  19. .imgDivico{position: absolute;top:0;left:0;right:0;bottom:0;margin: auto;height: 17px;width:100%;text-align: center;}
  20. body{padding-bottom: 40px;}
  21. .vrdelbtn {height: 38px;float: left;line-height: 38px;position: relative;margin-left:10px;cursor: pointer;font-size: 32px;width:25px}
  22. .lanse {color: #28A1FF;}
  23. .width50_{width:50%}
  24. .width100_{width:100%;}
  25. .height{height:100%;}
  26. .mdb20{margin-bottom: 20px;;}
  27. .wpsa{position: absolute;}
  28. .wpsauto{top:0;left:0;bottom:0;right:0;margin:auto;}
  29. .ds{display: block;}
  30. .wleft{float:left;}
  31. .woverflow{overflow: hidden;}
  32. .isshow{display: none;}
  33. #upload-drag{width:100%;}
  34. .isimgupload{width:190px !important;height: 114px;margin-right:0 !important;}
  35. .imageDivs{position: absolute;top:0;left:0;width:100%;height: 100%;background: rgba(230,230,230,.5);display: none;}
  36. .imageDivs i{display: block;width:18px;height: 18px;position: absolute;top:0;left:0;bottom:0;right: 0;margin:auto;}
  37. </style>
  38. <!-- -->
  39. <form class="layui-form layui-form-box">
  40. <input type="hidden" name="construction_id" value="{$construction_id}">
  41. <input type="hidden" name="id" value="{$id}">
  42. <input id="category_name" type="hidden" value="Construction"/>
  43. <div class="layui-form-item col-md5 mdt20">
  44. <label class="layui-form-label">施工阶段:</label>
  45. <div class="layui-input-block" style="max-width: 30%;">
  46. <select name="step_id" lay-verify="step_id" lay-filter="step_id" id="step_id" class="sjsselect">
  47. <option value=0>请选择一个施工阶段</option>
  48. {volist name='step' id='vo'}
  49. <option value="{$vo.id}">{$vo.name}</option>
  50. {/volist}
  51. </select>
  52. </div>
  53. </div>
  54. <div class="layui-form-item woverflow mdt20">
  55. <label class="layui-form-label"><i style="color:red;">*</i> 上传类型:</label>
  56. <div class="layui-input-block lh45 mdl20" style="max-width: 370px !important;">
  57. <input type="radio" id="1" class="radio_input" lay-filter="types" name="type" value="img" title="图片" checked>
  58. <input type="radio" id="2" class="radio_input" lay-filter="types" name="type" value="vr" title="VR链接">
  59. <input type="radio" id="3" class="radio_input" lay-filter="types" name="type" value="video" title="视频">
  60. <input type="radio" id="4" class="radio_input" lay-filter="types" name="type" value="groupVr" title="VR作品">
  61. </div>
  62. </div>
  63. <div class="">
  64. <div class="layui-form-item col-md5 mdt20 isshow" style="display: block;">
  65. <label for="title" class="layui-form-label">上传:</label>
  66. <div class="imgs">
  67. <div class="layui-input-block imglistbtn picDiv" id="imgs">
  68. {volist name='data.img' id='vo'}
  69. <div class="imageDiv">
  70. <img style="width:100%;height:100%" class="layui-upload-img" src="{$vo}" alt="">
  71. <div class="imgDivico"><i class="layui-icon layui-icon-delete" prop="del"></i> <i class="layui-icon layui-icon-search" prop="view" data-image="{$vo}" style="margin-left:25px;"></i></div>
  72. <input type="hidden" name="image_exist[]" value="{$vo}" />
  73. </div>
  74. {/volist}
  75. <div class="layui-input-inline addImages" id="img">
  76. <div class="text-detail" style="width:100%;">
  77. <p>上传图片/多图</p>
  78. </div>
  79. </div>
  80. </div>
  81. </div>
  82. </div>
  83. <div class="layui-form-item col-md5 mdt20 isshow">
  84. <div class="">
  85. <label class="layui-form-label"><i style="color:red;">*</i> VR链接:</label>
  86. <div class="wleft width50_ vrurllist">
  87. </div>
  88. </div>
  89. </div>
  90. <div class="layui-form-item col-md5 mdt20 isshow">
  91. <div class="layui-form-item woverflow">
  92. <label class="layui-form-label">视频封面图:</label>
  93. <div class="layui-input-inline isimgupload" style="position: relative;">
  94. <div class="" id="upload-drag">
  95. {if condition='$data.video_cover'}
  96. <img class="fmimages" src="{$data.video_cover}" alt="" style="height: 100%;width:100%;">
  97. {else/}
  98. <div class="layui-upload-drag" style="position: relative;border: 1px dashed #e2e2e2 !important;background-color: #fff;text-align: center;cursor: pointer;color: #999;height: auto;line-height:1;padding: 21px 66px !important;max-width: 190px;max-height: 114px;">
  99. <i class="layui-icon" style="font-size: 56px;">&#xe681;</i>
  100. <p>上传图片</p>
  101. </div>
  102. {/if}
  103. </div>
  104. <div class="imageDivs"><i class="layui-icon layui-icon-delete" prop="del"></i></div>
  105. </div>
  106. <div class="layui-form-item woverflow">
  107. <label class="layui-form-label"></label>
  108. <div style="margin-top:10px;"><i style="color:red;margin-right: 5px;">*</i><span>注:不支持拖拽文件 宽:高=5:3</span></div>
  109. </div>
  110. </div>
  111. <label class="layui-form-label"><span style="color: red;">*</span>视频</label>
  112. <div class="layui-input-inline" style="width: 290px;display: block;" id="container">
  113. <a class="layui-btn btn layui-border-btn" id="selectfiles" href="javascript:void(0);">选择视频</a>
  114. <a class="layui-btn btn layui-border-btn" id="postfiles" href="javascript:void(0);">开始上传</a>
  115. <div id="ossfile"></div>
  116. <div id="symbshowed">
  117. {if condition="$data.video"}
  118. <video width="320" height="240" src="{$data.video}" controls="" style="background-color: #000;margin-top:15px;" name="media"><source src="{$data.video}" type="video/mp4"></video>
  119. {/if}
  120. </div>
  121. <div class="layui-form-mid layui-word-aux" style="color: red!important;margin-left:10px;">注:选择视频并上传,限制100M内</div>
  122. <!--报错信息返回展示-->
  123. <pre id="console"></pre>
  124. <input type="hidden" value="{$data.video}" id="fileuri">
  125. <!--上传到OSS哪个文件下,在这里定义 -->
  126. <input type="hidden" value="dailyWechatArticle" id="wechat_label_name">
  127. </div>
  128. </div>
  129. <div class="layui-form-item col-md5 mdt20 isshow">
  130. <label class="layui-form-label">VR作品</label>
  131. <div class="layui-input-inline" style="width: 400px;display: block;">
  132. <a class="layui-btn btn layui-border-btn" style="margin-top: 5px;" id="selectVRCreate" href="javascript:void(0);">选择VR作品</a>
  133. <span id="vrWorks"></span>
  134. </div>
  135. </div>
  136. </div>
  137. <div class="layui-form-item layui-form-text col-md5 mdt20">
  138. <label class="layui-form-label">阶段描述:</label>
  139. <div class="layui-input-block">
  140. <textarea name="content" placeholder="请输入内容" class="layui-textarea" style="max-width:90%;min-height: 160px;">{$data.content}</textarea>
  141. </div>
  142. </div>
  143. <input type="hidden" value="{$data.video_cover}" name="video_cover">
  144. <input type="hidden" value="" name='vr' id="vrlists">
  145. <button type="button" class="layui-btn mdt20 layui-btn-normal layuiSubmit" lay-submit lay-filter="layuiadmin-zsgd-submit" id="layuiadmin-zsgd-submit">保存</button>
  146. </form>
  147. <!-- -->
  148. {/block} {block name="js"}
  149. <script type="text/javascript" src="__STATIC__/js/plupload/js/plupload.full.min.js"></script>
  150. <script type="text/javascript" src="__STATIC__/js/plupload/ossupload.js"></script>
  151. <script type="text/javascript" src="__STATIC__/js/Sortable.js"></script>
  152. <script>
  153. layui.config({
  154. base: '__LAYUI__/',
  155. urlbase: '/sys'
  156. }).extend({
  157. index: 'lib/index' //主入口模块
  158. }).use(['index', 'form','laydate','upload','element'], function() {
  159. var $ = layui.$,
  160. form = layui.form,
  161. element = layui.element,
  162. upload = layui.upload,
  163. files = [],
  164. loadingIndex = null;
  165. var set_List = [{
  166. name: ''
  167. }];
  168. var vrlists=[];
  169. {notempty name="data.vr"}
  170. set_List=[];
  171. {volist name='data.vr' id='v'}
  172. set_List.push({name:'{$v}'});
  173. vrlists.push('{$v}');
  174. {/volist}
  175. {/notempty}
  176. var vrlinkVal='';
  177. if('{$data.vr_group_ids}'){
  178. vrlinkVal = '{$data.vr_group_ids}';
  179. $("#vrWorks").text('{$data.group_name}');
  180. }
  181. $('#vrlists').val(vrlists.join(','));
  182. if('{$data.type}'){
  183. for(var i=0;i<$('input[type="radio"]').length;i++){
  184. console.log($('input[type="radio"]').eq(i).val()=='{$data.type}')
  185. if($('input[type="radio"]').eq(i).val()=='{$data.type}'){
  186. $('.isshow').eq(i).show().siblings().hide();
  187. $('input[type="radio"]').eq(i).prop('checked',true);
  188. }else{
  189. $('input[type="radio"]').eq(i).prop('checked',false);
  190. }
  191. }
  192. form.render();
  193. }
  194. var imgslist = [];
  195. for(var i=0;i<$('#step_id').find("option").length;i++){
  196. if(parseInt($('#step_id').find("option").eq(i).val()) == parseInt("{$steps_id}")){
  197. $('#step_id').find('option').eq(i).prop('selected',true)
  198. }
  199. }
  200. form.render("select");
  201. //多图片上传
  202. upload.render({
  203. elem: '#img',
  204. accept: 'images',
  205. exts: 'jpg|png|bmp|jpeg|JPG|PNG|BMP|JPEG',
  206. field: 'image',
  207. size: 2 * 1024,
  208. auto: false,
  209. multiple: true,
  210. choose: function(obj) {
  211. files = obj.pushFile();
  212. length = $('.imageDiv').length;
  213. obj.preview(function(index, file, result) {
  214. length++;
  215. if(length > 9) {
  216. if(length == 10) layer.msg('限制九张图片以下');
  217. delete files[index];
  218. } else {
  219. $('.picDiv').prepend('<div class="imageDiv" data-id="' + index +
  220. '"><img src="' + result + '" alt="' + file.name +
  221. '" class="layui-upload-img" width="100%" height="100%"><div><i class="layui-icon layui-icon-delete" prop="delete"></i><i class="layui-icon layui-icon-search" prop="view" data-image="'+result+'" style="margin-left:30px;font-size: 25px;margin-top: 5px;"></i></div></div>'
  222. );
  223. }
  224. });
  225. }
  226. });
  227. $('.picDiv').on('click', 'i', function(e) {
  228. var that = this;
  229. if (e.target.attributes[1].nodeValue === 'del') {
  230. layer.confirm('确定删除该图片么?',{title: ['信息', 'color:#333333;background-color:#D8E6F1;'],}, function(index) {
  231. var imgDiv = $(that).closest('.imageDiv');
  232. if(id = imgDiv.data('id')) {
  233. delete files[id];
  234. }
  235. imgDiv.remove();
  236. layer.close(index);
  237. });
  238. } else {
  239. layer.photos({ photos: {"data": [{"src": e.target.attributes[2].nodeValue}]} ,closeBtn:true});
  240. }
  241. });
  242. form.on('select(step_id)', function (e) {
  243. var construction_id = {$construction_id};
  244. var step_id = e.value
  245. var url = "{:url('construction/update_step')}?construction_id="+construction_id+"&steps_id="+step_id
  246. window.location.href = url
  247. })
  248. ////////
  249. //vr作品
  250. $('#selectVRCreate').click(function(){
  251. layer.open({
  252. type: 2,
  253. title: ['选择VR作品', 'color:#333333;background-color:#D8E6F1;'],
  254. content: '{:url("building/group")}?id='+(vrlinkVal?vrlinkVal:''),
  255. area: ['80%', '80%'],
  256. btn: ['确定', '取消'],
  257. yes: function (index, layero) {
  258. let data = layero.find('iframe').contents().find("#hiddentext").val();
  259. if (data) {
  260. let vrObject = JSON.parse(data);
  261. vrlinkVal = vrObject.id;
  262. $("#vrWorks").text(vrObject.name);
  263. }
  264. layer.close(index);
  265. //点击确认触发 iframe 内容中的按钮提交
  266. }
  267. });
  268. })
  269. form.on('radio(types)', function (data) {
  270. var this_=$(this).attr('id')-1;
  271. $('.isshow').eq(this_).show().siblings().hide();
  272. });
  273. set_step_Html(set_List);
  274. function set_step_Html(set_List) {
  275. $('.vrurllist')[0].innerHTML = $.map(set_List, (v, i) => {
  276. return `<div class="woverflow width100_ mdb20">
  277. <div class="layui-input-block width100_" style="max-width:50% !important;float:left;margin-left:0;">
  278. <input type="text" data-type="name" data-index="${i}" placeholder="请输入标题" autocomplete="off" class="layui-input width100_" value="${v.name}">
  279. </div>
  280. <p class="vrdelbtn add_step" data-index="${set_List.length + 1}">
  281. <span class="wpsa wpsauto lanse ds" data-index="${set_List.length+1}">+</span>
  282. </p>
  283. <p class="vrdelbtn delete" style="font-size:50px;line-height: 30px;" data-index="${i}">
  284. <span class="wpsa wpsauto lanse ds" data-index="${i}">-</span>
  285. </p>
  286. </div>`
  287. }).join('');
  288. setTimeout(() => {
  289. $('.add_step').click((e) => {
  290. let index = parseInt(e.target.dataset.index);
  291. if (set_List.length < 9) {
  292. set_List.push({
  293. id: 0,
  294. name: ''
  295. });
  296. set_step_Html(set_List)
  297. } else {
  298. layer.msg('最多设置9个VR链接');
  299. }
  300. })
  301. $('.delete').click((e) => {
  302. console.log(e)
  303. if (set_List.length <= 1) {
  304. layer.msg('只剩最后一个了');
  305. } else {
  306. let index = parseInt(e.target.dataset.index);
  307. console.log(index)
  308. set_List.splice(index, 1);
  309. set_step_Html(set_List)
  310. }
  311. })
  312. $('input').change((e) => {
  313. let type = e.target.dataset.type;
  314. let val = e.target.value;
  315. if (type && type != undefined) {
  316. let index = parseInt(e.target.dataset.index);
  317. set_List[index][type] = val;
  318. }
  319. })
  320. }, 500)
  321. }
  322. //视频封面图
  323. upload.render({
  324. elem: '#upload-drag',
  325. accept: 'image',
  326. exts: 'png|jpg|jpeg',
  327. auto: false,
  328. field: 'video_cover',
  329. size: 3 * 1024,
  330. choose: function(obj) {
  331. obj.preview(function(index, file, result) {
  332. $('#upload-drag').html('<img class="fmimages" src="' + result + '" style="height: 100%;width:100%;">');
  333. });
  334. }
  335. });
  336. $('.isimgupload').hover(function(){
  337. if($("#upload-drag:has(img.fmimages)").length>0){
  338. $('.imageDivs').show();
  339. }
  340. },function(){
  341. $('.imageDivs').hide();
  342. })
  343. $('.imageDivs').on('click', function(e) {
  344. var that = this;
  345. layer.confirm('确定删除该图片么?',{title: ['信息', 'color:#333333;background-color:#D8E6F1;'],}, function(index) {
  346. var imgDiv = $('#upload-drag').find('img');
  347. imgDiv.remove();
  348. $('#upload-drag').html('<div class="layui-upload-drag" style="position: relative;border: 1px dashed #e2e2e2 !important;background-color: #fff;text-align: center;cursor: pointer;color: #999;height: auto;line-height:1;padding: 21px 66px !important;max-width: 190px;max-height: 114px;"><i class="layui-icon" style="font-size:56px">&#xe681;</i><p>上传图片</p></div>');
  349. layer.close(index);
  350. });
  351. });
  352. //添加保存
  353. form.on('submit(layuiadmin-zsgd-submit)', function(data) {
  354. var formData = new FormData(data.form);
  355. if(data.field['step_id']==0){
  356. layer.msg('请选择一个施工阶段', {anim: 0,time: 1000,icon: 5});
  357. return false;
  358. }
  359. /*if (typeof(files) == "undefined" || JSON.stringify(files)=="{}" || files.length==0) {
  360. layer.msg('请至少选择一张图片', {anim: 6,time: 1000,icon: 5});
  361. return false;
  362. }*/
  363. if($("#upload-drag:has(img.fmimages)").length<1){
  364. formData.delete('video_cover');
  365. }
  366. let el = document.querySelector('#imgs').children;
  367. for (let i = 0; i < el.length; i++) {
  368. if (el[i].className === 'imageDiv' && el[i].dataset.id) {
  369. formData.append('img[]', files[el[i].dataset.id]);
  370. }
  371. }
  372. if (data.field.type == 'img') {
  373. // if (!Object.keys(files).length) {
  374. // layer.msg('请添加图片')
  375. // return;
  376. // }
  377. formData.delete('img');
  378. formData.append('vr','')
  379. formData.append('vr_group_ids','')
  380. } else if(data.field.type == 'vr'){
  381. let list = set_List.filter(v => v.name);
  382. if (!list.length) {
  383. layer.msg('请添加VR链接')
  384. return;
  385. }
  386. let vrStr = set_List.map(v => v.name).join(',')
  387. formData.append('img','');
  388. formData.append('vr_group_ids','')
  389. formData.append('vr',vrStr)
  390. }else if(data.field.type=='groupVr'){
  391. if (!vrlinkVal) {
  392. layer.msg('请添加VR链接')
  393. return;
  394. }
  395. formData.append('img','');
  396. formData.append('vr','');
  397. formData.append('vr_group_ids',vrlinkVal)
  398. } else{
  399. var video_url = $('#fileuri').val();
  400. formData.append('video',video_url);
  401. formData.append('vr','')
  402. formData.append('vr_group_ids','')
  403. if (video_url=='') {
  404. layer.msg('请选择视频', {anim: 6,time: 1000,icon: 5});
  405. return false;
  406. }
  407. }
  408. loadingIndex = layer.load('Loading...', {
  409. shade: [0.6,'#000'] //0.1透明度的白色背景
  410. });
  411. //单击之后提交按钮不可选,防止重复提交
  412. var DISABLED = 'layui-btn-disabled';
  413. var target = '#layuiadmin-zsgd-submit';
  414. $(target).addClass(DISABLED);
  415. $(target).attr('disabled', 'disabled');
  416. $.ajax({
  417. url: '{:url("construction/update_step")}',
  418. type: 'post',
  419. data: formData,
  420. dataType: 'json',
  421. processData: false,
  422. contentType: false,
  423. success: function(res) {
  424. $(target).removeClass(DISABLED);
  425. $(target).removeAttr('disabled');
  426. if(res.code === 0) {
  427. layer.close(loadingIndex);
  428. layer.msg(res.msg,{
  429. anim: 0,time: 1000,icon: 6,
  430. }, function() {
  431. var adding = $("input[name='adding']").is(":checked");
  432. if (adding) {
  433. location.href = "{:url('construction/index')}";
  434. } else {
  435. var index = parent.layer.getFrameIndex(window.name);
  436. parent.layui.table.reload('company-activity'); //重载表格
  437. parent.layer.close(index);
  438. }
  439. });
  440. } else {
  441. layer.close(loadingIndex);
  442. layer.msg(res.msg, {anim: 0,time: 1000,icon: 5});
  443. }
  444. },
  445. error : function(e){
  446. $(target).removeClass(DISABLED);
  447. $(target).removeAttr('disabled');
  448. }
  449. });
  450. return false;
  451. });
  452. })
  453. </script>
  454. {/block}