From 573f01e528f56e62c26fcbcf519bf06ab50f3d63 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?VK=E4=BA=91=E6=A1=8C=E9=9D=A2?= <370725567@qq.com> Date: Sat, 26 Feb 2022 17:05:38 +0800 Subject: [PATCH] 1.9.0 --- README/1.9/1.9.0.md | 17 ++ changelog.md | 19 ++ package-lock.json | 8 +- package.json | 4 +- pages.json | 4 +- ...-dynamic.vue => vk-components-dynamic.vue} | 0 ...ndb-global-data.vue => vk-global-data.vue} | 0 .../system_uni/components-dynamic/sys/add.js | 2 +- .../components-dynamic/sys/delete.js | 2 +- .../components-dynamic/sys/getList.js | 2 +- .../components-dynamic/sys/update.js | 2 +- .../admin/system_uni/global-data/sys/add.js | 2 +- .../system_uni/global-data/sys/delete.js | 2 +- .../system_uni/global-data/sys/getList.js | 2 +- .../system_uni/global-data/sys/update.js | 2 +- .../uni-id-files/categories/kh/getList.js | 2 +- .../uni-id-files/categories/sys/add.js | 2 +- .../uni-id-files/categories/sys/delete.js | 2 +- .../uni-id-files/categories/sys/update.js | 2 +- .../uni-id-files/files/kh/delete.js | 4 +- .../uni-id-files/files/kh/getList.js | 2 +- .../uni-id-files/files/kh/update.js | 2 +- .../client/pub/getComponentsDynamicData.js | 2 +- .../components_dynamic/client/pub/init.js | 2 +- .../components_dynamic/client/pub/update.js | 2 +- .../router/service/user/kh/addUploadRecord.js | 2 +- uniCloud-aliyun/database/db_init.json | 204 +++++++++--------- .../database/db_init/opendb-admin-menus.json | 4 +- .../database/db_init/uni-id-permissions.json | 4 +- ...\347\273\237\350\256\276\347\275\256.json" | 8 +- uni_modules/vk-unicloud/changelog.md | 18 ++ uni_modules/vk-unicloud/package.json | 2 +- uni_modules/vk-unicloud/readme.md | 2 +- .../common/vk-unicloud/index.js | 2 +- .../common/vk-unicloud/package.json | 2 +- 35 files changed, 202 insertions(+), 136 deletions(-) create mode 100644 README/1.9/1.9.0.md rename pages_plugs/system_uni/{opendb-components-dynamic.vue => vk-components-dynamic.vue} (100%) rename pages_plugs/system_uni/{opendb-global-data.vue => vk-global-data.vue} (100%) diff --git a/README/1.9/1.9.0.md b/README/1.9/1.9.0.md new file mode 100644 index 0000000..5583da2 --- /dev/null +++ b/README/1.9/1.9.0.md @@ -0,0 +1,17 @@ +###【重要】由于uni官方限制自定义表不可以用 `opendb-` 和 `uni-` 开头,故以下数据库表名只能进行调整 + +* 1、`opendb-components-dynamic` 改为 `vk-components-dynamic` +* 2、`opendb-global-data` 改为 `vk-global-data` +* 3、`uni-id-files` 改为 `vk-files` +* 4、`uni-id-files-categories` 改为 `vk-files-categories` + +___更改表名势必会对老项目产生影响。(对新项目无影响)___ + +### 老项目更新注意事项: +* 1、老项目更新后,还需要从 `unicloud控制台` 把表名改成对应的新表名 +* 2、在项目代码中全局搜索旧表名,替换成新表名 + +##### 框架更新步骤 [点击查看](https://vkdoc.fsq.pub/admin/1/update.html) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +##### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 diff --git a/changelog.md b/changelog.md index 71e71e2..499aeeb 100644 --- a/changelog.md +++ b/changelog.md @@ -1,3 +1,22 @@ +## 1.9.0(2022-02-26) +###【重要】由于uni官方限制自定义表不可以用 `opendb-` 和 `uni-` 开头,故以下数据库表名只能进行调整 + +* 1、`opendb-components-dynamic` 改为 `vk-components-dynamic` +* 2、`opendb-global-data` 改为 `vk-global-data` +* 3、`uni-id-files` 改为 `vk-files` +* 4、`uni-id-files-categories` 改为 `vk-files-categories` + +___更改表名势必会对老项目产生影响。(对新项目无影响)___ + +### 老项目更新注意事项: +* 1、老项目更新后,还需要从 `unicloud控制台` 把表名改成对应的新表名 +* 2、在项目代码中全局搜索旧表名,替换成新表名 + +##### 框架更新步骤 [点击查看](https://vkdoc.fsq.pub/admin/1/update.html) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +##### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 + ## 1.8.13(2022-02-24) * 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.8.36` * 2、【新增】`addAdminLog` 中间件示例。 diff --git a/package-lock.json b/package-lock.json index 5ba287b..b74919a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "vk-unicloud-admin", - "version": "1.8.12", + "version": "1.8.13", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -104,9 +104,9 @@ } }, "vk-unicloud-admin-ui": { - "version": "1.8.36", - "resolved": "https://registry.npmjs.org/vk-unicloud-admin-ui/-/vk-unicloud-admin-ui-1.8.36.tgz", - "integrity": "sha512-4rHOsiPRaEVK3HMMQ5i1hp0sFbbUboXVk/unwg7iR0aeofMPQOi8ibxbjgLdINoOIAY5HQ8IhRhMuvrqT8+WjQ==" + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/vk-unicloud-admin-ui/-/vk-unicloud-admin-ui-1.9.0.tgz", + "integrity": "sha512-BXwQrgu8S6I8ChONksR+8iqpniYuK/b1Uo4ZRH0JF/ER5tGcEw0F144jXP8oi0qp3LpqPevORVJaBcx8iaMa+A==" }, "vuedraggable": { "version": "2.24.3", diff --git a/package.json b/package.json index 973bffc..8ec893e 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "id": "vk-unicloud-admin", "name": "vk-unicloud-admin", - "version": "1.8.13", + "version": "1.9.0", "displayName": "【开箱即用】vk-unicloud-admin-快速开发框架-打造unicloud最好用的admin", "description": "vk-unicloud-admin是基于unicloud+uni-id+element+vk-unicloud-router的一套快速PC admin企业级开发框架。小白几分钟即完成一个页面CRUD。", "keywords": [ @@ -22,7 +22,7 @@ "dependencies": { "element-ui": "^2.15.7", "umy-ui": "^1.1.6", - "vk-unicloud-admin-ui": "^1.8.36" + "vk-unicloud-admin-ui": "^1.9.0" }, "engines": { "HBuilderX": "^3.1.10" diff --git a/pages.json b/pages.json index 6d55920..8b922e6 100644 --- a/pages.json +++ b/pages.json @@ -24,10 +24,10 @@ { "path": "system/permission/list" }, { "path": "system/menu/list" }, { "path": "system/app/list" }, - { "path": "system_uni/opendb-global-data" }, + { "path": "system_uni/vk-global-data" }, { "path": "system_uni/uni-id-log" }, { "path": "system_uni/opendb-admin-log" }, - { "path": "system_uni/opendb-components-dynamic" }, + { "path": "system_uni/vk-components-dynamic" }, { "path": "system_uni/uni-id-files/list" } ] }, diff --git a/pages_plugs/system_uni/opendb-components-dynamic.vue b/pages_plugs/system_uni/vk-components-dynamic.vue similarity index 100% rename from pages_plugs/system_uni/opendb-components-dynamic.vue rename to pages_plugs/system_uni/vk-components-dynamic.vue diff --git a/pages_plugs/system_uni/opendb-global-data.vue b/pages_plugs/system_uni/vk-global-data.vue similarity index 100% rename from pages_plugs/system_uni/opendb-global-data.vue rename to pages_plugs/system_uni/vk-global-data.vue diff --git a/uniCloud-aliyun/cloudfunctions/router/service/admin/system_uni/components-dynamic/sys/add.js b/uniCloud-aliyun/cloudfunctions/router/service/admin/system_uni/components-dynamic/sys/add.js index c407372..62a7421 100644 --- a/uniCloud-aliyun/cloudfunctions/router/service/admin/system_uni/components-dynamic/sys/add.js +++ b/uniCloud-aliyun/cloudfunctions/router/service/admin/system_uni/components-dynamic/sys/add.js @@ -26,7 +26,7 @@ module.exports = { if(vk.pubfn.isNullOne(data_id, data)){ return { code : -1, msg : '参数错误' }; } - let dbName = "opendb-components-dynamic"; + let dbName = "vk-components-dynamic"; // 检测key是否已存在 let num = await vk.baseDao.count({ dbName:dbName, diff --git a/uniCloud-aliyun/cloudfunctions/router/service/admin/system_uni/components-dynamic/sys/delete.js b/uniCloud-aliyun/cloudfunctions/router/service/admin/system_uni/components-dynamic/sys/delete.js index a07c758..1ffbbc0 100644 --- a/uniCloud-aliyun/cloudfunctions/router/service/admin/system_uni/components-dynamic/sys/delete.js +++ b/uniCloud-aliyun/cloudfunctions/router/service/admin/system_uni/components-dynamic/sys/delete.js @@ -21,7 +21,7 @@ module.exports = { } // 执行数据库API请求 let num = await vk.baseDao.del({ - dbName:"opendb-components-dynamic", + dbName:"vk-components-dynamic", whereJson:{ _id } diff --git a/uniCloud-aliyun/cloudfunctions/router/service/admin/system_uni/components-dynamic/sys/getList.js b/uniCloud-aliyun/cloudfunctions/router/service/admin/system_uni/components-dynamic/sys/getList.js index 11060b8..638b64f 100644 --- a/uniCloud-aliyun/cloudfunctions/router/service/admin/system_uni/components-dynamic/sys/getList.js +++ b/uniCloud-aliyun/cloudfunctions/router/service/admin/system_uni/components-dynamic/sys/getList.js @@ -18,7 +18,7 @@ module.exports = { let { uid } = data; let res = { code : 0, msg : '' }; // 业务逻辑开始----------------------------------------------------------- - let dbName = "opendb-components-dynamic"; + let dbName = "vk-components-dynamic"; res = await vk.baseDao.getTableData({ dbName, data, diff --git a/uniCloud-aliyun/cloudfunctions/router/service/admin/system_uni/components-dynamic/sys/update.js b/uniCloud-aliyun/cloudfunctions/router/service/admin/system_uni/components-dynamic/sys/update.js index a1fcfd9..68b3d3c 100644 --- a/uniCloud-aliyun/cloudfunctions/router/service/admin/system_uni/components-dynamic/sys/update.js +++ b/uniCloud-aliyun/cloudfunctions/router/service/admin/system_uni/components-dynamic/sys/update.js @@ -23,7 +23,7 @@ module.exports = { if(vk.pubfn.isNullOne(_id, data_id)){ return { code : -1, msg : '参数错误' }; } - let dbName = "opendb-components-dynamic"; + let dbName = "vk-components-dynamic"; // 检测data_id是否已存在 let num = await vk.baseDao.count({ diff --git a/uniCloud-aliyun/cloudfunctions/router/service/admin/system_uni/global-data/sys/add.js b/uniCloud-aliyun/cloudfunctions/router/service/admin/system_uni/global-data/sys/add.js index c495782..7eeef51 100644 --- a/uniCloud-aliyun/cloudfunctions/router/service/admin/system_uni/global-data/sys/add.js +++ b/uniCloud-aliyun/cloudfunctions/router/service/admin/system_uni/global-data/sys/add.js @@ -28,7 +28,7 @@ module.exports = { return formRulesRes; } - let dbName = "opendb-global-data"; + let dbName = "vk-global-data"; // 检测key是否已存在 let num = await vk.baseDao.count({ dbName:dbName, diff --git a/uniCloud-aliyun/cloudfunctions/router/service/admin/system_uni/global-data/sys/delete.js b/uniCloud-aliyun/cloudfunctions/router/service/admin/system_uni/global-data/sys/delete.js index 3d3bde3..93a0943 100644 --- a/uniCloud-aliyun/cloudfunctions/router/service/admin/system_uni/global-data/sys/delete.js +++ b/uniCloud-aliyun/cloudfunctions/router/service/admin/system_uni/global-data/sys/delete.js @@ -19,7 +19,7 @@ module.exports = { if(vk.pubfn.isNullOne(_id)){ return { code : -1, msg : '_id不能为空' }; } - let dbName = "opendb-global-data"; + let dbName = "vk-global-data"; // 执行数据库API请求 let num = await vk.baseDao.del({ dbName:dbName, diff --git a/uniCloud-aliyun/cloudfunctions/router/service/admin/system_uni/global-data/sys/getList.js b/uniCloud-aliyun/cloudfunctions/router/service/admin/system_uni/global-data/sys/getList.js index bc7808e..80ca5c1 100644 --- a/uniCloud-aliyun/cloudfunctions/router/service/admin/system_uni/global-data/sys/getList.js +++ b/uniCloud-aliyun/cloudfunctions/router/service/admin/system_uni/global-data/sys/getList.js @@ -18,7 +18,7 @@ module.exports = { let { uid } = data; let res = { code : 0, msg : '' }; // 业务逻辑开始----------------------------------------------------------- - let dbName = "opendb-global-data"; + let dbName = "vk-global-data"; res = await vk.baseDao.getTableData({ dbName, data, diff --git a/uniCloud-aliyun/cloudfunctions/router/service/admin/system_uni/global-data/sys/update.js b/uniCloud-aliyun/cloudfunctions/router/service/admin/system_uni/global-data/sys/update.js index e97c273..ea55216 100644 --- a/uniCloud-aliyun/cloudfunctions/router/service/admin/system_uni/global-data/sys/update.js +++ b/uniCloud-aliyun/cloudfunctions/router/service/admin/system_uni/global-data/sys/update.js @@ -30,7 +30,7 @@ module.exports = { return formRulesRes; } - let dbName = "opendb-global-data"; + let dbName = "vk-global-data"; // 检测key是否已存在 let num = await vk.baseDao.count({ dbName:dbName, diff --git a/uniCloud-aliyun/cloudfunctions/router/service/admin/system_uni/uni-id-files/categories/kh/getList.js b/uniCloud-aliyun/cloudfunctions/router/service/admin/system_uni/uni-id-files/categories/kh/getList.js index 05fe656..6f061e1 100644 --- a/uniCloud-aliyun/cloudfunctions/router/service/admin/system_uni/uni-id-files/categories/kh/getList.js +++ b/uniCloud-aliyun/cloudfunctions/router/service/admin/system_uni/uni-id-files/categories/kh/getList.js @@ -18,7 +18,7 @@ module.exports = { let { uid } = data; let res = { code : 0, msg : '' }; // 业务逻辑开始----------------------------------------------------------- - let dbName = "uni-id-files-categories"; + let dbName = "vk-files-categories"; res = await vk.baseDao.getTableData({ dbName, data, diff --git a/uniCloud-aliyun/cloudfunctions/router/service/admin/system_uni/uni-id-files/categories/sys/add.js b/uniCloud-aliyun/cloudfunctions/router/service/admin/system_uni/uni-id-files/categories/sys/add.js index 1986ae8..88bd11b 100644 --- a/uniCloud-aliyun/cloudfunctions/router/service/admin/system_uni/uni-id-files/categories/sys/add.js +++ b/uniCloud-aliyun/cloudfunctions/router/service/admin/system_uni/uni-id-files/categories/sys/add.js @@ -25,7 +25,7 @@ module.exports = { if(vk.pubfn.isNull(name)){ return { code : -1, msg : '名称不能为空' }; } - let dbName = "uni-id-files-categories"; + let dbName = "vk-files-categories"; // 检测key是否已存在 let num = await vk.baseDao.count({ dbName, diff --git a/uniCloud-aliyun/cloudfunctions/router/service/admin/system_uni/uni-id-files/categories/sys/delete.js b/uniCloud-aliyun/cloudfunctions/router/service/admin/system_uni/uni-id-files/categories/sys/delete.js index dcec633..92305cf 100644 --- a/uniCloud-aliyun/cloudfunctions/router/service/admin/system_uni/uni-id-files/categories/sys/delete.js +++ b/uniCloud-aliyun/cloudfunctions/router/service/admin/system_uni/uni-id-files/categories/sys/delete.js @@ -19,7 +19,7 @@ module.exports = { if(vk.pubfn.isNullOne(_id)){ return { code : -1, msg : '_id不能为空' }; } - let dbName = "uni-id-files-categories"; + let dbName = "vk-files-categories"; await vk.baseDao.deleteById({ dbName, id:_id diff --git a/uniCloud-aliyun/cloudfunctions/router/service/admin/system_uni/uni-id-files/categories/sys/update.js b/uniCloud-aliyun/cloudfunctions/router/service/admin/system_uni/uni-id-files/categories/sys/update.js index d04f05b..4c4694a 100644 --- a/uniCloud-aliyun/cloudfunctions/router/service/admin/system_uni/uni-id-files/categories/sys/update.js +++ b/uniCloud-aliyun/cloudfunctions/router/service/admin/system_uni/uni-id-files/categories/sys/update.js @@ -28,7 +28,7 @@ module.exports = { if(vk.pubfn.isNull(name)){ return { code : -1, msg : '名称不能为空' }; } - let dbName = "uni-id-files-categories"; + let dbName = "vk-files-categories"; // 检测data_id是否已存在 let num = await vk.baseDao.count({ diff --git a/uniCloud-aliyun/cloudfunctions/router/service/admin/system_uni/uni-id-files/files/kh/delete.js b/uniCloud-aliyun/cloudfunctions/router/service/admin/system_uni/uni-id-files/files/kh/delete.js index 177fde6..d504d39 100644 --- a/uniCloud-aliyun/cloudfunctions/router/service/admin/system_uni/uni-id-files/files/kh/delete.js +++ b/uniCloud-aliyun/cloudfunctions/router/service/admin/system_uni/uni-id-files/files/kh/delete.js @@ -33,7 +33,7 @@ module.exports = { whereJson["_id"] = _.in(_id); } let selectRes = await vk.baseDao.select({ - dbName: "uni-id-files", + dbName: "vk-files", pageIndex: 1, pageSize: 500, getMain: true, @@ -49,7 +49,7 @@ module.exports = { } catch (err) {} // 执行数据库API请求 res.num = await vk.baseDao.del({ - dbName: "uni-id-files", + dbName: "vk-files", whereJson }); } diff --git a/uniCloud-aliyun/cloudfunctions/router/service/admin/system_uni/uni-id-files/files/kh/getList.js b/uniCloud-aliyun/cloudfunctions/router/service/admin/system_uni/uni-id-files/files/kh/getList.js index a0cba9b..f92b4da 100644 --- a/uniCloud-aliyun/cloudfunctions/router/service/admin/system_uni/uni-id-files/files/kh/getList.js +++ b/uniCloud-aliyun/cloudfunctions/router/service/admin/system_uni/uni-id-files/files/kh/getList.js @@ -18,7 +18,7 @@ module.exports = { let { uid } = data; let res = { code: 0, msg: '' }; // 业务逻辑开始----------------------------------------------------------- - let dbName = "uni-id-files"; + let dbName = "vk-files"; let whereJson = {}; let { role = [] } = userInfo; let { formData = {} } = data; diff --git a/uniCloud-aliyun/cloudfunctions/router/service/admin/system_uni/uni-id-files/files/kh/update.js b/uniCloud-aliyun/cloudfunctions/router/service/admin/system_uni/uni-id-files/files/kh/update.js index ecc24ef..1bbf96d 100644 --- a/uniCloud-aliyun/cloudfunctions/router/service/admin/system_uni/uni-id-files/files/kh/update.js +++ b/uniCloud-aliyun/cloudfunctions/router/service/admin/system_uni/uni-id-files/files/kh/update.js @@ -27,7 +27,7 @@ module.exports = { if (vk.pubfn.isNullOne(_id)) { return { code: -1, msg: '_id不能为空' }; } - let dbName = "uni-id-files"; + let dbName = "vk-files"; let whereJson = {}; let dataJson = { display_name, diff --git a/uniCloud-aliyun/cloudfunctions/router/service/plugs/components_dynamic/client/pub/getComponentsDynamicData.js b/uniCloud-aliyun/cloudfunctions/router/service/plugs/components_dynamic/client/pub/getComponentsDynamicData.js index 289baa7..dc8dfe7 100644 --- a/uniCloud-aliyun/cloudfunctions/router/service/plugs/components_dynamic/client/pub/getComponentsDynamicData.js +++ b/uniCloud-aliyun/cloudfunctions/router/service/plugs/components_dynamic/client/pub/getComponentsDynamicData.js @@ -18,7 +18,7 @@ module.exports = { // 业务逻辑开始----------------------------------------------------------- // 根据ids获取组件动态数据列表 let res_select = await vk.baseDao.select({ - dbName:"opendb-components-dynamic", + dbName:"vk-components-dynamic", getCount:false, pageSize:100, whereJson:{ diff --git a/uniCloud-aliyun/cloudfunctions/router/service/plugs/components_dynamic/client/pub/init.js b/uniCloud-aliyun/cloudfunctions/router/service/plugs/components_dynamic/client/pub/init.js index 458aae0..c32f528 100644 --- a/uniCloud-aliyun/cloudfunctions/router/service/plugs/components_dynamic/client/pub/init.js +++ b/uniCloud-aliyun/cloudfunctions/router/service/plugs/components_dynamic/client/pub/init.js @@ -14,7 +14,7 @@ module.exports = { let res = { code : 0, msg : 'ok' }; // 业务逻辑开始----------------------------------------------------------- // 承载所有读操作的 promise 的数组 - let dbName = "opendb-components-dynamic"; + let dbName = "vk-components-dynamic"; let data_ids = [ "vk-test-notice-bar-01", "vk-test-notice-bar-02", diff --git a/uniCloud-aliyun/cloudfunctions/router/service/plugs/components_dynamic/client/pub/update.js b/uniCloud-aliyun/cloudfunctions/router/service/plugs/components_dynamic/client/pub/update.js index 01834f7..80a415b 100644 --- a/uniCloud-aliyun/cloudfunctions/router/service/plugs/components_dynamic/client/pub/update.js +++ b/uniCloud-aliyun/cloudfunctions/router/service/plugs/components_dynamic/client/pub/update.js @@ -14,7 +14,7 @@ module.exports = { let res = { code : 0, msg : 'ok' }; // 业务逻辑开始----------------------------------------------------------- res.num = await vk.baseDao.update({ - dbName:"opendb-components-dynamic", + dbName:"vk-components-dynamic", whereJson:{ data_id : data_id, }, diff --git a/uniCloud-aliyun/cloudfunctions/router/service/user/kh/addUploadRecord.js b/uniCloud-aliyun/cloudfunctions/router/service/user/kh/addUploadRecord.js index 621b5e2..6498e64 100644 --- a/uniCloud-aliyun/cloudfunctions/router/service/user/kh/addUploadRecord.js +++ b/uniCloud-aliyun/cloudfunctions/router/service/user/kh/addUploadRecord.js @@ -59,7 +59,7 @@ module.exports = { dataJson["category_id"] = category_id; } await vk.baseDao.add({ - dbName: "uni-id-files", + dbName: "vk-files", dataJson }); // 业务逻辑结束----------------------------------------------------------- diff --git a/uniCloud-aliyun/database/db_init.json b/uniCloud-aliyun/database/db_init.json index 95516c1..c6413e6 100644 --- a/uniCloud-aliyun/database/db_init.json +++ b/uniCloud-aliyun/database/db_init.json @@ -122,23 +122,6 @@ } ] }, - "opendb-components-dynamic":{ - "data": [], - "index": [ - { - "IndexName": "_add_time", - "MgoKeySchema": {"MgoIndexKeys": [{"Name": "_add_time","Direction": "1"}],"MgoIsUnique": false} - }, - { - "IndexName": "data_id", - "MgoKeySchema": {"MgoIndexKeys": [{"Name": "data_id","Direction": "1"}],"MgoIsUnique": false} - }, - { - "IndexName": "title", - "MgoKeySchema": {"MgoIndexKeys": [{"Name": "title","Direction": "1"}],"MgoIsUnique": false} - } - ] - }, "uni-id-log":{ "data": [], "index": [ @@ -183,6 +166,10 @@ } ], "index": [ + { + "IndexName": "_add_time", + "MgoKeySchema": {"MgoIndexKeys": [{"Name": "_add_time","Direction": "1"}],"MgoIsUnique": false} + }, { "IndexName": "role_id", "MgoKeySchema": {"MgoIndexKeys": [{"Name": "role_id","Direction": "1"}],"MgoIsUnique": true} @@ -360,9 +347,9 @@ "parent_id":"system-uni" }, { - "_id": "system-uni-opendb-global-data", + "_id": "system-uni-vk-global-data", "_add_time": 1596416400000, - "permission_id":"system-uni-opendb-global-data", + "permission_id":"system-uni-vk-global-data", "permission_name": "系统 - 缓存管理", "comment":"", "url": ["admin/system_uni/global-data/sys/*"], @@ -372,9 +359,9 @@ "parent_id":"system-uni" }, { - "_id": "system-uni-opendb-components-dynamic", + "_id": "system-uni-vk-components-dynamic", "_add_time": 1596416400000, - "permission_id":"system-uni-opendb-components-dynamic", + "permission_id":"system-uni-vk-components-dynamic", "permission_name": "系统 - 动态组件数据管理", "comment":"", "url": ["admin/system_uni/components-dynamic/sys/*"], @@ -409,6 +396,10 @@ } ], "index": [ + { + "IndexName": "_add_time", + "MgoKeySchema": {"MgoIndexKeys": [{"Name": "_add_time","Direction": "1"}],"MgoIsUnique": false} + }, { "IndexName": "permission_id", "MgoKeySchema": {"MgoIndexKeys": [{"Name": "permission_id","Direction": "1"}],"MgoIsUnique": true} @@ -521,24 +512,24 @@ "parent_id": "system-uni" }, { - "_id": "system-uni-opendb-global-data", + "_id": "system-uni-vk-global-data", "enable": true, "icon": "", - "menu_id": "system-uni-opendb-global-data", + "menu_id": "system-uni-vk-global-data", "name": "系统缓存管理", "parent_id": "system-uni", "sort": 2, - "url": "/pages_plugs/system_uni/opendb-global-data", + "url": "/pages_plugs/system_uni/vk-global-data", "_add_time": 1596416400000 }, { - "_id": "system-uni-opendb-components-dynamic", + "_id": "system-uni-vk-components-dynamic", "sort": 3, - "url": "/pages_plugs/system_uni/opendb-components-dynamic", + "url": "/pages_plugs/system_uni/vk-components-dynamic", "_add_time": 1596416400000, "enable": true, "icon": "", - "menu_id": "system-uni-opendb-components-dynamic", + "menu_id": "system-uni-vk-components-dynamic", "name": "动态组件数据", "parent_id": "system-uni" }, @@ -566,6 +557,10 @@ } ], "index": [ + { + "IndexName": "_add_time", + "MgoKeySchema": {"MgoIndexKeys": [{"Name": "_add_time","Direction": "1"}],"MgoIsUnique": false} + }, { "IndexName": "menu_id", "MgoKeySchema": {"MgoIndexKeys": [{"Name": "menu_id","Direction": "1"}],"MgoIsUnique": true} @@ -584,7 +579,89 @@ } ] }, - "opendb-global-data":{ + "opendb-app-list": { + "data": [ + { + "_id":"001", + "appid": "__UNI__01F080F", + "type": "client", + "name": "用户端", + "description": "此为用户端应用", + "create_date": 1596416400000, + "_add_time": 1596416400000, + "_add_time_str": "2020-08-03 09:00:00" + }, + { + "_id":"002", + "appid": "__UNI__570A7FB", + "type": "admin", + "name": "管理端", + "description": "此为管理端应用", + "create_date": 1596416400000, + "_add_time": 1596416400000, + "_add_time_str": "2020-08-03 09:00:00" + } + ], + "index": [ + { + "IndexName": "_add_time", + "MgoKeySchema": {"MgoIndexKeys": [{"Name": "_add_time","Direction": "1"}],"MgoIsUnique": false} + }, + { + "IndexName": "appid", + "MgoKeySchema": {"MgoIndexKeys": [{"Name": "appid","Direction": "1"}],"MgoIsUnique": true} + }, + { + "IndexName": "name", + "MgoKeySchema": {"MgoIndexKeys": [{"Name": "name","Direction": "1"}],"MgoIsUnique": false} + }, + { + "IndexName": "type", + "MgoKeySchema": {"MgoIndexKeys": [{"Name": "type","Direction": "1"}],"MgoIsUnique": false} + }, + { + "IndexName": "create_date", + "MgoKeySchema": {"MgoIndexKeys": [{"Name": "create_date","Direction": "1"}],"MgoIsUnique": false} + } + ] + }, + "opendb-admin-log":{ + "data": [ + + ], + "index": [ + { + "IndexName": "_add_time", + "MgoKeySchema": {"MgoIndexKeys": [{"Name": "_add_time","Direction": "1"}],"MgoIsUnique": false} + }, + { + "IndexName": "user_id", + "MgoKeySchema": {"MgoIndexKeys": [{"Name": "user_id","Direction": "1"}],"MgoIsUnique": false} + }, + { + "IndexName": "title", + "MgoKeySchema": {"MgoIndexKeys": [{"Name": "title","Direction": "1"}],"MgoIsUnique": false} + } + ] + }, + "vk-components-dynamic":{ + "data": [], + "index": [ + { + "IndexName": "_add_time", + "MgoKeySchema": {"MgoIndexKeys": [{"Name": "_add_time","Direction": "1"}],"MgoIsUnique": false} + }, + { + "IndexName": "data_id", + "MgoKeySchema": {"MgoIndexKeys": [{"Name": "data_id","Direction": "1"}],"MgoIsUnique": false} + }, + { + "IndexName": "title", + "MgoKeySchema": {"MgoIndexKeys": [{"Name": "title","Direction": "1"}],"MgoIsUnique": false} + } + ] + }, + "vk-global-data":{ "data":[ ], @@ -603,7 +680,7 @@ } ] }, - "uni-id-files": { + "vk-files": { "data": [], "index": [ { @@ -636,7 +713,7 @@ } ] }, - "uni-id-files-categories": { + "vk-files-categories": { "data": [], "index": [ { @@ -652,70 +729,5 @@ "MgoKeySchema": {"MgoIndexKeys": [{"Name": "sort","Direction": "1"}],"MgoIsUnique": false} } ] - }, - "opendb-app-list": { - "data": [ - { - "_id":"001", - "appid": "__UNI__01F080F", - "type": "client", - "name": "用户端", - "description": "此为用户端应用", - "create_date": 1596416400000, - "_add_time": 1596416400000, - "_add_time_str": "2020-08-03 09:00:00" - }, - { - "_id":"002", - "appid": "__UNI__570A7FB", - "type": "admin", - "name": "管理端", - "description": "此为管理端应用", - "create_date": 1596416400000, - "_add_time": 1596416400000, - "_add_time_str": "2020-08-03 09:00:00" - } - ], - "index": [ - { - "IndexName": "_add_time", - "MgoKeySchema": {"MgoIndexKeys": [{"Name": "_add_time","Direction": "1"}],"MgoIsUnique": false} - }, - { - "IndexName": "appid", - "MgoKeySchema": {"MgoIndexKeys": [{"Name": "appid","Direction": "1"}],"MgoIsUnique": true} - }, - { - "IndexName": "name", - "MgoKeySchema": {"MgoIndexKeys": [{"Name": "name","Direction": "1"}],"MgoIsUnique": false} - }, - { - "IndexName": "type", - "MgoKeySchema": {"MgoIndexKeys": [{"Name": "type","Direction": "1"}],"MgoIsUnique": false} - }, - { - "IndexName": "create_date", - "MgoKeySchema": {"MgoIndexKeys": [{"Name": "create_date","Direction": "1"}],"MgoIsUnique": false} - } - ] - }, - "opendb-admin-log":{ - "data": [ - - ], - "index": [ - { - "IndexName": "_add_time", - "MgoKeySchema": {"MgoIndexKeys": [{"Name": "_add_time","Direction": "1"}],"MgoIsUnique": false} - }, - { - "IndexName": "user_id", - "MgoKeySchema": {"MgoIndexKeys": [{"Name": "user_id","Direction": "1"}],"MgoIsUnique": false} - }, - { - "IndexName": "title", - "MgoKeySchema": {"MgoIndexKeys": [{"Name": "title","Direction": "1"}],"MgoIsUnique": false} - } - ] - } + } } diff --git a/uniCloud-aliyun/database/db_init/opendb-admin-menus.json b/uniCloud-aliyun/database/db_init/opendb-admin-menus.json index 4751874..be4b8f1 100644 --- a/uniCloud-aliyun/database/db_init/opendb-admin-menus.json +++ b/uniCloud-aliyun/database/db_init/opendb-admin-menus.json @@ -6,7 +6,7 @@ {"_id": "sys-app-manage","_add_time": 1596416400000,"menu_id":"sys-app-manage","name": "应用管理","icon":"el-icon-cloudy","url": "/pages_plugs/system/app/list","comment":"应用管理","sort": 5,"parent_id":"sys-admin","enable":true} {"_id": "system-uni","_add_time": 1596416400000,"enable": true,"icon": "el-icon-s-tools","menu_id": "system-uni","name": "系统设置","sort": 110} {"_id": "system-uni-uni-id-files","sort": 1,"url": "/pages_plugs/system_uni/uni-id-files/list","_add_time": 1596416400000,"enable": true,"icon": "el-icon-folder-opened","menu_id": "system-uni-uni-id-files","name": "素材管理","parent_id": "system-uni"} -{"_id": "system-uni-opendb-global-data","enable": true,"icon": "","menu_id": "system-uni-opendb-global-data","name": "系统缓存管理","parent_id": "system-uni","sort": 2,"url": "/pages_plugs/system_uni/opendb-global-data","_add_time": 1596416400000} -{"_id": "system-uni-opendb-components-dynamic","sort": 3,"url": "/pages_plugs/system_uni/opendb-components-dynamic","_add_time": 1596416400000,"enable": true,"icon": "","menu_id": "system-uni-opendb-components-dynamic","name": "动态组件数据","parent_id": "system-uni"} +{"_id": "system-uni-vk-global-data","enable": true,"icon": "","menu_id": "system-uni-vk-global-data","name": "系统缓存管理","parent_id": "system-uni","sort": 2,"url": "/pages_plugs/system_uni/vk-global-data","_add_time": 1596416400000} +{"_id": "system-uni-vk-components-dynamic","sort": 3,"url": "/pages_plugs/system_uni/vk-components-dynamic","_add_time": 1596416400000,"enable": true,"icon": "","menu_id": "system-uni-vk-components-dynamic","name": "动态组件数据","parent_id": "system-uni"} {"_id": "system-uni-uni-id-log","sort": 8,"url": "/pages_plugs/system_uni/uni-id-log","_add_time": 1596416400000,"enable": true,"icon": "","menu_id": "system-uni-uni-id-log","name": "用户登录日志","parent_id": "system-uni"} {"_id": "system-uni-opendb-admin-log","sort": 9,"url": "/pages_plugs/system_uni/opendb-admin-log","_add_time": 1596416400000,"enable": true,"icon": "","menu_id": "system-uni-opendb-admin-log","name": "系统操作日志","parent_id": "system-uni"} \ No newline at end of file diff --git a/uniCloud-aliyun/database/db_init/uni-id-permissions.json b/uniCloud-aliyun/database/db_init/uni-id-permissions.json index 228cc57..7eaf3f5 100644 --- a/uniCloud-aliyun/database/db_init/uni-id-permissions.json +++ b/uniCloud-aliyun/database/db_init/uni-id-permissions.json @@ -11,7 +11,7 @@ {"_id": "sys-manage-app","_add_time": 1596416400000,"permission_id":"sys-manage-app","permission_name": "系统 - 应用管理","comment":"","url": ["admin/system/app/sys/*"],"sort": 5,"enable":true,"match_mode":1,"parent_id":"sys-manage"} {"_id": "system-uni","_add_time": 1596416400000,"permission_id":"system-uni","permission_name": "系统设置","comment":"","sort": 3,"enable":true} {"_id": "system-uni-uni-id-files","_add_time": 1596416400000,"permission_id":"system-uni-uni-id-files","permission_name": "系统 - 素材管理","comment":"","url": ["admin/system_uni/uni-id-files/*"],"sort": 1,"enable":true,"match_mode":1,"parent_id":"system-uni"} -{"_id": "system-uni-opendb-global-data","_add_time": 1596416400000,"permission_id":"system-uni-opendb-global-data","permission_name": "系统 - 缓存管理","comment":"","url": ["admin/system_uni/global-data/sys/*"],"sort": 2,"enable":true,"match_mode":1,"parent_id":"system-uni"} -{"_id": "system-uni-opendb-components-dynamic","_add_time": 1596416400000,"permission_id":"system-uni-opendb-components-dynamic","permission_name": "系统 - 动态组件数据管理","comment":"","url": ["admin/system_uni/components-dynamic/sys/*"],"sort": 3,"enable":true,"match_mode":1,"parent_id":"system-uni"} +{"_id": "system-uni-vk-global-data","_add_time": 1596416400000,"permission_id":"system-uni-vk-global-data","permission_name": "系统 - 缓存管理","comment":"","url": ["admin/system_uni/global-data/sys/*"],"sort": 2,"enable":true,"match_mode":1,"parent_id":"system-uni"} +{"_id": "system-uni-vk-components-dynamic","_add_time": 1596416400000,"permission_id":"system-uni-vk-components-dynamic","permission_name": "系统 - 动态组件数据管理","comment":"","url": ["admin/system_uni/components-dynamic/sys/*"],"sort": 3,"enable":true,"match_mode":1,"parent_id":"system-uni"} {"_id": "system-uni-uni-id-log","_add_time": 1596416400000,"permission_id":"system-uni-uni-id-log","permission_name": "系统 - 用户登录日志管理","comment":"","url": ["admin/system_uni/uni-id-log/sys/*"],"sort": 4,"enable":true,"match_mode":1,"parent_id":"system-uni"} {"_id": "system-uni-opendb-admin-log","_add_time": 1596416400000,"permission_id":"system-uni-opendb-admin-log","permission_name": "系统 - 操作日志管理","comment":"","url": ["admin/system_uni/admin-log/sys/*"],"sort": 5,"enable":true,"match_mode":1,"parent_id":"system-uni"} \ No newline at end of file diff --git "a/uniCloud-aliyun/database/\345\212\250\346\200\201\350\217\234\345\215\225\345\257\274\345\205\245/\347\263\273\347\273\237\350\256\276\347\275\256.json" "b/uniCloud-aliyun/database/\345\212\250\346\200\201\350\217\234\345\215\225\345\257\274\345\205\245/\347\263\273\347\273\237\350\256\276\347\275\256.json" index c1be1ca..c33094b 100644 --- "a/uniCloud-aliyun/database/\345\212\250\346\200\201\350\217\234\345\215\225\345\257\274\345\205\245/\347\263\273\347\273\237\350\256\276\347\275\256.json" +++ "b/uniCloud-aliyun/database/\345\212\250\346\200\201\350\217\234\345\215\225\345\257\274\345\205\245/\347\263\273\347\273\237\350\256\276\347\275\256.json" @@ -11,17 +11,17 @@ "url": "/pages_plugs/system_uni/uni-id-files/list", "sort": 0 },{ - "menu_id": "system-uni-opendb-global-data", + "menu_id": "system-uni-vk-global-data", "name": "系统缓存管理", "icon": "", - "url": "/pages_plugs/system_uni/opendb-global-data", + "url": "/pages_plugs/system_uni/vk-global-data", "sort": 1 }, { - "menu_id": "system-uni-opendb-components-dynamic", + "menu_id": "system-uni-vk-components-dynamic", "name": "动态组件数据", "icon": "", - "url": "/pages_plugs/system_uni/opendb-components-dynamic", + "url": "/pages_plugs/system_uni/vk-components-dynamic", "sort": 2 }, { diff --git a/uni_modules/vk-unicloud/changelog.md b/uni_modules/vk-unicloud/changelog.md index f2fd155..957110e 100644 --- a/uni_modules/vk-unicloud/changelog.md +++ b/uni_modules/vk-unicloud/changelog.md @@ -1,3 +1,21 @@ +## 2.7.0(2022-02-26) +###【重要】由于uni官方限制自定义表不可以用 `opendb-` 和 `uni-` 开头,故以下数据库表名只能进行调整 + +* 1、`opendb-components-dynamic` 改为 `vk-components-dynamic` +* 2、`opendb-global-data` 改为 `vk-global-data` +* 3、`uni-id-files` 改为 `vk-files` +* 4、`uni-id-files-categories` 改为 `vk-files-categories` + +___更改表名势必会对老项目产生影响。___ + +### 老项目更新注意事项: +* 1、老项目更新后,还需要从 `unicloud控制台` 把表名改成对应的新表名 +* 2、在项目代码中全局搜索旧表名,替换成新表名 + +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +##### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 + ## 2.6.15(2022-02-24) * 1、【优化】`万能连表` 支持副表外键是数组类型(只要数组内任意元素与主表外键匹配即可)[点击查看](https://vkdoc.fsq.pub/client/uniCloud/db/selects.html#%E5%9C%BA%E6%99%AF6) * 2、【优化】其他一些细节 diff --git a/uni_modules/vk-unicloud/package.json b/uni_modules/vk-unicloud/package.json index bef5896..1e6b3e0 100644 --- a/uni_modules/vk-unicloud/package.json +++ b/uni_modules/vk-unicloud/package.json @@ -1,7 +1,7 @@ { "id": "vk-unicloud", "displayName": "vk-unicloud-router开发框架核心库 - 已集成uni-id 框架内置了众多API。", - "version": "2.6.15", + "version": "2.7.0", "description": "此为vk-unicloud-router框架核心库(新手建议下载完整框架项目)已集成uni-id支持云函数url化。众多现成API,内置小白也能轻松上手的数据库API。使你项目刚起步进度就是百分之50", "keywords": [ "vk-unicloud-router", diff --git a/uni_modules/vk-unicloud/readme.md b/uni_modules/vk-unicloud/readme.md index f04c370..65a4d4f 100644 --- a/uni_modules/vk-unicloud/readme.md +++ b/uni_modules/vk-unicloud/readme.md @@ -34,7 +34,7 @@ #### 5、全面支持`url化`的云函数请求,您无需关心url化后参数的获取问题 -#### 6、已集成`uni-id` 当前版本:`3.3.9`(已支持真实发送邮箱验证码和阿里云短信验证码) +#### 6、已集成`uni-id` 当前版本:`3.3.12`(已支持真实发送邮箱验证码和阿里云短信验证码) ``` 6.1、由于每个应用基本都会用上用户系统,官方建议所有`uniCloud`应用均使用`uni-id`作为用户体系, 有了统一的账户规范,并且围绕这套账户规范,有各种各样插件,那么开发者可以随意整合这些插件,让数据连同。 diff --git a/uni_modules/vk-unicloud/uniCloud/cloudfunctions/common/vk-unicloud/index.js b/uni_modules/vk-unicloud/uniCloud/cloudfunctions/common/vk-unicloud/index.js index f645fcf..c187837 100644 --- a/uni_modules/vk-unicloud/uniCloud/cloudfunctions/common/vk-unicloud/index.js +++ b/uni_modules/vk-unicloud/uniCloud/cloudfunctions/common/vk-unicloud/index.js @@ -1 +1 @@ -"use strict";var e={regExpTest:function(e,t){let n=!1;if("string"==typeof e){new RegExp(e).test(t)&&(n=!0)}else if("object"==typeof e)for(let r=0;r{let{url:t,data:n={},util:r}=e,{uniID:a}=r,{need_user_info:i=!0}=n,o={code:-1,msg:""},s=0==t.indexOf("admin/");s&&(i=!0);let l=t.indexOf("/sys/")>-1,d=await a.checkToken(e.uniIdToken,{needPermission:l,needUserInfo:i});if(d.code&&d.code>0)return d;if(d.userInfo){let e=d.userInfo;e.permission=d.permission,delete e.token,delete e.password,o.userInfo=e}if(o.uid=d.uid,d.token&&(o.token=d.token,o.tokenExpired=d.tokenExpired),s){if(!o.userInfo)return{code:403,msg:"need_user_info必须为true"};{let e=o.userInfo.role||[];if(!o.userInfo.allow_login_background&&!e.includes("admin"))return{code:403,msg:"您无权限登录后台"}}}return o.code=0,o.msg="ok",o}};async function r(e={},t){let{vk:n,db:r,_:a}=t,{whereJson:i={},fieldJson:o={},justNeedID:s=!1}=e;s&&(o={permission_id:!0}),i.enable=!0;let l=[],d=await n.baseDao.select({dbName:"uni-id-permissions",pageIndex:1,pageSize:500,fieldJson:o,whereJson:i});if(s)for(let e=0;e{let{url:t,util:a}=e,{uniID:i,config:o,pubFun:s,vk:l,db:d,_:c}=a,u={code:-1,msg:""};const f=n;if(u=await f.main(e),0!==u.code)return u;if(!u.userInfo)return{code:403,msg:"请去除need_user_info:false"};if(u.userInfo.role||(u.userInfo.role=[]),u.userInfo.role.includes("admin"))return u;if(!u.userInfo.allow_login_background)return{code:403,msg:"您无权限登录后台"};let p=[];if(u.userInfo.role.includes("admin-lv3")){let e=await r({whereJson:{level:c.in([1,2,3])},justNeedID:!0},a);l.pubfn.isNotNull(e)&&(p=p.concat(e))}if(u.userInfo.role.includes("admin-lv2")){let e=await r({whereJson:{level:c.in([1,2])},justNeedID:!0},a);l.pubfn.isNotNull(e)&&(p=p.concat(e))}if(u.userInfo.role.includes("admin-lv1")){let e=await r({whereJson:{level:c.in([1])},justNeedID:!0},a);l.pubfn.isNotNull(e)&&(p=p.concat(e))}if(u.userInfo.role.includes("query-all")){let e=await r({whereJson:{curd_category:4,level:c.neq(4)},justNeedID:!0},a);l.pubfn.isNotNull(e)&&(p=p.concat(e))}let g=await async function(e,t){let{vk:n,db:r,_:a}=t,{role:i}=e;if(n.pubfn.isNull(i))return[];return(await n.baseDao.select({dbName:"uni-id-roles",whereJson:{role_id:a.in(i),enable:!0},fieldJson:{permission:!0}})).rows}({role:u.userInfo.role},a);for(let e in g){let{permission:t}=g[e];l.pubfn.isNotNull(t)&&(p=p.concat(t))}if(0==p.length)return{code:403,msg:"权限不足"};p=[...new Set(p)];let m=await r({whereJson:{permission_id:c.in(p),match_mode:c.in([1,2])}},a),h=!1;for(let e=0;e0}({myPermission:p,url:t},a)&&(h=!0)}return h?(u.code=0,u.msg="ok",u):{code:403,msg:"权限不足"}}}.main}];var i={onActionExecuting:async(e,n=[])=>{let r={code:403,msg:"access denied",filterStack:[]},{url:a}=e;for(let i in n){let o=n[i],{mode:s="onActionExecuting",enable:l=!0}=o;if(l&&"onActionExecuting"===s&&t.regExpTest(o.regExp,a)){e.filterResponse=r;let t=await o.main(e);if(t.filterId=o.id,r.filterStack.push(t),0!==t.code){r=t;break}r=Object.assign(r,t)}}return r},onActionExecuted:async(e,n=[],r)=>{let{url:a}=e;for(let i in n){let o=n[i],{mode:s,enable:l=!0}=o;if(l&&"onActionExecuted"===s&&t.regExpTest(o.regExp,a)){let t=await o.main(e,r);if(t){if(0!==t.code){r=t;break}r=Object.assign(r,t)}}}return r},onActionIntercepted:async(e,n=[],r)=>{let{url:a}=e;for(let i in n){let o=n[i],{mode:s,enable:l=!0}=o;if(l&&"onActionIntercepted"===s&&t.regExpTest(o.regExp,a)){let t=await o.main(e,r);if(t){if(0!==t.code){r=t;break}r=Object.assign(r,t)}}}return r},onActionError:async(e,n=[],r)=>{let{url:a}=e;for(let i in n){let o=n[i],{mode:s,enable:l=!0}=o;if(l&&"onActionError"===s&&t.regExpTest(o.regExp,a)){let t=await o.main(e,r);if(t){if(0!==t.code){r=t;break}r=Object.assign(r,t)}}}return r},getMiddleware:function(e){let t=[];if(e){let n=[...a,...e];n.sort((function(e,t){return e.index-t.index})),t=n.filter((e,t,r)=>{var a=[];return n.forEach((e,t)=>{a.push(e.id)}),a.indexOf(e.id)===t})}else t=a;return t}};async function o(e={}){let{code:t,msg:n,err:r,serviceParam:a,middlewareService:o}=e;console.error(n);let s={code:t,msg:n};return r&&(console.error(r.stack),s.err={message:r.message,stack:r.stack,code:r.code}),await i.onActionError(a,o,s)}process.env.TZ="Asia/Shanghai";var s=async function(e){let{event:t,context:n,vk:r}=e,{config:a,uniID:s,uniPay:l,db:d,middlewareService:c,pubFun:u,customUtil:f,crypto:p}=r.unicloud;if(r.pubfn.getData(a,"vk.system.serviceShutdown"))return{code:405,msg:r.pubfn.getData(a,"vk.system.serviceShutdownDescription")};let g={event:t,context:n},m=function(e,t){let n={};if(e.httpMethod){let{path:r=""}=e;if("/"===r[0]&&(r=r.substring(1)),r){let a,{urlrewrite:i={}}=t.unicloud,{rule:o}=i,s=t.pubfn.getData(i,"config.accessOnlyInRule"),l=!1;if(o)for(let e in o){let n=o[e],i=t.pubfn.regExpExecToTemplate(r,e,n);if(i){l=!0;let e=i.split("?");r=e[0],a=t.pubfn.urlStringToJson(e[1]);break}}if(!l&&s)return{mpserverlessComposedResponse:!0,statusCode:403,code:403,headers:{"content-type":"application/json"},body:JSON.stringify({code:403,msg:"access denied"})};if(n={data:{}},t.pubfn.isNotNull(a)&&(n.data=Object.assign(n.data,a)),e.queryStringParameters){let t=e.queryStringParameters;"string"==typeof t&&(t=JSON.parse(t)),n.data=Object.assign(n.data,t)}if(e.body){let r=e.body,a=e.headers&&e.headers["content-type"]?e.headers["content-type"]:"";if(a.indexOf("multipart/form-data;")>-1)r=t.formDataUtil.formParser(e),n.data=Object.assign(n.data,r);else{e.isBase64Encoded&&(r=Buffer.from(r,"base64").toString("utf-8"));try{"string"==typeof r&&(r=JSON.parse(r)),n.data=Object.assign(n.data,r)}catch(e){}try{"string"==typeof r&&a.indexOf("x-www-form-urlencoded")>-1&&(r=t.pubfn.urlStringToJson(r),"object"==typeof r&&(r=t.pubfn.string2Number(r),n.data=Object.assign(n.data,r)))}catch(e){}}}n.$url||(n.data.$url?n.$url=n.data.$url:n.$url=r),n.data.uni_id_token&&(n.uni_id_token=n.data.uni_id_token,delete n.data.uni_id_token)}else{if(e.queryStringParameters){let t=e.queryStringParameters;"string"==typeof t.data&&(t.data=JSON.parse(t.data)),n=Object.assign(n,t)}if(e.body){let t=e.body;e.isBase64Encoded&&(t=Buffer.from(t,"base64").toString("utf-8"));try{"string"==typeof t&&(t=JSON.parse(t)),n=Object.assign(n,t)}catch(e){}}}}else n=JSON.parse(JSON.stringify(e));n.data||(n.data={});n.uniIdToken||(n.uniIdToken=n.uni_id_token);return n.url=n.$url||"",n}(t,r),{url:h,data:b,uniIdToken:y}=m;if([403].indexOf(m.code)>-1)return m;if(h&&"function"==typeof h.trim&&(h=h.trim()),b&&(b.vk_appid&&(n.APPID=b.vk_appid),b.vk_platform&&(n.PLATFORM=b.vk_platform),r.pubfn.isNullOne(n.APPID,n.PLATFORM))){let e=r.pubfn.getData(a,"vk.context");r.pubfn.isNotNull(e)&&(n.APPID||(n.APPID=e.APPID),n.PLATFORM||(n.PLATFORM=e.PLATFORM),n.LOCALE||(n.LOCALE=e.LOCALE))}const w=s.createInstance({context:n});d.command.$=d.command.aggregate;let N={vk:r,config:a,pubFun:u,uniID:w,uniPay:l,db:d,_:d.command,$:d.command.aggregate,customUtil:f,crypto:p,env:{APPID:n.APPID,PLATFORM:n.PLATFORM}};try{uniCloud.vk=r,uniCloud.env=N.env}catch(e){}let _={url:h,data:b,uniIdToken:y,util:N,originalParam:g};const k=i.getMiddleware(c);let v,x,D;try{if(v=await i.onActionExecuting(_,k),0!==v.code)return await async function(e,t,n){try{n=await i.onActionIntercepted(e,t,n)}catch(n){return await o({code:500,msg:`云函数 ${e.url} 的中间件 onActionIntercepted 运行异常!`,err:n,serviceParam:e,middlewareService:t})}return n}(_,k,v);v.uid&&(b.uid=v.uid),_.filterResponse=v}catch(e){return await o({code:500,msg:`云函数 ${h} 的中间件 onActionExecuting 运行异常!`,err:e,serviceParam:_,middlewareService:k})}try{x=r.require("service/"+h)}catch(e){e||(e={});let{code:t,message:n=""}=e;return"MODULE_NOT_FOUND"==t&&n.indexOf("service/")>-1?await o({code:404,msg:`云函数 ${h} 不存在!`,serviceParam:_,middlewareService:k}):"MODULE_NOT_FOUND"==t&&n.indexOf("Cannot find module")>-1?await o({code:500,msg:n,err:e,serviceParam:_,middlewareService:k}):await o({code:500,msg:`云函数 ${h} 编译异常!`,err:e,serviceParam:_,middlewareService:k})}try{D=await async function(e={}){let{res:t,serviceParam:n,serviceMain:r}=e;t.uid&&(n.uid=t.uid);t.userInfo&&(n.userInfo=t.userInfo);let a=await r.main(n);t.token&&t.tokenExpired&&"object"==typeof a&&(a.vk_uni_token={token:t.token,tokenExpired:t.tokenExpired});return a}({res:v,serviceParam:_,serviceMain:x})}catch(e){e||(e={});let{code:t,message:n=""}=e;return"InternalServerError"==t&&n.indexOf("_id_ dup key")>-1?await o({code:500,msg:"vk.baseDao.add : _id不能重复添加",err:e,serviceParam:_,middlewareService:k}):0===n.indexOf("msg:")?await o({code:501,msg:n.substring(4),err:e,serviceParam:_,middlewareService:k}):0===n.indexOf("Cannot read property 'mp-weixin' of undefined")?await o({code:501,msg:"请先绑定微信",err:e,serviceParam:_,middlewareService:k}):n.indexOf("Response timeout for 10000ms")>-1?await o({code:502,msg:"timeout 请求超时,请重试!",err:e,serviceParam:_,middlewareService:k}):await o({code:500,msg:`云函数 ${h} 运行异常!`,err:e,serviceParam:_,middlewareService:k})}try{D=await i.onActionExecuted(_,k,D)}catch(e){return await o({code:500,msg:`云函数 ${h} 的中间件 onActionExecuted 运行异常!`,err:e,serviceParam:_,middlewareService:k})}return D};function l(e,t,n,r,a,i){return p((o=p(p(t,e),p(r,i)))<<(s=a)|o>>>32-s,n);var o,s}function d(e,t,n,r,a,i,o){return l(t&n|~t&r,e,t,a,i,o)}function c(e,t,n,r,a,i,o){return l(t&r|n&~r,e,t,a,i,o)}function u(e,t,n,r,a,i,o){return l(t^n^r,e,t,a,i,o)}function f(e,t,n,r,a,i,o){return l(n^(t|~r),e,t,a,i,o)}function p(e,t){var n=(65535&e)+(65535&t);return(e>>16)+(t>>16)+(n>>16)<<16|65535&n}var g=function(e){return function(e){for(var t="",n=0;n<4*e.length;n++)t+="0123456789abcdef".charAt(e[n>>2]>>n%4*8+4&15)+"0123456789abcdef".charAt(e[n>>2]>>n%4*8&15);return t}(function(e,t){e[t>>5]|=128<>>9<<4)]=t;for(var n=1732584193,r=-271733879,a=-1732584194,i=271733878,o=0;o>5]|=(255&e.charCodeAt(n/8))<500)return await h.selectAll(e);let d=await h.getSelectData(e),{result:c,hasMore:u,total:f,getCount:p,pageIndex:g,fieldJson:b}=d;return c=c.skip((g-1)*o).limit(o),t.pubfn.isNotNull(b)&&(c=c.field(b)),c.get().then(e=>{let t={};return p?(t.total=f,t.hasMore=u):(t.total=e.data?e.data.length:0,t.hasMore=t.total>=o),t.rows=e.data,t.code=0,t.msg="查询成功",t.pagination={pageIndex:g,pageSize:o},s&&(t.rows=t.rows[0]),l?t.rows:t})},findById:async function(e){let{vk:t,db:n,_:r}=m,{dbName:a,id:i,fieldJson:o,db:s}=e,l=(s||n).collection(a).doc(i);o&&(l=l.field(o));let d=await l.get();return"[object Array]"===Object.prototype.toString.call(d.data)?d.data[0]:d.data},findByWhereJson:async function(e){let{vk:t,db:n,_:r}=m,{dbName:a,whereJson:i,fieldJson:o,sortArr:s,db:l}=e,d=l||n;if(t.pubfn.isNotNull(i)){let e=d.collection(a).where(i);if(s)for(let t in s){let n=s[t],r=n.name,a=n.type;null!=a&&""!=a||(a="asc"),e=e.orderBy(r,a)}o&&(e=e.field(o));let t=await e.limit(1).get();if(t.data&&t.data.length>0)return t.data[0]}else console.error("whereJson条件不能为空");return null},count:async function(e){let t,{vk:n,db:r,_:a}=m,{dbName:i,whereJson:o,foreignDB:s,foreignKey:l,groupJson:d,lastWhereJson:c,db:u}=e,f=u||r;if(n.pubfn.isNotNull(s)||n.pubfn.isNotNull(d)){let e=f.collection(i).aggregate();return n.pubfn.isNotNull(o)&&e.match(o),n.pubfn.isNotNull(d)&&e.group(d),n.pubfn.isNotNull(s)&&(e=h.addForeignDB({foreignDB:s,foreignKey:l,result:e})),n.pubfn.isNotNull(c)&&(e=e.match(c)),e=await e.count("total").end(),e.data[0]?e.data[0].total:0}return t=n.pubfn.isNotNull(o)?await f.collection(i).where(o).count():await f.collection(i).count(),t.total},getSelectData:async function(e){let{vk:t,db:n,_:r}=m,{dbName:a,whereJson:i,pageIndex:o=1,pageSize:s=10,getCount:l=!1,db:d}=e;s<0&&(o=1,s=999999999,l=!0);let c=d||n,u=e.sortArr,f=e.fieldJson,p=0,g=!1;if(l){let e;e=t.pubfn.isNotNull(i)?await c.collection(a).where(i).count():await c.collection(a).count(),p=e.total,o1e3&&(l=1e3));let d=await h.getSelectData(e),{result:c,hasMore:u,total:f,getCount:p,pageIndex:g,pageSize:b,fieldJson:y}=d;b>0&&!f&&!p&&(f=b),r.pubfn.isNotNull(y)&&(c=c.field(y));let w={};if(p&&0===f)w={data:[]};else{let t=f;bi&&(n=i-t);let o=c.skip(t).limit(n).get();r.push(o)}try{w=(await Promise.all(r)).reduce((e,t)=>({data:e.data.concat(t.data),errMsg:e.errMsg}))}catch(t){throw console.error("vk.baseDao.select-异常",e,t),new Error("msg:vk.baseDao.select-异常")}}let N={};return N.total=p?f:w.data?w.data.length:0,N.hasMore=u,N.rows=w.data,N.code=0,N.msg="查询成功",N.pagination={pageIndex:g,pageSize:b},o&&(N.rows=N.rows[0]),s?N.rows:N},sum:async function(e){let{vk:t,db:n,_:r}=m,{dbName:a,fieldName:i,whereJson:o,db:s}=e,l=s||n;const d=l.command.aggregate;let c=l.collection(a).aggregate();t.pubfn.isNotNull(o)&&c.match(o),c.group({_id:null,num:d.sum("$"+i)});let u=await c.end();return u.data&&u.data[0]?u.data[0].num:0},avg:async function(e){let{vk:t,db:n,_:r}=m,{dbName:a,fieldName:i,whereJson:o,db:s}=e,l=s||n;const d=l.command.aggregate;let c=l.collection(a).aggregate();t.pubfn.isNotNull(o)&&c.match(o),c.group({_id:null,num:d.avg("$"+i)});let u=await c.end();return u.data&&u.data[0]?u.data[0].num:null},max:async function(e){let{vk:t,db:n,_:r}=m,{dbName:a,fieldName:i,whereJson:o,db:s}=e,l=s||n;const d=l.command.aggregate;let c=l.collection(a).aggregate();t.pubfn.isNotNull(o)&&c.match(o),c.group({_id:null,num:d.max("$"+i)});let u=await c.end();return u.data&&u.data[0]?u.data[0].num:null},min:async function(e){let{vk:t,db:n,_:r}=m,{dbName:a,fieldName:i,whereJson:o,db:s}=e,l=s||n;const d=l.command.aggregate;let c=l.collection(a).aggregate();t.pubfn.isNotNull(o)&&c.match(o),c.group({_id:null,num:d.min("$"+i)});let u=await c.end();return u.data&&u.data[0]?u.data[0].num:null},sample:async function(e){let{vk:t,db:n,_:r}=m,{dbName:a,whereJson:i,size:o,fieldJson:s,db:l}=e,d=l||n;d.command.aggregate;let c=d.collection(a).aggregate();return t.pubfn.isNotNull(i)&&c.match(i),c.sample({size:o}),t.pubfn.isNotNull(s)&&c.project(s),(await c.end()).data},selects:async function(e){let{vk:t,db:n,_:r}=m;if(t.pubfn.isNotNull(e.treeProps))return await h.tree(e);let{db:a,dbName:i,foreignKey:o="_id",whereJson:s={},pageIndex:l=1,pageSize:d=10,getCount:c=!1,getOne:u=!1,getMain:f=!1,sortArr:p=[],fieldJson:g={},groupJson:b,foreignDB:y=[],lastWhereJson:w,addFields:N}=e,_=a||n;-1==d&&(l=1,d=999999999,c=!1),u&&(d=1,c=!1);let k=0,v=!1;if(c){if(t.pubfn.isNotNull(w)){let e=_.collection(i).aggregate();t.pubfn.isNotNull(s)&&e.match(s),t.pubfn.isNotNull(b)&&e.group(b),t.pubfn.isNotNull(y)&&(e=h.addForeignDB({foreignDB:y,foreignKey:o,result:e})),e=e.match(w),e=await e.count("total").end(),k=e.data[0]?e.data[0].total:0}else if(t.pubfn.isNotNull(b)){let e;e=t.pubfn.isNotNull(s)?await _.collection(i).aggregate().match(s).group(b).count("total").end():await _.collection(i).aggregate().group(b).count("total").end(),k=e.data[0]?e.data[0].total:0}else{let e;e=t.pubfn.isNotNull(s)?await _.collection(i).where(s).count():await _.collection(i).count(),k=e.total}l=d),x.rows=T,x.code=0,x.msg="查询成功",x.pagination={pageIndex:l,pageSize:d},u&&(x.rows=x.rows[0]),f?x.rows:x},listToObjectByLimit1:function(e){let{vk:t,db:n,_:r}=m,{list:a,foreignDB:i}=e;if(t.pubfn.isNotNull(i))for(let e in a)for(let n in i){let{as:r,limit:o,foreignDB:s,dbName:l}=i[n];r||(r=l),t.pubfn.isNotNull(s)&&(a[e][r]=h.listToObjectByLimit1({list:a[e][r],foreignDB:s})),1===o&&(a[e][r]&&a[e][r].length>0?a[e][r]=a[e][r][0]:a[e][r]={})}return a},addForeignDB:function(e){let{vk:t,db:n,_:r}=m,{foreignDB:a,foreignKey:i,result:o}=e;const s=r.aggregate;for(let e in a){let n,l,{dbName:d,foreignKey:c,localKey:u,localKeyType:f="",foreignKeyType:p="",as:g,limit:m,whereJson:b,fieldJson:y,sortArr:w,foreignDB:N,addFields:_}=a[e];g||(g=d),n=t.pubfn.isNotNull(u)?u:"object"==typeof i?i[e]:i,l="array"===f.toLowerCase()?[s.cond({if:s.isArray("$$foreignKey"+h.getForeignKeyName(n)),then:s.in(["$"+c,"$$foreignKey"+h.getForeignKeyName(n)]),else:s.eq(["$"+c,"$$foreignKey"+h.getForeignKeyName(n)])})]:"array"===p.toLowerCase()?[s.cond({if:s.isArray("$"+c),then:s.in(["$$foreignKey"+h.getForeignKeyName(n),"$"+c]),else:s.eq(["$"+c,"$$foreignKey"+h.getForeignKeyName(n)])})]:[s.eq(["$"+c,"$$foreignKey"+h.getForeignKeyName(n)])];let k=s.pipeline().match(r.expr(s.and(l)));if(t.pubfn.isNotNull(b)&&(k=k.match(b)),t.pubfn.isNotNull(w)){let e={};for(let t in w){let n=w[t],r=n.name,a=n.type;a=null==a||""==a||"asc"==a?1:-1,e[r]=a}k=k.sort(e)}m&&(k=k.limit(m)),t.pubfn.isNotNull(N)&&(k=h.addForeignDB({foreignDB:N,result:k})),t.pubfn.isNotNull(y)&&(y=h.foreignDBToProject({fieldJson:y,foreignDB:N}),k=k.project(y)),t.pubfn.isNotNull(_)&&(k=k.addFields(_)),k=k.done();let v={};v["foreignKey"+h.getForeignKeyName(n)]="$"+n;let x={from:d,let:v,pipeline:k,as:g};o=o.lookup(x)}return o},getForeignKeyName:function(e){return e.replace(new RegExp("\\.","g"),"__")},addWhereJson:function(e,t={},n="whereJson"){let{vk:r,db:a,_:i}=m,{formData:o,columns:s}=e;for(let e in s){let a,l=s[e],{key:d,mode:c,defaultValue:u,type:f="",lastWhereJson:p,auxiliary:g=!0,trim:m=!0,isNumber:h=!1}=l;if("lastWhereJson"===n&&!p)continue;if("lastWhereJson"!==n&&p)continue;let b=d;if(r.pubfn.isNotNull(l.fieldName)&&(b=l.fieldName),a=r.pubfn.isNotNull(l.value)?l.value:o[d],r.pubfn.isNull(a)&&r.pubfn.isNotNull(u)&&(a=u),r.pubfn.isNull(c)&&(c=["address","province","city","area"].indexOf(f)>-1?"address":"[object Array]"===Object.prototype.toString.call(a)&&a.length>=2?"[]":"="),r.pubfn.isNotNull(a))if("string"==typeof a&&m&&"function"==typeof a.trim&&(a=a.trim()),h&&!isNaN(a)&&(a=Number(a)),"custom"===c);else if("%%"===c)try{t[b]=new RegExp(a)}catch(e){}else if("%*"===c)try{t[b]=new RegExp("^"+a)}catch(e){}else if("*%"===c)try{t[b]=new RegExp(a+"$")}catch(e){}else if(">"===c)t[b]=t[b]?t[b].gt(a):i.gt(a);else if(">="===c)t[b]=t[b]?t[b].gte(a):i.gte(a);else if("<"===c)t[b]=t[b]?t[b].lt(a):i.lt(a);else if("<="===c)t[b]=t[b]?t[b].lte(a):i.lte(a);else if("in"===c)t[b]=i.in(a);else if("nin"===c)t[b]=i.nin(a);else if("!="===c)t[b]=i.neq(a);else if("[]"===c)t[b]=i.gte(a[0]).lte(a[1]);else if("[)"===c)t[b]=i.gte(a[0]).lt(a[1]);else if("(]"===c)t[b]=i.gt(a[0]).lte(a[1]);else if("()"===c)t[b]=i.gt(a[0]).lt(a[1]);else if("address"===c){let e={};a.province&&a.province.code&&(e["province.code"]=a.province.code),a.city&&a.city.code&&(e["city.code"]=a.city.code),a.area&&a.area.code&&(e["area.code"]=a.area.code),t[b]=e}else t[b]=g?"___empty-array___"===a?[]:"___empty-object___"===a?{}:"___non-existent___"===a?i.exists(!1):"___existent___"===a?i.exists(!0):a:a}return t},addLastWhereJson:function(e,t={}){return h.addWhereJson(e,t,"lastWhereJson")},getTableData:async function(e){let{vk:t,db:n,_:r,config:a}=m,{db:i,dbName:o,data:s,getCount:l=!0,whereJson:d,fieldJson:c,sortArr:u,treeProps:f,groupJson:p,foreignKey:g,foreignDB:b,lastWhereJson:y}=e,{pageIndex:w,pageSize:N,pagination:_,sortRule:k,formData:v,columns:x}=s;_&&(w=_.pageIndex,N=_.pageSize);let D={},T={},S=[],A={};if(t.pubfn.isNotNull(u))S=u;else{let e=t.pubfn.getData(a,"vk.db.unicloud.getTableData.sortArr");t.pubfn.isNotNull(e)?S=e:S.push({name:"_id",type:"desc"})}return t.pubfn.isNotNull(k)&&(S=k),T=h.addWhereJson(s),A=h.addLastWhereJson(s),t.pubfn.isNotNull(d)&&(d.operator&&d.operands&&["or","and"].indexOf(d.operator)>-1?T=r.and([T,d]):t.pubfn.objectAssign(T,d)),t.pubfn.isNotNull(c)&&t.pubfn.objectAssign(D,c),t.pubfn.isNotNull(y)&&t.pubfn.objectAssign(A,y),t.pubfn.isNullAll(b,p,f)?await t.baseDao.select({db:i,dbName:o,getCount:l,pageIndex:w,pageSize:N,fieldJson:D,whereJson:T,sortArr:S}):await t.baseDao.selects({db:i,dbName:o,foreignKey:g,getCount:l,pageIndex:w,pageSize:N,whereJson:T,fieldJson:D,sortArr:S,treeProps:f,groupJson:p,foreignDB:b,lastWhereJson:A})},startTransaction:async function(e){let{vk:t,db:n,_:r}=m;return await n.startTransaction()},rollbackTransaction:async function(e){let{db:t,msg:n="【异常】操作失败",tips:r="事务已回滚。",err:a={}}=e;console.error("transaction error",a);let i={code:-1,msg:n,tips:r};await t.rollback();let o={message:a.message,stack:a.stack};try{o.body=JSON.parse(a.message),"object"==typeof o.body&&void 0!==o.body.code&&(o.body.msg,1)&&(i.msg=o.body.msg)}catch(e){}return console.error("transaction errJson",o),i.err=o,i},group:async function(e){let{vk:t,db:n,_:r}=m,{dbName:a,whereJson:i,groupJson:o,sortArr:s,pageIndex:l=1,pageSize:d=10,getCount:c=!1,lookupJson:u,db:f}=e,p=f||n;d<=0&&(d=999999999);r.aggregate;let g,h=p.collection(a).aggregate();if(t.pubfn.isNotNull(i)&&(h=h.match(i)),t.pubfn.isNotNull(o)&&(h=h.group(o)),t.pubfn.isNotNull(s)){let e={};for(let t in s){let n=s[t],r=n.name,a=n.type;a=null==a||""==a||"asc"==a?1:-1,e[r]=a}h=h.sort(e)}h=h.skip((l-1)*d).limit(d),t.pubfn.isNotNull(u)&&(g=u.returnObject,delete u.returnObject,h=h.lookup(u)),h=await h.end();let b,y=h.data;if(g)for(let e in y)y[e][u.as]=y[e][u.as][0];let w=!1;if(c){let e=p.collection(a).aggregate();t.pubfn.isNotNull(i)&&(e=e.match(i)),t.pubfn.isNotNull(o)&&(e=e.group(o));let n=await e.count("total").end();b=n.data[0]?n.data[0].total:0,l=d;return{hasMore:w,total:b,rows:y,code:0,key:1,pageIndex:l,pageSize:d}},tree:async function(e){let{vk:t,db:n,_:r}=m,{dbName:a,whereJson:i={},pageIndex:o=1,pageSize:s=10,getCount:l=!1,sortArr:d=[],fieldJson:c={},lastWhereJson:u,treeProps:f={}}=e;e.foreignDB||(e.foreignDB=[]);let{id:p="_id",parent_id:g="parent_id",children:b="children",level:y=10,limit:w=500}=f;if(y<1||y>20)throw new Error("msg:treeProps.level的范围必须在[1,20]");delete e.treeProps,e.whereJson||(e.whereJson={[g]:null}),e.foreignDB.unshift({dbName:a,localKey:p,foreignKey:g,as:b,limit:w,whereJson:f.whereJson,fieldJson:f.fieldJson||e.fieldJson,sortArr:f.sortArr,foreignDB:t.pubfn.copyObject(e.foreignDB)});let N=t.pubfn.copyObject(e.foreignDB);for(let n=1;n{"[object object]"===Object.prototype.toString.call(e.content)&&(e.content=JSON.stringify(e.content)),void 0===e.dataType&&(e.dataType="json"),"default"!=e.dataType&&""!==e.dataType||delete e.dataType,e.useContent&&(e.content=JSON.stringify(e.data)),e.method||(e.method="POST"),void 0===e.headers&&void 0!==e.header&&(e.headers=e.header);let t=await uniCloud.httpclient.request(e.url,e);return!e.needOriginalRes&&t&&t.data?t.data:t},w={formValidateItem:function(e,t,n){let r={code:0,msg:"ok"};for(let a in n){let i=n[a];if(void 0===e[t]&&i.required){r={type:"undefined",code:-1,msg:"字段:"+t+" 名称错误,请检查!",key:t,value:e[t]};break}if(i.required&&(null==e[t]||null==e[t]||""===e[t]||0==e[t].length)){r={type:"required",code:-1,msg:i.message,key:t,value:e[t]};break}if(i.type&&void 0!==e[t]){if(Object.prototype.toString.call(e[t]).toLowerCase().toLowerCase()!==`[object ${i.type}]`.toLowerCase()){r={type:"type",code:-1,msg:i.message,key:t,value:e[t]};break}}if(i.len&&e[t].length!=i.len){r={type:"len",code:-1,msg:i.message,key:t,value:e[t]};break}if(i.min)if(i.type&&"number"==i.type){if(e[t]i.max){r={type:"max",code:-1,msg:i.message,key:t,value:e[t]};break}}else if(e[t].length>i.max){r={type:"max",code:-1,msg:i.message,key:t,value:e[t]};break}if("function"==typeof i.validator){let n=i.validator(i,e[t],(function(e){return e}));if(void 0!==n&&!0!==n){r={type:"validator",code:-1,msg:i.message,key:t,value:e[t]};break}}}return r}};function N(e){return JSON.parse(JSON.stringify(e))}var _={};function k(e){let t=[];for(let n=0;n0&&(n=_.treeToArrayFn(d[o],t,n,d[a])),s&&delete d[o]}return n},_.arrayToTree=function(e,t){let n=N(e),{id:r="_id",parent_id:a="parent_id",children:i="children",deleteParentId:o=!1,need_field:s}=t,l=[],d={};for(let e=0;e0&&a>0){const e=60*(new Date).getTimezoneOffset()*1e3+60*t*60*1e3;let i=new Date(r,a,0).getDate();n.startTime=new Date(`${r}/${a}/1`).getTime()-e,n.endTime=new Date(`${r}/${a}/${i}`).getTime()+86399999-e}return n},getDayOffsetStartAndEnd:function(e=0,t,n=8){let r,a={};"string"!=typeof t||isNaN(t)||(t=Number(t)),t?"number"==typeof t?(10==t.toString().length&&(t*=1e3),r=new Date(t)):r=t:r=new Date;const i=60*r.getTimezoneOffset()*1e3+60*n*60*1e3;r=new Date(r.getTime()+864e5*e);let o=x.getFullTime(r,2);return a.startTime=new Date(`${o.year}/${o.month}/${o.day}`).getTime()-i,a.endTime=new Date(`${o.year}/${o.month}/${o.day}`).getTime()+86399999-i,a},getMonthOffsetStartAndEnd:function(e=0,t,n=8){let r,a={};"string"!=typeof t||isNaN(t)||(t=Number(t)),t?"number"==typeof t?(10==t.toString().length&&(t*=1e3),r=new Date(t)):r=t:r=new Date;const i=60*r.getTimezoneOffset()*1e3+60*n*60*1e3;let o=x.getFullTime(r,2),s=o.month+e,l=o.year;s>12?(l+=Math.floor(s/12),s=Math.abs(s)%12):s<=0&&(l=l-1-Math.floor(Math.abs(s)/12),s=12-Math.abs(s)%12);let d=new Date(l,s,0).getDate();return a.startTime=new Date(`${l}/${s}/1`).getTime()-i,a.endTime=new Date(`${l}/${s}/${d}`).getTime()+86399999-i,a},getYearOffsetStartAndEnd:function(e=0,t,n=8){let r,a={};"string"!=typeof t||isNaN(t)||(t=Number(t)),t?"number"==typeof t?(10==t.toString().length&&(t*=1e3),r=new Date(t)):r=t:r=new Date;const i=60*r.getTimezoneOffset()*1e3+60*n*60*1e3;let o=x.getFullTime(r,2).year+e;return a.startTime=new Date(o+"/1/1").getTime()-i,a.endTime=new Date(o+"/12/31").getTime()+86399999-i,a},isLeapYear:function(e){if(void 0===e){let{now:t}=x.getCommonTime();e=t.year}else if("object"==typeof e){let{now:t}=x.getCommonTime(e);e=t.year}return e%4==0&&e%100!=0||e%400==0},isQingming:function(e=new Date){let{now:t}=x.getCommonTime(e),{year:n,month:r,day:a}=t,i=!1;return x.isLeapYear(n)||x.isLeapYear(n-1)?4===r&&4===a&&(i=!0):4===r&&5===a&&(i=!0),i},getOffsetTime:function(e=new Date,t){let n="number"==typeof e?new Date(e):e,r=t.year||t.y,a=t.month||t.m,i=t.day||t.d,o=t.hours||t.hh,s=t.minutes||t.mm,l=t.seconds||t.ss,{mode:d="after"}=t;return"before"==d&&(r*=-1,a*=-1,i*=-1,o*=-1,s*=-1,l*=-1),r&&(n=n.setFullYear(n.getFullYear()+r),n=new Date(n)),a&&(n=n.setMonth(n.getMonth()+a),n=new Date(n)),i&&(n=n.setDate(n.getDate()+i),n=new Date(n)),o&&(n=n.setHours(n.getHours()+o),n=new Date(n)),s&&(n=n.setMinutes(n.getMinutes()+s),n=new Date(n)),l&&(n=n.setSeconds(n.getSeconds()+l),n=new Date(n)),n.getTime()}},D=x,T={formValidate:function(e={}){let t={code:0,msg:"ok"},{data:n,rules:r}=e;if(r)for(let e in r){let a=r[e];if(t=w.formValidateItem(n,e,a),0!=t.code)break}return t}};T.treeUtil=v,T.timeUtil=D,T.sleep=e=>new Promise(t=>setTimeout(t,e)),T.timeFormat=T.timeUtil.timeFormat,T.getFullTime=T.timeUtil.getFullTime,T.getCommonTime=T.timeUtil.getCommonTime,T.getOffsetTime=T.timeUtil.getOffsetTime,T.getWeekStartAndEnd=T.timeUtil.getWeekStartAndEnd,T.getDayOffsetStartAndEnd=T.timeUtil.getDayOffsetStartAndEnd,T.getMonthOffsetStartAndEnd=T.timeUtil.getMonthOffsetStartAndEnd,T.getYearOffsetStartAndEnd=T.timeUtil.getYearOffsetStartAndEnd,T.getMonthStartAndEnd=T.timeUtil.getMonthStartAndEnd,T.validator=function(e){return function(t,n,r){let a=T.test(n,e);return"function"!=typeof r||!a&&n?r(!1):void r()}},T.test=function(e,t){switch(t){case"mobile":return new RegExp(/^1[3|4|5|6|7|8|9][0-9]{9}$/).test(e);case"tel":return new RegExp(/^(0\d{2,3}-\d{7,8})(-\d{1,4})?$/).test(e);case"card":return new RegExp(/(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/).test(e);case"mobileCode":return new RegExp(/^[0-9]{6}$/).test(e);case"username":return new RegExp(/^[a-zA-Z]([-_a-zA-Z0-9]{5,17})$/).test(e);case"pwd":case"password":return new RegExp(/^([a-zA-Z0-9_@]){6,18}$/).test(e);case"payPwd":return new RegExp(/^[0-9]{6}$/).test(e);case"postal":return new RegExp(/[1-9]\d{5}(?!\d)/).test(e);case"QQ":return new RegExp(/^[1-9][0-9]{4,9}$/).test(e);case"email":return new RegExp(/^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$/).test(e);case"money":return new RegExp(/^\d*(?:\.\d{0,2})?$/).test(e);case"URL":return new RegExp(/(http|ftp|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?/).test(e);case"IP":return new RegExp(/^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$/).test(e);case"date":return new RegExp(/^[1-9]\d{3}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])$/).test(e);case"time":return new RegExp(/^(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d$/).test(e);case"dateTime":return new RegExp(/^[1-9]\d{3}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])\s+(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d$/).test(e);case"english+number":return new RegExp(/^[a-zA-Z0-9]*$/).test(e);case"english+number+_":return new RegExp(/^[a-zA-Z0-9_]*$/).test(e);case"number":return new RegExp(/^[0-9]*$/).test(e);case"english":return new RegExp(/^[a-zA-Z]+$/).test(e);case"chinese":return new RegExp(/^[\u4e00-\u9fa5]+$/gi).test(e);case"lower":return new RegExp(/^[a-z]+$/).test(e);case"upper":return new RegExp(/^[A-Z]+$/).test(e);case"HTML":return new RegExp(/<("[^"]*"|'[^']*'|[^'">])*>/).test(e);default:return!0}},T.checkStr=T.test,T.priceFilter=function(e,t=""){return T.isNull(e)?t:isNaN(e)?e:("string"==typeof e&&(e=parseFloat(e)),(e/100).toFixed(2))},T.priceLeftFilter=function(e){let t="";return e&&(t=T.priceFilter(e).split(".")[0]),t},T.priceRightFilter=function(e){let t="";return e&&(t=T.priceFilter(e).split(".")[1]),t},T.percentageFilter=function(e,t=!0,n=""){return T.isNull(e)?n:(isNaN(e)||("string"==typeof e&&(e=parseFloat(e)),e=parseFloat((100*e).toFixed(2)),t&&(e+="%")),e)},T.discountFilter=function(e,t=!0,n=""){return T.isNull(e)?n:isNaN(e)?e:("string"==typeof e&&(e=parseFloat(e)),(e=parseFloat((10*e).toFixed(2)))>10?"折扣不可以大于原价":10==e?"原价":0==e?"免费":e<0?"折扣不可以小于0":(t&&(e+=" 折"),e))},T.objectAssign=function(e,t){return Object.assign(e,t)},T.copyObject=function(e){return void 0!==e?JSON.parse(JSON.stringify(e)):e},T.deepClone=function(e){if([null,void 0,NaN,!1].includes(e))return e;if("object"!=typeof e&&"function"!=typeof e)return e;let t="[object Array]"===Object.prototype.toString.call(e)?[]:{};for(let n in e)e.hasOwnProperty(n)&&(t[n]="object"==typeof e[n]?T.deepClone(e[n]):e[n]);return t},T.formAssign=function(e,t){let n=T.copyObject(e);return T.objectAssign(n,t)},T.arr_concat=function(e,t,n){n||(n="id");var r=e.concat(t),a=[];if(-1!=n){var i=[];for(var o in r)-1==i.indexOf(r[o][n])&&(i.push(r[o][n]),a.push(r[o]))}else a=r;return a},T.getData=function(e,t,n){let r=JSON.parse(JSON.stringify(e));t=t.replace(/\s+/g,"")+".";let a="";for(let e=0;ee[t])},T.random=function(e,t,n){let r;if(T.isNull(n))r=T.randomFn(e,t);else{let a=0,i=1e5;do{a++,r=T.randomFn(e,t)}while(n.indexOf(r)>-1&&ae){n+="0123456789"[r[e].charCodeAt()%10]}else n="0"+n;return n},T.hidden=function(e="",t=0,n=0){let r=e.length-t-n,a="";for(let e=0;e-1&&(n=!0);return n},T.isArray=function(e){return"[object Array]"===Object.prototype.toString.call(e)},T.isObject=function(e){return"[object Object]"===Object.prototype.toString.call(e)},T.calcFreights=function(e,t){let{first_weight:n,first_weight_price:r,continuous_weight:a,continuous_weight_price:i,max_weight:o=1e8}=e,s=0,l=0,d=o,c=!1,u=0;for(;t>0;)c?(u++,t-=a,d-=a):(c=!0,l++,d=o,t-=n,d-=n),d<=0&&(c=!1);return s=l*r+i*u,s},T.getNewObject=function(e,t){let n=T.copyObject(e),r={};if(t&&t.length>0)for(let e in t){let a=t[e];T.isNotNull(n[a])&&(r[a]=n[a])}else r=n;return r},T.deleteObjectKeys=function(e,t=[]){var n={};if(e)for(let r in e)-1==t.indexOf(r)&&(n[r]=e[r]);return n},T.arrayToTree=T.treeUtil.arrayToTree,T.treeToArray=T.treeUtil.treeToArray,T.wildcardTestOne=function(e,t){if(!t)return!1;let n=t.replace(new RegExp("\\*"),"(.*)"),r=0!==t.indexOf("*")?"^":"",a="*"!==t[t.length-1]?"$":"";return new RegExp(r+n+a).test(e)},T.wildcardTest=function(e,t){let n=0;if("string"==typeof t)T.wildcardTestOne(e,t)&&n++;else if("object"==typeof t)for(let r=0;r0?d=i+"天":o>0?d=o+"小时":s>0?d=s+"分钟":l>0&&(d=l+"秒"),d+=t},T.dateDiff2=function(e,t="1秒"){if(!e)return"";"string"!=typeof e||isNaN(e)||(e=Number(e)),"number"==typeof e&&(10==e.toString().length&&(e*=1e3),e=new Date(e),e=T.getFullTime(e)),"string"==typeof e&&(e=e=e.replace("T"," "),e=new Date(e.replace(/-/g,"/")));var n=new Date,r=864e5,a=36e5,i=e.getTime()-n.getTime(),o=Math.floor(i/r),s=Math.floor(i%r/a),l=Math.floor(i%r%a/6e4),d=Math.round(i%r%a%6e4/1e3),c=t;return o>0?c=o+"天":s>0?c=s+"小时":l>0?c=l+"分钟":d>0&&(c=d+"秒"),c},T.numStr=function(e){"string"==typeof e&&(e=parseFloat(e));var t=e;if(e<1e3)t=e;else if(e<1e4){t=Math.floor(e/100)/10+"千"}else if(e<1e6){t=Math.floor(e/1e3)/10+"万"}else if(e<1e7){t=Math.floor(e/1e6)+"百万"}else if(e<1e8){t=Math.floor(e/1e7)+"千万"}else if(e>=1e8){t=Math.floor(e/1e7)/10+"亿"}return t},T.calcSize=function(e=0,t,n,r=2,a="auto"){let i=0,o="";if((e=parseFloat(e))O(e,t)))}return e}T.snake2camel=function(e){return e.replace(S,(e,t)=>t?t.toUpperCase():"")},T.camel2snake=function(e){return e.replace(A,e=>"_"+e.toLowerCase())},T.snake2camelJson=function(e){return O(e,"snake2camel")},T.camel2snakeJson=function(e){return O(e,"camel2snake")},T.string2Number=function(e,t={}){switch(Object.prototype.toString.call(e).slice(8,-1).toLowerCase()){case"string":if(e&&!isNaN(e)){let{mobile:n=!0,idCard:r=!0,startFrom0:a=!0,maxLength:i=14}=t;return e.length>i||(n&&T.test(e,"mobile")||r&&T.test(e,"card")||a&&e.length>1&&0===e.indexOf("0")&&1!==e.indexOf("."))?e:Number(e)}return e;case"object":const n=Object.keys(e);for(let t=0;t-1){var o=a.indexOf('"',i),s=a.substring(i,o);if(o>i){var l=a.indexOf("---",o),d=a.substring(o+1,l).trim();n[s]=d}}}return n},T.getPlatform=function(e){e||(e=uniCloud.$context);let t=e.PLATFORM;return"h5"===t&&e.CLIENTUA.toLowerCase().indexOf("micromessenger")>-1&&(t="h5-weixin"),t},T.batchRun=async function(e){let{main:t,data:n=[],concurrency:r=100}=e,a=n.length,i=[];if(0==n.length)return{stack:i,total:a};if(1===r){for(let e=0;e=a)break;let l=t(n[s],s);e.push(l)}try{await Promise.all(e).then(e=>{i=i.concat(e)})}catch(e){console.error(e)}}return{stack:i,total:a}}};var E=T,I={},$={};I.get=function(e){let t,n=$[e];if(n){let{value:r,expired:a}=n;I.isExpired(e)?delete $[e]:t=r}return t},I.set=function(e,t,n=0){let r={value:t,expired:n>0?(new Date).getTime()+1e3*n:0};$[e]=r},I.del=function(e){delete $[e]},I.clear=function(e){if(e)for(let t in $)0==t.indexOf(e)&&delete $[t];else $={}},I.isExpired=function(e){let t=!0,n=$[e];return n&&(0==n.expired||n.expired>(new Date).getTime())&&(t=!1),t},I.getAll=function(e){let t={};if(e)for(let n in $)0==n.indexOf(e)&&(t[e]=$[e]);else t=$;for(let e in t)I.isExpired(e)&&(delete t[e],delete $[e]);return t};var J=I,C={},M={},B={};C.init=function(e){B=(M=e).vk.system.globalDataDao},C.get=async function(e,t=0,n,r=!0){return"function"==typeof n?C.autoGet(e,t,n,r):C._get(e)},C.autoGet=async function(e,t=0,n,r=!0){let a,{vk:i}=M;try{a=await C._get(e),i.pubfn.isNull(a)&&"function"==typeof n&&(a=await n(),void 0!==a&&r&&await i.globalDataCache.set(e,a,t))}catch(e){return}return a},C._get=async function(e){let t;try{let n=await B.find(e);if(n){let{value:r,expired_at:a}=n;C.isExpired(n)?await C.del(e):t=r}}catch(e){return}return t},C.set=async function(e,t,n=0){let r;e&&void 0!==e.key&&void 0!==e.value?(r=e.key,t=e.value,n=e.second):r=e;let a={code:0,msg:"ok"};try{if(!r)return{code:-1,msg:"key值不能为空"};let e=n>0?(new Date).getTime()+1e3*n:0;a=await B.set({key:r,value:t,expired_at:e})}catch(e){return console.error(e),{code:-1,msg:"异常"}}return a},C.del=async function(e){await B.del(e)},C.clear=async function(e){if(e)return await B.deleteByWhere({key:new RegExp("^"+e)})},C.list=async function(e){return await B.list(e)},C.count=async function(e){return await B.count(e)},C.isExpired=function(e){let t=!0;return e&&(!e.expired_at||0==e.expired_at||e.expired_at>(new Date).getTime())&&(t=!1),t},C.inc=async function(e,t=1,n=0){let r;e&&void 0!==e.key&&void 0!==e.value?(r=e.key,t=e.value,n=e.second):r=e;let a={code:0,msg:"ok"};try{if(!r)return{code:-1,msg:"key值不能为空"};let e=n>0?(new Date).getTime()+1e3*n:0;a=await B.inc({key:r,value:t,expired_at:e})}catch(e){return{code:-1,msg:"异常",err:e}}return a},C.uniqueAdd=async function(e,t=1,n=5){let{vk:r}=M,a={code:0,msg:"ok"};try{if(!e)return{code:-1,msg:"key值不能为空"};let i=n>0?(new Date).getTime()+1e3*n:0;await r.globalDataCache.deleteExpired(e);a.id=await B.add({key:e,value:t,expired_at:i})}catch(e){return console.error(e),{code:-1,msg:"异常"}}return a},C.deleteExpired=async function(e){await B.deleteExpired(e)};var F=C,P={},j={};function q(e){return e.code=e.errcode,e.msg=e.errmsg,e}P.init=function(e){j=e},P.getConfig=function(){let{vk:e,config:t,crypto:n,uniID:r}=j;const a=t.uni;var i;if(e.pubfn.isArray(a)){let t=uniCloud.env&&uniCloud.env.APPID?uniCloud.env.APPID:uniCloud.$context.APPID;i=e.pubfn.getListItem(a,"dcloudAppid",t),e.pubfn.isNull(i)&&(i=e.pubfn.getListItem(a,"isDefaultConfig",!0))}else i=a;return i},P.decrypt={},P.decrypt.getPhoneNumber=async function(e={}){let{appid:t,encryptedData:n,iv:r,sessionKey:a}=e;e.appId&&(t=e.appId);let i,{vk:o,crypto:s,uniID:l,config:d}=j,c={code:0,msg:"ok"},u=o.pubfn.isNullOneByObject({encryptedData:n,iv:r,sessionKey:a});if(u)return{code:-1,msg:u+"不能为空"};if(t)i=t;else try{const e=P.getConfig();let t=e["mp-weixin"];if(i=t.oauth.weixin.appid,o.pubfn.isNull(i))return console.log("config",e),console.log("mpWeixin",t),{code:-1,msg:"请先配置微信小程序APPID"}}catch(e){return{code:-1,msg:"请先配置微信小程序APPID"}}return c.data=P.decrypt.decryptData({appid:i,encryptedData:n,iv:r,sessionKey:a}),c.phone=c.data.phoneNumber,c.mobile=c.data.phoneNumber,c},P.decrypt.decryptData=function(e={}){let t,{appid:n,encryptedData:r,iv:a,sessionKey:i}=e,{vk:o,crypto:s}=j,l=new Buffer(i,"base64"),d=new Buffer(r,"base64"),c=new Buffer(a,"base64");try{let e=s.createDecipheriv("aes-128-cbc",l,c);e.setAutoPadding(!0),t=e.update(d,"binary","utf8"),t+=e.final("utf8"),t=JSON.parse(t)}catch(e){throw new Error(e)}return t.watermark.appid!==n?{code:-1,msg:"appid不一致"}:t},P.auth={},P.auth.getAppidInfo=function(e={}){let{appid:t,appsecret:n}=e,{vk:r,config:a}=j;const i=P.getConfig();if(t){if(!n){let e=r.pubfn.getData(a,"vk.oauth.weixin.list")||[],i=r.pubfn.getListItem(e,"appid",t)||{};t=i.appid,n=i.appsecret}}else{let e=r.pubfn.getData(i,"mp-weixin.oauth.weixin")||{};t=e.appid,n=e.appsecret}if(r.pubfn.isNullOne(t,n))throw console.log("config",i),new Error("请先配置微信小程序appid和appsecret");return{appid:t,appsecret:n}},P.auth.getAccessTokenFn=async function(e={}){let{appid:t,appsecret:n}=P.auth.getAppidInfo(e),{vk:r,config:a}=j,i=await r.request({url:`https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=${t}&secret=${n}`,method:"GET"});return i.errcode?(console.error("getAccessToken失败:",i),{code:i.errcode,msg:i.errmsg,err:i}):{code:0,msg:"ok",access_token:i.access_token,expires_in:i.expires_in}},P.auth.getAccessToken=async function(e={}){let t,{appid:n,appsecret:r}=P.auth.getAppidInfo(e),{cache:a=!0}=e,{vk:i}=j,o="mp-weixin-"+n;if(a&&(t=await i.globalDataCache.get(o)),i.pubfn.isNull(t)){let n=await P.auth.getAccessTokenFn(e);0===n.code&&(t=n.access_token,await i.globalDataCache.set(o,t,240),await i.globalDataCache.deleteExpired())}return t},P.auth.code2Session=async function(e={}){let t,{vk:n,uniID:r}=j,{platform:a,context:i}=e;return a||(a=n.pubfn.getPlatform(i)||"mp-weixin"),t="mp-weixin"===a?await P.auth.code2SessionMpWeixin(e):"h5-weixin"===a?await P.h5.auth.code2Session(e):await r.code2SessionWeixin(e),t.platform=a,t},P.auth.code2SessionMpWeixin=async function(e={}){let{appid:t,appsecret:n}=P.auth.getAppidInfo(e),r=e.code||e.js_code,{vk:a}=j,i=await a.request({url:`https://api.weixin.qq.com/sns/jscode2session?appid=${t}&secret=${n}&js_code=${r}&grant_type=authorization_code`,method:"GET"});if(i.errcode){let e=i.errmsg;return 40163===i.errcode&&(e="该code已被使用,请重新获取"),40029===i.errcode&&(e="无效code,请重新获取"),{...i,code:i.errcode,msg:e}}return i=a.pubfn.snake2camelJson(i),{...i,code:0,msg:"ok"}},P.wxacode={},P.wxacode.getUnlimited=async function(e={}){let t,{vk:n}=j,{access_token:r,scene:a,page:i,width:o,auto_color:s,line_color:l,is_hyaline:d}=e;if(t=r||await P.auth.getAccessToken(e),!t)return{code:-1,msg:"获取access_token失败,请检查appid和appsecret是否正确"};let c=await n.request({url:"https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token="+t,method:"POST",data:{scene:a,page:i,width:o,auto_color:s,line_color:l,is_hyaline:d},dataType:"default",useContent:!0,headers:{encoding:null}});if(c.length<500){let e=c.toString();try{e=JSON.parse(e)}catch(e){}return{code:-1,msg:"生成小程序码失败,请重试!",res:e}}return Buffer.isBuffer(c)?c:{code:c.errcode,msg:c.errmsg,err:c}},P.urlscheme={},P.urlscheme.generate=async function(e={}){let{vk:t}=j,{jump_wxa:n={},is_expire:r,expire_time:a}=e,{path:i,query:o}=n,s=await P.auth.getAccessToken(e);if(!s)return{code:-1,msg:"获取access_token失败,请检查appid和appsecret是否正确"};a>0&&(a=(new Date).getTime()/1e3+a);let l=await t.request({url:"https://api.weixin.qq.com/wxa/generatescheme?access_token="+s,method:"POST",data:{jump_wxa:{path:i,query:o},is_expire:r,expire_time:a},useContent:!0});switch(l=q(l),l.code){case 40001:l.msg="access_token错误";break;case 40165:l.msg="小程序页面不存在!"}return l},P.security={},P.security.msgSecCheck=async function(e={}){let{vk:t}=j,{content:n}=e,r=await P.auth.getAccessToken(e);if(!r)return{code:-1,msg:"获取access_token失败,请检查appid和appsecret是否正确"};let a=await t.request({url:"https://api.weixin.qq.com/wxa/msg_sec_check?access_token="+r,method:"POST",data:{content:n},useContent:!0});switch(a=q(a),a.code){case 40001:a.msg="access_token错误";break;case 87014:a.msg="内容含有违法违规内容,请检查!"}return a},P.security.imgSecCheck=async function(e={}){let{vk:t}=j,{dataBuffer:n,formData:r,base64:a}=e,i=await P.auth.getAccessToken(e);if(!i)return{code:-1,msg:"获取access_token失败,请检查appid和appsecret是否正确"};if(a&&!n){let e="base64,",t=a.indexOf(e);t>-1&&(a=a.substring(t+e.length)),n=new Buffer(a,"base64")}n&&!r&&(r=new t.formDataUtil.FormData,r.append("media",n,{filename:Date.now()+".png",contentType:"image/png"}));let o=await t.request({url:"https://api.weixin.qq.com/wxa/img_sec_check?access_token="+i,content:r.getBuffer(),headers:r.getHeaders()});switch(o=q(o),o.code){case 40001:o.msg="access_token错误";break;case 87014:o.msg="图片内容含有违法违规内容,请检查!";break;case 40006:o.msg="图片大小不能超过1M"}return o},P.subscribeMessage={},P.subscribeMessage.send=async function(e={}){let{vk:t}=j,{touser:n,template_id:r,page:a,data:i,miniprogram_state:o="formal",lang:s="zh_CN"}=e,l=await P.auth.getAccessToken(e);if(!l)return{code:-1,msg:"获取access_token失败,请检查appid和appsecret是否正确"};let d=await t.request({url:"https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token="+l,method:"POST",data:{touser:n,template_id:r,page:a,data:i,miniprogram_state:o,lang:s},useContent:!0});switch(d=q(d),d.code){case 40003:d.msg="touser字段openid为空或者不正确";break;case 40037:d.msg="订阅模板id为空不正确";break;case 43101:d.msg="用户未订阅该消息";break;case 47003:d.msg="模板参数不准确,可能为空或者不满足规则,errmsg会提示具体是哪个字段出错";break;case 41030:d.msg="page路径不正确,需要保证在现网版本小程序中存在"}return d},P.livebroadcast={},P.livebroadcast.getLiveInfo=async function(e={}){let{vk:t}=j,{pageIndex:n=1,pageSize:r=100}=e,a=await P.auth.getAccessToken(e);if(!a)return{code:-1,msg:"获取access_token失败,请检查appid和appsecret是否正确"};if(n<=0)return{code:-1,msg:"pageIndex必须是大于0的整数"};let i=(n-1)*r,o=r,s=await t.request({url:"https://api.weixin.qq.com/wxa/business/getliveinfo?access_token="+a,method:"POST",data:{start:i,limit:o},useContent:!0});switch(s=q(s),s.code){case 941e4:s.msg="直播间列表为空"}return s},P.app={},P.app.auth={},P.app.auth.getAppidInfo=function(e={}){let{appid:t,appsecret:n}=e,{vk:r,config:a}=j;const i=P.getConfig();if(t){if(!n){let e=r.pubfn.getData(a,"vk.oauth.weixin.list")||[],i=r.pubfn.getListItem(e,"appid",t)||{};t=i.appid,n=i.appsecret}}else{let e=r.pubfn.getData(i,"app-plus.oauth.weixin")||{};t=e.appid,n=e.appsecret}if(r.pubfn.isNullOne(t,n))throw console.log("config",i),new Error("请先配置微信小程序appid和appsecret");return{appid:t,appsecret:n}},P.app.auth.getAccessToken=async function(e={}){let{appid:t,appsecret:n}=P.app.auth.getAppidInfo(e),{vk:r,config:a}=j,{code:i}=e,o=await r.request({url:`https://api.weixin.qq.com/sns/oauth2/access_token?appid=${t}&secret=${n}&code=${i}&grant_type=authorization_code`,method:"GET"});return o.errcode?(console.error("getAccessToken失败:",o),{code:o.errcode,msg:o.errmsg,err:o}):{...o,code:0,msg:"ok"}},P.app.auth.getUserInfo=async function(e={}){let{vk:t,config:n}=j,{access_token:r,openid:a,lang:i="zh-CN"}=e;if(!r)return{code:-1,msg:"access_token不能为空"};let o=await t.request({url:`https://api.weixin.qq.com/sns/userinfo?access_token=${r}&openid=${a}$lang=${i}`,method:"GET"});return o.errcode?(console.error("getUserInfo失败:",o),{code:o.errcode,msg:o.errmsg,err:o}):{...o,code:0,msg:"ok",avatar:o.headimgurl,gender:o.sex}},P.h5={},P.h5.auth={},P.h5.auth.getAppidInfo=function(e={}){let{appid:t,appsecret:n}=e,{vk:r,config:a}=j;const i=P.getConfig();if(t){if(!n){let e=r.pubfn.getData(a,"vk.oauth.weixin.list")||[],i=r.pubfn.getListItem(e,"appid",t)||{};t=i.appid,n=i.appsecret}}else{let e=r.pubfn.getData(i,"h5-weixin.oauth.weixin")||{};t=e.appid,n=e.appsecret}if(r.pubfn.isNullOne(t,n))throw console.log("config",i),new Error("请先配置微信公众号appid和appsecret");return{appid:t,appsecret:n}},P.h5.auth.code2Session=async function(e={}){let{appid:t,appsecret:n}=P.h5.auth.getAppidInfo(e),{code:r}=e,{vk:a}=j,i=await a.request({url:`https://api.weixin.qq.com/sns/oauth2/access_token?appid=${t}&secret=${n}&code=${r}&grant_type=authorization_code`,method:"GET"});if(i.errcode){let e=i.errmsg;return 40163===i.errcode&&(e="该code已被使用,请重新获取"),40029===i.errcode&&(e="无效code,请重新获取"),{...i,code:i.errcode,msg:e}}return i=a.pubfn.snake2camelJson(i),{...i,code:0,msg:"ok"}},P.loginByWeixin=async function(e={},t){let n,{vk:r,uniID:a,_:i}=j,{code:o,platform:s,type:l,appid:d}=e;s||(s=r.pubfn.getPlatform(t),e.platform=s);try{n=await a.loginByWeixin(e);try{if(n.uid&&!n.msg&&(n.msg="register"===n.type?"注册成功":"登录成功"),n.uid&&"register"===n.type){let t={};if(["h5-weixin","app-plus"].indexOf(s)>-1){let e=await r.openapi.weixin.app.auth.getUserInfo({access_token:n.accessToken,openid:n.openid});t={nickname:e.nickname,avatar:e.headimgurl}}["mp-weixin"].indexOf(s)>-1&&(t={nickname:e.nickname,avatar:e.avatar}),r.pubfn.isNotNull(t)&&(n.userInfo=await r.baseDao.updateAndReturn({dbName:"uni-id-users",whereJson:{_id:n.uid||"___",nickname:i.exists(!1)},dataJson:t}))}}catch(e){console.error("保存用户头像昵称异常:",e)}}catch(e){console.error("loginByWeixin异常:",e);let t=e.message||"";throw e.message.indexOf("code been used")>-1&&(t="该code已被使用,请重新获取"),e.message.indexOf("invalid code")>-1&&(t="无效code,请重新获取"),new Error("msg:"+t)}return n};var R=P,L={},U={};L.init=function(e){U=e},L.open={},L.open.auth={},L.open.auth.getAppidInfo=function(e={}){let{appid:t,appsecret:n}=e,{vk:r,config:a}=U;if(!t){let e=r.pubfn.getData(a,"vk.service.openapi.baidu")||{};t=e.appid,n=e.appsecret}if(r.pubfn.isNullOne(t,n))throw new Error("请在cloudfunctions/common/config/index.js中配置并检查百度开放平台的appid和appsecret是否正确,参数路径:vk.service.openapi.baidu");return{appid:t,appsecret:n}},L.open.auth.getAccessTokenFn=async function(e={}){let{appid:t,appsecret:n}=L.open.auth.getAppidInfo(e),{vk:r,config:a}=U,i=await r.request({url:`https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=${t}&client_secret=${n}`,method:"GET"});return i.error_code?(console.error("getAccessToken失败:",i),{code:i.error_code,msg:i.error_msg,err:i}):{...i,code:0,msg:"ok"}},L.open.auth.getAccessToken=async function(e={}){let t,{appid:n,appsecret:r}=L.open.auth.getAppidInfo(e),{cache:a=!0}=e,{vk:i}=U,o="openapi-baidu-"+n;if(a&&(t=await i.globalDataCache.get(o)),i.pubfn.isNull(t)){let n=await L.open.auth.getAccessTokenFn(e);0===n.code&&(t=n.access_token,await i.globalDataCache.set(o,t,n.expires_in-3600),await i.globalDataCache.deleteExpired())}return t},L.open.ocr={},L.open.ocr.business_license=async function(e={}){let{image:t,url:n}=e;return await L.open.request({...e,action:"ocr/v1/business_license",actionVersion:"2.0",data:{image:t,url:n}})},L.open.ocr.idcard=async function(e={}){let{image:t,url:n,id_card_side:r,detect_risk:a,detect_photo:i}=e;return await L.open.request({...e,action:"ocr/v1/idcard",actionVersion:"2.0",data:{image:t,url:n,id_card_side:r,detect_risk:a,detect_photo:i}})},L.open.request=async function(e={}){let{vk:t}=U,n=await L.open.auth.getAccessToken(e);if(!n)return{code:-1,msg:"获取access_token失败,请检查appid和appsecret是否正确"};let{action:r,actionVersion:a="2.0",header:i={"content-type":"application/x-www-form-urlencoded"},data:o}=e,s=await t.request({url:`https://aip.baidubce.com/rest/${a}/${r}?access_token=${n}`,method:"POST",headers:{"content-type":"application/x-www-form-urlencoded"},data:o});return s.error_code?{code:s.error_code,msg:s.error_msg,err:s}:{...s,code:0,msg:"ok"}};var z=L,K={};K.weixin=R,K.baidu=z,K.init=function(e){K.weixin.init(e),K.baidu.init(e)};var W=K;const Y=/^multipart\/.+?(?:;\s*boundary=(?:(?:"(.+)")|(?:([^\s]+))))$/i,Z=/Content-Disposition:\sform-data;\sname="(.+?)"(?:;\sfilename="(.+?)")?/i,G=/Content-Type:\s(.+?)$/i;var H={FormData:class{constructor(){this._shouldUseCache=!1,this._cachedBuffer=null,this._lineBreak="\r\n",this._boundary="------FormDataBaseBoundary"+Math.random().toString(36).substring(2),this.dataList=[]}_addData(e){if(this._shouldUseCache=!1,0===this.dataList.length)return void this.dataList.push(e);const t=this.dataList[this.dataList.length-1];switch(`${Buffer.isBuffer(t)?"buffer":"other"}_${Buffer.isBuffer(e)?"buffer":"other"}`){case"buffer_buffer":this.dataList.push(this._lineBreak),this.dataList.push(e);break;case"buffer_other":this.dataList.push(this._lineBreak+e);break;case"other_buffer":this.dataList[this.dataList.length-1]=t+"\r\n",this.dataList.push(e);break;case"other_other":this.dataList[this.dataList.length-1]=t+"\r\n"+e}}append(e,t,n){this._addData("--"+this._boundary);let r=`Content-Disposition: form-data; name="${encodeURIComponent(e)}"`;if(Buffer.isBuffer(t)){if(!n.filename||!n.contentType)throw new Error("filename and contentType required");r+=`; filename="${encodeURIComponent(n.filename)}"`,this._addData(r),this._addData("Content-Type: "+n.contentType),this._addData(""),this._addData(t)}else this._addData(r),this._addData(""),this._addData(t)}getHeaders(e){const t={"Content-Type":"multipart/form-data; boundary="+this._boundary};return Object.assign(t,e)}getBuffer(){if(this._shouldUseCache)return this._cachedBuffer;this._shouldUseCache=!0;let e=Buffer.alloc(0);return this.dataList.forEach(t=>{e=Buffer.isBuffer(t)?Buffer.concat([e,t]):Buffer.concat([e,Buffer.from(""+t)])}),e=Buffer.concat([e,Buffer.from(`${this._lineBreak}--${this._boundary}--`)]),this._cachedBuffer=e,e}},formParser:e=>{const t=(e.headers["content-type"]||e.headers["Content-Type"]).match(Y),n=t[1]||t[2],r=function(e,t){let n=0,r=0,a=[];for(;-1!==(r=e.indexOf(t,n));)a.push(e.slice(n,r)),n=r+t.length,r=e.indexOf(t,n);return a}(Buffer.from(e.body,"base64"),Buffer.from("--"+n)).map(e=>function(e){let t=e.indexOf("\r\n")+"\r\n".length,n=t,r=e.lastIndexOf("\r\n"),a=[];for(;-1!==(n=e.indexOf("\r\n",t));)if(a.push(e.slice(t,n)),t=n+"\r\n".length,0===a[a.length-1].length){a.push(e.slice(t,r));break}return a}(e).filter(e=>e.length>0)).filter(e=>2===e.length||3===e.length||4===e.length).map(e=>{const t={},n=e[0].toString().match(Z);switch(t.name=decodeURIComponent(n[1]),e.length){case 2:t.value=e[1].toString();break;case 3:t.filename=decodeURIComponent(n[2]),t.contentType=e[1].toString().match(G)[1],t.fileContent=e[2];break;case 4:t.filename=decodeURIComponent(n[2]),t.contentType=e[1].toString().match(G)[1],t.fileContent=e[3]}return t}),a={};return r.forEach(e=>{const t=e.name;delete e.name,a[t]=e.fileContent?e:e.value}),a}};const V="opendb-admin-menus";var Q={},X={};Q.init=function(e){X=e},Q.findRoleById=async(e="___")=>{let t,{vk:n,db:r,_:a}=X;return t=await n.baseDao.findByWhereJson({dbName:"uni-id-roles",whereJson:{role_id:e}}),t},Q.roleBindPermission=async(e={})=>{let{vk:t,db:n,_:r}=X,a={code:0,msg:""},{role_id:i="___",permissionList:o=[],reset:s=!1}=e;if(!s){let e=await Q.findRoleById(i),{permission:t=[]}=e;o=t.concat(o),o=[...new Set(o)]}return a.num=await t.baseDao.update({dbName:"uni-id-roles",whereJson:{role_id:i},dataJson:{permission:r.set(o)}}),a},Q.roleBindMenu=async(e={})=>{let{vk:t,db:n,_:r}=X,a={code:0,msg:""},{role_id:i="___",menuList:o=[],reset:s=!1,addPermission:l=!1}=e,d=[],c=await Q.findRoleById(i),{menu:u=[],permission:f=[]}=c;if(s?d=te(o,u):(o=u.concat(o),o=[...new Set(o)]),a.num=await t.baseDao.update({dbName:"uni-id-roles",whereJson:{role_id:i},dataJson:{menu:r.set(o)}}),l){let e=await Q.findMenuByIdsToPermission(o),n=[];if(s&&t.pubfn.isNotNull(d)){n=te(e,await Q.findMenuByIdsToPermission(d))}f=f.concat(e),f=te(n,f),f=[...new Set(f)],Q.roleBindPermission({role_id:i,permissionList:f,reset:!0})}return a},Q.findPermissionById=async(e="___")=>{let t,{vk:n,db:r,_:a}=X;return t=await n.baseDao.findByWhereJson({dbName:"uni-id-permissions",whereJson:{permission_id:e}}),t},Q.findMenuByIdsToPermission=async e=>{let{vk:t,db:n,_:r}=X,a=await Q.findMenuByIds(e);if(t.pubfn.isNull(a))return[];let i=[];for(let e in a){let n=a[e].permission;t.pubfn.isNotNull(n)&&(i=i.concat(n))}return i=[...new Set(i)],i},Q.listPermissionToTree=async(e={})=>{let t,{vk:n,db:r,_:a}=X,{getCount:i=!1,pageSize:o=500,pageIndex:s=1,whereJson:l={parent_id:null},sortArr:d=[{name:"sort",type:"asc"}],treeProps:c={}}=e,{level:u=3,limit:f=500,whereJson:p}=c;t=await n.baseDao.selects({dbName:"uni-id-permissions",pageIndex:s,pageSize:o,getCount:i,whereJson:l,sortArr:d,treeProps:{id:"permission_id",parent_id:"parent_id",children:"children",level:u,limit:f,whereJson:p,sortArr:d}});let g={id:"permission_id",parent_id:"parent_id",children:"children"},m=t.rows;m=n.pubfn.treeToArray(m,g),t.list=n.pubfn.copyObject(m);for(let e in m){let t=m[e],r="",a="";if(n.pubfn.isNotNull(t.level)){r=` - ${["未分类","子弹级","炸弹级","榴弹级","核弹级"][t.level]}(LV:${t.level})`}if(n.pubfn.isNotNull(t.curd_category)){a=" - "+["未分类","增","删","改","查","特殊"][t.curd_category]}m[e].label=`${t.permission_name}(${t.permission_id})${a}${r}`}return m=n.pubfn.arrayToTree(m,g),t.rows=m,t},Q.findMenuById=async(e="___")=>{let t,{vk:n,db:r,_:a}=X;return t=await n.baseDao.findByWhereJson({dbName:V,whereJson:{menu_id:e}}),t},Q.findMenuByIds=async e=>{let t,{vk:n,db:r,_:a}=X;return n.pubfn.isNull(e)?[]:(t=(await n.baseDao.select({dbName:V,pageIndex:1,pageSize:500,whereJson:{menu_id:a.in(e)}})).rows,t)},Q.listMenuByRole=async(e={})=>{let{vk:t,db:n,_:r}=X,a={code:0,msg:"",menus:[],menuList:[]},{role:i}=e,o=[],s={enable:!0},l={enable:!0};if(!(i.indexOf("admin")>-1)){if(t.pubfn.isNull(i))return a;let e=await t.baseDao.select({dbName:"uni-id-roles",pageSize:500,whereJson:{role_id:r.in(i),enable:!0},fieldJson:{menu:!0}});for(let n in e.rows){let{menu:r}=e.rows[n];t.pubfn.isNotNull(r)&&(o=o.concat(r))}if(0==o.length)return a;o=[...new Set(o)],s.menu_id=r.in(o),l.menu_id=r.in(o)}s.parent_id=null;let d=[{name:"sort",type:"asc"}],c=await t.baseDao.selects({dbName:V,pageIndex:1,pageSize:500,whereJson:s,sortArr:d,treeProps:{id:"menu_id",parent_id:"parent_id",children:"children",level:3,limit:500,whereJson:l,sortArr:d}});return a.menus=c.rows,a.menuList=t.pubfn.treeToArray(c.rows,{id:"menu_id",parent_id:"parent_id",children:"children"}),a},Q.menuBindPermission=async(e={})=>{let{vk:t,db:n,_:r}=X,a={code:0,msg:""},{menu_id:i="___",permissionList:o=[],reset:s=!1}=e;if(!s){let e=await Q.findMenuById(i),{permission:t=[]}=e;o=t.concat(o),o=[...new Set(o)]}return a.num=await t.baseDao.update({dbName:V,whereJson:{menu_id:i},dataJson:{permission:r.set(o)}}),a},Q.listMenuToTree=async(e={})=>{let t,{vk:n,db:r,_:a}=X,{getCount:i=!1,pageSize:o=500,pageIndex:s=1,whereJson:l={parent_id:null},sortArr:d=[{name:"sort",type:"asc"}],treeProps:c={}}=e,{level:u=3,limit:f=500,whereJson:p}=c;t=await n.baseDao.selects({dbName:V,pageIndex:s,pageSize:o,getCount:i,whereJson:l,sortArr:d,treeProps:{id:"menu_id",parent_id:"parent_id",children:"children",level:u,limit:f,whereJson:p,sortArr:d}});let g={id:"menu_id",parent_id:"parent_id",children:"children"},m=t.rows;m=n.pubfn.treeToArray(m,g),t.list=n.pubfn.copyObject(m);for(let e in m){let t=m[e];m[e].label=`${t.name}(${t.menu_id})`}return m=n.pubfn.arrayToTree(m,g),t.rows=m,t};var ee=Q;function te(e,t){let n=new Set(e);return t.filter(e=>!n.has(e))}const ne="opendb-global-data";var re={},ae={};re.init=function(e){ae=e},re.find=async e=>{let{vk:t,db:n,_:r}=ae,a={};return a=await t.baseDao.findById({dbName:ne,id:e}),a},re.del=async e=>{let{vk:t,db:n,_:r}=ae,a={};return a=await t.baseDao.deleteById({dbName:ne,id:e}),a},re.deleteByWhere=async e=>{let{vk:t,db:n,_:r}=ae,a={};return a=await t.baseDao.del({dbName:ne,whereJson:e}),a},re.deleteExpired=async e=>{let{vk:t,db:n,_:r}=ae,a={},i={};"string"==typeof e?i._id=e:"object"==typeof e&&(i=e);let o=(new Date).getTime();return a=await t.baseDao.del({dbName:ne,whereJson:{...i,expired_at:r.gt(0).lte(o)}}),a},re.update=async e=>{let{vk:t,db:n,_:r}=ae,a={},{key:i,value:o,comment:s,expired_at:l}=e;return a=await t.baseDao.updateById({dbName:ne,id:i,dataJson:{value:r.set(o),comment:s,expired_at:l}}),a},re.add=async e=>{let{vk:t,db:n,_:r}=ae,a={},{key:i,value:o,comment:s,expired_at:l}=e;return a=await t.baseDao.add({dbName:ne,dataJson:{_id:i,key:i,value:o,comment:s,expired_at:l}}),a},re.count=async e=>{let{vk:t,db:n,_:r}=ae,a={};return a=await t.baseDao.count({dbName:ne,whereJson:e}),a},re.set=async e=>{let{vk:t,db:n,_:r}=ae,a={code:0,msg:"ok"},i=new Date;e._add_time=i.getTime(),e._add_time_str=t.pubfn.timeFormat(i,"yyyy-MM-dd hh:mm:ss");let o=await n.collection(ne).doc(e.key).set(e);return o.upsertedId?(a.id=o.upsertedId,a.mode="add"):(a.mode="update",a.updated=o.updated),a.num=1,a},re.inc=async e=>{let{vk:t,db:n,_:r}=ae,{key:a,value:i,expired_at:o}=e,s={},l=await t.baseDao.updateById({dbName:ne,id:a,dataJson:{value:r.inc(i),expired_at:o}});if(0==l){0===await re.count({_id:a})&&(s.id=await re.add(e),s.num=1,s.mode="add")}else s.num=l,s.mode="update";return s},re.list=async e=>{let{vk:t,db:n,_:r}=ae,a={},{pageIndex:i,pageSize:o,whereJson:s,sortArr:l}=e;return a=await t.baseDao.select({dbName:ne,pageIndex:i,pageSize:o,whereJson:s,sortArr:l}),a};var ie=re,oe={},se={init:function(e){oe=e}},le={specialUrlEncode:function(e){return(e=encodeURIComponent(e)).replace(/\+/g,"%20").replace(/\*/g,"%2A").replace(/%7E/g,"~")},sign:function(e,t){let{crypto:n}=oe;return n.createHmac("sha1",e).update(t).digest("base64")}};se.sendSms=async function(e){let{vk:t,config:n}=oe,{provider:r,appid:a,smsKey:i,smsSecret:o,signName:s,phone:l,templateId:d,data:c}=e,u={};if("aliyun"===r){let r=t.pubfn.getData(n,"vk.service.sms.aliyun");t.pubfn.isNotNull(r)&&(i||(e.smsKey=r.accessKeyId),o||(e.smsSecret=r.accessKeySecret),s||(e.signName=r.signName)),u=await se.sendSmsByAliyun(e)}else{if("unicloud"!==r)return{code:-1,msg:`暂不支持${r}供应商`};{let r=t.pubfn.getData(n,"uni.service.sms");t.pubfn.isNotNull(r)&&(i||(e.smsKey=r.smsKey),o||(e.smsSecret=r.smsSecret),s||(e.signName=r.signName)),u=await se.sendSmsByUnicloud(e)}}return u.requestParam={provider:r,phone:l},u},se.sendSmsByAliyun=async function(e){let{vk:t,config:n}=oe,{provider:r,appid:a,smsKey:i,smsSecret:o,signName:s,phone:l,templateId:d,data:c}=e,u={code:0,msg:""};try{if(t.pubfn.isNullOne(i,o))return{code:-1,msg:"阿里云短信配置错误,请检查!"};let e="https://dysmsapi.aliyuncs.com",n=t.pubfn.timeFormat(new Date,"yyyy-MM-ddThh:mm:ssZ",0),r=(new Date).getTime().toString().substring(7)+t.pubfn.random(30);"object"==typeof c&&(c=JSON.stringify(c));let a={SignatureMethod:"HMAC-SHA1",SignatureNonce:r,AccessKeyId:i,SignatureVersion:"1.0",Timestamp:n,Format:"json",Action:"SendSms",Version:"2017-05-25",PhoneNumbers:l,SignName:s,TemplateParam:c,TemplateCode:d};delete a.Signature;let f=[];for(let e in a)f.push(e);f.sort();let p=!1,g="";for(let e in f){let t=f[e];g+="&"+le.specialUrlEncode(t)+"="+le.specialUrlEncode(a[t])}g=g.substring(1);let m="GET&"+le.specialUrlEncode("/")+"&"+le.specialUrlEncode(g),h=le.sign(o+"&",m),b=le.specialUrlEncode(h),y="Signature="+b+"&"+g;p&&(console.log("\r\n随机数\r\n"),console.log(a.SignatureNonce),console.log("\r\n=========\r\n"),console.log(a.Timestamp),console.log("\r\n====sortedQueryString====\r\n"),console.log(g),console.log("\r\n=====stringToSign====\r\n"),console.log(m),console.log("\r\n=====sign====\r\n"),console.log(h),console.log("\r\n=====signature====\r\n"),console.log(b),console.log("\r\n=========\r\n"),console.log(e+"/?"+y));t.pubfn.urlStringToJson(y);let w=await t.request({url:`${e}?${y}`,method:"GET"});return u="OK"===w.Code?{code:0,msg:"ok",requestRes:w}:{code:-1,msg:w.Message,requestRes:w},u}catch(e){return{code:-1,msg:"短信发送失败",err:{message:e.message,stack:e.stack}}}},se.sendSmsByUnicloud=async function(e){let{provider:t,appid:n,smsKey:r,smsSecret:a,signName:i,phone:o,templateId:s,data:l}=e,d={code:0,msg:""};try{let e=await uniCloud.sendSms({smsKey:r,smsSecret:a,phone:o,templateId:s,data:l});d=0==e.code||0==e.errCode?{code:0,msg:"ok",requestRes:e}:{code:-1,msg:e.errMessage||e.errMsg,requestRes:e}}catch(e){return{code:-1,msg:"短信发送失败",err:{message:e.message,stack:e.stack}}}return d},se.sendSmsVerifyCode=async function(e){let t,{vk:n,config:r,uniID:a}=oe,{provider:i,phone:o,code:s,type:l,expiresIn:d=180}=e,c={code:0,msg:""};if("unicloud"===i){t=n.pubfn.getData(r,"uni.service.sms.templateId");let e=n.pubfn.getData(r,"uni.service.sms.codeExpiresIn");e&&(d=e);let a=n.pubfn.getData(r,"uni.service.sms.name"),l=Math.ceil(d/60).toString();c=await n.system.smsUtil.sendSms({provider:i,phone:o,templateId:t,data:{code:s,name:a,action:"身份验证",expMinute:l}})}else t=n.pubfn.getData(r,`vk.service.sms.${i}.templateCode.verifyCode`),c=await n.system.smsUtil.sendSms({provider:i,phone:o,templateId:t,data:{code:s}});return 0===c.code&&await a.setVerifyCode({mobile:o,code:s,expiresIn:d,type:l}),c};var de=se,ce={};ce.sysDao=ee,ce.globalDataDao=ie,ce.smsUtil=de,ce.init=function(e){let t=["sysDao","globalDataDao","smsUtil"];for(let n in t){let r=t[n];"function"==typeof ce[r].init&&ce[r].init(e)}};var ue=ce,fe={};fe.router=s,fe.md5=g,fe.baseDao=b,fe.request=y,fe.pubfn=E,fe.temporaryCache=J,fe.globalDataCache=F,fe.openapi=W,fe.formDataUtil=H,fe.system=ue,fe.requireCache={},fe.require=function(e){if(fe.requireCache&&fe.requireCache[e])return fe.requireCache[e];{const t=fe.unicloud.requireFn(fe.unicloud.baseDir+"/"+e);return fe.requireCache[e]=t,t}},fe.requireFn=function(e){try{return fe.unicloud.requireFn(e)}catch(e){let{message:t=""}=e;return void(-1==t.indexOf("Cannot find module")&&console.error(e))}},fe.use=function(e,t){for(let n in e)e[n]&&"function"==typeof e[n].init&&e[n].init(t),fe[n]=e[n]},fe.unicloud={},fe.init=function(e={}){if(fe.unicloud.requireFn=e.requireFn,e.configCenter||(e.configCenter=fe.requireFn("uni-config-center")),e.uniID||(e.uniID=fe.requireFn("uni-id")),e.uniPay||(e.uniPay=fe.requireFn("uni-pay")),e.middlewareService||(e.middlewareService=fe.requireFn("./middleware/index")),e.daoCenter||(e.daoCenter=fe.requireFn("./dao/index")),e.crypto||(e.crypto=fe.requireFn("crypto")),e.urlrewrite||(e.urlrewrite=fe.requireFn("./util/urlrewrite")),e.config||(e.config=e.configCenter({pluginId:"vk-unicloud"}).requireFile("index.js")),!e.config)throw new Error("配置文件:uniCloud/cloudfunctions/common/uni-config-center/vk-unicloud/index.js \n编译错误,请检查!");if(!e.db)try{e.db=uniCloud.database()}catch(e){}fe.vkPay=fe.requireFn("vk-uni-pay"),e.pubFun||(e.pubFun=fe.requireFn("./util/pubFunction")),e.pubFun&&(fe.myfn=e.pubFun),e.redis||(e.redis=fe.requireFn("vk-redis")),e.redis&&(fe.redisUtil=e.redis,fe.redis=e.redis.redis,fe.newRedis=e.redis.newRedis),fe.unicloud.configCenter=e.configCenter,fe.unicloud.config=e.config,fe.unicloud.uniID=e.uniID,fe.unicloud.uniPay=e.uniPay,fe.unicloud.db=e.db,fe.unicloud._=e.db.command,fe.unicloud.pubfn=fe.pubfn,fe.unicloud.middlewareService=e.middlewareService,fe.unicloud.pubFun=e.pubFun,fe.unicloud.customUtil=e.customUtil,fe.unicloud.baseDir=e.baseDir,fe.unicloud.crypto=e.crypto,fe.unicloud.urlrewrite=e.urlrewrite;const t={vk:fe,...fe.unicloud};fe.use({daoCenter:e.daoCenter,baseDao:fe.baseDao,openapi:fe.openapi,globalDataCache:fe.globalDataCache,system:fe.system},t)};var pe=fe;module.exports=pe; +"use strict";var e={regExpTest:function(e,t){let n=!1;if("string"==typeof e){new RegExp(e).test(t)&&(n=!0)}else if("object"==typeof e)for(let r=0;r{let{url:t,data:n={},util:r}=e,{uniID:a}=r,{need_user_info:i=!0}=n,o={code:-1,msg:""},s=0==t.indexOf("admin/");s&&(i=!0);let l=t.indexOf("/sys/")>-1,d=await a.checkToken(e.uniIdToken,{needPermission:l,needUserInfo:i});if(d.code&&d.code>0)return d;if(d.userInfo){let e=d.userInfo;e.permission=d.permission,delete e.token,delete e.password,o.userInfo=e}if(o.uid=d.uid,d.token&&(o.token=d.token,o.tokenExpired=d.tokenExpired),s){if(!o.userInfo)return{code:403,msg:"need_user_info必须为true"};{let e=o.userInfo.role||[];if(!o.userInfo.allow_login_background&&!e.includes("admin"))return{code:403,msg:"您无权限登录后台"}}}return o.code=0,o.msg="ok",o}};async function r(e={},t){let{vk:n,db:r,_:a}=t,{whereJson:i={},fieldJson:o={},justNeedID:s=!1}=e;s&&(o={permission_id:!0}),i.enable=!0;let l=[],d=await n.baseDao.select({dbName:"uni-id-permissions",pageIndex:1,pageSize:500,fieldJson:o,whereJson:i});if(s)for(let e=0;e{let{url:t,util:a}=e,{uniID:i,config:o,pubFun:s,vk:l,db:d,_:c}=a,u={code:-1,msg:""};const f=n;if(u=await f.main(e),0!==u.code)return u;if(!u.userInfo)return{code:403,msg:"请去除need_user_info:false"};if(u.userInfo.role||(u.userInfo.role=[]),u.userInfo.role.includes("admin"))return u;if(!u.userInfo.allow_login_background)return{code:403,msg:"您无权限登录后台"};let p=[];if(u.userInfo.role.includes("admin-lv3")){let e=await r({whereJson:{level:c.in([1,2,3])},justNeedID:!0},a);l.pubfn.isNotNull(e)&&(p=p.concat(e))}if(u.userInfo.role.includes("admin-lv2")){let e=await r({whereJson:{level:c.in([1,2])},justNeedID:!0},a);l.pubfn.isNotNull(e)&&(p=p.concat(e))}if(u.userInfo.role.includes("admin-lv1")){let e=await r({whereJson:{level:c.in([1])},justNeedID:!0},a);l.pubfn.isNotNull(e)&&(p=p.concat(e))}if(u.userInfo.role.includes("query-all")){let e=await r({whereJson:{curd_category:4,level:c.neq(4)},justNeedID:!0},a);l.pubfn.isNotNull(e)&&(p=p.concat(e))}let g=await async function(e,t){let{vk:n,db:r,_:a}=t,{role:i}=e;if(n.pubfn.isNull(i))return[];return(await n.baseDao.select({dbName:"uni-id-roles",whereJson:{role_id:a.in(i),enable:!0},fieldJson:{permission:!0}})).rows}({role:u.userInfo.role},a);for(let e in g){let{permission:t}=g[e];l.pubfn.isNotNull(t)&&(p=p.concat(t))}if(0==p.length)return{code:403,msg:"权限不足"};p=[...new Set(p)];let m=await r({whereJson:{permission_id:c.in(p),match_mode:c.in([1,2])}},a),h=!1;for(let e=0;e0}({myPermission:p,url:t},a)&&(h=!0)}return h?(u.code=0,u.msg="ok",u):{code:403,msg:"权限不足"}}}.main}];var i={onActionExecuting:async(e,n=[])=>{let r={code:403,msg:"access denied",filterStack:[]},{url:a}=e;for(let i in n){let o=n[i],{mode:s="onActionExecuting",enable:l=!0}=o;if(l&&"onActionExecuting"===s&&t.regExpTest(o.regExp,a)){e.filterResponse=r;let t=await o.main(e);if(t.filterId=o.id,r.filterStack.push(t),0!==t.code){r=t;break}r=Object.assign(r,t)}}return r},onActionExecuted:async(e,n=[],r)=>{let{url:a}=e;for(let i in n){let o=n[i],{mode:s,enable:l=!0}=o;if(l&&"onActionExecuted"===s&&t.regExpTest(o.regExp,a)){let t=await o.main(e,r);if(t){if(0!==t.code){r=t;break}r=Object.assign(r,t)}}}return r},onActionIntercepted:async(e,n=[],r)=>{let{url:a}=e;for(let i in n){let o=n[i],{mode:s,enable:l=!0}=o;if(l&&"onActionIntercepted"===s&&t.regExpTest(o.regExp,a)){let t=await o.main(e,r);if(t){if(0!==t.code){r=t;break}r=Object.assign(r,t)}}}return r},onActionError:async(e,n=[],r)=>{let{url:a}=e;for(let i in n){let o=n[i],{mode:s,enable:l=!0}=o;if(l&&"onActionError"===s&&t.regExpTest(o.regExp,a)){let t=await o.main(e,r);if(t){if(0!==t.code){r=t;break}r=Object.assign(r,t)}}}return r},getMiddleware:function(e){let t=[];if(e){let n=[...a,...e];n.sort((function(e,t){return e.index-t.index})),t=n.filter((e,t,r)=>{var a=[];return n.forEach((e,t)=>{a.push(e.id)}),a.indexOf(e.id)===t})}else t=a;return t}};async function o(e={}){let{code:t,msg:n,err:r,serviceParam:a,middlewareService:o}=e;console.error(n);let s={code:t,msg:n};return r&&(console.error(r.stack),s.err={message:r.message,stack:r.stack,code:r.code}),await i.onActionError(a,o,s)}process.env.TZ="Asia/Shanghai";var s=async function(e){let{event:t,context:n,vk:r}=e,{config:a,uniID:s,uniPay:l,db:d,middlewareService:c,pubFun:u,customUtil:f,crypto:p}=r.unicloud;if(r.pubfn.getData(a,"vk.system.serviceShutdown"))return{code:405,msg:r.pubfn.getData(a,"vk.system.serviceShutdownDescription")};let g={event:t,context:n},m=function(e,t){let n={};if(e.httpMethod){let{path:r=""}=e;if("/"===r[0]&&(r=r.substring(1)),r){let a,{urlrewrite:i={}}=t.unicloud,{rule:o}=i,s=t.pubfn.getData(i,"config.accessOnlyInRule"),l=!1;if(o)for(let e in o){let n=o[e],i=t.pubfn.regExpExecToTemplate(r,e,n);if(i){l=!0;let e=i.split("?");r=e[0],a=t.pubfn.urlStringToJson(e[1]);break}}if(!l&&s)return{mpserverlessComposedResponse:!0,statusCode:403,code:403,headers:{"content-type":"application/json"},body:JSON.stringify({code:403,msg:"access denied"})};if(n={data:{}},t.pubfn.isNotNull(a)&&(n.data=Object.assign(n.data,a)),e.queryStringParameters){let t=e.queryStringParameters;"string"==typeof t&&(t=JSON.parse(t)),n.data=Object.assign(n.data,t)}if(e.body){let r=e.body,a=e.headers&&e.headers["content-type"]?e.headers["content-type"]:"";if(a.indexOf("multipart/form-data;")>-1)r=t.formDataUtil.formParser(e),n.data=Object.assign(n.data,r);else{e.isBase64Encoded&&(r=Buffer.from(r,"base64").toString("utf-8"));try{"string"==typeof r&&(r=JSON.parse(r)),n.data=Object.assign(n.data,r)}catch(e){}try{"string"==typeof r&&a.indexOf("x-www-form-urlencoded")>-1&&(r=t.pubfn.urlStringToJson(r),"object"==typeof r&&(r=t.pubfn.string2Number(r),n.data=Object.assign(n.data,r)))}catch(e){}}}n.$url||(n.data.$url?n.$url=n.data.$url:n.$url=r),n.data.uni_id_token&&(n.uni_id_token=n.data.uni_id_token,delete n.data.uni_id_token)}else{if(e.queryStringParameters){let t=e.queryStringParameters;"string"==typeof t.data&&(t.data=JSON.parse(t.data)),n=Object.assign(n,t)}if(e.body){let t=e.body;e.isBase64Encoded&&(t=Buffer.from(t,"base64").toString("utf-8"));try{"string"==typeof t&&(t=JSON.parse(t)),n=Object.assign(n,t)}catch(e){}}}}else n=JSON.parse(JSON.stringify(e));n.data||(n.data={});n.uniIdToken||(n.uniIdToken=n.uni_id_token);return n.url=n.$url||"",n}(t,r),{url:h,data:b,uniIdToken:y}=m;if([403].indexOf(m.code)>-1)return m;if(h&&"function"==typeof h.trim&&(h=h.trim()),b&&(b.vk_appid&&(n.APPID=b.vk_appid),b.vk_platform&&(n.PLATFORM=b.vk_platform),r.pubfn.isNullOne(n.APPID,n.PLATFORM))){let e=r.pubfn.getData(a,"vk.context");r.pubfn.isNotNull(e)&&(n.APPID||(n.APPID=e.APPID),n.PLATFORM||(n.PLATFORM=e.PLATFORM),n.LOCALE||(n.LOCALE=e.LOCALE))}const w=s.createInstance({context:n});d.command.$=d.command.aggregate;let N={vk:r,config:a,pubFun:u,uniID:w,uniPay:l,db:d,_:d.command,$:d.command.aggregate,customUtil:f,crypto:p,env:{APPID:n.APPID,PLATFORM:n.PLATFORM}};try{uniCloud.vk=r,uniCloud.env=N.env}catch(e){}let _={url:h,data:b,uniIdToken:y,util:N,originalParam:g};const k=i.getMiddleware(c);let v,x,D;try{if(v=await i.onActionExecuting(_,k),0!==v.code)return await async function(e,t,n){try{n=await i.onActionIntercepted(e,t,n)}catch(n){return await o({code:500,msg:`云函数 ${e.url} 的中间件 onActionIntercepted 运行异常!`,err:n,serviceParam:e,middlewareService:t})}return n}(_,k,v);v.uid&&(b.uid=v.uid),_.filterResponse=v}catch(e){return await o({code:500,msg:`云函数 ${h} 的中间件 onActionExecuting 运行异常!`,err:e,serviceParam:_,middlewareService:k})}try{x=r.require("service/"+h)}catch(e){e||(e={});let{code:t,message:n=""}=e;return"MODULE_NOT_FOUND"==t&&n.indexOf("service/")>-1?await o({code:404,msg:`云函数 ${h} 不存在!`,serviceParam:_,middlewareService:k}):"MODULE_NOT_FOUND"==t&&n.indexOf("Cannot find module")>-1?await o({code:500,msg:n,err:e,serviceParam:_,middlewareService:k}):await o({code:500,msg:`云函数 ${h} 编译异常!`,err:e,serviceParam:_,middlewareService:k})}try{D=await async function(e={}){let{res:t,serviceParam:n,serviceMain:r}=e;t.uid&&(n.uid=t.uid);t.userInfo&&(n.userInfo=t.userInfo);let a=await r.main(n);t.token&&t.tokenExpired&&"object"==typeof a&&(a.vk_uni_token={token:t.token,tokenExpired:t.tokenExpired});return a}({res:v,serviceParam:_,serviceMain:x})}catch(e){e||(e={});let{code:t,message:n=""}=e;return"InternalServerError"==t&&n.indexOf("_id_ dup key")>-1?await o({code:500,msg:"vk.baseDao.add : _id不能重复添加",err:e,serviceParam:_,middlewareService:k}):0===n.indexOf("msg:")?await o({code:501,msg:n.substring(4),err:e,serviceParam:_,middlewareService:k}):0===n.indexOf("Cannot read property 'mp-weixin' of undefined")?await o({code:501,msg:"请先绑定微信",err:e,serviceParam:_,middlewareService:k}):n.indexOf("Response timeout for 10000ms")>-1?await o({code:502,msg:"timeout 请求超时,请重试!",err:e,serviceParam:_,middlewareService:k}):await o({code:500,msg:`云函数 ${h} 运行异常!`,err:e,serviceParam:_,middlewareService:k})}try{D=await i.onActionExecuted(_,k,D)}catch(e){return await o({code:500,msg:`云函数 ${h} 的中间件 onActionExecuted 运行异常!`,err:e,serviceParam:_,middlewareService:k})}return D};function l(e,t,n,r,a,i){return p((o=p(p(t,e),p(r,i)))<<(s=a)|o>>>32-s,n);var o,s}function d(e,t,n,r,a,i,o){return l(t&n|~t&r,e,t,a,i,o)}function c(e,t,n,r,a,i,o){return l(t&r|n&~r,e,t,a,i,o)}function u(e,t,n,r,a,i,o){return l(t^n^r,e,t,a,i,o)}function f(e,t,n,r,a,i,o){return l(n^(t|~r),e,t,a,i,o)}function p(e,t){var n=(65535&e)+(65535&t);return(e>>16)+(t>>16)+(n>>16)<<16|65535&n}var g=function(e){return function(e){for(var t="",n=0;n<4*e.length;n++)t+="0123456789abcdef".charAt(e[n>>2]>>n%4*8+4&15)+"0123456789abcdef".charAt(e[n>>2]>>n%4*8&15);return t}(function(e,t){e[t>>5]|=128<>>9<<4)]=t;for(var n=1732584193,r=-271733879,a=-1732584194,i=271733878,o=0;o>5]|=(255&e.charCodeAt(n/8))<500)return await h.selectAll(e);let d=await h.getSelectData(e),{result:c,hasMore:u,total:f,getCount:p,pageIndex:g,fieldJson:b}=d;return c=c.skip((g-1)*o).limit(o),t.pubfn.isNotNull(b)&&(c=c.field(b)),c.get().then(e=>{let t={};return p?(t.total=f,t.hasMore=u):(t.total=e.data?e.data.length:0,t.hasMore=t.total>=o),t.rows=e.data,t.code=0,t.msg="查询成功",t.pagination={pageIndex:g,pageSize:o},s&&(t.rows=t.rows[0]),l?t.rows:t})},findById:async function(e){let{vk:t,db:n,_:r}=m,{dbName:a,id:i,fieldJson:o,db:s}=e,l=(s||n).collection(a).doc(i);o&&(l=l.field(o));let d=await l.get();return"[object Array]"===Object.prototype.toString.call(d.data)?d.data[0]:d.data},findByWhereJson:async function(e){let{vk:t,db:n,_:r}=m,{dbName:a,whereJson:i,fieldJson:o,sortArr:s,db:l}=e,d=l||n;if(t.pubfn.isNotNull(i)){let e=d.collection(a).where(i);if(s)for(let t in s){let n=s[t],r=n.name,a=n.type;null!=a&&""!=a||(a="asc"),e=e.orderBy(r,a)}o&&(e=e.field(o));let t=await e.limit(1).get();if(t.data&&t.data.length>0)return t.data[0]}else console.error("whereJson条件不能为空");return null},count:async function(e){let t,{vk:n,db:r,_:a}=m,{dbName:i,whereJson:o,foreignDB:s,foreignKey:l,groupJson:d,lastWhereJson:c,db:u}=e,f=u||r;if(n.pubfn.isNotNull(s)||n.pubfn.isNotNull(d)){let e=f.collection(i).aggregate();return n.pubfn.isNotNull(o)&&e.match(o),n.pubfn.isNotNull(d)&&e.group(d),n.pubfn.isNotNull(s)&&(e=h.addForeignDB({foreignDB:s,foreignKey:l,result:e})),n.pubfn.isNotNull(c)&&(e=e.match(c)),e=await e.count("total").end(),e.data[0]?e.data[0].total:0}return t=n.pubfn.isNotNull(o)?await f.collection(i).where(o).count():await f.collection(i).count(),t.total},getSelectData:async function(e){let{vk:t,db:n,_:r}=m,{dbName:a,whereJson:i,pageIndex:o=1,pageSize:s=10,getCount:l=!1,db:d}=e;s<0&&(o=1,s=999999999,l=!0);let c=d||n,u=e.sortArr,f=e.fieldJson,p=0,g=!1;if(l){let e;e=t.pubfn.isNotNull(i)?await c.collection(a).where(i).count():await c.collection(a).count(),p=e.total,o1e3&&(l=1e3));let d=await h.getSelectData(e),{result:c,hasMore:u,total:f,getCount:p,pageIndex:g,pageSize:b,fieldJson:y}=d;b>0&&!f&&!p&&(f=b),r.pubfn.isNotNull(y)&&(c=c.field(y));let w={};if(p&&0===f)w={data:[]};else{let t=f;bi&&(n=i-t);let o=c.skip(t).limit(n).get();r.push(o)}try{w=(await Promise.all(r)).reduce((e,t)=>({data:e.data.concat(t.data),errMsg:e.errMsg}))}catch(t){throw console.error("vk.baseDao.select-异常",e,t),new Error("msg:vk.baseDao.select-异常")}}let N={};return N.total=p?f:w.data?w.data.length:0,N.hasMore=u,N.rows=w.data,N.code=0,N.msg="查询成功",N.pagination={pageIndex:g,pageSize:b},o&&(N.rows=N.rows[0]),s?N.rows:N},sum:async function(e){let{vk:t,db:n,_:r}=m,{dbName:a,fieldName:i,whereJson:o,db:s}=e,l=s||n;const d=l.command.aggregate;let c=l.collection(a).aggregate();t.pubfn.isNotNull(o)&&c.match(o),c.group({_id:null,num:d.sum("$"+i)});let u=await c.end();return u.data&&u.data[0]?u.data[0].num:0},avg:async function(e){let{vk:t,db:n,_:r}=m,{dbName:a,fieldName:i,whereJson:o,db:s}=e,l=s||n;const d=l.command.aggregate;let c=l.collection(a).aggregate();t.pubfn.isNotNull(o)&&c.match(o),c.group({_id:null,num:d.avg("$"+i)});let u=await c.end();return u.data&&u.data[0]?u.data[0].num:null},max:async function(e){let{vk:t,db:n,_:r}=m,{dbName:a,fieldName:i,whereJson:o,db:s}=e,l=s||n;const d=l.command.aggregate;let c=l.collection(a).aggregate();t.pubfn.isNotNull(o)&&c.match(o),c.group({_id:null,num:d.max("$"+i)});let u=await c.end();return u.data&&u.data[0]?u.data[0].num:null},min:async function(e){let{vk:t,db:n,_:r}=m,{dbName:a,fieldName:i,whereJson:o,db:s}=e,l=s||n;const d=l.command.aggregate;let c=l.collection(a).aggregate();t.pubfn.isNotNull(o)&&c.match(o),c.group({_id:null,num:d.min("$"+i)});let u=await c.end();return u.data&&u.data[0]?u.data[0].num:null},sample:async function(e){let{vk:t,db:n,_:r}=m,{dbName:a,whereJson:i,size:o,fieldJson:s,db:l}=e,d=l||n;d.command.aggregate;let c=d.collection(a).aggregate();return t.pubfn.isNotNull(i)&&c.match(i),c.sample({size:o}),t.pubfn.isNotNull(s)&&c.project(s),(await c.end()).data},selects:async function(e){let{vk:t,db:n,_:r}=m;if(t.pubfn.isNotNull(e.treeProps))return await h.tree(e);let{db:a,dbName:i,foreignKey:o="_id",whereJson:s={},pageIndex:l=1,pageSize:d=10,getCount:c=!1,getOne:u=!1,getMain:f=!1,sortArr:p=[],fieldJson:g={},groupJson:b,foreignDB:y=[],lastWhereJson:w,addFields:N}=e,_=a||n;-1==d&&(l=1,d=999999999,c=!1),u&&(d=1,c=!1);let k=0,v=!1;if(c){if(t.pubfn.isNotNull(w)){let e=_.collection(i).aggregate();t.pubfn.isNotNull(s)&&e.match(s),t.pubfn.isNotNull(b)&&e.group(b),t.pubfn.isNotNull(y)&&(e=h.addForeignDB({foreignDB:y,foreignKey:o,result:e})),e=e.match(w),e=await e.count("total").end(),k=e.data[0]?e.data[0].total:0}else if(t.pubfn.isNotNull(b)){let e;e=t.pubfn.isNotNull(s)?await _.collection(i).aggregate().match(s).group(b).count("total").end():await _.collection(i).aggregate().group(b).count("total").end(),k=e.data[0]?e.data[0].total:0}else{let e;e=t.pubfn.isNotNull(s)?await _.collection(i).where(s).count():await _.collection(i).count(),k=e.total}l=d),x.rows=T,x.code=0,x.msg="查询成功",x.pagination={pageIndex:l,pageSize:d},u&&(x.rows=x.rows[0]),f?x.rows:x},listToObjectByLimit1:function(e){let{vk:t,db:n,_:r}=m,{list:a,foreignDB:i}=e;if(t.pubfn.isNotNull(i))for(let e in a)for(let n in i){let{as:r,limit:o,foreignDB:s,dbName:l}=i[n];r||(r=l),t.pubfn.isNotNull(s)&&(a[e][r]=h.listToObjectByLimit1({list:a[e][r],foreignDB:s})),1===o&&(a[e][r]&&a[e][r].length>0?a[e][r]=a[e][r][0]:a[e][r]={})}return a},addForeignDB:function(e){let{vk:t,db:n,_:r}=m,{foreignDB:a,foreignKey:i,result:o}=e;const s=r.aggregate;for(let e in a){let n,l,{dbName:d,foreignKey:c,localKey:u,localKeyType:f="",foreignKeyType:p="",as:g,limit:m,whereJson:b,fieldJson:y,sortArr:w,foreignDB:N,addFields:_}=a[e];g||(g=d),n=t.pubfn.isNotNull(u)?u:"object"==typeof i?i[e]:i,l="array"===f.toLowerCase()?[s.cond({if:s.isArray("$$foreignKey"+h.getForeignKeyName(n)),then:s.in(["$"+c,"$$foreignKey"+h.getForeignKeyName(n)]),else:s.eq(["$"+c,"$$foreignKey"+h.getForeignKeyName(n)])})]:"array"===p.toLowerCase()?[s.cond({if:s.isArray("$"+c),then:s.in(["$$foreignKey"+h.getForeignKeyName(n),"$"+c]),else:s.eq(["$"+c,"$$foreignKey"+h.getForeignKeyName(n)])})]:[s.eq(["$"+c,"$$foreignKey"+h.getForeignKeyName(n)])];let k=s.pipeline().match(r.expr(s.and(l)));if(t.pubfn.isNotNull(b)&&(k=k.match(b)),t.pubfn.isNotNull(w)){let e={};for(let t in w){let n=w[t],r=n.name,a=n.type;a=null==a||""==a||"asc"==a?1:-1,e[r]=a}k=k.sort(e)}m&&(k=k.limit(m)),t.pubfn.isNotNull(N)&&(k=h.addForeignDB({foreignDB:N,result:k})),t.pubfn.isNotNull(y)&&(y=h.foreignDBToProject({fieldJson:y,foreignDB:N}),k=k.project(y)),t.pubfn.isNotNull(_)&&(k=k.addFields(_)),k=k.done();let v={};v["foreignKey"+h.getForeignKeyName(n)]="$"+n;let x={from:d,let:v,pipeline:k,as:g};o=o.lookup(x)}return o},getForeignKeyName:function(e){return e.replace(new RegExp("\\.","g"),"__")},addWhereJson:function(e,t={},n="whereJson"){let{vk:r,db:a,_:i}=m,{formData:o,columns:s}=e;for(let e in s){let a,l=s[e],{key:d,mode:c,defaultValue:u,type:f="",lastWhereJson:p,auxiliary:g=!0,trim:m=!0,isNumber:h=!1}=l;if("lastWhereJson"===n&&!p)continue;if("lastWhereJson"!==n&&p)continue;let b=d;if(r.pubfn.isNotNull(l.fieldName)&&(b=l.fieldName),a=r.pubfn.isNotNull(l.value)?l.value:o[d],r.pubfn.isNull(a)&&r.pubfn.isNotNull(u)&&(a=u),r.pubfn.isNull(c)&&(c=["address","province","city","area"].indexOf(f)>-1?"address":"[object Array]"===Object.prototype.toString.call(a)&&a.length>=2?"[]":"="),r.pubfn.isNotNull(a))if("string"==typeof a&&m&&"function"==typeof a.trim&&(a=a.trim()),h&&!isNaN(a)&&(a=Number(a)),"custom"===c);else if("%%"===c)try{t[b]=new RegExp(a)}catch(e){}else if("%*"===c)try{t[b]=new RegExp("^"+a)}catch(e){}else if("*%"===c)try{t[b]=new RegExp(a+"$")}catch(e){}else if(">"===c)t[b]=t[b]?t[b].gt(a):i.gt(a);else if(">="===c)t[b]=t[b]?t[b].gte(a):i.gte(a);else if("<"===c)t[b]=t[b]?t[b].lt(a):i.lt(a);else if("<="===c)t[b]=t[b]?t[b].lte(a):i.lte(a);else if("in"===c)t[b]=i.in(a);else if("nin"===c)t[b]=i.nin(a);else if("!="===c)t[b]=i.neq(a);else if("[]"===c)t[b]=i.gte(a[0]).lte(a[1]);else if("[)"===c)t[b]=i.gte(a[0]).lt(a[1]);else if("(]"===c)t[b]=i.gt(a[0]).lte(a[1]);else if("()"===c)t[b]=i.gt(a[0]).lt(a[1]);else if("address"===c){let e={};a.province&&a.province.code&&(e["province.code"]=a.province.code),a.city&&a.city.code&&(e["city.code"]=a.city.code),a.area&&a.area.code&&(e["area.code"]=a.area.code),t[b]=e}else t[b]=g?"___empty-array___"===a?[]:"___empty-object___"===a?{}:"___non-existent___"===a?i.exists(!1):"___existent___"===a?i.exists(!0):a:a}return t},addLastWhereJson:function(e,t={}){return h.addWhereJson(e,t,"lastWhereJson")},getTableData:async function(e){let{vk:t,db:n,_:r,config:a}=m,{db:i,dbName:o,data:s,getCount:l=!0,whereJson:d,fieldJson:c,sortArr:u,treeProps:f,groupJson:p,foreignKey:g,foreignDB:b,lastWhereJson:y}=e,{pageIndex:w,pageSize:N,pagination:_,sortRule:k,formData:v,columns:x}=s;_&&(w=_.pageIndex,N=_.pageSize);let D={},T={},S=[],A={};if(t.pubfn.isNotNull(u))S=u;else{let e=t.pubfn.getData(a,"vk.db.unicloud.getTableData.sortArr");t.pubfn.isNotNull(e)?S=e:S.push({name:"_id",type:"desc"})}return t.pubfn.isNotNull(k)&&(S=k),T=h.addWhereJson(s),A=h.addLastWhereJson(s),t.pubfn.isNotNull(d)&&(d.operator&&d.operands&&["or","and"].indexOf(d.operator)>-1?T=r.and([T,d]):t.pubfn.objectAssign(T,d)),t.pubfn.isNotNull(c)&&t.pubfn.objectAssign(D,c),t.pubfn.isNotNull(y)&&t.pubfn.objectAssign(A,y),t.pubfn.isNullAll(b,p,f)?await t.baseDao.select({db:i,dbName:o,getCount:l,pageIndex:w,pageSize:N,fieldJson:D,whereJson:T,sortArr:S}):await t.baseDao.selects({db:i,dbName:o,foreignKey:g,getCount:l,pageIndex:w,pageSize:N,whereJson:T,fieldJson:D,sortArr:S,treeProps:f,groupJson:p,foreignDB:b,lastWhereJson:A})},startTransaction:async function(e){let{vk:t,db:n,_:r}=m;return await n.startTransaction()},rollbackTransaction:async function(e){let{db:t,msg:n="【异常】操作失败",tips:r="事务已回滚。",err:a={}}=e;console.error("transaction error",a);let i={code:-1,msg:n,tips:r};await t.rollback();let o={message:a.message,stack:a.stack};try{o.body=JSON.parse(a.message),"object"==typeof o.body&&void 0!==o.body.code&&(o.body.msg,1)&&(i.msg=o.body.msg)}catch(e){}return console.error("transaction errJson",o),i.err=o,i},group:async function(e){let{vk:t,db:n,_:r}=m,{dbName:a,whereJson:i,groupJson:o,sortArr:s,pageIndex:l=1,pageSize:d=10,getCount:c=!1,lookupJson:u,db:f}=e,p=f||n;d<=0&&(d=999999999);r.aggregate;let g,h=p.collection(a).aggregate();if(t.pubfn.isNotNull(i)&&(h=h.match(i)),t.pubfn.isNotNull(o)&&(h=h.group(o)),t.pubfn.isNotNull(s)){let e={};for(let t in s){let n=s[t],r=n.name,a=n.type;a=null==a||""==a||"asc"==a?1:-1,e[r]=a}h=h.sort(e)}h=h.skip((l-1)*d).limit(d),t.pubfn.isNotNull(u)&&(g=u.returnObject,delete u.returnObject,h=h.lookup(u)),h=await h.end();let b,y=h.data;if(g)for(let e in y)y[e][u.as]=y[e][u.as][0];let w=!1;if(c){let e=p.collection(a).aggregate();t.pubfn.isNotNull(i)&&(e=e.match(i)),t.pubfn.isNotNull(o)&&(e=e.group(o));let n=await e.count("total").end();b=n.data[0]?n.data[0].total:0,l=d;return{hasMore:w,total:b,rows:y,code:0,key:1,pageIndex:l,pageSize:d}},tree:async function(e){let{vk:t,db:n,_:r}=m,{dbName:a,whereJson:i={},pageIndex:o=1,pageSize:s=10,getCount:l=!1,sortArr:d=[],fieldJson:c={},lastWhereJson:u,treeProps:f={}}=e;e.foreignDB||(e.foreignDB=[]);let{id:p="_id",parent_id:g="parent_id",children:b="children",level:y=10,limit:w=500}=f;if(y<1||y>20)throw new Error("msg:treeProps.level的范围必须在[1,20]");delete e.treeProps,e.whereJson||(e.whereJson={[g]:null}),e.foreignDB.unshift({dbName:a,localKey:p,foreignKey:g,as:b,limit:w,whereJson:f.whereJson,fieldJson:f.fieldJson||e.fieldJson,sortArr:f.sortArr,foreignDB:t.pubfn.copyObject(e.foreignDB)});let N=t.pubfn.copyObject(e.foreignDB);for(let n=1;n{"[object object]"===Object.prototype.toString.call(e.content)&&(e.content=JSON.stringify(e.content)),void 0===e.dataType&&(e.dataType="json"),"default"!=e.dataType&&""!==e.dataType||delete e.dataType,e.useContent&&(e.content=JSON.stringify(e.data)),e.method||(e.method="POST"),void 0===e.headers&&void 0!==e.header&&(e.headers=e.header);let t=await uniCloud.httpclient.request(e.url,e);return!e.needOriginalRes&&t&&t.data?t.data:t},w={formValidateItem:function(e,t,n){let r={code:0,msg:"ok"};for(let a in n){let i=n[a];if(void 0===e[t]&&i.required){r={type:"undefined",code:-1,msg:"字段:"+t+" 名称错误,请检查!",key:t,value:e[t]};break}if(i.required&&(null==e[t]||null==e[t]||""===e[t]||0==e[t].length)){r={type:"required",code:-1,msg:i.message,key:t,value:e[t]};break}if(i.type&&void 0!==e[t]){if(Object.prototype.toString.call(e[t]).toLowerCase().toLowerCase()!==`[object ${i.type}]`.toLowerCase()){r={type:"type",code:-1,msg:i.message,key:t,value:e[t]};break}}if(i.len&&e[t].length!=i.len){r={type:"len",code:-1,msg:i.message,key:t,value:e[t]};break}if(i.min)if(i.type&&"number"==i.type){if(e[t]i.max){r={type:"max",code:-1,msg:i.message,key:t,value:e[t]};break}}else if(e[t].length>i.max){r={type:"max",code:-1,msg:i.message,key:t,value:e[t]};break}if("function"==typeof i.validator){let n=i.validator(i,e[t],(function(e){return e}));if(void 0!==n&&!0!==n){r={type:"validator",code:-1,msg:i.message,key:t,value:e[t]};break}}}return r}};function N(e){return JSON.parse(JSON.stringify(e))}var _={};function k(e){let t=[];for(let n=0;n0&&(n=_.treeToArrayFn(d[o],t,n,d[a])),s&&delete d[o]}return n},_.arrayToTree=function(e,t){let n=N(e),{id:r="_id",parent_id:a="parent_id",children:i="children",deleteParentId:o=!1,need_field:s}=t,l=[],d={};for(let e=0;e0&&a>0){const e=60*(new Date).getTimezoneOffset()*1e3+60*t*60*1e3;let i=new Date(r,a,0).getDate();n.startTime=new Date(`${r}/${a}/1`).getTime()-e,n.endTime=new Date(`${r}/${a}/${i}`).getTime()+86399999-e}return n},getDayOffsetStartAndEnd:function(e=0,t,n=8){let r,a={};"string"!=typeof t||isNaN(t)||(t=Number(t)),t?"number"==typeof t?(10==t.toString().length&&(t*=1e3),r=new Date(t)):r=t:r=new Date;const i=60*r.getTimezoneOffset()*1e3+60*n*60*1e3;r=new Date(r.getTime()+864e5*e);let o=x.getFullTime(r,2);return a.startTime=new Date(`${o.year}/${o.month}/${o.day}`).getTime()-i,a.endTime=new Date(`${o.year}/${o.month}/${o.day}`).getTime()+86399999-i,a},getMonthOffsetStartAndEnd:function(e=0,t,n=8){let r,a={};"string"!=typeof t||isNaN(t)||(t=Number(t)),t?"number"==typeof t?(10==t.toString().length&&(t*=1e3),r=new Date(t)):r=t:r=new Date;const i=60*r.getTimezoneOffset()*1e3+60*n*60*1e3;let o=x.getFullTime(r,2),s=o.month+e,l=o.year;s>12?(l+=Math.floor(s/12),s=Math.abs(s)%12):s<=0&&(l=l-1-Math.floor(Math.abs(s)/12),s=12-Math.abs(s)%12);let d=new Date(l,s,0).getDate();return a.startTime=new Date(`${l}/${s}/1`).getTime()-i,a.endTime=new Date(`${l}/${s}/${d}`).getTime()+86399999-i,a},getYearOffsetStartAndEnd:function(e=0,t,n=8){let r,a={};"string"!=typeof t||isNaN(t)||(t=Number(t)),t?"number"==typeof t?(10==t.toString().length&&(t*=1e3),r=new Date(t)):r=t:r=new Date;const i=60*r.getTimezoneOffset()*1e3+60*n*60*1e3;let o=x.getFullTime(r,2).year+e;return a.startTime=new Date(o+"/1/1").getTime()-i,a.endTime=new Date(o+"/12/31").getTime()+86399999-i,a},isLeapYear:function(e){if(void 0===e){let{now:t}=x.getCommonTime();e=t.year}else if("object"==typeof e){let{now:t}=x.getCommonTime(e);e=t.year}return e%4==0&&e%100!=0||e%400==0},isQingming:function(e=new Date){let{now:t}=x.getCommonTime(e),{year:n,month:r,day:a}=t,i=!1;return x.isLeapYear(n)||x.isLeapYear(n-1)?4===r&&4===a&&(i=!0):4===r&&5===a&&(i=!0),i},getOffsetTime:function(e=new Date,t){let n="number"==typeof e?new Date(e):e,r=t.year||t.y,a=t.month||t.m,i=t.day||t.d,o=t.hours||t.hh,s=t.minutes||t.mm,l=t.seconds||t.ss,{mode:d="after"}=t;return"before"==d&&(r*=-1,a*=-1,i*=-1,o*=-1,s*=-1,l*=-1),r&&(n=n.setFullYear(n.getFullYear()+r),n=new Date(n)),a&&(n=n.setMonth(n.getMonth()+a),n=new Date(n)),i&&(n=n.setDate(n.getDate()+i),n=new Date(n)),o&&(n=n.setHours(n.getHours()+o),n=new Date(n)),s&&(n=n.setMinutes(n.getMinutes()+s),n=new Date(n)),l&&(n=n.setSeconds(n.getSeconds()+l),n=new Date(n)),n.getTime()}},D=x,T={formValidate:function(e={}){let t={code:0,msg:"ok"},{data:n,rules:r}=e;if(r)for(let e in r){let a=r[e];if(t=w.formValidateItem(n,e,a),0!=t.code)break}return t}};T.treeUtil=v,T.timeUtil=D,T.sleep=e=>new Promise(t=>setTimeout(t,e)),T.timeFormat=T.timeUtil.timeFormat,T.getFullTime=T.timeUtil.getFullTime,T.getCommonTime=T.timeUtil.getCommonTime,T.getOffsetTime=T.timeUtil.getOffsetTime,T.getWeekStartAndEnd=T.timeUtil.getWeekStartAndEnd,T.getDayOffsetStartAndEnd=T.timeUtil.getDayOffsetStartAndEnd,T.getMonthOffsetStartAndEnd=T.timeUtil.getMonthOffsetStartAndEnd,T.getYearOffsetStartAndEnd=T.timeUtil.getYearOffsetStartAndEnd,T.getMonthStartAndEnd=T.timeUtil.getMonthStartAndEnd,T.validator=function(e){return function(t,n,r){let a=T.test(n,e);return"function"!=typeof r||!a&&n?r(!1):void r()}},T.test=function(e,t){switch(t){case"mobile":return new RegExp(/^1[3|4|5|6|7|8|9][0-9]{9}$/).test(e);case"tel":return new RegExp(/^(0\d{2,3}-\d{7,8})(-\d{1,4})?$/).test(e);case"card":return new RegExp(/(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/).test(e);case"mobileCode":return new RegExp(/^[0-9]{6}$/).test(e);case"username":return new RegExp(/^[a-zA-Z]([-_a-zA-Z0-9]{5,17})$/).test(e);case"pwd":case"password":return new RegExp(/^([a-zA-Z0-9_@]){6,18}$/).test(e);case"payPwd":return new RegExp(/^[0-9]{6}$/).test(e);case"postal":return new RegExp(/[1-9]\d{5}(?!\d)/).test(e);case"QQ":return new RegExp(/^[1-9][0-9]{4,9}$/).test(e);case"email":return new RegExp(/^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$/).test(e);case"money":return new RegExp(/^\d*(?:\.\d{0,2})?$/).test(e);case"URL":return new RegExp(/(http|ftp|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?/).test(e);case"IP":return new RegExp(/^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$/).test(e);case"date":return new RegExp(/^[1-9]\d{3}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])$/).test(e);case"time":return new RegExp(/^(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d$/).test(e);case"dateTime":return new RegExp(/^[1-9]\d{3}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])\s+(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d$/).test(e);case"english+number":return new RegExp(/^[a-zA-Z0-9]*$/).test(e);case"english+number+_":return new RegExp(/^[a-zA-Z0-9_]*$/).test(e);case"number":return new RegExp(/^[0-9]*$/).test(e);case"english":return new RegExp(/^[a-zA-Z]+$/).test(e);case"chinese":return new RegExp(/^[\u4e00-\u9fa5]+$/gi).test(e);case"lower":return new RegExp(/^[a-z]+$/).test(e);case"upper":return new RegExp(/^[A-Z]+$/).test(e);case"HTML":return new RegExp(/<("[^"]*"|'[^']*'|[^'">])*>/).test(e);default:return!0}},T.checkStr=T.test,T.priceFilter=function(e,t=""){return T.isNull(e)?t:isNaN(e)?e:("string"==typeof e&&(e=parseFloat(e)),(e/100).toFixed(2))},T.priceLeftFilter=function(e){let t="";return e&&(t=T.priceFilter(e).split(".")[0]),t},T.priceRightFilter=function(e){let t="";return e&&(t=T.priceFilter(e).split(".")[1]),t},T.percentageFilter=function(e,t=!0,n=""){return T.isNull(e)?n:(isNaN(e)||("string"==typeof e&&(e=parseFloat(e)),e=parseFloat((100*e).toFixed(2)),t&&(e+="%")),e)},T.discountFilter=function(e,t=!0,n=""){return T.isNull(e)?n:isNaN(e)?e:("string"==typeof e&&(e=parseFloat(e)),(e=parseFloat((10*e).toFixed(2)))>10?"折扣不可以大于原价":10==e?"原价":0==e?"免费":e<0?"折扣不可以小于0":(t&&(e+=" 折"),e))},T.objectAssign=function(e,t){return Object.assign(e,t)},T.copyObject=function(e){return void 0!==e?JSON.parse(JSON.stringify(e)):e},T.deepClone=function(e){if([null,void 0,NaN,!1].includes(e))return e;if("object"!=typeof e&&"function"!=typeof e)return e;let t="[object Array]"===Object.prototype.toString.call(e)?[]:{};for(let n in e)e.hasOwnProperty(n)&&(t[n]="object"==typeof e[n]?T.deepClone(e[n]):e[n]);return t},T.formAssign=function(e,t){let n=T.copyObject(e);return T.objectAssign(n,t)},T.arr_concat=function(e,t,n){n||(n="id");var r=e.concat(t),a=[];if(-1!=n){var i=[];for(var o in r)-1==i.indexOf(r[o][n])&&(i.push(r[o][n]),a.push(r[o]))}else a=r;return a},T.getData=function(e,t,n){let r=JSON.parse(JSON.stringify(e));t=t.replace(/\s+/g,"")+".";let a="";for(let e=0;ee[t])},T.random=function(e,t,n){let r;if(T.isNull(n))r=T.randomFn(e,t);else{let a=0,i=1e5;do{a++,r=T.randomFn(e,t)}while(n.indexOf(r)>-1&&ae){n+="0123456789"[r[e].charCodeAt()%10]}else n="0"+n;return n},T.hidden=function(e="",t=0,n=0){let r=e.length-t-n,a="";for(let e=0;e-1&&(n=!0);return n},T.isArray=function(e){return"[object Array]"===Object.prototype.toString.call(e)},T.isObject=function(e){return"[object Object]"===Object.prototype.toString.call(e)},T.calcFreights=function(e,t){let{first_weight:n,first_weight_price:r,continuous_weight:a,continuous_weight_price:i,max_weight:o=1e8}=e,s=0,l=0,d=o,c=!1,u=0;for(;t>0;)c?(u++,t-=a,d-=a):(c=!0,l++,d=o,t-=n,d-=n),d<=0&&(c=!1);return s=l*r+i*u,s},T.getNewObject=function(e,t){let n=T.copyObject(e),r={};if(t&&t.length>0)for(let e in t){let a=t[e];T.isNotNull(n[a])&&(r[a]=n[a])}else r=n;return r},T.deleteObjectKeys=function(e,t=[]){var n={};if(e)for(let r in e)-1==t.indexOf(r)&&(n[r]=e[r]);return n},T.arrayToTree=T.treeUtil.arrayToTree,T.treeToArray=T.treeUtil.treeToArray,T.wildcardTestOne=function(e,t){if(!t)return!1;let n=t.replace(new RegExp("\\*"),"(.*)"),r=0!==t.indexOf("*")?"^":"",a="*"!==t[t.length-1]?"$":"";return new RegExp(r+n+a).test(e)},T.wildcardTest=function(e,t){let n=0;if("string"==typeof t)T.wildcardTestOne(e,t)&&n++;else if("object"==typeof t)for(let r=0;r0?d=i+"天":o>0?d=o+"小时":s>0?d=s+"分钟":l>0&&(d=l+"秒"),d+=t},T.dateDiff2=function(e,t="1秒"){if(!e)return"";"string"!=typeof e||isNaN(e)||(e=Number(e)),"number"==typeof e&&(10==e.toString().length&&(e*=1e3),e=new Date(e),e=T.getFullTime(e)),"string"==typeof e&&(e=e=e.replace("T"," "),e=new Date(e.replace(/-/g,"/")));var n=new Date,r=864e5,a=36e5,i=e.getTime()-n.getTime(),o=Math.floor(i/r),s=Math.floor(i%r/a),l=Math.floor(i%r%a/6e4),d=Math.round(i%r%a%6e4/1e3),c=t;return o>0?c=o+"天":s>0?c=s+"小时":l>0?c=l+"分钟":d>0&&(c=d+"秒"),c},T.numStr=function(e){"string"==typeof e&&(e=parseFloat(e));var t=e;if(e<1e3)t=e;else if(e<1e4){t=Math.floor(e/100)/10+"千"}else if(e<1e6){t=Math.floor(e/1e3)/10+"万"}else if(e<1e7){t=Math.floor(e/1e6)+"百万"}else if(e<1e8){t=Math.floor(e/1e7)+"千万"}else if(e>=1e8){t=Math.floor(e/1e7)/10+"亿"}return t},T.calcSize=function(e=0,t,n,r=2,a="auto"){let i=0,o="";if((e=parseFloat(e))O(e,t)))}return e}T.snake2camel=function(e){return e.replace(S,(e,t)=>t?t.toUpperCase():"")},T.camel2snake=function(e){return e.replace(A,e=>"_"+e.toLowerCase())},T.snake2camelJson=function(e){return O(e,"snake2camel")},T.camel2snakeJson=function(e){return O(e,"camel2snake")},T.string2Number=function(e,t={}){switch(Object.prototype.toString.call(e).slice(8,-1).toLowerCase()){case"string":if(e&&!isNaN(e)){let{mobile:n=!0,idCard:r=!0,startFrom0:a=!0,maxLength:i=14}=t;return e.length>i||(n&&T.test(e,"mobile")||r&&T.test(e,"card")||a&&e.length>1&&0===e.indexOf("0")&&1!==e.indexOf("."))?e:Number(e)}return e;case"object":const n=Object.keys(e);for(let t=0;t-1){var o=a.indexOf('"',i),s=a.substring(i,o);if(o>i){var l=a.indexOf("---",o),d=a.substring(o+1,l).trim();n[s]=d}}}return n},T.getPlatform=function(e){e||(e=uniCloud.$context);let t=e.PLATFORM;return"h5"===t&&e.CLIENTUA.toLowerCase().indexOf("micromessenger")>-1&&(t="h5-weixin"),t},T.batchRun=async function(e){let{main:t,data:n=[],concurrency:r=100}=e,a=n.length,i=[];if(0==n.length)return{stack:i,total:a};if(1===r){for(let e=0;e=a)break;let l=t(n[s],s);e.push(l)}try{await Promise.all(e).then(e=>{i=i.concat(e)})}catch(e){console.error(e)}}return{stack:i,total:a}}};var E=T,I={},$={};I.get=function(e){let t,n=$[e];if(n){let{value:r,expired:a}=n;I.isExpired(e)?delete $[e]:t=r}return t},I.set=function(e,t,n=0){let r={value:t,expired:n>0?(new Date).getTime()+1e3*n:0};$[e]=r},I.del=function(e){delete $[e]},I.clear=function(e){if(e)for(let t in $)0==t.indexOf(e)&&delete $[t];else $={}},I.isExpired=function(e){let t=!0,n=$[e];return n&&(0==n.expired||n.expired>(new Date).getTime())&&(t=!1),t},I.getAll=function(e){let t={};if(e)for(let n in $)0==n.indexOf(e)&&(t[e]=$[e]);else t=$;for(let e in t)I.isExpired(e)&&(delete t[e],delete $[e]);return t};var J=I,C={},M={},B={};C.init=function(e){B=(M=e).vk.system.globalDataDao},C.get=async function(e,t=0,n,r=!0){return"function"==typeof n?C.autoGet(e,t,n,r):C._get(e)},C.autoGet=async function(e,t=0,n,r=!0){let a,{vk:i}=M;try{a=await C._get(e),i.pubfn.isNull(a)&&"function"==typeof n&&(a=await n(),void 0!==a&&r&&await i.globalDataCache.set(e,a,t))}catch(e){return}return a},C._get=async function(e){let t;try{let n=await B.find(e);if(n){let{value:r,expired_at:a}=n;C.isExpired(n)?await C.del(e):t=r}}catch(e){return}return t},C.set=async function(e,t,n=0){let r;e&&void 0!==e.key&&void 0!==e.value?(r=e.key,t=e.value,n=e.second):r=e;let a={code:0,msg:"ok"};try{if(!r)return{code:-1,msg:"key值不能为空"};let e=n>0?(new Date).getTime()+1e3*n:0;a=await B.set({key:r,value:t,expired_at:e})}catch(e){return console.error(e),{code:-1,msg:"异常"}}return a},C.del=async function(e){await B.del(e)},C.clear=async function(e){if(e)return await B.deleteByWhere({key:new RegExp("^"+e)})},C.list=async function(e){return await B.list(e)},C.count=async function(e){return await B.count(e)},C.isExpired=function(e){let t=!0;return e&&(!e.expired_at||0==e.expired_at||e.expired_at>(new Date).getTime())&&(t=!1),t},C.inc=async function(e,t=1,n=0){let r;e&&void 0!==e.key&&void 0!==e.value?(r=e.key,t=e.value,n=e.second):r=e;let a={code:0,msg:"ok"};try{if(!r)return{code:-1,msg:"key值不能为空"};let e=n>0?(new Date).getTime()+1e3*n:0;a=await B.inc({key:r,value:t,expired_at:e})}catch(e){return{code:-1,msg:"异常",err:e}}return a},C.uniqueAdd=async function(e,t=1,n=5){let{vk:r}=M,a={code:0,msg:"ok"};try{if(!e)return{code:-1,msg:"key值不能为空"};let i=n>0?(new Date).getTime()+1e3*n:0;await r.globalDataCache.deleteExpired(e);a.id=await B.add({key:e,value:t,expired_at:i})}catch(e){return console.error(e),{code:-1,msg:"异常"}}return a},C.deleteExpired=async function(e){await B.deleteExpired(e)};var F=C,P={},j={};function q(e){return e.code=e.errcode,e.msg=e.errmsg,e}P.init=function(e){j=e},P.getConfig=function(){let{vk:e,config:t,crypto:n,uniID:r}=j;const a=t.uni;var i;if(e.pubfn.isArray(a)){let t=uniCloud.env&&uniCloud.env.APPID?uniCloud.env.APPID:uniCloud.$context.APPID;i=e.pubfn.getListItem(a,"dcloudAppid",t),e.pubfn.isNull(i)&&(i=e.pubfn.getListItem(a,"isDefaultConfig",!0))}else i=a;return i},P.decrypt={},P.decrypt.getPhoneNumber=async function(e={}){let{appid:t,encryptedData:n,iv:r,sessionKey:a}=e;e.appId&&(t=e.appId);let i,{vk:o,crypto:s,uniID:l,config:d}=j,c={code:0,msg:"ok"},u=o.pubfn.isNullOneByObject({encryptedData:n,iv:r,sessionKey:a});if(u)return{code:-1,msg:u+"不能为空"};if(t)i=t;else try{const e=P.getConfig();let t=e["mp-weixin"];if(i=t.oauth.weixin.appid,o.pubfn.isNull(i))return console.log("config",e),console.log("mpWeixin",t),{code:-1,msg:"请先配置微信小程序APPID"}}catch(e){return{code:-1,msg:"请先配置微信小程序APPID"}}return c.data=P.decrypt.decryptData({appid:i,encryptedData:n,iv:r,sessionKey:a}),c.phone=c.data.phoneNumber,c.mobile=c.data.phoneNumber,c},P.decrypt.decryptData=function(e={}){let t,{appid:n,encryptedData:r,iv:a,sessionKey:i}=e,{vk:o,crypto:s}=j,l=new Buffer(i,"base64"),d=new Buffer(r,"base64"),c=new Buffer(a,"base64");try{let e=s.createDecipheriv("aes-128-cbc",l,c);e.setAutoPadding(!0),t=e.update(d,"binary","utf8"),t+=e.final("utf8"),t=JSON.parse(t)}catch(e){throw new Error(e)}return t.watermark.appid!==n?{code:-1,msg:"appid不一致"}:t},P.auth={},P.auth.getAppidInfo=function(e={}){let{appid:t,appsecret:n}=e,{vk:r,config:a}=j;const i=P.getConfig();if(t){if(!n){let e=r.pubfn.getData(a,"vk.oauth.weixin.list")||[],i=r.pubfn.getListItem(e,"appid",t)||{};t=i.appid,n=i.appsecret}}else{let e=r.pubfn.getData(i,"mp-weixin.oauth.weixin")||{};t=e.appid,n=e.appsecret}if(r.pubfn.isNullOne(t,n))throw console.log("config",i),new Error("请先配置微信小程序appid和appsecret");return{appid:t,appsecret:n}},P.auth.getAccessTokenFn=async function(e={}){let{appid:t,appsecret:n}=P.auth.getAppidInfo(e),{vk:r,config:a}=j,i=await r.request({url:`https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=${t}&secret=${n}`,method:"GET"});return i.errcode?(console.error("getAccessToken失败:",i),{code:i.errcode,msg:i.errmsg,err:i}):{code:0,msg:"ok",access_token:i.access_token,expires_in:i.expires_in}},P.auth.getAccessToken=async function(e={}){let t,{appid:n,appsecret:r}=P.auth.getAppidInfo(e),{cache:a=!0}=e,{vk:i}=j,o="mp-weixin-"+n;if(a&&(t=await i.globalDataCache.get(o)),i.pubfn.isNull(t)){let n=await P.auth.getAccessTokenFn(e);0===n.code&&(t=n.access_token,await i.globalDataCache.set(o,t,240),await i.globalDataCache.deleteExpired())}return t},P.auth.code2Session=async function(e={}){let t,{vk:n,uniID:r}=j,{platform:a,context:i}=e;return a||(a=n.pubfn.getPlatform(i)||"mp-weixin"),t="mp-weixin"===a?await P.auth.code2SessionMpWeixin(e):"h5-weixin"===a?await P.h5.auth.code2Session(e):await r.code2SessionWeixin(e),t.platform=a,t},P.auth.code2SessionMpWeixin=async function(e={}){let{appid:t,appsecret:n}=P.auth.getAppidInfo(e),r=e.code||e.js_code,{vk:a}=j,i=await a.request({url:`https://api.weixin.qq.com/sns/jscode2session?appid=${t}&secret=${n}&js_code=${r}&grant_type=authorization_code`,method:"GET"});if(i.errcode){let e=i.errmsg;return 40163===i.errcode&&(e="该code已被使用,请重新获取"),40029===i.errcode&&(e="无效code,请重新获取"),{...i,code:i.errcode,msg:e}}return i=a.pubfn.snake2camelJson(i),{...i,code:0,msg:"ok"}},P.wxacode={},P.wxacode.getUnlimited=async function(e={}){let t,{vk:n}=j,{access_token:r,scene:a,page:i,width:o,auto_color:s,line_color:l,is_hyaline:d}=e;if(t=r||await P.auth.getAccessToken(e),!t)return{code:-1,msg:"获取access_token失败,请检查appid和appsecret是否正确"};let c=await n.request({url:"https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token="+t,method:"POST",data:{scene:a,page:i,width:o,auto_color:s,line_color:l,is_hyaline:d},dataType:"default",useContent:!0,headers:{encoding:null}});if(c.length<500){let e=c.toString();try{e=JSON.parse(e)}catch(e){}return{code:-1,msg:"生成小程序码失败,请重试!",res:e}}return Buffer.isBuffer(c)?c:{code:c.errcode,msg:c.errmsg,err:c}},P.urlscheme={},P.urlscheme.generate=async function(e={}){let{vk:t}=j,{jump_wxa:n={},is_expire:r,expire_time:a}=e,{path:i,query:o}=n,s=await P.auth.getAccessToken(e);if(!s)return{code:-1,msg:"获取access_token失败,请检查appid和appsecret是否正确"};a>0&&(a=(new Date).getTime()/1e3+a);let l=await t.request({url:"https://api.weixin.qq.com/wxa/generatescheme?access_token="+s,method:"POST",data:{jump_wxa:{path:i,query:o},is_expire:r,expire_time:a},useContent:!0});switch(l=q(l),l.code){case 40001:l.msg="access_token错误";break;case 40165:l.msg="小程序页面不存在!"}return l},P.security={},P.security.msgSecCheck=async function(e={}){let{vk:t}=j,{content:n}=e,r=await P.auth.getAccessToken(e);if(!r)return{code:-1,msg:"获取access_token失败,请检查appid和appsecret是否正确"};let a=await t.request({url:"https://api.weixin.qq.com/wxa/msg_sec_check?access_token="+r,method:"POST",data:{content:n},useContent:!0});switch(a=q(a),a.code){case 40001:a.msg="access_token错误";break;case 87014:a.msg="内容含有违法违规内容,请检查!"}return a},P.security.imgSecCheck=async function(e={}){let{vk:t}=j,{dataBuffer:n,formData:r,base64:a}=e,i=await P.auth.getAccessToken(e);if(!i)return{code:-1,msg:"获取access_token失败,请检查appid和appsecret是否正确"};if(a&&!n){let e="base64,",t=a.indexOf(e);t>-1&&(a=a.substring(t+e.length)),n=new Buffer(a,"base64")}n&&!r&&(r=new t.formDataUtil.FormData,r.append("media",n,{filename:Date.now()+".png",contentType:"image/png"}));let o=await t.request({url:"https://api.weixin.qq.com/wxa/img_sec_check?access_token="+i,content:r.getBuffer(),headers:r.getHeaders()});switch(o=q(o),o.code){case 40001:o.msg="access_token错误";break;case 87014:o.msg="图片内容含有违法违规内容,请检查!";break;case 40006:o.msg="图片大小不能超过1M"}return o},P.subscribeMessage={},P.subscribeMessage.send=async function(e={}){let{vk:t}=j,{touser:n,template_id:r,page:a,data:i,miniprogram_state:o="formal",lang:s="zh_CN"}=e,l=await P.auth.getAccessToken(e);if(!l)return{code:-1,msg:"获取access_token失败,请检查appid和appsecret是否正确"};let d=await t.request({url:"https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token="+l,method:"POST",data:{touser:n,template_id:r,page:a,data:i,miniprogram_state:o,lang:s},useContent:!0});switch(d=q(d),d.code){case 40003:d.msg="touser字段openid为空或者不正确";break;case 40037:d.msg="订阅模板id为空不正确";break;case 43101:d.msg="用户未订阅该消息";break;case 47003:d.msg="模板参数不准确,可能为空或者不满足规则,errmsg会提示具体是哪个字段出错";break;case 41030:d.msg="page路径不正确,需要保证在现网版本小程序中存在"}return d},P.livebroadcast={},P.livebroadcast.getLiveInfo=async function(e={}){let{vk:t}=j,{pageIndex:n=1,pageSize:r=100}=e,a=await P.auth.getAccessToken(e);if(!a)return{code:-1,msg:"获取access_token失败,请检查appid和appsecret是否正确"};if(n<=0)return{code:-1,msg:"pageIndex必须是大于0的整数"};let i=(n-1)*r,o=r,s=await t.request({url:"https://api.weixin.qq.com/wxa/business/getliveinfo?access_token="+a,method:"POST",data:{start:i,limit:o},useContent:!0});switch(s=q(s),s.code){case 941e4:s.msg="直播间列表为空"}return s},P.app={},P.app.auth={},P.app.auth.getAppidInfo=function(e={}){let{appid:t,appsecret:n}=e,{vk:r,config:a}=j;const i=P.getConfig();if(t){if(!n){let e=r.pubfn.getData(a,"vk.oauth.weixin.list")||[],i=r.pubfn.getListItem(e,"appid",t)||{};t=i.appid,n=i.appsecret}}else{let e=r.pubfn.getData(i,"app-plus.oauth.weixin")||{};t=e.appid,n=e.appsecret}if(r.pubfn.isNullOne(t,n))throw console.log("config",i),new Error("请先配置微信小程序appid和appsecret");return{appid:t,appsecret:n}},P.app.auth.getAccessToken=async function(e={}){let{appid:t,appsecret:n}=P.app.auth.getAppidInfo(e),{vk:r,config:a}=j,{code:i}=e,o=await r.request({url:`https://api.weixin.qq.com/sns/oauth2/access_token?appid=${t}&secret=${n}&code=${i}&grant_type=authorization_code`,method:"GET"});return o.errcode?(console.error("getAccessToken失败:",o),{code:o.errcode,msg:o.errmsg,err:o}):{...o,code:0,msg:"ok"}},P.app.auth.getUserInfo=async function(e={}){let{vk:t,config:n}=j,{access_token:r,openid:a,lang:i="zh-CN"}=e;if(!r)return{code:-1,msg:"access_token不能为空"};let o=await t.request({url:`https://api.weixin.qq.com/sns/userinfo?access_token=${r}&openid=${a}$lang=${i}`,method:"GET"});return o.errcode?(console.error("getUserInfo失败:",o),{code:o.errcode,msg:o.errmsg,err:o}):{...o,code:0,msg:"ok",avatar:o.headimgurl,gender:o.sex}},P.h5={},P.h5.auth={},P.h5.auth.getAppidInfo=function(e={}){let{appid:t,appsecret:n}=e,{vk:r,config:a}=j;const i=P.getConfig();if(t){if(!n){let e=r.pubfn.getData(a,"vk.oauth.weixin.list")||[],i=r.pubfn.getListItem(e,"appid",t)||{};t=i.appid,n=i.appsecret}}else{let e=r.pubfn.getData(i,"h5-weixin.oauth.weixin")||{};t=e.appid,n=e.appsecret}if(r.pubfn.isNullOne(t,n))throw console.log("config",i),new Error("请先配置微信公众号appid和appsecret");return{appid:t,appsecret:n}},P.h5.auth.code2Session=async function(e={}){let{appid:t,appsecret:n}=P.h5.auth.getAppidInfo(e),{code:r}=e,{vk:a}=j,i=await a.request({url:`https://api.weixin.qq.com/sns/oauth2/access_token?appid=${t}&secret=${n}&code=${r}&grant_type=authorization_code`,method:"GET"});if(i.errcode){let e=i.errmsg;return 40163===i.errcode&&(e="该code已被使用,请重新获取"),40029===i.errcode&&(e="无效code,请重新获取"),{...i,code:i.errcode,msg:e}}return i=a.pubfn.snake2camelJson(i),{...i,code:0,msg:"ok"}},P.loginByWeixin=async function(e={},t){let n,{vk:r,uniID:a,_:i}=j,{code:o,platform:s,type:l,appid:d}=e;s||(s=r.pubfn.getPlatform(t),e.platform=s);try{n=await a.loginByWeixin(e);try{if(n.uid&&!n.msg&&(n.msg="register"===n.type?"注册成功":"登录成功"),n.uid&&"register"===n.type){let t={};if(["h5-weixin","app-plus"].indexOf(s)>-1){let e=await r.openapi.weixin.app.auth.getUserInfo({access_token:n.accessToken,openid:n.openid});t={nickname:e.nickname,avatar:e.headimgurl}}["mp-weixin"].indexOf(s)>-1&&(t={nickname:e.nickname,avatar:e.avatar}),r.pubfn.isNotNull(t)&&(n.userInfo=await r.baseDao.updateAndReturn({dbName:"uni-id-users",whereJson:{_id:n.uid||"___",nickname:i.exists(!1)},dataJson:t}))}}catch(e){console.error("保存用户头像昵称异常:",e)}}catch(e){console.error("loginByWeixin异常:",e);let t=e.message||"";throw e.message.indexOf("code been used")>-1&&(t="该code已被使用,请重新获取"),e.message.indexOf("invalid code")>-1&&(t="无效code,请重新获取"),new Error("msg:"+t)}return n};var R=P,L={},U={};L.init=function(e){U=e},L.open={},L.open.auth={},L.open.auth.getAppidInfo=function(e={}){let{appid:t,appsecret:n}=e,{vk:r,config:a}=U;if(!t){let e=r.pubfn.getData(a,"vk.service.openapi.baidu")||{};t=e.appid,n=e.appsecret}if(r.pubfn.isNullOne(t,n))throw new Error("请在cloudfunctions/common/config/index.js中配置并检查百度开放平台的appid和appsecret是否正确,参数路径:vk.service.openapi.baidu");return{appid:t,appsecret:n}},L.open.auth.getAccessTokenFn=async function(e={}){let{appid:t,appsecret:n}=L.open.auth.getAppidInfo(e),{vk:r,config:a}=U,i=await r.request({url:`https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=${t}&client_secret=${n}`,method:"GET"});return i.error_code?(console.error("getAccessToken失败:",i),{code:i.error_code,msg:i.error_msg,err:i}):{...i,code:0,msg:"ok"}},L.open.auth.getAccessToken=async function(e={}){let t,{appid:n,appsecret:r}=L.open.auth.getAppidInfo(e),{cache:a=!0}=e,{vk:i}=U,o="openapi-baidu-"+n;if(a&&(t=await i.globalDataCache.get(o)),i.pubfn.isNull(t)){let n=await L.open.auth.getAccessTokenFn(e);0===n.code&&(t=n.access_token,await i.globalDataCache.set(o,t,n.expires_in-3600),await i.globalDataCache.deleteExpired())}return t},L.open.ocr={},L.open.ocr.business_license=async function(e={}){let{image:t,url:n}=e;return await L.open.request({...e,action:"ocr/v1/business_license",actionVersion:"2.0",data:{image:t,url:n}})},L.open.ocr.idcard=async function(e={}){let{image:t,url:n,id_card_side:r,detect_risk:a,detect_photo:i}=e;return await L.open.request({...e,action:"ocr/v1/idcard",actionVersion:"2.0",data:{image:t,url:n,id_card_side:r,detect_risk:a,detect_photo:i}})},L.open.request=async function(e={}){let{vk:t}=U,n=await L.open.auth.getAccessToken(e);if(!n)return{code:-1,msg:"获取access_token失败,请检查appid和appsecret是否正确"};let{action:r,actionVersion:a="2.0",header:i={"content-type":"application/x-www-form-urlencoded"},data:o}=e,s=await t.request({url:`https://aip.baidubce.com/rest/${a}/${r}?access_token=${n}`,method:"POST",headers:{"content-type":"application/x-www-form-urlencoded"},data:o});return s.error_code?{code:s.error_code,msg:s.error_msg,err:s}:{...s,code:0,msg:"ok"}};var z=L,K={};K.weixin=R,K.baidu=z,K.init=function(e){K.weixin.init(e),K.baidu.init(e)};var W=K;const Y=/^multipart\/.+?(?:;\s*boundary=(?:(?:"(.+)")|(?:([^\s]+))))$/i,Z=/Content-Disposition:\sform-data;\sname="(.+?)"(?:;\sfilename="(.+?)")?/i,G=/Content-Type:\s(.+?)$/i;var H={FormData:class{constructor(){this._shouldUseCache=!1,this._cachedBuffer=null,this._lineBreak="\r\n",this._boundary="------FormDataBaseBoundary"+Math.random().toString(36).substring(2),this.dataList=[]}_addData(e){if(this._shouldUseCache=!1,0===this.dataList.length)return void this.dataList.push(e);const t=this.dataList[this.dataList.length-1];switch(`${Buffer.isBuffer(t)?"buffer":"other"}_${Buffer.isBuffer(e)?"buffer":"other"}`){case"buffer_buffer":this.dataList.push(this._lineBreak),this.dataList.push(e);break;case"buffer_other":this.dataList.push(this._lineBreak+e);break;case"other_buffer":this.dataList[this.dataList.length-1]=t+"\r\n",this.dataList.push(e);break;case"other_other":this.dataList[this.dataList.length-1]=t+"\r\n"+e}}append(e,t,n){this._addData("--"+this._boundary);let r=`Content-Disposition: form-data; name="${encodeURIComponent(e)}"`;if(Buffer.isBuffer(t)){if(!n.filename||!n.contentType)throw new Error("filename and contentType required");r+=`; filename="${encodeURIComponent(n.filename)}"`,this._addData(r),this._addData("Content-Type: "+n.contentType),this._addData(""),this._addData(t)}else this._addData(r),this._addData(""),this._addData(t)}getHeaders(e){const t={"Content-Type":"multipart/form-data; boundary="+this._boundary};return Object.assign(t,e)}getBuffer(){if(this._shouldUseCache)return this._cachedBuffer;this._shouldUseCache=!0;let e=Buffer.alloc(0);return this.dataList.forEach(t=>{e=Buffer.isBuffer(t)?Buffer.concat([e,t]):Buffer.concat([e,Buffer.from(""+t)])}),e=Buffer.concat([e,Buffer.from(`${this._lineBreak}--${this._boundary}--`)]),this._cachedBuffer=e,e}},formParser:e=>{const t=(e.headers["content-type"]||e.headers["Content-Type"]).match(Y),n=t[1]||t[2],r=function(e,t){let n=0,r=0,a=[];for(;-1!==(r=e.indexOf(t,n));)a.push(e.slice(n,r)),n=r+t.length,r=e.indexOf(t,n);return a}(Buffer.from(e.body,"base64"),Buffer.from("--"+n)).map(e=>function(e){let t=e.indexOf("\r\n")+"\r\n".length,n=t,r=e.lastIndexOf("\r\n"),a=[];for(;-1!==(n=e.indexOf("\r\n",t));)if(a.push(e.slice(t,n)),t=n+"\r\n".length,0===a[a.length-1].length){a.push(e.slice(t,r));break}return a}(e).filter(e=>e.length>0)).filter(e=>2===e.length||3===e.length||4===e.length).map(e=>{const t={},n=e[0].toString().match(Z);switch(t.name=decodeURIComponent(n[1]),e.length){case 2:t.value=e[1].toString();break;case 3:t.filename=decodeURIComponent(n[2]),t.contentType=e[1].toString().match(G)[1],t.fileContent=e[2];break;case 4:t.filename=decodeURIComponent(n[2]),t.contentType=e[1].toString().match(G)[1],t.fileContent=e[3]}return t}),a={};return r.forEach(e=>{const t=e.name;delete e.name,a[t]=e.fileContent?e:e.value}),a}};const V="opendb-admin-menus";var Q={},X={};Q.init=function(e){X=e},Q.findRoleById=async(e="___")=>{let t,{vk:n,db:r,_:a}=X;return t=await n.baseDao.findByWhereJson({dbName:"uni-id-roles",whereJson:{role_id:e}}),t},Q.roleBindPermission=async(e={})=>{let{vk:t,db:n,_:r}=X,a={code:0,msg:""},{role_id:i="___",permissionList:o=[],reset:s=!1}=e;if(!s){let e=await Q.findRoleById(i),{permission:t=[]}=e;o=t.concat(o),o=[...new Set(o)]}return a.num=await t.baseDao.update({dbName:"uni-id-roles",whereJson:{role_id:i},dataJson:{permission:r.set(o)}}),a},Q.roleBindMenu=async(e={})=>{let{vk:t,db:n,_:r}=X,a={code:0,msg:""},{role_id:i="___",menuList:o=[],reset:s=!1,addPermission:l=!1}=e,d=[],c=await Q.findRoleById(i),{menu:u=[],permission:f=[]}=c;if(s?d=te(o,u):(o=u.concat(o),o=[...new Set(o)]),a.num=await t.baseDao.update({dbName:"uni-id-roles",whereJson:{role_id:i},dataJson:{menu:r.set(o)}}),l){let e=await Q.findMenuByIdsToPermission(o),n=[];if(s&&t.pubfn.isNotNull(d)){n=te(e,await Q.findMenuByIdsToPermission(d))}f=f.concat(e),f=te(n,f),f=[...new Set(f)],Q.roleBindPermission({role_id:i,permissionList:f,reset:!0})}return a},Q.findPermissionById=async(e="___")=>{let t,{vk:n,db:r,_:a}=X;return t=await n.baseDao.findByWhereJson({dbName:"uni-id-permissions",whereJson:{permission_id:e}}),t},Q.findMenuByIdsToPermission=async e=>{let{vk:t,db:n,_:r}=X,a=await Q.findMenuByIds(e);if(t.pubfn.isNull(a))return[];let i=[];for(let e in a){let n=a[e].permission;t.pubfn.isNotNull(n)&&(i=i.concat(n))}return i=[...new Set(i)],i},Q.listPermissionToTree=async(e={})=>{let t,{vk:n,db:r,_:a}=X,{getCount:i=!1,pageSize:o=500,pageIndex:s=1,whereJson:l={parent_id:null},sortArr:d=[{name:"sort",type:"asc"}],treeProps:c={}}=e,{level:u=3,limit:f=500,whereJson:p}=c;t=await n.baseDao.selects({dbName:"uni-id-permissions",pageIndex:s,pageSize:o,getCount:i,whereJson:l,sortArr:d,treeProps:{id:"permission_id",parent_id:"parent_id",children:"children",level:u,limit:f,whereJson:p,sortArr:d}});let g={id:"permission_id",parent_id:"parent_id",children:"children"},m=t.rows;m=n.pubfn.treeToArray(m,g),t.list=n.pubfn.copyObject(m);for(let e in m){let t=m[e],r="",a="";if(n.pubfn.isNotNull(t.level)){r=` - ${["未分类","子弹级","炸弹级","榴弹级","核弹级"][t.level]}(LV:${t.level})`}if(n.pubfn.isNotNull(t.curd_category)){a=" - "+["未分类","增","删","改","查","特殊"][t.curd_category]}m[e].label=`${t.permission_name}(${t.permission_id})${a}${r}`}return m=n.pubfn.arrayToTree(m,g),t.rows=m,t},Q.findMenuById=async(e="___")=>{let t,{vk:n,db:r,_:a}=X;return t=await n.baseDao.findByWhereJson({dbName:V,whereJson:{menu_id:e}}),t},Q.findMenuByIds=async e=>{let t,{vk:n,db:r,_:a}=X;return n.pubfn.isNull(e)?[]:(t=(await n.baseDao.select({dbName:V,pageIndex:1,pageSize:500,whereJson:{menu_id:a.in(e)}})).rows,t)},Q.listMenuByRole=async(e={})=>{let{vk:t,db:n,_:r}=X,a={code:0,msg:"",menus:[],menuList:[]},{role:i}=e,o=[],s={enable:!0},l={enable:!0};if(!(i.indexOf("admin")>-1)){if(t.pubfn.isNull(i))return a;let e=await t.baseDao.select({dbName:"uni-id-roles",pageSize:500,whereJson:{role_id:r.in(i),enable:!0},fieldJson:{menu:!0}});for(let n in e.rows){let{menu:r}=e.rows[n];t.pubfn.isNotNull(r)&&(o=o.concat(r))}if(0==o.length)return a;o=[...new Set(o)],s.menu_id=r.in(o),l.menu_id=r.in(o)}s.parent_id=null;let d=[{name:"sort",type:"asc"}],c=await t.baseDao.selects({dbName:V,pageIndex:1,pageSize:500,whereJson:s,sortArr:d,treeProps:{id:"menu_id",parent_id:"parent_id",children:"children",level:3,limit:500,whereJson:l,sortArr:d}});return a.menus=c.rows,a.menuList=t.pubfn.treeToArray(c.rows,{id:"menu_id",parent_id:"parent_id",children:"children"}),a},Q.menuBindPermission=async(e={})=>{let{vk:t,db:n,_:r}=X,a={code:0,msg:""},{menu_id:i="___",permissionList:o=[],reset:s=!1}=e;if(!s){let e=await Q.findMenuById(i),{permission:t=[]}=e;o=t.concat(o),o=[...new Set(o)]}return a.num=await t.baseDao.update({dbName:V,whereJson:{menu_id:i},dataJson:{permission:r.set(o)}}),a},Q.listMenuToTree=async(e={})=>{let t,{vk:n,db:r,_:a}=X,{getCount:i=!1,pageSize:o=500,pageIndex:s=1,whereJson:l={parent_id:null},sortArr:d=[{name:"sort",type:"asc"}],treeProps:c={}}=e,{level:u=3,limit:f=500,whereJson:p}=c;t=await n.baseDao.selects({dbName:V,pageIndex:s,pageSize:o,getCount:i,whereJson:l,sortArr:d,treeProps:{id:"menu_id",parent_id:"parent_id",children:"children",level:u,limit:f,whereJson:p,sortArr:d}});let g={id:"menu_id",parent_id:"parent_id",children:"children"},m=t.rows;m=n.pubfn.treeToArray(m,g),t.list=n.pubfn.copyObject(m);for(let e in m){let t=m[e];m[e].label=`${t.name}(${t.menu_id})`}return m=n.pubfn.arrayToTree(m,g),t.rows=m,t};var ee=Q;function te(e,t){let n=new Set(e);return t.filter(e=>!n.has(e))}const ne="vk-global-data";var re={},ae={};re.init=function(e){ae=e},re.find=async e=>{let{vk:t,db:n,_:r}=ae,a={};return a=await t.baseDao.findById({dbName:ne,id:e}),a},re.del=async e=>{let{vk:t,db:n,_:r}=ae,a={};return a=await t.baseDao.deleteById({dbName:ne,id:e}),a},re.deleteByWhere=async e=>{let{vk:t,db:n,_:r}=ae,a={};return a=await t.baseDao.del({dbName:ne,whereJson:e}),a},re.deleteExpired=async e=>{let{vk:t,db:n,_:r}=ae,a={},i={};"string"==typeof e?i._id=e:"object"==typeof e&&(i=e);let o=(new Date).getTime();return a=await t.baseDao.del({dbName:ne,whereJson:{...i,expired_at:r.gt(0).lte(o)}}),a},re.update=async e=>{let{vk:t,db:n,_:r}=ae,a={},{key:i,value:o,comment:s,expired_at:l}=e;return a=await t.baseDao.updateById({dbName:ne,id:i,dataJson:{value:r.set(o),comment:s,expired_at:l}}),a},re.add=async e=>{let{vk:t,db:n,_:r}=ae,a={},{key:i,value:o,comment:s,expired_at:l}=e;return a=await t.baseDao.add({dbName:ne,dataJson:{_id:i,key:i,value:o,comment:s,expired_at:l}}),a},re.count=async e=>{let{vk:t,db:n,_:r}=ae,a={};return a=await t.baseDao.count({dbName:ne,whereJson:e}),a},re.set=async e=>{let{vk:t,db:n,_:r}=ae,a={code:0,msg:"ok"},i=new Date;e._add_time=i.getTime(),e._add_time_str=t.pubfn.timeFormat(i,"yyyy-MM-dd hh:mm:ss");let o=await n.collection(ne).doc(e.key).set(e);return o.upsertedId?(a.id=o.upsertedId,a.mode="add"):(a.mode="update",a.updated=o.updated),a.num=1,a},re.inc=async e=>{let{vk:t,db:n,_:r}=ae,{key:a,value:i,expired_at:o}=e,s={},l=await t.baseDao.updateById({dbName:ne,id:a,dataJson:{value:r.inc(i),expired_at:o}});if(0==l){0===await re.count({_id:a})&&(s.id=await re.add(e),s.num=1,s.mode="add")}else s.num=l,s.mode="update";return s},re.list=async e=>{let{vk:t,db:n,_:r}=ae,a={},{pageIndex:i,pageSize:o,whereJson:s,sortArr:l}=e;return a=await t.baseDao.select({dbName:ne,pageIndex:i,pageSize:o,whereJson:s,sortArr:l}),a};var ie=re,oe={},se={init:function(e){oe=e}},le={specialUrlEncode:function(e){return(e=encodeURIComponent(e)).replace(/\+/g,"%20").replace(/\*/g,"%2A").replace(/%7E/g,"~")},sign:function(e,t){let{crypto:n}=oe;return n.createHmac("sha1",e).update(t).digest("base64")}};se.sendSms=async function(e){let{vk:t,config:n}=oe,{provider:r,appid:a,smsKey:i,smsSecret:o,signName:s,phone:l,templateId:d,data:c}=e,u={};if("aliyun"===r){let r=t.pubfn.getData(n,"vk.service.sms.aliyun");t.pubfn.isNotNull(r)&&(i||(e.smsKey=r.accessKeyId),o||(e.smsSecret=r.accessKeySecret),s||(e.signName=r.signName)),u=await se.sendSmsByAliyun(e)}else{if("unicloud"!==r)return{code:-1,msg:`暂不支持${r}供应商`};{let r=t.pubfn.getData(n,"uni.service.sms");t.pubfn.isNotNull(r)&&(i||(e.smsKey=r.smsKey),o||(e.smsSecret=r.smsSecret),s||(e.signName=r.signName)),u=await se.sendSmsByUnicloud(e)}}return u.requestParam={provider:r,phone:l},u},se.sendSmsByAliyun=async function(e){let{vk:t,config:n}=oe,{provider:r,appid:a,smsKey:i,smsSecret:o,signName:s,phone:l,templateId:d,data:c}=e,u={code:0,msg:""};try{if(t.pubfn.isNullOne(i,o))return{code:-1,msg:"阿里云短信配置错误,请检查!"};let e="https://dysmsapi.aliyuncs.com",n=t.pubfn.timeFormat(new Date,"yyyy-MM-ddThh:mm:ssZ",0),r=(new Date).getTime().toString().substring(7)+t.pubfn.random(30);"object"==typeof c&&(c=JSON.stringify(c));let a={SignatureMethod:"HMAC-SHA1",SignatureNonce:r,AccessKeyId:i,SignatureVersion:"1.0",Timestamp:n,Format:"json",Action:"SendSms",Version:"2017-05-25",PhoneNumbers:l,SignName:s,TemplateParam:c,TemplateCode:d};delete a.Signature;let f=[];for(let e in a)f.push(e);f.sort();let p=!1,g="";for(let e in f){let t=f[e];g+="&"+le.specialUrlEncode(t)+"="+le.specialUrlEncode(a[t])}g=g.substring(1);let m="GET&"+le.specialUrlEncode("/")+"&"+le.specialUrlEncode(g),h=le.sign(o+"&",m),b=le.specialUrlEncode(h),y="Signature="+b+"&"+g;p&&(console.log("\r\n随机数\r\n"),console.log(a.SignatureNonce),console.log("\r\n=========\r\n"),console.log(a.Timestamp),console.log("\r\n====sortedQueryString====\r\n"),console.log(g),console.log("\r\n=====stringToSign====\r\n"),console.log(m),console.log("\r\n=====sign====\r\n"),console.log(h),console.log("\r\n=====signature====\r\n"),console.log(b),console.log("\r\n=========\r\n"),console.log(e+"/?"+y));t.pubfn.urlStringToJson(y);let w=await t.request({url:`${e}?${y}`,method:"GET"});return u="OK"===w.Code?{code:0,msg:"ok",requestRes:w}:{code:-1,msg:w.Message,requestRes:w},u}catch(e){return{code:-1,msg:"短信发送失败",err:{message:e.message,stack:e.stack}}}},se.sendSmsByUnicloud=async function(e){let{provider:t,appid:n,smsKey:r,smsSecret:a,signName:i,phone:o,templateId:s,data:l}=e,d={code:0,msg:""};try{let e=await uniCloud.sendSms({smsKey:r,smsSecret:a,phone:o,templateId:s,data:l});d=0==e.code||0==e.errCode?{code:0,msg:"ok",requestRes:e}:{code:-1,msg:e.errMessage||e.errMsg,requestRes:e}}catch(e){return{code:-1,msg:"短信发送失败",err:{message:e.message,stack:e.stack}}}return d},se.sendSmsVerifyCode=async function(e){let t,{vk:n,config:r,uniID:a}=oe,{provider:i,phone:o,code:s,type:l,expiresIn:d=180}=e,c={code:0,msg:""};if("unicloud"===i){t=n.pubfn.getData(r,"uni.service.sms.templateId");let e=n.pubfn.getData(r,"uni.service.sms.codeExpiresIn");e&&(d=e);let a=n.pubfn.getData(r,"uni.service.sms.name"),l=Math.ceil(d/60).toString();c=await n.system.smsUtil.sendSms({provider:i,phone:o,templateId:t,data:{code:s,name:a,action:"身份验证",expMinute:l}})}else t=n.pubfn.getData(r,`vk.service.sms.${i}.templateCode.verifyCode`),c=await n.system.smsUtil.sendSms({provider:i,phone:o,templateId:t,data:{code:s}});return 0===c.code&&await a.setVerifyCode({mobile:o,code:s,expiresIn:d,type:l}),c};var de=se,ce={};ce.sysDao=ee,ce.globalDataDao=ie,ce.smsUtil=de,ce.init=function(e){let t=["sysDao","globalDataDao","smsUtil"];for(let n in t){let r=t[n];"function"==typeof ce[r].init&&ce[r].init(e)}};var ue=ce,fe={};fe.router=s,fe.md5=g,fe.baseDao=b,fe.request=y,fe.pubfn=E,fe.temporaryCache=J,fe.globalDataCache=F,fe.openapi=W,fe.formDataUtil=H,fe.system=ue,fe.requireCache={},fe.require=function(e){if(fe.requireCache&&fe.requireCache[e])return fe.requireCache[e];{const t=fe.unicloud.requireFn(fe.unicloud.baseDir+"/"+e);return fe.requireCache[e]=t,t}},fe.requireFn=function(e){try{return fe.unicloud.requireFn(e)}catch(e){let{message:t=""}=e;return void(-1==t.indexOf("Cannot find module")&&console.error(e))}},fe.use=function(e,t){for(let n in e)e[n]&&"function"==typeof e[n].init&&e[n].init(t),fe[n]=e[n]},fe.unicloud={},fe.init=function(e={}){if(fe.unicloud.requireFn=e.requireFn,e.configCenter||(e.configCenter=fe.requireFn("uni-config-center")),e.uniID||(e.uniID=fe.requireFn("uni-id")),e.uniPay||(e.uniPay=fe.requireFn("uni-pay")),e.middlewareService||(e.middlewareService=fe.requireFn("./middleware/index")),e.daoCenter||(e.daoCenter=fe.requireFn("./dao/index")),e.crypto||(e.crypto=fe.requireFn("crypto")),e.urlrewrite||(e.urlrewrite=fe.requireFn("./util/urlrewrite")),e.config||(e.config=e.configCenter({pluginId:"vk-unicloud"}).requireFile("index.js")),!e.config)throw new Error("配置文件:uniCloud/cloudfunctions/common/uni-config-center/vk-unicloud/index.js \n编译错误,请检查!");if(!e.db)try{e.db=uniCloud.database()}catch(e){}fe.vkPay=fe.requireFn("vk-uni-pay"),e.pubFun||(e.pubFun=fe.requireFn("./util/pubFunction")),e.pubFun&&(fe.myfn=e.pubFun),e.redis||(e.redis=fe.requireFn("vk-redis")),e.redis&&(fe.redisUtil=e.redis,fe.redis=e.redis.redis,fe.newRedis=e.redis.newRedis),fe.unicloud.configCenter=e.configCenter,fe.unicloud.config=e.config,fe.unicloud.uniID=e.uniID,fe.unicloud.uniPay=e.uniPay,fe.unicloud.db=e.db,fe.unicloud._=e.db.command,fe.unicloud.pubfn=fe.pubfn,fe.unicloud.middlewareService=e.middlewareService,fe.unicloud.pubFun=e.pubFun,fe.unicloud.customUtil=e.customUtil,fe.unicloud.baseDir=e.baseDir,fe.unicloud.crypto=e.crypto,fe.unicloud.urlrewrite=e.urlrewrite;const t={vk:fe,...fe.unicloud};fe.use({daoCenter:e.daoCenter,baseDao:fe.baseDao,openapi:fe.openapi,globalDataCache:fe.globalDataCache,system:fe.system},t)};var pe=fe;module.exports=pe; diff --git a/uni_modules/vk-unicloud/uniCloud/cloudfunctions/common/vk-unicloud/package.json b/uni_modules/vk-unicloud/uniCloud/cloudfunctions/common/vk-unicloud/package.json index f1aeb68..e232661 100644 --- a/uni_modules/vk-unicloud/uniCloud/cloudfunctions/common/vk-unicloud/package.json +++ b/uni_modules/vk-unicloud/uniCloud/cloudfunctions/common/vk-unicloud/package.json @@ -1,6 +1,6 @@ { "name": "vk-unicloud", - "version": "2.6.15", + "version": "2.7.0", "description": "【云函数端SDK】VK云函数路由模式uniCloud开发框架,在router目录下执行 npm i vk-unicloud 进行安装和升级", "main": "index.js", "homepage": "https://gitee.com/vk-uni/vk-uni-cloud-router.git", -- GitLab