mirror of
https://github.com/TeaOSLab/EdgeAdmin.git
synced 2025-11-26 20:40:24 +08:00
消息接收人可以设置接收消息时间段
This commit is contained in:
@@ -5,6 +5,7 @@ import (
|
|||||||
"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils"
|
"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils"
|
||||||
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
|
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
|
||||||
"github.com/iwind/TeaGo/actions"
|
"github.com/iwind/TeaGo/actions"
|
||||||
|
"regexp"
|
||||||
)
|
)
|
||||||
|
|
||||||
type CreatePopupAction struct {
|
type CreatePopupAction struct {
|
||||||
@@ -29,6 +30,14 @@ func (this *CreatePopupAction) RunPost(params struct {
|
|||||||
GroupIds string
|
GroupIds string
|
||||||
Description string
|
Description string
|
||||||
|
|
||||||
|
TimeFromHour string
|
||||||
|
TimeFromMinute string
|
||||||
|
TimeFromSecond string
|
||||||
|
|
||||||
|
TimeToHour string
|
||||||
|
TimeToMinute string
|
||||||
|
TimeToSecond string
|
||||||
|
|
||||||
Must *actions.Must
|
Must *actions.Must
|
||||||
CSRF *actionutils.CSRF
|
CSRF *actionutils.CSRF
|
||||||
}) {
|
}) {
|
||||||
@@ -40,12 +49,26 @@ func (this *CreatePopupAction) RunPost(params struct {
|
|||||||
|
|
||||||
groupIds := utils.SplitNumbers(params.GroupIds)
|
groupIds := utils.SplitNumbers(params.GroupIds)
|
||||||
|
|
||||||
|
var digitReg = regexp.MustCompile(`^\d+$`)
|
||||||
|
|
||||||
|
var timeFrom = ""
|
||||||
|
if digitReg.MatchString(params.TimeFromHour) && digitReg.MatchString(params.TimeFromMinute) && digitReg.MatchString(params.TimeFromSecond) {
|
||||||
|
timeFrom = params.TimeFromHour + ":" + params.TimeFromMinute + ":" + params.TimeFromSecond
|
||||||
|
}
|
||||||
|
|
||||||
|
var timeTo = ""
|
||||||
|
if digitReg.MatchString(params.TimeToHour) && digitReg.MatchString(params.TimeToMinute) && digitReg.MatchString(params.TimeToSecond) {
|
||||||
|
timeTo = params.TimeToHour + ":" + params.TimeToMinute + ":" + params.TimeToSecond
|
||||||
|
}
|
||||||
|
|
||||||
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,
|
||||||
MessageMediaInstanceId: params.InstanceId,
|
MessageMediaInstanceId: params.InstanceId,
|
||||||
User: params.User,
|
User: params.User,
|
||||||
MessageRecipientGroupIds: groupIds,
|
MessageRecipientGroupIds: groupIds,
|
||||||
Description: params.Description,
|
Description: params.Description,
|
||||||
|
TimeFrom: timeFrom,
|
||||||
|
TimeTo: timeTo,
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
this.ErrorPage(err)
|
this.ErrorPage(err)
|
||||||
|
|||||||
@@ -44,6 +44,8 @@ func (this *RecipientAction) RunGet(params struct {
|
|||||||
},
|
},
|
||||||
"user": recipient.User,
|
"user": recipient.User,
|
||||||
"description": recipient.Description,
|
"description": recipient.Description,
|
||||||
|
"timeFrom": recipient.TimeFrom,
|
||||||
|
"timeTo": recipient.TimeTo,
|
||||||
}
|
}
|
||||||
|
|
||||||
this.Show()
|
this.Show()
|
||||||
|
|||||||
@@ -6,6 +6,8 @@ import (
|
|||||||
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
|
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
|
||||||
"github.com/iwind/TeaGo/actions"
|
"github.com/iwind/TeaGo/actions"
|
||||||
"github.com/iwind/TeaGo/maps"
|
"github.com/iwind/TeaGo/maps"
|
||||||
|
"regexp"
|
||||||
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
type UpdateAction struct {
|
type UpdateAction struct {
|
||||||
@@ -30,6 +32,27 @@ func (this *UpdateAction) RunGet(params struct {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var timeFromHour = ""
|
||||||
|
var timeFromMinute = ""
|
||||||
|
var timeFromSecond = ""
|
||||||
|
|
||||||
|
if len(recipient.TimeFrom) > 0 {
|
||||||
|
var pieces = strings.Split(recipient.TimeFrom, ":")
|
||||||
|
timeFromHour = pieces[0]
|
||||||
|
timeFromMinute = pieces[1]
|
||||||
|
timeFromSecond = pieces[2]
|
||||||
|
}
|
||||||
|
|
||||||
|
var timeToHour = ""
|
||||||
|
var timeToMinute = ""
|
||||||
|
var timeToSecond = ""
|
||||||
|
if len(recipient.TimeTo) > 0 {
|
||||||
|
var pieces = strings.Split(recipient.TimeTo, ":")
|
||||||
|
timeToHour = pieces[0]
|
||||||
|
timeToMinute = pieces[1]
|
||||||
|
timeToSecond = pieces[2]
|
||||||
|
}
|
||||||
|
|
||||||
this.Data["recipient"] = maps.Map{
|
this.Data["recipient"] = maps.Map{
|
||||||
"id": recipient.Id,
|
"id": recipient.Id,
|
||||||
"admin": maps.Map{
|
"admin": maps.Map{
|
||||||
@@ -45,6 +68,12 @@ func (this *UpdateAction) RunGet(params struct {
|
|||||||
},
|
},
|
||||||
"user": recipient.User,
|
"user": recipient.User,
|
||||||
"description": recipient.Description,
|
"description": recipient.Description,
|
||||||
|
"timeFromHour": timeFromHour,
|
||||||
|
"timeFromMinute": timeFromMinute,
|
||||||
|
"timeFromSecond": timeFromSecond,
|
||||||
|
"timeToHour": timeToHour,
|
||||||
|
"timeToMinute": timeToMinute,
|
||||||
|
"timeToSecond": timeToSecond,
|
||||||
}
|
}
|
||||||
|
|
||||||
this.Show()
|
this.Show()
|
||||||
@@ -61,6 +90,14 @@ func (this *UpdateAction) RunPost(params struct {
|
|||||||
Description string
|
Description string
|
||||||
IsOn bool
|
IsOn bool
|
||||||
|
|
||||||
|
TimeFromHour string
|
||||||
|
TimeFromMinute string
|
||||||
|
TimeFromSecond string
|
||||||
|
|
||||||
|
TimeToHour string
|
||||||
|
TimeToMinute string
|
||||||
|
TimeToSecond string
|
||||||
|
|
||||||
Must *actions.Must
|
Must *actions.Must
|
||||||
CSRF *actionutils.CSRF
|
CSRF *actionutils.CSRF
|
||||||
}) {
|
}) {
|
||||||
@@ -74,6 +111,18 @@ func (this *UpdateAction) RunPost(params struct {
|
|||||||
|
|
||||||
groupIds := utils.SplitNumbers(params.GroupIds)
|
groupIds := utils.SplitNumbers(params.GroupIds)
|
||||||
|
|
||||||
|
var digitReg = regexp.MustCompile(`^\d+$`)
|
||||||
|
|
||||||
|
var timeFrom = ""
|
||||||
|
if digitReg.MatchString(params.TimeFromHour) && digitReg.MatchString(params.TimeFromMinute) && digitReg.MatchString(params.TimeFromSecond) {
|
||||||
|
timeFrom = params.TimeFromHour + ":" + params.TimeFromMinute + ":" + params.TimeFromSecond
|
||||||
|
}
|
||||||
|
|
||||||
|
var timeTo = ""
|
||||||
|
if digitReg.MatchString(params.TimeToHour) && digitReg.MatchString(params.TimeToMinute) && digitReg.MatchString(params.TimeToSecond) {
|
||||||
|
timeTo = params.TimeToHour + ":" + params.TimeToMinute + ":" + params.TimeToSecond
|
||||||
|
}
|
||||||
|
|
||||||
_, 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,
|
||||||
@@ -82,6 +131,8 @@ func (this *UpdateAction) RunPost(params struct {
|
|||||||
MessageRecipientGroupIds: groupIds,
|
MessageRecipientGroupIds: groupIds,
|
||||||
Description: params.Description,
|
Description: params.Description,
|
||||||
IsOn: params.IsOn,
|
IsOn: params.IsOn,
|
||||||
|
TimeFrom: timeFrom,
|
||||||
|
TimeTo: timeTo,
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
this.ErrorPage(err)
|
this.ErrorPage(err)
|
||||||
|
|||||||
@@ -33,12 +33,70 @@
|
|||||||
<p class="comment">选择当前接收人所属分组。</p>
|
<p class="comment">选择当前接收人所属分组。</p>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="2"><more-options-indicator></more-options-indicator></td>
|
||||||
|
</tr>
|
||||||
|
<tbody v-show="moreOptionsVisible">
|
||||||
|
<tr>
|
||||||
|
<td>发送时间</td>
|
||||||
|
<td>
|
||||||
|
<div class="ui fields inline">
|
||||||
|
<div class="ui field">
|
||||||
|
开始时间:
|
||||||
|
</div>
|
||||||
|
<div class="ui field">
|
||||||
|
<div class="ui input right labeled">
|
||||||
|
<input type="text" name="timeFromHour" size="2" maxlength="2" placeholder="" v-model="timeFromHour"/>
|
||||||
|
<span class="ui label">时</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="ui field">
|
||||||
|
<div class="ui input right labeled">
|
||||||
|
<input type="text" name="timeFromMinute" size="2" maxlength="2" placeholder="" v-model="timeFromMinute"/>
|
||||||
|
<span class="ui label">分</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="ui field">
|
||||||
|
<div class="ui input right labeled">
|
||||||
|
<input type="text" name="timeFromSecond" size="2" maxlength="2" placeholder="" v-model="timeFromSecond"/>
|
||||||
|
<span class="ui label">秒</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="ui divider"></div>
|
||||||
|
<div class="ui fields inline">
|
||||||
|
<div class="ui field">
|
||||||
|
结束时间:
|
||||||
|
</div>
|
||||||
|
<div class="ui field">
|
||||||
|
<div class="ui input right labeled">
|
||||||
|
<input type="text" name="timeToHour" size="2" maxlength="2" placeholder="" v-model="timeToHour"/>
|
||||||
|
<span class="ui label">时</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="ui field">
|
||||||
|
<div class="ui input right labeled">
|
||||||
|
<input type="text" name="timeToMinute" size="2" maxlength="2" placeholder="" v-model="timeToMinute"/>
|
||||||
|
<span class="ui label">分</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="ui field">
|
||||||
|
<div class="ui input right labeled">
|
||||||
|
<input type="text" name="timeToSecond" size="2" maxlength="2" placeholder="" v-model="timeToSecond"/>
|
||||||
|
<span class="ui label">秒</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<p class="comment">24小时制,即小时从0到23。如果填写了发送时间,系统只会在这个时间段内给当前接收人发送消息。 <a href="" v-if="timeFromHour.length > 0 || timeFromMinute.length > 0 || timeFromSecond.length > 0 || timeToHour.length > 0 || timeToMinute.length > 0 || timeToSecond.length > 0" @click.prevent="clearTime">[清除]</a></p>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>备注</td>
|
<td>备注</td>
|
||||||
<td>
|
<td>
|
||||||
<textarea rows="3" name="description" maxlength="100"></textarea>
|
<textarea rows="3" name="description" maxlength="100"></textarea>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
<submit-btn></submit-btn>
|
<submit-btn></submit-btn>
|
||||||
|
|||||||
@@ -8,4 +8,23 @@ Tea.context(function () {
|
|||||||
this.userDescription = ""
|
this.userDescription = ""
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 发送时间
|
||||||
|
*/
|
||||||
|
this.timeFromHour = ""
|
||||||
|
this.timeFromMinute = ""
|
||||||
|
this.timeFromSecond = ""
|
||||||
|
this.timeToHour = ""
|
||||||
|
this.timeToMinute = ""
|
||||||
|
this.timeToSecond = ""
|
||||||
|
|
||||||
|
this.clearTime = function () {
|
||||||
|
this.timeFromHour = ""
|
||||||
|
this.timeFromMinute = ""
|
||||||
|
this.timeFromSecond = ""
|
||||||
|
this.timeToHour = ""
|
||||||
|
this.timeToMinute = ""
|
||||||
|
this.timeToSecond = ""
|
||||||
|
}
|
||||||
})
|
})
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
Tea.context(function () {
|
Tea.context(function () {
|
||||||
this.createRecipient = function () {
|
this.createRecipient = function () {
|
||||||
teaweb.popup(Tea.url(".createPopup"), {
|
teaweb.popup(Tea.url(".createPopup"), {
|
||||||
height: "26em",
|
height: "27em",
|
||||||
callback: function () {
|
callback: function () {
|
||||||
teaweb.success("保存成功", function () {
|
teaweb.success("保存成功", function () {
|
||||||
teaweb.reload()
|
teaweb.reload()
|
||||||
|
|||||||
@@ -348,14 +348,14 @@
|
|||||||
<div class="ui fields inline">
|
<div class="ui fields inline">
|
||||||
<div class="ui field">
|
<div class="ui field">
|
||||||
<div class="ui right labeled input">
|
<div class="ui right labeled input">
|
||||||
<input type="text" name="rateCount" size="4"/>
|
<input type="text" name="rateCount" size="4" maxlength="4"/>
|
||||||
<span class="ui label">次</span>
|
<span class="ui label">次</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="ui field">/</div>
|
<div class="ui field">/</div>
|
||||||
<div class="ui field">
|
<div class="ui field">
|
||||||
<div class="ui right labeled input">
|
<div class="ui right labeled input">
|
||||||
<input type="text" name="rateMinutes" size="4"/>
|
<input type="text" name="rateMinutes" size="4" maxlength="4"/>
|
||||||
<span class="ui label">分钟</span>
|
<span class="ui label">分钟</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -18,7 +18,7 @@
|
|||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tr v-for="instance in instances">
|
<tr v-for="instance in instances">
|
||||||
<td>{{instance.name}}</td>
|
<td><a :href="'/admins/recipients/instances/instance?instanceId=' + instance.id">{{instance.name}}</a></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>
|
||||||
|
|||||||
@@ -348,14 +348,14 @@
|
|||||||
<div class="ui fields inline">
|
<div class="ui fields inline">
|
||||||
<div class="ui field">
|
<div class="ui field">
|
||||||
<div class="ui right labeled input">
|
<div class="ui right labeled input">
|
||||||
<input type="text" name="rateCount" size="4" v-model="instance.rate.count"/>
|
<input type="text" name="rateCount" size="4" v-model="instance.rate.count" maxlength="4"/>
|
||||||
<span class="ui label">次</span>
|
<span class="ui label">次</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="ui field">/</div>
|
<div class="ui field">/</div>
|
||||||
<div class="ui field">
|
<div class="ui field">
|
||||||
<div class="ui right labeled input">
|
<div class="ui right labeled input">
|
||||||
<input type="text" name="rateMinutes" size="4" v-model="instance.rate.minutes"/>
|
<input type="text" name="rateMinutes" size="4" v-model="instance.rate.minutes" maxlength="4"/>
|
||||||
<span class="ui label">分钟</span>
|
<span class="ui label">分钟</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -40,6 +40,13 @@
|
|||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>发送时间</td>
|
||||||
|
<td>
|
||||||
|
<span v-if="recipient.timeFrom.length > 0 && recipient.timeTo.length > 0">{{recipient.timeFrom}} - {{recipient.timeTo}}</span>
|
||||||
|
<span v-else class="disabled">-</span>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>备注</td>
|
<td>备注</td>
|
||||||
<td>
|
<td>
|
||||||
|
|||||||
@@ -34,6 +34,64 @@
|
|||||||
<p class="comment">选择当前接收人所属分组。</p>
|
<p class="comment">选择当前接收人所属分组。</p>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="2"><more-options-indicator></more-options-indicator></td>
|
||||||
|
</tr>
|
||||||
|
<tbody v-show="moreOptionsVisible">
|
||||||
|
<tr>
|
||||||
|
<td>发送时间</td>
|
||||||
|
<td>
|
||||||
|
<div class="ui fields inline">
|
||||||
|
<div class="ui field">
|
||||||
|
开始时间:
|
||||||
|
</div>
|
||||||
|
<div class="ui field">
|
||||||
|
<div class="ui input right labeled">
|
||||||
|
<input type="text" name="timeFromHour" size="2" maxlength="2" placeholder="" v-model="recipient.timeFromHour"/>
|
||||||
|
<span class="ui label">时</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="ui field">
|
||||||
|
<div class="ui input right labeled">
|
||||||
|
<input type="text" name="timeFromMinute" size="2" maxlength="2" placeholder="" v-model="recipient.timeFromMinute"/>
|
||||||
|
<span class="ui label">分</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="ui field">
|
||||||
|
<div class="ui input right labeled">
|
||||||
|
<input type="text" name="timeFromSecond" size="2" maxlength="2" placeholder="" v-model="recipient.timeFromSecond"/>
|
||||||
|
<span class="ui label">秒</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="ui divider"></div>
|
||||||
|
<div class="ui fields inline">
|
||||||
|
<div class="ui field">
|
||||||
|
结束时间:
|
||||||
|
</div>
|
||||||
|
<div class="ui field">
|
||||||
|
<div class="ui input right labeled">
|
||||||
|
<input type="text" name="timeToHour" size="2" maxlength="2" placeholder="" v-model="recipient.timeToHour"/>
|
||||||
|
<span class="ui label">时</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="ui field">
|
||||||
|
<div class="ui input right labeled">
|
||||||
|
<input type="text" name="timeToMinute" size="2" maxlength="2" placeholder="" v-model="recipient.timeToMinute"/>
|
||||||
|
<span class="ui label">分</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="ui field">
|
||||||
|
<div class="ui input right labeled">
|
||||||
|
<input type="text" name="timeToSecond" size="2" maxlength="2" placeholder="" v-model="recipient.timeToSecond"/>
|
||||||
|
<span class="ui label">秒</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<p class="comment">24小时制,即小时从0到23。如果填写了发送时间,系统只会在这个时间段内给当前接收人发送消息。
|
||||||
|
<a href="" v-if="recipient.timeFromHour.length > 0 || recipient.timeFromMinute.length > 0 || recipient.timeFromSecond.length > 0 || recipient.timeToHour.length > 0 || recipient.timeToMinute.length > 0 || recipient.timeToSecond.length > 0" @click.prevent="clearTime">[清除]</a> </p>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>备注</td>
|
<td>备注</td>
|
||||||
<td>
|
<td>
|
||||||
@@ -46,6 +104,7 @@
|
|||||||
<checkbox name="isOn" value="1" v-model="recipient.isOn"></checkbox>
|
<checkbox name="isOn" value="1" v-model="recipient.isOn"></checkbox>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
<submit-btn></submit-btn>
|
<submit-btn></submit-btn>
|
||||||
|
|||||||
@@ -17,4 +17,13 @@ Tea.context(function () {
|
|||||||
})
|
})
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this.clearTime = function () {
|
||||||
|
this.recipient.timeFromHour = ""
|
||||||
|
this.recipient.timeFromMinute = ""
|
||||||
|
this.recipient.timeFromSecond = ""
|
||||||
|
this.recipient.timeToHour = ""
|
||||||
|
this.recipient.timeToMinute = ""
|
||||||
|
this.recipient.timeToSecond = ""
|
||||||
|
}
|
||||||
})
|
})
|
||||||
Reference in New Issue
Block a user