# 广告位布局与拖拽
**Repository Path**: foge/adLayout
## Basic Information
- **Project Name**: 广告位布局与拖拽
- **Description**: 广告位的自定义布局,支持拖拽排序功能
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2025-11-07
- **Last Updated**: 2025-11-07
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 广告布局管理系统
## 项目简介
这是一个基于Vue.js开发的广告布局管理系统,提供了两种核心组件:前台展示组件和后台拖拽管理组件。系统支持基于JSON配置的流式布局,可灵活配置不同栏数的广告位展示,并提供拖拽排序功能。
## 项目结构
```
├── src/
│ ├── App.vue # 主应用组件,包含视图切换逻辑
│ ├── components/
│ │ ├── AdLayout.vue # 前台展示组件
│ │ └── DraggableAdLayout.vue # 后台拖拽管理组件
│ └── main.js # 应用入口文件
├── package.json # 项目依赖配置
└── README.md # 项目文档
```
## 组件说明
### 1. AdLayout 组件(前台展示组件)
#### 功能特点
- 纯展示型组件,用于在前端页面展示广告布局
- 支持根据广告位配置自动调整布局结构
- 流式布局设计,确保在不同屏幕尺寸下的良好显示效果
- 支持多种布局类型(单列、双列、三列等)
#### 实现思路
- 通过props接收广告位配置数据数组
- 使用CSS Grid或Flexbox实现流式布局
- 根据广告位的布局类型动态计算宽度和定位
- 采用响应式设计,确保在不同设备上都能正常展示
#### 使用方法
```vue
```
#### Props说明
| Prop名称 | 类型 | 必需 | 默认值 | 描述 |
|---------|------|------|--------|------|
| adItems | Array | 是 | [] | 广告位配置数组,每个对象包含id、title、content、layoutType等属性 |
### 2. DraggableAdLayout 组件(后台拖拽管理组件)
#### 功能特点
- 支持广告位的拖拽排序功能
- 实时更新广告布局配置
- 提供直观的操作界面,便于管理员调整广告位顺序
- 与前台展示组件使用相同的数据结构,确保展示一致性
#### 实现思路
- 基于vuedraggable插件实现拖拽功能
- 监听拖拽事件,实时更新广告位顺序
- 维护本地状态并同步到父组件
- 采用与前台组件相同的布局算法,确保预览效果与实际展示一致
#### 使用方法
```vue
```
#### Props说明
| Prop名称 | 类型 | 必需 | 默认值 | 描述 |
|---------|------|------|--------|------|
| adItems | Array | 是 | [] | 广告位配置数组 |
#### Events说明
| Event名称 | 参数 | 描述 |
|----------|------|------|
| update-items | newItems: Array | 当广告位顺序变更时触发,返回更新后的广告位数组 |
## 数据结构说明
### adItems 数组
组件使用的核心数据结构是一个广告位配置对象的数组(adItems)。每个组件都通过props接收这个数组,并根据数组中的配置渲染对应的广告布局。
#### 完整数组格式示例:
```javascript
[
{
id: 'ad1', // 广告位唯一标识
title: '广告标题1', // 广告标题
content: '广告内容1', // 广告内容或描述
layoutType: 1 // 布局类型:1-单列, 2-双列, 3-三列
// 可根据需要扩展其他属性
},
{
id: 'ad2',
title: '广告标题2',
content: '广告内容2',
layoutType: 2
},
{
id: 'ad3',
title: '广告标题3',
content: '广告内容3',
layoutType: 3
}
// 更多广告位配置对象...
]
```
#### 单个广告位对象属性说明:
| 属性名 | 类型 | 必需 | 描述 |
|-------|------|------|------|
| id | String | 是 | 广告位唯一标识,用于区分不同广告位 |
| title | String | 是 | 广告标题,显示在广告位中 |
| content | String | 是 | 广告内容或描述文本 |
| layoutType | Number | 是 | 布局类型:1-单列(100%宽度), 2-双列(50%宽度), 3-三列(33.33%宽度)
| [其他自定义属性] | Any | 否 | 可根据业务需求扩展其他属性,如图片URL、链接等 |
#### 布局类型与宽度关系:
- layoutType: 1 - 单列布局,宽度为容器的100%
- layoutType: 2 - 双列布局,宽度为容器的50%
- layoutType: 3 - 三列布局,宽度为容器的33.33%
组件会根据每个广告位对象的layoutType属性,自动计算并应用相应的宽度样式,实现灵活的流式布局效果。
## 安装和运行
1. 安装依赖
```bash
npm install
```
2. 开发模式运行
```bash
npm run dev
```
3. 构建生产版本
```bash
npm run build
```
## 扩展建议
1. 可以添加广告位删除、添加、编辑功能
2. 实现广告内容的富文本编辑
3. 添加布局模板预设功能
4. 实现配置的导入导出功能
5. 添加拖拽预览和实时效果预览
## 技术栈
- Vue.js 2.x
- VueDraggable (拖拽功能)
- Vite (构建工具)
- CSS3 (Grid/Flexbox 布局)
## 在线预览
可以访问以下地址查看项目预览:
[http://www.lingyao.cc/demo/adLayout/](http://www.lingyao.cc/demo/adLayout/)
## 源码获取
源码托管在 Gitee:[https://gitee.com/foge/adLayout.git](https://gitee.com/foge/adLayout.git)