| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142 |
- import * as api from '../api/client'
- const LS_KEY_RESULTS = 'spu_analysis_results'
- const LS_KEY_SELECTED_SPU = 'spu_analysis_selectedSpu'
- function loadFromLocalStorage() {
- try {
- const raw = localStorage.getItem(LS_KEY_RESULTS)
- const res = raw ? JSON.parse(raw) : {}
- const sel = localStorage.getItem(LS_KEY_SELECTED_SPU) || ''
- return { res, sel }
- } catch (e) {
- return { res: {}, sel: '' }
- }
- }
- function saveToLocalStorage(results, selectedSpu) {
- try {
- localStorage.setItem(LS_KEY_RESULTS, JSON.stringify(results || {}))
- localStorage.setItem(LS_KEY_SELECTED_SPU, selectedSpu || '')
- } catch (e) {}
- }
- function pickFirstSpu(obj) {
- const keys = Object.keys(obj || {})
- const first = keys.find(k => k !== '_analysis_summary_')
- return first || ''
- }
- const state = () => {
- const cached = loadFromLocalStorage()
- return {
- results: cached.res,
- loading: false,
- error: null,
- selectedSpu: cached.sel
- }
- }
- const mutations = {
- SET_RESULTS(state, payload) {
- state.results = payload || {}
- },
- SET_LOADING(state, payload) {
- state.loading = !!payload
- },
- SET_ERROR(state, payload) {
- state.error = payload || null
- },
- SET_SELECTED_SPU(state, payload) {
- state.selectedSpu = payload || ''
- }
- }
- const actions = {
- async uploadFile({ commit }, file) {
- commit('SET_LOADING', true)
- commit('SET_ERROR', null)
- try {
- const res = await api.uploadSpuFile(file)
- return res
- } catch (e) {
- commit('SET_ERROR', (e && e.message) || '上传失败')
- throw e
- } finally {
- commit('SET_LOADING', false)
- }
- },
- async analyzeFile({ commit }, file) {
- commit('SET_LOADING', true)
- commit('SET_ERROR', null)
- try {
- const response = await api.analyzeSpuFile(file)
- const results = response && response.data ? response.data : {}
- commit('SET_RESULTS', results)
- const firstSpu = pickFirstSpu(results)
- commit('SET_SELECTED_SPU', firstSpu || '')
- saveToLocalStorage(results, firstSpu || '')
- } catch (e) {
- if (e && (e.code === 'ECONNABORTED' || (e.message && e.message.indexOf('timeout') >= 0))) {
- commit('SET_ERROR', '分析超时,数据量较大,请稍后重试或联系管理员')
- } else {
- const msg = (e && e.response && e.response.data && e.response.data.message) || (e && e.message) || '分析失败'
- commit('SET_ERROR', msg)
- }
- throw e
- } finally {
- commit('SET_LOADING', false)
- }
- },
- async analyzeProductLifecycle({ commit }, file) {
- commit('SET_LOADING', true)
- commit('SET_ERROR', null)
- try {
- const response = await api.analyzeProductLifecycle(file)
- return response
- } catch (e) {
- commit('SET_ERROR', (e && e.message) || '商品生命周期分析失败')
- throw e
- } finally {
- commit('SET_LOADING', false)
- }
- },
- async fetchResults({ commit, state }) {
- commit('SET_LOADING', true)
- commit('SET_ERROR', null)
- try {
- const results = await api.getSpuResults()
- if (results && !results.message) {
- commit('SET_RESULTS', results)
- let selectedSpu = state.selectedSpu
- if (!selectedSpu || !results[selectedSpu]) {
- selectedSpu = pickFirstSpu(results)
- commit('SET_SELECTED_SPU', selectedSpu)
- }
- saveToLocalStorage(results, selectedSpu)
- }
- } catch (e) {
- commit('SET_ERROR', (e && e.message) || '获取结果失败')
- } finally {
- commit('SET_LOADING', false)
- }
- },
- selectSpu({ commit, state }, spu) {
- const next = spu || ''
- commit('SET_SELECTED_SPU', next)
- saveToLocalStorage(state.results, next)
- },
- clearResults({ commit }) {
- commit('SET_RESULTS', {})
- commit('SET_SELECTED_SPU', '')
- commit('SET_ERROR', null)
- saveToLocalStorage({}, '')
- }
- }
- export default {
- namespaced: true,
- state,
- mutations,
- actions
- }
|