Administrator
2025-08-20 9c5ebf3ef8b62884007b7f241a863db4047dbf1b
feat(ai): 为产品亮点添加小图标功能

- 在产品亮点添加和信息页面增加小图标上传功能
- 添加 feedImg 字段用于存储小图标链接
- 实现小图标上传接口和页面展示逻辑
4 files modified
94 ■■■■■ changed files
src/main/java/cc/mrbird/febs/ai/entity/AiProductPoint.java 5 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/ai/service/impl/AiProductPointServiceImpl.java 2 ●●●●● patch | view | raw | blame | history
src/main/resources/templates/febs/views/modules/ai/productPoint/add.html 41 ●●●●● patch | view | raw | blame | history
src/main/resources/templates/febs/views/modules/ai/productPoint/info.html 46 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/ai/entity/AiProductPoint.java
@@ -34,6 +34,11 @@
    private String feedId;
    /**
     * 视频封面
     */
    private String feedImg;
    /**
     * 标题
     */
    private String title;
src/main/java/cc/mrbird/febs/ai/service/impl/AiProductPointServiceImpl.java
@@ -56,6 +56,7 @@
        entity.setIsNormal(dto.getIsNormal() );
        entity.setFinderUserName(dto.getFinderUserName());
        entity.setFeedId(dto.getFeedId());
        entity.setFeedImg(dto.getFeedImg());
        entity.setTitle(dto.getTitle());
        entity.setDescription(dto.getDescription());
        entity.setCreatedTime(new Date());
@@ -74,6 +75,7 @@
                            .set(AiProductPoint::getFinderUserName, dto.getFinderUserName())
                            .set(AiProductPoint::getFeedId, dto.getFeedId())
                            .set(AiProductPoint::getTitle, dto.getTitle())
                            .set(AiProductPoint::getFeedImg, dto.getFeedImg())
                            .set(AiProductPoint::getDescription, dto.getDescription())
                            .set(AiProductPoint::getUpdatedTime, new Date())
                            .eq(AiProductPoint::getId, id)
src/main/resources/templates/febs/views/modules/ai/productPoint/add.html
@@ -37,6 +37,30 @@
                                        </div>
                                    </div>
                                </div>
                                <div class="layui-form-item febs-hide tc-set">
                                    <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 class="layui-upload">
                                                    <button type="button" class="layui-btn layui-btn-normal layui-btn" id="productPointImageUploadButton">上传</button>
                                                    <blockquote class="layui-elem-quote layui-quote-nm" style="margin-top: 10px;">
                                                        <div class="layui-upload-list" id="productPointImageUpload"></div>
                                                    </blockquote>
                                                </div>
                                            </div>
                                        </div>
                                    </div>
                                    <div class="layui-row layui-col-space10 layui-form-item febs-hide">
                                        <div class="layui-col-lg6">
                                            <label class="layui-form-label">小图标链接:</label>
                                            <div class="layui-input-block">
                                                <input type="text" id="feedImg" lay-verify="required" name="feedImg" autocomplete="off" class="layui-input" readonly>
                                            </div>
                                        </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>
@@ -130,6 +154,23 @@
            })
        });
        //图片上传
        upload.render({
            elem: '#productPointImageUploadButton'
            ,url: ctx + 'admin/goods/uploadFileBase64' //改成您自己的上传接口
            ,accept: 'file' //普通文件
            ,size: 10240 //限制文件大小,单位 KB
            ,before: function(obj){
                //预读本地文件示例,不支持ie8
                obj.preview(function(index, file, result){
                    $('#productPointImageUpload').html('<img src="'+ result +'" alt="'+ file.name +'" class="layui-upload-img single-image" style="width: 130px">')
                });
            }
            ,done: function(res){
                $("#feedImg").val(res.data.src);
            }
        });
        form.on('submit(productPoint-add-form-submit)', function (data) {
            data.field.description = editor.txt.html();
            $.ajax({
src/main/resources/templates/febs/views/modules/ai/productPoint/info.html
@@ -40,6 +40,31 @@
                                        </div>
                                    </div>
                                </div>
                                <div class="layui-form-item febs-hide tc-set">
                                    <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 class="layui-upload">
                                                    <button type="button" class="layui-btn layui-btn-normal layui-btn" id="productPointImageUploadButton">上传</button>
                                                    <blockquote class="layui-elem-quote layui-quote-nm" style="margin-top: 10px;">
                                                        <div class="layui-upload-list" id="productPointImageUpload"></div>
                                                    </blockquote>
                                                </div>
                                            </div>
                                        </div>
                                    </div>
                                    <div class="layui-row layui-col-space10 layui-form-item febs-hide">
                                        <div class="layui-col-lg6">
                                            <label class="layui-form-label">小图标链接:</label>
                                            <div class="layui-input-block">
                                                <input type="text" id="feedImg" lay-verify="required" name="feedImg" autocomplete="off" class="layui-input" readonly>
                                            </div>
                                        </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>
@@ -138,6 +163,23 @@
            })
        });
        //图片上传
        upload.render({
            elem: '#productPointImageUploadButton'
            ,url: ctx + 'admin/goods/uploadFileBase64' //改成您自己的上传接口
            ,accept: 'file' //普通文件
            ,size: 10240 //限制文件大小,单位 KB
            ,before: function(obj){
                //预读本地文件示例,不支持ie8
                obj.preview(function(index, file, result){
                    $('#productPointImageUpload').html('<img src="'+ result +'" alt="'+ file.name +'" class="layui-upload-img single-image" style="width: 130px">')
                });
            }
            ,done: function(res){
                $("#feedImg").val(res.data.src);
            }
        });
        setTimeout(() => {
            initProductPointInfo();
        }, 500);
@@ -150,6 +192,10 @@
                "feedId": aiProductPoint.feedId,
            });
            $('#productPointImageUpload').append('<img src="' + aiProductPoint.feedImg + '" alt="" class="layui-upload-img single-image" style="width: 130px">');
            $("#feedImg").val(aiProductPoint.feedImg);
            editor.txt.html(aiProductPoint.description);
            if (aiProductPoint.isNormal == 2) {