Setting.js 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. import store from '@/store'
  2. import Config from '@/core/config'
  3. import storage from '@/utils/storage'
  4. import * as SettingApi from '@/api/setting'
  5. import SettingKeyEnum from '@/common/enum/setting/Key'
  6. import platform from '@/core/platform'
  7. const CACHE_KEY = 'Setting'
  8. // 写入缓存, 到期时间10分钟
  9. const setStorage = data => {
  10. const expireTime = 10 * 60
  11. storage.set(CACHE_KEY, data, expireTime)
  12. }
  13. // 获取缓存中的数据
  14. const getStorage = () => {
  15. return storage.get(CACHE_KEY)
  16. }
  17. // 获取后端接口商城设置 (最新)
  18. const getApiData = () => {
  19. console.log('获取后端接口商城设置settingApi接口1',)
  20. return new Promise((resolve, reject) => {
  21. SettingApi.data()
  22. .then(result => {
  23. resolve(result.data.setting)
  24. })
  25. })
  26. }
  27. /**
  28. * 获取商城设置
  29. * 有缓存的情况下返回缓存, 没有缓存从后端api获取
  30. * @param {bool} isCache 是否从缓存中获取 [优点不用每次请求后端api 缺点后台更新设置后需等待时效性]
  31. */
  32. const data = (isCache = undefined) => {
  33. // console.log('获取后端接口商城设置settingApi接口2',)
  34. if (isCache == undefined) {
  35. isCache = Config.get('enabledSettingCache')
  36. }
  37. return new Promise((resolve, reject) => {
  38. const cacheData = getStorage()
  39. if (isCache && cacheData) {
  40. resolve(cacheData)
  41. } else {
  42. getApiData().then(data => {
  43. setStorage(data)
  44. resolve(data)
  45. })
  46. }
  47. })
  48. }
  49. // 获取商城设置(指定项)
  50. const item = (key, isCache = undefined) => {
  51. return new Promise((resolve, reject) => {
  52. data(isCache).then(setting => resolve(setting[key]))
  53. })
  54. }
  55. // 设置全局自定义主题
  56. const setAppTheme = () => {
  57. return new Promise((resolve, reject) => {
  58. item(SettingKeyEnum.APP_THEME.value).then(appTheme => {
  59. store.dispatch('SetAppTheme', appTheme)
  60. resolve()
  61. })
  62. })
  63. }
  64. // 是否显示客服按钮 (微信小程序客服只有在微信小程序端显示)
  65. const isShowCustomerBtn = async () => {
  66. const setting = await item(SettingKeyEnum.CUSTOMER.value, true)
  67. if (!setting.enabled) {
  68. return false
  69. }
  70. return setting.provider === 'mpwxkf' && platform === 'MP-WEIXIN'
  71. }
  72. export default {
  73. setStorage,
  74. data,
  75. item,
  76. setAppTheme,
  77. isShowCustomerBtn
  78. }