This commit is contained in:
六如
2024-11-19 22:27:51 +08:00
parent eefddbe5c0
commit 16a2ca7723
24 changed files with 762 additions and 54 deletions

View File

@@ -91,6 +91,12 @@
<version>${fastmybatis.version}</version> <version>${fastmybatis.version}</version>
</dependency> </dependency>
<dependency>
<groupId>net.oschina.durcframework</groupId>
<artifactId>http-helper</artifactId>
<version>1.0.0</version>
</dependency>
<dependency> <dependency>
<groupId>com.squareup.okhttp3</groupId> <groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId> <artifactId>okhttp</artifactId>

View File

@@ -99,7 +99,10 @@
<artifactId>spring-security-crypto</artifactId> <artifactId>spring-security-crypto</artifactId>
</dependency> </dependency>
<dependency>
<groupId>net.oschina.durcframework</groupId>
<artifactId>http-helper</artifactId>
</dependency>
<!-- test--> <!-- test-->

View File

@@ -1,5 +1,6 @@
package com.gitee.sop.adminbackend.common.enums; package com.gitee.sop.adminbackend.common.enums;
import com.gitee.sop.adminbackend.common.config.Configs;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Getter; import lombok.Getter;
@@ -11,11 +12,21 @@ import lombok.Getter;
public enum ConfigKeyEnum { public enum ConfigKeyEnum {
PASSWORD_SALT("admin.password-salt", ""), PASSWORD_SALT("admin.password-salt", ""),
JWT_TIMEOUT_DAYS("admin.jwt-timeout-days", "365"), JWT_TIMEOUT_DAYS("admin.jwt-timeout-days", "365"),
JWT_SECRET("admin.jwt.secret", ""); JWT_SECRET("admin.jwt.secret", ""),
TORNA_URL("admin.torna-url", ""),
OPEN_PROD_URL("admin.open-prod-url", ""),
OPEN_SANDBOX_URL("admin.open-sandbox-url", "");
private final String key; private final String key;
private final String defaultValue; private final String defaultValue;
public String getValue() {
return getValue(this.defaultValue);
}
public String getValue(String defaultValue) {
return Configs.getValue(this, defaultValue);
}
} }

View File

@@ -5,13 +5,11 @@ import com.gitee.sop.adminbackend.common.util.SystemUtil;
import com.gitee.sop.adminbackend.interceptor.LoginInterceptor; import com.gitee.sop.adminbackend.interceptor.LoginInterceptor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeansException; import org.springframework.beans.BeansException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware; import org.springframework.context.ApplicationContextAware;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
import org.springframework.web.cors.CorsConfiguration; import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource; import org.springframework.web.cors.UrlBasedCorsConfigurationSource;

View File

@@ -0,0 +1,41 @@
package com.gitee.sop.adminbackend.controller.doc;
import com.gitee.sop.adminbackend.common.resp.Result;
import com.gitee.sop.adminbackend.common.util.CopyUtil;
import com.gitee.sop.adminbackend.controller.doc.resp.DocSettingVO;
import com.gitee.sop.adminbackend.service.doc.DocService;
import com.gitee.sop.adminbackend.service.doc.dto.DocSettingDTO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* 文档设置
*
* @author 六如
*/
@RestController
@RequestMapping("/doc/setting")
public class DocSettingController {
@Autowired
private DocService docService;
@GetMapping("get")
public Result<DocSettingVO> get() {
DocSettingDTO docSetting = docService.getDocSetting();
DocSettingVO docSettingVO = CopyUtil.copyBean(docSetting, DocSettingVO::new);
return Result.ok(docSettingVO);
}
@PostMapping("save")
public Result<Integer> save(@Validated @RequestBody DocSettingDTO docSettingVO) {
docService.save(docSettingVO);
return Result.ok(1);
}
}

View File

@@ -0,0 +1,19 @@
package com.gitee.sop.adminbackend.controller.doc.resp;
import lombok.Data;
/**
* @author 六如
*/
@Data
public class DocSettingVO {
private String tornaServerAddr;
private String openProdUrl;
private String openSandboxUrl;
}

View File

@@ -1,22 +1,15 @@
package com.gitee.sop.adminbackend.controller.sys; package com.gitee.sop.adminbackend.controller.sys;
import com.gitee.fastmybatis.core.PageInfo;
import com.gitee.fastmybatis.core.query.LambdaQuery;
import com.gitee.fastmybatis.core.query.param.PageParam;
import com.gitee.sop.adminbackend.common.req.IdParam;
import com.gitee.sop.adminbackend.common.resp.Result; import com.gitee.sop.adminbackend.common.resp.Result;
import com.gitee.sop.adminbackend.controller.sys.req.ConfigSettingParam; import com.gitee.sop.adminbackend.controller.sys.req.ConfigSettingParam;
import com.gitee.sop.adminbackend.dao.entity.SysConfig;
import com.gitee.sop.adminbackend.service.sys.SysConfigService; import com.gitee.sop.adminbackend.service.sys.SysConfigService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
/** /**
* @author 六如 * @author 六如
*/ */
@@ -24,7 +17,7 @@ import javax.annotation.Resource;
@RequestMapping("sys/config") @RequestMapping("sys/config")
public class SysConfigController { public class SysConfigController {
@Resource @Autowired
private SysConfigService sysConfigService; private SysConfigService sysConfigService;
/** /**
@@ -34,10 +27,9 @@ public class SysConfigController {
*/ */
@PostMapping("/save") @PostMapping("/save")
public Result<Integer> add(@Validated @RequestBody ConfigSettingParam param) { public Result<Integer> add(@Validated @RequestBody ConfigSettingParam param) {
// 返回添加后的主键值 sysConfigService.save(param.getItems());
return Result.ok(1); return Result.ok(1);
} }
} }

View File

@@ -1,5 +1,6 @@
package com.gitee.sop.adminbackend.controller.sys.req; package com.gitee.sop.adminbackend.controller.sys.req;
import com.gitee.sop.adminbackend.service.sys.dto.SystemConfigDTO;
import lombok.Data; import lombok.Data;
import javax.validation.constraints.NotEmpty; import javax.validation.constraints.NotEmpty;
@@ -12,15 +13,7 @@ import java.util.List;
public class ConfigSettingParam { public class ConfigSettingParam {
@NotEmpty @NotEmpty
private List<Config> items; private List<SystemConfigDTO> items;
@Data
public static class Config {
private String configKey;
private String configValue;
private String remark;
}
} }

View File

@@ -0,0 +1,54 @@
package com.gitee.sop.adminbackend.controller.website;
import com.gitee.sop.adminbackend.common.annotation.NoToken;
import com.gitee.sop.adminbackend.common.resp.Result;
import com.gitee.sop.adminbackend.common.util.CopyUtil;
import com.gitee.sop.adminbackend.controller.website.resp.DocAppVO;
import com.gitee.sop.adminbackend.controller.website.resp.DocInfoTreeVO;
import com.gitee.sop.adminbackend.service.website.WebsiteService;
import com.gitee.sop.adminbackend.service.website.dto.DocAppDTO;
import com.gitee.sop.adminbackend.service.website.dto.DocInfoTreeDTO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/**
* 提供给网站的接口,不需要校验token
*
* @author 六如
*/
@RestController
@RequestMapping("website")
@NoToken
public class WebsiteController {
@Autowired
private WebsiteService websiteService;
/**
* 获取文档应用列表
*/
@GetMapping("listDocApp")
public Result<List<DocAppVO>> listDocApp() {
List<DocAppDTO> docAppDTOS = websiteService.listDocApp();
List<DocAppVO> docAppVOS = CopyUtil.deepCopyList(docAppDTOS, DocAppVO.class);
return Result.ok(docAppVOS);
}
/**
* 获取文档菜单树
*
* @param docAppId 应用id
*/
@GetMapping("listDocMenuTree")
public Result<List<DocInfoTreeVO>> listDocMenuTree(Long docAppId) {
List<DocInfoTreeDTO> docInfoTreeDTOS = websiteService.listDocMenuTree(docAppId);
List<DocInfoTreeVO> docAppVOS = CopyUtil.deepCopyList(docInfoTreeDTOS, DocInfoTreeVO.class);
return Result.ok(docAppVOS);
}
}

View File

@@ -0,0 +1,24 @@
package com.gitee.sop.adminbackend.controller.website.resp;
import lombok.Data;
/**
* 备注:文档应用
*
* @author 六如
*/
@Data
public class DocAppVO {
/**
* id
*/
private Long id;
/**
* 应用名称
*/
private String appName;
}

View File

@@ -0,0 +1,106 @@
package com.gitee.sop.adminbackend.controller.website.resp;
import com.gitee.fastmybatis.core.support.TreeNode;
import lombok.Data;
import java.time.LocalDateTime;
import java.util.List;
/**
* 备注:文档信息
*
* @author 六如
*/
@Data
public class DocInfoTreeVO implements TreeNode<DocInfoTreeVO, Long> {
/**
* id
*/
private Long id;
/**
* doc_app.id
*/
private Long docAppId;
/**
* 文档id
*/
private Long docId;
/**
* 文档code
*/
private String docCode;
/**
* 文档类型,1-dubbo,2-富文本,3-Markdown
*/
private Integer docType;
/**
* 来源类型,1-torna,2-自建
*/
private Integer sourceType;
/**
* 文档名称
*/
private String docName;
/**
* 描述
*/
private String description;
/**
* 是否分类
*/
private Integer isFolder;
/**
* 状态, 0-未发布,1-已发布
*/
private Integer isPublish;
/**
* 父节点id
*/
private Long parentId;
/**
* 添加时间
*/
private LocalDateTime addTime;
/**
* 修改时间
*/
private LocalDateTime updateTime;
/**
* 创建人id
*/
private Long addBy;
/**
* 修改人id
*/
private Long updateBy;
private List<DocInfoTreeVO> children;
@Override
public Long takeId() {
return id;
}
@Override
public Long takeParentId() {
return parentId;
}
}

View File

@@ -0,0 +1,58 @@
package com.gitee.sop.adminbackend.dao.entity;
import java.time.LocalDateTime;
import com.gitee.fastmybatis.annotation.Pk;
import com.gitee.fastmybatis.annotation.PkStrategy;
import com.gitee.fastmybatis.annotation.Table;
import lombok.Data;
/**
* 表名doc_app
* 备注:文档应用
*
* @author 六如
*/
@Table(name = "doc_app", pk = @Pk(name = "id", strategy = PkStrategy.INCREMENT))
@Data
public class DocApp {
/**
* id
*/
private Long id;
/**
* 应用名称
*/
private String appName;
/**
* Torna应用token
*/
private String token;
/**
* 添加时间
*/
private LocalDateTime addTime;
/**
* 修改时间
*/
private LocalDateTime updateTime;
/**
* 创建人id
*/
private Long addBy;
/**
* 修改人id
*/
private Long updateBy;
}

View File

@@ -0,0 +1,98 @@
package com.gitee.sop.adminbackend.dao.entity;
import java.time.LocalDateTime;
import com.gitee.fastmybatis.annotation.Pk;
import com.gitee.fastmybatis.annotation.PkStrategy;
import com.gitee.fastmybatis.annotation.Table;
import lombok.Data;
/**
* 表名doc_info
* 备注:文档信息
*
* @author 六如
*/
@Table(name = "doc_info", pk = @Pk(name = "id", strategy = PkStrategy.INCREMENT))
@Data
public class DocInfo {
/**
* id
*/
private Long id;
/**
* doc_app.id
*/
private Long docAppId;
/**
* 文档id
*/
private Long docId;
/**
* 文档code
*/
private String docCode;
/**
* 文档类型,1-dubbo,2-富文本,3-Markdown
*/
private Integer docType;
/**
* 来源类型,1-torna,2-自建
*/
private Integer sourceType;
/**
* 文档名称
*/
private String docName;
/**
* 描述
*/
private String description;
/**
* 是否分类
*/
private Integer isFolder;
/**
* 状态, 0-未发布,1-已发布
*/
private Integer isPublish;
/**
* 父节点id
*/
private Long parentId;
/**
* 添加时间
*/
private LocalDateTime addTime;
/**
* 修改时间
*/
private LocalDateTime updateTime;
/**
* 创建人id
*/
private Long addBy;
/**
* 修改人id
*/
private Long updateBy;
}

View File

@@ -0,0 +1,13 @@
package com.gitee.sop.adminbackend.dao.mapper;
import com.gitee.fastmybatis.core.mapper.BaseMapper;
import com.gitee.sop.adminbackend.dao.entity.DocApp;
import org.apache.ibatis.annotations.Mapper;
/**
* @author 六如
*/
@Mapper
public interface DocAppMapper extends BaseMapper<DocApp> {
}

View File

@@ -0,0 +1,13 @@
package com.gitee.sop.adminbackend.dao.mapper;
import com.gitee.fastmybatis.core.mapper.BaseMapper;
import com.gitee.sop.adminbackend.dao.entity.DocInfo;
import org.apache.ibatis.annotations.Mapper;
/**
* @author 六如
*/
@Mapper
public interface DocInfoMapper extends BaseMapper<DocInfo> {
}

View File

@@ -0,0 +1,39 @@
package com.gitee.sop.adminbackend.service.doc;
import com.gitee.sop.adminbackend.common.enums.ConfigKeyEnum;
import com.gitee.sop.adminbackend.service.doc.dto.DocSettingDTO;
import com.gitee.sop.adminbackend.service.sys.SysConfigService;
import com.gitee.sop.adminbackend.service.sys.dto.SystemConfigDTO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Collection;
/**
* @author 六如
*/
@Service
public class DocService {
@Autowired
private SysConfigService sysConfigService;
public DocSettingDTO getDocSetting() {
DocSettingDTO docSettingDTO = new DocSettingDTO();
docSettingDTO.setTornaServerAddr(ConfigKeyEnum.TORNA_URL.getValue());
docSettingDTO.setOpenProdUrl(ConfigKeyEnum.OPEN_PROD_URL.getValue());
docSettingDTO.setOpenSandboxUrl(ConfigKeyEnum.OPEN_SANDBOX_URL.getValue());
return docSettingDTO;
}
public void save(DocSettingDTO docSettingDTO) {
Collection<SystemConfigDTO> systemConfigDTOS = new ArrayList<>();
systemConfigDTOS.add(new SystemConfigDTO(ConfigKeyEnum.TORNA_URL.getKey(), docSettingDTO.getTornaServerAddr(), "Torna服务器地址"));
systemConfigDTOS.add(new SystemConfigDTO(ConfigKeyEnum.OPEN_PROD_URL.getKey(), docSettingDTO.getOpenProdUrl(), "开放平台线上地址"));
systemConfigDTOS.add(new SystemConfigDTO(ConfigKeyEnum.OPEN_SANDBOX_URL.getKey(), docSettingDTO.getOpenSandboxUrl(), "开放平台沙箱地址"));
sysConfigService.save(systemConfigDTOS);
}
}

View File

@@ -0,0 +1,20 @@
package com.gitee.sop.adminbackend.service.doc.dto;
import lombok.Data;
import org.hibernate.validator.constraints.Length;
/**
* @author 六如
*/
@Data
public class DocSettingDTO {
@Length(max = 256)
private String tornaServerAddr;
@Length(max = 256)
private String openProdUrl;
@Length(max = 256)
private String openSandboxUrl;
}

View File

@@ -1,11 +1,15 @@
package com.gitee.sop.adminbackend.service.sys.dto; package com.gitee.sop.adminbackend.service.sys.dto;
import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor;
/** /**
* @author tanghc * @author tanghc
*/ */
@Data @Data
@AllArgsConstructor
@NoArgsConstructor
public class SystemConfigDTO { public class SystemConfigDTO {
private String configKey; private String configKey;

View File

@@ -0,0 +1,38 @@
package com.gitee.sop.adminbackend.service.website;
import com.gitee.fastmybatis.core.util.TreeUtil;
import com.gitee.sop.adminbackend.common.util.CopyUtil;
import com.gitee.sop.adminbackend.dao.entity.DocApp;
import com.gitee.sop.adminbackend.dao.entity.DocInfo;
import com.gitee.sop.adminbackend.dao.mapper.DocAppMapper;
import com.gitee.sop.adminbackend.dao.mapper.DocInfoMapper;
import com.gitee.sop.adminbackend.service.website.dto.DocAppDTO;
import com.gitee.sop.adminbackend.service.website.dto.DocInfoTreeDTO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* @author 六如
*/
@Service
public class WebsiteService {
@Autowired
private DocAppMapper docAppMapper;
@Autowired
private DocInfoMapper docInfoMapper;
public List<DocAppDTO> listDocApp() {
List<DocApp> docApps = docAppMapper.listAll();
return CopyUtil.copyList(docApps, DocAppDTO::new);
}
public List<DocInfoTreeDTO> listDocMenuTree(Long docAppId) {
List<DocInfo> list = docInfoMapper.list(DocInfo::getDocAppId, docAppId);
List<DocInfoTreeDTO> treeList = CopyUtil.copyList(list, DocInfoTreeDTO::new);
return TreeUtil.convertTree(treeList, 0L);
}
}

View File

@@ -0,0 +1,56 @@
package com.gitee.sop.adminbackend.service.website.dto;
import java.time.LocalDateTime;
import com.gitee.fastmybatis.annotation.Pk;
import com.gitee.fastmybatis.annotation.PkStrategy;
import com.gitee.fastmybatis.annotation.Table;
import lombok.Data;
/**
* 备注:文档应用
*
* @author 六如
*/
@Data
public class DocAppDTO {
/**
* id
*/
private Long id;
/**
* 应用名称
*/
private String appName;
/**
* Torna应用token
*/
private String token;
/**
* 添加时间
*/
private LocalDateTime addTime;
/**
* 修改时间
*/
private LocalDateTime updateTime;
/**
* 创建人id
*/
private Long addBy;
/**
* 修改人id
*/
private Long updateBy;
}

View File

@@ -0,0 +1,106 @@
package com.gitee.sop.adminbackend.service.website.dto;
import com.gitee.fastmybatis.core.support.TreeNode;
import lombok.Data;
import java.time.LocalDateTime;
import java.util.List;
/**
* 备注:文档信息
*
* @author 六如
*/
@Data
public class DocInfoTreeDTO implements TreeNode<DocInfoTreeDTO, Long> {
/**
* id
*/
private Long id;
/**
* doc_app.id
*/
private Long docAppId;
/**
* 文档id
*/
private Long docId;
/**
* 文档code
*/
private String docCode;
/**
* 文档类型,1-dubbo,2-富文本,3-Markdown
*/
private Integer docType;
/**
* 来源类型,1-torna,2-自建
*/
private Integer sourceType;
/**
* 文档名称
*/
private String docName;
/**
* 描述
*/
private String description;
/**
* 是否分类
*/
private Integer isFolder;
/**
* 状态, 0-未发布,1-已发布
*/
private Integer isPublish;
/**
* 父节点id
*/
private Long parentId;
/**
* 添加时间
*/
private LocalDateTime addTime;
/**
* 修改时间
*/
private LocalDateTime updateTime;
/**
* 创建人id
*/
private Long addBy;
/**
* 修改人id
*/
private Long updateBy;
private List<DocInfoTreeDTO> children;
@Override
public Long takeId() {
return id;
}
@Override
public Long takeParentId() {
return parentId;
}
}

View File

@@ -0,0 +1,27 @@
import { createUrl, http } from "@/utils/http";
import type { PageResult, Result } from "@/model";
// 后端请求接口
const apiUrl: any = createUrl({
get: "/doc/setting/get",
save: "/doc/setting/save"
});
/**
* 接口管理
*/
export const api: any = {
/**
* 分页查询
*/
get(): Promise<PageResult> {
return http.get<PageResult, any>(apiUrl.get, {});
},
/**
* 新增
* @param data 表单内容
*/
save(data: object) {
return http.post<Result<any>, any>(apiUrl.save, { data });
}
};

View File

@@ -1,11 +1,6 @@
<script setup lang="ts"> <script setup lang="ts">
const a = 1;
</script> </script>
<template> <template>
<el-card>1</el-card>
</template> </template>
<style scoped lang="scss">
</style>

View File

@@ -1,31 +1,15 @@
import { ref } from "vue"; import { ref } from "vue";
import type { PlusColumn, FieldValues } from "plus-pro-components"; import type { PlusColumn, FieldValues } from "plus-pro-components";
import { api } from "@/api/docSetting";
import { ElMessage } from "element-plus";
export const state = ref<FieldValues>({ export const state = ref<FieldValues>({
status: "0", tornaServerAddr: "",
name: "", openProdUrl: "",
rate: 4, openSandboxUrl: ""
progress: 100,
switch: true,
time: new Date().toString(),
endTime: [],
img: "https://fuss10.elemecdn.com/e/5d/4a731a90594a4af544c0c25941171jpeg.jpeg"
}); });
export const rules = { export const rules = {};
tornaServerAddr: [
{
required: true,
message: "请输入名称"
}
],
openProdUrl: [
{
required: true,
message: "请输入标签"
}
]
};
export const columns: PlusColumn[] = [ export const columns: PlusColumn[] = [
{ {
@@ -55,5 +39,15 @@ export const columns: PlusColumn[] = [
]; ];
export const handleSubmit = (values: FieldValues) => { export const handleSubmit = (values: FieldValues) => {
console.log(values, "Submit"); api.save(values).then(() => {
ElMessage.success("保存成功");
});
}; };
const loadSetting = () => {
api.get().then(resp => {
state.value = resp.data;
});
};
loadSetting();