diff --git a/kernel-s-system/system-business-theme/src/main/java/cn/stylefeng/roses/kernel/system/modular/theme/entity/SysTheme.java b/kernel-s-system/system-business-theme/src/main/java/cn/stylefeng/roses/kernel/system/modular/theme/entity/SysTheme.java index 99ece0158..47c03001c 100644 --- a/kernel-s-system/system-business-theme/src/main/java/cn/stylefeng/roses/kernel/system/modular/theme/entity/SysTheme.java +++ b/kernel-s-system/system-business-theme/src/main/java/cn/stylefeng/roses/kernel/system/modular/theme/entity/SysTheme.java @@ -2,6 +2,7 @@ package cn.stylefeng.roses.kernel.system.modular.theme.entity; import cn.stylefeng.roses.kernel.db.api.pojo.entity.BaseEntity; import cn.stylefeng.roses.kernel.scanner.api.annotation.field.ChineseDescription; +import cn.stylefeng.roses.kernel.system.modular.theme.pojo.AntdvFileInfo; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; @@ -9,6 +10,8 @@ import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; import lombok.EqualsAndHashCode; +import java.util.Map; + /** * 系统主题表 * @@ -54,4 +57,15 @@ public class SysTheme extends BaseEntity { @TableField("status_flag") @ChineseDescription("启用状态") private Character statusFlag; + + /** + * 动态表单的key-value属性 + */ + private transient Map dynamicForm; + + /** + * 用于编辑界面渲染antdv的临时文件展示 + */ + private transient Map tempFileList; + } diff --git a/kernel-s-system/system-business-theme/src/main/java/cn/stylefeng/roses/kernel/system/modular/theme/enums/FieldTypeEnum.java b/kernel-s-system/system-business-theme/src/main/java/cn/stylefeng/roses/kernel/system/modular/theme/enums/FieldTypeEnum.java new file mode 100644 index 000000000..05b53788a --- /dev/null +++ b/kernel-s-system/system-business-theme/src/main/java/cn/stylefeng/roses/kernel/system/modular/theme/enums/FieldTypeEnum.java @@ -0,0 +1,57 @@ +/* + * Copyright [2020-2030] [https://www.stylefeng.cn] + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Guns采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点: + * + * 1.请不要删除和修改根目录下的LICENSE文件。 + * 2.请不要删除和修改Guns源码头部的版权声明。 + * 3.请保留源码和相关描述文件的项目出处,作者声明等。 + * 4.分发源码时候,请注明软件出处 https://gitee.com/stylefeng/guns + * 5.在修改包名,模块名称,项目代码等时,请注明软件出处 https://gitee.com/stylefeng/guns + * 6.若您的项目无法满足以上几点,可申请商业授权 + */ +package cn.stylefeng.roses.kernel.system.modular.theme.enums; + +import lombok.Getter; + +/** + * 字段类型枚举 + * + * @author fengshuonan + * @date 2022/1/1 22:29 + */ +@Getter +public enum FieldTypeEnum { + + /** + * 字符串类型 + */ + STRING("string", "字符串类型"), + + /** + * 文件类型 + */ + FILE("file", "文件类型"); + + private final String code; + + private final String message; + + FieldTypeEnum(String code, String message) { + this.code = code; + this.message = message; + } + +} diff --git a/kernel-s-system/system-business-theme/src/main/java/cn/stylefeng/roses/kernel/system/modular/theme/pojo/AntdvFileInfo.java b/kernel-s-system/system-business-theme/src/main/java/cn/stylefeng/roses/kernel/system/modular/theme/pojo/AntdvFileInfo.java new file mode 100644 index 000000000..f2e2ba667 --- /dev/null +++ b/kernel-s-system/system-business-theme/src/main/java/cn/stylefeng/roses/kernel/system/modular/theme/pojo/AntdvFileInfo.java @@ -0,0 +1,49 @@ +package cn.stylefeng.roses.kernel.system.modular.theme.pojo; + +import lombok.Data; + +/** + * 前端antdv组件需要的文件信息封装 + * + * @author fengshuonan + * @date 2022/1/1 22:14 + */ +@Data +public class AntdvFileInfo { + + /** + * 文件唯一标识 + */ + private String uid; + + /** + * 文件名 + */ + private String name; + + /** + * 状态有:uploading done error removed + */ + private String status; + + /** + * 服务端响应内容 + */ + private String response = "{\"status\": \"success\"}"; + + /** + * 下载链接额外的 HTML 属性 + */ + private String linkProps; + + /** + * XMLHttpRequest Header + */ + private String xhr; + + /** + * 文件访问的url + */ + private String thumbUrl; + +} diff --git a/kernel-s-system/system-business-theme/src/main/java/cn/stylefeng/roses/kernel/system/modular/theme/service/SysThemeTemplateFieldService.java b/kernel-s-system/system-business-theme/src/main/java/cn/stylefeng/roses/kernel/system/modular/theme/service/SysThemeTemplateFieldService.java index e059730fd..ce782e4c9 100644 --- a/kernel-s-system/system-business-theme/src/main/java/cn/stylefeng/roses/kernel/system/modular/theme/service/SysThemeTemplateFieldService.java +++ b/kernel-s-system/system-business-theme/src/main/java/cn/stylefeng/roses/kernel/system/modular/theme/service/SysThemeTemplateFieldService.java @@ -72,4 +72,13 @@ public interface SysThemeTemplateFieldService extends IService findNotRelList(SysThemeTemplateFieldRequest sysThemeTemplateFieldRequest); + + /** + * 根据字段名,获取该属性是否为文件类型 + * + * @author fengshuonan + * @date 2022/1/1 22:24 + */ + boolean getKeyFileFlag(String code); + } diff --git a/kernel-s-system/system-business-theme/src/main/java/cn/stylefeng/roses/kernel/system/modular/theme/service/impl/SysThemeServiceImpl.java b/kernel-s-system/system-business-theme/src/main/java/cn/stylefeng/roses/kernel/system/modular/theme/service/impl/SysThemeServiceImpl.java index 9d8bd117d..4437b6f4f 100644 --- a/kernel-s-system/system-business-theme/src/main/java/cn/stylefeng/roses/kernel/system/modular/theme/service/impl/SysThemeServiceImpl.java +++ b/kernel-s-system/system-business-theme/src/main/java/cn/stylefeng/roses/kernel/system/modular/theme/service/impl/SysThemeServiceImpl.java @@ -6,7 +6,9 @@ import cn.hutool.core.util.StrUtil; import cn.stylefeng.roses.kernel.db.api.factory.PageFactory; import cn.stylefeng.roses.kernel.db.api.factory.PageResultFactory; import cn.stylefeng.roses.kernel.db.api.pojo.page.PageResult; +import cn.stylefeng.roses.kernel.file.api.FileInfoApi; import cn.stylefeng.roses.kernel.file.api.pojo.request.SysFileInfoRequest; +import cn.stylefeng.roses.kernel.file.api.pojo.response.SysFileInfoResponse; import cn.stylefeng.roses.kernel.file.modular.service.SysFileInfoService; import cn.stylefeng.roses.kernel.rule.enums.YesOrNotEnum; import cn.stylefeng.roses.kernel.system.api.ThemeServiceApi; @@ -18,17 +20,21 @@ import cn.stylefeng.roses.kernel.system.modular.theme.entity.SysTheme; import cn.stylefeng.roses.kernel.system.modular.theme.entity.SysThemeTemplate; import cn.stylefeng.roses.kernel.system.modular.theme.entity.SysThemeTemplateField; import cn.stylefeng.roses.kernel.system.modular.theme.mapper.SysThemeMapper; +import cn.stylefeng.roses.kernel.system.modular.theme.pojo.AntdvFileInfo; import cn.stylefeng.roses.kernel.system.modular.theme.service.SysThemeService; import cn.stylefeng.roses.kernel.system.modular.theme.service.SysThemeTemplateFieldService; import cn.stylefeng.roses.kernel.system.modular.theme.service.SysThemeTemplateService; import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @@ -51,6 +57,9 @@ public class SysThemeServiceImpl extends ServiceImpl i @Resource private SysFileInfoService sysFileInfoService; + @Resource + private FileInfoApi fileInfoApi; + @Override public void add(SysThemeRequest sysThemeRequest) { // 查询模板状态 @@ -147,7 +156,37 @@ public class SysThemeServiceImpl extends ServiceImpl i @Override public SysTheme detail(SysThemeRequest sysThemeRequest) { - return this.querySysThemeById(sysThemeRequest); + SysTheme sysTheme = this.querySysThemeById(sysThemeRequest); + + // 设置动态属性表单 + String themeValueJson = sysTheme.getThemeValue(); + JSONObject jsonObject = JSON.parseObject(themeValueJson); + sysTheme.setDynamicForm(jsonObject.getInnerMap()); + + // 遍历表单属性,找到所有文件类型的,组装文件的图片和名称等信息 + HashMap tempFileList = new HashMap<>(); + for (Map.Entry keyValues : jsonObject.entrySet()) { + String key = keyValues.getKey(); + String value = jsonObject.getString(key); + // 判断是否是文件类型 + boolean keyFileFlag = sysThemeTemplateFieldService.getKeyFileFlag(key); + if (keyFileFlag) { + AntdvFileInfo antdvFileInfo = new AntdvFileInfo(); + // 设置唯一id + antdvFileInfo.setUid(IdWorker.getIdStr()); + // 设置文件名称 + SysFileInfoResponse fileInfoWithoutContent = fileInfoApi.getFileInfoWithoutContent(Long.valueOf(value)); + antdvFileInfo.setName(fileInfoWithoutContent.getFileOriginName()); + // 设置文件访问url + String fileAuthUrl = fileInfoApi.getFileAuthUrl(Long.valueOf(value)); + antdvFileInfo.setThumbUrl(fileAuthUrl); + tempFileList.put(key, new AntdvFileInfo[]{antdvFileInfo}); + } + } + + // 设置临时文件的展示 + sysTheme.setTempFileList(tempFileList); + return sysTheme; } @Override diff --git a/kernel-s-system/system-business-theme/src/main/java/cn/stylefeng/roses/kernel/system/modular/theme/service/impl/SysThemeTemplateFieldServiceImpl.java b/kernel-s-system/system-business-theme/src/main/java/cn/stylefeng/roses/kernel/system/modular/theme/service/impl/SysThemeTemplateFieldServiceImpl.java index e3fcb8aa7..21fd4e54a 100644 --- a/kernel-s-system/system-business-theme/src/main/java/cn/stylefeng/roses/kernel/system/modular/theme/service/impl/SysThemeTemplateFieldServiceImpl.java +++ b/kernel-s-system/system-business-theme/src/main/java/cn/stylefeng/roses/kernel/system/modular/theme/service/impl/SysThemeTemplateFieldServiceImpl.java @@ -12,6 +12,7 @@ import cn.stylefeng.roses.kernel.system.api.exception.enums.theme.SysThemeTempla import cn.stylefeng.roses.kernel.system.api.pojo.theme.SysThemeTemplateFieldRequest; import cn.stylefeng.roses.kernel.system.modular.theme.entity.SysThemeTemplateField; import cn.stylefeng.roses.kernel.system.modular.theme.entity.SysThemeTemplateRel; +import cn.stylefeng.roses.kernel.system.modular.theme.enums.FieldTypeEnum; import cn.stylefeng.roses.kernel.system.modular.theme.mapper.SysThemeTemplateFieldMapper; import cn.stylefeng.roses.kernel.system.modular.theme.service.SysThemeTemplateFieldService; import cn.stylefeng.roses.kernel.system.modular.theme.service.SysThemeTemplateRelService; @@ -163,6 +164,20 @@ public class SysThemeTemplateFieldServiceImpl extends ServiceImpl wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(SysThemeTemplateField::getFieldCode, code); + wrapper.select(SysThemeTemplateField::getFieldType); + + SysThemeTemplateField sysThemeTemplateField = this.getOne(wrapper, false); + if (sysThemeTemplateField == null) { + return false; + } + + return FieldTypeEnum.FILE.getCode().equals(sysThemeTemplateField.getFieldType()); + } + /** * 获取主题模板属性 *