基于若依的ruoyi-nbcio流程管理系统增加仿钉钉流程设计(三)

news2025/1/18 3:18:20

更多ruoyi-nbcio功能请看演示系统

gitee源代码地址

前后端代码: https://gitee.com/nbacheng/ruoyi-nbcio

演示地址:RuoYi-Nbcio后台管理系统

这个部门主要是修改审批人的指定用户选择,这里就要采用ruoyi的用户体系。

这里主要是修改PropPanel.vue文件的内容修改

1、对于指定用户的选择修改如下:

<div v-else class="option-box">
                <div class="element-drawer__button">
                  <el-button size="mini" type="primary" icon="el-icon-plus" @click="onSelectUsers()">添加用户</el-button>
                </div>
                <el-tag v-for="userText in selectedUser.text" :key="userText" effect="plain">
                  {{userText}}
                </el-tag>

              </div>

2、增加用户选择窗口

<!-- 候选用户弹窗 -->
    <el-dialog title="候选用户" :visible.sync="userOpen" width="60%" append-to-body>
      <el-row type="flex" :gutter="20">
        <!--部门数据-->
        <el-col :span="7">
          <el-card shadow="never" style="height: 100%">
            <div slot="header">
              <span>部门列表</span>
            </div>
            <div class="head-container">
              <el-input
                v-model="deptName"
                placeholder="请输入部门名称"
                clearable
                size="small"
                prefix-icon="el-icon-search"
                style="margin-bottom: 20px"
              />
              <el-tree
                :data="deptOptions"
                :props="deptProps"
                :expand-on-click-node="false"
                :filter-node-method="filterNode"
                ref="tree"
                default-expand-all
                @node-click="handleNodeClick"
              />
            </div>
          </el-card>
        </el-col>
        <el-col :span="17">
          <el-table ref="multipleTable" height="600" :data="userTableList" border @selection-change="handleSelectionChange">
            <el-table-column type="selection" width="50" align="center" />
            <el-table-column label="用户名" align="center" prop="nickName" />
            <el-table-column label="部门" align="center" prop="dept.deptName" />
          </el-table>
          <pagination
            :total="userTotal"
            :page.sync="queryParams.pageNum"
            :limit.sync="queryParams.pageSize"
            @pagination="getUserList"
          />
        </el-col>
      </el-row>
      <div slot="footer" class="dialog-footer">
        <el-button type="primary" @click="handleTaskUserComplete">确 定</el-button>
        <el-button @click="userOpen = false">取 消</el-button>
      </div>
    </el-dialog>

3、增加相应的变量

selectedUser: {
        ids: [],
        text: []
      },
      userOpen: false,
      deptName: undefined,
      deptOptions: [],
      deptProps: {
        children: "children",
        label: "label"
      },
      deptTempOptions: [],
      userTableList: [],
      userTotal: 0,
      selectedUserDate: [],
      roleOptions: [],
      roleIds: [],
      deptTreeData: [],
      deptIds: [],
      // 查询参数
      queryParams: {
        deptId: undefined
      },

4、增加相应的方法如下:

    onSelectUsers() {
      this.selectedUserDate = []
      this.$refs.multipleTable?.clearSelection();
      this.getDeptOptions();
      this.userOpen = true;
    },
    /**
     * 清空选项数据
     */
    clearOptionsData() {
      this.selectedUser.ids = [];
      this.selectedUser.text = [];
      this.roleIds = [];
      this.deptIds = [];
    },
    /** 查询用户列表 */
    getUserList() {
      listUser(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
        this.userTableList = response.rows;
        this.userTotal = response.total;
      });
    },
    /**
     * 查询部门下拉树结构
     */
    getDeptOptions() {
      return new Promise((resolve, reject) => {
        if (!this.deptOptions || this.deptOptions.length <= 0) {
          deptTreeSelect().then(response => {
            this.deptTempOptions = response.data;
            this.deptOptions = response.data;
            resolve()
          })
        } else {
          reject()
        }
      });
    },
    /**
     * 查询部门下拉树结构(含部门前缀)
     */
    getDeptTreeData() {
      function refactorTree(data) {
        return data.map(node => {
          let treeData = { id: `DEPT${node.id}`, label: node.label, parentId: node.parentId, weight: node.weight };
          if (node.children && node.children.length > 0) {
            treeData.children = refactorTree(node.children);
          }
          return treeData;
        });
      }
      return new Promise((resolve, reject) => {
        if (!this.deptTreeData || this.deptTreeData.length <= 0) {
          this.getDeptOptions().then(() => {
            this.deptTreeData = refactorTree(this.deptOptions);
            resolve()
          }).catch(() => {
            reject()
          })
        } else {
          resolve()
        }
      })
    },
    /**
     * 查询部门下拉树结构
     */
    getRoleOptions() {
      if (!this.roleOptions || this.roleOptions.length <= 0) {
        listRole().then(response => this.roleOptions = response.rows);
      }
    },
    /** 查询用户列表 */
    getUserList() {
      listUser(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
        this.userTableList = response.rows;
        this.userTotal = response.total;
      });
    },
    // 筛选节点
    filterNode(value, data) {
      if (!value) return true;
      return data.label.indexOf(value) !== -1;
    },
    // 节点单击事件
    handleNodeClick(data) {
      this.queryParams.deptId = data.id;
      this.getUserList();
    },
    // 多选框选中数据
    handleSelectionChange(selection) {
      this.selectedUserDate = selection;
    },
    handleTaskUserComplete() {
      if (!this.selectedUserDate || this.selectedUserDate.length <= 0) {
        this.$modal.msgError('请选择用户');
        return;
      }
      console.log("handleTaskUserComplete this.selectedUserDate",this.selectedUserDate);
      this.orgCollection.user = this.selectedUserDate;
      this.approverForm.text = this.selectedUserDate.map(k => k.nickName).join() || null;
      this.selectedUser.text = this.selectedUserDate.map(k => k.nickName) || [];
      this.userOpen = false;
    },

5、效果图

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1154119.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

高防CDN:保护现代网站的重要工具

在今天的数字时代&#xff0c;互联网已经成为人们生活的不可或缺的一部分。然而&#xff0c;随着互联网的普及&#xff0c;网络安全威胁也日益增多&#xff0c;对网站和应用程序的稳定性和可用性提出了严峻挑战。这就是为什么越来越多的网站选择采用高防CDN&#xff08;Content…

软件评测师之数据结构与算法

目录 一.数据结构的概述二.线性表三.队列与栈四.数组五.树与二叉树二叉树遍历 六.堆七.图八.算法概述伪代码 一.数据结构的概述 所谓数据结构是指数据元素的集合或者数据对象的集合&#xff0c;以及元素之间的相互关系和构造方法。 数据结构分为逻辑结构和物理结构。逻辑结构…

【计网 Socket编程】 中科大郑烇老师笔记 (九)

目录 0 引言1 Socket是什么&#xff1f;是网络的一个层次&#xff1f;是一个协议&#xff1f;2 Socket编程2.1 TCP Socket编程2.1.2 基本概念2.1.1 一般步骤 2.2 UDP Socket编程 3 TCP Socket编程 实战 &#x1f64b;‍♂️ 作者&#xff1a;海码007&#x1f4dc; 专栏&#xf…

FlinkCDC系列:通过skipped.operations参数选择性处理新增、更新、删除数据

在flinkCDC源数据配置&#xff0c;通过debezium.skipped.operations参数控制&#xff0c;配置需要过滤的 oplog 操作。操作包括 c 表示插入&#xff0c;u 表示更新&#xff0c;d 表示删除。默认情况下&#xff0c;不跳过任何操作&#xff0c;以逗号分隔。配置多个操作&#xff…

塔望食观察丨从“一药难求”看国内退烧药品牌是怎样炼成的

随着新冠疫情防疫的全面放开&#xff0c;感染患者不断增多&#xff0c;市民在未知的恐慌中开启了囤药模式&#xff0c;药店中的“四类药”&#xff08;退烧、止咳、抗病毒、抗生素类药品&#xff09;被一抢而空&#xff0c;尤其是以退烧类药物更为短缺&#xff0c;以解热镇痛的…

银河麒麟V10SP1-20200711的mate-indicators进程占用内存过高的解决办法

目录 一、监控异常 二、进程异常 三、解决方法 &#xff08;一&#xff09;第一步&#xff1a;先查看操作系统版本 &#xff08;二&#xff09;第二步&#xff1a;下载相应版本的补丁包 &#xff08;三&#xff09;第三步&#xff1a;升级补丁、重启系统 1. 升级步骤 2. …

正常女人会感染HPV吗?北京劲松医院谭巍主任称取决于这些因素

正常女人会感染HPV吗?答案是肯定的。HPV(人乳头瘤病毒)是一种常见的性传播病毒&#xff0c;它可以通过性接触、接触感染者的个人物品等方式传播。因此&#xff0c;正常女性也有可能会感染HPV病毒。 首先&#xff0c;让我们了解一下HPV病毒。HPV病毒是一种小型DNA病毒&#xf…

windows版本redis如何设置后踢启动和重启计算机之后自动重启redis

1. 进入redis安装目录 D:\softwarePackage\redis\Redis-x64-3.2.100 2. 打开dos窗口 使用以下命令来启动 Redis 服务器&#xff0c;并使其在后台运行 redis-server --service-start 3. 设置重启自启动 打开服务界面 &#xff08;windowsr 输入 services.msc&#xff09; 找…

方差的性质

参考了百度百科-验证&#xff0c;自己推导了下&#xff0c;加深印象。 方差的定义 方差写作Var(X)&#xff0c;它表示随机变量值和它的期望值之差的平方的期望。 对于离散型随机变量X&#xff0c;方差的计算公式为&#xff1a; 其中&#xff0c;E表示期望的意思。 对于连续型…

MySQL---数据用户管理和索引

DDL&#xff1a;CTEATE DROP ALTER dml&#xff1a;对数据进行管理 update insert into delete truncate dpl&#xff1a;查询语句 select dcl&#xff1a;权限控制语句 grant revoke 数据库用户管理 创建用户 修改用户权限 删除用户 grant要在终端执行 创建用户 cr…

4.多层感知机-2简化版

#pic_center R 1 R_1 R1​ R 2 R^2 R2 目录 知识框架No.1 多层感知机一、感知机1、感知机2、训练感知机3、图形解释4、收敛定理5、XOR问题6、总结 二、多层感知机1、XOR2、单隐藏层3、单隐藏层-单分类4、为什么需要非线性激活函数5、Sigmoid函数6、Tanh函数7、ReLU函数8、多类分…

抽奖之星软件,可设置中奖几率概率

抽奖之星简介 抽奖之星 (www.wsgsoft.net/plds/) 可控制抽奖/抽签的结果。 包括内定、中奖次序、限制范围、修改几率、排除、分组等&#xff0c;详情可安装软件试用。 设置中奖几率 界面如下。界面右边&#xff0c;可选中一些名单&#xff0c;并设置其几率&#xff08;N倍&a…

HEC-RAS 1D/2D水动力与水环境模拟技术

水动力与水环境模型的数值模拟是实现水资源规划、环境影响分析、防洪规划以及未来气候变化下预测和分析的主要手段。然而&#xff0c;一方面水动力和水环境模型的使用非常复杂&#xff0c;理论繁复&#xff1b;另一方面&#xff0c;免费的水动力和水环境软件往往缺少重要功能&a…

建筑建材物料展示预约小程序的作用

建材物料在工程和家庭中的应用度非常高&#xff0c;涵盖服务与产品&#xff0c;如墙面翻新、刷墙、墙纸等&#xff0c;所谓专业事专业人做&#xff0c;因此建筑建材服务商家需要不断拓展客户进行产品/服务的销售。 而在市场拓展方面&#xff0c;由于当今主流需求者年轻化&…

基于STC12C5A60S2系列1T 8051单片机可编程计数阵列CCP/PCA/PWM模块的PWM(脉冲宽度调制)应用

基于STC12C5A60S2系列1T 8051单片机可编程计数阵列CCP/PCA/PWM模块的PWM&#xff08;脉冲宽度调制&#xff09;应用 STC12C5A60S2系列1T 8051单片机管脚图STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式及配置STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式介绍STC…

超融合数据库:解锁全场景数据价值的钥匙

前言 近日&#xff0c;四维纵横对外官宣已完成上亿元 B 轮融资。作为超融合数据库理念的提出者&#xff0c;三年来 YMatrix 持续在超融合数据库领域中保持精进与迭代&#xff0c;对于超融合数据库在行业、场景中的应用和理解也更为深刻。 本篇文章&#xff0c;我们将基于 YMa…

Qt QStackWidget实现透明化loading弹窗与结果展示

效果: 特点: 1、组件复用,用于工作环境中作为单例组件加载方式,作用全局任何需要进行loading显示的业务逻辑; 2、接口调用简单,只需要调用loading开始,显示成功页面,显示错误页面; 3、按钮业务逻辑只进行隐藏当前loading加载框,可根据自己需要自定义业务逻辑; 4…

用 Milvus 和 NVIDIA Merlin 搭建高效推荐系统

如何搭建一个高效的推荐系统&#xff1f; 简单来说&#xff0c;现代推荐系统由训练/推理流水线&#xff08;pipeline&#xff09;组成&#xff0c;涉及数据获取、数据预处理、模型训练和调整检索、过滤、排名和评分相关的超参数等多个阶段。走遍这些流程之后&#xff0c;推荐系…

MyBatis Plus之wrapper用法

一、条件构造器关系 条件构造器关系介绍&#xff1a; 绿色框&#xff1a;抽象类 abstract 蓝色框&#xff1a;正常 class 类&#xff0c;可 new 对象 黄色箭头&#xff1a;父子类关系&#xff0c;箭头指向为父类 wrapper介绍&#xff1a; Wrapper &#xff1a;条件构造抽象类…

技术贴 | 一文带你走进统计信息模型

一、简介 数据库中的“统计信息”是一个描述数据库中表和列信息的数据集合。优化器代价模型 (OptimizerCost Model) 依赖于查询中涉及到的表、列、谓词等对象的统计信息来选取计划&#xff0c;优化器可以利用统计信息来优化计划的选择&#xff0c;所以统计信息是代价模型中选取…