From b06418c37c2b9e3c01c8e382fb311d35629f1d9a Mon Sep 17 00:00:00 2001
From: Administrator <15274802129@163.com>
Date: Wed, 23 Apr 2025 17:53:03 +0800
Subject: [PATCH] feat(mall): 添加活动报名状态字段

---
 src/main/resources/templates/febs/views/modules/votesActivity/optionInfo.html |  408 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 408 insertions(+), 0 deletions(-)

diff --git a/src/main/resources/templates/febs/views/modules/votesActivity/optionInfo.html b/src/main/resources/templates/febs/views/modules/votesActivity/optionInfo.html
new file mode 100644
index 0000000..64bf0f5
--- /dev/null
+++ b/src/main/resources/templates/febs/views/modules/votesActivity/optionInfo.html
@@ -0,0 +1,408 @@
+<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>

--
Gitblit v1.9.1