Setting.js 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  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. return new Promise((resolve, reject) => {
  20. SettingApi.data()
  21. .then(result => {
  22. resolve(result.data.setting)
  23. })
  24. })
  25. }
  26. /**
  27. * 获取商城设置
  28. * 有缓存的情况下返回缓存, 没有缓存从后端api获取
  29. * @param {bool} isCache 是否从缓存中获取 [优点不用每次请求后端api 缺点后台更新设置后需等待时效性]
  30. */
  31. const data = (isCache = undefined) => {
  32. if (isCache == undefined) {
  33. isCache = Config.get('enabledSettingCache')
  34. }
  35. return new Promise((resolve, reject) => {
  36. const cacheData = getStorage()
  37. if (isCache && cacheData) {
  38. resolve(cacheData)
  39. } else {
  40. getApiData().then(data => {
  41. setStorage(data)
  42. resolve(data)
  43. })
  44. }
  45. })
  46. }
  47. // 获取商城设置(指定项)
  48. const item = (key, isCache = undefined) => {
  49. return new Promise((resolve, reject) => {
  50. data(isCache).then(setting => resolve(setting[key]))
  51. })
  52. }
  53. // 设置全局自定义主题
  54. const setAppTheme = () => {
  55. return new Promise((resolve, reject) => {
  56. item(SettingKeyEnum.APP_THEME.value).then(appTheme => {
  57. store.dispatch('SetAppTheme', appTheme)
  58. resolve()
  59. })
  60. })
  61. }
  62. // 是否显示客服按钮 (微信小程序客服只有在微信小程序端显示)
  63. const isShowCustomerBtn = async () => {
  64. const setting = await item(SettingKeyEnum.CUSTOMER.value, true)
  65. if (!setting.enabled) {
  66. return false
  67. }
  68. return setting.provider === 'mpwxkf' && platform === 'MP-WEIXIN'
  69. }
  70. export default {
  71. setStorage,
  72. data,
  73. item,
  74. setAppTheme,
  75. isShowCustomerBtn
  76. }