refactor(projects): 1、优化新增 产品和新增项目;2、调整角色提示信息
This commit is contained in:
@@ -4,6 +4,8 @@ import { useMediaQuery } from '@vueuse/core';
|
||||
import { LAYOUT_SCROLL_EL_ID } from '@sa/materials';
|
||||
import { objectContextDomainConfigs } from '@/constants/object-context';
|
||||
import {
|
||||
fetchBatchCreateProductMembers,
|
||||
fetchBatchInactiveProductMembers,
|
||||
fetchChangeProductStatus,
|
||||
fetchCreateProductMember,
|
||||
fetchDeleteProduct,
|
||||
@@ -19,8 +21,12 @@ import { useAuthStore } from '@/store/modules/auth';
|
||||
import { useObjectContextStore } from '@/store/modules/object-context';
|
||||
import { useThemeStore } from '@/store/modules/theme';
|
||||
import { useRouterPush } from '@/hooks/common/router';
|
||||
import ProductTeamBatchDialog, {
|
||||
type BatchMemberPayload
|
||||
} from '@/views/product/shared/components/product-team-batch-dialog.vue';
|
||||
import { useCurrentProduct } from '../shared/use-current-product';
|
||||
import BaseInfoDialog from './modules/base-info-dialog.vue';
|
||||
import MemberBatchRemoveDialog from './modules/member-batch-remove-dialog.vue';
|
||||
import MemberOperateDialog from './modules/member-operate-dialog.vue';
|
||||
import MemberRemoveDialog from './modules/member-remove-dialog.vue';
|
||||
import ProductDeleteDialog from './modules/product-delete-dialog.vue';
|
||||
@@ -70,7 +76,11 @@ const pageLoading = ref(false);
|
||||
const memberLoading = ref(false);
|
||||
const baseInfoVisible = ref(false);
|
||||
const memberOperateVisible = ref(false);
|
||||
const memberBatchVisible = ref(false);
|
||||
const memberRemoveVisible = ref(false);
|
||||
const memberBatchRemoveVisible = ref(false);
|
||||
const teamPanelRef = ref<InstanceType<typeof SettingTeamPanel> | null>(null);
|
||||
const selectedBatchRemoveMembers = ref<Api.Product.ProductMember[]>([]);
|
||||
const statusActionVisible = ref(false);
|
||||
const deleteVisible = ref(false);
|
||||
const memberOperateMode = ref<'create' | 'edit'>('create');
|
||||
@@ -217,9 +227,7 @@ function scrollToSection(key: string) {
|
||||
}
|
||||
|
||||
function openCreateMember() {
|
||||
memberOperateMode.value = 'create';
|
||||
selectedMember.value = null;
|
||||
memberOperateVisible.value = true;
|
||||
memberBatchVisible.value = true;
|
||||
}
|
||||
|
||||
function openEditMember(member: Api.Product.ProductMember) {
|
||||
@@ -233,6 +241,12 @@ function openRemoveMember(member: Api.Product.ProductMember) {
|
||||
memberRemoveVisible.value = true;
|
||||
}
|
||||
|
||||
function openBatchRemoveMember(targetMembers: Api.Product.ProductMember[]) {
|
||||
if (!targetMembers.length) return;
|
||||
selectedBatchRemoveMembers.value = targetMembers;
|
||||
memberBatchRemoveVisible.value = true;
|
||||
}
|
||||
|
||||
function openLifecycleAction(action: Api.Product.ProductLifecycleAction) {
|
||||
selectedAction.value = action;
|
||||
statusActionVisible.value = true;
|
||||
@@ -288,6 +302,29 @@ async function handleSubmitMemberOperate(event: {
|
||||
}
|
||||
}
|
||||
|
||||
async function handleSubmitMemberBatch(payloads: BatchMemberPayload[]) {
|
||||
if (!currentObjectId.value || !payloads.length) {
|
||||
return;
|
||||
}
|
||||
|
||||
const { error } = await fetchBatchCreateProductMembers(currentObjectId.value, {
|
||||
members: payloads.map(item => ({
|
||||
userId: item.userId,
|
||||
roleId: item.roleId,
|
||||
remark: item.remark.trim() || null
|
||||
}))
|
||||
});
|
||||
|
||||
if (error) {
|
||||
return;
|
||||
}
|
||||
|
||||
window.$message?.success(`已新增 ${payloads.length} 名成员`);
|
||||
memberBatchVisible.value = false;
|
||||
|
||||
await Promise.all([loadMembers(), loadSettings()]);
|
||||
}
|
||||
|
||||
async function handleSubmitRemoveMember(payload: Api.Product.InactiveProductMemberParams) {
|
||||
if (!currentObjectId.value || !selectedMember.value?.id) {
|
||||
return;
|
||||
@@ -305,6 +342,30 @@ async function handleSubmitRemoveMember(payload: Api.Product.InactiveProductMemb
|
||||
await Promise.all([loadMembers(), loadSettings()]);
|
||||
}
|
||||
|
||||
async function handleSubmitBatchRemoveMember(payload: { reason: string | null }) {
|
||||
if (!currentObjectId.value || !selectedBatchRemoveMembers.value.length) {
|
||||
return;
|
||||
}
|
||||
|
||||
const memberIds = selectedBatchRemoveMembers.value.map(item => item.id).filter((id): id is string => Boolean(id));
|
||||
|
||||
if (!memberIds.length) return;
|
||||
|
||||
const { error } = await fetchBatchInactiveProductMembers(currentObjectId.value, {
|
||||
memberIds,
|
||||
reason: payload.reason
|
||||
});
|
||||
|
||||
if (error) return;
|
||||
|
||||
window.$message?.success(`已移出 ${memberIds.length} 名成员`);
|
||||
memberBatchRemoveVisible.value = false;
|
||||
selectedBatchRemoveMembers.value = [];
|
||||
teamPanelRef.value?.clearSelection();
|
||||
|
||||
await Promise.all([loadMembers(), loadSettings()]);
|
||||
}
|
||||
|
||||
async function handleSubmitLifecycleAction(payload: Api.Product.ChangeProductStatusParams) {
|
||||
if (!currentObjectId.value || !selectedAction.value) {
|
||||
return;
|
||||
@@ -393,6 +454,7 @@ watch(
|
||||
|
||||
<section :id="sectionIdMap.team" class="product-setting-page__section">
|
||||
<SettingTeamPanel
|
||||
ref="teamPanelRef"
|
||||
:members="members"
|
||||
:role-options="roleOptions"
|
||||
:loading="memberLoading"
|
||||
@@ -400,6 +462,7 @@ watch(
|
||||
@create="openCreateMember"
|
||||
@edit="openEditMember"
|
||||
@remove="openRemoveMember"
|
||||
@batch-remove="openBatchRemoveMember"
|
||||
/>
|
||||
</section>
|
||||
|
||||
@@ -427,11 +490,23 @@ watch(
|
||||
:disabled-user-ids="members.filter(member => member.status === 0).map(member => member.userId)"
|
||||
@submit="handleSubmitMemberOperate"
|
||||
/>
|
||||
<ProductTeamBatchDialog
|
||||
v-model:visible="memberBatchVisible"
|
||||
:user-options="userOptions"
|
||||
:role-options="roleOptions"
|
||||
:disabled-user-ids="members.filter(member => member.status === 0).map(member => member.userId)"
|
||||
@submit="handleSubmitMemberBatch"
|
||||
/>
|
||||
<MemberRemoveDialog
|
||||
v-model:visible="memberRemoveVisible"
|
||||
:member="selectedMember"
|
||||
@submit="handleSubmitRemoveMember"
|
||||
/>
|
||||
<MemberBatchRemoveDialog
|
||||
v-model:visible="memberBatchRemoveVisible"
|
||||
:members="selectedBatchRemoveMembers"
|
||||
@submit="handleSubmitBatchRemoveMember"
|
||||
/>
|
||||
<StatusActionDialog
|
||||
v-model:visible="statusActionVisible"
|
||||
:action="selectedAction"
|
||||
|
||||
Reference in New Issue
Block a user