同步更新

This commit is contained in:
邹景立 2023-11-25 21:35:04 +08:00
parent ad28cd3629
commit 99e76768b9
14 changed files with 178 additions and 626 deletions

View File

@ -31,7 +31,7 @@ class Service extends Plugin
* 定义插件名称
* @var string
*/
protected $appName = '系统后台管理';
protected $appName = '系统管理';
/**
* 定义安装包名

View File

@ -56,7 +56,7 @@ class Config extends Controller
{
$this->title = '系统参数配置';
$this->files = Storage::types();
$this->plugins = Plugin::get('', true);
$this->plugins = Plugin::get(null, true);
$this->issuper = AdminService::isSuper();
$this->systemid = ModuleService::getRunVar('uni');
$this->framework = ModuleService::getLibrarys('topthink/framework');

View File

@ -188,13 +188,7 @@ define(['md5', 'notify'], function (SparkMD5, Notify, allowMime) {
});
} else if (parseInt(ret.code) === 200) {
(file.xurl = ret.data.url), that.progress('100.00', file);
that.done({
code: 1,
info: '{:lang("文件秒传成功!")}',
data: {
url: file.xurl,
}
}, file.index, file, done, '{:lang("文件秒传成功!")}');
that.done({code: 1, url: file.xurl, info: file.xstats, data: {code:200,url: file.xurl}}, file.index, file, done, '{:lang("文件秒传成功!")}');
} else {
that.event('upload.error', {file: file}, file, ret.info || ret.error.message || '{:lang("文件上传出错!")}');
}

View File

@ -3,7 +3,7 @@
<div class="layui-card-body padding-left-40">
<div class="layui-form-item label-required-prev">
<div class="help-label"><b>数据类型</b>DataType</div>
<div class="help-label"><b>数据类型</b>Data Type</div>
{if isset($vo.type)}
<label><input readonly value="{$vo.type|default=''}" class="layui-input think-bg-gray"></label>
{else}
@ -35,9 +35,9 @@
</div>
<label class="layui-form-item relative block">
<span class="help-label"><b>数据编码</b>DataCode</span>
<span class="help-label"><b>数据编码</b>Data Code</span>
{if isset($vo.code)}
<input readonly maxlength="100" class="layui-input think-bg-gray" name="code" value='{$vo.code|default=""}' required required-error="数据编码不能为空" placeholder="请输入数据编码">
<input readonly maxlength="100" class="layui-input think-bg-gray" name="code" value='{$vo.code|default=""}' required placeholder="请输入数据编码">
{else}
<input maxlength="100" class="layui-input" name="code" value='{$vo.code|default=""}' required vali-name="数据编码" placeholder="请输入数据编码">
{/if}
@ -45,13 +45,13 @@
</label>
<label class="layui-form-item relative block">
<span class="help-label"><b>数据名称</b>DataName</span>
<span class="help-label"><b>数据名称</b>Data Name</span>
<input maxlength="500" class="layui-input" name="name" value='{$vo.name|default=""}' required vali-name="数据名称" placeholder="请输入数据名称">
<span class="help-block">请输入当前数据名称,请尽量保持名称的唯一性,数据名称尽量不要出现重复 ~</span>
</label>
<label class="layui-form-item relative block">
<span class="help-label"><b>数据内容</b>DataContent</span>
<span class="help-label"><b>数据内容</b>Data Content</span>
<textarea name="content" class="layui-textarea" placeholder="请输入数据内容">{$vo.content|default=''}</textarea>
</label>

View File

@ -54,7 +54,7 @@
</script>
<script type="text/html" id="toolbar">
<!--{if auth("remove")}-->
<!--{if auth("edit")}-->
<a class="layui-btn layui-btn-sm" data-modal="{:url('edit')}?id={{d.id}}" data-title="编辑文件信息">{:lang("编 辑")}</a>
<!--{/if}-->
<!--{if auth("remove")}-->

View File

@ -24,10 +24,11 @@
{/block}
{block name="content"}
<div class="think-box-notify">
<div class="think-box-notify" type="info">
<!--{if isset($super) and $super}-->
<b>{:lang('服务状态')}</b><b class="margin-right-5" data-queue-message><span class="color-desc">{:lang('检查中')}</span></b>
<b data-tips-text="{:lang('点击可复制【服务启动指令】')}" class="layui-icon pointer margin-right-20" data-copy="{$command|default=''}">&#xe60e;</b>
<b data-tips-text="{:lang('点击可复制【服务启动指令】')}" class="layui-icon pointer margin-right-20" data-copy="{$command|default=''}">&#xe633;</b>
<script>$('[data-queue-message]').load('{:sysuri("admin/api.queue/status")}');</script>
<!--{/if}-->
@ -39,6 +40,7 @@
])}
</div>
<div class="think-box-shadow">
{include file='queue/index_search'}
<table id="QueueTable" data-line="2" data-url="{:request()->url()}" data-target-search="form.form-search"></table>

View File

@ -390,11 +390,17 @@ $(function () {
};
/*! 通过 URI 查询最佳菜单 NODE */
this.queryNode = function (uri, node) {
if (!/^m-/.test(node = node || location.href.replace(/.*spm=([\d\-m]+).*/ig, '$1'))) {
let $menu = $('[data-menu-node][data-open*="' + uri.replace(/\.html$/ig, '') + '"]');
return $menu.size() ? $menu.get(0).dataset.menuNode : '';
// 如果该节点存在直接返回 Node 值
if (/^m-/.test(node = node || location.href.replace(/.*spm=([\d\-m]+).*/ig, '$1'))) {
if ($('[data-menu-node="' + node + '"]').size()) return node;
}
return node;
let path = uri.replace(/\.html$/ig, '');
// 尝试通过 URI 查询节点值
let $menu = $('[data-menu-node][data-open*="' + path + '"]');
if ($menu.size()) return $menu.get(0).dataset.menuNode;
// 尝试通过 URL 查询节点值
$menu = $('[data-menu-node][data-open~="#' + path + '"]');
return $menu.size() ? $menu.get(0).dataset.menuNode : (/^m-/.test(node || '') ? node : '');
};
/*! 完整 URL 转 URI 地址 */
this.parseUri = function (uri, elem, vars, temp, attrs) {
@ -425,6 +431,7 @@ $(function () {
layer.close(evt.idx);
});
});
/*! 监听窗口大小及HASH切换 */
return $(window).on('resize', function () {
(layui.data('AdminMenuType')['mini'] || $body.width() < 1000) ? layout.addClass(mclass) : layout.removeClass(mclass);
@ -647,6 +654,7 @@ $(function () {
// 默认动态设置页数, 动态设置最大高度
if (option.page === true) option.page = {curr: layui.sessionData('pages')[option.id] || 1};
if (option.width === 'full') option.width = $table.parent().width();
if (option.height === 'full') if ($table.parents('.iframe-pagination').size()) {
$table.parents('.iframe-pagination').addClass('not-footer');
option.height = $(window).height() - $table.removeClass('layui-hide').offset().top - 20;
@ -664,9 +672,8 @@ $(function () {
option.done = function (res, curr, count) {
layui.sessionData('pages', {key: table.id, value: this.page.curr || 1});
typeof option.success === 'function' && option.success.call(this, res, curr, count);
$.form.reInit($table.next()).find('[data-load][data-time!="false"],[data-action][data-time!="false"],[data-queue],[data-iframe]').not('[data-table-id]').attr('data-table-id', table.id);
$.form.reInit($table.next()).find('[data-open],[data-load][data-time!="false"],[data-action][data-time!="false"],[data-queue],[data-iframe]').not('[data-table-id]').attr('data-table-id', table.id);
(option.loading = this.loading = true) && $table.data('next', this).next().find(cls.join(',')).animate({opacity: 1});
}, option.parseData = function (res) {
if (typeof params.filter === 'function') {
res.data = params.filter(res.data, res);
@ -900,7 +907,12 @@ $(function () {
/*! 注册 data-open 事件行为 */
$.base.onEvent('click', '[data-open]', function () {
// 仅记录当前表格分页
let page = 0, tbid = this.dataset.tableId || null;
if (tbid) page = layui.sessionData('pages')[tbid] || 0;
layui.sessionData('pages', null);
if (page > 0) layui.sessionData('pages', {key: tbid, value: page})
// 根据链接类型跳转页面
if (this.dataset.open.match(/^https?:/)) {
$.form.goto(this.dataset.open);
} else {
@ -920,6 +932,7 @@ $(function () {
/*! 注册 data-modal 事件行为 */
$.base.onEvent('click', '[data-modal]', function () {
$.base.applyRuleValue(this, {open_type: 'modal'}, function (data, elem, dset) {
let area = dset.area || [dset.width || '800px', dset.height || '580px'];
let defer = $.form.modal(dset.modal, data, dset.title || this.innerText || '编辑', undefined, undefined, undefined, dset.area || dset.width || '800px', dset.offset || 'auto', dset.full !== undefined);
defer.progress((type) => type === 'modal.close' && dset.closeRefresh && $.layTable.reload(dset.closeRefresh));
});

View File

@ -13,6 +13,7 @@ CKEDITOR.editorConfig = function (config) {
config.removePlugins = 'easyimage,cloudservices,exportpdf';
config.removeButtons = 'Underline,Subscript,Superscript';
config.removeDialogTabs = 'image:advanced;link:advanced';
config.baseFloatZIndex = 19891019;
// 内容过滤
config.disallowedContent = 'script; *[on*]';
config.allowedContent = {$1: {elements: CKEDITOR.dtd, attributes: true, styles: true, classes: true}};

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -23,6 +23,30 @@
// .flex-center
// .flex-between
@nums: 0, 5, 10, 15, 20, 25, 30;
each({
m: margin;
p: padding;
}, .(@tv,@tt) {
.ta-@{tt} {
each(@nums, .(@n) {
&-@{n} {
@{tv}: @n * 1px !important;
}
each({
t: -top;
l: -left;
r: -right;
b: -bottom;
}, .(@d,@k) {
&@{k}-@{n} {
@{tv}@{d}: @n * 1px !important;
}
});
})
}
})
.flex {
#flex();
@ -689,44 +713,18 @@ table[data-line='3'] + div tbody .layui-table-cell {
}
}
@think-elips: {
display: -webkit-box;
overflow: hidden;
line-height: 1.4em;
text-overflow: ellipsis;
-webkit-box-orient: vertical;
}
.think-elips {
&-1 {
@think-elips();
line-clamp: 1;
-webkit-line-clamp: 1;
}
&-2 {
@think-elips();
line-clamp: 2;
-webkit-line-clamp: 2;
}
&-3 {
@think-elips();
line-clamp: 3;
-webkit-line-clamp: 3;
}
&-4 {
@think-elips();
line-clamp: 4;
-webkit-line-clamp: 4;
}
&-5 {
@think-elips();
line-clamp: 5;
-webkit-line-clamp: 5;
}
each(range(5), {
&-@{value} {
display: -webkit-box;
overflow: hidden;
line-height: 1.4em;
text-overflow: ellipsis;
-webkit-box-orient: vertical;
line-clamp: @value;
-webkit-line-clamp: @value;
}
})
}
.think-box-shadow {
@ -1424,92 +1422,57 @@ label.think-checkbox {
}
}
.full- {
&width {
.full {
width: 100% !important;
height: 100% !important;
&-width {
width: 100% !important
}
&height {
&-height {
height: 100% !important
}
}
.color- {
&red {
color: #e44 !important
}
@sizes: 10, 12, 14;
&blue {
color: #29f !important
}
&desc {
color: #999 !important
}
&text {
color: #333 !important
}
&green {
color: #090 !important
}
@colors: {
red: #e44;
blue: #29f;
desc: #999;
text: #333;
green: #090;
}
.sub-span- {
&red span {
color: #e44
}
&blue span {
color: #29f
}
&desc span {
color: #999
}
&text span {
color: #333
}
&green span {
color: #090
}
.sub-span {
each(@colors, {
&-@{key} span {
color: @value;
}
})
}
.sub-strong- {
&s10 b {
font-size: 10px;
}
.color {
each(@colors, {
&-@{key} {
color: @value !important;
}
})
}
&s12 b {
font-size: 12px;
}
&s14 b {
font-size: 14px;
}
&red b {
color: #ec494e
}
&blue b {
color: #2494f2
}
&desc b {
color: #999
}
&text b {
color: #333
}
&green b {
color: #090
}
.sub-strong {
each(@colors, {
&-@{key} b {
color: @value;
}
})
each(@sizes, {
&-s@{value} b {
font-size: @value *1px;
}
})
}
.think-bg- {
@ -1575,90 +1538,44 @@ label.think-checkbox {
}
}
.font- {
&code {
.font {
&-code {
font-family: 'Courier New', 'Lucida Console', 'Consolas', 'Helvetica Neue', 'Helvetica', 'PingFang SC', 'Tahoma', 'Arial', sans-serif
}
&s10 {
font-size: 10px !important
}
each({
s10: 10px;
s11: 11px;
s12: 12px;
s13: 13px;
s14: 14px;
s15: 15px;
s16: 16px;
s18: 18px;
s20: 20px;
s30: 30px;
s40: 40px;
}, {
&-@{key} {
font-size: @value !important
}
})
&s11 {
font-size: 11px !important
}
&s12 {
font-size: 12px !important
}
&s13 {
font-size: 13px !important
}
&s14 {
font-size: 14px !important
}
&s15 {
font-size: 15px !important
}
&s16 {
font-size: 16px !important
}
&s18 {
font-size: 18px !important
}
&s20 {
font-size: 20px !important
}
&s30 {
font-size: 30px !important
}
&s40 {
font-size: 40px !important
}
&w1 {
font-weight: 100 !important;
}
&w2 {
font-weight: 200 !important;
}
&w3 {
font-weight: 300 !important;
}
&w4 {
font-weight: 400 !important;
}
&w5 {
font-weight: 500 !important;
}
&w6 {
font-weight: 600 !important;
}
&w7 {
font-weight: 700 !important;
}
&w8 {
font-weight: 800 !important;
}
&w9 {
font-weight: 900 !important;
}
each({
w1: 100;
w2: 200;
w3: 300;
w4: 400;
w5: 500;
w6: 600;
w7: 700;
w8: 800;
w9: 900;
}, {
&-@{key} {
font-weight: @value !important
}
})
}
.border {
@ -1717,413 +1634,35 @@ label.think-checkbox {
}
}
.margin {
&-0 {
margin: 0 !important
@nums: 0, 5, 10, 15, 20, 25, 30, 40;
each({
--margin: margin;
--padding: padding;
}, .(@v) {
.@{v} {
each(@nums, {
&-@{value} {
@{v}: @value*1px !important;
}
&-row-@{value} {
@{v}-left: @value*1px !important;
@{v}-right: @value*1px !important;
}
&-top-@{value} {
@{v}-top: @value*1px !important;
}
&-left-@{value} {
@{v}-left: @value*1px !important;
}
&-right-@{value} {
@{v}-right: @value*1px !important;
}
&-bottom-@{value} {
@{v}-bottom: @value*1px !important;
}
})
}
&-5 {
margin: 5px !important
}
&-10 {
margin: 10px !important
}
&-15 {
margin: 15px !important
}
&-20 {
margin: 20px !important
}
&-25 {
margin: 25px !important
}
&-30 {
margin: 30px !important
}
&-40 {
margin: 40px !important
}
&-row {
&-0 {
margin-left: 0 !important;
margin-right: 0 !important;
}
&-5 {
margin-left: 5px !important;
margin-right: 5px !important;
}
&-10 {
margin-left: 10px !important;
margin-right: 10px !important;
}
&-15 {
margin-left: 15px !important;
margin-right: 15px !important;
}
&-20 {
margin-left: 20px !important;
margin-right: 20px !important;
}
&-25 {
margin-left: 25px !important;
margin-right: 25px !important;
}
&-30 {
margin-left: 30px !important;
margin-right: 30px !important;
}
&-40 {
margin-left: 40px !important;
margin-right: 40px !important;
}
}
&-top {
&-0 {
margin-top: 0 !important
}
&-5 {
margin-top: 5px !important
}
&-10 {
margin-top: 10px !important
}
&-15 {
margin-top: 15px !important
}
&-20 {
margin-top: 20px !important
}
&-25 {
margin-top: 25px !important
}
&-30 {
margin-top: 30px !important
}
&-40 {
margin-top: 40px !important;
}
}
&-left {
&-0 {
margin-left: 0 !important
}
&-5 {
margin-left: 5px !important
}
&-10 {
margin-left: 10px !important
}
&-15 {
margin-left: 15px !important
}
&-20 {
margin-left: 20px !important
}
&-25 {
margin-left: 25px !important
}
&-30 {
margin-left: 30px !important
}
&-40 {
margin-left: 40px !important
}
}
&-right {
&-0 {
margin-right: 0 !important
}
&-5 {
margin-right: 5px !important
}
&-10 {
margin-right: 10px !important
}
&-15 {
margin-right: 15px !important
}
&-20 {
margin-right: 20px !important
}
&-25 {
margin-right: 25px !important
}
&-30 {
margin-right: 30px !important
}
&-40 {
margin-right: 40px !important
}
}
&-bottom {
&-0 {
margin-bottom: 0 !important
}
&-5 {
margin-bottom: 5px !important
}
&-10 {
margin-bottom: 10px !important
}
&-15 {
margin-bottom: 15px !important
}
&-20 {
margin-bottom: 20px !important
}
&-25 {
margin-bottom: 25px !important
}
&-30 {
margin-bottom: 30px !important
}
&-40 {
margin-bottom: 40px !important
}
}
}
.padding {
&-0 {
padding: 0 !important
}
&-5 {
padding: 5px !important
}
&-10 {
padding: 10px !important
}
&-15 {
padding: 15px !important
}
&-20 {
padding: 20px !important
}
&-25 {
padding: 25px !important
}
&-30 {
padding: 30px !important
}
&-40 {
padding: 40px !important
}
&-row {
&-0 {
padding-left: 0 !important;
padding-right: 0 !important;
}
&-5 {
padding-left: 5px !important;
padding-right: 5px !important;
}
&-10 {
padding-left: 10px !important;
padding-right: 10px !important;
}
&-15 {
padding-left: 15px !important;
padding-right: 15px !important;
}
&-20 {
padding-left: 20px !important;
padding-right: 20px !important;
}
&-25 {
padding-left: 25px !important;
padding-right: 25px !important;
}
&-30 {
padding-left: 30px !important;
padding-right: 30px !important;
}
&-40 {
padding-left: 40px !important;
padding-right: 40px !important;
}
}
&-top {
&-0 {
padding-top: 0 !important
}
&-5 {
padding-top: 5px !important
}
&-10 {
padding-top: 10px !important
}
&-15 {
padding-top: 15px !important
}
&-20 {
padding-top: 20px !important
}
&-30 {
padding-top: 30px !important
}
&-40 {
padding-top: 40px !important
}
}
&-left {
&-0 {
padding-left: 0 !important
}
&-5 {
padding-left: 5px !important
}
&-10 {
padding-left: 10px !important
}
&-15 {
padding-left: 15px !important
}
&-20 {
padding-left: 20px !important
}
&-30 {
padding-left: 30px !important
}
&-40 {
padding-left: 40px !important
}
}
&-right {
&-0 {
padding-right: 0 !important
}
&-5 {
padding-right: 5px !important
}
&-10 {
padding-right: 10px !important
}
&-15 {
padding-right: 15px !important
}
&-20 {
padding-right: 20px !important
}
&-30 {
padding-right: 30px !important
}
&-40 {
padding-right: 40px !important
}
}
&-bottom {
&-0 {
padding-bottom: 0 !important
}
&-5 {
padding-bottom: 5px !important
}
&-10 {
padding-bottom: 10px !important
}
&-15 {
padding-bottom: 15px !important
}
&-20 {
padding-bottom: 20px !important
}
&-30 {
padding-bottom: 30px !important
}
&-40 {
padding-bottom: 40px !important
}
}
}
})
@keyframes loading {
17% {

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,7 +10,9 @@
**ThinkAdmin** 是一款遵循 **MIT** 协议免费开源的快速开发框架,基于最新版本 **ThinkPHP6** 的极简后台管理系统 ( 已兼容 **ThinkPHP8** ),在使用 **ThinkAdmin** 前请认真阅读[《免责声明》](https://doc.thinkadmin.top/disclaimer)并同意该声明。
当前 **ThinkAdmin** 的最新版本为[ **v6.1** ](https://gitee.com/zoujingli/ThinkAdmin/tree/v6.1),从这个版本开始正式进入插件时代,提供类似 **PaaS** 的组件升级更新服务,也可以本地化定制开发,基础组件及扩展插件统一使用 **Composer** 管理。**ThinkAdmin** 与传统 **ThinkPHP** 多应用模式无差别,用户可以自行开发自己的模块,此次升级可完美兼容 **ThinkAdmin v6.0** 应用,原 **ThinkAdmin v6.0** 只需安装 **ThinkPlugsAdmin** 组件即可升级到 **v6.1** 的插件模式。想要了解更多 **ThinkAdmin** 插件生态请阅读 [《ThinkAdmin 插件生态》](https://gitee.com/zoujingli/ThinkAdmin/blob/v6.1/plugin.md)
当前 **ThinkAdmin** 的最新版本为[ **v6.1** ](https://gitee.com/zoujingli/ThinkAdmin/tree/v6.1),从这个版本开始正式进入插件时代,提供类似 **PaaS** 的组件升级更新服务,也可以本地化定制开发,基础组件及扩展插件统一使用 **Composer** 管理。**ThinkAdmin** 与传统 **ThinkPHP** 多应用模式无差别,用户可以自行开发自己的模块,此次升级可完美兼容 **ThinkAdmin v6.0** 应用,原 **ThinkAdmin v6.0** 只需安装 **ThinkPlugsAdmin** 组件即可升级到 **v6.1** 的插件模式。
[//]: # (想要了解更多 **ThinkAdmin** 插件生态请阅读 [《ThinkAdmin 插件生态》]&#40;https://doc.thinkadmin.top/guide/plugin.html&#41;)
**[查看 ThinkAdmin v6.1 详细介绍请切换至 v6.1 分支](https://gitee.com/zoujingli/ThinkAdmin/tree/v6.1)**
@ -20,7 +22,7 @@
使用 **ThinkAdmin** 需要掌握 **ThinkPHP**、**jQuery**、**LayUI**、**RequireJs** 等开发技能,后台 **UI** 界面基于最新版本的 **LayUI** 前端框架以及 **RequireJs** 组件加载方式,默认加载了所有 **LayUI** 的组件,框架中可以直接使用组件(独立页面需要注意 **js** 加载顺序哦),使用 **RequireJs** 加载插件,互联网上资源非常多,可自行下载进行二次扩展。目前后台大部分页面为单页程序,页面加载速度非常快速,也因此后台不再支持选项卡模式。
我们致力于快速开发的底层框架,让项目开发变得更容易。框架提供完善的基础组件以及对应的 **API** 支持,基于此框架可以快速开发各种 **WEB** 应用。任何一个系统都不能完全满足所有的业务场景,**ThinkAdmin** 免费提供基础底层的功能,这里包括系统权限管理,系统存储配置,微信授权管理,以及其他常用功能集成等…… 因此 **ThinkAdmin** 也被大家定性为外包二开基线系统。**v6.1** 开始我们提供会员尊享组件和定制业务插件服务。目前已经有许多公司及个人在使用 **ThinkAdmin**,通过数据聚合统计已有 **5** 万多在线运行的项目。
我们致力于快速开发的底层框架,让项目开发变得更容易。框架提供完善的基础组件以及对应的 **API** 支持,基于此框架可以快速开发各种 **WEB** 应用。任何一个系统都不能完全满足所有的业务场景,**ThinkAdmin** 免费提供基础底层的功能,这里包括系统权限管理,系统存储配置,微信授权管理,以及其他常用功能集成等…… 因此 **ThinkAdmin** 也被大家定性为外包二开基线系统。目前已经有许多公司及个人在使用 **ThinkAdmin**,通过数据聚合统计已有 **5** 万多在线运行的项目。
#### 注意事项
@ -59,8 +61,9 @@ php think run --host 127.0.0.1
**2. 通过源码安装:** 默认安装 admin、wechat 两个模块
如果需要安装演示系统的旧版本 **data** 模块代码,请跳转到
https://gitee.com/zoujingli/think-plugs-data
[//]: # (如果需要安装演示系统的旧版本 **data** 模块代码,请跳转到)
[//]: # (https://gitee.com/zoujingli/think-plugs-data)
```shell
### 下载项目( 需要在英文目录下面执行