8 Commits

Author SHA1 Message Date
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
wolfcode
9a0ff912b5 feat(mall):新增表单中多选案例 add simulated multi-select feature
- Add simulated multi-select functionality to goods add and edit pages
- Integrate xm-select library for multi-select implementation
- Add random color theme to the multi-select dropdown
- Include predefined options for demonstration purposes
2025-04-18 15:16:06 +08:00
wolfcode
517fd191d3 refactor(curd): improve relation handling and query methods
- Replace with() with withJoin() for more efficient left joins
- Fix foreign key and primary key assignments in relations
- Update index page queries to use relation index method-Modify relation method generation in model to use belongsTo instead of hasOne- Adjust table column definitions for relation fields
2025-04-17 17:25:06 +08:00
wolfcode
d1dfa8b49b Update app.php 2025-04-16 18:40:37 +08:00
wolfcode
c819751a66 chore: update .gitignore files
- Extend and runtime .gitignore: add space after '!' in .gitignore
- Root .gitignore: remove .project file
2025-04-16 18:38:53 +08:00
20 changed files with 226 additions and 124 deletions

2
.gitignore vendored
View File

@@ -9,4 +9,4 @@ Thumbs.db
/vendor /vendor
/.settings /.settings
/.buildpath /.buildpath
/.project /.project

View File

@@ -1041,7 +1041,7 @@ class BuildCurd
$relationCode = ''; $relationCode = '';
foreach ($this->relationArray as $key => $val) { foreach ($this->relationArray as $key => $val) {
$relation = CommonTool::lineToHump($key); $relation = CommonTool::lineToHump($key);
$relationCode = "with(['{$relation}'])"; $relationCode = "withJoin('{$relation}', 'LEFT')";
if (!empty($val['bindSelectField']) && !empty($val['primaryKey'])) { if (!empty($val['bindSelectField']) && !empty($val['primaryKey'])) {
$constructRelation = '$notes["' . lcfirst($val['foreignKey']) . '"] = \app\admin\model\\' . $val['modelFilename'] . '::column("' . $val['bindSelectField'] . '", "' . $val['primaryKey'] . '");'; $constructRelation = '$notes["' . lcfirst($val['foreignKey']) . '"] = \app\admin\model\\' . $val['modelFilename'] . '::column("' . $val['bindSelectField'] . '", "' . $val['primaryKey'] . '");';
} }
@@ -1101,8 +1101,8 @@ class BuildCurd
[ [
'relationMethod' => $relation, 'relationMethod' => $relation,
'relationModel' => "{$val['modelFilename']}::class", 'relationModel' => "{$val['modelFilename']}::class",
'foreignKey' => $val['primaryKey'], 'foreignKey' => $val['foreignKey'],
'primaryKey' => $val['foreignKey'], 'primaryKey' => $val['primaryKey'],
'relationFields' => empty($val['onlyFields']) ? "" : "->field('{$val['primaryKey']}," . implode(',', $val['onlyFields']) . "')", 'relationFields' => empty($val['onlyFields']) ? "" : "->field('{$val['primaryKey']}," . implode(',', $val['onlyFields']) . "')",
]); ]);
$relationList .= $relationCode; $relationList .= $relationCode;
@@ -1403,13 +1403,12 @@ class BuildCurd
} else { } else {
$templateValue = "{field: '{$field}', title: '{$val['comment']}'}"; $templateValue = "{field: '{$field}', title: '{$val['comment']}'}";
} }
$indexCols .= $this->formatColsRow("{$templateValue},\r"); $indexCols .= $this->formatColsRow("{$templateValue},\r");
} }
// 关联表 // 关联表
foreach ($this->relationArray as $table => $tableVal) { foreach ($this->relationArray as $table => $tableVal) {
$table = CommonTool::lineToHump($table); $table = CommonTool::humpToLine($table);
foreach ($tableVal['tableColumns'] as $field => $val) { foreach ($tableVal['tableColumns'] as $field => $val) {
if ($val['formType'] == 'image') { if ($val['formType'] == 'image') {
$templateValue = "{field: '{$table}.{$field}', title: '{$val['comment']}', templet: ea.table.image}"; $templateValue = "{field: '{$table}.{$field}', title: '{$val['comment']}', templet: ea.table.image}";
@@ -1430,7 +1429,7 @@ class BuildCurd
} elseif (in_array($field, $this->sortFields)) { } elseif (in_array($field, $this->sortFields)) {
$templateValue = "{field: '{$table}.{$field}', title: '{$val['comment']}', edit: 'text'}"; $templateValue = "{field: '{$table}.{$field}', title: '{$val['comment']}', edit: 'text'}";
} else { } else {
$templateValue = ""; $templateValue = "{field: '{$table}.{$field}', title: '{$val['comment']}'}";
} }
if ($templateValue) $indexCols .= $this->formatColsRow("{$templateValue},\r"); if ($templateValue) $indexCols .= $this->formatColsRow("{$templateValue},\r");

View File

@@ -7,7 +7,7 @@
return $this->selectList(); return $this->selectList();
} }
list($page, $limit, $where) = $this->buildTableParams(); list($page, $limit, $where) = $this->buildTableParams();
$count = self::$model::where($where)->count(); $count = self::$model::where($where)->{{relationIndexMethod}}->count();
$list = self::$model::where($where)->{{relationIndexMethod}}->page($page, $limit)->order($this->sort)->select()->toArray(); $list = self::$model::where($where)->{{relationIndexMethod}}->page($page, $limit)->order($this->sort)->select()->toArray();
$data = [ $data = [
'code' => 0, 'code' => 0,

View File

@@ -1,5 +1,5 @@
public function {{relationMethod}}() public function {{relationMethod}}()
{ {
return $this->hasOne({{relationModel}}, '{{foreignKey}}', '{{primaryKey}}'){{relationFields}}; return $this->belongsTo({{relationModel}}, '{{foreignKey}}', '{{primaryKey}}'){{relationFields}};
} }

View File

@@ -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

@@ -91,6 +91,14 @@
</div> </div>
</div> </div>
<!-- 文档https://xm-select.com/file/xm-select/v1.2.4/#/basic/use -->
<div class="layui-form-item">
<label class="layui-form-label">模拟多选</label>
<div class="layui-input-block">
<div id="demo1" class="xm-select-demo"></div>
</div>
</div>
<div class="layui-form-item layui-form-text"> <div class="layui-form-item layui-form-text">
<label class="layui-form-label">备注信息</label> <label class="layui-form-label">备注信息</label>
<div class="layui-input-block"> <div class="layui-input-block">

View File

@@ -92,6 +92,14 @@
</div> </div>
</div> </div>
<!-- 文档https://xm-select.com/file/xm-select/v1.2.4/#/basic/use -->
<div class="layui-form-item">
<label class="layui-form-label">模拟多选</label>
<div class="layui-input-block">
<div id="demo1" class="xm-select-demo"></div>
</div>
</div>
<div class="layui-form-item layui-form-text"> <div class="layui-form-item layui-form-text">
<label class="layui-form-label">备注信息</label> <label class="layui-form-label">备注信息</label>
<div class="layui-input-block"> <div class="layui-input-block">

2
extend/.gitignore vendored
View File

@@ -1,2 +1,2 @@
* *
!.gitignore !.gitignore

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

@@ -93,6 +93,25 @@ define(["jquery", "easy-admin"], function ($, ea) {
aiOptimization(data) aiOptimization(data)
}, },
}) })
let colors = [
'#f10f0f', // 红色
'#ffaf00', // 橙色
'#FF69B4', // 猛男粉
'#0087ff', // 蓝色
'#00ff00', // 青青草原
];
var demo1 = xmSelect.render({
el: '#demo1',
name: 'xxx', // form表单提交的name
theme: {color: colors[Math.floor(Math.random() * colors.length)]},
data: [
{name: 'Make', value: 1},
{name: 'PHP', value: 2},
{name: 'Great Again', value: 3},
]
})
ea.listen(); ea.listen();
}, },
edit: function () { edit: function () {
@@ -103,6 +122,25 @@ define(["jquery", "easy-admin"], function ($, ea) {
aiOptimization(data) aiOptimization(data)
}, },
}) })
let colors = [
'#f10f0f', // 红色
'#ffaf00', // 橙色
'#FF69B4', // 猛男粉
'#0087ff', // 蓝色
'#00ff00', // 青青草原
];
var demo1 = xmSelect.render({
el: '#demo1',
name: 'xxx', // form表单提交的name
theme: {color: colors[Math.floor(Math.random() * colors.length)]},
data: [
{name: 'Make', value: 1},
{name: 'PHP', value: 2, selected: true,},
{name: 'Great Again', value: 3, selected: true,},
]
})
ea.listen(); ea.listen();
}, },
stock: function () { stock: function () {

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

@@ -8,6 +8,7 @@ define(["jquery", "tableSelect", "miniTheme", "xmSelect", "lazyload"], function
iframe.contentWindow.onInitElemStyle(); iframe.contentWindow.onInitElemStyle();
} }
}); });
miniTheme.changeThemeMainColor();
}; };
window.onInitElemStyle(); window.onInitElemStyle();

View File

@@ -123,43 +123,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 +172,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 +228,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 +239,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 +255,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 +269,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 +458,7 @@
/**其它 */ /**其它 */
.layui-tab-item { .layui-tabs-item {
width: 100% !important; width: 100% !important;
height: 100% !important; height: 100% !important;
} }
@@ -466,7 +473,7 @@
} }
.layui-tab { .layui-tab {
margin: 0 0 0 0; margin: 0;
z-index: 99999; z-index: 99999;
} }
@@ -640,26 +647,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 +679,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 +704,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 +716,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 +727,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 +783,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 +806,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 +868,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 +919,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

@@ -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,7 +312,7 @@ 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 = $(this).offset().left - $('.layuimini-tab ').offset().left + ($(this).width() / 2),
tabId = $(this).attr('lay-id'); tabId = $(this).attr('lay-id');
if (e.which === 3) { if (e.which === 3) {
@@ -337,7 +334,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 +365,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 +400,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 +416,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 +433,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 +449,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 +540,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 +559,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

View File

@@ -10,10 +10,4 @@
// +---------------------------------------------------------------------- // +----------------------------------------------------------------------
use think\facade\Route; use think\facade\Route;
Route::get('think', function () {
return 'hello,ThinkPHP6!';
});
Route::get('hello/:name', 'index/hello');
Route::any('install', '\app\index\controller\Install@index'); Route::any('install', '\app\index\controller\Install@index');

2
runtime/.gitignore vendored
View File

@@ -1,2 +1,2 @@
* *
!.gitignore !.gitignore