model = new VideoModel(); } public static function make() { if (!self::$instance) { self::$instance = new static(); } return self::$instance; } /** * 获取视频集列表 */ public function getDataList($params, $pageSize = 15) { $where = ['a.mark' => 1]; // 状态过滤 $status = isset($params['status']) ? (int) $params['status'] : 0; if ($status > 0) { $where['a.status'] = $status; } // 查询 $query = $this->model->from('videos as a') ->where($where) ->where(function ($query) use ($params) { $keyword = isset($params['keyword']) ? trim($params['keyword']) : ''; if ($keyword) { $query->where('a.video_name', 'like', "%{$keyword}%"); } }) ->where(function ($query) use ($params) { $categoryId = isset($params['category_id']) ? (int) $params['category_id'] : 0; if ($categoryId) { $query->where('a.category_id', $categoryId); } }) ->select([ 'a.id', 'a.video_name', 'a.category_id', 'a.poster', 'a.description', 'a.sort', 'a.create_time', 'a.update_time', 'a.status' ]) ->orderBy('a.sort', 'desc') ->orderBy('a.create_time', 'desc'); $list = $query->paginate($pageSize > 0 ? $pageSize : 9999999)->toArray(); // 格式化数据 if (!empty($list['data'])) { foreach ($list['data'] as &$item) { $item['create_time'] = $item['create_time'] ? datetime($item['create_time'], 'Y-m-d H:i:s') : ''; $item['update_time'] = $item['update_time'] ? datetime($item['update_time'], 'Y-m-d H:i:s') : ''; $item['poster'] = $item['poster'] ? get_image_url($item['poster']) : ''; } } return [ 'pageSize' => $pageSize, 'total' => $list['total'] ?? 0, 'list' => $list['data'] ?? [] ]; } /** * 编辑或新增视频集 */ public function edit() { $data = request()->all(); // 视频封面处理 if (!empty($data['poster'])) { $data['poster'] = get_image_path(trim($data['poster'])); } $id = $data['id'] ?? 0; // 校验视频集名称是否唯一 $videoName = trim($data['video_name'] ?? ''); $checkId = $this->model->where(['video_name' => $videoName, 'mark' => 1])->value('id'); if ($checkId && $id != $checkId) { return message('视频集名称已存在', false); } // 默认字段处理 $data['update_time'] = time(); if (!$id) { $data['create_time'] = time(); } return parent::edit($data); // 调用父类的 edit 方法 } /** * 获取视频集详情 */ public function info() { $id = request()->input("id", 0); $info = []; if ($id) { $info = $this->model->getInfo($id); } $info['poster'] = $info['poster'] ? get_image_url($info['poster']) : ''; return message(MESSAGE_OK, true, $info); } /** * 获取视频集选项 */ public function options() { // 获取查询参数 $param = request()->all(); $keyword = getter($param, "keyword"); // 查询视频集名称或描述 $datas = $this->model ->where(function ($query) use ($keyword) { if ($keyword) { $query->where('video_name', 'like', "%{$keyword}%") ->orWhere('description', 'like', "%{$keyword}%"); } }) ->where(['mark' => 1]) ->select(['id', 'video_name']) ->get(); return $datas ? $datas->toArray() : []; } }