UNPKG

tav-ui

Version:
344 lines (341 loc) 10.6 kB
import { isVNode, defineComponent, toRefs, ref, watch, createVNode } from 'vue'; import { Upload as Upload$1, ButtonGroup } from 'ant-design-vue'; import '../../index2.mjs'; import { TaButton } from '../../button/index2.mjs'; import '../../../locales/index2.mjs'; import './components/index2.mjs'; import { Handler } from './main2.mjs'; import { PreviewTable } from './components/PreviewTable2.mjs'; import { TypeSelect } from './components/TypeSelect2.mjs'; import { TaIcon } from '../../icon/index2.mjs'; import { tavI18n } from '../../../locales/transfer2.mjs'; import { HyperlinkForm } from './components/HyperlinkForm2.mjs'; function _isSlot(s) { return typeof s === "function" || Object.prototype.toString.call(s) === "[object Object]" && !isVNode(s); } var Upload = defineComponent({ name: "TaUpload", components: { PreviewTable }, props: { title: String, typeCodeArray: { type: Array, default: () => [] }, fileActualIds: Array, params: { type: Object, required: true }, showSelect: { type: [Boolean, String], default: "unset" }, disabledSelect: { type: [Boolean, String], default: false }, showTable: { type: Boolean, default: true }, showTitle: { type: [Boolean, String], default: "unset" }, showTableAction: { type: Object, default: () => ({}) }, beforeUpload: { type: Function }, accept: { type: String, default: ".doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.gif,.jpeg,.jpg,.png," }, onChange: Function, readonly: { type: Boolean, default: false }, noDefaultValue: { type: Boolean, default: false }, controlInOuter: { type: Boolean, default: false }, uploadResponse: Array, showUploadBtn: { type: [Boolean, String], default: "unset" }, showUploadHyperlinkBtn: { type: [Boolean, String], default: "unset" }, canResize: { type: Boolean, default: false }, onClickName: Function, customOptions: Array, tableActionPermission: { type: Object, default: () => ({}) }, typeCodeRecord: Object, removeFile: Function, queryFile: Function, uploadFile: Function, uploadHyperlink: Function, download: Function, updateFileNameAndAddress: Function, queryFileType: Function, uploadIcon: { type: String, default: "ant-design:upload-outlined" }, onSelect: Function, coverColumnTitle: Object, hideColumnFields: Array, insertColumns: Array, nameColumnWidth: [Number, String], AppId: [String, Number], fileBranchIsShowDeleteAction: Function, maxCount: Number, immediate: { type: Boolean, default: false }, emptyState: { type: String, default: "normal" }, tableMaxHeight: { type: String }, queryFileTypeRecursion: { type: Boolean, default: false }, checkboxConfig: { type: Object, default: () => ({ enabled: false }) }, permissionControl: Number, getPopupContainer: Function }, emits: ["update:fileActualIds", "change", "register"], setup(props, { emit, slots, expose }) { const { params, customOptions, typeCodeArray } = toRefs(props); const showTitle = ref(props.showTitle); const showSelect = ref(props.showSelect); const showUploadBtn = ref(props.showUploadBtn); const showUploadHyperlinkBtn = ref(props.showUploadHyperlinkBtn); const typeCodeOptions = ref(customOptions.value ?? []); const showWarnClass = ref(false); const uploadBtnRef = ref(); function triggerWarn() { showWarnClass.value = true; setTimeout(() => { showWarnClass.value = false; }, 2400); } const handler = new Handler(props, emit); expose(Object.assign({ triggerWarn }, handler)); emit("register", handler); watch(() => props.readonly, (v, p) => { if (v === p) return; if (v) { props.showTitle === "unset" && (showTitle.value = false); props.showSelect === "unset" && (showSelect.value = false); props.showUploadBtn === "unset" && (showUploadBtn.value = false); props.showUploadHyperlinkBtn === "unset" && (showUploadHyperlinkBtn.value = false); } else { props.showTitle === "unset" && (showTitle.value = true); props.showSelect === "unset" && (showSelect.value = true); props.showUploadBtn === "unset" && (showUploadBtn.value = true); props.showUploadHyperlinkBtn === "unset" && (showUploadHyperlinkBtn.value = !!handler.apis.uploadHyperlink); } }, { deep: true, immediate: true }); const titleEl = () => { if (slots.title) { return slots.title({ showTitle }); } else if (props.title) { return createVNode("div", { "class": "ta-upload-title" }, [props.title]); } return null; }; const selectEl = () => { const selectProps = { customOptions: customOptions.value, moduleCode: params.value.moduleCode, typeCodeArray: typeCodeArray.value, noDefaultValue: props.noDefaultValue, disabledSelect: props.disabledSelect, selected: handler.typeCode.value, typeCodeRecord: handler.typeCodeRecord, "onUpdate:selected": (val) => { handler.typeCode.value = val; }, "onUpdate:options": (val) => { typeCodeOptions.value = val; }, onSelect: props.onSelect, queryFileType: handler.apis.queryFileType, queryFileTypeRecursion: props.queryFileTypeRecursion, permissionControl: props.permissionControl, getPopupContainer: props.getPopupContainer }; const ISelect = (_, { slots: slots2 }) => createVNode(TypeSelect, selectProps, slots2); if (slots.selectType) { return createVNode(ISelect, null, { default: ({ typeCodeOptions: typeCodeOptions2 }) => slots.selectType({ typeCodeOptions: typeCodeOptions2, selectedValue: handler.typeCode.value, selectedLabel: typeCodeOptions2.find((el) => el.value === handler.typeCode.value)?.label, ...selectProps }) }); } else { return ISelect(void 0, {}); } }; const uploadBtnEl = () => { const IButton = () => slots.default ? slots.default({ loading: handler.loading.value }) : createVNode(TaButton, { "ref": uploadBtnRef, "loading": handler.loading.value, "class": { file: true, "warn-class": showWarnClass.value }, "onClick": handler.preOpenChooseFile }, { default: () => [createVNode(TaIcon, { "icon": props.uploadIcon }, null), tavI18n("Tav.file.upload.1")] }); const IUpload = () => { let _slot; return handler.loading.value ? IButton() : createVNode(Upload$1, { "fileList": [], "multiple": true, "accept": props.accept, "showUploadList": false, "beforeUpload": handler.antBeforeUpload, "customRequest": handler.customRequest }, _isSlot(_slot = IButton()) ? _slot : { default: () => [_slot] }); }; const HyperlinkBtn = () => createVNode(TaButton, { "loading": handler.loading.value, "class": "hyperlink", "onClick": () => { handler.currentTypeCodeIsHyperlink.value = !handler.currentTypeCodeIsHyperlink.value; } }, { default: () => [handler.currentTypeCodeIsHyperlink.value ? tavI18n("Tav.file.upload.2") : tavI18n("Tav.file.upload.3")] }); if (slots.default) { return IUpload(); } else { return createVNode("div", { "class": "ta-upload-btn" }, [createVNode(ButtonGroup, null, { default: () => [slots.beforeButton?.({ loading: handler.loading.value }), IUpload(), slots.centerButton?.({ loading: handler.loading.value }), showUploadHyperlinkBtn.value ? HyperlinkBtn() : null, slots.afterButton?.({ loading: handler.loading.value })] })]); } }; const uploadHyperlinkBtnEl = () => { if (props.showUploadHyperlinkBtn && handler.currentTypeCodeIsHyperlink.value) { return createVNode(HyperlinkForm, { "name": handler.paramsName, "onUpdate:name": (v) => handler.paramsName = v, "address": handler.paramsAddress, "onUpdate:address": (v) => handler.paramsAddress = v, "onChange": (success) => { if (success) { handler.hyperlinkUpload(); } }, "loading": handler.loading, "onRegister": handler.hyperlinkFormRegister }, null); } return null; }; const tableEl = () => { const tableProps = { uploadBtnRef, parentProps: props, handler, dataSource: handler.dataSource.value, loading: handler.loading.value, readonly: props.readonly, onDelete: handler.deleteItem, showTableAction: props.showTableAction, onClickName: props.onClickName, canResize: props.canResize, tableActionPermission: props.tableActionPermission, customOptions: typeCodeOptions.value, download: handler.apis.download, updateFileNameAndAddress: handler.apis.updateFileNameAndAddress, coverColumnTitle: props.coverColumnTitle, hideColumnFields: props.hideColumnFields, insertColumns: props.insertColumns, nameColumnWidth: props.nameColumnWidth, moduleCode: params.value.moduleCode }; if (slots.tablePreview) { return slots.tablePreview(tableProps); } else { return props.showTable ? createVNode(PreviewTable, tableProps, null) : null; } }; return () => createVNode("section", { "class": "ta-upload" }, [showTitle.value ? titleEl() : null, createVNode("div", { "class": "ta-upload-btn-title" }, [showSelect.value ? selectEl() : null, showUploadBtn.value ? uploadBtnEl() : null]), uploadHyperlinkBtnEl(), tableEl()]); } }); export { Upload as default }; //# sourceMappingURL=Upload2.mjs.map