diff --git a/admin/src/views/first_visit/wecom_promotion/index.vue b/admin/src/views/first_visit/wecom_promotion/index.vue index b6a492e86..62f7227f3 100644 --- a/admin/src/views/first_visit/wecom_promotion/index.vue +++ b/admin/src/views/first_visit/wecom_promotion/index.vue @@ -550,12 +550,15 @@ async function loadOverview() { } function openPoolDialog(pool?: any) { + const selectableMemberIds = new Set(overview.member_options.map((member) => Number(member.id))) Object.assign(poolForm, pool ? { id: Number(pool.id), name: pool.name, fallback_url: pool.fallback_url || '', status: Number(pool.status), - member_admin_ids: Array.isArray(pool.member_admin_ids) ? pool.member_admin_ids.map(Number) : [], + member_admin_ids: Array.isArray(pool.member_admin_ids) + ? pool.member_admin_ids.map(Number).filter((memberId: number) => selectableMemberIds.has(memberId)) + : [], skip_verify: Number(pool.skip_verify) === 1 ? 1 : 0, main_url: pool.main_url || '' } : { diff --git a/server/app/adminapi/logic/firstvisit/WecomPromotionLogic.php b/server/app/adminapi/logic/firstvisit/WecomPromotionLogic.php index 8af3c3bb2..62b46104d 100644 --- a/server/app/adminapi/logic/firstvisit/WecomPromotionLogic.php +++ b/server/app/adminapi/logic/firstvisit/WecomPromotionLogic.php @@ -758,6 +758,7 @@ class WecomPromotionLogic } $query = Db::name('admin')->alias('a') ->whereNull('a.delete_time') + ->where('a.disable', 0) ->where('a.work_wechat_userid', '<>', ''); if ($visibleIds !== null) { $query->whereIn('a.id', $visibleIds); diff --git a/server/tests/WecomPromotionOverviewSmokeTest.php b/server/tests/WecomPromotionOverviewSmokeTest.php index 29a3f2920..b595d16c9 100644 --- a/server/tests/WecomPromotionOverviewSmokeTest.php +++ b/server/tests/WecomPromotionOverviewSmokeTest.php @@ -32,6 +32,13 @@ foreach ($overview['member_options'] as $member) { throw new RuntimeException('member_options 缺少树形下拉展示部门'); } } +$memberIds = array_values(array_unique(array_map('intval', array_column($overview['member_options'], 'id')))); +if ($memberIds !== []) { + $disabledMemberCount = (int) Db::name('admin')->whereIn('id', $memberIds)->where('disable', '<>', 0)->count(); + if ($disabledMemberCount > 0) { + throw new RuntimeException('member_options 返回了已禁用的成员'); + } +} if (!is_array($overview['department_options'])) { throw new RuntimeException('department_options 必须是部门树数组'); }