From 7b7bcd44ef80a0b08b4f1d57369e04c5d0426518 Mon Sep 17 00:00:00 2001 From: VK <370725567@qq.com> Date: Mon, 12 Jul 2021 10:07:50 +0800 Subject: [PATCH] 1.3.1 --- README/1.3/1.3.1.md | 10 ++++++ changelog.md | 12 +++++++ package-lock.json | 8 ++--- package.json | 4 +-- .../cloudfunctions/router/package.json | 3 +- uni_modules/uni-id/changelog.md | 5 +++ uni_modules/uni-id/package.json | 2 +- .../cloudfunctions/common/uni-id/package.json | 2 +- uni_modules/vk-unicloud/changelog.md | 4 +++ uni_modules/vk-unicloud/package.json | 2 +- .../common/vk-unicloud/index.js | 2 +- .../common/vk-unicloud/package.json | 2 +- .../vk-unicloud-page/libs/function/index.js | 4 +-- ...11\350\243\205\346\255\245\351\252\244.md" | 15 ++++++--- ...\204\344\273\266 - vk-data-table-query.md" | 7 ++-- ...\346\240\274 - vk.baseDao.getTableData.md" | 3 +- ...07\350\203\275\350\241\250\346\240\274.md" | 32 ++++++++++--------- ...07\350\203\275\350\241\250\345\215\225.md" | 7 ++-- ...21\351\242\235\350\276\223\345\205\245.md" | 1 + ...60\345\255\227\350\276\223\345\205\245.md" | 1 + ...06\346\257\224\350\276\223\345\205\245.md" | 1 + ...30\346\211\243\350\276\223\345\205\245.md" | 1 + 22 files changed, 87 insertions(+), 41 deletions(-) create mode 100644 README/1.3/1.3.1.md diff --git a/README/1.3/1.3.1.md b/README/1.3/1.3.1.md new file mode 100644 index 0000000..7186d74 --- /dev/null +++ b/README/1.3/1.3.1.md @@ -0,0 +1,10 @@ +### vk-unicloud-admin 框架研究Q群:`22466457` 如有问题或建议可以在群内讨论。 +### 更新内容 +#### 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.3.2` +#### 2、【优化】部分输入性组件补全 readonly(只读)属性 +#### 3、【修复】连表查询时,因`lastWhereJson`而导致`getCount`错误的问题。 + +#### 框架更新步骤指南 [点击查看](https://gitee.com/vk-uni/vk-uni-cloud-router/wikis/pages?sort_id=4023455&doc_id=975983) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 diff --git a/changelog.md b/changelog.md index 22e40a7..d72bf86 100644 --- a/changelog.md +++ b/changelog.md @@ -1,3 +1,15 @@ +## 1.3.1(2021-07-12) +### vk-unicloud-admin 框架研究Q群:`22466457` 如有问题或建议可以在群内讨论。 +### 更新内容 +#### 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.3.2` +#### 2、【优化】部分输入性组件补全 readonly(只读)属性 +#### 3、【修复】连表查询时,因`lastWhereJson`而导致`getCount`错误的问题。 + +#### 框架更新步骤指南 [点击查看](https://gitee.com/vk-uni/vk-uni-cloud-router/wikis/pages?sort_id=4023455&doc_id=975983) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 + ## 1.3.0(2021-07-09) ### vk-unicloud-admin 框架研究Q群:`22466457` 如有问题或建议可以在群内讨论。 ### 更新内容 diff --git a/package-lock.json b/package-lock.json index 9737840..82e4564 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "vk-unicloud-admin", - "version": "1.2.7", + "version": "1.3.0", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -104,9 +104,9 @@ } }, "vk-unicloud-admin-ui": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/vk-unicloud-admin-ui/-/vk-unicloud-admin-ui-1.3.0.tgz", - "integrity": "sha512-0r9T5EbyyWbL2QEidn2ixvC8BDNy7neSZAG0J+AjgEhhKeUCtUs58QituClR11w7a7/tvd/0xUMQb50ZXXuhzg==" + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/vk-unicloud-admin-ui/-/vk-unicloud-admin-ui-1.3.2.tgz", + "integrity": "sha512-W/FE1CeKKTSpmAyTZPJSDGeJ/zSXgmcoMWJfr2T7KYJ2PaqA+mODfkihMXGtqOwL0EPv7Gjh7CH8XSemrady4g==" }, "vuedraggable": { "version": "2.24.3", diff --git a/package.json b/package.json index 773b48a..2b3ce8e 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "id": "vk-unicloud-admin", "name": "vk-unicloud-admin", - "version": "1.3.0", + "version": "1.3.1", "displayName": "【开箱即用】vk-unicloud-admin - 快速开发框架 - 几分钟即可完成一个页面CRUD", "description": "vk-unicloud-admin是基于unicloud+uni-id+element+vk-unicloud-router的一套快速PC admin完整开发框架。丰富的API可以让你开发事半功倍。", "keywords": [ @@ -22,7 +22,7 @@ "dependencies": { "element-ui": "^2.15.3", "umy-ui": "^1.1.6", - "vk-unicloud-admin-ui": "^1.3.0" + "vk-unicloud-admin-ui": "^1.3.2" }, "engines": { "HBuilderX": "^3.1.10" diff --git a/uniCloud-aliyun/cloudfunctions/router/package.json b/uniCloud-aliyun/cloudfunctions/router/package.json index fc8b7ef..b0a411a 100644 --- a/uniCloud-aliyun/cloudfunctions/router/package.json +++ b/uniCloud-aliyun/cloudfunctions/router/package.json @@ -21,6 +21,7 @@ "memorySize": 256, "path": "", "timeout": 60, - "triggers": [] + "triggers": [], + "runtime": "Nodejs12" } } diff --git a/uni_modules/uni-id/changelog.md b/uni_modules/uni-id/changelog.md index 79df928..1f03fe6 100644 --- a/uni_modules/uni-id/changelog.md +++ b/uni_modules/uni-id/changelog.md @@ -1,3 +1,8 @@ +## 3.2.1(2021-07-09) +- 撤销3.2.0版本所做的调整 +## 3.2.0(2021-07-09) +- 【重要】支持不同端(管理端、用户端等)用户隔离 [详情](https://uniapp.dcloud.net.cn/uniCloud/uni-id?id=isolate-user) +- 支持不同端(管理端、用户端等)配置文件隔离 [详情](https://uniapp.dcloud.net.cn/uniCloud/uni-id?id=isolate-config) ## 3.1.3(2021-07-08) - 移除插件内误传的node_modules ## 3.1.2(2021-07-08) diff --git a/uni_modules/uni-id/package.json b/uni_modules/uni-id/package.json index a68264e..fe0628a 100644 --- a/uni_modules/uni-id/package.json +++ b/uni_modules/uni-id/package.json @@ -1,7 +1,7 @@ { "id": "uni-id", "displayName": "uni-id", - "version": "3.1.3", + "version": "3.2.1", "description": "简单、统一、可扩展的用户中心", "keywords": [ "uniid", diff --git a/uni_modules/uni-id/uniCloud/cloudfunctions/common/uni-id/package.json b/uni_modules/uni-id/uniCloud/cloudfunctions/common/uni-id/package.json index cec9bc6..609063f 100644 --- a/uni_modules/uni-id/uniCloud/cloudfunctions/common/uni-id/package.json +++ b/uni_modules/uni-id/uniCloud/cloudfunctions/common/uni-id/package.json @@ -1,6 +1,6 @@ { "name": "uni-id", - "version": "3.1.2", + "version": "3.2.1", "description": "uni-id for uniCloud", "main": "index.js", "homepage": "https://uniapp.dcloud.io/uniCloud/uni-id", diff --git a/uni_modules/vk-unicloud/changelog.md b/uni_modules/vk-unicloud/changelog.md index 07a4662..daacd09 100644 --- a/uni_modules/vk-unicloud/changelog.md +++ b/uni_modules/vk-unicloud/changelog.md @@ -1,3 +1,7 @@ +## 2.2.1(2021-07-12) +### 更新内容 +####【修复】连表查询时,因`lastWhereJson`而导致`getCount`错误的问题。 +#### 完整框架项目地址:`https://ext.dcloud.net.cn/plugin?id=2204`[点击查看](https://ext.dcloud.net.cn/plugin?id=2204) ## 2.2.0(2021-07-09) ### 更新内容 #### 1、【重要调整】删除了`config`公共模块,升级为`uni-config-center`模式 [点击查看升级教程](https://gitee.com/vk-uni/vk-uni-cloud-router/wikis/pages?sort_id=4219337&doc_id=975983) diff --git a/uni_modules/vk-unicloud/package.json b/uni_modules/vk-unicloud/package.json index 3b5e8aa..df0c894 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、工具包,为你的业务扫平障碍。使你的项目刚起步进度就是50%", - "version": "2.2.0", + "version": "2.2.1", "description": "此为vk-unicloud-router开发框架核心库(新手建议直接下载完整框架项目)已集成uni-id支持云函数url化。众多现成API,内置小白也能轻松上手的数据库API。", "keywords": [ "vk-unicloud-router", 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 ce4c219..2122ac2 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 p=n;if(u=await p.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 f=[];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)&&(f=f.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)&&(f=f.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)&&(f=f.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)&&(f=f.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)&&(f=f.concat(t))}if(0==f.length)return{code:403,msg:"权限不足"};f=[...new Set(f)];let m=await r({whereJson:{permission_id:c.in(f),match_mode:c.in([1,2])}},a),y=!1;for(let e=0;e0}({myPermission:f,url:t},a)&&(y=!0)}return y?(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,r);let s={code:t,msg:n};return r&&(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:p,crypto:f}=r.unicloud;const g=s.createInstance({context:n});if(r.pubfn.getData(a,"vk.system.serviceShutdown"))return{code:405,msg:r.pubfn.getData(a,"vk.system.serviceShutdownDescription")};try{uniCloud.vk=r}catch(e){}let m={event:t,context:n},y=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 t=e.body;e.isBase64Encoded&&(t=Buffer.from(t,"base64").toString("utf-8"));try{"string"==typeof t&&(t=JSON.parse(t)),n.data=Object.assign(n.data,t)}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:w}=y;if([403].indexOf(y.code)>-1)return y;d.command.$=d.command.aggregate;let _={url:h,data:b,uniIdToken:w,util:{vk:r,config:a,pubFun:u,uniID:g,uniPay:l,db:d,_:d.command,$:d.command.aggregate,customUtil:p,crypto:f},originalParam:m};const N=i.getMiddleware(c);let k,v,x;try{if(k=await i.onActionExecuting(_,N),0!==k.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}(_,N,k);k.uid&&(b.uid=k.uid),_.filterResponse=k}catch(e){return await o({code:500,msg:`云函数 ${h} 的中间件 onActionExecuting 运行异常!`,err:e,serviceParam:_,middlewareService:N})}try{v=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:N}):"MODULE_NOT_FOUND"==t&&n.indexOf("Cannot find module")>-1?await o({code:500,msg:n,err:e,serviceParam:_,middlewareService:N}):await o({code:500,msg:`云函数 ${h} 编译异常!`,err:e,serviceParam:_,middlewareService:N})}try{x=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&&"object"==typeof a&&(a.vk_uni_token={token:t.token,tokenExpired:t.tokenExpired});return a}({res:k,serviceParam:_,serviceMain:v})}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:N}):0===n.indexOf("msg:")?await o({code:501,msg:n.substring(4),err:e,serviceParam:_,middlewareService:N}):0===n.indexOf("Cannot read property 'mp-weixin' of undefined")?await o({code:501,msg:"请先绑定微信",err:e,serviceParam:_,middlewareService:N}):await o({code:500,msg:`云函数 ${h} 运行异常!`,err:e,serviceParam:_,middlewareService:N})}try{x=await i.onActionExecuted(_,N,x)}catch(e){return await o({code:500,msg:`云函数 ${h} 的中间件 onActionExecuted 运行异常!`,err:e,serviceParam:_,middlewareService:N})}return x};function l(e,t,n,r,a,i){return f((o=f(f(t,e),f(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 p(e,t,n,r,a,i,o){return l(n^(t|~r),e,t,a,i,o)}function f(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 y.selectAll(e);let d=await y.getSelectData(e),{result:c,hasMore:u,total:p,getCount:f,pageIndex:g,fieldJson:h}=d;return c=c.skip((g-1)*o).limit(o),t.pubfn.isNotNull(h)&&(c=c.field(h)),c.get().then(e=>{let t={};return f?(t.total=p,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;try{let e=l.collection(a).doc(i);o&&(e=e.field(o));let t=await e.get();return"[object Array]"===Object.prototype.toString.call(t.data)?t.data[0]:t.data}catch(e){return console.error(e),null}},findByWhereJson:async function(e){let{vk:t,db:n,_:r}=m,{dbName:a,whereJson:i,fieldJson:o,sortArr:s}=e;try{if(t.pubfn.isNotNull(i)){let e=n.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条件不能为空")}catch(e){console.error(e)}return null},count:async function(e){let{vk:t,db:n,_:r}=m,{dbName:a,whereJson:i}=e;try{let e;return e=t.pubfn.isNotNull(i)?await n.collection(a).where(i).count():await n.collection(a).count(),e.total}catch(e){return console.error(e),null}},getSelectData:async function(e){let{vk:t,db:n,_:r}=m,{dbName:a,whereJson:i,pageIndex:o=1,pageSize:s=10,getCount:l=!1}=e;s<0&&(o=1,s=999999999,l=!0);let d=e.sortArr,c=e.fieldJson,u=0,p=!1;if(l){let e;e=t.pubfn.isNotNull(i)?await n.collection(a).where(i).count():await n.collection(a).count(),u=e.total,o1e3&&(l=1e3));let d=await y.getSelectData(e),{result:c,hasMore:u,total:p,getCount:f,pageIndex:g,pageSize:h,fieldJson:b}=d;h>0&&!p&&!f&&(p=h),r.pubfn.isNotNull(b)&&(c=c.field(b));let w={};if(f&&0===p)w={data:[]};else{let t=p;hi&&(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 _={};return _.total=f?p:w.data?w.data.length:0,_.hasMore=u,_.rows=w.data,_.code=0,_.msg="查询成功",_.pagination={pageIndex:g,pageSize:h},o&&(_.rows=_.rows[0]),s?_.rows:_},sum:async function(e){let{vk:t,db:n,_:r}=m,{dbName:a,fieldName:i,whereJson:o}=e;const s=n.command.aggregate;try{let e=n.collection(a).aggregate();t.pubfn.isNotNull(o)&&e.match(o),e.group({_id:null,num:s.sum("$"+i)});let r=await e.end();return r.data&&r.data[0]?r.data[0].num:0}catch(e){return console.error(e),null}},avg:async function(e){let{vk:t,db:n,_:r}=m,{dbName:a,fieldName:i,whereJson:o}=e;const s=n.command.aggregate;try{let e=n.collection(a).aggregate();t.pubfn.isNotNull(o)&&e.match(o),e.group({_id:null,num:s.avg("$"+i)});let r=await e.end();return r.data&&r.data[0]?r.data[0].num:null}catch(e){return console.error(e),null}},max:async function(e){let{vk:t,db:n,_:r}=m,{dbName:a,fieldName:i,whereJson:o}=e;const s=n.command.aggregate;try{let e=n.collection(a).aggregate();t.pubfn.isNotNull(o)&&e.match(o),e.group({_id:null,num:s.max("$"+i)});let r=await e.end();return r.data&&r.data[0]?r.data[0].num:null}catch(e){return console.error(e),null}},min:async function(e){let{vk:t,db:n,_:r}=m,{dbName:a,fieldName:i,whereJson:o}=e;const s=n.command.aggregate;try{let e=n.collection(a).aggregate();t.pubfn.isNotNull(o)&&e.match(o),e.group({_id:null,num:s.min("$"+i)});let r=await e.end();return r.data&&r.data[0]?r.data[0].num:null}catch(e){return console.error(e),null}},sample:async function(e){let{vk:t,db:n,_:r}=m,{dbName:a,whereJson:i,size:o,fieldJson:s}=e;n.command.aggregate;try{let e=n.collection(a).aggregate();return t.pubfn.isNotNull(i)&&e.match(i),e.sample({size:o}),t.pubfn.isNotNull(s)&&e.project(s),(await e.end()).data}catch(e){return console.error(e),null}},selects:async function(e){let{vk:t,db:n,_:r}=m;if(t.pubfn.isNotNull(e.treeProps))return await y.tree(e);let{dbName:a,foreignKey:i="_id",whereJson:o={},pageIndex:s=1,pageSize:l=10,getCount:d=!1,getOne:c=!1,getMain:u=!1,sortArr:p=[],fieldJson:f={},groupJson:g,foreignDB:h=[],lastWhereJson:b}=e;-1==l&&(s=1,l=999999999,d=!1),c&&(l=1,d=!1);let w=0,_=!1;if(d){if(t.pubfn.isNotNull(g)){let e;e=t.pubfn.isNotNull(o)?await n.collection(a).aggregate().match(o).group(g).count("total").end():await n.collection(a).aggregate().group(g).count("total").end(),w=e.data[0]?e.data[0].total:0}else{let e;e=t.pubfn.isNotNull(o)?await n.collection(a).where(o).count():await n.collection(a).count(),w=e.total}s=l),N.rows=v,N.code=0,N.msg="查询成功",N.pagination={pageIndex:s,pageSize:l},c&&(N.rows=N.rows[0]),u?N.rows:N},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]=y.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:p="",as:f,limit:g,whereJson:m,fieldJson:h,sortArr:b,foreignDB:w}=a[e];f||(f=d),n=t.pubfn.isNotNull(u)?u:"object"==typeof i?i[e]:i,l="array"===p.toLowerCase()?[s.cond({if:s.isArray("$$foreignKey"+n),then:s.in(["$"+c,"$$foreignKey"+n]),else:s.eq(["$"+c,"$$foreignKey"+n])})]:[s.eq(["$"+c,"$$foreignKey"+n])];let _=s.pipeline().match(r.expr(s.and(l)));if(t.pubfn.isNotNull(m)&&(_=_.match(m)),t.pubfn.isNotNull(b)){let e={};for(let t in b){let n=b[t],r=n.name,a=n.type;a=null==a||""==a||"asc"==a?1:-1,e[r]=a}_=_.sort(e)}g&&(_=_.limit(g)),t.pubfn.isNotNull(w)&&(_=y.addForeignDB({foreignDB:w,result:_})),t.pubfn.isNotNull(h)&&(h=y.foreignDBToProject({fieldJson:h,foreignDB:w}),_=_.project(h)),_=_.done();let N={};N["foreignKey"+n]="$"+n;let k={from:d,let:N,pipeline:_,as:f};o=o.lookup(k)}return o},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:p="",lastWhereJson:f}=l;if("lastWhereJson"===n&&!f)continue;if("lastWhereJson"!==n&&f)continue;let g=d;if(r.pubfn.isNotNull(l.fieldName)&&(g=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(p)>-1?"address":"[object Array]"===Object.prototype.toString.call(a)&&a.length>=2?"[]":"="),r.pubfn.isNotNull(a))if("custom"===c);else if("%%"===c)try{t[g]=new RegExp(a)}catch(e){}else if("%*"===c)try{t[g]=new RegExp("^"+a)}catch(e){}else if("*%"===c)try{t[g]=new RegExp(a+"$")}catch(e){}else if(">"===c)t[g]=t[g]?t[g].gt(a):i.gt(a);else if(">="===c)t[g]=t[g]?t[g].gte(a):i.gte(a);else if("<"===c)t[g]=t[g]?t[g].lt(a):i.lt(a);else if("<="===c)t[g]=t[g]?t[g].lte(a):i.lte(a);else if("in"===c)t[g]=i.in(a);else if("nin"===c)t[g]=i.nin(a);else if("!="===c)t[g]=i.neq(a);else if("[]"===c)t[g]=i.gte(a[0]).lte(a[1]);else if("[)"===c)t[g]=i.gte(a[0]).lt(a[1]);else if("(]"===c)t[g]=i.gt(a[0]).lte(a[1]);else if("()"===c)t[g]=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[g]=e}else t[g]=a}return t},addLastWhereJson:function(e,t={}){return y.addWhereJson(e,t,"lastWhereJson")},getTableData:async function(e){let{vk:t,db:n,_:r}=m,{dbName:a,data:i,getCount:o=!0,whereJson:s,fieldJson:l,sortArr:d,groupJson:c,foreignKey:u,foreignDB:p,lastWhereJson:f}=e,{pageIndex:g,pageSize:h,pagination:b,sortRule:w,formData:_,columns:N}=i;b&&(g=b.pageIndex,h=b.pageSize);let k={},v={},x=[],D={};return t.pubfn.isNotNull(d)?x=d:x.push({name:"_id",type:"desc"}),t.pubfn.isNotNull(w)&&(x=w),v=y.addWhereJson(i),D=y.addLastWhereJson(i),t.pubfn.isNotNull(s)&&t.pubfn.objectAssign(v,s),t.pubfn.isNotNull(l)&&t.pubfn.objectAssign(k,l),t.pubfn.isNotNull(f)&&t.pubfn.objectAssign(D,f),t.pubfn.isNullAll(p,c)?await t.baseDao.select({dbName:a,getCount:o,pageIndex:g,pageSize:h,fieldJson:k,whereJson:v,sortArr:x}):await t.baseDao.selects({dbName:a,foreignKey:u,getCount:o,pageIndex:g,pageSize:h,whereJson:v,fieldJson:k,sortArr:x,groupJson:c,foreignDB:p,lastWhereJson:D})},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,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 error",a),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}=e;d<=0&&(d=999999999);r.aggregate;let p,f=n.collection(a).aggregate();if(t.pubfn.isNotNull(i)&&(f=f.match(i)),t.pubfn.isNotNull(o)&&(f=f.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}f=f.sort(e)}f=f.skip((l-1)*d).limit(d),t.pubfn.isNotNull(u)&&(p=u.returnObject,delete u.returnObject,f=f.lookup(u)),f=await f.end();let g,y=f.data;if(p)for(let e in y)y[e][u.as]=y[e][u.as][0];let h=!1;if(c){let e=n.collection(a).aggregate();t.pubfn.isNotNull(i)&&(e=e.match(i)),t.pubfn.isNotNull(o)&&(e=e.group(o));let r=await e.count("total").end();g=r.data[0]?r.data[0].total:0,l=d;return{hasMore:h,total:g,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:p={}}=e;e.foreignDB||(e.foreignDB=[]);let{id:f="_id",parent_id:g="parent_id",children:h="children",level:b=10,limit:w=500}=p;if(b<1||b>20)throw new Error("msg:treeProps.level的范围必须在[1,20]");delete e.treeProps,e.whereJson||(e.whereJson={[g]:null}),e.foreignDB.unshift({dbName:a,localKey:f,foreignKey:g,as:h,limit:w,whereJson:p.whereJson,fieldJson:p.fieldJson||e.fieldJson,sortArr:p.sortArr,foreignDB:t.pubfn.copyObject(e.foreignDB)});let _=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 _(e){return JSON.parse(JSON.stringify(e))}var N={};function k(e){let t=[];for(let n=0;n0&&(n=N.treeToArrayFn(d[o],t,n,d[a])),s&&delete d[o]}return n},N.arrayToTree=function(e,t){let 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},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}},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.timeFormat=T.timeUtil.timeFormat,T.getFullTime=T.timeUtil.getFullTime,T.getWeekStartAndEnd=T.timeUtil.getWeekStartAndEnd,T.getCommonTime=T.timeUtil.getCommonTime,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]+$/).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){return"string"==typeof e&&(e=parseFloat(e)),(e/100).toFixed(2)},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){var r=JSON.parse(JSON.stringify(e));t=t.replace(/\s+/g,"")+".";for(var a="",i=0;ie[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,n){let r=e.length-t-n,a="";for(let e=0;e-1&&(n=!0);return n},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?l=a+"天前":i>0?l=i+"小时前":o>0?l=o+"分钟前":s>0&&(l=s+"秒前"),l},T.calcSize=function(e=0,t,n,r=2,a="auto"){let i=0,o="";if((e=parseFloat(e))-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};var S=T;var I={addPayOrders:async(e={},t)=>{let{vk:n,db:r,_:a}=t,{pay_type:i,out_trade_no:o,transaction_id:s,openid:l,total_fee:d,appid:c,original_data:u,wxpay_info:p,alipay_info:f,user_order_success:g}=e,m={};return m=await n.baseDao.add({dbName:"uni-pay-orders",dataJson:{pay_type:i,out_trade_no:o,transaction_id:s,openid:l,total_fee:d,appid:c,original_data:u,wxpay_info:p,alipay_info:f,user_order_success:g}}),m},findPayOrdersByOutTradeNo:async(e="___",t)=>{let{vk:n,db:r,_:a}=t,i={};return i=await n.baseDao.findByWhereJson({dbName:"uni-pay-orders",whereJson:{out_trade_no:e}}),i},updatePayOrdersById:async(e={},t)=>{let{vk:n,db:r,_:a}=t,i={},{id:o="___",dataJson:s}=e;return i=await n.baseDao.updateById({dbName:"uni-pay-orders",id:o,dataJson:s}),i}},A=I,E={paymentNotify:async function(e){let{event:t,context:n,vk:r,orderPaySuccess:a}=e,{config:i,uniPay:o}=r.unicloud;const s={vk:r,...r.unicloud},{wxConfigMp:l,wxConfigApp:d,wxConfigH5:c,aliConfigMp:u,aliConfigApp:p,aliConfigH5:f,alipayAppPayToH5Pay:g}=i["uni-pay"];(new Date).getTime();let m,y=t.path.substring(1);switch(g&&"alipay_app-plus"==y&&(y="alipay_h5"),y){case"wxpay_mp-weixin":m=o.initWeixin(l);break;case"wxpay_app-plus":m=o.initWeixin(d);break;case"wxpay_h5":m=o.initWeixin(c);break;case"alipay_mp-alipay":m=o.initAlipay(u);break;case"alipay_app-plus":m=o.initAlipay(p);break;case"alipay_h5":m=o.initAlipay(f);break;default:return console.log("---------参数错误---------"),{code:-1,msg:"参数错误"}}let h=await m.verifyPaymentNotify(t);if(!h)return console.log("---------!验证未通过!---------"),{};let b,w,{outTradeNo:_,totalFee:N,transactionId:k,resultCode:v,openid:x,appId:D}=h;if(0==y.indexOf("wxpay_")?b=h:0==y.indexOf("alipay_")&&(w=h),"SUCCESS"==v){let e=!1;"function"==typeof a&&(e=await a({data:h},s)),await A.addPayOrders({pay_type:y,out_trade_no:_,transaction_id:k,openid:x,total_fee:N,appid:D,original_data:t.body,wxpay_info:b,alipay_info:w,user_order_success:e},s)}return 0==y.indexOf("wxpay_")?{mpserverlessComposedResponse:!0,statusCode:200,headers:{"content-type":"text/xml"},body:""}:(y.indexOf("alipay_"),"SUCCESS")}},J={};E.init=function(e){J=e},E.createPayment=async(e={})=>{let{uniPay:t,config:n,vk:r,db:a,_:i}=J,{data:o={},provider:s,context:l}=e,{openid:d,outTradeNo:c,totalFee:u,subject:p="",body:f=""}=o,g={code:0,msg:"ok",outTradeNo:c};const{notifyUrl:m,alipayAppPayToH5Pay:y,sysServiceProviderId:h}=n["uni-pay"];let b=m[l.SPACEINFO.spaceId];if(r.pubfn.isNull(b)||0!==b.indexOf("http"))return{code:-1,msg:"请先配置正确的异步回调URL"};let w=s+"_"+l.PLATFORM;y&&"alipay_app-plus"==w&&(w="alipay_h5");let _=b+"/"+w,N=E.initUniPayInstance(w),k=E.getTradeType(w);try{d&&(o.openid=d),o.notifyUrl=_,o.tradeType=k,"alipay"===s&&void 0===o.extendParams&&(o.extendParams={sysServiceProviderId:h}),g.orderInfo=await N.getOrderInfo(o),"alipay"===s&&"10000"!==g.orderInfo.code&&(g.code=g.orderInfo.code,g.msg=g.orderInfo.subMsg)}catch(e){return console.error("error: ",e.message),{code:-3,msg:"获取支付信息失败,请稍后再试。"+e.message}}return g},E.queryPayment=async(e={})=>{let{outTradeNo:t,transactionId:n}=e,r={code:0,msg:"ok"};if(!t)return{code:-1,msg:"订单号不能为空"};let a=await A.findPayOrdersByOutTradeNo(t,J);if(!a)return{code:-2,msg:"订单不存在或订单未支付!"};const i=a.pay_type;let o=E.initUniPayInstance(i),s={};t?s.outTradeNo=t:s.transactionId=n;let l=await o.orderQuery(s);if("SUCCESS"===l.tradeState||"FINISHED"===l.tradeState)r={code:0,msg:"支付成功",orderPaid:!0};else{let e=l.tradeStateDesc||"未支付或已退款";e.indexOf("订单发生过退款")>-1&&(e="订单已退款"),r={code:-1,msg:e,orderPaid:!1}}return r},E.queryRefund=async(e={})=>{let{uniPay:t,config:n,vk:r,db:a,_:i}=J,{outTradeNo:o}=e,s={code:0,msg:"ok"};if(!o)return{code:-1,msg:"订单号不能为空"};let l=await A.findPayOrdersByOutTradeNo(o,J);if(!l)return{code:-2,msg:"订单不存在或订单未支付!"};const d=l.pay_type;let c,u=E.initUniPayInstance(d);try{let e={};e=d.indexOf("alipay")>-1?{outTradeNo:o,outRefundNo:l.refund_list[0].out_refund_no}:{outTradeNo:o},c=await u.refundQuery(e)}catch(e){return{code:-1,msg:"查询失败,请稍后再试!",err:e,queryResult:c}}if(c.refundFee>0){let e="退款成功";if(r.pubfn.isNotNull(l.refund_list)){e=`合计退款 ${l.refund_fee/100}\r\n`;for(let t in l.refund_list){let n=l.refund_list[t];e+=`${Number(t)+1}、 ${r.pubfn.timeFormat(n.refund_time,"yyyy:MM:dd hh:mm:ss")} \r\n退款 ${n.refund_fee/100} \r\n`}}s={code:0,msg:e,queryResult:c}}else s={code:-1,msg:"未退款",queryResult:c};return s},E.refund=async(e={})=>{let{uniPay:t,config:n,vk:r,db:a,_:i}=J,{outTradeNo:o,orderRefundSuccess:s,refundDesc:l="用户申请退款",refundFee:d}=e,c={code:0,msg:"ok"};if(!o)return{code:-1,msg:"订单号不能为空"};let u=await A.findPayOrdersByOutTradeNo(o,J);if(!u)return{code:-2,msg:"订单不存在或订单未支付!"};let p=u.refund_num||0;p++;let f=o+"-"+p,g=u.total_fee,m=d||g;const y=u.pay_type;let h=E.initUniPayInstance(y),b=!1;"function"==typeof s&&(b=await s({payOrder:u})),console.log(`---- ${o} -- ${f} -- ${g/100} -- ${m/100}`);try{c=await h.refund({outTradeNo:o,outRefundNo:f,totalFee:g,refundFee:m,refundDesc:l})}catch(e){return console.error(e),{code:-1,msg:e.message,err:e}}if(c.outTradeNo){c.code=0,c.msg="退款成功";try{let e=c.refundFee;if(y.indexOf("wxpay")>-1){e=(await h.refundQuery({outTradeNo:o})).refundFee}await A.updatePayOrdersById({id:u._id,dataJson:{refund_fee:e,refund_num:p,refund_list:i.unshift({refund_time:(new Date).getTime(),refund_fee:m,out_refund_no:f,refund_desc:l})}},J)}catch(e){console.error(e)}}else c.code=-1,c.msg="退款失败",c.subMsg&&(c.msg=c.subMsg);return c},E.initUniPayInstance=function(e){let{uniPay:t,config:n,vk:r}=J;const{wxConfigMp:a,wxConfigApp:i,wxConfigH5:o,aliConfigMp:s,aliConfigApp:l,aliConfigH5:d,notifyUrl:c,alipayAppPayToH5Pay:u,sysServiceProviderId:p}=n["uni-pay"];let f;switch(e){case"wxpay_mp-weixin":f=t.initWeixin(a);break;case"wxpay_app-plus":f=t.initWeixin(i);break;case"wxpay_h5":f=t.initWeixin(o);break;case"alipay_mp-alipay":f=t.initAlipay(s);break;case"alipay_app-plus":f=t.initAlipay(l);break;case"alipay_h5":f=t.initAlipay(d);break;default:throw new Error(`msg:不支持【${e}】支付方式`)}return f},E.getTradeType=function(e){return{"wxpay_mp-weixin":"JSAPI","wxpay_app-plus":"APP",wxpay_h5:"NATIVE","alipay_app-plus":"APP",alipay_h5:"NATIVE"}[e]};var O=E,$={},C={};$.get=function(e){let t,n=C[e];if(n){let{value:r,expired:a}=n;$.isExpired(e)?delete C[e]:t=r}return t},$.set=function(e,t,n=0){let r={value:t,expired:n>0?(new Date).getTime()+1e3*n:0};C[e]=r},$.del=function(e){delete C[e]},$.clear=function(e){if(e)for(let t in C)0==t.indexOf(e)&&delete C[t];else C={}},$.isExpired=function(e){let t=!0,n=C[e];return n&&(0==n.expired||n.expired>(new Date).getTime())&&(t=!1),t},$.getAll=function(e){let t={};if(e)for(let n in C)0==n.indexOf(e)&&(t[e]=C[e]);else t=C;for(let e in t)$.isExpired(e)&&(delete t[e],delete C[e]);return t};var B=$,P={},M={},q={};P.init=function(e){q=(M=e).vk.system.globalDataDao},P.get=async function(e,t=0,n,r=!0){return"function"==typeof n?P.autoGet(e,t,n,r):P._get(e)},P.autoGet=async function(e,t=0,n,r=!0){let a,{vk:i}=M;try{a=await P._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},P._get=async function(e){let t;try{let n=await q.find(e);if(n){let{value:r,expired_at:a}=n;P.isExpired(n)?await P.del(e):t=r}}catch(e){return}return t},P.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 q.set({key:r,value:t,expired_at:e})}catch(e){return console.error(e),{code:-1,msg:"异常"}}return a},P.del=async function(e){await q.del(e)},P.clear=async function(e){if(e)return await q.deleteByWhere({key:new RegExp("^"+e)})},P.list=async function(e){return await q.list(e)},P.count=async function(e){return await q.count(e)},P.isExpired=function(e){let t=!0;return e&&(!e.expired_at||0==e.expired_at||e.expired_at>(new Date).getTime())&&(t=!1),t},P.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 q.inc({key:r,value:t,expired_at:e})}catch(e){return{code:-1,msg:"异常",err:e}}return a},P.deleteExpired=async function(){await q.deleteExpired()};var j=P,F={},R={};function U(e){return e.code=e.errcode,e.msg=e.errmsg,e}F.init=function(e){R=e},F.decrypt={},F.decrypt.getPhoneNumber=async function(e={}){let{appid:t,encryptedData:n,iv:r,sessionKey:a}=e;e.appId&&(t=e.appId);let i,{vk:o,config:s,crypto:l,uniID:d}=R,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{if(i=s.uni["mp-weixin"].oauth.weixin.appid,o.pubfn.isNull(i))return{code:-1,msg:"请先配置微信小程序APPID"}}catch(e){return{code:-1,msg:"请先配置微信小程序APPID"}}return c.data=F.decrypt.decryptData({appid:i,encryptedData:n,iv:r,sessionKey:a}),c.phone=c.data.phoneNumber,c.mobile=c.data.phoneNumber,c},F.decrypt.decryptData=function(e={}){let t,{appid:n,encryptedData:r,iv:a,sessionKey:i}=e,{vk:o,crypto:s}=R,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},F.auth={},F.auth.getAppidInfo=function(e={}){let{appid:t,appsecret:n}=e,{vk:r,config:a}=R;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(a,"uni.mp-weixin.oauth.weixin")||{};t=e.appid,n=e.appsecret}if(r.pubfn.isNullOne(t,n))throw new Error("请先配置微信小程序appid和appsecret");return{appid:t,appsecret:n}},F.auth.getAccessTokenFn=async function(e={}){let{appid:t,appsecret:n}=F.auth.getAppidInfo(e),{vk:r,config:a}=R,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}},F.auth.getAccessToken=async function(e={}){let t,{appid:n,appsecret:r}=F.auth.getAppidInfo(e),{cache:a=!0}=e,{vk:i}=R,o="mp-weixin-"+n;if(a&&(t=await i.globalDataCache.get(o)),i.pubfn.isNull(t)){let n=await F.auth.getAccessTokenFn(e);0===n.code&&(t=n.access_token,await i.globalDataCache.set(o,t,240),await i.globalDataCache.deleteExpired())}return t},F.auth.code2Session=async function(e={}){let{appid:t,appsecret:n}=F.auth.getAppidInfo(e),{js_code:r}=e,{vk:a}=R,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"});return i.errcode?(console.error("code2Session失败:",i),{code:i.errcode,msg:i.errmsg,err:i}):{code:0,msg:"ok",session_key:i.session_key,openid:i.openid,unionid:i.unionid}},F.wxacode={},F.wxacode.getUnlimited=async function(e={}){let t,{vk:n}=R,{access_token:r,scene:a,page:i,width:o,auto_color:s,line_color:l,is_hyaline:d}=e;if(t=r||await F.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}});return c.length<500?{code:-1,msg:"生成小程序码失败,请重试!"}:Buffer.isBuffer(c)?c:{code:c.errcode,msg:c.errmsg,err:c}},F.urlscheme={},F.urlscheme.generate=async function(e={}){let{vk:t}=R,{jump_wxa:n={},is_expire:r,expire_time:a}=e,{path:i,query:o}=n,s=await F.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=U(l),l.code){case 40001:l.msg="access_token错误";break;case 40165:l.msg="小程序页面不存在!"}return l},F.security={},F.security.msgSecCheck=async function(e={}){let{vk:t}=R,{content:n}=e,r=await F.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=U(a),a.code){case 40001:a.msg="access_token错误";break;case 87014:a.msg="内容含有违法违规内容,请检查!"}return a},F.security.imgSecCheck=async function(e={}){let{vk:t}=R,{dataBuffer:n,formData:r,base64:a}=e,i=await F.auth.getAccessToken(e);if(!i)return{code:-1,msg:"获取access_token失败,请检查appid和appsecret是否正确"};a&&!n&&(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=U(o),o.code){case 40001:o.msg="access_token错误";break;case 87014:o.msg="图片内容含有违法违规内容,请检查!";break;case 40006:o.msg="图片大小不能超过1M"}return o},F.subscribeMessage={},F.subscribeMessage.send=async function(e={}){let{vk:t}=R,{touser:n,template_id:r,page:a,data:i,miniprogram_state:o="formal",lang:s="zh_CN"}=e,l=await F.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=U(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},F.livebroadcast={},F.livebroadcast.getLiveInfo=async function(e={}){let{vk:t}=R,{pageIndex:n=1,pageSize:r=100}=e,a=await F.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=U(s),s.code){case 941e4:s.msg="直播间列表为空"}return s},F.app={},F.app.auth={},F.app.auth.getAppidInfo=function(e={}){let{appid:t,appsecret:n}=e,{vk:r,config:a}=R;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(a,"uni.app-plus.oauth.weixin")||{};t=e.appid,n=e.appsecret}if(r.pubfn.isNullOne(t,n))throw new Error("请先配置微信小程序appid和appsecret");return{appid:t,appsecret:n}},F.app.auth.getAccessToken=async function(e={}){let{appid:t,appsecret:n}=F.app.auth.getAppidInfo(e),{vk:r,config:a}=R,{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"}},F.app.auth.getUserInfo=async function(e={}){let{appid:t,appsecret:n}=F.app.auth.getAppidInfo(e),{vk:r,config:a}=R,{access_token:i,openid:o,lang:s="zh-CN"}=e;if(!i)return{code:-1,msg:"access_token不能为空"};let l=await r.request({url:`https://api.weixin.qq.com/sns/userinfo?access_token=${i}&openid=${o}$lang=${s}`,method:"GET"});return l.errcode?(console.error("getUserInfo失败:",l),{code:l.errcode,msg:l.errmsg,err:l}):{...l,code:0,msg:"ok",avatar:l.headimgurl,gender:l.sex}};var z=F,L={},K={};L.init=function(e){K=e},L.open={},L.open.auth={},L.open.auth.getAppidInfo=function(e={}){let{appid:t,appsecret:n}=e,{vk:r,config:a}=K;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}=K,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}=K,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}=K,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 W=L,H={};H.weixin=z,H.baidu=W,H.init=function(e){H.weixin.init(e),H.baidu.init(e)};var V=H;const Z=/^multipart\/.+?(?:;\s*boundary=(?:(?:"(.+)")|(?:([^\s]+))))$/i,G=/Content-Disposition:\sform-data;\sname="(.+?)"(?:;\sfilename="(.+?)")?/i,Y=/Content-Type:\s(.+?)$/i;var Q={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(Z),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(G);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(Y)[1],t.fileContent=e[2];break;case 4:t.filename=decodeURIComponent(n[2]),t.contentType=e[1].toString().match(Y)[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 X="opendb-admin-menus";var ee={},te={};ee.init=function(e){te=e},ee.findRoleById=async(e="___")=>{let t,{vk:n,db:r,_:a}=te;return t=await n.baseDao.findByWhereJson({dbName:"uni-id-roles",whereJson:{role_id:e}}),t},ee.roleBindPermission=async(e={})=>{let{vk:t,db:n,_:r}=te,a={code:0,msg:""},{role_id:i="___",permissionList:o=[],reset:s=!1}=e;if(!s){let e=await ee.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},ee.roleBindMenu=async(e={})=>{let{vk:t,db:n,_:r}=te,a={code:0,msg:""},{role_id:i="___",menuList:o=[],reset:s=!1,addPermission:l=!1}=e,d=[],c=await ee.findRoleById(i),{menu:u=[],permission:p=[]}=c;if(s?d=re(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 ee.findMenuByIdsToPermission(o),n=[];if(s&&t.pubfn.isNotNull(d)){n=re(e,await ee.findMenuByIdsToPermission(d))}p=p.concat(e),p=re(n,p),p=[...new Set(p)],ee.roleBindPermission({role_id:i,permissionList:p,reset:!0})}return a},ee.findPermissionById=async(e="___")=>{let t,{vk:n,db:r,_:a}=te;return t=await n.baseDao.findByWhereJson({dbName:"uni-id-permissions",whereJson:{permission_id:e}}),t},ee.findMenuByIdsToPermission=async e=>{let{vk:t,db:n,_:r}=te,a=await ee.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},ee.listPermissionToTree=async(e={})=>{let t,{vk:n,db:r,_:a}=te,{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:p=500,whereJson:f}=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:p,whereJson:f,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},ee.findMenuById=async(e="___")=>{let t,{vk:n,db:r,_:a}=te;return t=await n.baseDao.findByWhereJson({dbName:X,whereJson:{menu_id:e}}),t},ee.findMenuByIds=async e=>{let t,{vk:n,db:r,_:a}=te;return n.pubfn.isNull(e)?[]:(t=(await n.baseDao.select({dbName:X,pageIndex:1,pageSize:500,whereJson:{menu_id:a.in(e)}})).rows,t)},ee.listMenuByRole=async(e={})=>{let{vk:t,db:n,_:r}=te,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:X,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},ee.menuBindPermission=async(e={})=>{let{vk:t,db:n,_:r}=te,a={code:0,msg:""},{menu_id:i="___",permissionList:o=[],reset:s=!1}=e;if(!s){let e=await ee.findMenuById(i),{permission:t=[]}=e;o=t.concat(o),o=[...new Set(o)]}return a.num=await t.baseDao.update({dbName:X,whereJson:{menu_id:i},dataJson:{permission:r.set(o)}}),a},ee.listMenuToTree=async(e={})=>{let t,{vk:n,db:r,_:a}=te,{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:p=500,whereJson:f}=c;t=await n.baseDao.selects({dbName:X,pageIndex:s,pageSize:o,getCount:i,whereJson:l,sortArr:d,treeProps:{id:"menu_id",parent_id:"parent_id",children:"children",level:u,limit:p,whereJson:f,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 ne=ee;function re(e,t){let n=new Set(e);return t.filter(e=>!n.has(e))}const ae="opendb-global-data";var ie={},oe={};ie.init=function(e){oe=e},ie.find=async e=>{let{vk:t,db:n,_:r}=oe,a={};return a=await t.baseDao.findById({dbName:ae,id:e}),a},ie.del=async e=>{let{vk:t,db:n,_:r}=oe,a={};return a=await t.baseDao.deleteById({dbName:ae,id:e}),a},ie.deleteByWhere=async e=>{let{vk:t,db:n,_:r}=oe,a={};return a=await t.baseDao.del({dbName:ae,whereJson:e}),a},ie.deleteExpired=async e=>{let{vk:t,db:n,_:r}=oe,a={},i=(new Date).getTime();return a=await t.baseDao.del({dbName:ae,whereJson:{expired_at:r.gt(0).lte(i)}}),a},ie.update=async e=>{let{vk:t,db:n,_:r}=oe,a={},{key:i,value:o,comment:s,expired_at:l}=e;return a=await t.baseDao.updateById({dbName:ae,id:i,dataJson:{value:r.set(o),comment:s,expired_at:l}}),a},ie.add=async e=>{let{vk:t,db:n,_:r}=oe,a={},{key:i,value:o,comment:s,expired_at:l}=e;return a=await t.baseDao.add({dbName:ae,dataJson:{_id:i,key:i,value:o,comment:s,expired_at:l}}),a},ie.count=async e=>{let{vk:t,db:n,_:r}=oe,a={};return a=await t.baseDao.count({dbName:ae,whereJson:e}),a},ie.set=async e=>{let t={code:0,msg:"ok"};return await ie.count({_id:e.key})>0?(t.num=await ie.update(e),t.mode="update"):(t.id=await ie.add(e),t.num=1,t.mode="add"),t},ie.inc=async e=>{let{vk:t,db:n,_:r}=oe,{key:a,value:i,expired_at:o}=e,s={},l=await t.baseDao.updateById({dbName:ae,id:a,dataJson:{value:r.inc(i),expired_at:o}});if(0==l){0===await ie.count({_id:a})&&(s.id=await ie.add(e),s.num=1,s.mode="add")}else s.num=l,s.mode="update";return s},ie.list=async e=>{let{vk:t,db:n,_:r}=oe,a={},{pageIndex:i,pageSize:o,whereJson:s,sortArr:l}=e;return a=await t.baseDao.select({dbName:ae,pageIndex:i,pageSize:o,whereJson:s,sortArr:l}),a};var se=ie,le={},de={init:function(e){le=e}},ce={specialUrlEncode:function(e){return(e=encodeURIComponent(e)).replace(/\+/g,"%20").replace(/\*/g,"%2A").replace(/%7E/g,"~")},sign:function(e,t){let{crypto:n}=le;return n.createHmac("sha1",e).update(t).digest("base64")}};de.sendSms=async function(e){let{vk:t,config:n}=le,{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 de.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 de.sendSmsByUnicloud(e)}}return u.requestParam={provider:r,phone:l},u},de.sendSmsByAliyun=async function(e){let{vk:t,config:n}=le,{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 p=[];for(let e in a)p.push(e);p.sort();let f=!1,g="";for(let e in p){let t=p[e];g+="&"+ce.specialUrlEncode(t)+"="+ce.specialUrlEncode(a[t])}g=g.substring(1);let m="GET&"+ce.specialUrlEncode("/")+"&"+ce.specialUrlEncode(g),y=ce.sign(o+"&",m),h=ce.specialUrlEncode(y),b="Signature="+h+"&"+g;f&&(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(y),console.log("\r\n=====signature====\r\n"),console.log(h),console.log("\r\n=========\r\n"),console.log(e+"/?"+b));t.pubfn.urlStringToJson(b);let w=await t.request({url:`${e}?${b}`,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}}}},de.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},de.sendSmsVerifyCode=async function(e){let t,{vk:n,config:r,uniID:a}=le,{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 ue=de,pe={};pe.sysDao=ne,pe.globalDataDao=se,pe.smsUtil=ue,pe.init=function(e){let t=["sysDao","globalDataDao","smsUtil"];for(let n in t){let r=t[n];"function"==typeof pe[r].init&&pe[r].init(e)}};var fe=pe,ge={};ge.router=s,ge.md5=g,ge.baseDao=h,ge.request=b,ge.pubfn=S,ge.uniPay=O,ge.temporaryCache=B,ge.globalDataCache=j,ge.openapi=V,ge.formDataUtil=Q,ge.system=fe,ge.requireCache={},ge.require=function(e){if(ge.requireCache&&ge.requireCache[e])return ge.requireCache[e];{const t=ge.unicloud.requireFn(ge.unicloud.baseDir+"/"+e);return ge.requireCache[e]=t,t}},ge.requireFn=function(e){try{return ge.unicloud.requireFn(e)}catch(e){return}},ge.use=function(e,t){for(let n in e)e[n]&&"function"==typeof e[n].init&&e[n].init(t),ge[n]=e[n]},ge.unicloud={},ge.init=function(e={}){if(ge.unicloud.requireFn=e.requireFn,e.configCenter||(e.configCenter=ge.requireFn("uni-config-center")),e.uniID||(e.uniID=ge.requireFn("uni-id")),e.uniPay||(e.uniPay=ge.requireFn("uni-pay")),e.middlewareService||(e.middlewareService=ge.requireFn("./middleware/index")),e.daoCenter||(e.daoCenter=ge.requireFn("./dao/index")),e.crypto||(e.crypto=ge.requireFn("crypto")),e.urlrewrite||(e.urlrewrite=ge.requireFn("./util/urlrewrite")),e.config||(e.config=e.configCenter({pluginId:"vk-unicloud"}).requireFile("index.js")),!e.db)try{e.db=uniCloud.database()}catch(e){}e.pubFun||(e.pubFun=ge.requireFn("./util/pubFunction")),ge.unicloud.configCenter=e.configCenter,ge.unicloud.config=e.config,ge.unicloud.uniID=e.uniID,ge.unicloud.uniPay=e.uniPay,ge.unicloud.db=e.db,ge.unicloud._=e.db.command,ge.unicloud.pubfn=ge.pubfn,ge.unicloud.middlewareService=e.middlewareService,ge.unicloud.pubFun=e.pubFun,ge.unicloud.customUtil=e.customUtil,ge.unicloud.baseDir=e.baseDir,ge.unicloud.crypto=e.crypto,ge.unicloud.urlrewrite=e.urlrewrite;const t={vk:ge,...ge.unicloud};ge.use({daoCenter:e.daoCenter,baseDao:ge.baseDao,openapi:ge.openapi,globalDataCache:ge.globalDataCache,system:ge.system,uniPay:ge.uniPay},t)};var me=ge;module.exports=me; +"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,c=await a.checkToken(e.uniIdToken,{needPermission:l,needUserInfo:i});if(c.code&&c.code>0)return c;if(c.userInfo){let e=c.userInfo;e.permission=c.permission,delete e.token,delete e.password,o.userInfo=e}if(o.uid=c.uid,c.token&&(o.token=c.token,o.tokenExpired=c.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=[],c=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:c,_:d}=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:d.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:d.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:d.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:d.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:d.in(p),match_mode:d.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,r);let s={code:t,msg:n};return r&&(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:c,middlewareService:d,pubFun:u,customUtil:f,crypto:p}=r.unicloud;const g=s.createInstance({context:n});if(r.pubfn.getData(a,"vk.system.serviceShutdown"))return{code:405,msg:r.pubfn.getData(a,"vk.system.serviceShutdownDescription")};try{uniCloud.vk=r}catch(e){}let m={event:t,context:n},h=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 t=e.body;e.isBase64Encoded&&(t=Buffer.from(t,"base64").toString("utf-8"));try{"string"==typeof t&&(t=JSON.parse(t)),n.data=Object.assign(n.data,t)}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:b,data:y,uniIdToken:w}=h;if([403].indexOf(h.code)>-1)return h;c.command.$=c.command.aggregate;let _={url:b,data:y,uniIdToken:w,util:{vk:r,config:a,pubFun:u,uniID:g,uniPay:l,db:c,_:c.command,$:c.command.aggregate,customUtil:f,crypto:p},originalParam:m};const N=i.getMiddleware(d);let k,v,x;try{if(k=await i.onActionExecuting(_,N),0!==k.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}(_,N,k);k.uid&&(y.uid=k.uid),_.filterResponse=k}catch(e){return await o({code:500,msg:`云函数 ${b} 的中间件 onActionExecuting 运行异常!`,err:e,serviceParam:_,middlewareService:N})}try{v=r.require("service/"+b)}catch(e){e||(e={});let{code:t,message:n=""}=e;return"MODULE_NOT_FOUND"==t&&n.indexOf("service/")>-1?await o({code:404,msg:`云函数 ${b} 不存在!`,serviceParam:_,middlewareService:N}):"MODULE_NOT_FOUND"==t&&n.indexOf("Cannot find module")>-1?await o({code:500,msg:n,err:e,serviceParam:_,middlewareService:N}):await o({code:500,msg:`云函数 ${b} 编译异常!`,err:e,serviceParam:_,middlewareService:N})}try{x=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&&"object"==typeof a&&(a.vk_uni_token={token:t.token,tokenExpired:t.tokenExpired});return a}({res:k,serviceParam:_,serviceMain:v})}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:N}):0===n.indexOf("msg:")?await o({code:501,msg:n.substring(4),err:e,serviceParam:_,middlewareService:N}):0===n.indexOf("Cannot read property 'mp-weixin' of undefined")?await o({code:501,msg:"请先绑定微信",err:e,serviceParam:_,middlewareService:N}):await o({code:500,msg:`云函数 ${b} 运行异常!`,err:e,serviceParam:_,middlewareService:N})}try{x=await i.onActionExecuted(_,N,x)}catch(e){return await o({code:500,msg:`云函数 ${b} 的中间件 onActionExecuted 运行异常!`,err:e,serviceParam:_,middlewareService:N})}return x};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 c(e,t,n,r,a,i,o){return l(t&n|~t&r,e,t,a,i,o)}function d(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 c=await h.getSelectData(e),{result:d,hasMore:u,total:f,getCount:p,pageIndex:g,fieldJson:b}=c;return d=d.skip((g-1)*o).limit(o),t.pubfn.isNotNull(b)&&(d=d.field(b)),d.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;try{let e=l.collection(a).doc(i);o&&(e=e.field(o));let t=await e.get();return"[object Array]"===Object.prototype.toString.call(t.data)?t.data[0]:t.data}catch(e){return console.error(e),null}},findByWhereJson:async function(e){let{vk:t,db:n,_:r}=m,{dbName:a,whereJson:i,fieldJson:o,sortArr:s}=e;try{if(t.pubfn.isNotNull(i)){let e=n.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条件不能为空")}catch(e){console.error(e)}return null},count:async function(e){let{vk:t,db:n,_:r}=m,{dbName:a,whereJson:i}=e;try{let e;return e=t.pubfn.isNotNull(i)?await n.collection(a).where(i).count():await n.collection(a).count(),e.total}catch(e){return console.error(e),null}},getSelectData:async function(e){let{vk:t,db:n,_:r}=m,{dbName:a,whereJson:i,pageIndex:o=1,pageSize:s=10,getCount:l=!1}=e;s<0&&(o=1,s=999999999,l=!0);let c=e.sortArr,d=e.fieldJson,u=0,f=!1;if(l){let e;e=t.pubfn.isNotNull(i)?await n.collection(a).where(i).count():await n.collection(a).count(),u=e.total,o1e3&&(l=1e3));let c=await h.getSelectData(e),{result:d,hasMore:u,total:f,getCount:p,pageIndex:g,pageSize:b,fieldJson:y}=c;b>0&&!f&&!p&&(f=b),r.pubfn.isNotNull(y)&&(d=d.field(y));let w={};if(p&&0===f)w={data:[]};else{let t=f;bi&&(n=i-t);let o=d.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 _={};return _.total=p?f:w.data?w.data.length:0,_.hasMore=u,_.rows=w.data,_.code=0,_.msg="查询成功",_.pagination={pageIndex:g,pageSize:b},o&&(_.rows=_.rows[0]),s?_.rows:_},sum:async function(e){let{vk:t,db:n,_:r}=m,{dbName:a,fieldName:i,whereJson:o}=e;const s=n.command.aggregate;try{let e=n.collection(a).aggregate();t.pubfn.isNotNull(o)&&e.match(o),e.group({_id:null,num:s.sum("$"+i)});let r=await e.end();return r.data&&r.data[0]?r.data[0].num:0}catch(e){return console.error(e),null}},avg:async function(e){let{vk:t,db:n,_:r}=m,{dbName:a,fieldName:i,whereJson:o}=e;const s=n.command.aggregate;try{let e=n.collection(a).aggregate();t.pubfn.isNotNull(o)&&e.match(o),e.group({_id:null,num:s.avg("$"+i)});let r=await e.end();return r.data&&r.data[0]?r.data[0].num:null}catch(e){return console.error(e),null}},max:async function(e){let{vk:t,db:n,_:r}=m,{dbName:a,fieldName:i,whereJson:o}=e;const s=n.command.aggregate;try{let e=n.collection(a).aggregate();t.pubfn.isNotNull(o)&&e.match(o),e.group({_id:null,num:s.max("$"+i)});let r=await e.end();return r.data&&r.data[0]?r.data[0].num:null}catch(e){return console.error(e),null}},min:async function(e){let{vk:t,db:n,_:r}=m,{dbName:a,fieldName:i,whereJson:o}=e;const s=n.command.aggregate;try{let e=n.collection(a).aggregate();t.pubfn.isNotNull(o)&&e.match(o),e.group({_id:null,num:s.min("$"+i)});let r=await e.end();return r.data&&r.data[0]?r.data[0].num:null}catch(e){return console.error(e),null}},sample:async function(e){let{vk:t,db:n,_:r}=m,{dbName:a,whereJson:i,size:o,fieldJson:s}=e;n.command.aggregate;try{let e=n.collection(a).aggregate();return t.pubfn.isNotNull(i)&&e.match(i),e.sample({size:o}),t.pubfn.isNotNull(s)&&e.project(s),(await e.end()).data}catch(e){return console.error(e),null}},selects:async function(e){let{vk:t,db:n,_:r}=m;if(t.pubfn.isNotNull(e.treeProps))return await h.tree(e);let{dbName:a,foreignKey:i="_id",whereJson:o={},pageIndex:s=1,pageSize:l=10,getCount:c=!1,getOne:d=!1,getMain:u=!1,sortArr:f=[],fieldJson:p={},groupJson:g,foreignDB:b=[],lastWhereJson:y}=e;-1==l&&(s=1,l=999999999,c=!1),d&&(l=1,c=!1);let w=0,_=!1;if(c){if(t.pubfn.isNotNull(y)){let e=n.collection(a).aggregate();t.pubfn.isNotNull(o)&&e.match(o),t.pubfn.isNotNull(g)&&e.group(g),t.pubfn.isNotNull(b)&&(e=h.addForeignDB({foreignDB:b,foreignKey:i,result:e})),e=e.match(y),e=await e.count("total").end(),w=e.data[0]?e.data[0].total:0}else if(t.pubfn.isNotNull(g)){let e;e=t.pubfn.isNotNull(o)?await n.collection(a).aggregate().match(o).group(g).count("total").end():await n.collection(a).aggregate().group(g).count("total").end(),w=e.data[0]?e.data[0].total:0}else{let e;e=t.pubfn.isNotNull(o)?await n.collection(a).where(o).count():await n.collection(a).count(),w=e.total}s=l),N.rows=v,N.code=0,N.msg="查询成功",N.pagination={pageIndex:s,pageSize:l},d&&(N.rows=N.rows[0]),u?N.rows:N},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:c,foreignKey:d,localKey:u,localKeyType:f="",as:p,limit:g,whereJson:m,fieldJson:b,sortArr:y,foreignDB:w}=a[e];p||(p=c),n=t.pubfn.isNotNull(u)?u:"object"==typeof i?i[e]:i,l="array"===f.toLowerCase()?[s.cond({if:s.isArray("$$foreignKey"+n),then:s.in(["$"+d,"$$foreignKey"+n]),else:s.eq(["$"+d,"$$foreignKey"+n])})]:[s.eq(["$"+d,"$$foreignKey"+n])];let _=s.pipeline().match(r.expr(s.and(l)));if(t.pubfn.isNotNull(m)&&(_=_.match(m)),t.pubfn.isNotNull(y)){let e={};for(let t in y){let n=y[t],r=n.name,a=n.type;a=null==a||""==a||"asc"==a?1:-1,e[r]=a}_=_.sort(e)}g&&(_=_.limit(g)),t.pubfn.isNotNull(w)&&(_=h.addForeignDB({foreignDB:w,result:_})),t.pubfn.isNotNull(b)&&(b=h.foreignDBToProject({fieldJson:b,foreignDB:w}),_=_.project(b)),_=_.done();let N={};N["foreignKey"+n]="$"+n;let k={from:c,let:N,pipeline:_,as:p};o=o.lookup(k)}return o},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:c,mode:d,defaultValue:u,type:f="",lastWhereJson:p}=l;if("lastWhereJson"===n&&!p)continue;if("lastWhereJson"!==n&&p)continue;let g=c;if(r.pubfn.isNotNull(l.fieldName)&&(g=l.fieldName),a=r.pubfn.isNotNull(l.value)?l.value:o[c],r.pubfn.isNull(a)&&r.pubfn.isNotNull(u)&&(a=u),r.pubfn.isNull(d)&&(d=["address","province","city","area"].indexOf(f)>-1?"address":"[object Array]"===Object.prototype.toString.call(a)&&a.length>=2?"[]":"="),r.pubfn.isNotNull(a))if("custom"===d);else if("%%"===d)try{t[g]=new RegExp(a)}catch(e){}else if("%*"===d)try{t[g]=new RegExp("^"+a)}catch(e){}else if("*%"===d)try{t[g]=new RegExp(a+"$")}catch(e){}else if(">"===d)t[g]=t[g]?t[g].gt(a):i.gt(a);else if(">="===d)t[g]=t[g]?t[g].gte(a):i.gte(a);else if("<"===d)t[g]=t[g]?t[g].lt(a):i.lt(a);else if("<="===d)t[g]=t[g]?t[g].lte(a):i.lte(a);else if("in"===d)t[g]=i.in(a);else if("nin"===d)t[g]=i.nin(a);else if("!="===d)t[g]=i.neq(a);else if("[]"===d)t[g]=i.gte(a[0]).lte(a[1]);else if("[)"===d)t[g]=i.gte(a[0]).lt(a[1]);else if("(]"===d)t[g]=i.gt(a[0]).lte(a[1]);else if("()"===d)t[g]=i.gt(a[0]).lt(a[1]);else if("address"===d){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[g]=e}else t[g]=a}return t},addLastWhereJson:function(e,t={}){return h.addWhereJson(e,t,"lastWhereJson")},getTableData:async function(e){let{vk:t,db:n,_:r}=m,{dbName:a,data:i,getCount:o=!0,whereJson:s,fieldJson:l,sortArr:c,groupJson:d,foreignKey:u,foreignDB:f,lastWhereJson:p}=e,{pageIndex:g,pageSize:b,pagination:y,sortRule:w,formData:_,columns:N}=i;y&&(g=y.pageIndex,b=y.pageSize);let k={},v={},x=[],D={};return t.pubfn.isNotNull(c)?x=c:x.push({name:"_id",type:"desc"}),t.pubfn.isNotNull(w)&&(x=w),v=h.addWhereJson(i),D=h.addLastWhereJson(i),t.pubfn.isNotNull(s)&&t.pubfn.objectAssign(v,s),t.pubfn.isNotNull(l)&&t.pubfn.objectAssign(k,l),t.pubfn.isNotNull(p)&&t.pubfn.objectAssign(D,p),t.pubfn.isNullAll(f,d)?await t.baseDao.select({dbName:a,getCount:o,pageIndex:g,pageSize:b,fieldJson:k,whereJson:v,sortArr:x}):await t.baseDao.selects({dbName:a,foreignKey:u,getCount:o,pageIndex:g,pageSize:b,whereJson:v,fieldJson:k,sortArr:x,groupJson:d,foreignDB:f,lastWhereJson:D})},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,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 error",a),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:c=10,getCount:d=!1,lookupJson:u}=e;c<=0&&(c=999999999);r.aggregate;let f,p=n.collection(a).aggregate();if(t.pubfn.isNotNull(i)&&(p=p.match(i)),t.pubfn.isNotNull(o)&&(p=p.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}p=p.sort(e)}p=p.skip((l-1)*c).limit(c),t.pubfn.isNotNull(u)&&(f=u.returnObject,delete u.returnObject,p=p.lookup(u)),p=await p.end();let g,h=p.data;if(f)for(let e in h)h[e][u.as]=h[e][u.as][0];let b=!1;if(d){let e=n.collection(a).aggregate();t.pubfn.isNotNull(i)&&(e=e.match(i)),t.pubfn.isNotNull(o)&&(e=e.group(o));let r=await e.count("total").end();g=r.data[0]?r.data[0].total:0,l=c;return{hasMore:b,total:g,rows:h,code:0,key:1,pageIndex:l,pageSize:c}},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:c=[],fieldJson:d={},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 _=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 _(e){return JSON.parse(JSON.stringify(e))}var N={};function k(e){let t=[];for(let n=0;n0&&(n=N.treeToArrayFn(c[o],t,n,c[a])),s&&delete c[o]}return n},N.arrayToTree=function(e,t){let n=_(e),{id:r="_id",parent_id:a="parent_id",children:i="children",deleteParentId:o=!1,need_field:s}=t,l=[],c={};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},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}},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.timeFormat=T.timeUtil.timeFormat,T.getFullTime=T.timeUtil.getFullTime,T.getWeekStartAndEnd=T.timeUtil.getWeekStartAndEnd,T.getCommonTime=T.timeUtil.getCommonTime,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){return"string"==typeof e&&(e=parseFloat(e)),(e/100).toFixed(2)},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){var r=JSON.parse(JSON.stringify(e));t=t.replace(/\s+/g,"")+".";for(var a="",i=0;ie[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,n){let r=e.length-t-n,a="";for(let e=0;e-1&&(n=!0);return n},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,c=o,d=!1,u=0;for(;t>0;)d?(u++,t-=a,c-=a):(d=!0,l++,c=o,t-=n,c-=n),c<=0&&(d=!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?l=a+"天前":i>0?l=i+"小时前":o>0?l=o+"分钟前":s>0&&(l=s+"秒前"),l},T.calcSize=function(e=0,t,n,r=2,a="auto"){let i=0,o="";if((e=parseFloat(e))-1){var o=a.indexOf('"',i),s=a.substring(i,o);if(o>i){var l=a.indexOf("---",o),c=a.substring(o+1,l).trim();n[s]=c}}}return n};var S=T,J={},E={};J.get=function(e){let t,n=E[e];if(n){let{value:r,expired:a}=n;J.isExpired(e)?delete E[e]:t=r}return t},J.set=function(e,t,n=0){let r={value:t,expired:n>0?(new Date).getTime()+1e3*n:0};E[e]=r},J.del=function(e){delete E[e]},J.clear=function(e){if(e)for(let t in E)0==t.indexOf(e)&&delete E[t];else E={}},J.isExpired=function(e){let t=!0,n=E[e];return n&&(0==n.expired||n.expired>(new Date).getTime())&&(t=!1),t},J.getAll=function(e){let t={};if(e)for(let n in E)0==n.indexOf(e)&&(t[e]=E[e]);else t=E;for(let e in t)J.isExpired(e)&&(delete t[e],delete E[e]);return t};var I=J,$={},A={},O={};$.init=function(e){O=(A=e).vk.system.globalDataDao},$.get=async function(e,t=0,n,r=!0){return"function"==typeof n?$.autoGet(e,t,n,r):$._get(e)},$.autoGet=async function(e,t=0,n,r=!0){let a,{vk:i}=A;try{a=await $._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},$._get=async function(e){let t;try{let n=await O.find(e);if(n){let{value:r,expired_at:a}=n;$.isExpired(n)?await $.del(e):t=r}}catch(e){return}return t},$.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 O.set({key:r,value:t,expired_at:e})}catch(e){return console.error(e),{code:-1,msg:"异常"}}return a},$.del=async function(e){await O.del(e)},$.clear=async function(e){if(e)return await O.deleteByWhere({key:new RegExp("^"+e)})},$.list=async function(e){return await O.list(e)},$.count=async function(e){return await O.count(e)},$.isExpired=function(e){let t=!0;return e&&(!e.expired_at||0==e.expired_at||e.expired_at>(new Date).getTime())&&(t=!1),t},$.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 O.inc({key:r,value:t,expired_at:e})}catch(e){return{code:-1,msg:"异常",err:e}}return a},$.deleteExpired=async function(){await O.deleteExpired()};var B=$,C={},M={};function j(e){return e.code=e.errcode,e.msg=e.errmsg,e}C.init=function(e){M=e},C.decrypt={},C.decrypt.getPhoneNumber=async function(e={}){let{appid:t,encryptedData:n,iv:r,sessionKey:a}=e;e.appId&&(t=e.appId);let i,{vk:o,config:s,crypto:l,uniID:c}=M,d={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{if(i=s.uni["mp-weixin"].oauth.weixin.appid,o.pubfn.isNull(i))return{code:-1,msg:"请先配置微信小程序APPID"}}catch(e){return{code:-1,msg:"请先配置微信小程序APPID"}}return d.data=C.decrypt.decryptData({appid:i,encryptedData:n,iv:r,sessionKey:a}),d.phone=d.data.phoneNumber,d.mobile=d.data.phoneNumber,d},C.decrypt.decryptData=function(e={}){let t,{appid:n,encryptedData:r,iv:a,sessionKey:i}=e,{vk:o,crypto:s}=M,l=new Buffer(i,"base64"),c=new Buffer(r,"base64"),d=new Buffer(a,"base64");try{let e=s.createDecipheriv("aes-128-cbc",l,d);e.setAutoPadding(!0),t=e.update(c,"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},C.auth={},C.auth.getAppidInfo=function(e={}){let{appid:t,appsecret:n}=e,{vk:r,config:a}=M;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(a,"uni.mp-weixin.oauth.weixin")||{};t=e.appid,n=e.appsecret}if(r.pubfn.isNullOne(t,n))throw new Error("请先配置微信小程序appid和appsecret");return{appid:t,appsecret:n}},C.auth.getAccessTokenFn=async function(e={}){let{appid:t,appsecret:n}=C.auth.getAppidInfo(e),{vk:r,config:a}=M,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}},C.auth.getAccessToken=async function(e={}){let t,{appid:n,appsecret:r}=C.auth.getAppidInfo(e),{cache:a=!0}=e,{vk:i}=M,o="mp-weixin-"+n;if(a&&(t=await i.globalDataCache.get(o)),i.pubfn.isNull(t)){let n=await C.auth.getAccessTokenFn(e);0===n.code&&(t=n.access_token,await i.globalDataCache.set(o,t,240),await i.globalDataCache.deleteExpired())}return t},C.auth.code2Session=async function(e={}){let{appid:t,appsecret:n}=C.auth.getAppidInfo(e),{js_code:r}=e,{vk:a}=M,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"});return i.errcode?(console.error("code2Session失败:",i),{code:i.errcode,msg:i.errmsg,err:i}):{code:0,msg:"ok",session_key:i.session_key,openid:i.openid,unionid:i.unionid}},C.wxacode={},C.wxacode.getUnlimited=async function(e={}){let t,{vk:n}=M,{access_token:r,scene:a,page:i,width:o,auto_color:s,line_color:l,is_hyaline:c}=e;if(t=r||await C.auth.getAccessToken(e),!t)return{code:-1,msg:"获取access_token失败,请检查appid和appsecret是否正确"};let d=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:c},dataType:"default",useContent:!0,headers:{encoding:null}});return d.length<500?{code:-1,msg:"生成小程序码失败,请重试!"}:Buffer.isBuffer(d)?d:{code:d.errcode,msg:d.errmsg,err:d}},C.urlscheme={},C.urlscheme.generate=async function(e={}){let{vk:t}=M,{jump_wxa:n={},is_expire:r,expire_time:a}=e,{path:i,query:o}=n,s=await C.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=j(l),l.code){case 40001:l.msg="access_token错误";break;case 40165:l.msg="小程序页面不存在!"}return l},C.security={},C.security.msgSecCheck=async function(e={}){let{vk:t}=M,{content:n}=e,r=await C.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=j(a),a.code){case 40001:a.msg="access_token错误";break;case 87014:a.msg="内容含有违法违规内容,请检查!"}return a},C.security.imgSecCheck=async function(e={}){let{vk:t}=M,{dataBuffer:n,formData:r,base64:a}=e,i=await C.auth.getAccessToken(e);if(!i)return{code:-1,msg:"获取access_token失败,请检查appid和appsecret是否正确"};a&&!n&&(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=j(o),o.code){case 40001:o.msg="access_token错误";break;case 87014:o.msg="图片内容含有违法违规内容,请检查!";break;case 40006:o.msg="图片大小不能超过1M"}return o},C.subscribeMessage={},C.subscribeMessage.send=async function(e={}){let{vk:t}=M,{touser:n,template_id:r,page:a,data:i,miniprogram_state:o="formal",lang:s="zh_CN"}=e,l=await C.auth.getAccessToken(e);if(!l)return{code:-1,msg:"获取access_token失败,请检查appid和appsecret是否正确"};let c=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(c=j(c),c.code){case 40003:c.msg="touser字段openid为空或者不正确";break;case 40037:c.msg="订阅模板id为空不正确";break;case 43101:c.msg="用户未订阅该消息";break;case 47003:c.msg="模板参数不准确,可能为空或者不满足规则,errmsg会提示具体是哪个字段出错";break;case 41030:c.msg="page路径不正确,需要保证在现网版本小程序中存在"}return c},C.livebroadcast={},C.livebroadcast.getLiveInfo=async function(e={}){let{vk:t}=M,{pageIndex:n=1,pageSize:r=100}=e,a=await C.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=j(s),s.code){case 941e4:s.msg="直播间列表为空"}return s},C.app={},C.app.auth={},C.app.auth.getAppidInfo=function(e={}){let{appid:t,appsecret:n}=e,{vk:r,config:a}=M;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(a,"uni.app-plus.oauth.weixin")||{};t=e.appid,n=e.appsecret}if(r.pubfn.isNullOne(t,n))throw new Error("请先配置微信小程序appid和appsecret");return{appid:t,appsecret:n}},C.app.auth.getAccessToken=async function(e={}){let{appid:t,appsecret:n}=C.app.auth.getAppidInfo(e),{vk:r,config:a}=M,{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"}},C.app.auth.getUserInfo=async function(e={}){let{appid:t,appsecret:n}=C.app.auth.getAppidInfo(e),{vk:r,config:a}=M,{access_token:i,openid:o,lang:s="zh-CN"}=e;if(!i)return{code:-1,msg:"access_token不能为空"};let l=await r.request({url:`https://api.weixin.qq.com/sns/userinfo?access_token=${i}&openid=${o}$lang=${s}`,method:"GET"});return l.errcode?(console.error("getUserInfo失败:",l),{code:l.errcode,msg:l.errmsg,err:l}):{...l,code:0,msg:"ok",avatar:l.headimgurl,gender:l.sex}};var q=C,P={},F={};P.init=function(e){F=e},P.open={},P.open.auth={},P.open.auth.getAppidInfo=function(e={}){let{appid:t,appsecret:n}=e,{vk:r,config:a}=F;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}},P.open.auth.getAccessTokenFn=async function(e={}){let{appid:t,appsecret:n}=P.open.auth.getAppidInfo(e),{vk:r,config:a}=F,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"}},P.open.auth.getAccessToken=async function(e={}){let t,{appid:n,appsecret:r}=P.open.auth.getAppidInfo(e),{cache:a=!0}=e,{vk:i}=F,o="openapi-baidu-"+n;if(a&&(t=await i.globalDataCache.get(o)),i.pubfn.isNull(t)){let n=await P.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},P.open.ocr={},P.open.ocr.business_license=async function(e={}){let{image:t,url:n}=e;return await P.open.request({...e,action:"ocr/v1/business_license",actionVersion:"2.0",data:{image:t,url:n}})},P.open.ocr.idcard=async function(e={}){let{image:t,url:n,id_card_side:r,detect_risk:a,detect_photo:i}=e;return await P.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}})},P.open.request=async function(e={}){let{vk:t}=F,n=await P.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 R=P,z={};z.weixin=q,z.baidu=R,z.init=function(e){z.weixin.init(e),z.baidu.init(e)};var U=z;const L=/^multipart\/.+?(?:;\s*boundary=(?:(?:"(.+)")|(?:([^\s]+))))$/i,K=/Content-Disposition:\sform-data;\sname="(.+?)"(?:;\sfilename="(.+?)")?/i,W=/Content-Type:\s(.+?)$/i;var V={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(L),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(K);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(W)[1],t.fileContent=e[2];break;case 4:t.filename=decodeURIComponent(n[2]),t.contentType=e[1].toString().match(W)[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 Z="opendb-admin-menus";var G={},H={};G.init=function(e){H=e},G.findRoleById=async(e="___")=>{let t,{vk:n,db:r,_:a}=H;return t=await n.baseDao.findByWhereJson({dbName:"uni-id-roles",whereJson:{role_id:e}}),t},G.roleBindPermission=async(e={})=>{let{vk:t,db:n,_:r}=H,a={code:0,msg:""},{role_id:i="___",permissionList:o=[],reset:s=!1}=e;if(!s){let e=await G.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},G.roleBindMenu=async(e={})=>{let{vk:t,db:n,_:r}=H,a={code:0,msg:""},{role_id:i="___",menuList:o=[],reset:s=!1,addPermission:l=!1}=e,c=[],d=await G.findRoleById(i),{menu:u=[],permission:f=[]}=d;if(s?c=Q(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 G.findMenuByIdsToPermission(o),n=[];if(s&&t.pubfn.isNotNull(c)){n=Q(e,await G.findMenuByIdsToPermission(c))}f=f.concat(e),f=Q(n,f),f=[...new Set(f)],G.roleBindPermission({role_id:i,permissionList:f,reset:!0})}return a},G.findPermissionById=async(e="___")=>{let t,{vk:n,db:r,_:a}=H;return t=await n.baseDao.findByWhereJson({dbName:"uni-id-permissions",whereJson:{permission_id:e}}),t},G.findMenuByIdsToPermission=async e=>{let{vk:t,db:n,_:r}=H,a=await G.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},G.listPermissionToTree=async(e={})=>{let t,{vk:n,db:r,_:a}=H,{getCount:i=!1,pageSize:o=500,pageIndex:s=1,whereJson:l={parent_id:null},sortArr:c=[{name:"sort",type:"asc"}],treeProps:d={}}=e,{level:u=3,limit:f=500,whereJson:p}=d;t=await n.baseDao.selects({dbName:"uni-id-permissions",pageIndex:s,pageSize:o,getCount:i,whereJson:l,sortArr:c,treeProps:{id:"permission_id",parent_id:"parent_id",children:"children",level:u,limit:f,whereJson:p,sortArr:c}});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},G.findMenuById=async(e="___")=>{let t,{vk:n,db:r,_:a}=H;return t=await n.baseDao.findByWhereJson({dbName:Z,whereJson:{menu_id:e}}),t},G.findMenuByIds=async e=>{let t,{vk:n,db:r,_:a}=H;return n.pubfn.isNull(e)?[]:(t=(await n.baseDao.select({dbName:Z,pageIndex:1,pageSize:500,whereJson:{menu_id:a.in(e)}})).rows,t)},G.listMenuByRole=async(e={})=>{let{vk:t,db:n,_:r}=H,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 c=[{name:"sort",type:"asc"}],d=await t.baseDao.selects({dbName:Z,pageIndex:1,pageSize:500,whereJson:s,sortArr:c,treeProps:{id:"menu_id",parent_id:"parent_id",children:"children",level:3,limit:500,whereJson:l,sortArr:c}});return a.menus=d.rows,a.menuList=t.pubfn.treeToArray(d.rows,{id:"menu_id",parent_id:"parent_id",children:"children"}),a},G.menuBindPermission=async(e={})=>{let{vk:t,db:n,_:r}=H,a={code:0,msg:""},{menu_id:i="___",permissionList:o=[],reset:s=!1}=e;if(!s){let e=await G.findMenuById(i),{permission:t=[]}=e;o=t.concat(o),o=[...new Set(o)]}return a.num=await t.baseDao.update({dbName:Z,whereJson:{menu_id:i},dataJson:{permission:r.set(o)}}),a},G.listMenuToTree=async(e={})=>{let t,{vk:n,db:r,_:a}=H,{getCount:i=!1,pageSize:o=500,pageIndex:s=1,whereJson:l={parent_id:null},sortArr:c=[{name:"sort",type:"asc"}],treeProps:d={}}=e,{level:u=3,limit:f=500,whereJson:p}=d;t=await n.baseDao.selects({dbName:Z,pageIndex:s,pageSize:o,getCount:i,whereJson:l,sortArr:c,treeProps:{id:"menu_id",parent_id:"parent_id",children:"children",level:u,limit:f,whereJson:p,sortArr:c}});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 Y=G;function Q(e,t){let n=new Set(e);return t.filter(e=>!n.has(e))}const X="opendb-global-data";var ee={},te={};ee.init=function(e){te=e},ee.find=async e=>{let{vk:t,db:n,_:r}=te,a={};return a=await t.baseDao.findById({dbName:X,id:e}),a},ee.del=async e=>{let{vk:t,db:n,_:r}=te,a={};return a=await t.baseDao.deleteById({dbName:X,id:e}),a},ee.deleteByWhere=async e=>{let{vk:t,db:n,_:r}=te,a={};return a=await t.baseDao.del({dbName:X,whereJson:e}),a},ee.deleteExpired=async e=>{let{vk:t,db:n,_:r}=te,a={},i=(new Date).getTime();return a=await t.baseDao.del({dbName:X,whereJson:{expired_at:r.gt(0).lte(i)}}),a},ee.update=async e=>{let{vk:t,db:n,_:r}=te,a={},{key:i,value:o,comment:s,expired_at:l}=e;return a=await t.baseDao.updateById({dbName:X,id:i,dataJson:{value:r.set(o),comment:s,expired_at:l}}),a},ee.add=async e=>{let{vk:t,db:n,_:r}=te,a={},{key:i,value:o,comment:s,expired_at:l}=e;return a=await t.baseDao.add({dbName:X,dataJson:{_id:i,key:i,value:o,comment:s,expired_at:l}}),a},ee.count=async e=>{let{vk:t,db:n,_:r}=te,a={};return a=await t.baseDao.count({dbName:X,whereJson:e}),a},ee.set=async e=>{let t={code:0,msg:"ok"};return await ee.count({_id:e.key})>0?(t.num=await ee.update(e),t.mode="update"):(t.id=await ee.add(e),t.num=1,t.mode="add"),t},ee.inc=async e=>{let{vk:t,db:n,_:r}=te,{key:a,value:i,expired_at:o}=e,s={},l=await t.baseDao.updateById({dbName:X,id:a,dataJson:{value:r.inc(i),expired_at:o}});if(0==l){0===await ee.count({_id:a})&&(s.id=await ee.add(e),s.num=1,s.mode="add")}else s.num=l,s.mode="update";return s},ee.list=async e=>{let{vk:t,db:n,_:r}=te,a={},{pageIndex:i,pageSize:o,whereJson:s,sortArr:l}=e;return a=await t.baseDao.select({dbName:X,pageIndex:i,pageSize:o,whereJson:s,sortArr:l}),a};var ne=ee,re={},ae={init:function(e){re=e}},ie={specialUrlEncode:function(e){return(e=encodeURIComponent(e)).replace(/\+/g,"%20").replace(/\*/g,"%2A").replace(/%7E/g,"~")},sign:function(e,t){let{crypto:n}=re;return n.createHmac("sha1",e).update(t).digest("base64")}};ae.sendSms=async function(e){let{vk:t,config:n}=re,{provider:r,appid:a,smsKey:i,smsSecret:o,signName:s,phone:l,templateId:c,data:d}=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 ae.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 ae.sendSmsByUnicloud(e)}}return u.requestParam={provider:r,phone:l},u},ae.sendSmsByAliyun=async function(e){let{vk:t,config:n}=re,{provider:r,appid:a,smsKey:i,smsSecret:o,signName:s,phone:l,templateId:c,data:d}=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 d&&(d=JSON.stringify(d));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:d,TemplateCode:c};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+="&"+ie.specialUrlEncode(t)+"="+ie.specialUrlEncode(a[t])}g=g.substring(1);let m="GET&"+ie.specialUrlEncode("/")+"&"+ie.specialUrlEncode(g),h=ie.sign(o+"&",m),b=ie.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}}}},ae.sendSmsByUnicloud=async function(e){let{provider:t,appid:n,smsKey:r,smsSecret:a,signName:i,phone:o,templateId:s,data:l}=e,c={code:0,msg:""};try{let e=await uniCloud.sendSms({smsKey:r,smsSecret:a,phone:o,templateId:s,data:l});c=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 c},ae.sendSmsVerifyCode=async function(e){let t,{vk:n,config:r,uniID:a}=re,{provider:i,phone:o,code:s,type:l,expiresIn:c=180}=e,d={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&&(c=e);let a=n.pubfn.getData(r,"uni.service.sms.name"),l=Math.ceil(c/60).toString();d=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`),d=await n.system.smsUtil.sendSms({provider:i,phone:o,templateId:t,data:{code:s}});return 0===d.code&&await a.setVerifyCode({mobile:o,code:s,expiresIn:c,type:l}),d};var oe=ae,se={};se.sysDao=Y,se.globalDataDao=ne,se.smsUtil=oe,se.init=function(e){let t=["sysDao","globalDataDao","smsUtil"];for(let n in t){let r=t[n];"function"==typeof se[r].init&&se[r].init(e)}};var le=se,ce={};ce.router=s,ce.md5=g,ce.baseDao=b,ce.request=y,ce.pubfn=S,ce.temporaryCache=I,ce.globalDataCache=B,ce.openapi=U,ce.formDataUtil=V,ce.system=le,ce.requireCache={},ce.require=function(e){if(ce.requireCache&&ce.requireCache[e])return ce.requireCache[e];{const t=ce.unicloud.requireFn(ce.unicloud.baseDir+"/"+e);return ce.requireCache[e]=t,t}},ce.requireFn=function(e){try{return ce.unicloud.requireFn(e)}catch(e){return}},ce.use=function(e,t){for(let n in e)e[n]&&"function"==typeof e[n].init&&e[n].init(t),ce[n]=e[n]},ce.unicloud={},ce.init=function(e={}){if(ce.unicloud.requireFn=e.requireFn,e.configCenter||(e.configCenter=ce.requireFn("uni-config-center")),e.uniID||(e.uniID=ce.requireFn("uni-id")),e.uniPay||(e.uniPay=ce.requireFn("uni-pay")),e.middlewareService||(e.middlewareService=ce.requireFn("./middleware/index")),e.daoCenter||(e.daoCenter=ce.requireFn("./dao/index")),e.crypto||(e.crypto=ce.requireFn("crypto")),e.urlrewrite||(e.urlrewrite=ce.requireFn("./util/urlrewrite")),e.config||(e.config=e.configCenter({pluginId:"vk-unicloud"}).requireFile("index.js")),!e.db)try{e.db=uniCloud.database()}catch(e){}ce.uniPay=ce.requireFn("vk-uni-pay"),e.pubFun||(e.pubFun=ce.requireFn("./util/pubFunction")),ce.unicloud.configCenter=e.configCenter,ce.unicloud.config=e.config,ce.unicloud.uniID=e.uniID,ce.unicloud.uniPay=e.uniPay,ce.unicloud.db=e.db,ce.unicloud._=e.db.command,ce.unicloud.pubfn=ce.pubfn,ce.unicloud.middlewareService=e.middlewareService,ce.unicloud.pubFun=e.pubFun,ce.unicloud.customUtil=e.customUtil,ce.unicloud.baseDir=e.baseDir,ce.unicloud.crypto=e.crypto,ce.unicloud.urlrewrite=e.urlrewrite;const t={vk:ce,...ce.unicloud};ce.use({daoCenter:e.daoCenter,baseDao:ce.baseDao,openapi:ce.openapi,globalDataCache:ce.globalDataCache,system:ce.system},t)};var de=ce;module.exports=de; 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 2f4b463..eeb8a67 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.2.0", + "version": "2.2.1", "description": "【云函数端SDK】VK云函数路由模式uniCloud开发框架,在router目录下执行 npm i vk-unicloud 进行安装和升级", "main": "index.js", "homepage": "https://gitee.com/vk-uni/vk-uni-cloud-router.git", diff --git a/uni_modules/vk-unicloud/vk_modules/vk-unicloud-page/libs/function/index.js b/uni_modules/vk-unicloud/vk_modules/vk-unicloud-page/libs/function/index.js index 0bb0bf4..3940f04 100644 --- a/uni_modules/vk-unicloud/vk_modules/vk-unicloud-page/libs/function/index.js +++ b/uni_modules/vk-unicloud/vk_modules/vk-unicloud-page/libs/function/index.js @@ -47,7 +47,7 @@ pubfn.setClipboardData = setClipboardData; /** * 日期格式化 * @params {Date || Number} date 需要格式化的时间 - * vk.pubfn.timeFormat(new Date(),"yyyy:MM:dd hh:mm:ss"); + * vk.pubfn.timeFormat(new Date(),"yyyy-MM-dd hh:mm:ss"); */ pubfn.timeFormat = pubfn.timeUtil.timeFormat; /** @@ -198,7 +198,7 @@ pubfn.test = function (str, type){ case 'english': //英文 return new RegExp(/^[a-zA-Z]+$/).test(str); case 'chinese': //中文 - return new RegExp(/^[\\u4E00-\\u9FA5]+$/).test(str); + return new RegExp(/^[\u4e00-\u9fa5]+$/gi).test(str); case 'lower': //小写 return new RegExp(/^[a-z]+$/).test(str); case 'upper': //大写 diff --git "a/\344\275\277\347\224\250\345\270\256\345\212\251/2\343\200\201\345\277\253\351\200\237\344\270\212\346\211\213 - \345\256\211\350\243\205\346\255\245\351\252\244.md" "b/\344\275\277\347\224\250\345\270\256\345\212\251/2\343\200\201\345\277\253\351\200\237\344\270\212\346\211\213 - \345\256\211\350\243\205\346\255\245\351\252\244.md" index e676426..ce96f4b 100644 --- "a/\344\275\277\347\224\250\345\270\256\345\212\251/2\343\200\201\345\277\253\351\200\237\344\270\212\346\211\213 - \345\256\211\350\243\205\346\255\245\351\252\244.md" +++ "b/\344\275\277\347\224\250\345\270\256\345\212\251/2\343\200\201\345\277\253\351\200\237\344\270\212\346\211\213 - \345\256\211\350\243\205\346\255\245\351\252\244.md" @@ -10,13 +10,15 @@ ### 通常一个完整的项目分为`client端`(客户端)、`admin端`(管理端)、`service端`(服务端,这里指云函数端) #### 这里需要分三种情况 -#### 第一种:你之前已经在用 `vk-unicloud-router` 框架开发H5、小程序、APP的开发者。 +#### [第一种](#一):你之前已经在用 `vk-unicloud-router` 框架开发H5、小程序、APP的开发者。 -#### 第二种:你之前是用别的框架开发H5、小程序、APP,现在只想用VK框架单独开发 admin 项目。 +#### [第二种](#二):你之前是用别的框架开发H5、小程序、APP,现在只想用VK框架单独开发 admin 项目。 -#### 第三种:你的项目刚开始,`client端`和`admin端`都还没开发。 +#### [第三种](#三):你的项目刚开始,`client端`和`admin端`都还没开发。 +### 一 ### 情况一 + #### 思路:因为云函数会互相覆盖,因此我们可以把 `service端(云函数端)` 统一放在 `client端`的项目中,而`admin端`项目 直接绑定`client端`项目 #### 安装步骤: ##### 1、把`admin端` 内的 `uniCloud/router/service/admin`内的以下文件复制到你之前的`client端`项目 `uniCloud/router/service/admin`内(复制整个目录) @@ -32,15 +34,18 @@ opendb-admin-menus 菜单表 ##### 4、把`admin端` 内的 `components/vk-data-input-editor`目录复制到你之前的`client端`项目 `components`目录内(没有`components`目录则新建) ##### 5、完成 -### 情况二 (已完成情况一的请直接跳过情况二和情况三) +### 二 +### 情况二 +#### (已完成情况一的请直接跳过情况二和情况三) #### 安装步骤: ##### 1、在`uniCloud/cloudfunctions/router` 目录执行 `npm i` ##### 2、在`项目根目录` 目录执行 `npm i` ##### 3、右键`uniCloud`运行云服务空间初始化向导 ##### 4、完成 - +### 三 ### 情况三 + #### 安装步骤: ##### 建议你先使用`vk-unicloud-router`框架进行`client端`开发,`client端`开发完成后,使用 `vk-unicloud-admin` 开发 `admin端` ##### 当然你也可以先开发 `admin端`,再开发 `client端`。 diff --git "a/\344\275\277\347\224\250\345\270\256\345\212\251/4\343\200\201\344\270\207\350\203\275\350\241\250\346\240\274 - \346\220\234\347\264\242\347\273\204\344\273\266 - vk-data-table-query.md" "b/\344\275\277\347\224\250\345\270\256\345\212\251/4\343\200\201\344\270\207\350\203\275\350\241\250\346\240\274 - \346\220\234\347\264\242\347\273\204\344\273\266 - vk-data-table-query.md" index 58a6c55..a303207 100644 --- "a/\344\275\277\347\224\250\345\270\256\345\212\251/4\343\200\201\344\270\207\350\203\275\350\241\250\346\240\274 - \346\220\234\347\264\242\347\273\204\344\273\266 - vk-data-table-query.md" +++ "b/\344\275\277\347\224\250\345\270\256\345\212\251/4\343\200\201\344\270\207\350\203\275\350\241\250\346\240\274 - \346\220\234\347\264\242\347\273\204\344\273\266 - vk-data-table-query.md" @@ -31,13 +31,14 @@ | 参数 | 说明 | 类型 | 默认值 | 可选值 | |------------------|-------------------------------|---------|--------|-------| | v-model | 绑定查询表单数据源 | Object | - | - | -| columns | 字段渲染规则 | Array | - | - | +| columns | 字段渲染规则 | Array | - | [查看columns](#columns) | | show-reset | 是否显示重置按钮 | Boolean | false | true | | main-columns | 在页面上直接显示的字段名数组,此值若不为空,则会显示高级搜索按钮 | Array | - | - | | drawer | 高级搜索的抽屉弹窗的属性(详情见element的drawer文档)| Object | - | | search-text | 搜索按钮的文本 | String | 搜索 | - | | senior-search-text | 高级搜索按钮的文本 | String | 高级搜索 | - | +### columns ### columns与万能表单的columns相似 @@ -48,14 +49,14 @@ | type | 组件类型 | String | 无 | - | | width | 组件宽度 | Number | 无 | - | | placeholder | 输入前的提示 | String | - | - | -| mode | 查询模式 | String | = | 见下方 | +| mode | 查询模式 | String | = | [查看mode](#mode) | | fieldName | 数据库字段名称,默认=key的值 | String | key的值 | - | | lastWhereJson | 是否是连表后的where条件 | Boolean | false | true | | hidden | 是否隐藏该字段 | Boolean | false | true | | show | 显示规则,page代表显示在页面上,drawer代表显示在高级搜索中 | Array | ["page"] | ["page","drawer"] | - +#### mode #### columns 中 mode 参数详情 | 值 | 说明 diff --git "a/\344\275\277\347\224\250\345\270\256\345\212\251/4\343\200\201\344\270\207\350\203\275\350\241\250\346\240\274 - vk.baseDao.getTableData.md" "b/\344\275\277\347\224\250\345\270\256\345\212\251/4\343\200\201\344\270\207\350\203\275\350\241\250\346\240\274 - vk.baseDao.getTableData.md" index f3bf26a..5c4a800 100644 --- "a/\344\275\277\347\224\250\345\270\256\345\212\251/4\343\200\201\344\270\207\350\203\275\350\241\250\346\240\274 - vk.baseDao.getTableData.md" +++ "b/\344\275\277\347\224\250\345\270\256\345\212\251/4\343\200\201\344\270\207\350\203\275\350\241\250\346\240\274 - vk.baseDao.getTableData.md" @@ -19,6 +19,7 @@ | formData | 查询条件数据源 | Object | - | - | | columns | 静态模式 - 总记录数 | Array | - | - | +#### mode #### columns 中 mode 参数详情 | 值 | 说明 |------------|-------------------| @@ -125,7 +126,7 @@ queryForm1:{ | type | 组件类型 | String | 无 | - | | width | 组件宽度 | Number | 无 | - | | placeholder | 输入前的提示 | String | - | - | -| mode | 查询模式 | String | = | 见下方 | +| mode | 查询模式 | String | = | [查看mode](#mode) | | fieldName | 数据库字段名称,默认=key的值 | String | key的值 | - | | lastWhereJson | 是否是连表后的where条件 | Boolean | false | true | | hidden | 是否隐藏组件 | Boolean | false | true | diff --git "a/\344\275\277\347\224\250\345\270\256\345\212\251/4\343\200\201\344\270\207\350\203\275\350\241\250\346\240\274.md" "b/\344\275\277\347\224\250\345\270\256\345\212\251/4\343\200\201\344\270\207\350\203\275\350\241\250\346\240\274.md" index 30360b7..faac5a3 100644 --- "a/\344\275\277\347\224\250\345\270\256\345\212\251/4\343\200\201\344\270\207\350\203\275\350\241\250\346\240\274.md" +++ "b/\344\275\277\347\224\250\345\270\256\345\212\251/4\343\200\201\344\270\207\350\203\275\350\241\250\346\240\274.md" @@ -44,7 +44,7 @@ export default { | dataPreprocess | 动态模式 - 云函数返回的数据进行预处理 | function(list) | - | - | | data | 静态模式 - 列表数据 | Array | 无 | - | | total | 静态模式 - 总记录数 | Number | 无 | - | -| columns | 通用 - 字段显示规则 | Array | [] | 看下方详细说明 | +| columns | 通用 - 字段显示规则 | Array | [] | [查看columns](#columns) | | height | 通用 - table的高度 | Number | 无 | - | | max-height | 通用 - table的最大高度 | Number | 无 | - | | row-height | 通用 - 行高 | Number | 无 | - | @@ -54,10 +54,10 @@ export default { | pagination | 通用 - 显示分页器 | Boolean | false | true | | page-size | 通用 - 每页显示数量 | Number | 10 | - | | page-sizes | 通用 - 每页显示数量选择列表 | Array | [1, 5, 10, 20, 50, 100, 1000] | - | -| right-btns | 通用 - 右侧显示的按钮列表 | Array | [] | 看下方详细说明 | +| right-btns | 通用 - 右侧显示的按钮列表 | Array | [] | [查看right-btns](#right-btns) | | right-btns-type | 通用 - 右侧显示的按钮类型 | String | "button" | "text" | -| right-btns-more | 通用 - 右侧更多按钮 | Array | [] | 看下方详细说明 | -| custom-right-btns | 通用 - 自定义右侧按钮 | Array | [] | 看下方详细说明 | +| right-btns-more | 通用 - 右侧更多按钮 | Array | [] | [查看right-btns-more](#right-btns-more) | +| custom-right-btns | 通用 - 自定义右侧按钮 | Array | [] | [查看custom-right-btns](#custom-right-btns) | | row-key | 通用 - 行数据的 Key | Function,String | "_id" | - | | empty-text | 通用 - 空数据时显示的文本内容 | String | "暂无数据" | - | | default-expand-all | 通用 - 是否默认展开所有行,当 Table 包含展开行存在或者为树形表格时有效 | Boolean | false | true | @@ -69,14 +69,14 @@ export default { | highlight-current-row | 通用 - 是否要高亮当前行 | Boolean | true | false | | detail-dialog-width | 通用 - 详情弹窗的宽度 | Number,String | "830px" | - | | multiple | 通用 - 可多选 |Boolean | true | false | -| default-sort | 默认排序规则 |Object | - | - | +| default-sort | 默认排序规则 |Object | - | [查看default-sort](#default-sort) | | show-summary | 通用 - 是否需要显示合计行 |Boolean | false | true | -| summary-method | 通用 - 自定义合计的计算函数(详情见下方) |Function | - | - | +| summary-method | 通用 - 自定义合计的计算函数(详情见下方) |Function | - | [查看summary-method](#summary-method) | | total-option | 通用 - 需要自动统计的行(详情见下方) |Array | - | - | -#### default-sort 详情 +#### default-sort | 参数 | 说明 | 类型 | 默认值 | 可选值 | |------------------|-------------------------------|---------|--------|-------| | name | 需要排序的字段名 | String | - | - | @@ -179,14 +179,14 @@ that.$refs.table1.exportExcel({ ``` ### 详细说明 - +#### columns #### columns是一个数组,数组内每个元素有以下属性 | 参数 | 说明 | 类型 | 默认值 | 可选值 | |------- |-----------|---------|-------|-------| | key | 键名 | String | 无 | - | | title | 标题 | String | 无 | - | -| type | 类型 | String | 无 | 见下方详情 | +| type | 类型 | String | 无 | [查看type](#type) | | width | 宽度 | Number | 无 | - | | minWidth | 最小宽度(设置此值会自动填充宽度) | Number | 无 | - | | alignt | 对其方式 | String | center | left 、right | @@ -197,7 +197,8 @@ that.$refs.table1.exportExcel({ | defaultValue | 默认值 | String | 无 | - | | formatter | 自定义格式化函数 | function(val, row, column, index) | - | - | -#### type类型 +#### type +#### type(类型) ```js table1:{ columns:[ @@ -270,7 +271,7 @@ table1:{ ``` - +#### right-btns #### right-btns(右侧按钮列表) ```html ``` - +#### summary-method #### 万能表格合计列的示例 #### 自定义函数方法,如果涉及到金额,则需要使用summary-method属性进行自定义,代码如下 ```html diff --git "a/\344\275\277\347\224\250\345\270\256\345\212\251/5\343\200\201\344\270\207\350\203\275\350\241\250\345\215\225.md" "b/\344\275\277\347\224\250\345\270\256\345\212\251/5\343\200\201\344\270\207\350\203\275\350\241\250\345\215\225.md" index fa1a980..ba49bfb 100644 --- "a/\344\275\277\347\224\250\345\270\256\345\212\251/5\343\200\201\344\270\207\350\203\275\350\241\250\345\215\225.md" +++ "b/\344\275\277\347\224\250\345\270\256\345\212\251/5\343\200\201\344\270\207\350\203\275\350\241\250\345\215\225.md" @@ -112,7 +112,7 @@ export default { | action | vk框架云函数地址 | String | 无 | - | | before-action | action请求前拦截器 | Function | 无 | - | | form-type | 表单类型,用于复用表单 | String | 无 | - | -| columns | 通用 - 字段规则 | Array | [] | 看下方详细说明 | +| columns | 通用 - 字段规则 | Array | [] | [查看columns](#columns) | | loading | 表单是否在请求中 | Boolean | false | true | | label-width | 左侧label宽度 | String,Number | "80px" | - | | width | 表单宽度 | Number,String | 无 | - | @@ -178,19 +178,20 @@ export default { ### 详细说明 - +#### columns #### columns是一个数组,数组内每个元素有以下属性,每个元素代表一个表单元素 | 参数 | 说明 | 类型 | 默认值 | 可选值 | |------- |-----------|---------|-------|-------| | key | 键名 | String | 无 | - | | title | 标题 | String | 无 | - | -| type | 类型 | String | 无 | 见下方详情 | +| type | 类型 | String | 无 | [查看type](#type) | | width | 宽度 | Number | 无 | - | | tips | 下方的提示 | String | 无 | - | | disabled | 是否禁用 | Boolean | false | true | | showLabel | 是否显示label | Boolean | true | false | +#### type #### type类型(更多请见:`/pages_template/components/form/form-pro`) ```js form1:{ diff --git "a/\344\275\277\347\224\250\345\270\256\345\212\251/\345\206\205\347\275\256\347\273\204\344\273\266\345\217\202\346\225\260\350\257\264\346\230\216/3\343\200\201money \351\207\221\351\242\235\350\276\223\345\205\245.md" "b/\344\275\277\347\224\250\345\270\256\345\212\251/\345\206\205\347\275\256\347\273\204\344\273\266\345\217\202\346\225\260\350\257\264\346\230\216/3\343\200\201money \351\207\221\351\242\235\350\276\223\345\205\245.md" index d3dd0c6..aff16ab 100644 --- "a/\344\275\277\347\224\250\345\270\256\345\212\251/\345\206\205\347\275\256\347\273\204\344\273\266\345\217\202\346\225\260\350\257\264\346\230\216/3\343\200\201money \351\207\221\351\242\235\350\276\223\345\205\245.md" +++ "b/\344\275\277\347\224\250\345\270\256\345\212\251/\345\206\205\347\275\256\347\273\204\344\273\266\345\217\202\346\225\260\350\257\264\346\230\216/3\343\200\201money \351\207\221\351\242\235\350\276\223\345\205\245.md" @@ -17,6 +17,7 @@ | max | 最大输入 | Number | - | - | | rightText | 右侧文字后缀 | String | 元 | - | | precision | 精度(小数点位数) | Number | 2 | - | +| readonly | 原生属性,是否只读 | boolean| false | true | ## 万能表格使用方式 diff --git "a/\344\275\277\347\224\250\345\270\256\345\212\251/\345\206\205\347\275\256\347\273\204\344\273\266\345\217\202\346\225\260\350\257\264\346\230\216/4\343\200\201number \346\225\260\345\255\227\350\276\223\345\205\245.md" "b/\344\275\277\347\224\250\345\270\256\345\212\251/\345\206\205\347\275\256\347\273\204\344\273\266\345\217\202\346\225\260\350\257\264\346\230\216/4\343\200\201number \346\225\260\345\255\227\350\276\223\345\205\245.md" index 85eafb3..76f9dae 100644 --- "a/\344\275\277\347\224\250\345\270\256\345\212\251/\345\206\205\347\275\256\347\273\204\344\273\266\345\217\202\346\225\260\350\257\264\346\230\216/4\343\200\201number \346\225\260\345\255\227\350\276\223\345\205\245.md" +++ "b/\344\275\277\347\224\250\345\270\256\345\212\251/\345\206\205\347\275\256\347\273\204\344\273\266\345\217\202\346\225\260\350\257\264\346\230\216/4\343\200\201number \346\225\260\345\255\227\350\276\223\345\205\245.md" @@ -22,6 +22,7 @@ | controlsPosition |控制按钮位置| String | - | right | | step | 步长 | Number| - | - | | stepStrictly | 是否必须是步长的倍数 | false | true | +| readonly | 原生属性,是否只读 | boolean| false | true | ## 万能表格使用方式 diff --git "a/\344\275\277\347\224\250\345\270\256\345\212\251/\345\206\205\347\275\256\347\273\204\344\273\266\345\217\202\346\225\260\350\257\264\346\230\216/5\343\200\201percentage \347\231\276\345\210\206\346\257\224\350\276\223\345\205\245.md" "b/\344\275\277\347\224\250\345\270\256\345\212\251/\345\206\205\347\275\256\347\273\204\344\273\266\345\217\202\346\225\260\350\257\264\346\230\216/5\343\200\201percentage \347\231\276\345\210\206\346\257\224\350\276\223\345\205\245.md" index 83182e3..3d3e4c1 100644 --- "a/\344\275\277\347\224\250\345\270\256\345\212\251/\345\206\205\347\275\256\347\273\204\344\273\266\345\217\202\346\225\260\350\257\264\346\230\216/5\343\200\201percentage \347\231\276\345\210\206\346\257\224\350\276\223\345\205\245.md" +++ "b/\344\275\277\347\224\250\345\270\256\345\212\251/\345\206\205\347\275\256\347\273\204\344\273\266\345\217\202\346\225\260\350\257\264\346\230\216/5\343\200\201percentage \347\231\276\345\210\206\346\257\224\350\276\223\345\205\245.md" @@ -17,6 +17,7 @@ | max | 最大输入 | Number | - | - | | rightText | 右侧文字后缀 | String | % | - | | precision | 精度(小数点位数) | Number | 2 | - | +| readonly | 原生属性,是否只读 | boolean| false | true | ## 万能表格使用方式 diff --git "a/\344\275\277\347\224\250\345\270\256\345\212\251/\345\206\205\347\275\256\347\273\204\344\273\266\345\217\202\346\225\260\350\257\264\346\230\216/6\343\200\201discount \346\212\230\346\211\243\350\276\223\345\205\245.md" "b/\344\275\277\347\224\250\345\270\256\345\212\251/\345\206\205\347\275\256\347\273\204\344\273\266\345\217\202\346\225\260\350\257\264\346\230\216/6\343\200\201discount \346\212\230\346\211\243\350\276\223\345\205\245.md" index f1b614b..268f7f8 100644 --- "a/\344\275\277\347\224\250\345\270\256\345\212\251/\345\206\205\347\275\256\347\273\204\344\273\266\345\217\202\346\225\260\350\257\264\346\230\216/6\343\200\201discount \346\212\230\346\211\243\350\276\223\345\205\245.md" +++ "b/\344\275\277\347\224\250\345\270\256\345\212\251/\345\206\205\347\275\256\347\273\204\344\273\266\345\217\202\346\225\260\350\257\264\346\230\216/6\343\200\201discount \346\212\230\346\211\243\350\276\223\345\205\245.md" @@ -17,6 +17,7 @@ | max | 最大输入 | Number | - | - | | rightText | 右侧文字后缀 | String | 折 | - | | precision | 精度(小数点位数) | Number | 2 | - | +| readonly | 原生属性,是否只读 | boolean| false | true | ## 万能表格使用方式 -- GitLab