You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CRM系统批量更新销售人员时下拉显示与赋值异常问题

CRM批量更新销售人员时user_id设为Null的问题修复

问题描述

原本CRM系统运行正常,但下拉菜单显示用户ID而非用户名。修改代码后,批量更新销售人员时,Lead的user_id被设置为Null,将value.value改为value.label后问题依旧。

代码问题分析

  1. 下拉选项结构不统一:原getUserDropdownOptions()中,pluck('label', 'value')生成「用户ID为键、用户名为值」的关联数组,与默认选项的数组格式不兼容,导致前端组件解析异常,提交数据结构混乱。
  2. 自定义选项键值颠倒:修改后的prepareMassActions()里,$UserName[$user['name']] = $user['id']将用户名作为键、ID作为值,前端提交的value为用户名,后端仍尝试取value.value,无法获取有效ID。
  3. 后端取值路径不匹配:前端提交的数据结构与后端Arr::get($data, 'value.value')的取值路径不对应,导致取到Null值。

修复方案

  • 统一下拉选项的数组结构,每个选项包含label(显示用用户名)和value(提交用用户ID)字段,与默认选项格式保持一致。
  • 调整后端取值路径,确保正确获取用户ID。
  • 弃用自定义选项生成逻辑,修复原getUserDropdownOptions()方法。

完整修正代码

1. 修复getUserDropdownOptions()方法

public function getUserDropdownOptions(): array
{
    $userOptions = app(\Webkul\User\Repositories\UserRepository::class)
        ->get(['id', 'name'])
        ->map(function ($user) {
            return [
                'label'    => $user->name,
                'value'    => $user->id,
                'disabled' => false,
                'selected' => false,
            ];
        })
        ->toArray();

    return [
        [
            'label'    => __('admin::app.common.select-users'),
            'value'    => '',
            'disabled' => true,
            'selected' => true,
        ],
        ...$userOptions
    ];
}

2. 恢复DataGrid批量动作配置

移除自定义的prepareMassActions()循环逻辑,改用修复后的方法:

$this->addMassAction([
    'type'    => 'update',
    'label'   => trans('admin::app.datagrid.update_salesperson'),
    'action'  => route('admin.leads.mass_update_salesperson'),
    'method'  => 'PUT',
    'options' => $this->getUserDropdownOptions(),
]);

3. 修正后端控制器取值逻辑

public function massUpdateSalesperson()
{
    $data = request()->all();

    // 校验用户选择,避免空值更新
    $userId = Arr::get($data, 'value');
    if (empty($userId)) {
        return response()->json([
            'message' => trans('admin::app.response.select-user-first', ['name' => trans('admin::app.leads.title')])
        ], 400);
    }

    foreach ($data['rows'] as $leadId) {
        $lead = $this->leadRepository->find($leadId);
        $lead->update(['user_id' => $userId]);
        Event::dispatch('lead.update.before', $leadId);
    }

    return response()->json([
        'message' => trans('admin::app.response.update-success', ['name' => trans('admin::app.leads.title')])
    ]);
}

修复说明

  • 统一后的下拉选项结构,前端将显示用户名,提交时传递对应的用户ID。
  • 后端取值路径匹配前端提交结构,确保有效ID赋值给user_id。
  • 新增空值校验,避免未选择用户时执行无效批量更新操作。

内容的提问来源于stack exchange,提问作者corsairdee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 14:35:42