添加网站文件

This commit is contained in:
2025-12-22 13:59:40 +08:00
commit 117aaf83d1
19468 changed files with 2111999 additions and 0 deletions

View File

@@ -0,0 +1,149 @@
{layout name="layout2" /}
<style>
.layui-form-item .layui-input-inline {
width: 240px;
}
</style>
<div class="layui-form" lay-filter="layuiadmin-form-admin" id="layuiadmin-form-admin" style="padding: 20px 30px 0 0;">
<input type="hidden" value="0" name="id">
<div class="layui-form-item">
<label class="layui-form-label">名称</label>
<div class="layui-input-inline">
<input type="text" name="name" lay-verify="required" lay-vertype="tips" placeholder="请输入名称"
autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">类型</label>
<div class="layui-input-inline">
<input type="radio" lay-filter="type" name="type" value="1" title="定时任务" checked>
<!--<input type="radio" lay-filter="type" name="type" value="2" title="守护进程">-->
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">命令</label>
<div class="layui-input-inline">
<input type="text" name="command" lay-verify="required" lay-vertype="tips"
placeholder="请输入thinkphp命令version" autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">参数</label>
<div class="layui-input-inline">
<input type="text" name="parameter" placeholder="请输入参数,例:--id 8 --name 测试" autocomplete="off"
class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">状态</label>
<div class="layui-input-inline">
<input type="checkbox" lay-filter="disable" name="status" lay-skin="switch" lay-text="立即启动|停止" checked>
</div>
</div>
<div class="layui-form-item" id="expression">
<label class="layui-form-label">规则</label>
<div class="layui-input-inline">
<input type="text" name="expression" lay-verify="expression_required" lay-vertype="tips"
placeholder="请输入crontab规则59 * * * *" autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-form-item" id="preview" style="display: none">
<label class="layui-form-label">执行预览</label>
<div class="layui-input-inline">
<table class="layui-table">
<colgroup>
<col width="60">
<col width="160">
</colgroup>
<thead>
<tr>
<th>次数</th>
<th>执行时间</th>
</tr>
</thead>
<tbody id="tbody_lists">
</tbody>
</table>
</div>
</div>
<div class="layui-form-item layui-form-text">
<label class="layui-form-label">备注</label>
<div class="layui-input-inline">
<textarea name="remark" placeholder="请输入内容" class="layui-textarea"></textarea>
</div>
</div>
<div class="layui-form-item layui-hide">
<input type="button" lay-submit lay-filter="crontab-submit" id="crontab-submit" value="确认">
</div>
</div>
<script>
var code;
layui.config({
version:"{$front_version}",
base: '/static/plug/layui-admin/dist/layuiadmin/' //静态资源所在路径
}).extend({
index: 'lib/index' //主入口模块
}).use(['index', 'form', 'like'], function () {
var $ = layui.$
, form = layui.form
, like = layui.like;
function preview() {
expression = $("[name=expression]").val();
if (isEmptyString(expression)) {
$('#tbody_lists').html('');
$('#preview').hide();
return;
}
var data = {'expression': expression};
like.ajax({
url: '{:url("crontab/expression")}',
data: data,
type: "get",
success: function (res) {
if (res.code == 1) {
var html = '';
var data = res.data;
for (var i in data) {
html += '<tr>';
html += '<td>' + data[i]['time'] + '</td>';
html += '<td>' + data[i]['date'] + '</td>';
html += '</tr>';
}
$('#preview').show();
$('#tbody_lists').html(html);
}
}
});
}
$("[name=expression]").bind('input propertychange', function () {
clearTimeout(code);
code = setTimeout(function () {
preview();
}, 1000);
});
form.on('radio(type)', function (data) {
if (data.value == 1) {
$('#expression').show();
preview();
} else {
$('#expression').hide();
$('#preview').hide();
}
});
form.verify({
expression_required: function (value, item) {
if ($('input[name="type"]:checked').val() == 2) {
return;
}
if(isEmptyString(value)){
return '定时任务的规则不能为空';
}
}
});
})
</script>

View File

@@ -0,0 +1,158 @@
{layout name="layout2" /}
<style>
.layui-form-item .layui-input-inline {
width: 240px;
}
</style>
<div class="layui-form" lay-filter="layuiadmin-form-admin" id="layuiadmin-form-admin" style="padding: 20px 30px 0 0;">
<input type="hidden" value="0" name="id">
<div class="layui-form-item">
<input type="hidden" name="id" value="{$info.id}">
<label class="layui-form-label">名称</label>
<div class="layui-input-inline">
<input type="text" name="name" lay-verify="required" lay-vertype="tips" placeholder="请输入名称"
autocomplete="off" class="layui-input" value="{$info.name}">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">类型</label>
<div class="layui-input-inline">
<input type="radio" lay-filter="type" name="type" value="1" title="定时任务" {eq name="info.type" value="1"}checked{/eq}>
<!--<input type="radio" lay-filter="type" name="type" value="2" title="守护进程" {eq name="info.type" value="2"}checked{/eq}>-->
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">命令</label>
<div class="layui-input-inline">
<input type="text" name="command" lay-verify="required" lay-vertype="tips"
placeholder="请输入thinkphp命令version" autocomplete="off" class="layui-input" value="{$info.command}">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">参数</label>
<div class="layui-input-inline">
<input type="text" name="parameter" placeholder="请输入参数,例:--id 8 --name 测试" autocomplete="off"
class="layui-input" value="{$info.parameter}">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">状态</label>
<div class="layui-input-inline">
<input type="checkbox" lay-filter="disable" name="status" lay-skin="switch" lay-text="立即启动|停止" {eq name="info.status" value="1"}checked{/eq}>
</div>
</div>
<div class="layui-form-item" id="expression">
<label class="layui-form-label">规则</label>
<div class="layui-input-inline">
<input type="text" name="expression" lay-verify="expression_required" lay-vertype="tips"
placeholder="请输入crontab规则59 * * * *" autocomplete="off" class="layui-input" value="{$info.expression}">
</div>
</div>
<div class="layui-form-item" id="preview" style="display: none">
<label class="layui-form-label">执行预览</label>
<div class="layui-input-inline">
<table class="layui-table">
<colgroup>
<col width="60">
<col width="160">
</colgroup>
<thead>
<tr>
<th>次数</th>
<th>执行时间</th>
</tr>
</thead>
<tbody id="tbody_lists">
</tbody>
</table>
</div>
</div>
<div class="layui-form-item layui-form-text">
<label class="layui-form-label">备注</label>
<div class="layui-input-inline">
<textarea name="remark" placeholder="请输入内容" class="layui-textarea">{$info.remark}</textarea>
</div>
</div>
<div class="layui-form-item layui-hide">
<input type="button" lay-submit lay-filter="crontab-submit-edit" id="crontab-submit-edit" value="确认">
</div>
</div>
<script>
var code;
layui.config({
version:"{$front_version}",
base: '/static/plug/layui-admin/dist/layuiadmin/' //静态资源所在路径
}).extend({
index: 'lib/index' //主入口模块
}).use(['index', 'form', 'like'], function () {
var $ = layui.$
, form = layui.form
, like = layui.like;
function preview() {
expression = $("[name=expression]").val();
if (isEmptyString(expression)) {
$('#tbody_lists').html('');
$('#preview').hide();
return;
}
var data = {'expression': expression};
like.ajax({
url: '{:url("crontab/expression")}',
data: data,
type: "get",
success: function (res) {
if (res.code == 1) {
var html = '';
var data = res.data;
for (var i in data) {
html += '<tr>';
html += '<td>' + data[i]['time'] + '</td>';
html += '<td>' + data[i]['date'] + '</td>';
html += '</tr>';
}
$('#preview').show();
$('#tbody_lists').html(html);
}
}
});
}
$("[name=expression]").bind('input propertychange', function () {
clearTimeout(code);
code = setTimeout(function () {
preview();
}, 1000);
});
form.on('radio(type)', function (data) {
if (data.value == 1) {
$('#expression').show();
preview();
} else {
$('#expression').hide();
$('#preview').hide();
}
});
form.verify({
expression_required: function (value, item) {
if ($('input[name="type"]:checked').val() == 2) {
return;
}
if(isEmptyString(value)){
return '定时任务的规则不能为空';
}
}
});
if ('{$info.type}' == '1') {
$('#expression').show();
preview();
} else {
$('#expression').hide();
$('#preview').hide();
}
preview();
})
</script>

View File

@@ -0,0 +1,242 @@
{layout name="layout1" /}
<div class="layui-fluid">
<div class="layui-card">
<div class="layui-card-body">
<div class="layui-collapse like-layui-collapse" lay-accordion="" style="border:1px dashed #c4c4c4">
<div class="layui-colla-item">
<h2 class="layui-colla-title like-layui-colla-title" style="background-color: #fff">操作提示</h2>
<div class="layui-colla-content layui-show">
<p>1.请在linux环境使用crontab命令添加定时任务*/1 * * * * php think crontab 。</p>
<p>2.规则如下:</p>
<p>*(0~59分)&nbsp;&nbsp;*(023小时)&nbsp;&nbsp;*(131号)&nbsp;&nbsp;*(1-12月)&nbsp;&nbsp;*(0-7星期0和7都代表星期日)</p>
<p>*(星号)代表任何时刻都接受的意思。例0 10 * * * command 日、月、周都是*就代表着不论何月、何日的星期几的1000都执行后续命令的意思。</p>
<p>,(逗号)代表分隔时段的意思。例要执行的工作是200与300时就会是0 2,3 * * * command时间还是有五列不过第二列是 2,3 代表2与3都适用。</p>
<p>-(减号) 代表一段时间范围内8点到11点之间的每小时的18分都进行一项工作18 8-11 * * * command仔细看到第二列变成8-11.代表 8,9,10,11,12 都适用的。</p>
<p>/n(斜线)那个n代表数字即是每隔n单位间隔的意思每五分钟进行一次*/5 * * * * 。</p>
</div>
</div>
</div>
<br>
<div style="padding-bottom: 10px;">
<button class="layui-btn layui-btn-sm layuiadmin-btn-crontab {$view_theme_color}" data-type="add">添加</button>
</div>
<table id="crontab-lists" lay-filter="crontab-lists"></table>
<script type="text/html" id="status">
{{# if(d.status == 1){ }}
<button class="layui-btn layui-btn-sm {$view_theme_button}">运行</button>
{{# } }}
{{# if(d.status == 2){ }}
<button class="layui-btn layui-btn-sm layui-btn-danger">停止</button>
{{# } }}
{{# if(d.status == 3){ }}
<button class="layui-btn layui-btn-sm layui-btn-danger">错误</button>
{{# } }}
</script>
<script type="text/html" id="operation">
<a class="layui-btn layui-btn-sm layui-btn-normal" lay-event="edit">编辑</a>
{{# if(d.status == 1){ }}
<a class="layui-btn layui-btn-danger layui-btn-sm" lay-event="stop">停止</a>
{{# } }}
{{# if(d.status == 2 ||d.status == 3){ }}
<a class="layui-btn layui-btn-normal layui-btn-sm" lay-event="start">启动</a>
{{# } }}
<!--<a class="layui-btn layui-btn-xs" lay-event="restart">
<i class="layui-icon layui-icon-refresh"></i></a>-->
{{# if(d.system == 0){ }}
<a class="layui-btn layui-btn-sm layui-btn-danger" lay-event="delete">删除</a>
{{# } }}
{{# if(d.system == 1){ }}
<a class="layui-btn layui-btn-sm layui-btn-danger layui-btn-disabled">删除</a>
{{# } }}
</script>
</div>
</div>
</div>
<script>
layui.config({
version:"{$front_version}",
base: '/static/plug/layui-admin/dist/layuiadmin/' //静态资源所在路径
}).extend({
index: 'lib/index' //主入口模块
}).use(['index', 'table', 'like'], function () {
var $ = layui.$
, form = layui.form
, table = layui.table
, like = layui.like;
//监听搜索
form.on('submit(LAY-user-back-search)', function (data) {
var field = data.field;
//执行重载
table.reload('crontab-lists', {
where: field
});
});
table.render({
elem: '#crontab-lists'
, url: '{:url("crontab/lists")}' //模拟接口
, cols: [[
{field: 'name', width: 150, title: '名称'}
, {field: 'type_str', width: 90, title: '类型'}
, {field: 'command', width: 150, title: '命令'}
, {field: 'parameter', width: 100, title: '参数'}
, {field: 'expression', width: 100, title: '规则'}
, {field: 'status', width:80,title: '状态', templet: '#status', align: 'center',sort: true}
, {field: 'error', width: 120, title: '错误原因'}
, {field: 'last_time_str', width: 130, title: '最后执行时间'}
, {field: 'time', width: 90, title: '时长'}
, {field: 'max_time', width: 90, title: '最大时长'}
, {fixed: 'right', title: '操作',width: 300,align: 'center', toolbar: '#operation'}
]]
, text: {none: '暂无数据!'}
, parseData: function (res) { //将原始数据解析成 table 组件所规定的数据
return {
"code": res.code,
"msg": res.msg,
"count": res.data.count, //解析数据长度
"data": res.data.lists, //解析数据列表
};
}
,done: function(res, curr, count){
// 解决操作栏因为内容过多换行问题
$(".layui-table-main tr").each(function (index, val) {
$($(".layui-table-fixed-l .layui-table-body tbody tr")[index]).height($(val).height());
$($(".layui-table-fixed-r .layui-table-body tbody tr")[index]).height($(val).height());
});
}
});
//监听工具条
table.on('tool(crontab-lists)', function (obj) {
var operation = obj.event;
var id = obj.data['id'];
switch (operation) {
case 'start':
case 'stop':
case 'restart':
var data={'operation':operation,'id':id}
like.ajax({
url: '{:url("crontab/operation")}',
data: data,
type: "post",
success: function (res) {
if (res.code == 1) {
layui.layer.msg(res.msg, {
offset: '15px'
, icon: 1
, time: 500
},function(){
table.reload('crontab-lists'); //数据刷新
});
}
}
});
break;
case 'delete':
layer.confirm('确定定时任务?', function(index){
like.ajax({
url:'{:url("crontab/del")}',
data:{'id':id},
type:"post",
success:function(res)
{
if(res.code == 1) {
obj.del();
layui.layer.msg(res.msg, {
offset: '15px'
, icon: 1
, time: 1000
});
layer.close(index);
}
}
});
});
break;
case 'edit':
layer.open({
type: 2
,title: '编辑系统任务'
,content: '{:url("crontab/edit")}?id='+id
,area: ['90%', '90%']
,btn: ['确定', '取消']
,yes: function(index, layero){
var iframeWindow = window['layui-layer-iframe'+ index]
,submitID = 'crontab-submit-edit'
,submit = layero.find('iframe').contents().find('#'+ submitID);
//监听提交
iframeWindow.layui.form.on('submit('+ submitID +')', function(data){
var field = data.field;
like.ajax({
url:'{:url("crontab/edit")}',
data:field,
type:"post",
success:function(res)
{
if(res.code == 1) {
layui.layer.msg(res.msg, {
offset: '15px'
, icon: 1
, time: 1000
});
layer.close(index); //关闭弹层
table.reload('crontab-lists'); //数据刷新
}
}
});
});
submit.trigger('click');
}
})
}
});
var active = {
add: function(){
layer.open({
type: 2
,title: '添加系统任务'
,content: '{:url("crontab/add")}'
,area: ['90%', '90%']
,btn: ['确定', '取消']
,yes: function(index, layero){
var iframeWindow = window['layui-layer-iframe'+ index]
,submitID = 'crontab-submit'
,submit = layero.find('iframe').contents().find('#'+ submitID);
//监听提交
iframeWindow.layui.form.on('submit('+ submitID +')', function(data){
var field = data.field;
like.ajax({
url:'{:url("crontab/add")}',
data:field,
type:"post",
success:function(res)
{
if(res.code == 1) {
layui.layer.msg(res.msg, {
offset: '15px'
, icon: 1
, time: 1000
});
layer.close(index); //关闭弹层
table.reload('crontab-lists'); //数据刷新
}
}
});
});
submit.trigger('click');
}
});
},
}
$('.layui-btn.layuiadmin-btn-crontab').on('click', function(){
var type = $(this).data('type');
active[type] ? active[type].call(this) : '';
});
});
</script>