vue与C#实现自定义表单审批流程构建-前端

2023-11-11

vue与C#实现自定义表单审批流程构建

做信息化项目相信绝大部分人都接触过单据审批流程的需求,例如发起一个采购申请,需要几个节点审核,部门负责人审核,采购审核,财务审核等等。审批人也需要可自定义,以及可能会出现审批条件分支的情况,这时我们的审批流程就需要完全可定义才能满足。像市面上的钉钉,企业威信等都有审批流,如果接入到第三方也是可以的,但是有的公司没用这些产品 或者企业WX内部本身有信息化团队有很多定制化的OA流程等,就需要有自己的审批流了。本文展示的审批流UI借鉴了钉钉的设计 比较简洁易用,框架是vue.js 组件是elementui,如图。

节点构成主要包括发起人节点,审核节点,分支节点,抄送节点四类。

审核方式又包含依次审批  会签和或签,

节点分支可以对发起人流程以及发起人表单数据进行条件判断。

看清来简单的几个功能 ,事实上需要实现的内容是比较多的,后续有时间将慢慢讲解。

以下内容凑字数。

<template>

  <el-dialog width="500px" :append-to-body="true" title="审批处理" :visible.sync="dialogVisible">

    <div>

        <el-form :model="data" ref="ruleForm" label-width="100px" class="demo-ruleForm">

  <el-form-item label="审批类型" prop="action">

   <el-select v-model="data.action" style=" width:80%"  @change="changeType" placeholder="请选择审批类型">

        <el-option

          v-for="item in options"

          :key="item.value"

          :label="item.label"

          :value="item.value"

        ></el-option>

      </el-select>

  </el-form-item>

    <el-form-item label="审批意见" prop="approvalComment">

 <el-input type="textarea" :rows="5" placeholder="请输入审批意见" v-model.trim="data.approvalComment"></el-input>

  </el-form-item>

    <el-form-item label="加签" v-show="isCanAddSign" prop="isAddSignature">

 <el-checkbox v-model="data.isAddSignature">需要加签审核人</el-checkbox>

  </el-form-item>

      <el-form-item v-show="isCanAddSign&&data.isAddSignature" label="加签审批人" prop="personId">

    <el-select v-model="data.personId" filterable  style=" width:80%" @change="selectApprover" placeholder="请选择加签审批人">

        <el-option

            v-for="item in personOptions"

            :key="item.id"

            :label="item.realName"

            :value="item.id"

          >

            <span style="float: left">{{ item.realName }}</span>

            <span style="float: right; color: #409EFF; font-size: 13px">{{ item.number}}</span>

          </el-option>

      </el-select>

  </el-form-item>

</el-form>

    </div>

    <div slot="footer" class="dialog-footer">

      <el-button @click="dialogVisible = false">取 消</el-button>

      <el-button type="primary" :loading="submitLoading" @click="ok">确 定</el-button>

    </div>

  </el-dialog>

</template>

<script>

// 这里可以导入其他文件(比如:组件,工具js,第三方插件js,json文件,图片文件等等)

// 例如:import 《组件名称》 from '《组件路径》';

import MessageTool from "@/utils/MessageTool";

import workProcessInstance from "@/api/approveFlow/workProcessInstance";

  import employee from "@/api/auth/employee";

  const employeeClass = new employee();

const MessageToolClass = new MessageTool();

const workProcessInstanceClass = new workProcessInstance();

export default {

  // import引入的组件需要注入到对象中才能使用

  name: "approveAction",

  components: {},

  data() {

    return {

      dialogVisible: false,

      submitLoading:false,

      isCanAddSign:true,

      data: {

        instanceId: 0,

        currentNodeId: 0,

        isAddSignature:false,

        personId:undefined,

        taskId: 0,

        action: 1,

        approvalComment: "同意审批"

      },

      options: [{ value: 1, label: "同意" }, { value: 2, label: "拒绝" }],

      backFunc:undefined,

      personOptions:[],

    };

  },

  // 监听属性 类似于data概念

  computed: {},

  props: {},

  // 监控data中的数据变化

  watch: {},

  // 方法集合

  methods: {

      //获取负责人

      getMajorPersonOptions() {

        employeeClass.getlist().then(res => {

          this.personOptions = res;

        });

      },

    changeType(v) {

      if (v == 2) {

        this.data.approvalComment = "拒绝审批";

      this.isCanAddSign = false;

      } else if (v == 1) {

        this.data.approvalComment = "同意审批";

        this.isCanAddSign= true;

      }

    },

    open(data,backFunc){

        this.dialogVisible = true;

        this.data.instanceId = data.instanceId;

        this.data.currentNodeId = data.currentNodeId;

        this.data.taskId = data.taskId;

        this.data.isAddSignature = false;

        if(backFunc){

          this.backFunc = backFunc;

        }

    },

    selectApprover(v){

      let person  = this.personOptions.find(x=>x.id==v);

      if(person){

        this.data.personName = person.realName;

      }

    },

    ok() {

   

      if (

        this.data.instanceId == 0 ||

        this.data.currentNodeId == 0 ||

        this.data.taskId == 0

      ) {

        this.$message.error("找不到审核的单据!");

        return;

      }

      if (this.data.approvalComment == "") {

        this.$message.error("审核意见不能为空!");

        return;

      }

        if (this.data.isAddSignature&&this.data.personId==undefined) {

        this.$message.error("请选择加签审批人!");

        return;

      }

        this.submitLoading =true;

       

      workProcessInstanceClass

        .handCurrentNode(this.data)

        .then(res => {

          if (res.isSuccess) {

            MessageToolClass.NotifySuccessShow("操作成功");

            this.dialogVisible = false;

            if(this.backFunc){

              this.backFunc();

            }

          }

          this.submitLoading =false;

        })

        .catch(res => { this.submitLoading =false;});

    }

  },

  // 生命周期 - 创建完成(可以访问当前this实例)

  async created() {

    this.getMajorPersonOptions();

  },

  // 生命周期 - 挂载完成(可以访问DOM元素)

  mounted() {},

  beforeCreate() {}, // 生命周期 - 创建之前

  beforeMount() {}, // 生命周期 - 挂载之前

  beforeUpdate() {}, // 生命周期 - 更新之前

  updated() {}, // 生命周期 - 更新之后

  beforeDestroy() {}, // 生命周期 - 销毁之前

  destroyed() {}, // 生命周期 - 销毁完成

  activated() {} // 如果页面有keep-alive缓存功能,这个函数会触发

};

</script>

<style>

.el-table .success-row {

  background: #fbfbfb;

}

.el-table .disabledCheck .cell .el-checkbox__inner {

  display: none !important;

}

.el-form-item {

  margin-bottom: 16px;

}

.has-gutter .el-checkbox {

  display: none;

}

.grid-content {

  border-radius: 4px;

  border: 1px solid #dedede;

  height: 350px;

  overflow-y: scroll;

  background: #f4f6f8;

  margin: 0 10px;

  padding: 10px;

}

.el-dialog__body {

  padding: 20px 20px;

}

</style>

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

vue与C#实现自定义表单审批流程构建-前端 的相关文章

随机推荐

  • 【Modbus】 RTU CRC校验码计算方法

    Modbus是美国Modicon公司 即现在的Schneider Electric公司 于1979年开发的一种通信协议 其目的是采用一根双绞线实现多个设备之间的通信 Modbus 协议采用问答式的通信方式 具有简单 硬件便宜 通用性强 使用
  • 2023_华为OD机试真题_Java_001_AI处理器组合

    AI处理器组合 题目描述 某公司研发了一款高性能AI处理器 每台物理设备具备8颗AI处理器 编号分别为0 1 2 3 4 5 6 7 编号0 3的处理器处于同一个链路中 编号4 7的处理器处于另外一个链路中 不通链路中的处理器不能通信 如下
  • pip 删除安装包_最新版pip用法一览

    pip 是 Python 包管理工具 该工具提供了对Python 包的查找 下载 安装 卸载的功能 熟练使用此工具 也是python的基本功 https pypi org目前最新版本为20 2 2 以下就以此版本来演示其使用 下面演示 是在
  • pytorch学习(六)---搭建简单的神经网络以及sequential的使用

    本篇自学笔记来自于b站 PyTorch深度学习快速入门教程 绝对通俗易懂 小土堆 Up主讲的非常通俗易懂 文章下方有视频连接 如有需要可移步up主讲解视频 如有侵权 实非故意 深表歉意 请与我联系 删除相关内容 本节以CIFAR10的模型结
  • emwin多语言实现的两种方式

    MCU开发中经常会涉及到多语言的制作和支持 本文将介绍两种制作字库的方法 字库的实现主要包含两部分 一是 字库 一是要显示的字符串 将这两个东西准备好 就可以实现了 第一种方法 详细的可以直接参考这篇博客 可 EMWIN 多国语言实现方法
  • 【信号采集】基于FPGA的高速信号采集系统

    1 高速采集系统实现的功能 FPGA内部功能模块组成 2 高速ADC接口的FPGA实现 3 数字下变频 DDC 的FPGA实现 4 三倍抽取功能的FPGA实现 5 Aurora接口的FPGA实现 高速采集系统的功能和组成 1 实现功能 对中
  • 《消息队列高手课》传输协议:应用程序之间对话的语言

    传输协议就是应用程序之间对话的语言 设计传输协议 并没有太多规范和要求 只要是通信双方的应用程序都能正确处理这个协议 并且没有歧义就好了 这节课 我们就来说一下设计高性能传输协议的一些方法和技巧 如何 断句 既然传输协议也是一种语言 那么在
  • CentOS8基础篇5:用户账号与用户组的创建

    一 用户与用户组概念 Linux是一个多用户 多任务的服务器操作系统 多用户多任务指可以在系统上建立多个用户 而多个用户可以在同一时间内登录同一个系统执行各自不同的任务 而互不影响 Linux用户是根据角色定义的 具体分为三种角色 超级用户
  • C++中拒绝编译器自动生成copy构造函数和copy赋值运算符操作(6)---《Effective C++》

    C 是一片荆棘遍布的雷区 等待用于挑战的你去探索 在 Effective C 系列的第5篇中我们已经看到当用户进行赋值或者拷贝操作的时候 即使我们没有定义拷贝构造函数或者拷贝赋值运算符操作 编译器也会自动为其生成copy构造函数和copy赋
  • P50发布,鸿蒙OS用户突破4000万!

    大家期盼已久的华为 P50 系列手机终于来了 7 月 29 日晚间 华为在线上举行 万象新生 为主题的旗舰新品发布会 华为旗舰新机 P50 系列正式全球发布 太难了 迟到 4 个月的 P50 发布 在今年 6 月份华为鸿蒙 2 0 发布会上
  • 基于HashHeap的LFU实现

    普通heap支持的操作和queue stack一样 就是push pop 只是pop出的是最小值 具体点就是add delMin hashheap支持一般HashMap的功能 同时维护最小值 和LinkedHashMap是对等的 后者是Ha
  • 手机开启应急预警通知 / 地震预警

    前言 安卓手机在检测到地震时 将发送地震预警通知 但此设置是默认关闭的 原因是以防引发用户恐慌从而引发安全问题 且开启此设置需要完成指引教程 因此默认关闭此设置 下文介绍如何开启此设置 开启方法 华为手机开启方法 以华为手机为例 详细介绍开
  • Metasploit渗透测试框架的基本使用

    1 Metasploit体系框架 1 基础库 metasploit基础库文件位于源码根目录路径下的libraries目录中 包括Rex framework core和framework base三部分 Rex是整个框架所依赖的最基础的一些组
  • Linux-fork(),vfork()和clone的区别

    在linux系统中 fork vfork 和clone函数都可以创建一个进程 但是它们的区别是什么呢 本文就这三者做一个较深入的分析 1 fork fork 函数的作用是创建一个新进程 由fork创建的进程称为子进程 fork函数调用一次返
  • 简单人脸检测

    1 1 Haar特征分类器介绍 Haar特征分类器就是一个XML文件 该文件中会描述人体各个部位的Haar特征值 包括人脸 眼睛 嘴唇等等 Haar特征分类器存放目录 D wsbSoft Anaconda3 envs tensorflow
  • 通过adbshell获取android的权限集合

    在Window控制台中输入如下命令可以看到Android系统中列出的所有权限 如果自定义权限注册成功 在这里也会找到这些自定义的权限 adb shell pm list permissions html view plain copy C
  • 解决Tomcat中POST方式传送参数大小限制问题

    之前我在做项目的时候遇到了这个问题 Tomcat是使用POST的方式发送请求参数 请求参数有九万多个 点击提交就没有反应了 后来查询资料知道了是请求参数过多了 超过了Tomcat的上传文件最大值2M 通过以下方法进行修改后解决了问题 在to
  • 云上城之个服务器维护时间,云上城之歌时间之塔开服时间表_云上城之歌新区开服预告_第一手游网手游开服表...

    今日开服 15 00 三十八区苍炎之门 已经开服 2021 08 10 10 00 三十八区巨石林野 已经开服 2021 08 09 15 00 三十八区荧光要塞 已经开服 10 00 三十八区雷神圣所 已经开服 2021 08 07 10
  • 基于Java的Cplex入门

    Cplex是一种数学优化技术 主要用于提高效率 快速实现策略并提高收益率 Cplex提供灵活的高性能优化程序 解决线性规划 Linear Programming 二次方程规划 Quadratic Programming 二次方程约束规划 Q
  • vue与C#实现自定义表单审批流程构建-前端

    vue与C 实现自定义表单审批流程构建 做信息化项目相信绝大部分人都接触过单据审批流程的需求 例如发起一个采购申请 需要几个节点审核 部门负责人审核 采购审核 财务审核等等 审批人也需要可自定义 以及可能会出现审批条件分支的情况 这时我们的