podesigner-sdk
Version:
专业设计器SDK - 完整的图片编辑、文字添加、图层管理解决方案
290 lines (233 loc) • 6.19 kB
Markdown
# CuzcuzSDK - 专业设计器SDK
一个功能完整的设计器SDK,提供图片编辑、文字添加、图层管理等专业设计功能。
## ✨ 特性
- 🎨 **完整的设计器界面** - 左侧工具栏、中央画布、右侧属性面板
- 📁 **文件上传** - 支持多文件上传和拖拽
- 🖼️ **图片素材库** - 内置图片素材管理
- ✏️ **文字工具** - 丰富的文字编辑功能
- 📚 **图层管理** - 完整的图层操作
- 🔍 **缩放控制** - 多级缩放和适应屏幕
- ↩️ **撤销重做** - 完整的历史记录管理
- 🎯 **吸附线** - 智能对齐辅助
- 📏 **标尺** - 精确定位工具
## 📦 安装
```bash
npm install @cuzcuz/sdk
# 或
yarn add @cuzcuz/sdk
# 或
pnpm add @cuzcuz/sdk
```
## 🚀 快速开始
### 1. 全局注册组件
```ts
// main.ts
import { createApp } from 'vue'
import App from './App.vue'
import CuzcuzSDK from '@cuzcuz/sdk'
const app = createApp(App)
app.use(CuzcuzSDK)
app.mount('#app')
```
```vue
<!-- App.vue -->
<template>
<div id="app">
<CuzcuzDesigner
:width="1200"
:height="800"
:gallery-images="galleryImages"
@save="handleSave"
@preview="handlePreview"
/>
</div>
</template>
<script setup lang="ts">
import { ref } from 'vue'
const galleryImages = ref([
{ id: '1', url: 'https://via.placeholder.com/200x150', name: '示例图片1' },
{ id: '2', url: 'https://via.placeholder.com/300x200', name: '示例图片2' }
])
function handleSave(data: any) {
console.log('保存设计数据:', data)
}
function handlePreview(data: any) {
console.log('预览设计数据:', data)
}
</script>
```
### 2. 按需导入组件
```vue
<template>
<div class="designer-container">
<CuzcuzDesigner
:width="1200"
:height="800"
:gallery-images="galleryImages"
@save="handleSave"
@preview="handlePreview"
@element-selected="handleElementSelected"
/>
</div>
</template>
<script setup lang="ts">
import { ref } from 'vue'
import { CuzcuzDesigner, type CuzcuzDesignerProps } from '@cuzcuz/sdk'
const galleryImages: CuzcuzDesignerProps['galleryImages'] = [
{ id: '1', url: 'https://via.placeholder.com/200x150', name: '示例图片1' },
{ id: '2', url: 'https://via.placeholder.com/300x200', name: '示例图片2' },
{ id: '3', url: 'https://via.placeholder.com/250x180', name: '示例图片3' }
]
function handleSave(data: any) {
console.log('保存设计数据:', data)
// 发送到后端保存
}
function handlePreview(data: any) {
console.log('预览设计数据:', data)
// 生成预览
}
function handleElementSelected(element: any) {
console.log('选中元素:', element)
}
</script>
<style>
.designer-container {
width: 100vw;
height: 100vh;
}
</style>
```
### 3. 完整示例 - 带数据持久化
```vue
<template>
<div class="app">
<CuzcuzDesigner
:width="1200"
:height="800"
:gallery-images="galleryImages"
@save="saveDesign"
@preview="previewDesign"
@element-selected="onElementSelected"
/>
</div>
</template>
<script setup lang="ts">
import { ref, onMounted } from 'vue'
import { CuzcuzDesigner } from '@cuzcuz/sdk'
// 图片素材
const galleryImages = ref([
{ id: '1', url: '/images/template1.jpg', name: '模板1' },
{ id: '2', url: '/images/template2.jpg', name: '模板2' },
{ id: '3', url: '/images/logo.png', name: 'Logo' }
])
// 当前选中的元素
const selectedElement = ref(null)
// 加载保存的设计
onMounted(async () => {
const savedDesign = localStorage.getItem('cuzcuz-design')
if (savedDesign) {
// TODO: 加载保存的设计到编辑器
console.log('加载设计:', JSON.parse(savedDesign))
}
})
// 保存设计
async function saveDesign(data: any) {
try {
// 本地存储
localStorage.setItem('cuzcuz-design', JSON.stringify(data))
// 发送到服务器
const response = await fetch('/api/designs', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(data)
})
if (response.ok) {
console.log('设计保存成功')
}
} catch (error) {
console.error('保存失败:', error)
}
}
// 预览设计
function previewDesign(data: any) {
// 生成预览图或打开预览窗口
console.log('预览数据:', data)
// 可以调用后端API生成预览图
// generatePreview(data)
}
// 元素选中事件
function onElementSelected(element: any) {
selectedElement.value = element
console.log('当前选中:', element)
}
</script>
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
.app {
width: 100vw;
height: 100vh;
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
}
</style>
```
## 📚 API 文档
### CuzcuzDesigner Props
| 属性 | 类型 | 默认值 | 说明 |
|------|------|--------|------|
| width | number | 1200 | 画布宽度 |
| height | number | 800 | 画布高度 |
| galleryImages | Array | [] | 图片素材列表 |
### Events
| 事件名 | 参数 | 说明 |
|--------|------|------|
| save | data: any | 保存设计时触发 |
| preview | data: any | 预览设计时触发 |
| element-selected | element: IUI \| null | 选中元素时触发 |
### 图片素材格式
```ts
interface GalleryImage {
id: string
url: string
name: string
}
```
## 🎯 高级用法
### 自定义图片素材
```ts
// 从API获取素材
async function loadGalleryImages() {
const response = await fetch('/api/gallery')
const images = await response.json()
galleryImages.value = images.map(img => ({
id: img.id,
url: img.thumbnail, // 缩略图
name: img.title
}))
}
```
### 扩展工具栏
```vue
<template>
<CuzcuzDesigner>
<!-- 可以通过插槽扩展功能 -->
<template #toolbar>
<button @click="customFunction">自定义功能</button>
</template>
</CuzcuzDesigner>
</template>
```
## 🌐 浏览器支持
- Chrome >= 88
- Firefox >= 85
- Safari >= 14
- Edge >= 88
## 📄 许可证
MIT License
## 🤝 贡献
欢迎提交 Issues 和 Pull Requests!
## 📞 支持
如有问题,请联系:support@cuzcuz.com