263 lines
8.7 KiB
PHP
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();
|
||
}
|
||
}
|
||
|
||
} |