diff --git a/src/components/cards/PluginAppCard.vue b/src/components/cards/PluginAppCard.vue index c5164ce8..6ee2c1cc 100644 --- a/src/components/cards/PluginAppCard.vue +++ b/src/components/cards/PluginAppCard.vue @@ -8,6 +8,7 @@ import { getDominantColor } from '@/@core/utils/image' import { isNullOrEmptyObject } from '@/@core/utils' import ProgressDialog from '@/components/dialog/ProgressDialog.vue' import { useI18n } from 'vue-i18n' +import { useDisplay } from 'vuetify' // 输入参数 const props = defineProps({ @@ -23,6 +24,9 @@ const emit = defineEmits(['install']) // 多语言 const { t } = useI18n() +// 响应式显示 +const display = useDisplay() + // 背景颜色 const backgroundColor = ref('#28A9E1') @@ -50,6 +54,19 @@ const releaseDialog = ref(false) // 插件详情弹窗 const detailDialog = ref(false) +// 用户头像是否加载完成 +const isAvatarLoaded = ref(false) + +// 菜单显示状态 +const menuVisible = ref(false) + +// 获取当前插件的标签 +const currentPluginLabels = computed(() => { + if (!props.plugin?.plugin_label) return [] + + return props.plugin.plugin_label.split(',').map(tag => tag.trim()).filter(tag => tag.length > 0) +}) + // 图片加载完成 async function imageLoaded() { isImageLoaded.value = true @@ -101,6 +118,14 @@ const iconPath: Ref = computed(() => { return `./plugin_icon/${props.plugin?.plugin_icon}` }) +// 插件作者头像路径 +const authorPath: Ref = computed(() => { + // 网络图片则使用代理后返回 + return `${import.meta.env.VITE_API_BASE_URL}system/img/1?imgurl=${encodeURIComponent( + props.plugin?.author_url + '.png', + )}` +}) + // 访问插件页面 function visitPluginPage() { // 将raw.githubusercontent.com转换为项目地址 @@ -154,6 +179,7 @@ const dropdownItems = ref([ + + diff --git a/src/components/cards/PluginCard.vue b/src/components/cards/PluginCard.vue index 0f2d8246..80168034 100644 --- a/src/components/cards/PluginCard.vue +++ b/src/components/cards/PluginCard.vue @@ -11,6 +11,7 @@ import ProgressDialog from '../dialog/ProgressDialog.vue' import PluginConfigDialog from '../dialog/PluginConfigDialog.vue' import PluginDataDialog from '../dialog/PluginDataDialog.vue' import { useI18n } from 'vue-i18n' +import { useDisplay } from 'vuetify' // 输入参数 const props = defineProps({ @@ -27,6 +28,9 @@ const emit = defineEmits(['remove', 'save', 'actionDone']) // 多语言 const { t } = useI18n() +// 响应式显示 +const display = useDisplay() + // 背景颜色 const backgroundColor = ref('#28A9E1') @@ -69,6 +73,13 @@ const imageLoadError = ref(false) // 更新日志弹窗 const releaseDialog = ref(false) +// 获取当前插件的标签 +const currentPluginLabels = computed(() => { + if (!props.plugin?.plugin_label) return [] + + return props.plugin.plugin_label.split(',').map(tag => tag.trim()).filter(tag => tag.length > 0) +}) + // 监听动作标识,如为true则打开详情 watch( () => props.action, @@ -329,7 +340,7 @@ watch(