| <div class="layui-fluid layui-anim febs-anim" id="febs-option-info" lay-title="活动选项编辑"> | 
|     <div class="layui-row febs-container"> | 
|         <div class="layui-col-md12"> | 
|             <div class="layui-fluid" id="option-info"> | 
|                 <form class="layui-form" action="" lay-filter="option-info-form"> | 
|                     <div class="layui-tab layui-tab-brief" lay-filter="docDemoTabBrief"> | 
|                         <ul class="layui-tab-title"> | 
|                             <li class="layui-this">基础信息</li> | 
|                         </ul> | 
|                         <div class="layui-tab-content"> | 
|                             <input type="text" name="id" | 
|                                    placeholder="" autoComplete="off" class="layui-input febs-hide"> | 
|                             <div class="layui-tab-item layui-show"> | 
|                                 <blockquote class="layui-elem-quote blue-border">审核</blockquote> | 
|                                 <div class="layui-row layui-col-space10 layui-form-item"> | 
|                                     <div class="layui-col-lg6"> | 
|                                         <label class="layui-form-label febs-form-item-require">审核:</label> | 
|                                         <div class="layui-input-block"> | 
|                                             <input type="radio" name="state" value="0" title="待审核" checked /> | 
|                                             <input type="radio" name="state" value="1" title="同意" /> | 
|                                             <input type="radio" name="state" value="2" title="拒绝" /> | 
|                                         </div> | 
|                                     </div> | 
|                                     <div class="layui-row layui-col-space10 layui-form-item"> | 
|                                         <div class="layui-col-lg6"> | 
|                                             <label class="layui-form-label febs-form-item-require">封面:</label> | 
|                                             <div class="layui-input-block"> | 
|                                                 <input type="text" lay-verify="required" name="image" autocomplete="off" class="layui-input" readonly> | 
|                                             </div> | 
|                                         </div> | 
|                                         <div class="layui-col-lg6"> | 
|                                             <button type="button" class="layui-btn layui-btn-normal layui-btn" id="openImg">封面审核</button> | 
|                                         </div> | 
|                                     </div> | 
|   | 
|   | 
|                                     <div class="layui-row layui-col-space10 layui-form-item"> | 
|                                         <div class="layui-col-lg6"> | 
|                                             <label class="layui-form-label febs-form-item-require">参赛作品:</label> | 
|                                             <div class="layui-input-block"> | 
|                                                 <input type="text" lay-verify="required" name="videoUrl" autocomplete="off" class="layui-input" readonly> | 
|                                             </div> | 
|                                         </div> | 
|                                         <div class="layui-col-lg6"> | 
|                                             <button type="button" class="layui-btn layui-btn-normal layui-btn" id="openVideo">作品审核</button> | 
|                                         </div> | 
|                                     </div> | 
|                                 </div> | 
|                                 <blockquote class="layui-elem-quote blue-border">基础信息</blockquote> | 
|                                 <div class="layui-row layui-col-space10 layui-form-item"> | 
|                                     <div class="layui-col-lg6"> | 
|                                         <label class="layui-form-label febs-form-item-require">所属活动:</label> | 
|                                         <div class="layui-input-block"> | 
|                                             <div id="activity-option"></div> | 
|                                         </div> | 
|                                     </div> | 
|   | 
|                                     <div class="layui-col-lg6"> | 
|                                         <label class="layui-form-label">序号:</label> | 
|                                         <div class="layui-input-block"> | 
|                                             <input type="number" name="orderCnt" placeholder="" autocomplete="off" class="layui-input" data-value="{$voteOption.number}"> | 
|                                         </div> | 
|                                     </div> | 
|                                 </div> | 
|                                 <div class="layui-form-item"> | 
|                                     <div class="layui-col-lg6"> | 
|                                         <label class="layui-form-label febs-form-item-require">选项名称:</label> | 
|                                         <div class="layui-input-block"> | 
|                                             <input type="text" name="optionName" lay-verify="required" autocomplete="off" class="layui-input" > | 
|                                         </div> | 
|                                     </div> | 
|                                     <div class="layui-col-lg6"> | 
|                                         <label class="layui-form-label febs-form-item-require">姓名:</label> | 
|                                         <div class="layui-input-block"> | 
|                                             <input type="text" name="realName" lay-verify="required" autocomplete="off" class="layui-input" > | 
|                                         </div> | 
|                                     </div> | 
|   | 
|                                 </div> | 
|   | 
|                                 <div class="layui-row layui-col-space10 layui-form-item"> | 
|                                     <div class="layui-col-lg6"> | 
|                                         <label class="layui-form-label">性别:</label> | 
|                                         <div class="layui-input-block"> | 
|                                             <input type="radio" name="sex" value="1" title="男" /> | 
|                                             <input type="radio" name="sex" value="2" title="女" /> | 
|                                             <input type="radio" name="sex" value="3" title="保密" checked /> | 
|                                         </div> | 
|                                     </div> | 
|                                     <div class="layui-form-item" id="area-picker"> | 
|                                         <div class="layui-form-label">选择省/市</div> | 
|                                         <div class="layui-input-inline" style="width: 200px;"> | 
|                                             <select name="province" class="province-selector" > | 
|                                                 <option value="">--选择省--</option> | 
|                                             </select> | 
|                                         </div> | 
|                                         <div class="layui-input-inline" style="width: 200px;" > | 
|                                             <select name="city" class="city-selector"> | 
|                                                 <option value="">--选择市--</option> | 
|                                             </select> | 
|                                         </div> | 
|                                     </div> | 
|   | 
|                                 </div> | 
|                                 <div class="layui-row layui-col-space10 layui-form-item"> | 
|                                     <div class="layui-col-lg6"> | 
|                                         <label class="layui-form-label febs-form-item-require">详细地址:</label> | 
|                                         <div class="layui-input-block"> | 
|                                             <input type="text" name="address" lay-verify="required" autocomplete="off" class="layui-input" > | 
|                                         </div> | 
|                                     </div> | 
|                                     <div class="layui-col-lg6"> | 
|                                         <label class="layui-form-label febs-form-item-require">手机:</label> | 
|                                         <div class="layui-input-block"> | 
|                                             <input type="text" name="mobilePhone" autocomplete="off" class="layui-input" > | 
|                                         </div> | 
|                                     </div> | 
|   | 
|                                 </div> | 
|                                 <div class="layui-row layui-col-space10 layui-form-item"> | 
|   | 
|                                     <div class="layui-col-lg6"> | 
|                                         <label class="layui-form-label">邮箱:</label> | 
|                                         <div class="layui-input-block"> | 
|                                             <input type="text" name="email" autocomplete="off" class="layui-input" > | 
|                                         </div> | 
|                                     </div> | 
|                                     <div class="layui-col-lg6"> | 
|                                         <label class="layui-form-label febs-form-item-require" style="white-space: nowrap;">是否签约MCN:</label> | 
|                                         <div class="layui-input-block"> | 
|                                             <select name="mcnState" lay-verify="required" class="layui-input"> | 
|                                                 <option value="0">否</option> | 
|                                                 <option value="1">是</option> | 
|                                             </select> | 
|                                         </div> | 
|                                     </div> | 
|                                 </div> | 
|   | 
|                                 <div class="layui-form-item"> | 
|                                     <label class="layui-form-label">爱好:</label> | 
|                                     <div class="layui-input-block"> | 
|                                         <label> | 
|                                             <textarea name="hobby" rows="5" autocomplete="off" class="layui-textarea" ></textarea> | 
|                                         </label> | 
|                                     </div> | 
|                                 </div> | 
|                                 <div class="layui-form-item"> | 
|                                     <label class="layui-form-label febs-form-item-require">选项描述:</label> | 
|                                     <div class="layui-input-block"> | 
|                                         <div style="border: 1px solid #ccc;"> | 
|                                             <div id="toolbar-container" class="toolbar"></div> | 
|                                             <div id="text-container" class="text" style="height: 450px;"></div> | 
|                                         </div> | 
|                                     </div> | 
|                                 </div> | 
|                             </div> | 
|                         </div> | 
|                     </div> | 
|   | 
|                     <div class="layui-form-item febs-hide"> | 
|                         <button class="layui-btn" lay-submit="" lay-filter="option-info-form-submit" id="submit">保存</button> | 
|                     </div> | 
|                 </form> | 
|             </div> | 
|         </div> | 
|     </div> | 
| </div> | 
| <style> | 
|     .blue-border { | 
|         border-left-color: #2db7f5; | 
|         font-size: 18px; | 
|     } | 
|     .layui-table-cell { | 
|         height:auto; | 
|     } | 
|     .layui-upload-list { | 
|         margin: 0 !important; | 
|     } | 
|     .multi-images { | 
|         margin: 0 5px !important; | 
|     } | 
| </style> | 
| <!-- 表格操作栏 end --> | 
| <script data-th-inline="javascript"> | 
|     layui.use(['febs', 'form', 'formSelects', 'validate', 'laydate', 'layedit', 'table', 'xmSelect', 'layarea'], function () { | 
|         var $ = layui.jquery, | 
|             febs = layui.febs, | 
|             layer = layui.layer, | 
|             table = layui.table, | 
|             formSelects = layui.formSelects, | 
|             form = layui.form, | 
|             $view = $('#option-info'), | 
|             voteOption = [[${voteOption}]], | 
|             layedit = layui.layedit, | 
|             layarea = layui.layarea, | 
|             validate = layui.validate; | 
|   | 
|         form.render(); | 
|         const E = window.wangEditor; | 
|         const editor = new E('#toolbar-container', '#text-container'); // 传入两个元素 | 
|         editor.config.showLinkImg = false; | 
|         editor.config.uploadFileName = 'file'; | 
|         editor.config.customUploadImg = function (files, insertImgFn) { | 
|             // files 是 input 中选中的文件列表 | 
|             // insertImgFn 是获取图片 url 后,插入到编辑器的方法 | 
|             // 上传图片,返回结果,将图片插入到编辑器中 | 
|             for (let i = 0; i < files.length; i++){ | 
|                 var form = new FormData(); | 
|                 form.append("file", files[0]); | 
|                 $.ajax({ | 
|                     url:'/admin/goods/uploadFileBase64', | 
|                     type: "post", | 
|                     processData: false, | 
|                     contentType: false, | 
|                     data: form, | 
|                     dataType: 'json', | 
|                     success(res) { | 
|                         // 上传代码返回结果之后,将图片插入到编辑器中 | 
|                         insertImgFn(res.data.src, res.data.title, '') | 
|                     } | 
|                 }) | 
|             } | 
|         }; | 
|         editor.create(); | 
|   | 
|         formSelects.render(); | 
|   | 
|         let activityOptions = xmSelect.render({ | 
|             el: '#activity-option', | 
|             language: 'zn', | 
|             prop : { | 
|                 value : 'id', | 
|                 children : 'child' | 
|             }, | 
|             iconfont: { | 
|                 parent: 'hidden', | 
|             }, | 
|             tips: '请选择', | 
|             filterable: true, | 
|             radio: true, | 
|             clickClose: true, | 
|             tree: { | 
|                 show: true, | 
|                 //非严格模式 | 
|                 strict: false, | 
|             }, | 
|             data: [] | 
|         }) | 
|   | 
|         febs.get(ctx + 'admin/happyActivity/allActivities', null, function(res) { | 
|             activityOptions.update({ | 
|                 data : res.data, | 
|                 autoRow: true, | 
|             }); | 
|             initOptionInfo(); | 
|         }) | 
|         let obj1 = layarea.render({ | 
|             elem: '#area-picker', | 
|             change: function (res) { | 
|                 //选择结果 | 
|                 console.log(res); | 
|             } | 
|         }); | 
|         layarea.render({ | 
|             elem: '#area-picker', | 
|             data: { | 
|                 province: "上海", | 
|                 city: "上海", | 
|                 county: "浦东新区", | 
|             }, | 
|             change: function (res) { | 
|                 //选择结果 | 
|                 console.log(res); | 
|             } | 
|         }); | 
|   | 
|         function initOptionInfo() { | 
|             console.log("voteOption:", voteOption); // 调试信息 | 
|             form.val("option-info-form", { | 
|                 "id": voteOption.id, | 
|                 "activityId": voteOption.activityId, | 
|                 "optionName": voteOption.optionName, | 
|                 "realName": voteOption.realName, | 
|                 "description": voteOption.description, | 
|                 "orderCnt": voteOption.orderCnt, | 
|                 "mobilePhone": voteOption.mobilePhone, | 
|                 "sex": voteOption.sex, | 
|                 "hobby": voteOption.hobby, | 
|                 "mcnState": voteOption.mcnState, | 
|                 "address": voteOption.address, | 
|                 "province": voteOption.province, | 
|                 "city": voteOption.city, | 
|                 "videoUrl": voteOption.videoUrl, | 
|                 "state": voteOption.state, | 
|                 "image": voteOption.image, | 
|                 "email": voteOption.email | 
|             }); | 
|   | 
|             var arr = []; | 
|             arr.push(voteOption.activityId) | 
|             activityOptions.setValue(arr); | 
|   | 
|             editor.txt.html(voteOption.description); | 
|   | 
|             setTimeout(() => { | 
|                 obj1.reload({ | 
|                     data: { | 
|                         province: voteOption.province, | 
|                         city: voteOption.city, | 
|                     } | 
|                 }); | 
|             }, 200); | 
|         } | 
|   | 
|   | 
|   | 
|         form.on('submit(option-info-form-submit)', function (data) { | 
|             data.field.activityId = activityOptions.getValue('valueStr'); | 
|             data.field.description = editor.txt.html(); | 
|             console.log(data.field); | 
|             $.ajax({ | 
|                 'url':ctx + 'admin/happyActivity/optionUpdate', | 
|                 'type':'post', | 
|                 'dataType':'json', | 
|                 'headers' : {'Content-Type' : 'application/json;charset=utf-8'}, //接口json格式 | 
|                 'traditional': true,//ajax传递数组必须添加属性 | 
|                 'data':JSON.stringify(data.field), | 
|                 'success':function (data) { | 
|                     if(data.code==200){ | 
|                         layer.closeAll(); | 
|                         febs.alert.success(data.message); | 
|                         $('#febs-activity-option').find('#query').click(); | 
|                     }else{ | 
|                         febs.alert.warn(data.message); | 
|                     } | 
|                 }, | 
|                 'error':function () { | 
|                     febs.alert.warn('服务器繁忙'); | 
|                 } | 
|             }) | 
|             return false; | 
|         }); | 
|   | 
|         // 添加点击事件监听器 | 
|         $('#openImg').on('click', function() { | 
|             let imageUrl = voteOption.image; | 
|             //页面层 | 
|             layer.open({ | 
|                 type: 1, | 
|                 title: "图片", | 
|                 skin: 'layui-layer-rim', //加上边框 | 
|                 area: ['100%', '100%'], //宽高 | 
|                 shadeClose: true, //开启遮罩关闭 | 
|                 end: function (index, layero) { | 
|                     return false; | 
|                 }, | 
|                 content: '<div style="text-align:center"><img src="' + imageUrl + '" /></div>' | 
|             }); | 
|         }); | 
|   | 
|         // 添加点击事件监听器 | 
|         $('#openVideo').on('click', function() { | 
|             let videoUrl = voteOption.videoUrl; | 
|   | 
|             // 校验视频URL是否有效 | 
|             if (!videoUrl || !isVideoUrlValid(videoUrl)) { | 
|                 alert('视频地址无效,请检查!'); | 
|                 return; | 
|             } | 
|   | 
|             // 使用更安全的方式生成HTML内容 | 
|             let videoContent = $('<div>').append( | 
|                 $('<video>', { | 
|                     controls: true, | 
|                     autoplay: true, | 
|                     name: 'media', | 
|                     style: "width: 30%;height: 30%;" | 
|                 }).append( | 
|                     $('<source>', { | 
|                         src: videoUrl, | 
|                         type: 'video/mp4' | 
|                     }) | 
|                 ) | 
|             ).prop('outerHTML'); | 
|   | 
|             // 页面层 | 
|             layer.open({ | 
|                 type: 1, | 
|                 title: "视频", | 
|                 skin: 'layui-layer-rim', // 加上边框 | 
|                 area: ['100%', '100%'], | 
|                 shadeClose: true, // 开启遮罩关闭 | 
|                 content: `<div style="text-align:center">${videoContent}</div>` | 
|             }); | 
|         }); | 
|   | 
|         // 视频URL校验函数 | 
|         function isVideoUrlValid(url) { | 
|             try { | 
|                 const urlObj = new URL(url); | 
|                 return urlObj.protocol === 'http:' || urlObj.protocol === 'https:'; | 
|             } catch (e) { | 
|                 return false; | 
|             } | 
|         } | 
|   | 
|     }); | 
| </script> |