diff --git a/web-api/src/main/java/com/jeesite/modules/apps/Module/ErpFlowParams.java b/web-api/src/main/java/com/jeesite/modules/apps/Module/Table/ErpFlowParams.java similarity index 52% rename from web-api/src/main/java/com/jeesite/modules/apps/Module/ErpFlowParams.java rename to web-api/src/main/java/com/jeesite/modules/apps/Module/Table/ErpFlowParams.java index db5abd9..1e89106 100644 --- a/web-api/src/main/java/com/jeesite/modules/apps/Module/ErpFlowParams.java +++ b/web-api/src/main/java/com/jeesite/modules/apps/Module/Table/ErpFlowParams.java @@ -1,13 +1,12 @@ -package com.jeesite.modules.apps.Module; +package com.jeesite.modules.apps.Module.Table; +import com.jeesite.modules.apps.Module.cPage; import lombok.Data; import java.io.Serializable; @Data -public class ErpFlowParams implements Serializable { - private Integer pageNum; - private Integer pageSize; +public class ErpFlowParams extends cPage implements Serializable { private String accountId; private String flowName; private String flowType; diff --git a/web-api/src/main/java/com/jeesite/modules/apps/Module/Table/MyDictParams.java b/web-api/src/main/java/com/jeesite/modules/apps/Module/Table/MyDictParams.java new file mode 100644 index 0000000..c9357ac --- /dev/null +++ b/web-api/src/main/java/com/jeesite/modules/apps/Module/Table/MyDictParams.java @@ -0,0 +1,11 @@ +package com.jeesite.modules.apps.Module.Table; + +import lombok.Data; + +import java.io.Serializable; + +@Data +public class MyDictParams implements Serializable { + private String dictType; + private String dictValue; +} diff --git a/web-api/src/main/java/com/jeesite/modules/apps/Module/Table/MyProjectParams.java b/web-api/src/main/java/com/jeesite/modules/apps/Module/Table/MyProjectParams.java new file mode 100644 index 0000000..c5bb508 --- /dev/null +++ b/web-api/src/main/java/com/jeesite/modules/apps/Module/Table/MyProjectParams.java @@ -0,0 +1,16 @@ +package com.jeesite.modules.apps.Module.Table; + +import com.jeesite.modules.apps.Module.cPage; +import lombok.Data; + +import java.io.Serializable; + +@Data +public class MyProjectParams extends cPage implements Serializable { + + private String projectName; + + private String projectType; + + private String projectStatus; +} diff --git a/web-api/src/main/java/com/jeesite/modules/apps/Module/cPage.java b/web-api/src/main/java/com/jeesite/modules/apps/Module/cPage.java new file mode 100644 index 0000000..f316261 --- /dev/null +++ b/web-api/src/main/java/com/jeesite/modules/apps/Module/cPage.java @@ -0,0 +1,12 @@ +package com.jeesite.modules.apps.Module; + +import lombok.Data; + +import java.io.Serializable; + +@Data +public class cPage implements Serializable { + + private Integer pageNum; + private Integer pageSize; +} diff --git a/web-api/src/main/java/com/jeesite/modules/apps/web/DictController.java b/web-api/src/main/java/com/jeesite/modules/apps/web/DictController.java new file mode 100644 index 0000000..7a9bcb4 --- /dev/null +++ b/web-api/src/main/java/com/jeesite/modules/apps/web/DictController.java @@ -0,0 +1,22 @@ +package com.jeesite.modules.apps.web; + +import com.jeesite.modules.apps.Module.Table.MyDictParams; +import com.jeesite.modules.sys.entity.DictData; +import com.jeesite.modules.sys.utils.DictUtils; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.util.List; + +@Controller +@RequestMapping(value = "${adminPath}/biz/dict") +public class DictController { + + + @RequestMapping(value = "dictList") + @ResponseBody + public List getDictList(MyDictParams myDictParams) { + return DictUtils.getDictList(myDictParams.getDictType()); + } +} 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 index 849c28a..84f85ad 100644 --- 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 @@ -1,6 +1,11 @@ package com.jeesite.modules.biz.web; import java.util.List; + + +import com.jeesite.modules.apps.Module.PageResult; +import com.jeesite.modules.apps.Module.Table.MyProjectParams; +import com.jeesite.modules.utils.PageUtil; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; @@ -26,6 +31,7 @@ import com.jeesite.modules.biz.service.MyProjectInfoService; /** * 项目信息 Controller + * * @author gaoxq * @version 2026-03-21 */ @@ -33,123 +39,142 @@ import com.jeesite.modules.biz.service.MyProjectInfoService; @RequestMapping(value = "${adminPath}/biz/myProjectInfo") public class MyProjectInfoController extends BaseController { - private final MyProjectInfoService myProjectInfoService; + 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; - } + public MyProjectInfoController(MyProjectInfoService myProjectInfoService) { + this.myProjectInfoService = myProjectInfoService; + } - /** - * 查看编辑表单 - */ - @RequiresPermissions("biz:myProjectInfo:view") - @RequestMapping(value = "form") - public String form(MyProjectInfo myProjectInfo, Model model) { - model.addAttribute("myProjectInfo", myProjectInfo); - return "modules/biz/myProjectInfoForm"; - } + /** + * 获取数据 + */ + @ModelAttribute + public MyProjectInfo get(String projectId, boolean isNewRecord) { + return myProjectInfoService.get(projectId, isNewRecord); + } - /** - * 保存数据 - */ - @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 = {"list", ""}) + public String list(MyProjectInfo myProjectInfo, Model model) { + model.addAttribute("myProjectInfo", myProjectInfo); + return "modules/biz/myProjectInfoList"; + } - /** - * 导出数据 - */ - @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 = "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 = "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); - } - } + /** + * 查看编辑表单 + */ + @RequiresPermissions("biz:myProjectInfo:view") + @RequestMapping(value = "form") + public String form(MyProjectInfo myProjectInfo, Model model) { + model.addAttribute("myProjectInfo", myProjectInfo); + return "modules/biz/myProjectInfoForm"; + } - /** - * 导入数据 - */ - @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("删除项目成功!")); - } + /** + * 保存数据 + */ + @RequiresPermissions("biz:myProjectInfo:edit") + @PostMapping(value = "save") + @ResponseBody + public String save(@Validated MyProjectInfo myProjectInfo) { + myProjectInfoService.save(myProjectInfo); + return renderResult(Global.TRUE, text("保存项目成功!")); + } - /** - * 列表数据 - */ - @RequestMapping(value = "listAll") - @ResponseBody - public List listAll(MyProjectInfo myProjectInfo){ - return myProjectInfoService.findList(myProjectInfo); - } - + /** + * 导出数据 + */ + @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("删除项目成功!")); + } + + /** + * 列表数据 + */ + @RequestMapping(value = "listAll") + @ResponseBody + public List listAll(MyProjectInfo myProjectInfo) { + return myProjectInfoService.findList(myProjectInfo); + } + + /** + * 列表数据 + */ + @RequestMapping(value = "projectList") + @ResponseBody + public PageResult getProjectList(MyProjectParams myProjectParams) { + MyProjectInfo myProjectInfo = new MyProjectInfo(); + myProjectInfo.setProjectName(myProjectParams.getProjectName()); + myProjectInfo.setProjectType(myProjectParams.getProjectType()); + myProjectInfo.setProjectStatus(myProjectParams.getProjectStatus()); + List list = myProjectInfoService.findList(myProjectInfo); + PageUtil util = new PageUtil<>(myProjectParams.getPageNum(), myProjectParams.getPageSize(), list); + return new PageResult<>( + util.OkData(), + util.getCurPage(), + util.getPageSize(), + util.getTotalCount() + ); + } } \ No newline at end of file diff --git a/web-api/src/main/java/com/jeesite/modules/erp/web/ErpTransactionFlowController.java b/web-api/src/main/java/com/jeesite/modules/erp/web/ErpTransactionFlowController.java index 6f57858..96752c8 100644 --- a/web-api/src/main/java/com/jeesite/modules/erp/web/ErpTransactionFlowController.java +++ b/web-api/src/main/java/com/jeesite/modules/erp/web/ErpTransactionFlowController.java @@ -2,7 +2,7 @@ package com.jeesite.modules.erp.web; import java.util.List; -import com.jeesite.modules.apps.Module.ErpFlowParams; +import com.jeesite.modules.apps.Module.Table.ErpFlowParams; import com.jeesite.modules.apps.Module.PageResult; import com.jeesite.modules.utils.PageUtil; import jakarta.servlet.http.HttpServletRequest; diff --git a/web-vue/packages/biz/api/biz/myProjectInfo.ts b/web-vue/packages/biz/api/biz/myProjectInfo.ts index 85a0c3b..6d794f5 100644 --- a/web-vue/packages/biz/api/biz/myProjectInfo.ts +++ b/web-vue/packages/biz/api/biz/myProjectInfo.ts @@ -31,12 +31,31 @@ export interface MyProjectInfo extends BasicModel { updateTime?: string; // 更新时间 } + +export interface MyProjectParams extends BasicModel { + pageNum: number; // 当前页 + pageSize: number; // 每页条数 + projectName: string; // 项目名称 + projectType: string; // 项目类型 + projectStatus: string; // 项目状态 +} + +export interface PageResult extends BasicModel> { + list: T[]; // 对应后端 List list + currentPage: number; // 当前页 + pageSize: number; // 每页条数 + total: number; // 总条数 +} + export const myProjectInfoList = (params?: MyProjectInfo | any) => defHttp.get({ url: adminPath + '/biz/myProjectInfo/list', params }); export const myProjectInfoListAll = (params?: MyProjectInfo | any) => defHttp.get({ url: adminPath + '/biz/myProjectInfo/listAll', params }); +export const myProjectInfoPageList = (params?: MyProjectParams | any) => + defHttp.get>({ url: adminPath + '/biz/myProjectInfo/projectList', params }); + export const myProjectInfoListData = (params?: MyProjectInfo | any) => defHttp.post>({ url: adminPath + '/biz/myProjectInfo/listData', params }); diff --git a/web-vue/packages/core/layouts/views/desktop/analysis/components/BizApps.vue b/web-vue/packages/core/layouts/views/desktop/analysis/components/BizApps.vue new file mode 100644 index 0000000..0bb6ebf --- /dev/null +++ b/web-vue/packages/core/layouts/views/desktop/analysis/components/BizApps.vue @@ -0,0 +1,211 @@ + + + + + diff --git a/web-vue/packages/core/layouts/views/desktop/analysis/components/HostInfo.vue b/web-vue/packages/core/layouts/views/desktop/analysis/components/HostInfo.vue index f82af29..54d53a7 100644 --- a/web-vue/packages/core/layouts/views/desktop/analysis/components/HostInfo.vue +++ b/web-vue/packages/core/layouts/views/desktop/analysis/components/HostInfo.vue @@ -283,12 +283,16 @@ flex-direction: column; box-sizing: border-box; overflow: hidden; + background: rgb(255, 255, 255); .card-title { display: flex; align-items: center; justify-content: space-between; + height: 37px; padding: 8px 16px; + box-sizing: border-box; + flex-shrink: 0; font-size: 14px; font-weight: 500; line-height: 20px; @@ -322,7 +326,7 @@ .card-content { flex: 1; min-height: 0; - padding: 16px; + padding: 8px 12px 12px; overflow: hidden; background: transparent; } @@ -330,7 +334,7 @@ .host-overview { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); - gap: 12px; + gap: 8px; height: 100%; align-items: stretch; min-height: 0; @@ -343,9 +347,9 @@ min-width: 0; min-height: 160px; padding: 8px; - border-radius: 14px; - background: rgb(248, 250, 252); - box-shadow: 0 10px 28px rgb(148 163 184 / 16%); + border-radius: 10px; + background: rgb(255, 255, 255); + box-shadow: 0 8px 24px rgb(148 163 184 / 14%); overflow: hidden; } @@ -361,7 +365,7 @@ display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); grid-template-rows: repeat(2, minmax(0, 1fr)); - gap: 10px; + gap: 8px; padding: 0; background: transparent; min-width: 0; @@ -376,9 +380,9 @@ justify-content: center; min-width: 0; min-height: 0; - padding: 10px 12px; + padding: 8px; border-radius: 10px; - background: rgb(248, 250, 252); + background: rgb(255, 255, 255); box-shadow: 0 8px 24px rgb(148 163 184 / 14%); overflow: hidden; transition: @@ -387,7 +391,7 @@ background 0.2s ease; &__label { - margin-top: 6px; + margin-top: 4px; color: rgb(71 85 105); font-size: 12px; line-height: 16px; @@ -397,8 +401,8 @@ &__chart { width: 100%; - height: 72px; - min-height: 72px; + height: 68px; + min-height: 68px; } &:hover { @@ -409,6 +413,8 @@ } html[data-theme='dark'] .host-card { + background: rgb(20, 20, 20); + .card-title { color: rgb(203 213 225); border-bottom-color: rgb(51 65 85); @@ -433,7 +439,7 @@ .host-gauge-panel { background: linear-gradient(180deg, rgb(20, 20, 20) 0%, rgb(28 28 28) 100%); - box-shadow: 0 12px 30px rgb(0 0 0 / 28%); + box-shadow: 0 10px 24px rgb(0 0 0 / 24%); } .metric-item { @@ -445,7 +451,7 @@ } &:hover { - box-shadow: 0 14px 32px rgb(37 99 235 / 22%); + box-shadow: 0 12px 28px rgb(96 165 250 / 20%); } } } diff --git a/web-vue/packages/core/layouts/views/desktop/analysis/components/NoticeInfo.vue b/web-vue/packages/core/layouts/views/desktop/analysis/components/NoticeInfo.vue index e62ef50..f96d9ab 100644 --- a/web-vue/packages/core/layouts/views/desktop/analysis/components/NoticeInfo.vue +++ b/web-vue/packages/core/layouts/views/desktop/analysis/components/NoticeInfo.vue @@ -215,12 +215,16 @@ flex-direction: column; box-sizing: border-box; overflow: hidden; + background: rgb(255, 255, 255); .card-title { display: flex; align-items: center; justify-content: space-between; + height: 37px; padding: 8px 16px; + box-sizing: border-box; + flex-shrink: 0; font-size: 14px; font-weight: 500; line-height: 20px; @@ -283,7 +287,7 @@ .el-table { width: 100%; --el-table-border-color: transparent; - --el-table-header-bg-color: rgb(248, 250, 252); + --el-table-header-bg-color: rgb(255, 255, 255); --el-table-tr-bg-color: transparent; --el-table-row-hover-bg-color: rgb(241 245 249); --el-table-text-color: rgb(71 85 105); @@ -305,7 +309,7 @@ } th.el-table__cell { - background: rgb(248, 250, 252); + background: rgb(255, 255, 255); } td.el-table__cell, @@ -350,15 +354,15 @@ } &__divider { - margin: 16px 0; + margin: 12px 0; } &__content-panel, &__attachments-panel { - padding: 2px; + padding: 4px; border: none; - border-radius: 8px; - background: rgb(248 252 255); + border-radius: 10px; + background: rgb(255, 255, 255); box-sizing: border-box; } @@ -366,7 +370,7 @@ margin-top: 16px; padding: 12px; border: 1px solid rgb(219 234 254); - background: rgb(248 252 255); + background: rgb(255, 255, 255); } &__title { @@ -402,7 +406,7 @@ max-height: 320px; padding: 14px 16px; border: 1px solid rgb(191 219 254); - border-radius: 6px; + border-radius: 10px; background: rgb(255 255 255); font-size: 14px; line-height: 24px; @@ -452,8 +456,8 @@ margin-bottom: 12px; padding: 0 12px; border: none; - border-radius: 6px; - background: rgb(239 246 255); + border-radius: 10px; + background: rgb(255, 255, 255); font-size: 14px; font-weight: 600; color: rgb(51 65 85); @@ -492,9 +496,9 @@ gap: 12px; padding: 10px 12px; border: 1px solid rgb(219 234 254); - border-radius: 6px; - background: linear-gradient(180deg, rgb(255 255 255) 0%, rgb(248 250 252) 100%); - box-shadow: 0 6px 16px rgb(148 163 184 / 12%); + border-radius: 10px; + background: rgb(255, 255, 255); + box-shadow: 0 8px 24px rgb(148 163 184 / 14%); font-size: 13px; color: rgb(71 85 105); transition: @@ -549,8 +553,8 @@ &__attachment-item:hover { transform: translateY(-2px); border-color: rgb(147 197 253); - background: linear-gradient(180deg, rgb(239 246 255) 0%, rgb(219 234 254) 100%); - box-shadow: 0 10px 22px rgb(96 165 250 / 18%); + background: rgb(255, 255, 255); + box-shadow: 0 12px 28px rgb(96 165 250 / 20%); color: rgb(30 41 59); } @@ -570,13 +574,13 @@ .el-dialog__header { margin-right: 0; - padding: 12px 12px 10px; + padding: 12px 16px; border-bottom: 1px solid rgb(226 232 240) !important; background: rgb(255 255 255) !important; } .el-dialog__body { - padding: 2px; + padding: 4px 16px 16px; background: rgb(255 255 255) !important; } @@ -587,6 +591,7 @@ html[data-theme='dark'] .notice-card { box-shadow: none; + background: rgb(20, 20, 20); .card-title { color: rgb(203 213 225); @@ -663,7 +668,7 @@ &__attachments-empty { border-color: rgb(71 85 105); background: rgb(20, 20, 20); - box-shadow: 0 6px 16px rgb(2 6 23 / 26%); + box-shadow: 0 10px 24px rgb(0 0 0 / 24%); color: rgb(226 232 240); } @@ -682,7 +687,7 @@ &__attachment-item:hover { border-color: rgb(96 165 250); background: rgb(37 99 235 / 22%); - box-shadow: 0 10px 24px rgb(59 130 246 / 20%); + box-shadow: 0 14px 32px rgb(37 99 235 / 22%); color: rgb(241 245 249); } diff --git a/web-vue/packages/core/layouts/views/desktop/analysis/components/ProjectInfo.vue b/web-vue/packages/core/layouts/views/desktop/analysis/components/ProjectInfo.vue new file mode 100644 index 0000000..1c8fbe6 --- /dev/null +++ b/web-vue/packages/core/layouts/views/desktop/analysis/components/ProjectInfo.vue @@ -0,0 +1,685 @@ + + + + + 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 bfc95cf..7a7e6dc 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 @@ -3,7 +3,6 @@
快捷登录
-
-
右下
+
+ +
@@ -30,10 +34,12 @@