Vuex状态管理(报警信息数量跟随变化)

需求:侧边栏显示报警信息数量

在store/project.js文件中定义相关状态

// 存储项目信息
const projectInfo = JSON.parse(sessionStorage.getItem('projectInfo')) ? JSON.parse(sessionStorage.getItem('projectInfo')) : '';
import {
    getUntreatedProjectAlarm } from '@/api/managealarm'
const state = {
   
    projectInfo: projectInfo,
    // 菜单按钮是否展开
    launch: true,
    // 报警信息数量
    alarmNumber: 0
}

const mutations = {
   
    SET_PROJECT_INFO: (state, projectInfo) => {
   
        state.projectInfo = projectInfo
        sessionStorage.setItem('projectInfo', JSON.stringify(projectInfo))
    },
    SET_LAUNCH: (state) => {
   
      state.launch = !state.launch
    },
    SET_ALARMNUMBER: (state, alarmNumber) => {
   
      state.alarmNumber = alarmNumber
    },
}

const actions = {
   
    setProject({
    commit}, projectInfo) {
   
        commit('SET_PROJECT_INFO', projectInfo)
    },
    getAlarmNumber({
     commit }) {
   
      return new Promise(() => {
   
        let params = {
   
          page: 1,
          rows: 500,
          alarmType: '',
          startDate: '',
          endDate: '',
          everconfirmed: '',
          projectId: state.projectInfo.id
        }
        getUntreatedProjectAlarm(params).then((res) => {
   
          let alarmNumber = res.total;
          commit('SET_ALARMNUMBER', alarmNumber)
        })
      })
    }
}

export default {
   
    namespaced: true,
    state,
    mutations,
    actions
}

在侧边栏Sidebar.vue页面中调用

<el-badge :value="alarmNumber" class="item custombge">
    {
   {
    subItem.name }}
</el-badge>
computed: {
   
	//使用计算属性,如果其他页面更改了状态(数量)那么它也更这变化
    alarmNumber() {
   
      return this.$store.state.project.alarmNumber;
    }
  },  
mounted() {
   
  // 页面加载后调用store里面的action方法获取数据
  this.$store.dispatch("project/getAlarmNumber");
},

在报警信息alarm.vue页面中

<el-table-column label="操作" align="center">
          <template slot-scope="scope">
            <div>
              <el-button v-if="scope.row.everconfirmed == 0" type="primary" size="mini" @click="isTrue(scope.row.id)">确认</el-button>
              <el-button v-else type="info" size="mini" @click="isTrue(scope.row.id)">取消</el-button>
            </div>
          </template>
</el-table-column>
methods: {
   
    // 点击确认、取消按钮调用此方法
    isTrue(val) {
   
      let params = {
   
          ids: [val]
      }
      batchUpdateProjectAlarmState(params).then((res) => {
   
      	//获取页面数据
        // this.search();
        //重新更新报警信息数量
        this.getAlarmNumber();
      })
    },
    getAlarmNumber() {
   
      this.$store.dispatch("project/getAlarmNumber");
    },
  }

提示

javascript 一般调用mutations中的方法是使用commit 例如 this.$store.commit("project/SET_LAUNCH") 一般调用actions 中的方法是使用dispatch 例如 this.$store.dispatch("project/getAlarmNumber");

结果截图:
在这里插入图片描述

点击一个确认后
在这里插入图片描述

相关推荐

  1. Vue状态管理Vux

    2024-01-02 17:48:03       56 阅读
  2. vue状态管理

    2024-01-02 17:48:03       41 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-02 17:48:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-02 17:48:03       101 阅读
  3. 在Django里面运行非项目文件

    2024-01-02 17:48:03       82 阅读
  4. Python语言-面向对象

    2024-01-02 17:48:03       91 阅读

热门阅读

  1. 如何用GPT制作技术路线图?

    2024-01-02 17:48:03       50 阅读
  2. MySQL 8.1 和 8.2 中 EXPLAIN 的新玩法

    2024-01-02 17:48:03       59 阅读
  3. 机房使用超融合系统的卓越优势

    2024-01-02 17:48:03       78 阅读
  4. 机器学习一些概念

    2024-01-02 17:48:03       52 阅读
  5. c语言-数据类型详细介绍

    2024-01-02 17:48:03       61 阅读
  6. CentOS7安装docker

    2024-01-02 17:48:03       61 阅读
  7. MySQL5.7服务器 SQL 模式

    2024-01-02 17:48:03       52 阅读
  8. 前端crypto-js 库: MD5

    2024-01-02 17:48:03       67 阅读
  9. 7-2 sdut-Map-Sort--C~K的班级(III) --笔记篇

    2024-01-02 17:48:03       57 阅读