Commit 9a5afa21 authored by wangtao's avatar wangtao

增加课程列表,上传接口

parent 69a75c6f
......@@ -48,11 +48,10 @@ class Article extends AdminBase
if (isset($post['cate_id']) && !empty($post['cate_id'])) {
$map[] = ['cate_id', '=', $post['cate_id']];
}
$list = $this->article->where($map)->append(['cate_name', 'adminname'])->paginate($post['limit']);
$list = $this->article->where($map)->append(['cate_name', 'adminname', 'thumbpath'])->paginate($post['limit']);
return $this->returnMsg($list);
}
$category = ArticleCategoryModel::field('*,pid as parentid')->order('sort desc')->select()->toArray();
$category = ArticleCategoryModel::field('*,pid as parentid')->where('is_del', 0)->order('sort desc')->select()->toArray();
$this->assign('category', json_encode($category));
$this->assign('limit', $limit);
return $this->fetch('', '', false);
......@@ -79,7 +78,7 @@ class Article extends AdminBase
}
try {
$post['admin_id'] = session(VT_MANAGER)['userid'];
$post['admin_id'] = $this->manUser['userid'];
$post['createtime'] = time();
$post['updatetime'] = time();
if ($post['id'] > 0) {
......@@ -94,11 +93,9 @@ class Article extends AdminBase
return $this->returnMsg($e->getMessage(), 0);
}
return $this->returnMsg($msg, 1);
}
$data = $this->article->find($post['id']);
$catemodel = new ArticleCategoryModel();
$categorydata = $catemodel->catetree(isset($data['cate_id']) ? $data['cate_id'] : 0);
......
......@@ -15,6 +15,7 @@ use app\model\ArticleCategoryModel;
use think\App;
use think\facade\Db;
use think\facade\Validate;
use think\facade\Env;
/**
* 后台主控制器
......@@ -34,6 +35,7 @@ class ArticleCategory extends AdminBase
public function index(string $do = '')
{
if ($do == 'json') {
$list = $this->articlecategory->list();
return $this->returnMsg('', 0, $list);
......@@ -55,8 +57,6 @@ class ArticleCategory extends AdminBase
$post = input();
if ($this->request->isPost()) {
$validate = Validate::rule([
'title' => 'require'
])->message([
......
......@@ -40,9 +40,9 @@ class Index extends AdminBase
*/
public function main()
{
if($this->request->isPost()){
if($this->request->isPost()){
return $this->returnMsg('登录成功!',1);
}
......@@ -51,7 +51,7 @@ class Index extends AdminBase
$data['name'] = 'headimgwt';
$this->assign('data',$data);
$data2['type'] = 'imagewt';
$data2['type'] = 'imageswt';
$data2['name'] = 'headimgwt2';
$data2['value'] = '';
$this->assign('data2',$data2);
......
<?php
/**
* ===========================================================================
* Veitool 快捷开发框架系统
* Author: Niaho 26843818@qq.com
* Copyright (c)2019-2025 www.veitool.com All rights reserved.
* Licensed: 这不是一个自由软件,不允许对程序代码以任何形式任何目的的再发行
* ---------------------------------------------------------------------------
*/
namespace app\admin\controller\course;
use app\admin\controller\AdminBase;
use app\model\CourseCategory as CourseCate;
use think\App;
use think\facade\Db;
use think\facade\Validate;
use think\facade\Env;
/**
* 后台主控制器
*/
class CourseCategory extends AdminBase
{
protected $coursecategory;
public function __construct(App $app)
{
parent::__construct($app);
$this->coursecategory = new CourseCate();
}
//分类列表
public function index(string $do = '')
{
if ($do == 'json') {
$list = $this->coursecategory->where('is_del', 0)->append(['thumbpath'])->select()->toArray();
return $this->returnMsg($list);
}
return $this->fetch('', '', false);
}
//快速编辑
public function editup()
{
$post = input();
$this->coursecategory->update([$post['af'] => $post['av']], [['id', '=', $post['id']]]);
return $this->returnMsg('修改成功');
}
//编辑新增分类
public function edit()
{
$post = input();
if ($this->request->isPost()) {
$validate = Validate::rule([
'title' => 'require'
])->message([
'title.require' => '分类名称不能为空',
]);
if(!$validate->check($post)) {
return $this->returnMsg($validate->getError(), 0);
}
try {
if ($post['id'] > 0) {
$msg = '更新成功';
$this->coursecategory->update($post, ['id' => $post['id']]);
} else {
unset($post['id']);
$post['createtime'] = time();
$msg = '添加成功';
$this->coursecategory->save($post);
}
} catch (\Exception $e) {
return $this->returnMsg($e->getMessage(), 0);
}
return $this->returnMsg($msg, 1);
}
$data = Db::name('course_category')->where('id',$post['id'])->find();
$categorydata = $this->coursecategory->catetree(isset($data['pid']) ? $data['pid'] : 0);
$this->assign('categorydata', $categorydata);
$this->assign('data', $data);
return $this->fetch('', '', false);
}
public function del()
{
$post = input();
$ids = is_array($post['id']) ? implode(',', $post['id']) : $post['id'];
if ($this->coursecategory->where("id IN(" . $ids . ")")->update(['is_del' => 1])) {
return $this->returnMsg("删除成功", 1);
} else {
return $this->returnMsg("删除失败");
}
}
}
\ No newline at end of file
<?php
/**
* ===========================================================================
* Veitool 快捷开发框架系统
* Author: Niaho 26843818@qq.com
* Copyright (c)2019-2025 www.veitool.com All rights reserved.
* Licensed: 这不是一个自由软件,不允许对程序代码以任何形式任何目的的再发行
* ---------------------------------------------------------------------------
*/
namespace app\admin\controller\course;
use app\admin\controller\AdminBase;
use app\model\ShCourse AS ShCourseModel;
use think\App;
use think\facade\Db;
use app\model\CourseCategory as CourseCategoryModel;
/**
* 后台主控制器
*/
class course extends AdminBase
{
protected $course;
public function __construct(App $app)
{
parent::__construct($app);
$this->course = new ShCourseModel();
}
// 课程列表
public function index(string $do = '')
{
$limit = 10;
if ($do == 'json') {
$post = input();
$post['limit'] = isset($post['limit']) ? $post['limit'] : $limit;
$map[] = ['is_del', '=', 0];
$map[] = ['status', '>', 0];
if (isset($post['kw']) && !empty($post['kw'])) {
$map[] = ['title', 'like', '%' . $post['kw'] . '%'];
}
if (isset($post['cate_id']) && !empty($post['cate_id'])) {
$map[] = ['cate_id', '=', $post['cate_id']];
}
$list = $this->course->where($map)->append(['thumbpath','cate_name','teacher_name','status_text','tag_title','user_info'])->order('createtime desc')->paginate($post['limit']);
return $this->returnMsg($list);
}
$category = CourseCategoryModel::field('*,pid as parentid')->where('is_del', 0)->order('sort desc')->select()->toArray();
$this->assign('category', json_encode($category));
$this->assign('limit', $limit);
return $this->fetch('', '', false);
}
//快速编辑
public function editup()
{
$post = input();
$this->course->update([$post['af'] => $post['av']], [['id', '=', $post['id']]]);
return $this->returnMsg('修改成功');
}
public function del()
{
$post = input();
$ids = is_array($post['id']) ? implode(',', $post['id']) : $post['id'];
if ($this->course->where("id IN(" . $ids . ")")->update(['is_del' => 1])) {
return $this->returnMsg("删除成功", 1);
} else {
return $this->returnMsg("删除失败");
}
}
}
\ No newline at end of file
......@@ -10,6 +10,7 @@
namespace app\admin\controller\system;
use app\admin\controller\AdminBase;
use app\BaseController;
use app\model\system\SystemUploadFile as UploadFile;
use app\model\system\SystemUploadGroup as UploadGroup;
use veitool\storage\Driver as StorageDriver;
......@@ -17,14 +18,14 @@ use veitool\storage\Driver as StorageDriver;
/**
* 上传管理
*/
class Upload extends AdminBase
class Upload extends BaseController
{
/**
* 配置信息
* @var array
*/
private $config;
protected $manUser;
/**
* 初始化配置信息
* @var array
......@@ -63,6 +64,7 @@ class Upload extends AdminBase
*/
private function init()
{
$this->manUser = session(VT_MANAGER);
$this->CF = array_merge($this->CF, vconfig());
$this->config = array(
'default'=>$this->CF['upload_engine'],
......@@ -108,6 +110,7 @@ class Upload extends AdminBase
*/
public function upfile(string $file = 'file', int $groupid = 0, string $action = '', string $thum = '')
{
$action = $action ? $action : input('action');
if(!$action) return $this->returnMsg('参数错误');
$this->init();
$engine = $this->config['default'];
......@@ -137,7 +140,7 @@ class Upload extends AdminBase
$data['groupid'] = intval($groupid)>=0 ? intval($groupid) : 0;
$data['fileext'] = $fileInfo['ext'];
$data['addtime'] = time();
$data['username'] = $this->manUser['username'];
$data['username'] = isset($this->manUser['username']) ? $this->manUser['username'] : 'webapi';
$data['fileid'] = UploadFile::insertGetId($data);
//压缩容量
if($data['filesize']>300 && $engine == 'local'){
......@@ -164,6 +167,7 @@ class Upload extends AdminBase
*/
public function ueditor(string $file = 'file', int $groupid = 0, string $action = '')
{
$action = $action ? $action : input('action');
if(!$action) return $this->returnMsg('参数错误');
if($action == 'config'){ //百度编辑器获取配置
$this->CF = array_merge($this->CF, vconfig());
......@@ -293,7 +297,7 @@ class Upload extends AdminBase
$data['groupid'] = intval($groupid)>=0 ? intval($groupid) : 0;
$data['fileext'] = $fileInfo['ext'];
$data['addtime'] = time();
$data['username'] = $this->manUser['username'];
$data['username'] =isset($this->manUser['username']) ? $this->manUser['username'] : 'webapi';
$data['fileid'] = UploadFile::insertGetId($data);
//百度编辑器返回数据
$UE['original'] = '';
......
<?php
namespace app\admin\validate;
use think\Validate;
use app\model;
use app\api\validate\BaseValidate;
class ArticleValidate extends BaseValidate
{
protected $rule = [
'title' => 'require',
'cate_id' => 'require',
'thumb'=>'require',
protected $rule = [
'title' => 'require',
'cate_id' => 'require|checkarticle',
'thumb' => 'require',
];
protected $message = [
protected $message = [
'title.require' => '文章标题不能为空',
'cate_id.require' => '请选择分类',
'thumb.require' => '请上传图片',
'cate_id.require' => '请选择分类',
'cate_id.checkarticle' => '此分类是单页只能添加一篇文章',
'thumb.require' => '请上传图片',
];
function checkarticle($value,$rule,$data)
{
$type = (new model\ArticleCategoryModel())::where('id', $value)->value('type');
if ($type == 'page' && empty($data['id'])) {
$count = (new model\ArticleModel())->where('cate_id',$value)->where('is_del',0)->count();
if ($count > 0) {
return false;
}
}
return true;
}
}
\ No newline at end of file
......@@ -61,7 +61,8 @@
var str = [{
"name": "thumb",
"title": "上传图片",
"value": "{$data.thumb|default=''}",
"value": "{$data.thumb|default=''|get_upload_file}",
"pathid": "{$data.thumb|default=''}",
"type": "imagewt"
}];
layui.buildItems.build({
......
......@@ -84,10 +84,11 @@
organObj = obj.data;
$('#article-groupid').val(obj.data.id);
table.reloadData('article',{where:{cate_id:obj.data.id},page:{curr:1}});
}
});
var item = $('#articlecategoryTree .layui-tree-entry:first');
load ? item.find('.layui-tree-main>.layui-tree-txt').trigger('click') : item.addClass('organ-tree-click');
// var item = $('#articlecategoryTree .layui-tree-entry:first');
// load ? item.find('.layui-tree-main>.layui-tree-txt').trigger('click') : item.addClass('organ-tree-click');
}
/*初始渲染*/
......@@ -98,11 +99,12 @@
elem: '#article',
page: true,
limit:{$limit},
height: 'full-341',
url: app_root+"index?&do=json",
cols: [[
{type:'checkbox',fixed:'left'},
{field:'id',width:50,unresize:true,align:'center',title:'ID',sort:!0},
{field:'thumb',width:80,height:80,align:'center',title:'缩略图',templet:'<div class="files_itemw"><img src="{{d.thumb}}" lay-event="article-event-image" /></div>'},
{field:'thumb',width:80,height:80,align:'center',title:'缩略图',templet:'<div class="files_itemw"><img src="{{d.thumbpath}}" lay-event="article-event-image" /></div>'},
{field:'title',align:'center',title:'标题',edit:'text'},
{field:'cate_name',width:120,align:'center',title:'类别'},
{field:'createtime',width:120,align:'center',title:'发布时间'},
......@@ -155,12 +157,10 @@
});/**/
$('#article-add').on('click',function(){articleOpen();});/**/
/*弹出窗*/
function articleOpen(id=''){
function articleOpen(id='',type=''){
var title = "添加文章";
if(id > 0){
var title = '编辑文章';
}else{
var title = '添加文章';
title = '编辑文章';
}
layer.open({
type: 2,
......@@ -168,7 +168,7 @@
title: title,
btn: ['确定', '关闭'],
fixed: false, //不固定
content: '/admin/article/edit?id='+id,
content: '/admin/article/edit?id='+id+'&type='+type,
yes: function(index, layero){
var data = window["layui-layer-iframe" + index].callbackdata();
$.ajax({
......
......@@ -55,7 +55,8 @@
var str = [{
"name": "thumb",
"title": "上传图片",
"value": "{$data.thumb|default=''}",
"value": "{$data.thumb|default=''|get_upload_file}",
"pathid": "{$data.thumb|default=''}",
"type": "imagewt"
}];
layui.buildItems.build({
......
......@@ -9,7 +9,7 @@
<div class="layui-card">
<div class="layui-card-header">
<form class="layui-form render">
<input type="hidden" name="groupid" id="articlecategory-groupid" value=""/>
<div class="layui-form-item">
<div class="layui-inline">
<div class="layui-btn-group">
......@@ -45,7 +45,7 @@
cols: [[
{field:'id',width:50,unresize:true,align:'center',title:'ID'},
{field:'thumb',width:80,height:80,align:'center',title:'缩略图',templet:'<div class="files_itemw"><img src="{{d.thumb}}" lay-event="article-event-image" /></div>'},
{field:'thumb',width:80,height:80,align:'center',title:'缩略图',templet:'<div class="files_itemw"><img src="{{d.thumbpath}}" lay-event="article-event-image" /></div>'},
{field:'title',align:'left',title:'分类',},
{field:'typetxt',width:100,align:'center',title:'类型'},
{field:'sort',width:100,align:'center',title:'排序',edit:'text'},
......
This diff is collapsed.
{extend name="base/header" /}
{block name="body"}
<div style="margin: 0px 10px">
<form class="layui-form " style="margin-top: 20px;" id="fjfrom">
<div class="layui-form-item">
<label class="layui-form-label"> 上级分类 </label>
<div class="layui-input-block">
<select name="pid">
<option value="">请选择分类</option>
{:$categorydata}
</select>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">分类名称</label>
<div class="layui-input-block">
<input type="text" name="title" placeholder="请输入分类名称" autocomplete="off" class="layui-input" value="{$data.title|default=''}">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">分类图片</label>
<div class="layui-input-block" id="thumbup">
</div>
</div>
<input type="hidden" name="id" value="{$data.id|default=0}">
</form>
</div>
{/block}
{block name="script"}
<script type="text/javascript">
layui.use(['buildItems', 'form', 'laydate', 'util'], function () {
var form = layui.form;
/*解析顶部分组选项*/
var str = [{
"name": "thumb",
"title": "上传图片",
"value": "{$data.thumb|default=''|get_upload_file}",
"pathid": "{$data.thumb|default=''}",
"type": "imagewt"
}];
layui.buildItems.build({
fjbid:'fjfrom',
bid: 'thumbup',
url: '',
map: layui.cache.maps + 'system.upload/',
gid: 1,
data: str
});
layui.buildItems.init();
form.render();
});
var callbackdata = function () {
var data = $(".layui-form").serialize();
return data;
};
</script>
{/block}
\ No newline at end of file
<div class="layui-fluid">
<style>
.files_itemw1{width:30px;height:30px;line-height:30px;cursor:pointer;padding:1px;background:#fff;display:-webkit-box;-moz-box-align:center;-webkit-box-align:center;-moz-box-pack:center;-webkit-box-pack:center;}
.files_itemw1 img{max-width:28px;max-height:28px;border:0}
</style>
<div class="layui-card">
<div class="layui-card-header">
<form class="layui-form render">
<div class="layui-form-item">
<div class="layui-inline">
<div class="layui-btn-group">
<a class="layui-btn" id="coursecategory-sz" data="1"><i class="layui-icon">&#xe624;</i>展开</a>
<a class="layui-btn" id="coursecategory-add" ><i class="layui-icon layui-icon-add-circle"></i> 添加</a>
</div>
</div>
</div>
</form>
</div>
<div class="layui-card-body">
<div class="layui-card-body">
<table lay-filter="coursecategory" id="coursecategory"></table>
</div>
</div>
</div>
</div>
<!--JS部分-->
<script>
layui.use(['trTable','vinfo', 'buildItems'], function(){
var map_root = layui.cache.maps;
var app_root = map_root + 'course.course_category/';
var layer = layui.layer,table=layui.table,form=layui.form,admin=layui.admin,treeTable = layui.trTable;
/*渲染数据*/
var coursecateTb = treeTable.render({
elem: '#coursecategory',
checkdd: false,
url: app_root+"index?&do=json",
tree: {
iconIndex: 1,
isPidData: true,
idName: 'id',
pidName: 'pid',
arrowType: 'arrow2',
getIcon: 'v-tree-icon-style2'
},
cols: [[
{field:'id',width:50,align:'center',title:'ID'},
{field:'title',align:'left',title:'分类',edit:'text'},
{field:'thumb',width:50,align:'center',title:'缩略图',templet:'<div><div class="files_itemw1"><img src="{{d.thumbpath}}" lay-event="article-event-image" /></div></div>'},
{field:'sort',width:50,align:'center',title:'排序',edit:'text'},
{fixed:'right',width:130,align:'center',toolbar:'<div><a class="layui-btn layui-btn-xs" lay-event="edit">编辑</a><a class="layui-btn layui-btn-xs layui-btn-danger" lay-event="del">删除</a></div>',title:'操作'}
]],
done: function(){ admin.vShow($('[lay-table-id="coursecategory"]')); }
});
/*展开或折叠*/
$('#coursecategory-sz').click(function(){
var ob = $(this),i,t;
if(ob.attr('data')==1){
coursecateTb.expandAll();
i=0;t='<i class="layui-icon">&#xe67e;</i>折叠';
}else{
coursecateTb.foldAll();
i=1;t='<i class="layui-icon">&#xe624;</i>展开';
}
ob.attr('data',i).html(t);
});/**/
/*快编监听*/
treeTable.on('edit(coursecategory)',function(obj){
admin.req(app_root+"editup",{id:obj.data.id,av:obj.value,af:obj.field},function(res){
layer.msg(res.msg,{shade:[0.4,'#000'],time:500});
},'post',{headersToken:true});
});/**/
/*工具条监听*/
treeTable.on('tool(coursecategory)', function(obj){
var data = obj.data;
var id = data.id;
if(obj.event === 'edit'){
coursecategoryOpen(data.id);
}else if(obj.event === 'del'){
del(id);
}else if(obj.event === 'article-event-image'){
var src = $(this).attr('src'), alt = $(this).attr('alt');
layer.photos({photos:{data:[{alt:alt,src:src}],start:'0'},anim:5,shade:[0.4,'#000']});
}
});/**/
/*删除*/
function del(ids){
layer.confirm('确定要删除所选吗?', function(){
admin.req(app_root+"del",{id:ids},function(res){
layer.msg(res.msg,{shade:[0.4,'#000'],time:1500},function(){
if(res.code==1) coursecateTb.refresh();
});
},'post',{headersToken:true});
});
}/**/
$('#coursecategory-add').on('click',function(){coursecategoryOpen();});/**/
/*弹出窗*/
function coursecategoryOpen(id=''){
if(id > 0){
var title = '编辑分类';
}else{
var title = '添加分类';
}
layer.open({
type: 2,
area: ['900px', '900px'],
title: title,
btn: ['确定', '关闭'],
fixed: false, //不固定
content: app_root+'edit?id='+id,
yes: function(index, layero){
var data = window["layui-layer-iframe" + index].callbackdata();
$.ajax({
method: "post",
url: app_root+'/edit',
data: data,
dataType: "json",
success: function (res){
if(res.code===1) {
layer.msg(res.msg,{icon:1,shade:[0.4,'#000'],time:1500},function (){
layer.close(index);
coursecateTb.refresh();
});
}else{
layer.msg(res.msg,{icon:2,shade:[0.4,'#000'],time:1500},function (){
});
}
// layer.closeAll();
}
});
},
});
}/**/
});
</script>
\ No newline at end of file
<!DOCTYPE html>
<html>
<head>
<title>11{:vconfig('sys_title','后台管理')} - {:vconfig('site_title','Veitool快捷开发框架系统')}</title>
<title>{:vconfig('sys_title','后台管理')} - {:vconfig('site_title','重庆市凡骄网络科技有限公司')}</title>
<meta charset="utf-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
......@@ -42,7 +42,7 @@
<!-- 主体部分 -->
<div class="layui-body"></div>
<!-- 底部 -->
<div class="layui-footer layui-text">copyright © 20251 <a href="https://www.veitool.com" target="_blank">veitool.com</a> all rights reserved.<span class="pull-right">Version {:VT_VERSION}</span></div>
<div class="layui-footer layui-text">技术支持:重庆市凡骄网络科技有限公司<span class="pull-right">Version {:VT_VERSION}</span></div>
</div>
<!-- 加载动画 -->
<div class="page-loading"><div class="v-loader"><div></div></div></div>
......
......@@ -102,6 +102,7 @@
"name": "{$data.name}",
"title": "上传图片",
"value": "/static/file/upload/image/20250422/68073d795d609.png",
"pathid":11,
"type": "{$data.type}"
}];
layui.buildItems.build({
......@@ -125,7 +126,7 @@
gid: 1,
data:str
});
layui.buildItems.init();
//
// var str = [{
// "name": "{$data3.name}",
......@@ -142,20 +143,21 @@
// });
//
//
// var str = [{
// "name": "{$data4.name}",
// "title": "文件上传",
// "value": "{$data4.value}",
// "type": "{$data4.type}"
// }];
// layui.buildItems.build({
// bid: 'imgboxheadimg4',
// url: '',
// map: layui.cache.maps + 'system.upload/',
// gid: 1,
// data:str
// });
var str = [{
"name": "{$data4.name}",
"title": "文件上传",
"value": "{$data4.value}",
"type": "{$data4.type}"
}];
layui.buildItems.build({
bid: 'imgboxheadimg4',
fjbid:'fjfrom',
url: '',
map: layui.cache.maps + 'system.upload/',
gid: 1,
data:str
});
layui.buildItems.init();
form=layui.form;
form.render();
// 指定开关事件
......
<!doctype html>
<html>
<head>
<title>管理员登录 - {:vconfig('site_title','VEITOOL快捷开发框架')}</title>
<title>管理员登录 - {:vconfig('site_title','重庆市凡骄网络科技有限公司')}</title>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
<meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=no"/>
<link rel="shortcut icon" href="{PUBLIC__PATH}/favicon.ico"/>
......
......@@ -9,7 +9,7 @@
*/
// 版本信息
define('VT_VERSION', '2.2.4');
define('VT_VERSION', '2.2.10');
// 后台管理员 session 标识
define('VT_MANAGER', 'V_MANAGER');
// 前台会员 session 标识
......@@ -31,6 +31,13 @@ define('ADDON_PATH', ROOT_PATH . 'addons' . VT_DS);
// 临时目录
define('RUNTIME_PATH', ROOT_PATH . 'runtime' . VT_DS);
//获取图片地址
function get_upload_file($fileid='')
{
return \think\facade\Db::name('system_upload_file')->where('fileid',$fileid)->value('fileurl');
}
/**
* md5判断
* @param string $w 字符
......
......@@ -38,7 +38,7 @@ class ArticleCategoryModel extends Model
public function list(){
$map[] = ['is_del', '=', 0];
$category = $this->order('sort desc')->where($map)->select()->append(['typetxt'])->toArray();
$category = $this->order('sort desc')->where($map)->select()->append(['typetxt','thumbpath'])->toArray();
$tree = new Tree();
$tree->icon = ['&nbsp;&nbsp;│ ', '&nbsp;&nbsp;├─ ', '&nbsp;&nbsp;└─ '];
$tree->nbsp = '&nbsp;&nbsp;';
......@@ -52,4 +52,8 @@ class ArticleCategoryModel extends Model
return $data['type'] == 'page' ? '单页' : '文章';
}
public function getThumbpathAttr($value, $data)
{
return get_upload_file($data['thumb']);
}
}
\ No newline at end of file
......@@ -7,6 +7,7 @@
* Licensed: 这不是一个自由软件,不允许对程序代码以任何形式任何目的的再发行
* ---------------------------------------------------------------------------
*/
namespace app\model;
use think\facade\Db;
......@@ -20,19 +21,29 @@ class ArticleModel extends Model
protected $name = 'article';
public function getCateNameAttr($value,$data){
return Db::name('article_category')->where('id',$data['cate_id'])->value('title');
public function getCateNameAttr($value, $data)
{
return Db::name('article_category')->where('id', $data['cate_id'])->value('title');
}
public function getCreatetimeAttr($value,$data){
return date('Y-m-d H:i:s',$data['createtime']);
public function getCreatetimeAttr($value, $data)
{
return date('Y-m-d H:i:s', $data['createtime']);
}
//获取发布者
public function getAdminnameAttr($value,$data){
public function getAdminnameAttr($value, $data)
{
return Db::name('system_manager')->where('userid', $data['admin_id'])->value('username');
}
return Db::name('system_manager')->where('userid',$data['admin_id'])->value('username');
public function getThumbpathAttr($value, $data)
{
return get_upload_file($data['thumb']);
}
}
\ No newline at end of file
<?php
/**
* ===========================================================================
* Veitool 快捷开发框架系统
* Author: Niaho 26843818@qq.com
* Copyright (c)2019-2025 www.veitool.com All rights reserved.
* Licensed: 这不是一个自由软件,不允许对程序代码以任何形式任何目的的再发行
* ---------------------------------------------------------------------------
*/
namespace app\model;
use think\facade\Db;
use think\Model;
/**
* 模型公用类
*/
class Course extends Model
{
}
\ No newline at end of file
<?php
/**
* ===========================================================================
* Veitool 快捷开发框架系统
* Author: Niaho 26843818@qq.com
* Copyright (c)2019-2025 www.veitool.com All rights reserved.
* Licensed: 这不是一个自由软件,不允许对程序代码以任何形式任何目的的再发行
* ---------------------------------------------------------------------------
*/
namespace app\model;
use think\facade\Db;
use think\Model;
use tool\Tree;
/**
* 模型公用类
*/
class CourseCategory extends Model
{
public function catetree($cate_id = 0)
{
$map[] = ['is_del', '=', 0];
$category = $this->where($map)->order('sort desc')->select()->toArray();
$tree = new Tree();
$tree->icon = ['&nbsp;&nbsp;│ ', '&nbsp;&nbsp;├─ ', '&nbsp;&nbsp;└─ '];
$tree->nbsp = '&nbsp;&nbsp;';
$str = "<option value=@id @selected @disabled>@spacer @title</option>";
$tree->init($category);
$categorydata = $tree->getTree(0, $str, $cate_id);
return $categorydata;
}
public function getThumbpathAttr($value, $data)
{
return get_upload_file($data['thumb']);
}
}
\ No newline at end of file
<?php
/**
* ===========================================================================
* Veitool 快捷开发框架系统
* Author: Niaho 26843818@qq.com
* Copyright (c)2019-2025 www.veitool.com All rights reserved.
* Licensed: 这不是一个自由软件,不允许对程序代码以任何形式任何目的的再发行
* ---------------------------------------------------------------------------
*/
namespace app\model;
use think\facade\Db;
use think\Model;
/**
* 模型公用类
*/
class CourseTag extends Model
{
}
\ No newline at end of file
<?php
/**
* ===========================================================================
* Veitool 快捷开发框架系统
* Author: Niaho 26843818@qq.com
* Copyright (c)2019-2025 www.veitool.com All rights reserved.
* Licensed: 这不是一个自由软件,不允许对程序代码以任何形式任何目的的再发行
* ---------------------------------------------------------------------------
*/
namespace app\model;
use think\facade\Db;
use think\Model;
/**
* 模型公用类
*/
class CourseTeacher extends Model
{
}
\ No newline at end of file
<?php
/**
* ===========================================================================
* Veitool 快捷开发框架系统
* Author: Niaho 26843818@qq.com
* Copyright (c)2019-2025 www.veitool.com All rights reserved.
* Licensed: 这不是一个自由软件,不允许对程序代码以任何形式任何目的的再发行
* ---------------------------------------------------------------------------
*/
namespace app\model;
use app\model\project\User;
use think\facade\Db;
use think\Model;
/**
* 模型公用类
*/
class ShCourse extends Model
{
public function getCreatetimeAttr($value)
{
return date('Y-m-d H:i:s',$value);
}
public function getThumbpathAttr($value, $data)
{
return get_upload_file($data['thumb']);
}
public function getCateNameAttr($value, $data)
{
return CourseCategory::where('id', $data['cate_id'])->value('title');
}
public function getDetailthumbpathAttr($value, $data)
{
return get_upload_file($data['detailthumb']);
}
public function getTeacherNameAttr($value, $data)
{
return CourseTeacher::where('id', $data['teacher_id'])->value('nickname');
}
public function getTagTitleAttr($value, $data)
{
return implode(',',CourseTag::where('id', $data['tag_ids'])->column('title'));
}
public function getStatusTextAttr($value, $data)
{
switch ($data['status']) {
case 1:
$statustxt = '待审核';
break;
case 2:
$statustxt = '审核失败';
break;
case 3:
$statustxt = '审核成功';
break;
default:
$statustxt = '待提交';
}
return $statustxt;
}
public function getUserInfoAttr($value, $data)
{
return User::where('id', $data['user_id'])->field('id,username,mobile')->find();
}
}
\ No newline at end of file
......@@ -97,7 +97,7 @@ layui.define(['tagsInput','fileLibrary','cascader'], function(e){
//上传单图
c.imagewt = '<div id="image-show-{{ d.name }}" data-type="image" data-verify="{{ d.verify || \'\' }}" data-reqtext="{{ d.reqtext || \'\' }}">{{# if (d.value) { }}' +
'<div class="image_item"><img src="{{ d.value }}"/><input type="hidden" name="{{ d.name }}" value="{{ d.value }}"/>'+
'<div class="image_item"><img src="{{ d.value }}"/><input type="hidden" name="{{ d.name }}" value="{{ d.pathid }}"/>'+
'<i class="layui-icon layui-icon-edit item-edit"></i><i class="layui-icon layui-icon-close item-delete"></i></div>{{# }else{ }}<input type="hidden" name="{{ d.name }}" lay-verify="{{ d.verify || \'\' }}" lay-reqtext="{{ d.reqtext || \'\' }}"/>{{# } }}</div>'+
'<div class="image_item layui-upload-drag" style="background:#efefef;" id="up-image-btn-{{ d.name }}" data-type="image" data-name="{{ d.name }}" data-thum="{{ d.thum || 0 }}"><i class="layui-icon">&#xe67c;</i><br/>上传图片</div>'+
'</div>';
......@@ -307,6 +307,7 @@ layui.define(['tagsInput','fileLibrary','cascader'], function(e){
});
},
regUpFile: function(){
$hw.find("[id^='upfile-btn-']").each(function(){
var id = '#'+ $(this).attr('id'),type = $(this).data('type') || 'file';
var name = id.split('-')[2];
......@@ -429,7 +430,7 @@ layui.define(['tagsInput','fileLibrary','cascader'], function(e){
regUpload: function(){
$hw.find("[id^='up-image-btn-']").on('click', function(){
console.log($hw);
var $this = $(this);
var type = $this.data('type');
var name = $this.data('name');
......@@ -438,16 +439,18 @@ layui.define(['tagsInput','fileLibrary','cascader'], function(e){
if(res.length == 0) return;
var $pbox = $hw.find("#image-show-" + name);
// var $pbox = $(this).find("#image-show-" + name);
console.log(res[0]);
if(type=='image'){
$pbox.html('<div class="image_item"><img src="'+ res[0].file_path +'" /><input type="hidden" name="'+ name +'" value="'+ res[0].file_path +'"><i class="layui-icon layui-icon-edit item-edit"></i><i class="layui-icon layui-icon-close item-delete"></i></div>');
// $pbox.html('<div class="image_item"><img src="'+ res[0].file_path +'" /><input type="hidden" name="'+ name +'" value="'+ res[0].file_path +'"><i class="layui-icon layui-icon-edit item-edit"></i><i class="layui-icon layui-icon-close item-delete"></i></div>');
$pbox.html('<div class="image_item"><img src="'+ res[0].file_path +'" /><input type="hidden" name="'+ name +'" value="'+ res[0].file_id +'"><i class="layui-icon layui-icon-edit item-edit"></i><i class="layui-icon layui-icon-close item-delete"></i></div>');
// $htmls = '<div class="image_item"><img src="'+ res[0].file_path +'" /><input type="hidden" name="'+ name +'" value="'+ res[0].file_path +'"><i class="layui-icon layui-icon-edit item-edit"></i><i class="layui-icon layui-icon-close item-delete"></i></div>'
// $("#image-show-" + name).html($htmls);
}else{
if($pbox.children('input').length>0) $pbox.html('');
for(var i in res){
var v = res[i];
$pbox.append('<div class="image_item"><img src="'+ v.file_path +'" /><input type="hidden" name="'+ name +'[]" value="'+ v.file_path +'"><i class="layui-icon layui-icon-edit item-edit"></i><i class="layui-icon layui-icon-close item-delete"></i></div>');
$pbox.append('<div class="image_item"><img src="'+ v.file_path +'" /><input type="hidden" name="'+ name +'[]" value="'+ v.file_id +'"><i class="layui-icon layui-icon-edit item-edit"></i><i class="layui-icon layui-icon-close item-delete"></i></div>');
}
......
......@@ -20,10 +20,10 @@
<div class="more-theme-item" data-theme="theme-pink"><img src="/static/admin/img/theme-pink.png"/></div>
</div>
<!-- 导航 -->
<div class="more-menu-list">
<a class="more-menu-item" href="https://www.veitool.com/" target="_blank"><i class="layui-icon layui-icon-auz" style="font-size:18px;"></i> Veitool官方</a>
<a class="more-menu-item" href="https://layui.dev/" target="_blank"><i class="layui-icon layui-icon-read" style="font-size:18px;"></i> Layui文档</a>
</div>
<!--<div class="more-menu-list">-->
<!-- <a class="more-menu-item" href="https://layui.dev/" target="_blank"><i class="layui-icon layui-icon-read" style="font-size:18px;"></i> Layui文档</a>-->
<!--</div>-->
<!-- 控制开关 -->
<div class="layui-form" style="margin:25px 0;" lay-filter="more-set-form">
<div class="layui-form-item">
......@@ -67,7 +67,7 @@ layui.use(function(){
admin.putTempData('indexTabs', undefined);
location.reload();
});
$('#setMoreTab').prop('checked', layui.cache.bins.pageTabs);
$('#setMoreTab').prop('checked', layui.cache.bins.pageTabs);
form.render('radio', 'more-set-form');
form.render('checkbox', 'more-set-form');
});
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment