diff --git a/frontend/src/components/ShareDomain/RoleLabel.vue b/frontend/src/components/ShareDomain/RoleLabel.vue
new file mode 100644
index 0000000..7f694de
--- /dev/null
+++ b/frontend/src/components/ShareDomain/RoleLabel.vue
@@ -0,0 +1,19 @@
+
+ 所有者
+ 管理者
+
+
+
diff --git a/frontend/src/components/ShareDomain/ShareDomainDialog.vue b/frontend/src/components/ShareDomain/ShareDomainDialog.vue
index 8922055..0cd5f55 100644
--- a/frontend/src/components/ShareDomain/ShareDomainDialog.vue
+++ b/frontend/src/components/ShareDomain/ShareDomainDialog.vue
@@ -2,7 +2,7 @@
- 「{{domain.name}}」のドメイン利用権限設定
+ {{ dialogTitle }}
@@ -23,7 +23,7 @@
{{ canSharedUserFilter.fullName }} ({{ canSharedUserFilter.email }})
- 所有者
+
@@ -38,18 +38,17 @@
{{scope.opt.email}}
- 所有者
+
-
+
- 所有者
-
+
@@ -74,16 +73,22 @@ import { IDomainOwnerDisplay } from '../../types/DomainTypes';
import { IUser, IUserDisplay } from '../../types/UserTypes';
import { api } from 'boot/axios';
import SharingUserList from 'components/ShareDomain/SharingUserList.vue';
+import RoleLabel from 'components/ShareDomain/RoleLabel.vue';
import { Dialog } from 'quasar'
interface Props {
modelValue: boolean;
domain: IDomainOwnerDisplay;
+ dialogTitle: string;
+ userListTitle: string;
+ shareApi: (user: IUserDisplay, domain: IDomainOwnerDisplay) => Promise;
+ removeSharedApi: (user: IUserDisplay, domain: IDomainOwnerDisplay) => Promise;
+ getSharedApi: (domain: IDomainOwnerDisplay) => Promise;
}
interface IUserDisplayWithShareRole extends IUserDisplay {
isRemoving: boolean;
- role: number; // 2: 所有者,1: 管理者, 0: 利用者
+ role: number;
}
const props = defineProps();
@@ -126,6 +131,9 @@ watch(
loading.value = false;
addLoading.value = false;
if (newValue) {
+ if (Object.keys(allUsers.value).length == 0) {
+ await getUsers();
+ }
await loadShared();
}
}
@@ -167,10 +175,7 @@ const close = () => {
const shareTo = async (user: IUserDisplayWithShareRole) => {
addLoading.value = true;
loading.value = true;
- await api.post(`api/userdomain`, {
- 'userid': user.id,
- 'domainid': props.domain.id
- })
+ await props.shareApi(user, props.domain);
await loadShared();
canSharedUserFilter.value = undefined;
loading.value = false;
@@ -180,7 +185,7 @@ const shareTo = async (user: IUserDisplayWithShareRole) => {
const removeShareTo = async (user: IUserDisplayWithShareRole) => {
loading.value = true;
user.isRemoving = true;
- await api.delete(`api/domain/${props.domain.id}/${user.id}`)
+ await props.removeSharedApi(user, props.domain);
await loadShared();
loading.value = false;
};
@@ -189,10 +194,18 @@ const loadShared = async () => {
loading.value = true;
sharedUsersIdSet.clear();
- const { data } = await api.get(`/api/domainshareduser/${props.domain.id}`);
+ const { data } = await props.getSharedApi(props.domain);
sharedUsers.value = data.data.map((item: IUser) => {
const val = itemToDisplay(item);
sharedUsersIdSet.add(val.id);
+ // for sort
+ if (isOwner(item.id)) {
+ val.role = 2;
+ } else if (isManager(item.id)) {
+ val.role = 1;
+ } else {
+ val.role = 0;
+ }
return val;
}).reverse().sort((a: IUserDisplayWithShareRole, b: IUserDisplayWithShareRole) => b.role - a.role);
@@ -202,24 +215,21 @@ const loadShared = async () => {
loading.value = false;
}
-onMounted(async () => {
- await getUsers();
-})
+function isOwner(userId: number) {
+ return userId === props.domain?.owner?.id
+}
+
+function isManager(userId: number) {
+ return false // TODO
+}
const getUsers = async () => {
- if (Object.keys(allUsers.value).length > 0) {
- return;
- }
loading.value = true;
const result = await api.get(`api/v1/users`);
allUsers.value = result.data.data.map(itemToDisplay);
loading.value = false;
}
-function isOwner(userId: number) {
- return userId === props.domain.owner.id
-}
-
const itemToDisplay = (item: IUser) => {
return {
id: item.id,
@@ -230,9 +240,10 @@ const itemToDisplay = (item: IUser) => {
email: item.email,
isSuperuser: item.is_superuser,
isActive: item.is_active,
- role: isOwner(item.id) ? 2 : 0, // TODO
+ role: 0,
} as IUserDisplayWithShareRole
}
+