mirror of
https://github.com/insistence/RuoYi-Vue3-FastAPI.git
synced 2026-10-15 05:19:14 +00:00
* feat: 支持 v2 插件、原生扩展与签名发布 * fix: 修复测试 * feat: 增强宿主 SDK、运行观测与制品维护能力 * feat: 增强文件传输、配置观测与本地开发能力 * feat: 支持 SSE 实时事件流并完善开发脚手架 * feat: 完善长连接鉴权复核与关闭回收 * feat: 增强生命周期与任务关闭可靠性 * feat: 收紧健康检查契约并补齐前端与真实网络验收 * feat: 增加SDK溯源与离线更新工具并验证跨版本兼容 * feat: 增加持久化业务示例与受控 Python 交付 * feat: 增加统一运行诊断与多worker状态观测 * feat: 增加固定目标发布等待与自动验收 * fix: 修复多环境插件部署前缀与代理配置不一致 * fix: 修复测试
63 lines
2.1 KiB
Cheetah
63 lines
2.1 KiB
Cheetah
import { createPluginHostBridge, validatePluginSession } from './vendor/pluginBridge.js'
|
|
|
|
const element = (id) => document.getElementById(id)
|
|
const frame = element('plugin-frame')
|
|
let route = '/'
|
|
const bridge = createPluginHostBridge({
|
|
pluginId: '__PLUGIN_ID__',
|
|
session: validatePluginSession(
|
|
{
|
|
pluginId: '__PLUGIN_ID__',
|
|
bridgeVersion: 1,
|
|
uiBase: '/apps/__PLUGIN_ID__/ui/',
|
|
apiBase: '/apps/__PLUGIN_ID__/api/',
|
|
csrfToken: 'local-mock-no-credentials',
|
|
expiresIn: 3600,
|
|
},
|
|
'__PLUGIN_ID__'
|
|
),
|
|
getTarget: () => frame.contentWindow,
|
|
request: async ({ url, method, signal }) => {
|
|
await new Promise((resolve, reject) => {
|
|
if (signal.aborted) return reject(new Error('已取消'))
|
|
const cancel = () => {
|
|
clearTimeout(timer)
|
|
reject(new Error('已取消'))
|
|
}
|
|
const timer = setTimeout(
|
|
() => {
|
|
signal.removeEventListener('abort', cancel)
|
|
resolve()
|
|
},
|
|
Math.max(0, Math.min(5000, Number(element('delay').value) || 0))
|
|
)
|
|
signal.addEventListener('abort', cancel, { once: true })
|
|
})
|
|
if (element('failure').checked) throw new Error('模拟请求失败')
|
|
if (method !== 'get' || url !== '/apps/__PLUGIN_ID__/api/info')
|
|
throw new Error('模拟接口未实现')
|
|
return { pluginId: '__PLUGIN_ID__', serverTime: new Date().toISOString() }
|
|
},
|
|
getContext: () => ({
|
|
theme: { mode: element('theme').value },
|
|
language: 'zh-CN',
|
|
timeZone: 'Asia/Shanghai',
|
|
route,
|
|
}),
|
|
onReady: () => {
|
|
element('status').textContent = '模拟连接已建立'
|
|
},
|
|
onRoute: (next) => {
|
|
route = next
|
|
bridge.updateRoute(route)
|
|
},
|
|
})
|
|
frame.src = '/index.html'
|
|
element('theme').addEventListener('change', () => bridge.updatePreferences())
|
|
element('reload').addEventListener('click', () => frame.contentWindow.location.reload())
|
|
element('logout').addEventListener('click', () => {
|
|
bridge.destroy({ logout: true })
|
|
element('status').textContent = '模拟会话已退出;刷新整个页面可重新连接'
|
|
})
|
|
window.addEventListener('pagehide', () => bridge.destroy(), { once: true })
|