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

263 lines
8.7 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?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();
}
}
}