From e2c315200a4b17e5383680b8791ae9462d2a862f Mon Sep 17 00:00:00 2001 From: gaoxq <376340421@qq.com> Date: Sun, 29 Mar 2026 12:46:36 +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 --- .../modules/apps/Module/ScreenTop.java | 31 ++ .../modules/apps/web/ErpScreenController.java | 31 +- .../apps/web/SysAnalysisController.java | 37 +++ .../apps/web/SysWorkbenchController.java | 6 + .../modules/biz/dao/MyMunicipalitiesDao.java | 15 + ...PageIndexDao.java => MyQuickLoginDao.java} | 8 +- .../modules/biz/entity/MyMunicipalities.java | 106 +++++++ .../modules/biz/entity/MyPageIndex.java | 100 ------ .../modules/biz/entity/MyQuickLogin.java | 75 +++++ .../biz/service/MyMunicipalitiesService.java | 134 ++++++++ ...xService.java => MyQuickLoginService.java} | 60 ++-- .../modules/biz/web/MyCitiesController.java | 219 +++++++------ .../biz/web/MyMunicipalitiesController.java | 146 +++++++++ .../biz/web/MyNoticeTodoController.java | 13 + .../biz/web/MyPageIndexController.java | 157 --------- .../biz/web/MyQuickLoginController.java | 152 +++++++++ .../modules/biz/MyMunicipalitiesDao.xml | 15 + .../mappings/modules/biz/MyQuickLoginDao.xml | 15 + web-vue/packages/biz/api/biz/myAnalysis.ts | 3 + web-vue/packages/biz/api/biz/myCities.ts | 3 + .../packages/biz/api/biz/myMunicipalities.ts | 55 ++++ web-vue/packages/biz/api/biz/myNoticeTodo.ts | 3 + web-vue/packages/biz/api/biz/myPageIndex.ts | 57 ---- web-vue/packages/biz/api/biz/myQuickLogin.ts | 55 ++++ .../biz/views/biz/myChartInfo/list.vue | 2 + .../biz/views/biz/myMunicipalities/form.vue | 191 +++++++++++ .../biz/views/biz/myMunicipalities/list.vue | 298 ++++++++++++++++++ .../packages/biz/views/biz/myNotes/list.vue | 8 - .../biz/views/biz/myNoticeTodo/list.vue | 31 +- .../{myPageIndex => myQuickLogin}/form.vue | 133 ++++---- .../{myPageIndex => myQuickLogin}/list.vue | 183 +++++------ .../biz/myScreen/components/ChartTop.vue | 222 +++++++++++++ .../packages/biz/views/biz/myScreen/index.vue | 42 ++- .../welcome/Erp/components/ChartTop.vue | 31 +- .../welcome/Erp/components/ChartV04.vue | 4 +- .../welcome/Erp/components/ChartV05.vue | 4 +- .../welcome/Erp/components/ChartV07.vue | 4 +- .../core/layouts/screen/welcome/Erp/index.vue | 2 +- .../welcome/Home/components/ChartTop.vue | 10 +- .../welcome/Sys/components/ChartTop.vue | 10 +- .../welcome/Work/components/ChartTop.vue | 10 +- .../desktop/analysis/components/BizApps.vue | 114 +++---- .../analysis/components/NoticeInfo.vue | 6 +- .../analysis/components/ProjectInfo.vue | 15 +- .../analysis/components/ProvinceInfo.vue | 260 +++++++++++++++ .../analysis/components/QuickLogin.vue | 114 +++---- .../desktop/analysis/components/TodoInfo.vue | 6 +- .../layouts/views/desktop/analysis/index.vue | 18 +- .../desktop/workbench/components/NoteInfo.vue | 5 +- .../layouts/views/desktop/workbench/index.vue | 18 +- web-vue/packages/erp/api/erp/screen.ts | 18 +- 51 files changed, 2390 insertions(+), 865 deletions(-) create mode 100644 web-api/src/main/java/com/jeesite/modules/apps/Module/ScreenTop.java create mode 100644 web-api/src/main/java/com/jeesite/modules/biz/dao/MyMunicipalitiesDao.java rename web-api/src/main/java/com/jeesite/modules/biz/dao/{MyPageIndexDao.java => MyQuickLoginDao.java} (54%) create mode 100644 web-api/src/main/java/com/jeesite/modules/biz/entity/MyMunicipalities.java delete mode 100644 web-api/src/main/java/com/jeesite/modules/biz/entity/MyPageIndex.java create mode 100644 web-api/src/main/java/com/jeesite/modules/biz/entity/MyQuickLogin.java create mode 100644 web-api/src/main/java/com/jeesite/modules/biz/service/MyMunicipalitiesService.java rename web-api/src/main/java/com/jeesite/modules/biz/service/{MyPageIndexService.java => MyQuickLoginService.java} (62%) create mode 100644 web-api/src/main/java/com/jeesite/modules/biz/web/MyMunicipalitiesController.java delete mode 100644 web-api/src/main/java/com/jeesite/modules/biz/web/MyPageIndexController.java create mode 100644 web-api/src/main/java/com/jeesite/modules/biz/web/MyQuickLoginController.java create mode 100644 web-api/src/main/resources/mappings/modules/biz/MyMunicipalitiesDao.xml create mode 100644 web-api/src/main/resources/mappings/modules/biz/MyQuickLoginDao.xml create mode 100644 web-vue/packages/biz/api/biz/myMunicipalities.ts delete mode 100644 web-vue/packages/biz/api/biz/myPageIndex.ts create mode 100644 web-vue/packages/biz/api/biz/myQuickLogin.ts create mode 100644 web-vue/packages/biz/views/biz/myMunicipalities/form.vue create mode 100644 web-vue/packages/biz/views/biz/myMunicipalities/list.vue rename web-vue/packages/biz/views/biz/{myPageIndex => myQuickLogin}/form.vue (52%) rename web-vue/packages/biz/views/biz/{myPageIndex => myQuickLogin}/list.vue (52%) create mode 100644 web-vue/packages/biz/views/biz/myScreen/components/ChartTop.vue create mode 100644 web-vue/packages/core/layouts/views/desktop/analysis/components/ProvinceInfo.vue diff --git a/web-api/src/main/java/com/jeesite/modules/apps/Module/ScreenTop.java b/web-api/src/main/java/com/jeesite/modules/apps/Module/ScreenTop.java new file mode 100644 index 0000000..c32f969 --- /dev/null +++ b/web-api/src/main/java/com/jeesite/modules/apps/Module/ScreenTop.java @@ -0,0 +1,31 @@ +package com.jeesite.modules.apps.Module; + +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; + +@Data +public class ScreenTop implements Serializable { + + private String module; + private String title; + private String label; + private BigDecimal value; + private String iconImg; + private Integer sort; + + + public ScreenTop() { + + } + + public ScreenTop(String module, String title, String label, BigDecimal value, String iconImg, Integer sort) { + this.module = module; + this.title = title; + this.label = label; + this.value = value; + this.iconImg = iconImg; + this.sort = sort; + } +} diff --git a/web-api/src/main/java/com/jeesite/modules/apps/web/ErpScreenController.java b/web-api/src/main/java/com/jeesite/modules/apps/web/ErpScreenController.java index 642e6a6..eef1a6a 100644 --- a/web-api/src/main/java/com/jeesite/modules/apps/web/ErpScreenController.java +++ b/web-api/src/main/java/com/jeesite/modules/apps/web/ErpScreenController.java @@ -1,9 +1,12 @@ package com.jeesite.modules.apps.web; import com.jeesite.modules.apps.Module.ChartDataItem; +import com.jeesite.modules.apps.Module.ScreenTop; import com.jeesite.modules.erp.entity.ErpTransactionFlow; import com.jeesite.modules.erp.service.ErpTransactionFlowService; import com.jeesite.modules.utils.BigDecimalUtils; +import com.jeesite.modules.utils.DateUtils; +import com.jeesite.modules.utils.KeyUtil; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; @@ -23,6 +26,32 @@ public class ErpScreenController { this.erpTransactionFlowService = erpTransactionFlowService; } + @RequestMapping(value = "getErpChartTop") + @ResponseBody + public List getErpChartTop(ErpTransactionFlow erpTransactionFlow) { + List screenTops = new ArrayList<>(); + erpTransactionFlow.setMonthDate(DateUtils.getCurrentMonth()); + List flowList = erpTransactionFlowService.findList(erpTransactionFlow); + Map sumMap = flowList.stream() + .collect(Collectors.groupingBy( + ErpTransactionFlow::getFlowType, + Collectors.reducing(BigDecimal.ZERO, ErpTransactionFlow::getAmount, BigDecimal::add) + )); + BigDecimal totalIncome = sumMap.getOrDefault("2", BigDecimal.ZERO); //收入 + BigDecimal totalExpense = sumMap.getOrDefault("1", BigDecimal.ZERO); //支出 + BigDecimal netProfit = BigDecimalUtils.subtract(totalIncome, totalExpense); //净利润 + BigDecimal profitRate = BigDecimalUtils.percent(netProfit, totalIncome); //利润率 + BigDecimal expenseRate = BigDecimalUtils.percent(totalExpense, totalIncome); //支出率 + BigDecimal profitLossRate = BigDecimalUtils.percent(netProfit, totalExpense); //盈亏率 + + screenTops.add(new ScreenTop("总收入", "", "金额(元)", totalIncome, "icons/erp-shouru.svg", 1)); + screenTops.add(new ScreenTop("总支出", "", "金额(元)", totalExpense, "icons/erp-zhichu.svg", 2)); + screenTops.add(new ScreenTop("净利润", "", "金额(元)", netProfit, "icons/erp-jiaoyizhichu.svg", 3)); + screenTops.add(new ScreenTop("利润率", "", "占比(%)", profitRate, "icons/erp-fencheng.svg", 4)); + screenTops.add(new ScreenTop("支出率", "", "占比(%)", expenseRate, "icons/erp-lirunfenxi.svg", 5)); + screenTops.add(new ScreenTop("盈亏率", "", "占比(%)", profitLossRate, "icons/erp-zongshouru.svg", 6)); + return screenTops; + } /** * 账号收支 @@ -368,7 +397,7 @@ public class ErpScreenController { /** * 分类收支 */ - @RequestMapping(value = "getCategoryChart") + @RequestMapping(value = "getErpCategoryChart") @ResponseBody public List getCategoryChart(ErpTransactionFlow erpTransactionFlow) { List chartDataItems = new ArrayList<>(); diff --git a/web-api/src/main/java/com/jeesite/modules/apps/web/SysAnalysisController.java b/web-api/src/main/java/com/jeesite/modules/apps/web/SysAnalysisController.java index 52be82f..9c560b8 100644 --- a/web-api/src/main/java/com/jeesite/modules/apps/web/SysAnalysisController.java +++ b/web-api/src/main/java/com/jeesite/modules/apps/web/SysAnalysisController.java @@ -4,18 +4,26 @@ import cn.hutool.core.date.DateUtil; import cn.hutool.system.oshi.CpuInfo; import cn.hutool.system.oshi.OshiUtil; import com.jeesite.modules.apps.Module.ChartInfo; +import com.jeesite.modules.biz.entity.MyMunicipalities; +import com.jeesite.modules.biz.service.MyMunicipalitiesService; import com.jeesite.modules.utils.KeyUtil; +import jakarta.annotation.Resource; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import java.util.ArrayList; import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; @Controller @RequestMapping(value = "${adminPath}/desktop/analysis") public class SysAnalysisController { + @Resource + private MyMunicipalitiesService municipalitiesService; + @RequestMapping(value = "getHostInfo") @ResponseBody public List getHostInfo() { @@ -36,4 +44,33 @@ public class SysAnalysisController { chartInfoList.add(new ChartInfo("time", "服务器运行时长", 0, KeyUtil.getColor(), runTime)); return chartInfoList; } + + /** + * 获取社区数量 + */ + @RequestMapping(value = "getProvinceChart") + @ResponseBody + public List getProvinceChart(MyMunicipalities myMunicipalities) { + List chartInfos = new ArrayList<>(); + myMunicipalities.setUstatus("1"); + List municipalitiesList = municipalitiesService.findList(myMunicipalities); + Map provinceCountMap = municipalitiesList.stream() + .sorted((a, b) -> { + if (a.getSorting() == null) return 1; + if (b.getSorting() == null) return -1; + return a.getSorting().compareTo(b.getSorting()); + }) + .collect(Collectors.groupingBy( + MyMunicipalities::getProvinceName, + java.util.LinkedHashMap::new, // 关键:保证顺序不变 + Collectors.counting() + )); + for (Map.Entry entry : provinceCountMap.entrySet()) { + ChartInfo chartInfo = new ChartInfo(); + chartInfo.setLabel(entry.getKey()); + chartInfo.setValue(entry.getValue()); + chartInfos.add(chartInfo); + } + return chartInfos; + } } diff --git a/web-api/src/main/java/com/jeesite/modules/apps/web/SysWorkbenchController.java b/web-api/src/main/java/com/jeesite/modules/apps/web/SysWorkbenchController.java index a813ea0..b8960cd 100644 --- a/web-api/src/main/java/com/jeesite/modules/apps/web/SysWorkbenchController.java +++ b/web-api/src/main/java/com/jeesite/modules/apps/web/SysWorkbenchController.java @@ -5,7 +5,9 @@ import com.jeesite.modules.apps.Module.NoteInfo; import com.jeesite.modules.biz.entity.MyNotes; import com.jeesite.modules.biz.service.MyNotesService; import com.jeesite.modules.sys.entity.DictData; +import com.jeesite.modules.sys.entity.User; import com.jeesite.modules.sys.utils.DictUtils; +import com.jeesite.modules.sys.utils.UserUtils; import com.jeesite.modules.utils.DateUtils; import jakarta.annotation.Resource; import org.springframework.stereotype.Controller; @@ -25,6 +27,8 @@ public class SysWorkbenchController { @RequestMapping(value = "getNoteInfo") @ResponseBody public List getNoteInfo(MyNotes myNotes) { + User user = UserUtils.getUser(); + myNotes.setCreateUser(user.getLoginCode()); List noteInfos = new ArrayList<>(); myNotes.setCreateTime_gte(DateUtils.getFirstDayOfCurrentYear()); List dictDataList = DictUtils.getDictList("note_type"); @@ -47,6 +51,8 @@ public class SysWorkbenchController { @RequestMapping(value = "getNoteChart") @ResponseBody public List getNoteChart(MyNotes myNotes) { + User user = UserUtils.getUser(); + myNotes.setCreateUser(user.getLoginCode()); myNotes.setCreateTime_gte(DateUtils.getFirstDayOfCurrentYear()); List myNotesList = myNotesService.findList(myNotes); Map chartDataMap = myNotesList.stream() diff --git a/web-api/src/main/java/com/jeesite/modules/biz/dao/MyMunicipalitiesDao.java b/web-api/src/main/java/com/jeesite/modules/biz/dao/MyMunicipalitiesDao.java new file mode 100644 index 0000000..dff55fd --- /dev/null +++ b/web-api/src/main/java/com/jeesite/modules/biz/dao/MyMunicipalitiesDao.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.MyMunicipalities; + +/** + * 社区信息 DAO 接口 + * @author gaoxq + * @version 2026-03-27 + */ +@MyBatisDao(dataSourceName="work") +public interface MyMunicipalitiesDao extends CrudDao { + +} \ No newline at end of file diff --git a/web-api/src/main/java/com/jeesite/modules/biz/dao/MyPageIndexDao.java b/web-api/src/main/java/com/jeesite/modules/biz/dao/MyQuickLoginDao.java similarity index 54% rename from web-api/src/main/java/com/jeesite/modules/biz/dao/MyPageIndexDao.java rename to web-api/src/main/java/com/jeesite/modules/biz/dao/MyQuickLoginDao.java index 7fa3f44..f981d9e 100644 --- a/web-api/src/main/java/com/jeesite/modules/biz/dao/MyPageIndexDao.java +++ b/web-api/src/main/java/com/jeesite/modules/biz/dao/MyQuickLoginDao.java @@ -2,14 +2,14 @@ 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.MyPageIndex; +import com.jeesite.modules.biz.entity.MyQuickLogin; /** - * 指标数据表 DAO 接口 + * 快捷登录 DAO 接口 * @author gaoxq - * @version 2026-03-23 + * @version 2026-03-27 */ @MyBatisDao(dataSourceName="work") -public interface MyPageIndexDao extends CrudDao { +public interface MyQuickLoginDao extends CrudDao { } \ No newline at end of file diff --git a/web-api/src/main/java/com/jeesite/modules/biz/entity/MyMunicipalities.java b/web-api/src/main/java/com/jeesite/modules/biz/entity/MyMunicipalities.java new file mode 100644 index 0000000..678174e --- /dev/null +++ b/web-api/src/main/java/com/jeesite/modules/biz/entity/MyMunicipalities.java @@ -0,0 +1,106 @@ +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 java.io.Serial; + +/** + * 社区信息 Entity + * + * @author gaoxq + * @version 2026-03-27 + */ +@Table(name = "my_municipalities", alias = "a", label = "社区信息", columns = { + @Column(name = "municipality_id", attrName = "municipalityId", label = "唯一主键", isPK = true), + @Column(name = "create_time", attrName = "createTime", label = "记录时间", isUpdateForce = true), + @Column(name = "county_name", attrName = "countyName", label = "县区名称", queryType = QueryType.LIKE), + @Column(name = "province_code", attrName = "provinceCode", label = "省份编码"), + @Column(name = "city_code", attrName = "cityCode", label = "市区编码"), + @Column(name = "county_code", attrName = "countyCode", label = "县区编码"), + @Column(name = "town_name", attrName = "townName", label = "街道名称", queryType = QueryType.LIKE), + @Column(name = "town_code", attrName = "townCode", label = "街道编号"), + @Column(name = "village_name", attrName = "villageName", label = "社区名称", queryType = QueryType.LIKE), + @Column(name = "village_code", attrName = "villageCode", label = "社区编号"), + @Column(name = "update_time", attrName = "updateTime", label = "更新时间", isUpdateForce = true), + @Column(name = "ustatus", attrName = "ustatus", label = "状态"), +}, joinTable = { + @JoinTable(type = Type.LEFT_JOIN, entity = MyProvince.class, alias = "b", + on = "a.province_code = b.province_code", attrName = "this", + columns = { + @Column(name = "province_name", attrName = "provinceName", label = "省份名称"), + @Column(name = "sorting", attrName = "sorting", label = "省份序号"), + }), + @JoinTable(type = Type.LEFT_JOIN, entity = MyCities.class, alias = "c", + on = "a.province_code = c.province_code AND a.city_code = c.city_code", attrName = "this", + columns = { + @Column(name = "city_name", attrName = "cityName", label = "市区名称"), + @Column(name = "area_code", attrName = "areaCode", label = "市区区号"), + @Column(name = "area_type", attrName = "areaType", label = "市区级别"), + }), +}, orderBy = "a.create_time DESC" +) +@Data +public class MyMunicipalities extends DataEntity implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + private String municipalityId; // 唯一主键 + private Date createTime; // 记录时间 + private String countyName; // 县区名称 + private String provinceCode; // 省份编码 + private String cityCode; // 市区编码 + private String countyCode; // 县区编码 + private String townName; // 街道名称 + private String townCode; // 街道编号 + private String villageName; // 社区名称 + private String villageCode; // 社区编号 + private Date updateTime; // 更新时间 + private String ustatus; // 状态 + + private String provinceName; + private String cityName; + private String areaCode; + private String areaType; + private Integer sorting; // 省份序号 + + @ExcelFields({ + @ExcelField(title = "唯一主键", attrName = "municipalityId", align = Align.CENTER, sort = 10), + @ExcelField(title = "记录时间", attrName = "createTime", align = Align.CENTER, sort = 20, dataFormat = "yyyy-MM-dd hh:mm"), + @ExcelField(title = "省份编码", attrName = "provinceCode", align = Align.CENTER, sort = 40), + @ExcelField(title = "省份名称", attrName = "provinceName", align = Align.CENTER, sort = 45), + @ExcelField(title = "市区编码", attrName = "cityCode", align = Align.CENTER, sort = 50), + @ExcelField(title = "市区编码", attrName = "cityName", align = Align.CENTER, sort = 50), + @ExcelField(title = "市区级别", attrName = "areaType", dictType = "area_level", align = Align.CENTER, sort = 50), + @ExcelField(title = "县区编码", attrName = "countyCode", align = Align.CENTER, sort = 60), + @ExcelField(title = "县区名称", attrName = "countyName", align = Align.CENTER, sort = 65), + @ExcelField(title = "街道编号", attrName = "townCode", align = Align.CENTER, sort = 70), + @ExcelField(title = "街道名称", attrName = "townName", align = Align.CENTER, sort = 80), + @ExcelField(title = "社区编号", attrName = "villageCode", align = Align.CENTER, sort = 90), + @ExcelField(title = "社区名称", attrName = "villageName", align = Align.CENTER, sort = 100), + @ExcelField(title = "更新时间", attrName = "updateTime", align = Align.CENTER, sort = 110, dataFormat = "yyyy-MM-dd hh:mm"), + @ExcelField(title = "状态", attrName = "ustatus", dictType = "biz_status", align = Align.CENTER, sort = 120), + }) + public MyMunicipalities() { + this(null); + } + + public MyMunicipalities(String id) { + super(id); + } + +} \ No newline at end of file diff --git a/web-api/src/main/java/com/jeesite/modules/biz/entity/MyPageIndex.java b/web-api/src/main/java/com/jeesite/modules/biz/entity/MyPageIndex.java deleted file mode 100644 index 6d6a1b1..0000000 --- a/web-api/src/main/java/com/jeesite/modules/biz/entity/MyPageIndex.java +++ /dev/null @@ -1,100 +0,0 @@ -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-23 - */ -@EqualsAndHashCode(callSuper = true) -@Table(name = "my_page_index", alias = "a", label = "指标信息", columns = { - @Column(name = "create_time", attrName = "createTime", label = "记录时间", isUpdate = false, isUpdateForce = true), - @Column(name = "index_id", attrName = "indexId", label = "唯一标识", isPK = true), - @Column(name = "module", attrName = "module", label = "模块名称"), - @Column(name = "module_code", attrName = "moduleCode", label = "模块编码"), - @Column(name = "title", attrName = "title", label = "说明描述", queryType = QueryType.LIKE), - @Column(name = "value", attrName = "value", label = "数值", isQuery = false, isUpdateForce = true), - @Column(name = "label", attrName = "label", label = "名称"), - @Column(name = "icon_img", attrName = "iconImg", label = "图片路径", isQuery = false), - @Column(name = "icon_filter", attrName = "iconFilter", label = "图标颜色", isQuery = false), - @Column(name = "sort", attrName = "sort", label = "序号", isQuery = false), - @Column(name = "index_code", attrName = "indexCode", label = "指标编号"), -}, orderBy = "a.create_time DESC,index_code,sort " -) -@Data -public class MyPageIndex extends DataEntity implements Serializable { - - @Serial - private static final long serialVersionUID = 1L; - private Date createTime; // 记录时间 - private String indexId; // 唯一标识 - private String module; // 模块名称 - private String moduleCode; // 模块编码 - private String title; // 说明描述 - private Double value; // 数值 - private String label; // 名称 - private String iconImg; // 图片路径 - private String iconFilter; // 图标颜色 - private Integer sort; // 序号 - private String indexCode; // 指标编号 - - @ExcelFields({ - @ExcelField(title = "记录时间", attrName = "createTime", align = Align.CENTER, sort = 10, dataFormat = "yyyy-MM-dd hh:mm"), - @ExcelField(title = "唯一标识", attrName = "indexId", align = Align.CENTER, sort = 20), - @ExcelField(title = "模块名称", attrName = "module", align = Align.CENTER, sort = 30), - @ExcelField(title = "模块编码", attrName = "moduleCode", align = Align.CENTER, sort = 40), - @ExcelField(title = "说明描述", attrName = "title", align = Align.CENTER, sort = 50), - @ExcelField(title = "数值", attrName = "value", align = Align.CENTER, sort = 60), - @ExcelField(title = "名称", attrName = "label", align = Align.CENTER, sort = 70), - @ExcelField(title = "图片路径", attrName = "iconImg", align = Align.CENTER, sort = 80), - @ExcelField(title = "图标颜色", attrName = "iconFilter", align = Align.CENTER, sort = 90), - @ExcelField(title = "序号", attrName = "sort", align = Align.CENTER, sort = 100), - @ExcelField(title = "指标编号", attrName = "indexCode", align = Align.CENTER, sort = 110), - }) - public MyPageIndex() { - this(null); - } - - public MyPageIndex(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/MyQuickLogin.java b/web-api/src/main/java/com/jeesite/modules/biz/entity/MyQuickLogin.java new file mode 100644 index 0000000..e74512b --- /dev/null +++ b/web-api/src/main/java/com/jeesite/modules/biz/entity/MyQuickLogin.java @@ -0,0 +1,75 @@ +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 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-27 + */ +@EqualsAndHashCode(callSuper = true) +@Table(name="my_quick_login", alias="a", label="快捷登录信息", columns={ + @Column(name="create_time", attrName="createTime", label="记录时间", isUpdate=false, isQuery=false, isUpdateForce=true), + @Column(name="quick_id", attrName="quickId", label="自增主键", isPK=true), + @Column(name="system_name", attrName="systemName", label="系统名称", queryType=QueryType.LIKE), + @Column(name="system_type", attrName="systemType", label="系统类型"), + @Column(name="system_url", attrName="systemUrl", label="首页地址", isQuery=false), + @Column(name="system_icon", attrName="systemIcon", label="系统图标", isQuery=false), + @Column(name="bg_color", attrName="bgColor", label="图标背景色", isQuery=false), + @Column(name="ustatus", attrName="ustatus", label="状态"), + @Column(name="update_time", attrName="updateTime", label="更新时间", isQuery=false, isUpdateForce=true), + }, orderBy="a.create_time DESC" +) +@Data +public class MyQuickLogin extends DataEntity implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + private Date createTime; // 记录时间 + private String quickId; // 自增主键 + private String systemName; // 系统名称 + private String systemType; // 系统类型 + private String systemUrl; // 首页地址 + private String systemIcon; // 系统图标 + private String bgColor; // 图标背景色 + private String ustatus; // 状态 + private Date updateTime; // 更新时间 + + @ExcelFields({ + @ExcelField(title="记录时间", attrName="createTime", align=Align.CENTER, sort=10, dataFormat="yyyy-MM-dd hh:mm"), + @ExcelField(title="自增主键", attrName="quickId", align=Align.CENTER, sort=20), + @ExcelField(title="系统名称", attrName="systemName", align=Align.CENTER, sort=30), + @ExcelField(title="系统类型", attrName="systemType", align=Align.CENTER, sort=40), + @ExcelField(title="首页地址", attrName="systemUrl", align=Align.CENTER, sort=50), + @ExcelField(title="系统图标", attrName="systemIcon", align=Align.CENTER, sort=60), + @ExcelField(title="图标背景色", attrName="bgColor", align=Align.CENTER, sort=70), + @ExcelField(title="状态", attrName="ustatus", align=Align.CENTER, sort=80), + @ExcelField(title="更新时间", attrName="updateTime", align=Align.CENTER, sort=90, dataFormat="yyyy-MM-dd hh:mm"), + }) + public MyQuickLogin() { + this(null); + } + + public MyQuickLogin(String id){ + super(id); + } + +} \ No newline at end of file diff --git a/web-api/src/main/java/com/jeesite/modules/biz/service/MyMunicipalitiesService.java b/web-api/src/main/java/com/jeesite/modules/biz/service/MyMunicipalitiesService.java new file mode 100644 index 0000000..759d07e --- /dev/null +++ b/web-api/src/main/java/com/jeesite/modules/biz/service/MyMunicipalitiesService.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.MyMunicipalities; +import com.jeesite.modules.biz.dao.MyMunicipalitiesDao; +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-27 + */ +@Service +public class MyMunicipalitiesService extends CrudService { + + /** + * 获取单条数据 + * @param myMunicipalities 主键 + */ + @Override + public MyMunicipalities get(MyMunicipalities myMunicipalities) { + return super.get(myMunicipalities); + } + + /** + * 查询分页数据 + * @param myMunicipalities 查询条件 + * @param myMunicipalities page 分页对象 + */ + @Override + public Page findPage(MyMunicipalities myMunicipalities) { + return super.findPage(myMunicipalities); + } + + /** + * 查询列表数据 + * @param myMunicipalities 查询条件 + */ + @Override + public List findList(MyMunicipalities myMunicipalities) { + return super.findList(myMunicipalities); + } + + /** + * 保存数据(插入或更新) + * @param myMunicipalities 数据对象 + */ + @Override + @Transactional + public void save(MyMunicipalities myMunicipalities) { + super.save(myMunicipalities); + } + + /** + * 导入数据 + * @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(MyMunicipalities.class); + for (MyMunicipalities myMunicipalities : list) { + try{ + ValidatorUtils.validateWithException(myMunicipalities); + this.save(myMunicipalities); + successNum++; + successMsg.append("
" + successNum + "、编号 " + myMunicipalities.getId() + " 导入成功"); + } catch (Exception e) { + failureNum++; + String msg = "
" + failureNum + "、编号 " + myMunicipalities.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 myMunicipalities 数据对象 + */ + @Override + @Transactional + public void updateStatus(MyMunicipalities myMunicipalities) { + super.updateStatus(myMunicipalities); + } + + /** + * 删除数据 + * @param myMunicipalities 数据对象 + */ + @Override + @Transactional + public void delete(MyMunicipalities myMunicipalities) { + super.delete(myMunicipalities); + } + +} \ No newline at end of file diff --git a/web-api/src/main/java/com/jeesite/modules/biz/service/MyPageIndexService.java b/web-api/src/main/java/com/jeesite/modules/biz/service/MyQuickLoginService.java similarity index 62% rename from web-api/src/main/java/com/jeesite/modules/biz/service/MyPageIndexService.java rename to web-api/src/main/java/com/jeesite/modules/biz/service/MyQuickLoginService.java index 767eec6..de6e860 100644 --- a/web-api/src/main/java/com/jeesite/modules/biz/service/MyPageIndexService.java +++ b/web-api/src/main/java/com/jeesite/modules/biz/service/MyQuickLoginService.java @@ -6,8 +6,8 @@ import org.springframework.transaction.annotation.Transactional; import com.jeesite.common.entity.Page; import com.jeesite.common.service.CrudService; -import com.jeesite.modules.biz.entity.MyPageIndex; -import com.jeesite.modules.biz.dao.MyPageIndexDao; +import com.jeesite.modules.biz.entity.MyQuickLogin; +import com.jeesite.modules.biz.dao.MyQuickLoginDao; import com.jeesite.common.service.ServiceException; import com.jeesite.common.config.Global; import com.jeesite.common.validator.ValidatorUtils; @@ -17,49 +17,49 @@ import jakarta.validation.ConstraintViolation; import jakarta.validation.ConstraintViolationException; /** - * 指标数据表 Service + * 快捷登录 Service * @author gaoxq - * @version 2026-03-23 + * @version 2026-03-27 */ @Service -public class MyPageIndexService extends CrudService { +public class MyQuickLoginService extends CrudService { /** * 获取单条数据 - * @param myPageIndex 主键 + * @param myQuickLogin 主键 */ @Override - public MyPageIndex get(MyPageIndex myPageIndex) { - return super.get(myPageIndex); + public MyQuickLogin get(MyQuickLogin myQuickLogin) { + return super.get(myQuickLogin); } /** * 查询分页数据 - * @param myPageIndex 查询条件 - * @param myPageIndex page 分页对象 + * @param myQuickLogin 查询条件 + * @param myQuickLogin page 分页对象 */ @Override - public Page findPage(MyPageIndex myPageIndex) { - return super.findPage(myPageIndex); + public Page findPage(MyQuickLogin myQuickLogin) { + return super.findPage(myQuickLogin); } /** * 查询列表数据 - * @param myPageIndex 查询条件 + * @param myQuickLogin 查询条件 */ @Override - public List findList(MyPageIndex myPageIndex) { - return super.findList(myPageIndex); + public List findList(MyQuickLogin myQuickLogin) { + return super.findList(myQuickLogin); } /** * 保存数据(插入或更新) - * @param myPageIndex 数据对象 + * @param myQuickLogin 数据对象 */ @Override @Transactional - public void save(MyPageIndex myPageIndex) { - super.save(myPageIndex); + public void save(MyQuickLogin myQuickLogin) { + super.save(myQuickLogin); } /** @@ -75,16 +75,16 @@ public class MyPageIndexService extends CrudService StringBuilder successMsg = new StringBuilder(); StringBuilder failureMsg = new StringBuilder(); try(ExcelImport ei = new ExcelImport(file, 2, 0)){ - List list = ei.getDataList(MyPageIndex.class); - for (MyPageIndex myPageIndex : list) { + List list = ei.getDataList(MyQuickLogin.class); + for (MyQuickLogin myQuickLogin : list) { try{ - ValidatorUtils.validateWithException(myPageIndex); - this.save(myPageIndex); + ValidatorUtils.validateWithException(myQuickLogin); + this.save(myQuickLogin); successNum++; - successMsg.append("
" + successNum + "、编号 " + myPageIndex.getId() + " 导入成功"); + successMsg.append("
" + successNum + "、编号 " + myQuickLogin.getId() + " 导入成功"); } catch (Exception e) { failureNum++; - String msg = "
" + failureNum + "、编号 " + myPageIndex.getId() + " 导入失败:"; + String msg = "
" + failureNum + "、编号 " + myQuickLogin.getId() + " 导入失败:"; if (e instanceof ConstraintViolationException){ ConstraintViolationException cve = (ConstraintViolationException)e; for (ConstraintViolation violation : cve.getConstraintViolations()) { @@ -113,22 +113,22 @@ public class MyPageIndexService extends CrudService /** * 更新状态 - * @param myPageIndex 数据对象 + * @param myQuickLogin 数据对象 */ @Override @Transactional - public void updateStatus(MyPageIndex myPageIndex) { - super.updateStatus(myPageIndex); + public void updateStatus(MyQuickLogin myQuickLogin) { + super.updateStatus(myQuickLogin); } /** * 删除数据 - * @param myPageIndex 数据对象 + * @param myQuickLogin 数据对象 */ @Override @Transactional - public void delete(MyPageIndex myPageIndex) { - super.delete(myPageIndex); + public void delete(MyQuickLogin myQuickLogin) { + super.delete(myQuickLogin); } } \ No newline at end of file diff --git a/web-api/src/main/java/com/jeesite/modules/biz/web/MyCitiesController.java b/web-api/src/main/java/com/jeesite/modules/biz/web/MyCitiesController.java index 2230275..8edd62c 100644 --- a/web-api/src/main/java/com/jeesite/modules/biz/web/MyCitiesController.java +++ b/web-api/src/main/java/com/jeesite/modules/biz/web/MyCitiesController.java @@ -1,6 +1,7 @@ package com.jeesite.modules.biz.web; import java.util.List; + import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; @@ -26,6 +27,7 @@ import com.jeesite.modules.biz.service.MyCitiesService; /** * 城市信息 Controller + * * @author gaoxq * @version 2026-03-21 */ @@ -33,114 +35,123 @@ import com.jeesite.modules.biz.service.MyCitiesService; @RequestMapping(value = "${adminPath}/biz/myCities") public class MyCitiesController extends BaseController { - private final MyCitiesService myCitiesService; + private final MyCitiesService myCitiesService; - public MyCitiesController(MyCitiesService myCitiesService) { - this.myCitiesService = myCitiesService; - } - - /** - * 获取数据 - */ - @ModelAttribute - public MyCities get(String cityId, boolean isNewRecord) { - return myCitiesService.get(cityId, isNewRecord); - } - - /** - * 查询列表 - */ - @RequiresPermissions("biz:myCities:view") - @RequestMapping(value = {"list", ""}) - public String list(MyCities myCities, Model model) { - model.addAttribute("myCities", myCities); - return "modules/biz/myCitiesList"; - } - - /** - * 查询列表数据 - */ - @RequiresPermissions("biz:myCities:view") - @RequestMapping(value = "listData") - @ResponseBody - public Page listData(MyCities myCities, HttpServletRequest request, HttpServletResponse response) { - myCities.setPage(new Page<>(request, response)); - Page page = myCitiesService.findPage(myCities); - return page; - } + public MyCitiesController(MyCitiesService myCitiesService) { + this.myCitiesService = myCitiesService; + } - /** - * 查看编辑表单 - */ - @RequiresPermissions("biz:myCities:view") - @RequestMapping(value = "form") - public String form(MyCities myCities, Model model) { - model.addAttribute("myCities", myCities); - return "modules/biz/myCitiesForm"; - } + /** + * 获取数据 + */ + @ModelAttribute + public MyCities get(String cityId, boolean isNewRecord) { + return myCitiesService.get(cityId, isNewRecord); + } - /** - * 保存数据 - */ - @RequiresPermissions("biz:myCities:edit") - @PostMapping(value = "save") - @ResponseBody - public String save(@Validated MyCities myCities) { - myCitiesService.save(myCities); - return renderResult(Global.TRUE, text("保存城市成功!")); - } + /** + * 查询列表 + */ + @RequiresPermissions("biz:myCities:view") + @RequestMapping(value = {"list", ""}) + public String list(MyCities myCities, Model model) { + model.addAttribute("myCities", myCities); + return "modules/biz/myCitiesList"; + } - /** - * 导出数据 - */ - @RequiresPermissions("biz:myCities:view") - @RequestMapping(value = "exportData") - public void exportData(MyCities myCities, HttpServletResponse response) { - List list = myCitiesService.findList(myCities); - String fileName = "城市" + DateUtils.getDate("yyyyMMddHHmmss") + ".xlsx"; - try(ExcelExport ee = new ExcelExport("城市", MyCities.class)){ - ee.setDataList(list).write(response, fileName); - } - } + /** + * 查询列表数据 + */ + @RequiresPermissions("biz:myCities:view") + @RequestMapping(value = "listData") + @ResponseBody + public Page listData(MyCities myCities, HttpServletRequest request, HttpServletResponse response) { + myCities.setPage(new Page<>(request, response)); + Page page = myCitiesService.findPage(myCities); + return page; + } - /** - * 下载模板 - */ - @RequiresPermissions("biz:myCities:view") - @RequestMapping(value = "importTemplate") - public void importTemplate(HttpServletResponse response) { - MyCities myCities = new MyCities(); - List list = ListUtils.newArrayList(myCities); - String fileName = "城市模板.xlsx"; - try(ExcelExport ee = new ExcelExport("城市", MyCities.class, Type.IMPORT)){ - ee.setDataList(list).write(response, fileName); - } - } + /** + * 查看编辑表单 + */ + @RequiresPermissions("biz:myCities:view") + @RequestMapping(value = "form") + public String form(MyCities myCities, Model model) { + model.addAttribute("myCities", myCities); + return "modules/biz/myCitiesForm"; + } + + /** + * 保存数据 + */ + @RequiresPermissions("biz:myCities:edit") + @PostMapping(value = "save") + @ResponseBody + public String save(@Validated MyCities myCities) { + myCitiesService.save(myCities); + return renderResult(Global.TRUE, text("保存城市成功!")); + } + + /** + * 导出数据 + */ + @RequiresPermissions("biz:myCities:view") + @RequestMapping(value = "exportData") + public void exportData(MyCities myCities, HttpServletResponse response) { + List list = myCitiesService.findList(myCities); + String fileName = "城市" + DateUtils.getDate("yyyyMMddHHmmss") + ".xlsx"; + try (ExcelExport ee = new ExcelExport("城市", MyCities.class)) { + ee.setDataList(list).write(response, fileName); + } + } + + /** + * 下载模板 + */ + @RequiresPermissions("biz:myCities:view") + @RequestMapping(value = "importTemplate") + public void importTemplate(HttpServletResponse response) { + MyCities myCities = new MyCities(); + List list = ListUtils.newArrayList(myCities); + String fileName = "城市模板.xlsx"; + try (ExcelExport ee = new ExcelExport("城市", MyCities.class, Type.IMPORT)) { + ee.setDataList(list).write(response, fileName); + } + } + + /** + * 导入数据 + */ + @ResponseBody + @RequiresPermissions("biz:myCities:edit") + @PostMapping(value = "importData") + public String importData(MultipartFile file) { + try { + String message = myCitiesService.importData(file); + return renderResult(Global.TRUE, "posfull:" + message); + } catch (Exception ex) { + return renderResult(Global.FALSE, "posfull:" + ex.getMessage()); + } + } + + /** + * 删除数据 + */ + @RequiresPermissions("biz:myCities:edit") + @RequestMapping(value = "delete") + @ResponseBody + public String delete(MyCities myCities) { + myCitiesService.delete(myCities); + return renderResult(Global.TRUE, text("删除城市成功!")); + } + + /** + * 列表数据 + */ + @RequestMapping(value = "listAll") + @ResponseBody + public List listAll(MyCities myCities) { + return myCitiesService.findList(myCities); + } - /** - * 导入数据 - */ - @ResponseBody - @RequiresPermissions("biz:myCities:edit") - @PostMapping(value = "importData") - public String importData(MultipartFile file) { - try { - String message = myCitiesService.importData(file); - return renderResult(Global.TRUE, "posfull:"+message); - } catch (Exception ex) { - return renderResult(Global.FALSE, "posfull:"+ex.getMessage()); - } - } - - /** - * 删除数据 - */ - @RequiresPermissions("biz:myCities:edit") - @RequestMapping(value = "delete") - @ResponseBody - public String delete(MyCities myCities) { - myCitiesService.delete(myCities); - return renderResult(Global.TRUE, text("删除城市成功!")); - } - } \ No newline at end of file diff --git a/web-api/src/main/java/com/jeesite/modules/biz/web/MyMunicipalitiesController.java b/web-api/src/main/java/com/jeesite/modules/biz/web/MyMunicipalitiesController.java new file mode 100644 index 0000000..c38a93f --- /dev/null +++ b/web-api/src/main/java/com/jeesite/modules/biz/web/MyMunicipalitiesController.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.MyMunicipalities; +import com.jeesite.modules.biz.service.MyMunicipalitiesService; + +/** + * 社区信息 Controller + * @author gaoxq + * @version 2026-03-27 + */ +@Controller +@RequestMapping(value = "${adminPath}/biz/myMunicipalities") +public class MyMunicipalitiesController extends BaseController { + + private final MyMunicipalitiesService myMunicipalitiesService; + + public MyMunicipalitiesController(MyMunicipalitiesService myMunicipalitiesService) { + this.myMunicipalitiesService = myMunicipalitiesService; + } + + /** + * 获取数据 + */ + @ModelAttribute + public MyMunicipalities get(String municipalityId, boolean isNewRecord) { + return myMunicipalitiesService.get(municipalityId, isNewRecord); + } + + /** + * 查询列表 + */ + @RequiresPermissions("biz:myMunicipalities:view") + @RequestMapping(value = {"list", ""}) + public String list(MyMunicipalities myMunicipalities, Model model) { + model.addAttribute("myMunicipalities", myMunicipalities); + return "modules/biz/myMunicipalitiesList"; + } + + /** + * 查询列表数据 + */ + @RequiresPermissions("biz:myMunicipalities:view") + @RequestMapping(value = "listData") + @ResponseBody + public Page listData(MyMunicipalities myMunicipalities, HttpServletRequest request, HttpServletResponse response) { + myMunicipalities.setPage(new Page<>(request, response)); + Page page = myMunicipalitiesService.findPage(myMunicipalities); + return page; + } + + /** + * 查看编辑表单 + */ + @RequiresPermissions("biz:myMunicipalities:view") + @RequestMapping(value = "form") + public String form(MyMunicipalities myMunicipalities, Model model) { + model.addAttribute("myMunicipalities", myMunicipalities); + return "modules/biz/myMunicipalitiesForm"; + } + + /** + * 保存数据 + */ + @RequiresPermissions("biz:myMunicipalities:edit") + @PostMapping(value = "save") + @ResponseBody + public String save(@Validated MyMunicipalities myMunicipalities) { + myMunicipalitiesService.save(myMunicipalities); + return renderResult(Global.TRUE, text("保存社区成功!")); + } + + /** + * 导出数据 + */ + @RequiresPermissions("biz:myMunicipalities:view") + @RequestMapping(value = "exportData") + public void exportData(MyMunicipalities myMunicipalities, HttpServletResponse response) { + List list = myMunicipalitiesService.findList(myMunicipalities); + String fileName = "社区" + DateUtils.getDate("yyyyMMddHHmmss") + ".xlsx"; + try(ExcelExport ee = new ExcelExport("社区", MyMunicipalities.class)){ + ee.setDataList(list).write(response, fileName); + } + } + + /** + * 下载模板 + */ + @RequiresPermissions("biz:myMunicipalities:view") + @RequestMapping(value = "importTemplate") + public void importTemplate(HttpServletResponse response) { + MyMunicipalities myMunicipalities = new MyMunicipalities(); + List list = ListUtils.newArrayList(myMunicipalities); + String fileName = "社区模板.xlsx"; + try(ExcelExport ee = new ExcelExport("社区", MyMunicipalities.class, Type.IMPORT)){ + ee.setDataList(list).write(response, fileName); + } + } + + /** + * 导入数据 + */ + @ResponseBody + @RequiresPermissions("biz:myMunicipalities:edit") + @PostMapping(value = "importData") + public String importData(MultipartFile file) { + try { + String message = myMunicipalitiesService.importData(file); + return renderResult(Global.TRUE, "posfull:"+message); + } catch (Exception ex) { + return renderResult(Global.FALSE, "posfull:"+ex.getMessage()); + } + } + + /** + * 删除数据 + */ + @RequiresPermissions("biz:myMunicipalities:edit") + @RequestMapping(value = "delete") + @ResponseBody + public String delete(MyMunicipalities myMunicipalities) { + myMunicipalitiesService.delete(myMunicipalities); + return renderResult(Global.TRUE, text("删除社区成功!")); + } + +} \ No newline at end of file diff --git a/web-api/src/main/java/com/jeesite/modules/biz/web/MyNoticeTodoController.java b/web-api/src/main/java/com/jeesite/modules/biz/web/MyNoticeTodoController.java index 9f4beef..b52db8a 100644 --- a/web-api/src/main/java/com/jeesite/modules/biz/web/MyNoticeTodoController.java +++ b/web-api/src/main/java/com/jeesite/modules/biz/web/MyNoticeTodoController.java @@ -99,6 +99,7 @@ public class MyNoticeTodoController extends BaseController { @ResponseBody public String save(@Validated MyNoticeTodo myNoticeTodo) { User user = UserUtils.getUser(); + myNoticeTodo.setUstatus("0"); myNoticeTodo.setAvatar(user.getAvatar()); myNoticeTodo.setCreateUser(user.getLoginCode()); myNoticeTodoService.save(myNoticeTodo); @@ -158,6 +159,18 @@ public class MyNoticeTodoController extends BaseController { return renderResult(Global.TRUE, text("删除消息成功!")); } + /** + * 发布数据 + */ + @RequestMapping(value = "publish") + @ResponseBody + public String publish(MyNoticeTodo myNoticeTodo) { + MyNoticeTodo noticeTodo = myNoticeTodoService.get(myNoticeTodo); + noticeTodo.setUstatus("1"); + myNoticeTodoService.save(noticeTodo); + return renderResult(Global.TRUE, text("发布消息成功!")); + } + @RequestMapping(value = "listAll") @ResponseBody public List listAll(MyNoticeTodo myNoticeTodo) { diff --git a/web-api/src/main/java/com/jeesite/modules/biz/web/MyPageIndexController.java b/web-api/src/main/java/com/jeesite/modules/biz/web/MyPageIndexController.java deleted file mode 100644 index 7550af3..0000000 --- a/web-api/src/main/java/com/jeesite/modules/biz/web/MyPageIndexController.java +++ /dev/null @@ -1,157 +0,0 @@ -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.MyPageIndex; -import com.jeesite.modules.biz.service.MyPageIndexService; - -/** - * 指标数据表 Controller - * - * @author gaoxq - * @version 2026-03-23 - */ -@Controller -@RequestMapping(value = "${adminPath}/biz/myPageIndex") -public class MyPageIndexController extends BaseController { - - private final MyPageIndexService myPageIndexService; - - public MyPageIndexController(MyPageIndexService myPageIndexService) { - this.myPageIndexService = myPageIndexService; - } - - /** - * 获取数据 - */ - @ModelAttribute - public MyPageIndex get(String indexId, boolean isNewRecord) { - return myPageIndexService.get(indexId, isNewRecord); - } - - /** - * 查询列表 - */ - @RequiresPermissions("biz:myPageIndex:view") - @RequestMapping(value = {"list", ""}) - public String list(MyPageIndex myPageIndex, Model model) { - model.addAttribute("myPageIndex", myPageIndex); - return "modules/biz/myPageIndexList"; - } - - /** - * 查询列表数据 - */ - @RequiresPermissions("biz:myPageIndex:view") - @RequestMapping(value = "listData") - @ResponseBody - public Page listData(MyPageIndex myPageIndex, HttpServletRequest request, HttpServletResponse response) { - myPageIndex.setPage(new Page<>(request, response)); - Page page = myPageIndexService.findPage(myPageIndex); - return page; - } - - /** - * 查看编辑表单 - */ - @RequiresPermissions("biz:myPageIndex:view") - @RequestMapping(value = "form") - public String form(MyPageIndex myPageIndex, Model model) { - model.addAttribute("myPageIndex", myPageIndex); - return "modules/biz/myPageIndexForm"; - } - - /** - * 保存数据 - */ - @RequiresPermissions("biz:myPageIndex:edit") - @PostMapping(value = "save") - @ResponseBody - public String save(@Validated MyPageIndex myPageIndex) { - myPageIndexService.save(myPageIndex); - return renderResult(Global.TRUE, text("保存指标成功!")); - } - - /** - * 导出数据 - */ - @RequiresPermissions("biz:myPageIndex:view") - @RequestMapping(value = "exportData") - public void exportData(MyPageIndex myPageIndex, HttpServletResponse response) { - List list = myPageIndexService.findList(myPageIndex); - String fileName = "指标" + DateUtils.getDate("yyyyMMddHHmmss") + ".xlsx"; - try (ExcelExport ee = new ExcelExport("指标", MyPageIndex.class)) { - ee.setDataList(list).write(response, fileName); - } - } - - /** - * 下载模板 - */ - @RequiresPermissions("biz:myPageIndex:view") - @RequestMapping(value = "importTemplate") - public void importTemplate(HttpServletResponse response) { - MyPageIndex myPageIndex = new MyPageIndex(); - List list = ListUtils.newArrayList(myPageIndex); - String fileName = "指标模板.xlsx"; - try (ExcelExport ee = new ExcelExport("指标", MyPageIndex.class, Type.IMPORT)) { - ee.setDataList(list).write(response, fileName); - } - } - - /** - * 导入数据 - */ - @ResponseBody - @RequiresPermissions("biz:myPageIndex:edit") - @PostMapping(value = "importData") - public String importData(MultipartFile file) { - try { - String message = myPageIndexService.importData(file); - return renderResult(Global.TRUE, "posfull:" + message); - } catch (Exception ex) { - return renderResult(Global.FALSE, "posfull:" + ex.getMessage()); - } - } - - /** - * 删除数据 - */ - @RequiresPermissions("biz:myPageIndex:edit") - @RequestMapping(value = "delete") - @ResponseBody - public String delete(MyPageIndex myPageIndex) { - myPageIndexService.delete(myPageIndex); - return renderResult(Global.TRUE, text("删除指标成功!")); - } - - /** - * 列表数据 - */ - @RequestMapping(value = "listAll") - @ResponseBody - public List listAll(MyPageIndex myPageIndex) { - return myPageIndexService.findList(myPageIndex); - } - -} \ No newline at end of file diff --git a/web-api/src/main/java/com/jeesite/modules/biz/web/MyQuickLoginController.java b/web-api/src/main/java/com/jeesite/modules/biz/web/MyQuickLoginController.java new file mode 100644 index 0000000..558705b --- /dev/null +++ b/web-api/src/main/java/com/jeesite/modules/biz/web/MyQuickLoginController.java @@ -0,0 +1,152 @@ +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.MyQuickLogin; +import com.jeesite.modules.biz.service.MyQuickLoginService; + +/** + * 快捷登录 Controller + * @author gaoxq + * @version 2026-03-27 + */ +@Controller +@RequestMapping(value = "${adminPath}/biz/myQuickLogin") +public class MyQuickLoginController extends BaseController { + + private final MyQuickLoginService myQuickLoginService; + + public MyQuickLoginController(MyQuickLoginService myQuickLoginService) { + this.myQuickLoginService = myQuickLoginService; + } + + /** + * 获取数据 + */ + @ModelAttribute + public MyQuickLogin get(String quickId, boolean isNewRecord) { + return myQuickLoginService.get(quickId, isNewRecord); + } + + /** + * 查询列表 + */ + @RequiresPermissions("biz:myQuickLogin:view") + @RequestMapping(value = {"list", ""}) + public String list(MyQuickLogin myQuickLogin, Model model) { + model.addAttribute("myQuickLogin", myQuickLogin); + return "modules/biz/myQuickLoginList"; + } + + /** + * 查询列表数据 + */ + @RequiresPermissions("biz:myQuickLogin:view") + @RequestMapping(value = "listData") + @ResponseBody + public Page listData(MyQuickLogin myQuickLogin, HttpServletRequest request, HttpServletResponse response) { + myQuickLogin.setPage(new Page<>(request, response)); + Page page = myQuickLoginService.findPage(myQuickLogin); + return page; + } + + /** + * 查看编辑表单 + */ + @RequiresPermissions("biz:myQuickLogin:view") + @RequestMapping(value = "form") + public String form(MyQuickLogin myQuickLogin, Model model) { + model.addAttribute("myQuickLogin", myQuickLogin); + return "modules/biz/myQuickLoginForm"; + } + + /** + * 保存数据 + */ + @RequiresPermissions("biz:myQuickLogin:edit") + @PostMapping(value = "save") + @ResponseBody + public String save(@Validated MyQuickLogin myQuickLogin) { + myQuickLoginService.save(myQuickLogin); + return renderResult(Global.TRUE, text("保存快捷登录成功!")); + } + + /** + * 导出数据 + */ + @RequiresPermissions("biz:myQuickLogin:view") + @RequestMapping(value = "exportData") + public void exportData(MyQuickLogin myQuickLogin, HttpServletResponse response) { + List list = myQuickLoginService.findList(myQuickLogin); + String fileName = "快捷登录" + DateUtils.getDate("yyyyMMddHHmmss") + ".xlsx"; + try(ExcelExport ee = new ExcelExport("快捷登录", MyQuickLogin.class)){ + ee.setDataList(list).write(response, fileName); + } + } + + /** + * 下载模板 + */ + @RequiresPermissions("biz:myQuickLogin:view") + @RequestMapping(value = "importTemplate") + public void importTemplate(HttpServletResponse response) { + MyQuickLogin myQuickLogin = new MyQuickLogin(); + List list = ListUtils.newArrayList(myQuickLogin); + String fileName = "快捷登录模板.xlsx"; + try(ExcelExport ee = new ExcelExport("快捷登录", MyQuickLogin.class, Type.IMPORT)){ + ee.setDataList(list).write(response, fileName); + } + } + + /** + * 导入数据 + */ + @ResponseBody + @RequiresPermissions("biz:myQuickLogin:edit") + @PostMapping(value = "importData") + public String importData(MultipartFile file) { + try { + String message = myQuickLoginService.importData(file); + return renderResult(Global.TRUE, "posfull:"+message); + } catch (Exception ex) { + return renderResult(Global.FALSE, "posfull:"+ex.getMessage()); + } + } + + /** + * 删除数据 + */ + @RequiresPermissions("biz:myQuickLogin:edit") + @RequestMapping(value = "delete") + @ResponseBody + public String delete(MyQuickLogin myQuickLogin) { + myQuickLoginService.delete(myQuickLogin); + return renderResult(Global.TRUE, text("删除快捷登录成功!")); + } + + @RequestMapping(value = "listAll") + @ResponseBody + public List listAll(MyQuickLogin myQuickLogin){ + return myQuickLoginService.findList(myQuickLogin); + } + +} \ No newline at end of file diff --git a/web-api/src/main/resources/mappings/modules/biz/MyMunicipalitiesDao.xml b/web-api/src/main/resources/mappings/modules/biz/MyMunicipalitiesDao.xml new file mode 100644 index 0000000..4bb9c3c --- /dev/null +++ b/web-api/src/main/resources/mappings/modules/biz/MyMunicipalitiesDao.xml @@ -0,0 +1,15 @@ + + + + + + + \ No newline at end of file diff --git a/web-api/src/main/resources/mappings/modules/biz/MyQuickLoginDao.xml b/web-api/src/main/resources/mappings/modules/biz/MyQuickLoginDao.xml new file mode 100644 index 0000000..c562946 --- /dev/null +++ b/web-api/src/main/resources/mappings/modules/biz/MyQuickLoginDao.xml @@ -0,0 +1,15 @@ + + + + + + + \ No newline at end of file diff --git a/web-vue/packages/biz/api/biz/myAnalysis.ts b/web-vue/packages/biz/api/biz/myAnalysis.ts index 624643c..4477a85 100644 --- a/web-vue/packages/biz/api/biz/myAnalysis.ts +++ b/web-vue/packages/biz/api/biz/myAnalysis.ts @@ -19,3 +19,6 @@ export interface ChartInfo extends BasicModel { export const HostInfoData = () => defHttp.get({ url: adminPath + '/desktop/analysis/getHostInfo' }); + +export const ProvinceChart = () => +defHttp.get({ url: adminPath + '/desktop/analysis/getProvinceChart' }); diff --git a/web-vue/packages/biz/api/biz/myCities.ts b/web-vue/packages/biz/api/biz/myCities.ts index fce1d07..159e3d6 100644 --- a/web-vue/packages/biz/api/biz/myCities.ts +++ b/web-vue/packages/biz/api/biz/myCities.ts @@ -27,6 +27,9 @@ export interface MyCities extends BasicModel { export const myCitiesList = (params?: MyCities | any) => defHttp.get({ url: adminPath + '/biz/myCities/list', params }); +export const myCitiesListAll = (params?: MyCities | any) => + defHttp.get({ url: adminPath + '/biz/myCities/listAll', params }); + export const myCitiesListData = (params?: MyCities | any) => defHttp.post>({ url: adminPath + '/biz/myCities/listData', params }); diff --git a/web-vue/packages/biz/api/biz/myMunicipalities.ts b/web-vue/packages/biz/api/biz/myMunicipalities.ts new file mode 100644 index 0000000..040339c --- /dev/null +++ b/web-vue/packages/biz/api/biz/myMunicipalities.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 MyMunicipalities extends BasicModel { + municipalityId?: string; // 唯一主键 + createTime?: string; // 记录时间 + countyName?: string; // 县区名称 + provinceCode?: string; // 省份编码 + cityCode?: string; // 市区编码 + countyCode?: string; // 县区编码 + townName?: string; // 街道名称 + townCode?: string; // 街道编号 + villageName?: string; // 社区名称 + villageCode?: string; // 社区编号 + updateTime?: string; // 更新时间 + ustatus?: string; // 状态 +} + +export const myMunicipalitiesList = (params?: MyMunicipalities | any) => + defHttp.get({ url: adminPath + '/biz/myMunicipalities/list', params }); + +export const myMunicipalitiesListData = (params?: MyMunicipalities | any) => + defHttp.post>({ url: adminPath + '/biz/myMunicipalities/listData', params }); + +export const myMunicipalitiesForm = (params?: MyMunicipalities | any) => + defHttp.get({ url: adminPath + '/biz/myMunicipalities/form', params }); + +export const myMunicipalitiesSave = (params?: any, data?: MyMunicipalities | any) => + defHttp.postJson({ url: adminPath + '/biz/myMunicipalities/save', params, data }); + +export const myMunicipalitiesImportData = ( + params: UploadFileParams, + onUploadProgress: (progressEvent: AxiosProgressEvent) => void, +) => + defHttp.uploadFile( + { + url: ctxPath + adminPath + '/biz/myMunicipalities/importData', + onUploadProgress, + }, + params, + ); + +export const myMunicipalitiesDelete = (params?: MyMunicipalities | any) => + defHttp.get({ url: adminPath + '/biz/myMunicipalities/delete', params }); diff --git a/web-vue/packages/biz/api/biz/myNoticeTodo.ts b/web-vue/packages/biz/api/biz/myNoticeTodo.ts index c987eb6..b1f122c 100644 --- a/web-vue/packages/biz/api/biz/myNoticeTodo.ts +++ b/web-vue/packages/biz/api/biz/myNoticeTodo.ts @@ -87,3 +87,6 @@ export const myNoticeTodoImportData = ( export const myNoticeTodoDelete = (params?: MyNoticeTodo | any) => defHttp.get({ url: adminPath + '/biz/myNoticeTodo/delete', params }); + +export const myNoticeTodoPublish = (params?: MyNoticeTodo | any) => + defHttp.get({ url: adminPath + '/biz/myNoticeTodo/publish', params }); diff --git a/web-vue/packages/biz/api/biz/myPageIndex.ts b/web-vue/packages/biz/api/biz/myPageIndex.ts deleted file mode 100644 index 5fcccbd..0000000 --- a/web-vue/packages/biz/api/biz/myPageIndex.ts +++ /dev/null @@ -1,57 +0,0 @@ -/** - * 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 MyPageIndex extends BasicModel { - createTime?: string; // 记录时间 - indexId?: string; // 唯一标识 - module: string; // 模块名称 - moduleCode: string; // 模块编码 - title: string; // 说明描述 - value?: number; // 数值 - label?: string; // 名称 - iconImg: string; // 图片路径 - iconFilter?: string; // 图标颜色 - sort: number; // 序号 - indexCode: string; // 指标编号 -} - -export const myPageIndexList = (params?: MyPageIndex | any) => - defHttp.get({ url: adminPath + '/biz/myPageIndex/list', params }); - -export const myPageIndexListAll = (params?: MyPageIndex | any) => - defHttp.get({ url: adminPath + '/biz/myPageIndex/listAll', params }); - -export const myPageIndexListData = (params?: MyPageIndex | any) => - defHttp.post>({ url: adminPath + '/biz/myPageIndex/listData', params }); - -export const myPageIndexForm = (params?: MyPageIndex | any) => - defHttp.get({ url: adminPath + '/biz/myPageIndex/form', params }); - -export const myPageIndexSave = (params?: any, data?: MyPageIndex | any) => - defHttp.postJson({ url: adminPath + '/biz/myPageIndex/save', params, data }); - -export const myPageIndexImportData = ( - params: UploadFileParams, - onUploadProgress: (progressEvent: AxiosProgressEvent) => void, -) => - defHttp.uploadFile( - { - url: ctxPath + adminPath + '/biz/myPageIndex/importData', - onUploadProgress, - }, - params, - ); - -export const myPageIndexDelete = (params?: MyPageIndex | any) => - defHttp.get({ url: adminPath + '/biz/myPageIndex/delete', params }); diff --git a/web-vue/packages/biz/api/biz/myQuickLogin.ts b/web-vue/packages/biz/api/biz/myQuickLogin.ts new file mode 100644 index 0000000..ded2724 --- /dev/null +++ b/web-vue/packages/biz/api/biz/myQuickLogin.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 MyQuickLogin extends BasicModel { + createTime?: string; // 记录时间 + quickId?: string; // 自增主键 + systemName: string; // 系统名称 + systemType?: string; // 系统类型 + systemUrl?: string; // 首页地址 + systemIcon?: string; // 系统图标 + bgColor?: string; // 图标背景色 + ustatus?: string; // 状态 + updateTime?: string; // 更新时间 +} + +export const myQuickLoginList = (params?: MyQuickLogin | any) => + defHttp.get({ url: adminPath + '/biz/myQuickLogin/list', params }); + +export const myQuickLoginListAll = (params?: MyQuickLogin | any) => + defHttp.get({ url: adminPath + '/biz/myQuickLogin/listAll', params }); + +export const myQuickLoginListData = (params?: MyQuickLogin | any) => + defHttp.post>({ url: adminPath + '/biz/myQuickLogin/listData', params }); + +export const myQuickLoginForm = (params?: MyQuickLogin | any) => + defHttp.get({ url: adminPath + '/biz/myQuickLogin/form', params }); + +export const myQuickLoginSave = (params?: any, data?: MyQuickLogin | any) => + defHttp.postJson({ url: adminPath + '/biz/myQuickLogin/save', params, data }); + +export const myQuickLoginImportData = ( + params: UploadFileParams, + onUploadProgress: (progressEvent: AxiosProgressEvent) => void, +) => + defHttp.uploadFile( + { + url: ctxPath + adminPath + '/biz/myQuickLogin/importData', + onUploadProgress, + }, + params, + ); + +export const myQuickLoginDelete = (params?: MyQuickLogin | any) => + defHttp.get({ url: adminPath + '/biz/myQuickLogin/delete', params }); diff --git a/web-vue/packages/biz/views/biz/myChartInfo/list.vue b/web-vue/packages/biz/views/biz/myChartInfo/list.vue index 9a87e57..12c5d7d 100644 --- a/web-vue/packages/biz/views/biz/myChartInfo/list.vue +++ b/web-vue/packages/biz/views/biz/myChartInfo/list.vue @@ -44,6 +44,8 @@ import InputForm from './form.vue'; const { t } = useI18n('biz.myChartInfo'); + + const { showMessage } = useMessage(); const { meta } = unref(router.currentRoute); const record = ref({} as MyChartInfo); diff --git a/web-vue/packages/biz/views/biz/myMunicipalities/form.vue b/web-vue/packages/biz/views/biz/myMunicipalities/form.vue new file mode 100644 index 0000000..330c48d --- /dev/null +++ b/web-vue/packages/biz/views/biz/myMunicipalities/form.vue @@ -0,0 +1,191 @@ + + + diff --git a/web-vue/packages/biz/views/biz/myMunicipalities/list.vue b/web-vue/packages/biz/views/biz/myMunicipalities/list.vue new file mode 100644 index 0000000..3471203 --- /dev/null +++ b/web-vue/packages/biz/views/biz/myMunicipalities/list.vue @@ -0,0 +1,298 @@ + + + diff --git a/web-vue/packages/biz/views/biz/myNotes/list.vue b/web-vue/packages/biz/views/biz/myNotes/list.vue index 1a82a6d..100d51f 100644 --- a/web-vue/packages/biz/views/biz/myNotes/list.vue +++ b/web-vue/packages/biz/views/biz/myNotes/list.vue @@ -140,14 +140,6 @@ align: 'left', slot: 'bizScopeKey', }, - { - title: t('内容'), - dataIndex: 'content', - key: 'a.content', - sorter: true, - width: 225, - align: 'left', - }, { title: t('级别'), dataIndex: 'priority', diff --git a/web-vue/packages/biz/views/biz/myNoticeTodo/list.vue b/web-vue/packages/biz/views/biz/myNoticeTodo/list.vue index e2e9da5..a81cb3b 100644 --- a/web-vue/packages/biz/views/biz/myNoticeTodo/list.vue +++ b/web-vue/packages/biz/views/biz/myNoticeTodo/list.vue @@ -28,7 +28,7 @@ diff --git a/web-vue/packages/biz/views/biz/myPageIndex/list.vue b/web-vue/packages/biz/views/biz/myQuickLogin/list.vue similarity index 52% rename from web-vue/packages/biz/views/biz/myPageIndex/list.vue rename to web-vue/packages/biz/views/biz/myQuickLogin/list.vue index 5fc8c20..911cf0f 100644 --- a/web-vue/packages/biz/views/biz/myPageIndex/list.vue +++ b/web-vue/packages/biz/views/biz/myQuickLogin/list.vue @@ -14,20 +14,20 @@ {{ t('导出') }} - + {{ t('新增') }} - - + + diff --git a/web-vue/packages/biz/views/biz/myScreen/index.vue b/web-vue/packages/biz/views/biz/myScreen/index.vue index 5018553..09a3abd 100644 --- a/web-vue/packages/biz/views/biz/myScreen/index.vue +++ b/web-vue/packages/biz/views/biz/myScreen/index.vue @@ -1,6 +1,8 @@ - + diff --git a/web-vue/packages/core/layouts/views/desktop/analysis/components/QuickLogin.vue b/web-vue/packages/core/layouts/views/desktop/analysis/components/QuickLogin.vue index 7a7e6dc..6d36fd3 100644 --- a/web-vue/packages/core/layouts/views/desktop/analysis/components/QuickLogin.vue +++ b/web-vue/packages/core/layouts/views/desktop/analysis/components/QuickLogin.vue @@ -21,16 +21,16 @@ }" > @@ -52,55 +52,10 @@ import { ElMessage } from 'element-plus'; import { computed, nextTick, onBeforeUnmount, onMounted, ref } from 'vue'; - interface QuickLoginItem { - id: string; - name: string; - logo: string; - url: string; - } + import { MyQuickLogin, myQuickLoginListAll } from '@jeesite/biz/api/biz/myQuickLogin'; - interface RenderQuickLoginItem extends QuickLoginItem { - renderKey: string; - } - - const baseList = ref([ - { - id: 'oa', - name: '协同办公', - logo: 'https://dummyimage.com/96x96/2563eb/ffffff.png&text=OA', - url: '/oa', - }, - { - id: 'erp', - name: 'ERP系统', - logo: 'https://dummyimage.com/96x96/0891b2/ffffff.png&text=ERP', - url: '/erp', - }, - { - id: 'mes', - name: 'MES平台', - logo: 'https://dummyimage.com/96x96/7c3aed/ffffff.png&text=MES', - url: '/mes', - }, - { - id: 'crm', - name: 'CRM系统', - logo: 'https://dummyimage.com/96x96/ea580c/ffffff.png&text=CRM', - url: '/crm', - }, - { - id: 'hr', - name: '人资门户', - logo: 'https://dummyimage.com/96x96/16a34a/ffffff.png&text=HR', - url: '/hr', - }, - { - id: 'bi', - name: '数据驾驶舱', - logo: 'https://dummyimage.com/96x96/db2777/ffffff.png&text=BI', - url: '/bi', - }, - ]); + const quickData = ref([]); + const loading = ref(false); const itemWidth = 136; const gapWidth = 8; @@ -111,22 +66,15 @@ let resizeObserver: ResizeObserver | null = null; let autoScrollTimer: ReturnType | null = null; - const canScroll = computed(() => baseList.value.length > visibleCount.value); + const canScroll = computed(() => quickData.value.length > visibleCount.value); const maxIndex = computed(() => { - const value = baseList.value.length - visibleCount.value; + const value = quickData.value.length - visibleCount.value; return value > 0 ? value : 0; }); const currentOffset = computed(() => currentIndex.value * stepWidth); - const displayList = computed(() => { - return baseList.value.map((item, index) => ({ - ...item, - renderKey: `${item.id}-${index}`, - })); - }); - function updateVisibleCount() { const width = viewportRef.value?.clientWidth || 0; if (!width) return; @@ -162,11 +110,33 @@ } } - function handleLogin(item: QuickLoginItem) { - ElMessage.success(`准备进入:${item.name}`); + function handleLogin(item: MyQuickLogin) { + window.open(item.systemUrl, '_blank'); + } + + async function getList() { + loading.value = true; + try { + const reqParams = { + ustatus: '1', + systemType: '2', + }; + const res = await myQuickLoginListAll(reqParams); + quickData.value = res || []; + currentIndex.value = 0; + nextTick(() => { + updateVisibleCount(); + startAutoScroll(); + }); + } catch (error) { + quickData.value = []; + } finally { + loading.value = false; + } } onMounted(() => { + getList(); nextTick(() => { updateVisibleCount(); startAutoScroll(); @@ -199,8 +169,8 @@ display: flex; align-items: center; justify-content: space-between; - height: 37px; - padding: 8px 16px; + height: var(--analysis-card-title-height, 37px); + padding: var(--analysis-card-title-padding, 8px 16px); box-sizing: border-box; flex-shrink: 0; font-size: 14px; @@ -214,12 +184,12 @@ .card-content { flex: 1; min-height: 0; - padding: 8px 12px 12px; + padding: var(--analysis-card-content-padding, 8px 12px 12px); overflow: hidden; background: transparent; display: flex; align-items: stretch; - gap: 8px; + gap: var(--analysis-card-item-gap, 8px); height: 100%; } @@ -243,7 +213,7 @@ .quick-login-track { display: flex; - gap: 8px; + gap: var(--analysis-card-item-gap, 8px); align-items: stretch; height: 100%; min-height: 0; @@ -262,7 +232,7 @@ height: 100%; padding: 8px; border: 1px solid rgb(226 232 240); - border-radius: 10px; + border-radius: var(--analysis-card-radius, 10px); background: rgb(255, 255, 255); box-shadow: 0 8px 24px rgb(148 163 184 / 14%); cursor: pointer; @@ -285,7 +255,7 @@ width: 100%; min-height: 0; overflow: hidden; - padding: 8px; + padding: 2px; border-radius: 8px; } @@ -293,7 +263,7 @@ width: 100%; height: 100%; object-fit: cover; - border-radius: 6px; + border-radius: 8px; } &__name { @@ -343,7 +313,7 @@ @media (max-width: 768px) { .quick-login-card { .card-content { - padding: 8px 12px 12px; + padding: var(--analysis-card-content-padding, 8px 12px 12px); } .quick-login-item { diff --git a/web-vue/packages/core/layouts/views/desktop/analysis/components/TodoInfo.vue b/web-vue/packages/core/layouts/views/desktop/analysis/components/TodoInfo.vue index 3666f1f..e34d5df 100644 --- a/web-vue/packages/core/layouts/views/desktop/analysis/components/TodoInfo.vue +++ b/web-vue/packages/core/layouts/views/desktop/analysis/components/TodoInfo.vue @@ -268,8 +268,8 @@ display: flex; align-items: center; justify-content: space-between; - height: 37px; - padding: 8px 16px; + height: var(--analysis-card-title-height, 37px); + padding: var(--analysis-card-title-padding, 8px 16px); box-sizing: border-box; flex-shrink: 0; font-size: 14px; @@ -313,7 +313,7 @@ .card-content { flex: 1; min-height: 0; - padding: 8px 12px 12px; + padding: var(--analysis-card-content-padding, 8px 12px 12px); color: rgb(71 85 105); font-size: 14px; line-height: 22px; diff --git a/web-vue/packages/core/layouts/views/desktop/analysis/index.vue b/web-vue/packages/core/layouts/views/desktop/analysis/index.vue index 693f607..6d7547f 100644 --- a/web-vue/packages/core/layouts/views/desktop/analysis/index.vue +++ b/web-vue/packages/core/layouts/views/desktop/analysis/index.vue @@ -90,12 +90,20 @@ } .mySpring-analysis .analysis-layout { + --analysis-gap: 12px; + --analysis-row-height: calc((100% - var(--analysis-gap) * 2) / 3); + --analysis-double-row-height: calc(var(--analysis-row-height) * 2 + var(--analysis-gap)); + --analysis-card-title-height: 37px; + --analysis-card-title-padding: 8px 16px; + --analysis-card-content-padding: 8px 12px 12px; + --analysis-card-item-gap: 8px; + --analysis-card-radius: 10px; display: flex; width: 100%; height: 100%; max-height: 100%; min-height: 0; - gap: 12px; + gap: var(--analysis-gap); padding: 0; box-sizing: border-box; overflow: hidden; @@ -110,14 +118,14 @@ height: 100%; max-height: 100%; min-height: 0; - gap: 12px; + gap: var(--analysis-gap); box-sizing: border-box; } .mySpring-analysis .analysis-right-top { display: grid; grid-template-rows: repeat(2, minmax(0, 1fr)); - gap: 12px; + gap: var(--analysis-gap); min-width: 0; min-height: 0; } @@ -129,7 +137,7 @@ .mySpring-analysis .analysis-right { flex: 3 1 0; - grid-template-rows: repeat(2, minmax(0, 1fr)); + grid-template-rows: minmax(0, var(--analysis-row-height)) minmax(0, var(--analysis-double-row-height)); } .mySpring-analysis .analysis-panel { @@ -139,7 +147,7 @@ height: 100%; min-width: 0; padding: 0; - border-radius: 10px; + border-radius: var(--analysis-card-radius); border: 1px solid rgb(226 232 240); background: rgb(255, 255, 255); box-shadow: 0 1px 3px rgb(15 23 42 / 0.06); diff --git a/web-vue/packages/core/layouts/views/desktop/workbench/components/NoteInfo.vue b/web-vue/packages/core/layouts/views/desktop/workbench/components/NoteInfo.vue index 3cb672d..8d4d07d 100644 --- a/web-vue/packages/core/layouts/views/desktop/workbench/components/NoteInfo.vue +++ b/web-vue/packages/core/layouts/views/desktop/workbench/components/NoteInfo.vue @@ -142,7 +142,10 @@ { label: '进行中', color: '#3B82F6', field: 'value02' }, { label: '已完成', color: '#10B981', field: 'value03' }, ] as const; - const months = chartData.value.map((item) => item.axisName || '-'); + const months = chartData.value.map((item) => { + const axisName = item.axisName || '-'; + return axisName.endsWith('月') ? axisName : `${axisName}月`; + }); const pendingData = chartData.value.map((item) => Number(item.value01 || 0)); const processingData = chartData.value.map((item) => Number(item.value02 || 0)); const finishedData = chartData.value.map((item) => Number(item.value03 || 0)); diff --git a/web-vue/packages/core/layouts/views/desktop/workbench/index.vue b/web-vue/packages/core/layouts/views/desktop/workbench/index.vue index be8e0c5..0e1e7b1 100644 --- a/web-vue/packages/core/layouts/views/desktop/workbench/index.vue +++ b/web-vue/packages/core/layouts/views/desktop/workbench/index.vue @@ -7,13 +7,15 @@
- -
-
上右
+ +
+
+ 上右 +
-
中左
-
中右
+
下左
+
下右
@@ -46,11 +48,11 @@ .jeesite-workbench .workbench-layout { display: flex; flex-direction: column; - gap: 12px; + gap: 8px; width: 100%; height: 100%; min-height: 0; - padding: 2px; + padding: 0; box-sizing: border-box; overflow: hidden; background: transparent; @@ -60,7 +62,7 @@ .jeesite-workbench .workbench-row { display: flex; flex: 1 1 0; - gap: 12px; + gap: 8px; min-height: 0; } diff --git a/web-vue/packages/erp/api/erp/screen.ts b/web-vue/packages/erp/api/erp/screen.ts index bf2ec07..42610ed 100644 --- a/web-vue/packages/erp/api/erp/screen.ts +++ b/web-vue/packages/erp/api/erp/screen.ts @@ -52,14 +52,28 @@ export interface ChartDataItem extends BasicModel { indexMin: number; // 指标最小 } + +export interface ScreenTop extends BasicModel { + module: string; // 模块名称 + title: string; // 说明描述 + label?: string; // 名称 + value?: number; // 数值 + iconImg: string; // 图片路径 + iconFilter?: string; // 图标颜色 + sort: number; // 序号 +} + +export const ErpChartTop = (params?: ErpTransactionFlow | any) => + defHttp.get({ url: adminPath + '/erp/screen/getErpChartTop', params }); + export const ErpYearChart = (params?: ErpTransactionFlow | any) => defHttp.get({ url: adminPath + '/erp/screen/getErpYearChart', params }); export const ErpMonthChart = (params?: ErpTransactionFlow | any) => defHttp.get({ url: adminPath + '/erp/screen/getErpMonthChart', params }); -export const CategoryChart = (params?: ErpTransactionFlow | any) => - defHttp.get({ url: adminPath + '/erp/screen/getCategoryChart', params }); +export const ErpCategoryChart = (params?: ErpTransactionFlow | any) => + defHttp.get({ url: adminPath + '/erp/screen/getErpCategoryChart', params }); export const ErpAccountChart = (params?: ErpTransactionFlow | any) => defHttp.get({ url: adminPath + '/erp/screen/getErpAccountChart', params });