Add named teams and per-user data visibility (own/team/org) with settings UI and org module.
This commit is contained in:
@@ -23,8 +23,9 @@ import {
|
||||
formatJalaliNumeric,
|
||||
toFaDigits,
|
||||
} from '@/lib/jalali';
|
||||
import TeamsSettingsPanel from '@/components/TeamsSettingsPanel.vue';
|
||||
|
||||
type TabKey = 'users' | 'roles' | 'access';
|
||||
type TabKey = 'users' | 'roles' | 'access' | 'teams';
|
||||
type RoleColor = 'teal' | 'violet' | 'rose' | 'sky' | 'amber' | 'slate' | 'pink';
|
||||
|
||||
const PAGE_SIZE = 10;
|
||||
@@ -154,12 +155,20 @@ const inviteableRoles = computed(() =>
|
||||
function tabFromHash(hash: string): TabKey {
|
||||
if (hash.includes('settings-org') || hash.includes('access')) return 'access';
|
||||
if (hash.includes('roles')) return 'roles';
|
||||
if (hash.includes('teams') || hash.includes('settings-teams')) return 'teams';
|
||||
return 'users';
|
||||
}
|
||||
|
||||
function setTab(next: TabKey) {
|
||||
tab.value = next;
|
||||
const hash = next === 'access' ? 'settings-org' : next === 'roles' ? 'roles' : 'settings-team';
|
||||
const hash =
|
||||
next === 'access'
|
||||
? 'settings-org'
|
||||
: next === 'roles'
|
||||
? 'roles'
|
||||
: next === 'teams'
|
||||
? 'settings-teams'
|
||||
: 'settings-team';
|
||||
if (route.hash.replace('#', '') !== hash) {
|
||||
void router.replace({ hash: `#${hash}` });
|
||||
}
|
||||
@@ -501,12 +510,20 @@ onUnmounted(() => {
|
||||
<nav class="tabs" aria-label="بخشهای مدیریت کاربران">
|
||||
<button type="button" :class="{ on: tab === 'users' }" @click="setTab('users')">لیست کاربران</button>
|
||||
<button type="button" :class="{ on: tab === 'roles' }" @click="setTab('roles')">نقشها</button>
|
||||
<button type="button" :class="{ on: tab === 'teams' }" @click="setTab('teams')">تیمها و دیدپذیری</button>
|
||||
<button type="button" :class="{ on: tab === 'access' }" @click="setTab('access')">تنظیمات دسترسی</button>
|
||||
</nav>
|
||||
|
||||
<p v-if="error" class="error">{{ error }}</p>
|
||||
<p v-if="ok" class="ok">{{ ok }}</p>
|
||||
|
||||
<TeamsSettingsPanel
|
||||
v-if="tab === 'teams'"
|
||||
:users="users"
|
||||
:can-edit="canInvite"
|
||||
@refresh-users="load"
|
||||
/>
|
||||
|
||||
<div v-if="tab === 'access'" class="access-wrap">
|
||||
<section class="card org-card">
|
||||
<h2>سازمان</h2>
|
||||
@@ -597,7 +614,7 @@ onUnmounted(() => {
|
||||
</section>
|
||||
</div>
|
||||
|
||||
<div v-else class="stage" :class="{ 'panel-open': Boolean(selectedRole) }">
|
||||
<div v-else-if="tab === 'users' || tab === 'roles'" class="stage" :class="{ 'panel-open': Boolean(selectedRole) }">
|
||||
<aside v-if="selectedRole" class="role-panel" :class="{ sheet: isNarrow }">
|
||||
<div v-if="isNarrow" class="sheet-handle" />
|
||||
<header class="panel-head">
|
||||
|
||||
Reference in New Issue
Block a user