From a54e206e007f6016e41003c4f5aa92d1c99ce581 Mon Sep 17 00:00:00 2001 From: taoser Date: Sun, 25 Dec 2022 17:13:13 +0800 Subject: [PATCH] addons --- app/admin/controller/Addons.php | 127 ++++++++++++------ app/admin/view/addons/index.html | 56 ++++---- app/admin/view/addons/pay.html | 71 ++++++++++ app/admin/view/forum/replys.html | 3 +- composer.lock | 24 ++-- config/taoler.php | 2 +- public/static/admin/modules/addons.js | 125 ++++++----------- public/static/res/images/alipay-logo.png | Bin 0 -> 5998 bytes public/static/res/images/alipay.jpg | Bin 0 -> 11469 bytes vendor/composer/autoload_psr4.php | 2 +- vendor/composer/autoload_static.php | 4 +- vendor/composer/installed.json | 28 ++-- vendor/composer/installed.php | 16 +-- vendor/services.php | 2 +- .../var-dumper/Resources/bin/var-dump-server | 4 + vendor/taoser/think-addons/src/helper.php | 5 +- view/taoler/index/article/add.html | 16 +-- view/taoler/index/article/ask/detail.html | 14 +- view/taoler/index/article/blog/detail.html | 11 +- view/taoler/index/article/edit.html | 68 +++++----- view/taoler/index/article/news/detail.html | 16 +-- view/taoler/index/article/posts/detail.html | 15 ++- view/taoler/index/login/login.html | 8 +- view/taoler/index/public/base.html | 4 +- view/taoler/index/public/user.html | 2 + 25 files changed, 347 insertions(+), 276 deletions(-) create mode 100644 app/admin/view/addons/pay.html create mode 100644 public/static/res/images/alipay-logo.png create mode 100644 public/static/res/images/alipay.jpg diff --git a/app/admin/controller/Addons.php b/app/admin/controller/Addons.php index 4249af2..edcd226 100644 --- a/app/admin/controller/Addons.php +++ b/app/admin/controller/Addons.php @@ -26,7 +26,7 @@ class Addons extends AdminController } /** - * 插件列表 + * 插件动态列表 * @return Json */ public function addonsList() @@ -57,10 +57,10 @@ class Addons extends AdminController ['field'=> 'version','title'=> '版本', 'templet' => '
{{d.version}}
', 'width'=> 60], ['field' => 'author','title'=> '作者', 'width'=> 80], ['field' => 'description','title'=> '简介', 'minWidth'=> 200], - ['field' => 'show','title'=> '状态', 'width'=> 100], ['field' => 'install','title'=> '安装', 'width'=> 100], ['field' => 'ctime','title'=> '到期时间', 'width'=> 100], - ['title' => '操作', 'width'=> 200, 'align'=>'center', 'toolbar'=> '#addons-installed-tool'] + ['field' => 'status','title'=> '状态', 'width'=> 95, 'templet' => '#buttonStatus'], + ['title' => '操作', 'width'=> 150, 'align'=>'center', 'toolbar'=> '#addons-installed-tool'] ]; } else { $res = ['code'=>-1,'msg'=>'没有安装任何插件']; @@ -119,10 +119,10 @@ class Addons extends AdminController ['field' => 'title','title'=> '插件', 'width'=> 200], ['field' => 'description','title'=> '简介', 'minWidth'=> 200], ['field' => 'author','title'=> '作者', 'width'=> 100], - ['field' => 'price','title'=> '价格(元)','width'=> 80], + ['field' => 'price','title'=> '价格(元)','width'=> 85], ['field' => 'downloads','title'=> '下载', 'width'=> 70], - ['field' => 'version','title'=> '版本', 'templet' => '
{{d.version}} {{# if(d.have_newversion == 1){ }}{{# } }}
','width'=> 70], - ['field' => 'status','title'=> '状态', 'width'=> 70], + ['field' => 'version','title'=> '版本', 'templet' => '
{{d.version}} {{# if(d.have_newversion == 1){ }}{{# } }}
','width'=> 75], + ['field' => 'status','title'=> '在线', 'width'=> 70], ['title' => '操作', 'width'=> 150, 'align'=>'center', 'toolbar'=> '#addons-tool'] ]; } else { @@ -151,34 +151,6 @@ class Addons extends AdminController } return json($res); } - - return View::fetch(); - } - - - /** - * 编辑版本 - * @param $id - * @return string|Json - * @throws \think\db\exception\DataNotFoundException - * @throws \think\db\exception\DbException - * @throws \think\db\exception\ModelNotFoundException - */ - 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(); } @@ -219,17 +191,22 @@ class Addons extends AdminController return $this->uploadFiles($type); } - //安装插件 + /** + * 安装插件 + * @return Json + * @throws \Exception + */ public function install() { $data = Request::param(); $url = $this->getSystem()['api_url'].'/v1/getaddons'; $data = ['name'=>$data['name'], 'version'=>$data['version'], 'uid'=>$data['uid'], 'token'=>$data['token']]; $addons = Api::urlPost($url,$data); - if( $addons->code == -1) { + if( $addons->code < 0) { return json(['code'=>$addons->code,'msg'=>$addons->msg]); } - //是否安装? + //$this->pay($name,$extend); + //版本判断,是否能够安装? $addInstalledVersion = get_addons_info($data['name']); if(!empty($addInstalledVersion)){ $verRes = version_compare($data['version'],$addInstalledVersion['version'],'>'); @@ -325,7 +302,6 @@ class Addons extends AdminController $menu = get_addons_menu($name); if(!empty($menu)){ $menu_arr[] = $menu['menu']; -// halt( $menu_arr); $this->delAddonMenu($menu_arr); } @@ -361,7 +337,11 @@ class Addons extends AdminController return json(['code' => 0, 'msg' => '插件卸载成功']); } - // 启用禁用插件 + /** + * 启用禁用插件 + * @return Json + * @throws Exception + */ public function status(){ $name = input('name'); $info = get_addons_info($name); @@ -381,8 +361,13 @@ class Addons extends AdminController return json($res); } - - //配置插件 + + /** + * 配置插件 + * @param $name + * @return string|Json + * @throws \Exception + */ public function config($name) { $name = input('name'); @@ -426,6 +411,14 @@ class Addons extends AdminController } + /** + * 添加菜单 + * @param array $menu + * @param int $pid + * @param int $type + * @return void + * @throws \Exception + */ public function addAddonMenu(array $menu,int $pid = 0, int $type = 1) { foreach ($menu as $v){ @@ -451,7 +444,13 @@ class Addons extends AdminController } - //循环删除菜单 + /** + * 循环删除菜单 + * @param array $menu + * @param string $module + * @return void + * @throws \Exception + */ public function delAddonMenu(array $menu,string $module = 'addon') { foreach ($menu as $k=>$v){ @@ -473,6 +472,10 @@ class Addons extends AdminController } + /** + * 用户登录 + * @return mixed|Json + */ public function userLogin() { $data = Request::param(); @@ -485,4 +488,44 @@ class Addons extends AdminController } } + /** + * 订单 + * @return string|Json + */ + public function pay() + { + $data = Request::only(['id','name','version','uid','price']); + $url = $this->getSystem()['api_url'].'/v1/createOrder'; + $order = Api::urlPost($url,$data); + + if ($order->code == 0) { + $orderData = json_decode(json_encode($order->data),TRUE); + View::assign('orderData',$orderData); + return View::fetch(); + } else { + return json(['code'=>-1,'msg'=>$order->msg]); + } + } + + /** + * 支付查询 + * @return Json + */ + public function isPay() + { + $param = Request::only(['name','userinfo']); + //halt($data); + $data = [ + 'name'=>$param['name'], + 'uid'=> $param['userinfo']['uid'], + ]; + $url = $this->getSystem()['api_url'].'/v1/ispay'; + $res = Api::urlPost($url,$data); + if($res->code == 0) { + return json(['code'=>0,'msg'=>'payed']); + } else { + return json(['code'=>-1,'msg'=>'no pay']); + } + } + } diff --git a/app/admin/view/addons/index.html b/app/admin/view/addons/index.html index aca6a32..289a53c 100644 --- a/app/admin/view/addons/index.html +++ b/app/admin/view/addons/index.html @@ -3,30 +3,18 @@ {block name="body"}
-
-
-
-
插件分类
-
- -
-
- +
+ - - - +
-
{include file="public/user_login" /} {/block} {block name="js"} +{/block} \ No newline at end of file diff --git a/app/admin/view/forum/replys.html b/app/admin/view/forum/replys.html index 5f3cad9..2fa771c 100644 --- a/app/admin/view/forum/replys.html +++ b/app/admin/view/forum/replys.html @@ -127,7 +127,7 @@ var forumList = "{:url('Forum/list')}", //监听回贴审核 form.on('switch(recheck)', function(data){ var data= data.elem; - status = data.checked ? 1 : -1; + var status = data.checked ? 1 : -1; //执行回帖审核 $.ajax({ type:'post', @@ -148,7 +148,6 @@ var forumList = "{:url('Forum/list')}", adim:6 }) } - table.reload('LAY-app-forumreply-list'); } }); diff --git a/composer.lock b/composer.lock index 34273bd..6081e77 100644 --- a/composer.lock +++ b/composer.lock @@ -2130,16 +2130,16 @@ }, { "name": "symfony/var-dumper", - "version": "v4.4.46", + "version": "v4.4.47", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "90425fd98d1ecad98e4b2dca9f54f62069193b15" + "reference": "1069c7a3fca74578022fab6f81643248d02f8e63" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/90425fd98d1ecad98e4b2dca9f54f62069193b15", - "reference": "90425fd98d1ecad98e4b2dca9f54f62069193b15", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/1069c7a3fca74578022fab6f81643248d02f8e63", + "reference": "1069c7a3fca74578022fab6f81643248d02f8e63", "shasum": "" }, "require": { @@ -2199,7 +2199,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v4.4.46" + "source": "https://github.com/symfony/var-dumper/tree/v4.4.47" }, "funding": [ { @@ -2215,7 +2215,7 @@ "type": "tidelift" } ], - "time": "2022-09-03T23:07:25+00:00" + "time": "2022-10-03T15:15:11+00:00" }, { "name": "symfony/var-exporter", @@ -2292,16 +2292,16 @@ }, { "name": "taoser/think-addons", - "version": "v1.0.6", + "version": "v1.0.8", "source": { "type": "git", "url": "https://github.com/taoser/think-addons.git", - "reference": "e6e35bfd8b93dc469ebb5c5530ba350131bd7541" + "reference": "570367e8d4904842625427f132d23c93f5edfc68" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/taoser/think-addons/zipball/e6e35bfd8b93dc469ebb5c5530ba350131bd7541", - "reference": "e6e35bfd8b93dc469ebb5c5530ba350131bd7541", + "url": "https://api.github.com/repos/taoser/think-addons/zipball/570367e8d4904842625427f132d23c93f5edfc68", + "reference": "570367e8d4904842625427f132d23c93f5edfc68", "shasum": "" }, "require": { @@ -2343,9 +2343,9 @@ "description": "The ThinkPHP6 Addons Package", "support": { "issues": "https://github.com/taoser/think-addons/issues", - "source": "https://github.com/taoser/think-addons/tree/v1.0.6" + "source": "https://github.com/taoser/think-addons/tree/v1.0.8" }, - "time": "2022-10-06T13:11:38+00:00" + "time": "2022-10-15T06:21:17+00:00" }, { "name": "taoser/think-auth", diff --git a/config/taoler.php b/config/taoler.php index 17c9df7..a0c1e0e 100644 --- a/config/taoler.php +++ b/config/taoler.php @@ -16,7 +16,7 @@ return [ // 应用名,此项不可更改 'appname' => 'TaoLer', // 版本配置 - 'version' => '2.0.4', + 'version' => '2.0.5', // 加盐 'salt' => 'taoler', // 数据库备份目录 diff --git a/public/static/admin/modules/addons.js b/public/static/admin/modules/addons.js index 32da7e7..f2d99f4 100644 --- a/public/static/admin/modules/addons.js +++ b/public/static/admin/modules/addons.js @@ -73,25 +73,50 @@ layui.define(["table", "form", "upload","notify","hxNav"], function (exports) { var event = obj.event; var url = $(this).data('url') - //安装插件 - if (event === "install") { - // 检测权限 - var userinfo = api.userinfo.get(); - var userLoginUrl = $(this).data('userlogin'); + // 安装 + var install = function (data,url,userLoginUrl,userIsPayUrl){ + var userinfo = api.userinfo.get(); // 检测权限 if(userinfo) { notify.confirm("确认安装吗?", "vcenter",function(){ var index = layer.load(1); $.post(url, { name: data.name, version: data.version, uid: userinfo.uid, token: userinfo.token }, function (res) { - if (res.code == 0) { + // 需要支付 + if (res.code === -2) { + layer.close(index); + layer.open({ + type: 2, + area: ['700px', '650px'], + fixed: false, //不固定 + maxmin: true, + content: 'pay.html'+ "?id=" + data.id+ "&name=" + data.name + "&version=" + data.version + "&uid=" + userinfo.uid + "&price=" + data.price, + success: function (layero, index){ + // 订单沦陷 + var intervalPay = setInterval(function() { + $.post(userIsPayUrl,{name:data.name, userinfo:userinfo},function (res){ + if(res.code === 0) { + layer.close(index); + clearInterval(intervalPay); + install(data,url,userLoginUrl,userIsPayUrl); + } + }); + },3000); + } + }); + } + // 安装成功 + if (res.code === 0) { + layer.close(index); notify.success(res.msg, "topRight"); - } else { + } + // 安装失败 + if (res.code === -1) { + layer.close(index); notify.error(res.msg, "topRight"); } - layer.close(index); }); }); } else { - // 登录 + // 未登录时 layer.confirm('你当前还未登录TaoLer社区账号,请登录后操作!', { title : '温馨提示', btnAlign: 'c', @@ -146,21 +171,13 @@ layui.define(["table", "form", "upload","notify","hxNav"], function (exports) { }); }); } - } - // 启用禁用 - if(event == 'status') { - notify.confirm("确认框", "vcenter", function(){ - $.post(url,{ name: data.name },function(res){ - if (res.code == 0) { - notify.success(res.msg, "topRight"); - } else { - notify.error(res.msg, "topRight"); - } - table.reloadData("addons-list",{},'deep'); - }); - }); + //安装插件 + if (event === "install") { + var userLoginUrl = $(this).data('userlogin'); + var userIsPayUrl = $(this).data('ispay'); + install(data,url,userLoginUrl,userIsPayUrl); } // 卸载插件 @@ -168,7 +185,7 @@ layui.define(["table", "form", "upload","notify","hxNav"], function (exports) { notify.confirm("确认框", "vcenter",function() { var index = layer.load(1); $.post(url, { name: data.name }, function (res) { - if (res.code == 0) { + if (res.code === 0) { notify.success(res.msg, "topRight"); } else { notify.error(res.msg, "topRight"); @@ -183,7 +200,7 @@ layui.define(["table", "form", "upload","notify","hxNav"], function (exports) { if (event === "config") { $.post(url,{name:data.name},function (res){ // 无配置项拦截 - if (res.code == -1) { + if (res.code === -1) { notify.alert(res.msg); return false; } @@ -195,9 +212,7 @@ layui.define(["table", "form", "upload","notify","hxNav"], function (exports) { area: ["780px", "90%"], btn: ["确定", "取消"], yes: function (index, layero) { - var iframeWindow = window["layui-layer-iframe" + index], - submitID = "LAY-addons-config-submit", - submit = layero.find("iframe").contents().find("#" + submitID); + var iframeWindow = window["layui-layer-iframe" + index], submitID = "LAY-addons-config-submit", submit = layero.find("iframe").contents().find("#" + submitID); //监听提交 iframeWindow.layui.form.on("submit(" + submitID + ")", function (data) { @@ -208,7 +223,7 @@ layui.define(["table", "form", "upload","notify","hxNav"], function (exports) { data: field, daType: "json", success: function (res) { - if (res.code == 0) { + if (res.code === 0) { notify.success(res.msg, "topRight"); } else { notify.error(res.msg, "topRight"); @@ -251,60 +266,6 @@ layui.define(["table", "form", "upload","notify","hxNav"], function (exports) { } - if (event === "edit") { - var tr = $(obj.tr); - layer.open({ - type: 2, - title: "编辑插件", - content: addonsEdit + "?id=" + data.id, - maxmin: true, - area: ["400px", "620px"], - btn: ["确定", "取消"], - yes: function (index, layero) { - var iframeWindow = window["layui-layer-iframe" + index], - submitID = "LAY-addons-submit", - submit = layero - .find("iframe") - .contents() - .find("#" + submitID); - - //监听提交 - iframeWindow.layui.form.on( - "submit(" + submitID + ")", - function (data) { - var field = data.field; //获取提交的字段 - - //提交 Ajax 成功后,静态更新表格中的数据 - $.ajax({ - type: "post", - url: addonsEdit, - data: field, - daType: "json", - success: function (res) { - if (res.code == 0) { - layer.msg(res.msg, { icon: 6, time: 2000 }); - } else { - layer.open({ - tiele: "修改失败", - content: res.msg, - icon: 5, - anim: 6, - }); - } - }, - }); - - table.reload("addons-list"); //数据刷新 - layer.close(index); //关闭弹层 - } - ); - - submit.trigger("click"); - }, - success: function (layero, index) {}, - }); - } - }); exports("addons", {}); diff --git a/public/static/res/images/alipay-logo.png b/public/static/res/images/alipay-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..77343fa0cbe09f6ef4c2872871c02b646d08e163 GIT binary patch literal 5998 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 literal 0 HcmV?d00001 diff --git a/public/static/res/images/alipay.jpg b/public/static/res/images/alipay.jpg new file mode 100644 index 0000000000000000000000000000000000000000..dfff39a50aeea86724f7247a3c306a4096c1ff5c GIT binary patch literal 11469 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 array($vendorDir . '/topthink/think-multi-app/src'), 'think\\' => array($vendorDir . '/topthink/framework/src/think', $vendorDir . '/topthink/think-helper/src', $vendorDir . '/topthink/think-orm/src', $vendorDir . '/topthink/think-template/src'), 'taoser\\think\\' => array($vendorDir . '/taoser/think-auth/src'), - 'taoser\\' => array($vendorDir . '/taoser/think-addons/src', $vendorDir . '/taoser/think-setarr/src'), + 'taoser\\' => array($vendorDir . '/taoser/think-setarr/src', $vendorDir . '/taoser/think-addons/src'), 'phpspirit\\databackup\\' => array($vendorDir . '/lotofbadcode/phpspirit_databackup/src'), 'liliuwei\\social\\' => array($vendorDir . '/liliuwei/thinkphp-social/src'), 'app\\' => array($baseDir . '/app'), diff --git a/vendor/composer/autoload_static.php b/vendor/composer/autoload_static.php index 619065f..6c7c833 100644 --- a/vendor/composer/autoload_static.php +++ b/vendor/composer/autoload_static.php @@ -184,8 +184,8 @@ class ComposerStaticInit1b32198725235c8d6500c87262ef30c2 ), 'taoser\\' => array ( - 0 => __DIR__ . '/..' . '/taoser/think-addons/src', - 1 => __DIR__ . '/..' . '/taoser/think-setarr/src', + 0 => __DIR__ . '/..' . '/taoser/think-setarr/src', + 1 => __DIR__ . '/..' . '/taoser/think-addons/src', ), 'phpspirit\\databackup\\' => array ( diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json index a9d64a9..d93b9c9 100644 --- a/vendor/composer/installed.json +++ b/vendor/composer/installed.json @@ -2264,17 +2264,17 @@ }, { "name": "symfony/var-dumper", - "version": "v4.4.46", - "version_normalized": "4.4.46.0", + "version": "v4.4.47", + "version_normalized": "4.4.47.0", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "90425fd98d1ecad98e4b2dca9f54f62069193b15" + "reference": "1069c7a3fca74578022fab6f81643248d02f8e63" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/90425fd98d1ecad98e4b2dca9f54f62069193b15", - "reference": "90425fd98d1ecad98e4b2dca9f54f62069193b15", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/1069c7a3fca74578022fab6f81643248d02f8e63", + "reference": "1069c7a3fca74578022fab6f81643248d02f8e63", "shasum": "" }, "require": { @@ -2298,7 +2298,7 @@ "ext-intl": "To show region name in time zone dump", "symfony/console": "To use the ServerDumpCommand and/or the bin/var-dump-server script" }, - "time": "2022-09-03T23:07:25+00:00", + "time": "2022-10-03T15:15:11+00:00", "bin": [ "Resources/bin/var-dump-server" ], @@ -2336,7 +2336,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v4.4.46" + "source": "https://github.com/symfony/var-dumper/tree/v4.4.47" }, "funding": [ { @@ -2432,17 +2432,17 @@ }, { "name": "taoser/think-addons", - "version": "v1.0.6", - "version_normalized": "1.0.6.0", + "version": "v1.0.8", + "version_normalized": "1.0.8.0", "source": { "type": "git", "url": "https://github.com/taoser/think-addons.git", - "reference": "e6e35bfd8b93dc469ebb5c5530ba350131bd7541" + "reference": "570367e8d4904842625427f132d23c93f5edfc68" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/taoser/think-addons/zipball/e6e35bfd8b93dc469ebb5c5530ba350131bd7541", - "reference": "e6e35bfd8b93dc469ebb5c5530ba350131bd7541", + "url": "https://api.github.com/repos/taoser/think-addons/zipball/570367e8d4904842625427f132d23c93f5edfc68", + "reference": "570367e8d4904842625427f132d23c93f5edfc68", "shasum": "" }, "require": { @@ -2452,7 +2452,7 @@ "topthink/think-helper": "^3.0.0", "topthink/think-view": "^1.0" }, - "time": "2022-10-06T13:11:38+00:00", + "time": "2022-10-15T06:21:17+00:00", "type": "library", "extra": { "think": { @@ -2486,7 +2486,7 @@ "description": "The ThinkPHP6 Addons Package", "support": { "issues": "https://github.com/taoser/think-addons/issues", - "source": "https://github.com/taoser/think-addons/tree/v1.0.6" + "source": "https://github.com/taoser/think-addons/tree/v1.0.8" }, "install-path": "../taoser/think-addons" }, diff --git a/vendor/composer/installed.php b/vendor/composer/installed.php index c8b63a6..d8d10d0 100644 --- a/vendor/composer/installed.php +++ b/vendor/composer/installed.php @@ -3,7 +3,7 @@ 'name' => 'taoser/taoler', 'pretty_version' => 'dev-master', 'version' => 'dev-master', - 'reference' => '0c44db5a5d56d4f62656d0fdad68f82c27235469', + 'reference' => 'ad4f215470c0da087a55d6ee63199988a4d216bd', 'type' => 'project', 'install_path' => __DIR__ . '/../../', 'aliases' => array(), @@ -347,9 +347,9 @@ 'dev_requirement' => false, ), 'symfony/var-dumper' => array( - 'pretty_version' => 'v4.4.46', - 'version' => '4.4.46.0', - 'reference' => '90425fd98d1ecad98e4b2dca9f54f62069193b15', + 'pretty_version' => 'v4.4.47', + 'version' => '4.4.47.0', + 'reference' => '1069c7a3fca74578022fab6f81643248d02f8e63', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/var-dumper', 'aliases' => array(), @@ -367,16 +367,16 @@ 'taoser/taoler' => array( 'pretty_version' => 'dev-master', 'version' => 'dev-master', - 'reference' => '0c44db5a5d56d4f62656d0fdad68f82c27235469', + 'reference' => 'ad4f215470c0da087a55d6ee63199988a4d216bd', 'type' => 'project', 'install_path' => __DIR__ . '/../../', 'aliases' => array(), 'dev_requirement' => false, ), 'taoser/think-addons' => array( - 'pretty_version' => 'v1.0.6', - 'version' => '1.0.6.0', - 'reference' => 'e6e35bfd8b93dc469ebb5c5530ba350131bd7541', + 'pretty_version' => 'v1.0.8', + 'version' => '1.0.8.0', + 'reference' => '570367e8d4904842625427f132d23c93f5edfc68', 'type' => 'library', 'install_path' => __DIR__ . '/../taoser/think-addons', 'aliases' => array(), diff --git a/vendor/services.php b/vendor/services.php index e2ad916..11a5640 100644 --- a/vendor/services.php +++ b/vendor/services.php @@ -1,5 +1,5 @@ 'taoser\\addons\\Service', diff --git a/vendor/symfony/var-dumper/Resources/bin/var-dump-server b/vendor/symfony/var-dumper/Resources/bin/var-dump-server index 98c813a..f398fce 100644 --- a/vendor/symfony/var-dumper/Resources/bin/var-dump-server +++ b/vendor/symfony/var-dumper/Resources/bin/var-dump-server @@ -10,6 +10,10 @@ * file that was distributed with this source code. */ +if ('cli' !== PHP_SAPI) { + throw new Exception('This script must be run from the command line.'); +} + /** * Starts a dump server to collect and output dumps on a single place with multiple formats support. * diff --git a/vendor/taoser/think-addons/src/helper.php b/vendor/taoser/think-addons/src/helper.php index b84612b..6646946 100644 --- a/vendor/taoser/think-addons/src/helper.php +++ b/vendor/taoser/think-addons/src/helper.php @@ -317,7 +317,4 @@ if (!function_exists('get_addons_list')) { return $list; } - - -} - +} \ No newline at end of file diff --git a/view/taoler/index/article/add.html b/view/taoler/index/article/add.html index eb5a76b..03c9d34 100644 --- a/view/taoler/index/article/add.html +++ b/view/taoler/index/article/add.html @@ -1,6 +1,6 @@ {extend name="public/base" /} {block name="title"}发表帖子{/block} -{block name="link"}{/block} +{block name="link"} {/block} {block name="column"}{/block} {block name="content"}
@@ -149,13 +149,12 @@ {:hook('taonyeditor')} diff --git a/view/taoler/index/article/ask/detail.html b/view/taoler/index/article/ask/detail.html index 06a2958..af1ac74 100644 --- a/view/taoler/index/article/ask/detail.html +++ b/view/taoler/index/article/ask/detail.html @@ -11,7 +11,7 @@ {/block} -{block name="link"}{/block} +{block name="link"} {/block} {block name="column"}
{include file="/public/column" /}
{/block} {block name="content"}
@@ -183,8 +183,11 @@
{include file="public/menu" /} {/block} + {block name="script"} + {:hook('taonyeditor')} + + +{:hook('taoplyr')} + {//图片点击放大} {include file="/public/images-click" /} {:hook('markdownhook')} diff --git a/view/taoler/index/article/blog/detail.html b/view/taoler/index/article/blog/detail.html index 90fe37c..0205512 100644 --- a/view/taoler/index/article/blog/detail.html +++ b/view/taoler/index/article/blog/detail.html @@ -15,7 +15,6 @@ {/block} {block name="link"} - @@ -287,7 +286,9 @@ {/block} {block name="script"} + {:hook('taonyeditor')} + +{:hook('taoplyr')} {:hook('markdownhook')} + {include file="/public/qr-read" /} {volist name="push_js" id="vo"} diff --git a/view/taoler/index/article/edit.html b/view/taoler/index/article/edit.html index 21d8eea..4655137 100644 --- a/view/taoler/index/article/edit.html +++ b/view/taoler/index/article/edit.html @@ -1,7 +1,7 @@ {extend name="public/base" /} {block name="title"}编辑帖子{/block} -{block name="link"}{/block} +{block name="link"} {/block} {block name="column"}{/block} {block name="content"}
@@ -140,7 +140,9 @@ {/block} {block name="script"} + {:hook('taonyeditor')} + diff --git a/view/taoler/index/article/news/detail.html b/view/taoler/index/article/news/detail.html index 2218afc..b0e2985 100644 --- a/view/taoler/index/article/news/detail.html +++ b/view/taoler/index/article/news/detail.html @@ -10,7 +10,7 @@ {/block} -{block name="link"}{/block} +{block name="link"} {/block} {block name="column"}
{include file="/public/column" /}
{/block} {block name="content"}
@@ -64,7 +64,9 @@ {/block} {block name="script"} + {:hook('taonyeditor')} + +{:hook('taoplyr')} + {//图片点击放大} {include file="/public/images-click" /} {:hook('markdownhook')} diff --git a/view/taoler/index/article/posts/detail.html b/view/taoler/index/article/posts/detail.html index 17dcf06..e1047f0 100644 --- a/view/taoler/index/article/posts/detail.html +++ b/view/taoler/index/article/posts/detail.html @@ -12,7 +12,7 @@ {/block} -{block name="link"}{/block} +{block name="link"} {/block} {block name="column"}
{include file="/public/column" /}
{/block} {block name="content"}
@@ -203,7 +203,11 @@ {include file="public/menu" /} {/block} {block name="script"} + {:hook('taonyeditor')} + +{:hook('taoplayer')} + +{:hook('taoplyr')} + {//图片点击放大} {include file="/public/images-click" /} {:hook('markdownhook')} diff --git a/view/taoler/index/login/login.html b/view/taoler/index/login/login.html index 139b4e4..3167bd4 100644 --- a/view/taoler/index/login/login.html +++ b/view/taoler/index/login/login.html @@ -81,16 +81,16 @@ daType:"json", success:function (data){ if (data.code == 0) { - layer.msg(data.msg,{icon:6,time:2000}, function(){ + notify.success(data.msg,function(){ location.href = data.url; - }); + }) } else { - layer.open({title:'登陆失败',content:data.msg,icon:5,anim:6}); + notify.error(data.msg); layui.jquery('#captcha').attr('src', '{:captcha_src()}?'+Math.random()); } } }); - return false; + return false; }); }); diff --git a/view/taoler/index/public/base.html b/view/taoler/index/public/base.html index b972de6..b00f822 100644 --- a/view/taoler/index/public/base.html +++ b/view/taoler/index/public/base.html @@ -30,6 +30,7 @@ {block name="meta"}{/block} + @@ -53,6 +54,8 @@ {include file="public/footer" /} {include file="public/js" /} {block name="script"}{/block} diff --git a/view/taoler/index/public/user.html b/view/taoler/index/public/user.html index cccfb27..57315f6 100644 --- a/view/taoler/index/public/user.html +++ b/view/taoler/index/public/user.html @@ -20,6 +20,7 @@ {block name="css"}{/block} + {include file="public/header" /} @@ -32,6 +33,7 @@
{include file="public/footer" /}