21 Commits

Author SHA1 Message Date
wolfcode
e4ae29fed2 fix(admin): update password hashing method- Replace password function with password_hash for secure password storage- Use PASSWORD_DEFAULT algorithm for hashing
- Improve password security in admin controller

Signed-off-by: wolfcode <wolfcode@88.com>
2025-06-28 10:15:07 +08:00
wolfcode
c82e1c8ea3 fix(curd): improve form element rendering and validation
- Add length validation for images form type
- Update radio and checkbox view generation to use correct syntax- Improve select option view generation with more accurate conditions
2025-06-25 18:55:43 +08:00
wolfcode
3f718beacb fix(admin): update password hashing method-Replace custom password function with PHP's built-in password_hash
- Improve password security in admin controller
2025-06-23 11:24:27 +08:00
wolfcode
af44a9e7b8 🚀 Layui v2.11.3 2025-06-19 09:40:41 +08:00
wolfcode
4ed8237a00 refactor(auth): upgrade password hashing to PHP's password_hash
- Replace custom password hashing function with PHP's built-in password_hash
- Update password verification to use password_verify
- Adjust database schema to accommodate new password hash length
- Modify installation and login controllers to use new hashing method
2025-06-18 11:51:12 +08:00
wolfcode
216ca6e697 fix(install): update PDO extension check to pdo_mysql
- Change extension check from PDO to pdo_mysql for MySQL database support
- Improve error message for better user understanding
2025-06-12 15:21:35 +08:00
wolfcode
969a7a5ce5 fix(easy-admin): try-catch onInitElemStyle and hide theme switch on mobile
- Add try-catch block around onInitElemStyle function to handle potential errors
- Hide theme switch option on mobile devices to improve user experience
2025-06-09 14:37:58 +08:00
wolfcode
5593a20009 feat(layuimini): improve menu rendering and add keyboard event handling
- Add border-radius to layuimini-logo for rounded corners
- Implement Enter key event handling for login button- Enhance miniMenu rendering logic for better menu display
2025-06-04 11:14:55 +08:00
wolfcode
8a33a4fed3 fix(easy-admin): improve select component rendering and initialization
- Update select component initialization to properly set selected values
- Modify search value comparison to use loose equality for broader compatibility
- Enhance xmSelect rendering with pre-selected values
2025-05-20 10:22:50 +08:00
wolfcode
a4e8a86045 🚀 Layui v2.11.2 2025-05-19 18:30:34 +08:00
wolfcode
61e622d2ad refactor(controller): instantiate model class instead of assigning model name
- Change {{modelFilename}}::class to new {{modelFilename}}() in controller constructor- This modification allows direct access to model properties and methods
2025-05-14 12:32:02 +08:00
wolfcode
1b3265aeb5 feat(menu): add toggle buttons for menu folding and unfolding
- Add a new button for toggling menu folding and unfolding
- Implement functionality to fold and unfold all menu items
- Update button text and icon based on current state (folded/unfolded)
2025-05-13 14:06:20 +08:00
wolfcode
e1c0f6c881 feat(admin): add MIME type for logo upload
- Add image MIME type to the logo upload input
- This change improves file type restriction for logo uploads
2025-05-09 11:37:38 +08:00
wolfcode
3891cf8898 🚀 Layui v2.11.1 2025-05-06 15:59:24 +08:00
wolfcode
4ade618657 fix: correct class selector for tab item in refresh function
- Update the class selector from "layui-tab-item" to "layui-tabs-item" in the refresh function
- This change ensures that the correct tab item is targeted for refreshing
2025-04-30 11:10:29 +08:00
wolfcode
e7253e7de0 fix(layuimini): improve tab context menu positioning and behavior
- Update tab context menu CSS to use fixed positioning with higher z-index
- Modify JavaScript to prevent default context menu and use correct left position
2025-04-28 15:33:50 +08:00
wolfcode
063108a846 feat(easy-admin): dynamic theme color for xmSelect
- Replace static color codes with dynamic theme color retrieval
- Use getComputedStyle to fetch the '--ea8-theme-main-color' variable
- Update xmSelect instances in easy-admin.js and goods.js to use dynamic color
2025-04-22 18:16:26 +08:00
wolfcode
f41943320b Update welcome.html 2025-04-22 16:04:04 +08:00
wolfcode
1f0064743e 🚀 Layui v2.11.0 2025-04-22 15:46:10 +08:00
wolfcode
115573a88c 🚀 Layui v2.11.0 2025-04-22 15:26:25 +08:00
wolfcode
253379f0c6 feat(theme): implement dynamic theme color change
- Add functionality to change the main theme color dynamically
- Update CSS to use a custom property for the main theme color
- Modify JavaScript to set the main theme color based on user preference Adjust form select styles to match the new theme color
2025-04-21 18:03:39 +08:00
35 changed files with 303 additions and 180 deletions

View File

@@ -109,7 +109,7 @@ class Index extends AdminController
try { try {
$save = $row->save([ $save = $row->save([
'password' => password($post['password']), 'password' => password_hash($post['password'], PASSWORD_DEFAULT),
]); ]);
}catch (Exception $e) { }catch (Exception $e) {
$this->error('保存失败'); $this->error('保存失败');

View File

@@ -53,7 +53,7 @@ class Login extends AdminController
if (empty($admin)) { if (empty($admin)) {
$this->error('用户不存在'); $this->error('用户不存在');
} }
if (password($post['password']) != $admin->password) { if (!password_verify($post['password'], $admin->password)) {
$this->error('密码输入有误'); $this->error('密码输入有误');
} }
if ($admin->status == 0) { if ($admin->status == 0) {

View File

@@ -24,7 +24,7 @@ class Goods extends AdminController
public function __construct(App $app) public function __construct(App $app)
{ {
parent::__construct($app); parent::__construct($app);
self::$model = MallGoods::class; self::$model = new MallGoods();
$this->assign('cate', MallCate::column('title', 'id')); $this->assign('cate', MallCate::column('title', 'id'));
} }

View File

@@ -63,7 +63,7 @@ class Admin extends AdminController
$rule = []; $rule = [];
$this->validate($post, $rule); $this->validate($post, $rule);
if (empty($post['password'])) $post['password'] = '123456'; if (empty($post['password'])) $post['password'] = '123456';
$post['password'] = password($post['password']); $post['password'] = password_hash($post['password'],PASSWORD_DEFAULT);
try { try {
$save = self::$model::create($post); $save = self::$model::create($post);
}catch (\Exception $e) { }catch (\Exception $e) {
@@ -114,7 +114,7 @@ class Admin extends AdminController
} }
try { try {
$save = $row->save([ $save = $row->save([
'password' => password($post['password']), 'password' => password_hash($post['password'], PASSWORD_DEFAULT),
]); ]);
}catch (\Exception $e) { }catch (\Exception $e) {
$this->error('保存失败'); $this->error('保存失败');

View File

@@ -1217,6 +1217,7 @@ class BuildCurd
} elseif ($val['formType'] == 'images') { } elseif ($val['formType'] == 'images') {
$templateFile = "view{$this->DS}module{$this->DS}images"; $templateFile = "view{$this->DS}module{$this->DS}images";
$define = $val['define'] ?? '|'; $define = $val['define'] ?? '|';
if (strlen($define) > 5) $define = '|';
} elseif ($val['formType'] == 'file') { } elseif ($val['formType'] == 'file') {
$templateFile = "view{$this->DS}module{$this->DS}file"; $templateFile = "view{$this->DS}module{$this->DS}file";
} elseif ($val['formType'] == 'files') { } elseif ($val['formType'] == 'files') {
@@ -1234,12 +1235,12 @@ class BuildCurd
} elseif ($val['formType'] == 'radio') { } elseif ($val['formType'] == 'radio') {
$templateFile = "view{$this->DS}module{$this->DS}radio"; $templateFile = "view{$this->DS}module{$this->DS}radio";
if (!empty($val['define'])) { if (!empty($val['define'])) {
$define = $this->buildRadioView($field, '{in name="k" value="' . $val['default'] . '"}checked=""{/in}'); $define = $this->buildRadioView($field, '');
} }
} elseif ($val['formType'] == 'checkbox') { } elseif ($val['formType'] == 'checkbox') {
$templateFile = "view{$this->DS}module{$this->DS}checkbox"; $templateFile = "view{$this->DS}module{$this->DS}checkbox";
if (!empty($val['define'])) { if (!empty($val['define'])) {
$define = $this->buildCheckboxView($field, '{in name="k" value="' . $val['default'] . '"}checked=""{/in}'); $define = $this->buildCheckboxView($field, '');
} }
} elseif ($val['formType'] == 'select') { } elseif ($val['formType'] == 'select') {
$templateFile = "view{$this->DS}module{$this->DS}select"; $templateFile = "view{$this->DS}module{$this->DS}select";
@@ -1308,19 +1309,19 @@ class BuildCurd
} elseif ($val['formType'] == 'radio') { } elseif ($val['formType'] == 'radio') {
$templateFile = "view{$this->DS}module{$this->DS}radio"; $templateFile = "view{$this->DS}module{$this->DS}radio";
if (!empty($val['define'])) { if (!empty($val['define'])) {
$define = $this->buildRadioView($field, '{in name="k" value="$row.' . $field . '"}checked=""{/in}'); $define = $this->buildRadioView($field, '{if in_array($k, $row.' . $field . ')}checked{/if}');
} }
} elseif ($val['formType'] == 'checkbox') { } elseif ($val['formType'] == 'checkbox') {
$templateFile = "view{$this->DS}module{$this->DS}checkbox"; $templateFile = "view{$this->DS}module{$this->DS}checkbox";
if (!empty($val['define'])) { if (!empty($val['define'])) {
$define = $this->buildCheckboxView($field, '{in name="k" value="$row.' . $field . '"}checked=""{/in}'); $define = $this->buildCheckboxView($field, '{if in_array($k, $row.' . $field . ')}checked{/if}');
} }
} elseif ($val['formType'] == 'select') { } elseif ($val['formType'] == 'select') {
$templateFile = "view{$this->DS}module{$this->DS}select"; $templateFile = "view{$this->DS}module{$this->DS}select";
if (isset($val['bindRelation'])) { if (isset($val['bindRelation'])) {
$define = $this->buildOptionView($field, '{in name="k" value="$row.' . $field . '"}selected=""{/in}'); $define = $this->buildOptionView($field, '{if $row.' . $field . '==$k}selected{/if}');
} elseif (!empty($val['define'])) { } elseif (!empty($val['define'])) {
$define = $this->buildOptionView($field, '{in name="k" value="$row.' . $field . '"}selected=""{/in}'); $define = $this->buildOptionView($field, '{if $row.' . $field . '==$k}selected{/if}');
} }
} elseif ($field == 'remark' || $val['formType'] == 'textarea') { } elseif ($field == 'remark' || $val['formType'] == 'textarea') {
$templateFile = "view{$this->DS}module{$this->DS}textarea"; $templateFile = "view{$this->DS}module{$this->DS}textarea";

View File

@@ -16,7 +16,7 @@ class {{controllerName}} extends AdminController
public function __construct(App $app) public function __construct(App $app)
{ {
parent::__construct($app); parent::__construct($app);
self::$model = {{modelFilename}}::class; self::$model = new {{modelFilename}}();
$notes = self::$model::$notes; $notes = self::$model::$notes;
{{constructRelation}} {{constructRelation}}
$this->notes =$notes; $this->notes =$notes;

View File

@@ -8,7 +8,7 @@
<div class="layui-input-block layuimini-upload"> <div class="layui-input-block layuimini-upload">
<input name="head_img" class="layui-input layui-col-xs6" lay-reqtext="请上传用户头像" placeholder="请上传用户头像" value="{$row.head_img|default=''}"> <input name="head_img" class="layui-input layui-col-xs6" lay-reqtext="请上传用户头像" placeholder="请上传用户头像" value="{$row.head_img|default=''}">
<div class="layuimini-upload-btn"> <div class="layuimini-upload-btn">
<span><a class="layui-btn" data-upload="head_img" data-upload-number="one" data-upload-exts="png|jpg|ico|jpeg"><i class="fa fa-upload"></i> 上传</a></span> <span><a class="layui-btn" data-upload="head_img" data-upload-number="one" data-upload-exts="png|jpg|ico|jpeg" data-upload-mimetype="image/*"><i class="fa fa-upload"></i> 上传</a></span>
<span><a class="layui-btn layui-btn-normal" id="select_head_img" data-upload-select="head_img" data-upload-number="one"><i class="fa fa-list"></i> 选择</a></span> <span><a class="layui-btn layui-btn-normal" id="select_head_img" data-upload-select="head_img" data-upload-number="one"><i class="fa fa-list"></i> 选择</a></span>
</div> </div>
</div> </div>

View File

@@ -38,7 +38,7 @@
<li class="layui-nav-item mobile layui-hide-xs" lay-unselect> <li class="layui-nav-item mobile layui-hide-xs" lay-unselect>
<a href="javascript:;" data-check-screen="full"><i class="fa fa-arrows-alt"></i></a> <a href="javascript:;" data-check-screen="full"><i class="fa fa-arrows-alt"></i></a>
</li> </li>
<li class="layui-nav-item" lay-unselect> <li class="layui-nav-item mobile layui-hide-xs" lay-unselect>
<div class="layui-form ws-header-theme" lay-filter="header-theme"> <div class="layui-form ws-header-theme" lay-filter="header-theme">
<input type="checkbox" name="theme-mode" lay-filter="header-theme-mode" lay-skin="switch"> <input type="checkbox" name="theme-mode" lay-filter="header-theme-mode" lay-skin="switch">
<div lay-checkbox> <div lay-checkbox>
@@ -91,8 +91,8 @@
<div class="layuimini-site-mobile"><i class="layui-icon"></i></div> <div class="layuimini-site-mobile"><i class="layui-icon"></i></div>
<div class="layui-body"> <div class="layui-body">
<div class="layuimini-tab layui-tab-rollTool layui-tab" lay-filter="layuiminiTab" lay-allowclose="true"> <div class="layuimini-tab layui-tabs-rollTool layui-tabs" lay-filter="layuiminiTab" id="layuiminiTab">
<ul class="layui-tab-title"> <ul class="layui-tabs-header">
<li class="layui-this" id="layuiminiHomeTabId" lay-id=""></li> <li class="layui-this" id="layuiminiHomeTabId" lay-id=""></li>
</ul> </ul>
<div class="layui-tab-control"> <div class="layui-tab-control">
@@ -111,8 +111,8 @@
</ul> </ul>
</li> </li>
</div> </div>
<div class="layui-tab-content"> <div class="layui-tabs-body">
<div id="layuiminiHomeTabIframe" class="layui-tab-item layui-show"></div> <div id="layuiminiHomeTabIframe" class="layui-tab-item layui-tabs-item layui-show"></div>
</div> </div>
</div> </div>
</div> </div>

View File

@@ -16,8 +16,8 @@
<span class="layui-badge layui-bg-cyan pull-right ">实时</span> <span class="layui-badge layui-bg-cyan pull-right ">实时</span>
<div class="panel-content"> <div class="panel-content">
<h5>用户统计</h5> <h5>用户统计</h5>
<h1>1234</h1> <h2>1234</h2>
<h6>当前分类总记录数</h6> <h6>记录数</h6>
</div> </div>
</div> </div>
</div> </div>
@@ -28,8 +28,8 @@
<span class="layui-badge layui-bg-purple pull-right ">实时</span> <span class="layui-badge layui-bg-purple pull-right ">实时</span>
<div class="panel-content"> <div class="panel-content">
<h5>商品统计</h5> <h5>商品统计</h5>
<h1>1234</h1> <h2>1234</h2>
<h6>当前分类总记录数</h6> <h6>记录数</h6>
</div> </div>
</div> </div>
</div> </div>
@@ -40,8 +40,8 @@
<span class="layui-badge layui-bg-orange pull-right ">实时</span> <span class="layui-badge layui-bg-orange pull-right ">实时</span>
<div class="panel-content"> <div class="panel-content">
<h5>浏览统计</h5> <h5>浏览统计</h5>
<h1>1234</h1> <h2>1234</h2>
<h6>当前分类总记录数</h6> <h6>记录数</h6>
</div> </div>
</div> </div>
</div> </div>
@@ -52,8 +52,8 @@
<span class="layui-badge layui-bg-red pull-right ">实时</span> <span class="layui-badge layui-bg-red pull-right ">实时</span>
<div class="panel-content"> <div class="panel-content">
<h5>订单统计</h5> <h5>订单统计</h5>
<h1>1234</h1> <h2>1234</h2>
<h6>当前分类总记录数</h6> <h6>记录数</h6>
</div> </div>
</div> </div>
</div> </div>
@@ -199,7 +199,7 @@
<div class="layui-card-header"><i class="fa fa-paper-plane-o icon"></i>作者心语</div> <div class="layui-card-header"><i class="fa fa-paper-plane-o icon"></i>作者心语</div>
<div class="layui-card-body layui-text"> <div class="layui-card-body layui-text">
<p> <p>
本模板基于layui2.9.x以及font-awesome-4.7.0进行实现。 本模板基于layui2.x以及font-awesome-4.7.0进行实现。
<a class="layui-btn layui-btn-xs layui-btn-danger" style="vertical-align: baseline;" target="_blank" href="http://layui.dev/docs">layui文档</a> <a class="layui-btn layui-btn-xs layui-btn-danger" style="vertical-align: baseline;" target="_blank" href="http://layui.dev/docs">layui文档</a>
</p> </p>
<hr> <hr>

View File

@@ -13,8 +13,8 @@
<div class="layui-input-block layuimini-upload"> <div class="layui-input-block layuimini-upload">
<input name="image" class="layui-input layui-col-xs6" lay-verify="required" placeholder="请上传分类图片" value=""> <input name="image" class="layui-input layui-col-xs6" lay-verify="required" placeholder="请上传分类图片" value="">
<div class="layuimini-upload-btn"> <div class="layuimini-upload-btn">
<span><a class="layui-btn" data-upload="image" data-upload-number="one" data-upload-exts="png|jpg|ico|jpeg" data-upload-icon="image"><i class="fa fa-upload"></i> 上传</a></span> <span><a class="layui-btn" data-upload="image" data-upload-number="one" data-upload-exts="png|jpg|ico|jpeg" data-upload-icon="image" data-upload-mimetype="image/*"><i class="fa fa-upload"></i> 上传</a></span>
<span><a class="layui-btn layui-btn-normal" id="select_image" data-upload-select="image" data-upload-number="one" data-upload-mimetype="image/*"><i class="fa fa-list"></i> 选择</a></span> <span><a class="layui-btn layui-btn-normal" id="select_image" data-upload-select="image" data-upload-number="one"><i class="fa fa-list"></i> 选择</a></span>
</div> </div>
</div> </div>
</div> </div>

View File

@@ -13,8 +13,8 @@
<div class="layui-input-block layuimini-upload"> <div class="layui-input-block layuimini-upload">
<input name="image" class="layui-input layui-col-xs6" lay-verify="required" lay-reqtext="请上传分类图片" placeholder="请上传分类图片" value="{$row.image|default=''}"> <input name="image" class="layui-input layui-col-xs6" lay-verify="required" lay-reqtext="请上传分类图片" placeholder="请上传分类图片" value="{$row.image|default=''}">
<div class="layuimini-upload-btn"> <div class="layuimini-upload-btn">
<span><a class="layui-btn" data-upload="image" data-upload-number="one" data-upload-exts="png|jpg|ico|jpeg" data-upload-icon="image"><i class="fa fa-upload"></i> 上传</a></span> <span><a class="layui-btn" data-upload="image" data-upload-number="one" data-upload-exts="png|jpg|ico|jpeg" data-upload-icon="image" data-upload-mimetype="image/*"><i class="fa fa-upload"></i> 上传</a></span>
<span><a class="layui-btn layui-btn-normal" id="select_image" data-upload-select="image" data-upload-number="one" data-upload-mimetype="image/*"><i class="fa fa-list"></i> 选择</a></span> <span><a class="layui-btn layui-btn-normal" id="select_image" data-upload-select="image" data-upload-number="one"><i class="fa fa-list"></i> 选择</a></span>
</div> </div>
</div> </div>
</div> </div>

View File

@@ -46,8 +46,8 @@
<div class="layui-input-block layuimini-upload"> <div class="layui-input-block layuimini-upload">
<input name="logo" class="layui-input layui-col-xs6" lay-verify="required" placeholder="请上传分类图片" value=""> <input name="logo" class="layui-input layui-col-xs6" lay-verify="required" placeholder="请上传分类图片" value="">
<div class="layuimini-upload-btn"> <div class="layuimini-upload-btn">
<span><a class="layui-btn" data-upload="logo" data-upload-number="one" data-upload-exts="png|jpg|ico|jpeg" data-upload-icon="image"><i class="fa fa-upload"></i> 上传</a></span> <span><a class="layui-btn" data-upload="logo" data-upload-number="one" data-upload-exts="png|jpg|ico|jpeg" data-upload-icon="image" data-upload-mimetype="image/*"><i class="fa fa-upload"></i> 上传</a></span>
<span><a class="layui-btn layui-btn-normal" id="select_logo" data-upload-select="logo" data-upload-number="one" data-upload-mimetype="image/*"><i class="fa fa-list"></i> 选择</a></span> <span><a class="layui-btn layui-btn-normal" id="select_logo" data-upload-select="logo" data-upload-number="one"><i class="fa fa-list"></i> 选择</a></span>
</div> </div>
</div> </div>
</div> </div>
@@ -57,8 +57,8 @@
<div class="layui-input-block layuimini-upload"> <div class="layui-input-block layuimini-upload">
<input name="images" class="layui-input layui-col-xs6" lay-verify="required" placeholder="请上传商品图片" value=""> <input name="images" class="layui-input layui-col-xs6" lay-verify="required" placeholder="请上传商品图片" value="">
<div class="layuimini-upload-btn"> <div class="layuimini-upload-btn">
<span><a class="layui-btn" data-upload="images" data-upload-number="more" data-upload-exts="png|jpg|ico|jpeg" data-upload-icon="image"><i class="fa fa-upload"></i> 上传</a></span> <span><a class="layui-btn" data-upload="images" data-upload-number="more" data-upload-exts="png|jpg|ico|jpeg" data-upload-icon="image" data-upload-mimetype="image/*"><i class="fa fa-upload"></i> 上传</a></span>
<span><a class="layui-btn layui-btn-normal" id="select_images" data-upload-select="images" data-upload-number="more" data-upload-mimetype="image/*"><i class="fa fa-list"></i> 选择</a></span> <span><a class="layui-btn layui-btn-normal" id="select_images" data-upload-select="images" data-upload-number="more"><i class="fa fa-list"></i> 选择</a></span>
</div> </div>
</div> </div>
</div> </div>

View File

@@ -47,8 +47,8 @@
<div class="layui-input-block layuimini-upload"> <div class="layui-input-block layuimini-upload">
<input name="logo" class="layui-input layui-col-xs6" lay-verify="required" placeholder="请上传分类图片" value="{$row.logo|default=''}"> <input name="logo" class="layui-input layui-col-xs6" lay-verify="required" placeholder="请上传分类图片" value="{$row.logo|default=''}">
<div class="layuimini-upload-btn"> <div class="layuimini-upload-btn">
<span><a class="layui-btn" data-upload="logo" data-upload-number="one" data-upload-exts="png|jpg|ico|jpeg" data-upload-icon="image"><i class="fa fa-upload"></i> 上传</a></span> <span><a class="layui-btn" data-upload="logo" data-upload-number="one" data-upload-exts="png|jpg|ico|jpeg" data-upload-icon="image" data-upload-mimetype="image/*"><i class="fa fa-upload"></i> 上传</a></span>
<span><a class="layui-btn layui-btn-normal" id="select_logo" data-upload-select="logo" data-upload-number="one" data-upload-mimetype="image/*"><i class="fa fa-list"></i> 选择</a></span> <span><a class="layui-btn layui-btn-normal" id="select_logo" data-upload-select="logo" data-upload-number="one"><i class="fa fa-list"></i> 选择</a></span>
</div> </div>
</div> </div>
</div> </div>
@@ -58,8 +58,8 @@
<div class="layui-input-block layuimini-upload"> <div class="layui-input-block layuimini-upload">
<input name="images" class="layui-input layui-col-xs6" lay-verify="required" placeholder="请上传商品图片" value="{$row.images|default=''}"> <input name="images" class="layui-input layui-col-xs6" lay-verify="required" placeholder="请上传商品图片" value="{$row.images|default=''}">
<div class="layuimini-upload-btn"> <div class="layuimini-upload-btn">
<span><a class="layui-btn" data-upload="images" data-upload-number="more" data-upload-exts="png|jpg|ico|jpeg" data-upload-icon="image"><i class="fa fa-upload"></i> 上传</a></span> <span><a class="layui-btn" data-upload="images" data-upload-number="more" data-upload-exts="png|jpg|ico|jpeg" data-upload-icon="image" data-upload-mimetype="image/*"><i class="fa fa-upload"></i> 上传</a></span>
<span><a class="layui-btn layui-btn-normal" id="select_images" data-upload-select="images" data-upload-number="more" data-upload-mimetype="image/*"><i class="fa fa-list"></i> 选择</a></span> <span><a class="layui-btn layui-btn-normal" id="select_images" data-upload-select="images" data-upload-number="more"><i class="fa fa-list"></i> 选择</a></span>
</div> </div>
</div> </div>
</div> </div>

View File

@@ -6,8 +6,8 @@
<div class="layui-input-block layuimini-upload"> <div class="layui-input-block layuimini-upload">
<input name="head_img" class="layui-input layui-col-xs6" lay-verify="required" lay-reqtext="请上传用户头像" placeholder="请上传用户头像" value=""> <input name="head_img" class="layui-input layui-col-xs6" lay-verify="required" lay-reqtext="请上传用户头像" placeholder="请上传用户头像" value="">
<div class="layuimini-upload-btn"> <div class="layuimini-upload-btn">
<span><a class="layui-btn" data-upload="head_img" data-upload-number="one" data-upload-exts="png|jpg|ico|jpeg" data-upload-icon="image"><i class="fa fa-upload"></i> 上传</a></span> <span><a class="layui-btn" data-upload="head_img" data-upload-number="one" data-upload-exts="png|jpg|ico|jpeg" data-upload-icon="image" data-upload-mimetype="image/*"><i class="fa fa-upload"></i> 上传</a></span>
<span><a class="layui-btn layui-btn-normal" id="select_head_img" data-upload-select="head_img" data-upload-number="one" data-upload-mimetype="image/*"><i class="fa fa-list"></i> 选择</a></span> <span><a class="layui-btn layui-btn-normal" id="select_head_img" data-upload-select="head_img" data-upload-number="one"><i class="fa fa-list"></i> 选择</a></span>
</div> </div>
</div> </div>
</div> </div>

View File

@@ -6,7 +6,7 @@
<div class="layui-input-block layuimini-upload"> <div class="layui-input-block layuimini-upload">
<input name="head_img" class="layui-input layui-col-xs6" lay-verify="required" lay-reqtext="请上传用户头像" placeholder="请上传用户头像" value="{$row.head_img|default=''}"> <input name="head_img" class="layui-input layui-col-xs6" lay-verify="required" lay-reqtext="请上传用户头像" placeholder="请上传用户头像" value="{$row.head_img|default=''}">
<div class="layuimini-upload-btn"> <div class="layuimini-upload-btn">
<span><a class="layui-btn" data-upload="head_img" data-upload-number="one" data-upload-exts="png|jpg|ico|jpeg"><i class="fa fa-upload"></i> 上传</a></span> <span><a class="layui-btn" data-upload="head_img" data-upload-number="one" data-upload-exts="png|jpg|ico|jpeg" data-upload-mimetype="image/*"><i class="fa fa-upload"></i> 上传</a></span>
<span><a class="layui-btn layui-btn-normal" id="select_head_img" data-upload-select="head_img" data-upload-number="one"><i class="fa fa-list"></i> 选择</a></span> <span><a class="layui-btn layui-btn-normal" id="select_head_img" data-upload-select="head_img" data-upload-number="one"><i class="fa fa-list"></i> 选择</a></span>
</div> </div>
</div> </div>

View File

@@ -13,7 +13,7 @@
<div class="layui-input-block layuimini-upload"> <div class="layui-input-block layuimini-upload">
<input name="logo_image" class="layui-input layui-col-xs6" lay-verify="required" placeholder="请上传LOGO图标" value="{:sysConfig('site','logo_image')}"> <input name="logo_image" class="layui-input layui-col-xs6" lay-verify="required" placeholder="请上传LOGO图标" value="{:sysConfig('site','logo_image')}">
<div class="layuimini-upload-btn"> <div class="layuimini-upload-btn">
<span><a class="layui-btn" data-upload="logo_image" data-upload-number="one" data-upload-exts="ico|png|jpg|jpeg"><i class="fa fa-upload"></i> 上传</a></span> <span><a class="layui-btn" data-upload="logo_image" data-upload-number="one" data-upload-exts="ico|png|jpg|jpeg" data-upload-mimetype="image/*"><i class="fa fa-upload"></i> 上传</a></span>
<span><a class="layui-btn layui-btn-normal" id="select_logo_image" data-upload-select="logo_image" data-upload-number="one"><i class="fa fa-list"></i> 选择</a></span> <span><a class="layui-btn layui-btn-normal" id="select_logo_image" data-upload-select="logo_image" data-upload-number="one"><i class="fa fa-list"></i> 选择</a></span>
</div> </div>
</div> </div>

View File

@@ -13,7 +13,7 @@
<div class="layui-input-block layuimini-upload"> <div class="layui-input-block layuimini-upload">
<input name="site_ico" class="layui-input layui-col-xs6" lay-verify="required" placeholder="请上传浏览器图标,ico类型" value="{:sysConfig('site','site_ico')}"> <input name="site_ico" class="layui-input layui-col-xs6" lay-verify="required" placeholder="请上传浏览器图标,ico类型" value="{:sysConfig('site','site_ico')}">
<div class="layuimini-upload-btn"> <div class="layuimini-upload-btn">
<span><a class="layui-btn" data-upload="site_ico" data-upload-number="one" data-upload-exts="ico"><i class="fa fa-upload"></i> 上传</a></span> <span><a class="layui-btn" data-upload="site_ico" data-upload-number="one" data-upload-exts="ico" data-upload-mimetype="image/*"><i class="fa fa-upload"></i> 上传</a></span>
<span><a class="layui-btn layui-btn-normal" id="select_site_ico" data-upload-select="site_ico" data-upload-number="one"><i class="fa fa-list"></i> 选择</a></span> <span><a class="layui-btn layui-btn-normal" id="select_site_ico" data-upload-select="site_ico" data-upload-number="one"><i class="fa fa-list"></i> 选择</a></span>
</div> </div>
</div> </div>
@@ -24,7 +24,7 @@
<div class="layui-input-block layuimini-upload"> <div class="layui-input-block layuimini-upload">
<input name="admin_background" class="layui-input layui-col-xs6" placeholder="不填默认#333333" value="{:sysConfig('site','admin_background')}"> <input name="admin_background" class="layui-input layui-col-xs6" placeholder="不填默认#333333" value="{:sysConfig('site','admin_background')}">
<div class="layuimini-upload-btn"> <div class="layuimini-upload-btn">
<span><a class="layui-btn" data-upload="admin_background" data-upload-number="one" data-upload-exts="png|jpg|jpeg"><i class="fa fa-upload"></i> 上传</a></span> <span><a class="layui-btn" data-upload="admin_background" data-upload-number="one" data-upload-exts="png|jpg|jpeg" data-upload-mimetype="image/*"><i class="fa fa-upload"></i> 上传</a></span>
<span><a class="layui-btn layui-btn-normal" id="select_admin_background" data-upload-select="admin_background" data-upload-number="one"><i class="fa fa-list"></i> 选择</a></span> <span><a class="layui-btn layui-btn-normal" id="select_admin_background" data-upload-select="admin_background" data-upload-number="one"><i class="fa fa-list"></i> 选择</a></span>
</div> </div>
</div> </div>

View File

@@ -20,4 +20,5 @@
<button class="layui-btn layui-btn-sm layuimini-btn-primary" data-treetable-refresh><i class="fa fa-refresh"></i></button> <button class="layui-btn layui-btn-sm layuimini-btn-primary" data-treetable-refresh><i class="fa fa-refresh"></i></button>
<button class="layui-btn layui-btn-normal layui-btn-sm {if !auth('system.menu/add')}layui-hide{/if}" data-open="system.menu/add" data-title="添加"><i class="fa fa-plus"></i> 添加</button> <button class="layui-btn layui-btn-normal layui-btn-sm {if !auth('system.menu/add')}layui-hide{/if}" data-open="system.menu/add" data-title="添加"><i class="fa fa-plus"></i> 添加</button>
<button class="layui-btn layui-btn-sm layui-btn-danger {if !auth('system.menu/delete')}layui-hide{/if}" data-url="system.menu/delete" data-treetable-delete="currentTableRenderId"><i class="fa fa-trash-o"></i> 删除</button> <button class="layui-btn layui-btn-sm layui-btn-danger {if !auth('system.menu/delete')}layui-hide{/if}" data-url="system.menu/delete" data-treetable-delete="currentTableRenderId"><i class="fa fa-trash-o"></i> 删除</button>
<button class="layui-btn layui-btn-sm" type="button" data-treetable-arrow data-arrow="up"><i class="fa fa-arrow-up"></i> 一键折叠</button>
</script> </script>

View File

@@ -24,8 +24,8 @@ class Install extends BaseController
$errorInfo = '已安装系统,如需重新安装请删除文件:/config/install/lock/install.lock或者删除 /install 路由'; $errorInfo = '已安装系统,如需重新安装请删除文件:/config/install/lock/install.lock或者删除 /install 路由';
}elseif (version_compare(phpversion(), '8.1.0', '<')) { }elseif (version_compare(phpversion(), '8.1.0', '<')) {
$errorInfo = 'PHP版本不能小于8.1.0'; $errorInfo = 'PHP版本不能小于8.1.0';
}elseif (!extension_loaded("PDO")) { }elseif (!extension_loaded("pdo_mysql")) {
$errorInfo = '当前未开启PDO,无法进行安装'; $errorInfo = '当前未开启pdo_mysql,无法进行安装';
} }
if (!is_file(root_path() . '.env')) { if (!is_file(root_path() . '.env')) {
$errorInfo = '.env 文件不存在,请先配置 .env 文件'; $errorInfo = '.env 文件不存在,请先配置 .env 文件';
@@ -105,12 +105,12 @@ class Install extends BaseController
foreach ($sqlArray as $sql) { foreach ($sqlArray as $sql) {
$pdo->query($sql); $pdo->query($sql);
} }
$_password = password($password); $hashedPassword = password_hash($password, PASSWORD_DEFAULT);
$tableName = 'system_admin'; $tableName = 'system_admin';
$update = [ $update = [
'username' => $username, 'username' => $username,
'head_img' => '/static/admin/images/head.jpg', 'head_img' => '/static/admin/images/head.jpg',
'password' => $_password, 'password' => $hashedPassword,
'create_time' => time(), 'create_time' => time(),
'update_time' => time() 'update_time' => time()
]; ];

View File

@@ -88,7 +88,7 @@ CREATE TABLE `ea_system_admin`
`auth_ids` varchar(255) DEFAULT NULL COMMENT '角色权限ID', `auth_ids` varchar(255) DEFAULT NULL COMMENT '角色权限ID',
`head_img` varchar(255) DEFAULT NULL COMMENT '头像', `head_img` varchar(255) DEFAULT NULL COMMENT '头像',
`username` varchar(50) NOT NULL DEFAULT '' COMMENT '用户登录名', `username` varchar(50) NOT NULL DEFAULT '' COMMENT '用户登录名',
`password` char(40) NOT NULL DEFAULT '' COMMENT '用户登录密码', `password` varchar(255) NOT NULL DEFAULT '' COMMENT '用户登录密码',
`phone` varchar(16) DEFAULT NULL COMMENT '联系手机号', `phone` varchar(16) DEFAULT NULL COMMENT '联系手机号',
`remark` varchar(255) DEFAULT '' COMMENT '备注说明', `remark` varchar(255) DEFAULT '' COMMENT '备注说明',
`login_num` bigint(20) unsigned DEFAULT '0' COMMENT '登录次数', `login_num` bigint(20) unsigned DEFAULT '0' COMMENT '登录次数',

View File

@@ -4,6 +4,10 @@
@import url("../css/themes/index.css"); @import url("../css/themes/index.css");
@import url("../css/iconfont.css"); @import url("../css/iconfont.css");
:root {
--ea8-theme-main-color: #16b777;
}
html, html,
body { body {
font-family: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; font-family: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
@@ -304,9 +308,17 @@ table样式
} }
.layui-form-select dl { .layui-form-select dl {
border: 1px #16b777 solid; border: 1px var(--ea8-theme-main-color) solid;
border-top: none; border-top: none;
z-index: 99999; z-index: 99999;
padding: 0;
border-radius: 0;
}
.layui-form-select dl dd.layui-this {
background-color: var(--ea8-theme-main-color);
border-top: none;
color: #ffffff;
} }
.form-search .layui-form-select dl { .form-search .layui-form-select dl {
@@ -517,4 +529,12 @@ table样式
.wangEditor_div { .wangEditor_div {
z-index: 99999; z-index: 99999;
border: 1px solid var(--w-e-textarea-slight-border-color); border: 1px solid var(--w-e-textarea-slight-border-color);
}
.layui-input:focus, .layui-textarea:focus {
border-color: var(--ea8-theme-main-color) !important;
}
.layui-tabs-item {
height: 100%;
} }

View File

@@ -146,7 +146,7 @@ define(["jquery", "easy-admin", "echarts", "echarts-theme", "miniAdmin", "miniTh
showComposerInfo: function () { showComposerInfo: function () {
// <div style="padding: 25px;">12313</div> // <div style="padding: 25px;">12313</div>
let html = `` let html = ``
ea.request.post({ ea.request.get({
url: ea.url('ajax/composerInfo'), url: ea.url('ajax/composerInfo'),
}, function (success) { }, function (success) {
let data = success.data let data = success.data

View File

@@ -27,6 +27,12 @@ define(["jquery", "easy-admin"], function ($, ea) {
} }
}); });
document.addEventListener('keydown', function (event) {
if (event.key === 'Enter' || event.keyCode === 13) {
$('.login-btn').trigger('click')
}
});
$('.login-tip').on('click', function () { $('.login-tip').on('click', function () {
$('.icon-nocheck').click(); $('.icon-nocheck').click();
}); });

View File

@@ -94,17 +94,10 @@ define(["jquery", "easy-admin"], function ($, ea) {
}, },
}) })
let colors = [
'#f10f0f', // 红色
'#ffaf00', // 橙色
'#FF69B4', // 猛男粉
'#0087ff', // 蓝色
'#00ff00', // 青青草原
];
var demo1 = xmSelect.render({ var demo1 = xmSelect.render({
el: '#demo1', el: '#demo1',
name: 'xxx', // form表单提交的name name: 'xxx', // form表单提交的name
theme: {color: colors[Math.floor(Math.random() * colors.length)]}, theme: {color: getComputedStyle(document.documentElement).getPropertyValue('--ea8-theme-main-color') || '#16b777'},
data: [ data: [
{name: 'Make', value: 1}, {name: 'Make', value: 1},
{name: 'PHP', value: 2}, {name: 'PHP', value: 2},
@@ -123,17 +116,10 @@ define(["jquery", "easy-admin"], function ($, ea) {
}, },
}) })
let colors = [
'#f10f0f', // 红色
'#ffaf00', // 橙色
'#FF69B4', // 猛男粉
'#0087ff', // 蓝色
'#00ff00', // 青青草原
];
var demo1 = xmSelect.render({ var demo1 = xmSelect.render({
el: '#demo1', el: '#demo1',
name: 'xxx', // form表单提交的name name: 'xxx', // form表单提交的name
theme: {color: colors[Math.floor(Math.random() * colors.length)]}, theme: {color: getComputedStyle(document.documentElement).getPropertyValue('--ea8-theme-main-color') || '#16b777'},
data: [ data: [
{name: 'Make', value: 1}, {name: 'Make', value: 1},
{name: 'PHP', value: 2, selected: true,}, {name: 'PHP', value: 2, selected: true,},

View File

@@ -121,6 +121,22 @@ define(["jquery", "easy-admin", "treetable", "iconPickerFa", "autocomplete"], fu
return false; return false;
}); });
$('body').on('click', '[data-treetable-arrow]', function () {
const $icon = $(this).find('i');
const $textNode = $icon[0].nextSibling;
if ($icon.hasClass('fa-arrow-up')) {
treetable.foldAll(init.table_elem);
$icon.removeClass('fa-arrow-up').addClass('fa-arrow-down');
$textNode.textContent = ' 一键展开';
$(this).attr('data-arrow', 'down');
} else {
treetable.expandAll(init.table_elem);
$icon.removeClass('fa-arrow-down').addClass('fa-arrow-up');
$textNode.textContent = ' 一键折叠';
$(this).attr('data-arrow', 'up');
}
})
ea.table.listenSwitch({filter: 'status', url: init.modify_url}); ea.table.listenSwitch({filter: 'status', url: init.modify_url});
ea.table.listenEdit(init, 'currentTable', init.table_render_id, true); ea.table.listenEdit(init, 'currentTable', init.table_render_id, true);

View File

@@ -49,7 +49,11 @@ define(["jquery", "easy-admin"], function ($, ea) {
} }
]], ]],
cols: [[ cols: [[
{field: 'node', minWidth: 200, align: 'left', title: '系统节点'}, {
field: 'node', minWidth: 200, align: 'left', title: '系统节点', templet: function (d) {
return `<span>${d.node}</span>`;
}
},
{field: 'title', minWidth: 80, title: '节点名称 <i class="table-edit-tips color-red">*</i>', edit: 'text'}, {field: 'title', minWidth: 80, title: '节点名称 <i class="table-edit-tips color-red">*</i>', edit: 'text'},
{field: 'update_time', minWidth: 80, title: '更新时间', search: 'range'}, {field: 'update_time', minWidth: 80, title: '更新时间', search: 'range'},
{field: 'is_auth', title: '节点控制', width: 85, search: 'select', selectList: {0: '禁用', 1: '启用'}, templet: ea.table.switch}, {field: 'is_auth', title: '节点控制', width: 85, search: 'select', selectList: {0: '禁用', 1: '启用'}, templet: ea.table.switch},

View File

@@ -154,4 +154,46 @@ function prettyFormat(str) {
return '' return ''
} }
return "<pre>" + result + "</pre>" return "<pre>" + result + "</pre>"
} }
if (self === top) {
console.group('温馨提示');
console.log(`%c
▄▄ ▄▄
▀███▀▀▀███ ██ ▀███ ██ ▄█▄▀▄██▄
██ ▀█ ▄██▄ ██ ██ ██
██ █ ▄█▀██▄ ▄██▀█████▀ ▀██▀ ▄█▀██▄ ▄█▀▀███ ▀████████▄█████▄ ▀███ ▀████████▄ ▀██▄ ▄▄█
██████ ██ ██ ██ ▀▀ ██ ▄█ ▄█ ▀██ ▄██ ██ ██ ██ ██ ██ ██ ██ ▄█████▄
██ █ ▄▄█████ ▀█████▄ ██ ▄█ ████████ ███ ██ ██ ██ ██ ██ ██ ██ ██ ▀███
██ ▄██ ██ █▄ ██ ███ █▀ ██ ▀██ ██ ██ ██ ██ ██ ██ ██ ██ ▀██
▄██████████████▀██▄██████▀ ▄█ ▄███▄ ▄████▄ ▀████▀███▄████ ████ ████▄████▄████ ████▄███████
▄█
██▀
%c
官方网站https://easyadmin8.top
官方文档https://edocs.easyadmin8.top
问答社区https://meta.easyadmin8.top
%c重要事情说3遍
%c
常见问题https://easyadmin8.top/guide/question.html
常见问题https://easyadmin8.top/guide/question.html
常见问题https://easyadmin8.top/guide/question.html
%c遇到问题先把 DEBUG 模式打开然后把错误信息找出来当不能解决的时候再去社区提问或者QQ群交流
`,
"color:#4290f7;font-weight:bold;font-size:10px;",
"color:#5672cd;",
"color:#ff5722;font-weight:bold;font-size:1rem;",
"color:#5672cd;",
"color:#ff5722;font-weight:bold;font-size:1rem;background:#f9de97;",
);
console.groupEnd();
}

View File

@@ -2,12 +2,16 @@ define(["jquery", "tableSelect", "miniTheme", "xmSelect", "lazyload"], function
//切换日夜模式 //切换日夜模式
window.onInitElemStyle = function () { window.onInitElemStyle = function () {
miniTheme.renderElemStyle(); try {
$('iframe').each(function (index, iframe) { miniTheme.renderElemStyle();
if (typeof iframe.contentWindow.onInitElemStyle == "function") { $('iframe').each(function (index, iframe) {
iframe.contentWindow.onInitElemStyle(); if (typeof iframe.contentWindow.onInitElemStyle == "function") {
} iframe.contentWindow.onInitElemStyle();
}); }
});
miniTheme.changeThemeMainColor();
} catch (e) {
}
}; };
window.onInitElemStyle(); window.onInitElemStyle();
@@ -372,7 +376,7 @@ define(["jquery", "tableSelect", "miniTheme", "xmSelect", "lazyload"], function
var selectHtml = ''; var selectHtml = '';
$.each(d.selectList, function (sI, sV) { $.each(d.selectList, function (sI, sV) {
var selected = ''; var selected = '';
if (sI === d.searchValue) { if (sI == d.searchValue) {
selected = 'selected=""'; selected = 'selected=""';
} }
selectHtml += '<option value="' + sI + '" ' + selected + '>' + sV + '</option>/n'; selectHtml += '<option value="' + sI + '" ' + selected + '>' + sV + '</option>/n';
@@ -395,7 +399,7 @@ define(["jquery", "tableSelect", "miniTheme", "xmSelect", "lazyload"], function
formHtml += '\t<div class="layui-form-item layui-inline">\n' + formHtml += '\t<div class="layui-form-item layui-inline">\n' +
'<label class="layui-form-label">' + d.title + '</label>\n' + '<label class="layui-form-label">' + d.title + '</label>\n' +
'<div class="layui-input-inline">\n' + '<div class="layui-input-inline">\n' +
'<div id="c-' + d.fieldAlias + '" class="tableSearch-xmSelect xmSelect-' + d.fieldAlias + '" name="' + d.fieldAlias + '" data-search-op="' + d.searchOp + '"></div>\n' + '<div id="c-' + d.fieldAlias + '" class="tableSearch-xmSelect xmSelect-' + d.fieldAlias + '" name="' + d.fieldAlias + '" data-search-op="' + d.searchOp + '" data-search-value="' + d.searchValue + '"></div>\n' +
'</div>\n' + '</div>\n' +
'</div>'; '</div>';
init.xmSelectList[d.fieldAlias] = d.selectList init.xmSelectList[d.fieldAlias] = d.selectList
@@ -873,12 +877,15 @@ define(["jquery", "tableSelect", "miniTheme", "xmSelect", "lazyload"], function
listenTableSearch: function (tableId) { listenTableSearch: function (tableId) {
if (Object.keys(init.xmSelectList).length > 0) { if (Object.keys(init.xmSelectList).length > 0) {
$.each(init.xmSelectList, function (index, value) { $.each(init.xmSelectList, function (index, value) {
let xmSearchValue = $('#c-' + index).data('search-value') || [];
if (!Array.isArray(xmSearchValue)) xmSearchValue = (xmSearchValue.toString()).split(',')
const keysArray = Object.keys(value).map((key) => { const keysArray = Object.keys(value).map((key) => {
return {name: value[key], value: key} return {name: value[key], value: key, selected: xmSearchValue.indexOf(key) !== -1}
}) })
init.xmSelectModel[index] = xmSelect.render({ init.xmSelectModel[index] = xmSelect.render({
el: '.xmSelect-' + index, language: 'zn', data: keysArray, name: index, el: '.xmSelect-' + index, language: 'zn', data: keysArray, name: index,
filterable: true, paging: true, pageSize: 10, theme: {color: '#16b777'}, toolbar: {show: true}, filterable: true, paging: true, pageSize: 10, toolbar: {show: true},
theme: {color: getComputedStyle(document.documentElement).getPropertyValue('--ea8-theme-main-color') || '#16b777'}
}) })
}) })
} }

View File

@@ -83,6 +83,7 @@
display: inline-block; display: inline-block;
height: 40px; height: 40px;
vertical-align: middle; vertical-align: middle;
border-radius: 50%;
} }
.layui-layout-admin .layuimini-logo h1 { .layui-layout-admin .layuimini-logo h1 {
@@ -123,43 +124,47 @@
/**tab选项卡 */ /**tab选项卡 */
.layuimini-tab { .layuimini-tab {
margin: 0px; margin: 0;
overflow: hidden; overflow: hidden;
height: 100% !important; height: 100% !important;
} }
.layuimini-tab .layui-tab-content { .layuimini-tab .layui-tabs-scroll {
position: marker;
}
.layuimini-tab .layui-tabs-body {
height: calc(100% - 37px) !important; height: calc(100% - 37px) !important;
} }
.layuimini-tab .layui-tab-content .layui-tab-item { .layuimini-tab .layui-tabs-body .layui-tabs-item {
height: 100%; height: 100%;
} }
.layuimini-tab .layui-tab-content { .layuimini-tab .layui-tabs-body {
padding: 0px; padding: 0;
} }
.layuimini-tab .layui-tab-title { .layuimini-tab .layui-tabs-header {
border: none; border: none;
border: 1px solid whitesmoke; border: 1px solid whitesmoke;
background-color: white; background-color: white;
} }
.layuimini-tab .layui-tab-title li { .layuimini-tab .layui-tabs-header li {
border-right: 1px solid whitesmoke; border-right: 1px solid whitesmoke;
color: dimgray; color: dimgray;
} }
.layuimini-tab .layui-tab-title .layui-tab-bar { .layuimini-tab .layui-tabs-header .layui-tab-bar {
display: none; display: none;
} }
.layuimini-tab .layui-tab-title .layui-this:after { .layuimini-tab .layui-tabs-header .layui-this:after {
display: none; display: none;
} }
.layuimini-tab .layui-tab-title .layuimini-tab-active { .layuimini-tab .layui-tabs-header .layuimini-tab-active {
display: inline-block; display: inline-block;
background-color: lightgray; background-color: lightgray;
width: 9px; width: 9px;
@@ -168,49 +173,52 @@
margin-right: 5px; margin-right: 5px;
} }
.layuimini-tab .layui-tab-title .layui-this .layuimini-tab-active { .layuimini-tab .layui-tabs-header .layui-this .layuimini-tab-active {
background-color: #1aa094; background-color: var(--ea8-theme-main-color);
} }
.layuimini-tab > .layui-tab-title, .layuimini-tab > .close-box { .layuimini-tab > .layui-tabs-header, .layuimini-tab > .close-box {
height: 35px !important; height: 35px !important;
} }
.layuimini-tab > .layui-tab-title li, .layuimini-tab > .close-box li { .layuimini-tab > .layui-tabs-header li, .layuimini-tab > .close-box li {
line-height: 35px !important; line-height: 35px !important;
} }
.layuimini-tab .layui-tab-title span { .layuimini-tab .layui-tabs-header span {
color: #acafb1; color: #acafb1;
} }
.layuimini-tab .layui-tab-title .layui-this span { .layuimini-tab .layui-tabs-header .layui-this span {
color: dimgray; color: dimgray;
} }
.layuimini-tab .layui-tab-title .layui-tab-close { .layuimini-tab .layui-tabs-header .layui-tab-close {
font-size: 12px !important; font-size: 12px !important;
width: 14px !important; width: 14px !important;
height: 14px !important; height: 14px !important;
line-height: 16px !important; line-height: 16px !important;
margin-left: 5px;
padding: 2px;
} }
.layuimini-tab .layui-tab-title .layui-tab-close:hover { .layuimini-tab .layui-tabs-header .layui-tab-close:hover {
border-radius: 4em; border-radius: 4em;
background: #ff5722; background: #ff5722;
color: #fff;
} }
.layuimini-tab .layui-tab-title .disable-close + .layui-tab-close { .layuimini-tab .layui-tabs-header .disable-close + .layui-tab-close {
display: none; display: none;
} }
.layuimini-tab .layui-tab-title .able-close + .layui-tab-close { .layuimini-tab .layui-tabs-header .able-close + .layui-tab-close {
display: inline-block; display: inline-block;
} }
.layuimini-tab .layui-tab-control > li { .layuimini-tab .layui-tab-control > li {
position: absolute; position: absolute;
top: 0px; top: 0;
height: 35px; height: 35px;
line-height: 35px; line-height: 35px;
width: 35px; width: 35px;
@@ -221,7 +229,7 @@
} }
.layuimini-tab .layuimini-tab-roll-left { .layuimini-tab .layuimini-tab-roll-left {
left: 0px; left: 0;
border-right: whitesmoke 1px solid; border-right: whitesmoke 1px solid;
border-left: whitesmoke 1px solid; border-left: whitesmoke 1px solid;
} }
@@ -232,7 +240,7 @@
} }
.layuimini-tab .layui-tab-tool { .layuimini-tab .layui-tab-tool {
right: 0px; right: 0;
border-left: 1px solid whitesmoke; border-left: 1px solid whitesmoke;
} }
@@ -248,11 +256,11 @@
} }
.layuimini-tab.layui-tab-roll .layui-tab-control .layuimini-tab-roll-right { .layuimini-tab.layui-tab-roll .layui-tab-control .layuimini-tab-roll-right {
right: 0px; right: 0;
border-right: 1px solid whitesmoke; border-right: 1px solid whitesmoke;
} }
.layuimini-tab.layui-tab-roll .layui-tab-title { .layuimini-tab.layui-tab-roll .layui-tabs-header {
padding-left: 35px; padding-left: 35px;
padding-right: 35px; padding-right: 35px;
} }
@@ -262,13 +270,13 @@
display: block; display: block;
} }
.layuimini-tab.layui-tab-tool .layui-tab-title { .layuimini-tab.layui-tab-tool .layui-tabs-header {
padding-left: 0px; padding-left: 0;
padding-right: 35px; padding-right: 35px;
} }
.layuimini-tab.layui-tab-rollTool .layui-tab-title { .layuimini-tab.layui-tab-rollTool .layui-tabs-header {
padding-left: 35px; padding-left: 35px;
padding-right: 80px; padding-right: 80px;
} }
@@ -451,7 +459,7 @@
/**其它 */ /**其它 */
.layui-tab-item { .layui-tabs-item {
width: 100% !important; width: 100% !important;
height: 100% !important; height: 100% !important;
} }
@@ -466,7 +474,7 @@
} }
.layui-tab { .layui-tab {
margin: 0 0 0 0; margin: 0;
z-index: 99999; z-index: 99999;
} }
@@ -630,9 +638,10 @@
.layuimini-tab-mousedown { .layuimini-tab-mousedown {
display: none; display: none;
width: 80px; width: 80px;
position: absolute; position: fixed;
top: 0px !important; top: 55px !important;
left: 0px !important; left: 0 !important;
z-index: 99999;
} }
.layuimini-tab-mousedown dd a { .layuimini-tab-mousedown dd a {
@@ -640,26 +649,28 @@
color: #484545; color: #484545;
} }
.layuimini-tab-make{ .layuimini-tab-make {
position: absolute; position: absolute;
top: 36px; top: 36px;
bottom: 0px; bottom: 0;
width: 100%; width: 100%;
background: rgb(255, 255, 255,0); background: rgb(255, 255, 255, 0);
padding: 0px; padding: 0;
overflow: hidden; overflow: hidden;
} }
/** /**
菜单缩放 菜单缩放
*/ */
.popup-tips .layui-layer-TipsG{ .popup-tips .layui-layer-TipsG {
display: none; display: none;
} }
.popup-tips.layui-layer-tips .layui-layer-content{
.popup-tips.layui-layer-tips .layui-layer-content {
padding: 0; padding: 0;
} }
.popup-tips .layui-nav-tree{
.popup-tips .layui-nav-tree {
width: 150px; width: 150px;
border-radius: 10px; border-radius: 10px;
} }
@@ -670,13 +681,13 @@
} }
/**头部菜单字体间距*/ /**头部菜单字体间距*/
.layui-layout-admin .layui-header .layuimini-header-menu.layuimini-pc-show,.layui-layout-admin .layui-header .layuimini-header-menu.layuimini-mobile-show { .layui-layout-admin .layui-header .layuimini-header-menu.layuimini-pc-show, .layui-layout-admin .layui-header .layuimini-header-menu.layuimini-mobile-show {
letter-spacing: 1px; letter-spacing: 1px;
} }
/**左侧菜单更多下拉样式*/ /**左侧菜单更多下拉样式*/
.layuimini-menu-left .layui-nav-more,.layuimini-menu-left-zoom .layui-nav-more { .layuimini-menu-left .layui-nav-more, .layuimini-menu-left-zoom .layui-nav-more {
font-family: layui-icon !important; font-family: layui-icon !important;
font-size: 12px; font-size: 12px;
font-style: normal; font-style: normal;
@@ -695,10 +706,11 @@
margin-top: -6px !important; margin-top: -6px !important;
} }
.layuimini-menu-left .layui-nav-more:before,.layuimini-menu-left-zoom .layui-nav-more:before { .layuimini-menu-left .layui-nav-more:before, .layuimini-menu-left-zoom .layui-nav-more:before {
content: "\e61a"; content: "\e61a";
} }
.layuimini-menu-left .layui-nav-itemed > a > .layui-nav-more,.layuimini-menu-left-zoom .layui-nav-itemed > a > .layui-nav-more {
.layuimini-menu-left .layui-nav-itemed > a > .layui-nav-more, .layuimini-menu-left-zoom .layui-nav-itemed > a > .layui-nav-more {
transform: rotate(180deg); transform: rotate(180deg);
-ms-transform: rotate(180deg); -ms-transform: rotate(180deg);
-moz-transform: rotate(180deg); -moz-transform: rotate(180deg);
@@ -706,10 +718,10 @@
-o-transform: rotate(180deg); -o-transform: rotate(180deg);
width: 12px; width: 12px;
text-align: center; text-align: center;
border-style:none; border-style: none;
} }
.layuimini-menu-left .layui-nav-itemed > a > .layui-nav-more:before,.layuimini-menu-left-zoom .layui-nav-itemed > a > .layui-nav-more:before { .layuimini-menu-left .layui-nav-itemed > a > .layui-nav-more:before, .layuimini-menu-left-zoom .layui-nav-itemed > a > .layui-nav-more:before {
content: '\e61a'; content: '\e61a';
background-color: transparent; background-color: transparent;
display: inline-block; display: inline-block;
@@ -717,7 +729,7 @@
} }
/**修复左侧菜单字体不对齐的问题*/ /**修复左侧菜单字体不对齐的问题*/
.layuimini-menu-left .layui-nav-item a .fa,.layuimini-menu-left .layui-nav-item a .layui-icon{ .layuimini-menu-left .layui-nav-item a .fa, .layuimini-menu-left .layui-nav-item a .layui-icon {
width: 20px; width: 20px;
} }
@@ -773,16 +785,18 @@
left: 95px !important; left: 95px !important;
} }
.layuimini-pc-show{ .layuimini-pc-show {
display: block; display: block;
} }
.layuimini-mobile-show{
.layuimini-mobile-show {
display: none; display: none;
} }
/**菜单缩放*/ /**菜单缩放*/
.layuimini-mini .layuimini-menu-left .layui-nav-more,.layuimini-mini .layuimini-menu-left .layui-nav-child{ .layuimini-mini .layuimini-menu-left .layui-nav-more, .layuimini-mini .layuimini-menu-left .layui-nav-child {
display: none;!important; display: none;
!important;
} }
} }
@@ -794,29 +808,31 @@
/** /**
todo 修复低版本IOS不能滑动问题, 但还是有问题, 低版本IOS部分情况下子页面无法自适应 todo 修复低版本IOS不能滑动问题, 但还是有问题, 低版本IOS部分情况下子页面无法自适应
*/ */
.layuimini-tab .layui-tab-content .layui-tab-item{ .layuimini-tab .layui-tabs-body .layui-tabs-item {
-webkit-overflow-scrolling: touch; -webkit-overflow-scrolling: touch;
overflow: scroll; overflow: scroll;
width:100%; width: 100%;
height:100%; height: 100%;
} }
.layuimini-tab .layui-tab-content .layui-tab-item iframe { .layuimini-tab .layui-tabs-body .layui-tabs-item iframe {
height: 100%; height: 100%;
width: 100%; width: 100%;
} }
.layuimini-pc-show{ .layuimini-pc-show {
display: none; display: none;
} }
.layuimini-mobile-show{
.layuimini-mobile-show {
display: block; display: block;
} }
.layuimini-header-content { .layuimini-header-content {
left: 0; left: 0;
} }
.layui-layout-admin .layui-body .layui-tab-item.layui-show { .layui-layout-admin .layui-body .layui-tabs-item.layui-show {
border-top: 1px solid #e2e2e2; border-top: 1px solid #e2e2e2;
} }
@@ -854,7 +870,7 @@
} }
.layuimini-mini .layui-layout-admin .layui-body { .layuimini-mini .layui-layout-admin .layui-body {
left: 0!important; left: 0 !important;
transition: left .2s; transition: left .2s;
top: 0; top: 0;
z-index: 998; z-index: 998;
@@ -905,7 +921,7 @@
} }
} }
@media screen and (max-width: 550px){ @media screen and (max-width: 550px) {
/**头部右侧数据*/ /**头部右侧数据*/
.layuimini-multi-module.layuimini-mini .layuimini-header-content .layui-layout-right { .layuimini-multi-module.layuimini-mini .layuimini-header-content .layui-layout-right {

View File

@@ -360,7 +360,7 @@ define(["jquery", "miniMenu", "miniTheme", "miniTab", "colorMode"], function ($,
* 刷新 * 刷新
*/ */
$('body').on('click', '[data-refresh]', function () { $('body').on('click', '[data-refresh]', function () {
$(".layui-tab-item.layui-show").find("iframe")[0].contentWindow.location.reload(); $(".layui-tabs-item.layui-show").find("iframe")[0].contentWindow.location.reload();
miniAdmin.success('刷新成功'); miniAdmin.success('刷新成功');
}); });

View File

@@ -94,7 +94,14 @@ define(["jquery"], function ($) {
renderLeftMenu :function(leftMenus,options){ renderLeftMenu :function(leftMenus,options){
options = options || {}; options = options || {};
var me = this ; var me = this ;
var leftMenusHtml = me.each(leftMenus || [],function (idx,leftMenu) { // 左侧菜单遍历 let _i = 0
// 左侧菜单遍历
var leftMenusHtml = me.each(leftMenus || [],function (idx,leftMenu) {
$(leftMenu).each(function (index, child) {
options.childOpenClass = ''
if (child.child && child.child.length && _i === 0) options.childOpenClass = ' layui-nav-itemed'
_i++
})
var children = me.renderChildrenMenu(leftMenu.child, { childOpenClass:options.childOpenClass }); var children = me.renderChildrenMenu(leftMenu.child, { childOpenClass:options.childOpenClass });
var leftMenuHtml = me.compileMenu({ var leftMenuHtml = me.compileMenu({
href:leftMenu.href, href:leftMenu.href,

View File

@@ -6,6 +6,7 @@
*/ */
define(["jquery"], function ($) { define(["jquery"], function ($) {
var element = layui.element, var element = layui.element,
tabs = layui.tabs,
$ = layui.$; $ = layui.$;
@@ -44,15 +45,14 @@ define(["jquery"], function ($) {
options.title = options.title || null; options.title = options.title || null;
options.isIframe = options.isIframe || false; options.isIframe = options.isIframe || false;
options.maxTabNum = options.maxTabNum || 20; options.maxTabNum = options.maxTabNum || 20;
if ($(".layuimini-tab .layui-tab-title li").length >= options.maxTabNum) { if ($(".layuimini-tab .layui-tabs-header li").length >= options.maxTabNum) {
layer.msg('Tab窗口已达到限定数量请先关闭部分Tab'); layer.msg('Tab窗口已达到限定数量请先关闭部分Tab');
return false; return false;
} }
var ele = element; if (options.isIframe) tabs = parent.layui.tabs;
if (options.isIframe) ele = parent.layui.element; tabs.add('layuiminiTab', {
ele.tabAdd('layuiminiTab', { title: `<span class="layuimini-tab-active"></span><span>${options.title}</span><i class="layui-icon layui-unselect layui-tab-close">ဆ</i>`
title: '<span class="layuimini-tab-active"></span><span>' + options.title + '</span><i class="layui-icon layui-unselect layui-tab-close"></i>' //用于演示 , content: `<iframe width="100%" height="100%" frameborder="no" border="0" src="${options.href}" style="width: 100%; height:100%;"></iframe>`
, content: '<iframe width="100%" height="100%" frameborder="no" border="0" marginwidth="0" marginheight="0" src="' + options.href + '"></iframe>'
, id: options.tabId , id: options.tabId
}); });
$('.layuimini-menu-left').attr('layuimini-tab-tag', 'add'); $('.layuimini-menu-left').attr('layuimini-tab-tag', 'add');
@@ -65,7 +65,7 @@ define(["jquery"], function ($) {
* @param tabId * @param tabId
*/ */
change: function (tabId) { change: function (tabId) {
element.tabChange('layuiminiTab', tabId); tabs.change('layuiminiTab', tabId);
}, },
/** /**
@@ -74,13 +74,10 @@ define(["jquery"], function ($) {
* @param isParent * @param isParent
*/ */
delete: function (tabId, isParent) { delete: function (tabId, isParent) {
// todo 未知BUG不知道是不是layui问题必须先删除元素
$(".layuimini-tab .layui-tab-title .layui-unselect.layui-tab-bar").remove();
if (isParent === true) { if (isParent === true) {
parent.layui.element.tabDelete('layuiminiTab', tabId); parent.layui.tabs.close('layuiminiTab', tabId);
} else { } else {
element.tabDelete('layuiminiTab', tabId); tabs.close('layuiminiTab', tabId);
} }
}, },
@@ -101,7 +98,7 @@ define(["jquery"], function ($) {
isIframe: true, isIframe: true,
}); });
} }
parent.layui.element.tabChange('layuiminiTab', options.href); parent.layui.tabs.change('layuiminiTab', options.href);
parent.layer.close(loading); parent.layer.close(loading);
}, },
@@ -109,7 +106,7 @@ define(["jquery"], function ($) {
* 在iframe层关闭当前tab方法 * 在iframe层关闭当前tab方法
*/ */
deleteCurrentByIframe: function () { deleteCurrentByIframe: function () {
var ele = $(".layuimini-tab .layui-tab-title li.layui-this", parent.document); var ele = $(".layuimini-tab .layui-tabs-header li.layui-this", parent.document);
if (ele.length > 0) { if (ele.length > 0) {
var layId = $(ele[0]).attr('lay-id'); var layId = $(ele[0]).attr('lay-id');
miniTab.delete(layId, true); miniTab.delete(layId, true);
@@ -123,14 +120,14 @@ define(["jquery"], function ($) {
// 判断选项卡上是否有 // 判断选项卡上是否有
var checkTab = false; var checkTab = false;
if (isIframe === undefined || isIframe === false) { if (isIframe === undefined || isIframe === false) {
$(".layui-tab-title li").each(function () { $(".layui-tabs-header li").each(function () {
var checkTabId = $(this).attr('lay-id'); var checkTabId = $(this).attr('lay-id');
if (checkTabId != null && checkTabId === tabId) { if (checkTabId != null && checkTabId === tabId) {
checkTab = true; checkTab = true;
} }
}); });
} else { } else {
parent.layui.$(".layui-tab-title li").each(function () { parent.layui.$(".layui-tabs-header li").each(function () {
var checkTabId = $(this).attr('lay-id'); var checkTabId = $(this).attr('lay-id');
if (checkTabId != null && checkTabId === tabId) { if (checkTabId != null && checkTabId === tabId) {
checkTab = true; checkTab = true;
@@ -155,7 +152,7 @@ define(["jquery"], function ($) {
'</dl>\n' + '</dl>\n' +
'</div>'; '</div>';
var makeHtml = '<div class="layuimini-tab-make"></div>'; var makeHtml = '<div class="layuimini-tab-make"></div>';
$('.layuimini-tab .layui-tab-title').after(menuHtml); $('.layuimini-tab .layui-tabs-header').after(menuHtml);
$('.layuimini-tab .layui-tab-content').after(makeHtml); $('.layuimini-tab .layui-tab-content').after(makeHtml);
}, },
@@ -233,7 +230,7 @@ define(["jquery"], function ($) {
maxTabNum: options.maxTabNum, maxTabNum: options.maxTabNum,
}); });
} }
element.tabChange('layuiminiTab', tabId); tabs.change('layuiminiTab', tabId);
layer.close(loading); layer.close(loading);
}); });
@@ -262,14 +259,14 @@ define(["jquery"], function ($) {
maxTabNum: options.maxTabNum, maxTabNum: options.maxTabNum,
}); });
} }
parent.layui.element.tabChange('layuiminiTab', tabId); parent.layui.tabs.change('layuiminiTab', tabId);
parent.layer.close(loading); parent.layer.close(loading);
}); });
/** /**
* 关闭选项卡 * 关闭选项卡
**/ **/
$('body').on('click', '.layuimini-tab .layui-tab-title .layui-tab-close', function () { $('body').on('click', '.layuimini-tab .layui-tabs-header .layui-tab-close', function () {
var loading = layer.load(0, {shade: false, time: 2 * 1000}); var loading = layer.load(0, {shade: false, time: 2 * 1000});
var $parent = $(this).parent(); var $parent = $(this).parent();
var tabId = $parent.attr('lay-id'); var tabId = $parent.attr('lay-id');
@@ -285,7 +282,7 @@ define(["jquery"], function ($) {
$('body').on('click', '[layuimini-tab-close]', function () { $('body').on('click', '[layuimini-tab-close]', function () {
var loading = layer.load(0, {shade: false, time: 2 * 1000}); var loading = layer.load(0, {shade: false, time: 2 * 1000});
var closeType = $(this).attr('layuimini-tab-close'); var closeType = $(this).attr('layuimini-tab-close');
$(".layuimini-tab .layui-tab-title li").each(function () { $(".layuimini-tab .layui-tabs-header li").each(function () {
var tabId = $(this).attr('lay-id'); var tabId = $(this).attr('lay-id');
var id = $(this).attr('id'); var id = $(this).attr('id');
var isCurrent = $(this).hasClass('layui-this'); var isCurrent = $(this).hasClass('layui-this');
@@ -307,7 +304,7 @@ define(["jquery"], function ($) {
/** /**
* 禁用网页右键 * 禁用网页右键
*/ */
$(".layuimini-tab .layui-tab-title").unbind("mousedown").bind("contextmenu", function (e) { $(".layuimini-tab .layui-tabs-header").unbind("mousedown").bind("contextmenu", function (e) {
e.preventDefault(); e.preventDefault();
return false; return false;
}); });
@@ -315,10 +312,11 @@ define(["jquery"], function ($) {
/** /**
* 注册鼠标右键 * 注册鼠标右键
*/ */
$('body').on('mousedown', '.layuimini-tab .layui-tab-title li', function (e) { $('body').on('mousedown', '.layuimini-tab .layui-tabs-header li', function (e) {
var left = $(this).offset().left - $('.layuimini-tab ').offset().left + ($(this).width() / 2), var left = e.pageX ,
tabId = $(this).attr('lay-id'); tabId = $(this).attr('lay-id');
if (e.which === 3) { if (e.which === 3) {
e.preventDefault();
miniTab.openTabRignMenu(tabId, left); miniTab.openTabRignMenu(tabId, left);
} }
}); });
@@ -337,7 +335,7 @@ define(["jquery"], function ($) {
var loading = layer.load(0, {shade: false, time: 2 * 1000}); var loading = layer.load(0, {shade: false, time: 2 * 1000});
var closeType = $(this).attr('layuimini-tab-menu-close'), var closeType = $(this).attr('layuimini-tab-menu-close'),
currentTabId = $('.layuimini-tab-mousedown').attr('data-tab-id'); currentTabId = $('.layuimini-tab-mousedown').attr('data-tab-id');
$(".layuimini-tab .layui-tab-title li").each(function () { $(".layuimini-tab .layui-tabs-header li").each(function () {
var tabId = $(this).attr('lay-id'); var tabId = $(this).attr('lay-id');
var id = $(this).attr('id'); var id = $(this).attr('id');
if (id !== 'layuiminiHomeTabId') { if (id !== 'layuiminiHomeTabId') {
@@ -368,7 +366,7 @@ define(["jquery"], function ($) {
options.listenSwichCallback = options.listenSwichCallback || function () { options.listenSwichCallback = options.listenSwichCallback || function () {
}; };
element.on('tab(' + options.filter + ')', function (data) { tabs.on('afterChange(layuiminiTab)', function (data) {
var tabId = $(this).attr('lay-id'); var tabId = $(this).attr('lay-id');
if (options.urlHashLocation) { if (options.urlHashLocation) {
location.hash = tabId; location.hash = tabId;
@@ -403,10 +401,10 @@ define(["jquery"], function ($) {
options.menuList = options.menuList || []; options.menuList = options.menuList || [];
if (!options.urlHashLocation) return false; if (!options.urlHashLocation) return false;
var tabId = location.hash.replace(/^#/, ''); var tabId = location.hash.replace(/^#/, '');
if (tabId === null || tabId === undefined || tabId ==='') return false; if (tabId === null || tabId === undefined || tabId === '') return false;
// 判断是否为首页 // 判断是否为首页
if(tabId ===options.homeInfo.href) return false; if (tabId === options.homeInfo.href) return false;
// 判断是否为右侧菜单 // 判断是否为右侧菜单
var menu = miniTab.searchMenu(tabId, options.menuList); var menu = miniTab.searchMenu(tabId, options.menuList);
@@ -419,7 +417,7 @@ define(["jquery"], function ($) {
maxTabNum: options.maxTabNum, maxTabNum: options.maxTabNum,
}); });
$('.layuimini-menu-left').attr('layuimini-tab-tag', 'no'); $('.layuimini-menu-left').attr('layuimini-tab-tag', 'no');
element.tabChange('layuiminiTab', tabId); tabs.change('layuiminiTab', tabId);
return false; return false;
} }
@@ -436,7 +434,7 @@ define(["jquery"], function ($) {
maxTabNum: options.maxTabNum, maxTabNum: options.maxTabNum,
}); });
$('.layuimini-menu-left').attr('layuimini-tab-tag', 'no'); $('.layuimini-menu-left').attr('layuimini-tab-tag', 'no');
element.tabChange('layuiminiTab', tabId); tabs.change('layuiminiTab', tabId);
isSearchMenu = true; isSearchMenu = true;
return false; return false;
} }
@@ -452,7 +450,7 @@ define(["jquery"], function ($) {
isIframe: false, isIframe: false,
maxTabNum: options.maxTabNum, maxTabNum: options.maxTabNum,
}); });
element.tabChange('layuiminiTab', tabId); tabs.change('layuiminiTab', tabId);
return false; return false;
}, },
@@ -543,7 +541,7 @@ define(["jquery"], function ($) {
* 自动定位 * 自动定位
*/ */
rollPosition: function () { rollPosition: function () {
var $tabTitle = $('.layuimini-tab .layui-tab-title'); var $tabTitle = $('.layuimini-tab .layui-tabs-header');
var autoLeft = 0; var autoLeft = 0;
$tabTitle.children("li").each(function () { $tabTitle.children("li").each(function () {
if ($(this).hasClass('layui-this')) { if ($(this).hasClass('layui-this')) {
@@ -562,7 +560,7 @@ define(["jquery"], function ($) {
* @param direction * @param direction
*/ */
rollClick: function (direction) { rollClick: function (direction) {
var $tabTitle = $('.layuimini-tab .layui-tab-title'); var $tabTitle = $('.layuimini-tab .layui-tabs-header');
var left = $tabTitle.scrollLeft(); var left = $tabTitle.scrollLeft();
if ('left' === direction) { if ('left' === direction) {
$tabTitle.animate({ $tabTitle.animate({

View File

@@ -41,7 +41,7 @@ define(["jquery"], function ($) {
headerRightBg: '#23262e', //头部右侧背景色 headerRightBg: '#23262e', //头部右侧背景色
headerRightBgThis: '#0c0c0c', //头部右侧选中背景色, headerRightBgThis: '#0c0c0c', //头部右侧选中背景色,
headerRightColor: 'rgba(255,255,255,.7)', //头部右侧字体颜色, headerRightColor: 'rgba(255,255,255,.7)', //头部右侧字体颜色,
headerRightChildColor: 'rgba(255,255,255,.7)', //头部右侧下拉字体颜色, headerRightChildColor: '#676767', //头部右侧下拉字体颜色,
headerRightColorThis: 'rgba(255,255,255,.7)', //头部右侧鼠标选中, headerRightColorThis: 'rgba(255,255,255,.7)', //头部右侧鼠标选中,
headerRightNavMore: 'rgba(255,255,255,.7)', //头部右侧更多下拉颜色, headerRightNavMore: 'rgba(255,255,255,.7)', //头部右侧更多下拉颜色,
headerRightNavMoreBg: '#1aa094', //头部右侧更多下拉列表选中背景色, headerRightNavMoreBg: '#1aa094', //头部右侧更多下拉列表选中背景色,
@@ -295,6 +295,24 @@ define(["jquery"], function ($) {
} }
miniTheme.buildBodyElemStyle(elemStyleName); miniTheme.buildBodyElemStyle(elemStyleName);
}, },
changeThemeMainColor() {
let bgcolorId = localStorage.getItem('layuiminiBgColorId');
if (bgcolorId === null || bgcolorId === undefined || bgcolorId === '') return false;
let bgcolorData = miniTheme.config(bgcolorId);
let mainColor = bgcolorData.headerRightBg
if (bgcolorId == 0) mainColor = '#16b777';
const bgColor = window.getComputedStyle(document.documentElement).getPropertyValue('--ea8-theme-main-color');
document.documentElement.style.setProperty('--ea8-theme-main-color', mainColor);
const iframes = document.getElementsByTagName('iframe');
if (iframes.length === 0) return false;
$.each(iframes, (i, iframe) => {
if (iframe === '' || iframe === undefined) return false;
const iframeDocument = iframe.contentDocument || iframe.contentWindow.document;
iframeDocument.documentElement.style.setProperty('--ea8-theme-main-color', mainColor);
})
},
/** /**
* 构建主题样式 * 构建主题样式
* @param bgcolorId * @param bgcolorId
@@ -555,6 +573,7 @@ define(["jquery"], function ($) {
bgColorDefault: bgcolorId, bgColorDefault: bgcolorId,
listen: false, listen: false,
}); });
miniTheme.changeThemeMainColor()
}); });
$('body').on('click', '[data-select-style]', function () { $('body').on('click', '[data-select-style]', function () {
var elemStyleName = $(this).attr('data-select-style'); var elemStyleName = $(this).attr('data-select-style');

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long