插件 SDK
插件 SDK(@/sdk)
am_plugin 脚手架内置一层插件 SDK,把 Bridge 持有、免登、请求、入口模式、主题、会员对接全部收口,从 @/sdk 统一导出。脚手架插件不必直接操作 props.hostBridge。
import { useUser, invoke, request, hasBridge, getCapabilities, isFrontEntry } from '@/sdk'Bridge:invoke / hasBridge
import { invoke, hasBridge, getCapabilities, getBridge } from '@/sdk'
await invoke('ui.message', { type: 'success', message: '操作成功' })
const dict = await invoke('data.getDict', { code: 'structure_type' })hasBridge():是否运行在基座 qiankun 内。front 公开页调用前必须判空——直连访问没有 Bridge,要降级处理。getCapabilities():当前已开通的能力清单(见 Bridge 门禁)。
用户:useUser(免登)
<script setup lang="ts">
import { useUser } from '@/sdk'
const { user, loading } = useUser() // user.sid / user.nickname ...
</script>mount 阶段自动从基座拉取资料与会话并缓存(模块级单例,多次调用只请求一次)。refreshUser() 手动刷新,resetUser() 由 unmount 调用。
请求:request
import { request } from '@/sdk'
const data = await request.get('/app/am_demo/list')
const res = await request.post('/app/am_demo/save', { name: 'test' })底层复用框架 @/utils/http。token 在 mount 时已从基座同步进 store,请求拦截器自动注入 Authorization,无需每个请求再问 Bridge。接口前缀 /app/{name}/xxx。
入口模式:getEntryMode / isFrontEntry
import { getEntryMode, isFrontEntry } from '@/sdk'
if (isFrontEntry()) { /* 前台公开形态 */ }resolveEntryMode(props) 的解析优先级:
props.entryType(基座 qiankun 传入,最可靠,覆盖 dev/prod);window.__PLUGIN_ENTRY__(post-build 在入口 HTML 内联注入,生产直连场景);- 独立运行且 hash 以
#/manage开头 → 后台预览; - 其余独立运行场景(含直访根路径)→ 默认前台
front。
front 模式下:不拉后台菜单、根路径重定向前台首页、401 只做门控翻牌+防抖通知(不自动跳走)。
主题:跟随基座
setupBaseThemeSync() 读取 theme.get 并 subscribeTheme 订阅,把基座深色模式/主题色/圆角同步到子应用 store;菜单布局固定为子应用自己的布局。取消订阅函数应在 unmount 调用。
会员对接
统一跳会员中心插件(不自建登录页)的一组函数,详见免登与会话:
import { openMemberLogin, openMemberRegister, openMemberCenter, requireLogin, isLoggedIn, logoutLocal, onUnauthorized } from '@/sdk'
const onSubmit = () => {
if (!requireLogin()) return // 未登录跳登录并中止
// ...已登录业务
}页面级门控
<RequireLogin> 组件把"需登录内容"包起来,未登录就地显示登录/注册入口、401 后自动翻牌,无需刷新。见 免登与会话。
免登引导
bootstrapStandaloneAuth() + setupSessionSync() 只在独立前台入口(无 Bridge)运行:本地优先读同域会话、读不到再用一次性票据兑换主 JWT、并注册跨标签同步。由 main.ts 在 !hasBridge() 分支自动调用,开发者零对接。机制见 免登与会话。
