# 任务设置表单数据结构修正说明
## 🎯 目标
确保任务设置的表单数据正确对应 `shop_lottery_condition` 数据表结构,实现数据的正确存储和提交。
## 📊 数据表结构 (shop_lottery_condition)
| 字段名 | 数据类型 | 说明 | 示例值 |
|--------|----------|------|--------|
| `type` | tinyint(1) | 条件类型: 1=购买指定商品 2=单笔订单消费满额 3=单次充值满额 4=活动期间累计消费满额 | 1, 2, 3, 4 |
| `condition_value` | decimal(10,2) | 条件值(金额) | 100.00 |
| `goods_ids` | text | 商品ID列表(JSON格式) | [1,2,3] |
| `goods_rule` | tinyint(1) | 商品规则: 1=指定商品参与 2=指定商品不可参与 | 1, 2 |
| `reward_times` | int(11) | 满足条件奖励抽奖次数 | 1 |
| `is_repeatable` | tinyint(1) | 是否可重复获得: 0=否 1=是 | 0, 1 |
## 🔧 表单字段结构修正
### ❌ 修正前(不匹配数据表)
```html
```
### ✅ 修正后(匹配数据表)
```html
```
## 📝 具体修改内容
### 1. 购买指定商品任务 (Type=1)
**修改的HTML字段:**
```html
指定商品参与
指定商品不可参与
```
**JavaScript处理:**
```javascript
// 多选商品完成后,更新隐藏字段
function updateTaskGoods(selectedGoods) {
var goodsIds = selectedGoods.map(function(item) {
return item.id;
});
$('#task-goods-ids-1').val(JSON.stringify(goodsIds));
}
```
### 2. 其他任务类型
**单笔订单消费满额 (Type=2):**
```html
```
**单次充值满额 (Type=3):**
```html
```
**活动期间累计消费满额 (Type=4):**
```html
```
## 🔄 数据处理流程
### 1. 用户选择任务类型
```javascript
// 用户勾选任务类型复选框
$(document).on('change', 'input[name="row[task_type][]"]', function() {
var type = parseInt($(this).val());
$('#task-setting-' + type).show();
});
```
### 2. 商品选择处理
```javascript
// 使用专门的任务商品模板
selectTaskGoods: function(container) {
Controller.api.selectGoods({
mode: 'multiple',
title: '选择参与商品',
container: container,
template: 'task-goods-template',
callback: function(data) {
if (data && data.length > 0) {
var goodsIds = data.map(function(item) {
return item.id;
});
$('#task-goods-ids-1').val(JSON.stringify(goodsIds));
}
}
});
}
```
### 3. 表单提交数据结构
```json
{
"condition": {
"1": {
"type": 1,
"goods_rule": 1,
"goods_ids": "[1,3,5]"
},
"2": {
"type": 2,
"condition_value": "99.00"
},
"3": {
"type": 3,
"condition_value": "200.00"
},
"4": {
"type": 4,
"condition_value": "1000.00"
}
}
}
```
## ✅ 关键优化点
### ✨ 主要改进
- **字段名匹配**:表单字段名完全对应数据表字段
- **数据类型正确**:JSON格式存储商品IDs,decimal存储金额
- **结构化数据**:使用 `condition[type][field]` 结构化字段
- **多选商品支持**:正确处理多选商品并转换为JSON
- **类型标识**:每个条件明确标识类型值
### 🎯 数据验证
- 商品IDs必须是有效的JSON数组格式
- 金额字段必须是有效的decimal值
- 商品规则值必须是1或2
- 条件类型必须在1-4范围内
## 📂 涉及的文件修改
1. **application/admin/view/lottery/activity/add.html** - 表单字段修正
2. **public/assets/js/backend/lottery/activity.js** - JavaScript处理逻辑
3. **application/admin/view/lottery/activity/scripttpl.html** - 商品选择模板
## 🧪 测试验证
### 测试步骤
1. 打开抽奖活动添加页面
2. 勾选"购买指定商品"任务类型
3. 点击"添加商品"选择多个商品
4. 查看隐藏字段 `condition[1][goods_ids]` 的值
5. 检查其他任务类型的金额字段格式
### 预期结果
- 商品IDs以JSON数组格式存储:`[1,2,3]`
- 金额字段格式正确:`99.00`
- 表单提交数据结构匹配数据表设计
## 🔮 后续步骤
1. **后端处理**:确保控制器能正确解析 `condition` 数组数据
2. **数据验证**:添加相应的验证规则
3. **编辑页面**:同步修改编辑页面的字段结构
4. **测试验证**:全面测试表单提交和数据存储