From 62457d9b248e15b5d8e4d5134580bd38b81ce30d Mon Sep 17 00:00:00 2001 From: gaoxq <376340421@qq.com> Date: Wed, 10 Dec 2025 15:07:01 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=89=8D=E7=AB=AFvue?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/jeesite/modules/app/utils/vDate.java | 6 +- .../jeesite/modules/erp/dao/ErpExpIncDao.java | 15 + .../jeesite/modules/erp/entity/ErpExpInc.java | 73 +++ .../modules/erp/entity/ErpSummaryAll.java | 2 +- .../modules/erp/service/ErpExpIncService.java | 78 +++ .../modules/erp/web/ErpExpIncController.java | 110 ++++ .../mappings/modules/erp/ErpExpIncDao.xml | 15 + .../dataReport/erp/components/ChartGauge.vue | 295 ---------- .../dataReport/erp/components/ChartLine.vue | 390 ++++++++++--- .../dataReport/erp/components/ChartPie.vue | 2 +- .../dataReport/erp/components/chartBar.vue | 539 +++++++++++++++--- .../biz/views/biz/dataReport/erp/index.vue | 106 +--- .../analysis/components/WorkbenchHeader.vue | 6 +- .../layouts/views/desktop/workbench/index.vue | 13 +- web-vue/packages/erp/api/erp/expInc.ts | 37 ++ 15 files changed, 1133 insertions(+), 554 deletions(-) create mode 100644 web-api/src/main/java/com/jeesite/modules/erp/dao/ErpExpIncDao.java create mode 100644 web-api/src/main/java/com/jeesite/modules/erp/entity/ErpExpInc.java create mode 100644 web-api/src/main/java/com/jeesite/modules/erp/service/ErpExpIncService.java create mode 100644 web-api/src/main/java/com/jeesite/modules/erp/web/ErpExpIncController.java create mode 100644 web-api/src/main/resources/mappings/modules/erp/ErpExpIncDao.xml delete mode 100644 web-vue/packages/biz/views/biz/dataReport/erp/components/ChartGauge.vue create mode 100644 web-vue/packages/erp/api/erp/expInc.ts diff --git a/web-api/src/main/java/com/jeesite/modules/app/utils/vDate.java b/web-api/src/main/java/com/jeesite/modules/app/utils/vDate.java index 5094fcf2..578d517d 100644 --- a/web-api/src/main/java/com/jeesite/modules/app/utils/vDate.java +++ b/web-api/src/main/java/com/jeesite/modules/app/utils/vDate.java @@ -51,8 +51,6 @@ public class vDate { } - - public static String dsValue() { LocalDate currentDate = LocalDate.now(); // 格式化日期为yyyymmdd @@ -136,13 +134,13 @@ public class vDate { return switch (cycleType) { case "D" -> // 日:最近30天,格式 yyyy-MM-dd - baseDate.minusDays(30).format(DAY_FORMATTER); + baseDate.minusDays(14).format(DAY_FORMATTER); case "M" -> // 月:最近1年,格式 yyyy-MM baseDate.minusYears(1).format(MONTH_FORMATTER); case "Q" -> // 季度:最近3年,格式 yyyy-Qx - getQuarterCycleCode(baseDate.minusYears(3)); + getQuarterCycleCode(baseDate.minusYears(2)); case "Y" -> // 年:最近6年,格式 yyyy String.valueOf(baseDate.minusYears(6).getYear()); diff --git a/web-api/src/main/java/com/jeesite/modules/erp/dao/ErpExpIncDao.java b/web-api/src/main/java/com/jeesite/modules/erp/dao/ErpExpIncDao.java new file mode 100644 index 00000000..3c888b22 --- /dev/null +++ b/web-api/src/main/java/com/jeesite/modules/erp/dao/ErpExpIncDao.java @@ -0,0 +1,15 @@ +package com.jeesite.modules.erp.dao; + +import com.jeesite.common.dao.CrudDao; +import com.jeesite.common.mybatis.annotation.MyBatisDao; +import com.jeesite.modules.erp.entity.ErpExpInc; + +/** + * 收支信息DAO接口 + * @author gaoxq + * @version 2025-12-10 + */ +@MyBatisDao(dataSourceName="work") +public interface ErpExpIncDao extends CrudDao { + +} \ No newline at end of file diff --git a/web-api/src/main/java/com/jeesite/modules/erp/entity/ErpExpInc.java b/web-api/src/main/java/com/jeesite/modules/erp/entity/ErpExpInc.java new file mode 100644 index 00000000..82fc8396 --- /dev/null +++ b/web-api/src/main/java/com/jeesite/modules/erp/entity/ErpExpInc.java @@ -0,0 +1,73 @@ +package com.jeesite.modules.erp.entity; + +import java.io.Serializable; +import java.util.Date; + +import com.jeesite.common.mybatis.annotation.JoinTable; +import com.jeesite.common.mybatis.annotation.JoinTable.Type; +import com.fasterxml.jackson.annotation.JsonFormat; +import jakarta.validation.constraints.Size; + +import com.jeesite.common.entity.DataEntity; +import com.jeesite.common.mybatis.annotation.Column; +import com.jeesite.common.mybatis.annotation.Table; +import com.jeesite.common.mybatis.mapper.query.QueryType; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; + +/** + * 收支信息Entity + * + * @author gaoxq + * @version 2025-12-10 + */ +@EqualsAndHashCode(callSuper = true) +@Table(name = "erp_exp_inc", alias = "a", label = "收支信息信息", columns = { + @Column(name = "create_time", attrName = "createTime", label = "记录时间", isUpdateForce = true), + @Column(name = "id", attrName = "id", label = "主键ID", isPK = true), + @Column(name = "account_name", attrName = "accountName", label = "account_name", queryType = QueryType.LIKE), + @Column(name = "stat_date", attrName = "statDate", label = "stat_date"), + @Column(name = "cycle_type", attrName = "cycleType", label = "cycle_type"), + @Column(name = "income_amount", attrName = "incomeAmount", label = "income_amount", isUpdateForce = true), + @Column(name = "expense_amount", attrName = "expenseAmount", label = "expense_amount", isUpdateForce = true), +}, orderBy = "a.stat_date" +) +@Data +public class ErpExpInc extends DataEntity implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + private Date createTime; // 记录时间 + private String accountName; // account_name + private String statDate; // stat_date + private String cycleType; // cycle_type + private Double incomeAmount; // income_amount + private Double expenseAmount; // expense_amount + + public ErpExpInc() { + this(null); + } + + public ErpExpInc(String id) { + super(id); + } + + public String getStatDate_gte() { + return sqlMap.getWhere().getValue("stat_date", QueryType.GTE); + } + + public void setStatDate_gte(String statDate) { + sqlMap.getWhere().and("stat_date", QueryType.GTE, statDate); + } + + public String getStatDate_lte() { + return sqlMap.getWhere().getValue("stat_date", QueryType.LTE); + } + + public void setStatDate_lte(String statDate) { + sqlMap.getWhere().and("stat_date", QueryType.LTE, statDate); + } + +} \ No newline at end of file diff --git a/web-api/src/main/java/com/jeesite/modules/erp/entity/ErpSummaryAll.java b/web-api/src/main/java/com/jeesite/modules/erp/entity/ErpSummaryAll.java index ee409d1f..72ba6c6a 100644 --- a/web-api/src/main/java/com/jeesite/modules/erp/entity/ErpSummaryAll.java +++ b/web-api/src/main/java/com/jeesite/modules/erp/entity/ErpSummaryAll.java @@ -26,7 +26,7 @@ import java.io.Serial; @Column(name = "create_time", attrName = "createTime", label = "记录时间", isQuery = false, isUpdateForce = true), @Column(name = "id", attrName = "id", label = "主键ID", isPK = true), @Column(name = "c_date", attrName = "cdate", label = "汇总日期"), - @Column(name = "c_type", attrName = "ctype", label = "交易类型", isQuery = false), + @Column(name = "c_type", attrName = "ctype", label = "交易类型"), @Column(name = "this_value", attrName = "thisValue", label = "当期金额", isQuery = false, isUpdateForce = true), @Column(name = "prev_value", attrName = "prevValue", label = "上期金额", isQuery = false, isUpdateForce = true), @Column(name = "mom_rate", attrName = "momRate", label = "环比", isQuery = false, isUpdateForce = true), diff --git a/web-api/src/main/java/com/jeesite/modules/erp/service/ErpExpIncService.java b/web-api/src/main/java/com/jeesite/modules/erp/service/ErpExpIncService.java new file mode 100644 index 00000000..2a9471da --- /dev/null +++ b/web-api/src/main/java/com/jeesite/modules/erp/service/ErpExpIncService.java @@ -0,0 +1,78 @@ +package com.jeesite.modules.erp.service; + +import java.util.List; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import com.jeesite.common.entity.Page; +import com.jeesite.common.service.CrudService; +import com.jeesite.modules.erp.entity.ErpExpInc; +import com.jeesite.modules.erp.dao.ErpExpIncDao; + +/** + * 收支信息Service + * @author gaoxq + * @version 2025-12-10 + */ +@Service +public class ErpExpIncService extends CrudService { + + /** + * 获取单条数据 + * @param erpExpInc 主键 + */ + @Override + public ErpExpInc get(ErpExpInc erpExpInc) { + return super.get(erpExpInc); + } + + /** + * 查询分页数据 + * @param erpExpInc 查询条件 + * @param erpExpInc page 分页对象 + */ + @Override + public Page findPage(ErpExpInc erpExpInc) { + return super.findPage(erpExpInc); + } + + /** + * 查询列表数据 + * @param erpExpInc 查询条件 + */ + @Override + public List findList(ErpExpInc erpExpInc) { + return super.findList(erpExpInc); + } + + /** + * 保存数据(插入或更新) + * @param erpExpInc 数据对象 + */ + @Override + @Transactional + public void save(ErpExpInc erpExpInc) { + super.save(erpExpInc); + } + + /** + * 更新状态 + * @param erpExpInc 数据对象 + */ + @Override + @Transactional + public void updateStatus(ErpExpInc erpExpInc) { + super.updateStatus(erpExpInc); + } + + /** + * 删除数据 + * @param erpExpInc 数据对象 + */ + @Override + @Transactional + public void delete(ErpExpInc erpExpInc) { + super.delete(erpExpInc); + } + +} \ No newline at end of file diff --git a/web-api/src/main/java/com/jeesite/modules/erp/web/ErpExpIncController.java b/web-api/src/main/java/com/jeesite/modules/erp/web/ErpExpIncController.java new file mode 100644 index 00000000..4e249e52 --- /dev/null +++ b/web-api/src/main/java/com/jeesite/modules/erp/web/ErpExpIncController.java @@ -0,0 +1,110 @@ +package com.jeesite.modules.erp.web; + +import com.jeesite.modules.app.utils.vDate; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; + +import org.apache.shiro.authz.annotation.RequiresPermissions; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import com.jeesite.common.config.Global; +import com.jeesite.common.entity.Page; +import com.jeesite.common.web.BaseController; +import com.jeesite.modules.erp.entity.ErpExpInc; +import com.jeesite.modules.erp.service.ErpExpIncService; + +import java.util.List; + +/** + * 收支信息Controller + * + * @author gaoxq + * @version 2025-12-10 + */ +@Controller +@RequestMapping(value = "${adminPath}/erp/expInc") +public class ErpExpIncController extends BaseController { + + private final ErpExpIncService erpExpIncService; + + public ErpExpIncController(ErpExpIncService erpExpIncService) { + this.erpExpIncService = erpExpIncService; + } + + /** + * 获取数据 + */ + @ModelAttribute + public ErpExpInc get(String id, boolean isNewRecord) { + return erpExpIncService.get(id, isNewRecord); + } + + /** + * 查询列表 + */ + @RequiresPermissions("erp:expInc:view") + @RequestMapping(value = {"list", ""}) + public String list(ErpExpInc erpExpInc, Model model) { + model.addAttribute("erpExpInc", erpExpInc); + return "modules/erp/erpExpIncList"; + } + + /** + * 查询列表数据 + */ + @RequiresPermissions("erp:expInc:view") + @RequestMapping(value = "listData") + @ResponseBody + public Page listData(ErpExpInc erpExpInc, HttpServletRequest request, HttpServletResponse response) { + erpExpInc.setPage(new Page<>(request, response)); + Page page = erpExpIncService.findPage(erpExpInc); + return page; + } + + /** + * 查看编辑表单 + */ + @RequiresPermissions("erp:expInc:view") + @RequestMapping(value = "form") + public String form(ErpExpInc erpExpInc, Model model) { + model.addAttribute("erpExpInc", erpExpInc); + return "modules/erp/erpExpIncForm"; + } + + /** + * 保存数据 + */ + @RequiresPermissions("erp:expInc:edit") + @PostMapping(value = "save") + @ResponseBody + public String save(@Validated ErpExpInc erpExpInc) { + erpExpIncService.save(erpExpInc); + return renderResult(Global.TRUE, text("保存收支信息成功!")); + } + + /** + * 删除数据 + */ + @RequiresPermissions("erp:expInc:edit") + @RequestMapping(value = "delete") + @ResponseBody + public String delete(ErpExpInc erpExpInc) { + erpExpIncService.delete(erpExpInc); + return renderResult(Global.TRUE, text("删除收支信息成功!")); + } + + + @RequestMapping(value = "listAll") + @ResponseBody + public List listAll(ErpExpInc erpExpInc) { + erpExpInc.setStatDate_gte(vDate.calculateStartCycleCode(erpExpInc.getCycleType())); + return erpExpIncService.findList(erpExpInc); + } + +} \ No newline at end of file diff --git a/web-api/src/main/resources/mappings/modules/erp/ErpExpIncDao.xml b/web-api/src/main/resources/mappings/modules/erp/ErpExpIncDao.xml new file mode 100644 index 00000000..1d031733 --- /dev/null +++ b/web-api/src/main/resources/mappings/modules/erp/ErpExpIncDao.xml @@ -0,0 +1,15 @@ + + + + + + + \ No newline at end of file diff --git a/web-vue/packages/biz/views/biz/dataReport/erp/components/ChartGauge.vue b/web-vue/packages/biz/views/biz/dataReport/erp/components/ChartGauge.vue deleted file mode 100644 index 8ae41f94..00000000 --- a/web-vue/packages/biz/views/biz/dataReport/erp/components/ChartGauge.vue +++ /dev/null @@ -1,295 +0,0 @@ - - - - - diff --git a/web-vue/packages/biz/views/biz/dataReport/erp/components/ChartLine.vue b/web-vue/packages/biz/views/biz/dataReport/erp/components/ChartLine.vue index 4226396d..ab74cec9 100644 --- a/web-vue/packages/biz/views/biz/dataReport/erp/components/ChartLine.vue +++ b/web-vue/packages/biz/views/biz/dataReport/erp/components/ChartLine.vue @@ -1,11 +1,20 @@ diff --git a/web-vue/packages/biz/views/biz/dataReport/erp/components/ChartPie.vue b/web-vue/packages/biz/views/biz/dataReport/erp/components/ChartPie.vue index 1bab3941..ed5a72b0 100644 --- a/web-vue/packages/biz/views/biz/dataReport/erp/components/ChartPie.vue +++ b/web-vue/packages/biz/views/biz/dataReport/erp/components/ChartPie.vue @@ -1,5 +1,5 @@ diff --git a/web-vue/packages/biz/views/biz/dataReport/erp/components/chartBar.vue b/web-vue/packages/biz/views/biz/dataReport/erp/components/chartBar.vue index ff368447..27c3bf8a 100644 --- a/web-vue/packages/biz/views/biz/dataReport/erp/components/chartBar.vue +++ b/web-vue/packages/biz/views/biz/dataReport/erp/components/chartBar.vue @@ -1,113 +1,446 @@ @@ -117,8 +450,38 @@ onUnmounted(() => { box-shadow: 0 2px 10px rgba(0, 0, 0, 0.05); } -/* 可选:优化数值标签的样式(如果需要) */ -:deep(.echarts-label) { - font-family: 'Microsoft YaHei', sans-serif; +/* 图例颜色 */ +:deep(.echarts-legend-item:nth-child(1) .echarts-legend-symbol) { + background-color: #52c41a !important; + border-radius: 4px; /* 图例也添加圆角,保持风格统一 */ +} +:deep(.echarts-legend-item:nth-child(2) .echarts-legend-symbol) { + background-color: #f5222d !important; + border-radius: 4px; /* 图例也添加圆角,保持风格统一 */ +} + +/* Tooltip样式 */ +:deep(.echarts-tooltip) { + border-radius: 8px; + padding: 10px; + box-shadow: 0 2px 12px rgba(0,0,0,0.15); + border: none; + background: #fff; + z-index: 9999 !important; +} + +/* 优化标签显示效果 */ +:deep(.echarts-bar-label) { + font-weight: 500; + text-shadow: 0 1px 1px rgba(255,255,255,0.8); + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +/* 优化x轴标签显示 */ +:deep(.echarts-xaxis-label) { + word-break: keep-all; + white-space: nowrap; } diff --git a/web-vue/packages/biz/views/biz/dataReport/erp/index.vue b/web-vue/packages/biz/views/biz/dataReport/erp/index.vue index 99335d90..f7b3d918 100644 --- a/web-vue/packages/biz/views/biz/dataReport/erp/index.vue +++ b/web-vue/packages/biz/views/biz/dataReport/erp/index.vue @@ -1,16 +1,10 @@ @@ -18,87 +12,35 @@ import { ref, onMounted, onUnmounted } from 'vue'; import { Card } from 'ant-design-vue'; +import ChartBar from './components/ChartBar.vue'; import ChartPie from './components/ChartPie.vue'; import ChartLine from './components/ChartLine.vue'; - \ No newline at end of file + diff --git a/web-vue/packages/core/layouts/views/desktop/analysis/components/WorkbenchHeader.vue b/web-vue/packages/core/layouts/views/desktop/analysis/components/WorkbenchHeader.vue index a67b8d5f..10e17ac6 100644 --- a/web-vue/packages/core/layouts/views/desktop/analysis/components/WorkbenchHeader.vue +++ b/web-vue/packages/core/layouts/views/desktop/analysis/components/WorkbenchHeader.vue @@ -2,7 +2,7 @@
-

您好, {{ userinfo.userName }}, 开始您一天的工作吧!

+

您好, {{ userinfo.userName }}, 开始您一天的工作吧!

今日晴,20℃ - 32℃!
@@ -32,8 +32,4 @@ const router = useRouter(); const userStore = useUserStore(); const userinfo = computed(() => userStore.getUserInfo); - - const handleMyWorkClick = () => { - router.push('/desktop/workbench'); - }; diff --git a/web-vue/packages/core/layouts/views/desktop/workbench/index.vue b/web-vue/packages/core/layouts/views/desktop/workbench/index.vue index b2edfa6a..e30e7710 100644 --- a/web-vue/packages/core/layouts/views/desktop/workbench/index.vue +++ b/web-vue/packages/core/layouts/views/desktop/workbench/index.vue @@ -3,17 +3,22 @@ -
- ssssss + + + + +
diff --git a/web-vue/packages/erp/api/erp/expInc.ts b/web-vue/packages/erp/api/erp/expInc.ts new file mode 100644 index 00000000..0ca84e22 --- /dev/null +++ b/web-vue/packages/erp/api/erp/expInc.ts @@ -0,0 +1,37 @@ +/** + * Copyright (c) 2013-Now http://jeesite.com All rights reserved. + * No deletion without permission, or be held responsible to law. + * @author gaoxq + */ +import { defHttp } from '@jeesite/core/utils/http/axios'; +import { useGlobSetting } from '@jeesite/core/hooks/setting'; +import { BasicModel, Page } from '@jeesite/core/api/model/baseModel'; + +const { adminPath } = useGlobSetting(); + +export interface ErpExpInc extends BasicModel { + createTime?: string; // 记录时间 + accountName?: string; // account_name + statDate?: string; // stat_date + cycleType?: string; // cycle_type + incomeAmount?: number; // income_amount + expenseAmount?: number; // expense_amount +} + +export const erpExpIncList = (params?: ErpExpInc | any) => + defHttp.get({ url: adminPath + '/erp/expInc/list', params }); + +export const erpExpIncListAll = (params?: ErpExpInc | any) => + defHttp.get({ url: adminPath + '/erp/expInc/listAll', params }); + +export const erpExpIncListData = (params?: ErpExpInc | any) => + defHttp.post>({ url: adminPath + '/erp/expInc/listData', params }); + +export const erpExpIncForm = (params?: ErpExpInc | any) => + defHttp.get({ url: adminPath + '/erp/expInc/form', params }); + +export const erpExpIncSave = (params?: any, data?: ErpExpInc | any) => + defHttp.postJson({ url: adminPath + '/erp/expInc/save', params, data }); + +export const erpExpIncDelete = (params?: ErpExpInc | any) => + defHttp.get({ url: adminPath + '/erp/expInc/delete', params });