spuAnalysis.js 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. import * as api from '../api/client'
  2. const LS_KEY_RESULTS = 'spu_analysis_results'
  3. const LS_KEY_SELECTED_SPU = 'spu_analysis_selectedSpu'
  4. function loadFromLocalStorage() {
  5. try {
  6. const raw = localStorage.getItem(LS_KEY_RESULTS)
  7. const res = raw ? JSON.parse(raw) : {}
  8. const sel = localStorage.getItem(LS_KEY_SELECTED_SPU) || ''
  9. return { res, sel }
  10. } catch (e) {
  11. return { res: {}, sel: '' }
  12. }
  13. }
  14. function saveToLocalStorage(results, selectedSpu) {
  15. try {
  16. localStorage.setItem(LS_KEY_RESULTS, JSON.stringify(results || {}))
  17. localStorage.setItem(LS_KEY_SELECTED_SPU, selectedSpu || '')
  18. } catch (e) {}
  19. }
  20. function pickFirstSpu(obj) {
  21. const keys = Object.keys(obj || {})
  22. const first = keys.find(k => k !== '_analysis_summary_')
  23. return first || ''
  24. }
  25. const state = () => {
  26. const cached = loadFromLocalStorage()
  27. return {
  28. results: cached.res,
  29. loading: false,
  30. error: null,
  31. selectedSpu: cached.sel
  32. }
  33. }
  34. const mutations = {
  35. SET_RESULTS(state, payload) {
  36. state.results = payload || {}
  37. },
  38. SET_LOADING(state, payload) {
  39. state.loading = !!payload
  40. },
  41. SET_ERROR(state, payload) {
  42. state.error = payload || null
  43. },
  44. SET_SELECTED_SPU(state, payload) {
  45. state.selectedSpu = payload || ''
  46. }
  47. }
  48. const actions = {
  49. async uploadFile({ commit }, file) {
  50. commit('SET_LOADING', true)
  51. commit('SET_ERROR', null)
  52. try {
  53. const res = await api.uploadSpuFile(file)
  54. return res
  55. } catch (e) {
  56. commit('SET_ERROR', (e && e.message) || '上传失败')
  57. throw e
  58. } finally {
  59. commit('SET_LOADING', false)
  60. }
  61. },
  62. async analyzeFile({ commit }, file) {
  63. commit('SET_LOADING', true)
  64. commit('SET_ERROR', null)
  65. try {
  66. const response = await api.analyzeSpuFile(file)
  67. const results = response && response.data ? response.data : {}
  68. commit('SET_RESULTS', results)
  69. const firstSpu = pickFirstSpu(results)
  70. commit('SET_SELECTED_SPU', firstSpu || '')
  71. saveToLocalStorage(results, firstSpu || '')
  72. } catch (e) {
  73. if (e && (e.code === 'ECONNABORTED' || (e.message && e.message.indexOf('timeout') >= 0))) {
  74. commit('SET_ERROR', '分析超时,数据量较大,请稍后重试或联系管理员')
  75. } else {
  76. const msg = (e && e.response && e.response.data && e.response.data.message) || (e && e.message) || '分析失败'
  77. commit('SET_ERROR', msg)
  78. }
  79. throw e
  80. } finally {
  81. commit('SET_LOADING', false)
  82. }
  83. },
  84. async analyzeProductLifecycle({ commit }, file) {
  85. commit('SET_LOADING', true)
  86. commit('SET_ERROR', null)
  87. try {
  88. const response = await api.analyzeProductLifecycle(file)
  89. return response
  90. } catch (e) {
  91. commit('SET_ERROR', (e && e.message) || '商品生命周期分析失败')
  92. throw e
  93. } finally {
  94. commit('SET_LOADING', false)
  95. }
  96. },
  97. async fetchResults({ commit, state }) {
  98. commit('SET_LOADING', true)
  99. commit('SET_ERROR', null)
  100. try {
  101. const results = await api.getSpuResults()
  102. if (results && !results.message) {
  103. commit('SET_RESULTS', results)
  104. let selectedSpu = state.selectedSpu
  105. if (!selectedSpu || !results[selectedSpu]) {
  106. selectedSpu = pickFirstSpu(results)
  107. commit('SET_SELECTED_SPU', selectedSpu)
  108. }
  109. saveToLocalStorage(results, selectedSpu)
  110. }
  111. } catch (e) {
  112. commit('SET_ERROR', (e && e.message) || '获取结果失败')
  113. } finally {
  114. commit('SET_LOADING', false)
  115. }
  116. },
  117. selectSpu({ commit, state }, spu) {
  118. const next = spu || ''
  119. commit('SET_SELECTED_SPU', next)
  120. saveToLocalStorage(state.results, next)
  121. },
  122. clearResults({ commit }) {
  123. commit('SET_RESULTS', {})
  124. commit('SET_SELECTED_SPU', '')
  125. commit('SET_ERROR', null)
  126. saveToLocalStorage({}, '')
  127. }
  128. }
  129. export default {
  130. namespaced: true,
  131. state,
  132. mutations,
  133. actions
  134. }