bug fix in cost list and use expanded row
This commit is contained in:
parent
65d45e73d1
commit
a1a5b944c8
|
@ -166,179 +166,180 @@ class CostController extends AbstractController
|
||||||
|
|
||||||
#[Route('/api/cost/list/search', name: 'app_cost_list_search', methods: ['POST'])]
|
#[Route('/api/cost/list/search', name: 'app_cost_list_search', methods: ['POST'])]
|
||||||
public function searchCostList(
|
public function searchCostList(
|
||||||
Request $request,
|
Request $request,
|
||||||
Access $access,
|
Access $access,
|
||||||
EntityManagerInterface $entityManager,
|
EntityManagerInterface $entityManager,
|
||||||
Jdate $jdate
|
Jdate $jdate
|
||||||
): JsonResponse {
|
): JsonResponse {
|
||||||
$acc = $access->hasRole('cost');
|
$acc = $access->hasRole('cost');
|
||||||
if (!$acc) {
|
if (!$acc) {
|
||||||
throw $this->createAccessDeniedException();
|
throw $this->createAccessDeniedException();
|
||||||
}
|
}
|
||||||
|
|
||||||
$params = json_decode($request->getContent(), true) ?? [];
|
$params = json_decode($request->getContent(), true) ?? [];
|
||||||
|
|
||||||
// پارامترهای ورودی
|
// پارامترهای ورودی
|
||||||
$filters = $params['filters'] ?? [];
|
$filters = $params['filters'] ?? [];
|
||||||
$pagination = $params['pagination'] ?? ['page' => 1, 'limit' => 10];
|
$pagination = $params['pagination'] ?? ['page' => 1, 'limit' => 10];
|
||||||
$sort = $params['sort'] ?? ['sortBy' => 'id', 'sortDesc' => true];
|
$sort = $params['sort'] ?? ['sortBy' => 'id', 'sortDesc' => true];
|
||||||
$type = $params['type'] ?? 'cost';
|
$type = $params['type'] ?? 'cost';
|
||||||
|
|
||||||
// تنظیم پارامترهای صفحهبندی
|
// تنظیم پارامترهای صفحهبندی
|
||||||
$page = max(1, $pagination['page'] ?? 1);
|
$page = max(1, $pagination['page'] ?? 1);
|
||||||
$limit = max(1, min(100, $pagination['limit'] ?? 10));
|
$limit = max(1, min(100, $pagination['limit'] ?? 10));
|
||||||
|
|
||||||
// ساخت کوئری پایه
|
// ساخت کوئری پایه
|
||||||
$queryBuilder = $entityManager->createQueryBuilder()
|
$queryBuilder = $entityManager->createQueryBuilder()
|
||||||
->select('DISTINCT d.id, d.dateSubmit, d.date, d.type, d.code, d.des, d.amount')
|
->select('DISTINCT d.id, d.dateSubmit, d.date, d.type, d.code, d.des, d.amount')
|
||||||
->addSelect('u.fullName as submitter')
|
->addSelect('u.fullName as submitter')
|
||||||
->from('App\Entity\HesabdariDoc', 'd')
|
->from('App\Entity\HesabdariDoc', 'd')
|
||||||
->leftJoin('d.submitter', 'u')
|
->leftJoin('d.submitter', 'u')
|
||||||
->where('d.bid = :bid')
|
->where('d.bid = :bid')
|
||||||
->andWhere('d.year = :year')
|
->andWhere('d.year = :year')
|
||||||
->andWhere('d.type = :type')
|
->andWhere('d.type = :type')
|
||||||
->andWhere('d.money = :money')
|
->andWhere('d.money = :money')
|
||||||
->setParameter('bid', $acc['bid'])
|
->setParameter('bid', $acc['bid'])
|
||||||
->setParameter('year', $acc['year'])
|
->setParameter('year', $acc['year'])
|
||||||
->setParameter('type', $type)
|
->setParameter('type', $type)
|
||||||
->setParameter('money', $acc['money']);
|
->setParameter('money', $acc['money']);
|
||||||
|
|
||||||
// اعمال فیلترها
|
// اعمال فیلترها
|
||||||
if (!empty($filters)) {
|
if (!empty($filters)) {
|
||||||
// جستجوی متنی
|
// جستجوی متنی
|
||||||
if (isset($filters['search'])) {
|
if (isset($filters['search'])) {
|
||||||
$searchValue = is_array($filters['search']) ? $filters['search']['value'] : $filters['search'];
|
$searchValue = is_array($filters['search']) ? $filters['search']['value'] : $filters['search'];
|
||||||
$queryBuilder->leftJoin('d.hesabdariRows', 'r')
|
$queryBuilder->leftJoin('d.hesabdariRows', 'r')
|
||||||
->leftJoin('r.person', 'p')
|
->leftJoin('r.person', 'p')
|
||||||
->leftJoin('r.ref', 't')
|
->leftJoin('r.ref', 't')
|
||||||
->andWhere(
|
->andWhere(
|
||||||
$queryBuilder->expr()->orX(
|
$queryBuilder->expr()->orX(
|
||||||
'd.code LIKE :search',
|
'd.code LIKE :search',
|
||||||
'd.des LIKE :search',
|
'd.des LIKE :search',
|
||||||
'd.date LIKE :search',
|
'd.date LIKE :search',
|
||||||
'd.amount LIKE :search',
|
'd.amount LIKE :search',
|
||||||
'p.nikename LIKE :search',
|
'p.nikename LIKE :search',
|
||||||
't.name LIKE :search'
|
't.name LIKE :search'
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
->setParameter('search', "%{$searchValue}%");
|
->setParameter('search', "%{$searchValue}%");
|
||||||
}
|
}
|
||||||
|
|
||||||
// فیلتر زمانی
|
// فیلتر زمانی
|
||||||
if (isset($filters['timeFilter'])) {
|
if (isset($filters['timeFilter'])) {
|
||||||
$today = $jdate->jdate('Y/m/d', time());
|
$today = $jdate->jdate('Y/m/d', time());
|
||||||
switch ($filters['timeFilter']) {
|
switch ($filters['timeFilter']) {
|
||||||
case 'today':
|
case 'today':
|
||||||
$queryBuilder->andWhere('d.date = :today')
|
$queryBuilder->andWhere('d.date = :today')
|
||||||
->setParameter('today', $today);
|
->setParameter('today', $today);
|
||||||
break;
|
break;
|
||||||
case 'week':
|
case 'week':
|
||||||
$weekStart = $jdate->jdate('Y/m/d', strtotime('-6 days'));
|
$weekStart = $jdate->jdate('Y/m/d', strtotime('-6 days'));
|
||||||
$queryBuilder->andWhere('d.date BETWEEN :weekStart AND :today')
|
$queryBuilder->andWhere('d.date BETWEEN :weekStart AND :today')
|
||||||
->setParameter('weekStart', $weekStart)
|
->setParameter('weekStart', $weekStart)
|
||||||
->setParameter('today', $today);
|
->setParameter('today', $today);
|
||||||
break;
|
break;
|
||||||
case 'month':
|
case 'month':
|
||||||
$monthStart = $jdate->jdate('Y/m/01', time());
|
$monthStart = $jdate->jdate('Y/m/01', time());
|
||||||
$queryBuilder->andWhere('d.date BETWEEN :monthStart AND :today')
|
$queryBuilder->andWhere('d.date BETWEEN :monthStart AND :today')
|
||||||
->setParameter('monthStart', $monthStart)
|
->setParameter('monthStart', $monthStart)
|
||||||
->setParameter('today', $today);
|
->setParameter('today', $today);
|
||||||
break;
|
break;
|
||||||
case 'custom':
|
case 'custom':
|
||||||
if (isset($filters['dateFrom']) && isset($filters['dateTo'])) {
|
if (isset($filters['dateFrom']) && isset($filters['dateTo'])) {
|
||||||
$queryBuilder->andWhere('d.date BETWEEN :dateFrom AND :dateTo')
|
$queryBuilder->andWhere('d.date BETWEEN :dateFrom AND :dateTo')
|
||||||
->setParameter('dateFrom', $filters['dateFrom'])
|
->setParameter('dateFrom', $filters['dateFrom'])
|
||||||
->setParameter('dateTo', $filters['dateTo']);
|
->setParameter('dateTo', $filters['dateTo']);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 'all':
|
case 'all':
|
||||||
default:
|
default:
|
||||||
// بدون فیلتر زمانی اضافه
|
// بدون فیلتر زمانی اضافه
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isset($filters['amount'])) {
|
if (isset($filters['amount'])) {
|
||||||
$queryBuilder->andWhere('d.amount = :amount')
|
$queryBuilder->andWhere('d.amount = :amount')
|
||||||
->setParameter('amount', $filters['amount']);
|
->setParameter('amount', $filters['amount']);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// اعمال مرتبسازی
|
// اعمال مرتبسازی
|
||||||
$sortField = is_array($sort['sortBy']) ? ($sort['sortBy']['key'] ?? 'id') : ($sort['sortBy'] ?? 'id');
|
$sortField = is_array($sort['sortBy']) ? ($sort['sortBy']['key'] ?? 'id') : ($sort['sortBy'] ?? 'id');
|
||||||
$sortDirection = ($sort['sortDesc'] ?? true) ? 'DESC' : 'ASC';
|
$sortDirection = ($sort['sortDesc'] ?? true) ? 'DESC' : 'ASC';
|
||||||
$queryBuilder->orderBy("d.$sortField", $sortDirection);
|
$queryBuilder->orderBy("d.$sortField", $sortDirection);
|
||||||
|
|
||||||
// محاسبه تعداد کل نتایج
|
// محاسبه تعداد کل نتایج
|
||||||
$totalItemsQuery = clone $queryBuilder;
|
$totalItemsQuery = clone $queryBuilder;
|
||||||
$totalItems = $totalItemsQuery->select('COUNT(DISTINCT d.id)')
|
$totalItems = $totalItemsQuery->select('COUNT(DISTINCT d.id)')
|
||||||
->getQuery()
|
->getQuery()
|
||||||
->getSingleScalarResult();
|
->getSingleScalarResult();
|
||||||
|
|
||||||
// اعمال صفحهبندی
|
// اعمال صفحهبندی
|
||||||
$queryBuilder->setFirstResult(($page - 1) * $limit)
|
$queryBuilder->setFirstResult(($page - 1) * $limit)
|
||||||
->setMaxResults($limit);
|
->setMaxResults($limit);
|
||||||
|
|
||||||
$docs = $queryBuilder->getQuery()->getArrayResult();
|
$docs = $queryBuilder->getQuery()->getArrayResult();
|
||||||
|
|
||||||
$dataTemp = [];
|
$dataTemp = [];
|
||||||
foreach ($docs as $doc) {
|
foreach ($docs as $doc) {
|
||||||
$item = [
|
$item = [
|
||||||
'id' => $doc['id'],
|
'id' => $doc['id'],
|
||||||
'dateSubmit' => $doc['dateSubmit'],
|
'dateSubmit' => $doc['dateSubmit'],
|
||||||
'date' => $doc['date'],
|
'date' => $doc['date'],
|
||||||
'type' => $doc['type'],
|
'type' => $doc['type'],
|
||||||
'code' => $doc['code'],
|
'code' => $doc['code'],
|
||||||
'des' => $doc['des'],
|
'des' => $doc['des'],
|
||||||
'amount' => $doc['amount'],
|
'amount' => $doc['amount'],
|
||||||
'submitter' => $doc['submitter'],
|
'submitter' => $doc['submitter'],
|
||||||
];
|
];
|
||||||
|
|
||||||
// دریافت اطلاعات مرکز هزینه و مبلغ
|
// دریافت اطلاعات مرکز هزینه و مبلغ
|
||||||
$costDetails = $entityManager->createQueryBuilder()
|
$costDetails = $entityManager->createQueryBuilder()
|
||||||
->select('t.name as center_name, r.bd as amount')
|
->select('t.name as center_name, r.bd as amount, r.des as des')
|
||||||
->from('App\Entity\HesabdariRow', 'r')
|
->from('App\Entity\HesabdariRow', 'r')
|
||||||
->join('r.ref', 't')
|
->join('r.ref', 't')
|
||||||
->where('r.doc = :docId')
|
->where('r.doc = :docId')
|
||||||
->andWhere('r.bd != 0')
|
->andWhere('r.bd != 0')
|
||||||
->setParameter('docId', $doc['id'])
|
->setParameter('docId', $doc['id'])
|
||||||
->getQuery()
|
->getQuery()
|
||||||
->getResult();
|
->getResult();
|
||||||
|
|
||||||
$item['costCenters'] = array_map(function ($detail) {
|
$item['costCenters'] = array_map(function ($detail) {
|
||||||
return [
|
return [
|
||||||
'name' => $detail['center_name'],
|
'name' => $detail['center_name'],
|
||||||
'amount' => (int) $detail['amount'],
|
'amount' => (int) $detail['amount'],
|
||||||
];
|
'des' => $detail['des'],
|
||||||
}, $costDetails);
|
];
|
||||||
|
}, $costDetails);
|
||||||
// دریافت اطلاعات شخص مرتبط
|
|
||||||
$personInfo = $entityManager->createQueryBuilder()
|
// دریافت اطلاعات شخص مرتبط
|
||||||
->select('p.id, p.nikename, p.code')
|
$personInfo = $entityManager->createQueryBuilder()
|
||||||
->from('App\Entity\HesabdariRow', 'r')
|
->select('p.id, p.nikename, p.code')
|
||||||
->join('r.person', 'p')
|
->from('App\Entity\HesabdariRow', 'r')
|
||||||
->where('r.doc = :docId')
|
->join('r.person', 'p')
|
||||||
->andWhere('r.person IS NOT NULL')
|
->where('r.doc = :docId')
|
||||||
->setParameter('docId', $doc['id'])
|
->andWhere('r.person IS NOT NULL')
|
||||||
->setMaxResults(1 )
|
->setParameter('docId', $doc['id'])
|
||||||
->getQuery()
|
->setMaxResults(1)
|
||||||
->getOneOrNullResult();
|
->getQuery()
|
||||||
|
->getOneOrNullResult();
|
||||||
$item['person'] = $personInfo ? [
|
|
||||||
'id' => $personInfo['id'],
|
$item['person'] = $personInfo ? [
|
||||||
'nikename' => $personInfo['nikename'],
|
'id' => $personInfo['id'],
|
||||||
'code' => $personInfo['code'],
|
'nikename' => $personInfo['nikename'],
|
||||||
] : null;
|
'code' => $personInfo['code'],
|
||||||
|
] : null;
|
||||||
$dataTemp[] = $item;
|
|
||||||
}
|
$dataTemp[] = $item;
|
||||||
|
}
|
||||||
return $this->json([
|
|
||||||
'items' => $dataTemp,
|
return $this->json([
|
||||||
'total' => (int) $totalItems,
|
'items' => $dataTemp,
|
||||||
'page' => $page,
|
'total' => (int) $totalItems,
|
||||||
'limit' => $limit,
|
'page' => $page,
|
||||||
]);
|
'limit' => $limit,
|
||||||
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[Route('/api/costs/list/print', name: 'app_costs_list_print')]
|
#[Route('/api/costs/list/print', name: 'app_costs_list_print')]
|
||||||
|
|
|
@ -267,6 +267,8 @@ const fa_lang = {
|
||||||
count: "تعداد",
|
count: "تعداد",
|
||||||
},
|
},
|
||||||
dialog: {
|
dialog: {
|
||||||
|
acc_price: 'مبلغ',
|
||||||
|
des: 'شرح',
|
||||||
warning: 'هشدار',
|
warning: 'هشدار',
|
||||||
column_settings: 'ستونهای جدول',
|
column_settings: 'ستونهای جدول',
|
||||||
all: 'همه موارد',
|
all: 'همه موارد',
|
||||||
|
|
|
@ -103,8 +103,8 @@
|
||||||
</v-text-field>
|
</v-text-field>
|
||||||
|
|
||||||
<v-data-table-server :headers="headers" :items="items" :loading="loading" :items-length="totalItems"
|
<v-data-table-server :headers="headers" :items="items" :loading="loading" :items-length="totalItems"
|
||||||
v-model:options="serverOptions" @update:options="fetchData" item-value="code" class="elevation-1 data-table-wrapper"
|
v-model:options="serverOptions" v-model:expanded="expanded" @update:options="fetchData" item-value="code"
|
||||||
:header-props="{ class: 'custom-header' }">
|
class="elevation-1 data-table-wrapper" :header-props="{ class: 'custom-header' }" show-expand>
|
||||||
<template #header.checkbox>
|
<template #header.checkbox>
|
||||||
<v-checkbox :model-value="isAllSelected" @change="toggleSelectAll" hide-details density="compact" />
|
<v-checkbox :model-value="isAllSelected" @change="toggleSelectAll" hide-details density="compact" />
|
||||||
</template>
|
</template>
|
||||||
|
@ -143,25 +143,66 @@
|
||||||
{{ $filters.formatNumber(item.amount) }}
|
{{ $filters.formatNumber(item.amount) }}
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<template #item.costCenter="{ item }">
|
<template #expanded-row="{ columns, item }">
|
||||||
{{item.costCenters.map(center => center.name).join(', ') || '—'}}
|
<tr>
|
||||||
|
<td :colspan="columns.length" class="expanded-row">
|
||||||
|
<v-container>
|
||||||
|
<v-row>
|
||||||
|
<v-col cols="12">
|
||||||
|
<h4>مراکز هزینه</h4>
|
||||||
|
<v-list dense>
|
||||||
|
<v-list-item v-for="(center, index) in item.costCenters" :key="index">
|
||||||
|
<v-list-item-title>
|
||||||
|
{{ center.name }}
|
||||||
|
{{ $t('dialog.acc_price') }} : {{ this.$filters.formatNumber(center.amount) }}
|
||||||
|
{{ $t('dialog.des') }} : {{ center.des }}
|
||||||
|
</v-list-item-title>
|
||||||
|
</v-list-item>
|
||||||
|
<v-list-item v-if="!item.costCenters || item.costCenters.length === 0">
|
||||||
|
<v-list-item-title>—</v-list-item-title>
|
||||||
|
</v-list-item>
|
||||||
|
</v-list>
|
||||||
|
</v-col>
|
||||||
|
</v-row>
|
||||||
|
</v-container>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
</template>
|
</template>
|
||||||
</v-data-table-server>
|
</v-data-table-server>
|
||||||
|
<v-container fluid class="pa-0 ma-0 my-3">
|
||||||
|
<v-card
|
||||||
|
class="rounded border-start border-success border-3"
|
||||||
|
elevation="2"
|
||||||
|
link
|
||||||
|
href="javascript:void(0)"
|
||||||
|
>
|
||||||
|
<v-card-text class="bg-body-light pa-4">
|
||||||
|
<v-row>
|
||||||
|
<v-col cols="12" sm="6">
|
||||||
|
<span class="text-dark">
|
||||||
|
<v-icon icon="mdi-format-list-bulleted" size="small" class="me-1" />
|
||||||
|
مبلغ کل:
|
||||||
|
</span>
|
||||||
|
<span class="text-primary">
|
||||||
|
{{ $filters.formatNumber(totalCost) }}
|
||||||
|
{{ $filters.getActiveMoney().shortName }}
|
||||||
|
</span>
|
||||||
|
</v-col>
|
||||||
|
|
||||||
<v-row class="mt-4 pa-4">
|
<v-col cols="12" sm="6">
|
||||||
<v-col cols="6">
|
<span class="text-dark">
|
||||||
<v-card flat>
|
<v-icon icon="mdi-format-list-checks" size="small" class="me-1" />
|
||||||
<v-card-title>جمع کل هزینهها</v-card-title>
|
جمع مبلغ موارد انتخابی:
|
||||||
<v-card-text>{{ $filters.formatNumber(totalCost) }}</v-card-text>
|
</span>
|
||||||
</v-card>
|
<span class="text-primary">
|
||||||
</v-col>
|
{{ $filters.formatNumber(selectedCost) }}
|
||||||
<v-col cols="6">
|
{{ $filters.getActiveMoney().shortName }}
|
||||||
<v-card flat>
|
</span>
|
||||||
<v-card-title>جمع موارد انتخابشده</v-card-title>
|
</v-col>
|
||||||
<v-card-text>{{ $filters.formatNumber(selectedCost) }}</v-card-text>
|
</v-row>
|
||||||
</v-card>
|
</v-card-text>
|
||||||
</v-col>
|
</v-card>
|
||||||
</v-row>
|
</v-container>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
|
@ -182,8 +223,9 @@ const selectedItems = ref(new Set());
|
||||||
const totalItems = ref(0);
|
const totalItems = ref(0);
|
||||||
const searchQuery = ref('');
|
const searchQuery = ref('');
|
||||||
const timeFilter = ref('all');
|
const timeFilter = ref('all');
|
||||||
|
const expanded = ref([]); // برای مدیریت ردیفهای گسترشیافته
|
||||||
|
|
||||||
// فیلترهای زمانی (بدون بازه دلخواه)
|
// فیلترهای زمانی
|
||||||
const timeFilters = ref([
|
const timeFilters = ref([
|
||||||
{ label: 'امروز', value: 'today', checked: false },
|
{ label: 'امروز', value: 'today', checked: false },
|
||||||
{ label: 'این هفته', value: 'week', checked: false },
|
{ label: 'این هفته', value: 'week', checked: false },
|
||||||
|
@ -191,13 +233,12 @@ const timeFilters = ref([
|
||||||
{ label: 'همه', value: 'all', checked: true },
|
{ label: 'همه', value: 'all', checked: true },
|
||||||
]);
|
]);
|
||||||
|
|
||||||
// تعریف ستونهای جدول
|
// تعریف ستونهای جدول (ستون costCenter از هدرها حذف شده)
|
||||||
const headers = ref([
|
const headers = ref([
|
||||||
{ title: '', key: 'checkbox', sortable: false, width: '50', align: 'center' },
|
{ title: '', key: 'checkbox', sortable: false, width: '50', align: 'center' },
|
||||||
{ title: 'ردیف', key: 'index', align: 'center', sortable: false, width: '70' },
|
{ title: 'ردیف', key: 'index', align: 'center', sortable: false, width: '70' },
|
||||||
{ title: 'عملیات', key: 'operation', align: 'center', sortable: false, width: '100' },
|
{ title: 'عملیات', key: 'operation', align: 'center', sortable: false, width: '100' },
|
||||||
{ title: 'کد', key: 'code', align: 'center', sortable: true },
|
{ title: 'کد', key: 'code', align: 'center', sortable: true },
|
||||||
{ title: 'مرکز هزینه', key: 'costCenter', align: 'center', sortable: false },
|
|
||||||
{ title: 'مبلغ', key: 'amount', align: 'center', sortable: true },
|
{ title: 'مبلغ', key: 'amount', align: 'center', sortable: true },
|
||||||
{ title: 'تاریخ', key: 'date', align: 'center', sortable: true },
|
{ title: 'تاریخ', key: 'date', align: 'center', sortable: true },
|
||||||
{ title: 'شرح', key: 'des', align: 'center', sortable: true },
|
{ title: 'شرح', key: 'des', align: 'center', sortable: true },
|
||||||
|
@ -512,4 +553,9 @@ onMounted(() => {
|
||||||
margin-right: 0;
|
margin-right: 0;
|
||||||
margin-left: 0;
|
margin-left: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.expanded-row {
|
||||||
|
background-color: #f5f5f5;
|
||||||
|
padding: 10px;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
|
@ -20,14 +20,14 @@
|
||||||
<input v-model="searchValue" class="form-control" type="text" placeholder="جست و جو ...">
|
<input v-model="searchValue" class="form-control" type="text" placeholder="جست و جو ...">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<EasyDataTable table-class-name="customize-table" v-model:items-selected="itemsSelected" show-index alternating :search-value="searchValue"
|
<EasyDataTable table-class-name="customize-table" v-model:items-selected="itemsSelected" show-index
|
||||||
:headers="headers" :items="items" theme-color="#1d90ff" header-text-direction="center"
|
alternating :search-value="searchValue" :headers="headers" :items="items" theme-color="#1d90ff"
|
||||||
body-text-direction="center" rowsPerPageMessage="تعداد سطر" emptyMessage="اطلاعاتی برای نمایش وجود ندارد"
|
header-text-direction="center" body-text-direction="center" rowsPerPageMessage="تعداد سطر"
|
||||||
rowsOfPageSeparatorMessage="از" :loading="loading">
|
emptyMessage="اطلاعاتی برای نمایش وجود ندارد" rowsOfPageSeparatorMessage="از" :loading="loading">
|
||||||
<template #item-operation="{ code }">
|
<template #item-operation="{ code }">
|
||||||
<div class="dropdown-center">
|
<div class="dropdown-center">
|
||||||
<button aria-expanded="false" aria-haspopup="true" class="btn btn-sm btn-link"
|
<button aria-expanded="false" aria-haspopup="true" class="btn btn-sm btn-link" data-bs-toggle="dropdown"
|
||||||
data-bs-toggle="dropdown" id="dropdown-align-center-alt-primary" type="button">
|
id="dropdown-align-center-alt-primary" type="button">
|
||||||
<i class="fa-solid fa-ellipsis"></i>
|
<i class="fa-solid fa-ellipsis"></i>
|
||||||
</button>
|
</button>
|
||||||
<div aria-labelledby="dropdown-align-center-outline-primary" class="dropdown-menu dropdown-menu-end"
|
<div aria-labelledby="dropdown-align-center-outline-primary" class="dropdown-menu dropdown-menu-end"
|
||||||
|
@ -52,36 +52,35 @@
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
</EasyDataTable>
|
</EasyDataTable>
|
||||||
<div class="container-fluid p-0 mx-0 my-3">
|
<v-container fluid class="pa-0 ma-0 my-3">
|
||||||
<a class="block block-rounded block-link-shadow border-start border-success border-3"
|
<v-card class="rounded border-start border-success border-3" elevation="2" link href="javascript:void(0)">
|
||||||
href="javascript:void(0)">
|
<v-card-text class="bg-body-light pa-4">
|
||||||
<div class="block-content block-content-full block-content-sm bg-body-light">
|
<v-row>
|
||||||
<div class="row">
|
<v-col cols="12" sm="6">
|
||||||
<div class="col-sm-6 com-md-6">
|
|
||||||
<span class="text-dark">
|
<span class="text-dark">
|
||||||
<i class="fa fa-list-dots"></i>
|
<v-icon icon="mdi-format-list-bulleted" size="small" class="me-1" />
|
||||||
مبلغ کل:
|
مبلغ کل:
|
||||||
</span>
|
</span>
|
||||||
<span class="text-primary">
|
<span class="text-primary">
|
||||||
{{ $filters.formatNumber(this.sumTotal) }}
|
{{ $filters.formatNumber(sumTotal) }}
|
||||||
{{ $filters.getActiveMoney().shortName }}
|
{{ $filters.getActiveMoney().shortName }}
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</v-col>
|
||||||
|
|
||||||
<div class="col-sm-6 com-md-6">
|
<v-col cols="12" sm="6">
|
||||||
<span class="text-dark">
|
<span class="text-dark">
|
||||||
<i class="fa fa-list-check"></i>
|
<v-icon icon="mdi-format-list-checks" size="small" class="me-1" />
|
||||||
جمع مبلغ موارد انتخابی:
|
جمع مبلغ موارد انتخابی:
|
||||||
</span>
|
</span>
|
||||||
<span class="text-primary">
|
<span class="text-primary">
|
||||||
{{ $filters.formatNumber(this.sumSelected) }}
|
{{ $filters.formatNumber(sumSelected) }}
|
||||||
{{ $filters.getActiveMoney().shortName }}
|
{{ $filters.getActiveMoney().shortName }}
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</v-col>
|
||||||
</div>
|
</v-row>
|
||||||
</div>
|
</v-card-text>
|
||||||
</a>
|
</v-card>
|
||||||
</div>
|
</v-container>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
Loading…
Reference in a new issue