2025-03-21 14:20:43 +03:30
< script >
import { RouterLink , RouterView } from 'vue-router' ;
import axios from "axios" ;
import Swal from "sweetalert2" ;
2025-03-22 15:55:28 +03:30
import { getApiUrl , getBasePath , getSiteName } from "@/hesabixConfig" ;
2025-03-21 14:20:43 +03:30
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 : '' ,
2025-03-22 15:55:28 +03:30
siteName : '' ,
2025-03-23 01:00:34 +03:30
siteSlogan : '' ,
2025-03-21 14:20:43 +03:30
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 ) ;
} ,
2025-03-22 15:55:28 +03:30
async created ( ) {
this . siteName = await getSiteName ( ) ;
2025-03-23 01:00:34 +03:30
this . siteSlogan = await getSiteSlogan ( ) ;
2025-03-21 14:20:43 +03:30
} ,
beforeUnmount ( ) {
window . removeEventListener ( 'keydown' , this . handleKeyDown ) ;
window . removeEventListener ( 'keyup' , this . handleKeyUp ) ;
} ,
methods : {
2025-03-22 15:55:28 +03:30
getbase ( ) {
return getBasePath ( ) ;
} ,
2025-03-21 14:20:43 +03:30
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" / >
2025-03-23 01:00:34 +03:30
< span class = "d-none d-sm-flex" > { { siteSlogan } } < / span >
2025-03-21 14:20:43 +03:30
< 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 - s y s t e m - b a r >
< v -navigation -drawer v-model ="drawer" :width ="300" >
< v -card height = "64" rounded = "0" prepend -icon = " mdi -account " >
2025-03-22 15:55:28 +03:30
< template v -slot : title > { { siteName } } < / template >
2025-03-21 14:20:43 +03:30
< template v -slot : prepend >
< v -avatar class = "d-none d-sm-flex" : image = "apiUrl + '/front/avatar/file/get/' + business.id" / >
2025-03-22 15:55:28 +03:30
< v -avatar class = "d-flex d-sm-none" : image = "getbase() + 'img/favw.png'" / >
2025-03-21 14:20:43 +03:30
< / template >
< / v - c a r d >
< v -list class = "px-0 pt-0" >
< v -list -item to = "/acc/dashboard" >
< template v -slot : prepend > < v -icon icon = "mdi-view-dashboard" > < / v - i c o n > < / t e m p l a t e >
< v -list -item -title >
{ { $t ( 'drawer.dashboard' ) } }
< span v-if ="isCtrlShiftPressed" class="shortcut-key" > {{ getShortcutKey ( ' / acc / dashboard ' ) }} < / span >
< / v - l i s t - i t e m - t i t l e >
< / v - l i s t - i t e m >
< v -list -subheader color = "primary" > { { $t ( 'drawer.basic_tools' ) } } < / v - l i s t - s u b h e a d e r >
< 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 - l i s t - i t e m >
< / 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 - l i s t - i t e m - t i t l e >
< 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 - t o o l t i p >
< / template >
< / v - l i s t - i t e m >
< 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 - l i s t - i t e m - t i t l e >
< 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 - t o o l t i p >
< / template >
< / v - l i s t - i t e m >
< 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 - l i s t - i t e m - t i t l e >
< 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 - t o o l t i p >
< / template >
< / v - l i s t - i t e m >
< 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 - l i s t - i t e m - t i t l e >
< / v - l i s t - i t e m >
< / v - l i s t - g r o u p >
< 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 - l i s t - i t e m >
< / 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 - l i s t - i t e m - t i t l e >
< 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 - t o o l t i p >
< / template >
< / v - l i s t - i t e m >
< 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 - l i s t - i t e m - t i t l e >
< 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 - t o o l t i p >
< / template >
< / v - l i s t - i t e m >
< 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 - l i s t - i t e m - t i t l e >
< / v - l i s t - i t e m >
< 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 - l i s t - i t e m - t i t l e >
< 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 - t o o l t i p >
< / template >
< / v - l i s t - i t e m >
< / v - l i s t - g r o u p >
< 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 - l i s t - i t e m >
< / 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 - l i s t - i t e m - t i t l e >
< 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 - t o o l t i p >
< / template >
< / v - l i s t - i t e m >
< 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 - l i s t - i t e m - t i t l e >
< 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 - t o o l t i p >
< / template >
< / v - l i s t - i t e m >
< 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 - l i s t - i t e m - t i t l e >
< 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 - t o o l t i p >
< / template >
< / v - l i s t - i t e m >
< 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 - l i s t - i t e m - t i t l e >
< / v - l i s t - i t e m >
< 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 - l i s t - i t e m - t i t l e >
< 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 - t o o l t i p >
< / template >
< / v - l i s t - i t e m >
< 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 - l i s t - i t e m - t i t l e >
< / v - l i s t - i t e m >
< / v - l i s t - g r o u p >
< v -list -subheader color = "primary" > { { $t ( 'drawer.acc_store_tools' ) } } < / v - l i s t - s u b h e a d e r >
< 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 - l i s t - i t e m >
< / 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 - l i s t - i t e m - t i t l e >
< 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 - t o o l t i p >
< / template >
< / v - l i s t - i t e m >
< 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 - l i s t - i t e m - t i t l e >
< 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 - t o o l t i p >
< / template >
< / v - l i s t - i t e m >
< 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 - l i s t - i t e m - t i t l e >
< / v - l i s t - i t e m >
< / v - l i s t - g r o u p >
< 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 - l i s t - i t e m >
< / 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 - l i s t - i t e m - t i t l e >
< 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 - t o o l t i p >
< / template >
< / v - l i s t - i t e m >
< 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 - l i s t - i t e m - t i t l e >
< 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 - t o o l t i p >
< / template >
< / v - l i s t - i t e m >
< 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 - l i s t - i t e m - t i t l e >
< 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 - t o o l t i p >
< / template >
< / v - l i s t - i t e m >
< / v - l i s t - g r o u p >
< 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 - l i s t - i t e m >
< / 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 - l i s t - i t e m - t i t l e >
< / v - l i s t - i t e m >
< 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 - l i s t - i t e m - t i t l e >
< 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 - t o o l t i p >
< / template >
< / v - l i s t - i t e m >
< 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 - l i s t - i t e m - t i t l e >
< 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 - t o o l t i p >
< / template >
< / v - l i s t - i t e m >
< 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 - l i s t - i t e m - t i t l e >
< 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 - t o o l t i p >
< / template >
< / v - l i s t - i t e m >
< 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 - l i s t - i t e m - t i t l e >
< 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 - t o o l t i p >
< / template >
< / v - l i s t - i t e m >
< / v - l i s t - g r o u p >
< 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 - l i s t - i t e m >
< / 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 - l i s t - i t e m - t i t l e >
< 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 - t o o l t i p >
-- >
< / template >
< / v - l i s t - i t e m >
< 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 - l i s t - i t e m - t i t l e >
< / v - l i s t - i t e m >
< 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 - l i s t - i t e m - t i t l e >
< / v - l i s t - i t e m >
< 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 - l i s t - i t e m - t i t l e >
< / v - l i s t - i t e m >
< / v - l i s t - g r o u p >
< v -list -item v-show ="permissions.report" to="/acc/reports/list" >
< template v -slot : prepend > < v -icon icon = "mdi-poll" > < / v - i c o n > < / t e m p l a t e >
< v -list -item -title >
{ { $t ( 'drawer.reports' ) } }
< span v-if ="isCtrlShiftPressed" class="shortcut-key" > {{ getShortcutKey ( ' / acc / reports / list ' ) }} < / span >
< / v - l i s t - i t e m - t i t l e >
< / v - l i s t - i t e m >
< v -list -subheader color = "primary" > { { $t ( 'drawer.settings' ) } } < / v - l i s t - s u b h e a d e r >
< 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 - l i s t - i t e m >
< / 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 - l i s t - i t e m - t i t l e >
< / v - l i s t - i t e m >
< 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 - l i s t - i t e m - t i t l e >
< / v - l i s t - i t e m >
< 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 - l i s t - i t e m - t i t l e >
< / v - l i s t - i t e m >
< 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 - l i s t - i t e m - t i t l e >
< / v - l i s t - i t e m >
< 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 - l i s t - i t e m - t i t l e >
< / v - l i s t - i t e m >
< 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 - l i s t - i t e m - t i t l e >
< / v - l i s t - i t e m >
< 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 - l i s t - i t e m - t i t l e >
< / v - l i s t - i t e m >
< v -list -item class = "text-danger" v -if = " permissions.owner " @click ="deleteBusiness()"
: title = "$t('drawer.bid_delete')" >
< / v - l i s t - i t e m >
< / v - l i s t - g r o u p >
< v -list -subheader color = "primary" > { { $t ( 'drawer.services' ) } } < / v - l i s t - s u b h e a d e r >
< 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 - i c o n > < / t e m p l a t e >
< / v - l i s t - i t e m >
< / 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 - l i s t - i t e m - t i t l e >
< 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 - t o o l t i p >
< / template >
< / v - l i s t - i t e m >
< / v - l i s t - g r o u p >
< 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 - i c o n > < / t e m p l a t e >
< v -list -item -title >
{ { $t ( 'drawer.sms_panel' ) } }
< span v-if ="isCtrlShiftPressed" class="shortcut-key" > {{ getShortcutKey ( ' / acc / sms / panel ' ) }} < / span >
< / v - l i s t - i t e m - t i t l e >
< / v - l i s t - i t e m >
< 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 - i c o n > < / t e m p l a t e >
< v -list -item -title >
{ { $t ( 'drawer.cloud_printers' ) } }
< span v-if ="isCtrlShiftPressed" class="shortcut-key" > {{ getShortcutKey ( ' / acc / printers / list ' ) }} < / span >
< / v - l i s t - i t e m - t i t l e >
< / v - l i s t - i t e m >
< 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 - i c o n > < / t e m p l a t e >
< / v - l i s t - i t e m >
< / 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 - l i s t - i t e m - t i t l e >
< / v - l i s t - i t e m >
< 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 - l i s t - i t e m - t i t l e >
< / v - l i s t - i t e m >
< 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 - l i s t - i t e m - t i t l e >
< / v - l i s t - i t e m >
< / v - l i s t - g r o u p >
< 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 - i c o n > < / t e m p l a t e >
< / v - l i s t - i t e m >
< / template >
< v -list -item v-if ="permissions.owner" to="/acc/package/order/new" >
< v -list -item -title >
{ { $t ( 'drawer.archive_order' ) } }
< / v - l i s t - i t e m - t i t l e >
< / v - l i s t - i t e m >
< v -list -item v-if ="permissions.owner" to="/acc/package/order/list" >
< v -list -item -title >
{ { $t ( 'drawer.archive_log' ) } }
< / v - l i s t - i t e m - t i t l e >
< / v - l i s t - i t e m >
< / v - l i s t - g r o u p >
< 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 - i c o n > < / t e m p l a t e >
< / v - l i s t - i t e m >
< / 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 - l i s t - i t e m - t i t l e >
< / v - l i s t - i t e m >
< 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 - l i s t - i t e m - t i t l e >
< / v - l i s t - i t e m >
< 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 - l i s t - i t e m - t i t l e >
< / v - l i s t - i t e m >
< / v - l i s t - g r o u p >
< 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 - i c o n > < / t e m p l a t e >
< v -list -item -title class = "text-white" v -text = " $ t ( ' drawer.exit_bus ' ) " / >
< / v - l i s t - i t e m >
< / v - l i s t >
< / v - n a v i g a t i o n - d r a w e r >
< v -app -bar scroll -behavior = " inverted elevate " scroll -threshold = " 0 " >
< v -app -bar -nav -icon @ click = "drawer = !drawer" > < / v - a p p - b a r - n a v - i c o n >
< v -app -bar -title >
< span class = "d-none d-sm-flex" > { { business . name } } < / span >
< / v - a p p - b a r - t i t l e >
< v -spacer > < / v - s p a c e r >
< v -btn class = "d-none d-sm-flex" stacked @ click = "showShortcutsDialog = true; isEditingShortcuts = false" >
< v -icon > mdi - help - circle < / v - i c o n >
< / v - b t n >
< v -dialog v -model = " showShortcutsDialog " max -width = " 800 " scrollable >
< v -card >
< v -card -title class = "text-h5 pa-4" >
{ { isEditingShortcuts ? 'ویرایش کلیدهای میانبر' : 'راهنمای کلیدهای میانبر' } }
< / v - c a r d - t i t l e >
< 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 - c o l >
< v -col cols = "12" class = "text-right" >
< span > { { shortcut . label } } < / span >
< / v - c o l >
< / v - r o w >
< / div >
< / v - c o l >
< / v - r o w >
< v -alert v-if ="isEditingShortcuts" type="info" dense class="mt-4" >
تغییرات در حافظه مرورگر ذخیره می شود و فقط در این مرورگر قابل استفاده است .
< / v - a l e r t >
< / v - c a r d - t e x t >
< 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 - b t n >
< / v - c a r d - a c t i o n s >
< / v - c a r d >
< / v - d i a l o g >
< v -dialog v-model ="duplicateKeyDialog" max-width="400" >
< v -card >
< v -card -title class = "text-h6" > خطا < / v - c a r d - t i t l e >
< v -card -text > { { duplicateKeyMessage } } < / v - c a r d - t e x t >
< v -card -actions >
< v -btn color = "primary" @ click = "duplicateKeyDialog = false" > بستن < / v - b t n >
< / v - c a r d - a c t i o n s >
< / v - c a r d >
< / v - d i a l o g >
< 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 - t o o l t i p >
< v -bottom -sheet inset >
< template v -slot : activator = "{ props }" >
< v -btn stacked v-bind ="props" > < v -icon > mdi - cog < / v - i c o n > < / v - b t n >
< / 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 - c o l >
< v -col cols = "12" sm = "12" md = "6" >
< Currency_cob / >
< / v - c o l >
< / v - r o w >
< / v - c a r d - t e x t >
< / v - c a r d >
< / v - b o t t o m - s h e e t >
< Notifications_btn / >
< Profile_btn / >
< / v - a p p - b a r >
< v -main >
< div class = "position-relative" >
< RouterView / >
< / div >
< / v - m a i n >
< / template >
< style global >
. shortcut - key {
font - size : 0.75 rem ;
color : # 888 ;
margin - right : 4 px ;
}
. shortcut - hint {
z - index : 1000 ;
}
. shortcut - item {
border : 1 px solid # e0e0e0 ;
border - radius : 4 px ;
background - color : # fafafa ;
}
. shortcut - display {
font - size : 0.9 rem ;
color : # 555 ;
}
. shortcut - input {
max - width : 60 px ;
}
2025-03-22 15:55:28 +03:30
2025-03-21 14:20:43 +03:30
. v - data - table {
overflow - x : auto ;
}
. expanded - row {
background - color : # f5f5f5 ! important ;
padding : 8 px ;
}
. custom - header {
background - color : # 213 e8b ! important ;
color : # ffffff ! important ;
}
< / style >