Compare commits

..

No commits in common. "main" and "Baghi/conflict" have entirely different histories.

8 changed files with 131 additions and 94 deletions

View File

@ -108,7 +108,20 @@
<MySelect
v-model:dropdownSchema="headItem.dropdownSchema"
:selectSchema="headItem.dropdownSchema"
@my-select-action="mySelectAction($event, headItem)"
@dropdownSelectEvents="
(event) => {
if (!event) return;
if (event.action !== 'change') return;
emitHandler('multiselect-click', {
data: {
name: headItem.name,
value: event.payload,
item: headItem,
},
});
}
"
/>
</div>
<div v-else-if="headItem.key === 'button'">
@ -291,7 +304,19 @@
<MySelect
v-model:dropdownSelectConfig="my_item.dropdownSchema"
:selectSchema="my_item.dropdownSchema"
@my-select-action="mySelectAction($event, headItem)"
@dropdownSelectEvents="
(event) => {
if (event.action !== 'change') return;
emitHandler('multiselect-click', {
data: {
name: my_item.name,
value: event.payload,
item: my_item,
},
});
}
"
/>
</div>
<div v-else-if="my_item.key === 'button'">
@ -409,17 +434,6 @@ function emitHandler(action, payload) {
data: payload.data,
});
}
function mySelectAction(event, payload) {
if (event.action !== "selected") return;
emitHandler("multiselect-click", {
data: {
name: payload.name,
value: event.payload,
item: payload,
},
});
}
const selectedTabDetails = ref(null);
const localEntity = computed(() => props.entity || {});

View File

@ -30,8 +30,6 @@ const props = defineProps({
const emit = defineEmits(["my-select-action"]);
const emitAction = (action, payload) => {
// console.log("payloadیییی ==> ", payload);
// console.log("actionیییی ==> ", action);
emit("my-select-action", { action, payload });
};

View File

@ -248,12 +248,19 @@ function formatContent(content) {
}
function generateDetailsHtml(item) {
let html = `<details class="custom-details" ${item.isOpen ? "open" : ""}>`;
let html = `<details class="custom-details #bcolor# " ${item.isOpen ? "open" : ""}>`;
if(item.background)
html.replace("#bcolor#", item.background)
else
html.replace("#bcolor#", "")
html += `<summary>`;
if (item.tag) {
html += `<a class="tag" target="normal" @click.stop="true" > ${item.tag} </a>`;
// console.log(" html 1 ", html);
}
html += `${item.title || "بدون عنوان"}`;
@ -272,11 +279,6 @@ function generateDetailsHtml(item) {
html += `</details>`;
if(item.background)
html = html.replaceAll("#bcolor#", item.background)
else
html = html.replaceAll("#bcolor#", "")
// console.log(" html 10 ", html);
return html;
}
@ -519,14 +521,14 @@ onBeforeUnmount(() => {
}
}
.bcolor1{
background: rgb(227, 242, 253) !important;
.b_color1{
background: rgb(227, 242, 253)
}
.bcolor2{
background: rgb(232, 245, 233) !important;
.b_color2{
background: rgb(232, 245, 233)
}
.bcolor3{
background: rgb(243, 229, 245) !important;
.b_color3{
background: rgb(243, 229, 245)
}
/* استایل آکاردئون‌ها */

View File

@ -180,7 +180,7 @@ const headerTools = computed(() => [
{
type: "dropdown",
key: "dropdown",
name: "refine_conflict",
name: "refine_codes",
dropdownSchema: {
width: "10em",
modelValue: null, // اینو بذار
@ -190,44 +190,20 @@ const headerTools = computed(() => [
placeholder: "انتخاب کنید",
items: [
{ label: " همه", value: "all" },
{ label: "تعارض مستقر", value: "تعارض مستقر" },
{ label: "مطلق مقدم، مقید موخر", value: "مطلق مقدم، مقید موخر" },
{ label: "مقید مقدم، مطلق موخر", value: "مقید مقدم، مطلق موخر" },
{ label: "تکرار حکم", value: "تکرار حکم" },
{ label: "بدون تعارض", value: "بدون تعارض" },
{ label: " تعارض مستقر", value: "stable" },
{ label: "تعارض مشروط", value: "conditional" },
{ label: "تکرار حکم", value: "duplicate" },
],
},
},
{
key: "label",
label: "اعتبار داتیک:",
label: " وضعیت اعتبار:",
},
{
type: "dropdown",
key: "dropdown",
name: "state_etebar",
dropdownSchema: {
width: "8em",
modelValue: null, // اینو بذار
optionAttribute: "title",
valueAttribute: "value",
searchable: false,
placeholder: "انتخاب کنید",
items: [
{ label: " همه", value: "all" },
{ label: "نامعتبر", value: "invalid" },
{ label: "معتبر", value: "valid" },
],
},
},
{
key: "label",
label: "اعتبار تشخیصی:",
},
{
type: "dropdown",
key: "dropdown",
name: "refine_valid",
name: "refine_codes",
dropdownSchema: {
width: "8em",
modelValue: null, // اینو بذار
@ -279,21 +255,12 @@ function headerToolsAction({ action, data }) {
emit("my-header-tools-search", data.item);
}
} else if (action == "multiselect-click" && data.value) {
if (data.name == "refine_valid") {
emit("my-header-tools-multiselect-click", data);
} else if (data.name == "refine_conflict") {
emit("my-header-tools-multiselect-click", data);
} else if (data.name == "refine_codes") {
emit("my-header-tools-multiselect-click", data);
}
if (action === "prev-click") {
}
// if (action === "prev-click") {
// }
// if (action === "next-click") {
// }
if (action === "next-click") {
}
}
function myContentAction({ action, payload }) {
if (action === "conflict_Details") {

View File

@ -51,15 +51,14 @@ const setDataEditor = async () => {
accordionItems.value = [];
let node = {};
/////-----------------------------------------
if (_source.previous_info) {
let item = _source.previous_info;
node = {
background:"bcolor1",
background:"b_color1",
isOpen: false,
id: item.section_mom_id,
title:
`<a class="label #bcolor# " href="#">قانون مقدم : </a>` +
`<a class="label" href="#">قانون مقدم : </a>` +
item.qanon_title +
" - " +
item.full_path,
@ -97,15 +96,14 @@ const setDataEditor = async () => {
});
}
/////-----------------------------------------
if (_source.next_info) {
let item = _source.next_info;
node = {
background:"bcolor2",
background:"b_color2",
isOpen: false,
id: item.section_mom_id,
title:
`<a class="label #bcolor# " href="#">قانون موخر : </a>` +
`<a class="label">قانون موخر : </a>` +
item.qanon_title +
" - " +
item.full_path,
@ -128,12 +126,7 @@ const setDataEditor = async () => {
accordionItems.value.push(node);
let unrepeat_id = {}
item.rule_ids.forEach((rule_id) => {
if(unrepeat_id[rule_id])
return
unrepeat_id[rule_id] = 1
let content = _source.rules_content[rule_id] ?? "";
accordionItems.value.push({
isOpen: false,
@ -146,7 +139,7 @@ const setDataEditor = async () => {
/////-------------وحدت موضوع----------------------
node = {
background:"bcolor3",
background:"b_color3",
isOpen: true,
id: 11,
title: "توضیح هوشمند برای وجود وحدت موضوع بین احکام استنادی ",

View File

@ -23,13 +23,13 @@
},
{ "key": "next_info.full_path", "title": "ماده موخر", "width": "1" },
{
"key": "conflict_relation_identification.main_type",
"title": "تعارض- بررسی اول",
"key": "subject_unity.main_type",
"title": "وضعیت وحدت موضوع",
"width": "2"
},
{
"key": "conflict_evaluation.main_type",
"title": "تعارض -بررسی نهایی",
"key": "conflict_relation_identification.main_type",
"title": "تعارض",
"width": "2"
}
],

View File

@ -20,8 +20,6 @@
@conflict-details="conflictDetails"
@my-content-action="myContentAction"
@my-header-tools-search="myHeaderToolsSearch"
@my-header-tools-multiselect-click="myHeaderToolsMultiselectClick"
/>
</div>
</template>
@ -171,11 +169,7 @@ function myContentAction({ action, payload }) {
}
}
function myHeaderToolsSearch(textSearch) {
console.log("dataqqqq ==> ", textSearch);
getListConflict(textSearch);
}
function myHeaderToolsMultiselectClick(textSearch) {
console.log("dataqqqq ==> ", textSearch);
}
</script>

69
app/pages/login.vue Executable file
View File

@ -0,0 +1,69 @@
<template>
<div
class="min-h-[calc(100dvh-4em)] flex items-center justify-center p-4 bg-gray-100 dark:bg-dark-primary"
>
<div
class="max-w-md w-full bg-white dark:bg-dark-primary-800 rounded-2xl shadow-xl p-8 text-center border border-gray-200 dark:border-dark-primary-600"
>
<!-- Tabs -->
<ul class="flex border-b border-gray-200">
<li class="flex-1">
<button
class="w-full py-3.5 font-medium transition-all duration-200 cursor-pointer"
:class="tabClass('login')"
@click="setActive('login')"
>
ورود
</button>
</li>
<li class="flex-1">
<button
class="w-full py-3.5 font-medium transition-all duration-200 cursor-pointer"
:class="tabClass('register')"
@click="setActive('register')"
>
ثبتنام
</button>
</li>
</ul>
<!-- Content -->
<div class="mt-8">
<component :is="currentComponent" />
</div>
</div>
</div>
</template>
<script setup>
import { ref } from "vue";
definePageMeta({ layout: "login-layout" });
// --- Lazy load components ---
import LoginForm from "~/components/lazy-load/auth/LoginForm.vue";
import RegisterForm from "~/components/lazy-load/auth/RegisterForm.vue";
// --- State ---
const activeTab = ref("login");
const currentComponent = ref(LoginForm);
const componentsMap = {
login: LoginForm,
register: RegisterForm,
};
// --- Methods ---
function setActive(tab) {
activeTab.value = tab;
currentComponent.value = componentsMap[tab];
}
// --- Compute class for tabs ---
function tabClass(tab) {
if (activeTab.value === tab) {
return "text-primary border-b-1 border-primary font-semibold";
} else {
return "text-gray-500 hover:text-primary";
}
}
</script>
<style></style>