{"version":3,"file":"main2.mjs","sources":["../../../../../../../packages/components/upload/src/main.ts"],"sourcesContent":["import { computed, nextTick, ref, watch } from 'vue'\nimport { tavI18n } from '@tav-ui/locales'\nimport { useGlobalConfig } from '@tav-ui/hooks/global/useGlobalConfig'\nimport { useMessage } from '@tav-ui/hooks/web/useMessage'\nimport { isFunction } from '@tav-ui/utils'\nimport { useFileFormatter } from './hooks'\nimport type { Ref } from 'vue'\nimport type { FormActionType } from '../../form'\nimport type {\n  BasicPropsType,\n  ChangeType,\n  FileItemType,\n  Fn,\n  ProvideDataType,\n  Recordable,\n} from './types'\n\n// global variable beginRegion\nconst { createMessage } = useMessage()\n// global variable endRegion\n\nclass Handler {\n  private emit: Fn\n\n  private _hyperlinkFormMethods: Partial<FormActionType> = {}\n\n  private _props!: BasicPropsType\n\n  private _provide = computed<undefined | ProvideDataType>(\n    () => (useGlobalConfig('components') as Ref<Record<string, any>>).value?.TaUpload\n  )\n\n  private set props(v: BasicPropsType) {\n    this._props = v\n\n    const { params, /* maxSize */ controlInOuter } = v\n\n    // this._fileMaxSize = maxSize;\n    this._controlInOuter = controlInOuter\n    this._typeCode.value = params.typeCode\n    watch(\n      () => this._props.uploadResponse,\n      (v) => {\n        this.uploadResponse = v\n\n        if (!this._props.showTable) return\n        this.throwResponse(v!, 'init')\n      },\n      {\n        immediate: true,\n      }\n    )\n\n    // 千万不要干扰🙏\n    for (const key in params) {\n      this._params[key] = params[key]\n    }\n  }\n\n  private _params: BasicPropsType['params'] = {}\n  private _showTable = true\n  // private _fileMaxSize;\n  private _refFileList: File[] = []\n  private _uploadResponse: FileItemType[] = []\n  private _refFileListPushEnd = false\n  private _immediate = false\n  private _controlInOuter = false\n  private _fileFormatter = useFileFormatter()\n\n  /**\n   * newest typeCode\n   */\n  private _typeCode = ref<string>()\n  private _isLoading = ref(false)\n  private _dataSource = ref<FileItemType[]>([])\n  public currentTypeCodeIsHyperlink = ref(false)\n  private _paramsName: string | undefined\n  private _paramsAddress: string | undefined\n  private _apis: ProvideDataType = {}\n  public currentUpload = null as null | Promise<any> | FileItemType[]\n\n  //// getter begin\n  get dataSource() {\n    return this._dataSource\n  }\n  get typeCode() {\n    return this._typeCode\n  }\n  get loading() {\n    return this._isLoading\n  }\n\n  get typeCodeRecord() {\n    return this._props.typeCodeRecord ?? this._provide.value?.typeCodeRecord ?? {}\n  }\n\n  get apis() {\n    if (!this._apis.queryFile) {\n      const apis: Partial<ProvideDataType> = {\n        queryFile: (this._props.queryFile ??\n          this._provide.value?.queryFile) as ProvideDataType['queryFile'],\n        removeFile: (this._props.removeFile ??\n          this._provide.value?.removeFile) as ProvideDataType['removeFile'],\n        uploadFile: (this._props.uploadFile ??\n          this._provide.value?.uploadFile) as ProvideDataType['uploadFile'],\n        updateFile: (this._props.updateFile ??\n          this._provide.value?.updateFile) as ProvideDataType['updateFile'],\n        uploadHyperlink: (this._props.uploadHyperlink ??\n          this._provide.value?.uploadHyperlink) as ProvideDataType['uploadHyperlink'],\n        download: (this._props.download ??\n          this._provide.value?.download) as ProvideDataType['download'],\n        updateFileNameAndAddress: (this._props.updateFileNameAndAddress ??\n          this._provide.value\n            ?.updateFileNameAndAddress) as ProvideDataType['updateFileNameAndAddress'],\n        updateFileType: (this._props.updateFileType ??\n          this._provide.value?.updateFileType) as ProvideDataType['updateFileType'],\n        queryFileType: (this._props.queryFileType ??\n          this._provide.value?.queryFileType) as ProvideDataType['queryFileType'],\n      }\n      for (const key in apis) {\n        this._apis[key] =\n          apis[key] && isFunction(apis[key])\n            ? (...args: any[]) => apis[key](...args, this._props.AppId)\n            : undefined\n      }\n      if (\n        !(isFunction(apis.queryFile) &&\n        // 当使用 false === immediate 时不需要传removeFile\n        (this._immediate ? isFunction(apis.removeFile) : true) &&\n        isFunction(apis.uploadFile) &&\n        (this._props.showUploadHyperlinkBtn === 'unset' ||\n          false === this._props.showUploadHyperlinkBtn)\n          ? true\n          : isFunction(apis.uploadHyperlink))\n      ) {\n        throw new Error(\n          '<queryFile, uploadFile, uploadHyperlink,typeCodeRecord, [removeFile]> 必须在TaUpload挂载前从app.vue注入, 或者传入同名props'\n        )\n      }\n    }\n    return this._apis\n  }\n\n  get getFileFormatter() {\n    return this._fileFormatter\n  }\n\n  //// getter end\n\n  //// setter begin\n  public set paramsName(v: string) {\n    this._paramsName = v\n  }\n  public set paramsAddress(v: string) {\n    this._paramsAddress = v\n  }\n\n  public set uploadResponse(v: FileItemType[] | undefined) {\n    this._uploadResponse = v ?? []\n    this.fillDataSource()\n  }\n\n  //// setter begin\n\n  /**\n   * 构造函数.\n   * @param props BasicPropsType\n   */\n  constructor(props: BasicPropsType, instanceEmit) {\n    this.emit = instanceEmit\n    this.props = props\n\n    // 动态控制默认的表格显示与否\n    watch(\n      () => this._props.showTable,\n      (val) => {\n        this._showTable = val\n      },\n      {\n        immediate: true,\n      }\n    )\n\n    // 动态控制上传同时携带businessId\n    watch(\n      () => this._props.immediate,\n      (val) => {\n        this._immediate = val\n      },\n      {\n        immediate: true,\n      }\n    )\n\n    // 用businessId控制回填与清空\n    watch(\n      () => this._props.params.businessId,\n      (val) => {\n        this._params.businessId = val\n        // 外部控制 -> 不请求,不自动清除\n        if (this._controlInOuter) return\n        if (undefined === val) {\n          this.clearResponse()\n          return\n        }\n        // 传入文件列表 -> 不请求\n        if (this._props.uploadResponse) return\n        this.backfill()\n      },\n      {\n        immediate: true,\n      }\n    )\n\n    // 用 businessKey 控制回填与清空\n    watch(\n      () => this._props.params.businessKey,\n      (val) => {\n        this._params.businessKey = val\n        // 外部控制 -> 不请求,不自动清除\n        if (this._controlInOuter) return\n        if (undefined === val) {\n          this.clearResponse()\n          return\n        }\n        // 传入文件列表 -> 不请求\n        if (this._props.uploadResponse) return\n        this.backfill()\n      },\n      {\n        immediate: true,\n        flush: 'pre',\n      }\n    )\n\n    // 一些请求的参数\n    watch(\n      () =>\n        [\n          this._props.params.id,\n          this._props.params.endTime,\n          this._props.params.typeCode,\n          this._props.params.startTime,\n          this._props.params.moduleCode,\n          this._props.params.businessKey,\n          this._props.params.searchValue,\n        ] as const,\n      (\n        [\n          idVal,\n          endTimeVal,\n          typeCodeVal,\n          startTimeVal,\n          moduleCodeVal,\n          businessKeyVal,\n          searchValueVal,\n        ],\n        [\n          idPrev,\n          endTimePrev,\n          typeCodePrev,\n          startTimePrev,\n          moduleCodePrev,\n          businessKeyPrev,\n          searchValuePrev,\n        ]\n      ) => {\n        idVal !== idPrev && (this._params.id = idVal)\n\n        endTimeVal !== endTimePrev && (this._params.endTime = endTimeVal)\n\n        typeCodeVal !== typeCodePrev && (this._typeCode.value = typeCodeVal)\n\n        startTimeVal !== startTimePrev && (this._params.startTime = startTimeVal)\n\n        businessKeyVal !== businessKeyPrev && (this._params.businessKey = businessKeyVal)\n\n        moduleCodeVal !== moduleCodePrev && (this._params.moduleCode = moduleCodeVal)\n\n        searchValueVal !== searchValuePrev && (this._params.searchValue = searchValueVal)\n      },\n      {\n        flush: 'pre',\n      }\n    )\n  }\n\n  /**\n   * 如多个文件正在上传或上传列表(变量)已清空 -> 不发请求\n   */\n  private isInvalidRequest = () => this._refFileListPushEnd || this._refFileList.length === 0\n  /**\n   * 提取文件真实id\n   */\n  private getFileActualIds = () => this._uploadResponse.map((el) => el.actualId)\n\n  /**\n   * 返回编辑后的文件列表数据格式\n   * ```js\n   * [\n   *    {\n   *        moduleCode: \"...\",\n   *        versionList: [\n   *          file1,...\n   *        ]\n   *    }\n   * ]\n   * ```\n   * @returns\n   */\n  getResult = () => this._fileFormatter.formatToApi(this._uploadResponse)\n\n  getPropsOrProvide<T extends keyof BasicPropsType>(propName: T): BasicPropsType[T] {\n    // @ts-ignore\n    return this._props[propName] ?? this._provide.value?.[propName]\n  }\n\n  /**\n   * 将列表数据填到表格上\n   */\n  fillDataSource = () => {\n    if (!this._showTable) {\n      return\n    }\n    this._dataSource.value = []\n    this._dataSource.value.push(...this._uploadResponse)\n    // this._dataSource.value = !this._typeCode.value\n    //   ? this._uploadResponse\n    //   : this._uploadResponse.filter((a) => a.typeCode == this._typeCode.value);\n  }\n\n  /**\n   * 请求文件列表成功和上传成功时触发\n   * @param newRecord 新上传成功的文件\n   */\n  private throwResponse(newRecord: Recordable[], type: ChangeType): void {\n    this.emit(\n      'update:fileActualIds',\n      !this._props.immediate && (this._params.businessId || this._params.businessKey)\n        ? this.getResult()\n        : this.getFileActualIds()\n    )\n    this.emit('change', newRecord, this._uploadResponse, type)\n  }\n  /**\n   * 更新一条数据\n   * @param {Recordable} record\n   * @memberof Handler\n   **/\n  updateItem = (record: FileItemType, oldFileActualIds: string) => {\n    // const { actualId } = record\n    const index = this._uploadResponse.findIndex((el) => el.actualId === oldFileActualIds)\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    const oldRecord = this._uploadResponse.splice(index, 1, record)[0]\n    // this._fileFormatter.upadteVersion(oldRecord)\n    this._fileFormatter.upadteVersion(record)\n    this.fillDataSource()\n    this.throwResponse([{ ...record, version: oldRecord.version + 1 }], 'update')\n  }\n  /**\n   * 删除一条数据\n   * @param {Recordable} record 需要删除的文件信息\n   * @memberof Handler\n   */\n  deleteItem = (record: Recordable) => {\n    const { actualId } = record\n    const index = this._uploadResponse.findIndex((el) => el.actualId === actualId)\n    const newRecord = this._uploadResponse[index]\n\n    const spliceData = () => {\n      this._uploadResponse.splice(index, 1)\n      this.fillDataSource()\n      this.throwResponse([newRecord], 'delete')\n    }\n\n    this._isLoading.value = true\n    if (!this._immediate) {\n      spliceData()\n      setTimeout(() => {\n        this._isLoading.value = false\n      }, 300)\n      return\n    }\n    this.apis.removeFile!(actualId)\n      .then(() => {\n        spliceData()\n      })\n      .catch(() => {\n        createMessage.warn(tavI18n('Tav.file.message.1'))\n      })\n      .finally(() => (this._isLoading.value = false))\n  }\n\n  // 根据params请求数据\n  async backfill() {\n    if (!this._showTable) return\n\n    if (this._params.businessId || this._params.businessKey) {\n      // 回填||切换select 清空\n      this.clearResponse()\n      this._isLoading.value = true\n\n      const response = await this.apis.queryFile!({\n        filter: {\n          ...this._params,\n          typeCode: undefined, // 本地切换类型\n        },\n        model: {\n          page: 1,\n          limit: 50,\n        },\n      }).finally(() => (this._isLoading.value = false))\n      this._uploadResponse.push(...response.data.result)\n      this._fileFormatter.formatToApi(this._uploadResponse)\n\n      this.throwResponse(response.data.result, 'init')\n    }\n    this.fillDataSource()\n  }\n\n  /**\n   * 在弹窗关闭时调用\n   */\n  clearResponse(): void {\n    this.uploadResponse = []\n    this._props.params.typeCode && (this._typeCode.value = this._props.params.typeCode)\n    this.throwResponse([], 'delete')\n  }\n\n  /**\n   * 多个文件依次push到文件列表(变量)\n   * @param file 一个文件\n   */\n  antBeforeUpload = (file: File) => {\n    const regexpStr = `[\\\\\\\\/:*?\"<>|]`\n    const fileRegexp = new RegExp(regexpStr, 'g')\n    if (fileRegexp.test(file.name)) {\n      createMessage.warn(`${file.name} ${tavI18n('Tav.file.upload.5')}${regexpStr}`)\n      return false\n    } else {\n      this._refFileList.push(file)\n    }\n  }\n\n  /**\n   * 将多个文件组合在一起发送上传请求\n   */\n  customRequest = () => {\n    if (this.isInvalidRequest()) return\n    const sizeOverflowFiles = this._refFileList.filter((file) => file.size / 1024 / 1024 > 1024)\n    if (sizeOverflowFiles.length > 0) {\n      createMessage.warn(\n        `${tavI18n('Tav.file.upload.4')} ${sizeOverflowFiles\n          .map((file) => `${file.name}:${Math.floor(file.size / 1024 / 1024)}MB`)\n          .join()}${tavI18n('Tav.common.greater')}1GB`\n      )\n      this.resetFileList()\n      return\n    }\n    if (\n      this._props.maxCount &&\n      this._uploadResponse.length + this._refFileList.length > this._props.maxCount\n    ) {\n      createMessage.warn(`${tavI18n('Tav.file.message.4')} ${this._props.maxCount}个`)\n      this.resetFileList()\n      return\n    }\n    this._refFileListPushEnd = true\n    this.realUpload()\n  }\n\n  private resetFileList = () => {\n    this._refFileList = []\n    this._refFileListPushEnd = false\n    this._isLoading.value = false\n  }\n\n  /**\n   * 真正的上传请求\n   */\n  private realUpload = async () => {\n    // 非更新时候 typecode必传\n    if (!this._typeCode.value) {\n      createMessage.warn(tavI18n('Tav.file.message.5'))\n      this.resetFileList()\n      return\n    }\n    const { beforeUpload } = this._props\n    if (beforeUpload && !(await beforeUpload(this._refFileList, this._typeCode.value))) {\n      this.resetFileList()\n      return\n    }\n\n    // fillFormData begin\n    const formData = new FormData()\n    this._refFileList.forEach((el) => {\n      formData.append('files', el)\n    })\n    this._params.typeCode = this._typeCode.value\n    // 将参数塞到formData里面去\n    for (const k in this._params) {\n      if (!this._immediate && ['businessId', 'businessKey'].includes(k)) continue\n      if (!this._params[k]) continue\n      this._params[k] != undefined && formData.append(k, this._params[k])\n    }\n    // fillFormData end\n\n    this._isLoading.value = true\n    this.currentUpload = this.apis.uploadFile!(formData)\n      .then(({ data: r }) => {\n        this._uploadResponse.unshift(...r)\n        this.throwResponse(r, 'upload')\n        nextTick(() => this.fillDataSource())\n        r.forEach((el) => {\n          this._fileFormatter.upadteVersion(el)\n        })\n\n        createMessage.success(tavI18n('Tav.file.message.6'))\n      })\n      .catch(() => {\n        // createMessage.error(\"上传失败\");\n      })\n      .finally(() => {\n        this.resetFileList()\n      })\n  }\n\n  hyperlinkFormRegister = (methods: Partial<FormActionType>) => {\n    this._hyperlinkFormMethods = methods\n  }\n\n  /**\n   * 超链接上传\n   */\n  hyperlinkUpload() {\n    if (!this._typeCode.value) {\n      createMessage.warn(tavI18n('Tav.file.message.5'))\n      this.resetFileList()\n      return\n    }\n    const payload = {\n      ...this._params,\n      typeCode: this._typeCode.value,\n      name: this._paramsName,\n      address: this._paramsAddress,\n    }\n    if (!this._immediate) {\n      Reflect.deleteProperty(payload, 'businessId')\n      Reflect.deleteProperty(payload, 'businessKey')\n    }\n    this._isLoading.value = true\n    this.apis.uploadHyperlink!(payload)\n      .then(({ data: r }) => {\n        this._uploadResponse.unshift(r)\n        this._fileFormatter.upadteVersion(r)\n        this.throwResponse([r], 'upload')\n        nextTick(() => this.fillDataSource())\n        createMessage.success(tavI18n('Tav.file.message.6'))\n      })\n      .catch(() => {\n        // createMessage.error(\"上传失败\");\n      })\n      .finally(() => {\n        this._hyperlinkFormMethods.resetFields?.()\n        this._isLoading.value = false\n      })\n  }\n\n  preOpenChooseFile = (e: MouseEvent) => {\n    if (!this._typeCode.value) {\n      createMessage.warn(tavI18n('Tav.file.message.5'))\n      e.stopPropagation()\n    }\n  }\n}\n\nexport { Handler }\n"],"names":[],"mappings":"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"}