feat: 完成会员消息触达模块页面与交互

This commit is contained in:
2026-03-04 11:36:49 +08:00
parent 61343b72b9
commit 0a19610d92
26 changed files with 3485 additions and 0 deletions

View File

@@ -0,0 +1,54 @@
<script setup lang="ts">
import type { MemberMessageTemplateCategory } from '#/api/member/message-reach';
import type { MessageTemplateFilterForm } from '#/views/member/message-reach/types';
import { Button, Input, Select } from 'ant-design-vue';
import { MESSAGE_TEMPLATE_CATEGORY_FILTER_OPTIONS } from '../composables/message-reach-page/constants';
defineProps<{
canManage: boolean;
filters: MessageTemplateFilterForm;
}>();
const emit = defineEmits<{
(event: 'create'): void;
(event: 'search'): void;
(event: 'update:category', value: '' | MemberMessageTemplateCategory): void;
(event: 'update:keyword', value: string): void;
}>();
function handleCategoryChange(value: unknown) {
emit(
'update:category',
String(value || '') as '' | MemberMessageTemplateCategory,
);
emit('search');
}
</script>
<template>
<div class="mmr-toolbar">
<Select
class="mmr-select"
:value="filters.category || ''"
:options="MESSAGE_TEMPLATE_CATEGORY_FILTER_OPTIONS"
@update:value="(value) => handleCategoryChange(value)"
/>
<Input
class="mmr-keyword-input"
:value="filters.keyword"
placeholder="搜索模板名称"
allow-clear
@update:value="(value) => emit('update:keyword', String(value ?? ''))"
@press-enter="emit('search')"
/>
<span class="mmr-spacer"></span>
<Button type="primary" :disabled="!canManage" @click="emit('create')">
新建模板
</Button>
</div>
</template>