Merge pull request 'zdg' (#257) from zdg into main

Reviewed-on: #257
This commit is contained in:
zhengdegang 2024-09-23 17:28:43 +08:00
commit 83e985e0d6
4 changed files with 37 additions and 19 deletions

View File

@ -5,6 +5,8 @@ const isNode = typeof require !== 'undefined' // 是否支持node函数
const { ipcRenderer } = isNode?require('electron'):{} // app使用 const { ipcRenderer } = isNode?require('electron'):{} // app使用
import { sessionStore } from '@/utils/store' import { sessionStore } from '@/utils/store'
import CircularJSON from 'circular-json' import CircularJSON from 'circular-json'
import _ from 'lodash'
// import { diff } from 'jsondiffpatch' // import { diff } from 'jsondiffpatch'
// const Remote = isNode?require('@electron/remote'):{} // 远程模块 // const Remote = isNode?require('@electron/remote'):{} // 远程模块
@ -19,19 +21,14 @@ export function shareStorePlugin({store}) {
const storeName = mutation.storeId const storeName = mutation.storeId
// 用于多窗口共享(需要共享的状态名称) // 用于多窗口共享(需要共享的状态名称)
const names = ['tool'] const names = ['tool']
if (names.includes(storeName)) { if (names.includes(storeName)) stateSyncWatch(storeName, state) // 需要同步
const { storeId: storeName, payload, events, type } = mutation // direct
// if (!Object.keys(payload).length) return
// if (type != 'direct' || !events || Array.isArray(events) || !events.key) return
stateSyncWatch(storeName, state) // 需要同步
}
}) })
// 暴露方法-手动同步 // 暴露方法-手动同步
store.stateSync = (storeName, key, value) => { store.stateSync = (storeName, key, value) => {
const state = store.$state const state = store.$state
if (!storeName && !!key && !!value) stateSync(storeName, key, value, state) if (!storeName && !!key && !!value) stateSync(storeName, key, value, state)
else stateSyncAll(store, state) else stateSyncAll(store)
} }
// 暴露方法-发送当前状态-新窗口 // 暴露方法-发送当前状态-新窗口
store.stateSyncInit = wid => stateSyncInit(wid, store) store.stateSyncInit = wid => stateSyncInit(wid, store)
@ -58,21 +55,42 @@ function stateSync(storeName, key, value, state) {
function stateSyncWatch(storeName, newState) { function stateSyncWatch(storeName, newState) {
const oldState = sessionStore.store // 旧数据 const oldState = sessionStore.store // 旧数据
const diffData = findDifferences(oldState, newState) const diffData = findDifferences(oldState, newState)
// console.log('state-change-diffData', diffData) if(!_.keys(diffData).length) return // 没有变化就终止执行
// 数据处理: 找出差异
console.log('state-change-diffData', diffData)
try { try {
let pinaValue = {} // store pina状态管理需要的数据格式
// 数据转换处理
for(const key in diffData) { for(const key in diffData) {
const value = diffData[key] || null const value = diffData[key] || null
const newValue = {} // 重新组装pinia需要的数据 {a:{b:1}} 这种 const newValue = {} // 重新组装pinia需要的数据 {a:{b:1}} 这种
const keyArr = key.split('.') || [] const keyArr = key.split('.') || []
keyArr.reduce((o,c,i)=>{o[c] = i === keyArr.length-1 ? value : {};return o[c]}, newValue) keyArr.reduce((o,c,i)=>{o[c] = i === keyArr.length-1 ? value : {};return o[c]}, newValue)
const jsonStr = JSON.stringify(newValue) // 从新组装-json数据 // 合并数据 loadsh _.merge() 函数
_.merge(pinaValue, newValue)
}
// 数据处理: electron-store
const [key, value] = _.toPairs(pinaValue)[0] // 对象转换为数组 {a:1} toPairs [['a',1]]
// 无数据就终止执行
if (!key || !value) return
// 更新本地数据-session // 更新本地数据-session
// console.log('state-change-update:', key, value) // 直接获取当前最新值(整体更新)上面获取到value是差异值并不能知道删除还是新增
sessionStore.set(key, value) const newValAll = _.get(newState, key)
const oldValAll = sessionStore.get(key)
// 没变化也终止执行
if (_.isEqual(oldValAll, newValAll)) return
// 更新本地数据-session
sessionStore.set(key, newValAll)
// 数据处理: pina-store
const jsonStr = JSON.stringify(pinaValue) // 从新组装-json数据
// 通知主线程更新 // 通知主线程更新
ipcRenderer?.invoke('pinia-state-change', storeName, jsonStr) ipcRenderer?.invoke('pinia-state-change', storeName, jsonStr)
// console.log('======',key, value, jsonStr ) // console.log('======',key, value, jsonStr )
}
} catch (error) { } catch (error) {
console.log('state-change-error', error) console.log('state-change-error', error)
} }

View File

@ -23,7 +23,7 @@ export const useToolState = defineStore('tool', {
}), }),
actions: { actions: {
async resetDef() { // 重置数据-下课 async resetDef() { // 重置数据-下课
// this.model = 'select' // 悬浮球-当前模式 this.model = 'select' // 悬浮球-当前模式
await sleep(50) // 休眠50ms await sleep(50) // 休眠50ms
this.showBoardAll = false // 全屏画板-是否显示 this.showBoardAll = false // 全屏画板-是否显示
await sleep(50) // 休眠50ms await sleep(50) // 休眠50ms

View File

@ -302,7 +302,7 @@
addClasses({classIds:classids.value.join(','),userId:userStore.userId}).then(res => { addClasses({classIds:classids.value.join(','),userId:userStore.userId}).then(res => {
if (res.code === 200) { if (res.code === 200) {
dialogVisible.value = false dialogVisible.value = false
ElMessage({x ElMessage({
message: res.msg, message: res.msg,
type: 'success', type: 'success',
}) })

View File

@ -219,15 +219,15 @@ const sideChange = async o => {
}).then(async() => { }).then(async() => {
await imChatRef.value?.imChatObj?.imChat?.sendMsgClosed() // await imChatRef.value?.imChatObj?.imChat?.sendMsgClosed() //
// const elMsg = ElMessage.warning({duration:0,message:'...'}) // const elMsg = ElMessage.warning({duration:0,message:'...'})
// const elMsg = ElLoading.service({lock: true, text: '...', background: 'rgba(0, 0, 0, 0.7)'}) const elMsg = ElLoading.service({lock: true, text: '正在下课...', background: 'rgba(0, 0, 0, 0.7)'})
// 2 // 2
setTimeout(async() => { setTimeout(async() => {
// elMsg.close()
// toolStore.isToolWin = false // toolStore.isToolWin = false
toolStore.resetDef() // toolStore.resetDef() //
await imChatRef.value?.deleteGroup() // await imChatRef.value?.deleteGroup() //
await imChatRef.value?.logout() // 退im await imChatRef.value?.logout() // 退im
await classManageApi.endClass(route.query.reservId) await classManageApi.endClass(route.query.reservId)
elMsg.close()
ipcMsgSend('tool-sphere:close') // ipcMsgSend('tool-sphere:close') //
}, 500); }, 500);