群控系统服务端开发模式-应用开发-前端邮箱短信通道开发

news2024/12/1 14:38:09

一、添加视图

        在根目录下src文件夹下views文件夹下param文件夹下emailsms文件夹下,新建index.vue,代码如下

<template>
  <el-tabs type="border-card">
    <el-tab-pane v-if="$store.getters.butts.includes('ParamEmailsmsIndexDetails')" label="邮箱短信通道">
      <el-form ref="resEmailsmsForm" :rules="resEmailsmsRules" :model="resEmailsmsModel" label-width="140px"
               class="demo-ruleForm">
        <el-form-item label="短信通道" prop="sms_id">
          <el-radio-group v-model="resEmailsmsModel.sms_id">
            <el-radio v-for="sms_channel in smss" :key="sms_channel.id" :label="sms_channel.id">{{sms_channel.title}}</el-radio>
          </el-radio-group>
        </el-form-item>
        <el-form-item label="邮箱通道" prop="email_ids">
          <div style="width:5%;float:left;">
            <el-checkbox v-model="checkEmailAll" :indeterminate="isEmailIndeterminate"
                         @change="handleCheckAllEmailChange">全选
            </el-checkbox>
          </div>
          <div style="width:95%;float:left;">
            <el-checkbox-group v-model="resEmailsmsModel.email_id" @change="handleCheckedEmailChange">
              <el-checkbox v-for="mail_channel in mails" :key="mail_channel.id" :label="mail_channel.id">{{ mail_channel.title }}</el-checkbox>
            </el-checkbox-group>
          </div>
        </el-form-item>
        <el-form-item v-if="$store.getters.butts.includes('ParamEmailsmsIndexSave')">
          <el-button type="primary" @click="saveEmailsmsForm()">保存</el-button>
        </el-form-item>
      </el-form>
    </el-tab-pane>
  </el-tabs>
</template>
<script>
  import { err, succ, warn } from '@/utils/message'
  import { getEmailsmsInfo, saveEmailsmsInfo } from '@/api/param/system'
  import { getAll as getMailAll } from '@/api/param/mail'
  import { getAll as getSmsAll } from '@/api/param/sms'
  export default {
    name: 'ParamEmailsmsIndex',
    data() {
      const validateEmailIds = (rule, value, callback) => {
        if (this.resEmailsmsModel.email_id.length == 0) {
          callback(new Error('请至少选择一个邮件通道!'))
        } else {
          callback()
        }
      }
      return {
        checkEmailAll: false,
        isEmailIndeterminate: true,
        mails: [],
        smss: [],
        resEmailsmsModel: {
          id: 1,
          sms_id: 0,
          email_id: []
        },
        resEmailsmsRules: {
          sms_id: [{required: true, message: '请选择短信通道', trigger: 'change'}],
          email_ids: [{required: true, trigger: 'change', validator: validateEmailIds}]
        }
      }
    },
    // 初始化执行的
    created() {
      this.getMail()//获取邮箱类型
      this.getSms()//获取短信类型
      this.getEmailsmsInfo()// 获取参数上传数据
    },
    methods: {
      async getMail(){
        const res = await getMailAll();
        this.mails = res.data;
      },
      async getSms(){
        const res = await getSmsAll();
        this.smss = res.data;
      },
      async getEmailsmsInfo() {
        await getEmailsmsInfo({id: 1}).then(res => {
          var row = res.data
          this.resEmailsmsModel.sms_id = row.sms_id * 1
          const checkedEmailsms = row.email_id.split(',')// 拆分成数组
          const checkedEmailsmsCou = checkedEmailsms.length
          this.checkEmailAll = checkedEmailsmsCou === this.mails.length
          this.isEmailIndeterminate = checkedEmailsmsCou > 0 && checkedEmailsmsCou !== this.mails.length
          for (let j = 0; j < checkedEmailsms.length; j++) {
            this.resEmailsmsModel.email_id.push(checkedEmailsms[j] * 1)
          }
          this.$nextTick(() => {
            this.$refs['resEmailsmsForm'].clearValidate()
          })
        })
      },
      saveEmailsmsForm() {
        this.$refs.resEmailsmsForm.validate((valid) => {
          if (valid) {
            saveEmailsmsInfo(this.resEmailsmsModel).then(res => {
              succ(res.message)
              this.getEmailsmsInfo()
            })
          }
        })
      },
      handleCheckAllEmailChange(val) {
        if(val == false){
          this.resEmailsmsModel.email_id = [];
          this.checkEmailAll = false
        }else{
          for (let i = 0; i < this.mails.length; i++) {
            this.resEmailsmsModel.email_id.push(this.mails[i].id)
          }
          this.checkEmailAll = true
        }
        this.isEmailIndeterminate = this.resEmailsmsModel.email_id.length > 0 && this.resEmailsmsModel.email_id.length < this.mails.length
      },
      handleCheckedEmailChange(value) {
        const checkedCount = value.length
        this.checkEmailAll = checkedCount === this.mails.length
        this.isEmailIndeterminate = checkedCount > 0 && checkedCount < this.mails.length
      }
    }
  }
</script>

二、添加ajax请求

        在根目录下src文件夹下api文件夹下param文件夹下system.js,代码如下

// 获取邮箱短信配置信息
export function getEmailsmsInfo(data) {
  return request({
    url: '/param/emailsms/get_info',
    method: 'post',
    data
  })
}
// 保存邮箱短信配置信息
export function saveEmailsmsInfo(data) {
    return request({
        url: '/param/emailsms/save_info',
        method: 'post',
        data
    })
}

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

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

相关文章

C/C++ 数据结构与算法【线性表】 顺序表+链表详细解析【日常学习,考研必备】带图+详细代码

1&#xff09;线性表的定义 线性表&#xff08;List&#xff09;&#xff1a;零个或多个数据元素的有限序列。 线性表的数据集合为{a1,a2,…,an}&#xff0c;假设每个元素的类型均为DataType。其中&#xff0c;除第一个元素a1外&#xff0c;每一个元素有且只有一个直接前驱元素…

高效特征选择:优化机器学习的嵌入式方法指南

高效特征选择&#xff1a;优化机器学习的嵌入式方法指南 文章目录 一、说明二、特征选择方法三、嵌入式方法四、Lasso正则化五、Python 中的 Lasso 实现六、决策树的特征重要性七、Python 实现八、嵌入式方法和递归特征消除九、结论 一、说明 假设您正在处理一个大型数据集&am…

系统架构:MVVM

引言 MVVM 全称 Model-View-ViewModel&#xff0c;是在 MVP&#xff08;Model-View-Presenter&#xff09;架构模式基础上的进一步演进与优化。MVVM 与 MVP 的基本架构相似&#xff0c;但 MVVM 独特地引入了数据双向绑定机制。这一创新机制有效解决了 MVP 模式中 Model 与 Vie…

家校通小程序实战教程04教师管理

目录 1 创建数据源2 搭建管理后台3 搭建查询条件4 功能测试总结 我们上一篇介绍了如何将学生加入班级&#xff0c;学生加入之后就需要教师加入了。教师分为任课老师和班主任&#xff0c;班主任相当于一个班级的管理员&#xff0c;日常可以发布各种任务&#xff0c;发布接龙&…

cesium 3Dtiles变量

原本有一个变亮的属性luminanceAtZenith&#xff0c;但是新版本的cesium没有这个属性了。于是 let lightColor 3.0result._customShader new this.ffCesium.Cesium.CustomShader({fragmentShaderText:void fragmentMain(FragmentInput fsInput, inout czm_modelMaterial mate…

SpringBoot小知识(3):热部署知识

一、热部署 热部署是一个非常消耗内存的机制&#xff0c;在实际大型项目开发中几乎用不到&#xff0c;只有小型项目或者分模块或者不停机更新的时候才会用到&#xff0c;仁者见仁智者见智。 1.1 什么是热部署&#xff1f; 热部署是指在不停止应用程序或服务器的情况下&#xf…

vscode切换anaconda虚拟环境解释器不成功

问题&#xff1a; 切换解释器之后运行代码还是使用的原来的解释器 可以看到&#xff0c;我已经切换了“nlp”解释器&#xff0c;我的nltk包只在“nlp”环境下安装了&#xff0c;但是运行代码依然是"torch"解释器&#xff0c;所以找不到“nltk”包。 在网上找了各种…

widows下永久修改python的pip 配置文件

通过cmd永久修改pip 镜像源&#xff1a; 在cmd中输入&#xff1a; pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple会在"C:\Users\Administrator\AppData\Roaming"目录下创建一个pip\pip.ini文件&#xff1a; 使用记事本打开pip.ini文件…

openssl使用哈希算法生成随机密钥

文章目录 一、openssl中随机数函数**OpenSSL 随机数函数概览**1. **核心随机数函数** **常用函数详解**1. RAND_bytes2. RAND_priv_bytes3. RAND_seed 和 RAND_add4. RAND_status **随机数生成器的熵池****常见用例****注意事项** 二、使用哈希算法生成随机的密钥 一、openssl中…

【Python网络爬虫笔记】6- 网络爬虫中的Requests库

一、概述 Requests 是一个用 Python 语言编写的、简洁且功能强大的 HTTP 库。它允许开发者方便地发送各种 HTTP 请求&#xff0c;如 GET、POST、PUT、DELETE 等&#xff0c;并且可以轻松地处理请求的响应。这个库在 Python 生态系统中被广泛使用&#xff0c;无论是简单的网页数…

pytest+allure生成报告显示loading和404

pytestallure执行测试脚本后&#xff0c;通常会在电脑的磁盘上建立一个临时文件夹&#xff0c;里面存放allure测试报告&#xff0c;但是这个测试报告index.html文件单独去打开&#xff0c;却显示loading和404, 这个时候就要用一些办法来解决这个报告显示的问题了。 用命令产生…

NGO-CNN-BiGRU-Attention北方苍鹰算法优化卷积双向门控循环单元时间序列预测,含优化前后对比

NGO-CNN-BiGRU-Attention北方苍鹰算法优化卷积双向门控循环单元时间序列预测&#xff0c;含优化前后对比 目录 NGO-CNN-BiGRU-Attention北方苍鹰算法优化卷积双向门控循环单元时间序列预测&#xff0c;含优化前后对比预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介…

【S500无人机】--地面端下载

之前国庆的时候导师批了无人机&#xff0c;我们几个也一起研究了几次&#xff0c;基本把无人机组装方面弄的差不多了&#xff0c;还差个相机搭载&#xff0c;今天我们讲无人机的调试 硬件配置如下 首先是地面端下载&#xff0c;大家可以选择下载&#xff1a; Mission Planne地…

CSAPP Cache Lab(缓存模拟器)

前言 理解高速缓存对 C 程序性能的影响&#xff0c;通过两部分实验达成&#xff1a;编写高速缓存模拟器&#xff1b;优化矩阵转置函数以减少高速缓存未命中次数。Part A一开始根本不知道要做什么&#xff0c;慢慢看官方文档&#xff0c;以及一些博客&#xff0c;和B站视频&…

Linux内核4.14版本——ccf时钟子系统(3)——ccf一些核心结构体

目录 1. struct clk_hw 2. struct clk_ops 3. struct clk_core 4. struct clk_notifier 5. struct clk 6. struct clk_gate 7. struct clk_divider 8. struct clk_mux 9. struct clk_fixed_factor 10. struct clk_fractional_divider 11. struct clk_multiplier 12…

点云处理中obb算法原理和法向量求解方法

主要数学原理PCA PCA&#xff08;Principal Component Analysis&#xff0c;主成分分析&#xff09;是数据分析中的一种重要技术&#xff0c;通过它可以将高维数据投影到低维空间&#xff0c;找到数据的主要结构。在点云分析中&#xff0c;PCA 可以帮助我们提取点云数据中的主…

shell编程7,bash解释器的 for循环+while循环

声明&#xff01; 学习视频来自B站up主 泷羽sec 有兴趣的师傅可以关注一下&#xff0c;如涉及侵权马上删除文章&#xff0c;笔记只是方便各位师傅的学习和探讨&#xff0c;文章所提到的网站以及内容&#xff0c;只做学习交流&#xff0c;其他均与本人以及泷羽sec团队无关&#…

【人工智能】Python常用库-TensorFlow常用方法教程

TensorFlow 是一个广泛应用的开源深度学习框架&#xff0c;支持多种机器学习任务&#xff0c;如深度学习、神经网络、强化学习等。以下是 TensorFlow 的详细教程&#xff0c;涵盖基础使用方法和示例代码。 1. 安装与导入 安装 TensorFlow&#xff1a; pip install tensorflow…

wxFormBuilder:可视化设计、学习wxWidgets自带UI控件的好工具

wxFormBuilder很快就能拼出一个界面&#xff0c;而且可以直接出对应的代码&#xff0c;拷贝到项目里小改一下就能用。

Vim操作

1. Vim的模式 2.正常模式->编辑模式 在上⽅插⼊⼀⾏&#xff1a; O在下⽅插⼊⼀⾏&#xff1a; o (open)在当前光标前插⼊&#xff1a; i在⾏⾸插⼊&#xff1a; I在当前光标后插⼊&#xff1a; a在⾏尾插⼊&#xff1a; A 3.常见命令行 1、拷贝当前行 yy ,拷贝当前行向下…