|
|
@@ -157,6 +157,36 @@
|
|
|
<span>{{ project.create_time }}</span>
|
|
|
</div>
|
|
|
</div>
|
|
|
+
|
|
|
+ <!-- 项目邀请成员 -->
|
|
|
+ <div class="project-invite-members">
|
|
|
+ <div class="invite-list-top">
|
|
|
+ <span class="title">项目邀请成员</span>
|
|
|
+ <span class="link" @click="visibleInvitePerson = true">邀请其它机构成员</span>
|
|
|
+ </div>
|
|
|
+ <div class="invite-list-header">
|
|
|
+ <span>序号</span>
|
|
|
+ <span>姓名</span>
|
|
|
+ <span>所属机构</span>
|
|
|
+ <span>邀请时间</span>
|
|
|
+ <span>回复结果</span>
|
|
|
+ <span>回复时间</span>
|
|
|
+ <span>操作</span>
|
|
|
+ </div>
|
|
|
+ <div class="invite-list">
|
|
|
+ <div v-for="(person, index) in invitePersonList" :key="index" class="invite-list-item">
|
|
|
+ <span>{{ index + 1 }}</span>
|
|
|
+ <span>{{ person.user_real_name }}</span>
|
|
|
+ <span>{{ person.user_org_name }}</span>
|
|
|
+ <span>{{ person.create_time }}</span>
|
|
|
+ <span>{{ replyResultMap[person.reply_result] }}</span>
|
|
|
+ <span>{{ person.reply_time }}</span>
|
|
|
+ <span>
|
|
|
+ <span class="link" @click="deleteProjectInvitePerson(person.id)">删除</span>
|
|
|
+ </span>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
</main>
|
|
|
|
|
|
<SelectMembers
|
|
|
@@ -173,6 +203,7 @@
|
|
|
:value="curFieldValue"
|
|
|
@updateProjectFieldValue="updateProjectFieldValue"
|
|
|
/>
|
|
|
+ <InvitePerson :visible.sync="visibleInvitePerson" @invitePerson="handleInvitePerson" />
|
|
|
</div>
|
|
|
</template>
|
|
|
|
|
|
@@ -183,6 +214,9 @@ import {
|
|
|
SetProjectLeader,
|
|
|
UpdateProjectFieldValue,
|
|
|
SetProjectLabel,
|
|
|
+ InvitePersonJoinProject,
|
|
|
+ GetProjectInvitePersonList,
|
|
|
+ DeleteProjectInvitePerson,
|
|
|
} from '@/api/project';
|
|
|
import { GetUserList_ID } from '@/api/user';
|
|
|
|
|
|
@@ -190,6 +224,7 @@ import SelectMembers from '@/views/create_project/selectProjectMembers.vue';
|
|
|
import MenuPage from '@/views/personal_workbench/common/menu.vue';
|
|
|
import UpdateProjectField from './components/UpdateProjectField.vue';
|
|
|
import ProjectMenu from '@/views/project_manage/common/ProjectMenu.vue';
|
|
|
+import InvitePerson from './components/InvitePerson.vue';
|
|
|
|
|
|
export default {
|
|
|
name: 'ProjectInfoManage',
|
|
|
@@ -198,6 +233,7 @@ export default {
|
|
|
MenuPage,
|
|
|
UpdateProjectField,
|
|
|
ProjectMenu,
|
|
|
+ InvitePerson,
|
|
|
},
|
|
|
data() {
|
|
|
return {
|
|
|
@@ -239,10 +275,14 @@ export default {
|
|
|
visibleUpdateField: false,
|
|
|
curField: '',
|
|
|
curFieldValue: '',
|
|
|
+ invitePersonList: [], // 项目邀请成员列表
|
|
|
+ replyResultMap: ['未回复', '同意', '不同意'], // 回复结果映射关系
|
|
|
+ visibleInvitePerson: false, // 是否显示邀请成员对话框
|
|
|
};
|
|
|
},
|
|
|
created() {
|
|
|
this.getProjectInfo();
|
|
|
+ this.getProjectInvitePersonList();
|
|
|
},
|
|
|
methods: {
|
|
|
getProjectInfo() {
|
|
|
@@ -354,6 +394,34 @@ export default {
|
|
|
this.getProjectInfo();
|
|
|
});
|
|
|
},
|
|
|
+ getProjectInvitePersonList() {
|
|
|
+ GetProjectInvitePersonList({ project_id: this.id }).then(({ invite_person_list }) => {
|
|
|
+ this.invitePersonList = invite_person_list;
|
|
|
+ });
|
|
|
+ },
|
|
|
+ /**
|
|
|
+ * 删除项目邀请成员
|
|
|
+ * @param {number} id - 邀请ID
|
|
|
+ */
|
|
|
+ deleteProjectInvitePerson(id) {
|
|
|
+ DeleteProjectInvitePerson({ id }).then(() => {
|
|
|
+ this.$message.success('邀请人删除成功');
|
|
|
+ this.getProjectInvitePersonList();
|
|
|
+ });
|
|
|
+ },
|
|
|
+ /**
|
|
|
+ * 处理邀请成员加入项目
|
|
|
+ * @param {string[]} user_id_list - 邀请的用户ID列表
|
|
|
+ */
|
|
|
+ handleInvitePerson(user_id_list) {
|
|
|
+ InvitePersonJoinProject({
|
|
|
+ project_id: this.id,
|
|
|
+ user_id_list,
|
|
|
+ }).then(() => {
|
|
|
+ this.$message.success('邀请发送成功');
|
|
|
+ this.getProjectInvitePersonList();
|
|
|
+ });
|
|
|
+ },
|
|
|
},
|
|
|
};
|
|
|
</script>
|
|
|
@@ -462,5 +530,77 @@ export default {
|
|
|
grid-template-columns: 120px 1fr;
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ .project-invite-members {
|
|
|
+ display: flex;
|
|
|
+ flex-direction: column;
|
|
|
+ margin-top: 24px;
|
|
|
+
|
|
|
+ .invite-list-top {
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ justify-content: space-between;
|
|
|
+ padding: 8px 12px;
|
|
|
+ background-color: $fill-color;
|
|
|
+ border-bottom: $border;
|
|
|
+ }
|
|
|
+
|
|
|
+ @mixin column-width {
|
|
|
+ span {
|
|
|
+ padding: 8px 12px;
|
|
|
+
|
|
|
+ &:first-child {
|
|
|
+ width: 55px;
|
|
|
+ }
|
|
|
+
|
|
|
+ &:nth-child(2) {
|
|
|
+ width: 140px;
|
|
|
+ }
|
|
|
+
|
|
|
+ &:nth-child(3) {
|
|
|
+ width: 260px;
|
|
|
+ }
|
|
|
+
|
|
|
+ &:nth-child(4) {
|
|
|
+ width: 200px;
|
|
|
+ }
|
|
|
+
|
|
|
+ &:nth-child(5) {
|
|
|
+ width: 100px;
|
|
|
+ }
|
|
|
+
|
|
|
+ &:nth-child(6) {
|
|
|
+ width: 200px;
|
|
|
+ }
|
|
|
+
|
|
|
+ &:last-child {
|
|
|
+ flex: 1;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .invite-list-header {
|
|
|
+ display: flex;
|
|
|
+ font-size: 14px;
|
|
|
+ font-weight: bold;
|
|
|
+ text-align: center;
|
|
|
+ background-color: $main-background-color;
|
|
|
+ border-bottom: $border;
|
|
|
+
|
|
|
+ @include column-width;
|
|
|
+ }
|
|
|
+
|
|
|
+ .invite-list {
|
|
|
+ .invite-list-item {
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ justify-content: center;
|
|
|
+ text-align: center;
|
|
|
+ border-bottom: $border;
|
|
|
+
|
|
|
+ @include column-width;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
</style>
|