mirror of
https://github.com/TeaOSLab/EdgeAdmin.git
synced 2025-11-11 18:30:25 +08:00
实现发送消息到媒介
This commit is contained in:
@@ -252,6 +252,10 @@ func (this *RPCClient) MessageTaskLogRPC() pb.MessageTaskLogServiceClient {
|
|||||||
return pb.NewMessageTaskLogServiceClient(this.pickConn())
|
return pb.NewMessageTaskLogServiceClient(this.pickConn())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (this *RPCClient) MessageReceiverRPC() pb.MessageReceiverServiceClient {
|
||||||
|
return pb.NewMessageReceiverServiceClient(this.pickConn())
|
||||||
|
}
|
||||||
|
|
||||||
func (this *RPCClient) IPLibraryRPC() pb.IPLibraryServiceClient {
|
func (this *RPCClient) IPLibraryRPC() pb.IPLibraryServiceClient {
|
||||||
return pb.NewIPLibraryServiceClient(this.pickConn())
|
return pb.NewIPLibraryServiceClient(this.pickConn())
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -41,11 +41,11 @@ func (this *CreatePopupAction) RunPost(params struct {
|
|||||||
groupIds := utils.SplitNumbers(params.GroupIds)
|
groupIds := utils.SplitNumbers(params.GroupIds)
|
||||||
|
|
||||||
resp, err := this.RPC().MessageRecipientRPC().CreateMessageRecipient(this.AdminContext(), &pb.CreateMessageRecipientRequest{
|
resp, err := this.RPC().MessageRecipientRPC().CreateMessageRecipient(this.AdminContext(), &pb.CreateMessageRecipientRequest{
|
||||||
AdminId: params.AdminId,
|
AdminId: params.AdminId,
|
||||||
InstanceId: params.InstanceId,
|
MessageMediaInstanceId: params.InstanceId,
|
||||||
User: params.User,
|
User: params.User,
|
||||||
GroupIds: groupIds,
|
MessageRecipientGroupIds: groupIds,
|
||||||
Description: params.Description,
|
Description: params.Description,
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
this.ErrorPage(err)
|
this.ErrorPage(err)
|
||||||
|
|||||||
@@ -18,10 +18,10 @@ func (this *IndexAction) RunGet(params struct {
|
|||||||
}) {
|
}) {
|
||||||
// TODO 增加系统用户、媒介类型等条件搜索
|
// TODO 增加系统用户、媒介类型等条件搜索
|
||||||
countResp, err := this.RPC().MessageRecipientRPC().CountAllEnabledMessageRecipients(this.AdminContext(), &pb.CountAllEnabledMessageRecipientsRequest{
|
countResp, err := this.RPC().MessageRecipientRPC().CountAllEnabledMessageRecipients(this.AdminContext(), &pb.CountAllEnabledMessageRecipientsRequest{
|
||||||
AdminId: 0,
|
AdminId: 0,
|
||||||
MediaType: "",
|
MediaType: "",
|
||||||
GroupId: 0,
|
MessageRecipientGroupId: 0,
|
||||||
Keyword: "",
|
Keyword: "",
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
this.ErrorPage(err)
|
this.ErrorPage(err)
|
||||||
@@ -32,12 +32,12 @@ func (this *IndexAction) RunGet(params struct {
|
|||||||
this.Data["page"] = page.AsHTML()
|
this.Data["page"] = page.AsHTML()
|
||||||
|
|
||||||
recipientsResp, err := this.RPC().MessageRecipientRPC().ListEnabledMessageRecipients(this.AdminContext(), &pb.ListEnabledMessageRecipientsRequest{
|
recipientsResp, err := this.RPC().MessageRecipientRPC().ListEnabledMessageRecipients(this.AdminContext(), &pb.ListEnabledMessageRecipientsRequest{
|
||||||
AdminId: 0,
|
AdminId: 0,
|
||||||
MediaType: "",
|
MediaType: "",
|
||||||
GroupId: 0,
|
MessageRecipientGroupId: 0,
|
||||||
Keyword: "",
|
Keyword: "",
|
||||||
Offset: page.Offset,
|
Offset: page.Offset,
|
||||||
Size: page.Size,
|
Size: page.Size,
|
||||||
})
|
})
|
||||||
|
|
||||||
recipientMaps := []maps.Map{}
|
recipientMaps := []maps.Map{}
|
||||||
|
|||||||
@@ -43,6 +43,7 @@ func (this *IndexAction) RunGet(params struct {
|
|||||||
}
|
}
|
||||||
instanceMaps = append(instanceMaps, maps.Map{
|
instanceMaps = append(instanceMaps, maps.Map{
|
||||||
"id": instance.Id,
|
"id": instance.Id,
|
||||||
|
"name": instance.Name,
|
||||||
"isOn": instance.IsOn,
|
"isOn": instance.IsOn,
|
||||||
"media": maps.Map{
|
"media": maps.Map{
|
||||||
"name": instance.MessageMedia.Name,
|
"name": instance.MessageMedia.Name,
|
||||||
|
|||||||
@@ -75,13 +75,13 @@ func (this *UpdateAction) RunPost(params struct {
|
|||||||
groupIds := utils.SplitNumbers(params.GroupIds)
|
groupIds := utils.SplitNumbers(params.GroupIds)
|
||||||
|
|
||||||
_, err := this.RPC().MessageRecipientRPC().UpdateMessageRecipient(this.AdminContext(), &pb.UpdateMessageRecipientRequest{
|
_, err := this.RPC().MessageRecipientRPC().UpdateMessageRecipient(this.AdminContext(), &pb.UpdateMessageRecipientRequest{
|
||||||
MessageRecipientId: params.RecipientId,
|
MessageRecipientId: params.RecipientId,
|
||||||
AdminId: params.AdminId,
|
AdminId: params.AdminId,
|
||||||
InstanceId: params.InstanceId,
|
MessageMediaInstanceId: params.InstanceId,
|
||||||
User: params.User,
|
User: params.User,
|
||||||
GroupIds: groupIds,
|
MessageRecipientGroupIds: groupIds,
|
||||||
Description: params.Description,
|
Description: params.Description,
|
||||||
IsOn: params.IsOn,
|
IsOn: params.IsOn,
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
this.ErrorPage(err)
|
this.ErrorPage(err)
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import (
|
|||||||
"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/clusters/cluster/settings/dns"
|
"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"
|
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/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/services"
|
||||||
"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/clusters/cluster/settings/toa"
|
"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/clusters/cluster/settings/toa"
|
||||||
"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/clusters/cluster/settings/waf"
|
"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/clusters/cluster/settings/waf"
|
||||||
@@ -36,6 +37,12 @@ func init() {
|
|||||||
Prefix("/clusters/cluster/settings/dns").
|
Prefix("/clusters/cluster/settings/dns").
|
||||||
GetPost("", new(dns.IndexAction)).
|
GetPost("", new(dns.IndexAction)).
|
||||||
|
|
||||||
|
// 消息
|
||||||
|
Prefix("/clusters/cluster/settings/message").
|
||||||
|
GetPost("", new(message.IndexAction)).
|
||||||
|
Get("/selectReceiverPopup", new(message.SelectReceiverPopupAction)).
|
||||||
|
Post("/selectedReceivers", new(message.SelectedReceiversAction)).
|
||||||
|
|
||||||
// TOA
|
// TOA
|
||||||
Prefix("/clusters/cluster/settings/toa").
|
Prefix("/clusters/cluster/settings/toa").
|
||||||
GetPost("", new(toa.IndexAction)).
|
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",
|
"isActive": selectedItem == "dns",
|
||||||
"isOn": cluster.DnsDomainId > 0 || len(cluster.DnsName) > 0,
|
"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{
|
items = append(items, maps.Map{
|
||||||
"name": "系统服务",
|
"name": "系统服务",
|
||||||
"url": "/clusters/cluster/settings/services?clusterId=" + clusterId,
|
"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;
|
var hash = window.location.hash;
|
||||||
return hash != null && hash.startsWith("#popup");
|
return hash != null && hash.startsWith("#popup");
|
||||||
},
|
},
|
||||||
|
closePopup: function () {
|
||||||
|
if (this.isPopup()) {
|
||||||
|
window.parent.Swal.close();
|
||||||
|
}
|
||||||
|
},
|
||||||
Swal: function () {
|
Swal: function () {
|
||||||
return this.isPopup() ? window.parent.Swal : window.Swal;
|
return this.isPopup() ? window.parent.Swal : window.Swal;
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -10,6 +10,7 @@
|
|||||||
<table class="ui table selectable celled" v-if="instances.length > 0">
|
<table class="ui table selectable celled" v-if="instances.length > 0">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
|
<th>媒介名称</th>
|
||||||
<th class="three wide">媒介类型</th>
|
<th class="three wide">媒介类型</th>
|
||||||
<th>备注</th>
|
<th>备注</th>
|
||||||
<th class="two wide">状态</th>
|
<th class="two wide">状态</th>
|
||||||
@@ -17,6 +18,7 @@
|
|||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tr v-for="instance in instances">
|
<tr v-for="instance in instances">
|
||||||
|
<td>{{instance.name}}</td>
|
||||||
<td>{{instance.media.name}}</td>
|
<td>{{instance.media.name}}</td>
|
||||||
<td>
|
<td>
|
||||||
<span v-if="instance.description.length > 0">{{instance.description}}</span>
|
<span v-if="instance.description.length > 0">{{instance.description}}</span>
|
||||||
|
|||||||
@@ -5,11 +5,11 @@
|
|||||||
|
|
||||||
<div v-if="logs.length > 0">
|
<div v-if="logs.length > 0">
|
||||||
<div class="margin"></div>
|
<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>
|
<tr>
|
||||||
<td class="title">简介</td>
|
<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>
|
<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>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr v-if="log.task.subject.length > 0">
|
<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