2025-02-01 09:34:55 +00:00
// // 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" ;
2025-03-11 10:16:19 +00:00
import { isValidHttpUrl } from "~/manuals/utilities" ;
2025-02-01 09:34:55 +00:00
// // ...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:
// "<p>" +
// "برای یافتن بهترین پاسخ، روش جستجو را تعیین میکند" +
// "</p>" +
// '<a href="' +
// link +
// '"> بیشتر ... </a>',
// };
// }
// }
// 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 : ` مرورگر شما امکان نصب سامانه در صفحه گوشی یا رایانه شما را نمی دهد.
د ر ص و ر ت ت م ا ی ل ب ه ن ص ب س ا م ا ن ه ،
ا ز م ر و ر گ ر گ و گ ل ک ر و م
< img src = "${require(" assets / common / img / chrome.svg " ) } " width = "20" height = "20" alt = "Google Chrome" >
ی ا م ا ی ک ر و س ا ف ت ا ج
< img src = "${require(" assets / common / img / edge.svg " ) } " width = "20" height = "20" alt = "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();
} ) ;
} ;
2025-03-11 10:16:19 +00:00
export const getGroupAvatar = async ( user = undefined ) = > {
2025-02-01 09:34:55 +00:00
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 ) {
2025-03-11 10:16:19 +00:00
return ( await import ( "~/assets/common/img/default.svg" ) ) . default ;
2025-02-01 09:34:55 +00:00
}
} ;
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 = `
// <div class="custom-sw-content">
// <div class="custom-sw-header-container">
// <div class="icon">
// <i class="tavasi tavasi-Component-360--58"><span class="path1"></span><span class="path2"></span></i>
// </div>
// <p class="custom-content-title">${title}</p>
// </div>
// <span class="text__gray text__small">سند <strong>اشتراکی</strong> شما حذف و در بخش بازیافت به مدت ۶۰ روز بایگانی میشود. بعد ازاین مدت خود به خود حذف میشود و بازگرداندن آن غیر ممکن است</span>
// </div>
// `;
// if (isowner === 1) {
// html = `
// <div class="custom-sw-content">
// <div class="custom-sw-header-container">
// <div class="icon">
// <i class="tavasi tavasi-Component-360--58"><span class="path1"></span><span class="path2"></span></i>
// </div>
// <p class="custom-content-title">${title}</p>
// </div>
// <span class="text__gray text__small">سند شما حذف و در بخش بازیافت به مدت ۶۰ روز بایگانی میشود. بعد ازاین مدت خود به خود حذف میشود و بازگرداندن آن غیر ممکن است</span>
// </div>
// `;
// }
// 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 ;
} ;