mirror of
https://gitee.com/koogua/course-tencent-cloud.git
synced 2025-07-17 13:46:21 +08:00
清理后台冗余代码
This commit is contained in:
parent
530ec92736
commit
3c6e0c2a3b
@ -5,7 +5,7 @@ namespace App\Caches;
|
||||
class UserDailyCounter extends Counter
|
||||
{
|
||||
|
||||
protected $lifetime = 86400;
|
||||
protected $lifetime = 1 * 86400;
|
||||
|
||||
public function getLifetime()
|
||||
{
|
||||
|
@ -8,7 +8,7 @@ use Phalcon\Cli\Task;
|
||||
use Phalcon\Mvc\Model\Resultset;
|
||||
use Phalcon\Mvc\Model\ResultsetInterface;
|
||||
|
||||
class CleanAuthTokenTask extends Task
|
||||
class CleanTokenTask extends Task
|
||||
{
|
||||
|
||||
public function mainAction()
|
@ -9,13 +9,13 @@ use Phalcon\Cli\Task;
|
||||
use Phalcon\Mvc\Model\Resultset;
|
||||
use Phalcon\Mvc\Model\ResultsetInterface;
|
||||
|
||||
class ManageCourseIndexTask extends Task
|
||||
class CourseIndexTask extends Task
|
||||
{
|
||||
|
||||
/**
|
||||
* 搜索测试
|
||||
*
|
||||
* @command: php console.php manage_course_index search {query}
|
||||
* @command: php console.php course_index search {query}
|
||||
* @param array $params
|
||||
* @throws \XSException
|
||||
*/
|
||||
@ -35,7 +35,7 @@ class ManageCourseIndexTask extends Task
|
||||
/**
|
||||
* 清空索引
|
||||
*
|
||||
* @command: php console.php manage_course_index clean
|
||||
* @command: php console.php course_index clean
|
||||
*/
|
||||
public function cleanAction()
|
||||
{
|
||||
@ -45,7 +45,7 @@ class ManageCourseIndexTask extends Task
|
||||
/**
|
||||
* 重建索引
|
||||
*
|
||||
* @command: php console.php manage_course_index rebuild
|
||||
* @command: php console.php course_index rebuild
|
||||
*/
|
||||
public function rebuildAction()
|
||||
{
|
||||
@ -103,7 +103,7 @@ class ManageCourseIndexTask extends Task
|
||||
* 搜索课程
|
||||
*
|
||||
* @param string $query
|
||||
* @return array $result
|
||||
* @return array
|
||||
* @throws \XSException
|
||||
*/
|
||||
protected function searchCourses($query)
|
@ -10,7 +10,7 @@ use App\Repos\ChapterUser as ChapterUserRepo;
|
||||
use App\Repos\Course as CourseRepo;
|
||||
use App\Repos\CourseUser as CourseUserRepo;
|
||||
use App\Repos\Learning as LearningRepo;
|
||||
use App\Services\LearningSyncer;
|
||||
use App\Services\Syncer\Learning as LearningSyncer;
|
||||
use Phalcon\Cli\Task;
|
||||
|
||||
class LearningTask extends Task
|
||||
|
@ -5,7 +5,7 @@ namespace App\Console\Tasks;
|
||||
use App\Caches\ChapterCounter as ChapterCounterCache;
|
||||
use App\Library\Cache\Backend\Redis as RedisCache;
|
||||
use App\Repos\Chapter as ChapterRepo;
|
||||
use App\Services\ChapterCounterSyncer;
|
||||
use App\Services\Syncer\ChapterCounter as ChapterCounterSyncer;
|
||||
|
||||
class SyncChapterCounterTask extends Task
|
||||
{
|
||||
|
@ -5,7 +5,7 @@ namespace App\Console\Tasks;
|
||||
use App\Caches\CommentCounter as CommentCounterCache;
|
||||
use App\Library\Cache\Backend\Redis as RedisCache;
|
||||
use App\Repos\Comment as CommentRepo;
|
||||
use App\Services\CommentCounterSyncer;
|
||||
use App\Services\Syncer\CommentCounter as CommentCounterSyncer;
|
||||
|
||||
class SyncCommentCounterTask extends Task
|
||||
{
|
||||
|
@ -5,7 +5,7 @@ namespace App\Console\Tasks;
|
||||
use App\Caches\ConsultCounter as ConsultCounterCache;
|
||||
use App\Library\Cache\Backend\Redis as RedisCache;
|
||||
use App\Repos\Consult as ConsultRepo;
|
||||
use App\Services\ConsultCounterSyncer;
|
||||
use App\Services\Syncer\ConsultCounter as ConsultCounterSyncer;
|
||||
|
||||
class SyncConsultCounterTask extends Task
|
||||
{
|
||||
|
@ -5,9 +5,9 @@ namespace App\Console\Tasks;
|
||||
use App\Caches\CourseCounter as CourseCounterCache;
|
||||
use App\Library\Cache\Backend\Redis as RedisCache;
|
||||
use App\Repos\Course as CourseRepo;
|
||||
use App\Services\CourseCounterSyncer;
|
||||
use App\Services\Syncer\CourseCounter as CourseCounterSyncer;
|
||||
|
||||
class syncCourseCounterTask extends Task
|
||||
class SyncCourseCounterTask extends Task
|
||||
{
|
||||
|
||||
/**
|
@ -6,7 +6,7 @@ use App\Library\Cache\Backend\Redis as RedisCache;
|
||||
use App\Repos\Course as CourseRepo;
|
||||
use App\Searchers\CourseDocument;
|
||||
use App\Searchers\CourseSearch;
|
||||
use App\Services\CourseIndexSyncer;
|
||||
use App\Services\Syncer\CourseIndex as CourseIndexSyncer;
|
||||
|
||||
class SyncCourseIndexTask extends Task
|
||||
{
|
||||
|
@ -5,7 +5,7 @@ namespace App\Console\Tasks;
|
||||
use App\Caches\ReviewCounter as ReviewCounterCache;
|
||||
use App\Library\Cache\Backend\Redis as RedisCache;
|
||||
use App\Repos\Review as ReviewRepo;
|
||||
use App\Services\ReviewCounterSyncer;
|
||||
use App\Services\Syncer\ReviewCounter as ReviewCounterSyncer;
|
||||
|
||||
class SyncReviewCounterTask extends Task
|
||||
{
|
||||
|
@ -30,7 +30,7 @@ class AuthMenu extends Component
|
||||
if ($this->authUser->id || in_array($node['id'], $this->owned1stLevelIds)) {
|
||||
$menus[] = [
|
||||
'id' => $node['id'],
|
||||
'label' => $node['label'],
|
||||
'title' => $node['title'],
|
||||
];
|
||||
}
|
||||
}
|
||||
@ -43,17 +43,17 @@ class AuthMenu extends Component
|
||||
$menus = [];
|
||||
|
||||
foreach ($this->authNodes as $key => $level) {
|
||||
foreach ($level['child'] as $key2 => $level2) {
|
||||
foreach ($level2['child'] as $key3 => $level3) {
|
||||
foreach ($level['children'] as $key2 => $level2) {
|
||||
foreach ($level2['children'] as $key3 => $level3) {
|
||||
$hasRight = $this->authUser->root || in_array($level3['id'], $this->owned3rdLevelIds);
|
||||
if ($level3['type'] == 'menu' && $hasRight) {
|
||||
$menus[$key]['id'] = $level['id'];
|
||||
$menus[$key]['label'] = $level['label'];
|
||||
$menus[$key]['child'][$key2]['id'] = $level2['id'];
|
||||
$menus[$key]['child'][$key2]['label'] = $level2['label'];
|
||||
$menus[$key]['child'][$key2]['child'][$key3] = [
|
||||
$menus[$key]['title'] = $level['title'];
|
||||
$menus[$key]['children'][$key2]['id'] = $level2['id'];
|
||||
$menus[$key]['children'][$key2]['title'] = $level2['title'];
|
||||
$menus[$key]['children'][$key2]['children'][$key3] = [
|
||||
'id' => $level3['id'],
|
||||
'label' => $level3['label'],
|
||||
'title' => $level3['title'],
|
||||
'url' => $this->url->get(['for' => $level3['route']]),
|
||||
];
|
||||
}
|
||||
@ -93,8 +93,8 @@ class AuthMenu extends Component
|
||||
$mapping = [];
|
||||
|
||||
foreach ($this->authNodes as $level) {
|
||||
foreach ($level['child'] as $level2) {
|
||||
foreach ($level2['child'] as $level3) {
|
||||
foreach ($level['children'] as $level2) {
|
||||
foreach ($level2['children'] as $level3) {
|
||||
if ($level3['type'] == 'menu') {
|
||||
$mapping[$level3['route']] = $level3['id'];
|
||||
}
|
||||
|
@ -22,40 +22,40 @@ class AuthNode extends Service
|
||||
{
|
||||
return [
|
||||
'id' => '1',
|
||||
'label' => '内容管理',
|
||||
'child' => [
|
||||
'title' => '内容管理',
|
||||
'children' => [
|
||||
[
|
||||
'id' => '1-1',
|
||||
'label' => '课程管理',
|
||||
'title' => '课程管理',
|
||||
'type' => 'menu',
|
||||
'child' => [
|
||||
'children' => [
|
||||
[
|
||||
'id' => '1-1-1',
|
||||
'label' => '课程列表',
|
||||
'title' => '课程列表',
|
||||
'type' => 'menu',
|
||||
'route' => 'admin.course.list',
|
||||
],
|
||||
[
|
||||
'id' => '1-1-2',
|
||||
'label' => '搜索课程',
|
||||
'title' => '搜索课程',
|
||||
'type' => 'menu',
|
||||
'route' => 'admin.course.search',
|
||||
],
|
||||
[
|
||||
'id' => '1-1-3',
|
||||
'label' => '添加课程',
|
||||
'title' => '添加课程',
|
||||
'type' => 'menu',
|
||||
'route' => 'admin.course.add',
|
||||
],
|
||||
[
|
||||
'id' => '1-1-4',
|
||||
'label' => '编辑课程',
|
||||
'title' => '编辑课程',
|
||||
'type' => 'button',
|
||||
'route' => 'admin.course.edit',
|
||||
],
|
||||
[
|
||||
'id' => '1-1-5',
|
||||
'label' => '删除课程',
|
||||
'title' => '删除课程',
|
||||
'type' => 'button',
|
||||
'route' => 'admin.course.edit',
|
||||
],
|
||||
@ -63,30 +63,30 @@ class AuthNode extends Service
|
||||
],
|
||||
[
|
||||
'id' => '1-2',
|
||||
'label' => '分类管理',
|
||||
'title' => '分类管理',
|
||||
'type' => 'menu',
|
||||
'child' => [
|
||||
'children' => [
|
||||
[
|
||||
'id' => '1-2-1',
|
||||
'label' => '分类列表',
|
||||
'title' => '分类列表',
|
||||
'type' => 'menu',
|
||||
'route' => 'admin.category.list',
|
||||
],
|
||||
[
|
||||
'id' => '1-2-2',
|
||||
'label' => '添加分类',
|
||||
'title' => '添加分类',
|
||||
'type' => 'menu',
|
||||
'route' => 'admin.category.add',
|
||||
],
|
||||
[
|
||||
'id' => '1-2-3',
|
||||
'label' => '编辑分类',
|
||||
'title' => '编辑分类',
|
||||
'type' => 'button',
|
||||
'route' => 'admin.category.edit',
|
||||
],
|
||||
[
|
||||
'id' => '1-2-4',
|
||||
'label' => '删除分类',
|
||||
'title' => '删除分类',
|
||||
'type' => 'button',
|
||||
'route' => 'admin.category.delete',
|
||||
],
|
||||
@ -94,30 +94,30 @@ class AuthNode extends Service
|
||||
],
|
||||
[
|
||||
'id' => '1-3',
|
||||
'label' => '套餐管理',
|
||||
'title' => '套餐管理',
|
||||
'type' => 'menu',
|
||||
'child' => [
|
||||
'children' => [
|
||||
[
|
||||
'id' => '1-3-1',
|
||||
'label' => '套餐列表',
|
||||
'title' => '套餐列表',
|
||||
'type' => 'menu',
|
||||
'route' => 'admin.package.list',
|
||||
],
|
||||
[
|
||||
'id' => '1-3-2',
|
||||
'label' => '添加套餐',
|
||||
'title' => '添加套餐',
|
||||
'type' => 'menu',
|
||||
'route' => 'admin.package.add',
|
||||
],
|
||||
[
|
||||
'id' => '1-3-3',
|
||||
'label' => '编辑套餐',
|
||||
'title' => '编辑套餐',
|
||||
'type' => 'button',
|
||||
'route' => 'admin.package.edit',
|
||||
],
|
||||
[
|
||||
'id' => '1-3-4',
|
||||
'label' => '删除套餐',
|
||||
'title' => '删除套餐',
|
||||
'type' => 'button',
|
||||
'route' => 'admin.package.delete',
|
||||
],
|
||||
@ -125,30 +125,30 @@ class AuthNode extends Service
|
||||
],
|
||||
[
|
||||
'id' => '1-4',
|
||||
'label' => '话题管理',
|
||||
'title' => '话题管理',
|
||||
'type' => 'menu',
|
||||
'child' => [
|
||||
'children' => [
|
||||
[
|
||||
'id' => '1-4-1',
|
||||
'label' => '话题列表',
|
||||
'title' => '话题列表',
|
||||
'type' => 'menu',
|
||||
'route' => 'admin.topic.list',
|
||||
],
|
||||
[
|
||||
'id' => '1-4-2',
|
||||
'label' => '添加话题',
|
||||
'title' => '添加话题',
|
||||
'type' => 'menu',
|
||||
'route' => 'admin.topic.add',
|
||||
],
|
||||
[
|
||||
'id' => '1-4-3',
|
||||
'label' => '编辑话题',
|
||||
'title' => '编辑话题',
|
||||
'type' => 'button',
|
||||
'route' => 'admin.topic.edit',
|
||||
],
|
||||
[
|
||||
'id' => '1-4-4',
|
||||
'label' => '删除话题',
|
||||
'title' => '删除话题',
|
||||
'type' => 'button',
|
||||
'route' => 'admin.topic.delete',
|
||||
],
|
||||
@ -156,30 +156,30 @@ class AuthNode extends Service
|
||||
],
|
||||
[
|
||||
'id' => '1-5',
|
||||
'label' => '单页管理',
|
||||
'title' => '单页管理',
|
||||
'type' => 'menu',
|
||||
'child' => [
|
||||
'children' => [
|
||||
[
|
||||
'id' => '1-5-1',
|
||||
'label' => '单页列表',
|
||||
'title' => '单页列表',
|
||||
'type' => 'menu',
|
||||
'route' => 'admin.page.list',
|
||||
],
|
||||
[
|
||||
'id' => '1-5-2',
|
||||
'label' => '添加单页',
|
||||
'title' => '添加单页',
|
||||
'type' => 'menu',
|
||||
'route' => 'admin.page.add',
|
||||
],
|
||||
[
|
||||
'id' => '1-5-3',
|
||||
'label' => '编辑单页',
|
||||
'title' => '编辑单页',
|
||||
'type' => 'button',
|
||||
'route' => 'admin.page.edit',
|
||||
],
|
||||
[
|
||||
'id' => '1-5-4',
|
||||
'label' => '删除单页',
|
||||
'title' => '删除单页',
|
||||
'type' => 'button',
|
||||
'route' => 'admin.page.delete',
|
||||
],
|
||||
@ -187,30 +187,30 @@ class AuthNode extends Service
|
||||
],
|
||||
[
|
||||
'id' => '1-6',
|
||||
'label' => '帮助管理',
|
||||
'title' => '帮助管理',
|
||||
'type' => 'menu',
|
||||
'child' => [
|
||||
'children' => [
|
||||
[
|
||||
'id' => '1-6-1',
|
||||
'label' => '帮助列表',
|
||||
'title' => '帮助列表',
|
||||
'type' => 'menu',
|
||||
'route' => 'admin.help.list',
|
||||
],
|
||||
[
|
||||
'id' => '1-6-2',
|
||||
'label' => '添加帮助',
|
||||
'title' => '添加帮助',
|
||||
'type' => 'menu',
|
||||
'route' => 'admin.help.add',
|
||||
],
|
||||
[
|
||||
'id' => '1-6-3',
|
||||
'label' => '编辑帮助',
|
||||
'title' => '编辑帮助',
|
||||
'type' => 'button',
|
||||
'route' => 'admin.help.edit',
|
||||
],
|
||||
[
|
||||
'id' => '1-6-4',
|
||||
'label' => '删除帮助',
|
||||
'title' => '删除帮助',
|
||||
'type' => 'button',
|
||||
'route' => 'admin.help.delete',
|
||||
],
|
||||
@ -224,34 +224,34 @@ class AuthNode extends Service
|
||||
{
|
||||
return [
|
||||
'id' => '2',
|
||||
'label' => '运营管理',
|
||||
'child' => [
|
||||
'title' => '运营管理',
|
||||
'children' => [
|
||||
[
|
||||
'id' => '2-1',
|
||||
'label' => '学员管理',
|
||||
'title' => '学员管理',
|
||||
'type' => 'menu',
|
||||
'child' => [
|
||||
'children' => [
|
||||
[
|
||||
'id' => '2-1-1',
|
||||
'label' => '学员列表',
|
||||
'title' => '学员列表',
|
||||
'type' => 'menu',
|
||||
'route' => 'admin.student.list',
|
||||
],
|
||||
[
|
||||
'id' => '2-1-2',
|
||||
'label' => '搜索学员',
|
||||
'title' => '搜索学员',
|
||||
'type' => 'menu',
|
||||
'route' => 'admin.student.search',
|
||||
],
|
||||
[
|
||||
'id' => '2-1-3',
|
||||
'label' => '添加学员',
|
||||
'title' => '添加学员',
|
||||
'type' => 'menu',
|
||||
'route' => 'admin.student.add',
|
||||
],
|
||||
[
|
||||
'id' => '2-1-4',
|
||||
'label' => '编辑学员',
|
||||
'title' => '编辑学员',
|
||||
'type' => 'button',
|
||||
'route' => 'admin.student.edit',
|
||||
],
|
||||
@ -259,30 +259,30 @@ class AuthNode extends Service
|
||||
],
|
||||
[
|
||||
'id' => '2-2',
|
||||
'label' => '咨询管理',
|
||||
'title' => '咨询管理',
|
||||
'type' => 'menu',
|
||||
'child' => [
|
||||
'children' => [
|
||||
[
|
||||
'id' => '2-2-1',
|
||||
'label' => '咨询列表',
|
||||
'title' => '咨询列表',
|
||||
'type' => 'menu',
|
||||
'route' => 'admin.consult.list',
|
||||
],
|
||||
[
|
||||
'id' => '2-2-2',
|
||||
'label' => '搜索咨询',
|
||||
'title' => '搜索咨询',
|
||||
'type' => 'menu',
|
||||
'route' => 'admin.consult.search',
|
||||
],
|
||||
[
|
||||
'id' => '2-2-3',
|
||||
'label' => '编辑咨询',
|
||||
'title' => '编辑咨询',
|
||||
'type' => 'button',
|
||||
'route' => 'admin.consult.edit',
|
||||
],
|
||||
[
|
||||
'id' => '2-2-4',
|
||||
'label' => '删除咨询',
|
||||
'title' => '删除咨询',
|
||||
'type' => 'button',
|
||||
'route' => 'admin.consult.delete',
|
||||
],
|
||||
@ -290,30 +290,30 @@ class AuthNode extends Service
|
||||
],
|
||||
[
|
||||
'id' => '2-3',
|
||||
'label' => '评价管理',
|
||||
'title' => '评价管理',
|
||||
'type' => 'menu',
|
||||
'child' => [
|
||||
'children' => [
|
||||
[
|
||||
'id' => '2-3-1',
|
||||
'label' => '评价列表',
|
||||
'title' => '评价列表',
|
||||
'type' => 'menu',
|
||||
'route' => 'admin.review.list',
|
||||
],
|
||||
[
|
||||
'id' => '2-3-2',
|
||||
'label' => '搜索评价',
|
||||
'title' => '搜索评价',
|
||||
'type' => 'menu',
|
||||
'route' => 'admin.review.search',
|
||||
],
|
||||
[
|
||||
'id' => '2-3-3',
|
||||
'label' => '编辑评价',
|
||||
'title' => '编辑评价',
|
||||
'type' => 'button',
|
||||
'route' => 'admin.review.edit',
|
||||
],
|
||||
[
|
||||
'id' => '2-3-4',
|
||||
'label' => '删除评价',
|
||||
'title' => '删除评价',
|
||||
'type' => 'button',
|
||||
'route' => 'admin.review.delete',
|
||||
],
|
||||
@ -321,30 +321,30 @@ class AuthNode extends Service
|
||||
],
|
||||
[
|
||||
'id' => '2-4',
|
||||
'label' => '评论管理',
|
||||
'title' => '评论管理',
|
||||
'type' => 'menu',
|
||||
'child' => [
|
||||
'children' => [
|
||||
[
|
||||
'id' => '2-4-1',
|
||||
'label' => '评论列表',
|
||||
'title' => '评论列表',
|
||||
'type' => 'menu',
|
||||
'route' => 'admin.comment.list',
|
||||
],
|
||||
[
|
||||
'id' => '2-4-2',
|
||||
'label' => '搜索评论',
|
||||
'title' => '搜索评论',
|
||||
'type' => 'menu',
|
||||
'route' => 'admin.comment.search',
|
||||
],
|
||||
[
|
||||
'id' => '2-4-3',
|
||||
'label' => '编辑评论',
|
||||
'title' => '编辑评论',
|
||||
'type' => 'button',
|
||||
'route' => 'admin.comment.edit',
|
||||
],
|
||||
[
|
||||
'id' => '2-4-4',
|
||||
'label' => '删除评论',
|
||||
'title' => '删除评论',
|
||||
'type' => 'button',
|
||||
'route' => 'admin.comment.delete',
|
||||
],
|
||||
@ -352,30 +352,30 @@ class AuthNode extends Service
|
||||
],
|
||||
[
|
||||
'id' => '2-5',
|
||||
'label' => '轮播管理',
|
||||
'title' => '轮播管理',
|
||||
'type' => 'menu',
|
||||
'child' => [
|
||||
'children' => [
|
||||
[
|
||||
'id' => '2-5-1',
|
||||
'label' => '轮播列表',
|
||||
'title' => '轮播列表',
|
||||
'type' => 'menu',
|
||||
'route' => 'admin.slide.list',
|
||||
],
|
||||
[
|
||||
'id' => '2-5-2',
|
||||
'label' => '添加轮播',
|
||||
'title' => '添加轮播',
|
||||
'type' => 'menu',
|
||||
'route' => 'admin.slide.add',
|
||||
],
|
||||
[
|
||||
'id' => '2-5-3',
|
||||
'label' => '编辑轮播',
|
||||
'title' => '编辑轮播',
|
||||
'type' => 'button',
|
||||
'route' => 'admin.slide.edit',
|
||||
],
|
||||
[
|
||||
'id' => '2-5-4',
|
||||
'label' => '删除轮播',
|
||||
'title' => '删除轮播',
|
||||
'type' => 'button',
|
||||
'route' => 'admin.slide.delete',
|
||||
],
|
||||
@ -383,30 +383,30 @@ class AuthNode extends Service
|
||||
],
|
||||
[
|
||||
'id' => '2-6',
|
||||
'label' => '导航管理',
|
||||
'title' => '导航管理',
|
||||
'type' => 'menu',
|
||||
'child' => [
|
||||
'children' => [
|
||||
[
|
||||
'id' => '2-6-1',
|
||||
'label' => '导航列表',
|
||||
'title' => '导航列表',
|
||||
'type' => 'menu',
|
||||
'route' => 'admin.nav.list',
|
||||
],
|
||||
[
|
||||
'id' => '2-6-2',
|
||||
'label' => '添加导航',
|
||||
'title' => '添加导航',
|
||||
'type' => 'menu',
|
||||
'route' => 'admin.nav.add',
|
||||
],
|
||||
[
|
||||
'id' => '2-6-3',
|
||||
'label' => '编辑导航',
|
||||
'title' => '编辑导航',
|
||||
'type' => 'button',
|
||||
'route' => 'admin.nav.edit',
|
||||
],
|
||||
[
|
||||
'id' => '2-6-4',
|
||||
'label' => '删除导航',
|
||||
'title' => '删除导航',
|
||||
'type' => 'button',
|
||||
'route' => 'admin.nav.delete',
|
||||
],
|
||||
@ -420,34 +420,34 @@ class AuthNode extends Service
|
||||
{
|
||||
return [
|
||||
'id' => '3',
|
||||
'label' => '财务管理',
|
||||
'child' => [
|
||||
'title' => '财务管理',
|
||||
'children' => [
|
||||
[
|
||||
'id' => '3-1',
|
||||
'label' => '订单管理',
|
||||
'title' => '订单管理',
|
||||
'type' => 'menu',
|
||||
'child' => [
|
||||
'children' => [
|
||||
[
|
||||
'id' => '3-1-1',
|
||||
'label' => '订单列表',
|
||||
'title' => '订单列表',
|
||||
'type' => 'menu',
|
||||
'route' => 'admin.order.list',
|
||||
],
|
||||
[
|
||||
'id' => '3-1-2',
|
||||
'label' => '搜索订单',
|
||||
'title' => '搜索订单',
|
||||
'type' => 'menu',
|
||||
'route' => 'admin.order.search',
|
||||
],
|
||||
[
|
||||
'id' => '3-1-3',
|
||||
'label' => '订单详情',
|
||||
'title' => '订单详情',
|
||||
'type' => 'button',
|
||||
'route' => 'admin.order.show',
|
||||
],
|
||||
[
|
||||
'id' => '3-1-4',
|
||||
'label' => '关闭订单',
|
||||
'title' => '关闭订单',
|
||||
'type' => 'button',
|
||||
'route' => 'admin.order.close',
|
||||
],
|
||||
@ -455,30 +455,30 @@ class AuthNode extends Service
|
||||
],
|
||||
[
|
||||
'id' => '3-2',
|
||||
'label' => '交易管理',
|
||||
'title' => '交易管理',
|
||||
'type' => 'menu',
|
||||
'child' => [
|
||||
'children' => [
|
||||
[
|
||||
'id' => '3-2-1',
|
||||
'label' => '交易记录',
|
||||
'title' => '交易记录',
|
||||
'type' => 'menu',
|
||||
'route' => 'admin.trade.list',
|
||||
],
|
||||
[
|
||||
'id' => '3-2-2',
|
||||
'label' => '搜索交易',
|
||||
'title' => '搜索交易',
|
||||
'type' => 'menu',
|
||||
'route' => 'admin.trade.search',
|
||||
],
|
||||
[
|
||||
'id' => '3-2-3',
|
||||
'label' => '关闭交易',
|
||||
'title' => '关闭交易',
|
||||
'type' => 'button',
|
||||
'route' => 'admin.trade.close',
|
||||
],
|
||||
[
|
||||
'id' => '3-2-4',
|
||||
'label' => '交易退款',
|
||||
'title' => '交易退款',
|
||||
'type' => 'button',
|
||||
'route' => 'admin.trade.refund',
|
||||
],
|
||||
@ -486,30 +486,30 @@ class AuthNode extends Service
|
||||
],
|
||||
[
|
||||
'id' => '3-3',
|
||||
'label' => '退款管理',
|
||||
'title' => '退款管理',
|
||||
'type' => 'menu',
|
||||
'child' => [
|
||||
'children' => [
|
||||
[
|
||||
'id' => '3-3-1',
|
||||
'label' => '退款列表',
|
||||
'title' => '退款列表',
|
||||
'type' => 'menu',
|
||||
'route' => 'admin.refund.list',
|
||||
],
|
||||
[
|
||||
'id' => '3-3-2',
|
||||
'label' => '搜索退款',
|
||||
'title' => '搜索退款',
|
||||
'type' => 'menu',
|
||||
'route' => 'admin.refund.search',
|
||||
],
|
||||
[
|
||||
'id' => '3-3-3',
|
||||
'label' => '退款详情',
|
||||
'title' => '退款详情',
|
||||
'type' => 'button',
|
||||
'route' => 'admin.refund.show',
|
||||
],
|
||||
[
|
||||
'id' => '3-3-4',
|
||||
'label' => '审核退款',
|
||||
'title' => '审核退款',
|
||||
'type' => 'button',
|
||||
'route' => 'admin.refund.review',
|
||||
],
|
||||
@ -523,34 +523,34 @@ class AuthNode extends Service
|
||||
{
|
||||
return [
|
||||
'id' => '4',
|
||||
'label' => '用户管理',
|
||||
'child' => [
|
||||
'title' => '用户管理',
|
||||
'children' => [
|
||||
[
|
||||
'id' => '4-1',
|
||||
'label' => '用户管理',
|
||||
'title' => '用户管理',
|
||||
'type' => 'menu',
|
||||
'child' => [
|
||||
'children' => [
|
||||
[
|
||||
'id' => '4-1-1',
|
||||
'label' => '用户列表',
|
||||
'title' => '用户列表',
|
||||
'type' => 'menu',
|
||||
'route' => 'admin.user.list',
|
||||
],
|
||||
[
|
||||
'id' => '4-1-2',
|
||||
'label' => '搜索用户',
|
||||
'title' => '搜索用户',
|
||||
'type' => 'menu',
|
||||
'route' => 'admin.user.search',
|
||||
],
|
||||
[
|
||||
'id' => '4-1-3',
|
||||
'label' => '添加用户',
|
||||
'title' => '添加用户',
|
||||
'type' => 'menu',
|
||||
'route' => 'admin.user.add',
|
||||
],
|
||||
[
|
||||
'id' => '4-1-4',
|
||||
'label' => '编辑用户',
|
||||
'title' => '编辑用户',
|
||||
'type' => 'button',
|
||||
'route' => 'admin.user.edit',
|
||||
]
|
||||
@ -558,30 +558,30 @@ class AuthNode extends Service
|
||||
],
|
||||
[
|
||||
'id' => '4-2',
|
||||
'label' => '角色管理',
|
||||
'title' => '角色管理',
|
||||
'type' => 'menu',
|
||||
'child' => [
|
||||
'children' => [
|
||||
[
|
||||
'id' => '4-2-1',
|
||||
'label' => '角色列表',
|
||||
'title' => '角色列表',
|
||||
'type' => 'menu',
|
||||
'route' => 'admin.role.list',
|
||||
],
|
||||
[
|
||||
'id' => '4-2-2',
|
||||
'label' => '添加角色',
|
||||
'title' => '添加角色',
|
||||
'type' => 'menu',
|
||||
'route' => 'admin.role.add',
|
||||
],
|
||||
[
|
||||
'id' => '4-2-3',
|
||||
'label' => '编辑角色',
|
||||
'title' => '编辑角色',
|
||||
'type' => 'button',
|
||||
'route' => 'admin.role.edit',
|
||||
],
|
||||
[
|
||||
'id' => '4-2-4',
|
||||
'label' => '删除角色',
|
||||
'title' => '删除角色',
|
||||
'type' => 'button',
|
||||
'route' => 'admin.role.delete',
|
||||
]
|
||||
@ -589,24 +589,24 @@ class AuthNode extends Service
|
||||
],
|
||||
[
|
||||
'id' => '4-3',
|
||||
'label' => '操作记录',
|
||||
'title' => '操作记录',
|
||||
'type' => 'menu',
|
||||
'child' => [
|
||||
'children' => [
|
||||
[
|
||||
'id' => '4-3-1',
|
||||
'label' => '记录列表',
|
||||
'title' => '记录列表',
|
||||
'type' => 'menu',
|
||||
'route' => 'admin.audit.list',
|
||||
],
|
||||
[
|
||||
'id' => '4-3-2',
|
||||
'label' => '搜索记录',
|
||||
'title' => '搜索记录',
|
||||
'type' => 'menu',
|
||||
'route' => 'admin.audit.search',
|
||||
],
|
||||
[
|
||||
'id' => '4-3-3',
|
||||
'label' => '浏览记录',
|
||||
'title' => '浏览记录',
|
||||
'type' => 'button',
|
||||
'route' => 'admin.audit.show',
|
||||
],
|
||||
@ -620,70 +620,70 @@ class AuthNode extends Service
|
||||
{
|
||||
return [
|
||||
'id' => '5',
|
||||
'label' => '系统配置',
|
||||
'child' => [
|
||||
'title' => '系统配置',
|
||||
'children' => [
|
||||
[
|
||||
'id' => '5-1',
|
||||
'label' => '配置管理',
|
||||
'title' => '配置管理',
|
||||
'type' => 'menu',
|
||||
'child' => [
|
||||
'children' => [
|
||||
[
|
||||
'id' => '5-1-1',
|
||||
'label' => '网站设置',
|
||||
'title' => '网站设置',
|
||||
'type' => 'menu',
|
||||
'route' => 'admin.setting.site',
|
||||
],
|
||||
[
|
||||
'id' => '5-1-2',
|
||||
'label' => '密钥设置',
|
||||
'title' => '密钥设置',
|
||||
'type' => 'menu',
|
||||
'route' => 'admin.setting.secret',
|
||||
],
|
||||
[
|
||||
'id' => '5-1-3',
|
||||
'label' => '存储设置',
|
||||
'title' => '存储设置',
|
||||
'type' => 'menu',
|
||||
'route' => 'admin.setting.storage',
|
||||
],
|
||||
[
|
||||
'id' => '5-1-4',
|
||||
'label' => '点播设置',
|
||||
'title' => '点播设置',
|
||||
'type' => 'menu',
|
||||
'route' => 'admin.setting.vod',
|
||||
],
|
||||
[
|
||||
'id' => '5-1-5',
|
||||
'label' => '直播设置',
|
||||
'title' => '直播设置',
|
||||
'type' => 'menu',
|
||||
'route' => 'admin.setting.live',
|
||||
],
|
||||
[
|
||||
'id' => '5-1-6',
|
||||
'label' => '短信设置',
|
||||
'title' => '短信设置',
|
||||
'type' => 'menu',
|
||||
'route' => 'admin.setting.smser',
|
||||
],
|
||||
[
|
||||
'id' => '5-1-7',
|
||||
'label' => '邮件设置',
|
||||
'title' => '邮件设置',
|
||||
'type' => 'menu',
|
||||
'route' => 'admin.setting.mailer',
|
||||
],
|
||||
[
|
||||
'id' => '5-1-8',
|
||||
'label' => '验证码设置',
|
||||
'title' => '验证码设置',
|
||||
'type' => 'menu',
|
||||
'route' => 'admin.setting.captcha',
|
||||
],
|
||||
[
|
||||
'id' => '5-1-9',
|
||||
'label' => '支付设置',
|
||||
'title' => '支付设置',
|
||||
'type' => 'menu',
|
||||
'route' => 'admin.setting.pay',
|
||||
],
|
||||
[
|
||||
'id' => '5-1-10',
|
||||
'label' => '会员设置',
|
||||
'title' => '会员设置',
|
||||
'type' => 'menu',
|
||||
'route' => 'admin.setting.vip',
|
||||
]
|
||||
|
@ -21,7 +21,6 @@ use App\Repos\CourseUser as CourseUserRepo;
|
||||
use App\Repos\User as UserRepo;
|
||||
use App\Services\Syncer\CourseIndex as CourseIndexSyncer;
|
||||
use App\Validators\Course as CourseValidator;
|
||||
use Yansongda\Supports\Collection;
|
||||
|
||||
class Course extends Service
|
||||
{
|
||||
@ -183,16 +182,12 @@ class Course extends Service
|
||||
|
||||
public function getStudyExpiryOptions()
|
||||
{
|
||||
$options = CourseModel::studyExpiryOptions();
|
||||
|
||||
return new Collection($options);
|
||||
return CourseModel::studyExpiryOptions();
|
||||
}
|
||||
|
||||
public function getRefundExpiryOptions()
|
||||
{
|
||||
$options = CourseModel::refundExpiryOptions();
|
||||
|
||||
return new Collection($options);
|
||||
return CourseModel::refundExpiryOptions();
|
||||
}
|
||||
|
||||
public function getXmCategories($id)
|
||||
@ -385,6 +380,13 @@ class Course extends Service
|
||||
}
|
||||
}
|
||||
|
||||
$teacherId = $newTeacherIds[0] ?? 0;
|
||||
|
||||
if ($teacherId) {
|
||||
$course->teacher_id = $teacherId;
|
||||
$course->update();
|
||||
}
|
||||
|
||||
$cache = new CourseTeacherListCache();
|
||||
|
||||
$cache->rebuild();
|
||||
|
@ -9,18 +9,14 @@ class Index extends Service
|
||||
{
|
||||
$authMenu = new AuthMenu();
|
||||
|
||||
$topMenus = $authMenu->getTopMenus();
|
||||
|
||||
return kg_array_object($topMenus);
|
||||
return $authMenu->getTopMenus();
|
||||
}
|
||||
|
||||
public function getLeftMenus()
|
||||
{
|
||||
$authMenu = new AuthMenu();
|
||||
|
||||
$leftMenus = $authMenu->getLeftMenus();
|
||||
|
||||
return kg_array_object($leftMenus);
|
||||
return $authMenu->getLeftMenus();
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -37,12 +37,12 @@
|
||||
<tr>
|
||||
<td>{{ item.user_id }}</td>
|
||||
<td>{{ item.user_name }}</td>
|
||||
<td><a class="kg-ip2region" href="javascript:;" title="查看位置" ip="{{ item.user_ip }}">{{ item.user_ip }}</a></td>
|
||||
<td><a class="kg-ip2region" href="javascript:" title="查看位置" data-ip="{{ item.user_ip }}">{{ item.user_ip }}</a></td>
|
||||
<td>{{ item.req_route }}</td>
|
||||
<td>{{ item.req_path }}</td>
|
||||
<td>{{ date('Y-m-d H:i:s',item.create_time) }}</td>
|
||||
<td align="center">
|
||||
<button class="kg-view layui-btn layui-btn-sm" audit-id="{{ item.id }}">浏览</button>
|
||||
<button class="kg-view layui-btn layui-btn-sm" data-url="{{ url({'for':'admin.audit.show','id':item.id}) }}">浏览</button>
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
@ -60,8 +60,7 @@
|
||||
var layer = layui.layer;
|
||||
|
||||
$('.kg-view').on('click', function () {
|
||||
var auditId = $(this).attr('audit-id');
|
||||
var url = '/admin/audit/' + auditId + '/show';
|
||||
var url = $(this).attr('data-url');
|
||||
layer.open({
|
||||
type: 2,
|
||||
title: '请求内容',
|
||||
|
@ -52,17 +52,17 @@
|
||||
<td><span class="layui-badge layui-bg-gray">{{ item.level }}</span></td>
|
||||
<td><span class="layui-badge layui-bg-gray">{{ item.child_count }}</span></td>
|
||||
<td><span class="layui-badge layui-bg-gray">{{ item.course_count }}</span></td>
|
||||
<td><input class="layui-input kg-priority-input" type="text" name="priority" value="{{ item.priority }}" category-id="{{ item.id }}" title="数值越小排序越靠前"></td>
|
||||
<td><input type="checkbox" name="published" value="1" lay-skin="switch" lay-text="是|否" lay-filter="switch-published" category-id="{{ item.id }}" {% if item.published == 1 %}checked{% endif %}></td>
|
||||
<td><input class="layui-input kg-priority-input" type="text" name="priority" title="数值越小排序越靠前" value="{{ item.priority }}" data-url="{{ url({'for':'admin.category.update','id':item.id}) }}"></td>
|
||||
<td><input type="checkbox" name="published" value="1" lay-skin="switch" lay-text="是|否" lay-filter="published" data-url="{{ url({'for':'admin.category.update','id':item.id}) }}" {% if item.published == 1 %}checked{% endif %}></td>
|
||||
<td align="center">
|
||||
<div class="layui-dropdown">
|
||||
<button class="layui-btn layui-btn-sm">操作 <span class="layui-icon layui-icon-triangle-d"></span></button>
|
||||
<ul>
|
||||
<li><a href="{{ url({'for':'admin.category.edit','id':item.id}) }}">编辑</a></li>
|
||||
{% if item.deleted == 0 %}
|
||||
<li><a href="javascript:" class="kg-delete" url="{{ url({'for':'admin.category.delete','id':item.id}) }}">删除</a></li>
|
||||
<li><a href="javascript:" class="kg-delete" data-url="{{ url({'for':'admin.category.delete','id':item.id}) }}">删除</a></li>
|
||||
{% else %}
|
||||
<li><a href="javascript:" class="kg-restore" url="{{ url({'for':'admin.category.restore','id':item.id}) }}">还原</a></li>
|
||||
<li><a href="javascript:" class="kg-restore" data-url="{{ url({'for':'admin.category.restore','id':item.id}) }}">还原</a></li>
|
||||
{% endif %}
|
||||
</ul>
|
||||
</div>
|
||||
@ -70,59 +70,4 @@
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<script>
|
||||
|
||||
layui.use(['jquery', 'form', 'layer'], function () {
|
||||
|
||||
var $ = layui.jquery;
|
||||
var form = layui.form;
|
||||
var layer = layui.layer;
|
||||
|
||||
$('input[name=priority]').on('change', function () {
|
||||
var priority = $(this).val();
|
||||
var categoryId = $(this).attr('category-id');
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
url: '/admin/category/' + categoryId + '/update',
|
||||
data: {priority: priority},
|
||||
success: function (res) {
|
||||
layer.msg(res.msg, {icon: 1});
|
||||
},
|
||||
error: function (xhr) {
|
||||
var json = JSON.parse(xhr.responseText);
|
||||
layer.msg(json.msg, {icon: 2});
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
form.on('switch(switch-published)', function (data) {
|
||||
var categoryId = $(this).attr('category-id');
|
||||
var checked = $(this).is(':checked');
|
||||
var published = checked ? 1 : 0;
|
||||
var tips = published === 1 ? '确定要发布分类?' : '确定要下线分类?';
|
||||
layer.confirm(tips, function () {
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
url: '/admin/category/' + categoryId + '/update',
|
||||
data: {published: published},
|
||||
success: function (res) {
|
||||
layer.msg(res.msg, {icon: 1});
|
||||
},
|
||||
error: function (xhr) {
|
||||
var json = JSON.parse(xhr.responseText);
|
||||
layer.msg(json.msg, {icon: 2});
|
||||
data.elem.checked = !checked;
|
||||
form.render();
|
||||
}
|
||||
});
|
||||
}, function () {
|
||||
data.elem.checked = !checked;
|
||||
form.render();
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
</script>
|
||||
</table>
|
@ -35,30 +35,13 @@
|
||||
var layer = layui.layer;
|
||||
var form = layui.form;
|
||||
|
||||
$('input[name=priority]').on('change', function () {
|
||||
var priority = $(this).val();
|
||||
var chapterId = $(this).attr('chapter-id');
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
url: '/admin/chapter/' + chapterId + '/update',
|
||||
data: {priority: priority},
|
||||
success: function (res) {
|
||||
layer.msg(res.msg, {icon: 1});
|
||||
},
|
||||
error: function (xhr) {
|
||||
var json = JSON.parse(xhr.responseText);
|
||||
layer.msg(json.msg, {icon: 2});
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
form.on('switch(switch-free)', function (data) {
|
||||
var chapterId = $(this).attr('chapter-id');
|
||||
form.on('switch(free)', function (data) {
|
||||
var checked = $(this).is(':checked');
|
||||
var free = checked ? 1 : 0;
|
||||
var url = $(this).attr('data-url');
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
url: '/admin/chapter/' + chapterId + '/update',
|
||||
url: url,
|
||||
data: {free: free},
|
||||
success: function (res) {
|
||||
layer.msg(res.msg, {icon: 1});
|
||||
@ -72,26 +55,6 @@
|
||||
});
|
||||
});
|
||||
|
||||
form.on('switch(switch-published)', function (data) {
|
||||
var chapterId = $(this).attr('chapter-id');
|
||||
var checked = $(this).is(':checked');
|
||||
var published = checked ? 1 : 0;
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
url: '/admin/chapter/' + chapterId + '/update',
|
||||
data: {published: published},
|
||||
success: function (res) {
|
||||
layer.msg(res.msg, {icon: 1});
|
||||
},
|
||||
error: function (xhr) {
|
||||
var json = JSON.parse(xhr.responseText);
|
||||
layer.msg(json.msg, {icon: 2});
|
||||
data.elem.checked = !checked;
|
||||
form.render();
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
</script>
|
@ -1,3 +1,12 @@
|
||||
{%- macro live_time_info(attrs) %}
|
||||
{% if attrs['start_time'] > 0 %}
|
||||
<p>开始:{{ date('Y-m-d H:i', attrs['start_time']) }}</p>
|
||||
<p>结束:{{ date('Y-m-d H:i', attrs['end_time']) }}</p>
|
||||
{% else %}
|
||||
N/A
|
||||
{% endif %}
|
||||
{%- endmacro %}
|
||||
|
||||
<table class="kg-table layui-table layui-form">
|
||||
<colgroup>
|
||||
<col>
|
||||
@ -27,24 +36,16 @@
|
||||
<span>{{ item.title }}</span>
|
||||
<span class="layui-badge layui-bg-green">课</span>
|
||||
</td>
|
||||
<td>
|
||||
{% if item.attrs['start_time'] > 0 %}
|
||||
<p>开始:{{ date('Y-m-d H:i',item.attrs['start_time']) }}</p>
|
||||
<p>结束:{{ date('Y-m-d H:i',item.attrs['end_time']) }}</p>
|
||||
{% else %}
|
||||
N/A
|
||||
{% endif %}
|
||||
</td>
|
||||
<td><input class="layui-input kg-priority-input" type="text" name="priority" value="{{ item.priority }}" chapter-id="{{ item.id }}"></td>
|
||||
<td><input type="checkbox" name="free" value="1" lay-skin="switch" lay-text="是|否" lay-filter="switch-free" chapter-id="{{ item.id }}" {% if item.free == 1 %}checked{% endif %}></td>
|
||||
<td><input type="checkbox" name="published" value="1" lay-skin="switch" lay-text="是|否" lay-filter="switch-published" chapter-id="{{ item.id }}"
|
||||
{% if item.published == 1 %}checked{% endif %}></td>
|
||||
<td>{{ live_time_info(item.attrs) }}</td>
|
||||
<td><input class="layui-input kg-priority-input" type="text" name="priority" title="数值越小排序越靠前" value="{{ item.priority }}" data-url="{{ url({'for':'admin.chapter.update','id':item.id}) }}"></td>
|
||||
<td><input type="checkbox" name="free" value="1" lay-skin="switch" lay-text="是|否" lay-filter="free" data-url="{{ url({'for':'admin.chapter.update','id':item.id}) }}" {% if item.free == 1 %}checked{% endif %}></td>
|
||||
<td><input type="checkbox" name="published" value="1" lay-skin="switch" lay-text="是|否" lay-filter="published" data-url="{{ url({'for':'admin.chapter.update','id':item.id}) }}" {% if item.published == 1 %}checked{% endif %}></td>
|
||||
<td align="center">
|
||||
<div class="layui-dropdown">
|
||||
<button class="layui-btn layui-btn-sm">操作 <span class="layui-icon layui-icon-triangle-d"></span></button>
|
||||
<ul>
|
||||
<li><a href="{{ url({'for':'admin.chapter.edit','id':item.id}) }}">编辑</a></li>
|
||||
<li><a href="javascript:" class="kg-delete" url="{{ url({'for':'admin.chapter.delete','id':item.id}) }}">删除</a></li>
|
||||
<li><a href="javascript:" class="kg-delete" data-url="{{ url({'for':'admin.chapter.delete','id':item.id}) }}">删除</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</td>
|
||||
|
@ -28,15 +28,15 @@
|
||||
<span class="layui-badge layui-bg-green">课</span>
|
||||
</td>
|
||||
<td><span class="layui-badge layui-bg-gray">{{ item.attrs['word_count'] }}</span></td>
|
||||
<td><input class="layui-input kg-priority-input" type="text" name="priority" value="{{ item.priority }}" chapter-id="{{ item.id }}"></td>
|
||||
<td><input type="checkbox" name="free" value="1" lay-skin="switch" lay-text="是|否" lay-filter="switch-free" chapter-id="{{ item.id }}" {% if item.free == 1 %}checked{% endif %}></td>
|
||||
<td><input type="checkbox" name="published" value="1" lay-skin="switch" lay-text="是|否" lay-filter="switch-published" chapter-id="{{ item.id }}" {% if item.published == 1 %}checked{% endif %}></td>
|
||||
<td><input class="layui-input kg-priority-input" type="text" name="priority" title="数值越小排序越靠前" value="{{ item.priority }}" data-url="{{ url({'for':'admin.chapter.update','id':item.id}) }}"></td>
|
||||
<td><input type="checkbox" name="free" value="1" lay-skin="switch" lay-text="是|否" lay-filter="free" data-url="{{ url({'for':'admin.chapter.update','id':item.id}) }}" {% if item.free == 1 %}checked{% endif %}></td>
|
||||
<td><input type="checkbox" name="published" value="1" lay-skin="switch" lay-text="是|否" lay-filter="published" data-url="{{ url({'for':'admin.chapter.update','id':item.id}) }}" {% if item.published == 1 %}checked{% endif %}></td>
|
||||
<td align="center">
|
||||
<div class="layui-dropdown">
|
||||
<button class="layui-btn layui-btn-sm">操作 <span class="layui-icon layui-icon-triangle-d"></span></button>
|
||||
<ul>
|
||||
<li><a href="{{ url({'for':'admin.chapter.edit','id':item.id}) }}">编辑</a></li>
|
||||
<li><a href="javascript:" class="kg-delete" url="{{ url({'for':'admin.chapter.delete','id':item.id}) }}">删除</a></li>
|
||||
<li><a href="javascript:" class="kg-delete" data-url="{{ url({'for':'admin.chapter.delete','id':item.id}) }}">删除</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</td>
|
||||
|
@ -45,17 +45,15 @@
|
||||
</td>
|
||||
<td>{{ file_status(item.attrs['file_status']) }}</td>
|
||||
<td>{{ item.attrs['duration']|play_duration }}</td>
|
||||
<td><input class="layui-input kg-priority-input" type="text" name="priority" value="{{ item.priority }}" chapter-id="{{ item.id }}"></td>
|
||||
<td><input type="checkbox" name="free" value="1" lay-skin="switch" lay-text="是|否" lay-filter="switch-free" chapter-id="{{ item.id }}"
|
||||
{% if item.free == 1 %}checked{% endif %}></td>
|
||||
<td><input type="checkbox" name="published" value="1" lay-skin="switch" lay-text="是|否" lay-filter="switch-published" chapter-id="{{ item.id }}"
|
||||
{% if item.published == 1 %}checked{% endif %}></td>
|
||||
<td><input class="layui-input kg-priority-input" type="text" name="priority" title="数值越小排序越靠前" value="{{ item.priority }}" data-url="{{ url({'for':'admin.chapter.update','id':item.id}) }}"></td>
|
||||
<td><input type="checkbox" name="free" value="1" lay-skin="switch" lay-text="是|否" lay-filter="free" data-url="{{ url({'for':'admin.chapter.update','id':item.id}) }}" {% if item.free == 1 %}checked{% endif %}></td>
|
||||
<td><input type="checkbox" name="published" value="1" lay-skin="switch" lay-text="是|否" lay-filter="published" data-url="{{ url({'for':'admin.chapter.update','id':item.id}) }}" {% if item.published == 1 %}checked{% endif %}></td>
|
||||
<td align="center">
|
||||
<div class="layui-dropdown">
|
||||
<button class="layui-btn layui-btn-sm">操作 <span class="layui-icon layui-icon-triangle-d"></span></button>
|
||||
<ul>
|
||||
<li><a href="{{ url({'for':'admin.chapter.edit','id':item.id}) }}">编辑</a></li>
|
||||
<li><a href="javascript:" class="kg-delete" url="{{ url({'for':'admin.chapter.delete','id':item.id}) }}">删除</a></li>
|
||||
<li><a href="javascript:" class="kg-delete" data-url="{{ url({'for':'admin.chapter.delete','id':item.id}) }}">删除</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</td>
|
||||
|
@ -50,9 +50,7 @@
|
||||
<p>编号:{{ item.user.id }}</p>
|
||||
</td>
|
||||
<td>{{ date('Y-m-d H:i',item.create_time) }}</td>
|
||||
<td><input type="checkbox" name="published" value="1" lay-skin="switch" lay-text="是|否"
|
||||
lay-filter="switch-published" comment-id="{{ item.id }}"
|
||||
{% if item.published == 1 %}checked{% endif %}></td>
|
||||
<td><input type="checkbox" name="published" value="1" lay-skin="switch" lay-text="是|否" lay-filter="published" data-url="{{ url({'for':'admin.comment.update','id':item.id}) }}" {% if item.published == 1 %}checked{% endif %}></td>
|
||||
<td align="center">
|
||||
<div class="layui-dropdown">
|
||||
<button class="layui-btn layui-btn-sm">操作 <span class="layui-icon layui-icon-triangle-d"></span>
|
||||
@ -60,11 +58,9 @@
|
||||
<ul>
|
||||
<li><a href="{{ url({'for':'admin.comment.edit','id':item.id}) }}">编辑</a></li>
|
||||
{% if item.deleted == 0 %}
|
||||
<li><a href="javascript:" url="{{ url({'for':'admin.comment.delete','id':item.id}) }}"
|
||||
class="kg-delete">删除</a></li>
|
||||
<li><a href="javascript:" class="kg-delete" data-url="{{ url({'for':'admin.comment.delete','id':item.id}) }}">删除</a></li>
|
||||
{% else %}
|
||||
<li><a href="javascript:" url="{{ url({'for':'admin.comment.restore','id':item.id}) }}"
|
||||
class="kg-delete">还原</a></li>
|
||||
<li><a href="javascript:" class="kg-restore" data-url="{{ url({'for':'admin.comment.restore','id':item.id}) }}">还原</a></li>
|
||||
{% endif %}
|
||||
</ul>
|
||||
</div>
|
||||
@ -74,41 +70,4 @@
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
{{ partial('partials/pager') }}
|
||||
|
||||
<script>
|
||||
|
||||
layui.use(['jquery', 'form'], function () {
|
||||
|
||||
var $ = layui.jquery;
|
||||
var form = layui.form;
|
||||
|
||||
form.on('switch(switch-published)', function (data) {
|
||||
var commentId = $(this).attr('comment-id');
|
||||
var checked = $(this).is(':checked');
|
||||
var published = checked ? 1 : 0;
|
||||
var tips = published === 1 ? '确定要上线评论?' : '确定要下线评论?';
|
||||
layer.confirm(tips, function () {
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
url: '/admin/comment/' + commentId + '/update',
|
||||
data: {published: published},
|
||||
success: function (res) {
|
||||
layer.msg(res.msg, {icon: 1});
|
||||
},
|
||||
error: function (xhr) {
|
||||
var json = JSON.parse(xhr.responseText);
|
||||
layer.msg(json.msg, {icon: 2});
|
||||
data.elem.checked = !checked;
|
||||
form.render();
|
||||
}
|
||||
});
|
||||
}, function () {
|
||||
data.elem.checked = !checked;
|
||||
form.render();
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
</script>
|
||||
{{ partial('partials/pager') }}
|
@ -47,9 +47,7 @@
|
||||
<p>编号:{{ item.user.id }}</p>
|
||||
</td>
|
||||
<td>{{ date('Y-m-d H:i',item.create_time) }}</td>
|
||||
<td><input type="checkbox" name="published" value="1" lay-skin="switch" lay-text="是|否"
|
||||
lay-filter="switch-published" consult-id="{{ item.id }}"
|
||||
{% if item.published == 1 %}checked{% endif %}></td>
|
||||
<td><input type="checkbox" name="published" value="1" lay-skin="switch" lay-text="是|否" lay-filter="published" data-url="{{ url({'for':'admin.consult.update','id':item.id}) }}" {% if item.published == 1 %}checked{% endif %}></td>
|
||||
<td align="center">
|
||||
<div class="layui-dropdown">
|
||||
<button class="layui-btn layui-btn-sm">操作 <span class="layui-icon layui-icon-triangle-d"></span>
|
||||
@ -57,11 +55,9 @@
|
||||
<ul>
|
||||
<li><a href="{{ url({'for':'admin.consult.edit','id':item.id}) }}">编辑</a></li>
|
||||
{% if item.deleted == 0 %}
|
||||
<li><a href="javascript:" url="{{ url({'for':'admin.consult.delete','id':item.id}) }}"
|
||||
class="kg-delete">删除</a></li>
|
||||
<li><a href="javascript:" class="kg-delete" data-url="{{ url({'for':'admin.consult.delete','id':item.id}) }}">删除</a></li>
|
||||
{% else %}
|
||||
<li><a href="javascript:" url="{{ url({'for':'admin.consult.restore','id':item.id}) }}"
|
||||
class="kg-delete">还原</a></li>
|
||||
<li><a href="javascript:" class="kg-restore" data-url="{{ url({'for':'admin.consult.restore','id':item.id}) }}">还原</a></li>
|
||||
{% endif %}
|
||||
</ul>
|
||||
</div>
|
||||
@ -71,41 +67,4 @@
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
{{ partial('partials/pager') }}
|
||||
|
||||
<script>
|
||||
|
||||
layui.use(['jquery', 'form'], function () {
|
||||
|
||||
var $ = layui.jquery;
|
||||
var form = layui.form;
|
||||
|
||||
form.on('switch(switch-published)', function (data) {
|
||||
var consultId = $(this).attr('consult-id');
|
||||
var checked = $(this).is(':checked');
|
||||
var published = checked ? 1 : 0;
|
||||
var tips = published === 1 ? '确定要上线咨询?' : '确定要下线咨询?';
|
||||
layer.confirm(tips, function () {
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
url: '/admin/consult/' + consultId + '/update',
|
||||
data: {published: published},
|
||||
success: function (res) {
|
||||
layer.msg(res.msg, {icon: 1});
|
||||
},
|
||||
error: function (xhr) {
|
||||
var json = JSON.parse(xhr.responseText);
|
||||
layer.msg(json.msg, {icon: 2});
|
||||
data.elem.checked = !checked;
|
||||
form.render();
|
||||
}
|
||||
});
|
||||
}, function () {
|
||||
data.elem.checked = !checked;
|
||||
form.render();
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
</script>
|
||||
{{ partial('partials/pager') }}
|
@ -42,48 +42,17 @@
|
||||
<span class="layui-badge layui-bg-green">{{ item.lesson_count }}</span>
|
||||
</a>
|
||||
</td>
|
||||
<td><input class="layui-input kg-priority-input" type="text" name="priority" value="{{ item.priority }}" chapter-id="{{ item.id }}"></td>
|
||||
<td><input class="layui-input kg-priority-input" type="text" name="priority" value="{{ item.priority }}" data-url="{{ url({'for':'admin.chapter.update','id':item.id}) }}"></td>
|
||||
<td align="center">
|
||||
<div class="layui-dropdown">
|
||||
<button class="layui-btn layui-btn-sm">操作 <span class="layui-icon layui-icon-triangle-d"></span></button>
|
||||
<ul>
|
||||
<li><a href="{{ url({'for':'admin.chapter.edit','id':item.id}) }}">编辑</a></li>
|
||||
<li><a href="javascript:" class="kg-delete" url="{{ url({'for':'admin.chapter.delete','id':item.id}) }}">删除</a></li>
|
||||
<li><a href="javascript:" class="kg-delete" data-url="{{ url({'for':'admin.chapter.delete','id':item.id}) }}">删除</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<script>
|
||||
|
||||
layui.use(['jquery', 'layer', 'form', 'element'], function () {
|
||||
|
||||
var $ = layui.jquery;
|
||||
var layer = layui.layer;
|
||||
var form = layui.form;
|
||||
|
||||
$('input[name=priority]').on('change', function () {
|
||||
|
||||
var priority = $(this).val();
|
||||
var chapterId = $(this).attr('chapter-id');
|
||||
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
url: '/admin/chapter/' + chapterId + '/update',
|
||||
data: {priority: priority},
|
||||
success: function (res) {
|
||||
layer.msg(res.msg, {icon: 1});
|
||||
},
|
||||
error: function (xhr) {
|
||||
var json = JSON.parse(xhr.responseText);
|
||||
layer.msg(json.msg, {icon: 2});
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
</script>
|
||||
</table>
|
@ -70,17 +70,16 @@
|
||||
<p>市场:¥{{ item.market_price }}</p>
|
||||
<p>会员:¥{{ item.vip_price }}</p>
|
||||
</td>
|
||||
<td><input type="checkbox" name="published" value="1" lay-skin="switch" lay-text="是|否" lay-filter="switch-published" course-id="{{ item.id }}"
|
||||
{% if item.published == 1 %}checked{% endif %}></td>
|
||||
<td><input type="checkbox" name="published" value="1" lay-skin="switch" lay-text="是|否" lay-filter="published" data-url="{{ url({'for':'admin.course.update','id':item.id}) }}" {% if item.published == 1 %}checked{% endif %}></td>
|
||||
<td align="center">
|
||||
<div class="layui-dropdown">
|
||||
<button class="layui-btn layui-btn-sm">操作 <span class="layui-icon layui-icon-triangle-d"></span></button>
|
||||
<ul>
|
||||
<li><a href="{{ url({'for':'admin.course.edit','id':item.id}) }}">编辑课程</a></li>
|
||||
{% if item.deleted == 0 %}
|
||||
<li><a href="javascript:" class="kg-delete" url="{{ url({'for':'admin.course.delete','id':item.id}) }}">删除课程</a></li>
|
||||
<li><a href="javascript:" class="kg-delete" data-url="{{ url({'for':'admin.course.delete','id':item.id}) }}">删除课程</a></li>
|
||||
{% else %}
|
||||
<li><a href="javascript:" class="kg-restore" url="{{ url({'for':'admin.course.restore','id':item.id}) }}">还原课程</a></li>
|
||||
<li><a href="javascript:" class="kg-restore" data-url="{{ url({'for':'admin.course.restore','id':item.id}) }}">还原课程</a></li>
|
||||
{% endif %}
|
||||
<hr>
|
||||
<li><a href="{{ url({'for':'admin.course.chapters','id':item.id}) }}">章节管理</a></li>
|
||||
@ -95,41 +94,4 @@
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
{{ partial('partials/pager') }}
|
||||
|
||||
<script>
|
||||
|
||||
layui.use(['jquery', 'form'], function () {
|
||||
|
||||
var $ = layui.jquery;
|
||||
var form = layui.form;
|
||||
|
||||
form.on('switch(switch-published)', function (data) {
|
||||
var courseId = $(this).attr('course-id');
|
||||
var checked = $(this).is(':checked');
|
||||
var published = checked ? 1 : 0;
|
||||
var tips = published === 1 ? '确定要发布课程?' : '确定要下架课程?';
|
||||
layer.confirm(tips, function () {
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
url: '/admin/course/' + courseId + '/update',
|
||||
data: {published: published},
|
||||
success: function (res) {
|
||||
layer.msg(res.msg, {icon: 1});
|
||||
},
|
||||
error: function (xhr) {
|
||||
var json = JSON.parse(xhr.responseText);
|
||||
layer.msg(json.msg, {icon: 2});
|
||||
data.elem.checked = !checked;
|
||||
form.render();
|
||||
}
|
||||
});
|
||||
}, function () {
|
||||
data.elem.checked = !checked;
|
||||
form.render();
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
</script>
|
||||
{{ partial('partials/pager') }}
|
@ -39,74 +39,19 @@
|
||||
<td>{{ item.title }}</td>
|
||||
<td>{{ date('Y-m-d H:i',item.create_time) }}</td>
|
||||
<td>{{ date('Y-m-d H:i',item.update_time) }}</td>
|
||||
<td><input class="layui-input kg-priority-input" type="text" name="priority" value="{{ item.priority }}" help-id="{{ item.id }}" title="数值越小排序越靠前"></td>
|
||||
<td><input type="checkbox" name="published" value="1" lay-skin="switch" lay-text="是|否" lay-filter="switch-published" help-id="{{ item.id }}" {% if item.published == 1 %}checked{% endif %}>
|
||||
<td><input class="layui-input kg-priority-input" type="text" name="priority" title="数值越小排序越靠前" value="{{ item.priority }}" data-url="{{ url({'for':'admin.help.update','id':item.id}) }}"></td>
|
||||
<td><input type="checkbox" name="published" value="1" lay-skin="switch" lay-text="是|否" lay-filter="published" data-url="{{ url({'for':'admin.help.update','id':item.id}) }}" {% if item.published == 1 %}checked{% endif %}>
|
||||
</td>
|
||||
<td align="center">
|
||||
<div class="layui-dropdown">
|
||||
<button class="layui-btn layui-btn-sm">操作 <span class="layui-icon layui-icon-triangle-d"></span></button>
|
||||
<ul>
|
||||
<li><a href="{{ url({'for':'admin.page.edit','id':item.id}) }}">编辑</a></li>
|
||||
<li><a href="javascript:" url="{{ url({'for':'admin.page.delete','id':item.id}) }}" class="kg-delete">删除</a></li>
|
||||
<li><a href="javascript:" class="kg-delete" data-url="{{ url({'for':'admin.page.delete','id':item.id}) }}">删除</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<script>
|
||||
|
||||
layui.use(['jquery', 'form', 'layer'], function () {
|
||||
|
||||
var $ = layui.jquery;
|
||||
var form = layui.form;
|
||||
var layer = layui.layer;
|
||||
|
||||
$('input[name=priority]').on('change', function () {
|
||||
var priority = $(this).val();
|
||||
var helpId = $(this).attr('help-id');
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
url: '/admin/help/' + helpId + '/update',
|
||||
data: {priority: priority},
|
||||
success: function (res) {
|
||||
layer.msg(res.msg, {icon: 1});
|
||||
},
|
||||
error: function (xhr) {
|
||||
var json = JSON.parse(xhr.responseText);
|
||||
layer.msg(json.msg, {icon: 2});
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
form.on('switch(switch-published)', function (data) {
|
||||
var helpId = $(this).attr('help-id');
|
||||
var checked = $(this).is(':checked');
|
||||
var published = checked ? 1 : 0;
|
||||
var tips = published === 1 ? '确定要发布帮助?' : '确定要下架帮助?';
|
||||
layer.confirm(tips, function () {
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
url: '/admin/help/' + helpId + '/update',
|
||||
data: {published: published},
|
||||
success: function (res) {
|
||||
layer.msg(res.msg, {icon: 1});
|
||||
},
|
||||
error: function (xhr) {
|
||||
var json = JSON.parse(xhr.responseText);
|
||||
layer.msg(json.msg, {icon: 2});
|
||||
data.elem.checked = !checked;
|
||||
form.render();
|
||||
}
|
||||
});
|
||||
}, function () {
|
||||
data.elem.checked = !checked;
|
||||
form.render();
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
</script>
|
||||
</table>
|
@ -22,9 +22,9 @@
|
||||
<a href="javascript:"><i class="layui-icon layui-icon-spread-left"></i></a>
|
||||
</div>
|
||||
<ul class="layui-nav layui-layout-left kg-nav-module">
|
||||
{% for item in top_menus %}
|
||||
{% for item in top_menus|array_object %}
|
||||
<li nav-module="module-{{ item.id }}" class="layui-nav-item">
|
||||
<a href="javascript:">{{ item.label }}</a>
|
||||
<a href="javascript:">{{ item.title }}</a>
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
@ -45,14 +45,14 @@
|
||||
|
||||
<div class="layui-side layui-bg-black">
|
||||
<div class="layui-side-scroll">
|
||||
{% for key,level in left_menus %}
|
||||
{% for key,level in left_menus|array_object %}
|
||||
<ul class="layui-nav layui-nav-tree {% if key != 0 %}layui-hide{% endif %}" nav-module="module-{{ level.id }}" lay-shrink="all">
|
||||
{% for key2,level2 in level.child %}
|
||||
{% for key2,level2 in level.children %}
|
||||
<li class="layui-nav-item {% if key2 == 0 %}layui-nav-itemed{% endif %}">
|
||||
<a href="javascript:">{{ level2.label }}</a>
|
||||
<a href="javascript:">{{ level2.title }}</a>
|
||||
<dl class="layui-nav-child">
|
||||
{% for level3 in level2.child %}
|
||||
<dd><a target="content" href="{{ level3.url }}">{{ level3.label }}</a></dd>
|
||||
{% for level3 in level2.children %}
|
||||
<dd><a target="content" href="{{ level3.url }}">{{ level3.title }}</a></dd>
|
||||
{% endfor %}
|
||||
</dl>
|
||||
</li>
|
||||
|
@ -71,17 +71,17 @@
|
||||
<td><span class="layui-badge layui-bg-gray">{{ item.child_count }}</span></td>
|
||||
<td>{{ position_info(item.position) }}</td>
|
||||
<td>{{ target_info(item.target) }}</td>
|
||||
<td><input class="layui-input kg-priority-input" type="text" name="priority" value="{{ item.priority }}" nav-id="{{ item.id }}" title="数值越小排序越靠前"></td>
|
||||
<td><input type="checkbox" name="published" value="1" lay-skin="switch" lay-text="是|否" lay-filter="switch-published" nav-id="{{ item.id }}" {% if item.published == 1 %}checked{% endif %}></td>
|
||||
<td><input class="layui-input kg-priority-input" type="text" name="priority" title="数值越小排序越靠前" value="{{ item.priority }}" data-url="{{ url({'for':'admin.nav.update','id':item.id}) }}"></td>
|
||||
<td><input type="checkbox" name="published" value="1" lay-skin="switch" lay-text="是|否" lay-filter="published" data-url="{{ url({'for':'admin.nav.update','id':item.id}) }}" {% if item.published == 1 %}checked{% endif %}></td>
|
||||
<td align="center">
|
||||
<div class="layui-dropdown">
|
||||
<button class="layui-btn layui-btn-sm">操作 <span class="layui-icon layui-icon-triangle-d"></span></button>
|
||||
<ul>
|
||||
<li><a href="{{ url({'for':'admin.nav.edit','id':item.id}) }}">编辑</a></li>
|
||||
{% if item.deleted == 0 %}
|
||||
<li><a href="javascript:" class="kg-delete" url="{{ url({'for':'admin.nav.delete','id':item.id}) }}">删除</a></li>
|
||||
<li><a href="javascript:" class="kg-delete" data-url="{{ url({'for':'admin.nav.delete','id':item.id}) }}">删除</a></li>
|
||||
{% else %}
|
||||
<li><a href="javascript:" class="kg-restore" url="{{ url({'for':'admin.nav.restore','id':item.id}) }}">还原</a></li>
|
||||
<li><a href="javascript:" class="kg-restore" data-url="{{ url({'for':'admin.nav.restore','id':item.id}) }}">还原</a></li>
|
||||
{% endif %}
|
||||
</ul>
|
||||
</div>
|
||||
@ -89,59 +89,4 @@
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<script>
|
||||
|
||||
layui.use(['jquery', 'form', 'layer'], function () {
|
||||
|
||||
var $ = layui.jquery;
|
||||
var form = layui.form;
|
||||
var layer = layui.layer;
|
||||
|
||||
$('input[name=priority]').on('change', function () {
|
||||
var priority = $(this).val();
|
||||
var navId = $(this).attr('nav-id');
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
url: '/admin/nav/' + navId + '/update',
|
||||
data: {priority: priority},
|
||||
success: function (res) {
|
||||
layer.msg(res.msg, {icon: 1});
|
||||
},
|
||||
error: function (xhr) {
|
||||
var json = JSON.parse(xhr.responseText);
|
||||
layer.msg(json.msg, {icon: 2});
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
form.on('switch(switch-published)', function (data) {
|
||||
var navId = $(this).attr('nav-id');
|
||||
var checked = $(this).is(':checked');
|
||||
var published = checked ? 1 : 0;
|
||||
var tips = published === 1 ? '确定要发布导航?' : '确定要下线导航?';
|
||||
layer.confirm(tips, function () {
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
url: '/admin/nav/' + navId + '/update',
|
||||
data: {published: published},
|
||||
success: function (res) {
|
||||
layer.msg(res.msg, {icon: 1});
|
||||
},
|
||||
error: function (xhr) {
|
||||
var json = JSON.parse(xhr.responseText);
|
||||
layer.msg(json.msg, {icon: 2});
|
||||
data.elem.checked = !checked;
|
||||
form.render();
|
||||
}
|
||||
});
|
||||
}, function () {
|
||||
data.elem.checked = !checked;
|
||||
form.render();
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
</script>
|
||||
</table>
|
@ -30,7 +30,7 @@
|
||||
|
||||
<div style="text-align: center">
|
||||
{% if order.status == 'pending' %}
|
||||
<button class="kg-close layui-btn layui-bg-green" order-id="{{ order.id }}">关闭订单</button>
|
||||
<button class="kg-close layui-btn layui-bg-green" data-url="{{ url({'for':'admin.order.close','id':item.id}) }}">关闭订单</button>
|
||||
{% endif %}
|
||||
<button class="kg-back layui-btn layui-bg-gray">返回上页</button>
|
||||
</div>
|
||||
@ -113,12 +113,12 @@
|
||||
var $ = layui.jquery;
|
||||
|
||||
$('.kg-close').on('click', function () {
|
||||
var orderId = $(this).attr('order-id');
|
||||
var url = $(this).attr('data-url');
|
||||
var tips = '确定要关闭订单吗?';
|
||||
layer.confirm(tips, function () {
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
url: '/admin/order/' + orderId + '/close',
|
||||
url: url,
|
||||
success: function (res) {
|
||||
layer.msg(res.msg, {icon: 1});
|
||||
setTimeout(function () {
|
||||
|
@ -40,13 +40,13 @@
|
||||
<td><span class="layui-badge layui-bg-gray">{{ item.course_count }}</span></td>
|
||||
<td>¥{{ item.market_price }}</td>
|
||||
<td>¥{{ item.vip_price }}</td>
|
||||
<td><input type="checkbox" name="published" value="1" lay-skin="switch" lay-text="是|否" lay-filter="switch-published" package-id="{{ item.id }}" {% if item.published == 1 %}checked{% endif %}></td>
|
||||
<td><input type="checkbox" name="published" value="1" lay-skin="switch" lay-text="是|否" lay-filter="published" data-url="{{ url({'for':'admin.package.update','id':item.id}) }}" {% if item.published == 1 %}checked{% endif %}></td>
|
||||
<td align="center">
|
||||
<div class="layui-dropdown">
|
||||
<button class="layui-btn layui-btn-sm">操作 <span class="layui-icon layui-icon-triangle-d"></span></button>
|
||||
<ul>
|
||||
<li><a href="{{ url({'for':'admin.package.edit','id':item.id}) }}">编辑</a></li>
|
||||
<li><a href="javascript:" url="{{ url({'for':'admin.package.delete','id':item.id}) }}" class="kg-delete">删除</a></li>
|
||||
<li><a href="javascript:" class="kg-delete" data-url="{{ url({'for':'admin.package.delete','id':item.id}) }}">删除</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</td>
|
||||
@ -55,41 +55,4 @@
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
{{ partial('partials/pager') }}
|
||||
|
||||
<script>
|
||||
|
||||
layui.use(['jquery', 'form'], function () {
|
||||
|
||||
var $ = layui.jquery;
|
||||
var form = layui.form;
|
||||
|
||||
form.on('switch(switch-published)', function (data) {
|
||||
var packageId = $(this).attr('package-id');
|
||||
var checked = $(this).is(':checked');
|
||||
var published = checked ? 1 : 0;
|
||||
var tips = published === 1 ? '确定要发布套餐?' : '确定要下架套餐?';
|
||||
layer.confirm(tips, function () {
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
url: '/admin/package/' + packageId + '/update',
|
||||
data: {published: published},
|
||||
success: function (res) {
|
||||
layer.msg(res.msg, {icon: 1});
|
||||
},
|
||||
error: function (xhr) {
|
||||
var json = JSON.parse(xhr.responseText);
|
||||
layer.msg(json.msg, {icon: 2});
|
||||
data.elem.checked = !checked;
|
||||
form.render();
|
||||
}
|
||||
});
|
||||
}, function () {
|
||||
data.elem.checked = !checked;
|
||||
form.render();
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
</script>
|
||||
{{ partial('partials/pager') }}
|
@ -37,14 +37,14 @@
|
||||
<td>{{ item.title }}</td>
|
||||
<td>{{ date('Y-m-d H:i',item.create_time) }}</td>
|
||||
<td>{{ date('Y-m-d H:i',item.update_time) }}</td>
|
||||
<td><input type="checkbox" name="published" value="1" lay-skin="switch" lay-text="是|否" lay-filter="switch-published" page-id="{{ item.id }}" {% if item.published == 1 %}checked{% endif %}>
|
||||
<td><input type="checkbox" name="published" value="1" lay-skin="switch" lay-text="是|否" lay-filter="published" data-url="{{ url({'for':'admin.page.update','id':item.id}) }}" {% if item.published == 1 %}checked{% endif %}>
|
||||
</td>
|
||||
<td align="center">
|
||||
<div class="layui-dropdown">
|
||||
<button class="layui-btn layui-btn-sm">操作 <span class="layui-icon layui-icon-triangle-d"></span></button>
|
||||
<ul>
|
||||
<li><a href="{{ url({'for':'admin.page.edit','id':item.id}) }}">编辑</a></li>
|
||||
<li><a href="javascript:" url="{{ url({'for':'admin.page.delete','id':item.id}) }}" class="kg-delete">删除</a></li>
|
||||
<li><a href="javascript:" class="kg-delete" data-url="{{ url({'for':'admin.page.delete','id':item.id}) }}">删除</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</td>
|
||||
|
@ -6,7 +6,7 @@
|
||||
var layer = layui.layer;
|
||||
|
||||
$('.kg-ip2region').on('click', function () {
|
||||
var ip = $(this).attr('ip');
|
||||
var ip = $(this).attr('data-ip');
|
||||
var url = '/admin/ip2region?ip=' + ip;
|
||||
layer.open({
|
||||
type: 2,
|
||||
|
@ -45,17 +45,16 @@
|
||||
<p>编号:{{ item.user.id }}</p>
|
||||
</td>
|
||||
<td>{{ date('Y-m-d H:i',item.create_time) }}</td>
|
||||
<td><input type="checkbox" name="published" value="1" lay-skin="switch" lay-text="是|否" lay-filter="switch-published" review-id="{{ item.id }}"
|
||||
{% if item.published == 1 %}checked{% endif %}></td>
|
||||
<td><input type="checkbox" name="published" value="1" lay-skin="switch" lay-text="是|否" lay-filter="published" data-url="{{ url({'for':'admin.review.update','id':item.id}) }}" {% if item.published == 1 %}checked{% endif %}></td>
|
||||
<td align="center">
|
||||
<div class="layui-dropdown">
|
||||
<button class="layui-btn layui-btn-sm">操作 <span class="layui-icon layui-icon-triangle-d"></span></button>
|
||||
<ul>
|
||||
<li><a href="{{ url({'for':'admin.review.edit','id':item.id}) }}">编辑</a></li>
|
||||
{% if item.deleted == 0 %}
|
||||
<li><a href="javascript:" url="{{ url({'for':'admin.review.delete','id':item.id}) }}" class="kg-delete">删除</a></li>
|
||||
<li><a href="javascript:" class="kg-delete" data-url="{{ url({'for':'admin.review.delete','id':item.id}) }}">删除</a></li>
|
||||
{% else %}
|
||||
<li><a href="javascript:" url="{{ url({'for':'admin.review.restore','id':item.id}) }}" class="kg-delete">还原</a></li>
|
||||
<li><a href="javascript:" class="kg-restore" data-url="{{ url({'for':'admin.review.restore','id':item.id}) }}">还原</a></li>
|
||||
{% endif %}
|
||||
</ul>
|
||||
</div>
|
||||
@ -65,50 +64,4 @@
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
{{ partial('partials/pager') }}
|
||||
|
||||
<script>
|
||||
|
||||
layui.use(['jquery', 'form', 'rate'], function () {
|
||||
|
||||
var $ = layui.jquery;
|
||||
var form = layui.form;
|
||||
var rate = layui.rate;
|
||||
|
||||
form.on('switch(switch-published)', function (data) {
|
||||
var reviewId = $(this).attr('review-id');
|
||||
var checked = $(this).is(':checked');
|
||||
var published = checked ? 1 : 0;
|
||||
var tips = published === 1 ? '确定要上线评价?' : '确定要下线评价?';
|
||||
layer.confirm(tips, function () {
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
url: '/admin/review/' + reviewId + '/update',
|
||||
data: {published: published},
|
||||
success: function (res) {
|
||||
layer.msg(res.msg, {icon: 1});
|
||||
},
|
||||
error: function (xhr) {
|
||||
var json = JSON.parse(xhr.responseText);
|
||||
layer.msg(json.msg, {icon: 2});
|
||||
data.elem.checked = !checked;
|
||||
form.render();
|
||||
}
|
||||
});
|
||||
}, function () {
|
||||
data.elem.checked = !checked;
|
||||
form.render();
|
||||
});
|
||||
});
|
||||
|
||||
$('.kg-rating').each(function () {
|
||||
rate.render({
|
||||
elem: $(this),
|
||||
value: $(this).text(),
|
||||
readonly: true
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
</script>
|
||||
{{ partial('partials/pager') }}
|
@ -23,15 +23,15 @@
|
||||
<div class="layui-input-block">
|
||||
{% for key,level in auth_nodes %}
|
||||
<table class="layui-table">
|
||||
{% for key2,level2 in level.child %}
|
||||
{% for key2,level2 in level.children %}
|
||||
<tr>
|
||||
{% if key2 == 0 %}
|
||||
<td width="15%" rowspan="{{ level.child|length }}">{{ level.label }}</td>
|
||||
<td width="15%" rowspan="{{ level.children|length }}">{{ level.title }}</td>
|
||||
{% endif %}
|
||||
<td width="15%">{{ level2.label }}</td>
|
||||
<td width="15%">{{ level2.title }}</td>
|
||||
<td>
|
||||
{% for level3 in level2.child %}
|
||||
<input type="checkbox" name="routes[]" title="{{ level3.label }}" value="{{ level3.route }}" {% if level3.route in role.routes %}checked{% endif %}>
|
||||
{% for level3 in level2.children %}
|
||||
<input type="checkbox" name="routes[]" title="{{ level3.title }}" value="{{ level3.route }}" {% if level3.route in role.routes %}checked{% endif %}>
|
||||
{% endfor %}
|
||||
</td>
|
||||
</tr>
|
||||
|
@ -52,7 +52,7 @@
|
||||
<button class="layui-btn layui-btn-sm">操作 <span class="layui-icon layui-icon-triangle-d"></span></button>
|
||||
<ul>
|
||||
<li><a href="{{ url({'for':'admin.role.edit','id':item.id}) }}">编辑</a></li>
|
||||
<li><a href="javascript:" url="{{ url({'for':'admin.role.delete','id':item.id}) }}" class="kg-delete">删除</a></li>
|
||||
<li><a href="javascript:" class="kg-delete" data-url="{{ url({'for':'admin.role.delete','id':item.id}) }}">删除</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</td>
|
||||
|
@ -46,15 +46,14 @@
|
||||
<td>{{ item.id }}</td>
|
||||
<td>{{ item.title }}</td>
|
||||
<td>{{ target_info(item.target) }}</td>
|
||||
<td><input class="layui-input kg-priority-input" type="text" name="priority" value="{{ item.priority }}" slide-id="{{ item.id }}" title="数值越小排序越靠前"></td>
|
||||
<td><input type="checkbox" name="published" value="1" lay-filter="switch-published" lay-skin="switch" lay-text="是|否" slide-id="{{ item.id }}"
|
||||
{% if item.published == 1 %}checked{% endif %}></td>
|
||||
<td><input class="layui-input kg-priority-input" type="text" name="priority" title="数值越小排序越靠前" value="{{ item.priority }}" data-url="{{ url({'for':'admin.slide.update','id':item.id}) }}"></td>
|
||||
<td><input type="checkbox" name="published" value="1" lay-filter="switch-published" lay-skin="switch" lay-text="是|否" data-url="{{ url({'for':'admin.slide.update','id':item.id}) }}" {% if item.published == 1 %}checked{% endif %}></td>
|
||||
<td align="center">
|
||||
<div class="layui-dropdown">
|
||||
<button class="layui-btn layui-btn-sm">操作 <span class="layui-icon layui-icon-triangle-d"></span></button>
|
||||
<ul>
|
||||
<li><a href="{{ url({'for':'admin.slide.edit','id':item.id}) }}">编辑</a></li>
|
||||
<li><a href="javascript:" url="{{ url({'for':'admin.slide.delete','id':item.id}) }}" class="kg-delete">删除</a></li>
|
||||
<li><a href="javascript:" class="kg-delete" data-url="{{ url({'for':'admin.slide.delete','id':item.id}) }}">删除</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</td>
|
||||
@ -63,61 +62,4 @@
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
{{ partial('partials/pager') }}
|
||||
|
||||
<script>
|
||||
|
||||
layui.use(['jquery', 'form', 'layer'], function () {
|
||||
|
||||
var $ = layui.jquery;
|
||||
var form = layui.form;
|
||||
var layer = layui.layer;
|
||||
|
||||
$('input[name=priority]').on('change', function () {
|
||||
var priority = $(this).val();
|
||||
var slideId = $(this).attr('slide-id');
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
url: '/admin/slide/' + slideId + '/update',
|
||||
data: {priority: priority},
|
||||
success: function (res) {
|
||||
layer.msg(res.msg, {icon: 1});
|
||||
},
|
||||
error: function (xhr) {
|
||||
var json = JSON.parse(xhr.responseText);
|
||||
layer.msg(json.msg, {icon: 2});
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
form.on('switch(switch-published)', function (data) {
|
||||
|
||||
var slideId = $(this).attr('slide-id');
|
||||
var checked = $(this).is(':checked');
|
||||
var published = checked ? 1 : 0;
|
||||
var tips = published === 1 ? '确定要发布轮播?' : '确定要下架轮播?';
|
||||
|
||||
layer.confirm(tips, function () {
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
url: '/admin/slide/' + slideId + '/update',
|
||||
data: {published: published},
|
||||
success: function (res) {
|
||||
layer.msg(res.msg, {icon: 1});
|
||||
},
|
||||
error: function (xhr) {
|
||||
var json = JSON.parse(xhr.responseText);
|
||||
layer.msg(json.msg, {icon: 2});
|
||||
data.elem.checked = !checked;
|
||||
form.render();
|
||||
}
|
||||
});
|
||||
}, function () {
|
||||
data.elem.checked = !checked;
|
||||
form.render();
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
</script>
|
||||
{{ partial('partials/pager') }}
|
@ -6,7 +6,7 @@
|
||||
{% endif %}
|
||||
{%- endmacro %}
|
||||
|
||||
{%- macro last_active(create_time, update_time) %}
|
||||
{%- macro last_active_time(create_time, update_time) %}
|
||||
{% if update_time > 0 %}
|
||||
{{ date('Y-m-d H:i', update_time) }}
|
||||
{% else %}
|
||||
@ -40,54 +40,12 @@
|
||||
</td>
|
||||
<td>{{ item.duration|play_duration }}</td>
|
||||
<td>{{ client_type(item.client_type) }}</td>
|
||||
<td><a class="kg-ip2region" href="javascript:;" title="查看位置" ip="{{ item.client_ip }}">{{ item.client_ip }}</a></td>
|
||||
<td>{{ last_active(item.create_time, item.update_time) }}</td>
|
||||
<td><a href="javascript:" class="kg-ip2region" title="查看位置" data-ip="{{ item.client_ip }}">{{ item.client_ip }}</a></td>
|
||||
<td>{{ last_active_time(item.create_time,item.update_time) }}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
{{ partial('partials/pager') }}
|
||||
{{ partial('partials/ip2region') }}
|
||||
|
||||
<script>
|
||||
|
||||
layui.use(['jquery', 'form'], function () {
|
||||
|
||||
var $ = layui.jquery;
|
||||
var form = layui.form;
|
||||
|
||||
form.on('switch(switch-locked)', function (data) {
|
||||
var courseId = $(this).attr('course-id');
|
||||
var userId = $(this).attr('user-id');
|
||||
var checked = $(this).is(':checked');
|
||||
var locked = checked ? 1 : 0;
|
||||
var tips = locked == 1 ? '确定要锁定用户?' : '确定要解锁用户?';
|
||||
layer.confirm(tips, function () {
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
url: '/admin/student/update',
|
||||
data: {
|
||||
course_id: courseId,
|
||||
user_id: userId,
|
||||
locked: locked
|
||||
},
|
||||
success: function (res) {
|
||||
layer.msg(res.msg, {icon: 1});
|
||||
},
|
||||
error: function (xhr) {
|
||||
var json = JSON.parse(xhr.responseText);
|
||||
layer.msg(json.msg, {icon: 2});
|
||||
data.elem.checked = !checked;
|
||||
form.render();
|
||||
}
|
||||
});
|
||||
}, function () {
|
||||
data.elem.checked = !checked;
|
||||
form.render();
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
</script>
|
||||
{{ partial('partials/ip2region') }}
|
@ -72,8 +72,7 @@
|
||||
<button class="layui-btn layui-btn-sm">操作 <span class="layui-icon layui-icon-triangle-d"></span></button>
|
||||
<ul>
|
||||
<li><a href="{{ url({'for':'admin.student.edit'},{'plan_id':item.id}) }}">编辑学员</a></li>
|
||||
<li><a class="kg-learning" href="javascript:" url="{{ url({'for':'admin.student.learning'},{'plan_id':item.id}) }}">学习记录</a>
|
||||
</li>
|
||||
<li><a href="javascript:" class="kg-learning" data-url="{{ url({'for':'admin.student.learning'},{'plan_id':item.id}) }}">学习记录</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</td>
|
||||
@ -91,7 +90,7 @@
|
||||
var $ = layui.jquery;
|
||||
|
||||
$('.kg-learning').on('click', function () {
|
||||
var url = $(this).attr('url');
|
||||
var url = $(this).attr('data-url');
|
||||
layer.open({
|
||||
id: 'xm-course',
|
||||
type: 2,
|
||||
|
@ -24,20 +24,11 @@
|
||||
<label class="layui-form-label">加入方式</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="radio" name="source" value="free" title="免费课程">
|
||||
<input type="radio" name="source" value="paid" title="付费课程">
|
||||
<input type="radio" name="source" value="vip" title="会员免费">
|
||||
<input type="radio" name="source" value="charge" title="付费课程">
|
||||
<input type="radio" name="source" value="import" title="后台导入">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">是否锁定</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="radio" name="locked" value="1" title="是">
|
||||
<input type="radio" name="locked" value="0" title="否">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label"></label>
|
||||
<div class="layui-input-block">
|
||||
|
@ -40,13 +40,13 @@
|
||||
<td><span class="layui-badge layui-bg-gray">{{ item.course_count }}</span></td>
|
||||
<td>{{ date('Y-m-d H:i',item.create_time) }}</td>
|
||||
<td>{{ date('Y-m-d H:i',item.update_time) }}</td>
|
||||
<td><input type="checkbox" name="published" value="1" lay-skin="switch" lay-text="是|否" lay-filter="switch-published" topic-id="{{ item.id }}" {% if item.published == 1 %}checked{% endif %}></td>
|
||||
<td><input type="checkbox" name="published" value="1" lay-skin="switch" lay-text="是|否" lay-filter="published" data-url="{{ url({'for':'admin.topic.update','id':item.id}) }}" {% if item.published == 1 %}checked{% endif %}></td>
|
||||
<td align="center">
|
||||
<div class="layui-dropdown">
|
||||
<button class="layui-btn layui-btn-sm">操作 <span class="layui-icon layui-icon-triangle-d"></span></button>
|
||||
<ul>
|
||||
<li><a href="{{ url({'for':'admin.topic.edit','id':item.id}) }}">编辑</a></li>
|
||||
<li><a href="javascript:" url="{{ url({'for':'admin.topic.delete','id':item.id}) }}" class="kg-delete">删除</a></li>
|
||||
<li><a href="javascript:" class="kg-delete" data-url="{{ url({'for':'admin.topic.delete','id':item.id}) }}">删除</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</td>
|
||||
@ -55,41 +55,4 @@
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
{{ partial('partials/pager') }}
|
||||
|
||||
<script>
|
||||
|
||||
layui.use(['jquery', 'form'], function () {
|
||||
|
||||
var $ = layui.jquery;
|
||||
var form = layui.form;
|
||||
|
||||
form.on('switch(switch-published)', function (data) {
|
||||
var topicId = $(this).attr('topic-id');
|
||||
var checked = $(this).is(':checked');
|
||||
var published = checked ? 1 : 0;
|
||||
var tips = published === 1 ? '确定要发布话题?' : '确定要下架话题?';
|
||||
layer.confirm(tips, function () {
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
url: '/admin/topic/' + topicId + '/update',
|
||||
data: {published: published},
|
||||
success: function (res) {
|
||||
layer.msg(res.msg, {icon: 1});
|
||||
},
|
||||
error: function (xhr) {
|
||||
var json = JSON.parse(xhr.responseText);
|
||||
layer.msg(json.msg, {icon: 2});
|
||||
data.elem.checked = !checked;
|
||||
form.render();
|
||||
}
|
||||
});
|
||||
}, function () {
|
||||
data.elem.checked = !checked;
|
||||
form.render();
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
</script>
|
||||
{{ partial('partials/pager') }}
|
@ -3,9 +3,9 @@
|
||||
namespace App\Models;
|
||||
|
||||
use App\Caches\MaxCourseId as MaxCourseIdCache;
|
||||
use App\Services\CourseIndexSyncer;
|
||||
use Phalcon\Mvc\Model\Behavior\SoftDelete;
|
||||
use Phalcon\Text;
|
||||
use Yansongda\Supports\Collection;
|
||||
|
||||
class Course extends Model
|
||||
{
|
||||
@ -95,6 +95,13 @@ class Course extends Model
|
||||
*/
|
||||
public $category_id;
|
||||
|
||||
/**
|
||||
* 主教师编号
|
||||
*
|
||||
* @var int
|
||||
*/
|
||||
public $teacher_id;
|
||||
|
||||
/**
|
||||
* 市场价格
|
||||
*
|
||||
@ -319,43 +326,43 @@ class Course extends Model
|
||||
|
||||
public static function modelTypes()
|
||||
{
|
||||
return [
|
||||
return new Collection([
|
||||
self::MODEL_VOD => '点播',
|
||||
self::MODEL_LIVE => '直播',
|
||||
self::MODEL_READ => '图文',
|
||||
];
|
||||
]);
|
||||
}
|
||||
|
||||
public static function levelTypes()
|
||||
{
|
||||
return [
|
||||
return new Collection([
|
||||
self::LEVEL_ENTRY => '入门',
|
||||
self::LEVEL_JUNIOR => '初级',
|
||||
self::LEVEL_MEDIUM => '中级',
|
||||
self::LEVEL_SENIOR => '高级',
|
||||
];
|
||||
]);
|
||||
}
|
||||
|
||||
public static function studyExpiryOptions()
|
||||
{
|
||||
return [
|
||||
return new Collection([
|
||||
1 => '1个月',
|
||||
3 => '3个月',
|
||||
6 => '6个月',
|
||||
12 => '12个月',
|
||||
36 => '36个月',
|
||||
];
|
||||
]);
|
||||
}
|
||||
|
||||
public static function refundExpiryOptions()
|
||||
{
|
||||
return [
|
||||
return new Collection([
|
||||
7 => '7天',
|
||||
14 => '14天',
|
||||
30 => '30天',
|
||||
90 => '90天',
|
||||
180 => '180天',
|
||||
];
|
||||
]);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -3,6 +3,7 @@
|
||||
namespace App\Models;
|
||||
|
||||
use Phalcon\Mvc\Model\Behavior\SoftDelete;
|
||||
use Yansongda\Supports\Collection;
|
||||
|
||||
class Nav extends Model
|
||||
{
|
||||
@ -146,18 +147,18 @@ class Nav extends Model
|
||||
|
||||
public static function positionTypes()
|
||||
{
|
||||
return [
|
||||
return new Collection([
|
||||
self::POSITION_TOP => '顶部',
|
||||
self::POSITION_BOTTOM => '底部',
|
||||
];
|
||||
]);
|
||||
}
|
||||
|
||||
public static function targetTypes()
|
||||
{
|
||||
return [
|
||||
return new Collection([
|
||||
self::TARGET_BLANK => '新窗口',
|
||||
self::TARGET_SELF => '原窗口',
|
||||
];
|
||||
]);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -3,6 +3,7 @@
|
||||
namespace App\Models;
|
||||
|
||||
use Phalcon\Mvc\Model\Behavior\SoftDelete;
|
||||
use Yansongda\Supports\Collection;
|
||||
|
||||
class Order extends Model
|
||||
{
|
||||
@ -179,32 +180,32 @@ class Order extends Model
|
||||
|
||||
public static function itemTypes()
|
||||
{
|
||||
return [
|
||||
return new Collection([
|
||||
self::ITEM_COURSE => '课程',
|
||||
self::ITEM_PACKAGE => '套餐',
|
||||
self::ITEM_REWARD => '赞赏',
|
||||
self::ITEM_VIP => '会员',
|
||||
self::ITEM_TEST => '测试',
|
||||
];
|
||||
]);
|
||||
}
|
||||
|
||||
public static function sourceTypes()
|
||||
{
|
||||
return [
|
||||
return new Collection([
|
||||
self::SOURCE_DESKTOP => 'desktop',
|
||||
self::SOURCE_ANDROID => 'android',
|
||||
self::SOURCE_IOS => 'ios',
|
||||
];
|
||||
]);
|
||||
}
|
||||
|
||||
public static function statusTypes()
|
||||
{
|
||||
return [
|
||||
return new Collection([
|
||||
self::STATUS_PENDING => '待支付',
|
||||
self::STATUS_FINISHED => '已完成',
|
||||
self::STATUS_CLOSED => '已关闭',
|
||||
self::STATUS_REFUNDED => '已退款',
|
||||
];
|
||||
]);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -3,6 +3,7 @@
|
||||
namespace App\Models;
|
||||
|
||||
use Phalcon\Mvc\Model\Behavior\SoftDelete;
|
||||
use Yansongda\Supports\Collection;
|
||||
|
||||
class Refund extends Model
|
||||
{
|
||||
@ -144,14 +145,14 @@ class Refund extends Model
|
||||
|
||||
public static function statusTypes()
|
||||
{
|
||||
return [
|
||||
return new Collection([
|
||||
self::STATUS_PENDING => '待处理',
|
||||
self::STATUS_CANCELED => '已取消',
|
||||
self::STATUS_APPROVED => '已审核',
|
||||
self::STATUS_REFUSED => '已拒绝',
|
||||
self::STATUS_FINISHED => '已完成',
|
||||
self::STATUS_FAILED => '已失败',
|
||||
];
|
||||
]);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -3,6 +3,7 @@
|
||||
namespace App\Models;
|
||||
|
||||
use Phalcon\Mvc\Model\Behavior\SoftDelete;
|
||||
use Yansongda\Supports\Collection;
|
||||
|
||||
class Role extends Model
|
||||
{
|
||||
@ -128,20 +129,20 @@ class Role extends Model
|
||||
|
||||
public static function types()
|
||||
{
|
||||
return [
|
||||
return new Collection([
|
||||
self::TYPE_SYSTEM => '内置',
|
||||
self::TYPE_CUSTOM => '自定',
|
||||
];
|
||||
]);
|
||||
}
|
||||
|
||||
public static function sysRoleTypes()
|
||||
{
|
||||
return [
|
||||
return new Collection([
|
||||
self::ROLE_ROOT => '管理人员',
|
||||
self::ROLE_OPERATOR => '运营人员',
|
||||
self::ROLE_EDITOR => '编辑人员',
|
||||
self::ROLE_FINANCE => '财务人员',
|
||||
];
|
||||
]);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -4,6 +4,7 @@ namespace App\Models;
|
||||
|
||||
use Phalcon\Mvc\Model\Behavior\SoftDelete;
|
||||
use Phalcon\Text;
|
||||
use Yansongda\Supports\Collection;
|
||||
|
||||
class Slide extends Model
|
||||
{
|
||||
@ -145,11 +146,11 @@ class Slide extends Model
|
||||
|
||||
public static function targetTypes()
|
||||
{
|
||||
return [
|
||||
return new Collection([
|
||||
self::TARGET_COURSE => '课程',
|
||||
self::TARGET_PAGE => '单页',
|
||||
self::TARGET_LINK => '链接',
|
||||
];
|
||||
]);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -3,6 +3,7 @@
|
||||
namespace App\Models;
|
||||
|
||||
use Phalcon\Mvc\Model\Behavior\SoftDelete;
|
||||
use Yansongda\Supports\Collection;
|
||||
|
||||
class Trade extends Model
|
||||
{
|
||||
@ -141,20 +142,20 @@ class Trade extends Model
|
||||
|
||||
public static function channelTypes()
|
||||
{
|
||||
return [
|
||||
return new Collection([
|
||||
self::CHANNEL_ALIPAY => '支付宝',
|
||||
self::CHANNEL_WXPAY => '微信',
|
||||
];
|
||||
]);
|
||||
}
|
||||
|
||||
public static function statusTypes()
|
||||
{
|
||||
return [
|
||||
return new Collection([
|
||||
self::STATUS_PENDING => '待支付',
|
||||
self::STATUS_FINISHED => '已完成',
|
||||
self::STATUS_CLOSED => '已关闭',
|
||||
self::STATUS_REFUNDED => '已退款',
|
||||
];
|
||||
]);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -5,6 +5,7 @@ namespace App\Models;
|
||||
use App\Caches\MaxUserId as MaxUserIdCache;
|
||||
use Phalcon\Mvc\Model\Behavior\SoftDelete;
|
||||
use Phalcon\Text;
|
||||
use Yansongda\Supports\Collection;
|
||||
|
||||
class User extends Model
|
||||
{
|
||||
@ -208,19 +209,19 @@ class User extends Model
|
||||
|
||||
public static function genderTypes()
|
||||
{
|
||||
return [
|
||||
return new Collection([
|
||||
self::GENDER_MALE => '男',
|
||||
self::GENDER_FEMALE => '女',
|
||||
self::GENDER_NONE => '保密',
|
||||
];
|
||||
]);
|
||||
}
|
||||
|
||||
public static function eduRoleTypes()
|
||||
{
|
||||
return [
|
||||
return new Collection([
|
||||
self::EDU_ROLE_STUDENT => '学员',
|
||||
self::EDU_ROLE_TEACHER => '讲师',
|
||||
];
|
||||
]);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -2,7 +2,9 @@
|
||||
|
||||
namespace App\Searchers;
|
||||
|
||||
use App\Models\Category as CategoryModel;
|
||||
use App\Models\Course as CourseModel;
|
||||
use App\Models\User as UserModel;
|
||||
use Phalcon\Mvc\User\Component;
|
||||
|
||||
class CourseDocument extends Component
|
||||
@ -37,12 +39,34 @@ class CourseDocument extends Component
|
||||
$course->attrs = kg_json_encode($course->attrs);
|
||||
}
|
||||
|
||||
$teacher = '';
|
||||
|
||||
if ($course->teacher_id > 0) {
|
||||
$record = UserModel::findFirst($course->teacher_id);
|
||||
$teacher = kg_json_encode([
|
||||
'id' => $record->id,
|
||||
'name' => $record->name,
|
||||
]);
|
||||
}
|
||||
|
||||
$category = '';
|
||||
|
||||
if ($course->category_id > 0) {
|
||||
$record = CategoryModel::findFirst($course->category_id);
|
||||
$category = kg_json_encode([
|
||||
'id' => $record->id,
|
||||
'name' => $record->name,
|
||||
]);
|
||||
}
|
||||
|
||||
return [
|
||||
'id' => $course->id,
|
||||
'title' => $course->title,
|
||||
'cover' => $course->cover,
|
||||
'summary' => $course->summary,
|
||||
'keywords' => $course->keywords,
|
||||
'category_id' => $course->category_id,
|
||||
'teacher_id' => $course->teacher_id,
|
||||
'market_price' => $course->market_price,
|
||||
'vip_price' => $course->vip_price,
|
||||
'study_expiry' => $course->study_expiry,
|
||||
@ -52,6 +76,8 @@ class CourseDocument extends Component
|
||||
'model' => $course->model,
|
||||
'level' => $course->level,
|
||||
'attrs' => $course->attrs,
|
||||
'category' => $category,
|
||||
'teacher' => $teacher,
|
||||
'user_count' => $course->user_count,
|
||||
'lesson_count' => $course->lesson_count,
|
||||
'comment_count' => $course->comment_count,
|
||||
|
94
app/Services/Search/CourseDocument.php
Normal file
94
app/Services/Search/CourseDocument.php
Normal file
@ -0,0 +1,94 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\Search;
|
||||
|
||||
use App\Models\Category as CategoryModel;
|
||||
use App\Models\Course as CourseModel;
|
||||
use App\Models\User as UserModel;
|
||||
use Phalcon\Mvc\User\Component;
|
||||
|
||||
class CourseDocument extends Component
|
||||
{
|
||||
|
||||
/**
|
||||
* 设置文档
|
||||
*
|
||||
* @param CourseModel $course
|
||||
* @return \XSDocument
|
||||
*/
|
||||
public function setDocument(CourseModel $course)
|
||||
{
|
||||
$doc = new \XSDocument();
|
||||
|
||||
$data = $this->formatDocument($course);
|
||||
|
||||
$doc->setFields($data);
|
||||
|
||||
return $doc;
|
||||
}
|
||||
|
||||
/**
|
||||
* 格式化文档
|
||||
*
|
||||
* @param CourseModel $course
|
||||
* @return array
|
||||
*/
|
||||
public function formatDocument(CourseModel $course)
|
||||
{
|
||||
if (is_array($course->attrs) || is_object($course->attrs)) {
|
||||
$course->attrs = kg_json_encode($course->attrs);
|
||||
}
|
||||
|
||||
$teacher = '';
|
||||
|
||||
if ($course->teacher_id > 0) {
|
||||
|
||||
$record = UserModel::findFirst($course->teacher_id);
|
||||
|
||||
$teacher = kg_json_encode([
|
||||
'id' => $record->id,
|
||||
'name' => $record->name,
|
||||
]);
|
||||
}
|
||||
|
||||
$category = '';
|
||||
|
||||
if ($course->category_id > 0) {
|
||||
|
||||
$record = CategoryModel::findFirst($course->category_id);
|
||||
|
||||
$category = kg_json_encode([
|
||||
'id' => $record->id,
|
||||
'name' => $record->name,
|
||||
]);
|
||||
}
|
||||
|
||||
return [
|
||||
'id' => $course->id,
|
||||
'title' => $course->title,
|
||||
'cover' => $course->cover,
|
||||
'summary' => $course->summary,
|
||||
'keywords' => $course->keywords,
|
||||
'category_id' => $course->category_id,
|
||||
'teacher_id' => $course->teacher_id,
|
||||
'market_price' => $course->market_price,
|
||||
'vip_price' => $course->vip_price,
|
||||
'study_expiry' => $course->study_expiry,
|
||||
'refund_expiry' => $course->refund_expiry,
|
||||
'rating' => $course->rating,
|
||||
'score' => $course->score,
|
||||
'model' => $course->model,
|
||||
'level' => $course->level,
|
||||
'attrs' => $course->attrs,
|
||||
'category' => $category,
|
||||
'teacher' => $teacher,
|
||||
'user_count' => $course->user_count,
|
||||
'lesson_count' => $course->lesson_count,
|
||||
'comment_count' => $course->comment_count,
|
||||
'consult_count' => $course->consult_count,
|
||||
'review_count' => $course->review_count,
|
||||
'favorite_count' => $course->favorite_count,
|
||||
];
|
||||
}
|
||||
|
||||
}
|
88
app/Services/Search/CourseHandler.php
Normal file
88
app/Services/Search/CourseHandler.php
Normal file
@ -0,0 +1,88 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\Search;
|
||||
|
||||
use Phalcon\Mvc\User\Component;
|
||||
|
||||
class CourseHandler extends Component
|
||||
{
|
||||
|
||||
/**
|
||||
* @var \XS
|
||||
*/
|
||||
protected $xs;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$fileName = config_path() . '/xs.course.ini';
|
||||
|
||||
$this->xs = new \XS($fileName);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取XS
|
||||
*
|
||||
* @return \XS
|
||||
*/
|
||||
public function getXS()
|
||||
{
|
||||
return $this->xs;
|
||||
}
|
||||
|
||||
/**
|
||||
* 搜索课程
|
||||
*
|
||||
* @param string $query
|
||||
* @param int $limit
|
||||
* @param int $offset
|
||||
* @return array
|
||||
* @throws \XSException
|
||||
*/
|
||||
public function search($query, $limit = 15, $offset = 0)
|
||||
{
|
||||
$search = $this->xs->getSearch();
|
||||
|
||||
$docs = $search->setQuery($query)->setLimit($limit, $offset)->search();
|
||||
|
||||
$total = $search->getLastCount();
|
||||
|
||||
$fields = array_keys($this->xs->getAllFields());
|
||||
|
||||
$items = [];
|
||||
|
||||
foreach ($docs as $doc) {
|
||||
$item = [];
|
||||
foreach ($fields as $field) {
|
||||
if (in_array($field, ['title', 'summary'])) {
|
||||
$item[$field] = $search->highlight($doc->{$field});
|
||||
} else {
|
||||
$item[$field] = $doc->{$field};
|
||||
}
|
||||
}
|
||||
$items[] = $item;
|
||||
}
|
||||
|
||||
return [
|
||||
'total' => $total,
|
||||
'items' => $items,
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取相关搜索
|
||||
*
|
||||
* @param string $query
|
||||
* @param int $limit
|
||||
* @return array
|
||||
* @throws \XSException
|
||||
*/
|
||||
public function getRelatedQuery($query, $limit = 10)
|
||||
{
|
||||
$search = $this->xs->getSearch();
|
||||
|
||||
$search->setQuery($query);
|
||||
|
||||
return $search->getRelatedQuery($query, $limit);
|
||||
}
|
||||
|
||||
}
|
@ -20,6 +20,16 @@ type = body
|
||||
type = string
|
||||
index = mixed
|
||||
|
||||
[category_id]
|
||||
type = string
|
||||
index = self
|
||||
tokenizer = full
|
||||
|
||||
[teacher_id]
|
||||
type = string
|
||||
index = self
|
||||
tokenizer = full
|
||||
|
||||
[market_price]
|
||||
type = string
|
||||
|
||||
@ -51,6 +61,12 @@ tokenizer = full
|
||||
[attrs]
|
||||
type = string
|
||||
|
||||
[category]
|
||||
type = string
|
||||
|
||||
[teacher]
|
||||
type = string
|
||||
|
||||
[user_count]
|
||||
type = string
|
||||
|
||||
|
@ -48,8 +48,51 @@ layui.use(['jquery', 'form', 'element', 'layer', 'dropdown'], function () {
|
||||
return false;
|
||||
});
|
||||
|
||||
form.on('switch(published)', function (data) {
|
||||
var checked = $(this).is(':checked');
|
||||
var published = checked ? 1 : 0;
|
||||
var url = $(this).attr('data-url');
|
||||
var tips = published === 1 ? '确定要上线?' : '确定要下线?';
|
||||
layer.confirm(tips, function () {
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
url: url,
|
||||
data: {published: published},
|
||||
success: function (res) {
|
||||
layer.msg(res.msg, {icon: 1});
|
||||
},
|
||||
error: function (xhr) {
|
||||
var json = JSON.parse(xhr.responseText);
|
||||
layer.msg(json.msg, {icon: 2});
|
||||
data.elem.checked = !checked;
|
||||
form.render();
|
||||
}
|
||||
});
|
||||
}, function () {
|
||||
data.elem.checked = !checked;
|
||||
form.render();
|
||||
});
|
||||
});
|
||||
|
||||
$('.kg-priority-input').on('change', function () {
|
||||
var priority = $(this).val();
|
||||
var url = $(this).attr('data-url');
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
url: url,
|
||||
data: {priority: priority},
|
||||
success: function (res) {
|
||||
layer.msg(res.msg, {icon: 1});
|
||||
},
|
||||
error: function (xhr) {
|
||||
var json = JSON.parse(xhr.responseText);
|
||||
layer.msg(json.msg, {icon: 2});
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
$('.kg-delete,.kg-restore').on('click', function () {
|
||||
var url = $(this).attr('url');
|
||||
var url = $(this).attr('data-url');
|
||||
var tips = $(this).hasClass('kg-delete') ? '确定要删除吗?' : '确定要还原吗?';
|
||||
layer.confirm(tips, function () {
|
||||
$.ajax({
|
||||
|
@ -64,7 +64,7 @@ $scheduler->php($script, $bin, ['--task' => 'count_course', '--action' => 'main'
|
||||
$scheduler->php($script, $bin, ['--task' => 'live_notice_provider', '--action' => 'main'])
|
||||
->daily(3, 23);
|
||||
|
||||
$scheduler->php($script, $bin, ['--task' => 'clean_auth_token', '--action' => 'main'])
|
||||
$scheduler->php($script, $bin, ['--task' => 'clean_token', '--action' => 'main'])
|
||||
->daily(3, 31);
|
||||
|
||||
$scheduler->run();
|
Loading…
x
Reference in New Issue
Block a user