优化sql
This commit is contained in:
parent
91bd9d28c2
commit
27daa029f4
@ -50,8 +50,7 @@
|
||||
|
||||
|
||||
{include file="public/user_login" /}
|
||||
<script src="/static/component/layui/layui.js"></script>
|
||||
<script src="/static/component/pear/pear.js"></script>
|
||||
|
||||
|
||||
<script>
|
||||
var addonList = "{:url('addon.addons/getList')}";
|
||||
@ -74,7 +73,7 @@
|
||||
{field: 'author', title: '作者', width: 100},
|
||||
{field: 'price', title: '价格(元)', width: 85},
|
||||
{field: 'downloads', title: '下载', width: 70},
|
||||
{field: 'version', title: '版本', templet: '<div>{{d.version}} {{# if(d.have_newversion == 1){ }}<span class="layui-badge-dot"></span>{{# } }}</div>', width: 75},
|
||||
{field: 'version', title: '版本', templet: '<div>{{d.version}} {{# if(d.have_newversion == 1){ }} <span class="layui-badge-dot"></span> {{# } }}</div>', width: 75},
|
||||
{field: 'status', title: '在线', width: 70},
|
||||
{title: '操作', width: 165, align: 'center', toolbar: '#addons-bar'}
|
||||
]];
|
||||
|
@ -327,7 +327,7 @@
|
||||
const v = layui.v;
|
||||
|
||||
|
||||
layui.use(['form','layer', 'echarts', 'element', 'count','toast'], function() {
|
||||
layui.use(['form','layer', 'echarts', 'carousel', 'element', 'count','toast'], function() {
|
||||
let $ = layui.jquery, form = layui.form,
|
||||
layer = layui.layer,
|
||||
element = layui.element,
|
||||
@ -335,6 +335,7 @@
|
||||
echarts = layui.echarts;
|
||||
let toast = layui.toast;
|
||||
let table = layui.table;
|
||||
let carousel = layui.carousel;
|
||||
|
||||
$('.UI').append(v);
|
||||
|
||||
@ -342,21 +343,21 @@
|
||||
time: 4000,
|
||||
num: {:hook('seoBaiduTongji',['name'=>'tpv']) ?: 0},
|
||||
bit: 0,
|
||||
regulator: 50
|
||||
regulator: 50
|
||||
})
|
||||
|
||||
count.up("value2", {
|
||||
time: 4000,
|
||||
num: {:hook('seoBaiduTongji',['name'=>'tuv']) ?: 0},
|
||||
bit: 0,
|
||||
regulator: 50
|
||||
regulator: 50
|
||||
})
|
||||
|
||||
count.up("value3", {
|
||||
time: 4000,
|
||||
num: {:hook('seoBaiduTongji',['name'=>'tip']) ?: 0},
|
||||
bit: 0,
|
||||
regulator: 50
|
||||
regulator: 50
|
||||
})
|
||||
|
||||
count.up("value4", {
|
||||
@ -609,7 +610,7 @@
|
||||
$.get("{:url('system.upgrade/check')}",function (data){
|
||||
if (data.code === 1) {
|
||||
//可升级
|
||||
layer.confirm('发现新版本V' + data.data.version + ',确定升级?',{icon: 3, title:'系统检测'}, function(){
|
||||
layer.confirm('发现新版本V' + data.data.version + ',确定升级?', {icon: 3, title:'系统检测'}, function(index){
|
||||
var loadIndex = layer.load(0);
|
||||
//更新
|
||||
$.get("{:url('system.upgrade/upload')}",function (res){
|
||||
@ -621,7 +622,7 @@
|
||||
}
|
||||
return false;
|
||||
});
|
||||
|
||||
layer.close(index);
|
||||
});
|
||||
|
||||
}
|
||||
|
@ -23,21 +23,21 @@
|
||||
<label class="layui-form-label">邮箱</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" name="email" value="{$user.email}" lay-verify="title"
|
||||
autocomplete="off" placeholder="请输入标题" class="layui-input">
|
||||
autocomplete="off" placeholder="请输入邮箱" class="layui-input">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">密码</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" name="password" value="" lay-verify="title" autocomplete="off"
|
||||
placeholder="请输入标题" class="layui-input">
|
||||
placeholder="请输入密码" class="layui-input">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">电话</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" name="phone" value="{$user.phone}" lay-verify="title" autocomplete="off"
|
||||
placeholder="请输入标题" class="layui-input">
|
||||
placeholder="请输入电话" class="layui-input">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
|
@ -25,14 +25,26 @@ use app\BaseController as BaseCtrl;
|
||||
class BaseController extends BaseCtrl
|
||||
{
|
||||
|
||||
protected $uid = '';
|
||||
/**
|
||||
* 登录用户uid
|
||||
*
|
||||
* @var int|null
|
||||
*/
|
||||
protected $uid;
|
||||
|
||||
/**
|
||||
* 登录用户信息
|
||||
*
|
||||
* @var array|object
|
||||
*/
|
||||
protected $user;
|
||||
|
||||
/**
|
||||
* 初始化系统,导航,用户
|
||||
*/
|
||||
protected function initialize()
|
||||
{
|
||||
$this->uid = Session::get('user_id');
|
||||
$this->setUid();
|
||||
//系统配置
|
||||
$this->showSystem();
|
||||
|
||||
@ -46,21 +58,20 @@ class BaseController extends BaseCtrl
|
||||
|
||||
}
|
||||
|
||||
//判断是否已登录?
|
||||
protected function isLogged()
|
||||
// 用户登录
|
||||
private function setUid()
|
||||
{
|
||||
if(Session::has('user_id')){
|
||||
$this->success('您已登录','/index/index/index');
|
||||
if(Session::has('user_id')) {
|
||||
$this->uid = Session::get('user_id');
|
||||
}
|
||||
}
|
||||
|
||||
//判断是否需要登录?
|
||||
protected function isLogin()
|
||||
{
|
||||
if(!Session::has('user_id')){
|
||||
$this->error('请登录','/index/user/login');
|
||||
}
|
||||
}
|
||||
private function setUser()
|
||||
{
|
||||
if(Session::has('user_id')) {
|
||||
$this->uid = Session::get('user_id');
|
||||
}
|
||||
}
|
||||
|
||||
// 显示子导航subnav
|
||||
protected function showSubnav()
|
||||
|
@ -10,6 +10,14 @@ use think\response\Json;
|
||||
|
||||
class Arts
|
||||
{
|
||||
|
||||
/**
|
||||
* 数据内容
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $content = '';
|
||||
|
||||
//显示网站设置
|
||||
protected function getSystem()
|
||||
{
|
||||
@ -19,11 +27,17 @@ class Arts
|
||||
}
|
||||
|
||||
//域名协议转换 把数据库中的带HTTP或不带协议的域名转换为当前协议的域名前缀
|
||||
protected function getHttpUrl($url)
|
||||
{
|
||||
//域名转换为无http协议
|
||||
protected function getHttpUrl($url)
|
||||
{
|
||||
//域名转换为无http协议
|
||||
$www = stripos($url,'://') ? substr(stristr($url,'://'),3) : $url;
|
||||
return Request::scheme().'://'. $www;
|
||||
$htpw = Request::scheme().'://'. $www;
|
||||
return $htpw;
|
||||
}
|
||||
|
||||
protected function getDomain()
|
||||
{
|
||||
return $this->getHttpUrl($this->getSystem()['domain']);
|
||||
}
|
||||
|
||||
//得到当前系统安装前台域名
|
||||
@ -305,10 +319,10 @@ class Arts
|
||||
{
|
||||
$filename = pathinfo($url, PATHINFO_BASENAME);
|
||||
//$dirname = pathinfo(parse_url($url, PHP_URL_PATH), PATHINFO_DIRNAME);
|
||||
$dirname = date('Ymd',time());
|
||||
|
||||
$uid = session('user_id') ?: $userId;
|
||||
//路径
|
||||
$path = 'storage/' . $uid . '/article_pic/' . $dirname . '/';
|
||||
$path = 'storage/' . $uid . '/article_pic/' . date('Ymd',time()) . '/';
|
||||
//绝对文件夹
|
||||
$fileDir = public_path() . $path;
|
||||
//文件绝对路径
|
||||
@ -338,8 +352,9 @@ class Arts
|
||||
//下载网络图片到本地并替换
|
||||
public function downUrlPicsReaplace($content, $userId = 1)
|
||||
{
|
||||
$this->content = $content;
|
||||
// 批量下载网络图片并替换
|
||||
$images = $this->getArticleAllpic($content);
|
||||
$images = $this->getArticleAllpic($this->content);
|
||||
if(count($images)) {
|
||||
foreach($images as $image){
|
||||
//1.带http地址的图片,2.非本站的网络图片 3.非带有?号等参数的图片
|
||||
@ -348,13 +363,13 @@ class Arts
|
||||
//下载远程图片(可下载)
|
||||
$newImageUrl = $this->downloadImage($image, $userId);
|
||||
//替换图片链接
|
||||
$content = str_replace($image,Request::domain().$newImageUrl,$content);
|
||||
$this->content = str_replace($image,Request::domain().$newImageUrl,$this->content);
|
||||
}
|
||||
}
|
||||
//不可下载的图片,如加密或者带有参数的图片如?type=jpeg,直接返回content
|
||||
}
|
||||
|
||||
return $content;
|
||||
return $this->content;
|
||||
}
|
||||
|
||||
}
|
@ -170,17 +170,14 @@ class Article extends Model
|
||||
public function getArtHot(int $num)
|
||||
{
|
||||
$artHot = $this::field('id,cate_id,title,create_time')
|
||||
->with(['cate' => function($query){
|
||||
$query->where('delete_time',0)->field('id,ename');
|
||||
}])
|
||||
->withCount('comments')
|
||||
->where(['status'=>1,'delete_time'=>0])
|
||||
->whereTime('create_time', 'year')
|
||||
->order('comments_count','desc')
|
||||
->limit($num)
|
||||
->withCache(120)
|
||||
->append(['url'])
|
||||
->select();
|
||||
->withCount('comments')
|
||||
->where(['status' => 1])
|
||||
->whereTime('create_time', 'year')
|
||||
->order('comments_count','desc')
|
||||
->limit($num)
|
||||
->withCache(120)
|
||||
->append(['url'])
|
||||
->select();
|
||||
|
||||
return $artHot;
|
||||
}
|
||||
|
3
app/index/controller/.gitignore
vendored
3
app/index/controller/.gitignore
vendored
@ -1,2 +1,3 @@
|
||||
Api.php
|
||||
Works.php
|
||||
Works.php
|
||||
Shop.php
|
@ -468,11 +468,14 @@ class Article extends BaseController
|
||||
public function download($id)
|
||||
{
|
||||
$zipdir = Db::name('article')->where('id',$id)->value('upzip');
|
||||
$zip = substr($zipdir,1);
|
||||
Db::name('article')->cache(true)->where('id',$id)->inc('downloads')->update();
|
||||
//删除缓存显示下载后数据
|
||||
Cache::delete('article_'.$id);
|
||||
return download($zip,'my');
|
||||
if(!empty($zipdir)) {
|
||||
$zip = substr($zipdir,1);
|
||||
Db::name('article')->cache(true)->where('id',$id)->inc('downloads')->update();
|
||||
//删除缓存显示下载后数据
|
||||
Cache::delete('article_'.$id);
|
||||
return download($zip,'my');
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// 文章置顶、加精、评论状态
|
||||
|
@ -18,6 +18,9 @@ use think\facade\Db;
|
||||
use app\facade\Article;
|
||||
use app\common\lib\Msgres;
|
||||
|
||||
use addons\pay\controller\AlipayFactory;
|
||||
use addons\pay\controller\WeixinFactory;
|
||||
|
||||
class Index extends BaseController
|
||||
{
|
||||
/**
|
||||
@ -29,15 +32,11 @@ class Index extends BaseController
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
// $ip = file_get_contents('https://myip.ipip.net');
|
||||
// echo "My public IP address is: " . $ip;
|
||||
$types = input('type');
|
||||
//置顶文章
|
||||
$artTop = Article::getArtTop(5);
|
||||
//首页文章列表,显示10个
|
||||
$artList = Article::getArtList(10);
|
||||
//热议文章
|
||||
$artHot = Article::getArtHot(10);
|
||||
|
||||
$vs = [
|
||||
'artTop' => $artTop,
|
||||
|
@ -42,9 +42,8 @@ class Login extends BaseController
|
||||
// 检验登录是否开放
|
||||
if(config('taoler.config.is_login') == 0 ) return json(['code'=>-1,'msg'=>'抱歉,网站维护中,暂时不能登录哦!']);
|
||||
//登陆前数据校验
|
||||
$data = Request::only(['name','email','phone','password','captcha']);
|
||||
if(Config::get('taoler.config.login_captcha') == 1)
|
||||
{
|
||||
$data = Request::only(['name','email','phone','password','captcha','remember']);
|
||||
if(Config::get('taoler.config.login_captcha') == 1) {
|
||||
//先校验验证码
|
||||
if(!captcha_check($data['captcha'])){
|
||||
// 验证失败
|
||||
@ -55,8 +54,7 @@ class Login extends BaseController
|
||||
//邮箱正则表达式
|
||||
$pattern = "/^([0-9A-Za-z\\-_\\.]+)@([0-9a-z]+\\.[a-z]{2,3}(\\.[a-z]{2})?)$/i";
|
||||
|
||||
if(preg_match("/^1[34578]\d{9}$/",$data['name']))
|
||||
{
|
||||
if(preg_match("/^1[34578]\d{9}$/",$data['name'])) {
|
||||
//手机验证登录
|
||||
$data['phone'] = $data['name'];
|
||||
unset($data['name']);
|
||||
|
@ -3,7 +3,6 @@ namespace app\index\controller;
|
||||
|
||||
use app\common\controller\BaseController;
|
||||
use app\common\validate\User as userValidate;
|
||||
use think\exception\ValidateException;
|
||||
use think\facade\Db;
|
||||
use think\facade\Request;
|
||||
use think\facade\Session;
|
||||
@ -13,7 +12,6 @@ use think\facade\View;
|
||||
use app\common\model\Article;
|
||||
use app\common\model\Collection;
|
||||
use app\common\model\User as userModel;
|
||||
use app\common\model\Comment;
|
||||
use taoler\com\Message;
|
||||
|
||||
class User extends BaseController
|
||||
@ -50,7 +48,7 @@ class User extends BaseController
|
||||
$res['data'][] = ['id'=>$v['id'],
|
||||
'title' => htmlspecialchars($v['title']),
|
||||
'url' => $this->getRouteUrl($v['id'], $v->cate->ename, $v->cate->appname),
|
||||
'status' => $v['status'] ? '正常':'待审',
|
||||
'status' => $this->artStatus($v['status']),
|
||||
'ctime' => $v['create_time'],
|
||||
'utime' => $v['update_time'],
|
||||
'pv' => $v['pv'],
|
||||
@ -62,6 +60,23 @@ class User extends BaseController
|
||||
|
||||
return json(['code'=>-1,'msg'=>'无数据']);
|
||||
}
|
||||
|
||||
// 文章状态
|
||||
private function artStatus($status)
|
||||
{
|
||||
switch ($status) {
|
||||
case 1:
|
||||
$res = '正常';
|
||||
break;
|
||||
case -1:
|
||||
$res = '禁止';
|
||||
break;
|
||||
default:
|
||||
$res = '待审';
|
||||
break;
|
||||
}
|
||||
return $res;
|
||||
}
|
||||
|
||||
// 收藏list
|
||||
public function collList()
|
||||
|
@ -1,8 +1,11 @@
|
||||
<?php
|
||||
|
||||
namespace app\middleware;
|
||||
|
||||
use think\facade\Log;
|
||||
|
||||
/**
|
||||
* 浏览记录日志中间件
|
||||
*/
|
||||
class Browse
|
||||
{
|
||||
public function handle($request, \Closure $next)
|
||||
|
131
composer.lock
generated
131
composer.lock
generated
@ -379,16 +379,16 @@
|
||||
},
|
||||
{
|
||||
"name": "firebase/php-jwt",
|
||||
"version": "v6.9.0",
|
||||
"version": "v6.10.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/firebase/php-jwt.git",
|
||||
"reference": "f03270e63eaccf3019ef0f32849c497385774e11"
|
||||
"reference": "a49db6f0a5033aef5143295342f1c95521b075ff"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/firebase/php-jwt/zipball/f03270e63eaccf3019ef0f32849c497385774e11",
|
||||
"reference": "f03270e63eaccf3019ef0f32849c497385774e11",
|
||||
"url": "https://api.github.com/repos/firebase/php-jwt/zipball/a49db6f0a5033aef5143295342f1c95521b075ff",
|
||||
"reference": "a49db6f0a5033aef5143295342f1c95521b075ff",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@ -436,9 +436,9 @@
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/firebase/php-jwt/issues",
|
||||
"source": "https://github.com/firebase/php-jwt/tree/v6.9.0"
|
||||
"source": "https://github.com/firebase/php-jwt/tree/v6.10.0"
|
||||
},
|
||||
"time": "2023-10-05T00:24:42+00:00"
|
||||
"time": "2023-12-01T16:26:39+00:00"
|
||||
},
|
||||
{
|
||||
"name": "guzzlehttp/guzzle",
|
||||
@ -711,21 +711,21 @@
|
||||
},
|
||||
{
|
||||
"name": "jaeger/g-http",
|
||||
"version": "V1.7.2",
|
||||
"version": "V1.7.3",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/jae-jae/GHttp.git",
|
||||
"reference": "82585ddd5e2c6651e37ab1d8166efcdbb6b293d4"
|
||||
"reference": "035fe0ff6e3e0390769647ce14694875bf02cf22"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/jae-jae/GHttp/zipball/82585ddd5e2c6651e37ab1d8166efcdbb6b293d4",
|
||||
"reference": "82585ddd5e2c6651e37ab1d8166efcdbb6b293d4",
|
||||
"url": "https://api.github.com/repos/jae-jae/GHttp/zipball/035fe0ff6e3e0390769647ce14694875bf02cf22",
|
||||
"reference": "035fe0ff6e3e0390769647ce14694875bf02cf22",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"cache/filesystem-adapter": "^1",
|
||||
"guzzlehttp/guzzle": "^6.0 | ^7.0"
|
||||
"guzzlehttp/guzzle": "^6.0 || ^7.0"
|
||||
},
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
@ -746,9 +746,9 @@
|
||||
"description": "Simple Http client base on GuzzleHttp",
|
||||
"support": {
|
||||
"issues": "https://github.com/jae-jae/GHttp/issues",
|
||||
"source": "https://github.com/jae-jae/GHttp/tree/V1.7.2"
|
||||
"source": "https://github.com/jae-jae/GHttp/tree/V1.7.3"
|
||||
},
|
||||
"time": "2021-08-08T04:59:44+00:00"
|
||||
"time": "2024-03-24T14:55:49+00:00"
|
||||
},
|
||||
{
|
||||
"name": "jaeger/phpquery-single",
|
||||
@ -1013,16 +1013,16 @@
|
||||
},
|
||||
{
|
||||
"name": "league/mime-type-detection",
|
||||
"version": "1.14.0",
|
||||
"version": "1.15.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/thephpleague/mime-type-detection.git",
|
||||
"reference": "b6a5854368533df0295c5761a0253656a2e52d9e"
|
||||
"reference": "ce0f4d1e8a6f4eb0ddff33f57c69c50fd09f4301"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/b6a5854368533df0295c5761a0253656a2e52d9e",
|
||||
"reference": "b6a5854368533df0295c5761a0253656a2e52d9e",
|
||||
"url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/ce0f4d1e8a6f4eb0ddff33f57c69c50fd09f4301",
|
||||
"reference": "ce0f4d1e8a6f4eb0ddff33f57c69c50fd09f4301",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@ -1053,7 +1053,7 @@
|
||||
"description": "Mime-type detection for Flysystem",
|
||||
"support": {
|
||||
"issues": "https://github.com/thephpleague/mime-type-detection/issues",
|
||||
"source": "https://github.com/thephpleague/mime-type-detection/tree/1.14.0"
|
||||
"source": "https://github.com/thephpleague/mime-type-detection/tree/1.15.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@ -1065,7 +1065,7 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2023-10-17T14:13:20+00:00"
|
||||
"time": "2024-01-28T23:22:08+00:00"
|
||||
},
|
||||
{
|
||||
"name": "liliuwei/thinkphp-social",
|
||||
@ -1144,16 +1144,16 @@
|
||||
},
|
||||
{
|
||||
"name": "overtrue/easy-sms",
|
||||
"version": "2.5.0",
|
||||
"version": "2.6.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/overtrue/easy-sms.git",
|
||||
"reference": "81d4deec69bbb6de6e5fdd7ab90cc933bd3e3046"
|
||||
"reference": "bb88b244f0de8d1f74bc50c4c08414f4c5f30281"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/overtrue/easy-sms/zipball/81d4deec69bbb6de6e5fdd7ab90cc933bd3e3046",
|
||||
"reference": "81d4deec69bbb6de6e5fdd7ab90cc933bd3e3046",
|
||||
"url": "https://api.github.com/repos/overtrue/easy-sms/zipball/bb88b244f0de8d1f74bc50c4c08414f4c5f30281",
|
||||
"reference": "bb88b244f0de8d1f74bc50c4c08414f4c5f30281",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@ -1198,7 +1198,7 @@
|
||||
"description": "The easiest way to send short message.",
|
||||
"support": {
|
||||
"issues": "https://github.com/overtrue/easy-sms/issues",
|
||||
"source": "https://github.com/overtrue/easy-sms/tree/2.5.0"
|
||||
"source": "https://github.com/overtrue/easy-sms/tree/2.6.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@ -1206,7 +1206,7 @@
|
||||
"type": "github"
|
||||
}
|
||||
],
|
||||
"time": "2023-08-07T07:51:17+00:00"
|
||||
"time": "2024-03-08T06:36:45+00:00"
|
||||
},
|
||||
{
|
||||
"name": "php-di/invoker",
|
||||
@ -1383,16 +1383,16 @@
|
||||
},
|
||||
{
|
||||
"name": "phpmailer/phpmailer",
|
||||
"version": "v6.8.1",
|
||||
"version": "v6.9.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/PHPMailer/PHPMailer.git",
|
||||
"reference": "e88da8d679acc3824ff231fdc553565b802ac016"
|
||||
"reference": "039de174cd9c17a8389754d3b877a2ed22743e18"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/e88da8d679acc3824ff231fdc553565b802ac016",
|
||||
"reference": "e88da8d679acc3824ff231fdc553565b802ac016",
|
||||
"url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/039de174cd9c17a8389754d3b877a2ed22743e18",
|
||||
"reference": "039de174cd9c17a8389754d3b877a2ed22743e18",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@ -1412,6 +1412,7 @@
|
||||
"yoast/phpunit-polyfills": "^1.0.4"
|
||||
},
|
||||
"suggest": {
|
||||
"decomplexity/SendOauth2": "Adapter for using XOAUTH2 authentication",
|
||||
"ext-mbstring": "Needed to send email in multibyte encoding charset or decode encoded addresses",
|
||||
"ext-openssl": "Needed for secure SMTP sending and DKIM signing",
|
||||
"greew/oauth2-azure-provider": "Needed for Microsoft Azure XOAUTH2 authentication",
|
||||
@ -1451,7 +1452,7 @@
|
||||
"description": "PHPMailer is a full-featured email creation and transfer class for PHP",
|
||||
"support": {
|
||||
"issues": "https://github.com/PHPMailer/PHPMailer/issues",
|
||||
"source": "https://github.com/PHPMailer/PHPMailer/tree/v6.8.1"
|
||||
"source": "https://github.com/PHPMailer/PHPMailer/tree/v6.9.1"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@ -1459,7 +1460,7 @@
|
||||
"type": "github"
|
||||
}
|
||||
],
|
||||
"time": "2023-08-29T08:26:30+00:00"
|
||||
"time": "2023-11-25T22:23:28+00:00"
|
||||
},
|
||||
{
|
||||
"name": "psr/cache",
|
||||
@ -1860,16 +1861,16 @@
|
||||
},
|
||||
{
|
||||
"name": "symfony/polyfill-mbstring",
|
||||
"version": "v1.28.0",
|
||||
"version": "v1.29.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/polyfill-mbstring.git",
|
||||
"reference": "42292d99c55abe617799667f454222c54c60e229"
|
||||
"reference": "9773676c8a1bb1f8d4340a62efe641cf76eda7ec"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/42292d99c55abe617799667f454222c54c60e229",
|
||||
"reference": "42292d99c55abe617799667f454222c54c60e229",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9773676c8a1bb1f8d4340a62efe641cf76eda7ec",
|
||||
"reference": "9773676c8a1bb1f8d4340a62efe641cf76eda7ec",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@ -1883,9 +1884,6 @@
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-main": "1.28-dev"
|
||||
},
|
||||
"thanks": {
|
||||
"name": "symfony/polyfill",
|
||||
"url": "https://github.com/symfony/polyfill"
|
||||
@ -1923,7 +1921,7 @@
|
||||
"shim"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/polyfill-mbstring/tree/v1.28.0"
|
||||
"source": "https://github.com/symfony/polyfill-mbstring/tree/v1.29.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@ -1939,20 +1937,20 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2023-07-28T09:04:16+00:00"
|
||||
"time": "2024-01-29T20:11:03+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/polyfill-php72",
|
||||
"version": "v1.28.0",
|
||||
"version": "v1.29.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/polyfill-php72.git",
|
||||
"reference": "70f4aebd92afca2f865444d30a4d2151c13c3179"
|
||||
"reference": "861391a8da9a04cbad2d232ddd9e4893220d6e25"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/70f4aebd92afca2f865444d30a4d2151c13c3179",
|
||||
"reference": "70f4aebd92afca2f865444d30a4d2151c13c3179",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/861391a8da9a04cbad2d232ddd9e4893220d6e25",
|
||||
"reference": "861391a8da9a04cbad2d232ddd9e4893220d6e25",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@ -1960,9 +1958,6 @@
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-main": "1.28-dev"
|
||||
},
|
||||
"thanks": {
|
||||
"name": "symfony/polyfill",
|
||||
"url": "https://github.com/symfony/polyfill"
|
||||
@ -1999,7 +1994,7 @@
|
||||
"shim"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/polyfill-php72/tree/v1.28.0"
|
||||
"source": "https://github.com/symfony/polyfill-php72/tree/v1.29.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@ -2015,20 +2010,20 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2023-01-26T09:26:14+00:00"
|
||||
"time": "2024-01-29T20:11:03+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/polyfill-php80",
|
||||
"version": "v1.28.0",
|
||||
"version": "v1.29.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/polyfill-php80.git",
|
||||
"reference": "6caa57379c4aec19c0a12a38b59b26487dcfe4b5"
|
||||
"reference": "87b68208d5c1188808dd7839ee1e6c8ec3b02f1b"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/6caa57379c4aec19c0a12a38b59b26487dcfe4b5",
|
||||
"reference": "6caa57379c4aec19c0a12a38b59b26487dcfe4b5",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/87b68208d5c1188808dd7839ee1e6c8ec3b02f1b",
|
||||
"reference": "87b68208d5c1188808dd7839ee1e6c8ec3b02f1b",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@ -2036,9 +2031,6 @@
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-main": "1.28-dev"
|
||||
},
|
||||
"thanks": {
|
||||
"name": "symfony/polyfill",
|
||||
"url": "https://github.com/symfony/polyfill"
|
||||
@ -2082,7 +2074,7 @@
|
||||
"shim"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/polyfill-php80/tree/v1.28.0"
|
||||
"source": "https://github.com/symfony/polyfill-php80/tree/v1.29.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@ -2098,7 +2090,7 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2023-01-26T09:26:14+00:00"
|
||||
"time": "2024-01-29T20:11:03+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/var-dumper",
|
||||
@ -2191,16 +2183,16 @@
|
||||
},
|
||||
{
|
||||
"name": "symfony/var-exporter",
|
||||
"version": "v5.4.26",
|
||||
"version": "v5.4.35",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/var-exporter.git",
|
||||
"reference": "11401fe94f960249b3c63a488c63ba73091c1e4a"
|
||||
"reference": "abb0a151b62d6b07e816487e20040464af96cae7"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/var-exporter/zipball/11401fe94f960249b3c63a488c63ba73091c1e4a",
|
||||
"reference": "11401fe94f960249b3c63a488c63ba73091c1e4a",
|
||||
"url": "https://api.github.com/repos/symfony/var-exporter/zipball/abb0a151b62d6b07e816487e20040464af96cae7",
|
||||
"reference": "abb0a151b62d6b07e816487e20040464af96cae7",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@ -2244,7 +2236,7 @@
|
||||
"serialize"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/var-exporter/tree/v5.4.26"
|
||||
"source": "https://github.com/symfony/var-exporter/tree/v5.4.35"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@ -2260,7 +2252,7 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2023-07-20T07:21:16+00:00"
|
||||
"time": "2024-01-23T13:51:25+00:00"
|
||||
},
|
||||
{
|
||||
"name": "taoser/think-addons",
|
||||
@ -2464,6 +2456,7 @@
|
||||
"issues": "https://github.com/tighten/collect/issues",
|
||||
"source": "https://github.com/tighten/collect/tree/v8.83.27"
|
||||
},
|
||||
"abandoned": "illuminate/collections",
|
||||
"time": "2023-01-13T18:05:42+00:00"
|
||||
},
|
||||
{
|
||||
@ -3001,16 +2994,16 @@
|
||||
},
|
||||
{
|
||||
"name": "workerman/workerman",
|
||||
"version": "v4.1.13",
|
||||
"version": "v4.1.15",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/walkor/workerman.git",
|
||||
"reference": "807780ff672775fcd08f89e573a2824e939021ce"
|
||||
"reference": "afc8242fc769ab7cf22eb4ac22b97cb59d465e4e"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/walkor/workerman/zipball/807780ff672775fcd08f89e573a2824e939021ce",
|
||||
"reference": "807780ff672775fcd08f89e573a2824e939021ce",
|
||||
"url": "https://api.github.com/repos/walkor/workerman/zipball/afc8242fc769ab7cf22eb4ac22b97cb59d465e4e",
|
||||
"reference": "afc8242fc769ab7cf22eb4ac22b97cb59d465e4e",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@ -3060,7 +3053,7 @@
|
||||
"type": "patreon"
|
||||
}
|
||||
],
|
||||
"time": "2023-07-31T05:57:25+00:00"
|
||||
"time": "2024-02-19T02:10:39+00:00"
|
||||
},
|
||||
{
|
||||
"name": "yansongda/pay",
|
||||
|
@ -16,7 +16,7 @@ return [
|
||||
// 应用名,此项不可更改
|
||||
'appname' => 'TaoLer',
|
||||
// 版本配置
|
||||
'version' => '2.5.3',
|
||||
'version' => '2.5.4',
|
||||
// 加盐
|
||||
'salt' => 'taoler',
|
||||
// 数据库备份目录
|
||||
|
327
public/static/admin/css/admin.dark.css
Normal file
327
public/static/admin/css/admin.dark.css
Normal file
@ -0,0 +1,327 @@
|
||||
/** loader */
|
||||
.pear-admin-dark .loader-wrapper,
|
||||
.pear-admin-dark .loader-wrapper .loader {
|
||||
background-color: #141414;
|
||||
}
|
||||
|
||||
/** layout */
|
||||
.pear-admin-dark .layui-layout {
|
||||
background-color: #141414;
|
||||
}
|
||||
|
||||
/** header */
|
||||
.pear-admin-dark .layui-header,
|
||||
.pear-admin-dark .layui-header .layui-logo {
|
||||
background-color: #141414 !important;
|
||||
box-shadow: none !important;
|
||||
border: none !important;
|
||||
}
|
||||
.pear-admin-dark .layui-header.auto-theme,
|
||||
.pear-admin-dark .layui-header.auto-theme .layui-logo {
|
||||
background-color: var(--global-primary-color) !important;
|
||||
}
|
||||
|
||||
.pear-admin-dark .layui-header.auto-theme .layui-logo .title {
|
||||
color: #ffffff !important;
|
||||
}
|
||||
|
||||
.pear-admin-dark .layui-header {
|
||||
border: 1px solid rgba(0, 0, 0, .40) !important;
|
||||
}
|
||||
|
||||
.pear-admin-dark .layui-header .layui-nav * {
|
||||
color: #ffffff !important;
|
||||
}
|
||||
|
||||
.pear-admin-dark .layui-header .layui-nav .layui-nav-child {
|
||||
box-shadow: 0 3px 4px rgba(0, 0, 0, .6) !important;
|
||||
background-color: #141414;
|
||||
border-color: #141414;
|
||||
}
|
||||
|
||||
.pear-admin-dark .layui-header .layui-nav .layui-nav-child dd > a:hover {
|
||||
background-color: #141414 !important;
|
||||
}
|
||||
|
||||
.pear-admin-dark .layui-header .pear-nav-control .layui-this a{
|
||||
background-color: #0c0c0c !important;
|
||||
}
|
||||
|
||||
.pear-admin-dark .auto-theme .layui-logo .title{
|
||||
color: var(--global-primary-color) !important;
|
||||
}
|
||||
|
||||
/** side */
|
||||
.pear-admin-dark .layui-side {
|
||||
box-shadow: 0 3px 4px rgba(0, 0, 0, .6) !important;
|
||||
}
|
||||
|
||||
.pear-admin-dark .layui-logo {
|
||||
border-color: rgba(0, 0, 0, .30) !important;
|
||||
}
|
||||
|
||||
.pear-admin-dark .layui-side .layui-logo,
|
||||
.pear-admin-dark .layui-side .layui-side-scroll,
|
||||
.pear-admin-dark .layui-side .layui-side-scroll .layui-nav-tree{
|
||||
background-color: #141414 !important;
|
||||
}
|
||||
|
||||
.pear-admin-dark .layui-side .layui-side-scroll .layui-nav-tree .layui-nav-child {
|
||||
background-color: rgba(0,0,0,.3)!important;
|
||||
}
|
||||
|
||||
.pear-admin-dark .layui-side .layui-side-scroll .layui-nav .layui-nav-item a,
|
||||
.pear-admin-dark .layui-side .layui-side-scroll .layui-nav .layui-nav-item a > .layui-nav-more {
|
||||
color: rgba(255,255,255,.7) !important;
|
||||
}
|
||||
|
||||
.pear-admin-dark .layui-side .layui-side-scroll .layui-nav .layui-nav-child dd.layui-this a,
|
||||
.pear-admin-dark .layui-side .layui-side-scroll .layui-nav .layui-nav-itemed > a,
|
||||
.pear-admin-dark .layui-side .layui-side-scroll .layui-nav .layui-nav-itemed > a > .layui-nav-more,
|
||||
.pear-admin-dark .layui-side .layui-side-scroll .layui-nav .layui-nav-item > a:hover {
|
||||
color: #ffffff !important;
|
||||
}
|
||||
|
||||
/** body */
|
||||
.pear-admin-dark .layui-body,
|
||||
.pear-admin-dark .layui-body .pear-tab-page-loading,
|
||||
.pear-admin-dark .layui-body .pear-page-loading {
|
||||
background-color: #0a0a0a !important;
|
||||
}
|
||||
|
||||
.pear-admin-dark .layui-body .layui-tab .layui-tab-title,
|
||||
.pear-admin-dark .layui-body .layui-tab .layui-tab-title li,
|
||||
.pear-admin-dark .layui-body .layui-tab .layui-tab-control li {
|
||||
background-color: #141414 !important;
|
||||
border-color:rgba(0, 0, 0, .30) !important;
|
||||
color: #ffffff;
|
||||
}
|
||||
|
||||
.pear-admin-dark .layui-body .layui-tab .layui-tab-title li > span:first-child {
|
||||
background-color: #434343;
|
||||
}
|
||||
|
||||
.pear-admin-dark .layui-body .layui-tab .layui-nav-child.layui-anim {
|
||||
border-color: #141414;
|
||||
background-color: #141414 !important;
|
||||
}
|
||||
|
||||
.pear-admin-dark .layui-body .layui-tab .layui-nav-child.layui-anim a {
|
||||
color: #ffffff;
|
||||
}
|
||||
|
||||
.pear-admin-dark .layui-body .layui-tab .layui-nav-child.layui-anim a:hover {
|
||||
background-color: #0a0a0a;
|
||||
}
|
||||
|
||||
.pear-admin-dark .layui-body .layui-tab .layui-tab-close:hover {
|
||||
border-radius: 50%;
|
||||
background-color: #0a0a0a !important;
|
||||
}
|
||||
|
||||
.pear-admin-dark .pear-tab-page-menu ul li {
|
||||
color: #ffffff !important;
|
||||
}
|
||||
|
||||
.pear-admin-dark .layui-footer {
|
||||
background-color: #141414;
|
||||
border-top: 1px solid #141414;
|
||||
}
|
||||
|
||||
/** theme */
|
||||
.pear-admin-dark .set-text,
|
||||
.pear-admin-dark .select-color-title,
|
||||
.pear-admin-dark .color-title {
|
||||
color: #ffffff;
|
||||
}
|
||||
|
||||
/** search */
|
||||
.pear-admin-dark .menu-search-no-data {
|
||||
color: #ffffff;
|
||||
}
|
||||
|
||||
.pear-admin-dark .menu-search-tips * {
|
||||
color: #ffffff;
|
||||
}
|
||||
|
||||
.pear-admin-dark .menu-search-tips kbd {
|
||||
border-color: rgba(0, 0, 0, .30) !important;
|
||||
}
|
||||
|
||||
|
||||
/** message center */
|
||||
.pear-admin-dark .pear-message-center .layui-tab-title,
|
||||
.pear-admin-dark .pear-message-center .message-item {
|
||||
border-color: rgba(0, 0, 0, .30) !important;
|
||||
color: #ffffff;
|
||||
}
|
||||
|
||||
/** button */
|
||||
.pear-admin-dark .layui-btn {
|
||||
color: #ffffff;
|
||||
border-color: #4C4D4F;
|
||||
}
|
||||
|
||||
/** layer */
|
||||
.pear-admin-dark .layui-layer {
|
||||
background-color: #141414;
|
||||
}
|
||||
|
||||
.pear-admin-dark .layui-layer-msg {
|
||||
border-color: #141414;
|
||||
}
|
||||
|
||||
.pear-admin-dark .layui-layer-msg .layui-layer-content {
|
||||
color: #E5EAF3;
|
||||
}
|
||||
|
||||
.pear-admin-dark .layui-layer .layui-layer-setwin > span,
|
||||
.pear-admin-dark .layui-layer .layui-layer-title {
|
||||
color: #ffffff;
|
||||
}
|
||||
|
||||
/** card */
|
||||
.pear-admin-dark .layui-card {
|
||||
background-color: #1d1e1f !important;
|
||||
}
|
||||
|
||||
.pear-admin-dark .layui-card .layui-card-header {
|
||||
border-bottom-color: #414243;
|
||||
color: #ffffff;
|
||||
}
|
||||
|
||||
.pear-admin-dark .layui-card .layui-card-body {
|
||||
color: #ffffff;
|
||||
}
|
||||
|
||||
/** input */
|
||||
.pear-admin-dark .layui-input {
|
||||
background-color: transparent;
|
||||
color: #ffffff;
|
||||
border-color: rgba(0, 0, 0, .30) !important;
|
||||
}
|
||||
|
||||
/** switch */
|
||||
.pear-admin-dark .layui-form-switch {
|
||||
border-color: #484849;
|
||||
background-color: rgba(255,255,255,.08);
|
||||
}
|
||||
|
||||
/** table */
|
||||
.pear-admin-dark .layui-table {
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
.pear-admin-dark .layui-table tr:hover {
|
||||
background-color: #141414 !important;
|
||||
}
|
||||
|
||||
.pear-admin-dark .layui-table td,
|
||||
.pear-admin-dark .layui-table th,
|
||||
.pear-admin-dark .layui-table-view,
|
||||
.pear-admin-dark .layui-table-page,
|
||||
.pear-admin-dark .layui-table-tool,
|
||||
.pear-admin-dark .layui-table-header {
|
||||
border-color: rgba(0, 0, 0, .40) !important;
|
||||
}
|
||||
|
||||
.pear-admin-dark .layui-laypage select,
|
||||
.pear-admin-dark .layui-laypage button {
|
||||
border-color: rgba(0, 0, 0, .40) !important;
|
||||
color: #ffffff !important;
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
.pear-admin-dark .layui-table-tool-self > div {
|
||||
border-color: rgba(0, 0, 0, .40) !important;
|
||||
color: #ffffff !important;
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
/** panel */
|
||||
.pear-admin-dark .layui-panel {
|
||||
background-color: #1d1e1f !important;
|
||||
border-color: #1d1e1f !important;
|
||||
}
|
||||
|
||||
/** menu */
|
||||
.pear-admin-dark .layui-menu {
|
||||
background-color: #1d1e1f !important;
|
||||
}
|
||||
|
||||
.pear-admin-dark .layui-menu .layui-menu-body-title,
|
||||
.pear-admin-dark .layui-menu .layui-menu-body-title:hover {
|
||||
color: #ffffff;
|
||||
background-color: #1d1e1f !important;
|
||||
}
|
||||
|
||||
/** timeline */
|
||||
.pear-admin-dark .layui-timeline-axis {
|
||||
background-color: rgb(29, 30, 31) !important;
|
||||
}
|
||||
|
||||
.pear-admin-dark .layui-timeline-item:before {
|
||||
background-color: #414243 !important;
|
||||
}
|
||||
|
||||
|
||||
/** toast */
|
||||
.pear-admin-dark .iziToast {
|
||||
background-color: #1f1f1f !important;
|
||||
}
|
||||
|
||||
/** console */
|
||||
|
||||
.pear-admin-dark .deputy,
|
||||
.pear-admin-dark .shortcut-menu {
|
||||
background-color: #141414 !important;
|
||||
}
|
||||
|
||||
.pear-admin-dark .deputy:hover,
|
||||
.pear-admin-dark .shortcut-menu:hover {
|
||||
box-shadow: 0 3px 4px rgba(0, 0, 0, .6) !important;
|
||||
}
|
||||
|
||||
.pear-admin-dark .message-board li {
|
||||
border-bottom: 1px solid rgba(0, 0, 0, .40) !important;
|
||||
}
|
||||
|
||||
/** analysis */
|
||||
.pear-admin-dark .top-panel-number {
|
||||
color: #ffffff !important;
|
||||
border-color: #414243;
|
||||
}
|
||||
|
||||
|
||||
.pear-admin-dark .dynamic-status dd {
|
||||
border-color: #414243;
|
||||
}
|
||||
|
||||
/** success failure */
|
||||
.pear-admin-dark .pear-result .content {
|
||||
background-color: rgba(153, 153, 153, 0.12);
|
||||
color: #E5EAF3;
|
||||
}
|
||||
|
||||
.pear-admin-dark .pear-result .title{
|
||||
color: #ffffff;
|
||||
}
|
||||
|
||||
.pear-admin-dark .pear-result .description{
|
||||
color: #8D9095;
|
||||
}
|
||||
|
||||
/** 403 404 500*/
|
||||
.pear-admin-dark .pear-exception .title p{
|
||||
color: #E5EAF3 !important;
|
||||
}
|
||||
|
||||
/** scroll */
|
||||
.pear-admin-dark *::-webkit-scrollbar-thumb {
|
||||
background: #141414;
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
||||
.pear-admin-dark *::-webkit-scrollbar-thumb:hover {
|
||||
background: #0a0a0a;
|
||||
}
|
65
public/static/admin/css/other/analysis.css
Normal file
65
public/static/admin/css/other/analysis.css
Normal file
@ -0,0 +1,65 @@
|
||||
.top-panel {
|
||||
border-radius: 4px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.top-panel>.layui-card-body {
|
||||
height: 60px;
|
||||
}
|
||||
|
||||
.top-panel-number {
|
||||
line-height: 60px;
|
||||
font-size: 29px;
|
||||
border-right: 1px solid #eceff9;
|
||||
}
|
||||
|
||||
.top-panel-tips {
|
||||
padding-left: 8px;
|
||||
padding-top: 16px;
|
||||
line-height: 30px;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.top-panel-tips i {
|
||||
font-size: 33px;
|
||||
}
|
||||
|
||||
.top-panel-tips svg {
|
||||
margin-top: -12px;
|
||||
width: 50px;
|
||||
height: 50px;
|
||||
}
|
||||
|
||||
.dynamic-status {
|
||||
padding: 0 10px 10px;
|
||||
}
|
||||
|
||||
.dynamic-status dd {
|
||||
padding: 15px 0;
|
||||
border-bottom: 1px solid #EEE;
|
||||
display: -webkit-flex;
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.dynamic-status dd div.dynamic-status-img {
|
||||
width: 32px;
|
||||
height: 32px;
|
||||
border-radius: 50%;
|
||||
margin-right: 15px;
|
||||
}
|
||||
|
||||
.dynamic-status dd div.dynamic-status-img a {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
display: inline-block;
|
||||
text-align: center;
|
||||
line-height: 32px;
|
||||
}
|
||||
|
||||
.dynamic-status dd div span {
|
||||
color: #BBB;
|
||||
}
|
||||
|
||||
.dynamic-status dd div a {
|
||||
color: #01AAED;
|
||||
}
|
81
public/static/admin/css/other/console.css
Normal file
81
public/static/admin/css/other/console.css
Normal file
@ -0,0 +1,81 @@
|
||||
|
||||
.shortcut-menu {
|
||||
width: 100%;
|
||||
height: 66px;
|
||||
background-color: #F8F8F8;
|
||||
display: inline-block;
|
||||
border-radius: 5px;
|
||||
text-align: center;
|
||||
margin-bottom: 3px;
|
||||
}
|
||||
|
||||
.shortcut-menu i {
|
||||
font-size: 30px;
|
||||
height: 66px;
|
||||
line-height: 66px;
|
||||
}
|
||||
|
||||
.shortcut-menu:hover {
|
||||
box-shadow: 2px 0 8px 0 lightgray !important;
|
||||
}
|
||||
|
||||
.shortcut-menu-label {
|
||||
width: 100%;
|
||||
display: inline-block;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.deputy {
|
||||
width: 100%;
|
||||
height: 90px;
|
||||
background-color: #F8F8F8;
|
||||
display: inline-block;
|
||||
border-radius: 5px;
|
||||
text-align: center;
|
||||
margin-bottom: 3px;
|
||||
}
|
||||
|
||||
.deputy:hover {
|
||||
box-shadow: 2px 0 8px 0 lightgray !important;
|
||||
}
|
||||
|
||||
.deputy .deputy-label {
|
||||
color: gray;
|
||||
margin-top: 14px;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
.deputy .deputy-count {
|
||||
margin-top: 12px;
|
||||
color: var(--global-primary-color);
|
||||
font-size: 30px;
|
||||
}
|
||||
|
||||
.message-board {
|
||||
padding: 0 10px 10px;
|
||||
}
|
||||
|
||||
.message-board li {
|
||||
position: relative;
|
||||
padding: 10px 0;
|
||||
border-bottom: 1px solid #EEE;
|
||||
}
|
||||
|
||||
.message-board li p {
|
||||
padding-bottom: 10px;
|
||||
padding-top: 3px;
|
||||
}
|
||||
|
||||
.message-board li>span {
|
||||
color: #999;
|
||||
height: 24px;
|
||||
line-height: 24px;
|
||||
}
|
||||
|
||||
.message-board .message-board-reply {
|
||||
position: absolute;
|
||||
right: 20px;
|
||||
bottom: 12px;
|
||||
height: 24px;
|
||||
line-height: 24px;
|
||||
}
|
28
public/static/admin/css/other/exception.css
Normal file
28
public/static/admin/css/other/exception.css
Normal file
@ -0,0 +1,28 @@
|
||||
.pear-exception {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
flex-direction: column;
|
||||
text-align: center;
|
||||
box-sizing: border-box;
|
||||
padding: 70px 40px
|
||||
}
|
||||
|
||||
.pear-exception .title {
|
||||
margin-top: 20px;
|
||||
}
|
||||
|
||||
.pear-exception .title p {
|
||||
color: rgb(0, 0, 0);
|
||||
font-size: 20px;
|
||||
}
|
||||
|
||||
.pear-exception .description {
|
||||
margin-top: 10px;
|
||||
color: #8D9095;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
.pear-exception .extra {
|
||||
margin: 30px;
|
||||
}
|
80
public/static/admin/css/other/profile.css
Normal file
80
public/static/admin/css/other/profile.css
Normal file
@ -0,0 +1,80 @@
|
||||
.text-center {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.user-info-head {
|
||||
width: 110px;
|
||||
height: 110px;
|
||||
line-height: 110px;
|
||||
position: relative;
|
||||
display: inline-block;
|
||||
border-radius: 50%;
|
||||
overflow: hidden;
|
||||
cursor: pointer;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
.layui-line-dash {
|
||||
border-bottom: 1px dashed #ccc;
|
||||
margin: 15px 0;
|
||||
}
|
||||
|
||||
|
||||
.blog-title {
|
||||
padding-left: 13.5px;
|
||||
}
|
||||
|
||||
.blog-content {
|
||||
padding-left: 13px;
|
||||
font-size: 13px;
|
||||
color: dimgray;
|
||||
}
|
||||
|
||||
.layui-tab-title {
|
||||
border-bottom: none;
|
||||
}
|
||||
|
||||
.fl-item {
|
||||
height: 30px;
|
||||
font-size: 13.5;
|
||||
}
|
||||
|
||||
.dot {
|
||||
width: 10px;
|
||||
height: 10px;
|
||||
border-radius: 50px;
|
||||
background-color: gray;
|
||||
display: inline-block;
|
||||
margin-right: 10px;
|
||||
}
|
||||
|
||||
|
||||
|
||||
.message-board {
|
||||
padding: 0 10px 10px;
|
||||
}
|
||||
|
||||
.message-board li {
|
||||
position: relative;
|
||||
padding: 10px 0;
|
||||
border-bottom: 1px solid #EEE;
|
||||
}
|
||||
|
||||
.message-board li p {
|
||||
padding-bottom: 10px;
|
||||
padding-top: 3px;
|
||||
}
|
||||
|
||||
.message-board li>span {
|
||||
color: #999;
|
||||
height: 24px;
|
||||
line-height: 24px;
|
||||
}
|
||||
|
||||
.message-board .message-board-reply {
|
||||
position: absolute;
|
||||
right: 20px;
|
||||
bottom: 12px;
|
||||
height: 24px;
|
||||
line-height: 24px;
|
||||
}
|
44
public/static/admin/css/reset.css
Normal file
44
public/static/admin/css/reset.css
Normal file
@ -0,0 +1,44 @@
|
||||
.layui-dropdown {
|
||||
border-radius: var(--global-border-radius);
|
||||
}
|
||||
|
||||
.layui-input {
|
||||
border-radius: var(--global-border-radius);
|
||||
}
|
||||
|
||||
.layui-form-onswitch {
|
||||
background-color: var(--global-primary-color) !important;
|
||||
}
|
||||
|
||||
.layui-form-onswitch {
|
||||
border-color: var(--global-primary-color);
|
||||
}
|
||||
|
||||
.layui-btn {
|
||||
background-color: var(--global-primary-color);
|
||||
}
|
||||
|
||||
.layui-btn.layui-btn-normal {
|
||||
background-color: #1e9fff !important;
|
||||
}
|
||||
|
||||
.layui-btn.layui-btn-danger {
|
||||
background-color: #ff5722 !important;
|
||||
}
|
||||
|
||||
.layui-btn.layui-btn-warm {
|
||||
background-color: #ffb800 !important;
|
||||
}
|
||||
|
||||
.layui-btn.layui-btn-primary {
|
||||
background-color: transparent !important;
|
||||
color: #5f5f5f !important;
|
||||
}
|
||||
|
||||
.layui-card {
|
||||
border-radius: var(--global-border-radius);
|
||||
}
|
||||
|
||||
.layui-timeline-axis {
|
||||
color: var(--global-primary-color);
|
||||
}
|
7
public/static/admin/css/variables.css
Normal file
7
public/static/admin/css/variables.css
Normal file
@ -0,0 +1,7 @@
|
||||
:root {
|
||||
|
||||
--global-primary-color: #16baaa;
|
||||
|
||||
--global-border-radius: 4px;
|
||||
|
||||
}
|
BIN
public/static/admin/images/banner.png
Normal file
BIN
public/static/admin/images/banner.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 9.9 MiB |
BIN
public/static/admin/images/blog.jpg
Normal file
BIN
public/static/admin/images/blog.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 197 KiB |
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
977
public/static/component/pear/css/module/global.css
Normal file
977
public/static/component/pear/css/module/global.css
Normal file
@ -0,0 +1,977 @@
|
||||
.pear-container {
|
||||
padding: 10px;
|
||||
margin: 0px;
|
||||
box-sizing: border-box;
|
||||
background-color: transparent;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
*::-webkit-scrollbar {
|
||||
width: 0px;
|
||||
height: 0px;
|
||||
}
|
||||
|
||||
*::-webkit-scrollbar {
|
||||
width: 6px;
|
||||
height: 6px;
|
||||
}
|
||||
|
||||
*::-webkit-scrollbar-track {
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
*::-webkit-scrollbar-thumb {
|
||||
background: #E6E6E6;
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
||||
*::-webkit-scrollbar-thumb:hover {
|
||||
background: #E6E6E6;
|
||||
}
|
||||
|
||||
*::-webkit-scrollbar-corner {
|
||||
background: #f6f6f6;
|
||||
}
|
||||
|
||||
.pear-row::after,
|
||||
.pear-row::before {
|
||||
content: "";
|
||||
display: table;
|
||||
clear: both;
|
||||
}
|
||||
|
||||
.pear-col {
|
||||
float: left;
|
||||
min-height: 1px;
|
||||
}
|
||||
|
||||
.pear-row * {
|
||||
box-sizing: border-box
|
||||
}
|
||||
|
||||
.pear-col-md1 {
|
||||
width: 4.16%;
|
||||
}
|
||||
|
||||
.pear-col-md2 {
|
||||
width: 8.33%;
|
||||
}
|
||||
|
||||
.pear-col-md3 {
|
||||
width: 12.5%;
|
||||
}
|
||||
|
||||
.pear-col-md4 {
|
||||
width: 16.66%;
|
||||
}
|
||||
|
||||
.pear-col-md5 {
|
||||
width: 20.83%;
|
||||
}
|
||||
|
||||
.pear-col-md6 {
|
||||
width: 25%;
|
||||
}
|
||||
|
||||
.pear-col-md7 {
|
||||
width: 29.16%;
|
||||
}
|
||||
|
||||
.pear-col-md8 {
|
||||
width: 33.33%;
|
||||
}
|
||||
|
||||
.pear-col-md9 {
|
||||
width: 37.5%;
|
||||
}
|
||||
|
||||
.pear-col-md10 {
|
||||
width: 41.66%;
|
||||
}
|
||||
|
||||
.pear-col-md11 {
|
||||
width: 45.83%;
|
||||
}
|
||||
|
||||
.pear-col-md12 {
|
||||
width: 50%;
|
||||
}
|
||||
|
||||
.pear-col-md13 {
|
||||
width: 54.16%;
|
||||
}
|
||||
|
||||
.pear-col-md14 {
|
||||
width: 58.33%;
|
||||
}
|
||||
|
||||
.pear-col-md15 {
|
||||
width: 62.5%;
|
||||
}
|
||||
|
||||
.pear-col-md16 {
|
||||
width: 66.66%;
|
||||
}
|
||||
|
||||
.pear-col-md17 {
|
||||
width: 70.83%;
|
||||
}
|
||||
|
||||
.pear-col-md18 {
|
||||
width: 75%;
|
||||
}
|
||||
|
||||
.pear-col-md19 {
|
||||
width: 79.16%;
|
||||
}
|
||||
|
||||
.pear-col-md20 {
|
||||
width: 83.33%;
|
||||
}
|
||||
|
||||
.pear-col-md21 {
|
||||
width: 87.5%;
|
||||
}
|
||||
|
||||
.pear-col-md22 {
|
||||
width: 91.66%;
|
||||
}
|
||||
|
||||
.pear-col-md23 {
|
||||
width: 95.83%;
|
||||
}
|
||||
|
||||
.pear-col-md24 {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.pear-col-md-offset1 {
|
||||
margin-left: 4.16%;
|
||||
}
|
||||
|
||||
.pear-col-md-offset2 {
|
||||
margin-left: 8.33%;
|
||||
}
|
||||
|
||||
.pear-col-md-offset3 {
|
||||
margin-left: 12.5%;
|
||||
}
|
||||
|
||||
.pear-col-md-offset4 {
|
||||
margin-left: 16.66%;
|
||||
}
|
||||
|
||||
.pear-col-md-offset5 {
|
||||
margin-left: 20.83%;
|
||||
}
|
||||
|
||||
.pear-col-md-offset6 {
|
||||
margin-left: 25%;
|
||||
}
|
||||
|
||||
.pear-col-md-offset7 {
|
||||
margin-left: 29.16%;
|
||||
}
|
||||
|
||||
.pear-col-md-offset8 {
|
||||
margin-left: 33.33%;
|
||||
}
|
||||
|
||||
.pear-col-md-offset9 {
|
||||
margin-left: 37.5%;
|
||||
}
|
||||
|
||||
.pear-col-md-offset10 {
|
||||
margin-left: 41.66%;
|
||||
}
|
||||
|
||||
.pear-col-md-offset11 {
|
||||
margin-left: 45.83%;
|
||||
}
|
||||
|
||||
.pear-col-md-offset12 {
|
||||
margin-left: 50%;
|
||||
}
|
||||
|
||||
.pear-col-md-offset13 {
|
||||
margin-left: 54.16%;
|
||||
}
|
||||
|
||||
.pear-col-md-offset14 {
|
||||
margin-left: 58.33%;
|
||||
}
|
||||
|
||||
.pear-col-md-offset15 {
|
||||
margin-left: 62.5%;
|
||||
}
|
||||
|
||||
.pear-col-md-offset16 {
|
||||
margin-left: 66.66%;
|
||||
}
|
||||
|
||||
.pear-col-md-offset17 {
|
||||
margin-left: 70.83%;
|
||||
}
|
||||
|
||||
.pear-col-md-offset18 {
|
||||
margin-left: 75%;
|
||||
}
|
||||
|
||||
.pear-col-md-offset19 {
|
||||
margin-left: 79.16%;
|
||||
}
|
||||
|
||||
.pear-col-md-offset20 {
|
||||
margin-left: 83.33%;
|
||||
}
|
||||
|
||||
.pear-col-md-offset21 {
|
||||
margin-left: 87.5%;
|
||||
}
|
||||
|
||||
.pear-col-md-offset22 {
|
||||
margin-left: 91.66%;
|
||||
}
|
||||
|
||||
.pear-col-md-offset23 {
|
||||
margin-left: 95.83%;
|
||||
}
|
||||
|
||||
.pear-col-md-offset24 {
|
||||
margin-left: 100%;
|
||||
}
|
||||
|
||||
|
||||
@media all and (max-width:768px) {
|
||||
.pear-col-xs1 {
|
||||
width: 4.16%;
|
||||
}
|
||||
|
||||
.pear-col-xs2 {
|
||||
width: 8.33%;
|
||||
}
|
||||
|
||||
.pear-col-xs3 {
|
||||
width: 12.5%;
|
||||
}
|
||||
|
||||
.pear-col-xs4 {
|
||||
width: 16.66%;
|
||||
}
|
||||
|
||||
.pear-col-xs5 {
|
||||
width: 20.83%;
|
||||
}
|
||||
|
||||
.pear-col-xs6 {
|
||||
width: 25%;
|
||||
}
|
||||
|
||||
.pear-col-xs7 {
|
||||
width: 29.16%;
|
||||
}
|
||||
|
||||
.pear-col-xs8 {
|
||||
width: 33.33%;
|
||||
}
|
||||
|
||||
.pear-col-xs9 {
|
||||
width: 37.5%;
|
||||
}
|
||||
|
||||
.pear-col-xs10 {
|
||||
width: 41.66%;
|
||||
}
|
||||
|
||||
.pear-col-xs11 {
|
||||
width: 45.83%;
|
||||
}
|
||||
|
||||
.pear-col-xs12 {
|
||||
width: 50%;
|
||||
}
|
||||
|
||||
.pear-col-xs13 {
|
||||
width: 54.16%;
|
||||
}
|
||||
|
||||
.pear-col-xs14 {
|
||||
width: 58.33%;
|
||||
}
|
||||
|
||||
.pear-col-xs15 {
|
||||
width: 62.5%;
|
||||
}
|
||||
|
||||
.pear-col-xs16 {
|
||||
width: 66.66%;
|
||||
}
|
||||
|
||||
.pear-col-xs17 {
|
||||
width: 70.83%;
|
||||
}
|
||||
|
||||
.pear-col-xs18 {
|
||||
width: 75%;
|
||||
}
|
||||
|
||||
.pear-col-xs19 {
|
||||
width: 79.16%;
|
||||
}
|
||||
|
||||
.pear-col-xs20 {
|
||||
width: 83.33%;
|
||||
}
|
||||
|
||||
.pear-col-xs21 {
|
||||
width: 87.5%;
|
||||
}
|
||||
|
||||
.pear-col-xs22 {
|
||||
width: 91.66%;
|
||||
}
|
||||
|
||||
.pear-col-xs23 {
|
||||
width: 95.83%;
|
||||
}
|
||||
|
||||
.pear-col-xs24 {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.pear-col-xs-offset1 {
|
||||
margin-left: 4.16%;
|
||||
}
|
||||
|
||||
.pear-col-xs-offset2 {
|
||||
margin-left: 8.33%;
|
||||
}
|
||||
|
||||
.pear-col-xs-offset3 {
|
||||
margin-left: 12.5%;
|
||||
}
|
||||
|
||||
.pear-col-xs-offset4 {
|
||||
margin-left: 16.66%;
|
||||
}
|
||||
|
||||
.pear-col-xs-offset5 {
|
||||
margin-left: 20.83%;
|
||||
}
|
||||
|
||||
.pear-col-xs-offset6 {
|
||||
margin-left: 25%;
|
||||
}
|
||||
|
||||
.pear-col-xs-offset7 {
|
||||
margin-left: 29.16%;
|
||||
}
|
||||
|
||||
.pear-col-xs-offset8 {
|
||||
margin-left: 33.33%;
|
||||
}
|
||||
|
||||
.pear-col-xs-offset9 {
|
||||
margin-left: 37.5%;
|
||||
}
|
||||
|
||||
.pear-col-xs-offset10 {
|
||||
margin-left: 41.66%;
|
||||
}
|
||||
|
||||
.pear-col-xs-offset11 {
|
||||
margin-left: 45.83%;
|
||||
}
|
||||
|
||||
.pear-col-xs-offset12 {
|
||||
margin-left: 50%;
|
||||
}
|
||||
|
||||
.pear-col-xs-offset13 {
|
||||
margin-left: 54.16%;
|
||||
}
|
||||
|
||||
.pear-col-xs-offset14 {
|
||||
margin-left: 58.33%;
|
||||
}
|
||||
|
||||
.pear-col-xs-offset15 {
|
||||
margin-left: 62.5%;
|
||||
}
|
||||
|
||||
.pear-col-xs-offset16 {
|
||||
margin-left: 66.66%;
|
||||
}
|
||||
|
||||
.pear-col-xs-offset17 {
|
||||
margin-left: 70.83%;
|
||||
}
|
||||
|
||||
.pear-col-xs-offset18 {
|
||||
margin-left: 75%;
|
||||
}
|
||||
|
||||
.pear-col-xs-offset19 {
|
||||
margin-left: 79.16%;
|
||||
}
|
||||
|
||||
.pear-col-xs-offset20 {
|
||||
margin-left: 83.33%;
|
||||
}
|
||||
|
||||
.pear-col-xs-offset21 {
|
||||
margin-left: 87.5%;
|
||||
}
|
||||
|
||||
.pear-col-xs-offset22 {
|
||||
margin-left: 91.66%;
|
||||
}
|
||||
|
||||
.pear-col-xs-offset23 {
|
||||
margin-left: 95.83%;
|
||||
}
|
||||
|
||||
.pear-col-xs-offset24 {
|
||||
margin-left: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
@media all and (min-width:768px) and (max-width:992px) {
|
||||
.pear-col-sm1 {
|
||||
width: 4.16%;
|
||||
}
|
||||
|
||||
.pear-col-sm2 {
|
||||
width: 8.33%;
|
||||
}
|
||||
|
||||
.pear-col-sm3 {
|
||||
width: 12.5%;
|
||||
}
|
||||
|
||||
.pear-col-sm4 {
|
||||
width: 16.66%;
|
||||
}
|
||||
|
||||
.pear-col-sm5 {
|
||||
width: 20.83%;
|
||||
}
|
||||
|
||||
.pear-col-sm6 {
|
||||
width: 25%;
|
||||
}
|
||||
|
||||
.pear-col-sm7 {
|
||||
width: 29.16%;
|
||||
}
|
||||
|
||||
.pear-col-sm8 {
|
||||
width: 33.33%;
|
||||
}
|
||||
|
||||
.pear-col-sm9 {
|
||||
width: 37.5%;
|
||||
}
|
||||
|
||||
.pear-col-sm10 {
|
||||
width: 41.66%;
|
||||
}
|
||||
|
||||
.pear-col-sm11 {
|
||||
width: 45.83%;
|
||||
}
|
||||
|
||||
.pear-col-sm12 {
|
||||
width: 50%;
|
||||
}
|
||||
|
||||
.pear-col-sm13 {
|
||||
width: 54.16%;
|
||||
}
|
||||
|
||||
.pear-col-sm14 {
|
||||
width: 58.33%;
|
||||
}
|
||||
|
||||
.pear-col-sm15 {
|
||||
width: 62.5%;
|
||||
}
|
||||
|
||||
.pear-col-sm16 {
|
||||
width: 66.66%;
|
||||
}
|
||||
|
||||
.pear-col-sm17 {
|
||||
width: 70.83%;
|
||||
}
|
||||
|
||||
.pear-col-sm18 {
|
||||
width: 75%;
|
||||
}
|
||||
|
||||
.pear-col-sm19 {
|
||||
width: 79.16%;
|
||||
}
|
||||
|
||||
.pear-col-sm20 {
|
||||
width: 83.33%;
|
||||
}
|
||||
|
||||
.pear-col-sm21 {
|
||||
width: 87.5%;
|
||||
}
|
||||
|
||||
.pear-col-sm22 {
|
||||
width: 91.66%;
|
||||
}
|
||||
|
||||
.pear-col-sm23 {
|
||||
width: 95.83%;
|
||||
}
|
||||
|
||||
.pear-col-sm24 {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.pear-col-sm-offset1 {
|
||||
margin-left: 4.16%;
|
||||
}
|
||||
|
||||
.pear-col-sm-offset2 {
|
||||
margin-left: 8.33%;
|
||||
}
|
||||
|
||||
.pear-col-sm-offset3 {
|
||||
margin-left: 12.5%;
|
||||
}
|
||||
|
||||
.pear-col-sm-offset4 {
|
||||
margin-left: 16.66%;
|
||||
}
|
||||
|
||||
.pear-col-sm-offset5 {
|
||||
margin-left: 20.83%;
|
||||
}
|
||||
|
||||
.pear-col-sm-offset6 {
|
||||
margin-left: 25%;
|
||||
}
|
||||
|
||||
.pear-col-sm-offset7 {
|
||||
margin-left: 29.16%;
|
||||
}
|
||||
|
||||
.pear-col-sm-offset8 {
|
||||
margin-left: 33.33%;
|
||||
}
|
||||
|
||||
.pear-col-sm-offset9 {
|
||||
margin-left: 37.5%;
|
||||
}
|
||||
|
||||
.pear-col-sm-offset10 {
|
||||
margin-left: 41.66%;
|
||||
}
|
||||
|
||||
.pear-col-sm-offset11 {
|
||||
margin-left: 45.83%;
|
||||
}
|
||||
|
||||
.pear-col-sm-offset12 {
|
||||
margin-left: 50%;
|
||||
}
|
||||
|
||||
.pear-col-sm-offset13 {
|
||||
margin-left: 54.16%;
|
||||
}
|
||||
|
||||
.pear-col-sm-offset14 {
|
||||
margin-left: 58.33%;
|
||||
}
|
||||
|
||||
.pear-col-sm-offset15 {
|
||||
margin-left: 62.5%;
|
||||
}
|
||||
|
||||
.pear-col-sm-offset16 {
|
||||
margin-left: 66.66%;
|
||||
}
|
||||
|
||||
.pear-col-sm-offset17 {
|
||||
margin-left: 70.83%;
|
||||
}
|
||||
|
||||
.pear-col-sm-offset18 {
|
||||
margin-left: 75%;
|
||||
}
|
||||
|
||||
.pear-col-sm-offset19 {
|
||||
margin-left: 79.16%;
|
||||
}
|
||||
|
||||
.pear-col-sm-offset20 {
|
||||
margin-left: 83.33%;
|
||||
}
|
||||
|
||||
.pear-col-sm-offset21 {
|
||||
margin-left: 87.5%;
|
||||
}
|
||||
|
||||
.pear-col-sm-offset22 {
|
||||
margin-left: 91.66%;
|
||||
}
|
||||
|
||||
.pear-col-sm-offset23 {
|
||||
margin-left: 95.83%;
|
||||
}
|
||||
|
||||
.pear-col-sm-offset24 {
|
||||
margin-left: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
@media all and (min-width:1200px) {
|
||||
.pear-col-lg1 {
|
||||
width: 4.16%;
|
||||
}
|
||||
|
||||
.pear-col-lg2 {
|
||||
width: 8.33%;
|
||||
}
|
||||
|
||||
.pear-col-lg3 {
|
||||
width: 12.5%;
|
||||
}
|
||||
|
||||
.pear-col-lg4 {
|
||||
width: 16.66%;
|
||||
}
|
||||
|
||||
.pear-col-lg5 {
|
||||
width: 20.83%;
|
||||
}
|
||||
|
||||
.pear-col-lg6 {
|
||||
width: 25%;
|
||||
}
|
||||
|
||||
.pear-col-lg7 {
|
||||
width: 29.16%;
|
||||
}
|
||||
|
||||
.pear-col-lg8 {
|
||||
width: 33.33%;
|
||||
}
|
||||
|
||||
.pear-col-lg9 {
|
||||
width: 37.5%;
|
||||
}
|
||||
|
||||
.pear-col-lg10 {
|
||||
width: 41.66%;
|
||||
}
|
||||
|
||||
.pear-col-lg11 {
|
||||
width: 45.83%;
|
||||
}
|
||||
|
||||
.pear-col-lg12 {
|
||||
width: 50%;
|
||||
}
|
||||
|
||||
.pear-col-lg13 {
|
||||
width: 54.16%;
|
||||
}
|
||||
|
||||
.pear-col-lg14 {
|
||||
width: 58.33%;
|
||||
}
|
||||
|
||||
.pear-col-lg15 {
|
||||
width: 62.5%;
|
||||
}
|
||||
|
||||
.pear-col-lg16 {
|
||||
width: 66.66%;
|
||||
}
|
||||
|
||||
.pear-col-lg17 {
|
||||
width: 70.83%;
|
||||
}
|
||||
|
||||
.pear-col-lg18 {
|
||||
width: 75%;
|
||||
}
|
||||
|
||||
.pear-col-lg19 {
|
||||
width: 79.16%;
|
||||
}
|
||||
|
||||
.pear-col-lg20 {
|
||||
width: 83.33%;
|
||||
}
|
||||
|
||||
.pear-col-lg21 {
|
||||
width: 87.5%;
|
||||
}
|
||||
|
||||
.pear-col-lg22 {
|
||||
width: 91.66%;
|
||||
}
|
||||
|
||||
.pear-col-lg23 {
|
||||
width: 95.83%;
|
||||
}
|
||||
|
||||
.pear-col-lg24 {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.pear-col-lg-offset1 {
|
||||
margin-left: 4.16%;
|
||||
}
|
||||
|
||||
.pear-col-lg-offset2 {
|
||||
margin-left: 8.33%;
|
||||
}
|
||||
|
||||
.pear-col-lg-offset3 {
|
||||
margin-left: 12.5%;
|
||||
}
|
||||
|
||||
.pear-col-lg-offset4 {
|
||||
margin-left: 16.66%;
|
||||
}
|
||||
|
||||
.pear-col-lg-offset5 {
|
||||
margin-left: 20.83%;
|
||||
}
|
||||
|
||||
.pear-col-lg-offset6 {
|
||||
margin-left: 25%;
|
||||
}
|
||||
|
||||
.pear-col-lg-offset7 {
|
||||
margin-left: 29.16%;
|
||||
}
|
||||
|
||||
.pear-col-lg-offset8 {
|
||||
margin-left: 33.33%;
|
||||
}
|
||||
|
||||
.pear-col-lg-offset9 {
|
||||
margin-left: 37.5%;
|
||||
}
|
||||
|
||||
.pear-col-lg-offset10 {
|
||||
margin-left: 41.66%;
|
||||
}
|
||||
|
||||
.pear-col-lg-offset11 {
|
||||
margin-left: 45.83%;
|
||||
}
|
||||
|
||||
.pear-col-lg-offset12 {
|
||||
margin-left: 50%;
|
||||
}
|
||||
|
||||
.pear-col-lg-offset13 {
|
||||
margin-left: 54.16%;
|
||||
}
|
||||
|
||||
.pear-col-lg-offset14 {
|
||||
margin-left: 58.33%;
|
||||
}
|
||||
|
||||
.pear-col-lg-offset15 {
|
||||
margin-left: 62.5%;
|
||||
}
|
||||
|
||||
.pear-col-lg-offset16 {
|
||||
margin-left: 66.66%;
|
||||
}
|
||||
|
||||
.pear-col-lg-offset17 {
|
||||
margin-left: 70.83%;
|
||||
}
|
||||
|
||||
.pear-col-lg-offset18 {
|
||||
margin-left: 75%;
|
||||
}
|
||||
|
||||
.pear-col-lg-offset19 {
|
||||
margin-left: 79.16%;
|
||||
}
|
||||
|
||||
.pear-col-lg-offset20 {
|
||||
margin-left: 83.33%;
|
||||
}
|
||||
|
||||
.pear-col-lg-offset21 {
|
||||
margin-left: 87.5%;
|
||||
}
|
||||
|
||||
.pear-col-lg-offset22 {
|
||||
margin-left: 91.66%;
|
||||
}
|
||||
|
||||
.pear-col-lg-offset23 {
|
||||
margin-left: 95.83%;
|
||||
}
|
||||
|
||||
.pear-col-lg-offset24 {
|
||||
margin-left: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
.pear-col-space1 {
|
||||
margin: -.5px
|
||||
}
|
||||
|
||||
.pear-col-space1>* {
|
||||
padding: .5px
|
||||
}
|
||||
|
||||
.pear-col-space2 {
|
||||
margin: -1px
|
||||
}
|
||||
|
||||
.pear-col-space2>* {
|
||||
padding: 1px
|
||||
}
|
||||
|
||||
.pear-col-space4 {
|
||||
margin: -2px
|
||||
}
|
||||
|
||||
.pear-col-space4>* {
|
||||
padding: 2px
|
||||
}
|
||||
|
||||
.pear-col-space5 {
|
||||
margin: -2.5px
|
||||
}
|
||||
|
||||
.pear-col-space5>* {
|
||||
padding: 2.5px
|
||||
}
|
||||
|
||||
.pear-col-space6 {
|
||||
margin: -3px
|
||||
}
|
||||
|
||||
.pear-col-space6>* {
|
||||
padding: 3px
|
||||
}
|
||||
|
||||
.pear-col-space8 {
|
||||
margin: -4px
|
||||
}
|
||||
|
||||
.pear-col-space8>* {
|
||||
padding: 4px
|
||||
}
|
||||
|
||||
.pear-col-space10 {
|
||||
margin: -5px
|
||||
}
|
||||
|
||||
.pear-col-space10>* {
|
||||
padding: 5px
|
||||
}
|
||||
|
||||
.pear-col-space12 {
|
||||
margin: -6px
|
||||
}
|
||||
|
||||
.pear-col-space12>* {
|
||||
padding: 6px
|
||||
}
|
||||
|
||||
.pear-col-space14 {
|
||||
margin: -7px
|
||||
}
|
||||
|
||||
.pear-col-space14>* {
|
||||
padding: 7px
|
||||
}
|
||||
|
||||
.pear-col-space15 {
|
||||
margin: -7.5px
|
||||
}
|
||||
|
||||
.pear-col-space15>* {
|
||||
padding: 7.5px
|
||||
}
|
||||
|
||||
.pear-col-space16 {
|
||||
margin: -8px
|
||||
}
|
||||
|
||||
.pear-col-space16>* {
|
||||
padding: 8px
|
||||
}
|
||||
|
||||
.pear-col-space18 {
|
||||
margin: -9px
|
||||
}
|
||||
|
||||
.pear-col-space18>* {
|
||||
padding: 9px
|
||||
}
|
||||
|
||||
.pear-col-space20 {
|
||||
margin: -10px
|
||||
}
|
||||
|
||||
.pear-col-space20>* {
|
||||
padding: 10px
|
||||
}
|
||||
|
||||
.pear-col-space22 {
|
||||
margin: -11px
|
||||
}
|
||||
|
||||
.pear-col-space22>* {
|
||||
padding: 11px
|
||||
}
|
||||
|
||||
.pear-col-space24 {
|
||||
margin: -12px
|
||||
}
|
||||
|
||||
.pear-col-space24>* {
|
||||
padding: 12px
|
||||
}
|
||||
|
||||
.pear-col-space25 {
|
||||
margin: -12.5px
|
||||
}
|
||||
|
||||
.pear-col-space25>* {
|
||||
padding: 12.5px
|
||||
}
|
||||
|
||||
.pear-col-space26 {
|
||||
margin: -13px
|
||||
}
|
||||
|
||||
.pear-col-space26>* {
|
||||
padding: 13px
|
||||
}
|
||||
|
||||
.pear-col-space28 {
|
||||
margin: -14px
|
||||
}
|
||||
|
||||
.pear-col-space28>* {
|
||||
padding: 14px
|
||||
}
|
||||
|
||||
.pear-col-space30 {
|
||||
margin: -15px
|
||||
}
|
||||
|
||||
.pear-col-space30>* {
|
||||
padding: 15px
|
||||
}
|
90
public/static/component/pear/css/module/menuSearch.css
Normal file
90
public/static/component/pear/css/module/menuSearch.css
Normal file
@ -0,0 +1,90 @@
|
||||
/* 搜索面板 */
|
||||
.menu-search-content .layui-input {
|
||||
padding-left: 30px;
|
||||
}
|
||||
|
||||
.menu-search-content .layui-input:focus {
|
||||
border: 1px solid var(--global-primary-color)!important;
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
.menu-search-content {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.menu-search-input-wrapper {
|
||||
width: 100%;
|
||||
padding: 15px 15px;
|
||||
}
|
||||
|
||||
.menu-search-no-data {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
width: 100%;
|
||||
height: 122px;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.menu-search-list {
|
||||
width: 100%;
|
||||
padding: 5px 15px;
|
||||
}
|
||||
|
||||
.menu-search-list li {
|
||||
position: relative;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
flex-wrap: nowrap;
|
||||
height: 50px;
|
||||
margin-bottom: 8px;
|
||||
padding: 0px 10px;
|
||||
color: currentColor;
|
||||
font-size: 14px;
|
||||
border-radius: 4px;
|
||||
box-shadow: 0 1px 3px #d4d9e1;
|
||||
cursor: pointer;
|
||||
background-color: #fff;
|
||||
}
|
||||
|
||||
.menu-search-list li.this,
|
||||
.menu-search-list li:hover {
|
||||
background-color: var(--global-primary-color);
|
||||
color: white;
|
||||
}
|
||||
.menu-search-tips {
|
||||
margin-bottom: 15px;
|
||||
padding: 0 15px;
|
||||
width: 100%
|
||||
}
|
||||
|
||||
.menu-search-tips>div {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: flex-end;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.menu-search-tips .mr-1 {
|
||||
margin-right: 4px;
|
||||
}
|
||||
|
||||
.menu-search-tips .mr-5 {
|
||||
margin-right: 20px;
|
||||
}
|
||||
|
||||
.menu-search-tips .w-5 {
|
||||
width: 14px;
|
||||
}
|
||||
|
||||
.menu-search-tips kbd {
|
||||
line-height: 1.5;
|
||||
border: 1px solid #e5e7eb;
|
||||
font-size: 10px;
|
||||
text-align: center;
|
||||
padding: 2px 6px;
|
||||
font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, Liberation Mono, Courier New, monospace;
|
||||
border-radius: 5px;
|
||||
}
|
39
public/static/component/pear/css/module/messageCenter.css
Normal file
39
public/static/component/pear/css/module/messageCenter.css
Normal file
@ -0,0 +1,39 @@
|
||||
.pear-message-center {
|
||||
width: 360px;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.pear-message-center .layui-tab .layui-tab-title{
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.pear-message-center .layui-tab .layui-tab-title .layui-this::after {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.pear-message-center .layui-tab .layui-tab-title li {
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
.pear-message-center .message-item img {
|
||||
margin-left: 8px;
|
||||
width: 33px !important;
|
||||
height: 33px !important;
|
||||
border-radius: 50px;
|
||||
margin-right: 15px;
|
||||
}
|
||||
|
||||
.pear-message-center .message-item {
|
||||
height: 64px !important;
|
||||
line-height: 45px !important;
|
||||
padding-right: 20px;
|
||||
padding-left: 20px;
|
||||
border-bottom: 1px solid whitesmoke;
|
||||
padding-top: 10px;
|
||||
padding-bottom: 15px;
|
||||
}
|
||||
|
||||
.pear-message-center .message-item .extra {
|
||||
float: right;
|
||||
right: 10px;
|
||||
}
|
154
public/static/component/pear/css/module/page.css
Normal file
154
public/static/component/pear/css/module/page.css
Normal file
@ -0,0 +1,154 @@
|
||||
.pear-page {
|
||||
width: 100%;
|
||||
position: relative;
|
||||
overflow-y: auto;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.pear-page .dot {
|
||||
width: 5px;
|
||||
height: 24px;
|
||||
background-color: #5FB878;
|
||||
margin-top: 8px;
|
||||
margin-left: 15px;
|
||||
border-radius: 2px;
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.pear-page .pear-page-title {
|
||||
height: 40px;
|
||||
line-height: 40px;
|
||||
background-color: white;
|
||||
border: whitesmoke 1px solid;
|
||||
}
|
||||
|
||||
.pear-page .pear-page-content,
|
||||
.pear-page .pear-page-content iframe {
|
||||
width: 100%;
|
||||
height: calc(100% - 0px) !important;
|
||||
}
|
||||
|
||||
.pear-page .pear-page-content iframe {
|
||||
height: calc(100% - 4px) !important;
|
||||
}
|
||||
|
||||
.pear-page-loading {
|
||||
position: absolute;
|
||||
display: none;
|
||||
width: 100%;
|
||||
height: calc(100% - 0px) !important;
|
||||
background-color: #fff;
|
||||
top: 0px;
|
||||
z-index: 19;
|
||||
}
|
||||
|
||||
.pear-page-loading.close {
|
||||
animation: close 1s;
|
||||
-webkit-animation: close 1s;
|
||||
animation-fill-mode: forwards;
|
||||
}
|
||||
|
||||
.ball-loader {
|
||||
position: absolute;
|
||||
left: 50%;
|
||||
top: 50%;
|
||||
transform: translate(-50%, -50%);
|
||||
-ms-transform: translate(-50%, -50%);
|
||||
-webkit-transform: translate(-50%, -50%)
|
||||
}
|
||||
|
||||
.ball-loader>span,
|
||||
.signal-loader>span {
|
||||
background-color: #4aca85;
|
||||
display: inline-block
|
||||
}
|
||||
|
||||
.ball-loader>span:nth-child(1),
|
||||
.ball-loader.sm>span:nth-child(1),
|
||||
.signal-loader>span:nth-child(1),
|
||||
.signal-loader.sm>span:nth-child(1) {
|
||||
-webkit-animation-delay: 0s;
|
||||
animation-delay: 0s
|
||||
}
|
||||
|
||||
.ball-loader>span:nth-child(2),
|
||||
.ball-loader.sm>span:nth-child(2),
|
||||
.signal-loader>span:nth-child(2),
|
||||
.signal-loader.sm>span:nth-child(2) {
|
||||
-webkit-animation-delay: .1s;
|
||||
animation-delay: .1s
|
||||
}
|
||||
|
||||
.ball-loader>span:nth-child(3),
|
||||
.ball-loader.sm>span:nth-child(3),
|
||||
.signal-loader>span:nth-child(3),
|
||||
.signal-loader.sm>span:nth-child(3) {
|
||||
-webkit-animation-delay: .15s;
|
||||
animation-delay: .15s
|
||||
}
|
||||
|
||||
.ball-loader>span:nth-child(4),
|
||||
.ball-loader.sm>span:nth-child(4),
|
||||
.signal-loader>span:nth-child(4),
|
||||
.signal-loader.sm>span:nth-child(4) {
|
||||
-webkit-animation-delay: .2s;
|
||||
animation-delay: .2s
|
||||
}
|
||||
|
||||
.ball-loader>span {
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
margin: 0 3px;
|
||||
border-radius: 50%;
|
||||
transform: scale(0);
|
||||
-ms-transform: scale(0);
|
||||
-webkit-transform: scale(0);
|
||||
animation: ball-load 1s ease-in-out infinite;
|
||||
-webkit-animation: 1s ball-load ease-in-out infinite
|
||||
}
|
||||
|
||||
@-webkit-keyframes ball-load {
|
||||
0% {
|
||||
transform: scale(0);
|
||||
-webkit-transform: scale(0)
|
||||
}
|
||||
|
||||
50% {
|
||||
transform: scale(1);
|
||||
-webkit-transform: scale(1)
|
||||
}
|
||||
|
||||
100% {
|
||||
transform: scale(0);
|
||||
-webkit-transform: scale(0)
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes ball-load {
|
||||
0% {
|
||||
transform: scale(0);
|
||||
-webkit-transform: scale(0)
|
||||
}
|
||||
|
||||
50% {
|
||||
transform: scale(1);
|
||||
-webkit-transform: scale(1)
|
||||
}
|
||||
|
||||
100% {
|
||||
transform: scale(0);
|
||||
-webkit-transform: scale(0)
|
||||
}
|
||||
}
|
||||
|
||||
@-webkit-keyframes close {
|
||||
0% {
|
||||
opacity: 1;
|
||||
/*display: block;*/
|
||||
}
|
||||
|
||||
100% {
|
||||
opacity: 0;
|
||||
/*display: none;*/
|
||||
}
|
||||
}
|
314
public/static/component/pear/css/module/tabPage.css
Normal file
314
public/static/component/pear/css/module/tabPage.css
Normal file
@ -0,0 +1,314 @@
|
||||
.pear-tab-page {
|
||||
margin: 0px;
|
||||
overflow: hidden;
|
||||
height: 100% !important;
|
||||
}
|
||||
|
||||
.pear-tab-page .layui-tab-content {
|
||||
height: calc(100% - 42px) !important;
|
||||
}
|
||||
|
||||
.pear-tab-page .layui-tab-content .layui-tab-item {
|
||||
overflow-y: auto;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.pear-tab-page-menu{
|
||||
box-shadow: none;
|
||||
border-radius: 4px!important;
|
||||
overflow: hidden;
|
||||
box-shadow: 2px 0 6px rgba(0, 21, 41, .10);
|
||||
}
|
||||
|
||||
.pear-tab-page-menu .item{
|
||||
height: 20px;
|
||||
padding-left: 18px;
|
||||
padding-top: 7px;
|
||||
padding-bottom: 7px;
|
||||
color: #333;
|
||||
font-size: 13.5px;
|
||||
line-height: 20px;
|
||||
cursor:pointer;
|
||||
}
|
||||
.pear-tab-page-menu .item:hover{
|
||||
background: var(--global-primary-color);
|
||||
color: white;
|
||||
}
|
||||
|
||||
.pear-tab-page .layui-tab-content {
|
||||
padding: 0px;
|
||||
}
|
||||
|
||||
.pear-tab-page > .layui-tab-title {
|
||||
border: none;
|
||||
border: 1px solid whitesmoke;
|
||||
background-color: white;
|
||||
}
|
||||
|
||||
.pear-tab-page > .layui-tab-title li {
|
||||
border-right: 1px solid whitesmoke;
|
||||
color: dimgray;
|
||||
font-size: 13.5px;
|
||||
}
|
||||
|
||||
.pear-tab-page > .layui-tab-title .layui-tab-bar {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.pear-tab-page .layui-nav-more {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.pear-tab-page > .layui-tab-title .layui-this:after {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.pear-tab-page > .layui-tab-title .pear-tab-page-active {
|
||||
display: inline-block;
|
||||
background-color: lightgray;
|
||||
width: 8px;
|
||||
height: 8px;
|
||||
border-radius: 30px;
|
||||
margin-right: 12px;
|
||||
}
|
||||
|
||||
.pear-tab-page > .layui-tab-title .layui-this .pear-tab-page-active {
|
||||
background-color: var(--global-primary-color) !important;
|
||||
}
|
||||
|
||||
.pear-tab-page > .layui-tab-title .layui-tab-close:hover {
|
||||
background-color: white;
|
||||
line-height: 19px;
|
||||
color: gray;
|
||||
}
|
||||
|
||||
.pear-tab-page > .layui-tab-title .disable-close+.layui-tab-close {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.pear-tab-page > .layui-tab-title .able-close+.layui-tab-close {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.pear-tab-page .layui-tab-close{
|
||||
font-size: 13px;
|
||||
}
|
||||
|
||||
.pear-tab-page .layui-tab-control>li {
|
||||
position: absolute;
|
||||
top: 0px;
|
||||
height: 40px;
|
||||
line-height: 40px;
|
||||
width: 40px;
|
||||
background-color: white;
|
||||
border-top: whitesmoke 1px solid;
|
||||
border-bottom: whitesmoke 1px solid;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.pear-tab-page .layui-tab-prev {
|
||||
left: 0px;
|
||||
border-right: whitesmoke 1px solid;
|
||||
}
|
||||
|
||||
.pear-tab-page .layui-tab-next {
|
||||
right: 40px;
|
||||
border-left: 1px solid whitesmoke;
|
||||
}
|
||||
|
||||
.pear-tab-page .layui-tab-tool {
|
||||
right: 0px;
|
||||
border-left: 1px solid whitesmoke;
|
||||
}
|
||||
|
||||
.pear-tab-page .layui-tab-control .layui-tab-tool,
|
||||
.pear-tab-page .layui-tab-control .layui-tab-prev,
|
||||
.pear-tab-page .layui-tab-control .layui-tab-next {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.pear-tab-page.layui-tab-roll .layui-tab-control .layui-tab-prev,
|
||||
.pear-tab-page.layui-tab-roll .layui-tab-control .layui-tab-next {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.pear-tab-page.layui-tab-roll .layui-tab-control .layui-tab-next {
|
||||
right: 0px;
|
||||
border-right: 1px solid whitesmoke;
|
||||
}
|
||||
|
||||
.pear-tab-page.layui-tab-roll .layui-tab-title {
|
||||
padding-left: 40px;
|
||||
padding-right: 40px;
|
||||
}
|
||||
|
||||
.pear-tab-page.layui-tab-tool .layui-tab-control .layui-tab-tool {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.pear-tab-page.layui-tab-tool .layui-tab-title {
|
||||
padding-left: 0px;
|
||||
padding-right: 40px;
|
||||
}
|
||||
|
||||
.pear-tab-page.layui-tab-rollTool > .layui-tab-title {
|
||||
padding-left: 40px;
|
||||
padding-right: 80px;
|
||||
}
|
||||
|
||||
.pear-tab-page.layui-tab-rollTool .layui-tab-control .layui-tab-prev,
|
||||
.pear-tab-page.layui-tab-rollTool .layui-tab-control .layui-tab-next,
|
||||
.pear-tab-page.layui-tab-rollTool .layui-tab-control .layui-tab-tool {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.pear-tab-page .layui-tab-tool .layui-nav {
|
||||
position: absolute;
|
||||
height: 43px !important;
|
||||
top: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
padding: 0;
|
||||
background: 0 0;
|
||||
}
|
||||
|
||||
.pear-tab-page .layui-tab-tool .layui-nav-item {
|
||||
height: 40px;
|
||||
}
|
||||
|
||||
.pear-tab-page .layui-tab-tool .layui-nav-bar {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.pear-tab-page .layui-tab-tool .layui-nav-child {
|
||||
left: auto;
|
||||
top: 45px;
|
||||
right: 3px;
|
||||
width: 120px;
|
||||
border: 1px solid whitesmoke;
|
||||
}
|
||||
|
||||
.pear-tab-page .layui-tab-tool .layui-this a {
|
||||
background-color: #009688;
|
||||
}
|
||||
|
||||
.pear-tab-page-loading {
|
||||
position: absolute;
|
||||
display: none;
|
||||
width: 100%;
|
||||
height: calc(100% - 42px);
|
||||
top: 42px;
|
||||
z-index: 19;
|
||||
background-color: #fff
|
||||
}
|
||||
|
||||
.pear-tab-page-loading.close {
|
||||
animation: close 1s;
|
||||
-webkit-animation: close 1s;
|
||||
animation-fill-mode: forwards;
|
||||
}
|
||||
|
||||
.ball-loader {
|
||||
position: absolute;
|
||||
left: 50%;
|
||||
top: 50%;
|
||||
transform: translate(-50%, -50%);
|
||||
-ms-transform: translate(-50%, -50%);
|
||||
-webkit-transform: translate(-50%, -50%)
|
||||
}
|
||||
|
||||
.ball-loader>span,
|
||||
.signal-loader>span {
|
||||
background-color: var(--global-primary-color) !important;
|
||||
display: inline-block
|
||||
}
|
||||
|
||||
.ball-loader>span:nth-child(1),
|
||||
.ball-loader.sm>span:nth-child(1),
|
||||
.signal-loader>span:nth-child(1),
|
||||
.signal-loader.sm>span:nth-child(1) {
|
||||
-webkit-animation-delay: 0s;
|
||||
animation-delay: 0s
|
||||
}
|
||||
|
||||
.ball-loader>span:nth-child(2),
|
||||
.ball-loader.sm>span:nth-child(2),
|
||||
.signal-loader>span:nth-child(2),
|
||||
.signal-loader.sm>span:nth-child(2) {
|
||||
-webkit-animation-delay: .1s;
|
||||
animation-delay: .1s
|
||||
}
|
||||
|
||||
.ball-loader>span:nth-child(3),
|
||||
.ball-loader.sm>span:nth-child(3),
|
||||
.signal-loader>span:nth-child(3),
|
||||
.signal-loader.sm>span:nth-child(3) {
|
||||
-webkit-animation-delay: .15s;
|
||||
animation-delay: .15s
|
||||
}
|
||||
|
||||
.ball-loader>span:nth-child(4),
|
||||
.ball-loader.sm>span:nth-child(4),
|
||||
.signal-loader>span:nth-child(4),
|
||||
.signal-loader.sm>span:nth-child(4) {
|
||||
-webkit-animation-delay: .2s;
|
||||
animation-delay: .2s
|
||||
}
|
||||
|
||||
.ball-loader>span {
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
margin: 0 3px;
|
||||
border-radius: 50%;
|
||||
transform: scale(0);
|
||||
-ms-transform: scale(0);
|
||||
-webkit-transform: scale(0);
|
||||
animation: ball-load 1s ease-in-out infinite;
|
||||
-webkit-animation: 1s ball-load ease-in-out infinite
|
||||
}
|
||||
|
||||
@-webkit-keyframes ball-load {
|
||||
0% {
|
||||
transform: scale(0);
|
||||
-webkit-transform: scale(0)
|
||||
}
|
||||
|
||||
50% {
|
||||
transform: scale(1);
|
||||
-webkit-transform: scale(1)
|
||||
}
|
||||
|
||||
100% {
|
||||
transform: scale(0);
|
||||
-webkit-transform: scale(0)
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes ball-load {
|
||||
0% {
|
||||
transform: scale(0);
|
||||
-webkit-transform: scale(0)
|
||||
}
|
||||
|
||||
50% {
|
||||
transform: scale(1);
|
||||
-webkit-transform: scale(1)
|
||||
}
|
||||
|
||||
100% {
|
||||
transform: scale(0);
|
||||
-webkit-transform: scale(0)
|
||||
}
|
||||
}
|
||||
|
||||
@-webkit-keyframes close {
|
||||
0% {
|
||||
opacity: 1;
|
||||
/*display: block;*/
|
||||
}
|
||||
|
||||
100% {
|
||||
opacity: 0;
|
||||
/*display: none;*/
|
||||
}
|
||||
}
|
37
public/static/component/pear/module/extends/count.js
Normal file
37
public/static/component/pear/module/extends/count.js
Normal file
@ -0,0 +1,37 @@
|
||||
layui.define(['jquery', 'element'], function(exports) {
|
||||
"use strict";
|
||||
|
||||
var MOD_NAME = 'count',
|
||||
$ = layui.jquery,
|
||||
element = layui.element;
|
||||
|
||||
var count = new function() {
|
||||
|
||||
this.up = function(targetEle, options) {
|
||||
|
||||
options = options || {};
|
||||
|
||||
var $this = document.getElementById(targetEle),
|
||||
time = options.time,
|
||||
finalNum = options.num,
|
||||
regulator = options.regulator,
|
||||
step = finalNum / (time / regulator),
|
||||
count = 0.00,
|
||||
initial = 0;
|
||||
|
||||
var timer = setInterval(function() {
|
||||
count = count + step;
|
||||
if (count >= finalNum) {
|
||||
clearInterval(timer);
|
||||
count = finalNum;
|
||||
}
|
||||
var t = count.toFixed(options.bit?options.bit:0);;
|
||||
if (t == initial) return;
|
||||
initial = t;
|
||||
$this.innerHTML = initial;
|
||||
}, 30);
|
||||
}
|
||||
|
||||
}
|
||||
exports(MOD_NAME, count);
|
||||
});
|
95172
public/static/component/pear/module/extends/echarts.js
Normal file
95172
public/static/component/pear/module/extends/echarts.js
Normal file
File diff suppressed because it is too large
Load Diff
450
public/static/component/pear/module/extends/echartsTheme.js
Normal file
450
public/static/component/pear/module/extends/echartsTheme.js
Normal file
@ -0,0 +1,450 @@
|
||||
layui.define(function (exports) {
|
||||
exports('echartsTheme',
|
||||
{
|
||||
"color": [
|
||||
"#3fb1e3",
|
||||
"#6be6c1",
|
||||
"#626c91",
|
||||
"#a0a7e6",
|
||||
"#c4ebad",
|
||||
"#96dee8"
|
||||
],
|
||||
"backgroundColor": "rgba(252,252,252,0)",
|
||||
"textStyle": {},
|
||||
"title": {
|
||||
"textStyle": {
|
||||
"color": "#666666"
|
||||
},
|
||||
"subtextStyle": {
|
||||
"color": "#999999"
|
||||
}
|
||||
},
|
||||
"line": {
|
||||
"itemStyle": {
|
||||
"borderWidth": "3"
|
||||
},
|
||||
"lineStyle": {
|
||||
"width": "4"
|
||||
},
|
||||
"symbolSize": "10",
|
||||
"symbol": "emptyCircle",
|
||||
"smooth": true
|
||||
},
|
||||
"radar": {
|
||||
"itemStyle": {
|
||||
"borderWidth": "3"
|
||||
},
|
||||
"lineStyle": {
|
||||
"width": "4"
|
||||
},
|
||||
"symbolSize": "10",
|
||||
"symbol": "emptyCircle",
|
||||
"smooth": true
|
||||
},
|
||||
"bar": {
|
||||
"itemStyle": {
|
||||
"barBorderWidth": 0,
|
||||
"barBorderColor": "#ccc"
|
||||
},
|
||||
"emphasis": {
|
||||
"itemStyle": {
|
||||
"barBorderWidth": 0,
|
||||
"barBorderColor": "#ccc"
|
||||
}
|
||||
}
|
||||
},
|
||||
"pie": {
|
||||
"itemStyle": {
|
||||
"borderWidth": 0,
|
||||
"borderColor": "#ccc"
|
||||
},
|
||||
"emphasis": {
|
||||
"itemStyle": {
|
||||
"borderWidth": 0,
|
||||
"borderColor": "#ccc"
|
||||
}
|
||||
}
|
||||
},
|
||||
"scatter": {
|
||||
"itemStyle": {
|
||||
"borderWidth": 0,
|
||||
"borderColor": "#ccc"
|
||||
},
|
||||
"emphasis": {
|
||||
"itemStyle": {
|
||||
"borderWidth": 0,
|
||||
"borderColor": "#ccc"
|
||||
}
|
||||
}
|
||||
},
|
||||
"boxplot": {
|
||||
"itemStyle": {
|
||||
"borderWidth": 0,
|
||||
"borderColor": "#ccc"
|
||||
|
||||
},
|
||||
"emphasis": {
|
||||
"itemStyle": {
|
||||
"borderWidth": 0,
|
||||
"borderColor": "#ccc"
|
||||
}
|
||||
}
|
||||
},
|
||||
"parallel": {
|
||||
"itemStyle": {
|
||||
"borderWidth": 0,
|
||||
"borderColor": "#ccc"
|
||||
},
|
||||
"emphasis": {
|
||||
"itemStyle": {
|
||||
"borderWidth": 0,
|
||||
"borderColor": "#ccc"
|
||||
}
|
||||
}
|
||||
},
|
||||
"sankey": {
|
||||
"itemStyle": {
|
||||
"borderWidth": 0,
|
||||
"borderColor": "#ccc"
|
||||
},
|
||||
"emphasis": {
|
||||
"itemStyle": {
|
||||
"borderWidth": 0,
|
||||
"borderColor": "#ccc"
|
||||
}
|
||||
}
|
||||
},
|
||||
"funnel": {
|
||||
"itemStyle": {
|
||||
"borderWidth": 0,
|
||||
"borderColor": "#ccc"
|
||||
},
|
||||
"emphasis": {
|
||||
"itemStyle": {
|
||||
"borderWidth": 0,
|
||||
"borderColor": "#ccc"
|
||||
}
|
||||
}
|
||||
},
|
||||
"gauge": {
|
||||
"itemStyle": {
|
||||
"borderWidth": 0,
|
||||
"borderColor": "#ccc"
|
||||
},
|
||||
"emphasis": {
|
||||
"itemStyle": {
|
||||
"borderWidth": 0,
|
||||
"borderColor": "#ccc"
|
||||
}
|
||||
}
|
||||
},
|
||||
"candlestick": {
|
||||
"itemStyle": {
|
||||
"color": "#e6a0d2",
|
||||
"color0": "transparent",
|
||||
"borderColor": "#e6a0d2",
|
||||
"borderColor0": "#3fb1e3",
|
||||
"borderWidth": "2"
|
||||
}
|
||||
},
|
||||
"graph": {
|
||||
"itemStyle": {
|
||||
"borderWidth": 0,
|
||||
"borderColor": "#ccc"
|
||||
},
|
||||
"lineStyle": {
|
||||
"width": "1",
|
||||
"color": "#cccccc"
|
||||
},
|
||||
"symbolSize": "10",
|
||||
"symbol": "emptyCircle",
|
||||
"smooth": true,
|
||||
"color": [
|
||||
"#3fb1e3",
|
||||
"#6be6c1",
|
||||
"#626c91",
|
||||
"#a0a7e6",
|
||||
"#c4ebad",
|
||||
"#96dee8"
|
||||
],
|
||||
"label": {
|
||||
"color": "#ffffff"
|
||||
}
|
||||
},
|
||||
"map": {
|
||||
"itemStyle": {
|
||||
"areaColor": "#eeeeee",
|
||||
"borderColor": "#aaaaaa",
|
||||
"borderWidth": 0.5
|
||||
},
|
||||
"label": {
|
||||
"color": "#ffffff"
|
||||
},
|
||||
"emphasis": {
|
||||
"itemStyle": {
|
||||
"areaColor": "rgba(63,177,227,0.25)",
|
||||
"borderColor": "#3fb1e3",
|
||||
"borderWidth": 1
|
||||
},
|
||||
"label": {
|
||||
"color": "rgb(63,177,227)"
|
||||
}
|
||||
}
|
||||
},
|
||||
"geo": {
|
||||
"itemStyle": {
|
||||
"areaColor": "#eeeeee",
|
||||
"borderColor": "#aaaaaa",
|
||||
"borderWidth": 0.5
|
||||
},
|
||||
"label": {
|
||||
"color": "#ffffff"
|
||||
},
|
||||
"emphasis": {
|
||||
"itemStyle": {
|
||||
"areaColor": "rgba(63,177,227,0.25)",
|
||||
"borderColor": "#3fb1e3",
|
||||
"borderWidth": 1
|
||||
},
|
||||
"label": {
|
||||
"color": "rgb(63,177,227)"
|
||||
}
|
||||
}
|
||||
},
|
||||
"categoryAxis": {
|
||||
"axisLine": {
|
||||
"show": true,
|
||||
"lineStyle": {
|
||||
"color": "#cccccc"
|
||||
}
|
||||
},
|
||||
"axisTick": {
|
||||
"show": false,
|
||||
"lineStyle": {
|
||||
"color": "#333"
|
||||
}
|
||||
},
|
||||
"axisLabel": {
|
||||
"show": true,
|
||||
|
||||
"color": "#999999"
|
||||
|
||||
},
|
||||
"splitLine": {
|
||||
"show": true,
|
||||
"lineStyle": {
|
||||
"color": [
|
||||
"#eeeeee"
|
||||
]
|
||||
}
|
||||
},
|
||||
"splitArea": {
|
||||
"show": false,
|
||||
"areaStyle": {
|
||||
"color": [
|
||||
"rgba(250,250,250,0.05)",
|
||||
"rgba(200,200,200,0.02)"
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"valueAxis": {
|
||||
"axisLine": {
|
||||
"show": true,
|
||||
"lineStyle": {
|
||||
"color": "#cccccc"
|
||||
}
|
||||
},
|
||||
"axisTick": {
|
||||
"show": false,
|
||||
"lineStyle": {
|
||||
"color": "#333"
|
||||
}
|
||||
},
|
||||
"axisLabel": {
|
||||
"show": true,
|
||||
"color": "#999999"
|
||||
|
||||
},
|
||||
"splitLine": {
|
||||
"show": true,
|
||||
"lineStyle": {
|
||||
"color": [
|
||||
"#eeeeee"
|
||||
]
|
||||
}
|
||||
},
|
||||
"splitArea": {
|
||||
"show": false,
|
||||
"areaStyle": {
|
||||
"color": [
|
||||
"rgba(250,250,250,0.05)",
|
||||
"rgba(200,200,200,0.02)"
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"logAxis": {
|
||||
"axisLine": {
|
||||
"show": true,
|
||||
"lineStyle": {
|
||||
"color": "#cccccc"
|
||||
}
|
||||
},
|
||||
"axisTick": {
|
||||
"show": false,
|
||||
"lineStyle": {
|
||||
"color": "#333"
|
||||
}
|
||||
},
|
||||
"axisLabel": {
|
||||
"show": true,
|
||||
"color": "#999999"
|
||||
|
||||
},
|
||||
"splitLine": {
|
||||
"show": true,
|
||||
"lineStyle": {
|
||||
"color": [
|
||||
"#eeeeee"
|
||||
]
|
||||
}
|
||||
},
|
||||
"splitArea": {
|
||||
"show": false,
|
||||
"areaStyle": {
|
||||
"color": [
|
||||
"rgba(250,250,250,0.05)",
|
||||
"rgba(200,200,200,0.02)"
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"timeAxis": {
|
||||
"axisLine": {
|
||||
"show": true,
|
||||
"lineStyle": {
|
||||
"color": "#cccccc"
|
||||
}
|
||||
},
|
||||
"axisTick": {
|
||||
"show": false,
|
||||
"lineStyle": {
|
||||
"color": "#333"
|
||||
}
|
||||
},
|
||||
"axisLabel": {
|
||||
"show": true,
|
||||
|
||||
"color": "#999999"
|
||||
|
||||
},
|
||||
"splitLine": {
|
||||
"show": true,
|
||||
"lineStyle": {
|
||||
"color": [
|
||||
"#eeeeee"
|
||||
]
|
||||
}
|
||||
},
|
||||
"splitArea": {
|
||||
"show": false,
|
||||
"areaStyle": {
|
||||
"color": [
|
||||
"rgba(250,250,250,0.05)",
|
||||
"rgba(200,200,200,0.02)"
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"toolbox": {
|
||||
"iconStyle": {
|
||||
"borderColor": "#999999"
|
||||
},
|
||||
"emphasis": {
|
||||
"iconStyle": {
|
||||
"borderColor": "#666666"
|
||||
}
|
||||
}
|
||||
},
|
||||
"legend": {
|
||||
"textStyle": {
|
||||
"color": "#999999"
|
||||
}
|
||||
},
|
||||
"tooltip": {
|
||||
"axisPointer": {
|
||||
"lineStyle": {
|
||||
"color": "#cccccc",
|
||||
"width": 1
|
||||
},
|
||||
"crossStyle": {
|
||||
"color": "#cccccc",
|
||||
"width": 1
|
||||
}
|
||||
}
|
||||
},
|
||||
"timeline": {
|
||||
"lineStyle": {
|
||||
"color": "#626c91",
|
||||
"width": 1
|
||||
},
|
||||
"itemStyle": {
|
||||
"color": "#626c91",
|
||||
"borderWidth": 1
|
||||
|
||||
},
|
||||
"controlStyle": {
|
||||
"color": "#626c91",
|
||||
"borderColor": "#626c91",
|
||||
"borderWidth": 0.5
|
||||
},
|
||||
"checkpointStyle": {
|
||||
"color": "#3fb1e3",
|
||||
"borderColor": "rgba(63,177,227,0.15)"
|
||||
},
|
||||
"label": {
|
||||
"color": "#626c91"
|
||||
},
|
||||
"emphasis": {
|
||||
"itemStyle": {
|
||||
"color": "#626c91"
|
||||
},
|
||||
"controlStyle": {
|
||||
"color": "#626c91",
|
||||
"borderColor": "#626c91",
|
||||
"borderWidth": 0.5
|
||||
},
|
||||
"label": {
|
||||
"color": "#626c91"
|
||||
}
|
||||
}
|
||||
},
|
||||
"visualMap": {
|
||||
"color": [
|
||||
"#2a99c9",
|
||||
"#afe8ff"
|
||||
]
|
||||
},
|
||||
"dataZoom": {
|
||||
"backgroundColor": "rgba(255,255,255,0)",
|
||||
"dataBackgroundColor": "rgba(222,222,222,1)",
|
||||
"fillerColor": "rgba(114,230,212,0.25)",
|
||||
"handleColor": "#cccccc",
|
||||
"handleSize": "100%",
|
||||
"textStyle": {
|
||||
"color": "#999999"
|
||||
}
|
||||
},
|
||||
"markPoint": {
|
||||
"label": {
|
||||
"color": "#ffffff"
|
||||
},
|
||||
"emphasis": {
|
||||
"label": {
|
||||
"color": "#ffffff"
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
503
public/static/component/pear/module/extends/nprogress.js
Normal file
503
public/static/component/pear/module/extends/nprogress.js
Normal file
@ -0,0 +1,503 @@
|
||||
/* NProgress, (c) 2013, 2014 Rico Sta. Cruz - http://ricostacruz.com/nprogress
|
||||
* @license MIT */
|
||||
|
||||
;(function(root, factory) {
|
||||
|
||||
if (typeof define === 'function' && define.amd) {
|
||||
define(factory);
|
||||
} else if (typeof exports === 'object') {
|
||||
module.exports = factory();
|
||||
} else {
|
||||
root.NProgress = factory();
|
||||
}
|
||||
|
||||
})(this, function() {
|
||||
var NProgress = {};
|
||||
|
||||
NProgress.version = '0.2.0';
|
||||
|
||||
var Settings = NProgress.settings = {
|
||||
minimum: 0.08,
|
||||
easing: 'linear',
|
||||
positionUsing: '',
|
||||
speed: 200,
|
||||
trickle: true,
|
||||
trickleSpeed: 200,
|
||||
showSpinner: true,
|
||||
barSelector: '[role="bar"]',
|
||||
spinnerSelector: '[role="spinner"]',
|
||||
parent: 'body',
|
||||
template: '<div class="bar" role="bar"><div class="peg"></div></div><div class="spinner" role="spinner"><div class="spinner-icon"></div></div>'
|
||||
};
|
||||
|
||||
/**
|
||||
* Updates configuration.
|
||||
*
|
||||
* NProgress.configure({
|
||||
* minimum: 0.1
|
||||
* });
|
||||
*/
|
||||
NProgress.configure = function(options) {
|
||||
var key, value;
|
||||
for (key in options) {
|
||||
value = options[key];
|
||||
if (value !== undefined && options.hasOwnProperty(key)) Settings[key] = value;
|
||||
}
|
||||
|
||||
return this;
|
||||
};
|
||||
|
||||
/**
|
||||
* Last number.
|
||||
*/
|
||||
|
||||
NProgress.status = null;
|
||||
|
||||
/**
|
||||
* Sets the progress bar status, where `n` is a number from `0.0` to `1.0`.
|
||||
*
|
||||
* NProgress.set(0.4);
|
||||
* NProgress.set(1.0);
|
||||
*/
|
||||
|
||||
NProgress.set = function(n) {
|
||||
var started = NProgress.isStarted();
|
||||
|
||||
n = clamp(n, Settings.minimum, 1);
|
||||
NProgress.status = (n === 1 ? null : n);
|
||||
|
||||
var progress = NProgress.render(!started),
|
||||
bar = progress.querySelector(Settings.barSelector),
|
||||
speed = Settings.speed,
|
||||
ease = Settings.easing;
|
||||
|
||||
progress.offsetWidth; /* Repaint */
|
||||
|
||||
queue(function(next) {
|
||||
// Set positionUsing if it hasn't already been set
|
||||
if (Settings.positionUsing === '') Settings.positionUsing = NProgress.getPositioningCSS();
|
||||
|
||||
// Add transition
|
||||
css(bar, barPositionCSS(n, speed, ease));
|
||||
|
||||
if (n === 1) {
|
||||
// Fade out
|
||||
css(progress, {
|
||||
transition: 'none',
|
||||
opacity: 1
|
||||
});
|
||||
progress.offsetWidth; /* Repaint */
|
||||
|
||||
setTimeout(function() {
|
||||
css(progress, {
|
||||
transition: 'all ' + speed + 'ms linear',
|
||||
opacity: 0
|
||||
});
|
||||
setTimeout(function() {
|
||||
NProgress.remove();
|
||||
next();
|
||||
}, speed);
|
||||
}, speed);
|
||||
} else {
|
||||
setTimeout(next, speed);
|
||||
}
|
||||
});
|
||||
|
||||
return this;
|
||||
};
|
||||
|
||||
NProgress.isStarted = function() {
|
||||
return typeof NProgress.status === 'number';
|
||||
};
|
||||
|
||||
/**
|
||||
* Shows the progress bar.
|
||||
* This is the same as setting the status to 0%, except that it doesn't go backwards.
|
||||
*
|
||||
* NProgress.start();
|
||||
*
|
||||
*/
|
||||
NProgress.start = function() {
|
||||
if (!NProgress.status) NProgress.set(0);
|
||||
|
||||
var work = function() {
|
||||
setTimeout(function() {
|
||||
if (!NProgress.status) return;
|
||||
NProgress.trickle();
|
||||
work();
|
||||
}, Settings.trickleSpeed);
|
||||
};
|
||||
|
||||
if (Settings.trickle) work();
|
||||
|
||||
return this;
|
||||
};
|
||||
|
||||
/**
|
||||
* Hides the progress bar.
|
||||
* This is the *sort of* the same as setting the status to 100%, with the
|
||||
* difference being `done()` makes some placebo effect of some realistic motion.
|
||||
*
|
||||
* NProgress.done();
|
||||
*
|
||||
* If `true` is passed, it will show the progress bar even if its hidden.
|
||||
*
|
||||
* NProgress.done(true);
|
||||
*/
|
||||
|
||||
NProgress.done = function(force) {
|
||||
if (!force && !NProgress.status) return this;
|
||||
|
||||
return NProgress.inc(0.3 + 0.5 * Math.random()).set(1);
|
||||
};
|
||||
|
||||
/**
|
||||
* Increments by a random amount.
|
||||
*/
|
||||
|
||||
NProgress.inc = function(amount) {
|
||||
var n = NProgress.status;
|
||||
|
||||
if (!n) {
|
||||
return NProgress.start();
|
||||
} else if(n > 1) {
|
||||
return;
|
||||
} else {
|
||||
if (typeof amount !== 'number') {
|
||||
if (n >= 0 && n < 0.2) { amount = 0.1; }
|
||||
else if (n >= 0.2 && n < 0.5) { amount = 0.04; }
|
||||
else if (n >= 0.5 && n < 0.8) { amount = 0.02; }
|
||||
else if (n >= 0.8 && n < 0.99) { amount = 0.005; }
|
||||
else { amount = 0; }
|
||||
}
|
||||
|
||||
n = clamp(n + amount, 0, 0.994);
|
||||
return NProgress.set(n);
|
||||
}
|
||||
};
|
||||
|
||||
NProgress.trickle = function() {
|
||||
return NProgress.inc();
|
||||
};
|
||||
|
||||
/**
|
||||
* Waits for all supplied jQuery promises and
|
||||
* increases the progress as the promises resolve.
|
||||
*
|
||||
* @param $promise jQUery Promise
|
||||
*/
|
||||
(function() {
|
||||
var initial = 0, current = 0;
|
||||
|
||||
NProgress.promise = function($promise) {
|
||||
if (!$promise || $promise.state() === "resolved") {
|
||||
return this;
|
||||
}
|
||||
|
||||
if (current === 0) {
|
||||
NProgress.start();
|
||||
}
|
||||
|
||||
initial++;
|
||||
current++;
|
||||
|
||||
$promise.always(function() {
|
||||
current--;
|
||||
if (current === 0) {
|
||||
initial = 0;
|
||||
NProgress.done();
|
||||
} else {
|
||||
NProgress.set((initial - current) / initial);
|
||||
}
|
||||
});
|
||||
|
||||
return this;
|
||||
};
|
||||
|
||||
})();
|
||||
|
||||
/**
|
||||
* (Internal) renders the progress bar markup based on the `template`
|
||||
* setting.
|
||||
*/
|
||||
|
||||
NProgress.render = function(fromStart) {
|
||||
if (NProgress.isRendered()) return document.getElementById('nprogress');
|
||||
|
||||
addClass(document.documentElement, 'nprogress-busy');
|
||||
|
||||
var progress = document.createElement('div');
|
||||
progress.id = 'nprogress';
|
||||
progress.innerHTML = Settings.template;
|
||||
|
||||
|
||||
|
||||
var bar = progress.querySelector(Settings.barSelector),
|
||||
perc = fromStart ? '-100' : toBarPerc(NProgress.status || 0),
|
||||
parent = isDOM(Settings.parent)
|
||||
? Settings.parent
|
||||
: document.querySelector(Settings.parent),
|
||||
spinner
|
||||
|
||||
css(bar, {
|
||||
transition: 'all 0 linear',
|
||||
transform: 'translate3d(' + perc + '%,0,0)'
|
||||
});
|
||||
|
||||
if (!Settings.showSpinner) {
|
||||
spinner = progress.querySelector(Settings.spinnerSelector);
|
||||
spinner && removeElement(spinner);
|
||||
}
|
||||
|
||||
if (parent != document.body) {
|
||||
addClass(parent, 'nprogress-custom-parent');
|
||||
}
|
||||
|
||||
parent.appendChild(progress);
|
||||
return progress;
|
||||
};
|
||||
|
||||
/**
|
||||
* Removes the element. Opposite of render().
|
||||
*/
|
||||
|
||||
NProgress.remove = function() {
|
||||
removeClass(document.documentElement, 'nprogress-busy');
|
||||
var parent = isDOM(Settings.parent)
|
||||
? Settings.parent
|
||||
: document.querySelector(Settings.parent)
|
||||
removeClass(parent, 'nprogress-custom-parent')
|
||||
var progress = document.getElementById('nprogress');
|
||||
progress && removeElement(progress);
|
||||
};
|
||||
|
||||
/**
|
||||
* Checks if the progress bar is rendered.
|
||||
*/
|
||||
|
||||
NProgress.isRendered = function() {
|
||||
return !!document.getElementById('nprogress');
|
||||
};
|
||||
|
||||
/**
|
||||
* Determine which positioning CSS rule to use.
|
||||
*/
|
||||
|
||||
NProgress.getPositioningCSS = function() {
|
||||
// Sniff on document.body.style
|
||||
var bodyStyle = document.body.style;
|
||||
|
||||
// Sniff prefixes
|
||||
var vendorPrefix = ('WebkitTransform' in bodyStyle) ? 'Webkit' :
|
||||
('MozTransform' in bodyStyle) ? 'Moz' :
|
||||
('msTransform' in bodyStyle) ? 'ms' :
|
||||
('OTransform' in bodyStyle) ? 'O' : '';
|
||||
|
||||
if (vendorPrefix + 'Perspective' in bodyStyle) {
|
||||
// Modern browsers with 3D support, e.g. Webkit, IE10
|
||||
return 'translate3d';
|
||||
} else if (vendorPrefix + 'Transform' in bodyStyle) {
|
||||
// Browsers without 3D support, e.g. IE9
|
||||
return 'translate';
|
||||
} else {
|
||||
// Browsers without translate() support, e.g. IE7-8
|
||||
return 'margin';
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Helpers
|
||||
*/
|
||||
|
||||
function isDOM (obj) {
|
||||
if (typeof HTMLElement === 'object') {
|
||||
return obj instanceof HTMLElement
|
||||
}
|
||||
return (
|
||||
obj &&
|
||||
typeof obj === 'object' &&
|
||||
obj.nodeType === 1 &&
|
||||
typeof obj.nodeName === 'string'
|
||||
)
|
||||
}
|
||||
|
||||
function clamp(n, min, max) {
|
||||
if (n < min) return min;
|
||||
if (n > max) return max;
|
||||
return n;
|
||||
}
|
||||
|
||||
/**
|
||||
* (Internal) converts a percentage (`0..1`) to a bar translateX
|
||||
* percentage (`-100%..0%`).
|
||||
*/
|
||||
|
||||
function toBarPerc(n) {
|
||||
return (-1 + n) * 100;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* (Internal) returns the correct CSS for changing the bar's
|
||||
* position given an n percentage, and speed and ease from Settings
|
||||
*/
|
||||
|
||||
function barPositionCSS(n, speed, ease) {
|
||||
var barCSS;
|
||||
|
||||
if (Settings.positionUsing === 'translate3d') {
|
||||
barCSS = { transform: 'translate3d('+toBarPerc(n)+'%,0,0)' };
|
||||
} else if (Settings.positionUsing === 'translate') {
|
||||
barCSS = { transform: 'translate('+toBarPerc(n)+'%,0)' };
|
||||
} else {
|
||||
barCSS = { 'margin-left': toBarPerc(n)+'%' };
|
||||
}
|
||||
|
||||
barCSS.transition = 'all '+speed+'ms '+ease;
|
||||
|
||||
return barCSS;
|
||||
}
|
||||
|
||||
/**
|
||||
* (Internal) Queues a function to be executed.
|
||||
*/
|
||||
|
||||
var queue = (function() {
|
||||
var pending = [];
|
||||
|
||||
function next() {
|
||||
var fn = pending.shift();
|
||||
if (fn) {
|
||||
fn(next);
|
||||
}
|
||||
}
|
||||
|
||||
return function(fn) {
|
||||
pending.push(fn);
|
||||
if (pending.length == 1) next();
|
||||
};
|
||||
})();
|
||||
|
||||
/**
|
||||
* (Internal) Applies css properties to an element, similar to the jQuery
|
||||
* css method.
|
||||
*
|
||||
* While this helper does assist with vendor prefixed property names, it
|
||||
* does not perform any manipulation of values prior to setting styles.
|
||||
*/
|
||||
|
||||
var css = (function() {
|
||||
var cssPrefixes = [ 'Webkit', 'O', 'Moz', 'ms' ],
|
||||
cssProps = {};
|
||||
|
||||
function camelCase(string) {
|
||||
return string.replace(/^-ms-/, 'ms-').replace(/-([\da-z])/gi, function(match, letter) {
|
||||
return letter.toUpperCase();
|
||||
});
|
||||
}
|
||||
|
||||
function getVendorProp(name) {
|
||||
var style = document.body.style;
|
||||
if (name in style) return name;
|
||||
|
||||
var i = cssPrefixes.length,
|
||||
capName = name.charAt(0).toUpperCase() + name.slice(1),
|
||||
vendorName;
|
||||
while (i--) {
|
||||
vendorName = cssPrefixes[i] + capName;
|
||||
if (vendorName in style) return vendorName;
|
||||
}
|
||||
|
||||
return name;
|
||||
}
|
||||
|
||||
function getStyleProp(name) {
|
||||
name = camelCase(name);
|
||||
return cssProps[name] || (cssProps[name] = getVendorProp(name));
|
||||
}
|
||||
|
||||
function applyCss(element, prop, value) {
|
||||
prop = getStyleProp(prop);
|
||||
element.style[prop] = value;
|
||||
}
|
||||
|
||||
return function(element, properties) {
|
||||
var args = arguments,
|
||||
prop,
|
||||
value;
|
||||
|
||||
if (args.length == 2) {
|
||||
for (prop in properties) {
|
||||
value = properties[prop];
|
||||
if (value !== undefined && properties.hasOwnProperty(prop)) applyCss(element, prop, value);
|
||||
}
|
||||
} else {
|
||||
applyCss(element, args[1], args[2]);
|
||||
}
|
||||
}
|
||||
})();
|
||||
|
||||
/**
|
||||
* (Internal) Determines if an element or space separated list of class names contains a class name.
|
||||
*/
|
||||
|
||||
function hasClass(element, name) {
|
||||
var list = typeof element == 'string' ? element : classList(element);
|
||||
return list.indexOf(' ' + name + ' ') >= 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* (Internal) Adds a class to an element.
|
||||
*/
|
||||
|
||||
function addClass(element, name) {
|
||||
var oldList = classList(element),
|
||||
newList = oldList + name;
|
||||
|
||||
if (hasClass(oldList, name)) return;
|
||||
|
||||
// Trim the opening space.
|
||||
element.className = newList.substring(1);
|
||||
}
|
||||
|
||||
/**
|
||||
* (Internal) Removes a class from an element.
|
||||
*/
|
||||
|
||||
function removeClass(element, name) {
|
||||
var oldList = classList(element),
|
||||
newList;
|
||||
|
||||
if (!hasClass(element, name)) return;
|
||||
|
||||
// Replace the class name.
|
||||
newList = oldList.replace(' ' + name + ' ', ' ');
|
||||
|
||||
// Trim the opening and closing spaces.
|
||||
element.className = newList.substring(1, newList.length - 1);
|
||||
}
|
||||
|
||||
/**
|
||||
* (Internal) Gets a space separated list of the class names on the element.
|
||||
* The list is wrapped with a single space on each end to facilitate finding
|
||||
* matches within the list.
|
||||
*/
|
||||
|
||||
function classList(element) {
|
||||
return (' ' + (element && element.className || '') + ' ').replace(/\s+/gi, ' ');
|
||||
}
|
||||
|
||||
/**
|
||||
* (Internal) Removes an element from the DOM.
|
||||
*/
|
||||
|
||||
function removeElement(element) {
|
||||
element && element.parentNode && element.parentNode.removeChild(element);
|
||||
}
|
||||
|
||||
return NProgress;
|
||||
});
|
||||
|
||||
layui.define([], function(exports) {
|
||||
exports('nprogress', NProgress);
|
||||
});
|
47
public/static/component/pear/module/extends/popup.js
Normal file
47
public/static/component/pear/module/extends/popup.js
Normal file
@ -0,0 +1,47 @@
|
||||
layui.define(['layer'], function(exports) {
|
||||
"use strict";
|
||||
|
||||
var MOD_NAME = 'popup',
|
||||
layer = layui.layer;
|
||||
|
||||
var popup = new function() {
|
||||
|
||||
this.success = function(msg) {
|
||||
layer.msg(msg, {
|
||||
icon: 1,
|
||||
time: 1000
|
||||
})
|
||||
},
|
||||
this.failure = function(msg) {
|
||||
layer.msg(msg, {
|
||||
icon: 2,
|
||||
time: 1000
|
||||
})
|
||||
},
|
||||
this.warning = function(msg) {
|
||||
layer.msg(msg, {
|
||||
icon: 3,
|
||||
time: 1000
|
||||
})
|
||||
},
|
||||
this.success = function(msg, callback) {
|
||||
layer.msg(msg, {
|
||||
icon: 1,
|
||||
time: 1000
|
||||
}, callback);
|
||||
},
|
||||
this.failure = function(msg, callback) {
|
||||
layer.msg(msg, {
|
||||
icon: 2,
|
||||
time: 1000
|
||||
}, callback);
|
||||
},
|
||||
this.warming = function(msg, callback) {
|
||||
layer.msg(msg, {
|
||||
icon: 3,
|
||||
time: 1000
|
||||
}, callback);
|
||||
}
|
||||
};
|
||||
exports(MOD_NAME, popup);
|
||||
})
|
1225
public/static/component/pear/module/extends/toast.js
Normal file
1225
public/static/component/pear/module/extends/toast.js
Normal file
File diff suppressed because it is too large
Load Diff
2059
public/static/component/pear/module/extends/yaml.js
Normal file
2059
public/static/component/pear/module/extends/yaml.js
Normal file
File diff suppressed because it is too large
Load Diff
233
public/static/component/pear/module/menuSearch.js
Normal file
233
public/static/component/pear/module/menuSearch.js
Normal file
@ -0,0 +1,233 @@
|
||||
layui.define(['jquery', 'tools'], function (exports) {
|
||||
"use strict";
|
||||
|
||||
/**
|
||||
* @since Pear Admin 4.0
|
||||
*
|
||||
* Button component
|
||||
* */
|
||||
var MOD_NAME = 'menuSearch',
|
||||
tools = layui.tools,
|
||||
$ = layui.jquery;
|
||||
|
||||
var menuSearch = function (opt) {
|
||||
this.option = opt;
|
||||
};
|
||||
|
||||
/**
|
||||
* @since Pear Admin 4.0
|
||||
*
|
||||
* Button start loading
|
||||
* */
|
||||
menuSearch.prototype.render = function (opt) {
|
||||
|
||||
var options = {
|
||||
select: opt.select,
|
||||
elem: opt.elem,
|
||||
dataProvider: opt.dataProvider,
|
||||
}
|
||||
|
||||
$('body').on("click", options.elem, function () {
|
||||
|
||||
var _html = [
|
||||
`<div class="menu-search-content">
|
||||
<div class="layui-form menu-search-input-wrapper">
|
||||
<div class=" layui-input-wrap layui-input-wrap-prefix">
|
||||
<div class="layui-input-prefix">
|
||||
<i class="layui-icon layui-icon-search"></i>
|
||||
</div>
|
||||
<input type="text" name="menuSearch" value="" placeholder="搜索菜单" autocomplete="off" class="layui-input" lay-affix="clear">
|
||||
</div>
|
||||
</div>
|
||||
<div class="menu-search-no-data">暂 无 信 息</div>
|
||||
<ul class="menu-search-list">
|
||||
</ul>
|
||||
<div class="menu-search-tips">
|
||||
<div>
|
||||
<span class="mr-1">选择</span><kbd class="mr-1 w-5"> ↑ </kbd><kbd class="mr-5 w-5"> ↓ </kbd>
|
||||
<span class="mr-1">确定</span><kbd class="mr-5"> Enter </kbd><span class="mr-1">关闭</span><kbd class="mr-1"> Esc </kbd>
|
||||
</div>
|
||||
</div>
|
||||
</div>`
|
||||
].join('');
|
||||
|
||||
layer.open({
|
||||
type: 1,
|
||||
offset: "10%",
|
||||
area: ['600px'],
|
||||
title: false,
|
||||
closeBtn: 0,
|
||||
shadeClose: true,
|
||||
anim: 0,
|
||||
move: false,
|
||||
content: _html,
|
||||
success: function (layero, layeridx) {
|
||||
|
||||
var $layer = layero;
|
||||
var $content = $(layero).children('.layui-layer-content');
|
||||
var $input = $(".menu-search-input-wrapper input");
|
||||
var $noData = $(".menu-search-no-data");
|
||||
var $list = $(".menu-search-list");
|
||||
var menuData = options.dataProvider();
|
||||
|
||||
$layer.css("border-radius", "6px");
|
||||
$input.off("focus").focus();
|
||||
|
||||
// 搜索输入事件
|
||||
$input.off("input").on("input", tools.debounce(function () {
|
||||
var keywords = $input.val().trim();
|
||||
var filteredMenus = filterHandle(menuData, keywords);
|
||||
|
||||
if (filteredMenus.length) {
|
||||
var tiledMenus = tiledHandle(filteredMenus);
|
||||
var listHtml = createList(tiledMenus);
|
||||
$noData.css("display", "none");
|
||||
$list.html("").append(listHtml).children(":first").addClass("this")
|
||||
} else {
|
||||
$list.html("");
|
||||
$noData.css("display", "flex");
|
||||
}
|
||||
var currentHeight = $(".menu-search-content").outerHeight()
|
||||
$layer.css("height", currentHeight);
|
||||
$content.css("height", currentHeight);
|
||||
}, 500)
|
||||
)
|
||||
|
||||
// 列表点击事件
|
||||
$list.off("click").on("click", "li", function () {
|
||||
var id = $(this).attr("smenu-id");
|
||||
var title = $(this).attr("smenu-title");
|
||||
var url = $(this).attr("smenu-url");
|
||||
var type = $(this).attr("smenu-type");
|
||||
var openType = $(this).attr("smenu-open-type");
|
||||
|
||||
options.select({ id, title, url, type, openType });
|
||||
|
||||
layer.close(layeridx);
|
||||
})
|
||||
|
||||
$list.off('mouseenter').on("mouseenter", "li", function () {
|
||||
$(".menu-search-list li.this").removeClass("this");
|
||||
$(this).addClass("this");
|
||||
}).off("mouseleave").on("mouseleave", "li", function () {
|
||||
$(this).removeClass("this");
|
||||
})
|
||||
|
||||
// 监听键盘事件
|
||||
$('.menu-search-content').off("keydown").keydown(function (e) {
|
||||
if (e.keyCode === 13 || e.keyCode === 32) {
|
||||
e.preventDefault();
|
||||
var that = $(".menu-search-list li.this");
|
||||
var id = that.attr("smenu-id");
|
||||
var title = that.attr("smenu-title");
|
||||
var url = that.attr("smenu-url");
|
||||
var type = that.attr("smenu-type");
|
||||
var openType = that.attr("smenu-open-type");
|
||||
|
||||
options.select({ id, title, url, type, openType });
|
||||
|
||||
layer.close(layeridx);
|
||||
} else if (e.keyCode === 38) {
|
||||
e.preventDefault();
|
||||
var prevEl = $(".menu-search-list li.this").prev();
|
||||
$(".menu-search-list li.this").removeClass("this");
|
||||
if (prevEl.length !== 0) {
|
||||
prevEl.addClass("this");
|
||||
} else {
|
||||
$list.children().last().addClass("this");
|
||||
}
|
||||
} else if (e.keyCode === 40) {
|
||||
e.preventDefault();
|
||||
var nextEl = $(".menu-search-list li.this").next();
|
||||
$(".menu-search-list li.this").removeClass("this");
|
||||
if (nextEl.length !== 0) {
|
||||
nextEl.addClass("this");
|
||||
} else {
|
||||
$list.children().first().addClass("this");
|
||||
}
|
||||
} else if (e.keyCode === 27) {
|
||||
e.preventDefault();
|
||||
layer.close(layeridx);
|
||||
}
|
||||
})
|
||||
}
|
||||
})
|
||||
});
|
||||
|
||||
return new menuSearch(options);
|
||||
}
|
||||
|
||||
/**
|
||||
* @since Pear Admin 4.0
|
||||
*
|
||||
* 创建结果列表
|
||||
*/
|
||||
var createList = function (data) {
|
||||
var listHtml = '';
|
||||
$.each(data, function (index, item) {
|
||||
listHtml += `<li smenu-open-type="${item.info.openType}" smenu-id="${item.info.id}" smenu-icon="'${item.info.icon}" smenu-url="${item.info.href}" smenu-title="${item.info.title}" smenu-type="${item.info.type}">
|
||||
<span><i style="margin-right:10px" class="${item.info.icon}"></i>${item.path}</span>
|
||||
<i class="layui-icon layui-icon-right"></i>
|
||||
</li>`
|
||||
})
|
||||
return listHtml;
|
||||
}
|
||||
|
||||
/**
|
||||
* @since Pear Admin 4.0
|
||||
*
|
||||
* Tree 转 path 列表
|
||||
*/
|
||||
var tiledHandle = function (data) {
|
||||
var tiledMenus = [];
|
||||
var treeTiled = function (data, content) {
|
||||
var path = "";
|
||||
var separator = " / ";
|
||||
if (!content) content = "";
|
||||
$.each(data, function (index, item) {
|
||||
if (item.children && item.children.length) {
|
||||
path += content + item.title + separator;
|
||||
var childPath = treeTiled(item.children, path);
|
||||
path += childPath;
|
||||
if (!childPath) path = ""; // 重置路径
|
||||
} else {
|
||||
path += content + item.title
|
||||
tiledMenus.push({ path: path, info: item });
|
||||
path = ""; //重置路径
|
||||
}
|
||||
})
|
||||
return path;
|
||||
};
|
||||
treeTiled(data);
|
||||
|
||||
return tiledMenus;
|
||||
}
|
||||
|
||||
/**
|
||||
* @since Pear Admin 4.0
|
||||
*
|
||||
* 查询匹配算法
|
||||
*/
|
||||
var filterHandle = function (filterData, val) {
|
||||
if (!val) return [];
|
||||
var filteredMenus = [];
|
||||
filterData = $.extend(true, {}, filterData);
|
||||
$.each(filterData, function (index, item) {
|
||||
if (item.children && item.children.length) {
|
||||
var children = filterHandle(item.children, val)
|
||||
var obj = $.extend({}, item, { children: children });
|
||||
if (children && children.length) {
|
||||
filteredMenus.push(obj);
|
||||
} else if (item.title.indexOf(val) >= 0) {
|
||||
item.children = []; // 父级匹配但子级不匹配,就去除子级
|
||||
filteredMenus.push($.extend({}, item));
|
||||
}
|
||||
} else if (item.title.indexOf(val) >= 0) {
|
||||
filteredMenus.push(item);
|
||||
}
|
||||
})
|
||||
return filteredMenus;
|
||||
}
|
||||
|
||||
exports(MOD_NAME, new menuSearch());
|
||||
});
|
85
public/static/component/pear/module/messageCenter.js
Normal file
85
public/static/component/pear/module/messageCenter.js
Normal file
@ -0,0 +1,85 @@
|
||||
layui.define(['table', 'jquery', 'element', 'dropdown'], function (exports) {
|
||||
"use strict";
|
||||
|
||||
var MOD_NAME = 'messageCenter',
|
||||
$ = layui.jquery,
|
||||
dropdown = layui.dropdown;
|
||||
|
||||
var message = function (opt) {
|
||||
this.option = opt;
|
||||
};
|
||||
|
||||
message.prototype.render = function (opt) {
|
||||
var option = {
|
||||
elem: opt.elem,
|
||||
url: opt.url ? opt.url : false,
|
||||
height: opt.height,
|
||||
data: opt.data
|
||||
}
|
||||
if (option.url != false) {
|
||||
$.get(option.url, function (result) {
|
||||
const { code, success, data } = result;
|
||||
$(`${opt.elem}`).append(`<li class="layui-nav-item" lay-unselect="">
|
||||
<a href="#" class="notice layui-icon layui-icon-notice"></a>
|
||||
</li>`);
|
||||
if (code == 200 || success) {
|
||||
option.data = data;
|
||||
dropdown.render({
|
||||
elem: option.elem,
|
||||
align: "center",
|
||||
content: createHtml(option),
|
||||
})
|
||||
}
|
||||
});
|
||||
}
|
||||
return new message(option);
|
||||
}
|
||||
|
||||
message.prototype.click = function (callback) {
|
||||
$("*[notice-id]").click(function (event) {
|
||||
event.preventDefault();
|
||||
var id = $(this).attr("notice-id");
|
||||
var title = $(this).attr("notice-title");
|
||||
var context = $(this).attr("notice-context");
|
||||
var form = $(this).attr("notice-form");
|
||||
callback(id, title, context, form);
|
||||
})
|
||||
}
|
||||
|
||||
function createHtml(option) {
|
||||
|
||||
var count = 0;
|
||||
var notice = '<div class="pear-message-center"><div class="layui-tab layui-tab-brief">'
|
||||
var noticeTitle = '<ul class="layui-tab-title">';
|
||||
var noticeContent = '<div class="layui-tab-content" style="height:' + option.height + ';overflow-x: hidden;padding:0px;">';
|
||||
|
||||
$.each(option.data, function (i, item) {
|
||||
|
||||
noticeTitle += `<li class="${i === 0 ? 'layui-this' : ''}">${item.title}</li>`;
|
||||
noticeContent += '<div class="layui-tab-item layui-show">';
|
||||
|
||||
|
||||
$.each(item.children, function (i, note) {
|
||||
count++;
|
||||
noticeContent += '<div class="message-item" notice-form="' + note.form + '" notice-context="' + note.context +
|
||||
'" notice-title="' + note.title + '" notice-id="' + note.id + '">';
|
||||
|
||||
noticeContent += '<img src="' + note.avatar + '"/><div style="display:inline-block;">' + note.title + '</div>' +
|
||||
'<div class="extra">' + note.time + '</div>' +
|
||||
'</div>';
|
||||
})
|
||||
|
||||
noticeContent += '</div>';
|
||||
})
|
||||
|
||||
noticeTitle += '</ul>';
|
||||
noticeContent += '</div>';
|
||||
notice += noticeTitle;
|
||||
notice += noticeContent;
|
||||
notice += "</div></div>"
|
||||
|
||||
return notice;
|
||||
}
|
||||
|
||||
exports(MOD_NAME, new message());
|
||||
})
|
132
public/static/component/pear/module/page.js
Normal file
132
public/static/component/pear/module/page.js
Normal file
@ -0,0 +1,132 @@
|
||||
layui.define(['jquery', 'element'], function (exports) {
|
||||
"use strict";
|
||||
|
||||
var $ = layui.jquery;
|
||||
var element = layui.element;
|
||||
|
||||
var page = function (opt) {
|
||||
this.option = opt;
|
||||
};
|
||||
|
||||
/**
|
||||
* @since Pear Admin 4.0
|
||||
*
|
||||
* 创建 Page 页面
|
||||
*/
|
||||
page.prototype.render = function (opt) {
|
||||
var option = {
|
||||
elem: opt.elem,
|
||||
url: opt.url,
|
||||
width: opt.width || "100%",
|
||||
height: opt.height || "100%",
|
||||
title: opt.title
|
||||
}
|
||||
renderContent(option);
|
||||
return new page(option);
|
||||
}
|
||||
|
||||
/**
|
||||
* @since Pear Admin 4.0
|
||||
*
|
||||
* 切换 Page 页面
|
||||
*/
|
||||
page.prototype.changePage = function (options) {
|
||||
|
||||
const $frame = $(`#${this.option.elem} .pear-page-content`);
|
||||
|
||||
if (options.type === "_iframe") {
|
||||
|
||||
$frame.html(`<iframe src='${options.href}' scrolling='auto' frameborder='0' allowfullscreen='true'></iframe>`);
|
||||
|
||||
} else {
|
||||
$.ajax({
|
||||
url: options.href,
|
||||
type: 'get',
|
||||
dataType: 'html',
|
||||
success: function (data) {
|
||||
$frame.html(data)
|
||||
},
|
||||
error: function (xhr) {
|
||||
return layer.msg('Status:' + xhr.status + ',' + xhr.statusText + ',请稍后再试!');
|
||||
}
|
||||
});
|
||||
}
|
||||
$frame.attr("type", options.type);
|
||||
$frame.attr("href", options.href);
|
||||
}
|
||||
|
||||
page.prototype.refresh = function (loading) {
|
||||
|
||||
var $frameLoad = $(`#${this.option.elem} .pear-page-loading`);
|
||||
var $frame = $(`#${this.option.elem} .pear-page-content`);
|
||||
|
||||
if (loading) {
|
||||
$frameLoad.css({
|
||||
display: 'block'
|
||||
});
|
||||
}
|
||||
|
||||
if ($frame.attr("type") === "_iframe") {
|
||||
|
||||
$frame.html(`<iframe src='${$frame.attr("href")}' scrolling='auto' frameborder='0' allowfullscreen='true'></iframe>`);
|
||||
|
||||
const $contentFrame = $frame.find("iframe");
|
||||
|
||||
$contentFrame.on("load", () => {
|
||||
$frameLoad.fadeOut(1000);
|
||||
})
|
||||
|
||||
} else {
|
||||
$.ajax({
|
||||
type: 'get',
|
||||
url: $frame.attr("href"),
|
||||
dataType: 'html',
|
||||
success: function (data) {
|
||||
$frame.html(data)
|
||||
$frameLoad.fadeOut(1000);
|
||||
element.init();
|
||||
},
|
||||
error: function (xhr) {
|
||||
return layer.msg('Status:' + xhr.status + ',' + xhr.statusText + ',请稍后再试!');
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
function renderContent(option) {
|
||||
|
||||
$("#" + option.elem).html(`
|
||||
<div class='pear-page'>
|
||||
<div class='pear-page-content' type='${option.type}' href='${option.url}'></div>
|
||||
<div class="pear-page-loading">
|
||||
<div class="ball-loader">
|
||||
<span></span>
|
||||
<span></span>
|
||||
<span></span>
|
||||
<span></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>`);
|
||||
|
||||
var $frame = $("#" + option.elem).find(".pear-page-content");
|
||||
|
||||
if (option.type === "_iframe") {
|
||||
|
||||
$frame.html(`<iframe src='${option.url}' scrolling='auto' frameborder='0' allowfullscreen='true'></iframe>`);
|
||||
} else {
|
||||
$.ajax({
|
||||
url: option.url,
|
||||
type: 'get',
|
||||
dataType: 'html',
|
||||
success: function (data) {
|
||||
$frame.html(data);
|
||||
},
|
||||
error: function (xhr) {
|
||||
return layer.msg('Status:' + xhr.status + ',' + xhr.statusText + ',请稍后再试!');
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
exports('page', new page());
|
||||
});
|
626
public/static/component/pear/module/tabPage.js
Normal file
626
public/static/component/pear/module/tabPage.js
Normal file
@ -0,0 +1,626 @@
|
||||
layui.define(['jquery', 'element', 'dropdown'], function (exports) {
|
||||
"use strict";
|
||||
|
||||
var MOD_NAME = 'tabPage',
|
||||
$ = layui.jquery,
|
||||
dropdown = layui.dropdown,
|
||||
element = layui.element;
|
||||
|
||||
var tabPage = function (opt) {
|
||||
this.option = opt;
|
||||
};
|
||||
|
||||
var tabData = new Array();
|
||||
var tabDataCurrent = 0;
|
||||
var contextTabDOM;
|
||||
|
||||
tabPage.prototype.render = function (opt) {
|
||||
|
||||
var option = {
|
||||
elem: opt.elem,
|
||||
data: opt.data,
|
||||
index: opt.index,
|
||||
tool: opt.tool || true,
|
||||
roll: opt.roll || true,
|
||||
success: opt.success ? opt.success : function (id) { },
|
||||
session: opt.session ? opt.session : false,
|
||||
preload: opt.preload ? opt.preload : false,
|
||||
height: opt.height || "100%",
|
||||
width: opt.width || "100%",
|
||||
closeEvent: opt.closeEvent,
|
||||
tabMax: opt.tabMax,
|
||||
}
|
||||
|
||||
if (option.session) {
|
||||
if (sessionStorage.getItem(option.elem + "-pear-tab-page-data") != null) {
|
||||
tabData = JSON.parse(sessionStorage.getItem(option.elem + "-pear-tab-page-data"));
|
||||
option.data = JSON.parse(sessionStorage.getItem(option.elem + "-pear-tab-page-data"));
|
||||
tabDataCurrent = sessionStorage.getItem(option.elem + "-pear-tab-page-data-current");
|
||||
tabData.forEach(function (item, index) {
|
||||
if (item.id == tabDataCurrent) {
|
||||
option.index = index;
|
||||
}
|
||||
})
|
||||
} else {
|
||||
tabData = opt.data;
|
||||
}
|
||||
}
|
||||
|
||||
var lastIndex;
|
||||
var tab = createTab(option);
|
||||
$("#" + option.elem).html(tab);
|
||||
$(".layui-tab[lay-filter='" + option.elem + "'] .layui-tab-prev").click(function () {
|
||||
rollPage("left", option);
|
||||
})
|
||||
$(".layui-tab[lay-filter='" + option.elem + "'] .layui-tab-next").click(function () {
|
||||
rollPage("right", option);
|
||||
})
|
||||
element.init();
|
||||
|
||||
$("#" + option.elem).width(opt.width);
|
||||
$("#" + option.elem).height(opt.height);
|
||||
$("#" + option.elem).css({
|
||||
position: "relative"
|
||||
});
|
||||
closeEvent(option);
|
||||
|
||||
option.success(sessionStorage.getItem(option.elem + "-pear-tab-page-data-current"));
|
||||
|
||||
dropdown.render({
|
||||
elem: `#${option.elem} .layui-tab-control > .layui-icon-down`,
|
||||
trigger: 'hover',
|
||||
data: [{
|
||||
title: '关 闭 当 前',
|
||||
id: 1
|
||||
}, {
|
||||
title: '关 闭 其 他',
|
||||
id: 2
|
||||
}, {
|
||||
title: '关 闭 全 部',
|
||||
id: 3
|
||||
}],
|
||||
click: function (obj) {
|
||||
|
||||
const id = obj.id;
|
||||
|
||||
if (id === 1) {
|
||||
var currentTab = $(".layui-tab[lay-filter='" + option.elem +
|
||||
"'] .layui-tab-title .layui-this");
|
||||
if (currentTab.find("span").is(".able-close")) {
|
||||
var currentId = currentTab.attr("lay-id");
|
||||
tabDelete(option.elem, currentId, option.closeEvent, option);
|
||||
} else {
|
||||
layer.msg("当前页面不允许关闭", {
|
||||
icon: 3,
|
||||
time: 1000
|
||||
})
|
||||
}
|
||||
} else if (id === 2) {
|
||||
var currentId = $(".layui-tab[lay-filter='" + option.elem +
|
||||
"'] .layui-tab-title .layui-this").attr("lay-id");
|
||||
var tabtitle = $(".layui-tab[lay-filter='" + option.elem + "'] .layui-tab-title li");
|
||||
$.each(tabtitle, function (i) {
|
||||
if ($(this).attr("lay-id") != currentId) {
|
||||
if ($(this).find("span").is(".able-close")) {
|
||||
tabDelete(option.elem, $(this).attr("lay-id"), option.closeEvent,
|
||||
option);
|
||||
}
|
||||
}
|
||||
})
|
||||
} else {
|
||||
var currentId = $(".layui-tab[lay-filter='" + option.elem +
|
||||
"'] .layui-tab-title .layui-this").attr("lay-id");
|
||||
var tabtitle = $(".layui-tab[lay-filter='" + option.elem + "'] .layui-tab-title li");
|
||||
$.each(tabtitle, function (i) {
|
||||
if ($(this).find("span").is(".able-close")) {
|
||||
tabDelete(option.elem, $(this).attr("lay-id"), option.closeEvent, option);
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
}
|
||||
})
|
||||
|
||||
$("body .layui-tab[lay-filter='" + option.elem + "'] .layui-tab-title").on("contextmenu", "li",
|
||||
function (e) {
|
||||
var top = e.clientY;
|
||||
var left = e.clientX;
|
||||
var menuWidth = 100;
|
||||
var currentId = $(this).attr("lay-id");
|
||||
var menu = `<ul>
|
||||
<li class='item' id='${option.elem}closeThis'>关闭当前</li>
|
||||
<li class='item' id='${option.elem}closeOther'>关闭其他</li>
|
||||
<li class='item' id='${option.elem}closeAll'>关闭所有</li>
|
||||
</ul>`;
|
||||
|
||||
contextTabDOM = $(this);
|
||||
var isOutsideBounds = (left + menuWidth) > $(window).width();
|
||||
if (isOutsideBounds) {
|
||||
left = $(window).width() - menuWidth;
|
||||
}
|
||||
|
||||
layer.open({
|
||||
type: 1,
|
||||
title: false,
|
||||
shade: false,
|
||||
skin: 'pear-tab-page-menu',
|
||||
closeBtn: false,
|
||||
area: [menuWidth + 'px', '108px'],
|
||||
fixed: true,
|
||||
anim: false,
|
||||
isOutAnim: false,
|
||||
offset: [top, left],
|
||||
content: menu,
|
||||
success: function (layero, index) {
|
||||
layer.close(lastIndex);
|
||||
lastIndex = index;
|
||||
menuEvent(option, index);
|
||||
var timer;
|
||||
$(layero).on('mouseout', function () {
|
||||
timer = setTimeout(function () {
|
||||
layer.close(index);
|
||||
}, 30)
|
||||
});
|
||||
|
||||
$(layero).on('mouseover', function () {
|
||||
clearTimeout(timer);
|
||||
});
|
||||
|
||||
$(layero).on('contextmenu', function () {
|
||||
return false;
|
||||
})
|
||||
}
|
||||
});
|
||||
return false;
|
||||
})
|
||||
|
||||
mousewheelAndTouchmoveHandler(option)
|
||||
return new tabPage(option);
|
||||
}
|
||||
|
||||
tabPage.prototype.click = function (callback) {
|
||||
var option = this.option;
|
||||
var elem = this.option.elem;
|
||||
element.on('tab(' + this.option.elem + ')', function (data) {
|
||||
var id = $("#" + elem + " .layui-tab-title .layui-this").attr("lay-id");
|
||||
sessionStorage.setItem(option.elem + "-pear-tab-page-data-current", id);
|
||||
callback(id);
|
||||
});
|
||||
}
|
||||
|
||||
tabPage.prototype.positionTab = function () {
|
||||
var $tabTitle = $('.layui-tab[lay-filter=' + this.option.elem + '] .layui-tab-title');
|
||||
var autoLeft = 0;
|
||||
$tabTitle.children("li").each(function () {
|
||||
if ($(this).hasClass('layui-this')) {
|
||||
return false;
|
||||
} else {
|
||||
autoLeft += $(this).outerWidth();
|
||||
}
|
||||
});
|
||||
$tabTitle.animate({
|
||||
scrollLeft: autoLeft - $tabTitle.width() / 3
|
||||
}, 200);
|
||||
}
|
||||
|
||||
tabPage.prototype.clear = function () {
|
||||
sessionStorage.removeItem(this.option.elem + "-pear-tab-page-data");
|
||||
sessionStorage.removeItem(this.option.elem + "-pear-tab-page-data-current");
|
||||
}
|
||||
|
||||
var index = 0;
|
||||
// 根据过滤 fliter 标识, 重置选项卡标题
|
||||
tabPage.prototype.changeTabTitleById = function (elem, id, title) {
|
||||
var currentTab = $(".layui-tab[lay-filter='" + elem + "'] .layui-tab-title [lay-id='" + id +
|
||||
"'] .title");
|
||||
currentTab.html(title);
|
||||
}
|
||||
|
||||
// 根据过滤 filter 标识, 删除指定选项卡
|
||||
tabPage.prototype.delTabByElem = function (elem, id, callback) {
|
||||
var currentTab = $(".layui-tab[lay-filter='" + elem + "'] .layui-tab-title [lay-id='" + id + "']");
|
||||
if (currentTab.find("span").is(".able-close")) {
|
||||
tabDelete(elem, id, callback);
|
||||
}
|
||||
}
|
||||
// 根据过滤 filter 标识, 删除其他选项卡
|
||||
tabPage.prototype.delOtherTabByElem = function (elem, callback) {
|
||||
var currentId = $(".layui-tab[lay-filter='" + elem + "'] .layui-tab-title .layui-this").attr(
|
||||
"lay-id");
|
||||
var tabtitle = $(".layui-tab[lay-filter='" + elem + "'] .layui-tab-title li");
|
||||
$.each(tabtitle, function (i) {
|
||||
if ($(this).attr("lay-id") != currentId) {
|
||||
if ($(this).find("span").is(".able-close")) {
|
||||
tabDelete(elem, $(this).attr("lay-id"), callback);
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 根据过滤 filter 标识, 删除全部选项卡
|
||||
tabPage.prototype.delAllTabByElem = function (elem, callback) {
|
||||
var currentId = $(".layui-tab[lay-filter='" + elem + "'] .layui-tab-title .layui-this").attr(
|
||||
"lay-id");
|
||||
var tabtitle = $(".layui-tab[lay-filter='" + elem + "'] .layui-tab-title li");
|
||||
$.each(tabtitle, function (i) {
|
||||
if ($(this).find("span").is(".able-close")) {
|
||||
tabDelete(elem, $(this).attr("lay-id"), callback);
|
||||
}
|
||||
})
|
||||
}
|
||||
// 根据过滤 filter 标识, 删除当前选项卡
|
||||
tabPage.prototype.delCurrentTabByElem = function (elem, callback) {
|
||||
var currentTab = $(".layui-tab[lay-filter='" + elem + "'] .layui-tab-title .layui-this");
|
||||
if (currentTab.find("span").is(".able-close")) {
|
||||
var currentId = currentTab.attr("lay-id");
|
||||
tabDelete(elem, currentId, callback);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @since Pear Admin 4.0
|
||||
*/
|
||||
tabPage.prototype.addTabOnly = function (opt, time) {
|
||||
|
||||
var title = `<span class="pear-tab-page-active"></span>
|
||||
<span class="${opt.close ? 'able-close' : 'disable-close'} title">${opt.title}</span>
|
||||
<i class="layui-icon layui-unselect layui-tab-close">ဆ</i>`;
|
||||
|
||||
if ($(".layui-tab[lay-filter='" + this.option.elem + "'] .layui-tab-title li[lay-id]").length <=
|
||||
0) {
|
||||
|
||||
var that = this;
|
||||
|
||||
if (opt.type === "_iframe") {
|
||||
|
||||
element.tabAdd(this.option.elem, {
|
||||
id: opt.id,
|
||||
title: title,
|
||||
content: `<iframe id="${opt.id}" type="${opt.type}" data-frameid="${opt.id}" scrolling="auto" frameborder="0" src="${opt.url}" style="width:100%;height:100%;" allowfullscreen="true"></iframe>`
|
||||
});
|
||||
|
||||
} else {
|
||||
|
||||
$.ajax({
|
||||
url: opt.url,
|
||||
type: 'get',
|
||||
dataType: 'html',
|
||||
async: false,
|
||||
success: function (data) {
|
||||
element.tabAdd(that.option.elem, {
|
||||
id: opt.id,
|
||||
title: title,
|
||||
content: `<div id="${opt.id}" type="${opt.type}" data-frameid="${opt.id}" src="${opt.url}">${data}</div>`,
|
||||
});
|
||||
},
|
||||
error: function (xhr, textstatus, thrown) {
|
||||
return layer.msg('Status:' + xhr.status + ',' + xhr.statusText + ',请稍后再试!');
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
tabData.push(opt);
|
||||
sessionStorage.setItem(that.option.elem + "-pear-tab-page-data", JSON.stringify(tabData));
|
||||
sessionStorage.setItem(that.option.elem + "-pear-tab-page-data-current", opt.id);
|
||||
|
||||
} else {
|
||||
|
||||
var isData = false;
|
||||
$.each($(".layui-tab[lay-filter='" + this.option.elem + "'] .layui-tab-title li[lay-id]"),
|
||||
function () {
|
||||
if ($(this).attr("lay-id") == opt.id) {
|
||||
isData = true;
|
||||
}
|
||||
})
|
||||
|
||||
if (isData == false) {
|
||||
|
||||
if (this.option.tabMax != false) {
|
||||
if ($(".layui-tab[lay-filter='" + this.option.elem + "'] .layui-tab-title li[lay-id]")
|
||||
.length >= this.option.tabMax) {
|
||||
layer.msg("最多打开" + this.option.tabMax + "个标签页", {
|
||||
icon: 2,
|
||||
time: 1000,
|
||||
shift: 6
|
||||
});
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
var that = this;
|
||||
if (opt.type === "_iframe") {
|
||||
element.tabAdd(this.option.elem, {
|
||||
id: opt.id,
|
||||
title: title,
|
||||
content: `<iframe id="${opt.id}" type="${opt.type}" data-frameid="${opt.id}" scrolling="auto" frameborder="0" src="${opt.url}" style="width:100%;height:100%;" allowfullscreen="true"></iframe>`
|
||||
});
|
||||
} else {
|
||||
$.ajax({
|
||||
url: opt.url,
|
||||
type: 'get',
|
||||
dataType: 'html',
|
||||
async: false,
|
||||
success: function (data) {
|
||||
element.tabAdd(that.option.elem, {
|
||||
id: opt.id,
|
||||
title: title,
|
||||
content: `<div id="${opt.id}" type="${opt.type}" data-frameid="${opt.id}" src="${opt.url}">${data}</div>`,
|
||||
});
|
||||
},
|
||||
error: function (xhr, textstatus, thrown) {
|
||||
return layer.msg('Status:' + xhr.status + ',' + xhr.statusText + ',请稍后再试!');
|
||||
}
|
||||
});
|
||||
}
|
||||
tabData.push(opt);
|
||||
sessionStorage.setItem(that.option.elem + "-pear-tab-page-data", JSON.stringify(tabData));
|
||||
sessionStorage.setItem(that.option.elem + "-pear-tab-page-data-current", opt.id);
|
||||
}
|
||||
}
|
||||
element.tabChange(this.option.elem, opt.id);
|
||||
sessionStorage.setItem(this.option.elem + "-pear-tab-page-data-current", opt.id);
|
||||
}
|
||||
|
||||
// 刷 新 指 定 的 选 项 卡
|
||||
tabPage.prototype.refresh = function (time) {
|
||||
var $iframe = $(".layui-tab[lay-filter='" + this.option.elem + "'] .layui-tab-content .layui-show > *");
|
||||
var $iframeLoad;
|
||||
|
||||
if (time != false && time != 0) {
|
||||
$iframe.parent().append(`<div id="pear-tab-page-loading${index}" class="pear-tab-page-loading"><div class="ball-loader"><span></span><span></span><span></span><span></span></div></div>`);
|
||||
$iframeLoad = $("#" + this.option.elem).find("#pear-tab-page-loading" + index++);
|
||||
$iframeLoad.css({
|
||||
display: "block"
|
||||
});
|
||||
}
|
||||
|
||||
if($iframe.attr("type") === "_iframe") {
|
||||
$iframe.attr("src", $iframe.attr("src"));
|
||||
$iframe.on("load", function() {
|
||||
$iframeLoad.fadeOut(1000, function() {
|
||||
$iframeLoad.remove();
|
||||
});
|
||||
})
|
||||
} else {
|
||||
$.ajax({
|
||||
url: $iframe.attr("src"),
|
||||
type: 'get',
|
||||
dataType: 'html',
|
||||
success: function (data) {
|
||||
$iframe.html(data);
|
||||
if ($iframeLoad != undefined) {
|
||||
$iframeLoad.fadeOut(1000, function () {
|
||||
$iframeLoad.remove();
|
||||
});
|
||||
}
|
||||
},
|
||||
error: function (xhr) {
|
||||
return layer.msg('Status:' + xhr.status + ',' + xhr.statusText + ',请稍后再试!');
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
function tabDelete(elem, id, callback, option) {
|
||||
var tabTitle = $(".layui-tab[lay-filter='" + elem + "']").find(".layui-tab-title");
|
||||
var removeTab = tabTitle.find("li[lay-id='" + id + "']");
|
||||
var nextNode = removeTab.next("li");
|
||||
if (!removeTab.hasClass("layui-this")) {
|
||||
removeTab.remove();
|
||||
var tabContent = $(".layui-tab[lay-filter='" + elem + "']").find("*[id='" + id + "']")
|
||||
.parent();
|
||||
tabContent.remove();
|
||||
|
||||
tabData = JSON.parse(sessionStorage.getItem(elem + "-pear-tab-page-data"));
|
||||
tabDataCurrent = sessionStorage.getItem(elem + "-pear-tab-page-data-current");
|
||||
tabData = tabData.filter(function (item) {
|
||||
return item.id != id;
|
||||
})
|
||||
sessionStorage.setItem(elem + "-pear-tab-page-data", JSON.stringify(tabData));
|
||||
return false;
|
||||
}
|
||||
|
||||
var currId;
|
||||
if (nextNode.length) {
|
||||
nextNode.addClass("layui-this");
|
||||
currId = nextNode.attr("lay-id");
|
||||
$("#" + elem + " [id='" + currId + "']").parent().addClass("layui-show");
|
||||
} else {
|
||||
var prevNode = removeTab.prev("li");
|
||||
prevNode.addClass("layui-this");
|
||||
currId = prevNode.attr("lay-id");
|
||||
$("#" + elem + " [id='" + currId + "']").parent().addClass("layui-show");
|
||||
}
|
||||
callback(currId);
|
||||
tabData = JSON.parse(sessionStorage.getItem(elem + "-pear-tab-page-data"));
|
||||
tabDataCurrent = sessionStorage.getItem(elem + "-pear-tab-page-data-current");
|
||||
tabData = tabData.filter(function (item) {
|
||||
return item.id != id;
|
||||
})
|
||||
sessionStorage.setItem(elem + "-pear-tab-page-data", JSON.stringify(tabData));
|
||||
sessionStorage.setItem(elem + "-pear-tab-page-data-current", currId);
|
||||
|
||||
removeTab.remove();
|
||||
// 删除 content
|
||||
var tabContent = $(".layui-tab[lay-filter='" + elem + "']").find("*[id='" + id + "']").parent();
|
||||
// 删除
|
||||
tabContent.remove();
|
||||
}
|
||||
|
||||
/**
|
||||
* @since Pear Admin 4.0
|
||||
*/
|
||||
function createTab(option) {
|
||||
|
||||
var type = "";
|
||||
if (option.roll == true) {
|
||||
type = "layui-tab-roll";
|
||||
}
|
||||
if (option.tool != false) {
|
||||
type = "layui-tab-tool";
|
||||
}
|
||||
if (option.roll == true && option.tool != false) {
|
||||
type = "layui-tab-rollTool";
|
||||
}
|
||||
var tab = '<div class="pear-tab-page ' + type + ' layui-tab" lay-filter="' + option.elem +
|
||||
'" lay-allowClose="true">';
|
||||
|
||||
var title = '<ul class="layui-tab-title">';
|
||||
var content = '<div class="layui-tab-content">';
|
||||
var control = `<div class="layui-tab-control">
|
||||
<li class="layui-tab-prev layui-icon layui-icon-left"></li>
|
||||
<li class="layui-tab-next layui-icon layui-icon-right"></li>
|
||||
<li class="layui-tab-tool layui-icon layui-icon-down"></li>
|
||||
</div>`;
|
||||
|
||||
// 处 理 选 项 卡 头 部
|
||||
var index = 0;
|
||||
$.each(option.data, function (i, item) {
|
||||
|
||||
var titleItem = `<li lay-id="${item.id}" class="${option.index == index ? 'layui-this' : ''}">
|
||||
<span class="pear-tab-page-active"></span>
|
||||
<span class="${item.close ? 'able-close' : 'disable-close'} title">
|
||||
${item.title}
|
||||
</span>
|
||||
<i class="layui-icon layui-unselect layui-tab-close">ဆ</i></li>
|
||||
</li>`;
|
||||
|
||||
title += titleItem;
|
||||
|
||||
if (item.type === "_iframe") {
|
||||
|
||||
content += `<div class="${option.index == index ? 'layui-show' : ''} layui-tab-item"><iframe id="${item.id}" type="${item.type}" data-frameid="${item.id}" scrolling="auto" frameborder="0" src="${item.url}" style="width:100%;height:100%;" allowfullscreen="true"></iframe></div>`
|
||||
|
||||
} else {
|
||||
|
||||
$.ajax({
|
||||
url: item.url,
|
||||
type: 'get',
|
||||
dataType: 'html',
|
||||
async: false,
|
||||
success: function (data) {
|
||||
content += `<div class="${option.index == index ? 'layui-show' : ''} layui-tab-item"><div id="${item.id}" type="${item.type}" data-frameid="${item.id}" src="${item.url}">${data}</div></div>`;
|
||||
},
|
||||
error: function (xhr) {
|
||||
return layer.msg('Status:' + xhr.status + ',' + xhr.statusText + ',请稍后再试!');
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
index++;
|
||||
});
|
||||
|
||||
title += '</ul>';
|
||||
content += '</div>';
|
||||
|
||||
tab += title;
|
||||
tab += control;
|
||||
tab += content;
|
||||
tab += '</div>';
|
||||
tab += ''
|
||||
return tab;
|
||||
}
|
||||
|
||||
function rollPage(d, option) {
|
||||
var $tabTitle = $('#' + option.elem + ' .layui-tab-title');
|
||||
var left = $tabTitle.scrollLeft();
|
||||
if ('left' === d) {
|
||||
$tabTitle.animate({
|
||||
scrollLeft: left - 450
|
||||
}, 200);
|
||||
} else {
|
||||
$tabTitle.animate({
|
||||
scrollLeft: left + 450
|
||||
}, 200);
|
||||
}
|
||||
}
|
||||
|
||||
function closeEvent(option) {
|
||||
$(".layui-tab[lay-filter='" + option.elem + "']").on("click", ".layui-tab-close", function () {
|
||||
var layid = $(this).parent().attr("lay-id");
|
||||
tabDelete(option.elem, layid, option.closeEvent, option);
|
||||
})
|
||||
}
|
||||
|
||||
function menuEvent(option, index) {
|
||||
|
||||
$("#" + option.elem + "closeThis").click(function () {
|
||||
var currentTab = contextTabDOM;
|
||||
|
||||
if (currentTab.find("span").is(".able-close")) {
|
||||
var currentId = currentTab.attr("lay-id");
|
||||
tabDelete(option.elem, currentId, option.closeEvent, option);
|
||||
} else {
|
||||
layer.msg("当前页面不允许关闭", {
|
||||
icon: 3,
|
||||
time: 800
|
||||
})
|
||||
}
|
||||
layer.close(index);
|
||||
})
|
||||
|
||||
$("#" + option.elem + "closeOther").click(function () {
|
||||
var currentId = contextTabDOM.attr("lay-id");
|
||||
var tabtitle = $(".layui-tab[lay-filter='" + option.elem + "'] .layui-tab-title li");
|
||||
$.each(tabtitle, function (i) {
|
||||
if ($(this).attr("lay-id") != currentId) {
|
||||
if ($(this).find("span").is(".able-close")) {
|
||||
tabDelete(option.elem, $(this).attr("lay-id"), option.closeEvent,
|
||||
option);
|
||||
}
|
||||
}
|
||||
})
|
||||
layer.close(index);
|
||||
})
|
||||
|
||||
$("#" + option.elem + "closeAll").click(function () {
|
||||
var tabtitle = $(".layui-tab[lay-filter='" + option.elem + "'] .layui-tab-title li");
|
||||
$.each(tabtitle, function (i) {
|
||||
if ($(this).find("span").is(".able-close")) {
|
||||
tabDelete(option.elem, $(this).attr("lay-id"), option.closeEvent, option);
|
||||
}
|
||||
})
|
||||
layer.close(index);
|
||||
})
|
||||
}
|
||||
|
||||
function mousewheelAndTouchmoveHandler(option) {
|
||||
var $bodyTab = $("body .layui-tab[lay-filter='" + option.elem + "'] .layui-tab-title")
|
||||
var $tabTitle = $('#' + option.elem + ' .layui-tab-title');
|
||||
var mouseScrollStep = 100
|
||||
// 鼠标滚轮
|
||||
$bodyTab.on("mousewheel DOMMouseScroll", function (e) {
|
||||
e.originalEvent.preventDefault()
|
||||
var delta = (e.originalEvent.wheelDelta && (e.originalEvent.wheelDelta > 0 ? "top" :
|
||||
"down")) || // chrome & ie
|
||||
(e.originalEvent.detail && (e.originalEvent.detail > 0 ? "down" : "top")); // firefox
|
||||
var scrollLeft = $tabTitle.scrollLeft();
|
||||
|
||||
if (delta === "top") {
|
||||
scrollLeft -= mouseScrollStep
|
||||
} else if (delta === "down") {
|
||||
scrollLeft += mouseScrollStep
|
||||
}
|
||||
$tabTitle.scrollLeft(scrollLeft)
|
||||
});
|
||||
|
||||
// 触摸移动
|
||||
var touchX = 0;
|
||||
$bodyTab.on("touchstart", function (e) {
|
||||
var touch = e.originalEvent.targetTouches[0];
|
||||
touchX = touch.pageX
|
||||
})
|
||||
$bodyTab.on("touchmove", function (e) {
|
||||
var event = e.originalEvent;
|
||||
if (event.targetTouches.length > 1) return;
|
||||
event.preventDefault();
|
||||
var touch = event.targetTouches[0];
|
||||
var distanceX = touchX - touch.pageX
|
||||
var scrollLeft = $tabTitle.scrollLeft();
|
||||
touchX = touch.pageX
|
||||
$tabTitle.scrollLeft(scrollLeft += distanceX)
|
||||
});
|
||||
}
|
||||
|
||||
exports(MOD_NAME, new tabPage());
|
||||
})
|
40
public/static/component/pear/module/tools.js
Normal file
40
public/static/component/pear/module/tools.js
Normal file
@ -0,0 +1,40 @@
|
||||
layui.define(['jquery', 'element'],
|
||||
function (exports) {
|
||||
|
||||
var $ = layui.jquery;
|
||||
var tools = new function () {
|
||||
|
||||
/**
|
||||
* @since 防抖算法
|
||||
*
|
||||
* @param fn 要执行的方法
|
||||
* @param time 防抖时间参数
|
||||
*/
|
||||
this.debounce = function (fn, time) {
|
||||
var timer = null
|
||||
return function () {
|
||||
var arguments = arguments[0]
|
||||
if (timer) {
|
||||
clearTimeout(timer)
|
||||
}
|
||||
timer = setTimeout(function () {
|
||||
fn(arguments)
|
||||
}, time)
|
||||
}
|
||||
}
|
||||
|
||||
// image 转 base64
|
||||
this.imageToBase64 = function (img) {
|
||||
var canvas = document.createElement("canvas");
|
||||
canvas.width = img.width;
|
||||
canvas.height = img.height;
|
||||
var ctx = canvas.getContext("2d");
|
||||
ctx.drawImage(img, 0, 0, img.width, img.height);
|
||||
var ext = img.src.substring(img.src.lastIndexOf(".") + 1).toLowerCase();
|
||||
var dataURL = canvas.toDataURL("image/" + ext);
|
||||
return dataURL;
|
||||
}
|
||||
};
|
||||
|
||||
exports('tools', tools);
|
||||
})
|
150
vendor/composer/installed.json
vendored
150
vendor/composer/installed.json
vendored
@ -397,17 +397,17 @@
|
||||
},
|
||||
{
|
||||
"name": "firebase/php-jwt",
|
||||
"version": "v6.9.0",
|
||||
"version_normalized": "6.9.0.0",
|
||||
"version": "v6.10.0",
|
||||
"version_normalized": "6.10.0.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/firebase/php-jwt.git",
|
||||
"reference": "f03270e63eaccf3019ef0f32849c497385774e11"
|
||||
"reference": "a49db6f0a5033aef5143295342f1c95521b075ff"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/firebase/php-jwt/zipball/f03270e63eaccf3019ef0f32849c497385774e11",
|
||||
"reference": "f03270e63eaccf3019ef0f32849c497385774e11",
|
||||
"url": "https://api.github.com/repos/firebase/php-jwt/zipball/a49db6f0a5033aef5143295342f1c95521b075ff",
|
||||
"reference": "a49db6f0a5033aef5143295342f1c95521b075ff",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@ -425,7 +425,7 @@
|
||||
"ext-sodium": "Support EdDSA (Ed25519) signatures",
|
||||
"paragonie/sodium_compat": "Support EdDSA (Ed25519) signatures when libsodium is not present"
|
||||
},
|
||||
"time": "2023-10-05T00:24:42+00:00",
|
||||
"time": "2023-12-01T16:26:39+00:00",
|
||||
"type": "library",
|
||||
"installation-source": "dist",
|
||||
"autoload": {
|
||||
@ -457,7 +457,7 @@
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/firebase/php-jwt/issues",
|
||||
"source": "https://github.com/firebase/php-jwt/tree/v6.9.0"
|
||||
"source": "https://github.com/firebase/php-jwt/tree/v6.10.0"
|
||||
},
|
||||
"install-path": "../firebase/php-jwt"
|
||||
},
|
||||
@ -753,24 +753,24 @@
|
||||
},
|
||||
{
|
||||
"name": "jaeger/g-http",
|
||||
"version": "V1.7.2",
|
||||
"version_normalized": "1.7.2.0",
|
||||
"version": "V1.7.3",
|
||||
"version_normalized": "1.7.3.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/jae-jae/GHttp.git",
|
||||
"reference": "82585ddd5e2c6651e37ab1d8166efcdbb6b293d4"
|
||||
"reference": "035fe0ff6e3e0390769647ce14694875bf02cf22"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/jae-jae/GHttp/zipball/82585ddd5e2c6651e37ab1d8166efcdbb6b293d4",
|
||||
"reference": "82585ddd5e2c6651e37ab1d8166efcdbb6b293d4",
|
||||
"url": "https://api.github.com/repos/jae-jae/GHttp/zipball/035fe0ff6e3e0390769647ce14694875bf02cf22",
|
||||
"reference": "035fe0ff6e3e0390769647ce14694875bf02cf22",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"cache/filesystem-adapter": "^1",
|
||||
"guzzlehttp/guzzle": "^6.0 | ^7.0"
|
||||
"guzzlehttp/guzzle": "^6.0 || ^7.0"
|
||||
},
|
||||
"time": "2021-08-08T04:59:44+00:00",
|
||||
"time": "2024-03-24T14:55:49+00:00",
|
||||
"type": "library",
|
||||
"installation-source": "dist",
|
||||
"autoload": {
|
||||
@ -791,7 +791,7 @@
|
||||
"description": "Simple Http client base on GuzzleHttp",
|
||||
"support": {
|
||||
"issues": "https://github.com/jae-jae/GHttp/issues",
|
||||
"source": "https://github.com/jae-jae/GHttp/tree/V1.7.2"
|
||||
"source": "https://github.com/jae-jae/GHttp/tree/V1.7.3"
|
||||
},
|
||||
"install-path": "../jaeger/g-http"
|
||||
},
|
||||
@ -1076,17 +1076,17 @@
|
||||
},
|
||||
{
|
||||
"name": "league/mime-type-detection",
|
||||
"version": "1.14.0",
|
||||
"version_normalized": "1.14.0.0",
|
||||
"version": "1.15.0",
|
||||
"version_normalized": "1.15.0.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/thephpleague/mime-type-detection.git",
|
||||
"reference": "b6a5854368533df0295c5761a0253656a2e52d9e"
|
||||
"reference": "ce0f4d1e8a6f4eb0ddff33f57c69c50fd09f4301"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/b6a5854368533df0295c5761a0253656a2e52d9e",
|
||||
"reference": "b6a5854368533df0295c5761a0253656a2e52d9e",
|
||||
"url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/ce0f4d1e8a6f4eb0ddff33f57c69c50fd09f4301",
|
||||
"reference": "ce0f4d1e8a6f4eb0ddff33f57c69c50fd09f4301",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@ -1098,7 +1098,7 @@
|
||||
"phpstan/phpstan": "^0.12.68",
|
||||
"phpunit/phpunit": "^8.5.8 || ^9.3 || ^10.0"
|
||||
},
|
||||
"time": "2023-10-17T14:13:20+00:00",
|
||||
"time": "2024-01-28T23:22:08+00:00",
|
||||
"type": "library",
|
||||
"installation-source": "dist",
|
||||
"autoload": {
|
||||
@ -1119,7 +1119,7 @@
|
||||
"description": "Mime-type detection for Flysystem",
|
||||
"support": {
|
||||
"issues": "https://github.com/thephpleague/mime-type-detection/issues",
|
||||
"source": "https://github.com/thephpleague/mime-type-detection/tree/1.14.0"
|
||||
"source": "https://github.com/thephpleague/mime-type-detection/tree/1.15.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@ -1219,17 +1219,17 @@
|
||||
},
|
||||
{
|
||||
"name": "overtrue/easy-sms",
|
||||
"version": "2.5.0",
|
||||
"version_normalized": "2.5.0.0",
|
||||
"version": "2.6.0",
|
||||
"version_normalized": "2.6.0.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/overtrue/easy-sms.git",
|
||||
"reference": "81d4deec69bbb6de6e5fdd7ab90cc933bd3e3046"
|
||||
"reference": "bb88b244f0de8d1f74bc50c4c08414f4c5f30281"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/overtrue/easy-sms/zipball/81d4deec69bbb6de6e5fdd7ab90cc933bd3e3046",
|
||||
"reference": "81d4deec69bbb6de6e5fdd7ab90cc933bd3e3046",
|
||||
"url": "https://api.github.com/repos/overtrue/easy-sms/zipball/bb88b244f0de8d1f74bc50c4c08414f4c5f30281",
|
||||
"reference": "bb88b244f0de8d1f74bc50c4c08414f4c5f30281",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@ -1243,7 +1243,7 @@
|
||||
"mockery/mockery": "~1.3.3 || ^1.4.2",
|
||||
"phpunit/phpunit": "^5.7 || ^7.5 || ^8.5.19 || ^9.5.8"
|
||||
},
|
||||
"time": "2023-08-07T07:51:17+00:00",
|
||||
"time": "2024-03-08T06:36:45+00:00",
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"hooks": {
|
||||
@ -1276,7 +1276,7 @@
|
||||
"description": "The easiest way to send short message.",
|
||||
"support": {
|
||||
"issues": "https://github.com/overtrue/easy-sms/issues",
|
||||
"source": "https://github.com/overtrue/easy-sms/tree/2.5.0"
|
||||
"source": "https://github.com/overtrue/easy-sms/tree/2.6.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@ -1470,17 +1470,17 @@
|
||||
},
|
||||
{
|
||||
"name": "phpmailer/phpmailer",
|
||||
"version": "v6.8.1",
|
||||
"version_normalized": "6.8.1.0",
|
||||
"version": "v6.9.1",
|
||||
"version_normalized": "6.9.1.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/PHPMailer/PHPMailer.git",
|
||||
"reference": "e88da8d679acc3824ff231fdc553565b802ac016"
|
||||
"reference": "039de174cd9c17a8389754d3b877a2ed22743e18"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/e88da8d679acc3824ff231fdc553565b802ac016",
|
||||
"reference": "e88da8d679acc3824ff231fdc553565b802ac016",
|
||||
"url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/039de174cd9c17a8389754d3b877a2ed22743e18",
|
||||
"reference": "039de174cd9c17a8389754d3b877a2ed22743e18",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@ -1500,6 +1500,7 @@
|
||||
"yoast/phpunit-polyfills": "^1.0.4"
|
||||
},
|
||||
"suggest": {
|
||||
"decomplexity/SendOauth2": "Adapter for using XOAUTH2 authentication",
|
||||
"ext-mbstring": "Needed to send email in multibyte encoding charset or decode encoded addresses",
|
||||
"ext-openssl": "Needed for secure SMTP sending and DKIM signing",
|
||||
"greew/oauth2-azure-provider": "Needed for Microsoft Azure XOAUTH2 authentication",
|
||||
@ -1509,7 +1510,7 @@
|
||||
"symfony/polyfill-mbstring": "To support UTF-8 if the Mbstring PHP extension is not enabled (^1.2)",
|
||||
"thenetworg/oauth2-azure": "Needed for Microsoft XOAUTH2 authentication"
|
||||
},
|
||||
"time": "2023-08-29T08:26:30+00:00",
|
||||
"time": "2023-11-25T22:23:28+00:00",
|
||||
"type": "library",
|
||||
"installation-source": "dist",
|
||||
"autoload": {
|
||||
@ -1541,7 +1542,7 @@
|
||||
"description": "PHPMailer is a full-featured email creation and transfer class for PHP",
|
||||
"support": {
|
||||
"issues": "https://github.com/PHPMailer/PHPMailer/issues",
|
||||
"source": "https://github.com/PHPMailer/PHPMailer/tree/v6.8.1"
|
||||
"source": "https://github.com/PHPMailer/PHPMailer/tree/v6.9.1"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@ -1998,17 +1999,17 @@
|
||||
},
|
||||
{
|
||||
"name": "symfony/polyfill-mbstring",
|
||||
"version": "v1.28.0",
|
||||
"version_normalized": "1.28.0.0",
|
||||
"version": "v1.29.0",
|
||||
"version_normalized": "1.29.0.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/polyfill-mbstring.git",
|
||||
"reference": "42292d99c55abe617799667f454222c54c60e229"
|
||||
"reference": "9773676c8a1bb1f8d4340a62efe641cf76eda7ec"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/42292d99c55abe617799667f454222c54c60e229",
|
||||
"reference": "42292d99c55abe617799667f454222c54c60e229",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9773676c8a1bb1f8d4340a62efe641cf76eda7ec",
|
||||
"reference": "9773676c8a1bb1f8d4340a62efe641cf76eda7ec",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@ -2020,12 +2021,9 @@
|
||||
"suggest": {
|
||||
"ext-mbstring": "For best performance"
|
||||
},
|
||||
"time": "2023-07-28T09:04:16+00:00",
|
||||
"time": "2024-01-29T20:11:03+00:00",
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-main": "1.28-dev"
|
||||
},
|
||||
"thanks": {
|
||||
"name": "symfony/polyfill",
|
||||
"url": "https://github.com/symfony/polyfill"
|
||||
@ -2064,7 +2062,7 @@
|
||||
"shim"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/polyfill-mbstring/tree/v1.28.0"
|
||||
"source": "https://github.com/symfony/polyfill-mbstring/tree/v1.29.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@ -2084,28 +2082,25 @@
|
||||
},
|
||||
{
|
||||
"name": "symfony/polyfill-php72",
|
||||
"version": "v1.28.0",
|
||||
"version_normalized": "1.28.0.0",
|
||||
"version": "v1.29.0",
|
||||
"version_normalized": "1.29.0.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/polyfill-php72.git",
|
||||
"reference": "70f4aebd92afca2f865444d30a4d2151c13c3179"
|
||||
"reference": "861391a8da9a04cbad2d232ddd9e4893220d6e25"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/70f4aebd92afca2f865444d30a4d2151c13c3179",
|
||||
"reference": "70f4aebd92afca2f865444d30a4d2151c13c3179",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/861391a8da9a04cbad2d232ddd9e4893220d6e25",
|
||||
"reference": "861391a8da9a04cbad2d232ddd9e4893220d6e25",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=7.1"
|
||||
},
|
||||
"time": "2023-01-26T09:26:14+00:00",
|
||||
"time": "2024-01-29T20:11:03+00:00",
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-main": "1.28-dev"
|
||||
},
|
||||
"thanks": {
|
||||
"name": "symfony/polyfill",
|
||||
"url": "https://github.com/symfony/polyfill"
|
||||
@ -2143,7 +2138,7 @@
|
||||
"shim"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/polyfill-php72/tree/v1.28.0"
|
||||
"source": "https://github.com/symfony/polyfill-php72/tree/v1.29.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@ -2163,28 +2158,25 @@
|
||||
},
|
||||
{
|
||||
"name": "symfony/polyfill-php80",
|
||||
"version": "v1.28.0",
|
||||
"version_normalized": "1.28.0.0",
|
||||
"version": "v1.29.0",
|
||||
"version_normalized": "1.29.0.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/polyfill-php80.git",
|
||||
"reference": "6caa57379c4aec19c0a12a38b59b26487dcfe4b5"
|
||||
"reference": "87b68208d5c1188808dd7839ee1e6c8ec3b02f1b"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/6caa57379c4aec19c0a12a38b59b26487dcfe4b5",
|
||||
"reference": "6caa57379c4aec19c0a12a38b59b26487dcfe4b5",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/87b68208d5c1188808dd7839ee1e6c8ec3b02f1b",
|
||||
"reference": "87b68208d5c1188808dd7839ee1e6c8ec3b02f1b",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=7.1"
|
||||
},
|
||||
"time": "2023-01-26T09:26:14+00:00",
|
||||
"time": "2024-01-29T20:11:03+00:00",
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-main": "1.28-dev"
|
||||
},
|
||||
"thanks": {
|
||||
"name": "symfony/polyfill",
|
||||
"url": "https://github.com/symfony/polyfill"
|
||||
@ -2229,7 +2221,7 @@
|
||||
"shim"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/polyfill-php80/tree/v1.28.0"
|
||||
"source": "https://github.com/symfony/polyfill-php80/tree/v1.29.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@ -2347,17 +2339,17 @@
|
||||
},
|
||||
{
|
||||
"name": "symfony/var-exporter",
|
||||
"version": "v5.4.26",
|
||||
"version_normalized": "5.4.26.0",
|
||||
"version": "v5.4.35",
|
||||
"version_normalized": "5.4.35.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/var-exporter.git",
|
||||
"reference": "11401fe94f960249b3c63a488c63ba73091c1e4a"
|
||||
"reference": "abb0a151b62d6b07e816487e20040464af96cae7"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/var-exporter/zipball/11401fe94f960249b3c63a488c63ba73091c1e4a",
|
||||
"reference": "11401fe94f960249b3c63a488c63ba73091c1e4a",
|
||||
"url": "https://api.github.com/repos/symfony/var-exporter/zipball/abb0a151b62d6b07e816487e20040464af96cae7",
|
||||
"reference": "abb0a151b62d6b07e816487e20040464af96cae7",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@ -2367,7 +2359,7 @@
|
||||
"require-dev": {
|
||||
"symfony/var-dumper": "^4.4.9|^5.0.9|^6.0"
|
||||
},
|
||||
"time": "2023-07-20T07:21:16+00:00",
|
||||
"time": "2024-01-23T13:51:25+00:00",
|
||||
"type": "library",
|
||||
"installation-source": "dist",
|
||||
"autoload": {
|
||||
@ -2403,7 +2395,7 @@
|
||||
"serialize"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/var-exporter/tree/v5.4.26"
|
||||
"source": "https://github.com/symfony/var-exporter/tree/v5.4.35"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@ -3321,17 +3313,17 @@
|
||||
},
|
||||
{
|
||||
"name": "workerman/workerman",
|
||||
"version": "v4.1.13",
|
||||
"version_normalized": "4.1.13.0",
|
||||
"version": "v4.1.15",
|
||||
"version_normalized": "4.1.15.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/walkor/workerman.git",
|
||||
"reference": "807780ff672775fcd08f89e573a2824e939021ce"
|
||||
"reference": "afc8242fc769ab7cf22eb4ac22b97cb59d465e4e"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/walkor/workerman/zipball/807780ff672775fcd08f89e573a2824e939021ce",
|
||||
"reference": "807780ff672775fcd08f89e573a2824e939021ce",
|
||||
"url": "https://api.github.com/repos/walkor/workerman/zipball/afc8242fc769ab7cf22eb4ac22b97cb59d465e4e",
|
||||
"reference": "afc8242fc769ab7cf22eb4ac22b97cb59d465e4e",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@ -3340,7 +3332,7 @@
|
||||
"suggest": {
|
||||
"ext-event": "For better performance. "
|
||||
},
|
||||
"time": "2023-07-31T05:57:25+00:00",
|
||||
"time": "2024-02-19T02:10:39+00:00",
|
||||
"type": "library",
|
||||
"installation-source": "dist",
|
||||
"autoload": {
|
||||
|
64
vendor/composer/installed.php
vendored
64
vendor/composer/installed.php
vendored
@ -3,7 +3,7 @@
|
||||
'name' => 'taoser/taoler',
|
||||
'pretty_version' => '2.3.10.x-dev',
|
||||
'version' => '2.3.10.9999999-dev',
|
||||
'reference' => '1bc07dde67cd6605da4e8444bd50db23b3da2c0b',
|
||||
'reference' => '2e95b716720018a27230c873200926631e74e781',
|
||||
'type' => 'project',
|
||||
'install_path' => __DIR__ . '/../../',
|
||||
'aliases' => array(),
|
||||
@ -65,9 +65,9 @@
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'firebase/php-jwt' => array(
|
||||
'pretty_version' => 'v6.9.0',
|
||||
'version' => '6.9.0.0',
|
||||
'reference' => 'f03270e63eaccf3019ef0f32849c497385774e11',
|
||||
'pretty_version' => 'v6.10.0',
|
||||
'version' => '6.10.0.0',
|
||||
'reference' => 'a49db6f0a5033aef5143295342f1c95521b075ff',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../firebase/php-jwt',
|
||||
'aliases' => array(),
|
||||
@ -101,9 +101,9 @@
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'jaeger/g-http' => array(
|
||||
'pretty_version' => 'V1.7.2',
|
||||
'version' => '1.7.2.0',
|
||||
'reference' => '82585ddd5e2c6651e37ab1d8166efcdbb6b293d4',
|
||||
'pretty_version' => 'V1.7.3',
|
||||
'version' => '1.7.3.0',
|
||||
'reference' => '035fe0ff6e3e0390769647ce14694875bf02cf22',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../jaeger/g-http',
|
||||
'aliases' => array(),
|
||||
@ -146,9 +146,9 @@
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'league/mime-type-detection' => array(
|
||||
'pretty_version' => '1.14.0',
|
||||
'version' => '1.14.0.0',
|
||||
'reference' => 'b6a5854368533df0295c5761a0253656a2e52d9e',
|
||||
'pretty_version' => '1.15.0',
|
||||
'version' => '1.15.0.0',
|
||||
'reference' => 'ce0f4d1e8a6f4eb0ddff33f57c69c50fd09f4301',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../league/mime-type-detection',
|
||||
'aliases' => array(),
|
||||
@ -164,9 +164,9 @@
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'overtrue/easy-sms' => array(
|
||||
'pretty_version' => '2.5.0',
|
||||
'version' => '2.5.0.0',
|
||||
'reference' => '81d4deec69bbb6de6e5fdd7ab90cc933bd3e3046',
|
||||
'pretty_version' => '2.6.0',
|
||||
'version' => '2.6.0.0',
|
||||
'reference' => 'bb88b244f0de8d1f74bc50c4c08414f4c5f30281',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../overtrue/easy-sms',
|
||||
'aliases' => array(),
|
||||
@ -200,9 +200,9 @@
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'phpmailer/phpmailer' => array(
|
||||
'pretty_version' => 'v6.8.1',
|
||||
'version' => '6.8.1.0',
|
||||
'reference' => 'e88da8d679acc3824ff231fdc553565b802ac016',
|
||||
'pretty_version' => 'v6.9.1',
|
||||
'version' => '6.9.1.0',
|
||||
'reference' => '039de174cd9c17a8389754d3b877a2ed22743e18',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../phpmailer/phpmailer',
|
||||
'aliases' => array(),
|
||||
@ -311,27 +311,27 @@
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'symfony/polyfill-mbstring' => array(
|
||||
'pretty_version' => 'v1.28.0',
|
||||
'version' => '1.28.0.0',
|
||||
'reference' => '42292d99c55abe617799667f454222c54c60e229',
|
||||
'pretty_version' => 'v1.29.0',
|
||||
'version' => '1.29.0.0',
|
||||
'reference' => '9773676c8a1bb1f8d4340a62efe641cf76eda7ec',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../symfony/polyfill-mbstring',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'symfony/polyfill-php72' => array(
|
||||
'pretty_version' => 'v1.28.0',
|
||||
'version' => '1.28.0.0',
|
||||
'reference' => '70f4aebd92afca2f865444d30a4d2151c13c3179',
|
||||
'pretty_version' => 'v1.29.0',
|
||||
'version' => '1.29.0.0',
|
||||
'reference' => '861391a8da9a04cbad2d232ddd9e4893220d6e25',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../symfony/polyfill-php72',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'symfony/polyfill-php80' => array(
|
||||
'pretty_version' => 'v1.28.0',
|
||||
'version' => '1.28.0.0',
|
||||
'reference' => '6caa57379c4aec19c0a12a38b59b26487dcfe4b5',
|
||||
'pretty_version' => 'v1.29.0',
|
||||
'version' => '1.29.0.0',
|
||||
'reference' => '87b68208d5c1188808dd7839ee1e6c8ec3b02f1b',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../symfony/polyfill-php80',
|
||||
'aliases' => array(),
|
||||
@ -347,9 +347,9 @@
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'symfony/var-exporter' => array(
|
||||
'pretty_version' => 'v5.4.26',
|
||||
'version' => '5.4.26.0',
|
||||
'reference' => '11401fe94f960249b3c63a488c63ba73091c1e4a',
|
||||
'pretty_version' => 'v5.4.35',
|
||||
'version' => '5.4.35.0',
|
||||
'reference' => 'abb0a151b62d6b07e816487e20040464af96cae7',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../symfony/var-exporter',
|
||||
'aliases' => array(),
|
||||
@ -358,7 +358,7 @@
|
||||
'taoser/taoler' => array(
|
||||
'pretty_version' => '2.3.10.x-dev',
|
||||
'version' => '2.3.10.9999999-dev',
|
||||
'reference' => '1bc07dde67cd6605da4e8444bd50db23b3da2c0b',
|
||||
'reference' => '2e95b716720018a27230c873200926631e74e781',
|
||||
'type' => 'project',
|
||||
'install_path' => __DIR__ . '/../../',
|
||||
'aliases' => array(),
|
||||
@ -509,9 +509,9 @@
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'workerman/workerman' => array(
|
||||
'pretty_version' => 'v4.1.13',
|
||||
'version' => '4.1.13.0',
|
||||
'reference' => '807780ff672775fcd08f89e573a2824e939021ce',
|
||||
'pretty_version' => 'v4.1.15',
|
||||
'version' => '4.1.15.0',
|
||||
'reference' => 'afc8242fc769ab7cf22eb4ac22b97cb59d465e4e',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../workerman/workerman',
|
||||
'aliases' => array(),
|
||||
|
7
vendor/firebase/php-jwt/CHANGELOG.md
vendored
7
vendor/firebase/php-jwt/CHANGELOG.md
vendored
@ -1,5 +1,12 @@
|
||||
# Changelog
|
||||
|
||||
## [6.10.0](https://github.com/firebase/php-jwt/compare/v6.9.0...v6.10.0) (2023-11-28)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* allow typ header override ([#546](https://github.com/firebase/php-jwt/issues/546)) ([79cb30b](https://github.com/firebase/php-jwt/commit/79cb30b729a22931b2fbd6b53f20629a83031ba9))
|
||||
|
||||
## [6.9.0](https://github.com/firebase/php-jwt/compare/v6.8.1...v6.9.0) (2023-10-04)
|
||||
|
||||
|
||||
|
9
vendor/firebase/php-jwt/src/JWT.php
vendored
9
vendor/firebase/php-jwt/src/JWT.php
vendored
@ -203,13 +203,14 @@ class JWT
|
||||
string $keyId = null,
|
||||
array $head = null
|
||||
): string {
|
||||
$header = ['typ' => 'JWT', 'alg' => $alg];
|
||||
$header = ['typ' => 'JWT'];
|
||||
if (isset($head) && \is_array($head)) {
|
||||
$header = \array_merge($header, $head);
|
||||
}
|
||||
$header['alg'] = $alg;
|
||||
if ($keyId !== null) {
|
||||
$header['kid'] = $keyId;
|
||||
}
|
||||
if (isset($head) && \is_array($head)) {
|
||||
$header = \array_merge($head, $header);
|
||||
}
|
||||
$segments = [];
|
||||
$segments[] = static::urlsafeB64Encode((string) static::jsonEncode($header));
|
||||
$segments[] = static::urlsafeB64Encode((string) static::jsonEncode($payload));
|
||||
|
2
vendor/jaeger/g-http/composer.json
vendored
2
vendor/jaeger/g-http/composer.json
vendored
@ -10,7 +10,7 @@
|
||||
],
|
||||
"require": {
|
||||
"cache/filesystem-adapter": "^1",
|
||||
"guzzlehttp/guzzle": "^6.0 | ^7.0"
|
||||
"guzzlehttp/guzzle": "^6.0 || ^7.0"
|
||||
},
|
||||
"autoload":{
|
||||
"psr-4":{
|
||||
|
@ -1,5 +1,9 @@
|
||||
# Changelog
|
||||
|
||||
## 1.15.0 - 2024-01-28
|
||||
|
||||
- Updated lookup
|
||||
|
||||
## 1.14.0 - 2022-10-17
|
||||
|
||||
### Updated
|
||||
|
@ -100,6 +100,7 @@ class GeneratedExtensionToMimeTypeMap implements ExtensionToMimeTypeMap, Extensi
|
||||
'boz' => 'application/x-bzip2',
|
||||
'bpk' => 'application/octet-stream',
|
||||
'bpmn' => 'application/octet-stream',
|
||||
'brf' => 'application/braille',
|
||||
'bsp' => 'model/vnd.valve.source.compiled-map',
|
||||
'btf' => 'image/prs.btif',
|
||||
'btif' => 'image/prs.btif',
|
||||
@ -2274,6 +2275,7 @@ class GeneratedExtensionToMimeTypeMap implements ExtensionToMimeTypeMap, Extensi
|
||||
'application/cdr' => ['cdr'],
|
||||
'application/STEP' => ['step', 'stp'],
|
||||
'application/x-ndjson' => ['ndjson'],
|
||||
'application/braille' => ['brf'],
|
||||
];
|
||||
|
||||
public function lookupMimeType(string $extension): ?string
|
||||
|
16
vendor/overtrue/easy-sms/README.md
vendored
16
vendor/overtrue/easy-sms/README.md
vendored
@ -531,7 +531,7 @@ $easySms->send($phone_number, [
|
||||
'account' => '',
|
||||
'password' => '',
|
||||
'needstatus' => false,
|
||||
'channel' => \Overtrue\EasySms\Gateways\ChuanglanV1Gateway::CHANNEL_NORMAL_CODE,
|
||||
'channel' => \Overtrue\EasySms\Gateways\Chuanglanv1Gateway::CHANNEL_NORMAL_CODE,
|
||||
],
|
||||
```
|
||||
发送示例:
|
||||
@ -549,7 +549,7 @@ $easySms->send(18888888888, [
|
||||
'account' => '',
|
||||
'password' => '',
|
||||
'needstatus' => false,
|
||||
'channel' => \Overtrue\EasySms\Gateways\ChuanglanV1Gateway::CHANNEL_VARIABLE_CODE,
|
||||
'channel' => \Overtrue\EasySms\Gateways\Chuanglanv1Gateway::CHANNEL_VARIABLE_CODE,
|
||||
],
|
||||
```
|
||||
发送示例:
|
||||
@ -709,6 +709,18 @@ $easySms->send(18888888888, [
|
||||
],
|
||||
]);
|
||||
```
|
||||
通知模板短信
|
||||
|
||||
```php
|
||||
$easySms->send(18888888888, [
|
||||
'template' => 'templateid', // 模板编号(由客户顾问配置之后告知开发者)
|
||||
'data' => [
|
||||
'action' => 'sendTemplate', // 默认为 `sendCode`,校验短信验证码使用 `verifyCode`
|
||||
'params' => [1,2,3], //短信参数列表,用于依次填充模板
|
||||
],
|
||||
]);
|
||||
```
|
||||
|
||||
|
||||
### [云之讯](https://www.ucpaas.com/index.html)
|
||||
|
||||
|
@ -18,6 +18,9 @@ class NowcnGateway extends Gateway
|
||||
|
||||
public function send(PhoneNumberInterface $to, MessageInterface $message, Config $config)
|
||||
{
|
||||
if (!$config->get('key')) {
|
||||
throw new GatewayErrorException("key not found", -2, []);
|
||||
}
|
||||
$params=[
|
||||
'mobile' => $to->getNumber(),
|
||||
'content' => $message->getContent($this),
|
||||
@ -26,6 +29,7 @@ class NowcnGateway extends Gateway
|
||||
'apiType' => $config->get('api_type'),
|
||||
];
|
||||
$result = $this->get(self::ENDPOINT_URL, $params);
|
||||
$result = is_string($result) ? json_decode($result, true) : $result;
|
||||
if (self::SUCCESS_CODE != $result['code']) {
|
||||
throw new GatewayErrorException($result['msg'], $result['code'], $result);
|
||||
}
|
||||
|
@ -61,6 +61,10 @@ class YunxinGateway extends Gateway
|
||||
case 'verifyCode':
|
||||
$params = $this->buildVerifyCodeParams($to, $message);
|
||||
|
||||
break;
|
||||
case "sendTemplate":
|
||||
$params = $this->buildTemplateParams($to, $message, $config);
|
||||
|
||||
break;
|
||||
default:
|
||||
throw new GatewayErrorException(sprintf('action: %s not supported', $action), 0);
|
||||
@ -159,4 +163,26 @@ class YunxinGateway extends Gateway
|
||||
'code' => $data['code'],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @param PhoneNumberInterface $to
|
||||
* @param MessageInterface $message
|
||||
* @param Config $config
|
||||
* @return array
|
||||
*
|
||||
*/
|
||||
public function buildTemplateParams(PhoneNumberInterface $to, MessageInterface $message, Config $config)
|
||||
{
|
||||
$data = $message->getData($this);
|
||||
|
||||
$template = $message->getTemplate($this);
|
||||
|
||||
return [
|
||||
'templateid'=>$template,
|
||||
'mobiles'=>json_encode([$to->getUniversalNumber()]),
|
||||
'params'=>array_key_exists('params',$data) ? json_encode($data['params']) : '',
|
||||
'needUp'=>$config->get('need_up', false)
|
||||
];
|
||||
|
||||
}
|
||||
}
|
||||
|
15
vendor/phpmailer/phpmailer/.editorconfig
vendored
Normal file
15
vendor/phpmailer/phpmailer/.editorconfig
vendored
Normal file
@ -0,0 +1,15 @@
|
||||
root = true
|
||||
|
||||
[*]
|
||||
charset = utf-8
|
||||
indent_size = 4
|
||||
indent_style = space
|
||||
end_of_line = lf
|
||||
insert_final_newline = true
|
||||
trim_trailing_whitespace = true
|
||||
|
||||
[*.md]
|
||||
trim_trailing_whitespace = false
|
||||
|
||||
[*.{yml,yaml}]
|
||||
indent_size = 2
|
5
vendor/phpmailer/phpmailer/README.md
vendored
5
vendor/phpmailer/phpmailer/README.md
vendored
@ -47,7 +47,7 @@ This software is distributed under the [LGPL 2.1](http://www.gnu.org/licenses/lg
|
||||
PHPMailer is available on [Packagist](https://packagist.org/packages/phpmailer/phpmailer) (using semantic versioning), and installation via [Composer](https://getcomposer.org) is the recommended way to install PHPMailer. Just add this line to your `composer.json` file:
|
||||
|
||||
```json
|
||||
"phpmailer/phpmailer": "^6.8.1"
|
||||
"phpmailer/phpmailer": "^6.9.1"
|
||||
```
|
||||
|
||||
or run
|
||||
@ -58,7 +58,8 @@ composer require phpmailer/phpmailer
|
||||
|
||||
Note that the `vendor` folder and the `vendor/autoload.php` script are generated by Composer; they are not part of PHPMailer.
|
||||
|
||||
If you want to use the Gmail XOAUTH2 authentication class, you will also need to add a dependency on the `league/oauth2-client` package in your `composer.json`.
|
||||
If you want to use XOAUTH2 authentication, you will also need to add a dependency on the `league/oauth2-client` and appropriate service adapters package in your `composer.json`, or take a look at
|
||||
by @decomplexity's [SendOauth2 wrapper](https://github.com/decomplexity/SendOauth2), especially if you're using Microsoft services.
|
||||
|
||||
Alternatively, if you're not using Composer, you
|
||||
can [download PHPMailer as a zip file](https://github.com/PHPMailer/PHPMailer/archive/master.zip), (note that docs and examples are not included in the zip file), then copy the contents of the PHPMailer folder into one of the `include_path` directories specified in your PHP configuration and load each class file manually:
|
||||
|
2
vendor/phpmailer/phpmailer/VERSION
vendored
2
vendor/phpmailer/phpmailer/VERSION
vendored
@ -1 +1 @@
|
||||
6.8.1
|
||||
6.9.1
|
||||
|
1
vendor/phpmailer/phpmailer/composer.json
vendored
1
vendor/phpmailer/phpmailer/composer.json
vendored
@ -47,6 +47,7 @@
|
||||
"yoast/phpunit-polyfills": "^1.0.4"
|
||||
},
|
||||
"suggest": {
|
||||
"decomplexity/SendOauth2": "Adapter for using XOAUTH2 authentication",
|
||||
"ext-mbstring": "Needed to send email in multibyte encoding charset or decode encoded addresses",
|
||||
"ext-openssl": "Needed for secure SMTP sending and DKIM signing",
|
||||
"greew/oauth2-azure-provider": "Needed for Microsoft Azure XOAUTH2 authentication",
|
||||
|
35
vendor/phpmailer/phpmailer/language/phpmailer.lang-as.php
vendored
Normal file
35
vendor/phpmailer/phpmailer/language/phpmailer.lang-as.php
vendored
Normal file
@ -0,0 +1,35 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Assamese PHPMailer language file: refer to English translation for definitive list
|
||||
* @package PHPMailer
|
||||
* @author Manish Sarkar <manish.n.manish@gmail.com>
|
||||
*/
|
||||
|
||||
$PHPMAILER_LANG['authenticate'] = 'SMTP ত্ৰুটি: প্ৰমাণীকৰণ কৰিব নোৱাৰি';
|
||||
$PHPMAILER_LANG['buggy_php'] = 'আপোনাৰ PHP সংস্কৰণ এটা বাগৰ দ্বাৰা প্ৰভাৱিত হয় যাৰ ফলত নষ্ট বাৰ্তা হব পাৰে । ইয়াক সমাধান কৰিবলে, প্ৰেৰণ কৰিবলে SMTP ব্যৱহাৰ কৰক, আপোনাৰ php.ini ত mail.add_x_header বিকল্প নিষ্ক্ৰিয় কৰক, MacOS বা Linux লৈ সলনি কৰক, বা আপোনাৰ PHP সংস্কৰণ 7.0.17+ বা 7.1.3+ লৈ সলনি কৰক ।';
|
||||
$PHPMAILER_LANG['connect_host'] = 'SMTP ত্ৰুটি: SMTP চাৰ্ভাৰৰ সৈতে সংযোগ কৰিবলে অক্ষম';
|
||||
$PHPMAILER_LANG['data_not_accepted'] = 'SMTP ত্ৰুটি: তথ্য গ্ৰহণ কৰা হোৱা নাই';
|
||||
$PHPMAILER_LANG['empty_message'] = 'বাৰ্তাৰ মূখ্য অংশ খালী।';
|
||||
$PHPMAILER_LANG['encoding'] = 'অজ্ঞাত এনকোডিং: ';
|
||||
$PHPMAILER_LANG['execute'] = 'এক্সিকিউট কৰিব নোৱাৰি: ';
|
||||
$PHPMAILER_LANG['extension_missing'] = 'সম্প্ৰসাৰণ নোহোৱা হৈছে: ';
|
||||
$PHPMAILER_LANG['file_access'] = 'ফাইল অভিগম কৰিবলে অক্ষম: ';
|
||||
$PHPMAILER_LANG['file_open'] = 'ফাইল ত্ৰুটি: ফাইল খোলিবলৈ অক্ষম: ';
|
||||
$PHPMAILER_LANG['from_failed'] = 'নিম্নলিখিত প্ৰেৰকৰ ঠিকনা(সমূহ) ব্যৰ্থ: ';
|
||||
$PHPMAILER_LANG['instantiate'] = 'মেইল ফাংচনৰ এটা উদাহৰণ সৃষ্টি কৰিবলে অক্ষম';
|
||||
$PHPMAILER_LANG['invalid_address'] = 'প্ৰেৰণ কৰিব নোৱাৰি: অবৈধ ইমেইল ঠিকনা: ';
|
||||
$PHPMAILER_LANG['invalid_header'] = 'অবৈধ হেডাৰৰ নাম বা মান';
|
||||
$PHPMAILER_LANG['invalid_hostentry'] = 'অবৈধ হোষ্টেন্ট্ৰি: ';
|
||||
$PHPMAILER_LANG['invalid_host'] = 'অবৈধ হস্ট:';
|
||||
$PHPMAILER_LANG['mailer_not_supported'] = 'মেইলাৰ সমৰ্থিত নহয়।';
|
||||
$PHPMAILER_LANG['provide_address'] = 'আপুনি অন্ততঃ এটা গন্তব্য ইমেইল ঠিকনা দিব লাগিব';
|
||||
$PHPMAILER_LANG['recipients_failed'] = 'SMTP ত্ৰুটি: নিম্নলিখিত গন্তব্যস্থানসমূহ ব্যৰ্থ: ';
|
||||
$PHPMAILER_LANG['signing'] = 'স্বাক্ষৰ কৰাত ব্যৰ্থ: ';
|
||||
$PHPMAILER_LANG['smtp_code'] = 'SMTP কড: ';
|
||||
$PHPMAILER_LANG['smtp_code_ex'] = 'অতিৰিক্ত SMTP তথ্য: ';
|
||||
$PHPMAILER_LANG['smtp_detail'] = 'বিৱৰণ:';
|
||||
$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP সংযোগ() ব্যৰ্থ';
|
||||
$PHPMAILER_LANG['smtp_error'] = 'SMTP চাৰ্ভাৰৰ ত্ৰুটি: ';
|
||||
$PHPMAILER_LANG['variable_set'] = 'চলক নিৰ্ধাৰণ কৰিব পৰা নগল: ';
|
||||
$PHPMAILER_LANG['extension_missing'] = 'অনুপস্থিত সম্প্ৰসাৰণ: ';
|
35
vendor/phpmailer/phpmailer/language/phpmailer.lang-bn.php
vendored
Normal file
35
vendor/phpmailer/phpmailer/language/phpmailer.lang-bn.php
vendored
Normal file
@ -0,0 +1,35 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Bengali PHPMailer language file: refer to English translation for definitive list
|
||||
* @package PHPMailer
|
||||
* @author Manish Sarkar <manish.n.manish@gmail.com>
|
||||
*/
|
||||
|
||||
$PHPMAILER_LANG['authenticate'] = 'SMTP ত্রুটি: প্রমাণীকরণ করতে অক্ষম৷';
|
||||
$PHPMAILER_LANG['buggy_php'] = 'আপনার PHP সংস্করণ একটি বাগ দ্বারা প্রভাবিত হয় যার ফলে দূষিত বার্তা হতে পারে। এটি ঠিক করতে, পাঠাতে SMTP ব্যবহার করুন, আপনার php.ini এ mail.add_x_header বিকল্পটি নিষ্ক্রিয় করুন, MacOS বা Linux-এ স্যুইচ করুন, অথবা আপনার PHP সংস্করণকে 7.0.17+ বা 7.1.3+ এ পরিবর্তন করুন।';
|
||||
$PHPMAILER_LANG['connect_host'] = 'SMTP ত্রুটি: SMTP সার্ভারের সাথে সংযোগ করতে অক্ষম৷';
|
||||
$PHPMAILER_LANG['data_not_accepted'] = 'SMTP ত্রুটি: ডেটা গ্রহণ করা হয়নি৷';
|
||||
$PHPMAILER_LANG['empty_message'] = 'বার্তার অংশটি খালি।';
|
||||
$PHPMAILER_LANG['encoding'] = 'অজানা এনকোডিং: ';
|
||||
$PHPMAILER_LANG['execute'] = 'নির্বাহ করতে অক্ষম: ';
|
||||
$PHPMAILER_LANG['extension_missing'] = 'এক্সটেনশন অনুপস্থিত:';
|
||||
$PHPMAILER_LANG['file_access'] = 'ফাইল অ্যাক্সেস করতে অক্ষম: ';
|
||||
$PHPMAILER_LANG['file_open'] = 'ফাইল ত্রুটি: ফাইল খুলতে অক্ষম: ';
|
||||
$PHPMAILER_LANG['from_failed'] = 'নিম্নলিখিত প্রেরকের ঠিকানা(গুলি) ব্যর্থ হয়েছে: ';
|
||||
$PHPMAILER_LANG['instantiate'] = 'মেল ফাংশনের একটি উদাহরণ তৈরি করতে অক্ষম৷';
|
||||
$PHPMAILER_LANG['invalid_address'] = 'পাঠাতে অক্ষম: অবৈধ ইমেল ঠিকানা: ';
|
||||
$PHPMAILER_LANG['invalid_header'] = 'অবৈধ হেডার নাম বা মান';
|
||||
$PHPMAILER_LANG['invalid_hostentry'] = 'অবৈধ হোস্টেন্ট্রি: ';
|
||||
$PHPMAILER_LANG['invalid_host'] = 'অবৈধ হোস্ট:';
|
||||
$PHPMAILER_LANG['mailer_not_supported'] = 'মেইলার সমর্থিত নয়।';
|
||||
$PHPMAILER_LANG['provide_address'] = 'আপনাকে অবশ্যই অন্তত একটি গন্তব্য ইমেল ঠিকানা প্রদান করতে হবে৷';
|
||||
$PHPMAILER_LANG['recipients_failed'] = 'SMTP ত্রুটি: নিম্নলিখিত গন্তব্যগুলি ব্যর্থ হয়েছে: ';
|
||||
$PHPMAILER_LANG['signing'] = 'স্বাক্ষর করতে ব্যর্থ হয়েছে: ';
|
||||
$PHPMAILER_LANG['smtp_code'] = 'SMTP কোড: ';
|
||||
$PHPMAILER_LANG['smtp_code_ex'] = 'অতিরিক্ত SMTP তথ্য:';
|
||||
$PHPMAILER_LANG['smtp_detail'] = 'বর্ণনা: ';
|
||||
$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP সংযোগ() ব্যর্থ হয়েছে৷';
|
||||
$PHPMAILER_LANG['smtp_error'] = 'SMTP সার্ভার ত্রুটি: ';
|
||||
$PHPMAILER_LANG['variable_set'] = 'পরিবর্তনশীল সেট করা যায়নি: ';
|
||||
$PHPMAILER_LANG['extension_missing'] = 'অনুপস্থিত এক্সটেনশন: ';
|
@ -9,6 +9,7 @@
|
||||
*/
|
||||
|
||||
$PHPMAILER_LANG['authenticate'] = 'SMTP fejl: Login mislykkedes.';
|
||||
$PHPMAILER_LANG['buggy_php'] = 'Din version af PHP er berørt af en fejl, som gør at dine beskeder muligvis vises forkert. For at rette dette kan du skifte til SMTP, slå mail.add_x_header headeren i din php.ini fil fra, skifte til MacOS eller Linux eller opgradere din version af PHP til 7.0.17+ eller 7.1.3+.';
|
||||
$PHPMAILER_LANG['connect_host'] = 'SMTP fejl: Forbindelse til SMTP serveren kunne ikke oprettes.';
|
||||
$PHPMAILER_LANG['data_not_accepted'] = 'SMTP fejl: Data blev ikke accepteret.';
|
||||
$PHPMAILER_LANG['empty_message'] = 'Meddelelsen er uden indhold';
|
||||
|
@ -6,21 +6,28 @@
|
||||
*/
|
||||
|
||||
$PHPMAILER_LANG['authenticate'] = 'Błąd SMTP: Nie można przeprowadzić uwierzytelnienia.';
|
||||
$PHPMAILER_LANG['buggy_php'] = 'Twoja wersja PHP zawiera błąd, który może powodować uszkodzenie wiadomości. Aby go naprawić, przełącz się na wysyłanie za pomocą SMTP, wyłącz opcję mail.add_x_header w php.ini, przełącz się na MacOS lub Linux lub zaktualizuj PHP do wersji 7.0.17+ lub 7.1.3+.';
|
||||
$PHPMAILER_LANG['connect_host'] = 'Błąd SMTP: Nie można połączyć się z wybranym hostem.';
|
||||
$PHPMAILER_LANG['data_not_accepted'] = 'Błąd SMTP: Dane nie zostały przyjęte.';
|
||||
$PHPMAILER_LANG['empty_message'] = 'Wiadomość jest pusta.';
|
||||
$PHPMAILER_LANG['encoding'] = 'Błędny sposób kodowania znaków: ';
|
||||
$PHPMAILER_LANG['execute'] = 'Nie można uruchomić: ';
|
||||
$PHPMAILER_LANG['extension_missing'] = 'Brakujące rozszerzenie: ';
|
||||
$PHPMAILER_LANG['file_access'] = 'Brak dostępu do pliku: ';
|
||||
$PHPMAILER_LANG['file_open'] = 'Nie można otworzyć pliku: ';
|
||||
$PHPMAILER_LANG['from_failed'] = 'Następujący adres nadawcy jest nieprawidłowy lub nie istnieje: ';
|
||||
$PHPMAILER_LANG['instantiate'] = 'Nie można wywołać funkcji mail(). Sprawdź konfigurację serwera.';
|
||||
$PHPMAILER_LANG['invalid_address'] = 'Nie można wysłać wiadomości, ' . 'następujący adres odbiorcy jest nieprawidłowy lub nie istnieje: ';
|
||||
$PHPMAILER_LANG['invalid_header'] = 'Nieprawidłowa nazwa lub wartość nagłówka';
|
||||
$PHPMAILER_LANG['invalid_hostentry'] = 'Nieprawidłowy wpis hosta: ';
|
||||
$PHPMAILER_LANG['invalid_host'] = 'Nieprawidłowy host: ';
|
||||
$PHPMAILER_LANG['provide_address'] = 'Należy podać prawidłowy adres email odbiorcy.';
|
||||
$PHPMAILER_LANG['mailer_not_supported'] = 'Wybrana metoda wysyłki wiadomości nie jest obsługiwana.';
|
||||
$PHPMAILER_LANG['recipients_failed'] = 'Błąd SMTP: Następujący odbiorcy są nieprawidłowi lub nie istnieją: ';
|
||||
$PHPMAILER_LANG['signing'] = 'Błąd podpisywania wiadomości: ';
|
||||
$PHPMAILER_LANG['smtp_code'] = 'Kod SMTP: ';
|
||||
$PHPMAILER_LANG['smtp_code_ex'] = 'Dodatkowe informacje SMTP: ';
|
||||
$PHPMAILER_LANG['smtp_connect_failed'] = 'Wywołanie funkcji SMTP Connect() zostało zakończone niepowodzeniem.';
|
||||
$PHPMAILER_LANG['smtp_detail'] = 'Szczegóły: ';
|
||||
$PHPMAILER_LANG['smtp_error'] = 'Błąd SMTP: ';
|
||||
$PHPMAILER_LANG['variable_set'] = 'Nie można ustawić lub zmodyfikować zmiennej: ';
|
||||
$PHPMAILER_LANG['extension_missing'] = 'Brakujące rozszerzenie: ';
|
||||
|
130
vendor/phpmailer/phpmailer/src/PHPMailer.php
vendored
130
vendor/phpmailer/phpmailer/src/PHPMailer.php
vendored
@ -357,6 +357,13 @@ class PHPMailer
|
||||
*/
|
||||
public $AuthType = '';
|
||||
|
||||
/**
|
||||
* SMTP SMTPXClient command attibutes
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $SMTPXClient = [];
|
||||
|
||||
/**
|
||||
* An implementation of the PHPMailer OAuthTokenProvider interface.
|
||||
*
|
||||
@ -750,7 +757,7 @@ class PHPMailer
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
const VERSION = '6.8.1';
|
||||
const VERSION = '6.9.1';
|
||||
|
||||
/**
|
||||
* Error severity: message only, continue processing.
|
||||
@ -1571,6 +1578,10 @@ class PHPMailer
|
||||
|
||||
//Validate From, Sender, and ConfirmReadingTo addresses
|
||||
foreach (['From', 'Sender', 'ConfirmReadingTo'] as $address_kind) {
|
||||
if ($this->{$address_kind} === null) {
|
||||
$this->{$address_kind} = '';
|
||||
continue;
|
||||
}
|
||||
$this->{$address_kind} = trim($this->{$address_kind});
|
||||
if (empty($this->{$address_kind})) {
|
||||
continue;
|
||||
@ -1997,6 +2008,38 @@ class PHPMailer
|
||||
return $this->smtp;
|
||||
}
|
||||
|
||||
/**
|
||||
* Provide SMTP XCLIENT attributes
|
||||
*
|
||||
* @param string $name Attribute name
|
||||
* @param ?string $value Attribute value
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function setSMTPXclientAttribute($name, $value)
|
||||
{
|
||||
if (!in_array($name, SMTP::$xclient_allowed_attributes)) {
|
||||
return false;
|
||||
}
|
||||
if (isset($this->SMTPXClient[$name]) && $value === null) {
|
||||
unset($this->SMTPXClient[$name]);
|
||||
} elseif ($value !== null) {
|
||||
$this->SMTPXClient[$name] = $value;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get SMTP XCLIENT attributes
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function getSMTPXclientAttributes()
|
||||
{
|
||||
return $this->SMTPXClient;
|
||||
}
|
||||
|
||||
/**
|
||||
* Send mail via SMTP.
|
||||
* Returns false if there is a bad MAIL FROM, RCPT, or DATA input.
|
||||
@ -2025,6 +2068,9 @@ class PHPMailer
|
||||
} else {
|
||||
$smtp_from = $this->Sender;
|
||||
}
|
||||
if (count($this->SMTPXClient)) {
|
||||
$this->smtp->xclient($this->SMTPXClient);
|
||||
}
|
||||
if (!$this->smtp->mail($smtp_from)) {
|
||||
$this->setError($this->lang('from_failed') . $smtp_from . ' : ' . implode(',', $this->smtp->getError()));
|
||||
throw new Exception($this->ErrorInfo, self::STOP_CRITICAL);
|
||||
@ -2187,10 +2233,17 @@ class PHPMailer
|
||||
$this->smtp->hello($hello);
|
||||
//Automatically enable TLS encryption if:
|
||||
//* it's not disabled
|
||||
//* we are not connecting to localhost
|
||||
//* we have openssl extension
|
||||
//* we are not already using SSL
|
||||
//* the server offers STARTTLS
|
||||
if ($this->SMTPAutoTLS && $sslext && 'ssl' !== $secure && $this->smtp->getServerExt('STARTTLS')) {
|
||||
if (
|
||||
$this->SMTPAutoTLS &&
|
||||
$this->Host !== 'localhost' &&
|
||||
$sslext &&
|
||||
$secure !== 'ssl' &&
|
||||
$this->smtp->getServerExt('STARTTLS')
|
||||
) {
|
||||
$tls = true;
|
||||
}
|
||||
if ($tls) {
|
||||
@ -4047,6 +4100,79 @@ class PHPMailer
|
||||
$this->CustomHeader = [];
|
||||
}
|
||||
|
||||
/**
|
||||
* Clear a specific custom header by name or name and value.
|
||||
* $name value can be overloaded to contain
|
||||
* both header name and value (name:value).
|
||||
*
|
||||
* @param string $name Custom header name
|
||||
* @param string|null $value Header value
|
||||
*
|
||||
* @return bool True if a header was replaced successfully
|
||||
*/
|
||||
public function clearCustomHeader($name, $value = null)
|
||||
{
|
||||
if (null === $value && strpos($name, ':') !== false) {
|
||||
//Value passed in as name:value
|
||||
list($name, $value) = explode(':', $name, 2);
|
||||
}
|
||||
$name = trim($name);
|
||||
$value = (null === $value) ? null : trim($value);
|
||||
|
||||
foreach ($this->CustomHeader as $k => $pair) {
|
||||
if ($pair[0] == $name) {
|
||||
// We remove the header if the value is not provided or it matches.
|
||||
if (null === $value || $pair[1] == $value) {
|
||||
unset($this->CustomHeader[$k]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Replace a custom header.
|
||||
* $name value can be overloaded to contain
|
||||
* both header name and value (name:value).
|
||||
*
|
||||
* @param string $name Custom header name
|
||||
* @param string|null $value Header value
|
||||
*
|
||||
* @return bool True if a header was replaced successfully
|
||||
* @throws Exception
|
||||
*/
|
||||
public function replaceCustomHeader($name, $value = null)
|
||||
{
|
||||
if (null === $value && strpos($name, ':') !== false) {
|
||||
//Value passed in as name:value
|
||||
list($name, $value) = explode(':', $name, 2);
|
||||
}
|
||||
$name = trim($name);
|
||||
$value = (null === $value) ? '' : trim($value);
|
||||
|
||||
$replaced = false;
|
||||
foreach ($this->CustomHeader as $k => $pair) {
|
||||
if ($pair[0] == $name) {
|
||||
if ($replaced) {
|
||||
unset($this->CustomHeader[$k]);
|
||||
continue;
|
||||
}
|
||||
if (strpbrk($name . $value, "\r\n") !== false) {
|
||||
if ($this->exceptions) {
|
||||
throw new Exception($this->lang('invalid_header'));
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
$this->CustomHeader[$k] = [$name, $value];
|
||||
$replaced = true;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add an error message to the error container.
|
||||
*
|
||||
|
2
vendor/phpmailer/phpmailer/src/POP3.php
vendored
2
vendor/phpmailer/phpmailer/src/POP3.php
vendored
@ -46,7 +46,7 @@ class POP3
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
const VERSION = '6.8.1';
|
||||
const VERSION = '6.9.1';
|
||||
|
||||
/**
|
||||
* Default POP3 port number.
|
||||
|
33
vendor/phpmailer/phpmailer/src/SMTP.php
vendored
33
vendor/phpmailer/phpmailer/src/SMTP.php
vendored
@ -35,7 +35,7 @@ class SMTP
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
const VERSION = '6.8.1';
|
||||
const VERSION = '6.9.1';
|
||||
|
||||
/**
|
||||
* SMTP line break constant.
|
||||
@ -198,6 +198,18 @@ class SMTP
|
||||
'Mailjet' => '/[\d]{3} OK queued as (.*)/',
|
||||
];
|
||||
|
||||
/**
|
||||
* Allowed SMTP XCLIENT attributes.
|
||||
* Must be allowed by the SMTP server. EHLO response is not checked.
|
||||
*
|
||||
* @see https://www.postfix.org/XCLIENT_README.html
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
public static $xclient_allowed_attributes = [
|
||||
'NAME', 'ADDR', 'PORT', 'PROTO', 'HELO', 'LOGIN', 'DESTADDR', 'DESTPORT'
|
||||
];
|
||||
|
||||
/**
|
||||
* The last transaction ID issued in response to a DATA command,
|
||||
* if one was detected.
|
||||
@ -971,6 +983,25 @@ class SMTP
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Send SMTP XCLIENT command to server and check its return code.
|
||||
*
|
||||
* @return bool True on success
|
||||
*/
|
||||
public function xclient(array $vars)
|
||||
{
|
||||
$xclient_options = "";
|
||||
foreach ($vars as $key => $value) {
|
||||
if (in_array($key, SMTP::$xclient_allowed_attributes)) {
|
||||
$xclient_options .= " {$key}={$value}";
|
||||
}
|
||||
}
|
||||
if (!$xclient_options) {
|
||||
return true;
|
||||
}
|
||||
return $this->sendCommand('XCLIENT', 'XCLIENT' . $xclient_options, 250);
|
||||
}
|
||||
|
||||
/**
|
||||
* Send an SMTP RSET command.
|
||||
* Abort any transaction that is currently in progress.
|
||||
|
2
vendor/services.php
vendored
2
vendor/services.php
vendored
@ -1,5 +1,5 @@
|
||||
<?php
|
||||
// This file is automatically generated at:2023-11-23 17:07:27
|
||||
// This file is automatically generated at:2024-04-01 10:28:47
|
||||
declare (strict_types = 1);
|
||||
return array (
|
||||
0 => 'taoser\\addons\\Service',
|
||||
|
@ -30,9 +30,6 @@
|
||||
},
|
||||
"minimum-stability": "dev",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-main": "1.28-dev"
|
||||
},
|
||||
"thanks": {
|
||||
"name": "symfony/polyfill",
|
||||
"url": "https://github.com/symfony/polyfill"
|
||||
|
3
vendor/symfony/polyfill-php72/composer.json
vendored
3
vendor/symfony/polyfill-php72/composer.json
vendored
@ -24,9 +24,6 @@
|
||||
},
|
||||
"minimum-stability": "dev",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-main": "1.28-dev"
|
||||
},
|
||||
"thanks": {
|
||||
"name": "symfony/polyfill",
|
||||
"url": "https://github.com/symfony/polyfill"
|
||||
|
3
vendor/symfony/polyfill-php80/composer.json
vendored
3
vendor/symfony/polyfill-php80/composer.json
vendored
@ -29,9 +29,6 @@
|
||||
},
|
||||
"minimum-stability": "dev",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-main": "1.28-dev"
|
||||
},
|
||||
"thanks": {
|
||||
"name": "symfony/polyfill",
|
||||
"url": "https://github.com/symfony/polyfill"
|
||||
|
@ -13,7 +13,7 @@ namespace Symfony\Component\VarExporter\Exception;
|
||||
|
||||
class ClassNotFoundException extends \Exception implements ExceptionInterface
|
||||
{
|
||||
public function __construct(string $class, \Throwable $previous = null)
|
||||
public function __construct(string $class, ?\Throwable $previous = null)
|
||||
{
|
||||
parent::__construct(sprintf('Class "%s" not found.', $class), 0, $previous);
|
||||
}
|
||||
|
@ -13,7 +13,7 @@ namespace Symfony\Component\VarExporter\Exception;
|
||||
|
||||
class NotInstantiableTypeException extends \Exception implements ExceptionInterface
|
||||
{
|
||||
public function __construct(string $type, \Throwable $previous = null)
|
||||
public function __construct(string $type, ?\Throwable $previous = null)
|
||||
{
|
||||
parent::__construct(sprintf('Type "%s" is not instantiable.', $type), 0, $previous);
|
||||
}
|
||||
|
@ -157,11 +157,11 @@ class Exporter
|
||||
$n = substr($n, 1 + $i);
|
||||
}
|
||||
if (null !== $sleep) {
|
||||
if (!isset($sleep[$n]) || ($i && $c !== $class)) {
|
||||
if (!isset($sleep[$name]) && (!isset($sleep[$n]) || ($i && $c !== $class))) {
|
||||
unset($arrayValue[$name]);
|
||||
continue;
|
||||
}
|
||||
$sleep[$n] = false;
|
||||
unset($sleep[$name], $sleep[$n]);
|
||||
}
|
||||
if (!\array_key_exists($name, $proto) || $proto[$name] !== $v || "\x00Error\x00trace" === $name || "\x00Exception\x00trace" === $name) {
|
||||
$properties[$c][$n] = $v;
|
||||
@ -169,9 +169,7 @@ class Exporter
|
||||
}
|
||||
if ($sleep) {
|
||||
foreach ($sleep as $n => $v) {
|
||||
if (false !== $v) {
|
||||
trigger_error(sprintf('serialize(): "%s" returned as member variable from __sleep() but does not exist', $n), \E_USER_NOTICE);
|
||||
}
|
||||
trigger_error(sprintf('serialize(): "%s" returned as member variable from __sleep() but does not exist', $n), \E_USER_NOTICE);
|
||||
}
|
||||
}
|
||||
if (method_exists($class, '__unserialize')) {
|
||||
|
4
vendor/symfony/var-exporter/VarExporter.php
vendored
4
vendor/symfony/var-exporter/VarExporter.php
vendored
@ -38,7 +38,7 @@ final class VarExporter
|
||||
*
|
||||
* @throws ExceptionInterface When the provided value cannot be serialized
|
||||
*/
|
||||
public static function export($value, bool &$isStaticValue = null, array &$foundClasses = []): string
|
||||
public static function export($value, ?bool &$isStaticValue = null, array &$foundClasses = []): string
|
||||
{
|
||||
$isStaticValue = true;
|
||||
|
||||
@ -83,7 +83,7 @@ final class VarExporter
|
||||
ksort($states);
|
||||
|
||||
$wakeups = [null];
|
||||
foreach ($states as $k => $v) {
|
||||
foreach ($states as $v) {
|
||||
if (\is_array($v)) {
|
||||
$wakeups[-$v[0]] = $v[1];
|
||||
} else {
|
||||
|
@ -314,10 +314,10 @@ class Response
|
||||
* @param string $domain
|
||||
* @param bool $secure
|
||||
* @param bool $http_only
|
||||
* @param bool $same_site
|
||||
* @param string $same_site
|
||||
* @return $this
|
||||
*/
|
||||
public function cookie($name, $value = '', $max_age = null, $path = '', $domain = '', $secure = false, $http_only = false, $same_site = false)
|
||||
public function cookie($name, $value = '', $max_age = null, $path = '', $domain = '', $secure = false, $http_only = false, $same_site = '')
|
||||
{
|
||||
$this->_header['Set-Cookie'][] = $name . '=' . \rawurlencode($value)
|
||||
. (empty($domain) ? '' : '; Domain=' . $domain)
|
||||
|
11
vendor/workerman/workerman/Worker.php
vendored
11
vendor/workerman/workerman/Worker.php
vendored
@ -34,7 +34,7 @@ class Worker
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
const VERSION = '4.1.13';
|
||||
const VERSION = '4.1.15';
|
||||
|
||||
/**
|
||||
* Status starting.
|
||||
@ -569,8 +569,8 @@ class Worker
|
||||
*/
|
||||
protected static function checkSapiEnv()
|
||||
{
|
||||
// Only for cli.
|
||||
if (\PHP_SAPI !== 'cli') {
|
||||
// Only for cli and micro.
|
||||
if (!in_array(\PHP_SAPI, ['cli', 'micro'])) {
|
||||
exit("Only run in command line mode \n");
|
||||
}
|
||||
if (\DIRECTORY_SEPARATOR === '\\') {
|
||||
@ -943,7 +943,7 @@ class Worker
|
||||
exit;
|
||||
}
|
||||
|
||||
$statistics_file = static::$statusFile ? static::$statusFile : __DIR__ . "/../workerman-$master_pid.$command";
|
||||
$statistics_file = static::$statusFile ? static::$statusFile : __DIR__ . "/../workerman-$master_pid.status";
|
||||
|
||||
// execute command.
|
||||
switch ($command) {
|
||||
@ -1064,6 +1064,9 @@ class Worker
|
||||
try {
|
||||
$workerInfo = unserialize($info[0], ['allowed_classes' => false]);
|
||||
} catch (Throwable $exception) {}
|
||||
if (!is_array($workerInfo)) {
|
||||
$workerInfo = [];
|
||||
}
|
||||
\ksort($workerInfo, SORT_NUMERIC);
|
||||
unset($info[0]);
|
||||
$data_waiting_sort = array();
|
||||
|
@ -252,6 +252,7 @@
|
||||
</script>
|
||||
{// 编辑器}
|
||||
{:hook('taonyeditor')}
|
||||
{:hook('ueditor')}
|
||||
{// 百度标题词条}
|
||||
{:hook('seoBaiduTitle')}
|
||||
{// 百度关键词}
|
||||
|
@ -101,6 +101,7 @@
|
||||
</div>
|
||||
<div class="detail-hits">
|
||||
<span class="post-time" data="{comment:time}"></span>{:hook('ipShow',$comment.user.city)}</span>
|
||||
{if $comment.cai == 1}<i class="iconfont icon-caina" title="最佳答案"></i>{/if}
|
||||
</div>
|
||||
|
||||
{//加密未解密评论不可查看}
|
||||
@ -119,6 +120,9 @@
|
||||
<span type="edit" class="comment-edit" data-id="{comment:id /}">{:lang('edit')}</span>
|
||||
<span type="del" class="comment-del" data-id="{comment:id /}">{:lang('delete')}</span>
|
||||
{/if}
|
||||
{if ($comment.cai == 0) && ((session('user_id') == $article.user_id) OR ($user.auth ?? ''))/}
|
||||
<span class="jieda-accept" type="accept">{:lang('accept')}</span>
|
||||
{/if}
|
||||
</div>
|
||||
{/eq}
|
||||
|
||||
|
@ -263,7 +263,9 @@
|
||||
|
||||
});
|
||||
</script>
|
||||
{// 编辑器}
|
||||
{:hook('taonyeditor')}
|
||||
{:hook('ueditor')}
|
||||
{// 百度标题词条}
|
||||
{:hook('seoBaiduTitle')}
|
||||
{// 百度关键词}
|
||||
|
@ -18,7 +18,6 @@
|
||||
{else /}
|
||||
<span class="layui-btn layui-btn-xs jie-admin" type="set" field="reply" rank="1" style="background-color:#ccc;" title="可评">评</span>
|
||||
{/if}
|
||||
<span id="color">{:lang('title color')}</span>
|
||||
<span class="layui-btn layui-btn-xs jie-admin" type="del" title="删除"><i class="layui-icon layui-icon-delete"></i></span>
|
||||
{/if}
|
||||
{if(session('user_name')==$article.user.name || ($user.auth ?? ''))}
|
||||
|
@ -4,6 +4,7 @@
|
||||
<img src="{$sysInfo.logo}" alt="{$sysInfo.webname}">
|
||||
</div>
|
||||
<div class="footer-col footer-col-copy">
|
||||
{:hook('ads_footer_flink')}
|
||||
{:hook('ads_footer_link')}
|
||||
<div class="copyright">
|
||||
<span class="layui-hide"> v{:config('taoler.version')}</span>
|
||||
|
@ -22,7 +22,7 @@
|
||||
<div class="layui-col-md6">
|
||||
<div class="fly-panel fly-panel-border"> <div class="fly-panel-title"> 我的会员信息 </div>
|
||||
<div class="fly-panel-main layui-text" style="padding: 18px 15px; height: 50px; line-height: 26px;">
|
||||
<p>您的财富经验值:<span style="color: red">{$user.point}</span> 金币</p> <p>您当前为:<span style="color: red">{$user.nick}</span></p> </div> </div> </div>
|
||||
<p>您的财富经验值:<span style="color: red">{$user.point}</span> 金币</p> <p>您当前为:<span style="color: red">{$user.nickname}</span></p> </div> </div> </div>
|
||||
<div class="layui-col-md12" style="margin-top: -20px;">
|
||||
<div class="fly-panel fly-panel-border"> <div class="fly-panel-title"> 快捷方式 </div>
|
||||
<div class="fly-panel-main">
|
||||
|
@ -20,7 +20,7 @@
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">手机</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" id="L_phone" name="phone" autocomplete="off" value="{$user.phone}" class="layui-input" >
|
||||
<input type="text" id="L_phone" name="phone" autocomplete="off" value="{$user.phone ?? ''}" class="layui-input" >
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
|
Loading…
x
Reference in New Issue
Block a user