tav-ui
Version:
344 lines (341 loc) • 10.6 kB
JavaScript
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