Skip to content

CCXC Vue SFC API

通过 Vue 依赖注入 (inject) 提供的渲染器核心功能。

快速开始

所有 API 均通过 Vue 的 inject 函数获取:

javascript
import { inject } from 'vue'

// 在 setup() 函数里
const api = inject('api')
const backend = inject('backend')
// ... 其他功能

网络通信

api

签名

typescript
api(url: string, data: any, type: "normal" | "sp"): Promise<any>

描述
与后端 API 进行安全通信的统一接口,支持常规请求和特殊权限请求。

参数

  • url - API 端点路径
  • data - 请求数据载荷
  • type - 请求类型
    • "normal" - 标准用户请求
    • "sp" - 特殊权限请求

示例

javascript
const userInfo = await api('/play/plugin/test01', { userId: 123 })

backend

签名

typescript
backend(key: string, data: any): Promise<any>

描述
调用在"题目脚本"中预定义的后端处理逻辑,实现动态题目交互和验证。

参数

  • key - 后端脚本标识符
  • data - 传递给脚本的数据

示例

javascript
// 提交答案验证
const validation = await backend('c16_check_answer', {
  puzzleId: 'crypto_001',
  answer: 'FLAG{example}'
})

// 获取动态提示
const hint = await backend('c16_get_hint', { level: 2 })

实用工具

adjustTextColor

签名

typescript
adjustTextColor(color: string): "#000000" | "#ffffff"

描述
根据背景色自动选择最佳对比度的文本颜色,确保内容始终清晰可读。

参数

  • color - 背景颜色值(支持 HEX、RGB、HSL 等格式)

返回值

  • "#000000" - 黑色文本(适用于浅色背景)
  • "#ffffff" - 白色文本(适用于深色背景)

示例

javascript
// 动态主题适配
const bgColor = '#3498db'
const textColor = adjustTextColor(bgColor) // 返回 "#ffffff"

// 应用到样式
const cardStyle = {
  backgroundColor: bgColor,
  color: textColor
}

formatTimestamp

签名

typescript
formatTimestamp(timestamp: number, format?: string): string

描述
将 Unix 时间戳转换为人类友好的时间字符串。

参数

  • timestamp - Unix 时间戳(毫秒)
  • format - 可选的格式化模板

示例

javascript
const now = Date.now()
const formatted = formatTimestamp(now)
// 输出: "2025-07-09 14:30:25"

const custom = formatTimestamp(now, 'YYYY年MM月DD日')
// 输出: "2025年07月09日"

markdownToHtml

签名

typescript
markdownToHtml(markdown: string): string

描述
Markdown 渲染为 HTML。

参数

  • markdown - Markdown 格式的文本

示例

javascript
const md = `
## 题目描述
这是一道 **现代密码学** 题目,需要您:
1. 分析加密算法
2. 找到密钥
3. 解密得到 \`FLAG\`
`

const html = markdownToHtml(md)
// 转换为完整的 HTML 结构

sleep

签名

typescript
sleep(ms: number): Promise<unknown>

描述
异步延时器,在需要暂停执行或创建动画效果时使用。

参数

  • ms - 延时毫秒数

示例

javascript
// 创建打字机效果
for (const char of message) {
  displayChar(char)
  await sleep(50) // 每个字符间隔 50ms
}

// 延时后执行
await sleep(1000)
console.log('1秒后显示此消息')

实时协作

ysync

类型

typescript
ysync: Yjs

描述
基于 Yjs 的实时协作框架,让同队队员能够无缝同步状态、共享数据,打造真正的团队协作体验。

核心概念

  • Y.Doc - 共享文档容器
  • Y.Map - 键值对存储
  • Y.Array - 共享数组
  • Y.Text - 协作文本编辑

示例

javascript
// 获取协作实例
const ysync = inject('ysync')
const yDoc = ysync.yDoc

// 创建共享状态
const teamState = yDoc.getMap('team_progress')
const chatHistory = yDoc.getArray('chat_messages')
const sharedNotes = yDoc.getText('notes')

// 实时更新进度
teamState.set('current_puzzle', 'web_001')
teamState.set('solved_count', 5)

// 添加聊天消息
chatHistory.push([{
  user: 'Alice',
  message: '我找到了一个可疑的端点!',
  timestamp: Date.now()
}])

// 协作编辑笔记
sharedNotes.insert(0, '🔍 发现线索:\n')

// 监听变更
teamState.observe((event) => {
  console.log('队伍状态更新:', event.changes)
})

高级用法

javascript
// 创建结构化数据同步
const puzzleSolutions = yDoc.getMap('solutions')
puzzleSolutions.set('crypto_001', {
  solver: 'Bob',
  flag: 'FLAG{crypto_master}',
  solvedAt: new Date().toISOString(),
  hints_used: 2
})

// 实现实时投票
const voting = yDoc.getMap('team_voting')
voting.set('next_puzzle_vote', {
  options: ['web', 'pwn', 'reverse'],
  votes: { Alice: 'web', Bob: 'pwn' }
})

其他资源

Yjs 官方文档 - 深入了解实时协作

Released under the MIT License. Powered by VitePress.