diff --git a/backend/src/main/java/io/dataease/auth/aop/DePermissionAnnotationHandler.java b/backend/src/main/java/io/dataease/auth/aop/DePermissionAnnotationHandler.java index 71d09e393b..8756836a95 100644 --- a/backend/src/main/java/io/dataease/auth/aop/DePermissionAnnotationHandler.java +++ b/backend/src/main/java/io/dataease/auth/aop/DePermissionAnnotationHandler.java @@ -14,6 +14,7 @@ import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.reflect.MethodSignature; import org.springframework.stereotype.Component; + import java.lang.reflect.Array; import java.lang.reflect.Method; import java.util.*; @@ -24,14 +25,13 @@ import java.util.stream.Collectors; public class DePermissionAnnotationHandler { @Around(value = "@annotation(io.dataease.auth.annotation.DePermissions)") - public Object PermissionsAround(ProceedingJoinPoint point) throws Throwable{ + public Object PermissionsAround(ProceedingJoinPoint point) throws Throwable { if (AuthUtils.getUser().getIsAdmin()) { return point.proceed(point.getArgs()); } Boolean access = false; try { - MethodSignature ms = (MethodSignature) point.getSignature(); Method method = ms.getMethod(); DePermissions annotation = method.getAnnotation(DePermissions.class); @@ -66,17 +66,15 @@ public class DePermissionAnnotationHandler { throw exceptions.get(0); } } - } catch (Throwable throwable) { LogUtil.error(throwable.getMessage(), throwable); throw new RuntimeException(throwable.getMessage()); } - return access ? point.proceed(point.getArgs()) : null; } @Around(value = "@annotation(io.dataease.auth.annotation.DePermission)") - public Object PermissionAround(ProceedingJoinPoint point) throws Throwable{ + public Object PermissionAround(ProceedingJoinPoint point) throws Throwable { Boolean access = false; try { if (AuthUtils.getUser().getIsAdmin()) { @@ -84,7 +82,6 @@ public class DePermissionAnnotationHandler { } MethodSignature ms = (MethodSignature) point.getSignature(); Method method = ms.getMethod(); - DePermission annotation = method.getAnnotation(DePermission.class); Object arg = point.getArgs()[annotation.paramIndex()]; if (access(arg, annotation, 0)) { @@ -94,7 +91,6 @@ public class DePermissionAnnotationHandler { LogUtil.error(throwable.getMessage(), throwable); throw new RuntimeException(throwable.getMessage()); } - return access ? point.proceed(point.getArgs()) : null; } @@ -104,10 +100,8 @@ public class DePermissionAnnotationHandler { String type = annotation.type().name().toLowerCase(); String value = annotation.value(); Integer requireLevel = annotation.level().getLevel(); - Set resourceIds = AuthUtils.permissionByType(type).stream().filter( item -> item.getLevel() >= requireLevel).map(AuthItem::getAuthSource).collect(Collectors.toSet()); - Class parameterType = arg.getClass(); if (parameterType.isPrimitive() || ReflectUtil.isWrapClass(parameterType) || ReflectUtil.isString(parameterType)) { boolean permissionValid = resourceIds.contains(arg); @@ -122,7 +116,6 @@ public class DePermissionAnnotationHandler { return false; } } - } else if (ReflectUtil.isCollection(parameterType)) { Object[] array = ((Collection) arg).toArray(); for (int i = 0; i < array.length; i++) { @@ -140,14 +133,10 @@ public class DePermissionAnnotationHandler { // 当作自定义类处理 String[] values = value.split("\\."); String fieldName = values[layer]; - Object fieldValue = ReflectUtil.getFieldValue(arg, fieldName); return access(fieldValue, annotation, ++layer); } return true; } - - - } diff --git a/backend/src/main/java/io/dataease/auth/aop/DePermissionProxyHandler.java b/backend/src/main/java/io/dataease/auth/aop/DePermissionProxyHandler.java index f2b8e0818d..b37dc86f11 100644 --- a/backend/src/main/java/io/dataease/auth/aop/DePermissionProxyHandler.java +++ b/backend/src/main/java/io/dataease/auth/aop/DePermissionProxyHandler.java @@ -35,21 +35,13 @@ public class DePermissionProxyHandler { Object[] args = point.getArgs(); if (null == args || args.length == 0) { return point.proceed(args); - } Object arg = point.getArgs()[annotation.paramIndex()]; - /* - * if (arg instanceof PermissionProxy) { - * PermissionProxy proxy = (PermissionProxy) arg; - * AuthUtils.setProxyUser(proxy.getUserId()); - * } - */ PermissionProxy proxy = getProxy(arg, annotation, 0); if (null != proxy && null != proxy.getUserId()) { AuthUtils.setProxyUser(proxy.getUserId()); } return point.proceed(args); - } catch (Throwable throwable) { LogUtil.error(throwable.getMessage(), throwable); /* throw new RuntimeException(throwable.getMessage()); */ @@ -69,26 +61,8 @@ public class DePermissionProxyHandler { if (arg instanceof PermissionProxy) { return (PermissionProxy) arg; } else if (isArray(parameterType)) { - /* - * for (int i = 0; i < Array.getLength(arg); i++) { - * Object o = Array.get(arg, i); - * if ((result = getProxy(o, annotation, layer)) != null) { - * return result; - * } - * } - */ return null; - } else if (isCollection(parameterType)) { - /* - * Object[] array = ((Collection) arg).toArray(); - * for (int i = 0; i < array.length; i++) { - * Object o = array[i]; - * if ((result = getProxy(o, annotation, layer)) != null) { - * return result; - * } - * } - */ return null; } else if (isMap(parameterType)) { Map argMap = (Map) arg; @@ -99,10 +73,8 @@ public class DePermissionProxyHandler { // 当作自定义类处理 String[] values = value.split("\\."); String fieldName = values[layer]; - Object fieldValue = getFieldValue(arg, fieldName); return getProxy(fieldValue, annotation, ++layer); - } } diff --git a/backend/src/main/java/io/dataease/commons/filter/SqlFilter.java b/backend/src/main/java/io/dataease/commons/filter/SqlFilter.java index d97a0133f0..1c29391c09 100644 --- a/backend/src/main/java/io/dataease/commons/filter/SqlFilter.java +++ b/backend/src/main/java/io/dataease/commons/filter/SqlFilter.java @@ -16,8 +16,6 @@ public class SqlFilter implements Filter { @Override public void destroy() { - // TODO Auto-generated method stub - } @Override @@ -43,9 +41,7 @@ public class SqlFilter implements Filter { if (xssRequest.checkXSSAndSql(param)) { response.setCharacterEncoding("UTF-8"); response.setContentType("application/json;charset=UTF-8"); - // PrintWriter out = response.getWriter(); String msg = ThreadLocalContextHolder.getData().toString(); - // out.write(msg); DEException.throwException(msg); return; } @@ -54,9 +50,7 @@ public class SqlFilter implements Filter { if (xssRequest.checkParameter()) { response.setCharacterEncoding("UTF-8"); response.setContentType("application/json;charset=UTF-8"); - // PrintWriter out = response.getWriter(); String msg = ThreadLocalContextHolder.getData().toString(); - // out.write(msg); DEException.throwException(msg); return; } diff --git a/backend/src/main/java/io/dataease/commons/wrapper/XssAndSqlHttpServletRequestWrapper.java b/backend/src/main/java/io/dataease/commons/wrapper/XssAndSqlHttpServletRequestWrapper.java index 9d0ba67449..973d0173e1 100644 --- a/backend/src/main/java/io/dataease/commons/wrapper/XssAndSqlHttpServletRequestWrapper.java +++ b/backend/src/main/java/io/dataease/commons/wrapper/XssAndSqlHttpServletRequestWrapper.java @@ -243,22 +243,12 @@ public class XssAndSqlHttpServletRequestWrapper extends HttpServletRequestWrappe ThreadLocalContextHolder.setData("包含SQL注入的参数,请检查参数!"); return true; } - // NOTE: It's highly recommended to use the ESAPI library and - // uncomment the following line to - // avoid encoded attacks. - // value = ESAPI.encoder().canonicalize(value); - // Avoid null characters - /** value = value.replaceAll("", ""); ***/ - // Avoid anything between script tags Pattern scriptPattern = Pattern.compile( "<[\r\n| | ]*script[\r\n| | ]*>(.*?)", Pattern.CASE_INSENSITIVE); flag = scriptPattern.matcher(value).find(); if (flag) { return flag; } - // Avoid anything in a - // src="http://www.yihaomen.com/article/java/..." type of - // e-xpression scriptPattern = Pattern.compile("src[\r\n| | ]*=[\r\n| | ]*[\\\"|\\\'](.*?)[\\\"|\\\']", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL); flag = scriptPattern.matcher(value).find(); diff --git a/backend/src/main/java/io/dataease/controller/panel/PanelViewController.java b/backend/src/main/java/io/dataease/controller/panel/PanelViewController.java index 7ef81db1bc..84c6f2e136 100644 --- a/backend/src/main/java/io/dataease/controller/panel/PanelViewController.java +++ b/backend/src/main/java/io/dataease/controller/panel/PanelViewController.java @@ -1,14 +1,7 @@ package io.dataease.controller.panel; import com.github.xiaoymin.knife4j.annotations.ApiSupport; -import io.dataease.plugins.common.base.domain.PanelGroup; -import io.dataease.plugins.common.base.domain.PanelGroupWithBLOBs; -import io.dataease.controller.handler.annotation.I18n; -import io.dataease.controller.request.panel.PanelGroupRequest; -import io.dataease.dto.chart.ChartViewDTO; -import io.dataease.dto.panel.PanelGroupDTO; import io.dataease.dto.panel.PanelViewTableDTO; -import io.dataease.service.panel.PanelGroupService; import io.dataease.service.panel.PanelViewService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; diff --git a/backend/src/main/java/io/dataease/controller/sys/SysPluginController.java b/backend/src/main/java/io/dataease/controller/sys/SysPluginController.java index ca0fe4e144..c9a0992f59 100644 --- a/backend/src/main/java/io/dataease/controller/sys/SysPluginController.java +++ b/backend/src/main/java/io/dataease/controller/sys/SysPluginController.java @@ -50,9 +50,4 @@ public class SysPluginController { return pluginService.uninstall(pluginId); } -// @ApiOperation("切换插件状态") -// @PostMapping("/changeStatus") -// public Boolean changeStatus(@RequestBody PluginStatus pluginStatus) { -// return pluginService.changeStatus(pluginStatus.getPluginId(), pluginStatus.getStatus()); -// } } diff --git a/backend/src/main/java/io/dataease/ext/ExtChartViewMapper.java b/backend/src/main/java/io/dataease/ext/ExtChartViewMapper.java index b3e5093a27..cb7467f896 100644 --- a/backend/src/main/java/io/dataease/ext/ExtChartViewMapper.java +++ b/backend/src/main/java/io/dataease/ext/ExtChartViewMapper.java @@ -12,8 +12,6 @@ import java.util.List; public interface ExtChartViewMapper { List search(ChartViewRequest request); -// ChartViewDTO searchOne(ChartViewRequest request); - void chartCopy(@Param("newChartId")String newChartId,@Param("oldChartId")String oldChartId,@Param("panelId")String panelId); @Select("select id from chart_view where table_id = #{tableId}") @@ -35,8 +33,6 @@ public interface ExtChartViewMapper { List searchViewsWithPanelId(@Param("panelId") String panelId); -// ChartViewDTO searchOneFromCache(@Param("id") String id ); - void copyToCache(@Param("id") String id ); void deleteCacheWithPanel(@Param("viewIds") List viewIds,@Param("panelId") String panelId ); diff --git a/backend/src/main/java/io/dataease/ext/ExtPanelGroupMapper.xml b/backend/src/main/java/io/dataease/ext/ExtPanelGroupMapper.xml index ae3601f748..22e01ad9fc 100644 --- a/backend/src/main/java/io/dataease/ext/ExtPanelGroupMapper.xml +++ b/backend/src/main/java/io/dataease/ext/ExtPanelGroupMapper.xml @@ -91,9 +91,6 @@ and panel_group.level = #{level} - - - ORDER BY CONVERT(panel_group.name using gbk) @@ -170,9 +167,6 @@ and panel_group.level = #{level} - - - ORDER BY panel_group.node_type desc, CONVERT(panel_group.name using gbk) diff --git a/backend/src/main/java/io/dataease/service/panel/PanelGroupService.java b/backend/src/main/java/io/dataease/service/panel/PanelGroupService.java index 0e08e58ba6..791075fa0c 100644 --- a/backend/src/main/java/io/dataease/service/panel/PanelGroupService.java +++ b/backend/src/main/java/io/dataease/service/panel/PanelGroupService.java @@ -222,22 +222,16 @@ public class PanelGroupService { //清理view 和 view cache extPanelGroupMapper.deleteCircleView(id); extPanelGroupMapper.deleteCircleViewCache(id); - // 同时会删除对应默认仪表盘 extPanelGroupMapper.deleteCircle(id); storeService.removeByPanelId(id); shareService.delete(id, null); panelLinkService.deleteByResourceId(id); - - //清理跳转信息 extPanelLinkJumpMapper.deleteJumpTargetViewInfoWithPanel(id); extPanelLinkJumpMapper.deleteJumpInfoWithPanel(id); extPanelLinkJumpMapper.deleteJumpWithPanel(id); - DeLogUtils.save(sysLogDTO); - - } @@ -285,7 +279,6 @@ public class PanelGroupService { List panelIds = panelResult.stream().map(VAuthModelDTO::getId).collect(Collectors.toList()); VAuthModelRequest viewRequest = new VAuthModelRequest(); viewRequest.setPids(panelIds); -// Version 1.11 only gets the current panel List viewResult = extVAuthModelMapper.queryAuthModelViews(viewRequest); if (CollectionUtils.isNotEmpty(viewResult)) { result.addAll(viewResult); @@ -316,10 +309,6 @@ public class PanelGroupService { VAuthModelRequest viewRequest = new VAuthModelRequest(); viewRequest.setPids(panelIds); // Version 1.11 only gets the current panel -// List viewResult = extVAuthModelMapper.queryAuthModelViews(viewRequest); -// if (CollectionUtils.isNotEmpty(viewResult)) { -// result.addAll(viewResult); -// } result = TreeUtils.mergeTree(result, "panel_list"); if (AuthUtils.getUser().getIsAdmin()) { // 原有视图的目录结构 diff --git a/backend/src/main/java/io/dataease/service/panel/PanelViewService.java b/backend/src/main/java/io/dataease/service/panel/PanelViewService.java index 4a253b6321..92da5afb59 100644 --- a/backend/src/main/java/io/dataease/service/panel/PanelViewService.java +++ b/backend/src/main/java/io/dataease/service/panel/PanelViewService.java @@ -125,7 +125,6 @@ public class PanelViewService { extPanelViewMapper.savePanelView(panelViewInsertDTOList); //将视图从cache表中更新到正式表中 viewIds = panelViewInsertDTOList.stream().map(panelView -> panelView.getChartViewId()).collect(Collectors.toList()); -// extChartViewMapper.copyCacheToView(viewIds); } extChartViewMapper.deleteCacheWithPanel(viewIds, panelId); extChartViewMapper.deleteNoUseView(viewIds, panelId); diff --git a/backend/src/main/java/io/dataease/service/panel/ShareService.java b/backend/src/main/java/io/dataease/service/panel/ShareService.java index d840f10c48..398eb619d1 100644 --- a/backend/src/main/java/io/dataease/service/panel/ShareService.java +++ b/backend/src/main/java/io/dataease/service/panel/ShareService.java @@ -54,7 +54,7 @@ public class ShareService { * 5.批量新增 * 6.发送取消分享消息 * 7.发送新增分享消息 - * + * * @param panelShareFineDto */ @Transactional @@ -72,12 +72,6 @@ public class ShareService { authURDMap.put(0, authURD.getUserIds()); authURDMap.put(1, authURD.getRoleIds()); authURDMap.put(2, authURD.getDeptIds()); - - /* - * PanelShareExample example = new PanelShareExample(); - * example.createCriteria().andPanelGroupIdEqualTo(panelGroupId); - * List panelShares = mapper.selectByExample(example); - */ PanelShareSearchRequest request = new PanelShareSearchRequest(); request.setCurrentUserName(AuthUtils.getUser().getUsername()); request.setResourceId(panelGroupId); @@ -322,7 +316,7 @@ public class ShareService { /** * panel_group_id建了索引 效率不会很差 - * + * * @param panel_group_id */ @Transactional diff --git a/backend/src/main/java/io/dataease/service/sys/log/LogService.java b/backend/src/main/java/io/dataease/service/sys/log/LogService.java index fd94d87688..56eddd7a95 100644 --- a/backend/src/main/java/io/dataease/service/sys/log/LogService.java +++ b/backend/src/main/java/io/dataease/service/sys/log/LogService.java @@ -47,11 +47,6 @@ public class LogService { // 驱动文件操作 上传, 删除 private static Integer[] driver_file_ope = {11, 3}; - - // 排除驱动和驱动文件的公共操作的资源类型 - // 暂时屏蔽视图日志 - // private static Integer[] COMMON_SOURCE = {1, 2,3,4,6,7,8,9}; - private static Integer[] COMMON_SOURCE = {1, 2, 3, 6, 7, 8, 9}; // 增 改 删 针对公共资源的操作 diff --git a/backend/src/main/java/io/dataease/websocket/handler/PrincipalHandshakeHandler.java b/backend/src/main/java/io/dataease/websocket/handler/PrincipalHandshakeHandler.java index 1e456332bd..edabd24371 100644 --- a/backend/src/main/java/io/dataease/websocket/handler/PrincipalHandshakeHandler.java +++ b/backend/src/main/java/io/dataease/websocket/handler/PrincipalHandshakeHandler.java @@ -25,6 +25,5 @@ public class PrincipalHandshakeHandler extends DefaultHandshakeHandler { return new DePrincipal(userId); } return null; - //return super.determineUser(request, wsHandler, attributes); } } diff --git a/backend/src/main/java/io/dataease/websocket/util/WsUtil.java b/backend/src/main/java/io/dataease/websocket/util/WsUtil.java index 877bb97d6d..7bd8d253a2 100644 --- a/backend/src/main/java/io/dataease/websocket/util/WsUtil.java +++ b/backend/src/main/java/io/dataease/websocket/util/WsUtil.java @@ -37,10 +37,5 @@ public class WsUtil { return ONLINE_USERS.contains(userId); } - /*public static void releaseMessage(WsMessage wsMessage){ - if(ObjectUtils.isEmpty(wsMessage) || ObjectUtils.isEmpty(wsMessage.getUserId()) || ObjectUtils.isEmpty(wsMessage.getTopic())) return; - CommonBeanFactory.getBean() - }*/ - } diff --git a/frontend/src/api/map/map.js b/frontend/src/api/map/map.js index cdd49c376b..19257ef9cf 100644 --- a/frontend/src/api/map/map.js +++ b/frontend/src/api/map/map.js @@ -8,14 +8,6 @@ export const areaMapping = () => { }) } -// export function geoJson(areaCode) { -// return request({ -// url: '/api/map/resourceFull/' + areaCode, -// method: 'get', -// loading: true -// }) -// } - export function geoJson(areaCode) { return request({ url: '/geo/' + areaCode + '_full.json', diff --git a/frontend/src/api/system/dept.js b/frontend/src/api/system/dept.js index b35bb78e67..1937d17234 100644 --- a/frontend/src/api/system/dept.js +++ b/frontend/src/api/system/dept.js @@ -17,35 +17,9 @@ export function loadTable(data) { }) } -// export function addDept(data) { -// return request({ -// url: '/api/dept/create', -// method: 'post', -// data -// }) -// } - -// export function delDept(ids) { -// return request({ -// url: '/api/dept/delete', -// method: 'post', -// data: ids -// }) -// } - -// export function editDept(data) { -// return request({ -// url: '/api/dept/update', -// method: 'post', -// data -// }) -// } - export function treeByDeptId(deptId) { return request({ url: '/api/dept/nodesByDeptId/' + deptId, method: 'post' }) } - -// export default { addDept, delDept, editDept, getDeptTree, loadTable, treeByDeptId } diff --git a/frontend/src/api/system/role.js b/frontend/src/api/system/role.js deleted file mode 100644 index dd7326f889..0000000000 --- a/frontend/src/api/system/role.js +++ /dev/null @@ -1,57 +0,0 @@ -// import request from '@/utils/request' - -// export function allRoles() { -// return request({ -// url: '/api/user/all', -// method: 'post', -// loading: true -// }) -// } - -// export function roleGrid(pageIndex, pageSize, data) { -// return request({ -// url: '/api/role/roleGrid/' + pageIndex + '/' + pageSize, -// method: 'post', -// data, -// loading: true -// }) -// } - -// export function delRole(pid) { -// return request({ -// url: '/api/role/delete/' + pid, -// method: 'post' -// }) -// } - -// export function addRole(data) { -// return request({ -// url: '/api/role/create', -// method: 'post', -// data -// }) -// } - -// export function editRole(data) { -// return request({ -// url: '/api/role/update', -// method: 'post', -// data -// }) -// } - -// export function addRoleMenus(data) { -// return request({ -// url: '/api/role/saveRolesMenus', -// method: 'post', -// data -// }) -// } - -// export function menuIds(roleId) { -// return request({ -// url: '/api/role/menuIds/' + roleId, -// method: 'post' -// }) -// } -// export default { addRole, editRole, delRole, roleGrid, allRoles, addRoleMenus, menuIds } diff --git a/frontend/src/components/DeDrag/index.vue b/frontend/src/components/DeDrag/index.vue index b36271c2ca..96a4026158 100644 --- a/frontend/src/components/DeDrag/index.vue +++ b/frontend/src/components/DeDrag/index.vue @@ -31,9 +31,24 @@ ]" :style="mainSlotStyle" > - + -
+
diff --git a/frontend/src/components/DeDrag/shadow.vue b/frontend/src/components/DeDrag/shadow.vue index 9576338050..787d2d586c 100644 --- a/frontend/src/components/DeDrag/shadow.vue +++ b/frontend/src/components/DeDrag/shadow.vue @@ -1,7 +1,5 @@ diff --git a/frontend/src/components/canvas/custom-component/DeRichText.vue b/frontend/src/components/canvas/custom-component/DeRichText.vue index 24e2d34416..8903b836ea 100644 --- a/frontend/src/components/canvas/custom-component/DeRichText.vue +++ b/frontend/src/components/canvas/custom-component/DeRichText.vue @@ -33,34 +33,6 @@ import 'tinymce/plugins/nonbreaking' import 'tinymce/plugins/pagebreak' import { mapState } from 'vuex' -// const fonts = [ -// '宋体=宋体', -// '微软雅黑=微软雅黑', -// '新宋体=新宋体', -// '黑体=黑体', -// '楷体=楷体', -// '隶书=隶书', -// 'Courier New=courier new,courier', -// 'AkrutiKndPadmini=Akpdmi-n', -// 'Andale Mono=andale mono,times', -// 'Arial=arial,helvetica,sans-serif', -// 'Arial Black=arial black,avant garde', -// 'Book Antiqua=book antiqua,palatino', -// 'Comic Sans MS=comic sans ms,sans-serif', -// 'Courier New=courier new,courier', -// 'Georgia=georgia,palatino', -// 'Helvetica=helvetica', -// 'Impact=impact,chicago', -// 'Symbol=symbol', -// 'Tahoma=tahoma,arial,helvetica,sans-serif', -// 'Terminal=terminal,monaco', -// 'Times New Roman=times new roman,times', -// 'Trebuchet MS=trebuchet ms,geneva', -// 'Verdana=verdana,geneva', -// 'Webdings=webdings', -// 'Wingdings=wingdings,zapf dingbats' -// ] - export default { name: 'DeRichText', components: { @@ -106,7 +78,6 @@ export default { content_css: '/tinymce/skins/content/default/content.css', plugins: 'advlist autolink link image lists charmap media wordcount table contextmenu directionality pagebreak', // 插件 // 工具栏 - // toolbar: 'undo redo | fontsizeselect fontselect | bold italic forecolor backcolor underline strikethrough | alignleft aligncenter alignright | lists image media table link | bullist numlist ', toolbar: 'undo redo |fontselect fontsizeselect |forecolor backcolor bold italic |underline strikethrough link| formatselect |' + 'alignleft aligncenter alignright | bullist numlist |' + ' blockquote subscript superscript removeformat | table image media | fullscreen ' + diff --git a/frontend/src/components/canvas/custom-component/DeVideo.vue b/frontend/src/components/canvas/custom-component/DeVideo.vue index 826bf67038..da7590ecb2 100644 --- a/frontend/src/components/canvas/custom-component/DeVideo.vue +++ b/frontend/src/components/canvas/custom-component/DeVideo.vue @@ -26,20 +26,16 @@