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 fd7cae7fdd..3bd3a50be0 100644 --- a/backend/src/main/java/io/dataease/controller/panel/PanelGroupController.java +++ b/backend/src/main/java/io/dataease/controller/panel/PanelGroupController.java @@ -4,6 +4,7 @@ import com.github.xiaoymin.knife4j.annotations.ApiSupport; import io.dataease.auth.annotation.DePermission; import io.dataease.auth.annotation.DePermissionProxy; import io.dataease.auth.annotation.DePermissions; +import io.dataease.controller.request.panel.PanelGroupBaseInfoRequest; import io.dataease.plugins.common.base.domain.PanelGroup; import io.dataease.plugins.common.base.domain.PanelGroupWithBLOBs; import io.dataease.commons.constants.DePermissionType; @@ -110,5 +111,12 @@ public class PanelGroupController { panelGroupService.exportPanelViewDetails(request,response); } + @ApiOperation("更新仪表板状态") + @PostMapping("/updatePanelStatus/{panelId}") + @I18n + @DePermission(type = DePermissionType.PANEL, level = ResourceAuthLevel.PANNEL_LEVEL_MANAGE) + public void updatePanelStatus(@PathVariable String panelId,@RequestBody PanelGroupBaseInfoRequest request){ + panelGroupService.updatePanelStatus(panelId,request); + } } diff --git a/backend/src/main/java/io/dataease/controller/request/panel/PanelGroupBaseInfoRequest.java b/backend/src/main/java/io/dataease/controller/request/panel/PanelGroupBaseInfoRequest.java new file mode 100644 index 0000000000..a342fafda9 --- /dev/null +++ b/backend/src/main/java/io/dataease/controller/request/panel/PanelGroupBaseInfoRequest.java @@ -0,0 +1,12 @@ +package io.dataease.controller.request.panel; + +import io.dataease.plugins.common.base.domain.PanelGroup; + +/** + * Author: wangjiahao + * Date: 2022/5/16 + * Description: + */ +public class PanelGroupBaseInfoRequest extends PanelGroup { + +} diff --git a/backend/src/main/java/io/dataease/controller/request/panel/PanelGroupRequest.java b/backend/src/main/java/io/dataease/controller/request/panel/PanelGroupRequest.java index 2e5e9d0955..433dfe8706 100644 --- a/backend/src/main/java/io/dataease/controller/request/panel/PanelGroupRequest.java +++ b/backend/src/main/java/io/dataease/controller/request/panel/PanelGroupRequest.java @@ -15,6 +15,8 @@ public class PanelGroupRequest extends PanelGroupDTO { private String sort; @ApiModelProperty("用户ID") private String userId; + @ApiModelProperty("是否是超级管理员") + private Boolean isAdmin; @ApiModelProperty("操作类型") private String optType; @ApiModelProperty("新建来源") diff --git a/backend/src/main/java/io/dataease/ext/ExtPanelGroupMapper.xml b/backend/src/main/java/io/dataease/ext/ExtPanelGroupMapper.xml index a49baabb54..ad1952a632 100644 --- a/backend/src/main/java/io/dataease/ext/ExtPanelGroupMapper.xml +++ b/backend/src/main/java/io/dataease/ext/ExtPanelGroupMapper.xml @@ -33,6 +33,7 @@ panel_group.`name` AS label, panel_group.`source`, panel_group.`panel_type`, + panel_group.`status`, sourcePanelGroup.`mobile_layout`, sourcePanelGroup.`name` as source_panel_name, authInfo.privileges as `privileges` @@ -90,6 +91,9 @@ and panel_group.level = #{level} + + and (panel_group.node_type='folder' or (panel_group.node_type='panel' and panel_group.`status`='publish') or (panel_group.node_type='panel' and panel_group.`status`='unpublished' and authInfo.privileges like '%manage%') ) + ORDER BY CONVERT(panel_group.name using gbk) @@ -107,6 +111,7 @@ panel_group.`name` AS label, panel_group.`node_type`, panel_group.`mobile_layout`, + panel_group.`status`, (case when ISNULL(defaultPanelGroup.id) then false else true end) is_default, defaultPanelGroup.id as default_panel_id, defaultPanelGroup.`name` as default_panel_name, @@ -165,6 +170,9 @@ and panel_group.level = #{level} + + and (panel_group.node_type='folder' or (panel_group.node_type='panel' and panel_group.`status`='publish') or (panel_group.node_type='panel' and panel_group.`status`='unpublished' and authInfo.privileges like '%manage%') ) + 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 9ddc520f9c..27479de489 100644 --- a/backend/src/main/java/io/dataease/service/panel/PanelGroupService.java +++ b/backend/src/main/java/io/dataease/service/panel/PanelGroupService.java @@ -8,6 +8,7 @@ import io.dataease.commons.utils.LogUtil; import io.dataease.commons.utils.TreeUtils; import io.dataease.controller.request.authModel.VAuthModelRequest; import io.dataease.controller.request.dataset.DataSetTableRequest; +import io.dataease.controller.request.panel.PanelGroupBaseInfoRequest; import io.dataease.controller.request.panel.PanelGroupRequest; import io.dataease.controller.request.panel.PanelViewDetailsRequest; import io.dataease.dto.PanelGroupExtendDataDTO; @@ -101,6 +102,7 @@ public class PanelGroupService { public List tree(PanelGroupRequest panelGroupRequest) { String userId = String.valueOf(AuthUtils.getUser().getUserId()); panelGroupRequest.setUserId(userId); + panelGroupRequest.setIsAdmin(AuthUtils.getUser().getIsAdmin()); List panelGroupDTOList = extPanelGroupMapper.panelGroupList(panelGroupRequest); return TreeUtils.mergeTree(panelGroupDTOList, "panel_list"); } @@ -108,6 +110,7 @@ public class PanelGroupService { public List defaultTree(PanelGroupRequest panelGroupRequest) { String userId = String.valueOf(AuthUtils.getUser().getUserId()); panelGroupRequest.setUserId(userId); + panelGroupRequest.setIsAdmin(AuthUtils.getUser().getIsAdmin()); List panelGroupDTOList = extPanelGroupMapper.panelGroupListDefault(panelGroupRequest); return TreeUtils.mergeTree(panelGroupDTOList, "default_panel"); } @@ -527,4 +530,13 @@ public class PanelGroupService { DataEaseException.throwException(e); } } + + public void updatePanelStatus(String panelId,PanelGroupBaseInfoRequest request){ + Assert.notNull(request.getStatus(),"status can not be null"); + Assert.notNull(panelId,"panelId can not be null"); + PanelGroupWithBLOBs panelGroup = new PanelGroupWithBLOBs(); + panelGroup.setId(panelId); + panelGroup.setStatus(request.getStatus()); + panelGroupMapper.updateByPrimaryKeySelective(panelGroup); + } } diff --git a/backend/src/main/resources/db/migration/V35__1.11.sql b/backend/src/main/resources/db/migration/V35__1.11.sql new file mode 100644 index 0000000000..8be983b423 --- /dev/null +++ b/backend/src/main/resources/db/migration/V35__1.11.sql @@ -0,0 +1,2 @@ +ALTER TABLE `panel_group` +ADD COLUMN `status` varchar(255) NULL DEFAULT 'publish' COMMENT '1.publish--发布 2.unpublished--未发布' AFTER `mobile_layout`; diff --git a/backend/src/main/resources/logback.xml b/backend/src/main/resources/logback.xml index 9ee61f5052..c581df7eeb 100644 --- a/backend/src/main/resources/logback.xml +++ b/backend/src/main/resources/logback.xml @@ -157,6 +157,10 @@ + + + + diff --git a/frontend/src/api/panel/panel.js b/frontend/src/api/panel/panel.js index ef34e7fc64..34493b7803 100644 --- a/frontend/src/api/panel/panel.js +++ b/frontend/src/api/panel/panel.js @@ -143,7 +143,8 @@ export function initPanelData(panelId, callback) { id: response.data.id, name: response.data.name, privileges: response.data.privileges, - sourcePanelName: response.data.sourcePanelName + sourcePanelName: response.data.sourcePanelName, + status: response.data.status }) // 刷新联动信息 getPanelAllLinkageInfo(panelId).then(rsp => { @@ -199,3 +200,12 @@ export function exportDetails(data) { }) } +export function updatePanelStatus(panelId, param) { + return request({ + url: '/panel/group/updatePanelStatus/' + panelId, + method: 'post', + loading: false, + data: param + }) +} + diff --git a/frontend/src/lang/en.js b/frontend/src/lang/en.js index 76691da170..ee1cec1542 100644 --- a/frontend/src/lang/en.js +++ b/frontend/src/lang/en.js @@ -131,6 +131,8 @@ export default { default_login: 'Normal' }, commons: { + publish: 'publish', + unpublished: 'unpublished', default_pwd: 'Default Pwd', stop: 'Stop', first_login_tips: 'Please change the initial password', diff --git a/frontend/src/lang/tw.js b/frontend/src/lang/tw.js index acba9f3ab6..09da748a8a 100644 --- a/frontend/src/lang/tw.js +++ b/frontend/src/lang/tw.js @@ -131,6 +131,8 @@ export default { default_login: '普通登錄' }, commons: { + publish: '发布', + unpublished: '取消发布', default_pwd: '初始密碼', stop: '停止', first_login_tips: '您使用的是初始密碼,記得修改密碼哦', diff --git a/frontend/src/lang/zh.js b/frontend/src/lang/zh.js index 3dae91a45a..0ba1fa5899 100644 --- a/frontend/src/lang/zh.js +++ b/frontend/src/lang/zh.js @@ -131,6 +131,8 @@ export default { default_login: '普通登录' }, commons: { + publish: '发布', + unpublished: '取消发布', default_pwd: '初始密码', stop: '停止', first_login_tips: '您使用的是初始密码,记得修改密码哦', diff --git a/frontend/src/styles/deicon/demo_index.html b/frontend/src/styles/deicon/demo_index.html index a6b4659c4c..7b67011ac0 100644 --- a/frontend/src/styles/deicon/demo_index.html +++ b/frontend/src/styles/deicon/demo_index.html @@ -54,6 +54,24 @@
    +
  • + +
    下架
    +
    
    +
  • + +
  • + +
    上架
    +
    
    +
  • + +
  • + +
    发布
    +
    
    +
  • +
  • 批量操作
    @@ -570,9 +588,9 @@
    @font-face {
       font-family: 'iconfont';
    -  src: url('iconfont.woff2?t=1651808824317') format('woff2'),
    -       url('iconfont.woff?t=1651808824317') format('woff'),
    -       url('iconfont.ttf?t=1651808824317') format('truetype');
    +  src: url('iconfont.woff2?t=1652670008819') format('woff2'),
    +       url('iconfont.woff?t=1652670008819') format('woff'),
    +       url('iconfont.ttf?t=1652670008819') format('truetype');
     }
     

    第二步:定义使用 iconfont 的样式

    @@ -598,6 +616,33 @@
      +
    • + +
      + 下架 +
      +
      .icon-unpublish +
      +
    • + +
    • + +
      + 上架 +
      +
      .icon-publish +
      +
    • + +
    • + +
      + 发布 +
      +
      .icon-fabu +
      +
    • +
    • @@ -1372,6 +1417,30 @@
        +
      • + +
        下架
        +
        #icon-unpublish
        +
      • + +
      • + +
        上架
        +
        #icon-publish
        +
      • + +
      • + +
        发布
        +
        #icon-fabu
        +
      • +
      • ({{ $t('panel.source_panel_name') }}:{{ panelInfo.sourcePanelName }}) + {{ $t('commons.edit') }} + + + {{ $t('commons.unpublished') }} + {{ $t('commons.publish') }} + + + @@ -136,7 +144,7 @@ import { starStatus, saveEnshrine, deleteEnshrine } from '@/api/panel/enshrine' import bus from '@/utils/bus' import { queryAll } from '@/api/panel/pdfTemplate' import ShareHead from '@/views/panel/GrantAuth/ShareHead' -import { initPanelData } from '@/api/panel/panel' +import { initPanelData, updatePanelStatus } from '@/api/panel/panel' import { proxyInitPanelData } from '@/api/panel/shareProxy' import { dataURLToBlob } from '@/components/canvas/utils/utils' import { findResourceAsBase64, readFile } from '@/api/staticResource/staticResource' @@ -420,6 +428,14 @@ export default { const param = { userId: this.shareUserId } proxyInitPanelData(this.panelInfo.id, param, null) } else { initPanelData(this.panelInfo.id) } + }, + changePublishState() { + if (this.panelInfo.status === 'publish') { + this.panelInfo.status = 'unpublished' + } else { + this.panelInfo.status = 'publish' + } + updatePanelStatus(this.panelInfo.id, { 'status': this.panelInfo.status }) } } } diff --git a/mobile/src/api/panel.js b/mobile/src/api/panel.js index 5e867aa354..3fab45063b 100644 --- a/mobile/src/api/panel.js +++ b/mobile/src/api/panel.js @@ -68,6 +68,6 @@ export function starStatus(panelId) { method: 'post', loading: true }) - } - - \ No newline at end of file +} + +