mirror of
https://github.com/bigcapitalhq/bigcapital.git
synced 2026-02-18 22:00:31 +00:00
feat: item payment transactions.
This commit is contained in:
8
src/common/itemPaymentTranactionsOption.js
Normal file
8
src/common/itemPaymentTranactionsOption.js
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
import intl from 'react-intl-universal';
|
||||||
|
|
||||||
|
export default [
|
||||||
|
{ name: 'invoices', label: intl.get('invoices') },
|
||||||
|
{ name: 'estimates', label: intl.get('estimates') },
|
||||||
|
{ name: 'receipts', label: intl.get('receipts') },
|
||||||
|
{ name: 'bills', label: intl.get('bills') },
|
||||||
|
];
|
||||||
@@ -1,10 +1,7 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
|
|
||||||
|
import ItemDetailTab from './ItemDetailTab';
|
||||||
import ItemDetailActionsBar from './ItemDetailActionsBar';
|
import ItemDetailActionsBar from './ItemDetailActionsBar';
|
||||||
import ItemDetailHeader from './ItemDetailHeader';
|
|
||||||
import { ItemPaymentTransactions } from './ItemPaymentTransactions';
|
|
||||||
|
|
||||||
import { Card } from 'components';
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Item detail.
|
* Item detail.
|
||||||
@@ -13,10 +10,7 @@ export default function ItemDetail() {
|
|||||||
return (
|
return (
|
||||||
<div className="item-drawer">
|
<div className="item-drawer">
|
||||||
<ItemDetailActionsBar />
|
<ItemDetailActionsBar />
|
||||||
<ItemPaymentTransactions />
|
<ItemDetailTab />
|
||||||
<Card>
|
|
||||||
<ItemDetailHeader />
|
|
||||||
</Card>
|
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,6 +8,9 @@ const ItemDetailDrawerContext = React.createContext();
|
|||||||
* Item detail provider
|
* Item detail provider
|
||||||
*/
|
*/
|
||||||
function ItemDetailDrawerProvider({ itemId, ...props }) {
|
function ItemDetailDrawerProvider({ itemId, ...props }) {
|
||||||
|
// transaction type payload.
|
||||||
|
const [value, setValue] = React.useState('invoices');
|
||||||
|
|
||||||
// Fetches the given item detail.
|
// Fetches the given item detail.
|
||||||
const { isLoading: isItemLoading, data: item } = useItem(itemId, {
|
const { isLoading: isItemLoading, data: item } = useItem(itemId, {
|
||||||
enabled: !!itemId,
|
enabled: !!itemId,
|
||||||
@@ -18,6 +21,8 @@ function ItemDetailDrawerProvider({ itemId, ...props }) {
|
|||||||
item,
|
item,
|
||||||
itemId,
|
itemId,
|
||||||
isItemLoading,
|
isItemLoading,
|
||||||
|
value,
|
||||||
|
setValue,
|
||||||
};
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import intl from 'react-intl-universal';
|
|||||||
import { defaultTo } from 'lodash';
|
import { defaultTo } from 'lodash';
|
||||||
import classNames from 'classnames';
|
import classNames from 'classnames';
|
||||||
|
|
||||||
import { If, DetailsMenu, DetailItem } from 'components';
|
import { If, DetailsMenu, DetailItem, Card } from 'components';
|
||||||
import { useItemDetailDrawerContext } from './ItemDetailDrawerProvider';
|
import { useItemDetailDrawerContext } from './ItemDetailDrawerProvider';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -13,70 +13,72 @@ export default function ItemDetailHeader() {
|
|||||||
const { item } = useItemDetailDrawerContext();
|
const { item } = useItemDetailDrawerContext();
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div class="item-drawer__content">
|
<Card>
|
||||||
<DetailsMenu direction={'vertical'}>
|
<div class="item-drawer__content">
|
||||||
<DetailItem
|
<DetailsMenu direction={'vertical'}>
|
||||||
name={'name'}
|
|
||||||
label={intl.get('item_name')}
|
|
||||||
children={item.name}
|
|
||||||
/>
|
|
||||||
<DetailItem
|
|
||||||
label={intl.get('sell_price')}
|
|
||||||
children={item.sell_price_formatted}
|
|
||||||
align={'right'}
|
|
||||||
/>
|
|
||||||
<DetailItem
|
|
||||||
label={intl.get('cost_price')}
|
|
||||||
children={item.cost_price_formatted}
|
|
||||||
align={'right'}
|
|
||||||
/>
|
|
||||||
</DetailsMenu>
|
|
||||||
|
|
||||||
<DetailsMenu direction={'horizantal'}>
|
|
||||||
<DetailItem label={intl.get('item_type')} children={item.type} />
|
|
||||||
<DetailItem
|
|
||||||
label={intl.get('item_code')}
|
|
||||||
children={defaultTo(item.code, '-')}
|
|
||||||
/>
|
|
||||||
<If condition={item.type === 'inventory'}>
|
|
||||||
<DetailItem name={'quantity'} label={intl.get('quantity_on_hand')}>
|
|
||||||
<span
|
|
||||||
className={classNames({
|
|
||||||
mines: item.quantity_on_hand <= 0,
|
|
||||||
plus: item.quantity_on_hand > 0,
|
|
||||||
})}
|
|
||||||
>
|
|
||||||
{defaultTo(item.quantity_on_hand, '-')}
|
|
||||||
</span>
|
|
||||||
</DetailItem>
|
|
||||||
</If>
|
|
||||||
<DetailItem
|
|
||||||
label={intl.get('category_name')}
|
|
||||||
children={defaultTo(item.category?.name, '-')}
|
|
||||||
/>
|
|
||||||
<DetailItem
|
|
||||||
label={intl.get('sell_account_id')}
|
|
||||||
children={defaultTo(item?.sell_account?.name, '-')}
|
|
||||||
/>
|
|
||||||
<DetailItem
|
|
||||||
label={intl.get('cost_account_id')}
|
|
||||||
children={defaultTo(item.cost_account?.name, '-')}
|
|
||||||
/>
|
|
||||||
<If condition={item.type === 'inventory'}>
|
|
||||||
<DetailItem
|
<DetailItem
|
||||||
label={intl.get('inventory_account')}
|
name={'name'}
|
||||||
children={defaultTo(item?.inventory_account?.name, '-')}
|
label={intl.get('item_name')}
|
||||||
|
children={item.name}
|
||||||
/>
|
/>
|
||||||
</If>
|
<DetailItem
|
||||||
<DetailItem
|
label={intl.get('sell_price')}
|
||||||
label={intl.get('item.sell_description')}
|
children={item.sell_price_formatted}
|
||||||
children={defaultTo(item.sell_description, '-')}
|
align={'right'}
|
||||||
/>
|
/>
|
||||||
<DetailItem
|
<DetailItem
|
||||||
label={intl.get('item.purchase_description')}
|
label={intl.get('cost_price')}
|
||||||
children={defaultTo(item.cost_description, '-')}
|
children={item.cost_price_formatted}
|
||||||
/>
|
align={'right'}
|
||||||
</DetailsMenu>
|
/>
|
||||||
</div>
|
</DetailsMenu>
|
||||||
|
|
||||||
|
<DetailsMenu direction={'horizantal'}>
|
||||||
|
<DetailItem label={intl.get('item_type')} children={item.type} />
|
||||||
|
<DetailItem
|
||||||
|
label={intl.get('item_code')}
|
||||||
|
children={defaultTo(item.code, '-')}
|
||||||
|
/>
|
||||||
|
<If condition={item.type === 'inventory'}>
|
||||||
|
<DetailItem name={'quantity'} label={intl.get('quantity_on_hand')}>
|
||||||
|
<span
|
||||||
|
className={classNames({
|
||||||
|
mines: item.quantity_on_hand <= 0,
|
||||||
|
plus: item.quantity_on_hand > 0,
|
||||||
|
})}
|
||||||
|
>
|
||||||
|
{defaultTo(item.quantity_on_hand, '-')}
|
||||||
|
</span>
|
||||||
|
</DetailItem>
|
||||||
|
</If>
|
||||||
|
<DetailItem
|
||||||
|
label={intl.get('category_name')}
|
||||||
|
children={defaultTo(item.category?.name, '-')}
|
||||||
|
/>
|
||||||
|
<DetailItem
|
||||||
|
label={intl.get('sell_account_id')}
|
||||||
|
children={defaultTo(item?.sell_account?.name, '-')}
|
||||||
|
/>
|
||||||
|
<DetailItem
|
||||||
|
label={intl.get('cost_account_id')}
|
||||||
|
children={defaultTo(item.cost_account?.name, '-')}
|
||||||
|
/>
|
||||||
|
<If condition={item.type === 'inventory'}>
|
||||||
|
<DetailItem
|
||||||
|
label={intl.get('inventory_account')}
|
||||||
|
children={defaultTo(item?.inventory_account?.name, '-')}
|
||||||
|
/>
|
||||||
|
</If>
|
||||||
|
<DetailItem
|
||||||
|
label={intl.get('item.sell_description')}
|
||||||
|
children={defaultTo(item.sell_description, '-')}
|
||||||
|
/>
|
||||||
|
<DetailItem
|
||||||
|
label={intl.get('item.purchase_description')}
|
||||||
|
children={defaultTo(item.cost_description, '-')}
|
||||||
|
/>
|
||||||
|
</DetailsMenu>
|
||||||
|
</div>
|
||||||
|
</Card>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
23
src/containers/Drawers/ItemDetailDrawer/ItemDetailTab.js
Normal file
23
src/containers/Drawers/ItemDetailDrawer/ItemDetailTab.js
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
import React from 'react';
|
||||||
|
import { Tab } from '@blueprintjs/core';
|
||||||
|
import { DrawerMainTabs, FormattedMessage as T } from 'components';
|
||||||
|
import { ItemPaymentTransactions } from './ItemPaymentTransactions';
|
||||||
|
import ItemDetailHeader from './ItemDetailHeader';
|
||||||
|
|
||||||
|
|
||||||
|
export default function ItemDetailTab() {
|
||||||
|
return (
|
||||||
|
<DrawerMainTabs renderActiveTabPanelOnly={true}>
|
||||||
|
<Tab
|
||||||
|
id={'overview'}
|
||||||
|
title={<T id={'overview'} />}
|
||||||
|
panel={<ItemDetailHeader />}
|
||||||
|
/>
|
||||||
|
<Tab
|
||||||
|
id={'transactions'}
|
||||||
|
title={<T id={'transactions'} />}
|
||||||
|
panel={<ItemPaymentTransactions />}
|
||||||
|
/>
|
||||||
|
</DrawerMainTabs>
|
||||||
|
);
|
||||||
|
}
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { DataTable, Card } from '../../../../components';
|
import { DataTable } from '../../../../components';
|
||||||
import { useItemDetailDrawerContext } from '../ItemDetailDrawerProvider';
|
import { useItemDetailDrawerContext } from '../ItemDetailDrawerProvider';
|
||||||
import { useItemAssociatedBillTransactions } from 'hooks/query';
|
import { useItemAssociatedBillTransactions } from 'hooks/query';
|
||||||
import { useBillTransactionsColumns } from './components';
|
import { useBillTransactionsColumns } from './components';
|
||||||
@@ -22,16 +22,12 @@ export default function BillPaymentTransactions() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="item-drawer__table">
|
<DataTable
|
||||||
<Card>
|
columns={columns}
|
||||||
<DataTable
|
data={paymentTransactions}
|
||||||
columns={columns}
|
loading={isBillTransactionsLoading}
|
||||||
data={paymentTransactions}
|
headerLoading={isBillTransactionsLoading}
|
||||||
loading={isBillTransactionsLoading}
|
progressBarLoading={isBillTransactionFetching}
|
||||||
headerLoading={isBillTransactionsLoading}
|
/>
|
||||||
progressBarLoading={isBillTransactionFetching}
|
|
||||||
/>
|
|
||||||
</Card>
|
|
||||||
</div>
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { DataTable, Card } from '../../../../components';
|
import { DataTable } from '../../../../components';
|
||||||
import { useItemDetailDrawerContext } from '../ItemDetailDrawerProvider';
|
import { useItemDetailDrawerContext } from '../ItemDetailDrawerProvider';
|
||||||
import { useItemAssociatedEstimateTransactions } from 'hooks/query';
|
import { useItemAssociatedEstimateTransactions } from 'hooks/query';
|
||||||
import { useEstimateTransactionsColumns } from './components';
|
import { useEstimateTransactionsColumns } from './components';
|
||||||
@@ -22,16 +22,12 @@ export default function EstimatePaymentTransactions() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="item-drawer__table">
|
<DataTable
|
||||||
<Card>
|
columns={columns}
|
||||||
<DataTable
|
data={paymentTransactions}
|
||||||
columns={columns}
|
loading={isEstimateTransactionsLoading}
|
||||||
data={paymentTransactions}
|
headerLoading={isEstimateTransactionsLoading}
|
||||||
loading={isEstimateTransactionsLoading}
|
progressBarLoading={isEstimateTransactionFetching}
|
||||||
headerLoading={isEstimateTransactionsLoading}
|
/>
|
||||||
progressBarLoading={isEstimateTransactionFetching}
|
|
||||||
/>
|
|
||||||
</Card>
|
|
||||||
</div>
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { DataTable, Card } from '../../../../components';
|
import { DataTable } from '../../../../components';
|
||||||
import { useItemAssociatedInvoiceTransactions } from 'hooks/query';
|
import { useItemAssociatedInvoiceTransactions } from 'hooks/query';
|
||||||
import { useItemDetailDrawerContext } from '../ItemDetailDrawerProvider';
|
import { useItemDetailDrawerContext } from '../ItemDetailDrawerProvider';
|
||||||
import { useInvoicePaymentTransactionsColumns } from './components';
|
import { useInvoicePaymentTransactionsColumns } from './components';
|
||||||
@@ -22,16 +22,12 @@ export default function InvoicePaymentTransactionsTable() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="item-drawer__table">
|
<DataTable
|
||||||
<Card>
|
columns={columns}
|
||||||
<DataTable
|
data={paymentTransactions}
|
||||||
columns={columns}
|
loading={isInvoiceTransactionsLoading}
|
||||||
data={paymentTransactions}
|
headerLoading={isInvoiceTransactionsLoading}
|
||||||
loading={isInvoiceTransactionsLoading}
|
progressBarLoading={isInvoiceTransactionFetching}
|
||||||
headerLoading={isInvoiceTransactionsLoading}
|
/>
|
||||||
progressBarLoading={isInvoiceTransactionFetching}
|
|
||||||
/>
|
|
||||||
</Card>
|
|
||||||
</div>
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,21 @@
|
|||||||
|
import React from 'react';
|
||||||
|
import InvoicePaymentTransactionsTable from './InvoicePaymentTransactionsDataTable';
|
||||||
|
import EstimatePaymentTransactionsTable from './EstimatePaymentTransactionsDataTable';
|
||||||
|
import ReceiptPaymentTransactionsTable from './ReceiptPaymentTransactionsDataTable';
|
||||||
|
import BillPaymentTransactionsTable from './BillPaymentTransactionsDataTable';
|
||||||
|
|
||||||
|
export default function ItemPaymentTransactionsContent({ tansactionType }) {
|
||||||
|
const handleType = () => {
|
||||||
|
switch (tansactionType) {
|
||||||
|
case 'invoices':
|
||||||
|
return <InvoicePaymentTransactionsTable />;
|
||||||
|
case 'estimates':
|
||||||
|
return <EstimatePaymentTransactionsTable />;
|
||||||
|
case 'receipts':
|
||||||
|
return <ReceiptPaymentTransactionsTable />;
|
||||||
|
case 'bills':
|
||||||
|
return <BillPaymentTransactionsTable />;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
return handleType();
|
||||||
|
}
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { DataTable, Card } from '../../../../components';
|
import { DataTable } from '../../../../components';
|
||||||
import { useItemDetailDrawerContext } from '../ItemDetailDrawerProvider';
|
import { useItemDetailDrawerContext } from '../ItemDetailDrawerProvider';
|
||||||
import { useItemAssociatedReceiptTransactions } from 'hooks/query';
|
import { useItemAssociatedReceiptTransactions } from 'hooks/query';
|
||||||
import { useReceiptTransactionsColumns } from './components';
|
import { useReceiptTransactionsColumns } from './components';
|
||||||
@@ -22,16 +22,12 @@ export default function ReceiptPaymentTransactions() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="item-drawer__table">
|
<DataTable
|
||||||
<Card>
|
columns={columns}
|
||||||
<DataTable
|
data={paymentTransactions}
|
||||||
columns={columns}
|
loading={isReceiptTransactionsLoading}
|
||||||
data={paymentTransactions}
|
headerLoading={isReceiptTransactionsLoading}
|
||||||
loading={isReceiptTransactionsLoading}
|
progressBarLoading={isReceiptTransactionFetching}
|
||||||
headerLoading={isReceiptTransactionsLoading}
|
/>
|
||||||
progressBarLoading={isReceiptTransactionFetching}
|
|
||||||
/>
|
|
||||||
</Card>
|
|
||||||
</div>
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,34 +1,30 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { Tab } from '@blueprintjs/core';
|
import styled from 'styled-components';
|
||||||
import { DrawerMainTabs, FormattedMessage as T } from 'components';
|
import { Card, FormattedMessage as T } from 'components';
|
||||||
import InvoicePaymentTransactionsTable from './InvoicePaymentTransactionsDataTable';
|
import { ItemManuTransaction } from './utils';
|
||||||
import EstimatePaymentTransactionsTable from './EstimatePaymentTransactionsDataTable';
|
import { useItemDetailDrawerContext } from '../ItemDetailDrawerProvider';
|
||||||
import ReceiptPaymentTransactionsTable from './ReceiptPaymentTransactionsDataTable';
|
import ItemPaymentTransactionContent from './ItemPaymentTransactionContent';
|
||||||
import BillPaymentTransactionsTable from './BillPaymentTransactionsDataTable';
|
|
||||||
|
|
||||||
export const ItemPaymentTransactions = () => {
|
export const ItemPaymentTransactions = () => {
|
||||||
|
const { value } = useItemDetailDrawerContext();
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<DrawerMainTabs renderActiveTabPanelOnly={true}>
|
<Card>
|
||||||
<Tab
|
<ItemManuTransactions>
|
||||||
id={'invoice'}
|
<T id={'item.drawer_transactions_by'} />
|
||||||
title={<T id={'invoice'} />}
|
<ItemManuTransaction />
|
||||||
panel={<InvoicePaymentTransactionsTable />}
|
</ItemManuTransactions>
|
||||||
/>
|
<ItemPaymentTransactionContent tansactionType={value} />
|
||||||
<Tab
|
</Card>
|
||||||
id={'estiamte'}
|
|
||||||
title={<T id={'estimate_'} />}
|
|
||||||
panel={<EstimatePaymentTransactionsTable />}
|
|
||||||
/>
|
|
||||||
<Tab
|
|
||||||
id={'receipt'}
|
|
||||||
title={<T id={'receipt_'} />}
|
|
||||||
panel={<ReceiptPaymentTransactionsTable />}
|
|
||||||
/>
|
|
||||||
<Tab
|
|
||||||
id={'bill'}
|
|
||||||
title={'Bill'}
|
|
||||||
panel={<BillPaymentTransactionsTable />}
|
|
||||||
/>
|
|
||||||
</DrawerMainTabs>
|
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const ItemManuTransactions = styled.div`
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
color: #727983;
|
||||||
|
.bp3-button {
|
||||||
|
padding-left: 6px;
|
||||||
|
font-weight: 700;
|
||||||
|
}
|
||||||
|
`;
|
||||||
|
|||||||
@@ -0,0 +1,38 @@
|
|||||||
|
import React from 'react';
|
||||||
|
import {
|
||||||
|
Button,
|
||||||
|
MenuItem,
|
||||||
|
Menu,
|
||||||
|
Popover,
|
||||||
|
PopoverInteractionKind,
|
||||||
|
Position,
|
||||||
|
} from '@blueprintjs/core';
|
||||||
|
import { FormattedMessage as T } from 'components';
|
||||||
|
import { useItemDetailDrawerContext } from '../ItemDetailDrawerProvider';
|
||||||
|
import transactions from '../../../../common/itemPaymentTranactionsOption';
|
||||||
|
|
||||||
|
export const ItemManuTransaction = () => {
|
||||||
|
const { value, setValue } = useItemDetailDrawerContext();
|
||||||
|
|
||||||
|
// const handleClickItem = (item) => {
|
||||||
|
// onChange && onChange(item);
|
||||||
|
// };
|
||||||
|
|
||||||
|
const content = transactions.map(({ name, label }) => (
|
||||||
|
<MenuItem onClick={() => setValue(name)} text={label} />
|
||||||
|
));
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Popover
|
||||||
|
minimal={true}
|
||||||
|
interactionKind={PopoverInteractionKind.CLICK}
|
||||||
|
position={Position.BOTTOM_LEFT}
|
||||||
|
modifiers={{
|
||||||
|
offset: { offset: '0, 4' },
|
||||||
|
}}
|
||||||
|
content={<Menu>{content}</Menu>}
|
||||||
|
>
|
||||||
|
<Button minimal={true} text={<T id={value} />} rightIcon={'caret-down'} />
|
||||||
|
</Popover>
|
||||||
|
);
|
||||||
|
};
|
||||||
@@ -38,28 +38,24 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
&__table {
|
|
||||||
.card {
|
|
||||||
padding: 12px 15px !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.table {
|
.table {
|
||||||
.tbody,
|
margin-top: 8px;
|
||||||
.thead {
|
.tbody,
|
||||||
.tr .th {
|
.thead {
|
||||||
padding: 8px 8px;
|
.tr .th {
|
||||||
background-color: #fff;
|
padding: 8px 8px;
|
||||||
font-size: 14px;
|
background-color: #fff;
|
||||||
border-bottom: 1px solid #000;
|
font-size: 14px;
|
||||||
border-top: 1px solid #000;
|
border-bottom: 1px solid #000;
|
||||||
}
|
border-top: 1px solid #000;
|
||||||
}
|
}
|
||||||
.tbody {
|
}
|
||||||
.tr .td {
|
.tbody {
|
||||||
border-bottom: 0;
|
.tr .td {
|
||||||
padding-top: 0.4rem;
|
border-bottom: 0;
|
||||||
padding-bottom: 0.4rem;
|
padding-top: 0.4rem;
|
||||||
}
|
padding-bottom: 0.4rem;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user