diff --git a/backend/src/main/java/io/dataease/controller/datasource/DatasourceController.java b/backend/src/main/java/io/dataease/controller/datasource/DatasourceController.java index 5932e7bd14..272304b63c 100644 --- a/backend/src/main/java/io/dataease/controller/datasource/DatasourceController.java +++ b/backend/src/main/java/io/dataease/controller/datasource/DatasourceController.java @@ -86,7 +86,7 @@ public class DatasourceController { @PostMapping("/get/{id}") public DatasourceDTO getDatasource(@PathVariable String id) throws Exception { DatasourceUnionRequest request = new DatasourceUnionRequest(); - request.setUserId(String.valueOf(AuthUtils.getUser().getUserId())); + request.setUserId("1"); request.setId(id); List datasourceList = datasourceService.getDatasourceList(request); return CollectionUtils.isNotEmpty(datasourceList) ? datasourceList.get(0) : null; diff --git a/backend/src/main/java/io/dataease/controller/panel/AppLogController.java b/backend/src/main/java/io/dataease/controller/panel/AppLogController.java index f388d18a78..45a547acf3 100644 --- a/backend/src/main/java/io/dataease/controller/panel/AppLogController.java +++ b/backend/src/main/java/io/dataease/controller/panel/AppLogController.java @@ -21,24 +21,31 @@ import java.util.List; @RestController @Api(tags = "应用市场:应用日志") @ApiSupport(order = 220) -@RequestMapping("/app/log") +@RequestMapping("app/log") public class AppLogController { @Resource - private AppLogService applogService; + private AppLogService appLogService; @I18n @ApiOperation("查询日志") @PostMapping("/logGrid/{goPage}/{pageSize}") @ApiImplicitParams({ - @ApiImplicitParam(paramType = "path", name = "goPage", value = "页码", required = true, dataType = "Integer"), - @ApiImplicitParam(paramType = "path", name = "pageSize", value = "页容量", required = true, dataType = "Integer"), - @ApiImplicitParam(name = "request", value = "查询条件", required = true) + @ApiImplicitParam(paramType = "path", name = "goPage", value = "页码", required = true, dataType = "Integer"), + @ApiImplicitParam(paramType = "path", name = "pageSize", value = "页容量", required = true, dataType = "Integer"), + @ApiImplicitParam(name = "request", value = "查询条件", required = true) }) public Pager> logGrid(@PathVariable int goPage, @PathVariable int pageSize, @RequestBody KeyGridRequest request) { Page page = PageHelper.startPage(goPage, pageSize, true); - return PageUtils.setPageInfo(page, applogService.query(request)); + return PageUtils.setPageInfo(page, appLogService.query(request)); + } + + + @ApiOperation("删除日志和资源") + @PostMapping("/deleteLog") + public void deleteLogAndResource(@RequestBody AppLogGridDTO request) throws Exception { + appLogService.deleteLogAndResource(request); } } diff --git a/backend/src/main/java/io/dataease/controller/panel/PanelGroupController.java b/backend/src/main/java/io/dataease/controller/panel/PanelGroupController.java index b9c2cc1dbb..b361b5d725 100644 --- a/backend/src/main/java/io/dataease/controller/panel/PanelGroupController.java +++ b/backend/src/main/java/io/dataease/controller/panel/PanelGroupController.java @@ -203,4 +203,18 @@ public class PanelGroupController { result.setResponseSource("appApply"); return result; } + + @PostMapping("/appEdit") + public void appEdit(@RequestBody PanelAppTemplateApplyRequest request) throws Exception{ + panelGroupService.appEdit(request); + } + + @GetMapping("/findOneWithParent/{panelId}") + public PanelGroupDTO findOneWithParent(@PathVariable String panelId) throws Exception{ + PanelGroupDTO result = findOne(panelId); + result.setParents(authService.parentResource(panelId,"panel")); + result.setRequestId(UUIDUtil.getUUIDAsString()); + result.setResponseSource("appApply"); + return result; + } } diff --git a/backend/src/main/java/io/dataease/controller/request/dataset/DataSetGroupRequest.java b/backend/src/main/java/io/dataease/controller/request/dataset/DataSetGroupRequest.java index 5c87b85646..51f8cd76ba 100644 --- a/backend/src/main/java/io/dataease/controller/request/dataset/DataSetGroupRequest.java +++ b/backend/src/main/java/io/dataease/controller/request/dataset/DataSetGroupRequest.java @@ -18,4 +18,6 @@ public class DataSetGroupRequest extends DatasetGroup { private String userId; @ApiModelProperty("ID集合") private Set ids; + @ApiModelProperty("排除的ID") + private String excludedId; } diff --git a/backend/src/main/java/io/dataease/controller/request/panel/PanelAppTemplateApplyRequest.java b/backend/src/main/java/io/dataease/controller/request/panel/PanelAppTemplateApplyRequest.java index 5446e5a84d..77b95aaabe 100644 --- a/backend/src/main/java/io/dataease/controller/request/panel/PanelAppTemplateApplyRequest.java +++ b/backend/src/main/java/io/dataease/controller/request/panel/PanelAppTemplateApplyRequest.java @@ -13,12 +13,18 @@ import java.util.List; @Data public class PanelAppTemplateApplyRequest { + private String logId; + private String panelId; + private String panelGroupPid; + private String panelName; private String datasetGroupId; + private String datasetGroupPid; + private String datasetGroupName; private String appTemplateId; diff --git a/backend/src/main/java/io/dataease/dto/appTemplateMarket/AppLogGridDTO.java b/backend/src/main/java/io/dataease/dto/appTemplateMarket/AppLogGridDTO.java index c54b894374..3e1181660c 100644 --- a/backend/src/main/java/io/dataease/dto/appTemplateMarket/AppLogGridDTO.java +++ b/backend/src/main/java/io/dataease/dto/appTemplateMarket/AppLogGridDTO.java @@ -16,4 +16,18 @@ public class AppLogGridDTO extends PanelAppTemplateLog implements Serializable { private String panelName; + private String panelGroupPid; + + private String datasourceType; + + private String datasetGroupPid; + + private Boolean deleteResource; + + private String datasetPrivileges; + + private String panelPrivileges; + + private String datasourcePrivileges; + } diff --git a/backend/src/main/java/io/dataease/ext/ExtAppLogMapper.xml b/backend/src/main/java/io/dataease/ext/ExtAppLogMapper.xml index ee7b6a93fc..ccd96b59a6 100644 --- a/backend/src/main/java/io/dataease/ext/ExtAppLogMapper.xml +++ b/backend/src/main/java/io/dataease/ext/ExtAppLogMapper.xml @@ -7,12 +7,38 @@ + + + + + + diff --git a/backend/src/main/java/io/dataease/service/panel/PanelAppTemplateService.java b/backend/src/main/java/io/dataease/service/panel/PanelAppTemplateService.java index 75f9c47bb2..db1c7dbb46 100644 --- a/backend/src/main/java/io/dataease/service/panel/PanelAppTemplateService.java +++ b/backend/src/main/java/io/dataease/service/panel/PanelAppTemplateService.java @@ -5,6 +5,7 @@ import io.dataease.commons.constants.CommonConstants; import io.dataease.commons.constants.PanelConstants; import io.dataease.commons.utils.AuthUtils; import io.dataease.commons.utils.BeanUtils; +import io.dataease.controller.datasource.request.UpdataDsRequest; import io.dataease.controller.request.dataset.DataSetTableRequest; import io.dataease.controller.request.panel.PanelAppTemplateApplyRequest; import io.dataease.controller.request.panel.PanelAppTemplateRequest; @@ -270,15 +271,36 @@ public class PanelAppTemplateService { return chartViewFieldsRealMap; } - public void nameCheck(PanelAppTemplateApplyRequest request) { - panelGroupService.checkPanelName(request.getPanelName(), request.getPanelId(), PanelConstants.OPT_TYPE_INSERT, null, "panel"); - DatasetGroup datasetGroup = new DatasetGroup(); - datasetGroup.setPid(request.getDatasetGroupId()); - datasetGroup.setName(request.getDatasetGroupName()); - dataSetGroupService.checkName(datasetGroup); - request.getDatasourceList().stream().forEach(datasource -> { - datasourceService.checkName(datasource.getName(), datasource.getType(), null); - }); + public void nameCheck(PanelAppTemplateApplyRequest request, String optType) { + if ("add".equals(optType)) { + panelGroupService.checkPanelName(request.getPanelName(), request.getPanelGroupPid(), PanelConstants.OPT_TYPE_INSERT, null, "panel"); + DatasetGroup datasetGroup = new DatasetGroup(); + datasetGroup.setPid(request.getDatasetGroupPid()); + datasetGroup.setName(request.getDatasetGroupName()); + dataSetGroupService.checkName(datasetGroup); + request.getDatasourceList().stream().forEach(datasource -> { + datasourceService.checkName(datasource.getName(), datasource.getType(), null); + }); + } else { + DatasetGroup datasetGroup = new DatasetGroup(); + datasetGroup.setPid(request.getDatasetGroupPid()); + datasetGroup.setName(request.getDatasetGroupName()); + datasetGroup.setId(request.getDatasetGroupId()); + dataSetGroupService.checkName(datasetGroup); + request.getDatasourceList().stream().forEach(datasource -> { + datasourceService.checkName(datasource.getName(), datasource.getType(), datasource.getId()); + }); + } } + + @Transactional(rollbackFor = Exception.class) + public void editDatasource(List updateDatasourceList) throws Exception { + for (int i = 0; i < updateDatasourceList.size(); i++) { + UpdataDsRequest updataDsRequest = new UpdataDsRequest(); + BeanUtils.copyBean(updataDsRequest, updateDatasourceList.get(i)); + datasourceService.updateDatasource(updataDsRequest); + + } + } } 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 73fb1119ba..cb9af63d96 100644 --- a/backend/src/main/java/io/dataease/service/panel/PanelGroupService.java +++ b/backend/src/main/java/io/dataease/service/panel/PanelGroupService.java @@ -127,9 +127,9 @@ public class PanelGroupService { @Resource private PanelAppTemplateLogService appTemplateLogService; @Resource - private ChartGroupService chartGroupService; - @Resource private DataSetGroupService dataSetGroupService; + @Resource + private DatasetGroupMapper datasetGroupMapper; public List tree(PanelGroupRequest panelGroupRequest) { String userId = String.valueOf(AuthUtils.getUser().getUserId()); @@ -232,6 +232,25 @@ public class PanelGroupService { return panelId; } + public void move(PanelGroupRequest request){ + PanelGroupWithBLOBs panelInfo = panelGroupMapper.selectByPrimaryKey(request.getId()); + if (panelInfo.getPid().equalsIgnoreCase(request.getPid())) { + DataEaseException.throwException(Translator.get("i18n_select_diff_folder")); + } + // 移动校验 + if (StringUtils.isNotEmpty(request.getName())) { + checkPanelName(request.getName(), request.getPid(), PanelConstants.OPT_TYPE_INSERT, request.getId(), panelInfo.getNodeType()); + } + PanelGroupWithBLOBs record = new PanelGroupWithBLOBs(); + record.setName(request.getName()); + record.setId(request.getId()); + record.setPid(request.getPid()); + record.setUpdateTime(request.getUpdateTime()); + record.setUpdateBy(request.getUpdateBy()); + panelGroupMapper.updateByPrimaryKeySelective(record); + DeLogUtils.save(SysLogConstants.OPERATE_TYPE.MODIFY, sourceType, request.getId(), panelInfo.getPid(), request.getPid(), sourceType); + } + public void checkPanelName(String name, String pid, String optType, String id, String nodeType) { PanelGroupExample groupExample = new PanelGroupExample(); @@ -811,12 +830,12 @@ public class PanelGroupService { @Transactional(rollbackFor = Exception.class) public String appApply(PanelAppTemplateApplyRequest request) throws Exception{ //仪表板名称校验,数据集分组名称校验,数据源名称校验 - panelAppTemplateService.nameCheck(request); + panelAppTemplateService.nameCheck(request,"add"); String newPanelId = UUIDUtil.getUUIDAsString(); // 新建数据集分组 DatasetGroup newDatasetGroup = new DatasetGroup(); - newDatasetGroup.setPid(request.getDatasetGroupId()); + newDatasetGroup.setPid(request.getDatasetGroupPid()); newDatasetGroup.setName(request.getDatasetGroupName()); newDatasetGroup.setType("group"); DataSetGroupDTO resultDatasetGroup = dataSetGroupService.save(newDatasetGroup); @@ -853,7 +872,7 @@ public class PanelGroupService { panelAppTemplateService.applyViewsField(chartViewFieldsInfo,chartViewsRealMap,datasetsRealMap,datasetFieldsRealMap); - panelAppTemplateService.applyPanel(panelInfo,chartViewsRealMap,newPanelId, request.getPanelName(), request.getPanelId()); + panelAppTemplateService.applyPanel(panelInfo,chartViewsRealMap,newPanelId, request.getPanelName(), request.getPanelGroupPid()); panelAppTemplateService.applyPanelView(panelViewsInfo,chartViewsRealMap,newPanelId); @@ -873,4 +892,42 @@ public class PanelGroupService { appTemplateLogService.newAppApplyLog(templateLog); return newPanelId; } + + @Transactional(rollbackFor = Exception.class) + public void appEdit(PanelAppTemplateApplyRequest request) throws Exception{ + long currentTime = System.currentTimeMillis(); + String userName = AuthUtils.getUser().getUsername(); + //名称校验,数据集分组名称校验,数据源名称校验 + panelAppTemplateService.nameCheck(request,"update"); + //仪表板移动更新名称 + PanelGroup panelHistoryInfo = panelGroupMapper.selectByPrimaryKey(request.getPanelId()); + String panelHistoryPid = panelHistoryInfo.getPid(); + if(panelHistoryPid.equals(request.getPanelGroupPid())){ + // 未移动 + checkPanelName(request.getPanelName(), request.getPanelGroupPid(), PanelConstants.OPT_TYPE_UPDATE, request.getPanelId(), "panel"); + }else{ + checkPanelName(request.getPanelName(), request.getPanelGroupPid(), PanelConstants.OPT_TYPE_INSERT, null, "panel"); + } + panelHistoryInfo.setName(request.getPanelName()); + panelHistoryInfo.setPid(request.getPanelGroupPid()); + panelHistoryInfo.setUpdateBy(userName); + panelHistoryInfo.setUpdateTime(currentTime); + panelGroupMapper.updateByPrimaryKey(panelHistoryInfo); + + //数据集分组移动,变更 + DatasetGroup datasetGroupHistoryInfo = datasetGroupMapper.selectByPrimaryKey(request.getDatasetGroupId()); + DatasetGroup datasetGroup = new DatasetGroup(); + datasetGroup.setName(request.getDatasetGroupName()); + datasetGroup.setId(request.getDatasetGroupId()); + if(datasetGroupHistoryInfo.getPid().equals(request.getDatasetGroupPid())){ + datasetGroup.setPid(request.getDatasetGroupPid()); + } + dataSetGroupService.checkName(datasetGroup); + datasetGroupHistoryInfo.setName(request.getDatasetGroupName()); + datasetGroupHistoryInfo.setPid(request.getDatasetGroupPid()); + datasetGroupMapper.updateByPrimaryKey(datasetGroupHistoryInfo); + + //数据源变更 + panelAppTemplateService.editDatasource(request.getDatasourceList()); + } } diff --git a/backend/src/main/java/io/dataease/service/panel/applog/AppLogQueryParam.java b/backend/src/main/java/io/dataease/service/panel/applog/AppLogQueryParam.java index 9aee5afaf3..0abc975811 100644 --- a/backend/src/main/java/io/dataease/service/panel/applog/AppLogQueryParam.java +++ b/backend/src/main/java/io/dataease/service/panel/applog/AppLogQueryParam.java @@ -7,5 +7,6 @@ import java.util.List; @Data public class AppLogQueryParam extends GridExample { + private String userId; } diff --git a/backend/src/main/java/io/dataease/service/panel/applog/AppLogService.java b/backend/src/main/java/io/dataease/service/panel/applog/AppLogService.java index 0c174f17a4..7fd1ac2577 100644 --- a/backend/src/main/java/io/dataease/service/panel/applog/AppLogService.java +++ b/backend/src/main/java/io/dataease/service/panel/applog/AppLogService.java @@ -1,13 +1,20 @@ package io.dataease.service.panel.applog; import com.google.gson.Gson; +import io.dataease.commons.utils.AuthUtils; import io.dataease.controller.sys.request.KeyGridRequest; import io.dataease.dto.SysLogDTO; import io.dataease.dto.appTemplateMarket.AppLogGridDTO; import io.dataease.ext.ExtAppLogMapper; import io.dataease.ext.query.GridExample; import io.dataease.plugins.common.base.mapper.PanelAppTemplateLogMapper; +import io.dataease.service.dataset.DataSetGroupService; +import io.dataease.service.datasource.DatasourceService; +import io.dataease.service.panel.PanelGroupService; +import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + import javax.annotation.Resource; import java.util.List; @@ -19,12 +26,19 @@ public class AppLogService { private PanelAppTemplateLogMapper appLogMapper; @Resource private ExtAppLogMapper extAppLogMapper; + @Resource + private PanelGroupService panelGroupService; + @Resource + private DataSetGroupService dataSetGroupService; + @Resource + private DatasourceService datasourceService; public List query(KeyGridRequest request) { GridExample gridExample = request.convertExample(); gridExample.setExtendCondition(request.getKeyWord()); AppLogQueryParam logQueryParam = gson.fromJson(gson.toJson(gridExample), AppLogQueryParam.class); + logQueryParam.setUserId(String.valueOf(AuthUtils.getUser().getUserId())); List voLogs = extAppLogMapper.query(logQueryParam); return voLogs; } @@ -34,4 +48,19 @@ public class AppLogService { } + @Transactional + public void deleteLogAndResource(AppLogGridDTO request) throws Exception { + if (request.getDeleteResource()) { + if (StringUtils.isNotEmpty(request.getPanelId())) { + panelGroupService.deleteCircle(request.getPanelId()); + } + if (StringUtils.isNotEmpty(request.getDatasetGroupId())) { + dataSetGroupService.delete(request.getDatasetGroupId()); + } + if (StringUtils.isNotEmpty(request.getDatasourceId())) { + datasourceService.deleteDatasource(request.getDatasourceId()); + } + } + appLogMapper.deleteByPrimaryKey(request.getId()); + } } diff --git a/backend/src/main/resources/db/migration/V42__1.16.sql b/backend/src/main/resources/db/migration/V42__1.16.sql index 6a02f442ad..d7a77b5155 100644 --- a/backend/src/main/resources/db/migration/V42__1.16.sql +++ b/backend/src/main/resources/db/migration/V42__1.16.sql @@ -32,6 +32,17 @@ WHERE (`msg_type_id` = 6); ALTER TABLE `sys_user_assist` ADD COLUMN `larksuite_id` VARCHAR(255) NULL DEFAULT NULL AFTER `lark_id`; +INSERT INTO `sys_menu` (`menu_id`, `pid`, `sub_count`, `type`, `title`, `name`, `component`, `menu_sort`, `icon`, + `path`, `i_frame`, `cache`, `hidden`, `permission`, `create_by`, `update_by`, `create_time`, + `update_time`) +VALUES (41, 1, 1, 1, '应用管理', 'system-app-template', 'panel/appTemplate/index', 13, 'sys-param', + 'panel/appTemplate/index', 0, 0, 0, NULL, NULL, NULL, NULL, 1620444227389); +INSERT INTO `sys_menu` (`menu_id`, `pid`, `sub_count`, `type`, `title`, `name`, `component`, `menu_sort`, `icon`, + `path`, `i_frame`, `cache`, `hidden`, `permission`, `create_by`, `update_by`, `create_time`, + `update_time`) +VALUES (203, 0, 0, 1, '应用', 'app-template-market', 'panel/appTemplateMarket/index', 6, 'dashboard', + '/appTemplateMarket', 0, 0, 0, NULL, NULL, NULL, NULL, 1620444227389); + ALTER TABLE `dataset_table_field` CHANGE COLUMN `type` `type` VARCHAR(255) NOT NULL COMMENT '原始字段类型' ; INSERT INTO `my_plugin` (`name`, `store`, `free`, `cost`, `category`, `descript`, `version`, `creator`, `load_mybatis`, @@ -42,3 +53,17 @@ VALUES ('Apache Kylin 数据源插件', 'default', '0', '0', 'datasource', 'Apac INSERT INTO `sys_msg_channel` (`msg_channel_id`, `channel_name`, `service_name`) VALUES ('6', 'webmsg.channel_larksuite_msg', 'sendLarksuite'); + +INSERT INTO `sys_menu` (`menu_id`, `pid`, `sub_count`, `type`, `title`, `name`, `component`, `menu_sort`, `icon`, `path`, `i_frame`, `cache`, `hidden`, `permission`, `create_by`, `update_by`, `create_time`, `update_time`) VALUES (204, 203, 0, 2, '删除记录', NULL, NULL, 999, NULL, NULL, 0, 0, 0, 'appLog:del', NULL, NULL, 1614930903502, 1614930903502); +INSERT INTO `sys_menu` (`menu_id`, `pid`, `sub_count`, `type`, `title`, `name`, `component`, `menu_sort`, `icon`, `path`, `i_frame`, `cache`, `hidden`, `permission`, `create_by`, `update_by`, `create_time`, `update_time`) VALUES (205, 203, 0, 2, '编辑记录', NULL, NULL, 999, NULL, NULL, 0, 0, 0, 'appLog:edit', NULL, NULL, 1614930935529, 1614930935529); + +INSERT INTO `sys_auth` (`id`, `auth_source`, `auth_source_type`, `auth_target`, `auth_target_type`, `auth_time`, `auth_details`, `auth_user`, `update_time`, `copy_from`, `copy_id`) VALUES ('46e4e2cb-1349-40c3-a72d-7b0b30ab5d14', '203', 'menu', '1', 'role', 1666840141866, NULL, 'admin', NULL, NULL, NULL); +INSERT INTO `sys_auth` (`id`, `auth_source`, `auth_source_type`, `auth_target`, `auth_target_type`, `auth_time`, `auth_details`, `auth_user`, `update_time`, `copy_from`, `copy_id`) VALUES ('6e22ad53-d737-447f-9686-5041e122b4dc', '205', 'menu', '1', 'role', 1666840141468, NULL, 'admin', NULL, NULL, NULL); +INSERT INTO `sys_auth` (`id`, `auth_source`, `auth_source_type`, `auth_target`, `auth_target_type`, `auth_time`, `auth_details`, `auth_user`, `update_time`, `copy_from`, `copy_id`) VALUES ('da17fcfe-7875-4aaf-983b-d750d71f36d2', '204', 'menu', '1', 'role', 1666840141658, NULL, 'admin', NULL, NULL, NULL); + +INSERT INTO `sys_auth_detail` (`id`, `auth_id`, `privilege_name`, `privilege_type`, `privilege_value`, `privilege_extend`, `remark`, `create_user`, `create_time`, `update_time`, `copy_from`, `copy_id`) VALUES ('b4fe2e52-55a4-11ed-bf84-0242ac130005', '6e22ad53-d737-447f-9686-5041e122b4dc', 'i18n_auth_grant', 15, 0, 'grant', '基础权限-授权', 'admin', 1666840141000, NULL, NULL, NULL); +INSERT INTO `sys_auth_detail` (`id`, `auth_id`, `privilege_name`, `privilege_type`, `privilege_value`, `privilege_extend`, `remark`, `create_user`, `create_time`, `update_time`, `copy_from`, `copy_id`) VALUES ('b4fe3215-55a4-11ed-bf84-0242ac130005', '6e22ad53-d737-447f-9686-5041e122b4dc', 'i18n_auth_use', 1, 1, 'use', '基础权限-使用', 'admin', 1666840141000, NULL, NULL, NULL); +INSERT INTO `sys_auth_detail` (`id`, `auth_id`, `privilege_name`, `privilege_type`, `privilege_value`, `privilege_extend`, `remark`, `create_user`, `create_time`, `update_time`, `copy_from`, `copy_id`) VALUES ('b51affbf-55a4-11ed-bf84-0242ac130005', 'da17fcfe-7875-4aaf-983b-d750d71f36d2', 'i18n_auth_grant', 15, 0, 'grant', '基础权限-授权', 'admin', 1666840141000, NULL, NULL, NULL); +INSERT INTO `sys_auth_detail` (`id`, `auth_id`, `privilege_name`, `privilege_type`, `privilege_value`, `privilege_extend`, `remark`, `create_user`, `create_time`, `update_time`, `copy_from`, `copy_id`) VALUES ('b51b0473-55a4-11ed-bf84-0242ac130005', 'da17fcfe-7875-4aaf-983b-d750d71f36d2', 'i18n_auth_use', 1, 1, 'use', '基础权限-使用', 'admin', 1666840141000, NULL, NULL, NULL); +INSERT INTO `sys_auth_detail` (`id`, `auth_id`, `privilege_name`, `privilege_type`, `privilege_value`, `privilege_extend`, `remark`, `create_user`, `create_time`, `update_time`, `copy_from`, `copy_id`) VALUES ('b53a1ad7-55a4-11ed-bf84-0242ac130005', '46e4e2cb-1349-40c3-a72d-7b0b30ab5d14', 'i18n_auth_grant', 15, 0, 'grant', '基础权限-授权', 'admin', 1666840142000, NULL, NULL, NULL); +INSERT INTO `sys_auth_detail` (`id`, `auth_id`, `privilege_name`, `privilege_type`, `privilege_value`, `privilege_extend`, `remark`, `create_user`, `create_time`, `update_time`, `copy_from`, `copy_id`) VALUES ('b53a1dfd-55a4-11ed-bf84-0242ac130005', '46e4e2cb-1349-40c3-a72d-7b0b30ab5d14', 'i18n_auth_use', 1, 1, 'use', '基础权限-使用', 'admin', 1666840142000, NULL, NULL, NULL); diff --git a/frontend/src/api/appTemplateMarket/log.js b/frontend/src/api/appTemplateMarket/log.js index 3a14b96f80..a652d53b38 100644 --- a/frontend/src/api/appTemplateMarket/log.js +++ b/frontend/src/api/appTemplateMarket/log.js @@ -11,7 +11,7 @@ export function logGrid(page, size, data) { export function opTypes() { return request({ - url: '/api/log/opTypes', + url: '/app/log/opTypes', method: 'post', loading: true }) @@ -19,10 +19,19 @@ export function opTypes() { export function exportExcel(data) { return request({ - url: '/api/log/export', + url: '/app/log/export', method: 'post', loading: true, responseType: 'blob', data }) } + +export function deleteLogAndResource(data) { + return request({ + url: '/app/log/deleteLog', + method: 'post', + data, + loading: true + }) +} diff --git a/frontend/src/api/panel/panel.js b/frontend/src/api/panel/panel.js index 3a74f445a8..f892134606 100644 --- a/frontend/src/api/panel/panel.js +++ b/frontend/src/api/panel/panel.js @@ -313,7 +313,33 @@ export function appApply(data) { return request({ url: 'panel/group/appApply', method: 'post', - loading: true, + loading: false, data }) } + +export function appEdit(data) { + return request({ + url: 'panel/group/appEdit', + method: 'post', + loading: false, + data + }) +} + +export function editApply(data) { + return request({ + url: 'panel/group/appApply', + method: 'post', + loading: false, + data + }) +} + +export function findOneWithParent(panelId) { + return request({ + url: 'panel/group/findOneWithParent/' + panelId, + method: 'get', + loading: false + }) +} diff --git a/frontend/src/components/business/DeLayoutContent.vue b/frontend/src/components/business/DeLayoutContent.vue index 372b5c4c94..039be3d450 100644 --- a/frontend/src/components/business/DeLayoutContent.vue +++ b/frontend/src/components/business/DeLayoutContent.vue @@ -42,7 +42,7 @@ export default { return backPath || backName || backTo }, needInnerPadding() { - return ['sys-identification', 'sys-abutment', 'sys-task-email', 'system-dept', 'system-dept-form', 'system-auth', 'sys-appearance', 'system-param', 'system-template', 'sys-task-dataset', 'sys-msg-web-all', 'system-plugin'].includes(this.$route.name) + return ['system-app-template', 'sys-identification', 'sys-abutment', 'sys-task-email', 'system-dept', 'system-dept-form', 'system-auth', 'sys-appearance', 'system-param', 'system-template', 'sys-task-dataset', 'sys-msg-web-all', 'system-plugin'].includes(this.$route.name) } } } diff --git a/frontend/src/lang/en.js b/frontend/src/lang/en.js index 9b9d4d14b0..4813e90f42 100644 --- a/frontend/src/lang/en.js +++ b/frontend/src/lang/en.js @@ -2625,6 +2625,16 @@ export default { search_by_keyword: 'Search by keyword', apply_logs: 'Apply logs', app_group_delete_tips: 'Are you sure to delete this application category?', - app_group_delete_content: 'After deletion, all application templates in this category will also be deleted.' + app_group_delete_content: 'After deletion, all application templates in this category will also be deleted.', + panel_position: 'Panel position', + panel_name: 'Panel name', + dataset_group_position: 'Dataset group position', + dataset_group_name: 'Dataset name', + datasource_info: 'Datasource info', + datasource: 'Datasource', + dataset_group: 'Dataset group', + panel: 'Panel', + log_delete_tips: 'Are you sure to delete this application record?', + log_resource_delete_tips: 'Delete related resources (irrecoverable after deletion)' } } diff --git a/frontend/src/lang/tw.js b/frontend/src/lang/tw.js index ad78066c42..4471ffd44f 100644 --- a/frontend/src/lang/tw.js +++ b/frontend/src/lang/tw.js @@ -2626,6 +2626,16 @@ export default { search_by_keyword: '通過關鍵字搜索', apply_logs: '應用記錄', app_group_delete_tips: '確定刪除該應用分類嗎?', - app_group_delete_content: '刪除後,該分類中所有的應用模闆也將被刪除。' + app_group_delete_content: '刪除後,該分類中所有的應用模板也將被刪除。', + panel_position: '儀表板位置', + panel_name: '儀表板名稱', + dataset_group_position: '數據集分組位置', + dataset_group_name: '數據集分組名稱', + datasource_info: '數據源信息', + datasource: '數據源', + dataset_group: '數據集分組', + panel: '儀表板', + log_delete_tips: '確定刪除該條應用記錄嗎?', + log_resource_delete_tips: '刪除相關資源(刪除後不可恢復)' } } diff --git a/frontend/src/lang/zh.js b/frontend/src/lang/zh.js index 009725ad24..639bbd037b 100644 --- a/frontend/src/lang/zh.js +++ b/frontend/src/lang/zh.js @@ -2626,6 +2626,16 @@ export default { search_by_keyword: '通过关键字搜索', apply_logs: '应用记录', app_group_delete_tips: '确定删除该应用分类吗?', - app_group_delete_content: '删除后,该分类中所有的应用模板也将被删除。' + app_group_delete_content: '删除后,该分类中所有的应用模板也将被删除。', + panel_position: '仪表板位置', + panel_name: '仪表板名称', + dataset_group_position: '数据集分组位置', + dataset_group_name: '数据集分组名称', + datasource_info: '数据源信息', + datasource: '数据源', + dataset_group: '数据集分组', + panel: '仪表板', + log_delete_tips: '确定删除该条应用记录吗?', + log_resource_delete_tips: '删除相关资源(删除后不可恢复)' } } diff --git a/frontend/src/views/panel/appTemplate/AppTemplateContent.vue b/frontend/src/views/panel/appTemplate/AppTemplateContent.vue new file mode 100644 index 0000000000..72875f60ce --- /dev/null +++ b/frontend/src/views/panel/appTemplate/AppTemplateContent.vue @@ -0,0 +1,534 @@ + + + + + diff --git a/frontend/src/views/panel/appTemplate/component/AppTemplateApply.vue b/frontend/src/views/panel/appTemplate/component/AppTemplateApply.vue new file mode 100644 index 0000000000..b3cf4cffac --- /dev/null +++ b/frontend/src/views/panel/appTemplate/component/AppTemplateApply.vue @@ -0,0 +1,57 @@ + + + + + diff --git a/frontend/src/views/panel/appTemplate/component/TemplateItem.vue b/frontend/src/views/panel/appTemplate/component/TemplateItem.vue index b86fbee65c..d6674d4172 100644 --- a/frontend/src/views/panel/appTemplate/component/TemplateItem.vue +++ b/frontend/src/views/panel/appTemplate/component/TemplateItem.vue @@ -12,7 +12,10 @@ alt="" > -
+
- {{ $t("commons.update") }} + {{ $t('commons.update') }} - {{ $t("commons.uninstall") }} + {{ $t('commons.uninstall') }}
+ +
+ + + + {{ model.name }} + + + + {{ $t('panel.preview') }} + + {{ $t('panel.apply') }} + + + +
- diff --git a/frontend/src/views/panel/appTemplateMarket/component/AppMarketPreview.vue b/frontend/src/views/panel/appTemplateMarket/component/AppMarketPreview.vue new file mode 100644 index 0000000000..6b66c30e74 --- /dev/null +++ b/frontend/src/views/panel/appTemplateMarket/component/AppMarketPreview.vue @@ -0,0 +1,125 @@ + + + + + diff --git a/frontend/src/views/panel/appTemplateMarket/index.vue b/frontend/src/views/panel/appTemplateMarket/index.vue index d259e822d7..de50d714fd 100644 --- a/frontend/src/views/panel/appTemplateMarket/index.vue +++ b/frontend/src/views/panel/appTemplateMarket/index.vue @@ -1,12 +1,11 @@ @@ -139,16 +120,18 @@ import { searchAppTemplate } from '@/api/appTemplateMarket' import { groupTree, panelSave } from '@/api/panel/panel' import { DEFAULT_COMMON_CANVAS_STYLE_STRING } from '@/views/panel/panel' -import MarketPreview from '@/views/panel/appTemplateMarket/component/MarketPreview' import elementResizeDetectorMaker from 'element-resize-detector' -import AppTemplateItem from '@/views/panel/appTemplateMarket/component/AppTemplateItem' import AppTemplateLog from '@/views/panel/appTemplateMarket/log' +import AppTemplateContent from '@/views/panel/appTemplate/AppTemplateContent' +import AppMarketPreview from '@/views/panel/appTemplateMarket/component/AppMarketPreview' +import AppTemplateApply from '@/views/panel/appTemplate/component/AppTemplateApply' export default { name: 'AppTemplateMarket', - components: { AppTemplateLog, AppTemplateItem, MarketPreview }, + components: { AppTemplateApply, AppMarketPreview, AppTemplateContent, AppTemplateLog }, data() { return { + previewItem: null, hasResult: true, templateMiniWidth: 330, templateCurWidth: 310, @@ -194,11 +177,8 @@ export default { } } }, - computed: { - - }, - watch: { - }, + computed: {}, + watch: {}, mounted() { this.initMarketTemplate() this.getGroupTree() @@ -215,6 +195,24 @@ export default { }) }, methods: { + applyNew(item) { + const datasourceInfo = JSON.parse(item.datasourceInfo)[0] + const param = { + datasourceType: datasourceInfo.type, + appTemplateId: item.id, + appTemplateName: item.name, + panelName: item.name, + datasetGroupName: item.name + } + this.$refs.templateApply.init(param) + }, + appApply() { + this.applyNew(this.previewItem) + }, + previewApp(item) { + this.previewModel = true + this.previewItem = item + }, initMarketTemplate() { searchAppTemplate({ nodeType: 'folder' }).then(rsp => { this.currentAppShowList = rsp.data @@ -280,109 +278,120 @@ export default { diff --git a/frontend/src/views/panel/appTemplateMarket/log/index.vue b/frontend/src/views/panel/appTemplateMarket/log/index.vue index 5b0dbc0b45..fb000a9004 100644 --- a/frontend/src/views/panel/appTemplateMarket/log/index.vue +++ b/frontend/src/views/panel/appTemplateMarket/log/index.vue @@ -10,7 +10,8 @@ type="primary" icon="el-icon-plus" @click="applyNew()" - >{{ $t('commons.create') }} + >{{ $t('commons.create') }} +   {{ $t("user.filter") - }} + >{{ + $t('user.filter') + }} + @@ -45,7 +48,7 @@ class="filter-texts" > {{ paginationConfig.total }} - {{ $t("user.result_one") }} + {{ $t('user.result_one') }} {{ $t("user.clear_filter") }} + >{{ $t('user.clear_filter') }} +
+ :label="$t('app_template.panel')" + > + + {{ scope.row.applyTime | timestampFormatDate }} + + +
@@ -132,6 +176,39 @@ @search="filterDraw" /> + + + + + + + + + {{ $t('app_template.log_resource_delete_tips') }} + + + {{ $t('commons.cancel') }} + {{ $t('commons.confirm') }} + + @@ -144,10 +221,13 @@ import { addOrder, formatOrders } from '@/utils/index' -import { logGrid } from '@/api/appTemplateMarket/log' +import { deleteLogAndResource, logGrid } from '@/api/appTemplateMarket/log' +import { findOneWithParent } from '@/api/panel/panel' +import AppTemplateApply from '@/views/panel/appTemplate/component/AppTemplateApply' + export default { name: 'AppTemplateLog', - components: { GridTable, filterUser }, + components: { AppTemplateApply, GridTable, filterUser }, mixins: [keyEnter], props: { appTemplateId: { @@ -162,6 +242,12 @@ export default { }, data() { return { + optShow: false, + deleteConfirmDialog: false, + deleteItemInfo: { + deleteResource: false + }, + operateWidth: 168, columns: [], paginationConfig: { currentPage: 1, @@ -194,6 +280,56 @@ export default { this.resizeObserver() }, methods: { + closeDel() { + this.deleteItemInfo = { + deleteResource: false + } + this.deleteConfirmDialog = false + }, + confirmDel() { + deleteLogAndResource(this.deleteItemInfo).then(() => { + this.closeDel() + this.search() + }) + }, + closeDraw() { + this.search() + }, + editApply(item) { + const param = { + datasourceType: item.datasourceType, + logId: item.id, + panelId: item.panelId, + panelGroupPid: item.panelGroupPid, + datasourceId: item.datasourceId, + datasetGroupPid: item.datasetGroupPid, + datasetGroupId: item.datasetGroupId, + datasetGroupName: item.datasetGroupName, + panelName: item.panelName, + datasourcePrivileges: item.datasourcePrivileges, + panelPrivileges: item.panelPrivileges, + datasetPrivileges: item.datasetPrivileges + } + this.$refs.templateEditApply.init(param) + }, + goToDatasource(row) { + + }, + goPanel(row) { + findOneWithParent(row.panelId).then(rsp => { + this.$router.push({ name: 'panel', params: rsp.data }) + }) + }, + edit() { + + }, + del(item) { + this.deleteItemInfo = { + ...item, + deleteResource: false + } + this.deleteConfirmDialog = true + }, applyNew() { this.$emit('applyNew') }, @@ -289,6 +425,11 @@ export default { logGrid(currentPage, pageSize, param).then((response) => { this.data = response.data.listObject this.paginationConfig.total = response.data.itemCount + const _this = this + _this.optShow = false + this.$nextTick(() => { + _this.optShow = true + }) }) } } @@ -302,4 +443,13 @@ export default { .table-container-filter { height: calc(100% - 110px); } + +.link-span { + color: #3370FF; + cursor: pointer; + + &:hover { + text-decoration: underline; + } +} diff --git a/frontend/src/views/panel/list/PanelViewShow.vue b/frontend/src/views/panel/list/PanelViewShow.vue index 106a7dbb4a..f4c4072332 100644 --- a/frontend/src/views/panel/list/PanelViewShow.vue +++ b/frontend/src/views/panel/list/PanelViewShow.vue @@ -118,6 +118,10 @@ icon="el-icon-picture-outline" @click.native="downloadAsImage" >{{ $t('panel.export_to_img') }} + {{ $t('panel.export_to_app') }} @@ -304,6 +308,7 @@ export default { }, data() { return { + canvasInfoTemp: 'preview-temp-canvas-main', canvasId: 'canvas-main', showMain: true, pdfTemplateSelectedIndex: 0, @@ -405,7 +410,7 @@ export default { saveToTemplate() { this.dataLoading = true setTimeout(() => { - html2canvas(document.getElementById('canvasInfoTemp')).then(canvas => { + html2canvas(document.getElementById(this.canvasInfoTemp)).then(canvas => { this.templateSaveShow = true this.dataLoading = false const snapshot = canvas.toDataURL('image/jpeg', 0.1) // 0.2是图片质量 @@ -430,7 +435,7 @@ export default { _this.dataLoading = true try { _this.findStaticSource(function(staticResource) { - html2canvas(document.getElementById('canvasInfoTemp')).then(canvas => { + html2canvas(document.getElementById(_this.canvasInfoTemp)).then(canvas => { _this.dataLoading = false const snapshot = canvas.toDataURL('image/jpeg', 0.1) // 0.1是图片质量 if (snapshot !== '') { @@ -458,9 +463,9 @@ export default { _this.dataLoading = true try { _this.findStaticSource(function(staticResource) { - html2canvas(document.getElementById('canvasInfoTemp')).then(canvas => { + html2canvas(document.getElementById(_this.canvasInfoTemp)).then(canvas => { _this.dataLoading = false - const snapshot = canvas.toDataURL('image/jpeg', 0.1) // 0.1是图片质量 + const snapshot = canvas.toDataURL('image/jpeg', 1) // 0.1是图片质量 if (snapshot !== '') { const panelInfo = { name: _this.$store.state.panel.panelInfo.name, @@ -528,7 +533,7 @@ export default { setTimeout(() => { this.exporting = true setTimeout(() => { - const canvasID = document.getElementById('canvasInfoTemp') + const canvasID = document.getElementById(this.canvasInfoTemp) const a = document.createElement('a') html2canvas(canvasID).then(canvas => { this.exporting = false @@ -559,7 +564,7 @@ export default { setTimeout(() => { this.exporting = true setTimeout(() => { - html2canvas(document.getElementById('canvasInfoTemp')).then(canvas => { + html2canvas(document.getElementById(this.canvasInfoTemp)).then(canvas => { const snapshot = canvas.toDataURL('image/jpeg', 1) // 是图片质量 this.dataLoading = false this.exporting = false @@ -573,7 +578,7 @@ export default { }, refreshTemplateInfo() { this.templateInfo = {} - html2canvas(document.getElementById('canvasInfoTemp')).then(canvas => { + html2canvas(document.getElementById(this.canvasInfoTemp)).then(canvas => { const snapshot = canvas.toDataURL('image/jpeg', 0.1) // 0.2是图片质量 if (snapshot !== '') { this.templateInfo = { @@ -623,7 +628,9 @@ export default { if (this.showType === 1 && this.shareUserId !== null) { const param = { userId: this.shareUserId } proxyInitPanelData(this.panelInfo.id, param, null) - } else { initPanelData(this.panelInfo.id, false) } + } else { + initPanelData(this.panelInfo.id, false) + } }, changePublishState() { if (this.panelInfo.status === 'publish') { @@ -642,72 +649,76 @@ export default { diff --git a/frontend/src/views/system/datasource/DsForm.vue b/frontend/src/views/system/datasource/DsForm.vue index 96ca0ac5f0..b3aa91b2dc 100644 --- a/frontend/src/views/system/datasource/DsForm.vue +++ b/frontend/src/views/system/datasource/DsForm.vue @@ -1,9 +1,12 @@ @@ -167,6 +303,10 @@ import PluginCom from '@/views/system/plugin/PluginCom' import { listDatasourceType, listDatasource } from '@/api/system/datasource' import deTextarea from '@/components/deCustomCm/deTextarea.vue' import msgCfm from '@/components/msgCfm' +import { dsGroupTree } from '@/api/dataset/dataset' +import { appApply, appEdit, groupTree } from '@/api/panel/panel' +import { deepCopy } from '@/components/canvas/utils/utils' + export default { name: 'DsForm', components: { @@ -175,8 +315,51 @@ export default { deTextarea }, mixins: [msgCfm], + props: { + referencePosition: { + type: String, + default: 'datasource' + }, + outerParams: { + type: Object, + request: false + } + }, data() { return { + appMarketEdit: true, + attachRule: { + panelName: [ + { + required: true, + min: 2, + max: 25, + message: i18n.t('datasource.input_limit_2_25', [2, 25]), + trigger: 'blur' + } + ], + datasetGroupName: [ + { + required: true, + min: 2, + max: 25, + message: i18n.t('datasource.input_limit_2_25', [2, 25]), + trigger: 'blur' + } + ], + datasetGroupPid: [{ required: true, message: i18n.t('chart.select_group'), trigger: 'blur' }], + panelGroupPid: [{ required: true, message: i18n.t('chart.select_group'), trigger: 'blur' }] + }, + panelGroupList: [], + datasetGroupList: [], + attachForm: { + appTemplateId: '', + panelGroupPid: null, + panelName: '', + datasetGroupPid: null, + datasetGroupId: null, + datasetGroupName: '' + }, disabled: false, form: { configuration: { @@ -402,8 +585,30 @@ export default { async created() { await this.datasourceTypes() this.queryTreeData() - const { id, showModel, type, name } = this.$route.query + let { id, showModel, type, name } = this.$route.query this.params = this.$route.query + if (this.positionCheck('appMarket')) { + id = this.outerParams.datasourceId + showModel = this.outerParams.showModel + type = this.outerParams.datasourceType + name = this.outerParams.name + this.attachForm.appTemplateId = this.outerParams.appTemplateId + this.attachForm.panelGroupPid = this.outerParams.panelGroupPid + this.attachForm.panelId = this.outerParams.panelId + this.attachForm.panelName = this.outerParams.panelName + this.attachForm.datasetGroupPid = this.outerParams.datasetGroupPid ? this.outerParams.datasetGroupPid : '0' + this.attachForm.datasetGroupId = this.outerParams.datasetGroupId + this.attachForm.datasetGroupName = this.outerParams.datasetGroupName + this.params = { + id: this.outerParams.datasourceId, + showModel: this.outerParams.showModel, + type: this.outerParams.datasourceType, + name: this.outerParams.name, + privileges: this.outerParams.datasourcePrivileges + } + this.getPanelGroupTree() + this.getDatasetGroupTree() + } if (id) { await this.getDatasourceDetail(id, showModel) this.edit(this.params) @@ -420,6 +625,36 @@ export default { this.disabled = Boolean(id) && showModel === 'show' && !this.canEdit }, methods: { + normalizer(node) { + // 去掉children=null的属性 + if (node.children === null || node.children === 'null') { + delete node.children + } + }, + getDatasetGroupTree() { + dsGroupTree({ nodeType: 'group', excludedId: this.attachForm.datasetGroupId }).then(res => { + this.datasetGroupList = [{ + id: '0', + name: this.$t('dataset.dataset_group'), + label: this.$t('dataset.dataset_group'), + pid: '0', + privileges: 'grant,manage,use', + type: 'group', + children: res.data + }] + }) + }, + getPanelGroupTree() { + groupTree({ nodeType: 'folder' }).then(res => { + this.panelGroupList = res.data + if (!this.attachForm.panelGroupPid && this.panelGroupList && this.panelGroupList.length > 0) { + this.attachForm.panelGroupPid = this.panelGroupList[0].id + } + }) + }, + positionCheck(referencePosition) { + return this.referencePosition === referencePosition + }, datasourceTypes() { return listDatasourceType().then((res) => { this.dsTypes = res.data || [] @@ -569,7 +804,7 @@ export default { if ( configuration.host === this.form.configuration.host && configuration.dataBase === - this.form.configuration.dataBase && + this.form.configuration.dataBase && configuration.port === this.form.configuration.port ) { repeat = true @@ -584,7 +819,7 @@ export default { if ( configuration.host === this.form.configuration.host && configuration.dataBase === - this.form.configuration.dataBase && + this.form.configuration.dataBase && configuration.port === this.form.configuration.port && configuration.schema === this.form.configuration.schema ) { @@ -621,7 +856,7 @@ export default { configuration.schema === this.form.configuration.schema && configuration.host === this.form.configuration.host && configuration.dataBase === - this.form.configuration.dataBase && + this.form.configuration.dataBase && configuration.port === this.form.configuration.port ) { repeat = true @@ -631,7 +866,7 @@ export default { if ( configuration.host === this.form.configuration.host && configuration.dataBase === - this.form.configuration.dataBase && + this.form.configuration.dataBase && configuration.port === this.form.configuration.port ) { repeat = true @@ -656,11 +891,20 @@ export default { if (!status) { return } + if (this.positionCheck('appMarket')) { + this.$refs.attachParamsForm.validate(valid => { + if (!valid) { + return false + } + } + ) + } this.$refs.dsForm.validate((valid) => { if (!valid) { return false } - const method = this.formType === 'add' ? addDs : editDs + let method = this.formType === 'add' ? addDs : editDs + const form = JSON.parse(JSON.stringify(this.form)) if (form.type === 'api') { if (this.form.apiConfiguration.length < 1) { @@ -674,17 +918,29 @@ export default { } else { form.configuration = JSON.stringify(form.configuration) } + const isAppMarket = this.positionCheck('appMarket') + let appApplyForm + if (isAppMarket) { + if (typeof form.desc === 'object') { + form.desc = '' + } + appApplyForm = { + ...this.attachForm, + datasourceList: [deepCopy(form)] + } + method = this.formType === 'add' ? appApply : appEdit + } if ( this.formType === 'modify' && this.originConfiguration !== form.configuration ) { - if (repeat) { + if (repeat && !isAppMarket) { $confirm( i18n.t('datasource.repeat_datasource_msg') + - '[' + - repeatDsName.join(',') + - '], ' + - i18n.t('datasource.confirm_save'), + '[' + + repeatDsName.join(',') + + '], ' + + i18n.t('datasource.confirm_save'), () => { $confirm(i18n.t('datasource.edit_datasource_msg'), () => { this.method(method, form) @@ -693,27 +949,40 @@ export default { ) } else { $confirm(i18n.t('datasource.edit_datasource_msg'), () => { - this.method(method, form) + isAppMarket ? this.appApplyMethod(method, appApplyForm) : this.method(method, form) }) } return } - if (repeat) { + if (repeat && !isAppMarket) { $confirm( i18n.t('datasource.repeat_datasource_msg') + - '[' + - repeatDsName.join(',') + - '], ' + - i18n.t('datasource.confirm_save'), + '[' + + repeatDsName.join(',') + + '], ' + + i18n.t('datasource.confirm_save'), () => { this.method(method, form) } ) } else { - this.method(method, form) + isAppMarket ? this.appApplyMethod(method, appApplyForm) : this.method(method, form) } }) }, + appApplyMethod(method, form) { + this.formLoading = true + method(form).then((res) => { + this.$success(i18n.t('commons.save_success')) + if (this.formType === 'add') { + this.$router.push({ name: 'panel', params: res.data }) + } else { + this.closeDraw() + } + }).finally(() => { + this.formLoading = false + }) + }, method(method, form) { this.formLoading = true method(form).then((res) => { @@ -767,6 +1036,14 @@ export default { if (!status) { return } + if (this.positionCheck('appMarket')) { + this.$refs.attachParamsForm.validate(valid => { + if (!valid) { + return false + } + } + ) + } this.$refs.dsForm.validate((valid) => { if (valid) { const data = JSON.parse(JSON.stringify(this.form)) @@ -844,6 +1121,10 @@ export default { backToList() { this.$router.push('/datasource/index') }, + + closeDraw() { + this.$emit('closeDraw') + }, logOutTips() { const options = { title: 'role.tips', @@ -967,21 +1248,47 @@ export default { } }) }, - handleClick(tab, event) {} + handleClick(tab, event) { + } } }