Files

351 lines
13 KiB
HTML

<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>{$title | default='YwxApp'}</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 href="/assets/layui/css/layui.css" rel="stylesheet">
<link href="/assets/ywxapp/css/ywxapp.css" rel="stylesheet">
<!-- HTML5 shim, for IE6-8 support of HTML5 elements. All other JS at the end of file. -->
<!--[if lt IE 9]>
<script src="__CDN__/assets/js/html5shiv.js"></script>
<script src="__CDN__/assets/js/respond.min.js"></script>
<![endif]-->
<script type="text/javascript">
var config = {
root: "/",
};
var require = {
};
</script>
<style>
body {
padding: 20px;
background-color: #f2f2f2;
}
.form-container {
background: white;
padding: 20px;
border-radius: 5px;
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
}
.layui-tab-content {
padding: 20px 0;
}
.form-item-tip {
color: #999;
font-size: 12px;
margin-top: 5px;
}
.form-group-title {
margin-bottom: 15px;
padding-bottom: 10px;
border-bottom: 1px solid #eee;
font-weight: bold;
color: #333;
}
</style>
</head>
<body>
<div class="form-container">
<div id="formView"></div>
</div>
<!-- 表单模板 -->
<script type="text/html" id="formTpl">
<div class="layui-tab layui-tab-brief" lay-filter="formTab">
<ul class="layui-tab-title">
{{# layui.each(d.groups, function(index, group){ }}
<li class="{{# if(index === 0){ }}layui-this{{# } }}">{{ group }}</li>
{{# }); }}
</ul>
<div class="layui-tab-content">
{{# layui.each(d.groups, function(groupIndex, group){ }}
<div class="layui-tab-item {{# if(groupIndex === 0){ }}layui-show{{# } }}">
<form class="layui-form" lay-filter="form-{{ group }}">
<div class="form-group-title">{{ group }} 设置</div>
{{# layui.each(d.data[group], function(fieldIndex, field){ }}
<div class="layui-form-item">
<label class="layui-form-label">{{ field.title }}</label>
<div class="layui-input-block">
{{# if(field.type === 'string' || field.type === 'text'){ }}
<!-- 文本输入框 -->
<input type="text"
name="{{ field.name }}"
value="{{ field.value || '' }}"
placeholder="{{ field.tip || '请输入' + field.title }}"
class="layui-input"
{{# if(field.rule === 'required'){ }}lay-verify="required"{{# } }}>
{{# } else if(field.type === 'textarea'){ }}
<!-- 文本域 -->
<textarea name="{{ field.name }}"
placeholder="{{ field.tip || '请输入' + field.title }}"
class="layui-textarea"
{{# if(field.rule === 'required'){ }}lay-verify="required"{{# } }}>{{ field.value || '' }}</textarea>
{{# } else if(field.type === 'select'){ }}
<!-- 下拉选择框 -->
<select name="{{ field.name }}"
{{# if(field.rule === 'required'){ }}lay-verify="required"{{# } }}>
<option value="">请选择{{ field.title }}</option>
{{#
var options = field.content ? field.content.split(',') : [];
layui.each(options, function(optIndex, option){
}}
<option value="{{ option }}" {{# if(field.value == option){ }}selected{{# } }}>{{ option }}</option>
{{# }); }}
</select>
{{# } else if(field.type === 'checkbox'){ }}
<!-- 复选框 -->
{{#
var checkboxes = field.content ? field.content.split(',') : [];
layui.each(checkboxes, function(cbIndex, cbValue){
}}
<input type="checkbox"
name="{{ field.name }}"
title="{{ cbValue }}"
value="{{ cbValue }}"
{{# if(field.value && field.value.indexOf(cbValue) !== -1){ }}checked{{# } }}
lay-skin="primary">
{{# }); }}
{{# } else if(field.type === 'radio'){ }}
<!-- 单选框 -->
{{#
var radios = field.content ? field.content.split(',') : [];
layui.each(radios, function(rdIndex, rdValue){
}}
<input type="radio"
name="{{ field.name }}"
title="{{ rdValue }}"
value="{{ rdValue }}"
{{# if(field.value == rdValue){ }}checked{{# } }}>
{{# }); }}
{{# } else if(field.type === 'number'){ }}
<!-- 数字输入框 -->
<input type="number"
name="{{ field.name }}"
value="{{ field.value || '' }}"
placeholder="{{ field.tip || '请输入' + field.title }}"
class="layui-input"
{{# if(field.rule === 'required'){ }}lay-verify="required|number"{{# } }}>
{{# } else if(field.type === 'date'){ }}
<!-- 日期选择器 -->
<input type="text"
name="{{ field.name }}"
value="{{ field.value || '' }}"
placeholder="{{ field.tip || '请选择日期' }}"
class="layui-input"
id="date-{{ field.id }}">
{{# } }}
{{# if(field.tip){ }}
<div class="form-item-tip">{{ field.tip }}</div>
{{# } }}
</div>
</div>
{{# }); }}
<div class="layui-form-item">
<div class="layui-input-block">
<button type="button" class="layui-btn" lay-submit lay-filter="submit-{{ group }}">保存设置</button>
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
</div>
</div>
</form>
</div>
{{# }); }}
</div>
</div>
</script>
<script src="/assets/layui/layui.js"></script>
<script src="/assets/ywxapp/ywxapp.js" module="backend"></script>
<script>// 原始数据
var formData = [
{
"id": 1,
"name": "site_name",
"group": "basic",
"title": "站点名称",
"tip": "请填写站点名称",
"type": "string",
"value": "YFCMF-TP6",
"content": "",
"rule": "required",
"extend": "",
"setting": ""
},
{
"id": 2,
"name": "beian",
"group": "basic",
"title": "备案号",
"tip": "",
"type": "string",
"value": "",
"content": "",
"rule": "",
"extend": "",
"setting": ""
},
{
"id": 3,
"name": "site_description",
"group": "basic",
"title": "站点描述",
"tip": "请填写站点描述",
"type": "textarea",
"value": "这是一个基于TP6的CMS系统",
"content": "",
"rule": "",
"extend": "",
"setting": ""
},
{
"id": 4,
"name": "site_status",
"group": "advanced",
"title": "站点状态",
"tip": "选择站点是否开启",
"type": "select",
"value": "1",
"content": "开启,关闭,维护中",
"rule": "required",
"extend": "",
"setting": ""
},
{
"id": 5,
"name": "allow_comment",
"group": "advanced",
"title": "允许评论",
"tip": "是否允许访客评论",
"type": "radio",
"value": "1",
"content": "是,否",
"rule": "",
"extend": "",
"setting": ""
},
{
"id": 6,
"name": "features",
"group": "advanced",
"title": "功能模块",
"tip": "选择启用的功能模块",
"type": "checkbox",
"value": "文章,评论",
"content": "文章,评论,用户,统计",
"rule": "",
"extend": "",
"setting": ""
},
{
"id": 7,
"name": "max_upload_size",
"group": "upload",
"title": "最大上传大小",
"tip": "单位:MB",
"type": "number",
"value": "10",
"content": "",
"rule": "required",
"extend": "",
"setting": ""
},
{
"id": 8,
"name": "upload_date",
"group": "upload",
"title": "上传日期限制",
"tip": "选择可上传文件的日期范围",
"type": "date",
"value": "2024-01-01",
"content": "",
"rule": "",
"extend": "",
"setting": ""
}
];
// 处理数据:按group分组
function processData(data) {
var groups = {};
var groupNames = [];
// 收集所有分组
data.forEach(function (item) {
if (!groups[item.group]) {
groups[item.group] = [];
groupNames.push(item.group);
}
groups[item.group].push(item);
});
return {
groups: groupNames,
data: groups
};
}
// 初始化Layui
layui.use(['laytpl', 'form', 'element', 'laydate', 'http'], function (exports) {
var laytpl = layui.laytpl;
var form = layui.form;
var element = layui.element;
var laydate = layui.laydate;
var http = layui.http;
http.get('index').then(respon => {
let respona = processData(respon.data && respon.data.length ? respon.data : formData);
var getTpl = document.getElementById('formTpl').innerHTML;
var view = document.getElementById('formView');
laytpl(getTpl).render(respona, function (html) {
view.innerHTML = html;
// 重新渲染表单元素
form.render();
element.render('tab');
// 初始化日期选择器
formData.forEach(function (item) {
if (item.type === 'date') {
laydate.render({
elem: '#date-' + item.id,
format: 'yyyy-MM-dd'
});
}
});
// 监听表单提交
form.on('submit', function (data) {
console.log('表单提交数据:', data.field);
http.post('update', data.field).then(respon => {
console.log(respon)
});
layer.msg('表单提交成功!已输出到控制台');
return false;
});
});
})
// 处理数据
//var processedData = processData(formData);
// 渲染模板
// exports('configure', {});
});
</script>
</body>
</html>