From 790c58f2b6c8a68c179f5710afb860386a28fe6d Mon Sep 17 00:00:00 2001 From: Hide_D Date: Mon, 20 Mar 2023 02:12:57 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=EB=A9=94=EC=8B=9C=EC=A7=80=20=EB=B9=A0?= =?UTF-8?q?=EB=A5=B8=20=EB=8B=B5=EC=9E=A5=20=EB=8C=80=EC=83=81=20=EC=A7=80?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hwe/ts/components/MessagePanel.vue | 132 ++++++++++++++------- hwe/ts/components/MessagePlate.vue | 182 +++++++++++++++++------------ 2 files changed, 200 insertions(+), 114 deletions(-) diff --git a/hwe/ts/components/MessagePanel.vue b/hwe/ts/components/MessagePanel.vue index b029e2c3..21e21f1b 100644 --- a/hwe/ts/components/MessagePanel.vue +++ b/hwe/ts/components/MessagePanel.vue @@ -35,7 +35,14 @@
-
전체 메시지
+
+
전체 메시지
+
+ 여기로 +
+
@@ -48,6 +55,7 @@ :generalName="generalName" :nationID="nationID" :permissionLevel="permissionLevel" + @setTarget="setTarget" >
@@ -59,7 +67,14 @@
-
국가 메시지
+
+
국가 메시지
+
+ 여기로 +
+
@@ -72,6 +87,7 @@ :generalName="generalName" :nationID="nationID" :permissionLevel="permissionLevel" + @setTarget="setTarget" >
@@ -87,9 +103,10 @@
개인 메시지
모두 읽음 @@ -107,7 +124,12 @@ :generalName="generalName" :nationID="nationID" :permissionLevel="permissionLevel" - @response="()=>{readLatestMsg('private')}" + @response=" + () => { + readLatestMsg('private'); + } + " + @setTarget="setTarget" >
@@ -123,9 +145,10 @@
외교 메시지
모두 읽음 @@ -143,7 +166,12 @@ :generalName="generalName" :nationID="nationID" :permissionLevel="permissionLevel" - @response="()=>{readLatestMsg('diplomacy')}" + @response=" + () => { + readLatestMsg('diplomacy'); + } + " + @setTarget="setTarget" >
@@ -170,7 +198,7 @@ import { onMounted, ref, toRef, watch, type Ref } from "vue"; import { delay } from "@/util/delay"; import { SammoAPI } from "@/SammoAPI"; import { isString } from "lodash-es"; -import type { MabilboxListResponse, MsgItem, MsgResponse, MsgType } from "@/defs/API/Message"; +import type { MabilboxListResponse, MsgItem, MsgResponse, MsgTarget, MsgType } from "@/defs/API/Message"; import MessagePlate from "@/components/MessagePlate.vue"; import { useToast, BFormSelect } from "bootstrap-vue-next"; import { unwrap } from "@/util/unwrap"; @@ -273,24 +301,20 @@ function _updateLatestMsg(msg: MsgItem) { toasts.remove(toastID); } const newToastID = toasts.show( - getNewMsgToast( - "새로운 개인 메시지", - "새로운 개인 메시지가 도착했습니다.", - (type, e)=>{ - if(type === 'goto'){ - readLatestMsg('private'); - scrollToSelector('.PrivateTalk > .stickyAnchor'); - return; - } - if(type === 'ignore'){ - readLatestMsg('private'); - return; - } + getNewMsgToast("새로운 개인 메시지", "새로운 개인 메시지가 도착했습니다.", (type, e) => { + if (type === "goto") { + readLatestMsg("private"); + scrollToSelector(".PrivateTalk > .stickyAnchor"); + return; } - ), + if (type === "ignore") { + readLatestMsg("private"); + return; + } + }), { delay: 1000 * 60 * 10, - variant: 'warning' + variant: "warning", } ).options.id; latestPrivateMsgToastInfo.value = [newToastID, latestMsgID, msg.id]; @@ -298,7 +322,7 @@ function _updateLatestMsg(msg: MsgItem) { } if (msgType == "diplomacy") { - if (permissionLevel.value < 4){ + if (permissionLevel.value < 4) { return; } const [toastID, latestMsgID] = latestDiplomacyMsgToastInfo.value; @@ -311,24 +335,20 @@ function _updateLatestMsg(msg: MsgItem) { toasts.remove(toastID); } const newToastID = toasts.show( - getNewMsgToast( - "새로운 외교 메시지", - "새로운 외교 메시지가 도착했습니다.", - (type, e)=>{ - if(type === 'goto'){ - readLatestMsg('diplomacy'); - scrollToSelector('.DiplomacyTalk > .stickyAnchor') - return; - } - if(type === 'ignore'){ - readLatestMsg('diplomacy'); - return; - } + getNewMsgToast("새로운 외교 메시지", "새로운 외교 메시지가 도착했습니다.", (type, e) => { + if (type === "goto") { + readLatestMsg("diplomacy"); + scrollToSelector(".DiplomacyTalk > .stickyAnchor"); + return; } - ), + if (type === "ignore") { + readLatestMsg("diplomacy"); + return; + } + }), { delay: 1000 * 60 * 10, - variant: 'warning' + variant: "warning", } ).options.id; latestDiplomacyMsgToastInfo.value = [newToastID, latestMsgID, msg.id]; @@ -522,10 +542,31 @@ type MailboxTarget = { disabled?: true; color?: string; }; +const mailboxMap = ref(new Map()); const mailboxList = ref([]); const newMessageText = ref(""); +function setTarget(type: MsgType, target: MsgTarget): void { + const item = mailboxMap.value.get( + (() => { + if (type == "diplomacy" || type == "national") { + if (target.nation_id == nationID.value) { + return target.id; + } + return target.nation_id + 9000; + } + return target.id; + })() + ); + if (!item) { + return; + } + targetMailbox.value = item.value; +} + function refreshMailboxList(obj: MabilboxListResponse) { + const newMailboxMap = new Map(); + let myNationColor = "#000000"; const diplomacyMailboxList: MailboxGroup = { label: "외교메시지", @@ -590,6 +631,7 @@ function refreshMailboxList(obj: MabilboxListResponse) { target.disabled = true; } nationBox.options.push(target); + newMailboxMap.set(destGeneralID, target); } nationMailboxList.push(nationBox); @@ -597,12 +639,14 @@ function refreshMailboxList(obj: MabilboxListResponse) { continue; } - diplomacyMailboxList.options.push({ + const target: MailboxTarget = { value: nation.mailbox, text: nation.name, nationID: nation.nationID, color: nation.color, - }); + }; + newMailboxMap.set(nation.mailbox, target); + diplomacyMailboxList.options.push(target); } const favoriteBox: MailboxGroup = { @@ -624,6 +668,7 @@ function refreshMailboxList(obj: MabilboxListResponse) { }; mailboxList.value = [favoriteBox, diplomacyMailboxList, ...nationMailboxList]; + mailboxMap.value = newMailboxMap; } function foldMessage($event: MouseEvent, type: MsgType) { @@ -722,6 +767,11 @@ onMounted(async () => { \ No newline at end of file +