diff --git a/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/common/enums/YesOrNoEnum.java b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/common/enums/YesOrNoEnum.java index 3b2b0569..502da330 100644 --- a/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/common/enums/YesOrNoEnum.java +++ b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/common/enums/YesOrNoEnum.java @@ -24,7 +24,16 @@ public enum YesOrNoEnum implements IntEnum { return Objects.equals(value.intValue(), YES.value) ? YES : NO; } + public static boolean yes(Number value) { + return of(value) == YES; + } + public static YesOrNoEnum of(Boolean value) { return Objects.equals(value, true) ? YES : NO; } + + @Override + public String toString() { + return value.toString(); + } } diff --git a/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/controller/doc/DocController.java b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/controller/doc/DocController.java index 765893fe..0e7beb3e 100644 --- a/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/controller/doc/DocController.java +++ b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/controller/doc/DocController.java @@ -1,15 +1,17 @@ package com.gitee.sop.adminbackend.controller.doc; +import com.gitee.sop.adminbackend.common.req.IdParam; import com.gitee.sop.adminbackend.common.resp.Result; import com.gitee.sop.adminbackend.common.util.CopyUtil; import com.gitee.sop.adminbackend.controller.doc.param.DocAppAddParam; import com.gitee.sop.adminbackend.controller.doc.param.DocInfoUpdateParam; import com.gitee.sop.adminbackend.controller.doc.vo.DocAppVO; import com.gitee.sop.adminbackend.controller.doc.vo.DocInfoTreeVO; -import com.gitee.sop.adminbackend.service.doc.DocService; +import com.gitee.sop.adminbackend.service.doc.DocAppService; +import com.gitee.sop.adminbackend.service.doc.DocInfoService; import com.gitee.sop.adminbackend.service.doc.dto.DocAppDTO; -import com.gitee.sop.adminbackend.service.doc.dto.DocInfoTreeDTO; import com.gitee.sop.adminbackend.service.doc.dto.DocInfoPublishUpdateDTO; +import com.gitee.sop.adminbackend.service.doc.dto.DocInfoTreeDTO; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.GetMapping; @@ -29,31 +31,39 @@ import java.util.List; public class DocController { @Autowired - private DocService docService; + private DocInfoService docInfoService; + @Autowired + private DocAppService docAppService; @GetMapping("app/list") public Result> listApp() { - List docAppDTOS = docService.listDocApp(); + List docAppDTOS = docAppService.listDocApp(); List docAppVOS = CopyUtil.copyList(docAppDTOS, DocAppVO::new); return Result.ok(docAppVOS); } @PostMapping("app/add") public Result addApp(@Validated @RequestBody DocAppAddParam param) { - Long docAppId = docService.addDocApp(param.getTornaToken()); + Long docAppId = docAppService.addDocApp(param.getTornaToken()); return Result.ok(docAppId); } + @PostMapping("app/syncDoc") + public Result syncDocInfo(@Validated @RequestBody IdParam param) { + docInfoService.syncDocInfo(param.getId()); + return Result.ok(1); + } + @GetMapping("info/tree") public Result> docTree(@RequestParam Long docAppId) { - List docInfoTreeDTOS = docService.listDocTree(docAppId); + List docInfoTreeDTOS = docInfoService.listDocTree(docAppId); List docInfoTreeVOS = CopyUtil.deepCopyList(docInfoTreeDTOS, DocInfoTreeVO.class); return Result.ok(docInfoTreeVOS); } @PostMapping("info/publish") public Result publish(@Validated @RequestBody DocInfoUpdateParam param) { - int cnt = docService.publish(CopyUtil.copyBean(param, DocInfoPublishUpdateDTO::new)); + int cnt = docInfoService.publish(CopyUtil.copyBean(param, DocInfoPublishUpdateDTO::new)); return Result.ok(cnt); } diff --git a/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/controller/doc/DocSettingController.java b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/controller/doc/DocSettingController.java index a50cadff..c7d39b10 100644 --- a/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/controller/doc/DocSettingController.java +++ b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/controller/doc/DocSettingController.java @@ -3,7 +3,7 @@ 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.vo.DocSettingVO; -import com.gitee.sop.adminbackend.service.doc.DocService; +import com.gitee.sop.adminbackend.service.doc.DocSettingService; import com.gitee.sop.adminbackend.service.doc.dto.DocSettingDTO; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.annotation.Validated; @@ -23,18 +23,18 @@ import org.springframework.web.bind.annotation.RestController; public class DocSettingController { @Autowired - private DocService docService; + private DocSettingService docSettingService; @GetMapping("get") public Result get() { - DocSettingDTO docSetting = docService.getDocSetting(); + DocSettingDTO docSetting = docSettingService.getDocSetting(); DocSettingVO docSettingVO = CopyUtil.copyBean(docSetting, DocSettingVO::new); return Result.ok(docSettingVO); } @PostMapping("save") public Result save(@Validated @RequestBody DocSettingDTO docSettingVO) { - docService.save(docSettingVO); + docSettingService.save(docSettingVO); return Result.ok(1); } diff --git a/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/controller/doc/vo/DocInfoTreeVO.java b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/controller/doc/vo/DocInfoTreeVO.java index 937404c3..2e9c1a16 100644 --- a/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/controller/doc/vo/DocInfoTreeVO.java +++ b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/controller/doc/vo/DocInfoTreeVO.java @@ -57,6 +57,11 @@ public class DocInfoTreeVO implements TreeNode { */ private String docName; + /** + * 版本号 + */ + private String docVersion; + /** * 描述 */ @@ -67,35 +72,11 @@ public class DocInfoTreeVO implements TreeNode { */ 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 children; diff --git a/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/controller/website/WebsiteController.java b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/controller/website/WebsiteController.java index 8a49909c..4cf2170d 100644 --- a/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/controller/website/WebsiteController.java +++ b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/controller/website/WebsiteController.java @@ -5,9 +5,10 @@ import com.gitee.sop.adminbackend.common.resp.Result; import com.gitee.sop.adminbackend.common.util.CopyUtil; import com.gitee.sop.adminbackend.controller.doc.vo.DocAppVO; import com.gitee.sop.adminbackend.controller.doc.vo.DocInfoTreeVO; -import com.gitee.sop.adminbackend.service.website.WebsiteService; import com.gitee.sop.adminbackend.service.doc.dto.DocAppDTO; import com.gitee.sop.adminbackend.service.doc.dto.DocInfoTreeDTO; +import com.gitee.sop.adminbackend.service.doc.dto.DocInfoViewDTO; +import com.gitee.sop.adminbackend.service.website.WebsiteService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; @@ -28,11 +29,10 @@ public class WebsiteController { @Autowired private WebsiteService websiteService; - /** * 获取文档应用列表 */ - @GetMapping("listDocApp") + @GetMapping("docapp/list") public Result> listDocApp() { List docAppDTOS = websiteService.listDocApp(); List docAppVOS = CopyUtil.deepCopyList(docAppDTOS, DocAppVO.class); @@ -44,11 +44,22 @@ public class WebsiteController { * * @param docAppId 应用id */ - @GetMapping("listDocMenuTree") + @GetMapping("docinfo/tree") public Result> listDocMenuTree(Long docAppId) { List docInfoTreeDTOS = websiteService.listDocMenuTree(docAppId); List docAppVOS = CopyUtil.deepCopyList(docInfoTreeDTOS, DocInfoTreeVO.class); return Result.ok(docAppVOS); } + /** + * 获取文档详情 + * + * @param id id + */ + @GetMapping("docinfo/detail") + public Result getDocDetail(Long id) { + DocInfoViewDTO docDetail = websiteService.getDocDetail(id); + return Result.ok(docDetail); + } + } diff --git a/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/dao/entity/DocApp.java b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/dao/entity/DocApp.java index 8636f696..682e3c7d 100644 --- a/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/dao/entity/DocApp.java +++ b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/dao/entity/DocApp.java @@ -34,6 +34,11 @@ public class DocApp { */ private String token; + /** + * 状态, 0-未发布,1-已发布 + */ + private Integer isPublish; + /** * 添加时间 */ diff --git a/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/dao/mapper/DocAppMapper.java b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/dao/mapper/DocAppMapper.java index bf4c31cd..70763da6 100644 --- a/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/dao/mapper/DocAppMapper.java +++ b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/dao/mapper/DocAppMapper.java @@ -9,5 +9,9 @@ import org.apache.ibatis.annotations.Mapper; */ @Mapper public interface DocAppMapper extends BaseMapper { - + default String getToken(Long id) { + return this.query() + .eq(DocApp::getId, id) + .getValue(DocApp::getToken); + } } diff --git a/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/service/doc/DocAppService.java b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/service/doc/DocAppService.java index 9be29d2d..b0b5f468 100644 --- a/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/service/doc/DocAppService.java +++ b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/service/doc/DocAppService.java @@ -1,10 +1,16 @@ package com.gitee.sop.adminbackend.service.doc; import com.gitee.fastmybatis.core.support.LambdaService; +import com.gitee.sop.adminbackend.common.util.CopyUtil; import com.gitee.sop.adminbackend.dao.entity.DocApp; import com.gitee.sop.adminbackend.dao.mapper.DocAppMapper; +import com.gitee.sop.adminbackend.service.doc.dto.DocAppDTO; +import com.gitee.sop.adminbackend.service.doc.dto.torna.TornaModuleDTO; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.util.List; + /** * @author 六如 @@ -12,5 +18,32 @@ import org.springframework.stereotype.Service; @Service public class DocAppService implements LambdaService { + @Autowired + private TornaClient tornaClient; + + @Autowired + private DocInfoService docInfoService; + + public Long addDocApp(String token) { + TornaModuleDTO tornaModuleDTO = tornaClient.execute("module.get", null, token, TornaModuleDTO.class); + DocApp docApp = this.get(DocApp::getToken, token); + if (docApp == null) { + docApp = new DocApp(); + docApp.setAppName(tornaModuleDTO.getName()); + docApp.setToken(token); + this.save(docApp); + } else { + docApp.setAppName(tornaModuleDTO.getName()); + this.update(docApp); + } + // 同步文档 + docInfoService.syncDocInfo(docApp); + return docApp.getId(); + } + + public List listDocApp() { + List docApps = this.listAll(); + return CopyUtil.copyList(docApps, DocAppDTO::new); + } } diff --git a/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/service/doc/DocInfoService.java b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/service/doc/DocInfoService.java index 28f6d702..945e3416 100644 --- a/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/service/doc/DocInfoService.java +++ b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/service/doc/DocInfoService.java @@ -1,14 +1,22 @@ package com.gitee.sop.adminbackend.service.doc; import com.gitee.fastmybatis.core.support.LambdaService; +import com.gitee.fastmybatis.core.util.TreeUtil; import com.gitee.sop.adminbackend.common.enums.DocSourceTypeEnum; import com.gitee.sop.adminbackend.common.enums.YesOrNoEnum; +import com.gitee.sop.adminbackend.common.exception.BizException; +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.doc.dto.TornaDocDTO; -import com.gitee.sop.adminbackend.service.doc.dto.TornaDocInfoDTO; +import com.gitee.sop.adminbackend.service.doc.dto.DocInfoPublishUpdateDTO; +import com.gitee.sop.adminbackend.service.doc.dto.DocInfoTreeDTO; +import com.gitee.sop.adminbackend.service.doc.dto.torna.DocIdParam; +import com.gitee.sop.adminbackend.service.doc.dto.torna.TornaDocDTO; +import com.gitee.sop.adminbackend.service.doc.dto.torna.TornaDocInfoDTO; +import com.gitee.sop.adminbackend.service.doc.dto.torna.TornaDocInfoViewDTO; +import com.gitee.sop.adminbackend.service.doc.dto.torna.TornaDocParamDTO; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; @@ -16,6 +24,7 @@ import org.springframework.util.CollectionUtils; import java.util.ArrayList; import java.util.List; import java.util.Map; +import java.util.Set; import java.util.function.Function; import java.util.stream.Collectors; @@ -37,11 +46,16 @@ public class DocInfoService implements LambdaService { } public void syncDocInfo(Long docAppId) { - Map nameVersionMap = this.list(DocInfo::getDocAppId, docAppId) + DocApp docApp = docAppMapper.getById(docAppId); + this.syncDocInfo(docApp); + } + + public void syncDocInfo(DocApp docApp) { + Long docAppId = docApp.getId(); + Map nameVersionMap = this.list(DocInfo::getDocAppId, docAppId) .stream() .collect(Collectors.toMap(docInfo -> docInfo.getDocName() + ":" + docInfo.getDocVersion(), Function.identity(), (v1, v2) -> v2)); - DocApp docApp = docAppMapper.getById(docAppId); String token = docApp.getToken(); // add doc TornaDocDTO tornaDocDTO = tornaClient.execute("doc.list", null, token, TornaDocDTO.class); @@ -50,7 +64,7 @@ public class DocInfoService implements LambdaService { if (!CollectionUtils.isEmpty(docList)) { List updateList = new ArrayList<>(); for (TornaDocInfoDTO tornaDocInfoDTO : docList) { - String key = tornaDocInfoDTO.getUrl() + ":" + tornaDocInfoDTO.getVersion(); + String key = buildKey(tornaDocInfoDTO); DocInfo docInfo = nameVersionMap.get(key); // 需要修改的文档 if (docInfo != null) { @@ -75,7 +89,7 @@ public class DocInfoService implements LambdaService { // 新增的文档 List saveList = docList.stream() .filter(tornaDocInfoDTO -> { - String key = tornaDocInfoDTO.getUrl() + ":" + tornaDocInfoDTO.getVersion(); + String key = buildKey(tornaDocInfoDTO); return !nameVersionMap.containsKey(key); }) .map(tornaDocInfoDTO -> { @@ -87,14 +101,15 @@ public class DocInfoService implements LambdaService { docInfo.setDocType(tornaDocInfoDTO.getType().intValue()); docInfo.setSourceType(DocSourceTypeEnum.TORNA.getValue()); if (YesOrNoEnum.of(tornaDocInfoDTO.getIsFolder()) == YesOrNoEnum.YES) { + docInfo.setIsPublish(YesOrNoEnum.YES.getValue()); docInfo.setDocName(tornaDocInfoDTO.getName()); } else { + docInfo.setIsPublish(YesOrNoEnum.NO.getValue()); docInfo.setDocName(tornaDocInfoDTO.getUrl()); } docInfo.setDocVersion(tornaDocInfoDTO.getVersion()); docInfo.setDescription(tornaDocInfoDTO.getDescription()); docInfo.setIsFolder(tornaDocInfoDTO.getIsFolder().intValue()); - docInfo.setIsPublish(YesOrNoEnum.NO.getValue()); docInfo.setParentId(tornaDocInfoDTO.getParentId()); return docInfo; }) @@ -103,5 +118,66 @@ public class DocInfoService implements LambdaService { } } + private String buildKey(TornaDocInfoDTO tornaDocInfoDTO) { + return YesOrNoEnum.yes(tornaDocInfoDTO.getIsFolder()) ? + tornaDocInfoDTO.getName() + ":" + tornaDocInfoDTO.getVersion() + : tornaDocInfoDTO.getUrl() + ":" + tornaDocInfoDTO.getVersion(); + } + + public List listDocTree(Long docAppId) { + List list = this.list(DocInfo::getDocAppId, docAppId); + if (CollectionUtils.isEmpty(list)) { + return new ArrayList<>(0); + } + List docInfoTreeDTOS = CopyUtil.copyList(list, DocInfoTreeDTO::new); + return TreeUtil.convertTree(docInfoTreeDTOS, 0L); + } + + public int publish(DocInfoPublishUpdateDTO docInfoUpdateDTO) { + DocInfo docInfo = this.getById(docInfoUpdateDTO.getId()); + // 如果是文件夹,发布下面所有的文档 + if (YesOrNoEnum.of(docInfo.getIsFolder()) == YesOrNoEnum.YES) { + List children = this.listChildDoc(docInfo.getDocId()); + Set ids = children.stream().map(DocInfo::getId).collect(Collectors.toSet()); + return this.query() + .in(DocInfo::getId, ids) + .set(DocInfo::getIsPublish, docInfoUpdateDTO.getIsPublish()) + .update(); + } else { + // 发布单个文档 + return this.query() + .eq(DocInfo::getId, docInfoUpdateDTO.getId()) + .set(DocInfo::getIsPublish, docInfoUpdateDTO.getIsPublish()) + .update(); + } + } + + + public TornaDocInfoViewDTO getDocDetail(Long id) { + DocInfo docInfo = this.getById(id); + if (docInfo == null) { + throw new BizException("文档不存在"); + } + // 获取torna文档信息 + String token = docAppMapper.getToken(docInfo.getDocAppId()); + TornaDocInfoViewDTO tornaDocInfoViewDTO = tornaClient.execute( + "doc.detail", + new DocIdParam(docInfo.getDocId()), + token, + TornaDocInfoViewDTO.class + ); + convertTree(tornaDocInfoViewDTO); + return tornaDocInfoViewDTO; + } + + private void convertTree(TornaDocInfoViewDTO tornaDocInfoViewDTO) { + List requestParams = tornaDocInfoViewDTO.getRequestParams(); + List responseParams = tornaDocInfoViewDTO.getResponseParams(); + List requestTree = TreeUtil.convertTree(requestParams, 0L); + List responseTree = TreeUtil.convertTree(responseParams, 0L); + + tornaDocInfoViewDTO.setRequestParams(requestTree); + tornaDocInfoViewDTO.setResponseParams(responseTree); + } } diff --git a/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/service/doc/DocService.java b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/service/doc/DocService.java deleted file mode 100644 index aadbcf9e..00000000 --- a/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/service/doc/DocService.java +++ /dev/null @@ -1,111 +0,0 @@ -package com.gitee.sop.adminbackend.service.doc; - -import com.gitee.fastmybatis.core.util.TreeUtil; -import com.gitee.sop.adminbackend.common.enums.ConfigKeyEnum; -import com.gitee.sop.adminbackend.common.enums.YesOrNoEnum; -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.service.doc.dto.DocAppDTO; -import com.gitee.sop.adminbackend.service.doc.dto.DocInfoPublishUpdateDTO; -import com.gitee.sop.adminbackend.service.doc.dto.DocInfoTreeDTO; -import com.gitee.sop.adminbackend.service.doc.dto.DocSettingDTO; -import com.gitee.sop.adminbackend.service.doc.dto.TornaModuleDTO; -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 org.springframework.util.CollectionUtils; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; -import java.util.Set; -import java.util.stream.Collectors; - - -/** - * @author 六如 - */ -@Service -public class DocService { - - @Autowired - private SysConfigService sysConfigService; - - @Autowired - private DocAppService docAppService; - - @Autowired - private TornaClient tornaClient; - @Autowired - private DocInfoService docInfoService; - - public DocSettingDTO getDocSetting() { - DocSettingDTO docSettingDTO = new DocSettingDTO(); - docSettingDTO.setTornaServerAddr(ConfigKeyEnum.TORNA_SERVER_ADDR.getValue()); - docSettingDTO.setOpenProdUrl(ConfigKeyEnum.OPEN_PROD_URL.getValue()); - docSettingDTO.setOpenSandboxUrl(ConfigKeyEnum.OPEN_SANDBOX_URL.getValue()); - return docSettingDTO; - } - - public void save(DocSettingDTO docSettingDTO) { - Collection systemConfigDTOS = new ArrayList<>(); - systemConfigDTOS.add(new SystemConfigDTO(ConfigKeyEnum.TORNA_SERVER_ADDR.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); - } - - public Long addDocApp(String token) { - TornaModuleDTO tornaModuleDTO = tornaClient.execute("module.get", null, token, TornaModuleDTO.class); - DocApp docApp = docAppService.get(DocApp::getToken, token); - if (docApp == null) { - docApp = new DocApp(); - docApp.setAppName(tornaModuleDTO.getName()); - docApp.setToken(token); - docAppService.save(docApp); - } else { - docApp.setAppName(tornaModuleDTO.getName()); - docAppService.update(docApp); - } - // 同步文档 - docInfoService.syncDocInfo(docApp.getId()); - return docApp.getId(); - } - - public List listDocApp() { - List docApps = docAppService.listAll(); - return CopyUtil.copyList(docApps, DocAppDTO::new); - } - - public List listDocTree(Long docAppId) { - List list = docInfoService.list(DocInfo::getDocAppId, docAppId); - if (CollectionUtils.isEmpty(list)) { - return new ArrayList<>(0); - } - List docInfoTreeDTOS = CopyUtil.copyList(list, DocInfoTreeDTO::new); - return TreeUtil.convertTree(docInfoTreeDTOS, 0L); - } - - public int publish(DocInfoPublishUpdateDTO docInfoUpdateDTO) { - DocInfo docInfo = docInfoService.getById(docInfoUpdateDTO.getId()); - // 如果是文件夹,发布下面所有的文档 - if (YesOrNoEnum.of(docInfo.getIsFolder()) == YesOrNoEnum.YES) { - List children = this.docInfoService.listChildDoc(docInfo.getDocId()); - Set ids = children.stream().map(DocInfo::getId).collect(Collectors.toSet()); - return docInfoService.query() - .in(DocInfo::getId, ids) - .set(DocInfo::getIsPublish, docInfoUpdateDTO.getIsPublish()) - .update(); - } else { - // 发布单个文档 - return docInfoService.query() - .eq(DocInfo::getId, docInfoUpdateDTO.getId()) - .set(DocInfo::getIsPublish, docInfoUpdateDTO.getIsPublish()) - .update(); - } - } - - -} diff --git a/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/service/doc/DocSettingService.java b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/service/doc/DocSettingService.java new file mode 100644 index 00000000..6e0c677e --- /dev/null +++ b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/service/doc/DocSettingService.java @@ -0,0 +1,40 @@ +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 DocSettingService { + + @Autowired + private SysConfigService sysConfigService; + + public DocSettingDTO getDocSetting() { + DocSettingDTO docSettingDTO = new DocSettingDTO(); + docSettingDTO.setTornaServerAddr(ConfigKeyEnum.TORNA_SERVER_ADDR.getValue()); + docSettingDTO.setOpenProdUrl(ConfigKeyEnum.OPEN_PROD_URL.getValue()); + docSettingDTO.setOpenSandboxUrl(ConfigKeyEnum.OPEN_SANDBOX_URL.getValue()); + return docSettingDTO; + } + + public void save(DocSettingDTO docSettingDTO) { + Collection systemConfigDTOS = new ArrayList<>(); + systemConfigDTOS.add(new SystemConfigDTO(ConfigKeyEnum.TORNA_SERVER_ADDR.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); + } + + +} diff --git a/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/service/doc/dto/DocInfoConfigDTO.java b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/service/doc/dto/DocInfoConfigDTO.java new file mode 100644 index 00000000..c4612894 --- /dev/null +++ b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/service/doc/dto/DocInfoConfigDTO.java @@ -0,0 +1,14 @@ +package com.gitee.sop.adminbackend.service.doc.dto; + +import lombok.Data; + +/** + * @author 六如 + */ +@Data +public class DocInfoConfigDTO { + + private String openProdUrl; + private String openSandboxUrl; + +} diff --git a/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/service/doc/dto/DocInfoViewDTO.java b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/service/doc/dto/DocInfoViewDTO.java new file mode 100644 index 00000000..aa48ddec --- /dev/null +++ b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/service/doc/dto/DocInfoViewDTO.java @@ -0,0 +1,16 @@ +package com.gitee.sop.adminbackend.service.doc.dto; + +import com.gitee.sop.adminbackend.service.doc.dto.torna.TornaDocInfoViewDTO; +import lombok.Data; + +/** + * @author 六如 + */ +@Data +public class DocInfoViewDTO { + + private TornaDocInfoViewDTO docInfoView; + + private DocInfoConfigDTO docInfoConfig; + +} diff --git a/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/service/doc/dto/torna/DocIdParam.java b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/service/doc/dto/torna/DocIdParam.java new file mode 100644 index 00000000..b60d0183 --- /dev/null +++ b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/service/doc/dto/torna/DocIdParam.java @@ -0,0 +1,13 @@ +package com.gitee.sop.adminbackend.service.doc.dto.torna; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class DocIdParam { + + private Long docId; +} diff --git a/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/service/doc/dto/TornaDocDTO.java b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/service/doc/dto/torna/TornaDocDTO.java similarity index 72% rename from sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/service/doc/dto/TornaDocDTO.java rename to sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/service/doc/dto/torna/TornaDocDTO.java index a7ec12c5..4f48944c 100644 --- a/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/service/doc/dto/TornaDocDTO.java +++ b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/service/doc/dto/torna/TornaDocDTO.java @@ -1,4 +1,4 @@ -package com.gitee.sop.adminbackend.service.doc.dto; +package com.gitee.sop.adminbackend.service.doc.dto.torna; import lombok.Data; diff --git a/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/service/doc/dto/TornaDocInfoDTO.java b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/service/doc/dto/torna/TornaDocInfoDTO.java similarity index 93% rename from sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/service/doc/dto/TornaDocInfoDTO.java rename to sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/service/doc/dto/torna/TornaDocInfoDTO.java index 23bd8aa1..0b57a5f9 100644 --- a/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/service/doc/dto/TornaDocInfoDTO.java +++ b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/service/doc/dto/torna/TornaDocInfoDTO.java @@ -1,4 +1,4 @@ -package com.gitee.sop.adminbackend.service.doc.dto; +package com.gitee.sop.adminbackend.service.doc.dto.torna; import lombok.Data; diff --git a/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/service/doc/dto/torna/TornaDocInfoViewDTO.java b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/service/doc/dto/torna/TornaDocInfoViewDTO.java new file mode 100644 index 00000000..4dd9d069 --- /dev/null +++ b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/service/doc/dto/torna/TornaDocInfoViewDTO.java @@ -0,0 +1,178 @@ +package com.gitee.sop.adminbackend.service.doc.dto.torna; + +import lombok.Data; + +import java.time.LocalDateTime; +import java.util.Collections; +import java.util.List; + +/** + * @author tanghc + */ +@Data +public class TornaDocInfoViewDTO { + private Long id; + + /** + * 文档名称 + */ + private String name; + + /** + * 文档概述 + */ + + private String description; + + /** + * 0:http,1:dubbo + */ + private Byte type; + + /** + * 访问URL + */ + + private String url; + + /** + * 版本号 + */ + private String version = ""; + + private String docKey; + + /** + * http方法 + */ + + private String httpMethod; + + /** + * contentType + */ + + private String contentType; + + + /** + * 是否是分类,0:不是,1:是 + */ + private Byte isFolder; + + /** + * 父节点 + */ + + private Long parentId; + + /** + * 模块id,module.id + */ + + private Long moduleId; + + /** + * 项目id + */ + + private Long projectId; + + /** + * 是否使用全局请求参数 + */ + + private Byte isUseGlobalHeaders; + + /** + * 是否使用全局请求参数 + */ + + private Byte isUseGlobalParams; + + /** + * 是否使用全局返回参数 + */ + + private Byte isUseGlobalReturns; + + /** + * 是否请求数组 + */ + + private Byte isRequestArray; + + /** + * 是否返回数组 + */ + + private Byte isResponseArray; + + /** + * 请求数组时元素类型 + */ + + private String requestArrayType; + + /** + * 返回数组时元素类型 + */ + + private String responseArrayType; + + /** + * 文档状态 + */ + + private Byte status; + + private String remark; + + private Integer orderIndex; + + /** + * 数据库字段:gmt_create + */ + private LocalDateTime gmtCreate; + + /** + * 数据库字段:gmt_modified + */ + private LocalDateTime gmtModified; + + + private List pathParams = Collections.emptyList(); + + + private List headerParams = Collections.emptyList(); + + private List headerParamsRaw = Collections.emptyList(); + + + private List queryParams = Collections.emptyList(); + + + private List requestParams = Collections.emptyList(); + + + private List responseParams = Collections.emptyList(); + + private List errorCodeParams = Collections.emptyList(); + + private List globalHeaders = Collections.emptyList(); + private List globalParams = Collections.emptyList(); + private List globalReturns = Collections.emptyList(); + + private String errorCodeInfo; + + private List children = Collections.emptyList(); + + public String getDocName() { + return name; + } + + public String getDocTitle() { + return name; + } + +} diff --git a/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/service/doc/dto/torna/TornaDocParamDTO.java b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/service/doc/dto/torna/TornaDocParamDTO.java new file mode 100644 index 00000000..443fa369 --- /dev/null +++ b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/service/doc/dto/torna/TornaDocParamDTO.java @@ -0,0 +1,128 @@ +package com.gitee.sop.adminbackend.service.doc.dto.torna; + +import com.gitee.fastmybatis.core.support.TreeNode; +import lombok.Data; + +import java.time.LocalDateTime; +import java.util.List; +import java.util.Objects; + +/** + * @author tanghc + */ +@Data +public class TornaDocParamDTO implements TreeNode { + + private Long id; + + /** + * 字段名称 + */ + + private String name; + + /** + * 字段类型 + */ + + private String type; + + /** + * 是否必须,1:是,0:否 + */ + + private Byte required; + + /** + * 最大长度 + */ + + private String maxLength; + + /** + * 示例值 + */ + private String example; + + /** + * 描述 + */ + + private String description; + + + private Long enumId; + + /** + * doc_info.id + */ + + private Long docId; + + /** + * 父节点 + */ + + private Long parentId; + + /** + * 0:header, 1:请求参数,2:返回参数,3:错误码 + */ + private Byte style; + + /** + * 新增操作方式,0:人工操作,1:开放平台推送 + */ + private Byte createMode; + + /** + * 修改操作方式,0:人工操作,1:开放平台推送 + */ + private Byte modifyMode; + + /** + * 创建人 + */ + private String creatorName; + + /** + * 修改人 + */ + private String modifierName; + + /** + * 排序 + */ + private Integer orderIndex; + + private Byte isDeleted; + + /** + * 数据库字段:gmt_create + */ + private LocalDateTime gmtCreate; + + /** + * 数据库字段:gmt_modified + */ + private LocalDateTime gmtModified; + + private boolean global; + + private List children; + + + public boolean getRequire() { + return Objects.equals(this.required, 1); + } + + @Override + public Long takeId() { + return id; + } + + @Override + public Long takeParentId() { + return parentId; + } +} diff --git a/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/service/doc/dto/TornaModuleDTO.java b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/service/doc/dto/torna/TornaModuleDTO.java similarity index 69% rename from sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/service/doc/dto/TornaModuleDTO.java rename to sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/service/doc/dto/torna/TornaModuleDTO.java index ccc57609..db84b74b 100644 --- a/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/service/doc/dto/TornaModuleDTO.java +++ b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/service/doc/dto/torna/TornaModuleDTO.java @@ -1,4 +1,4 @@ -package com.gitee.sop.adminbackend.service.doc.dto; +package com.gitee.sop.adminbackend.service.doc.dto.torna; import lombok.Data; diff --git a/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/service/website/WebsiteService.java b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/service/website/WebsiteService.java index 3f2aa200..a4550c1b 100644 --- a/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/service/website/WebsiteService.java +++ b/sop-admin/sop-admin-backend/src/main/java/com/gitee/sop/adminbackend/service/website/WebsiteService.java @@ -1,13 +1,19 @@ package com.gitee.sop.adminbackend.service.website; import com.gitee.fastmybatis.core.util.TreeUtil; +import com.gitee.sop.adminbackend.common.enums.YesOrNoEnum; 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.doc.DocAppService; +import com.gitee.sop.adminbackend.service.doc.DocInfoService; +import com.gitee.sop.adminbackend.service.doc.DocSettingService; import com.gitee.sop.adminbackend.service.doc.dto.DocAppDTO; +import com.gitee.sop.adminbackend.service.doc.dto.DocInfoConfigDTO; import com.gitee.sop.adminbackend.service.doc.dto.DocInfoTreeDTO; +import com.gitee.sop.adminbackend.service.doc.dto.DocInfoViewDTO; +import com.gitee.sop.adminbackend.service.doc.dto.DocSettingDTO; +import com.gitee.sop.adminbackend.service.doc.dto.torna.TornaDocInfoViewDTO; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -20,19 +26,39 @@ import java.util.List; public class WebsiteService { @Autowired - private DocAppMapper docAppMapper; + private DocAppService docAppService; @Autowired - private DocInfoMapper docInfoMapper; + private DocInfoService docInfoService; + @Autowired + private DocSettingService docSettingService; public List listDocApp() { - List docApps = docAppMapper.listAll(); + List docApps = docAppService.list(DocApp::getIsPublish, YesOrNoEnum.YES.getValue()); return CopyUtil.copyList(docApps, DocAppDTO::new); } public List listDocMenuTree(Long docAppId) { - List list = docInfoMapper.list(DocInfo::getDocAppId, docAppId); + List list = docInfoService.query() + .eq(DocInfo::getDocAppId, docAppId) + .eq(DocInfo::getIsPublish, YesOrNoEnum.YES.getValue()) + .list(); List treeList = CopyUtil.copyList(list, DocInfoTreeDTO::new); return TreeUtil.convertTree(treeList, 0L); } + public DocInfoViewDTO getDocDetail(Long id) { + TornaDocInfoViewDTO tornaDocInfoViewDTO = docInfoService.getDocDetail(id); + DocInfoConfigDTO docInfoConfigDTO = buildDocInfoConfig(); + + DocInfoViewDTO docInfoViewDTO = new DocInfoViewDTO(); + docInfoViewDTO.setDocInfoView(tornaDocInfoViewDTO); + docInfoViewDTO.setDocInfoConfig(docInfoConfigDTO); + return docInfoViewDTO; + } + + + private DocInfoConfigDTO buildDocInfoConfig() { + DocSettingDTO docSetting = docSettingService.getDocSetting(); + return CopyUtil.copyBean(docSetting, DocInfoConfigDTO::new); + } } diff --git a/sop-admin/sop-admin-frontend/src/api/doc.ts b/sop-admin/sop-admin-frontend/src/api/doc.ts index b35a016f..9f170a59 100644 --- a/sop-admin/sop-admin-frontend/src/api/doc.ts +++ b/sop-admin/sop-admin-frontend/src/api/doc.ts @@ -4,6 +4,7 @@ import type { Result } from "@/model"; // 后端请求接口 const apiUrl: any = createUrl({ addApp: "/doc/app/add", + syncDoc: "/doc/app/syncDoc", listApp: "/doc/app/list", listDocTree: "/doc/info/tree", publish: "/doc/info/publish" @@ -31,6 +32,16 @@ export const api: any = { addApp(data: object) { return http.post, any>(apiUrl.addApp, { data }); }, + /** + * 同步文档 + * @param data 表单内容 + */ + syncDoc(docAppId) { + const data = { + id: docAppId + }; + return http.post, any>(apiUrl.syncDoc, { data }); + }, /** * 发布 * @param data 表单内容 diff --git a/sop-admin/sop-admin-frontend/src/views/doc/list/index.ts b/sop-admin/sop-admin-frontend/src/views/doc/list/index.ts index a188f306..31380144 100644 --- a/sop-admin/sop-admin-frontend/src/views/doc/list/index.ts +++ b/sop-admin/sop-admin-frontend/src/views/doc/list/index.ts @@ -17,6 +17,7 @@ export const tabsData = ref>([ export const activeName = ref(0); const docAppId = ref(0); +export const loading = ref(false); // 表格对象 export const { tableData, buttons: actionButtons } = useTable(); @@ -55,11 +56,15 @@ export const tableColumns: PlusColumn[] = [ }, { label: "版本号", - prop: "docVersion" + prop: "docVersion", + width: 80 }, { label: "描述", - prop: "description" + prop: "description", + tableColumnProps: { + showOverflowTooltip: true + } }, { label: "发布状态", @@ -101,21 +106,17 @@ export const tableColumns: PlusColumn[] = [ // 表格按钮定义 actionButtons.value = [ { - text: row => (row.isPublish ? "下线" : "发布"), + text: "发布", confirm: { options: { draggable: false }, popconfirmProps: { width: 300 }, message: params => { const row = params.row; - const opt = row.isPublish ? "下线" : "发布"; - const isFolder = row.isFolder; - return isFolder === 1 - ? `确定要${opt}[${row.docTitle}]下所有接口吗?` - : `确定要${opt}[${row.docTitle}]吗?`; + return `确定要发布[${row.docTitle}]下所有接口吗?`; } }, - props: (row: any) => ({ - type: row.isPublish === 1 ? "danger" : "success" + props: (_: any) => ({ + type: "success" }), onConfirm(params: ButtonsCallBackParams) { const data = { @@ -126,7 +127,8 @@ actionButtons.value = [ ElMessage.success("保存成功"); search(); }); - } + }, + show: (row: any) => row.isFolder === 1 }, { text: "下线", @@ -153,6 +155,32 @@ actionButtons.value = [ }); }, show: (row: any) => row.isFolder === 1 + }, + { + text: row => (row.isPublish ? "下线" : "发布"), + confirm: { + options: { draggable: false }, + popconfirmProps: { width: 300 }, + message: params => { + const row = params.row; + const opt = row.isPublish ? "下线" : "发布"; + return `确定要${opt}[${row.docTitle}]吗?`; + } + }, + props: (row: any) => ({ + type: row.isPublish === 1 ? "danger" : "success" + }), + onConfirm(params: ButtonsCallBackParams) { + const data = { + id: params.row.id, + isPublish: params.row.isPublish === 1 ? 0 : 1 + }; + api.publish(data).then(() => { + ElMessage.success("保存成功"); + search(); + }); + }, + show: (row: any) => row.isFolder === 0 } ]; @@ -166,6 +194,28 @@ const search = async () => { loadContent(docAppId.value); }; +export function handleSyncApi() { + ElMessageBox.confirm("确定要同步远程接口吗?", "提示", { + confirmButtonText: "确定", + cancelButtonText: "取消", + type: "warning" + }) + .then(() => { + loading.value = true; + api + .syncDoc(docAppId.value) + .then(() => { + loading.value = false; + ElMessage.success("同步成功"); + search(); + }) + .catch(() => { + loading.value = false; + }); + }) + .catch(() => {}); +} + export const handleClick = data => { const id = data.props.name; activeTab(id); diff --git a/sop-admin/sop-admin-frontend/src/views/doc/list/index.vue b/sop-admin/sop-admin-frontend/src/views/doc/list/index.vue index d82fea86..ab0ec2c7 100644 --- a/sop-admin/sop-admin-frontend/src/views/doc/list/index.vue +++ b/sop-admin/sop-admin-frontend/src/views/doc/list/index.vue @@ -3,17 +3,19 @@ import { activeName, handleClick, handleAddApp, + handleSyncApi, tabsData, actionButtons, tableColumns, tableRows, filterText, + loading, handleSearch } from "./index"; import { Search } from "@element-plus/icons-vue"; + diff --git a/sop-example/example-payment/src/main/java/com/gitee/sop/payment/impl/OpenPaymentImpl.java b/sop-example/example-payment/src/main/java/com/gitee/sop/payment/impl/OpenPaymentImpl.java index 0484297c..3bac2532 100644 --- a/sop-example/example-payment/src/main/java/com/gitee/sop/payment/impl/OpenPaymentImpl.java +++ b/sop-example/example-payment/src/main/java/com/gitee/sop/payment/impl/OpenPaymentImpl.java @@ -1,8 +1,8 @@ package com.gitee.sop.payment.impl; import com.gitee.sop.payment.open.OpenPayment; -import com.gitee.sop.payment.open.req.AlipayTradeWapPayRequest; -import com.gitee.sop.payment.open.resp.AlipayTradeWapPayResponse; +import com.gitee.sop.payment.open.req.PayTradeWapPayRequest; +import com.gitee.sop.payment.open.resp.PayTradeWapPayResponse; import org.apache.dubbo.config.annotation.DubboService; import java.util.UUID; @@ -17,9 +17,9 @@ import java.util.UUID; public class OpenPaymentImpl implements OpenPayment { @Override - public AlipayTradeWapPayResponse tradeWapPay(AlipayTradeWapPayRequest request) { - AlipayTradeWapPayResponse alipayTradeWapPayResponse = new AlipayTradeWapPayResponse(); - alipayTradeWapPayResponse.setPageRedirectionData(UUID.randomUUID().toString()); - return alipayTradeWapPayResponse; + public PayTradeWapPayResponse tradeWapPay(PayTradeWapPayRequest request) { + PayTradeWapPayResponse payTradeWapPayResponse = new PayTradeWapPayResponse(); + payTradeWapPayResponse.setPageRedirectionData(UUID.randomUUID().toString()); + return payTradeWapPayResponse; } } diff --git a/sop-example/example-payment/src/main/java/com/gitee/sop/payment/open/OpenPayment.java b/sop-example/example-payment/src/main/java/com/gitee/sop/payment/open/OpenPayment.java index 33fb3e02..d69246f5 100644 --- a/sop-example/example-payment/src/main/java/com/gitee/sop/payment/open/OpenPayment.java +++ b/sop-example/example-payment/src/main/java/com/gitee/sop/payment/open/OpenPayment.java @@ -1,7 +1,7 @@ package com.gitee.sop.payment.open; -import com.gitee.sop.payment.open.req.AlipayTradeWapPayRequest; -import com.gitee.sop.payment.open.resp.AlipayTradeWapPayResponse; +import com.gitee.sop.payment.open.req.PayTradeWapPayRequest; +import com.gitee.sop.payment.open.resp.PayTradeWapPayResponse; import com.gitee.sop.support.annotation.Open; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -15,13 +15,13 @@ import io.swagger.annotations.ApiOperation; public interface OpenPayment { @ApiOperation( - value = "alipay.trade.wap.pay(手机网站支付接口2.0)", - notes = "该接口是页面跳转接口,用于生成用户访问支付宝的跳转链接。" + - "请在服务端执行支付宝SDK中pageExecute方法,读取响应中的body()结果。" + - "该结果用于跳转到支付宝页面,返回到用户浏览器渲染或重定向跳转到支付宝页面。" + + value = "手机网站支付接口2.0", + notes = "该接口是页面跳转接口,用于生成用户访问跳转链接。" + + "请在服务端执行SDK中pageExecute方法,读取响应中的body()结果。" + + "该结果用于跳转到页面,返回到用户浏览器渲染或重定向跳转到页面。" + "具体使用方法请参考 接入指南" ) - @Open(value = "alipay.trade.wap.pay", version = "2.0") - AlipayTradeWapPayResponse tradeWapPay(AlipayTradeWapPayRequest request); + @Open(value = "pay.trade.wap.pay", version = "2.0") + PayTradeWapPayResponse tradeWapPay(PayTradeWapPayRequest request); } diff --git a/sop-example/example-payment/src/main/java/com/gitee/sop/payment/open/req/AlipayTradeWapPayRequest.java b/sop-example/example-payment/src/main/java/com/gitee/sop/payment/open/req/PayTradeWapPayRequest.java similarity index 99% rename from sop-example/example-payment/src/main/java/com/gitee/sop/payment/open/req/AlipayTradeWapPayRequest.java rename to sop-example/example-payment/src/main/java/com/gitee/sop/payment/open/req/PayTradeWapPayRequest.java index d9995550..2845053b 100644 --- a/sop-example/example-payment/src/main/java/com/gitee/sop/payment/open/req/AlipayTradeWapPayRequest.java +++ b/sop-example/example-payment/src/main/java/com/gitee/sop/payment/open/req/PayTradeWapPayRequest.java @@ -16,7 +16,7 @@ import java.util.List; * https://opendocs.alipay.com/open/29ae8cb6_alipay.trade.wap.pay?pathHash=1ef587fd&ref=api&scene=21 */ @Data -public class AlipayTradeWapPayRequest { +public class PayTradeWapPayRequest { @ApiModelProperty(value = "商户网站唯一订单号", required = true, example = "70501111111S001111119") diff --git a/sop-example/example-payment/src/main/java/com/gitee/sop/payment/open/resp/AlipayTradeWapPayResponse.java b/sop-example/example-payment/src/main/java/com/gitee/sop/payment/open/resp/PayTradeWapPayResponse.java similarity index 93% rename from sop-example/example-payment/src/main/java/com/gitee/sop/payment/open/resp/AlipayTradeWapPayResponse.java rename to sop-example/example-payment/src/main/java/com/gitee/sop/payment/open/resp/PayTradeWapPayResponse.java index 4c7564a5..0b54edfb 100644 --- a/sop-example/example-payment/src/main/java/com/gitee/sop/payment/open/resp/AlipayTradeWapPayResponse.java +++ b/sop-example/example-payment/src/main/java/com/gitee/sop/payment/open/resp/PayTradeWapPayResponse.java @@ -7,7 +7,7 @@ import lombok.Data; * @author 六如 */ @Data -public class AlipayTradeWapPayResponse { +public class PayTradeWapPayResponse { @ApiModelProperty( value = "用于跳转支付宝页面的信息,POST和GET方法生成内容不同:使用POST方法执行,结果为html form表单,在浏览器渲染即可;使用GET方法会得到支付宝URL,需要打开或重定向到该URL。建议使用POST方式。具体使用方法请参考", diff --git a/sop-support/sop-doc-plugin/src/main/java/cn/torna/swaggerplugin/SwaggerPluginService.java b/sop-support/sop-doc-plugin/src/main/java/cn/torna/swaggerplugin/SwaggerPluginService.java index 6afc660f..8638a039 100644 --- a/sop-support/sop-doc-plugin/src/main/java/cn/torna/swaggerplugin/SwaggerPluginService.java +++ b/sop-support/sop-doc-plugin/src/main/java/cn/torna/swaggerplugin/SwaggerPluginService.java @@ -49,7 +49,6 @@ import lombok.Data; import org.springframework.beans.BeanUtils; import org.springframework.core.annotation.AnnotationUtils; import org.springframework.core.annotation.Order; -import org.springframework.http.HttpMethod; import org.springframework.util.CollectionUtils; import org.springframework.util.ObjectUtils; import org.springframework.util.ReflectionUtils; @@ -74,7 +73,6 @@ import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Objects; -import java.util.Optional; import java.util.Set; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -84,6 +82,8 @@ import java.util.stream.Stream; */ public class SwaggerPluginService { + public static final String DUBBO = "dubbo"; + public static final String VERSION = "1.0"; private final TornaConfig tornaConfig; private final OpenClient client; private boolean existsApiIgnore = true; @@ -224,22 +224,27 @@ public class SwaggerPluginService { List folders = new ArrayList<>(controllerDocMap.size()); for (Map.Entry> entry : folderDocMap.entrySet()) { String name = entry.getKey(); - ControllerInfo info = controllerInfoList + ControllerInfo ctrlInfo = controllerInfoList .stream() .filter(controllerInfo -> name.equals(controllerInfo.getName())) .findFirst() .orElse(null); - if (info == null) { + if (ctrlInfo == null) { continue; } DocItem docItem = new DocItem(); docItem.setName(name); - docItem.setDefinition(info.getDescription()); - docItem.setOrderIndex(info.getPosition()); + docItem.setDefinition(ctrlInfo.getDescription()); + docItem.setOrderIndex(ctrlInfo.getPosition()); docItem.setIsFolder(Booleans.TRUE); List items = entry.getValue(); items.sort(Comparator.comparing(DocItem::getOrderIndex)); docItem.setItems(items); + DubboInfo dubboInfo = new DubboInfo(); + dubboInfo.setInterfaceName(ctrlInfo.getControllerClass().getName()); + dubboInfo.setVersion(VERSION); + dubboInfo.setProtocol(DUBBO); + docItem.setDubboInfo(dubboInfo); folders.add(docItem); } return folders; @@ -416,45 +421,7 @@ public class SwaggerPluginService { } protected List buildPathParams(Method method) { - List apiImplicitParamList = buildApiImplicitParams(method, param -> "path".equalsIgnoreCase(param.paramType())); - List docParamPaths = new ArrayList<>(apiImplicitParamList.size()); - if (!apiImplicitParamList.isEmpty()) { - for (ApiImplicitParam apiImplicitParam : apiImplicitParamList) { - DocParamPath docParamPath = new DocParamPath(); - docParamPath.setName(apiImplicitParam.name()); - docParamPath.setRequired(Booleans.toValue(apiImplicitParam.required())); - docParamPath.setDescription(apiImplicitParam.value()); - docParamPath.setExample(apiImplicitParam.example()); - docParamPath.setType(getDataType(apiImplicitParam)); - docParamPaths.add(docParamPath); - } - } - Parameter[] parameters = method.getParameters(); - for (Parameter parameter : parameters) { - PathVariable pathVariable = parameter.getAnnotation(PathVariable.class); - if (pathVariable != null) { - String name = pathVariable.value(); - if (StringUtils.isEmpty(name)) { - name = pathVariable.name(); - } - if (StringUtils.isEmpty(name)) { - name = parameter.getName(); - } - // 如果已经有了不添加 - if (containsName(docParamPaths, name) || isIgnoreParameter(parameter)) { - continue; - } - DocParamInfo docParamInfo = buildDocParamInfo(parameter); - DocParamPath docParamPath = new DocParamPath(); - docParamPath.setName(name); - docParamPath.setType(docParamInfo.getType()); - docParamPath.setRequired(Booleans.toValue(pathVariable.required())); - docParamPath.setDescription(docParamInfo.getDescription()); - docParamPath.setExample(docParamInfo.getExample()); - docParamPaths.add(docParamPath); - } - } - return docParamPaths; + return Collections.emptyList(); } private static DocParamInfo buildDocParamInfo(Parameter parameter) { @@ -487,87 +454,11 @@ public class SwaggerPluginService { } protected List buildHeaderParams(Method method) { - List apiImplicitParamList = buildApiImplicitParams(method, param -> "header".equalsIgnoreCase(param.paramType())); - List docParamHeaders = new ArrayList<>(apiImplicitParamList.size()); - if (!apiImplicitParamList.isEmpty()) { - for (ApiImplicitParam apiImplicitParam : apiImplicitParamList) { - DocParamHeader docParamHeader = new DocParamHeader(); - docParamHeader.setName(apiImplicitParam.name()); - docParamHeader.setRequired(Booleans.toValue(apiImplicitParam.required())); - docParamHeader.setDescription(apiImplicitParam.value()); - docParamHeader.setExample(apiImplicitParam.example()); - docParamHeaders.add(docParamHeader); - } - } - Parameter[] parameters = method.getParameters(); - for (Parameter parameter : parameters) { - RequestHeader requestHeader = parameter.getAnnotation(RequestHeader.class); - if (requestHeader != null) { - String name = getParameterName(parameter); - // 如果已经有了不添加 - if (containsName(docParamHeaders, name) || isIgnoreParameter(parameter)) { - continue; - } - DocParamInfo docParamInfo = buildDocParamInfo(parameter); - DocParamHeader docParamHeader = new DocParamHeader(); - docParamHeader.setName(name); - docParamHeader.setRequired(Booleans.toValue(requestHeader.required())); - docParamHeader.setDescription(docParamInfo.getDescription()); - docParamHeader.setExample(docParamInfo.getExample()); - docParamHeaders.add(docParamHeader); - } - } - return docParamHeaders; + return Collections.emptyList(); } protected List buildQueryParams(Method method, String httpMethod) { - List apiImplicitParamList = buildApiImplicitParams(method, param -> "query".equalsIgnoreCase(param.paramType())); - List docParamReqs = new ArrayList<>(apiImplicitParamList.size()); - if (!apiImplicitParamList.isEmpty()) { - for (ApiImplicitParam apiImplicitParam : apiImplicitParamList) { - DocParamReq paramReq = new DocParamReq(); - paramReq.setName(apiImplicitParam.name()); - paramReq.setRequired(Booleans.toValue(apiImplicitParam.required())); - paramReq.setDescription(apiImplicitParam.value()); - paramReq.setExample(apiImplicitParam.example()); - paramReq.setType(getDataType(apiImplicitParam)); - docParamReqs.add(paramReq); - } - } - Parameter[] parameters = method.getParameters(); - for (Parameter parameter : parameters) { - PathVariable pathVariable = parameter.getAnnotation(PathVariable.class); - if (pathVariable != null) { - continue; - } - RequestHeader requestHeader = parameter.getAnnotation(RequestHeader.class); - if (requestHeader != null) { - continue; - } - Class parameterType = parameter.getType(); - String name = getParameterName(parameter); - // 如果已经有了不添加 - if (containsName(docParamReqs, name) || isIgnoreParameter(parameter)) { - continue; - } - RequestParam requestParam = parameter.getAnnotation(RequestParam.class); - // 如果是Get请求 - if (httpMethod.equalsIgnoreCase(HttpMethod.GET.name()) || requestParam != null) { - boolean isPojo = PluginUtil.isPojo(parameterType); - // 当get请求时,遇到普通类则认为类中的属性都是query参数 - if (isPojo) { - List docParamReqList = buildReqClassParams(parameterType); - docParamReqs.addAll(docParamReqList); - } else { - DocParamReq docParamReq = buildDocParamReq(parameter); - Optional requiredOpt = Optional.ofNullable(requestParam).map(RequestParam::required); - // 如果定义了RequestParam,required由它来指定 - requiredOpt.ifPresent(aBoolean -> docParamReq.setRequired(Booleans.toValue(aBoolean))); - docParamReqs.add(docParamReq); - } - } - } - return docParamReqs; + return Collections.emptyList(); } protected DocParamReq buildDocParamReq(Parameter parameter) { @@ -594,38 +485,7 @@ public class SwaggerPluginService { if (StringUtils.hasText(fieldName)) { return fieldName; } - RequestParam requestParam = parameter.getAnnotation(RequestParam.class); - PathVariable pathVariable = parameter.getAnnotation(PathVariable.class); - RequestHeader requestHeader = parameter.getAnnotation(RequestHeader.class); - String name = parameter.getName(); - if (requestParam != null) { - String val = requestParam.value(); - if (StringUtils.isEmpty(val)) { - val = requestParam.name(); - } - if (StringUtils.hasText(val)) { - name = val; - } - } - if (pathVariable != null) { - String val = pathVariable.value(); - if (StringUtils.isEmpty(val)) { - val = pathVariable.name(); - } - if (StringUtils.hasText(val)) { - name = val; - } - } - if (requestHeader != null) { - String val = requestHeader.value(); - if (StringUtils.isEmpty(val)) { - val = requestHeader.name(); - } - if (StringUtils.hasText(val)) { - name = val; - } - } - return name; + return parameter.getName(); } protected DocParamReqWrapper buildRequestParams(ControllerInfo controllerInfo, Method method, String httpMethod) { @@ -662,7 +522,6 @@ public class SwaggerPluginService { continue; } int mode = tornaConfig.getMode(); - RequestBody requestBody = parameter.getAnnotation(RequestBody.class); Class type = parameter.getType(); Type parameterizedType = parameter.getParameterizedType(); if (parameterizedType instanceof TypeVariable) { @@ -677,7 +536,7 @@ public class SwaggerPluginService { ApiParamWrapper apiParamWrapper = new ApiParamWrapper(parameter.getAnnotation(ApiParam.class)); array = PluginUtil.isCollectionOrArray(type); Map> genericParamMap = buildParamsByGeneric(controllerInfo, parameterizedType); - if (requestBody != null || mode == ModeEnum.DUBBO.getValue()) { + if (mode == ModeEnum.DUBBO.getValue()) { List docParamReqList; if (array) { // 获取数元素类型 @@ -957,7 +816,7 @@ public class SwaggerPluginService { return Collections.emptyMap(); } else { ParameterizedType parameterizedType = (ParameterizedType) genType; - Class rawType = (Class)parameterizedType.getRawType(); + Class rawType = (Class) parameterizedType.getRawType(); List classGenericParamNameList = PluginUtil.getClassGenericParamName(rawType); Type[] params = ((ParameterizedType) genType).getActualTypeArguments(); Class superclass = controllerClass.getSuperclass(); diff --git a/sop-support/sop-doc-plugin/src/main/java/cn/torna/swaggerplugin/builder/HttpMethodInfoBuilder.java b/sop-support/sop-doc-plugin/src/main/java/cn/torna/swaggerplugin/builder/HttpMethodInfoBuilder.java index fd89f0c3..6d354838 100644 --- a/sop-support/sop-doc-plugin/src/main/java/cn/torna/swaggerplugin/builder/HttpMethodInfoBuilder.java +++ b/sop-support/sop-doc-plugin/src/main/java/cn/torna/swaggerplugin/builder/HttpMethodInfoBuilder.java @@ -3,10 +3,6 @@ package cn.torna.swaggerplugin.builder; import cn.torna.swaggerplugin.bean.ControllerInfo; import cn.torna.swaggerplugin.bean.TornaConfig; import io.swagger.annotations.ApiOperation; -import org.springframework.core.annotation.AnnotatedElementUtils; -import org.springframework.util.StringUtils; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; import java.lang.reflect.Method; @@ -29,19 +25,6 @@ public abstract class HttpMethodInfoBuilder implements RequestInfoBuilder { @Override public String getHttpMethod() { - String httpMethod = apiOperation.httpMethod(); - if (StringUtils.hasText(httpMethod)) { - return httpMethod; - } - RequestMapping requestMapping = AnnotatedElementUtils.findMergedAnnotation(method, RequestMapping.class); - if (requestMapping != null) { - RequestMethod[] methods = requestMapping.method(); - if (methods.length == 0) { - return this.tornaConfig.getMethodWhenMulti(); - } else { - return methods[0].name(); - } - } return tornaConfig.getDefaultHttpMethod(); } diff --git a/sop-support/sop-doc-plugin/src/main/java/cn/torna/swaggerplugin/util/ClassUtil.java b/sop-support/sop-doc-plugin/src/main/java/cn/torna/swaggerplugin/util/ClassUtil.java index 8a4c1aee..ae41ae40 100644 --- a/sop-support/sop-doc-plugin/src/main/java/cn/torna/swaggerplugin/util/ClassUtil.java +++ b/sop-support/sop-doc-plugin/src/main/java/cn/torna/swaggerplugin/util/ClassUtil.java @@ -1,9 +1,6 @@ package cn.torna.swaggerplugin.util; import cn.torna.swaggerplugin.scaner.ClassScanner; -import org.springframework.http.HttpMethod; -import org.springframework.web.context.request.WebRequest; -import org.springframework.web.multipart.MultipartRequest; import java.io.IOException; import java.io.InputStream; @@ -74,12 +71,9 @@ public class ClassUtil { public static boolean isSpecialType(Class paramType) { // 特殊参数 boolean special = ( - WebRequest.class.isAssignableFrom(paramType) || - MultipartRequest.class.isAssignableFrom(paramType) || Principal.class.isAssignableFrom(paramType) || InputStream.class.isAssignableFrom(paramType) || Reader.class.isAssignableFrom(paramType) || - HttpMethod.class == paramType || Locale.class == paramType || TimeZone.class == paramType || ZoneId.class == paramType || diff --git a/sop-website/sop-website-frontend/src/api/doc.ts b/sop-website/sop-website-frontend/src/api/doc.ts index 404555ee..68498d3c 100644 --- a/sop-website/sop-website-frontend/src/api/doc.ts +++ b/sop-website/sop-website-frontend/src/api/doc.ts @@ -3,8 +3,9 @@ import type { Result } from "@/model"; // 后端请求接口 const apiUrl: any = createUrl({ - listApp: "/website/listDocApp", - listDocTree: "/doc/info/tree" + listApp: "/website/docapp/list", + listDocTree: "/website/docinfo/tree", + getDocDetail: "/website/docinfo/detail" }); interface DocApp { @@ -28,5 +29,12 @@ export const api: any = { */ listDocTree(params: object) { return http.get>, any>(apiUrl.listDocTree, { params }); + }, + /** + * 查询文档详情 + * @param data + */ + getDocDetail(params: object) { + return http.get, any>(apiUrl.getDocDetail, { params }); } }; diff --git a/sop-website/sop-website-frontend/src/components/ApiParamTable/index.ts b/sop-website/sop-website-frontend/src/components/ApiParamTable/index.ts index 5d6c7f49..dc29de8c 100644 --- a/sop-website/sop-website-frontend/src/components/ApiParamTable/index.ts +++ b/sop-website/sop-website-frontend/src/components/ApiParamTable/index.ts @@ -1,12 +1,6 @@ import apiParamTable from "@/components/ApiParamTable/index.vue"; import { withInstall } from "@pureadmin/utils"; -export function hasNoParentAndChildren(row) { - const children = row.children; - const noChildren = !children || children.length === 0; - return !row.parentId && noChildren; -} - const ApiParamTable = withInstall(apiParamTable); export { ApiParamTable }; diff --git a/sop-website/sop-website-frontend/src/style/index.scss b/sop-website/sop-website-frontend/src/style/index.scss index 8cb9b3d2..ddeb34f8 100644 --- a/sop-website/sop-website-frontend/src/style/index.scss +++ b/sop-website/sop-website-frontend/src/style/index.scss @@ -28,3 +28,14 @@ .danger { color: #F56C6C; } +.doc-view { + .api-description { + font-size: 14px; + a { + color: #406eeb; + } + } + .is-bordered-label { + width: 200px !important; + } +} diff --git a/sop-website/sop-website-frontend/src/utils/http/index.ts b/sop-website/sop-website-frontend/src/utils/http/index.ts index 0569e8d4..68d73cbf 100644 --- a/sop-website/sop-website-frontend/src/utils/http/index.ts +++ b/sop-website/sop-website-frontend/src/utils/http/index.ts @@ -13,6 +13,7 @@ import { stringify } from "qs"; import NProgress from "../progress"; import { getToken, formatToken } from "@/utils/auth"; import { useUserStoreHook } from "@/store/modules/user"; +import { ElMessage } from "element-plus"; export const baseUrl = (url: string) => { if (!url) { @@ -181,8 +182,13 @@ class PureHttp { return new Promise((resolve, reject) => { PureHttp.axiosInstance .request(config) - .then((response: undefined) => { - resolve(response); + .then((response: any) => { + if (response.code && response.code !== "0") { + const msg = response.msg || "后台出错,请查看日志"; + ElMessage.error(msg); + } else { + resolve(response); + } }) .catch(error => { reject(error); diff --git a/sop-website/sop-website-frontend/src/views/doc/api/index.ts b/sop-website/sop-website-frontend/src/views/doc/api/index.ts index 430cece9..833b80ba 100644 --- a/sop-website/sop-website-frontend/src/views/doc/api/index.ts +++ b/sop-website/sop-website-frontend/src/views/doc/api/index.ts @@ -1,4 +1,4 @@ -import { ref } from "vue"; +import { computed, ref } from "vue"; import { api as docApi } from "@/api/doc"; export const defaultActive = ref("overview.md"); @@ -8,13 +8,42 @@ export const contentShow = ref(false); export const openMenu = ref([]); export const apiModules = ref([]); export const dataNodeType = ref("Object"); -export const api = ref({}); export const requestParamsExample = ref({}); export const responseParamsExample = ref({}); export const docAppId = ref(0); export const docAppList = ref([]); export const docTree = ref([]); +export const docDetail = ref({ + docInfoView: { + url: "", + version: "", + docName: "", + description: "", + remark: "", + requestParams: [], + responseParams: [] + }, + docInfoConfig: { + openProdUrl: "", + openSandboxUrl: "" + } +}); + +export const showUrl = computed(() => { + return ( + docDetail.value.docInfoConfig?.openProdUrl?.length > 0 && + docDetail.value.docInfoConfig?.openSandboxUrl?.length > 0 + ); +}); + +export const showProdUrl = computed(() => { + return docDetail.value.docInfoConfig?.openProdUrl?.length > 0; +}); + +export const showSandBoxUrl = computed(() => { + return docDetail.value.docInfoConfig?.openSandboxUrl?.length > 0; +}); /* 参数 类型 是否必填 最大长度 描述 示例值 @@ -43,8 +72,8 @@ export const commonParams = ref([ type: "String", maxLength: 128, required: 1, - description: "版本号", - example: "1.0" + description: "接口名称", + example: "shop.order.create" }, { name: "format", @@ -92,7 +121,7 @@ export const commonParams = ref([ maxLength: 3, required: 1, description: "调用的接口版本,固定为:1.0", - example: "1.0" + example: "xxxx" }, { name: "app_auth_token", @@ -100,7 +129,7 @@ export const commonParams = ref([ maxLength: 40, required: 0, description: "详见应用授权概述", - example: "1.0" + example: "xxxx" }, { name: "biz_content", @@ -163,7 +192,15 @@ export function handleChangeDocApp(id) { } export function handleNodeClick(node) { - console.log(node); + if (node.isFolder === 1) { + return; + } + const params = { + id: node.id + }; + docApi.getDocDetail(params).then(resp => { + docDetail.value = resp.data; + }); } function loadDocApp() { diff --git a/sop-website/sop-website-frontend/src/views/doc/api/index.vue b/sop-website/sop-website-frontend/src/views/doc/api/index.vue index bc072249..f927c7be 100644 --- a/sop-website/sop-website-frontend/src/views/doc/api/index.vue +++ b/sop-website/sop-website-frontend/src/views/doc/api/index.vue @@ -1,23 +1,19 @@