From 1b9448a5a3ccc488a38a3618d4d0d5b1833aad41 Mon Sep 17 00:00:00 2001 From: gaoxq <376340421@qq.com> Date: Sun, 22 Mar 2026 00:27:15 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=8C=96=E9=A1=B9=E7=9B=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- common/pom.xml | 6 + web-api/pom.xml | 1 - .../java/com/jeesite/modules/apps/Start.java | 4 + .../modules/biz/dao/MyChartInfoDao.java | 15 + .../modules/biz/dao/MyProjectInfoDao.java | 15 + .../modules/biz/entity/MyAreaSource.java | 2 +- .../modules/biz/entity/MyChartInfo.java | 118 ++++ .../jeesite/modules/biz/entity/MyCities.java | 4 +- .../jeesite/modules/biz/entity/MyPerson.java | 4 - .../modules/biz/entity/MyProjectInfo.java | 132 +++++ .../biz/service/MyChartInfoService.java | 134 +++++ .../biz/service/MyProjectInfoService.java | 137 +++++ .../biz/web/MyChartInfoController.java | 157 +++++ .../biz/web/MyProjectInfoController.java | 146 +++++ .../modules/erp/dao/ErpAccountDao.java | 15 + .../modules/erp/dao/ErpCategoryDao.java | 15 + .../modules/erp/entity/ErpAccount.java | 71 +++ .../modules/erp/entity/ErpCategory.java | 74 +++ .../erp/service/ErpAccountService.java | 134 +++++ .../erp/service/ErpCategoryService.java | 134 +++++ .../modules/erp/web/ErpAccountController.java | 157 +++++ .../erp/web/ErpCategoryController.java | 146 +++++ .../mappings/modules/biz/MyChartInfoDao.xml | 15 + .../mappings/modules/biz/MyProjectInfoDao.xml | 15 + .../mappings/modules/erp/ErpAccountDao.xml | 15 + .../mappings/modules/erp/ErpCategoryDao.xml | 15 + web-vue/packages/biz/api/biz/myChartInfo.ts | 59 ++ web-vue/packages/biz/api/biz/myProjectInfo.ts | 59 ++ .../biz/views/biz/myChartInfo/form.vue | 174 ++++++ .../biz/views/biz/myChartInfo/list.vue | 285 +++++++++ .../biz/views/biz/myChartInfo/select.ts | 183 ++++++ .../packages/biz/views/biz/myCities/form.vue | 5 +- .../packages/biz/views/biz/myCities/list.vue | 13 +- .../packages/biz/views/biz/myNotes/list.vue | 5 +- .../biz/views/biz/myProjectInfo/form.vue | 235 ++++++++ .../biz/views/biz/myProjectInfo/list.vue | 328 +++++++++++ .../biz/views/biz/myProjectInfo/select.ts | 200 +++++++ .../biz/views/biz/myWebsiteStorage/list.vue | 5 +- .../src/selectType/bizPersonSelect.ts} | 66 +-- .../src/selectType/bizScreenSelect.ts} | 52 +- .../packages/core/layouts/screen/index.vue | 14 +- .../views/screen/setting/components/Erp.vue | 8 +- .../views/screen/setting/components/Home.vue | 8 +- .../views/screen/setting/components/Sys.vue | 8 +- .../views/screen/setting/components/Work.vue | 8 +- .../welcome/Erp/components/ChartTop.vue | 215 +++++++ .../welcome/Erp/components/ChartV01.vue | 300 ++++++++++ .../welcome/Erp/components/ChartV02.vue | 240 ++++++++ .../welcome/Erp/components/ChartV03.vue | 287 +++++++++ .../welcome/Erp/components/ChartV04.vue | 228 ++++++++ .../welcome/Erp/components/ChartV05.vue | 228 ++++++++ .../welcome/Erp/components/ChartV06.vue | 318 ++++++++++ .../welcome/Erp/components/ChartV07.vue | 208 +++++++ .../welcome/Erp/components/ChartV08.vue | 286 +++++++++ .../welcome/Erp/components/ChartV09.vue | 416 +++++++++++++ .../welcome/Erp/components/ChartV10.vue | 246 ++++++++ .../welcome/Erp/components/ChartV11.vue | 246 ++++++++ .../Erp/components/detail/indexV01.vue | 550 ++++++++++++++++++ .../views/screen/welcome/Erp/index.vue | 363 +++++++++++- .../welcome/Home/components/ChartTop.vue | 215 +++++++ .../welcome/Home/components/ChartV01.vue | 49 ++ .../welcome/Home/components/ChartV02.vue | 49 ++ .../welcome/Home/components/ChartV03.vue | 49 ++ .../welcome/Home/components/ChartV04.vue | 47 ++ .../welcome/Home/components/ChartV05.vue | 47 ++ .../welcome/Home/components/ChartV06.vue | 47 ++ .../welcome/Home/components/ChartV07.vue | 47 ++ .../welcome/Home/components/ChartV08.vue | 47 ++ .../welcome/Home/components/ChartV09.vue | 47 ++ .../welcome/Home/components/ChartV10.vue | 47 ++ .../views/screen/welcome/Home/index.vue | 280 ++++++++- .../welcome/Sys/components/ChartTop.vue | 215 +++++++ .../welcome/Sys/components/ChartV01.vue | 47 ++ .../welcome/Sys/components/ChartV02.vue | 47 ++ .../welcome/Sys/components/ChartV03.vue | 47 ++ .../welcome/Sys/components/ChartV04.vue | 47 ++ .../welcome/Sys/components/ChartV05.vue | 47 ++ .../welcome/Sys/components/ChartV06.vue | 47 ++ .../welcome/Sys/components/ChartV07.vue | 47 ++ .../welcome/Sys/components/ChartV08.vue | 47 ++ .../welcome/Sys/components/ChartV09.vue | 47 ++ .../welcome/Sys/components/ChartV10.vue | 47 ++ .../views/screen/welcome/Sys/index.vue | 270 ++++++++- .../welcome/Work/components/ChartTop.vue | 215 +++++++ .../welcome/Work/components/ChartV01.vue | 47 ++ .../welcome/Work/components/ChartV02.vue | 47 ++ .../welcome/Work/components/ChartV03.vue | 47 ++ .../welcome/Work/components/ChartV04.vue | 47 ++ .../welcome/Work/components/ChartV05.vue | 47 ++ .../welcome/Work/components/ChartV06.vue | 47 ++ .../welcome/Work/components/ChartV07.vue | 47 ++ .../welcome/Work/components/ChartV08.vue | 47 ++ .../welcome/Work/components/ChartV09.vue | 47 ++ .../welcome/Work/components/ChartV10.vue | 47 ++ .../views/screen/welcome/Work/index.vue | 325 ++++++++++- web-vue/packages/core/utils/desensitize.ts | 44 ++ web-vue/packages/erp/api/erp/account.ts | 55 ++ web-vue/packages/erp/api/erp/category.ts | 51 ++ .../packages/erp/views/erp/account/form.vue | 149 +++++ .../packages/erp/views/erp/account/list.vue | 221 +++++++ .../packages/erp/views/erp/account/select.ts | 118 ++++ .../packages/erp/views/erp/category/form.vue | 140 +++++ .../packages/erp/views/erp/category/list.vue | 208 +++++++ .../packages/erp/views/erp/category/select.ts | 110 ++++ web-vue/web/src/main.ts | 68 +-- 105 files changed, 11434 insertions(+), 193 deletions(-) create mode 100644 web-api/src/main/java/com/jeesite/modules/apps/Start.java create mode 100644 web-api/src/main/java/com/jeesite/modules/biz/dao/MyChartInfoDao.java create mode 100644 web-api/src/main/java/com/jeesite/modules/biz/dao/MyProjectInfoDao.java create mode 100644 web-api/src/main/java/com/jeesite/modules/biz/entity/MyChartInfo.java create mode 100644 web-api/src/main/java/com/jeesite/modules/biz/entity/MyProjectInfo.java create mode 100644 web-api/src/main/java/com/jeesite/modules/biz/service/MyChartInfoService.java create mode 100644 web-api/src/main/java/com/jeesite/modules/biz/service/MyProjectInfoService.java create mode 100644 web-api/src/main/java/com/jeesite/modules/biz/web/MyChartInfoController.java create mode 100644 web-api/src/main/java/com/jeesite/modules/biz/web/MyProjectInfoController.java create mode 100644 web-api/src/main/java/com/jeesite/modules/erp/dao/ErpAccountDao.java create mode 100644 web-api/src/main/java/com/jeesite/modules/erp/dao/ErpCategoryDao.java create mode 100644 web-api/src/main/java/com/jeesite/modules/erp/entity/ErpAccount.java create mode 100644 web-api/src/main/java/com/jeesite/modules/erp/entity/ErpCategory.java create mode 100644 web-api/src/main/java/com/jeesite/modules/erp/service/ErpAccountService.java create mode 100644 web-api/src/main/java/com/jeesite/modules/erp/service/ErpCategoryService.java create mode 100644 web-api/src/main/java/com/jeesite/modules/erp/web/ErpAccountController.java create mode 100644 web-api/src/main/java/com/jeesite/modules/erp/web/ErpCategoryController.java create mode 100644 web-api/src/main/resources/mappings/modules/biz/MyChartInfoDao.xml create mode 100644 web-api/src/main/resources/mappings/modules/biz/MyProjectInfoDao.xml create mode 100644 web-api/src/main/resources/mappings/modules/erp/ErpAccountDao.xml create mode 100644 web-api/src/main/resources/mappings/modules/erp/ErpCategoryDao.xml create mode 100644 web-vue/packages/biz/api/biz/myChartInfo.ts create mode 100644 web-vue/packages/biz/api/biz/myProjectInfo.ts create mode 100644 web-vue/packages/biz/views/biz/myChartInfo/form.vue create mode 100644 web-vue/packages/biz/views/biz/myChartInfo/list.vue create mode 100644 web-vue/packages/biz/views/biz/myChartInfo/select.ts create mode 100644 web-vue/packages/biz/views/biz/myProjectInfo/form.vue create mode 100644 web-vue/packages/biz/views/biz/myProjectInfo/list.vue create mode 100644 web-vue/packages/biz/views/biz/myProjectInfo/select.ts rename web-vue/packages/{biz/views/biz/myPerson/select.ts => core/components/ListSelect/src/selectType/bizPersonSelect.ts} (69%) rename web-vue/packages/{biz/views/biz/myScreenInfo/select.ts => core/components/ListSelect/src/selectType/bizScreenSelect.ts} (69%) create mode 100644 web-vue/packages/core/layouts/views/screen/welcome/Erp/components/ChartTop.vue create mode 100644 web-vue/packages/core/layouts/views/screen/welcome/Erp/components/ChartV01.vue create mode 100644 web-vue/packages/core/layouts/views/screen/welcome/Erp/components/ChartV02.vue create mode 100644 web-vue/packages/core/layouts/views/screen/welcome/Erp/components/ChartV03.vue create mode 100644 web-vue/packages/core/layouts/views/screen/welcome/Erp/components/ChartV04.vue create mode 100644 web-vue/packages/core/layouts/views/screen/welcome/Erp/components/ChartV05.vue create mode 100644 web-vue/packages/core/layouts/views/screen/welcome/Erp/components/ChartV06.vue create mode 100644 web-vue/packages/core/layouts/views/screen/welcome/Erp/components/ChartV07.vue create mode 100644 web-vue/packages/core/layouts/views/screen/welcome/Erp/components/ChartV08.vue create mode 100644 web-vue/packages/core/layouts/views/screen/welcome/Erp/components/ChartV09.vue create mode 100644 web-vue/packages/core/layouts/views/screen/welcome/Erp/components/ChartV10.vue create mode 100644 web-vue/packages/core/layouts/views/screen/welcome/Erp/components/ChartV11.vue create mode 100644 web-vue/packages/core/layouts/views/screen/welcome/Erp/components/detail/indexV01.vue create mode 100644 web-vue/packages/core/layouts/views/screen/welcome/Home/components/ChartTop.vue create mode 100644 web-vue/packages/core/layouts/views/screen/welcome/Home/components/ChartV01.vue create mode 100644 web-vue/packages/core/layouts/views/screen/welcome/Home/components/ChartV02.vue create mode 100644 web-vue/packages/core/layouts/views/screen/welcome/Home/components/ChartV03.vue create mode 100644 web-vue/packages/core/layouts/views/screen/welcome/Home/components/ChartV04.vue create mode 100644 web-vue/packages/core/layouts/views/screen/welcome/Home/components/ChartV05.vue create mode 100644 web-vue/packages/core/layouts/views/screen/welcome/Home/components/ChartV06.vue create mode 100644 web-vue/packages/core/layouts/views/screen/welcome/Home/components/ChartV07.vue create mode 100644 web-vue/packages/core/layouts/views/screen/welcome/Home/components/ChartV08.vue create mode 100644 web-vue/packages/core/layouts/views/screen/welcome/Home/components/ChartV09.vue create mode 100644 web-vue/packages/core/layouts/views/screen/welcome/Home/components/ChartV10.vue create mode 100644 web-vue/packages/core/layouts/views/screen/welcome/Sys/components/ChartTop.vue create mode 100644 web-vue/packages/core/layouts/views/screen/welcome/Sys/components/ChartV01.vue create mode 100644 web-vue/packages/core/layouts/views/screen/welcome/Sys/components/ChartV02.vue create mode 100644 web-vue/packages/core/layouts/views/screen/welcome/Sys/components/ChartV03.vue create mode 100644 web-vue/packages/core/layouts/views/screen/welcome/Sys/components/ChartV04.vue create mode 100644 web-vue/packages/core/layouts/views/screen/welcome/Sys/components/ChartV05.vue create mode 100644 web-vue/packages/core/layouts/views/screen/welcome/Sys/components/ChartV06.vue create mode 100644 web-vue/packages/core/layouts/views/screen/welcome/Sys/components/ChartV07.vue create mode 100644 web-vue/packages/core/layouts/views/screen/welcome/Sys/components/ChartV08.vue create mode 100644 web-vue/packages/core/layouts/views/screen/welcome/Sys/components/ChartV09.vue create mode 100644 web-vue/packages/core/layouts/views/screen/welcome/Sys/components/ChartV10.vue create mode 100644 web-vue/packages/core/layouts/views/screen/welcome/Work/components/ChartTop.vue create mode 100644 web-vue/packages/core/layouts/views/screen/welcome/Work/components/ChartV01.vue create mode 100644 web-vue/packages/core/layouts/views/screen/welcome/Work/components/ChartV02.vue create mode 100644 web-vue/packages/core/layouts/views/screen/welcome/Work/components/ChartV03.vue create mode 100644 web-vue/packages/core/layouts/views/screen/welcome/Work/components/ChartV04.vue create mode 100644 web-vue/packages/core/layouts/views/screen/welcome/Work/components/ChartV05.vue create mode 100644 web-vue/packages/core/layouts/views/screen/welcome/Work/components/ChartV06.vue create mode 100644 web-vue/packages/core/layouts/views/screen/welcome/Work/components/ChartV07.vue create mode 100644 web-vue/packages/core/layouts/views/screen/welcome/Work/components/ChartV08.vue create mode 100644 web-vue/packages/core/layouts/views/screen/welcome/Work/components/ChartV09.vue create mode 100644 web-vue/packages/core/layouts/views/screen/welcome/Work/components/ChartV10.vue create mode 100644 web-vue/packages/core/utils/desensitize.ts create mode 100644 web-vue/packages/erp/api/erp/account.ts create mode 100644 web-vue/packages/erp/api/erp/category.ts create mode 100644 web-vue/packages/erp/views/erp/account/form.vue create mode 100644 web-vue/packages/erp/views/erp/account/list.vue create mode 100644 web-vue/packages/erp/views/erp/account/select.ts create mode 100644 web-vue/packages/erp/views/erp/category/form.vue create mode 100644 web-vue/packages/erp/views/erp/category/list.vue create mode 100644 web-vue/packages/erp/views/erp/category/select.ts diff --git a/common/pom.xml b/common/pom.xml index fb3603f..8a6739f 100644 --- a/common/pom.xml +++ b/common/pom.xml @@ -19,6 +19,12 @@ + + cn.hutool + hutool-all + 5.8.38 + + jakarta.servlet diff --git a/web-api/pom.xml b/web-api/pom.xml index 23e5ee4..447497f 100644 --- a/web-api/pom.xml +++ b/web-api/pom.xml @@ -77,7 +77,6 @@ jeesite-module-app ${project.parent.version} - diff --git a/web-api/src/main/java/com/jeesite/modules/apps/Start.java b/web-api/src/main/java/com/jeesite/modules/apps/Start.java new file mode 100644 index 0000000..45c4956 --- /dev/null +++ b/web-api/src/main/java/com/jeesite/modules/apps/Start.java @@ -0,0 +1,4 @@ +package com.jeesite.modules.apps; + +public class Start { +} diff --git a/web-api/src/main/java/com/jeesite/modules/biz/dao/MyChartInfoDao.java b/web-api/src/main/java/com/jeesite/modules/biz/dao/MyChartInfoDao.java new file mode 100644 index 0000000..266d98a --- /dev/null +++ b/web-api/src/main/java/com/jeesite/modules/biz/dao/MyChartInfoDao.java @@ -0,0 +1,15 @@ +package com.jeesite.modules.biz.dao; + +import com.jeesite.common.dao.CrudDao; +import com.jeesite.common.mybatis.annotation.MyBatisDao; +import com.jeesite.modules.biz.entity.MyChartInfo; + +/** + * 图表信息 DAO 接口 + * @author gaoxq + * @version 2026-03-21 + */ +@MyBatisDao(dataSourceName="work") +public interface MyChartInfoDao extends CrudDao { + +} \ No newline at end of file diff --git a/web-api/src/main/java/com/jeesite/modules/biz/dao/MyProjectInfoDao.java b/web-api/src/main/java/com/jeesite/modules/biz/dao/MyProjectInfoDao.java new file mode 100644 index 0000000..69b0738 --- /dev/null +++ b/web-api/src/main/java/com/jeesite/modules/biz/dao/MyProjectInfoDao.java @@ -0,0 +1,15 @@ +package com.jeesite.modules.biz.dao; + +import com.jeesite.common.dao.CrudDao; +import com.jeesite.common.mybatis.annotation.MyBatisDao; +import com.jeesite.modules.biz.entity.MyProjectInfo; + +/** + * 项目信息 DAO 接口 + * @author gaoxq + * @version 2026-03-21 + */ +@MyBatisDao(dataSourceName="work") +public interface MyProjectInfoDao extends CrudDao { + +} \ No newline at end of file diff --git a/web-api/src/main/java/com/jeesite/modules/biz/entity/MyAreaSource.java b/web-api/src/main/java/com/jeesite/modules/biz/entity/MyAreaSource.java index c71f2d8..f288b12 100644 --- a/web-api/src/main/java/com/jeesite/modules/biz/entity/MyAreaSource.java +++ b/web-api/src/main/java/com/jeesite/modules/biz/entity/MyAreaSource.java @@ -26,7 +26,7 @@ import java.io.Serial; @Column(name = "area_code", attrName = "areaCode", label = "区域编号"), @Column(name = "area_name", attrName = "areaName", label = "区域名称", queryType = QueryType.LIKE), @Column(name = "p_area_code", attrName = "pareaCode", label = "上级编码"), - @Column(name = "area_level", attrName = "areaLevel", label = "区域级别"), + @Column(name = "area_level", attrName = "areaLevel", label = "区域级别", queryType = QueryType.LTE), @Column(name = "tree_name", attrName = "treeName", label = "树形名称", isQuery = false), @Column(name = "update_time", attrName = "updateTime", label = "更新时间", isQuery = false, isUpdateForce = true), @Column(name = "ustatus", attrName = "ustatus", label = "状态"), diff --git a/web-api/src/main/java/com/jeesite/modules/biz/entity/MyChartInfo.java b/web-api/src/main/java/com/jeesite/modules/biz/entity/MyChartInfo.java new file mode 100644 index 0000000..ded3c50 --- /dev/null +++ b/web-api/src/main/java/com/jeesite/modules/biz/entity/MyChartInfo.java @@ -0,0 +1,118 @@ +package com.jeesite.modules.biz.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 com.jeesite.common.utils.excel.annotation.ExcelField; +import com.jeesite.common.utils.excel.annotation.ExcelField.Align; +import com.jeesite.common.utils.excel.annotation.ExcelFields; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; + +/** + * 图表信息 Entity + * + * @author gaoxq + * @version 2026-03-21 + */ +@EqualsAndHashCode(callSuper = true) +@Table(name = "my_chart_info", alias = "a", label = "图表信息", columns = { + @Column(name = "create_time", attrName = "createTime", label = "记录时间", isUpdate = false, isUpdateForce = true), + @Column(name = "chart_id", attrName = "chartId", label = "唯一标识", isPK = true), + @Column(name = "chart_name", attrName = "chartName", label = "图表名称", queryType = QueryType.LIKE), + @Column(name = "chart_code", attrName = "chartCode", label = "图表编号"), + @Column(name = "sort", attrName = "sort", label = "序号", isQuery = false, isUpdateForce = true), + @Column(name = "vue_name", attrName = "vueName", label = "组件名称", isQuery = false), + @Column(name = "grid", attrName = "grid", label = "间距", isQuery = false), + @Column(name = "ustatus", attrName = "ustatus", label = "状态"), + @Column(name = "chart_type", attrName = "chartType", label = "图表类型"), + @Column(name = "item_name", attrName = "itemName", label = "项目名称", isQuery = false), + @Column(name = "item_code", attrName = "itemCode", label = "项目编号"), + @Column(name = "remark", attrName = "remark", label = "备注描述", isQuery = false), + @Column(name = "update_time", attrName = "updateTime", label = "更新时间", isQuery = false, isUpdateForce = true), +}, joinTable = { + @JoinTable(type = Type.LEFT_JOIN, entity = MyScreenInfo.class, alias = "b", + on = "a.chart_code = b.screen_code", attrName = "this", + columns = { + @Column(name = "screen_name", attrName = "screenName", label = "大屏名称"), + @Column(name = "screen_code", attrName = "screenCode", label = "大屏编码"), + @Column(name = "screen_title", attrName = "screenTitle", label = "大屏标题"), + }), +}, orderBy = "a.create_time DESC" +) +@Data +public class MyChartInfo extends DataEntity implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + private Date createTime; // 记录时间 + private String chartId; // 唯一标识 + private String chartName; // 图表名称 + private String chartCode; // 图表编号 + private Long sort; // 序号 + private String vueName; // 组件名称 + private String grid; // 间距 + private String ustatus; // 状态 + private String chartType; // 图表类型 + private String itemName; // 项目名称 + private String itemCode; // 项目编号 + private String remark; // 备注描述 + private Date updateTime; // 更新时间 + + private String screenName; + + private String screenCode; + + private String screenTitle; + + @ExcelFields({ + @ExcelField(title = "记录时间", attrName = "createTime", align = Align.CENTER, sort = 10, dataFormat = "yyyy-MM-dd hh:mm"), + @ExcelField(title = "唯一标识", attrName = "chartId", align = Align.CENTER, sort = 20), + @ExcelField(title = "图表名称", attrName = "chartName", align = Align.CENTER, sort = 30), + @ExcelField(title = "图表编号", attrName = "chartCode", align = Align.CENTER, sort = 40), + @ExcelField(title = "序号", attrName = "sort", align = Align.CENTER, sort = 50), + @ExcelField(title = "组件名称", attrName = "vueName", align = Align.CENTER, sort = 60), + @ExcelField(title = "间距", attrName = "grid", align = Align.CENTER, sort = 70), + @ExcelField(title = "状态", attrName = "ustatus", dictType = "biz_status", align = Align.CENTER, sort = 80), + @ExcelField(title = "图表类型", attrName = "chartType", align = Align.CENTER, sort = 90), + @ExcelField(title = "项目名称", attrName = "itemName", align = Align.CENTER, sort = 100), + @ExcelField(title = "项目编号", attrName = "itemCode", align = Align.CENTER, sort = 110), + @ExcelField(title = "备注描述", attrName = "remark", align = Align.CENTER, sort = 120), + @ExcelField(title = "更新时间", attrName = "updateTime", align = Align.CENTER, sort = 130, dataFormat = "yyyy-MM-dd hh:mm"), + }) + public MyChartInfo() { + this(null); + } + + public MyChartInfo(String id) { + super(id); + } + + public Date getCreateTime_gte() { + return sqlMap.getWhere().getValue("create_time", QueryType.GTE); + } + + public void setCreateTime_gte(Date createTime) { + sqlMap.getWhere().and("create_time", QueryType.GTE, createTime); + } + + public Date getCreateTime_lte() { + return sqlMap.getWhere().getValue("create_time", QueryType.LTE); + } + + public void setCreateTime_lte(Date createTime) { + sqlMap.getWhere().and("create_time", QueryType.LTE, createTime); + } + +} \ No newline at end of file diff --git a/web-api/src/main/java/com/jeesite/modules/biz/entity/MyCities.java b/web-api/src/main/java/com/jeesite/modules/biz/entity/MyCities.java index fb11748..e0f7dfc 100644 --- a/web-api/src/main/java/com/jeesite/modules/biz/entity/MyCities.java +++ b/web-api/src/main/java/com/jeesite/modules/biz/entity/MyCities.java @@ -63,12 +63,12 @@ public class MyCities extends DataEntity implements Serializable { @ExcelFields({ @ExcelField(title = "唯一主键", attrName = "cityId", align = Align.CENTER, sort = 10), @ExcelField(title = "记录时间", attrName = "createTime", align = Align.CENTER, sort = 20, dataFormat = "yyyy-MM-dd hh:mm"), - @ExcelField(title = "省份名称", attrName = "provinceName", align = Align.CENTER, sort = 30), @ExcelField(title = "省份编码", attrName = "provinceCode", align = Align.CENTER, sort = 30), + @ExcelField(title = "省份名称", attrName = "provinceName", align = Align.CENTER, sort = 30), @ExcelField(title = "市区编码", attrName = "cityCode", align = Align.CENTER, sort = 40), @ExcelField(title = "市区名称", attrName = "cityName", align = Align.CENTER, sort = 50), @ExcelField(title = "市区区号", attrName = "areaCode", align = Align.CENTER, sort = 60), - @ExcelField(title = "市区级别", attrName = "areaType", align = Align.CENTER, sort = 70), + @ExcelField(title = "市区级别", attrName = "areaType", dictType = "area_level", align = Align.CENTER, sort = 70), @ExcelField(title = "更新时间", attrName = "updateTime", align = Align.CENTER, sort = 80, dataFormat = "yyyy-MM-dd hh:mm"), @ExcelField(title = "状态", attrName = "ustatus", dictType = "biz_status", align = Align.CENTER, sort = 90), }) diff --git a/web-api/src/main/java/com/jeesite/modules/biz/entity/MyPerson.java b/web-api/src/main/java/com/jeesite/modules/biz/entity/MyPerson.java index 97f15a4..d4b1341 100644 --- a/web-api/src/main/java/com/jeesite/modules/biz/entity/MyPerson.java +++ b/web-api/src/main/java/com/jeesite/modules/biz/entity/MyPerson.java @@ -5,10 +5,6 @@ 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.NotBlank; -import jakarta.validation.constraints.Size; -import jakarta.validation.constraints.NotNull; import com.jeesite.common.entity.DataEntity; import com.jeesite.common.mybatis.annotation.Column; diff --git a/web-api/src/main/java/com/jeesite/modules/biz/entity/MyProjectInfo.java b/web-api/src/main/java/com/jeesite/modules/biz/entity/MyProjectInfo.java new file mode 100644 index 0000000..2a5c598 --- /dev/null +++ b/web-api/src/main/java/com/jeesite/modules/biz/entity/MyProjectInfo.java @@ -0,0 +1,132 @@ +package com.jeesite.modules.biz.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.NotBlank; +import jakarta.validation.constraints.Size; +import jakarta.validation.constraints.NotNull; + +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 com.jeesite.common.utils.excel.annotation.ExcelField; +import com.jeesite.common.utils.excel.annotation.ExcelField.Align; +import com.jeesite.common.utils.excel.annotation.ExcelFields; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; + +/** + * 项目信息 Entity + * + * @author gaoxq + * @version 2026-03-21 + */ +@EqualsAndHashCode(callSuper = true) +@Table(name = "my_project_info", alias = "a", label = "项目信息", columns = { + @Column(name = "create_time", attrName = "createTime", label = "记录创建时间", isUpdate = false, isUpdateForce = true), + @Column(name = "project_id", attrName = "projectId", label = "唯一主键", isPK = true), + @Column(name = "project_code", attrName = "projectCode", label = "项目编码", isQuery = false), + @Column(name = "project_name", attrName = "projectName", label = "项目名称", queryType = QueryType.LIKE), + @Column(name = "project_desc", attrName = "projectDesc", label = "项目描述", isQuery = false), + @Column(name = "person_id", attrName = "personId", label = "人员编号"), + @Column(name = "priority", attrName = "priority", label = "级别"), + @Column(name = "area_level", attrName = "areaLevel", label = "区域级别"), + @Column(name = "area_code", attrName = "areaCode", label = "区域编号"), + @Column(name = "start_date", attrName = "startDate", label = "预计开始日期", isQuery = false, isUpdateForce = true), + @Column(name = "end_date", attrName = "endDate", label = "预计结束日期", isQuery = false, isUpdateForce = true), + @Column(name = "actual_end_date", attrName = "actualEndDate", label = "实际结束日期", isQuery = false, isUpdateForce = true), + @Column(name = "budget", attrName = "budget", label = "项目预算", comment = "项目预算(元)", isQuery = false), + @Column(name = "project_type", attrName = "projectType", label = "项目类型", isQuery = false), + @Column(name = "project_status", attrName = "projectStatus", label = "项目状态"), + @Column(name = "update_time", attrName = "updateTime", label = "更新时间", isQuery = false, isUpdateForce = true), +}, joinTable = { + @JoinTable(type = Type.LEFT_JOIN, entity = MyAreaSource.class, alias = "b", + on = "a.area_code = b.area_code", attrName = "this", + columns = { + @Column(name = "area_name", attrName = "areaName", label = "区域名称"), + @Column(name = "tree_name", attrName = "treeName", label = "树形名称"), + }), + @JoinTable(type = Type.LEFT_JOIN, entity = MyPerson.class, alias = "c", + on = "a.person_id = c.person_id", attrName = "this", + columns = { + @Column(name = "person_name", attrName = "personName", label = "姓名"), + }), +}, orderBy = "a.create_time DESC" +) +@Data +public class MyProjectInfo extends DataEntity implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + private Date createTime; // 记录创建时间 + private String projectId; // 唯一主键 + private String projectCode; // 项目编码 + private String projectName; // 项目名称 + private String projectDesc; // 项目描述 + private String personId; // 人员编号 + private String priority; // 级别 + private String areaLevel; // 区域级别 + private String areaCode; // 区域编号 + private Date startDate; // 预计开始日期 + private Date endDate; // 预计结束日期 + private Date actualEndDate; // 实际结束日期 + private Double budget; // 项目预算(元) + private String projectType; // 项目类型 + private String projectStatus; // 项目状态 + private Date updateTime; // 更新时间 + + private String areaName; + private String treeName; + + private String personName; + + @ExcelFields({ + @ExcelField(title = "记录创建时间", attrName = "createTime", align = Align.CENTER, sort = 10, dataFormat = "yyyy-MM-dd hh:mm"), + @ExcelField(title = "唯一主键", attrName = "projectId", align = Align.CENTER, sort = 20), + @ExcelField(title = "项目编码", attrName = "projectCode", align = Align.CENTER, sort = 30), + @ExcelField(title = "项目名称", attrName = "projectName", align = Align.CENTER, sort = 40), + @ExcelField(title = "项目描述", attrName = "projectDesc", align = Align.CENTER, sort = 50), + @ExcelField(title = "人员姓名", attrName = "personName", align = Align.CENTER, sort = 60), + @ExcelField(title = "区域级别", attrName = "areaLevel", align = Align.CENTER, sort = 70), + @ExcelField(title = "区域名称", attrName = "treeName", align = Align.CENTER, sort = 80), + @ExcelField(title = "预计开始日期", attrName = "startDate", align = Align.CENTER, sort = 90, dataFormat = "yyyy-MM-dd hh:mm"), + @ExcelField(title = "预计结束日期", attrName = "endDate", align = Align.CENTER, sort = 100, dataFormat = "yyyy-MM-dd hh:mm"), + @ExcelField(title = "实际结束日期", attrName = "actualEndDate", align = Align.CENTER, sort = 110, dataFormat = "yyyy-MM-dd hh:mm"), + @ExcelField(title = "项目预算", attrName = "budget", align = Align.CENTER, sort = 120), + @ExcelField(title = "项目类型", attrName = "projectType", align = Align.CENTER, sort = 130), + @ExcelField(title = "级别", attrName = "priority", dictType = "biz_priority", align = Align.CENTER, sort = 135), + @ExcelField(title = "项目状态", attrName = "projectStatus", align = Align.CENTER, sort = 140), + @ExcelField(title = "更新时间", attrName = "updateTime", align = Align.CENTER, sort = 150, dataFormat = "yyyy-MM-dd hh:mm"), + }) + public MyProjectInfo() { + this(null); + } + + public MyProjectInfo(String id) { + super(id); + } + + public Date getCreateTime_gte() { + return sqlMap.getWhere().getValue("create_time", QueryType.GTE); + } + + public void setCreateTime_gte(Date createTime) { + sqlMap.getWhere().and("create_time", QueryType.GTE, createTime); + } + + public Date getCreateTime_lte() { + return sqlMap.getWhere().getValue("create_time", QueryType.LTE); + } + + public void setCreateTime_lte(Date createTime) { + sqlMap.getWhere().and("create_time", QueryType.LTE, createTime); + } + +} \ No newline at end of file diff --git a/web-api/src/main/java/com/jeesite/modules/biz/service/MyChartInfoService.java b/web-api/src/main/java/com/jeesite/modules/biz/service/MyChartInfoService.java new file mode 100644 index 0000000..6813df8 --- /dev/null +++ b/web-api/src/main/java/com/jeesite/modules/biz/service/MyChartInfoService.java @@ -0,0 +1,134 @@ +package com.jeesite.modules.biz.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.biz.entity.MyChartInfo; +import com.jeesite.modules.biz.dao.MyChartInfoDao; +import com.jeesite.common.service.ServiceException; +import com.jeesite.common.config.Global; +import com.jeesite.common.validator.ValidatorUtils; +import com.jeesite.common.utils.excel.ExcelImport; +import org.springframework.web.multipart.MultipartFile; +import jakarta.validation.ConstraintViolation; +import jakarta.validation.ConstraintViolationException; + +/** + * 图表信息 Service + * @author gaoxq + * @version 2026-03-21 + */ +@Service +public class MyChartInfoService extends CrudService { + + /** + * 获取单条数据 + * @param myChartInfo 主键 + */ + @Override + public MyChartInfo get(MyChartInfo myChartInfo) { + return super.get(myChartInfo); + } + + /** + * 查询分页数据 + * @param myChartInfo 查询条件 + * @param myChartInfo page 分页对象 + */ + @Override + public Page findPage(MyChartInfo myChartInfo) { + return super.findPage(myChartInfo); + } + + /** + * 查询列表数据 + * @param myChartInfo 查询条件 + */ + @Override + public List findList(MyChartInfo myChartInfo) { + return super.findList(myChartInfo); + } + + /** + * 保存数据(插入或更新) + * @param myChartInfo 数据对象 + */ + @Override + @Transactional + public void save(MyChartInfo myChartInfo) { + super.save(myChartInfo); + } + + /** + * 导入数据 + * @param file 导入的数据文件 + */ + @Transactional + public String importData(MultipartFile file) { + if (file == null){ + throw new ServiceException(text("请选择导入的数据文件!")); + } + int successNum = 0; int failureNum = 0; + StringBuilder successMsg = new StringBuilder(); + StringBuilder failureMsg = new StringBuilder(); + try(ExcelImport ei = new ExcelImport(file, 2, 0)){ + List list = ei.getDataList(MyChartInfo.class); + for (MyChartInfo myChartInfo : list) { + try{ + ValidatorUtils.validateWithException(myChartInfo); + this.save(myChartInfo); + successNum++; + successMsg.append("
" + successNum + "、编号 " + myChartInfo.getId() + " 导入成功"); + } catch (Exception e) { + failureNum++; + String msg = "
" + failureNum + "、编号 " + myChartInfo.getId() + " 导入失败:"; + if (e instanceof ConstraintViolationException){ + ConstraintViolationException cve = (ConstraintViolationException)e; + for (ConstraintViolation violation : cve.getConstraintViolations()) { + msg += Global.getText(violation.getMessage()) + " ("+violation.getPropertyPath()+")"; + } + }else{ + msg += e.getMessage(); + } + failureMsg.append(msg); + logger.error(msg, e); + } + } + } catch (Exception e) { + logger.error(e.getMessage(), e); + failureMsg.append(e.getMessage()); + return failureMsg.toString(); + } + if (failureNum > 0) { + failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:"); + throw new ServiceException(failureMsg.toString()); + }else{ + successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:"); + } + return successMsg.toString(); + } + + /** + * 更新状态 + * @param myChartInfo 数据对象 + */ + @Override + @Transactional + public void updateStatus(MyChartInfo myChartInfo) { + super.updateStatus(myChartInfo); + } + + /** + * 删除数据 + * @param myChartInfo 数据对象 + */ + @Override + @Transactional + public void delete(MyChartInfo myChartInfo) { + super.delete(myChartInfo); + } + +} \ No newline at end of file diff --git a/web-api/src/main/java/com/jeesite/modules/biz/service/MyProjectInfoService.java b/web-api/src/main/java/com/jeesite/modules/biz/service/MyProjectInfoService.java new file mode 100644 index 0000000..c3199fa --- /dev/null +++ b/web-api/src/main/java/com/jeesite/modules/biz/service/MyProjectInfoService.java @@ -0,0 +1,137 @@ +package com.jeesite.modules.biz.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.biz.entity.MyProjectInfo; +import com.jeesite.modules.biz.dao.MyProjectInfoDao; +import com.jeesite.common.service.ServiceException; +import com.jeesite.modules.file.utils.FileUploadUtils; +import com.jeesite.common.config.Global; +import com.jeesite.common.validator.ValidatorUtils; +import com.jeesite.common.utils.excel.ExcelImport; +import org.springframework.web.multipart.MultipartFile; +import jakarta.validation.ConstraintViolation; +import jakarta.validation.ConstraintViolationException; + +/** + * 项目信息 Service + * @author gaoxq + * @version 2026-03-21 + */ +@Service +public class MyProjectInfoService extends CrudService { + + /** + * 获取单条数据 + * @param myProjectInfo 主键 + */ + @Override + public MyProjectInfo get(MyProjectInfo myProjectInfo) { + return super.get(myProjectInfo); + } + + /** + * 查询分页数据 + * @param myProjectInfo 查询条件 + * @param myProjectInfo page 分页对象 + */ + @Override + public Page findPage(MyProjectInfo myProjectInfo) { + return super.findPage(myProjectInfo); + } + + /** + * 查询列表数据 + * @param myProjectInfo 查询条件 + */ + @Override + public List findList(MyProjectInfo myProjectInfo) { + return super.findList(myProjectInfo); + } + + /** + * 保存数据(插入或更新) + * @param myProjectInfo 数据对象 + */ + @Override + @Transactional + public void save(MyProjectInfo myProjectInfo) { + super.save(myProjectInfo); + // 保存上传附件 + FileUploadUtils.saveFileUpload(myProjectInfo, myProjectInfo.getId(), "myProjectInfo_file"); + } + + /** + * 导入数据 + * @param file 导入的数据文件 + */ + @Transactional + public String importData(MultipartFile file) { + if (file == null){ + throw new ServiceException(text("请选择导入的数据文件!")); + } + int successNum = 0; int failureNum = 0; + StringBuilder successMsg = new StringBuilder(); + StringBuilder failureMsg = new StringBuilder(); + try(ExcelImport ei = new ExcelImport(file, 2, 0)){ + List list = ei.getDataList(MyProjectInfo.class); + for (MyProjectInfo myProjectInfo : list) { + try{ + ValidatorUtils.validateWithException(myProjectInfo); + this.save(myProjectInfo); + successNum++; + successMsg.append("
" + successNum + "、编号 " + myProjectInfo.getId() + " 导入成功"); + } catch (Exception e) { + failureNum++; + String msg = "
" + failureNum + "、编号 " + myProjectInfo.getId() + " 导入失败:"; + if (e instanceof ConstraintViolationException){ + ConstraintViolationException cve = (ConstraintViolationException)e; + for (ConstraintViolation violation : cve.getConstraintViolations()) { + msg += Global.getText(violation.getMessage()) + " ("+violation.getPropertyPath()+")"; + } + }else{ + msg += e.getMessage(); + } + failureMsg.append(msg); + logger.error(msg, e); + } + } + } catch (Exception e) { + logger.error(e.getMessage(), e); + failureMsg.append(e.getMessage()); + return failureMsg.toString(); + } + if (failureNum > 0) { + failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:"); + throw new ServiceException(failureMsg.toString()); + }else{ + successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:"); + } + return successMsg.toString(); + } + + /** + * 更新状态 + * @param myProjectInfo 数据对象 + */ + @Override + @Transactional + public void updateStatus(MyProjectInfo myProjectInfo) { + super.updateStatus(myProjectInfo); + } + + /** + * 删除数据 + * @param myProjectInfo 数据对象 + */ + @Override + @Transactional + public void delete(MyProjectInfo myProjectInfo) { + super.delete(myProjectInfo); + } + +} \ No newline at end of file diff --git a/web-api/src/main/java/com/jeesite/modules/biz/web/MyChartInfoController.java b/web-api/src/main/java/com/jeesite/modules/biz/web/MyChartInfoController.java new file mode 100644 index 0000000..7ce09c3 --- /dev/null +++ b/web-api/src/main/java/com/jeesite/modules/biz/web/MyChartInfoController.java @@ -0,0 +1,157 @@ +package com.jeesite.modules.biz.web; + +import java.util.List; + +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.collect.ListUtils; +import com.jeesite.common.entity.Page; +import com.jeesite.common.lang.DateUtils; +import com.jeesite.common.utils.excel.ExcelExport; +import com.jeesite.common.utils.excel.annotation.ExcelField.Type; +import org.springframework.web.multipart.MultipartFile; +import com.jeesite.common.web.BaseController; +import com.jeesite.modules.biz.entity.MyChartInfo; +import com.jeesite.modules.biz.service.MyChartInfoService; + +/** + * 图表信息 Controller + * + * @author gaoxq + * @version 2026-03-21 + */ +@Controller +@RequestMapping(value = "${adminPath}/biz/myChartInfo") +public class MyChartInfoController extends BaseController { + + private final MyChartInfoService myChartInfoService; + + public MyChartInfoController(MyChartInfoService myChartInfoService) { + this.myChartInfoService = myChartInfoService; + } + + /** + * 获取数据 + */ + @ModelAttribute + public MyChartInfo get(String chartId, boolean isNewRecord) { + return myChartInfoService.get(chartId, isNewRecord); + } + + /** + * 查询列表 + */ + @RequiresPermissions("biz:myChartInfo:view") + @RequestMapping(value = {"list", ""}) + public String list(MyChartInfo myChartInfo, Model model) { + model.addAttribute("myChartInfo", myChartInfo); + return "modules/biz/myChartInfoList"; + } + + /** + * 查询列表数据 + */ + @RequiresPermissions("biz:myChartInfo:view") + @RequestMapping(value = "listData") + @ResponseBody + public Page listData(MyChartInfo myChartInfo, HttpServletRequest request, HttpServletResponse response) { + myChartInfo.setPage(new Page<>(request, response)); + Page page = myChartInfoService.findPage(myChartInfo); + return page; + } + + /** + * 查看编辑表单 + */ + @RequiresPermissions("biz:myChartInfo:view") + @RequestMapping(value = "form") + public String form(MyChartInfo myChartInfo, Model model) { + model.addAttribute("myChartInfo", myChartInfo); + return "modules/biz/myChartInfoForm"; + } + + /** + * 保存数据 + */ + @RequiresPermissions("biz:myChartInfo:edit") + @PostMapping(value = "save") + @ResponseBody + public String save(@Validated MyChartInfo myChartInfo) { + myChartInfoService.save(myChartInfo); + return renderResult(Global.TRUE, text("保存图表成功!")); + } + + /** + * 导出数据 + */ + @RequiresPermissions("biz:myChartInfo:view") + @RequestMapping(value = "exportData") + public void exportData(MyChartInfo myChartInfo, HttpServletResponse response) { + List list = myChartInfoService.findList(myChartInfo); + String fileName = "图表" + DateUtils.getDate("yyyyMMddHHmmss") + ".xlsx"; + try (ExcelExport ee = new ExcelExport("图表", MyChartInfo.class)) { + ee.setDataList(list).write(response, fileName); + } + } + + /** + * 下载模板 + */ + @RequiresPermissions("biz:myChartInfo:view") + @RequestMapping(value = "importTemplate") + public void importTemplate(HttpServletResponse response) { + MyChartInfo myChartInfo = new MyChartInfo(); + List list = ListUtils.newArrayList(myChartInfo); + String fileName = "图表模板.xlsx"; + try (ExcelExport ee = new ExcelExport("图表", MyChartInfo.class, Type.IMPORT)) { + ee.setDataList(list).write(response, fileName); + } + } + + /** + * 导入数据 + */ + @ResponseBody + @RequiresPermissions("biz:myChartInfo:edit") + @PostMapping(value = "importData") + public String importData(MultipartFile file) { + try { + String message = myChartInfoService.importData(file); + return renderResult(Global.TRUE, "posfull:" + message); + } catch (Exception ex) { + return renderResult(Global.FALSE, "posfull:" + ex.getMessage()); + } + } + + /** + * 删除数据 + */ + @RequiresPermissions("biz:myChartInfo:edit") + @RequestMapping(value = "delete") + @ResponseBody + public String delete(MyChartInfo myChartInfo) { + myChartInfoService.delete(myChartInfo); + return renderResult(Global.TRUE, text("删除图表成功!")); + } + + + /** + * 列表数据 + */ + @RequestMapping(value = "listAll") + @ResponseBody + public List listAll(MyChartInfo myChartInfo) { + return myChartInfoService.findList(myChartInfo); + } +} \ No newline at end of file diff --git a/web-api/src/main/java/com/jeesite/modules/biz/web/MyProjectInfoController.java b/web-api/src/main/java/com/jeesite/modules/biz/web/MyProjectInfoController.java new file mode 100644 index 0000000..bedf65f --- /dev/null +++ b/web-api/src/main/java/com/jeesite/modules/biz/web/MyProjectInfoController.java @@ -0,0 +1,146 @@ +package com.jeesite.modules.biz.web; + +import java.util.List; +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.collect.ListUtils; +import com.jeesite.common.entity.Page; +import com.jeesite.common.lang.DateUtils; +import com.jeesite.common.utils.excel.ExcelExport; +import com.jeesite.common.utils.excel.annotation.ExcelField.Type; +import org.springframework.web.multipart.MultipartFile; +import com.jeesite.common.web.BaseController; +import com.jeesite.modules.biz.entity.MyProjectInfo; +import com.jeesite.modules.biz.service.MyProjectInfoService; + +/** + * 项目信息 Controller + * @author gaoxq + * @version 2026-03-21 + */ +@Controller +@RequestMapping(value = "${adminPath}/biz/myProjectInfo") +public class MyProjectInfoController extends BaseController { + + private final MyProjectInfoService myProjectInfoService; + + public MyProjectInfoController(MyProjectInfoService myProjectInfoService) { + this.myProjectInfoService = myProjectInfoService; + } + + /** + * 获取数据 + */ + @ModelAttribute + public MyProjectInfo get(String projectId, boolean isNewRecord) { + return myProjectInfoService.get(projectId, isNewRecord); + } + + /** + * 查询列表 + */ + @RequiresPermissions("biz:myProjectInfo:view") + @RequestMapping(value = {"list", ""}) + public String list(MyProjectInfo myProjectInfo, Model model) { + model.addAttribute("myProjectInfo", myProjectInfo); + return "modules/biz/myProjectInfoList"; + } + + /** + * 查询列表数据 + */ + @RequiresPermissions("biz:myProjectInfo:view") + @RequestMapping(value = "listData") + @ResponseBody + public Page listData(MyProjectInfo myProjectInfo, HttpServletRequest request, HttpServletResponse response) { + myProjectInfo.setPage(new Page<>(request, response)); + Page page = myProjectInfoService.findPage(myProjectInfo); + return page; + } + + /** + * 查看编辑表单 + */ + @RequiresPermissions("biz:myProjectInfo:view") + @RequestMapping(value = "form") + public String form(MyProjectInfo myProjectInfo, Model model) { + model.addAttribute("myProjectInfo", myProjectInfo); + return "modules/biz/myProjectInfoForm"; + } + + /** + * 保存数据 + */ + @RequiresPermissions("biz:myProjectInfo:edit") + @PostMapping(value = "save") + @ResponseBody + public String save(@Validated MyProjectInfo myProjectInfo) { + myProjectInfoService.save(myProjectInfo); + return renderResult(Global.TRUE, text("保存项目成功!")); + } + + /** + * 导出数据 + */ + @RequiresPermissions("biz:myProjectInfo:view") + @RequestMapping(value = "exportData") + public void exportData(MyProjectInfo myProjectInfo, HttpServletResponse response) { + List list = myProjectInfoService.findList(myProjectInfo); + String fileName = "项目" + DateUtils.getDate("yyyyMMddHHmmss") + ".xlsx"; + try(ExcelExport ee = new ExcelExport("项目", MyProjectInfo.class)){ + ee.setDataList(list).write(response, fileName); + } + } + + /** + * 下载模板 + */ + @RequiresPermissions("biz:myProjectInfo:view") + @RequestMapping(value = "importTemplate") + public void importTemplate(HttpServletResponse response) { + MyProjectInfo myProjectInfo = new MyProjectInfo(); + List list = ListUtils.newArrayList(myProjectInfo); + String fileName = "项目模板.xlsx"; + try(ExcelExport ee = new ExcelExport("项目", MyProjectInfo.class, Type.IMPORT)){ + ee.setDataList(list).write(response, fileName); + } + } + + /** + * 导入数据 + */ + @ResponseBody + @RequiresPermissions("biz:myProjectInfo:edit") + @PostMapping(value = "importData") + public String importData(MultipartFile file) { + try { + String message = myProjectInfoService.importData(file); + return renderResult(Global.TRUE, "posfull:"+message); + } catch (Exception ex) { + return renderResult(Global.FALSE, "posfull:"+ex.getMessage()); + } + } + + /** + * 删除数据 + */ + @RequiresPermissions("biz:myProjectInfo:edit") + @RequestMapping(value = "delete") + @ResponseBody + public String delete(MyProjectInfo myProjectInfo) { + myProjectInfoService.delete(myProjectInfo); + return renderResult(Global.TRUE, text("删除项目成功!")); + } + +} \ No newline at end of file diff --git a/web-api/src/main/java/com/jeesite/modules/erp/dao/ErpAccountDao.java b/web-api/src/main/java/com/jeesite/modules/erp/dao/ErpAccountDao.java new file mode 100644 index 0000000..22770e8 --- /dev/null +++ b/web-api/src/main/java/com/jeesite/modules/erp/dao/ErpAccountDao.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.ErpAccount; + +/** + * 账户信息 DAO 接口 + * @author gaoxq + * @version 2026-03-21 + */ +@MyBatisDao(dataSourceName="work") +public interface ErpAccountDao extends CrudDao { + +} \ No newline at end of file diff --git a/web-api/src/main/java/com/jeesite/modules/erp/dao/ErpCategoryDao.java b/web-api/src/main/java/com/jeesite/modules/erp/dao/ErpCategoryDao.java new file mode 100644 index 0000000..83c62ca --- /dev/null +++ b/web-api/src/main/java/com/jeesite/modules/erp/dao/ErpCategoryDao.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.ErpCategory; + +/** + * 收支分类 DAO 接口 + * @author gaoxq + * @version 2026-03-22 + */ +@MyBatisDao(dataSourceName="work") +public interface ErpCategoryDao extends CrudDao { + +} \ No newline at end of file diff --git a/web-api/src/main/java/com/jeesite/modules/erp/entity/ErpAccount.java b/web-api/src/main/java/com/jeesite/modules/erp/entity/ErpAccount.java new file mode 100644 index 0000000..640534e --- /dev/null +++ b/web-api/src/main/java/com/jeesite/modules/erp/entity/ErpAccount.java @@ -0,0 +1,71 @@ +package com.jeesite.modules.erp.entity; + +import java.io.Serializable; +import java.util.Date; + +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 com.jeesite.common.utils.excel.annotation.ExcelField; +import com.jeesite.common.utils.excel.annotation.ExcelField.Align; +import com.jeesite.common.utils.excel.annotation.ExcelFields; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; + +/** + * 账户信息 Entity + * + * @author gaoxq + * @version 2026-03-21 + */ +@EqualsAndHashCode(callSuper = true) +@Table(name = "erp_account", alias = "a", label = "账户信息", columns = { + @Column(name = "create_time", attrName = "createTime", label = "记录时间", isUpdate = false, isQuery = false, isUpdateForce = true), + @Column(name = "account_id", attrName = "accountId", label = "账户标识", isPK = true), + @Column(name = "account_name", attrName = "accountName", label = "账户名称", queryType = QueryType.LIKE), + @Column(name = "account_type", attrName = "accountType", label = "账户类型"), + @Column(name = "account_code", attrName = "accountCode", label = "账户卡号", isQuery = false), + @Column(name = "initial_balance", attrName = "initialBalance", label = "初始余额", isQuery = false), + @Column(name = "current_balance", attrName = "currentBalance", label = "当前余额", isQuery = false), + @Column(name = "is_active", attrName = "isActive", label = "是否激活"), + @Column(name = "update_time", attrName = "updateTime", label = "更新时间", isQuery = false, isUpdateForce = true), +}, orderBy = "a.account_id DESC" +) +@Data +public class ErpAccount extends DataEntity implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + private Date createTime; // 记录时间 + private String accountId; // 账户标识 + private String accountName; // 账户名称 + private String accountType; // 账户类型 + private String accountCode; // 账户卡号 + private Double initialBalance; // 初始余额 + private Double currentBalance; // 当前余额 + private String isActive; // 是否激活 + private Date updateTime; // 更新时间 + + @ExcelFields({ + @ExcelField(title = "记录时间", attrName = "createTime", align = Align.CENTER, sort = 10, dataFormat = "yyyy-MM-dd hh:mm"), + @ExcelField(title = "账户标识", attrName = "accountId", align = Align.CENTER, sort = 20), + @ExcelField(title = "账户名称", attrName = "accountName", align = Align.CENTER, sort = 30), + @ExcelField(title = "账户类型", attrName = "accountType", align = Align.CENTER, sort = 40), + @ExcelField(title = "账户卡号", attrName = "accountCode", align = Align.CENTER, sort = 50), + @ExcelField(title = "初始余额", attrName = "initialBalance", align = Align.CENTER, sort = 60), + @ExcelField(title = "当前余额", attrName = "currentBalance", align = Align.CENTER, sort = 70), + @ExcelField(title = "是否激活", attrName = "isActive", align = Align.CENTER, sort = 80), + @ExcelField(title = "更新时间", attrName = "updateTime", align = Align.CENTER, sort = 90, dataFormat = "yyyy-MM-dd hh:mm"), + }) + public ErpAccount() { + this(null); + } + + public ErpAccount(String id) { + super(id); + } + +} \ No newline at end of file diff --git a/web-api/src/main/java/com/jeesite/modules/erp/entity/ErpCategory.java b/web-api/src/main/java/com/jeesite/modules/erp/entity/ErpCategory.java new file mode 100644 index 0000000..e2debae --- /dev/null +++ b/web-api/src/main/java/com/jeesite/modules/erp/entity/ErpCategory.java @@ -0,0 +1,74 @@ +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.NotBlank; +import jakarta.validation.constraints.Size; +import jakarta.validation.constraints.NotNull; + +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 com.jeesite.common.utils.excel.annotation.ExcelField; +import com.jeesite.common.utils.excel.annotation.ExcelField.Align; +import com.jeesite.common.utils.excel.annotation.ExcelFields; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; + +/** + * 收支分类 Entity + * + * @author gaoxq + * @version 2026-03-22 + */ +@EqualsAndHashCode(callSuper = true) +@Table(name = "erp_category", alias = "a", label = "分类信息", columns = { + @Column(name = "create_time", attrName = "createTime", label = "记录时间", isUpdate = false, isQuery = false, isUpdateForce = true), + @Column(name = "category_id", attrName = "categoryId", label = "分类标识", isPK = true), + @Column(name = "parent_name", attrName = "parentName", label = "父级名称", isQuery = false), + @Column(name = "category_name", attrName = "categoryName", label = "分类名称", queryType = QueryType.LIKE), + @Column(name = "category_type", attrName = "categoryType", label = "分类类型"), + @Column(name = "sort_order", attrName = "sortOrder", label = "排序序号", isQuery = false), + @Column(name = "is_active", attrName = "isActive", label = "是否启用"), + @Column(name = "update_time", attrName = "updateTime", label = "更新时间", isQuery = false, isUpdateForce = true), +}, orderBy = "a.create_time DESC" +) +@Data +public class ErpCategory extends DataEntity implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + private Date createTime; // 记录时间 + private String categoryId; // 分类标识 + private String parentName; // 父级名称 + private String categoryName; // 分类名称 + private String categoryType; // 分类类型 + private Long sortOrder; // 排序序号 + private String isActive; // 是否启用 + private Date updateTime; // 更新时间 + + @ExcelFields({ + @ExcelField(title = "记录时间", attrName = "createTime", align = Align.CENTER, sort = 10, dataFormat = "yyyy-MM-dd hh:mm"), + @ExcelField(title = "分类标识", attrName = "categoryId", align = Align.CENTER, sort = 20), + @ExcelField(title = "父级名称", attrName = "parentName", align = Align.CENTER, sort = 30), + @ExcelField(title = "分类名称", attrName = "categoryName", align = Align.CENTER, sort = 40), + @ExcelField(title = "分类类型", attrName = "categoryType", align = Align.CENTER, sort = 50), + @ExcelField(title = "排序序号", attrName = "sortOrder", align = Align.CENTER, sort = 60), + @ExcelField(title = "是否启用", attrName = "isActive", align = Align.CENTER, sort = 70), + @ExcelField(title = "更新时间", attrName = "updateTime", align = Align.CENTER, sort = 80, dataFormat = "yyyy-MM-dd hh:mm"), + }) + public ErpCategory() { + this(null); + } + + public ErpCategory(String id) { + super(id); + } +} \ No newline at end of file diff --git a/web-api/src/main/java/com/jeesite/modules/erp/service/ErpAccountService.java b/web-api/src/main/java/com/jeesite/modules/erp/service/ErpAccountService.java new file mode 100644 index 0000000..77a1876 --- /dev/null +++ b/web-api/src/main/java/com/jeesite/modules/erp/service/ErpAccountService.java @@ -0,0 +1,134 @@ +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.ErpAccount; +import com.jeesite.modules.erp.dao.ErpAccountDao; +import com.jeesite.common.service.ServiceException; +import com.jeesite.common.config.Global; +import com.jeesite.common.validator.ValidatorUtils; +import com.jeesite.common.utils.excel.ExcelImport; +import org.springframework.web.multipart.MultipartFile; +import jakarta.validation.ConstraintViolation; +import jakarta.validation.ConstraintViolationException; + +/** + * 账户信息 Service + * @author gaoxq + * @version 2026-03-21 + */ +@Service +public class ErpAccountService extends CrudService { + + /** + * 获取单条数据 + * @param erpAccount 主键 + */ + @Override + public ErpAccount get(ErpAccount erpAccount) { + return super.get(erpAccount); + } + + /** + * 查询分页数据 + * @param erpAccount 查询条件 + * @param erpAccount page 分页对象 + */ + @Override + public Page findPage(ErpAccount erpAccount) { + return super.findPage(erpAccount); + } + + /** + * 查询列表数据 + * @param erpAccount 查询条件 + */ + @Override + public List findList(ErpAccount erpAccount) { + return super.findList(erpAccount); + } + + /** + * 保存数据(插入或更新) + * @param erpAccount 数据对象 + */ + @Override + @Transactional + public void save(ErpAccount erpAccount) { + super.save(erpAccount); + } + + /** + * 导入数据 + * @param file 导入的数据文件 + */ + @Transactional + public String importData(MultipartFile file) { + if (file == null){ + throw new ServiceException(text("请选择导入的数据文件!")); + } + int successNum = 0; int failureNum = 0; + StringBuilder successMsg = new StringBuilder(); + StringBuilder failureMsg = new StringBuilder(); + try(ExcelImport ei = new ExcelImport(file, 2, 0)){ + List list = ei.getDataList(ErpAccount.class); + for (ErpAccount erpAccount : list) { + try{ + ValidatorUtils.validateWithException(erpAccount); + this.save(erpAccount); + successNum++; + successMsg.append("
" + successNum + "、编号 " + erpAccount.getId() + " 导入成功"); + } catch (Exception e) { + failureNum++; + String msg = "
" + failureNum + "、编号 " + erpAccount.getId() + " 导入失败:"; + if (e instanceof ConstraintViolationException){ + ConstraintViolationException cve = (ConstraintViolationException)e; + for (ConstraintViolation violation : cve.getConstraintViolations()) { + msg += Global.getText(violation.getMessage()) + " ("+violation.getPropertyPath()+")"; + } + }else{ + msg += e.getMessage(); + } + failureMsg.append(msg); + logger.error(msg, e); + } + } + } catch (Exception e) { + logger.error(e.getMessage(), e); + failureMsg.append(e.getMessage()); + return failureMsg.toString(); + } + if (failureNum > 0) { + failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:"); + throw new ServiceException(failureMsg.toString()); + }else{ + successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:"); + } + return successMsg.toString(); + } + + /** + * 更新状态 + * @param erpAccount 数据对象 + */ + @Override + @Transactional + public void updateStatus(ErpAccount erpAccount) { + super.updateStatus(erpAccount); + } + + /** + * 删除数据 + * @param erpAccount 数据对象 + */ + @Override + @Transactional + public void delete(ErpAccount erpAccount) { + super.delete(erpAccount); + } + +} \ No newline at end of file diff --git a/web-api/src/main/java/com/jeesite/modules/erp/service/ErpCategoryService.java b/web-api/src/main/java/com/jeesite/modules/erp/service/ErpCategoryService.java new file mode 100644 index 0000000..538563d --- /dev/null +++ b/web-api/src/main/java/com/jeesite/modules/erp/service/ErpCategoryService.java @@ -0,0 +1,134 @@ +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.ErpCategory; +import com.jeesite.modules.erp.dao.ErpCategoryDao; +import com.jeesite.common.service.ServiceException; +import com.jeesite.common.config.Global; +import com.jeesite.common.validator.ValidatorUtils; +import com.jeesite.common.utils.excel.ExcelImport; +import org.springframework.web.multipart.MultipartFile; +import jakarta.validation.ConstraintViolation; +import jakarta.validation.ConstraintViolationException; + +/** + * 收支分类 Service + * @author gaoxq + * @version 2026-03-22 + */ +@Service +public class ErpCategoryService extends CrudService { + + /** + * 获取单条数据 + * @param erpCategory 主键 + */ + @Override + public ErpCategory get(ErpCategory erpCategory) { + return super.get(erpCategory); + } + + /** + * 查询分页数据 + * @param erpCategory 查询条件 + * @param erpCategory page 分页对象 + */ + @Override + public Page findPage(ErpCategory erpCategory) { + return super.findPage(erpCategory); + } + + /** + * 查询列表数据 + * @param erpCategory 查询条件 + */ + @Override + public List findList(ErpCategory erpCategory) { + return super.findList(erpCategory); + } + + /** + * 保存数据(插入或更新) + * @param erpCategory 数据对象 + */ + @Override + @Transactional + public void save(ErpCategory erpCategory) { + super.save(erpCategory); + } + + /** + * 导入数据 + * @param file 导入的数据文件 + */ + @Transactional + public String importData(MultipartFile file) { + if (file == null){ + throw new ServiceException(text("请选择导入的数据文件!")); + } + int successNum = 0; int failureNum = 0; + StringBuilder successMsg = new StringBuilder(); + StringBuilder failureMsg = new StringBuilder(); + try(ExcelImport ei = new ExcelImport(file, 2, 0)){ + List list = ei.getDataList(ErpCategory.class); + for (ErpCategory erpCategory : list) { + try{ + ValidatorUtils.validateWithException(erpCategory); + this.save(erpCategory); + successNum++; + successMsg.append("
" + successNum + "、编号 " + erpCategory.getId() + " 导入成功"); + } catch (Exception e) { + failureNum++; + String msg = "
" + failureNum + "、编号 " + erpCategory.getId() + " 导入失败:"; + if (e instanceof ConstraintViolationException){ + ConstraintViolationException cve = (ConstraintViolationException)e; + for (ConstraintViolation violation : cve.getConstraintViolations()) { + msg += Global.getText(violation.getMessage()) + " ("+violation.getPropertyPath()+")"; + } + }else{ + msg += e.getMessage(); + } + failureMsg.append(msg); + logger.error(msg, e); + } + } + } catch (Exception e) { + logger.error(e.getMessage(), e); + failureMsg.append(e.getMessage()); + return failureMsg.toString(); + } + if (failureNum > 0) { + failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:"); + throw new ServiceException(failureMsg.toString()); + }else{ + successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:"); + } + return successMsg.toString(); + } + + /** + * 更新状态 + * @param erpCategory 数据对象 + */ + @Override + @Transactional + public void updateStatus(ErpCategory erpCategory) { + super.updateStatus(erpCategory); + } + + /** + * 删除数据 + * @param erpCategory 数据对象 + */ + @Override + @Transactional + public void delete(ErpCategory erpCategory) { + super.delete(erpCategory); + } + +} \ No newline at end of file diff --git a/web-api/src/main/java/com/jeesite/modules/erp/web/ErpAccountController.java b/web-api/src/main/java/com/jeesite/modules/erp/web/ErpAccountController.java new file mode 100644 index 0000000..91c0c59 --- /dev/null +++ b/web-api/src/main/java/com/jeesite/modules/erp/web/ErpAccountController.java @@ -0,0 +1,157 @@ +package com.jeesite.modules.erp.web; + +import java.util.List; + +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.collect.ListUtils; +import com.jeesite.common.entity.Page; +import com.jeesite.common.lang.DateUtils; +import com.jeesite.common.utils.excel.ExcelExport; +import com.jeesite.common.utils.excel.annotation.ExcelField.Type; +import org.springframework.web.multipart.MultipartFile; +import com.jeesite.common.web.BaseController; +import com.jeesite.modules.erp.entity.ErpAccount; +import com.jeesite.modules.erp.service.ErpAccountService; + +/** + * 账户信息 Controller + * + * @author gaoxq + * @version 2026-03-21 + */ +@Controller +@RequestMapping(value = "${adminPath}/erp/account") +public class ErpAccountController extends BaseController { + + private final ErpAccountService erpAccountService; + + public ErpAccountController(ErpAccountService erpAccountService) { + this.erpAccountService = erpAccountService; + } + + /** + * 获取数据 + */ + @ModelAttribute + public ErpAccount get(String accountId, boolean isNewRecord) { + return erpAccountService.get(accountId, isNewRecord); + } + + /** + * 查询列表 + */ + @RequiresPermissions("erp:account:view") + @RequestMapping(value = {"list", ""}) + public String list(ErpAccount erpAccount, Model model) { + model.addAttribute("erpAccount", erpAccount); + return "modules/erp/erpAccountList"; + } + + /** + * 查询列表数据 + */ + @RequiresPermissions("erp:account:view") + @RequestMapping(value = "listData") + @ResponseBody + public Page listData(ErpAccount erpAccount, HttpServletRequest request, HttpServletResponse response) { + erpAccount.setPage(new Page<>(request, response)); + Page page = erpAccountService.findPage(erpAccount); + return page; + } + + /** + * 查看编辑表单 + */ + @RequiresPermissions("erp:account:view") + @RequestMapping(value = "form") + public String form(ErpAccount erpAccount, Model model) { + model.addAttribute("erpAccount", erpAccount); + return "modules/erp/erpAccountForm"; + } + + /** + * 保存数据 + */ + @RequiresPermissions("erp:account:edit") + @PostMapping(value = "save") + @ResponseBody + public String save(@Validated ErpAccount erpAccount) { + erpAccountService.save(erpAccount); + return renderResult(Global.TRUE, text("保存账户成功!")); + } + + /** + * 导出数据 + */ + @RequiresPermissions("erp:account:view") + @RequestMapping(value = "exportData") + public void exportData(ErpAccount erpAccount, HttpServletResponse response) { + List list = erpAccountService.findList(erpAccount); + String fileName = "账户" + DateUtils.getDate("yyyyMMddHHmmss") + ".xlsx"; + try (ExcelExport ee = new ExcelExport("账户", ErpAccount.class)) { + ee.setDataList(list).write(response, fileName); + } + } + + /** + * 下载模板 + */ + @RequiresPermissions("erp:account:view") + @RequestMapping(value = "importTemplate") + public void importTemplate(HttpServletResponse response) { + ErpAccount erpAccount = new ErpAccount(); + List list = ListUtils.newArrayList(erpAccount); + String fileName = "账户模板.xlsx"; + try (ExcelExport ee = new ExcelExport("账户", ErpAccount.class, Type.IMPORT)) { + ee.setDataList(list).write(response, fileName); + } + } + + /** + * 导入数据 + */ + @ResponseBody + @RequiresPermissions("erp:account:edit") + @PostMapping(value = "importData") + public String importData(MultipartFile file) { + try { + String message = erpAccountService.importData(file); + return renderResult(Global.TRUE, "posfull:" + message); + } catch (Exception ex) { + return renderResult(Global.FALSE, "posfull:" + ex.getMessage()); + } + } + + /** + * 删除数据 + */ + @RequiresPermissions("erp:account:edit") + @RequestMapping(value = "delete") + @ResponseBody + public String delete(ErpAccount erpAccount) { + erpAccountService.delete(erpAccount); + return renderResult(Global.TRUE, text("删除账户成功!")); + } + + + /** + * 列表数据 + */ + @RequestMapping(value = "listAll") + @ResponseBody + public List listAll(ErpAccount erpAccount) { + return erpAccountService.findList(erpAccount); + } +} \ No newline at end of file diff --git a/web-api/src/main/java/com/jeesite/modules/erp/web/ErpCategoryController.java b/web-api/src/main/java/com/jeesite/modules/erp/web/ErpCategoryController.java new file mode 100644 index 0000000..5c8976a --- /dev/null +++ b/web-api/src/main/java/com/jeesite/modules/erp/web/ErpCategoryController.java @@ -0,0 +1,146 @@ +package com.jeesite.modules.erp.web; + +import java.util.List; +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.collect.ListUtils; +import com.jeesite.common.entity.Page; +import com.jeesite.common.lang.DateUtils; +import com.jeesite.common.utils.excel.ExcelExport; +import com.jeesite.common.utils.excel.annotation.ExcelField.Type; +import org.springframework.web.multipart.MultipartFile; +import com.jeesite.common.web.BaseController; +import com.jeesite.modules.erp.entity.ErpCategory; +import com.jeesite.modules.erp.service.ErpCategoryService; + +/** + * 收支分类 Controller + * @author gaoxq + * @version 2026-03-22 + */ +@Controller +@RequestMapping(value = "${adminPath}/erp/category") +public class ErpCategoryController extends BaseController { + + private final ErpCategoryService erpCategoryService; + + public ErpCategoryController(ErpCategoryService erpCategoryService) { + this.erpCategoryService = erpCategoryService; + } + + /** + * 获取数据 + */ + @ModelAttribute + public ErpCategory get(String categoryId, boolean isNewRecord) { + return erpCategoryService.get(categoryId, isNewRecord); + } + + /** + * 查询列表 + */ + @RequiresPermissions("erp:category:view") + @RequestMapping(value = {"list", ""}) + public String list(ErpCategory erpCategory, Model model) { + model.addAttribute("erpCategory", erpCategory); + return "modules/erp/erpCategoryList"; + } + + /** + * 查询列表数据 + */ + @RequiresPermissions("erp:category:view") + @RequestMapping(value = "listData") + @ResponseBody + public Page listData(ErpCategory erpCategory, HttpServletRequest request, HttpServletResponse response) { + erpCategory.setPage(new Page<>(request, response)); + Page page = erpCategoryService.findPage(erpCategory); + return page; + } + + /** + * 查看编辑表单 + */ + @RequiresPermissions("erp:category:view") + @RequestMapping(value = "form") + public String form(ErpCategory erpCategory, Model model) { + model.addAttribute("erpCategory", erpCategory); + return "modules/erp/erpCategoryForm"; + } + + /** + * 保存数据 + */ + @RequiresPermissions("erp:category:edit") + @PostMapping(value = "save") + @ResponseBody + public String save(@Validated ErpCategory erpCategory) { + erpCategoryService.save(erpCategory); + return renderResult(Global.TRUE, text("保存分类成功!")); + } + + /** + * 导出数据 + */ + @RequiresPermissions("erp:category:view") + @RequestMapping(value = "exportData") + public void exportData(ErpCategory erpCategory, HttpServletResponse response) { + List list = erpCategoryService.findList(erpCategory); + String fileName = "分类" + DateUtils.getDate("yyyyMMddHHmmss") + ".xlsx"; + try(ExcelExport ee = new ExcelExport("分类", ErpCategory.class)){ + ee.setDataList(list).write(response, fileName); + } + } + + /** + * 下载模板 + */ + @RequiresPermissions("erp:category:view") + @RequestMapping(value = "importTemplate") + public void importTemplate(HttpServletResponse response) { + ErpCategory erpCategory = new ErpCategory(); + List list = ListUtils.newArrayList(erpCategory); + String fileName = "分类模板.xlsx"; + try(ExcelExport ee = new ExcelExport("分类", ErpCategory.class, Type.IMPORT)){ + ee.setDataList(list).write(response, fileName); + } + } + + /** + * 导入数据 + */ + @ResponseBody + @RequiresPermissions("erp:category:edit") + @PostMapping(value = "importData") + public String importData(MultipartFile file) { + try { + String message = erpCategoryService.importData(file); + return renderResult(Global.TRUE, "posfull:"+message); + } catch (Exception ex) { + return renderResult(Global.FALSE, "posfull:"+ex.getMessage()); + } + } + + /** + * 删除数据 + */ + @RequiresPermissions("erp:category:edit") + @RequestMapping(value = "delete") + @ResponseBody + public String delete(ErpCategory erpCategory) { + erpCategoryService.delete(erpCategory); + return renderResult(Global.TRUE, text("删除分类成功!")); + } + +} \ No newline at end of file diff --git a/web-api/src/main/resources/mappings/modules/biz/MyChartInfoDao.xml b/web-api/src/main/resources/mappings/modules/biz/MyChartInfoDao.xml new file mode 100644 index 0000000..7aa2a7b --- /dev/null +++ b/web-api/src/main/resources/mappings/modules/biz/MyChartInfoDao.xml @@ -0,0 +1,15 @@ + + + + + + + \ No newline at end of file diff --git a/web-api/src/main/resources/mappings/modules/biz/MyProjectInfoDao.xml b/web-api/src/main/resources/mappings/modules/biz/MyProjectInfoDao.xml new file mode 100644 index 0000000..d70573d --- /dev/null +++ b/web-api/src/main/resources/mappings/modules/biz/MyProjectInfoDao.xml @@ -0,0 +1,15 @@ + + + + + + + \ No newline at end of file diff --git a/web-api/src/main/resources/mappings/modules/erp/ErpAccountDao.xml b/web-api/src/main/resources/mappings/modules/erp/ErpAccountDao.xml new file mode 100644 index 0000000..91aa1d5 --- /dev/null +++ b/web-api/src/main/resources/mappings/modules/erp/ErpAccountDao.xml @@ -0,0 +1,15 @@ + + + + + + + \ No newline at end of file diff --git a/web-api/src/main/resources/mappings/modules/erp/ErpCategoryDao.xml b/web-api/src/main/resources/mappings/modules/erp/ErpCategoryDao.xml new file mode 100644 index 0000000..7b40028 --- /dev/null +++ b/web-api/src/main/resources/mappings/modules/erp/ErpCategoryDao.xml @@ -0,0 +1,15 @@ + + + + + + + \ No newline at end of file diff --git a/web-vue/packages/biz/api/biz/myChartInfo.ts b/web-vue/packages/biz/api/biz/myChartInfo.ts new file mode 100644 index 0000000..60e37be --- /dev/null +++ b/web-vue/packages/biz/api/biz/myChartInfo.ts @@ -0,0 +1,59 @@ +/** + * Copyright (c) 2013-Now https://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'; +import { UploadApiResult } from '@jeesite/core/api/sys/upload'; +import { UploadFileParams } from '@jeesite/types/axios'; +import { AxiosProgressEvent } from 'axios'; + +const { ctxPath, adminPath } = useGlobSetting(); + +export interface MyChartInfo extends BasicModel { + createTime?: string; // 记录时间 + chartId: string; // 唯一标识 + chartName?: string; // 图表名称 + chartCode?: string; // 图表编号 + sort?: number; // 序号 + vueName?: string; // 组件名称 + grid?: string; // 间距 + ustatus?: string; // 状态 + chartType?: string; // 图表类型 + itemName?: string; // 项目名称 + itemCode?: string; // 项目编号 + remark?: string; // 备注描述 + updateTime?: string; // 更新时间 +} + +export const myChartInfoList = (params?: MyChartInfo | any) => + defHttp.get({ url: adminPath + '/biz/myChartInfo/list', params }); + +export const myChartInfoListAll = (params?: MyChartInfo | any) => + defHttp.get({ url: adminPath + '/biz/myChartInfo/listAll', params }); + +export const myChartInfoListData = (params?: MyChartInfo | any) => + defHttp.post>({ url: adminPath + '/biz/myChartInfo/listData', params }); + +export const myChartInfoForm = (params?: MyChartInfo | any) => + defHttp.get({ url: adminPath + '/biz/myChartInfo/form', params }); + +export const myChartInfoSave = (params?: any, data?: MyChartInfo | any) => + defHttp.postJson({ url: adminPath + '/biz/myChartInfo/save', params, data }); + +export const myChartInfoImportData = ( + params: UploadFileParams, + onUploadProgress: (progressEvent: AxiosProgressEvent) => void, +) => + defHttp.uploadFile( + { + url: ctxPath + adminPath + '/biz/myChartInfo/importData', + onUploadProgress, + }, + params, + ); + +export const myChartInfoDelete = (params?: MyChartInfo | any) => + defHttp.get({ url: adminPath + '/biz/myChartInfo/delete', params }); diff --git a/web-vue/packages/biz/api/biz/myProjectInfo.ts b/web-vue/packages/biz/api/biz/myProjectInfo.ts new file mode 100644 index 0000000..5c87bac --- /dev/null +++ b/web-vue/packages/biz/api/biz/myProjectInfo.ts @@ -0,0 +1,59 @@ +/** + * Copyright (c) 2013-Now https://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'; +import { UploadApiResult } from '@jeesite/core/api/sys/upload'; +import { UploadFileParams } from '@jeesite/types/axios'; +import { AxiosProgressEvent } from 'axios'; + +const { ctxPath, adminPath } = useGlobSetting(); + +export interface MyProjectInfo extends BasicModel { + createTime?: string; // 记录创建时间 + projectId?: string; // 唯一主键 + projectCode: string; // 项目编码 + projectName: string; // 项目名称 + projectDesc?: string; // 项目描述 + personId: string; // 人员编号 + priority: string; // 级别 + areaLevel: string; // 区域级别 + areaCode: string; // 区域编号 + startDate?: string; // 预计开始日期 + endDate?: string; // 预计结束日期 + actualEndDate?: string; // 实际结束日期 + budget: number; // 项目预算(元) + projectType: string; // 项目类型 + projectStatus: string; // 项目状态 + updateTime?: string; // 更新时间 +} + +export const myProjectInfoList = (params?: MyProjectInfo | any) => + defHttp.get({ url: adminPath + '/biz/myProjectInfo/list', params }); + +export const myProjectInfoListData = (params?: MyProjectInfo | any) => + defHttp.post>({ url: adminPath + '/biz/myProjectInfo/listData', params }); + +export const myProjectInfoForm = (params?: MyProjectInfo | any) => + defHttp.get({ url: adminPath + '/biz/myProjectInfo/form', params }); + +export const myProjectInfoSave = (params?: any, data?: MyProjectInfo | any) => + defHttp.postJson({ url: adminPath + '/biz/myProjectInfo/save', params, data }); + +export const myProjectInfoImportData = ( + params: UploadFileParams, + onUploadProgress: (progressEvent: AxiosProgressEvent) => void, +) => + defHttp.uploadFile( + { + url: ctxPath + adminPath + '/biz/myProjectInfo/importData', + onUploadProgress, + }, + params, + ); + +export const myProjectInfoDelete = (params?: MyProjectInfo | any) => + defHttp.get({ url: adminPath + '/biz/myProjectInfo/delete', params }); diff --git a/web-vue/packages/biz/views/biz/myChartInfo/form.vue b/web-vue/packages/biz/views/biz/myChartInfo/form.vue new file mode 100644 index 0000000..7d0ae5e --- /dev/null +++ b/web-vue/packages/biz/views/biz/myChartInfo/form.vue @@ -0,0 +1,174 @@ + + + diff --git a/web-vue/packages/biz/views/biz/myChartInfo/list.vue b/web-vue/packages/biz/views/biz/myChartInfo/list.vue new file mode 100644 index 0000000..9a87e57 --- /dev/null +++ b/web-vue/packages/biz/views/biz/myChartInfo/list.vue @@ -0,0 +1,285 @@ + + + diff --git a/web-vue/packages/biz/views/biz/myChartInfo/select.ts b/web-vue/packages/biz/views/biz/myChartInfo/select.ts new file mode 100644 index 0000000..e4a3fa2 --- /dev/null +++ b/web-vue/packages/biz/views/biz/myChartInfo/select.ts @@ -0,0 +1,183 @@ +import { useI18n } from '@jeesite/core/hooks/web/useI18n'; +import { BasicColumn, BasicTableProps, FormProps } from '@jeesite/core/components/Table'; +import { myChartInfoListData } from '@jeesite/biz/api/biz/myChartInfo'; + +const { t } = useI18n('biz.myChartInfo'); + +const modalProps = { + title: t('图表选择'), +}; + +const searchForm: FormProps = { + baseColProps: { md: 8, lg: 6 }, + labelWidth: 90, + schemas: [ + { + label: t('记录时间起'), + field: 'createTime_gte', + component: 'DatePicker', + componentProps: { + format: 'YYYY-MM-DD HH:mm', + showTime: { format: 'HH:mm' }, + }, + }, + { + label: t('记录时间止'), + field: 'createTime_lte', + component: 'DatePicker', + componentProps: { + format: 'YYYY-MM-DD HH:mm', + showTime: { format: 'HH:mm' }, + }, + }, + { + label: t('图表名称'), + field: 'chartName', + component: 'Input', + }, + { + label: t('图表编号'), + field: 'chartCode', + component: 'Input', + }, + { + label: t('状态'), + field: 'ustatus', + component: 'Select', + componentProps: { + dictType: 'biz_status', + allowClear: true, + }, + }, + { + label: t('图表类型'), + field: 'chartType', + component: 'Input', + }, + { + label: t('项目编号'), + field: 'itemCode', + component: 'Input', + }, + ], +}; + +const tableColumns: BasicColumn[] = [ + { + title: t('记录时间'), + dataIndex: 'createTime', + key: 'a.create_time', + sorter: true, + width: 230, + align: 'left', + slot: 'firstColumn', + }, + { + title: t('图表名称'), + dataIndex: 'chartName', + key: 'a.chart_name', + sorter: true, + width: 130, + align: 'left', + }, + { + title: t('图表编号'), + dataIndex: 'chartCode', + key: 'a.chart_code', + sorter: true, + width: 130, + align: 'left', + }, + { + title: t('序号'), + dataIndex: 'sort', + key: 'a.sort', + sorter: true, + width: 130, + align: 'center', + }, + { + title: t('组件名称'), + dataIndex: 'vueName', + key: 'a.vue_name', + sorter: true, + width: 130, + align: 'left', + }, + { + title: t('间距'), + dataIndex: 'grid', + key: 'a.grid', + sorter: true, + width: 130, + align: 'left', + }, + { + title: t('状态'), + dataIndex: 'ustatus', + key: 'a.ustatus', + sorter: true, + width: 130, + align: 'center', + dictType: 'biz_status', + }, + { + title: t('图表类型'), + dataIndex: 'chartType', + key: 'a.chart_type', + sorter: true, + width: 130, + align: 'left', + }, + { + title: t('项目名称'), + dataIndex: 'itemName', + key: 'a.item_name', + sorter: true, + width: 130, + align: 'left', + }, + { + title: t('项目编号'), + dataIndex: 'itemCode', + key: 'a.item_code', + sorter: true, + width: 130, + align: 'left', + }, + { + title: t('备注描述'), + dataIndex: 'remark', + key: 'a.remark', + sorter: true, + width: 130, + align: 'left', + }, + { + title: t('更新时间'), + dataIndex: 'updateTime', + key: 'a.update_time', + sorter: true, + width: 130, + align: 'center', + }, +]; + +const tableProps: BasicTableProps = { + api: myChartInfoListData, + beforeFetch: (params) => { + params['isAll'] = true; + return params; + }, + columns: tableColumns, + formConfig: searchForm, + rowKey: 'chartId', +}; + +export default { + modalProps, + tableProps, + itemCode: 'chartId', + itemName: 'chartId', + isShowCode: false, +}; diff --git a/web-vue/packages/biz/views/biz/myCities/form.vue b/web-vue/packages/biz/views/biz/myCities/form.vue index 02016d0..ff7f7bd 100644 --- a/web-vue/packages/biz/views/biz/myCities/form.vue +++ b/web-vue/packages/biz/views/biz/myCities/form.vue @@ -89,9 +89,10 @@ { label: t('市区级别'), field: 'areaType', - component: 'Input', + component: 'Select', componentProps: { - maxlength: 4, + dictType: 'area_level', + allowClear: true, }, required: true, }, diff --git a/web-vue/packages/biz/views/biz/myCities/list.vue b/web-vue/packages/biz/views/biz/myCities/list.vue index 9dab089..b193468 100644 --- a/web-vue/packages/biz/views/biz/myCities/list.vue +++ b/web-vue/packages/biz/views/biz/myCities/list.vue @@ -98,7 +98,11 @@ { label: t('市区级别'), field: 'areaType', - component: 'Input', + component: 'Select', + componentProps: { + dictType: 'area_level', + allowClear: true, + }, }, { label: t('状态'), @@ -170,6 +174,7 @@ sorter: true, width: 130, align: 'left', + dictType: 'area_level', }, { title: t('更新时间'), @@ -196,16 +201,16 @@ actions: (record: MyCities) => [ { icon: 'i-clarity:note-edit-line', - title: t('编辑城市'), + title: t('编辑'), onClick: handleForm.bind(this, { cityId: record.cityId }), auth: 'biz:myCities:edit', }, { icon: 'i-ant-design:delete-outlined', color: 'error', - title: t('删除城市'), + title: t('删除'), popConfirm: { - title: t('是否确认删除城市'), + title: t('是否确认删除城市?'), confirm: handleDelete.bind(this, record), }, auth: 'biz:myCities:edit', diff --git a/web-vue/packages/biz/views/biz/myNotes/list.vue b/web-vue/packages/biz/views/biz/myNotes/list.vue index 9c8b63f..6600ade 100644 --- a/web-vue/packages/biz/views/biz/myNotes/list.vue +++ b/web-vue/packages/biz/views/biz/myNotes/list.vue @@ -266,7 +266,10 @@ const { ctxAdminPath } = useGlobSetting(); await downloadByUrl({ url: ctxAdminPath + '/biz/myNotes/exportData', - params: getForm().getFieldsValue(), + params: { + ...getForm().getFieldsValue(), + createUser: userinfo.value.loginCode, + }, }); loading.value = false; } diff --git a/web-vue/packages/biz/views/biz/myProjectInfo/form.vue b/web-vue/packages/biz/views/biz/myProjectInfo/form.vue new file mode 100644 index 0000000..9972869 --- /dev/null +++ b/web-vue/packages/biz/views/biz/myProjectInfo/form.vue @@ -0,0 +1,235 @@ + + + diff --git a/web-vue/packages/biz/views/biz/myProjectInfo/list.vue b/web-vue/packages/biz/views/biz/myProjectInfo/list.vue new file mode 100644 index 0000000..5f7ef13 --- /dev/null +++ b/web-vue/packages/biz/views/biz/myProjectInfo/list.vue @@ -0,0 +1,328 @@ + + + diff --git a/web-vue/packages/biz/views/biz/myProjectInfo/select.ts b/web-vue/packages/biz/views/biz/myProjectInfo/select.ts new file mode 100644 index 0000000..b480791 --- /dev/null +++ b/web-vue/packages/biz/views/biz/myProjectInfo/select.ts @@ -0,0 +1,200 @@ +import { useI18n } from '@jeesite/core/hooks/web/useI18n'; +import { BasicColumn, BasicTableProps, FormProps } from '@jeesite/core/components/Table'; +import { myProjectInfoListData } from '@jeesite/biz/api/biz/myProjectInfo'; + +const { t } = useI18n('biz.myProjectInfo'); + +const modalProps = { + title: t('项目选择'), +}; + +const searchForm: FormProps = { + baseColProps: { md: 8, lg: 6 }, + labelWidth: 90, + schemas: [ + { + label: t('记录创建时间起'), + field: 'createTime_gte', + component: 'DatePicker', + componentProps: { + format: 'YYYY-MM-DD HH:mm', + showTime: { format: 'HH:mm' }, + }, + }, + { + label: t('记录创建时间止'), + field: 'createTime_lte', + component: 'DatePicker', + componentProps: { + format: 'YYYY-MM-DD HH:mm', + showTime: { format: 'HH:mm' }, + }, + }, + { + label: t('项目名称'), + field: 'projectName', + component: 'Input', + }, + { + label: t('人员编号'), + field: 'personId', + component: 'Input', + }, + { + label: t('区域级别'), + field: 'areaLevel', + component: 'Input', + }, + { + label: t('区域编号'), + field: 'areaId', + component: 'Input', + }, + { + label: t('项目状态'), + field: 'projectStatus', + component: 'Select', + componentProps: { + dictType: '', + allowClear: true, + }, + }, + ], +}; + +const tableColumns: BasicColumn[] = [ + { + title: t('记录创建时间'), + dataIndex: 'createTime', + key: 'a.create_time', + sorter: true, + width: 230, + align: 'left', + slot: 'firstColumn', + }, + { + title: t('项目编码'), + dataIndex: 'projectCode', + key: 'a.project_code', + sorter: true, + width: 130, + align: 'left', + }, + { + title: t('项目名称'), + dataIndex: 'projectName', + key: 'a.project_name', + sorter: true, + width: 130, + align: 'left', + }, + { + title: t('项目描述'), + dataIndex: 'projectDesc', + key: 'a.project_desc', + sorter: true, + width: 130, + align: 'left', + }, + { + title: t('人员编号'), + dataIndex: 'personId', + key: 'a.person_id', + sorter: true, + width: 130, + align: 'left', + }, + { + title: t('区域级别'), + dataIndex: 'areaLevel', + key: 'a.area_level', + sorter: true, + width: 130, + align: 'left', + }, + { + title: t('区域编号'), + dataIndex: 'areaId', + key: 'a.area_id', + sorter: true, + width: 130, + align: 'left', + }, + { + title: t('预计开始日期'), + dataIndex: 'startDate', + key: 'a.start_date', + sorter: true, + width: 130, + align: 'center', + }, + { + title: t('预计结束日期'), + dataIndex: 'endDate', + key: 'a.end_date', + sorter: true, + width: 130, + align: 'center', + }, + { + title: t('实际结束日期'), + dataIndex: 'actualEndDate', + key: 'a.actual_end_date', + sorter: true, + width: 130, + align: 'center', + }, + { + title: t('项目预算'), + dataIndex: 'budget', + key: 'a.budget', + sorter: true, + width: 130, + align: 'right', + }, + { + title: t('项目类型'), + dataIndex: 'projectType', + key: 'a.project_type', + sorter: true, + width: 130, + align: 'left', + dictType: '', + }, + { + title: t('项目状态'), + dataIndex: 'projectStatus', + key: 'a.project_status', + sorter: true, + width: 130, + align: 'left', + dictType: '', + }, + { + title: t('更新时间'), + dataIndex: 'updateTime', + key: 'a.update_time', + sorter: true, + width: 130, + align: 'center', + }, +]; + +const tableProps: BasicTableProps = { + api: myProjectInfoListData, + beforeFetch: (params) => { + params['isAll'] = true; + return params; + }, + columns: tableColumns, + formConfig: searchForm, + rowKey: 'projectId', +}; + +export default { + modalProps, + tableProps, + itemCode: 'projectId', + itemName: 'projectId', + isShowCode: false, +}; diff --git a/web-vue/packages/biz/views/biz/myWebsiteStorage/list.vue b/web-vue/packages/biz/views/biz/myWebsiteStorage/list.vue index ef6df53..269d115 100644 --- a/web-vue/packages/biz/views/biz/myWebsiteStorage/list.vue +++ b/web-vue/packages/biz/views/biz/myWebsiteStorage/list.vue @@ -210,7 +210,10 @@ const { ctxAdminPath } = useGlobSetting(); await downloadByUrl({ url: ctxAdminPath + '/biz/myWebsiteStorage/exportData', - params: getForm().getFieldsValue(), + params: { + ...getForm().getFieldsValue(), + loginUser: userinfo.value.loginCode, + }, }); loading.value = false; } diff --git a/web-vue/packages/biz/views/biz/myPerson/select.ts b/web-vue/packages/core/components/ListSelect/src/selectType/bizPersonSelect.ts similarity index 69% rename from web-vue/packages/biz/views/biz/myPerson/select.ts rename to web-vue/packages/core/components/ListSelect/src/selectType/bizPersonSelect.ts index 9b173dd..36cf0a7 100644 --- a/web-vue/packages/biz/views/biz/myPerson/select.ts +++ b/web-vue/packages/core/components/ListSelect/src/selectType/bizPersonSelect.ts @@ -12,34 +12,11 @@ const searchForm: FormProps = { baseColProps: { md: 8, lg: 6 }, labelWidth: 90, schemas: [ - { - label: t('记录时间起'), - field: 'createTime_gte', - component: 'DatePicker', - componentProps: { - format: 'YYYY-MM-DD HH:mm', - showTime: { format: 'HH:mm' }, - }, - }, - { - label: t('记录时间止'), - field: 'createTime_lte', - component: 'DatePicker', - componentProps: { - format: 'YYYY-MM-DD HH:mm', - showTime: { format: 'HH:mm' }, - }, - }, { label: t('姓名'), field: 'personName', component: 'Input', }, - { - label: t('性别'), - field: 'gender', - component: 'Input', - }, { label: t('身份证号'), field: 'idCard', @@ -50,16 +27,7 @@ const searchForm: FormProps = { field: 'ustatus', component: 'Select', componentProps: { - dictType: '', - allowClear: true, - }, - }, - { - label: t('公司编号'), - field: 'companyId', - component: 'Select', - componentProps: { - dictType: '', + dictType: 'biz_status', allowClear: true, }, }, @@ -72,9 +40,9 @@ const tableColumns: BasicColumn[] = [ dataIndex: 'createTime', key: 'a.create_time', sorter: true, - width: 230, - align: 'left', - slot: 'firstColumn', + width: 150, + align: 'center', + fixed: 'left', }, { title: t('姓名'), @@ -91,6 +59,7 @@ const tableColumns: BasicColumn[] = [ sorter: true, width: 130, align: 'left', + dictType: 'sys_user_sex', }, { title: t('身份证号'), @@ -121,7 +90,7 @@ const tableColumns: BasicColumn[] = [ dataIndex: 'birthDate', key: 'a.birth_date', sorter: true, - width: 130, + width: 150, align: 'center', }, { @@ -155,24 +124,7 @@ const tableColumns: BasicColumn[] = [ sorter: true, width: 130, align: 'left', - dictType: '', - }, - { - title: t('公司编号'), - dataIndex: 'companyId', - key: 'a.company_id', - sorter: true, - width: 130, - align: 'left', - dictType: '', - }, - { - title: t('更新时间'), - dataIndex: 'updateTime', - key: 'a.update_time', - sorter: true, - width: 130, - align: 'center', + dictType: 'biz_status', }, ]; @@ -191,6 +143,6 @@ export default { modalProps, tableProps, itemCode: 'personId', - itemName: 'personId', - isShowCode: false, + itemName: 'personName', + isShowCode: true, }; diff --git a/web-vue/packages/biz/views/biz/myScreenInfo/select.ts b/web-vue/packages/core/components/ListSelect/src/selectType/bizScreenSelect.ts similarity index 69% rename from web-vue/packages/biz/views/biz/myScreenInfo/select.ts rename to web-vue/packages/core/components/ListSelect/src/selectType/bizScreenSelect.ts index 5309173..ebd0f58 100644 --- a/web-vue/packages/biz/views/biz/myScreenInfo/select.ts +++ b/web-vue/packages/core/components/ListSelect/src/selectType/bizScreenSelect.ts @@ -12,24 +12,6 @@ const searchForm: FormProps = { baseColProps: { md: 8, lg: 6 }, labelWidth: 90, schemas: [ - { - label: t('记录时间起'), - field: 'createTime_gte', - component: 'DatePicker', - componentProps: { - format: 'YYYY-MM-DD HH:mm', - showTime: { format: 'HH:mm' }, - }, - }, - { - label: t('记录时间止'), - field: 'createTime_lte', - component: 'DatePicker', - componentProps: { - format: 'YYYY-MM-DD HH:mm', - showTime: { format: 'HH:mm' }, - }, - }, { label: t('大屏名称'), field: 'screenName', @@ -40,16 +22,6 @@ const searchForm: FormProps = { field: 'screenCode', component: 'Input', }, - { - label: t('大屏标题'), - field: 'screenTitle', - component: 'Input', - }, - { - label: t('路由地址'), - field: 'path', - component: 'Input', - }, { label: t('状态'), field: 'ustatus', @@ -68,9 +40,9 @@ const tableColumns: BasicColumn[] = [ dataIndex: 'createTime', key: 'a.create_time', sorter: true, - width: 230, - align: 'left', - slot: 'firstColumn', + width: 150, + align: 'center', + fixed: 'left', }, { title: t('大屏名称'), @@ -96,14 +68,6 @@ const tableColumns: BasicColumn[] = [ width: 130, align: 'left', }, - { - title: t('路由地址'), - dataIndex: 'path', - key: 'a.path', - sorter: true, - width: 130, - align: 'left', - }, { title: t('说明描述'), dataIndex: 'remark', @@ -126,7 +90,7 @@ const tableColumns: BasicColumn[] = [ dataIndex: 'updateTime', key: 'a.update_time', sorter: true, - width: 130, + width: 150, align: 'center', }, ]; @@ -139,13 +103,13 @@ const tableProps: BasicTableProps = { }, columns: tableColumns, formConfig: searchForm, - rowKey: 'screenId', + rowKey: 'screenCode', }; export default { modalProps, tableProps, - itemCode: 'screenId', - itemName: 'screenId', - isShowCode: false, + itemCode: 'screenCode', + itemName: 'screenTitle', + isShowCode: true, }; diff --git a/web-vue/packages/core/layouts/screen/index.vue b/web-vue/packages/core/layouts/screen/index.vue index 3f22ed1..68ee9e0 100644 --- a/web-vue/packages/core/layouts/screen/index.vue +++ b/web-vue/packages/core/layouts/screen/index.vue @@ -6,13 +6,6 @@
-
- 首页 -
{ }; const isHome = computed(() => { - return route.path === '/bigScreen' || route.path === '/'; + return route.path === '/bigScreen/home' || route.path === '/'; }); -const goHome = () => { - screenTitle.value = HOME_TITLE; - router.push('/bigScreen/home').catch(() => {}); -}; - const isCurrentTab = (routePath) => { return route.path === routePath; }; diff --git a/web-vue/packages/core/layouts/views/screen/setting/components/Erp.vue b/web-vue/packages/core/layouts/views/screen/setting/components/Erp.vue index 57a6939..75e65de 100644 --- a/web-vue/packages/core/layouts/views/screen/setting/components/Erp.vue +++ b/web-vue/packages/core/layouts/views/screen/setting/components/Erp.vue @@ -211,10 +211,10 @@
- + + \ No newline at end of file diff --git a/web-vue/packages/core/layouts/views/screen/welcome/Erp/components/ChartV01.vue b/web-vue/packages/core/layouts/views/screen/welcome/Erp/components/ChartV01.vue new file mode 100644 index 0000000..79db94c --- /dev/null +++ b/web-vue/packages/core/layouts/views/screen/welcome/Erp/components/ChartV01.vue @@ -0,0 +1,300 @@ + + + + + \ No newline at end of file diff --git a/web-vue/packages/core/layouts/views/screen/welcome/Erp/components/ChartV02.vue b/web-vue/packages/core/layouts/views/screen/welcome/Erp/components/ChartV02.vue new file mode 100644 index 0000000..879a955 --- /dev/null +++ b/web-vue/packages/core/layouts/views/screen/welcome/Erp/components/ChartV02.vue @@ -0,0 +1,240 @@ + + + + + \ No newline at end of file diff --git a/web-vue/packages/core/layouts/views/screen/welcome/Erp/components/ChartV03.vue b/web-vue/packages/core/layouts/views/screen/welcome/Erp/components/ChartV03.vue new file mode 100644 index 0000000..efa082c --- /dev/null +++ b/web-vue/packages/core/layouts/views/screen/welcome/Erp/components/ChartV03.vue @@ -0,0 +1,287 @@ + + + + + \ No newline at end of file diff --git a/web-vue/packages/core/layouts/views/screen/welcome/Erp/components/ChartV04.vue b/web-vue/packages/core/layouts/views/screen/welcome/Erp/components/ChartV04.vue new file mode 100644 index 0000000..60672dd --- /dev/null +++ b/web-vue/packages/core/layouts/views/screen/welcome/Erp/components/ChartV04.vue @@ -0,0 +1,228 @@ + + + + + \ No newline at end of file diff --git a/web-vue/packages/core/layouts/views/screen/welcome/Erp/components/ChartV05.vue b/web-vue/packages/core/layouts/views/screen/welcome/Erp/components/ChartV05.vue new file mode 100644 index 0000000..3cf706d --- /dev/null +++ b/web-vue/packages/core/layouts/views/screen/welcome/Erp/components/ChartV05.vue @@ -0,0 +1,228 @@ + + + + + \ No newline at end of file diff --git a/web-vue/packages/core/layouts/views/screen/welcome/Erp/components/ChartV06.vue b/web-vue/packages/core/layouts/views/screen/welcome/Erp/components/ChartV06.vue new file mode 100644 index 0000000..7a5c7ca --- /dev/null +++ b/web-vue/packages/core/layouts/views/screen/welcome/Erp/components/ChartV06.vue @@ -0,0 +1,318 @@ + + + + + \ No newline at end of file diff --git a/web-vue/packages/core/layouts/views/screen/welcome/Erp/components/ChartV07.vue b/web-vue/packages/core/layouts/views/screen/welcome/Erp/components/ChartV07.vue new file mode 100644 index 0000000..6bb65aa --- /dev/null +++ b/web-vue/packages/core/layouts/views/screen/welcome/Erp/components/ChartV07.vue @@ -0,0 +1,208 @@ + + + + + \ No newline at end of file diff --git a/web-vue/packages/core/layouts/views/screen/welcome/Erp/components/ChartV08.vue b/web-vue/packages/core/layouts/views/screen/welcome/Erp/components/ChartV08.vue new file mode 100644 index 0000000..1b623ca --- /dev/null +++ b/web-vue/packages/core/layouts/views/screen/welcome/Erp/components/ChartV08.vue @@ -0,0 +1,286 @@ + + + + + \ No newline at end of file diff --git a/web-vue/packages/core/layouts/views/screen/welcome/Erp/components/ChartV09.vue b/web-vue/packages/core/layouts/views/screen/welcome/Erp/components/ChartV09.vue new file mode 100644 index 0000000..34035a6 --- /dev/null +++ b/web-vue/packages/core/layouts/views/screen/welcome/Erp/components/ChartV09.vue @@ -0,0 +1,416 @@ + + + + + \ No newline at end of file diff --git a/web-vue/packages/core/layouts/views/screen/welcome/Erp/components/ChartV10.vue b/web-vue/packages/core/layouts/views/screen/welcome/Erp/components/ChartV10.vue new file mode 100644 index 0000000..a702681 --- /dev/null +++ b/web-vue/packages/core/layouts/views/screen/welcome/Erp/components/ChartV10.vue @@ -0,0 +1,246 @@ + + + + + \ No newline at end of file diff --git a/web-vue/packages/core/layouts/views/screen/welcome/Erp/components/ChartV11.vue b/web-vue/packages/core/layouts/views/screen/welcome/Erp/components/ChartV11.vue new file mode 100644 index 0000000..b06347e --- /dev/null +++ b/web-vue/packages/core/layouts/views/screen/welcome/Erp/components/ChartV11.vue @@ -0,0 +1,246 @@ + + + + + \ No newline at end of file diff --git a/web-vue/packages/core/layouts/views/screen/welcome/Erp/components/detail/indexV01.vue b/web-vue/packages/core/layouts/views/screen/welcome/Erp/components/detail/indexV01.vue new file mode 100644 index 0000000..9d50734 --- /dev/null +++ b/web-vue/packages/core/layouts/views/screen/welcome/Erp/components/detail/indexV01.vue @@ -0,0 +1,550 @@ + + + + + + + \ No newline at end of file diff --git a/web-vue/packages/core/layouts/views/screen/welcome/Erp/index.vue b/web-vue/packages/core/layouts/views/screen/welcome/Erp/index.vue index 02409e3..6a5f7db 100644 --- a/web-vue/packages/core/layouts/views/screen/welcome/Erp/index.vue +++ b/web-vue/packages/core/layouts/views/screen/welcome/Erp/index.vue @@ -1,8 +1,367 @@ - - \ No newline at end of file diff --git a/web-vue/packages/core/layouts/views/screen/welcome/Home/components/ChartTop.vue b/web-vue/packages/core/layouts/views/screen/welcome/Home/components/ChartTop.vue new file mode 100644 index 0000000..53cd087 --- /dev/null +++ b/web-vue/packages/core/layouts/views/screen/welcome/Home/components/ChartTop.vue @@ -0,0 +1,215 @@ + + + + + \ No newline at end of file diff --git a/web-vue/packages/core/layouts/views/screen/welcome/Home/components/ChartV01.vue b/web-vue/packages/core/layouts/views/screen/welcome/Home/components/ChartV01.vue new file mode 100644 index 0000000..e01a986 --- /dev/null +++ b/web-vue/packages/core/layouts/views/screen/welcome/Home/components/ChartV01.vue @@ -0,0 +1,49 @@ + + + + + \ No newline at end of file diff --git a/web-vue/packages/core/layouts/views/screen/welcome/Home/components/ChartV02.vue b/web-vue/packages/core/layouts/views/screen/welcome/Home/components/ChartV02.vue new file mode 100644 index 0000000..c2b5355 --- /dev/null +++ b/web-vue/packages/core/layouts/views/screen/welcome/Home/components/ChartV02.vue @@ -0,0 +1,49 @@ + + + + + \ No newline at end of file diff --git a/web-vue/packages/core/layouts/views/screen/welcome/Home/components/ChartV03.vue b/web-vue/packages/core/layouts/views/screen/welcome/Home/components/ChartV03.vue new file mode 100644 index 0000000..d3085d9 --- /dev/null +++ b/web-vue/packages/core/layouts/views/screen/welcome/Home/components/ChartV03.vue @@ -0,0 +1,49 @@ + + + + + \ No newline at end of file diff --git a/web-vue/packages/core/layouts/views/screen/welcome/Home/components/ChartV04.vue b/web-vue/packages/core/layouts/views/screen/welcome/Home/components/ChartV04.vue new file mode 100644 index 0000000..bc8e3b2 --- /dev/null +++ b/web-vue/packages/core/layouts/views/screen/welcome/Home/components/ChartV04.vue @@ -0,0 +1,47 @@ + + + + + \ No newline at end of file diff --git a/web-vue/packages/core/layouts/views/screen/welcome/Home/components/ChartV05.vue b/web-vue/packages/core/layouts/views/screen/welcome/Home/components/ChartV05.vue new file mode 100644 index 0000000..cd176b8 --- /dev/null +++ b/web-vue/packages/core/layouts/views/screen/welcome/Home/components/ChartV05.vue @@ -0,0 +1,47 @@ + + + + + \ No newline at end of file diff --git a/web-vue/packages/core/layouts/views/screen/welcome/Home/components/ChartV06.vue b/web-vue/packages/core/layouts/views/screen/welcome/Home/components/ChartV06.vue new file mode 100644 index 0000000..02ac4f4 --- /dev/null +++ b/web-vue/packages/core/layouts/views/screen/welcome/Home/components/ChartV06.vue @@ -0,0 +1,47 @@ + + + + + \ No newline at end of file diff --git a/web-vue/packages/core/layouts/views/screen/welcome/Home/components/ChartV07.vue b/web-vue/packages/core/layouts/views/screen/welcome/Home/components/ChartV07.vue new file mode 100644 index 0000000..66202e7 --- /dev/null +++ b/web-vue/packages/core/layouts/views/screen/welcome/Home/components/ChartV07.vue @@ -0,0 +1,47 @@ + + + + + \ No newline at end of file diff --git a/web-vue/packages/core/layouts/views/screen/welcome/Home/components/ChartV08.vue b/web-vue/packages/core/layouts/views/screen/welcome/Home/components/ChartV08.vue new file mode 100644 index 0000000..6226b51 --- /dev/null +++ b/web-vue/packages/core/layouts/views/screen/welcome/Home/components/ChartV08.vue @@ -0,0 +1,47 @@ + + + + + \ No newline at end of file diff --git a/web-vue/packages/core/layouts/views/screen/welcome/Home/components/ChartV09.vue b/web-vue/packages/core/layouts/views/screen/welcome/Home/components/ChartV09.vue new file mode 100644 index 0000000..1a388c4 --- /dev/null +++ b/web-vue/packages/core/layouts/views/screen/welcome/Home/components/ChartV09.vue @@ -0,0 +1,47 @@ + + + + + \ No newline at end of file diff --git a/web-vue/packages/core/layouts/views/screen/welcome/Home/components/ChartV10.vue b/web-vue/packages/core/layouts/views/screen/welcome/Home/components/ChartV10.vue new file mode 100644 index 0000000..efd539d --- /dev/null +++ b/web-vue/packages/core/layouts/views/screen/welcome/Home/components/ChartV10.vue @@ -0,0 +1,47 @@ + + + + + \ No newline at end of file diff --git a/web-vue/packages/core/layouts/views/screen/welcome/Home/index.vue b/web-vue/packages/core/layouts/views/screen/welcome/Home/index.vue index 8e3cc81..47dfcdb 100644 --- a/web-vue/packages/core/layouts/views/screen/welcome/Home/index.vue +++ b/web-vue/packages/core/layouts/views/screen/welcome/Home/index.vue @@ -1,9 +1,281 @@ - - + \ No newline at end of file diff --git a/web-vue/packages/core/layouts/views/screen/welcome/Sys/components/ChartTop.vue b/web-vue/packages/core/layouts/views/screen/welcome/Sys/components/ChartTop.vue new file mode 100644 index 0000000..7072dd2 --- /dev/null +++ b/web-vue/packages/core/layouts/views/screen/welcome/Sys/components/ChartTop.vue @@ -0,0 +1,215 @@ + + + + + \ No newline at end of file diff --git a/web-vue/packages/core/layouts/views/screen/welcome/Sys/components/ChartV01.vue b/web-vue/packages/core/layouts/views/screen/welcome/Sys/components/ChartV01.vue new file mode 100644 index 0000000..875dd10 --- /dev/null +++ b/web-vue/packages/core/layouts/views/screen/welcome/Sys/components/ChartV01.vue @@ -0,0 +1,47 @@ + + + + + \ No newline at end of file diff --git a/web-vue/packages/core/layouts/views/screen/welcome/Sys/components/ChartV02.vue b/web-vue/packages/core/layouts/views/screen/welcome/Sys/components/ChartV02.vue new file mode 100644 index 0000000..d4345f4 --- /dev/null +++ b/web-vue/packages/core/layouts/views/screen/welcome/Sys/components/ChartV02.vue @@ -0,0 +1,47 @@ + + + + + \ No newline at end of file diff --git a/web-vue/packages/core/layouts/views/screen/welcome/Sys/components/ChartV03.vue b/web-vue/packages/core/layouts/views/screen/welcome/Sys/components/ChartV03.vue new file mode 100644 index 0000000..28b8d5a --- /dev/null +++ b/web-vue/packages/core/layouts/views/screen/welcome/Sys/components/ChartV03.vue @@ -0,0 +1,47 @@ + + + + + \ No newline at end of file diff --git a/web-vue/packages/core/layouts/views/screen/welcome/Sys/components/ChartV04.vue b/web-vue/packages/core/layouts/views/screen/welcome/Sys/components/ChartV04.vue new file mode 100644 index 0000000..7d97d3c --- /dev/null +++ b/web-vue/packages/core/layouts/views/screen/welcome/Sys/components/ChartV04.vue @@ -0,0 +1,47 @@ + + + + + \ No newline at end of file diff --git a/web-vue/packages/core/layouts/views/screen/welcome/Sys/components/ChartV05.vue b/web-vue/packages/core/layouts/views/screen/welcome/Sys/components/ChartV05.vue new file mode 100644 index 0000000..59de0d2 --- /dev/null +++ b/web-vue/packages/core/layouts/views/screen/welcome/Sys/components/ChartV05.vue @@ -0,0 +1,47 @@ + + + + + \ No newline at end of file diff --git a/web-vue/packages/core/layouts/views/screen/welcome/Sys/components/ChartV06.vue b/web-vue/packages/core/layouts/views/screen/welcome/Sys/components/ChartV06.vue new file mode 100644 index 0000000..f695a10 --- /dev/null +++ b/web-vue/packages/core/layouts/views/screen/welcome/Sys/components/ChartV06.vue @@ -0,0 +1,47 @@ + + + + + \ No newline at end of file diff --git a/web-vue/packages/core/layouts/views/screen/welcome/Sys/components/ChartV07.vue b/web-vue/packages/core/layouts/views/screen/welcome/Sys/components/ChartV07.vue new file mode 100644 index 0000000..ae566bf --- /dev/null +++ b/web-vue/packages/core/layouts/views/screen/welcome/Sys/components/ChartV07.vue @@ -0,0 +1,47 @@ + + + + + \ No newline at end of file diff --git a/web-vue/packages/core/layouts/views/screen/welcome/Sys/components/ChartV08.vue b/web-vue/packages/core/layouts/views/screen/welcome/Sys/components/ChartV08.vue new file mode 100644 index 0000000..a2e24a8 --- /dev/null +++ b/web-vue/packages/core/layouts/views/screen/welcome/Sys/components/ChartV08.vue @@ -0,0 +1,47 @@ + + + + + \ No newline at end of file diff --git a/web-vue/packages/core/layouts/views/screen/welcome/Sys/components/ChartV09.vue b/web-vue/packages/core/layouts/views/screen/welcome/Sys/components/ChartV09.vue new file mode 100644 index 0000000..1497837 --- /dev/null +++ b/web-vue/packages/core/layouts/views/screen/welcome/Sys/components/ChartV09.vue @@ -0,0 +1,47 @@ + + + + + \ No newline at end of file diff --git a/web-vue/packages/core/layouts/views/screen/welcome/Sys/components/ChartV10.vue b/web-vue/packages/core/layouts/views/screen/welcome/Sys/components/ChartV10.vue new file mode 100644 index 0000000..7babe43 --- /dev/null +++ b/web-vue/packages/core/layouts/views/screen/welcome/Sys/components/ChartV10.vue @@ -0,0 +1,47 @@ + + + + + \ No newline at end of file diff --git a/web-vue/packages/core/layouts/views/screen/welcome/Sys/index.vue b/web-vue/packages/core/layouts/views/screen/welcome/Sys/index.vue index 48d48ea..86eae55 100644 --- a/web-vue/packages/core/layouts/views/screen/welcome/Sys/index.vue +++ b/web-vue/packages/core/layouts/views/screen/welcome/Sys/index.vue @@ -1,8 +1,272 @@ - - + \ No newline at end of file diff --git a/web-vue/packages/core/layouts/views/screen/welcome/Work/components/ChartTop.vue b/web-vue/packages/core/layouts/views/screen/welcome/Work/components/ChartTop.vue new file mode 100644 index 0000000..0983115 --- /dev/null +++ b/web-vue/packages/core/layouts/views/screen/welcome/Work/components/ChartTop.vue @@ -0,0 +1,215 @@ + + + + + \ No newline at end of file diff --git a/web-vue/packages/core/layouts/views/screen/welcome/Work/components/ChartV01.vue b/web-vue/packages/core/layouts/views/screen/welcome/Work/components/ChartV01.vue new file mode 100644 index 0000000..875dd10 --- /dev/null +++ b/web-vue/packages/core/layouts/views/screen/welcome/Work/components/ChartV01.vue @@ -0,0 +1,47 @@ + + + + + \ No newline at end of file diff --git a/web-vue/packages/core/layouts/views/screen/welcome/Work/components/ChartV02.vue b/web-vue/packages/core/layouts/views/screen/welcome/Work/components/ChartV02.vue new file mode 100644 index 0000000..d4345f4 --- /dev/null +++ b/web-vue/packages/core/layouts/views/screen/welcome/Work/components/ChartV02.vue @@ -0,0 +1,47 @@ + + + + + \ No newline at end of file diff --git a/web-vue/packages/core/layouts/views/screen/welcome/Work/components/ChartV03.vue b/web-vue/packages/core/layouts/views/screen/welcome/Work/components/ChartV03.vue new file mode 100644 index 0000000..28b8d5a --- /dev/null +++ b/web-vue/packages/core/layouts/views/screen/welcome/Work/components/ChartV03.vue @@ -0,0 +1,47 @@ + + + + + \ No newline at end of file diff --git a/web-vue/packages/core/layouts/views/screen/welcome/Work/components/ChartV04.vue b/web-vue/packages/core/layouts/views/screen/welcome/Work/components/ChartV04.vue new file mode 100644 index 0000000..7d97d3c --- /dev/null +++ b/web-vue/packages/core/layouts/views/screen/welcome/Work/components/ChartV04.vue @@ -0,0 +1,47 @@ + + + + + \ No newline at end of file diff --git a/web-vue/packages/core/layouts/views/screen/welcome/Work/components/ChartV05.vue b/web-vue/packages/core/layouts/views/screen/welcome/Work/components/ChartV05.vue new file mode 100644 index 0000000..59de0d2 --- /dev/null +++ b/web-vue/packages/core/layouts/views/screen/welcome/Work/components/ChartV05.vue @@ -0,0 +1,47 @@ + + + + + \ No newline at end of file diff --git a/web-vue/packages/core/layouts/views/screen/welcome/Work/components/ChartV06.vue b/web-vue/packages/core/layouts/views/screen/welcome/Work/components/ChartV06.vue new file mode 100644 index 0000000..f695a10 --- /dev/null +++ b/web-vue/packages/core/layouts/views/screen/welcome/Work/components/ChartV06.vue @@ -0,0 +1,47 @@ + + + + + \ No newline at end of file diff --git a/web-vue/packages/core/layouts/views/screen/welcome/Work/components/ChartV07.vue b/web-vue/packages/core/layouts/views/screen/welcome/Work/components/ChartV07.vue new file mode 100644 index 0000000..ae566bf --- /dev/null +++ b/web-vue/packages/core/layouts/views/screen/welcome/Work/components/ChartV07.vue @@ -0,0 +1,47 @@ + + + + + \ No newline at end of file diff --git a/web-vue/packages/core/layouts/views/screen/welcome/Work/components/ChartV08.vue b/web-vue/packages/core/layouts/views/screen/welcome/Work/components/ChartV08.vue new file mode 100644 index 0000000..a2e24a8 --- /dev/null +++ b/web-vue/packages/core/layouts/views/screen/welcome/Work/components/ChartV08.vue @@ -0,0 +1,47 @@ + + + + + \ No newline at end of file diff --git a/web-vue/packages/core/layouts/views/screen/welcome/Work/components/ChartV09.vue b/web-vue/packages/core/layouts/views/screen/welcome/Work/components/ChartV09.vue new file mode 100644 index 0000000..1497837 --- /dev/null +++ b/web-vue/packages/core/layouts/views/screen/welcome/Work/components/ChartV09.vue @@ -0,0 +1,47 @@ + + + + + \ No newline at end of file diff --git a/web-vue/packages/core/layouts/views/screen/welcome/Work/components/ChartV10.vue b/web-vue/packages/core/layouts/views/screen/welcome/Work/components/ChartV10.vue new file mode 100644 index 0000000..7babe43 --- /dev/null +++ b/web-vue/packages/core/layouts/views/screen/welcome/Work/components/ChartV10.vue @@ -0,0 +1,47 @@ + + + + + \ No newline at end of file diff --git a/web-vue/packages/core/layouts/views/screen/welcome/Work/index.vue b/web-vue/packages/core/layouts/views/screen/welcome/Work/index.vue index 02409e3..d7b0fcb 100644 --- a/web-vue/packages/core/layouts/views/screen/welcome/Work/index.vue +++ b/web-vue/packages/core/layouts/views/screen/welcome/Work/index.vue @@ -1,8 +1,329 @@ - - \ No newline at end of file diff --git a/web-vue/packages/core/utils/desensitize.ts b/web-vue/packages/core/utils/desensitize.ts new file mode 100644 index 0000000..5aff42b --- /dev/null +++ b/web-vue/packages/core/utils/desensitize.ts @@ -0,0 +1,44 @@ +/** + * 全局数据脱敏工具函数 + * 支持:姓名、手机、身份证、银行卡、邮箱 + */ + +/** + * 姓名脱敏 + */ +export function desensitizeName(value: string | null | undefined): string { + if (!value || value.length <= 1) return value || '' + return value.charAt(0) + '*' +} + +/** + * 手机号脱敏 + */ +export function desensitizePhone(value: string | null | undefined): string { + if (!value || value.length !== 11) return value || '' + return value.replace(/(\d{3})\d{4}(\d{4})/, '$1****$2') +} + +/** + * 身份证脱敏 + */ +export function desensitizeIdCard(value: string | null | undefined): string { + if (!value) return '' + return value.replace(/(\d{6})\d{8}(\w{4})/, '$1********$2') +} + +/** + * 银行卡脱敏 + */ +export function desensitizeBankCard(value: string | null | undefined): string { + if (!value || value.length < 16) return value || '' + return value.replace(/(\d{4})\d{10}(\d{2})/, '$1**********$2') +} + +/** + * 邮箱脱敏 + */ +export function desensitizeEmail(value: string | null | undefined): string { + if (!value) return '' + return value.replace(/(.)(.*)(@.*)/, '$1***$3') +} \ No newline at end of file diff --git a/web-vue/packages/erp/api/erp/account.ts b/web-vue/packages/erp/api/erp/account.ts new file mode 100644 index 0000000..ce1f583 --- /dev/null +++ b/web-vue/packages/erp/api/erp/account.ts @@ -0,0 +1,55 @@ +/** + * Copyright (c) 2013-Now https://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'; +import { UploadApiResult } from '@jeesite/core/api/sys/upload'; +import { UploadFileParams } from '@jeesite/types/axios'; +import { AxiosProgressEvent } from 'axios'; + +const { ctxPath, adminPath } = useGlobSetting(); + +export interface ErpAccount extends BasicModel { + createTime?: string; // 记录时间 + accountId?: string; // 账户标识 + accountName: string; // 账户名称 + accountType: string; // 账户类型 + accountCode: string; // 账户卡号 + initialBalance: number; // 初始余额 + currentBalance: number; // 当前余额 + isActive: string; // 是否激活 + updateTime?: string; // 更新时间 +} + +export const erpAccountList = (params?: ErpAccount | any) => + defHttp.get({ url: adminPath + '/erp/account/list', params }); + +export const erpAccountListAll = (params?: ErpAccount | any) => + defHttp.get({ url: adminPath + '/erp/account/listAll', params }); + +export const erpAccountListData = (params?: ErpAccount | any) => + defHttp.post>({ url: adminPath + '/erp/account/listData', params }); + +export const erpAccountForm = (params?: ErpAccount | any) => + defHttp.get({ url: adminPath + '/erp/account/form', params }); + +export const erpAccountSave = (params?: any, data?: ErpAccount | any) => + defHttp.postJson({ url: adminPath + '/erp/account/save', params, data }); + +export const erpAccountImportData = ( + params: UploadFileParams, + onUploadProgress: (progressEvent: AxiosProgressEvent) => void, +) => + defHttp.uploadFile( + { + url: ctxPath + adminPath + '/erp/account/importData', + onUploadProgress, + }, + params, + ); + +export const erpAccountDelete = (params?: ErpAccount | any) => + defHttp.get({ url: adminPath + '/erp/account/delete', params }); diff --git a/web-vue/packages/erp/api/erp/category.ts b/web-vue/packages/erp/api/erp/category.ts new file mode 100644 index 0000000..6e63ec1 --- /dev/null +++ b/web-vue/packages/erp/api/erp/category.ts @@ -0,0 +1,51 @@ +/** + * Copyright (c) 2013-Now https://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'; +import { UploadApiResult } from '@jeesite/core/api/sys/upload'; +import { UploadFileParams } from '@jeesite/types/axios'; +import { AxiosProgressEvent } from 'axios'; + +const { ctxPath, adminPath } = useGlobSetting(); + +export interface ErpCategory extends BasicModel { + createTime?: string; // 记录时间 + categoryId?: string; // 分类标识 + parentName: string; // 父级名称 + categoryName: string; // 分类名称 + categoryType: string; // 分类类型 + sortOrder: number; // 排序序号 + isActive: string; // 是否启用 + updateTime?: string; // 更新时间 +} + +export const erpCategoryList = (params?: ErpCategory | any) => + defHttp.get({ url: adminPath + '/erp/category/list', params }); + +export const erpCategoryListData = (params?: ErpCategory | any) => + defHttp.post>({ url: adminPath + '/erp/category/listData', params }); + +export const erpCategoryForm = (params?: ErpCategory | any) => + defHttp.get({ url: adminPath + '/erp/category/form', params }); + +export const erpCategorySave = (params?: any, data?: ErpCategory | any) => + defHttp.postJson({ url: adminPath + '/erp/category/save', params, data }); + +export const erpCategoryImportData = ( + params: UploadFileParams, + onUploadProgress: (progressEvent: AxiosProgressEvent) => void, +) => + defHttp.uploadFile( + { + url: ctxPath + adminPath + '/erp/category/importData', + onUploadProgress, + }, + params, + ); + +export const erpCategoryDelete = (params?: ErpCategory | any) => + defHttp.get({ url: adminPath + '/erp/category/delete', params }); diff --git a/web-vue/packages/erp/views/erp/account/form.vue b/web-vue/packages/erp/views/erp/account/form.vue new file mode 100644 index 0000000..52c045c --- /dev/null +++ b/web-vue/packages/erp/views/erp/account/form.vue @@ -0,0 +1,149 @@ + + + diff --git a/web-vue/packages/erp/views/erp/account/list.vue b/web-vue/packages/erp/views/erp/account/list.vue new file mode 100644 index 0000000..4070634 --- /dev/null +++ b/web-vue/packages/erp/views/erp/account/list.vue @@ -0,0 +1,221 @@ + + + diff --git a/web-vue/packages/erp/views/erp/account/select.ts b/web-vue/packages/erp/views/erp/account/select.ts new file mode 100644 index 0000000..ecaa3da --- /dev/null +++ b/web-vue/packages/erp/views/erp/account/select.ts @@ -0,0 +1,118 @@ +import { useI18n } from '@jeesite/core/hooks/web/useI18n'; +import { BasicColumn, BasicTableProps, FormProps } from '@jeesite/core/components/Table'; +import { erpAccountListData } from '@jeesite/erp/api/erp/account'; + +const { t } = useI18n('erp.account'); + +const modalProps = { + title: t('账户选择'), +}; + +const searchForm: FormProps = { + baseColProps: { md: 8, lg: 6 }, + labelWidth: 90, + schemas: [ + { + label: t('账户名称'), + field: 'accountName', + component: 'Input', + }, + { + label: t('账户类型'), + field: 'accountType', + component: 'Input', + }, + { + label: t('是否激活'), + field: 'isActive', + component: 'Input', + }, + ], +}; + +const tableColumns: BasicColumn[] = [ + { + title: t('记录时间'), + dataIndex: 'createTime', + key: 'a.create_time', + sorter: true, + width: 230, + align: 'left', + slot: 'firstColumn', + }, + { + title: t('账户名称'), + dataIndex: 'accountName', + key: 'a.account_name', + sorter: true, + width: 130, + align: 'left', + }, + { + title: t('账户类型'), + dataIndex: 'accountType', + key: 'a.account_type', + sorter: true, + width: 130, + align: 'left', + }, + { + title: t('账户卡号'), + dataIndex: 'accountCode', + key: 'a.account_code', + sorter: true, + width: 130, + align: 'left', + }, + { + title: t('初始余额'), + dataIndex: 'initialBalance', + key: 'a.initial_balance', + sorter: true, + width: 130, + align: 'right', + }, + { + title: t('当前余额'), + dataIndex: 'currentBalance', + key: 'a.current_balance', + sorter: true, + width: 130, + align: 'right', + }, + { + title: t('是否激活'), + dataIndex: 'isActive', + key: 'a.is_active', + sorter: true, + width: 130, + align: 'left', + }, + { + title: t('更新时间'), + dataIndex: 'updateTime', + key: 'a.update_time', + sorter: true, + width: 130, + align: 'center', + }, +]; + +const tableProps: BasicTableProps = { + api: erpAccountListData, + beforeFetch: (params) => { + params['isAll'] = true; + return params; + }, + columns: tableColumns, + formConfig: searchForm, + rowKey: 'accountId', +}; + +export default { + modalProps, + tableProps, + itemCode: 'accountId', + itemName: 'accountId', + isShowCode: false, +}; diff --git a/web-vue/packages/erp/views/erp/category/form.vue b/web-vue/packages/erp/views/erp/category/form.vue new file mode 100644 index 0000000..3704f20 --- /dev/null +++ b/web-vue/packages/erp/views/erp/category/form.vue @@ -0,0 +1,140 @@ + + + diff --git a/web-vue/packages/erp/views/erp/category/list.vue b/web-vue/packages/erp/views/erp/category/list.vue new file mode 100644 index 0000000..aa54943 --- /dev/null +++ b/web-vue/packages/erp/views/erp/category/list.vue @@ -0,0 +1,208 @@ + + + diff --git a/web-vue/packages/erp/views/erp/category/select.ts b/web-vue/packages/erp/views/erp/category/select.ts new file mode 100644 index 0000000..81acdaa --- /dev/null +++ b/web-vue/packages/erp/views/erp/category/select.ts @@ -0,0 +1,110 @@ +import { useI18n } from '@jeesite/core/hooks/web/useI18n'; +import { BasicColumn, BasicTableProps, FormProps } from '@jeesite/core/components/Table'; +import { erpCategoryListData } from '@jeesite/erp/api/erp/category'; + +const { t } = useI18n('erp.category'); + +const modalProps = { + title: t('分类选择'), +}; + +const searchForm: FormProps = { + baseColProps: { md: 8, lg: 6 }, + labelWidth: 90, + schemas: [ + { + label: t('分类名称'), + field: 'categoryName', + component: 'Input', + }, + { + label: t('分类类型'), + field: 'categoryType', + component: 'Input', + }, + { + label: t('是否启用'), + field: 'isActive', + component: 'Input', + }, + ], +}; + +const tableColumns: BasicColumn[] = [ + { + title: t('记录时间'), + dataIndex: 'createTime', + key: 'a.create_time', + sorter: true, + width: 230, + align: 'left', + slot: 'firstColumn', + }, + { + title: t('父级名称'), + dataIndex: 'parentName', + key: 'a.parent_name', + sorter: true, + width: 130, + align: 'left', + }, + { + title: t('分类名称'), + dataIndex: 'categoryName', + key: 'a.category_name', + sorter: true, + width: 130, + align: 'left', + }, + { + title: t('分类类型'), + dataIndex: 'categoryType', + key: 'a.category_type', + sorter: true, + width: 130, + align: 'left', + }, + { + title: t('排序序号'), + dataIndex: 'sortOrder', + key: 'a.sort_order', + sorter: true, + width: 130, + align: 'center', + }, + { + title: t('是否启用'), + dataIndex: 'isActive', + key: 'a.is_active', + sorter: true, + width: 130, + align: 'left', + }, + { + title: t('更新时间'), + dataIndex: 'updateTime', + key: 'a.update_time', + sorter: true, + width: 130, + align: 'center', + }, +]; + +const tableProps: BasicTableProps = { + api: erpCategoryListData, + beforeFetch: (params) => { + params['isAll'] = true; + return params; + }, + columns: tableColumns, + formConfig: searchForm, + rowKey: 'categoryId', +}; + +export default { + modalProps, + tableProps, + itemCode: 'categoryId', + itemName: 'categoryId', + isShowCode: false, +}; diff --git a/web-vue/web/src/main.ts b/web-vue/web/src/main.ts index a5e90b1..2730a43 100644 --- a/web-vue/web/src/main.ts +++ b/web-vue/web/src/main.ts @@ -9,7 +9,7 @@ import '@jeesite/core/design/index.less'; import App from './App.vue'; import { createApp } from 'vue'; -import { isDevMode } from '@jeesite/core/utils/env'; + import { registerGlobComp } from '@jeesite/core/components/registerGlobComp'; import { initAppConfigStore } from '@jeesite/core/logics/initAppConfig'; import { setupErrorHandle } from '@jeesite/core/logics/error-handle'; @@ -20,77 +20,73 @@ import { setupRouterGuard } from '@jeesite/core/router/guard'; import { setupStore } from '@jeesite/core/store'; import { setupDForm } from '@jeesite/dfm'; -// 引入 ElementPlus -import ElementPlus from 'element-plus' -import 'element-plus/dist/index.css' // ✅ 必须添加 ElementPlus 样式 -import * as ElementPlusIconsVue from '@element-plus/icons-vue' +// ElementPlus +import ElementPlus from 'element-plus'; +import 'element-plus/dist/index.css'; +import * as ElementPlusIconsVue from '@element-plus/icons-vue'; +import zhCn from 'element-plus/es/locale/lang/zh-cn'; -// 引入大屏适配插件 -import VScaleScreen from 'v-scale-screen' +// 大屏自适应 +import VScaleScreen from 'v-scale-screen'; -// 引入 ECharts -import * as echarts from 'echarts' -import type { ECharts } from 'echarts' // 补充类型声明 +// ECharts +import * as echarts from 'echarts'; -// 引入 ElementPlus 中文 -import zhCn from 'element-plus/es/locale/lang/zh-cn' - -// 扩展全局属性类型(解决 TS 类型报错) declare module 'vue' { interface ComponentCustomProperties { - $echarts: ECharts + $echarts: typeof echarts; } } async function bootstrap() { + // 创建 Vue 实例 const app = createApp(App); - - // 全局挂载 ECharts - app.config.globalProperties.$echarts = echarts - // 使用大屏自适应组件 - app.use(VScaleScreen) + app.config.globalProperties.$echarts = echarts; - // 使用 ElementPlus + // 2. 注册大屏自适应插件 + app.component('VScaleScreen', VScaleScreen) + + // 3. 注册 ElementPlus(中文语言) app.use(ElementPlus, { locale: zhCn, - }) + }); - // 注册 ElementPlus 所有图标 + // 4. 全局注册 ElementPlus 所有图标 for (const [key, component] of Object.entries(ElementPlusIconsVue)) { - app.component(key, component) + app.component(key, component); } - // 配置状态管理 Pinia + // 5. 状态管理 Pinia 初始化 setupStore(app); - // 初始化系统内部配置 + // 6. 初始化系统配置(主题、布局、全局设置) initAppConfigStore(); - // 注册全局自定义组件 + // 7. 注册全局自定义组件 registerGlobComp(app); - // 多语言配置 + // 8. 国际化多语言初始化 await setupI18n(app); - // 配置路由 + // 9. 路由注册 setupRouter(app); - // 路由守卫(权限、加载、日志等) + // 10. 路由守卫(权限控制、页面加载、登录拦截) setupRouterGuard(router); - // 注册全局自定义指令 + // 11. 全局自定义指令(权限、防抖、拖拽等) setupGlobDirectives(app); - // 配置全局错误处理 + // 12. 全局异常捕获处理 setupErrorHandle(app); - // 初始化动态表单 + // 13. 动态表单模块初始化 setupDForm(); - // 挂载应用 + // 14. 挂载应用到页面 #app 节点 app.mount('#app'); } -// 启动应用 -bootstrap().then(); +// 执行启动 +bootstrap().then(); \ No newline at end of file