|
|
@@ -3,31 +3,20 @@
|
|
|
<ElMenuItem class="menu-logo" index="logo" disabled>
|
|
|
LOGO
|
|
|
</ElMenuItem>
|
|
|
- <ElSubmenu index="group">
|
|
|
- <template #title>{{selectedGroup.name}}</template>
|
|
|
- <template v-if="groupList.length > 0">
|
|
|
- <ElMenuItem v-for="group in groupList" :key="group.id" :index="`group-${group.id}`">{{group.name}}</ElMenuItem>
|
|
|
- </template>
|
|
|
- <template v-else>
|
|
|
- <ElMenuItem disabled>暂未加入任何小组</ElMenuItem>
|
|
|
- </template>
|
|
|
- </ElSubmenu>
|
|
|
<ElSubmenu index="project">
|
|
|
<template #title>{{selectedProject.name}}</template>
|
|
|
<template v-if="projectList.length > 0">
|
|
|
<ElMenuItem v-for="project in projectList" :key="project.id" :index="`project-${project.id}`">{{project.name}}</ElMenuItem>
|
|
|
</template>
|
|
|
- <template v-else-if="selectedGroup.id === -1">
|
|
|
- <ElMenuItem disabled>请先选择小组</ElMenuItem>
|
|
|
- </template>
|
|
|
<template v-else>
|
|
|
- <ElMenuItem disabled>该小组暂无项目</ElMenuItem>
|
|
|
+ <ElMenuItem disabled>暂无项目</ElMenuItem>
|
|
|
</template>
|
|
|
</ElSubmenu>
|
|
|
<template v-if="userLoggedIn">
|
|
|
<ElSubmenu index="user" class="user">
|
|
|
<template #title>{{userInfo.username}}</template>
|
|
|
- <ElMenuItem index="user-group">创建小组 / 邀请成员</ElMenuItem>
|
|
|
+ <ElMenuItem index="user-project">创建项目</ElMenuItem>
|
|
|
+ <ElMenuItem index="user-invite">邀请成员</ElMenuItem>
|
|
|
<ElMenuItem index="user-logout">登出</ElMenuItem>
|
|
|
</ElSubmenu>
|
|
|
</template>
|
|
|
@@ -35,35 +24,48 @@
|
|
|
<ElLink type="primary" href="/login" class="user">登录</ElLink>
|
|
|
</template>
|
|
|
</ElMenu>
|
|
|
- <ElDrawer v-model="showGroupDrawer" style="width:400px;">
|
|
|
- <template #title><span>创建小组 / 邀请成员</span></template>
|
|
|
- <ElRow type="flex" justify="center">
|
|
|
- <ElCol :span="24">
|
|
|
- <ElDivider content-position="left">创建小组</ElDivider>
|
|
|
- <ElForm :inline="true" :model="createGroupForm">
|
|
|
- <ElFormItem label="组名" prop="groupName">
|
|
|
- <ElInput v-model="createGroupForm.groupName" placeholder="请输入要创建的小组名"></ElInput>
|
|
|
- </ElFormItem>
|
|
|
- <ElFormItem>
|
|
|
- <ElButton @click="createGroup" type="primary">创建</ElButton>
|
|
|
- </ElFormItem>
|
|
|
- </ElForm>
|
|
|
- <ElDivider content-position="left">邀请成员</ElDivider>
|
|
|
- <ElForm :model="inviteGroupForm" label-width="72px">
|
|
|
- <ElFormItem label="小组" prop="groupId">
|
|
|
- <ElSelect v-model="inviteGroupForm.groupId" placeholder="请选择成员将要加入的小组">
|
|
|
- <ElOption v-for="group in groupList" :key="group.id" :value="group.id" :label="group.name"></ElOption>
|
|
|
- </ElSelect>
|
|
|
+ <ElDrawer v-model="showProjectDrawer">
|
|
|
+ <template #title><span>创建项目</span></template>
|
|
|
+ <div class="drawer-content">
|
|
|
+ <div class="form-container">
|
|
|
+ <ElForm :model="createProjectForm">
|
|
|
+ <ElFormItem label="项目名" prop="name">
|
|
|
+ <ElInput v-model="createProjectForm.name" placeholder="请输入要创建的项目名"></ElInput>
|
|
|
</ElFormItem>
|
|
|
- <ElFormItem label="手机号" prop="phone">
|
|
|
- <ElInput v-model="inviteGroupForm.phone" placeholder="请输入成员注册所用手机号"></ElInput>
|
|
|
+ <ElFormItem label="项目描述" prop="description">
|
|
|
+ <ElInput
|
|
|
+ v-model="createProjectForm.description"
|
|
|
+ placeholder="请输入项目描述"
|
|
|
+ type="textarea"
|
|
|
+ :autosize="{ minRows: 3, maxRows: 3}"
|
|
|
+ ></ElInput>
|
|
|
</ElFormItem>
|
|
|
<ElFormItem>
|
|
|
- <ElButton @click="inviteMember" type="primary">邀请</ElButton>
|
|
|
+ <ElButton @click="createProject" type="primary">创建</ElButton>
|
|
|
</ElFormItem>
|
|
|
</ElForm>
|
|
|
- </ElCol>
|
|
|
- </ElRow>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </ElDrawer>
|
|
|
+ <ElDrawer v-model="showInviteDrawer">
|
|
|
+ <template #title><span>邀请成员</span></template>
|
|
|
+ <div class="drawer-content">
|
|
|
+ <div class="form-container">
|
|
|
+ <ElForm :model="inviteProjectForm">
|
|
|
+ <ElFormItem label="项目" prop="projectId">
|
|
|
+ <ElSelect v-model="inviteProjectForm.projectId" placeholder="请选择成员将要加入的项目">
|
|
|
+ <ElOption v-for="project in projectList" :key="project.id" :value="project.id" :label="project.name"></ElOption>
|
|
|
+ </ElSelect>
|
|
|
+ </ElFormItem>
|
|
|
+ <ElFormItem label="手机号" prop="phone">
|
|
|
+ <ElInput v-model="inviteProjectForm.phone" placeholder="请输入成员注册所用手机号"></ElInput>
|
|
|
+ </ElFormItem>
|
|
|
+ <ElFormItem>
|
|
|
+ <ElButton @click="inviteMember" type="primary">邀请</ElButton>
|
|
|
+ </ElFormItem>
|
|
|
+ </ElForm>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
</ElDrawer>
|
|
|
</template>
|
|
|
|
|
|
@@ -71,39 +73,46 @@
|
|
|
import { ElMessage } from 'element-plus';
|
|
|
|
|
|
import { useProjectList } from '@/composable/useProject';
|
|
|
-import { useGroupList } from '@/composable/useGroup';
|
|
|
import { useUser } from '@/composable/useUser';
|
|
|
import { defineComponent, ref, reactive } from 'vue';
|
|
|
-import { UserAPI, PortalAPI } from '@/api';
|
|
|
+import { PortalAPI, ProjectAPI } from '@/api';
|
|
|
|
|
|
export default defineComponent({
|
|
|
name: 'Menu',
|
|
|
setup() {
|
|
|
- const { projectListOfCurrentGroup: projectList, selectedProject, handleProjectChange } = useProjectList();
|
|
|
- const { groupList, selectedGroup, handleGroupChange } = useGroupList();
|
|
|
+ const { projectList, selectedProject, handleProjectChange } = useProjectList();
|
|
|
const { userInfo, userLoggedIn, userLogOut } = useUser();
|
|
|
|
|
|
- // TODO: 自定义两个表单验证
|
|
|
- const showGroupDrawer = ref(false);
|
|
|
+ const showProjectDrawer = ref(false);
|
|
|
+ const showInviteDrawer = ref(false);
|
|
|
|
|
|
- const openGroupDrawer = () => {
|
|
|
- showGroupDrawer.value = true;
|
|
|
+ const openProjectDrawer = () => {
|
|
|
+ showProjectDrawer.value = true;
|
|
|
+ };
|
|
|
+ const openInviteDrawer = () => {
|
|
|
+ showInviteDrawer.value = true;
|
|
|
};
|
|
|
- const createGroupForm = reactive({
|
|
|
- groupName: '',
|
|
|
+ const createProjectForm = reactive({
|
|
|
+ name: '',
|
|
|
+ description: '',
|
|
|
});
|
|
|
- const createGroup = () => {
|
|
|
- UserAPI.createGroup(createGroupForm.groupName);
|
|
|
+ const createProject = () => {
|
|
|
+ ProjectAPI.createProject(createProjectForm.name, createProjectForm.description);
|
|
|
};
|
|
|
|
|
|
- const inviteGroupForm = reactive({
|
|
|
- groupId: undefined,
|
|
|
+ interface InviteProjectForm {
|
|
|
+ projectId: undefined | number;
|
|
|
+ phone: string;
|
|
|
+ }
|
|
|
+
|
|
|
+ const inviteProjectForm = reactive<InviteProjectForm>({
|
|
|
+ projectId: undefined,
|
|
|
phone: '',
|
|
|
});
|
|
|
const inviteMember = async () => {
|
|
|
let invitedUserId: number;
|
|
|
|
|
|
- const res = await PortalAPI.getUserIdByPhoneNumber(inviteGroupForm.phone) as unknown as {id: number};
|
|
|
+ const res = await PortalAPI.getUserIdByPhoneNumber(inviteProjectForm.phone) as unknown as {id: number};
|
|
|
|
|
|
if (res) {
|
|
|
invitedUserId = res.id;
|
|
|
@@ -115,8 +124,16 @@ export default defineComponent({
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- UserAPI.addGroupMember({
|
|
|
- groupId: inviteGroupForm.groupId!,
|
|
|
+ if (!inviteProjectForm.projectId) {
|
|
|
+ ElMessage({
|
|
|
+ type: 'error',
|
|
|
+ message: '请选择有效的项目',
|
|
|
+ });
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ ProjectAPI.addProjectMember({
|
|
|
+ projectId: inviteProjectForm.projectId,
|
|
|
invitedUserId,
|
|
|
});
|
|
|
};
|
|
|
@@ -131,13 +148,11 @@ export default defineComponent({
|
|
|
handleProjectChange(parseInt(id, 10));
|
|
|
break;
|
|
|
}
|
|
|
- case 'group': {
|
|
|
- handleGroupChange(parseInt(id, 10));
|
|
|
- break;
|
|
|
- }
|
|
|
case 'user': {
|
|
|
- if (id === 'group') {
|
|
|
- openGroupDrawer();
|
|
|
+ if (id === 'project') {
|
|
|
+ openProjectDrawer();
|
|
|
+ } else if (id === 'invite') {
|
|
|
+ openInviteDrawer();
|
|
|
} else if (id === 'logout') {
|
|
|
userLogOut();
|
|
|
}
|
|
|
@@ -153,19 +168,18 @@ export default defineComponent({
|
|
|
projectList,
|
|
|
selectedProject,
|
|
|
|
|
|
- groupList,
|
|
|
- selectedGroup,
|
|
|
-
|
|
|
handleSelect,
|
|
|
|
|
|
userInfo,
|
|
|
userLoggedIn,
|
|
|
userLogOut,
|
|
|
|
|
|
- showGroupDrawer,
|
|
|
- createGroupForm,
|
|
|
- createGroup,
|
|
|
- inviteGroupForm,
|
|
|
+ showProjectDrawer,
|
|
|
+ showInviteDrawer,
|
|
|
+
|
|
|
+ createProjectForm,
|
|
|
+ createProject,
|
|
|
+ inviteProjectForm,
|
|
|
inviteMember,
|
|
|
};
|
|
|
},
|
|
|
@@ -193,4 +207,11 @@ export default defineComponent({
|
|
|
height: 60px;
|
|
|
margin: 0 20px;
|
|
|
}
|
|
|
+.drawer-content {
|
|
|
+ display: flex;
|
|
|
+ justify-content: center;
|
|
|
+}
|
|
|
+.form-container {
|
|
|
+ width: 80%;
|
|
|
+}
|
|
|
</style>
|