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,8 +890,8 @@ public class ScheduleRealInfoController extends BaseController<ScheduleRealInfo, | ||
| 890 | * @param ids | 890 | * @param ids |
| 891 | * @return | 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,10 +2,24 @@ package com.bsth.controller.zndd; | ||
| 2 | 2 | ||
| 3 | import com.bsth.controller.BaseController; | 3 | import com.bsth.controller.BaseController; |
| 4 | import com.bsth.entity.zndd.LoggerZndd; | 4 | import com.bsth.entity.zndd.LoggerZndd; |
| 5 | +import com.bsth.service.zndd.LoggerZnddService; | ||
| 6 | +import org.springframework.beans.factory.annotation.Autowired; | ||
| 5 | import org.springframework.web.bind.annotation.RequestMapping; | 7 | import org.springframework.web.bind.annotation.RequestMapping; |
| 8 | +import org.springframework.web.bind.annotation.RequestParam; | ||
| 6 | import org.springframework.web.bind.annotation.RestController; | 9 | import org.springframework.web.bind.annotation.RestController; |
| 7 | 10 | ||
| 11 | +import java.util.List; | ||
| 12 | +import java.util.Map; | ||
| 13 | + | ||
| 8 | @RestController | 14 | @RestController |
| 9 | @RequestMapping("logZndd") | 15 | @RequestMapping("logZndd") |
| 10 | public class LoggerZnddController extends BaseController<LoggerZndd, Integer> { | 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,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 | ts(addStationPeople(sr, "DKL", 0L));//大客流 | 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 | \ No newline at end of file | 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,5 +3,11 @@ package com.bsth.service.zndd; | ||
| 3 | import com.bsth.entity.zndd.LoggerZndd; | 3 | import com.bsth.entity.zndd.LoggerZndd; |
| 4 | import com.bsth.service.BaseService; | 4 | import com.bsth.service.BaseService; |
| 5 | 5 | ||
| 6 | +import java.util.List; | ||
| 7 | +import java.util.Map; | ||
| 8 | + | ||
| 6 | public interface LoggerZnddService extends BaseService<LoggerZndd, Integer> { | 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 | package com.bsth.service.zndd.impl; | 1 | package com.bsth.service.zndd.impl; |
| 2 | 2 | ||
| 3 | +import com.bsth.entity.search.CustomerSpecs; | ||
| 3 | import com.bsth.entity.zndd.LoggerZndd; | 4 | import com.bsth.entity.zndd.LoggerZndd; |
| 5 | +import com.bsth.repository.zndd.LoggerZnddRepository; | ||
| 4 | import com.bsth.service.impl.BaseServiceImpl; | 6 | import com.bsth.service.impl.BaseServiceImpl; |
| 5 | import com.bsth.service.zndd.LoggerZnddService; | 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 | import org.springframework.stereotype.Service; | 13 | import org.springframework.stereotype.Service; |
| 7 | 14 | ||
| 15 | +import java.util.List; | ||
| 16 | +import java.util.Map; | ||
| 17 | + | ||
| 8 | @Service | 18 | @Service |
| 9 | public class LoggerZnddServiceImpl extends BaseServiceImpl<LoggerZndd, Integer> implements LoggerZnddService { | 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,7 +50,6 @@ | ||
| 50 | <input class="btn btn-default" type="button" id="query" value="筛选"/> | 50 | <input class="btn btn-default" type="button" id="query" value="筛选"/> |
| 51 | <input class="btn btn-default" type="button" id="export" value="导出"/> | 51 | <input class="btn btn-default" type="button" id="export" value="导出"/> |
| 52 | </div> | 52 | </div> |
| 53 | - <img src="/profile/avatar/2024/04/07/blob_20240407160316A002.png"> | ||
| 54 | </form> | 53 | </form> |
| 55 | </div> | 54 | </div> |
| 56 | <div class="portlet-body"> | 55 | <div class="portlet-body"> |
| @@ -188,6 +187,11 @@ | @@ -188,6 +187,11 @@ | ||
| 188 | $get('/logZndd/all',{rq_eq:date,lineCode_eq:line,type:'query'},function(result){ | 187 | $get('/logZndd/all',{rq_eq:date,lineCode_eq:line,type:'query'},function(result){ |
| 189 | $("#form_line").text(lineName); | 188 | $("#form_line").text(lineName); |
| 190 | $("#form_date").text(date); | 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 | var tbodyHtml = template('dailyInfo',{list:result}); | 196 | var tbodyHtml = template('dailyInfo',{list:result}); |
| 193 | // 把渲染好的模版html文本追加到表格中 | 197 | // 把渲染好的模版html文本追加到表格中 |
| @@ -239,7 +243,7 @@ | @@ -239,7 +243,7 @@ | ||
| 239 | fgsdmDaily = $("#fgsdmDaily").val(); | 243 | fgsdmDaily = $("#fgsdmDaily").val(); |
| 240 | lineName=$("#select2-line-container").html(); | 244 | lineName=$("#select2-line-container").html(); |
| 241 | var i = layer.load(2); | 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 | window.open("/downloadFile/download?fileName=" | 247 | window.open("/downloadFile/download?fileName=" |
| 244 | +moment(date).format("YYYYMMDD")+"-"+lineName+"-班次日报表"); | 248 | +moment(date).format("YYYYMMDD")+"-"+lineName+"-班次日报表"); |
| 245 | layer.close(i); | 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 | \ No newline at end of file | 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 | \ No newline at end of file | 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 | \ No newline at end of file | 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 | \ No newline at end of file | 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 | \ No newline at end of file | 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 | \ No newline at end of file | 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 | \ No newline at end of file | 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 | \ No newline at end of file | 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 | \ No newline at end of file | 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 | \ No newline at end of file | 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 | \ No newline at end of file | 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 | \ No newline at end of file | 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 | \ No newline at end of file | 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>--> |