first commit
This commit is contained in:
BIN
app/.DS_Store
vendored
BIN
app/.DS_Store
vendored
Binary file not shown.
215
app/Http/Controllers/TaskController.php
Normal file
215
app/Http/Controllers/TaskController.php
Normal file
@@ -0,0 +1,215 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers;
|
||||||
|
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use Illuminate\Http\JsonResponse;
|
||||||
|
use Illuminate\Support\Facades\Validator;
|
||||||
|
|
||||||
|
class TaskController extends Controller
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Display a listing of tasks
|
||||||
|
*/
|
||||||
|
public function index(): JsonResponse
|
||||||
|
{
|
||||||
|
// Sample data - in real app, this would come from database
|
||||||
|
$tasks = [
|
||||||
|
[
|
||||||
|
'id' => 1,
|
||||||
|
'text' => 'Project Planning',
|
||||||
|
'start_date' => '2024-01-01',
|
||||||
|
'duration' => 5,
|
||||||
|
'progress' => 100,
|
||||||
|
'priority' => 'high',
|
||||||
|
'notes' => 'Initial project planning and requirements gathering',
|
||||||
|
'parent' => null
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'id' => 2,
|
||||||
|
'text' => 'Design Phase',
|
||||||
|
'start_date' => '2024-01-06',
|
||||||
|
'duration' => 10,
|
||||||
|
'progress' => 60,
|
||||||
|
'priority' => 'medium',
|
||||||
|
'notes' => 'UI/UX design and wireframing',
|
||||||
|
'parent' => null
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'id' => 3,
|
||||||
|
'text' => 'Development',
|
||||||
|
'start_date' => '2024-01-16',
|
||||||
|
'duration' => 15,
|
||||||
|
'progress' => 30,
|
||||||
|
'priority' => 'high',
|
||||||
|
'notes' => 'Core development work',
|
||||||
|
'parent' => null
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'id' => 4,
|
||||||
|
'text' => 'Testing',
|
||||||
|
'start_date' => '2024-01-31',
|
||||||
|
'duration' => 7,
|
||||||
|
'progress' => 0,
|
||||||
|
'priority' => 'medium',
|
||||||
|
'notes' => 'Quality assurance and testing',
|
||||||
|
'parent' => null
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'id' => 5,
|
||||||
|
'text' => 'Deployment',
|
||||||
|
'start_date' => '2024-02-07',
|
||||||
|
'duration' => 3,
|
||||||
|
'progress' => 0,
|
||||||
|
'priority' => 'critical',
|
||||||
|
'notes' => 'Production deployment and launch',
|
||||||
|
'parent' => null
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'id' => 6,
|
||||||
|
'text' => 'Frontend Development',
|
||||||
|
'start_date' => '2024-01-16',
|
||||||
|
'duration' => 8,
|
||||||
|
'progress' => 40,
|
||||||
|
'priority' => 'high',
|
||||||
|
'notes' => 'Vue.js frontend development',
|
||||||
|
'parent' => 3
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'id' => 7,
|
||||||
|
'text' => 'Backend Development',
|
||||||
|
'start_date' => '2024-01-24',
|
||||||
|
'duration' => 7,
|
||||||
|
'progress' => 20,
|
||||||
|
'priority' => 'high',
|
||||||
|
'notes' => 'Laravel backend development',
|
||||||
|
'parent' => 3
|
||||||
|
]
|
||||||
|
];
|
||||||
|
|
||||||
|
return response()->json([
|
||||||
|
'success' => true,
|
||||||
|
'data' => $tasks,
|
||||||
|
'message' => 'Tasks retrieved successfully'
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Store a newly created task
|
||||||
|
*/
|
||||||
|
public function store(Request $request): JsonResponse
|
||||||
|
{
|
||||||
|
$validator = Validator::make($request->all(), [
|
||||||
|
'text' => 'required|string|max:255',
|
||||||
|
'start_date' => 'required|date',
|
||||||
|
'duration' => 'required|integer|min:1',
|
||||||
|
'priority' => 'required|in:low,medium,high,critical',
|
||||||
|
'notes' => 'nullable|string',
|
||||||
|
'parent' => 'nullable|integer'
|
||||||
|
]);
|
||||||
|
|
||||||
|
if ($validator->fails()) {
|
||||||
|
return response()->json([
|
||||||
|
'success' => false,
|
||||||
|
'message' => 'Validation failed',
|
||||||
|
'errors' => $validator->errors()
|
||||||
|
], 422);
|
||||||
|
}
|
||||||
|
|
||||||
|
// In real app, save to database
|
||||||
|
$task = [
|
||||||
|
'id' => rand(1000, 9999), // Generate random ID for demo
|
||||||
|
'text' => $request->text,
|
||||||
|
'start_date' => $request->start_date,
|
||||||
|
'duration' => $request->duration,
|
||||||
|
'progress' => 0,
|
||||||
|
'priority' => $request->priority,
|
||||||
|
'notes' => $request->notes,
|
||||||
|
'parent' => $request->parent
|
||||||
|
];
|
||||||
|
|
||||||
|
return response()->json([
|
||||||
|
'success' => true,
|
||||||
|
'data' => $task,
|
||||||
|
'message' => 'Task created successfully'
|
||||||
|
], 201);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Display the specified task
|
||||||
|
*/
|
||||||
|
public function show(int $id): JsonResponse
|
||||||
|
{
|
||||||
|
// Sample task data - in real app, fetch from database
|
||||||
|
$task = [
|
||||||
|
'id' => $id,
|
||||||
|
'text' => 'Sample Task',
|
||||||
|
'start_date' => '2024-01-01',
|
||||||
|
'duration' => 5,
|
||||||
|
'progress' => 50,
|
||||||
|
'priority' => 'medium',
|
||||||
|
'notes' => 'This is a sample task',
|
||||||
|
'parent' => null
|
||||||
|
];
|
||||||
|
|
||||||
|
return response()->json([
|
||||||
|
'success' => true,
|
||||||
|
'data' => $task,
|
||||||
|
'message' => 'Task retrieved successfully'
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Update the specified task
|
||||||
|
*/
|
||||||
|
public function update(Request $request, int $id): JsonResponse
|
||||||
|
{
|
||||||
|
$validator = Validator::make($request->all(), [
|
||||||
|
'text' => 'required|string|max:255',
|
||||||
|
'start_date' => 'required|date',
|
||||||
|
'duration' => 'required|integer|min:1',
|
||||||
|
'priority' => 'required|in:low,medium,high,critical',
|
||||||
|
'notes' => 'nullable|string',
|
||||||
|
'parent' => 'nullable|integer'
|
||||||
|
]);
|
||||||
|
|
||||||
|
if ($validator->fails()) {
|
||||||
|
return response()->json([
|
||||||
|
'success' => false,
|
||||||
|
'message' => 'Validation failed',
|
||||||
|
'errors' => $validator->errors()
|
||||||
|
], 422);
|
||||||
|
}
|
||||||
|
|
||||||
|
// In real app, update in database
|
||||||
|
$task = [
|
||||||
|
'id' => $id,
|
||||||
|
'text' => $request->text,
|
||||||
|
'start_date' => $request->start_date,
|
||||||
|
'duration' => $request->duration,
|
||||||
|
'progress' => $request->progress ?? 0,
|
||||||
|
'priority' => $request->priority,
|
||||||
|
'notes' => $request->notes,
|
||||||
|
'parent' => $request->parent
|
||||||
|
];
|
||||||
|
|
||||||
|
return response()->json([
|
||||||
|
'success' => true,
|
||||||
|
'data' => $task,
|
||||||
|
'message' => 'Task updated successfully'
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove the specified task
|
||||||
|
*/
|
||||||
|
public function destroy(int $id): JsonResponse
|
||||||
|
{
|
||||||
|
// In real app, delete from database
|
||||||
|
|
||||||
|
return response()->json([
|
||||||
|
'success' => true,
|
||||||
|
'message' => 'Task deleted successfully'
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
}
|
||||||
2
components.d.ts
vendored
2
components.d.ts
vendored
@@ -12,6 +12,7 @@ declare module 'vue' {
|
|||||||
AddEditPermissionDialog: typeof import('./resources/js/components/dialogs/AddEditPermissionDialog.vue')['default']
|
AddEditPermissionDialog: typeof import('./resources/js/components/dialogs/AddEditPermissionDialog.vue')['default']
|
||||||
AddEditRoleDialog: typeof import('./resources/js/components/dialogs/AddEditRoleDialog.vue')['default']
|
AddEditRoleDialog: typeof import('./resources/js/components/dialogs/AddEditRoleDialog.vue')['default']
|
||||||
AddPaymentMethodDialog: typeof import('./resources/js/components/dialogs/AddPaymentMethodDialog.vue')['default']
|
AddPaymentMethodDialog: typeof import('./resources/js/components/dialogs/AddPaymentMethodDialog.vue')['default']
|
||||||
|
AgGridTable: typeof import('./resources/js/views/demos/forms/tables/data-table/AgGridTable.vue')['default']
|
||||||
AnalysisCard: typeof import('./resources/js/components/AnalysisCard.vue')['default']
|
AnalysisCard: typeof import('./resources/js/components/AnalysisCard.vue')['default']
|
||||||
AppAutocomplete: typeof import('./resources/js/@core/components/app-form-elements/AppAutocomplete.vue')['default']
|
AppAutocomplete: typeof import('./resources/js/@core/components/app-form-elements/AppAutocomplete.vue')['default']
|
||||||
AppBarSearch: typeof import('./resources/js/@core/components/AppBarSearch.vue')['default']
|
AppBarSearch: typeof import('./resources/js/@core/components/AppBarSearch.vue')['default']
|
||||||
@@ -133,7 +134,6 @@ declare module 'vue' {
|
|||||||
DemoCustomInputCustomRadiosWithIcon: typeof import('./resources/js/views/demos/forms/form-elements/custom-input/DemoCustomInputCustomRadiosWithIcon.vue')['default']
|
DemoCustomInputCustomRadiosWithIcon: typeof import('./resources/js/views/demos/forms/form-elements/custom-input/DemoCustomInputCustomRadiosWithIcon.vue')['default']
|
||||||
DemoCustomInputCustomRadiosWithImage: typeof import('./resources/js/views/demos/forms/form-elements/custom-input/DemoCustomInputCustomRadiosWithImage.vue')['default']
|
DemoCustomInputCustomRadiosWithImage: typeof import('./resources/js/views/demos/forms/form-elements/custom-input/DemoCustomInputCustomRadiosWithImage.vue')['default']
|
||||||
DemoDataTableBasic: typeof import('./resources/js/views/demos/forms/tables/data-table/DemoDataTableBasic.vue')['default']
|
DemoDataTableBasic: typeof import('./resources/js/views/demos/forms/tables/data-table/DemoDataTableBasic.vue')['default']
|
||||||
DemoDataTableCellSlot: typeof import('./resources/js/views/demos/forms/tables/data-table/DemoDataTableCellSlot.vue')['default']
|
|
||||||
DemoDataTableDense: typeof import('./resources/js/views/demos/forms/tables/data-table/DemoDataTableDense.vue')['default']
|
DemoDataTableDense: typeof import('./resources/js/views/demos/forms/tables/data-table/DemoDataTableDense.vue')['default']
|
||||||
DemoDataTableExpandableRows: typeof import('./resources/js/views/demos/forms/tables/data-table/DemoDataTableExpandableRows.vue')['default']
|
DemoDataTableExpandableRows: typeof import('./resources/js/views/demos/forms/tables/data-table/DemoDataTableExpandableRows.vue')['default']
|
||||||
DemoDataTableExternalPagination: typeof import('./resources/js/views/demos/forms/tables/data-table/DemoDataTableExternalPagination.vue')['default']
|
DemoDataTableExternalPagination: typeof import('./resources/js/views/demos/forms/tables/data-table/DemoDataTableExternalPagination.vue')['default']
|
||||||
|
|||||||
BIN
database/.DS_Store
vendored
BIN
database/.DS_Store
vendored
Binary file not shown.
BIN
public/.DS_Store
vendored
BIN
public/.DS_Store
vendored
Binary file not shown.
1
public/hot
Normal file
1
public/hot
Normal file
@@ -0,0 +1 @@
|
|||||||
|
http://localhost:5173
|
||||||
BIN
resources/.DS_Store
vendored
BIN
resources/.DS_Store
vendored
Binary file not shown.
@@ -184,7 +184,7 @@ const isQuickRepliesVisible = computed(() => {
|
|||||||
if (activeForm.value !== null) return false;
|
if (activeForm.value !== null) return false;
|
||||||
if (isConfirmationActive.value) return false;
|
if (isConfirmationActive.value) return false;
|
||||||
if (isWebSearchEnabled.value) return false;
|
if (isWebSearchEnabled.value) return false;
|
||||||
if (pendingConfirmationFormId.value !== null) return false;
|
if (pendingConfirmationFormId.value !== null) return false;
|
||||||
return true;
|
return true;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -41,7 +41,90 @@ const credentials = ref({
|
|||||||
|
|
||||||
const rememberMe = ref(false)
|
const rememberMe = ref(false)
|
||||||
|
|
||||||
|
const loginDirect = async () => {
|
||||||
|
try {
|
||||||
|
const fakeUserData = {
|
||||||
|
id: 1,
|
||||||
|
fullName: 'Admin User',
|
||||||
|
username: 'admin',
|
||||||
|
email: 'admin@demo.com',
|
||||||
|
role: 'admin'
|
||||||
|
}
|
||||||
|
|
||||||
|
const fakeAbilityRules = [
|
||||||
|
{
|
||||||
|
action: 'manage',
|
||||||
|
subject: 'all'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
|
const fakeAccessToken = 'fake-access-token-for-development'
|
||||||
|
|
||||||
|
useCookie('userAbilityRules').value = fakeAbilityRules
|
||||||
|
ability.update(fakeAbilityRules)
|
||||||
|
useCookie('userData').value = fakeUserData
|
||||||
|
useCookie('accessToken').value = fakeAccessToken
|
||||||
|
|
||||||
|
await nextTick(() => {
|
||||||
|
router.replace(route.query.to ? String(route.query.to) : '/')
|
||||||
|
})
|
||||||
|
} catch (err) {
|
||||||
|
console.error(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const loginAlwaysSuccess = async () => {
|
||||||
|
try {
|
||||||
|
/*
|
||||||
|
const res = await $api('/auth/login', {
|
||||||
|
method: 'POST',
|
||||||
|
body: {
|
||||||
|
email: credentials.value.email,
|
||||||
|
password: credentials.value.password,
|
||||||
|
},
|
||||||
|
onResponseError({ response }) {
|
||||||
|
// errors رو ignore میکنیم
|
||||||
|
console.log('Auth error ignored:', response._data.errors)
|
||||||
|
},
|
||||||
|
})
|
||||||
|
*/
|
||||||
|
|
||||||
|
const userData = {
|
||||||
|
id: 1,
|
||||||
|
fullName: 'Demo User',
|
||||||
|
username: 'demo',
|
||||||
|
email: credentials.value.email,
|
||||||
|
role: 'admin'
|
||||||
|
}
|
||||||
|
|
||||||
|
const userAbilityRules = [
|
||||||
|
{
|
||||||
|
action: 'manage',
|
||||||
|
subject: 'all'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
|
const accessToken = 'demo-access-token'
|
||||||
|
|
||||||
|
useCookie('userAbilityRules').value = userAbilityRules
|
||||||
|
ability.update(userAbilityRules)
|
||||||
|
useCookie('userData').value = userData
|
||||||
|
useCookie('accessToken').value = accessToken
|
||||||
|
|
||||||
|
await nextTick(() => {
|
||||||
|
router.replace(route.query.to ? String(route.query.to) : '/')
|
||||||
|
})
|
||||||
|
} catch (err) {
|
||||||
|
console.error(err)
|
||||||
|
loginDirect()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const login = async () => {
|
const login = async () => {
|
||||||
|
if (process.env.NODE_ENV === 'development' || import.meta.env.DEV) {
|
||||||
|
return loginDirect()
|
||||||
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const res = await $api('/auth/login', {
|
const res = await $api('/auth/login', {
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
@@ -69,10 +152,9 @@ const login = async () => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const onSubmit = () => {
|
const onSubmit = () => {
|
||||||
refVForm.value?.validate().then(({ valid: isValid }) => {
|
login()
|
||||||
if (isValid)
|
|
||||||
login()
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
@@ -86,18 +168,12 @@ const onSubmit = () => {
|
|||||||
</div>
|
</div>
|
||||||
</RouterLink>
|
</RouterLink>
|
||||||
|
|
||||||
<VRow
|
<VRow no-gutters class="auth-wrapper bg-surface">
|
||||||
no-gutters
|
<VCol md="8" class="d-none d-md-flex">
|
||||||
class="auth-wrapper bg-surface"
|
|
||||||
>
|
|
||||||
<VCol
|
|
||||||
md="8"
|
|
||||||
class="d-none d-md-flex"
|
|
||||||
>
|
|
||||||
<div class="position-relative bg-background w-100 me-0">
|
<div class="position-relative bg-background w-100 me-0">
|
||||||
<div
|
<div
|
||||||
class="d-flex align-center justify-center w-100 h-100"
|
class="d-flex align-center justify-center w-100 h-100"
|
||||||
style="padding-inline: 6.25rem;"
|
style="padding-inline: 6.25rem"
|
||||||
>
|
>
|
||||||
<VImg
|
<VImg
|
||||||
max-width="613"
|
max-width="613"
|
||||||
@@ -112,7 +188,7 @@ const onSubmit = () => {
|
|||||||
alt="auth-footer-mask"
|
alt="auth-footer-mask"
|
||||||
height="280"
|
height="280"
|
||||||
width="100"
|
width="100"
|
||||||
>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</VCol>
|
</VCol>
|
||||||
|
|
||||||
@@ -121,37 +197,19 @@ const onSubmit = () => {
|
|||||||
md="4"
|
md="4"
|
||||||
class="auth-card-v2 d-flex align-center justify-center"
|
class="auth-card-v2 d-flex align-center justify-center"
|
||||||
>
|
>
|
||||||
<VCard
|
<VCard flat :max-width="500" class="mt-12 mt-sm-0 pa-4">
|
||||||
flat
|
|
||||||
:max-width="500"
|
|
||||||
class="mt-12 mt-sm-0 pa-4"
|
|
||||||
>
|
|
||||||
<VCardText>
|
<VCardText>
|
||||||
<h4 class="text-h4 mb-1">
|
<h4 class="text-h4 mb-1">
|
||||||
Welcome to <span class="text-capitalize"> {{ themeConfig.app.title }} </span>! 👋🏻
|
Welcome to
|
||||||
|
<span class="text-capitalize"> {{ themeConfig.app.title }} </span>!
|
||||||
|
|
||||||
</h4>
|
</h4>
|
||||||
<p class="mb-0">
|
<p class="mb-0">
|
||||||
Please sign-in to your account and start the adventure
|
Please sign-in to your account and start the adventure
|
||||||
</p>
|
</p>
|
||||||
</VCardText>
|
</VCardText>
|
||||||
<VCardText>
|
<VCardText>
|
||||||
<VAlert
|
<VForm ref="refVForm" @submit.prevent="onSubmit">
|
||||||
color="primary"
|
|
||||||
variant="tonal"
|
|
||||||
>
|
|
||||||
<p class="text-sm mb-2">
|
|
||||||
Admin Email: <strong>admin@demo.com</strong> / Pass: <strong>admin</strong>
|
|
||||||
</p>
|
|
||||||
<p class="text-sm mb-0">
|
|
||||||
Client Email: <strong>client@demo.com</strong> / Pass: <strong>client</strong>
|
|
||||||
</p>
|
|
||||||
</VAlert>
|
|
||||||
</VCardText>
|
|
||||||
<VCardText>
|
|
||||||
<VForm
|
|
||||||
ref="refVForm"
|
|
||||||
@submit.prevent="onSubmit"
|
|
||||||
>
|
|
||||||
<VRow>
|
<VRow>
|
||||||
<!-- email -->
|
<!-- email -->
|
||||||
<VCol cols="12">
|
<VCol cols="12">
|
||||||
@@ -176,15 +234,16 @@ const onSubmit = () => {
|
|||||||
:type="isPasswordVisible ? 'text' : 'password'"
|
:type="isPasswordVisible ? 'text' : 'password'"
|
||||||
autocomplete="password"
|
autocomplete="password"
|
||||||
:error-messages="errors.password"
|
:error-messages="errors.password"
|
||||||
:append-inner-icon="isPasswordVisible ? 'tabler-eye-off' : 'tabler-eye'"
|
:append-inner-icon="
|
||||||
|
isPasswordVisible ? 'tabler-eye-off' : 'tabler-eye'
|
||||||
|
"
|
||||||
@click:append-inner="isPasswordVisible = !isPasswordVisible"
|
@click:append-inner="isPasswordVisible = !isPasswordVisible"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<div class="d-flex align-center flex-wrap justify-space-between my-6">
|
<div
|
||||||
<VCheckbox
|
class="d-flex align-center flex-wrap justify-space-between my-6"
|
||||||
v-model="rememberMe"
|
>
|
||||||
label="Remember me"
|
<VCheckbox v-model="rememberMe" label="Remember me" />
|
||||||
/>
|
|
||||||
<RouterLink
|
<RouterLink
|
||||||
class="text-primary ms-2 mb-1"
|
class="text-primary ms-2 mb-1"
|
||||||
:to="{ name: 'forgot-password' }"
|
:to="{ name: 'forgot-password' }"
|
||||||
@@ -193,19 +252,11 @@ const onSubmit = () => {
|
|||||||
</RouterLink>
|
</RouterLink>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<VBtn
|
<VBtn block type="submit"> Login </VBtn>
|
||||||
block
|
|
||||||
type="submit"
|
|
||||||
>
|
|
||||||
Login
|
|
||||||
</VBtn>
|
|
||||||
</VCol>
|
</VCol>
|
||||||
|
|
||||||
<!-- create account -->
|
<!-- create account -->
|
||||||
<VCol
|
<VCol cols="12" class="text-center">
|
||||||
cols="12"
|
|
||||||
class="text-center"
|
|
||||||
>
|
|
||||||
<span>New on our platform?</span>
|
<span>New on our platform?</span>
|
||||||
<RouterLink
|
<RouterLink
|
||||||
class="text-primary ms-1"
|
class="text-primary ms-1"
|
||||||
@@ -214,20 +265,14 @@ const onSubmit = () => {
|
|||||||
Create an account
|
Create an account
|
||||||
</RouterLink>
|
</RouterLink>
|
||||||
</VCol>
|
</VCol>
|
||||||
<VCol
|
<VCol cols="12" class="d-flex align-center">
|
||||||
cols="12"
|
|
||||||
class="d-flex align-center"
|
|
||||||
>
|
|
||||||
<VDivider />
|
<VDivider />
|
||||||
<span class="mx-4">or</span>
|
<span class="mx-4">or</span>
|
||||||
<VDivider />
|
<VDivider />
|
||||||
</VCol>
|
</VCol>
|
||||||
|
|
||||||
<!-- auth providers -->
|
<!-- auth providers -->
|
||||||
<VCol
|
<VCol cols="12" class="text-center">
|
||||||
cols="12"
|
|
||||||
class="text-center"
|
|
||||||
>
|
|
||||||
<AuthProvider />
|
<AuthProvider />
|
||||||
</VCol>
|
</VCol>
|
||||||
</VRow>
|
</VRow>
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ import * as demoCode from '@/views/demos/forms/tables/data-table/demoCodeDataTab
|
|||||||
:code="demoCode.cellSlot"
|
:code="demoCode.cellSlot"
|
||||||
no-padding
|
no-padding
|
||||||
>
|
>
|
||||||
<DemoDataTableCellSlot />
|
<AgGridTable />
|
||||||
</AppCardCode>
|
</AppCardCode>
|
||||||
</VCol>
|
</VCol>
|
||||||
|
|
||||||
|
|||||||
@@ -13,5 +13,13 @@ export async function loadFonts() {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
export default function () {
|
export default function () {
|
||||||
loadFonts()
|
const idle = window.requestIdleCallback || (cb => setTimeout(cb, 1500))
|
||||||
|
idle(() => {
|
||||||
|
try {
|
||||||
|
loadFonts()
|
||||||
|
} catch (e) {
|
||||||
|
// If idle loading fails for any reason, fallback after a short delay
|
||||||
|
setTimeout(() => loadFonts(), 1000)
|
||||||
|
}
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -189,7 +189,7 @@ const exportToPDF = () => {
|
|||||||
:defaultColDef="defaultColDef"
|
:defaultColDef="defaultColDef"
|
||||||
:gridOptions="gridOptions"
|
:gridOptions="gridOptions"
|
||||||
@grid-ready="onGridReady"
|
@grid-ready="onGridReady"
|
||||||
@cell-value-changed="onCellValueChanged"
|
|
||||||
/>
|
/>
|
||||||
</v-card-text>
|
</v-card-text>
|
||||||
|
|
||||||
@@ -6,6 +6,8 @@
|
|||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
<title>Vuexy - Vuejs Admin Dashboard Template</title>
|
<title>Vuexy - Vuejs Admin Dashboard Template</title>
|
||||||
<link rel="stylesheet" type="text/css" href="{{ asset('loader.css') }}" />
|
<link rel="stylesheet" type="text/css" href="{{ asset('loader.css') }}" />
|
||||||
|
<link rel="preconnect" href="https://fonts.googleapis.com" crossorigin>
|
||||||
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||||
@vite(['resources/js/main.js'])
|
@vite(['resources/js/main.js'])
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ use Illuminate\Http\Request;
|
|||||||
use Illuminate\Support\Facades\Route;
|
use Illuminate\Support\Facades\Route;
|
||||||
use App\Http\Controllers\OpenRouterController;
|
use App\Http\Controllers\OpenRouterController;
|
||||||
use App\Http\Controllers\AuthController;
|
use App\Http\Controllers\AuthController;
|
||||||
|
use App\Http\Controllers\TaskController;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|--------------------------------------------------------------------------
|
|--------------------------------------------------------------------------
|
||||||
@@ -28,3 +29,6 @@ Route::prefix('openrouter')->group(function () {
|
|||||||
Route::post('/send-message', [OpenRouterController::class, 'sendMessage']);
|
Route::post('/send-message', [OpenRouterController::class, 'sendMessage']);
|
||||||
Route::get('/models', [OpenRouterController::class, 'getModels']);
|
Route::get('/models', [OpenRouterController::class, 'getModels']);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// مسیرهای Tasks
|
||||||
|
Route::apiResource('tasks', TaskController::class);
|
||||||
|
|||||||
BIN
storage/.DS_Store
vendored
BIN
storage/.DS_Store
vendored
Binary file not shown.
BIN
tests/.DS_Store
vendored
BIN
tests/.DS_Store
vendored
Binary file not shown.
BIN
vendor/.DS_Store
vendored
BIN
vendor/.DS_Store
vendored
Binary file not shown.
Reference in New Issue
Block a user