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
zcmc(_Wl&r}*Dg9ZA!x9K!GcS0_e_upfx%sa!=Pap1}A|83lcmy!5J*LLlRtrPjCzF
z4uc)?o^!tXs!p9-b^qM^>|foh*Rxjby>@r6?sfm?ehEPOMoC!-fPn!3U_3m4`&ocI
z02dnv7Y7>`7Y7#)4;P<+lz`yTBLWIy5<*gHil_uwQZCe}ZH|2OdPF>tZ4aWEe}i1kPT7+9ECSlIYv1elL-9)>&&e-Ps0kv(}X
zfKLw6q+rsqco!QtN=Yp!DyF5a>kjky5dW>RYK-bBvyjLu%Y>i5Sb|xF<>5hz)ys!$
z3W|C;54=E(2a69@|C?D1Oq>U^cn?AWvWHiPg^7)Y|If4kxP|f0DA^P8=K{EzS`?I2
zOoBqfpm(v%7A&tm$luQZ2p`5_l3|envy$*@bt2vryR
z7BIYEXWPiz&|L4a(?Y1q8tBKv#?rT?r+2siu@JbI`{-wYQ>G{8$4QdNA7uXrr6-*I
zAEmdL4Cip};O@5CgW99M#w{~Ay`7!b#RH`pp@+xl=|LXqj(zk}yKt&!AZ)$FI{=`Q9
z1^7y3Hr{pYI4#k;dU#;J;yA+H8Lge7pC*0UwtWxaln}k;9xNGr7^#1y+*iM)W@Bb2
z#n&X)&-u_WlWZCGG=~Q!Xg^S-_qPoD{A;AA1thNiUse96e*1s)|BH;voySK%O~*6Y
z2j$Z^%jT3IQmtSFKU0VyGZXvnWL6l0G^?w2F)WE-X`8isqpO=1halDaH
zeAko|DjGQ8S{)c#($%+I#w{F#K}#(o1MJN}cWhC-e842G$l>J|n}?{!z%oTMLO&G!
zrx!~H`vCwAQjven2XHX$?smr1&8*gGONVd&pPJ?U3#=wp-d
zZw?cDl6&JO5Rq5oTSAB`G?A+k+DBW_X2)=
zETI1g&U6*+ZXJaCbDPX}K708bYqZ(CjUr2RQ4%lLv)zwVHl@vjl3T2j@|Sdfo9LoP
z5k6r$lk|?;=+sGNYl2CuTC_c^ka7Y0@VmQ+5v9vHE7f`RdfSr>~MHV$RDH{Lvy#
z7r)}SjKZ!X_FR*cs<^i8T4#fenUy)Dva|a!F$pQztGLVII!#XRq}9&&JG<*QT-qlQ
z3%~+qAcDPQQpndfG-q?>3p1651+E4~tjHQ0Wwrit=1@g;5Yn5)jm;L%9#3moq-A!h
zN}Qv_-lNHkE-mR28C|w|EJW~<~tnC0em8bdl8^F>l{Z~PHg6pB;G=qU0?
zYOfv$=Ml!ld&3f5j;Eotx6u}4UW$y4i++=m`HaGu4;BLepmZn@w2OJ2m&jGmucYh=
zC(i5>-(BpF?DI;+c-6nYHGh{~mMOR`1ydNFSu#Ti`{yefT<^mJH52aHd%+WIi)2E5^E%r();t{zxzMZz;uyS>CmJ}n#E2e~)whoUfTc=$~
zu3XbU{npy!R~{XE(np>d=i=|0gjO10m1Sk9z&1~bdg`1}MWsp_adixV*Y<1BRx
zHOpF2bYCi!5#{RCnF`}ll#buYi^2KXgh+_xAy%vBk#W<$ecZCm=q)*?mbHb}3SeD;
zfBEru>mAA;9shGsYB&Ndol$P&vy_jf_8tL0OZ%|R&)T09QP7y^nn~{^DVp?NG;G}a
zfI|eIE$&$giVE2V@M3nZ|5h
z0$5x<*@e!Rjz|m>d|6_f>}cM0HW`f3k7jUY~1d(73#VOk%Fcd9*|WK+^b}Z{$>BxikD-YSM|1
zj|k)VJ>Zi|de=y*MF^)
zR~Ho$DmHB@8tmIXwOL#GJagKo;rr&AqU)}$G5T_^2@3U^3-peCuSpie(W2(mz&~63
z7qj5+z9R$?b`S6!I?3te3e}2C5{pk_s_bx$AsG`a9Q7X9=Az&HVY`R>erK|9>WhkV
zkD;PtH}!?7W693j#L+sLuPUA%^i+ukwI_WGT?e(ldl;4#tWFS>zI(8vo=Xk4$z#9D
z4rSq}rnzuOTEvOJIS!>Ut?)an5TxK636Z3Ur^j&{JpQH-p<)K0(evrOy1IsKlG@jb
z<=F)kIusM7u=M9qm7(=J?mhg7SB=}jHD
z={za?I;Dqu?LAv7C65lW#{$Jt1Mm6@gUB{C)IFgBE;XZ?wbz#ThV)aZ&i2BSI*5lE
ziGW}>J)oCz5mT;Va`6&&Wa3$IMa1L5V~~e58@SFSDeQ0qdkb5BC$ArVrF>0IU2O0h
zc{NmIYQr&9raZh6AY6=%Z{7>g#SXZn&;_3)keP
zhku>O00-t}bQ|sgUjhky|8>rsd{1+sEv}uIHRg%z`eV~c?9j}EDs-Q))^<-lZ=Szc
z9cnDR@z1QwRb079O7?GB`omk@;|XW569chJJbHJuS=VqbvN2bS
zZ>8@SEGCtbgUoBiiEw-AwAk
z+a~1(ymN0mPsMqkPk?P-5$Ox@By)EYm*rHpR4udp7F}lRPP?st#ntYkw{F(Hqka$g
z+K4q)EqGmf4>-YN+?lf8e~ZG6n0}`5Y+IrB6WU8e5q``3E(CpM3KLl4MY^ui$Oa5f0`rg-LzYLCBM;mgwKT@(xEj$Z
zhJ?Pl#8?hJpyI1hEscJ{&i%`KKt^E7(@+i}a{IuT&sV6cFSr`E&*!I)?g5ey%q*pC
z427A|Js@>GPvrAYvAv#kwQj(R(;OKJO$nQVVFW8Yq4|MU%80zI@
z#GA_Ywt(8mE`cdSZF;rQdc6xe@Mxpo-K5pT@Qa1p4*Jk31S@z{!rZZP+YHjJSXbS!
zEgRJ*k>syn)X0!`4~QRC#w7}mQ`(##ZrNPlY@mZSIrgO%!+orEsp^Vb9g!2xPp0>p
z8g26_O&S)KF1HFjtn0xdAEO^PjU3G6(lZsi8)c*=nynPjgw;*$+!bq{x)`@Zd(K2!
z(%RH34`(Tw+*-bextgHsYN1!9>l+=jkzV>Nel6d7?O2v9;Q2hGs$3H@tTW_Y4I+(96
z?;h9RHs#bsL+Y!YdMv~D#~y!F3)@CG6YX6KUyV}btibChZnWDv8M1!gTD7n~dx2oN
z2TcF@ylQbx|D{WoD~4VbVi}>|!?XRT@2RH=N>>SAMgbbkkZ2INIIDjWdo?1*_5JW3
zu;FYz4Bi0goNQMmH4Bum2XdwxDKvJ;27YW5-HDJJgVb_r&G@k%HFWw`mOq)_$FF6Kh$O8M=4eR-W
z)AXLeh2aWkyEs-Ijqk=-qRf8p18tvlQg|hOI!n+{riFONoJL`3iQks!rhJA`wGnKT
z?De!OUM@U8fH|E<9r49S_${gv$-c&t+$SpT;wgxXiZD1=%bcG5eO|uNkz|`DWO6sx
zR$(dx3n4q+O0~eiPX2OT`M;xm@gdloNAFg=U03I4xG9C$d(tYbZ=Ss8bmMO{y
zW{mZCh%*)#Y~Z7oW_Ks3ai0t+hrE?CG#+^+=xQjI8fW2c=-4WAJj04`WUg;YzoQT}
zgto{#=2b}^$apZ#O~KOdP*AYfX^vCTbVUsEUDr;!?Sx(f$)$bx;$e(Go;uHW8yDfW
zs<=$C2=P<60@}0GRj<_sXRy+!_(c-Z(Z7kU3xb7ZG<91fgRP{Y9eH=I*>n#`zQBwt
zzhJuuSog|8*iSW#KQ!v-59^%Ej*a_;x3_E?st?sHRxSt|ygYxLP?t7I^y}+gYO3v<
zg}c5zuiiei!-Q?&E1n1b8Sq7M_SE9c_x0d|&rQK7p&@)TD&MHQ&@
z;L--u9qwnoA)>#z^9ThpW->H9?g3&x2Z7mWF{Z4vE=2ptE%1xN!(vaQ{IQbdJRJE<
zn+4+7*c~J?!PHX1gVAKh!L#StfkZNYl$zNSCkm*21lfr1@=UAv?r`Lyi_y2xy!b~p
zsyC8e?QAAs?){~~UnnA##Ar-R43M!<{QufJH{Sz@1Gu9n
z?*Y&AqjtVQyVyLHkYS0$@QJ{a*ERb?S4yft94NiEy+@u_)KKBPSfL9>UNpa
z!mia_*y^;3yBm{g_*gldh>mfkP6O>RoK27wxd%))O)
zq}L;g4@fexE5Mlt*~m0vZ=y)(@k=Z#GE;O}520inMS=Zut*ovcVP+1cDCrtlLX(_VbH_?50<=3opL7c)0A~P-+MParEAnjN~HYB)0zIjP#GU
zcC<+n1e=R-p^VdBZWl*AHn005I{X7+Kxbc;#>20uC)S+mRcK8yl2M!|>Fh9p_l9d>
zSyjU2*LfJv`B!W=ey9neaU*|Nh9#G}p@>P4^j~ah{m9}>~%sw*&&Dv3ZJ@GqdYBTNxCebfeQ)fbIMdF3IIZoE#K
zy^o_KfTAEIGglBMhL)n!u(>tCJ>Ubw+~ZS{|BA30YH^It{l|f(nyRim&H`Ohuk?O2
znr!#xRJ2PBhR;`Xrgh#h-%>v>-Z>#3sJyNJW2B=`i+IviH||*7Q3+OtsLl(s2xI!O
zN38Rjw+57LrzGvqr|DVc*34Y{`fBQ`lIV+1Mou@&75ls!S-1ZFMkH!C@WV`nL{5|M
z&(@|4p8-fy>!;cTo$=uP*r4j1vl+=QV;((c6i`(}s?K1!e=nEvMM50ILXiA9-J;gC
z!IXPh;4I=N;!RIQjc{|f`cx;XZPKhSRKdO8`f_T$Cp@=y#%KV|syP)7ue!!CS?P*Z
z_Q~_`m?%sqmZshRlv!A2)Ep%|lUZfqFiwpqmtuEbEeTo`4b@beWhUHfk5G~JEHXz!
z<7*l5g7LD@yrCVJegos4MO#F~)v+DwI2?Rsh=jp`uZx~~_KZw#RC--aDFfN=mKt5j
z{Zj*zPL!_0H+i2=2BhE%6oHm3P0X!2zDTOnc0YYh6ZUh)`w$RB-1F>8SA#YGS3*Ii
z4E}Co4eW-;72_=D+sqr|eZFRi5k*5-MaFz}EuZAYZ$J<@{`ouR7eUokoLR;N1(6;k
zpT=~^S`HW7$`-*9CC+|ob4sO%DBXGfw@&EN!u4VSC%Smj(bi;qqAz}IhjLnB8HZDx
z)hm(~A~|g|AI3&}EtUylVBg5T1f|>E1F8~dZ`vCu^bzrhDknL%WHe(vNXIIlEJM@O
zF&1-PyMowx(USWFtv)4JqDyJz&3-rBX$~a$bNW#|B9{Xn2S;X&s9l&F-Pmxq9oJX9
zq+KA|aSu4am)jNr`O+x$E>Kz)r{_8q%zhQr?Vf*L5nfG%yH_S^dRA|qp`D>5r6%bwL<_Vx~Gfz6$hz0vLL5Bh_Bj
zuxETsH<#Yw)NGbzZt!E<2qJ2vv>|=fjyyWT^_b0#SNHbW`q~1AvDb*sbqrcL6#3V6
zK1GM@$Jx0>o?(pXRj7>Gu}ReXiatxt5ZwrxVQn-oM{%m`lx(xI=ejCghOAAkE*Vw=
zwN*gAf@{+=HtWzm<%t~>61_4>HbXDn-!hLhj&f$6K|`CuK6^R6es#6KJkv<$U<29S
z%2+Xm#|sJIG!9yy^cdo=OsCCy%irzj#xLLaR<;V%wCzad?*!_cDjT>8zqo*em3VG)
z(KXwuO*dVn%OTf~YhHY25LP;zU)iqP|4mr`$0j0&|I*qiQku4-h+9QhL|evK9GTiI
z+hO!*#8oq1hTsj8$*+O5vi&`o;fN~Ec}9Rd~ZDefa!4SJ$wCXe1M
zxe~j;8SqNm9lxnh6`NC+5Bj&Wzziy1@3vg2{=A>00=LS}53(X>&X1{gTW&d!<)PFo
zv>ouXi-2O^25XEypPUpa|8unGxv0fu@be~XlT#J80=<~(6+4&4vXsL>ke@NJNwG#u
zTjkrx6hsghqzaF*ZK{7fl9OZ}AH|Cg?5HaRy>Zw-)tFQQQ%C>tA|VZW+SQWfuptNu
z;pHuqR+Q0qSxo8hI-(%coyAyHW!9d?jHu#?+AGR^=k<`Qws^&A>AhZ8Vr{bQcarms
zO(cEYlj*MKz^r1VPB(A*`o+tou)>sU;IRGtYpbwZ`dhj8jQhv$qV@(GlpU}t^X|fU
z8eWd#5gC7W$bTUzXT7_H$|1;AH7XPX;Zwfozbj$B5S)3%DsDS$>+_>aw8wB
z2ad0!XtXGmF%?-LSLgAFgjphxjz+{MliM-jk5satOx5N^FsFr*A^axK=NUIsgOyv=
zwat*tha6G9ItICSI(juCLpUt|!!#gOPLc$7C)w~bq6}`@KWeD0wS*C;Y{l~79`GbG
zUAWOa#sO+sR9LCgBdz{K>4?Rr_Qy5}Qp0H-mEM!Hb$S%Qs=2msC~CJjsC48~TC)Cu
z>?B@sX6Hehd+;>3N0Mw4dl5ptqB9SzI+jWh7ahmh&zQKtw;&sM22)Fu3OQ;H3G1q2
zWMrhEtd{T(MET+0t?F;m)86O>g(z&EX>dCrZx3AR!r1L)|}Mh7Zl7A
zhzrOXqnH?T4Kq##ma|Gw`E3zMl5z)jq
zyB{_SkE>IvKtxpc-uU(tO1RY;XBfZBdUFlx$m}l)g^DuAhaFLSS6Qf^i
z5-&*zTg_(KH?j{IHs|l}ORFWHInVq8*F)M$B}`I+!5jp%>fgipze^w=DB
z9tn5WmQ3M%pRbFYfJ9q$zi!s56Q5~=#1s_v1Y!IkSqbwWCv_5gE0bJJsA)7#(I(BZv{WZT;xr@s$Ik
z?{8{Je&v@TL2-C{9V*za=Yx@$!8H%ZWP~1!-C?C4l{{X)1O<`$6_rMF2qBAHUZQ>k
za|Cg`f3Kl8xOR3A_;)t&0dYrn1Ewnh--O)8CkmMIo7$AW63vBu1s^s*WyflaCWY*H
zdF34obg4^+YQPaM#+R=gmy?txCs@GAv=Za9I8sJZ5`lGEh01
zH*rS%bg7o3pd-9|igRG^%+*Sz*285l^?+uZZ_87VW4WBh_t{06y7HR_M=?(J>5vPo
z;=jwo-=T|-woQiZLS2lnO3y-e7<40=Oq8j15?P1S)#Wwm6xcl{?Cg0x&psz@gp^0s
zHrJr0=zb`b5Y_ppc2BFBhM4@)t(I(C(Rz&ekhZHouno4cL9mdJyr~YGc`Wv8vIJ;hrsFTKR
zeqHUXp*>Z*3qfI7rD9OywVb3i*MNBud8`>9uz}2B*r~=N
z08~StRyiZtNcu-n!M7x8gQXHuDi~wqki#@AxcTPQV={;^oF6RAOA@UVTHEmf8%jXz
zj7h>wfo9>qg_XKG@((8#nmhNuek8ph{8I=>L;;*
z=MF2C!H1u8e~AfI4abfLiA-*U?B~%eD6N=if3`1iF$j7Cdxe7W<1Z8Px-D#YiERey
z{kvr4dR>+>uygmH>x_RX+1*1*)^`0Z`7-5??KwNMk%O;tswCL_BVVrm_$t@b=|yNX
zuFmS*;%R2NXNjm_%`bFFRSq>#QNG1q+LGMWPq%Y-z9rMIxp_@#NxSQ_D_}9d?BXZM
zMkQZ2(a(fD+^&9YzPnK&8`~A3K8?DY?LW=$q+duLFgNc^qNiVPI@`UHk(wKaS2zN%
zhdx66Z2S;6kQ!$f`g38!)b`#u{sqcfi_LTAiJ>Q1x}t&+;ZRO_c({M^`^ResxD~9@>I?hq{f}x-~zl#WBDTX8I5Ef-J?qx
zmCCVGdX&4>J%IN7Tk*lMp~9#AFUjI@D{z^!DdU_}W~dR}x}jMl;_WF{T60}Hc4K#5=+>%D^fB*d2~g|Q3r2~2`ur@G&%;`abj{p~x))TD2PEm8)v=MO7C3EShN
zXvcEeV$T?d-LSMJDZaZ2*0)Wu&p?Fkxo0V$E;}
zj5;IVh_u9IxxC(vcW!LO2M?Llx}Hz(;NwJZAcV6TQj;LI^DME!T8SA*Y43tn$xhdB
zV~pGuw_&yCxJI|=8un?$l8Vx-A9qsw@?eDBjlc1(zuCM$my@O~)zif6&!s#E;-mpx
zhidW3s(U}sw`+Do9fm1SZ4>h%jwH4}<@b-~tm(@s_37o?GB<0r*-=2OrtRvJ+b^s$
zW=KelO>HmN)QQU?
zx-hr)9ZgbD6q(5v2&;5dTqd~lJVXAg=j$UrU|mt8+N3-eudc#@YJI6#
z%0-EW6Fk565bJJa^HBE5h|OidNmaIvhOXTkvfZ^X>eQ2jfkrny^>r^v+YUL
zOMcy>g$f3m5pT$3=EdMozP7A=%*Y{3dr&<-U$t^DO|-X_16Or9FSkeSEJcJ#@ER5)
zkBG)rrR3Lh!^=W1Rl+B7N|%%bA4(}6YAIM=Jv*`UfKSxhcSO32rN*lTiBtZ$bmg;8
z6I?&@We}rfdfRl1-rZOaRL$;P(r)Z}LDqr5UJmwt3l&kLflPCqzs^X(myIBN_$?lQ
z!{#Yfup3d;mbs|!k@BfEZmIX|ylm?ztJuwqvHx?u_d7IPQYIxQljVEk)Y1FwK1nXF
z^FWl&ipj5nD$O3|<$R*|R8g}od+7n+Wv!niQmMQ>*Zk2R@r)&-)IN5_j;PR~B_}uX
zWPsa+zH-du`x;ABR5eWdyUg#oB@fTL%kevwC*`jfty`C9=zC{(Q#Jn_J4Zd5UJ8JV
zD!=9mvrD*UU?a|Ua`K&@etTYqx_A>YB6uRs_UoxFQ10*FNn7^TxdUq|$Kvfj9AZuq
znJ_cgscXmYo!r%9xy6=#89h{t-*43h0=6ED^70Om;fMmUw)CvgVLa&ahIx*|Oh!wSSorqeYJRRty*7l$e3bm18~
z$c_<2U9a}D!no>zwq0m8hr=V&E7tGnUi!j8zj!9(KhepJ*5ZxZJJ2kxYyCipc`@x-jC7}s8cj@LtpXhrB=
zi(BLtd{{fw?gIXPGWA{q7V=)0meg%XSzQ9x-s(#<(3yC=J2;MGnjDMS%HZe7Xg26P
zczM_HkI{Lk@IGS{2-Jh~f&zUmO{Q4eW04IF&iGgSh5?AufS1@Wm46tSROqvG8>wB@
zsH%4_fpsZ-Z*)nE?a)?kurZ@YzVpx=Qd@0*y*P83G&9_o=y=g=4pXT#HwewzlCj(G
zuXt(>?)2tkfXA`3%j&&G@s(tm!wZeAEq_%S*b+S6+O)5Q+aU(cjGfE()HTQdiy)
zgHL+>@&m{DX7+8#*zPw~JXH^?B7qsou$RuGbXOl8(JSx!vge(pHEp+8$TIcH3|XIM
zR$rLvN3wT%bMHHX^Krfg?n7HF9@Mnwrpz)*Uhwa=*{ZNgAu|`kGinx}9JZIOnH7fm
zXHIzxh$2^95>Ah_JO3 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}
|
{include file="public/header" /}
@@ -32,6 +33,7 @@
{include file="public/footer" /}