You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Confluence中点击Web Item时弹出带输入框的对话框?

实现Confluence Web-item点击弹出带输入框的对话框

1. 调整Web-item配置

修改atlassian-plugin.xml中的Web-item定义,将链接改为触发前端逻辑的方式,并添加标识类方便JS绑定事件:

<web-item key="aad-permissions-web-item" name="AAD Permissions" section="system.space.permissions/tabs" weight="100">
    <description>Manage AAD Permissions for the space</description>
    <link linkId="aad-permissions-link">javascript:void(0)</link>
    <param name="class" value="aad-permissions-trigger"/>
</web-item>

2. 引入前端依赖资源

在atlassian-plugin.xml中注册Web资源,依赖Confluence内置的AUI对话框组件,并绑定到空间权限页面:

<web-resource key="aad-permissions-resources" name="AAD Permissions Resources">
    <dependency>com.atlassian.auiplugin:ajs</dependency>
    <dependency>com.atlassian.auiplugin:aui-dialog2</dependency>
    <resource type="download" name="aad-permissions.js" location="/js/aad-permissions.js"/>
    <resource type="download" name="aad-permissions.css" location="/css/aad-permissions.css"/>
    <context>space-permissions</context>
</web-resource>

3. 编写前端对话框逻辑

在aad-permissions.js中实现点击事件监听、对话框创建及表单提交逻辑:

AJS.toInit(function() {
    // 绑定Web-item点击事件
    AJS.$('.aad-permissions-trigger').on('click', function() {
        // 构建对话框内的表单内容
        const dialogContent = `
            <div class="aui-dialog2-content">
                <form class="aui" id="aad-permissions-form">
                    <div class="field-group">
                        <label for="aad-principal-id">AAD Principal ID</label>
                        <input type="text" id="aad-principal-id" name="aadPrincipalId" class="text" placeholder="输入AAD主体ID">
                    </div>
                    <div class="field-group">
                        <label for="aad-permission-level">权限等级</label>
                        <select id="aad-permission-level" name="aadPermissionLevel" class="select">
                            <option value="read">只读</option>
                            <option value="edit">编辑</option>
                            <option value="admin">管理员</option>
                        </select>
                    </div>
                </form>
            </div>
        `;

        // 初始化AUI对话框
        const dialog = AJS.dialog2({
            width: 500,
            title: "配置AAD权限",
            body: dialogContent,
            buttons: [
                {
                    text: "取消",
                    handler: () => dialog.hide()
                },
                {
                    text: "保存",
                    primary: true,
                    handler: function() {
                        // 获取表单输入值
                        const principalId = AJS.$('#aad-principal-id').val();
                        const permissionLevel = AJS.$('#aad-permission-level').val();

                        // 提交数据到后端REST接口(示例)
                        AJS.$.ajax({
                            url: `${AJS.contextPath()}/rest/aad-permissions/1.0/space/${AJS.params.spaceKey}/permissions`,
                            type: "POST",
                            contentType: "application/json",
                            data: JSON.stringify({principalId, permissionLevel}),
                            success: () => {
                                AJS.messages.success({title: "成功", body: "AAD权限配置完成"});
                                dialog.hide();
                            },
                            error: (xhr) => {
                                AJS.messages.error({title: "失败", body: `配置失败:${xhr.responseText}`});
                            }
                        });
                    }
                }
            ]
        });

        // 显示对话框
        dialog.show();
    });
});

4. (可选)实现后端REST接口

如果需要持久化权限数据,编写Java REST资源类,并在atlassian-plugin.xml中注册:

REST资源类示例

package com.example.aadpermissions.rest;

import com.atlassian.confluence.spaces.Space;
import com.atlassian.confluence.spaces.SpaceManager;
import javax.ws.rs.*;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import org.springframework.beans.factory.annotation.Autowired;

@Path("/permissions")
public class AadPermissionsResource {

    private final SpaceManager spaceManager;

    @Autowired
    public AadPermissionsResource(SpaceManager spaceManager) {
        this.spaceManager = spaceManager;
    }

    @POST
    @Path("/space/{spaceKey}")
    @Consumes(MediaType.APPLICATION_JSON)
    @Produces(MediaType.APPLICATION_JSON)
    public Response savePermissions(@PathParam("spaceKey") String spaceKey, AadPermissionRequest request) {
        Space space = spaceManager.getSpace(spaceKey);
        if (space == null) {
            return Response.status(Response.Status.NOT_FOUND).entity("空间不存在").build();
        }

        // 此处添加业务逻辑:如关联权限到空间、同步到AAD等
        // ...

        return Response.ok().entity("权限已保存").build();
    }

    // 请求数据传输类
    public static class AadPermissionRequest {
        private String principalId;
        private String permissionLevel;

        // Getter和Setter方法
        public String getPrincipalId() { return principalId; }
        public void setPrincipalId(String principalId) { this.principalId = principalId; }
        public String getPermissionLevel() { return permissionLevel; }
        public void setPermissionLevel(String permissionLevel) { this.permissionLevel = permissionLevel; }
    }
}

注册REST资源

<rest-resource key="aad-permissions-rest" name="AAD Permissions REST Resource" path="/aad-permissions/1.0">
    <description>管理AAD权限的REST端点</description>
    <resource-class>com.example.aadpermissions.rest.AadPermissionsResource</resource-class>
</rest-resource>

5. (可选)自定义对话框样式

在aad-permissions.css中添加样式调整:

#aad-permissions-form .field-group {
    margin-bottom: 16px;
}

内容的提问来源于stack exchange,提问作者Preethi H R

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 18:23:29