From 52618d491b6197b92471a12d092c0e20f8069909 Mon Sep 17 00:00:00 2001 From: gaoxq <376340421@qq.com> Date: Tue, 24 Mar 2026 22:06:31 +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 --- .../jeesite/modules/apps/Module/TabItem.java | 35 +++ .../jeesite/modules/apps/dict/NotifyType.java | 19 ++ .../modules/biz/dao/MyNoticeTodoDao.java | 15 + .../modules/biz/entity/MyNoticeTodo.java | 131 +++++++++ .../biz/service/MyNoticeTodoService.java | 137 +++++++++ .../biz/web/MyNoticeTodoController.java | 172 +++++++++++ .../mappings/modules/biz/MyNoticeTodoDao.xml | 15 + web-vue/packages/biz/api/biz/myNoticeTodo.ts | 74 +++++ .../packages/biz/views/biz/myNotes/form.vue | 1 + .../biz/views/biz/myNoticeTodo/form.vue | 182 ++++++++++++ .../biz/views/biz/myNoticeTodo/list.vue | 267 ++++++++++++++++++ .../biz/views/biz/myNoticeTodo/select.ts | 226 +++++++++++++++ .../packages/biz/views/biz/myScreen/index.vue | 150 +++++++++- .../header/components/notify/NoticeList.vue | 133 +++++---- .../default/header/components/notify/data.ts | 196 ------------- .../header/components/notify/index.vue | 51 ++-- .../layouts/views/desktop/about/index.vue | 199 ++++++------- .../layouts/views/desktop/analysis/index.vue | 37 ++- 18 files changed, 1643 insertions(+), 397 deletions(-) create mode 100644 web-api/src/main/java/com/jeesite/modules/apps/Module/TabItem.java create mode 100644 web-api/src/main/java/com/jeesite/modules/apps/dict/NotifyType.java create mode 100644 web-api/src/main/java/com/jeesite/modules/biz/dao/MyNoticeTodoDao.java create mode 100644 web-api/src/main/java/com/jeesite/modules/biz/entity/MyNoticeTodo.java create mode 100644 web-api/src/main/java/com/jeesite/modules/biz/service/MyNoticeTodoService.java create mode 100644 web-api/src/main/java/com/jeesite/modules/biz/web/MyNoticeTodoController.java create mode 100644 web-api/src/main/resources/mappings/modules/biz/MyNoticeTodoDao.xml create mode 100644 web-vue/packages/biz/api/biz/myNoticeTodo.ts create mode 100644 web-vue/packages/biz/views/biz/myNoticeTodo/form.vue create mode 100644 web-vue/packages/biz/views/biz/myNoticeTodo/list.vue create mode 100644 web-vue/packages/biz/views/biz/myNoticeTodo/select.ts delete mode 100644 web-vue/packages/core/layouts/default/header/components/notify/data.ts diff --git a/web-api/src/main/java/com/jeesite/modules/apps/Module/TabItem.java b/web-api/src/main/java/com/jeesite/modules/apps/Module/TabItem.java new file mode 100644 index 0000000..13c09fd --- /dev/null +++ b/web-api/src/main/java/com/jeesite/modules/apps/Module/TabItem.java @@ -0,0 +1,35 @@ +package com.jeesite.modules.apps.Module; + + +import com.jeesite.modules.biz.entity.MyNoticeTodo; +import lombok.Data; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; + +@Data +public class TabItem implements Serializable { + + + private String key; + private String name; + + private Integer count; + private String btnHref; + private String btnText; + + private List list = new ArrayList<>(); + + + public TabItem() { + } + + public TabItem(String key, String name, Integer count, List list) { + this.key = key; + this.name = name; + this.count = count; + this.list = list; + } + +} diff --git a/web-api/src/main/java/com/jeesite/modules/apps/dict/NotifyType.java b/web-api/src/main/java/com/jeesite/modules/apps/dict/NotifyType.java new file mode 100644 index 0000000..b7b900b --- /dev/null +++ b/web-api/src/main/java/com/jeesite/modules/apps/dict/NotifyType.java @@ -0,0 +1,19 @@ +package com.jeesite.modules.apps.dict; + +import lombok.Getter; + +@Getter +public enum NotifyType { + NOTIFICATION("1", "通知"), + MESSAGE("2", "消息"), + TODO("3", "待办"); + + private final String code; + private final String name; + + NotifyType(String code, String name) { + this.code = code; + this.name = name; + } + +} diff --git a/web-api/src/main/java/com/jeesite/modules/biz/dao/MyNoticeTodoDao.java b/web-api/src/main/java/com/jeesite/modules/biz/dao/MyNoticeTodoDao.java new file mode 100644 index 0000000..d6a6bb2 --- /dev/null +++ b/web-api/src/main/java/com/jeesite/modules/biz/dao/MyNoticeTodoDao.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.MyNoticeTodo; + +/** + * 通知待办信息表 DAO 接口 + * @author gaoxq + * @version 2026-03-24 + */ +@MyBatisDao(dataSourceName="work") +public interface MyNoticeTodoDao extends CrudDao { + +} \ No newline at end of file diff --git a/web-api/src/main/java/com/jeesite/modules/biz/entity/MyNoticeTodo.java b/web-api/src/main/java/com/jeesite/modules/biz/entity/MyNoticeTodo.java new file mode 100644 index 0000000..c2df200 --- /dev/null +++ b/web-api/src/main/java/com/jeesite/modules/biz/entity/MyNoticeTodo.java @@ -0,0 +1,131 @@ +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 jakarta.validation.constraints.NotBlank; + +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-24 + */ +@EqualsAndHashCode(callSuper = true) +@Table(name = "my_notice_todo", alias = "a", label = "消息信息", columns = { + @Column(name = "create_time", attrName = "createTime", label = "记录时间", isUpdate = false, isUpdateForce = true), + @Column(name = "id", attrName = "id", label = "唯一标识", isPK = true), + @Column(name = "avatar", attrName = "avatar", label = "头像图标", isQuery = false), + @Column(name = "title", attrName = "title", label = "通知标题", queryType = QueryType.LIKE), + @Column(name = "title_delete", attrName = "titleDelete", label = "删除线", isQuery = false), + @Column(name = "datetime", attrName = "datetime", label = "到期时间"), + @Column(name = "type", attrName = "type", label = "消息类型"), + @Column(name = "read_flag", attrName = "readFlag", label = "是否已读"), + @Column(name = "description", attrName = "description", label = "描述信息", isQuery = false), + @Column(name = "click_close", attrName = "clickClose", label = "是否关闭"), + @Column(name = "extra", attrName = "extra", label = "额外信息", isQuery = false), + @Column(name = "extra_desc", attrName = "extraDesc", label = "待办意见", isQuery = false), + @Column(name = "color", attrName = "color", label = "颜色值", isQuery = false), + @Column(name = "ustatus", attrName = "ustatus", label = "发布状态"), + @Column(name = "update_time", attrName = "updateTime", label = "更新时间", isQuery = false, isUpdateForce = true), + @Column(name = "biz_code", attrName = "bizCode", label = "业务编号", isUpdate = false, isUpdateForce = true), + @Column(name = "user_name", attrName = "userName", label = "接收姓名", isQuery = false), + @Column(name = "create_user", attrName = "createUser", label = "创建用户", isQuery = false, isUpdate = false, isUpdateForce = true), + @Column(name = "login_user", attrName = "loginUser", label = "接收用户"), +}, orderBy = "a.id DESC" +) +@Data +public class MyNoticeTodo extends DataEntity implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + private Date createTime; // 记录时间 + private String avatar; // 头像图标 + private String title; // 通知标题 + private String titleDelete; // 删除线 + private String datetime; // 到期时间 + private String type; // 消息类型 + private String readFlag; // 是否已读 + private String description; // 描述信息 + private String clickClose; // 是否关闭 + private String extra; // 额外信息 + private String extraDesc; // 待办意见 + private String color; // 颜色值 + private String ustatus; // 发布状态 + private Date updateTime; // 更新时间 + private String bizCode; // 业务编号 + private String userName; // 接收姓名 + private String createUser; // 创建用户 + private String loginUser; // 接收用户 + + @ExcelFields({ + @ExcelField(title = "记录时间", attrName = "createTime", align = Align.CENTER, sort = 10, dataFormat = "yyyy-MM-dd hh:mm"), + @ExcelField(title = "唯一标识", attrName = "id", align = Align.CENTER, sort = 20), + @ExcelField(title = "头像图标", attrName = "avatar", align = Align.CENTER, sort = 30), + @ExcelField(title = "通知标题", attrName = "title", align = Align.CENTER, sort = 40), + @ExcelField(title = "删除线", attrName = "titleDelete", align = Align.CENTER, sort = 50), + @ExcelField(title = "到期时间", attrName = "datetime", align = Align.CENTER, sort = 60), + @ExcelField(title = "消息类型", attrName = "type", align = Align.CENTER, sort = 70), + @ExcelField(title = "是否已读", attrName = "readFlag", align = Align.CENTER, sort = 80), + @ExcelField(title = "描述信息", attrName = "description", align = Align.CENTER, sort = 90), + @ExcelField(title = "是否关闭", attrName = "clickClose", align = Align.CENTER, sort = 100), + @ExcelField(title = "额外信息", attrName = "extra", align = Align.CENTER, sort = 110), + @ExcelField(title = "待办意见", attrName = "extraDesc", align = Align.CENTER, sort = 120), + @ExcelField(title = "颜色值", attrName = "color", align = Align.CENTER, sort = 130), + @ExcelField(title = "发布状态", attrName = "ustatus", align = Align.CENTER, sort = 140), + @ExcelField(title = "更新时间", attrName = "updateTime", align = Align.CENTER, sort = 150, dataFormat = "yyyy-MM-dd hh:mm"), + @ExcelField(title = "业务编号", attrName = "bizCode", align = Align.CENTER, sort = 160), + @ExcelField(title = "接收姓名", attrName = "userName", align = Align.CENTER, sort = 170), + @ExcelField(title = "创建用户", attrName = "createUser", align = Align.CENTER, sort = 180), + @ExcelField(title = "接收用户", attrName = "loginUser", align = Align.CENTER, sort = 190), + }) + public MyNoticeTodo() { + this(null); + } + + public MyNoticeTodo(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); + } + + + public Date getDateTime_gte() { + return sqlMap.getWhere().getValue("datetime", QueryType.GTE); + } + + public void setDateTime_gte(Date datetime) { + sqlMap.getWhere().and("datetime", QueryType.GTE, datetime); + } + +} \ No newline at end of file diff --git a/web-api/src/main/java/com/jeesite/modules/biz/service/MyNoticeTodoService.java b/web-api/src/main/java/com/jeesite/modules/biz/service/MyNoticeTodoService.java new file mode 100644 index 0000000..817ffa5 --- /dev/null +++ b/web-api/src/main/java/com/jeesite/modules/biz/service/MyNoticeTodoService.java @@ -0,0 +1,137 @@ +package com.jeesite.modules.biz.service; + +import java.util.List; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import com.jeesite.common.entity.Page; +import com.jeesite.common.service.CrudService; +import com.jeesite.modules.biz.entity.MyNoticeTodo; +import com.jeesite.modules.biz.dao.MyNoticeTodoDao; +import com.jeesite.common.service.ServiceException; +import com.jeesite.modules.file.utils.FileUploadUtils; +import com.jeesite.common.config.Global; +import com.jeesite.common.validator.ValidatorUtils; +import com.jeesite.common.utils.excel.ExcelImport; +import org.springframework.web.multipart.MultipartFile; +import jakarta.validation.ConstraintViolation; +import jakarta.validation.ConstraintViolationException; + +/** + * 通知待办信息表 Service + * @author gaoxq + * @version 2026-03-24 + */ +@Service +public class MyNoticeTodoService extends CrudService { + + /** + * 获取单条数据 + * @param myNoticeTodo 主键 + */ + @Override + public MyNoticeTodo get(MyNoticeTodo myNoticeTodo) { + return super.get(myNoticeTodo); + } + + /** + * 查询分页数据 + * @param myNoticeTodo 查询条件 + * @param myNoticeTodo page 分页对象 + */ + @Override + public Page findPage(MyNoticeTodo myNoticeTodo) { + return super.findPage(myNoticeTodo); + } + + /** + * 查询列表数据 + * @param myNoticeTodo 查询条件 + */ + @Override + public List findList(MyNoticeTodo myNoticeTodo) { + return super.findList(myNoticeTodo); + } + + /** + * 保存数据(插入或更新) + * @param myNoticeTodo 数据对象 + */ + @Override + @Transactional + public void save(MyNoticeTodo myNoticeTodo) { + super.save(myNoticeTodo); + // 保存上传附件 + FileUploadUtils.saveFileUpload(myNoticeTodo, myNoticeTodo.getId(), "myNoticeTodo_file"); + } + + /** + * 导入数据 + * @param file 导入的数据文件 + */ + @Transactional + public String importData(MultipartFile file) { + if (file == null){ + throw new ServiceException(text("请选择导入的数据文件!")); + } + int successNum = 0; int failureNum = 0; + StringBuilder successMsg = new StringBuilder(); + StringBuilder failureMsg = new StringBuilder(); + try(ExcelImport ei = new ExcelImport(file, 2, 0)){ + List list = ei.getDataList(MyNoticeTodo.class); + for (MyNoticeTodo myNoticeTodo : list) { + try{ + ValidatorUtils.validateWithException(myNoticeTodo); + this.save(myNoticeTodo); + successNum++; + successMsg.append("
" + successNum + "、编号 " + myNoticeTodo.getId() + " 导入成功"); + } catch (Exception e) { + failureNum++; + String msg = "
" + failureNum + "、编号 " + myNoticeTodo.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 myNoticeTodo 数据对象 + */ + @Override + @Transactional + public void updateStatus(MyNoticeTodo myNoticeTodo) { + super.updateStatus(myNoticeTodo); + } + + /** + * 删除数据 + * @param myNoticeTodo 数据对象 + */ + @Override + @Transactional + public void delete(MyNoticeTodo myNoticeTodo) { + super.delete(myNoticeTodo); + } + +} \ 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 new file mode 100644 index 0000000..6353fc6 --- /dev/null +++ b/web-api/src/main/java/com/jeesite/modules/biz/web/MyNoticeTodoController.java @@ -0,0 +1,172 @@ +package com.jeesite.modules.biz.web; + +import java.util.*; +import java.util.stream.Collectors; + +import com.jeesite.modules.apps.Module.TabItem; +import com.jeesite.modules.apps.dict.NotifyType; +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.MyNoticeTodo; +import com.jeesite.modules.biz.service.MyNoticeTodoService; + +/** + * 通知待办信息表 Controller + * + * @author gaoxq + * @version 2026-03-24 + */ +@Controller +@RequestMapping(value = "${adminPath}/biz/myNoticeTodo") +public class MyNoticeTodoController extends BaseController { + + private final MyNoticeTodoService myNoticeTodoService; + + public MyNoticeTodoController(MyNoticeTodoService myNoticeTodoService) { + this.myNoticeTodoService = myNoticeTodoService; + } + + /** + * 获取数据 + */ + @ModelAttribute + public MyNoticeTodo get(String id, boolean isNewRecord) { + return myNoticeTodoService.get(id, isNewRecord); + } + + /** + * 查询列表 + */ + @RequiresPermissions("biz:myNoticeTodo:view") + @RequestMapping(value = {"list", ""}) + public String list(MyNoticeTodo myNoticeTodo, Model model) { + model.addAttribute("myNoticeTodo", myNoticeTodo); + return "modules/biz/myNoticeTodoList"; + } + + /** + * 查询列表数据 + */ + @RequiresPermissions("biz:myNoticeTodo:view") + @RequestMapping(value = "listData") + @ResponseBody + public Page listData(MyNoticeTodo myNoticeTodo, HttpServletRequest request, HttpServletResponse response) { + myNoticeTodo.setPage(new Page<>(request, response)); + Page page = myNoticeTodoService.findPage(myNoticeTodo); + return page; + } + + /** + * 查看编辑表单 + */ + @RequiresPermissions("biz:myNoticeTodo:view") + @RequestMapping(value = "form") + public String form(MyNoticeTodo myNoticeTodo, Model model) { + model.addAttribute("myNoticeTodo", myNoticeTodo); + return "modules/biz/myNoticeTodoForm"; + } + + /** + * 保存数据 + */ + @RequiresPermissions("biz:myNoticeTodo:edit") + @PostMapping(value = "save") + @ResponseBody + public String save(@Validated MyNoticeTodo myNoticeTodo) { + myNoticeTodoService.save(myNoticeTodo); + return renderResult(Global.TRUE, text("保存消息成功!")); + } + + /** + * 导出数据 + */ + @RequiresPermissions("biz:myNoticeTodo:view") + @RequestMapping(value = "exportData") + public void exportData(MyNoticeTodo myNoticeTodo, HttpServletResponse response) { + List list = myNoticeTodoService.findList(myNoticeTodo); + String fileName = "消息" + DateUtils.getDate("yyyyMMddHHmmss") + ".xlsx"; + try (ExcelExport ee = new ExcelExport("消息", MyNoticeTodo.class)) { + ee.setDataList(list).write(response, fileName); + } + } + + /** + * 下载模板 + */ + @RequiresPermissions("biz:myNoticeTodo:view") + @RequestMapping(value = "importTemplate") + public void importTemplate(HttpServletResponse response) { + MyNoticeTodo myNoticeTodo = new MyNoticeTodo(); + List list = ListUtils.newArrayList(myNoticeTodo); + String fileName = "消息模板.xlsx"; + try (ExcelExport ee = new ExcelExport("消息", MyNoticeTodo.class, Type.IMPORT)) { + ee.setDataList(list).write(response, fileName); + } + } + + /** + * 导入数据 + */ + @ResponseBody + @RequiresPermissions("biz:myNoticeTodo:edit") + @PostMapping(value = "importData") + public String importData(MultipartFile file) { + try { + String message = myNoticeTodoService.importData(file); + return renderResult(Global.TRUE, "posfull:" + message); + } catch (Exception ex) { + return renderResult(Global.FALSE, "posfull:" + ex.getMessage()); + } + } + + /** + * 删除数据 + */ + @RequiresPermissions("biz:myNoticeTodo:edit") + @RequestMapping(value = "delete") + @ResponseBody + public String delete(MyNoticeTodo myNoticeTodo) { + myNoticeTodoService.delete(myNoticeTodo); + return renderResult(Global.TRUE, text("删除消息成功!")); + } + + + @RequestMapping(value = "tabListData") + @ResponseBody + public List getTabListData(MyNoticeTodo myNoticeTodo) { + Set targetCodes = new HashSet<>(Arrays.asList("2", "3")); + return Arrays.stream(NotifyType.values()) + .map(type -> { + MyNoticeTodo listItem = new MyNoticeTodo(); + listItem.setClickClose("0"); + listItem.setUstatus("1"); + listItem.setType(type.getCode()); + listItem.setDateTime_gte(new Date()); + if (targetCodes.contains(type.getCode())) { + listItem.setLoginUser(myNoticeTodo.getLoginUser()); + } + List dataList = myNoticeTodoService.findList(listItem); + return new TabItem(type.getCode(), type.getName(), dataList.size(), dataList); + }) + .collect(Collectors.toList()); + } + +} \ No newline at end of file diff --git a/web-api/src/main/resources/mappings/modules/biz/MyNoticeTodoDao.xml b/web-api/src/main/resources/mappings/modules/biz/MyNoticeTodoDao.xml new file mode 100644 index 0000000..f12f8d3 --- /dev/null +++ b/web-api/src/main/resources/mappings/modules/biz/MyNoticeTodoDao.xml @@ -0,0 +1,15 @@ + + + + + + + \ No newline at end of file diff --git a/web-vue/packages/biz/api/biz/myNoticeTodo.ts b/web-vue/packages/biz/api/biz/myNoticeTodo.ts new file mode 100644 index 0000000..02219f5 --- /dev/null +++ b/web-vue/packages/biz/api/biz/myNoticeTodo.ts @@ -0,0 +1,74 @@ +/** + * 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 MyNoticeTodo extends BasicModel { + createTime?: string; // 记录时间 + avatar?: string; // 头像图标 + title: string; // 通知标题 + titleDelete?: string; // 删除线 + datetime?: string; // 到期时间 + type?: string; // 消息类型 + readFlag?: string; // 是否已读 + description?: string; // 描述信息 + clickClose?: string; // 是否关闭 + extra?: string; // 额外信息 + extraDesc?: string; // 待办意见 + color?: string; // 颜色值 + ustatus?: string; // 发布状态 + updateTime?: string; // 更新时间 + bizCode?: string; // 业务编号 + userName?: string; // 接收姓名 + createUser?: string; // 创建用户 + loginUser?: string; // 接收用户 +} + +export interface TabItem { + key: string; + name: string; + count?: number; + btnHref?: string; + btnText?: string; + list: MyNoticeTodo[]; + unreadlist?: MyNoticeTodo[]; +} + +export const tabListDataAll = (params?: MyNoticeTodo | any) => + defHttp.get({ url: adminPath + '/biz/myNoticeTodo/tabListData', params}); + +export const myNoticeTodoList = (params?: MyNoticeTodo | any) => + defHttp.get({ url: adminPath + '/biz/myNoticeTodo/list', params }); + +export const myNoticeTodoListData = (params?: MyNoticeTodo | any) => + defHttp.post>({ url: adminPath + '/biz/myNoticeTodo/listData', params }); + +export const myNoticeTodoForm = (params?: MyNoticeTodo | any) => + defHttp.get({ url: adminPath + '/biz/myNoticeTodo/form', params }); + +export const myNoticeTodoSave = (params?: any, data?: MyNoticeTodo | any) => + defHttp.postJson({ url: adminPath + '/biz/myNoticeTodo/save', params, data }); + +export const myNoticeTodoImportData = ( + params: UploadFileParams, + onUploadProgress: (progressEvent: AxiosProgressEvent) => void, +) => + defHttp.uploadFile( + { + url: ctxPath + adminPath + '/biz/myNoticeTodo/importData', + onUploadProgress, + }, + params, + ); + +export const myNoticeTodoDelete = (params?: MyNoticeTodo | any) => + defHttp.get({ url: adminPath + '/biz/myNoticeTodo/delete', params }); diff --git a/web-vue/packages/biz/views/biz/myNotes/form.vue b/web-vue/packages/biz/views/biz/myNotes/form.vue index 1261583..53f6cfc 100644 --- a/web-vue/packages/biz/views/biz/myNotes/form.vue +++ b/web-vue/packages/biz/views/biz/myNotes/form.vue @@ -160,6 +160,7 @@ } data[record.value.isNewRecord ? 'createTime' : 'updateTime'] = formatToDateTime(new Date()); + // console.log('submit', params, data, record); const res = await myNotesSave(params, data); showMessage(res.message); diff --git a/web-vue/packages/biz/views/biz/myNoticeTodo/form.vue b/web-vue/packages/biz/views/biz/myNoticeTodo/form.vue new file mode 100644 index 0000000..b026359 --- /dev/null +++ b/web-vue/packages/biz/views/biz/myNoticeTodo/form.vue @@ -0,0 +1,182 @@ + + + diff --git a/web-vue/packages/biz/views/biz/myNoticeTodo/list.vue b/web-vue/packages/biz/views/biz/myNoticeTodo/list.vue new file mode 100644 index 0000000..c08a785 --- /dev/null +++ b/web-vue/packages/biz/views/biz/myNoticeTodo/list.vue @@ -0,0 +1,267 @@ + + + diff --git a/web-vue/packages/biz/views/biz/myNoticeTodo/select.ts b/web-vue/packages/biz/views/biz/myNoticeTodo/select.ts new file mode 100644 index 0000000..9bfe3c2 --- /dev/null +++ b/web-vue/packages/biz/views/biz/myNoticeTodo/select.ts @@ -0,0 +1,226 @@ +import { useI18n } from '@jeesite/core/hooks/web/useI18n'; +import { BasicColumn, BasicTableProps, FormProps } from '@jeesite/core/components/Table'; +import { myNoticeTodoListData } from '@jeesite/biz/api/biz/myNoticeTodo'; + +const { t } = useI18n('biz.myNoticeTodo'); + +const modalProps = { + title: t('消息选择'), +}; + +const searchForm: FormProps = { + baseColProps: { md: 8, lg: 6 }, + labelWidth: 90, + schemas: [ + { + label: t('记录时间起'), + field: 'createTime_gte', + component: 'DatePicker', + componentProps: { + format: 'YYYY-MM-DD HH:mm', + showTime: { format: 'HH:mm' }, + }, + }, + { + label: t('记录时间止'), + field: 'createTime_lte', + component: 'DatePicker', + componentProps: { + format: 'YYYY-MM-DD HH:mm', + showTime: { format: 'HH:mm' }, + }, + }, + { + label: t('通知标题'), + field: 'title', + component: 'Input', + }, + { + label: t('消息类型'), + field: 'type', + component: 'Input', + }, + { + label: t('是否已读'), + field: 'readFlag', + component: 'Input', + }, + { + label: t('是否关闭'), + field: 'clickClose', + component: 'Input', + }, + { + label: t('发布状态'), + field: 'ustatus', + component: 'Input', + }, + ], +}; + +const tableColumns: BasicColumn[] = [ + { + title: t('记录时间'), + dataIndex: 'createTime', + key: 'a.create_time', + sorter: true, + width: 230, + align: 'left', + slot: 'firstColumn', + }, + { + title: t('头像图标'), + dataIndex: 'avatar', + key: 'a.avatar', + sorter: true, + width: 130, + align: 'left', + }, + { + title: t('通知标题'), + dataIndex: 'title', + key: 'a.title', + sorter: true, + width: 130, + align: 'left', + }, + { + title: t('删除线'), + dataIndex: 'titleDelete', + key: 'a.title_delete', + sorter: true, + width: 130, + align: 'left', + }, + { + title: t('到期时间'), + dataIndex: 'datetime', + key: 'a.datetime', + sorter: true, + width: 130, + align: 'left', + }, + { + title: t('消息类型'), + dataIndex: 'type', + key: 'a.type', + sorter: true, + width: 130, + align: 'left', + }, + { + title: t('是否已读'), + dataIndex: 'readFlag', + key: 'a.read_flag', + sorter: true, + width: 130, + align: 'left', + }, + { + title: t('描述信息'), + dataIndex: 'description', + key: 'a.description', + sorter: true, + width: 130, + align: 'left', + }, + { + title: t('是否关闭'), + dataIndex: 'clickClose', + key: 'a.click_close', + sorter: true, + width: 130, + align: 'left', + }, + { + title: t('额外信息'), + dataIndex: 'extra', + key: 'a.extra', + sorter: true, + width: 130, + align: 'left', + }, + { + title: t('待办意见'), + dataIndex: 'extraDesc', + key: 'a.extra_desc', + sorter: true, + width: 130, + align: 'left', + }, + { + title: t('颜色值'), + dataIndex: 'color', + key: 'a.color', + sorter: true, + width: 130, + align: 'left', + }, + { + title: t('发布状态'), + dataIndex: 'ustatus', + key: 'a.ustatus', + sorter: true, + width: 130, + align: 'left', + }, + { + title: t('更新时间'), + dataIndex: 'updateTime', + key: 'a.update_time', + sorter: true, + width: 130, + align: 'center', + }, + { + title: t('业务编号'), + dataIndex: 'bizCode', + key: 'a.biz_code', + sorter: true, + width: 130, + align: 'left', + }, + { + title: t('接收姓名'), + dataIndex: 'userName', + key: 'a.user_name', + sorter: true, + width: 130, + align: 'left', + }, + { + title: t('创建用户'), + dataIndex: 'createUser', + key: 'a.create_user', + sorter: true, + width: 130, + align: 'left', + }, + { + title: t('接收用户'), + dataIndex: 'loginUser', + key: 'a.login_user', + sorter: true, + width: 130, + align: 'left', + }, +]; + +const tableProps: BasicTableProps = { + api: myNoticeTodoListData, + beforeFetch: (params) => { + params['isAll'] = true; + return params; + }, + columns: tableColumns, + formConfig: searchForm, + rowKey: 'id', +}; + +export default { + modalProps, + tableProps, + itemCode: 'id', + itemName: 'id', + isShowCode: false, +}; diff --git a/web-vue/packages/biz/views/biz/myScreen/index.vue b/web-vue/packages/biz/views/biz/myScreen/index.vue index 02409e3..5018553 100644 --- a/web-vue/packages/biz/views/biz/myScreen/index.vue +++ b/web-vue/packages/biz/views/biz/myScreen/index.vue @@ -1,8 +1,150 @@ - + - \ No newline at end of file + diff --git a/web-vue/packages/core/layouts/default/header/components/notify/NoticeList.vue b/web-vue/packages/core/layouts/default/header/components/notify/NoticeList.vue index ec6386e..94337d6 100644 --- a/web-vue/packages/core/layouts/default/header/components/notify/NoticeList.vue +++ b/web-vue/packages/core/layouts/default/header/components/notify/NoticeList.vue @@ -1,19 +1,18 @@ - - - + @@ -23,41 +21,54 @@ + + 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 734e5df..9f26cbd 100644 --- a/web-vue/packages/core/layouts/views/desktop/analysis/index.vue +++ b/web-vue/packages/core/layouts/views/desktop/analysis/index.vue @@ -1,5 +1,5 @@