From b22a0b59c4a3c44938b08f1f71b8ba8be720d525 Mon Sep 17 00:00:00 2001 From: setthawutttty Date: Mon, 7 Jul 2025 17:43:44 +0700 Subject: [PATCH] =?UTF-8?q?web=20socket=20=E0=B9=81=E0=B8=88=E0=B9=89?= =?UTF-8?q?=E0=B8=87=E0=B8=AB=E0=B8=A5=E0=B8=B1=E0=B8=87=20clone=20?= =?UTF-8?q?=E0=B9=80=E0=B8=AA=E0=B8=A3=E0=B9=87=E0=B8=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/modules/02_organization/views/main.vue | 4 +- src/stores/socket.ts | 69 +++++++++++++++++++++- 2 files changed, 70 insertions(+), 3 deletions(-) diff --git a/src/modules/02_organization/views/main.vue b/src/modules/02_organization/views/main.vue index 20eee64d8..90dd087e9 100644 --- a/src/modules/02_organization/views/main.vue +++ b/src/modules/02_organization/views/main.vue @@ -178,7 +178,9 @@ watch( * ดึงข้อมูลโครงสร้างและรายการประวัติโครงสร้าง */ onMounted(async () => { - store.typeOrganizational = "current"; + const type = localStorage.getItem('org_type') ?? "current"; + store.typeOrganizational = type; + localStorage.removeItem('org_type'); await Promise.all([fetchOrganizationActive(), fetchHistory()]); }); diff --git a/src/stores/socket.ts b/src/stores/socket.ts index bf77d30f1..74688fb57 100644 --- a/src/stores/socket.ts +++ b/src/stores/socket.ts @@ -1,11 +1,10 @@ import { defineStore } from "pinia"; import { Notify } from "quasar"; - import { io, Socket } from "socket.io-client"; import config from "@/app.config"; import { getToken } from "@/plugins/auth"; - +import { useOrganizational } from "@/modules/02_organization/store/organizational"; interface sockeBackup { message: string; success?: boolean; @@ -13,6 +12,7 @@ interface sockeBackup { export const useSocketStore = defineStore("socket", () => { let socket: Socket; + const storeOrg = useOrganizational(); async function init() { socket = io(new URL(config.API.socket).origin, { @@ -23,6 +23,24 @@ export const useSocketStore = defineStore("socket", () => { let body: sockeBackup = JSON.parse(payload); notifyStatus(body.message, body.success); }); + + socket.on("send-create-draft-org", (payload) => { + let body: sockeBackup = JSON.parse(payload); + if (body.message == "ระบบกำลังทำการสร้างแบบร่างโครงสร้างหน่วยงาน") { + notifyStatus(body.message, body.success); + } else { + notifyStatusOrg("draft", body.message, body.success); + } + }); + + socket.on("send-publish-org", (payload) => { + let body: sockeBackup = JSON.parse(payload); + if (body.message == "ระบบกำลังทำการเผยแพร่โครงสร้างหน่วยงาน") { + notifyStatus(body.message, body.success); + } else { + notifyStatusOrg("current", body.message, body.success); + } + }); } function notifyStatus(message: string, success?: boolean) { @@ -42,6 +60,53 @@ export const useSocketStore = defineStore("socket", () => { }); } + function fnStyleNotiOrg() { + if (document.getElementById("notify-link-style")) return; + const style = document.createElement("style"); + style.id = "notify-link-style"; + style.textContent = ` + .notify-link { + padding: 4px 8px; + border-radius: 4px; + text-decoration: none; + color: #fff; + border: 1px solid #fff; + transition: all 0.3s; + cursor: pointer; + margin:0 0 0 5px; + } + .notify-link:hover { + background-color: #ffffff; + color: #21BA45; + } + `; + document.head.appendChild(style); + } + (window as any).resetOrgPage = (type: string) => { + localStorage.setItem("org_type", type); + window.location.reload(); + }; + function notifyStatusOrg(type: string, message: string, success?: boolean) { + fnStyleNotiOrg(); + Notify.create({ + message: `${message} ${ + type == "draft" ? "ไปยังแบบร่าง" : "ไปยังปัจจุบัน" + }`, + html: true, + group: false, + type: success === undefined || success ? "positive" : "negative", + position: "top", + timeout: 0, + actions: [ + { + icon: "close", + color: "white", + round: true, + }, + ], + }); + } + init(); return {};