From b64a0deae5b5d33f9e20671a68936b27f0b9b00b Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期二, 21 七月 2026 18:03:03 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/dev_pro2.0' into dev_pro2.0
---
src/views/im/manager/channel/material/components/select.vue | 71 +++++++++++++++++++++++++++++++++++
1 files changed, 71 insertions(+), 0 deletions(-)
diff --git a/src/views/im/manager/channel/material/components/select.vue b/src/views/im/manager/channel/material/components/select.vue
new file mode 100644
index 0000000..c5e47b8
--- /dev/null
+++ b/src/views/im/manager/channel/material/components/select.vue
@@ -0,0 +1,71 @@
+<script lang="ts" setup>
+import type { ImManagerChannelMaterialApi } from '#/api/im/manager/channel/material';
+
+import { computed, ref, watch } from 'vue';
+
+import { Select } from 'ant-design-vue';
+
+import { getSimpleManagerChannelMaterialList } from '#/api/im/manager/channel/material';
+
+defineOptions({ name: 'ImManagerMaterialSelect' });
+
+const props = withDefaults(
+ defineProps<{
+ allowClear?: boolean
+ channelId?: number
+ modelValue?: number
+ placeholder?: string
+ }>(),
+ {
+ allowClear: true,
+ channelId: undefined,
+ modelValue: undefined,
+ placeholder: '璇烽�夋嫨绱犳潗',
+ },
+);
+
+const emit = defineEmits<{
+ 'update:modelValue': [value: number | undefined];
+}>();
+
+const loading = ref(false);
+const materialList = ref<ImManagerChannelMaterialApi.Material[]>([]);
+
+const value = computed({
+ get: () => props.modelValue,
+ set: (val) => emit('update:modelValue', val),
+});
+
+const options = computed(() =>
+ materialList.value.map((item) => ({ label: item.title, value: item.id })),
+);
+
+/** 鎸夐閬撳姞杞界礌鏉� */
+async function loadMaterialList(channelId?: number) {
+ emit('update:modelValue', undefined);
+ materialList.value = [];
+ if (!channelId) {
+ return;
+ }
+ loading.value = true;
+ try {
+ materialList.value = await getSimpleManagerChannelMaterialList(channelId);
+ } finally {
+ loading.value = false;
+ }
+}
+
+watch(() => props.channelId, loadMaterialList, { immediate: true });
+</script>
+
+<template>
+ <Select
+ v-model:value="value"
+ :allow-clear="allowClear"
+ :disabled="!channelId"
+ :loading="loading"
+ :options="options"
+ :placeholder="placeholder"
+ class="w-full"
+ />
+</template>
--
Gitblit v1.9.3