tav-ui
Version:
1 lines • 32.8 kB
Source Map (JSON)
{"version":3,"file":"index4.mjs","sources":["../../../../../../../../packages/components/file/src/FileCards/index.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport {\n type CSSProperties,\n computed,\n nextTick,\n onBeforeUnmount,\n onMounted,\n ref,\n watch,\n /*useSlots,*/\n useAttrs,\n} from 'vue'\nimport { Empty, Spin } from 'ant-design-vue'\nimport Masonry from 'masonry-layout'\nimport { tavI18n } from '@tav-ui/locales'\nimport { isObject } from '@tav-ui/utils'\nimport {\n DEFAULT_APIPARAMS,\n DEFAULT_FILECARDS_CLASSNAME,\n DEFAULT_FILECARDS_ID,\n DEFAULT_FILECARD_CLASSNAME,\n} from '../consts'\nimport { useDisable, useGlobalConfigProps, useLoading, useMergedProps, useRequest } from '../hooks'\nimport {\n type FileActionUploadApiResponseRecord,\n type FileTypeSelectApiResponseRecord,\n} from '../typings'\nimport { type FileActionUploadLinkEmits } from '../components/FileActionUploadLink'\nimport { type FileActionUploadEmits } from '../components/FileActionUpload'\nimport {\n type FileCardEmits,\n type FileCardInstance,\n type FileCardProps,\n TaFileCard,\n} from '../FileCard'\nimport { type ArgumentsOf } from '../utils'\nimport {\n type FileCardMultiple,\n type FileCardsCatagory,\n type FileCardsEmits,\n type FileCardsProps,\n fileCardsEmits,\n fileCardsProps,\n} from './types'\nimport { useMode } from './hooks'\n\nconst EmptyImage = Empty.PRESENTED_IMAGE_SIMPLE\n\ndefineOptions({\n name: 'TaFileCards',\n inheritAttrs: false,\n})\n\nconst props = defineProps(fileCardsProps)\nconst emits = defineEmits(fileCardsEmits)\n// const slots = useSlots()\nconst attrs = useAttrs()\n\n// 将 globalconfig 与 fileactionupload props 结合,同名 props 已 fileactionupload props 为主\nconst globalConfigProps = useGlobalConfigProps()\nconst mergedProps = useMergedProps<FileCardsProps>(globalConfigProps, props, 'TaFileCards', {\n ...DEFAULT_APIPARAMS,\n})\n\nconst fileCardsElRef = ref<HTMLDivElement>()\nconst fileActualIdsValueMap = ref<{ [key: string]: ArgumentsOf<FileCardEmits['actualidsChange']> }>(\n {}\n)\n\n// 统一内部 loading 状态\nconst _loading = ref(mergedProps.value.loading)\nconst loading = computed({\n get() {\n return _loading\n },\n set(newLoading: any) {\n _loading.value = newLoading.value\n },\n})\n\nconst {\n apiActions: { typeSelectApiOptions, apiQueryFileListOptions },\n} = useMode({ mergedProps })\n\n// 使用 api 处理数据\nconst { setDisable } = useDisable()\nconst { setLoading } = useLoading()\nconst {\n result: ApiResult,\n error: apiError,\n handleApi,\n} = useRequest({\n setLoading,\n setDisable,\n loading,\n})\n\nconst fileCardRefs: { [key: string]: FileCardInstance } = {}\nfunction handleFileCardRefs(fileCardValue: string, fileCardRef?: FileCardInstance) {\n if (fileCardRef) fileCardRefs[fileCardValue] = fileCardRef\n}\n\nasync function useFileTypeSelectCatgory() {\n loading.value.value = true\n\n const options = typeSelectApiOptions(mergedProps.value.apiParams)\n if (!options) {\n loading.value.value = false\n return\n }\n\n await handleApi(options)\n loading.value.value = false\n\n return ApiResult.value as FileTypeSelectApiResponseRecord[]\n}\n\nasync function useFileListCatgory() {\n loading.value.value = true\n\n const options = apiQueryFileListOptions(mergedProps.value.apiParams)\n if (!options) {\n loading.value.value = false\n return\n }\n\n await handleApi(options)\n loading.value.value = false\n\n return ApiResult.value as FileActionUploadApiResponseRecord[]\n}\n\nfunction isFileCardHasDataSource(fileCard: FileCardsProps['fileCard']) {\n if (!fileCard) return false\n\n if (!Array.isArray(fileCard)) {\n return false\n } else {\n return (\n fileCard.filter((fileCard) => fileCard.dataSource && Array.isArray(fileCard.dataSource))\n .length === fileCard.length\n )\n }\n}\n\nconst catagories = ref<FileCardsCatagory[]>()\n/** 这里只做初始化分类,后续的更新与合并在 fileCardProps 中 */\nasync function catagory() {\n const hasDatasources = isFileCardHasDataSource(mergedProps.value.fileCard)\n\n function useFileCardArrayObjectCreateCatagoriesValue() {\n return (\n (mergedProps.value.fileCard as FileCardMultiple | undefined)?.map((fileCard) => {\n if (fileCard.value && !fileActualIdsValueMap.value[fileCard.value]) {\n fileActualIdsValueMap.value[fileCard.value] = [] as any\n }\n return {\n label: fileCard.label,\n value: fileCard.value,\n dataSource: fileCard.dataSource ?? [],\n }\n }) ?? []\n )\n }\n\n function useFileCardObjectCreateCatagoriesValue() {\n return [] as any[]\n }\n\n async function useApiCreateCatagoriesValue() {\n // 传入 immediate 时只使用接口构造数据,并且不考虑合并 datasource\n const fileTypes = await useFileTypeSelectCatgory()\n const files = await useFileListCatgory()\n return (\n fileTypes?.map((fileType) => {\n if (fileType.code && !fileActualIdsValueMap.value[fileType.code]) {\n fileActualIdsValueMap.value[fileType.code] = [] as any\n }\n\n const currentTypeFiles = files?.filter((file) => file.typeCode === fileType.code) ?? []\n return {\n label: fileType.name,\n value: fileType.code,\n dataSource: [...currentTypeFiles],\n __dataSourceFromCards: true,\n }\n }) ?? []\n )\n }\n\n if (mergedProps.value.immediate) {\n if (hasDatasources) {\n catagories.value = useFileCardArrayObjectCreateCatagoriesValue()\n } else {\n // 没有 datasource 只有俩中情况\n // 1. filecard 没传,使用 api 构造\n // 2. filecard 传了对象(不包含 label/value/datasource),使用 api 构造并且将 filecard 统一配置合并\n catagories.value = await useApiCreateCatagoriesValue()\n }\n } else {\n if (hasDatasources) {\n catagories.value = useFileCardArrayObjectCreateCatagoriesValue()\n } else {\n // 没有 datasource 只有俩中情况\n // 1. filecard 没传,使用 api 构造\n // 2. filecard 传了对象(不包含 label/value/datasource)\n catagories.value = useFileCardObjectCreateCatagoriesValue()\n }\n }\n}\n\nconst fileCardProps = computed(() => (_catagory: FileCardsCatagory | undefined) => {\n // 1. filecard 为对象数组时,使用分类中的 typecode 找到传入的 filecard\n // 2. filecard 为对象时(不包含 label/value/datasource)只做统一配置\n const targetFileCard = mergedProps.value.fileCard\n ? Array.isArray(mergedProps.value.fileCard)\n ? mergedProps.value.fileCard.find((fileCard) => fileCard.value === _catagory?.value) ??\n ({} as any)\n : mergedProps.value.fileCard\n : ({} as any)\n\n // 对传入的 filecard 与初始化分类数据进行合并\n const mergedCatagory = {\n ...(_catagory ?? {}),\n mode: mergedProps.value.mode,\n visible: mergedProps.value.visible,\n immediate: mergedProps.value.immediate,\n autoValidate: mergedProps.value.autoValidate,\n loading: mergedProps.value.loading,\n ...targetFileCard,\n dataSource: [\n ...(mergedProps.value.immediate\n ? _catagory?.dataSource ?? []\n : targetFileCard?.dataSource ?? []),\n ],\n fileActionUpload: {\n ...(mergedProps.value.fileActionUpload ?? {}),\n ...(targetFileCard.fileActionUpload ?? {}),\n },\n fileActionUploadLink: {\n ...(mergedProps.value.fileActionUploadLink ?? {}),\n ...(targetFileCard.fileActionUploadLink ?? {}),\n },\n }\n return {\n ...mergedCatagory,\n apiParams: {\n //@ts-ignore\n typeCode: mergedCatagory.value!,\n ...mergedProps.value.apiParams,\n ...(targetFileCard.apiParams ?? {}), // 以子组件中的 apiparams 为准,这里最后覆盖\n },\n }\n})\n\nasync function handleFileCardActualidsChange(...args: [FileCardProps['value'], any]) {\n const [value, _args] = args as unknown as [\n FileCardProps['value'],\n ArgumentsOf<FileCardEmits['actualidsChange']>\n ]\n fileActualIdsValueMap.value = { ...fileActualIdsValueMap.value, [value!]: _args }\n const fileActualIdsValue: { [key: string]: ArgumentsOf<FileCardEmits['actualidsChange']> } =\n JSON.parse(JSON.stringify(fileActualIdsValueMap.value))\n\n const result = [] as any[]\n for (const fileActualIds of Object.values(fileActualIdsValue)) {\n result.push(...fileActualIds)\n }\n emits('update:fileActualIds', result)\n\n await retriggerWaterfall()\n}\n\nfunction handleFileActionUploadChangeValidateSuccessChange(...args: any) {\n emits(\n 'fileActionUpload:validateSuccessChange',\n ...(args as unknown as ArgumentsOf<FileCardsEmits['fileActionUpload:validateSuccessChange']>)\n )\n}\n\nfunction handleFileActionUploadChangeValidateFailureChange(...args: any) {\n emits(\n 'fileActionUpload:validateFailureChange',\n ...(args as unknown as ArgumentsOf<FileCardsEmits['fileActionUpload:validateFailureChange']>)\n )\n}\n\nasync function handleFileActionUploadChange(...args: any) {\n emits(\n 'fileActionUpload:uploadedChange',\n ...(args as unknown as ArgumentsOf<FileCardsEmits['fileActionUpload:uploadedChange']>)\n )\n}\n\nfunction handleFileActionUploadLinkChangeValidateSuccessChange(...args: any) {\n emits(\n 'fileActionUploadLink:validateSuccessChange',\n ...(args as unknown as ArgumentsOf<\n FileCardsEmits['fileActionUploadLink:validateSuccessChange']\n >)\n )\n}\n\nfunction handleFileActionUploadLinkChangeValidateFailureChange(...args: any) {\n emits(\n 'fileActionUploadLink:validateFailureChange',\n ...(args as unknown as ArgumentsOf<\n FileCardsEmits['fileActionUploadLink:validateFailureChange']\n >)\n )\n}\n\nasync function handleFileActionUploadLinkChange(...args: any) {\n emits(\n 'fileActionUploadLink:uploadedChange',\n ...(args as unknown as ArgumentsOf<FileCardsEmits['fileActionUploadLink:uploadedChange']>)\n )\n}\n\nconst fileCardWaterfallStyle = ref<CSSProperties>()\nconst waterfallInstance = ref<Masonry | null>(null)\nasync function retriggerWaterfall() {\n if (!mergedProps.value.waterfallConfig.enabled) return\n\n await nextTick()\n if (fileCardsElRef.value) {\n const wrapperEl = fileCardsElRef.value.querySelector(\n `.${DEFAULT_FILECARDS_CLASSNAME}-main--waterfall`\n )\n if (wrapperEl) {\n const columnWidth = mergedProps.value.waterfallConfig.width ?? 400\n fileCardWaterfallStyle.value = { ...fileCardWaterfallStyle.value, width: `${columnWidth}px` }\n waterfallInstance.value && waterfallInstance.value.destroy?.()\n waterfallInstance.value = new Masonry(`.${DEFAULT_FILECARDS_CLASSNAME}-main--waterfall`, {\n itemSelector: `.${DEFAULT_FILECARD_CLASSNAME}`,\n columnWidth,\n gutter: 20,\n })\n waterfallInstance.value && waterfallInstance.value.layout?.()\n }\n }\n}\n\nonMounted(async () => {\n await catagory()\n\n await retriggerWaterfall()\n})\n\n// 清空状态\nasync function cleanup() {\n const fileCardCleanupPromises = Object.values(fileCardRefs).map(\n // eslint-disable-next-line no-return-await\n async (fileCardRef) => await fileCardRef.cleanup()\n )\n await Promise.all(fileCardCleanupPromises)\n\n waterfallInstance.value?.destroy?.()\n waterfallInstance.value = null\n}\n\n// mode 变化\nwatch(\n () => mergedProps.value.mode,\n async () => {\n // if(mergedProps.value.visible) {}\n await cleanup()\n loading.value.value = true\n await catagory()\n loading.value.value = false\n\n await retriggerWaterfall()\n }\n)\n\n// filecard 数据结构变化\nwatch(\n () => JSON.stringify(mergedProps.value.fileCard),\n async (curfileCard, prefileCard) => {\n if (curfileCard && curfileCard !== prefileCard) {\n await cleanup()\n loading.value.value = true\n await catagory()\n loading.value.value = false\n\n await retriggerWaterfall()\n }\n }\n)\n\n// apiparams 变化重新请求\nwatch(\n () => JSON.stringify(mergedProps.value.apiParams),\n async (curApiParams, preApiParams) => {\n if (curApiParams && curApiParams !== preApiParams) {\n if (mergedProps.value.immediate) {\n const curTSAO = typeSelectApiOptions(mergedProps.value.apiParams)\n if (!curTSAO) return\n const preTSAO = typeSelectApiOptions(JSON.parse(preApiParams))\n if (!preTSAO) return\n const curQFLO = apiQueryFileListOptions(mergedProps.value.apiParams)\n if (!curQFLO) return\n const preQFLO = apiQueryFileListOptions(JSON.parse(preApiParams))\n if (!preQFLO) return\n if (curApiParams !== preApiParams && curTSAO !== preTSAO && curQFLO !== preQFLO) {\n loading.value.value = true\n await catagory()\n loading.value.value = false\n\n retriggerWaterfall()\n }\n }\n }\n }\n)\n\n// 重新布局 waterfall\nwatch(\n () => JSON.stringify(mergedProps.value.waterfallConfig),\n (curwaterfallConfig, prewaterfallConfig) => {\n if (curwaterfallConfig && curwaterfallConfig !== prewaterfallConfig) {\n const cur = JSON.parse(curwaterfallConfig)\n const pre = JSON.parse(prewaterfallConfig)\n if (cur.enabled && cur.width !== pre.width) {\n retriggerWaterfall()\n }\n }\n }\n)\n\nonBeforeUnmount(async () => {\n await cleanup()\n})\n\ndefineExpose({\n cleanup,\n getFileCardRefMap: () => fileCardRefs,\n getDataSource: (cardPropValue?: string) => {\n if (!cardPropValue) {\n return Object.values(fileCardRefs).map((fileCardRef) => fileCardRef.getDataSource())\n } else {\n return fileCardRefs[cardPropValue].getDataSource()\n }\n },\n validate: async (cardPropValue?: string) => {\n if (!cardPropValue) {\n const promises = Object.values(fileCardRefs).map(async (fileCardRef, idx) => {\n const typeCodes = Object.keys(fileCardRefs)\n const result = {\n typeCode: typeCodes[idx],\n success: false,\n error: [] as any,\n }\n try {\n const success = await fileCardRef.validate()\n result.success = success\n } catch (error: any) {\n result.error = error\n } finally {\n // eslint-disable-next-line no-unsafe-finally\n return result\n }\n })\n const result = await Promise.all(promises)\n return result\n } else {\n const result = {\n typeCode: cardPropValue,\n success: false,\n error: [] as any,\n }\n try {\n const success = await fileCardRefs[cardPropValue].validate()\n result.success = success\n } catch (error: any) {\n result.error = error\n } finally {\n // eslint-disable-next-line no-unsafe-finally\n return result\n }\n }\n },\n clearValidate: (cardPropValue?: string) => {\n if (!cardPropValue) {\n return Object.values(fileCardRefs).map((fileCardRef) => fileCardRef.clearValidate())\n } else {\n return fileCardRefs[cardPropValue].clearValidate()\n }\n },\n})\n</script>\n\n<template>\n <template v-if=\"mergedProps.visible\">\n <section\n :id=\"DEFAULT_FILECARDS_ID\"\n ref=\"fileCardsElRef\"\n :class=\"`${DEFAULT_FILECARDS_CLASSNAME} ${attrs.class ? attrs.class : ''}`\"\n >\n <!-- <section :class=\"`${DEFAULT_FILECARDS_CLASSNAME}-header`\"></section> -->\n <section :class=\"`${DEFAULT_FILECARDS_CLASSNAME}-main`\">\n <Spin :spinning=\"loading.value\" :tip=\"tavI18n('Tav.common.loadingText')\">\n <template v-if=\"catagories?.length === 0 || apiError\">\n <span v-if=\"apiError\">{{ apiError }}</span>\n <br />\n <Empty :image=\"EmptyImage\" />\n </template>\n <template v-else>\n <template v-if=\"mergedProps.waterfallConfig.enabled\">\n <div :class=\"`${DEFAULT_FILECARDS_CLASSNAME}-main--waterfall`\">\n <TaFileCard\n v-for=\"item in catagories\"\n :key=\"`${item.value}`\"\n :ref=\"(instance: any) => handleFileCardRefs(item.value, instance)\"\n v-bind=\"fileCardProps(item)\"\n :style=\"fileCardWaterfallStyle\"\n @actualids-change=\"(args: any[]) => handleFileCardActualidsChange(item.value, args)\"\n @file-action-upload:validate-success-change=\"\n (...args: any[]) => handleFileActionUploadChangeValidateSuccessChange(`${item.value}`, args)\n \"\n @file-action-upload:validate-failure-change=\"\n (...args: any[]) => handleFileActionUploadChangeValidateFailureChange(`${item.value}`, args)\n \"\n @file-action-upload:uploaded-change=\"(...args: any[]) => handleFileActionUploadChange(`${item.value}`, args)\"\n @file-action-upload-link:validate-success-change=\"\n (...args: any[]) => handleFileActionUploadLinkChangeValidateSuccessChange(`${item.value}`, args)\n \"\n @file-action-upload-link:validate-failure-change=\"\n (...args: any[]) => handleFileActionUploadLinkChangeValidateFailureChange(`${item.value}`, args)\n \"\n @file-action-upload-link:uploaded-change=\"(...args: any[]) => handleFileActionUploadLinkChange(`${item.value}`, args)\"\n />\n </div>\n </template>\n <template v-else>\n <TaFileCard\n v-for=\"item in catagories\"\n :key=\"`${item.value}`\"\n :ref=\"(instance: any) => handleFileCardRefs(item.value, instance)\"\n v-bind=\"fileCardProps(item)\"\n @actualids-change=\"(args: any[]) => handleFileCardActualidsChange(item.value, args)\"\n @file-action-upload:validate-success-change=\"\n (...args: any[]) => handleFileActionUploadChangeValidateSuccessChange(`${item.value}`, args)\n \"\n @file-action-upload:validate-failure-change=\"\n (...args: any[]) => handleFileActionUploadChangeValidateFailureChange(`${item.value}`, args)\n \"\n @file-action-upload:uploaded-change=\"(...args: any[]) => handleFileActionUploadChange(`${item.value}`, args)\"\n @file-action-upload-link:validate-success-change=\"\n (...args: any[]) => handleFileActionUploadLinkChangeValidateSuccessChange(`${item.value}`, args)\n \"\n @file-action-upload-link:validate-failure-change=\"\n (...args: any[]) => handleFileActionUploadLinkChangeValidateFailureChange(`${item.value}`, args)\n \"\n @file-action-upload-link:uploaded-change=\"(...args: any[]) => handleFileActionUploadLinkChange(`${item.value}`, args)\"\n />\n </template>\n </template>\n </Spin>\n </section>\n <!-- <section :class=\"`${DEFAULT_FILECARDS_CLASSNAME}-footer`\"></section> -->\n </section>\n </template>\n</template>\n"],"names":["_unref","_openBlock","_createElementBlock","result","_normalizeClass","_createCommentVNode","_createElementVNode","_createVNode","_withCtx","_Fragment","_toDisplayString","_renderList","_createBlock","_mergeProps"],"mappings":"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"}