wxshowdetail.html 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407
  1. {extend name="public/layout" /} {block name="title"}每日发圈修改{/block} {block name="body"}
  2. <script src="/static/js/jquery.min.js"></script>
  3. <style type="text/css">
  4. html,
  5. body {
  6. display: block;
  7. width: 100%;
  8. background-color: #fff;
  9. }
  10. video {
  11. width: 144px;
  12. height: 253px;
  13. margin: 30px 0px;
  14. }
  15. .imageDiv {
  16. display: inline-block;
  17. width: 140px;
  18. height: 125px;
  19. -webkit-box-sizing: border-box;
  20. -moz-box-sizing: border-box;
  21. box-sizing: border-box;
  22. border: 1px dashed darkgray;
  23. background: #f8f8f8;
  24. position: relative;
  25. overflow: hidden;
  26. margin-right: 10px;
  27. }
  28. .addImages {
  29. display: inline-block;
  30. width: 140px;
  31. height: 125px;
  32. -webkit-box-sizing: border-box;
  33. -moz-box-sizing: border-box;
  34. box-sizing: border-box;
  35. border: 1px dashed darkgray;
  36. background: #f8f8f8;
  37. position: relative;
  38. overflow: hidden;
  39. }
  40. .text-detail {
  41. margin-top: 40px;
  42. text-align: center;
  43. }
  44. .text-detail>span {
  45. font-size: 40px;
  46. }
  47. .layui-input-inline.input-longer-inline {
  48. width: 290px;
  49. }
  50. html {
  51. background: #fff;
  52. }
  53. .imageDiv div {
  54. width: 100%;
  55. height: 100%;
  56. position: absolute;
  57. top: 0px;
  58. background-color: #e6e6e600;
  59. }
  60. .imageDiv div i {
  61. display: none;
  62. font-size: 31px;
  63. position: absolute;
  64. top: 37%;
  65. left: 35%;
  66. }
  67. .imageDiv div:hover {
  68. background-color: #e6e6e680;
  69. }
  70. .imageDiv div:hover i {
  71. display: block;
  72. cursor: pointer;
  73. }
  74. .popwrapper{
  75. width: 100%;
  76. box-sizing: border-box;
  77. }
  78. .ml20b {
  79. margin-left: 11%;
  80. margin-top: 20px;
  81. }
  82. .layui-btn-primary {
  83. color: #249EFB;
  84. border: 1px solid #249EFB;
  85. }
  86. .layui-btn-primary:hover {
  87. background-color: #E3F7FF;
  88. color: #249EFB;
  89. }
  90. #layui-layer-photos {
  91. height: 300px !important;
  92. }
  93. </style>
  94. <body>
  95. <div class="popwrapper">
  96. <form class="layui-form" id="admin" enctype="multipart/form-data" lay-filter="wxshow-form">
  97. <div class="layui-form" lay-filter="layuiadmin-app-form-list" id="layuiadmin-app-form-list" style="padding: 20px 30px 0 0;">
  98. <div class="layui-form-item" id="text">
  99. <label class="layui-form-label"><span style="color: red;">*</span>内容</label>
  100. <div class="layui-input-block">
  101. <textarea name="content" lay-verify="required" id="content" cols="6" rows="10" autocomplete="off" class="layui-textarea">{$data.content}</textarea>
  102. </div>
  103. </div>
  104. {if condition="$data.type eq 1"}
  105. <div class="layui-form-item video">
  106. <label class="layui-form-label">视频</label>
  107. <div class="layui-input-inline" style="width: 290px;display: block;" id="container">
  108. <a class="layui-btn btn" id="selectfiles" href="javascript:void(0);" >选择视频</a>
  109. <a class="layui-btn btn" id="postfiles" href="javascript:void(0);">开始上传</a>
  110. <div id="ossfile"></div>
  111. {if condition="$data.video"}
  112. <video src="{$data.video}" width="320" height="240" controls="controls">
  113. </video>
  114. {/if}
  115. <div id="symbshowed" class=""></div>
  116. <!--报错信息返回展示-->
  117. <pre id="console"></pre>
  118. <input type="hidden" value="{$data.video}" id="fileuri">
  119. <!--上传到OSS哪个文件下,在这里定义-->
  120. <input type="hidden" value="dailyWechatArticle" id="category_name">
  121. <div class="layui-form-mid layui-word-aux" style="color: red!important;">注:限制上传100M内</div>
  122. </div>
  123. </div>
  124. {else/}
  125. <div class="layui-form-item img" style="display: flex;">
  126. <label class="layui-form-label">配图片</label>
  127. <div class="picDiv" id="draggable" style="margin: 10px 0px;flex: 1;">
  128. {volist name="data.picture" id="vo" }
  129. <div class="imageDiv">
  130. <img src="{$vo}?x-oss-process=image/resize,l_125" class="layui-upload-img" width="100%" height="100%">
  131. <div><i class="layui-icon layui-icon-delete" prop="delete"></i> <i class="layui-icon layui-icon-search" prop="view" data-image="{$vo}?x-oss-process=image/resize,l_125" style="margin-left:30px;font-size: 25px;margin-top: 5px;"></i></div>
  132. <input type="hidden" name="article_image_exist[]" value="{$vo}" />
  133. </div>
  134. {/volist}
  135. <div class="addImages" id="img">
  136. <div class="text-detail">
  137. <span>+</span>
  138. <p>点击上传</p>
  139. </div>
  140. </div>
  141. </div>
  142. </div>
  143. {/if}
  144. <div class="layui-form-item imgTips">
  145. <label class="layui-form-label labels"></label>
  146. <div><i style="color: red;margin-right: 5px;"></i>建议上传图片宽高比例1:1,图片大小不超过1M</div>
  147. </div>
  148. <div class="layui-form-item">
  149. <label class="layui-form-label"><span style="color: red;">*</span>分类</label>
  150. <div class="layui-input-inline">
  151. <select name="label" lay-filter="label" id="label" lay-verify="required">
  152. <option value="">请选择</option>
  153. {volist name="label" id="v"}
  154. <option value="{$v.id}" {eq name="$data.festival_id" value="$v.id" }selected{/eq}>{$v.label_name} </option>
  155. {/volist}
  156. </select>
  157. </div>
  158. <i class="layui-icon layui-icon-add-circle adding" style="font-size: 32px" id="wechat-label-add"></i>
  159. </div>
  160. <div class="layui-form-item">
  161. <label class="layui-form-label">展示时间</label>
  162. <div class="layui-input-inline">
  163. <input type="text" name="show_date" id="show_date" class="layui-input" value="{$data.show_date}">
  164. </div>
  165. </div>
  166. <input type="hidden" name="id" value="{$data.id}" />
  167. <div class="layui-form-item">
  168. <input class="layui-btn layui-btn-primary ml20b" type="button" lay-submit lay-filter="dailyWechatArticle-submit" id="dailyWechatArticle-submit" value="确认提交">
  169. </div>
  170. </div>
  171. </form>
  172. </div>
  173. </body>
  174. {/block} {block name="js"}
  175. <script type="text/javascript" src="__STATIC__/js/plupload/js/plupload.full.min.js"></script>
  176. <script type="text/javascript" src="__STATIC__/js/Sortable.js"></script>
  177. <script type="text/javascript" src="__STATIC__/js/plupload/ossupload.js"></script>
  178. <script src="https://gosspublic.alicdn.com/aliyun-oss-sdk-6.3.1.min.js" async></script>
  179. <script>
  180. layui.config({
  181. base: '__LAYUI__/' //静态资源所在路径
  182. ,
  183. urlbase: '/sys'
  184. }).extend({
  185. index: 'lib/index' //主入口模块
  186. }).use(['index', 'form', 'upload', 'layedit', 'laydate'], function() {
  187. var form = layui.form,
  188. upload = layui.upload,
  189. layedit = layui.layedit,
  190. files = [],
  191. laydate = layui.laydate,
  192. $ = layui.jquery;
  193. form.render();
  194. var obj = {
  195. label: "{:$data['festival_id']}"
  196. };
  197. // 给表单初始赋值,但是无法实现对复选框赋值
  198. form.val("wxshow-form", obj);
  199. /* 监听提交 */
  200. form.on('submit(dailyWechatArticle-submit)', function(obj) {
  201. var index = parent.layer.getFrameIndex(window.name);
  202. var formData = new FormData(obj.form);
  203. //限制加载框
  204. var sd = parent.layer.load(1, {
  205. shade: [0.8, '#FFFFFF']
  206. });
  207. //监听分类,去除图片或视频
  208. // var radio = $('input:radio:checked').val();
  209. var radio = "{$data.type}";
  210. if(radio == 1) {
  211. formData.delete('article_image');
  212. formData.append('video_url',$('#fileuri').val());
  213. } else {
  214. formData.delete('video_url');
  215. formData.delete('article_image');
  216. // for(i in files) {
  217. // formData.append('article_image[]', files[i]);
  218. // }
  219. let el = document.querySelector('#draggable').children;
  220. for (let i = 0; i < el.length; i++) {
  221. if (el[i].className === 'imageDiv' && el[i].dataset.id) {
  222. formData.append('article_image[]', files[el[i].dataset.id]['imglink']);
  223. }
  224. }
  225. }
  226. $.ajax({
  227. url: '{:url("material/wxshowsave")}',
  228. type: 'post',
  229. data: formData,
  230. dataType: 'json',
  231. processData: false,
  232. contentType: false,
  233. success: function(res) {
  234. if(res.code === 0) {
  235. layer.msg(res.msg, {
  236. anim: 0,time: 400
  237. }, function() {
  238. parent.layui.table.reload('wxshow-table');//店面后台
  239. parent.layui.table.reload('wxshow-add-table');//集团后台
  240. parent.layer.close(index); //再执行关闭
  241. });
  242. } else {
  243. layer.msg(res.msg, {
  244. anim: 6,time: 400
  245. });
  246. }
  247. parent.layer.close(sd);
  248. }
  249. })
  250. });
  251. setTimeout(() => {
  252. let el = document.querySelector('#draggable');
  253. new Sortable(el, {
  254. animation: 150,
  255. ghostClass: 'blue-background-class',
  256. filter: ".addImages", // 过滤器,不需要进行拖动的元素
  257. // 结束拖拽
  258. onEnd: function (/**Event*/evt) {
  259. var itemEl = evt.item; // dragged HTMLElement
  260. evt.to; // target list
  261. evt.from; // previous list
  262. evt.oldIndex; // element's old index within old parent
  263. evt.newIndex; // element's new index within new parent
  264. evt.clone // the clone element
  265. evt.pullMode; // when item is in another sortable: `"clone"` if cloning, `true` if moving
  266. },
  267. });
  268. },800)
  269. //多图片上传
  270. upload.render({
  271. elem: '#img',
  272. accept: 'images',
  273. exts: 'jpg|png|bmp|jpeg|JPG|PNG|BMP|JPEG',
  274. field: 'article_image',
  275. size: 2 * 1024,
  276. auto: false,
  277. multiple: true,
  278. choose: function(obj) {
  279. files = obj.pushFile();
  280. length = $('.imageDiv').length;
  281. obj.preview(function(index, file, result) {
  282. length++;
  283. if(length > 9) {
  284. if(length == 10) layer.msg('限制九张图片以下');
  285. delete files[index];
  286. } else {
  287. ossuploadimg(file).then(f => {
  288. files[index]['imglink'] = f;
  289. $('.picDiv').prepend('<div class="imageDiv" data-id="' + index +
  290. '"><img src="' + result + '" alt="' + file.name +
  291. '" 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>'
  292. );
  293. })
  294. }
  295. });
  296. }
  297. });
  298. function ossuploadimg(file) {
  299. return new Promise((resolve,reject) => {
  300. var client = new OSS({
  301. region: "oss-cn-hangzhou",
  302. accessKeyId: "LTAI5tHjWupJSCAycy2yVbQZ",
  303. accessKeySecret: "eNFicm77Cfq3u7ZnQyw1urFmFNpf3w",
  304. bucket: "zyzswzh",
  305. secure: true
  306. });
  307. var date = new Date().getTime();
  308. var objectName = 'crm/' + date + "/" + Date.now() + ".jpeg";
  309. client.put(objectName, file).then(function (result) {
  310. resolve(result.name);
  311. }).catch(function (error) {
  312. reject(error)
  313. });
  314. })
  315. }
  316. form.on('radio(type)', function(data) {
  317. if(data.value == 1) {
  318. $('.video').removeClass('layui-hide');
  319. $('.img').addClass('layui-hide');
  320. $('.imgTips').addClass('layui-hide');
  321. }else if(data.value == 2){
  322. $('.img').removeClass('layui-hide');
  323. $('.imgTips').removeClass('layui-hide');
  324. $('.video').addClass('layui-hide');
  325. }else{
  326. $('.img').addClass('layui-hide');
  327. $('.imgTips').addClass('layui-hide');
  328. $('.video').addClass('layui-hide');
  329. }
  330. });
  331. //添加分类
  332. $('#wechat-label-add').click(function(){
  333. layer.prompt({
  334. title: ['添加分类', 'color:#333333;background-color:#D8E6F1;'],
  335. }, function(value, index, elem) {
  336. var value = $.trim(value);
  337. if(value == '') {
  338. layer.msg('请输入分类名称', {anim: 6,time: 400});
  339. return false;
  340. }
  341. if(value.length > 6) {
  342. layer.msg('分类名称超长', {anim: 6,time: 400});
  343. return false;
  344. }
  345. $.post('{:url("material/add_wechat_label")}', {
  346. value: value
  347. }, function(res) {
  348. if(res.code == 0) {
  349. $('#label').append("<option value='"+res.data.id+"'>"+res.data.name+"</option>")
  350. form.render();
  351. layer.msg(res.msg, {
  352. anim: 0,time: 400
  353. }, function() {
  354. layer.close(index); //再执行关闭
  355. });
  356. } else {
  357. layer.msg(res.msg, {
  358. anim: 6,time: 400
  359. });
  360. }
  361. });
  362. });
  363. });
  364. $('.picDiv').on('click', 'i', function(e) {
  365. var that = this;
  366. if (e.target.attributes[1].nodeValue === 'delete') {
  367. layer.confirm('确定删除该图片么?',{title: ['信息', 'color:#333333;background-color:#D8E6F1;'],}, function(index) {
  368. var imgDiv = $(that).closest('.imageDiv');
  369. if(id = imgDiv.data('id')) {
  370. delete files[id];
  371. }
  372. imgDiv.remove();
  373. layer.close(index);
  374. });
  375. } else {
  376. layer.photos({ photos: {"data": [{"src": e.target.attributes[2].nodeValue}]} ,closeBtn:true});
  377. }
  378. });
  379. laydate.render({
  380. elem: '#show_date' //指定元素
  381. });
  382. });
  383. </script>
  384. {/block}