新增:数据资源表编辑表单支持字段配置

master
Guo XIn 1 year ago
parent 5f912be209
commit 7005a36be6
  1. 8
      shandan-bianmu/src/main/java/com/keyware/shandan/bianmu/controller/MetadataController.java
  2. 3
      shandan-bianmu/src/main/resources/static/js/business/metadata/edit.js
  3. 31
      shandan-bianmu/src/main/resources/view/business/metadata/metadataEdit.html
  4. 7
      shandan-common/src/main/resources/static/js/common/layui/extend/dict.js
  5. 4
      shandan-common/src/main/resources/view/common/head.html
  6. 13
      shandan-system/src/main/java/com/keyware/shandan/frame/aspect/SafetyAspect.java
  7. 10
      shandan-system/src/main/java/com/keyware/shandan/system/entity/SysFormConfig.java
  8. 13
      shandan-system/src/main/resources/static/js/sys/form/formConfig.js

@ -14,7 +14,9 @@ import com.keyware.shandan.common.enums.SecretLevel;
import com.keyware.shandan.common.util.StreamUtil;
import com.keyware.shandan.common.util.StringUtils;
import com.keyware.shandan.system.entity.SysFile;
import com.keyware.shandan.system.entity.SysFormConfig;
import com.keyware.shandan.system.service.SysFileService;
import com.keyware.shandan.system.service.SysFormConfigService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;
@ -46,6 +48,9 @@ public class MetadataController extends BaseController<MetadataService, Metadata
@Autowired
private DataLabelsService labelsService;
@Autowired
private SysFormConfigService formConfigService;
@GetMapping("/")
public ModelAndView index(ModelAndView mov) {
mov.setViewName("business/metadata/metadata");
@ -93,6 +98,9 @@ public class MetadataController extends BaseController<MetadataService, Metadata
public ModelAndView edit(ModelAndView mav) {
mav.setViewName("business/metadata/metadataEdit");
mav.addObject("LabelConfigSet", labelsService.formConfigList());
QueryWrapper<SysFormConfig> query = new QueryWrapper<>();
query.eq("FORM_TYPE", 1);
mav.addObject("metadataFormConfig", formConfigService.list(query));
return mav;
}

@ -276,9 +276,10 @@ layui.use(['form', 'layer', 'editPage', 'laytpl', 'laydate', 'element', 'table',
layui.dict.setData('dict-secret-level', data);
}
console.info(new Date().getTime())
//日期选择器
laydate.render({
elem: '#collectionTime',
elem: 'input[name="collectionTime"]',
type: 'datetime',
value: new Date(),
format: "yyyy-MM-dd HH:mm:ss"

@ -34,7 +34,27 @@
<div class="layui-form-item">
<div id="metadataTablesTab"><label style="color: red">* 请先选择数据表</label></div>
</div>
<div class="layui-form-item">
<div class="layui-form-item" th:each="field,iterStat : ${metadataFormConfig}" th:if="${field.isShow}">
<label class="layui-form-label" th:text="${field.showTitle}">字段名称</label>
<div class="layui-input-block">
<input type="hidden" name="metadataComment" th:if="${field.fieldName == 'metadataName'}">
<!-- 文本框输入框类型 -->
<input class="layui-input" type="text" autocomplete="off"
th:if="${field.fieldType == 'input'}"
th:name="${field.fieldName}"
th:disabled="${field.isDisabled}"
th:placeholder="${field.showTitle}"
th:lay-verify="${field.isRequired ? 'required' : ''}">
<!-- 数据字典类型 -->
<div dict-component="select"
th:if="${field.fieldType == 'dict'}"
th:disabled="${field.isDisabled}"
th:dict-type="${field.dictType}"
th:dict-name="${field.fieldName}"
th:id="${'dict-'+field.fieldName}"></div>
</div>
</div>
<!--<div class="layui-form-item">
<label class="layui-form-label">数据名称</label>
<div class="layui-input-block">
<input type="hidden" name="metadataComment">
@ -76,7 +96,7 @@
<input type="text" name="themeTask" autocomplete="off" placeholder="主题任务"
class="layui-input">
</div>
</div>
</div>-->
<div class="layui-form-item" th:each="labelSet, iterState:${LabelConfigSet}">
<label class="layui-form-label" th:text="${labelSet.fieldTitle}">标签类型</label>
<div class="layui-input-block label-set-component"
@ -88,8 +108,10 @@
th:data-label-title-path="${labelSet.labelTitlePath}"></div>
</div>
<div class="layui-form-item other-label-item">
<label class="layui-form-label"><a class="label-type choose-data add-other" id="addOtherLabelBtn">添加</a>其他标签</label>
<div class="layui-input-block label-set-component other-label" th:data-field-title="其他标签"></div>
<label class="layui-form-label"><a class="label-type choose-data add-other"
id="addOtherLabelBtn">添加</a>其他标签</label>
<div class="layui-input-block label-set-component other-label"
th:data-field-title="其他标签"></div>
</div>
<!-- 隐藏域 -->
<input type="text" name="id" hidden="hidden"/>
@ -147,6 +169,5 @@
{{# } }}
</script>
<!-- js -->
<script th:src="@{/js/business/mark/markTag.js}"></script>
<script th:src="@{/js/business/metadata/edit.js}"></script>
</html>

@ -52,6 +52,7 @@ layui.define(['form'], function (exports) {
data = '';// 选中的数据
change;// 数据改变后的回调函数
readonly;// 是否只读
disabled; // 是否禁用
width;// 宽度
constructor(type, options) {
@ -82,6 +83,7 @@ layui.define(['form'], function (exports) {
this.change = options.onchange || function () {
};
this.readonly = options.readonly;
this.disabled = options.disabled;
this.width = options.width || 'fit-content';
// 开始渲染
@ -249,7 +251,7 @@ layui.define(['form'], function (exports) {
}
let nodes_html = nodes.join('');
return `<select id="${_this.id}" name="${_this.name}" lay-filter="${_this.id}">${nodes_html}</select>`;
return `<select id="${_this.id}" name="${_this.name}" lay-filter="${_this.id}" ${_this.readonly ? 'readonly="readonly"' : ''} ${_this.disabled ? 'disabled="disabled"' : ''}>${nodes_html}</select>`;
}
/**
@ -304,11 +306,12 @@ layui.define(['form'], function (exports) {
type = _elem.attr('dict-type'),
dictType = _elem.attr('dict-component'),
readonly = _elem.attr('readonly'),
disabled = _elem.attr('disabled'),
data = _elem.attr('data'),
width = _elem.attr('dict-width'),
formFilter = getFormElementFilter(_elem);
let option = {elem, id, name, type, formFilter, readonly, data, width};
let option = {elem, id, name, type, formFilter, readonly, disabled, data, width};
new DictComponent(dictType, option)
});
}

@ -34,6 +34,10 @@
USER_ROLES.push(role.roleName);
}
}
// 表单配置
const METADATA_FORM_CONFIG = /*[[${metadataFormConfig}]]*/ [];
const FILEUPLOAD_FORM_CONFIG = /*[[${uploadFormConfig}]]*/ [];
</script>
<!-- 引入公用库 -->

@ -6,8 +6,10 @@ import com.keyware.shandan.common.entity.Result;
import com.keyware.shandan.common.util.*;
import com.keyware.shandan.frame.config.security.SecurityUtil;
import com.keyware.shandan.frame.properties.CustomProperties;
import com.keyware.shandan.system.entity.SysFormConfig;
import com.keyware.shandan.system.entity.SysRole;
import com.keyware.shandan.system.entity.SysUser;
import com.keyware.shandan.system.service.SysFormConfigService;
import com.keyware.shandan.system.service.SysRoleService;
import com.keyware.shandan.system.utils.SysSettingUtil;
import lombok.extern.slf4j.Slf4j;
@ -25,7 +27,9 @@ import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
/**
* AES + RSA 加解密AOP处理
@ -44,6 +48,9 @@ public class SafetyAspect {
@Autowired
private SysRoleService sysRoleService;
@Autowired
private SysFormConfigService formConfigService;
/**
* Pointcut 切入点
*/
@ -121,6 +128,10 @@ public class SafetyAspect {
}
//展示用户角色
modelAndView.addObject("userRole", userRoles.get(index));
List<SysFormConfig> formConfigList = formConfigService.list();
modelAndView.addObject("metadataFormConfig", formConfigList.stream().filter(conf -> conf.getFormType() == 1).collect(Collectors.toList()));
modelAndView.addObject("uploadFormConfig", formConfigList.stream().filter(conf -> conf.getFormType() == 2).collect(Collectors.toList()));
setStaticResourceAddress(request, modelAndView);
}
return result;

@ -26,17 +26,21 @@ public class SysFormConfig extends BaseEntity {
*/
private Integer formType;
/**
* 字段标题
* 字段
*/
private String fieldTitle;
private String fieldName;
/**
* 字段标题
* 字段显示标题
*/
private String showTitle;
/**
* 字段类型
*/
private String fieldType;
/**
* 数据字典类型只有当fieldType为"dict"时才有效
*/
private String dictType;
/**
* 默认值
*/

@ -18,9 +18,10 @@ class FormConfigComponent {
page: false,
cols: [[
{field: 'id', hide: true},
{field: 'fieldTitle', title: '字段'},
{field: 'fieldName', title: '字段'},
{field: 'showTitle', title: '显示的标题', edit: 'text'},
{field: 'fieldType', title: '字段类型', hide: true},
{field: 'dictType', title: '数据字典', hide: true},
{field: 'defaultValue', title: '默认值', edit: 'text', hide: true},
{
field: 'isRequired',
@ -68,14 +69,10 @@ class FormConfigComponent {
}
}
switchChangeListen({elem, value}) {
switchChangeListen({elem}) {
const id = $(elem).attr('id'), name = $(elem).attr('name');
this.dataMap.get(id)[name] = Boolean(value);
this.consoleDataMap();
}
consoleDataMap() {
console.info(this.dataMap);
const value = this.dataMap.get(id)[name];
this.dataMap.get(id)[name] = !value;
}
}