diff --git a/app/Http/Controllers/Admin/CourseContentController.php b/app/Http/Controllers/Admin/CourseContentController.php index 4916e24..7bf6606 100755 --- a/app/Http/Controllers/Admin/CourseContentController.php +++ b/app/Http/Controllers/Admin/CourseContentController.php @@ -50,7 +50,7 @@ class CourseContentController extends BaseController { $all = request()->all(); $list = $this->model->with($all['show_relation'] ?? []) - ->withCount('courseKeeps') + ->withCount('courseKeeps', 'courseContentEvaluationForms', 'courseContentEvaluationAsks') ->withCount(['courseKeeps as user_sign_total' => function ($query) { $query->where('status', 1); }])->withCount(['courseKeeps as user_lack_sign_total' => function ($query) { @@ -135,6 +135,7 @@ class CourseContentController extends BaseController * @OA\Parameter(name="teacher_id", in="query", @OA\Schema(type="integer"), description="老师ID"), * @OA\Parameter(name="address", in="query", @OA\Schema(type="string"), description="地址"), * @OA\Parameter(name="theme", in="query", @OA\Schema(type="string"), description="主题"), + * @OA\Parameter(name="course_content_evaluation_title", in="query", @OA\Schema(type="string"), description="问卷标题"), * @OA\Response( * response=200, * description="操作成功" @@ -271,7 +272,7 @@ class CourseContentController extends BaseController } DB::beginTransaction(); try { - // CourseContent::where('course_id', $records[0]['course_id'])->delete(); + // CourseContent::where('course_id', $records[0]['course_id'])->delete(); Course::where('id', $records[0]['course_id'])->update(['course_content_status' => 0]); // 分段导入 foreach ($records as $item) { diff --git a/app/Http/Controllers/Admin/CourseContentEvaluationFieldController.php b/app/Http/Controllers/Admin/CourseContentEvaluationAskController.php similarity index 89% rename from app/Http/Controllers/Admin/CourseContentEvaluationFieldController.php rename to app/Http/Controllers/Admin/CourseContentEvaluationAskController.php index a6469f2..ba24f73 100644 --- a/app/Http/Controllers/Admin/CourseContentEvaluationFieldController.php +++ b/app/Http/Controllers/Admin/CourseContentEvaluationAskController.php @@ -6,7 +6,7 @@ use App\Exports\BaseExport; use App\Helpers\ResponseCode; use App\Models\AppointmentType; use App\Models\Book; -use App\Models\CourseContentEvaluationField; +use App\Models\CourseContentEvaluationAsk; use App\Models\CustomForm; use App\Models\CustomFormField; use App\Models\SupplyDemand; @@ -15,7 +15,7 @@ use Illuminate\Support\Facades\Validator; use Maatwebsite\Excel\Facades\Excel; use Rap2hpoutre\FastExcel\FastExcel; -class CourseContentEvaluationFieldController extends BaseController +class CourseContentEvaluationAskController extends BaseController { /** @@ -23,14 +23,14 @@ class CourseContentEvaluationFieldController extends BaseController */ public function __construct() { - parent::__construct(new CourseContentEvaluationField()); + parent::__construct(new CourseContentEvaluationAsk()); } /** * @OA\Get( - * path="/api/admin/course-content-evaluation-field/index", - * tags={"评价字段管理"}, + * path="/api/admin/course-content-evaluation-ask/index", + * tags={"评价问题管理"}, * summary="列表", * description="", * @OA\Parameter(name="is_export", in="query", @OA\Schema(type="string"), required=false, description="是否导出0否1是"), @@ -56,8 +56,8 @@ class CourseContentEvaluationFieldController extends BaseController /** * @OA\Get( - * path="/api/admin/course-content-evaluation-field/show", - * tags={"评价字段管理"}, + * path="/api/admin/course-content-evaluation-ask/show", + * tags={"评价问题管理"}, * summary="详情", * description="", * @OA\Parameter(name="id", in="query", @OA\Schema(type="string"), required=true, description="id"), @@ -87,8 +87,8 @@ class CourseContentEvaluationFieldController extends BaseController /** * @OA\Post( - * path="/api/admin/course-content-evaluation-field/save", - * tags={"评价字段管理"}, + * path="/api/admin/course-content-evaluation-ask/save", + * tags={"评价问题管理"}, * summary="保存", * description="", * @OA\Parameter(name="id", in="query", @OA\Schema(type="integer", format="int64"), required=true, description="课程内容评价字段ID(存在则更新,不存在则新增)"), @@ -113,8 +113,8 @@ class CourseContentEvaluationFieldController extends BaseController /** * @OA\Get( - * path="/api/admin/course-content-evaluation-field/destroy", - * tags={"评价字段管理"}, + * path="/api/admin/course-content-evaluation-ask/destroy", + * tags={"评价问题管理"}, * summary="删除", * description="", * @OA\Parameter(name="id", in="query", @OA\Schema(type="string"), required=true, description="id"), diff --git a/app/Http/Controllers/Mobile/CourseController.php b/app/Http/Controllers/Mobile/CourseController.php index c44c2ac..2257d35 100755 --- a/app/Http/Controllers/Mobile/CourseController.php +++ b/app/Http/Controllers/Mobile/CourseController.php @@ -13,6 +13,7 @@ use App\Models\Course; use App\Models\CourseAppointmentTotal; use App\Models\CourseContent; use App\Models\CourseContentCheck; +use App\Models\CourseContentEvaluationForm; use App\Models\CourseSign; use App\Models\Notice; use App\Models\Order; @@ -257,7 +258,7 @@ class CourseController extends CommonController /** * @OA\Get( - * path="/api/mobile/course/my-course-content-detail", + * path="/api/mobile/course/course-content-detail", * tags={"小程序-课程"}, * summary="课表的课堂详情", * @OA\Parameter(name="course_content_id", in="query", @OA\Schema(type="string"), required=false, description="课表的课堂id"), @@ -267,7 +268,7 @@ class CourseController extends CommonController * ) * ) */ - public function myCourseContentDetail() + public function courseContentDetail() { $all = \request()->all(); $messages = [ @@ -279,12 +280,52 @@ class CourseController extends CommonController if ($validator->fails()) { return $this->fail([ResponseCode::ERROR_PARAMETER, implode(',', $validator->errors()->all())]); } - $detail = CourseContent::with(['course', 'teacher', 'courseKeeps', 'courseContentEvaluationFields' => function ($query) { + $detail = CourseContent::with(['course', 'teacher', 'courseKeeps', 'courseContentEvaluationAsks' => function ($query) { $query->orderBy('sort'); }])->find($all['course_content_id']); return $this->success($detail); } + /** + * @OA\Get( + * path="/api/mobile/course/course-content-form", + * tags={"小程序-课程"}, + * summary="提交评价", + * @OA\Parameter(name="course_content_id", in="query", @OA\Schema(type="string"), required=false, description="课表的课堂id"), + * @OA\Parameter(name="data", in="query", @OA\Schema(type="string"), required=false, description="表单数据数组"), + * @OA\Response( + * response=200, + * description="操作成功" + * ) + * ) + */ + public function courseContentForm() + { + $all = \request()->all(); + $messages = [ + 'course_content_id.required' => '课表课堂id必填', + 'data.required' => '表单数据必填' + ]; + $validator = Validator::make($all, [ + 'course_content_id' => 'required', + 'data' => 'required' + ], $messages); + if ($validator->fails()) { + return $this->fail([ResponseCode::ERROR_PARAMETER, implode(',', $validator->errors()->all())]); + } + $courseContentEvaluationForm = CourseContentEvaluationForm::where('user_id', $this->getUserId()) + ->where('course_content_id', $all['course_content_id']) + ->first(); + if ($courseContentEvaluationForm) { + return $this->fail([ResponseCode::ERROR_BUSINESS, '您已提交过评价']); + } + $model = CourseContentEvaluationForm::create([ + 'user_id' => $this->getUserId(), + 'data' => $all['data'] + ]); + return $this->success($model); + } + /** * @OA\Get( diff --git a/app/Models/CourseContent.php b/app/Models/CourseContent.php index 190763e..ce697f6 100755 --- a/app/Models/CourseContent.php +++ b/app/Models/CourseContent.php @@ -46,9 +46,14 @@ class CourseContent extends SoftDeletesModel return $this->hasMany(CourseSign::class, 'course_id', 'course_id'); } - public function courseContentEvaluationFields() + public function courseContentEvaluationAsks() { - return $this->hasMany(CourseContentEvaluationField::class, 'course_content_id', 'id'); + return $this->hasMany(CourseContentEvaluationAsk::class, 'course_content_id', 'id'); + } + + public function courseContentEvaluationForms() + { + return $this->hasMany(CourseContentEvaluationForm::class, 'course_content_id', 'id'); } } diff --git a/app/Models/CourseContentEvaluationAsk.php b/app/Models/CourseContentEvaluationAsk.php new file mode 100644 index 0000000..2276085 --- /dev/null +++ b/app/Models/CourseContentEvaluationAsk.php @@ -0,0 +1,8 @@ + 'json']; + +} diff --git a/database/migrations/2025_06_30_105931_create_course_content_evaluation_fields_table.php b/database/migrations/2025_06_30_105931_create_course_content_evaluation_asks_table.php similarity index 93% rename from database/migrations/2025_06_30_105931_create_course_content_evaluation_fields_table.php rename to database/migrations/2025_06_30_105931_create_course_content_evaluation_asks_table.php index 0db07e2..029c901 100644 --- a/database/migrations/2025_06_30_105931_create_course_content_evaluation_fields_table.php +++ b/database/migrations/2025_06_30_105931_create_course_content_evaluation_asks_table.php @@ -13,7 +13,7 @@ return new class extends Migration */ public function up() { - Schema::create('course_content_evaluation_fields', function (Blueprint $table) { + Schema::create('course_content_evaluation_asks', function (Blueprint $table) { $table->id(); $table->integer('course_content_id')->nullable()->comment('课程排课id'); // 字段名字 diff --git a/database/migrations/2025_06_30_132354_alert_course_contents_table.php b/database/migrations/2025_06_30_132354_alert_course_contents_table.php new file mode 100644 index 0000000..8815ea3 --- /dev/null +++ b/database/migrations/2025_06_30_132354_alert_course_contents_table.php @@ -0,0 +1,31 @@ +string('course_content_evaluation_title')->nullable()->comment('问卷标题'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('course_contents', function (Blueprint $table) { + // + }); + } +}; diff --git a/routes/api.php b/routes/api.php index 8f464fa..a94ad30 100755 --- a/routes/api.php +++ b/routes/api.php @@ -182,10 +182,10 @@ Route::group(["namespace" => "Admin", "prefix" => "admin"], function () { Route::post('book/import', [\App\Http\Controllers\Admin\BookController::class, "import"]); // 课程评价 - Route::get('course-content-evaluation-field/index', [\App\Http\Controllers\Admin\CourseContentEvaluationFieldController::class, "index"]); - Route::get('course-content-evaluation-field/show', [\App\Http\Controllers\Admin\CourseContentEvaluationFieldController::class, "show"]); - Route::post('course-content-evaluation-field/save', [\App\Http\Controllers\Admin\CourseContentEvaluationFieldController::class, "save"]); - Route::get('course-content-evaluation-field/destroy', [\App\Http\Controllers\Admin\CourseContentEvaluationFieldController::class, "destroy"]); + Route::get('course-content-evaluation-ask/index', [\App\Http\Controllers\Admin\CourseContentEvaluationAskController::class, "index"]); + Route::get('course-content-evaluation-ask/show', [\App\Http\Controllers\Admin\CourseContentEvaluationAskController::class, "show"]); + Route::post('course-content-evaluation-ask/save', [\App\Http\Controllers\Admin\CourseContentEvaluationAskController::class, "save"]); + Route::get('course-content-evaluation-ask/destroy', [\App\Http\Controllers\Admin\CourseContentEvaluationAskController::class, "destroy"]); }); @@ -231,7 +231,8 @@ Route::group(["namespace" => "Mobile", "prefix" => "mobile"], function () { Route::post('course/sign', [\App\Http\Controllers\Mobile\CourseController::class, "sign"]); Route::get('course/my-course', [\App\Http\Controllers\Mobile\CourseController::class, "myCourse"]); Route::get('course/my-course-content', [\App\Http\Controllers\Mobile\CourseController::class, "myCourseContent"]); - Route::get('course/my-course-content-detail', [\App\Http\Controllers\Mobile\CourseController::class, "myCourseContentDetail"]); + Route::get('course/course-content-detail', [\App\Http\Controllers\Mobile\CourseController::class, "courseContentDetail"]); + Route::get('course/course-content-form', [\App\Http\Controllers\Mobile\CourseController::class, "courseContentForm"]); Route::get('course/get-sign', [\App\Http\Controllers\Mobile\CourseController::class, "getSign"]); Route::post('course/update-sign', [\App\Http\Controllers\Mobile\CourseController::class, "updateSign"]); // 获取缴费二维码