| | |
| | | </template> |
| | | |
| | | <script setup> |
| | | defineOptions({ name: 'FinancialStatements' }) |
| | | import { ref, computed, onMounted, reactive } from 'vue'; |
| | | import { ElMessage } from 'element-plus'; |
| | | import 'element-plus/dist/index.css'; |
| | | import Echarts from "@/components/Echarts/echarts.vue"; |
| | | import { reportForms,reportIncome,reportExpense } from "@/api/financialManagement/financialStatements"; |
| | | import dayjs from "dayjs"; |
| | | |
| | | // 日期范围 |
| | | const dateRange = ref(null); |
| | | const currentYear = dayjs().year(); |
| | | const dateRange = ref([ |
| | | dayjs().startOf('year').format('YYYY-MM-DD'), |
| | | dayjs().endOf('year').format('YYYY-MM-DD') |
| | | ]); |
| | | const chartStyle = { |
| | | width: '100%', |
| | | height: '100%', // 设置图表容器的高度 |
| | |
| | | }) |
| | | |
| | | |
| | | const pageInfo = ref({ |
| | | }) |
| | | const emptyPageInfo = () => ({ |
| | | totalIncome: 0, |
| | | incomeNumber: 0, |
| | | totalExpense: 0, |
| | | expenseNumber: 0, |
| | | netRevenue: 0, |
| | | incomeType: [], |
| | | expenseType: [] |
| | | }); |
| | | const pageInfo = ref(emptyPageInfo()); |
| | | |
| | | const getData = async () => { |
| | | if (!dateRange.value || !dateRange.value.length) { |
| | |
| | | try { |
| | | const {code,data} = await reportForms({entryDateStart:dateRange.value[0], entryDateEnd:dateRange.value[1]}); |
| | | if(code === 200) { |
| | | pageInfo.value = data |
| | | pieData0.value = data.incomeType.map(item=>({ |
| | | pageInfo.value = { ...emptyPageInfo(), ...(data || {}) } |
| | | pieData0.value = (data?.incomeType || []).map(item=>({ |
| | | name:item.typeName, |
| | | value:item.account, |
| | | percent:`${item.proportion*100}%`, |
| | | amount:`¥${item.account}` |
| | | })) |
| | | pieData1.value = data.expenseType.map(item=>({ |
| | | pieData1.value = (data?.expenseType || []).map(item=>({ |
| | | name:item.typeName, |
| | | value:item.account, |
| | | percent:`${item.proportion*100}%`, |
| | |
| | | |
| | | } |
| | | } catch (error) { |
| | | pageInfo.value = emptyPageInfo(); |
| | | pieData0.value = []; |
| | | pieData1.value = []; |
| | | console.error('获取财务指标数据失败:', error); |
| | | ElMessage.error(error?.msg || '财务汇总数据加载失败'); |
| | | } |
| | | try{ |
| | | const {code,data} = await reportIncome(); |
| | |
| | | lineSeries0.value = data.map(item=>({ |
| | | name:item.typeName, |
| | | type: 'line', |
| | | data:item.account.map(item=>Number(item)) |
| | | data:(item.account || []).map(value => Number(value || 0)) |
| | | })) |
| | | |
| | | } |
| | |
| | | lineSeries1.value = data.map(item=>({ |
| | | name:item.typeName, |
| | | type: 'line', |
| | | data:item.account.map(item=>Number(item)) |
| | | data:(item.account || []).map(value => Number(value || 0)) |
| | | })) |
| | | |
| | | } |
| | |
| | | |
| | | // 初始化 |
| | | onMounted(() => { |
| | | // 不设置默认日期,由用户手动选择 |
| | | getData(); |
| | | }); |
| | | |
| | | // 处理日期范围变化 |
| | |
| | | |
| | | // 重置日期范围 |
| | | const resetDateRange = () => { |
| | | dateRange.value = null; |
| | | dateRange.value = [ |
| | | `${currentYear}-01-01`, |
| | | `${currentYear}-12-31` |
| | | ]; |
| | | getData(); |
| | | }; |
| | | |
| | | </script> |