安装插件后的基础文件
This commit is contained in:
477
app/admin/view/developer/generate/add.html
Normal file
477
app/admin/view/developer/generate/add.html
Normal file
@@ -0,0 +1,477 @@
|
||||
<include file="/public/header" />
|
||||
<!--Developer-->
|
||||
<style>
|
||||
.layui-form-checkbox[lay-skin="primary"] span {
|
||||
padding-right: 13px;
|
||||
}
|
||||
|
||||
@media screen and (max-width: 1200px) {
|
||||
.layui-form-item .layui-input-inline {
|
||||
width: 138px;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
<div class="layui-fluid" style="display: none">
|
||||
<form class="layui-form layui-card">
|
||||
<div class="layui-card-header">基础配置</div>
|
||||
<div class="layui-card-body" style="padding-bottom:100px;">
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">{:__('数据库表')}</label>
|
||||
<div class="layui-input-inline">
|
||||
<select id="table" name="table" lay-verify="required" <notempty name="$data['table']"> disabled </notempty>
|
||||
lay-search lay-filter="selectTable" data-type="table" >
|
||||
<option value="">{:__('请选择数据表')}</option>
|
||||
<volist name="$tables" id="vo">
|
||||
<option value="{$vo}" <if condition="$vo eq $data['table']"> selected </if> >{$vo}</option>
|
||||
</volist>
|
||||
</select>
|
||||
</div>
|
||||
<label class="layui-form-label">{:__('所属插件')}</label>
|
||||
<div class="layui-input-inline">
|
||||
<select name="plugin">
|
||||
<option value="">{:__('请选择开发的插件')}</option>
|
||||
<volist name="pluginList" id="vo">
|
||||
<option value="{$vo.name}" <if condition="$vo['name'] eq $data['plugin']"> selected </if>
|
||||
>{$vo.title}</option>
|
||||
</volist>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">
|
||||
<font color="red">* </font>{:__('菜单名称')}
|
||||
</label>
|
||||
<div class="layui-input-inline">
|
||||
<input name="title" type="text" class="layui-input" lay-verify="required"
|
||||
placeholder="{:__('请输入菜单名称')}">
|
||||
</div>
|
||||
<label class="layui-form-label">{:__('顶级菜单')}</label>
|
||||
<div class="layui-input-inline">
|
||||
<select name="pid">
|
||||
<option value="">{:__('请选择顶级菜单')}</option>
|
||||
<php>
|
||||
$where['pid'] = 0;
|
||||
$rules = \think\facade\Db::name('admin_rules')->where($where)->select();
|
||||
</php>
|
||||
<volist name="$rules" id="vo">
|
||||
<option value="{$vo.id}" <if condition="$vo['id'] eq $data['pid']"> selected </if>
|
||||
>{$vo.title}</option>
|
||||
</volist>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">
|
||||
<span style="color: red; ">* </span>{:__('控制器路径')}
|
||||
</label>
|
||||
<div class="layui-input-inline">
|
||||
<input name="controller" id="controller" lay-verify="required" type="text" class="layui-input"
|
||||
placeholder="{:__('请输入控制器路径')}">
|
||||
</div>
|
||||
<label class="layui-form-label">
|
||||
<span style="color: red; ">* </span>{:__('菜单图标')}
|
||||
</label>
|
||||
<div class="layui-input-inline">
|
||||
<input name="icon" type="text" id="iconPicker" class="layui-input"
|
||||
placeholder="{:__('layui-icon-app')}">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">
|
||||
<span style="color: red; ">* </span>{:__('其他选项')}
|
||||
</label>
|
||||
<div class="layui-input-block" style="position:relative;">
|
||||
<input type="checkbox" lay-skin="primary" name="create" title="生成菜单" value="1">
|
||||
<input type="checkbox" lay-skin="primary" name="auth" title="菜单鉴权" value="1">
|
||||
<input type="checkbox" lay-skin="primary" name="force" title="强制覆盖" value="1">
|
||||
<input type="checkbox" lay-skin="primary" name="global" title="全局模型类" value="1">
|
||||
<i class="layui-icon layui-icon-tips" style="position:absolute; top:4px;"
|
||||
lay-tips="默认模型生成在app/admin/model目录下<br>* 选中后模型将会生成在app/common/model目录下" data-offset="1"></i>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">{:__('列表字段')}</label>
|
||||
<div class="layui-input-inline" style="width: 52%;">
|
||||
<div class="listField" name="listField"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">{:__('关联模型')}</label>
|
||||
<div class="layui-input-block">
|
||||
<table class="layui-table" id="relationModel">
|
||||
<thead>
|
||||
<tr>
|
||||
<th lay-data="{field:'table', width:300}">数据模型/表</th>
|
||||
<th lay-data="{field:'style', width:150}">关联方式/HasOne</th>
|
||||
<th lay-data="{field:'foreignKey'}">关联外键/foreignKey</th>
|
||||
<th lay-data="{field:'localKey'}">关联主键/localKey</th>
|
||||
<th lay-data="{field:'Field'}">字段显示/Field</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="relationBody"></tbody>
|
||||
</table>
|
||||
</div>
|
||||
<label class="layui-form-label"></label>
|
||||
<div class="layui-input-inline">
|
||||
<button class="layui-btn layui-btn-sm layui-relation-add" type="button">添加</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">{:__('控制器/功能')}</label>
|
||||
<div class="layui-input-block">
|
||||
<table class="layui-table" lay-filter="parse-table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th lay-data="{field:'name'}">名称</th>
|
||||
<th lay-data="{field:'controller'}">控制器</th>
|
||||
<th lay-data="{field:'route'}">路由</th>
|
||||
<th lay-data="{field:'view'}">视图模板</th>
|
||||
<th lay-data="{field:'type'}">类型</th>
|
||||
<th lay-data="{field:'auth'}">鉴权</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="parse-table">
|
||||
<tr>
|
||||
<td><input type="text" name="menus[title][]" class="layui-input" value="查看"></td>
|
||||
<td><input type="text" name="menus[router][]" data-type="index"
|
||||
class="layui-input change-router"></td>
|
||||
<td><input type="text" name="menus[route][]" disabled
|
||||
class="layui-input layui-disabled"></td>
|
||||
<td><input type="text" name="menus[template][]" class="layui-input"
|
||||
placeholder="{:__('默认')}"></td>
|
||||
<td>
|
||||
<input name="menus[type][]" type="text" hidden value="1">
|
||||
<span class="layui-badge layui-badge-blue ruletype">{:__("按钮")}</span>
|
||||
</td>
|
||||
<td>
|
||||
<input name="menus[auth][]" type="text" hidden value="1">
|
||||
<span class="layui-badge layui-badge-blue ruleauth">{:__("是")}</span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><input type="text" name="menus[title][]" class="layui-input" value="添加"></td>
|
||||
<td><input type="text" name="menus[router][]" data-type="add"
|
||||
class="layui-input change-router"></td>
|
||||
<td><input type="text" name="menus[route][]" disabled
|
||||
class="layui-input layui-disabled"></td>
|
||||
<td><input type="text" name="menus[template][]" class="layui-input"
|
||||
placeholder="{:__('默认')}"></td>
|
||||
<td>
|
||||
<input name="menus[type][]" type="text" hidden value="1">
|
||||
<span class="layui-badge layui-badge-blue ruletype">{:__("按钮")}</span>
|
||||
</td>
|
||||
<td>
|
||||
<input name="menus[auth][]" type="text" hidden value="1">
|
||||
<span class="layui-badge layui-badge-blue ruleauth">{:__("是")}</span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><input type="text" name="menus[title][]" class="layui-input" value="编辑"></td>
|
||||
<td><input type="text" name="menus[router][]" data-type="edit"
|
||||
class="layui-input change-router"></td>
|
||||
<td><input type="text" name="menus[route][]" disabled
|
||||
class="layui-input layui-disabled"></td>
|
||||
<td><input type="text" name="menus[template][]" class="layui-input"
|
||||
placeholder="{:__('默认')}"></td>
|
||||
<td>
|
||||
<input name="menus[type][]" type="text" hidden value="1">
|
||||
<span class="layui-badge layui-badge-blue ruletype">{:__("按钮")}</span>
|
||||
</td>
|
||||
<td>
|
||||
<input name="menus[auth][]" type="text" hidden value="1">
|
||||
<span class="layui-badge layui-badge-blue ruleauth">{:__("是")}</span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><input type="text" name="menus[title][]" class="layui-input" value="删除"></td>
|
||||
<td><input type="text" name="menus[router][]" data-type="del"
|
||||
class="layui-input change-router"></td>
|
||||
<td><input type="text" name="menus[route][]" disabled
|
||||
class="layui-input layui-disabled"></td>
|
||||
<td><input type="text" name="menus[template][]" class="layui-input"
|
||||
placeholder="{:__('默认')}"></td>
|
||||
<td>
|
||||
<input name="menus[type][]" type="text" hidden value="2">
|
||||
<span class="layui-badge layui-badge-green ruletype">{:__("接口")}</span>
|
||||
</td>
|
||||
<td>
|
||||
<input name="menus[auth][]" type="text" hidden value="1">
|
||||
<span class="layui-badge layui-badge-blue ruleauth">{:__("是")}</span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><input type="text" name="menus[title][]" class="layui-input" value="状态"></td>
|
||||
<td><input type="text" name="menus[router][]" data-type="status"
|
||||
class="layui-input change-router"></td>
|
||||
<td><input type="text" name="menus[route][]" disabled
|
||||
class="layui-input layui-disabled"></td>
|
||||
<td><input type="text" name="menus[template][]" class="layui-input"
|
||||
placeholder="{:__('默认')}"></td>
|
||||
<td>
|
||||
<input name="menus[type][]" type="text" hidden value="2">
|
||||
<span class="layui-badge layui-badge-green ruletype">{:__("接口")}</span>
|
||||
</td>
|
||||
<td>
|
||||
<input name="menus[auth][]" type="text" hidden value="1">
|
||||
<span class="layui-badge layui-badge-blue ruleauth">{:__("是")}</span>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-footer layui-form-footer">
|
||||
<button class="layui-btn layui-btn-primary" type="button" sa-event="closeDialog">{:__('取消')}</button>
|
||||
<button class="layui-btn" lay-filter="submitIframe" type="button" lay-submit>{:__('提交')}</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<script type="text/html" id="relationHtml">
|
||||
<tr>
|
||||
<td>
|
||||
<div class="layui-input-inline" >
|
||||
<select name="relation_table[]" lay-filter="relationTable" lay-verify="required">
|
||||
<option value="">{:__('请选择数据表')}</option>
|
||||
<volist name="$tables" id="vo">
|
||||
<option value="{$vo}" >{$vo}</option>
|
||||
</volist>
|
||||
</select>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="layui-input-inline" >
|
||||
<select name="relation_style[]" lay-verify="required" >
|
||||
<option value="">{:__('请选择关联方式')}</option>
|
||||
<option value="hasOne">hasOne</option>
|
||||
<option value="hasMany">hasMany</option>
|
||||
</select>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="layui-input-inline" >
|
||||
<select name="foreignKey[]" class="foreignKey" lay-verify="required" >
|
||||
<option value="">{:__('请选择关联外键')}</option>
|
||||
</select>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="layui-input-inline" >
|
||||
<select name="localKey[]" class="localKey" lay-verify="required" >
|
||||
<option value="">{:__('请选择关联主键')}</option>
|
||||
</select>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="layui-input-inline" >
|
||||
<!-- // 隐藏关联字段表单 -->
|
||||
<div class="relationField"></div>
|
||||
</div>
|
||||
<span class="layui-relation-delete"><i class="layui-icon layui-icon-close"></i></span>
|
||||
</td>
|
||||
</tr>
|
||||
</script>
|
||||
|
||||
<include file="/public/static" />
|
||||
<include file="/public/footer" />
|
||||
|
||||
<script>
|
||||
layui.use(['form', 'jquery', 'admin', 'iconPicker'], function () {
|
||||
let form = layui.form;
|
||||
let $ = layui.jquery;
|
||||
let admin = layui.admin;
|
||||
let iconPicker = layui.iconPicker;
|
||||
let localFields = [];
|
||||
let fieldUrl = "{:url('/developer/Generate/queryFields')}";
|
||||
|
||||
form.on('select(selectTable)', function (data) {
|
||||
var route = data.value.split('_').slice(1).join('_');
|
||||
localFields = admin.event.ajax(fieldUrl, { table: route });
|
||||
route = route.substring(0,1).toUpperCase() + route.substring(1);
|
||||
route = route.replace(/\_(\w)/g, (_, letter) => letter.toUpperCase());
|
||||
var controller = '/' + route + '/';
|
||||
syncChengeController(controller);
|
||||
$('#controller').val(controller + 'index');
|
||||
// 重载字段
|
||||
$('.localKey').each(function (key, elem) {
|
||||
$(elem).empty();
|
||||
$(elem).append(new Option('请选择关联主键', ''));
|
||||
for (let index = 0; index < localFields.length; index++) {
|
||||
const element = localFields[index];
|
||||
$(elem).append(new Option(element.value, element.value));
|
||||
}
|
||||
});
|
||||
|
||||
form.render();
|
||||
xmRender('.listField', 'listField', localFields);
|
||||
})
|
||||
|
||||
// 改变控制器
|
||||
$('#controller').keyup(function (elem) {
|
||||
syncChengeController($(this).val().substring(0, $(this).val().lastIndexOf('/') + 1));
|
||||
})
|
||||
|
||||
var syncChengeController = function (route = null) {
|
||||
$('.change-router').each(function (index, elem) {
|
||||
var type = $(elem).data('type');
|
||||
var router = route + type;
|
||||
$(elem).val(router);
|
||||
$(elem).parent('td').next().find('input').val(router.substring(1).replaceAll('/', ':'));
|
||||
})
|
||||
}
|
||||
|
||||
$('.change-router').keyup(function(e) {
|
||||
var route = $(this).val().substring(1).replace('/', ':');
|
||||
$(this).parent('td').next().find('input').val(route);
|
||||
})
|
||||
|
||||
// 渲染字段显示
|
||||
var xmRender = function (elem, name = 'listField', field = [], init = []) {
|
||||
xmSelect.render({
|
||||
el: elem,
|
||||
name: name,
|
||||
theme: {
|
||||
color: '#1890ff',
|
||||
},
|
||||
data: field,
|
||||
initValue: init
|
||||
})
|
||||
}
|
||||
|
||||
// 增加关联选项
|
||||
$('.layui-relation-add').click(function (params) {
|
||||
var html = $('#relationHtml').html();
|
||||
$('#relationBody').append(html);
|
||||
form.render();
|
||||
})
|
||||
|
||||
// 关联表操作
|
||||
form.on('select(relationTable)', function (data) {
|
||||
var index = $(this).parents('tr').index();
|
||||
var xm_obj = $('.relationField:eq(' + index + ')');
|
||||
var foreignElem = $('.foreignKey:eq(' + index + ')');
|
||||
var localElem = $('.localKey:eq(' + index + ')');
|
||||
var route = data.value.split('_').slice(1).join('_');
|
||||
var foreignfiled = admin.event.ajax(fieldUrl, { table: route }, false);
|
||||
|
||||
console.log(foreignfiled);
|
||||
|
||||
// 重载关联外键
|
||||
foreignElem.empty();
|
||||
foreignElem.append(new Option('请选择关联外键', ''));
|
||||
for (let index = 0; index < foreignfiled.length; index++) {
|
||||
const element = foreignfiled[index];
|
||||
foreignElem.append(new Option(element.value, element.value));
|
||||
}
|
||||
|
||||
// 重载关联主键
|
||||
localElem.empty();
|
||||
localElem.append(new Option('请选择关联主键', ''));
|
||||
for (let index = 0; index < localFields.length; index++) {
|
||||
const element = localFields[index];
|
||||
localElem.append(new Option(element.value, element.value));
|
||||
}
|
||||
|
||||
form.render();
|
||||
multi_xml_func(index, foreignfiled, xm_obj);
|
||||
})
|
||||
|
||||
// 管理XM对象集合
|
||||
var xm_tree = [];
|
||||
var multi_xml_func = function (index, field, xm_obj, init = []) {
|
||||
if (xm_tree[index] !== undefined) {
|
||||
xm_tree[index].update({ data: field });
|
||||
} else {
|
||||
xm_tree[index] = xmSelect.render({
|
||||
el: xm_obj[0],
|
||||
name: 'relationField[' + index + ']',
|
||||
theme: {
|
||||
color: '#1890ff',
|
||||
},
|
||||
data: field,
|
||||
initValue: init,
|
||||
on: function (data) {
|
||||
let f = [];
|
||||
data.arr.forEach(v => {
|
||||
f.push(v.value);
|
||||
});
|
||||
xm_obj.prev().val(f.join());
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
// 删除关联元素
|
||||
$('body').on('click', '.layui-relation-delete i', function (elem) {
|
||||
if ($('#relationModel tbody tr').length) {
|
||||
$(this).parents('tr').remove();
|
||||
}
|
||||
})
|
||||
|
||||
// 修改鉴权操作
|
||||
$('.ruleauth').click(function (e) {
|
||||
var that = $(this), prev = that.prev();
|
||||
var val = prev.val();
|
||||
if (val >= 1) {
|
||||
that.addClass('layui-badge-red').text('否');
|
||||
} else {
|
||||
that.removeClass('layui-badge-red').text('是');
|
||||
}
|
||||
val >= 1 ? prev.val(0) : prev.val(1);
|
||||
})
|
||||
|
||||
// 切换类型
|
||||
$('.ruletype').click(function (e) {
|
||||
var that = $(this), prev = that.prev(),
|
||||
arr = {
|
||||
1: {
|
||||
value: '1',
|
||||
title: '按钮',
|
||||
class: 'layui-badge-blue'
|
||||
},
|
||||
2: {
|
||||
value: '2',
|
||||
title: '接口',
|
||||
class: 'layui-badge-green'
|
||||
},
|
||||
3: {
|
||||
value: '3',
|
||||
title: '系统',
|
||||
class: 'layui-badge-red'
|
||||
}
|
||||
};
|
||||
var val = Number(prev.val()) + 1;
|
||||
|
||||
if (val > 3) {
|
||||
val = 1;
|
||||
}
|
||||
$(that).prop('class', 'layui-badge');
|
||||
$(that).addClass(arr[val].class);
|
||||
$(that).text(arr[val].title);
|
||||
$(prev).val(arr[val].value);
|
||||
})
|
||||
|
||||
// 图标选择
|
||||
iconPicker.render({
|
||||
elem: '#iconPicker',
|
||||
type: 'fontClass',
|
||||
search: true,
|
||||
cellWidth: "14%",
|
||||
page: true,
|
||||
limit: 20,
|
||||
click: function (data) {
|
||||
$('#iconPicker').val(data.icon);
|
||||
},
|
||||
success: function (d) { }
|
||||
});
|
||||
|
||||
// 初始化元素
|
||||
xmRender('.listField');
|
||||
$('.layui-fluid').show();
|
||||
})
|
||||
</script>
|
||||
486
app/admin/view/developer/generate/edit.html
Normal file
486
app/admin/view/developer/generate/edit.html
Normal file
@@ -0,0 +1,486 @@
|
||||
<include file="/public/header" />
|
||||
<!--Developer-->
|
||||
<style>
|
||||
.layui-form-checkbox[lay-skin="primary"] span {
|
||||
padding-right: 13px;
|
||||
}
|
||||
|
||||
@media screen and (max-width: 1200px) {
|
||||
.layui-form-item .layui-input-inline {
|
||||
width: 138px;
|
||||
}
|
||||
}
|
||||
|
||||
</style>
|
||||
<div class="layui-fluid" style="display: none">
|
||||
<form class="layui-form layui-card">
|
||||
<div class="layui-card-header">基础配置</div>
|
||||
<div class="layui-card-body" style="padding-bottom:100px;">
|
||||
<input type="text" id="id" name="id" value="{$data.id}" hidden="">
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">{:__('数据库表')}</label>
|
||||
<div class="layui-input-inline">
|
||||
<select id="table" name="table" lay-verify="required" <notempty name="$data['table']"> disabled</notempty> lay-search lay-filter="selectTable" data-type="table" >
|
||||
<option value="">{:__('请选择数据表')}</option>
|
||||
<volist name="tables" id="vo">
|
||||
<option value="{$vo}" <if condition="$vo eq $data['table']"> selected </if> >{$vo}</option>
|
||||
</volist>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<label class="layui-form-label">{:__('所属插件')}</label>
|
||||
<div class="layui-input-inline">
|
||||
<select name="plugin">
|
||||
<option value="">{:__('请选择开发的插件')}</option>
|
||||
<volist name="pluginList" id="vo">
|
||||
<option value="{$vo.name}" <if condition="$vo['name'] eq $data['plugin']"> selected </if>
|
||||
>{$vo.title}</option>
|
||||
</volist>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">
|
||||
<font color="red">* </font>{:__('菜单名称')}
|
||||
</label>
|
||||
<div class="layui-input-inline">
|
||||
<input name="title" type="text" class="layui-input" lay-verify="required" value="{$data.title}"
|
||||
placeholder="{:__('请输入菜单名称')}">
|
||||
</div>
|
||||
<label class="layui-form-label">{:__('顶级菜单')}</label>
|
||||
<div class="layui-input-inline">
|
||||
<select name="pid">
|
||||
<option value="">{:__('请选择顶级菜单')}</option>
|
||||
<php>
|
||||
$rules = \think\facade\Db::name('admin_rules')->where('pid',0)->select();
|
||||
</php>
|
||||
<volist name="$rules" id="vo">
|
||||
<option value="{$vo.id}" <if condition="$vo['id'] eq $data['pid']"> selected </if>
|
||||
>{$vo.title}</option>
|
||||
</volist>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">
|
||||
<font color="red">* </font>{:__('控制器路径')}
|
||||
</label>
|
||||
<div class="layui-input-inline">
|
||||
<input name="controller" id="controller" lay-verify="required" type="text"
|
||||
value="{$data.controller}" class="layui-input" placeholder="{:__('请输出控制器路径')}">
|
||||
</div>
|
||||
<label class="layui-form-label">
|
||||
<font color="red">* </font>{:__('菜单图标')}
|
||||
</label>
|
||||
<div class="layui-input-inline">
|
||||
<input name="icon" type="text" id="iconPicker" class="iconPicker layui-input" value="{$data.icon}"
|
||||
placeholder="{:__('layui-icon-app')}">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">
|
||||
<font color="red">* </font>{:__('其他选项')}
|
||||
</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="checkbox" name="create" lay-skin="primary" title="生成菜单" <if
|
||||
condition="($data['create'] == '') OR ($data['create'] == 1)">checked=""</if> value="1">
|
||||
<input type="checkbox" name="auth" lay-skin="primary" title="菜单鉴权" <if
|
||||
condition="($data['auth'] == '') OR ($data['force'] == 1)">checked=""</if> value="1">
|
||||
<input type="checkbox" name="force" lay-skin="primary" title="强制覆盖" <if
|
||||
condition="($data['force'] == '') OR ($data['force'] == 1)">checked=""</if> value="1">
|
||||
<input type="checkbox" name="global" lay-skin="primary" title="全局模型类" <eq name="$data['global']"
|
||||
value="1">checked=""</eq> value="1" >
|
||||
<i class="layui-icon layui-icon-tips" style="position:absolute; top:3px;color: #1890ff;"
|
||||
lay-tips="默认模型生成在app/admin/model目录下<br>* 选中后模型将会生成在app/common/model目录下" data-offset="1"></i>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">{:__('列表字段')}</label>
|
||||
<div class="layui-input-inline" style="width: 52%;">
|
||||
<div class="listField" name="listField"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">{:__('关联模型')}</label>
|
||||
<div class="layui-input-block">
|
||||
<table class="layui-table" id="relationModel">
|
||||
<thead>
|
||||
<tr>
|
||||
<th lay-data="{field:'table', width:300}">数据模型/表</th>
|
||||
<th lay-data="{field:'style', width:150}">关联方式/HasOne</th>
|
||||
<th lay-data="{field:'foreignKey'}">关联外键/foreignKey</th>
|
||||
<th lay-data="{field:'localKey'}">关联主键/localKey</th>
|
||||
<th lay-data="{field:'Field'}">字段显示/Field</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="relationBody">
|
||||
<volist name="$data['relation']" id="rel">
|
||||
<tr>
|
||||
<td>
|
||||
<div class="layui-input-inline">
|
||||
<select name="relation_table[]" multiple lay-filter="relationTable"
|
||||
data-type="relation">
|
||||
<option>{:__('请选择数据表')}</option>
|
||||
<volist name="$tables" id="vo">
|
||||
<option value="{$vo}" <if condition="$vo eq $rel['table']"> selected
|
||||
</if> >{$vo}</option>
|
||||
</volist>
|
||||
</select>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="layui-input-inline">
|
||||
<select name="relation_style[]">
|
||||
<option>{:__('请选择关联方式')}</option>
|
||||
<option value="hasOne" <eq name="$rel['style']" value="hasOne">selected
|
||||
</eq> >hasOne</option>
|
||||
<option value="hasMany" <eq name="$rel['style']" value="hasMany">
|
||||
selected</eq> >hasMany</option>
|
||||
</select>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="layui-input-inline">
|
||||
<php> $fields = \think\facade\Db::getFields($rel['table']);</php>
|
||||
<select name="foreignKey[]" class="foreignKey">
|
||||
<option>{:__('请选择关联外键')}</option>
|
||||
<volist name="$fields" id="field">
|
||||
<option value="{$field.name}" <if
|
||||
condition="$field['name'] eq $rel['foreignKey']"> selected </if>
|
||||
>{$field.name}</option>
|
||||
</volist>
|
||||
</select>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="layui-input-inline">
|
||||
<php> $localFields = \think\facade\Db::getFields($data['table']);</php>
|
||||
<select name="localKey[]" class="localKey">
|
||||
<option>{:__('请选择关联主键')}</option>
|
||||
<volist name="$localFields" id="field">
|
||||
<option value="{$field.name}" <if
|
||||
condition="$field['name'] eq $rel['localKey']"> selected </if>
|
||||
>{$field.name}</option>
|
||||
</volist>
|
||||
</select>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="layui-input-inline">
|
||||
<?php
|
||||
$html = [];
|
||||
foreach ($fields as $key => $value) {
|
||||
$html[] = [
|
||||
'name' => $value['name'],
|
||||
'value' => $value['name']
|
||||
];
|
||||
}
|
||||
?>
|
||||
<div class="relationField"></div>
|
||||
<div class="relationSource layui-hide"><?php echo json_encode($html)?></div>
|
||||
<div class="relationInit layui-hide"><?php echo trim($rel['relationField'])?></div>
|
||||
</div>
|
||||
<span class="layui-relation-delete"><i class="layui-icon layui-icon-close"></i></span>
|
||||
</td>
|
||||
</tr>
|
||||
</volist>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<label class="layui-form-label"></label>
|
||||
<div class="layui-input-inline">
|
||||
<button class="layui-btn layui-btn-sm layui-relation-add" type="button">添加</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">{:__('控制器/功能')}</label>
|
||||
<div class="layui-input-block">
|
||||
<table class="layui-table" lay-filter="parse-table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th lay-data="{field:'name'}">名称</th>
|
||||
<th lay-data="{field:'controller'}">控制器</th>
|
||||
<th lay-data="{field:'route'}">路由</th>
|
||||
<th lay-data="{field:'view'}">视图模板</th>
|
||||
<th lay-data="{field:'type'}">类型</th>
|
||||
<th lay-data="{field:'auth'}">鉴权</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="parse-table">
|
||||
<volist name="$data['menus']" id="rekey">
|
||||
<tr>
|
||||
<td><input type="text" name="menus[title][]" class="layui-input"
|
||||
value="{$rekey.title}"></td>
|
||||
<td>
|
||||
<input type="text" name="menus[router][]" class="layui-input change-router" value="{$rekey.router}">
|
||||
</td>
|
||||
<td><input type="text" name="menus[route][]" disabled
|
||||
class="layui-input layui-disabled" value="{$rekey.route}"></td>
|
||||
<td>
|
||||
<input type="text" name="menus[template][]" class="layui-input"
|
||||
value="{$rekey.template|default='默认'}" placeholder="{:__('默认')}">
|
||||
</td>
|
||||
<td>
|
||||
<input name="menus[type][]" type="text" hidden value="{$rekey.type}">
|
||||
<if condition="$rekey['type'] == 1">
|
||||
<span class="layui-badge layui-badge-blue ruletype">{:__("按钮")}</span>
|
||||
<elseif condition="$rekey['type'] == 2">
|
||||
<span class="layui-badge layui-badge-green ruletype">{:__("接口")}</span>
|
||||
<else />
|
||||
<span class="layui-badge layui-badge-red ruletype">{:__("系统")}</span>
|
||||
</if>
|
||||
</td>
|
||||
<td>
|
||||
<input name="menus[auth][]" type="text" hidden value="{$rekey.auth}">
|
||||
<eq name="$rekey['auth']" value="1">
|
||||
<span class="layui-badge layui-badge-blue ruleauth">{:__("是")}</span>
|
||||
<else />
|
||||
<span class="layui-badge layui-badge-blue ruleauth layui-badge-red">否</span>
|
||||
</eq>
|
||||
</td>
|
||||
</tr>
|
||||
</volist>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-footer layui-form-footer">
|
||||
<button class="layui-btn layui-btn-primary" type="button" sa-event="closeDialog">{:__('取消')}</button>
|
||||
<button class="layui-btn" lay-filter="submitIframe" type="button" lay-submit>{:__('提交')}</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
|
||||
<script type="text/html" id="relationHtml">
|
||||
<tr>
|
||||
<td>
|
||||
<div class="layui-input-inline" >
|
||||
<select name="relation_table[]" lay-filter="relationTable" lay-verify="required">
|
||||
<option value="">{:__('请选择数据表')}</option>
|
||||
<volist name="$tables" id="vo">
|
||||
<option value="{$vo}" >{$vo}</option>
|
||||
</volist>
|
||||
</select>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="layui-input-inline" >
|
||||
<select name="relation_style[]" lay-verify="required" >
|
||||
<option value="">{:__('请选择关联方式')}</option>
|
||||
<option value="hasOne">hasOne</option>
|
||||
<option value="hasMany">hasMany</option>
|
||||
</select>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="layui-input-inline" >
|
||||
<select name="foreignKey[]" class="foreignKey" lay-verify="required" >
|
||||
<option value="">{:__('请选择关联外键')}</option>
|
||||
</select>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="layui-input-inline" >
|
||||
<select name="localKey[]" class="localKey" lay-verify="required" >
|
||||
<option value="">{:__('请选择关联主键')}</option>
|
||||
</select>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="layui-input-inline" >
|
||||
<!-- // 隐藏关联字段表单 -->
|
||||
<div class="relationField"></div>
|
||||
</div>
|
||||
<span class="layui-relation-delete"><i class="layui-icon layui-icon-close"></i></span>
|
||||
</td>
|
||||
</tr>
|
||||
</script>
|
||||
|
||||
<include file="/public/static" />
|
||||
<include file="/public/footer" />
|
||||
|
||||
<script>
|
||||
layui.use(['form', 'jquery', 'admin', 'iconPicker'], function () {
|
||||
var form = layui.form;
|
||||
var $ = layui.jquery;
|
||||
var admin = layui.admin;
|
||||
var iconPicker = layui.iconPicker;
|
||||
var localFields = {$data.localFields|raw};
|
||||
var fieldUrl = "{:url('/developer/Generate/queryFields')}";
|
||||
|
||||
// 渲染字段信息
|
||||
xmSelect.render({
|
||||
el: '.listField',
|
||||
name: 'listField',
|
||||
theme: {
|
||||
color: '#1890ff',
|
||||
},
|
||||
data: localFields,
|
||||
initValue: {$data.listField|raw},
|
||||
})
|
||||
|
||||
// 控制器
|
||||
$('#controller').keyup(function (elem) {
|
||||
syncChengeController($(this).val().substring(0, $(this).val().lastIndexOf('/') + 1));
|
||||
})
|
||||
|
||||
var syncChengeController = function (route = null) {
|
||||
$('.change-router').each(function (index, elem) {
|
||||
var type = $(elem).val().split('/');
|
||||
type = type[type.length-1];
|
||||
var router = route + type;
|
||||
$(elem).val(router);
|
||||
$(elem).parent('td').next().find('input').val(router.substring(1).replaceAll('/', ':'));
|
||||
})
|
||||
}
|
||||
|
||||
$('.change-router').keyup(function(e) {
|
||||
var route = $(this).val().substring(1).replace('/', ':');
|
||||
$(this).parent('td').next().find('input').val(route);
|
||||
})
|
||||
|
||||
// 增加关联选项
|
||||
$('.layui-relation-add').click(function (params) {
|
||||
var html = $('#relationHtml').html();
|
||||
$('#relationBody').append(html);
|
||||
form.render();
|
||||
})
|
||||
|
||||
// 关联表操作
|
||||
form.on('select(relationTable)', function (data) {
|
||||
var index = $(this).parents('tr').index();
|
||||
var xm_obj = $('.relationField:eq(' + index + ')');
|
||||
var foreignElem = $('.foreignKey:eq(' + index + ')');
|
||||
var localElem = $('.localKey:eq(' + index + ')');
|
||||
var route = data.value.split('_').slice(1).join('_');
|
||||
var foreignfiled = admin.event.ajax(fieldUrl, { table: route }, false);
|
||||
|
||||
// 重载关联外键
|
||||
foreignElem.empty();
|
||||
foreignElem.append(new Option('请选择关联外键', ''));
|
||||
for (let index = 0; index < foreignfiled.length; index++) {
|
||||
const element = foreignfiled[index];
|
||||
foreignElem.append(new Option(element.value, element.value));
|
||||
}
|
||||
|
||||
// 重载关联主键
|
||||
localElem.empty();
|
||||
localElem.append(new Option('请选择关联主键', ''));
|
||||
for (let index = 0; index < localFields.length; index++) {
|
||||
const element = localFields[index];
|
||||
localElem.append(new Option(element.value, element.value));
|
||||
}
|
||||
|
||||
form.render();
|
||||
multi_xml_func(index, foreignfiled, xm_obj);
|
||||
})
|
||||
|
||||
// 管理XM对象集合
|
||||
var xm_tree = [];
|
||||
var multi_xml_func = function (index, field, xm_obj, init = []) {
|
||||
if (xm_tree[index] != undefined) {
|
||||
xm_tree[index].update({ data: field, initValue: init });
|
||||
} else {
|
||||
xm_tree[index] = xmSelect.render({
|
||||
el: xm_obj[0],
|
||||
name: 'relationField[' + index + ']',
|
||||
theme: {
|
||||
color: '#1890ff',
|
||||
},
|
||||
data: field,
|
||||
initValue: init,
|
||||
on: function (data) {
|
||||
var f = [];
|
||||
data.arr.forEach(v => {
|
||||
f.push(v.value);
|
||||
});
|
||||
xm_obj.prev().val(f.join());
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
// 删除关联元素
|
||||
$('body').on('click', '.layui-relation-delete i', function (elem) {
|
||||
if ($('#relationModel tbody tr').length) {
|
||||
var elem = $(this).parents('tr'),
|
||||
index = elem.index();
|
||||
elem.remove();
|
||||
xm_tree.splice(index,1);
|
||||
}
|
||||
})
|
||||
|
||||
// 修改鉴权操作
|
||||
$('.ruleauth').click(function (e) {
|
||||
var that = $(this), prev = that.prev();
|
||||
var val = prev.val();
|
||||
if (val >= 1) {
|
||||
that.addClass('layui-badge-red').text('否');
|
||||
} else {
|
||||
that.removeClass('layui-badge-red').text('是');
|
||||
}
|
||||
val >= 1 ? prev.val(0) : prev.val(1);
|
||||
})
|
||||
|
||||
// 切换类型
|
||||
$('.ruletype').click(function (e) {
|
||||
var that = $(this), prev = that.prev(),
|
||||
arr = {
|
||||
1: {
|
||||
value: '1',
|
||||
title: '按钮',
|
||||
class: 'layui-badge-blue'
|
||||
},
|
||||
2: {
|
||||
value: '2',
|
||||
title: '接口',
|
||||
class: 'layui-badge-green'
|
||||
},
|
||||
3: {
|
||||
value: '3',
|
||||
title: '系统',
|
||||
class: 'layui-badge-red'
|
||||
}
|
||||
};
|
||||
var val = Number(prev.val()) + 1;
|
||||
|
||||
if (val > 3) {
|
||||
val = 1;
|
||||
}
|
||||
$(that).prop('class', 'layui-badge');
|
||||
$(that).addClass(arr[val].class);
|
||||
$(that).text(arr[val].title);
|
||||
$(prev).val(arr[val].value);
|
||||
})
|
||||
|
||||
// 图标选择
|
||||
iconPicker.render({
|
||||
elem: '#iconPicker',
|
||||
type: 'fontClass',
|
||||
search: true,
|
||||
cellWidth: "14%",
|
||||
page: true,
|
||||
limit: 20,
|
||||
click: function (data) {
|
||||
$('#iconPicker').val(data.icon);
|
||||
},
|
||||
success: function (d) { }
|
||||
});
|
||||
|
||||
// 初始化循环处理
|
||||
$('.relationField').each(function (i, k) {
|
||||
var allsfield = $(this).next().text();
|
||||
var initfield = $(this).next().next().text();
|
||||
initfield = initfield.replace(/(^\s*)|(\s*$)/g, "").split(',');
|
||||
multi_xml_func(i, JSON.parse(allsfield), $(this), initfield);
|
||||
})
|
||||
|
||||
$('.layui-fluid').show();
|
||||
})
|
||||
</script>
|
||||
264
app/admin/view/developer/generate/form_design.html
Normal file
264
app/admin/view/developer/generate/form_design.html
Normal file
@@ -0,0 +1,264 @@
|
||||
<include file="/public/header" />
|
||||
<!--Developer-->
|
||||
<link href="__STATICADMIN__/module/formDesign/formdesign.css?v={:release()}" rel="stylesheet" type="text/css" />
|
||||
<style>
|
||||
.layui-form-checkbox[lay-skin="primary"] span {
|
||||
padding-right: 13px;
|
||||
}
|
||||
|
||||
@media screen and (max-width: 1900px) {
|
||||
#layui-form-attribute .layui-input-inline {
|
||||
width: 138px;
|
||||
}
|
||||
|
||||
#layui-form-attribute .layui-form-label {
|
||||
padding-left: 0;
|
||||
width: auto!important;
|
||||
}
|
||||
|
||||
.component .component-group ol {
|
||||
min-width: 50px!important;
|
||||
width: 30%!important;
|
||||
}
|
||||
}
|
||||
|
||||
</style>
|
||||
<div class="layui-fluid" >
|
||||
<form class="layui-form layui-card">
|
||||
<input type="text" name="id" value="{$data.id}" hidden="">
|
||||
<div class="layui-card-header">表单设计</div>
|
||||
<div class="layui-card-body" style="padding-bottom:100px;">
|
||||
<div class="layui-row layui-col-space30">
|
||||
<div class="layui-col-md2">
|
||||
<div class="layui-tab layui-tab-brief">
|
||||
<ul class="layui-tab-title">
|
||||
<li class="layui-this">{:__('表单组件')}</li>
|
||||
<li>{:__('表单模板')}</li>
|
||||
</ul>
|
||||
<div class="layui-tab-content" id="layui-form-attribute">
|
||||
<div class="layui-tab-item layui-form layui-show">
|
||||
<div class="component">
|
||||
<div class="head">表单组件</div>
|
||||
<div class="component-group" id="sort_1">
|
||||
<ol data-tag="input">
|
||||
<div class="icon"><i class="layui-icon layui-icon-layer"></i></div>
|
||||
<div class="name">单行输入</div>
|
||||
</ol>
|
||||
<ol data-tag="textarea">
|
||||
<div class="icon"><i class="layui-icon layui-icon-align-left"></i></div>
|
||||
<div class="name">多行输入</div>
|
||||
</ol>
|
||||
<ol data-tag="radio">
|
||||
<div class="icon"><i class="layui-icon layui-icon-radio"></i></div>
|
||||
<div class="name">单选框</div>
|
||||
</ol>
|
||||
<ol data-tag="checkbox">
|
||||
<div class="icon"><i class="layui-icon layui-icon-table"></i></div>
|
||||
<div class="name">多选框</div>
|
||||
</ol>
|
||||
<ol data-tag="select">
|
||||
<div class="icon"><i class="layui-icon layui-icon-print"></i></div>
|
||||
<div class="name">下拉框</div>
|
||||
</ol>
|
||||
<ol data-tag="date">
|
||||
<div class="icon"><i class="layui-icon layui-icon-time"></i></div>
|
||||
<div class="name">日期组件</div>
|
||||
</ol>
|
||||
<ol data-tag="colorpicker">
|
||||
<div class="icon"><i class="layui-icon layui-icon-theme"></i></div>
|
||||
<div class="name">颜色选择器</div>
|
||||
</ol>
|
||||
<ol data-tag="slider">
|
||||
<div class="icon"><i class="layui-icon layui-icon-slider"></i></div>
|
||||
<div class="name">滑块</div>
|
||||
</ol>
|
||||
<ol data-tag="rate">
|
||||
<div class="icon"><i class="layui-icon layui-icon-rate-solid"></i></div>
|
||||
<div class="name">评分</div>
|
||||
</ol>
|
||||
<ol data-tag="switch">
|
||||
<div class="icon"><i class="layui-icon layui-icon-switch">
|
||||
<k></k>
|
||||
</i></div>
|
||||
<div class="name">开关</div>
|
||||
</ol>
|
||||
<ol data-tag="cascader">
|
||||
<div class="icon"><i class="layui-icon layui-icon-cols"></i></div>
|
||||
<div class="name">级联选择器</div>
|
||||
</ol>
|
||||
<ol data-tag="editor">
|
||||
<div class="icon"><i class="layui-icon layui-icon-form"></i></div>
|
||||
<div class="name">富文本</div>
|
||||
</ol>
|
||||
<ol data-tag="upload">
|
||||
<div class="icon"><i class="layui-icon layui-icon-upload"></i></div>
|
||||
<div class="name">文件上传</div>
|
||||
</ol>
|
||||
<ol data-tag="tags">
|
||||
<div class="icon"><i class="layui-icon fa-instagram"></i></div>
|
||||
<div class="name">标签选择器</div>
|
||||
</ol>
|
||||
<ol data-tag="json">
|
||||
<div class="icon"><i class="layui-icon fa-bars"></i></div>
|
||||
<div class="name">JSON组件</div>
|
||||
</ol>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="component">
|
||||
<div class="head">辅助组件</div>
|
||||
<div class="component-group" id="sort_2">
|
||||
<ol data-tag="tips">
|
||||
<div class="icon"><i class="layui-icon layui-icon-tips"></i></div>
|
||||
<div class="name">提示</div>
|
||||
</ol>
|
||||
<ol data-tag="button">
|
||||
<div class="icon"><i class="layui-icon layui-icon-layer"></i></div>
|
||||
<div class="name">按钮</div>
|
||||
</ol>
|
||||
<ol data-tag="note">
|
||||
<div class="icon"><i class="layui-icon layui-icon-note"></i></div>
|
||||
<div class="name">便签</div>
|
||||
</ol>
|
||||
<ol data-tag="subtraction">
|
||||
<div class="icon"><i class="layui-icon layui-icon-subtraction"></i></div>
|
||||
<div class="name">分割线</div>
|
||||
</ol>
|
||||
</div>
|
||||
</div>
|
||||
<div class="component">
|
||||
<div class="head">布局组件</div>
|
||||
<div class="component-group" id="sort_3">
|
||||
<ol data-tag="tab">
|
||||
<div class="icon"><i class="layui-icon layui-icon-tabs smallfont"></i></div>
|
||||
<div class="name">TAB选项卡</div>
|
||||
</ol>
|
||||
<ol data-tag="grid">
|
||||
<div class="icon"><i class="layui-icon layui-icon-layouts"></i></div>
|
||||
<div class="name">栅格</div>
|
||||
</ol>
|
||||
<ol data-tag="space">
|
||||
<div class="icon"><i class="layui-icon layui-icon-more"></i></div>
|
||||
<div class="name">间距</div>
|
||||
</ol>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- // 加载远程表单模板 -->
|
||||
<div id="layui-form-template" class="layui-tab-item">
|
||||
<div id="item-list" class="item-list"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-col-md8">
|
||||
<div class="layui-card-header">
|
||||
<div class="fr">
|
||||
<button type="button" class="layui-btn layui-btn-sm layui-btn-export"><i
|
||||
class="layui-icon layui-icon-export"></i>导出</button>
|
||||
<button type="button" class="layui-btn layui-btn-sm layui-btn-import"><i
|
||||
class="layui-icon layui-icon-layer"></i>导入</button>
|
||||
<button type="button" class="layui-btn layui-btn-sm layui-btn-component"> <i
|
||||
class="layui-icon layui-icon-component"></i> 预览</button>
|
||||
<button type="button" class="layui-btn layui-btn-sm layui-btn-danger layui-form-clear"><i
|
||||
class="layui-icon layui-icon-delete"></i>清空</button>
|
||||
</div>
|
||||
</div>
|
||||
<!-- // 表单设计区域 -->
|
||||
<div id="formBuilder" style="width: 100%"></div>
|
||||
<!-- // 表单隐藏域 -->
|
||||
<textarea id="formDesign" name="formDesign" hidden>{$data.formDesign|default=''}</textarea>
|
||||
</div>
|
||||
<div class="layui-col-md2" style="padding-top: 0;" id="layui-form-attribute">
|
||||
<div class="layui-tab layui-tab-brief">
|
||||
<ul class="layui-tab-title">
|
||||
<li class="layui-this">{:__('组件属性')}</li>
|
||||
<li>{:__('表单属性')}</li>
|
||||
</ul>
|
||||
|
||||
<div class="layui-tab-content" >
|
||||
<div class="layui-tab-item layui-form layui-show" id="Propertie" lay-filter="Propertie">
|
||||
</div>
|
||||
<div class="layui-tab-item">
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">
|
||||
<font color="red">*</font>{:__('表单ID')}
|
||||
</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" id="formName" name="formName" class="layui-input"
|
||||
value="{$data.formName|default='form'}" placeholder="请输入">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">{:__('表单类型')}</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="radio" name="formType" title="弹窗" <eq name="$data['formType']"
|
||||
value="1">checked="" </eq> value="1">
|
||||
<input type="radio" name="formType" title="内置" <eq name="$data['formType']"
|
||||
value="0">checked="" </eq> value="0" >
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">{:__('表单宽高')}</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" id="formWidth" name="width"
|
||||
style="width: 70px;display: inline-block;" class="layui-input"
|
||||
value="{$data.width|default='1100px'}" placeholder="宽度">
|
||||
<em> - </em>
|
||||
<input type="text" id="formHeight" name="height"
|
||||
style="width:70px;display: inline-block;" class="layui-input"
|
||||
value="{$data.height|default='750px'}" placeholder="高度">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-footer layui-form-footer">
|
||||
<button class="layui-btn layui-btn-primary" type="button" sa-event="closeDialog">{:__('取消')}</button>
|
||||
<button class="layui-btn" lay-filter="submitIframe" type="button" lay-submit>{:__('提交')}</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<div class="layui-htmlview" style="display: none;">
|
||||
<textarea id="json-code"></textarea>
|
||||
<div class="layui-htmlbtn">
|
||||
<button id="copy-code" class="layui-btn layui-hide">复制代码</button>
|
||||
<button id="import-code" class="layui-btn layui-hide">导入数据</button>
|
||||
</div>
|
||||
</div>
|
||||
<script src="__STATICJS__Sortable/Sortable.js?v={:release()}"></script>
|
||||
<include file="/public/footer" />
|
||||
<include file="/public/static" />
|
||||
<script>
|
||||
layui.use(['jquery', 'flow', 'formDesign'], function () {
|
||||
let $ = layui.jquery;
|
||||
|
||||
let formDesign = layui.formDesign;
|
||||
formDesign.render({
|
||||
elem: '#formBuilder'
|
||||
, eval: '#formDesign'
|
||||
});
|
||||
|
||||
layui.flow.load({
|
||||
elem: '#item-list'
|
||||
, done: function (page, next) {
|
||||
var list = [];
|
||||
$.get('//api.swiftadmin.net/form/?page=' + page, function (res) {
|
||||
layui.each(res.data, function (index, item) {
|
||||
list.push(item);
|
||||
});
|
||||
next(list.join(''), page < res.total);
|
||||
})
|
||||
}
|
||||
});
|
||||
|
||||
})
|
||||
// 获取字段信息
|
||||
window.tableInfo = {$table|raw};
|
||||
</script>
|
||||
125
app/admin/view/developer/generate/index.html
Normal file
125
app/admin/view/developer/generate/index.html
Normal file
@@ -0,0 +1,125 @@
|
||||
<include file="/public/header" />
|
||||
<!--Developer-->
|
||||
<div class="layui-fluid">
|
||||
<div class="layui-card">
|
||||
<!-- // 默认操作按钮 -->
|
||||
<div class="layui-card-header layadmin-card-header-auto ">
|
||||
<div class="layui-form">
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-inline">
|
||||
|
||||
<select name="status">
|
||||
<option value="">{:__('按状态查询')}</option>
|
||||
<option value="2" >{:__('正常')}</option>
|
||||
<option value="1" >{:__('关闭')}</option>
|
||||
</select>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="layui-inline">
|
||||
<div class="layui-form-label">{:__('名称检索')}</div>
|
||||
<div class="layui-input-inline "><input name="title" class="layui-input" type="text" placeholder="{:__('名称检索')}"/></div>
|
||||
</div>
|
||||
|
||||
<div class="layui-inline" >
|
||||
<!-- // 默认搜索 -->
|
||||
<button class="layui-btn icon-btn" lay-filter="formSearch" lay-submit>
|
||||
<i class="layui-icon layui-icon-search"></i>{:__('搜索')}
|
||||
</button>
|
||||
|
||||
<!-- // 打开添加页面 -->
|
||||
<button class="layui-btn icon-btn" lay-open="" data-area="100%,100%" data-offset="0px" data-maxmin="true" data-url="{:url('/developer/Generate/add')}" >
|
||||
<i class="layui-icon layui-icon-add-1"></i>{:__('添加')}
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- // 创建数据表实例 -->
|
||||
<table id="lay-tableList" lay-filter="lay-tableList"></table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- // 列表工具栏 -->
|
||||
<script type="text/html" id="tableBar">
|
||||
<a class="layui-table-text" data-area="100%,100%" data-offset="0px" data-maxmin="true"
|
||||
data-url="{:url('/developer/Generate/edit')}?id={{d.id}}" lay-event="edit" >{:__('编辑')}</a>
|
||||
<div class="layui-divider layui-divider-vertical"></div>
|
||||
<a class="layui-table-text lay-form-design" data-url="{:url('/developer/Generate/formDesign')}?id={{d.id}}" >{:__('表单')}</a>
|
||||
<div class="layui-divider layui-divider-vertical"></div>
|
||||
<a class="layui-table-text" lay-ajax data-table="lay-tableList" data-url="{:url('/developer/Curd/build')}?id={{d.id}}" data-callback="reloadRouter" >{:__('部署')}</a>
|
||||
<div class="layui-divider layui-divider-vertical"></div>
|
||||
<a class="layui-table-text" lay-ajax data-table="lay-tableList" data-url="{:url('/developer/Curd/clear')}?id={{d.id}}" data-callback="reloadRouter" >{:__('清理')}</a>
|
||||
<div class="layui-divider layui-divider-vertical"></div>
|
||||
<a class="layui-table-text" data-url="{:url('/developer/Generate/del')}?id={{d.id}}" lay-event="del" >{:__('删除')}</a>
|
||||
</script>
|
||||
|
||||
<!-- // 列表按钮工具栏 -->
|
||||
<script type="text/html" id="tableBtn">
|
||||
|
||||
</script>
|
||||
|
||||
<include file="/public/footer" />
|
||||
<script>
|
||||
layui.use(['jquery','layer','admin','table'],function () {
|
||||
|
||||
var table = layui.table;
|
||||
var $ = layui.jquery;
|
||||
var layer = layui.layer;
|
||||
var admin = layui.admin;
|
||||
/*
|
||||
* 初始化表格
|
||||
*/
|
||||
var isTable = table.render({
|
||||
elem: "#lay-tableList"
|
||||
,url: "{:url('/developer/Generate/index')}"
|
||||
,toolbar: '#tableBtn'
|
||||
,loading: false
|
||||
,defaultToolbar: ['filter', 'exports', 'print','search']
|
||||
,page: true
|
||||
,limit: 18
|
||||
,cols: [[
|
||||
{type: 'checkbox', width:50},
|
||||
{field: 'id', align: 'center',sort: true,width: 80, title: 'ID'},
|
||||
{field: 'title', align: 'left', title: '{:__("名称")}'},
|
||||
{field: 'table', align: 'center',title: '{:__("数据库表")}'},
|
||||
{field: 'controller', align: 'center',title: '{:__("控制器")}'},
|
||||
{field: 'status', align: 'center',width:180, templet: function(d) {
|
||||
var status = ['<span class="layui-badge layui-bg-gray">未生成</span>','<span class="layui-badge layui-bg-red">已生成</span>'];
|
||||
return status[d.status];
|
||||
}, title: '{:__("状态")}'},
|
||||
{field: 'update_time', align: 'center',title: '{:__("更新时间")}'},
|
||||
{field: 'create_time', align: 'center',title: '{:__("创建时间")}'},
|
||||
{align: 'center', toolbar: '#tableBar', width:330, title: '{:__("操作")}'},
|
||||
]]
|
||||
})
|
||||
|
||||
/**
|
||||
* Ajax重载函数
|
||||
* @type {{success: layui.admin.callback.reloadRouter.success, error: layui.admin.callback.reloadRouter.error}}
|
||||
*/
|
||||
admin.callback.reloadRouter = {
|
||||
success: function (res) {
|
||||
layer.msg(res.msg);
|
||||
table.reload('lay-tableList');
|
||||
top.layui.admin.reloadLayout();
|
||||
}
|
||||
,error: function (res) {
|
||||
layer.error(res.msg);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 设计FORM表单
|
||||
*/
|
||||
$('body').on('click','.lay-form-design',function(params) {
|
||||
top.layer.open({
|
||||
type:2,
|
||||
title: '',
|
||||
area: ['100%','100%'],
|
||||
content: [$(this).data('url')]
|
||||
})
|
||||
})
|
||||
})
|
||||
</script>
|
||||
Reference in New Issue
Block a user