KKSU
2025-01-09 acf7cd254090a98916270612e523eecfb1857264
refactor(mall): 重构轮播图编辑页面

- 更新 goodsUpdateNew.html 中的编辑器配置和数据加载逻辑
- 优化 platformBanner.html 中的表格结构和操作按钮
- 重构 platformBannerDetail.html 中的表单布局和字段
- 更新 ViewBannerController 中的 model 属性名称
4 files modified
151 ■■■■ changed files
src/main/java/cc/mrbird/febs/mall/controller/ViewBannerController.java 2 ●●● patch | view | raw | blame | history
src/main/resources/templates/febs/views/modules/banner/platformBanner.html 13 ●●●● patch | view | raw | blame | history
src/main/resources/templates/febs/views/modules/banner/platformBannerDetail.html 93 ●●●●● patch | view | raw | blame | history
src/main/resources/templates/febs/views/modules/goods/goodsUpdateNew.html 43 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/controller/ViewBannerController.java
@@ -36,7 +36,7 @@
    @RequiresPermissions("platformBannerUpdate:update")
    public String platformBannerUpdate(@PathVariable long id, Model model) {
        PlatformBanner data = iAdminBannerService.selectPlatformBannerById(id);
        model.addAttribute("member", data);
        model.addAttribute("bannerInfo", data);
        return FebsUtil.view("modules/banner/platformBannerDetail");
    }
src/main/resources/templates/febs/views/modules/banner/platformBanner.html
@@ -59,15 +59,10 @@
    <span class="layui-badge febs-bg-{{isTop.color}}">{{ isTop.title }}</span>
</script>
<!-- 表格操作栏 start -->
<script type="text/html" id="user-option">
<!--    <span shiro:lacksPermission="user:view,user:update,user:delete">-->
<!--        <span class="layui-badge-dot febs-bg-orange"></span> 无权限-->
<!--    </span>-->
<!--    <a lay-event="edit" shiro:hasPermission="user:update">编辑-->
<script type="text/html" id="banner-option">
    <a lay-event="edit">编辑
        <i class="layui-icon febs-edit-area febs-blue"></i>
     </a>
<!--    <a lay-event="delete" shiro:hasPermission="user:update">删除-->
    <a lay-event="delete">删除
        <i class="layui-icon febs-edit-area febs-blue"></i>
     </a>
@@ -163,15 +158,11 @@
                        templet: function (d) {
                            return '<img src="'+d.imageUrl+'" >'
                        }, minWidth: 200,align:'center'},
                    // {field: 'sort', title: '联系方式', minWidth: 200,align:'center'},
                    {title: '是否可跳转', templet: '#isJump', minWidth: 60,align:'center'},
                    {field: 'jumpUrl', title: '跳转链接', minWidth: 200,align:'center'},
                    {title: '跳转外部或内部', templet: '#isInside', minWidth: 60,align:'center'},
                    // {title: '显示端口', templet: '#showPort', minWidth: 60,align:'center'},
                    {title: '是否置顶', templet: '#isTop', minWidth: 60,align:'center'},
                    {title: '操作', toolbar: '#user-option', minWidth: 140, fixed : 'right'}
                    {title: '操作', toolbar: '#banner-option', minWidth: 140, fixed : 'right'}
                ]]
            });
        }
src/main/resources/templates/febs/views/modules/banner/platformBannerDetail.html
@@ -22,14 +22,14 @@
        <div class="layui-form-item febs-hide">
            <label class="layui-form-label febs-form-item-require">用户id:</label>
            <div class="layui-input-block">
                <input type="text" name="id" data-th-value="${member.id}">
                <input type="text" name="id" data-th-value="${bannerInfo.id}">
            </div>
        </div>
        <div class="layui-form-item">
            <label class="layui-form-label febs-form-item-require">标题:</label>
            <div class="layui-input-block">
                <input type="text" name="name"  data-th-id="${member.name}"
                        autocomplete="off" class="layui-input" >
                <input type="text" name="name"
                       autocomplete="off" class="layui-input" >
            </div>
        </div>
        <div class="layui-form-item">
@@ -47,49 +47,35 @@
            <label class="layui-form-label febs-form-item-require">图片链接:</label>
            <div class="layui-input-block">
                <input type="text" id="imageUrl" name="imageUrl"
                        autocomplete="off" class="layui-input" readonly>
                       autocomplete="off" class="layui-input" readonly>
            </div>
        </div>
<!--        <div class="layui-form-item">-->
<!--            <label class="layui-form-label febs-form-item-require">联系方式:</label>-->
<!--            <div class="layui-input-block">-->
<!--                <input type="text" name="sort" minlength="4" maxlength="10" data-th-id="${member.sort}"-->
<!--                       lay-verify="range|sort" autocomplete="off" class="layui-input" >-->
<!--            </div>-->
<!--        </div>-->
        <div class="layui-form-item">
            <label class="layui-form-label febs-form-item-require">是否置顶:</label>
            <div class="layui-input-block">
                <input type="radio" name="isTop" value="1" title="是">
                <input type="radio" name="isTop" value="1" title="是" checked="">
                <input type="radio" name="isTop" value="2" title="否">
            </div>
        </div>
<!--        <div class="layui-form-item">-->
<!--            <label class="layui-form-label febs-form-item-require">显示端口:</label>-->
<!--            <div class="layui-input-block">-->
<!--                <input type="radio" name="showPort" value="1" title="pc">-->
<!--                <input type="radio" name="showPort" value="2" title="手机">-->
<!--            </div>-->
<!--        </div>-->
        <div class="layui-form-item">
            <label class="layui-form-label febs-form-item-require">是否可跳转:</label>
            <div class="layui-input-block">
                <input type="radio" name="isJump" value="1" title="是">
                <input type="radio" name="isJump" value="1" title="是" checked="">
                <input type="radio" name="isJump" value="2" title="否">
            </div>
        </div>
        <div class="layui-form-item">
            <label class="layui-form-label">跳转链接:</label>
            <label class="layui-form-label">关联活动:</label>
            <div class="layui-input-block">
                <input type="text" name="jumpUrl"  data-th-id="${member.jumpUrl}"
                        autocomplete="off" class="layui-input" >
                <div id="jumpUrl-list"></div>
            </div>
            <div class="layui-form-mid layui-word-aux">图片需要跳转到商品详情,请填写商品编号。</div>
        </div>
        <div class="layui-form-item">
            <label class="layui-form-label febs-form-item-require">跳转外部或内部:</label>
            <div class="layui-input-block">
                <input type="radio" name="isInside" value="1" title="内">
                <input type="radio" name="isInside" value="1" title="内" checked="">
                <input type="radio" name="isInside" value="2" title="外">
            </div>
        </div>
@@ -100,7 +86,7 @@
</div>
<script data-th-inline="javascript">
    layui.use(['febs', 'form', 'formSelects', 'validate', 'treeSelect', 'eleTree','upload'], function () {
    layui.use(['febs', 'form', 'formSelects', 'validate', 'treeSelect', 'eleTree','upload', 'xmSelect'], function () {
        var $ = layui.$,
            febs = layui.febs,
            layer = layui.layer,
@@ -108,7 +94,7 @@
            treeSelect = layui.treeSelect,
            form = layui.form,
            eleTree = layui.eleTree,
            member = [[${member}]],
            bannerInfo = [[${bannerInfo}]],
            $view = $('#banner-update'),
            validate = layui.validate,
            upload = layui.upload,
@@ -132,26 +118,55 @@
        form.render();
        initUserValue();
        var activityList = xmSelect.render({
            el: '#jumpUrl-list',
            language: 'zh',
            prop : {
                value : 'id',
                children : 'child'
            },
            iconfont: {
                parent: 'hidden',
            },
            radio: true,//单选按钮。如何想要多选直接注释掉此行代码
            clickClose: true,
            tree: {
                show: true,
                //非严格模式
                strict: false,
            },
            data: []
        })
        febs.get(ctx + 'admin/activity/activityList', null, function(res) {
            activityList.update({
                data : res.data,
                autoRow: true,
            });
            // 确保在数据加载完成后初始化表单值
            initBannerValue();
        })
        formSelects.render();
        function initUserValue() {
            $('#imageUrls').attr('src', member.imageUrl);
        function initBannerValue() {
            $('#imageUrls').attr('src', bannerInfo.imageUrl);
            form.val("banner-update-form", {
                "id": member.id,
                "name": member.name,
                "imageUrl": member.imageUrl,
                "isInside": member.isInside,
                // "showPort": member.showPort,
                "jumpUrl": member.jumpUrl,
                // "sort": member.sort,
                "isTop": member.isTop,
                "isJump": member.isJump
                "id": bannerInfo.id,
                "name": bannerInfo.name,
                "imageUrl": bannerInfo.imageUrl,
                "isInside": bannerInfo.isInside,
                "jumpUrl": bannerInfo.jumpUrl,
                "isTop": bannerInfo.isTop,
                "isJump": bannerInfo.isJump
            });
            var arr = [];
            arr.push(bannerInfo.jumpUrl)
            activityList.setValue(arr);
        }
        form.on('submit(banner-update-form-submit)', function (data) {
            data.field.jumpUrl = activityList.getValue('valueStr');
            febs.post(ctx + 'admin/banner/platformBannerConfirm', data.field, function () {
                layer.closeAll();
                febs.alert.success('设置成功');
src/main/resources/templates/febs/views/modules/goods/goodsUpdateNew.html
@@ -435,8 +435,6 @@
        //         return layedit.sync(indexUpdate);
        //     }
        // });
        formSelects.render();
        const E = window.wangEditor;
        const editor = new E('#toolbar-container', '#text-container'); // 传入两个元素
        editor.config.showLinkImg = false;
@@ -476,7 +474,7 @@
        var category = xmSelect.render({
            el: '#goods-category',
            language: 'zn',
            language: 'zh',
            prop : {
                value : 'id',
                children : 'child'
@@ -494,18 +492,9 @@
            data: []
        })
        febs.get(ctx + 'admin/goodsCategory/categoryTree', null, function(res) {
            category.update({
                data : res.data,
                autoRow: true,
            });
            // initValue();
        })
        var couponRule = xmSelect.render({
            el: '#coupon-rule',
            language: 'zn',
            language: 'zh',
            prop : {
                value : 'id',
                children : 'child'
@@ -523,18 +512,9 @@
            data: []
        })
        febs.get(ctx + 'admin/goods/couponTreeSet', null, function(res) {
            couponRule.update({
                data : res.data,
                autoRow: true,
            });
            initValue();
        })
        var carriageRule = xmSelect.render({
            el: '#carriage-rule',
            language: 'zn',
            language: 'zh',
            prop : {
                value : 'id',
                children : 'child'
@@ -559,6 +539,23 @@
            });
        })
        febs.get(ctx + 'admin/goods/couponTreeSet', null, function(res) {
            couponRule.update({
                data : res.data,
                autoRow: true,
            });
        })
        febs.get(ctx + 'admin/goodsCategory/categoryTree', null, function(res) {
            category.update({
                data : res.data,
                autoRow: true,
            });
            initValue();
        })
        formSelects.render();
        var tableSkuData = [];
        var tableIns = table.render({