API
sdk
version
基座版本
console.log(sdk.version)
userInfo
用户和权限信息
{
permissions: {
//权限信息
all: boolean //是否具有全部权限
page: string[] //具有权限页面 id
widgets: boolean //具有组件权限 id
}
user:{
id:string//用户 id
name:string //用户名称
organizationId:string//组织 id
orignizationDiaplsyName:string // 组织名称
roleIds:Array //角色 id 集合
}
}
request:Request
axios 实例 请求接口使用
类型
type RequestConfig = AxiosRequestConfig & {
silent?: boolean
}
type Request = {
<D = Data>(config?: RequestConfig): Promise<D>
<D = Data>(url: string, config?: RequestConfig): Promise<D>
get<D = Data>(url: string, config?: RequestConfig): Promise<D>
delete<D = Data>(url: string, config?: RequestConfig): Promise<D>
post<D = Data>(url: string, data?: any, config?: RequestConfig): Promise<D>
put<D = Data>(url: string, data?: any, config?: RequestConfig): Promise<D>
} & AxiosInstance
示例
const { request } = sdk
const params = {id : 1 }
request.get('api/v1/xxx', {params})
const { request } = sdk
const data = {id : 1}
request.post('api/v1/xxx',data)
不需要出现 loading 弹窗
const { request } = sdk
const data = { id : 1}
request.post('api/v1/xxx', data, { silent : false})
cms
utils
工具函数
openVariableDialog(option:Object)
打开变量弹窗方法(和内置组件 function-dialog-variate.vue 作用一样) 命令式
示例
import sdk from 'syc-cms'
const { openVariableDialog } = sdk.utils
/**
*
* @param currentVariable 单选时默认选中的数据
* @param isMultiple 是否开启多选 默认false
* @param defaultCheckKey 多选时默认选中的数据列表id
* @param showConfig 是否显示确认并配置下一项按钮
* @param configData 是否显示确认并配置下一项按钮的数据
* @example
* configData = {
* data:[{
* id:xxx,
* name:xxx
* }], //当前数据列表
* currentRow:{
* id:xxx,
* name:xxx
* }, //当前选中项
* key:'id' //根据唯一key值获取对应选中的下标
* variableKey:variableKey,对应获取变量名的key
* }
* @example
* const variable = await openVariableDialog({currentVariable: null})
* console.log(variable.name)
*/
async function open() {
const data = await openVariableDialog({
isMultiple: true,
})
}
importAsyc(module: string)
异步导入 cms 内置组件
示例
导入内置组件: /src/widgets/widget1.setting.vue
<template>
<SettingItem :title="'自定义设置'"> 自定义设置 </SettingItem>
</template>
<script lang="ts" setup>
import sdk from 'syc-cms'
const SettingItem = sdk.importAsync(
'@/views/Project/Pages/Editor/Settings/components/SettingItem.vue'
)
</script>
models
模型指 MVC 中的 M ,是对应用结构的描述,是一系列类
models.App
系统数据中心类
示例
import sdk from 'syc-cms'
const { app, App, createApp, getApp } = sdk.models
// 单例
;((app === new App()) === createApp()) === getApp()
实例属性
| 属性名 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| mode | 当前模式,编辑模式(开发版),运行模式(运行版)。组件渲染时在两种模式中可能有区别,取决于组件自身逻辑 | "editing" | "running" | "editing" |
| editing | 是否编辑模式 | boolean | true |
| running | 是否运行模式 | boolean | false |
| current.project | 当前工程项目 | Project | Project |
| projectList | 工程项目列表 | Project[] | [] |
| dataeventSocket | 全局事件 socket | Socket | Socket |
models.app: App
App 的实例,单例,是整个系统的数据中心
示例
获取当前 app 模式 开发版和运行版做不同逻辑:
<script lang="ts" setup>
import sdk from 'syc-cms'
const { app } = sdk.models
function doSomething(){
if(app.editing){ //开发版
//
}else{ //运行版
//
}
}
</script>
获取应用程序
models.Project
对项目工程进行管理和操作,包括变量、页面、语言等内容
示例
获取工程信息
import sdk from 'syc-cms'
const { app } = sdk.models
const project = app.current.project
//当前工程id
console.log(project.id)
//当前工程所有页面
console.log(project.pageList)
实例属性
| 属性名 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| identifier | 工程唯一标识 | string | |
| id | 项目的 ID | string | |
| name | 项目的名称 | string | |
| current.page | 当前页面 | string | |
| current.language | 当前语言 | string | |
| current.user | 当前用户 | string | |
| current.homePageId | 首页 ID | string | |
| pageList | 项目中的页面列表,存储 Page 类的实例数组 | Page[] | [] |
| languageList | 项目中的语言列表,存储 Language 类的实例数组 | Language[] | [] |
| variableMap | 以变量名称为键的对象,存储项目中的变量信息,每个变量是 Variable 类的实例 | { [string]: Variable } | |
| variableValueMap | 以变量名称为键的对象,存储项目中的变量值信息。通过 Proxy,实现了对 variableMap 的值的自动获取和设置 | Proxy | |
| variableOldValueMap | 以变量名称为键的对象,存储项目中的变量旧值信息。通过 Proxy,实现了对 variableMap 的旧值的自动获取 | Proxy | |
| saved | 当前工程是否已保存 | boolean | true |
| saveStatus | 当前工程的保存状态 | "saved" | "saving" | "fail" | "unsaved" | "saved" |
| moduleSavedStatusMap | 工程各子模块的保存状态 | Object | |
| blocks | 全局事件列表,存储 Block 类的实例数组 | Block[] | [] |
实例方法
| 方法名 | 说明 | 类型 |
|---|---|---|
| remove | 从 app.projectList 中移除当前项目实例 | () => void |
| setVariable | 设置变量值。参数 name:变量名,value:变量值 | (name: string, value: string) => void |
| setVariable | 等待时长 参数 time:时长(mm) | (time: number = 0) => void |
| openVirtualKeyboard | 开启虚拟键盘 | () => void |
| closeVirtualKeyboard | 关闭虚拟键盘 | () => void |
| closeVirtualKeyboard | 播放音频 参数 fileUrl: 文件路径,loop:是否循环 | (fileUrl: string, loop: boolean) => void |
models.Page
页面管理,它包含了页面的基本属性和方法,以及与其他页面进行交互的功能。
示例
获取当前页面信息
import sdk from 'syc-cms'
const { app } = sdk.models
//当前页面
const page = app.current.project.current.page
//当前页面渲染节点信息
const document = page.document
//获取页面下标
const sort = page.getSort()
// 保存页面
page.save()
实例属性
| 属性名 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| id | 页面的 ID | string | |
| name | 页面的名称 | string | |
| parent | 当前页面的父页面,为 undenfind 时是顶层 | Page | undefined | undefined |
| parentId | 页面的父页面 id | string | undefined | undefined |
| children | 页面的子页面列表 | Page[] | [] |
document 重点 | 页面文档数据,body 是页面渲染在画布上时的根节点 | {body:CanvasNode} | {body:CanvasNode} |
| type | 页面类型。0 表示文件夹,1 表示画面 | number | 1 |
| updateTime | 页面的更新时间 | string | |
| sort | 页面在父级页面中的下标(用于排序)。值为 null 时,默认排序将页面追加到父级的最后一个 | number | null | number |
| hasEvent | 是否有页面事件 | boolean | false |
| permissions | 表示页面的权限控制配置。包含多个具有 id、name 和 subs 属性的对象,id 和 name 分别表示 CanvasNode 的 id 和 name,subs 是一个包含多个具有 id 和 name 属性的对象的数组(组件级别) | Array | [] |
实例方法
| 方法名 | 说明 | 类型 |
|---|---|---|
| appendChild | 向当前页面的子页面列表中添加一个子页面 | (child: Page, sort: number | null = null) => void |
| remove | 从父页面的子页面列表中移除当前页面 | () => void |
| copyPage | 复制当前页面到当前列表 | () => void |
| getSort | 获取当前页面在父页面子页面列表中的下标 | () => number |
| save | 保存当前页面的内容和权限配置 | () => void |
models.PageManager
一个页面控制器,主要用于管理页面的弹窗、页面跳转、导出、打印等功能。
示例
获取页面控制器信息
import sdk from 'syc-cms'
const { PageManager } = sdk.models
const pageManager = new PageManager()
//获取所有弹窗页面
console.log(pageManager.dialogPages)
//获取最后一次弹窗信息
console.log(PageManager.lastDialogInfo)
打开指定页面弹窗
import sdk from 'syc-cms'
const { PageManager } = sdk.models
const pageManager = new PageManager()
//只能打开一个弹窗
pageManager.alertRoute(1, '我是标题', true, 800, 200, 'dialog', true)
//能多开弹窗(显示最小化按钮)
pageManager.alertRoute(1, '我是标题1', true, 800, 200, '', true)
pageManager.alertRoute(2, '我是标题2', true, 800, 200, '', true)
pageManager.alertRoute(3, '我是标题3', true, 800, 200, '', true)
导出指定页面
import sdk from 'syc-cms'
const { PageManager } = sdk.models
const pageManager = new PageManager()
const params = {
pageInfo:{
id:1 //页面id 优先整个页面导出 (可选)
elementId:'#chart' //指定元素id (可选)
}
type: "PDF" // 导出文件格式 "Image" | "PDF"
filename: "PDF" // 导出文件名
format: "A4" // 纸张类型 "A4" \| "A3"
orientation: "p" // p'=纵向 'l'=横向
}
pageManager.exportCurrentPage(params)
实例属性
| 属性名 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| id | 页面控制器 ID | 'PageManager' | 'PageManager' |
| name | 页面控制器 名称 | '页面控制器' | '页面控制器' |
| topPageZIndex | 页面层级的 z-index 属性值 | string | '99' |
| dialogPages | 存储所有窗口页面的数组 dialogPages[0].\_props.uuid 是 uuid | Array[{dialog:Component,pageIds:Array}] | [] |
| miniPagesId | 存储最小化窗口页面的数组 这里 id 是 uuid | Array<{vm:ComponentInternalInstance,id: string,title: string}> | [] |
| currentPage | 当前选中的弹窗信息 | Object[{dialog:Object,pageIds:Array}] |
静态属性
| 属性名 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| lastDialogInfo | 记录最后一次弹窗的信息,包括时间戳和 pageId | Object[{timestamp:Date,pageId:Page['id']}] |