common.js 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311
  1. /*
  2. * @description 用于公用的数据状态管理模块。
  3. * @example-state state的调用方法 this.$store.state.common.$S_tabbar_tabIdx
  4. * @example-mutations mutations的调用方法 this.$store.commit('MUTA_TABIDX',param);
  5. * @example-actions actions的调用方法 this.$store.dispatch('ACTI_TABIDX',param);
  6. */ // 日志打印
  7. import reportErr from '@/util/errorReport/log.js';
  8. // 导入公用mixin
  9. import comMix from '@/common/mixin.js';
  10. // 导入接口
  11. import {
  12. API_getOpenid,
  13. API_getMachine,
  14. API_getConponList,
  15. API_getCheckYHJList,
  16. } from '@/common/api.js';
  17. export default {
  18. name: 'common',
  19. /*
  20. ** state格式:$S(表示store的数据) tabbar(表示哪一个页面) tabIdx(表示页面的哪一个数据)
  21. */
  22. state: {
  23. // 底部导航栏下标
  24. $S_tabbar_tabIdx: 0,
  25. // 购物车数据
  26. $S_tabbar_shopCarts: {},
  27. // 我的页面个人头像和昵称
  28. $S_mine_avatarNick: {
  29. avatarUrl: uni.getStorageSync('avatarNick').avatarUrl ||
  30. 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAAB4CAMAAAAOusbgAAAASFBMVEX09Pby8vTe3uDPz9DJycm/v8C9vb3BwcLLy8vR0dLp6evn5+i1tbWysrLb29zu7vDNzc7r6+26urrg4OG3t7fj4+TFxcbV1dY8QE/jAAABo0lEQVRo3u2Yi3KCMBBFCY8EIWs0Iv7/n7Y4djqFZEXCTVtnzw+cYZfsqygEQRAEQRAEQRCEt0OVVd1o0x66rNq+tvRFc8ymdSf6gTnn8XaeZthLDm8/0JIM5s5SiCvaq3TQS96BxRVFaLHeM0XBPuhTXAz9ZGfjYkJm+ch4CVnBak5cA8UDJx5wXkUsCiY+82Jcr+h5cf9+4o4X42qX48XACsIVLrI4b6E5sQaKW06M7BIlJy6BYsUk2eIKV8EMIEQV0lu4aJsYwENXtCPD9wkT9hq0NzJX2wy72/FXAj0xLr1jDm9g1LToNeLBYS4+5PEu23Kuq8Bi5oMWy78gvs7F8OX4QTMXN3m8gY3xlEHrgvtTDX/JF09BPPb80o0UZQSO1cw94J5pTLzVzdIT7A3wokv/THtP9d6jZm/WaCfMnquba9dqJ9rdUv08ufNU7xPl5jXtRLNDvG+vaydSP1qN27yf9STpZanVP/MSk2LeGOf0aG/4r75J6dKrqlUML+L/INYp4pQrUJUiTrlNqEr7jegq15gvCIIgCIIgCIIg7M4HkS5rj/A3dbUAAAAASUVORK5CYII=',
  31. nickName: uni.getStorageSync('avatarNick').nickName || '暂无昵称'
  32. },
  33. // app.vue页面的个人登录信息
  34. $S_app_loginInfos: {},
  35. // 设备编码:不开机:166581708014999678137587,开机:1665819865612635251739970
  36. $S_home_clientId: '',
  37. // 优惠码集合,用来校验重复问题
  38. $S_car_discountCodeList: [],
  39. // 如果商品编码是A31-35的则是mini版,图片显示要小些,有新增的话要在/static/images/home/goods.js里面找对应编码
  40. $S_home_miniProduct: ['A31', 'A32', 'A33', 'A34', 'A35'],
  41. // 机器状态
  42. $S_home_clientStatus: {
  43. // 设备名称
  44. storeName: '自动售卖机',
  45. // 是否开机状态
  46. startStatus: false,
  47. contactName: '',
  48. contactPhone: '',
  49. },
  50. // 单种商品
  51. $S_singleBye_shopCarts: {},
  52. // 优惠券
  53. $S_home_coupon: '',
  54. // 优惠券列表
  55. $S_home_couponList: [],
  56. // 用户有没有领取过优惠券
  57. $S_home_hasReceCoup: false,
  58. },
  59. getters: {
  60. // 设备编码
  61. GETT_clientId(state) {
  62. return state.$S_home_clientId;
  63. },
  64. // 个人登录信息
  65. GETT_loginInfos(state) {
  66. return state.$S_app_loginInfos;
  67. },
  68. // 是否存在小程序个人信息
  69. isGetUserInfo(state) {
  70. if (!state.$S_mine_avatarNick.nickName || state.$S_mine_avatarNick.nickName === '暂无昵称') {
  71. return false;
  72. } else {
  73. return true;
  74. }
  75. },
  76. // 首页购物车的总价格
  77. totalPrice(state) {
  78. let totalPrice = 0;
  79. let shopCarts = state.$S_tabbar_shopCarts;
  80. if (shopCarts) {
  81. for (let key in shopCarts) {
  82. totalPrice = comMix.methods.$M_Big(totalPrice).add(shopCarts[key]['totalPrice']).toNumber();
  83. }
  84. }
  85. return totalPrice;
  86. },
  87. // 首页购物车的总数量
  88. totalNums(state) {
  89. let nums = 0;
  90. let shopCarts = state.$S_tabbar_shopCarts;
  91. if (shopCarts) {
  92. for (let key in shopCarts) {
  93. nums = comMix.methods.$M_Big(nums).add(shopCarts[key]['nums']).toNumber();
  94. }
  95. }
  96. return nums;
  97. },
  98. // 优惠码集合
  99. GETT_discountCodeList(state) {
  100. return state.$S_car_discountCodeList;
  101. },
  102. // mini商品编码
  103. GETT_miniProduct(state) {
  104. return state.$S_home_miniProduct;
  105. },
  106. // 机器状态
  107. GETT_clientStatus(state) {
  108. return state.$S_home_clientStatus;
  109. },
  110. // 单种商品
  111. GETT_singleBye_shopCarts(state) {
  112. return state.$S_singleBye_shopCarts;
  113. },
  114. // 优惠券
  115. GETT_home_coupon(state) {
  116. return state.$S_home_coupon;
  117. },
  118. // 优惠券列表
  119. GETT_home_couponList(state) {
  120. const list = [];
  121. const couponList = state.$S_home_couponList;
  122. if (couponList.length > 0) {
  123. couponList.forEach(item => {
  124. // 如果是没有被使用过的
  125. if (item.isUse !== '1') {
  126. list.push({
  127. label: `${item.discount}元`,
  128. value: item.discount,
  129. lastUseDate: item.lastUseDate,
  130. code: item.code,
  131. isCheck: false,
  132. })
  133. }
  134. })
  135. }
  136. return list;
  137. },
  138. // 优惠券的总金额
  139. GETT_home_totalCoupon(state) {
  140. let totalMon = 0;
  141. if (state.$S_home_couponList.length > 0) {
  142. state.$S_home_couponList.forEach(item => {
  143. totalMon = comMix.methods.$M_Big(totalMon).add(item.discount).toNumber();
  144. })
  145. }
  146. return totalMon;
  147. },
  148. // 用户有没有领取过优惠券
  149. GETT_home_hasReceCoup(state) {
  150. return state.$S_home_hasReceCoup;
  151. },
  152. },
  153. mutations: {
  154. /*
  155. ** mutations格式:MUTA(表示mutations里的方法)TABIDX(表示页面的哪一个数据大写)
  156. */
  157. // 改变底部导航栏下标
  158. MUTA_TABIDX: (state, data) => {
  159. state.$S_tabbar_tabIdx = data;
  160. },
  161. // 改变购物车数据
  162. MUTA_SHOPCARTS: (state, data) => {
  163. state.$S_tabbar_shopCarts = {};
  164. state.$S_tabbar_shopCarts = data;
  165. },
  166. // 改变个人头像和昵称
  167. MUTA_AVATARNICK: (state, data) => {
  168. state.$S_mine_avatarNick = {};
  169. state.$S_mine_avatarNick = data;
  170. uni.setStorageSync('avatarNick', data);
  171. },
  172. // 登录获取openid
  173. MUTA_GETOPENID: (state, data) => {
  174. state.$S_app_loginInfos = {};
  175. state.$S_app_loginInfos = data;
  176. },
  177. // 储存优惠码
  178. MUTA_DISCOUNTCODE: (state, data) => {
  179. state.$S_car_discountCodeList = [];
  180. state.$S_car_discountCodeList = data;
  181. },
  182. // 设置机器编码
  183. MUTA_SETCLIENTID: (state, data) => {
  184. state.$S_home_clientId = data;
  185. },
  186. // 设置机器状态
  187. MUTA_SETCLIENTSTATUS: (state, data) => {
  188. state.$S_home_clientStatus = {};
  189. state.$S_home_clientStatus = data;
  190. },
  191. // 改变单种商品
  192. MUTA_SINGSHOPCARTS: (state, data) => {
  193. state.$S_singleBye_shopCarts = {};
  194. state.$S_singleBye_shopCarts = data;
  195. },
  196. // 储存优惠券
  197. MUTA_SETCOUPON: (state, data) => {
  198. state.$S_home_coupon = '';
  199. state.$S_home_coupon = data;
  200. },
  201. // 储存优惠券列表
  202. MUTA_SETCOUPONLIST: (state, data) => {
  203. state.$S_home_couponList = [];
  204. state.$S_home_couponList = data;
  205. },
  206. // 查询优惠券有没有领取了
  207. MUTA_HASRECECOUP: (state, data) => {
  208. state.$S_home_hasReceCoup = false;
  209. state.$S_home_hasReceCoup = data;
  210. },
  211. },
  212. actions: {
  213. /*
  214. ** actions格式:ACTI(表示actions里的方法)TABIDX(表示页面的哪一个数据大写)
  215. */
  216. // 改变底部导航栏下标
  217. ACTI_TABIDX: (context, data) => {
  218. context.commit('MUTA_TABIDX', data);
  219. },
  220. // 改变购物车数据
  221. ACTI_SHOPCARTS: (context, data) => {
  222. context.commit('MUTA_SHOPCARTS', data);
  223. },
  224. // 登录获取openid
  225. ACTI_GETOPENID: (context) => {
  226. return new Promise((resolve, reject) => {
  227. // 登录获取code
  228. uni.login({
  229. provider: 'weixin',
  230. success: async (loginRes) => {
  231. const code = loginRes.code;
  232. const param = {
  233. code
  234. }
  235. // 调用openid接口
  236. const res = await API_getOpenid(param, {
  237. loading: false
  238. });
  239. context.commit('MUTA_GETOPENID', res);
  240. resolve(true);
  241. },
  242. fail: err => {
  243. // // 错误上报
  244. reportErr('uni.login的报错!!!', err);
  245. resolve(false);
  246. }
  247. });
  248. })
  249. },
  250. // 查询优惠券有没有领取了MUTA_HASRECECOUP
  251. ACTI_HASRECECOUP: ({
  252. commit,
  253. rootState
  254. }, coup) => {
  255. return new Promise(async (resolve, reject) => {
  256. const res = await API_getCheckYHJList({
  257. wxId: rootState.common.$S_app_loginInfos.id
  258. });
  259. commit('MUTA_HASRECECOUP', res);
  260. resolve(res);
  261. })
  262. },
  263. // 获取机器状态
  264. ACTI_SETCLIENTSTATUS: (context, clientId) => {
  265. return new Promise(async (resolve, reject) => {
  266. const param = {
  267. clientId
  268. };
  269. const res = await API_getMachine(param);
  270. const statusParam = {
  271. storeName: '自动售卖机',
  272. startStatus: false,
  273. contactName: res.contactName,
  274. contactPhone: res.contactPhone,
  275. }
  276. // 如果是关机状态可以执行下面操作
  277. if (res.status == 1) {
  278. statusParam.storeName = `${res.name}(${clientId})`;
  279. statusParam.startStatus = true;
  280. } else {
  281. statusParam.storeName = `${res.name}(${clientId})`;
  282. statusParam.startStatus = false;
  283. }
  284. context.commit('MUTA_SETCLIENTSTATUS', statusParam);
  285. // 如果开机
  286. if (res.status == 1) {
  287. resolve(true);
  288. } else {
  289. resolve(false);
  290. }
  291. })
  292. },
  293. // 获取优惠券
  294. ACTI_SETCOUPONLIST: ({
  295. commit,
  296. rootState
  297. }) => {
  298. return new Promise(async (resolve, reject) => {
  299. const param = {
  300. wxId: rootState.common.$S_app_loginInfos.id
  301. };
  302. const res = await API_getConponList(param, {
  303. loading: false
  304. });
  305. // 储存优惠券列表到vuex,用于支付判断有没有优惠券可选
  306. commit('MUTA_SETCOUPONLIST', res);
  307. resolve(true);
  308. });
  309. },
  310. }
  311. }