# 任务设置表单数据结构修正说明 ## 🎯 目标 确保任务设置的表单数据正确对应 `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. **测试验证**:全面测试表单提交和数据存储