From 979094126415f4c0c695e21f383f77fadcaa318e Mon Sep 17 00:00:00 2001 From: gaoxq <376340421@qq.com> Date: Fri, 12 Dec 2025 12:37:03 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=89=8D=E7=AB=AFvue?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../modules/biz/dao/BizCalendarFlowDao.java | 15 + .../modules/biz/entity/BizCalendarFlow.java | 60 +++ .../biz/service/BizCalendarFlowService.java | 78 +++ .../biz/web/BizCalendarFlowController.java | 102 ++++ .../web/BizCalendarScheduleController.java | 16 + .../modules/biz/BizCalendarFlowDao.xml | 15 + web-vue/packages/biz/api/biz/calendarFlow.ts | 38 ++ .../workbench/components/calendar/flow.vue | 508 ++++++++++++++++++ .../workbench/components/calendar/form.vue | 4 +- .../workbench/components/calendar/list.vue | 37 +- .../workbench/components/calendar/view.vue | 176 ++++++ 11 files changed, 1042 insertions(+), 7 deletions(-) create mode 100644 web-api/src/main/java/com/jeesite/modules/biz/dao/BizCalendarFlowDao.java create mode 100644 web-api/src/main/java/com/jeesite/modules/biz/entity/BizCalendarFlow.java create mode 100644 web-api/src/main/java/com/jeesite/modules/biz/service/BizCalendarFlowService.java create mode 100644 web-api/src/main/java/com/jeesite/modules/biz/web/BizCalendarFlowController.java create mode 100644 web-api/src/main/resources/mappings/modules/biz/BizCalendarFlowDao.xml create mode 100644 web-vue/packages/biz/api/biz/calendarFlow.ts create mode 100644 web-vue/packages/core/layouts/views/desktop/workbench/components/calendar/flow.vue create mode 100644 web-vue/packages/core/layouts/views/desktop/workbench/components/calendar/view.vue diff --git a/web-api/src/main/java/com/jeesite/modules/biz/dao/BizCalendarFlowDao.java b/web-api/src/main/java/com/jeesite/modules/biz/dao/BizCalendarFlowDao.java new file mode 100644 index 00000000..4f8d2bef --- /dev/null +++ b/web-api/src/main/java/com/jeesite/modules/biz/dao/BizCalendarFlowDao.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.BizCalendarFlow; + +/** + * 日程流程DAO接口 + * @author gaoxq + * @version 2025-12-12 + */ +@MyBatisDao(dataSourceName="work") +public interface BizCalendarFlowDao extends CrudDao { + +} \ No newline at end of file diff --git a/web-api/src/main/java/com/jeesite/modules/biz/entity/BizCalendarFlow.java b/web-api/src/main/java/com/jeesite/modules/biz/entity/BizCalendarFlow.java new file mode 100644 index 00000000..96c79fa3 --- /dev/null +++ b/web-api/src/main/java/com/jeesite/modules/biz/entity/BizCalendarFlow.java @@ -0,0 +1,60 @@ +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.NotNull; +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 lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; + +/** + * 日程流程Entity + * + * @author gaoxq + * @version 2025-12-12 + */ +@EqualsAndHashCode(callSuper = true) +@Table(name = "biz_calendar_flow", alias = "a", label = "日程流程信息", columns = { + @Column(name = "create_time", attrName = "createTime", label = "记录时间", isQuery = false), + @Column(name = "calendar_flow_id", attrName = "calendarFlowId", label = "主键标识", isPK = true), + @Column(name = "schedule_id", attrName = "scheduleId", label = "日程标识"), + @Column(name = "operation_user", attrName = "operationUser", label = "操作人", isQuery = false), + @Column(name = "operation_type", attrName = "operationType", label = "操作类型", isQuery = false), + @Column(name = "status_name", attrName = "statusName", label = "操作状态", isQuery = false), + @Column(name = "flow_content", attrName = "flowContent", label = "流程内容", isQuery = false), +}, orderBy = "a.calendar_flow_id DESC" +) +@Data +public class BizCalendarFlow extends DataEntity implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + private Date createTime; // 记录时间 + private String calendarFlowId; // 主键标识 + private String scheduleId; // 日程标识 + private String operationUser; // 操作人 + private String operationType; // 操作类型 + private String statusName; // 操作状态 + private String flowContent; + + public BizCalendarFlow() { + this(null); + } + + public BizCalendarFlow(String id) { + super(id); + } + +} \ No newline at end of file diff --git a/web-api/src/main/java/com/jeesite/modules/biz/service/BizCalendarFlowService.java b/web-api/src/main/java/com/jeesite/modules/biz/service/BizCalendarFlowService.java new file mode 100644 index 00000000..22d2c8bd --- /dev/null +++ b/web-api/src/main/java/com/jeesite/modules/biz/service/BizCalendarFlowService.java @@ -0,0 +1,78 @@ +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.BizCalendarFlow; +import com.jeesite.modules.biz.dao.BizCalendarFlowDao; + +/** + * 日程流程Service + * @author gaoxq + * @version 2025-12-12 + */ +@Service +public class BizCalendarFlowService extends CrudService { + + /** + * 获取单条数据 + * @param bizCalendarFlow 主键 + */ + @Override + public BizCalendarFlow get(BizCalendarFlow bizCalendarFlow) { + return super.get(bizCalendarFlow); + } + + /** + * 查询分页数据 + * @param bizCalendarFlow 查询条件 + * @param bizCalendarFlow page 分页对象 + */ + @Override + public Page findPage(BizCalendarFlow bizCalendarFlow) { + return super.findPage(bizCalendarFlow); + } + + /** + * 查询列表数据 + * @param bizCalendarFlow 查询条件 + */ + @Override + public List findList(BizCalendarFlow bizCalendarFlow) { + return super.findList(bizCalendarFlow); + } + + /** + * 保存数据(插入或更新) + * @param bizCalendarFlow 数据对象 + */ + @Override + @Transactional + public void save(BizCalendarFlow bizCalendarFlow) { + super.save(bizCalendarFlow); + } + + /** + * 更新状态 + * @param bizCalendarFlow 数据对象 + */ + @Override + @Transactional + public void updateStatus(BizCalendarFlow bizCalendarFlow) { + super.updateStatus(bizCalendarFlow); + } + + /** + * 删除数据 + * @param bizCalendarFlow 数据对象 + */ + @Override + @Transactional + public void delete(BizCalendarFlow bizCalendarFlow) { + super.delete(bizCalendarFlow); + } + +} \ No newline at end of file diff --git a/web-api/src/main/java/com/jeesite/modules/biz/web/BizCalendarFlowController.java b/web-api/src/main/java/com/jeesite/modules/biz/web/BizCalendarFlowController.java new file mode 100644 index 00000000..06ce365d --- /dev/null +++ b/web-api/src/main/java/com/jeesite/modules/biz/web/BizCalendarFlowController.java @@ -0,0 +1,102 @@ +package com.jeesite.modules.biz.web; + +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; + +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import com.jeesite.common.config.Global; +import com.jeesite.common.entity.Page; +import com.jeesite.common.web.BaseController; +import com.jeesite.modules.biz.entity.BizCalendarFlow; +import com.jeesite.modules.biz.service.BizCalendarFlowService; + +import java.util.List; + +/** + * 日程流程Controller + * + * @author gaoxq + * @version 2025-12-12 + */ +@Controller +@RequestMapping(value = "${adminPath}/biz/calendarFlow") +public class BizCalendarFlowController extends BaseController { + + private final BizCalendarFlowService bizCalendarFlowService; + + public BizCalendarFlowController(BizCalendarFlowService bizCalendarFlowService) { + this.bizCalendarFlowService = bizCalendarFlowService; + } + + /** + * 获取数据 + */ + @ModelAttribute + public BizCalendarFlow get(String calendarFlowId, boolean isNewRecord) { + return bizCalendarFlowService.get(calendarFlowId, isNewRecord); + } + + /** + * 查询列表 + */ + @RequestMapping(value = {"list", ""}) + public String list(BizCalendarFlow bizCalendarFlow, Model model) { + model.addAttribute("bizCalendarFlow", bizCalendarFlow); + return "modules/biz/bizCalendarFlowList"; + } + + /** + * 查询列表数据 + */ + @RequestMapping(value = "listData") + @ResponseBody + public Page listData(BizCalendarFlow bizCalendarFlow, HttpServletRequest request, HttpServletResponse response) { + bizCalendarFlow.setPage(new Page<>(request, response)); + Page page = bizCalendarFlowService.findPage(bizCalendarFlow); + return page; + } + + /** + * 查看编辑表单 + */ + + @RequestMapping(value = "form") + public String form(BizCalendarFlow bizCalendarFlow, Model model) { + model.addAttribute("bizCalendarFlow", bizCalendarFlow); + return "modules/biz/bizCalendarFlowForm"; + } + + /** + * 保存数据 + */ + @PostMapping(value = "save") + @ResponseBody + public String save(@Validated BizCalendarFlow bizCalendarFlow) { + bizCalendarFlowService.save(bizCalendarFlow); + return renderResult(Global.TRUE, text("保存日程流程成功!")); + } + + /** + * 删除数据 + */ + @RequestMapping(value = "delete") + @ResponseBody + public String delete(BizCalendarFlow bizCalendarFlow) { + bizCalendarFlowService.delete(bizCalendarFlow); + return renderResult(Global.TRUE, text("删除日程流程成功!")); + } + + @RequestMapping(value = "listAll") + @ResponseBody + public List listAll(BizCalendarFlow bizCalendarFlow) { + return bizCalendarFlowService.findList(bizCalendarFlow); + } + +} \ No newline at end of file diff --git a/web-api/src/main/java/com/jeesite/modules/biz/web/BizCalendarScheduleController.java b/web-api/src/main/java/com/jeesite/modules/biz/web/BizCalendarScheduleController.java index 6bd8afef..86bac269 100644 --- a/web-api/src/main/java/com/jeesite/modules/biz/web/BizCalendarScheduleController.java +++ b/web-api/src/main/java/com/jeesite/modules/biz/web/BizCalendarScheduleController.java @@ -3,8 +3,12 @@ package com.jeesite.modules.biz.web; import java.util.List; import com.jeesite.modules.app.utils.vDate; +import com.jeesite.modules.biz.entity.BizCalendarFlow; +import com.jeesite.modules.biz.service.BizCalendarFlowService; import com.jeesite.modules.sys.entity.User; +import com.jeesite.modules.sys.utils.DictUtils; import com.jeesite.modules.sys.utils.UserUtils; +import jakarta.annotation.Resource; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; @@ -38,6 +42,10 @@ import com.jeesite.modules.biz.service.BizCalendarScheduleService; @RequestMapping(value = "${adminPath}/biz/calendarSchedule") public class BizCalendarScheduleController extends BaseController { + + @Resource + private BizCalendarFlowService flowService; + private final BizCalendarScheduleService bizCalendarScheduleService; public BizCalendarScheduleController(BizCalendarScheduleService bizCalendarScheduleService) { @@ -91,11 +99,19 @@ public class BizCalendarScheduleController extends BaseController { @PostMapping(value = "save") @ResponseBody public String save(@Validated BizCalendarSchedule bizCalendarSchedule) { + boolean isReachable = bizCalendarSchedule.getIsNewRecord(); User user = UserUtils.getUser(); User fUser = UserUtils.getByLoginCode(bizCalendarSchedule.getParticipantUser()); + BizCalendarFlow calendarFlow = new BizCalendarFlow(); + calendarFlow.setScheduleId(bizCalendarSchedule.getScheduleId()); + calendarFlow.setOperationType(isReachable ? "新增" : "变更"); + calendarFlow.setOperationUser(isReachable ? user.getUserName() : fUser.getUserName()); + calendarFlow.setFlowContent(bizCalendarSchedule.getContent()); + calendarFlow.setStatusName(DictUtils.getDictLabel("todo_status", bizCalendarSchedule.getUstatus(), "0")); bizCalendarSchedule.setCreatorUser(user.getLoginCode()); bizCalendarSchedule.setParticipantName(fUser.getUserName()); bizCalendarSchedule.setUpdateTime(vDate.getUpdateTime(bizCalendarSchedule.getIsNewRecord())); + flowService.save(calendarFlow); bizCalendarScheduleService.save(bizCalendarSchedule); return renderResult(Global.TRUE, text("保存日程信息成功!")); } diff --git a/web-api/src/main/resources/mappings/modules/biz/BizCalendarFlowDao.xml b/web-api/src/main/resources/mappings/modules/biz/BizCalendarFlowDao.xml new file mode 100644 index 00000000..437b5e08 --- /dev/null +++ b/web-api/src/main/resources/mappings/modules/biz/BizCalendarFlowDao.xml @@ -0,0 +1,15 @@ + + + + + + + \ No newline at end of file diff --git a/web-vue/packages/biz/api/biz/calendarFlow.ts b/web-vue/packages/biz/api/biz/calendarFlow.ts new file mode 100644 index 00000000..f0db12d2 --- /dev/null +++ b/web-vue/packages/biz/api/biz/calendarFlow.ts @@ -0,0 +1,38 @@ +/** + * Copyright (c) 2013-Now http://jeesite.com All rights reserved. + * No deletion without permission, or be held responsible to law. + * @author gaoxq + */ +import { defHttp } from '@jeesite/core/utils/http/axios'; +import { useGlobSetting } from '@jeesite/core/hooks/setting'; +import { BasicModel, Page } from '@jeesite/core/api/model/baseModel'; + +const { adminPath } = useGlobSetting(); + +export interface BizCalendarFlow extends BasicModel { + createTime: string; // 记录时间 + calendarFlowId: string; // 主键标识 + scheduleId: string; // 日程标识 + operationUser?: string; // 操作人 + operationType?: string; // 操作类型 + statusName?: string; // 操作状态 + flowContent?: string; // 流程内容 +} + +export const bizCalendarFlowList = (params?: BizCalendarFlow | any) => + defHttp.get({ url: adminPath + '/biz/calendarFlow/list', params }); + +export const bizCalendarFlowListAll = (params?: BizCalendarFlow | any) => + defHttp.get({ url: adminPath + '/biz/calendarFlow/listAll', params }); + +export const bizCalendarFlowListData = (params?: BizCalendarFlow | any) => + defHttp.post>({ url: adminPath + '/biz/calendarFlow/listData', params }); + +export const bizCalendarFlowForm = (params?: BizCalendarFlow | any) => + defHttp.get({ url: adminPath + '/biz/calendarFlow/form', params }); + +export const bizCalendarFlowSave = (params?: any, data?: BizCalendarFlow | any) => + defHttp.postJson({ url: adminPath + '/biz/calendarFlow/save', params, data }); + +export const bizCalendarFlowDelete = (params?: BizCalendarFlow | any) => + defHttp.get({ url: adminPath + '/biz/calendarFlow/delete', params }); diff --git a/web-vue/packages/core/layouts/views/desktop/workbench/components/calendar/flow.vue b/web-vue/packages/core/layouts/views/desktop/workbench/components/calendar/flow.vue new file mode 100644 index 00000000..bb340bef --- /dev/null +++ b/web-vue/packages/core/layouts/views/desktop/workbench/components/calendar/flow.vue @@ -0,0 +1,508 @@ + + + + + + diff --git a/web-vue/packages/core/layouts/views/desktop/workbench/components/calendar/form.vue b/web-vue/packages/core/layouts/views/desktop/workbench/components/calendar/form.vue index 863da4de..79fb9f04 100644 --- a/web-vue/packages/core/layouts/views/desktop/workbench/components/calendar/form.vue +++ b/web-vue/packages/core/layouts/views/desktop/workbench/components/calendar/form.vue @@ -8,7 +8,7 @@ v-bind="$attrs" :showFooter="true" :okAuth="'biz:calendarSchedule:edit'" - @register="registerDrawer" + @register="registerModal" @ok="handleSubmit" width="60%" > @@ -156,7 +156,7 @@ baseColProps: { md: 24, lg: 12 }, }); - const [registerDrawer, { setModalProps, closeModal }] = useModalInner(async (data) => { + const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data) => { setModalProps({ loading: true }); await resetFields(); const res = await bizCalendarScheduleForm(data); diff --git a/web-vue/packages/core/layouts/views/desktop/workbench/components/calendar/list.vue b/web-vue/packages/core/layouts/views/desktop/workbench/components/calendar/list.vue index a0208eb3..ed118c96 100644 --- a/web-vue/packages/core/layouts/views/desktop/workbench/components/calendar/list.vue +++ b/web-vue/packages/core/layouts/views/desktop/workbench/components/calendar/list.vue @@ -17,7 +17,9 @@ - + + + @@ -34,6 +36,8 @@ import { bizCalendarScheduleDelete, bizCalendarScheduleListData } from '@jeesite/biz/api/biz/calendarSchedule'; import { useModal } from '@jeesite/core/components/Modal'; import { FormProps } from '@jeesite/core/components/Form'; + import ViewForm from './view.vue'; + import FlowForm from './flow.vue'; import InputForm from './form.vue'; import FormImport from './formImport.vue'; import { useUserStore } from '@jeesite/core/store/modules/user'; @@ -215,7 +219,18 @@ title: t('编辑'), onClick: handleForm.bind(this, { scheduleId: record.scheduleId }), auth: 'biz:calendarSchedule:edit', - ifShow: record.ustatus !== '9' + ifShow: record.ustatus !== '9' + }, + { + icon: 'simple-line-icons:eye', + title: t('查看'), + onClick: viewForm.bind(this, { scheduleId: record.scheduleId }), + ifShow: record.ustatus == '9' + }, + { + icon: 'ant-design:node-expand-outlined', + title: t('流程'), + onClick: flowForm.bind(this, { scheduleId: record.scheduleId }), }, ], }; @@ -242,12 +257,24 @@ await getForm().setFieldsValue(record.value); }); - const [registerDrawer, { openModal }] = useModal(); + const [registerModal, { openModal }] = useModal(); + + const [registerViewModal, { openModal: openViewModal }] = useModal(); + const [registerEditModal, { openModal: openEditModal }] = useModal(); + const [registerFlowModal, { openModal: openFlowModal }] = useModal(); function handleForm(record: Recordable) { - openModal(true, record); + openEditModal(true, record); } - + + function viewForm(record: Recordable) { + openViewModal(true, record); + } + + function flowForm(record: Recordable) { + openFlowModal(true, record); + } + async function handleExport() { loading.value = true; const { ctxAdminPath } = useGlobSetting(); diff --git a/web-vue/packages/core/layouts/views/desktop/workbench/components/calendar/view.vue b/web-vue/packages/core/layouts/views/desktop/workbench/components/calendar/view.vue new file mode 100644 index 00000000..cddc4499 --- /dev/null +++ b/web-vue/packages/core/layouts/views/desktop/workbench/components/calendar/view.vue @@ -0,0 +1,176 @@ + + +