getint('page', 1); // 当前页 $pagesize = $post->getint('pagesize', 20); // 每页条数 $offset = ($page - 1) * $pagesize; // 偏移量 $mobile = trim($post->get('mobile', '')); // 手机号筛选 $name = trim($post->get('name', '')); // 姓名筛选 $status = $post->getint('status', 0); // 状态筛选 $role = $post->getint('role', 60); // 角色筛选 // 2. 构建SQL(修复:精简JOIN语句格式,避免语法错误) $csql = new \ciy\sql("lab_user u LEFT JOIN zc_cata s ON u.sex = s.codeid AND s.cbid = 10 LEFT JOIN zc_cata st ON u.stpstatus = st.codeid AND st.cbid = 11 LEFT JOIN zc_cata e ON u.education = e.codeid AND e.cbid = 102 LEFT JOIN zc_cata ut ON u.usertitle = ut.codeid AND ut.cbid = 12001701 LEFT JOIN zc_cata r ON u.role = r.codeid AND r.cbid = 12001703 LEFT JOIN zc_cata rr ON u.userlevel=rr.codeid AND rr.cbid=12001704"); // 配置查询字段(含字典关联中文名称) $csql->column("u.id, u.mobile, u.name, u.usertitle, u.education, u.sex, u.role, u.userlevel, u.stpstatus, u.addtimes, u.logintimes, u.ip, s.name as sex_name, st.name as stpstatus_name, e.name as education_name, ut.name as usertitle_name, r.name as role_name, rr.name as userlevel_name"); // 3. 拼接筛选条件 if (!empty($mobile)) { $csql->where('u.mobile', $mobile); } if (!empty($name)) { $csql->where('u.name', '%' . $name . '%', 'like'); } if ($status > 0) { $csql->where('u.stpstatus', $status); } if ($role > 0) { $csql->where('u.role', $role); } // 4. 排序+分页(正确传参) $csql->order('u.logintimes desc'); $csql->limit($offset, $pagesize); // 5. 执行查询 $list = $db->get($csql); if ($list === false) { return errjson('查询成员列表失败: ' . $db->error); } // 6. 查询总数(修复:移除limit方法,而非传0,0) $countSql = clone $csql; $countSql->column('count(DISTINCT u.id) as total'); // 关键修复:删除limit(0,0),ciy\sql默认无limit $total = $db->get1($countSql); // 7. 返回结果 return succjson([ 'list' => $list ?: [], 'total' => $total ?: 0, 'page' => $page, 'pagesize' => $pagesize ]); } /** * 获取成员详情(含字典中文名称) * @return array */ public static function json_get_detail() { global $db; $post = new \ciy\post(); $id = $post->getint('id'); if ($id <= 0) { return errjson('请传入有效的成员ID'); } // 修复:精简JOIN语句格式 $csql = new \ciy\sql("lab_user u LEFT JOIN zc_cata s ON u.sex = s.codeid AND s.cbid = 10 LEFT JOIN zc_cata st ON u.stpstatus = st.codeid AND st.cbid = 11 LEFT JOIN zc_cata e ON u.education = e.codeid AND e.cbid = 102 LEFT JOIN zc_cata ut ON u.usertitle = ut.codeid AND ut.cbid = 12001701 LEFT JOIN zc_cata r ON u.role = r.codeid AND r.cbid = 12001703 LEFT JOIN zc_cata rr ON u.userlevel=rr.codeid AND rr.cbid=12001704"); $csql->column("u.*, s.name as sex_name, st.name as stpstatus_name, e.name as education_name, ut.name as usertitle_name, r.name as role_name, rr.name as userlevel_name"); $csql->where('u.id', $id); $detail = $db->getone($csql); if ($detail === false) { return errjson('查询成员详情失败: ' . $db->error); } if (!is_array($detail)) { return errjson('该成员不存在'); } // 补充扩展信息(单表直接传构造函数) $extSql = new \ciy\sql('ap_usr_ext'); $extSql->where('id', $id); $extDetail = $db->getone($extSql); if (is_array($extDetail)) { $detail['appcid'] = $extDetail['appcid']; } return succjson($detail); } /** * 编辑成员信息 * @return array */ public static function json_edit() { global $db; $post = new \ciy\post(); // 参数校验 $id = $post->getint('id'); $name = trim($post->get('name', '')); $usertitle = $post->getint('usertitle', 0); $education = $post->getint('education', 0); $sex = $post->getint('sex', 90); // 优化:role默认值改为0(避免无字典数据) $role = $post->getint('role', 0); $userlevel = $post->getint('userlevel', 10); if ($id <= 0) { return errjson('请传入有效的成员ID'); } if (empty($name)) { return errjson('请填写成员姓名'); } // 组装更新数据 $updata = [ 'name' => $name, 'usertitle' => $usertitle, 'education' => $education, 'sex' => $sex, 'role' => $role, 'userlevel' => $userlevel ]; // 单表操作:构造函数直接传表名 $csql = new \ciy\sql('lab_user'); $csql->where('id', $id); $res = $db->update($csql, $updata); if ($res === false) { savelog($db, 0, 'MEMBEREDIT', '编辑成员[' . $id . ']失败: ' . $db->error); return errjson('编辑成员失败: ' . $db->error); } savelog($db, $id, 'MEMBEREDIT', '编辑成员[' . $id . ']成功'); return succjson(['msg' => '编辑成功']); } /** * 禁用/启用成员 * @return array */ public static function json_change_status() { global $db; $post = new \ciy\post(); $id = $post->getint('id'); $status = $post->getint('status'); if ($id <= 0) { return errjson('请传入有效的成员ID'); } $updata = ['stpstatus' => $status]; $csql = new \ciy\sql('lab_user'); $csql->where('id', $id); $res = $db->update($csql, $updata); if ($res === false) { $action = $status == 10 ? '启用' : '禁用'; savelog($db, 0, 'MEMBERSTATUS', $action . '成员[' . $id . ']失败: ' . $db->error); return errjson($action . '成员失败: ' . $db->error); } $action = $status == 10 ? '启用' : '禁用'; savelog($db, $id, 'MEMBERSTATUS', $action . '成员[' . $id . ']成功'); return succjson(['msg' => $action . '成功']); } /** * 逻辑删除成员(标记deletetimes) * @return array */ public static function json_delete() { global $db; $post = new \ciy\post(); $id = $post->getint('id'); if ($id <= 0) { return errjson('请传入有效的成员ID'); } // 逻辑删除:标记删除时间+禁用状态 $updata = [ 'stpstatus' => 99, // 99:已删除 'deletetimes' => tostamp() // 时间戳 ]; $csql = new \ciy\sql('lab_user'); $csql->where('id', $id); $res = $db->update($csql, $updata); if ($res === false) { savelog($db, 0, 'MEMBERDELETE', '删除成员[' . $id . ']失败: ' . $db->error); return errjson('删除成员失败: ' . $db->error); } savelog($db, $id, 'MEMBERDELETE', '删除成员[' . $id . ']成功'); return succjson(['msg' => '删除成功']); } /** * 重置成员密码(和登录逻辑一致) * @return array */ public static function json_reset_pass() { global $db; global $_token; // 确保全局_token包含salt $post = new \ciy\post(); $id = $post->getint('id'); $newPass = trim($post->get('new_pass', '')); if ($id <= 0) { return errjson('请传入有效的成员ID'); } if (empty($newPass)) { return errjson('请填写新密码'); } // 优化:校验$_token是否存在 if (empty($_token) || empty($_token['salt'])) { return errjson('密码加密配置异常,请联系管理员'); } // 密码加密(和注册逻辑对齐) $encryptPass = md5($newPass . $_token['salt']); $updata = [ 'password' => $encryptPass, 'trytime' => 0 // 重置错误尝试次数 ]; $csql = new \ciy\sql('lab_user'); $csql->where('id', $id); $res = $db->update($csql, $updata); if ($res === false) { savelog($db, 0, 'MEMBERRESETPASS', '重置成员[' . $id . ']密码失败: ' . $db->error); return errjson('重置密码失败: ' . $db->error); } savelog($db, $id, 'MEMBERRESETPASS', '重置成员[' . $id . ']密码成功'); return succjson(['msg' => '重置密码成功']); } /** * 获取字典表数据(用于前端下拉选项) * @return array */ public static function json_get_cata() { global $db; $post = new \ciy\post(); $cbid = $post->getint('cbid'); if ($cbid <= 0) { return errjson('请传入有效的字典分类ID'); } $csql = new \ciy\sql('zc_cata'); $csql->where('cbid', $cbid); $csql->order('codeid asc'); $list = $db->get($csql); if ($list === false) { return errjson('查询字典失败: ' . $db->error); } return succjson(['list' => $list ?: []]); } } global $db; $post = new \ciy\post(); $action = trim($post->get('action', '')); $result = []; // 根据action调用对应方法 switch ($action) { case 'get_list': $result = member::json_get_list(); break; case 'get_detail': $result = member::json_get_detail(); break; case 'edit': $result = member::json_edit(); break; case 'change_status': $result = member::json_change_status(); break; case 'delete': $result = member::json_delete(); break; case 'reset_pass': $result = member::json_reset_pass(); break; case 'get_cata': $result = member::json_get_cata(); break; default: $result = errjson('无效的接口操作: ' . $action); } // 输出JSON结果(前端才能接收数据) header('Content-Type: application/json; charset=utf-8'); echo json_encode($result, JSON_UNESCAPED_UNICODE); exit;