diff --git a/README/2.4/2.4.1.md b/README/2.4/2.4.1.md new file mode 100644 index 0000000000000000000000000000000000000000..361aec663ea0ff66fec9ebb21c2131d69ea2af2d --- /dev/null +++ b/README/2.4/2.4.1.md @@ -0,0 +1,7 @@ +* 1、【新增】`vk.pubfn.string2Number` 将能转成数字的字符串值转Number类型(支持字符串、对象、数组)(深度遍历) +* 2、【优化】`vk.callFunctionUtil.updateRequestGlobalParam` 设置全局请求参数 `regExp` 参数支持数组(满足数组内任意正则即算匹配) [点击查看](https://vkdoc.fsq.pub/client/pages/updateRequestGlobalParam.html) + + +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +##### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 diff --git a/changelog.md b/changelog.md index cad4d333dae2d938b88298779ad29db4fee78f90..b61f2dccd6923f96da02aba8838eb8ffa83ac9b0 100644 --- a/changelog.md +++ b/changelog.md @@ -1,3 +1,12 @@ +## 2.4.1(2021-09-30) +* 1、【新增】`vk.pubfn.string2Number` 将能转成数字的字符串值转Number类型(支持字符串、对象、数组)(深度遍历) +* 2、【优化】`vk.callFunctionUtil.updateRequestGlobalParam` 设置全局请求参数 `regExp` 参数支持数组(满足数组内任意正则即算匹配) [点击查看](https://vkdoc.fsq.pub/client/pages/updateRequestGlobalParam.html) + + +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +##### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 + ## 2.4.0(2021-09-28) * 1、【重要】支持微信公众号登录(有头像和昵称)详情见示例项目:`pages_template/openapi/h5-weixin/h5-weixin` * 2、【优化】APP使用微信登录时,有头像和昵称 详情见示例项目:`pages_template/uni-id/weixin/weixin` diff --git a/package.json b/package.json index 8c005552171ff6bea600df2e8dbebec7c426de7d..e7f27e77567091f6a3848da4408202dd408f00d9 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "id": "vk-cloud-router", "displayName": "【开箱即用】vk-unicloud-router - 云函数路由模式开发框架 - 已集成uni-id 框架内置了众多API、工具包,为你的业务扫平障碍。", - "version": "2.4.0", + "version": "2.4.1", "description": "这是一个unicloud快速开发框架+项目模板(已包含核心库)支持URL化,众多现成API供你使用(登录、注册、短信、微信百度服务端API等等)为你的业务扫平障碍。内置小白也能轻松上手的数据库API。", "keywords": [ "vk-unicloud-router", diff --git a/uni_modules/vk-unicloud/changelog.md b/uni_modules/vk-unicloud/changelog.md index dfbd1f2e24b7fe62f3b2050ee39453283c32337e..56b294fb2eff6e2232851276b35a3c425fc66485 100644 --- a/uni_modules/vk-unicloud/changelog.md +++ b/uni_modules/vk-unicloud/changelog.md @@ -1,3 +1,12 @@ +## 2.4.2(2021-09-30) +* 1、【新增】`vk.pubfn.string2Number` 将能转成数字的字符串值转Number类型(支持字符串、对象、数组)(深度遍历) +* 2、【优化】`vk.callFunctionUtil.updateRequestGlobalParam` 设置全局请求参数 `regExp` 参数支持数组(满足数组内任意正则即算匹配) [点击查看](https://vkdoc.fsq.pub/client/pages/updateRequestGlobalParam.html) + + +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +##### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 + ## 2.4.1(2021-09-28) * 1、【重要】支持微信公众号登录(有头像和昵称)详情见示例项目:`pages_template/openapi/h5-weixin/h5-weixin` * 2、【优化】APP使用微信登录时,有头像和昵称 详情见示例项目:`pages_template/uni-id/weixin/weixin` diff --git a/uni_modules/vk-unicloud/package.json b/uni_modules/vk-unicloud/package.json index 04ece7ffcc3a7887f80b0a04fa4eff77026563a3..7772a7bc28437f4e0d9ab4fada3078a32f8154c8 100644 --- a/uni_modules/vk-unicloud/package.json +++ b/uni_modules/vk-unicloud/package.json @@ -1,7 +1,7 @@ { "id": "vk-unicloud", "displayName": "vk-unicloud-router开发框架核心库 - 已集成uni-id 框架内置了众多API。", - "version": "2.4.1", + "version": "2.4.2", "description": "此为vk-unicloud-router框架核心库(新手建议下载完整框架项目)已集成uni-id支持云函数url化。众多现成API,内置小白也能轻松上手的数据库API。使你项目刚起步进度就是百分之50", "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 8bc75d2e438f487f74fb801c3e875fe1fe9cf423..bcd764d2b143a4ece60d22ce663abd7b2614872b 100644 --- a/uni_modules/vk-unicloud/uniCloud/cloudfunctions/common/vk-unicloud/index.js +++ b/uni_modules/vk-unicloud/uniCloud/cloudfunctions/common/vk-unicloud/index.js @@ -1 +1 @@ -"use strict";var e={regExpTest:function(e,t){let n=!1;if("string"==typeof e){new RegExp(e).test(t)&&(n=!0)}else if("object"==typeof e)for(let r=0;r{let{url:t,data:n={},util:r}=e,{uniID:a}=r,{need_user_info:i=!0}=n,o={code:-1,msg:""},s=0==t.indexOf("admin/");s&&(i=!0);let l=t.indexOf("/sys/")>-1,d=await a.checkToken(e.uniIdToken,{needPermission:l,needUserInfo:i});if(d.code&&d.code>0)return d;if(d.userInfo){let e=d.userInfo;e.permission=d.permission,delete e.token,delete e.password,o.userInfo=e}if(o.uid=d.uid,d.token&&(o.token=d.token,o.tokenExpired=d.tokenExpired),s){if(!o.userInfo)return{code:403,msg:"need_user_info必须为true"};{let e=o.userInfo.role||[];if(!o.userInfo.allow_login_background&&!e.includes("admin"))return{code:403,msg:"您无权限登录后台"}}}return o.code=0,o.msg="ok",o}};async function r(e={},t){let{vk:n,db:r,_:a}=t,{whereJson:i={},fieldJson:o={},justNeedID:s=!1}=e;s&&(o={permission_id:!0}),i.enable=!0;let l=[],d=await n.baseDao.select({dbName:"uni-id-permissions",pageIndex:1,pageSize:500,fieldJson:o,whereJson:i});if(s)for(let e=0;e{let{url:t,util:a}=e,{uniID:i,config:o,pubFun:s,vk:l,db:d,_:c}=a,u={code:-1,msg:""};const f=n;if(u=await f.main(e),0!==u.code)return u;if(!u.userInfo)return{code:403,msg:"请去除need_user_info:false"};if(u.userInfo.role||(u.userInfo.role=[]),u.userInfo.role.includes("admin"))return u;if(!u.userInfo.allow_login_background)return{code:403,msg:"您无权限登录后台"};let p=[];if(u.userInfo.role.includes("admin-lv3")){let e=await r({whereJson:{level:c.in([1,2,3])},justNeedID:!0},a);l.pubfn.isNotNull(e)&&(p=p.concat(e))}if(u.userInfo.role.includes("admin-lv2")){let e=await r({whereJson:{level:c.in([1,2])},justNeedID:!0},a);l.pubfn.isNotNull(e)&&(p=p.concat(e))}if(u.userInfo.role.includes("admin-lv1")){let e=await r({whereJson:{level:c.in([1])},justNeedID:!0},a);l.pubfn.isNotNull(e)&&(p=p.concat(e))}if(u.userInfo.role.includes("query-all")){let e=await r({whereJson:{curd_category:4,level:c.neq(4)},justNeedID:!0},a);l.pubfn.isNotNull(e)&&(p=p.concat(e))}let g=await async function(e,t){let{vk:n,db:r,_:a}=t,{role:i}=e;if(n.pubfn.isNull(i))return[];return(await n.baseDao.select({dbName:"uni-id-roles",whereJson:{role_id:a.in(i),enable:!0},fieldJson:{permission:!0}})).rows}({role:u.userInfo.role},a);for(let e in g){let{permission:t}=g[e];l.pubfn.isNotNull(t)&&(p=p.concat(t))}if(0==p.length)return{code:403,msg:"权限不足"};p=[...new Set(p)];let m=await r({whereJson:{permission_id:c.in(p),match_mode:c.in([1,2])}},a),h=!1;for(let e=0;e0}({myPermission:p,url:t},a)&&(h=!0)}return h?(u.code=0,u.msg="ok",u):{code:403,msg:"权限不足"}}}.main}];var i={onActionExecuting:async(e,n=[])=>{let r={code:403,msg:"access denied",filterStack:[]},{url:a}=e;for(let i in n){let o=n[i],{mode:s="onActionExecuting",enable:l=!0}=o;if(l&&"onActionExecuting"===s&&t.regExpTest(o.regExp,a)){e.filterResponse=r;let t=await o.main(e);if(t.filterId=o.id,r.filterStack.push(t),0!==t.code){r=t;break}r=Object.assign(r,t)}}return r},onActionExecuted:async(e,n=[],r)=>{let{url:a}=e;for(let i in n){let o=n[i],{mode:s,enable:l=!0}=o;if(l&&"onActionExecuted"===s&&t.regExpTest(o.regExp,a)){let t=await o.main(e,r);if(t){if(0!==t.code){r=t;break}r=Object.assign(r,t)}}}return r},onActionIntercepted:async(e,n=[],r)=>{let{url:a}=e;for(let i in n){let o=n[i],{mode:s,enable:l=!0}=o;if(l&&"onActionIntercepted"===s&&t.regExpTest(o.regExp,a)){let t=await o.main(e,r);if(t){if(0!==t.code){r=t;break}r=Object.assign(r,t)}}}return r},onActionError:async(e,n=[],r)=>{let{url:a}=e;for(let i in n){let o=n[i],{mode:s,enable:l=!0}=o;if(l&&"onActionError"===s&&t.regExpTest(o.regExp,a)){let t=await o.main(e,r);if(t){if(0!==t.code){r=t;break}r=Object.assign(r,t)}}}return r},getMiddleware:function(e){let t=[];if(e){let n=[...a,...e];n.sort((function(e,t){return e.index-t.index})),t=n.filter((e,t,r)=>{var a=[];return n.forEach((e,t)=>{a.push(e.id)}),a.indexOf(e.id)===t})}else t=a;return t}};async function o(e={}){let{code:t,msg:n,err:r,serviceParam:a,middlewareService:o}=e;console.error(n,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:f,crypto:p}=r.unicloud;if(r.pubfn.getData(a,"vk.system.serviceShutdown"))return{code:405,msg:r.pubfn.getData(a,"vk.system.serviceShutdownDescription")};let g={event:t,context:n},m=function(e,t){let n={};if(e.httpMethod){let{path:r=""}=e;if("/"===r[0]&&(r=r.substring(1)),r){let a,{urlrewrite:i={}}=t.unicloud,{rule:o}=i,s=t.pubfn.getData(i,"config.accessOnlyInRule"),l=!1;if(o)for(let e in o){let n=o[e],i=t.pubfn.regExpExecToTemplate(r,e,n);if(i){l=!0;let e=i.split("?");r=e[0],a=t.pubfn.urlStringToJson(e[1]);break}}if(!l&&s)return{mpserverlessComposedResponse:!0,statusCode:403,code:403,headers:{"content-type":"application/json"},body:JSON.stringify({code:403,msg:"access denied"})};if(n={data:{}},t.pubfn.isNotNull(a)&&(n.data=Object.assign(n.data,a)),e.queryStringParameters){let t=e.queryStringParameters;"string"==typeof t&&(t=JSON.parse(t)),n.data=Object.assign(n.data,t)}if(e.body){let 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:y}=m;if([403].indexOf(m.code)>-1)return m;b&&(b.vk_appid&&(n.APPID=b.vk_appid),b.vk_platform&&(n.PLATFORM=b.vk_platform));const w=s.createInstance({context:n});d.command.$=d.command.aggregate;let N={vk:r,config:a,pubFun:u,uniID:w,uniPay:l,db:d,_:d.command,$:d.command.aggregate,customUtil:f,crypto:p,env:{APPID:n.APPID,PLATFORM:n.PLATFORM}};try{uniCloud.vk=r,uniCloud.env=N.env}catch(e){}let _={url:h,data:b,uniIdToken:y,util:N,originalParam:g};const k=i.getMiddleware(c);let v,x,D;try{if(v=await i.onActionExecuting(_,k),0!==v.code)return await async function(e,t,n){try{n=await i.onActionIntercepted(e,t,n)}catch(n){return await o({code:500,msg:`云函数 ${e.url} 的中间件 onActionIntercepted 运行异常!`,err:n,serviceParam:e,middlewareService:t})}return n}(_,k,v);v.uid&&(b.uid=v.uid),_.filterResponse=v}catch(e){return await o({code:500,msg:`云函数 ${h} 的中间件 onActionExecuting 运行异常!`,err:e,serviceParam:_,middlewareService:k})}try{x=r.require("service/"+h)}catch(e){e||(e={});let{code:t,message:n=""}=e;return"MODULE_NOT_FOUND"==t&&n.indexOf("service/")>-1?await o({code:404,msg:`云函数 ${h} 不存在!`,serviceParam:_,middlewareService:k}):"MODULE_NOT_FOUND"==t&&n.indexOf("Cannot find module")>-1?await o({code:500,msg:n,err:e,serviceParam:_,middlewareService:k}):await o({code:500,msg:`云函数 ${h} 编译异常!`,err:e,serviceParam:_,middlewareService:k})}try{D=await async function(e={}){let{res:t,serviceParam:n,serviceMain:r}=e;t.uid&&(n.uid=t.uid);t.userInfo&&(n.userInfo=t.userInfo);let a=await r.main(n);t.token&&"object"==typeof a&&(a.vk_uni_token={token:t.token,tokenExpired:t.tokenExpired});return a}({res:v,serviceParam:_,serviceMain:x})}catch(e){e||(e={});let{code:t,message:n=""}=e;return"InternalServerError"==t&&n.indexOf("_id_ dup key")>-1?await o({code:500,msg:"vk.baseDao.add : _id不能重复添加",err:e,serviceParam:_,middlewareService:k}):0===n.indexOf("msg:")?await o({code:501,msg:n.substring(4),err:e,serviceParam:_,middlewareService:k}):0===n.indexOf("Cannot read property 'mp-weixin' of undefined")?await o({code:501,msg:"请先绑定微信",err:e,serviceParam:_,middlewareService:k}):await o({code:500,msg:`云函数 ${h} 运行异常!`,err:e,serviceParam:_,middlewareService:k})}try{D=await i.onActionExecuted(_,k,D)}catch(e){return await o({code:500,msg:`云函数 ${h} 的中间件 onActionExecuted 运行异常!`,err:e,serviceParam:_,middlewareService:k})}return D};function l(e,t,n,r,a,i){return p((o=p(p(t,e),p(r,i)))<<(s=a)|o>>>32-s,n);var o,s}function d(e,t,n,r,a,i,o){return l(t&n|~t&r,e,t,a,i,o)}function c(e,t,n,r,a,i,o){return l(t&r|n&~r,e,t,a,i,o)}function u(e,t,n,r,a,i,o){return l(t^n^r,e,t,a,i,o)}function f(e,t,n,r,a,i,o){return l(n^(t|~r),e,t,a,i,o)}function p(e,t){var n=(65535&e)+(65535&t);return(e>>16)+(t>>16)+(n>>16)<<16|65535&n}var g=function(e){return function(e){for(var t="",n=0;n<4*e.length;n++)t+="0123456789abcdef".charAt(e[n>>2]>>n%4*8+4&15)+"0123456789abcdef".charAt(e[n>>2]>>n%4*8&15);return t}(function(e,t){e[t>>5]|=128<>>9<<4)]=t;for(var n=1732584193,r=-271733879,a=-1732584194,i=271733878,o=0;o>5]|=(255&e.charCodeAt(n/8))<500)return await h.selectAll(e);let d=await h.getSelectData(e),{result:c,hasMore:u,total:f,getCount:p,pageIndex:g,fieldJson:b}=d;return c=c.skip((g-1)*o).limit(o),t.pubfn.isNotNull(b)&&(c=c.field(b)),c.get().then(e=>{let t={};return p?(t.total=f,t.hasMore=u):(t.total=e.data?e.data.length:0,t.hasMore=t.total>=o),t.rows=e.data,t.code=0,t.msg="查询成功",t.pagination={pageIndex:g,pageSize:o},s&&(t.rows=t.rows[0]),l?t.rows:t})},findById:async function(e){let{vk:t,db:n,_:r}=m,{dbName:a,id:i,fieldJson:o,db:s}=e,l=(s||n).collection(a).doc(i);o&&(l=l.field(o));let d=await l.get();return"[object Array]"===Object.prototype.toString.call(d.data)?d.data[0]:d.data},findByWhereJson:async function(e){let{vk:t,db:n,_:r}=m,{dbName:a,whereJson:i,fieldJson:o,sortArr:s}=e;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条件不能为空");return null},count:async function(e){let t,{vk:n,db:r,_:a}=m,{dbName:i,whereJson:o,foreignDB:s,foreignKey:l,groupJson:d,lastWhereJson:c}=e;if(n.pubfn.isNotNull(s)||n.pubfn.isNotNull(d)){let e=r.collection(i).aggregate();return n.pubfn.isNotNull(o)&&e.match(o),n.pubfn.isNotNull(d)&&e.group(d),n.pubfn.isNotNull(s)&&(e=h.addForeignDB({foreignDB:s,foreignKey:l,result:e})),n.pubfn.isNotNull(c)&&(e=e.match(c)),e=await e.count("total").end(),e.data[0]?e.data[0].total:0}return t=n.pubfn.isNotNull(o)?await r.collection(i).where(o).count():await r.collection(i).count(),t.total},getSelectData:async function(e){let{vk:t,db:n,_:r}=m,{dbName:a,whereJson:i,pageIndex:o=1,pageSize:s=10,getCount:l=!1}=e;s<0&&(o=1,s=999999999,l=!0);let d=e.sortArr,c=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 d=await h.getSelectData(e),{result:c,hasMore:u,total:f,getCount:p,pageIndex:g,pageSize:b,fieldJson:y}=d;b>0&&!f&&!p&&(f=b),r.pubfn.isNotNull(y)&&(c=c.field(y));let w={};if(p&&0===f)w={data:[]};else{let t=f;bi&&(n=i-t);let o=c.skip(t).limit(n).get();r.push(o)}try{w=(await Promise.all(r)).reduce((e,t)=>({data:e.data.concat(t.data),errMsg:e.errMsg}))}catch(t){throw console.error("vk.baseDao.select-异常",e,t),new Error("msg:vk.baseDao.select-异常")}}let N={};return N.total=p?f:w.data?w.data.length:0,N.hasMore=u,N.rows=w.data,N.code=0,N.msg="查询成功",N.pagination={pageIndex:g,pageSize:b},o&&(N.rows=N.rows[0]),s?N.rows:N},sum:async function(e){let{vk:t,db:n,_:r}=m,{dbName:a,fieldName:i,whereJson:o}=e;const s=n.command.aggregate;let l=n.collection(a).aggregate();t.pubfn.isNotNull(o)&&l.match(o),l.group({_id:null,num:s.sum("$"+i)});let d=await l.end();return d.data&&d.data[0]?d.data[0].num:0},avg:async function(e){let{vk:t,db:n,_:r}=m,{dbName:a,fieldName:i,whereJson:o}=e;const s=n.command.aggregate;let l=n.collection(a).aggregate();t.pubfn.isNotNull(o)&&l.match(o),l.group({_id:null,num:s.avg("$"+i)});let d=await l.end();return d.data&&d.data[0]?d.data[0].num:null},max:async function(e){let{vk:t,db:n,_:r}=m,{dbName:a,fieldName:i,whereJson:o}=e;const s=n.command.aggregate;let l=n.collection(a).aggregate();t.pubfn.isNotNull(o)&&l.match(o),l.group({_id:null,num:s.max("$"+i)});let d=await l.end();return d.data&&d.data[0]?d.data[0].num:null},min:async function(e){let{vk:t,db:n,_:r}=m,{dbName:a,fieldName:i,whereJson:o}=e;const s=n.command.aggregate;let l=n.collection(a).aggregate();t.pubfn.isNotNull(o)&&l.match(o),l.group({_id:null,num:s.min("$"+i)});let d=await l.end();return d.data&&d.data[0]?d.data[0].num:null},sample:async function(e){let{vk:t,db:n,_:r}=m,{dbName:a,whereJson:i,size:o,fieldJson:s}=e;n.command.aggregate;let l=n.collection(a).aggregate();return t.pubfn.isNotNull(i)&&l.match(i),l.sample({size:o}),t.pubfn.isNotNull(s)&&l.project(s),(await l.end()).data},selects:async function(e){let{vk:t,db:n,_:r}=m;if(t.pubfn.isNotNull(e.treeProps))return await h.tree(e);let{dbName:a,foreignKey:i="_id",whereJson:o={},pageIndex:s=1,pageSize:l=10,getCount:d=!1,getOne:c=!1,getMain:u=!1,sortArr:f=[],fieldJson:p={},groupJson:g,foreignDB:b=[],lastWhereJson:y,addFields:w}=e;-1==l&&(s=1,l=999999999,d=!1),c&&(l=1,d=!1);let N=0,_=!1;if(d){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(),N=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(),N=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(),N=e.total}s=l),k.rows=x,k.code=0,k.msg="查询成功",k.pagination={pageIndex:s,pageSize:l},c&&(k.rows=k.rows[0]),u?k.rows:k},listToObjectByLimit1:function(e){let{vk:t,db:n,_:r}=m,{list:a,foreignDB:i}=e;if(t.pubfn.isNotNull(i))for(let e in a)for(let n in i){let{as:r,limit:o,foreignDB:s,dbName:l}=i[n];r||(r=l),t.pubfn.isNotNull(s)&&(a[e][r]=h.listToObjectByLimit1({list:a[e][r],foreignDB:s})),1===o&&(a[e][r]&&a[e][r].length>0?a[e][r]=a[e][r][0]:a[e][r]={})}return a},addForeignDB:function(e){let{vk:t,db:n,_:r}=m,{foreignDB:a,foreignKey:i,result:o}=e;const s=r.aggregate;for(let e in a){let n,l,{dbName:d,foreignKey:c,localKey:u,localKeyType:f="",as:p,limit:g,whereJson:m,fieldJson:b,sortArr:y,foreignDB:w,addFields:N}=a[e];p||(p=d),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(["$"+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(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)),t.pubfn.isNotNull(N)&&(_=_.addFields(N)),_=_.done();let k={};k["foreignKey"+n]="$"+n;let v={from:d,let:k,pipeline:_,as:p};o=o.lookup(v)}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:f="",lastWhereJson:p,auxiliary:g=!0}=l;if("lastWhereJson"===n&&!p)continue;if("lastWhereJson"!==n&&p)continue;let m=d;if(r.pubfn.isNotNull(l.fieldName)&&(m=l.fieldName),a=r.pubfn.isNotNull(l.value)?l.value:o[d],r.pubfn.isNull(a)&&r.pubfn.isNotNull(u)&&(a=u),r.pubfn.isNull(c)&&(c=["address","province","city","area"].indexOf(f)>-1?"address":"[object Array]"===Object.prototype.toString.call(a)&&a.length>=2?"[]":"="),r.pubfn.isNotNull(a))if("custom"===c);else if("%%"===c)try{t[m]=new RegExp(a)}catch(e){}else if("%*"===c)try{t[m]=new RegExp("^"+a)}catch(e){}else if("*%"===c)try{t[m]=new RegExp(a+"$")}catch(e){}else if(">"===c)t[m]=t[m]?t[m].gt(a):i.gt(a);else if(">="===c)t[m]=t[m]?t[m].gte(a):i.gte(a);else if("<"===c)t[m]=t[m]?t[m].lt(a):i.lt(a);else if("<="===c)t[m]=t[m]?t[m].lte(a):i.lte(a);else if("in"===c)t[m]=i.in(a);else if("nin"===c)t[m]=i.nin(a);else if("!="===c)t[m]=i.neq(a);else if("[]"===c)t[m]=i.gte(a[0]).lte(a[1]);else if("[)"===c)t[m]=i.gte(a[0]).lt(a[1]);else if("(]"===c)t[m]=i.gt(a[0]).lte(a[1]);else if("()"===c)t[m]=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[m]=e}else t[m]=g?"___empty-array___"===a?[]:"___empty-object___"===a?{}:"___non-existent___"===a?i.exists(!1):"___existent___"===a?i.exists(!0):a:a}return t},addLastWhereJson:function(e,t={}){return h.addWhereJson(e,t,"lastWhereJson")},getTableData:async function(e){let{vk:t,db:n,_:r,config:a}=m,{dbName:i,data:o,getCount:s=!0,whereJson:l,fieldJson:d,sortArr:c,treeProps:u,groupJson:f,foreignKey:p,foreignDB:g,lastWhereJson:b}=e,{pageIndex:y,pageSize:w,pagination:N,sortRule:_,formData:k,columns:v}=o;N&&(y=N.pageIndex,w=N.pageSize);let x={},D={},T=[],S={};if(t.pubfn.isNotNull(c))T=c;else{let e=t.pubfn.getData(a,"vk.db.unicloud.getTableData.sortArr");t.pubfn.isNotNull(e)?T=e:T.push({name:"_id",type:"desc"})}return t.pubfn.isNotNull(_)&&(T=_),D=h.addWhereJson(o),S=h.addLastWhereJson(o),t.pubfn.isNotNull(l)&&t.pubfn.objectAssign(D,l),t.pubfn.isNotNull(d)&&t.pubfn.objectAssign(x,d),t.pubfn.isNotNull(b)&&t.pubfn.objectAssign(S,b),t.pubfn.isNullAll(g,f,u)?await t.baseDao.select({dbName:i,getCount:s,pageIndex:y,pageSize:w,fieldJson:x,whereJson:D,sortArr:T}):await t.baseDao.selects({dbName:i,foreignKey:p,getCount:s,pageIndex:y,pageSize:w,whereJson:D,fieldJson:x,sortArr:T,treeProps:u,groupJson:f,foreignDB:g,lastWhereJson:S})},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 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)*d).limit(d),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(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:b,total:g,rows:h,code:0,key:1,pageIndex:l,pageSize:d}},tree:async function(e){let{vk:t,db:n,_:r}=m,{dbName:a,whereJson:i={},pageIndex:o=1,pageSize:s=10,getCount:l=!1,sortArr:d=[],fieldJson:c={},lastWhereJson:u,treeProps:f={}}=e;e.foreignDB||(e.foreignDB=[]);let{id:p="_id",parent_id:g="parent_id",children:b="children",level:y=10,limit:w=500}=f;if(y<1||y>20)throw new Error("msg:treeProps.level的范围必须在[1,20]");delete e.treeProps,e.whereJson||(e.whereJson={[g]:null}),e.foreignDB.unshift({dbName:a,localKey:p,foreignKey:g,as:b,limit:w,whereJson:f.whereJson,fieldJson:f.fieldJson||e.fieldJson,sortArr:f.sortArr,foreignDB:t.pubfn.copyObject(e.foreignDB)});let N=t.pubfn.copyObject(e.foreignDB);for(let n=1;n{"[object object]"===Object.prototype.toString.call(e.content)&&(e.content=JSON.stringify(e.content)),void 0===e.dataType&&(e.dataType="json"),"default"!=e.dataType&&""!==e.dataType||delete e.dataType,e.useContent&&(e.content=JSON.stringify(e.data)),e.method||(e.method="POST"),void 0===e.headers&&void 0!==e.header&&(e.headers=e.header);let t=await uniCloud.httpclient.request(e.url,e);return!e.needOriginalRes&&t&&t.data?t.data:t},w={formValidateItem:function(e,t,n){let r={code:0,msg:"ok"};for(let a in n){let i=n[a];if(void 0===e[t]&&i.required){r={type:"undefined",code:-1,msg:"字段:"+t+" 名称错误,请检查!",key:t,value:e[t]};break}if(i.required&&(null==e[t]||null==e[t]||""===e[t]||0==e[t].length)){r={type:"required",code:-1,msg:i.message,key:t,value:e[t]};break}if(i.type&&void 0!==e[t]){if(Object.prototype.toString.call(e[t]).toLowerCase().toLowerCase()!==`[object ${i.type}]`.toLowerCase()){r={type:"type",code:-1,msg:i.message,key:t,value:e[t]};break}}if(i.len&&e[t].length!=i.len){r={type:"len",code:-1,msg:i.message,key:t,value:e[t]};break}if(i.min)if(i.type&&"number"==i.type){if(e[t]i.max){r={type:"max",code:-1,msg:i.message,key:t,value:e[t]};break}}else if(e[t].length>i.max){r={type:"max",code:-1,msg:i.message,key:t,value:e[t]};break}if("function"==typeof i.validator){let n=i.validator(i,e[t],(function(e){return e}));if(void 0!==n&&!0!==n){r={type:"validator",code:-1,msg:i.message,key:t,value:e[t]};break}}}return r}};function N(e){return JSON.parse(JSON.stringify(e))}var _={};function k(e){let t=[];for(let n=0;n0&&(n=_.treeToArrayFn(d[o],t,n,d[a])),s&&delete d[o]}return n},_.arrayToTree=function(e,t){let n=N(e),{id:r="_id",parent_id:a="parent_id",children:i="children",deleteParentId:o=!1,need_field:s}=t,l=[],d={};for(let e=0;e0&&a>0){const e=60*(new Date).getTimezoneOffset()*1e3+60*t*60*1e3;let i=new Date(r,a,0).getDate();n.startTime=new Date(`${r}/${a}/1`).getTime()-e,n.endTime=new Date(`${r}/${a}/${i}`).getTime()+86399999-e}return n},getDayOffsetStartAndEnd:function(e=0,t,n=8){let r,a={};"string"!=typeof t||isNaN(t)||(t=Number(t)),t?"number"==typeof t?(10==t.toString().length&&(t*=1e3),r=new Date(t)):r=t:r=new Date;const i=60*r.getTimezoneOffset()*1e3+60*n*60*1e3;r=new Date(r.getTime()+864e5*e);let o=x.getFullTime(r,2);return a.startTime=new Date(`${o.year}/${o.month}/${o.day}`).getTime()-i,a.endTime=new Date(`${o.year}/${o.month}/${o.day}`).getTime()+86399999-i,a},getMonthOffsetStartAndEnd:function(e=0,t,n=8){let r,a={};"string"!=typeof t||isNaN(t)||(t=Number(t)),t?"number"==typeof t?(10==t.toString().length&&(t*=1e3),r=new Date(t)):r=t:r=new Date;const i=60*r.getTimezoneOffset()*1e3+60*n*60*1e3;let o=x.getFullTime(r,2),s=o.month+e,l=o.year;s>12?(l+=Math.floor(s/12),s=Math.abs(s)%12):s<=0&&(l=l-1-Math.floor(Math.abs(s)/12),s=12-Math.abs(s)%12);let d=new Date(l,s,0).getDate();return a.startTime=new Date(`${l}/${s}/1`).getTime()-i,a.endTime=new Date(`${l}/${s}/${d}`).getTime()+86399999-i,a},getYearOffsetStartAndEnd:function(e=0,t,n=8){let r,a={};"string"!=typeof t||isNaN(t)||(t=Number(t)),t?"number"==typeof t?(10==t.toString().length&&(t*=1e3),r=new Date(t)):r=t:r=new Date;const i=60*r.getTimezoneOffset()*1e3+60*n*60*1e3;let o=x.getFullTime(r,2).year+e;return a.startTime=new Date(o+"/1/1").getTime()-i,a.endTime=new Date(o+"/12/31").getTime()+86399999-i,a},isLeapYear:function(e){if(void 0===e){let{now:t}=x.getCommonTime();e=t.year}else if("object"==typeof e){let{now:t}=x.getCommonTime(e);e=t.year}return e%4==0&&e%100!=0||e%400==0},isQingming:function(e=new Date){let{now:t}=x.getCommonTime(e),{year:n,month:r,day:a}=t,i=!1;return x.isLeapYear(n)||x.isLeapYear(n-1)?4===r&&4===a&&(i=!0):4===r&&5===a&&(i=!0),i}},D=x,T={formValidate:function(e={}){let t={code:0,msg:"ok"},{data:n,rules:r}=e;if(r)for(let e in r){let a=r[e];if(t=w.formValidateItem(n,e,a),0!=t.code)break}return t}};T.treeUtil=v,T.timeUtil=D,T.sleep=e=>new Promise(t=>setTimeout(t,e)),T.timeFormat=T.timeUtil.timeFormat,T.getFullTime=T.timeUtil.getFullTime,T.getWeekStartAndEnd=T.timeUtil.getWeekStartAndEnd,T.getDayOffsetStartAndEnd=T.timeUtil.getDayOffsetStartAndEnd,T.getMonthOffsetStartAndEnd=T.timeUtil.getMonthOffsetStartAndEnd,T.getYearOffsetStartAndEnd=T.timeUtil.getYearOffsetStartAndEnd,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.isArray=function(e){return"[object Array]"===Object.prototype.toString.call(e)},T.isObject=function(e){return"[object Object]"===Object.prototype.toString.call(e)},T.calcFreights=function(e,t){let{first_weight:n,first_weight_price:r,continuous_weight:a,continuous_weight_price:i,max_weight:o=1e8}=e,s=0,l=0,d=o,c=!1,u=0;for(;t>0;)c?(u++,t-=a,d-=a):(c=!0,l++,d=o,t-=n,d-=n),d<=0&&(c=!1);return s=l*r+i*u,s},T.getNewObject=function(e,t){let n=T.copyObject(e),r={};if(t&&t.length>0)for(let e in t){let a=t[e];T.isNotNull(n[a])&&(r[a]=n[a])}else r=n;return r},T.deleteObjectKeys=function(e,t=[]){var n={};if(e)for(let r in e)-1==t.indexOf(r)&&(n[r]=e[r]);return n},T.arrayToTree=T.treeUtil.arrayToTree,T.treeToArray=T.treeUtil.treeToArray,T.wildcardTestOne=function(e,t){if(!t)return!1;let n=t.replace(new RegExp("\\*"),"(.*)"),r=0!==t.indexOf("*")?"^":"",a="*"!==t[t.length-1]?"$":"";return new RegExp(r+n+a).test(e)},T.wildcardTest=function(e,t){let n=0;if("string"==typeof t)T.wildcardTestOne(e,t)&&n++;else if("object"==typeof t)for(let r=0;r0?d=i+"天":o>0?d=o+"小时":s>0?d=s+"分钟":l>0&&(d=l+"秒"),d+=t},T.calcSize=function(e=0,t,n,r=2,a="auto"){let i=0,o="";if((e=parseFloat(e))E(e,t)))}return e}T.snake2camel=function(e){return e.replace(S,(e,t)=>t?t.toUpperCase():"")},T.camel2snake=function(e){return e.replace(A,e=>"_"+e.toLowerCase())},T.snake2camelJson=function(e){return E(e,"snake2camel")},T.camel2snakeJson=function(e){return E(e,"camel2snake")},T.urlStringToJson=function(e){var t={};if(""!=e&&null!=e&&null!=e)for(var n=e.split("&"),r=0;r-1){var o=a.indexOf('"',i),s=a.substring(i,o);if(o>i){var l=a.indexOf("---",o),d=a.substring(o+1,l).trim();n[s]=d}}}return n},T.getPlatform=function(e){e||(e=uniCloud.$context);let t=e.PLATFORM;return"h5"===t&&e.CLIENTUA.toLowerCase().indexOf("micromessenger")>-1&&(t="h5-weixin"),t};var I=T,J={},O={};J.get=function(e){let t,n=O[e];if(n){let{value:r,expired:a}=n;J.isExpired(e)?delete O[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};O[e]=r},J.del=function(e){delete O[e]},J.clear=function(e){if(e)for(let t in O)0==t.indexOf(e)&&delete O[t];else O={}},J.isExpired=function(e){let t=!0,n=O[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 O)0==n.indexOf(e)&&(t[e]=O[e]);else t=O;for(let e in t)J.isExpired(e)&&(delete t[e],delete O[e]);return t};var $=J,B={},C={},M={};B.init=function(e){M=(C=e).vk.system.globalDataDao},B.get=async function(e,t=0,n,r=!0){return"function"==typeof n?B.autoGet(e,t,n,r):B._get(e)},B.autoGet=async function(e,t=0,n,r=!0){let a,{vk:i}=C;try{a=await B._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},B._get=async function(e){let t;try{let n=await M.find(e);if(n){let{value:r,expired_at:a}=n;B.isExpired(n)?await B.del(e):t=r}}catch(e){return}return t},B.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 M.set({key:r,value:t,expired_at:e})}catch(e){return console.error(e),{code:-1,msg:"异常"}}return a},B.del=async function(e){await M.del(e)},B.clear=async function(e){if(e)return await M.deleteByWhere({key:new RegExp("^"+e)})},B.list=async function(e){return await M.list(e)},B.count=async function(e){return await M.count(e)},B.isExpired=function(e){let t=!0;return e&&(!e.expired_at||0==e.expired_at||e.expired_at>(new Date).getTime())&&(t=!1),t},B.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 M.inc({key:r,value:t,expired_at:e})}catch(e){return{code:-1,msg:"异常",err:e}}return a},B.uniqueAdd=async function(e,t=1,n=5){let{vk:r}=C,a={code:0,msg:"ok"};try{if(!e)return{code:-1,msg:"key值不能为空"};let i=n>0?(new Date).getTime()+1e3*n:0;await r.globalDataCache.deleteExpired(e);a.id=await M.add({key:e,value:t,expired_at:i})}catch(e){return console.error(e),{code:-1,msg:"异常"}}return a},B.deleteExpired=async function(e){await M.deleteExpired(e)};var P=B,j={},q={};function F(e){return e.code=e.errcode,e.msg=e.errmsg,e}j.init=function(e){q=e},j.getConfig=function(){let{vk:e,config:t,crypto:n,uniID:r}=q;const a=t.uni;var i;if(e.pubfn.isArray(a)){let t=uniCloud.env&&uniCloud.env.APPID?uniCloud.env.APPID:uniCloud.$context.APPID;i=e.pubfn.getListItem(a,"dcloudAppid",t),e.pubfn.isNull(i)&&(i=e.pubfn.getListItem(a,"isDefaultConfig",!0))}else i=a;return i},j.decrypt={},j.decrypt.getPhoneNumber=async function(e={}){let{appid:t,encryptedData:n,iv:r,sessionKey:a}=e;e.appId&&(t=e.appId);let i,{vk:o,crypto:s,uniID:l,config:d}=q,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=j.getConfig()["mp-weixin"].oauth.weixin.appid,o.pubfn.isNull(i))return{code:-1,msg:"请先配置微信小程序APPID"}}catch(e){return{code:-1,msg:"请先配置微信小程序APPID"}}return c.data=j.decrypt.decryptData({appid:i,encryptedData:n,iv:r,sessionKey:a}),c.phone=c.data.phoneNumber,c.mobile=c.data.phoneNumber,c},j.decrypt.decryptData=function(e={}){let t,{appid:n,encryptedData:r,iv:a,sessionKey:i}=e,{vk:o,crypto:s}=q,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},j.auth={},j.auth.getAppidInfo=function(e={}){let{appid:t,appsecret:n}=e,{vk:r,config:a}=q;const i=j.getConfig();if(t){if(!n){let e=r.pubfn.getData(a,"vk.oauth.weixin.list")||[],i=r.pubfn.getListItem(e,"appid",t)||{};t=i.appid,n=i.appsecret}}else{let e=r.pubfn.getData(i,"mp-weixin.oauth.weixin")||{};t=e.appid,n=e.appsecret}if(r.pubfn.isNullOne(t,n))throw new Error("请先配置微信小程序appid和appsecret");return{appid:t,appsecret:n}},j.auth.getAccessTokenFn=async function(e={}){let{appid:t,appsecret:n}=j.auth.getAppidInfo(e),{vk:r,config:a}=q,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}},j.auth.getAccessToken=async function(e={}){let t,{appid:n,appsecret:r}=j.auth.getAppidInfo(e),{cache:a=!0}=e,{vk:i}=q,o="mp-weixin-"+n;if(a&&(t=await i.globalDataCache.get(o)),i.pubfn.isNull(t)){let n=await j.auth.getAccessTokenFn(e);0===n.code&&(t=n.access_token,await i.globalDataCache.set(o,t,240),await i.globalDataCache.deleteExpired())}return t},j.auth.code2Session=async function(e={}){let t,{vk:n,uniID:r}=q,{platform:a,context:i}=e;return a||(a=n.pubfn.getPlatform(i)||"mp-weixin"),t="mp-weixin"===a?await j.auth.code2SessionMpWeixin(e):"h5-weixin"===a?await j.h5.auth.code2Session(e):await r.code2SessionWeixin(e),t.platform=a,t},j.auth.code2SessionMpWeixin=async function(e={}){let{appid:t,appsecret:n}=j.auth.getAppidInfo(e),r=e.code||e.js_code,{vk:a}=q,i=await a.request({url:`https://api.weixin.qq.com/sns/jscode2session?appid=${t}&secret=${n}&js_code=${r}&grant_type=authorization_code`,method:"GET"});if(i.errcode){let e=i.errmsg;return 40163===i.errcode&&(e="该code已被使用,请重新获取"),40029===i.errcode&&(e="无效code,请重新获取"),{...i,code:i.errcode,msg:e}}return i=a.pubfn.snake2camelJson(i),{...i,code:0,msg:"ok"}},j.wxacode={},j.wxacode.getUnlimited=async function(e={}){let t,{vk:n}=q,{access_token:r,scene:a,page:i,width:o,auto_color:s,line_color:l,is_hyaline:d}=e;if(t=r||await j.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}},j.urlscheme={},j.urlscheme.generate=async function(e={}){let{vk:t}=q,{jump_wxa:n={},is_expire:r,expire_time:a}=e,{path:i,query:o}=n,s=await j.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=F(l),l.code){case 40001:l.msg="access_token错误";break;case 40165:l.msg="小程序页面不存在!"}return l},j.security={},j.security.msgSecCheck=async function(e={}){let{vk:t}=q,{content:n}=e,r=await j.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=F(a),a.code){case 40001:a.msg="access_token错误";break;case 87014:a.msg="内容含有违法违规内容,请检查!"}return a},j.security.imgSecCheck=async function(e={}){let{vk:t}=q,{dataBuffer:n,formData:r,base64:a}=e,i=await j.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=F(o),o.code){case 40001:o.msg="access_token错误";break;case 87014:o.msg="图片内容含有违法违规内容,请检查!";break;case 40006:o.msg="图片大小不能超过1M"}return o},j.subscribeMessage={},j.subscribeMessage.send=async function(e={}){let{vk:t}=q,{touser:n,template_id:r,page:a,data:i,miniprogram_state:o="formal",lang:s="zh_CN"}=e,l=await j.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=F(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},j.livebroadcast={},j.livebroadcast.getLiveInfo=async function(e={}){let{vk:t}=q,{pageIndex:n=1,pageSize:r=100}=e,a=await j.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=F(s),s.code){case 941e4:s.msg="直播间列表为空"}return s},j.app={},j.app.auth={},j.app.auth.getAppidInfo=function(e={}){let{appid:t,appsecret:n}=e,{vk:r,config:a}=q;const i=j.getConfig();if(t){if(!n){let e=r.pubfn.getData(a,"vk.oauth.weixin.list")||[],i=r.pubfn.getListItem(e,"appid",t)||{};t=i.appid,n=i.appsecret}}else{let e=r.pubfn.getData(i,"app-plus.oauth.weixin")||{};t=e.appid,n=e.appsecret}if(r.pubfn.isNullOne(t,n))throw new Error("请先配置微信小程序appid和appsecret");return{appid:t,appsecret:n}},j.app.auth.getAccessToken=async function(e={}){let{appid:t,appsecret:n}=j.app.auth.getAppidInfo(e),{vk:r,config:a}=q,{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"}},j.app.auth.getUserInfo=async function(e={}){let{appid:t,appsecret:n}=j.app.auth.getAppidInfo(e),{vk:r,config:a}=q,{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}},j.h5={},j.h5.auth={},j.h5.auth.getAppidInfo=function(e={}){let{appid:t,appsecret:n}=e,{vk:r,config:a}=q;const i=j.getConfig();if(t){if(!n){let e=r.pubfn.getData(a,"vk.oauth.weixin.list")||[],i=r.pubfn.getListItem(e,"appid",t)||{};t=i.appid,n=i.appsecret}}else{let e=r.pubfn.getData(i,"h5-weixin.oauth.weixin")||{};t=e.appid,n=e.appsecret}if(r.pubfn.isNullOne(t,n))throw new Error("请先配置微信公众号appid和appsecret");return{appid:t,appsecret:n}},j.h5.auth.code2Session=async function(e={}){let{appid:t,appsecret:n}=j.h5.auth.getAppidInfo(e),{code:r}=e,{vk:a}=q,i=await a.request({url:`https://api.weixin.qq.com/sns/oauth2/access_token?appid=${t}&secret=${n}&code=${r}&grant_type=authorization_code`,method:"GET"});if(i.errcode){let e=i.errmsg;return 40163===i.errcode&&(e="该code已被使用,请重新获取"),40029===i.errcode&&(e="无效code,请重新获取"),{...i,code:i.errcode,msg:e}}return i=a.pubfn.snake2camelJson(i),{...i,code:0,msg:"ok"}},j.loginByWeixin=async function(e={},t){let n,{vk:r,uniID:a,_:i}=q,{code:o,platform:s,type:l,appid:d}=e;s||(s=r.pubfn.getPlatform(t),e.platform=s);try{n=await a.loginByWeixin(e);try{if(n.uid&&"register"===n.type&&["h5-weixin","app-plus"].indexOf(s)>-1){let e=await r.openapi.weixin.app.auth.getUserInfo({access_token:n.accessToken,openid:n.openid});(e.nickname||e.headimgurl)&&(n.userInfo=await r.baseDao.updateAndReturn({dbName:"uni-id-users",whereJson:{_id:n.uid||"___",nickname:i.exists(!1)},dataJson:{nickname:e.nickname,avatar:e.headimgurl}}))}}catch(e){console.error("保存用户头像昵称异常:",e)}}catch(e){console.error("loginByWeixin异常:",e);let t=e.message||"";throw e.message.indexOf("code been used")>-1&&(t="该code已被使用,请重新获取"),e.message.indexOf("invalid code")>-1&&(t="无效code,请重新获取"),new Error("msg:"+t)}return n};var R=j,L={},U={};L.init=function(e){U=e},L.open={},L.open.auth={},L.open.auth.getAppidInfo=function(e={}){let{appid:t,appsecret:n}=e,{vk:r,config:a}=U;if(!t){let e=r.pubfn.getData(a,"vk.service.openapi.baidu")||{};t=e.appid,n=e.appsecret}if(r.pubfn.isNullOne(t,n))throw new Error("请在cloudfunctions/common/config/index.js中配置并检查百度开放平台的appid和appsecret是否正确,参数路径:vk.service.openapi.baidu");return{appid:t,appsecret:n}},L.open.auth.getAccessTokenFn=async function(e={}){let{appid:t,appsecret:n}=L.open.auth.getAppidInfo(e),{vk:r,config:a}=U,i=await r.request({url:`https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=${t}&client_secret=${n}`,method:"GET"});return i.error_code?(console.error("getAccessToken失败:",i),{code:i.error_code,msg:i.error_msg,err:i}):{...i,code:0,msg:"ok"}},L.open.auth.getAccessToken=async function(e={}){let t,{appid:n,appsecret:r}=L.open.auth.getAppidInfo(e),{cache:a=!0}=e,{vk:i}=U,o="openapi-baidu-"+n;if(a&&(t=await i.globalDataCache.get(o)),i.pubfn.isNull(t)){let n=await L.open.auth.getAccessTokenFn(e);0===n.code&&(t=n.access_token,await i.globalDataCache.set(o,t,n.expires_in-3600),await i.globalDataCache.deleteExpired())}return t},L.open.ocr={},L.open.ocr.business_license=async function(e={}){let{image:t,url:n}=e;return await L.open.request({...e,action:"ocr/v1/business_license",actionVersion:"2.0",data:{image:t,url:n}})},L.open.ocr.idcard=async function(e={}){let{image:t,url:n,id_card_side:r,detect_risk:a,detect_photo:i}=e;return await L.open.request({...e,action:"ocr/v1/idcard",actionVersion:"2.0",data:{image:t,url:n,id_card_side:r,detect_risk:a,detect_photo:i}})},L.open.request=async function(e={}){let{vk:t}=U,n=await L.open.auth.getAccessToken(e);if(!n)return{code:-1,msg:"获取access_token失败,请检查appid和appsecret是否正确"};let{action:r,actionVersion:a="2.0",header:i={"content-type":"application/x-www-form-urlencoded"},data:o}=e,s=await t.request({url:`https://aip.baidubce.com/rest/${a}/${r}?access_token=${n}`,method:"POST",headers:{"content-type":"application/x-www-form-urlencoded"},data:o});return s.error_code?{code:s.error_code,msg:s.error_msg,err:s}:{...s,code:0,msg:"ok"}};var z=L,K={};K.weixin=R,K.baidu=z,K.init=function(e){K.weixin.init(e),K.baidu.init(e)};var W=K;const Z=/^multipart\/.+?(?:;\s*boundary=(?:(?:"(.+)")|(?:([^\s]+))))$/i,G=/Content-Disposition:\sform-data;\sname="(.+?)"(?:;\sfilename="(.+?)")?/i,V=/Content-Type:\s(.+?)$/i;var Y={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(V)[1],t.fileContent=e[2];break;case 4:t.filename=decodeURIComponent(n[2]),t.contentType=e[1].toString().match(V)[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 H="opendb-admin-menus";var Q={},X={};Q.init=function(e){X=e},Q.findRoleById=async(e="___")=>{let t,{vk:n,db:r,_:a}=X;return t=await n.baseDao.findByWhereJson({dbName:"uni-id-roles",whereJson:{role_id:e}}),t},Q.roleBindPermission=async(e={})=>{let{vk:t,db:n,_:r}=X,a={code:0,msg:""},{role_id:i="___",permissionList:o=[],reset:s=!1}=e;if(!s){let e=await Q.findRoleById(i),{permission:t=[]}=e;o=t.concat(o),o=[...new Set(o)]}return a.num=await t.baseDao.update({dbName:"uni-id-roles",whereJson:{role_id:i},dataJson:{permission:r.set(o)}}),a},Q.roleBindMenu=async(e={})=>{let{vk:t,db:n,_:r}=X,a={code:0,msg:""},{role_id:i="___",menuList:o=[],reset:s=!1,addPermission:l=!1}=e,d=[],c=await Q.findRoleById(i),{menu:u=[],permission:f=[]}=c;if(s?d=te(o,u):(o=u.concat(o),o=[...new Set(o)]),a.num=await t.baseDao.update({dbName:"uni-id-roles",whereJson:{role_id:i},dataJson:{menu:r.set(o)}}),l){let e=await Q.findMenuByIdsToPermission(o),n=[];if(s&&t.pubfn.isNotNull(d)){n=te(e,await Q.findMenuByIdsToPermission(d))}f=f.concat(e),f=te(n,f),f=[...new Set(f)],Q.roleBindPermission({role_id:i,permissionList:f,reset:!0})}return a},Q.findPermissionById=async(e="___")=>{let t,{vk:n,db:r,_:a}=X;return t=await n.baseDao.findByWhereJson({dbName:"uni-id-permissions",whereJson:{permission_id:e}}),t},Q.findMenuByIdsToPermission=async e=>{let{vk:t,db:n,_:r}=X,a=await Q.findMenuByIds(e);if(t.pubfn.isNull(a))return[];let i=[];for(let e in a){let n=a[e].permission;t.pubfn.isNotNull(n)&&(i=i.concat(n))}return i=[...new Set(i)],i},Q.listPermissionToTree=async(e={})=>{let t,{vk:n,db:r,_:a}=X,{getCount:i=!1,pageSize:o=500,pageIndex:s=1,whereJson:l={parent_id:null},sortArr:d=[{name:"sort",type:"asc"}],treeProps:c={}}=e,{level:u=3,limit:f=500,whereJson:p}=c;t=await n.baseDao.selects({dbName:"uni-id-permissions",pageIndex:s,pageSize:o,getCount:i,whereJson:l,sortArr:d,treeProps:{id:"permission_id",parent_id:"parent_id",children:"children",level:u,limit:f,whereJson:p,sortArr:d}});let g={id:"permission_id",parent_id:"parent_id",children:"children"},m=t.rows;m=n.pubfn.treeToArray(m,g),t.list=n.pubfn.copyObject(m);for(let e in m){let t=m[e],r="",a="";if(n.pubfn.isNotNull(t.level)){r=` - ${["未分类","子弹级","炸弹级","榴弹级","核弹级"][t.level]}(LV:${t.level})`}if(n.pubfn.isNotNull(t.curd_category)){a=" - "+["未分类","增","删","改","查","特殊"][t.curd_category]}m[e].label=`${t.permission_name}(${t.permission_id})${a}${r}`}return m=n.pubfn.arrayToTree(m,g),t.rows=m,t},Q.findMenuById=async(e="___")=>{let t,{vk:n,db:r,_:a}=X;return t=await n.baseDao.findByWhereJson({dbName:H,whereJson:{menu_id:e}}),t},Q.findMenuByIds=async e=>{let t,{vk:n,db:r,_:a}=X;return n.pubfn.isNull(e)?[]:(t=(await n.baseDao.select({dbName:H,pageIndex:1,pageSize:500,whereJson:{menu_id:a.in(e)}})).rows,t)},Q.listMenuByRole=async(e={})=>{let{vk:t,db:n,_:r}=X,a={code:0,msg:"",menus:[],menuList:[]},{role:i}=e,o=[],s={enable:!0},l={enable:!0};if(!(i.indexOf("admin")>-1)){if(t.pubfn.isNull(i))return a;let e=await t.baseDao.select({dbName:"uni-id-roles",pageSize:500,whereJson:{role_id:r.in(i),enable:!0},fieldJson:{menu:!0}});for(let n in e.rows){let{menu:r}=e.rows[n];t.pubfn.isNotNull(r)&&(o=o.concat(r))}if(0==o.length)return a;o=[...new Set(o)],s.menu_id=r.in(o),l.menu_id=r.in(o)}s.parent_id=null;let d=[{name:"sort",type:"asc"}],c=await t.baseDao.selects({dbName:H,pageIndex:1,pageSize:500,whereJson:s,sortArr:d,treeProps:{id:"menu_id",parent_id:"parent_id",children:"children",level:3,limit:500,whereJson:l,sortArr:d}});return a.menus=c.rows,a.menuList=t.pubfn.treeToArray(c.rows,{id:"menu_id",parent_id:"parent_id",children:"children"}),a},Q.menuBindPermission=async(e={})=>{let{vk:t,db:n,_:r}=X,a={code:0,msg:""},{menu_id:i="___",permissionList:o=[],reset:s=!1}=e;if(!s){let e=await Q.findMenuById(i),{permission:t=[]}=e;o=t.concat(o),o=[...new Set(o)]}return a.num=await t.baseDao.update({dbName:H,whereJson:{menu_id:i},dataJson:{permission:r.set(o)}}),a},Q.listMenuToTree=async(e={})=>{let t,{vk:n,db:r,_:a}=X,{getCount:i=!1,pageSize:o=500,pageIndex:s=1,whereJson:l={parent_id:null},sortArr:d=[{name:"sort",type:"asc"}],treeProps:c={}}=e,{level:u=3,limit:f=500,whereJson:p}=c;t=await n.baseDao.selects({dbName:H,pageIndex:s,pageSize:o,getCount:i,whereJson:l,sortArr:d,treeProps:{id:"menu_id",parent_id:"parent_id",children:"children",level:u,limit:f,whereJson:p,sortArr:d}});let g={id:"menu_id",parent_id:"parent_id",children:"children"},m=t.rows;m=n.pubfn.treeToArray(m,g),t.list=n.pubfn.copyObject(m);for(let e in m){let t=m[e];m[e].label=`${t.name}(${t.menu_id})`}return m=n.pubfn.arrayToTree(m,g),t.rows=m,t};var ee=Q;function te(e,t){let n=new Set(e);return t.filter(e=>!n.has(e))}const ne="opendb-global-data";var re={},ae={};re.init=function(e){ae=e},re.find=async e=>{let{vk:t,db:n,_:r}=ae,a={};return a=await t.baseDao.findById({dbName:ne,id:e}),a},re.del=async e=>{let{vk:t,db:n,_:r}=ae,a={};return a=await t.baseDao.deleteById({dbName:ne,id:e}),a},re.deleteByWhere=async e=>{let{vk:t,db:n,_:r}=ae,a={};return a=await t.baseDao.del({dbName:ne,whereJson:e}),a},re.deleteExpired=async e=>{let{vk:t,db:n,_:r}=ae,a={},i={};"string"==typeof e?i._id=e:"object"==typeof e&&(i=e);let o=(new Date).getTime();return a=await t.baseDao.del({dbName:ne,whereJson:{...i,expired_at:r.gt(0).lte(o)}}),a},re.update=async e=>{let{vk:t,db:n,_:r}=ae,a={},{key:i,value:o,comment:s,expired_at:l}=e;return a=await t.baseDao.updateById({dbName:ne,id:i,dataJson:{value:r.set(o),comment:s,expired_at:l}}),a},re.add=async e=>{let{vk:t,db:n,_:r}=ae,a={},{key:i,value:o,comment:s,expired_at:l}=e;return a=await t.baseDao.add({dbName:ne,dataJson:{_id:i,key:i,value:o,comment:s,expired_at:l}}),a},re.count=async e=>{let{vk:t,db:n,_:r}=ae,a={};return a=await t.baseDao.count({dbName:ne,whereJson:e}),a},re.set=async e=>{let t={code:0,msg:"ok"};return await re.count({_id:e.key})>0?(t.num=await re.update(e),t.mode="update"):(t.id=await re.add(e),t.num=1,t.mode="add"),t},re.inc=async e=>{let{vk:t,db:n,_:r}=ae,{key:a,value:i,expired_at:o}=e,s={},l=await t.baseDao.updateById({dbName:ne,id:a,dataJson:{value:r.inc(i),expired_at:o}});if(0==l){0===await re.count({_id:a})&&(s.id=await re.add(e),s.num=1,s.mode="add")}else s.num=l,s.mode="update";return s},re.list=async e=>{let{vk:t,db:n,_:r}=ae,a={},{pageIndex:i,pageSize:o,whereJson:s,sortArr:l}=e;return a=await t.baseDao.select({dbName:ne,pageIndex:i,pageSize:o,whereJson:s,sortArr:l}),a};var ie=re,oe={},se={init:function(e){oe=e}},le={specialUrlEncode:function(e){return(e=encodeURIComponent(e)).replace(/\+/g,"%20").replace(/\*/g,"%2A").replace(/%7E/g,"~")},sign:function(e,t){let{crypto:n}=oe;return n.createHmac("sha1",e).update(t).digest("base64")}};se.sendSms=async function(e){let{vk:t,config:n}=oe,{provider:r,appid:a,smsKey:i,smsSecret:o,signName:s,phone:l,templateId:d,data:c}=e,u={};if("aliyun"===r){let r=t.pubfn.getData(n,"vk.service.sms.aliyun");t.pubfn.isNotNull(r)&&(i||(e.smsKey=r.accessKeyId),o||(e.smsSecret=r.accessKeySecret),s||(e.signName=r.signName)),u=await se.sendSmsByAliyun(e)}else{if("unicloud"!==r)return{code:-1,msg:`暂不支持${r}供应商`};{let r=t.pubfn.getData(n,"uni.service.sms");t.pubfn.isNotNull(r)&&(i||(e.smsKey=r.smsKey),o||(e.smsSecret=r.smsSecret),s||(e.signName=r.signName)),u=await se.sendSmsByUnicloud(e)}}return u.requestParam={provider:r,phone:l},u},se.sendSmsByAliyun=async function(e){let{vk:t,config:n}=oe,{provider:r,appid:a,smsKey:i,smsSecret:o,signName:s,phone:l,templateId:d,data:c}=e,u={code:0,msg:""};try{if(t.pubfn.isNullOne(i,o))return{code:-1,msg:"阿里云短信配置错误,请检查!"};let e="https://dysmsapi.aliyuncs.com",n=t.pubfn.timeFormat(new Date,"yyyy-MM-ddThh:mm:ssZ",0),r=(new Date).getTime().toString().substring(7)+t.pubfn.random(30);"object"==typeof c&&(c=JSON.stringify(c));let a={SignatureMethod:"HMAC-SHA1",SignatureNonce:r,AccessKeyId:i,SignatureVersion:"1.0",Timestamp:n,Format:"json",Action:"SendSms",Version:"2017-05-25",PhoneNumbers:l,SignName:s,TemplateParam:c,TemplateCode:d};delete a.Signature;let f=[];for(let e in a)f.push(e);f.sort();let p=!1,g="";for(let e in f){let t=f[e];g+="&"+le.specialUrlEncode(t)+"="+le.specialUrlEncode(a[t])}g=g.substring(1);let m="GET&"+le.specialUrlEncode("/")+"&"+le.specialUrlEncode(g),h=le.sign(o+"&",m),b=le.specialUrlEncode(h),y="Signature="+b+"&"+g;p&&(console.log("\r\n随机数\r\n"),console.log(a.SignatureNonce),console.log("\r\n=========\r\n"),console.log(a.Timestamp),console.log("\r\n====sortedQueryString====\r\n"),console.log(g),console.log("\r\n=====stringToSign====\r\n"),console.log(m),console.log("\r\n=====sign====\r\n"),console.log(h),console.log("\r\n=====signature====\r\n"),console.log(b),console.log("\r\n=========\r\n"),console.log(e+"/?"+y));t.pubfn.urlStringToJson(y);let w=await t.request({url:`${e}?${y}`,method:"GET"});return u="OK"===w.Code?{code:0,msg:"ok",requestRes:w}:{code:-1,msg:w.Message,requestRes:w},u}catch(e){return{code:-1,msg:"短信发送失败",err:{message:e.message,stack:e.stack}}}},se.sendSmsByUnicloud=async function(e){let{provider:t,appid:n,smsKey:r,smsSecret:a,signName:i,phone:o,templateId:s,data:l}=e,d={code:0,msg:""};try{let e=await uniCloud.sendSms({smsKey:r,smsSecret:a,phone:o,templateId:s,data:l});d=0==e.code||0==e.errCode?{code:0,msg:"ok",requestRes:e}:{code:-1,msg:e.errMessage||e.errMsg,requestRes:e}}catch(e){return{code:-1,msg:"短信发送失败",err:{message:e.message,stack:e.stack}}}return d},se.sendSmsVerifyCode=async function(e){let t,{vk:n,config:r,uniID:a}=oe,{provider:i,phone:o,code:s,type:l,expiresIn:d=180}=e,c={code:0,msg:""};if("unicloud"===i){t=n.pubfn.getData(r,"uni.service.sms.templateId");let e=n.pubfn.getData(r,"uni.service.sms.codeExpiresIn");e&&(d=e);let a=n.pubfn.getData(r,"uni.service.sms.name"),l=Math.ceil(d/60).toString();c=await n.system.smsUtil.sendSms({provider:i,phone:o,templateId:t,data:{code:s,name:a,action:"身份验证",expMinute:l}})}else t=n.pubfn.getData(r,`vk.service.sms.${i}.templateCode.verifyCode`),c=await n.system.smsUtil.sendSms({provider:i,phone:o,templateId:t,data:{code:s}});return 0===c.code&&await a.setVerifyCode({mobile:o,code:s,expiresIn:d,type:l}),c};var de=se,ce={};ce.sysDao=ee,ce.globalDataDao=ie,ce.smsUtil=de,ce.init=function(e){let t=["sysDao","globalDataDao","smsUtil"];for(let n in t){let r=t[n];"function"==typeof ce[r].init&&ce[r].init(e)}};var ue=ce,fe={};fe.router=s,fe.md5=g,fe.baseDao=b,fe.request=y,fe.pubfn=I,fe.temporaryCache=$,fe.globalDataCache=P,fe.openapi=W,fe.formDataUtil=Y,fe.system=ue,fe.requireCache={},fe.require=function(e){if(fe.requireCache&&fe.requireCache[e])return fe.requireCache[e];{const t=fe.unicloud.requireFn(fe.unicloud.baseDir+"/"+e);return fe.requireCache[e]=t,t}},fe.requireFn=function(e){try{return fe.unicloud.requireFn(e)}catch(e){return}},fe.use=function(e,t){for(let n in e)e[n]&&"function"==typeof e[n].init&&e[n].init(t),fe[n]=e[n]},fe.unicloud={},fe.init=function(e={}){if(fe.unicloud.requireFn=e.requireFn,e.configCenter||(e.configCenter=fe.requireFn("uni-config-center")),e.uniID||(e.uniID=fe.requireFn("uni-id")),e.uniPay||(e.uniPay=fe.requireFn("uni-pay")),e.middlewareService||(e.middlewareService=fe.requireFn("./middleware/index")),e.daoCenter||(e.daoCenter=fe.requireFn("./dao/index")),e.crypto||(e.crypto=fe.requireFn("crypto")),e.urlrewrite||(e.urlrewrite=fe.requireFn("./util/urlrewrite")),e.config||(e.config=e.configCenter({pluginId:"vk-unicloud"}).requireFile("index.js")),!e.db)try{e.db=uniCloud.database()}catch(e){}fe.vkPay=fe.requireFn("vk-uni-pay"),e.pubFun||(e.pubFun=fe.requireFn("./util/pubFunction")),e.redis||(e.redis=fe.requireFn("vk-redis")),e.redis&&(fe.redisUtil=e.redis,fe.redis=e.redis.redis,fe.newRedis=e.redis.newRedis),fe.unicloud.configCenter=e.configCenter,fe.unicloud.config=e.config,fe.unicloud.uniID=e.uniID,fe.unicloud.uniPay=e.uniPay,fe.unicloud.db=e.db,fe.unicloud._=e.db.command,fe.unicloud.pubfn=fe.pubfn,fe.unicloud.middlewareService=e.middlewareService,fe.unicloud.pubFun=e.pubFun,fe.unicloud.customUtil=e.customUtil,fe.unicloud.baseDir=e.baseDir,fe.unicloud.crypto=e.crypto,fe.unicloud.urlrewrite=e.urlrewrite;const t={vk:fe,...fe.unicloud};fe.use({daoCenter:e.daoCenter,baseDao:fe.baseDao,openapi:fe.openapi,globalDataCache:fe.globalDataCache,system:fe.system},t)};var pe=fe;module.exports=pe; +"use strict";var e={regExpTest:function(e,t){let n=!1;if("string"==typeof e){new RegExp(e).test(t)&&(n=!0)}else if("object"==typeof e)for(let r=0;r{let{url:t,data:n={},util:r}=e,{uniID:a}=r,{need_user_info:i=!0}=n,o={code:-1,msg:""},s=0==t.indexOf("admin/");s&&(i=!0);let l=t.indexOf("/sys/")>-1,d=await a.checkToken(e.uniIdToken,{needPermission:l,needUserInfo:i});if(d.code&&d.code>0)return d;if(d.userInfo){let e=d.userInfo;e.permission=d.permission,delete e.token,delete e.password,o.userInfo=e}if(o.uid=d.uid,d.token&&(o.token=d.token,o.tokenExpired=d.tokenExpired),s){if(!o.userInfo)return{code:403,msg:"need_user_info必须为true"};{let e=o.userInfo.role||[];if(!o.userInfo.allow_login_background&&!e.includes("admin"))return{code:403,msg:"您无权限登录后台"}}}return o.code=0,o.msg="ok",o}};async function r(e={},t){let{vk:n,db:r,_:a}=t,{whereJson:i={},fieldJson:o={},justNeedID:s=!1}=e;s&&(o={permission_id:!0}),i.enable=!0;let l=[],d=await n.baseDao.select({dbName:"uni-id-permissions",pageIndex:1,pageSize:500,fieldJson:o,whereJson:i});if(s)for(let e=0;e{let{url:t,util:a}=e,{uniID:i,config:o,pubFun:s,vk:l,db:d,_:c}=a,u={code:-1,msg:""};const f=n;if(u=await f.main(e),0!==u.code)return u;if(!u.userInfo)return{code:403,msg:"请去除need_user_info:false"};if(u.userInfo.role||(u.userInfo.role=[]),u.userInfo.role.includes("admin"))return u;if(!u.userInfo.allow_login_background)return{code:403,msg:"您无权限登录后台"};let p=[];if(u.userInfo.role.includes("admin-lv3")){let e=await r({whereJson:{level:c.in([1,2,3])},justNeedID:!0},a);l.pubfn.isNotNull(e)&&(p=p.concat(e))}if(u.userInfo.role.includes("admin-lv2")){let e=await r({whereJson:{level:c.in([1,2])},justNeedID:!0},a);l.pubfn.isNotNull(e)&&(p=p.concat(e))}if(u.userInfo.role.includes("admin-lv1")){let e=await r({whereJson:{level:c.in([1])},justNeedID:!0},a);l.pubfn.isNotNull(e)&&(p=p.concat(e))}if(u.userInfo.role.includes("query-all")){let e=await r({whereJson:{curd_category:4,level:c.neq(4)},justNeedID:!0},a);l.pubfn.isNotNull(e)&&(p=p.concat(e))}let g=await async function(e,t){let{vk:n,db:r,_:a}=t,{role:i}=e;if(n.pubfn.isNull(i))return[];return(await n.baseDao.select({dbName:"uni-id-roles",whereJson:{role_id:a.in(i),enable:!0},fieldJson:{permission:!0}})).rows}({role:u.userInfo.role},a);for(let e in g){let{permission:t}=g[e];l.pubfn.isNotNull(t)&&(p=p.concat(t))}if(0==p.length)return{code:403,msg:"权限不足"};p=[...new Set(p)];let m=await r({whereJson:{permission_id:c.in(p),match_mode:c.in([1,2])}},a),h=!1;for(let e=0;e0}({myPermission:p,url:t},a)&&(h=!0)}return h?(u.code=0,u.msg="ok",u):{code:403,msg:"权限不足"}}}.main}];var i={onActionExecuting:async(e,n=[])=>{let r={code:403,msg:"access denied",filterStack:[]},{url:a}=e;for(let i in n){let o=n[i],{mode:s="onActionExecuting",enable:l=!0}=o;if(l&&"onActionExecuting"===s&&t.regExpTest(o.regExp,a)){e.filterResponse=r;let t=await o.main(e);if(t.filterId=o.id,r.filterStack.push(t),0!==t.code){r=t;break}r=Object.assign(r,t)}}return r},onActionExecuted:async(e,n=[],r)=>{let{url:a}=e;for(let i in n){let o=n[i],{mode:s,enable:l=!0}=o;if(l&&"onActionExecuted"===s&&t.regExpTest(o.regExp,a)){let t=await o.main(e,r);if(t){if(0!==t.code){r=t;break}r=Object.assign(r,t)}}}return r},onActionIntercepted:async(e,n=[],r)=>{let{url:a}=e;for(let i in n){let o=n[i],{mode:s,enable:l=!0}=o;if(l&&"onActionIntercepted"===s&&t.regExpTest(o.regExp,a)){let t=await o.main(e,r);if(t){if(0!==t.code){r=t;break}r=Object.assign(r,t)}}}return r},onActionError:async(e,n=[],r)=>{let{url:a}=e;for(let i in n){let o=n[i],{mode:s,enable:l=!0}=o;if(l&&"onActionError"===s&&t.regExpTest(o.regExp,a)){let t=await o.main(e,r);if(t){if(0!==t.code){r=t;break}r=Object.assign(r,t)}}}return r},getMiddleware:function(e){let t=[];if(e){let n=[...a,...e];n.sort((function(e,t){return e.index-t.index})),t=n.filter((e,t,r)=>{var a=[];return n.forEach((e,t)=>{a.push(e.id)}),a.indexOf(e.id)===t})}else t=a;return t}};async function o(e={}){let{code:t,msg:n,err:r,serviceParam:a,middlewareService:o}=e;console.error(n,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:f,crypto:p}=r.unicloud;if(r.pubfn.getData(a,"vk.system.serviceShutdown"))return{code:405,msg:r.pubfn.getData(a,"vk.system.serviceShutdownDescription")};let g={event:t,context:n},m=function(e,t){let n={};if(e.httpMethod){let{path:r=""}=e;if("/"===r[0]&&(r=r.substring(1)),r){let a,{urlrewrite:i={}}=t.unicloud,{rule:o}=i,s=t.pubfn.getData(i,"config.accessOnlyInRule"),l=!1;if(o)for(let e in o){let n=o[e],i=t.pubfn.regExpExecToTemplate(r,e,n);if(i){l=!0;let e=i.split("?");r=e[0],a=t.pubfn.urlStringToJson(e[1]);break}}if(!l&&s)return{mpserverlessComposedResponse:!0,statusCode:403,code:403,headers:{"content-type":"application/json"},body:JSON.stringify({code:403,msg:"access denied"})};if(n={data:{}},t.pubfn.isNotNull(a)&&(n.data=Object.assign(n.data,a)),e.queryStringParameters){let t=e.queryStringParameters;"string"==typeof t&&(t=JSON.parse(t)),n.data=Object.assign(n.data,t)}if(e.body){let 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:y}=m;if([403].indexOf(m.code)>-1)return m;b&&(b.vk_appid&&(n.APPID=b.vk_appid),b.vk_platform&&(n.PLATFORM=b.vk_platform));const w=s.createInstance({context:n});d.command.$=d.command.aggregate;let N={vk:r,config:a,pubFun:u,uniID:w,uniPay:l,db:d,_:d.command,$:d.command.aggregate,customUtil:f,crypto:p,env:{APPID:n.APPID,PLATFORM:n.PLATFORM}};try{uniCloud.vk=r,uniCloud.env=N.env}catch(e){}let _={url:h,data:b,uniIdToken:y,util:N,originalParam:g};const k=i.getMiddleware(c);let v,x,D;try{if(v=await i.onActionExecuting(_,k),0!==v.code)return await async function(e,t,n){try{n=await i.onActionIntercepted(e,t,n)}catch(n){return await o({code:500,msg:`云函数 ${e.url} 的中间件 onActionIntercepted 运行异常!`,err:n,serviceParam:e,middlewareService:t})}return n}(_,k,v);v.uid&&(b.uid=v.uid),_.filterResponse=v}catch(e){return await o({code:500,msg:`云函数 ${h} 的中间件 onActionExecuting 运行异常!`,err:e,serviceParam:_,middlewareService:k})}try{x=r.require("service/"+h)}catch(e){e||(e={});let{code:t,message:n=""}=e;return"MODULE_NOT_FOUND"==t&&n.indexOf("service/")>-1?await o({code:404,msg:`云函数 ${h} 不存在!`,serviceParam:_,middlewareService:k}):"MODULE_NOT_FOUND"==t&&n.indexOf("Cannot find module")>-1?await o({code:500,msg:n,err:e,serviceParam:_,middlewareService:k}):await o({code:500,msg:`云函数 ${h} 编译异常!`,err:e,serviceParam:_,middlewareService:k})}try{D=await async function(e={}){let{res:t,serviceParam:n,serviceMain:r}=e;t.uid&&(n.uid=t.uid);t.userInfo&&(n.userInfo=t.userInfo);let a=await r.main(n);t.token&&"object"==typeof a&&(a.vk_uni_token={token:t.token,tokenExpired:t.tokenExpired});return a}({res:v,serviceParam:_,serviceMain:x})}catch(e){e||(e={});let{code:t,message:n=""}=e;return"InternalServerError"==t&&n.indexOf("_id_ dup key")>-1?await o({code:500,msg:"vk.baseDao.add : _id不能重复添加",err:e,serviceParam:_,middlewareService:k}):0===n.indexOf("msg:")?await o({code:501,msg:n.substring(4),err:e,serviceParam:_,middlewareService:k}):0===n.indexOf("Cannot read property 'mp-weixin' of undefined")?await o({code:501,msg:"请先绑定微信",err:e,serviceParam:_,middlewareService:k}):await o({code:500,msg:`云函数 ${h} 运行异常!`,err:e,serviceParam:_,middlewareService:k})}try{D=await i.onActionExecuted(_,k,D)}catch(e){return await o({code:500,msg:`云函数 ${h} 的中间件 onActionExecuted 运行异常!`,err:e,serviceParam:_,middlewareService:k})}return D};function l(e,t,n,r,a,i){return p((o=p(p(t,e),p(r,i)))<<(s=a)|o>>>32-s,n);var o,s}function d(e,t,n,r,a,i,o){return l(t&n|~t&r,e,t,a,i,o)}function c(e,t,n,r,a,i,o){return l(t&r|n&~r,e,t,a,i,o)}function u(e,t,n,r,a,i,o){return l(t^n^r,e,t,a,i,o)}function f(e,t,n,r,a,i,o){return l(n^(t|~r),e,t,a,i,o)}function p(e,t){var n=(65535&e)+(65535&t);return(e>>16)+(t>>16)+(n>>16)<<16|65535&n}var g=function(e){return function(e){for(var t="",n=0;n<4*e.length;n++)t+="0123456789abcdef".charAt(e[n>>2]>>n%4*8+4&15)+"0123456789abcdef".charAt(e[n>>2]>>n%4*8&15);return t}(function(e,t){e[t>>5]|=128<>>9<<4)]=t;for(var n=1732584193,r=-271733879,a=-1732584194,i=271733878,o=0;o>5]|=(255&e.charCodeAt(n/8))<500)return await h.selectAll(e);let d=await h.getSelectData(e),{result:c,hasMore:u,total:f,getCount:p,pageIndex:g,fieldJson:b}=d;return c=c.skip((g-1)*o).limit(o),t.pubfn.isNotNull(b)&&(c=c.field(b)),c.get().then(e=>{let t={};return p?(t.total=f,t.hasMore=u):(t.total=e.data?e.data.length:0,t.hasMore=t.total>=o),t.rows=e.data,t.code=0,t.msg="查询成功",t.pagination={pageIndex:g,pageSize:o},s&&(t.rows=t.rows[0]),l?t.rows:t})},findById:async function(e){let{vk:t,db:n,_:r}=m,{dbName:a,id:i,fieldJson:o,db:s}=e,l=(s||n).collection(a).doc(i);o&&(l=l.field(o));let d=await l.get();return"[object Array]"===Object.prototype.toString.call(d.data)?d.data[0]:d.data},findByWhereJson:async function(e){let{vk:t,db:n,_:r}=m,{dbName:a,whereJson:i,fieldJson:o,sortArr:s}=e;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条件不能为空");return null},count:async function(e){let t,{vk:n,db:r,_:a}=m,{dbName:i,whereJson:o,foreignDB:s,foreignKey:l,groupJson:d,lastWhereJson:c}=e;if(n.pubfn.isNotNull(s)||n.pubfn.isNotNull(d)){let e=r.collection(i).aggregate();return n.pubfn.isNotNull(o)&&e.match(o),n.pubfn.isNotNull(d)&&e.group(d),n.pubfn.isNotNull(s)&&(e=h.addForeignDB({foreignDB:s,foreignKey:l,result:e})),n.pubfn.isNotNull(c)&&(e=e.match(c)),e=await e.count("total").end(),e.data[0]?e.data[0].total:0}return t=n.pubfn.isNotNull(o)?await r.collection(i).where(o).count():await r.collection(i).count(),t.total},getSelectData:async function(e){let{vk:t,db:n,_:r}=m,{dbName:a,whereJson:i,pageIndex:o=1,pageSize:s=10,getCount:l=!1}=e;s<0&&(o=1,s=999999999,l=!0);let d=e.sortArr,c=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 d=await h.getSelectData(e),{result:c,hasMore:u,total:f,getCount:p,pageIndex:g,pageSize:b,fieldJson:y}=d;b>0&&!f&&!p&&(f=b),r.pubfn.isNotNull(y)&&(c=c.field(y));let w={};if(p&&0===f)w={data:[]};else{let t=f;bi&&(n=i-t);let o=c.skip(t).limit(n).get();r.push(o)}try{w=(await Promise.all(r)).reduce((e,t)=>({data:e.data.concat(t.data),errMsg:e.errMsg}))}catch(t){throw console.error("vk.baseDao.select-异常",e,t),new Error("msg:vk.baseDao.select-异常")}}let N={};return N.total=p?f:w.data?w.data.length:0,N.hasMore=u,N.rows=w.data,N.code=0,N.msg="查询成功",N.pagination={pageIndex:g,pageSize:b},o&&(N.rows=N.rows[0]),s?N.rows:N},sum:async function(e){let{vk:t,db:n,_:r}=m,{dbName:a,fieldName:i,whereJson:o}=e;const s=n.command.aggregate;let l=n.collection(a).aggregate();t.pubfn.isNotNull(o)&&l.match(o),l.group({_id:null,num:s.sum("$"+i)});let d=await l.end();return d.data&&d.data[0]?d.data[0].num:0},avg:async function(e){let{vk:t,db:n,_:r}=m,{dbName:a,fieldName:i,whereJson:o}=e;const s=n.command.aggregate;let l=n.collection(a).aggregate();t.pubfn.isNotNull(o)&&l.match(o),l.group({_id:null,num:s.avg("$"+i)});let d=await l.end();return d.data&&d.data[0]?d.data[0].num:null},max:async function(e){let{vk:t,db:n,_:r}=m,{dbName:a,fieldName:i,whereJson:o}=e;const s=n.command.aggregate;let l=n.collection(a).aggregate();t.pubfn.isNotNull(o)&&l.match(o),l.group({_id:null,num:s.max("$"+i)});let d=await l.end();return d.data&&d.data[0]?d.data[0].num:null},min:async function(e){let{vk:t,db:n,_:r}=m,{dbName:a,fieldName:i,whereJson:o}=e;const s=n.command.aggregate;let l=n.collection(a).aggregate();t.pubfn.isNotNull(o)&&l.match(o),l.group({_id:null,num:s.min("$"+i)});let d=await l.end();return d.data&&d.data[0]?d.data[0].num:null},sample:async function(e){let{vk:t,db:n,_:r}=m,{dbName:a,whereJson:i,size:o,fieldJson:s}=e;n.command.aggregate;let l=n.collection(a).aggregate();return t.pubfn.isNotNull(i)&&l.match(i),l.sample({size:o}),t.pubfn.isNotNull(s)&&l.project(s),(await l.end()).data},selects:async function(e){let{vk:t,db:n,_:r}=m;if(t.pubfn.isNotNull(e.treeProps))return await h.tree(e);let{dbName:a,foreignKey:i="_id",whereJson:o={},pageIndex:s=1,pageSize:l=10,getCount:d=!1,getOne:c=!1,getMain:u=!1,sortArr:f=[],fieldJson:p={},groupJson:g,foreignDB:b=[],lastWhereJson:y,addFields:w}=e;-1==l&&(s=1,l=999999999,d=!1),c&&(l=1,d=!1);let N=0,_=!1;if(d){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(),N=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(),N=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(),N=e.total}s=l),k.rows=x,k.code=0,k.msg="查询成功",k.pagination={pageIndex:s,pageSize:l},c&&(k.rows=k.rows[0]),u?k.rows:k},listToObjectByLimit1:function(e){let{vk:t,db:n,_:r}=m,{list:a,foreignDB:i}=e;if(t.pubfn.isNotNull(i))for(let e in a)for(let n in i){let{as:r,limit:o,foreignDB:s,dbName:l}=i[n];r||(r=l),t.pubfn.isNotNull(s)&&(a[e][r]=h.listToObjectByLimit1({list:a[e][r],foreignDB:s})),1===o&&(a[e][r]&&a[e][r].length>0?a[e][r]=a[e][r][0]:a[e][r]={})}return a},addForeignDB:function(e){let{vk:t,db:n,_:r}=m,{foreignDB:a,foreignKey:i,result:o}=e;const s=r.aggregate;for(let e in a){let n,l,{dbName:d,foreignKey:c,localKey:u,localKeyType:f="",as:p,limit:g,whereJson:m,fieldJson:b,sortArr:y,foreignDB:w,addFields:N}=a[e];p||(p=d),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(["$"+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(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)),t.pubfn.isNotNull(N)&&(_=_.addFields(N)),_=_.done();let k={};k["foreignKey"+n]="$"+n;let v={from:d,let:k,pipeline:_,as:p};o=o.lookup(v)}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:f="",lastWhereJson:p,auxiliary:g=!0}=l;if("lastWhereJson"===n&&!p)continue;if("lastWhereJson"!==n&&p)continue;let m=d;if(r.pubfn.isNotNull(l.fieldName)&&(m=l.fieldName),a=r.pubfn.isNotNull(l.value)?l.value:o[d],r.pubfn.isNull(a)&&r.pubfn.isNotNull(u)&&(a=u),r.pubfn.isNull(c)&&(c=["address","province","city","area"].indexOf(f)>-1?"address":"[object Array]"===Object.prototype.toString.call(a)&&a.length>=2?"[]":"="),r.pubfn.isNotNull(a))if("custom"===c);else if("%%"===c)try{t[m]=new RegExp(a)}catch(e){}else if("%*"===c)try{t[m]=new RegExp("^"+a)}catch(e){}else if("*%"===c)try{t[m]=new RegExp(a+"$")}catch(e){}else if(">"===c)t[m]=t[m]?t[m].gt(a):i.gt(a);else if(">="===c)t[m]=t[m]?t[m].gte(a):i.gte(a);else if("<"===c)t[m]=t[m]?t[m].lt(a):i.lt(a);else if("<="===c)t[m]=t[m]?t[m].lte(a):i.lte(a);else if("in"===c)t[m]=i.in(a);else if("nin"===c)t[m]=i.nin(a);else if("!="===c)t[m]=i.neq(a);else if("[]"===c)t[m]=i.gte(a[0]).lte(a[1]);else if("[)"===c)t[m]=i.gte(a[0]).lt(a[1]);else if("(]"===c)t[m]=i.gt(a[0]).lte(a[1]);else if("()"===c)t[m]=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[m]=e}else t[m]=g?"___empty-array___"===a?[]:"___empty-object___"===a?{}:"___non-existent___"===a?i.exists(!1):"___existent___"===a?i.exists(!0):a:a}return t},addLastWhereJson:function(e,t={}){return h.addWhereJson(e,t,"lastWhereJson")},getTableData:async function(e){let{vk:t,db:n,_:r,config:a}=m,{dbName:i,data:o,getCount:s=!0,whereJson:l,fieldJson:d,sortArr:c,treeProps:u,groupJson:f,foreignKey:p,foreignDB:g,lastWhereJson:b}=e,{pageIndex:y,pageSize:w,pagination:N,sortRule:_,formData:k,columns:v}=o;N&&(y=N.pageIndex,w=N.pageSize);let x={},D={},T=[],S={};if(t.pubfn.isNotNull(c))T=c;else{let e=t.pubfn.getData(a,"vk.db.unicloud.getTableData.sortArr");t.pubfn.isNotNull(e)?T=e:T.push({name:"_id",type:"desc"})}return t.pubfn.isNotNull(_)&&(T=_),D=h.addWhereJson(o),S=h.addLastWhereJson(o),t.pubfn.isNotNull(l)&&t.pubfn.objectAssign(D,l),t.pubfn.isNotNull(d)&&t.pubfn.objectAssign(x,d),t.pubfn.isNotNull(b)&&t.pubfn.objectAssign(S,b),t.pubfn.isNullAll(g,f,u)?await t.baseDao.select({dbName:i,getCount:s,pageIndex:y,pageSize:w,fieldJson:x,whereJson:D,sortArr:T}):await t.baseDao.selects({dbName:i,foreignKey:p,getCount:s,pageIndex:y,pageSize:w,whereJson:D,fieldJson:x,sortArr:T,treeProps:u,groupJson:f,foreignDB:g,lastWhereJson:S})},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 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)*d).limit(d),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(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:b,total:g,rows:h,code:0,key:1,pageIndex:l,pageSize:d}},tree:async function(e){let{vk:t,db:n,_:r}=m,{dbName:a,whereJson:i={},pageIndex:o=1,pageSize:s=10,getCount:l=!1,sortArr:d=[],fieldJson:c={},lastWhereJson:u,treeProps:f={}}=e;e.foreignDB||(e.foreignDB=[]);let{id:p="_id",parent_id:g="parent_id",children:b="children",level:y=10,limit:w=500}=f;if(y<1||y>20)throw new Error("msg:treeProps.level的范围必须在[1,20]");delete e.treeProps,e.whereJson||(e.whereJson={[g]:null}),e.foreignDB.unshift({dbName:a,localKey:p,foreignKey:g,as:b,limit:w,whereJson:f.whereJson,fieldJson:f.fieldJson||e.fieldJson,sortArr:f.sortArr,foreignDB:t.pubfn.copyObject(e.foreignDB)});let N=t.pubfn.copyObject(e.foreignDB);for(let n=1;n{"[object object]"===Object.prototype.toString.call(e.content)&&(e.content=JSON.stringify(e.content)),void 0===e.dataType&&(e.dataType="json"),"default"!=e.dataType&&""!==e.dataType||delete e.dataType,e.useContent&&(e.content=JSON.stringify(e.data)),e.method||(e.method="POST"),void 0===e.headers&&void 0!==e.header&&(e.headers=e.header);let t=await uniCloud.httpclient.request(e.url,e);return!e.needOriginalRes&&t&&t.data?t.data:t},w={formValidateItem:function(e,t,n){let r={code:0,msg:"ok"};for(let a in n){let i=n[a];if(void 0===e[t]&&i.required){r={type:"undefined",code:-1,msg:"字段:"+t+" 名称错误,请检查!",key:t,value:e[t]};break}if(i.required&&(null==e[t]||null==e[t]||""===e[t]||0==e[t].length)){r={type:"required",code:-1,msg:i.message,key:t,value:e[t]};break}if(i.type&&void 0!==e[t]){if(Object.prototype.toString.call(e[t]).toLowerCase().toLowerCase()!==`[object ${i.type}]`.toLowerCase()){r={type:"type",code:-1,msg:i.message,key:t,value:e[t]};break}}if(i.len&&e[t].length!=i.len){r={type:"len",code:-1,msg:i.message,key:t,value:e[t]};break}if(i.min)if(i.type&&"number"==i.type){if(e[t]i.max){r={type:"max",code:-1,msg:i.message,key:t,value:e[t]};break}}else if(e[t].length>i.max){r={type:"max",code:-1,msg:i.message,key:t,value:e[t]};break}if("function"==typeof i.validator){let n=i.validator(i,e[t],(function(e){return e}));if(void 0!==n&&!0!==n){r={type:"validator",code:-1,msg:i.message,key:t,value:e[t]};break}}}return r}};function N(e){return JSON.parse(JSON.stringify(e))}var _={};function k(e){let t=[];for(let n=0;n0&&(n=_.treeToArrayFn(d[o],t,n,d[a])),s&&delete d[o]}return n},_.arrayToTree=function(e,t){let n=N(e),{id:r="_id",parent_id:a="parent_id",children:i="children",deleteParentId:o=!1,need_field:s}=t,l=[],d={};for(let e=0;e0&&a>0){const e=60*(new Date).getTimezoneOffset()*1e3+60*t*60*1e3;let i=new Date(r,a,0).getDate();n.startTime=new Date(`${r}/${a}/1`).getTime()-e,n.endTime=new Date(`${r}/${a}/${i}`).getTime()+86399999-e}return n},getDayOffsetStartAndEnd:function(e=0,t,n=8){let r,a={};"string"!=typeof t||isNaN(t)||(t=Number(t)),t?"number"==typeof t?(10==t.toString().length&&(t*=1e3),r=new Date(t)):r=t:r=new Date;const i=60*r.getTimezoneOffset()*1e3+60*n*60*1e3;r=new Date(r.getTime()+864e5*e);let o=x.getFullTime(r,2);return a.startTime=new Date(`${o.year}/${o.month}/${o.day}`).getTime()-i,a.endTime=new Date(`${o.year}/${o.month}/${o.day}`).getTime()+86399999-i,a},getMonthOffsetStartAndEnd:function(e=0,t,n=8){let r,a={};"string"!=typeof t||isNaN(t)||(t=Number(t)),t?"number"==typeof t?(10==t.toString().length&&(t*=1e3),r=new Date(t)):r=t:r=new Date;const i=60*r.getTimezoneOffset()*1e3+60*n*60*1e3;let o=x.getFullTime(r,2),s=o.month+e,l=o.year;s>12?(l+=Math.floor(s/12),s=Math.abs(s)%12):s<=0&&(l=l-1-Math.floor(Math.abs(s)/12),s=12-Math.abs(s)%12);let d=new Date(l,s,0).getDate();return a.startTime=new Date(`${l}/${s}/1`).getTime()-i,a.endTime=new Date(`${l}/${s}/${d}`).getTime()+86399999-i,a},getYearOffsetStartAndEnd:function(e=0,t,n=8){let r,a={};"string"!=typeof t||isNaN(t)||(t=Number(t)),t?"number"==typeof t?(10==t.toString().length&&(t*=1e3),r=new Date(t)):r=t:r=new Date;const i=60*r.getTimezoneOffset()*1e3+60*n*60*1e3;let o=x.getFullTime(r,2).year+e;return a.startTime=new Date(o+"/1/1").getTime()-i,a.endTime=new Date(o+"/12/31").getTime()+86399999-i,a},isLeapYear:function(e){if(void 0===e){let{now:t}=x.getCommonTime();e=t.year}else if("object"==typeof e){let{now:t}=x.getCommonTime(e);e=t.year}return e%4==0&&e%100!=0||e%400==0},isQingming:function(e=new Date){let{now:t}=x.getCommonTime(e),{year:n,month:r,day:a}=t,i=!1;return x.isLeapYear(n)||x.isLeapYear(n-1)?4===r&&4===a&&(i=!0):4===r&&5===a&&(i=!0),i}},D=x,T={formValidate:function(e={}){let t={code:0,msg:"ok"},{data:n,rules:r}=e;if(r)for(let e in r){let a=r[e];if(t=w.formValidateItem(n,e,a),0!=t.code)break}return t}};T.treeUtil=v,T.timeUtil=D,T.sleep=e=>new Promise(t=>setTimeout(t,e)),T.timeFormat=T.timeUtil.timeFormat,T.getFullTime=T.timeUtil.getFullTime,T.getWeekStartAndEnd=T.timeUtil.getWeekStartAndEnd,T.getDayOffsetStartAndEnd=T.timeUtil.getDayOffsetStartAndEnd,T.getMonthOffsetStartAndEnd=T.timeUtil.getMonthOffsetStartAndEnd,T.getYearOffsetStartAndEnd=T.timeUtil.getYearOffsetStartAndEnd,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.isArray=function(e){return"[object Array]"===Object.prototype.toString.call(e)},T.isObject=function(e){return"[object Object]"===Object.prototype.toString.call(e)},T.calcFreights=function(e,t){let{first_weight:n,first_weight_price:r,continuous_weight:a,continuous_weight_price:i,max_weight:o=1e8}=e,s=0,l=0,d=o,c=!1,u=0;for(;t>0;)c?(u++,t-=a,d-=a):(c=!0,l++,d=o,t-=n,d-=n),d<=0&&(c=!1);return s=l*r+i*u,s},T.getNewObject=function(e,t){let n=T.copyObject(e),r={};if(t&&t.length>0)for(let e in t){let a=t[e];T.isNotNull(n[a])&&(r[a]=n[a])}else r=n;return r},T.deleteObjectKeys=function(e,t=[]){var n={};if(e)for(let r in e)-1==t.indexOf(r)&&(n[r]=e[r]);return n},T.arrayToTree=T.treeUtil.arrayToTree,T.treeToArray=T.treeUtil.treeToArray,T.wildcardTestOne=function(e,t){if(!t)return!1;let n=t.replace(new RegExp("\\*"),"(.*)"),r=0!==t.indexOf("*")?"^":"",a="*"!==t[t.length-1]?"$":"";return new RegExp(r+n+a).test(e)},T.wildcardTest=function(e,t){let n=0;if("string"==typeof t)T.wildcardTestOne(e,t)&&n++;else if("object"==typeof t)for(let r=0;r0?d=i+"天":o>0?d=o+"小时":s>0?d=s+"分钟":l>0&&(d=l+"秒"),d+=t},T.calcSize=function(e=0,t,n,r=2,a="auto"){let i=0,o="";if((e=parseFloat(e))E(e,t)))}return e}T.snake2camel=function(e){return e.replace(S,(e,t)=>t?t.toUpperCase():"")},T.camel2snake=function(e){return e.replace(A,e=>"_"+e.toLowerCase())},T.snake2camelJson=function(e){return E(e,"snake2camel")},T.camel2snakeJson=function(e){return E(e,"camel2snake")},T.string2Number=function(e){switch(Object.prototype.toString.call(e).slice(8,-1).toLowerCase()){case"string":return isNaN(e)?e:Number(e);case"object":const t=Object.keys(e);for(let n=0;n-1){var o=a.indexOf('"',i),s=a.substring(i,o);if(o>i){var l=a.indexOf("---",o),d=a.substring(o+1,l).trim();n[s]=d}}}return n},T.getPlatform=function(e){e||(e=uniCloud.$context);let t=e.PLATFORM;return"h5"===t&&e.CLIENTUA.toLowerCase().indexOf("micromessenger")>-1&&(t="h5-weixin"),t};var I=T,J={},O={};J.get=function(e){let t,n=O[e];if(n){let{value:r,expired:a}=n;J.isExpired(e)?delete O[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};O[e]=r},J.del=function(e){delete O[e]},J.clear=function(e){if(e)for(let t in O)0==t.indexOf(e)&&delete O[t];else O={}},J.isExpired=function(e){let t=!0,n=O[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 O)0==n.indexOf(e)&&(t[e]=O[e]);else t=O;for(let e in t)J.isExpired(e)&&(delete t[e],delete O[e]);return t};var $=J,B={},C={},M={};B.init=function(e){M=(C=e).vk.system.globalDataDao},B.get=async function(e,t=0,n,r=!0){return"function"==typeof n?B.autoGet(e,t,n,r):B._get(e)},B.autoGet=async function(e,t=0,n,r=!0){let a,{vk:i}=C;try{a=await B._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},B._get=async function(e){let t;try{let n=await M.find(e);if(n){let{value:r,expired_at:a}=n;B.isExpired(n)?await B.del(e):t=r}}catch(e){return}return t},B.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 M.set({key:r,value:t,expired_at:e})}catch(e){return console.error(e),{code:-1,msg:"异常"}}return a},B.del=async function(e){await M.del(e)},B.clear=async function(e){if(e)return await M.deleteByWhere({key:new RegExp("^"+e)})},B.list=async function(e){return await M.list(e)},B.count=async function(e){return await M.count(e)},B.isExpired=function(e){let t=!0;return e&&(!e.expired_at||0==e.expired_at||e.expired_at>(new Date).getTime())&&(t=!1),t},B.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 M.inc({key:r,value:t,expired_at:e})}catch(e){return{code:-1,msg:"异常",err:e}}return a},B.uniqueAdd=async function(e,t=1,n=5){let{vk:r}=C,a={code:0,msg:"ok"};try{if(!e)return{code:-1,msg:"key值不能为空"};let i=n>0?(new Date).getTime()+1e3*n:0;await r.globalDataCache.deleteExpired(e);a.id=await M.add({key:e,value:t,expired_at:i})}catch(e){return console.error(e),{code:-1,msg:"异常"}}return a},B.deleteExpired=async function(e){await M.deleteExpired(e)};var j=B,P={},q={};function F(e){return e.code=e.errcode,e.msg=e.errmsg,e}P.init=function(e){q=e},P.getConfig=function(){let{vk:e,config:t,crypto:n,uniID:r}=q;const a=t.uni;var i;if(e.pubfn.isArray(a)){let t=uniCloud.env&&uniCloud.env.APPID?uniCloud.env.APPID:uniCloud.$context.APPID;i=e.pubfn.getListItem(a,"dcloudAppid",t),e.pubfn.isNull(i)&&(i=e.pubfn.getListItem(a,"isDefaultConfig",!0))}else i=a;return i},P.decrypt={},P.decrypt.getPhoneNumber=async function(e={}){let{appid:t,encryptedData:n,iv:r,sessionKey:a}=e;e.appId&&(t=e.appId);let i,{vk:o,crypto:s,uniID:l,config:d}=q,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=P.getConfig()["mp-weixin"].oauth.weixin.appid,o.pubfn.isNull(i))return{code:-1,msg:"请先配置微信小程序APPID"}}catch(e){return{code:-1,msg:"请先配置微信小程序APPID"}}return c.data=P.decrypt.decryptData({appid:i,encryptedData:n,iv:r,sessionKey:a}),c.phone=c.data.phoneNumber,c.mobile=c.data.phoneNumber,c},P.decrypt.decryptData=function(e={}){let t,{appid:n,encryptedData:r,iv:a,sessionKey:i}=e,{vk:o,crypto:s}=q,l=new Buffer(i,"base64"),d=new Buffer(r,"base64"),c=new Buffer(a,"base64");try{let e=s.createDecipheriv("aes-128-cbc",l,c);e.setAutoPadding(!0),t=e.update(d,"binary","utf8"),t+=e.final("utf8"),t=JSON.parse(t)}catch(e){throw new Error(e)}return t.watermark.appid!==n?{code:-1,msg:"appid不一致"}:t},P.auth={},P.auth.getAppidInfo=function(e={}){let{appid:t,appsecret:n}=e,{vk:r,config:a}=q;const i=P.getConfig();if(t){if(!n){let e=r.pubfn.getData(a,"vk.oauth.weixin.list")||[],i=r.pubfn.getListItem(e,"appid",t)||{};t=i.appid,n=i.appsecret}}else{let e=r.pubfn.getData(i,"mp-weixin.oauth.weixin")||{};t=e.appid,n=e.appsecret}if(r.pubfn.isNullOne(t,n))throw new Error("请先配置微信小程序appid和appsecret");return{appid:t,appsecret:n}},P.auth.getAccessTokenFn=async function(e={}){let{appid:t,appsecret:n}=P.auth.getAppidInfo(e),{vk:r,config:a}=q,i=await r.request({url:`https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=${t}&secret=${n}`,method:"GET"});return i.errcode?(console.error("getAccessToken失败:",i),{code:i.errcode,msg:i.errmsg,err:i}):{code:0,msg:"ok",access_token:i.access_token,expires_in:i.expires_in}},P.auth.getAccessToken=async function(e={}){let t,{appid:n,appsecret:r}=P.auth.getAppidInfo(e),{cache:a=!0}=e,{vk:i}=q,o="mp-weixin-"+n;if(a&&(t=await i.globalDataCache.get(o)),i.pubfn.isNull(t)){let n=await P.auth.getAccessTokenFn(e);0===n.code&&(t=n.access_token,await i.globalDataCache.set(o,t,240),await i.globalDataCache.deleteExpired())}return t},P.auth.code2Session=async function(e={}){let t,{vk:n,uniID:r}=q,{platform:a,context:i}=e;return a||(a=n.pubfn.getPlatform(i)||"mp-weixin"),t="mp-weixin"===a?await P.auth.code2SessionMpWeixin(e):"h5-weixin"===a?await P.h5.auth.code2Session(e):await r.code2SessionWeixin(e),t.platform=a,t},P.auth.code2SessionMpWeixin=async function(e={}){let{appid:t,appsecret:n}=P.auth.getAppidInfo(e),r=e.code||e.js_code,{vk:a}=q,i=await a.request({url:`https://api.weixin.qq.com/sns/jscode2session?appid=${t}&secret=${n}&js_code=${r}&grant_type=authorization_code`,method:"GET"});if(i.errcode){let e=i.errmsg;return 40163===i.errcode&&(e="该code已被使用,请重新获取"),40029===i.errcode&&(e="无效code,请重新获取"),{...i,code:i.errcode,msg:e}}return i=a.pubfn.snake2camelJson(i),{...i,code:0,msg:"ok"}},P.wxacode={},P.wxacode.getUnlimited=async function(e={}){let t,{vk:n}=q,{access_token:r,scene:a,page:i,width:o,auto_color:s,line_color:l,is_hyaline:d}=e;if(t=r||await P.auth.getAccessToken(e),!t)return{code:-1,msg:"获取access_token失败,请检查appid和appsecret是否正确"};let c=await n.request({url:"https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token="+t,method:"POST",data:{scene:a,page:i,width:o,auto_color:s,line_color:l,is_hyaline:d},dataType:"default",useContent:!0,headers:{encoding:null}});return c.length<500?{code:-1,msg:"生成小程序码失败,请重试!"}:Buffer.isBuffer(c)?c:{code:c.errcode,msg:c.errmsg,err:c}},P.urlscheme={},P.urlscheme.generate=async function(e={}){let{vk:t}=q,{jump_wxa:n={},is_expire:r,expire_time:a}=e,{path:i,query:o}=n,s=await P.auth.getAccessToken(e);if(!s)return{code:-1,msg:"获取access_token失败,请检查appid和appsecret是否正确"};a>0&&(a=(new Date).getTime()/1e3+a);let l=await t.request({url:"https://api.weixin.qq.com/wxa/generatescheme?access_token="+s,method:"POST",data:{jump_wxa:{path:i,query:o},is_expire:r,expire_time:a},useContent:!0});switch(l=F(l),l.code){case 40001:l.msg="access_token错误";break;case 40165:l.msg="小程序页面不存在!"}return l},P.security={},P.security.msgSecCheck=async function(e={}){let{vk:t}=q,{content:n}=e,r=await P.auth.getAccessToken(e);if(!r)return{code:-1,msg:"获取access_token失败,请检查appid和appsecret是否正确"};let a=await t.request({url:"https://api.weixin.qq.com/wxa/msg_sec_check?access_token="+r,method:"POST",data:{content:n},useContent:!0});switch(a=F(a),a.code){case 40001:a.msg="access_token错误";break;case 87014:a.msg="内容含有违法违规内容,请检查!"}return a},P.security.imgSecCheck=async function(e={}){let{vk:t}=q,{dataBuffer:n,formData:r,base64:a}=e,i=await P.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=F(o),o.code){case 40001:o.msg="access_token错误";break;case 87014:o.msg="图片内容含有违法违规内容,请检查!";break;case 40006:o.msg="图片大小不能超过1M"}return o},P.subscribeMessage={},P.subscribeMessage.send=async function(e={}){let{vk:t}=q,{touser:n,template_id:r,page:a,data:i,miniprogram_state:o="formal",lang:s="zh_CN"}=e,l=await P.auth.getAccessToken(e);if(!l)return{code:-1,msg:"获取access_token失败,请检查appid和appsecret是否正确"};let d=await t.request({url:"https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token="+l,method:"POST",data:{touser:n,template_id:r,page:a,data:i,miniprogram_state:o,lang:s},useContent:!0});switch(d=F(d),d.code){case 40003:d.msg="touser字段openid为空或者不正确";break;case 40037:d.msg="订阅模板id为空不正确";break;case 43101:d.msg="用户未订阅该消息";break;case 47003:d.msg="模板参数不准确,可能为空或者不满足规则,errmsg会提示具体是哪个字段出错";break;case 41030:d.msg="page路径不正确,需要保证在现网版本小程序中存在"}return d},P.livebroadcast={},P.livebroadcast.getLiveInfo=async function(e={}){let{vk:t}=q,{pageIndex:n=1,pageSize:r=100}=e,a=await P.auth.getAccessToken(e);if(!a)return{code:-1,msg:"获取access_token失败,请检查appid和appsecret是否正确"};if(n<=0)return{code:-1,msg:"pageIndex必须是大于0的整数"};let i=(n-1)*r,o=r,s=await t.request({url:"https://api.weixin.qq.com/wxa/business/getliveinfo?access_token="+a,method:"POST",data:{start:i,limit:o},useContent:!0});switch(s=F(s),s.code){case 941e4:s.msg="直播间列表为空"}return s},P.app={},P.app.auth={},P.app.auth.getAppidInfo=function(e={}){let{appid:t,appsecret:n}=e,{vk:r,config:a}=q;const i=P.getConfig();if(t){if(!n){let e=r.pubfn.getData(a,"vk.oauth.weixin.list")||[],i=r.pubfn.getListItem(e,"appid",t)||{};t=i.appid,n=i.appsecret}}else{let e=r.pubfn.getData(i,"app-plus.oauth.weixin")||{};t=e.appid,n=e.appsecret}if(r.pubfn.isNullOne(t,n))throw new Error("请先配置微信小程序appid和appsecret");return{appid:t,appsecret:n}},P.app.auth.getAccessToken=async function(e={}){let{appid:t,appsecret:n}=P.app.auth.getAppidInfo(e),{vk:r,config:a}=q,{code:i}=e,o=await r.request({url:`https://api.weixin.qq.com/sns/oauth2/access_token?appid=${t}&secret=${n}&code=${i}&grant_type=authorization_code`,method:"GET"});return o.errcode?(console.error("getAccessToken失败:",o),{code:o.errcode,msg:o.errmsg,err:o}):{...o,code:0,msg:"ok"}},P.app.auth.getUserInfo=async function(e={}){let{appid:t,appsecret:n}=P.app.auth.getAppidInfo(e),{vk:r,config:a}=q,{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}},P.h5={},P.h5.auth={},P.h5.auth.getAppidInfo=function(e={}){let{appid:t,appsecret:n}=e,{vk:r,config:a}=q;const i=P.getConfig();if(t){if(!n){let e=r.pubfn.getData(a,"vk.oauth.weixin.list")||[],i=r.pubfn.getListItem(e,"appid",t)||{};t=i.appid,n=i.appsecret}}else{let e=r.pubfn.getData(i,"h5-weixin.oauth.weixin")||{};t=e.appid,n=e.appsecret}if(r.pubfn.isNullOne(t,n))throw new Error("请先配置微信公众号appid和appsecret");return{appid:t,appsecret:n}},P.h5.auth.code2Session=async function(e={}){let{appid:t,appsecret:n}=P.h5.auth.getAppidInfo(e),{code:r}=e,{vk:a}=q,i=await a.request({url:`https://api.weixin.qq.com/sns/oauth2/access_token?appid=${t}&secret=${n}&code=${r}&grant_type=authorization_code`,method:"GET"});if(i.errcode){let e=i.errmsg;return 40163===i.errcode&&(e="该code已被使用,请重新获取"),40029===i.errcode&&(e="无效code,请重新获取"),{...i,code:i.errcode,msg:e}}return i=a.pubfn.snake2camelJson(i),{...i,code:0,msg:"ok"}},P.loginByWeixin=async function(e={},t){let n,{vk:r,uniID:a,_:i}=q,{code:o,platform:s,type:l,appid:d}=e;s||(s=r.pubfn.getPlatform(t),e.platform=s);try{n=await a.loginByWeixin(e);try{if(n.uid&&"register"===n.type&&["h5-weixin","app-plus"].indexOf(s)>-1){let e=await r.openapi.weixin.app.auth.getUserInfo({access_token:n.accessToken,openid:n.openid});(e.nickname||e.headimgurl)&&(n.userInfo=await r.baseDao.updateAndReturn({dbName:"uni-id-users",whereJson:{_id:n.uid||"___",nickname:i.exists(!1)},dataJson:{nickname:e.nickname,avatar:e.headimgurl}}))}}catch(e){console.error("保存用户头像昵称异常:",e)}}catch(e){console.error("loginByWeixin异常:",e);let t=e.message||"";throw e.message.indexOf("code been used")>-1&&(t="该code已被使用,请重新获取"),e.message.indexOf("invalid code")>-1&&(t="无效code,请重新获取"),new Error("msg:"+t)}return n};var R=P,L={},U={};L.init=function(e){U=e},L.open={},L.open.auth={},L.open.auth.getAppidInfo=function(e={}){let{appid:t,appsecret:n}=e,{vk:r,config:a}=U;if(!t){let e=r.pubfn.getData(a,"vk.service.openapi.baidu")||{};t=e.appid,n=e.appsecret}if(r.pubfn.isNullOne(t,n))throw new Error("请在cloudfunctions/common/config/index.js中配置并检查百度开放平台的appid和appsecret是否正确,参数路径:vk.service.openapi.baidu");return{appid:t,appsecret:n}},L.open.auth.getAccessTokenFn=async function(e={}){let{appid:t,appsecret:n}=L.open.auth.getAppidInfo(e),{vk:r,config:a}=U,i=await r.request({url:`https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=${t}&client_secret=${n}`,method:"GET"});return i.error_code?(console.error("getAccessToken失败:",i),{code:i.error_code,msg:i.error_msg,err:i}):{...i,code:0,msg:"ok"}},L.open.auth.getAccessToken=async function(e={}){let t,{appid:n,appsecret:r}=L.open.auth.getAppidInfo(e),{cache:a=!0}=e,{vk:i}=U,o="openapi-baidu-"+n;if(a&&(t=await i.globalDataCache.get(o)),i.pubfn.isNull(t)){let n=await L.open.auth.getAccessTokenFn(e);0===n.code&&(t=n.access_token,await i.globalDataCache.set(o,t,n.expires_in-3600),await i.globalDataCache.deleteExpired())}return t},L.open.ocr={},L.open.ocr.business_license=async function(e={}){let{image:t,url:n}=e;return await L.open.request({...e,action:"ocr/v1/business_license",actionVersion:"2.0",data:{image:t,url:n}})},L.open.ocr.idcard=async function(e={}){let{image:t,url:n,id_card_side:r,detect_risk:a,detect_photo:i}=e;return await L.open.request({...e,action:"ocr/v1/idcard",actionVersion:"2.0",data:{image:t,url:n,id_card_side:r,detect_risk:a,detect_photo:i}})},L.open.request=async function(e={}){let{vk:t}=U,n=await L.open.auth.getAccessToken(e);if(!n)return{code:-1,msg:"获取access_token失败,请检查appid和appsecret是否正确"};let{action:r,actionVersion:a="2.0",header:i={"content-type":"application/x-www-form-urlencoded"},data:o}=e,s=await t.request({url:`https://aip.baidubce.com/rest/${a}/${r}?access_token=${n}`,method:"POST",headers:{"content-type":"application/x-www-form-urlencoded"},data:o});return s.error_code?{code:s.error_code,msg:s.error_msg,err:s}:{...s,code:0,msg:"ok"}};var z=L,K={};K.weixin=R,K.baidu=z,K.init=function(e){K.weixin.init(e),K.baidu.init(e)};var W=K;const Z=/^multipart\/.+?(?:;\s*boundary=(?:(?:"(.+)")|(?:([^\s]+))))$/i,G=/Content-Disposition:\sform-data;\sname="(.+?)"(?:;\sfilename="(.+?)")?/i,V=/Content-Type:\s(.+?)$/i;var Y={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(V)[1],t.fileContent=e[2];break;case 4:t.filename=decodeURIComponent(n[2]),t.contentType=e[1].toString().match(V)[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 H="opendb-admin-menus";var Q={},X={};Q.init=function(e){X=e},Q.findRoleById=async(e="___")=>{let t,{vk:n,db:r,_:a}=X;return t=await n.baseDao.findByWhereJson({dbName:"uni-id-roles",whereJson:{role_id:e}}),t},Q.roleBindPermission=async(e={})=>{let{vk:t,db:n,_:r}=X,a={code:0,msg:""},{role_id:i="___",permissionList:o=[],reset:s=!1}=e;if(!s){let e=await Q.findRoleById(i),{permission:t=[]}=e;o=t.concat(o),o=[...new Set(o)]}return a.num=await t.baseDao.update({dbName:"uni-id-roles",whereJson:{role_id:i},dataJson:{permission:r.set(o)}}),a},Q.roleBindMenu=async(e={})=>{let{vk:t,db:n,_:r}=X,a={code:0,msg:""},{role_id:i="___",menuList:o=[],reset:s=!1,addPermission:l=!1}=e,d=[],c=await Q.findRoleById(i),{menu:u=[],permission:f=[]}=c;if(s?d=te(o,u):(o=u.concat(o),o=[...new Set(o)]),a.num=await t.baseDao.update({dbName:"uni-id-roles",whereJson:{role_id:i},dataJson:{menu:r.set(o)}}),l){let e=await Q.findMenuByIdsToPermission(o),n=[];if(s&&t.pubfn.isNotNull(d)){n=te(e,await Q.findMenuByIdsToPermission(d))}f=f.concat(e),f=te(n,f),f=[...new Set(f)],Q.roleBindPermission({role_id:i,permissionList:f,reset:!0})}return a},Q.findPermissionById=async(e="___")=>{let t,{vk:n,db:r,_:a}=X;return t=await n.baseDao.findByWhereJson({dbName:"uni-id-permissions",whereJson:{permission_id:e}}),t},Q.findMenuByIdsToPermission=async e=>{let{vk:t,db:n,_:r}=X,a=await Q.findMenuByIds(e);if(t.pubfn.isNull(a))return[];let i=[];for(let e in a){let n=a[e].permission;t.pubfn.isNotNull(n)&&(i=i.concat(n))}return i=[...new Set(i)],i},Q.listPermissionToTree=async(e={})=>{let t,{vk:n,db:r,_:a}=X,{getCount:i=!1,pageSize:o=500,pageIndex:s=1,whereJson:l={parent_id:null},sortArr:d=[{name:"sort",type:"asc"}],treeProps:c={}}=e,{level:u=3,limit:f=500,whereJson:p}=c;t=await n.baseDao.selects({dbName:"uni-id-permissions",pageIndex:s,pageSize:o,getCount:i,whereJson:l,sortArr:d,treeProps:{id:"permission_id",parent_id:"parent_id",children:"children",level:u,limit:f,whereJson:p,sortArr:d}});let g={id:"permission_id",parent_id:"parent_id",children:"children"},m=t.rows;m=n.pubfn.treeToArray(m,g),t.list=n.pubfn.copyObject(m);for(let e in m){let t=m[e],r="",a="";if(n.pubfn.isNotNull(t.level)){r=` - ${["未分类","子弹级","炸弹级","榴弹级","核弹级"][t.level]}(LV:${t.level})`}if(n.pubfn.isNotNull(t.curd_category)){a=" - "+["未分类","增","删","改","查","特殊"][t.curd_category]}m[e].label=`${t.permission_name}(${t.permission_id})${a}${r}`}return m=n.pubfn.arrayToTree(m,g),t.rows=m,t},Q.findMenuById=async(e="___")=>{let t,{vk:n,db:r,_:a}=X;return t=await n.baseDao.findByWhereJson({dbName:H,whereJson:{menu_id:e}}),t},Q.findMenuByIds=async e=>{let t,{vk:n,db:r,_:a}=X;return n.pubfn.isNull(e)?[]:(t=(await n.baseDao.select({dbName:H,pageIndex:1,pageSize:500,whereJson:{menu_id:a.in(e)}})).rows,t)},Q.listMenuByRole=async(e={})=>{let{vk:t,db:n,_:r}=X,a={code:0,msg:"",menus:[],menuList:[]},{role:i}=e,o=[],s={enable:!0},l={enable:!0};if(!(i.indexOf("admin")>-1)){if(t.pubfn.isNull(i))return a;let e=await t.baseDao.select({dbName:"uni-id-roles",pageSize:500,whereJson:{role_id:r.in(i),enable:!0},fieldJson:{menu:!0}});for(let n in e.rows){let{menu:r}=e.rows[n];t.pubfn.isNotNull(r)&&(o=o.concat(r))}if(0==o.length)return a;o=[...new Set(o)],s.menu_id=r.in(o),l.menu_id=r.in(o)}s.parent_id=null;let d=[{name:"sort",type:"asc"}],c=await t.baseDao.selects({dbName:H,pageIndex:1,pageSize:500,whereJson:s,sortArr:d,treeProps:{id:"menu_id",parent_id:"parent_id",children:"children",level:3,limit:500,whereJson:l,sortArr:d}});return a.menus=c.rows,a.menuList=t.pubfn.treeToArray(c.rows,{id:"menu_id",parent_id:"parent_id",children:"children"}),a},Q.menuBindPermission=async(e={})=>{let{vk:t,db:n,_:r}=X,a={code:0,msg:""},{menu_id:i="___",permissionList:o=[],reset:s=!1}=e;if(!s){let e=await Q.findMenuById(i),{permission:t=[]}=e;o=t.concat(o),o=[...new Set(o)]}return a.num=await t.baseDao.update({dbName:H,whereJson:{menu_id:i},dataJson:{permission:r.set(o)}}),a},Q.listMenuToTree=async(e={})=>{let t,{vk:n,db:r,_:a}=X,{getCount:i=!1,pageSize:o=500,pageIndex:s=1,whereJson:l={parent_id:null},sortArr:d=[{name:"sort",type:"asc"}],treeProps:c={}}=e,{level:u=3,limit:f=500,whereJson:p}=c;t=await n.baseDao.selects({dbName:H,pageIndex:s,pageSize:o,getCount:i,whereJson:l,sortArr:d,treeProps:{id:"menu_id",parent_id:"parent_id",children:"children",level:u,limit:f,whereJson:p,sortArr:d}});let g={id:"menu_id",parent_id:"parent_id",children:"children"},m=t.rows;m=n.pubfn.treeToArray(m,g),t.list=n.pubfn.copyObject(m);for(let e in m){let t=m[e];m[e].label=`${t.name}(${t.menu_id})`}return m=n.pubfn.arrayToTree(m,g),t.rows=m,t};var ee=Q;function te(e,t){let n=new Set(e);return t.filter(e=>!n.has(e))}const ne="opendb-global-data";var re={},ae={};re.init=function(e){ae=e},re.find=async e=>{let{vk:t,db:n,_:r}=ae,a={};return a=await t.baseDao.findById({dbName:ne,id:e}),a},re.del=async e=>{let{vk:t,db:n,_:r}=ae,a={};return a=await t.baseDao.deleteById({dbName:ne,id:e}),a},re.deleteByWhere=async e=>{let{vk:t,db:n,_:r}=ae,a={};return a=await t.baseDao.del({dbName:ne,whereJson:e}),a},re.deleteExpired=async e=>{let{vk:t,db:n,_:r}=ae,a={},i={};"string"==typeof e?i._id=e:"object"==typeof e&&(i=e);let o=(new Date).getTime();return a=await t.baseDao.del({dbName:ne,whereJson:{...i,expired_at:r.gt(0).lte(o)}}),a},re.update=async e=>{let{vk:t,db:n,_:r}=ae,a={},{key:i,value:o,comment:s,expired_at:l}=e;return a=await t.baseDao.updateById({dbName:ne,id:i,dataJson:{value:r.set(o),comment:s,expired_at:l}}),a},re.add=async e=>{let{vk:t,db:n,_:r}=ae,a={},{key:i,value:o,comment:s,expired_at:l}=e;return a=await t.baseDao.add({dbName:ne,dataJson:{_id:i,key:i,value:o,comment:s,expired_at:l}}),a},re.count=async e=>{let{vk:t,db:n,_:r}=ae,a={};return a=await t.baseDao.count({dbName:ne,whereJson:e}),a},re.set=async e=>{let t={code:0,msg:"ok"};return await re.count({_id:e.key})>0?(t.num=await re.update(e),t.mode="update"):(t.id=await re.add(e),t.num=1,t.mode="add"),t},re.inc=async e=>{let{vk:t,db:n,_:r}=ae,{key:a,value:i,expired_at:o}=e,s={},l=await t.baseDao.updateById({dbName:ne,id:a,dataJson:{value:r.inc(i),expired_at:o}});if(0==l){0===await re.count({_id:a})&&(s.id=await re.add(e),s.num=1,s.mode="add")}else s.num=l,s.mode="update";return s},re.list=async e=>{let{vk:t,db:n,_:r}=ae,a={},{pageIndex:i,pageSize:o,whereJson:s,sortArr:l}=e;return a=await t.baseDao.select({dbName:ne,pageIndex:i,pageSize:o,whereJson:s,sortArr:l}),a};var ie=re,oe={},se={init:function(e){oe=e}},le={specialUrlEncode:function(e){return(e=encodeURIComponent(e)).replace(/\+/g,"%20").replace(/\*/g,"%2A").replace(/%7E/g,"~")},sign:function(e,t){let{crypto:n}=oe;return n.createHmac("sha1",e).update(t).digest("base64")}};se.sendSms=async function(e){let{vk:t,config:n}=oe,{provider:r,appid:a,smsKey:i,smsSecret:o,signName:s,phone:l,templateId:d,data:c}=e,u={};if("aliyun"===r){let r=t.pubfn.getData(n,"vk.service.sms.aliyun");t.pubfn.isNotNull(r)&&(i||(e.smsKey=r.accessKeyId),o||(e.smsSecret=r.accessKeySecret),s||(e.signName=r.signName)),u=await se.sendSmsByAliyun(e)}else{if("unicloud"!==r)return{code:-1,msg:`暂不支持${r}供应商`};{let r=t.pubfn.getData(n,"uni.service.sms");t.pubfn.isNotNull(r)&&(i||(e.smsKey=r.smsKey),o||(e.smsSecret=r.smsSecret),s||(e.signName=r.signName)),u=await se.sendSmsByUnicloud(e)}}return u.requestParam={provider:r,phone:l},u},se.sendSmsByAliyun=async function(e){let{vk:t,config:n}=oe,{provider:r,appid:a,smsKey:i,smsSecret:o,signName:s,phone:l,templateId:d,data:c}=e,u={code:0,msg:""};try{if(t.pubfn.isNullOne(i,o))return{code:-1,msg:"阿里云短信配置错误,请检查!"};let e="https://dysmsapi.aliyuncs.com",n=t.pubfn.timeFormat(new Date,"yyyy-MM-ddThh:mm:ssZ",0),r=(new Date).getTime().toString().substring(7)+t.pubfn.random(30);"object"==typeof c&&(c=JSON.stringify(c));let a={SignatureMethod:"HMAC-SHA1",SignatureNonce:r,AccessKeyId:i,SignatureVersion:"1.0",Timestamp:n,Format:"json",Action:"SendSms",Version:"2017-05-25",PhoneNumbers:l,SignName:s,TemplateParam:c,TemplateCode:d};delete a.Signature;let f=[];for(let e in a)f.push(e);f.sort();let p=!1,g="";for(let e in f){let t=f[e];g+="&"+le.specialUrlEncode(t)+"="+le.specialUrlEncode(a[t])}g=g.substring(1);let m="GET&"+le.specialUrlEncode("/")+"&"+le.specialUrlEncode(g),h=le.sign(o+"&",m),b=le.specialUrlEncode(h),y="Signature="+b+"&"+g;p&&(console.log("\r\n随机数\r\n"),console.log(a.SignatureNonce),console.log("\r\n=========\r\n"),console.log(a.Timestamp),console.log("\r\n====sortedQueryString====\r\n"),console.log(g),console.log("\r\n=====stringToSign====\r\n"),console.log(m),console.log("\r\n=====sign====\r\n"),console.log(h),console.log("\r\n=====signature====\r\n"),console.log(b),console.log("\r\n=========\r\n"),console.log(e+"/?"+y));t.pubfn.urlStringToJson(y);let w=await t.request({url:`${e}?${y}`,method:"GET"});return u="OK"===w.Code?{code:0,msg:"ok",requestRes:w}:{code:-1,msg:w.Message,requestRes:w},u}catch(e){return{code:-1,msg:"短信发送失败",err:{message:e.message,stack:e.stack}}}},se.sendSmsByUnicloud=async function(e){let{provider:t,appid:n,smsKey:r,smsSecret:a,signName:i,phone:o,templateId:s,data:l}=e,d={code:0,msg:""};try{let e=await uniCloud.sendSms({smsKey:r,smsSecret:a,phone:o,templateId:s,data:l});d=0==e.code||0==e.errCode?{code:0,msg:"ok",requestRes:e}:{code:-1,msg:e.errMessage||e.errMsg,requestRes:e}}catch(e){return{code:-1,msg:"短信发送失败",err:{message:e.message,stack:e.stack}}}return d},se.sendSmsVerifyCode=async function(e){let t,{vk:n,config:r,uniID:a}=oe,{provider:i,phone:o,code:s,type:l,expiresIn:d=180}=e,c={code:0,msg:""};if("unicloud"===i){t=n.pubfn.getData(r,"uni.service.sms.templateId");let e=n.pubfn.getData(r,"uni.service.sms.codeExpiresIn");e&&(d=e);let a=n.pubfn.getData(r,"uni.service.sms.name"),l=Math.ceil(d/60).toString();c=await n.system.smsUtil.sendSms({provider:i,phone:o,templateId:t,data:{code:s,name:a,action:"身份验证",expMinute:l}})}else t=n.pubfn.getData(r,`vk.service.sms.${i}.templateCode.verifyCode`),c=await n.system.smsUtil.sendSms({provider:i,phone:o,templateId:t,data:{code:s}});return 0===c.code&&await a.setVerifyCode({mobile:o,code:s,expiresIn:d,type:l}),c};var de=se,ce={};ce.sysDao=ee,ce.globalDataDao=ie,ce.smsUtil=de,ce.init=function(e){let t=["sysDao","globalDataDao","smsUtil"];for(let n in t){let r=t[n];"function"==typeof ce[r].init&&ce[r].init(e)}};var ue=ce,fe={};fe.router=s,fe.md5=g,fe.baseDao=b,fe.request=y,fe.pubfn=I,fe.temporaryCache=$,fe.globalDataCache=j,fe.openapi=W,fe.formDataUtil=Y,fe.system=ue,fe.requireCache={},fe.require=function(e){if(fe.requireCache&&fe.requireCache[e])return fe.requireCache[e];{const t=fe.unicloud.requireFn(fe.unicloud.baseDir+"/"+e);return fe.requireCache[e]=t,t}},fe.requireFn=function(e){try{return fe.unicloud.requireFn(e)}catch(e){return}},fe.use=function(e,t){for(let n in e)e[n]&&"function"==typeof e[n].init&&e[n].init(t),fe[n]=e[n]},fe.unicloud={},fe.init=function(e={}){if(fe.unicloud.requireFn=e.requireFn,e.configCenter||(e.configCenter=fe.requireFn("uni-config-center")),e.uniID||(e.uniID=fe.requireFn("uni-id")),e.uniPay||(e.uniPay=fe.requireFn("uni-pay")),e.middlewareService||(e.middlewareService=fe.requireFn("./middleware/index")),e.daoCenter||(e.daoCenter=fe.requireFn("./dao/index")),e.crypto||(e.crypto=fe.requireFn("crypto")),e.urlrewrite||(e.urlrewrite=fe.requireFn("./util/urlrewrite")),e.config||(e.config=e.configCenter({pluginId:"vk-unicloud"}).requireFile("index.js")),!e.db)try{e.db=uniCloud.database()}catch(e){}fe.vkPay=fe.requireFn("vk-uni-pay"),e.pubFun||(e.pubFun=fe.requireFn("./util/pubFunction")),e.redis||(e.redis=fe.requireFn("vk-redis")),e.redis&&(fe.redisUtil=e.redis,fe.redis=e.redis.redis,fe.newRedis=e.redis.newRedis),fe.unicloud.configCenter=e.configCenter,fe.unicloud.config=e.config,fe.unicloud.uniID=e.uniID,fe.unicloud.uniPay=e.uniPay,fe.unicloud.db=e.db,fe.unicloud._=e.db.command,fe.unicloud.pubfn=fe.pubfn,fe.unicloud.middlewareService=e.middlewareService,fe.unicloud.pubFun=e.pubFun,fe.unicloud.customUtil=e.customUtil,fe.unicloud.baseDir=e.baseDir,fe.unicloud.crypto=e.crypto,fe.unicloud.urlrewrite=e.urlrewrite;const t={vk:fe,...fe.unicloud};fe.use({daoCenter:e.daoCenter,baseDao:fe.baseDao,openapi:fe.openapi,globalDataCache:fe.globalDataCache,system:fe.system},t)};var pe=fe;module.exports=pe; diff --git a/uni_modules/vk-unicloud/uniCloud/cloudfunctions/common/vk-unicloud/package.json b/uni_modules/vk-unicloud/uniCloud/cloudfunctions/common/vk-unicloud/package.json index 5ae429a99fd2256efe513212f9b4a1132b8b80ba..8f8e1d4f576dbfa66b5b827ec0a1a4f0da7def69 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.4.1", + "version": "2.4.2", "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/aliyunOSSUtil.js b/uni_modules/vk-unicloud/vk_modules/vk-unicloud-page/libs/function/aliyunOSSUtil.js index f96b8d16306861a7716b796fc3bbbd14cbb8bdfb..cbe26f910ad62c52b81e2bc1c06bb91b0b4cd15a 100644 --- a/uni_modules/vk-unicloud/vk_modules/vk-unicloud-page/libs/function/aliyunOSSUtil.js +++ b/uni_modules/vk-unicloud/vk_modules/vk-unicloud-page/libs/function/aliyunOSSUtil.js @@ -108,7 +108,7 @@ aliyunOSSUtil.uploadFile = function(obj) { fail: function(res) { if (title) vk.hideLoading(); Logger.error = res; - if(res.errMsg && res.errMsg.indexOf('fail url not in domain list')>-1){ + if (res.errMsg && res.errMsg.indexOf('fail url not in domain list') > -1) { vk.toast('上传域名未在白名单中'); } if (typeof obj.fail === "function") obj.fail(res); @@ -122,16 +122,14 @@ aliyunOSSUtil.uploadFile = function(obj) { let colorArr = config.logger.colorArr; let colorStr = colorArr[counterNum % colorArr.length]; counterNum++; - console.log("%c--------【开始】【阿里云oss文件上传】--------", 'color: ' + colorStr + - ';font-size: 12px;font-weight: bold;'); + console.log("%c--------【开始】【阿里云oss文件上传】--------", 'color: ' + colorStr + ';font-size: 12px;font-weight: bold;'); console.log("【本地文件】: ", Logger.filePath); console.log("【返回数据】: ", Logger.result); console.log("【预览地址】: ", Logger.result.fileID); console.log("【上传耗时】: ", Logger.runTime, "毫秒"); console.log("【上传时间】: ", vk.pubfn.timeFormat(Logger.startTime, "yyyy-MM-dd hh:mm:ss")); if (Logger.error) console.error("【error】:", Logger.error); - console.log("%c--------【结束】【阿里云oss文件上传】--------", 'color: ' + colorStr + - ';font-size: 12px;font-weight: bold;'); + console.log("%c--------【结束】【阿里云oss文件上传】--------", 'color: ' + colorStr + ';font-size: 12px;font-weight: bold;'); } } }); @@ -181,8 +179,8 @@ function getConfig() { function createFileName(obj = {}) { let { index = 0, - file, - filePath, + file, + filePath, } = obj; let vk = getApp().globalData.vk; let aliyunOSS = getConfig(); @@ -216,7 +214,8 @@ function createFileName(obj = {}) { fileObj.fileNickName = fileNickName; return fileObj; } -function getFileSuffix(obj = {}){ + +function getFileSuffix(obj = {}) { let { file, filePath @@ -226,7 +225,7 @@ function getFileSuffix(obj = {}){ let suffixName = filePath.substring(filePath.lastIndexOf(".") + 1); if (suffixName && suffixName.length < 5) suffix = suffixName; } - if(file){ + if (file) { if (file.path) { let suffixName = file.path.substring(file.path.lastIndexOf(".") + 1); if (suffixName && suffixName.length < 5) suffix = suffixName; 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 f4ab9ca57db7188c905f17b0a704729a3a3853d6..b3b24cf16cf4a64482292fb69feb36a3fcb1fc30 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 @@ -987,6 +987,36 @@ pubfn.snake2camelJson = function(obj) { pubfn.camel2snakeJson = function(obj) { return parseObjectKeys(obj, 'camel2snake'); }; +/** + * 将能转成数字的字符串转数字(支持字符串、对象、数组) + * @param {Any} obj + * vk.pubfn.string2Number(obj); + */ +pubfn.string2Number = function(obj) { + const type = Object.prototype.toString.call(obj).slice(8, -1).toLowerCase(); + switch (type) { + case 'string': + if (!isNaN(obj)) { + return Number(obj); + } else { + return obj; + } + case 'object': + const keys = Object.keys(obj); + for (let i = 0; i < keys.length; i++) { + const key = keys[i]; + obj[key] = pubfn.string2Number(obj[key]); + } + return obj; + case 'array': + for (let i = 0; i < obj.length; i++) { + obj[i] = pubfn.string2Number(obj[i]); + } + return obj; + default: + return obj; + } +}; // 前端专属开始 ----------------------------------------------------------- /** diff --git a/uni_modules/vk-unicloud/vk_modules/vk-unicloud-page/libs/vk-unicloud/vk-unicloud-callFunctionUtil.js b/uni_modules/vk-unicloud/vk_modules/vk-unicloud-page/libs/vk-unicloud/vk-unicloud-callFunctionUtil.js index 6f15f145573bb7f1d4788543408659bf33e0d3a8..4eb12d10c5159c3506229bea250254f3d1cbb5d1 100644 --- a/uni_modules/vk-unicloud/vk_modules/vk-unicloud-page/libs/vk-unicloud/vk-unicloud-callFunctionUtil.js +++ b/uni_modules/vk-unicloud/vk_modules/vk-unicloud-page/libs/vk-unicloud/vk-unicloud-callFunctionUtil.js @@ -176,9 +176,7 @@ class CallFunctionUtil { setTimeout(() => { if (config.login.url) { let currentPage = getCurrentPages()[getCurrentPages().length - 1]; - if (currentPage && currentPage.route && - "/" + currentPage.route === config.login.url - ) { + if (currentPage && currentPage.route && "/" + currentPage.route === config.login.url) { return false; } uni.navigateTo({ @@ -650,7 +648,7 @@ class CallFunctionUtil { fail, } = params; // 只有是系统异常时才进行重试 - if(params.needRetry){ + if (params.needRetry) { if (sysFail || (res.code && [90001].indexOf(res.code) > -1)) { if (!obj.hookResult || (typeof obj.hookResult === "function" && !obj.hookResult(err))) { Logger.sysFail = true;