第三段完善 代理商绑定 激活等 正式上线的版本

This commit is contained in:
huangzhenpc
2025-02-13 15:25:19 +08:00
parent abfa783907
commit d1b0a26dd2
31 changed files with 2729 additions and 641 deletions

View 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}

View 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}

View 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">&#xe64c;</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}