Browse Source

fix:分销商我的团队

super-yimizi 1 day ago
parent
commit
c7c8cf2cc1

+ 131 - 19
application/admin/controller/commission/Goods.php

@@ -5,6 +5,8 @@ namespace app\admin\controller\commission;
 use app\common\controller\Backend;
 use app\common\model\commission\CommissionGoods as CommissionGoodsModel;
 use app\common\model\Goods as GoodsModel;
+use app\common\model\commission\Level as LevelModel;
+use app\common\Enum\CommissionGoodsEnum;
 use think\Db;
 
 class Goods extends Backend
@@ -27,6 +29,16 @@ class Goods extends Backend
         parent::_initialize();
         $this->model = new GoodsModel();  // 使用商品模型作为主模型,以便使用FastAdmin的标准功能
         $this->goodsModel = new GoodsModel();
+        
+        // 传递枚举配置给前端
+        $this->assignconfig('commission_goods_participate_list', CommissionGoodsEnum::$participateList);
+        $this->assignconfig('commission_goods_order_status_list', CommissionGoodsEnum::$orderStatusList);
+        $this->assignconfig('commission_goods_rule_type_list', CommissionGoodsEnum::$ruleTypeList);
+        $this->assignconfig('commission_goods_level_list', CommissionGoodsEnum::$levelList);
+        $this->assignconfig('commission_goods_self_buy_list', CommissionGoodsEnum::$selfBuyList);
+        $this->assignconfig('commission_goods_settlement_list', CommissionGoodsEnum::$settlementList);
+        $this->assignconfig('commission_goods_commission_settlement_list', CommissionGoodsEnum::$commissionSettlementList);
+        $this->assignconfig('commission_goods_commission_type_list', CommissionGoodsEnum::$commissionTypeList);
     }
 
     public function index()
@@ -64,7 +76,13 @@ class Goods extends Backend
             $goods->sku_prices = $goods->sku_prices;
         });
 
-        $config = sheep_config('shop.commission');
+        // 获取分销配置
+        $config = [
+            'participate_list' => CommissionGoodsEnum::$participateList,
+            'rule_type_list' => CommissionGoodsEnum::$ruleTypeList,
+            'level_list' => CommissionGoodsEnum::$levelList
+        ];
+        
         $this->success('分销商品详情', null, [
             'goods' => $goodsList,
             'config' => $config
@@ -72,31 +90,80 @@ class Goods extends Backend
     }
 
     /**
-     * 设置佣金(支持批量)
+     * 设置佣金
      *
-     * @param  $id
+     * @param  $ids
      */
-    public function edit($id = null)
+    public function edit($ids = null)
     {
-        if (!$this->request->isAjax()) {
+        if (!$this->request->isPost()) {
+            // GET请求,显示设置页面
+            $goodsIds = explode(',', $ids);
+            $goodsList = GoodsModel::whereIn('id', $goodsIds)
+                ->with(['commission_goods'])
+                ->select();
+            
+            // 获取分销商等级列表
+            $levelList = LevelModel::where('status', 'normal')
+                ->order('level asc')
+                ->select();
+            
+            $this->view->assign([
+                'goods_list' => $goodsList,
+                'level_list' => $levelList,
+                'goods_ids' => $ids
+            ]);
+            
             return $this->view->fetch();
         }
 
-        // 接受全部参数
-        $params = $this->request->only(['status', 'self_rules', 'commission_order_status', 'commission_config', 'commission_rules']);
+        // POST请求,保存设置
+        $params = $this->request->post();
+        
+        // 验证必需参数
+        if (empty($ids)) {
+            $this->error('商品ID不能为空');
+        }
 
-        $result = Db::transaction(function () use ($id, $params) {
+        $result = Db::transaction(function () use ($ids, $params) {
+            $goodsIds = explode(',', $ids);
             $count = 0;
-            $ids = explode(',', $id);
-
-            foreach ($ids as $goods_id) {
-                if ($row = $this->model->get($goods_id)) {
-                    $row->save($params);
-                } else {
-                    $model = new CommissionGoodsModel();
-                    $params['goods_id'] = $goods_id;
-                    $model->save($params);
+
+            foreach ($goodsIds as $goods_id) {
+                $goods_id = intval($goods_id);
+                if ($goods_id <= 0) continue;
+
+                // 查找或创建分销商品记录
+                $commissionGoods = CommissionGoodsModel::where('goods_id', $goods_id)->find();
+                if (!$commissionGoods) {
+                    $commissionGoods = new CommissionGoodsModel();
+                    $commissionGoods->goods_id = $goods_id;
                 }
+
+                // 保存基本设置
+                $commissionGoods->status = intval($params['status'] ?? CommissionGoodsEnum::PARTICIPATE_NO);
+                $commissionGoods->order_status = intval($params['order_status'] ?? CommissionGoodsEnum::ORDER_STATUS_YES);
+                $commissionGoods->rule_type = intval($params['rule_type'] ?? CommissionGoodsEnum::RULE_TYPE_DEFAULT);
+                $commissionGoods->self_buy = intval($params['self_buy'] ?? CommissionGoodsEnum::SELF_BUY_OFF);
+                $commissionGoods->settlement_type = intval($params['settlement_type'] ?? CommissionGoodsEnum::SETTLEMENT_GOODS_PRICE);
+                $commissionGoods->commission_settlement = intval($params['commission_settlement'] ?? CommissionGoodsEnum::COMMISSION_AFTER_PAY);
+                
+                // 保存扩展配置
+                $config = [];
+                if (!empty($params['config'])) {
+                    $config = is_array($params['config']) ? $params['config'] : json_decode($params['config'], true);
+                }
+                $commissionGoods->config = $config;
+
+                $commissionGoods->save();
+
+                // 如果是独立规则或批量规则,保存佣金规则
+                if (in_array($commissionGoods->rule_type, [CommissionGoodsEnum::RULE_TYPE_CUSTOM, CommissionGoodsEnum::RULE_TYPE_BATCH])) {
+                    if (!empty($params['commission_rules'])) {
+                        $this->saveCommissionRules($goods_id, $params['commission_rules'], $commissionGoods->rule_type);
+                    }
+                }
+
                 $count++;
             }
 
@@ -104,9 +171,54 @@ class Goods extends Backend
         });
 
         if ($result) {
-            $this->success('更新成功', null, $result);
+            $this->success('设置成功', '', $result);
         } else {
-            $this->error('更新失败');
+            $this->error('设置失败');
         }
     }
+
+    /**
+     * 保存佣金规则
+     */
+    private function saveCommissionRules($goodsId, $rulesData, $ruleType)
+    {
+        // 删除现有规则
+        Db::name('commission_goods_rules')
+            ->where('goods_id', $goodsId)
+            ->delete();
+
+        if (empty($rulesData) || !is_array($rulesData)) {
+            return true;
+        }
+
+        $insertData = [];
+        
+        foreach ($rulesData as $agentLevel => $levelRules) {
+            if (!is_array($levelRules)) continue;
+            
+            foreach ($levelRules as $commissionLevel => $rule) {
+                if (empty($rule['value']) || bccomp($rule['value'], '0', 4) <= 0) {
+                    continue;
+                }
+                
+                $insertData[] = [
+                    'goods_id' => $goodsId,
+                    'sku_id' => 0, // 批量规则统一为0,独立规则需要具体SKU ID
+                    'agent_level' => intval($agentLevel),
+                    'commission_level' => intval($commissionLevel),
+                    'type' => $rule['type'] ?? 'rate',
+                    'value' => floatval($rule['value']),
+                    'status' => 1,
+                    'createtime' => time(),
+                    'updatetime' => time()
+                ];
+            }
+        }
+
+        if (!empty($insertData)) {
+            return Db::name('commission_goods_rules')->insertAll($insertData);
+        }
+
+        return true;
+    }
 }

+ 6 - 18
application/admin/view/commission/agent/detail.html

@@ -39,7 +39,7 @@
                                 <td>
                                     {$row.level_info.name|default='-'} (等级{$row.level})
                                     {if $auth->check('commission/agent/edit')}
-                                    <button class="btn btn-xs btn-primary" onclick="changeLevel({$row.user_id})">更换</button>
+                                    <!-- <button class="btn btn-xs btn-primary" onclick="changeLevel({$row.user_id})">更换</button> -->
                                     {/if}
                                 </td>
                             </tr>
@@ -54,23 +54,11 @@
                                     {case value="reject"}<span class="label label-danger">拒绝</span>{/case}
                                     {default /}<span class="label label-default">{$row.status}</span>
                                     {/switch}
-                                    {if $auth->check('commission/agent/edit')}
+                                    <!-- {if $auth->check('commission/agent/edit')}
                                     <button class="btn btn-xs btn-warning" onclick="changeStatus({$row.user_id}, '{$row.status}')">修改状态</button>
-                                    {/if}
-                                </td>
-                            </tr>
-                            {if $row.level_status GT 0}
-                            <tr>
-                                <td>待升级等级</td>
-                                <td>
-                                    {$row.level_status_info.name|default='-'} (等级{$row.level_status})
-                                    {if $auth->check('commission/agent/edit')}
-                                    <button class="btn btn-xs btn-success" onclick="approveLevel({$row.user_id}, {$row.level_status})">同意</button>
-                                    <button class="btn btn-xs btn-danger" onclick="rejectLevel({$row.user_id})">拒绝</button>
-                                    {/if}
+                                    {/if} -->
                                 </td>
                             </tr>
-                            {/if}
                             <tr>
                                 <td>上级分销商</td>
                                 <td>
@@ -79,7 +67,7 @@
                                     {else}
                                     {/if}
-                                    <button class="btn btn-xs btn-primary" onclick="changeParentUser({$row.user_id})">更换</button>
+                                    <!-- <button class="btn btn-xs btn-primary" onclick="changeParentUser({$row.user_id})">更换</button> -->
                                 </td>
                             </tr>
                             <tr>
@@ -94,7 +82,7 @@
                                     {/if}
                                 </td>
                             </tr>
-                            <tr>
+                            <!-- <tr>
                                 <td>允许升级</td>
                                 <td>
                                     {if $row.upgrade_lock EQ 0}
@@ -106,7 +94,7 @@
                                     <button class="btn btn-xs btn-info" onclick="toggleUpgradeLock({$row.user_id}, {$row.upgrade_lock})">切换</button>
                                     {/if}
                                 </td>
-                            </tr>
+                            </tr> -->
                             <tr>
                                 <td>成为分销商时间</td>
                                 <td>{$row.become_time|datetime}</td>

+ 275 - 340
application/admin/view/commission/goods/edit.html

@@ -1,353 +1,288 @@
-{include file="/shopro/common/script" /}
+<form id="edit-form" class="form-horizontal" role="form" data-toggle="validator" method="POST" action="">
 
-<style>
-    .goods-form .sa-title.is-line {
-        margin-bottom: 16px;
-    }
-
-    .goods-form .goods-item {
-        margin-bottom: 16px;
-    }
-
-    .goods-form .goods-item .goods-title {
-        height: 16px;
-        line-height: 16px;
-        font-size: 14px;
-        font-weight: 500;
-        color: var(--sa-font);
-        margin-bottom: 8px;
-    }
-
-    .goods-form .goods-item .goods-sku {
-        width: fit-content;
-        height: 18px;
-        line-height: 18px;
-        background: var(--el-color-primary);
-        border-radius: 10px;
-        padding: 0 8px;
-        font-size: 12px;
-        color: var(--sa-background-assist);
-    }
-
-    .goods-form .commission-table {
-        overflow: hidden;
-        overflow-x: auto;
-    }
-
-    .goods-form .commission-table .commission-header {
-        border-left: 1px solid var(--sa-border);
-    }
-
-    .goods-form .commission-table .commission-header .col-item {
-        padding: 0 12px;
-        height: 40px;
-        line-height: 40px;
-        background: var(--sa-table-header-bg);
-        border-top: 1px solid var(--sa-border);
-    }
-
-    .goods-form .commission-table .commission-content {
-        border-left: 1px solid var(--sa-border);
-    }
-
-    .goods-form .commission-table .col-item {
-        width: 150px;
-        min-width: 150px;
-        padding: 0 12px;
-        height: 48px;
-        line-height: 48px;
-        display: flex;
-        align-items: center;
-        justify-content: center;
-        border-right: 1px solid var(--sa-border);
-        border-bottom: 1px solid var(--sa-border);
-    }
-
-    .goods-form .commission-table .col-item .el-input {
-        margin-right: 12px;
-    }
-
-    .goods-form .commission-table .col-item .el-input:last-of-type {
-        margin-right: 0;
-    }
+    <div class="panel panel-default panel-intro">
+        <div class="panel-heading">
+            <h3 class="panel-title">
+                <i class="fa fa-list"></i> 商品信息
+            </h3>
+        </div>
+        <div class="panel-body">
+            <!-- 商品信息展示 -->
+            <div class="row">
+                {volist name="goods_list" id="goods"}
+                <div class="col-sm-12" style="margin-bottom: 20px;">
+                    <div class="media">
+                        <div class="media-left">
+                            <img src="{$goods.image}" class="media-object" style="width: 80px; height: 80px; object-fit: cover; border-radius: 4px;">
+                        </div>
+                        <div class="media-body" style="padding-left: 15px;">
+                            <h5 class="media-heading" style="margin-bottom: 8px;">
+                                <strong>{$goods.title}</strong>
+                            </h5>
+                            <p class="text-muted" style="margin-bottom: 5px; font-size: 12px;">ID: {$goods.id}</p>
+                            <p class="text-muted" style="margin-bottom: 5px; font-size: 12px;">价格: ¥{$goods.price}</p>
+                            {if condition="$goods.subtitle"}
+                            <p class="text-muted" style="font-size: 12px;">{$goods.subtitle}</p>
+                            {/if}
+                        </div>
+                    </div>
+                </div>
+                {/volist}
+            </div>
+        </div>
+    </div>
 
-    .goods-form .commission-table .col-item.commission-item {
-        width: 240px;
-        min-width: 240px;
-    }
+    <div class="panel panel-default panel-intro">
+        <div class="panel-heading">
+            <h3 class="panel-title">
+                <i class="fa fa-cog"></i> 佣金设置
+            </h3>
+        </div>
+        <div class="panel-body">
+            
+            <!-- 基础设置 -->
+            <div class="form-group">
+                <label class="control-label col-xs-12 col-sm-2">是否参与:</label>
+                <div class="col-xs-12 col-sm-8">
+                    <div class="radio">
+                        <label for="participate_no">
+                            <input id="participate_no" name="status" type="radio" value="0" checked=""> 不参与
+                        </label>
+                    </div>
+                    <div class="radio">
+                        <label for="participate_yes">
+                            <input id="participate_yes" name="status" type="radio" value="1"> 参与
+                        </label>
+                    </div>
+                </div>
+            </div>
 
-    .goods-form .batch-edit {
-        color: var(--el-color-primary);
-        margin-left: 8px;
-    }
+            <div class="form-group">
+                <label class="control-label col-xs-12 col-sm-2">分销商业绩:</label>
+                <div class="col-xs-12 col-sm-8">
+                    <div class="radio">
+                        <label for="order_status_no">
+                            <input id="order_status_no" name="order_status" type="radio" value="0"> 不计入
+                        </label>
+                    </div>
+                    <div class="radio">
+                        <label for="order_status_yes">
+                            <input id="order_status_yes" name="order_status" type="radio" value="1" checked=""> 计入
+                        </label>
+                    </div>
+                </div>
+            </div>
 
-    .commission-popover .commission-item {
-        margin-bottom: 12px;
-    }
+            <div class="form-group">
+                <label class="control-label col-xs-12 col-sm-2">佣金规则:</label>
+                <div class="col-xs-12 col-sm-8">
+                    <div class="radio">
+                        <label for="rule_default">
+                            <input id="rule_default" name="rule_type" type="radio" value="0" checked=""> 默认规则
+                        </label>
+                    </div>
+                    <div class="radio">
+                        <label for="rule_custom">
+                            <input id="rule_custom" name="rule_type" type="radio" value="1"> 独立规则
+                        </label>
+                    </div>
+                    <div class="radio">
+                        <label for="rule_batch">
+                            <input id="rule_batch" name="rule_type" type="radio" value="2"> 批量规则
+                        </label>
+                    </div>
+                </div>
+            </div>
 
-    .commission-popover .commission-item .el-input {
-        margin-right: 12px;
-    }
+            <div class="form-group">
+                <label class="control-label col-xs-12 col-sm-2">分销自购:</label>
+                <div class="col-xs-12 col-sm-8">
+                    <div class="radio">
+                        <label for="self_buy_off">
+                            <input id="self_buy_off" name="self_buy" type="radio" value="0" checked=""> 关闭
+                        </label>
+                    </div>
+                    <div class="radio">
+                        <label for="self_buy_on">
+                            <input id="self_buy_on" name="self_buy" type="radio" value="1"> 开启
+                        </label>
+                    </div>
+                </div>
+            </div>
 
-    .commission-popover .commission-item .el-input:last-of-type {
-        margin-right: 0;
-    }
-</style>
+            <div class="form-group">
+                <label class="control-label col-xs-12 col-sm-2">商品结算方式:</label>
+                <div class="col-xs-12 col-sm-8">
+                    <div class="radio">
+                        <label for="settlement_goods_price">
+                            <input id="settlement_goods_price" name="settlement_type" type="radio" value="0" checked=""> 商品价
+                        </label>
+                    </div>
+                    <div class="radio">
+                        <label for="settlement_actual_price">
+                            <input id="settlement_actual_price" name="settlement_type" type="radio" value="1"> 实际支付价
+                        </label>
+                    </div>
+                </div>
+            </div>
 
-<div id="addEdit" class="goods-form" v-cloak>
-    <el-container class="panel-block">
-        <el-main>
-            <el-scrollbar height="100%">
-                <div class="sa-title is-line">商品信息</div>
-                <div v-for="goods in state.data?.goods" :key="goods">
-                    <div class="goods-item sa-flex sa-col-top">
-                        <sa-image class="mr-2" :url="goods.image" size="48"></sa-image>
-                        <div>
-                            <div class="goods-title sa-table-line-1">
-                                {{ goods.title }}
-                            </div>
-                            <div v-if="goods.is_sku" class="goods-sku">
-                                {{ goods.is_sku ? '多规格' : '' }}
-                            </div>
-                        </div>
+            <div class="form-group">
+                <label class="control-label col-xs-12 col-sm-2">佣金结算方式:</label>
+                <div class="col-xs-12 col-sm-8">
+                    <div class="radio">
+                        <label for="commission_after_pay">
+                            <input id="commission_after_pay" name="commission_settlement" type="radio" value="0" checked=""> 支付后结算
+                        </label>
+                    </div>
+                    <div class="radio">
+                        <label for="commission_after_confirm">
+                            <input id="commission_after_confirm" name="commission_settlement" type="radio" value="1"> 确认收货结算
+                        </label>
+                    </div>
+                    <div class="radio">
+                        <label for="commission_after_complete">
+                            <input id="commission_after_complete" name="commission_settlement" type="radio" value="2"> 订单完成结算
+                        </label>
+                    </div>
+                    <div class="radio">
+                        <label for="commission_manual">
+                            <input id="commission_manual" name="commission_settlement" type="radio" value="3"> 手动打款
+                        </label>
                     </div>
                 </div>
-                <div class="sa-title is-line">佣金设置</div>
-                <el-form label-width="120px">
-                    <el-form-item label="是否参与">
-                        <el-radio-group v-model="state.commission_goods.status">
-                            <el-radio :label="0">不参与</el-radio>
-                            <el-radio :label="1">参与</el-radio>
-                        </el-radio-group>
-                    </el-form-item>
-                    <el-form-item label="分销商业绩">
-                        <el-radio-group v-model="state.commission_goods.commission_order_status">
-                            <el-radio :label="0">不计入</el-radio>
-                            <el-radio :label="1">
-                                <span class="sa-flex">
-                                    计入
-                                    <el-popover placement="top" :width="310" content="关闭则只分佣,不计入分销订单金额和订单数">
-                                        <template #reference>
-                                            <el-icon class="warning sa-m-l-8">
-                                                <warning />
-                                            </el-icon>
-                                        </template>
-                                    </el-popover>
-                                </span>
-                            </el-radio>
-                        </el-radio-group>
-                    </el-form-item>
-                    <el-form-item label="佣金规则">
-                        <el-radio-group v-model="state.commission_goods.self_rules" @change="onChangeSelfRules">
-                            <el-radio :label="0">默认规则</el-radio>
-                            <el-radio :label="1" v-if="state.rulesType != 'batch'">独立规则</el-radio>
-                            <el-radio :label="2">批量规则</el-radio>
-                        </el-radio-group>
-                    </el-form-item>
-                    <el-form-item
-                        v-if="state.commission_goods.self_rules == 1 || state.commission_goods.self_rules == 2"
-                        label="分销设置">
-                        <el-switch v-model="state.commission_config_temp.status"
-                            @change="onChangeCommissionConfigStatus" :active-value="1" :inactive-value="0" />
-                        <span class="sa-m-l-8">
-                            {{ state.commission_config_temp.status ? '自定义' : '默认' }}
-                        </span>
-                    </el-form-item>
-                    <el-form-item label="分销层级">
-                        <el-radio-group v-model="state.commission_config_temp.level"
-                            :disabled="state.commission_config_temp.status == 0">
-                            <el-radio :label="1">一级</el-radio>
-                            <el-radio :label="2">二级</el-radio>
-                            <el-radio :label="3">三级</el-radio>
-                        </el-radio-group>
-                    </el-form-item>
-                    <el-form-item label="分销自购">
-                        <div>
-                            <el-radio-group v-model="state.commission_config_temp.self_buy"
-                                :disabled="state.commission_config_temp.status == 0">
-                                <el-radio :label="0">关闭</el-radio>
-                                <el-radio :label="1">开启</el-radio>
-                            </el-radio-group>
-                            <div class="tip"> 分销自购开启后,分销商自己购买时,下单可以给自己返佣 </div>
-                        </div>
-                    </el-form-item>
-                    <el-form-item label="商品结算方式">
-                        <div>
-                            <el-radio-group v-model="state.commission_config_temp.reward_type"
-                                :disabled="state.commission_config_temp.status == 0">
-                                <el-radio label="goods_price">商品价</el-radio>
-                                <el-radio label="pay_price">实际支付价</el-radio>
-                            </el-radio-group>
-                            <div class="tip">
-                                商品价: 商品实际售价/规格价,实际支付价:实际支付的费用(不含运费)
-                            </div>
-                        </div>
-                    </el-form-item>
-                    <el-form-item label="佣金结算方式">
-                        <el-radio-group v-model="state.commission_config_temp.reward_event"
-                            :disabled="state.commission_config_temp.status == 0">
-                            <el-radio label="paid">支付后结算</el-radio>
-                            <el-radio label="confirm">确认收货结算</el-radio>
-                            <el-radio label="finish">订单完成结算</el-radio>
-                            <el-radio label="admin">手动打款</el-radio>
-                        </el-radio-group>
-                    </el-form-item>
-                    <div class="commission-table">
-                        <template v-if="state.commission_goods.self_rules == 0">
-                            <div class="commission-header sa-flex">
-                                <div class="col-item">分销等级名称</div>
-                                <template v-for="commission in state.commission_config_temp.level" :key="commission">
-                                    <div v-if="commission == 1" class="col-item commission-item">
-                                        一级(自购)佣金比例
-                                    </div>
-                                    <div v-if="commission == 2" class="col-item commission-item"> 二级佣金比例 </div>
-                                    <div v-if="commission == 3" class="col-item commission-item"> 三级佣金比例 </div>
-                                </template>
-                            </div>
-                            <div class="commission-content sa-flex" v-for="level in state.levelData" :key="level">
-                                <div class="col-item">{{ level.name }}</div>
-                                <template v-for="commission in state.commission_config_temp.level" :key="commission">
-                                    <div class="col-item commission-item">
-                                        {{ level.commission_rules[`commission_${commission}`] }}%
-                                    </div>
-                                </template>
-                            </div>
-                        </template>
-                        <template v-if="state.commission_goods.self_rules == 1">
-                            <div class="commission-header sa-flex">
-                                <div class="col-item">商品规格</div>
-                                <div class="col-item">价格</div>
-                                <div class="col-item">分销等级名称</div>
-                                <template v-for="commission in state.commission_config_temp.level" :key="commission">
-                                    <div class="col-item commission-item">
-                                        <template v-if="commission == 1">一级(自购)佣金比例</template>
-                                        <template v-if="commission == 2">二级佣金比例</template>
-                                        <template v-if="commission == 3">三级佣金比例</template>
-                                        <el-popover popper-class="commission-popover"
-                                            v-model:visible="commissionPopover.flag[commission]" placement="top"
-                                            :width="220" trigger="click">
-                                            <div class="commission-item sa-flex">
-                                                <el-input v-model="commissionPopover.form.rate" type="number"
-                                                    :disabled="commissionPopover.form.money != ''">
-                                                    <template #append>%</template>
-                                                </el-input>
-                                                <el-input v-model="commissionPopover.form.money" type="number"
-                                                    :disabled="commissionPopover.form.rate != ''">
-                                                    <template #append>元</template>
-                                                </el-input>
-                                            </div>
-                                            <div class="sa-flex sa-row-right">
-                                                <el-button class="is-link" type="primary" size="small"
-                                                    @click="onCancelCommissionPopover(commission)">取消</el-button>
-                                                <el-button type="primary" size="small"
-                                                    @click="onConfirmCommissionPopover(commission)">确定</el-button>
-                                            </div>
-                                            <template #reference>
-                                                <el-icon class="batch-edit">
-                                                    <edit />
-                                                </el-icon>
-                                            </template>
-                                        </el-popover>
-                                    </div>
-                                </template>
-                            </div>
-                            <div class="commission-content sa-flex">
-                                <div class="sa-flex sa-flex-col">
-                                    <div class="sa-flex" v-for="sku in state.detailData.sku_prices" :key="sku">
-                                        <div class="col-item" :style="{ height: 48 * state.levelData.length + 'px' }">
-                                            {{ state.detailData?.is_sku ? sku.goods_sku_text.join(',') : '默认规格' }}
-                                        </div>
-                                        <div class="col-item" :style="{ height: 48 * state.levelData.length + 'px' }">
-                                            {{ sku.price }}
-                                        </div>
-                                        <div>
-                                            <div class="col-item" v-for="level in state.levelData" :key="level">
-                                                {{ level.name }}
-                                            </div>
-                                        </div>
-                                    </div>
-                                </div>
-                                <div>
-                                    <div v-for="sku in state.commission_goods.commission_rules" :key="sku">
-                                        <div class="sa-flex" v-for="level in sku" :key="level">
-                                            <template v-for="commission in state.commission_config_temp.level"
-                                                :key="commission">
-                                                <div v-if="level[commission]" class="col-item commission-item">
-                                                    <el-input v-model="level[commission].rate" type="number"
-                                                        :disabled="level[commission].money != ''">
-                                                        <template #append>%</template>
-                                                    </el-input>
-                                                    <el-input v-model="level[commission].money" type="number"
-                                                        :disabled="level[commission].rate != ''">
-                                                        <template #append>元</template>
-                                                    </el-input>
-                                                </div>
-                                            </template>
-                                        </div>
-                                    </div>
-                                </div>
-                            </div>
-                        </template>
-                        <template v-if="state.commission_goods.self_rules == 2">
-                            <div class="commission-header sa-flex">
-                                <div class="col-item">分销等级名称</div>
-                                <template v-for="commission in state.commission_config_temp.level" :key="commission">
-                                    <div class="col-item commission-item">
-                                        <template v-if="commission == 1">一级(自购)佣金比例</template>
-                                        <template v-if="commission == 2">二级佣金比例</template>
-                                        <template v-if="commission == 3">三级佣金比例</template>
-                                        <el-popover popper-class="commission-popover"
-                                            v-model:visible="commissionPopover.flag[commission]" placement="top"
-                                            :width="220" trigger="click">
-                                            <div class="commission-item sa-flex">
-                                                <el-input v-model="commissionPopover.form.rate" type="number"
-                                                    :disabled="commissionPopover.form.money != ''">
-                                                    <template #append>%</template>
-                                                </el-input>
+            </div>
+
+            <!-- 佣金规则设置(独立规则或批量规则时显示) -->
+            <div id="commission-rules-container" style="display: none;">
+                <div class="form-group">
+                    <label class="control-label col-xs-12 col-sm-2">佣金比例设置:</label>
+                    <div class="col-xs-12 col-sm-10">
+                        <div class="table-responsive">
+                            <table class="table table-bordered table-hover" id="commission-rules-table">
+                                <thead>
+                                    <tr>
+                                        <th width="150">分销等级名称</th>
+                                        <th>一级佣金比例</th>
+                                        <th>二级佣金比例</th>
+                                        <th>三级佣金比例</th>
+                                    </tr>
+                                </thead>
+                                <tbody>
+                                    {volist name="level_list" id="level"}
+                                    <tr>
+                                        <td><strong>{$level.name}</strong></td>
+                                        <td>
+                                            <div class="input-group">
+                                                <select name="commission_rules[{$level.level}][1][type]" class="form-control commission-type-select" style="width: 80px;">
+                                                    <option value="rate">比例(%)</option>
+                                                    <option value="money">固定(元)</option>
+                                                </select>
+                                                <input type="number" name="commission_rules[{$level.level}][1][value]" class="form-control" step="0.01" min="0" placeholder="0.00">
                                             </div>
-                                            <div class="sa-flex sa-row-right">
-                                                <el-button class="is-link" type="primary" size="small"
-                                                    @click="onCancelCommissionPopover(commission)">取消</el-button>
-                                                <el-button size="small" type="primary"
-                                                    @click="onConfirmCommissionPopover(commission)">确定</el-button>
+                                        </td>
+                                        <td>
+                                            <div class="input-group">
+                                                <select name="commission_rules[{$level.level}][2][type]" class="form-control commission-type-select" style="width: 80px;">
+                                                    <option value="rate">比例(%)</option>
+                                                    <option value="money">固定(元)</option>
+                                                </select>
+                                                <input type="number" name="commission_rules[{$level.level}][2][value]" class="form-control" step="0.01" min="0" placeholder="0.00">
                                             </div>
-                                            <template #reference>
-                                                <el-icon class="batch-edit">
-                                                    <edit />
-                                                </el-icon>
-                                            </template>
-                                        </el-popover>
-                                    </div>
-                                </template>
-                            </div>
-                            <div class="commission-content sa-flex">
-                                <div>
-                                    <div class="col-item" v-for="level in state.levelData" :key="level">
-                                        {{ level.name }}
-                                    </div>
-                                </div>
-                                <div>
-                                    <div class="sa-flex" v-for="level in state.commission_goods.commission_rules"
-                                        :key="level">
-                                        <template v-for="commission in state.commission_config_temp.level"
-                                            :key="commission">
-                                            <div v-if="level[commission]" class="col-item commission-item">
-                                                <el-input v-model="level[commission].rate" type="number"
-                                                    :disabled="level[commission].money != ''">
-                                                    <template #append>%</template>
-                                                </el-input>
+                                        </td>
+                                        <td>
+                                            <div class="input-group">
+                                                <select name="commission_rules[{$level.level}][3][type]" class="form-control commission-type-select" style="width: 80px;">
+                                                    <option value="rate">比例(%)</option>
+                                                    <option value="money">固定(元)</option>
+                                                </select>
+                                                <input type="number" name="commission_rules[{$level.level}][3][value]" class="form-control" step="0.01" min="0" placeholder="0.00">
                                             </div>
-                                        </template>
-                                    </div>
-                                </div>
-                            </div>
-                        </template>
+                                        </td>
+                                    </tr>
+                                    {/volist}
+                                </tbody>
+                            </table>
+                        </div>
+                        <p class="help-block">说明:比例佣金按百分比计算,固定佣金按每件商品计算</p>
                     </div>
-                </el-form>
-            </el-scrollbar>
-        </el-main>
-        <el-footer class="sa-footer--submit sa-flex sa-row-right">
-            <el-button type="primary" @click="onConfirm">确定</el-button>
-        </el-footer>
-    </el-container>
-</div>
+                </div>
+            </div>
+        </div>
+    </div>
+
+    <div class="form-group layer-footer">
+        <label class="control-label col-xs-12 col-sm-2"></label>
+        <div class="col-xs-12 col-sm-8">
+            <button type="submit" class="btn btn-success btn-embossed disabled">{:__('OK')}</button>
+            <button type="reset" class="btn btn-default btn-embossed">{:__('Reset')}</button>
+        </div>
+    </div>
+
+</form>
+
+<script>
+$(document).ready(function() {
+    
+    // 佣金规则类型切换
+    $('input[name="rule_type"]').on('change', function() {
+        var ruleType = $(this).val();
+        var rulesContainer = $('#commission-rules-container');
+        
+        if (ruleType == '1' || ruleType == '2') { // 独立规则或批量规则
+            rulesContainer.show();
+        } else {
+            rulesContainer.hide();
+        }
+    });
+    
+    // 初始化规则显示状态
+    var checkedRuleType = $('input[name="rule_type"]:checked').val();
+    if (checkedRuleType == '1' || checkedRuleType == '2') {
+        $('#commission-rules-container').show();
+    }
+    
+    // 表单提交处理
+    $('#edit-form').on('submit', function(e) {
+        e.preventDefault();
+        
+        var formData = $(this).serialize();
+        
+        Fast.api.ajax({
+            url: $(this).attr('action') || window.location.href,
+            type: 'POST',
+            data: formData
+        }, function(data, ret) {
+            Fast.api.close();
+        }, function(data, ret) {
+            console.error('保存失败:', ret.msg);
+        });
+    });
+    
+    // 初始化已有数据
+    {if condition="isset($goods_list[0]['commission_goods'])"}
+    var commissionData = {$goods_list[0]['commission_goods']|json_encode};
+    if (commissionData) {
+        // 设置基础选项
+        if (commissionData.status !== undefined) {
+            $('input[name="status"][value="' + commissionData.status + '"]').prop('checked', true);
+        }
+        if (commissionData.order_status !== undefined) {
+            $('input[name="order_status"][value="' + commissionData.order_status + '"]').prop('checked', true);
+        }
+        if (commissionData.rule_type !== undefined) {
+            $('input[name="rule_type"][value="' + commissionData.rule_type + '"]').prop('checked', true).trigger('change');
+        }
+        if (commissionData.self_buy !== undefined) {
+            $('input[name="self_buy"][value="' + commissionData.self_buy + '"]').prop('checked', true);
+        }
+        if (commissionData.settlement_type !== undefined) {
+            $('input[name="settlement_type"][value="' + commissionData.settlement_type + '"]').prop('checked', true);
+        }
+        if (commissionData.commission_settlement !== undefined) {
+            $('input[name="commission_settlement"][value="' + commissionData.commission_settlement + '"]').prop('checked', true);
+        }
+    }
+    {/if}
+    
+});
+</script>

+ 1 - 0
application/admin/view/commission/goods/index.html

@@ -7,6 +7,7 @@
                 <div class="widget-body no-padding">
                     <div id="toolbar" class="toolbar">
                         <a href="javascript:;" class="btn btn-primary btn-refresh" title="{:__('Refresh')}" ><i class="fa fa-refresh"></i> </a>
+                        <a href="javascript:;" class="btn btn-success btn-batch-commission" title="批量设置佣金"><i class="fa fa-cog"></i> 批量设置佣金</a>
                     </div>
                     <table id="table" class="table table-striped table-bordered table-hover table-nowrap"
                            data-operate-edit="{:$auth->check('commission/goods/edit')}"

+ 266 - 0
application/common/Enum/CommissionGoodsEnum.php

@@ -0,0 +1,266 @@
+<?php
+
+namespace app\common\Enum;
+
+/**
+ * 分销商品枚举类
+ */
+class CommissionGoodsEnum
+{
+    // ===================== 基础状态 =====================
+    
+    /**
+     * 是否参与分销
+     */
+    const PARTICIPATE_NO = 0;   // 不参与
+    const PARTICIPATE_YES = 1;  // 参与
+    
+    public static $participateList = [
+        self::PARTICIPATE_NO => '不参与',
+        self::PARTICIPATE_YES => '参与'
+    ];
+    
+    public static $participateColorList = [
+        self::PARTICIPATE_NO => 'danger',
+        self::PARTICIPATE_YES => 'success'
+    ];
+
+    // ===================== 分销商业绩 =====================
+    
+    /**
+     * 是否计入业绩
+     */
+    const ORDER_STATUS_NO = 0;   // 不计入
+    const ORDER_STATUS_YES = 1;  // 计入
+    
+    public static $orderStatusList = [
+        self::ORDER_STATUS_NO => '不计入',
+        self::ORDER_STATUS_YES => '计入'
+    ];
+    
+    public static $orderStatusColorList = [
+        self::ORDER_STATUS_NO => 'danger',
+        self::ORDER_STATUS_YES => 'success'
+    ];
+
+    // ===================== 佣金规则类型 =====================
+    
+    /**
+     * 佣金规则类型
+     */
+    const RULE_TYPE_DEFAULT = 0;  // 默认规则
+    const RULE_TYPE_CUSTOM = 1;   // 独立规则
+    const RULE_TYPE_BATCH = 2;    // 批量规则
+    
+    public static $ruleTypeList = [
+        self::RULE_TYPE_DEFAULT => '默认规则',
+        self::RULE_TYPE_CUSTOM => '独立规则', 
+        self::RULE_TYPE_BATCH => '批量规则'
+    ];
+
+    // ===================== 分销层级 =====================
+    
+    /**
+     * 分销层级
+     */
+    const LEVEL_1 = 1;  // 一级
+    const LEVEL_2 = 2;  // 二级
+    const LEVEL_3 = 3;  // 三级
+    
+    public static $levelList = [
+        self::LEVEL_1 => '一级',
+        self::LEVEL_2 => '二级',
+        self::LEVEL_3 => '三级'
+    ];
+
+    // ===================== 分销自购 =====================
+    
+    /**
+     * 分销自购
+     */
+    const SELF_BUY_OFF = 0;  // 关闭
+    const SELF_BUY_ON = 1;   // 开启
+    
+    public static $selfBuyList = [
+        self::SELF_BUY_OFF => '关闭',
+        self::SELF_BUY_ON => '开启'
+    ];
+    
+    public static $selfBuyColorList = [
+        self::SELF_BUY_OFF => 'danger',
+        self::SELF_BUY_ON => 'success'
+    ];
+
+    // ===================== 商品结算方式 =====================
+    
+    /**
+     * 商品结算方式
+     */
+    const SETTLEMENT_GOODS_PRICE = 0;  // 商品价
+    const SETTLEMENT_ACTUAL_PRICE = 1; // 实际支付价
+    
+    public static $settlementList = [
+        self::SETTLEMENT_GOODS_PRICE => '商品价',
+        self::SETTLEMENT_ACTUAL_PRICE => '实际支付价'
+    ];
+
+    // ===================== 佣金结算方式 =====================
+    
+    /**
+     * 佣金结算方式
+     */
+    const COMMISSION_AFTER_PAY = 0;      // 支付后结算
+    const COMMISSION_AFTER_CONFIRM = 1;  // 确认收货结算
+    const COMMISSION_AFTER_COMPLETE = 2; // 订单完成结算
+    const COMMISSION_MANUAL = 3;         // 手动打款
+    
+    public static $commissionSettlementList = [
+        self::COMMISSION_AFTER_PAY => '支付后结算',
+        self::COMMISSION_AFTER_CONFIRM => '确认收货结算',
+        self::COMMISSION_AFTER_COMPLETE => '订单完成结算',
+        self::COMMISSION_MANUAL => '手动打款'
+    ];
+
+    // ===================== 佣金类型 =====================
+    
+    /**
+     * 佣金类型
+     */
+    const COMMISSION_TYPE_RATE = 'rate';   // 比例
+    const COMMISSION_TYPE_MONEY = 'money'; // 固定金额
+    
+    public static $commissionTypeList = [
+        self::COMMISSION_TYPE_RATE => '比例(%)',
+        self::COMMISSION_TYPE_MONEY => '固定金额(元)'
+    ];
+
+    // ===================== 辅助方法 =====================
+    
+    /**
+     * 获取参与状态文本
+     */
+    public static function getParticipateText($value)
+    {
+        return self::$participateList[$value] ?? '不参与';
+    }
+    
+    /**
+     * 获取参与状态颜色
+     */
+    public static function getParticipateColor($value)
+    {
+        return self::$participateColorList[$value] ?? 'danger';
+    }
+    
+    /**
+     * 获取业绩状态文本
+     */
+    public static function getOrderStatusText($value)
+    {
+        return self::$orderStatusList[$value] ?? '不计入';
+    }
+    
+    /**
+     * 获取业绩状态颜色
+     */
+    public static function getOrderStatusColor($value)
+    {
+        return self::$orderStatusColorList[$value] ?? 'danger';
+    }
+    
+    /**
+     * 获取规则类型文本
+     */
+    public static function getRuleTypeText($value)
+    {
+        return self::$ruleTypeList[$value] ?? '默认规则';
+    }
+    
+    /**
+     * 获取层级文本
+     */
+    public static function getLevelText($value)
+    {
+        return self::$levelList[$value] ?? '一级';
+    }
+    
+    /**
+     * 获取自购状态文本
+     */
+    public static function getSelfBuyText($value)
+    {
+        return self::$selfBuyList[$value] ?? '关闭';
+    }
+    
+    /**
+     * 获取自购状态颜色
+     */
+    public static function getSelfBuyColor($value)
+    {
+        return self::$selfBuyColorList[$value] ?? 'danger';
+    }
+    
+    /**
+     * 获取结算方式文本
+     */
+    public static function getSettlementText($value)
+    {
+        return self::$settlementList[$value] ?? '商品价';
+    }
+    
+    /**
+     * 获取佣金结算方式文本
+     */
+    public static function getCommissionSettlementText($value)
+    {
+        return self::$commissionSettlementList[$value] ?? '支付后结算';
+    }
+    
+    /**
+     * 获取佣金类型文本
+     */
+    public static function getCommissionTypeText($value)
+    {
+        return self::$commissionTypeList[$value] ?? '比例(%)';
+    }
+    
+    /**
+     * 验证参与状态值
+     */
+    public static function isValidParticipate($value)
+    {
+        return in_array($value, [self::PARTICIPATE_NO, self::PARTICIPATE_YES]);
+    }
+    
+    /**
+     * 验证业绩状态值
+     */
+    public static function isValidOrderStatus($value)
+    {
+        return in_array($value, [self::ORDER_STATUS_NO, self::ORDER_STATUS_YES]);
+    }
+    
+    /**
+     * 验证规则类型值
+     */
+    public static function isValidRuleType($value)
+    {
+        return in_array($value, [self::RULE_TYPE_DEFAULT, self::RULE_TYPE_CUSTOM, self::RULE_TYPE_BATCH]);
+    }
+    
+    /**
+     * 验证层级值
+     */
+    public static function isValidLevel($value)
+    {
+        return in_array($value, [self::LEVEL_1, self::LEVEL_2, self::LEVEL_3]);
+    }
+    
+    /**
+     * 验证佣金类型值
+     */
+    public static function isValidCommissionType($value)
+    {
+        return in_array($value, [self::COMMISSION_TYPE_RATE, self::COMMISSION_TYPE_MONEY]);
+    }
+}

+ 15 - 0
application/common/model/Goods.php

@@ -233,5 +233,20 @@ class Goods extends Model
         return $this->belongsTo('Brand', 'brand_id', 'id', [], 'LEFT');
     }
     
+    /**
+     * 关联分销商品配置
+     */
+    public function CommissionGoods()
+    {
+        return $this->hasOne('app\common\model\commission\CommissionGoods', 'goods_id', 'id');
+    }
+    
+    /**
+     * 关联分销商品配置(别名)
+     */
+    public function commission_goods()
+    {
+        return $this->hasOne('app\common\model\commission\CommissionGoods', 'goods_id', 'id');
+    }
    
 }

+ 101 - 38
public/assets/js/backend/commission/goods.js

@@ -11,7 +11,7 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
                     del_url: 'commission/goods/del',
                     multi_url: 'commission/goods/multi',
                     import_url: 'commission/goods/import',
-                    table: 'commission_goods',
+                    table: 'shop_goods',
                 }
             });
 
@@ -20,64 +20,111 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
             // 初始化表格
             table.bootstrapTable({
                 url: $.fn.bootstrapTable.defaults.extend.index_url,
-                pk: 'goods_id',
-                sortName: 'goods_id',
+                pk: 'id',
+                sortName: 'id',
+                sortable: true,
+                sort: 'desc',
                 columns: [
                     [
                         {checkbox: true},
-                        {field: 'goods_id', title: __('商品ID'), width: 80},
-                        {field: 'title', title: __('商品名称'), operate: 'LIKE'},
-                        {field: 'image', title: __('商品图片'), operate: false, events: Table.api.events.image, formatter: Table.api.formatter.image},
-                        {field: 'price', title: __('商品价格'), operate: 'BETWEEN'},
-                        {field: 'commission_goods.status', title: __('分销状态'), searchList: {
-                            "0": __('不参与分销'),
-                            "1": __('参与分销')
-                        }, formatter: function(value, row, index) {
-                            var statusMap = {
-                                '0': {text: '不参与分销', color: 'danger'},
-                                '1': {text: '参与分销', color: 'success'}
-                            };
-                            var status = statusMap[value] || {text: '不参与分销', color: 'danger'};
-                            return '<span class="label label-' + status.color + '">' + status.text + '</span>';
+                        {field: 'id', title: __('ID'), width: 80},
+                        {field: 'title', title: __('商品信息'), operate: 'LIKE', width: 350, formatter: function(value, row, index) {
+                            var html = '<div style="display: flex; align-items: center; padding: 5px 0;">';
+                            
+                            // 商品图片
+                            var imageUrl = row.image || '/assets/img/goods-default.png';
+                            html += '<div style="margin-right: 12px; flex-shrink: 0;">';
+                            html += '<img src="' + imageUrl + '" style="width: 60px; height: 60px; object-fit: cover; border-radius: 4px; border: 1px solid #e9ecef;" />';
+                            html += '</div>';
+                            
+                            // 商品信息
+                            html += '<div style="flex: 1; min-width: 0;">';
+                            
+                            // 商品标题
+                            var goodsTitle = row.title || '-';
+                            html += '<div style="color: #337ab7; font-weight: bold; margin-bottom: 4px; line-height: 1.4;">';
+                            html += '<a href="javascript:;" class="goods-title" style="color: #337ab7; text-decoration: none;">';
+                            html += goodsTitle;
+                            html += '</a></div>';
+                            
+                            // 商品副标题/描述
+                            if (row.subtitle) {
+                                html += '<div style="color: #6c757d; font-size: 12px; margin-bottom: 4px; line-height: 1.2;">' + row.subtitle + '</div>';
+                            }
+                            
+                            // 商品分类或其他信息
+                            html += '<div style="color: #999; font-size: 11px;">';
+                            html += 'ID: ' + row.id;
+                            if (row.category_name) {
+                                html += ' | ' + row.category_name;
+                            }
+                            html += '</div>';
+                            
+                            html += '</div></div>';
+                            return html;
                         }},
-                        {field: 'commission_goods.self_rules', title: __('独立设置'), formatter: function(value, row, index) {
-                            var selfRulesMap = {
-                                '0': {text: '否', color: 'info'},
-                                '1': {text: '是', color: 'success'}
+                        {field: 'price', title: __('价格'), operate: 'BETWEEN', width: 100},
+                        {field: 'commission_goods.rule_type', title: __('分销规则'), width: 120, formatter: function(value, row, index) {
+                            // 如果没有分销配置,默认为不参与
+                            if (!row.commission_goods) {
+                                return '<span class="label label-danger">不参与</span>';
+                            }
+                            
+                            var participateStatus = row.commission_goods.status;
+                            if (participateStatus == 0) {
+                                return '<span class="label label-danger">不参与</span>';
+                            }
+                            
+                            var ruleTypeList = Config.commission_goods_rule_type_list || {
+                                '0': '默认规则',
+                                '1': '独立规则',
+                                '2': '批量规则'
                             };
-                            var selfRules = selfRulesMap[value] || {text: '否', color: 'info'};
-                            return '<span class="label label-' + selfRules.color + '">' + selfRules.text + '</span>';
+                            var colorMap = {
+                                '0': 'info',
+                                '1': 'success',
+                                '2': 'warning'
+                            };
+                            var text = ruleTypeList[value] || '默认规则';
+                            var color = colorMap[value] || 'info';
+                            return '<span class="label label-' + color + '">' + text + '</span>';
                         }},
-                        {field: 'commission_goods.commission_order_status', title: __('是否计入业绩'), formatter: function(value, row, index) {
-                            var orderStatusMap = {
-                                '0': {text: '否', color: 'danger'},
-                                '1': {text: '是', color: 'success'}
+                        {field: 'status', title: __('商品状态'), width: 100, formatter: function(value, row, index) {
+                            var statusMap = {
+                                'normal': {text: '上架中', color: 'success'},
+                                'hidden': {text: '下架', color: 'danger'},
+                                'pulloff': {text: '下架', color: 'danger'}
                             };
-                            var orderStatus = orderStatusMap[value] || {text: '是', color: 'success'};
-                            return '<span class="label label-' + orderStatus.color + '">' + orderStatus.text + '</span>';
+                            var status = statusMap[value] || {text: '未知', color: 'default'};
+                            return '<span class="label label-' + status.color + '">' + status.text + '</span>';
                         }},
-                        {field: 'operate', title: __('Operate'), table: table, events: Table.api.events.operate, 
+                        {field: 'operate', title: __('操作'), table: table, events: Table.api.events.operate, width: 150,
                          buttons: [
                              {
                                  name: 'detail',
                                  text: __('详情'),
                                  title: __('商品详情'),
-                                 classname: 'btn btn-xs btn-primary btn-dialog',
+                                 classname: 'btn btn-xs btn-primary',
                                  icon: 'fa fa-list',
-                                 url: 'commission/goods/detail',
-                                 callback: function (data) {
-                                     table.bootstrapTable('refresh');
+                                 click: function (data) {
+                                     Fast.api.open('commission/goods/detail?id=' + data.id, '商品详情', {
+                                         area: ['90%', '90%']
+                                     });
                                  }
                              },
                              {
                                  name: 'edit',
                                  text: __('设置佣金'),
                                  title: __('设置佣金'),
-                                 classname: 'btn btn-xs btn-success btn-editone',
+                                 classname: 'btn btn-xs btn-success',
                                  icon: 'fa fa-edit',
-                                 url: 'commission/goods/edit',
-                                 callback: function (data) {
-                                     table.bootstrapTable('refresh');
+                                 click: function (data) {
+                                     Fast.api.open('commission/goods/edit?ids=' + data.id, '设置佣金', {
+                                         area: ['90%', '90%'],
+                                         callback: function(data) {
+                                             table.bootstrapTable('refresh');
+                                         }
+                                     });
                                  }
                              }
                          ], 
@@ -88,6 +135,22 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
 
             // 为表格绑定事件
             Table.api.bindevent(table);
+            
+            // 批量设置佣金
+            $(document).on('click', '.btn-batch-commission', function() {
+                var ids = Table.api.selectedids(table);
+                if (ids.length == 0) {
+                    Toastr.error('请先选择要设置的商品');
+                    return false;
+                }
+                
+                Fast.api.open('commission/goods/edit?ids=' + ids.join(','), '批量设置佣金', {
+                    area: ['90%', '90%'],
+                    callback: function(data) {
+                        table.bootstrapTable('refresh');
+                    }
+                });
+            });
         },
         detail: function () {
             Controller.api.bindevent();