Files
ruankao/app/admin/controller/TkController.php
T
2025-07-14 23:27:18 +08:00

263 lines
8.7 KiB
PHP

<?php
/**
* 商业使用授权协议
*
* Copyright (c) 2025 [云泽网]. 保留所有权利.
*
* 本软件仅供评估使用。任何商业用途必须获得书面授权许可。
* 未经授权商业使用本软件属于侵权行为,将承担法律责任。
*
* 授权购买请联系: 357099073@qq.com
* 官方网站: https://www.yunzer.cn
*
* 评估用户须知:
* 1. 禁止移除版权声明
* 2. 禁止用于生产环境
* 3. 禁止转售或分发
*/
/**
* 后台管理系统-资源管理
*/
namespace app\admin\controller;
use app\admin\controller\BaseController;
use app\admin\model\Tk\TkKnowledgePoints;
use app\admin\model\Tk\TkQuestionAttachments;
use app\admin\model\Tk\TkQuestionOptions;
use app\admin\model\Tk\TkQuestions;
use app\admin\model\Tk\TkQuestionStatistics;
use app\admin\model\Tk\TkQuestionTagRelations;
use app\admin\model\Tk\TkQuestionTags;
use app\admin\model\Tk\TkQuestionUsageRecords;
use app\admin\model\Tk\TkSubjects;
use think\facade\View;
use think\facade\Request;
use think\facade\Db;
use app\admin\controller\LogController as Log;
use think\App;
class TkController extends BaseController
{
//题目分类管理
public function category()
{
try {
$page = input('post.page/d', 1); // 当前页码
$limit = input('post.limit/d', 10); // 每页条数
// 查询总数
$total = TkSubjects::where('is_deleted', 0)->count();
// 查询当前页数据(分页)
$list = TkSubjects::where('is_deleted', 0)
->order('sort ASC, level ASC, id ASC')
->field('id, name, code, parent_id, level, sort')
->page($page, $limit)
->select()
->toArray();
if (Request::isPost()) {
// POST请求返回JSON - 分页数据
return json([
'code' => 0,
'msg' => 'success',
'data' => $list,
'count' => $total
]);
} else {
// GET请求渲染视图,传递最大层级
// 这里需要获取全部数据以便计算最大层级
$allList = TkSubjects::where('is_deleted', 0)
->field('level')
->select()
->toArray();
$maxLevel = 0;
if (!empty($allList)) {
$maxLevel = max(array_column($allList, 'level'));
}
View::assign([
'maxLevel' => $maxLevel // 传递最大层级给视图
]);
return View::fetch();
}
} catch (\Exception $e) {
return json([
'code' => 1,
'msg' => '获取分类数据失败',
'data' => [],
'count' => 0,
'error' => $e->getMessage()
]);
}
}
//题目分类增加
public function categoryadd()
{
if (Request::isPost()) {
$name = trim(input('post.name', ''));
$level = trim(input('post.level', ''));
if (empty($name)) {
return json(['code' => 1, 'msg' => '分类名称不能为空']);
}
// 检查是否已存在同名分类
$exists = TkSubjects::where('name', $name)
->where('is_deleted', null)
->find();
if ($exists) {
return json(['code' => 1, 'msg' => '该分类名称已存在']);
}
$data = [
'name' => $name,
'level' => $level,
'status' => 1,
'create_time' => time()
];
$res = TkSubjects::create($data);
if ($res) {
return json(['code' => 0, 'msg' => '新增成功']);
} else {
return json(['code' => 1, 'msg' => '新增失败']);
}
} else {
// GET请求渲染新增分类页面(如有需要)
return View::fetch();
}
}
//题目管理列表
public function topiclist()
{
if (Request::isPost()) {
$params = [
'category' => input('post.category'),
'name' => input('post.name'),
'uploader' => input('post.uploader')
];
$page = (int) input('post.page', 1);
$limit = (int) input('post.limit', 10);
$query = TkQuestions::where('delete_time', null)
->where('status', 1);
// 分类筛选
if (!empty($params['category'])) {
$cateInfo = TkQuestions::where('name', $params['category'])
->where('delete_time', null)
->where('status', 1)
->field('id')
->find();
if ($cateInfo) {
$query = $query->where('cate', (int) $cateInfo['id']);
}
}
// 名称搜索
if (!empty($params['name'])) {
$query = $query->where('name', 'like', '%' . $params['name'] . '%');
}
// 上传者搜索
if (!empty($params['uploader'])) {
$query = $query->where('uploader', 'like', '%' . $params['uploader'] . '%');
}
$count = $query->count();
$lists = $query->order('id DESC')
->page($page, $limit)
->select()
->each(function ($item) {
// 获取分类信息
$cateInfo = TkQuestions::where('id', (int) $item['cate'])
->field('name, icon')
->find();
if ($cateInfo) {
$item['cate'] = $cateInfo['name'];
if (empty($item['icon']) && !empty($cateInfo['icon'])) {
$item['icon'] = $cateInfo['icon'];
}
}
$item['create_time'] = date('Y-m-d H:i:s', (int) $item['create_time']);
return $item;
});
return json([
'code' => 0,
'msg' => '获取成功',
'count' => $count,
'data' => $lists
]);
} else {
// $allCategories = TkQuestions::where('delete_time', null)
// ->where('status', 1)
// ->field('id, name, cid, icon')
// ->order('sort asc, id asc')
// ->select()
// ->toArray();
// $categories = $this->buildParentChild($allCategories);
// View::assign([
// 'categories' => $categories
// ]);
return View::fetch();
}
}
//题目添加
public function topicadd()
{
if ($this->request->isPost()) {
$params = $this->request->post();
// 数据验证
$validate = new \think\Validate([
'question_type' => 'require|number|between:1,6',
'subject_id' => 'require|number',
'knowledge_point_id' => 'number',
'difficulty' => 'number|between:1,5',
'content' => 'require',
'analysis' => 'require',
'answer' => 'require'
]);
if (!$validate->check($params)) {
return json(['code' => 1, 'msg' => $validate->getError()]);
}
// 处理数据
$data = [
'question_type' => (int)$params['question_type'],
'subject_id' => (int)$params['subject_id'],
'knowledge_point_id' => isset($params['knowledge_point_id']) ? (int)$params['knowledge_point_id'] : null,
'difficulty' => isset($params['difficulty']) ? (int)$params['difficulty'] : 3,
'content' => $params['content'],
'analysis' => $params['analysis'],
'answer' => $params['answer'],
'created_by' => $this->getUserId(), // 假设有获取当前用户ID的方法
'created_time' => date('Y-m-d H:i:s'),
'updated_by' => $this->getUserId(),
'updated_time' => date('Y-m-d H:i:s')
];
// 保存数据
$result = \think\facade\Db::name('questions')->insert($data);
if ($result) {
return json(['code' => 0, 'msg' => '添加成功']);
} else {
return json(['code' => 1, 'msg' => '添加失败']);
}
} else {
return View::fetch();
}
}
}