feat: 新增任务发送功能

This commit is contained in:
kuaifan 2025-04-14 13:40:46 +08:00
parent bd157d305e
commit b560c0bafd
2 changed files with 84 additions and 1 deletions

View File

@ -19,6 +19,7 @@ use App\Module\TimeRange;
use App\Module\MsgTool; use App\Module\MsgTool;
use App\Module\Table\OnlineData; use App\Module\Table\OnlineData;
use App\Models\FileContent; use App\Models\FileContent;
use App\Models\ProjectTask;
use App\Models\AbstractModel; use App\Models\AbstractModel;
use App\Models\WebSocketDialog; use App\Models\WebSocketDialog;
use App\Models\WebSocketDialogMsg; use App\Models\WebSocketDialogMsg;
@ -1543,6 +1544,45 @@ class DialogController extends AbstractController
return WebSocketDialogMsg::sendMsgBatch($user, $userids, $dialogids, $fileMsg); return WebSocketDialogMsg::sendMsgBatch($user, $userids, $dialogids, $fileMsg);
} }
/**
* @api {get} api/dialog/msg/sendtaskid 29. 通过任务ID发送任务
*
* @apiDescription 需要token身份
* @apiVersion 1.0.0
* @apiGroup dialog
* @apiName msg__sendtaskid
*
* @apiParam {Number} task_id 消息ID
* @apiParam {Array} dialogids 转发给的对话ID
* @apiParam {Array} userids 转发给的成员ID
* @apiParam {String} leave_message 转发留言
*
* @apiSuccess {Number} ret 返回状态码1正确、0错误
* @apiSuccess {String} msg 返回信息(错误描述)
* @apiSuccess {Object} data 返回数据
*/
public function msg__sendtaskid()
{
$user = User::auth();
//
$task_id = intval(Request::input("task_id"));
$dialogids = Request::input('dialogids');
$userids = Request::input('userids');
$leave_message = Request::input('leave_message');
//
if (empty($dialogids) && empty($userids)) {
return Base::retError("请选择对话或成员");
}
//
$task = ProjectTask::userTask($task_id, null);
$taskMsg = "<p><span class=\"mention task\" data-id=\"{$task_id}\">#{$task->name}</span></p>";
if ($leave_message) {
$taskMsg .= "<p>{$leave_message}</p>";
}
//
return WebSocketDialogMsg::sendMsgBatch($user, $userids, $dialogids, $taskMsg);
}
/** /**
* @api {post} api/dialog/msg/sendanon 30. 发送匿名消息 * @api {post} api/dialog/msg/sendanon 30. 发送匿名消息
* *

View File

@ -43,7 +43,12 @@
<template v-if="task.parent_id === 0"> <template v-if="task.parent_id === 0">
<template v-if="operationShow"> <template v-if="operationShow">
<EDropdownItem :divided="turns.length > 0" command="archived"> <EDropdownItem command="send" :divided="turns.length > 0">
<div class="item">
<i class="taskfont movefont">&#xe606;</i>{{$L('发送')}}
</div>
</EDropdownItem>
<EDropdownItem command="archived">
<div class="item"> <div class="item">
<Icon type="ios-filing" />{{$L(task.archived_at ? '还原归档' : '归档')}} <Icon type="ios-filing" />{{$L(task.archived_at ? '还原归档' : '归档')}}
</div> </div>
@ -89,16 +94,28 @@
footer-hide> footer-hide>
<TaskMove ref="addTask" v-model="moveTaskShow" :task="task"/> <TaskMove ref="addTask" v-model="moveTaskShow" :task="task"/>
</Modal> </Modal>
<!-- 发送任务 -->
<Forwarder
ref="forwarder"
:title="$L('发送任务')"
:confirm-title="$L('确认发送')"
:confirm-placeholder="$L('附言')"
:multiple-max="50"
:before-submit="onSendTask"
sender-hidden/>
</div> </div>
</template> </template>
<script> <script>
import {mapGetters, mapState} from "vuex"; import {mapGetters, mapState} from "vuex";
import TaskMove from "./TaskMove"; import TaskMove from "./TaskMove";
import Forwarder from "./Forwarder/index.vue";
export default { export default {
name: "TaskOperation", name: "TaskOperation",
components: { components: {
Forwarder,
TaskMove, TaskMove,
}, },
data() { data() {
@ -285,6 +302,10 @@ export default {
}) })
break; break;
case 'send':
this.$refs.forwarder.onSelection()
break;
case 'archived': case 'archived':
case 'remove': case 'remove':
this.archivedOrRemoveTask(command); this.archivedOrRemoveTask(command);
@ -435,6 +456,28 @@ export default {
getStyleComputedProperty(element, property) { getStyleComputedProperty(element, property) {
const css = window.getComputedStyle(element, null); const css = window.getComputedStyle(element, null);
return css[property]; return css[property];
},
onSendTask({dialogids, userids, message}) {
return new Promise((resolve, reject) => {
this.$store.dispatch("call", {
url: 'dialog/msg/sendtaskid',
data: {
dialogids,
userids,
leave_message: message,
task_id: this.task.id
}
}).then(({data, msg}) => {
this.$store.dispatch("saveDialogMsg", data.msgs);
this.$store.dispatch("updateDialogLastMsg", data.msgs);
$A.messageSuccess(msg);
resolve();
}).catch(({msg}) => {
$A.modalError(msg);
reject();
});
})
} }
}, },
} }