store.js 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273
  1. import {
  2. getUserInfo,
  3. getNavList,
  4. loginOut,
  5. loginUsersCheck
  6. } from '../util/api/user.js';
  7. import qs from 'qs';
  8. // 入口文件
  9. import Vue from 'vue';
  10. // 配置vuex的步骤
  11. // 1. 运行 cnpm i vuex -S
  12. // 2. 导入包
  13. import Vuex from 'vuex';
  14. // 3. 注册vuex到vue中
  15. Vue.use(Vuex);
  16. // 4. new Vuex.Store() 实例,得到一个 数据仓储对象
  17. import { assign, slice, isEmpty } from 'lodash-es';
  18. const store = new Vuex.Store({
  19. state: {
  20. // 大家可以把 state 想象成 组件中的 data ,专门用来存储数据的
  21. // 如果在 组件中,想要访问,store 中的数据,只能通过 this.$store.state.*** 来访问
  22. btnRight: [],
  23. massif_id: '',
  24. userInfo: {},
  25. navlistInfo: {},
  26. isLogin: false,
  27. firstPage: 'home',
  28. userMenuLimits: [],
  29. menuList1: [], //首页菜单
  30. menuList2: [], //出首页的其他菜单
  31. video: null,
  32. selfRoomInfo: null,
  33. pendingVideoConnect: false,
  34. isVideoTalking: false,
  35. isVideoCallRefused: false,
  36. pestTypeList: [{
  37. label: '林木害虫',
  38. value: '林木害虫',
  39. },
  40. {
  41. label: '实蝇',
  42. value: '实蝇',
  43. },
  44. {
  45. label: '杂草',
  46. value: '杂草',
  47. }], // 林木害虫类别分类
  48. },
  49. getters: {
  50. btnRight(state) {
  51. let btnRight = state.btnRight;
  52. if (btnRight.length == 0) {
  53. if (sessionStorage.getItem('btnRight') != null) {
  54. btnRight = JSON.parse(sessionStorage.getItem('btnRight') || []);
  55. }
  56. }
  57. return btnRight;
  58. }
  59. },
  60. mutations: {
  61. // 注意: 如果要操作 store 中的 state 值,只能通过 调用 mutations 提供的方法,才能操作对应的数据,不推荐直接操作 state 中的数据,因为 万一导致了数据的紊乱,不能快速定位到错误的原因,因为,每个组件都可能有操作数据的方法;
  62. SET_FIRSTPAGE: (state, firstPage) => {
  63. state.firstPage = firstPage;
  64. },
  65. SET_MENULIST1: (state, menuList1) => {
  66. state.menuList1 = menuList1;
  67. },
  68. SET_MENULIST2: (state, menuList2) => {
  69. state.menuList2 = menuList2;
  70. },
  71. SET_ISLOGIN: (state, isLogin) => {
  72. state.isLogin = isLogin;
  73. },
  74. SET_USERMENUMITS: (state, userMenuLimits) => {
  75. state.userMenuLimits = userMenuLimits;
  76. },
  77. SET_USERINFO: (state, userInfo) => {
  78. state.userInfo = userInfo;
  79. },
  80. SET_NAVLISTINFO: (state, navlistInfo) => {
  81. state.navlistInfo = navlistInfo;
  82. },
  83. btnRightFun(state, payload) {
  84. state.btnRight = payload;
  85. },
  86. // 注意: 如果组件想要调用 mutations 中的方法,只能使用 this.$store.commit('方法名')
  87. // 这种 调用 mutations 方法的格式,和 this.$emit('父组件中方法名')
  88. subtract(state, obj) {
  89. // 注意: mutations 的 函数参数列表中,最多支持两个参数,其中,参数1: 是 state 状态; 参数2: 通过 commit 提交过来的参数;
  90. console.log(obj);
  91. state.count -= obj.c + obj.d;
  92. },
  93. // echars的数据
  94. changeMassifId(state, val) {
  95. if (val) {
  96. state.massif_id = val;
  97. } else {
  98. state.massif_id = '';
  99. }
  100. },
  101. updateVideoInfo(state, payload) {
  102. state.video = assign({}, payload);
  103. state.pendingVideoConnect = !isEmpty(payload);
  104. },
  105. updateVideoSelfRoomInfo(state, payload) {
  106. state.selfRoomInfo = assign({}, payload);
  107. },
  108. updateMessageList(state, payload) {
  109. state.list = slice(payload);
  110. },
  111. updatePendingVideoConnectStatus(state, flag) {
  112. state.pendingVideoConnect = flag;
  113. },
  114. updateTalkingStatus(state, flag) {
  115. state.isVideoTalking = flag;
  116. },
  117. updateIsRefusedCall(state, flag) {
  118. state.isVideoCallRefused = flag;
  119. }
  120. },
  121. actions: {
  122. //获取用户信息
  123. getUserInfo({ commit, state }) {
  124. return new Promise((resolve, reject) => {
  125. var name = localStorage.getItem('cUsername');
  126. let postData = qs.stringify({
  127. real_name: name
  128. });
  129. getUserInfo(postData)
  130. .then(response => {
  131. if (response.data.message == '') {
  132. sessionStorage.setItem('userType', response.data.data[0].role_id);
  133. sessionStorage.setItem('logo', response.data.data[0].role_logo);
  134. commit('SET_USERINFO', response.data.data);
  135. resolve();
  136. } else {
  137. if (document.getElementsByClassName('el-message').length == 0) {
  138. this.$message.error(response.data.message);
  139. }
  140. reject();
  141. }
  142. })
  143. .catch(error => {
  144. reject(error);
  145. });
  146. });
  147. },
  148. // 获取权限
  149. getNavList({ commit, state }) {
  150. return new Promise((resolve, reject) => {
  151. getNavList()
  152. .then(res => {
  153. if (res.data.message == '') {
  154. commit('SET_USERMENUMITS', res.data.data.children);
  155. commit('SET_NAVLISTINFO', res.data.data);
  156. let menuList1 = [];
  157. let menuList2 = [];
  158. let navList = res.data.data.children;
  159. navList.forEach(item => {
  160. if (!item.menu && item.children.length) {
  161. item.menu = 'p' + item.children[0].menu;
  162. }
  163. if (item.children) {
  164. if (item.menu != 'bHome') {
  165. menuList2.push(item);
  166. }
  167. } else {
  168. menuList1.push(item);
  169. }
  170. // 判断设备管理中设备列表是否有信息修改权限
  171. if (item.purview_name == '设备管理') {
  172. if (item.children[0].purview_name == '设备列表') {
  173. for (var i = 0; i < item.children[0].children.length; i++) {
  174. if (
  175. item.children[0].children[i].purview_name == '信息修改'
  176. ) {
  177. sessionStorage.setItem('equipmentListAmend', true); // 存储信息修改是否可正常查看操作
  178. return false;
  179. } else {
  180. sessionStorage.removeItem('equipmentListAmend');
  181. }
  182. }
  183. }
  184. }
  185. });
  186. let firstPage = ''; //左侧菜单第一项
  187. if (menuList1.length > 0) {
  188. firstPage = menuList1[0].menu;
  189. } else {
  190. firstPage = menuList2[0].children[0].menu;
  191. }
  192. commit('SET_FIRSTPAGE', firstPage); //第一个页面
  193. let userType = res.data.data.myuser_type; //用户类型
  194. let userName = res.data.data.username; //用户名
  195. let myuid = res.data.data.myuid; //用户id
  196. sessionStorage.setItem('myuser_type', userType);
  197. sessionStorage.setItem('myuid', myuid);
  198. commit('SET_MENULIST1', menuList1);
  199. commit('SET_MENULIST2', menuList2);
  200. commit('SET_ISLOGIN', true);
  201. sessionStorage.setItem('sy_isLogin', true);
  202. resolve(res.data.data.username);
  203. } else {
  204. reject();
  205. }
  206. })
  207. .catch(error => {
  208. reject(error);
  209. });
  210. });
  211. },
  212. //退出登录
  213. loginOut({ commit }) {
  214. return new Promise((resolve, reject) => {
  215. loginOut()
  216. .then(res => {
  217. if (res.data.message == '') {
  218. window.sessionStorage.setItem('isLogin', false);
  219. window.localStorage.removeItem('session');
  220. commit('SET_ISLOGIN', false);
  221. resolve();
  222. } else {
  223. // 强制退出
  224. window.sessionStorage.setItem('isLogin', false);
  225. window.localStorage.removeItem('session');
  226. commit('SET_ISLOGIN', false);
  227. resolve();
  228. }
  229. })
  230. .catch(err => {
  231. // 强制退出
  232. window.sessionStorage.setItem('isLogin', false);
  233. window.localStorage.removeItem('session');
  234. commit('SET_ISLOGIN', false);
  235. resolve();
  236. });
  237. });
  238. },
  239. // 判断用户登录是否失效
  240. loginUsersCheck({ commit }) {
  241. return new Promise((resolve, reject) => {
  242. loginUsersCheck()
  243. .then(res => {
  244. console.log(res);
  245. if (res.data.data == 1) {
  246. //登录状态
  247. commit('SET_ISLOGIN', true);
  248. sessionStorage.setItem('isLogin', true);
  249. resolve();
  250. } else {
  251. //session过期
  252. commit('SET_ISLOGIN', false);
  253. window.localStorage.removeItem('session');
  254. sessionStorage.setItem('isLogin', false);
  255. reject();
  256. }
  257. })
  258. .catch(err => {
  259. commit('SET_ISLOGIN', false);
  260. window.localStorage.removeItem('session');
  261. sessionStorage.setItem('isLogin', false);
  262. reject();
  263. });
  264. });
  265. }
  266. }
  267. });
  268. export default store;