|
|
|
|
@ -16,6 +16,7 @@ use App\Models\CourseContent;
|
|
|
|
|
use App\Models\CourseContentCheck;
|
|
|
|
|
use App\Models\CourseContentEvaluation;
|
|
|
|
|
use App\Models\CourseContentEvaluationForm;
|
|
|
|
|
use App\Models\CourseForm;
|
|
|
|
|
use App\Models\CourseSign;
|
|
|
|
|
use App\Models\CourseType;
|
|
|
|
|
use App\Models\Notice;
|
|
|
|
|
@ -110,13 +111,23 @@ class CourseController extends CommonController
|
|
|
|
|
if ($validator->fails()) {
|
|
|
|
|
return $this->fail([ResponseCode::ERROR_PARAMETER, implode(',', $validator->errors()->all())]);
|
|
|
|
|
}
|
|
|
|
|
$detail = Course::with(['qunImage', 'typeDetail', 'courseForms', 'teacher', 'courseContentEvaluation' => function ($query) {
|
|
|
|
|
$query->with(['courseContentEvaluationAsks' => function ($q) {
|
|
|
|
|
$detail = Course::with([
|
|
|
|
|
'qunImage',
|
|
|
|
|
'typeDetail',
|
|
|
|
|
'courseForms',
|
|
|
|
|
'teacher',
|
|
|
|
|
'courseContentEvaluation' => function ($query) {
|
|
|
|
|
$query->with([
|
|
|
|
|
'courseContentEvaluationAsks' => function ($q) {
|
|
|
|
|
$q->orderBy('sort', 'asc');
|
|
|
|
|
}]);
|
|
|
|
|
}])->withCount(['courseSigns as my_user' => function ($query) {
|
|
|
|
|
}
|
|
|
|
|
]);
|
|
|
|
|
}
|
|
|
|
|
])->withCount([
|
|
|
|
|
'courseSigns as my_user' => function ($query) {
|
|
|
|
|
$query->where('user_id', $this->getUserId());
|
|
|
|
|
}])->find($all['course_id']);
|
|
|
|
|
}
|
|
|
|
|
])->find($all['course_id']);
|
|
|
|
|
return $this->success($detail);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@ -144,9 +155,11 @@ class CourseController extends CommonController
|
|
|
|
|
if ($validator->fails()) {
|
|
|
|
|
return $this->fail([ResponseCode::ERROR_PARAMETER, implode(',', $validator->errors()->all())]);
|
|
|
|
|
}
|
|
|
|
|
$detail = CourseContentEvaluation::with(['courseContentEvaluationAsks' => function ($q) {
|
|
|
|
|
$detail = CourseContentEvaluation::with([
|
|
|
|
|
'courseContentEvaluationAsks' => function ($q) {
|
|
|
|
|
$q->with('courseContent.teacher')->orderBy('sort', 'asc');
|
|
|
|
|
}])->find($all['course_content_evaluation_id']);
|
|
|
|
|
}
|
|
|
|
|
])->find($all['course_content_evaluation_id']);
|
|
|
|
|
return $this->success($detail);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@ -224,6 +237,33 @@ class CourseController extends CommonController
|
|
|
|
|
return $this->fail([ResponseCode::ERROR_BUSINESS, '报名已结束']);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
// 检测必填字段
|
|
|
|
|
$requiredFields = CourseForm::where('course_id', $all['course_id'])
|
|
|
|
|
->where('rule', 'like', '%required%')
|
|
|
|
|
->get(['field', 'name']);
|
|
|
|
|
if ($requiredFields->count() > 0) {
|
|
|
|
|
// 将 data 数组转换为以 field 为 key 的关联数组
|
|
|
|
|
$dataArray = [];
|
|
|
|
|
if (isset($all['data']) && is_array($all['data'])) {
|
|
|
|
|
foreach ($all['data'] as $item) {
|
|
|
|
|
if (isset($item['field'])) {
|
|
|
|
|
$dataArray[$item['field']] = $item['value'] ?? null;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
// 检查必填字段
|
|
|
|
|
$missingFields = [];
|
|
|
|
|
foreach ($requiredFields as $field) {
|
|
|
|
|
$fieldValue = $dataArray[$field->field] ?? null;
|
|
|
|
|
// 检查字段是否存在且值不为空(null、空字符串视为空,0是有效值)
|
|
|
|
|
if ($fieldValue === null || $fieldValue === '') {
|
|
|
|
|
$missingFields[] = $field->name;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (!empty($missingFields)) {
|
|
|
|
|
return $this->fail([ResponseCode::ERROR_PARAMETER, '以下字段为必填项:' . implode('、', $missingFields)]);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
$result = CourseSign::create([
|
|
|
|
|
'is_change' => $all['is_change'] ?? 0,
|
|
|
|
|
'course_id' => $all['course_id'],
|
|
|
|
|
@ -258,9 +298,11 @@ class CourseController extends CommonController
|
|
|
|
|
*/
|
|
|
|
|
public function myCourse()
|
|
|
|
|
{
|
|
|
|
|
$list = Course::with('typeDetail', 'courseContentEvaluation')->with(['courseSigns' => function ($query) {
|
|
|
|
|
$list = Course::with('typeDetail', 'courseContentEvaluation')->with([
|
|
|
|
|
'courseSigns' => function ($query) {
|
|
|
|
|
$query->where('user_id', $this->getUserId());
|
|
|
|
|
}])->whereHas('courseSigns', function ($query) {
|
|
|
|
|
}
|
|
|
|
|
])->whereHas('courseSigns', function ($query) {
|
|
|
|
|
$query->where('user_id', $this->getUserId());
|
|
|
|
|
})->where('is_virtual', 0)->orderBy('id', 'desc')->paginate($all['page_size'] ?? 20);
|
|
|
|
|
return $this->success(compact('list'));
|
|
|
|
|
@ -325,11 +367,18 @@ class CourseController extends CommonController
|
|
|
|
|
if ($validator->fails()) {
|
|
|
|
|
return $this->fail([ResponseCode::ERROR_PARAMETER, implode(',', $validator->errors()->all())]);
|
|
|
|
|
}
|
|
|
|
|
$detail = CourseContent::with(['course', 'teacher', 'courseKeeps', 'courseContentEvaluation' => function ($query) {
|
|
|
|
|
$query->with(['courseContentEvaluationAsks' => function ($q) {
|
|
|
|
|
$detail = CourseContent::with([
|
|
|
|
|
'course',
|
|
|
|
|
'teacher',
|
|
|
|
|
'courseKeeps',
|
|
|
|
|
'courseContentEvaluation' => function ($query) {
|
|
|
|
|
$query->with([
|
|
|
|
|
'courseContentEvaluationAsks' => function ($q) {
|
|
|
|
|
$q->orderBy('sort');
|
|
|
|
|
}]);
|
|
|
|
|
}])->find($all['course_content_id']);
|
|
|
|
|
}
|
|
|
|
|
]);
|
|
|
|
|
}
|
|
|
|
|
])->find($all['course_content_id']);
|
|
|
|
|
return $this->success($detail);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@ -751,7 +800,8 @@ class CourseController extends CommonController
|
|
|
|
|
if ($all['type'] == 2) {
|
|
|
|
|
$query->where('status', 1);
|
|
|
|
|
}
|
|
|
|
|
})->with(['courseSigns' => function ($query) use ($all) {
|
|
|
|
|
})->with([
|
|
|
|
|
'courseSigns' => function ($query) use ($all) {
|
|
|
|
|
$query->where('status', 1)->whereHas('course', function ($q) {
|
|
|
|
|
$q->where('is_fee', 1);
|
|
|
|
|
})->with('course.teacher', 'course.typeDetail')
|
|
|
|
|
@ -759,7 +809,8 @@ class CourseController extends CommonController
|
|
|
|
|
if (isset($all['course_id'])) {
|
|
|
|
|
$query->where('course_id', $all['course_id']);
|
|
|
|
|
}
|
|
|
|
|
}])->where(function ($query) use ($all) {
|
|
|
|
|
}
|
|
|
|
|
])->where(function ($query) use ($all) {
|
|
|
|
|
if ($all['type'] == 1) {
|
|
|
|
|
$query->where('is_schoolmate', 1);
|
|
|
|
|
}
|
|
|
|
|
|