mirror of
https://github.com/kuaifan/dootask.git
synced 2026-04-24 10:48:06 +00:00
no message
This commit is contained in:
parent
b3286c8f74
commit
c1b218c133
@ -99,7 +99,7 @@ class SystemController extends AbstractController
|
||||
*
|
||||
* @apiParam {String} type
|
||||
* - get: 获取(默认)
|
||||
* - save: 保存设置(参数:['smtp_server', 'port', 'account', 'password', 'reg_verify', 'notice', 'task_remind_hours', 'task_remind_hours2', 'notice_msg', 'msg_unread_user_minute', 'msg_unread_group_minute'])
|
||||
* - save: 保存设置(参数:['smtp_server', 'port', 'account', 'password', 'reg_verify', 'notice', 'task_start_minute', 'task_remind_hours', 'task_remind_hours2', 'notice_msg', 'msg_unread_user_minute', 'msg_unread_group_minute'])
|
||||
* @apiSuccess {Number} ret 返回状态码(1正确、0错误)
|
||||
* @apiSuccess {String} msg 返回信息(错误描述)
|
||||
* @apiSuccess {Object} data 返回数据
|
||||
@ -122,6 +122,7 @@ class SystemController extends AbstractController
|
||||
'password',
|
||||
'reg_verify',
|
||||
'notice',
|
||||
'task_start_minute',
|
||||
'task_remind_hours',
|
||||
'task_remind_hours2',
|
||||
'notice_msg',
|
||||
@ -142,11 +143,12 @@ class SystemController extends AbstractController
|
||||
$setting['password'] = $setting['password'] ?: '';
|
||||
$setting['reg_verify'] = $setting['reg_verify'] ?: 'close';
|
||||
$setting['notice'] = $setting['notice'] ?: 'close';
|
||||
$setting['task_remind_hours'] = floatval($setting['task_remind_hours']) ?: 0;
|
||||
$setting['task_remind_hours2'] = floatval($setting['task_remind_hours2']) ?: 0;
|
||||
$setting['task_start_minute'] = intval($setting['task_start_minute']);
|
||||
$setting['task_remind_hours'] = floatval($setting['task_remind_hours']);
|
||||
$setting['task_remind_hours2'] = floatval($setting['task_remind_hours2']);
|
||||
$setting['notice_msg'] = $setting['notice_msg'] ?: 'close';
|
||||
$setting['msg_unread_user_minute'] = floatval($setting['msg_unread_user_minute']) ?: 0;
|
||||
$setting['msg_unread_group_minute'] = floatval($setting['msg_unread_group_minute']) ?: 0;
|
||||
$setting['msg_unread_user_minute'] = intval($setting['msg_unread_user_minute']);
|
||||
$setting['msg_unread_group_minute'] = intval($setting['msg_unread_group_minute']);
|
||||
//
|
||||
return Base::retSuccess('success', $setting ?: json_decode('{}'));
|
||||
}
|
||||
|
||||
@ -14,7 +14,7 @@ use Illuminate\Database\Eloquent\SoftDeletes;
|
||||
* @property int|null $userid 用户id
|
||||
* @property int|null $task_id 任务id
|
||||
* @property string|null $email 电子邮箱
|
||||
* @property int|null $type 提醒类型:1第一次任务提醒,2第二次任务超期提醒
|
||||
* @property int|null $type 提醒类型:0 任务开始提醒,1 距离到期提醒,2到期超时提醒
|
||||
* @property int|null $is_send 邮件发送是否成功:0否,1是
|
||||
* @property string|null $send_error 邮件发送错误详情
|
||||
* @property \Illuminate\Support\Carbon|null $created_at
|
||||
|
||||
@ -26,9 +26,23 @@ class EmailNoticeTask extends AbstractTask
|
||||
$setting = Base::setting('emailSetting');
|
||||
// 任务通知
|
||||
if ($setting['notice'] === 'open') {
|
||||
$start = intval($setting['task_start_minute']);
|
||||
$hours = floatval($setting['task_remind_hours']);
|
||||
$hours2 = floatval($setting['task_remind_hours2']);
|
||||
if ($hours > 0) {
|
||||
if ($start > -1) {
|
||||
ProjectTask::whereNull("complete_at")
|
||||
->whereNull("archived_at")
|
||||
->whereBetween("start_at", [
|
||||
Carbon::now()->subMinutes($start * 60 + 10),
|
||||
Carbon::now()->subMinutes($start * 60)
|
||||
])->chunkById(100, function ($tasks) {
|
||||
/** @var ProjectTask $task */
|
||||
foreach ($tasks as $task) {
|
||||
$this->taskEmail($task, 0);
|
||||
}
|
||||
});
|
||||
}
|
||||
if ($hours > -1) {
|
||||
ProjectTask::whereNull("complete_at")
|
||||
->whereNull("archived_at")
|
||||
->whereBetween("end_at", [
|
||||
@ -37,11 +51,11 @@ class EmailNoticeTask extends AbstractTask
|
||||
])->chunkById(100, function ($tasks) {
|
||||
/** @var ProjectTask $task */
|
||||
foreach ($tasks as $task) {
|
||||
$this->overdueBeforeAfterEmail($task, true);
|
||||
$this->taskEmail($task, 1);
|
||||
}
|
||||
});
|
||||
}
|
||||
if ($hours2 > 0) {
|
||||
if ($hours2 > -1) {
|
||||
ProjectTask::whereNull("complete_at")
|
||||
->whereNull("archived_at")
|
||||
->whereBetween("end_at", [
|
||||
@ -50,16 +64,16 @@ class EmailNoticeTask extends AbstractTask
|
||||
])->chunkById(100, function ($tasks) {
|
||||
/** @var ProjectTask $task */
|
||||
foreach ($tasks as $task) {
|
||||
$this->overdueBeforeAfterEmail($task, false);
|
||||
$this->taskEmail($task, 2);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
// 消息通知
|
||||
if ($setting['notice_msg'] === 'open') {
|
||||
$userMinute = floatval($setting['msg_unread_user_minute']);
|
||||
$groupMinute = floatval($setting['msg_unread_group_minute']);
|
||||
if ($userMinute > 0) {
|
||||
$userMinute = intval($setting['msg_unread_user_minute']);
|
||||
$groupMinute = intval($setting['msg_unread_group_minute']);
|
||||
if ($userMinute > -1) {
|
||||
WebSocketDialogMsg::select(['web_socket_dialog_msgs.*', 'r.id as r_id', 'r.userid as r_userid'])
|
||||
->join('web_socket_dialog_msg_reads as r', 'web_socket_dialog_msgs.id', '=', 'r.msg_id')
|
||||
->where("web_socket_dialog_msgs.dialog_type", "user")
|
||||
@ -72,7 +86,7 @@ class EmailNoticeTask extends AbstractTask
|
||||
$this->unreadMsgEmail($rows, "user");
|
||||
});
|
||||
}
|
||||
if ($groupMinute > 0) {
|
||||
if ($groupMinute > -1) {
|
||||
WebSocketDialogMsg::select(['web_socket_dialog_msgs.*', 'r.id as r_id', 'r.userid as r_userid'])
|
||||
->join('web_socket_dialog_msg_reads as r', 'web_socket_dialog_msgs.id', '=', 'r.msg_id')
|
||||
->where("web_socket_dialog_msgs.dialog_type", "group")
|
||||
@ -91,10 +105,10 @@ class EmailNoticeTask extends AbstractTask
|
||||
/**
|
||||
* 任务过期前、超期后提醒
|
||||
* @param ProjectTask $task
|
||||
* @param $isBefore
|
||||
* @param int $type
|
||||
* @return void
|
||||
*/
|
||||
private function overdueBeforeAfterEmail(ProjectTask $task, $isBefore)
|
||||
private function taskEmail(ProjectTask $task, int $type)
|
||||
{
|
||||
$userids = $task->taskUser->where('owner', 1)->pluck('userid')->toArray();
|
||||
if (empty($userids)) {
|
||||
@ -110,7 +124,7 @@ class EmailNoticeTask extends AbstractTask
|
||||
/** @var User $user */
|
||||
foreach ($users as $user) {
|
||||
$data = [
|
||||
'type' => $isBefore ? 1 : 2,
|
||||
'type' => $type,
|
||||
'userid' => $user->userid,
|
||||
'task_id' => $task->id,
|
||||
];
|
||||
@ -122,13 +136,13 @@ class EmailNoticeTask extends AbstractTask
|
||||
if (!Base::isEmail($user->email)) {
|
||||
throw new \Exception("User email '{$user->email}' address error");
|
||||
}
|
||||
if ($isBefore) {
|
||||
$subject = env('APP_NAME') . " 任务提醒";
|
||||
} else {
|
||||
$subject = env('APP_NAME') . " 任务过期提醒";
|
||||
}
|
||||
$subject = match ($type) {
|
||||
1 => env('APP_NAME') . " 任务提醒",
|
||||
2 => env('APP_NAME') . " 任务过期提醒",
|
||||
default => env('APP_NAME') . " 任务开始提醒",
|
||||
};
|
||||
$content = view('email.task', [
|
||||
'type' => $isBefore ? 'before' : 'after',
|
||||
'type' => str_replace([0, 1, 2], ['start', 'before', 'after'], $type),
|
||||
'user' => $user,
|
||||
'task' => $task,
|
||||
'setting' => $setting,
|
||||
|
||||
@ -18,7 +18,7 @@ class CreateProjectTaskMailLogsTable extends Migration
|
||||
$table->bigInteger('userid')->nullable()->default(0)->comment('用户id');
|
||||
$table->integer('task_id')->nullable()->default(0)->comment('任务id');
|
||||
$table->string('email')->nullable()->default('')->comment('电子邮箱');
|
||||
$table->tinyInteger('type')->nullable()->default(0)->comment('提醒类型:1第一次任务提醒,2第二次任务超期提醒');
|
||||
$table->tinyInteger('type')->nullable()->default(0)->comment('提醒类型:0 任务开始提醒,1 距离到期提醒,2到期超时提醒');
|
||||
$table->tinyInteger('is_send')->nullable()->default(0)->comment('邮件发送是否成功:0否,1是');
|
||||
$table->timestamps();
|
||||
});
|
||||
|
||||
2
public/css/app.css
vendored
2
public/css/app.css
vendored
File diff suppressed because one or more lines are too long
2
public/js/app.js
vendored
2
public/js/app.js
vendored
File diff suppressed because one or more lines are too long
2
public/js/build/123.js
vendored
2
public/js/build/123.js
vendored
File diff suppressed because one or more lines are too long
2
public/js/build/334.js
vendored
2
public/js/build/334.js
vendored
File diff suppressed because one or more lines are too long
@ -8,7 +8,7 @@
|
||||
/*!
|
||||
* The buffer module from node.js, for the browser.
|
||||
*
|
||||
* @author Feross Aboukhadijeh <https://feross.org>
|
||||
* @author Feross Aboukhadijeh <http://feross.org>
|
||||
* @license MIT
|
||||
*/
|
||||
|
||||
|
||||
2
public/js/build/421.js
vendored
2
public/js/build/421.js
vendored
File diff suppressed because one or more lines are too long
@ -8,7 +8,7 @@
|
||||
/*!
|
||||
* The buffer module from node.js, for the browser.
|
||||
*
|
||||
* @author Feross Aboukhadijeh <https://feross.org>
|
||||
* @author Feross Aboukhadijeh <http://feross.org>
|
||||
* @license MIT
|
||||
*/
|
||||
|
||||
|
||||
2
public/js/build/494.js
vendored
2
public/js/build/494.js
vendored
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
2
public/js/build/626.js
vendored
2
public/js/build/626.js
vendored
File diff suppressed because one or more lines are too long
@ -8,7 +8,7 @@
|
||||
/*!
|
||||
* The buffer module from node.js, for the browser.
|
||||
*
|
||||
* @author Feross Aboukhadijeh <https://feross.org>
|
||||
* @author Feross Aboukhadijeh <http://feross.org>
|
||||
* @license MIT
|
||||
*/
|
||||
|
||||
|
||||
2
public/js/build/824.js
vendored
2
public/js/build/824.js
vendored
File diff suppressed because one or more lines are too long
2
public/js/build/889.js
vendored
2
public/js/build/889.js
vendored
File diff suppressed because one or more lines are too long
@ -8,7 +8,7 @@
|
||||
/*!
|
||||
* The buffer module from node.js, for the browser.
|
||||
*
|
||||
* @author Feross Aboukhadijeh <https://feross.org>
|
||||
* @author Feross Aboukhadijeh <http://feross.org>
|
||||
* @license MIT
|
||||
*/
|
||||
|
||||
|
||||
@ -1 +1 @@
|
||||
6a920b027ebf78a4
|
||||
19f9a906c4027927
|
||||
|
||||
@ -37,15 +37,25 @@
|
||||
<Radio label="close">{{ $L('关闭') }}</Radio>
|
||||
</RadioGroup>
|
||||
<Form v-if="formData.notice == 'open'" @submit.native.prevent>
|
||||
<FormItem :label="$L('任务开始')" prop="task_start_minute">
|
||||
<div class="input-number-box">
|
||||
<InputNumber v-model="formData.task_start_minute" :min="0" :step="1"/>
|
||||
<label>{{ $L('分钟') }}</label>
|
||||
</div>
|
||||
</FormItem>
|
||||
<FormItem :label="$L('距离到期')" prop="task_remind_hours">
|
||||
<InputNumber v-model="formData.task_remind_hours" :min="0" :step="0.5" @on-change="hoursChange($event, 'task_remind_hours')"/>
|
||||
<label>{{ $L('小时') }}</label>
|
||||
<div class="input-number-box">
|
||||
<InputNumber v-model="formData.task_remind_hours" :min="0" :step="0.5" @on-change="hoursChange($event, 'task_remind_hours')"/>
|
||||
<label>{{ $L('小时') }}</label>
|
||||
</div>
|
||||
</FormItem>
|
||||
<FormItem :label="$L('超时')" prop="task_remind_hours2">
|
||||
<InputNumber v-model="formData.task_remind_hours2" :min="0" :step="0.5" @on-change="hoursChange($event, 'task_remind_hours2')"/>
|
||||
<label>{{ $L('小时') }}</label>
|
||||
<FormItem :label="$L('到期超时')" prop="task_remind_hours2">
|
||||
<div class="input-number-box">
|
||||
<InputNumber v-model="formData.task_remind_hours2" :min="0" :step="0.5" @on-change="hoursChange($event, 'task_remind_hours2')"/>
|
||||
<label>{{ $L('小时') }}</label>
|
||||
</div>
|
||||
</FormItem>
|
||||
<div class="form-tip">{{$L('填写0则不通知,误差±10分钟')}}</div>
|
||||
<div class="form-tip">{{$L('填写-1则不通知,误差±10分钟')}}</div>
|
||||
</Form>
|
||||
</FormItem>
|
||||
<FormItem :label="$L('消息提醒')" prop="notice_msg">
|
||||
@ -55,14 +65,18 @@
|
||||
</RadioGroup>
|
||||
<Form v-if="formData.notice_msg == 'open'" @submit.native.prevent>
|
||||
<FormItem :label="$L('未读个人消息')" prop="msg_unread_user_minute">
|
||||
<InputNumber v-model="formData.msg_unread_user_minute" :min="0" :step="1"/>
|
||||
<label>{{ $L('分钟') }}</label>
|
||||
<div class="input-number-box">
|
||||
<InputNumber v-model="formData.msg_unread_user_minute" :min="0" :step="1"/>
|
||||
<label>{{ $L('分钟') }}</label>
|
||||
</div>
|
||||
</FormItem>
|
||||
<FormItem :label="$L('未读群聊消息')" prop="msg_unread_group_minute">
|
||||
<InputNumber v-model="formData.msg_unread_group_minute" :min="0" :step="1"/>
|
||||
<label>{{ $L('分钟') }}</label>
|
||||
<div class="input-number-box">
|
||||
<InputNumber v-model="formData.msg_unread_group_minute" :min="0" :step="1"/>
|
||||
<label>{{ $L('分钟') }}</label>
|
||||
</div>
|
||||
</FormItem>
|
||||
<div class="form-tip">{{$L('填写0则不通知,误差±10分钟')}}</div>
|
||||
<div class="form-tip">{{$L('填写-1则不通知,误差±10分钟')}}</div>
|
||||
</Form>
|
||||
</FormItem>
|
||||
</div>
|
||||
@ -87,11 +101,12 @@ export default {
|
||||
password: '',
|
||||
reg_verify: 'colse',
|
||||
notice: 'open',
|
||||
task_remind_hours: 0,
|
||||
task_remind_hours2: 0,
|
||||
task_start_minute: -1,
|
||||
task_remind_hours: -1,
|
||||
task_remind_hours2: -1,
|
||||
notice_msg: 'open',
|
||||
msg_unread_user_minute: 0,
|
||||
msg_unread_group_minute: 0,
|
||||
msg_unread_user_minute: -1,
|
||||
msg_unread_group_minute: -1,
|
||||
},
|
||||
ruleData: {},
|
||||
}
|
||||
|
||||
29
resources/assets/sass/pages/common.scss
vendored
29
resources/assets/sass/pages/common.scss
vendored
@ -7,6 +7,35 @@ body {
|
||||
padding: 5px 0;
|
||||
}
|
||||
|
||||
.input-number-box {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
border: 1px solid #dcdee2;
|
||||
border-radius: 4px;
|
||||
.ivu-input-number {
|
||||
width: 72px;
|
||||
margin: 0;
|
||||
border: 0;
|
||||
}
|
||||
> label {
|
||||
color: #515a6e;
|
||||
text-align: center;
|
||||
background-color: #f8f8f9;
|
||||
padding: 0 7px;
|
||||
font-weight: 400;
|
||||
&:first-child {
|
||||
border-left: 1px solid transparent;
|
||||
border-right: 1px solid #dcdee2;
|
||||
border-radius: 4px 0 0 4px;
|
||||
}
|
||||
&:last-child {
|
||||
border-left: 1px solid #dcdee2;
|
||||
border-right: 1px solid transparent;
|
||||
border-radius: 0 4px 4px 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.ivu-input,
|
||||
.ivu-select-selection {
|
||||
border-color: #e8e8e8;
|
||||
|
||||
@ -241,9 +241,6 @@
|
||||
.ivu-form-item-content {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
.ivu-input-number {
|
||||
margin: 0 8px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,5 +1,8 @@
|
||||
<p>{{ $user->nickname }} 您好:</p>
|
||||
@if ($type === 'before')
|
||||
<p>{{ $user->nickname }} 您好:</p><p>您有一个任务【{{ $task->name }}】还有{{ $setting['task_remind_hours'] }}小时即将超时,请及时处理。</p>
|
||||
<p>您有一个任务【{{ $task->name }}】还有{{ $setting['task_remind_hours'] }}小时即将超时,请及时处理。</p>
|
||||
@elseif ($type === 'after')
|
||||
<p>您的任务【{{ $task->name }}】已经超时{{ $setting['task_remind_hours2'] }}小时,请及时处理。</p>
|
||||
@else
|
||||
<p>{{ $user->nickname }} 您好:</p><p>您的任务【{{ $task->name }}】已经超时{{ $setting['task_remind_hours2'] }}小时,请及时处理。</p>
|
||||
<p>您有一个新任务【{{ $task->name }}】已开始,请及时处理。</p>
|
||||
@endif
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user