云
2026-10-31 964cfa12263cf51b2a3d1ef281130d0e808e9078
src/components/import-modal/import-modal.vue
@@ -44,8 +44,13 @@
  fileName: string;
  /** 执行导入的接口函数 (file, updateSupport) => Promise */
  importFn: (file: File, updateSupport: boolean) => Promise<unknown>;
  /** 是否允许覆盖已有数据 */
  allowUpdate?: boolean;
  uploadHint?: string;
  /** 不提供模板下载时隐藏弹窗内的下载按钮。 */
  showTemplateDownload?: boolean;
  /** 下载模板的接口函数 () => Promise(blob) */
  templateFn: () => Promise<BlobPart>;
  templateFn?: () => Promise<BlobPart>;
}
const emit = defineEmits(['success']);
@@ -69,10 +74,11 @@
      label: '数据文件',
      component: 'Upload',
      rules: 'required',
      help: '仅允许导入 xls、xlsx 格式文件',
      help: () => config.value.uploadHint || '仅允许导入 xls、xlsx 格式文件',
    },
    {
      fieldName: 'updateSupport',
      dependencies: { triggerFields: ['file'], show: () => config.value.allowUpdate !== false },
      label: '是否覆盖',
      component: 'Switch',
      componentProps: {
@@ -288,6 +294,7 @@
/** 下载模版 */
async function handleDownload() {
  if (!config.value.templateFn) return;
  const data = await config.value.templateFn();
  downloadFileFromBlobPart({ fileName: config.value.fileName, source: data });
}
@@ -309,7 +316,7 @@
      </template>
    </Form>
    <template #prepend-footer>
      <div class="flex flex-auto items-center">
      <div v-if="config.showTemplateDownload !== false" class="flex flex-auto items-center">
        <Button @click="handleDownload"> 下载导入模板 </Button>
      </div>
    </template>