You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

350 lines
15 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<!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>