From b0a2eb3cae9c1a5994396f8bc2a0f3ecf6b76340 Mon Sep 17 00:00:00 2001 From: pdsuwwz Date: Tue, 4 Jul 2023 18:42:04 +0800 Subject: [PATCH 1/2] feat: update member role assign --- components.d.ts | 2 + .../components/CreateProjectForm.vue | 77 +++++++++++++------ src/modules/HomeFront/types/index.ts | 12 ++- .../components/MemberAssignCard.vue | 37 ++++++++- src/modules/MemberTeam/data/index.ts | 17 ++-- 5 files changed, 112 insertions(+), 33 deletions(-) diff --git a/components.d.ts b/components.d.ts index 35c8bac..ae7df7b 100644 --- a/components.d.ts +++ b/components.d.ts @@ -32,6 +32,7 @@ declare module 'vue' { NDatePicker: typeof import('naive-ui')['NDatePicker'] NDialogProvider: typeof import('naive-ui')['NDialogProvider'] NDropdown: typeof import('naive-ui')['NDropdown'] + NDynamicTags: typeof import('naive-ui')['NDynamicTags'] NForm: typeof import('naive-ui')['NForm'] NFormItem: typeof import('naive-ui')['NFormItem'] NFormItemGi: typeof import('naive-ui')['NFormItemGi'] @@ -50,6 +51,7 @@ declare module 'vue' { NSpace: typeof import('naive-ui')['NSpace'] NSpin: typeof import('naive-ui')['NSpin'] NSwitch: typeof import('naive-ui')['NSwitch'] + NTag: typeof import('naive-ui')['NTag'] NText: typeof import('naive-ui')['NText'] NThing: typeof import('naive-ui')['NThing'] NTooltip: typeof import('naive-ui')['NTooltip'] diff --git a/src/modules/HomeFront/components/CreateProjectForm.vue b/src/modules/HomeFront/components/CreateProjectForm.vue index 3e6d1d5..c300d86 100644 --- a/src/modules/HomeFront/components/CreateProjectForm.vue +++ b/src/modules/HomeFront/components/CreateProjectForm.vue @@ -4,6 +4,7 @@ :model="projectFormModel" label-placement="top" label-width="auto" + class="max-h-600px overflow-y-auto" > - 选择成员 - + + + + + {{ memberListRoleItem.username }} + + + 添加 + + + + + +
{{ JSON.stringify(projectFormModel, null, 2) }}
-
{{ JSON.stringify(projectFormModel, null, 2) }}
@@ -114,6 +134,10 @@ import { ProjectLevelMap } from '@/modules/HomeFront/data' +import { + userRoleMap +} from '@/modules/MemberTeam/data' + import MemberAssignCard from '@/modules/MemberTeam/components/MemberAssignCard.vue' defineOptions({ @@ -129,7 +153,13 @@ const projectFormModel = ref({ projectDesc: '', startDate: null, endDate: null, - memberList: '' + memberList: { + teamMember: [], + teamLeader: [], + projectManager: [], + qualityManager: [], + reviewManager: [] + } }) @@ -238,8 +268,12 @@ const projectBasicMap = shallowRef([ } ]) -const handleSelectMembers = () => { - const dd = window.$ModalDialog.create({ +const refMemberAsign = ref() +const handleSelectMembers = (userRoleItem) => { + const _member = reactive( + projectFormModel.value.memberList[userRoleItem.value] + ) + window.$ModalDialog.create({ title: '选择成员', style: { maxWidth: '650px', @@ -248,22 +282,15 @@ const handleSelectMembers = () => { maskClosable: false, closeOnEsc: false, content: () => h( - MemberAssignCard + MemberAssignCard, + { + ref: refMemberAsign, + modelValue: _member + } ), positiveText: '确定', async onPositiveClick() { - // const isValid = await instanceRef.value.validateRules() - // if (!isValid) { - // return Promise.reject() - // } - - // dd.loading = true - // dd.positiveText = '提交中..' - // await sleep(1000) - - // dd.positiveText = _positiveText - // dd.loading = false - return Promise.reject() + projectFormModel.value.memberList[userRoleItem.value] = refMemberAsign.value.checkedRowsRef } }) } diff --git a/src/modules/HomeFront/types/index.ts b/src/modules/HomeFront/types/index.ts index 356971a..7332af1 100644 --- a/src/modules/HomeFront/types/index.ts +++ b/src/modules/HomeFront/types/index.ts @@ -1,3 +1,5 @@ +import type { TypesMemberTeam } from '@/modules/MemberTeam/types' + export type ProjectItem = { id: string project_code: string @@ -9,6 +11,14 @@ export type ProjectItem = { export namespace TypesHomeFront { + export interface MemberRoleListMap { + teamMember: Array + teamLeader: Array + projectManager: Array + qualityManager: Array + reviewManager: Array + } + export type TypeCreateProjectInfo = { /** * 项目名称 @@ -37,6 +47,6 @@ export namespace TypesHomeFront { /** * 成员映射表 Record */ - memberList: any + memberList: MemberRoleListMap } } diff --git a/src/modules/MemberTeam/components/MemberAssignCard.vue b/src/modules/MemberTeam/components/MemberAssignCard.vue index 21514fd..e36bc32 100644 --- a/src/modules/MemberTeam/components/MemberAssignCard.vue +++ b/src/modules/MemberTeam/components/MemberAssignCard.vue @@ -110,6 +110,27 @@ import MemberAvatar from './MemberAvatar.vue' const memberTeamStore = useMemberTeamStore() +const props = defineProps({ + modelValue: { + type: Array as PropType>, + default() { + return [] + } + } +}) + +const selectedMembers = props.modelValue.slice() + +/** + * 初始化已经勾选过的行状态 + */ +const initSelectedMembers = () => { + nextTick(() => { + checkedRowKeysRef.value = selectedMembers.map((member) => member.userId) + checkedRowsRef.value = selectedMembers + }) +} +initSelectedMembers() /** * 构造行唯一 ID @@ -123,7 +144,17 @@ const checkedRowKeysRef = ref>([]) const checkedRowsRef = ref>([]) const handleUpdateCheckedRows = (keys, rows: Array) => { - checkedRowsRef.value = rows as Array + const currentRows = rows.filter(i => i) as Array + + for (let index = 0; index < currentRows.length; index++) { + const _row = currentRows[index] + const isExist = checkedRowsRef.value.find(checkedRow => checkedRow.userId === _row.userId) + if (isExist) { + continue + } else { + checkedRowsRef.value.push(_row) + } + } } /** @@ -191,6 +222,10 @@ const handleChangeSearch = _.debounce( 200 ) +defineExpose({ + checkedRowsRef +}) +