From 22c254fffdc49de87e7cb90aeb8d3ac765d9cb87 Mon Sep 17 00:00:00 2001 From: wangyifeng <812766448@qq.com> Date: Mon, 28 Apr 2025 19:03:09 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BB=B4=E6=8A=A4=E6=96=B0base=EF=BC=8C?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=96=B0=E8=83=BD=E5=8A=9B=EF=BC=9A1?= =?UTF-8?q?=E3=80=81=E5=90=AF=E7=94=A8=E8=AF=AD=E9=9F=B3record=E6=A8=A1?= =?UTF-8?q?=E5=9D=97=E3=80=81sqlite=E6=A8=A1=E5=9D=97=EF=BC=9B2=E3=80=81?= =?UTF-8?q?=E5=B0=81=E8=A3=85plus=E7=9A=84sqlite=E6=96=B9=E6=B3=95?= =?UTF-8?q?=EF=BC=8C=E7=94=A8=E4=BA=8E=E5=90=8E=E7=BB=AD=E4=BD=BF=E7=94=A8?= =?UTF-8?q?=EF=BC=9B3=E3=80=81=E6=96=B0=E5=A2=9E=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E5=AE=89=E5=8D=93=E8=AF=BB=E5=86=99=E8=A7=86=E9=A2=91=E8=83=BD?= =?UTF-8?q?=E5=8A=9B=E7=9A=84=E6=9D=83=E9=99=90=EF=BC=8C=E9=80=82=E9=85=8D?= =?UTF-8?q?Android13=E5=89=8D=E5=90=8E=E7=89=88=E6=9C=AC=EF=BC=9B4?= =?UTF-8?q?=E3=80=81=E5=B0=81=E8=A3=85Android=E5=8E=9F=E7=94=9F=E8=A7=86?= =?UTF-8?q?=E9=A2=91=E5=A4=9A=E9=80=89=E6=8F=92=E4=BB=B6=EF=BC=8C=E5=AE=9E?= =?UTF-8?q?=E7=8E=B0=E5=9F=BA=E6=9C=AC=E5=A4=9A=E9=80=89=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- manifest.json | 31 ++++++- .../VideoPicker/android/VideoPicker.aar | Bin 0 -> 7377 bytes nativeplugins/VideoPicker/package.json | 35 ++++++++ pages/index/index.vue | 32 ++++++- utils/sqlite.js | 79 ++++++++++++++++++ 5 files changed, 172 insertions(+), 5 deletions(-) create mode 100644 nativeplugins/VideoPicker/android/VideoPicker.aar create mode 100644 nativeplugins/VideoPicker/package.json create mode 100644 utils/sqlite.js diff --git a/manifest.json b/manifest.json index bb318e9..64bcb37 100644 --- a/manifest.json +++ b/manifest.json @@ -2,8 +2,8 @@ "name" : "oa考勤系统", "appid" : "__UNI__4796942", "description" : "", - "versionName" : "2.3.2", - "versionCode" : 232, + "versionName" : "2.3.4", + "versionCode" : 234, "transformPx" : false, /* 5+App特有相关 */ "app-plus" : { @@ -27,7 +27,9 @@ "LivePusher" : {}, "Push" : {}, "Barcode" : {}, - "Share" : {} + "Share" : {}, + "Record" : {}, + "SQLite" : {} }, /* 应用发布信息 */ "distribute" : { @@ -48,7 +50,10 @@ "", "", "", - "" + "", + "", + "", + "" ], "abiFilters" : [ "armeabi-v7a", "arm64-v8a" ], "autoSdkPermissions" : false, @@ -146,6 +151,22 @@ "storyboard" : "files/CustomStoryboard.zip" } } + }, + "nativePlugins" : { + "VideoPicker" : { + "__plugin_info__" : { + "name" : "视频多选原生SDK", + "description" : "封装到js端使用", + "platforms" : "Android", + "url" : "", + "android_package_name" : "", + "ios_bundle_id" : "", + "isCloud" : false, + "bought" : -1, + "pid" : "", + "parameters" : {} + } + } } }, /* 快应用特有相关 */ @@ -172,3 +193,5 @@ }, "vueVersion" : "3" } +/* ios打包配置 *//* SDK配置 */ + diff --git a/nativeplugins/VideoPicker/android/VideoPicker.aar b/nativeplugins/VideoPicker/android/VideoPicker.aar new file mode 100644 index 0000000000000000000000000000000000000000..e592e11156d765b3989945258887b5f68276c3aa GIT binary patch literal 7377 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 literal 0 HcmV?d00001 diff --git a/nativeplugins/VideoPicker/package.json b/nativeplugins/VideoPicker/package.json new file mode 100644 index 0000000..f918d2f --- /dev/null +++ b/nativeplugins/VideoPicker/package.json @@ -0,0 +1,35 @@ +{ + "name": "视频多选原生SDK", + "id": "VideoPicker", + "version": "1.0.0", + "description": "封装到js端使用", + "_dp_type": "nativeplugin", + "_dp_nativeplugin": { + "android": { + "plugins": [{ + "type": "module", + "name": "VideoPicker", + "class": "io.dcloud.uniplugin.VideoPicker" + }], + "integrateType": "aar", + "dependencies": [ + "com.alibaba:fastjson:1.2.83", + "com.facebook.fresco:fresco:1.13.0", + "androidx.localbroadcastmanager:localbroadcastmanager:1.0.0", + "androidx.core:core:1.1.0", + "androidx.fragment:fragment:1.1.0", + "androidx.recyclerview:recyclerview:1.0.0", + "androidx.legacy:legacy-support-v4:1.0.0", + "androidx.appcompat:appcompat:1.0.0" + ], + "compileOptions": { + "sourceCompatibility": "1.8", + "targetCompatibility": "1.8" + }, + "abis": [ + "armeabi-v7a","arm64-v8a","x86" + ], + "minSdkVersion": "21" + } + } +} \ No newline at end of file diff --git a/pages/index/index.vue b/pages/index/index.vue index de61571..4f5e1b4 100644 --- a/pages/index/index.vue +++ b/pages/index/index.vue @@ -5,6 +5,7 @@ import { ref, onMounted } from 'vue' import { onExit, onShow } from "@dcloudio/uni-app"; import config from "../../config" +import { operateSQLite } from '../../utils/sqlite.js' onShow(() => { // const { statusBarHeight } = uni.getSystemInfoSync() // const wv1 = plus.webview.getWebviewById("custom-webview"); @@ -22,7 +23,7 @@ onShow(() => { // var currentWebview = page.$getAppWebview(); - + }) import { Communication } from '../../utils/communication.js'; const commun = new Communication() @@ -132,6 +133,35 @@ commun.registerHandler('createPushMessage', async (data) => { uni.createPushMessage(JSON.parse(decodeURIComponent(data))) }) +commun.registerHandler('operateSQLite', async (data) => { + operateSQLite(data) +}) + +commun.registerHandler('VideoPicker', async () => { + console.error("=======BASE==VideoPicker") + uni.requireNativePlugin('VideoPicker').pickVideos( + { maxCount: 9 }, + (res) => { + console.log('选中的视频:', res.paths) + let allWebview = plus.webview.all() + allWebview.forEach((webview) => { + if (webview.id === 'chat') { + //找到聊天的webview + console.log('找到聊天的webview', webview) + webview.evalJS( + `getBaseMulVideo('${encodeURIComponent( + JSON.stringify(res.paths), + )}')`, + ) + } + }) + }, + (err) => { + console.error('选择失败:', err) + }, + ) +}) + // 获取电子名片 async function getCard(phone) { uni.request({ diff --git a/utils/sqlite.js b/utils/sqlite.js new file mode 100644 index 0000000..ecdf9bc --- /dev/null +++ b/utils/sqlite.js @@ -0,0 +1,79 @@ +import { Communication } from './communication.js' +const commun = new Communication() + +// 操作数据库 +export const operateSQLite = (data) => { + const options = JSON.parse(decodeURIComponent(data)) + console.error('operateSQLite', options) + if (options.eventType === 'openDatabase') { + // 打开数据库 + let params = Object.assign({}, options.eventParams, { + success: function (e) { + console.log('打开数据库成功!' + JSON.stringify(e)) + }, + fail: function (e) { + console.log('打开数据库失败: ' + JSON.stringify(e)) + }, + }) + plus.sqlite.openDatabase(params) + } else if (options.eventType === 'executeSql') { + // 执行增删改等操作的sql语句 + let params = Object.assign({}, options.eventParams, { + success: function (e) { + console.log('执行增删改等操作sql语句成功!' + JSON.stringify(e)) + }, + fail: function (e) { + console.log('执行增删改等操作sql语句失败: ' + JSON.stringify(e)) + }, + }) + plus.sqlite.executeSql(params) + } else if (options.eventType === 'selectSql') { + // 执行查询的sql语句 + let params = Object.assign({}, options.eventParams, { + success: function (e) { + console.log('执行查询sql语句成功!' + JSON.stringify(e)) + }, + fail: function (e) { + console.log('执行查询sql语句失败: ' + JSON.stringify(e)) + }, + }) + plus.sqlite.selectSql(params) + } else if (options.eventType === 'closeDatabase') { + // 关闭数据库 + let params = Object.assign({}, options.eventParams, { + success: function (e) { + console.log('关闭数据库成功!' + JSON.stringify(e)) + }, + fail: function (e) { + console.log('关闭数据库失败: ' + JSON.stringify(e)) + }, + }) + plus.sqlite.selectSql(params) + } else if (options.eventType === 'isOpenDatabase') { + // 判断数据库是否打开 + const isOpen = plus.sqlite.isOpenDatabase(options.eventParams) + console.log('判断数据库是否打开:' + isOpen) + let allWebview = plus.webview.all() + allWebview.forEach((webview) => { + if (webview.id === 'webviewId1') { + //找到OA的webview + webview.evalJS( + `getBaseMessage('${encodeURIComponent( + JSON.stringify({ action: 'isOpenDatabase', data: isOpen }), + )}')`, + ) + } + }) + } else if (options.eventType === 'transaction') { + // 执行事务 + let params = Object.assign({}, options.eventParams, { + success: function (e) { + console.log('执行事务成功!' + JSON.stringify(e)) + }, + fail: function (e) { + console.log('执行事务失败: ' + JSON.stringify(e)) + }, + }) + plus.sqlite.transaction(params) + } +}