Compare commits

..

No commits in common. "develop-business-css" and "main-framework" have entirely different histories.

746 changed files with 374 additions and 51298 deletions

View File

@ -1,5 +0,0 @@
**/node_modules
**/dist
**/build
**/target
*.log

View File

@ -1 +0,0 @@
{"neverMindDeployCard":true}

18
.vscode/launch.json vendored
View File

@ -1,23 +1,5 @@
{ {
"configurations": [ "configurations": [
{
"type": "java",
"name": "Attach to Remote Program5005",
"request": "attach",
"hostName": "localhost",
"port": "5005"
},
{
"type": "java",
"name": "CriticalScenarioApplication",
"request": "launch",
"cwd": "${workspaceFolder}",
"mainClass": "com.yfd.business.css.CriticalScenarioApplication",
"projectName": "business-css",
"args": "",
"envFile": "${workspaceFolder}/.env"
},
{ {
"type": "java", "type": "java",
"name": "Spring Boot-PlatformApplication<platform>", "name": "Spring Boot-PlatformApplication<platform>",

View File

@ -1,12 +0,0 @@
# business-css
临界事故情景分析模拟系统(业务模块)。
- 引用 `framework` 公共模块:依赖坐标 `com.yfd:platform:1.0:jar:plain`
- 提供基础 REST 接口:`/api/simulation/ping` 与 `/api/simulation/run`
- 运行方式:在项目根目录执行 `mvn -DskipTests spring-boot:run -pl business-css`
## 开发约定
- 统一使用 JDK 17
- 数据库连接在 `application.yml` 中配置,可根据环境覆盖
- 与框架的通用工具、模型、常量等直接通过依赖引入使用

View File

@ -1,151 +0,0 @@
# SimController 及相关接口实现建议 v4-2结合当前工程现状
本文档基于 [情景模拟分析结果v3.md](file:///e:/projectJava/JavaProjectRepo/business-css/%E6%83%85%E6%99%AF%E6%A8%A1%E6%8B%9F%E5%88%86%E6%9E%90%E7%BB%93%E6%9E%9Cv3.md) 第 3 条,并结合当前可运行代码的真实调用链,给出可落地的实现建议。
---
## 0. 现状盘点(必须先对齐)
### 0.1 当前“线上可用”的仿真接口在哪里
目前仿真入口实际在 `ProjectController`,而不是 `SimController`
- 初始化:`POST /projects/simulation/init` → [ProjectController.java:L275-L300](file:///e:/projectJava/JavaProjectRepo/business-css/src/main/java/com/yfd/business/css/controller/ProjectController.java#L275-L300) → [ProjectServiceImpl.initSimulation](file:///e:/projectJava/JavaProjectRepo/business-css/src/main/java/com/yfd/business/css/service/impl/ProjectServiceImpl.java#L614-L774)
- 运行:`POST /projects/simulation/run` → [ProjectController.java:L288-L300](file:///e:/projectJava/JavaProjectRepo/business-css/src/main/java/com/yfd/business/css/controller/ProjectController.java#L288-L300) → [ProjectServiceImpl.runSimulation](file:///e:/projectJava/JavaProjectRepo/business-css/src/main/java/com/yfd/business/css/service/impl/ProjectServiceImpl.java#L1296-L1351)
### 0.2 SimController 为什么不可用
[SimController.java](file:///e:/projectJava/JavaProjectRepo/business-css/src/main/java/com/yfd/business/css/controller/SimController.java#L1-L43) 目前是“原型草稿”,在本仓库中无法落地,原因是:
- 引用的 `ProjectRepository/EventRepository/InfluenceRepository/InferenceConverter` 仅在该文件出现,仓库中不存在真实实现。
- `SimBuilder.buildUnits/buildEvents/buildInfluenceNodes` 也不存在([SimBuilder.java](file:///e:/projectJava/JavaProjectRepo/business-css/src/main/java/com/yfd/business/css/build/SimBuilder.java#L1-L44) 只有注释草稿)。
- `SimService` 当前逻辑是 KV 级简化引擎,并且事件优先级与现有 `initSimulation` 的行为不一致([SimService.java](file:///e:/projectJava/JavaProjectRepo/business-css/src/main/java/com/yfd/business/css/service/SimService.java#L7-L51))。
### 0.3 当前系统的“真实数据格式”
`runSimulation` 解析的是一种“frames → devices”结构并按 `deviceType` 分组:
- 调用入口:[ProjectServiceImpl.runSimulation](file:///e:/projectJava/JavaProjectRepo/business-css/src/main/java/com/yfd/business/css/service/impl/ProjectServiceImpl.java#L1296-L1351)
- 解析工具:[DeviceDataParser.parseAndGroupDeviceData](file:///e:/projectJava/JavaProjectRepo/business-css/src/main/java/com/yfd/business/css/utils/DeviceDataParser.java#L1-L88)
- 单步模型:[DeviceStepInfo.java](file:///e:/projectJava/JavaProjectRepo/business-css/src/main/java/com/yfd/business/css/model/DeviceStepInfo.java)
因此,“让 SimController 可用”的关键,不是从 0 造一套新格式,而是:**复用现有 frames 格式(或在 SimController 内把 SimContext 转为该格式)**,以便直接复用 `DeviceDataParser` + `DeviceInferService` 的整条推理/落库链路。
---
## 1. 建议的目标形态SimController 成为“仿真编排入口”
建议把 SimController 从“原型”升级为生产入口,但要遵循当前工程已存在的服务边界:
### 1.1 目标职责划分(贴合当前代码)
- **SimController**:只处理 HTTP + 参数校验 + 返回值结构统一(保持与 ProjectController 相同的 `{code,msg,data}` 或复用统一响应体)。
- **SimulationFacade新增**:负责把“现有 services + topology JSON + event 表”组装成可计算输入;并在需要时调用推理、落库、更新情景状态。
- **SimulationEngine新增或重构现有 SimService**:只做“时序帧生成/影响计算/事件注入”,纯内存计算,不碰 DB。
- **Converter新增**:把 Engine 输出转成 `DeviceDataParser` 能吃的 frames JSON或直接输出 Map 结构)。
这样做的好处:既保留 `SimController` 分层方向,又不引入仓库里不存在的 Repository/Converter 类型。
---
## 2. 具体落地建议(按当前文件/类名对齐)
### 2.1 先做最小可用:让 /sim 接口复用现有 ProjectServiceImpl 的能力
为了快速验证链路,第一阶段建议不要立刻重写引擎,而是“搬运+封装”:
1) **新增 `SimulationFacade`(建议放在 `com.yfd.business.css.service.sim` 包)**
内部依赖现有 service`ProjectService/ScenarioService/EventService/DeviceInferService`(以及 `MaterialService` 若需要 DB 补全静态物料属性)。
它暴露两类能力:
- `init(projectId, scenarioId, params)`:复用 [ProjectServiceImpl.initSimulation](file:///e:/projectJava/JavaProjectRepo/business-css/src/main/java/com/yfd/business/css/service/impl/ProjectServiceImpl.java#L614-L774) 或将其中解析/计算段迁移出来。
- `run(projectId, scenarioId, params)`:复用 [ProjectServiceImpl.runSimulation](file:///e:/projectJava/JavaProjectRepo/business-css/src/main/java/com/yfd/business/css/service/impl/ProjectServiceImpl.java#L1296-L1351)。
2) **SimController 直接调用 facade并提供与 ProjectController 一致的返回结构**
这样能做到:新增 `/sim/*` 不影响现有 `/projects/simulation/*`,并且复用现有稳定链路。
这一阶段的目标是:**先让 SimController 可用、可回归测试、可逐步迁移**。
### 2.2 第二阶段:把 initSimulation 拆成“解析/计算/输出”三个可替换模块
当前 `initSimulation` 里混杂了:拓扑解析、设备顺序、静态注入、影响计算、事件解析、帧输出。建议拆成 3 个模块,便于未来替换而不改 API
#### A. Topology & Static 解析模块建议TopologyParser
直接复用现有实现(迁移或抽取):
- 设备顺序:`parseDeviceOrder(projectId)`[ProjectServiceImpl.java:L370-L397](file:///e:/projectJava/JavaProjectRepo/business-css/src/main/java/com/yfd/business/css/service/impl/ProjectServiceImpl.java#L370-L397)
- 设备-物料绑定:`buildDeviceMaterialMap`[ProjectServiceImpl.java:L1063-L1090](file:///e:/projectJava/JavaProjectRepo/business-css/src/main/java/com/yfd/business/css/service/impl/ProjectServiceImpl.java#L1063-L1090)
- 静态/影响解析:
- 设备:`parseDeviceStaticsAndInfluences`[ProjectServiceImpl.java:L806-L860](file:///e:/projectJava/JavaProjectRepo/business-css/src/main/java/com/yfd/business/css/service/impl/ProjectServiceImpl.java#L806-L860)
- 物料:`parseMaterialStaticsAndInfluences`[ProjectServiceImpl.java:L861-L928](file:///e:/projectJava/JavaProjectRepo/business-css/src/main/java/com/yfd/business/css/service/impl/ProjectServiceImpl.java#L861-L928)
- DB 物料静态补全:`buildMaterialStaticFromDb`[ProjectServiceImpl.java:L1116-L1141](file:///e:/projectJava/JavaProjectRepo/business-css/src/main/java/com/yfd/business/css/service/impl/ProjectServiceImpl.java#L1116-L1141)
- 设备 size 注入:`injectDeviceSize`[ProjectServiceImpl.java:L776-L804](file:///e:/projectJava/JavaProjectRepo/business-css/src/main/java/com/yfd/business/css/service/impl/ProjectServiceImpl.java#L776-L804)
建议输出一个结构化的 DTO例如
- `List<Device> orderedDevices`
- `Map<deviceId, deviceType>`
- `Map<deviceId, materialId>`
- `devStatic/devInfluence/matStatic/matInfluence/matStaticDb`
#### B. Event 解析模块建议EventScheduleBuilder
直接复用现有 `attr_changes` 解析逻辑:
- `buildValueProviders`[ProjectServiceImpl.java:L929-L996](file:///e:/projectJava/JavaProjectRepo/business-css/src/main/java/com/yfd/business/css/service/impl/ProjectServiceImpl.java#L929-L996)
- `collectTimePoints`[ProjectServiceImpl.java:L1037-L1061](file:///e:/projectJava/JavaProjectRepo/business-css/src/main/java/com/yfd/business/css/service/impl/ProjectServiceImpl.java#L1037-L1061)
- `readValue`[ProjectServiceImpl.java:L998-L1035](file:///e:/projectJava/JavaProjectRepo/business-css/src/main/java/com/yfd/business/css/service/impl/ProjectServiceImpl.java#L998-L1035)
补强建议(贴合现状的缺口):
- 当 `timePoints` 为空时不要直接失败:允许用 params 提供 `start/end/interval` 生成时间网格(否则“无事件仿真”无法跑)。
- ramp 事件目前仅把起止时刻作为输出点;若前端想看平滑曲线,需要补齐采样点(例如每 1s
#### C. Frame 生成模块建议FrameGenerator
复用 `initSimulation` 的生成循环,但把“覆盖策略”参数化:
- 现在的覆盖策略是:**Static → Influence → overrideWithEvents最终覆盖**
代码:[overrideWithEvents](file:///e:/projectJava/JavaProjectRepo/business-css/src/main/java/com/yfd/business/css/service/impl/ProjectServiceImpl.java#L1106-L1114)
- 建议支持两类事件Input 与 Override可先用 params 开关模拟)
- Input计算前注入
- Override计算后强制覆盖
这样第三阶段才需要动到“事件类型”定义;第二阶段只要把钩子留好即可。
---
## 3. SimService/SimModel 如何与现有链路对接(不要重新造轮子)
### 3.1 现有 SimModel 的适配建议(只做必要改造)
当前 SimModel 过于抽象(纯 KV无法表达“设备/物料静态属性注入、deviceType、material 绑定”等现有业务关键点:
- `SimUnit` 只有 `unitId/deviceId/materialId/deviceType`[SimUnit.java](file:///e:/projectJava/JavaProjectRepo/business-css/src/main/java/com/yfd/business/css/model/SimUnit.java)
- `SimContext` 只有 `Map<SimPropertyKey, Double>` 的 currentValues[SimContext.java](file:///e:/projectJava/JavaProjectRepo/business-css/src/main/java/com/yfd/business/css/model/SimContext.java)
建议的最小增强(为了能生成当前 runSimulation 可消费的 frames
- `SimUnit` 增加 `Map<String, Double> staticProps`(至少承载 diameter/height 与物料关键属性)。
- `SimEvent` 增加 `boolean override` 或扩展 EventType区分 Input/Override
- `SimInfluenceSource.delay` 目前未在 `SimService` 使用;若要支持 delay必须用 `ctx.timeline` 回看历史值(当前 `SimContext` 已能保留 step 的快照)。
### 3.2 Converter把 SimContext 输出转换成现有 frames 格式
建议增加一个 Converter替代原型里的 `InferenceConverter`),输出结构与 `DeviceDataParser` 一致:
```json
{
\"data\": {
\"frames\": [
{
\"step\": 0,
\"time\": 0,
\"devices\": {
\"dev-001\": {\"deviceType\": \"CylindricalTank\", \"diameter\": 20, \"height\": 20, \"u_concentration\": 20}
}
}
]
}
}
```
理由:这样 `SimController` 可以直接调用 `DeviceDataParser.parseAndGroupDeviceData` + `DeviceInferService.processDeviceInference`,与现有落库路径完全一致。
---
## 4. SimController 的接口形态建议(与现有系统兼容)
建议同时支持“两段式”和“一段式”,避免推倒重来:
### 4.1 两段式(兼容现有前端/流程)
- `POST /sim/init`:返回 frames`/projects/simulation/init` 对齐)
- `POST /sim/run`:接收 frames调用推理并落库`/projects/simulation/run` 对齐)
### 4.2 一段式(面向后端批处理/自动化)
- `POST /sim/run-all`:内部调用 init 生成 frames再立即 run 推理落库,返回摘要(如 snapshots、结果条数、耗时
---
## 5. 迁移与风险控制(建议强制执行)
1) **先引入新接口,不删旧接口**:让 `/sim/*``/projects/simulation/*` 并行一段时间。\n\n2) **帧格式不变**:任何新实现必须输出 `DeviceDataParser` 可解析的结构,否则推理链路与前端都要一起改,风险最大。\n\n3) **行为一致性测试**:对比新旧 init 输出(同 projectId/scenarioId是否一致对比 run 后写入 `scenario_result` 条数与 key 字段是否一致。\n\n4) **清理 System.out.println**`ProjectServiceImpl` 的 init/run 里有大量 `System.out.println`(例如 [ProjectServiceImpl.java:L644-L661](file:///e:/projectJava/JavaProjectRepo/business-css/src/main/java/com/yfd/business/css/service/impl/ProjectServiceImpl.java#L644-L661) 与 [runSimulation debug](file:///e:/projectJava/JavaProjectRepo/business-css/src/main/java/com/yfd/business/css/service/impl/ProjectServiceImpl.java#L1319-L1338)),建议迁移到统一日志体系后再移除,以免污染生产日志与性能。\n\n---\n\n## 6. 最小实现清单(按优先级排序)\n\n- 建议 1`SimController` 先“可用”——删除/替换不存在的 Repository/Converter 依赖,改用现有 Service。\n- 建议 2新增 `SimulationFacade`,把现有 `ProjectServiceImpl.initSimulation/runSimulation` 先封装起来。\n- 建议 3逐步抽取 `TopologyParser/EventScheduleBuilder/FrameGenerator`,把 `ProjectServiceImpl` 中的计算逻辑迁移出来。\n- 建议 4最后再考虑把增强后的 `SimService/SimModel` 正式替换成唯一引擎实现。\n+

View File

@ -1,152 +0,0 @@
# SimController 及相关接口实现建议 v4
基于 [情景模拟分析结果v3.md](file:///e:/projectJava/JavaProjectRepo/business-css/%E6%83%85%E6%99%AF%E6%A8%A1%E6%8B%9F%E5%88%86%E6%9E%90%E7%BB%93%E6%9E%9Cv3.md) 中的分析,`SimController` 及其配套组件 (`SimService`, `SimBuilder`, `SimModel`) 代表了系统向**模块化、可测试化**方向演进的正确路径。
当前 `SimController` 处于不可用状态(依赖缺失、逻辑简化、代码注释)。为了将其转化为生产可用的仿真服务,以下是具体的实现建议与重构方案。
---
## 1. 总体架构设计
目标是将仿真逻辑从 `ProjectServiceImpl` 中剥离,构建独立的仿真层。
* **Controller 层 (`SimController`)**: 仅负责接收 HTTP 请求,参数校验,调用 Service返回结果。
* **Facade 层 (`SimDataFacade`)**: **新增组件**。负责与现有的 `ProjectService`, `EventService`, `InfluenceService` 交互获取原始数据Project 实体, Event 列表等),并屏蔽数据库细节。*注:原设计中的 `ProjectRepository` 等接口在本项目中没有实现,直接复用现有的 Service 层更符合现状。*
* **Builder 层 (`SimBuilder`)**: 负责将原始数据Entity/JSON转换为仿真专用的领域模型 (`SimUnit`, `SimEvent`, `SimInfluenceNode`)。
* **Engine 层 (`SimService`)**: **核心计算引擎**。纯内存计算,不依赖数据库。执行 `Static -> Event -> Influence -> Override` 的标准管线。
---
## 2. 详细实现建议
### 2.1 补齐数据获取层 (SimDataFacade)
`SimController` 依赖了不存在的 `ProjectRepository` 等接口。建议创建一个 `SimDataFacade` 来封装数据获取逻辑。
```java
@Component
public class SimDataFacade {
private final ProjectService projectService;
private final EventService eventService;
// ... 其他 Service
// 封装获取逻辑:获取项目拓扑、事件列表、影响关系等
public SimDataPackage loadSimulationData(String projectId, String scenarioId) {
Project project = projectService.getById(projectId);
List<Event> events = eventService.list(new QueryWrapper<Event>().eq("scenario_id", scenarioId));
// ... 获取其他必要数据
return new SimDataPackage(project, events);
}
}
```
### 2.2 激活并增强 Builder (SimBuilder)
`SimBuilder` 目前被注释掉了,需要激活并实现核心转换逻辑。重点是将 `ProjectServiceImpl.initSimulation` 中的解析逻辑迁移过来。
* **`buildUnits`**: 解析 `Project.topology` JSON提取 Device 和 Material构建 `SimUnit` 列表。
* *关键点*需要包含静态属性Static Values的解析作为 `SimUnit` 的初始状态。
* **`buildEvents`**: 解析 `Event.attr_changes` JSON构建 `SimEvent` 列表。
* *关键点*:区分 **普通事件 (Input)****强制覆盖事件 (Override)**。建议在 `SimEvent` 中增加 `isOverride` 标志。
* **`buildInfluenceNodes`**: 解析 `Project.topology` 中的 `properties` -> `influence` 节点,构建 `SimInfluenceNode` 列表。
### 2.3 重构计算引擎 (SimService)
这是最核心的部分,必须修正当前的“事件 -> 计算”逻辑,改为 **标准管线**
**建议代码结构:**
```java
public class SimService {
public SimContext runSimulation(List<SimUnit> units,
List<SimEvent> events,
List<SimInfluenceNode> nodes,
int steps) {
SimContext ctx = new SimContext();
// 1. 初始化静态基线 (Static)
// 将 SimUnit 中携带的静态属性写入 ctx (t=0)
for (SimUnit unit : units) {
unit.getStaticProperties().forEach((k, v) ->
ctx.setValue(SimPropertyKey.of(unit.id(), k), v)
);
}
// 2. 时间步推进
for (int step = 0; step <= steps; step++) {
// 2.1 应用输入事件 (Event Input)
// 筛选当前 step 的普通事件,写入 ctx
applyEvents(ctx, events, step, false);
// 2.2 执行影响计算 (Influence)
// 基于当前 ctx 状态,计算所有 InfluenceNode
// 注意:为了避免计算顺序依赖,建议使用双缓冲 (Snapshot) 或 拓扑排序
// 简单实现可先计算 diff再统一应用
applyInfluences(ctx, nodes);
// 2.3 应用强制覆盖事件 (Event Override)
// 筛选当前 step 的强制事件,再次写入 ctx覆盖计算结果
applyEvents(ctx, events, step, true);
// 2.4 保存快照
ctx.snapshot(step);
}
return ctx;
}
}
```
### 2.4 统一 API 接口 (SimController)
建议将 `SimController` 作为仿真功能的唯一入口。
```java
@RestController
@RequestMapping("/sim")
public class SimController {
@PostMapping("/run")
public Result<SimulationResult> run(@RequestBody SimulationRequest req) {
// 1. 加载数据
SimDataPackage data = simDataFacade.loadSimulationData(req.getProjectId(), req.getScenarioId());
// 2. 构建模型
List<SimUnit> units = SimBuilder.buildUnits(data.getProject());
List<SimEvent> events = SimBuilder.buildEvents(data.getEvents());
List<SimInfluenceNode> nodes = SimBuilder.buildInfluenceNodes(data.getProject());
// 3. 执行仿真
SimContext ctx = simService.runSimulation(units, events, nodes, req.getSteps());
// 4. 结果转换 (适配前端图表或 AI 推理)
return Result.success(SimResultConverter.convert(ctx));
}
}
```
---
## 3. 实施路线图
1. **基础类准备**:
* 完善 `SimUnit`: 增加 `Map<String, Double> staticProperties` 字段。
* 完善 `SimEvent`: 增加 `boolean isOverride` 字段。
* 创建 `SimDataFacade` 类。
2. **迁移解析逻辑**:
* 将 `ProjectServiceImpl` 中解析 JSON (Topology, Event) 的代码块复制到 `SimBuilder` 中并适配。
* 确保单元测试覆盖 `SimBuilder`,保证解析正确性。
3. **实现计算逻辑**:
* 编写 `SimService.runSimulation`,严格按照推荐的 4 步管线实现。
* 编写单元测试,验证“事件覆盖计算”和“计算基于静态值”的场景。
4. **接口接入**:
* 在 `SimController` 中装配上述组件。
* 前端对接新的 `/sim/run` 接口。
5. **清理**:
* 标记 `ProjectServiceImpl` 中的旧模拟代码为 `@Deprecated`,并在验证新接口无误后删除。
通过以上步骤,可以将复杂的仿真逻辑从业务 Service 中解耦,构建一个清晰、可维护、易扩展的仿真引擎。

View File

@ -1,194 +0,0 @@
# SimController 及相关接口详细实现文档 v4-2
本文档基于 [SimController 及相关接口实现建议v4.md](file:///e:/projectJava/JavaProjectRepo/business-css/SimController%20%E5%8F%8A%E7%9B%B8%E5%85%B3%E6%8E%A5%E5%8F%A3%E5%AE%9E%E7%8E%B0%E5%BB%BA%E8%AE%AEv4.md) 进一步细化提供了更贴合当前代码库ProjectServiceImpl的详细实现方案。
## 1. 核心目标
* **激活 `SimController`**:使其成为仿真服务的唯一入口,替代分散在 `ProjectController` 中的逻辑。
* **标准化计算管线**:实现 `Static -> Event(Input) -> Influence -> Event(Override)` 的标准计算流程。
* **复用现有逻辑**:最大程度复用 `ProjectServiceImpl` 中已有的 JSON 解析和数据组装代码,避免重复造轮子。
---
## 2. 模块详细设计与实现
### 2.1 数据获取层 (SimDataFacade)
负责从 DB 获取原始数据,并进行初步的组装。
**File:** `src/main/java/com/yfd/business/css/facade/SimDataFacade.java` (新建)
```java
@Component
public class SimDataFacade {
@Autowired private ProjectService projectService;
@Autowired private EventService eventService;
@Autowired private MaterialService materialService; // 用于补全物料静态属性
public SimDataPackage loadSimulationData(String projectId, String scenarioId) {
// 1. 获取项目与拓扑
Project project = projectService.getById(projectId);
if (project == null) throw new IllegalArgumentException("Project not found: " + projectId);
// 2. 获取事件
List<Event> events = eventService.list(new QueryWrapper<Event>().eq("scenario_id", scenarioId));
// 3. 预加载物料库 (用于后续补全静态属性)
// 逻辑复用 ProjectServiceImpl.buildMaterialStaticFromDb
// 这里先返回原始数据,由 Builder 处理具体的补全逻辑
return new SimDataPackage(project, events);
}
}
```
### 2.2 模型构建层 (SimBuilder)
负责将 `Project` (JSON) 和 `Event` (JSON) 转换为 `SimUnit`, `SimEvent`, `SimInfluenceNode`
**关键策略**:直接复用 `ProjectServiceImpl` 中的解析方法(`parseDeviceStaticsAndInfluences`, `buildValueProviders` 等),将其重构为静态工具方法或独立组件。
**File:** `src/main/java/com/yfd/business/css/build/SimBuilder.java` (激活并重构)
```java
public class SimBuilder {
private final ObjectMapper objectMapper = new ObjectMapper();
// 1. 构建单元 (SimUnit) - 包含静态属性
public List<SimUnit> buildUnits(Project project, MaterialService materialService) {
List<SimUnit> units = new ArrayList<>();
JsonNode root = objectMapper.readTree(project.getTopology());
// 解析设备静态属性 (复用 ProjectServiceImpl.parseDeviceStaticsAndInfluences 的部分逻辑)
// 解析物料静态属性 (复用 ProjectServiceImpl.buildMaterialStaticFromDb)
// 伪代码示例
for (JsonNode deviceNode : root.path("devices")) {
String deviceId = deviceNode.path("deviceId").asText();
Map<String, Double> staticProps = new HashMap<>();
// 1.1 解析 topology 中的 static 节点
// 1.2 解析 Device.size 并注入
// 1.3 如果有绑定的 material查询 DB 并注入物料属性
units.add(new SimUnit(deviceId, ..., staticProps));
}
return units;
}
// 2. 构建事件 (SimEvent)
public List<SimEvent> buildEvents(List<Event> events) {
// 复用 ProjectServiceImpl.buildValueProviders 解析 attr_changes
// 将解析出的 Schedule 转换为 List<SimEvent>
// 注意区分 isOverride (强制覆盖)
}
// 3. 构建影响关系 (SimInfluenceNode)
public List<SimInfluenceNode> buildInfluenceNodes(Project project) {
// 复用 ProjectServiceImpl.parseDeviceStaticsAndInfluences 中的 influence 解析逻辑
}
}
```
### 2.3 核心计算引擎 (SimService)
实现标准计算管线。
**File:** `src/main/java/com/yfd/business/css/service/SimService.java` (重构)
```java
public class SimService {
public SimContext runSimulation(List<SimUnit> units,
List<SimEvent> events,
List<SimInfluenceNode> nodes,
int steps) {
SimContext ctx = new SimContext();
// Step 1: 初始化静态基线 (t=0)
for (SimUnit unit : units) {
unit.getStaticProperties().forEach((k, v) ->
ctx.setValue(SimPropertyKey.of(unit.unitId(), k), v)
);
}
// Step 2: 循环推进 (t=1 to steps)
for (int step = 1; step <= steps; step++) {
// 2.1 Event (Input): 应用普通事件
applyEvents(ctx, events, step, false);
// 2.2 Influence: 计算影响关系
// 基于当前 ctx (包含 static + input event) 计算
applyInfluences(ctx, nodes);
// 2.3 Event (Override): 应用强制覆盖事件
// 再次覆盖,确保强制逻辑生效
applyEvents(ctx, events, step, true);
// 2.4 Snapshot
ctx.snapshot(step);
}
return ctx;
}
// 辅助方法applyEvents, applyInfluences
}
```
### 2.4 统一控制器 (SimController)
**File:** `src/main/java/com/yfd/business/css/controller/SimController.java` (激活)
```java
@RestController
@RequestMapping("/sim")
public class SimController {
@Autowired private SimDataFacade simDataFacade;
@Autowired private SimBuilder simBuilder; // 如果是 Bean
@Autowired private SimService simService;
// 标准运行接口
@PostMapping("/run")
public Result<Map<String, Object>> run(@RequestBody SimulationRequest req) {
// 1. Load Data
SimDataPackage data = simDataFacade.loadSimulationData(req.getProjectId(), req.getScenarioId());
// 2. Build Model
List<SimUnit> units = simBuilder.buildUnits(data.getProject(), ...);
List<SimEvent> events = simBuilder.buildEvents(data.getEvents());
List<SimInfluenceNode> nodes = simBuilder.buildInfluenceNodes(data.getProject());
// 3. Run Engine
SimContext ctx = simService.runSimulation(units, events, nodes, req.getSteps());
// 4. Convert Result (复用 DeviceDataParser 或 InferenceConverter)
// 保持与前端/推理接口的数据格式兼容
return Result.success(SimResultConverter.toFrames(ctx));
}
}
```
---
## 3. 具体复用点清单 (ProjectServiceImpl -> SimBuilder)
为了加快开发,以下方法建议直接从 `ProjectServiceImpl` 提取到 `SimBuilder` 或工具类 `SimParserUtils` 中:
1. **`injectDeviceSize`**: 解析设备尺寸。
2. **`buildMaterialStaticFromDb`**: 补全物料静态属性。
3. **`parseDeviceStaticsAndInfluences`**: 解析设备静态值和影响关系。
4. **`parseMaterialStaticsAndInfluences`**: 解析物料静态值和影响关系。
5. **`buildValueProviders`**: 解析事件 JSON (attr_changes)。
**注意**:在提取时,需要将原本直接操作 `Map<String, Object> state` 的逻辑,改为构建 `SimUnit``SimInfluenceNode` 对象。
---
## 4. 兼容性与迁移
* **API 兼容**:新接口 `/sim/run` 的返回结构应尽量与原 `/projects/simulation/run` 中的 `frames` 结构保持一致,以便前端无缝切换。
* **分步上线**
1. 先上线 `/sim/run` 供测试使用。
2. 验证无误后,将前端调用切到新接口。
3. 废弃 `ProjectController` 中的相关接口。

View File

@ -1,137 +0,0 @@
### Algorithms
GET http://localhost:8090/api/algorithms
### Algorithms page
GET http://localhost:8090/api/algorithms/page?current=1&size=10
### Create algorithm
POST http://localhost:8090/api/algorithms
Content-Type: application/json
{
"name": "Sample Algorithm",
"description": "Test description",
"version": "v1.0",
"principle": "Simple principle",
"inputParams": "{}",
"outputParams": "{}"
}
### Update algorithm
PUT http://localhost:8090/api/algorithms/{{algorithmId}}
Content-Type: application/json
{
"name": "Updated Name"
}
### Delete algorithm
DELETE http://localhost:8090/api/algorithms/{{algorithmId}}
### Search algorithm
GET http://localhost:8090/api/algorithms/search?keyword=test
### Devices
POST http://localhost:8090/devices
Content-Type: application/json
{
"projectId": "{{projectId}}",
"code": "D-001",
"type": "pump",
"name": "Main Pump"
}
GET http://localhost:8090/devices/types
GET http://localhost:8090/devices/search?type=pump&name=Pump
### Materials
POST http://localhost:8090/materials
Content-Type: application/json
{
"projectId": "{{projectId}}",
"name": "UO2",
"uConcentration": 1.2,
"uo2Density": 10.5
}
GET http://localhost:8090/materials/search?name=UO2
### Critical Data
POST http://localhost:8090/critical-data
Content-Type: application/json
{
"deviceType": "pump",
"attrState": "{}",
"keffValue": 0.98
}
GET http://localhost:8090/critical-data/device-types
GET http://localhost:8090/critical-data/by-device-type?deviceType=pump
### Critical Data import (adjust file path)
POST http://localhost:8090/critical-data/import
Content-Type: multipart/form-data
file=@E:/path/to/critical-data.xlsx
### Scenarios
POST http://localhost:8090/scenarios
Content-Type: application/json
{
"projectId": "{{projectId}}",
"name": "Scenario A",
"description": "Test scenario"
}
GET http://localhost:8090/scenarios/search?name=Scenario
### Events
POST http://localhost:8090/events
Content-Type: application/json
{
"scenarioId": "{{scenarioId}}",
"deviceId": "{{deviceId}}",
"materialId": "{{materialId}}",
"attrChanges": "{\"flow_rate\": 12.3}",
"triggerTime": 1.5
}
PUT http://localhost:8090/events/{{eventId}}/attr-changes
Content-Type: application/json
{
"attr_changes": {"flow_rate": 20.0}
}
### Scenario Results
POST http://localhost:8090/scenario-results
Content-Type: application/json
{
"scenarioId": "{{scenarioId}}",
"deviceId": "{{deviceId}}",
"step": 1,
"attrState": "{}",
"keffValue": 0.97
}
### Projects
POST http://localhost:8090/projects
Content-Type: application/json
{
"code": "P-001",
"name": "Demo Project",
"description": "Test",
"topology": "{}"
}
GET http://localhost:8090/projects/search?name=Demo

View File

@ -1,114 +0,0 @@
-- ==========================================
-- 1. project 表
-- ==========================================
CREATE TABLE project (
project_id CHAR(36) PRIMARY KEY,
code VARCHAR(20) NOT NULL UNIQUE,
name VARCHAR(200) NOT NULL,
description TEXT,
topology LONGTEXT,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
-- ==========================================
-- 2. device 表
-- ==========================================
CREATE TABLE device (
device_id CHAR(36) PRIMARY KEY,
project_id CHAR(36) NOT NULL,
code VARCHAR(50) NOT NULL,
type VARCHAR(50) NOT NULL,
name VARCHAR(100),
size JSON NOT NULL,
volume DOUBLE,
flow_rate DOUBLE,
pulse_velocity DOUBLE,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
-- ==========================================
-- 3. material 表
-- ==========================================
CREATE TABLE material (
material_id CHAR(36) PRIMARY KEY,
project_id CHAR(36) NOT NULL,
name VARCHAR(100) NOT NULL,
u_concentration DOUBLE,
uo2_density DOUBLE,
u_enrichment DOUBLE,
pu_concentration DOUBLE,
puo2_density DOUBLE,
pu_isotope DOUBLE,
hno3_acidity DOUBLE,
h2c2o4_concentration DOUBLE,
organic_ratio DOUBLE,
moisture_content DOUBLE,
custom_attrs JSON,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
-- ==========================================
-- 4. critical_data 表
-- ==========================================
CREATE TABLE critical_data (
critical_id CHAR(36) PRIMARY KEY,
device_type VARCHAR(50) NOT NULL,
attr_state JSON NOT NULL,
keff_value DOUBLE,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
-- ==========================================
-- 5. scenario 表
-- ==========================================
CREATE TABLE scenario (
scenario_id CHAR(36) PRIMARY KEY,
project_id CHAR(36) NOT NULL,
name VARCHAR(100) NOT NULL,
description TEXT,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
-- ==========================================
-- 6. event 表
-- ==========================================
CREATE TABLE event (
event_id CHAR(36) PRIMARY KEY,
scenario_id CHAR(36) NOT NULL,
device_id CHAR(36),
material_id CHAR(36),
attr_changes JSON NOT NULL,
trigger_time DOUBLE NOT NULL,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
-- ==========================================
-- 7. scenario_result 表
-- ==========================================
CREATE TABLE scenario_result (
scenario_id CHAR(36) NOT NULL,
device_id CHAR(36) NOT NULL,
step INT NOT NULL,
attr_state JSON NOT NULL,
keff_value DOUBLE,
PRIMARY KEY(scenario_id, device_id, step)
);
-- ==========================================
-- 8.algorithm 表
-- ==========================================
CREATE TABLE algorithm (
algorithm_id CHAR(36) PRIMARY KEY COMMENT '算法唯一ID',
name VARCHAR(100) NOT NULL COMMENT '算法名称',
description TEXT COMMENT '算法描述',
version VARCHAR(20) COMMENT '版本号例如v1.0',
principle TEXT COMMENT '算法原理说明',
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
input_params JSON COMMENT '调用参数以JSON存储参数名称、类型、默认值等',
output_params JSON COMMENT '输出参数以JSON存储参数名称、类型、说明等'
);

View File

@ -1,26 +0,0 @@
# 分析模拟系统功能规划说明
## 业务功能及目录结构
- business业务功能
- project 项目
- device 设备
- material 物料
- critical_data 临界数据
- scenario 情景
- init_event 始发事件
- scenario_result 情景结果
- algorithm 算法
## 系统管理功能及目录结构
- system通用系统管理
- user 用户
- role 角色
- menu 菜单
- log 日志
- dept 部门
- dict 字典

View File

@ -1,81 +0,0 @@
# 临界事故情景分析模拟系统方案
本文档定义业务模块 `business-css` 的目标、架构、数据模型、接口设计与实施计划。
## 目标
- 支撑对“临界事故”相关情景的建模、参数化配置与快速模拟评估。
- 与 `framework` 项目共享通用能力(鉴权、缓存、日志、通用工具、数据访问等)。
- 提供 REST 接口用于前端或第三方系统的集成。
## 总体架构
- 应用Spring BootJDK 17模块名 `business-css`
- 依赖:`com.yfd:platform:1.0:jar:plain` 引入框架公共模块。
- 数据存储MySQL默认 `yfd_platform`,可按环境切换)。
- 接口:按 `REST + JSON` 约定OpenAPI 自动文档可选。
## 核心域模型(初版)
- `Scenario`:事故情景(名称、类型、参数定义、风险等级)。
- `IncidentFactor`:影响因子(指标、阈值、权重、取值范围)。
- `SimulationRequest`:一次模拟请求(情景名、输入参数)。
- `SimulationResult`:模拟输出(状态、关键指标、结论摘要、时间戳)。
## 关键能力
- 参数化建模:基于影响因子提出可配置的情景模板。
- 指标计算:利用 `framework` 的通用工具库(如缓存、时间序列、统计)实现。
- 场景评估:形成风险等级、预警阈值与应对建议。
- 结果持久化:保存模拟结果用于追踪与复盘(后续版本)。
## 接口草图
- `GET /api/simulation/ping`:服务健康检测。
- `POST /api/simulation/run`:执行一次模拟,输入 `SimulationRequest`,输出 `SimulationResult`
- 后续:`/api/scenario/*` 用于情景模板的增删改查;`/api/factor/*` 用于影响因子的管理。
## 数据表(建议)
- `css_scenario`:情景基础信息表。
- `css_factor`:影响因子表。
- `css_simulation_log`:模拟记录表(包含输入与输出摘要)。
## 与框架的集成
- 鉴权与用户上下文:复用 `framework` 的安全模块。
- 通用组件缓存Caffeine/Redis、日志、异常统一处理。
- 数据访问:沿用 MyBatis/MyBatis-Plus 与统一的分页、审计字段策略。
## 版本与发布
- 业务模块版本:`1.0-SNAPSHOT` 起步;与框架 `1.0` 对齐。
- 构建:在仓库根 `pom` 中作为模块聚合;可单独使用 `-pl business-css` 构建或运行。
## 渐进式实施计划
1. 基础骨架搭建(已完成:应用入口、控制器、服务接口与模型)。
2. 定义情景与影响因子数据模型,建立数据库表结构与 Mapper。
3. 接入框架公共工具,完善指标计算与风险评估逻辑。
4. 增加 OpenAPI 文档与前端集成接口规范。
5. 引入结果持久化与查询报表。
## 调试与开发指南
### Maven 命令行启动 + 远程调试
如果您偏好使用命令行启动,或者需要模拟特定的 Maven 环境,可采用以下方式:
1. **启动应用**
在终端中运行以下命令,该命令会以调试模式启动应用并监听 `5005` 端口(`suspend=n` 表示不等待调试器连接直接启动,如需等待可改为 `y`)。
> 注意PowerShell 中需要使用单引号包裹 JVM 参数,防止解析错误。
```bash
mvn -DskipTests spring-boot:run -pl business-css '-Dspring-boot.run.jvmArguments=-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005'
```
2. **附加调试器**
应用启动后,转到 IDE 的 "运行和调试" (Run and Debug) 面板,选择 **"Attach to Remote Program5005"** 配置(需确保 `.vscode/launch.json` 中已存在相应配置然后点击运行。IDE 将连接到正在运行的 Maven 进程,即可开始断点调试。
## 运维与配置
- 端口默认 `8082`,环境覆盖通过 `application.yml` 与外部化配置。
- 数据库连接按环境注入dev/test/prod
- 日志级别默认 `info`,业务包 `com.yfd` 可设为 `debug`
## 安全与合规
- 按角色访问控制(复用框架安全),仅授权用户可触发模拟。
- 输入校验与审计日志记录,避免非法参数导致资源消耗异常。
---
本文为初版方案,后续将结合具体需求与数据约束逐步细化与调整。

View File

@ -1 +0,0 @@
ALTER TABLE material MODIFY COLUMN h2c2o4_concentration DECIMAL(20, 8);

View File

@ -1,15 +0,0 @@
# http://editorconfig.org
root = true
[*] # 表示所有文件适用
charset = utf-8 # 设置文件字符集为 utf-8
indent_style = space # 缩进风格tab | space
indent_size = 2 # 缩进大小
end_of_line = lf # 控制换行类型(lf | cr | crlf)
trim_trailing_whitespace = true # 去除行首的任意空白字符
insert_final_newline = true # 始终在文件末尾插入一个新行
[*.md] # 表示仅 md 文件适用以下规则
max_line_length = off
trim_trailing_whitespace = false

View File

@ -1,10 +0,0 @@
## 开发环境
# 变量必须以 VITE_ 为前缀才能暴露给外部读取
NODE_ENV='development'
VITE_APP_TITLE = '临界事故情景分析模拟系统'
VITE_APP_PORT = 3000
VITE_APP_BASE_API = '/dev-api'
VITE_APP_BASE_HTTP = 'http://localhost:3000'
VITE_APP_WS_API = 'http://192.168.1.76:8090'

View File

@ -1,8 +0,0 @@
## 生产环境
NODE_ENV='production'
VITE_APP_TITLE = 'NewFrameWork2023-WEB'
VITE_APP_PORT = 3000
VITE_APP_BASE_API = '/prod-api'
VITE_APP_BASE_HTTP = 'http://localhost:3000'
VITE_APP_WS_API = 'http://192.168.1.76:8090'

View File

@ -1,6 +0,0 @@
## 模拟环境
NODE_ENV='staging'
VITE_APP_TITLE = 'NewFrameWork2023-WEB'
VITE_APP_PORT = 3000
VITE_APP_BASE_API = '/prod--api'

View File

@ -1,16 +0,0 @@
*.sh
node_modules
*.md
*.woff
*.ttf
.vscode
.idea
dist
/public
/docs
.husky
.local
/bin
.eslintrc.js
prettier.config.js
src/assets

View File

@ -1,32 +0,0 @@
module.exports = {
env: {
browser: true,
es2021: true,
node: true
},
globals: {
defineProps: 'readonly',
defineEmits: 'readonly',
defineExpose: 'readonly',
DialogType: "readonly",
OptionType: "readonly",
},
parser: 'vue-eslint-parser',
extends: [
'eslint:recommended',
'plugin:vue/vue3-essential',
'plugin:@typescript-eslint/recommended'
],
parserOptions: {
ecmaVersion: 'latest',
parser: '@typescript-eslint/parser',
sourceType: 'module'
},
plugins: ['vue', '@typescript-eslint'],
rules: {
'vue/multi-word-component-names': 'off',
'@typescript-eslint/no-empty-function': 'off', // 关闭空方法检查
'@typescript-eslint/no-explicit-any': 'off', // 关闭any类型的警告
'vue/no-v-model-argument': 'off'
}
};

View File

@ -1,17 +0,0 @@
node_modules
.DS_Store
dist
dist-ssr
*.local
# Editor directories and files
.idea
.vscode
*.suo
*.ntvs*
*.njsproj
*.sln
*.local
package-lock.json
yarn.lock

View File

@ -1,3 +0,0 @@
registry=https://registry.npmjs.org
fetch-retries=5
strict-peer-dependencies=false

View File

@ -1,9 +0,0 @@
/dist/*
.local
.output.js
/node_modules/**
**/*.svg
**/*.sh
/public/*

View File

@ -1,36 +0,0 @@
/**
* 代码格式化配置
*/
module.exports = {
// 指定每个缩进级别的空格数
tabWidth: 2,
// 使用制表符而不是空格缩进行
useTabs: false,
// 在语句末尾打印分号
semi: true,
// 使用单引号而不是双引号
singleQuote: true,
// 更改引用对象属性的时间 可选值"<as-needed|consistent|preserve>"
quoteProps: 'as-needed',
// 多行时尽可能打印尾随逗号。(例如,单行数组永远不会出现逗号结尾。) 可选值"<none|es5|all>"默认none
trailingComma: 'none',
// 在对象文字中的括号之间打印空格
bracketSpacing: true,
// 在单独的箭头函数参数周围包括括号 always(x) => x \ avoidx => x
arrowParens: 'avoid',
// 这两个选项可用于格式化以给定字符偏移量(分别包括和不包括)开始和结束的代码
rangeStart: 0,
rangeEnd: Infinity,
// 指定要使用的解析器,不需要写文件开头的 @prettier
requirePragma: false,
// 不需要自动在文件开头插入 @prettier
insertPragma: false,
// 换行设置 always\never\preserve
proseWrap: 'never',
// 指定HTML文件的全局空格敏感度 css\strict\ignore
htmlWhitespaceSensitivity: 'css',
// Vue文件脚本和样式标签缩进
vueIndentScriptAndStyle: false,
// 换行符使用 lf 结尾是 可选值"<auto|lf|crlf|cr>"
endOfLine: 'lf'
};

View File

@ -1,21 +0,0 @@
MIT License
Copyright (c) 2022 有来开源组织
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View File

@ -1,26 +0,0 @@
module.exports = {
// 继承的规则
extends: ['@commitlint/config-conventional'],
// 定义规则类型
rules: {
// type 类型定义,表示 git 提交的 type 必须在以下类型范围内
'type-enum': [
2,
'always',
[
'feat', // 新功能 feature
'fix', // 修复 bug
'docs', // 文档注释
'style', // 代码格式(不影响代码运行的变动)
'refactor', // 重构(既不增加新功能也不是修复bug)
'perf', // 性能优化
'test', // 增加测试
'chore', // 构建过程或辅助工具的变动
'revert', // 回退
'build' // 打包
]
],
// subject 大小写不做校验
'subject-case': [0]
}
};

View File

@ -1,18 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<link rel="icon" href="/favicon.ico" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="NewFrameWork2023-WEB" />
<meta name="keywords" content="NewFrameWork2023-WEB" />
<title>临界事故情景分析模拟系统</title>
<script>
window.global = window;
</script>
</head>
<body>
<div id="app"></div>
<script type="module" src="/src/main.ts"></script>
</body>
</html>

Binary file not shown.

View File

@ -1,44 +0,0 @@
#!/usr/bin/env bash
(set -o igncr) 2>/dev/null && set -o igncr; # cygwin encoding fix
basedir=`dirname "$0"`
case `uname` in
*CYGWIN*) basedir=`cygpath -w "$basedir"`;;
esac
NODE_EXE="$basedir/node.exe"
if ! [ -x "$NODE_EXE" ]; then
NODE_EXE="$basedir/node"
fi
if ! [ -x "$NODE_EXE" ]; then
NODE_EXE=node
fi
# this path is passed to node.exe, so it needs to match whatever
# kind of paths Node.js thinks it's using, typically win32 paths.
CLI_BASEDIR="$("$NODE_EXE" -p 'require("path").dirname(process.execPath)')"
NPM_CLI_JS="$CLI_BASEDIR/node_modules/npm/bin/npm-cli.js"
NPM_PREFIX=`"$NODE_EXE" "$NPM_CLI_JS" prefix -g`
if [ $? -ne 0 ]; then
# if this didn't work, then everything else below will fail
echo "Could not determine Node.js install directory" >&2
exit 1
fi
NPM_PREFIX_NPM_CLI_JS="$NPM_PREFIX/node_modules/npm/bin/npm-cli.js"
# a path that will fail -f test on any posix bash
NPM_WSL_PATH="/.."
# WSL can run Windows binaries, so we have to give it the win32 path
# however, WSL bash tests against posix paths, so we need to construct that
# to know if npm is installed globally.
if [ `uname` = 'Linux' ] && type wslpath &>/dev/null ; then
NPM_WSL_PATH=`wslpath "$NPM_PREFIX_NPM_CLI_JS"`
fi
if [ -f "$NPM_PREFIX_NPM_CLI_JS" ] || [ -f "$NPM_WSL_PATH" ]; then
NPM_CLI_JS="$NPM_PREFIX_NPM_CLI_JS"
fi
"$NODE_EXE" "$NPM_CLI_JS" "$@"

View File

@ -1,208 +0,0 @@
{
root: 'D:\\Trae_space\\ProjectFrameWork2025\\app\\frontend',
registry: 'https://registry.npmmirror.com',
pkgs: [],
production: false,
cacheStrict: false,
cacheDir: 'C:\\Users\\13910\\.npminstall_tarball',
env: {
npm_config_registry: 'https://registry.npmmirror.com',
npm_config_argv: '{"remain":[],"cooked":["--fix-bug-versions","--china","--userconfig=C:\\\\Users\\\\13910\\\\.cnpmrc","--disturl=https://cdn.npmmirror.com/binaries/node","--registry=https://registry.npmmirror.com"],"original":["--fix-bug-versions","--china","--userconfig=C:\\\\Users\\\\13910\\\\.cnpmrc","--disturl=https://cdn.npmmirror.com/binaries/node","--registry=https://registry.npmmirror.com"]}',
npm_config_user_agent: 'npminstall/7.9.0 npm/? node/v20.19.2 win32 x64',
npm_config_cache: 'C:\\Users\\13910\\.npminstall_tarball',
NODE: 'C:\\Program Files\\nodejs\\node.exe',
npm_node_execpath: 'C:\\Program Files\\nodejs\\node.exe',
npm_execpath: 'C:\\Users\\13910\\AppData\\Roaming\\npm\\node_modules\\cnpm\\node_modules\\npminstall\\bin\\install.js',
npm_config_userconfig: 'C:\\Users\\13910\\.cnpmrc',
npm_config_disturl: 'https://cdn.npmmirror.com/binaries/node',
npm_config_r: 'https://registry.npmmirror.com',
COREPACK_NPM_REGISTRY: 'https://registry.npmmirror.com',
EDGEDRIVER_CDNURL: 'https://npmmirror.com/mirrors/edgedriver',
NODEJS_ORG_MIRROR: 'https://cdn.npmmirror.com/binaries/node',
NVM_NODEJS_ORG_MIRROR: 'https://cdn.npmmirror.com/binaries/node',
PHANTOMJS_CDNURL: 'https://cdn.npmmirror.com/binaries/phantomjs',
CHROMEDRIVER_CDNURL: 'https://cdn.npmmirror.com/binaries/chromedriver',
OPERADRIVER_CDNURL: 'https://cdn.npmmirror.com/binaries/operadriver',
CYPRESS_DOWNLOAD_PATH_TEMPLATE: 'https://cdn.npmmirror.com/binaries/cypress/${version}/${platform}-${arch}/cypress.zip',
ELECTRON_MIRROR: 'https://cdn.npmmirror.com/binaries/electron/',
ELECTRON_BUILDER_BINARIES_MIRROR: 'https://cdn.npmmirror.com/binaries/electron-builder-binaries/',
SASS_BINARY_SITE: 'https://cdn.npmmirror.com/binaries/node-sass',
SWC_BINARY_SITE: 'https://cdn.npmmirror.com/binaries/node-swc',
NWJS_URLBASE: 'https://cdn.npmmirror.com/binaries/nwjs/v',
PUPPETEER_DOWNLOAD_HOST: 'https://cdn.npmmirror.com/binaries/chrome-for-testing',
PUPPETEER_DOWNLOAD_BASE_URL: 'https://cdn.npmmirror.com/binaries/chrome-for-testing',
PUPPETEER_CHROME_DOWNLOAD_BASE_URL: 'https://cdn.npmmirror.com/binaries/chrome-for-testing',
PUPPETEER_CHROME_HEADLESS_SHELL_DOWNLOAD_BASE_URL: 'https://cdn.npmmirror.com/binaries/chrome-for-testing',
PLAYWRIGHT_DOWNLOAD_HOST: 'https://cdn.npmmirror.com/binaries/playwright',
SENTRYCLI_CDNURL: 'https://cdn.npmmirror.com/binaries/sentry-cli',
SAUCECTL_INSTALL_BINARY_MIRROR: 'https://cdn.npmmirror.com/binaries/saucectl',
RE2_DOWNLOAD_MIRROR: 'https://cdn.npmmirror.com/binaries/node-re2',
RE2_DOWNLOAD_SKIP_PATH: 'true',
PRISMA_ENGINES_MIRROR: 'https://cdn.npmmirror.com/binaries/prisma',
npm_config_better_sqlite3_binary_host: 'https://cdn.npmmirror.com/binaries/better-sqlite3',
npm_config_keytar_binary_host: 'https://cdn.npmmirror.com/binaries/keytar',
npm_config_sharp_binary_host: 'https://cdn.npmmirror.com/binaries/sharp',
npm_config_sharp_libvips_binary_host: 'https://cdn.npmmirror.com/binaries/sharp-libvips',
npm_config_robotjs_binary_host: 'https://cdn.npmmirror.com/binaries/robotjs',
npm_config_gl_binary_host: 'https://cdn.npmmirror.com/binaries/gl',
RIPGREP_PREBUILT_BINARIES_MIRROR: 'https://registry.npmmirror.com/-/binary/ripgrep-prebuilt',
npm_rootpath: 'D:\\Trae_space\\ProjectFrameWork2025\\app\\frontend',
INIT_CWD: 'D:\\Trae_space\\ProjectFrameWork2025\\app\\frontend'
},
binaryMirrors: {
ENVS: {
COREPACK_NPM_REGISTRY: 'https://registry.npmmirror.com',
EDGEDRIVER_CDNURL: 'https://npmmirror.com/mirrors/edgedriver',
NODEJS_ORG_MIRROR: 'https://cdn.npmmirror.com/binaries/node',
NVM_NODEJS_ORG_MIRROR: 'https://cdn.npmmirror.com/binaries/node',
PHANTOMJS_CDNURL: 'https://cdn.npmmirror.com/binaries/phantomjs',
CHROMEDRIVER_CDNURL: 'https://cdn.npmmirror.com/binaries/chromedriver',
OPERADRIVER_CDNURL: 'https://cdn.npmmirror.com/binaries/operadriver',
CYPRESS_DOWNLOAD_PATH_TEMPLATE: 'https://cdn.npmmirror.com/binaries/cypress/${version}/${platform}-${arch}/cypress.zip',
ELECTRON_MIRROR: 'https://cdn.npmmirror.com/binaries/electron/',
ELECTRON_BUILDER_BINARIES_MIRROR: 'https://cdn.npmmirror.com/binaries/electron-builder-binaries/',
SASS_BINARY_SITE: 'https://cdn.npmmirror.com/binaries/node-sass',
SWC_BINARY_SITE: 'https://cdn.npmmirror.com/binaries/node-swc',
NWJS_URLBASE: 'https://cdn.npmmirror.com/binaries/nwjs/v',
PUPPETEER_DOWNLOAD_HOST: 'https://cdn.npmmirror.com/binaries/chrome-for-testing',
PUPPETEER_DOWNLOAD_BASE_URL: 'https://cdn.npmmirror.com/binaries/chrome-for-testing',
PUPPETEER_CHROME_DOWNLOAD_BASE_URL: 'https://cdn.npmmirror.com/binaries/chrome-for-testing',
PUPPETEER_CHROME_HEADLESS_SHELL_DOWNLOAD_BASE_URL: 'https://cdn.npmmirror.com/binaries/chrome-for-testing',
PLAYWRIGHT_DOWNLOAD_HOST: 'https://cdn.npmmirror.com/binaries/playwright',
SENTRYCLI_CDNURL: 'https://cdn.npmmirror.com/binaries/sentry-cli',
SAUCECTL_INSTALL_BINARY_MIRROR: 'https://cdn.npmmirror.com/binaries/saucectl',
RE2_DOWNLOAD_MIRROR: 'https://cdn.npmmirror.com/binaries/node-re2',
RE2_DOWNLOAD_SKIP_PATH: 'true',
PRISMA_ENGINES_MIRROR: 'https://cdn.npmmirror.com/binaries/prisma',
npm_config_better_sqlite3_binary_host: 'https://cdn.npmmirror.com/binaries/better-sqlite3',
npm_config_keytar_binary_host: 'https://cdn.npmmirror.com/binaries/keytar',
npm_config_sharp_binary_host: 'https://cdn.npmmirror.com/binaries/sharp',
npm_config_sharp_libvips_binary_host: 'https://cdn.npmmirror.com/binaries/sharp-libvips',
npm_config_robotjs_binary_host: 'https://cdn.npmmirror.com/binaries/robotjs',
npm_config_gl_binary_host: 'https://cdn.npmmirror.com/binaries/gl',
RIPGREP_PREBUILT_BINARIES_MIRROR: 'https://registry.npmmirror.com/-/binary/ripgrep-prebuilt'
},
'@ali/s2': { host: 'https://cdn.npmmirror.com/binaries/looksgood-s2' },
sharp: { replaceHostFiles: [Array], replaceHostMap: [Object] },
'@tensorflow/tfjs-node': {
replaceHostFiles: [Array],
replaceHostRegExpMap: [Object],
replaceHostMap: [Object]
},
cypress: {
host: 'https://cdn.npmmirror.com/binaries/cypress',
newPlatforms: [Object]
},
'utf-8-validate': {
host: 'https://cdn.npmmirror.com/binaries/utf-8-validate/v{version}'
},
xprofiler: {
remote_path: './xprofiler/v{version}/',
host: 'https://cdn.npmmirror.com/binaries'
},
leveldown: { host: 'https://cdn.npmmirror.com/binaries/leveldown/v{version}' },
couchbase: { host: 'https://cdn.npmmirror.com/binaries/couchbase/v{version}' },
gl: { host: 'https://cdn.npmmirror.com/binaries/gl/v{version}' },
sqlite3: {
host: 'https://cdn.npmmirror.com/binaries/sqlite3',
remote_path: 'v{version}'
},
'@journeyapps/sqlcipher': { host: 'https://cdn.npmmirror.com/binaries' },
grpc: {
host: 'https://cdn.npmmirror.com/binaries',
remote_path: '{name}/v{version}'
},
'grpc-tools': { host: 'https://cdn.npmmirror.com/binaries' },
wrtc: {
host: 'https://cdn.npmmirror.com/binaries',
remote_path: '{name}/v{version}'
},
fsevents: { host: 'https://cdn.npmmirror.com/binaries/fsevents' },
nodejieba: { host: 'https://cdn.npmmirror.com/binaries/nodejieba' },
canvas: {
host: 'https://cdn.npmmirror.com/binaries/canvas',
remote_path: 'v{version}'
},
'skia-canvas': { host: 'https://cdn.npmmirror.com/binaries/skia-canvas' },
'flow-bin': {
replaceHost: 'https://github.com/facebook/flow/releases/download/v',
host: 'https://cdn.npmmirror.com/binaries/flow/v'
},
'jpegtran-bin': {
replaceHost: [Array],
host: 'https://cdn.npmmirror.com/binaries/jpegtran-bin'
},
'cwebp-bin': {
replaceHost: [Array],
host: 'https://cdn.npmmirror.com/binaries/cwebp-bin'
},
'zopflipng-bin': {
replaceHost: [Array],
host: 'https://cdn.npmmirror.com/binaries/zopflipng-bin'
},
'optipng-bin': {
replaceHost: [Array],
host: 'https://cdn.npmmirror.com/binaries/optipng-bin'
},
mozjpeg: {
replaceHost: [Array],
host: 'https://cdn.npmmirror.com/binaries/mozjpeg-bin'
},
gifsicle: {
replaceHost: [Array],
host: 'https://cdn.npmmirror.com/binaries/gifsicle-bin'
},
'pngquant-bin': {
replaceHost: [Array],
host: 'https://cdn.npmmirror.com/binaries/pngquant-bin',
replaceHostMap: [Object]
},
'pngcrush-bin': {
replaceHost: [Array],
host: 'https://cdn.npmmirror.com/binaries/pngcrush-bin'
},
'jpeg-recompress-bin': {
replaceHost: [Array],
host: 'https://cdn.npmmirror.com/binaries/jpeg-recompress-bin'
},
'advpng-bin': {
replaceHost: [Array],
host: 'https://cdn.npmmirror.com/binaries/advpng-bin'
},
'pngout-bin': {
replaceHost: [Array],
host: 'https://cdn.npmmirror.com/binaries/pngout-bin'
},
'jpegoptim-bin': {
replaceHost: [Array],
host: 'https://cdn.npmmirror.com/binaries/jpegoptim-bin'
},
argon2: { host: 'https://cdn.npmmirror.com/binaries/argon2' },
'ali-zeromq': { host: 'https://cdn.npmmirror.com/binaries/ali-zeromq' },
'ali-usb_ctl': { host: 'https://cdn.npmmirror.com/binaries/ali-usb_ctl' },
'gdal-async': { host: 'https://cdn.npmmirror.com/binaries/node-gdal-async' },
'libpg-query': { host: 'https://cdn.npmmirror.com/binaries' }
},
forbiddenLicenses: null,
flatten: false,
proxy: undefined,
prune: false,
disableFallbackStore: false,
workspacesMap: Map(0) {},
enableWorkspace: false,
workspaceRoot: 'D:\\Trae_space\\ProjectFrameWork2025\\app\\frontend',
isWorkspaceRoot: true,
isWorkspacePackage: false,
offline: false,
strictSSL: true,
ignoreScripts: false,
foregroundScripts: false,
ignoreOptionalDependencies: false,
detail: false,
forceLinkLatest: false,
trace: false,
engineStrict: false,
registryOnly: false,
client: false,
autoFixVersion: [Function: autoFixVersion]
}

View File

@ -1,71 +0,0 @@
{
"name": "NewFrameWork2023-WEB",
"version": "1.2.0",
"scripts": {
"dev": "vite serve --mode development",
"build:prod": "vue-tsc --noEmit && vite build --mode production",
"build:mvn": "vite build --mode production",
"serve": "vite preview",
"lint": "eslint src/**/*.{ts,js,vue} --fix",
"prettier": "prettier --write ."
},
"dependencies": {
"@antv/g6": "^5.0.51",
"@antv/x6": "^3.1.4",
"@element-plus/icons-vue": "^2.0.10",
"@types/js-cookie": "^3.0.2",
"@vueuse/core": "^9.1.1",
"@wangeditor/editor": "^5.0.0",
"@wangeditor/editor-for-vue": "^5.1.10",
"axios": "^1.2.0",
"better-scroll": "^2.4.2",
"default-passive-events": "^2.0.0",
"echarts": "^5.2.2",
"element-plus": "^2.2.27",
"insert-css": "^2.0.0",
"js-base64": "^3.7.5",
"js-cookie": "^3.0.1",
"jsencrypt": "^3.3.2",
"nprogress": "^0.2.0",
"path-browserify": "^1.0.1",
"path-to-regexp": "^6.2.0",
"pinia": "^2.0.12",
"screenfull": "^6.0.0",
"sockjs-client": "^1.6.1",
"sortablejs": "^1.14.0",
"stompjs": "^2.3.3",
"vue": "^3.2.40",
"vue-i18n": "^9.1.9",
"vue-router": "^4.1.6",
"vuedraggable": "^2.24.3",
"xlsx": "^0.18.5"
},
"devDependencies": {
"@commitlint/cli": "^16.2.3",
"@commitlint/config-conventional": "^16.2.1",
"@types/node": "^16.11.7",
"@types/nprogress": "^0.2.0",
"@types/path-browserify": "^1.0.0",
"@typescript-eslint/eslint-plugin": "^5.19.0",
"@typescript-eslint/parser": "^5.19.0",
"@vitejs/plugin-vue": "^4.0.0",
"autoprefixer": "^10.4.13",
"eslint": "^8.14.0",
"eslint-config-prettier": "^8.5.0",
"eslint-plugin-prettier": "^4.0.0",
"eslint-plugin-vue": "^8.6.0",
"fast-glob": "^3.2.11",
"husky": "^7.0.4",
"postcss": "^8.4.20",
"prettier": "^2.6.2",
"sass": "^1.53.0",
"tailwindcss": "^3.2.4",
"typescript": "^4.7.4",
"vite": "^4.0.3",
"vite-plugin-svg-icons": "^2.0.1",
"vue-tsc": "^0.35.0"
},
"repository": "https://gitee.com/youlaiorg/vue3-element-admin.git",
"author": "有来开源组织",
"license": "MIT"
}

File diff suppressed because it is too large Load Diff

View File

@ -1,6 +0,0 @@
module.exports = {
plugins: {
tailwindcss: {},
autoprefixer: {},
},
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 78 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 63 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

View File

@ -1 +0,0 @@
这里放置前端项目的readme文件

View File

@ -1,11 +0,0 @@
<script setup lang="ts">
import { ElConfigProvider } from 'element-plus';
import { useAppStore } from '@/store/modules/app';
const appStore = useAppStore();
</script>
<template>
<el-config-provider :locale="appStore.locale" :size="appStore.size">
<router-view />
</el-config-provider>
</template>

View File

@ -1,45 +0,0 @@
import request from '@/utils/request';
//获取所有项目列表
export function trainAlgorithmsPage(queryParams:any){
return request({
url: '/train/list' ,
method: 'get',
params:queryParams
});
}
//新增项目
export function addAlgorithms(data:any){
return request({
url:'/train/submit' ,
method: 'Post',
data: data
});
}
export function trainPublish(data:any){
return request({
url:'/train/publish' ,
method: 'Post',
data: data
});
}
//单个删除项目
export function deleteAlgorithms (queryParams:any){
return request({
url:'/train/'+queryParams.id ,
method: 'delete'
// params: queryParams
});
}
export function trainStatus(taskId:any){
return request({
url: '/train/status/'+taskId ,
method: 'get'
});
}

View File

@ -1,36 +0,0 @@
import request from '@/utils/request';
import { AxiosPromise } from 'axios';
import { LoginData, TokenResult, VerifyCode } from './types';
/**
*
* @param data {LoginForm}
* @returns
*/
export function loginApi(data: LoginData): AxiosPromise<TokenResult> {
return request({
url: '/user/login',
method: 'post',
params: data
});
}
/**
*
*/
export function logoutApi() {
return request({
url: '/user/logout',
method: 'post'
});
}
/**
*
*/
export function getCaptcha(): AxiosPromise<VerifyCode> {
return request({
url: '/user/code?t=' + new Date().getTime().toString(),
method: 'get'
});
}

View File

@ -1,34 +0,0 @@
/**
*
*/
export interface LoginData {
username: string;
password: string;
code: string;
uuid: string;
/**
* Code
*/
//verifyCode: string;
/**
* Code服务端缓存key(UUID)
*/
// verifyCodeKey: string;
}
/**
* Token响应类型
*/
export interface TokenResult {
token: string;
refreshToken: string;
expires: number;
}
/**
*
*/
export interface VerifyCode {
verifyCodeImg: string;
verifyCodeKey: string;
}

View File

@ -1,60 +0,0 @@
import request from '@/utils/request';
//获取所有项目列表
export function searchAlgorithmsPage(queryParams:any){
return request({
url: '/algorithms/search' ,
method: 'get',
params:queryParams
});
}
//新增项目
export function addAlgorithms(data:any){
return request({
url:'/algorithms' ,
method: 'Post',
data: data
});
}
//更新项目信息
export function updateAlgorithms (queryParams:any){
return request({
url:'/algorithms' ,
method: 'PUT',
data: queryParams
});
}
//单个删除项目
export function deleteAlgorithms (queryParams:any){
return request({
url:'/algorithms/'+queryParams.id ,
method: 'delete'
// params: queryParams
});
}
//多选删除项目
export function deleteBatchAlgorithms (queryParams:any){
return request({
url:'/algorithms',
method: 'delete',
data: queryParams
});
}
export function algorithmsType(type:any){
return request({
url: '/algorithms/type/'+type ,
method: 'get'
});
}

View File

@ -1,39 +0,0 @@
import request from '@/utils/request';
//获取所有项目列表
export function searchAlgorithmsModelPage(queryParams:any){
return request({
url: '/algorithm-models/search' ,
method: 'get',
params:queryParams
});
}
// //激活
export function algorithmModels(params:any){
return request({
url:'/algorithm-models/activate' ,
method: 'Post',
params: params
});
}
//单个删除项目
export function deleteAlgorithmModels (queryParams:any){
return request({
url:'/algorithm-models/'+queryParams.id ,
method: 'delete'
// params: queryParams
});
}
//多选删除项目
export function deleteBatchAlgorithmModels (queryParams:any){
return request({
url:'/algorithm-models',
method: 'delete',
data: queryParams
});
}

View File

@ -1,50 +0,0 @@
import request from '@/utils/request';
//获取所有项目列表
export function searchCriticalDataPage(queryParams:any){
return request({
url: '/critical-data/by-device-type' ,
method: 'get',
params:queryParams
});
}
//新增项目
export function addCriticalData(data:any){
return request({
url:'/critical-data' ,
method: 'Post',
data: data
});
}
//更新项目信息
export function updateCriticalData (queryParams:any){
return request({
url:'/critical-data' ,
method: 'PUT',
data: queryParams
});
}
//单个删除项目
export function deleteCriticalData (queryParams:any){
return request({
url:'/critical-data/'+queryParams.id ,
method: 'delete'
// params: queryParams
});
}
//多选删除项目
export function deleteBatchCriticalData (queryParams:any){
return request({
url:'/critical-data',
method: 'delete',
data: queryParams
});
}

View File

@ -1,50 +0,0 @@
import request from '@/utils/request';
//获取所有项目列表
export function searchDevicesPage(queryParams:any){
return request({
url: '/devices/search' ,
method: 'get',
params:queryParams
});
}
//新增项目
export function addDevices(data:any){
return request({
url:'/devices' ,
method: 'Post',
data: data
});
}
//更新项目信息
export function updateDevices (queryParams:any){
return request({
url:'/devices' ,
method: 'PUT',
data: queryParams
});
}
//单个删除项目
export function deleteDevices (queryParams:any){
return request({
url:'/devices/'+queryParams.id ,
method: 'delete'
// params: queryParams
});
}
//多选删除项目
export function deleteBatchDevices (queryParams:any){
return request({
url:'/devices',
method: 'delete',
data: queryParams
});
}

View File

@ -1,61 +0,0 @@
import request from '@/utils/request';
//获取所有项目列表
export function searchMaterialsPage(queryParams:any){
return request({
url: '/materials/search' ,
method: 'get',
params:queryParams
});
}
//拓扑图新增或更新项目
export function saveOrUpdate(data:any){
return request({
url:'/materials/saveOrUpdate' ,
method: 'Post',
data: data
});
}
//新增项目
export function addMaterials(data:any){
return request({
url:'/materials' ,
method: 'Post',
data: data
});
}
//更新项目信息
export function updateMaterials (queryParams:any){
return request({
url:'/materials' ,
method: 'PUT',
data: queryParams
});
}
//单个删除项目
export function deleteMaterials (queryParams:any){
return request({
url:'/materials/'+queryParams.id ,
method: 'delete'
// params: queryParams
});
}
//多选删除项目
export function deleteBatchMaterials (queryParams:any){
return request({
url:'/materials',
method: 'delete',
data: queryParams
});
}

View File

@ -1,50 +0,0 @@
import request from '@/utils/request';
// //获取所有项目列表
export function searchEventsByScenarioId(queryParams:any){
return request({
url: '/events/by-scenario' ,
method: 'get',
params:queryParams
});
}
//批量新增或修改事件
export function eventsBatchSave(data:any){
return request({
url:'/events/batchSave' ,
method: 'Post',
data: data
});
}
// //更新项目信息
// export function updateScenarios(queryParams:any){
// return request({
// url:'/events' ,
// method: 'PUT',
// data: queryParams
// });
// }
// //单个删除项目
// export function deleteScenarios(queryParams:any){
// return request({
// url:'/events/'+queryParams.id ,
// method: 'delete'
// // params: queryParams
// });
// }
// //多选删除项目
// export function deleteBatchScenarios(queryParams:any){
// return request({
// url:'/events',
// method: 'delete',
// data: queryParams
// });
// }

View File

@ -1,134 +0,0 @@
import request from '@/utils/request';
//获取所有项目列表
export function searchProjectsLsit(queryParams:any){
return request({
url: '/projects/search' ,
method: 'get',
params:queryParams
});
}
export function projectsById(queryParams:any){
return request({
url: '/projects/'+ queryParams.projectId ,
method: 'get'
});
}
//新增项目
export function addProjects(data:any){
return request({
url:'/projects' ,
method: 'Post',
data: data
});
}
//更新项目信息
export function updateProjects (queryParams:any){
return request({
url:'/projects' ,
method: 'PUT',
data: queryParams
});
}
//单个删除项目
export function deleteProjects (queryParams:any){
return request({
url:'/projects/'+queryParams.id ,
method: 'delete'
// params: queryParams
});
}
//多选删除项目
export function deleteBatchProjects (queryParams:any){
return request({
url:'/projects',
method: 'delete',
data: queryParams
});
}
//单个删除项目
export function visibilityProjects (queryParams:any){
return request({
url:'/projects/'+queryParams.projectId+'/visibility' ,
method: 'put',
data: queryParams
});
}
export function topologyDevicesLsit(queryParams:any){
return request({
url: `/projects/${queryParams.id}/topology/devices` ,
method: 'get',
params:queryParams
});
}
//初始化项目模拟数据
export function simRun(data:any){
return request({
url:'/sim/run' ,
method: 'Post',
data:data
});
}
//初始化项目模拟数据
export function simulationInit(queryParams:any){
return request({
url:'/projects/simulation/init' ,
method: 'Post',
params:queryParams
});
}
// 运行项目模拟
export function simulationRun(projectId:string,scenarioId:string, data:any){
return request({
url:'/projects/simulation/run?projectId='+projectId+'&scenarioId='+scenarioId ,
method: 'Post',
data: data
});
}
export function exportAllExports(queryParams: any) {
return request({
url: '/projects/exportAllExports',
method: 'get',
params: queryParams,
responseType: 'arraybuffer'
});
}
export function exportProject(queryParams: any) {
return request({
url: '/projects/'+queryParams.projectId+'/exportProject',
method: 'get',
params: queryParams,
responseType: 'arraybuffer'
});
}
//导入项目
export function importProject(data:any){
return request({
url:'/projects/importProject' ,
method: 'Post',
data: data
});
}

View File

@ -1,84 +0,0 @@
import request from '@/utils/request';
//获取所有项目列表
export function searchScenariosLsit(queryParams:any){
return request({
url: '/scenarios/by-project' ,
method: 'get',
params:queryParams
});
}
//新增项目
export function addScenarios(data:any){
return request({
url:'/scenarios/createAndReturn' ,
method: 'Post',
data: data
});
}
//更新项目信息
export function updateScenarios(queryParams:any){
return request({
url:'/scenarios' ,
method: 'PUT',
data: queryParams
});
}
//单个删除项目
export function deleteScenarios(queryParams:any){
return request({
url:'/scenarios/'+queryParams.id ,
method: 'delete'
// params: queryParams
});
}
//多选删除项目
export function deleteBatchScenarios(queryParams:any){
return request({
url:'/scenarios',
method: 'delete',
data: queryParams
});
}
//获取所有项目列表
export function getActiveAlgorithms(){
return request({
url: '/algorithms/getActiveAlgorithms' ,
method: 'get'
});
}
//获取所有项目列表
export function getByScenario(queryParams:any){
return request({
url: '/scenario-results/by-scenario' ,
method: 'get',
params: queryParams
});
}
// 导出全部结果
export function exportAllExports(scenarioId:any,deviceId:any){
let url = '/scenario-results/export/by-scenario?scenarioId='+scenarioId
if(deviceId != null){
url = '/scenario-results/export/by-scenario?scenarioId='+scenarioId + '&deviceId='+deviceId
}
return request({
url: url ,
method: 'get',
responseType: 'arraybuffer'
});
}

View File

@ -1,139 +0,0 @@
import request from '@/utils/request';
import { AxiosPromise } from 'axios';
import { DeptForm, DeptQuery, Dept } from './types';
//获取组织架构
export function getTreelist(queryParams:any) {
return request({
url: '/system/organization/getOrgTree',
method: 'POST',
params: queryParams
});
}
//新增企业或部门
export function addTreelist(queryParams:any) {
return request({
url: '/system/organization/addOrg',
method: 'POST',
data: queryParams
});
}
// 修改企业部门
export function updataTreelist(queryParams:any) {
return request({
url: '/system/organization/updateById',
method: 'POST',
data: queryParams
});
}
//删除企业
export function delTreelist(queryParams:any) {
return request({
url: '/system/organization/deleteById',
method: 'POST',
params: queryParams
});
}
//获取部门信息
export function gettableData(queryParams:any) {
return request({
url: '/system/organization/getOrganizationById',
method: 'POST',
params: queryParams
});
}
//部门是否有效
export function deptIsVaild(queryParams:any) {
return request({
url: '/system/organization/setIsValid',
method: 'POST',
params: queryParams
});
}
//修改部门信息
export function reviseDepartment(queryParams:any) {
return request({
url: '/system/organization/updateById',
method: 'POST',
data: queryParams
});
}
/**
*
*
* @param queryParams
*/
export function listDepartments(queryParams?: DeptQuery): AxiosPromise<Dept[]> {
return request({
url: '/api/v1/dept',
method: 'get',
params: queryParams
});
}
/**
*
*/
export function listDeptOptions(): AxiosPromise<OptionType[]> {
return request({
url: '/api/v1/dept/options',
method: 'get'
});
}
/**
*
*
* @param id
*/
export function getDeptForm(id: string): AxiosPromise<DeptForm> {
return request({
url: '/api/v1/dept/' + id + '/form',
method: 'get'
});
}
/**
*
*
* @param data
*/
export function addDept(data: DeptForm) {
return request({
url: '/api/v1/dept',
method: 'post',
data: data
});
}
/**
*
*
* @param id
* @param data
*/
export function updateDept(id: string, data: DeptForm) {
return request({
url: '/api/v1/dept/' + id,
method: 'put',
data: data
});
}
/**
*
*
* @param ids
*/
export function deleteDept(ids: string) {
return request({
url: '/api/v1/dept/' + ids,
method: 'delete'
});
}

View File

@ -1,34 +0,0 @@
/**
*
*/
export interface DeptQuery {
keywords: string | undefined;
status: number | undefined;
}
/**
*
*/
export interface Dept {
id: string;
name: string;
parentId: string;
treePath: string;
sort: number;
status: number;
leader?: string;
mobile?: string;
email?: string;
children: Dept[];
}
/**
*
*/
export interface DeptForm {
id?: string;
parentId: string;
name: string;
sort: number;
status: number;
}

View File

@ -1,242 +0,0 @@
import request from '@/utils/request';
import { AxiosPromise } from 'axios';
import {
DictQuery,
DictPageResult,
DictTypeForm,
DictItemQuery,
DictItemPageResult,
DictItemForm
} from './types';
// 查询字典
export function getTreelist(params:any) {
return request({
url: '/system/dictionary/dictList',
method: 'get',
params: params
});
}
// 新增字典
export function addDict(params:any) {
return request({
url: '/system/dictionary/addDict',
method: 'post',
data: params
});
}
// 修改字典
export function updateDict(params:any) {
return request({
url: '/system/dictionary/updateDict',
method: 'post',
data: params
});
}
// 删除字典
export function deleteById(params:any) {
return request({
url: '/system/dictionary/deleteById',
method: 'post',
params: params
});
}
// 字典排序
export function changeDictOrder(params:any) {
return request({
url: '/system/dictionary/changeDictOrder',
method: 'post',
params: params
});
}
// 查询字典项
export function getDictItemById(params:any) {
return request({
url: '/system/dictionaryItems/page',
method: 'get',
params: params
});
}
// 新增字典项
export function addDictionaryItem(params:any) {
return request({
url: '/system/dictionaryItems/addDictionaryItem',
method: 'post',
data: params
});
}
// 修改字典项
export function updateDictionaryItem(params:any) {
return request({
url: '/system/dictionaryItems/updateDictionaryItem',
method: 'post',
data: params
});
}
// 删除字典项
export function deleteDictItemById(params:any) {
return request({
url: '/system/dictionaryItems/deleteDictItemById',
method: 'post',
params: params
});
}
// 批量删除字典项
export function deleteDictItemByIds(params:any) {
return request({
url: '/system/dictionaryItems/deleteDictItemByIds',
method: 'post',
params: params
});
}
// 字典项排序
export function changeItemOrder(params:any) {
return request({
url: '/system/dictionaryItems/changeItemOrder',
method: 'post',
params: params
});
}
/**
*
*
* @param queryParams
*/
export function listDictTypePages(
queryParams: DictQuery
): AxiosPromise<DictPageResult> {
return request({
url: '/api/v1/dict/types/pages',
method: 'get',
params: queryParams
});
}
/**
*
*
* @param id
*/
export function getDictTypeForm(id: number): AxiosPromise<DictTypeForm> {
return request({
url: '/api/v1/dict/types/' + id + '/form',
method: 'get'
});
}
/**
*
*
* @param data
*/
export function addDictType(data: DictTypeForm) {
return request({
url: '/api/v1/dict/types',
method: 'post',
data: data
});
}
/**
*
*
* @param id
* @param data
*/
export function updateDictType(id: number, data: DictTypeForm) {
return request({
url: '/api/v1/dict/types/' + id,
method: 'put',
data: data
});
}
/**
*
*/
export function deleteDictTypes(ids: string) {
return request({
url: '/api/v1/dict/types/' + ids,
method: 'delete'
});
}
/**
*
*
* @param typeCode
*/
export function getDictionaries(typeCode: string): AxiosPromise<OptionType[]> {
return request({
url: '/api/v1/dict/types/' + typeCode + '/items',
method: 'get'
});
}
/**
*
*/
export function listDictItemPages(
queryParams: DictItemQuery
): AxiosPromise<DictItemPageResult> {
return request({
url: '/api/v1/dict/items/pages',
method: 'get',
params: queryParams
});
}
/**
*
*
* @param id
*/
export function getDictItemData(id: number): AxiosPromise<DictItemForm> {
return request({
url: '/api/v1/dict/items/' + id + '/form',
method: 'get'
});
}
/**
*
*
* @param data
*/
export function saveDictItem(data: DictItemForm) {
return request({
url: '/api/v1/dict/items',
method: 'post',
data: data
});
}
/**
*
*
* @param id
* @param data
*/
export function updateDictItem(id: number, data: DictItemForm) {
return request({
url: '/api/v1/dict/items/' + id,
method: 'put',
data: data
});
}
/**
*
*
* @param ids ID(,)
*/
export function deleteDictItems(ids: string) {
return request({
url: '/api/v1/dict/items/' + ids,
method: 'delete'
});
}

View File

@ -1,84 +0,0 @@
/**
*
*/
export interface DictQuery extends PageQuery {
/**
*
*/
name?: string;
}
/**
*
*/
export interface Dict {
id: number;
code: string;
name: string;
status: number;
remark: string;
}
/**
*
*/
export type DictPageResult = PageResult<Dict[]>;
/**
*
*/
export interface DictTypeForm {
id: number | undefined;
name: string;
code: string;
status: number;
remark: string;
}
/**
*
*/
export interface DictItemQuery extends PageQuery {
/**
*
*/
name?: string;
/**
*
*/
typeCode?: string;
}
/**
*
*/
export interface DictItem {
id: number;
name: string;
value: string;
typeCode: string;
sort: number;
status: number;
defaulted: number;
remark?: string;
}
/**
*
*/
export type DictItemPageResult = PageResult<DictItem[]>;
/**
*
*/
export interface DictItemForm {
id?: number;
typeCode?: string;
typeName?: string;
name: string;
code: string;
value: string;
status: number;
sort: number;
remark: string;
}

View File

@ -1,34 +0,0 @@
import request from '@/utils/request';
import { AxiosPromise } from 'axios';
import { FileInfo } from './types';
/**
*
*
* @param file
*/
export function uploadFileApi(file: File): AxiosPromise<FileInfo> {
const formData = new FormData();
formData.append('file', file);
return request({
url: '/api/v1/files',
method: 'post',
data: formData,
headers: {
'Content-Type': 'multipart/form-data'
}
});
}
/**
*
*
* @param filePath
*/
export function deleteFileApi(filePath?: string) {
return request({
url: '/api/v1/files',
method: 'delete',
params: { filePath: filePath }
});
}

View File

@ -1,7 +0,0 @@
/**
* API类型声明
*/
export interface FileInfo {
name: string;
url: string;
}

View File

@ -1,159 +0,0 @@
import request from '@/utils/request';
import { AxiosPromise } from 'axios';
import { MenuQuery, Menu, Resource, MenuForm } from './types';
//获取菜单表格
export function getdata(queryParams:any) {
return request({
url: '/system/menu/getMenuButtonTree',
method: 'post',
params: queryParams
});
}
//新增目录
export function addmenu(queryParams:any) {
return request({
url: '/system/menu/addMenu',
method: 'post',
data: queryParams
});
}
//修改目录
export function editmenu(queryParams:any) {
return request({
url: '/system/menu/updateById',
method: 'post',
data: queryParams
});
}
//删除
export function deltmenu(queryParams:any) {
return request({
url: '/system/menu/deleteById',
method: 'post',
params: queryParams
});
}
//排序
export function moveOrderno(params:any) {
return request({
url: '/system/menu/changeMenuOrder',
method: 'post',
params: params
});
}
//上传图标之前获取ID
//上传单个图标
export function uploadIcon (data:any) {
return request({
headers: {
'Content-Type': 'multipart/form-data'
},
url: '/system/menu/uploadIcon',
method: 'POST',
data
});
}
//删除单个图标
export function moveIcon(params:any) {
return request({
url: '/system/menu/deleteIcon',
method: 'post',
params: params
});
}
/**
*
*/
export function listRoutes() {
return request({
url: 'system/menu/treeRoutes',
method: 'get',
});
}
/**
*
*
* @param queryParams
*/
export function listMenus(queryParams: MenuQuery): AxiosPromise<Menu[]> {
return request({
url: '/api/v1/menus',
method: 'get',
params: queryParams
});
}
/**
*
*/
export function listMenuOptions(): AxiosPromise<OptionType[]> {
return request({
url: '/api/v1/menus/options',
method: 'get'
});
}
/**
* (+)
*/
export function listResources(): AxiosPromise<Resource[]> {
return request({
url: '/api/v1/menus/resources',
method: 'get'
});
}
/**
*
* @param id
*/
export function getMenuDetail(id: string): AxiosPromise<MenuForm> {
return request({
url: '/api/v1/menus/' + id,
method: 'get'
});
}
/**
*
*
* @param data
*/
export function addMenu(data: MenuForm) {
return request({
url: '/api/v1/menus',
method: 'post',
data: data
});
}
/**
*
*
* @param id
* @param data
*/
export function updateMenu(id: string, data: MenuForm) {
return request({
url: '/api/v1/menus/' + id,
method: 'put',
data: data
});
}
/**
*
*
* @param ids ID(,)
*/
export function deleteMenus(ids: string) {
return request({
url: '/api/v1/menus/' + ids,
method: 'delete'
});
}

View File

@ -1,105 +0,0 @@
/**
*
*/
export interface MenuQuery {
keywords?: string;
}
/**
*
*/
export interface Menu {
id?: number;
parentId: number;
type?: string | 'CATEGORY' | 'MENU' | 'EXTLINK';
createTime: string;
updateTime: string;
name: string;
icon: string;
component: string;
sort: number;
visible: number;
children: Menu[];
}
/**
*
*/
export interface MenuForm {
/**
* ID
*/
id?: string;
/**
* ID
*/
parentId: string;
/**
*
*/
name: string;
/**
* (1:;0:;)
*/
visible: number;
icon?: string;
/**
*
*/
sort: number;
/**
*
*/
component?: string;
/**
*
*/
path: string;
/**
*
*/
redirect?: string;
/**
*
*/
type: string;
/**
*
*/
perm?: string;
}
/**
* (+)
*/
export interface Resource {
/**
*
*/
value: string;
/**
*
*/
label: string;
/**
*
*/
children: Resource[];
}
/**
*
*/
export interface Permission {
/**
*
*/
value: string;
/**
*
*/
label: string;
}

View File

@ -1,28 +0,0 @@
import request from '@/utils/request';
export function getMessageList(params:any) {
return request({
url: '/system/message/getMessageList',
method: 'get',
params
});
}
export function setMessageStatus(data:any) {
return request({
url: '/system/message/setMessageStatus?id=' + data,
method: 'post'
});
}
export function setAllMessageStatus() {
return request({
url: '/system/message/setAllMessageStatus',
method: 'post'
});
}
export function deleteMessageById(data:any) {
return request({
url: '/system/message/deleteMessageById?id=' + data,
method: 'post',
data
});
}

View File

@ -1,18 +0,0 @@
import request from '@/utils/request';
//获取所有角色
export function getLogList(params:any){
return request({
url: '/system/log/getLogList' ,
method: 'post',
params: params
});
}
export function exportExcel(queryParams: any) {
return request({
url: '/system/log/exportExcel',
method: 'get',
params: queryParams,
responseType: 'arraybuffer'
});
}

View File

@ -1,196 +0,0 @@
import request from '@/utils/request';
import { AxiosPromise } from 'axios';
import { RoleQuery, RoleForm } from './types';
//获取所有角色
export function listRolePages(queryParams:any){
return request({
url: '/system/role/list' ,
method: 'post',
params:queryParams
});
}
//角色是否有效
export function isvaildTo(queryParams:any){
return request({
url: '/system/role/setIsvaild' ,
method: 'post',
params:queryParams
});
}
//新增角色
export function addDept(queryParams:any){
return request({
url:'/system/role/addRole' ,
method: 'post',
data: queryParams
});
}
//更新角色信息
export function renewDept (queryParams:any){
return request({
url:'/system/role/updateById' ,
method: 'post',
data: queryParams
});
}
//单个删除角色
export function deleDept (queryParams:any){
return request({
url:'/system/role/deleteById' ,
method: 'post',
params: queryParams
});
}
//获取分配权限
export function assignmentPer (queryParams:any){
return request({
url:'/system/menu/permissionAssignment' ,
method: 'post',
params: queryParams
});
}
//发出分配权限
export function setMenuById (queryParams:any){
return request({
url:'/system/role/setMenuById' ,
method: 'post',
params: queryParams
});
}
////获取组织范围
export function setOrgscope (queryParams:any){
return request({
url:'/system/organization/getOrgScopeTree' ,
method: 'post',
params: queryParams
});
}
//修改组织范围
export function postOrgscope (queryParams:any){
return request({
url:'/system/role/setOrgscope' ,
method: 'post',
params: queryParams
});
}
//删除角色
// export function delDept(queryParams:any){
// return request({
// url:'/system/role/addRole' ,
// method: 'post',
// data: queryParams
// });
// }
/**
*
*
* @param queryParam
*/
// export function listRolePages(
// queryParams?: RoleQuery
// ): AxiosPromise<RolePageResult> {
// return request({
// url: '/system/role/list',
// method: 'post',
// params: queryParams
// });
// }
/**
*
*
* @param queryParams
*/
export function listRoleOptions(
queryParams?: RoleQuery
): AxiosPromise<OptionType[]> {
return request({
url: '/api/v1/roles/options',
method: 'get',
params: queryParams
});
}
/**
* ID集合
*
* @param queryParams
*/
export function getRoleMenuIds(roleId: string): AxiosPromise<number[]> {
return request({
url: '/api/v1/roles/' + roleId + '/menuIds',
method: 'get'
});
}
/**
*
*
* @param queryParams
*/
export function updateRoleMenus(
roleId: string,
data: number[]
): AxiosPromise<any> {
return request({
url: '/api/v1/roles/' + roleId + '/menus',
method: 'put',
data: data
});
}
/**
*
*
* @param id
*/
export function getRoleDetail(id: number): AxiosPromise<RoleForm> {
return request({
url: '/api/v1/roles/' + id,
method: 'get'
});
}
/**
*
*
* @param data
*/
export function addRole(data: RoleForm) {
return request({
url: '/api/v1/roles',
method: 'post',
data: data
});
}
/**
*
*
* @param id
* @param data
*/
export function updateRole(id: number, data: RoleForm) {
return request({
url: '/api/v1/roles/' + id,
method: 'put',
data: data
});
}
/**
* (,)
*
* @param ids
*/
export function deleteRoles(ids: string) {
return request({
url: '/api/v1/roles/' + ids,
method: 'delete'
});
}

View File

@ -1,40 +0,0 @@
/**
*
*/
export interface RoleQuery extends PageQuery {
keywords?: string;
}
/**
*
*/
export interface Role {
id: string;
name: string;
code: string;
sort: number;
status: number;
deleted: number;
menuIds?: any;
permissionIds?: any;
}
/**
*
*/
export type RolePageResult = PageResult<Role[]>;
/**
*
*/
export interface RoleForm {
id?: number;
name: string;
code: string;
sort: number;
status: number;
/**
*
*/
dataScope: number;
}

View File

@ -1,51 +0,0 @@
import request from '@/utils/request';
//获取表格内容
export function getTaskList(params: any) {
return request({
url: '/system/quartzjob/getQuartzJobList',
method: 'get',
params: params
});
}
//新增表格内容
export function addTaskList(params: any) {
return request({
url: '/system/quartzjob/addQuartzJob',
method: 'post',
data: params
});
}
//删除定时任务
export function delTaskList(params: any) {
return request({
url: '/system/quartzjob/deleteQuartzJob',
method: 'post',
params: params
});
}
//修改定时任务
export function updataTaskList(params: any) {
return request({
url: '/system/quartzjob/updateQuartzJob',
method: 'post',
data: params
});
}
//定时任务是否有效
export function setTaskList(params: any) {
return request({
url: '/system/quartzjob/setQuartzStatus',
method: 'post',
params: params
});
}
//拖拽
export function changeItemOrder(params: any) {
return request({
url: '/system/quartzjob/changeDictOrder',
method: 'post',
params: params
});
}

View File

@ -1,238 +0,0 @@
import request from '@/utils/request';
import { AxiosPromise } from 'axios';
import { UserForm, UserInfo, UserPageResult, UserQuery } from './types';
//获取企业树 数据
export function getTreelist(queryParams:any) {
return request({
url: '/system/organization/getOrgTree',
method: 'POST',
params: queryParams
});
}
//获取用户列表信息
export function gettableData(queryParams:any) {
return request({
url: '/system/user/queryUsers',
method: 'get',
params: queryParams
});
}
//用户-禁用,启用
export function DataStatus (queryParams:any) {
return request({
url: '/system/user/setStatus',
method: 'POST',
params: queryParams
});
}
//删除用户
export function deltableData (queryParams:any) {
return request({
url: '/system/user/deleteById',
method: 'POST',
params: queryParams
});
}
//批量删除
export function delChoise (queryParams:any) {
return request({
url: '/system/user/deleteUserByIds',
method: 'POST',
params: queryParams
});
}
//获取角色
export function getRole (queryParams:any) {
return request({
url: '/system/role/list',
method: 'POST',
params: queryParams
});
}
//新建用户
export function addUsers (queryParams:any,roleids:any) {
return request({
url: '/system/user/addUser?'+'roleids='+roleids,
method: 'POST',
data: queryParams,
});
}
//更改用户
export function updataUser (queryParams:any,roleids:any) {
return request({
url: '/system/user/updateUser?'+'roleids='+roleids,
method: 'POST',
data: queryParams,
});
}
//更改用户
export function updatePersonalInfo (queryParams:any) {
return request({
url: '/user/updatePersonalInfo',
method: 'POST',
data: queryParams,
});
}
//更改头像
export function updateAvatar (data:any) {
return request({
headers: {
'Content-Type': 'multipart/form-data'
},
url: '/system/user/updateAvatar',
method: 'POST',
data
});
}
//重置密码
export function setpass (queryParams:any) {
return request({
url: '/system/user/resetPassword',
method: 'POST',
params: queryParams,
});
}
export function updatePassword (queryParams:any) {
return request({
url: '/user/updatePassword',
method: 'GET',
params: queryParams,
});
}
/**
*
*/
export function getUserInfo(): AxiosPromise<UserInfo> {
return request({
url: '/user/me',
method: 'get'
});
}
/**
*
*
* @param queryParams
*/
export function listUserPages(
queryParams: UserQuery
): AxiosPromise<UserPageResult> {
return request({
url: '/api/v1/users/pages',
method: 'get',
params: queryParams
});
}
/**
*
*
* @param userId
*/
export function getUserForm(userId: number): AxiosPromise<UserForm> {
return request({
url: '/api/v1/users/' + userId + '/form',
method: 'get'
});
}
/**
*
*
* @param data
*/
export function addUser(data: any) {
return request({
url: '/api/v1/users',
method: 'post',
data: data
});
}
/**
*
*
* @param id
* @param data
*/
export function updateUser(id: number, data: UserForm) {
return request({
url: '/api/v1/users/' + id,
method: 'put',
data: data
});
}
/**
*
*
* @param id
* @param status
*/
export function updateUserStatus(id: number, status: number) {
return request({
url: '/api/v1/users/' + id + '/status',
method: 'patch',
params: { status: status }
});
}
/**
*
*
* @param id
* @param password
*/
export function updateUserPassword(id: number, password: string) {
return request({
url: '/api/v1/users/' + id + '/password',
method: 'patch',
params: { password: password }
});
}
/**
*
*
* @param ids
*/
export function deleteUsers(ids: string) {
return request({
url: '/api/v1/users/' + ids,
method: 'delete'
});
}
/**
*
*
* @returns
*/
export function downloadTemplate() {
return request({
url: '/api/v1/users/template',
method: 'get',
responseType: 'arraybuffer'
});
}
/**
*
*
* @param queryParams
* @returns
*/
export function exportUser(queryParams: UserQuery) {
return request({
url: '/api/v1/users/_export',
method: 'get',
params: queryParams,
responseType: 'arraybuffer'
});
}

View File

@ -1,67 +0,0 @@
/**
*
*/
export interface UserInfo {
permissions: string[];
userInfo: any;
nickname: string;
avatar: string;
roles: string[];
perms: string[];
}
/**
*
*/
export interface UserQuery extends PageQuery {
keywords: string;
status: number;
deptId: number;
}
/**
*
*/
export interface UserType {
id: string;
username: string;
nickname: string;
mobile: string;
gender: number;
avatar: string;
email: string;
status: number;
deptName: string;
roleNames: string;
createTime: string;
}
/**
*
*/
export type UserPageResult = PageResult<UserType[]>;
/**
*
*/
export interface UserForm {
id: number | undefined;
deptId: number;
username: string;
nickname: string;
password: string;
mobile: string;
email: string;
gender: number;
status: number;
remark: string;
roleIds: number[];
}
/**
*
*/
export interface UserImportData {
deptId: number;
roleIds: number[];
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 160 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 96 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 243 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 189 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 160 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 253 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 528 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 491 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 642 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 366 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 564 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 537 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 527 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 677 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 655 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 469 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 462 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 385 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 372 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 289 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 317 B

Some files were not shown because too many files have changed in this diff Show More