250250 >
251251 <div class =" flex items-center justify-between" >
252252 <div class =" flex-1" >
253- <div class =" flex items-center mb-2" >
254- <h4 class =" text-base font-medium text-gray-100 mr-3 " >{{ server.name }}</h4 >
253+ <div class =" flex items-center mb-2 flex-wrap gap-2 " >
254+ <h4 class =" text-base font-medium text-gray-100" >{{ server.name }}</h4 >
255255 <span
256256 :class =" [
257257 'px-2 py-1 text-xs font-medium rounded-full',
262262 >
263263 {{ server.whitelist ? 'Whitelist' : 'Public' }}
264264 </span >
265+ <span
266+ v-if =" server.password"
267+ class =" px-2 py-1 text-xs font-medium rounded-full bg-orange-900 text-orange-400"
268+ title =" Password Protected"
269+ >
270+ Password
271+ </span >
272+ <span
273+ v-if =" server.vac_secure"
274+ class =" px-2 py-1 text-xs font-medium rounded-full bg-blue-900 text-blue-400"
275+ title =" VAC Secure"
276+ >
277+ VAC
278+ </span >
265279 </div >
266280 <div class =" flex items-center" >
267281 <span
340354 </div >
341355
342356 <div class =" mb-6" >
343- <label class =" flex items-center" >
344- <input
345- v-model =" serverForm.whitelist"
346- type =" checkbox"
347- class =" rounded border-main-600 text-green-500 bg-main-900 focus:outline-none focus:ring-0"
348- />
349- <span class =" ml-2 text-sm text-gray-200" >Whitelist Only</span >
350- </label >
351- <p class =" text-xs text-gray-400 mt-1" >If enabled, only whitelisted players can access this server</p >
357+ <div class =" space-y-3" >
358+ <div >
359+ <label class =" flex items-center" >
360+ <input
361+ v-model =" serverForm.whitelist"
362+ type =" checkbox"
363+ class =" rounded border-main-600 text-green-500 bg-main-900 focus:outline-none focus:ring-0"
364+ />
365+ <span class =" ml-2 text-sm text-gray-200" >Whitelist Only</span >
366+ </label >
367+ <p class =" text-xs text-gray-400 mt-1 ml-6" >If enabled, only whitelisted players can access this server</p >
368+ </div >
369+
370+ <div >
371+ <label class =" flex items-center" >
372+ <input
373+ v-model =" serverForm.password"
374+ type =" checkbox"
375+ class =" rounded border-main-600 text-green-500 bg-main-900 focus:outline-none focus:ring-0"
376+ />
377+ <span class =" ml-2 text-sm text-gray-200" >Password Protected</span >
378+ </label >
379+ <p class =" text-xs text-gray-400 mt-1 ml-6" >Server requires a password to join</p >
380+ </div >
381+
382+ <div >
383+ <label class =" flex items-center" >
384+ <input
385+ v-model =" serverForm.vac_secure"
386+ type =" checkbox"
387+ class =" rounded border-main-600 text-green-500 bg-main-900 focus:outline-none focus:ring-0"
388+ />
389+ <span class =" ml-2 text-sm text-gray-200" >VAC Secure</span >
390+ </label >
391+ <p class =" text-xs text-gray-400 mt-1 ml-6" >Server has Valve Anti-Cheat enabled</p >
392+ </div >
393+ </div >
352394 </div >
353395
354396 <div class =" flex justify-end space-x-3" >
@@ -451,7 +493,7 @@ const { user } = useAuth();
451493const canEdit = computed (() => {
452494 if (! user .value ) return false ;
453495 // Check if user is the owner or has admin permissions
454- return user .value .steam_id === props .server .user .steam_id || user .value .permissions > 0 ;
496+ return ( props . server . user && user .value .steam_id === props .server .user .steam_id ) || user .value .permissions > 0 ;
455497});
456498
457499// Check if user has admin permissions for API key management
@@ -460,7 +502,7 @@ const canManageKeys = computed(() => {
460502});
461503
462504// Reactive data
463- const localServers = ref <ServerInfo []>([... ( props .server .servers || []) ]);
505+ const localServers = ref <ServerInfo []>(Array . isArray ( props . server . servers ) ? [... props .server .servers ] : [ ]);
464506const editing = ref ({
465507 name: false ,
466508 owner: false
@@ -483,7 +525,9 @@ const editingServerIndex = ref(-1);
483525const serverForm = ref ({
484526 name: ' ' ,
485527 ip: ' ' ,
486- whitelist: false
528+ whitelist: false ,
529+ password: false ,
530+ vac_secure: false
487531});
488532
489533// Toast state
@@ -508,9 +552,11 @@ const editKeyForm = ref({
508552
509553// Watch for server prop changes
510554watch (() => props .server , (newServer ) => {
511- localServers .value = [... (newServer .servers || [])];
512- editForm .value .name = newServer .name ;
513- editForm .value .owner = newServer .user ?.steam_id || ' ' ;
555+ if (newServer ) {
556+ localServers .value = Array .isArray (newServer .servers ) ? [... newServer .servers ] : [];
557+ editForm .value .name = newServer .name || ' ' ;
558+ editForm .value .owner = newServer .user ?.steam_id || ' ' ;
559+ }
514560}, { deep: true });
515561
516562// Methods
@@ -570,7 +616,9 @@ const addServer = () => {
570616 serverForm .value = {
571617 name: ' ' ,
572618 ip: ' ' ,
573- whitelist: false
619+ whitelist: false ,
620+ password: false ,
621+ vac_secure: false
574622 };
575623 showServerModal .value = true ;
576624};
@@ -581,7 +629,9 @@ const editServer = (index: number) => {
581629 serverForm .value = {
582630 name: server .name ,
583631 ip: server .ip ,
584- whitelist: server .whitelist
632+ whitelist: server .whitelist ,
633+ password: server .password ,
634+ vac_secure: server .vac_secure
585635 };
586636 showServerModal .value = true ;
587637};
@@ -592,7 +642,9 @@ const closeServerModal = () => {
592642 serverForm .value = {
593643 name: ' ' ,
594644 ip: ' ' ,
595- whitelist: false
645+ whitelist: false ,
646+ password: false ,
647+ vac_secure: false
596648 };
597649};
598650
0 commit comments