Merge branch 'rezae/feat/refactor-imports' of https://git2.tavasi.ir/front/base_ui into rezae/feat/haditha
This commit is contained in:
commit
08843804bd
|
@ -67,7 +67,13 @@
|
|||
|
||||
<script>
|
||||
import { mapActions, mapState } from "pinia";
|
||||
import { useResearchStore } from "~/stores/researchStore";
|
||||
|
||||
import { useAuthStore } from "@stores/authStore";
|
||||
import { useCommonStore } from "@stores/commonStore";
|
||||
import { useEntityStore } from "@entity/entityStore";
|
||||
import { useSearchStore } from "@search/stores/searchStore";
|
||||
import { useResearchStore } from "@research/stores/researchStore";
|
||||
|
||||
|
||||
export default {
|
||||
mounted() {
|
||||
|
@ -102,13 +108,18 @@ export default {
|
|||
},
|
||||
|
||||
methods: {
|
||||
...mapActions("common", ["systemsSetter", "activeSystemSetter"]),
|
||||
...mapActions(useCommonStore, [
|
||||
"systemsSetter",
|
||||
"activeSystemSetter",
|
||||
"searchActiveTabSetter",
|
||||
]),
|
||||
|
||||
...mapActions("aiTools", [
|
||||
"aiToolsActiveActionSetter",
|
||||
"aiToolsSchemaSetter",
|
||||
"aiToolsActiveDomainSetter",
|
||||
]),
|
||||
...mapActions("entity", [
|
||||
...mapActions(useEntityStore, [
|
||||
"activeTabSetter",
|
||||
"entityViewSchemaSetter",
|
||||
"activeEntityViewSchemaSetter",
|
||||
|
@ -119,10 +130,9 @@ export default {
|
|||
"domainActiveSetter",
|
||||
"selectionFilterItemsSetter",
|
||||
]),
|
||||
...mapActions("search", [
|
||||
...mapActions(useSearchStore, [
|
||||
"domainActiveSetter", //3
|
||||
"activeTabSetter", //2
|
||||
"searchActiveTabSetter",
|
||||
"searchSchemaSetter",
|
||||
"helpSchemaSetter",
|
||||
"helpActiveSchemaSetter",
|
||||
|
@ -134,8 +144,8 @@ export default {
|
|||
]),
|
||||
|
||||
reloadPage() {
|
||||
let appVersion = useStorage("app-version", '0.0.0');
|
||||
appVersion.vlaue = this.envVersion;
|
||||
let appVersion = useStorage("app-version", "0.0.0");
|
||||
appVersion.vlaue = this.envVersion;
|
||||
|
||||
this.clearStorage();
|
||||
// this.clearCookies();
|
||||
|
|
|
@ -1,58 +1,18 @@
|
|||
// composables/useInfiniteScroll.ts
|
||||
import { ref, onMounted, onBeforeUnmount } from "vue";
|
||||
|
||||
export default function useInfiniteScroll(
|
||||
callback: () => Promise<void>,
|
||||
elementId?: string
|
||||
callback: () => void,
|
||||
elementId: string
|
||||
) {
|
||||
const route = useRoute();
|
||||
const isFetching = ref(false);
|
||||
const infiniteScroll = ref<HTMLElement | Window | null>(null);
|
||||
const infiniteScroll = ref<HTMLElement | null>(null);
|
||||
|
||||
// Throttle function to limit scroll event frequency
|
||||
const throttle = (func: (...args: any[]) => void, limit: number) => {
|
||||
let lastFunc: ReturnType<typeof setTimeout>;
|
||||
let lastRan: number;
|
||||
return function (this: any, ...args: any[]) {
|
||||
const context = this;
|
||||
if (!lastRan) {
|
||||
func.apply(context, args);
|
||||
lastRan = Date.now();
|
||||
} else {
|
||||
clearTimeout(lastFunc);
|
||||
lastFunc = setTimeout(() => {
|
||||
if (Date.now() - lastRan >= limit) {
|
||||
func.apply(context, args);
|
||||
lastRan = Date.now();
|
||||
}
|
||||
}, limit - (Date.now() - lastRan));
|
||||
}
|
||||
};
|
||||
};
|
||||
const handleScroll = () => {
|
||||
if (isFetching.value) return;
|
||||
const scrollPosition =
|
||||
infiniteScroll.value.scrollTop + infiniteScroll.value.clientHeight;
|
||||
const threshold = infiniteScroll.value.scrollHeight - 100;
|
||||
|
||||
const checkScrollPosition = () => {
|
||||
if (isFetching.value || !infiniteScroll.value) return;
|
||||
|
||||
let scrollPosition: number;
|
||||
let threshold: number;
|
||||
let clientHeight: number;
|
||||
let scrollHeight: number;
|
||||
|
||||
if (infiniteScroll.value === window) {
|
||||
scrollPosition = window.scrollY || window.pageYOffset;
|
||||
clientHeight = document.documentElement.clientHeight;
|
||||
scrollHeight = document.documentElement.scrollHeight;
|
||||
} else {
|
||||
const el = infiniteScroll.value as HTMLElement;
|
||||
scrollPosition = el.scrollTop;
|
||||
clientHeight = el.clientHeight;
|
||||
scrollHeight = el.scrollHeight;
|
||||
}
|
||||
|
||||
threshold = scrollHeight - 100;
|
||||
const currentPosition = scrollPosition + clientHeight;
|
||||
|
||||
if (currentPosition >= threshold) {
|
||||
if (scrollPosition >= threshold) {
|
||||
isFetching.value = true;
|
||||
callback().finally(() => {
|
||||
isFetching.value = false;
|
||||
|
@ -60,57 +20,28 @@ export default function useInfiniteScroll(
|
|||
}
|
||||
};
|
||||
|
||||
// Throttled version of scroll handler
|
||||
const throttledScrollHandler = throttle(checkScrollPosition, 200);
|
||||
|
||||
const handleTouchEnd = () => {
|
||||
setTimeout(throttledScrollHandler, 100);
|
||||
// Add a slight delay to ensure scroll position is updated
|
||||
setTimeout(handleScroll, 100);
|
||||
};
|
||||
|
||||
onMounted(() => {
|
||||
console.info(route.name)
|
||||
|
||||
if (route.name == "hadithaSearch" || route.name == "hadithaLibrary") {
|
||||
const targetElement = elementId
|
||||
? document.getElementById(elementId)
|
||||
: window;
|
||||
const targetElement = document.getElementById(elementId);
|
||||
infiniteScroll.value = targetElement;
|
||||
|
||||
if (!targetElement) {
|
||||
console.warn(
|
||||
`Element ${elementId || "window"} not found for infinite scroll`
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
infiniteScroll.value = targetElement;
|
||||
|
||||
if (targetElement === window) {
|
||||
window.addEventListener("scroll", throttledScrollHandler);
|
||||
window.addEventListener("touchend", handleTouchEnd);
|
||||
} else {
|
||||
targetElement.addEventListener("scroll", throttledScrollHandler);
|
||||
targetElement.addEventListener("touchend", handleTouchEnd);
|
||||
}
|
||||
if (targetElement) {
|
||||
targetElement.addEventListener("scroll", handleScroll);
|
||||
targetElement.addEventListener("touchend", handleTouchEnd);
|
||||
}
|
||||
});
|
||||
|
||||
onBeforeUnmount(() => {
|
||||
if (route.name == "hadithaSearch" || route.name == "hadithaLibrary") {
|
||||
if (!infiniteScroll.value) return;
|
||||
const targetElement = document.getElementById(elementId);
|
||||
infiniteScroll.value = targetElement;
|
||||
|
||||
if (infiniteScroll.value === window) {
|
||||
window.removeEventListener("scroll", throttledScrollHandler);
|
||||
window.removeEventListener("touchend", handleTouchEnd);
|
||||
} else {
|
||||
(infiniteScroll.value as HTMLElement).removeEventListener(
|
||||
"scroll",
|
||||
throttledScrollHandler
|
||||
);
|
||||
(infiniteScroll.value as HTMLElement).removeEventListener(
|
||||
"touchend",
|
||||
handleTouchEnd
|
||||
);
|
||||
}
|
||||
if (targetElement) {
|
||||
targetElement.removeEventListener("scroll", handleScroll);
|
||||
targetElement.removeEventListener("touchend", handleTouchEnd);
|
||||
}
|
||||
});
|
||||
|
||||
|
|
|
@ -3,6 +3,9 @@ import fs from "fs-extra";
|
|||
import path from "path";
|
||||
|
||||
import haditha from "./routes/haditha";
|
||||
// import search from "./routes/search";
|
||||
// import research from "./routes/research";
|
||||
// import task from "./routes/task";
|
||||
|
||||
const envs = import.meta.env;
|
||||
let sassEnvVariables = "";
|
||||
|
@ -24,7 +27,7 @@ export default defineNuxtConfig({
|
|||
__dirname,
|
||||
`systems/${buildName}_ui/assets/${buildName}/images`
|
||||
); // Source folder (e.g., assets/images)
|
||||
const targetDir = path.resolve(__dirname, `public/img/${buildName}`); // Target folder (e.g., public/images)
|
||||
const targetDir = path.resolve(__dirname, `public/img/${buildName}`); // Target folder (e.g., public/img)
|
||||
|
||||
// Ensure the target directory exists
|
||||
fs.ensureDirSync(targetDir);
|
||||
|
@ -39,6 +42,7 @@ export default defineNuxtConfig({
|
|||
"pages:extend"(pages) {
|
||||
// Add custom routes
|
||||
pages.push(...haditha);
|
||||
// pages.push(...search, ...research, ...haditha, ...chat, ...task);
|
||||
},
|
||||
},
|
||||
|
||||
|
@ -128,7 +132,7 @@ export default defineNuxtConfig({
|
|||
storesDirs: ["./stores/**"],
|
||||
},
|
||||
plugins: [
|
||||
{ src: "~/plugins/api.ts", mode: "client" },
|
||||
// { src: "~/plugins/api.ts", mode: "client" },
|
||||
// { src: "~/plugins/vuelidate.ts", mode: "client" },
|
||||
// { src: "~/plugins/bootstrap.client.ts", mode: "client" },
|
||||
// { src: "~/plugins/vueJalaliMoment.ts", mode: "client" },
|
||||
|
@ -163,10 +167,13 @@ export default defineNuxtConfig({
|
|||
"@utils": "~/utils",
|
||||
"@manuals": "~/manuals",
|
||||
"@pages": "~/pages",
|
||||
|
||||
// "@chat": "~/systems/chat_ui",
|
||||
// "@search": "~/systems/search_ui",
|
||||
// "@research": "~/systems/research_ui",
|
||||
"@haditha": "~/systems/haditha_ui",
|
||||
// "@chat": "~/systems/chat_ui",
|
||||
// "@task": "~/systems/task_ui",
|
||||
},
|
||||
vite: {
|
||||
assetsInclude: ["**/*.svg"],
|
||||
|
|
|
@ -131,7 +131,7 @@ export default {
|
|||
};
|
||||
},
|
||||
computed: {
|
||||
...mapState(useSearchStore, ["searchSchemaGetter"]),
|
||||
...mapState(useCommonStore, ["searchSchemaGetter"]),
|
||||
},
|
||||
methods: {
|
||||
...mapActions(["checkPermissions"]),
|
||||
|
|
|
@ -1,49 +0,0 @@
|
|||
export default defineNuxtPlugin((nuxtApp) => {
|
||||
const config = useRuntimeConfig();
|
||||
|
||||
const id_token = useCookie("id_token");
|
||||
const token = id_token.value ?? "GuestAccess";
|
||||
|
||||
const baseUrl =
|
||||
config.public.NUXT_PUBLIC_BASE_URL + config.public.NUXT_PUBLIC_API_NAME;
|
||||
|
||||
const api = $fetch.create({
|
||||
// baseURL: baseUrl,
|
||||
onRequest({ request, options, error }) {
|
||||
options.baseURL = baseUrl + options.baseURL;
|
||||
|
||||
// options.baseURL = options.baseURL;
|
||||
|
||||
if (token) {
|
||||
const headers = (options.headers ||= {});
|
||||
|
||||
if (Array.isArray(headers)) {
|
||||
headers.push(["Authorization", token]);
|
||||
} else if (headers instanceof Headers) {
|
||||
headers.set("Authorization", token);
|
||||
} else {
|
||||
headers.Authorization = token;
|
||||
}
|
||||
}
|
||||
},
|
||||
async onResponseError({ response }) {
|
||||
if (response.status === 401) {
|
||||
await nuxtApp.runWithContext(() => navigateTo("/login"));
|
||||
}
|
||||
},
|
||||
onRequestError({ request, options, error }) {
|
||||
// Handle the request errors
|
||||
},
|
||||
onResponse({ request, response, options }) {
|
||||
// Process the response data
|
||||
// localStorage.setItem('token', response._data.token)
|
||||
},
|
||||
});
|
||||
|
||||
// Expose to useNuxtApp().$api
|
||||
return {
|
||||
provide: {
|
||||
api,
|
||||
},
|
||||
};
|
||||
});
|
|
@ -1,5 +0,0 @@
|
|||
import bootstrap from "bootstrap/dist/js/bootstrap.bundle";
|
||||
|
||||
export default defineNuxtPlugin((nuxtApp) => {
|
||||
nuxtApp.provide("bs", bootstrap);
|
||||
});
|
|
@ -1,74 +0,0 @@
|
|||
import { useCommonStore } from "~/stores/commonStore";
|
||||
import { useAuthStore } from "~/stores/authStore";
|
||||
|
||||
// plugins/my-directive.ts
|
||||
export default defineNuxtPlugin((nuxtApp) => {
|
||||
nuxtApp.vueApp.directive("can", {
|
||||
// called before bound element's attributes
|
||||
// or event listeners are applied
|
||||
created(el, binding, vnode) {
|
||||
// see below for details on arguments
|
||||
|
||||
if (vnode.elm && !isSuperAdmin()) {
|
||||
if (binding.value != "" && !hasPermission(binding.value)) {
|
||||
if (binding.modifiers.checkbox || binding.modifiers.radio) {
|
||||
vnode.elm.classList.add("disabled");
|
||||
vnode.elm.disabled = true;
|
||||
} else {
|
||||
vnode.elm.remove();
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
// called right before the element is inserted into the DOM.
|
||||
beforeMount(el, binding, vnode) {},
|
||||
// called when the bound element's parent component
|
||||
// and all its children are mounted.
|
||||
mounted(el, binding, vnode) {},
|
||||
// called before the parent component is updated
|
||||
beforeUpdate(el, binding, vnode, prevVnode) {},
|
||||
// called after the parent component and
|
||||
// all of its children have updated
|
||||
updated(el, binding, vnode, prevVnode) {
|
||||
if (vnode.elm && !isSuperAdmin()) {
|
||||
if (binding.value != "" && !hasPermission(binding.value)) {
|
||||
if (binding.modifiers.checkbox || binding.modifiers.radio) {
|
||||
vnode.elm.classList.add("disabled");
|
||||
vnode.elm.disabled = true;
|
||||
} else {
|
||||
vnode.elm.remove();
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
// called before the parent component is unmounted
|
||||
beforeUnmount(el, binding, vnode) {},
|
||||
// called when the parent component is unmounted
|
||||
unmounted(el, binding, vnode) {},
|
||||
|
||||
getSSRProps(binding, vnode) {
|
||||
// You can provide SSR-specific props here
|
||||
return {};
|
||||
},
|
||||
});
|
||||
});
|
||||
|
||||
function hasPermission(permission) {
|
||||
const CommonStore = useCommonStore();
|
||||
|
||||
if (CommonStore.userPermisionGetter && CommonStore.userPermisionGetter.length)
|
||||
return CommonStore.userPermisionGetter.includes(permission);
|
||||
|
||||
// if (CommonStore.getters.userPermisionGetter.includes(binding.value)) {
|
||||
// vnode.elm.style.display = 'none!important';
|
||||
// vnode.elm.classList.add('disabled');
|
||||
// vnode.elm.disabled = true;
|
||||
// vnode.elm.title = 'عدم دسترسی';
|
||||
}
|
||||
|
||||
function isSuperAdmin() {
|
||||
const CommonStore = useAuthStore();
|
||||
|
||||
// user with id = 2 is super admin
|
||||
return CommonStore?.currentUser?.user_level > 1;
|
||||
}
|
|
@ -1,38 +0,0 @@
|
|||
// plugins/my-directive.ts
|
||||
export default defineNuxtPlugin((nuxtApp) => {
|
||||
nuxtApp.vueApp.directive("focus", {
|
||||
// called before bound element's attributes
|
||||
// or event listeners are applied
|
||||
created(el, binding, vnode) {
|
||||
// see below for details on arguments
|
||||
|
||||
el.focus();
|
||||
},
|
||||
// called right before the element is inserted into the DOM.
|
||||
beforeMount(el, binding, vnode) {},
|
||||
// called when the bound element's parent component
|
||||
// and all its children are mounted.
|
||||
mounted(el, binding, vnode) {},
|
||||
// called before the parent component is updated
|
||||
beforeUpdate(el, binding, vnode, prevVnode) {},
|
||||
// called after the parent component and
|
||||
// all of its children have updated
|
||||
updated(el, binding, vnode, prevVnode) {
|
||||
var value = binding.value;
|
||||
if (value) {
|
||||
// Vue.nextTick(function() {
|
||||
el.focus();
|
||||
// });
|
||||
}
|
||||
},
|
||||
// called before the parent component is unmounted
|
||||
beforeUnmount(el, binding, vnode) {},
|
||||
// called when the parent component is unmounted
|
||||
unmounted(el, binding, vnode) {},
|
||||
|
||||
getSSRProps(binding, vnode) {
|
||||
// You can provide SSR-specific props here
|
||||
return {};
|
||||
},
|
||||
});
|
||||
});
|
|
@ -1,5 +0,0 @@
|
|||
|
||||
export default defineNuxtPlugin(() => {
|
||||
// Your initialization code here
|
||||
console.log("My plugin is initialized");
|
||||
});
|
|
@ -1,384 +0,0 @@
|
|||
export default defineNuxtPlugin(() => {
|
||||
console.info("persina number plugin");
|
||||
});
|
||||
|
||||
// const oneDigit = [
|
||||
// "صفر",
|
||||
// "یک",
|
||||
// "دو",
|
||||
// "سه",
|
||||
// "چهار",
|
||||
// "پنج",
|
||||
// "شش",
|
||||
// "هفت",
|
||||
// "هشت",
|
||||
// "نه",
|
||||
// ];
|
||||
// const twoDigits = {
|
||||
// 10: "ده",
|
||||
// 11: "یازده",
|
||||
// 12: "دوازده",
|
||||
// 13: "سیزده",
|
||||
// 14: "چهارده",
|
||||
// 15: "پانزده",
|
||||
// 16: "شانزده",
|
||||
// 17: "هفده",
|
||||
// 18: "هجده",
|
||||
// 19: "نوزده",
|
||||
// 20: "بیست",
|
||||
// 30: "سی",
|
||||
// 40: "چهل",
|
||||
// 50: "پنجاه",
|
||||
// 60: "شصت",
|
||||
// 70: "هفتاد",
|
||||
// 80: "هشتاد",
|
||||
// 90: "نود",
|
||||
// };
|
||||
// const threeDigits = {
|
||||
// 100: "صد",
|
||||
// 200: "دویست",
|
||||
// 300: "سیصد",
|
||||
// 400: "چهارصد",
|
||||
// 500: "پانصد",
|
||||
// 600: "شش صد",
|
||||
// 700: "هفت صد",
|
||||
// 800: "هشت صد",
|
||||
// 900: "نه صد",
|
||||
// };
|
||||
|
||||
// const types = ["تلیارد", "میلیارد", "میلیون", "هزار", ""];
|
||||
// const decimalTypes = ["دهم", "صدم", "هزارم", "ده هزارم"];
|
||||
// let numbers = [];
|
||||
// let decimals = [];
|
||||
|
||||
// //Convert Number To Words
|
||||
// const convert = (number) => {
|
||||
// let negative = "";
|
||||
// let decNumber = "";
|
||||
// let decimal = "";
|
||||
// let percent = "";
|
||||
|
||||
// if (isPercent(number)) {
|
||||
// number = number.replace("%", "");
|
||||
// percent = " درصد";
|
||||
// }
|
||||
|
||||
// number = getString(number);
|
||||
// if (number == "") return "";
|
||||
// sliceNumber(number);
|
||||
// if (isNegative(number)) negative = "منفی ";
|
||||
// number = number.replace("-", "");
|
||||
|
||||
// if (isDecimal(number)) {
|
||||
// let index = number.indexOf(".");
|
||||
// let decNumberStr = "";
|
||||
|
||||
// decNumber = number.substr(index + 1, number.length);
|
||||
// number = number.substr(0, index);
|
||||
// decNumberStr = parseInt(decNumber).toString();
|
||||
|
||||
// if (decNumberStr.length === 1 && decNumberStr != "0") {
|
||||
// decimal += oneDigit[decNumberStr] + " ";
|
||||
// decimal += decimalTypes[decNumber.length - 1];
|
||||
// } else {
|
||||
// decimal = calculateDigits(decimals);
|
||||
// decimal += " " + decimalTypes[decNumber.length - 1];
|
||||
// }
|
||||
// }
|
||||
|
||||
// if (number.length === 1) {
|
||||
// if (!decimal) {
|
||||
// return negative + oneDigit[number] + percent;
|
||||
// }
|
||||
|
||||
// if (number == "0") {
|
||||
// return negative + decimal + percent;
|
||||
// }
|
||||
|
||||
// return negative + oneDigit[number] + " ممیز " + decimal + percent;
|
||||
// }
|
||||
|
||||
// if (!decimal) {
|
||||
// return negative + calculateDigits(numbers) + percent;
|
||||
// }
|
||||
|
||||
// return negative + calculateDigits(numbers) + " ممیز " + decimal + percent;
|
||||
// };
|
||||
|
||||
// //split number 3 by 3 with a separator (123456789.3025=>123,456,789.3,025) Do Not Give It Persian Numbers
|
||||
// const sliceNumber = (number, separator = ",") => {
|
||||
// let percent = "";
|
||||
// let neg = "";
|
||||
// let dNum = "";
|
||||
// let n = "";
|
||||
// let d = "";
|
||||
|
||||
// if (isPercent(number)) {
|
||||
// number = number.replace("%", "");
|
||||
// percent = "%";
|
||||
// }
|
||||
|
||||
// number = getString(number);
|
||||
|
||||
// if (number == "") return "";
|
||||
// if (isNegative(number)) neg = "-";
|
||||
|
||||
// number = number.replace("-", "");
|
||||
|
||||
// if (isDecimal(number)) {
|
||||
// let index = number.indexOf(".");
|
||||
// dNum = number.substr(index + 1, number.length);
|
||||
// number = number.substr(0, index);
|
||||
// }
|
||||
|
||||
// n = putSeparator(number, separator);
|
||||
// numbers = n.split(separator);
|
||||
|
||||
// if (!dNum) return neg + n + percent;
|
||||
|
||||
// d = putSeparator(dNum, separator);
|
||||
// decimals = d.split(separator);
|
||||
|
||||
// return neg + n + "." + d + percent;
|
||||
// };
|
||||
|
||||
// //Puts a separator between the chunks of the given numString.
|
||||
// const putSeparator = (numString, separator = ",") => {
|
||||
// if (typeof numString !== "string") return "";
|
||||
// if (numString.length < 4) return numString;
|
||||
|
||||
// let result = "";
|
||||
// for (let i = numString.length - 1, counter = 0; i >= 0; i--) {
|
||||
// if (counter == 3) {
|
||||
// result += separator;
|
||||
// counter = 0;
|
||||
// }
|
||||
// result += numString[i];
|
||||
// counter++;
|
||||
// }
|
||||
|
||||
// result = result.split("").reverse().join("");
|
||||
// return result;
|
||||
// };
|
||||
|
||||
// //Processing on Digits of A Number
|
||||
// const calculateDigits = (arrNum) => {
|
||||
// let result = "";
|
||||
// for (let i = 0; i < arrNum.length; i++) {
|
||||
// let parsedNum = parseInt(arrNum[i]);
|
||||
// let number = parsedNum;
|
||||
// let sadgan = Math.floor(number / 100) * 100;
|
||||
// number = number % 100;
|
||||
// let dahgan = Math.floor(number / 10) * 10;
|
||||
// let yekan = number % 10;
|
||||
// result += i !== 0 && parsedNum ? " و " : "";
|
||||
|
||||
// result +=
|
||||
// getPersian(sadgan, dahgan, yekan, i, arrNum) + " " + getType(i, arrNum);
|
||||
// }
|
||||
|
||||
// return result.trim();
|
||||
// };
|
||||
|
||||
// //Main Process That Turn a Number Into a String(122=>100+20+2)
|
||||
// const getPersian = (sadgan, dahgan, yekan, index, numbers) => {
|
||||
// let flag = false;
|
||||
// let result = "";
|
||||
// let dahganPlusYekan = dahgan + yekan;
|
||||
|
||||
// if (threeDigits[sadgan]) {
|
||||
// result +=
|
||||
// yekan > 0 || dahgan > 0
|
||||
// ? threeDigits[sadgan] + " و "
|
||||
// : threeDigits[sadgan];
|
||||
// }
|
||||
|
||||
// if (twoDigits[dahganPlusYekan]) {
|
||||
// result += twoDigits[dahganPlusYekan] + " ";
|
||||
// return result;
|
||||
// }
|
||||
|
||||
// if (twoDigits[dahgan]) {
|
||||
// result += twoDigits[dahgan] + " و ";
|
||||
// }
|
||||
|
||||
// if (
|
||||
// numbers.length === 2 &&
|
||||
// index === 0 &&
|
||||
// yekan === 1 &&
|
||||
// dahgan === 0 &&
|
||||
// sadgan === 0
|
||||
// ) {
|
||||
// return result;
|
||||
// }
|
||||
|
||||
// if (
|
||||
// numbers.length > 2 &&
|
||||
// index === numbers.length - 2 &&
|
||||
// yekan === 1 &&
|
||||
// dahgan === 0 &&
|
||||
// sadgan === 0
|
||||
// ) {
|
||||
// return result;
|
||||
// }
|
||||
|
||||
// if (yekan > 0) result += oneDigit[yekan] + " ";
|
||||
|
||||
// return result;
|
||||
// };
|
||||
|
||||
// //getting The Type Of Each Number (Billion, Million,...)
|
||||
// const getType = (i, numbers) => {
|
||||
// let parsedNum = parseInt(numbers[i]);
|
||||
// if (isNaN(parsedNum)) return "";
|
||||
// if (!parsedNum) return "";
|
||||
// let length = numbers.length - i;
|
||||
// let index = types.length - length;
|
||||
// return types[index];
|
||||
// };
|
||||
|
||||
// //Calculate if number:String is Negative Or Not
|
||||
// const isNegative = (number) => {
|
||||
// number = getString(number);
|
||||
// if (!number) return false;
|
||||
// if (number[0] != "-") return false;
|
||||
// number = number.replace("-", "");
|
||||
// return number != "0";
|
||||
// };
|
||||
|
||||
// //Calculate if number:String has '%' as Percent
|
||||
// const isPercent = (string) => {
|
||||
// if (typeof string !== "string") return false;
|
||||
// let index = string.indexOf("%");
|
||||
// let lIndex = string.lastIndexOf("%");
|
||||
// if (index != lIndex) return false;
|
||||
// return index > 0;
|
||||
// };
|
||||
|
||||
// //is number:String:Number is a Valid Number? if type is Number turn it to String And Return it
|
||||
// const getString = (number) => {
|
||||
// if (number === undefined) return "";
|
||||
// if (number === null) return "";
|
||||
// if (isNaN(number)) return "";
|
||||
// if (typeof number === "number") return number.toString();
|
||||
// return number.trim();
|
||||
// };
|
||||
|
||||
// //Calculate if number:String has Decimal Point Or Not
|
||||
// const isDecimal = (number) => {
|
||||
// number = getString(number);
|
||||
// if (number == "") return false;
|
||||
// let index = number.indexOf(".");
|
||||
// let lIndex = number.lastIndexOf(".");
|
||||
// if (index != lIndex) return false;
|
||||
// return index > 0;
|
||||
// };
|
||||
// //Convert English Numbers To Persian Numbers
|
||||
// const convertEnToPe = (number) => {
|
||||
// if (number == null || number == undefined) return "";
|
||||
// if (typeof number == "number") number = number.toString();
|
||||
// let res = "";
|
||||
// for (let i = 0; i < number.length; i++) {
|
||||
// switch (number[i]) {
|
||||
// case "\u0030":
|
||||
// res += "\u06F0";
|
||||
// break;
|
||||
// case "\u0031":
|
||||
// res += "\u06F1";
|
||||
// break;
|
||||
// case "\u0032":
|
||||
// res += "\u06F2";
|
||||
// break;
|
||||
// case "\u0033":
|
||||
// res += "\u06F3";
|
||||
// break;
|
||||
// case "\u0034":
|
||||
// res += "\u06F4";
|
||||
// break;
|
||||
// case "\u0035":
|
||||
// res += "\u06F5";
|
||||
// break;
|
||||
// case "\u0036":
|
||||
// res += "\u06F6";
|
||||
// break;
|
||||
// case "\u0037":
|
||||
// res += "\u06F7";
|
||||
// break;
|
||||
// case "\u0038":
|
||||
// res += "\u06F8";
|
||||
// break;
|
||||
// case "\u0039":
|
||||
// res += "\u06F9";
|
||||
// break;
|
||||
// default:
|
||||
// res += number[i];
|
||||
// }
|
||||
// }
|
||||
// return res;
|
||||
// };
|
||||
// //Convert Persian Numbers To English Numbers
|
||||
// const convertPeToEn = (number) => {
|
||||
// if (number == null || number == undefined) return "";
|
||||
// let res = "";
|
||||
// for (let i = 0; i < number.length; i++) {
|
||||
// switch (number[i]) {
|
||||
// case "\u06F0":
|
||||
// res += "\u0030";
|
||||
// break;
|
||||
// case "\u06F1":
|
||||
// res += "\u0031";
|
||||
// break;
|
||||
// case "\u06F2":
|
||||
// res += "\u0032";
|
||||
// break;
|
||||
// case "\u06F3":
|
||||
// res += "\u0033";
|
||||
// break;
|
||||
// case "\u06F4":
|
||||
// res += "\u0034";
|
||||
// break;
|
||||
// case "\u06F5":
|
||||
// res += "\u0035";
|
||||
// break;
|
||||
// case "\u06F6":
|
||||
// res += "\u0036";
|
||||
// break;
|
||||
// case "\u06F7":
|
||||
// res += "\u0037";
|
||||
// break;
|
||||
// case "\u06F8":
|
||||
// res += "\u0038";
|
||||
// break;
|
||||
// case "\u06F9":
|
||||
// res += "\u0039";
|
||||
// break;
|
||||
// default:
|
||||
// res += number[i];
|
||||
// }
|
||||
// }
|
||||
// return res;
|
||||
// };
|
||||
|
||||
// const e2p = (s) => s.replace(/\d/g, (d) => "۰۱۲۳۴۵۶۷۸۹"[d]);
|
||||
// const e2a = (s) => s.replace(/\d/g, (d) => "٠١٢٣٤٥٦٧٨٩"[d]);
|
||||
|
||||
// const p2e = (s) => s.replace(/[۰-۹]/g, (d) => "۰۱۲۳۴۵۶۷۸۹".indexOf(d));
|
||||
// const a2e = (s) => s.replace(/[٠-٩]/g, (d) => "٠١٢٣٤٥٦٧٨٩".indexOf(d));
|
||||
|
||||
// const p2a = (s) =>
|
||||
// s.replace(/[۰-۹]/g, (d) => "٠١٢٣٤٥٦٧٨٩"["۰۱۲۳۴۵۶۷۸۹".indexOf(d)]);
|
||||
// const a2p = (s) =>
|
||||
// s.replace(/[٠-٩]/g, (d) => "۰۱۲۳۴۵۶۷۸۹"["٠١٢٣٤٥٦٧٨٩".indexOf(d)]);
|
||||
|
||||
// export {
|
||||
// convert,
|
||||
// sliceNumber,
|
||||
// convertEnToPe,
|
||||
// convertPeToEn,
|
||||
// e2p,
|
||||
// e2a,
|
||||
// p2e,
|
||||
// a2e,
|
||||
// p2a,
|
||||
// a2p,
|
||||
// };
|
|
@ -1,5 +0,0 @@
|
|||
import Swal from 'sweetalert2'
|
||||
|
||||
export default defineNuxtPlugin((nuxtApp) => {
|
||||
nuxtApp.provide('swal', Swal)
|
||||
})
|
|
@ -1,5 +0,0 @@
|
|||
import VueJstree from "vue-jstree";
|
||||
|
||||
export default defineNuxtPlugin((nuxtApp) => {
|
||||
nuxtApp.vueApp.use(VueJstree);
|
||||
});
|
|
@ -1,33 +0,0 @@
|
|||
import { defineNuxtPlugin } from '#app';
|
||||
import Swal from 'sweetalert2';
|
||||
import 'sweetalert2/dist/sweetalert2.min.css';
|
||||
|
||||
export default defineNuxtPlugin(nuxtApp => {
|
||||
const mySwalToast = (options:any) => {
|
||||
return Swal.fire({
|
||||
toast: true,
|
||||
position: 'bottom-end',
|
||||
showConfirmButton: false,
|
||||
timerProgressBar: true,
|
||||
timer: 5000,
|
||||
icon: 'success',
|
||||
...options,
|
||||
});
|
||||
};
|
||||
|
||||
const mySwalConfirm = (options:any) => {
|
||||
return Swal.fire({
|
||||
title: 'هشدار',
|
||||
text: 'آیا مطمئن هستید؟',
|
||||
icon: 'warning',
|
||||
showCancelButton: true,
|
||||
confirmButtonText: 'تایید',
|
||||
cancelButtonText: 'انصراف',
|
||||
...options,
|
||||
});
|
||||
};
|
||||
|
||||
// به جای استفاده از `provide()`
|
||||
nuxtApp.$mySwalToast = mySwalToast;
|
||||
nuxtApp.$mySwalConfirm = mySwalConfirm;
|
||||
});
|
|
@ -1,7 +0,0 @@
|
|||
import { defineNuxtPlugin } from '#app'
|
||||
import { QuillEditor } from '@vueup/vue-quill'
|
||||
import '@vueup/vue-quill/dist/vue-quill.snow.css'
|
||||
|
||||
export default defineNuxtPlugin((nuxtApp) => {
|
||||
nuxtApp.vueApp.component('QuillEditor', QuillEditor)
|
||||
})
|
|
@ -1,6 +0,0 @@
|
|||
import { defineNuxtPlugin } from "#app";
|
||||
import PersianDatepicker from "vue3-persian-datetime-picker";
|
||||
|
||||
export default defineNuxtPlugin((nuxtApp) => {
|
||||
nuxtApp.vueApp.use(PersianDatepicker);
|
||||
});
|
|
@ -1,6 +0,0 @@
|
|||
import { defineNuxtPlugin } from '#app'
|
||||
import TreeVue from 'vue3-tree-vue'
|
||||
|
||||
export default defineNuxtPlugin((nuxtApp) => {
|
||||
nuxtApp.vueApp.use(TreeVue)
|
||||
})
|
|
@ -1,5 +0,0 @@
|
|||
import { VueDraggableNext } from 'vue-draggable-next';
|
||||
|
||||
export default defineNuxtPlugin((nuxtApp) => {
|
||||
nuxtApp.vueApp.component('draggable', VueDraggableNext);
|
||||
});
|
|
@ -1,25 +0,0 @@
|
|||
// import { VueJalaliMoment } from "vue-jalali-moment";
|
||||
|
||||
// export default defineNuxtPlugin((nuxtApp) => {
|
||||
// // nuxtApp.vueApp.use(VueJalaliMoment);
|
||||
// nuxtApp.vueApp.use(VueJalaliMoment, {
|
||||
// // Global configuration options
|
||||
// // locale: 'fa',
|
||||
// // format: 'jYYYY/jMM/jDD',
|
||||
// });
|
||||
// });
|
||||
|
||||
import moment from 'jalali-moment';
|
||||
|
||||
export default defineNuxtPlugin((nuxtApp) => {
|
||||
moment.locale('fa'); // Set the locale to 'fa' for Jalali calendar
|
||||
|
||||
return {
|
||||
provide: {
|
||||
$jalaliMoment: moment,
|
||||
},
|
||||
};
|
||||
|
||||
// Global Access
|
||||
// nuxtApp.vueApp.config.globalProperties.$jalaliMoment = moment;
|
||||
});
|
|
@ -1,8 +0,0 @@
|
|||
import VuePlyr from "vue-plyr";
|
||||
import "vue-plyr/dist/vue-plyr.css";
|
||||
|
||||
export default defineNuxtPlugin((nuxtApp) => {
|
||||
nuxtApp.vueApp.use(VuePlyr, {
|
||||
plyr: {}
|
||||
})
|
||||
});
|
|
@ -1,31 +0,0 @@
|
|||
// import { createApp } from "vue";
|
||||
// import Vuelidate from "@vuelidate/core";
|
||||
|
||||
// createApp.use(Vuelidate);
|
||||
|
||||
import { useVuelidate } from '@vuelidate/core'
|
||||
// import { required, minLength } from '@vuelidate/validators'
|
||||
|
||||
// export default defineNuxtPlugin((nuxtApp) => {
|
||||
// nuxtApp.vueApp.use((useVuelidate) => {
|
||||
// // // Example of global setup, but typically you'd handle this in the component
|
||||
// // const state = reactive({
|
||||
// // firstName: ''
|
||||
// // })
|
||||
// // const rules = {
|
||||
// // firstName: {
|
||||
// // required,
|
||||
// // minLength: minLength(2)
|
||||
// // }
|
||||
// // }
|
||||
// // const v$ = useVuelidate(rules, state)
|
||||
// // return v$;
|
||||
// // // Return the v$ instance or any other necessary setup
|
||||
// })
|
||||
// })
|
||||
|
||||
|
||||
|
||||
export default defineNuxtPlugin(nuxtApp => {
|
||||
nuxtApp.provide('vuelidate', useVuelidate)
|
||||
})
|
|
@ -1,53 +0,0 @@
|
|||
export default [
|
||||
{
|
||||
path: "/task",
|
||||
file: "@task/pages/index.vue",
|
||||
meta: { breadcrumb: "سامانه وظایف" },
|
||||
children: [
|
||||
{
|
||||
path: "",
|
||||
redirect: { name: "taskDashboard" },
|
||||
},
|
||||
{
|
||||
path: "dashboard",
|
||||
name: "taskDashboard",
|
||||
file: "@task/pages/TaskDashboard.vue",
|
||||
meta: {
|
||||
breadcrumb: "پیشخوان مدیریت وظایف",
|
||||
},
|
||||
},
|
||||
{
|
||||
path: "times/list",
|
||||
name: "taskTimes",
|
||||
file: "@task/pages/Task.vue",
|
||||
meta: {
|
||||
breadcrumb: "ساعات",
|
||||
},
|
||||
},
|
||||
{
|
||||
path: "tasks/list",
|
||||
name: "taskList",
|
||||
file: "@task/pages/Task.vue",
|
||||
meta: {
|
||||
breadcrumb: "وظایف",
|
||||
},
|
||||
},
|
||||
{
|
||||
path: "teams/list",
|
||||
name: "teams",
|
||||
file: "@task/pages/TaskTeams.vue",
|
||||
meta: {
|
||||
breadcrumb: "تیم ها",
|
||||
},
|
||||
},
|
||||
{
|
||||
path: "admin/list",
|
||||
name: "taskReport",
|
||||
file: "@task/pages/TaskReport.vue",
|
||||
meta: {
|
||||
breadcrumb: "گزارش وظایف",
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
];
|
|
@ -1,146 +0,0 @@
|
|||
// import Vue from "vue";
|
||||
// import axios from "axios";
|
||||
// // import 'sweetalert2/dist/sweetalert2.min.css';
|
||||
// import "assets/common/css/sweetalert2.min.css";
|
||||
|
||||
// const tfooter = '<a href="">در ارتباط با سرور مشکلی ایجاد شد</a>';
|
||||
// const ApiService = {
|
||||
// init(baseURL) {
|
||||
// axios.defaults.baseURL = baseURL;
|
||||
// this.setHeader();
|
||||
// },
|
||||
// removeHeader() {
|
||||
// axios.defaults.headers.common = {};
|
||||
// },
|
||||
// setHeader() {
|
||||
// axios.defaults.headers.common["Authorization"] = getToken();
|
||||
// // axios.defaults.headers.common["lang"] = "fa";
|
||||
// },
|
||||
// get(
|
||||
// vue,
|
||||
// url,
|
||||
// callBack = null,
|
||||
// errorBk = null,
|
||||
// hasToast = false,
|
||||
// ttitle = "دریافت اطلاعات",
|
||||
// tbody = "انجام شد."
|
||||
// ) {
|
||||
// //axios.defaults.headers.common["lang"] = window.localStorage.getItem("lang");
|
||||
// return axios
|
||||
// .get(url)
|
||||
// .then((response) => {
|
||||
// if (hasToast && response) {
|
||||
// Vue.swal({
|
||||
// title: ttitle,
|
||||
// text: tbody,
|
||||
// icon: "success",
|
||||
// position: "bottom-end",
|
||||
// showConfirmButton: false,
|
||||
// toast: true,
|
||||
// timer: 2000,
|
||||
// });
|
||||
// }
|
||||
// if (callBack) callBack(response);
|
||||
// })
|
||||
// .catch((response) => {
|
||||
// // if (response.response.status == 401 && vue != null) {
|
||||
// // vue.$store.dispatch(LOGOUT);
|
||||
// // vue.$router.push({
|
||||
// // name: "login"
|
||||
// // });
|
||||
// // }
|
||||
// // Swal.fire({
|
||||
// // title: ttitle,
|
||||
// // text: response.response.message,
|
||||
// // icon: "error",
|
||||
// // position: "bottom-end",
|
||||
// // footer: tfooter,
|
||||
// // showConfirmButton: false,
|
||||
// // toast: true,
|
||||
// // timer: 2500
|
||||
// // });
|
||||
// if (errorBk) errorBk(response);
|
||||
// });
|
||||
// },
|
||||
// post(
|
||||
// vue,
|
||||
// url,
|
||||
// datas,
|
||||
// callBack = null,
|
||||
// errorBk = null,
|
||||
// hasToast = false,
|
||||
// ttitle = "ثبت اطلاعات",
|
||||
// tbody = "انجام شد."
|
||||
// ) {
|
||||
// var data = new FormData();
|
||||
// for (const [key, value] of Object.entries(datas)) data.append(key, value);
|
||||
// return axios
|
||||
// .post(url, data)
|
||||
// .then((response) => {
|
||||
// if (hasToast && response) {
|
||||
// Vue.swal({
|
||||
// title: ttitle,
|
||||
// text: tbody,
|
||||
// icon: "success",
|
||||
// position: "bottom-end",
|
||||
// showConfirmButton: false,
|
||||
// toast: true,
|
||||
// timer: 2000,
|
||||
// });
|
||||
// }
|
||||
// if (callBack) callBack(response);
|
||||
// })
|
||||
// .catch((response) => {
|
||||
// // if (response.response.status == 401 && vue != null) {
|
||||
// // vue.$store.dispatch(LOGOUT);
|
||||
// // vue.$router.push({
|
||||
// // name: "login"
|
||||
// // });
|
||||
// // }
|
||||
// // Swal.fire({
|
||||
// // title: ttitle,
|
||||
// // text: response.response.data.message,
|
||||
// // icon: "error",
|
||||
// // position: "bottom-end",
|
||||
// // footer: tfooter,
|
||||
// // showConfirmButton: false,
|
||||
// // toast: true,
|
||||
// // timer: 2500
|
||||
// // });
|
||||
// if (errorBk) errorBk(response);
|
||||
// });
|
||||
// },
|
||||
// getRequest(url, options = {}) {
|
||||
// return axios.get(url, options);
|
||||
// },
|
||||
// postRequest(url, data = [], options = {}) {
|
||||
// return axios.post(url, data, options);
|
||||
// },
|
||||
|
||||
// formData(url, data = []) {
|
||||
// const formData = new FormData();
|
||||
// for (const [key, value] of Object.entries(data)) {
|
||||
// if (value !== undefined && value !== null) formData.append(key, value);
|
||||
// }
|
||||
|
||||
// return axios.post(url, formData);
|
||||
// },
|
||||
// externalPostRequest(url, data = [], config = {}) {
|
||||
// const formData = new FormData();
|
||||
// for (const [key, value] of Object.entries(data))
|
||||
// formData.append(key, value);
|
||||
|
||||
// return axios.post(url, formData, config);
|
||||
// },
|
||||
// put(url, data) {
|
||||
// return axios.put(url, data);
|
||||
// },
|
||||
// delete(url, guid) {
|
||||
// return axios.delete(url, { guid });
|
||||
// },
|
||||
// customRequest(data) {
|
||||
// return axios(data);
|
||||
// },
|
||||
// };
|
||||
|
||||
// export default ApiService;
|
|
@ -1,57 +0,0 @@
|
|||
// // file-upload.service.js
|
||||
|
||||
// // import * as axios from 'axios';
|
||||
// // const BASE_URL = 'http://localhost:3001';
|
||||
// // function upload(formData) {
|
||||
// // const url = `${BASE_URL}/photos/upload`;
|
||||
// // return axios.post(url, formData)
|
||||
// // // get data
|
||||
// // .then(x => x.data)
|
||||
// // // add url field
|
||||
// // .then(x => x.map(img => Object.assign({},
|
||||
// // img, { url: `${BASE_URL}/images/${img.id}` })));
|
||||
// // }
|
||||
|
||||
// // file-upload.fake.service.js
|
||||
|
||||
// function upload(formData) {
|
||||
// const photos = formData.getAll('photos');
|
||||
|
||||
// const promises = photos.map((x) => getImage(x)
|
||||
// .then(img => ({
|
||||
// id: img,
|
||||
// originalName: x.name,
|
||||
// fileName: x.name,
|
||||
// url: img
|
||||
// })));
|
||||
// return Promise.all(promises);
|
||||
// }
|
||||
|
||||
// function getImage(file) {
|
||||
|
||||
// return new Promise((resolve, reject) => {
|
||||
// const fReader = new FileReader();
|
||||
// const img = new Image();
|
||||
|
||||
// fReader.onload = (e) => {
|
||||
// img.src = fReader.result;
|
||||
// resolve(getBase64Image(img));
|
||||
// }
|
||||
|
||||
// fReader.readAsDataURL(file);
|
||||
// })
|
||||
// }
|
||||
|
||||
// function getBase64Image(img) {
|
||||
// const canvas = document.createElement('canvas');
|
||||
// canvas.width = img.width;
|
||||
// canvas.height = img.height;
|
||||
|
||||
// const ctx = canvas.getContext('2d');
|
||||
// ctx.drawImage(img, 0, 0);
|
||||
|
||||
// const dataURL = canvas.toDataURL('image/png');
|
||||
// return dataURL;
|
||||
// }
|
||||
|
||||
// export { upload }
|
|
@ -1,204 +0,0 @@
|
|||
// // import axios from "axios";
|
||||
// //import os from "os";
|
||||
// import { v4 as uuidv4 } from 'uuid';
|
||||
// // import 'sweetalert2/dist/sweetalert2.min.css';
|
||||
// // import 'assets/common/css/sweetalert2.min.css';
|
||||
|
||||
// var httpService = new HttpService(import.meta.env.VITE_REPO_BASE_URL);
|
||||
|
||||
// //var local_ip = "";
|
||||
// var local_city = "";
|
||||
// var local_country = "";
|
||||
// var local_gps = "";
|
||||
// var os_name = "";
|
||||
// var browser = "";
|
||||
// var time_new_search = null;
|
||||
// var id_current_search = "";
|
||||
// var id_session_search = "";
|
||||
// var last_query_string = "";
|
||||
|
||||
// // const axiosLog = axios.create({
|
||||
// // baseURL: import.meta.env.VITE_API_SEARCH,
|
||||
// // })
|
||||
|
||||
// // function getNetworkIp() {
|
||||
// // const url = 'https://api.ipify.org/?format=json';
|
||||
// // var results= [];
|
||||
// // axios.get(url).then(response => {
|
||||
// // results = response.data
|
||||
// // local_ip = results.ip;
|
||||
|
||||
// // // axios.get('http://freegeoip.net/json/'+local_ip).then(response=>{
|
||||
// // // var res = response.data
|
||||
// // // local_city = res.city;
|
||||
// // // local_country = res.country;
|
||||
// // // local_gps = res.loc;
|
||||
// // // });
|
||||
// // })
|
||||
|
||||
// // }
|
||||
|
||||
// function fnBrowserDetect(){
|
||||
|
||||
// let userAgent = navigator.userAgent;
|
||||
// let browserName;
|
||||
|
||||
// if(userAgent.match(/chrome|chromium|crios/i)){
|
||||
// browserName = "chrome";
|
||||
// }else if(userAgent.match(/firefox|fxios/i)){
|
||||
// browserName = "firefox";
|
||||
// } else if(userAgent.match(/safari/i)){
|
||||
// browserName = "safari";
|
||||
// }else if(userAgent.match(/opr\//i)){
|
||||
// browserName = "opera";
|
||||
// } else if(userAgent.match(/edg/i)){
|
||||
// browserName = "edge";
|
||||
// }else{
|
||||
// browserName="none";
|
||||
// }
|
||||
|
||||
// return browserName;
|
||||
// }
|
||||
|
||||
// function getOs(){
|
||||
|
||||
// var detectedOS = "none";
|
||||
// if (window.navigator.appVersion.indexOf("Mac") != -1)
|
||||
// detectedOS = "MacOS";
|
||||
|
||||
// if (window.navigator.appVersion.indexOf("Win") != -1)
|
||||
// detectedOS = "Windows";
|
||||
|
||||
// if (window.navigator.appVersion.indexOf("Linux") != -1)
|
||||
// detectedOS = "Linux";
|
||||
|
||||
// return detectedOS;
|
||||
// }
|
||||
|
||||
// function 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;
|
||||
// }
|
||||
|
||||
// const LogService = {
|
||||
// reset(){
|
||||
// var resetall = true;
|
||||
|
||||
// if(time_new_search != null)
|
||||
// {
|
||||
// var dt = new Date();
|
||||
// var diffMs = (time_new_search - dt); // milliseconds
|
||||
// var diffMins = Math.round(((diffMs % 86400000) % 3600000) / 60000);
|
||||
// if(diffMins < 60){
|
||||
// resetall = false;
|
||||
// }
|
||||
// }
|
||||
// if(resetall){
|
||||
// //getNetworkIp();
|
||||
// os_name = getOs();
|
||||
// id_session_search = uuidv4();
|
||||
// }
|
||||
// browser = fnBrowserDetect();
|
||||
// time_new_search = new Date();
|
||||
// id_current_search = uuidv4();
|
||||
// },
|
||||
// index(
|
||||
// user,
|
||||
// query,
|
||||
// _page,
|
||||
// _facet,
|
||||
// _took,
|
||||
// _owner="",
|
||||
// _type="",
|
||||
// _branch="",
|
||||
// _id_click= "",
|
||||
// _index_click= -1
|
||||
// )
|
||||
// {
|
||||
|
||||
|
||||
// if(query=='')
|
||||
// return;
|
||||
|
||||
// query = myEncodeQuery(query);
|
||||
// _facet = myEncodeQuery(_facet);
|
||||
|
||||
|
||||
// if(last_query_string != query){
|
||||
// id_current_search = uuidv4();
|
||||
// last_query_string = query;
|
||||
// }
|
||||
|
||||
// var dt = new Date();
|
||||
// //var _minutes = dt.getMinutes();
|
||||
// var _hour = dt.getHours();
|
||||
// var _time = dt.getTime();
|
||||
// var dtfa = dt.toLocaleDateString("fa-IR");
|
||||
// //var host = window.location.protocol + "//" + window.location.host;
|
||||
|
||||
|
||||
|
||||
// const obj = {
|
||||
// id_session:id_session_search,
|
||||
// id:id_current_search,
|
||||
// browser: browser,
|
||||
// os_version: os_name,
|
||||
// //ip: local_ip,
|
||||
// gps : local_gps,
|
||||
// city : local_city,
|
||||
// country : local_country,
|
||||
// date: dt.toLocaleDateString(),
|
||||
// hour: _hour,
|
||||
// date_fa: dtfa,
|
||||
// time: _time,
|
||||
// took:_took,
|
||||
// query_String : query,
|
||||
// page: _page,
|
||||
// owner:_owner,
|
||||
// type:_type,
|
||||
// branch:_branch,
|
||||
// facet: _facet,
|
||||
// username: user?.user_data?.username,
|
||||
// userid : user?.user_id,
|
||||
// id_click:_id_click,
|
||||
// index_click:_index_click
|
||||
// };
|
||||
|
||||
// const json = JSON.stringify(obj);
|
||||
// //const blob = new Blob([json], {
|
||||
// // type: 'application/json'
|
||||
// //});
|
||||
// //const data = new FormData();
|
||||
// //data.append("document", blob);
|
||||
// // return ApiService
|
||||
// // .postRequest("/indexlog", json )
|
||||
// // .then()
|
||||
// // .catch();
|
||||
|
||||
// httpService
|
||||
// .postRequest("/indexlog", json)
|
||||
// .then((response) => {
|
||||
|
||||
// })
|
||||
// .catch((error) => {
|
||||
|
||||
// });
|
||||
// }
|
||||
|
||||
// };
|
||||
|
||||
// //const json = JSON.stringify({ answer: 42 });
|
||||
// //const res = await axios.post('https://httpbin.org/post', json);
|
||||
|
||||
// export default LogService;
|
|
@ -27,6 +27,8 @@ import type {
|
|||
helpActiveSchema,
|
||||
helpSchema,
|
||||
searchActiveTab,
|
||||
searchSchema,
|
||||
searchSynonymTitle,
|
||||
} from "~/types/searchTypes";
|
||||
|
||||
export const useCommonStore = defineStore("commonStore", {
|
||||
|
@ -92,12 +94,13 @@ export const useCommonStore = defineStore("commonStore", {
|
|||
appVersion: "" as string,
|
||||
isShowHilight: true as boolean,
|
||||
sidebarMenu: {},
|
||||
|
||||
// search
|
||||
searchSynonymTitle: undefined as searchSynonymTitle | undefined,
|
||||
searchActiveTab: undefined as searchActiveTab | undefined,
|
||||
searchSchema: undefined as searchSchema | undefined,
|
||||
}),
|
||||
getters: {
|
||||
searchActiveTabGetter(state) {
|
||||
return state.searchActiveTab;
|
||||
},
|
||||
vuexEntityGetter(state) {
|
||||
return state.vuexEntity;
|
||||
},
|
||||
|
@ -109,10 +112,18 @@ export const useCommonStore = defineStore("commonStore", {
|
|||
return state.helpActiveSchema;
|
||||
},
|
||||
// from search
|
||||
searchSynonymTitleGetter(state) {
|
||||
return state.searchSynonymTitle;
|
||||
},
|
||||
searchActiveTabGetter(state) {
|
||||
return state.searchActiveTab;
|
||||
},
|
||||
searchSchemaGetter(state) {
|
||||
return state.searchSchema;
|
||||
},
|
||||
domainActiveGetter(state) {
|
||||
return state.domainActive;
|
||||
},
|
||||
|
||||
diffTypeGetter(diffType) {
|
||||
return diffType;
|
||||
},
|
||||
|
@ -122,7 +133,6 @@ export const useCommonStore = defineStore("commonStore", {
|
|||
activeEntityViewSchemaGetter(state) {
|
||||
return state.activeEntityViewSchema;
|
||||
},
|
||||
|
||||
researchTermsGetter(state) {
|
||||
return state.researchTerms;
|
||||
},
|
||||
|
@ -165,10 +175,6 @@ export const useCommonStore = defineStore("commonStore", {
|
|||
isShowHilightGetter: (state) => state.isShowHilight,
|
||||
},
|
||||
actions: {
|
||||
searchActiveTabSetter(searchActiveTab: searchActiveTab = undefined) {
|
||||
this.searchActiveTab = searchActiveTab;
|
||||
},
|
||||
|
||||
vuexEntitySetter(vuexEntity = undefined) {
|
||||
this.vuexEntity = vuexEntity;
|
||||
},
|
||||
|
@ -180,6 +186,17 @@ export const useCommonStore = defineStore("commonStore", {
|
|||
this.helpActiveSchema = helpActiveSchema;
|
||||
},
|
||||
// from search
|
||||
searchSynonymTitleSetter(searchSynonymTitle = undefined) {
|
||||
this.searchSynonymTitle = searchSynonymTitle;
|
||||
},
|
||||
|
||||
searchActiveTabSetter(searchActiveTab: searchActiveTab) {
|
||||
this.searchActiveTab = searchActiveTab;
|
||||
},
|
||||
searchSchemaSetter(searchSchema = undefined) {
|
||||
this.searchSchema = searchSchema;
|
||||
},
|
||||
|
||||
domainActiveSetter(domain = undefined) {
|
||||
this.domainActive = domain;
|
||||
},
|
||||
|
|
Loading…
Reference in New Issue
Block a user