{"version":3,"file":"use-attachment.mjs","sources":["../../../../../../packages/components/attachment/src/use-attachment.ts"],"sourcesContent":["import { ref, computed, useTemplateRef } from 'vue'\nimport { useNavigation } from '@el-plus/hooks/use-navigation'\nimport { useLocale } from '@el-plus/hooks/use-locale'\nimport { downloadFile, previewFile, importFile } from '@el-plus/utils/file'\nimport { Cookies } from '@el-plus/utils/cookie'\nimport type { TableInstance } from '@el-plus/components/table'\n\nexport const useAttachment = (props, { data }) => {\n  const { mode: defaultMode } = useNavigation()\n  const { t } = useLocale()\n  const mode = computed(() => {\n    return props.mode || defaultMode.value\n  })\n  const tableRef = useTemplateRef<TableInstance>('tableRef')\n  const isNormalOpen = props.openType === 'normal'\n  const isDialogOpen = props.openType === 'dialog'\n\n  // 待确认的附件列表\n  let toBeConfirmData: Record<string, any>[] = []\n  // 待删除的附件列表\n  let toBeDeleteData: {\n    [key: number]: Record<string, any> // key要存储原来索引以便保留原顺序\n  } = {}\n  const actionButtons = ref<any>([\n    {\n      name: t('ep.attachment.download'),\n      onClick({ row }) {\n        downloadFile({\n          src: row.filePath,\n          fileName: row.originalFilename || row.originalFileName,\n        })\n      },\n    },\n    {\n      name: t('ep.attachment.delete'),\n      disabled: () => {\n        return mode.value === 'browse'\n      },\n      onClick: ({ $index, row }) => {\n        if (isDialogOpen) {\n          // 待删除的附件列表\n          toBeDeleteData[$index] = row\n        }\n        data.value.splice($index, 1)\n      },\n    },\n  ])\n  const columns = ref([\n    {\n      label: t('ep.attachment.attachmentType'),\n      prop: 'type',\n      type: 'EpSelect',\n      required: true,\n      show: () => props.isType,\n      props: {\n        desc: ({ row }) => {\n          return row.typeDesc\n        },\n      },\n    },\n    {\n      label: t('ep.attachment.fileName'),\n      prop: 'originalFilename',\n      type: 'EpLink',\n      onClick({ row }) {\n        previewFile(row.filePath)\n      },\n    },\n    {\n      label: t('ep.attachment.creator'),\n      prop: 'createBy',\n    },\n    {\n      label: t('ep.attachment.createTime'),\n      prop: 'createTime',\n    },\n    {\n      label: t('ep.attachment.description'),\n      prop: 'note',\n      type: 'EpInput',\n      show: () => props.isNote,\n    },\n  ])\n  const addAttachment = async () => {\n    toBeConfirmData = []\n    const fileData = await importFile({\n      api: 'api-f/fast/files/save',\n      extraData: {\n        createBy: Cookies.get('accountName') || '',\n      },\n    })\n    fileData.fileId = fileData.id\n    delete fileData.id\n    if (isDialogOpen) {\n      // 待确认的附件列表\n      toBeConfirmData.push(fileData)\n    }\n    if (props.beforeAdd) {\n      await props.beforeAdd?.(fileData)\n    }\n    data.value.push(fileData)\n  }\n  // 确认\n  const onConfirm = async (resolve) => {\n    await tableRef.value?.validate()\n    resolve(data.value)\n    toBeConfirmData = []\n    toBeDeleteData = {}\n  }\n  // 取消\n  const onCancel = (resolve) => {\n    if (toBeConfirmData.length) {\n      // 找到待确认的附件\n      const index = data.value.findIndex((item) => {\n        return item.fileId === toBeConfirmData[0].fileId\n      })\n      if (index !== -1) {\n        // 删除待确认的附件\n        data.value.splice(index, 1)\n      }\n      // 清空待确认的附件列表\n      toBeConfirmData = []\n    }\n    if (Object.keys(toBeDeleteData).length) {\n      // 找到待删除的附件在原位置插入\n      Object.keys(toBeDeleteData).forEach((oldIndex) => {\n        data.value.splice(Number(oldIndex), 0, toBeDeleteData[oldIndex])\n      })\n      // 清空待删除的附件列表\n      toBeDeleteData = {}\n    }\n    resolve()\n  }\n  const permission = computed(() => {\n    const arr = props.permission?.split(':') || []\n    return {\n      arg: arr[0],\n      value: arr[1]\n    }\n  })\n  return {\n    columns,\n    actionButtons,\n    addAttachment,\n    isNormalOpen,\n    isDialogOpen,\n    onConfirm,\n    onCancel,\n    mode,\n    permission\n  }\n}\n"],"names":[],"mappings":"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"}