Compare commits

...

19 Commits

Author SHA1 Message Date
Mehdi104797
e522e40e56 . 2025-05-06 11:54:58 +03:30
Mehdi104797
1212ac9380 . 2025-05-06 07:20:24 +03:30
Mehdi104797
c7adf4183e . 2025-05-06 07:09:17 +03:30
Mehdi104797
196be7113c Merge branch 'baghi/develop' of https://git2.tavasi.ir/front/base_ui into shadi/develop 2025-05-06 07:08:52 +03:30
ad028b7f4b ریسپانسیو 2025-05-06 10:29:23 +03:30
Mehdi104797
309f1f155f . 2025-05-06 06:56:58 +03:30
Mehdi104797
fdae7448e1 Merge branch 'baghi/develop' of https://git2.tavasi.ir/front/base_ui into shadi/develop 2025-05-06 06:56:21 +03:30
341c333a18 pool 2025-05-03 17:48:54 +03:30
6a525c0c71 pool 2025-05-03 17:48:42 +03:30
a8c2b42240 Merge branch 'main' of https://git2.tavasi.ir/front/base_ui into baghi/develop 2025-05-03 17:48:15 +03:30
6086ec8aad router 2025-05-03 17:47:38 +03:30
Mehdi104797
d42c64d7bc .تغییرات task 2025-05-01 13:24:01 +03:30
Mehdi104797
f1970d3e6e . 2025-05-01 08:26:15 +03:30
Mehdi104797
98a2940b81 . 2025-04-28 13:21:24 +03:30
Mehdi104797
5c66bd084e . 2025-04-28 11:10:34 +03:30
Mehdi104797
c54776215d . 2025-04-28 08:37:15 +03:30
Mehdi104797
7aa389afa4 تغییرات 2025-04-28 08:35:05 +03:30
Mehdi104797
c460543f5d . 2025-04-28 08:28:52 +03:30
Mehdi104797
78b4d2464e . 2025-04-28 08:28:47 +03:30
11 changed files with 466 additions and 25 deletions

1
.env
View File

@ -55,7 +55,6 @@ VITE_ENTITY_SYSTEM=entity-view-system
VITE_BORHAN_SYSTEM=borhan-system VITE_BORHAN_SYSTEM=borhan-system
VITE_THIQAT_SYSTEM=thiqat-system VITE_THIQAT_SYSTEM=thiqat-system
VITE_CHAT_SYSTEM=chat-system VITE_CHAT_SYSTEM=chat-system
VITE_TASK_SYSTEM=task-system
VITE_REPORT_SYSTEM=report-system VITE_REPORT_SYSTEM=report-system
VITE_ADMIN_SYSTEM=admin-panel VITE_ADMIN_SYSTEM=admin-panel
VITE_TAHRIR_SYSTEM=tahrir-system VITE_TAHRIR_SYSTEM=tahrir-system

View File

@ -21,6 +21,7 @@ VITE_TAHRIR_PAGE_TITLE = قانون - سامانه ای برای سندنگار
VITE_REPORT_PAGE_TITLE = قانون - سامانه گزارش گیری داده VITE_REPORT_PAGE_TITLE = قانون - سامانه گزارش گیری داده
VITE_PERMISSION_PAGE_TITLE = قانون - سامانه کنترل وظایف VITE_PERMISSION_PAGE_TITLE = قانون - سامانه کنترل وظایف
VITE_CHAT_PAGE_TITLE = قانون - سامانه گفتگو VITE_CHAT_PAGE_TITLE = قانون - سامانه گفتگو
VITE_TASK_PAGE_TITLE = قانون - سامانه وظایف
VITE_RESEARCH_PAGE_TITLE = قانون - تحقیقات من VITE_RESEARCH_PAGE_TITLE = قانون - تحقیقات من
VITE_AI_TOOLS_PAGE_TITLE = قانون - حاشیه نویسی VITE_AI_TOOLS_PAGE_TITLE = قانون - حاشیه نویسی

3
.gitmodules vendored
View File

@ -10,3 +10,6 @@
[submodule "systems/chat_ui"] [submodule "systems/chat_ui"]
path = systems/chat_ui path = systems/chat_ui
url = https://git2.tavasi.ir/front/chat_ui.git url = https://git2.tavasi.ir/front/chat_ui.git
[submodule "systems/task_ui"]
path = systems/task_ui
url = https://git2.tavasi.ir/front/task_ui.git

View File

@ -3,13 +3,14 @@ git submodule add https://git2.tavasi.ir/front/chat_ui.git systems/chat_ui -f
Cloning a Repository with Submodules Cloning a Repository with Submodules
If you clone a repository that contains submodules, you'll need to initialize and update the submodules: If you clone a repository that contains submodules, you'll need to initialize and update the submodules:
git clone <repository-url> git clone repository-url
cd <repository-directory> cd repository-directory
git submodule init git submodule init
git submodule update git submodule update
Or, you can do it in one step: Or, you can do it in one step:
git clone --recurse-submodules <repository-url> git clone --recurse-submodules https://git2.tavasi.ir/front/base_ui.git
Updating Submodules Updating Submodules
To update a submodule to the latest commit on its branch: To update a submodule to the latest commit on its branch:

View File

@ -15,6 +15,7 @@
</template> </template>
<script> <script>
export default { export default {
props: ["counter"], props: ["counter"],
data() { data() {
@ -55,27 +56,27 @@ export default {
}, refreshInterval); }, refreshInterval);
}, },
// goToRouteName() { goToRouteName() {
// this.$router.push({ this.$router.push({
// name: "searchResult", name: "search",
// query: { query: {
// q: undefined, q: undefined,
// key: this.counter.routeName, key: this.counter.routeName,
// }, },
// }); });
// }, },
urlResolver() { urlResolver() {
console.log("555");
// const routeData = this.$router.resolve({
// name: "searchResult", const routeData = this.$router.resolve({
// query: { name: "search",
// q: undefined, query: {
// key: this.counter.routeName, q: undefined,
// }, key: this.counter.routeName,
// }); },
// return routeData.href; });
return routeData.href;
}, },
}, },
}; };

View File

@ -6,6 +6,7 @@ import chat from "./routes/chat";
import haditha from "./routes/haditha"; import haditha from "./routes/haditha";
import search from "./routes/search"; import search from "./routes/search";
import research from "./routes/research"; import research from "./routes/research";
import task from "./routes/task";
const envs = import.meta.env; const envs = import.meta.env;
let sassEnvVariables = ""; let sassEnvVariables = "";
@ -44,7 +45,7 @@ export default defineNuxtConfig({
"pages:extend"(pages) { "pages:extend"(pages) {
// Add custom routes // Add custom routes
pages.push(...search, ...research, ...haditha, ...chat); pages.push(...search, ...research, ...haditha, ...chat, ...task);
}, },
}, },
@ -175,6 +176,7 @@ export default defineNuxtConfig({
"@research": "~/systems/research_ui", "@research": "~/systems/research_ui",
"@haditha": "~/systems/hadith_ui", "@haditha": "~/systems/hadith_ui",
"@chat": "~/systems/chat_ui", "@chat": "~/systems/chat_ui",
"@task": "~/systems/task_ui",
}, },
vite: { vite: {
assetsInclude: ["**/*.svg"], assetsInclude: ["**/*.svg"],

380
plugins/persianNumber.js Normal file
View File

@ -0,0 +1,380 @@
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,
};

53
routes/task.ts Normal file
View File

@ -0,0 +1,53 @@
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 +1 @@
Subproject commit 5b38341d08c1e9229a067443e30c12dbc7b7f700 Subproject commit ce54af871a476562e3c1af352ddc2b1f6387d14b

@ -1 +1 @@
Subproject commit dc2d5cc460d983ddcb1b302f238070a79d818135 Subproject commit 4e676bb758c7c3294043164f9f8ada94eb4efc1c

1
systems/task_ui Submodule

@ -0,0 +1 @@
Subproject commit cc55ac6684ad57c6d801d897e7f2328d9a64fea2