gaoluyang
2 天以前 bc2f8274ee7bc57328a996dccec22ebcf0083db5
src/views/mes/md/item/modules/product-media-list.vue
@@ -49,6 +49,17 @@
const isReadOnly = computed(() => props.formType === 'detail'); // 是否只读
const title = computed(() => props.kind); // 当前媒体类型标题
/** 将完整 URL 转为相对路径,确保走前端代理 */
function resolveImageUrl(url?: string): string {
  if (!url) return '';
  try {
    const { pathname } = new URL(url, window.location.origin);
    return pathname;
  } catch {
    return url;
  }
}
const loading = ref(false); // SIP/SOP 列表加载中
const formOpen = ref(false); // SIP/SOP 表单是否打开
const formLoading = ref(false); // SIP/SOP 表单提交中
@@ -219,27 +230,28 @@
      添加 {{ title }}
    </Button>
    <Spin :spinning="loading">
      <div v-if="list.length > 0" class="grid grid-cols-4 gap-3">
      <div v-if="list.length > 0" class="grid grid-cols-8 gap-1">
        <Card
          v-for="item in list"
          :key="item.id"
          hoverable
          class="!w-[120px]"
          :body-style="{ padding: '0px' }"
        >
          <Image
            v-if="item.url"
            :src="item.url"
            class="block h-40 w-full object-cover"
            :preview="{ src: item.url }"
            :src="resolveImageUrl(item.url)"
            class="block !h-[90px] !w-[120px] object-cover"
            :preview="{ src: resolveImageUrl(item.url) }"
          />
          <div
            v-else
            class="flex h-40 w-full items-center justify-center bg-gray-100 text-gray-400"
            class="flex !h-[90px] !w-[120px] items-center justify-center bg-gray-100 text-gray-400"
          >
            暂无图片
          </div>
          <div class="p-3">
            <div class="mb-1 truncate text-sm font-bold">{{ item.title }}</div>
          <div class="p-2">
            <div class="mb-1 truncate text-xs font-bold">{{ item.title }}</div>
            <div v-if="item.description" class="truncate text-xs text-gray-500">
              {{ item.description }}
            </div>