From de91c8b1ddd5e0e968d2dad286409c58ad4d0753 Mon Sep 17 00:00:00 2001 From: taoser Date: Tue, 12 Oct 2021 16:46:49 +0800 Subject: [PATCH] 1.8.4 --- README.md | 22 +-- app/Request.php | 4 +- app/admin/controller/Addons.php | 164 ++++++++++++++-------- app/admin/controller/Forum.php | 24 ++-- app/admin/view/addons/index.html | 100 ++++++------- app/admin/view/forum/list.html | 29 +++- app/common/model/Article.php | 4 +- app/index/controller/Article.php | 3 +- config/taoler.php | 8 +- public/static/admin/modules/addons.js | 55 ++++++-- public/static/admin/modules/forum.js | 3 +- view/taoler/index/article/ask/detail.html | 3 +- 12 files changed, 250 insertions(+), 169 deletions(-) diff --git a/README.md b/README.md index c06a342..3914c92 100644 --- a/README.md +++ b/README.md @@ -7,8 +7,8 @@ * 后台:http://adm.aieok.com:888 * 账号:test * 密码:test123 - * 版本:TaoLer 1.8.8 - * 日期:2021.10.11 + * 版本:TaoLer 1.8.4 + * 日期:2021.8.18 #### 项目地址 @@ -21,10 +21,11 @@ 1. 采用动态密码加密,相同密码在入库时具有唯一性,即使管理员也无法破解,用户信息安全牢固。 2. 系统采用最新版TinkPHP6框架开发,底层安全可靠,数据查询更快,运行效率更高,网站速度更快。 3. 自适应前端,桌面和移动端访问界面友好简洁,模块清晰。 -4. 完善的后台系统,管理便捷,动态菜单和权限角色分配系统。支持3级菜单和无限极分类。 -5. 双升级系统,可支持自动和手动升级。可在线检测并升级系统,保持网站的更新和安全。 -6. 代码开源,不设暗门操作,更安全。 -7. 项目会长期维护,优化更新。 +4. 多模板多单页,可以设置不同分类模块,不同模板单页,论坛模块,问答模板,企业站模板,产品模块等自由开发。 +5. 完善的后台系统,管理便捷,动态菜单和权限角色分配系统。支持3级菜单和无限极分类。 +6. 双升级系统,可支持自动和手动升级。可在线检测并升级系统,保持网站的更新和安全。 +7. 代码开源,不设暗门操作,更安全。 +8. 项目会长期维护,优化更新。 #### 构架组成 @@ -34,11 +35,12 @@ - 前端:Fly template V3.0 #### 构架介绍 + thinkphp: 快速、简单的面向对象的轻量级PHP开发框架,出色的性能和至简代码的,更注重易用性。代码维护方便。 - layui前端 + layui前端: 极简、丰盈,简单高效,模块化UI框架,体积轻盈,组件丰盈。 Fly模板: - 一款至简的社区模板,适合政府机构、教育机构、事业单位、商业企业、个人站长等众多行业领域。 + 一款至简的社区模板。 #### 安装教程 1. 首选确保满目使用环境要求,php > 7.2, mysql > 5.7.3 @@ -53,8 +55,8 @@ } ``` 4. 首次安装,访问域名http://www.youdomain.com可自动跳转到/install/index进行引导安装,重新安装需删除public目录下install.lock。 -5. 安装前需要先创建mysql数据库(准备:数据库连接地址,数据库用户名,数据库密码,数据库端口,建好在数据库名) -6. 请牢记安装设置的管理员用户名和密码,默认admin/123456。前后台的管理员密码一致。前后端管理员账户是独立的,前端主要对文章内容的审查管理等操作。 +5. 安装前需要先创建mysql数据库(准备:数据库连接地址,数据库用户名,密码,端口) +6. 如果手动导入数据库,管理员用户名和密码,默认admin/123456,前后台的管理员密码一致。前后端管理员账户是独立的,前端主要对文章内容的审查管理等操作。 #### 使用说明 diff --git a/app/Request.php b/app/Request.php index 2b28f92..27afbfc 100644 --- a/app/Request.php +++ b/app/Request.php @@ -5,7 +5,7 @@ namespace app; class Request extends \think\Request { //过滤空格 - //protected $filter = ['trim','htmlspecialchars','strip_tags']; - protected $filter = ['trim']; + protected $filter = ['trim','htmlspecialchars','strip_tags']; + //protected $filter = ['trim']; } diff --git a/app/admin/controller/Addons.php b/app/admin/controller/Addons.php index a9df3b0..fa3b546 100644 --- a/app/admin/controller/Addons.php +++ b/app/admin/controller/Addons.php @@ -6,9 +6,9 @@ use think\facade\View; use think\facade\Db; use think\facade\Request; use think\facade\Config; -use think\exception\ValidateException; use app\admin\model\Addons as AddonsModel; use taoler\com\Files; +use taoler\com\Api; class Addons extends AdminController { @@ -19,60 +19,123 @@ class Addons extends AdminController */ public function index() { - if(Request::isAjax()){ - - var_dump(Files::getDirName('../addons/')); - + $type = input('type'); + //$filter = input('filter') ? input('filter') : 'public-list'; + //动态field + switch($type){ + //已安装 + case 'installed': + $col = [ + ['type' => 'numbers', 'fixed'=> 'left'], + ['field' => 'name','title'=> '插件', 'width'=> 150], + ['field'=> 'title','title'=> '标题', 'width'=> 100], + ['field'=> 'version','title'=> '版本', 'width'=> 100], + ['field' => 'author','title'=> '作者', 'width'=> 100], + ['field' => 'description','title'=> '简介', 'minWidth'=> 200], + ['field' => 'status','title'=> '状态', 'width'=> 100], + ['field' => 'install','title'=> '安装', 'width'=> 100], + ['field' => 'ctime','title'=> '到期时间', 'width'=> 150], + ['title' => '操作', 'width'=> 220, 'align'=>'center', 'toolbar'=> '#addons-installed-tool'] + ]; + break; + //在线 + case 'onlineAddons': + $col = [ + ['type' => 'numbers', 'fixed'=> 'left'], + ['field' => 'name','title'=> '插件', 'width'=> 150], + ['field'=> 'title','title'=> '标题', 'width'=> 100], + ['field'=> 'version','title'=> '版本', 'width'=> 100], + ['field' => 'author','title'=> '作者', 'width'=> 100], + ['field' => 'description','title'=> '简介', 'minWidth'=> 200], + ['field' => 'price','title'=> '价格(元)'], + ['field' => 'status','title'=> '状态', 'width'=> 100], + ['field' => 'install','title'=> '安装', 'width'=> 100], + ['field' => 'ctime','title'=> '时间', 'width'=> 150], + ['title' => '操作', 'width'=> 150, 'align'=>'center', 'toolbar'=> '#addons-tool'] + ]; + break; + default: + $col = [ + ['type' => 'numbers', 'fixed'=> 'left'], + ['field' => 'name','title'=> '插件', 'width'=> 150], + ['field'=> 'title','title'=> '标题', 'width'=> 100], + ['field'=> 'version','title'=> '版本', 'width'=> 100], + ['field' => 'author','title'=> '作者', 'width'=> 100], + ['field' => 'description','title'=> '简介', 'minWidth'=> 200], + ['field' => 'status','title'=> '状态', 'width'=> 100], + ['field' => 'install','title'=> '安装', 'width'=> 100], + ['field' => 'ctime','title'=> '到期时间', 'width'=> 150], + ['title' => '操作', 'width'=> 220, 'align'=>'center', 'toolbar'=> '#addons-installed-tool'] + ]; } + + View::assign('col',$col); return View::fetch(); } + + public function addonsList() + { + + $type = input('type') ? input('type') : 'installed'; + $res = []; + + switch($type){ + + //已安装 + case 'installed': + $addons = Files::getDirName('../addons/'); + if($addons){ + $res = ['code'=>0,'msg'=>'','count'=>5]; + foreach($addons as $v){ + $info_file = '../addons/'.$v.'/info.ini'; + $info = parse_ini_file($info_file); + $res['data'][] = $info; + } + } + + break; + //在线 + case 'onlineAddons': + $url = $this->getSystem()['api_url'].'/v1/addons'; + $addons = Api::urlPost($url,[]); + if( $addons->code !== -1){ + $res['code'] = 0; + $res['msg'] = ''; + $res['data'] = $addons->data; + } + + break; + //已安装 + default: + $addons = Files::getDirName('../addons/'); + if($addons){ + $res = ['code'=>0,'msg'=>'','count'=>5]; + foreach($addons as $v){ + $info_file = '../addons/'.$v.'/info.ini'; + $info = parse_ini_file($info_file); + $res['data'][] = $info; + } + } + break; + } + return json($res); + + + } + /** * 显示创建资源表单页. * * @return \think\Response */ - public function add() + public function install() { - //添加版本 - if(Request::isAjax()){ - $data = Request::param(); - $result = AddonsModel::create($data); - if($result){ - $res = ['code'=>0,'msg'=>'添加成功']; - }else{ - $res = ['code'=>-1,'msg'=>'添加失败']; - } - return json($res); - } - - return View::fetch(); + // } - /** - * 编辑版本 - * - * @param int $id - * @return \think\Response - */ - public function edit($id) - { - $addons = AddonsModel::find($id); - if(Request::isAjax()){ - $data = Request::only(['id','addons_name','addons_version','addons_auther','addons_resume','addons_price','addons_src']); - $result = $addons->where('id',$id)->save($data); - if($result){ - $res = ['code'=>0,'msg'=>'编辑成功']; - }else{ - $res = ['code'=>-1,'msg'=>'编辑失败']; - } - return json($res); - } - View::assign('addons',$addons); - return View::fetch(); - } /** * 上传版本的zip资源 @@ -83,24 +146,7 @@ class Addons extends AdminController */ public function uploadZip() { - $id = Request::param(); - $file = request()->file('file'); - try { - validate(['file'=>'filesize:2048|fileExt:zip,rar,7z']) - ->check(array($file)); - $savename = \think\facade\Filesystem::disk('public')->putFile('addons',$file); - } catch (think\exception\ValidateException $e) { - echo $e->getMessage(); - } - $upload = Config::get('filesystem.disks.public.url'); - - if($savename){ - $name_path =str_replace('\\',"/",$upload.'/'.$savename); - $res = ['code'=>0,'msg'=>'插件上传成功','src'=>$name_path]; - } else { - $res = ['code'=>-1,'msg'=>'上传错误']; - } - return json($res); + // } /** diff --git a/app/admin/controller/Forum.php b/app/admin/controller/Forum.php index e133acb..3bb4ab5 100644 --- a/app/admin/controller/Forum.php +++ b/app/admin/controller/Forum.php @@ -64,7 +64,7 @@ class Forum extends AdminController $forumList = Db::name('article') ->alias('a') ->join('user u','a.user_id = u.id') - ->field('a.id as aid,name,user_img,title,a.update_time as update_time,is_top,is_hot,is_reply,a.status as status') + ->field('a.id as aid,name,user_img,title,content,a.update_time as update_time,is_top,is_hot,is_reply,a.status as status') ->where('a.delete_time',0) ->where($map) ->where($where) @@ -77,7 +77,7 @@ class Forum extends AdminController $res['msg'] = ''; $res['count'] = $count; foreach($forumList as $k=>$v){ - $res['data'][]= ['id'=>$v['aid'],'poster'=>$v['name'],'avatar'=>$v['user_img'],'content'=>$v['title'],'posttime'=>date("Y-m-d",$v['update_time']),'top'=>$v['is_top'],'hot'=>$v['is_hot'],'reply'=>$v['is_reply'],'check'=>$v['status']]; + $res['data'][]= ['id'=>$v['aid'],'poster'=>$v['name'],'avatar'=>$v['user_img'],'title'=>$v['title'],'content'=>$v['content'],'posttime'=>date("Y-m-d",$v['update_time']),'top'=>$v['is_top'],'hot'=>$v['is_hot'],'reply'=>$v['is_reply'],'check'=>$v['status']]; } } else { $res = ['code'=>-1,'msg'=>'没有查询结果!']; @@ -102,16 +102,20 @@ class Forum extends AdminController public function listdel($id) { if(Request::isAjax()){ - $article =Article::find($id); - $result = $article->together(['comments'])->delete(); - - if($result){ - return json(['code'=>0,'msg'=>'删除成功']); - }else{ - return json(['code'=>-1,'msg'=>'删除失败']); - } + $arr = explode(",",$id); + foreach($arr as $v){ + $article =Article::find($v); + $result = $article->together(['comments'])->delete(); } + + if($result){ + return json(['code'=>0,'msg'=>'删除成功']); + }else{ + return json(['code'=>-1,'msg'=>'删除失败']); + } + } } + //置顶帖子 public function top() { diff --git a/app/admin/view/addons/index.html b/app/admin/view/addons/index.html index 5156e4e..be0ccd4 100644 --- a/app/admin/view/addons/index.html +++ b/app/admin/view/addons/index.html @@ -2,51 +2,62 @@ {block name="body"}
-
+
-
-
- 插件分类 -
-
- -
-
+
+
+ 插件分类 +
+
+ +
+
-
+
+ + -
-
+ + +
{/block} {block name="js"}