977 lines
49 KiB
Vue
977 lines
49 KiB
Vue
|
<script>
|
|||
|
import { RouterLink, RouterView } from 'vue-router';
|
|||
|
import axios from "axios";
|
|||
|
import Swal from "sweetalert2";
|
|||
|
import { getApiUrl, getSiteName } from "@/hesabixConfig";
|
|||
|
import { ref } from 'vue';
|
|||
|
import Profile_btn from '@/components/application/buttons/profile_btn.vue';
|
|||
|
import Notifications_btn from '@/components/application/buttons/notifications_btn.vue';
|
|||
|
import Year_cob from '@/components/application/combobox/year_cob.vue';
|
|||
|
import Currency_cob from '@/components/application/combobox/currency_cob.vue';
|
|||
|
import clock from '@/components/application/clock.vue';
|
|||
|
|
|||
|
export default {
|
|||
|
data() {
|
|||
|
return {
|
|||
|
drawer: ref(null),
|
|||
|
plugins: [],
|
|||
|
business: { id: '', name: '' },
|
|||
|
timeNow: '',
|
|||
|
apiUrl: '',
|
|||
|
permissions: {},
|
|||
|
showShortcutsDialog: false,
|
|||
|
isEditingShortcuts: false,
|
|||
|
showShortcutHint: false,
|
|||
|
shortcutHint: '',
|
|||
|
shortcuts: [],
|
|||
|
defaultShortcuts: [],
|
|||
|
isCtrlShiftPressed: false,
|
|||
|
duplicateKeyDialog: false,
|
|||
|
duplicateKeyMessage: '',
|
|||
|
canFreeAccounting: true,
|
|||
|
};
|
|||
|
},
|
|||
|
mounted() {
|
|||
|
axios.post('/api/plugin/get/actives').then((response) => {
|
|||
|
this.plugins = response.data;
|
|||
|
});
|
|||
|
axios.post('/api/business/list/count').then((response) => {
|
|||
|
this.business_count = response.data.count;
|
|||
|
});
|
|||
|
axios.post('/api/business/get/user/permissions').then((response) => {
|
|||
|
this.permissions = response.data;
|
|||
|
});
|
|||
|
axios.post('/api/business/get/info/' + localStorage.getItem('activeBid')).then((response) => {
|
|||
|
this.business = response.data;
|
|||
|
});
|
|||
|
axios.post('/api/general/get/time').then((response) => {
|
|||
|
this.timeNow = response.data.timeNow;
|
|||
|
});
|
|||
|
// درخواست برای گرفتن canFreeAccounting
|
|||
|
axios.post('/api/settings/get/can-free-accounting')
|
|||
|
.then((response) => {
|
|||
|
// بررسی مقدار بازگشتی که "1" یا "0" هست
|
|||
|
this.canFreeAccounting = response.data.value == "1";
|
|||
|
})
|
|||
|
.catch((error) => {
|
|||
|
console.error('Error fetching canFreeAccounting:', error);
|
|||
|
this.canFreeAccounting = true; // در صورت خطا، منو مخفی میمونه
|
|||
|
});
|
|||
|
this.apiUrl = getApiUrl();
|
|||
|
|
|||
|
this.initializeShortcuts();
|
|||
|
window.addEventListener('keydown', this.handleKeyDown);
|
|||
|
window.addEventListener('keyup', this.handleKeyUp);
|
|||
|
},
|
|||
|
created() {
|
|||
|
this.siteName = getSiteName();
|
|||
|
},
|
|||
|
beforeUnmount() {
|
|||
|
window.removeEventListener('keydown', this.handleKeyDown);
|
|||
|
window.removeEventListener('keyup', this.handleKeyUp);
|
|||
|
},
|
|||
|
methods: {
|
|||
|
deleteBusiness() {
|
|||
|
Swal.fire({
|
|||
|
text: 'آیا برای حذف این کسبوکار مطمئن هستید؟ بعد از تایید این عملیات کسب و کار شما به مدت یک ماه در پایگاه داده آرشیو و بعد از آن به صورت دائم حذف خواهد شد',
|
|||
|
showCancelButton: true,
|
|||
|
confirmButtonText: 'بله',
|
|||
|
cancelButtonText: `خیر`,
|
|||
|
icon: 'warning'
|
|||
|
}).then((result) => {
|
|||
|
if (result.isConfirmed) {
|
|||
|
axios.post('/api/business/delete').then((response) => {
|
|||
|
if (response.data.code == 0) {
|
|||
|
Swal.fire({
|
|||
|
text: 'کسب و کار با موفقیت حذف شد. به پروفایل کاربری باز می گردید.',
|
|||
|
icon: 'success',
|
|||
|
confirmButtonText: 'قبول'
|
|||
|
}).then(() => {
|
|||
|
document.location = '/';
|
|||
|
});
|
|||
|
}
|
|||
|
});
|
|||
|
}
|
|||
|
});
|
|||
|
},
|
|||
|
exitBusiness() {
|
|||
|
Swal.fire({
|
|||
|
text: 'آیا برای خروج و ترک کسبوکار مطمئن هستید؟ ترک کسب و کار موجب قطع دسترسی شما خواهد شد و تنها از طریق مالک کسبوکار قابل بازیابی است.',
|
|||
|
showCancelButton: true,
|
|||
|
confirmButtonText: 'بله',
|
|||
|
cancelButtonText: `خیر`,
|
|||
|
icon: 'warning'
|
|||
|
}).then((result) => {
|
|||
|
if (result.isConfirmed) {
|
|||
|
axios.post('/api/business/removeuser/me').then((response) => {
|
|||
|
if (response.data.result == 1) {
|
|||
|
Swal.fire({
|
|||
|
text: 'عملیات با موفقیت انجام شد. به صفحه پروفایل کاربری باز می گردید.',
|
|||
|
icon: 'success',
|
|||
|
confirmButtonText: 'قبول'
|
|||
|
}).then(() => {
|
|||
|
document.location = '/';
|
|||
|
});
|
|||
|
}
|
|||
|
});
|
|||
|
}
|
|||
|
});
|
|||
|
},
|
|||
|
isPluginActive(plugName) {
|
|||
|
return this.plugins[plugName] !== undefined;
|
|||
|
},
|
|||
|
getDefaultShortcuts() {
|
|||
|
return [
|
|||
|
{ path: '/acc/dashboard', key: 'D', label: this.$t('drawer.dashboard'), ctrl: true, shift: true, permission: () => true },
|
|||
|
{ path: '/acc/persons/list', key: 'P', label: this.$t('drawer.persons'), ctrl: true, shift: true, permission: () => this.permissions.persons },
|
|||
|
{ path: '/acc/persons/receive/list', key: 'R', label: this.$t('drawer.gets'), ctrl: true, shift: true, permission: () => this.permissions.getpay },
|
|||
|
{ path: '/acc/persons/send/list', key: 'S', label: this.$t('drawer.pays'), ctrl: true, shift: true, permission: () => this.permissions.getpay },
|
|||
|
{ path: '/acc/shareholders/list', key: 'H', label: this.$t('drawer.shareholders'), ctrl: true, shift: true, permission: () => this.permissions.shareholder },
|
|||
|
{ path: '/acc/commodity/list', key: 'C', label: this.$t('drawer.commodity'), ctrl: true, shift: true, permission: () => this.permissions.commodity },
|
|||
|
{ path: '/acc/commodity/pricelist/list', key: 'L', label: this.$t('drawer.price_lists'), ctrl: true, shift: true, permission: () => this.permissions.commodity && this.isPluginActive('accpro') },
|
|||
|
{ path: '/acc/commodity/cat/list', key: 'T', label: this.$t('drawer.cats'), ctrl: true, shift: true, permission: () => this.permissions.commodity },
|
|||
|
{ path: '/acc/commodity/drop/list', key: 'O', label: this.$t('drawer.drops_list'), ctrl: true, shift: true, permission: () => this.permissions.commodity },
|
|||
|
{ path: '/acc/banks/list', key: 'B', label: this.$t('drawer.banks_accounts'), ctrl: true, shift: true, permission: () => this.permissions.bank },
|
|||
|
{ path: '/acc/cashdesk/list', key: 'K', label: this.$t('drawer.cashdesks'), ctrl: true, shift: true, permission: () => this.permissions.cashdesk },
|
|||
|
{ path: '/acc/salary/list', key: 'Y', label: this.$t('drawer.salarys'), ctrl: true, shift: true, permission: () => this.permissions.salary },
|
|||
|
{ path: '/acc/cheque/list', key: 'Q', label: this.$t('drawer.cheques'), ctrl: true, shift: true, permission: () => this.permissions.cheque },
|
|||
|
{ path: '/acc/transfer/list', key: 'N', label: this.$t('drawer.transfers'), ctrl: true, shift: true, permission: () => this.permissions.bankTransfer },
|
|||
|
{ path: '/acc/wallet/view', key: 'W', label: this.$t('static.wallet'), ctrl: true, shift: true, permission: () => this.permissions.wallet },
|
|||
|
{ path: '/acc/storeroom/list', key: 'M', label: this.$t('drawer.storerooms'), ctrl: true, shift: true, permission: () => this.permissions.store },
|
|||
|
{ path: '/acc/storeroom/tickets/list', key: 'I', label: this.$t('drawer.storeroom_ticket'), ctrl: true, shift: true, permission: () => this.permissions.store },
|
|||
|
{ path: '/acc/storeroom/commodity/check/exist', key: 'E', label: this.$t('drawer.commodity_exist_count'), ctrl: true, shift: true, permission: () => this.permissions.store },
|
|||
|
{ path: '/acc/buy/list', key: 'U', label: this.$t('drawer.buy_invoices'), ctrl: true, shift: true, permission: () => this.permissions.buy },
|
|||
|
{ path: '/acc/rfbuy/list', key: 'F', label: this.$t('drawer.rfbuy_invoices'), ctrl: true, shift: true, permission: () => this.permissions.plugAccproRfbuy && this.isPluginActive('accpro') },
|
|||
|
{ path: '/acc/costs/list', key: 'G', label: this.$t('drawer.costs'), ctrl: true, shift: true, permission: () => this.permissions.cost },
|
|||
|
{ path: '/acc/sell/fast-mod', key: 'J', label: this.$t('drawer.fast_sell'), ctrl: true, shift: true, permission: () => this.permissions.sell },
|
|||
|
{ path: '/acc/sell/list', key: 'V', label: this.$t('drawer.sell_invoices'), ctrl: true, shift: true, permission: () => this.permissions.sell },
|
|||
|
{ path: '/acc/presell/list', key: 'X', label: this.$t('drawer.presells'), ctrl: true, shift: true, permission: () => this.permissions.sell && this.isPluginActive('accpro') && (1 == 2) },
|
|||
|
{ path: '/acc/rfsell/list', key: 'Z', label: this.$t('drawer.rfsell_invoices'), ctrl: true, shift: true, permission: () => this.permissions.plugAccproRfsell && this.isPluginActive('accpro') },
|
|||
|
{ path: '/acc/incomes/list', key: 'A', label: this.$t('drawer.incomes'), ctrl: true, shift: true, permission: () => this.permissions.income },
|
|||
|
{ path: '/acc/accounting/list', key: '1', label: this.$t('drawer.accounting_docs'), ctrl: true, shift: true, permission: () => this.permissions.accounting },
|
|||
|
{ path: '/acc/accounting/open_balance', key: '2', label: this.$t('drawer.open_balance'), ctrl: true, shift: true, permission: () => this.permissions.accounting },
|
|||
|
{ path: '/acc/accounting/table', key: '3', label: this.$t('drawer.accounting_table'), ctrl: true, shift: true, permission: () => this.permissions.accounting },
|
|||
|
{ path: '/acc/accounting/close_year', key: '4', label: this.$t('drawer.close_year'), ctrl: true, shift: true, permission: () => this.permissions.plugAccproCloseYear && this.isPluginActive('accpro') },
|
|||
|
{ path: '/acc/reports/list', key: '5', label: this.$t('drawer.reports'), ctrl: true, shift: true, permission: () => this.permissions.report },
|
|||
|
{ path: '/acc/business/settings', key: '6', label: this.$t('drawer.bid_settings'), ctrl: true, shift: true, permission: () => this.permissions.settings },
|
|||
|
{ path: '/acc/business/printoptions', key: '7', label: this.$t('drawer.print_settings'), ctrl: true, shift: true, permission: () => this.permissions.settings },
|
|||
|
{ path: '/acc/business/avatar', key: '8', label: this.$t('drawer.avatar_settings'), ctrl: true, shift: true, permission: () => this.permissions.settings && this.isPluginActive('accpro') },
|
|||
|
{ path: '/acc/business/users', key: '9', label: this.$t('drawer.user_perms'), ctrl: true, shift: true, permission: () => this.permissions.permission },
|
|||
|
{ path: '/acc/business/apis', key: '0', label: this.$t('drawer.tokens'), ctrl: true, shift: true, permission: () => this.permissions.owner },
|
|||
|
{ path: '/acc/business/extramoneys', key: '-', label: this.$t('drawer.extra_moneys'), ctrl: true, shift: true, permission: () => this.permissions.settings && this.isPluginActive('accpro') },
|
|||
|
{ path: '/acc/business/logs', key: '=', label: this.$t('drawer.history'), ctrl: true, shift: true, permission: () => this.permissions.log },
|
|||
|
{ path: '/acc/plugin/repservice/order/list', key: '[', label: this.$t('drawer.repservice_reqs'), ctrl: true, shift: true, permission: () => this.permissions.plugRepservice && this.isPluginActive('repservice') },
|
|||
|
{ path: '/acc/sms/panel', key: ']', label: this.$t('drawer.sms_panel'), ctrl: true, shift: true, permission: () => this.permissions.owner },
|
|||
|
{ path: '/acc/printers/list', key: ';', label: this.$t('drawer.cloud_printers'), ctrl: true, shift: true, permission: () => this.permissions.owner },
|
|||
|
{ path: '/acc/archive/list', key: '\'', label: this.$t('drawer.archive_files'), ctrl: true, shift: true, permission: () => this.permissions.archiveUpload || this.permissions.archiveMod || this.permissions.archiveDelete },
|
|||
|
{ path: '/acc/archive/order/new', key: ',', label: this.$t('drawer.archive_order'), ctrl: true, shift: true, permission: () => this.permissions.owner },
|
|||
|
{ path: '/acc/archive/order/list', key: '.', label: this.$t('drawer.archive_log'), ctrl: true, shift: true, permission: () => this.permissions.owner },
|
|||
|
{ path: '/acc/plugin-center/list', key: '/', label: this.$t('drawer.plugins_list'), ctrl: true, shift: true, permission: () => this.permissions.owner },
|
|||
|
{ path: '/acc/plugin-center/my', key: '\\', label: this.$t('drawer.my_plugins'), ctrl: true, shift: true, permission: () => this.permissions.owner },
|
|||
|
{ path: '/acc/plugin-center/invoice', key: '`', label: this.$t('drawer.plugins_invoices'), ctrl: true, shift: true, permission: () => this.permissions.owner }
|
|||
|
];
|
|||
|
},
|
|||
|
restorePermissions(shortcuts) {
|
|||
|
const defaultShortcuts = this.getDefaultShortcuts();
|
|||
|
return shortcuts.map(shortcut => {
|
|||
|
const defaultShortcut = defaultShortcuts.find(ds => ds.path === shortcut.path);
|
|||
|
return {
|
|||
|
...shortcut,
|
|||
|
permission: defaultShortcut ? defaultShortcut.permission : () => true
|
|||
|
};
|
|||
|
});
|
|||
|
},
|
|||
|
initializeShortcuts() {
|
|||
|
this.defaultShortcuts = this.getDefaultShortcuts();
|
|||
|
const storedShortcuts = localStorage.getItem('customShortcuts');
|
|||
|
if (storedShortcuts) {
|
|||
|
const parsedShortcuts = JSON.parse(storedShortcuts);
|
|||
|
this.shortcuts = this.restorePermissions(parsedShortcuts);
|
|||
|
} else {
|
|||
|
this.shortcuts = [...this.defaultShortcuts];
|
|||
|
this.saveShortcuts();
|
|||
|
}
|
|||
|
},
|
|||
|
saveShortcuts() {
|
|||
|
const serializableShortcuts = this.shortcuts.map(({ path, key, label, ctrl, shift }) => ({
|
|||
|
path,
|
|||
|
key,
|
|||
|
label,
|
|||
|
ctrl,
|
|||
|
shift
|
|||
|
}));
|
|||
|
localStorage.setItem('customShortcuts', JSON.stringify(serializableShortcuts));
|
|||
|
},
|
|||
|
resetToDefault() {
|
|||
|
this.shortcuts = [...this.defaultShortcuts];
|
|||
|
this.saveShortcuts();
|
|||
|
this.isEditingShortcuts = false;
|
|||
|
this.showShortcutsDialog = false;
|
|||
|
},
|
|||
|
checkDuplicateKeys(newKey, currentIndex) {
|
|||
|
return this.shortcuts.some((shortcut, index) =>
|
|||
|
shortcut.key.toUpperCase() === newKey.toUpperCase() && index !== currentIndex
|
|||
|
);
|
|||
|
},
|
|||
|
updateShortcut(index, newKey) {
|
|||
|
if (!newKey) return;
|
|||
|
const upperKey = newKey.toUpperCase();
|
|||
|
if (this.checkDuplicateKeys(upperKey, index)) {
|
|||
|
this.duplicateKeyMessage = `کلید "${upperKey}" قبلاً استفاده شده است. لطفاً کلید دیگری انتخاب کنید.`;
|
|||
|
this.duplicateKeyDialog = true;
|
|||
|
return;
|
|||
|
}
|
|||
|
this.shortcuts[index].key = upperKey;
|
|||
|
},
|
|||
|
saveCustomShortcuts() {
|
|||
|
const keys = this.shortcuts.map(s => s.key);
|
|||
|
const duplicates = keys.filter((key, index) => keys.indexOf(key) !== index);
|
|||
|
if (duplicates.length > 0) {
|
|||
|
this.duplicateKeyMessage = `کلیدهای تکراری یافت شد: ${duplicates.join(', ')}. لطفاً آنها را اصلاح کنید.`;
|
|||
|
this.duplicateKeyDialog = true;
|
|||
|
return;
|
|||
|
}
|
|||
|
this.saveShortcuts();
|
|||
|
this.isEditingShortcuts = false;
|
|||
|
this.showShortcutsDialog = false;
|
|||
|
},
|
|||
|
handleKeyDown(event) {
|
|||
|
const { ctrlKey, shiftKey, keyCode } = event;
|
|||
|
|
|||
|
if (ctrlKey && shiftKey && !this.showShortcutHint) {
|
|||
|
this.showShortcutHint = true;
|
|||
|
this.shortcutHint = this.$t('shortcuts.hint', { keys: 'Ctrl+Shift' });
|
|||
|
this.isCtrlShiftPressed = true;
|
|||
|
}
|
|||
|
|
|||
|
this.shortcuts.forEach(shortcut => {
|
|||
|
const keyMatches = keyCode === shortcut.key.charCodeAt(0);
|
|||
|
if (ctrlKey && shiftKey && keyMatches && shortcut.permission()) {
|
|||
|
event.preventDefault();
|
|||
|
this.$router.push(shortcut.path);
|
|||
|
this.shortcutHint = `${shortcut.label} (${shortcut.key})`;
|
|||
|
}
|
|||
|
});
|
|||
|
},
|
|||
|
handleKeyUp(event) {
|
|||
|
const { ctrlKey, shiftKey } = event;
|
|||
|
if (!ctrlKey || !shiftKey) {
|
|||
|
this.showShortcutHint = false;
|
|||
|
this.shortcutHint = '';
|
|||
|
this.isCtrlShiftPressed = false;
|
|||
|
}
|
|||
|
},
|
|||
|
filteredShortcuts() {
|
|||
|
return this.shortcuts.filter(shortcut => shortcut.permission());
|
|||
|
},
|
|||
|
getShortcutKey(path) {
|
|||
|
const shortcut = this.shortcuts.find(s => s.path === path);
|
|||
|
return shortcut ? shortcut.key : '';
|
|||
|
}
|
|||
|
},
|
|||
|
components: {
|
|||
|
Profile_btn,
|
|||
|
Notifications_btn,
|
|||
|
Year_cob,
|
|||
|
Currency_cob,
|
|||
|
clock
|
|||
|
}
|
|||
|
};
|
|||
|
</script>
|
|||
|
|
|||
|
<template>
|
|||
|
<v-system-bar color="primaryLight2">
|
|||
|
<v-avatar image="/img/logo-blue.png" size="20" class="me-2 d-none d-sm-flex" />
|
|||
|
<span class="d-none d-sm-flex">{{ $t('hesabix.banner') }}</span>
|
|||
|
<v-avatar :image="apiUrl + '/front/avatar/file/get/' + business.id" size="20" class="me-2 d-flex d-sm-none" />
|
|||
|
<span class="d-flex d-sm-none">{{ business.name }}</span>
|
|||
|
<v-spacer />
|
|||
|
<clock />
|
|||
|
</v-system-bar>
|
|||
|
<v-navigation-drawer v-model="drawer" :width="300">
|
|||
|
<v-card height="64" rounded="0" prepend-icon="mdi-account">
|
|||
|
<template v-slot:title>{{ $t('app.name') }}</template>
|
|||
|
<template v-slot:prepend>
|
|||
|
<v-avatar class="d-none d-sm-flex" :image="apiUrl + '/front/avatar/file/get/' + business.id" />
|
|||
|
<v-avatar class="d-flex d-sm-none" image="./img/favw.png" />
|
|||
|
</template>
|
|||
|
</v-card>
|
|||
|
<v-list class="px-0 pt-0">
|
|||
|
<v-list-item to="/acc/dashboard">
|
|||
|
<template v-slot:prepend><v-icon icon="mdi-view-dashboard"></v-icon></template>
|
|||
|
<v-list-item-title>
|
|||
|
{{ $t('drawer.dashboard') }}
|
|||
|
<span v-if="isCtrlShiftPressed" class="shortcut-key">{{ getShortcutKey('/acc/dashboard') }}</span>
|
|||
|
</v-list-item-title>
|
|||
|
</v-list-item>
|
|||
|
<v-list-subheader color="primary">{{ $t('drawer.basic_tools') }}</v-list-subheader>
|
|||
|
<v-list-group v-show="permissions.getpay || permissions.persons">
|
|||
|
<template v-slot:activator="{ props }">
|
|||
|
<v-list-item class="text-dark" v-bind="props" prepend-icon="mdi-account-multiple"
|
|||
|
:title="$t('drawer.persons')"></v-list-item>
|
|||
|
</template>
|
|||
|
<v-list-item v-if="permissions.persons" to="/acc/persons/list">
|
|||
|
<v-list-item-title>
|
|||
|
{{ $t('drawer.persons') }}
|
|||
|
<span v-if="isCtrlShiftPressed" class="shortcut-key">{{ getShortcutKey('/acc/persons/list') }}</span>
|
|||
|
</v-list-item-title>
|
|||
|
<template v-slot:append>
|
|||
|
<v-tooltip :text="$t('dialog.add_new')" location="end">
|
|||
|
<template v-slot:activator="{ props }">
|
|||
|
<v-btn v-bind="props" icon="mdi-plus-box" variant="plain" to="/acc/persons/mod/" />
|
|||
|
</template>
|
|||
|
</v-tooltip>
|
|||
|
</template>
|
|||
|
</v-list-item>
|
|||
|
<v-list-item v-if="permissions.getpay" to="/acc/persons/receive/list">
|
|||
|
<v-list-item-title>
|
|||
|
{{ $t('drawer.gets') }}
|
|||
|
<span v-if="isCtrlShiftPressed" class="shortcut-key">{{ getShortcutKey('/acc/persons/receive/list')
|
|||
|
}}</span>
|
|||
|
</v-list-item-title>
|
|||
|
<template v-slot:append>
|
|||
|
<v-tooltip :text="$t('dialog.add_new')" location="end">
|
|||
|
<template v-slot:activator="{ props }">
|
|||
|
<v-btn v-bind="props" icon="mdi-plus-box" variant="plain" to="/acc/persons/receive/mod/" />
|
|||
|
</template>
|
|||
|
</v-tooltip>
|
|||
|
</template>
|
|||
|
</v-list-item>
|
|||
|
<v-list-item v-if="permissions.getpay" to="/acc/persons/send/list">
|
|||
|
<v-list-item-title>
|
|||
|
{{ $t('drawer.pays') }}
|
|||
|
<span v-if="isCtrlShiftPressed" class="shortcut-key">{{ getShortcutKey('/acc/persons/send/list') }}</span>
|
|||
|
</v-list-item-title>
|
|||
|
<template v-slot:append>
|
|||
|
<v-tooltip :text="$t('dialog.add_new')" location="end">
|
|||
|
<template v-slot:activator="{ props }">
|
|||
|
<v-btn v-bind="props" icon="mdi-plus-box" variant="plain" to="/acc/persons/send/mod/" />
|
|||
|
</template>
|
|||
|
</v-tooltip>
|
|||
|
</template>
|
|||
|
</v-list-item>
|
|||
|
<v-list-item v-if="permissions.shareholder" to="/acc/shareholders/list">
|
|||
|
<v-list-item-title>
|
|||
|
{{ $t('drawer.shareholders') }}
|
|||
|
<span v-if="isCtrlShiftPressed" class="shortcut-key">{{ getShortcutKey('/acc/shareholders/list') }}</span>
|
|||
|
</v-list-item-title>
|
|||
|
</v-list-item>
|
|||
|
</v-list-group>
|
|||
|
<v-list-group v-show="permissions.commodity">
|
|||
|
<template v-slot:activator="{ props }">
|
|||
|
<v-list-item class="text-dark" v-bind="props" prepend-icon="mdi-package-variant"
|
|||
|
:title="$t('drawer.commodity')"></v-list-item>
|
|||
|
</template>
|
|||
|
<v-list-item v-if="permissions.commodity" to="/acc/commodity/list">
|
|||
|
<v-list-item-title>
|
|||
|
{{ $t('drawer.commodity') }}
|
|||
|
<span v-if="isCtrlShiftPressed" class="shortcut-key">{{ getShortcutKey('/acc/commodity/list') }}</span>
|
|||
|
</v-list-item-title>
|
|||
|
<template v-slot:append>
|
|||
|
<v-tooltip :text="$t('dialog.add_new')" location="end">
|
|||
|
<template v-slot:activator="{ props }">
|
|||
|
<v-btn v-bind="props" icon="mdi-plus-box" variant="plain" to="/acc/commodity/mod/" />
|
|||
|
</template>
|
|||
|
</v-tooltip>
|
|||
|
</template>
|
|||
|
</v-list-item>
|
|||
|
<v-list-item v-if="permissions.commodity && this.isPluginActive('accpro')" to="/acc/commodity/pricelist/list">
|
|||
|
<v-list-item-title>
|
|||
|
{{ $t('drawer.price_lists') }}
|
|||
|
<span v-if="isCtrlShiftPressed" class="shortcut-key">{{ getShortcutKey('/acc/commodity/pricelist/list')
|
|||
|
}}</span>
|
|||
|
</v-list-item-title>
|
|||
|
<template v-slot:append>
|
|||
|
<v-tooltip :text="$t('dialog.add_new')" location="end">
|
|||
|
<template v-slot:activator="{ props }">
|
|||
|
<v-btn v-bind="props" icon="mdi-plus-box" variant="plain" to="/acc/commodity/pricelist/mod/" />
|
|||
|
</template>
|
|||
|
</v-tooltip>
|
|||
|
</template>
|
|||
|
</v-list-item>
|
|||
|
<v-list-item v-if="permissions.commodity" to="/acc/commodity/cat/list">
|
|||
|
<v-list-item-title>
|
|||
|
{{ $t('drawer.cats') }}
|
|||
|
<span v-if="isCtrlShiftPressed" class="shortcut-key">{{ getShortcutKey('/acc/commodity/cat/list') }}</span>
|
|||
|
</v-list-item-title>
|
|||
|
</v-list-item>
|
|||
|
<v-list-item v-if="permissions.commodity" to="/acc/commodity/drop/list">
|
|||
|
<v-list-item-title>
|
|||
|
{{ $t('drawer.drops_list') }}
|
|||
|
<span v-if="isCtrlShiftPressed" class="shortcut-key">{{ getShortcutKey('/acc/commodity/drop/list') }}</span>
|
|||
|
</v-list-item-title>
|
|||
|
<template v-slot:append>
|
|||
|
<v-tooltip :text="$t('dialog.add_new')" location="end">
|
|||
|
<template v-slot:activator="{ props }">
|
|||
|
<v-btn v-bind="props" icon="mdi-plus-box" variant="plain" to="/acc/commodity/drop/mod/" />
|
|||
|
</template>
|
|||
|
</v-tooltip>
|
|||
|
</template>
|
|||
|
</v-list-item>
|
|||
|
</v-list-group>
|
|||
|
<v-list-group
|
|||
|
v-show="permissions.bank || permissions.wallet || permissions.cashdesk || permissions.salary || permissions.cheque || permissions.bankTransfer">
|
|||
|
<template v-slot:activator="{ props }">
|
|||
|
<v-list-item class="text-dark" v-bind="props" prepend-icon="mdi-bank"
|
|||
|
:title="$t('drawer.bank_label')"></v-list-item>
|
|||
|
</template>
|
|||
|
<v-list-item v-if="permissions.bank" to="/acc/banks/list">
|
|||
|
<v-list-item-title>
|
|||
|
{{ $t('drawer.banks_accounts') }}
|
|||
|
<span v-if="isCtrlShiftPressed" class="shortcut-key">{{ getShortcutKey('/acc/banks/list') }}</span>
|
|||
|
</v-list-item-title>
|
|||
|
<template v-slot:append>
|
|||
|
<v-tooltip :text="$t('dialog.add_new')" location="end">
|
|||
|
<template v-slot:activator="{ props }">
|
|||
|
<v-btn v-bind="props" icon="mdi-plus-box" variant="plain" to="/acc/banks/mod/" />
|
|||
|
</template>
|
|||
|
</v-tooltip>
|
|||
|
</template>
|
|||
|
</v-list-item>
|
|||
|
<v-list-item v-if="permissions.cashdesk" to="/acc/cashdesk/list">
|
|||
|
<v-list-item-title>
|
|||
|
{{ $t('drawer.cashdesks') }}
|
|||
|
<span v-if="isCtrlShiftPressed" class="shortcut-key">{{ getShortcutKey('/acc/cashdesk/list') }}</span>
|
|||
|
</v-list-item-title>
|
|||
|
<template v-slot:append>
|
|||
|
<v-tooltip :text="$t('dialog.add_new')" location="end">
|
|||
|
<template v-slot:activator="{ props }">
|
|||
|
<v-btn v-bind="props" icon="mdi-plus-box" variant="plain" to="/acc/cashdesk/mod/" />
|
|||
|
</template>
|
|||
|
</v-tooltip>
|
|||
|
</template>
|
|||
|
</v-list-item>
|
|||
|
<v-list-item v-if="permissions.salary" to="/acc/salary/list">
|
|||
|
<v-list-item-title>
|
|||
|
{{ $t('drawer.salarys') }}
|
|||
|
<span v-if="isCtrlShiftPressed" class="shortcut-key">{{ getShortcutKey('/acc/salary/list') }}</span>
|
|||
|
</v-list-item-title>
|
|||
|
<template v-slot:append>
|
|||
|
<v-tooltip :text="$t('dialog.add_new')" location="end">
|
|||
|
<template v-slot:activator="{ props }">
|
|||
|
<v-btn v-bind="props" icon="mdi-plus-box" variant="plain" to="/acc/salary/mod/" />
|
|||
|
</template>
|
|||
|
</v-tooltip>
|
|||
|
</template>
|
|||
|
</v-list-item>
|
|||
|
<v-list-item v-if="permissions.cheque" to="/acc/cheque/list">
|
|||
|
<v-list-item-title>
|
|||
|
{{ $t('drawer.cheques') }}
|
|||
|
<span v-if="isCtrlShiftPressed" class="shortcut-key">{{ getShortcutKey('/acc/cheque/list') }}</span>
|
|||
|
</v-list-item-title>
|
|||
|
</v-list-item>
|
|||
|
<v-list-item v-if="permissions.bankTransfer" to="/acc/transfer/list">
|
|||
|
<v-list-item-title>
|
|||
|
{{ $t('drawer.transfers') }}
|
|||
|
<span v-if="isCtrlShiftPressed" class="shortcut-key">{{ getShortcutKey('/acc/transfer/list') }}</span>
|
|||
|
</v-list-item-title>
|
|||
|
<template v-slot:append>
|
|||
|
<v-tooltip :text="$t('dialog.add_new')" location="end">
|
|||
|
<template v-slot:activator="{ props }">
|
|||
|
<v-btn v-bind="props" icon="mdi-plus-box" variant="plain" to="/acc/transfer/mod/" />
|
|||
|
</template>
|
|||
|
</v-tooltip>
|
|||
|
</template>
|
|||
|
</v-list-item>
|
|||
|
<v-list-item v-if="permissions.wallet" to="/acc/wallet/view">
|
|||
|
<v-list-item-title>
|
|||
|
{{ $t('static.wallet') }}
|
|||
|
<span v-if="isCtrlShiftPressed" class="shortcut-key">{{ getShortcutKey('/acc/wallet/view') }}</span>
|
|||
|
</v-list-item-title>
|
|||
|
</v-list-item>
|
|||
|
</v-list-group>
|
|||
|
<v-list-subheader color="primary">{{ $t('drawer.acc_store_tools') }}</v-list-subheader>
|
|||
|
<v-list-group v-show="permissions.store">
|
|||
|
<template v-slot:activator="{ props }">
|
|||
|
<v-list-item class="text-dark" v-bind="props" prepend-icon="mdi-store"
|
|||
|
:title="$t('drawer.storeroom_title')"></v-list-item>
|
|||
|
</template>
|
|||
|
<v-list-item v-if="permissions.store" to="/acc/storeroom/list">
|
|||
|
<v-list-item-title>
|
|||
|
{{ $t('drawer.storerooms') }}
|
|||
|
<span v-if="isCtrlShiftPressed" class="shortcut-key">{{ getShortcutKey('/acc/storeroom/list') }}</span>
|
|||
|
</v-list-item-title>
|
|||
|
<template v-slot:append>
|
|||
|
<v-tooltip :text="$t('dialog.add_new')" location="end">
|
|||
|
<template v-slot:activator="{ props }">
|
|||
|
<v-btn v-bind="props" icon="mdi-plus-box" variant="plain" to="/acc/storeroom/mod/" />
|
|||
|
</template>
|
|||
|
</v-tooltip>
|
|||
|
</template>
|
|||
|
</v-list-item>
|
|||
|
<v-list-item v-if="permissions.store" to="/acc/storeroom/tickets/list">
|
|||
|
<v-list-item-title>
|
|||
|
{{ $t('drawer.storeroom_ticket') }}
|
|||
|
<span v-if="isCtrlShiftPressed" class="shortcut-key">{{ getShortcutKey('/acc/storeroom/tickets/list')
|
|||
|
}}</span>
|
|||
|
</v-list-item-title>
|
|||
|
<template v-slot:append>
|
|||
|
<v-tooltip :text="$t('dialog.add_new')" location="end">
|
|||
|
<template v-slot:activator="{ props }">
|
|||
|
<v-btn v-bind="props" icon="mdi-plus-box" variant="plain" to="/acc/storeroom/new/ticket/type" />
|
|||
|
</template>
|
|||
|
</v-tooltip>
|
|||
|
</template>
|
|||
|
</v-list-item>
|
|||
|
<v-list-item v-if="permissions.store" to="/acc/storeroom/commodity/check/exist">
|
|||
|
<v-list-item-title>
|
|||
|
{{ $t('drawer.commodity_exist_count') }}
|
|||
|
<span v-if="isCtrlShiftPressed" class="shortcut-key">{{
|
|||
|
getShortcutKey('/acc/storeroom/commodity/check/exist')
|
|||
|
}}</span>
|
|||
|
</v-list-item-title>
|
|||
|
</v-list-item>
|
|||
|
</v-list-group>
|
|||
|
<v-list-group v-show="permissions.buy || permissions.cost || permissions.plugAccproRfbuy">
|
|||
|
<template v-slot:activator="{ props }">
|
|||
|
<v-list-item class="text-dark" v-bind="props" prepend-icon="mdi-cash-fast"
|
|||
|
:title="$t('drawer.buy_cost')"></v-list-item>
|
|||
|
</template>
|
|||
|
<v-list-item v-if="permissions.buy" to="/acc/buy/list">
|
|||
|
<v-list-item-title>
|
|||
|
{{ $t('drawer.buy_invoices') }}
|
|||
|
<span v-if="isCtrlShiftPressed" class="shortcut-key">{{ getShortcutKey('/acc/buy/list') }}</span>
|
|||
|
</v-list-item-title>
|
|||
|
<template v-slot:append>
|
|||
|
<v-tooltip :text="$t('dialog.add_new')" location="end">
|
|||
|
<template v-slot:activator="{ props }">
|
|||
|
<v-btn v-bind="props" icon="mdi-plus-box" variant="plain" to="/acc/buy/mod/" />
|
|||
|
</template>
|
|||
|
</v-tooltip>
|
|||
|
</template>
|
|||
|
</v-list-item>
|
|||
|
<v-list-item v-if="permissions.plugAccproRfbuy && this.isPluginActive('accpro')" to="/acc/rfbuy/list">
|
|||
|
<v-list-item-title>
|
|||
|
{{ $t('drawer.rfbuy_invoices') }}
|
|||
|
<span v-if="isCtrlShiftPressed" class="shortcut-key">{{ getShortcutKey('/acc/rfbuy/list') }}</span>
|
|||
|
</v-list-item-title>
|
|||
|
<template v-slot:append>
|
|||
|
<v-tooltip :text="$t('dialog.add_new')" location="end">
|
|||
|
<template v-slot:activator="{ props }">
|
|||
|
<v-btn v-bind="props" icon="mdi-plus-box" variant="plain" to="/acc/rfbuy/mod/" />
|
|||
|
</template>
|
|||
|
</v-tooltip>
|
|||
|
</template>
|
|||
|
</v-list-item>
|
|||
|
<v-list-item v-if="permissions.cost" to="/acc/costs/list">
|
|||
|
<v-list-item-title>
|
|||
|
{{ $t('drawer.costs') }}
|
|||
|
<span v-if="isCtrlShiftPressed" class="shortcut-key">{{ getShortcutKey('/acc/costs/list') }}</span>
|
|||
|
</v-list-item-title>
|
|||
|
<template v-slot:append>
|
|||
|
<v-tooltip :text="$t('dialog.add_new')" location="end">
|
|||
|
<template v-slot:activator="{ props }">
|
|||
|
<v-btn v-bind="props" icon="mdi-plus-box" variant="plain" to="/acc/costs/mod/" />
|
|||
|
</template>
|
|||
|
</v-tooltip>
|
|||
|
</template>
|
|||
|
</v-list-item>
|
|||
|
</v-list-group>
|
|||
|
<v-list-group v-show="permissions.sell || permissions.income || permissions.plugAccproRfsell">
|
|||
|
<template v-slot:activator="{ props }">
|
|||
|
<v-list-item class="text-dark" v-bind="props" prepend-icon="mdi-cart-arrow-down"
|
|||
|
:title="$t('drawer.sell_income')"></v-list-item>
|
|||
|
</template>
|
|||
|
<v-list-item v-if="permissions.sell" to="/acc/sell/fast-mod">
|
|||
|
<v-list-item-title>
|
|||
|
{{ $t('drawer.fast_sell') }}
|
|||
|
<span v-if="isCtrlShiftPressed" class="shortcut-key">{{ getShortcutKey('/acc/sell/fast-mod') }}</span>
|
|||
|
</v-list-item-title>
|
|||
|
</v-list-item>
|
|||
|
<v-list-item v-if="permissions.sell" to="/acc/sell/list">
|
|||
|
<v-list-item-title>
|
|||
|
{{ $t('drawer.sell_invoices') }}
|
|||
|
<span v-if="isCtrlShiftPressed" class="shortcut-key">{{ getShortcutKey('/acc/sell/list') }}</span>
|
|||
|
</v-list-item-title>
|
|||
|
<template v-slot:append>
|
|||
|
<v-tooltip :text="$t('dialog.add_new')" location="end">
|
|||
|
<template v-slot:activator="{ props }">
|
|||
|
<v-btn v-bind="props" icon="mdi-plus-box" variant="plain" to="/acc/sell/mod/" />
|
|||
|
</template>
|
|||
|
</v-tooltip>
|
|||
|
</template>
|
|||
|
</v-list-item>
|
|||
|
<v-list-item v-if="this.isPluginActive('accpro') && permissions.sell && (1 == 2)" to="/acc/presell/list">
|
|||
|
<v-list-item-title>
|
|||
|
{{ $t('drawer.presells') }}
|
|||
|
<span v-if="isCtrlShiftPressed" class="shortcut-key">{{ getShortcutKey('/acc/presell/list') }}</span>
|
|||
|
</v-list-item-title>
|
|||
|
<template v-slot:append>
|
|||
|
<v-tooltip :text="$t('dialog.add_new')" location="end">
|
|||
|
<template v-slot:activator="{ props }">
|
|||
|
<v-btn v-bind="props" icon="mdi-plus-box" variant="plain" to="/acc/presell/mod/" />
|
|||
|
</template>
|
|||
|
</v-tooltip>
|
|||
|
</template>
|
|||
|
</v-list-item>
|
|||
|
<v-list-item v-if="permissions.plugAccproRfsell && this.isPluginActive('accpro')" to="/acc/rfsell/list">
|
|||
|
<v-list-item-title>
|
|||
|
{{ $t('drawer.rfsell_invoices') }}
|
|||
|
<span v-if="isCtrlShiftPressed" class="shortcut-key">{{ getShortcutKey('/acc/rfsell/list') }}</span>
|
|||
|
</v-list-item-title>
|
|||
|
<template v-slot:append>
|
|||
|
<v-tooltip :text="$t('dialog.add_new')" location="end">
|
|||
|
<template v-slot:activator="{ props }">
|
|||
|
<v-btn v-bind="props" icon="mdi-plus-box" variant="plain" to="/acc/rfsell/mod/" />
|
|||
|
</template>
|
|||
|
</v-tooltip>
|
|||
|
</template>
|
|||
|
</v-list-item>
|
|||
|
<v-list-item v-if="permissions.income" to="/acc/incomes/list">
|
|||
|
<v-list-item-title>
|
|||
|
{{ $t('drawer.incomes') }}
|
|||
|
<span v-if="isCtrlShiftPressed" class="shortcut-key">{{ getShortcutKey('/acc/incomes/list') }}</span>
|
|||
|
</v-list-item-title>
|
|||
|
<template v-slot:append>
|
|||
|
<v-tooltip :text="$t('dialog.add_new')" location="end">
|
|||
|
<template v-slot:activator="{ props }">
|
|||
|
<v-btn v-bind="props" icon="mdi-plus-box" variant="plain" to="/acc/incomes/mod/" />
|
|||
|
</template>
|
|||
|
</v-tooltip>
|
|||
|
</template>
|
|||
|
</v-list-item>
|
|||
|
</v-list-group>
|
|||
|
<v-list-group v-show="permissions.accounting || permissions.plugAccproCloseYear">
|
|||
|
<template v-slot:activator="{ props }">
|
|||
|
<v-list-item class="text-dark" v-bind="props" prepend-icon="mdi-file-document-multiple"
|
|||
|
:title="$t('drawer.accounting')"></v-list-item>
|
|||
|
</template>
|
|||
|
<v-list-item v-if="permissions.accounting" to="/acc/accounting/list">
|
|||
|
<v-list-item-title>
|
|||
|
{{ $t('drawer.accounting_docs') }}
|
|||
|
<span v-if="isCtrlShiftPressed" class="shortcut-key">{{ getShortcutKey('/acc/accounting/list') }}</span>
|
|||
|
</v-list-item-title>
|
|||
|
<template v-slot:append>
|
|||
|
<!--
|
|||
|
<v-tooltip :text="$t('dialog.add_new')" location="end">
|
|||
|
<template v-slot:activator="{ props }">
|
|||
|
<v-btn v-bind="props" icon="mdi-plus-box" variant="plain" to="/acc/accounting/mod/" />
|
|||
|
</template>
|
|||
|
</v-tooltip>
|
|||
|
-->
|
|||
|
</template>
|
|||
|
</v-list-item>
|
|||
|
<v-list-item v-if="permissions.accounting" to="/acc/accounting/open_balance">
|
|||
|
<v-list-item-title>
|
|||
|
{{ $t('drawer.open_balance') }}
|
|||
|
<span v-if="isCtrlShiftPressed" class="shortcut-key">{{ getShortcutKey('/acc/accounting/open_balance')
|
|||
|
}}</span>
|
|||
|
</v-list-item-title>
|
|||
|
</v-list-item>
|
|||
|
<v-list-item v-if="permissions.accounting" to="/acc/accounting/table">
|
|||
|
<v-list-item-title>
|
|||
|
{{ $t('drawer.accounting_table') }}
|
|||
|
<span v-if="isCtrlShiftPressed" class="shortcut-key">{{ getShortcutKey('/acc/accounting/table') }}</span>
|
|||
|
</v-list-item-title>
|
|||
|
</v-list-item>
|
|||
|
<v-list-item v-if="permissions.plugAccproCloseYear && this.isPluginActive('accpro')"
|
|||
|
to="/acc/accounting/close_year">
|
|||
|
<v-list-item-title>
|
|||
|
{{ $t('drawer.close_year') }}
|
|||
|
<span v-if="isCtrlShiftPressed" class="shortcut-key">{{ getShortcutKey('/acc/accounting/close_year')
|
|||
|
}}</span>
|
|||
|
</v-list-item-title>
|
|||
|
</v-list-item>
|
|||
|
</v-list-group>
|
|||
|
<v-list-item v-show="permissions.report" to="/acc/reports/list">
|
|||
|
<template v-slot:prepend><v-icon icon="mdi-poll"></v-icon></template>
|
|||
|
<v-list-item-title>
|
|||
|
{{ $t('drawer.reports') }}
|
|||
|
<span v-if="isCtrlShiftPressed" class="shortcut-key">{{ getShortcutKey('/acc/reports/list') }}</span>
|
|||
|
</v-list-item-title>
|
|||
|
</v-list-item>
|
|||
|
<v-list-subheader color="primary">{{ $t('drawer.settings') }}</v-list-subheader>
|
|||
|
<v-list-group v-show="permissions.settings || permissions.log || permissions.permission">
|
|||
|
<template v-slot:activator="{ props }">
|
|||
|
<v-list-item class="text-dark" v-bind="props" prepend-icon="mdi-cogs"
|
|||
|
:title="$t('drawer.settings')"></v-list-item>
|
|||
|
</template>
|
|||
|
<v-list-item v-if="permissions.settings" to="/acc/business/settings">
|
|||
|
<v-list-item-title>
|
|||
|
{{ $t('drawer.bid_settings') }}
|
|||
|
<span v-if="isCtrlShiftPressed" class="shortcut-key">{{ getShortcutKey('/acc/business/settings') }}</span>
|
|||
|
</v-list-item-title>
|
|||
|
</v-list-item>
|
|||
|
<v-list-item v-if="permissions.settings" to="/acc/business/printoptions">
|
|||
|
<v-list-item-title>
|
|||
|
{{ $t('drawer.print_settings') }}
|
|||
|
<span v-if="isCtrlShiftPressed" class="shortcut-key">{{ getShortcutKey('/acc/business/printoptions')
|
|||
|
}}</span>
|
|||
|
</v-list-item-title>
|
|||
|
</v-list-item>
|
|||
|
<v-list-item v-if="permissions.settings && this.isPluginActive('accpro')" to="/acc/business/avatar">
|
|||
|
<v-list-item-title>
|
|||
|
{{ $t('drawer.avatar_settings') }}
|
|||
|
<span v-if="isCtrlShiftPressed" class="shortcut-key">{{ getShortcutKey('/acc/business/avatar') }}</span>
|
|||
|
</v-list-item-title>
|
|||
|
</v-list-item>
|
|||
|
<v-list-item v-if="permissions.permission" to="/acc/business/users">
|
|||
|
<v-list-item-title>
|
|||
|
{{ $t('drawer.user_perms') }}
|
|||
|
<span v-if="isCtrlShiftPressed" class="shortcut-key">{{ getShortcutKey('/acc/business/users') }}</span>
|
|||
|
</v-list-item-title>
|
|||
|
</v-list-item>
|
|||
|
<v-list-item v-if="permissions.owner" to="/acc/business/apis">
|
|||
|
<v-list-item-title>
|
|||
|
{{ $t('drawer.tokens') }}
|
|||
|
<span v-if="isCtrlShiftPressed" class="shortcut-key">{{ getShortcutKey('/acc/business/apis') }}</span>
|
|||
|
</v-list-item-title>
|
|||
|
</v-list-item>
|
|||
|
<v-list-item v-if="permissions.settings && this.isPluginActive('accpro')" to="/acc/business/extramoneys">
|
|||
|
<v-list-item-title>
|
|||
|
{{ $t('drawer.extra_moneys') }}
|
|||
|
<span v-if="isCtrlShiftPressed" class="shortcut-key">{{ getShortcutKey('/acc/business/extramoneys')
|
|||
|
}}</span>
|
|||
|
</v-list-item-title>
|
|||
|
</v-list-item>
|
|||
|
<v-list-item v-if="permissions.log" to="/acc/business/logs">
|
|||
|
<v-list-item-title>
|
|||
|
{{ $t('drawer.history') }}
|
|||
|
<span v-if="isCtrlShiftPressed" class="shortcut-key">{{ getShortcutKey('/acc/business/logs') }}</span>
|
|||
|
</v-list-item-title>
|
|||
|
</v-list-item>
|
|||
|
<v-list-item class="text-danger" v-if="permissions.owner" @click="deleteBusiness()"
|
|||
|
:title="$t('drawer.bid_delete')">
|
|||
|
</v-list-item>
|
|||
|
</v-list-group>
|
|||
|
<v-list-subheader color="primary">{{ $t('drawer.services') }}</v-list-subheader>
|
|||
|
<v-list-group v-show="permissions.plugRepservice && isPluginActive('repservice')">
|
|||
|
<template v-slot:activator="{ props }">
|
|||
|
<v-list-item class="text-dark" v-bind="props" :title="$t('drawer.repservice')">
|
|||
|
<template v-slot:prepend><v-icon icon="mdi-progress-wrench" color="primary"></v-icon></template>
|
|||
|
</v-list-item>
|
|||
|
</template>
|
|||
|
<v-list-item v-if="permissions.plugRepservice" to="/acc/plugin/repservice/order/list">
|
|||
|
<v-list-item-title>
|
|||
|
{{ $t('drawer.repservice_reqs') }}
|
|||
|
<span v-if="isCtrlShiftPressed" class="shortcut-key">{{ getShortcutKey('/acc/plugin/repservice/order/list')
|
|||
|
}}</span>
|
|||
|
</v-list-item-title>
|
|||
|
<template v-slot:append>
|
|||
|
<v-tooltip :text="$t('dialog.add_new')" location="end">
|
|||
|
<template v-slot:activator="{ props }">
|
|||
|
<v-btn v-bind="props" icon="mdi-plus-box" variant="plain" to="/acc/plugin/repservice/order/mod/" />
|
|||
|
</template>
|
|||
|
</v-tooltip>
|
|||
|
</template>
|
|||
|
</v-list-item>
|
|||
|
</v-list-group>
|
|||
|
<v-list-item class="text-dark" v-if="permissions.owner" to="/acc/sms/panel">
|
|||
|
<template v-slot:prepend><v-icon icon="mdi-message-cog" color="primary"></v-icon></template>
|
|||
|
<v-list-item-title>
|
|||
|
{{ $t('drawer.sms_panel') }}
|
|||
|
<span v-if="isCtrlShiftPressed" class="shortcut-key">{{ getShortcutKey('/acc/sms/panel') }}</span>
|
|||
|
</v-list-item-title>
|
|||
|
</v-list-item>
|
|||
|
<v-list-item class="text-dark" v-if="permissions.owner" to="/acc/printers/list">
|
|||
|
<template v-slot:prepend><v-icon icon="mdi-printer-pos-network" color="primary"></v-icon></template>
|
|||
|
<v-list-item-title>
|
|||
|
{{ $t('drawer.cloud_printers') }}
|
|||
|
<span v-if="isCtrlShiftPressed" class="shortcut-key">{{ getShortcutKey('/acc/printers/list') }}</span>
|
|||
|
</v-list-item-title>
|
|||
|
</v-list-item>
|
|||
|
<v-list-group
|
|||
|
v-show="permissions.owner || permissions.archiveUpload || permissions.archiveMod || permissions.archiveDelete">
|
|||
|
<template v-slot:activator="{ props }">
|
|||
|
<v-list-item class="text-dark" v-bind="props" :title="$t('drawer.archive_panel')">
|
|||
|
<template v-slot:prepend><v-icon icon="mdi-file-cloud" color="primary"></v-icon></template>
|
|||
|
</v-list-item>
|
|||
|
</template>
|
|||
|
<v-list-item v-if="permissions.archiveUpload || permissions.archiveMod || permissions.archiveDelete"
|
|||
|
to="/acc/archive/list">
|
|||
|
<v-list-item-title>
|
|||
|
{{ $t('drawer.archive_files') }}
|
|||
|
<span v-if="isCtrlShiftPressed" class="shortcut-key">{{ getShortcutKey('/acc/archive/list') }}</span>
|
|||
|
</v-list-item-title>
|
|||
|
</v-list-item>
|
|||
|
<v-list-item v-if="permissions.owner" to="/acc/archive/order/new">
|
|||
|
<v-list-item-title>
|
|||
|
{{ $t('drawer.archive_order') }}
|
|||
|
<span v-if="isCtrlShiftPressed" class="shortcut-key">{{ getShortcutKey('/acc/archive/order/new') }}</span>
|
|||
|
</v-list-item-title>
|
|||
|
</v-list-item>
|
|||
|
<v-list-item v-if="permissions.owner" to="/acc/archive/order/list">
|
|||
|
<v-list-item-title>
|
|||
|
{{ $t('drawer.archive_log') }}
|
|||
|
<span v-if="isCtrlShiftPressed" class="shortcut-key">{{ getShortcutKey('/acc/archive/order/list') }}</span>
|
|||
|
</v-list-item-title>
|
|||
|
</v-list-item>
|
|||
|
</v-list-group>
|
|||
|
<v-list-group v-show="permissions.owner && !canFreeAccounting">
|
|||
|
<template v-slot:activator="{ props }">
|
|||
|
<v-list-item class="text-dark" v-bind="props" :title="$t('drawer.ultimate_package')">
|
|||
|
<template v-slot:prepend><v-icon icon="mdi-package" color="primary"></v-icon></template>
|
|||
|
</v-list-item>
|
|||
|
</template>
|
|||
|
<v-list-item v-if="permissions.owner" to="/acc/package/order/new">
|
|||
|
<v-list-item-title>
|
|||
|
{{ $t('drawer.archive_order') }}
|
|||
|
</v-list-item-title>
|
|||
|
</v-list-item>
|
|||
|
<v-list-item v-if="permissions.owner" to="/acc/package/order/list">
|
|||
|
<v-list-item-title>
|
|||
|
{{ $t('drawer.archive_log') }}
|
|||
|
</v-list-item-title>
|
|||
|
</v-list-item>
|
|||
|
</v-list-group>
|
|||
|
<v-list-group v-show="permissions.owner">
|
|||
|
<template v-slot:activator="{ props }">
|
|||
|
<v-list-item class="bg-blue-grey-lighten-4 ma-2" v-bind="props" :title="$t('drawer.market')">
|
|||
|
<template v-slot:prepend><v-icon icon="mdi-shopping" color="green-darken-5"></v-icon></template>
|
|||
|
</v-list-item>
|
|||
|
</template>
|
|||
|
<v-list-item v-if="permissions.owner" to="/acc/plugin-center/list">
|
|||
|
<v-list-item-title>
|
|||
|
{{ $t('drawer.plugins_list') }}
|
|||
|
<span v-if="isCtrlShiftPressed" class="shortcut-key">{{ getShortcutKey('/acc/plugin-center/list') }}</span>
|
|||
|
</v-list-item-title>
|
|||
|
</v-list-item>
|
|||
|
<v-list-item v-if="permissions.owner" to="/acc/plugin-center/my">
|
|||
|
<v-list-item-title>
|
|||
|
{{ $t('drawer.my_plugins') }}
|
|||
|
<span v-if="isCtrlShiftPressed" class="shortcut-key">{{ getShortcutKey('/acc/plugin-center/my') }}</span>
|
|||
|
</v-list-item-title>
|
|||
|
</v-list-item>
|
|||
|
<v-list-item v-if="permissions.owner" to="/acc/plugin-center/invoice">
|
|||
|
<v-list-item-title>
|
|||
|
{{ $t('drawer.plugins_invoices') }}
|
|||
|
<span v-if="isCtrlShiftPressed" class="shortcut-key">{{ getShortcutKey('/acc/plugin-center/invoice')
|
|||
|
}}</span>
|
|||
|
</v-list-item-title>
|
|||
|
</v-list-item>
|
|||
|
</v-list-group>
|
|||
|
<v-list-item class="text-dark bg-red-darken-3 ma-2 rounded-2" v-if="permissions.owner == false"
|
|||
|
@click="exitBusiness()">
|
|||
|
<template v-slot:prepend><v-icon color="white" icon="mdi-logout"></v-icon></template>
|
|||
|
<v-list-item-title class="text-white" v-text="$t('drawer.exit_bus')" />
|
|||
|
</v-list-item>
|
|||
|
</v-list>
|
|||
|
</v-navigation-drawer>
|
|||
|
<v-app-bar scroll-behavior="inverted elevate" scroll-threshold="0">
|
|||
|
<v-app-bar-nav-icon @click="drawer = !drawer"></v-app-bar-nav-icon>
|
|||
|
<v-app-bar-title>
|
|||
|
<span class="d-none d-sm-flex">{{ business.name }}</span>
|
|||
|
</v-app-bar-title>
|
|||
|
<v-spacer></v-spacer>
|
|||
|
<v-btn class="d-none d-sm-flex" stacked @click="showShortcutsDialog = true; isEditingShortcuts = false">
|
|||
|
<v-icon>mdi-help-circle</v-icon>
|
|||
|
</v-btn>
|
|||
|
<v-dialog v-model="showShortcutsDialog" max-width="800" scrollable>
|
|||
|
<v-card>
|
|||
|
<v-card-title class="text-h5 pa-4">
|
|||
|
{{ isEditingShortcuts ? 'ویرایش کلیدهای میانبر' : 'راهنمای کلیدهای میانبر' }}
|
|||
|
</v-card-title>
|
|||
|
<v-card-text class="pa-4" style="max-height: 500px; overflow-y: auto;">
|
|||
|
<v-row>
|
|||
|
<v-col v-for="(shortcut, index) in filteredShortcuts()" :key="shortcut.path" cols="12" sm="6" md="6">
|
|||
|
<div class="shortcut-item pa-2">
|
|||
|
<v-row align="center" no-gutters>
|
|||
|
<v-col cols="12">
|
|||
|
<span v-if="!isEditingShortcuts" class="font-weight-bold shortcut-display">
|
|||
|
Ctrl+Shift+{{ shortcut.key }}
|
|||
|
</span>
|
|||
|
<v-text-field v-else v-model="shortcut.key" @input="updateShortcut(index, $event)" :label="کلید"
|
|||
|
maxlength="1" dense hide-details class="shortcut-input" />
|
|||
|
</v-col>
|
|||
|
<v-col cols="12" class="text-right">
|
|||
|
<span>{{ shortcut.label }}</span>
|
|||
|
</v-col>
|
|||
|
</v-row>
|
|||
|
</div>
|
|||
|
</v-col>
|
|||
|
</v-row>
|
|||
|
<v-alert v-if="isEditingShortcuts" type="info" dense class="mt-4">
|
|||
|
تغییرات در حافظه مرورگر ذخیره میشود و فقط در این مرورگر قابل استفاده است.
|
|||
|
</v-alert>
|
|||
|
</v-card-text>
|
|||
|
<v-card-actions class="pa-4">
|
|||
|
<v-btn v-if="!isEditingShortcuts" color="primary" @click="isEditingShortcuts = true">ویرایش</v-btn>
|
|||
|
<v-btn v-if="isEditingShortcuts" color="primary" @click="saveCustomShortcuts">ثبت تغییرات</v-btn>
|
|||
|
<v-btn v-if="isEditingShortcuts" color="warning" @click="resetToDefault">بازگشت به پیشفرض</v-btn>
|
|||
|
<v-spacer />
|
|||
|
<v-btn text @click="showShortcutsDialog = false">بستن</v-btn>
|
|||
|
</v-card-actions>
|
|||
|
</v-card>
|
|||
|
</v-dialog>
|
|||
|
<v-dialog v-model="duplicateKeyDialog" max-width="400">
|
|||
|
<v-card>
|
|||
|
<v-card-title class="text-h6">خطا</v-card-title>
|
|||
|
<v-card-text>{{ duplicateKeyMessage }}</v-card-text>
|
|||
|
<v-card-actions>
|
|||
|
<v-btn color="primary" @click="duplicateKeyDialog = false">بستن</v-btn>
|
|||
|
</v-card-actions>
|
|||
|
</v-card>
|
|||
|
</v-dialog>
|
|||
|
<v-tooltip v-model="showShortcutHint" location="bottom" class="shortcut-hint">
|
|||
|
<template v-slot:activator="{ props }">
|
|||
|
<div v-bind="props"></div>
|
|||
|
</template>
|
|||
|
<span>{{ shortcutHint }}</span>
|
|||
|
</v-tooltip>
|
|||
|
<v-bottom-sheet inset>
|
|||
|
<template v-slot:activator="{ props }">
|
|||
|
<v-btn stacked v-bind="props"><v-icon>mdi-cog</v-icon></v-btn>
|
|||
|
</template>
|
|||
|
<v-card :subtitle="$t('dialog.fiscal_settings_info')" prepend-icon="mdi-cog"
|
|||
|
:title="$t('dialog.fiscal_settings')">
|
|||
|
<v-card-text>
|
|||
|
<v-row class="text-center">
|
|||
|
<v-col cols="12" sm="12" md="6">
|
|||
|
<Year_cob />
|
|||
|
</v-col>
|
|||
|
<v-col cols="12" sm="12" md="6">
|
|||
|
<Currency_cob />
|
|||
|
</v-col>
|
|||
|
</v-row>
|
|||
|
</v-card-text>
|
|||
|
</v-card>
|
|||
|
</v-bottom-sheet>
|
|||
|
<Notifications_btn />
|
|||
|
<Profile_btn />
|
|||
|
</v-app-bar>
|
|||
|
<v-main>
|
|||
|
<div class="position-relative">
|
|||
|
<RouterView />
|
|||
|
</div>
|
|||
|
</v-main>
|
|||
|
</template>
|
|||
|
|
|||
|
<style global>
|
|||
|
.shortcut-key {
|
|||
|
font-size: 0.75rem;
|
|||
|
color: #888;
|
|||
|
margin-right: 4px;
|
|||
|
}
|
|||
|
|
|||
|
.shortcut-hint {
|
|||
|
z-index: 1000;
|
|||
|
}
|
|||
|
|
|||
|
.shortcut-item {
|
|||
|
border: 1px solid #e0e0e0;
|
|||
|
border-radius: 4px;
|
|||
|
background-color: #fafafa;
|
|||
|
}
|
|||
|
|
|||
|
.shortcut-display {
|
|||
|
font-size: 0.9rem;
|
|||
|
color: #555;
|
|||
|
}
|
|||
|
|
|||
|
.shortcut-input {
|
|||
|
max-width: 60px;
|
|||
|
}
|
|||
|
.v-data-table {
|
|||
|
overflow-x: auto;
|
|||
|
}
|
|||
|
|
|||
|
.expanded-row {
|
|||
|
background-color: #f5f5f5 !important;
|
|||
|
padding: 8px;
|
|||
|
}
|
|||
|
|
|||
|
.custom-header {
|
|||
|
background-color: #213e8b !important;
|
|||
|
color: #ffffff !important;
|
|||
|
}
|
|||
|
</style>
|