import React, { useEffect, useState, useMemo } from 'react';
import { connect } from 'react-redux';
import { Input, Button, Tree, Modal, Table, Upload, Pagination, Popconfirm } from '@douyinfe/semi-ui';
import { IconDeleteStroked, IconEditStroked, IconUpload, IconAlertCircle, IconSearch } from '@douyinfe/semi-icons';
import SimpleBar from 'simplebar-react';
import FileModal from '../components/fileModal';
import moment from 'moment';
import './style.less'
const Rest = (props) => {
const { dispatch, actions, user, qiniu, loading, clientHeight, overallProjectId } = props
const { install, means } = actions
const [pomsList, setPomsList] = useState([]); //项目
const [showPomsList, setShowPomsList] = useState([]); //项目
const [pepProjectId, setPepProjectId] = useState() //项目id
const [projectSearch, setProjectSearch] = useState() //项目搜索
const [isFileModal, setIsFileModal] = useState(false) //添加文件弹窗
const [editData, setEditData] = useState({}) //编辑参数
const [treeData, settreeData] = useState([]); //文件夹列表
const [higherFile, setHigherFile] = useState([]); //上级文件夹
const [fileId, setFileId] = useState(); //文件夹id
const [uploadModal, setUploadModal] = useState(false) //上传弹窗
const [uploadData, setUploadData] = useState({})
const [dataSource, setDataSource] = useState([]) //表格数据
const [query, setQuery] = useState({ limit: 10, page: 0 })
const [count, setCount] = useState(0)
const [videoModalV, setVideoModalV] = useState(false);
const [videoUrl, setvideoUrl] = useState(null);
const [hint, setHint] = useState(false);
const [fileSearch, setFileSearch] = useState([]) //文件搜索
useEffect(() => {
dispatch(install.getProjectPoms({ global: 1 })).then((res => {
if (res.success) {
let data = res.payload.data?.rows?.filter(v => v.pepProjectIsDelete !== 1)?.map(v => ({ pepProjectId: v.id, pepProjectName: v.pepProjectName || v.name }))
setPomsList(data)
setShowPomsList(data)
setPepProjectId(data[0]?.pepProjectId)
fileList(data[0]?.pepProjectId)
}
}))
}, [])
useEffect(() => {
let data
if (overallProjectId) {
data = pomsList?.filter(v => (v.pepProjectName?.indexOf(projectSearch) != -1 && v.pepProjectId == overallProjectId))
} else {
data = pomsList?.filter(v => v.pepProjectName?.indexOf(projectSearch) != -1)
}
setShowPomsList(data)
setPepProjectId(data[0]?.pepProjectId)
fileList(data[0]?.pepProjectId)
setDataSource([])
setFileId('')
setFileSearch('')
}, [projectSearch])
useEffect(() => {
setProjectSearch('')
let data
if (overallProjectId) {
data = pomsList?.filter(v => v.pepProjectId == overallProjectId)
} else {
data = pomsList
}
setShowPomsList(data)
setPepProjectId(data[0]?.pepProjectId)
fileList(data[0]?.pepProjectId)
setDataSource([])
setFileId('')
setFileSearch('')
}, [overallProjectId])
useEffect(() => {
if (fileId) {
filfolderFileListe()
setQuery({ limit: 10, page: 0 })
setFileSearch('')
}
}, [fileId])
const fileList = (id) => {
dispatch(means.fileList({ projectId: id, type: 1 })).then((res => {
if (res.success) {
let data = res.payload.data
let oneLevel = res.payload.data?.filter(f => !f.higherFileId) || []
setHigherFile(data?.map(d => ({ name: d.fileName, value: d.id })))
dispatch(means.folderFileList({ fileId: JSON.stringify(data?.map(d => d.id)) })).then((s => {
if (s.success) {
// setFileLists(s.payload.data?.rows)
settreeData(listErgodic(oneLevel, data, s.payload.data?.rows))
}
}))
}
}))
}
const filfolderFileListe = (params) => {
let fileIds = []
const treeDataList = (data, value) => {
data?.map(c => {
if (c.key == fileId || value) {
fileIds.push(c.key)
if (c.children?.length) {
treeDataList(c.children, true)
}
} else if (c.children?.length) {
treeDataList(c.children)
}
})
}
treeDataList(treeData)
let datas = params || query
dispatch(means.folderFileList({ keyword: fileSearch, fileId: JSON.stringify(fileIds), ...datas, })).then((res => {
if (res.success) {
setDataSource(res.payload.data?.rows || [])
setCount(res.payload.data?.count)
}
}))
}
const listErgodic = (level, datas, lists) => {
let data = []
level.map(async v => {
let list = {
value: v.id,
key: v.id,
}
let childrenList = datas?.filter(c => c.higherFileId == list.value)
if (childrenList?.length) {
list.children = listErgodic(childrenList, datas, lists)
}
let fileData = lists?.filter(d => d.fileId == v.id)?.length
list.label =
{v.fileName}
{
setIsFileModal(true)
setEditData({ id: v.id, fileName: v.fileName, higherFileId: v.higherFileId })
}} />
{
if (!fileData && !list?.children?.length) {
dispatch(means.delFile(v.id)).then((res => {
if (res.success) {
fileList(v.projectId)
}
}))
}
}}
// onCancel={onCancel}
>
data.push(list)
})
return data
}
const column = [
{
title: '文件名',
dataIndex: 'name',
key: 'name',
render: (text) => text?.length > 30 ? {text.slice(0, 30)}...
: text
},
{
title: '文件大小',
dataIndex: 'size',
key: 'size',
render: (text) => {
let show = '--'
if (text < 1048576) {
show = (text / 1024).toFixed(1) + ' KB'
} else {
show = (text / 1048576).toFixed(1) + ' MB'
}
return show
}
},
{
title: '上传时间',
dataIndex: 'uploadTime',
key: 'uploadTime',
render: (text) => text ? moment(text).format("YYYY-MM-DD HH:mm:ss") : '--'
},
{
title: '操作',
key: 'operation',
dataIndex: 'operation',
render: (_, r) => {
return
{
dispatch(means.delfolderFile(r.id)).then((res => {
if (res.success) {
filfolderFileListe({ limit: 10, page: 0 })
setQuery({ limit: 10, page: 0 })
}
}))
}}
// onCancel={onCancel}
>
{(r.url?.indexOf("txt") !== -1 || r.url?.indexOf("rar") !== -1 || r.url?.indexOf("zip") !== -1) ? ""
:
}
}
},
]
const data = [
{
key: '1',
name: 'John Brown',
age: 32,
address: 'New York No. 1 Lake Park',
tags: ['nice', 'developer'],
},
{
key: '2',
name: 'Jim Green',
age: 42,
address: 'London No. 1 Lake Park',
tags: ['loser'],
},
{
key: '3',
name: 'Joe Black',
age: 32,
address: 'Sydney No. 1 Lake Park',
tags: ['cool', 'teacher'],
},
];
const preview = (url) => {
let link = encodeURI(`${qiniu}/${url}`)
if (url.indexOf("pdf") !== -1) {
window.open(link)
} else if (url.indexOf("png") !== -1 || url.indexOf("jpg") !== -1) {
setVideoModalV(true)
setvideoUrl(link)
} else {
window.open(`https://view.officeapps.live.com/op/view.aspx?src=${link}`)
}
}
return (
//
setProjectSearch(v)} />
{showPomsList?.map(v => {
return {
setPepProjectId(v.pepProjectId)
fileList(v.pepProjectId)
setDataSource([])
setFileId('')
}}>
{v.pepProjectName}
})}
{/* 文件夹———树 */}
{/* 添加文件弹窗 */}
{isFileModal ?
{
setIsFileModal(false)
setEditData({})
}}
success={() => {
fileList(pepProjectId)
}}
/> : ""
}
{
setFileId(selectedKey)
setFileSearch('')
}}
/>
{/* 表格 */}
当前文件夹:{higherFile?.filter(c => c.value == fileId)[0]?.name ||
请选择文件夹
}
}
value={fileSearch}
onChange={v => {
setFileSearch(v)
filfolderFileListe({ keyword: v, limit: 10, page: 0 })
setQuery({ limit: 10, page: 0 })
}} />
{uploadModal ?
{
if (uploadData?.name) {
dispatch(means.addFile({ ...uploadData, fileId: fileId })).then(v => {
if (v.success) {
setUploadModal(false)
filfolderFileListe({ limit: 10, page: 0 })
setQuery({ limit: 10, page: 0 })
setUploadData({})
setHint(false)
}
})
} else {
setHint(true)
}
}}
width={607}
onCancel={() => {
setUploadModal(false)
setHint(false)
setUploadData({})
}}
>
文件*:
{
setUploadData({})
}}
onSuccess={(responseBody, file) => {
setUploadData({
name: file.name,
size: file.size,
url: responseBody?.uploaded,
uploadTime: moment().format("YYYY-MM-DD HH:mm:ss")
})
}}
>
} theme="light">
文件上传
{hint && !uploadData?.name && 请上传文件
}
: ""
}
暂无文件
}
onRow={(record, index) => {
if (index % 1 === 0) {
return { style: { background: '#FAFCFF' } }
}
}}
// rowSelection={{
// // selectedRowKeys: selected || [],
// getCheckboxProps: record => ({
// // disabled: record.confirmTime ? true : false,
// // name: record.name,
// }),
// onSelect: (record, selected) => {
// // console.log(`select row: ${selected}`, record);
// },
// // onSelectAll: (selected, selectedRows) => {
// // console.log(`select all rows: ${selected}`, selectedRows);
// // },
// onChange: (selectedRowKeys, selectedRows) => {
// // console.log(`selectedRowKeys: ${selectedRowKeys}`, 'selectedRows: ', selectedRows);
// // setSelected(selectedRows?.map(v => v.id))
// },
// }}
/>
{count > 0 ?
共{count}个文件
{
setQuery({ limit: pageSize, page: currentPage - 1 });
filfolderFileListe({ limit: pageSize, page: currentPage - 1 })
}}
/>
: ""}
{/*
勾选{selected.length}条问题
{count > 0 ?
共{count}个问题
{
setQuery({ limit: pageSize, page: currentPage - 1 });
}}
/>
: ""}
*/}
{
videoModalV ?
{
setVideoModalV(false)
setvideoUrl('')
}} width={400}
footer={null}>
: ''
}
//
)
}
function mapStateToProps (state) {
const { auth, global, members, webSocket } = state;
return {
// loading: members.isRequesting,
user: auth.user,
actions: global.actions,
overallProjectId: global.pepProjectId,
// socket: webSocket.socket
clientHeight: global.clientHeight,
qiniu: global.qiniu?.domain
};
}
export default connect(mapStateToProps)(Rest);