Loading

vuex的应用

需求:系统顶部添加项目下拉框,顶部下拉框选项改变时其他模块下拉框同时改变。

1.开始进入系统的时候获取项目列表

页面调用接口
// 获取项目列表
store.dispatch("getProject").then(() => {});
store新建project.js
 1 import { listProjectNoPage } from "@/api/system/project";
 2 
 3 const project = {
 4   state: {
 5     projectList: [],
 6     projectId: "",
 7   },
 8 
 9   mutations: {
10     SET_PROJECT_LIST: (state, projectList) => {
11       state.projectList = projectList;
12     },
13     SET_PROJECT_ID: (state, projectId) => {
14       state.projectId = projectId;
15     },
16   },
17 
18   actions: {
19     // 获取用户项目信息
20     getProject({ commit, state }) {
21       return new Promise((resolve, reject) => {
22         listProjectNoPage()
23           .then((res) => {
24             const dataList = res.data;
25             if (dataList.length > 0) {
26               const projectId = dataList[0].projectId;
27               const projectOptions = dataList.map((item) => {
28                 return {
29                   value: item.projectId,
30                   label: item.projectName,
31                   ...item,
32                 };
33               });
34               commit("SET_PROJECT_ID", projectId);
35               commit("SET_PROJECT_LIST", projectOptions);
36             }
37             resolve(res);
38           })
39           .catch((error) => {
40             reject(error);
41           });
42       });
43     },
44     // 修改选中项目
45     changeProject({ commit }, data) {
46       commit("SET_PROJECT_ID", data);
47     },
48   },
49 };
50 
51 export default project;

2.系统顶部引入项目列表监听变化

html
1 <el-select v-model="sysProjectId" placeholder="请选择项目" filterable>
2      <el-option v-for="(item, index) in sysProjectList" :key="index" :label="item.label" :value="item.value" />
3  </el-select>
js
 1 import { mapGetters } from 'vuex'
 2 computed: {
 3     ...mapGetters([
 4       'sysProjectList',
 5     ]),
 6     sysProjectId: {
 7       get () {
 8         return this.$store.state.project.projectId
 9       },
10       set (val) {
11         this.$store.dispatch('changeProject', val)
12       }
13     }
14   },

3.各子模块引入vuex下的项目列表 项目id

html
1 <el-form-item label="所属项目" prop="projectId">
2         <el-select v-model="queryParams.projectId" placeholder="所属项目" filterable clearable @change="handleQuery">
3           <el-option v-for="(item, index) in sysProjectList" :key="index" :label="item.label" :value="item.value" />
4         </el-select>
5 </el-form-item>
js
 1 import { mapGetters } from 'vuex'
 2 computed: {
 3     ...mapGetters([
 4       'sysProjectId',
 5       'sysProjectList',
 6     ]),
 7   },
 8   watch: {
 9     sysProjectId (newVal, oldVal) {
10       // 系统顶部选中项目变化
11       this.queryParams.projectId = newVal
12       this.getList()
13     }
14   },
15   created () {
16     this.queryParams.projectId = this.sysProjectId
17     this.getList();
18   },

 

posted @ 2023-03-15 16:37  请叫我王小胖  阅读(17)  评论(0编辑  收藏  举报