plugins/navManager:导航 CRUD + 导航分类 CRUD(独立 blueprint) plugins/friendManager:友情链接 CRUD plugins/aboutManager:关于本站 CRUD plugins/siteStats:访问统计主页 + JSON 接口 + /site/* GET 埋点 + nav 卡片点击埋点 applications/view/public/nav.py:导航聚合页 / 分类详情 / JSON 接口,支持 visit_count 注入 applications/view/public/about.py:关于本站公开页 applications/view/public/friend.py:友情链接公开页 templates/public/base.html:响应式首页(搜索框 / 分类抽屉 / 5 主题切换 / footer 隐私小字) templates/public/index.html / category.html:卡片右下角访问次数 templates/public/about.html / friend.html:关于 + 友链前台页 docs/plugins-development.md:插件开发完整指南(生命周期 + 4 个示例 + FAQ + framework 迁移) scripts/:探针与端到端验证脚本(probe_*/verify_*/test_*)
118 lines
4.7 KiB
HTML
118 lines
4.7 KiB
HTML
<!DOCTYPE html>
|
|
<html>
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<title>编辑友情链接</title>
|
|
{% include 'system/common/header.html' %}
|
|
</head>
|
|
<body>
|
|
<div class="layui-form" lay-filter="friend-form" style="padding: 20px 30px 0 0;">
|
|
<input type="hidden" name="id" value="{{ friend.id }}">
|
|
<div class="layui-form-item">
|
|
<label class="layui-form-label">名称</label>
|
|
<div class="layui-input-block">
|
|
<input type="text" name="title" required lay-verify="required" value="{{ friend.title }}"
|
|
autocomplete="off" class="layui-input">
|
|
</div>
|
|
</div>
|
|
<div class="layui-form-item">
|
|
<label class="layui-form-label">链接</label>
|
|
<div class="layui-input-block">
|
|
<input type="text" name="url" required lay-verify="required|url" value="{{ friend.url }}"
|
|
autocomplete="off" class="layui-input">
|
|
</div>
|
|
</div>
|
|
<div class="layui-form-item">
|
|
<label class="layui-form-label">Logo</label>
|
|
<div class="layui-input-block">
|
|
<input type="text" name="logo" value="{{ friend.logo or '' }}"
|
|
placeholder="https://example.com/favicon.ico(可留空)"
|
|
autocomplete="off" class="layui-input">
|
|
</div>
|
|
</div>
|
|
<div class="layui-form-item">
|
|
<label class="layui-form-label">简介</label>
|
|
<div class="layui-input-block">
|
|
<input type="text" name="description" value="{{ friend.description or '' }}"
|
|
autocomplete="off" class="layui-input">
|
|
</div>
|
|
</div>
|
|
<div class="layui-form-item">
|
|
<label class="layui-form-label">分组</label>
|
|
<div class="layui-input-block">
|
|
<input type="text" name="category" value="{{ friend.category or '推荐友链' }}"
|
|
autocomplete="off" class="layui-input">
|
|
</div>
|
|
</div>
|
|
<div class="layui-form-item">
|
|
<label class="layui-form-label">排序</label>
|
|
<div class="layui-input-block">
|
|
<input type="number" name="sort" value="{{ friend.sort or 0 }}" autocomplete="off" class="layui-input">
|
|
</div>
|
|
</div>
|
|
<div class="layui-form-item">
|
|
<label class="layui-form-label">类型</label>
|
|
<div class="layui-input-block">
|
|
<input type="radio" name="isExternal" value="1" title="外链(新窗口)" {% if friend.is_external == 1 %}checked{% endif %}>
|
|
<input type="radio" name="isExternal" value="0" title="站内(当前窗)" {% if friend.is_external == 0 %}checked{% endif %}>
|
|
</div>
|
|
</div>
|
|
<div class="layui-form-item">
|
|
<label class="layui-form-label">状态</label>
|
|
<div class="layui-input-block">
|
|
<input type="radio" name="enable" value="1" title="启用" {% if friend.enable == 1 %}checked{% endif %}>
|
|
<input type="radio" name="enable" value="0" title="禁用" {% if friend.enable == 0 %}checked{% endif %}>
|
|
</div>
|
|
</div>
|
|
<div class="layui-form-item">
|
|
<div class="layui-input-block">
|
|
<button type="button" class="layui-btn" lay-submit lay-filter="friend-form-submit">保存</button>
|
|
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<script>
|
|
layui.use(['form', 'layer'], function(){
|
|
var form = layui.form;
|
|
var layer = layui.layer;
|
|
var $ = layui.$;
|
|
|
|
form.render();
|
|
form.on('submit(friend-form-submit)', function(){
|
|
var data = form.val('friend-form');
|
|
var submitBtn = $('button[lay-filter="friend-form-submit"]');
|
|
submitBtn.prop('disabled', true).addClass('layui-btn-disabled');
|
|
$.ajax({
|
|
url: '/system/friend/update',
|
|
type: 'PUT',
|
|
contentType: 'application/json',
|
|
data: JSON.stringify({
|
|
friendId: data.id,
|
|
title: data.title,
|
|
url: data.url,
|
|
logo: data.logo,
|
|
description: data.description,
|
|
category: data.category,
|
|
sort: data.sort,
|
|
isExternal: data.isExternal,
|
|
enable: data.enable
|
|
}),
|
|
success: function(res){
|
|
layer.msg(res.msg || (res.code === 0 ? '保存成功' : '保存失败'));
|
|
if (res.code === 0 || res.success) {
|
|
setTimeout(function(){ parent.layer.close(parent.layer.getFrameIndex(window.name)); }, 600);
|
|
}
|
|
},
|
|
error: function(){ layer.msg('请求失败'); },
|
|
complete: function(){
|
|
submitBtn.prop('disabled', false).removeClass('layui-btn-disabled');
|
|
}
|
|
});
|
|
return false;
|
|
});
|
|
});
|
|
</script>
|
|
</body>
|
|
</html>
|