Merge branch 'wyfMain-dev-sqlite' into wyfMain-dev-useBase

This commit is contained in:
wangyifeng 2025-04-28 19:25:09 +08:00
commit f056ebd176
4 changed files with 233 additions and 6 deletions

View File

@ -99,6 +99,27 @@ export function createApp() {
location.reload(true) location.reload(true)
} }
//检查聊天页面是否可用
window.checkChatWebviewAvailable = () => {
let OAWebView = plus.webview.all()
OAWebView.forEach((webview, index) => {
if (webview.id === 'webviewId1') {
webview.evalJS(`doneCheckChatWebviewAvailable()`)
}
})
}
//获取从base传来的多选视频列表
window.getBaseMulVideo = (videoList) => {
const videos = JSON.parse(decodeURIComponent(videoList))
console.error('=====videos', videos)
if(videos.length > 0){
const videoUri = videos[0]
console.error('=====videoUri', videoUri)
}
}
window.message = ['success', 'error', 'warning'].reduce((acc, type) => { window.message = ['success', 'error', 'warning'].reduce((acc, type) => {
acc[type] = (message) => { acc[type] = (message) => {
if (typeof message === 'string') { if (typeof message === 'string') {

View File

@ -162,6 +162,12 @@ const photoActionsSelect = (index) => {
) )
} }
} else { } else {
// let OAWebView = plus.webview.all()
// OAWebView.forEach((webview, index) => {
// if (webview.id === 'webviewId1') {
// webview.evalJS(`getPlusVideoPicker()`)
// }
// })
uni.chooseVideo({ uni.chooseVideo({
sourceType: ['album'], sourceType: ['album'],
compressed: true, compressed: true,
@ -317,7 +323,9 @@ const onUploadImageVideo = async (file, type = 'image', fileUrl) => {
virtualList.value.unshift(newItem) virtualList.value.unshift(newItem)
try { try {
const result = await uploadImg(form, (e) => onProgressFn(e, randomId)) const result = await uploadImg(form, (e) =>
onProgressFn(e, randomId),
)
console.log('视频上传完成,结果:', result) console.log('视频上传完成,结果:', result)
if (result.status === 0) { if (result.status === 0) {
@ -369,7 +377,7 @@ const onUploadImageVideo = async (file, type = 'image', fileUrl) => {
uploadsStore.updateUploadStatus(false) uploadsStore.updateUploadStatus(false)
message.error('获取视频信息失败') message.error('获取视频信息失败')
resolve('') resolve('')
} },
}) })
} }
}) })

View File

@ -5,8 +5,106 @@ import lodash from 'lodash'
import { ref } from 'vue' import { ref } from 'vue'
import { createGlobalState, useStorage } from '@vueuse/core' import { createGlobalState, useStorage } from '@vueuse/core'
import { uniStorage } from '@/utils/uniStorage.js' import { uniStorage } from '@/utils/uniStorage.js'
import { initDatabase } from './sqlite'
export const useDialogueListStore = createGlobalState(() => { export const useDialogueListStore = createGlobalState(() => {
const testDatabase = async () => {
// 初始化数据库
let chatDatabase = {
eventType: 'openDatabase',
eventParams: {
name: 'chat',
path: '_doc/chat.db',
},
}
let chatDBexecuteSql = {
eventType: 'executeSql',
eventParams: {
name: 'chat',
sql: `CREATE TABLE IF NOT EXISTS talk_records (
id INTEGER PRIMARY KEY AUTOINCREMENT,
msg_id TEXT NOT NULL,
sequence INTEGER NOT NULL,
talk_type INTEGER NOT NULL DEFAULT 1,
msg_type INTEGER NOT NULL DEFAULT 1,
user_id INTEGER NOT NULL DEFAULT 0,
receiver_id INTEGER NOT NULL DEFAULT 0,
is_revoke INTEGER NOT NULL DEFAULT 0,
is_mark INTEGER NOT NULL DEFAULT 0,
quote_id TEXT NOT NULL,
extra TEXT NOT NULL,
created_at TEXT NOT NULL,
updated_at TEXT NOT NULL,
biz_date TEXT
)`,
},
}
const content = {
content: "我试试传送文件和图片是不是一个接口",
name: "测试excel1.xlsx",
path: "https://cdn-test.szjixun.cn/fonchain-chat/chat/file/multipart/20250307/727a2371-ffc4-46da-b953-a7d449ff82ff-测试excel1.xlsx",
size: 9909,
drive: 3
};
const extra = JSON.stringify(content);
let chatDBexecuteSql2 = {
eventType: 'executeSql',
eventParams: {
name: 'chat',
sql: 'INSERT INTO talk_records (msg_id, sequence, talk_type, msg_type, user_id, receiver_id, is_revoke, is_mark, quote_id, extra, created_at, updated_at, biz_date) VALUES ("'+'77b715fb30f54f739a255a915ef72445'+'", 166, 2, 1, 1774, 888890, 0, 0, "'+''+'", "'+extra+'", "'+'2025-03-06T15:57:07.000Z'+'", "'+'2025-03-06T15:57:07.000Z'+'", "'+'20250306'+'")',
},
}
let chatDBSelectSql = {
eventType: 'selectSql',
eventParams: {
name: 'chat',
sql: `SELECT * FROM talk_records ORDER BY sequence DESC LIMIT 20`,
},
}
let chatDBIsOpenDatabase = {
eventType: 'isOpenDatabase',
eventParams: {
name: 'chat',
path: '_doc/chat.db',
},
}
document.addEventListener('plusready', () => {
let OAWebView = plus.webview.all()
OAWebView.forEach((webview, index) => {
if (webview.id === 'webviewId1') {
webview.evalJS(
`operateSQLite('${encodeURIComponent(
JSON.stringify(chatDatabase),
)}')`,
)
webview.evalJS(
`operateSQLite('${encodeURIComponent(
JSON.stringify(chatDBexecuteSql),
)}')`,
)
webview.evalJS(
`operateSQLite('${encodeURIComponent(
JSON.stringify(chatDBexecuteSql2),
)}')`,
)
webview.evalJS(
`operateSQLite('${encodeURIComponent(
JSON.stringify(chatDBSelectSql),
)}')`,
)
webview.evalJS(
`operateSQLite('${encodeURIComponent(
JSON.stringify(chatDBIsOpenDatabase),
)}')`,
)
}
})
})
}
testDatabase()
const dialogueList = useStorage('dialogueList', [], uniStorage) const dialogueList = useStorage('dialogueList', [], uniStorage)
// const dialogueList = ref([]) // const dialogueList = ref([])
const zpagingRef = ref() const zpagingRef = ref()
@ -32,7 +130,7 @@ export const useDialogueListStore = createGlobalState(() => {
talk: { talk: {
username: dialogue.talk.username, username: dialogue.talk.username,
talk_type: dialogue.talk.talk_type, talk_type: dialogue.talk.talk_type,
receiver_id: dialogue.talk.receiver_id receiver_id: dialogue.talk.receiver_id,
}, },
online: dialogue.online, online: dialogue.online,
records: dialogue.records || [], records: dialogue.records || [],
@ -43,7 +141,7 @@ export const useDialogueListStore = createGlobalState(() => {
isDismiss: dialogue.isDismiss, isDismiss: dialogue.isDismiss,
isQuit: dialogue.isQuit, isQuit: dialogue.isQuit,
unreadNum: dialogue.unreadNum, unreadNum: dialogue.unreadNum,
members: dialogue.members.map(member => ({ members: dialogue.members.map((member) => ({
id: member.id, id: member.id,
nickname: member.nickname, nickname: member.nickname,
avatar: member.avatar, avatar: member.avatar,
@ -55,9 +153,9 @@ export const useDialogueListStore = createGlobalState(() => {
key: member.key, key: member.key,
erp_user_id: member.erp_user_id, erp_user_id: member.erp_user_id,
is_mute: member.is_mute, is_mute: member.is_mute,
is_mine: member.is_mine is_mine: member.is_mine,
})), })),
forwardType: dialogue.forwardType forwardType: dialogue.forwardType,
} }
dialogueList.value.push(newDialogue) dialogueList.value.push(newDialogue)
} else { } else {

100
src/store/modules/sqlite.js Normal file
View File

@ -0,0 +1,100 @@
// 初始化数据库
export const initDatabase = async () => {
try {
const isOpen = await plus.sqlite.isOpenDatabase({
name: 'chat',
path: '_doc/chat.db'
})
if (!isOpen) {
await plus.sqlite.openDatabase({
name: 'chat',
path: '_doc/chat.db'
})
await plus.sqlite.executeSql({
name: 'chat',
sql: `
CREATE TABLE IF NOT EXISTS talk_records (
id INTEGER PRIMARY KEY AUTOINCREMENT,
msg_id TEXT NOT NULL,
sequence INTEGER NOT NULL,
talk_type INTEGER NOT NULL DEFAULT 1,
msg_type INTEGER NOT NULL DEFAULT 1,
user_id INTEGER NOT NULL DEFAULT 0,
receiver_id INTEGER NOT NULL DEFAULT 0,
is_revoke INTEGER NOT NULL DEFAULT 0,
is_mark INTEGER NOT NULL DEFAULT 0,
quote_id TEXT NOT NULL,
extra TEXT NOT NULL,
created_at TEXT NOT NULL,
updated_at TEXT NOT NULL,
biz_date TEXT
);
CREATE UNIQUE INDEX IF NOT EXISTS uk_msgid ON talk_records(msg_id);
CREATE UNIQUE INDEX IF NOT EXISTS idx_user_id_receiver_id_sequence ON talk_records(user_id, receiver_id, sequence);
CREATE INDEX IF NOT EXISTS idx_receiver_id ON talk_records(receiver_id);
CREATE INDEX IF NOT EXISTS idx_created_at ON talk_records(created_at);
CREATE INDEX IF NOT EXISTS idx_updated_at ON talk_records(updated_at);
CREATE INDEX IF NOT EXISTS idx_biz_date ON talk_records(biz_date);
`
})
}
return true
} catch (error) {
console.error('数据库初始化失败:', error)
return false
}
}
// 添加消息记录
export const sqlAddRecord = async (message) => {
try {
await plus.sqlite.executeSql({
name: 'chat',
sql: `INSERT INTO talk_records (
msg_id, sequence, talk_type, msg_type, user_id, receiver_id,
is_revoke, is_mark, quote_id, extra, created_at, updated_at, biz_date
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,
args: [
message.msg_id,
message.sequence,
message.talk_type,
message.msg_type,
message.user_id,
message.receiver_id,
message.is_revoke || 0,
message.is_mark || 0,
message.quote_id || '',
JSON.stringify(message.extra),
message.created_at,
message.updated_at,
message.biz_date
]
})
return true
} catch (error) {
console.error('添加消息失败:', error)
return false
}
}
// 查询消息记录
export const sqlGetRecord = async (receiverId, page = 1, pageSize = 20) => {
try {
const result = await plus.sqlite.selectSql({
name: 'chat',
sql: `SELECT * FROM talk_records
WHERE receiver_id = ?
ORDER BY sequence DESC
LIMIT ? OFFSET ?`,
args: [receiverId, pageSize, (page - 1) * pageSize]
})
return result
} catch (error) {
console.error('查询消息失败:', error)
return []
}
}