import { useEffect, useRef, useState } from 'react' import { ActionsButton } from 'components' import style from '../style.module.scss' import { AntUploadProps, addExampleFile, deleteExampleFile } from 'api' import { UploadOutlined } from '@ant-design/icons' import { confirm } from 'utils' import { Modal, Button, Table, Empty, Form, Input, Select, Upload, message, ConfigProvider } from 'antd' import { useDispatch, useSelector, fetchExampleFileTypes, fetchExampleFiles, exampleTypeFiles } from 'store' import type { Example, ExampleFile } from "api"; import type { ColumnsType } from 'antd/es/table' import type { FormInstance } from 'antd/es/form' import type { UploadProps } from 'antd' export type ExampleScenesProps = Pick & { onClose: () => void,} export const ExampleFiles = (props: ExampleScenesProps) => { const [inertCaseId, setInsertCaseId] = useState(null) const typeFiles = useSelector(exampleTypeFiles) const dispatch = useDispatch() const fileColumns: ColumnsType = [ { width: '300px', title: '名称', dataIndex: 'filesTitle', key: 'filesTitle', }, { width: '200px', title: '创建时间', dataIndex: 'createTime', key: 'createTime', }, { title: '操作', key: 'action', render(data: ExampleFile) { const actions = [ { text: '查看', action: () => { window.open(data.filesUrl) }, }, { text: '删除', action: async () => { if (await confirm('确定要删除此数据?')) { await deleteExampleFile(data) dispatch(fetchExampleFiles({ caseId: props.caseId })) } }, }, ] return } }, ] useEffect(() => { dispatch(fetchExampleFileTypes()) dispatch(fetchExampleFiles({ caseId: props.caseId })) }, [dispatch, props.caseId]) const total = typeFiles.reduce((t, c) => t + c.children.length ,0) const renderContent = total ? typeFiles.map((typeFile, i) => !!typeFile.children.length && ( <>

{typeFile.filesTypeName}

) ) : ; const renderAddFile = inertCaseId && setInsertCaseId(null)} /> return ( {renderAddFile}
null}>
{ renderContent } ) } export type AddExampleFileProps = Pick & { onClose: () => void,} export const AddExampleFile = (props: AddExampleFileProps) => { const dispatch = useDispatch() const from = useRef(null) const types = useSelector(state => state['example/file'].types) const renderTypeOptions = types.map(type => ( )) const onFinish = async (values: any) => { if (!values.filesUrl.fileList.length) { message.error('附件文件不能为空!') } await addExampleFile({ ...values, caseId: props.caseId, filesUrl: values.filesUrl.fileList[0].response }) props.onClose() dispatch(fetchExampleFiles({ caseId: props.caseId })) }; const onSubmit = () => { from.current?.submit() } const uploadProps: UploadProps = { ...AntUploadProps, listType: 'picture', maxCount: 1, onPreview(file) { window.open(file.response) } }; return (
) }