首页/新闻资讯/正文详情

【Dv2Admin】审批工作流业务流程动态设计

发布时间:2026/9/24 13:34:12 来源:云帆数科 栏目:资讯中心
【Dv2Admin】审批工作流业务流程动态设计
在企业的运营管理中审批流程的高效执行对于保障业务顺利进行至关重要。一个良好设计的审批系统能够显著提高决策的及时性和准确性同时促进各部门间的协同工作。本文将深入探讨如何构建一个既透明又高效的审批流程系统通过案例分析学校的管理模式展示如何实现一个清晰、灵活且易于管理的审批流程。本文还将探讨审批系统设计的关键要素如基础模板配置、审批流程的设计以及实现审批系统时需要注意的细节。通过这些讨论目标是为读者提供一个关于如何有效管理和优化审批流程的全面视角。文章目录业务场景设计方式基础模板配置通用审批流程业务实现方式注意总结业务场景一个企业的正常运作离不开审批工作而这项工作往往需要各个部门的协同完成。因此在审批业务中需要实现全方面的协调和高效沟通。这不仅涉及到审批流程的透明度和可追踪性也包括确保流程的灵活性以适应不同部门的特定需求。为了提高效率审批系统应集成清晰的指导原则和标准操作流程同时还需具备强大的数据支持和分析功能以便实时监控审批进度确保决策的及时性和准确性。此外考虑到各部门之间的相互依赖性审批系统还应支持跨部门协作确保信息的流畅传递和快速响应。通过这些措施可以有效提升企业的运营效率加强部门间的协同作用从而推动整个企业的稳健发展。这里以学校的管理模式举例一个简单审批流程。对所有业务管理一目了然。设计方式模块分类模块应用基础模板配置通用审批模板审批模板流程审批日期以及用户流水单审批流程业务印章申请、学生退学、开具证明、离职申请、物品领用、采购审批、用车申请、损坏赔偿、报销/请款流程 等等这里设计的理念是通用配置搭配个性配置应用实现完整的业务流程。由于学校的管理流程审批比较简单因此这里这么设计比较合理。审批的工作方式分为创建基础流程配置与流程审批。基础模板配置通用基础流程配置需要创建审批模板以及对应模板的流程。这里需要配置4个地方审批的名称模板的id能够使用的部门即发起部门能够审批的部门。这里可能会有疑问每个流程权限控制怎么处理这里先卖个关子这样配置后后面其实就不用考虑这些乱七八糟的问题了。点击每个模板的对应的审批模板可以配置该流程的顺序这里例学生退学举例这里分别配置的默认的配置部门顺序这里对应的审批部门需要进行自定义配置这里作用是在每次创建用户审批流水单的时候自动根据模板创建审批流程。这里审批模板流程可以使用前后端不同方式控制我这里做了2套一个是前端验证一个是后端验证目的是保证审批顺序不能重复不能有跳的数字等等后端验证操作比较麻烦因此介绍一下前端配置的部分这里比较好理解。每次新增都会默认自增顺序以及锁定模板名称和ID这里只需要在下拉选择对应顺序的部门即可。删除流程只能从后往前逐一删除避免了误操作的情况。如果想删除中间某个流程必须这么操作。以上配置会跟随着所有流程操作。并且在后端业务验证中需要进行判断如果流程没有完整的审核的话即最少一个提交一个审核那么需要进行提示操作。审批流程业务这里配置的业务用户创建的审核内容是每个审核流程都需要展示的因此和之前基础的表单配置一致。但是这里的内容不用再这里显示给用户查看揉入到每个新建流程中合并嵌套表单进行添加操作即可。这样设计为了后面嵌套直接匹配对应的模板就可以了操作起来更加简单方便。在新建审批内容之后会看到第一行数据为提交该申请的部门后面为审批顺序自动同步过来的流程数据。并且再新建完审批内容之后每个参与审批的人直接点击审批操作都可以看到提交的内容信息。对应审批页面会看到每个流程的状态。这里会看到流程结束审批通过和审批驳回3个特殊状态。这3个状态的逻辑是审批流程都完事即所有部门审批通过之后即审批通过并且标记流程结束。如果其中一个流程中被驳回会标记驳回并自动标记流程结束。在每个数据更新的环节需要有流程消息通知的环节。这里最重要的还是实现一个流程消息提醒功能。根据配置好的通知部门不管在新建流程还是审批环节都是要在消息中心创建对应的内容来提醒用户。这里是消息提醒的模块。实现方式注意需要对创建角色添加审批权限在dvadmin/system/models.py中的class Role(CoreModel)添加字段控制是否有权限审核默认为否。classRole(CoreModel):......audit_permissionsmodels.BooleanField(defaultFalse,verbose_name审批审核权,help_text审批审核权)......然后需要在前端的角色管理编辑界面将添加的这个字段调出来可以操作即可。还需要再API接口的用户接口部分将该字段显示出来需要修改dvadmin/system/view/user.py搜索result[role_info] role.values(id, name, key)添加权限表示字段即可。classUserViewSet(CustomModelViewSet):....defuser_info(self,request):获取当前用户信息......ifrole:result[role_info]role.values(id,name,key,audit_permissions)......这样设计比重新起一个对照表单接口要简单的多不过要基于对框架比较熟悉的基础之上操作否则可能项目都跑不起来了。在message_center.py中修改MessageCenterCreateSerializer更改消息类型这里可以根据前端配置的信息去修改显示消息的各种样式。主要用于处理消息中心新增数据的序列化和保存操作。通过这个类不仅完成了消息数据的保存还根据消息的不同类型推送了相应的通知给特定的用户。classMessageCenterCreateSerializer(CustomModelSerializer): 消息中心-新增-序列化器 save方法被重写。这个方法是核心部分首先调用父类的save方法将数据保存到数据库中。随后代码通过self.initial_data获取请求中传入的原始数据具体提取了target_type以及其他相关字段如目标用户、角色、部门等信息。defsave(self,**kwargs):datasuper().save(**kwargs)# 保存数据并获取返回的结果initial_dataself.initial_data target_typeinitial_data.get(target_type)usersinitial_data.get(target_user,[])根据target_type的不同值决定了应该如何筛选目标用户。比如当target_type为 1 时表示按角色推送消息。代码会从传入的target_role列表中查询拥有这些角色的用户。类似地target_type为 2 表示按部门发送此时会根据传入的target_dept查找用户。当消息是系统通知或者审批消息时推送给所有用户。iftarget_typein[1]:# 按角色target_roleinitial_data.get(target_role,[])usersUsers.objects.filter(role__id__intarget_role).values_list(id,flatTrue)websocket_push(dvadmin,message{sender:system,contentType:USER,content:您有一条新消息~,refresh_unread:True})iftarget_typein[2]:# 按部门target_deptinitial_data.get(target_dept,[])usersUsers.objects.filter(dept__id__intarget_dept).values_list(id,flatTrue)websocket_push(dvadmin,message{sender:system,contentType:DEPT,content:您有一条新消息~,refresh_unread:True})iftarget_typein[3]:# 系统通知usersUsers.objects.values_list(id,flatTrue)websocket_push(dvadmin,message{sender:system,contentType:SYSTEM,content:您有一条新消息~,refresh_unread:True})iftarget_typein[4]:# 审批消息usersUsers.objects.values_list(id,flatTrue)websocket_push(dvadmin,message{sender:system,contentType:WORKFLOW,content:您有一条新消息~,refresh_unread:True})在找到目标用户后代码会将用户与消息中心的数据进行关联并保存这些信息。同时如果目标类型是按角色或部门推送代码还会创建一个专门的 WebSocket 通道通过该通道向每个用户发送实时通知。targetuser_data[]foruserinusers:targetuser_data.append({messagecenter:data.id,users:user})iftarget_typein[1,2]:room_namefuser_{user}websocket_push(room_name,message{sender:system,contentType:SYSTEM,content:您有一条新消息~,refresh_unread:True})最后通过MessageCenterTargetUserSerializer序列化器确保这些用户数据能够正确保存到数据库中。该序列化器负责验证生成的targetuser_data数据并将其保存。targetuser_instanceMessageCenterTargetUserSerializer(datatargetuser_data,manyTrue,requestself.request)targetuser_instance.is_valid(raise_exceptionTrue)targetuser_instance.save()returndata整个save方法通过以上几个步骤完成了消息的保存、用户的筛选以及通知的推送最终实现了消息中心新增操作的功能。而Meta类定义了模型和字段指定使用MessageCenter这个模型并将所有字段序列化但将id字段设为只读。classMeta:modelMessageCenter fields__all__read_only_fields[id]总结通过详细的案例分析和实现细节讨论本文展示了如何在企业环境中有效地设计和实施审批流程系统。关键在于结合通用配置和个性化设置以满足不同部门的特定需求。在构建这样的系统时不仅要考虑流程的透明度和可追踪性还需要考虑跨部门协作和数据支持。本文中的方法和技巧尤其是在实现方式中的注意事项为打造一个高效、灵活且用户友好的审批系统提供了实用的指导。这样的系统不仅能提升企业的运营效率还能加强部门间的协同作用从而促进整个组织的稳健发展。

相关推荐

【Dv2Admin】自定义插槽Tooltip字符数据显示
【Dv2Admin】自定义插槽Tooltip字符数据显示

在构建现代Web应用时,数据的展示方式对用户体验有着至关重要的影响。当数据表格中的某些字段内容过长时,直接展示可能导致页面布局混乱,影响整体的美观性和可读性。在实际应用中,优雅地处理这些过长的内容,尤其是在Vue.js框架下,成为了一个重要的挑战。 本教程将讨论如何… · 2026/9/24 13:34:06

【Dv2Admin】字段根据下拉选项隐藏和显示字段
【Dv2Admin】字段根据下拉选项隐藏和显示字段

在数字化转型的浪潮中,学校的财务管理系统逐渐从传统的人工模式转向信息化、智能化的缴费方式。对于这样一个系统而言,用户界面(UI)与用户体验(UX)设计的优劣不仅直接影响到用户的操作便捷性,还关乎到整体的工作效率和错误率的降低。尤其是面对复杂的缴费种类和多样化的… · 2026/9/24 13:34:06

【Dv2Admin】自由切换web前端路由的脚本
【Dv2Admin】自由切换web前端路由的脚本

在日常开发过程中,前端项目的不同环境(如开发、测试、正式环境)需要配置不同的API路由地址。每次手动更改配置文件可能会浪费大量时间,尤其是在项目频繁切换环境时。为了解决这个问题,可以通过Python脚本自动切换这些配置,简化操作流程,提升开发效率。 本文介绍了如何使… · 2026/9/24 13:34:06

【Dify】自动化抓取36氪热榜新闻应用
【Dify】自动化抓取36氪热榜新闻应用

自动化抓取和整理新闻数据已成为信息聚合和内容创作中的高频需求。围绕36氪热榜新闻的自动采集与处理,可以高效实现科技资讯的结构化输出和多场景复用。 本文介绍一套以Dify工作流为核心,结合大语言模型和Python代码节点,自动完成36氪热榜新闻从抓取、解析到格式化输出的全… · 2026/9/24 14:01:41

【Dify】科研论文英文翻译应用
【Dify】科研论文英文翻译应用

科研论文的国际化传播对高质量英文翻译提出了严格要求。中文科研内容准确转化为英文,既要保证信息完整,也要符合学术论文的表达规范。 本文介绍了一个基于深度学习语言模型的科研论文中文翻译英文工作流。该流程采用三阶段策略,分别实现直译、语言问题诊断与意译,确保翻译… · 2026/9/24 14:01:41

【Dify】多平台实时热点新闻聚合引擎应用
【Dify】多平台实时热点新闻聚合引擎应用

聚合新闻资讯已成为多平台信息服务的核心需求。智能自动化流程推动新闻采集、整理与分发效率不断提升,相关技术应用正广泛落地。 本文围绕Dify驱动的实时热点新闻聚合引擎展开,聚焦主流模型组件与自动化工作流实现,梳理新闻高效获取与多源信息融合的实用方法。 文章目录 实… · 2026/9/24 14:01:41

【Dify】GPT模型的中英文自动翻译应用
【Dify】GPT模型的中英文自动翻译应用

本项目聚焦于构建一个中英文互译助手,利用GPT-3.5-turbo模型实现文本语言的自动识别与精准翻译。翻译过程不仅确保准确传达原文信息,还保留语气和风格,满足多样化的翻译需求。设计的流程简洁高效,适合入门级开发者理解和应用,帮助快速搭建智能翻译系统。 本文将全面介绍该… · 2026/9/24 14:01:41

【Dify】专家音频与多媒体结合的历史播客应用
【Dify】专家音频与多媒体结合的历史播客应用

中国历史专家播客制作涉及多种音频和多媒体处理技术,目的是实现高质量内容的自动化生成。通过深度学习模型,能够有效提升录音的清晰度,实现精准的语音转写和文本校正,最终将音频与相关视觉素材结合,输出丰富且专业的历史播客作品。 本文将介绍一套面向中国历史专家播客的… · 2026/9/24 14:01:41

Linux命令与Hadoop伪分布式搭建:从实验报告到实战通关
Linux命令与Hadoop伪分布式搭建:从实验报告到实战通关

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/24 14:01:35

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程
基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为… · 2026/9/24 0:00:13

1D-CNN时间序列建模实战:从Conv1d原理到工业落地
1D-CNN时间序列建模实战:从Conv1d原理到工业落地

简介:面向时间序列数据建模的一维卷积神经网络完整实现,适合深度学习入门者及需要快速验证时序模型的研究者,能够从音频、文本、传感器或股价等序列中挖掘局部特征与时间依赖。压缩包体积很小,只有3KB,内含3个Python脚… · 2026/9/24 0:00:26

柔软的L:汉语语流中被忽视的舌肌张力控制
柔软的L:汉语语流中被忽视的舌肌张力控制

1. 这个“L”不是字母表里的L,而是舌尖上的L最近在几个方言群和语音教学社群里,反复看到有人发一句:“也说字母L:柔软的长舌”。初看以为是英语发音课笔记,点开才发现全是方言爱好者、播音系学生、语言康复师甚至戏曲演… · 2026/9/24 0:00:44

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码