import { DisplayPosition } from '../position/display-position';
import { UploadCom } from './components/upload';
import { getJSExpressionPrototype } from '../common-style';
import {
handleRequestParams,
handleResultProcessFunc,
transRequestConfigToRemote,
} from '../../util/request';
import { __advancedConfig__ } from '@/common/util/const';
import { setAdvancedConfigToProps } from '@/common/util/util';
import { getRequestConfigSetterSnippet } from '@/common/manager/setter-snippet';
import DocSetter from '@/common/setter/doc-setter';
import UploadEnhanceSetter from '@/common/setter/upload-enhance-setter';
const Upload = {
position: [
DisplayPosition.form,
DisplayPosition.formDialog,
DisplayPosition.cnArrayTable,
DisplayPosition.cnArraySubAreaCard,
],
title: '文件上传',
componentName: 'Upload',
component: UploadCom,
formComponent: UploadCom,
thumbUrl:
'https://img.alicdn.com/imgextra/i1/O1CN017DgkUq1IzYfWBFOAD_!!6000000000964-2-tps-240-144.png',
getDefaultProps: () => {
return {
mode: 'oss',
useDetailValue: false,
};
},
formItemBeforeHandler: (formItem, config) => {
const { state, formValue, urlParams } = config;
if (formItem) {
const componentProps = formItem['x-component-props'];
if (componentProps) {
const {
requestConfig,
uploadProps,
webOfficeEnable,
webOfficeEditRequestConfig,
webOfficePreviewRequestConfig,
} = componentProps;
if (uploadProps && Array.isArray(uploadProps.accept)) {
uploadProps.accept = uploadProps.accept.join(',');
}
if (webOfficeEnable === true) {
componentProps.webOfficeEditRequestConfig =
transRequestConfigToRemote({
requestConfig: webOfficeEditRequestConfig,
urlParamsDataSource: urlParams,
recordDataSource: formValue,
state,
});
componentProps.webOfficePreviewRequestConfig =
transRequestConfigToRemote({
requestConfig: webOfficePreviewRequestConfig,
urlParamsDataSource: urlParams,
recordDataSource: formValue,
state,
});
} else {
delete componentProps.webOfficeEditRequestConfig;
delete componentProps.webOfficePreviewRequestConfig;
}
if (requestConfig) {
const {
url,
method,
serviceType,
params,
resultProcessFunc,
__extraConfig__,
} = requestConfig;
if (url) {
const service = {
url,
};
const ossUploadConfig = {};
const { withCredentials } = __extraConfig__ || {};
if (withCredentials === true) {
service.withCredentials = true;
// 2023.3.23 文件上传组件升级后,获取凭证和推送文件两个请求拆分为两个requestConfig
ossUploadConfig.withCredentials = true;
componentProps.ossUploadConfig = ossUploadConfig;
}
if (serviceType === 'mokelay') {
service.method = 'post';
} else if (method) {
service.method = method;
}
componentProps.service = service;
if (Array.isArray(params) && params.length > 0) {
const realParams = handleRequestParams(params, {
urlParamsDataSource: urlParams,
recordDataSource: formValue,
state,
});
if (realParams && Object.keys(realParams).length > 0) {
if (service.method === 'post') {
service.data = realParams;
} else {
service.params = realParams;
}
}
}
if (typeof resultProcessFunc === 'function') {
service.formatResult = handleResultProcessFunc(requestConfig);
}
}
delete componentProps.requestConfig;
}
if (componentProps?.service) {
componentProps.requestConfig = componentProps.service;
}
setAdvancedConfigToProps(componentProps);
formItem['x-component-props'] = {
...componentProps,
...uploadProps,
};
}
}
},
// filterItemBeforeHandler: (filterItemProps, componentProps)=> {
// if(componentProps) {
// const { requestConfig } = componentProps;
// if(requestConfig){
// const { url, method, serviceType } = requestConfig
// if(url) {
// componentProps.action = url;
// }
// if(serviceType === 'mokelay') {
// componentProps.method = 'post'
// }else if(method){
// componentProps.method = method;
// }
// }
// delete componentProps.requestConfig;
// }
// },
getPrototypeList: () => {
let extraConfigSetter = [
{
name: 'withCredentials',
title: '跨域带cookie(withCredentials)',
setter: {
componentName: 'MixedSetter',
props: {
setters: [
{
componentName: 'BoolSetter',
title: '是 / 否',
},
],
},
},
},
];
return [
{
name: 'mode',
title: '上传模式',
// display: 'inline',
condition() {
return false;
},
setter: {
componentName: 'RadioGroupSetter',
props: {
options: [
{ value: 'java', title: '上传到后端服务' },
{ value: 'oss', title: '前端直接上传到oss' },
],
},
},
},
{
name: '',
setter: