"import React, { useEffect, useState } from 'react';\nimport ContentCard from '@/components/ContentCard';\nimport PageContainer from '@/components/PageContainer';\nimport ProCardComponent from '@/components/ProCard';\nimport ProCard from '@ant-design/pro-card';\nimport ProTable, { ProColumns } from '@ant-design/pro-table';\nimport { Button, Typography } from 'antd';\nimport { PlusOutlined } from '@ant-design/icons';\nimport { history, useModel } from 'umi';\nimport TaskModal from './TaskModal';\nimport { getBudgetByProjectId, getWeeklyData } from '@/services/project/kanban';\nimport moment from 'moment';\nconst { Link } = Typography;\nimport './index.less';\nimport { projectList, WeeklyList } from '../../Kanban/WeeklyReports/type';\n\nconst WeeklyReport: React.FC = () => {\n const [depBugModal, setDepBugModal] = useState({ visible: false, projectTask: {} });\n const { current, changeCurrent } = useModel('operation');\n const [budgetKey, setBudgetKey] = useState('');\n const [WeeklyData, setWeeklyData] = useState([]);\n const [loading, setLoading] = useState(false);\n const getWeeklyDatas = async () => {\n setLoading(true);\n try {\n const { data } = await getWeeklyData({\n bpProjectId: budgetKey,\n projectId: current,\n });\n setLoading(false);\n const tableData = data.flatMap((item: WeeklyList, index2: number) => {\n const len = item?.projectList?.length;\n return item.projectList.map((ite: projectList, index: number) => ({\n serial: index2 + 1,\n weeklyName: item.weeklyName,\n creator: item.creator,\n projectName: ite.projectName,\n projectId: ite.projectId,\n spm: ite.spm,\n task: item.task,\n weeklyTime: item.weeklyTime,\n unFinishedTask: item.unFinishedTask,\n finishedTask: item.finishedTask,\n createTime: item.createTime ? moment(item.createTime).format('YYYY-MM-DD') : '',\n span: index === 0 ? len : 0,\n key: index2 * item.projectList.length + index,\n }));\n });\n\n setWeeklyData(tableData);\n } catch (error) {\n return { success: false };\n }\n };\n const getBudgetByProjectIds = async (id: string) => {\n try {\n const { data } = await getBudgetByProjectId({ projectId: id });\n const bugValue = data.bpProjectId;\n setBudgetKey(bugValue);\n } catch (error) {\n return { success: false };\n }\n };\n\n useEffect(() => {\n if (current) {\n getBudgetByProjectIds(current);\n }\n }, [current]);\n useEffect(() => {\n if (budgetKey && current) {\n getWeeklyDatas();\n }\n }, [budgetKey, current]);\n\n const columns: ProColumns[] = [\n {\n title: '序号',\n width: 20,\n dataIndex: 'serial',\n align: 'center',\n render: (value, row) => {\n return {\n children: value,\n props: { rowSpan: row.span },\n };\n },\n },\n {\n title: '周报',\n dataIndex: 'weeklyName',\n align: 'left',\n hideInSearch: true,\n width: 60,\n render: (text, record) => {\n return (\n <Link\n onClick={() => {\n history.push(\n /project/operation/projectDocuments/reportDetails?weeklyName=${record.weeklyName}&weeklyTime=${record.weeklyTime}&creator=${record.creator},\n );\n }}\n >\n {record.weeklyName}\n \n );\n },\n onCell: (row) => {\n return { rowSpan: row.span };\n },\n },\n {\n title: 'SPM',\n dataIndex: 'spm',\n align: 'center',\n hideInSearch: true,\n width: 30,\n },\n {\n title: '创建时间',\n dataIndex: 'createTime',\n align: 'center',\n hideInSearch: true,\n width: 45,\n render: (value, row) => {\n return {\n children: value,\n props: { rowSpan: row.span },\n };\n },\n },\n {\n title: '创建人',\n dataIndex: 'creator',\n align: 'center',\n hideInSearch: true,\n width: 40,\n render: (value, row) => {\n return {\n children: value,\n props: { rowSpan: row.span },\n };\n },\n },\n {\n title: '任务总数',\n dataIndex: 'task',\n align: 'center',\n hideInSearch: true,\n width: 40,\n render: (, record) => {\n return (\n <span\n onClick={() => setDepBugModal({ visible: true, projectTask: record.task })}\n style={{ cursor: 'pointer', color: '#1890FF' }}\n >\n {record.task?.length || '0'}\n \n );\n },\n onCell: (row) => {\n return { rowSpan: row.span };\n },\n },\n {\n title: '本周完成任务',\n dataIndex: 'finishedTask',\n align: 'center',\n hideInSearch: true,\n width: 45,\n render: (, record) => {\n return (\n <span\n onClick={() => setDepBugModal({ visible: true, projectTask: record.finishedTask })}\n style={{ cursor: 'pointer', color: '#1890FF' }}\n >\n {record.finishedTask?.length || '0'}\n \n );\n },\n onCell: (row) => {\n return { rowSpan: row.span };\n },\n },\n {\n title: '待完成任务',\n dataIndex: 'unFinishedTask',\n align: 'center',\n hideInSearch: true,\n width: 40,\n render: (, record) => {\n return (\n <span\n onClick={() => setDepBugModal({ visible: true, projectTask: record.unFinishedTask })}\n style={{ cursor: 'pointer', color: '#1890FF' }}\n >\n {record.unFinishedTask?.length || '0'}\n \n );\n },\n onCell: (row) => {\n return { rowSpan: row.span };\n },\n },\n {\n title: '周报合并项目(共预算项目)',\n dataIndex: 'projectName',\n align: 'center',\n hideInSearch: true,\n width: 100,\n render: (, record: any) => {\n return (\n <div style={{ textAlign: 'left' }}>\n <Link\n onClick={() => {\n changeCurrent(record.projectId);\n history.push(/project/operation/home?projectId=${record.projectId});\n }}\n >\n {record.projectName}\n \n

\n );\n },\n },\n ];\n\n return (\n \n \n {/* /}\n \n <ProCard colSpan={{ lg: 24, xl: 16 }} bodyStyle={{ padding: '0' }}>\n <ProTable\n className="tablePlan"\n rowKey={'key'}\n scroll={{ y: 400 }}\n columns={columns}\n dataSource={WeeklyData}\n bordered\n search={false}\n options={false}\n pagination={false}\n loading={loading}\n headerTitle={\n <Button\n icon={}\n type="primary"\n onClick={() => {\n history.push('/project/operation/projectDocuments/newReport');\n }}\n >\n 新建周报\n \n }\n />\n <TaskModal\n {...depBugModal}\n onCancel={() => setDepBugModal((val) => ({ ...val, visible: false }))}\n />\n \n \n {/ */}\n \n \n );\n};\n\nexport default WeeklyReport;

项目周报 - 项目管理系统

原文地址: https://www.cveoy.top/t/topic/pZbm 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录