diff --git a/ui/src/api/team.ts b/ui/src/api/team.ts index cdc6c3c62..5975022af 100644 --- a/ui/src/api/team.ts +++ b/ui/src/api/team.ts @@ -1,5 +1,5 @@ import { Result } from '@/request/Result' -import { get, post } from '@/request/index' +import { get, post, del } from '@/request/index' import type { TeamMember, TeamMemberRequest } from '@/api/type/team' // import type { Ref } from 'vue' @@ -16,11 +16,20 @@ const getTeamMember: () => Promise> = () => { * 添加成员 * @param 参数 { "username_or_email": "string" } */ -const postCreatTeamMember: (request: TeamMemberRequest) => Promise> = (request) => { - return post(`${prefix}`, request) +const postCreatTeamMember: (body: TeamMemberRequest) => Promise> = (body) => { + return post(`${prefix}`, body) +} + +/** + * 删除成员 + * @param 参数 member_id + */ +const delTeamMember: (member_id: String) => Promise> = (member_id) => { + return del(`${prefix}/${member_id}`) } export default { getTeamMember, - postCreatTeamMember + postCreatTeamMember, + delTeamMember } diff --git a/ui/src/components/index.ts b/ui/src/components/index.ts index 8b837a76d..6b80f2551 100644 --- a/ui/src/components/index.ts +++ b/ui/src/components/index.ts @@ -3,6 +3,7 @@ import AppIcon from './icons/AppIcon.vue' import LoginLayout from './login-layout/index.vue' import LoginContainer from './login-container/index.vue' import LayoutContent from './content-container/LayoutContent.vue' +import TagsInput from './tags-input/index.vue' export default { install(app: App) { @@ -10,5 +11,6 @@ export default { app.component(LoginLayout.name, LoginLayout) app.component(LoginContainer.name, LoginContainer) app.component(LayoutContent.name, LayoutContent) + app.component(TagsInput.name, TagsInput) } } diff --git a/ui/src/components/tags-input/index.vue b/ui/src/components/tags-input/index.vue new file mode 100644 index 000000000..1bc53c90b --- /dev/null +++ b/ui/src/components/tags-input/index.vue @@ -0,0 +1,91 @@ + + + diff --git a/ui/src/request/index.ts b/ui/src/request/index.ts index 4c6509b67..92a39cd51 100644 --- a/ui/src/request/index.ts +++ b/ui/src/request/index.ts @@ -150,7 +150,7 @@ export const put: ( data?: unknown, loading?: NProgress | Ref ) => Promise> = (url, params, data, loading) => { - return promise(request({ url: url, method: 'put', data, params }), loading) + return promise(request({ url: url, method: 'put', params, data }), loading) } /** @@ -166,7 +166,7 @@ export const del: ( data?: unknown, loading?: NProgress | Ref ) => Promise> = (url, params, data, loading) => { - return promise(request({ url: url, method: 'delete', data, params }), loading) + return promise(request({ url: url, method: 'delete', params, data }), loading) } export const exportExcel: ( diff --git a/ui/src/styles/element-plus.scss b/ui/src/styles/element-plus.scss index b2da71614..0f580d807 100644 --- a/ui/src/styles/element-plus.scss +++ b/ui/src/styles/element-plus.scss @@ -14,6 +14,16 @@ --el-form-inline-content-width: 100%; } +.el-dialog { + .dialog-sub-title { + color: var(--el-text-color-regular); + margin: 5px 0; + } + .el-dialog__body { + padding: 15px var(--el-dialog-padding-primary) 10px !important; + } +} + // 抽屉样式整体修改 .el-drawer { .el-drawer__header { diff --git a/ui/src/views/setting/component/CreateMemberDialog.vue b/ui/src/views/setting/component/CreateMemberDialog.vue new file mode 100644 index 000000000..4ccb896ef --- /dev/null +++ b/ui/src/views/setting/component/CreateMemberDialog.vue @@ -0,0 +1,102 @@ + + + diff --git a/ui/src/views/setting/index.vue b/ui/src/views/setting/index.vue index e46432187..99d8b1354 100644 --- a/ui/src/views/setting/index.vue +++ b/ui/src/views/setting/index.vue @@ -4,35 +4,43 @@

团队成员

- 添加成员 + + 添加成员 +
-
+
-
    - @@ -77,11 +86,16 @@ import { onMounted, ref, watch, nextTick } from 'vue' import TeamApi from '@/api/team' import type { TeamMember } from '@/api/type/team' +import CreateMemberDialog from './component/CreateMemberDialog.vue' +import { MsgSuccess } from '@/utils/message' +const CreateMemberRef = ref>() const loading = ref(false) -const memberList = ref([]) - +const memberList = ref([]) // 全部成员 +const filterMember = ref([]) // 搜索过滤后列表 +const currentUser = ref('') const filterText = ref('') + const activeName = ref('dataset') const allChecked = ref(false) const tableHeight = ref(0) @@ -125,12 +139,53 @@ const tableData = [ } ] +watch(filterText, (val) => { + if (val) { + filterMember.value = memberList.value.filter((v) => v.username.includes(val)) + } else { + filterMember.value = memberList.value + } +}) + +function deleteMember(id: String) { + loading.value = true + TeamApi.delTeamMember(id) + .then(() => { + MsgSuccess('删除成功') + getMember() + }) + .catch(() => { + loading.value = false + }) +} + +function isManage(type: String) { + return type === 'manage' +} + +function clickMemberHandle(id: String) { + currentUser.value = id +} +function addMember() { + CreateMemberRef.value?.open() +} + function getMember() { loading.value = true - TeamApi.getTeamMember().then((res) => { - memberList.value = res.data - loading.value = false - }) + TeamApi.getTeamMember() + .then((res) => { + memberList.value = res.data + filterMember.value = res.data + currentUser.value = memberList.value[0].id + loading.value = false + }) + .catch(() => { + loading.value = false + }) +} + +function refresh() { + getMember() } onMounted(() => {