mirror of
				https://github.com/TeaOSLab/EdgeAdmin.git
				synced 2025-11-04 05:00:25 +08:00 
			
		
		
		
	实现发送消息到媒介
This commit is contained in:
		@@ -252,6 +252,10 @@ func (this *RPCClient) MessageTaskLogRPC() pb.MessageTaskLogServiceClient {
 | 
			
		||||
	return pb.NewMessageTaskLogServiceClient(this.pickConn())
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (this *RPCClient) MessageReceiverRPC() pb.MessageReceiverServiceClient {
 | 
			
		||||
	return pb.NewMessageReceiverServiceClient(this.pickConn())
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (this *RPCClient) IPLibraryRPC() pb.IPLibraryServiceClient {
 | 
			
		||||
	return pb.NewIPLibraryServiceClient(this.pickConn())
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -41,11 +41,11 @@ func (this *CreatePopupAction) RunPost(params struct {
 | 
			
		||||
	groupIds := utils.SplitNumbers(params.GroupIds)
 | 
			
		||||
 | 
			
		||||
	resp, err := this.RPC().MessageRecipientRPC().CreateMessageRecipient(this.AdminContext(), &pb.CreateMessageRecipientRequest{
 | 
			
		||||
		AdminId:     params.AdminId,
 | 
			
		||||
		InstanceId:  params.InstanceId,
 | 
			
		||||
		User:        params.User,
 | 
			
		||||
		GroupIds:    groupIds,
 | 
			
		||||
		Description: params.Description,
 | 
			
		||||
		AdminId:                  params.AdminId,
 | 
			
		||||
		MessageMediaInstanceId:   params.InstanceId,
 | 
			
		||||
		User:                     params.User,
 | 
			
		||||
		MessageRecipientGroupIds: groupIds,
 | 
			
		||||
		Description:              params.Description,
 | 
			
		||||
	})
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		this.ErrorPage(err)
 | 
			
		||||
 
 | 
			
		||||
@@ -18,10 +18,10 @@ func (this *IndexAction) RunGet(params struct {
 | 
			
		||||
}) {
 | 
			
		||||
	// TODO 增加系统用户、媒介类型等条件搜索
 | 
			
		||||
	countResp, err := this.RPC().MessageRecipientRPC().CountAllEnabledMessageRecipients(this.AdminContext(), &pb.CountAllEnabledMessageRecipientsRequest{
 | 
			
		||||
		AdminId:   0,
 | 
			
		||||
		MediaType: "",
 | 
			
		||||
		GroupId:   0,
 | 
			
		||||
		Keyword:   "",
 | 
			
		||||
		AdminId:                 0,
 | 
			
		||||
		MediaType:               "",
 | 
			
		||||
		MessageRecipientGroupId: 0,
 | 
			
		||||
		Keyword:                 "",
 | 
			
		||||
	})
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		this.ErrorPage(err)
 | 
			
		||||
@@ -32,12 +32,12 @@ func (this *IndexAction) RunGet(params struct {
 | 
			
		||||
	this.Data["page"] = page.AsHTML()
 | 
			
		||||
 | 
			
		||||
	recipientsResp, err := this.RPC().MessageRecipientRPC().ListEnabledMessageRecipients(this.AdminContext(), &pb.ListEnabledMessageRecipientsRequest{
 | 
			
		||||
		AdminId:   0,
 | 
			
		||||
		MediaType: "",
 | 
			
		||||
		GroupId:   0,
 | 
			
		||||
		Keyword:   "",
 | 
			
		||||
		Offset:    page.Offset,
 | 
			
		||||
		Size:      page.Size,
 | 
			
		||||
		AdminId:                 0,
 | 
			
		||||
		MediaType:               "",
 | 
			
		||||
		MessageRecipientGroupId: 0,
 | 
			
		||||
		Keyword:                 "",
 | 
			
		||||
		Offset:                  page.Offset,
 | 
			
		||||
		Size:                    page.Size,
 | 
			
		||||
	})
 | 
			
		||||
 | 
			
		||||
	recipientMaps := []maps.Map{}
 | 
			
		||||
 
 | 
			
		||||
@@ -43,6 +43,7 @@ func (this *IndexAction) RunGet(params struct {
 | 
			
		||||
		}
 | 
			
		||||
		instanceMaps = append(instanceMaps, maps.Map{
 | 
			
		||||
			"id":   instance.Id,
 | 
			
		||||
			"name": instance.Name,
 | 
			
		||||
			"isOn": instance.IsOn,
 | 
			
		||||
			"media": maps.Map{
 | 
			
		||||
				"name": instance.MessageMedia.Name,
 | 
			
		||||
 
 | 
			
		||||
@@ -75,13 +75,13 @@ func (this *UpdateAction) RunPost(params struct {
 | 
			
		||||
	groupIds := utils.SplitNumbers(params.GroupIds)
 | 
			
		||||
 | 
			
		||||
	_, err := this.RPC().MessageRecipientRPC().UpdateMessageRecipient(this.AdminContext(), &pb.UpdateMessageRecipientRequest{
 | 
			
		||||
		MessageRecipientId: params.RecipientId,
 | 
			
		||||
		AdminId:            params.AdminId,
 | 
			
		||||
		InstanceId:         params.InstanceId,
 | 
			
		||||
		User:               params.User,
 | 
			
		||||
		GroupIds:           groupIds,
 | 
			
		||||
		Description:        params.Description,
 | 
			
		||||
		IsOn:               params.IsOn,
 | 
			
		||||
		MessageRecipientId:       params.RecipientId,
 | 
			
		||||
		AdminId:                  params.AdminId,
 | 
			
		||||
		MessageMediaInstanceId:   params.InstanceId,
 | 
			
		||||
		User:                     params.User,
 | 
			
		||||
		MessageRecipientGroupIds: groupIds,
 | 
			
		||||
		Description:              params.Description,
 | 
			
		||||
		IsOn:                     params.IsOn,
 | 
			
		||||
	})
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		this.ErrorPage(err)
 | 
			
		||||
 
 | 
			
		||||
@@ -6,6 +6,7 @@ import (
 | 
			
		||||
	"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/clusters/cluster/settings/dns"
 | 
			
		||||
	firewallActions "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/clusters/cluster/settings/firewall-actions"
 | 
			
		||||
	"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/clusters/cluster/settings/health"
 | 
			
		||||
	"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/clusters/cluster/settings/message"
 | 
			
		||||
	"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/clusters/cluster/settings/services"
 | 
			
		||||
	"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/clusters/cluster/settings/toa"
 | 
			
		||||
	"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/clusters/cluster/settings/waf"
 | 
			
		||||
@@ -36,6 +37,12 @@ func init() {
 | 
			
		||||
			Prefix("/clusters/cluster/settings/dns").
 | 
			
		||||
			GetPost("", new(dns.IndexAction)).
 | 
			
		||||
 | 
			
		||||
			// 消息
 | 
			
		||||
			Prefix("/clusters/cluster/settings/message").
 | 
			
		||||
			GetPost("", new(message.IndexAction)).
 | 
			
		||||
			Get("/selectReceiverPopup", new(message.SelectReceiverPopupAction)).
 | 
			
		||||
			Post("/selectedReceivers", new(message.SelectedReceiversAction)).
 | 
			
		||||
 | 
			
		||||
			// TOA
 | 
			
		||||
			Prefix("/clusters/cluster/settings/toa").
 | 
			
		||||
			GetPost("", new(toa.IndexAction)).
 | 
			
		||||
 
 | 
			
		||||
@@ -0,0 +1,75 @@
 | 
			
		||||
package message
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"encoding/json"
 | 
			
		||||
	"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils"
 | 
			
		||||
	"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
 | 
			
		||||
	"github.com/iwind/TeaGo/actions"
 | 
			
		||||
	"github.com/iwind/TeaGo/maps"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type IndexAction struct {
 | 
			
		||||
	actionutils.ParentAction
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (this *IndexAction) Init() {
 | 
			
		||||
	this.Nav("", "setting", "")
 | 
			
		||||
	this.SecondMenu("message")
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (this *IndexAction) RunGet(params struct{}) {
 | 
			
		||||
	this.Show()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (this *IndexAction) RunPost(params struct {
 | 
			
		||||
	ClusterId     int64
 | 
			
		||||
	ReceiversJSON []byte
 | 
			
		||||
 | 
			
		||||
	Must *actions.Must
 | 
			
		||||
	CSRF *actionutils.CSRF
 | 
			
		||||
}) {
 | 
			
		||||
	defer this.CreateLogInfo("修改集群 %d 消息接收人", params.ClusterId)
 | 
			
		||||
 | 
			
		||||
	receiverMaps := []maps.Map{}
 | 
			
		||||
	if len(params.ReceiversJSON) > 0 {
 | 
			
		||||
		err := json.Unmarshal(params.ReceiversJSON, &receiverMaps)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			this.ErrorPage(err)
 | 
			
		||||
			return
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	pbReceiverOptions := &pb.UpdateMessageReceiversRequest_RecipientOptions{}
 | 
			
		||||
	for _, receiverMap := range receiverMaps {
 | 
			
		||||
		recipientId := int64(0)
 | 
			
		||||
		groupId := int64(0)
 | 
			
		||||
		receiverType := receiverMap.GetString("type")
 | 
			
		||||
		switch receiverType {
 | 
			
		||||
		case "recipient":
 | 
			
		||||
			recipientId = receiverMap.GetInt64("id")
 | 
			
		||||
		case "group":
 | 
			
		||||
			groupId = receiverMap.GetInt64("id")
 | 
			
		||||
		default:
 | 
			
		||||
			continue
 | 
			
		||||
		}
 | 
			
		||||
		pbReceiverOptions.RecipientOptions = append(pbReceiverOptions.RecipientOptions, &pb.UpdateMessageReceiversRequest_RecipientOption{
 | 
			
		||||
			MessageRecipientId:      recipientId,
 | 
			
		||||
			MessageRecipientGroupId: groupId,
 | 
			
		||||
		})
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	_, err := this.RPC().MessageReceiverRPC().UpdateMessageReceivers(this.AdminContext(), &pb.UpdateMessageReceiversRequest{
 | 
			
		||||
		NodeClusterId: params.ClusterId,
 | 
			
		||||
		NodeId:        0,
 | 
			
		||||
		ServerId:      0,
 | 
			
		||||
		ParamsJSON:    nil,
 | 
			
		||||
		RecipientOptions: map[string]*pb.UpdateMessageReceiversRequest_RecipientOptions{
 | 
			
		||||
			"*": pbReceiverOptions,
 | 
			
		||||
		},
 | 
			
		||||
	})
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		this.ErrorPage(err)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	this.Success()
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,77 @@
 | 
			
		||||
package message
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"github.com/TeaOSLab/EdgeAdmin/internal/utils"
 | 
			
		||||
	"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils"
 | 
			
		||||
	"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
 | 
			
		||||
	"github.com/iwind/TeaGo/lists"
 | 
			
		||||
	"github.com/iwind/TeaGo/maps"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type SelectReceiverPopupAction struct {
 | 
			
		||||
	actionutils.ParentAction
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (this *SelectReceiverPopupAction) Init() {
 | 
			
		||||
	this.Nav("", "", "")
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (this *SelectReceiverPopupAction) RunGet(params struct {
 | 
			
		||||
	RecipientIds string
 | 
			
		||||
	GroupIds     string
 | 
			
		||||
}) {
 | 
			
		||||
	recipientIds := utils.SplitNumbers(params.RecipientIds)
 | 
			
		||||
	groupIds := utils.SplitNumbers(params.GroupIds)
 | 
			
		||||
 | 
			
		||||
	// 所有接收人
 | 
			
		||||
	recipientsResp, err := this.RPC().MessageRecipientRPC().ListEnabledMessageRecipients(this.AdminContext(), &pb.ListEnabledMessageRecipientsRequest{
 | 
			
		||||
		AdminId:                 0,
 | 
			
		||||
		MediaType:               "",
 | 
			
		||||
		MessageRecipientGroupId: 0,
 | 
			
		||||
		Keyword:                 "",
 | 
			
		||||
		Offset:                  0,
 | 
			
		||||
		Size:                    1000, // TODO 支持搜索
 | 
			
		||||
	})
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		this.ErrorPage(err)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	recipientMaps := []maps.Map{}
 | 
			
		||||
	for _, recipient := range recipientsResp.MessageRecipients {
 | 
			
		||||
		if !recipient.IsOn {
 | 
			
		||||
			continue
 | 
			
		||||
		}
 | 
			
		||||
		if lists.ContainsInt64(recipientIds, recipient.Id) {
 | 
			
		||||
			continue
 | 
			
		||||
		}
 | 
			
		||||
		recipientMaps = append(recipientMaps, maps.Map{
 | 
			
		||||
			"id":           recipient.Id,
 | 
			
		||||
			"name":         recipient.Admin.Fullname,
 | 
			
		||||
			"instanceName": recipient.MessageMediaInstance.Name,
 | 
			
		||||
		})
 | 
			
		||||
	}
 | 
			
		||||
	this.Data["recipients"] = recipientMaps
 | 
			
		||||
 | 
			
		||||
	// 所有分组
 | 
			
		||||
	groupsResp, err := this.RPC().MessageRecipientGroupRPC().FindAllEnabledMessageRecipientGroups(this.AdminContext(), &pb.FindAllEnabledMessageRecipientGroupsRequest{})
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		this.ErrorPage(err)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	groupMaps := []maps.Map{}
 | 
			
		||||
	for _, group := range groupsResp.MessageRecipientGroups {
 | 
			
		||||
		if !group.IsOn {
 | 
			
		||||
			continue
 | 
			
		||||
		}
 | 
			
		||||
		if lists.ContainsInt64(groupIds, group.Id) {
 | 
			
		||||
			continue
 | 
			
		||||
		}
 | 
			
		||||
		groupMaps = append(groupMaps, maps.Map{
 | 
			
		||||
			"id":   group.Id,
 | 
			
		||||
			"name": group.Name,
 | 
			
		||||
		})
 | 
			
		||||
	}
 | 
			
		||||
	this.Data["groups"] = groupMaps
 | 
			
		||||
 | 
			
		||||
	this.Show()
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,61 @@
 | 
			
		||||
// Copyright 2021 Liuxiangchao iwind.liu@gmail.com. All rights reserved.
 | 
			
		||||
 | 
			
		||||
package message
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils"
 | 
			
		||||
	"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
 | 
			
		||||
	"github.com/iwind/TeaGo/maps"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type SelectedReceiversAction struct {
 | 
			
		||||
	actionutils.ParentAction
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (this *SelectedReceiversAction) Init() {
 | 
			
		||||
	this.Nav("", "", "")
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (this *SelectedReceiversAction) RunPost(params struct {
 | 
			
		||||
	ClusterId int64
 | 
			
		||||
	NodeId    int64
 | 
			
		||||
	ServerId  int64
 | 
			
		||||
}) {
 | 
			
		||||
	receiversResp, err := this.RPC().MessageReceiverRPC().FindAllMessageReceivers(this.AdminContext(), &pb.FindAllMessageReceiversRequest{
 | 
			
		||||
		NodeClusterId: params.ClusterId,
 | 
			
		||||
		NodeId:        params.NodeId,
 | 
			
		||||
		ServerId:      params.ServerId,
 | 
			
		||||
	})
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		this.ErrorPage(err)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	receiverMaps := []maps.Map{}
 | 
			
		||||
	for _, receiver := range receiversResp.MessageReceivers {
 | 
			
		||||
		id := int64(0)
 | 
			
		||||
		name := ""
 | 
			
		||||
		receiverType := ""
 | 
			
		||||
		subName := ""
 | 
			
		||||
		if receiver.MessageRecipient != nil {
 | 
			
		||||
			id = receiver.MessageRecipient.Id
 | 
			
		||||
			name = receiver.MessageRecipient.Admin.Fullname
 | 
			
		||||
			subName = receiver.MessageRecipient.MessageMediaInstance.Name
 | 
			
		||||
			receiverType = "recipient"
 | 
			
		||||
		} else if receiver.MessageRecipientGroup != nil {
 | 
			
		||||
			id = receiver.MessageRecipientGroup.Id
 | 
			
		||||
			name = receiver.MessageRecipientGroup.Name
 | 
			
		||||
			receiverType = "group"
 | 
			
		||||
		} else {
 | 
			
		||||
			continue
 | 
			
		||||
		}
 | 
			
		||||
		receiverMaps = append(receiverMaps, maps.Map{
 | 
			
		||||
			"id":      id,
 | 
			
		||||
			"name":    name,
 | 
			
		||||
			"subName": subName,
 | 
			
		||||
			"type":    receiverType,
 | 
			
		||||
		})
 | 
			
		||||
	}
 | 
			
		||||
	this.Data["receivers"] = receiverMaps
 | 
			
		||||
 | 
			
		||||
	this.Success()
 | 
			
		||||
}
 | 
			
		||||
@@ -115,6 +115,18 @@ func (this *ClusterHelper) createSettingMenu(cluster *pb.NodeCluster, selectedIt
 | 
			
		||||
		"isActive": selectedItem == "dns",
 | 
			
		||||
		"isOn":     cluster.DnsDomainId > 0 || len(cluster.DnsName) > 0,
 | 
			
		||||
	})
 | 
			
		||||
	items = append(items, maps.Map{
 | 
			
		||||
		"name":     "消息通知",
 | 
			
		||||
		"url":      "/clusters/cluster/settings/message?clusterId=" + clusterId,
 | 
			
		||||
		"isActive": selectedItem == "message",
 | 
			
		||||
	})
 | 
			
		||||
 | 
			
		||||
	items = append(items, maps.Map{
 | 
			
		||||
		"name":     "-",
 | 
			
		||||
		"url":      "",
 | 
			
		||||
		"isActive": false,
 | 
			
		||||
	})
 | 
			
		||||
 | 
			
		||||
	items = append(items, maps.Map{
 | 
			
		||||
		"name":     "系统服务",
 | 
			
		||||
		"url":      "/clusters/cluster/settings/services?clusterId=" + clusterId,
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										58
									
								
								web/public/js/components/messages/message-receivers-box.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										58
									
								
								web/public/js/components/messages/message-receivers-box.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,58 @@
 | 
			
		||||
// 消息接收人设置
 | 
			
		||||
Vue.component("message-receivers-box", {
 | 
			
		||||
	props: ["v-node-cluster-id"],
 | 
			
		||||
	mounted: function () {
 | 
			
		||||
		let that = this
 | 
			
		||||
		Tea.action("/clusters/cluster/settings/message/selectedReceivers")
 | 
			
		||||
			.params({
 | 
			
		||||
				clusterId: this.clusterId
 | 
			
		||||
			})
 | 
			
		||||
			.post()
 | 
			
		||||
			.success(function (resp) {
 | 
			
		||||
				that.receivers = resp.data.receivers
 | 
			
		||||
			})
 | 
			
		||||
	},
 | 
			
		||||
	data: function () {
 | 
			
		||||
		let clusterId = this.vNodeClusterId
 | 
			
		||||
		if (clusterId == null) {
 | 
			
		||||
			clusterId = 0
 | 
			
		||||
		}
 | 
			
		||||
		return {
 | 
			
		||||
			clusterId: clusterId,
 | 
			
		||||
			receivers: []
 | 
			
		||||
		}
 | 
			
		||||
	},
 | 
			
		||||
	methods: {
 | 
			
		||||
		addReceiver: function () {
 | 
			
		||||
			let that = this
 | 
			
		||||
			let recipientIdStrings = []
 | 
			
		||||
			let groupIdStrings = []
 | 
			
		||||
			this.receivers.forEach(function (v) {
 | 
			
		||||
				if (v.type == "recipient") {
 | 
			
		||||
					recipientIdStrings.push(v.id.toString())
 | 
			
		||||
				} else if (v.type == "group") {
 | 
			
		||||
					groupIdStrings.push(v.id.toString())
 | 
			
		||||
				}
 | 
			
		||||
			})
 | 
			
		||||
 | 
			
		||||
			teaweb.popup("/clusters/cluster/settings/message/selectReceiverPopup?recipientIds=" + recipientIdStrings.join(",") + "&groupIds=" + groupIdStrings.join(","), {
 | 
			
		||||
				callback: function (resp) {
 | 
			
		||||
					that.receivers.push(resp.data)
 | 
			
		||||
				}
 | 
			
		||||
			})
 | 
			
		||||
		},
 | 
			
		||||
		removeReceiver: function (index) {
 | 
			
		||||
			this.receivers.$remove(index)
 | 
			
		||||
		}
 | 
			
		||||
	},
 | 
			
		||||
	template: `<div>
 | 
			
		||||
        <input type="hidden" name="receiversJSON" :value="JSON.stringify(receivers)"/>           
 | 
			
		||||
        <div v-if="receivers.length > 0">
 | 
			
		||||
            <div v-for="(receiver, index) in receivers" class="ui label basic small">
 | 
			
		||||
               <span v-if="receiver.type == 'group'">分组:</span>{{receiver.name}} <span class="grey small" v-if="receiver.subName != null && receiver.subName.length > 0">({{receiver.subName}})</span>   <a href="" title="删除" @click.prevent="removeReceiver(index)"><i class="icon remove"></i></a>
 | 
			
		||||
            </div>
 | 
			
		||||
             <div class="ui divider"></div>
 | 
			
		||||
        </div>
 | 
			
		||||
      <button type="button" class="ui button tiny" @click.prevent="addReceiver">+</button>
 | 
			
		||||
</div>`
 | 
			
		||||
})
 | 
			
		||||
@@ -181,6 +181,11 @@ window.teaweb = {
 | 
			
		||||
        var hash = window.location.hash;
 | 
			
		||||
        return hash != null && hash.startsWith("#popup");
 | 
			
		||||
    },
 | 
			
		||||
    closePopup: function () {
 | 
			
		||||
        if (this.isPopup()) {
 | 
			
		||||
            window.parent.Swal.close();
 | 
			
		||||
        }
 | 
			
		||||
    },
 | 
			
		||||
    Swal: function () {
 | 
			
		||||
        return this.isPopup() ? window.parent.Swal : window.Swal;
 | 
			
		||||
    },
 | 
			
		||||
 
 | 
			
		||||
@@ -10,6 +10,7 @@
 | 
			
		||||
<table class="ui table selectable celled" v-if="instances.length > 0">
 | 
			
		||||
    <thead>
 | 
			
		||||
        <tr>
 | 
			
		||||
            <th>媒介名称</th>
 | 
			
		||||
            <th class="three wide">媒介类型</th>
 | 
			
		||||
            <th>备注</th>
 | 
			
		||||
            <th class="two wide">状态</th>
 | 
			
		||||
@@ -17,6 +18,7 @@
 | 
			
		||||
        </tr>
 | 
			
		||||
    </thead>
 | 
			
		||||
    <tr v-for="instance in instances">
 | 
			
		||||
        <td>{{instance.name}}</td>
 | 
			
		||||
        <td>{{instance.media.name}}</td>
 | 
			
		||||
        <td>
 | 
			
		||||
            <span v-if="instance.description.length > 0">{{instance.description}}</span>
 | 
			
		||||
 
 | 
			
		||||
@@ -5,11 +5,11 @@
 | 
			
		||||
 | 
			
		||||
<div v-if="logs.length > 0">
 | 
			
		||||
    <div class="margin"></div>
 | 
			
		||||
    <table class="ui table selectable definition" v-for="log in logs" :class="{red: !log.isOk}">
 | 
			
		||||
    <table class="ui table selectable definition" v-for="log in logs" :class="{red: !log.isOk, green: log.isOk}">
 | 
			
		||||
        <tr>
 | 
			
		||||
            <td class="title">简介</td>
 | 
			
		||||
            <td>接收人:{{log.task.user}} <span class="disabled">  |  </span> 媒介:{{log.task.instance.name}}<link-icon :href="'/admins/recipients/instances/instance?instanceId=' + log.task.instance.id"></link-icon>
 | 
			
		||||
                <span class="disabled">  |  </span> 时间:{{log.createdTime}}
 | 
			
		||||
                <span class="disabled">  |  </span> 时间:{{log.createdTime}}  |  <span class="ui green basic label tiny" v-if="log.isOk">成功</span><span class="ui red basic label tiny" v-if="!log.isOk">失败</span>
 | 
			
		||||
            </td>
 | 
			
		||||
        </tr>
 | 
			
		||||
        <tr v-if="log.task.subject.length > 0">
 | 
			
		||||
 
 | 
			
		||||
@@ -0,0 +1,20 @@
 | 
			
		||||
{$layout}
 | 
			
		||||
{$template "/left_menu"}
 | 
			
		||||
 | 
			
		||||
<div class="right-box">
 | 
			
		||||
    <form class="ui form" data-tea-action="$" data-tea-success="success">
 | 
			
		||||
        <csrf-token></csrf-token>
 | 
			
		||||
        <input type="hidden" name="clusterId" :value="clusterId"/>
 | 
			
		||||
 | 
			
		||||
        <table class="ui table selectable definition">
 | 
			
		||||
            <tr>
 | 
			
		||||
                <td class="title">消息接收人</td>
 | 
			
		||||
                <td>
 | 
			
		||||
                    <message-receivers-box :v-node-cluster-id="clusterId"></message-receivers-box>
 | 
			
		||||
                </td>
 | 
			
		||||
            </tr>
 | 
			
		||||
        </table>
 | 
			
		||||
 | 
			
		||||
        <submit-btn></submit-btn>
 | 
			
		||||
    </form>
 | 
			
		||||
</div>
 | 
			
		||||
@@ -0,0 +1,3 @@
 | 
			
		||||
Tea.context(function () {
 | 
			
		||||
    this.success = NotifyReloadSuccess("保存成功")
 | 
			
		||||
})
 | 
			
		||||
@@ -0,0 +1,36 @@
 | 
			
		||||
{$layout "layout_popup"}
 | 
			
		||||
 | 
			
		||||
<h3>选择接收人</h3>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<form class="ui form">
 | 
			
		||||
    <table class="ui table definition">
 | 
			
		||||
        <tr>
 | 
			
		||||
            <td class="title">选择接收人</td>
 | 
			
		||||
            <td>
 | 
			
		||||
                <div v-if="recipients.length == 0">
 | 
			
		||||
                    <span class="disabled">暂时没有接收人。</span>
 | 
			
		||||
                </div>
 | 
			
		||||
                <div v-else>
 | 
			
		||||
                    <a class="ui label small basic" :class="{blue: selectedRecipient != null && recipient.id == selectedRecipient.id}" v-for="recipient in recipients" @click.prevent="selectRecipient(recipient)">
 | 
			
		||||
                        {{recipient.name}}   <span class="small grey">({{recipient.instanceName}})</span>
 | 
			
		||||
                    </a>
 | 
			
		||||
                </div>
 | 
			
		||||
            </td>
 | 
			
		||||
        </tr>
 | 
			
		||||
        <tr>
 | 
			
		||||
            <td>选择接收人分组</td>
 | 
			
		||||
            <td>
 | 
			
		||||
                <div v-if="groups.length == 0">
 | 
			
		||||
                    <span class="disabled">暂时没有接收人分组。</span>
 | 
			
		||||
                </div>
 | 
			
		||||
                <div v-else>
 | 
			
		||||
                   <a class="ui label small basic" :class="{blue: selectedGroup != null && group.id == selectedGroup.id}" v-for="group in groups" @click.prevent="selectGroup(group)">
 | 
			
		||||
                        分组:{{group.name}}
 | 
			
		||||
                   </a>
 | 
			
		||||
                </div>
 | 
			
		||||
            </td>
 | 
			
		||||
        </tr>
 | 
			
		||||
    </table>
 | 
			
		||||
    <button type="button" class="ui button primary" @click.prevent="confirm">确定</button>
 | 
			
		||||
</form>
 | 
			
		||||
@@ -0,0 +1,40 @@
 | 
			
		||||
Tea.context(function () {
 | 
			
		||||
	this.selectedRecipient = null
 | 
			
		||||
	this.selectedGroup = null
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	this.selectRecipient = function (recipient) {
 | 
			
		||||
		this.selectedRecipient = recipient
 | 
			
		||||
		this.selectedGroup = null
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	this.selectGroup = function (group) {
 | 
			
		||||
		this.selectedRecipient = null
 | 
			
		||||
		this.selectedGroup = group
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	this.confirm = function () {
 | 
			
		||||
		if (this.selectedRecipient != null) {
 | 
			
		||||
			NotifyPopup({
 | 
			
		||||
				code: 200,
 | 
			
		||||
				data: {
 | 
			
		||||
					id: this.selectedRecipient.id,
 | 
			
		||||
					name: this.selectedRecipient.name,
 | 
			
		||||
					subName: this.selectedRecipient.instanceName,
 | 
			
		||||
					type: "recipient"
 | 
			
		||||
				}
 | 
			
		||||
			})
 | 
			
		||||
		} else if (this.selectedGroup != null) {
 | 
			
		||||
			NotifyPopup({
 | 
			
		||||
				code: 200,
 | 
			
		||||
				data: {
 | 
			
		||||
					id: this.selectedGroup.id,
 | 
			
		||||
					name: this.selectedGroup.name,
 | 
			
		||||
					type: "group"
 | 
			
		||||
				}
 | 
			
		||||
			})
 | 
			
		||||
		} else {
 | 
			
		||||
			teaweb.closePopup()
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
})
 | 
			
		||||
		Reference in New Issue
	
	Block a user