mirror of
https://github.com/insistence/RuoYi-Vue3-FastAPI.git
synced 2026-10-14 21:07:36 +00:00
* feat: 支持 v2 插件、原生扩展与签名发布 * fix: 修复测试 * feat: 增强宿主 SDK、运行观测与制品维护能力 * feat: 增强文件传输、配置观测与本地开发能力 * feat: 支持 SSE 实时事件流并完善开发脚手架 * feat: 完善长连接鉴权复核与关闭回收 * feat: 增强生命周期与任务关闭可靠性 * feat: 收紧健康检查契约并补齐前端与真实网络验收 * feat: 增加SDK溯源与离线更新工具并验证跨版本兼容 * feat: 增加持久化业务示例与受控 Python 交付 * feat: 增加统一运行诊断与多worker状态观测 * feat: 增加固定目标发布等待与自动验收 * fix: 修复多环境插件部署前缀与代理配置不一致 * fix: 修复测试
61 lines
2.1 KiB
HTML
61 lines
2.1 KiB
HTML
<!doctype html>
|
|
<html lang="zh-CN">
|
|
<head>
|
|
<meta charset="utf-8" />
|
|
<title>插件网络验收夹具</title>
|
|
</head>
|
|
<body>
|
|
<p id="ready">等待宿主</p>
|
|
<button id="echo">回显</button><output id="echo-result"></output>
|
|
<button id="start">接收事件</button><button id="stop">停止事件</button>
|
|
<button id="reset">重置验收游标</button>
|
|
<output id="stream-state"></output>
|
|
<ol id="events"></ol>
|
|
<script type="module">
|
|
import { createPluginClient } from "./assets/bridge.js";
|
|
const client = createPluginClient({ pluginId: "browser_test" });
|
|
const element = (id) => document.getElementById(id);
|
|
let controller;
|
|
let cursor = "";
|
|
await client.ready;
|
|
element("ready").textContent = "宿主已连接";
|
|
element("echo").onclick = async () => {
|
|
const value = await client.request({
|
|
path: "echo",
|
|
method: "POST",
|
|
data: { message: "network" },
|
|
});
|
|
element("echo-result").textContent = value.message;
|
|
};
|
|
element("start").onclick = async () => {
|
|
controller = new AbortController();
|
|
element("events").replaceChildren();
|
|
element("stream-state").textContent = "连接中";
|
|
try {
|
|
await client.stream(
|
|
{ path: "events", params: { count: 20 }, lastEventId: cursor },
|
|
{
|
|
signal: controller.signal,
|
|
onEvent(event) {
|
|
cursor = event.id;
|
|
const item = document.createElement("li");
|
|
item.textContent = event.id;
|
|
element("events").append(item);
|
|
element("stream-state").textContent = "接收中";
|
|
},
|
|
},
|
|
);
|
|
element("stream-state").textContent = "完成";
|
|
} catch (error) {
|
|
element("stream-state").textContent = error.message;
|
|
}
|
|
};
|
|
element("stop").onclick = () => controller?.abort();
|
|
element("reset").onclick = () => {
|
|
cursor = "";
|
|
element("events").replaceChildren();
|
|
};
|
|
</script>
|
|
</body>
|
|
</html>
|