# useWebSocket

const { send, data } = useWebSocket(wsUrl.value, {
  onConnected(ws) {
    send(JSON.stringify(message))
  },
  onMessage(ws, event) {
    const receiveData = JSON.parse(data.value)
    if (receiveData?.payload?.output?.payload?.text) {
      optimizePrompt.value += receiveData.payload.output.payload.text
      versionSelectorRef.value?.debouncedSetSessionStorage(
        selectedVersion.value,
        optimizePrompt.value
      )
    }
    if (optimizePrompt.value.length > 0) {
      optimizingLoading.value = false
    }
  },
  onError(ws, event) {
    console.log('onError: ', event)
    optimizingLoading.value = false
  }
})
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

# 使用useSessionStorage优化sessionStorage操作

原代码:

import { defineStore } from 'pinia'
import { ref } from 'vue'

const KEY = 'production_indicator_scenarios'
const KEY_ACTIVE_SCENARIO = 'production_indicator_active_scenario'

export interface Scenario {
  id: string
  title: string
  icon: string
  color: string
  bodyId?: string
  versionId?: string
  nodeCode?: string
}

const DEFAULT_SCENARIOS = {
  // ...
}

export const useScenarioStore = defineStore('scenario', () => {
  const getScenarios = () => {
    try {
      const data = sessionStorage.getItem(KEY)
      return data ? JSON.parse(data) : DEFAULT_SCENARIOS
    } catch {
      return DEFAULT_SCENARIOS
    }
  }
  const getActiveScenario = () => {
    try {
      const activeScenario = sessionStorage.getItem(KEY_ACTIVE_SCENARIO)
      return activeScenario ? JSON.parse(activeScenario) : {}
    } catch {
      return null
    }
  }

  const scenarios = ref<Record<string, Scenario>>(getScenarios())
  const activeScenario = ref<Scenario | null>(getActiveScenario())

  const setScenarios = (data: Partial<Scenario>) => {
    console.group('缓存scenarios: ', data)
    const oldData = JSON.parse(sessionStorage.getItem(KEY) || '{}')
    const newData = { ...oldData, ...data }
    scenarios.value = newData
    sessionStorage.setItem(KEY, JSON.stringify(newData))
  }
  const setActiveScenario = (data: Scenario | null) => {
    activeScenario.value = data
    sessionStorage.setItem(KEY_ACTIVE_SCENARIO, JSON.stringify(data))
  }

  const clearScenarios = () => {
    scenarios.value = {}
    sessionStorage.removeItem(KEY)
  }
  const clearActiveScenario = () => {
    activeScenario.value = null
    sessionStorage.removeItem(KEY_ACTIVE_SCENARIO)
  }
  return {
    scenarios,
    activeScenario,
    getScenarios,
    setScenarios,
    clearScenarios,
    clearActiveScenario,
    getActiveScenario,
    setActiveScenario
  }
})
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72

优化后的代码:

export const useScenarioStore = defineStore('scenario', () => {
  const scenarios = useSessionStorage<Record<string, Scenario>>(KEY, DEFAULT_SCENARIOS)
  const activeScenario = useSessionStorage<Scenario | null>(KEY_ACTIVE_SCENARIO, null)

  const getScenarios = computed (() => scenarios.value)
  const getActiveScenario = computed (() => activeScenario.value)

  const setScenarios = (data: Record<string, Scenario>) => {
    scenarios.value = {
      ...scenarios.value,
      ...data
    }
  }
  const setActiveScenario = (data: Scenario | null) => {
    activeScenario.value = data
  }

  const clearScenarios = () => {
    scenarios.value = { ...DEFAULT_SCENARIOS }
  }
  const clearActiveScenario = () => {
    activeScenario.value = null
  }
  return {
    getScenarios,
    getActiveScenario,
    setScenarios,
    setActiveScenario,
    clearScenarios,
    clearActiveScenario,
  }
})
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32