Commit 777f5860c19de8e1d4a5027b54888f782246fa64
1 parent
19ef73f7
调度预案与调度操作记录
Showing
78 changed files
with
3766 additions
and
6 deletions
Too many changes to show.
To preserve performance only 78 of 84 files are displayed.
src/main/java/com/bsth/controller/realcontrol/ScheduleRealInfoController.java
| ... | ... | @@ -890,8 +890,8 @@ public class ScheduleRealInfoController extends BaseController<ScheduleRealInfo, |
| 890 | 890 | * @param ids |
| 891 | 891 | * @return |
| 892 | 892 | */ |
| 893 | - @RequestMapping(value = "thissch/{ids}", method = RequestMethod.POST) | |
| 894 | - public ScheduleRealInfo thissch(@RequestParam Integer ids){ | |
| 895 | - return scheduleRealInfoService.thissch(ids); | |
| 893 | + @RequestMapping(value = "thissch/{id}", method = RequestMethod.POST) | |
| 894 | + public ScheduleRealInfo thissch(@RequestParam Integer id){ | |
| 895 | + return scheduleRealInfoService.thissch(id); | |
| 896 | 896 | } |
| 897 | 897 | } | ... | ... |
src/main/java/com/bsth/controller/zndd/LoggerZnddController.java
| ... | ... | @@ -2,10 +2,24 @@ package com.bsth.controller.zndd; |
| 2 | 2 | |
| 3 | 3 | import com.bsth.controller.BaseController; |
| 4 | 4 | import com.bsth.entity.zndd.LoggerZndd; |
| 5 | +import com.bsth.service.zndd.LoggerZnddService; | |
| 6 | +import org.springframework.beans.factory.annotation.Autowired; | |
| 5 | 7 | import org.springframework.web.bind.annotation.RequestMapping; |
| 8 | +import org.springframework.web.bind.annotation.RequestParam; | |
| 6 | 9 | import org.springframework.web.bind.annotation.RestController; |
| 7 | 10 | |
| 11 | +import java.util.List; | |
| 12 | +import java.util.Map; | |
| 13 | + | |
| 8 | 14 | @RestController |
| 9 | 15 | @RequestMapping("logZndd") |
| 10 | 16 | public class LoggerZnddController extends BaseController<LoggerZndd, Integer> { |
| 17 | + | |
| 18 | + @Autowired | |
| 19 | + LoggerZnddService loggerZnddService; | |
| 20 | + @RequestMapping("listall") | |
| 21 | + public List<Map<String, Object>> listAll(@RequestParam Map<String, Object> map){ | |
| 22 | + | |
| 23 | + return loggerZnddService.listAll(map); | |
| 24 | + } | |
| 11 | 25 | } | ... | ... |
src/main/java/com/bsth/controller/zndd/ZnddYuAnConroller.java
0 → 100644
| 1 | +package com.bsth.controller.zndd; | |
| 2 | + | |
| 3 | +import com.bsth.controller.BaseController; | |
| 4 | +import com.bsth.entity.zndd.ZnddYuAn; | |
| 5 | +import com.bsth.service.zndd.ZnddYuAnService; | |
| 6 | +import org.springframework.beans.factory.annotation.Autowired; | |
| 7 | +import org.springframework.web.bind.annotation.*; | |
| 8 | + | |
| 9 | +import java.util.Map; | |
| 10 | + | |
| 11 | +@RestController | |
| 12 | +@RequestMapping("zndya") | |
| 13 | +public class ZnddYuAnConroller extends BaseController<ZnddYuAn, Integer> { | |
| 14 | + | |
| 15 | + @Autowired | |
| 16 | + ZnddYuAnService znddYuAnService; | |
| 17 | + | |
| 18 | + //添加类型 | |
| 19 | + | |
| 20 | + @RequestMapping(value = "/addMap", method = RequestMethod.POST) | |
| 21 | + public Map<String, Object> addMap(@RequestBody Map<String, Object> params){ | |
| 22 | + return znddYuAnService.addMap(params); | |
| 23 | + } | |
| 24 | +} | ... | ... |
src/main/java/com/bsth/data/zndd/AutomaticSch.java
| ... | ... | @@ -120,7 +120,7 @@ public class AutomaticSch { |
| 120 | 120 | } |
| 121 | 121 | } |
| 122 | 122 | |
| 123 | - ScheduleRealInfo sr = dayOfSchedule.findByNbbm("W8A-009").get(0); | |
| 123 | + ScheduleRealInfo sr = dayOfSchedule.findByNbbm("W8A-027").get(0); | |
| 124 | 124 | ts(addStationPeople(sr, "DKL", 0L));//大客流 |
| 125 | 125 | |
| 126 | 126 | ... | ... |
src/main/java/com/bsth/repository/zndd/ZnddYuAnRepository.java
0 → 100644
| 1 | +package com.bsth.repository.zndd; | |
| 2 | + | |
| 3 | + | |
| 4 | +import com.bsth.entity.zndd.ZnddYuAn; | |
| 5 | +import com.bsth.repository.BaseRepository; | |
| 6 | +import org.springframework.data.jpa.repository.Modifying; | |
| 7 | +import org.springframework.data.jpa.repository.Query; | |
| 8 | +import org.springframework.stereotype.Repository; | |
| 9 | + | |
| 10 | +@Repository | |
| 11 | +public interface ZnddYuAnRepository extends BaseRepository<ZnddYuAn, Integer> { | |
| 12 | + @Modifying | |
| 13 | + @Query(value="delete from ZnddYuAn sr where sr.type = ?1") | |
| 14 | + void deleteType(String type); | |
| 15 | +} | ... | ... |
src/main/java/com/bsth/security/ResourcesConfig.java
0 → 100644
| 1 | +package com.bsth.security; | |
| 2 | + | |
| 3 | +import org.springframework.beans.factory.annotation.Value; | |
| 4 | +import org.springframework.context.annotation.Configuration; | |
| 5 | +import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; | |
| 6 | +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; | |
| 7 | + | |
| 8 | +/** | |
| 9 | + * 通用配置 | |
| 10 | + * | |
| 11 | + * @author ruoyi | |
| 12 | + */ | |
| 13 | +@Configuration | |
| 14 | +public class ResourcesConfig implements WebMvcConfigurer | |
| 15 | +{ | |
| 16 | + | |
| 17 | + @Value("${dc.imgurl}") | |
| 18 | + private String imgurl; //存储图片地址 | |
| 19 | + //映射图片地址 | |
| 20 | + @Override | |
| 21 | + public void addResourceHandlers(ResourceHandlerRegistry registry) | |
| 22 | + { | |
| 23 | + /** 本地文件上传路径 */ | |
| 24 | + registry.addResourceHandler("profile" + "/**") | |
| 25 | + .addResourceLocations("file:" + imgurl + "/"); | |
| 26 | + } | |
| 27 | + | |
| 28 | + | |
| 29 | +} | |
| 0 | 30 | \ No newline at end of file | ... | ... |
src/main/java/com/bsth/service/zndd/LoggerZnddService.java
| ... | ... | @@ -3,5 +3,11 @@ package com.bsth.service.zndd; |
| 3 | 3 | import com.bsth.entity.zndd.LoggerZndd; |
| 4 | 4 | import com.bsth.service.BaseService; |
| 5 | 5 | |
| 6 | +import java.util.List; | |
| 7 | +import java.util.Map; | |
| 8 | + | |
| 6 | 9 | public interface LoggerZnddService extends BaseService<LoggerZndd, Integer> { |
| 10 | + | |
| 11 | + | |
| 12 | + List<Map<String, Object>> listAll(Map<String, Object> map); | |
| 7 | 13 | } | ... | ... |
src/main/java/com/bsth/service/zndd/ZnddYuAnService.java
0 → 100644
| 1 | +package com.bsth.service.zndd; | |
| 2 | + | |
| 3 | +import com.bsth.entity.GeoPremise; | |
| 4 | +import com.bsth.entity.zndd.ZnddYuAn; | |
| 5 | +import com.bsth.service.BaseService; | |
| 6 | + | |
| 7 | +import java.util.Map; | |
| 8 | + | |
| 9 | +public interface ZnddYuAnService extends BaseService<ZnddYuAn, Integer> { | |
| 10 | + | |
| 11 | + | |
| 12 | + Map<String, Object> addMap(Map<String, Object> params); | |
| 13 | +} | ... | ... |
src/main/java/com/bsth/service/zndd/impl/LoggerZnddServiceImpl.java
| 1 | 1 | package com.bsth.service.zndd.impl; |
| 2 | 2 | |
| 3 | +import com.bsth.entity.search.CustomerSpecs; | |
| 3 | 4 | import com.bsth.entity.zndd.LoggerZndd; |
| 5 | +import com.bsth.repository.zndd.LoggerZnddRepository; | |
| 4 | 6 | import com.bsth.service.impl.BaseServiceImpl; |
| 5 | 7 | import com.bsth.service.zndd.LoggerZnddService; |
| 8 | +import org.apache.poi.ss.formula.functions.T; | |
| 9 | +import org.springframework.beans.factory.annotation.Autowired; | |
| 10 | +import org.springframework.data.domain.Pageable; | |
| 11 | + | |
| 12 | +import org.springframework.data.domain.Sort; | |
| 6 | 13 | import org.springframework.stereotype.Service; |
| 7 | 14 | |
| 15 | +import java.util.List; | |
| 16 | +import java.util.Map; | |
| 17 | + | |
| 8 | 18 | @Service |
| 9 | 19 | public class LoggerZnddServiceImpl extends BaseServiceImpl<LoggerZndd, Integer> implements LoggerZnddService { |
| 20 | + | |
| 21 | + @Autowired | |
| 22 | + LoggerZnddRepository loggerZnddRepository; | |
| 23 | + public List<Map<String, Object>> listAll(Map<String, Object> map){ | |
| 24 | + loggerZnddRepository.findAll((Sort) map); | |
| 25 | + | |
| 26 | + return null; | |
| 27 | + } | |
| 10 | 28 | } | ... | ... |
src/main/java/com/bsth/service/zndd/impl/ZnddYuAnServiceImpl.java
0 → 100644
| 1 | +package com.bsth.service.zndd.impl; | |
| 2 | + | |
| 3 | +import com.alibaba.fastjson.JSON; | |
| 4 | +import com.alibaba.fastjson.JSONObject; | |
| 5 | +import com.bsth.common.ResponseCode; | |
| 6 | +import com.bsth.entity.zndd.ZnddYuAn; | |
| 7 | +import com.bsth.repository.zndd.ZnddYuAnRepository; | |
| 8 | +import com.bsth.service.impl.BaseServiceImpl; | |
| 9 | +import com.bsth.service.zndd.ZnddYuAnService; | |
| 10 | +import org.slf4j.Logger; | |
| 11 | +import org.slf4j.LoggerFactory; | |
| 12 | +import org.springframework.beans.factory.annotation.Autowired; | |
| 13 | +import org.springframework.stereotype.Service; | |
| 14 | +import org.springframework.transaction.annotation.Transactional; | |
| 15 | + | |
| 16 | +import java.util.Arrays; | |
| 17 | +import java.util.HashMap; | |
| 18 | +import java.util.List; | |
| 19 | +import java.util.Map; | |
| 20 | + | |
| 21 | +@Service | |
| 22 | +public class ZnddYuAnServiceImpl extends BaseServiceImpl<ZnddYuAn, Integer> implements ZnddYuAnService { | |
| 23 | + | |
| 24 | + | |
| 25 | + Logger logger = LoggerFactory.getLogger(this.getClass()); | |
| 26 | + @Autowired | |
| 27 | + ZnddYuAnRepository znddYuAnRepository; | |
| 28 | + | |
| 29 | + @Override | |
| 30 | + @Transactional | |
| 31 | + public Map<String, Object> addMap(Map<String, Object> params){ | |
| 32 | + Map<String, Object> rs = new HashMap<>(); | |
| 33 | + | |
| 34 | + try { | |
| 35 | + List<Map> list = JSON.parseArray(params.get("data").toString(), Map.class); | |
| 36 | + | |
| 37 | + List<Map> listlineks = JSON.parseArray(params.get("links").toString(), Map.class); | |
| 38 | + | |
| 39 | + znddYuAnRepository.deleteType(params.get("type").toString()); | |
| 40 | + for (Map m : list){ | |
| 41 | + ZnddYuAn zya = new ZnddYuAn(); | |
| 42 | + String s = JSONObject.toJSONString(m); | |
| 43 | + zya.setType(params.get("type").toString()); | |
| 44 | + zya.setJsonDate(s); | |
| 45 | + zya.setTypes("0"); | |
| 46 | + znddYuAnRepository.save(zya); | |
| 47 | + } | |
| 48 | + for (Map m : listlineks) { | |
| 49 | + ZnddYuAn zya = new ZnddYuAn(); | |
| 50 | + String s = JSONObject.toJSONString(m); | |
| 51 | + zya.setType(params.get("type").toString()); | |
| 52 | + zya.setJsonDate(s); | |
| 53 | + zya.setTypes("1"); | |
| 54 | + znddYuAnRepository.save(zya); | |
| 55 | + } | |
| 56 | + rs.put("status", ResponseCode.SUCCESS); | |
| 57 | + }catch (Exception e){ | |
| 58 | + logger.info("调度预案添加-"+e); | |
| 59 | + rs.put("ERROR", "操作失败,请检查数据是否有误!"); | |
| 60 | + } | |
| 61 | + | |
| 62 | + return rs; | |
| 63 | + } | |
| 64 | +} | ... | ... |
src/main/resources/static/pages/forms/zndd/logger_zndd.html
| ... | ... | @@ -50,7 +50,6 @@ |
| 50 | 50 | <input class="btn btn-default" type="button" id="query" value="筛选"/> |
| 51 | 51 | <input class="btn btn-default" type="button" id="export" value="导出"/> |
| 52 | 52 | </div> |
| 53 | - <img src="/profile/avatar/2024/04/07/blob_20240407160316A002.png"> | |
| 54 | 53 | </form> |
| 55 | 54 | </div> |
| 56 | 55 | <div class="portlet-body"> |
| ... | ... | @@ -188,6 +187,11 @@ |
| 188 | 187 | $get('/logZndd/all',{rq_eq:date,lineCode_eq:line,type:'query'},function(result){ |
| 189 | 188 | $("#form_line").text(lineName); |
| 190 | 189 | $("#form_date").text(date); |
| 190 | + | |
| 191 | + $.each(result, function(i, obj) { | |
| 192 | + obj.createDate = moment(obj.createDate).format("YYYY-MM-DD HH:mm:ss"); | |
| 193 | + }); | |
| 194 | + | |
| 191 | 195 | // 把数据填充到模版中 |
| 192 | 196 | var tbodyHtml = template('dailyInfo',{list:result}); |
| 193 | 197 | // 把渲染好的模版html文本追加到表格中 |
| ... | ... | @@ -239,7 +243,7 @@ |
| 239 | 243 | fgsdmDaily = $("#fgsdmDaily").val(); |
| 240 | 244 | lineName=$("#select2-line-container").html(); |
| 241 | 245 | var i = layer.load(2); |
| 242 | - $post('/znddLogger/list',{gsdmDaily:gsdmDaily,fgsdmDaily:fgsdmDaily,line:line,date:date,type:'export',lineName:lineName},function(result){ | |
| 246 | + $get('/logZndd/listall',{rq_eq:date,lineCode_eq:line,type:'export'},function(result){ | |
| 243 | 247 | window.open("/downloadFile/download?fileName=" |
| 244 | 248 | +moment(date).format("YYYYMMDD")+"-"+lineName+"-班次日报表"); |
| 245 | 249 | layer.close(i); | ... | ... |
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/Blueprint.Net.Server.csproj
0 → 100644
| 1 | +<Project Sdk="Microsoft.NET.Sdk.Web"> | |
| 2 | + | |
| 3 | + <PropertyGroup> | |
| 4 | + <TargetFramework>net8.0</TargetFramework> | |
| 5 | + <Nullable>enable</Nullable> | |
| 6 | + <ImplicitUsings>enable</ImplicitUsings> | |
| 7 | + </PropertyGroup> | |
| 8 | + | |
| 9 | + <ItemGroup> | |
| 10 | + <PackageReference Include="FreeSql" Version="3.2.821" /> | |
| 11 | + <PackageReference Include="FreeSql.Provider.Sqlite" Version="3.2.821" /> | |
| 12 | + <PackageReference Include="FreeSql.Repository" Version="3.2.821" /> | |
| 13 | + <PackageReference Include="Swashbuckle.AspNetCore" Version="6.4.0" /> | |
| 14 | + </ItemGroup> | |
| 15 | + | |
| 16 | +</Project> | ... | ... |
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/Blueprint.Net.Server.sln
0 → 100644
| 1 | + | |
| 2 | +Microsoft Visual Studio Solution File, Format Version 12.00 | |
| 3 | +# Visual Studio Version 17 | |
| 4 | +VisualStudioVersion = 17.9.34622.214 | |
| 5 | +MinimumVisualStudioVersion = 10.0.40219.1 | |
| 6 | +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Blueprint.Net.Server", "Blueprint.Net.Server.csproj", "{650D80E6-03AB-40D8-A1DD-C9A42DF92249}" | |
| 7 | +EndProject | |
| 8 | +Global | |
| 9 | + GlobalSection(SolutionConfigurationPlatforms) = preSolution | |
| 10 | + Debug|Any CPU = Debug|Any CPU | |
| 11 | + Release|Any CPU = Release|Any CPU | |
| 12 | + EndGlobalSection | |
| 13 | + GlobalSection(ProjectConfigurationPlatforms) = postSolution | |
| 14 | + {650D80E6-03AB-40D8-A1DD-C9A42DF92249}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | |
| 15 | + {650D80E6-03AB-40D8-A1DD-C9A42DF92249}.Debug|Any CPU.Build.0 = Debug|Any CPU | |
| 16 | + {650D80E6-03AB-40D8-A1DD-C9A42DF92249}.Release|Any CPU.ActiveCfg = Release|Any CPU | |
| 17 | + {650D80E6-03AB-40D8-A1DD-C9A42DF92249}.Release|Any CPU.Build.0 = Release|Any CPU | |
| 18 | + EndGlobalSection | |
| 19 | + GlobalSection(SolutionProperties) = preSolution | |
| 20 | + HideSolutionNode = FALSE | |
| 21 | + EndGlobalSection | |
| 22 | + GlobalSection(ExtensibilityGlobals) = postSolution | |
| 23 | + SolutionGuid = {6CE115DF-4AF8-4EB9-8A99-04F0BED024AC} | |
| 24 | + EndGlobalSection | |
| 25 | +EndGlobal | ... | ... |
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/Controllers/BlueprintController.cs
0 → 100644
| 1 | +using Microsoft.AspNetCore.Mvc; | |
| 2 | +using System.Collections.Frozen; | |
| 3 | +using System.Linq; | |
| 4 | +using System.Xml.Linq; | |
| 5 | +using static FreeSql.Internal.GlobalFilter; | |
| 6 | + | |
| 7 | +namespace Blueprint.Net.Server.Controllers | |
| 8 | +{ | |
| 9 | + [ApiController] | |
| 10 | + [Route("[controller]")] | |
| 11 | + public class BlueprintController(ILogger<BlueprintController> logger, IFreeSql fsql) : ControllerBase | |
| 12 | + { | |
| 13 | + private readonly ILogger<BlueprintController> _logger = logger; | |
| 14 | + private readonly IFreeSql _fsql = fsql; | |
| 15 | + | |
| 16 | + [HttpGet("GetProjects")] | |
| 17 | + public async Task<ActionResult<IEnumerable<Project>>> GetProjects() | |
| 18 | + { | |
| 19 | + var projects = await _fsql.Select<Project>() | |
| 20 | + .IncludeMany(p => p.Workspaces, a => a.IncludeMany(b => b.Links)) | |
| 21 | + .IncludeMany(p => p.Workspaces, a => a.IncludeMany(b => b.Cards)) | |
| 22 | + .IncludeMany(p => p.Workspaces, a => a.IncludeMany(b => b.Cards, c => c.IncludeMany(d => d.Nodes))) | |
| 23 | + .ToListAsync(); | |
| 24 | + | |
| 25 | + List<long> linkIds = []; | |
| 26 | + List<long> workspaceIds = []; | |
| 27 | + | |
| 28 | + foreach (var project in projects) | |
| 29 | + { | |
| 30 | + foreach (var workspace in project.Workspaces) | |
| 31 | + { | |
| 32 | + workspaceIds.Add(workspace.Id); | |
| 33 | + | |
| 34 | + } | |
| 35 | + } | |
| 36 | + | |
| 37 | + var links = await _fsql.Select<Link>().Where(p => workspaceIds.Contains(p.WorkspaceId)).ToListAsync(); | |
| 38 | + | |
| 39 | + foreach (var link in links) | |
| 40 | + { | |
| 41 | + linkIds.Add(link.SourceId); | |
| 42 | + linkIds.Add(link.TargetId); | |
| 43 | + } | |
| 44 | + | |
| 45 | + var nodeConnectInfos = await _fsql.Select<NodeConnectInfo>().Where(p => linkIds.Contains(p.Id)).ToListAsync(); | |
| 46 | + | |
| 47 | + foreach (var project in projects) | |
| 48 | + { | |
| 49 | + foreach (var workspace in project.Workspaces) | |
| 50 | + { | |
| 51 | + | |
| 52 | + foreach (var link in links.Where(p => p.WorkspaceId == workspace.Id)) | |
| 53 | + { | |
| 54 | + link.Source = nodeConnectInfos.FirstOrDefault(p => p.Id == link.SourceId) ?? new(); | |
| 55 | + link.Target = nodeConnectInfos.FirstOrDefault(p => p.Id == link.TargetId) ?? new(); | |
| 56 | + | |
| 57 | + workspace.Links.Add(link); | |
| 58 | + } | |
| 59 | + } | |
| 60 | + } | |
| 61 | + | |
| 62 | + | |
| 63 | + return Ok(projects); | |
| 64 | + } | |
| 65 | + | |
| 66 | + [HttpPost("Project")] | |
| 67 | + public async Task<ActionResult<Project>> Project([FromBody] Project project) | |
| 68 | + { | |
| 69 | + | |
| 70 | + var projectRepo = _fsql.GetRepository<Project>(); | |
| 71 | + | |
| 72 | + projectRepo.DbContextOptions.EnableCascadeSave = true; | |
| 73 | + | |
| 74 | + project = await projectRepo.InsertOrUpdateAsync(project); | |
| 75 | + projectRepo.Attach(project); | |
| 76 | + | |
| 77 | + foreach (var workspaces in project.Workspaces) | |
| 78 | + { | |
| 79 | + foreach (var node in workspaces.Links) | |
| 80 | + { | |
| 81 | + | |
| 82 | + if (node.SourceId == 0) | |
| 83 | + { | |
| 84 | + node.SourceId = await _fsql.Insert(node.Source).ExecuteIdentityAsync(); | |
| 85 | + node.Source.Id = node.SourceId; | |
| 86 | + } | |
| 87 | + else | |
| 88 | + { | |
| 89 | + await _fsql.Update<NodeConnectInfo>().SetSource(node.Source).Where(p => p.Id == node.SourceId).ExecuteAffrowsAsync(); | |
| 90 | + } | |
| 91 | + | |
| 92 | + if (node.TargetId == 0) | |
| 93 | + { | |
| 94 | + node.TargetId = await _fsql.Insert(node.Target).ExecuteIdentityAsync(); | |
| 95 | + node.Target.Id = node.TargetId; | |
| 96 | + } | |
| 97 | + else | |
| 98 | + { | |
| 99 | + await _fsql.Update<NodeConnectInfo>().SetSource(node.Target).Where(p => p.Id == node.TargetId).ExecuteAffrowsAsync(); | |
| 100 | + } | |
| 101 | + } | |
| 102 | + } | |
| 103 | + await projectRepo.UpdateAsync(project); | |
| 104 | + | |
| 105 | + return Ok(project); | |
| 106 | + | |
| 107 | + } | |
| 108 | + | |
| 109 | + | |
| 110 | + [HttpDelete("DeleteProject/{id}")] | |
| 111 | + public async Task<IActionResult> DeleteProject(long id) | |
| 112 | + { | |
| 113 | + | |
| 114 | + var repo = _fsql.GetRepository<Project>(); | |
| 115 | + | |
| 116 | + repo.DbContextOptions.EnableCascadeSave = true; | |
| 117 | + | |
| 118 | + var project = await repo.Select | |
| 119 | + .IncludeMany(p => p.Workspaces, a => a.IncludeMany(b => b.Cards, c => c.IncludeMany(d => d.Nodes))) | |
| 120 | + .IncludeMany(p => p.Workspaces, a => a.IncludeMany(b => b.Links)) | |
| 121 | + .Where(p => p.Id == id) | |
| 122 | + .FirstAsync(); | |
| 123 | + | |
| 124 | + var deleteIds = new List<long>(); | |
| 125 | + | |
| 126 | + foreach (var workspace in project.Workspaces) | |
| 127 | + { | |
| 128 | + foreach (var node in workspace.Links) | |
| 129 | + { | |
| 130 | + deleteIds.Add(node.SourceId); | |
| 131 | + deleteIds.Add(node.TargetId); | |
| 132 | + } | |
| 133 | + } | |
| 134 | + await _fsql.Delete<NodeConnectInfo>().Where(p => deleteIds.Contains(p.Id)).ExecuteAffrowsAsync(); | |
| 135 | + | |
| 136 | + var ret = await repo.DeleteAsync(project); | |
| 137 | + if (ret > 0) | |
| 138 | + return Ok(); | |
| 139 | + return NotFound(); | |
| 140 | + } | |
| 141 | + [HttpDelete("DeleteWorkspace/{id}")] | |
| 142 | + public async Task<IActionResult> DeleteWorkspace(long id) | |
| 143 | + { | |
| 144 | + var repo = _fsql.GetRepository<Workspace>(); | |
| 145 | + | |
| 146 | + repo.DbContextOptions.EnableCascadeSave = true; | |
| 147 | + | |
| 148 | + var workspace = await repo.Select | |
| 149 | + .IncludeMany(p => p.Cards, a => a.IncludeMany(b => b.Nodes)) | |
| 150 | + .IncludeMany(p => p.Links) | |
| 151 | + .Where(p => p.Id == id) | |
| 152 | + .FirstAsync(); | |
| 153 | + | |
| 154 | + | |
| 155 | + var deleteIds = new List<long>(); | |
| 156 | + | |
| 157 | + foreach (var node in workspace.Links) | |
| 158 | + { | |
| 159 | + deleteIds.Add(node.SourceId); | |
| 160 | + deleteIds.Add(node.TargetId); | |
| 161 | + } | |
| 162 | + await _fsql.Delete<NodeConnectInfo>().Where(p => deleteIds.Contains(p.Id)).ExecuteAffrowsAsync(); | |
| 163 | + | |
| 164 | + var ret = await repo.DeleteAsync(workspace); | |
| 165 | + if (ret > 0) | |
| 166 | + return Ok(); | |
| 167 | + return NotFound(); | |
| 168 | + } | |
| 169 | + | |
| 170 | + [HttpDelete("DeleteLink/{id}")] | |
| 171 | + public async Task<IActionResult> DeleteLink(long id) | |
| 172 | + { | |
| 173 | + var repo = _fsql.GetRepository<Link>(); | |
| 174 | + | |
| 175 | + repo.DbContextOptions.EnableCascadeSave = true; | |
| 176 | + | |
| 177 | + var link = await repo.Select.Where(p => p.Id == id).FirstAsync(); | |
| 178 | + | |
| 179 | + | |
| 180 | + var deleteIds = new List<long> | |
| 181 | + { | |
| 182 | + link.SourceId, | |
| 183 | + link.TargetId | |
| 184 | + }; | |
| 185 | + | |
| 186 | + await _fsql.Delete<NodeConnectInfo>().Where(p => deleteIds.Contains(p.Id)).ExecuteAffrowsAsync(); | |
| 187 | + | |
| 188 | + var ret = await repo.DeleteAsync(link); | |
| 189 | + if (ret > 0) | |
| 190 | + return Ok(); | |
| 191 | + return NotFound(); | |
| 192 | + } | |
| 193 | + | |
| 194 | + [HttpDelete("DeleteCard/{id}")] | |
| 195 | + public async Task<IActionResult> DeleteCard(long id) | |
| 196 | + { | |
| 197 | + var repo = _fsql.GetRepository<Card>(); | |
| 198 | + | |
| 199 | + repo.DbContextOptions.EnableCascadeSave = true; | |
| 200 | + | |
| 201 | + var card = await repo.Select.IncludeMany(p => p.Nodes).Where(p => p.Id == id).FirstAsync(); | |
| 202 | + | |
| 203 | + var ret = await repo.DeleteAsync(card); | |
| 204 | + if (ret > 0) | |
| 205 | + return Ok(); | |
| 206 | + return NotFound(); | |
| 207 | + } | |
| 208 | + | |
| 209 | + } | |
| 210 | +} | ... | ... |
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/Models.cs
0 → 100644
| 1 | +using FreeSql.DataAnnotations; | |
| 2 | +using System.ComponentModel.DataAnnotations; | |
| 3 | +using System.Text.RegularExpressions; | |
| 4 | + | |
| 5 | +namespace Blueprint.Net.Server | |
| 6 | +{ | |
| 7 | + public class Card | |
| 8 | + { | |
| 9 | + [Column(IsIdentity = true, IsPrimary = true)] public long Id { get; set; } | |
| 10 | + public long WorkspaceId { get; set; } | |
| 11 | + public int X { get; set; } | |
| 12 | + public int Y { get; set; } | |
| 13 | + public string Label { get; set; } | |
| 14 | + public string Type { get; set; } | |
| 15 | + [Navigate(nameof(CardNodeInfo.CardId))] public List<CardNodeInfo> Nodes { get; set; } = []; | |
| 16 | + public List<string> TitleBarColor { get; set; } = []; | |
| 17 | + } | |
| 18 | + | |
| 19 | + public class Link | |
| 20 | + { | |
| 21 | + [Column(IsIdentity = true, IsPrimary = true)] public long Id { get; set; } | |
| 22 | + public long WorkspaceId { get; set; } | |
| 23 | + | |
| 24 | + [Navigate(nameof(SourceId))] public NodeConnectInfo Source { get; set; } | |
| 25 | + | |
| 26 | + [Navigate(nameof(TargetId))] public NodeConnectInfo Target { get; set; } | |
| 27 | + | |
| 28 | + public long SourceId { get; set; } | |
| 29 | + public long TargetId { get; set; } | |
| 30 | + | |
| 31 | + } | |
| 32 | + | |
| 33 | + public class NodeConnectInfo | |
| 34 | + { | |
| 35 | + [Column(IsIdentity = true, IsPrimary = true)] public long Id { get; set; } | |
| 36 | + public string Node { get; set; } | |
| 37 | + public int X { get; set; } | |
| 38 | + public int Y { get; set; } | |
| 39 | + public string Color { get; set; } | |
| 40 | + public string EnumType { get; set; } | |
| 41 | + } | |
| 42 | + | |
| 43 | + public class CardNodeInfo | |
| 44 | + { | |
| 45 | + [Column(IsIdentity = true, IsPrimary = true)] public long Id { get; set; } | |
| 46 | + | |
| 47 | + public long CardId { get; set; } | |
| 48 | + public string Type { get; set; } | |
| 49 | + public int Level { get; set; } | |
| 50 | + public string EnumType { get; set; } | |
| 51 | + public string Color { get; set; } | |
| 52 | + public int? MultiConnected { get; set; } | |
| 53 | + public string Slot { get; set; } | |
| 54 | + public string Label { get; set; } | |
| 55 | + public string Value { get; set; } | |
| 56 | + } | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + public class Project | |
| 63 | + { | |
| 64 | + [Column(IsIdentity = true, IsPrimary = true)] public long Id { get; set; } | |
| 65 | + public string Name { get; set; } | |
| 66 | + [Navigate(nameof(Workspace.ProjectId))] public List<Workspace> Workspaces { get; set; } = []; | |
| 67 | + } | |
| 68 | + | |
| 69 | + public class Workspace | |
| 70 | + { | |
| 71 | + [Column(IsIdentity = true, IsPrimary = true)] public long Id { get; set; } | |
| 72 | + public long ProjectId { get; set; } | |
| 73 | + public string Name { get; set; } | |
| 74 | + [Navigate(nameof(Card.WorkspaceId))] public List<Card> Cards { get; set; } = []; | |
| 75 | + [Navigate(nameof(Card.WorkspaceId))] public List<Link> Links { get; set; } = []; | |
| 76 | + } | |
| 77 | + | |
| 78 | +} | ... | ... |
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/Program.cs
0 → 100644
| 1 | + | |
| 2 | +namespace Blueprint.Net.Server | |
| 3 | +{ | |
| 4 | + public class Program | |
| 5 | + { | |
| 6 | + public static void Main(string[] args) | |
| 7 | + { | |
| 8 | + var builder = WebApplication.CreateBuilder(args); | |
| 9 | + | |
| 10 | + // Add services to the container. | |
| 11 | + | |
| 12 | + builder.Services.AddControllers(); | |
| 13 | + // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle | |
| 14 | + builder.Services.AddEndpointsApiExplorer(); | |
| 15 | + builder.Services.AddSwaggerGen(); | |
| 16 | + | |
| 17 | + builder.Services.AddSingleton(new FreeSql.FreeSqlBuilder() | |
| 18 | + .UseConnectionString(FreeSql.DataType.Sqlite, @"Data Source=blueprint.db") | |
| 19 | + .UseMonitorCommand(cmd => Console.WriteLine($"Sql:{cmd.CommandText}"))//监听SQL语句 | |
| 20 | + .UseAutoSyncStructure(true) //自动同步实体结构到数据库,FreeSql不会扫描程序集,只有CRUD时才会生成表。 | |
| 21 | + .Build()); | |
| 22 | + | |
| 23 | + var app = builder.Build(); | |
| 24 | + | |
| 25 | + // Configure the HTTP request pipeline. | |
| 26 | + if (app.Environment.IsDevelopment()) | |
| 27 | + { | |
| 28 | + app.UseSwagger(); | |
| 29 | + app.UseSwaggerUI(); | |
| 30 | + } | |
| 31 | + | |
| 32 | + app.UseAuthorization(); | |
| 33 | + | |
| 34 | + app.UseStaticFiles(); | |
| 35 | + | |
| 36 | + app.MapControllers(); | |
| 37 | + | |
| 38 | + app.Run(); | |
| 39 | + } | |
| 40 | + } | |
| 41 | +} | ... | ... |
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/Properties/launchSettings.json
0 → 100644
| 1 | +{ | |
| 2 | + "$schema": "http://json.schemastore.org/launchsettings.json", | |
| 3 | + "iisSettings": { | |
| 4 | + "windowsAuthentication": false, | |
| 5 | + "anonymousAuthentication": true, | |
| 6 | + "iisExpress": { | |
| 7 | + "applicationUrl": "http://localhost:19130", | |
| 8 | + "sslPort": 0 | |
| 9 | + } | |
| 10 | + }, | |
| 11 | + "profiles": { | |
| 12 | + "http": { | |
| 13 | + "commandName": "Project", | |
| 14 | + "dotnetRunMessages": true, | |
| 15 | + "launchBrowser": true, | |
| 16 | + "launchUrl": "swagger", | |
| 17 | + "applicationUrl": "http://localhost:5277", | |
| 18 | + "environmentVariables": { | |
| 19 | + "ASPNETCORE_ENVIRONMENT": "Development" | |
| 20 | + } | |
| 21 | + }, | |
| 22 | + "IIS Express": { | |
| 23 | + "commandName": "IISExpress", | |
| 24 | + "launchBrowser": true, | |
| 25 | + "launchUrl": "swagger", | |
| 26 | + "environmentVariables": { | |
| 27 | + "ASPNETCORE_ENVIRONMENT": "Development" | |
| 28 | + } | |
| 29 | + } | |
| 30 | + } | |
| 31 | +} | ... | ... |
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/appsettings.Development.json
0 → 100644
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/appsettings.json
0 → 100644
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/bin/Debug/net8.0/Blueprint.Net.Server.deps.json
0 → 100644
| 1 | +{ | |
| 2 | + "runtimeTarget": { | |
| 3 | + "name": ".NETCoreApp,Version=v8.0", | |
| 4 | + "signature": "" | |
| 5 | + }, | |
| 6 | + "compilationOptions": {}, | |
| 7 | + "targets": { | |
| 8 | + ".NETCoreApp,Version=v8.0": { | |
| 9 | + "Blueprint.Net.Server/1.0.0": { | |
| 10 | + "dependencies": { | |
| 11 | + "FreeSql": "3.2.821", | |
| 12 | + "FreeSql.Provider.Sqlite": "3.2.821", | |
| 13 | + "FreeSql.Repository": "3.2.821", | |
| 14 | + "Swashbuckle.AspNetCore": "6.4.0" | |
| 15 | + }, | |
| 16 | + "runtime": { | |
| 17 | + "Blueprint.Net.Server.dll": {} | |
| 18 | + } | |
| 19 | + }, | |
| 20 | + "FreeSql/3.2.821": { | |
| 21 | + "runtime": { | |
| 22 | + "lib/netstandard2.1/FreeSql.dll": { | |
| 23 | + "assemblyVersion": "3.2.821.0", | |
| 24 | + "fileVersion": "3.2.821.0" | |
| 25 | + } | |
| 26 | + }, | |
| 27 | + "resources": { | |
| 28 | + "lib/netstandard2.1/zh-Hans/FreeSql.resources.dll": { | |
| 29 | + "locale": "zh-Hans" | |
| 30 | + } | |
| 31 | + } | |
| 32 | + }, | |
| 33 | + "FreeSql.DbContext/3.2.821": { | |
| 34 | + "dependencies": { | |
| 35 | + "FreeSql": "3.2.821", | |
| 36 | + "Microsoft.Extensions.DependencyInjection": "8.0.0" | |
| 37 | + }, | |
| 38 | + "runtime": { | |
| 39 | + "lib/net8.0/FreeSql.DbContext.dll": { | |
| 40 | + "assemblyVersion": "3.2.821.0", | |
| 41 | + "fileVersion": "3.2.821.0" | |
| 42 | + } | |
| 43 | + }, | |
| 44 | + "resources": { | |
| 45 | + "lib/net8.0/zh-Hans/FreeSql.DbContext.resources.dll": { | |
| 46 | + "locale": "zh-Hans" | |
| 47 | + } | |
| 48 | + } | |
| 49 | + }, | |
| 50 | + "FreeSql.Provider.Sqlite/3.2.821": { | |
| 51 | + "dependencies": { | |
| 52 | + "FreeSql": "3.2.821", | |
| 53 | + "System.Data.SQLite.Core": "1.0.115.5" | |
| 54 | + }, | |
| 55 | + "runtime": { | |
| 56 | + "lib/netstandard2.0/FreeSql.Provider.Sqlite.dll": { | |
| 57 | + "assemblyVersion": "3.2.821.0", | |
| 58 | + "fileVersion": "3.2.821.0" | |
| 59 | + } | |
| 60 | + } | |
| 61 | + }, | |
| 62 | + "FreeSql.Repository/3.2.821": { | |
| 63 | + "dependencies": { | |
| 64 | + "FreeSql.DbContext": "3.2.821" | |
| 65 | + }, | |
| 66 | + "runtime": { | |
| 67 | + "lib/net8.0/FreeSql.Repository.dll": { | |
| 68 | + "assemblyVersion": "3.2.821.0", | |
| 69 | + "fileVersion": "3.2.821.0" | |
| 70 | + } | |
| 71 | + } | |
| 72 | + }, | |
| 73 | + "Microsoft.Extensions.ApiDescription.Server/6.0.5": {}, | |
| 74 | + "Microsoft.Extensions.DependencyInjection/8.0.0": { | |
| 75 | + "dependencies": { | |
| 76 | + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0" | |
| 77 | + } | |
| 78 | + }, | |
| 79 | + "Microsoft.Extensions.DependencyInjection.Abstractions/8.0.0": {}, | |
| 80 | + "Microsoft.OpenApi/1.2.3": { | |
| 81 | + "runtime": { | |
| 82 | + "lib/netstandard2.0/Microsoft.OpenApi.dll": { | |
| 83 | + "assemblyVersion": "1.2.3.0", | |
| 84 | + "fileVersion": "1.2.3.0" | |
| 85 | + } | |
| 86 | + } | |
| 87 | + }, | |
| 88 | + "Stub.System.Data.SQLite.Core.NetStandard/1.0.115.5": { | |
| 89 | + "runtime": { | |
| 90 | + "lib/netstandard2.1/System.Data.SQLite.dll": { | |
| 91 | + "assemblyVersion": "1.0.115.5", | |
| 92 | + "fileVersion": "1.0.115.5" | |
| 93 | + } | |
| 94 | + }, | |
| 95 | + "runtimeTargets": { | |
| 96 | + "runtimes/linux-x64/native/SQLite.Interop.dll": { | |
| 97 | + "rid": "linux-x64", | |
| 98 | + "assetType": "native", | |
| 99 | + "fileVersion": "0.0.0.0" | |
| 100 | + }, | |
| 101 | + "runtimes/osx-x64/native/SQLite.Interop.dll": { | |
| 102 | + "rid": "osx-x64", | |
| 103 | + "assetType": "native", | |
| 104 | + "fileVersion": "0.0.0.0" | |
| 105 | + }, | |
| 106 | + "runtimes/win-x64/native/SQLite.Interop.dll": { | |
| 107 | + "rid": "win-x64", | |
| 108 | + "assetType": "native", | |
| 109 | + "fileVersion": "1.0.115.5" | |
| 110 | + }, | |
| 111 | + "runtimes/win-x86/native/SQLite.Interop.dll": { | |
| 112 | + "rid": "win-x86", | |
| 113 | + "assetType": "native", | |
| 114 | + "fileVersion": "1.0.115.5" | |
| 115 | + } | |
| 116 | + } | |
| 117 | + }, | |
| 118 | + "Swashbuckle.AspNetCore/6.4.0": { | |
| 119 | + "dependencies": { | |
| 120 | + "Microsoft.Extensions.ApiDescription.Server": "6.0.5", | |
| 121 | + "Swashbuckle.AspNetCore.Swagger": "6.4.0", | |
| 122 | + "Swashbuckle.AspNetCore.SwaggerGen": "6.4.0", | |
| 123 | + "Swashbuckle.AspNetCore.SwaggerUI": "6.4.0" | |
| 124 | + } | |
| 125 | + }, | |
| 126 | + "Swashbuckle.AspNetCore.Swagger/6.4.0": { | |
| 127 | + "dependencies": { | |
| 128 | + "Microsoft.OpenApi": "1.2.3" | |
| 129 | + }, | |
| 130 | + "runtime": { | |
| 131 | + "lib/net6.0/Swashbuckle.AspNetCore.Swagger.dll": { | |
| 132 | + "assemblyVersion": "6.4.0.0", | |
| 133 | + "fileVersion": "6.4.0.0" | |
| 134 | + } | |
| 135 | + } | |
| 136 | + }, | |
| 137 | + "Swashbuckle.AspNetCore.SwaggerGen/6.4.0": { | |
| 138 | + "dependencies": { | |
| 139 | + "Swashbuckle.AspNetCore.Swagger": "6.4.0" | |
| 140 | + }, | |
| 141 | + "runtime": { | |
| 142 | + "lib/net6.0/Swashbuckle.AspNetCore.SwaggerGen.dll": { | |
| 143 | + "assemblyVersion": "6.4.0.0", | |
| 144 | + "fileVersion": "6.4.0.0" | |
| 145 | + } | |
| 146 | + } | |
| 147 | + }, | |
| 148 | + "Swashbuckle.AspNetCore.SwaggerUI/6.4.0": { | |
| 149 | + "runtime": { | |
| 150 | + "lib/net6.0/Swashbuckle.AspNetCore.SwaggerUI.dll": { | |
| 151 | + "assemblyVersion": "6.4.0.0", | |
| 152 | + "fileVersion": "6.4.0.0" | |
| 153 | + } | |
| 154 | + } | |
| 155 | + }, | |
| 156 | + "System.Data.SQLite.Core/1.0.115.5": { | |
| 157 | + "dependencies": { | |
| 158 | + "Stub.System.Data.SQLite.Core.NetStandard": "1.0.115.5" | |
| 159 | + } | |
| 160 | + } | |
| 161 | + } | |
| 162 | + }, | |
| 163 | + "libraries": { | |
| 164 | + "Blueprint.Net.Server/1.0.0": { | |
| 165 | + "type": "project", | |
| 166 | + "serviceable": false, | |
| 167 | + "sha512": "" | |
| 168 | + }, | |
| 169 | + "FreeSql/3.2.821": { | |
| 170 | + "type": "package", | |
| 171 | + "serviceable": true, | |
| 172 | + "sha512": "sha512-bI/CTioEq4B9k5pqaZnXBSyJCIbHoUUTJGgQJF5osgq7/9kOxZo93hmZr8Vw6n5iFG5chx6wkcn4dnJJUsAEkA==", | |
| 173 | + "path": "freesql/3.2.821", | |
| 174 | + "hashPath": "freesql.3.2.821.nupkg.sha512" | |
| 175 | + }, | |
| 176 | + "FreeSql.DbContext/3.2.821": { | |
| 177 | + "type": "package", | |
| 178 | + "serviceable": true, | |
| 179 | + "sha512": "sha512-wQWjKj7/2Iwzp5WxOE5WV/HmoVmj6fKPYGBxKB7JWxF7HudmXjeZS1Hll2ovQksqF/YujYf7SxGbDv5mU9qSGA==", | |
| 180 | + "path": "freesql.dbcontext/3.2.821", | |
| 181 | + "hashPath": "freesql.dbcontext.3.2.821.nupkg.sha512" | |
| 182 | + }, | |
| 183 | + "FreeSql.Provider.Sqlite/3.2.821": { | |
| 184 | + "type": "package", | |
| 185 | + "serviceable": true, | |
| 186 | + "sha512": "sha512-vBvvq9mDz488XWYeNQSSt8t3FCKquS4DPab7hu7QVRF0ftXRAc6rRK5axFFJZjc5ABU7aIKtu1UiKQky8z/VnA==", | |
| 187 | + "path": "freesql.provider.sqlite/3.2.821", | |
| 188 | + "hashPath": "freesql.provider.sqlite.3.2.821.nupkg.sha512" | |
| 189 | + }, | |
| 190 | + "FreeSql.Repository/3.2.821": { | |
| 191 | + "type": "package", | |
| 192 | + "serviceable": true, | |
| 193 | + "sha512": "sha512-cE/VG103FYXn2m63Xp7heYptPazNN+z+dUm9jZe2vNwV8LUCU3PbY04MD+liyQBCZ5WGCK70Pe4GXGfQzvRMLw==", | |
| 194 | + "path": "freesql.repository/3.2.821", | |
| 195 | + "hashPath": "freesql.repository.3.2.821.nupkg.sha512" | |
| 196 | + }, | |
| 197 | + "Microsoft.Extensions.ApiDescription.Server/6.0.5": { | |
| 198 | + "type": "package", | |
| 199 | + "serviceable": true, | |
| 200 | + "sha512": "sha512-Ckb5EDBUNJdFWyajfXzUIMRkhf52fHZOQuuZg/oiu8y7zDCVwD0iHhew6MnThjHmevanpxL3f5ci2TtHQEN6bw==", | |
| 201 | + "path": "microsoft.extensions.apidescription.server/6.0.5", | |
| 202 | + "hashPath": "microsoft.extensions.apidescription.server.6.0.5.nupkg.sha512" | |
| 203 | + }, | |
| 204 | + "Microsoft.Extensions.DependencyInjection/8.0.0": { | |
| 205 | + "type": "package", | |
| 206 | + "serviceable": true, | |
| 207 | + "sha512": "sha512-V8S3bsm50ig6JSyrbcJJ8bW2b9QLGouz+G1miK3UTaOWmMtFwNNNzUf4AleyDWUmTrWMLNnFSLEQtxmxgNQnNQ==", | |
| 208 | + "path": "microsoft.extensions.dependencyinjection/8.0.0", | |
| 209 | + "hashPath": "microsoft.extensions.dependencyinjection.8.0.0.nupkg.sha512" | |
| 210 | + }, | |
| 211 | + "Microsoft.Extensions.DependencyInjection.Abstractions/8.0.0": { | |
| 212 | + "type": "package", | |
| 213 | + "serviceable": true, | |
| 214 | + "sha512": "sha512-cjWrLkJXK0rs4zofsK4bSdg+jhDLTaxrkXu4gS6Y7MAlCvRyNNgwY/lJi5RDlQOnSZweHqoyvgvbdvQsRIW+hg==", | |
| 215 | + "path": "microsoft.extensions.dependencyinjection.abstractions/8.0.0", | |
| 216 | + "hashPath": "microsoft.extensions.dependencyinjection.abstractions.8.0.0.nupkg.sha512" | |
| 217 | + }, | |
| 218 | + "Microsoft.OpenApi/1.2.3": { | |
| 219 | + "type": "package", | |
| 220 | + "serviceable": true, | |
| 221 | + "sha512": "sha512-Nug3rO+7Kl5/SBAadzSMAVgqDlfGjJZ0GenQrLywJ84XGKO0uRqkunz5Wyl0SDwcR71bAATXvSdbdzPrYRYKGw==", | |
| 222 | + "path": "microsoft.openapi/1.2.3", | |
| 223 | + "hashPath": "microsoft.openapi.1.2.3.nupkg.sha512" | |
| 224 | + }, | |
| 225 | + "Stub.System.Data.SQLite.Core.NetStandard/1.0.115.5": { | |
| 226 | + "type": "package", | |
| 227 | + "serviceable": true, | |
| 228 | + "sha512": "sha512-WfrqQg6WL+r4H1sVKTenNj6ERLXUukUxqcjH1rqPqXadeIWccTVpydESieD7cZ/NWQVSKLYIHuoBX5du+BFhIQ==", | |
| 229 | + "path": "stub.system.data.sqlite.core.netstandard/1.0.115.5", | |
| 230 | + "hashPath": "stub.system.data.sqlite.core.netstandard.1.0.115.5.nupkg.sha512" | |
| 231 | + }, | |
| 232 | + "Swashbuckle.AspNetCore/6.4.0": { | |
| 233 | + "type": "package", | |
| 234 | + "serviceable": true, | |
| 235 | + "sha512": "sha512-eUBr4TW0up6oKDA5Xwkul289uqSMgY0xGN4pnbOIBqCcN9VKGGaPvHX3vWaG/hvocfGDP+MGzMA0bBBKz2fkmQ==", | |
| 236 | + "path": "swashbuckle.aspnetcore/6.4.0", | |
| 237 | + "hashPath": "swashbuckle.aspnetcore.6.4.0.nupkg.sha512" | |
| 238 | + }, | |
| 239 | + "Swashbuckle.AspNetCore.Swagger/6.4.0": { | |
| 240 | + "type": "package", | |
| 241 | + "serviceable": true, | |
| 242 | + "sha512": "sha512-nl4SBgGM+cmthUcpwO/w1lUjevdDHAqRvfUoe4Xp/Uvuzt9mzGUwyFCqa3ODBAcZYBiFoKvrYwz0rabslJvSmQ==", | |
| 243 | + "path": "swashbuckle.aspnetcore.swagger/6.4.0", | |
| 244 | + "hashPath": "swashbuckle.aspnetcore.swagger.6.4.0.nupkg.sha512" | |
| 245 | + }, | |
| 246 | + "Swashbuckle.AspNetCore.SwaggerGen/6.4.0": { | |
| 247 | + "type": "package", | |
| 248 | + "serviceable": true, | |
| 249 | + "sha512": "sha512-lXhcUBVqKrPFAQF7e/ZeDfb5PMgE8n5t6L5B6/BQSpiwxgHzmBcx8Msu42zLYFTvR5PIqE9Q9lZvSQAcwCxJjw==", | |
| 250 | + "path": "swashbuckle.aspnetcore.swaggergen/6.4.0", | |
| 251 | + "hashPath": "swashbuckle.aspnetcore.swaggergen.6.4.0.nupkg.sha512" | |
| 252 | + }, | |
| 253 | + "Swashbuckle.AspNetCore.SwaggerUI/6.4.0": { | |
| 254 | + "type": "package", | |
| 255 | + "serviceable": true, | |
| 256 | + "sha512": "sha512-1Hh3atb3pi8c+v7n4/3N80Jj8RvLOXgWxzix6w3OZhB7zBGRwsy7FWr4e3hwgPweSBpwfElqj4V4nkjYabH9nQ==", | |
| 257 | + "path": "swashbuckle.aspnetcore.swaggerui/6.4.0", | |
| 258 | + "hashPath": "swashbuckle.aspnetcore.swaggerui.6.4.0.nupkg.sha512" | |
| 259 | + }, | |
| 260 | + "System.Data.SQLite.Core/1.0.115.5": { | |
| 261 | + "type": "package", | |
| 262 | + "serviceable": true, | |
| 263 | + "sha512": "sha512-vADIqqgpxaC5xR6qOV8/KMZkQeSDCfmmWpVOtQx0oEr3Yjq2XdTxX7+jfE4+oO2xPovAbYiz6Q5cLRbSsDkq6Q==", | |
| 264 | + "path": "system.data.sqlite.core/1.0.115.5", | |
| 265 | + "hashPath": "system.data.sqlite.core.1.0.115.5.nupkg.sha512" | |
| 266 | + } | |
| 267 | + } | |
| 268 | +} | |
| 0 | 269 | \ No newline at end of file | ... | ... |
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/bin/Debug/net8.0/Blueprint.Net.Server.dll
0 → 100644
No preview for this file type
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/bin/Debug/net8.0/Blueprint.Net.Server.exe
0 → 100644
No preview for this file type
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/bin/Debug/net8.0/Blueprint.Net.Server.pdb
0 → 100644
No preview for this file type
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/bin/Debug/net8.0/Blueprint.Net.Server.runtimeconfig.json
0 → 100644
| 1 | +{ | |
| 2 | + "runtimeOptions": { | |
| 3 | + "tfm": "net8.0", | |
| 4 | + "frameworks": [ | |
| 5 | + { | |
| 6 | + "name": "Microsoft.NETCore.App", | |
| 7 | + "version": "8.0.0" | |
| 8 | + }, | |
| 9 | + { | |
| 10 | + "name": "Microsoft.AspNetCore.App", | |
| 11 | + "version": "8.0.0" | |
| 12 | + } | |
| 13 | + ], | |
| 14 | + "configProperties": { | |
| 15 | + "System.GC.Server": true, | |
| 16 | + "System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": false | |
| 17 | + } | |
| 18 | + } | |
| 19 | +} | |
| 0 | 20 | \ No newline at end of file | ... | ... |
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/bin/Debug/net8.0/Blueprint.Net.Server.staticwebassets.runtime.json
0 → 100644
| 1 | +{"ContentRoots":["E:\\Code\\Blueprint\\Blueprint.Net.Server\\wwwroot\\"],"Root":{"Children":{"index.html":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"index.html"},"Patterns":null}},"Asset":null,"Patterns":[{"ContentRootIndex":0,"Pattern":"**","Depth":0}]}} | |
| 0 | 2 | \ No newline at end of file | ... | ... |
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/bin/Debug/net8.0/FreeSql.DbContext.dll
0 → 100644
No preview for this file type
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/bin/Debug/net8.0/FreeSql.Provider.Sqlite.dll
0 → 100644
No preview for this file type
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/bin/Debug/net8.0/FreeSql.Repository.dll
0 → 100644
No preview for this file type
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/bin/Debug/net8.0/FreeSql.dll
0 → 100644
No preview for this file type
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/bin/Debug/net8.0/Microsoft.OpenApi.dll
0 → 100644
No preview for this file type
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/bin/Debug/net8.0/Swashbuckle.AspNetCore.Swagger.dll
0 → 100644
No preview for this file type
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/bin/Debug/net8.0/Swashbuckle.AspNetCore.SwaggerGen.dll
0 → 100644
No preview for this file type
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/bin/Debug/net8.0/Swashbuckle.AspNetCore.SwaggerUI.dll
0 → 100644
No preview for this file type
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/bin/Debug/net8.0/System.Data.SQLite.dll
0 → 100644
No preview for this file type
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/bin/Debug/net8.0/appsettings.Development.json
0 → 100644
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/bin/Debug/net8.0/appsettings.json
0 → 100644
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/bin/Debug/net8.0/runtimes/linux-x64/native/SQLite.Interop.dll
0 → 100644
No preview for this file type
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/bin/Debug/net8.0/runtimes/osx-x64/native/SQLite.Interop.dll
0 → 100644
No preview for this file type
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/bin/Debug/net8.0/runtimes/win-x64/native/SQLite.Interop.dll
0 → 100644
No preview for this file type
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/bin/Debug/net8.0/runtimes/win-x86/native/SQLite.Interop.dll
0 → 100644
No preview for this file type
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/bin/Debug/net8.0/zh-Hans/FreeSql.DbContext.resources.dll
0 → 100644
No preview for this file type
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/bin/Debug/net8.0/zh-Hans/FreeSql.resources.dll
0 → 100644
No preview for this file type
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/blueprint.db
0 → 100644
No preview for this file type
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/obj/Blueprint.Net.Server.csproj.nuget.dgspec.json
0 → 100644
| 1 | +{ | |
| 2 | + "format": 1, | |
| 3 | + "restore": { | |
| 4 | + "E:\\Code\\Blueprint\\Blueprint.Net.Server\\Blueprint.Net.Server.csproj": {} | |
| 5 | + }, | |
| 6 | + "projects": { | |
| 7 | + "E:\\Code\\Blueprint\\Blueprint.Net.Server\\Blueprint.Net.Server.csproj": { | |
| 8 | + "version": "1.0.0", | |
| 9 | + "restore": { | |
| 10 | + "projectUniqueName": "E:\\Code\\Blueprint\\Blueprint.Net.Server\\Blueprint.Net.Server.csproj", | |
| 11 | + "projectName": "Blueprint.Net.Server", | |
| 12 | + "projectPath": "E:\\Code\\Blueprint\\Blueprint.Net.Server\\Blueprint.Net.Server.csproj", | |
| 13 | + "packagesPath": "C:\\Users\\anan\\.nuget\\packages\\", | |
| 14 | + "outputPath": "E:\\Code\\Blueprint\\Blueprint.Net.Server\\obj\\", | |
| 15 | + "projectStyle": "PackageReference", | |
| 16 | + "fallbackFolders": [ | |
| 17 | + "C:\\Users\\anan\\AppData\\Roaming\\Godot\\mono\\GodotNuGetFallbackFolder", | |
| 18 | + "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages" | |
| 19 | + ], | |
| 20 | + "configFilePaths": [ | |
| 21 | + "C:\\Users\\anan\\AppData\\Roaming\\NuGet\\NuGet.Config", | |
| 22 | + "C:\\Users\\anan\\AppData\\Roaming\\NuGet\\config\\Godot.Offline.Config", | |
| 23 | + "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.FallbackLocation.config", | |
| 24 | + "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config" | |
| 25 | + ], | |
| 26 | + "originalTargetFrameworks": [ | |
| 27 | + "net8.0" | |
| 28 | + ], | |
| 29 | + "sources": { | |
| 30 | + "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {}, | |
| 31 | + "C:\\Program Files\\dotnet\\library-packs": {}, | |
| 32 | + "https://api.nuget.org/v3/index.json": {} | |
| 33 | + }, | |
| 34 | + "frameworks": { | |
| 35 | + "net8.0": { | |
| 36 | + "targetAlias": "net8.0", | |
| 37 | + "projectReferences": {} | |
| 38 | + } | |
| 39 | + }, | |
| 40 | + "warningProperties": { | |
| 41 | + "warnAsError": [ | |
| 42 | + "NU1605" | |
| 43 | + ] | |
| 44 | + }, | |
| 45 | + "restoreAuditProperties": { | |
| 46 | + "enableAudit": "true", | |
| 47 | + "auditLevel": "low", | |
| 48 | + "auditMode": "direct" | |
| 49 | + } | |
| 50 | + }, | |
| 51 | + "frameworks": { | |
| 52 | + "net8.0": { | |
| 53 | + "targetAlias": "net8.0", | |
| 54 | + "dependencies": { | |
| 55 | + "FreeSql": { | |
| 56 | + "target": "Package", | |
| 57 | + "version": "[3.2.821, )" | |
| 58 | + }, | |
| 59 | + "FreeSql.Provider.Sqlite": { | |
| 60 | + "target": "Package", | |
| 61 | + "version": "[3.2.821, )" | |
| 62 | + }, | |
| 63 | + "FreeSql.Repository": { | |
| 64 | + "target": "Package", | |
| 65 | + "version": "[3.2.821, )" | |
| 66 | + }, | |
| 67 | + "Swashbuckle.AspNetCore": { | |
| 68 | + "target": "Package", | |
| 69 | + "version": "[6.4.0, )" | |
| 70 | + } | |
| 71 | + }, | |
| 72 | + "imports": [ | |
| 73 | + "net461", | |
| 74 | + "net462", | |
| 75 | + "net47", | |
| 76 | + "net471", | |
| 77 | + "net472", | |
| 78 | + "net48", | |
| 79 | + "net481" | |
| 80 | + ], | |
| 81 | + "assetTargetFallback": true, | |
| 82 | + "warn": true, | |
| 83 | + "frameworkReferences": { | |
| 84 | + "Microsoft.AspNetCore.App": { | |
| 85 | + "privateAssets": "none" | |
| 86 | + }, | |
| 87 | + "Microsoft.NETCore.App": { | |
| 88 | + "privateAssets": "all" | |
| 89 | + } | |
| 90 | + }, | |
| 91 | + "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\8.0.201/PortableRuntimeIdentifierGraph.json" | |
| 92 | + } | |
| 93 | + } | |
| 94 | + } | |
| 95 | + } | |
| 96 | +} | |
| 0 | 97 | \ No newline at end of file | ... | ... |
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/obj/Blueprint.Net.Server.csproj.nuget.g.props
0 → 100644
| 1 | +<?xml version="1.0" encoding="utf-8" standalone="no"?> | |
| 2 | +<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | |
| 3 | + <PropertyGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' "> | |
| 4 | + <RestoreSuccess Condition=" '$(RestoreSuccess)' == '' ">True</RestoreSuccess> | |
| 5 | + <RestoreTool Condition=" '$(RestoreTool)' == '' ">NuGet</RestoreTool> | |
| 6 | + <ProjectAssetsFile Condition=" '$(ProjectAssetsFile)' == '' ">$(MSBuildThisFileDirectory)project.assets.json</ProjectAssetsFile> | |
| 7 | + <NuGetPackageRoot Condition=" '$(NuGetPackageRoot)' == '' ">$(UserProfile)\.nuget\packages\</NuGetPackageRoot> | |
| 8 | + <NuGetPackageFolders Condition=" '$(NuGetPackageFolders)' == '' ">C:\Users\anan\.nuget\packages\;C:\Users\anan\AppData\Roaming\Godot\mono\GodotNuGetFallbackFolder;C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages</NuGetPackageFolders> | |
| 9 | + <NuGetProjectStyle Condition=" '$(NuGetProjectStyle)' == '' ">PackageReference</NuGetProjectStyle> | |
| 10 | + <NuGetToolVersion Condition=" '$(NuGetToolVersion)' == '' ">6.9.1</NuGetToolVersion> | |
| 11 | + </PropertyGroup> | |
| 12 | + <ItemGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' "> | |
| 13 | + <SourceRoot Include="C:\Users\anan\.nuget\packages\" /> | |
| 14 | + <SourceRoot Include="C:\Users\anan\AppData\Roaming\Godot\mono\GodotNuGetFallbackFolder\" /> | |
| 15 | + <SourceRoot Include="C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages\" /> | |
| 16 | + </ItemGroup> | |
| 17 | + <ImportGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' "> | |
| 18 | + <Import Project="$(NuGetPackageRoot)microsoft.extensions.apidescription.server\6.0.5\build\Microsoft.Extensions.ApiDescription.Server.props" Condition="Exists('$(NuGetPackageRoot)microsoft.extensions.apidescription.server\6.0.5\build\Microsoft.Extensions.ApiDescription.Server.props')" /> | |
| 19 | + <Import Project="$(NuGetPackageRoot)swashbuckle.aspnetcore\6.4.0\build\Swashbuckle.AspNetCore.props" Condition="Exists('$(NuGetPackageRoot)swashbuckle.aspnetcore\6.4.0\build\Swashbuckle.AspNetCore.props')" /> | |
| 20 | + </ImportGroup> | |
| 21 | + <PropertyGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' "> | |
| 22 | + <PkgMicrosoft_Extensions_ApiDescription_Server Condition=" '$(PkgMicrosoft_Extensions_ApiDescription_Server)' == '' ">C:\Users\anan\.nuget\packages\microsoft.extensions.apidescription.server\6.0.5</PkgMicrosoft_Extensions_ApiDescription_Server> | |
| 23 | + </PropertyGroup> | |
| 24 | +</Project> | |
| 0 | 25 | \ No newline at end of file | ... | ... |
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/obj/Blueprint.Net.Server.csproj.nuget.g.targets
0 → 100644
| 1 | +<?xml version="1.0" encoding="utf-8" standalone="no"?> | |
| 2 | +<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | |
| 3 | + <ImportGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' "> | |
| 4 | + <Import Project="$(NuGetPackageRoot)microsoft.extensions.apidescription.server\6.0.5\build\Microsoft.Extensions.ApiDescription.Server.targets" Condition="Exists('$(NuGetPackageRoot)microsoft.extensions.apidescription.server\6.0.5\build\Microsoft.Extensions.ApiDescription.Server.targets')" /> | |
| 5 | + </ImportGroup> | |
| 6 | +</Project> | |
| 0 | 7 | \ No newline at end of file | ... | ... |
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/obj/Debug/net8.0/.NETCoreApp,Version=v8.0.AssemblyAttributes.cs
0 → 100644
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/obj/Debug/net8.0/ApiEndpoints.json
0 → 100644
| 1 | +[ | |
| 2 | + { | |
| 3 | + "ContainingType": "Blueprint.Net.Server.Controllers.BlueprintController", | |
| 4 | + "Method": "DeleteCard", | |
| 5 | + "RelativePath": "Blueprint/DeleteCard/{id}", | |
| 6 | + "HttpMethod": "DELETE", | |
| 7 | + "IsController": true, | |
| 8 | + "Order": 0, | |
| 9 | + "Parameters": [ | |
| 10 | + { | |
| 11 | + "Name": "id", | |
| 12 | + "Type": "System.Int64", | |
| 13 | + "IsRequired": true | |
| 14 | + } | |
| 15 | + ], | |
| 16 | + "ReturnTypes": [] | |
| 17 | + }, | |
| 18 | + { | |
| 19 | + "ContainingType": "Blueprint.Net.Server.Controllers.BlueprintController", | |
| 20 | + "Method": "DeleteLink", | |
| 21 | + "RelativePath": "Blueprint/DeleteLink/{id}", | |
| 22 | + "HttpMethod": "DELETE", | |
| 23 | + "IsController": true, | |
| 24 | + "Order": 0, | |
| 25 | + "Parameters": [ | |
| 26 | + { | |
| 27 | + "Name": "id", | |
| 28 | + "Type": "System.Int64", | |
| 29 | + "IsRequired": true | |
| 30 | + } | |
| 31 | + ], | |
| 32 | + "ReturnTypes": [] | |
| 33 | + }, | |
| 34 | + { | |
| 35 | + "ContainingType": "Blueprint.Net.Server.Controllers.BlueprintController", | |
| 36 | + "Method": "DeleteProject", | |
| 37 | + "RelativePath": "Blueprint/DeleteProject/{id}", | |
| 38 | + "HttpMethod": "DELETE", | |
| 39 | + "IsController": true, | |
| 40 | + "Order": 0, | |
| 41 | + "Parameters": [ | |
| 42 | + { | |
| 43 | + "Name": "id", | |
| 44 | + "Type": "System.Int64", | |
| 45 | + "IsRequired": true | |
| 46 | + } | |
| 47 | + ], | |
| 48 | + "ReturnTypes": [] | |
| 49 | + }, | |
| 50 | + { | |
| 51 | + "ContainingType": "Blueprint.Net.Server.Controllers.BlueprintController", | |
| 52 | + "Method": "DeleteWorkspace", | |
| 53 | + "RelativePath": "Blueprint/DeleteWorkspace/{id}", | |
| 54 | + "HttpMethod": "DELETE", | |
| 55 | + "IsController": true, | |
| 56 | + "Order": 0, | |
| 57 | + "Parameters": [ | |
| 58 | + { | |
| 59 | + "Name": "id", | |
| 60 | + "Type": "System.Int64", | |
| 61 | + "IsRequired": true | |
| 62 | + } | |
| 63 | + ], | |
| 64 | + "ReturnTypes": [] | |
| 65 | + }, | |
| 66 | + { | |
| 67 | + "ContainingType": "Blueprint.Net.Server.Controllers.BlueprintController", | |
| 68 | + "Method": "GetProjects", | |
| 69 | + "RelativePath": "Blueprint/GetProjects", | |
| 70 | + "HttpMethod": "GET", | |
| 71 | + "IsController": true, | |
| 72 | + "Order": 0, | |
| 73 | + "Parameters": [], | |
| 74 | + "ReturnTypes": [ | |
| 75 | + { | |
| 76 | + "Type": "System.Collections.Generic.IEnumerable\u00601[[Blueprint.Net.Server.Project, Blueprint.Net.Server, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]", | |
| 77 | + "MediaTypes": [ | |
| 78 | + "text/plain", | |
| 79 | + "application/json", | |
| 80 | + "text/json" | |
| 81 | + ], | |
| 82 | + "StatusCode": 200 | |
| 83 | + } | |
| 84 | + ] | |
| 85 | + }, | |
| 86 | + { | |
| 87 | + "ContainingType": "Blueprint.Net.Server.Controllers.BlueprintController", | |
| 88 | + "Method": "Project", | |
| 89 | + "RelativePath": "Blueprint/Project", | |
| 90 | + "HttpMethod": "POST", | |
| 91 | + "IsController": true, | |
| 92 | + "Order": 0, | |
| 93 | + "Parameters": [ | |
| 94 | + { | |
| 95 | + "Name": "project", | |
| 96 | + "Type": "Blueprint.Net.Server.Project", | |
| 97 | + "IsRequired": true | |
| 98 | + } | |
| 99 | + ], | |
| 100 | + "ReturnTypes": [ | |
| 101 | + { | |
| 102 | + "Type": "Blueprint.Net.Server.Project", | |
| 103 | + "MediaTypes": [ | |
| 104 | + "text/plain", | |
| 105 | + "application/json", | |
| 106 | + "text/json" | |
| 107 | + ], | |
| 108 | + "StatusCode": 200 | |
| 109 | + } | |
| 110 | + ] | |
| 111 | + } | |
| 112 | +] | |
| 0 | 113 | \ No newline at end of file | ... | ... |
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/obj/Debug/net8.0/Blueprin.F6C0E272.Up2Date
0 → 100644
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/obj/Debug/net8.0/Blueprint.Net.Server.AssemblyInfo.cs
0 → 100644
| 1 | +//------------------------------------------------------------------------------ | |
| 2 | +// <auto-generated> | |
| 3 | +// This code was generated by a tool. | |
| 4 | +// | |
| 5 | +// Changes to this file may cause incorrect behavior and will be lost if | |
| 6 | +// the code is regenerated. | |
| 7 | +// </auto-generated> | |
| 8 | +//------------------------------------------------------------------------------ | |
| 9 | + | |
| 10 | +using System; | |
| 11 | +using System.Reflection; | |
| 12 | + | |
| 13 | +[assembly: System.Reflection.AssemblyCompanyAttribute("Blueprint.Net.Server")] | |
| 14 | +[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] | |
| 15 | +[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] | |
| 16 | +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+21310e5f9b84d697cb0feff5b5ab032eedbd8151")] | |
| 17 | +[assembly: System.Reflection.AssemblyProductAttribute("Blueprint.Net.Server")] | |
| 18 | +[assembly: System.Reflection.AssemblyTitleAttribute("Blueprint.Net.Server")] | |
| 19 | +[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] | |
| 20 | + | |
| 21 | +// 由 MSBuild WriteCodeFragment 类生成。 | |
| 22 | + | ... | ... |
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/obj/Debug/net8.0/Blueprint.Net.Server.AssemblyInfoInputs.cache
0 → 100644
| 1 | +5eddb37dc7a53e4fa87096743c7acd0b6360a57b70e21a4550930a7499bb9c12 | ... | ... |
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/obj/Debug/net8.0/Blueprint.Net.Server.GeneratedMSBuildEditorConfig.editorconfig
0 → 100644
| 1 | +is_global = true | |
| 2 | +build_property.TargetFramework = net8.0 | |
| 3 | +build_property.TargetPlatformMinVersion = | |
| 4 | +build_property.UsingMicrosoftNETSdkWeb = true | |
| 5 | +build_property.ProjectTypeGuids = | |
| 6 | +build_property.InvariantGlobalization = | |
| 7 | +build_property.PlatformNeutralAssembly = | |
| 8 | +build_property.EnforceExtendedAnalyzerRules = | |
| 9 | +build_property._SupportedPlatformList = Linux,macOS,Windows | |
| 10 | +build_property.RootNamespace = Blueprint.Net.Server | |
| 11 | +build_property.RootNamespace = Blueprint.Net.Server | |
| 12 | +build_property.ProjectDir = E:\Code\Blueprint\Blueprint.Net.Server\ | |
| 13 | +build_property.EnableComHosting = | |
| 14 | +build_property.EnableGeneratedComInterfaceComImportInterop = | |
| 15 | +build_property.RazorLangVersion = 8.0 | |
| 16 | +build_property.SupportLocalizedComponentNames = | |
| 17 | +build_property.GenerateRazorMetadataSourceChecksumAttributes = | |
| 18 | +build_property.MSBuildProjectDirectory = E:\Code\Blueprint\Blueprint.Net.Server | |
| 19 | +build_property._RazorSourceGeneratorDebug = | ... | ... |
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/obj/Debug/net8.0/Blueprint.Net.Server.GlobalUsings.g.cs
0 → 100644
| 1 | +// <auto-generated/> | |
| 2 | +global using global::Microsoft.AspNetCore.Builder; | |
| 3 | +global using global::Microsoft.AspNetCore.Hosting; | |
| 4 | +global using global::Microsoft.AspNetCore.Http; | |
| 5 | +global using global::Microsoft.AspNetCore.Routing; | |
| 6 | +global using global::Microsoft.Extensions.Configuration; | |
| 7 | +global using global::Microsoft.Extensions.DependencyInjection; | |
| 8 | +global using global::Microsoft.Extensions.Hosting; | |
| 9 | +global using global::Microsoft.Extensions.Logging; | |
| 10 | +global using global::System; | |
| 11 | +global using global::System.Collections.Generic; | |
| 12 | +global using global::System.IO; | |
| 13 | +global using global::System.Linq; | |
| 14 | +global using global::System.Net.Http; | |
| 15 | +global using global::System.Net.Http.Json; | |
| 16 | +global using global::System.Threading; | |
| 17 | +global using global::System.Threading.Tasks; | ... | ... |
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/obj/Debug/net8.0/Blueprint.Net.Server.MvcApplicationPartsAssemblyInfo.cache
0 → 100644
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/obj/Debug/net8.0/Blueprint.Net.Server.MvcApplicationPartsAssemblyInfo.cs
0 → 100644
| 1 | +//------------------------------------------------------------------------------ | |
| 2 | +// <auto-generated> | |
| 3 | +// 此代码由工具生成。 | |
| 4 | +// 运行时版本:4.0.30319.42000 | |
| 5 | +// | |
| 6 | +// 对此文件的更改可能会导致不正确的行为,并且如果 | |
| 7 | +// 重新生成代码,这些更改将会丢失。 | |
| 8 | +// </auto-generated> | |
| 9 | +//------------------------------------------------------------------------------ | |
| 10 | + | |
| 11 | +using System; | |
| 12 | +using System.Reflection; | |
| 13 | + | |
| 14 | +[assembly: Microsoft.AspNetCore.Mvc.ApplicationParts.ApplicationPartAttribute("Swashbuckle.AspNetCore.SwaggerGen")] | |
| 15 | + | |
| 16 | +// 由 MSBuild WriteCodeFragment 类生成。 | |
| 17 | + | ... | ... |
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/obj/Debug/net8.0/Blueprint.Net.Server.assets.cache
0 → 100644
No preview for this file type
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/obj/Debug/net8.0/Blueprint.Net.Server.csproj.AssemblyReference.cache
0 → 100644
No preview for this file type
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/obj/Debug/net8.0/Blueprint.Net.Server.csproj.BuildWithSkipAnalyzers
0 → 100644
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/obj/Debug/net8.0/Blueprint.Net.Server.csproj.CoreCompileInputs.cache
0 → 100644
| 1 | +e6649176d8592337858ccf92973fd389b3d88f5441cf720c89972060326574ca | ... | ... |
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/obj/Debug/net8.0/Blueprint.Net.Server.csproj.FileListAbsolute.txt
0 → 100644
| 1 | +E:\Code\Blueprint\Blueprint.Net.Server\obj\Debug\net8.0\Blueprint.Net.Server.csproj.AssemblyReference.cache | |
| 2 | +E:\Code\Blueprint\Blueprint.Net.Server\obj\Debug\net8.0\Blueprint.Net.Server.GeneratedMSBuildEditorConfig.editorconfig | |
| 3 | +E:\Code\Blueprint\Blueprint.Net.Server\obj\Debug\net8.0\Blueprint.Net.Server.AssemblyInfoInputs.cache | |
| 4 | +E:\Code\Blueprint\Blueprint.Net.Server\obj\Debug\net8.0\Blueprint.Net.Server.AssemblyInfo.cs | |
| 5 | +E:\Code\Blueprint\Blueprint.Net.Server\obj\Debug\net8.0\Blueprint.Net.Server.csproj.CoreCompileInputs.cache | |
| 6 | +E:\Code\Blueprint\Blueprint.Net.Server\obj\Debug\net8.0\Blueprint.Net.Server.MvcApplicationPartsAssemblyInfo.cs | |
| 7 | +E:\Code\Blueprint\Blueprint.Net.Server\obj\Debug\net8.0\Blueprint.Net.Server.MvcApplicationPartsAssemblyInfo.cache | |
| 8 | +E:\Code\Blueprint\Blueprint.Net.Server\obj\Debug\net8.0\Blueprint.Net.Server.sourcelink.json | |
| 9 | +E:\Code\Blueprint\Blueprint.Net.Server\bin\Debug\net8.0\appsettings.Development.json | |
| 10 | +E:\Code\Blueprint\Blueprint.Net.Server\bin\Debug\net8.0\appsettings.json | |
| 11 | +E:\Code\Blueprint\Blueprint.Net.Server\bin\Debug\net8.0\Blueprint.Net.Server.exe | |
| 12 | +E:\Code\Blueprint\Blueprint.Net.Server\bin\Debug\net8.0\Blueprint.Net.Server.deps.json | |
| 13 | +E:\Code\Blueprint\Blueprint.Net.Server\bin\Debug\net8.0\Blueprint.Net.Server.runtimeconfig.json | |
| 14 | +E:\Code\Blueprint\Blueprint.Net.Server\bin\Debug\net8.0\Blueprint.Net.Server.dll | |
| 15 | +E:\Code\Blueprint\Blueprint.Net.Server\bin\Debug\net8.0\Blueprint.Net.Server.pdb | |
| 16 | +E:\Code\Blueprint\Blueprint.Net.Server\bin\Debug\net8.0\FreeSql.dll | |
| 17 | +E:\Code\Blueprint\Blueprint.Net.Server\bin\Debug\net8.0\FreeSql.Provider.Sqlite.dll | |
| 18 | +E:\Code\Blueprint\Blueprint.Net.Server\bin\Debug\net8.0\Microsoft.OpenApi.dll | |
| 19 | +E:\Code\Blueprint\Blueprint.Net.Server\bin\Debug\net8.0\System.Data.SQLite.dll | |
| 20 | +E:\Code\Blueprint\Blueprint.Net.Server\bin\Debug\net8.0\Swashbuckle.AspNetCore.Swagger.dll | |
| 21 | +E:\Code\Blueprint\Blueprint.Net.Server\bin\Debug\net8.0\Swashbuckle.AspNetCore.SwaggerGen.dll | |
| 22 | +E:\Code\Blueprint\Blueprint.Net.Server\bin\Debug\net8.0\Swashbuckle.AspNetCore.SwaggerUI.dll | |
| 23 | +E:\Code\Blueprint\Blueprint.Net.Server\bin\Debug\net8.0\zh-Hans\FreeSql.resources.dll | |
| 24 | +E:\Code\Blueprint\Blueprint.Net.Server\bin\Debug\net8.0\runtimes\linux-x64\native\SQLite.Interop.dll | |
| 25 | +E:\Code\Blueprint\Blueprint.Net.Server\bin\Debug\net8.0\runtimes\osx-x64\native\SQLite.Interop.dll | |
| 26 | +E:\Code\Blueprint\Blueprint.Net.Server\bin\Debug\net8.0\runtimes\win-x64\native\SQLite.Interop.dll | |
| 27 | +E:\Code\Blueprint\Blueprint.Net.Server\bin\Debug\net8.0\runtimes\win-x86\native\SQLite.Interop.dll | |
| 28 | +E:\Code\Blueprint\Blueprint.Net.Server\obj\Debug\net8.0\staticwebassets.build.json | |
| 29 | +E:\Code\Blueprint\Blueprint.Net.Server\obj\Debug\net8.0\staticwebassets.development.json | |
| 30 | +E:\Code\Blueprint\Blueprint.Net.Server\obj\Debug\net8.0\staticwebassets\msbuild.Blueprint.Net.Server.Microsoft.AspNetCore.StaticWebAssets.props | |
| 31 | +E:\Code\Blueprint\Blueprint.Net.Server\obj\Debug\net8.0\staticwebassets\msbuild.build.Blueprint.Net.Server.props | |
| 32 | +E:\Code\Blueprint\Blueprint.Net.Server\obj\Debug\net8.0\staticwebassets\msbuild.buildMultiTargeting.Blueprint.Net.Server.props | |
| 33 | +E:\Code\Blueprint\Blueprint.Net.Server\obj\Debug\net8.0\staticwebassets\msbuild.buildTransitive.Blueprint.Net.Server.props | |
| 34 | +E:\Code\Blueprint\Blueprint.Net.Server\obj\Debug\net8.0\staticwebassets.pack.json | |
| 35 | +E:\Code\Blueprint\Blueprint.Net.Server\obj\Debug\net8.0\scopedcss\bundle\Blueprint.Net.Server.styles.css | |
| 36 | +E:\Code\Blueprint\Blueprint.Net.Server\obj\Debug\net8.0\Blueprin.F6C0E272.Up2Date | |
| 37 | +E:\Code\Blueprint\Blueprint.Net.Server\obj\Debug\net8.0\Blueprint.Net.Server.dll | |
| 38 | +E:\Code\Blueprint\Blueprint.Net.Server\obj\Debug\net8.0\refint\Blueprint.Net.Server.dll | |
| 39 | +E:\Code\Blueprint\Blueprint.Net.Server\obj\Debug\net8.0\Blueprint.Net.Server.pdb | |
| 40 | +E:\Code\Blueprint\Blueprint.Net.Server\obj\Debug\net8.0\Blueprint.Net.Server.genruntimeconfig.cache | |
| 41 | +E:\Code\Blueprint\Blueprint.Net.Server\obj\Debug\net8.0\ref\Blueprint.Net.Server.dll | |
| 42 | +E:\Code\Blueprint\Blueprint.Net.Server\bin\Debug\net8.0\FreeSql.DbContext.dll | |
| 43 | +E:\Code\Blueprint\Blueprint.Net.Server\bin\Debug\net8.0\FreeSql.Repository.dll | |
| 44 | +E:\Code\Blueprint\Blueprint.Net.Server\bin\Debug\net8.0\zh-Hans\FreeSql.DbContext.resources.dll | |
| 45 | +E:\Code\Blueprint\Blueprint.Net.Server\bin\Debug\net8.0\Blueprint.Net.Server.staticwebassets.runtime.json | ... | ... |
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/obj/Debug/net8.0/Blueprint.Net.Server.dll
0 → 100644
No preview for this file type
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/obj/Debug/net8.0/Blueprint.Net.Server.genruntimeconfig.cache
0 → 100644
| 1 | +8acfbde84a0808a05ea09472133bf8a326d26f20e0ddb65a94244d389946671b | ... | ... |
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/obj/Debug/net8.0/Blueprint.Net.Server.pdb
0 → 100644
No preview for this file type
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/obj/Debug/net8.0/Blueprint.Net.Server.sourcelink.json
0 → 100644
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/obj/Debug/net8.0/apphost.exe
0 → 100644
No preview for this file type
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/obj/Debug/net8.0/ref/Blueprint.Net.Server.dll
0 → 100644
No preview for this file type
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/obj/Debug/net8.0/refint/Blueprint.Net.Server.dll
0 → 100644
No preview for this file type
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/obj/Debug/net8.0/staticwebassets.build.json
0 → 100644
| 1 | +{ | |
| 2 | + "Version": 1, | |
| 3 | + "Hash": "Pejh5880OWDtzUDeaYI0R3uZI5plIRGeOY+LIYo1sp8=", | |
| 4 | + "Source": "Blueprint.Net.Server", | |
| 5 | + "BasePath": "_content/Blueprint.Net.Server", | |
| 6 | + "Mode": "Default", | |
| 7 | + "ManifestType": "Build", | |
| 8 | + "ReferencedProjectsConfiguration": [], | |
| 9 | + "DiscoveryPatterns": [ | |
| 10 | + { | |
| 11 | + "Name": "Blueprint.Net.Server\\wwwroot", | |
| 12 | + "Source": "Blueprint.Net.Server", | |
| 13 | + "ContentRoot": "E:\\Code\\Blueprint\\Blueprint.Net.Server\\wwwroot\\", | |
| 14 | + "BasePath": "_content/Blueprint.Net.Server", | |
| 15 | + "Pattern": "**" | |
| 16 | + } | |
| 17 | + ], | |
| 18 | + "Assets": [ | |
| 19 | + { | |
| 20 | + "Identity": "E:\\Code\\Blueprint\\Blueprint.Net.Server\\wwwroot\\index.html", | |
| 21 | + "SourceId": "Blueprint.Net.Server", | |
| 22 | + "SourceType": "Discovered", | |
| 23 | + "ContentRoot": "E:\\Code\\Blueprint\\Blueprint.Net.Server\\wwwroot\\", | |
| 24 | + "BasePath": "_content/Blueprint.Net.Server", | |
| 25 | + "RelativePath": "index.html", | |
| 26 | + "AssetKind": "All", | |
| 27 | + "AssetMode": "All", | |
| 28 | + "AssetRole": "Primary", | |
| 29 | + "AssetMergeBehavior": "PreferTarget", | |
| 30 | + "AssetMergeSource": "", | |
| 31 | + "RelatedAsset": "", | |
| 32 | + "AssetTraitName": "", | |
| 33 | + "AssetTraitValue": "", | |
| 34 | + "CopyToOutputDirectory": "Never", | |
| 35 | + "CopyToPublishDirectory": "PreserveNewest", | |
| 36 | + "OriginalItemSpec": "wwwroot\\index.html" | |
| 37 | + } | |
| 38 | + ] | |
| 39 | +} | |
| 0 | 40 | \ No newline at end of file | ... | ... |
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/obj/Debug/net8.0/staticwebassets.development.json
0 → 100644
| 1 | +{"ContentRoots":["E:\\Code\\Blueprint\\Blueprint.Net.Server\\wwwroot\\"],"Root":{"Children":{"index.html":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"index.html"},"Patterns":null}},"Asset":null,"Patterns":[{"ContentRootIndex":0,"Pattern":"**","Depth":0}]}} | |
| 0 | 2 | \ No newline at end of file | ... | ... |
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/obj/Debug/net8.0/staticwebassets.pack.json
0 → 100644
| 1 | +{ | |
| 2 | + "Files": [ | |
| 3 | + { | |
| 4 | + "Id": "E:\\Code\\Blueprint\\Blueprint.Net.Server\\wwwroot\\index.html", | |
| 5 | + "PackagePath": "staticwebassets\\index.html" | |
| 6 | + }, | |
| 7 | + { | |
| 8 | + "Id": "obj\\Debug\\net8.0\\staticwebassets\\msbuild.Blueprint.Net.Server.Microsoft.AspNetCore.StaticWebAssets.props", | |
| 9 | + "PackagePath": "build\\Microsoft.AspNetCore.StaticWebAssets.props" | |
| 10 | + }, | |
| 11 | + { | |
| 12 | + "Id": "obj\\Debug\\net8.0\\staticwebassets\\msbuild.build.Blueprint.Net.Server.props", | |
| 13 | + "PackagePath": "build\\Blueprint.Net.Server.props" | |
| 14 | + }, | |
| 15 | + { | |
| 16 | + "Id": "obj\\Debug\\net8.0\\staticwebassets\\msbuild.buildMultiTargeting.Blueprint.Net.Server.props", | |
| 17 | + "PackagePath": "buildMultiTargeting\\Blueprint.Net.Server.props" | |
| 18 | + }, | |
| 19 | + { | |
| 20 | + "Id": "obj\\Debug\\net8.0\\staticwebassets\\msbuild.buildTransitive.Blueprint.Net.Server.props", | |
| 21 | + "PackagePath": "buildTransitive\\Blueprint.Net.Server.props" | |
| 22 | + } | |
| 23 | + ], | |
| 24 | + "ElementsToRemove": [] | |
| 25 | +} | |
| 0 | 26 | \ No newline at end of file | ... | ... |
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/obj/Debug/net8.0/staticwebassets/msbuild.Blueprint.Net.Server.Microsoft.AspNetCore.StaticWebAssets.props
0 → 100644
| 1 | +<Project> | |
| 2 | + <ItemGroup> | |
| 3 | + <StaticWebAsset Include="$([System.IO.Path]::GetFullPath($(MSBuildThisFileDirectory)..\staticwebassets\index.html))"> | |
| 4 | + <SourceType>Package</SourceType> | |
| 5 | + <SourceId>Blueprint.Net.Server</SourceId> | |
| 6 | + <ContentRoot>$(MSBuildThisFileDirectory)..\staticwebassets\</ContentRoot> | |
| 7 | + <BasePath>_content/Blueprint.Net.Server</BasePath> | |
| 8 | + <RelativePath>index.html</RelativePath> | |
| 9 | + <AssetKind>All</AssetKind> | |
| 10 | + <AssetMode>All</AssetMode> | |
| 11 | + <AssetRole>Primary</AssetRole> | |
| 12 | + <RelatedAsset></RelatedAsset> | |
| 13 | + <AssetTraitName></AssetTraitName> | |
| 14 | + <AssetTraitValue></AssetTraitValue> | |
| 15 | + <CopyToOutputDirectory>Never</CopyToOutputDirectory> | |
| 16 | + <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory> | |
| 17 | + <OriginalItemSpec>$([System.IO.Path]::GetFullPath($(MSBuildThisFileDirectory)..\staticwebassets\index.html))</OriginalItemSpec> | |
| 18 | + </StaticWebAsset> | |
| 19 | + </ItemGroup> | |
| 20 | +</Project> | |
| 0 | 21 | \ No newline at end of file | ... | ... |
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/obj/Debug/net8.0/staticwebassets/msbuild.build.Blueprint.Net.Server.props
0 → 100644
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/obj/Debug/net8.0/staticwebassets/msbuild.buildMultiTargeting.Blueprint.Net.Server.props
0 → 100644
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/obj/Debug/net8.0/staticwebassets/msbuild.buildTransitive.Blueprint.Net.Server.props
0 → 100644
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/obj/project.assets.json
0 → 100644
| 1 | +{ | |
| 2 | + "version": 3, | |
| 3 | + "targets": { | |
| 4 | + "net8.0": { | |
| 5 | + "FreeSql/3.2.821": { | |
| 6 | + "type": "package", | |
| 7 | + "compile": { | |
| 8 | + "lib/netstandard2.1/FreeSql.dll": { | |
| 9 | + "related": ".pdb;.xml" | |
| 10 | + } | |
| 11 | + }, | |
| 12 | + "runtime": { | |
| 13 | + "lib/netstandard2.1/FreeSql.dll": { | |
| 14 | + "related": ".pdb;.xml" | |
| 15 | + } | |
| 16 | + }, | |
| 17 | + "resource": { | |
| 18 | + "lib/netstandard2.1/zh-Hans/FreeSql.resources.dll": { | |
| 19 | + "locale": "zh-Hans" | |
| 20 | + } | |
| 21 | + } | |
| 22 | + }, | |
| 23 | + "FreeSql.DbContext/3.2.821": { | |
| 24 | + "type": "package", | |
| 25 | + "dependencies": { | |
| 26 | + "FreeSql": "3.2.821", | |
| 27 | + "Microsoft.Extensions.DependencyInjection": "8.0.0" | |
| 28 | + }, | |
| 29 | + "compile": { | |
| 30 | + "lib/net8.0/FreeSql.DbContext.dll": { | |
| 31 | + "related": ".pdb;.xml" | |
| 32 | + } | |
| 33 | + }, | |
| 34 | + "runtime": { | |
| 35 | + "lib/net8.0/FreeSql.DbContext.dll": { | |
| 36 | + "related": ".pdb;.xml" | |
| 37 | + } | |
| 38 | + }, | |
| 39 | + "resource": { | |
| 40 | + "lib/net8.0/zh-Hans/FreeSql.DbContext.resources.dll": { | |
| 41 | + "locale": "zh-Hans" | |
| 42 | + } | |
| 43 | + } | |
| 44 | + }, | |
| 45 | + "FreeSql.Provider.Sqlite/3.2.821": { | |
| 46 | + "type": "package", | |
| 47 | + "dependencies": { | |
| 48 | + "FreeSql": "3.2.821", | |
| 49 | + "System.Data.SQLite.Core": "1.0.115.5" | |
| 50 | + }, | |
| 51 | + "compile": { | |
| 52 | + "lib/netstandard2.0/FreeSql.Provider.Sqlite.dll": { | |
| 53 | + "related": ".pdb" | |
| 54 | + } | |
| 55 | + }, | |
| 56 | + "runtime": { | |
| 57 | + "lib/netstandard2.0/FreeSql.Provider.Sqlite.dll": { | |
| 58 | + "related": ".pdb" | |
| 59 | + } | |
| 60 | + } | |
| 61 | + }, | |
| 62 | + "FreeSql.Repository/3.2.821": { | |
| 63 | + "type": "package", | |
| 64 | + "dependencies": { | |
| 65 | + "FreeSql.DbContext": "3.2.821" | |
| 66 | + }, | |
| 67 | + "compile": { | |
| 68 | + "lib/net8.0/FreeSql.Repository.dll": { | |
| 69 | + "related": ".pdb" | |
| 70 | + } | |
| 71 | + }, | |
| 72 | + "runtime": { | |
| 73 | + "lib/net8.0/FreeSql.Repository.dll": { | |
| 74 | + "related": ".pdb" | |
| 75 | + } | |
| 76 | + } | |
| 77 | + }, | |
| 78 | + "Microsoft.Extensions.ApiDescription.Server/6.0.5": { | |
| 79 | + "type": "package", | |
| 80 | + "build": { | |
| 81 | + "build/Microsoft.Extensions.ApiDescription.Server.props": {}, | |
| 82 | + "build/Microsoft.Extensions.ApiDescription.Server.targets": {} | |
| 83 | + }, | |
| 84 | + "buildMultiTargeting": { | |
| 85 | + "buildMultiTargeting/Microsoft.Extensions.ApiDescription.Server.props": {}, | |
| 86 | + "buildMultiTargeting/Microsoft.Extensions.ApiDescription.Server.targets": {} | |
| 87 | + } | |
| 88 | + }, | |
| 89 | + "Microsoft.Extensions.DependencyInjection/8.0.0": { | |
| 90 | + "type": "package", | |
| 91 | + "dependencies": { | |
| 92 | + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0" | |
| 93 | + }, | |
| 94 | + "compile": { | |
| 95 | + "lib/net8.0/Microsoft.Extensions.DependencyInjection.dll": { | |
| 96 | + "related": ".xml" | |
| 97 | + } | |
| 98 | + }, | |
| 99 | + "runtime": { | |
| 100 | + "lib/net8.0/Microsoft.Extensions.DependencyInjection.dll": { | |
| 101 | + "related": ".xml" | |
| 102 | + } | |
| 103 | + }, | |
| 104 | + "build": { | |
| 105 | + "buildTransitive/net6.0/_._": {} | |
| 106 | + } | |
| 107 | + }, | |
| 108 | + "Microsoft.Extensions.DependencyInjection.Abstractions/8.0.0": { | |
| 109 | + "type": "package", | |
| 110 | + "compile": { | |
| 111 | + "lib/net8.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll": { | |
| 112 | + "related": ".xml" | |
| 113 | + } | |
| 114 | + }, | |
| 115 | + "runtime": { | |
| 116 | + "lib/net8.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll": { | |
| 117 | + "related": ".xml" | |
| 118 | + } | |
| 119 | + }, | |
| 120 | + "build": { | |
| 121 | + "buildTransitive/net6.0/_._": {} | |
| 122 | + } | |
| 123 | + }, | |
| 124 | + "Microsoft.OpenApi/1.2.3": { | |
| 125 | + "type": "package", | |
| 126 | + "compile": { | |
| 127 | + "lib/netstandard2.0/Microsoft.OpenApi.dll": { | |
| 128 | + "related": ".pdb;.xml" | |
| 129 | + } | |
| 130 | + }, | |
| 131 | + "runtime": { | |
| 132 | + "lib/netstandard2.0/Microsoft.OpenApi.dll": { | |
| 133 | + "related": ".pdb;.xml" | |
| 134 | + } | |
| 135 | + } | |
| 136 | + }, | |
| 137 | + "Stub.System.Data.SQLite.Core.NetStandard/1.0.115.5": { | |
| 138 | + "type": "package", | |
| 139 | + "compile": { | |
| 140 | + "lib/netstandard2.1/System.Data.SQLite.dll": { | |
| 141 | + "related": ".dll.altconfig;.xml" | |
| 142 | + } | |
| 143 | + }, | |
| 144 | + "runtime": { | |
| 145 | + "lib/netstandard2.1/System.Data.SQLite.dll": { | |
| 146 | + "related": ".dll.altconfig;.xml" | |
| 147 | + } | |
| 148 | + }, | |
| 149 | + "runtimeTargets": { | |
| 150 | + "runtimes/linux-x64/native/SQLite.Interop.dll": { | |
| 151 | + "assetType": "native", | |
| 152 | + "rid": "linux-x64" | |
| 153 | + }, | |
| 154 | + "runtimes/osx-x64/native/SQLite.Interop.dll": { | |
| 155 | + "assetType": "native", | |
| 156 | + "rid": "osx-x64" | |
| 157 | + }, | |
| 158 | + "runtimes/win-x64/native/SQLite.Interop.dll": { | |
| 159 | + "assetType": "native", | |
| 160 | + "rid": "win-x64" | |
| 161 | + }, | |
| 162 | + "runtimes/win-x86/native/SQLite.Interop.dll": { | |
| 163 | + "assetType": "native", | |
| 164 | + "rid": "win-x86" | |
| 165 | + } | |
| 166 | + } | |
| 167 | + }, | |
| 168 | + "Swashbuckle.AspNetCore/6.4.0": { | |
| 169 | + "type": "package", | |
| 170 | + "dependencies": { | |
| 171 | + "Microsoft.Extensions.ApiDescription.Server": "6.0.5", | |
| 172 | + "Swashbuckle.AspNetCore.Swagger": "6.4.0", | |
| 173 | + "Swashbuckle.AspNetCore.SwaggerGen": "6.4.0", | |
| 174 | + "Swashbuckle.AspNetCore.SwaggerUI": "6.4.0" | |
| 175 | + }, | |
| 176 | + "build": { | |
| 177 | + "build/Swashbuckle.AspNetCore.props": {} | |
| 178 | + } | |
| 179 | + }, | |
| 180 | + "Swashbuckle.AspNetCore.Swagger/6.4.0": { | |
| 181 | + "type": "package", | |
| 182 | + "dependencies": { | |
| 183 | + "Microsoft.OpenApi": "1.2.3" | |
| 184 | + }, | |
| 185 | + "compile": { | |
| 186 | + "lib/net6.0/Swashbuckle.AspNetCore.Swagger.dll": { | |
| 187 | + "related": ".pdb;.xml" | |
| 188 | + } | |
| 189 | + }, | |
| 190 | + "runtime": { | |
| 191 | + "lib/net6.0/Swashbuckle.AspNetCore.Swagger.dll": { | |
| 192 | + "related": ".pdb;.xml" | |
| 193 | + } | |
| 194 | + }, | |
| 195 | + "frameworkReferences": [ | |
| 196 | + "Microsoft.AspNetCore.App" | |
| 197 | + ] | |
| 198 | + }, | |
| 199 | + "Swashbuckle.AspNetCore.SwaggerGen/6.4.0": { | |
| 200 | + "type": "package", | |
| 201 | + "dependencies": { | |
| 202 | + "Swashbuckle.AspNetCore.Swagger": "6.4.0" | |
| 203 | + }, | |
| 204 | + "compile": { | |
| 205 | + "lib/net6.0/Swashbuckle.AspNetCore.SwaggerGen.dll": { | |
| 206 | + "related": ".pdb;.xml" | |
| 207 | + } | |
| 208 | + }, | |
| 209 | + "runtime": { | |
| 210 | + "lib/net6.0/Swashbuckle.AspNetCore.SwaggerGen.dll": { | |
| 211 | + "related": ".pdb;.xml" | |
| 212 | + } | |
| 213 | + } | |
| 214 | + }, | |
| 215 | + "Swashbuckle.AspNetCore.SwaggerUI/6.4.0": { | |
| 216 | + "type": "package", | |
| 217 | + "compile": { | |
| 218 | + "lib/net6.0/Swashbuckle.AspNetCore.SwaggerUI.dll": { | |
| 219 | + "related": ".pdb;.xml" | |
| 220 | + } | |
| 221 | + }, | |
| 222 | + "runtime": { | |
| 223 | + "lib/net6.0/Swashbuckle.AspNetCore.SwaggerUI.dll": { | |
| 224 | + "related": ".pdb;.xml" | |
| 225 | + } | |
| 226 | + }, | |
| 227 | + "frameworkReferences": [ | |
| 228 | + "Microsoft.AspNetCore.App" | |
| 229 | + ] | |
| 230 | + }, | |
| 231 | + "System.Data.SQLite.Core/1.0.115.5": { | |
| 232 | + "type": "package", | |
| 233 | + "dependencies": { | |
| 234 | + "Stub.System.Data.SQLite.Core.NetStandard": "[1.0.115.5]" | |
| 235 | + } | |
| 236 | + } | |
| 237 | + } | |
| 238 | + }, | |
| 239 | + "libraries": { | |
| 240 | + "FreeSql/3.2.821": { | |
| 241 | + "sha512": "bI/CTioEq4B9k5pqaZnXBSyJCIbHoUUTJGgQJF5osgq7/9kOxZo93hmZr8Vw6n5iFG5chx6wkcn4dnJJUsAEkA==", | |
| 242 | + "type": "package", | |
| 243 | + "path": "freesql/3.2.821", | |
| 244 | + "files": [ | |
| 245 | + ".nupkg.metadata", | |
| 246 | + ".signature.p7s", | |
| 247 | + "freesql.3.2.821.nupkg.sha512", | |
| 248 | + "freesql.nuspec", | |
| 249 | + "lib/net40/FreeSql.dll", | |
| 250 | + "lib/net40/FreeSql.pdb", | |
| 251 | + "lib/net40/FreeSql.xml", | |
| 252 | + "lib/net40/zh-Hans/FreeSql.resources.dll", | |
| 253 | + "lib/net45/FreeSql.dll", | |
| 254 | + "lib/net45/FreeSql.pdb", | |
| 255 | + "lib/net45/FreeSql.xml", | |
| 256 | + "lib/net45/zh-Hans/FreeSql.resources.dll", | |
| 257 | + "lib/net451/FreeSql.dll", | |
| 258 | + "lib/net451/FreeSql.pdb", | |
| 259 | + "lib/net451/FreeSql.xml", | |
| 260 | + "lib/net451/zh-Hans/FreeSql.resources.dll", | |
| 261 | + "lib/netstandard2.0/FreeSql.dll", | |
| 262 | + "lib/netstandard2.0/FreeSql.pdb", | |
| 263 | + "lib/netstandard2.0/FreeSql.xml", | |
| 264 | + "lib/netstandard2.0/zh-Hans/FreeSql.resources.dll", | |
| 265 | + "lib/netstandard2.1/FreeSql.dll", | |
| 266 | + "lib/netstandard2.1/FreeSql.pdb", | |
| 267 | + "lib/netstandard2.1/FreeSql.xml", | |
| 268 | + "lib/netstandard2.1/zh-Hans/FreeSql.resources.dll", | |
| 269 | + "logo.png", | |
| 270 | + "readme.md" | |
| 271 | + ] | |
| 272 | + }, | |
| 273 | + "FreeSql.DbContext/3.2.821": { | |
| 274 | + "sha512": "wQWjKj7/2Iwzp5WxOE5WV/HmoVmj6fKPYGBxKB7JWxF7HudmXjeZS1Hll2ovQksqF/YujYf7SxGbDv5mU9qSGA==", | |
| 275 | + "type": "package", | |
| 276 | + "path": "freesql.dbcontext/3.2.821", | |
| 277 | + "files": [ | |
| 278 | + ".nupkg.metadata", | |
| 279 | + ".signature.p7s", | |
| 280 | + "freesql.dbcontext.3.2.821.nupkg.sha512", | |
| 281 | + "freesql.dbcontext.nuspec", | |
| 282 | + "lib/net40/FreeSql.DbContext.dll", | |
| 283 | + "lib/net40/FreeSql.DbContext.pdb", | |
| 284 | + "lib/net40/FreeSql.DbContext.xml", | |
| 285 | + "lib/net40/zh-Hans/FreeSql.DbContext.resources.dll", | |
| 286 | + "lib/net45/FreeSql.DbContext.dll", | |
| 287 | + "lib/net45/FreeSql.DbContext.pdb", | |
| 288 | + "lib/net45/FreeSql.DbContext.xml", | |
| 289 | + "lib/net45/zh-Hans/FreeSql.DbContext.resources.dll", | |
| 290 | + "lib/net5.0/FreeSql.DbContext.dll", | |
| 291 | + "lib/net5.0/FreeSql.DbContext.pdb", | |
| 292 | + "lib/net5.0/FreeSql.DbContext.xml", | |
| 293 | + "lib/net5.0/zh-Hans/FreeSql.DbContext.resources.dll", | |
| 294 | + "lib/net6.0/FreeSql.DbContext.dll", | |
| 295 | + "lib/net6.0/FreeSql.DbContext.pdb", | |
| 296 | + "lib/net6.0/FreeSql.DbContext.xml", | |
| 297 | + "lib/net6.0/zh-Hans/FreeSql.DbContext.resources.dll", | |
| 298 | + "lib/net7.0/FreeSql.DbContext.dll", | |
| 299 | + "lib/net7.0/FreeSql.DbContext.pdb", | |
| 300 | + "lib/net7.0/FreeSql.DbContext.xml", | |
| 301 | + "lib/net7.0/zh-Hans/FreeSql.DbContext.resources.dll", | |
| 302 | + "lib/net8.0/FreeSql.DbContext.dll", | |
| 303 | + "lib/net8.0/FreeSql.DbContext.pdb", | |
| 304 | + "lib/net8.0/FreeSql.DbContext.xml", | |
| 305 | + "lib/net8.0/zh-Hans/FreeSql.DbContext.resources.dll", | |
| 306 | + "lib/netcoreapp3.1/FreeSql.DbContext.dll", | |
| 307 | + "lib/netcoreapp3.1/FreeSql.DbContext.pdb", | |
| 308 | + "lib/netcoreapp3.1/FreeSql.DbContext.xml", | |
| 309 | + "lib/netcoreapp3.1/zh-Hans/FreeSql.DbContext.resources.dll", | |
| 310 | + "lib/netstandard2.0/FreeSql.DbContext.dll", | |
| 311 | + "lib/netstandard2.0/FreeSql.DbContext.pdb", | |
| 312 | + "lib/netstandard2.0/FreeSql.DbContext.xml", | |
| 313 | + "lib/netstandard2.0/zh-Hans/FreeSql.DbContext.resources.dll", | |
| 314 | + "lib/netstandard2.1/FreeSql.DbContext.dll", | |
| 315 | + "lib/netstandard2.1/FreeSql.DbContext.pdb", | |
| 316 | + "lib/netstandard2.1/FreeSql.DbContext.xml", | |
| 317 | + "lib/netstandard2.1/zh-Hans/FreeSql.DbContext.resources.dll", | |
| 318 | + "logo.png", | |
| 319 | + "readme.md" | |
| 320 | + ] | |
| 321 | + }, | |
| 322 | + "FreeSql.Provider.Sqlite/3.2.821": { | |
| 323 | + "sha512": "vBvvq9mDz488XWYeNQSSt8t3FCKquS4DPab7hu7QVRF0ftXRAc6rRK5axFFJZjc5ABU7aIKtu1UiKQky8z/VnA==", | |
| 324 | + "type": "package", | |
| 325 | + "path": "freesql.provider.sqlite/3.2.821", | |
| 326 | + "files": [ | |
| 327 | + ".nupkg.metadata", | |
| 328 | + ".signature.p7s", | |
| 329 | + "freesql.provider.sqlite.3.2.821.nupkg.sha512", | |
| 330 | + "freesql.provider.sqlite.nuspec", | |
| 331 | + "lib/net40/FreeSql.Provider.Sqlite.dll", | |
| 332 | + "lib/net40/FreeSql.Provider.Sqlite.pdb", | |
| 333 | + "lib/net45/FreeSql.Provider.Sqlite.dll", | |
| 334 | + "lib/net45/FreeSql.Provider.Sqlite.pdb", | |
| 335 | + "lib/netstandard2.0/FreeSql.Provider.Sqlite.dll", | |
| 336 | + "lib/netstandard2.0/FreeSql.Provider.Sqlite.pdb", | |
| 337 | + "logo.png", | |
| 338 | + "readme.md" | |
| 339 | + ] | |
| 340 | + }, | |
| 341 | + "FreeSql.Repository/3.2.821": { | |
| 342 | + "sha512": "cE/VG103FYXn2m63Xp7heYptPazNN+z+dUm9jZe2vNwV8LUCU3PbY04MD+liyQBCZ5WGCK70Pe4GXGfQzvRMLw==", | |
| 343 | + "type": "package", | |
| 344 | + "path": "freesql.repository/3.2.821", | |
| 345 | + "files": [ | |
| 346 | + ".nupkg.metadata", | |
| 347 | + ".signature.p7s", | |
| 348 | + "freesql.repository.3.2.821.nupkg.sha512", | |
| 349 | + "freesql.repository.nuspec", | |
| 350 | + "lib/net40/FreeSql.Repository.dll", | |
| 351 | + "lib/net40/FreeSql.Repository.pdb", | |
| 352 | + "lib/net45/FreeSql.Repository.dll", | |
| 353 | + "lib/net45/FreeSql.Repository.pdb", | |
| 354 | + "lib/net5.0/FreeSql.Repository.dll", | |
| 355 | + "lib/net5.0/FreeSql.Repository.pdb", | |
| 356 | + "lib/net6.0/FreeSql.Repository.dll", | |
| 357 | + "lib/net6.0/FreeSql.Repository.pdb", | |
| 358 | + "lib/net7.0/FreeSql.Repository.dll", | |
| 359 | + "lib/net7.0/FreeSql.Repository.pdb", | |
| 360 | + "lib/net8.0/FreeSql.Repository.dll", | |
| 361 | + "lib/net8.0/FreeSql.Repository.pdb", | |
| 362 | + "lib/netcoreapp3.1/FreeSql.Repository.dll", | |
| 363 | + "lib/netcoreapp3.1/FreeSql.Repository.pdb", | |
| 364 | + "lib/netstandard2.0/FreeSql.Repository.dll", | |
| 365 | + "lib/netstandard2.0/FreeSql.Repository.pdb", | |
| 366 | + "lib/netstandard2.1/FreeSql.Repository.dll", | |
| 367 | + "lib/netstandard2.1/FreeSql.Repository.pdb", | |
| 368 | + "logo.png", | |
| 369 | + "readme.md" | |
| 370 | + ] | |
| 371 | + }, | |
| 372 | + "Microsoft.Extensions.ApiDescription.Server/6.0.5": { | |
| 373 | + "sha512": "Ckb5EDBUNJdFWyajfXzUIMRkhf52fHZOQuuZg/oiu8y7zDCVwD0iHhew6MnThjHmevanpxL3f5ci2TtHQEN6bw==", | |
| 374 | + "type": "package", | |
| 375 | + "path": "microsoft.extensions.apidescription.server/6.0.5", | |
| 376 | + "hasTools": true, | |
| 377 | + "files": [ | |
| 378 | + ".nupkg.metadata", | |
| 379 | + ".signature.p7s", | |
| 380 | + "Icon.png", | |
| 381 | + "build/Microsoft.Extensions.ApiDescription.Server.props", | |
| 382 | + "build/Microsoft.Extensions.ApiDescription.Server.targets", | |
| 383 | + "buildMultiTargeting/Microsoft.Extensions.ApiDescription.Server.props", | |
| 384 | + "buildMultiTargeting/Microsoft.Extensions.ApiDescription.Server.targets", | |
| 385 | + "microsoft.extensions.apidescription.server.6.0.5.nupkg.sha512", | |
| 386 | + "microsoft.extensions.apidescription.server.nuspec", | |
| 387 | + "tools/Newtonsoft.Json.dll", | |
| 388 | + "tools/dotnet-getdocument.deps.json", | |
| 389 | + "tools/dotnet-getdocument.dll", | |
| 390 | + "tools/dotnet-getdocument.runtimeconfig.json", | |
| 391 | + "tools/net461-x86/GetDocument.Insider.exe", | |
| 392 | + "tools/net461-x86/GetDocument.Insider.exe.config", | |
| 393 | + "tools/net461-x86/Microsoft.Win32.Primitives.dll", | |
| 394 | + "tools/net461-x86/System.AppContext.dll", | |
| 395 | + "tools/net461-x86/System.Buffers.dll", | |
| 396 | + "tools/net461-x86/System.Collections.Concurrent.dll", | |
| 397 | + "tools/net461-x86/System.Collections.NonGeneric.dll", | |
| 398 | + "tools/net461-x86/System.Collections.Specialized.dll", | |
| 399 | + "tools/net461-x86/System.Collections.dll", | |
| 400 | + "tools/net461-x86/System.ComponentModel.EventBasedAsync.dll", | |
| 401 | + "tools/net461-x86/System.ComponentModel.Primitives.dll", | |
| 402 | + "tools/net461-x86/System.ComponentModel.TypeConverter.dll", | |
| 403 | + "tools/net461-x86/System.ComponentModel.dll", | |
| 404 | + "tools/net461-x86/System.Console.dll", | |
| 405 | + "tools/net461-x86/System.Data.Common.dll", | |
| 406 | + "tools/net461-x86/System.Diagnostics.Contracts.dll", | |
| 407 | + "tools/net461-x86/System.Diagnostics.Debug.dll", | |
| 408 | + "tools/net461-x86/System.Diagnostics.DiagnosticSource.dll", | |
| 409 | + "tools/net461-x86/System.Diagnostics.FileVersionInfo.dll", | |
| 410 | + "tools/net461-x86/System.Diagnostics.Process.dll", | |
| 411 | + "tools/net461-x86/System.Diagnostics.StackTrace.dll", | |
| 412 | + "tools/net461-x86/System.Diagnostics.TextWriterTraceListener.dll", | |
| 413 | + "tools/net461-x86/System.Diagnostics.Tools.dll", | |
| 414 | + "tools/net461-x86/System.Diagnostics.TraceSource.dll", | |
| 415 | + "tools/net461-x86/System.Diagnostics.Tracing.dll", | |
| 416 | + "tools/net461-x86/System.Drawing.Primitives.dll", | |
| 417 | + "tools/net461-x86/System.Dynamic.Runtime.dll", | |
| 418 | + "tools/net461-x86/System.Globalization.Calendars.dll", | |
| 419 | + "tools/net461-x86/System.Globalization.Extensions.dll", | |
| 420 | + "tools/net461-x86/System.Globalization.dll", | |
| 421 | + "tools/net461-x86/System.IO.Compression.ZipFile.dll", | |
| 422 | + "tools/net461-x86/System.IO.Compression.dll", | |
| 423 | + "tools/net461-x86/System.IO.FileSystem.DriveInfo.dll", | |
| 424 | + "tools/net461-x86/System.IO.FileSystem.Primitives.dll", | |
| 425 | + "tools/net461-x86/System.IO.FileSystem.Watcher.dll", | |
| 426 | + "tools/net461-x86/System.IO.FileSystem.dll", | |
| 427 | + "tools/net461-x86/System.IO.IsolatedStorage.dll", | |
| 428 | + "tools/net461-x86/System.IO.MemoryMappedFiles.dll", | |
| 429 | + "tools/net461-x86/System.IO.Pipes.dll", | |
| 430 | + "tools/net461-x86/System.IO.UnmanagedMemoryStream.dll", | |
| 431 | + "tools/net461-x86/System.IO.dll", | |
| 432 | + "tools/net461-x86/System.Linq.Expressions.dll", | |
| 433 | + "tools/net461-x86/System.Linq.Parallel.dll", | |
| 434 | + "tools/net461-x86/System.Linq.Queryable.dll", | |
| 435 | + "tools/net461-x86/System.Linq.dll", | |
| 436 | + "tools/net461-x86/System.Memory.dll", | |
| 437 | + "tools/net461-x86/System.Net.Http.dll", | |
| 438 | + "tools/net461-x86/System.Net.NameResolution.dll", | |
| 439 | + "tools/net461-x86/System.Net.NetworkInformation.dll", | |
| 440 | + "tools/net461-x86/System.Net.Ping.dll", | |
| 441 | + "tools/net461-x86/System.Net.Primitives.dll", | |
| 442 | + "tools/net461-x86/System.Net.Requests.dll", | |
| 443 | + "tools/net461-x86/System.Net.Security.dll", | |
| 444 | + "tools/net461-x86/System.Net.Sockets.dll", | |
| 445 | + "tools/net461-x86/System.Net.WebHeaderCollection.dll", | |
| 446 | + "tools/net461-x86/System.Net.WebSockets.Client.dll", | |
| 447 | + "tools/net461-x86/System.Net.WebSockets.dll", | |
| 448 | + "tools/net461-x86/System.Numerics.Vectors.dll", | |
| 449 | + "tools/net461-x86/System.ObjectModel.dll", | |
| 450 | + "tools/net461-x86/System.Reflection.Extensions.dll", | |
| 451 | + "tools/net461-x86/System.Reflection.Primitives.dll", | |
| 452 | + "tools/net461-x86/System.Reflection.dll", | |
| 453 | + "tools/net461-x86/System.Resources.Reader.dll", | |
| 454 | + "tools/net461-x86/System.Resources.ResourceManager.dll", | |
| 455 | + "tools/net461-x86/System.Resources.Writer.dll", | |
| 456 | + "tools/net461-x86/System.Runtime.CompilerServices.Unsafe.dll", | |
| 457 | + "tools/net461-x86/System.Runtime.CompilerServices.VisualC.dll", | |
| 458 | + "tools/net461-x86/System.Runtime.Extensions.dll", | |
| 459 | + "tools/net461-x86/System.Runtime.Handles.dll", | |
| 460 | + "tools/net461-x86/System.Runtime.InteropServices.RuntimeInformation.dll", | |
| 461 | + "tools/net461-x86/System.Runtime.InteropServices.dll", | |
| 462 | + "tools/net461-x86/System.Runtime.Numerics.dll", | |
| 463 | + "tools/net461-x86/System.Runtime.Serialization.Formatters.dll", | |
| 464 | + "tools/net461-x86/System.Runtime.Serialization.Json.dll", | |
| 465 | + "tools/net461-x86/System.Runtime.Serialization.Primitives.dll", | |
| 466 | + "tools/net461-x86/System.Runtime.Serialization.Xml.dll", | |
| 467 | + "tools/net461-x86/System.Runtime.dll", | |
| 468 | + "tools/net461-x86/System.Security.Claims.dll", | |
| 469 | + "tools/net461-x86/System.Security.Cryptography.Algorithms.dll", | |
| 470 | + "tools/net461-x86/System.Security.Cryptography.Csp.dll", | |
| 471 | + "tools/net461-x86/System.Security.Cryptography.Encoding.dll", | |
| 472 | + "tools/net461-x86/System.Security.Cryptography.Primitives.dll", | |
| 473 | + "tools/net461-x86/System.Security.Cryptography.X509Certificates.dll", | |
| 474 | + "tools/net461-x86/System.Security.Principal.dll", | |
| 475 | + "tools/net461-x86/System.Security.SecureString.dll", | |
| 476 | + "tools/net461-x86/System.Text.Encoding.Extensions.dll", | |
| 477 | + "tools/net461-x86/System.Text.Encoding.dll", | |
| 478 | + "tools/net461-x86/System.Text.RegularExpressions.dll", | |
| 479 | + "tools/net461-x86/System.Threading.Overlapped.dll", | |
| 480 | + "tools/net461-x86/System.Threading.Tasks.Parallel.dll", | |
| 481 | + "tools/net461-x86/System.Threading.Tasks.dll", | |
| 482 | + "tools/net461-x86/System.Threading.Thread.dll", | |
| 483 | + "tools/net461-x86/System.Threading.ThreadPool.dll", | |
| 484 | + "tools/net461-x86/System.Threading.Timer.dll", | |
| 485 | + "tools/net461-x86/System.Threading.dll", | |
| 486 | + "tools/net461-x86/System.ValueTuple.dll", | |
| 487 | + "tools/net461-x86/System.Xml.ReaderWriter.dll", | |
| 488 | + "tools/net461-x86/System.Xml.XDocument.dll", | |
| 489 | + "tools/net461-x86/System.Xml.XPath.XDocument.dll", | |
| 490 | + "tools/net461-x86/System.Xml.XPath.dll", | |
| 491 | + "tools/net461-x86/System.Xml.XmlDocument.dll", | |
| 492 | + "tools/net461-x86/System.Xml.XmlSerializer.dll", | |
| 493 | + "tools/net461-x86/netstandard.dll", | |
| 494 | + "tools/net461/GetDocument.Insider.exe", | |
| 495 | + "tools/net461/GetDocument.Insider.exe.config", | |
| 496 | + "tools/net461/Microsoft.Win32.Primitives.dll", | |
| 497 | + "tools/net461/System.AppContext.dll", | |
| 498 | + "tools/net461/System.Buffers.dll", | |
| 499 | + "tools/net461/System.Collections.Concurrent.dll", | |
| 500 | + "tools/net461/System.Collections.NonGeneric.dll", | |
| 501 | + "tools/net461/System.Collections.Specialized.dll", | |
| 502 | + "tools/net461/System.Collections.dll", | |
| 503 | + "tools/net461/System.ComponentModel.EventBasedAsync.dll", | |
| 504 | + "tools/net461/System.ComponentModel.Primitives.dll", | |
| 505 | + "tools/net461/System.ComponentModel.TypeConverter.dll", | |
| 506 | + "tools/net461/System.ComponentModel.dll", | |
| 507 | + "tools/net461/System.Console.dll", | |
| 508 | + "tools/net461/System.Data.Common.dll", | |
| 509 | + "tools/net461/System.Diagnostics.Contracts.dll", | |
| 510 | + "tools/net461/System.Diagnostics.Debug.dll", | |
| 511 | + "tools/net461/System.Diagnostics.DiagnosticSource.dll", | |
| 512 | + "tools/net461/System.Diagnostics.FileVersionInfo.dll", | |
| 513 | + "tools/net461/System.Diagnostics.Process.dll", | |
| 514 | + "tools/net461/System.Diagnostics.StackTrace.dll", | |
| 515 | + "tools/net461/System.Diagnostics.TextWriterTraceListener.dll", | |
| 516 | + "tools/net461/System.Diagnostics.Tools.dll", | |
| 517 | + "tools/net461/System.Diagnostics.TraceSource.dll", | |
| 518 | + "tools/net461/System.Diagnostics.Tracing.dll", | |
| 519 | + "tools/net461/System.Drawing.Primitives.dll", | |
| 520 | + "tools/net461/System.Dynamic.Runtime.dll", | |
| 521 | + "tools/net461/System.Globalization.Calendars.dll", | |
| 522 | + "tools/net461/System.Globalization.Extensions.dll", | |
| 523 | + "tools/net461/System.Globalization.dll", | |
| 524 | + "tools/net461/System.IO.Compression.ZipFile.dll", | |
| 525 | + "tools/net461/System.IO.Compression.dll", | |
| 526 | + "tools/net461/System.IO.FileSystem.DriveInfo.dll", | |
| 527 | + "tools/net461/System.IO.FileSystem.Primitives.dll", | |
| 528 | + "tools/net461/System.IO.FileSystem.Watcher.dll", | |
| 529 | + "tools/net461/System.IO.FileSystem.dll", | |
| 530 | + "tools/net461/System.IO.IsolatedStorage.dll", | |
| 531 | + "tools/net461/System.IO.MemoryMappedFiles.dll", | |
| 532 | + "tools/net461/System.IO.Pipes.dll", | |
| 533 | + "tools/net461/System.IO.UnmanagedMemoryStream.dll", | |
| 534 | + "tools/net461/System.IO.dll", | |
| 535 | + "tools/net461/System.Linq.Expressions.dll", | |
| 536 | + "tools/net461/System.Linq.Parallel.dll", | |
| 537 | + "tools/net461/System.Linq.Queryable.dll", | |
| 538 | + "tools/net461/System.Linq.dll", | |
| 539 | + "tools/net461/System.Memory.dll", | |
| 540 | + "tools/net461/System.Net.Http.dll", | |
| 541 | + "tools/net461/System.Net.NameResolution.dll", | |
| 542 | + "tools/net461/System.Net.NetworkInformation.dll", | |
| 543 | + "tools/net461/System.Net.Ping.dll", | |
| 544 | + "tools/net461/System.Net.Primitives.dll", | |
| 545 | + "tools/net461/System.Net.Requests.dll", | |
| 546 | + "tools/net461/System.Net.Security.dll", | |
| 547 | + "tools/net461/System.Net.Sockets.dll", | |
| 548 | + "tools/net461/System.Net.WebHeaderCollection.dll", | |
| 549 | + "tools/net461/System.Net.WebSockets.Client.dll", | |
| 550 | + "tools/net461/System.Net.WebSockets.dll", | |
| 551 | + "tools/net461/System.Numerics.Vectors.dll", | |
| 552 | + "tools/net461/System.ObjectModel.dll", | |
| 553 | + "tools/net461/System.Reflection.Extensions.dll", | |
| 554 | + "tools/net461/System.Reflection.Primitives.dll", | |
| 555 | + "tools/net461/System.Reflection.dll", | |
| 556 | + "tools/net461/System.Resources.Reader.dll", | |
| 557 | + "tools/net461/System.Resources.ResourceManager.dll", | |
| 558 | + "tools/net461/System.Resources.Writer.dll", | |
| 559 | + "tools/net461/System.Runtime.CompilerServices.Unsafe.dll", | |
| 560 | + "tools/net461/System.Runtime.CompilerServices.VisualC.dll", | |
| 561 | + "tools/net461/System.Runtime.Extensions.dll", | |
| 562 | + "tools/net461/System.Runtime.Handles.dll", | |
| 563 | + "tools/net461/System.Runtime.InteropServices.RuntimeInformation.dll", | |
| 564 | + "tools/net461/System.Runtime.InteropServices.dll", | |
| 565 | + "tools/net461/System.Runtime.Numerics.dll", | |
| 566 | + "tools/net461/System.Runtime.Serialization.Formatters.dll", | |
| 567 | + "tools/net461/System.Runtime.Serialization.Json.dll", | |
| 568 | + "tools/net461/System.Runtime.Serialization.Primitives.dll", | |
| 569 | + "tools/net461/System.Runtime.Serialization.Xml.dll", | |
| 570 | + "tools/net461/System.Runtime.dll", | |
| 571 | + "tools/net461/System.Security.Claims.dll", | |
| 572 | + "tools/net461/System.Security.Cryptography.Algorithms.dll", | |
| 573 | + "tools/net461/System.Security.Cryptography.Csp.dll", | |
| 574 | + "tools/net461/System.Security.Cryptography.Encoding.dll", | |
| 575 | + "tools/net461/System.Security.Cryptography.Primitives.dll", | |
| 576 | + "tools/net461/System.Security.Cryptography.X509Certificates.dll", | |
| 577 | + "tools/net461/System.Security.Principal.dll", | |
| 578 | + "tools/net461/System.Security.SecureString.dll", | |
| 579 | + "tools/net461/System.Text.Encoding.Extensions.dll", | |
| 580 | + "tools/net461/System.Text.Encoding.dll", | |
| 581 | + "tools/net461/System.Text.RegularExpressions.dll", | |
| 582 | + "tools/net461/System.Threading.Overlapped.dll", | |
| 583 | + "tools/net461/System.Threading.Tasks.Parallel.dll", | |
| 584 | + "tools/net461/System.Threading.Tasks.dll", | |
| 585 | + "tools/net461/System.Threading.Thread.dll", | |
| 586 | + "tools/net461/System.Threading.ThreadPool.dll", | |
| 587 | + "tools/net461/System.Threading.Timer.dll", | |
| 588 | + "tools/net461/System.Threading.dll", | |
| 589 | + "tools/net461/System.ValueTuple.dll", | |
| 590 | + "tools/net461/System.Xml.ReaderWriter.dll", | |
| 591 | + "tools/net461/System.Xml.XDocument.dll", | |
| 592 | + "tools/net461/System.Xml.XPath.XDocument.dll", | |
| 593 | + "tools/net461/System.Xml.XPath.dll", | |
| 594 | + "tools/net461/System.Xml.XmlDocument.dll", | |
| 595 | + "tools/net461/System.Xml.XmlSerializer.dll", | |
| 596 | + "tools/net461/netstandard.dll", | |
| 597 | + "tools/netcoreapp2.1/GetDocument.Insider.deps.json", | |
| 598 | + "tools/netcoreapp2.1/GetDocument.Insider.dll", | |
| 599 | + "tools/netcoreapp2.1/GetDocument.Insider.runtimeconfig.json", | |
| 600 | + "tools/netcoreapp2.1/System.Diagnostics.DiagnosticSource.dll" | |
| 601 | + ] | |
| 602 | + }, | |
| 603 | + "Microsoft.Extensions.DependencyInjection/8.0.0": { | |
| 604 | + "sha512": "V8S3bsm50ig6JSyrbcJJ8bW2b9QLGouz+G1miK3UTaOWmMtFwNNNzUf4AleyDWUmTrWMLNnFSLEQtxmxgNQnNQ==", | |
| 605 | + "type": "package", | |
| 606 | + "path": "microsoft.extensions.dependencyinjection/8.0.0", | |
| 607 | + "files": [ | |
| 608 | + ".nupkg.metadata", | |
| 609 | + ".signature.p7s", | |
| 610 | + "Icon.png", | |
| 611 | + "LICENSE.TXT", | |
| 612 | + "PACKAGE.md", | |
| 613 | + "THIRD-PARTY-NOTICES.TXT", | |
| 614 | + "buildTransitive/net461/Microsoft.Extensions.DependencyInjection.targets", | |
| 615 | + "buildTransitive/net462/_._", | |
| 616 | + "buildTransitive/net6.0/_._", | |
| 617 | + "buildTransitive/netcoreapp2.0/Microsoft.Extensions.DependencyInjection.targets", | |
| 618 | + "lib/net462/Microsoft.Extensions.DependencyInjection.dll", | |
| 619 | + "lib/net462/Microsoft.Extensions.DependencyInjection.xml", | |
| 620 | + "lib/net6.0/Microsoft.Extensions.DependencyInjection.dll", | |
| 621 | + "lib/net6.0/Microsoft.Extensions.DependencyInjection.xml", | |
| 622 | + "lib/net7.0/Microsoft.Extensions.DependencyInjection.dll", | |
| 623 | + "lib/net7.0/Microsoft.Extensions.DependencyInjection.xml", | |
| 624 | + "lib/net8.0/Microsoft.Extensions.DependencyInjection.dll", | |
| 625 | + "lib/net8.0/Microsoft.Extensions.DependencyInjection.xml", | |
| 626 | + "lib/netstandard2.0/Microsoft.Extensions.DependencyInjection.dll", | |
| 627 | + "lib/netstandard2.0/Microsoft.Extensions.DependencyInjection.xml", | |
| 628 | + "lib/netstandard2.1/Microsoft.Extensions.DependencyInjection.dll", | |
| 629 | + "lib/netstandard2.1/Microsoft.Extensions.DependencyInjection.xml", | |
| 630 | + "microsoft.extensions.dependencyinjection.8.0.0.nupkg.sha512", | |
| 631 | + "microsoft.extensions.dependencyinjection.nuspec", | |
| 632 | + "useSharedDesignerContext.txt" | |
| 633 | + ] | |
| 634 | + }, | |
| 635 | + "Microsoft.Extensions.DependencyInjection.Abstractions/8.0.0": { | |
| 636 | + "sha512": "cjWrLkJXK0rs4zofsK4bSdg+jhDLTaxrkXu4gS6Y7MAlCvRyNNgwY/lJi5RDlQOnSZweHqoyvgvbdvQsRIW+hg==", | |
| 637 | + "type": "package", | |
| 638 | + "path": "microsoft.extensions.dependencyinjection.abstractions/8.0.0", | |
| 639 | + "files": [ | |
| 640 | + ".nupkg.metadata", | |
| 641 | + ".signature.p7s", | |
| 642 | + "Icon.png", | |
| 643 | + "LICENSE.TXT", | |
| 644 | + "PACKAGE.md", | |
| 645 | + "THIRD-PARTY-NOTICES.TXT", | |
| 646 | + "buildTransitive/net461/Microsoft.Extensions.DependencyInjection.Abstractions.targets", | |
| 647 | + "buildTransitive/net462/_._", | |
| 648 | + "buildTransitive/net6.0/_._", | |
| 649 | + "buildTransitive/netcoreapp2.0/Microsoft.Extensions.DependencyInjection.Abstractions.targets", | |
| 650 | + "lib/net462/Microsoft.Extensions.DependencyInjection.Abstractions.dll", | |
| 651 | + "lib/net462/Microsoft.Extensions.DependencyInjection.Abstractions.xml", | |
| 652 | + "lib/net6.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll", | |
| 653 | + "lib/net6.0/Microsoft.Extensions.DependencyInjection.Abstractions.xml", | |
| 654 | + "lib/net7.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll", | |
| 655 | + "lib/net7.0/Microsoft.Extensions.DependencyInjection.Abstractions.xml", | |
| 656 | + "lib/net8.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll", | |
| 657 | + "lib/net8.0/Microsoft.Extensions.DependencyInjection.Abstractions.xml", | |
| 658 | + "lib/netstandard2.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll", | |
| 659 | + "lib/netstandard2.0/Microsoft.Extensions.DependencyInjection.Abstractions.xml", | |
| 660 | + "lib/netstandard2.1/Microsoft.Extensions.DependencyInjection.Abstractions.dll", | |
| 661 | + "lib/netstandard2.1/Microsoft.Extensions.DependencyInjection.Abstractions.xml", | |
| 662 | + "microsoft.extensions.dependencyinjection.abstractions.8.0.0.nupkg.sha512", | |
| 663 | + "microsoft.extensions.dependencyinjection.abstractions.nuspec", | |
| 664 | + "useSharedDesignerContext.txt" | |
| 665 | + ] | |
| 666 | + }, | |
| 667 | + "Microsoft.OpenApi/1.2.3": { | |
| 668 | + "sha512": "Nug3rO+7Kl5/SBAadzSMAVgqDlfGjJZ0GenQrLywJ84XGKO0uRqkunz5Wyl0SDwcR71bAATXvSdbdzPrYRYKGw==", | |
| 669 | + "type": "package", | |
| 670 | + "path": "microsoft.openapi/1.2.3", | |
| 671 | + "files": [ | |
| 672 | + ".nupkg.metadata", | |
| 673 | + ".signature.p7s", | |
| 674 | + "lib/net46/Microsoft.OpenApi.dll", | |
| 675 | + "lib/net46/Microsoft.OpenApi.pdb", | |
| 676 | + "lib/net46/Microsoft.OpenApi.xml", | |
| 677 | + "lib/netstandard2.0/Microsoft.OpenApi.dll", | |
| 678 | + "lib/netstandard2.0/Microsoft.OpenApi.pdb", | |
| 679 | + "lib/netstandard2.0/Microsoft.OpenApi.xml", | |
| 680 | + "microsoft.openapi.1.2.3.nupkg.sha512", | |
| 681 | + "microsoft.openapi.nuspec" | |
| 682 | + ] | |
| 683 | + }, | |
| 684 | + "Stub.System.Data.SQLite.Core.NetStandard/1.0.115.5": { | |
| 685 | + "sha512": "WfrqQg6WL+r4H1sVKTenNj6ERLXUukUxqcjH1rqPqXadeIWccTVpydESieD7cZ/NWQVSKLYIHuoBX5du+BFhIQ==", | |
| 686 | + "type": "package", | |
| 687 | + "path": "stub.system.data.sqlite.core.netstandard/1.0.115.5", | |
| 688 | + "files": [ | |
| 689 | + ".nupkg.metadata", | |
| 690 | + ".signature.p7s", | |
| 691 | + "lib/netstandard2.0/System.Data.SQLite.dll", | |
| 692 | + "lib/netstandard2.0/System.Data.SQLite.dll.altconfig", | |
| 693 | + "lib/netstandard2.0/System.Data.SQLite.xml", | |
| 694 | + "lib/netstandard2.1/System.Data.SQLite.dll", | |
| 695 | + "lib/netstandard2.1/System.Data.SQLite.dll.altconfig", | |
| 696 | + "lib/netstandard2.1/System.Data.SQLite.xml", | |
| 697 | + "runtimes/linux-x64/native/SQLite.Interop.dll", | |
| 698 | + "runtimes/osx-x64/native/SQLite.Interop.dll", | |
| 699 | + "runtimes/win-x64/native/SQLite.Interop.dll", | |
| 700 | + "runtimes/win-x86/native/SQLite.Interop.dll", | |
| 701 | + "stub.system.data.sqlite.core.netstandard.1.0.115.5.nupkg.sha512", | |
| 702 | + "stub.system.data.sqlite.core.netstandard.nuspec" | |
| 703 | + ] | |
| 704 | + }, | |
| 705 | + "Swashbuckle.AspNetCore/6.4.0": { | |
| 706 | + "sha512": "eUBr4TW0up6oKDA5Xwkul289uqSMgY0xGN4pnbOIBqCcN9VKGGaPvHX3vWaG/hvocfGDP+MGzMA0bBBKz2fkmQ==", | |
| 707 | + "type": "package", | |
| 708 | + "path": "swashbuckle.aspnetcore/6.4.0", | |
| 709 | + "files": [ | |
| 710 | + ".nupkg.metadata", | |
| 711 | + ".signature.p7s", | |
| 712 | + "build/Swashbuckle.AspNetCore.props", | |
| 713 | + "swashbuckle.aspnetcore.6.4.0.nupkg.sha512", | |
| 714 | + "swashbuckle.aspnetcore.nuspec" | |
| 715 | + ] | |
| 716 | + }, | |
| 717 | + "Swashbuckle.AspNetCore.Swagger/6.4.0": { | |
| 718 | + "sha512": "nl4SBgGM+cmthUcpwO/w1lUjevdDHAqRvfUoe4Xp/Uvuzt9mzGUwyFCqa3ODBAcZYBiFoKvrYwz0rabslJvSmQ==", | |
| 719 | + "type": "package", | |
| 720 | + "path": "swashbuckle.aspnetcore.swagger/6.4.0", | |
| 721 | + "files": [ | |
| 722 | + ".nupkg.metadata", | |
| 723 | + ".signature.p7s", | |
| 724 | + "lib/net5.0/Swashbuckle.AspNetCore.Swagger.dll", | |
| 725 | + "lib/net5.0/Swashbuckle.AspNetCore.Swagger.pdb", | |
| 726 | + "lib/net5.0/Swashbuckle.AspNetCore.Swagger.xml", | |
| 727 | + "lib/net6.0/Swashbuckle.AspNetCore.Swagger.dll", | |
| 728 | + "lib/net6.0/Swashbuckle.AspNetCore.Swagger.pdb", | |
| 729 | + "lib/net6.0/Swashbuckle.AspNetCore.Swagger.xml", | |
| 730 | + "lib/netcoreapp3.0/Swashbuckle.AspNetCore.Swagger.dll", | |
| 731 | + "lib/netcoreapp3.0/Swashbuckle.AspNetCore.Swagger.pdb", | |
| 732 | + "lib/netcoreapp3.0/Swashbuckle.AspNetCore.Swagger.xml", | |
| 733 | + "lib/netstandard2.0/Swashbuckle.AspNetCore.Swagger.dll", | |
| 734 | + "lib/netstandard2.0/Swashbuckle.AspNetCore.Swagger.pdb", | |
| 735 | + "lib/netstandard2.0/Swashbuckle.AspNetCore.Swagger.xml", | |
| 736 | + "swashbuckle.aspnetcore.swagger.6.4.0.nupkg.sha512", | |
| 737 | + "swashbuckle.aspnetcore.swagger.nuspec" | |
| 738 | + ] | |
| 739 | + }, | |
| 740 | + "Swashbuckle.AspNetCore.SwaggerGen/6.4.0": { | |
| 741 | + "sha512": "lXhcUBVqKrPFAQF7e/ZeDfb5PMgE8n5t6L5B6/BQSpiwxgHzmBcx8Msu42zLYFTvR5PIqE9Q9lZvSQAcwCxJjw==", | |
| 742 | + "type": "package", | |
| 743 | + "path": "swashbuckle.aspnetcore.swaggergen/6.4.0", | |
| 744 | + "files": [ | |
| 745 | + ".nupkg.metadata", | |
| 746 | + ".signature.p7s", | |
| 747 | + "lib/net5.0/Swashbuckle.AspNetCore.SwaggerGen.dll", | |
| 748 | + "lib/net5.0/Swashbuckle.AspNetCore.SwaggerGen.pdb", | |
| 749 | + "lib/net5.0/Swashbuckle.AspNetCore.SwaggerGen.xml", | |
| 750 | + "lib/net6.0/Swashbuckle.AspNetCore.SwaggerGen.dll", | |
| 751 | + "lib/net6.0/Swashbuckle.AspNetCore.SwaggerGen.pdb", | |
| 752 | + "lib/net6.0/Swashbuckle.AspNetCore.SwaggerGen.xml", | |
| 753 | + "lib/netcoreapp3.0/Swashbuckle.AspNetCore.SwaggerGen.dll", | |
| 754 | + "lib/netcoreapp3.0/Swashbuckle.AspNetCore.SwaggerGen.pdb", | |
| 755 | + "lib/netcoreapp3.0/Swashbuckle.AspNetCore.SwaggerGen.xml", | |
| 756 | + "lib/netstandard2.0/Swashbuckle.AspNetCore.SwaggerGen.dll", | |
| 757 | + "lib/netstandard2.0/Swashbuckle.AspNetCore.SwaggerGen.pdb", | |
| 758 | + "lib/netstandard2.0/Swashbuckle.AspNetCore.SwaggerGen.xml", | |
| 759 | + "swashbuckle.aspnetcore.swaggergen.6.4.0.nupkg.sha512", | |
| 760 | + "swashbuckle.aspnetcore.swaggergen.nuspec" | |
| 761 | + ] | |
| 762 | + }, | |
| 763 | + "Swashbuckle.AspNetCore.SwaggerUI/6.4.0": { | |
| 764 | + "sha512": "1Hh3atb3pi8c+v7n4/3N80Jj8RvLOXgWxzix6w3OZhB7zBGRwsy7FWr4e3hwgPweSBpwfElqj4V4nkjYabH9nQ==", | |
| 765 | + "type": "package", | |
| 766 | + "path": "swashbuckle.aspnetcore.swaggerui/6.4.0", | |
| 767 | + "files": [ | |
| 768 | + ".nupkg.metadata", | |
| 769 | + ".signature.p7s", | |
| 770 | + "lib/net5.0/Swashbuckle.AspNetCore.SwaggerUI.dll", | |
| 771 | + "lib/net5.0/Swashbuckle.AspNetCore.SwaggerUI.pdb", | |
| 772 | + "lib/net5.0/Swashbuckle.AspNetCore.SwaggerUI.xml", | |
| 773 | + "lib/net6.0/Swashbuckle.AspNetCore.SwaggerUI.dll", | |
| 774 | + "lib/net6.0/Swashbuckle.AspNetCore.SwaggerUI.pdb", | |
| 775 | + "lib/net6.0/Swashbuckle.AspNetCore.SwaggerUI.xml", | |
| 776 | + "lib/netcoreapp3.0/Swashbuckle.AspNetCore.SwaggerUI.dll", | |
| 777 | + "lib/netcoreapp3.0/Swashbuckle.AspNetCore.SwaggerUI.pdb", | |
| 778 | + "lib/netcoreapp3.0/Swashbuckle.AspNetCore.SwaggerUI.xml", | |
| 779 | + "lib/netstandard2.0/Swashbuckle.AspNetCore.SwaggerUI.dll", | |
| 780 | + "lib/netstandard2.0/Swashbuckle.AspNetCore.SwaggerUI.pdb", | |
| 781 | + "lib/netstandard2.0/Swashbuckle.AspNetCore.SwaggerUI.xml", | |
| 782 | + "swashbuckle.aspnetcore.swaggerui.6.4.0.nupkg.sha512", | |
| 783 | + "swashbuckle.aspnetcore.swaggerui.nuspec" | |
| 784 | + ] | |
| 785 | + }, | |
| 786 | + "System.Data.SQLite.Core/1.0.115.5": { | |
| 787 | + "sha512": "vADIqqgpxaC5xR6qOV8/KMZkQeSDCfmmWpVOtQx0oEr3Yjq2XdTxX7+jfE4+oO2xPovAbYiz6Q5cLRbSsDkq6Q==", | |
| 788 | + "type": "package", | |
| 789 | + "path": "system.data.sqlite.core/1.0.115.5", | |
| 790 | + "files": [ | |
| 791 | + ".nupkg.metadata", | |
| 792 | + ".signature.p7s", | |
| 793 | + "system.data.sqlite.core.1.0.115.5.nupkg.sha512", | |
| 794 | + "system.data.sqlite.core.nuspec" | |
| 795 | + ] | |
| 796 | + } | |
| 797 | + }, | |
| 798 | + "projectFileDependencyGroups": { | |
| 799 | + "net8.0": [ | |
| 800 | + "FreeSql >= 3.2.821", | |
| 801 | + "FreeSql.Provider.Sqlite >= 3.2.821", | |
| 802 | + "FreeSql.Repository >= 3.2.821", | |
| 803 | + "Swashbuckle.AspNetCore >= 6.4.0" | |
| 804 | + ] | |
| 805 | + }, | |
| 806 | + "packageFolders": { | |
| 807 | + "C:\\Users\\anan\\.nuget\\packages\\": {}, | |
| 808 | + "C:\\Users\\anan\\AppData\\Roaming\\Godot\\mono\\GodotNuGetFallbackFolder": {}, | |
| 809 | + "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages": {} | |
| 810 | + }, | |
| 811 | + "project": { | |
| 812 | + "version": "1.0.0", | |
| 813 | + "restore": { | |
| 814 | + "projectUniqueName": "E:\\Code\\Blueprint\\Blueprint.Net.Server\\Blueprint.Net.Server.csproj", | |
| 815 | + "projectName": "Blueprint.Net.Server", | |
| 816 | + "projectPath": "E:\\Code\\Blueprint\\Blueprint.Net.Server\\Blueprint.Net.Server.csproj", | |
| 817 | + "packagesPath": "C:\\Users\\anan\\.nuget\\packages\\", | |
| 818 | + "outputPath": "E:\\Code\\Blueprint\\Blueprint.Net.Server\\obj\\", | |
| 819 | + "projectStyle": "PackageReference", | |
| 820 | + "fallbackFolders": [ | |
| 821 | + "C:\\Users\\anan\\AppData\\Roaming\\Godot\\mono\\GodotNuGetFallbackFolder", | |
| 822 | + "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages" | |
| 823 | + ], | |
| 824 | + "configFilePaths": [ | |
| 825 | + "C:\\Users\\anan\\AppData\\Roaming\\NuGet\\NuGet.Config", | |
| 826 | + "C:\\Users\\anan\\AppData\\Roaming\\NuGet\\config\\Godot.Offline.Config", | |
| 827 | + "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.FallbackLocation.config", | |
| 828 | + "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config" | |
| 829 | + ], | |
| 830 | + "originalTargetFrameworks": [ | |
| 831 | + "net8.0" | |
| 832 | + ], | |
| 833 | + "sources": { | |
| 834 | + "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {}, | |
| 835 | + "C:\\Program Files\\dotnet\\library-packs": {}, | |
| 836 | + "https://api.nuget.org/v3/index.json": {} | |
| 837 | + }, | |
| 838 | + "frameworks": { | |
| 839 | + "net8.0": { | |
| 840 | + "targetAlias": "net8.0", | |
| 841 | + "projectReferences": {} | |
| 842 | + } | |
| 843 | + }, | |
| 844 | + "warningProperties": { | |
| 845 | + "warnAsError": [ | |
| 846 | + "NU1605" | |
| 847 | + ] | |
| 848 | + }, | |
| 849 | + "restoreAuditProperties": { | |
| 850 | + "enableAudit": "true", | |
| 851 | + "auditLevel": "low", | |
| 852 | + "auditMode": "direct" | |
| 853 | + } | |
| 854 | + }, | |
| 855 | + "frameworks": { | |
| 856 | + "net8.0": { | |
| 857 | + "targetAlias": "net8.0", | |
| 858 | + "dependencies": { | |
| 859 | + "FreeSql": { | |
| 860 | + "target": "Package", | |
| 861 | + "version": "[3.2.821, )" | |
| 862 | + }, | |
| 863 | + "FreeSql.Provider.Sqlite": { | |
| 864 | + "target": "Package", | |
| 865 | + "version": "[3.2.821, )" | |
| 866 | + }, | |
| 867 | + "FreeSql.Repository": { | |
| 868 | + "target": "Package", | |
| 869 | + "version": "[3.2.821, )" | |
| 870 | + }, | |
| 871 | + "Swashbuckle.AspNetCore": { | |
| 872 | + "target": "Package", | |
| 873 | + "version": "[6.4.0, )" | |
| 874 | + } | |
| 875 | + }, | |
| 876 | + "imports": [ | |
| 877 | + "net461", | |
| 878 | + "net462", | |
| 879 | + "net47", | |
| 880 | + "net471", | |
| 881 | + "net472", | |
| 882 | + "net48", | |
| 883 | + "net481" | |
| 884 | + ], | |
| 885 | + "assetTargetFallback": true, | |
| 886 | + "warn": true, | |
| 887 | + "frameworkReferences": { | |
| 888 | + "Microsoft.AspNetCore.App": { | |
| 889 | + "privateAssets": "none" | |
| 890 | + }, | |
| 891 | + "Microsoft.NETCore.App": { | |
| 892 | + "privateAssets": "all" | |
| 893 | + } | |
| 894 | + }, | |
| 895 | + "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\8.0.201/PortableRuntimeIdentifierGraph.json" | |
| 896 | + } | |
| 897 | + } | |
| 898 | + } | |
| 899 | +} | |
| 0 | 900 | \ No newline at end of file | ... | ... |
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/obj/project.nuget.cache
0 → 100644
| 1 | +{ | |
| 2 | + "version": 2, | |
| 3 | + "dgSpecHash": "DA7OQW1R/bNe9e6/SrjHTvIq5zA0jn0hwqi81cixrmZ4iGKP5aTwTMcL2WpK4pbrz1wFsABnWSUlUdTKp7LCLw==", | |
| 4 | + "success": true, | |
| 5 | + "projectFilePath": "E:\\Code\\Blueprint\\Blueprint.Net.Server\\Blueprint.Net.Server.csproj", | |
| 6 | + "expectedPackageFiles": [ | |
| 7 | + "C:\\Users\\anan\\.nuget\\packages\\freesql\\3.2.821\\freesql.3.2.821.nupkg.sha512", | |
| 8 | + "C:\\Users\\anan\\.nuget\\packages\\freesql.dbcontext\\3.2.821\\freesql.dbcontext.3.2.821.nupkg.sha512", | |
| 9 | + "C:\\Users\\anan\\.nuget\\packages\\freesql.provider.sqlite\\3.2.821\\freesql.provider.sqlite.3.2.821.nupkg.sha512", | |
| 10 | + "C:\\Users\\anan\\.nuget\\packages\\freesql.repository\\3.2.821\\freesql.repository.3.2.821.nupkg.sha512", | |
| 11 | + "C:\\Users\\anan\\.nuget\\packages\\microsoft.extensions.apidescription.server\\6.0.5\\microsoft.extensions.apidescription.server.6.0.5.nupkg.sha512", | |
| 12 | + "C:\\Users\\anan\\.nuget\\packages\\microsoft.extensions.dependencyinjection\\8.0.0\\microsoft.extensions.dependencyinjection.8.0.0.nupkg.sha512", | |
| 13 | + "C:\\Users\\anan\\.nuget\\packages\\microsoft.extensions.dependencyinjection.abstractions\\8.0.0\\microsoft.extensions.dependencyinjection.abstractions.8.0.0.nupkg.sha512", | |
| 14 | + "C:\\Users\\anan\\.nuget\\packages\\microsoft.openapi\\1.2.3\\microsoft.openapi.1.2.3.nupkg.sha512", | |
| 15 | + "C:\\Users\\anan\\.nuget\\packages\\stub.system.data.sqlite.core.netstandard\\1.0.115.5\\stub.system.data.sqlite.core.netstandard.1.0.115.5.nupkg.sha512", | |
| 16 | + "C:\\Users\\anan\\.nuget\\packages\\swashbuckle.aspnetcore\\6.4.0\\swashbuckle.aspnetcore.6.4.0.nupkg.sha512", | |
| 17 | + "C:\\Users\\anan\\.nuget\\packages\\swashbuckle.aspnetcore.swagger\\6.4.0\\swashbuckle.aspnetcore.swagger.6.4.0.nupkg.sha512", | |
| 18 | + "C:\\Users\\anan\\.nuget\\packages\\swashbuckle.aspnetcore.swaggergen\\6.4.0\\swashbuckle.aspnetcore.swaggergen.6.4.0.nupkg.sha512", | |
| 19 | + "C:\\Users\\anan\\.nuget\\packages\\swashbuckle.aspnetcore.swaggerui\\6.4.0\\swashbuckle.aspnetcore.swaggerui.6.4.0.nupkg.sha512", | |
| 20 | + "C:\\Users\\anan\\.nuget\\packages\\system.data.sqlite.core\\1.0.115.5\\system.data.sqlite.core.1.0.115.5.nupkg.sha512" | |
| 21 | + ], | |
| 22 | + "logs": [] | |
| 23 | +} | |
| 0 | 24 | \ No newline at end of file | ... | ... |
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/wwwroot/carddesign.html
0 → 100644
| 1 | +<!DOCTYPE html> | |
| 2 | +<html lang="en"> | |
| 3 | +<head> | |
| 4 | + <meta charset="UTF-8"> | |
| 5 | + <meta name="viewport" content="width=device-width, initial-scale=1.0"> | |
| 6 | + <title>Card Editor</title> | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + <style> | |
| 11 | + body { | |
| 12 | + font-family: Arial, sans-serif; | |
| 13 | + } | |
| 14 | + | |
| 15 | + .container { | |
| 16 | + max-width: 800px; | |
| 17 | + margin: auto; | |
| 18 | + padding: 20px; | |
| 19 | + } | |
| 20 | + | |
| 21 | + .json-output { | |
| 22 | + background-color: #f4f4f4; | |
| 23 | + border: 1px solid #ddd; | |
| 24 | + padding: 10px; | |
| 25 | + margin-top: 20px; | |
| 26 | + } | |
| 27 | + | |
| 28 | + input, select, button { | |
| 29 | + padding: 8px; | |
| 30 | + margin-top: 5px; | |
| 31 | + width: 100%; | |
| 32 | + } | |
| 33 | + | |
| 34 | + button { | |
| 35 | + cursor: pointer; | |
| 36 | + } | |
| 37 | + | |
| 38 | + svg { | |
| 39 | + background-color: #333; | |
| 40 | + border: 1px solid #ccc; | |
| 41 | + padding: 30px; | |
| 42 | + } | |
| 43 | + </style> | |
| 44 | +</head> | |
| 45 | +<body> | |
| 46 | + <div class="container"> | |
| 47 | + <h1>Card Editor</h1> | |
| 48 | + <form id="cardForm"> | |
| 49 | + <label for="id">Card ID:</label> | |
| 50 | + <input type="text" id="id" name="id" required> | |
| 51 | + | |
| 52 | + <label for="label">Label:</label> | |
| 53 | + <input type="text" id="label" name="label" required> | |
| 54 | + | |
| 55 | + <label for="type">Type:</label> | |
| 56 | + <input type="text" id="type" name="type" required> | |
| 57 | + | |
| 58 | + <label for="titleBarColor">Title Bar Color (comma-separated):</label> | |
| 59 | + <input type="text" id="titleBarColor" name="titleBarColor" required> | |
| 60 | + | |
| 61 | + <h3>Nodes</h3> | |
| 62 | + <div id="nodesContainer"> | |
| 63 | + <!-- Node inputs will be added here --> | |
| 64 | + </div> | |
| 65 | + <button type="button" onclick="addNode()">Add Node</button> | |
| 66 | + <button type="submit">Update Card JSON</button> | |
| 67 | + </form> | |
| 68 | + | |
| 69 | + <div class="json-output" id="jsonOutput"></div> | |
| 70 | + | |
| 71 | + <!-- SVG container for drawing the card --> | |
| 72 | + <svg id="svgContainer" width="200" height="300"></svg> | |
| 73 | + </div> | |
| 74 | + | |
| 75 | + <script type="text/javascript"> | |
| 76 | + var card = { | |
| 77 | + id: 'card0', | |
| 78 | + x: 0, | |
| 79 | + y: 0, | |
| 80 | + label: 'Start', | |
| 81 | + type: "start", | |
| 82 | + nodes: [{ | |
| 83 | + type: "out", | |
| 84 | + level: 0, | |
| 85 | + label: 'call', | |
| 86 | + enumType: 'call', | |
| 87 | + color: '#fff', | |
| 88 | + multiConnected: 1 | |
| 89 | + }], | |
| 90 | + titleBarColor: ['#84fab0', '#8fd3f4'] | |
| 91 | + }; | |
| 92 | + | |
| 93 | + function updateForm() { | |
| 94 | + document.getElementById('id').value = card.id; | |
| 95 | + document.getElementById('label').value = card.label; | |
| 96 | + document.getElementById('type').value = card.type; | |
| 97 | + document.getElementById('titleBarColor').value = card.titleBarColor.join(', '); | |
| 98 | + | |
| 99 | + const nodesContainer = document.getElementById('nodesContainer'); | |
| 100 | + nodesContainer.innerHTML = ''; | |
| 101 | + card.nodes.forEach((node, index) => { | |
| 102 | + addNode(node, index); | |
| 103 | + }); | |
| 104 | + } | |
| 105 | + | |
| 106 | + function addNode(node = {}, index = card.nodes.length) { | |
| 107 | + const container = document.createElement('div'); | |
| 108 | + container.innerHTML = ` | |
| 109 | + <label>Node ${index + 1}</label> | |
| 110 | + <select name="nodeType-${index}"> | |
| 111 | + <option value="in" ${node.type === 'in' ? 'selected' : ''}>In</option> | |
| 112 | + <option value="out" ${node.type === 'out' ? 'selected' : ''}>Out</option> | |
| 113 | + </select> | |
| 114 | + <input type="number" placeholder="Level" value="${node.level || 0}" name="nodeLevel-${index}"> | |
| 115 | + <input type="text" placeholder="Enum Type" value="${node.enumType || ''}" name="nodeEnumType-${index}"> | |
| 116 | + <input type="text" placeholder="Label" value="${node.label || ''}" name="nodeLabel-${index}"> | |
| 117 | + <input type="text" placeholder="Color" value="${node.color || ''}" name="nodeColor-${index}"> | |
| 118 | + <input type="number" placeholder="Multi Connected" value="${node.multiConnected || 0}" name="nodeMultiConnected-${index}"> | |
| 119 | + <button type="button" onclick="removeNode(${index})">Remove Node</button> | |
| 120 | + `; | |
| 121 | + document.getElementById('nodesContainer').appendChild(container); | |
| 122 | + } | |
| 123 | + | |
| 124 | + function removeNode(index) { | |
| 125 | + card.nodes.splice(index, 1); | |
| 126 | + updateForm(); // Refresh the form and JSON output | |
| 127 | + drawCard(); | |
| 128 | + } | |
| 129 | + | |
| 130 | + document.getElementById('cardForm').onsubmit = function (event) { | |
| 131 | + event.preventDefault(); | |
| 132 | + card.id = document.getElementById('id').value; | |
| 133 | + card.label = document.getElementById('label').value; | |
| 134 | + card.type = document.getElementById('type').value; | |
| 135 | + card.titleBarColor = document.getElementById('titleBarColor').value.split(',').map(color => color.trim()); | |
| 136 | + | |
| 137 | + card.nodes = []; | |
| 138 | + const nodes = document.querySelectorAll('#nodesContainer > div'); | |
| 139 | + nodes.forEach((node, index) => { | |
| 140 | + card.nodes.push({ | |
| 141 | + type: document.querySelector(`[name="nodeType-${index}"]`).value, | |
| 142 | + level: parseInt(document.querySelector(`[name="nodeLevel-${index}"]`).value), | |
| 143 | + enumType: document.querySelector(`[name="nodeEnumType-${index}"]`).value, | |
| 144 | + label: document.querySelector(`[name="nodeLabel-${index}"]`).value, | |
| 145 | + color: document.querySelector(`[name="nodeColor-${index}"]`).value, | |
| 146 | + multiConnected: parseInt(document.querySelector(`[name="nodeMultiConnected-${index}"]`).value) | |
| 147 | + }); | |
| 148 | + }); | |
| 149 | + | |
| 150 | + updateJSONOutput(); | |
| 151 | + drawCard(); | |
| 152 | + }; | |
| 153 | + | |
| 154 | + function updateJSONOutput() { | |
| 155 | + document.getElementById('jsonOutput').textContent = JSON.stringify(card, null, 2); | |
| 156 | + } | |
| 157 | + | |
| 158 | + function drawCard() { | |
| 159 | + const cardsContainer = document.getElementById('svgContainer'); | |
| 160 | + cardsContainer.innerHTML = ''; // 清除现有的卡片 | |
| 161 | + | |
| 162 | + //创建标题栏渐变色 | |
| 163 | + const defs = document.createElementNS('http://www.w3.org/2000/svg', 'defs'); | |
| 164 | + const linearGradient = document.createElementNS('http://www.w3.org/2000/svg', 'linearGradient'); | |
| 165 | + linearGradient.setAttribute('id', `titleGradient-${card.id}`); | |
| 166 | + linearGradient.setAttribute('x1', '0%'); // 渐变起点的x坐标 | |
| 167 | + linearGradient.setAttribute('y1', '100%'); // 渐变起点的y坐标 | |
| 168 | + linearGradient.setAttribute('x2', '100%'); // 渐变终点的x坐标 | |
| 169 | + linearGradient.setAttribute('y2', '0%'); // 渐变终点的y坐标 | |
| 170 | + | |
| 171 | + const stop1 = document.createElementNS('http://www.w3.org/2000/svg', 'stop'); | |
| 172 | + stop1.setAttribute('offset', '10%'); | |
| 173 | + stop1.setAttribute('style', `stop-color: ${card.titleBarColor[0]}; stop-opacity: 1`); | |
| 174 | + linearGradient.appendChild(stop1); | |
| 175 | + | |
| 176 | + const stop2 = document.createElementNS('http://www.w3.org/2000/svg', 'stop'); | |
| 177 | + stop2.setAttribute('offset', '100%'); | |
| 178 | + stop2.setAttribute('style', `stop-color: ${card.titleBarColor[1]}; stop-opacity: 1`); | |
| 179 | + linearGradient.appendChild(stop2); | |
| 180 | + | |
| 181 | + defs.appendChild(linearGradient); | |
| 182 | + cardsContainer.appendChild(defs); | |
| 183 | + | |
| 184 | + | |
| 185 | + | |
| 186 | + const nodeSpacing = 50; | |
| 187 | + const topBottomPadding = 20; | |
| 188 | + const titleBarHeight = 30; // 标题栏高度 | |
| 189 | + const maxLevel = Math.max(...card.nodes.map(node => node.level)) + 1; | |
| 190 | + const cardHeight = maxLevel * nodeSpacing + topBottomPadding * 2 + titleBarHeight; | |
| 191 | + | |
| 192 | + const group = document.createElementNS('http://www.w3.org/2000/svg', 'g'); | |
| 193 | + group.setAttribute('class', 'draggable card-container'); | |
| 194 | + group.setAttribute('data-id', card.id); | |
| 195 | + group.setAttribute('user-select', 'none'); | |
| 196 | + group.setAttribute('transform', `translate(${card.x},${card.y})`); | |
| 197 | + | |
| 198 | + const rect = document.createElementNS('http://www.w3.org/2000/svg', 'rect'); | |
| 199 | + rect.setAttribute('fill', '#222'); | |
| 200 | + rect.setAttribute('width', 150); | |
| 201 | + rect.setAttribute('style', 'cursor: auto;'); | |
| 202 | + rect.setAttribute('height', cardHeight); | |
| 203 | + rect.setAttribute('rx', 10); // 圆角 | |
| 204 | + rect.setAttribute('ry', 10); | |
| 205 | + group.appendChild(rect); | |
| 206 | + | |
| 207 | + // 使用path绘制带有指定圆角的矩形 | |
| 208 | + // 创建标题栏 | |
| 209 | + const titleBarWidth = 150; | |
| 210 | + const borderRadius = 10; // 圆角大小 | |
| 211 | + const titleBar = document.createElementNS('http://www.w3.org/2000/svg', 'path'); | |
| 212 | + const dValue = `M 0,${borderRadius} | |
| 213 | + a ${borderRadius},${borderRadius} 0 0 1 ${borderRadius},-${borderRadius} | |
| 214 | + h ${titleBarWidth - borderRadius * 2} | |
| 215 | + a ${borderRadius},${borderRadius} 0 0 1 ${borderRadius},${borderRadius} | |
| 216 | + v ${titleBarHeight - borderRadius} | |
| 217 | + h -${titleBarWidth} | |
| 218 | + z`; | |
| 219 | + titleBar.setAttribute('class', 'card'); | |
| 220 | + titleBar.setAttribute('d', dValue); | |
| 221 | + titleBar.setAttribute('fill', `url(#titleGradient-${card.id})`); | |
| 222 | + group.appendChild(titleBar); | |
| 223 | + | |
| 224 | + const text = document.createElementNS('http://www.w3.org/2000/svg', 'text'); | |
| 225 | + text.setAttribute('x', titleBarWidth / 2); | |
| 226 | + text.setAttribute('y', titleBarHeight / 2); | |
| 227 | + text.setAttribute('text-anchor', 'middle'); | |
| 228 | + text.setAttribute('alignment-baseline', 'middle'); | |
| 229 | + text.textContent = card.label; | |
| 230 | + group.appendChild(text); | |
| 231 | + | |
| 232 | + card.nodes.forEach((node, index) => { | |
| 233 | + | |
| 234 | + | |
| 235 | + const circle = document.createElementNS('http://www.w3.org/2000/svg', 'circle'); | |
| 236 | + circle.setAttribute('class', 'node'); | |
| 237 | + circle.setAttribute('cx', node.type === 'in' ? 0 : 150); | |
| 238 | + circle.setAttribute('cy', topBottomPadding + titleBarHeight + (node.level + 1) * | |
| 239 | + nodeSpacing - (nodeSpacing / 2)); | |
| 240 | + circle.setAttribute('r', 7); | |
| 241 | + circle.setAttribute('fill', node.color); | |
| 242 | + circle.setAttribute('data-card-id', card.id); | |
| 243 | + circle.setAttribute('data-node-id', `${card.id}-node${index + 1}`); | |
| 244 | + group.appendChild(circle); | |
| 245 | + | |
| 246 | + let labelX = node.type === 'in' ? 12 : 138; // 基本的X坐标 | |
| 247 | + const labelY = topBottomPadding + titleBarHeight + node.level * nodeSpacing + 21; | |
| 248 | + | |
| 249 | + // 创建SVG文本元素 | |
| 250 | + const multiConnectedLabel = document.createElementNS('http://www.w3.org/2000/svg', | |
| 251 | + 'text'); | |
| 252 | + multiConnectedLabel.setAttribute('x', labelX); | |
| 253 | + multiConnectedLabel.setAttribute('y', labelY); | |
| 254 | + multiConnectedLabel.setAttribute('text-anchor', 'middle'); | |
| 255 | + multiConnectedLabel.setAttribute('fill', '#aaa'); | |
| 256 | + multiConnectedLabel.setAttribute('style', 'font-size: 8px;'); | |
| 257 | + multiConnectedLabel.setAttribute('alignment-baseline', 'hanging'); | |
| 258 | + | |
| 259 | + | |
| 260 | + // 计算文本的宽度(假定的,因为SVG没有直接获取文本宽度的方法) | |
| 261 | + let estimatedTextLength; | |
| 262 | + if (node.multiConnected == undefined) { | |
| 263 | + estimatedTextLength = 20 | |
| 264 | + multiConnectedLabel.textContent = 'N'; | |
| 265 | + } else { | |
| 266 | + estimatedTextLength = node.multiConnected.length; | |
| 267 | + multiConnectedLabel.textContent = node.multiConnected; | |
| 268 | + } | |
| 269 | + | |
| 270 | + // 确保文本不会超出卡片右边界 | |
| 271 | + if (labelX + estimatedTextLength / 2 > 150) { | |
| 272 | + labelX = 150 - estimatedTextLength / 2; | |
| 273 | + nodeLabel.setAttribute('x', labelX); | |
| 274 | + } | |
| 275 | + | |
| 276 | + // 确保文本不会超出卡片左边界 | |
| 277 | + if (labelX - estimatedTextLength / 2 < 0) { | |
| 278 | + labelX = estimatedTextLength / 2; | |
| 279 | + nodeLabel.setAttribute('x', labelX); | |
| 280 | + } | |
| 281 | + | |
| 282 | + group.appendChild(multiConnectedLabel); | |
| 283 | + | |
| 284 | + if (node.label != undefined) { | |
| 285 | + // 计算文本标签的位置 | |
| 286 | + let labelX = node.type === 'in' ? 15 : 135; // 基本的X坐标 | |
| 287 | + const labelY = topBottomPadding + titleBarHeight + node.level * nodeSpacing + 40; | |
| 288 | + | |
| 289 | + // 创建SVG文本元素 | |
| 290 | + const nodeLabel = document.createElementNS('http://www.w3.org/2000/svg', 'text'); | |
| 291 | + nodeLabel.setAttribute('x', labelX); | |
| 292 | + nodeLabel.setAttribute('y', labelY); // 在节点下方留出一定空间 | |
| 293 | + nodeLabel.setAttribute('text-anchor', 'middle'); // 文本居中对齐 | |
| 294 | + nodeLabel.setAttribute('fill', '#aaa'); // 文本居中对齐 | |
| 295 | + nodeLabel.setAttribute('alignment-baseline', 'hanging'); | |
| 296 | + nodeLabel.textContent = node.label; | |
| 297 | + | |
| 298 | + // 计算文本的宽度(假定的,因为SVG没有直接获取文本宽度的方法) | |
| 299 | + const estimatedTextLength = node.label.length * 10; // 估算每个字符6像素宽 | |
| 300 | + | |
| 301 | + // 确保文本不会超出卡片右边界 | |
| 302 | + if (labelX + estimatedTextLength / 2 > 150) { | |
| 303 | + labelX = 150 - estimatedTextLength / 2; | |
| 304 | + nodeLabel.setAttribute('x', labelX); | |
| 305 | + } | |
| 306 | + | |
| 307 | + // 确保文本不会超出卡片左边界 | |
| 308 | + if (labelX - estimatedTextLength / 2 < 0) { | |
| 309 | + labelX = estimatedTextLength / 2; | |
| 310 | + nodeLabel.setAttribute('x', labelX); | |
| 311 | + } | |
| 312 | + | |
| 313 | + group.appendChild(nodeLabel); | |
| 314 | + | |
| 315 | + } | |
| 316 | + | |
| 317 | + switch (node.slot) { | |
| 318 | + case 'input': | |
| 319 | + const foreignObject = document.createElementNS('http://www.w3.org/2000/svg', | |
| 320 | + 'foreignObject'); | |
| 321 | + foreignObject.setAttribute('x', 0); | |
| 322 | + foreignObject.setAttribute('y', topBottomPadding + titleBarHeight + node.level * | |
| 323 | + nodeSpacing + 12); | |
| 324 | + foreignObject.setAttribute('width', 130); // 保持原始宽度 | |
| 325 | + foreignObject.setAttribute('height', nodeSpacing - 24); // 保持原始高度,减去的24像素为上下内边距之和 | |
| 326 | + const input = document.createElement('input'); | |
| 327 | + input.type = 'text'; | |
| 328 | + if (node.value == undefined) { | |
| 329 | + node.value = ''; | |
| 330 | + } | |
| 331 | + input.value = node.value; | |
| 332 | + input.addEventListener('input', function () { | |
| 333 | + node.value = input.value; | |
| 334 | + }); | |
| 335 | + // Set adjusted input styles | |
| 336 | + input.style.width = '110px'; | |
| 337 | + input.style.height = '100%'; | |
| 338 | + input.style.marginLeft = '20px'; | |
| 339 | + input.style.borderRadius = '5px'; | |
| 340 | + input.style.border = '1px solid white'; | |
| 341 | + input.style.backgroundColor = '#222'; | |
| 342 | + input.style.color = 'white'; | |
| 343 | + input.style.fontSize = '1em'; | |
| 344 | + input.style.padding = '0px'; // 可能需要调整或去除内边距以适应固定尺寸 | |
| 345 | + input.style.boxSizing = 'border-box'; // 确保宽高包含内容、内边距和边框 | |
| 346 | + | |
| 347 | + // Change border color on focus and blur | |
| 348 | + input.addEventListener('focus', () => { | |
| 349 | + input.style.outline = 'none'; // Remove default focus outline | |
| 350 | + input.style.borderColor = | |
| 351 | + 'white'; // Keep border color white on focus | |
| 352 | + }); | |
| 353 | + | |
| 354 | + input.addEventListener('blur', () => { | |
| 355 | + input.style.borderColor = | |
| 356 | + 'white'; // Revert to white when not focused | |
| 357 | + }); | |
| 358 | + | |
| 359 | + // 阻止事件冒泡 | |
| 360 | + input.addEventListener('click', function (event) { | |
| 361 | + event.stopPropagation(); | |
| 362 | + }); | |
| 363 | + | |
| 364 | + input.addEventListener('mousedown', function (event) { | |
| 365 | + event.stopPropagation(); | |
| 366 | + }); | |
| 367 | + | |
| 368 | + input.addEventListener('touchstart', function (event) { | |
| 369 | + event.stopPropagation(); | |
| 370 | + }); | |
| 371 | + | |
| 372 | + foreignObject.appendChild(input); | |
| 373 | + group.appendChild(foreignObject); | |
| 374 | + break; | |
| 375 | + } | |
| 376 | + | |
| 377 | + | |
| 378 | + | |
| 379 | + }); | |
| 380 | + | |
| 381 | + const deleteIcon = document.createElementNS('http://www.w3.org/2000/svg', 'rect'); | |
| 382 | + deleteIcon.setAttribute('class', 'card-delete-icon'); | |
| 383 | + deleteIcon.setAttribute('x', 125); | |
| 384 | + deleteIcon.setAttribute('y', 5); // 使其贴近标题栏的右上角 | |
| 385 | + deleteIcon.setAttribute('width', 20); | |
| 386 | + deleteIcon.setAttribute('height', 20); | |
| 387 | + deleteIcon.setAttribute('fill', 'transparent'); | |
| 388 | + deleteIcon.setAttribute('data-card-id', card.id); | |
| 389 | + deleteIcon.setAttribute('style', 'cursor: pointer;'); | |
| 390 | + group.appendChild(de,eIcon); | |
| 391 | + | |
| 392 | + const delText = document.createElementNS('http://www.w3.org/2000/svg', 'text'); | |
| 393 | + delText.setAttribute('x', 135); | |
| 394 | + delText.setAttribute('y', 20); // 调整位置以垂直居中 | |
| 395 | + delText.setAttribute('text-anchor', 'middle'); | |
| 396 | + delText.setAttribute('fill', 'white'); | |
| 397 | + delText.setAttribute('font-size', '16px'); // 适当调整字体大小以适应图标 | |
| 398 | + delText.setAttribute('pointer-events', 'none'); // 确保点击事件只触发于删除图标上 | |
| 399 | + delText.textContent = '×'; | |
| 400 | + group.appendChild(delText); | |
| 401 | + | |
| 402 | + cardsContainer.appendChild(group); | |
| 403 | + | |
| 404 | + attachNodeEventListeners(); | |
| 405 | + } | |
| 406 | + | |
| 407 | + | |
| 408 | + | |
| 409 | + | |
| 410 | + | |
| 411 | + updateForm(); | |
| 412 | + updateJSONOutput(); | |
| 413 | + drawCard(); | |
| 414 | + </script> | |
| 415 | +</body> | |
| 416 | +</html> | ... | ... |
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/wwwroot/index.html
0 → 100644
| 1 | +<!-- | |
| 2 | +<!DOCTYPE html> | |
| 3 | +<html lang="zh-cn"> | |
| 4 | + | |
| 5 | + <head> | |
| 6 | + <meta charset="UTF-8"> | |
| 7 | + <meta name="viewport" content="width=device-width, initial-scale=1.0"> | |
| 8 | + <title>Blueprint</title> | |
| 9 | + <style> | |
| 10 | + body, | |
| 11 | + html { | |
| 12 | + margin: 0; | |
| 13 | + padding: 0; | |
| 14 | + width: 100%; | |
| 15 | + height: 100%; | |
| 16 | + overflow: hidden; | |
| 17 | + } | |
| 18 | + | |
| 19 | + /* 弹窗容器样式 */ | |
| 20 | + #card-creation-modal { | |
| 21 | + border: 1px solid #444; | |
| 22 | + background: linear-gradient(145deg, #333, #555); | |
| 23 | + padding: 5px; | |
| 24 | + z-index: 100; | |
| 25 | + box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2); | |
| 26 | + border-radius: 5px; | |
| 27 | + overflow: hidden; | |
| 28 | + margin: 0; | |
| 29 | + user-select: none; | |
| 30 | + } | |
| 31 | + | |
| 32 | + #card-type-list { | |
| 33 | + | |
| 34 | + padding-left: 0px; | |
| 35 | + } | |
| 36 | + | |
| 37 | + /* 列表项基础样式 */ | |
| 38 | + #card-type-list li { | |
| 39 | + list-style: none; | |
| 40 | + /* 去除列表项目符号 */ | |
| 41 | + padding: 8px 15px; | |
| 42 | + /* 减少垂直内边距使其更紧凑 */ | |
| 43 | + border-bottom: 1px solid #666; | |
| 44 | + /* 暗色底部边框线 */ | |
| 45 | + color: #ddd; | |
| 46 | + /* 暗色系字体颜色 */ | |
| 47 | + cursor: pointer; | |
| 48 | + /* 鼠标指针样式 */ | |
| 49 | + margin-left: 0; | |
| 50 | + /* 消除左边间隙 */ | |
| 51 | + | |
| 52 | + } | |
| 53 | + | |
| 54 | + /* 列表项高亮样式 */ | |
| 55 | + #card-type-list li:hover, | |
| 56 | + #card-type-list li:focus { | |
| 57 | + background-color: #777; | |
| 58 | + /* 暗色背景颜色 */ | |
| 59 | + color: #fff; | |
| 60 | + /* 高亮字体颜色 */ | |
| 61 | + } | |
| 62 | + | |
| 63 | + /* 最后一个列表项的底部边框 */ | |
| 64 | + #card-type-list li:last-child { | |
| 65 | + border-bottom: none; | |
| 66 | + } | |
| 67 | + | |
| 68 | + .grid-background { | |
| 69 | + background-color: #292929; | |
| 70 | + background-image: | |
| 71 | + linear-gradient(to right, black 1px, transparent 1px), | |
| 72 | + linear-gradient(to bottom, black 1px, transparent 1px), | |
| 73 | + linear-gradient(to right, #404040 1px, transparent 1px), | |
| 74 | + linear-gradient(to bottom, #404040 1px, transparent 1px); | |
| 75 | + background-size: | |
| 76 | + 100px 100px, | |
| 77 | + 100px 100px, | |
| 78 | + 10px 10px, | |
| 79 | + 10px 10px; | |
| 80 | + width: 100%; | |
| 81 | + height: 100%; | |
| 82 | + } | |
| 83 | + | |
| 84 | + .draggable { | |
| 85 | + cursor: grab; | |
| 86 | + } | |
| 87 | + | |
| 88 | + .node { | |
| 89 | + | |
| 90 | + cursor: pointer; | |
| 91 | + } | |
| 92 | + | |
| 93 | + .link { | |
| 94 | + stroke: black; | |
| 95 | + stroke-width: 2; | |
| 96 | + } | |
| 97 | + | |
| 98 | + .card { | |
| 99 | + /* fill: lightgrey; | |
| 100 | + stroke: black; */ | |
| 101 | + | |
| 102 | + stroke-width: 1; | |
| 103 | + user-select: none; | |
| 104 | + } | |
| 105 | + | |
| 106 | + text { | |
| 107 | + pointer-events: none; | |
| 108 | + user-select: none; | |
| 109 | + } | |
| 110 | + </style> | |
| 111 | + </head> | |
| 112 | + | |
| 113 | + <body> | |
| 114 | + <!– 弹窗容器 –> | |
| 115 | + <div id="card-creation-modal" | |
| 116 | + style="display:none; position: absolute; border: 1px solid #ccc; background-color: #fff; padding: 10px; z-index: 100;"> | |
| 117 | + <!– 搜索结果列表 –> | |
| 118 | + <ul id="card-type-list"></ul> | |
| 119 | + </div> | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + <svg style="width: 100%;height: 100%;" id="svgContainer" class="grid-background"> | |
| 124 | + <g id="linksContainer"></g> <!– 用于存放线条 –> | |
| 125 | + <g id="cardsContainer"></g> <!– 用于存放卡片 –> | |
| 126 | + </svg> | |
| 127 | + | |
| 128 | + <script> | |
| 129 | + let cards = [{ | |
| 130 | + id: 'card0', | |
| 131 | + x: 0, | |
| 132 | + y: 0, | |
| 133 | + label: 'Start', | |
| 134 | + type: "start", | |
| 135 | + nodes: [{ | |
| 136 | + type: "out", | |
| 137 | + level: 0, | |
| 138 | + enumType: 'call', | |
| 139 | + color: '#fff', | |
| 140 | + multiConnected: 1 | |
| 141 | + }, ], | |
| 142 | + titleBarColor: ['#84fab0', '#8fd3f4'] | |
| 143 | + }, | |
| 144 | + { | |
| 145 | + id: 'card1', | |
| 146 | + x: 100, | |
| 147 | + y: 200, | |
| 148 | + label: 'Condition', | |
| 149 | + type: "condition", | |
| 150 | + nodes: [{ | |
| 151 | + type: "in", | |
| 152 | + level: 0, | |
| 153 | + enumType: 'call', | |
| 154 | + color: '#fff' | |
| 155 | + }, | |
| 156 | + { | |
| 157 | + type: "in", | |
| 158 | + level: 1, | |
| 159 | + enumType: 'int', | |
| 160 | + color: '#28C76F', | |
| 161 | + slot: 'input', | |
| 162 | + label: 'int', | |
| 163 | + multiConnected: 1 | |
| 164 | + }, | |
| 165 | + { | |
| 166 | + type: "in", | |
| 167 | + level: 2, | |
| 168 | + enumType: 'int', | |
| 169 | + color: '#28C76F', | |
| 170 | + slot: 'input', | |
| 171 | + label: 'int', | |
| 172 | + multiConnected: 1 | |
| 173 | + }, | |
| 174 | + { | |
| 175 | + type: "out", | |
| 176 | + level: 0, | |
| 177 | + enumType: 'call', | |
| 178 | + color: '#fff' | |
| 179 | + }, | |
| 180 | + { | |
| 181 | + type: "out", | |
| 182 | + level: 1, | |
| 183 | + enumType: 'bool', | |
| 184 | + color: '#0396FF', | |
| 185 | + label: 'bool', | |
| 186 | + multiConnected: 1 | |
| 187 | + }, | |
| 188 | + ], | |
| 189 | + titleBarColor: ['#fccb90', '#d57eeb'] | |
| 190 | + }, | |
| 191 | + { | |
| 192 | + id: 'card2', | |
| 193 | + x: 300, | |
| 194 | + y: 400, | |
| 195 | + label: 'BoolToString', | |
| 196 | + type: "call", | |
| 197 | + nodes: [{ | |
| 198 | + type: "in", | |
| 199 | + level: 0, | |
| 200 | + enumType: 'call', | |
| 201 | + color: '#fff' | |
| 202 | + }, | |
| 203 | + { | |
| 204 | + type: "in", | |
| 205 | + level: 1, | |
| 206 | + enumType: 'bool', | |
| 207 | + color: '#0396FF', | |
| 208 | + label: 'bool', | |
| 209 | + multiConnected: 1 | |
| 210 | + }, | |
| 211 | + { | |
| 212 | + type: "out", | |
| 213 | + level: 0, | |
| 214 | + enumType: 'call', | |
| 215 | + color: '#fff' | |
| 216 | + }, | |
| 217 | + { | |
| 218 | + type: "out", | |
| 219 | + level: 1, | |
| 220 | + enumType: 'string', | |
| 221 | + color: '#DE4313', | |
| 222 | + label: 'string', | |
| 223 | + multiConnected: 1 | |
| 224 | + } | |
| 225 | + ], | |
| 226 | + titleBarColor: ['#3C8CE7', '#00EAFF'] | |
| 227 | + | |
| 228 | + }, | |
| 229 | + { | |
| 230 | + id: 'card3', | |
| 231 | + x: 100, | |
| 232 | + y: 300, | |
| 233 | + label: 'Print', | |
| 234 | + type: "print", | |
| 235 | + nodes: [{ | |
| 236 | + type: "in", | |
| 237 | + level: 0, | |
| 238 | + enumType: 'call', | |
| 239 | + color: '#fff' | |
| 240 | + }, | |
| 241 | + { | |
| 242 | + type: "in", | |
| 243 | + level: 1, | |
| 244 | + enumType: 'string', | |
| 245 | + color: '#DE4313', | |
| 246 | + label: 'string', | |
| 247 | + multiConnected: 1 | |
| 248 | + } | |
| 249 | + ], | |
| 250 | + titleBarColor: ['#f6d365', '#fda085'] | |
| 251 | + } | |
| 252 | + ]; | |
| 253 | + | |
| 254 | + | |
| 255 | + let links = []; | |
| 256 | + let currentLink = null; | |
| 257 | + let isDragging = false; | |
| 258 | + let isLinking = false; | |
| 259 | + let dragOffsetX, dragOffsetY; | |
| 260 | + let currentCard; | |
| 261 | + | |
| 262 | + function init() { | |
| 263 | + drawLinks(); | |
| 264 | + drawCards(); | |
| 265 | + attachEventListeners(); | |
| 266 | + } | |
| 267 | + | |
| 268 | + function drawCards() { | |
| 269 | + const cardsContainer = document.getElementById('cardsContainer'); | |
| 270 | + cardsContainer.innerHTML = ''; // 清除现有的卡片 | |
| 271 | + | |
| 272 | + cards.forEach(card => { | |
| 273 | + | |
| 274 | + //创建标题栏渐变色 | |
| 275 | + const defs = document.createElementNS('http://www.w3.org/2000/svg', 'defs'); | |
| 276 | + const linearGradient = document.createElementNS('http://www.w3.org/2000/svg', 'linearGradient'); | |
| 277 | + linearGradient.setAttribute('id', `titleGradient-${card.id}`); | |
| 278 | + linearGradient.setAttribute('x1', '0%'); // 渐变起点的x坐标 | |
| 279 | + linearGradient.setAttribute('y1', '100%'); // 渐变起点的y坐标 | |
| 280 | + linearGradient.setAttribute('x2', '100%'); // 渐变终点的x坐标 | |
| 281 | + linearGradient.setAttribute('y2', '0%'); // 渐变终点的y坐标 | |
| 282 | + | |
| 283 | + const stop1 = document.createElementNS('http://www.w3.org/2000/svg', 'stop'); | |
| 284 | + stop1.setAttribute('offset', '10%'); | |
| 285 | + stop1.setAttribute('style', `stop-color: ${card.titleBarColor[0]}; stop-opacity: 1`); | |
| 286 | + linearGradient.appendChild(stop1); | |
| 287 | + | |
| 288 | + const stop2 = document.createElementNS('http://www.w3.org/2000/svg', 'stop'); | |
| 289 | + stop2.setAttribute('offset', '100%'); | |
| 290 | + stop2.setAttribute('style', `stop-color: ${card.titleBarColor[1]}; stop-opacity: 1`); | |
| 291 | + linearGradient.appendChild(stop2); | |
| 292 | + | |
| 293 | + defs.appendChild(linearGradient); | |
| 294 | + cardsContainer.appendChild(defs); | |
| 295 | + | |
| 296 | + | |
| 297 | + | |
| 298 | + const nodeSpacing = 50; | |
| 299 | + const topBottomPadding = 20; | |
| 300 | + const titleBarHeight = 30; // 标题栏高度 | |
| 301 | + const maxLevel = Math.max(...card.nodes.map(node => node.level)) + 1; | |
| 302 | + const cardHeight = maxLevel * nodeSpacing + topBottomPadding * 2 + titleBarHeight; | |
| 303 | + | |
| 304 | + const group = document.createElementNS('http://www.w3.org/2000/svg', 'g'); | |
| 305 | + group.setAttribute('class', 'draggable card-container'); | |
| 306 | + group.setAttribute('data-id', card.id); | |
| 307 | + group.setAttribute('user-select', 'none'); | |
| 308 | + group.setAttribute('transform', `translate(${card.x},${card.y})`); | |
| 309 | + | |
| 310 | + const rect = document.createElementNS('http://www.w3.org/2000/svg', 'rect'); | |
| 311 | + rect.setAttribute('fill', '#222'); | |
| 312 | + rect.setAttribute('width', 150); | |
| 313 | + rect.setAttribute('style', 'cursor: auto;'); | |
| 314 | + rect.setAttribute('height', cardHeight); | |
| 315 | + rect.setAttribute('rx', 10); // 圆角 | |
| 316 | + rect.setAttribute('ry', 10); | |
| 317 | + group.appendChild(rect); | |
| 318 | + | |
| 319 | + // 使用path绘制带有指定圆角的矩形 | |
| 320 | + // 创建标题栏 | |
| 321 | + const titleBarWidth = 150; | |
| 322 | + const borderRadius = 10; // 圆角大小 | |
| 323 | + const titleBar = document.createElementNS('http://www.w3.org/2000/svg', 'path'); | |
| 324 | + const dValue = `M 0,${borderRadius} | |
| 325 | + a ${borderRadius},${borderRadius} 0 0 1 ${borderRadius},-${borderRadius} | |
| 326 | + h ${titleBarWidth - borderRadius * 2} | |
| 327 | + a ${borderRadius},${borderRadius} 0 0 1 ${borderRadius},${borderRadius} | |
| 328 | + v ${titleBarHeight - borderRadius} | |
| 329 | + h -${titleBarWidth} | |
| 330 | + z`; | |
| 331 | + titleBar.setAttribute('class', 'card'); | |
| 332 | + titleBar.setAttribute('d', dValue); | |
| 333 | + titleBar.setAttribute('fill', `url(#titleGradient-${card.id})`); | |
| 334 | + group.appendChild(titleBar); | |
| 335 | + | |
| 336 | + const text = document.createElementNS('http://www.w3.org/2000/svg', 'text'); | |
| 337 | + text.setAttribute('x', titleBarWidth / 2); | |
| 338 | + text.setAttribute('y', titleBarHeight / 2); | |
| 339 | + text.setAttribute('text-anchor', 'middle'); | |
| 340 | + text.setAttribute('alignment-baseline', 'middle'); | |
| 341 | + text.textContent = card.label; | |
| 342 | + group.appendChild(text); | |
| 343 | + | |
| 344 | + card.nodes.forEach((node, index) => { | |
| 345 | + | |
| 346 | + | |
| 347 | + const circle = document.createElementNS('http://www.w3.org/2000/svg', 'circle'); | |
| 348 | + circle.setAttribute('class', 'node'); | |
| 349 | + circle.setAttribute('cx', node.type === 'in' ? 0 : 150); | |
| 350 | + circle.setAttribute('cy', topBottomPadding + titleBarHeight + (node.level + 1) * | |
| 351 | + nodeSpacing - (nodeSpacing / 2)); | |
| 352 | + circle.setAttribute('r', 7); | |
| 353 | + circle.setAttribute('fill', node.color); | |
| 354 | + circle.setAttribute('data-card-id', card.id); | |
| 355 | + circle.setAttribute('data-node-id', `${card.id}-node${index + 1}`); | |
| 356 | + group.appendChild(circle); | |
| 357 | + | |
| 358 | + let labelX = node.type === 'in' ? 12 : 138; // 基本的X坐标 | |
| 359 | + const labelY = topBottomPadding + titleBarHeight + node.level * nodeSpacing + 21; | |
| 360 | + | |
| 361 | + // 创建SVG文本元素 | |
| 362 | + const multiConnectedLabel = document.createElementNS('http://www.w3.org/2000/svg', | |
| 363 | + 'text'); | |
| 364 | + multiConnectedLabel.setAttribute('x', labelX); | |
| 365 | + multiConnectedLabel.setAttribute('y', labelY); | |
| 366 | + multiConnectedLabel.setAttribute('text-anchor', 'middle'); | |
| 367 | + multiConnectedLabel.setAttribute('fill', '#aaa'); | |
| 368 | + multiConnectedLabel.setAttribute('style', 'font-size: 8px;'); | |
| 369 | + multiConnectedLabel.setAttribute('alignment-baseline', 'hanging'); | |
| 370 | + | |
| 371 | + | |
| 372 | + // 计算文本的宽度(假定的,因为SVG没有直接获取文本宽度的方法) | |
| 373 | + let estimatedTextLength; | |
| 374 | + if (node.multiConnected == undefined) { | |
| 375 | + estimatedTextLength = 20 | |
| 376 | + multiConnectedLabel.textContent = 'N'; | |
| 377 | + } else { | |
| 378 | + estimatedTextLength = node.multiConnected.length; | |
| 379 | + multiConnectedLabel.textContent = node.multiConnected; | |
| 380 | + } | |
| 381 | + | |
| 382 | + // 确保文本不会超出卡片右边界 | |
| 383 | + if (labelX + estimatedTextLength / 2 > 150) { | |
| 384 | + labelX = 150 - estimatedTextLength / 2; | |
| 385 | + nodeLabel.setAttribute('x', labelX); | |
| 386 | + } | |
| 387 | + | |
| 388 | + // 确保文本不会超出卡片左边界 | |
| 389 | + if (labelX - estimatedTextLength / 2 < 0) { | |
| 390 | + labelX = estimatedTextLength / 2; | |
| 391 | + nodeLabel.setAttribute('x', labelX); | |
| 392 | + } | |
| 393 | + | |
| 394 | + group.appendChild(multiConnectedLabel); | |
| 395 | + | |
| 396 | + if (node.label != undefined) { | |
| 397 | + // 计算文本标签的位置 | |
| 398 | + let labelX = node.type === 'in' ? 15 : 135; // 基本的X坐标 | |
| 399 | + const labelY = topBottomPadding + titleBarHeight + node.level * nodeSpacing + 40; | |
| 400 | + | |
| 401 | + // 创建SVG文本元素 | |
| 402 | + const nodeLabel = document.createElementNS('http://www.w3.org/2000/svg', 'text'); | |
| 403 | + nodeLabel.setAttribute('x', labelX); | |
| 404 | + nodeLabel.setAttribute('y', labelY); // 在节点下方留出一定空间 | |
| 405 | + nodeLabel.setAttribute('text-anchor', 'middle'); // 文本居中对齐 | |
| 406 | + nodeLabel.setAttribute('fill', '#aaa'); // 文本居中对齐 | |
| 407 | + nodeLabel.setAttribute('alignment-baseline', 'hanging'); | |
| 408 | + nodeLabel.textContent = node.label; | |
| 409 | + | |
| 410 | + // 计算文本的宽度(假定的,因为SVG没有直接获取文本宽度的方法) | |
| 411 | + const estimatedTextLength = node.label.length * 10; // 估算每个字符6像素宽 | |
| 412 | + | |
| 413 | + // 确保文本不会超出卡片右边界 | |
| 414 | + if (labelX + estimatedTextLength / 2 > 150) { | |
| 415 | + labelX = 150 - estimatedTextLength / 2; | |
| 416 | + nodeLabel.setAttribute('x', labelX); | |
| 417 | + } | |
| 418 | + | |
| 419 | + // 确保文本不会超出卡片左边界 | |
| 420 | + if (labelX - estimatedTextLength / 2 < 0) { | |
| 421 | + labelX = estimatedTextLength / 2; | |
| 422 | + nodeLabel.setAttribute('x', labelX); | |
| 423 | + } | |
| 424 | + | |
| 425 | + group.appendChild(nodeLabel); | |
| 426 | + | |
| 427 | + } | |
| 428 | + | |
| 429 | + switch (node.slot) { | |
| 430 | + case 'input': | |
| 431 | + const foreignObject = document.createElementNS('http://www.w3.org/2000/svg', | |
| 432 | + 'foreignObject'); | |
| 433 | + foreignObject.setAttribute('x', 0); | |
| 434 | + foreignObject.setAttribute('y', topBottomPadding + titleBarHeight + node.level * | |
| 435 | + nodeSpacing + 12); | |
| 436 | + foreignObject.setAttribute('width', 130); // 保持原始宽度 | |
| 437 | + foreignObject.setAttribute('height', nodeSpacing - 24); // 保持原始高度,减去的24像素为上下内边距之和 | |
| 438 | + const input = document.createElement('input'); | |
| 439 | + input.type = 'text'; | |
| 440 | + if (node.value == undefined) { | |
| 441 | + node.value = ''; | |
| 442 | + } | |
| 443 | + input.value = node.value; | |
| 444 | + input.addEventListener('input', function() { | |
| 445 | + node.value = input.value; | |
| 446 | + }); | |
| 447 | + // Set adjusted input styles | |
| 448 | + input.style.width = '110px'; | |
| 449 | + input.style.height = '100%'; | |
| 450 | + input.style.marginLeft = '20px'; | |
| 451 | + input.style.borderRadius = '5px'; | |
| 452 | + input.style.border = '1px solid white'; | |
| 453 | + input.style.backgroundColor = '#222'; | |
| 454 | + input.style.color = 'white'; | |
| 455 | + input.style.fontSize = '1em'; | |
| 456 | + input.style.padding = '0px'; // 可能需要调整或去除内边距以适应固定尺寸 | |
| 457 | + input.style.boxSizing = 'border-box'; // 确保宽高包含内容、内边距和边框 | |
| 458 | + | |
| 459 | + // Change border color on focus and blur | |
| 460 | + input.addEventListener('focus', () => { | |
| 461 | + input.style.outline = 'none'; // Remove default focus outline | |
| 462 | + input.style.borderColor = | |
| 463 | + 'white'; // Keep border color white on focus | |
| 464 | + }); | |
| 465 | + | |
| 466 | + input.addEventListener('blur', () => { | |
| 467 | + input.style.borderColor = | |
| 468 | + 'white'; // Revert to white when not focused | |
| 469 | + }); | |
| 470 | + | |
| 471 | + // 阻止事件冒泡 | |
| 472 | + input.addEventListener('click', function(event) { | |
| 473 | + event.stopPropagation(); | |
| 474 | + }); | |
| 475 | + | |
| 476 | + input.addEventListener('mousedown', function(event) { | |
| 477 | + event.stopPropagation(); | |
| 478 | + }); | |
| 479 | + | |
| 480 | + input.addEventListener('touchstart', function(event) { | |
| 481 | + event.stopPropagation(); | |
| 482 | + }); | |
| 483 | + | |
| 484 | + foreignObject.appendChild(input); | |
| 485 | + group.appendChild(foreignObject); | |
| 486 | + break; | |
| 487 | + } | |
| 488 | + | |
| 489 | + | |
| 490 | + | |
| 491 | + }); | |
| 492 | + | |
| 493 | + const deleteIcon = document.createElementNS('http://www.w3.org/2000/svg', 'rect'); | |
| 494 | + deleteIcon.setAttribute('class', 'card-delete-icon'); | |
| 495 | + deleteIcon.setAttribute('x', 125); | |
| 496 | + deleteIcon.setAttribute('y', 5); // 使其贴近标题栏的右上角 | |
| 497 | + deleteIcon.setAttribute('width', 20); | |
| 498 | + deleteIcon.setAttribute('height', 20); | |
| 499 | + deleteIcon.setAttribute('fill', 'transparent'); | |
| 500 | + deleteIcon.setAttribute('data-card-id', card.id); | |
| 501 | + deleteIcon.setAttribute('style', 'cursor: pointer;'); | |
| 502 | + group.appendChild(deleteIcon); | |
| 503 | + | |
| 504 | + const delText = document.createElementNS('http://www.w3.org/2000/svg', 'text'); | |
| 505 | + delText.setAttribute('x', 135); | |
| 506 | + delText.setAttribute('y', 20); // 调整位置以垂直居中 | |
| 507 | + delText.setAttribute('text-anchor', 'middle'); | |
| 508 | + delText.setAttribute('fill', 'white'); | |
| 509 | + delText.setAttribute('font-size', '16px'); // 适当调整字体大小以适应图标 | |
| 510 | + delText.setAttribute('pointer-events', 'none'); // 确保点击事件只触发于删除图标上 | |
| 511 | + delText.textContent = '×'; | |
| 512 | + group.appendChild(delText); | |
| 513 | + | |
| 514 | + cardsContainer.appendChild(group); | |
| 515 | + }); | |
| 516 | + | |
| 517 | + attachNodeEventListeners(); | |
| 518 | + } | |
| 519 | + | |
| 520 | + | |
| 521 | + | |
| 522 | + function drawLinks() { | |
| 523 | + const linksContainer = document.getElementById('linksContainer'); | |
| 524 | + linksContainer.innerHTML = ''; // 清除现有的线条 | |
| 525 | + // 清除旧的删除图标 | |
| 526 | + document.querySelectorAll('.delete-icon').forEach(icon => icon.remove()); | |
| 527 | + | |
| 528 | + links.forEach((link, index) => { | |
| 529 | + const path = document.createElementNS('http://www.w3.org/2000/svg', 'path'); | |
| 530 | + //path.setAttribute('class', 'link'); | |
| 531 | + path.setAttribute('stroke', link.target.color) | |
| 532 | + path.setAttribute('stroke-width', 5) | |
| 533 | + path.setAttribute('fill', 'none'); | |
| 534 | + | |
| 535 | + | |
| 536 | + const isCallType = link.source.enumType === 'call'; | |
| 537 | + if (isCallType) { | |
| 538 | + path.setAttribute('stroke-dasharray', '10'); | |
| 539 | + path.setAttribute('stroke-dashoffset', '0'); | |
| 540 | + | |
| 541 | + // Add animation element to the path for dashed lines | |
| 542 | + const animate = document.createElementNS('http://www.w3.org/2000/svg', 'animate'); | |
| 543 | + animate.setAttribute('attributeName', 'stroke-dashoffset'); | |
| 544 | + animate.setAttribute('dur', '0.5s'); | |
| 545 | + animate.setAttribute('repeatCount', 'indefinite'); | |
| 546 | + animate.setAttribute('from', '20'); | |
| 547 | + animate.setAttribute('to', '0'); | |
| 548 | + path.appendChild(animate); | |
| 549 | + } | |
| 550 | + | |
| 551 | + | |
| 552 | + let dist; | |
| 553 | + // 使用动态计算的控制点距离来定义曲线,根据源点和终点的X坐标差异动态计算控制点的距离 | |
| 554 | + if (link.source.type === 'out') { | |
| 555 | + if (link.source.x - link.target.x > 0) { | |
| 556 | + dist = 200; // 如果终点在源点的左侧,控制点距离更远 | |
| 557 | + } else { | |
| 558 | + dist = Math.abs(link.target.x - link.source.x) * 0.3; // 否则,根据两点间的距离调整控制点距离 | |
| 559 | + } | |
| 560 | + const d = | |
| 561 | + `M${link.source.x} ${link.source.y} C${link.source.x + dist} ${link.source.y} ${link.target.x - dist} ${link.target.y} ${link.target.x} ${link.target.y}`; | |
| 562 | + path.setAttribute('d', d); | |
| 563 | + linksContainer.appendChild(path); | |
| 564 | + } else { | |
| 565 | + if (link.target.x - link.source.x > 0) { | |
| 566 | + dist = 200; // 如果终点在源点的右侧,控制点距离更远 | |
| 567 | + } else { | |
| 568 | + dist = Math.abs(link.target.x - link.source.x) * 0.3; // 否则,根据两点间的距离调整控制点距离 | |
| 569 | + } | |
| 570 | + const d = | |
| 571 | + `M${link.source.x} ${link.source.y} C${link.source.x - dist} ${link.source.y} ${link.target.x + dist} ${link.target.y} ${link.target.x} ${link.target.y}`; | |
| 572 | + path.setAttribute('d', d); | |
| 573 | + linksContainer.appendChild(path); | |
| 574 | + } | |
| 575 | + | |
| 576 | + | |
| 577 | + // 计算中点 | |
| 578 | + const midX = (link.source.x + link.target.x) / 2; | |
| 579 | + const midY = (link.source.y + link.target.y) / 2; | |
| 580 | + | |
| 581 | + // 绘制删除图标 | |
| 582 | + const deleteIcon = document.createElementNS('http://www.w3.org/2000/svg', 'circle'); | |
| 583 | + deleteIcon.setAttribute('class', 'delete-icon'); | |
| 584 | + deleteIcon.setAttribute('cx', midX); | |
| 585 | + deleteIcon.setAttribute('cy', midY); | |
| 586 | + deleteIcon.setAttribute('style', "cursor: pointer;"); | |
| 587 | + deleteIcon.setAttribute('r', 10); | |
| 588 | + deleteIcon.setAttribute('fill', 'red'); | |
| 589 | + deleteIcon.setAttribute('data-link-level', index); // 用于标识该删除图标对应的线 | |
| 590 | + linksContainer.appendChild(deleteIcon); | |
| 591 | + | |
| 592 | + // 可以选择添加一个×文本在圆圈中间 | |
| 593 | + const text = document.createElementNS('http://www.w3.org/2000/svg', 'text'); | |
| 594 | + text.setAttribute('x', midX); | |
| 595 | + text.setAttribute('y', midY + 5); // 轻微调整以垂直居中 | |
| 596 | + text.setAttribute('text-anchor', 'middle'); | |
| 597 | + text.setAttribute('fill', 'white'); | |
| 598 | + text.setAttribute('font-size', '15px'); | |
| 599 | + text.setAttribute('pointer-events', 'none'); // 确保点击事件只触发于圆圈上 | |
| 600 | + text.textContent = '×'; | |
| 601 | + linksContainer.appendChild(text); | |
| 602 | + | |
| 603 | + }); | |
| 604 | + } | |
| 605 | + | |
| 606 | + // 定义变量来追踪是否正在拖动以及拖动的起始位置 | |
| 607 | + let isPanning = false; | |
| 608 | + let startPan = { | |
| 609 | + x: 0, | |
| 610 | + y: 0 | |
| 611 | + }; | |
| 612 | + | |
| 613 | + // 用于调整SVG视图窗口的变量 | |
| 614 | + let currentPan = { | |
| 615 | + x: 0, | |
| 616 | + y: 0 | |
| 617 | + }; | |
| 618 | + | |
| 619 | + function attachEventListeners() { | |
| 620 | + | |
| 621 | + const svgContainer = document.getElementById('svgContainer'); | |
| 622 | + document.querySelectorAll('.link').forEach(link => { | |
| 623 | + link.addEventListener('contextmenu', function(e) { | |
| 624 | + e.preventDefault(); // 阻止默认的右键菜单 | |
| 625 | + const linkId = e.target.getAttribute('data-link-id'); // 确保你在绘制线条时添加了 data-link-id 属性 | |
| 626 | + showContextMenu(e.clientX, e.clientY, linkId); | |
| 627 | + }); | |
| 628 | + }); | |
| 629 | + document.getElementById('svgContainer').addEventListener('click', function(e) { | |
| 630 | + if (e.target.classList.contains('delete-icon')) { | |
| 631 | + // 获取点击的删除图标对应的线的索引 | |
| 632 | + const linkIndex = e.target.getAttribute('data-link-level'); | |
| 633 | + // 从数组中移除该线 | |
| 634 | + links.splice(linkIndex, 1); | |
| 635 | + // 重新绘制剩余的线和删除图标 | |
| 636 | + drawLinks(); | |
| 637 | + drawCards(); // 如果你的线条与卡片有关联,可能需要重新绘制卡片以更新视图 | |
| 638 | + } else if (e.target.classList.contains('card-delete-icon')) { | |
| 639 | + // 获取点击的删除图标对应的卡片ID | |
| 640 | + const cardId = e.target.getAttribute('data-card-id'); | |
| 641 | + // 从`cards`数组中移除对应的卡片 | |
| 642 | + cards = cards.filter(card => card.id !== cardId); | |
| 643 | + // 同时移除所有与该卡片连接的线 | |
| 644 | + links = links.filter(link => !(link.source.node.startsWith(cardId) || (link.target && link.target | |
| 645 | + .node.startsWith(cardId)))); | |
| 646 | + // 重新绘制卡片和线 | |
| 647 | + drawLinks(); | |
| 648 | + drawCards(); | |
| 649 | + } else { | |
| 650 | + let targetCardContainer = e.target.closest('.card-container'); | |
| 651 | + if (targetCardContainer) { | |
| 652 | + const cardId = targetCardContainer.getAttribute('data-id'); | |
| 653 | + // 将SVG元素移动到最后,使其在视觉上显示在最前面 | |
| 654 | + targetCardContainer.parentNode.appendChild(targetCardContainer); | |
| 655 | + | |
| 656 | + // 更新cards数组,将点击的卡片移动到数组的末尾 | |
| 657 | + const cardIndex = cards.findIndex(card => card.id === cardId); | |
| 658 | + if (cardIndex > -1) { | |
| 659 | + const card = cards.splice(cardIndex, 1)[0]; | |
| 660 | + cards.push(card); | |
| 661 | + } | |
| 662 | + | |
| 663 | + // 这里不需要立即调用drawCards或drawLinks, | |
| 664 | + // 除非你需要根据cards数组的新顺序进行其他更新 | |
| 665 | + } | |
| 666 | + } | |
| 667 | + }); | |
| 668 | + | |
| 669 | + svgContainer.addEventListener('contextmenu', function(e) { | |
| 670 | + e.preventDefault(); // 阻止右键菜单 | |
| 671 | + }); | |
| 672 | + | |
| 673 | + svgContainer.addEventListener('mousedown', e => { | |
| 674 | + | |
| 675 | + // 检查是否是鼠标右键点击 | |
| 676 | + | |
| 677 | + const target = e.target; | |
| 678 | + if (e.button === 2) { | |
| 679 | + isPanning = true; | |
| 680 | + startPan.x = e.clientX - currentPan.x; | |
| 681 | + startPan.y = e.clientY - currentPan.y; | |
| 682 | + } else if (target | |
| 683 | + | |
| 684 | + .classList.contains('card') || target.tagName === 'text') { | |
| 685 | + const cardContainer = target.closest('.card-container'); | |
| 686 | + const cardId = cardContainer.getAttribute('data-id'); | |
| 687 | + startDragCard(e, cardId); | |
| 688 | + } | |
| 689 | + }); | |
| 690 | + document.addEventListener('mousemove', e => { | |
| 691 | + if (isPanning) { | |
| 692 | + // 正确计算新的视图窗口位置 | |
| 693 | + currentPan.x = e.clientX - startPan.x; | |
| 694 | + currentPan.y = e.clientY - startPan.y; | |
| 695 | + | |
| 696 | + // 正确调整SVG的viewBox来实现拖动效果 | |
| 697 | + // 这里需要更新的是开始拖动的点,而不是当前的点,因此我们反向更新 | |
| 698 | + svgContainer.setAttribute('viewBox', | |
| 699 | + `${-currentPan.x} ${-currentPan.y} ${svgContainer.clientWidth} ${svgContainer.clientHeight}` | |
| 700 | + ); | |
| 701 | + svgContainer.style.backgroundPosition = `${currentPan.x % 100}px ${currentPan.y % 100}px`; | |
| 702 | + } else if (isDragging) { | |
| 703 | + moveCard(e); | |
| 704 | + } else if (isLinking && currentLink) { | |
| 705 | + updateLink(e); | |
| 706 | + } | |
| 707 | + }); | |
| 708 | + | |
| 709 | + document.addEventListener('mouseup', e => { | |
| 710 | + if (e.button === 2) { | |
| 711 | + console.log(currentPan); | |
| 712 | + isPanning = false; | |
| 713 | + } else if (isDragging) { | |
| 714 | + endDragCard(); | |
| 715 | + } else if (isLinking) { | |
| 716 | + endDragLink(e); | |
| 717 | + } | |
| 718 | + }); | |
| 719 | + } | |
| 720 | + | |
| 721 | + function startDragCard(e, cardId) { | |
| 722 | + isDragging = true; | |
| 723 | + const card = cards.find(c => c.id === cardId); | |
| 724 | + currentCard = card; | |
| 725 | + | |
| 726 | + const svgRect = svgContainer.getBoundingClientRect(); | |
| 727 | + dragOffsetX = e.clientX - svgRect.left - card.x; | |
| 728 | + dragOffsetY = e.clientY - svgRect.top - card.y; | |
| 729 | + } | |
| 730 | + | |
| 731 | + function moveCard(e) { | |
| 732 | + const svgRect = svgContainer.getBoundingClientRect(); | |
| 733 | + currentCard.x = e.clientX - svgRect.left - dragOffsetX; | |
| 734 | + currentCard.y = e.clientY - svgRect.top - dragOffsetY; | |
| 735 | + | |
| 736 | + // Update link positions associated with the currentCard | |
| 737 | + links.forEach(link => { | |
| 738 | + if (link.source.node.startsWith(currentCard.id)) { | |
| 739 | + // 根据节点ID更新链接的源位置 | |
| 740 | + const nodeIndex = parseInt(link.source.node.split('-node')[1]) - 1; | |
| 741 | + const nodeConfig = currentCard.nodes[nodeIndex]; // 获取当前节点的配置 | |
| 742 | + const nodeSpacing = 50; // 节点间隔,应与drawCards函数中使用的相同 | |
| 743 | + const topBottomPadding = 20; // 顶部和底部的边距,应与drawCards函数中使用的相同 | |
| 744 | + link.source.x = currentCard.x + (nodeConfig.type === "in" ? 0 : 150); // 根据节点类型调整x坐标 | |
| 745 | + link.source.y = 30 + currentCard.y + topBottomPadding + (nodeConfig.level + 1) * nodeSpacing - ( | |
| 746 | + nodeSpacing / 2); // 根据节点的index调整y坐标 | |
| 747 | + } | |
| 748 | + if (link.target && link.target.node.startsWith(currentCard.id)) { | |
| 749 | + // 根据节点ID更新链接的目标位置 | |
| 750 | + const nodeIndex = parseInt(link.target.node.split('-node')[1]) - 1; | |
| 751 | + const nodeConfig = currentCard.nodes[nodeIndex]; // 获取当前节点的配置 | |
| 752 | + link.target.x = currentCard.x + (nodeConfig.type === "in" ? 0 : 150); // 根据节点类型调整x坐标 | |
| 753 | + link.target.y = 30 + currentCard.y + 20 + (nodeConfig.level + 1) * 50 - (50 / | |
| 754 | + 2); // 根据节点的index调整y坐标 | |
| 755 | + } | |
| 756 | + }); | |
| 757 | + | |
| 758 | + drawLinks(); // Redraw links to reflect updated positions | |
| 759 | + drawCards(); // Redraw cards and nodes | |
| 760 | + } | |
| 761 | + | |
| 762 | + | |
| 763 | + | |
| 764 | + function endDragCard() { | |
| 765 | + isDragging = false; | |
| 766 | + } | |
| 767 | + | |
| 768 | + function getNodeCurrentConnections(nodeId) { | |
| 769 | + let count = 0; | |
| 770 | + links.forEach(link => { | |
| 771 | + if (link.source.node === nodeId || (link.target && link.target.node === nodeId)) { | |
| 772 | + count++; | |
| 773 | + } | |
| 774 | + }); | |
| 775 | + return count; | |
| 776 | + } | |
| 777 | + | |
| 778 | + function startDragLink(e) { | |
| 779 | + e.stopPropagation(); // Prevent card drag | |
| 780 | + | |
| 781 | + const nodeId = e.target.getAttribute('data-node-id'); | |
| 782 | + const cardId = e.target.getAttribute('data-card-id'); | |
| 783 | + const card = cards.find(c => c.id === cardId); | |
| 784 | + const nodeElement = e.target; | |
| 785 | + const node = card.nodes.find(n => `${card.id}-node${card.nodes.indexOf(n) + 1}` === nodeId); | |
| 786 | + | |
| 787 | + | |
| 788 | + // 检查源节点是否允许发起新的连接 | |
| 789 | + const currentConnections = getNodeCurrentConnections(nodeId); | |
| 790 | + if (node.multiConnected !== -1 && currentConnections >= node.multiConnected) { | |
| 791 | + console.log('此节点不允许更多的连接。'); | |
| 792 | + return; // 不允许创建新的连接 | |
| 793 | + } | |
| 794 | + isLinking = true; | |
| 795 | + | |
| 796 | + const svgRect = svgContainer.getBoundingClientRect(); | |
| 797 | + const nodeX = e.clientX - svgRect.left; | |
| 798 | + const nodeY = e.clientY - svgRect.top; | |
| 799 | + | |
| 800 | + currentLink = { | |
| 801 | + source: { | |
| 802 | + node: nodeId, | |
| 803 | + x: nodeX, | |
| 804 | + y: nodeY, | |
| 805 | + color: nodeElement.getAttribute('fill'), | |
| 806 | + type: node.type, | |
| 807 | + enumType: node.enumType | |
| 808 | + }, | |
| 809 | + target: null | |
| 810 | + }; | |
| 811 | + } | |
| 812 | + | |
| 813 | + function updateLink(e) { | |
| 814 | + const svgRect = svgContainer.getBoundingClientRect(); | |
| 815 | + currentLink.target = { | |
| 816 | + x: e.clientX - svgRect.left, | |
| 817 | + y: e.clientY - svgRect.top | |
| 818 | + }; | |
| 819 | + drawCurrentLink(); | |
| 820 | + } | |
| 821 | + | |
| 822 | + function endDragLink(e) { | |
| 823 | + isLinking = false; | |
| 824 | + const svgRect = svgContainer.getBoundingClientRect(); | |
| 825 | + const x = e.clientX - svgRect.left; | |
| 826 | + const y = e.clientY - svgRect.top; | |
| 827 | + | |
| 828 | + // 默认情况下,假设目标节点就是e.target | |
| 829 | + let targetNode = e.target; | |
| 830 | + | |
| 831 | + // 检查e.target是否是我们期望的节点类型,如果不是,则尝试使用document.elementFromPoint | |
| 832 | + if (!targetNode.classList.contains('node')) { | |
| 833 | + e.target.style.display = 'none'; | |
| 834 | + targetNode = document.elementFromPoint(e.clientX, e.clientY); | |
| 835 | + e.target.style.display = ''; | |
| 836 | + } | |
| 837 | + | |
| 838 | + let validTargetFound = false; | |
| 839 | + | |
| 840 | + // 进行节点的有效性判断 | |
| 841 | + if (targetNode && targetNode.classList.contains('node')) { | |
| 842 | + const sourceNodeId = currentLink.source.node; | |
| 843 | + const targetNodeId = targetNode.getAttribute('data-node-id'); | |
| 844 | + | |
| 845 | + // 从节点ID分解出卡片ID和节点索引 | |
| 846 | + const sourceNodeParts = sourceNodeId.split('-node'); | |
| 847 | + const targetNodeParts = targetNodeId.split('-node'); | |
| 848 | + const sourceCard = cards.find(card => card.id === sourceNodeParts[0]); | |
| 849 | + const targetCard = cards.find(card => card.id === targetNodeParts[0]); | |
| 850 | + | |
| 851 | + // 根据节点ID找到对应的节点对象 | |
| 852 | + const sourceNodeIndex = parseInt(sourceNodeParts[1]) - 1; | |
| 853 | + const targetNodeIndex = parseInt(targetNodeParts[1]) - 1; | |
| 854 | + const sourceNode = sourceCard.nodes[sourceNodeIndex]; | |
| 855 | + const targetNodeObj = targetCard.nodes[targetNodeIndex]; | |
| 856 | + | |
| 857 | + // 检查目标节点是否允许接受新的连接 | |
| 858 | + const targetCurrentConnections = getNodeCurrentConnections(targetNodeId); | |
| 859 | + if (targetNodeObj.multiConnected !== -1 && targetCurrentConnections >= targetNodeObj.multiConnected) { | |
| 860 | + console.log('目标节点不允许更多的连接。'); | |
| 861 | + // 移除临时绘制的连接线 | |
| 862 | + const tempLink = document.querySelector('.temp-link'); | |
| 863 | + if (tempLink) { | |
| 864 | + tempLink.remove(); | |
| 865 | + } | |
| 866 | + currentLink = null; | |
| 867 | + drawLinks(); | |
| 868 | + return; | |
| 869 | + } | |
| 870 | + // 确保目标节点不是起始节点自身,避免自连接 | |
| 871 | + if (currentLink.source.node !== targetNodeId && sourceNode.enumType === targetNodeObj.enumType) { | |
| 872 | + validTargetFound = true; | |
| 873 | + currentLink.source.enumType = sourceNode.enumType; | |
| 874 | + currentLink.source.x = currentLink.source.x - currentPan.x; | |
| 875 | + currentLink.source.y = currentLink.source.y - currentPan.y; | |
| 876 | + // 更新连接的目标信息,并保存该连接 | |
| 877 | + links.push({ | |
| 878 | + ...currentLink, | |
| 879 | + target: { | |
| 880 | + node: targetNodeId, | |
| 881 | + x: x - currentPan.x, | |
| 882 | + y: y - currentPan.y, | |
| 883 | + color: sourceNode.color, | |
| 884 | + enumType: sourceNode.enumType | |
| 885 | + } | |
| 886 | + }); | |
| 887 | + } | |
| 888 | + } else { | |
| 889 | + const sourceNodeId = currentLink.source.node; | |
| 890 | + const sourceNodeParts = sourceNodeId.split('-node'); | |
| 891 | + const sourceCard = cards.find(card => card.id === sourceNodeParts[0]); | |
| 892 | + const sourceNodeIndex = parseInt(sourceNodeParts[1]) - 1; | |
| 893 | + const sourceNode = sourceCard.nodes[sourceNodeIndex]; | |
| 894 | + currentLink.source.enumType = sourceNode.enumType; | |
| 895 | + showCardCreationModal(e.clientX, e.clientY, currentLink.source); | |
| 896 | + | |
| 897 | + } | |
| 898 | + | |
| 899 | + const tempLink = document.querySelector('.temp-link'); | |
| 900 | + if (tempLink) { | |
| 901 | + tempLink.remove(); | |
| 902 | + } | |
| 903 | + currentLink = null; | |
| 904 | + drawLinks(); | |
| 905 | + } | |
| 906 | + | |
| 907 | + | |
| 908 | + | |
| 909 | + | |
| 910 | + | |
| 911 | + | |
| 912 | + // 更新drawCurrentLink函数,增加线宽 | |
| 913 | + // 更新drawCurrentLink函数,增加线宽 | |
| 914 | + function drawCurrentLink() { | |
| 915 | + const tempLink = document.querySelector('.temp-link'); | |
| 916 | + if (tempLink) tempLink.remove(); | |
| 917 | + | |
| 918 | + if (!currentLink || !currentLink.target) return; | |
| 919 | + | |
| 920 | + const svgContainer = document.getElementById('svgContainer'); | |
| 921 | + const path = document.createElementNS('http://www.w3.org/2000/svg', 'path'); | |
| 922 | + path.setAttribute('class', 'temp-link'); | |
| 923 | + // 设置等宽线属性 | |
| 924 | + path.setAttribute('stroke', currentLink.source.color); | |
| 925 | + path.setAttribute('stroke-width', 5); | |
| 926 | + path.setAttribute('fill', 'none'); | |
| 927 | + | |
| 928 | + // 计算考虑了平移偏移的起点和终点 | |
| 929 | + const adjustedSourceX = currentLink.source.x - currentPan.x; | |
| 930 | + const adjustedSourceY = currentLink.source.y - currentPan.y; | |
| 931 | + const adjustedTargetX = currentLink.target.x - currentPan.x; | |
| 932 | + const adjustedTargetY = currentLink.target.y - currentPan.y; | |
| 933 | + | |
| 934 | + // 更新路径以使用调整后的坐标 | |
| 935 | + if (currentLink.source.type === 'out') { | |
| 936 | + const d = | |
| 937 | + `M${adjustedSourceX},${adjustedSourceY} C${adjustedSourceX + 100},${adjustedSourceY} ${adjustedTargetX - 100},${adjustedTargetY} ${adjustedTargetX},${adjustedTargetY}`; | |
| 938 | + path.setAttribute('d', d); | |
| 939 | + } else { | |
| 940 | + const d = | |
| 941 | + `M${adjustedSourceX},${adjustedSourceY} C${adjustedSourceX - 100},${adjustedSourceY} ${adjustedTargetX + 100},${adjustedTargetY} ${adjustedTargetX},${adjustedTargetY}`; | |
| 942 | + path.setAttribute('d', d); | |
| 943 | + } | |
| 944 | + | |
| 945 | + svgContainer.appendChild(path); | |
| 946 | + } | |
| 947 | + | |
| 948 | + function attachNodeEventListeners() { | |
| 949 | + document.querySelectorAll('.node').forEach(node => { | |
| 950 | + node.addEventListener('mousedown', startDragLink); | |
| 951 | + }); | |
| 952 | + } | |
| 953 | + | |
| 954 | + function populateCardTypeList(mouseX, mouseY, sourceNode) { | |
| 955 | + const listElement = document.getElementById('card-type-list'); | |
| 956 | + listElement.innerHTML = ''; // 清空现有列表项 | |
| 957 | + const addedTypes = new Set(); | |
| 958 | + | |
| 959 | + cards.forEach(card => { | |
| 960 | + if (!addedTypes.has(card.type)) { | |
| 961 | + const listItem = document.createElement('li'); | |
| 962 | + listItem.tabIndex = 0; // 使元素能够获得焦点,以便能够监听键盘事件 | |
| 963 | + listItem.textContent = card.label; // 使用卡片的标签或类型 | |
| 964 | + listItem.onclick = function() { | |
| 965 | + createNewCard(card, mouseX, mouseY, sourceNode); | |
| 966 | + hideCardCreationModal(); // 新建卡片后隐藏模态框 | |
| 967 | + }; | |
| 968 | + listItem.onkeydown = function(event) { | |
| 969 | + if (event.key === 'Enter') { | |
| 970 | + createNewCard(card, mouseX, mouseY, sourceNode); | |
| 971 | + hideCardCreationModal(); // 新建卡片后隐藏模态框 | |
| 972 | + } | |
| 973 | + }; | |
| 974 | + listElement.appendChild(listItem); | |
| 975 | + addedTypes.add(card.type); | |
| 976 | + } | |
| 977 | + }); | |
| 978 | + } | |
| 979 | + | |
| 980 | + | |
| 981 | + function showCardCreationModal(mouseX, mouseY, sourceNode) { | |
| 982 | + populateCardTypeList(mouseX, mouseY, sourceNode); // 填充卡片类型列表 | |
| 983 | + const modal = document.getElementById('card-creation-modal'); | |
| 984 | + // 在这里添加取消按钮 | |
| 985 | + if (!document.getElementById('cancel-btn')) { | |
| 986 | + const cancelButton = document.createElement('button'); | |
| 987 | + cancelButton.id = 'cancel-btn'; | |
| 988 | + cancelButton.textContent = '取消'; | |
| 989 | + cancelButton.onclick = function() { | |
| 990 | + hideCardCreationModal(); | |
| 991 | + }; | |
| 992 | + modal.appendChild(cancelButton); | |
| 993 | + } | |
| 994 | + | |
| 995 | + | |
| 996 | + | |
| 997 | + // 设置弹出框的位置 | |
| 998 | + modal.style.left = mouseX + 'px'; | |
| 999 | + modal.style.top = mouseY + 'px'; | |
| 1000 | + modal.style.display = 'block'; // 显示弹窗 | |
| 1001 | + } | |
| 1002 | + | |
| 1003 | + function createNewCard(cardTemplate, mouseX, mouseY, sourceNode) { | |
| 1004 | + const newCard = { | |
| 1005 | + ...cardTemplate, | |
| 1006 | + nodes: JSON.parse(JSON.stringify(cardTemplate.nodes)), // 深拷贝nodes属性 | |
| 1007 | + id: 'card' + (cards.length + 1) | |
| 1008 | + }; | |
| 1009 | + // 将每个node的value设置为空字符串 | |
| 1010 | + newCard.nodes.forEach(node => { | |
| 1011 | + node.value = ''; | |
| 1012 | + }); | |
| 1013 | + newCard.x = mouseX - 75 - currentPan.x; // 调整为鼠标中心 | |
| 1014 | + newCard.y = mouseY - 15 - currentPan.y; // 调整为鼠标中心 | |
| 1015 | + cards.push(newCard); // 将新创建的卡片添加到卡片列表中 | |
| 1016 | + | |
| 1017 | + // 如果提供了sourceNode,找到新卡片的合适target node并创建连接 | |
| 1018 | + if (sourceNode) { | |
| 1019 | + sourceNode.x -= currentPan.x; | |
| 1020 | + sourceNode.y -= currentPan.y; | |
| 1021 | + let targetNode = newCard.nodes.find(node => node.enumType === sourceNode.enumType && node.type === 'in'); | |
| 1022 | + if (targetNode) { | |
| 1023 | + links.push({ | |
| 1024 | + source: sourceNode, | |
| 1025 | + target: { | |
| 1026 | + node: `${newCard.id}-node${newCard.nodes.indexOf(targetNode) + 1}`, | |
| 1027 | + x: newCard.x + (targetNode.type === 'in' ? 0 : 150), | |
| 1028 | + y: newCard.y + 30 + 20 + (targetNode.level + 1) * 50 - 25, | |
| 1029 | + color: targetNode.color, | |
| 1030 | + enumType: targetNode.enumType | |
| 1031 | + } | |
| 1032 | + }); | |
| 1033 | + } | |
| 1034 | + } | |
| 1035 | + | |
| 1036 | + | |
| 1037 | + drawLinks(); | |
| 1038 | + drawCards(); | |
| 1039 | + } | |
| 1040 | + | |
| 1041 | + | |
| 1042 | + | |
| 1043 | + function hideCardCreationModal() { | |
| 1044 | + const modal = document.getElementById('card-creation-modal'); | |
| 1045 | + modal.style.display = 'none'; // 隐藏弹窗 | |
| 1046 | + } | |
| 1047 | + | |
| 1048 | + init(); | |
| 1049 | + </script> | |
| 1050 | + </body> | |
| 1051 | + | |
| 1052 | +</html>--> | ... | ... |