Initial commit

This commit is contained in:
net909
2023-09-28 16:21:06 +08:00
parent 498772eb04
commit ba7be004c0
640 changed files with 87745 additions and 0 deletions
+164
View File
@@ -0,0 +1,164 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>添加插件</title>
<meta name="renderer" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<link rel="stylesheet" href="//cdn.staticfile.org/layui/2.6.3/css/layui.css" media="all">
<link rel="stylesheet" href="../../css/public.css" media="all">
<style>
body {
background-color: #ffffff;
}
</style>
</head>
<body>
<form class="layui-form layuimini-form" lay-filter="plugin-info">
<div class="layui-form-item">
<label class="layui-form-label">插件分类:</label>
<div class="layui-input-block">
<select lay-verify="required" name="category_id" id="categories" lay-verify="required" lay-reqtext="请选择分类">
</select>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">插件标题:</label>
<div class="layui-input-block">
<input type="text" name="title" placeholder="填写插件的标题" lay-verify="required" lay-reqtext="插件标题不能为空"
class="layui-input"
required/>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">路由别名:</label>
<div class="layui-input-block">
<input type="text" name="alias" placeholder="请输入路由别名" value=""
lay-verify="required" lay-reqtext="路由别名不能为空"
class="layui-input" required>
<tip>也就是浏览器地址栏,域名后面的那一串</tip>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">插件类名:</label>
<div class="layui-input-block">
<input type="text" name="class" placeholder="请填写插件类名" value=""
lay-verify="required" lay-reqtext="插件类名不能为空"
class="layui-input" required>
<tip>插件的类名,包名+插件名,例如:utility\example。</tip>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">插件关键词:</label>
<div class="layui-input-block">
<input type="text" name="keyword" placeholder="插件关键词可留空" value=""
class="layui-input">
<tip>用于搜索的关键词,多个用英文逗号,隔开</tip>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">插件权重:</label>
<div class="layui-input-block">
<input type="number" name="weight" placeholder="请填写插件权重" value="0"
lay-verify="required" lay-reqtext="插件权重不能为空"
class="layui-input" required>
<tip>填数字,数字越大排名越前。</tip>
</div>
</div>
<div class="layui-form-item" style="display: none">
<label class="layui-form-label">是否启用:</label>
<div class="layui-input-block">
<input type="checkbox" value="1" name="enable" lay-skin="switch" lay-filter="switchTest" lay-text="ON|OFF" checked>
<tip>禁用则不会在前台显示。</tip>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">是否强制登录:</label>
<div class="layui-input-block">
<input type="checkbox" value="1" name="login" lay-skin="switch" lay-filter="switchTest" lay-text="ON|OFF">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">用户等级限制:</label>
<div class="layui-input-block">
<input type="number" name="level" placeholder="填写用户等级数字" value="0"
lay-verify="required" lay-reqtext="用户等级限制不能为空"
class="layui-input" required>
<tip>用户等级小于该数字的不会显示该工具</tip>
</div>
</div>
<div class="layui-form-item" style="display: none">
<label class="layui-form-label">插件描述:</label>
<div class="layui-input-block">
<textarea name="desc" placeholder="插件描述" class="layui-textarea"></textarea>
<tip>插件描述信息,介绍一下这个插件是干什么的吧!</tip>
</div>
</div>
<div class="layui-form-item">
<div class="layui-input-block">
<button class="layui-btn" lay-submit lay-filter="saveBtn">确认保存</button>
</div>
</div>
</form>
<script id="categoies_tpl" type="text/html">
<select lay-verify="required" name="category_id">
<option value="0">默认组</option>
{{# layui.each(d, function(index, item){ }}
<option value="{{ item.id }}">{{ item.title }}</option>
{{# }); }}
</select>
</script>
<script id="templates_tpl" type="text/html">
<select lay-verify="required" name="category_id">
<option value="default">default</option>
{{# layui.each(d, function(index, item){ }}
<option value="{{ item }}">{{ item }}</option>
{{# }); }}
</select>
</script>
<script src="//cdn.staticfile.org/layui/2.6.3/layui.js" charset="utf-8"></script>
<script src="../../js/api.js?v=1.0.0" charset="utf-8"></script>
<script src="../../js/common.js?v=1.0.0" charset="utf-8"></script>
<script>
layui.use(['form'], function () {
var form = layui.form,
layer = layui.layer,
laytpl = layui.laytpl,
$ = layui.$;
//layer.load(1)
let tasks = []
tasks.push(httpGet('/admin/category/list').then(res => {
var getTpl = document.getElementById('categoies_tpl').innerHTML,
view = document.getElementById('categories');
laytpl(getTpl).render(res.data.items, function (html) {
view.innerHTML = html;
form.render();
});
}))
Promise.all(tasks).finally(() => {
//layer.closeAll('loading')
})
//监听提交
form.on('submit(saveBtn)', function (data) {
layer.load(1)
data.field.enable = data.field.enable ? 1 : 0;
data.field.login = data.field.login ? 1 : 0;
httpPost('/admin/plugin/add', data.field).then(res => {
if (res.status === 'ok') {
$message.success('添加成功', {icon: 1});
const index = parent.layer.getFrameIndex(window.name);
parent.layer.close(index);
}
}).finally(() => {
layer.closeAll('loading')
})
return false;
});
});
</script>
</body>
</html>
+173
View File
@@ -0,0 +1,173 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>编辑插件</title>
<meta name="renderer" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<link rel="stylesheet" href="//cdn.staticfile.org/layui/2.6.3/css/layui.css" media="all">
<link rel="stylesheet" href="../../css/public.css" media="all">
<style>
body {
background-color: #ffffff;
}
</style>
</head>
<body>
<form class="layui-form layuimini-form" lay-filter="plugin-info">
<div class="layui-form-item" style="display: none">
<label class="layui-form-label">id:</label>
<div class="layui-input-block">
<input type="text" name="id" placeholder="请填写入插件id" class="layui-input"
required disabled/>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">插件分类:</label>
<div class="layui-input-block">
<select lay-verify="required" name="category_id" id="categories" lay-verify="required" lay-reqtext="请选择分类">
</select>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">插件标题:</label>
<div class="layui-input-block">
<input type="text" name="title" placeholder="填写插件的标题" lay-verify="required" lay-reqtext="插件标题不能为空"
class="layui-input"
required/>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">路由别名:</label>
<div class="layui-input-block">
<input type="text" name="alias" placeholder="请输入路由别名" value=""
lay-verify="required" lay-reqtext="路由别名不能为空"
class="layui-input" required>
<tip>也就是浏览器地址栏,域名后面的那一串</tip>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">插件类名:</label>
<div class="layui-input-block">
<input type="text" name="class" placeholder="请填写插件类名" value=""
lay-verify="required" lay-reqtext="插件类名不能为空"
class="layui-input" required>
<tip>插件的类名,包名+插件名,例如:utility\example。</tip>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">插件关键词:</label>
<div class="layui-input-block">
<input type="text" name="keyword" placeholder="插件关键词可留空" value=""
class="layui-input">
<tip>用于搜索的关键词,多个用英文逗号,隔开</tip>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">插件权重:</label>
<div class="layui-input-block">
<input type="number" name="weight" placeholder="请填写插件权重" value="0"
lay-verify="required" lay-reqtext="插件权重不能为空"
class="layui-input" required>
<tip>填数字,数字越大排名越前。</tip>
</div>
</div>
<div class="layui-form-item" style="display: none">
<label class="layui-form-label">是否启用:</label>
<div class="layui-input-block">
<input type="checkbox" value="1" name="enable" lay-skin="switch" lay-filter="switchTest" lay-text="ON|OFF">
<tip>禁用则不会在前台显示。</tip>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">是否强制登录:</label>
<div class="layui-input-block">
<input type="checkbox" value="1" name="login" lay-skin="switch" lay-filter="switchTest" lay-text="ON|OFF">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">用户等级限制:</label>
<div class="layui-input-block">
<input type="number" name="level" placeholder="填写用户等级数字" value="0"
lay-verify="required" lay-reqtext="用户等级限制不能为空"
class="layui-input" required>
<tip>用户等级小于该数字的不会显示该工具</tip>
</div>
</div>
<div class="layui-form-item" style="display: none">
<label class="layui-form-label">插件描述:</label>
<div class="layui-input-block">
<textarea name="desc" placeholder="插件描述" class="layui-textarea"></textarea>
<tip>插件描述信息,介绍一下这个插件是干什么的吧!</tip>
</div>
</div>
<div class="layui-form-item">
<div class="layui-input-block">
<button class="layui-btn" lay-submit lay-filter="saveBtn">确认保存</button>
</div>
</div>
</form>
<script id="categoies_tpl" type="text/html">
<select lay-verify="required" name="category_id">
<option value="0">默认组</option>
{{# layui.each(d, function(index, item){ }}
<option value="{{ item.id }}">{{ item.title }}</option>
{{# }); }}
</select>
</script>
<script id="templates_tpl" type="text/html">
<select lay-verify="required" name="category_id">
<option value="default">default</option>
{{# layui.each(d, function(index, item){ }}
<option value="{{ item }}">{{ item }}</option>
{{# }); }}
</select>
</script>
<script src="//cdn.staticfile.org/layui/2.6.3/layui.js" charset="utf-8"></script>
<script src="../../js/api.js?v=1.0.0" charset="utf-8"></script>
<script src="../../js/common.js?v=1.0.0" charset="utf-8"></script>
<script>
layui.use(['form'], function () {
var form = layui.form,
layer = layui.layer,
laytpl = layui.laytpl,
$ = layui.$;
//layer.load(1)
let tasks = []
tasks.push(
httpGet('/admin/category/list').then(res => {
var getTpl = document.getElementById('categoies_tpl').innerHTML,
view = document.getElementById('categories');
laytpl(getTpl).render(res.data.items, function (html) {
view.innerHTML = html;
form.render();
});
}))
Promise.all(tasks).finally(() => {
httpGet('/admin/plugin/get?id=' + getQueryString('id')).then(res => {
if (res.status === 'ok') {
form.val('plugin-info', res.data);
}
})
})
//监听提交
form.on('submit(saveBtn)', function (data) {
layer.load(1)
data.field.enable = data.field.enable ? 1 : 0;
data.field.login = data.field.login ? 1 : 0;
httpPost('/admin/plugin/edit', data.field).then(res => {
if (res.status === 'ok') {
$message.success('保存成功');
}
}).finally(() => {
layer.closeAll('loading')
})
return false;
});
});
</script>
</body>
</html>
+213
View File
@@ -0,0 +1,213 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>安装新插件</title>
<meta name="renderer" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<link rel="stylesheet" href="//cdn.staticfile.org/layui/2.6.3/css/layui.css" media="all">
<link rel="stylesheet" href="../../css/public.css" media="all">
<link rel="stylesheet" href="../../js/lay-module/step-lay/step.css" media="all">
</head>
<body>
<div class="layuimini-container">
<div class="layuimini-main">
<div class="layui-fluid">
<div class="layui-card">
<div class="layui-card-body" style="padding-top: 40px;">
<div class="layui-carousel" id="stepForm" lay-filter="stepForm" style="margin: 0 auto;">
<div carousel-item>
<div>
<form class="layui-form"
style="margin: 0 auto;max-width: 460px;padding-top: 40px;text-align: center">
<div class="layui-form-item">
<div class="layui-upload-drag" id="plugin-upload" style="margin: auto">
<i class="layui-icon layui-icon-upload"></i>
<p>点击上传,或将文件拖拽到此处</p>
</div>
</div>
</form>
</div>
<div>
<form class="layui-form" style="margin: 0 auto;max-width: 460px;padding-top: 40px;"
lay-filter="plugin-info">
<div class="layui-form-item" style="display: none">
<label class="layui-form-label">id:</label>
<div class="layui-input-block">
<input type="text" name="id" placeholder="请填写入插件id" class="layui-input"
required disabled/>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">插件分类:</label>
<div class="layui-input-block">
<select lay-verify="required" name="category_id" id="categories">
</select>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">插件标题:</label>
<div class="layui-input-block">
<input type="text" name="title" placeholder="填写插件的标题" lay-verify="required" lay-reqtext="插件标题不能为空" class="layui-input"
required/>
<tip>填写插件的标题。</tip>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">路由别名:</label>
<div class="layui-input-block">
<input type="text" name="alias" placeholder="请输入路由别名" value=""
class="layui-input" required>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">插件类名:</label>
<div class="layui-input-block">
<input type="text" name="class" placeholder="请填写插件类名" value=""
class="layui-input" required disabled>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">插件描述:</label>
<div class="layui-input-block">
<textarea name="desc" placeholder="插件描述" value=""
class="layui-textarea"></textarea>
</div>
</div>
<div class="layui-form-item">
<div class="layui-input-block">
<button type="button" class="layui-btn layui-btn-primary pre">上一步</button>
<button class="layui-btn" lay-submit lay-filter="formStep2">
&emsp;确认安装&emsp;
</button>
</div>
</div>
</form>
</div>
<div>
<div style="text-align: center;margin-top: 90px;">
<i class="layui-icon layui-circle"
style="color: white;font-size:30px;font-weight:bold;background: #52C41A;padding: 20px;line-height: 80px;">&#xe605;</i>
<div style="font-size: 24px;color: #333;font-weight: 500;margin-top: 30px;">
安装成功
</div>
<div style="font-size: 14px;color: #666;margin-top: 20px;">哎呦,你很不错哦</div>
</div>
<div style="text-align: center;margin-top: 50px;">
<button class="layui-btn next">再安装一个</button>
<a id="viewPlugin" href="/" target="_blank"
class="layui-btn layui-btn-primary">查看插件</a>
</div>
</div>
</div>
</div>
<hr>
<div style="color: #666;margin-top: 30px;margin-bottom: 40px;padding-left: 30px;">
<h3>说明</h3><br>
<h4>安装新插件</h4>
<p>上传符合插件格式的zip压缩包</p>
</div>
</div>
</div>
</div>
</div>
</div>
<script id="categoies_tpl" type="text/html">
<select lay-verify="required" name="category_id">
<option value="0">默认组</option>
{{# layui.each(d, function(index, item){ }}
<option value="{{ item.id }}">{{ item.title }}</option>
{{# }); }}
</select>
</script>
<script src="//cdn.staticfile.org/layui/2.6.3/layui.js" charset="utf-8"></script>
<script src="../../js/lay-config.js?v=1.0.4" charset="utf-8"></script>
<script src="../../js/api.js" charset="utf-8"></script>
<script src="../../js/common.js" charset="utf-8"></script>
<script>
layui.use(['form', 'step'], function () {
var $ = layui.$,
form = layui.form,
step = layui.step,
upload = layui.upload,
layer = layui.layer,
laytpl = layui.laytpl;
httpGet('/admin/category/list').then(res => {
var getTpl = document.getElementById('categoies_tpl').innerHTML,
view = document.getElementById('categories');
laytpl(getTpl).render(res.data.items, function (html) {
view.innerHTML = html;
});
})
step.render({
elem: '#stepForm',
filter: 'stepForm',
width: '100%', //设置容器宽度
stepWidth: '750px',
height: '700px',
stepItems: [{
title: '上传插件包'
}, {
title: '填写插件信息'
}, {
title: '完成'
}]
});
//拖拽上传
upload.render({
elem: '#plugin-upload'
, url: '/admin/plugin/upload'
, accept: 'file'
, acceptMime: 'application/zip'
, before: function (obj) {
layer.load(1);
}
, done: function (res) {
if (res.status === 'ok') {
$message.success('上传成功');
form.val("plugin-info", res.data);
step.next('#stepForm');
} else {
$message.error(res.message);
}
layer.closeAll('loading');
}, error: function () {
$message.error('上传失败');
layer.closeAll('loading');
}
});
form.on('submit(formStep)', function (data) {
step.next('#stepForm');
return false;
});
form.on('submit(formStep2)', function (data) {
layer.load(1);
let pluginInfo = form.val("plugin-info");
httpPost('/admin/plugin/edit', pluginInfo).then(res => {
if (res.status === 'ok') {
step.next('#stepForm');
$('#viewPlugin').attr('href', '/' + pluginInfo.alias)
}
}).finally(() => {
layer.closeAll('loading')
})
return false;
});
$('.pre').click(function () {
step.pre('#stepForm');
});
$('.next').click(function () {
step.next('#stepForm');
});
})
</script>
</body>
</html>