Files
RuoYi-Vue3-FastAPI/ruoyi-fastapi-backend/plugins/examples/python/task_demo/web/dev/host.js
T
insistence 4bd83bc7cd feat: 支持 v2 插件、独立前端和签名制品发布 (#130)
* feat: 支持 v2 插件、原生扩展与签名发布

* fix: 修复测试

* feat: 增强宿主 SDK、运行观测与制品维护能力

* feat: 增强文件传输、配置观测与本地开发能力

* feat: 支持 SSE 实时事件流并完善开发脚手架

* feat: 完善长连接鉴权复核与关闭回收

* feat: 增强生命周期与任务关闭可靠性

* feat: 收紧健康检查契约并补齐前端与真实网络验收

* feat: 增加SDK溯源与离线更新工具并验证跨版本兼容

* feat: 增加持久化业务示例与受控 Python 交付

* feat: 增加统一运行诊断与多worker状态观测

* feat: 增加固定目标发布等待与自动验收

* fix: 修复多环境插件部署前缀与代理配置不一致

* fix: 修复测试
2026-10-09 23:49:45 +08:00

53 lines
1.7 KiB
JavaScript

import { createPluginHostBridge, validatePluginSession } from '@ruoyi/plugin-bridge'
import { createMockTaskApi } from './mockRequest.js'
const element = (id) => document.getElementById(id)
const frame = element('plugin-frame')
const mock = createMockTaskApi({
getDelay: () => element('delay').value,
shouldFail: () => element('failure').checked,
getCanWrite: () => !element('read-only').checked,
})
const bridge = createPluginHostBridge({
pluginId: 'task_demo',
session: validatePluginSession(
{
pluginId: 'task_demo',
bridgeVersion: 1,
uiBase: '/apps/task_demo/ui/',
apiBase: '/apps/task_demo/api/',
csrfToken: 'local-mock-session-no-credentials',
expiresIn: 3600,
},
'task_demo'
),
getTarget: () => frame.contentWindow,
request: mock.request,
getContext: () => ({
theme: { mode: element('theme').value },
language: 'zh-CN',
timeZone: 'Asia/Shanghai',
route: '/',
}),
onReady: () => {
element('status').textContent = '模拟连接已建立'
},
})
frame.src = '/index.html'
element('theme').addEventListener('change', () => bridge.updatePreferences())
element('read-only').addEventListener('change', () => bridge.refresh())
element('reload').addEventListener('click', () => frame.contentWindow.location.reload())
element('reset').addEventListener('click', () => {
mock.reset()
bridge.refresh()
})
element('empty').addEventListener('click', () => {
mock.clear()
bridge.refresh()
})
element('logout').addEventListener('click', () => {
bridge.destroy({ logout: true })
element('status').textContent = '模拟会话已退出;刷新整个页面可重新连接'
})
window.addEventListener('pagehide', () => bridge.destroy(), { once: true })