2026-04-14 17:41:39 +02:00

349 lines
12 KiB
JavaScript

import importTemplate from "../../js/util/importTemplate.js";
export default {
template: await importTemplate("pages/bossmenu/index.html"),
data: () => ({
currentBossPage: 'ranks',
editPermissions: false,
myRank: {},
inventoryInputAmount: null,
hirePlayerId: null,
selectedEmployee: false,
selectedRank: false,
moneyAmount: null,
filterLog : '',
}),
watch: {
playerInventory() {
this.RefreshDragDrop()
},
bossInventory() {
this.RefreshDragDrop()
},
employees(data) {
if (this.selectedEmployee) {
let found = false
data.forEach(el => {
if (el.identifier == this.selectedEmployee.identifier) {
this.selectedEmployee = el
found = true
}
});
if (!found) {
this.selectedEmployee = false
}
}
},
ranks(data) {
if (this.selectedRank) {
let found = false
data.forEach(el => {
if (el.grade == this.selectedRank.grade) {
this.selectedRank = el
found = true
}
});
if (!found) {
this.selectedRank = false
}
}
}
},
methods: {
DepositMoney() {
if (!isNaN(this.moneyAmount) && this.moneyAmount > 0) {
postNUI("DepositMoney", {
amount: this.moneyAmount
})
}
},
CheckPermission(name) {
if (this.myRank.isBoss || this.myRank.permissions[name]) {
return true
}
return false
},
WithdrawMoney() {
if (!isNaN(this.moneyAmount) && this.moneyAmount > 0) {
postNUI("WithdrawMoney", {
amount: this.moneyAmount
})
}
},
PromotePlayer() {
if (this.selectedEmployee) {
postNUI("PromotePlayer", {
identifier: this.selectedEmployee.identifier
})
}
},
GetEmployeesInRank(grade) {
return this.employees.filter((employee) => {
return employee.grade_level == grade
})
},
DemotePlayer() {
if (this.selectedEmployee) {
postNUI("DemotePlayer", {
identifier: this.selectedEmployee.identifier
})
}
},
FirePlayer() {
if (this.selectedEmployee) {
postNUI("FirePlayer", {
identifier: this.selectedEmployee.identifier
})
}
},
SelectEmployee(data) {
if (this.CheckPermission() == false) {
this.$store.dispatch("notification", this.locales.NOT_ALLOWED);
return
}
if (this.selectedEmployee && this.selectedEmployee.identifier == data.identifier) {
this.selectedEmployee = false
return
}
this.selectedEmployee = data
},
eventHandler(event) {
switch (event.data.action) {
case "mechanicCategoryResult":
// this.mechanicCategoryItemName = this.mechanicCategoryData[event.data.payload.modId];
// this.mechanicCategoryItemName.count = event.data.payload.count;
break;
case "SET_MY_RANK":
this.myRank = event.data.payload
break
default:
break;
}
},
SecondsToDate(seconds, includeHours) {
const date = new Date(null);
date.setSeconds(seconds); // specify value for SECONDS here
let day = date.getDate()
let month = date.getMonth() + 1
let hours = date.getHours()
let minutes = date.getMinutes()
if (minutes < 10) {
minutes = '0' + minutes
}
if (hours < 10) {
hours = '0' + hours
}
if (day < 10) {
day = '0' + day
}
if (month < 10) {
month = '0' + month
}
let formattedClock = `${hours}:${minutes}`
return `${day}.${month}.${date.getFullYear()} ${includeHours ? formattedClock : ''}`
},
ItemImage(item) {
return `${this.itemImagesFolder}${item.image}`
},
GetAccessText(permissions, isBoss){
let hasAllAccess = true
if(!isBoss){
if(Object.keys(permissions).length < 7){
hasAllAccess = false
}
for(let key in permissions){
let permission = permissions[key]
if(!permission){
hasAllAccess = false
}
}
}
return hasAllAccess ? this.locales.ALL_ACCESS : this.locales.PARTIAL_ACCESS
},
setCurrentBossPage(payload) {
if (payload == 'ranks') {
if (!this.CheckPermission('accessRanks')) {
this.$store.dispatch("notification", this.locales.NOT_ALLOWED);
return
}
}
if (payload == 'employees') {
if (!this.CheckPermission('accessEmployees')) {
this.$store.dispatch("notification", this.locales.NOT_ALLOWED);
return
}
}
if (payload == 'logs') {
if (!this.CheckPermission('accessLogs')) {
this.$store.dispatch("notification", this.locales.NOT_ALLOWED);
return
}
}
this.currentBossPage = payload
if (payload == 'inventory') {
this.RefreshDragDrop()
}
},
HireNewPlayer() {
postNUI("HireNewPlayer", {
id: this.hirePlayerId
})
},
TogglePermission(checked, permissionName) {
postNUI("ChangePermission", {
allow: checked,
permissionName,
rankLevel: this.selectedRank.grade,
})
},
SelectRank(rank) {
this.selectedEmployee = false
this.editPermissions = false
if (this.selectedRank && this.selectedRank.grade == rank.grade) {
this.selectedRank = false
return
}
this.selectedRank = rank
},
ToggleEditPermissions(val) {
if (this.CheckPermission() == false) {
this.$store.dispatch("notification", this.locales.NOT_ALLOWED);
return
}
if (this.selectedRank.isBoss) {
this.$store.dispatch("notification", this.locales.CANT_EDIT_PERMISSON);
return
}
this.editPermissions = val
},
RefreshDragDrop() {
Vue.nextTick(() => {
$('.player-item').draggable({
helper: "clone",
appendTo: "body",
scroll: false,
start: (event, ui) => {
$(ui.helper).css('width', `${$(event.target).width()}px`);
},
drag: function (event, ui) {
},
stop: (event, ui) => {
}
});
$('.boss-item').draggable({
helper: "clone",
appendTo: "body",
scroll: false,
start: (event, ui) => {
$(ui.helper).css('width', `${$(event.target).width()}px`);
},
drag: function (event, ui) {
},
stop: (event, ui) => {
}
});
$(".boss-slots").droppable({
accept: ".player-item",
drop: (event, ui) => {
if ($(ui.helper).attr('item-data') && this.inventoryInputAmount >= 0 && parseInt(this.inventoryInputAmount)) {
const item = JSON.parse($(ui.helper).attr('item-data'))
postNUI("DragItem", {
fromInv: 'player',
amount: this.inventoryInputAmount || item.amount,
name: item.name,
metadata: item.metadata,
slot: item.slot,
label: item.label,
image: item.image,
});
}else {
this.$store.dispatch("notification", this.locales.NOT_ALLOWED);
}
}
})
$(".player-slots").droppable({
accept: ".boss-item",
drop: (event, ui) => {
if ($(ui.helper).attr('item-data') && this.inventoryInputAmount >= 0 && parseInt(this.inventoryInputAmount)) {
const item = JSON.parse($(ui.helper).attr('item-data'))
postNUI("DragItem", {
fromInv: 'boss',
amount: this.inventoryInputAmount || item.amount,
name: item.name,
metadata: item.metadata,
label: item.label,
image: item.image,
});
}else {
this.$store.dispatch("notification", this.locales.NOT_ALLOWED);
}
}
})
})
},
FormatMoney(x) {
return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
},
},
computed: {
...Vuex.mapState({
playerInventory: state => state.bossmenuPage.playerInventory,
bossInventory: state => state.bossmenuPage.bossInventory,
itemImagesFolder: state => state.bossmenuPage.itemImagesFolder,
employees: state => state.bossmenuPage.employees,
ranks: state => state.bossmenuPage.ranks,
money: state => state.bossmenuPage.money,
logs : state => state.bossmenuPage.logs,
locales : state => state.locales,
}),
getFilteredLogs(){
if(this.filterLog.length > 0){
return this.logs.filter((log) => log.message.toLowerCase().includes(this.filterLog.toLowerCase()))
}
return this.logs
},
},
mounted() {
window.addEventListener("message", this.eventHandler);
},
beforeDestroy() {
window.removeEventListener("message", this.eventHandler);
}
};