完善动态表单联表功能

This commit is contained in:
wenc000 2020-01-29 00:08:31 +08:00
parent 39ba55149e
commit f4cb139f8d
8 changed files with 448 additions and 101 deletions

View File

@ -33,6 +33,12 @@ public class DynamicFormFormShowFieldDTO {
private String verifyType; private String verifyType;
@ApiModelProperty(name = "verifyRegular", value = "校验正则") @ApiModelProperty(name = "verifyRegular", value = "校验正则")
private String verifyRegular; private String verifyRegular;
@ApiModelProperty(name = "joinTable", value = "联表表名")
private String joinTable;
@ApiModelProperty(name = "joinTableField", value = "联表字段")
private String joinTableField;
@ApiModelProperty(name = "joinTableFormShow", value = "联表显示字段")
private String joinTableFormShow;
public String getFieldName() { public String getFieldName() {
return fieldName == null ? "" : fieldName.trim(); return fieldName == null ? "" : fieldName.trim();
@ -90,6 +96,30 @@ public class DynamicFormFormShowFieldDTO {
this.verifyRegular = verifyRegular; this.verifyRegular = verifyRegular;
} }
public String getJoinTable() {
return joinTable == null ? "" : joinTable.trim();
}
public void setJoinTable(String joinTable) {
this.joinTable = joinTable;
}
public String getJoinTableField() {
return joinTableField == null ? "" : joinTableField.trim();
}
public void setJoinTableField(String joinTableField) {
this.joinTableField = joinTableField;
}
public String getJoinTableFormShow() {
return joinTableFormShow == null ? "" : joinTableFormShow.trim();
}
public void setJoinTableFormShow(String joinTableFormShow) {
this.joinTableFormShow = joinTableFormShow;
}
@Override @Override
public String toString() { public String toString() {
final StringBuilder sb = new StringBuilder("{"); final StringBuilder sb = new StringBuilder("{");
@ -107,6 +137,12 @@ public class DynamicFormFormShowFieldDTO {
.append("\"").append(verifyType).append("\""); .append("\"").append(verifyType).append("\"");
sb.append(",\"verifyRegular\":") sb.append(",\"verifyRegular\":")
.append("\"").append(verifyRegular).append("\""); .append("\"").append(verifyRegular).append("\"");
sb.append(",\"joinTable\":")
.append("\"").append(joinTable).append("\"");
sb.append(",\"joinTableField\":")
.append("\"").append(joinTableField).append("\"");
sb.append(",\"joinTableFormShow\":")
.append("\"").append(joinTableFormShow).append("\"");
sb.append('}'); sb.append('}');
return sb.toString(); return sb.toString();
} }

View File

@ -113,16 +113,11 @@ public class DynamicFormServiceImpl extends AbstractService implements IDynamicF
public List<DynamicFormFormShowFieldDTO> listFormShowFieldOfPage(String tableName) throws SearchException { public List<DynamicFormFormShowFieldDTO> listFormShowFieldOfPage(String tableName) throws SearchException {
List<DynamicFormDTO> dynamicFormDTOs = listDynamicForm(tableName); List<DynamicFormDTO> dynamicFormDTOs = listDynamicForm(tableName);
List<DynamicFormFormShowFieldDTO> dynamicFormFormShowFieldDTOList = new ArrayList<>(); List<DynamicFormFormShowFieldDTO> dynamicFormFormShowFieldDTOList = new ArrayList<>();
int joinIndex = 0;
for (DynamicFormDTO dynamicFormDTO : dynamicFormDTOs) { for (DynamicFormDTO dynamicFormDTO : dynamicFormDTOs) {
// 显示字段 // 显示字段
if (dynamicFormDTO.getFormShow() == 1) { if (dynamicFormDTO.getFormShow() == 1) {
dynamicFormFormShowFieldDTOList.add(getDynamicFormFormShowFieldDTOByDynamicFormDTO(dynamicFormDTO)); dynamicFormFormShowFieldDTOList.add(getDynamicFormFormShowFieldDTOByDynamicFormDTO(dynamicFormDTO));
} }
// 联表字段
if (isJoinDynamicField(dynamicFormDTO)) {
dynamicFormFormShowFieldDTOList.addAll(listJoinDynamicFormFormShowField(dynamicFormDTO, ++joinIndex));
}
} }
return dynamicFormFormShowFieldDTOList; return dynamicFormFormShowFieldDTOList;
} }
@ -137,38 +132,18 @@ public class DynamicFormServiceImpl extends AbstractService implements IDynamicF
private List<DynamicFormListShowFieldDTO> listJoinDynamicFormListShowField(DynamicFormDTO dynamicFormDTO, int index) { private List<DynamicFormListShowFieldDTO> listJoinDynamicFormListShowField(DynamicFormDTO dynamicFormDTO, int index) {
List<DynamicFormListShowFieldDTO> dynamicFormListShowFieldDTOList = new ArrayList<>(); List<DynamicFormListShowFieldDTO> dynamicFormListShowFieldDTOList = new ArrayList<>();
Map<String, Object> params = getHashMap(2); Map<String, Object> params = getHashMap(2);
params.put("tableName", WStringUtil.firstToLower(dynamicFormDTO.getJoinTable().replaceFirst("dynamic", ""))); params.put("tableName", dynamicFormDTO.getJoinTable());
params.put("fieldNameList", Arrays.asList(dynamicFormDTO.getJoinTableListShow().split(","))); params.put("fieldNameList", Arrays.asList(dynamicFormDTO.getJoinTableListShow().split(",")));
List<DynamicFormDTO> joinDynamicFormDTOs = dynamicFormDao.listDynamicForm(params); List<DynamicFormDTO> joinDynamicFormDTOs = dynamicFormDao.listDynamicForm(params);
for (DynamicFormDTO joinDynamicFormDTO : joinDynamicFormDTOs) { for (DynamicFormDTO joinDynamicFormDTO : joinDynamicFormDTOs) {
DynamicFormListShowFieldDTO dynamicFormListShowFieldDTO = getDynamicFormListShowFieldDTOByDynamicFormDTO(joinDynamicFormDTO); DynamicFormListShowFieldDTO dynamicFormListShowFieldDTO = getDynamicFormListShowFieldDTOByDynamicFormDTO(joinDynamicFormDTO);
dynamicFormListShowFieldDTO.setFieldName(String.format("%sJt%d", dynamicFormListShowFieldDTO.getFieldName(), index)); dynamicFormListShowFieldDTO.setFieldName(String.format("%sJt%d", dynamicFormListShowFieldDTO.getFieldName(), index));
dynamicFormListShowFieldDTO.setFieldExplain(String.format("%s%d", dynamicFormListShowFieldDTO.getFieldExplain(), index));
dynamicFormListShowFieldDTOList.add(dynamicFormListShowFieldDTO); dynamicFormListShowFieldDTOList.add(dynamicFormListShowFieldDTO);
} }
return dynamicFormListShowFieldDTOList; return dynamicFormListShowFieldDTOList;
} }
/**
* 设置动态表单列表 联表 表单显示字段
*
* @param dynamicFormDTO
* @param index 下标
* @return
*/
private List<DynamicFormFormShowFieldDTO> listJoinDynamicFormFormShowField(DynamicFormDTO dynamicFormDTO, int index) {
List<DynamicFormFormShowFieldDTO> dynamicFormFormShowFieldDTOList = new ArrayList<>();
Map<String, Object> params = getHashMap(2);
params.put("tableName", WStringUtil.firstToLower(dynamicFormDTO.getJoinTable().replaceFirst("dynamic", "")));
params.put("fieldNameList", Arrays.asList(dynamicFormDTO.getJoinTableListShow().split(",")));
List<DynamicFormDTO> joinDynamicFormDTOs = dynamicFormDao.listDynamicForm(params);
for (DynamicFormDTO joinDynamicFormDTO : joinDynamicFormDTOs) {
DynamicFormFormShowFieldDTO dynamicFormFormShowFieldDTO = getDynamicFormFormShowFieldDTOByDynamicFormDTO(joinDynamicFormDTO);
dynamicFormFormShowFieldDTO.setFieldName(String.format("%sJt%d", dynamicFormFormShowFieldDTO.getFieldName(), index));
dynamicFormFormShowFieldDTOList.add(dynamicFormFormShowFieldDTO);
}
return dynamicFormFormShowFieldDTOList;
}
/** /**
* 设置动态表单的列表字段 * 设置动态表单的列表字段
* *
@ -198,6 +173,9 @@ public class DynamicFormServiceImpl extends AbstractService implements IDynamicF
dynamicFormFormShowFieldDTO.setFieldType(dynamicFormDTO.getFieldType()); dynamicFormFormShowFieldDTO.setFieldType(dynamicFormDTO.getFieldType());
dynamicFormFormShowFieldDTO.setVerifyType(dynamicFormDTO.getVerifyType()); dynamicFormFormShowFieldDTO.setVerifyType(dynamicFormDTO.getVerifyType());
dynamicFormFormShowFieldDTO.setVerifyRegular(dynamicFormDTO.getVerifyRegular()); dynamicFormFormShowFieldDTO.setVerifyRegular(dynamicFormDTO.getVerifyRegular());
dynamicFormFormShowFieldDTO.setJoinTable(dynamicFormDTO.getJoinTable());
dynamicFormFormShowFieldDTO.setJoinTableField(dynamicFormDTO.getJoinTableField());
dynamicFormFormShowFieldDTO.setJoinTableFormShow(dynamicFormDTO.getJoinTableFormShow());
return dynamicFormFormShowFieldDTO; return dynamicFormFormShowFieldDTO;
} }
@ -210,7 +188,7 @@ public class DynamicFormServiceImpl extends AbstractService implements IDynamicF
Map<String, Object> listShow = new HashMap<>(2); Map<String, Object> listShow = new HashMap<>(2);
listShow.put("fieldType", dynamicFormDTO.getFieldType()); listShow.put("fieldType", dynamicFormDTO.getFieldType());
listShow.put("fieldName", WStringUtil.lowerUpper2UnderLine(dynamicFormDTO.getFieldName())); listShow.put("fieldName", WStringUtil.lowerUpper2UnderLine(dynamicFormDTO.getFieldName()));
listShow.put("joinTable", WStringUtil.lowerUpper2UnderLine(dynamicFormDTO.getJoinTable())); listShow.put("joinTable", String.format("%s%s", IDynamicTableService.DYNAMIC_TABLE_PREFIX, WStringUtil.lowerUpper2UnderLine(dynamicFormDTO.getJoinTable())));
listShow.put("joinTableField", WStringUtil.lowerUpper2UnderLine(dynamicFormDTO.getJoinTableField())); listShow.put("joinTableField", WStringUtil.lowerUpper2UnderLine(dynamicFormDTO.getJoinTableField()));
listShow.put("joinTableSort", dynamicFormDTO.getJoinTableSort()); listShow.put("joinTableSort", dynamicFormDTO.getJoinTableSort());
// 构建连表显示字段 // 构建连表显示字段

View File

@ -77,26 +77,27 @@
<!-- 动态数据列表 --> <!-- 动态数据列表 -->
<select id="listDynamicData" parameterType="map" resultType="map"> <select id="listDynamicData" parameterType="map" resultType="map">
SELECT SELECT
<foreach collection="listShowFieldList" item="item" open="" separator="," close=""> <foreach collection="listShowFieldList" index="index" item="item" open="" separator="" close="">
t1.${item.fieldName} t1.${item.fieldName},
</foreach>
<foreach collection="listShowFieldList" index="index" item="item" open="," separator="" close="">
<if test="item.fieldType == 'radio' or item.fieldType == 'checkbox' or item.fieldType == 'select'"> <if test="item.fieldType == 'radio' or item.fieldType == 'checkbox' or item.fieldType == 'select'">
GROUP_CONCAT(dt${index + 1}.dictionary_name) ${item.fieldName}_dictionary_name, GROUP_CONCAT(dt${index + 1}.dictionary_name) ${item.fieldName}_dictionary_name,
</if> </if>
</foreach> </foreach>
<!-- 主表字典表字段 start -->
<if test="listJoinTableField != null and listJoinTableField.size > 0"> <if test="listJoinTableField != null and listJoinTableField.size > 0">
<foreach collection="listJoinTableField" index="index" item="item" open="" separator="" close=""> <foreach collection="listJoinTableField" index="index" item="item" open="" separator="" close="">
<if test="item.joinTableListShow != null and item.joinTableListShow.size > 0" > <if test="item.joinTableListShow != null and item.joinTableListShow.size > 0" >
<foreach collection="item.joinTableListShow" index="joinIndex" item="item" open="" separator="" close=""> <foreach collection="item.joinTableListShow" index="joinIndex" item="joinItem" open="" separator="" close="">
jt${index + 1}.${item} ${item}_jt${index + 1}, jt${index + 1}.${joinItem} ${joinItem}_jt${index + 1},
</foreach> </foreach>
</if> </if>
</foreach> </foreach>
</if> </if>
<!-- 主表字典表字段 end -->
t1.${uuidField} t1.${uuidField}
FROM FROM
${tableName} t1 ${tableName} t1
<!-- 主表字典表 start -->
<foreach collection="listShowFieldList" index="index" item="item" open="" separator="" close=""> <foreach collection="listShowFieldList" index="index" item="item" open="" separator="" close="">
<if test="item.fieldType == 'radio' or item.fieldType == 'checkbox' or item.fieldType == 'select'"> <if test="item.fieldType == 'radio' or item.fieldType == 'checkbox' or item.fieldType == 'select'">
LEFT JOIN LEFT JOIN
@ -107,6 +108,8 @@
dt${index + 1}.is_delete = 0 dt${index + 1}.is_delete = 0
</if> </if>
</foreach> </foreach>
<!-- 主表字典表 end -->
<!-- 联表字段 start -->
<if test="listJoinTableField != null and listJoinTableField.size > 0"> <if test="listJoinTableField != null and listJoinTableField.size > 0">
<foreach collection="listJoinTableField" index="index" item="item" open="" separator="" close=""> <foreach collection="listJoinTableField" index="index" item="item" open="" separator="" close="">
<if test="item.fieldType == 'leftJoin'"> <if test="item.fieldType == 'leftJoin'">
@ -125,6 +128,7 @@
jt${index + 1}.is_delete = 0 jt${index + 1}.is_delete = 0
</foreach> </foreach>
</if> </if>
<!-- 联表字段 end -->
WHERE WHERE
t1.is_delete = 0 t1.is_delete = 0
GROUP BY GROUP BY

View File

@ -77,31 +77,33 @@
<div class="layui-form-item"> <div class="layui-form-item">
<label class="layui-form-label">关联表</label> <label class="layui-form-label">关联表</label>
<div class="layui-input-block"> <div class="layui-input-block">
<input type="text" name="joinTable" placeholder="请选择关联表" class="layui-input"> <input type="text" id="joinTable" name="joinTable" placeholder="请选择关联表" class="layui-input" readonly style="cursor: pointer;">
</div> </div>
</div> </div>
<div id="joinFieldDetailBox" style="display: none;">
<div class="layui-form-item"> <div class="layui-form-item">
<label class="layui-form-label">关联字段</label> <label class="layui-form-label">关联字段</label>
<div class="layui-input-block"> <div class="layui-input-block">
<input type="text" name="joinTableField" placeholder="请输入关联字段" class="layui-input"> <input type="text" id="joinTableField" name="joinTableField" placeholder="请输入关联字段" class="layui-input" readonly style="cursor: pointer;">
</div> </div>
</div> </div>
<div class="layui-form-item"> <div class="layui-form-item">
<label class="layui-form-label">关联顺序</label> <label class="layui-form-label">关联顺序</label>
<div class="layui-input-block"> <div class="layui-input-block">
<input type="number" name="joinTableSort" placeholder="请输入关联顺序" class="layui-input"> <input type="number" name="joinTableSort" placeholder="请输入关联顺序" class="layui-input" value="1">
</div> </div>
</div> </div>
<div class="layui-form-item"> <div class="layui-form-item">
<label class="layui-form-label">连表列表</label> <label class="layui-form-label">列表显示</label>
<div class="layui-input-block"> <div class="layui-input-block">
<input type="text" name="joinTableListShow" placeholder="请输入连表列表显示" class="layui-input"> <input type="text" id="joinTableListShow" name="joinTableListShow" placeholder="请选择关联表需要在列表中显示的字段,不包括被关联表中的关联字段" class="layui-input" readonly style="cursor: pointer;">
</div> </div>
</div> </div>
<div class="layui-form-item"> <div class="layui-form-item">
<label class="layui-form-label">连表表单</label> <label class="layui-form-label">表单显示</label>
<div class="layui-input-block"> <div class="layui-input-block">
<input type="text" name="joinTableFormShow" placeholder="请输入连表表单显示" class="layui-input"> <input type="text" id="joinTableFormShow" name="joinTableFormShow" placeholder="请选择关联表需要在表单中回显的字段,不包括被关联表中的关联字段" class="layui-input" readonly style="cursor: pointer;">
</div>
</div> </div>
</div> </div>
</div> </div>
@ -141,6 +143,7 @@
<input type="text" name="verifyRegular" placeholder="请输入校验正则" class="layui-input"> <input type="text" name="verifyRegular" placeholder="请输入校验正则" class="layui-input">
</div> </div>
</div> </div>
</div>
<div class="layui-form-item" pane> <div class="layui-form-item" pane>
<label class="layui-form-label">列表显示 *</label> <label class="layui-form-label">列表显示 *</label>
<div class="layui-input-block"> <div class="layui-input-block">
@ -155,7 +158,6 @@
<input type="radio" name="formShow" value="1" title="开启" checked> <input type="radio" name="formShow" value="1" title="开启" checked>
</div> </div>
</div> </div>
</div>
<div class="layui-form-item"> <div class="layui-form-item">
<label class="layui-form-label">排序 *</label> <label class="layui-form-label">排序 *</label>
<div class="layui-input-block"> <div class="layui-input-block">
@ -187,7 +189,9 @@
parent.layer.close(parent.layer.getFrameIndex(window.name)); parent.layer.close(parent.layer.getFrameIndex(window.name));
} }
// 初始化 // 初始化
function initData() {} function initData() {
}
initData(); initData();
// 提交表单 // 提交表单
@ -269,6 +273,125 @@
} }
}); });
}); });
// 选择联表
$(document.body).on('click', '#joinTable', function() {
var joinTable = $('#joinTable').val();
top.dialog.tree({
title: '选择关联表',
apiUri: top.restAjax.path('api/dynamicconfigtable/listtable', []),
width: '250px',
height: '400px',
dataFilter: function(treeId, parentNode, childNodes) {
for(var i = 0, item = childNodes[i]; item = childNodes[i++];) {
item.name = item.tableName;
item.id = item.tableName;
item.title = item.tableName;
}
return childNodes;
},
selectedNodes: [{
id: joinTable,
name: joinTable,
title: joinTable
}],
onClose: function() {
var selectNodes = top.dialog.dialogTreeData.selectedNodes;
if(typeof(selectNodes) != 'undefined' && selectNodes != null) {
if(selectNodes.length > 0) {
$('#joinTable').val(selectNodes[0].id);
$('#joinTableField').val(selectNodes[0].id +'Id');
$('#joinFieldDetailBox').show();
} else {
$('#joinTable').val('');
$('#joinTableField').val('');
$('#joinFieldDetailBox').hide();
}
}
}
});
});
/**
* 选择字段
* @param isList 是否列表
*/
function selectJoinField(isList) {
var check = null;
var selectedNodes = [];
if(isList) {
check = {
enable: true,
selectType: 'checkbox',
checkboxType: {Y: 'ps', N: 'ps'},
radioType: 'level',
}
var joinTableListShow = $('#joinTableListShow').val();
if(joinTableListShow) {
var joinTableListShowArray = joinTableListShow.split(',');
for(var i = 0, item; item = joinTableListShowArray[i++];) {
selectedNodes.push({
id: item,
name: item,
title: item
})
}
}
} else {
var joinTableFormShow = $('#joinTableFormShow').val();
selectedNodes.push({
id: joinTableFormShow,
name: joinTableFormShow,
title: joinTableFormShow
});
}
top.dialog.tree({
title: '选择联表显示字段',
apiUri: top.restAjax.path('api/dynamicconfigtable/dynamicconfigform/listform/{tableName}', [$('#joinTable').val()]),
width: '250px',
height: '400px',
dataFilter: function(treeId, parentNode, childNodes) {
for(var i = 0, item = childNodes[i]; item = childNodes[i++];) {
item.name = item.fieldName;
item.id = item.fieldName;
item.title = item.fieldName;
}
return childNodes;
},
check: check,
selectedNodes: selectedNodes,
onClose: function() {
var selectNodes = top.dialog.dialogTreeData.selectedNodes;
if(typeof(selectNodes) != 'undefined' && selectNodes != null) {
if(selectNodes.length > 0) {
var selectNodeValue = '';
for(var j = 0, selectNode = selectNodes[j]; selectNode = selectNodes[j++];) {
if(selectNodeValue.length > 0) {
selectNodeValue += ',';
}
selectNodeValue += selectNode.id;
}
if(isList) {
$('#joinTableListShow').val(selectNodeValue);
} else {
$('#joinTableFormShow').val(selectNodeValue);
}
} else {
if(isList) {
$('#joinTableListShow').val('');
} else {
$('#joinTableFormShow').val('');
}
}
}
}
});
}
$(document.body).on('click', '#joinTableListShow', function() {
selectJoinField(true);
});
$(document.body).on('click', '#joinTableFormShow', function() {
selectJoinField(false);
});
$('.close').on('click', function() { $('.close').on('click', function() {
closeBox(); closeBox();
}); });

View File

@ -77,31 +77,33 @@
<div class="layui-form-item"> <div class="layui-form-item">
<label class="layui-form-label">关联表</label> <label class="layui-form-label">关联表</label>
<div class="layui-input-block"> <div class="layui-input-block">
<input type="text" name="joinTable" placeholder="请选择关联表" class="layui-input"> <input type="text" id="joinTable" name="joinTable" placeholder="请选择关联表" class="layui-input" readonly style="cursor: pointer;">
</div> </div>
</div> </div>
<div id="joinFieldDetailBox" style="display: none;">
<div class="layui-form-item"> <div class="layui-form-item">
<label class="layui-form-label">关联字段</label> <label class="layui-form-label">关联字段</label>
<div class="layui-input-block"> <div class="layui-input-block">
<input type="text" name="joinTableField" placeholder="请输入关联字段" class="layui-input"> <input type="text" id="joinTableField" name="joinTableField" placeholder="请输入关联字段" class="layui-input" readonly style="cursor: pointer;">
</div> </div>
</div> </div>
<div class="layui-form-item"> <div class="layui-form-item">
<label class="layui-form-label">关联顺序</label> <label class="layui-form-label">关联顺序</label>
<div class="layui-input-block"> <div class="layui-input-block">
<input type="number" name="joinTableSort" placeholder="请输入关联顺序" class="layui-input"> <input type="number" name="joinTableSort" placeholder="请输入关联顺序" class="layui-input" value="1">
</div> </div>
</div> </div>
<div class="layui-form-item"> <div class="layui-form-item">
<label class="layui-form-label">连表列表</label> <label class="layui-form-label">列表显示</label>
<div class="layui-input-block"> <div class="layui-input-block">
<input type="text" name="joinTableListShow" placeholder="请输入连表列表显示" class="layui-input"> <input type="text" id="joinTableListShow" name="joinTableListShow" placeholder="请选择关联表需要在列表中显示的字段,不包括被关联表中的关联字段" class="layui-input" readonly style="cursor: pointer;">
</div> </div>
</div> </div>
<div class="layui-form-item"> <div class="layui-form-item">
<label class="layui-form-label">连表表单</label> <label class="layui-form-label">表单显示</label>
<div class="layui-input-block"> <div class="layui-input-block">
<input type="text" name="joinTableFormShow" placeholder="请输入连表表单显示" class="layui-input"> <input type="text" id="joinTableFormShow" name="joinTableFormShow" placeholder="请选择关联表需要在表单中回显的字段,不包括被关联表中的关联字段" class="layui-input" readonly style="cursor: pointer;">
</div>
</div> </div>
</div> </div>
</div> </div>
@ -141,6 +143,7 @@
<input type="text" name="verifyRegular" placeholder="请输入校验正则" class="layui-input"> <input type="text" name="verifyRegular" placeholder="请输入校验正则" class="layui-input">
</div> </div>
</div> </div>
</div>
<div class="layui-form-item" pane> <div class="layui-form-item" pane>
<label class="layui-form-label">列表显示 *</label> <label class="layui-form-label">列表显示 *</label>
<div class="layui-input-block"> <div class="layui-input-block">
@ -155,7 +158,6 @@
<input type="radio" name="formShow" value="1" title="开启" checked> <input type="radio" name="formShow" value="1" title="开启" checked>
</div> </div>
</div> </div>
</div>
<div class="layui-form-item"> <div class="layui-form-item">
<label class="layui-form-label">排序 *</label> <label class="layui-form-label">排序 *</label>
<div class="layui-input-block"> <div class="layui-input-block">
@ -203,8 +205,8 @@
verifyType: data.verifyType, verifyType: data.verifyType,
verifyRegular: data.verifyRegular, verifyRegular: data.verifyRegular,
fieldSort: data.fieldSort, fieldSort: data.fieldSort,
listShow: data.listShow, listShow: data.listShow.toString(),
formShow: data.formShow, formShow: data.formShow.toString(),
joinTable: data.joinTable, joinTable: data.joinTable,
joinTableField: data.joinTableField, joinTableField: data.joinTableField,
joinTableSort: data.joinTableSort, joinTableSort: data.joinTableSort,
@ -215,6 +217,9 @@
if(data.fieldType === 'leftJoin' || data.fieldType === 'innerJoin' || data.fieldType === 'rightJoin') { if(data.fieldType === 'leftJoin' || data.fieldType === 'innerJoin' || data.fieldType === 'rightJoin') {
$('#normalFieldBox').hide(); $('#normalFieldBox').hide();
$('#joinFieldBox').show(); $('#joinFieldBox').show();
if($('#joinTable').val()) {
$('#joinFieldDetailBox').show();
}
} else { } else {
$('#joinFieldBox').hide(); $('#joinFieldBox').hide();
$('#normalFieldBox').show(); $('#normalFieldBox').show();
@ -308,6 +313,125 @@
} }
}); });
}); });
// 选择联表
$(document.body).on('click', '#joinTable', function() {
var joinTable = $('#joinTable').val();
top.dialog.tree({
title: '选择关联表',
apiUri: top.restAjax.path('api/dynamicconfigtable/listtable', []),
width: '250px',
height: '400px',
dataFilter: function(treeId, parentNode, childNodes) {
for(var i = 0, item = childNodes[i]; item = childNodes[i++];) {
item.name = item.tableName;
item.id = item.tableName;
item.title = item.tableName;
}
return childNodes;
},
selectedNodes: [{
id: joinTable,
name: joinTable,
title: joinTable
}],
onClose: function() {
var selectNodes = top.dialog.dialogTreeData.selectedNodes;
if(typeof(selectNodes) != 'undefined' && selectNodes != null) {
if(selectNodes.length > 0) {
$('#joinTable').val(selectNodes[0].id);
$('#joinTableField').val(selectNodes[0].id +'Id');
$('#joinFieldDetailBox').show();
} else {
$('#joinTable').val('');
$('#joinTableField').val('');
$('#joinFieldDetailBox').hide();
}
}
}
});
});
/**
* 选择字段
* @param isList 是否列表
*/
function selectJoinField(isList) {
var check = null;
var selectedNodes = [];
if(isList) {
check = {
enable: true,
selectType: 'checkbox',
checkboxType: {Y: 'ps', N: 'ps'},
radioType: 'level',
}
var joinTableListShow = $('#joinTableListShow').val();
if(joinTableListShow) {
var joinTableListShowArray = joinTableListShow.split(',');
for(var i = 0, item; item = joinTableListShowArray[i++];) {
selectedNodes.push({
id: item,
name: item,
title: item
})
}
}
} else {
var joinTableFormShow = $('#joinTableFormShow').val();
selectedNodes.push({
id: joinTableFormShow,
name: joinTableFormShow,
title: joinTableFormShow
});
}
top.dialog.tree({
title: '选择联表显示字段',
apiUri: top.restAjax.path('api/dynamicconfigtable/dynamicconfigform/listform/{tableName}', [$('#joinTable').val()]),
width: '250px',
height: '400px',
dataFilter: function(treeId, parentNode, childNodes) {
for(var i = 0, item = childNodes[i]; item = childNodes[i++];) {
item.name = item.fieldName;
item.id = item.fieldName;
item.title = item.fieldName;
}
return childNodes;
},
check: check,
selectedNodes: selectedNodes,
onClose: function() {
var selectNodes = top.dialog.dialogTreeData.selectedNodes;
if(typeof(selectNodes) != 'undefined' && selectNodes != null) {
if(selectNodes.length > 0) {
var selectNodeValue = '';
for(var j = 0, selectNode = selectNodes[j]; selectNode = selectNodes[j++];) {
if(selectNodeValue.length > 0) {
selectNodeValue += ',';
}
selectNodeValue += selectNode.id;
}
if(isList) {
$('#joinTableListShow').val(selectNodeValue);
} else {
$('#joinTableFormShow').val(selectNodeValue);
}
} else {
if(isList) {
$('#joinTableListShow').val('');
} else {
$('#joinTableFormShow').val('');
}
}
}
}
});
}
$(document.body).on('click', '#joinTableListShow', function() {
selectJoinField(true);
});
$(document.body).on('click', '#joinTableFormShow', function() {
selectJoinField(false);
});
$('.close').on('click', function() { $('.close').on('click', function() {
closeBox(); closeBox();
}); });

View File

@ -106,6 +106,7 @@
</script> </script>
</div> </div>
</div> </div>
<!--/* 选择人员 */-->
<div class="layui-form-item" th:if="${dynamicFormFormShowFieldDTO.fieldType eq 'selectUser'}"> <div class="layui-form-item" th:if="${dynamicFormFormShowFieldDTO.fieldType eq 'selectUser'}">
<label class="layui-form-label" th:text="${dynamicFormFormShowFieldDTO.fieldExplain}"></label> <label class="layui-form-label" th:text="${dynamicFormFormShowFieldDTO.fieldExplain}"></label>
<div class="layui-input-block"> <div class="layui-input-block">
@ -113,6 +114,7 @@
<input type="text" th:id="${dynamicFormFormShowFieldDTO.fieldName +'SelectUser'}" class="layui-input" th:placeholder="${'请选择'+ dynamicFormFormShowFieldDTO.fieldExplain}" th:attr="data-name=${dynamicFormFormShowFieldDTO.fieldName}" readonly style="cursor:pointer;"> <input type="text" th:id="${dynamicFormFormShowFieldDTO.fieldName +'SelectUser'}" class="layui-input" th:placeholder="${'请选择'+ dynamicFormFormShowFieldDTO.fieldExplain}" th:attr="data-name=${dynamicFormFormShowFieldDTO.fieldName}" readonly style="cursor:pointer;">
</div> </div>
</div> </div>
<!--/* 选择部门 */-->
<div class="layui-form-item" th:if="${dynamicFormFormShowFieldDTO.fieldType eq 'selectDepartment'}"> <div class="layui-form-item" th:if="${dynamicFormFormShowFieldDTO.fieldType eq 'selectDepartment'}">
<label class="layui-form-label" th:text="${dynamicFormFormShowFieldDTO.fieldExplain}"></label> <label class="layui-form-label" th:text="${dynamicFormFormShowFieldDTO.fieldExplain}"></label>
<div class="layui-input-block"> <div class="layui-input-block">
@ -120,6 +122,19 @@
<input type="text" th:id="${dynamicFormFormShowFieldDTO.fieldName +'SelectDepartment'}" class="layui-input" th:placeholder="${'请选择'+ dynamicFormFormShowFieldDTO.fieldExplain}" th:attr="data-name=${dynamicFormFormShowFieldDTO.fieldName}" readonly style="cursor:pointer;"> <input type="text" th:id="${dynamicFormFormShowFieldDTO.fieldName +'SelectDepartment'}" class="layui-input" th:placeholder="${'请选择'+ dynamicFormFormShowFieldDTO.fieldExplain}" th:attr="data-name=${dynamicFormFormShowFieldDTO.fieldName}" readonly style="cursor:pointer;">
</div> </div>
</div> </div>
<!--/* 选择联表 */-->
<div class="layui-form-item" th:if="${dynamicFormFormShowFieldDTO.fieldType eq 'leftJoin' or dynamicFormFormShowFieldDTO.fieldType eq 'innerJoin' or dynamicFormFormShowFieldDTO.fieldType eq 'rightJoin'}">
<label class="layui-form-label" th:text="${dynamicFormFormShowFieldDTO.fieldExplain}"></label>
<div class="layui-input-block layui-form" th:id="${dynamicFormFormShowFieldDTO.fieldName} +'TemplateBox'" th:attr="lay-filter=${dynamicFormFormShowFieldDTO.fieldName} +'TemplateBox'"></div>
<script th:id="${dynamicFormFormShowFieldDTO.fieldName} +'Template'" type="text/html">
<select th:name="${dynamicFormFormShowFieldDTO.fieldName}">
<option value="" th:text="'选择'+ ${dynamicFormFormShowFieldDTO.fieldExplain}"></option>
{{# for(var i = 0, item; item = d[i++];) { }}
<option th:value="'{{item.'+ ${dynamicFormFormShowFieldDTO.joinTable} +'Id}}'" th:text="'{{item.'+ ${dynamicFormFormShowFieldDTO.joinTableFormShow} +'}}'"></option>
{{# } }}
</select>
</script>
</div>
</div> </div>
<div class="layui-form-item layui-layout-admin"> <div class="layui-form-item layui-layout-admin">
@ -343,6 +358,15 @@
} }
}); });
}); });
} else if(item.fieldType === 'leftJoin' || item.fieldType === 'innerJoin' || item.fieldType === 'rightJoin') {
top.restAjax.get(top.restAjax.path('api/dynamicdata/listdynamicdata/{tableName}', [item.joinTable]), {}, {fieldName: item.fieldName}, function(code, data, args) {
laytpl(document.getElementById(args.fieldName +'Template').innerHTML).render(data, function(html) {
document.getElementById(args.fieldName +'TemplateBox').innerHTML = html;
});
form.render('select', args.fieldName +'TemplateBox');
}, function(code, data) {
top.dialog.msg(data.msg);
});
} }
} }
} }

View File

@ -106,6 +106,7 @@
</script> </script>
</div> </div>
</div> </div>
<!--/* 选择人员 */-->
<div class="layui-form-item" th:if="${dynamicFormFormShowFieldDTO.fieldType eq 'selectUser'}"> <div class="layui-form-item" th:if="${dynamicFormFormShowFieldDTO.fieldType eq 'selectUser'}">
<label class="layui-form-label" th:text="${dynamicFormFormShowFieldDTO.fieldExplain}"></label> <label class="layui-form-label" th:text="${dynamicFormFormShowFieldDTO.fieldExplain}"></label>
<div class="layui-input-block"> <div class="layui-input-block">
@ -113,6 +114,7 @@
<input type="text" th:id="${dynamicFormFormShowFieldDTO.fieldName +'SelectUser'}" class="layui-input" th:placeholder="${'请选择'+ dynamicFormFormShowFieldDTO.fieldExplain}" th:attr="data-name=${dynamicFormFormShowFieldDTO.fieldName}" readonly style="cursor:pointer;"> <input type="text" th:id="${dynamicFormFormShowFieldDTO.fieldName +'SelectUser'}" class="layui-input" th:placeholder="${'请选择'+ dynamicFormFormShowFieldDTO.fieldExplain}" th:attr="data-name=${dynamicFormFormShowFieldDTO.fieldName}" readonly style="cursor:pointer;">
</div> </div>
</div> </div>
<!--/* 选择部门 */-->
<div class="layui-form-item" th:if="${dynamicFormFormShowFieldDTO.fieldType eq 'selectDepartment'}"> <div class="layui-form-item" th:if="${dynamicFormFormShowFieldDTO.fieldType eq 'selectDepartment'}">
<label class="layui-form-label" th:text="${dynamicFormFormShowFieldDTO.fieldExplain}"></label> <label class="layui-form-label" th:text="${dynamicFormFormShowFieldDTO.fieldExplain}"></label>
<div class="layui-input-block"> <div class="layui-input-block">
@ -120,6 +122,19 @@
<input type="text" th:id="${dynamicFormFormShowFieldDTO.fieldName +'SelectDepartment'}" class="layui-input" th:placeholder="${'请选择'+ dynamicFormFormShowFieldDTO.fieldExplain}" th:attr="data-name=${dynamicFormFormShowFieldDTO.fieldName}" readonly style="cursor:pointer;"> <input type="text" th:id="${dynamicFormFormShowFieldDTO.fieldName +'SelectDepartment'}" class="layui-input" th:placeholder="${'请选择'+ dynamicFormFormShowFieldDTO.fieldExplain}" th:attr="data-name=${dynamicFormFormShowFieldDTO.fieldName}" readonly style="cursor:pointer;">
</div> </div>
</div> </div>
<!--/* 选择联表 */-->
<div class="layui-form-item" th:if="${dynamicFormFormShowFieldDTO.fieldType eq 'leftJoin' or dynamicFormFormShowFieldDTO.fieldType eq 'innerJoin' or dynamicFormFormShowFieldDTO.fieldType eq 'rightJoin'}">
<label class="layui-form-label" th:text="${dynamicFormFormShowFieldDTO.fieldExplain}"></label>
<div class="layui-input-block layui-form" th:id="${dynamicFormFormShowFieldDTO.fieldName} +'TemplateBox'" th:attr="lay-filter=${dynamicFormFormShowFieldDTO.fieldName} +'TemplateBox'"></div>
<script th:id="${dynamicFormFormShowFieldDTO.fieldName} +'Template'" type="text/html">
<select th:name="${dynamicFormFormShowFieldDTO.fieldName}">
<option value="" th:text="'选择'+ ${dynamicFormFormShowFieldDTO.fieldExplain}"></option>
{{# for(var i = 0, item; item = d[i++];) { }}
<option th:value="'{{item.'+ ${dynamicFormFormShowFieldDTO.joinTable} +'Id}}'" th:text="'{{item.'+ ${dynamicFormFormShowFieldDTO.joinTableFormShow} +'}}'"></option>
{{# } }}
</select>
</script>
</div>
</div> </div>
<div class="layui-form-item layui-layout-admin"> <div class="layui-form-item layui-layout-admin">
@ -398,6 +413,20 @@
} }
}); });
}); });
} else if(item.fieldType === 'leftJoin' || item.fieldType === 'innerJoin' || item.fieldType === 'rightJoin') {
top.restAjax.get(top.restAjax.path('api/dynamicdata/listdynamicdata/{tableName}', [item.joinTable]), {}, {fieldName: item.fieldName}, function(code, data, args) {
laytpl(document.getElementById(args.fieldName +'Template').innerHTML).render(data, function(html) {
document.getElementById(args.fieldName +'TemplateBox').innerHTML = html;
});
// 初始化选择
var formSelectData = {};
formSelectData[args.fieldName] = dataFormData[args.fieldName];
form.val('dataForm', formSelectData);
// 刷新
form.render('select', args.fieldName +'TemplateBox');
}, function(code, data) {
top.dialog.msg(data.msg);
});
} }
} }
}, function(code, data) { }, function(code, data) {

View File

@ -100,6 +100,7 @@
</script> </script>
</div> </div>
</div> </div>
<!--/* 选择人员 */-->
<div class="layui-form-item" th:if="${dynamicFormFormShowFieldDTO.fieldType eq 'selectUser'}"> <div class="layui-form-item" th:if="${dynamicFormFormShowFieldDTO.fieldType eq 'selectUser'}">
<label class="layui-form-label" th:text="${dynamicFormFormShowFieldDTO.fieldExplain}"></label> <label class="layui-form-label" th:text="${dynamicFormFormShowFieldDTO.fieldExplain}"></label>
<div class="layui-input-block"> <div class="layui-input-block">
@ -107,6 +108,7 @@
<input type="text" th:id="${dynamicFormFormShowFieldDTO.fieldName +'SelectUser'}" class="layui-input" th:placeholder="${'请选择'+ dynamicFormFormShowFieldDTO.fieldExplain}" th:attr="data-name=${dynamicFormFormShowFieldDTO.fieldName}" readonly style="cursor:pointer;"> <input type="text" th:id="${dynamicFormFormShowFieldDTO.fieldName +'SelectUser'}" class="layui-input" th:placeholder="${'请选择'+ dynamicFormFormShowFieldDTO.fieldExplain}" th:attr="data-name=${dynamicFormFormShowFieldDTO.fieldName}" readonly style="cursor:pointer;">
</div> </div>
</div> </div>
<!--/* 选择部门 */-->
<div class="layui-form-item" th:if="${dynamicFormFormShowFieldDTO.fieldType eq 'selectDepartment'}"> <div class="layui-form-item" th:if="${dynamicFormFormShowFieldDTO.fieldType eq 'selectDepartment'}">
<label class="layui-form-label" th:text="${dynamicFormFormShowFieldDTO.fieldExplain}"></label> <label class="layui-form-label" th:text="${dynamicFormFormShowFieldDTO.fieldExplain}"></label>
<div class="layui-input-block"> <div class="layui-input-block">
@ -114,6 +116,19 @@
<input type="text" th:id="${dynamicFormFormShowFieldDTO.fieldName +'SelectDepartment'}" class="layui-input" th:placeholder="${'请选择'+ dynamicFormFormShowFieldDTO.fieldExplain}" th:attr="data-name=${dynamicFormFormShowFieldDTO.fieldName}" readonly style="cursor:pointer;"> <input type="text" th:id="${dynamicFormFormShowFieldDTO.fieldName +'SelectDepartment'}" class="layui-input" th:placeholder="${'请选择'+ dynamicFormFormShowFieldDTO.fieldExplain}" th:attr="data-name=${dynamicFormFormShowFieldDTO.fieldName}" readonly style="cursor:pointer;">
</div> </div>
</div> </div>
<!--/* 选择联表 */-->
<div class="layui-form-item" th:if="${dynamicFormFormShowFieldDTO.fieldType eq 'leftJoin' or dynamicFormFormShowFieldDTO.fieldType eq 'innerJoin' or dynamicFormFormShowFieldDTO.fieldType eq 'rightJoin'}">
<label class="layui-form-label" th:text="${dynamicFormFormShowFieldDTO.fieldExplain}"></label>
<div class="layui-input-block layui-form" th:id="${dynamicFormFormShowFieldDTO.fieldName} +'TemplateBox'" th:attr="lay-filter=${dynamicFormFormShowFieldDTO.fieldName} +'TemplateBox'"></div>
<script th:id="${dynamicFormFormShowFieldDTO.fieldName} +'Template'" type="text/html">
<select th:name="${dynamicFormFormShowFieldDTO.fieldName}">
<option value="" th:text="'选择'+ ${dynamicFormFormShowFieldDTO.fieldExplain}"></option>
{{# for(var i = 0, item; item = d[i++];) { }}
<option th:value="'{{item.'+ ${dynamicFormFormShowFieldDTO.joinTable} +'Id}}'" th:text="'{{item.'+ ${dynamicFormFormShowFieldDTO.joinTableFormShow} +'}}'"></option>
{{# } }}
</select>
</script>
</div>
</div> </div>
<div class="layui-form-item layui-layout-admin"> <div class="layui-form-item layui-layout-admin">
@ -397,6 +412,20 @@
} }
}); });
}); });
} else if(item.fieldType === 'leftJoin' || item.fieldType === 'innerJoin' || item.fieldType === 'rightJoin') {
top.restAjax.get(top.restAjax.path('api/dynamicdata/listdynamicdata/{tableName}', [item.joinTable]), {}, {fieldName: item.fieldName}, function(code, data, args) {
laytpl(document.getElementById(args.fieldName +'Template').innerHTML).render(data, function(html) {
document.getElementById(args.fieldName +'TemplateBox').innerHTML = html;
});
// 初始化选择
var formSelectData = {};
formSelectData[args.fieldName] = dataFormData[args.fieldName];
form.val('dataForm', formSelectData);
// 刷新
form.render('select', args.fieldName +'TemplateBox');
}, function(code, data) {
top.dialog.msg(data.msg);
});
} }
} }
}, function(code, data) { }, function(code, data) {