修改模板字段

This commit is contained in:
wanggeng 2021-11-01 15:15:33 +08:00
parent df7442e5bd
commit c85899ba9b
12 changed files with 178 additions and 34 deletions

View File

@ -22,7 +22,9 @@ public enum FormFieldTypeEnum {
ID_SELECT("idSelect", "ID 选择"),
SELECT("select", "下拉选择"),
CHECKBOX("checkbox", "复选"),
STATIC_CHECKBOX("staticCheckbox", "静态复选"),
RADIO("radio", "单选"),
STATIC_RADIO("staticRadio", "静态单选"),
SELECT_USER("selectUser", "选择人员"),
SELECT_DEPARTMENT("selectDepartment", "选择部门"),
FILE("file", "文件"),

View File

@ -27,11 +27,12 @@ public class ChoiceBoxTableCellFactory implements Callback<TableColumn.CellDataF
private ObservableList<String> normalSelect = FXCollections.observableArrayList(
"", FormFieldTypeEnum.TEXT.getValue(), FormFieldTypeEnum.NUMBER.getValue(),
FormFieldTypeEnum.DOUBLE.getValue(), FormFieldTypeEnum.TEXTAREA.getValue(), FormFieldTypeEnum.RICH_TEXT.getValue(),
FormFieldTypeEnum.STATIC_RADIO.getValue(),
FormFieldTypeEnum.CHECKBOX.getValue(), FormFieldTypeEnum.STATIC_CHECKBOX.getValue(),
FormFieldTypeEnum.SELECT_USER.getValue(), FormFieldTypeEnum.SELECT_DEPARTMENT.getValue(),
FormFieldTypeEnum.FILE.getValue(), FormFieldTypeEnum.IMAGE.getValue(),
FormFieldTypeEnum.AUDIO.getValue(), FormFieldTypeEnum.VIDEO.getValue(),
FormFieldTypeEnum.DATETIME.getValue(), FormFieldTypeEnum.DATE.getValue(),
FormFieldTypeEnum.CHECKBOX.getValue()
FormFieldTypeEnum.DATETIME.getValue(), FormFieldTypeEnum.DATE.getValue()
);
private ObservableList<String> singleSelect = FXCollections.observableArrayList(
"",

View File

@ -3,6 +3,7 @@ package ink.wgink.code.factory.service;
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;
import ink.wgink.code.factory.enums.FormFieldTypeEnum;
import ink.wgink.code.factory.utils.DateUtil;
import ink.wgink.code.factory.utils.MsgUtil;
import ink.wgink.code.factory.utils.WStringUtil;
@ -71,11 +72,13 @@ public class GenerateService {
// 首字母小写驼峰表明
String firstLowerTableName = WStringUtil.firstToLower(tableName);
String lowerTableName = tableNameWithoutPrefix.replaceAll("\\_", "").toLowerCase();
String requestMappingName = tableNameWithoutPrefix.replaceAll("\\_", "-").toLowerCase();
Map<String, Object> dataModel = new HashMap<>(16);
dataModel.put("context", generateVO.getContext());
dataModel.put("codePackage", generateVO.getCodePackage());
dataModel.put("tableNameWithoutPrefix", tableNameWithoutPrefix);
dataModel.put("lowerTableName", lowerTableName);
dataModel.put("requestMappingName", requestMappingName);
dataModel.put("tableName", tableName);
dataModel.put("tableFullName", tableFullName);
dataModel.put("firstUpperTableName", firstUpperTableName);
@ -106,13 +109,13 @@ public class GenerateService {
iDaoCode("/normal/dao/i-dao.ftl", String.format("%s/dao/%s", outFolder, lowerTableName), firstUpperTableName, dataModel);
}
if (generateVO.getHasMySQL()) {
mySqlMapperCode("/normal/mapper/mysql-mapper.ftl", String.format("%s/mapper/%s", outFolder, lowerTableName), tableName, dataModel);
mySqlMapperCode("/normal/mapper/mysql-mapper.ftl", String.format("%s/mapper/%s", outFolder, requestMappingName), tableName, dataModel);
}
if (generateVO.getHasHtml()) {
htmlCode("/normal/page", String.format("%s/static/route/%s", outFolder, lowerTableName), tableName, dataModel);
htmlCode("/normal/page", String.format("%s/static/route/%s", outFolder, requestMappingName), tableName, dataModel);
}
if (generateVO.getHasThymeleaf()) {
thymeleafCode("/normal/page", String.format("%s/templates/%s", outFolder, lowerTableName), tableName, dataModel);
thymeleafCode("/normal/page", String.format("%s/templates/%s", outFolder, requestMappingName), tableName, dataModel);
}
if (generateVO.getHasRoute()) {
routeCode("/normal/controller/route-controller.ftl", String.format("%s/controller/route/%s", outFolder, lowerTableName), firstUpperTableName, dataModel);
@ -141,6 +144,11 @@ public class GenerateService {
boolean hasModifier = false;
boolean modifierFormShow = false;
boolean hasIsDelete = false;
boolean hasFile = false;
boolean hasImage = false;
boolean hasVideo = false;
boolean hasAudio = false;
boolean hasRichText = false;
for (int i = 0; i < fields.size(); i++) {
FieldVO field = fields.get(i);
if (!hasId && StringUtils.equals(String.format("%s_id", tableNameWithoutPrefix), field.getColumnName())) {
@ -165,6 +173,21 @@ public class GenerateService {
if (!hasIsDelete && StringUtils.equals(FieldService.DEFAULT_FIELD_IS_DELETE, field.getPropertyName())) {
hasIsDelete = true;
}
if (!hasFile && StringUtils.equals(FormFieldTypeEnum.FILE.getValue(), field.getPropertyName())) {
hasFile = true;
}
if (!hasImage && StringUtils.equals(FormFieldTypeEnum.IMAGE.getValue(), field.getPropertyName())) {
hasImage = true;
}
if (!hasVideo && StringUtils.equals(FormFieldTypeEnum.VIDEO.getValue(), field.getPropertyName())) {
hasVideo = true;
}
if (!hasAudio && StringUtils.equals(FormFieldTypeEnum.AUDIO.getValue(), field.getPropertyName())) {
hasAudio = true;
}
if (!hasRichText && StringUtils.equals(FormFieldTypeEnum.RICH_TEXT.getValue(), field.getPropertyName())) {
hasRichText = true;
}
Map<String, Object> fieldMap = new HashMap<>(16);
fieldMap.put("columnName", field.getColumnName());
fieldMap.put("propertyName", field.getPropertyName());
@ -194,6 +217,11 @@ public class GenerateService {
dataModel.put("modifierFormShow", modifierFormShow);
dataModel.put("hasIsDelete", hasIsDelete);
dataModel.put("fieldList", fieldList);
dataModel.put("hasFile", hasFile);
dataModel.put("hasImage", hasImage);
dataModel.put("hasVideo", hasVideo);
dataModel.put("hasAudio", hasAudio);
dataModel.put("hasRichText", hasRichText);
}
/**
@ -319,7 +347,7 @@ public class GenerateService {
if (!folder.exists()) {
folder.mkdirs();
}
code(templateFtl, String.format("%s/%s-mapper.xml", outFolder, WStringUtil.lowerUpper2UnderLine(tableName).replaceAll("\\_", "-")), dataModel);
code(templateFtl, String.format("%s/%s-mapper.xml", outFolder, WStringUtil.lowerUpper2Separator(tableName, "-")), dataModel);
}
/**

View File

@ -138,15 +138,31 @@ public class WStringUtil {
* @date 2018年2月28日 下午4:28:45
*/
public static String lowerUpper2UnderLine(String str) {
return lowerUpper2Separator(str, "-");
}
/**
* <p>
* title 驼峰名称转分隔符名称
* </p>
* <p>
* description 驼峰名称转小写名称用分隔符名称
* </p>
*
* @param str
* @param separator
* @return
*/
public static String lowerUpper2Separator(String str, String separator) {
Matcher matcher = LOWER_UPPER_PATTERN.matcher(str);
while (matcher.find()) {
String group = matcher.group();
String lower = "_" + group.toLowerCase();
String lower = separator + group.toLowerCase();
str = str.replaceFirst(group, lower);
matcher = LOWER_UPPER_PATTERN.matcher(str);
}
if (str.startsWith("_")) {
str = str.substring(1, str.length());
if (str.startsWith(separator)) {
str = str.substring(1);
}
return str;
}
@ -167,7 +183,23 @@ public class WStringUtil {
* @date 2018年2月28日 下午4:49:13
*/
public static String underLine2LowerUpper(String str) {
String[] strs = str.split("_");
return separator2LowerUpper(str, "_");
}
/**
* <p>
* title 分割符转驼峰式
* </p>
* <p>
* description 分割符转驼峰式
* </p>
*
* @param str 字符串
* @param separator 分隔符
* @return
*/
public static String separator2LowerUpper(String str, String separator) {
String[] strs = str.split(separator);
StringBuilder sb = new StringBuilder();
for (int i = 0; i < strs.length; i++) {
String letter = strs[i].toLowerCase();
@ -208,7 +240,29 @@ public class WStringUtil {
String result = underLine2LowerUpper(str);
if (firstLower) {
int first = result.charAt(0) + 32;
result = ((char) first) + result.substring(1, result.length());
result = ((char) first) + result.substring(1);
}
return result;
}
/**
* <p>
* title 分隔符转驼峰式
* </p>
* <p>
* description 分隔符转驼峰式
* </p>
*
* @param str 字符串
* @param separator 分隔符
* @param firstLower 首字母小写
* @return
*/
public static String separator2LowerUpper(String str, String separator, boolean firstLower) {
String result = separator2LowerUpper(str, separator);
if (firstLower) {
int first = result.charAt(0) + 32;
result = ((char) first) + result.substring(1);
}
return result;
}

View File

@ -28,7 +28,7 @@ import java.util.Map;
**/
@Api(tags = ISystemConstant.API_TAGS_SYSTEM_PREFIX + "${tableExplain}接口")
@RestController
@RequestMapping(ISystemConstant.API_PREFIX + "/${lowerTableName}")
@RequestMapping(ISystemConstant.API_PREFIX + "/${requestMappingName}")
public class ${firstUpperTableName}Controller extends DefaultBaseController {
@Autowired

View File

@ -28,7 +28,7 @@ import java.util.Map;
**/
@Api(tags = ISystemConstant.API_TAGS_APP_PREFIX + "${tableExplain}接口")
@RestController
@RequestMapping(ISystemConstant.APP_PREFIX + "/${lowerTableName}")
@RequestMapping(ISystemConstant.APP_PREFIX + "/${requestMappingName}")
public class ${firstUpperTableName}AppController extends DefaultBaseController {
@Autowired
@ -103,7 +103,7 @@ public class ${firstUpperTableName}AppController extends DefaultBaseController {
@ApiImplicitParam(name = "endTime", value = "结束时间", paramType = "query", dataType = "String")
})
@ApiResponses({@ApiResponse(code = 400, message = "请求失败", response = ErrorResult.class)})
@GetMapping("listpage${lowerTableName}")
@GetMapping("listpage")
public SuccessResultList<List<${firstUpperTableName}DTO>> listPage(@RequestHeader("token") String token, ListPage page) {
Map<String, Object> params = requestParams();
page.setParams(params);

View File

@ -28,7 +28,7 @@ import java.util.Map;
**/
@Api(tags = ISystemConstant.API_TAGS_RESOURCE_PREFIX + "${tableExplain}接口")
@RestController
@RequestMapping(ISystemConstant.RESOURCE_PREFIX + "/${lowerTableName}")
@RequestMapping(ISystemConstant.RESOURCE_PREFIX + "/${requestMappingName}")
public class ${firstUpperTableName}ResourceController extends DefaultBaseController {
@Autowired

View File

@ -21,22 +21,22 @@ import java.util.Map;
**/
@Api(tags = ISystemConstant.ROUTE_TAGS_PREFIX + "${tableExplain}路由")
@RestController
@RequestMapping(ISystemConstant.ROUTE_PREFIX + "/${lowerTableName}")
@RequestMapping(ISystemConstant.ROUTE_PREFIX + "/${requestMappingName}")
public class ${firstUpperTableName}RouteController extends DefaultBaseController {
@GetMapping("save")
public ModelAndView save() {
return new ModelAndView("${lowerTableName}/save");
return new ModelAndView("${requestMappingName}/save");
}
@GetMapping("update")
public ModelAndView update() {
return new ModelAndView("${lowerTableName}/update");
return new ModelAndView("${requestMappingName}/update");
}
@GetMapping("list")
public ModelAndView list() {
return new ModelAndView("${lowerTableName}/list");
return new ModelAndView("${requestMappingName}/list");
}
}

View File

@ -50,7 +50,7 @@
is_delete = 1
WHERE
<#if hasId>
${underlineTableName}_id IN
${idColumn} IN
<foreach collection="${firstLowerTableName}Ids" index="index" open="(" separator="," close=")">
${r"#{"}${firstLowerTableName}${r"Ids[${index}]}"}
</foreach>

View File

@ -28,13 +28,14 @@
<div class="layui-card-body">
<div class="test-table-reload-btn" style="margin-bottom: 10px;">
<div class="layui-inline">
<input type="text" id="keywords" class="layui-input search-item" placeholder="输入关键字">
<input type="text" id="keywords" class="layui-input search-item search-item-width-100" placeholder="输入关键字">
</div>
新增时间
<div class="layui-inline">
<input type="text" id="startTime" class="layui-input search-item search-item-width-100" placeholder="开始时间" readonly>
</div>
<div class="layui-inline">
<input type="text" id="startTime" class="layui-input search-item" placeholder="开始时间" readonly>
</div>
<div class="layui-inline">
<input type="text" id="endTime" class="layui-input search-item" placeholder="结束时间" readonly>
<input type="text" id="endTime" class="layui-input search-item search-item-width-100" placeholder="结束时间" readonly>
</div>
<button type="button" id="search" class="layui-btn layui-btn-sm">
<i class="fa fa-lg fa-search"></i> 搜索
@ -75,7 +76,7 @@
var laydate = layui.laydate;
var common = layui.common;
var resizeTimeout = null;
var tableUrl = 'api/${lowerTableName}/listpage';
var tableUrl = 'api/${requestMappingName}/listpage';
// 初始化表格
function initTable() {
@ -141,7 +142,6 @@
// 重载表格
function reloadTable(currentPage) {
table.reload('dataTable', {
url: top.restAjax.path(tableUrl, []),
where: {
keywords: $('#keywords').val(),
startTime: $('#startTime').val(),
@ -150,7 +150,6 @@
page: {
curr: currentPage
},
height: $win.height() - 90,
});
}
// 初始化日期
@ -174,7 +173,7 @@
yes: function (index) {
top.dialog.close(index);
var layIndex;
top.restAjax.delete(top.restAjax.path('api/${lowerTableName}/remove/{ids}', [ids]), {}, null, function (code, data) {
top.restAjax.delete(top.restAjax.path('api/${requestMappingName}/remove/{ids}', [ids]), {}, null, function (code, data) {
top.dialog.msg(top.dataMessage.deleteSuccess, {time: 1000});
reloadTable();
}, function (code, data) {
@ -213,7 +212,7 @@
area: ['100%', '100%'],
shadeClose: true,
anim: 2,
content: top.restAjax.path('route/${lowerTableName}/save<#if html>.html</#if>', []),
content: top.restAjax.path('route/${requestMappingName}/save<#if html>.html</#if>', []),
end: function() {
reloadTable();
}
@ -231,7 +230,7 @@
area: ['100%', '100%'],
shadeClose: true,
anim: 2,
content: top.restAjax.path('route/${lowerTableName}/update<#if html>.html</#if>?${firstLowerTableName}Id={${firstLowerTableName}Id}', [checkDatas[0].${firstLowerTableName}Id]),
content: top.restAjax.path('route/${requestMappingName}/update<#if html>.html</#if>?${firstLowerTableName}Id={${firstLowerTableName}Id}', [checkDatas[0].${firstLowerTableName}Id]),
end: function() {
reloadTable();
}

View File

@ -19,7 +19,9 @@
<link rel="stylesheet" href="assets/fonts/font-awesome/css/font-awesome.css"/>
<link rel="stylesheet" href="assets/layuiadmin/layui/css/layui.css" media="all">
<link rel="stylesheet" href="assets/layuiadmin/style/admin.css" media="all">
<#if hasImage>
<link rel="stylesheet" type="text/css" href="assets/js/vendor/viewer/viewer.min.css">
</#if>
</head>
<body>
<div class="layui-fluid layui-anim layui-anim-fadein">
@ -81,6 +83,13 @@
{{# } }}
</select>
</script>
</div>
<#elseif field.formFieldValue == "staticCheckbox">
<div class="layui-form-item" pane>
<label class="layui-form-label">${field.columnComment}</label>
<div class="layui-input-block layui-form" lay-filter="${field.propertyName}CheckboxTemplateBox">
<input type="checkbox" name="${field.propertyName}" value="">
</div>
</div>
<#elseif field.formFieldValue == "checkbox">
<div class="layui-form-item" pane>
@ -91,6 +100,13 @@
<input type="checkbox" name="${field.propertyName}[{{item.selectId}}]" value="{{item.selectId}}" title="{{item.selectName}}">
{{# } }}
</script>
</div>
<#elseif field.formFieldValue == "staticRadio">
<div class="layui-form-item" pane>
<label class="layui-form-label">${field.columnComment}</label>
<div class="layui-input-block layui-form">
<input type="radio" name="${field.propertyName}" value="">
</div>
</div>
<#elseif field.formFieldValue == "radio">
<div class="layui-form-item" pane>
@ -281,9 +297,15 @@
</div>
</div>
</div>
<#if hasRichText>
<script src="assets/js/vendor/wangEditor/wangEditor.min.js"></script>
</#if>
<#if hasVideo>
<script src="assets/js/vendor/ckplayer/ckplayer/ckplayer.js"></script>
</#if>
<#if hasImage>
<script src="assets/js/vendor/viewer/viewer.min.js"></script>
</#if>
<script src="assets/layuiadmin/layui/layui.js"></script>
<script>
layui.config({
@ -295,14 +317,19 @@
var form = layui.form;
var laytpl = layui.laytpl;
var laydate = layui.laydate;
<#if hasRichText>
var wangEditor = window.wangEditor;
var wangEditorObj = {};
</#if>
<#if hasImage>
var viewerObj = {};
</#if>
function closeBox() {
parent.layer.close(parent.layer.getFrameIndex(window.name));
}
<#if hasFile || hasImage>
function refreshDownloadTemplet(fileName, file) {
var dataRander = {};
dataRander[fileName] = file;
@ -337,7 +364,9 @@
top.dialog.msg(data.msg);
});
}
</#if>
<#if hasVideo>
// 初始化视频
function initVideo(fileName, data) {
for(var i = 0, item; item = data[i++];) {
@ -352,6 +381,7 @@
});
}
}
</#if>
<#list fieldList! as field>
<#if field.formShow>
@ -710,7 +740,7 @@
</#if>
</#if>
</#list>
top.restAjax.post(top.restAjax.path('api/${lowerTableName}/save', []), formData.field, null, function(code, data) {
top.restAjax.post(top.restAjax.path('api/${requestMappingName}/save', []), formData.field, null, function(code, data) {
var layerIndex = top.dialog.msg(top.dataMessage.commitSuccess, {
time: 0,
btn: [top.dataMessage.button.yes, top.dataMessage.button.no],

View File

@ -19,7 +19,9 @@
<link rel="stylesheet" href="assets/fonts/font-awesome/css/font-awesome.css"/>
<link rel="stylesheet" href="assets/layuiadmin/layui/css/layui.css" media="all">
<link rel="stylesheet" href="assets/layuiadmin/style/admin.css" media="all">
<#if hasImage>
<link rel="stylesheet" type="text/css" href="assets/js/vendor/viewer/viewer.min.css">
</#if>
</head>
<body>
<div class="layui-fluid layui-anim layui-anim-fadein">
@ -68,6 +70,13 @@
<div class="layui-input-block">
<div id="${field.propertyName}"></div>
</div>
</div>
<#elseif field.formFieldValue == "staticSelect">
<div class="layui-form-item" pane>
<label class="layui-form-label">${field.columnComment}</label>
<div class="layui-input-block layui-form" lay-filter="${field.propertyName}CheckboxTemplateBox">
<input type="checkbox" name="${field.propertyName}" value="">
</div>
</div>
<#elseif field.formFieldValue == "select">
<div class="layui-form-item">
@ -91,6 +100,13 @@
<input type="checkbox" name="${field.propertyName}[{{item.selectId}}]" value="{{item.selectId}}" title="{{item.selectName}}">
{{# } }}
</script>
</div>
<#elseif field.formFieldValue == "staticRadio">
<div class="layui-form-item" pane>
<label class="layui-form-label">${field.columnComment}</label>
<div class="layui-input-block layui-form">
<input type="radio" name="${field.propertyName}" value="">
</div>
</div>
<#elseif field.formFieldValue == "radio">
<div class="layui-form-item" pane>
@ -281,9 +297,15 @@
</div>
</div>
</div>
<#if hasRichText>
<script src="assets/js/vendor/wangEditor/wangEditor.min.js"></script>
</#if>
<#if hasVideo>
<script src="assets/js/vendor/ckplayer/ckplayer/ckplayer.js"></script>
</#if>
<#if hasImage>
<script src="assets/js/vendor/viewer/viewer.min.js"></script>
</#if>
<script src="assets/layuiadmin/layui/layui.js"></script>
<script>
layui.config({
@ -297,14 +319,19 @@
var laydate = layui.laydate;
var ${firstLowerTableName}Id = top.restAjax.params(window.location.href).${firstLowerTableName}Id;
<#if hasRichText>
var wangEditor = window.wangEditor;
var wangEditorObj = {};
</#if>
<#if hasImage>
var viewerObj = {};
</#if>
function closeBox() {
parent.layer.close(parent.layer.getFrameIndex(window.name));
}
<#if hasFile || hasImage>
function refreshDownloadTemplet(fileName, file) {
var dataRander = {};
dataRander[fileName] = file;
@ -339,7 +366,9 @@
top.dialog.msg(data.msg);
});
}
</#if>
<#if hasVideo>
// 初始化视频
function initVideo(fileName, data) {
for(var i = 0, item; item = data[i++];) {
@ -354,6 +383,7 @@
});
}
}
</#if>
<#list fieldList! as field>
<#if field.formShow>
@ -689,7 +719,7 @@
// 初始化内容
function initData() {
var loadLayerIndex;
top.restAjax.get(top.restAjax.path('api/${lowerTableName}/get/{${firstLowerTableName}Id}', [${firstLowerTableName}Id]), {}, null, function(code, data) {
top.restAjax.get(top.restAjax.path('api/${requestMappingName}/get/{${firstLowerTableName}Id}', [${firstLowerTableName}Id]), {}, null, function(code, data) {
var dataFormData = {};
for(var i in data) {
dataFormData[i] = data[i] +'';
@ -741,7 +771,7 @@
</#if>
</#if>
</#list>
top.restAjax.put(top.restAjax.path('api/${lowerTableName}/update/{${firstLowerTableName}Id}', [${firstLowerTableName}Id]), formData.field, null, function(code, data) {
top.restAjax.put(top.restAjax.path('api/${requestMappingName}/update/{${firstLowerTableName}Id}', [${firstLowerTableName}Id]), formData.field, null, function(code, data) {
var layerIndex = top.dialog.msg(top.dataMessage.updateSuccess, {
time: 0,
btn: [top.dataMessage.button.yes, top.dataMessage.button.no],