|
|
<!DOCTYPE html>
|
|
|
<html>
|
|
|
<head>
|
|
|
<meta charset="UTF-8">
|
|
|
<title>东师理想微服务架构代码生成器</title>
|
|
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
|
|
|
<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.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
|
|
|
<link rel="stylesheet" href="./static/css/font.css">
|
|
|
<link rel="stylesheet" href="./static/css/weadmin.css">
|
|
|
<link rel="stylesheet" href="./layui/css/layui.css">
|
|
|
<!-- 让IE8/9支持媒体查询,从而兼容栅格 -->
|
|
|
<!--[if lt IE 9]>
|
|
|
<script src="https://cdn.staticfile.org/html5shiv/r29/html5.min.js"></script>
|
|
|
<script src="https://cdn.staticfile.org/respond.js/1.4.2/respond.min.js"></script>
|
|
|
<![endif]-->
|
|
|
<style>
|
|
|
select {
|
|
|
width: 180px;
|
|
|
height: 38px;
|
|
|
line-height: 38px;
|
|
|
border: 1px solid #ccc;
|
|
|
border-radius: 3px;
|
|
|
font-size: 15px;
|
|
|
padding-left: 6px;
|
|
|
color: #666;
|
|
|
}
|
|
|
|
|
|
.inline {
|
|
|
display: inline-block;
|
|
|
vertical-align: top;
|
|
|
}
|
|
|
|
|
|
ul.log li {
|
|
|
color: #666666;
|
|
|
list-style: none;
|
|
|
padding-left: 10px;
|
|
|
}
|
|
|
</style>
|
|
|
</head>
|
|
|
<body>
|
|
|
<form class="layui-form">
|
|
|
<div class="weadmin-body">
|
|
|
<div class="layui-inline">
|
|
|
<label class="layui-form-label">接口名称</label>
|
|
|
<div class="layui-input-inline">
|
|
|
<div class="layui-input-inline" id="select_1" style="width: 180px"></div>
|
|
|
<script type="text/html" id="test1">
|
|
|
<select name="modules" id="sel1" lay-verify="required" lay-search="" lay-filter="changeInterface">
|
|
|
<option value="">直接选择或搜索选择</option>
|
|
|
<% for (var i = 0; i < data.length; i ++) { %>
|
|
|
<option value="<%=data[i].interface_id%>"><%=data[i].interface_name%></option>
|
|
|
<% } %>
|
|
|
</select>
|
|
|
</script>
|
|
|
</div>
|
|
|
</div>
|
|
|
|
|
|
<div class="layui-form-item inline">
|
|
|
<label class="layui-form-label">开发者</label>
|
|
|
</div>
|
|
|
<div class="layui-form-item inline">
|
|
|
<div class="layui-input-inline" id="select_5" style="width: 120px"></div>
|
|
|
<script type="text/html" id="test5">
|
|
|
<select name="service_type" id="sel5" lay-verify="required" lay-search="" lay-filter="changeSelect">
|
|
|
<% for (var i = 0; i < data.length; i ++) { %>
|
|
|
<option value="<%=data[i].person_id%>"><%=data[i].person_name%></option>
|
|
|
<% } %>
|
|
|
</select>
|
|
|
</script>
|
|
|
</div>
|
|
|
</div>
|
|
|
<div class="layui-form-item inline" style="float:right">
|
|
|
<span id="importAcc">
|
|
|
<div class="layui-btn" type="button" id="syncData" onclick="syncData(2);">
|
|
|
<span class="layui-icon layui-icon-shrink-right"></span>同步最新配置信息
|
|
|
</div>
|
|
|
</span>
|
|
|
</div>
|
|
|
<div>温馨提示:下面表格中存在灰色行,且没有生成Controller层代码按钮,是因为在swagger中没有正确配置此接口,请检查swaager。
|
|
|
</div>
|
|
|
<div class="layui-form-item">
|
|
|
<table class="layui-table" lay-filter="idTest" id="idTest"></table>
|
|
|
<script type="text/html" id="barDemo">
|
|
|
<a class="layui-btn layui-btn-xs layui-btn-primary" lay-event="ControllerFramework">Controller骨架</a>
|
|
|
{{#if(d.count>0){ }}
|
|
|
<a class="layui-btn layui-btn-xs" lay-event="Controller">Controller</a>
|
|
|
{{#} }}
|
|
|
<a class="layui-btn layui-btn-xs layui-btn-danger" lay-event="Service">Service</a>
|
|
|
<a class="layui-btn layui-btn-xs layui-btn-normal" lay-event="RpcService">RpcService</a>
|
|
|
<a class="layui-btn layui-btn-xs layui-btn-warm" lay-event="Dao">Dao</a>
|
|
|
<a class="layui-btn layui-btn-xs" lay-event="WEB">WEB层创建</a>
|
|
|
<a class="layui-btn layui-btn-xs layui-btn-primary" lay-event="RPC">RPC层创建</a>
|
|
|
</script>
|
|
|
</div>
|
|
|
</div>
|
|
|
</form>
|
|
|
<script src="./layui/layui.js"></script>
|
|
|
<script src="./lib/template.js"></script>
|
|
|
<script src="./lib/base64.js"></script>
|
|
|
<script src="./lib/JqueryExtend.js"></script>
|
|
|
<script>
|
|
|
layui.extend({
|
|
|
admin: '{/}./static/js/admin'
|
|
|
});
|
|
|
layui.use(['form', 'jquery', 'laytpl', 'admin', 'layer', 'table'], function () {
|
|
|
var form = layui.form,
|
|
|
$ = layui.jquery,
|
|
|
admin = layui.admin,
|
|
|
layer = layui.layer,
|
|
|
table = layui.table,
|
|
|
laytpl = layui.laytpl;
|
|
|
|
|
|
//更换select
|
|
|
form.on('select(changeSelect)', function (data) {
|
|
|
// 将用户的选择保存到cookie中,时间为30天
|
|
|
setCookie('author_id', $("#sel5").val());
|
|
|
});
|
|
|
//接口切换
|
|
|
form.on('select(changeInterface)', function (data) {
|
|
|
bindProtoFile()
|
|
|
});
|
|
|
|
|
|
//绑定研发人员下拉框
|
|
|
function bindPerson() {
|
|
|
$.ajax({
|
|
|
type: "GET",
|
|
|
dataType: "json",
|
|
|
async: false,
|
|
|
url: "/proto/proto/ListPerson",
|
|
|
success: function (data) {
|
|
|
var html = template.render('test5', data);
|
|
|
document.getElementById('select_5').innerHTML = html;
|
|
|
form.render();
|
|
|
//设置cookie中的值,以保存记录属性
|
|
|
var author_id = getCookie('author_id');
|
|
|
if (author_id != null) {
|
|
|
$("#sel5").val(author_id);
|
|
|
form.render();
|
|
|
}
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
|
|
|
bindPerson();
|
|
|
|
|
|
window.syncData = function (t) {
|
|
|
var message = "";
|
|
|
if (t == 1) {
|
|
|
message = "系统检测到配置文件有更新,已经为您同步到最新版本!"
|
|
|
}
|
|
|
if (t == 2) {
|
|
|
message = "手动同步成功!"
|
|
|
}
|
|
|
//1、调用ajax提交同步要求
|
|
|
$.ajax({
|
|
|
type: "GET",
|
|
|
dataType: "json",
|
|
|
async: false,
|
|
|
url: "/init/sync/SyncData",
|
|
|
success: function (data) {
|
|
|
layer.msg(message, {icon: 1, time: 1000, shade: [0.5, '#000', true]}, function () {
|
|
|
var index = layer.getFrameIndex(window.name);
|
|
|
layer.close(index);
|
|
|
//刷新
|
|
|
bindProtoFile();
|
|
|
});
|
|
|
}
|
|
|
});
|
|
|
};
|
|
|
|
|
|
//绑定下拉框
|
|
|
window.BindInterfaceList = function () {
|
|
|
$.ajax({
|
|
|
type: "GET",
|
|
|
async: false,
|
|
|
dataType: "json",
|
|
|
url: "/proto/proto/BindInterfaceList",
|
|
|
success: function (data) {
|
|
|
console.log(data);
|
|
|
var html = template.render('test1', data);
|
|
|
document.getElementById('select_1').innerHTML = html;
|
|
|
form.render();
|
|
|
}
|
|
|
})
|
|
|
}
|
|
|
BindInterfaceList();
|
|
|
|
|
|
// 绑定有哪些proto文件
|
|
|
window.bindProtoFile = function () {
|
|
|
var interfaceId = $("#sel1").val();
|
|
|
if (interfaceId.length == 0) {
|
|
|
interfaceId = "0"
|
|
|
}
|
|
|
table.render({
|
|
|
elem: '#idTest',
|
|
|
url: '/proto/proto/ListProto?interfaceId=' + interfaceId,
|
|
|
cols: [[
|
|
|
{field: 'interface_id', title: '序号', align: 'center', type: 'numbers', width: 80}
|
|
|
, {field: 'file_name', title: '文件名称', align: 'center'}
|
|
|
, {field: 'interface_name', title: '接口名称', align: 'center'}
|
|
|
, {
|
|
|
field: 'struct_name', title: '参数名称', align: 'center',
|
|
|
templet: function (d) {
|
|
|
var str = '<a href="#" class="layui-table-link" onclick=\'showStructInfo(' + d["struct_id"] + ',\"' + d["struct_name"] + '\")\'>' + d["struct_name"] + '</a>';
|
|
|
return str;
|
|
|
}
|
|
|
}
|
|
|
, {fixed: 'right', title: '操作', toolbar: '#barDemo', align: 'center', width: 700}
|
|
|
]]
|
|
|
, limit: 30//要传向后台的每页显示条数
|
|
|
, page: true
|
|
|
, height: 'full'
|
|
|
, done: function (res, curr, count) {
|
|
|
//合并
|
|
|
merge(res);
|
|
|
//如果没有进行正确的swagger配置,将变色
|
|
|
for (var i in res.data) { //遍历整个表格数据
|
|
|
var item = res.data[i]; //获取当前行数据
|
|
|
if (item.count == 0) {
|
|
|
$("tr[data-index='" + i + "']").attr({"style": "background:#e2e2e2"});
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
});
|
|
|
};
|
|
|
//绑定Proto文件
|
|
|
bindProtoFile();
|
|
|
|
|
|
//显示结构体的属性信息
|
|
|
window.showStructInfo = function (struct_id, struct_name) {
|
|
|
$.ajax({
|
|
|
type: "GET",
|
|
|
dataType: "json",
|
|
|
async: false,
|
|
|
url: "/proto/proto/GetParameterStructInfo?struct_id=" + struct_id,
|
|
|
success: function (data) {
|
|
|
var str = "";
|
|
|
for (var i = 0; i < data["data"].length; i++) {
|
|
|
str = str + "参数名:" + data["data"][i]["struct_parameter_name"] + ",参数类型:" + data["data"][i]["struct_parameter_type"] + "<br>";
|
|
|
}
|
|
|
layer.alert(str, {
|
|
|
title: struct_name,
|
|
|
skin: 'layui-layer-lan'
|
|
|
, closeBtn: 0
|
|
|
, anim: 4 //动画类型
|
|
|
});
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
|
|
|
//合并行
|
|
|
function merge(res) {
|
|
|
var data = res.data;
|
|
|
var mergeIndex = 0;//定位需要添加合并属性的行数
|
|
|
var mark = 1; //这里涉及到简单的运算,mark是计算每次需要合并的格子数
|
|
|
var columsName = ['file_name'];//需要合并的列名称
|
|
|
var columsIndex = [1];//需要合并的列索引值
|
|
|
for (var k = 0; k < columsName.length; k++) { //这里循环所有要合并的列
|
|
|
var trArr = $(".layui-table-body>.layui-table").find("tr");//所有行
|
|
|
for (var i = 1; i < res.data.length; i++) { //这里循环表格当前的数据
|
|
|
var tdCurArr = trArr.eq(i).find("td").eq(columsIndex[k]);//获取当前行的当前列
|
|
|
var tdPreArr = trArr.eq(mergeIndex).find("td").eq(columsIndex[k]);//获取相同列的第一列
|
|
|
// 合并遵守行一列的限制
|
|
|
if (data[i][columsName[k]] === data[i - 1][columsName[k]] && data[i]['first_level_module_name'] === data[i - 1]['first_level_module_name']) {
|
|
|
//后一行的值与前一行的值做比较,相同就需要合并
|
|
|
mark += 1;
|
|
|
tdPreArr.each(function () {//相同列的第一列增加rowspan属性
|
|
|
$(this).attr("rowspan", mark);
|
|
|
});
|
|
|
tdCurArr.each(function () {//当前行隐藏
|
|
|
$(this).css("display", "none");
|
|
|
});
|
|
|
} else {
|
|
|
mergeIndex = i;
|
|
|
mark = 1;//一旦前后两行的值不一样了,那么需要合并的格子数mark就需要重新计算
|
|
|
}
|
|
|
}
|
|
|
mergeIndex = 0;
|
|
|
mark = 1;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
table.on('tool(idTest)', function (obj) {
|
|
|
var data = obj.data;
|
|
|
var author_id = $("#sel5").val();
|
|
|
|
|
|
if (obj.event === 'ControllerFramework') {
|
|
|
WeAdminShow("正在查看" + data["interface_name"] + '的ControllerFramework层代码', './showCode.html?interfaceId=' + data["interface_id"] + "&interfaceName=" + data["interface_name"] + "&type=ControllerFramework", 960, 450);
|
|
|
}
|
|
|
|
|
|
if (obj.event === 'Controller') {
|
|
|
WeAdminShow("正在查看" + data["interface_name"] + '的Controller层代码', './showCode.html?interfaceId=' + data["interface_id"] + "&interfaceName=" + data["interface_name"] + "&type=Controller", 960, 450);
|
|
|
}
|
|
|
if (obj.event === 'Service') {
|
|
|
WeAdminShow("正在查看" + data["interface_name"] + '的Service层代码', './showCode.html?interfaceId=' + data["interface_id"] + "&interfaceName=" + data["interface_name"] + "&type=Service&author_id=" + author_id, 960, 450);
|
|
|
}
|
|
|
if (obj.event === 'RpcService') {
|
|
|
WeAdminShow("正在查看" + data["interface_name"] + '的RpcService层代码', './showCode.html?interfaceId=' + data["interface_id"] + "&interfaceName=" + data["interface_name"] + "&type=RpcService&author_id=" + author_id, 960, 450);
|
|
|
}
|
|
|
if (obj.event === 'Dao') {
|
|
|
WeAdminShow("正在查看" + data["interface_name"] + '的Dao层代码', './showCode.html?interfaceId=' + data["interface_id"] + "&interfaceName=" + data["interface_name"] + "&type=Dao&author_id=" + author_id, 960, 450);
|
|
|
}
|
|
|
if (obj.event === 'WEB') {
|
|
|
$.ajax({
|
|
|
type: "GET",
|
|
|
async: false,
|
|
|
dataType: "json",
|
|
|
url: "/proto/proto/CreateWebFiles?interfaceName=" + data["interface_name"],
|
|
|
success: function (data) {
|
|
|
//拼接打印结果
|
|
|
var str = ""
|
|
|
for (var i = 0; i < data.data.length; i++) {
|
|
|
str += "序号:" + data.data[i]["Num"] + ",事件:" + data.data[i]["Item"] + ",结果:" + data.data[i]["Message"] + "<br>"
|
|
|
}
|
|
|
layer.alert(str, {
|
|
|
title: "执行结果",
|
|
|
skin: 'layui-layer-lan'
|
|
|
, closeBtn: 0
|
|
|
, anim: 4 //动画类型
|
|
|
});
|
|
|
}
|
|
|
})
|
|
|
}
|
|
|
if (obj.event === 'RPC') {
|
|
|
alert("RPC:" + data["file_id"] + ",暂未实现!");
|
|
|
}
|
|
|
});
|
|
|
|
|
|
//调用检查函数,是不是配置文件有更新
|
|
|
function CheckNew() {
|
|
|
$.ajax({
|
|
|
type: "GET",
|
|
|
dataType: "json",
|
|
|
async: false,
|
|
|
url: "/init/sync/CheckNew",
|
|
|
success: function (data) {
|
|
|
if (data.count > 0) {
|
|
|
syncData(1);
|
|
|
}
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
CheckNew();
|
|
|
})
|
|
|
</script>
|
|
|
</body>
|
|
|
</html> |