第三段完善 代理商绑定 激活等 正式上线的版本
This commit is contained in:
122
app/manager/view/version/control.html
Normal file
122
app/manager/view/version/control.html
Normal file
@@ -0,0 +1,122 @@
|
||||
{extend name="../../admin/view/main"}
|
||||
|
||||
{block name="content"}
|
||||
<div class="layui-card">
|
||||
<div class="layui-card-header">
|
||||
<b>版本信息</b>
|
||||
</div>
|
||||
<div class="layui-card-body">
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">版本号</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" class="layui-input" value="{$version.version_no}" readonly>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">版本名称</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" class="layui-input" value="{$version.version_name}" readonly>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-card">
|
||||
<div class="layui-card-header">
|
||||
<b>权限控制</b>
|
||||
<button class="layui-btn layui-btn-sm layui-btn-primary pull-right" data-open="{:url('control')}?version_id={$version.id}&mode=add">添加规则</button>
|
||||
</div>
|
||||
<div class="layui-card-body">
|
||||
<table class="layui-table margin-top-10" lay-skin="line">
|
||||
{notempty name='rules'}
|
||||
<thead>
|
||||
<tr>
|
||||
<th>控制类型</th>
|
||||
<th>目标类型</th>
|
||||
<th>目标ID</th>
|
||||
<th>过期时间</th>
|
||||
<th>创建时间</th>
|
||||
<th>操作</th>
|
||||
</tr>
|
||||
</thead>
|
||||
{/notempty}
|
||||
<tbody>
|
||||
{foreach $rules as $rule}
|
||||
<tr>
|
||||
<td>{if $rule.control_type eq 'white_list'}<span class="color-green">白名单</span>{else}<span class="color-red">黑名单</span>{/if}</td>
|
||||
<td>
|
||||
{switch $rule.target_type}
|
||||
{case user}用户{/case}
|
||||
{case agent}代理{/case}
|
||||
{case device}设备{/case}
|
||||
{/switch}
|
||||
</td>
|
||||
<td>{$rule.target_id}</td>
|
||||
<td>{$rule.expire_time}</td>
|
||||
<td>{$rule.create_time}</td>
|
||||
<td>
|
||||
<a class="layui-btn layui-btn-danger layui-btn-sm" data-confirm="确定要删除该规则吗?" data-action='{:url("removeRule")}' data-value="id#{$rule.id}">删 除</a>
|
||||
</td>
|
||||
</tr>
|
||||
{/foreach}
|
||||
</tbody>
|
||||
</table>
|
||||
{empty name='rules'}<span class="notdata">没有记录哦</span>{/empty}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{if isset($mode) and $mode eq 'add'}
|
||||
<form class="layui-form layui-card" action="{:url('control')}" data-auto="true" method="post">
|
||||
<div class="layui-card-body">
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">控制类型</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="radio" name="control_type" value="white_list" title="白名单" checked>
|
||||
<input type="radio" name="control_type" value="black_list" title="黑名单">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">目标类型</label>
|
||||
<div class="layui-input-block">
|
||||
<select name="target_type" class="layui-select">
|
||||
<option value="user">用户</option>
|
||||
<option value="agent">代理</option>
|
||||
<option value="device">设备</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">目标ID</label>
|
||||
<div class="layui-input-block">
|
||||
<input name="target_id" required class="layui-input">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">过期时间</label>
|
||||
<div class="layui-input-block">
|
||||
<input name="expire_time" required class="layui-input" id="expire_time">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="hr-line-dashed"></div>
|
||||
|
||||
<div class="layui-form-item text-center">
|
||||
<input type='hidden' value='{$version.id}' name='version_id'>
|
||||
<button class="layui-btn" type='submit'>保存数据</button>
|
||||
<button class="layui-btn layui-btn-danger" type='button' data-close>取消</button>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
{block name='script'}
|
||||
<script>
|
||||
laydate.render({
|
||||
elem: '#expire_time',
|
||||
type: 'datetime'
|
||||
});
|
||||
</script>
|
||||
{/block}
|
||||
{/if}
|
||||
210
app/manager/view/version/form.html
Normal file
210
app/manager/view/version/form.html
Normal file
@@ -0,0 +1,210 @@
|
||||
{extend name="../../admin/view/main"}
|
||||
|
||||
{block name="content"}
|
||||
<form class="layui-form layui-card" action="{:request()->url()}" data-auto="true" method="post">
|
||||
<div class="layui-card-body">
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">版本号</label>
|
||||
<div class="layui-input-block">
|
||||
<input name="version_no" value='{$vo.version_no|default=""}' required placeholder="请输入版本号(x.x.x)" class="layui-input">
|
||||
<tip>版本号格式为: 主版本号.次版本号.修订号,如: 1.0.0</tip>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">版本名称</label>
|
||||
<div class="layui-input-block">
|
||||
<input name="version_name" value='{$vo.version_name|default=""}' required placeholder="请输入版本名称" class="layui-input">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">更新包</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="hidden" name="download_url" value="{$vo.download_url|default=''}" class="layui-input">
|
||||
|
||||
<div class="layui-upload-drag" id="uploadBtn">
|
||||
<i class="layui-icon layui-icon-upload"></i>
|
||||
<div class="upload-title">点击上传或拖拽文件到此处</div>
|
||||
<div class="upload-tips">支持的文件类型: zip, exe, dmg, pkg, deb, rpm</div>
|
||||
</div>
|
||||
<div class="upload-info" style="margin-top: 10px;display:none;">
|
||||
<div class="layui-progress layui-progress-big" lay-filter="uploadProgress" lay-showpercent="true">
|
||||
<div class="layui-progress-bar" lay-percent="0%"></div>
|
||||
</div>
|
||||
<div class="file-info" style="margin-top: 10px;"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">平台</label>
|
||||
<div class="layui-input-block">
|
||||
<select name="platform" lay-verify="required">
|
||||
<option value="all" {if isset($vo.platform) and $vo.platform eq 'all'}selected{/if}>全平台</option>
|
||||
<option value="windows" {if isset($vo.platform) and $vo.platform eq 'windows'}selected{/if}>Windows</option>
|
||||
<option value="mac" {if isset($vo.platform) and $vo.platform eq 'mac'}selected{/if}>Mac</option>
|
||||
<option value="linux" {if isset($vo.platform) and $vo.platform eq 'linux'}selected{/if}>Linux</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">强制更新</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="radio" name="is_force" value="1" title="是" {if isset($vo.is_force) and $vo.is_force eq 1}checked{/if}>
|
||||
<input type="radio" name="is_force" value="0" title="否" {if empty($vo.is_force) or $vo.is_force eq 0}checked{/if}>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">最低要求</label>
|
||||
<div class="layui-input-block">
|
||||
<input name="min_version" value='{$vo.min_version|default=""}' placeholder="请输入最低要求版本号" class="layui-input">
|
||||
<tip>如果设置了最低要求版本,低于此版本的用户需要先更新到此版本</tip>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">版本描述</label>
|
||||
<div class="layui-input-block">
|
||||
<textarea name="description" placeholder="请输入版本描述" class="layui-textarea">{$vo.description|default=""}</textarea>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">更新日志</label>
|
||||
<div class="layui-input-block">
|
||||
<div class="layui-card">
|
||||
<div class="layui-card-body">
|
||||
<div id="logItems">
|
||||
{notempty name="logs"}
|
||||
{foreach $logs as $log}
|
||||
<div class="log-item layui-form-item">
|
||||
<div class="layui-inline" style="width:120px">
|
||||
<select name="logs[type][]" lay-verify="required">
|
||||
<option value="feature" {if $log.type eq 'feature'}selected{/if}>新功能</option>
|
||||
<option value="fix" {if $log.type eq 'fix'}selected{/if}>修复</option>
|
||||
<option value="optimize" {if $log.type eq 'optimize'}selected{/if}>优化</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="layui-inline" style="width:calc(100% - 180px)">
|
||||
<input type="text" name="logs[content][]" value="{$log.content}" required placeholder="请输入更新内容" class="layui-input">
|
||||
</div>
|
||||
<div class="layui-inline" style="width:50px">
|
||||
<a class="layui-btn layui-btn-danger layui-btn-sm" onclick="removeLogItem(this)">删除</a>
|
||||
</div>
|
||||
</div>
|
||||
{/foreach}
|
||||
{/notempty}
|
||||
</div>
|
||||
<div class="text-center padding-bottom-15">
|
||||
<button type="button" class="layui-btn layui-btn-sm layui-btn-primary" onclick="addLogItem()">添加更新内容</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="hr-line-dashed"></div>
|
||||
|
||||
<div class="layui-form-item text-center">
|
||||
{notempty name='id'}<input type='hidden' value='{$id}' name='id'>{/notempty}
|
||||
<button class="layui-btn" type='submit'>保存数据</button>
|
||||
<button class="layui-btn layui-btn-danger" type='button' data-close>取消</button>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
{block name="script"}
|
||||
<script>
|
||||
// 添加更新日志项
|
||||
function addLogItem() {
|
||||
var html = `
|
||||
<div class="log-item layui-form-item">
|
||||
<div class="layui-inline" style="width:120px">
|
||||
<select name="logs[type][]" lay-verify="required">
|
||||
<option value="feature">新功能</option>
|
||||
<option value="fix">修复</option>
|
||||
<option value="optimize">优化</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="layui-inline" style="width:calc(100% - 180px)">
|
||||
<input type="text" name="logs[content][]" required placeholder="请输入更新内容" class="layui-input">
|
||||
</div>
|
||||
<div class="layui-inline" style="width:50px">
|
||||
<a class="layui-btn layui-btn-danger layui-btn-sm" onclick="removeLogItem(this)">删除</a>
|
||||
</div>
|
||||
</div>`;
|
||||
$('#logItems').append(html);
|
||||
layui.form.render();
|
||||
}
|
||||
|
||||
// 删除更新日志项
|
||||
function removeLogItem(obj) {
|
||||
$(obj).closest('.log-item').remove();
|
||||
}
|
||||
|
||||
// 上传更新包
|
||||
layui.use(['upload', 'form', 'element'], function(){
|
||||
var upload = layui.upload;
|
||||
var form = layui.form;
|
||||
var element = layui.element;
|
||||
|
||||
upload.render({
|
||||
elem: '#uploadBtn',
|
||||
url: '{:url("upload")}',
|
||||
accept: 'file',
|
||||
exts: 'zip|exe|dmg|pkg|deb|rpm',
|
||||
drag: true,
|
||||
before: function(){
|
||||
console.log('开始上传...');
|
||||
$('.upload-info').show();
|
||||
element.progress('uploadProgress', '0%');
|
||||
$('.file-info').html('');
|
||||
},
|
||||
progress: function(n){
|
||||
var percent = n + '%';
|
||||
console.log('上传进度:', percent);
|
||||
element.progress('uploadProgress', percent);
|
||||
},
|
||||
done: function(res){
|
||||
console.log('上传响应:', res);
|
||||
if(res.code == 0){
|
||||
// 更新表单值
|
||||
$('input[name=download_url]').val(res.data.url);
|
||||
|
||||
// 更新顶部输入框的值
|
||||
$('input[name="version_no"]').val(res.data.version_no);
|
||||
$('input[name="version_name"]').val(res.data.version_name);
|
||||
|
||||
// 显示文件信息
|
||||
var html = '<div class="layui-badge layui-bg-green">上传成功</div> ';
|
||||
html += '<div class="layui-inline">版本号: ' + res.data.version_no + '</div> ';
|
||||
html += '<div class="layui-inline">版本名称: ' + res.data.version_name + '</div>';
|
||||
$('.file-info').html(html);
|
||||
|
||||
// 重新渲染表单
|
||||
form.render();
|
||||
} else {
|
||||
console.error('上传失败:', res.msg);
|
||||
$('.file-info').html('<div class="layui-badge layui-bg-red">'+res.msg+'</div>');
|
||||
}
|
||||
},
|
||||
error: function(index, upload){
|
||||
console.error('上传错误:', index, upload);
|
||||
$('.file-info').html('<div class="layui-badge layui-bg-red">上传失败</div>');
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
<style>
|
||||
.upload-title { font-size: 16px; margin-bottom: 5px; }
|
||||
.upload-tips { color: #999; font-size: 12px; }
|
||||
.layui-upload-drag { padding: 30px; }
|
||||
.layui-upload-drag .layui-icon { font-size: 50px; color: #009688; }
|
||||
.file-info .layui-inline { margin-right: 10px; }
|
||||
</style>
|
||||
{/block}
|
||||
{/block}
|
||||
79
app/manager/view/version/index.html
Normal file
79
app/manager/view/version/index.html
Normal file
@@ -0,0 +1,79 @@
|
||||
{extend name="../../admin/view/main"}
|
||||
|
||||
{block name="button"}
|
||||
<button class='layui-btn layui-btn-sm layui-btn-primary' data-open='{:url("add")}'>添加版本</button>
|
||||
{/block}
|
||||
|
||||
{block name="content"}
|
||||
<div class="think-box-shadow">
|
||||
<table class="layui-table margin-top-10" lay-skin="line">
|
||||
{notempty name='list'}
|
||||
<thead>
|
||||
<tr>
|
||||
<th class='text-left nowrap'>版本号</th>
|
||||
<th class='text-left nowrap'>版本名称</th>
|
||||
<th class='text-left nowrap'>平台</th>
|
||||
<th class='text-left nowrap'>下载地址</th>
|
||||
<th class='text-left nowrap'>强制更新</th>
|
||||
<th class='text-left nowrap'>最低要求</th>
|
||||
<th class='text-left nowrap'>状态</th>
|
||||
<th class='text-left nowrap'>创建时间</th>
|
||||
<th class='text-left'>操作</th>
|
||||
</tr>
|
||||
</thead>
|
||||
{/notempty}
|
||||
<tbody>
|
||||
{foreach $list as $key=>$vo}
|
||||
<tr>
|
||||
<td class='text-left nowrap'>{$vo.version_no|default=''}</td>
|
||||
<td class='text-left nowrap'>{$vo.version_name|default=''}</td>
|
||||
<td class='text-left nowrap'>{$vo.platform|default='all'}</td>
|
||||
<td class='text-left nowrap'>
|
||||
<a class="layui-btn layui-btn-sm layui-btn-normal" href="{:sysconf('site_domain')}{$vo.download_url|default=''}" target="_blank">下载</a>
|
||||
<a class="layui-btn layui-btn-sm" data-copy="{:sysconf('site_domain')}{$vo.download_url|default=''}" data-tips-text="复制下载链接">
|
||||
<i class="layui-icon"></i>
|
||||
</a>
|
||||
<input type="text" class="layui-input layui-input-inline" style="width:200px;margin-left:5px;" value="{:sysconf('site_domain')}{$vo.download_url|default=''}" readonly>
|
||||
</td>
|
||||
<td class='text-left nowrap'>{if $vo.is_force}是{else}否{/if}</td>
|
||||
<td class='text-left nowrap'>{$vo.min_version|default=''}</td>
|
||||
<td class='text-left nowrap'>
|
||||
{if $vo.status eq 1}
|
||||
<span class="color-green">已启用</span>
|
||||
{else}
|
||||
<span class="color-red">已禁用</span>
|
||||
{/if}
|
||||
</td>
|
||||
<td class='text-left nowrap'>{$vo.create_time|format_datetime}</td>
|
||||
<td class='text-left'>
|
||||
<a class="layui-btn layui-btn-sm" data-open='{:url("edit")}?id={$vo.id}'>编辑</a>
|
||||
{if $vo.status eq 1}
|
||||
<a class="layui-btn layui-btn-sm layui-btn-warm" data-action='{:url("state")}' data-value="id#{$vo.id};status#0">禁用</a>
|
||||
{else}
|
||||
<a class="layui-btn layui-btn-sm layui-btn-warm" data-action='{:url("state")}' data-value="id#{$vo.id};status#1">启用</a>
|
||||
{/if}
|
||||
<a class="layui-btn layui-btn-sm layui-btn-danger" data-confirm="确定要删除该版本吗?" data-action='{:url("remove")}' data-value="id#{$vo.id}">删除</a>
|
||||
</td>
|
||||
</tr>
|
||||
{/foreach}
|
||||
</tbody>
|
||||
</table>
|
||||
{empty name='list'}<span class="notdata">没有记录哦</span>{/empty}
|
||||
</div>
|
||||
{/block}
|
||||
|
||||
{block name="script"}
|
||||
<script>
|
||||
// 注册复制事件
|
||||
$('a[data-copy]').on('click', function () {
|
||||
var text = $(this).data('copy');
|
||||
var input = document.createElement('input');
|
||||
input.value = text;
|
||||
document.body.appendChild(input);
|
||||
input.select();
|
||||
document.execCommand('copy');
|
||||
document.body.removeChild(input);
|
||||
$.msg.success('复制成功');
|
||||
});
|
||||
</script>
|
||||
{/block}
|
||||
Reference in New Issue
Block a user