任务设置表单数据结构说明.md 6.0 KB

任务设置表单数据结构修正说明

🎯 目标

确保任务设置的表单数据正确对应 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

🔧 表单字段结构修正

❌ 修正前(不匹配数据表)

<!-- 购买指定商品 -->
<input name="goods_select_type" value="include">
<input name="task_goods_ids[]" value="1">
<input name="task_goods_ids[]" value="2">

<!-- 消费满额 -->
<input name="task_amount_2" value="100">
<input name="task_amount_3" value="200">
<input name="task_amount_4" value="500">

✅ 修正后(匹配数据表)

<!-- 购买指定商品 (type=1) -->
<input name="condition[1][type]" value="1">
<input name="condition[1][goods_rule]" value="1">
<input name="condition[1][goods_ids]" value="[1,2,3]">

<!-- 单笔消费满额 (type=2) -->
<input name="condition[2][type]" value="2">
<input name="condition[2][condition_value]" value="100">

<!-- 单次充值满额 (type=3) -->
<input name="condition[3][type]" value="3">
<input name="condition[3][condition_value]" value="200">

<!-- 累计消费满额 (type=4) -->
<input name="condition[4][type]" value="4">
<input name="condition[4][condition_value]" value="500">

📝 具体修改内容

1. 购买指定商品任务 (Type=1)

修改的HTML字段:

<!-- 条件类型隐藏字段 -->
<input type="hidden" name="condition[1][type]" value="1">

<!-- 商品规则 -->
<input type="radio" name="condition[1][goods_rule]" value="1" checked> 指定商品参与
<input type="radio" name="condition[1][goods_rule]" value="2"> 指定商品不可参与

<!-- 商品ID列表隐藏字段 -->
<input type="hidden" name="condition[1][goods_ids]" value="" id="task-goods-ids-1">

JavaScript处理:

// 多选商品完成后,更新隐藏字段
function updateTaskGoods(selectedGoods) {
    var goodsIds = selectedGoods.map(function(item) {
        return item.id;
    });
    $('#task-goods-ids-1').val(JSON.stringify(goodsIds));
}

2. 其他任务类型

单笔订单消费满额 (Type=2):

<input type="hidden" name="condition[2][type]" value="2">
<input name="condition[2][condition_value]" min="0.01" step="0.01">

单次充值满额 (Type=3):

<input type="hidden" name="condition[3][type]" value="3">
<input name="condition[3][condition_value]" min="0.01" step="0.01">

活动期间累计消费满额 (Type=4):

<input type="hidden" name="condition[4][type]" value="4">
<input name="condition[4][condition_value]" min="0.01" step="0.01">

🔄 数据处理流程

1. 用户选择任务类型

// 用户勾选任务类型复选框
$(document).on('change', 'input[name="row[task_type][]"]', function() {
    var type = parseInt($(this).val());
    $('#task-setting-' + type).show();
});

2. 商品选择处理

// 使用专门的任务商品模板
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. 表单提交数据结构

{
    "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. 测试验证:全面测试表单提交和数据存储