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

请求协助:根据数据库查询结果禁用模态框表单字段

问题分析与代码修正

我来帮你一步步梳理并修正代码里的问题,让你想要的功能正常跑起来:

1. 模型代码修正(Prwtrabajadores_model.php)

你的模型函数现在有三个关键问题:

  • 第一行直接return查询结果,导致后面的行数判断逻辑完全不会执行
  • SQL的OR条件写法错误,无法正确匹配目标状态值
  • $query = result();是无效语法,没有正确获取查询对象

修正后的模型代码:

function revisaCertificados($idTrabajador){
    // 先获取查询对象,不要直接return
    $query = $this->db
        ->select("a.idprw_estadocertificado")
        ->from("prw_estadocertificado as a")
        // !!这里必须补充表之间的关联条件,否则会产生笛卡尔积错误!!
        ->join($this->schemaEmpresas."wom_trabajadores as b", "a.trabajador_id = b.idwom_trabajadores")
        ->where("b.idwom_trabajadores", $idTrabajador)
        // 用where_in替代繁琐的OR条件,更简洁高效
        ->where_in("a.idprw_estadocertificado", [1,4,5])
        ->get();
    
    // 判断是否有匹配记录,直接返回布尔值
    return $query->num_rows() > 0;
}

2. 控制器代码修正(对应控制器文件)

当前控制器没有返回任何响应给前端,JS根本拿不到判断结果。需要修改为返回JSON格式的布尔值:

function evaluarTrabajador(){
    $this->load->model("Prwtrabajadores_model");
    $idTrabajador = $this->input->post('idEdit');
    // 调用模型获取检查结果
    $hasCertificados = $this->Prwtrabajadores_model->revisaCertificados($idTrabajador);
    // 返回JSON格式的响应给前端
    echo json_encode(['status' => $hasCertificados]);
}

3. 视图层JS代码修正

现在需要在打开模态框前,先调用检查接口,根据结果禁用指定字段。这里提供两种方案:

方案一:分步请求(先拿数据,再检查状态)

$(".editarT").on("click", function(){
    var id = $(this).data("idtra");
    
    // 第一步:获取员工基础数据并回显
    $.ajax({
        url : "<?php echo site_url('/contratista/ajax_edit/')?>/" + id,
        type: "GET",
        dataType: "JSON",
        success: function(data) {
            // 填充模态框字段
            $('input[name="idEdit"]').val(data[0].idwom_trabajadores);
            $('input[name="rutEdit"]').val(data[0].rut);
            $('input[name="nombresEdit"]').val(data[0].nombres);
            $('input[name="appEdit"]').val(data[0].apellido_paterno);
            $('input[name="apmEdit"]').val(data[0].apellido_materno);
            $('input[name="cargoEdit"]').val(data[0].cargo);
            $('input[name="telefonoEdit"]').val(data[0].telefono);
            $('input[name="mutualEdit"]').val(data[0].mutual);
            
            // 第二步:调用证书检查接口
            $.ajax({
                url : "<?php echo site_url('/contratista/evaluarTrabajador/')?>",
                type: "POST",
                data: {idEdit: id},
                dataType: "JSON",
                success: function(result) {
                    // 如果结果为true,禁用指定字段
                    if(result.status){
                        // 禁用所有输入框,如需保留特定字段可添加:not([name="xxx"])
                        $('#form-modal-editar-trabajador input').prop('disabled', true);
                    }
                    // 打开模态框
                    $('#form-modal-editar-trabajador').modal({show:true});
                },
                error: function () {
                    alert('Error al verificar certificados');
                    // 即使检查失败,也正常打开模态框(可选)
                    $('#form-modal-editar-trabajador').modal({show:true});
                }
            });
        },
        error: function () {
            alert('Error obteniendo datos del trabajador');
        }
    });
});

方案二:合并接口(更高效,减少请求次数)

推荐修改ajax_edit接口,让它同时返回员工数据和证书检查结果:

// 控制器中的ajax_edit函数
function ajax_edit($id){
    // 1. 获取员工基础数据(替换成你原本的查询逻辑)
    $employeeData = $this->你的员工模型->getTrabajadorById($id);
    // 2. 同时检查证书状态
    $hasCertificados = $this->Prwtrabajadores_model->revisaCertificados($id);
    // 3. 返回合并后的结果
    echo json_encode([
        'employee' => $employeeData,
        'hasCertificados' => $hasCertificados
    ]);
}

对应的JS代码简化为:

$(".editarT").on("click", function(){
    var id = $(this).data("idtra");
    
    $.ajax({
        url : "<?php echo site_url('/contratista/ajax_edit/')?>/" + id,
        type: "GET",
        dataType: "JSON",
        success: function(data) {
            // 填充模态框字段
            $('input[name="idEdit"]').val(data.employee[0].idwom_trabajadores);
            $('input[name="rutEdit"]').val(data.employee[0].rut);
            // ... 其他字段赋值
            
            // 根据合并结果禁用字段
            if(data.hasCertificados){
                $('#form-modal-editar-trabajador input').prop('disabled', true);
            }
            
            // 打开模态框
            $('#form-modal-editar-trabajador').modal({show:true});
        },
        error: function () {
            alert('Error obteniendo datos');
        }
    });
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:40:12