request->param('page', 1)); $limit = intval($this->request->param('limit', $this->request->param('pageSize', 10))); // 兼容 pageSize 参数 $keyword = $this->request->param('keyword', ''); $status = $this->request->param('status', ''); // 确保分页参数有效 if ($page <= 0) $page = 1; if ($limit <= 0) $limit = 10; $where = [ ['isDel', '=', 0] ]; // 关键词搜索 if (!empty($keyword)) { $where[] = ['name', 'like', "%{$keyword}%"]; } // 状态筛选(1=上架,0=下架) if ($status !== '') { $where[] = ['status', '=', intval($status)]; } else { // 默认只显示上架的套餐 $where[] = ['status', '=', 1]; } $list = VendorPackageModel::where($where) ->field('id, userId, companyId, name, originalPrice, price, discount, advancePayment, tags, description, cover, status, createTime, updateTime') ->order('id', 'desc') ->page($page, $limit) ->select(); $total = VendorPackageModel::where($where)->count(); // 格式化返回数据 $result = []; foreach ($list as $item) { $result[] = [ 'id' => intval($item['id']), 'userId' => intval($item['userId'] ?? 0), 'companyId' => intval($item['companyId'] ?? 0), 'name' => $item['name'], 'originalPrice' => floatval($item['originalPrice']), 'price' => floatval($item['price']), 'discount' => $item->discount, 'advancePayment' => floatval($item['advancePayment'] ?? 0), 'tags' => $item->tags, 'description' => $item['description'] ?? '', 'cover' => $item['cover'] ?? '', 'status' => intval($item['status']), 'createTime' => !empty($item['createTime']) && is_numeric($item['createTime']) ? date('Y-m-d H:i:s', intval($item['createTime'])) : '', 'updateTime' => !empty($item['updateTime']) && is_numeric($item['updateTime']) ? date('Y-m-d H:i:s', intval($item['updateTime'])) : '', ]; } return json([ 'code' => 200, 'msg' => '获取成功', 'data' => [ 'list' => $result, 'total' => $total, 'page' => $page, 'limit' => $limit ] ]); } catch (\Exception $e) { Log::error('获取供应商套餐列表失败:' . $e->getMessage()); return json(['code' => 500, 'msg' => '获取失败:' . $e->getMessage()]); } } /** * 获取供应商套餐详情 * GET /v2/store/vendor/detail * * @return \think\response\Json */ public function detail() { try { $id = intval($this->request->param('id', 0)); if (empty($id)) { return json(['code' => 400, 'msg' => '参数错误']); } // 查询套餐基本信息 $package = VendorPackageModel::where([ ['id', '=', $id], ['isDel', '=', 0] ])->find(); if (empty($package)) { return json(['code' => 404, 'msg' => '套餐不存在']); } // 查询项目列表 $projects = VendorProjectModel::where([ ['packageId', '=', $id], ['isDel', '=', 0] ])->select(); // 格式化套餐信息 $packageData = [ 'id' => intval($package['id']), 'userId' => intval($package['userId'] ?? 0), 'companyId' => intval($package['companyId'] ?? 0), 'name' => $package['name'], 'originalPrice' => floatval($package['originalPrice']), 'price' => floatval($package['price']), 'discount' => $package->discount, 'advancePayment' => floatval($package['advancePayment'] ?? 0), 'tags' => $package->tags, 'description' => $package['description'] ?? '', 'cover' => $package['cover'] ?? '', 'status' => intval($package['status']), 'createTime' => !empty($package['createTime']) && is_numeric($package['createTime']) ? date('Y-m-d H:i:s', intval($package['createTime'])) : '', 'updateTime' => !empty($package['updateTime']) && is_numeric($package['updateTime']) ? date('Y-m-d H:i:s', intval($package['updateTime'])) : '', ]; // 格式化项目信息 $projectList = []; foreach ($projects as $project) { $projectList[] = [ 'id' => intval($project['id']), 'packageId' => intval($project['packageId']), 'name' => $project['name'], 'originalPrice' => floatval($project['originalPrice']), 'price' => floatval($project['price']), 'duration' => intval($project['duration'] ?? 0), 'image' => $project['image'] ?? '', 'detail' => $project['detail'] ?? '', ]; } $packageData['projects'] = $projectList; return json(['code' => 200, 'msg' => '获取成功', 'data' => $packageData]); } catch (\Exception $e) { Log::error('获取供应商套餐详情失败:' . $e->getMessage()); return json(['code' => 500, 'msg' => '获取失败:' . $e->getMessage()]); } } /** * 创建供应商订单 * POST /v2/store/vendor/order * * @return \think\response\Json */ public function createOrder() { try { $packageId = intval($this->request->param('packageId', 0)); $remark = $this->request->param('remark', ''); if (empty($packageId)) { return json(['code' => 400, 'msg' => '套餐ID不能为空']); } // 获取用户信息 $userId = $this->userInfo['id'] ?? 0; $companyId = $this->userInfo['companyId'] ?? 0; if (empty($userId)) { return json(['code' => 401, 'msg' => '请先登录']); } if (empty($companyId)) { return json(['code' => 400, 'msg' => '公司信息不存在']); } // 检查套餐是否存在且上架 $package = VendorPackageModel::where([ ['id', '=', $packageId], ['isDel', '=', 0], ['status', '=', 1] ])->find(); if (empty($package)) { return json(['code' => 404, 'msg' => '套餐不存在或已下架']); } // 创建订单 $order = VendorOrderModel::createOrder( $userId, $companyId, $package->id, $package->name, floatval($package->price), floatval($package->price), floatval($package->advancePayment ?? 0), $remark ); if (!$order) { return json(['code' => 500, 'msg' => '订单创建失败']); } return json([ 'code' => 200, 'msg' => '订单创建成功', 'data' => [ 'orderId' => intval($order['id']), 'orderNo' => $order['orderNo'] ] ]); } catch (\Exception $e) { Log::error('创建供应商订单失败:' . $e->getMessage()); return json(['code' => 500, 'msg' => '创建订单失败:' . $e->getMessage()]); } } }