// // import Vue from "vue"; import { convertEnToPe } from "~/manuals/persianNumber"; // import { mapState } from "pinia"; // import Cookies from "js-cookie"; import { useCommonStore } from "~/stores/commonStore"; import { useAuthStore } from "~/stores/authStore"; // // ...mapState("common", ["activeSystemGetter"]), export const appDescription = () => { return import.meta.env.VITVITE_DESCRIPTION_BUILD_NAME ?? "monir"; }; export const buildName = () => { return import.meta.env.VITE_BUILD_NAME ?? "monir"; }; export const logoPhoto = () => { if (buildName() == "majles") return import("assets/majles/img/logo_200x200_green.png"); return import("assets/common/img/logo/logo.png"); }; export const appLongTitle = () => { return import.meta.env.VITE_TITLE ?? "زیست بوم تحریر"; }; export const appShortTitle = () => { return import.meta.env.VITE_SHORT_TITLE ?? "زیست بوم تحریر"; }; export const buildState = () => { return import.meta.env.VITE_BUILD_STATE ?? 0; }; export const isMajlesBuild = () => { return buildName() == "majles" && buildState() == 1; }; export const isAdmin = () => { const authStore = useAuthStore(); return authStore.currentUser?.user_level > 1; }; export const AddButtonText = () => { return import.meta.env.VITE_NEW_TEXT; }; export const EditButtonText = () => { return import.meta.env.VITE_EDIT_TEXT; }; // export const pageFormTitle = () => { // return this.$route.meta.pageFormTitle; // }; // export const pageName = () => { // return this.$route.meta.breadcrumb; // }; // export const getHtmlTooltip = (section, key, id) => { // let res = {}; // let link = ""; // if (id) link = location.origin + "/" + key + "/" + id; // if (section == "search") { // if (key == "search_type") { // res = { // html: // "

" + // "برای یافتن بهترین پاسخ، روش جستجو را تعیین می‌کند" + // "

" + // ' بیشتر ... ', // }; // } // } // if (section == "entity") { // } // return res; // }; export const tahrirUrl = () => { return import.meta.env.VITE_TAHRIR_BASE_URL + "/"; }; export const messageUrl = () => { return import.meta.env.VITE_MESSAGE + "/"; }; export const loginUrl = () => { return import.meta.env.VITE_AUTH + "/"; }; export const keyValueUrl = () => { return import.meta.env.VITE_KEY_VALUE + "/"; }; export const permitUrl = () => { return import.meta.env.VITE_PERMIT + "/"; }; export const repoUrl = () => { return import.meta.env.VITE_REPO + "/"; }; export const listUrl = () => { return import.meta.env.VITE_LIST + "/"; }; export const taskUrl = () => { return import.meta.env.VITE_TASK + "/"; }; export const logUrl = () => { return import.meta.env.VITE_LOG + "/"; }; export const fileUrl = () => { return import.meta.env.VITE_FILE + "/"; }; export const baseUrl = () => { return import.meta.env.BASE_URL; }; // // ...mapActions(["SET_PWA_ISTALL_PROMPT_EVENT"]), export const setDocumentTitle = (data, key1 = "title") => { let title = ""; if (data) { let dataWithSource = data; if ("_source" in data) { dataWithSource = { ...dataWithSource, ...dataWithSource._source }; } title = appShortTitle(); if (key1 in dataWithSource) title = dataWithSource[key1]; // else if (key2 in dataWithSource) title = dataWithSource[key2]; // else title = dataWithSource[key3]; // this.$nextTick(() => { document.title = title; //appShortTitle() + "-" + // }); } else document.title = appShortTitle(); }; // export const canUpdateInShowPage = (elemnt_key = undefined) => { // const authStore = useAuthStore(); // const CommonStore = useCommonStore(); // if (authStore.currentUser.user_level > 1) return true; // if (elemnt_key) { // // کلید واحد کامل با توجه به صفحه // const res = CommonStore.userPermisionGetter?.includes(elemnt_key + "_update"); // return res; // } // const routeName = this.$route.name; // const routekey = this.$route.params.key; // if (routeName == "answersShow") { // const res = CommonStore.userPermisionGetter?.includes( // "answers-properties_update" // ); // return res; // } // if (routeName == "issuesShow") { // const res = CommonStore.userPermisionGetter?.includes( // "issues-properties_update" // ); // return res; // } // if (routeName == "critionsShow") { // const res = CommonStore.userPermisionGetter?.includes( // "critions-properties_update" // ); // return res; // } // if (routekey == "mqsection" || routekey == "qsection") { // const res = CommonStore.userPermisionGetter?.includes(routekey + "_update"); // return res; // } else { // return CommonStore.userPermisionGetter?.includes(routeName + "_update"); // } // }; export const copyToClipboard = async ( id = undefined, domainUrl = undefined ) => { try { const _id = id ? "/" + id : ""; let url = location.href; if (domainUrl) { url = location.origin + domainUrl; } await navigator.clipboard.writeText(url + _id); mySwalToast({ html: "نشانی پیوند کپی شد.", }); } catch (err) { console.log(err.message); mySwalToast({ html: "خطایی رخ داد.لطفا دوباره امتحان کنید.", }); } }; export const copyTextToClipboard = async (text) => { try { await navigator.clipboard.writeText(text); mySwalToast({ html: "متن کپی شد.", }); } catch (err) { console.log(err.message); mySwalToast({ html: "خطایی رخ داد.لطفا دوباره امتحان کنید.", }); } }; // // for firefox browser that does nt support pwa installation. export const alertPwaNotSupported = () => { if (isMajlesBuild()) return; const vm = this; mySwalConfirm({ title: "توجه!", html: `مرورگر شما امکان نصب سامانه در صفحه گوشی یا رایانه شما را نمی دهد. درصورت تمایل به نصب سامانه، از مرورگر گوگل کروم Google Chrome یا مایکروسافت اج Microsoft Edge استفاده نمایید. `, showCancelButton: true, confirmButtonText: "باشه", cancelButtonText: "فعلا نمی خوام", }); // .then((result) => { // if (result.isConfirmed) { // vm.dismissPwaInstallationBox(365); // } // }); }; export const identifyBrowser = () => { var ua = navigator.userAgent; var tem; var M = ua.match(/(opera|chrome|safari|firefox|msie|trident(?=\/))\/?\s*(\d+)/i) || []; if (/trident/i.test(M[1])) { tem = /\brv[ :]+(\d+)/g.exec(ua) || []; return "IE " + (tem[1] || ""); } if (M[1] === "Chrome") { tem = ua.match(/\b(OPR|Edge)\/(\d+)/); if (tem != null) return tem.slice(1).join(" ").replace("OPR", "Opera"); } M = M[2] ? [M[1], M[2]] : [navigator.appName, navigator.appVersion, "-?"]; if ((tem = ua.match(/version\/(\d+)/i)) != null) M.splice(1, 1, tem[1]); return M.join(" "); }; export const dismissPwaInstallationBox = async (time) => { const CommonStore = useCommonStore(); // Cookies.set("add-to-home-screen", null, { expires: +time }); CommonStore.SET_PWA_INSTALL_PROMPT_EVENT(null); }; export const installPwa = async () => { const vm = this; const CommonStore = useCommonStore(); CommonStore.getPwaInstallPromptEvent.prompt(); // Wait for the user to respond to the prompt CommonStore.getPwaInstallPromptEvent.userChoice.then((choice) => { if (choice.outcome === "accepted") { console.log("User accepted"); } else { console.log("User dismissed"); } }); }; export const userFullname = (user) => { if (user?.first_name || user?.last_name) return user?.first_name + " " + user?.last_name; else return user?.username; }; export const userAvatar = (user = undefined) => { if (user) { try { if (user?.avatar && user?.avatar?.length) { return ( import.meta.env.VITE_BASE_URL + import.meta.env.VITE_API_NAME + fileUrl() + user.avatar ); } else { let initials = ""; if (user.first_name) initials += user?.first_name.charAt(0); if (user.last_name) initials += user?.last_name.charAt(0); if (initials == "") initials = user?.username?.charAt(0) + user?.username?.charAt(1); return generateAvatarFromChars(initials); } } catch (err) { return import("~/assets/common/img/user.svg"); } } return import("~/assets/common/img/user.svg"); }; export const generateAvatarFromChars = ( text, foregroundColor = "white", backgroundColor = "#00b6e3" ) => { const canvas = document.createElement("canvas"); const context = canvas.getContext("2d"); canvas.width = 100; canvas.height = 100; // Draw background context.fillStyle = backgroundColor; context.fillRect(0, 0, canvas.width, canvas.height); // Draw text context.font = "normal 2.5rem sahel-bold"; context.fillStyle = foregroundColor; context.textAlign = "center"; context.textBaseline = "middle"; context.direction = "rtl"; context.fillText(text.trim(), canvas.width / 2, canvas.height / 2); return canvas.toDataURL("image/png"); }; export const logout = (route = undefined) => { const authStore = useAuthStore(); // const route = useRoute(); const router = useRouter(); authStore.logout(); if (route) { router.push({ name: "login", params: route.params, query: { redirectBack: true, path: route.fullPath, }, }); } else { router.push({ name: "login", }); } }; export const redirectToRouteName = (routeName = "dashboard") => { const router = useRouter(); router.push({ name: routeName }).then(() => { // if (routeName === 'dashboard') // clearBodyClass(); }); }; export const getGroupAvatar = (user = undefined) => { try { if (user) { if (isValidHttpUrl(user.avatar)) return user.avatar; else { if ("title" in user) { const nameArray = user.title?.split(" "); if (nameArray?.length > 1) { const initials = nameArray[0].charAt(0) + nameArray[1].charAt(0); return generateAvatarFromChars(initials); } else { const initials = nameArray[0].charAt(0); return generateAvatarFromChars(initials); } } } } } catch (err) { return import("~/assets/common/img/default.svg").default; } }; export const convertUnixToPersianDateTime = (created_at) => { if (created_at) { const currentDate = new Date(); const currentYear = currentDate.getFullYear(); const currentMonth = currentDate.getMonth(); const currentDay = currentDate.getDate(); const currentHours = currentDate.getHours(); const currentMinutes = currentDate.getMinutes(); const currentSeconds = currentDate.getSeconds(); const updatedAtDate = new Date(created_at * 1000); const updatedAtYear = updatedAtDate.getFullYear(); const updatedAtMonth = updatedAtDate.getMonth(); const updatedAtDay = updatedAtDate.getDate(); const updatedAtHours = updatedAtDate.getHours(); const updatedAtMinutes = updatedAtDate.getMinutes(); const updatedAtSeconds = updatedAtDate.getSeconds(); let yr = updatedAtYear - currentYear !== 0 ? Math.abs(updatedAtYear - currentYear) : 0; if (yr) return convertEnToPe(yr) + " سال پیش"; let mon = updatedAtMonth - currentMonth !== 0 ? Math.abs(updatedAtMonth - currentMonth) : 0; if (mon) return convertEnToPe(mon) + " ماه پیش"; let dy = updatedAtDay - currentDay !== 0 ? Math.abs(updatedAtDay - currentDay) : 0; if (dy) { if (dy % 7 === 0) return convertEnToPe(dy) + " هفته پیش"; else return convertEnToPe(dy) + " روز پیش"; } let sec = updatedAtSeconds - currentSeconds !== 0 ? Math.abs(updatedAtSeconds - currentSeconds) : 0; let _seconds = ""; if (sec) _seconds = " چند لحظه پیش"; let min = updatedAtMinutes - currentMinutes !== 0 ? Math.abs(updatedAtMinutes - currentMinutes) : 0; let _minutes = ""; if (min) _minutes = convertEnToPe(min) + " دقیقه پیش"; let hr = updatedAtHours - currentHours !== 0 ? Math.abs(updatedAtHours - currentHours) : 0; if (hr) { // if (min) { // return convertEnToPe(hr) + " ساعت و " + _minutes // }; return convertEnToPe(hr) + " ساعت پیش "; } if (!min && sec) return _seconds; return _minutes; } else { return "تاریخ نامعتبر"; } }; // export const deletePaper = (url, { isowner, title, guid }) => { // let html = ` //
//
//
// //
//

${title}

//
// سند اشتراکی شما حذف و در بخش بازیافت به مدت ۶۰ روز بایگانی می‌شود. بعد ازاین مدت خود به خود حذف می‌شود و بازگرداندن آن غیر ممکن است //
// `; // if (isowner === 1) { // html = ` //
//
//
// //
//

${title}

//
// سند شما حذف و در بخش بازیافت به مدت ۶۰ روز بایگانی می‌شود. بعد ازاین مدت خود به خود حذف می‌شود و بازگرداندن آن غیر ممکن است //
// `; // } // return new Promise((resolve, reject) => { // this.mySwalConfirm({ // title: "از حذف این پرونده مطمئن هستید؟", // html, // }).then((result) => { // if (result.isConfirmed) { // ApiService.formData(url, { guid }) // .then((response) => { // resolve(response); // }) // .catch((err) => { // //todo: define what operation should to be done on error(401,403,500) // reject(err); // }); // } // }); // }); // }; // export const myEncodeQuery = (text) => { // // console.log(text); // if (!text || text == "") return ""; // //text = JSON.stringify(text); // let ch1 = encodeURIComponent("#"); // let ch3 = encodeURIComponent("\\"); // let ch4 = encodeURIComponent("&"); // text = text.replaceAll("#", ch1); // text = text.replaceAll("&", ch4); // text = text.replaceAll("/", "\\"); // text = text.replaceAll("\\", ch3); // // text = text.replaceAll(".", '%2E'); // return text; // }; export const myEncodeQuery = (text) => { //text = JSON.stringify(text); if (!text || text == "") return ""; let ch1 = encodeURIComponent("#"); let ch3 = encodeURIComponent("\\"); let ch4 = encodeURIComponent("&"); text = text.replaceAll(ch1, "#"); text = text.replaceAll(ch4, "&"); text = text.replaceAll(ch3, "\\"); return text; }; // // Vue.mixin(globalMixin); export const formDataParamMaker = (data) => { const formData = new FormData(); for (const [key, value] of Object.entries(data)) { if ( key != null && key != undefined && value !== undefined && value !== null ) formData.append(key, value); } return formData; };