wangxy vor 2 Monaten
Ursprung
Commit
87001202cc
38 geänderte Dateien mit 25 neuen und 3820 gelöschten Zeilen
  1. 1 1
      components/MtaTabBar/MtaTabBar.vue
  2. 9 1
      manifest.json
  3. 15 9
      pages.json
  4. 0 6
      uni_modules/uni-config-center/changelog.md
  5. 0 81
      uni_modules/uni-config-center/package.json
  6. 0 93
      uni_modules/uni-config-center/readme.md
  7. 0 0
      uni_modules/uni-config-center/uniCloud/cloudfunctions/common/uni-config-center/index.js
  8. 0 13
      uni_modules/uni-config-center/uniCloud/cloudfunctions/common/uni-config-center/package.json
  9. 0 121
      uni_modules/uni-id/changelog.md
  10. 0 88
      uni_modules/uni-id/package.json
  11. 0 33
      uni_modules/uni-id/readme.md
  12. 0 201
      uni_modules/uni-id/uniCloud/cloudfunctions/common/uni-id/LICENSE.md
  13. 0 0
      uni_modules/uni-id/uniCloud/cloudfunctions/common/uni-id/index.js
  14. 0 20
      uni_modules/uni-id/uniCloud/cloudfunctions/common/uni-id/package.json
  15. 0 27
      uni_modules/uni-open-bridge-common/changelog.md
  16. 0 84
      uni_modules/uni-open-bridge-common/package.json
  17. 0 5
      uni_modules/uni-open-bridge-common/readme.md
  18. 0 26
      uni_modules/uni-open-bridge-common/uniCloud/cloudfunctions/common/uni-open-bridge-common/bridge-error.js
  19. 0 124
      uni_modules/uni-open-bridge-common/uniCloud/cloudfunctions/common/uni-open-bridge-common/config.js
  20. 0 30
      uni_modules/uni-open-bridge-common/uniCloud/cloudfunctions/common/uni-open-bridge-common/consts.js
  21. 0 317
      uni_modules/uni-open-bridge-common/uniCloud/cloudfunctions/common/uni-open-bridge-common/index.js
  22. 0 19
      uni_modules/uni-open-bridge-common/uniCloud/cloudfunctions/common/uni-open-bridge-common/package.json
  23. 0 116
      uni_modules/uni-open-bridge-common/uniCloud/cloudfunctions/common/uni-open-bridge-common/storage.js
  24. 0 324
      uni_modules/uni-open-bridge-common/uniCloud/cloudfunctions/common/uni-open-bridge-common/uni-cloud-cache.js
  25. 0 31
      uni_modules/uni-open-bridge-common/uniCloud/cloudfunctions/common/uni-open-bridge-common/validator.js
  26. 0 203
      uni_modules/uni-open-bridge-common/uniCloud/cloudfunctions/common/uni-open-bridge-common/weixin-server.js
  27. 0 19
      uni_modules/uni-open-bridge-common/uniCloud/database/opendb-open-data.schema.json
  28. 0 2
      uni_modules/uni-test/changelog.md
  29. 0 120
      uni_modules/uni-test/common/uni-ui.scss
  30. 0 12
      uni_modules/uni-test/components/uni-section/config.json
  31. 0 30
      uni_modules/uni-test/components/uni-section/readme.md
  32. 0 136
      uni_modules/uni-test/components/uni-section/uni-section.vue
  33. 0 26
      uni_modules/uni-test/components/uni-test/uni-test.vue
  34. 0 76
      uni_modules/uni-test/package.json
  35. 0 242
      uni_modules/uni-test/pages/uni-test/uni-test.vue
  36. 0 1
      uni_modules/uni-test/readme.md
  37. 0 8
      uni_modules/uni-test/uniCloud/cloudfunctions/test.js/index.js
  38. 0 1175
      uni_modules/uni-test/uniCloud/database/db_init.json

+ 1 - 1
components/MtaTabBar/MtaTabBar.vue

@@ -1,7 +1,7 @@
 <template>
   <view class="custom-tabbar">
     <view v-for="(item, index) in tabList" :key="index" @click="switchTab(item)">
-      <!-- <image :src="activeIndex === index ? item.selectedIcon : item.icon" /> -->
+      <image :src="activeIndex === index ? item.selectedIcon : item.icon" />
       <text :style="{ color: activeIndex === index ? selectedColor : defaultColor }">
         {{ item.text }}
       </text>

+ 9 - 1
manifest.json

@@ -68,5 +68,13 @@
     "uniStatistics" : {
         "enable" : false
     },
-    "vueVersion" : "3"
+    "vueVersion" : "3",
+    "h5" : {
+        "router" : {
+            "mode" : "history",
+            "base" : "/mdist"
+        },
+        "title" : "大连交通技师学院",
+        "template" : "template.h5.html"
+    }
 }

+ 15 - 9
pages.json

@@ -372,20 +372,26 @@
 		}
 	],
 	"tabBar": {
-		"color": "#565656",
-		"selectedColor": "#0856E6",
-		"borderStyle": "black",
-		"backgroundColor": "#ffffff",
-		"fontSize": "13px",
-		"iconWidth": "28px",
-		"spacing": "0px",
+		"custom": true,
 		"list": []
 	},
 	"globalStyle": {
 		"navigationBarTextStyle": "black",
 		"navigationBarTitleText": "麦塔软件",
-		"navigationBarBackgroundColor": "#F8F8F8"
+		"navigationBarBackgroundColor": "#F8F8F8",
+		//禁止滑动返回
+		"app-plus": {
+			"popGesture": "none"
+		}
 	},
 
-	"uniIdRouter": {}
+	"uniIdRouter": {},
+	"condition": { //模式配置,仅开发期间生效
+		"current": 0, //当前激活的模式(list 的索引项)
+		"list": [{
+			"name": "login", //模式名称
+			"path": "pages/index/index", //启动页面,必选
+			"query": "" //启动参数,在页面的onLoad函数里面得到
+		}]
+	}
 }

+ 0 - 6
uni_modules/uni-config-center/changelog.md

@@ -1,6 +0,0 @@
-## 0.0.3(2022-11-11)
-- 修复 config 方法获取根节点为数组格式配置时错误的转化为了对象的Bug
-## 0.0.2(2021-04-16)
-- 修改插件package信息
-## 0.0.1(2021-03-15)
-- 初始化项目

+ 0 - 81
uni_modules/uni-config-center/package.json

@@ -1,81 +0,0 @@
-{
-  "id": "uni-config-center",
-  "displayName": "uni-config-center",
-  "version": "0.0.3",
-  "description": "uniCloud 配置中心",
-  "keywords": [
-    "配置",
-    "配置中心"
-],
-  "repository": "",
-  "engines": {
-    "HBuilderX": "^3.1.0"
-  },
-"dcloudext": {
-    "sale": {
-      "regular": {
-        "price": "0.00"
-      },
-      "sourcecode": {
-        "price": "0.00"
-      }
-    },
-    "contact": {
-      "qq": ""
-    },
-    "declaration": {
-      "ads": "无",
-      "data": "无",
-      "permissions": "无"
-    },
-    "npmurl": "",
-    "type": "unicloud-template-function"
-  },
-  "directories": {
-    "example": "../../../scripts/dist"
-  },
-  "uni_modules": {
-    "dependencies": [],
-    "encrypt": [],
-    "platforms": {
-      "cloud": {
-        "tcb": "y",
-        "aliyun": "y"
-      },
-      "client": {
-        "App": {
-          "app-vue": "u",
-          "app-nvue": "u"
-        },
-        "H5-mobile": {
-          "Safari": "u",
-          "Android Browser": "u",
-          "微信浏览器(Android)": "u",
-          "QQ浏览器(Android)": "u"
-        },
-        "H5-pc": {
-          "Chrome": "u",
-          "IE": "u",
-          "Edge": "u",
-          "Firefox": "u",
-          "Safari": "u"
-        },
-        "小程序": {
-          "微信": "u",
-          "阿里": "u",
-          "百度": "u",
-          "字节跳动": "u",
-          "QQ": "u"
-        },
-        "快应用": {
-          "华为": "u",
-          "联盟": "u"
-        },
-        "Vue": {
-            "vue2": "y",
-            "vue3": "u"
-        }
-      }
-    }
-  }
-}

+ 0 - 93
uni_modules/uni-config-center/readme.md

@@ -1,93 +0,0 @@
-# 为什么使用uni-config-center
-
-实际开发中很多插件需要配置文件才可以正常运行,如果每个插件都单独进行配置的话就会产生下面这样的目录结构
-
-```bash
-cloudfunctions
-└─────common 公共模块
-        ├─plugin-a // 插件A对应的目录
-        │  ├─index.js
-        │  ├─config.json // plugin-a对应的配置文件
-        │  └─other-file.cert  // plugin-a依赖的其他文件
-        └─plugin-b // plugin-b对应的目录
-           ├─index.js
-           └─config.json // plugin-b对应的配置文件
-```
-
-假设插件作者要发布一个项目模板,里面使用了很多需要配置的插件,无论是作者发布还是用户使用都是一个大麻烦。
-
-uni-config-center就是用了统一管理这些配置文件的,使用uni-config-center后的目录结构如下
-
-```bash
-cloudfunctions
-└─────common 公共模块
-        ├─plugin-a // 插件A对应的目录
-        │  └─index.js
-        ├─plugin-b // plugin-b对应的目录
-        │  └─index.js
-        └─uni-config-center
-           ├─index.js // config-center入口文件
-           ├─plugin-a
-           │  ├─config.json  // plugin-a对应的配置文件
-           │  └─other-file.cert  // plugin-a依赖的其他文件
-           └─plugin-b
-              └─config.json  // plugin-b对应的配置文件
-```
-
-使用uni-config-center后的优势
-
-- 配置文件统一管理,分离插件主体和配置信息,更新插件更方便
-- 支持对config.json设置schema,插件使用者在HBuilderX内编写config.json文件时会有更好的提示(后续HBuilderX会提供支持)
-
-# 用法
-
-在要使用uni-config-center的公共模块或云函数内引入uni-config-center依赖,请参考:[使用公共模块](https://uniapp.dcloud.net.cn/uniCloud/cf-common)
-
-```js
-const createConfig = require('uni-config-center')
-
-const uniIdConfig = createConfig({
-    pluginId: 'uni-id', // 插件id
-    defaultConfig: { // 默认配置
-        tokenExpiresIn: 7200,
-        tokenExpiresThreshold: 600,
-    },
-    customMerge: function(defaultConfig, userConfig) { // 自定义默认配置和用户配置的合并规则,不设置的情况侠会对默认配置和用户配置进行深度合并
-        // defaudltConfig 默认配置
-        // userConfig 用户配置
-        return Object.assign(defaultConfig, userConfig)
-    }
-})
-
-
-// 以如下配置为例
-// {
-//   "tokenExpiresIn": 7200,
-//   "passwordErrorLimit": 6,
-//   "bindTokenToDevice": false,
-//   "passwordErrorRetryTime": 3600,
-//   "app-plus": {
-//     "tokenExpiresIn": 2592000
-//   },
-//   "service": {
-//     "sms": {
-//       "codeExpiresIn": 300
-//     }
-//   }
-// }
-
-// 获取配置
-uniIdConfig.config() // 获取全部配置,注意:uni-config-center内不存在对应插件目录时会返回空对象
-uniIdConfig.config('tokenExpiresIn') // 指定键值获取配置,返回:7200
-uniIdConfig.config('service.sms.codeExpiresIn') // 指定键值获取配置,返回:300
-uniIdConfig.config('tokenExpiresThreshold', 600) // 指定键值获取配置,如果不存在则取传入的默认值,返回:600
-
-// 获取文件绝对路径
-uniIdConfig.resolve('custom-token.js') // 获取uni-config-center/uni-id/custom-token.js文件的路径
-
-// 引用文件(require)
-uniIDConfig.requireFile('custom-token.js') // 使用require方式引用uni-config-center/uni-id/custom-token.js文件。文件不存在时返回undefined,文件内有其他错误导致require失败时会抛出错误。
-
-// 判断是否包含某文件
-uniIDConfig.hasFile('custom-token.js') // 配置目录是否包含某文件,true: 文件存在,false: 文件不存在
-```

Datei-Diff unterdrückt, da er zu groß ist
+ 0 - 0
uni_modules/uni-config-center/uniCloud/cloudfunctions/common/uni-config-center/index.js


+ 0 - 13
uni_modules/uni-config-center/uniCloud/cloudfunctions/common/uni-config-center/package.json

@@ -1,13 +0,0 @@
-{
-    "name": "uni-config-center",
-    "version": "0.0.3",
-    "description": "配置中心",
-    "main": "index.js",
-    "keywords": [],
-    "author": "DCloud",
-    "license": "Apache-2.0",
-    "origin-plugin-dev-name": "uni-config-center",
-    "origin-plugin-version": "0.0.3",
-    "plugin-dev-name": "uni-config-center",
-    "plugin-version": "0.0.3"
-}

+ 0 - 121
uni_modules/uni-id/changelog.md

@@ -1,121 +0,0 @@
-## 3.3.33(2025-01-08)
-- 修改文档图片链接
-## 3.3.32(2024-04-26)
-- 兼容uni-app-x对客户端uniPlatform的调整(uni-app-x内uniPlatform区分app-android、app-ios)
-## 3.3.31(2023-12-13)
-- 移除无用文件
-## 3.3.30(2023-12-13)
-- 短信、一键登录相关密钥改为非必填
-## 3.3.29(2022-10-20)
-- 使用[uni-open-bridge-common](https://uniapp.dcloud.net.cn/uniCloud/uni-open-bridge.html#common)存储用户三方凭证,以便其他服务使用。
-## 3.3.28(2022-07-27)
-- 修复 app端微信登录返回的accessToken过期时间(expired)不正确的Bug
-## 3.3.27(2022-07-27)
-- 短信发送失败、微信登录失败等场景下输出原始错误方便排查错误
-## 3.3.26(2022-07-08)
-- 兼容配置放在uni-id下的逻辑,但是仍推荐使用uni-config-center
-## 3.3.25(2022-06-30)
-- 修复config文件不合法时未抛出具体错误的Bug
-## 3.3.24(2022-06-28)
-- 修复3.3.12引出的使用多应用配置时报错的Bug
-## 3.3.23(2022-06-13)
-- 修复上版本引出的部分依赖未找到的Bug
-## 3.3.22(2022-06-13)
-- 新增 preferedWebPlatform 配置用于解决HBuilderX 3.4.9版本起web端platform不一致的问题 [详情](https://uniapp.dcloud.net.cn/uniCloud/uni-id?id=prefered-web-platform)
-## 3.3.21(2022-05-24)
-- 修复createInstance传入clientInfo无效的Bug
-## 3.3.20(2022-05-19)
-- 调整以下错误码(账号已注册[uni-id-account-exists]、账号不存在[uni-id-account-not-exists]、账号已绑定[uni-id-account-bound])
-## 3.3.19(2022-05-19)
-- 修复 addUser 部分情况下会创建出重复账号的Bug
-## 3.3.18(2022-05-12)
-- 调整绑定、解绑邮箱手机号接口,只要传递code参数就进行验证码校验即使传递的值为undefined
-## 3.3.17(2022-05-09)
-- register_env内增加os_name字段用于区分注册时的客户端系统类型
-## 3.3.16(2022-05-09)
-- 修复 addUser接口添加的用户无法使用密码登录的Bug [详情](https://ask.dcloud.net.cn/question/144670)
-## 3.3.15(2022-05-08)
-- 修复config文件语法错误时报`this.t is not a function`的Bug 感谢@寒暄
-## 3.3.14(2022-05-08)
-- 新增 getWeixinUserInfo接口 用于获取app平台微信登录用户的用户信息 [详情](https://uniapp.dcloud.net.cn/uniCloud/uni-id.html#get-weixin-user-info)
-- 新增 addUser接口 用于手动添加用户 [详情](https://uniapp.dcloud.net.cn/uniCloud/uni-id.html#add-user)
-- 新增 resetPwdBySms接口 用于使用短信验证码重置密码 [详情](https://uniapp.dcloud.net.cn/uniCloud/uni-id.html#reset-pwd-by-sms)
-- 新增 refreshToken接口 用于主动刷新用户token [详情](https://uniapp.dcloud.net.cn/uniCloud/uni-id.html#refresh-token)
-- 调整 用户注册时记录用户注册环境到 register_env 字段 [详情](https://uniapp.dcloud.net.cn/uniCloud/uni-id.html#user-table)
-- 调整 用户注册时将注册 ip 移至 register_env 内
-
-## 3.3.13(2022-03-04)
-- createInstance方法支持传递clientInfo [详情](https://uniapp.dcloud.net.cn/uniCloud/uni-id.html#create-instance)
-- 修复`this.t is not a function`报错
-## 3.3.12(2022-01-15)
-- 新增 preferedAppPlatform 配置用于解决uni-app vue2版本vue3版本获取platform不一致的问题 [详情](https://uniapp.dcloud.net.cn/uniCloud/uni-id?id=prefered-app-platform)
-- 修复 checkToken 未返回自定义token内容的Bug
-## 3.3.11(2022-01-11)
-- 修复用户名密码登录时多个应用出现重复用户名登录报错的Bug
-## 3.3.10(2022-01-07)
-- 新增 自定义国际化语言支持 [详情](https://uniapp.dcloud.net.cn/uniCloud/uni-id?id=custom-i8n)
-- 修复 一键登录时未校验重复手机号是否已验证的Bug
-- 修复 Apple登录时用户邮箱为空时报错的Bug
-- 修复 登录接口未传username时错误提示不正确的Bug
-## 3.3.9(2021-11-09)
-- 去除重复的context.xxx未找到的提示语
-## 3.3.8(2021-10-28)
-- 新增 用户账户封禁接口 [详情](https://uniapp.dcloud.net.cn/uniCloud/uni-id?id=ban-account)
-- 新增 用户账户注销接口 [详情](https://uniapp.dcloud.net.cn/uniCloud/uni-id?id=close-account)
-- 修复 未传appid时用户重复注册的Bug
-## 3.3.7(2021-10-08)
-- 移除部分接口的废弃提示
-## 3.3.6(2021-09-08)
-- 修复 邀请码可能重复的Bug
-## 3.3.5(2021-08-10)
-- 修复版本号错误
-## 3.3.4(2021-08-10)
-- 微信、QQ、支付宝登录新增type参数用于指定当前是登录还是注册
-## 3.3.3(2021-08-04)
-- 修复使用数组形式的配置文件报错的Bug
-## 3.3.2(2021-08-03)
-- 修复上3.3.0版本引出的createInstance接口传入配置不生效的Bug 感谢[hmh](https://gitee.com/hmh)
-## 3.3.1(2021-07-30)
-- 修复 将设置用户允许登录的应用列表时传入空数组报错的Bug
-## 3.3.0(2021-07-30)
-- 新增 不同端应用配置隔离 [详情](https://uniapp.dcloud.net.cn/uniCloud/uni-id?id=isolate-config)
-- 新增 不同端用户隔离 [详情](https://uniapp.dcloud.net.cn/uniCloud/uni-id?id=isolate-user)
-  + 此版本升级需要开发者处理一下用户数据,请参考 [补齐用户dcloud_appid字段](https://uniapp.dcloud.net.cn/uniCloud/uni-id?id=makeup-dcloud-appid)
-- 新增 QQ登录、注册相关功能 [详情](https://uniapp.dcloud.net.cn/uniCloud/uni-id?id=qq)
-- 调整 不再支持绑定手机、邮箱时不填验证码直接绑定
-## 3.2.1(2021-07-09)
-- 撤销3.2.0版本所做的调整
-## 3.2.0(2021-07-09)
-- 【重要】支持不同端(管理端、用户端等)用户隔离 [详情](https://uniapp.dcloud.net.cn/uniCloud/uni-id?id=isolate-user)
-- 支持不同端(管理端、用户端等)配置文件隔离 [详情](https://uniapp.dcloud.net.cn/uniCloud/uni-id?id=isolate-config)
-## 3.1.3(2021-07-08)
-- 移除插件内误传的node_modules
-## 3.1.2(2021-07-08)
-- 修复 微信小程序绑定微信账号时报错的Bug
-## 3.1.1(2021-07-01)
-- 使用新的错误码规范,兼容旧版 [详情](https://uniapp.dcloud.net.cn/uniCloud/uni-id?id=errcode)
-- 修复微信登录、绑定时未返回用户accessToken的Bug
-## 3.1.0(2021-04-19)
-- 增加对用户名、邮箱、密码字段的两端去空格
-- 默认忽略用户名、邮箱的大小写 [详情](https://uniapp.dcloud.net.cn/uniCloud/uni-id?id=case-sensitive)
-- 修复 customToken导出async方法报错的Bug
-## 3.0.12(2021-04-13)
-- 调整bindTokenToDevice默认值为false
-## 3.0.11(2021-04-12)
-- 修复3.0.7版本引出的多个用户访问时可能出现30201报错的Bug
-## 3.0.10(2021-04-08)
-- 优化错误提示
-## 3.0.9(2021-04-08)
-- bindMobile接口支持通过一键登录的方式绑定
-- 优化错误提示
-## 3.0.8(2021-03-19)
-- 修复 3.0.7版本某些情况下生成token报错的Bug
-## 3.0.7(2021-03-19)
-- 新增 支持uni-config-center,更新uni-id无须再担心配置被覆盖 [详情](https://uniapp.dcloud.io/uniCloud/uni-id?id=uni-config-center)
-- 新增 自定义token内容,可以缓存角色权限之外的更多信息到客户端 [详情](https://uniapp.dcloud.io/uniCloud/uni-id?id=custom-token)
-- 新增 支持传入context获取uni-id实例,防止单实例多并发时全局context混乱 [详情](https://uniapp.dcloud.io/uniCloud/uni-id?id=create-instance)
-## 3.0.6(2021-03-05)
-- 新增[uniID.wxBizDataCrypt](https://uniapp.dcloud.io/uniCloud/uni-id?id=%e5%be%ae%e4%bf%a1%e6%95%b0%e6%8d%ae%e8%a7%a3%e5%af%86)方法
-- 优化loginByApple方法,提高接口响应速度
-## 3.0.5(2021-02-03)
-- 调整为uni_modules目录规范

+ 0 - 88
uni_modules/uni-id/package.json

@@ -1,88 +0,0 @@
-{
-  "id": "uni-id",
-  "displayName": "uni-id",
-  "version": "3.3.33",
-  "description": "简单、统一、可扩展的用户中心",
-  "keywords": [
-    "uniid",
-    "uni-id",
-    "用户管理",
-    "用户中心",
-    "短信验证码"
-],
-  "repository": "https://gitee.com/dcloud/uni-id.git",
-  "engines": {
-    "HBuilderX": "^3.1.0"
-  },
-  "dcloudext": {
-    "sale": {
-      "regular": {
-        "price": "0.00"
-      },
-      "sourcecode": {
-        "price": "0.00"
-      }
-    },
-    "contact": {
-      "qq": ""
-    },
-    "declaration": {
-      "ads": "无",
-      "data": "无",
-      "permissions": "无"
-    },
-    "npmurl": "",
-    "type": "unicloud-template-function"
-  },
-  "uni_modules": {
-    "dependencies": ["uni-config-center", "uni-open-bridge-common"],
-    "encrypt": [],
-    "platforms": {
-      "cloud": {
-        "tcb": "y",
-        "aliyun": "y",
-        "alipay": "y"
-      },
-      "client": {
-        "App": {
-            "app-vue": "u",
-            "app-nvue": "u",
-            "app-harmony": "u",
-            "app-uvue": "u"
-        },
-        "H5-mobile": {
-          "Safari": "u",
-          "Android Browser": "u",
-          "微信浏览器(Android)": "u",
-          "QQ浏览器(Android)": "u"
-        },
-        "H5-pc": {
-          "Chrome": "u",
-          "IE": "u",
-          "Edge": "u",
-          "Firefox": "u",
-          "Safari": "u"
-        },
-        "小程序": {
-          "微信": "u",
-          "阿里": "u",
-          "百度": "u",
-          "字节跳动": "u",
-          "QQ": "u",
-          "钉钉": "u",
-          "快手": "u",
-          "飞书": "u",
-          "京东": "u"
-        },
-        "快应用": {
-          "华为": "u",
-          "联盟": "u"
-        },
-        "Vue": {
-          "vue2": "y",
-          "vue3": "u"
-        }
-      }
-    }
-  }
-}

+ 0 - 33
uni_modules/uni-id/readme.md

@@ -1,33 +0,0 @@
-**文档已移至[uni-id文档](https://doc.dcloud.net.cn/uniCloud/uni-id/old.html)**
-
-> 一般uni-id升级大版本时为不兼容更新,从低版本迁移到高版本请参考:[uni-id迁移指南](https://doc.dcloud.net.cn/uniCloud/uni-id/old.html#m1to2)
-
-## 重要升级说明
-
-**uni-id 3.x版本,搭配的uniCloud admin版本需大于1.2.10。**
-
-### 缓存角色权限
-
-自`uni-id 3.0.0`起,支持在token内缓存用户的角色权限,默认开启此功能,各登录接口的needPermission参数不再生效。如需关闭请在config内配置`"removePermissionAndRoleFromToken": true`。
-
-为什么要缓存角色权限?要知道云数据库是按照读写次数来收取费用的,并且读写数据库会拖慢接口响应速度。未配置`"removePermissionAndRoleFromToken": true`的情况下,可以在调用checkToken接口时不查询数据库获取用户角色权限。
-
-详细checkToken流程如下:
-
-![](https://web-ext-storage.dcloud.net.cn/ext/uni-id/uni-id-flow.jpg)
-
-可以看出,旧版token(removePermissionAndRoleFromToken为true时生成的)在checkToken时如需返回权限需要进行两次数据库查询。新版token不需要查库即可返回权限信息。
-
-**注意**
-
-- 由于角色权限缓存在token内,可能会存在权限已经更新但是用户token未过期之前依然是旧版角色权限的情况。可以调短一些token过期时间来减少这种情况的影响。
-- admin角色token内不包含permission,如需自行判断用户是否有某个权限,要注意admin角色需要额外判断一下,写法如下
-  ```js
-  const {
-    role,
-    permission
-  } = await uniID.checkToken(event.uniIdToken)
-  if(role.includes('admin') || permission.includes('your permission id')) {
-    // 当前角色拥有'your permission id'对应的权限
-  }
-  ```

+ 0 - 201
uni_modules/uni-id/uniCloud/cloudfunctions/common/uni-id/LICENSE.md

@@ -1,201 +0,0 @@
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.

Datei-Diff unterdrückt, da er zu groß ist
+ 0 - 0
uni_modules/uni-id/uniCloud/cloudfunctions/common/uni-id/index.js


+ 0 - 20
uni_modules/uni-id/uniCloud/cloudfunctions/common/uni-id/package.json

@@ -1,20 +0,0 @@
-{
-    "name": "uni-id",
-    "version": "3.3.32",
-    "description": "uni-id for uniCloud",
-    "main": "index.js",
-    "homepage": "https:\/\/uniapp.dcloud.io\/uniCloud\/uni-id",
-    "repository": {
-        "type": "git",
-        "url": "git+https:\/\/gitee.com\/dcloud\/uni-id.git"
-    },
-    "author": "",
-    "license": "Apache-2.0",
-    "dependencies": {
-        "uni-config-center": "file:..\/..\/..\/..\/..\/uni-config-center\/uniCloud\/cloudfunctions\/common\/uni-config-center"
-    },
-    "origin-plugin-dev-name": "uni-id",
-    "origin-plugin-version": "3.3.33",
-    "plugin-dev-name": "uni-id",
-    "plugin-version": "3.3.33"
-}

+ 0 - 27
uni_modules/uni-open-bridge-common/changelog.md

@@ -1,27 +0,0 @@
-## 1.2.1(2024-09-13)
-- 修复 微信小程序平台 当微信的服务器返回`encrypt_key`的过期时间`expire_in`为`0`时特殊处理为`1`天,否者可能无法验证客户端请求携带的版本
-## 1.2.0(2023-04-27)
-- 重要 微信小程序平台 使用微信新增 API getStableAccessToken 获取 access_token, access_token 有效期内重复调用该接口不会更新 access_token, [详情](https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/mp-access-token/getStableAccessToken.html)
-## 1.1.5(2023-03-27)
-- 修复 微信小程序平台 某些情况下 encrypt_key 插入错误的问题
-## 1.1.4(2023-03-13)
-- 修复 平台 weixin-web
-## 1.1.3(2023-03-13)
-- 新增 支持旧版本 uni-id 配置
-- 新增 支持平台 weixin-app|qq-mp|qq-app
-## 1.1.2(2023-02-28)
-- 新增 config 配置错误提示语
-## 1.1.1(2023-02-28)
-- 新增 支持 provider 参数,和 platform 保持一致
-## 1.1.0(2023-02-27)
-- 重要更新 调整数据库key格式,兼容旧版本API,如果开发者通过手动拼接key查询数据库需要修改现有逻辑
-  + 原格式: uni-id:[dcloudAppid]:[platform]:[openid]:[access-token|user-access-token|session-key|encrypt-key-version|ticket]
-  + 新格式: uni-id:[provider]:[appid]:[openid]:[access-token|user-access-token|session-key|encrypt-key-version|ticket]
-## 1.0.4(2022-09-21)
-- 新增 支持使用阿里云固定IP获取微信公众号H5凭据 access_token、ticket,开发者需要在微信公众平台配置阿里云固定IP,[固定IP详情](https://uniapp.dcloud.net.cn/uniCloud/cf-functions.html#aliyun-eip)
-## 1.0.3(2022-09-06)
-- 修复 过期时间问题,容错 AccessToken 默认 fallback 逻辑,当微信服务器没有返回过期时间时设置为2小时后过期
-## 1.0.2(2022-09-02)
-- 新增 依赖数据表schema opendb-open-data
-## 1.0.0(2022-08-22)
-- 首次发布

+ 0 - 84
uni_modules/uni-open-bridge-common/package.json

@@ -1,84 +0,0 @@
-{
-  "id": "uni-open-bridge-common",
-  "displayName": "uni-open-bridge-common",
-  "version": "1.2.1",
-  "description": "统一接管微信等三方平台认证凭据",
-  "keywords": [
-    "access_token",
-    "session_key",
-    "ticket"
-],
-  "repository": "",
-  "engines": {
-    "HBuilderX": "^3.5.2"
-  },
-  "dcloudext": {
-    "type": "unicloud-template-function",
-    "sale": {
-      "regular": {
-        "price": "0.00"
-      },
-      "sourcecode": {
-        "price": "0.00"
-      }
-    },
-    "contact": {
-      "qq": ""
-    },
-    "declaration": {
-      "ads": "无",
-      "data": "无",
-      "permissions": "无"
-    },
-    "npmurl": ""
-  },
-  "uni_modules": {
-    "dependencies": [],
-    "encrypt": [],
-    "platforms": {
-      "cloud": {
-        "tcb": "y",
-        "aliyun": "y",
-        "alipay": "n"
-      },
-      "client": {
-        "Vue": {
-          "vue2": "u",
-          "vue3": "u"
-        },
-        "App": {
-          "app-vue": "u",
-          "app-nvue": "u"
-        },
-        "H5-mobile": {
-          "Safari": "u",
-          "Android Browser": "u",
-          "微信浏览器(Android)": "u",
-          "QQ浏览器(Android)": "u"
-        },
-        "H5-pc": {
-          "Chrome": "u",
-          "IE": "u",
-          "Edge": "u",
-          "Firefox": "u",
-          "Safari": "u"
-        },
-        "小程序": {
-          "微信": "u",
-          "阿里": "u",
-          "百度": "u",
-          "字节跳动": "u",
-          "QQ": "u",
-          "钉钉": "u",
-          "快手": "u",
-          "飞书": "u",
-          "京东": "u"
-        },
-        "快应用": {
-          "华为": "u",
-          "联盟": "u"
-        }
-      }
-    }
-  }
-}

+ 0 - 5
uni_modules/uni-open-bridge-common/readme.md

@@ -1,5 +0,0 @@
-# uni-open-bridge-common
-
-`uni-open-bridge-common` 是统一接管微信等三方平台认证凭据(包括但不限于`access_token`、`session_key`、`encrypt_key`、`ticket`)的开源库。
-
-文档链接 [https://uniapp.dcloud.net.cn/uniCloud/uni-open-bridge#common](https://uniapp.dcloud.net.cn/uniCloud/uni-open-bridge#common)

+ 0 - 26
uni_modules/uni-open-bridge-common/uniCloud/cloudfunctions/common/uni-open-bridge-common/bridge-error.js

@@ -1,26 +0,0 @@
-'use strict';
-
-class BridgeError extends Error {
-
-  constructor(code, message) {
-    super(message)
-
-    this._code = code
-  }
-
-  get code() {
-    return this._code
-  }
-
-  get errCode() {
-    return this._code
-  }
-
-  get errMsg() {
-    return this.message
-  }
-}
-
-module.exports = {
-  BridgeError
-}

+ 0 - 124
uni_modules/uni-open-bridge-common/uniCloud/cloudfunctions/common/uni-open-bridge-common/config.js

@@ -1,124 +0,0 @@
-'use strict';
-
-const {
-  ProviderType
-} = require('./consts.js')
-
-const configCenter = require('uni-config-center')
-
-// 多维数据为兼容uni-id以前版本配置
-const OauthConfig = {
-  'weixin-app': [
-    ['app', 'oauth', 'weixin'],
-    ['app-plus', 'oauth', 'weixin']
-  ],
-  'weixin-mp': [
-    ['mp-weixin', 'oauth', 'weixin']
-  ],
-  'weixin-h5': [
-    ['web', 'oauth', 'weixin-h5'],
-    ['h5-weixin', 'oauth', 'weixin'],
-    ['h5', 'oauth', 'weixin']
-  ],
-  'weixin-web': [
-    ['web', 'oauth', 'weixin-web']
-  ],
-  'qq-app': [
-    ['app', 'oauth', 'qq'],
-    ['app-plus', 'oauth', 'qq']
-  ],
-  'qq-mp': [
-    ['mp-qq', 'oauth', 'qq']
-  ]
-}
-
-const Support_Platforms = [
-  ProviderType.WEIXIN_MP,
-  ProviderType.WEIXIN_H5,
-  ProviderType.WEIXIN_APP,
-  ProviderType.WEIXIN_WEB,
-  ProviderType.QQ_MP,
-  ProviderType.QQ_APP
-]
-
-class ConfigBase {
-
-  constructor() {
-    const uniIdConfigCenter = configCenter({
-      pluginId: 'uni-id'
-    })
-
-    this._uniIdConfig = uniIdConfigCenter.config()
-  }
-
-  getAppConfig(appid) {
-    if (Array.isArray(this._uniIdConfig)) {
-      return this._uniIdConfig.find((item) => {
-        return (item.dcloudAppid === appid)
-      })
-    }
-    return this._uniIdConfig
-  }
-}
-
-class AppConfig extends ConfigBase {
-
-  constructor() {
-    super()
-  }
-
-  get(appid, platform) {
-    if (!this.isSupport(platform)) {
-      return null
-    }
-
-    let appConfig = this.getAppConfig(appid)
-    if (!appConfig) {
-      return null
-    }
-
-    return this.getOauthConfig(appConfig, platform)
-  }
-
-  isSupport(platformName) {
-    return (Support_Platforms.indexOf(platformName) >= 0)
-  }
-
-  getOauthConfig(appConfig, platformName) {
-    let treePath = OauthConfig[platformName]
-    let node = this.findNode(appConfig, treePath)
-    if (node && node.appid && node.appsecret) {
-      return {
-        appid: node.appid,
-        secret: node.appsecret
-      }
-    }
-    return null
-  }
-
-  findNode(treeNode, arrayPath) {
-    let node = treeNode
-    for (let treePath of arrayPath) {
-      for (let name of treePath) {
-        const currentNode = node[name]
-        if (currentNode) {
-          node = currentNode
-        } else {
-          node = null
-          break
-        }
-      }
-      if (node === null) {
-        node = treeNode
-      } else {
-        break
-      }
-    }
-    return node
-  }
-}
-
-
-module.exports = {
-  AppConfig
-};

+ 0 - 30
uni_modules/uni-open-bridge-common/uniCloud/cloudfunctions/common/uni-open-bridge-common/consts.js

@@ -1,30 +0,0 @@
-'use strict';
-
-const TAG = "UNI_OPEN_BRIDGE"
-
-const HTTP_STATUS = {
-  SUCCESS: 200
-}
-
-const ProviderType = {
-  WEIXIN_MP: 'weixin-mp',
-  WEIXIN_H5: 'weixin-h5',
-  WEIXIN_APP: 'weixin-app',
-  WEIXIN_WEB: 'weixin-web',
-  QQ_MP: 'qq-mp',
-  QQ_APP: 'qq-app'
-}
-
-// old
-const PlatformType = ProviderType
-
-const ErrorCodeType = {
-  SYSTEM_ERROR: TAG + "_SYSTEM_ERROR"
-}
-
-module.exports = {
-  HTTP_STATUS,
-  ProviderType,
-  PlatformType,
-  ErrorCodeType
-}

+ 0 - 317
uni_modules/uni-open-bridge-common/uniCloud/cloudfunctions/common/uni-open-bridge-common/index.js

@@ -1,317 +0,0 @@
-'use strict';
-
-const {
-  PlatformType,
-  ProviderType,
-  ErrorCodeType
-} = require('./consts.js')
-
-const {
-  AppConfig
-} = require('./config.js')
-
-const {
-  Storage
-} = require('./storage.js')
-
-const {
-  BridgeError
-} = require('./bridge-error.js')
-
-const {
-  WeixinServer
-} = require('./weixin-server.js')
-
-const appConfig = new AppConfig()
-
-class AccessToken extends Storage {
-
-  constructor() {
-    super('access-token', ['provider', 'appid'])
-  }
-
-  async update(key) {
-    super.update(key)
-
-    const result = await this.getByWeixinServer(key)
-
-    return this.set(key, result.value, result.duration)
-  }
-
-  async fallback(key) {
-    return this.getByWeixinServer(key)
-  }
-
-  async getByWeixinServer(key) {
-    const oauthConfig = appConfig.get(key.dcloudAppid, key.provider)
-    let methodName
-    if (key.provider === ProviderType.WEIXIN_MP) {
-      methodName = 'GetMPAccessTokenData'
-    } else if (key.provider === ProviderType.WEIXIN_H5) {
-      methodName = 'GetH5AccessTokenData'
-    } else {
-      throw new BridgeError(ErrorCodeType.SYSTEM_ERROR, "provider invalid")
-    }
-
-    const responseData = await WeixinServer[methodName](oauthConfig)
-
-    const duration = responseData.expires_in || (60 * 60 * 2)
-    delete responseData.expires_in
-
-    return {
-      value: responseData,
-      duration
-    }
-  }
-}
-
-class UserAccessToken extends Storage {
-
-  constructor() {
-    super('user-access-token', ['provider', 'appid', 'openid'])
-  }
-}
-
-class SessionKey extends Storage {
-
-  constructor() {
-    super('session-key', ['provider', 'appid', 'openid'])
-  }
-}
-
-class Encryptkey extends Storage {
-
-  constructor() {
-    super('encrypt-key', ['provider', 'appid', 'openid'])
-  }
-
-  async update(key) {
-    super.update(key)
-
-    const result = await this.getByWeixinServer(key)
-
-    return this.set(key, result.value, result.duration)
-  }
-
-  getKeyString(key) {
-    return `${super.getKeyString(key)}-${key.version}`
-  }
-
-  getExpiresIn(value) {
-    if (value <= 0) {
-      return 60
-    }
-    return value
-  }
-
-  async fallback(key) {
-    return this.getByWeixinServer(key)
-  }
-
-  async getByWeixinServer(key) {
-    const accessToken = await Factory.Get(AccessToken, key)
-    const userSession = await Factory.Get(SessionKey, key)
-
-    const responseData = await WeixinServer.GetUserEncryptKeyData({
-      openid: key.openid,
-      access_token: accessToken.access_token,
-      session_key: userSession.session_key
-    })
-
-    const keyInfo = responseData.key_info_list.find((item) => {
-      return item.version === key.version
-    })
-
-    if (!keyInfo) {
-      throw new BridgeError(ErrorCodeType.SYSTEM_ERROR, 'key version invalid')
-    }
-
-    const value = {
-      encrypt_key: keyInfo.encrypt_key,
-      iv: keyInfo.iv
-    }
-
-    return {
-      value,
-      duration: keyInfo.expire_in || (24 * 60 * 60)
-    }
-  }
-}
-
-class Ticket extends Storage {
-
-  constructor() {
-    super('ticket', ['provider', 'appid'])
-  }
-
-  async update(key) {
-    super.update(key)
-
-    const result = await this.getByWeixinServer(key)
-
-    return this.set(key, result.value, result.duration)
-  }
-
-  async fallback(key) {
-    return this.getByWeixinServer(key)
-  }
-
-  async getByWeixinServer(key) {
-    const accessToken = await Factory.Get(AccessToken, {
-      dcloudAppid: key.dcloudAppid,
-      provider: ProviderType.WEIXIN_H5
-    })
-
-    const responseData = await WeixinServer.GetH5TicketData(accessToken)
-
-    const duration = responseData.expires_in || (60 * 60 * 2)
-    delete responseData.expires_in
-    delete responseData.errcode
-    delete responseData.errmsg
-
-    return {
-      value: responseData,
-      duration
-    }
-  }
-}
-
-
-const Factory = {
-
-  async Get(T, key, fallback) {
-    Factory.FixOldKey(key)
-    return Factory.MakeUnique(T).get(key, fallback)
-  },
-
-  async Set(T, key, value, expiresIn) {
-    Factory.FixOldKey(key)
-    return Factory.MakeUnique(T).set(key, value, expiresIn)
-  },
-
-  async Remove(T, key) {
-    Factory.FixOldKey(key)
-    return Factory.MakeUnique(T).remove(key)
-  },
-
-  async Update(T, key) {
-    Factory.FixOldKey(key)
-    return Factory.MakeUnique(T).update(key)
-  },
-
-  FixOldKey(key) {
-    if (!key.provider) {
-      key.provider = key.platform
-    }
-
-    const configData = appConfig.get(key.dcloudAppid, key.provider)
-    if (!configData) {
-      throw new BridgeError(ErrorCodeType.SYSTEM_ERROR, 'appid or provider invalid')
-    }
-    key.appid = configData.appid
-  },
-
-  MakeUnique(T) {
-    return new T()
-  }
-}
-
-
-// exports
-
-async function getAccessToken(key, fallback) {
-  return Factory.Get(AccessToken, key, fallback)
-}
-
-async function setAccessToken(key, value, expiresIn) {
-  return Factory.Set(AccessToken, key, value, expiresIn)
-}
-
-async function removeAccessToken(key) {
-  return Factory.Remove(AccessToken, key)
-}
-
-async function updateAccessToken(key) {
-  return Factory.Update(AccessToken, key)
-}
-
-async function getUserAccessToken(key, fallback) {
-  return Factory.Get(UserAccessToken, key, fallback)
-}
-
-async function setUserAccessToken(key, value, expiresIn) {
-  return Factory.Set(UserAccessToken, key, value, expiresIn)
-}
-
-async function removeUserAccessToken(key) {
-  return Factory.Remove(UserAccessToken, key)
-}
-
-async function getSessionKey(key, fallback) {
-  return Factory.Get(SessionKey, key, fallback)
-}
-
-async function setSessionKey(key, value, expiresIn) {
-  return Factory.Set(SessionKey, key, value, expiresIn)
-}
-
-async function removeSessionKey(key) {
-  return Factory.Remove(SessionKey, key)
-}
-
-async function getEncryptKey(key, fallback) {
-  return Factory.Get(Encryptkey, key, fallback)
-}
-
-async function setEncryptKey(key, value, expiresIn) {
-  return Factory.Set(Encryptkey, key, value, expiresIn)
-}
-
-async function removeEncryptKey(key) {
-  return Factory.Remove(Encryptkey, key)
-}
-
-async function updateEncryptKey(key) {
-  return Factory.Update(Encryptkey, key)
-}
-
-async function getTicket(key, fallback) {
-  return Factory.Get(Ticket, key, fallback)
-}
-
-async function setTicket(key, value, expiresIn) {
-  return Factory.Set(Ticket, key, value, expiresIn)
-}
-
-async function removeTicket(key) {
-  return Factory.Remove(Ticket, key)
-}
-
-async function updateTicket(key) {
-  return Factory.Update(Ticket, key)
-}
-
-module.exports = {
-  getAccessToken,
-  setAccessToken,
-  removeAccessToken,
-  updateAccessToken,
-  getUserAccessToken,
-  setUserAccessToken,
-  removeUserAccessToken,
-  getSessionKey,
-  setSessionKey,
-  removeSessionKey,
-  getEncryptKey,
-  setEncryptKey,
-  removeEncryptKey,
-  updateEncryptKey,
-  getTicket,
-  setTicket,
-  removeTicket,
-  updateTicket,
-  ProviderType,
-  PlatformType,
-  WeixinServer,
-  ErrorCodeType
-}

+ 0 - 19
uni_modules/uni-open-bridge-common/uniCloud/cloudfunctions/common/uni-open-bridge-common/package.json

@@ -1,19 +0,0 @@
-{
-    "name": "uni-open-bridge-common",
-    "version": "1.0.0",
-    "description": "",
-    "main": "index.js",
-    "scripts": {
-        "test": "echo \"Error: no test specified\" && exit 1"
-    },
-    "keywords": [],
-    "author": "",
-    "license": "ISC",
-    "dependencies": {
-        "uni-config-center": "file:..\/..\/..\/..\/..\/uni-config-center\/uniCloud\/cloudfunctions\/common\/uni-config-center"
-    },
-    "origin-plugin-dev-name": "uni-open-bridge-common",
-    "origin-plugin-version": "1.2.1",
-    "plugin-dev-name": "uni-open-bridge-common",
-    "plugin-version": "1.2.1"
-}

+ 0 - 116
uni_modules/uni-open-bridge-common/uniCloud/cloudfunctions/common/uni-open-bridge-common/storage.js

@@ -1,116 +0,0 @@
-'use strict';
-
-const {
-  Validator
-} = require('./validator.js')
-
-const {
-  CacheKeyCascade
-} = require('./uni-cloud-cache.js')
-
-const {
-  BridgeError
-} = require('./bridge-error.js')
-
-class Storage {
-
-  constructor(type, keys) {
-    this._type = type || null
-    this._keys = keys || []
-  }
-
-  async get(key, fallback) {
-    this.validateKey(key)
-    const result = await this.create(key, fallback).get()
-    return result.value
-  }
-
-  async set(key, value, expiresIn) {
-    this.validateKey(key)
-    this.validateValue(value)
-    const expires_in = this.getExpiresIn(expiresIn)
-    if (expires_in !== 0) {
-      await this.create(key).set(this.getValue(value), expires_in)
-    }
-  }
-
-  async remove(key) {
-    this.validateKey(key)
-    await this.create(key).remove()
-  }
-
-  // virtual
-  async update(key) {
-    this.validateKey(key)
-  }
-
-  async ttl(key) {
-    this.validateKey(key)
-    // 后续考虑支持
-  }
-
-  async fallback(key) {
-    return {
-      value: null,
-      duration: -1
-    }
-  }
-
-  getKeyString(key) {
-    const keyArray = [Storage.Prefix]
-    this._keys.forEach((name) => {
-      keyArray.push(key[name])
-    })
-    keyArray.push(this._type)
-    return keyArray.join(':')
-  }
-
-  getValue(value) {
-    return value
-  }
-
-  getExpiresIn(value) {
-    if (value !== undefined) {
-      return value
-    }
-    return -1
-  }
-
-  validateKey(key) {
-    Validator.Key(this._keys, key)
-  }
-
-  validateValue(value) {
-    Validator.Value(value)
-  }
-
-  create(key, fallback) {
-    const keyString = this.getKeyString(key)
-    const options = {
-      layers: [{
-        type: 'database',
-        key: keyString
-      }, {
-        type: 'redis',
-        key: keyString
-      }]
-    }
-
-    const _this = this
-    return new CacheKeyCascade({
-      ...options,
-      fallback: async function() {
-        if (fallback) {
-          return fallback(key)
-        } else if (_this.fallback) {
-          return _this.fallback(key)
-        }
-      }
-    })
-  }
-}
-Storage.Prefix = "uni-id"
-
-module.exports = {
-  Storage
-};

+ 0 - 324
uni_modules/uni-open-bridge-common/uniCloud/cloudfunctions/common/uni-open-bridge-common/uni-cloud-cache.js

@@ -1,324 +0,0 @@
-const db = uniCloud.database()
-
-function getType(value) {
-  return Object.prototype.toString.call(value).slice(8, -1).toLowerCase()
-}
-
-const validator = {
-  key: function(value) {
-    const err = new Error('Invalid key')
-    if (typeof value !== 'string') {
-      throw err
-    }
-    const valueTrim = value.trim()
-    if (!valueTrim || valueTrim !== value) {
-      throw err
-    }
-  },
-  value: function(value) {
-    // 仅作简单校验
-    const type = getType(value)
-    const validValueType = ['null', 'number', 'string', 'array', 'object']
-    if (validValueType.indexOf(type) === -1) {
-      throw new Error('Invalid value type')
-    }
-  },
-  duration: function(value) {
-    const err = new Error('Invalid duration')
-    if (value === undefined) {
-      return
-    }
-    if (typeof value !== 'number' || value === 0) {
-      throw err
-    }
-  }
-}
-
-/**
- * 入库时 expired 为过期时间对应的时间戳,永不过期用-1表示
- * 返回结果时 与redis对齐,-1表示永不过期,-2表示已过期或不存在
- */
-class DatabaseCache {
-  constructor({
-    collection = 'opendb-open-data'
-  } = {}) {
-    this.type = 'db'
-    this.collection = db.collection(collection)
-  }
-
-  _serializeValue(value) {
-    return value === undefined ? null : JSON.stringify(value)
-  }
-
-  _deserializeValue(value) {
-    return value ? JSON.parse(value) : value
-  }
-
-  async set(key, value, duration) {
-    validator.key(key)
-    validator.value(value)
-    validator.duration(duration)
-    value = this._serializeValue(value)
-    await this.collection.doc(key).set({
-      value,
-      expired: duration && duration !== -1 ? Date.now() + (duration * 1000) : -1
-    })
-  }
-
-  async _getWithDuration(key) {
-    const getKeyRes = await this.collection.doc(key).get()
-    const record = getKeyRes.data[0]
-    if (!record) {
-      return {
-        value: null,
-        duration: -2
-      }
-    }
-    const value = this._deserializeValue(record.value)
-    const expired = record.expired
-    if (expired === -1) {
-      return {
-        value,
-        duration: -1
-      }
-    }
-    const duration = expired - Date.now()
-    if (duration <= 0) {
-      await this.remove(key)
-      return {
-        value: null,
-        duration: -2
-      }
-    }
-    return {
-      value,
-      duration: Math.floor(duration / 1000)
-    }
-  }
-
-  async get(key, {
-    withDuration = true
-  } = {}) {
-    const result = await this._getWithDuration(key)
-    if (!withDuration) {
-      delete result.duration
-    }
-    return result
-  }
-
-  async remove(key) {
-    await this.collection.doc(key).remove()
-  }
-}
-
-class RedisCache {
-  constructor() {
-    this.type = 'redis'
-    this.redis = uniCloud.redis()
-  }
-
-  _serializeValue(value) {
-    return value === undefined ? null : JSON.stringify(value)
-  }
-
-  _deserializeValue(value) {
-    return value ? JSON.parse(value) : value
-  }
-
-  async set(key, value, duration) {
-    validator.key(key)
-    validator.value(value)
-    validator.duration(duration)
-    value = this._serializeValue(value)
-    if (!duration || duration === -1) {
-      await this.redis.set(key, value)
-    } else {
-      await this.redis.set(key, value, 'EX', duration)
-    }
-  }
-
-  async get(key, {
-    withDuration = false
-  } = {}) {
-    let value = await this.redis.get(key)
-    value = this._deserializeValue(value)
-    if (!withDuration) {
-      return {
-        value
-      }
-    }
-    const durationSecond = await this.redis.ttl(key)
-    let duration
-    switch (durationSecond) {
-      case -1:
-        duration = -1
-        break
-      case -2:
-        duration = -2
-        break
-      default:
-        duration = durationSecond
-        break
-    }
-    return {
-      value,
-      duration
-    }
-  }
-
-  async remove(key) {
-    await this.redis.del(key)
-  }
-}
-
-class Cache {
-  constructor({
-    type,
-    collection
-  } = {}) {
-    if (type === 'database') {
-      return new DatabaseCache({
-        collection
-      })
-    } else if (type === 'redis') {
-      return new RedisCache()
-    } else {
-      throw new Error('Invalid cache type')
-    }
-  }
-}
-
-class CacheKey {
-  constructor({
-    type,
-    collection,
-    cache,
-    key,
-    fallback
-  } = {}) {
-    this.cache = cache || new Cache({
-      type,
-      collection
-    })
-    this.key = key
-    this.fallback = fallback
-  }
-
-  async set(value, duration) {
-    await this.cache.set(this.key, value, duration)
-  }
-
-  async setWithSync(value, duration, syncMethod) {
-    await Promise.all([
-      this.set(this.key, value, duration),
-      syncMethod(value, duration)
-    ])
-  }
-
-  async get() {
-    let {
-      value,
-      duration
-    } = await this.cache.get(this.key)
-    if (value !== null && value !== undefined) {
-      return {
-        value,
-        duration
-      }
-    }
-    if (!this.fallback) {
-      return {
-        value: null,
-        duration: -2
-      }
-    }
-    const fallbackResult = await this.fallback()
-    value = fallbackResult.value
-    duration = fallbackResult.duration
-    if (value !== null && duration !== undefined) {
-      await this.cache.set(this.key, value, duration)
-    }
-    return {
-      value,
-      duration
-    }
-  }
-
-  async remove() {
-    await this.cache.remove(this.key)
-  }
-}
-
-class CacheKeyCascade {
-  constructor({
-    layers, // [{cache, type, collection, key}] 从低级到高级排序,[DbCacheKey, RedisCacheKey]
-    fallback
-  } = {}) {
-    this.layers = layers
-    this.cacheLayers = []
-    let lastCacheKey
-    for (let i = 0; i < layers.length; i++) {
-      const {
-        type,
-        cache,
-        collection,
-        key
-      } = layers[i]
-      const lastCacheKeyTemp = lastCacheKey
-      try {
-        const currentCacheKey = new CacheKey({
-          type,
-          collection,
-          cache,
-          key,
-          fallback: i === 0 ? fallback : function() {
-            return lastCacheKeyTemp.get()
-          }
-        })
-        this.cacheLayers.push(currentCacheKey)
-        lastCacheKey = currentCacheKey
-      } catch (e) {}
-    }
-    this.highLevelCache = lastCacheKey
-  }
-
-  async set(value, duration) {
-    return Promise.all(
-      this.cacheLayers.map(item => {
-        return item.set(value, duration)
-      })
-    )
-  }
-
-  async setWithSync(value, duration, syncMethod) {
-    const setPromise = this.cacheLayers.map(item => {
-      return item.set(value, duration)
-    })
-    return Promise.all(
-      [
-        ...setPromise,
-        syncMethod(value, duration)
-      ]
-    )
-  }
-
-  async get() {
-    return this.highLevelCache.get()
-  }
-
-  async remove() {
-    await Promise.all(
-      this.cacheLayers.map(cacheKeyItem => {
-        return cacheKeyItem.remove()
-      })
-    )
-  }
-}
-
-module.exports = {
-  Cache,
-  DatabaseCache,
-  RedisCache,
-  CacheKey,
-  CacheKeyCascade
-}

+ 0 - 31
uni_modules/uni-open-bridge-common/uniCloud/cloudfunctions/common/uni-open-bridge-common/validator.js

@@ -1,31 +0,0 @@
-const Validator = {
-
-  Key(keyArray, parameters) {
-    for (let i = 0; i < keyArray.length; i++) {
-      const keyName = keyArray[i]
-      if (typeof parameters[keyName] !== 'string') {
-        Validator.ThrowNewError(`Invalid ${keyName}`)
-      }
-      if (parameters[keyName].length < 1) {
-        Validator.ThrowNewError(`Invalid ${keyName}`)
-      }
-    }
-  },
-
-  Value(value) {
-    if (value === undefined) {
-      Validator.ThrowNewError('Invalid Value')
-    }
-    if (typeof value !== 'object') {
-      Validator.ThrowNewError('Invalid Value Type')
-    }
-  },
-
-  ThrowNewError(message) {
-    throw new Error(message)
-  }
-}
-
-module.exports = {
-  Validator
-}

+ 0 - 203
uni_modules/uni-open-bridge-common/uniCloud/cloudfunctions/common/uni-open-bridge-common/weixin-server.js

@@ -1,203 +0,0 @@
-'use strict';
-
-const crypto = require('crypto')
-
-const {
-  HTTP_STATUS
-} = require('./consts.js')
-
-const {
-  BridgeError
-} = require('./bridge-error.js')
-
-class WeixinServer {
-
-  constructor(options = {}) {
-    this._appid = options.appid
-    this._secret = options.secret
-  }
-
-  getAccessToken() {
-    return uniCloud.httpclient.request(WeixinServer.AccessToken_Url, {
-      dataType: 'json',
-      method: 'POST',
-      contentType: 'json',
-      data: {
-        appid: this._appid,
-        secret: this._secret,
-        grant_type: "client_credential"
-      }
-    })
-  }
-
-  // 使用客户端获取的 code 从微信服务器换取 openid,code 仅可使用一次
-  codeToSession(code) {
-    return uniCloud.httpclient.request(WeixinServer.Code2Session_Url, {
-      dataType: 'json',
-      data: {
-        appid: this._appid,
-        secret: this._secret,
-        js_code: code,
-        grant_type: 'authorization_code'
-      }
-    })
-  }
-
-  getUserEncryptKey({
-    access_token,
-    openid,
-    session_key
-  }) {
-    console.log(access_token, openid, session_key);
-    const signature = crypto.createHmac('sha256', session_key).update('').digest('hex')
-    return uniCloud.httpclient.request(WeixinServer.User_Encrypt_Key_Url, {
-      dataType: 'json',
-      method: 'POST',
-      dataAsQueryString: true,
-      data: {
-        access_token,
-        openid: openid,
-        signature: signature,
-        sig_method: 'hmac_sha256'
-      }
-    })
-  }
-
-  getH5AccessToken() {
-    return uniCloud.httpclient.request(WeixinServer.AccessToken_H5_Url, {
-      dataType: 'json',
-      method: 'GET',
-      data: {
-        appid: this._appid,
-        secret: this._secret,
-        grant_type: "client_credential"
-      }
-    })
-  }
-
-  getH5Ticket(access_token) {
-    return uniCloud.httpclient.request(WeixinServer.Ticket_Url, {
-      dataType: 'json',
-      dataAsQueryString: true,
-      method: 'POST',
-      data: {
-        access_token
-      }
-    })
-  }
-
-  getH5AccessTokenForEip() {
-    return uniCloud.httpProxyForEip.postForm(WeixinServer.AccessToken_H5_Url, {
-      appid: this._appid,
-      secret: this._secret,
-      grant_type: "client_credential"
-    }, {
-      dataType: 'json'
-    })
-  }
-
-  getH5TicketForEip(access_token) {
-    return uniCloud.httpProxyForEip.postForm(WeixinServer.Ticket_Url, {
-      access_token
-    }, {
-      dataType: 'json',
-      dataAsQueryString: true
-    })
-  }
-}
-
-WeixinServer.AccessToken_Url = 'https://api.weixin.qq.com/cgi-bin/stable_token'
-WeixinServer.Code2Session_Url = 'https://api.weixin.qq.com/sns/jscode2session'
-WeixinServer.User_Encrypt_Key_Url = 'https://api.weixin.qq.com/wxa/business/getuserencryptkey'
-WeixinServer.AccessToken_H5_Url = 'https://api.weixin.qq.com/cgi-bin/token'
-WeixinServer.Ticket_Url = 'https://api.weixin.qq.com/cgi-bin/ticket/getticket?type=jsapi'
-
-WeixinServer.GetMPAccessToken = function(options) {
-  return new WeixinServer(options).getAccessToken()
-}
-
-WeixinServer.GetCodeToSession = function(options) {
-  return new WeixinServer(options).codeToSession(options.code)
-}
-
-WeixinServer.GetUserEncryptKey = function(options) {
-  return new WeixinServer(options).getUserEncryptKey(options)
-}
-
-WeixinServer.GetH5AccessToken = function(options) {
-  return new WeixinServer(options).getH5AccessToken()
-}
-
-WeixinServer.GetH5Ticket = function(options) {
-  return new WeixinServer(options).getH5Ticket(options.access_token)
-}
-
-////////////////////////////////////////////////////////////////
-
-function isAliyun() {
-  return (uniCloud.getCloudInfos()[0].provider === 'aliyun')
-}
-
-WeixinServer.GetResponseData = function(response) {
-  console.log("WeixinServer::response", response)
-
-  if (!(response.status === HTTP_STATUS.SUCCESS || response.statusCodeValue === HTTP_STATUS.SUCCESS)) {
-    throw new BridgeError(response.status || response.statusCodeValue, response.status || response.statusCodeValue)
-  }
-
-  const responseData = response.data || response.body
-
-  if (responseData.errcode !== undefined && responseData.errcode !== 0) {
-    throw new BridgeError(responseData.errcode, responseData.errmsg)
-  }
-
-  return responseData
-}
-
-WeixinServer.GetMPAccessTokenData = async function(options) {
-  const response = await new WeixinServer(options).getAccessToken()
-  return WeixinServer.GetResponseData(response)
-}
-
-WeixinServer.GetCodeToSessionData = async function(options) {
-  const response = await new WeixinServer(options).codeToSession(options.code)
-  return WeixinServer.GetResponseData(response)
-}
-
-WeixinServer.GetUserEncryptKeyData = async function(options) {
-  const response = await new WeixinServer(options).getUserEncryptKey(options)
-  return WeixinServer.GetResponseData(response)
-}
-
-WeixinServer.GetH5AccessTokenData = async function(options) {
-  const ws = new WeixinServer(options)
-  let response
-  if (isAliyun()) {
-    response = await ws.getH5AccessTokenForEip()
-    if (typeof response === 'string') {
-      response = JSON.parse(response)
-    }
-  } else {
-    response = await ws.getH5AccessToken()
-  }
-  return WeixinServer.GetResponseData(response)
-}
-
-WeixinServer.GetH5TicketData = async function(options) {
-  const ws = new WeixinServer(options)
-  let response
-  if (isAliyun()) {
-    response = await ws.getH5TicketForEip(options.access_token)
-    if (typeof response === 'string') {
-      response = JSON.parse(response)
-    }
-  } else {
-    response = await ws.getH5Ticket(options.access_token)
-  }
-  return WeixinServer.GetResponseData(response)
-}
-
-
-module.exports = {
-  WeixinServer
-}

+ 0 - 19
uni_modules/uni-open-bridge-common/uniCloud/database/opendb-open-data.schema.json

@@ -1,19 +0,0 @@
-// 文档教程: https://uniapp.dcloud.net.cn/uniCloud/schema
-{
-  "bsonType": "object",
-  "required": ["_id", "value"],
-  "properties": {
-    "_id": {
-      "bsonType": "string",
-      "description": "key,格式:uni-id:[provider]:[appid]:[openid]:[access-token|user-access-token|session-key|encrypt-key-version|ticket]"
-    },
-    "value": {
-      "bsonType": "object",
-      "description": "字段_id对应的值"
-    },
-    "expired": {
-      "bsonType": "date",
-      "description": "过期时间"
-    }
-  }
-}

+ 0 - 2
uni_modules/uni-test/changelog.md

@@ -1,2 +0,0 @@
-## 2.0.4(2021-05-20)
-- test1

+ 0 - 120
uni_modules/uni-test/common/uni-ui.scss

@@ -1,120 +0,0 @@
-
-.uni-flex {
-	display: flex;
-}
-
-.uni-flex-row {
-	@extend .uni-flex;
-	flex-direction: row;
-	box-sizing: border-box;
-}
-
-.uni-flex-column {
-	@extend .uni-flex;
-	flex-direction: column;
-}
-
-.uni-color-gary {
-	color: #3b4144;
-}
-
-/* 标题 */
-.uni-title {
-	display: flex;
-	margin-bottom: $uni-spacing-col-base;
-	font-size: $uni-font-size-lg;
-	font-weight: bold;
-	color: #3b4144;
-}
-
-.uni-title-sub {
-	display: flex;
-	// margin-bottom: $uni-spacing-col-base;
-	font-size: $uni-font-size-base;
-	font-weight: 500;
-	color: #3b4144;
-}
-
-/* 描述 额外文本 */
-.uni-note {
-	margin-top: 10px;
-	color: #999;
-	font-size: $uni-font-size-sm;
-}
-
-/* 列表内容 */
-.uni-list-box {
-	@extend .uni-flex-row;
-	flex: 1;
-	margin-top: 10px;
-}
-
-/* 略缩图 */
-.uni-thumb {
-	flex-shrink: 0;
-	margin-right: $uni-spacing-row-base;
-	width: 125px;
-	height: 75px;
-	border-radius: $uni-border-radius-lg;
-	overflow: hidden;
-	border: 1px #f5f5f5 solid;
-	image {
-		width: 100%;
-		height: 100%;
-	}
-}
-
-.uni-media-box {
-	@extend .uni-flex-row;
-	// margin-bottom: $uni-spacing-col-base;
-	border-radius: $uni-border-radius-lg;
-	overflow: hidden;
-	.uni-thumb {
-		margin: 0;
-		margin-left: 4px;
-		flex-shrink: 1;
-		width: 33%;
-		border-radius:0;
-		&:first-child {
-			margin: 0;
-		}
-	}
-}
-
-/* 内容 */
-.uni-content {
-	@extend .uni-flex-column;
-	justify-content: space-between;
-}
-
-/* 列表footer */
-.uni-footer {
-	@extend .uni-flex-row;
-	justify-content: space-between;
-	margin-top: $uni-spacing-col-lg;
-}
-.uni-footer-text {
-	font-size: $uni-font-size-sm;
-	color: $uni-text-color-grey;
-	margin-left: 5px;
-}
-
-/* 标签 */
-
-.uni-tag {
-	flex-shrink: 0;
-	padding: 0 5px;
-	border: 1px $uni-border-color solid;
-	margin-right: $uni-spacing-row-sm;
-	border-radius: $uni-border-radius-base;
-	background: $uni-bg-color-grey;
-	color: $uni-text-color;
-	font-size: $uni-font-size-sm;
-}
-
-/* 链接 */
-.uni-link {
-	margin-left: 10px;
-	color: $uni-text-color;
-	text-decoration: underline;
-}

+ 0 - 12
uni_modules/uni-test/components/uni-section/config.json

@@ -1,12 +0,0 @@
-{
-	"id": "99999",
-	"name": "Section",
-	"desc": "标题栏",
-	"edition": "0.0.1",
-	"url": "section",
-	"type": "布局组件",
-	"path": "https://ext.dcloud.net.cn/plugin?id=",
-	"hidden": true,
-	"test":true,
-	"update_log": []
-}

+ 0 - 30
uni_modules/uni-test/components/uni-section/readme.md

@@ -1,30 +0,0 @@
-### Section 标题栏
-
-标题栏,用于显示标题,组件名:``uni-section``,代码块: uSection。
-
-### 使用方式
-
-在 ``script`` 中引用组件 
-
-```javascript
-import uniSection from "@/components/uni-section/uni-section.vue"
-export default {
-    components: {uniSection}
-}
-```
-
-在 ``template`` 中使用组件
-
-```html
-<uni-section title="只有主标题"></uni-section>
-<uni-section title="竖线装饰" sub-title="副标题" type="line"></uni-section>
-<uni-section title="圆形装饰" sub-title="副标题" type="circle"></uni-section>
-```
-
-### 属性说明
-
-|属性名		|类型	|默认值	|说明												|
-|---		|----	|---	|---												|
-|type		|String	|-		|标题装饰类型 ,可选值:line(竖线)、circle(圆形)|
-|title		|String	|-		|主标题												|
-|sub-title	|String	|-		|副标题												|

+ 0 - 136
uni_modules/uni-test/components/uni-section/uni-section.vue

@@ -1,136 +0,0 @@
-<template>
-	<view class="uni-section" nvue>
-		<view v-if="type" class="uni-section__head">
-			<view :class="type" class="uni-section__head-tag" />
-		</view>
-		<view class="uni-section__content">
-			<text :class="{'distraction':!subTitle}" class="uni-section__content-title">{{ title }}</text>
-			<text v-if="subTitle" class="uni-section__content-sub">{{ subTitle }}</text>
-		</view>
-		<slot />
-	</view>
-</template>
-
-<script>
-
-	/**
-	 * Section 标题栏
-	 * @description 标题栏
-	 * @property {String} type = [line|circle] 标题装饰类型
-	 * 	@value line 竖线
-	 * 	@value circle 圆形
-	 * @property {String} title 主标题
-	 * @property {String} subTitle 副标题
-	 */
-
-	export default {
-		name: 'UniSection',
-		props: {
-			type: {
-				type: String,
-				default: ''
-			},
-			title: {
-				type: String,
-				default: ''
-			},
-			subTitle: {
-				type: String,
-				default: ''
-			}
-		},
-		data() {
-			return {}
-		},
-		watch: {
-			title(newVal) {
-				if (uni.report && newVal !== '') {
-					uni.report('title', newVal)
-				}
-			}
-		},
-		methods: {
-			onClick() {
-				this.$emit('click')
-			}
-		}
-	}
-</script>
-<style lang="scss" scoped>
-	.uni-section {
-		position: relative;
-		/* #ifndef APP-NVUE */
-		display: flex;
-		/* #endif */
-		margin-top: 10px;
-		flex-direction: row;
-		align-items: center;
-		padding: 0 10px;
-		height: 50px;
-		background-color: $uni-bg-color-grey;
-		/* #ifdef APP-NVUE */
-		// border-bottom-color: $uni-border-color;
-		// border-bottom-style: solid;
-		// border-bottom-width: 0.5px;
-		/* #endif */
-		font-weight: normal;
-	}
-	/* #ifndef APP-NVUE */
-	// .uni-section:after {
-	// 	position: absolute;
-	// 	bottom: 0;
-	// 	right: 0;
-	// 	left: 0;
-	// 	height: 1px;
-	// 	content: '';
-	// 	-webkit-transform: scaleY(.5);
-	// 	transform: scaleY(.5);
-	// 	background-color: $uni-border-color;
-	// }
-	/* #endif */
-
-	.uni-section__head {
-		flex-direction: row;
-		justify-content: center;
-		align-items: center;
-		margin-right: 10px;
-	}
-
-	.line {
-		height: 15px;
-		background-color: $uni-text-color-disable;
-		border-radius: 5px;
-		width: 3px;
-	}
-
-	.circle {
-		width: 8px;
-		height: 8px;
-		border-top-right-radius: 50px;
-		border-top-left-radius: 50px;
-		border-bottom-left-radius: 50px;
-		border-bottom-right-radius: 50px;
-		background-color: $uni-text-color-disable;
-	}
-
-	.uni-section__content {
-		flex-direction: column;
-		flex: 1;
-		color: $uni-text-color;
-	}
-
-	.uni-section__content-title {
-		font-size: $uni-font-size-base;
-		color: $uni-text-color;
-	}
-
-	.distraction {
-		flex-direction: row;
-		align-items: center;
-	}
-
-	.uni-section__content-sub {
-		font-size: $uni-font-size-sm;
-		color: $uni-text-color-grey;
-	}
-</style>

+ 0 - 26
uni_modules/uni-test/components/uni-test/uni-test.vue

@@ -1,26 +0,0 @@
-<template>
-	<view>
-		测试插件
-	</view>
-</template>
-
-<script>
-	export default {
-		data() {
-			return {
-				
-			};
-		},
-		onLoad() {
-			let fonts = []
-			let obj = {}
-			fonts.forEach(v=>{
-				obj[v.name] = '\\u'+v.unicode
-			})
-		}
-	}
-</script>
-
-<style>
-
-</style>

+ 0 - 76
uni_modules/uni-test/package.json

@@ -1,76 +0,0 @@
-{
-  "id": "uni-test",
-  "displayName": "uni-test",
-  "version": "2.0.4",
-  "description": "uni-test",
-  "keywords": [
-    "list-goods"
-],
-  "repository": "",
-  "engines": {
-    "HBuilderX": "^3.1.0"
-  },
-  "dcloudext": {
-    "category": [
-        "uniCloud",
-        "云端一体页面模板"
-    ],
-    "sale": {
-      "regular": {
-        "price": "0.00"
-      },
-      "sourcecode": {
-        "price": "0.00"
-      }
-    },
-    "contact": {
-      "qq": ""
-    },
-    "declaration": {
-      "ads": "无",
-      "data": "无",
-      "permissions": "无"
-    },
-    "npmurl": ""
-  },
-  "uni_modules": {
-    "dependencies": ["uni-badge","uni-icons","uni-id","uni-list","uni-load-more"],
-    "encrypt": [],
-    "platforms": {
-      "cloud": {
-        "tcb": "y",
-        "aliyun": "y"
-      },
-      "client": {
-        "App": {
-          "app-vue": "u",
-          "app-nvue": "u"
-        },
-        "H5-mobile": {
-          "Safari": "u",
-          "Android Browser": "u",
-          "微信浏览器(Android)": "u",
-          "QQ浏览器(Android)": "u"
-        },
-        "H5-pc": {
-          "Chrome": "u",
-          "IE": "u",
-          "Edge": "u",
-          "Firefox": "u",
-          "Safari": "u"
-        },
-        "小程序": {
-          "微信": "u",
-          "阿里": "u",
-          "百度": "u",
-          "字节跳动": "u",
-          "QQ": "u"
-        },
-        "快应用": {
-          "华为": "u",
-          "联盟": "u"
-        }
-      }
-    }
-  }
-}

+ 0 - 242
uni_modules/uni-test/pages/uni-test/uni-test.vue

@@ -1,242 +0,0 @@
-<template>
-	<!--
-	本页面模板教程:https://ext.dcloud.net.cn/plugin?id=2651
-	uni-list 文档:https://ext.dcloud.net.cn/plugin?id=24
-	uniCloud 文档:https://uniapp.dcloud.io/uniCloud/README
-	unicloud-db 组件文档:https://uniapp.dcloud.io/uniCloud/unicloud-db
-	DB Schema 规范:https://uniapp.dcloud.net.cn/uniCloud/schema
-	 -->
-	<view class="list">
-		<!-- 刷新页面后的顶部提示框 -->
-		<!-- 当前弹出内容没有实际逻辑 ,可根据当前业务修改弹出提示 -->
-		<view class="tips" :class="{ 'tips-ani': tipShow }">为您更新了10条最新新闻动态</view>
-		<!-- 页面分类标题 -->
-		<uni-section title="最热商品" type="line"><button class="button-box" @click="select">切换视图</button></uni-section>
-
-		<unicloud-db ref="udb" v-slot:default="{data, loading, error, options}" :options="formData" :collection="collection" :field="field" @load="load">
-			<!-- 基于 uni-list 的页面布局 -->
-			<uni-list :class="{ 'uni-list--waterfall': options.waterfall }">
-				<!-- 通过 uni-list--waterfall 类决定页面布局方向 -->
-				<!-- to 属性携带参数跳转详情页面,当前只为参考 -->
-				<uni-list-item :border="!options.waterfall" class="uni-list-item--waterfall" title="自定义商品列表" v-for="item in data"
-				 :key="item._id" :to="'/pages/detail/detail?id='+item._id+'&title='+item.name">
-					<!-- 通过header插槽定义列表左侧图片 -->
-					<template v-slot:header>
-						<view class="uni-thumb shop-picture" :class="{ 'shop-picture-column': options.waterfall }">
-							<image :src="item.goods_thumb" mode="aspectFill"></image>
-						</view>
-					</template>
-					<!-- 通过body插槽定义商品布局 -->
-					<view slot="body" class="shop">
-						<view>
-							<view class="uni-title">
-								<text class="uni-ellipsis-2">{{ item.name }}</text>
-							</view>
-							<view>
-								<text class="uni-tag hot-tag">{{ item.goods_tip }}</text>
-								<text v-for="tag in item.tag" :key="tag" class="uni-tag">{{ tag }}</text>
-							</view>
-						</view>
-						<view>
-							<view class="shop-price">
-								<text>¥</text>
-								<text class="shop-price-text">{{ item.goods_price }}</text>
-								<text>.00</text>
-							</view>
-							<view class="uni-note">{{ item.comment_count }}条评论 月销量 {{ item.month_sell_count }}</view>
-							<view class="uni-note ellipsis">
-								<text class="uni-ellipsis-1">{{ item.shop_name }}</text>
-								<text class="uni-link">进店 ></text>
-							</view>
-						</view>
-					</view>
-				</uni-list-item>
-			</uni-list>
-			<!-- 通过 loadMore 组件实现上拉加载效果,如需自定义显示内容,可参考:https://ext.dcloud.net.cn/plugin?id=29 -->
-			<uni-load-more v-if="loading || options.status === 'noMore' " :status="options.status" />
-		</unicloud-db>
-	</view>
-</template>
-
-<script>
-	export default {
-		components: {},
-		data() {
-			return {
-				// 数据表名
-				collection: 'opendb-mall-goods',
-				// 查询字段,多个字段用 , 分割
-				field: 'goods_thumb,name,goods_tip,tag,goods_price,comment_count,month_sell_count,shop_name',
-				formData: {
-					waterfall: false, // 布局方向切换
-					status: 'loading', // 加载状态
-				},
-				tipShow: false // 是否显示顶部提示框
-			};
-		},
-		onLoad() {},
-		methods: {
-			/**
-			 * 切换商品列表布局方向
-			 */
-			select() {
-				this.formData.waterfall = !this.formData.waterfall;
-			},
-			
-			load(data,ended){
-				if(ended){
-					this.formData.status = 'noMore'
-				}
-			}
-		},
-		/**
-		 * 下拉刷新回调函数
-		 */
-		onPullDownRefresh() {
-			this.tipShow = true
-			this.formData.status = 'more'
-			this.$refs.udb.loadData({clear:true},()=>{
-				this.tipShow  = false
-				uni.stopPullDownRefresh()
-			})
-		},
-		/**
-		 * 上拉加载回调函数
-		 */
-		onReachBottom() {
-			this.$refs.udb.loadMore()
-		},
-	};
-</script>
-
-<style lang="scss">
-	@import '../../common/uni-ui.scss';
-
-	page {
-		display: flex;
-		flex-direction: column;
-		box-sizing: border-box;
-		background-color: #efeff4;
-		min-height: 100%;
-		height: auto;
-	}
-
-	.tips {
-		color: #67c23a;
-		font-size: 14px;
-		line-height: 40px;
-		text-align: center;
-		background-color: #f0f9eb;
-		height: 0;
-		opacity: 0;
-		transform: translateY(-100%);
-		transition: all 0.3s;
-	}
-
-	.tips-ani {
-		transform: translateY(0);
-		height: 40px;
-		opacity: 1;
-	}
-
-	.shop {
-		flex: 1;
-		display: flex;
-		flex-direction: column;
-		justify-content: space-between;
-	}
-
-	.shop-picture {
-		width: 110px;
-		height: 110px;
-	}
-
-	.shop-picture-column {
-		width: 100%;
-		height: 170px;
-		margin-bottom: 10px;
-	}
-
-	.shop-price {
-		margin-top: 5px;
-		font-size: 12px;
-		color: #ff5a5f;
-	}
-
-	.shop-price-text {
-		font-size: 16px;
-	}
-
-	.hot-tag {
-		background: #ff5a5f;
-		border: none;
-		color: #fff;
-	}
-
-	.button-box {
-		height: 30px;
-		line-height: 30px;
-		font-size: 12px;
-		background: #007AFF;
-		color: #fff;
-	}
-
-	.uni-link {
-		flex-shrink: 0;
-	}
-
-	.ellipsis {
-		display: flex;
-		overflow: hidden;
-	}
-
-	.uni-ellipsis-1 {
-		overflow: hidden;
-		white-space: nowrap;
-		text-overflow: ellipsis;
-	}
-
-	.uni-ellipsis-2 {
-		overflow: hidden;
-		text-overflow: ellipsis;
-		display: -webkit-box;
-		-webkit-line-clamp: 2;
-		-webkit-box-orient: vertical;
-	}
-
-
-	// 默认加入 scoped ,所以外面加一层提升权重
-	.list {
-		.uni-list--waterfall {
-
-			/* #ifndef H5 || APP-VUE */
-			// 小程序 编译后会多一层标签,而其他平台没有,所以需要特殊处理一下
-			/deep/ .uni-list {
-				/* #endif */
-				display: flex;
-				flex-direction: row;
-				flex-wrap: wrap;
-				padding: 5px;
-				box-sizing: border-box;
-
-				/* #ifdef H5 || APP-VUE */
-				// h5 和 app-vue 使用深度选择器,因为默认使用了 scoped ,所以样式会无法穿透
-				/deep/
-				/* #endif */
-				.uni-list-item--waterfall {
-					width: 50%;
-					box-sizing: border-box;
-
-					.uni-list-item__container {
-						padding: 5px;
-						flex-direction: column;
-					}
-				}
-
-				/* #ifndef H5 || APP-VUE */
-			}
-
-			/* #endif */
-		}
-	}
-</style>

+ 0 - 1
uni_modules/uni-test/readme.md

@@ -1 +0,0 @@
-# list-goods

+ 0 - 8
uni_modules/uni-test/uniCloud/cloudfunctions/test.js/index.js

@@ -1,8 +0,0 @@
-'use strict';
-exports.main = async (event, context) => {
-	//event为客户端上传的参数
-	console.log('event : ', event)
-	
-	//返回数据给客户端
-	return event
-};

+ 0 - 1175
uni_modules/uni-test/uniCloud/database/db_init.json

@@ -1,1175 +0,0 @@
-// 在本文件中可配置云数据库初始化,数据格式见:https://uniapp.dcloud.io/uniCloud/cf-database?id=db_init
-// 编写完毕后对本文件点右键,可按配置规则创建表和添加数据
-{
-	"opendb-mall-goods": {
-		"data": [{
-			"category_id": "", // 分类id
-			"goods_sn": "", // 商品的唯一货号
-			"name": "Apple iPhone X 256GB 深空灰色 移动联通电信4G手机", // 商品名称
-			"keywords": "手机,iPhone", // 商品关键字,为搜索引擎收录使用
-			"goods_desc": "", // 商品详细描述
-			"goods_thumb": "https://img-cdn-qiniu.dcloud.net.cn/uploads/example/product1.jpg", // 商品缩略图,用于在列表或搜索结果中预览显示
-			"goods_banner_imgs": "", // 商品详情页的banner图地址
-			"goods_price": "9999", // 商品价格
-			"remain_count": "999999", // 库存数量
-			"month_sell_count": "640", // 月销量
-			"total_sell_count": "28512", // 总销量
-			"comment_count": "980021", // 累计评论数
-			"is_real": true, // 是否实物
-			"is_on_sale": true, // 是否上架销售
-			"is_alone_sale": true, // 是否能单独销售;如果不能单独销售,则只能作为某商品的配件或者赠品销售
-			"is_best": false, // 是否精品
-			"is_new": true, // 是否新品
-			"is_hot": false, // 是否热销
-			"add_date": "2020-8-26 09:37:21", // 上架时间
-			"last_modify_date": "2020-8-26 09:37:21", // 最后修改时间
-			"seller_note": "", //商家备注,仅商家可见
-			"shop_name": "京东商城网上自营专卖店",
-			"tag": ["手机", "iPhone"],
-			"goods_tip": "自营"
-		}, {
-			"category_id": "",
-			"goods_sn": "",
-			"name": "Apple iPad 平板电脑 2018年新款9.7英寸",
-			"keywords": "手机,iPhone",
-			"goods_desc": "",
-			"goods_thumb": "https://img-cdn-qiniu.dcloud.net.cn/uploads/example/product2.jpg",
-			"goods_banner_imgs": "",
-			"goods_price": "3499",
-			"remain_count": "999999",
-			"month_sell_count": "640",
-			"total_sell_count": "28512",
-			"comment_count": "12",
-			"is_real": true,
-			"is_on_sale": true,
-			"is_alone_sale": true,
-			"is_best": false,
-			"is_new": true,
-			"is_hot": false,
-			"add_date": "2020-8-26 09:37:21",
-			"last_modify_date": "2020-8-26 09:37:21",
-			"seller_note": "",
-			"shop_name": "手机专卖店",
-			"tag": ["手机", "iPhone"],
-			"goods_tip": "优惠"
-		}, {
-			"category_id": "",
-			"goods_sn": "",
-			"name": "Apple MacBook Pro 13.3英寸笔记本电脑(2017款Core i5处理器/8GB内存/256GB硬盘 MupxT2CH/A)",
-			"keywords": "手机,iPhone",
-			"goods_desc": "",
-			"goods_thumb": "https://img-cdn-qiniu.dcloud.net.cn/uploads/example/product3.jpg",
-			"goods_banner_imgs": "",
-			"goods_price": "12999",
-			"remain_count": "999999",
-			"month_sell_count": "640",
-			"total_sell_count": "28512",
-			"comment_count": "156",
-			"is_real": true,
-			"is_on_sale": true,
-			"is_alone_sale": true,
-			"is_best": false,
-			"is_new": true,
-			"is_hot": false,
-			"add_date": "2020-8-26 09:37:21",
-			"last_modify_date": "2020-8-26 09:37:21",
-			"seller_note": "",
-			"shop_name": "北京京东自营店",
-			"tag": ["手机", "iPhone"],
-			"goods_tip": "秒杀"
-		}, {
-			"category_id": "",
-			"goods_sn": "",
-			"name": "Kindle Paperwhite电纸书阅读器 电子书墨水屏 6英寸wifi 黑色",
-			"keywords": "手机,iPhone",
-			"goods_desc": "",
-			"goods_thumb": "https://img-cdn-qiniu.dcloud.net.cn/uploads/example/product4.jpg",
-			"goods_banner_imgs": "",
-			"goods_price": "999",
-			"remain_count": "999999",
-			"month_sell_count": "640",
-			"total_sell_count": "28512",
-			"comment_count": "45",
-			"is_real": true,
-			"is_on_sale": true,
-			"is_alone_sale": true,
-			"is_best": false,
-			"is_new": true,
-			"is_hot": false,
-			"add_date": "2020-8-26 09:37:21",
-			"last_modify_date": "2020-8-26 09:37:21",
-			"seller_note": "",
-			"shop_name": "上海手机直营店",
-			"tag": ["手机", "iPhone"],
-			"goods_tip": "秒杀"
-		}, {
-			"category_id": "",
-			"goods_sn": "",
-			"name": "微软(Microsoft)新Surface Pro 二合一平板电脑笔记本 12.3英寸(i5 8G内存 256G存储)",
-			"keywords": "手机,iPhone",
-			"goods_desc": "",
-			"goods_thumb": "https://img-cdn-qiniu.dcloud.net.cn/uploads/example/product5.jpg",
-			"goods_banner_imgs": "",
-			"goods_price": "8888",
-			"remain_count": "999999",
-			"month_sell_count": "640",
-			"total_sell_count": "28512",
-			"comment_count": "12",
-			"is_real": true,
-			"is_on_sale": true,
-			"is_alone_sale": true,
-			"is_best": false,
-			"is_new": true,
-			"is_hot": false,
-			"add_date": "2020-8-26 09:37:21",
-			"last_modify_date": "2020-8-26 09:37:21",
-			"seller_note": "",
-			"shop_name": "京东商城",
-			"tag": ["手机", "iPhone"],
-			"goods_tip": "优惠"
-		}, {
-			"category_id": "",
-			"goods_sn": "",
-			"name": "Apple Watch Series 3智能手表(GPS款 42毫米 深空灰色铝金属表壳 黑色运动型表带 MQL12CH/A)",
-			"keywords": "手机,iPhone",
-			"goods_desc": "",
-			"goods_thumb": "https://img-cdn-qiniu.dcloud.net.cn/uploads/example/product6.jpg",
-			"goods_banner_imgs": "",
-			"goods_price": "2899",
-			"remain_count": "999999",
-			"month_sell_count": "640",
-			"total_sell_count": "28512",
-			"comment_count": "252",
-			"is_real": true,
-			"is_on_sale": true,
-			"is_alone_sale": true,
-			"is_best": false,
-			"is_new": true,
-			"is_hot": false,
-			"add_date": "2020-8-26 09:37:21",
-			"last_modify_date": "2020-8-26 09:37:21",
-			"seller_note": "",
-			"shop_name": "京东商城",
-			"tag": ["手机", "iPhone"],
-			"goods_tip": "自营"
-		}, {
-			"category_id": "", // 分类id
-			"goods_sn": "", // 商品的唯一货号
-			"name": "Apple iPhone X 256GB 深空灰色 移动联通电信4G手机", // 商品名称
-			"keywords": "手机,iPhone", // 商品关键字,为搜索引擎收录使用
-			"goods_desc": "", // 商品详细描述
-			"goods_thumb": "https://img-cdn-qiniu.dcloud.net.cn/uploads/example/product1.jpg", // 商品缩略图,用于在列表或搜索结果中预览显示
-			"goods_banner_imgs": "", // 商品详情页的banner图地址
-			"goods_price": "9999", // 商品价格
-			"remain_count": "999999", // 库存数量
-			"month_sell_count": "640", // 月销量
-			"total_sell_count": "28512", // 总销量
-			"comment_count": "980021", // 累计评论数
-			"is_real": true, // 是否实物
-			"is_on_sale": true, // 是否上架销售
-			"is_alone_sale": true, // 是否能单独销售;如果不能单独销售,则只能作为某商品的配件或者赠品销售
-			"is_best": false, // 是否精品
-			"is_new": true, // 是否新品
-			"is_hot": false, // 是否热销
-			"add_date": "2020-8-26 09:37:21", // 上架时间
-			"last_modify_date": "2020-8-26 09:37:21", // 最后修改时间
-			"seller_note": "", //商家备注,仅商家可见
-			"shop_name": "京东商城网上自营专卖店",
-			"tag": ["手机", "iPhone"],
-			"goods_tip": "自营"
-		}, {
-			"category_id": "",
-			"goods_sn": "",
-			"name": "Apple iPad 平板电脑 2018年新款9.7英寸",
-			"keywords": "手机,iPhone",
-			"goods_desc": "",
-			"goods_thumb": "https://img-cdn-qiniu.dcloud.net.cn/uploads/example/product2.jpg",
-			"goods_banner_imgs": "",
-			"goods_price": "3499",
-			"remain_count": "999999",
-			"month_sell_count": "640",
-			"total_sell_count": "28512",
-			"comment_count": "12",
-			"is_real": true,
-			"is_on_sale": true,
-			"is_alone_sale": true,
-			"is_best": false,
-			"is_new": true,
-			"is_hot": false,
-			"add_date": "2020-8-26 09:37:21",
-			"last_modify_date": "2020-8-26 09:37:21",
-			"seller_note": "",
-			"shop_name": "手机专卖店",
-			"tag": ["手机", "iPhone"],
-			"goods_tip": "优惠"
-		}, {
-			"category_id": "",
-			"goods_sn": "",
-			"name": "Apple MacBook Pro 13.3英寸笔记本电脑(2017款Core i5处理器/8GB内存/256GB硬盘 MupxT2CH/A)",
-			"keywords": "手机,iPhone",
-			"goods_desc": "",
-			"goods_thumb": "https://img-cdn-qiniu.dcloud.net.cn/uploads/example/product3.jpg",
-			"goods_banner_imgs": "",
-			"goods_price": "12999",
-			"remain_count": "999999",
-			"month_sell_count": "640",
-			"total_sell_count": "28512",
-			"comment_count": "156",
-			"is_real": true,
-			"is_on_sale": true,
-			"is_alone_sale": true,
-			"is_best": false,
-			"is_new": true,
-			"is_hot": false,
-			"add_date": "2020-8-26 09:37:21",
-			"last_modify_date": "2020-8-26 09:37:21",
-			"seller_note": "",
-			"shop_name": "北京京东自营店",
-			"tag": ["手机", "iPhone"],
-			"goods_tip": "秒杀"
-		}, {
-			"category_id": "",
-			"goods_sn": "",
-			"name": "Kindle Paperwhite电纸书阅读器 电子书墨水屏 6英寸wifi 黑色",
-			"keywords": "手机,iPhone",
-			"goods_desc": "",
-			"goods_thumb": "https://img-cdn-qiniu.dcloud.net.cn/uploads/example/product4.jpg",
-			"goods_banner_imgs": "",
-			"goods_price": "999",
-			"remain_count": "999999",
-			"month_sell_count": "640",
-			"total_sell_count": "28512",
-			"comment_count": "45",
-			"is_real": true,
-			"is_on_sale": true,
-			"is_alone_sale": true,
-			"is_best": false,
-			"is_new": true,
-			"is_hot": false,
-			"add_date": "2020-8-26 09:37:21",
-			"last_modify_date": "2020-8-26 09:37:21",
-			"seller_note": "",
-			"shop_name": "上海手机直营店",
-			"tag": ["手机", "iPhone"],
-			"goods_tip": "秒杀"
-		}, {
-			"category_id": "",
-			"goods_sn": "",
-			"name": "微软(Microsoft)新Surface Pro 二合一平板电脑笔记本 12.3英寸(i5 8G内存 256G存储)",
-			"keywords": "手机,iPhone",
-			"goods_desc": "",
-			"goods_thumb": "https://img-cdn-qiniu.dcloud.net.cn/uploads/example/product5.jpg",
-			"goods_banner_imgs": "",
-			"goods_price": "8888",
-			"remain_count": "999999",
-			"month_sell_count": "640",
-			"total_sell_count": "28512",
-			"comment_count": "12",
-			"is_real": true,
-			"is_on_sale": true,
-			"is_alone_sale": true,
-			"is_best": false,
-			"is_new": true,
-			"is_hot": false,
-			"add_date": "2020-8-26 09:37:21",
-			"last_modify_date": "2020-8-26 09:37:21",
-			"seller_note": "",
-			"shop_name": "京东商城",
-			"tag": ["手机", "iPhone"],
-			"goods_tip": "优惠"
-		}, {
-			"category_id": "",
-			"goods_sn": "",
-			"name": "Apple Watch Series 3智能手表(GPS款 42毫米 深空灰色铝金属表壳 黑色运动型表带 MQL12CH/A)",
-			"keywords": "手机,iPhone",
-			"goods_desc": "",
-			"goods_thumb": "https://img-cdn-qiniu.dcloud.net.cn/uploads/example/product6.jpg",
-			"goods_banner_imgs": "",
-			"goods_price": "2899",
-			"remain_count": "999999",
-			"month_sell_count": "640",
-			"total_sell_count": "28512",
-			"comment_count": "252",
-			"is_real": true,
-			"is_on_sale": true,
-			"is_alone_sale": true,
-			"is_best": false,
-			"is_new": true,
-			"is_hot": false,
-			"add_date": "2020-8-26 09:37:21",
-			"last_modify_date": "2020-8-26 09:37:21",
-			"seller_note": "",
-			"shop_name": "京东商城",
-			"tag": ["手机", "iPhone"],
-			"goods_tip": "自营"
-		}, {
-			"category_id": "", // 分类id
-			"goods_sn": "", // 商品的唯一货号
-			"name": "Apple iPhone X 256GB 深空灰色 移动联通电信4G手机", // 商品名称
-			"keywords": "手机,iPhone", // 商品关键字,为搜索引擎收录使用
-			"goods_desc": "", // 商品详细描述
-			"goods_thumb": "https://img-cdn-qiniu.dcloud.net.cn/uploads/example/product1.jpg", // 商品缩略图,用于在列表或搜索结果中预览显示
-			"goods_banner_imgs": "", // 商品详情页的banner图地址
-			"goods_price": "9999", // 商品价格
-			"remain_count": "999999", // 库存数量
-			"month_sell_count": "640", // 月销量
-			"total_sell_count": "28512", // 总销量
-			"comment_count": "980021", // 累计评论数
-			"is_real": true, // 是否实物
-			"is_on_sale": true, // 是否上架销售
-			"is_alone_sale": true, // 是否能单独销售;如果不能单独销售,则只能作为某商品的配件或者赠品销售
-			"is_best": false, // 是否精品
-			"is_new": true, // 是否新品
-			"is_hot": false, // 是否热销
-			"add_date": "2020-8-26 09:37:21", // 上架时间
-			"last_modify_date": "2020-8-26 09:37:21", // 最后修改时间
-			"seller_note": "", //商家备注,仅商家可见
-			"shop_name": "京东商城网上自营专卖店",
-			"tag": ["手机", "iPhone"],
-			"goods_tip": "自营"
-		}, {
-			"category_id": "",
-			"goods_sn": "",
-			"name": "Apple iPad 平板电脑 2018年新款9.7英寸",
-			"keywords": "手机,iPhone",
-			"goods_desc": "",
-			"goods_thumb": "https://img-cdn-qiniu.dcloud.net.cn/uploads/example/product2.jpg",
-			"goods_banner_imgs": "",
-			"goods_price": "3499",
-			"remain_count": "999999",
-			"month_sell_count": "640",
-			"total_sell_count": "28512",
-			"comment_count": "12",
-			"is_real": true,
-			"is_on_sale": true,
-			"is_alone_sale": true,
-			"is_best": false,
-			"is_new": true,
-			"is_hot": false,
-			"add_date": "2020-8-26 09:37:21",
-			"last_modify_date": "2020-8-26 09:37:21",
-			"seller_note": "",
-			"shop_name": "手机专卖店",
-			"tag": ["手机", "iPhone"],
-			"goods_tip": "优惠"
-		}, {
-			"category_id": "",
-			"goods_sn": "",
-			"name": "Apple MacBook Pro 13.3英寸笔记本电脑(2017款Core i5处理器/8GB内存/256GB硬盘 MupxT2CH/A)",
-			"keywords": "手机,iPhone",
-			"goods_desc": "",
-			"goods_thumb": "https://img-cdn-qiniu.dcloud.net.cn/uploads/example/product3.jpg",
-			"goods_banner_imgs": "",
-			"goods_price": "12999",
-			"remain_count": "999999",
-			"month_sell_count": "640",
-			"total_sell_count": "28512",
-			"comment_count": "156",
-			"is_real": true,
-			"is_on_sale": true,
-			"is_alone_sale": true,
-			"is_best": false,
-			"is_new": true,
-			"is_hot": false,
-			"add_date": "2020-8-26 09:37:21",
-			"last_modify_date": "2020-8-26 09:37:21",
-			"seller_note": "",
-			"shop_name": "北京京东自营店",
-			"tag": ["手机", "iPhone"],
-			"goods_tip": "秒杀"
-		}, {
-			"category_id": "",
-			"goods_sn": "",
-			"name": "Kindle Paperwhite电纸书阅读器 电子书墨水屏 6英寸wifi 黑色",
-			"keywords": "手机,iPhone",
-			"goods_desc": "",
-			"goods_thumb": "https://img-cdn-qiniu.dcloud.net.cn/uploads/example/product4.jpg",
-			"goods_banner_imgs": "",
-			"goods_price": "999",
-			"remain_count": "999999",
-			"month_sell_count": "640",
-			"total_sell_count": "28512",
-			"comment_count": "45",
-			"is_real": true,
-			"is_on_sale": true,
-			"is_alone_sale": true,
-			"is_best": false,
-			"is_new": true,
-			"is_hot": false,
-			"add_date": "2020-8-26 09:37:21",
-			"last_modify_date": "2020-8-26 09:37:21",
-			"seller_note": "",
-			"shop_name": "上海手机直营店",
-			"tag": ["手机", "iPhone"],
-			"goods_tip": "秒杀"
-		}, {
-			"category_id": "",
-			"goods_sn": "",
-			"name": "微软(Microsoft)新Surface Pro 二合一平板电脑笔记本 12.3英寸(i5 8G内存 256G存储)",
-			"keywords": "手机,iPhone",
-			"goods_desc": "",
-			"goods_thumb": "https://img-cdn-qiniu.dcloud.net.cn/uploads/example/product5.jpg",
-			"goods_banner_imgs": "",
-			"goods_price": "8888",
-			"remain_count": "999999",
-			"month_sell_count": "640",
-			"total_sell_count": "28512",
-			"comment_count": "12",
-			"is_real": true,
-			"is_on_sale": true,
-			"is_alone_sale": true,
-			"is_best": false,
-			"is_new": true,
-			"is_hot": false,
-			"add_date": "2020-8-26 09:37:21",
-			"last_modify_date": "2020-8-26 09:37:21",
-			"seller_note": "",
-			"shop_name": "京东商城",
-			"tag": ["手机", "iPhone"],
-			"goods_tip": "优惠"
-		}, {
-			"category_id": "",
-			"goods_sn": "",
-			"name": "Apple Watch Series 3智能手表(GPS款 42毫米 深空灰色铝金属表壳 黑色运动型表带 MQL12CH/A)",
-			"keywords": "手机,iPhone",
-			"goods_desc": "",
-			"goods_thumb": "https://img-cdn-qiniu.dcloud.net.cn/uploads/example/product6.jpg",
-			"goods_banner_imgs": "",
-			"goods_price": "2899",
-			"remain_count": "999999",
-			"month_sell_count": "640",
-			"total_sell_count": "28512",
-			"comment_count": "252",
-			"is_real": true,
-			"is_on_sale": true,
-			"is_alone_sale": true,
-			"is_best": false,
-			"is_new": true,
-			"is_hot": false,
-			"add_date": "2020-8-26 09:37:21",
-			"last_modify_date": "2020-8-26 09:37:21",
-			"seller_note": "",
-			"shop_name": "京东商城",
-			"tag": ["手机", "iPhone"],
-			"goods_tip": "自营"
-		}, {
-			"category_id": "", // 分类id
-			"goods_sn": "", // 商品的唯一货号
-			"name": "Apple iPhone X 256GB 深空灰色 移动联通电信4G手机", // 商品名称
-			"keywords": "手机,iPhone", // 商品关键字,为搜索引擎收录使用
-			"goods_desc": "", // 商品详细描述
-			"goods_thumb": "https://img-cdn-qiniu.dcloud.net.cn/uploads/example/product1.jpg", // 商品缩略图,用于在列表或搜索结果中预览显示
-			"goods_banner_imgs": "", // 商品详情页的banner图地址
-			"goods_price": "9999", // 商品价格
-			"remain_count": "999999", // 库存数量
-			"month_sell_count": "640", // 月销量
-			"total_sell_count": "28512", // 总销量
-			"comment_count": "980021", // 累计评论数
-			"is_real": true, // 是否实物
-			"is_on_sale": true, // 是否上架销售
-			"is_alone_sale": true, // 是否能单独销售;如果不能单独销售,则只能作为某商品的配件或者赠品销售
-			"is_best": false, // 是否精品
-			"is_new": true, // 是否新品
-			"is_hot": false, // 是否热销
-			"add_date": "2020-8-26 09:37:21", // 上架时间
-			"last_modify_date": "2020-8-26 09:37:21", // 最后修改时间
-			"seller_note": "", //商家备注,仅商家可见
-			"shop_name": "京东商城网上自营专卖店",
-			"tag": ["手机", "iPhone"],
-			"goods_tip": "自营"
-		}, {
-			"category_id": "",
-			"goods_sn": "",
-			"name": "Apple iPad 平板电脑 2018年新款9.7英寸",
-			"keywords": "手机,iPhone",
-			"goods_desc": "",
-			"goods_thumb": "https://img-cdn-qiniu.dcloud.net.cn/uploads/example/product2.jpg",
-			"goods_banner_imgs": "",
-			"goods_price": "3499",
-			"remain_count": "999999",
-			"month_sell_count": "640",
-			"total_sell_count": "28512",
-			"comment_count": "12",
-			"is_real": true,
-			"is_on_sale": true,
-			"is_alone_sale": true,
-			"is_best": false,
-			"is_new": true,
-			"is_hot": false,
-			"add_date": "2020-8-26 09:37:21",
-			"last_modify_date": "2020-8-26 09:37:21",
-			"seller_note": "",
-			"shop_name": "手机专卖店",
-			"tag": ["手机", "iPhone"],
-			"goods_tip": "优惠"
-		}, {
-			"category_id": "",
-			"goods_sn": "",
-			"name": "Apple MacBook Pro 13.3英寸笔记本电脑(2017款Core i5处理器/8GB内存/256GB硬盘 MupxT2CH/A)",
-			"keywords": "手机,iPhone",
-			"goods_desc": "",
-			"goods_thumb": "https://img-cdn-qiniu.dcloud.net.cn/uploads/example/product3.jpg",
-			"goods_banner_imgs": "",
-			"goods_price": "12999",
-			"remain_count": "999999",
-			"month_sell_count": "640",
-			"total_sell_count": "28512",
-			"comment_count": "156",
-			"is_real": true,
-			"is_on_sale": true,
-			"is_alone_sale": true,
-			"is_best": false,
-			"is_new": true,
-			"is_hot": false,
-			"add_date": "2020-8-26 09:37:21",
-			"last_modify_date": "2020-8-26 09:37:21",
-			"seller_note": "",
-			"shop_name": "北京京东自营店",
-			"tag": ["手机", "iPhone"],
-			"goods_tip": "秒杀"
-		}, {
-			"category_id": "",
-			"goods_sn": "",
-			"name": "Kindle Paperwhite电纸书阅读器 电子书墨水屏 6英寸wifi 黑色",
-			"keywords": "手机,iPhone",
-			"goods_desc": "",
-			"goods_thumb": "https://img-cdn-qiniu.dcloud.net.cn/uploads/example/product4.jpg",
-			"goods_banner_imgs": "",
-			"goods_price": "999",
-			"remain_count": "999999",
-			"month_sell_count": "640",
-			"total_sell_count": "28512",
-			"comment_count": "45",
-			"is_real": true,
-			"is_on_sale": true,
-			"is_alone_sale": true,
-			"is_best": false,
-			"is_new": true,
-			"is_hot": false,
-			"add_date": "2020-8-26 09:37:21",
-			"last_modify_date": "2020-8-26 09:37:21",
-			"seller_note": "",
-			"shop_name": "上海手机直营店",
-			"tag": ["手机", "iPhone"],
-			"goods_tip": "秒杀"
-		}, {
-			"category_id": "",
-			"goods_sn": "",
-			"name": "微软(Microsoft)新Surface Pro 二合一平板电脑笔记本 12.3英寸(i5 8G内存 256G存储)",
-			"keywords": "手机,iPhone",
-			"goods_desc": "",
-			"goods_thumb": "https://img-cdn-qiniu.dcloud.net.cn/uploads/example/product5.jpg",
-			"goods_banner_imgs": "",
-			"goods_price": "8888",
-			"remain_count": "999999",
-			"month_sell_count": "640",
-			"total_sell_count": "28512",
-			"comment_count": "12",
-			"is_real": true,
-			"is_on_sale": true,
-			"is_alone_sale": true,
-			"is_best": false,
-			"is_new": true,
-			"is_hot": false,
-			"add_date": "2020-8-26 09:37:21",
-			"last_modify_date": "2020-8-26 09:37:21",
-			"seller_note": "",
-			"shop_name": "京东商城",
-			"tag": ["手机", "iPhone"],
-			"goods_tip": "优惠"
-		}, {
-			"category_id": "",
-			"goods_sn": "",
-			"name": "Apple Watch Series 3智能手表(GPS款 42毫米 深空灰色铝金属表壳 黑色运动型表带 MQL12CH/A)",
-			"keywords": "手机,iPhone",
-			"goods_desc": "",
-			"goods_thumb": "https://img-cdn-qiniu.dcloud.net.cn/uploads/example/product6.jpg",
-			"goods_banner_imgs": "",
-			"goods_price": "2899",
-			"remain_count": "999999",
-			"month_sell_count": "640",
-			"total_sell_count": "28512",
-			"comment_count": "252",
-			"is_real": true,
-			"is_on_sale": true,
-			"is_alone_sale": true,
-			"is_best": false,
-			"is_new": true,
-			"is_hot": false,
-			"add_date": "2020-8-26 09:37:21",
-			"last_modify_date": "2020-8-26 09:37:21",
-			"seller_note": "",
-			"shop_name": "京东商城",
-			"tag": ["手机", "iPhone"],
-			"goods_tip": "自营"
-		}, {
-			"category_id": "", // 分类id
-			"goods_sn": "", // 商品的唯一货号
-			"name": "Apple iPhone X 256GB 深空灰色 移动联通电信4G手机", // 商品名称
-			"keywords": "手机,iPhone", // 商品关键字,为搜索引擎收录使用
-			"goods_desc": "", // 商品详细描述
-			"goods_thumb": "https://img-cdn-qiniu.dcloud.net.cn/uploads/example/product1.jpg", // 商品缩略图,用于在列表或搜索结果中预览显示
-			"goods_banner_imgs": "", // 商品详情页的banner图地址
-			"goods_price": "9999", // 商品价格
-			"remain_count": "999999", // 库存数量
-			"month_sell_count": "640", // 月销量
-			"total_sell_count": "28512", // 总销量
-			"comment_count": "980021", // 累计评论数
-			"is_real": true, // 是否实物
-			"is_on_sale": true, // 是否上架销售
-			"is_alone_sale": true, // 是否能单独销售;如果不能单独销售,则只能作为某商品的配件或者赠品销售
-			"is_best": false, // 是否精品
-			"is_new": true, // 是否新品
-			"is_hot": false, // 是否热销
-			"add_date": "2020-8-26 09:37:21", // 上架时间
-			"last_modify_date": "2020-8-26 09:37:21", // 最后修改时间
-			"seller_note": "", //商家备注,仅商家可见
-			"shop_name": "京东商城网上自营专卖店",
-			"tag": ["手机", "iPhone"],
-			"goods_tip": "自营"
-		}, {
-			"category_id": "",
-			"goods_sn": "",
-			"name": "Apple iPad 平板电脑 2018年新款9.7英寸",
-			"keywords": "手机,iPhone",
-			"goods_desc": "",
-			"goods_thumb": "https://img-cdn-qiniu.dcloud.net.cn/uploads/example/product2.jpg",
-			"goods_banner_imgs": "",
-			"goods_price": "3499",
-			"remain_count": "999999",
-			"month_sell_count": "640",
-			"total_sell_count": "28512",
-			"comment_count": "12",
-			"is_real": true,
-			"is_on_sale": true,
-			"is_alone_sale": true,
-			"is_best": false,
-			"is_new": true,
-			"is_hot": false,
-			"add_date": "2020-8-26 09:37:21",
-			"last_modify_date": "2020-8-26 09:37:21",
-			"seller_note": "",
-			"shop_name": "手机专卖店",
-			"tag": ["手机", "iPhone"],
-			"goods_tip": "优惠"
-		}, {
-			"category_id": "",
-			"goods_sn": "",
-			"name": "Apple MacBook Pro 13.3英寸笔记本电脑(2017款Core i5处理器/8GB内存/256GB硬盘 MupxT2CH/A)",
-			"keywords": "手机,iPhone",
-			"goods_desc": "",
-			"goods_thumb": "https://img-cdn-qiniu.dcloud.net.cn/uploads/example/product3.jpg",
-			"goods_banner_imgs": "",
-			"goods_price": "12999",
-			"remain_count": "999999",
-			"month_sell_count": "640",
-			"total_sell_count": "28512",
-			"comment_count": "156",
-			"is_real": true,
-			"is_on_sale": true,
-			"is_alone_sale": true,
-			"is_best": false,
-			"is_new": true,
-			"is_hot": false,
-			"add_date": "2020-8-26 09:37:21",
-			"last_modify_date": "2020-8-26 09:37:21",
-			"seller_note": "",
-			"shop_name": "北京京东自营店",
-			"tag": ["手机", "iPhone"],
-			"goods_tip": "秒杀"
-		}, {
-			"category_id": "",
-			"goods_sn": "",
-			"name": "Kindle Paperwhite电纸书阅读器 电子书墨水屏 6英寸wifi 黑色",
-			"keywords": "手机,iPhone",
-			"goods_desc": "",
-			"goods_thumb": "https://img-cdn-qiniu.dcloud.net.cn/uploads/example/product4.jpg",
-			"goods_banner_imgs": "",
-			"goods_price": "999",
-			"remain_count": "999999",
-			"month_sell_count": "640",
-			"total_sell_count": "28512",
-			"comment_count": "45",
-			"is_real": true,
-			"is_on_sale": true,
-			"is_alone_sale": true,
-			"is_best": false,
-			"is_new": true,
-			"is_hot": false,
-			"add_date": "2020-8-26 09:37:21",
-			"last_modify_date": "2020-8-26 09:37:21",
-			"seller_note": "",
-			"shop_name": "上海手机直营店",
-			"tag": ["手机", "iPhone"],
-			"goods_tip": "秒杀"
-		}, {
-			"category_id": "",
-			"goods_sn": "",
-			"name": "微软(Microsoft)新Surface Pro 二合一平板电脑笔记本 12.3英寸(i5 8G内存 256G存储)",
-			"keywords": "手机,iPhone",
-			"goods_desc": "",
-			"goods_thumb": "https://img-cdn-qiniu.dcloud.net.cn/uploads/example/product5.jpg",
-			"goods_banner_imgs": "",
-			"goods_price": "8888",
-			"remain_count": "999999",
-			"month_sell_count": "640",
-			"total_sell_count": "28512",
-			"comment_count": "12",
-			"is_real": true,
-			"is_on_sale": true,
-			"is_alone_sale": true,
-			"is_best": false,
-			"is_new": true,
-			"is_hot": false,
-			"add_date": "2020-8-26 09:37:21",
-			"last_modify_date": "2020-8-26 09:37:21",
-			"seller_note": "",
-			"shop_name": "京东商城",
-			"tag": ["手机", "iPhone"],
-			"goods_tip": "优惠"
-		}, {
-			"category_id": "",
-			"goods_sn": "",
-			"name": "Apple Watch Series 3智能手表(GPS款 42毫米 深空灰色铝金属表壳 黑色运动型表带 MQL12CH/A)",
-			"keywords": "手机,iPhone",
-			"goods_desc": "",
-			"goods_thumb": "https://img-cdn-qiniu.dcloud.net.cn/uploads/example/product6.jpg",
-			"goods_banner_imgs": "",
-			"goods_price": "2899",
-			"remain_count": "999999",
-			"month_sell_count": "640",
-			"total_sell_count": "28512",
-			"comment_count": "252",
-			"is_real": true,
-			"is_on_sale": true,
-			"is_alone_sale": true,
-			"is_best": false,
-			"is_new": true,
-			"is_hot": false,
-			"add_date": "2020-8-26 09:37:21",
-			"last_modify_date": "2020-8-26 09:37:21",
-			"seller_note": "",
-			"shop_name": "京东商城",
-			"tag": ["手机", "iPhone"],
-			"goods_tip": "自营"
-		}, {
-			"category_id": "", // 分类id
-			"goods_sn": "", // 商品的唯一货号
-			"name": "Apple iPhone X 256GB 深空灰色 移动联通电信4G手机", // 商品名称
-			"keywords": "手机,iPhone", // 商品关键字,为搜索引擎收录使用
-			"goods_desc": "", // 商品详细描述
-			"goods_thumb": "https://img-cdn-qiniu.dcloud.net.cn/uploads/example/product1.jpg", // 商品缩略图,用于在列表或搜索结果中预览显示
-			"goods_banner_imgs": "", // 商品详情页的banner图地址
-			"goods_price": "9999", // 商品价格
-			"remain_count": "999999", // 库存数量
-			"month_sell_count": "640", // 月销量
-			"total_sell_count": "28512", // 总销量
-			"comment_count": "980021", // 累计评论数
-			"is_real": true, // 是否实物
-			"is_on_sale": true, // 是否上架销售
-			"is_alone_sale": true, // 是否能单独销售;如果不能单独销售,则只能作为某商品的配件或者赠品销售
-			"is_best": false, // 是否精品
-			"is_new": true, // 是否新品
-			"is_hot": false, // 是否热销
-			"add_date": "2020-8-26 09:37:21", // 上架时间
-			"last_modify_date": "2020-8-26 09:37:21", // 最后修改时间
-			"seller_note": "", //商家备注,仅商家可见
-			"shop_name": "京东商城网上自营专卖店",
-			"tag": ["手机", "iPhone"],
-			"goods_tip": "自营"
-		}, {
-			"category_id": "",
-			"goods_sn": "",
-			"name": "Apple iPad 平板电脑 2018年新款9.7英寸",
-			"keywords": "手机,iPhone",
-			"goods_desc": "",
-			"goods_thumb": "https://img-cdn-qiniu.dcloud.net.cn/uploads/example/product2.jpg",
-			"goods_banner_imgs": "",
-			"goods_price": "3499",
-			"remain_count": "999999",
-			"month_sell_count": "640",
-			"total_sell_count": "28512",
-			"comment_count": "12",
-			"is_real": true,
-			"is_on_sale": true,
-			"is_alone_sale": true,
-			"is_best": false,
-			"is_new": true,
-			"is_hot": false,
-			"add_date": "2020-8-26 09:37:21",
-			"last_modify_date": "2020-8-26 09:37:21",
-			"seller_note": "",
-			"shop_name": "手机专卖店",
-			"tag": ["手机", "iPhone"],
-			"goods_tip": "优惠"
-		}, {
-			"category_id": "",
-			"goods_sn": "",
-			"name": "Apple MacBook Pro 13.3英寸笔记本电脑(2017款Core i5处理器/8GB内存/256GB硬盘 MupxT2CH/A)",
-			"keywords": "手机,iPhone",
-			"goods_desc": "",
-			"goods_thumb": "https://img-cdn-qiniu.dcloud.net.cn/uploads/example/product3.jpg",
-			"goods_banner_imgs": "",
-			"goods_price": "12999",
-			"remain_count": "999999",
-			"month_sell_count": "640",
-			"total_sell_count": "28512",
-			"comment_count": "156",
-			"is_real": true,
-			"is_on_sale": true,
-			"is_alone_sale": true,
-			"is_best": false,
-			"is_new": true,
-			"is_hot": false,
-			"add_date": "2020-8-26 09:37:21",
-			"last_modify_date": "2020-8-26 09:37:21",
-			"seller_note": "",
-			"shop_name": "北京京东自营店",
-			"tag": ["手机", "iPhone"],
-			"goods_tip": "秒杀"
-		}, {
-			"category_id": "",
-			"goods_sn": "",
-			"name": "Kindle Paperwhite电纸书阅读器 电子书墨水屏 6英寸wifi 黑色",
-			"keywords": "手机,iPhone",
-			"goods_desc": "",
-			"goods_thumb": "https://img-cdn-qiniu.dcloud.net.cn/uploads/example/product4.jpg",
-			"goods_banner_imgs": "",
-			"goods_price": "999",
-			"remain_count": "999999",
-			"month_sell_count": "640",
-			"total_sell_count": "28512",
-			"comment_count": "45",
-			"is_real": true,
-			"is_on_sale": true,
-			"is_alone_sale": true,
-			"is_best": false,
-			"is_new": true,
-			"is_hot": false,
-			"add_date": "2020-8-26 09:37:21",
-			"last_modify_date": "2020-8-26 09:37:21",
-			"seller_note": "",
-			"shop_name": "上海手机直营店",
-			"tag": ["手机", "iPhone"],
-			"goods_tip": "秒杀"
-		}, {
-			"category_id": "",
-			"goods_sn": "",
-			"name": "微软(Microsoft)新Surface Pro 二合一平板电脑笔记本 12.3英寸(i5 8G内存 256G存储)",
-			"keywords": "手机,iPhone",
-			"goods_desc": "",
-			"goods_thumb": "https://img-cdn-qiniu.dcloud.net.cn/uploads/example/product5.jpg",
-			"goods_banner_imgs": "",
-			"goods_price": "8888",
-			"remain_count": "999999",
-			"month_sell_count": "640",
-			"total_sell_count": "28512",
-			"comment_count": "12",
-			"is_real": true,
-			"is_on_sale": true,
-			"is_alone_sale": true,
-			"is_best": false,
-			"is_new": true,
-			"is_hot": false,
-			"add_date": "2020-8-26 09:37:21",
-			"last_modify_date": "2020-8-26 09:37:21",
-			"seller_note": "",
-			"shop_name": "京东商城",
-			"tag": ["手机", "iPhone"],
-			"goods_tip": "优惠"
-		}, {
-			"category_id": "",
-			"goods_sn": "",
-			"name": "Apple Watch Series 3智能手表(GPS款 42毫米 深空灰色铝金属表壳 黑色运动型表带 MQL12CH/A)",
-			"keywords": "手机,iPhone",
-			"goods_desc": "",
-			"goods_thumb": "https://img-cdn-qiniu.dcloud.net.cn/uploads/example/product6.jpg",
-			"goods_banner_imgs": "",
-			"goods_price": "2899",
-			"remain_count": "999999",
-			"month_sell_count": "640",
-			"total_sell_count": "28512",
-			"comment_count": "252",
-			"is_real": true,
-			"is_on_sale": true,
-			"is_alone_sale": true,
-			"is_best": false,
-			"is_new": true,
-			"is_hot": false,
-			"add_date": "2020-8-26 09:37:21",
-			"last_modify_date": "2020-8-26 09:37:21",
-			"seller_note": "",
-			"shop_name": "京东商城",
-			"tag": ["手机", "iPhone"],
-			"goods_tip": "自营"
-		}, {
-			"category_id": "", // 分类id
-			"goods_sn": "", // 商品的唯一货号
-			"name": "Apple iPhone X 256GB 深空灰色 移动联通电信4G手机", // 商品名称
-			"keywords": "手机,iPhone", // 商品关键字,为搜索引擎收录使用
-			"goods_desc": "", // 商品详细描述
-			"goods_thumb": "https://img-cdn-qiniu.dcloud.net.cn/uploads/example/product1.jpg", // 商品缩略图,用于在列表或搜索结果中预览显示
-			"goods_banner_imgs": "", // 商品详情页的banner图地址
-			"goods_price": "9999", // 商品价格
-			"remain_count": "999999", // 库存数量
-			"month_sell_count": "640", // 月销量
-			"total_sell_count": "28512", // 总销量
-			"comment_count": "980021", // 累计评论数
-			"is_real": true, // 是否实物
-			"is_on_sale": true, // 是否上架销售
-			"is_alone_sale": true, // 是否能单独销售;如果不能单独销售,则只能作为某商品的配件或者赠品销售
-			"is_best": false, // 是否精品
-			"is_new": true, // 是否新品
-			"is_hot": false, // 是否热销
-			"add_date": "2020-8-26 09:37:21", // 上架时间
-			"last_modify_date": "2020-8-26 09:37:21", // 最后修改时间
-			"seller_note": "", //商家备注,仅商家可见
-			"shop_name": "京东商城网上自营专卖店",
-			"tag": ["手机", "iPhone"],
-			"goods_tip": "自营"
-		}, {
-			"category_id": "",
-			"goods_sn": "",
-			"name": "Apple iPad 平板电脑 2018年新款9.7英寸",
-			"keywords": "手机,iPhone",
-			"goods_desc": "",
-			"goods_thumb": "https://img-cdn-qiniu.dcloud.net.cn/uploads/example/product2.jpg",
-			"goods_banner_imgs": "",
-			"goods_price": "3499",
-			"remain_count": "999999",
-			"month_sell_count": "640",
-			"total_sell_count": "28512",
-			"comment_count": "12",
-			"is_real": true,
-			"is_on_sale": true,
-			"is_alone_sale": true,
-			"is_best": false,
-			"is_new": true,
-			"is_hot": false,
-			"add_date": "2020-8-26 09:37:21",
-			"last_modify_date": "2020-8-26 09:37:21",
-			"seller_note": "",
-			"shop_name": "手机专卖店",
-			"tag": ["手机", "iPhone"],
-			"goods_tip": "优惠"
-		}, {
-			"category_id": "",
-			"goods_sn": "",
-			"name": "Apple MacBook Pro 13.3英寸笔记本电脑(2017款Core i5处理器/8GB内存/256GB硬盘 MupxT2CH/A)",
-			"keywords": "手机,iPhone",
-			"goods_desc": "",
-			"goods_thumb": "https://img-cdn-qiniu.dcloud.net.cn/uploads/example/product3.jpg",
-			"goods_banner_imgs": "",
-			"goods_price": "12999",
-			"remain_count": "999999",
-			"month_sell_count": "640",
-			"total_sell_count": "28512",
-			"comment_count": "156",
-			"is_real": true,
-			"is_on_sale": true,
-			"is_alone_sale": true,
-			"is_best": false,
-			"is_new": true,
-			"is_hot": false,
-			"add_date": "2020-8-26 09:37:21",
-			"last_modify_date": "2020-8-26 09:37:21",
-			"seller_note": "",
-			"shop_name": "北京京东自营店",
-			"tag": ["手机", "iPhone"],
-			"goods_tip": "秒杀"
-		}, {
-			"category_id": "",
-			"goods_sn": "",
-			"name": "Kindle Paperwhite电纸书阅读器 电子书墨水屏 6英寸wifi 黑色",
-			"keywords": "手机,iPhone",
-			"goods_desc": "",
-			"goods_thumb": "https://img-cdn-qiniu.dcloud.net.cn/uploads/example/product4.jpg",
-			"goods_banner_imgs": "",
-			"goods_price": "999",
-			"remain_count": "999999",
-			"month_sell_count": "640",
-			"total_sell_count": "28512",
-			"comment_count": "45",
-			"is_real": true,
-			"is_on_sale": true,
-			"is_alone_sale": true,
-			"is_best": false,
-			"is_new": true,
-			"is_hot": false,
-			"add_date": "2020-8-26 09:37:21",
-			"last_modify_date": "2020-8-26 09:37:21",
-			"seller_note": "",
-			"shop_name": "上海手机直营店",
-			"tag": ["手机", "iPhone"],
-			"goods_tip": "秒杀"
-		}, {
-			"category_id": "",
-			"goods_sn": "",
-			"name": "微软(Microsoft)新Surface Pro 二合一平板电脑笔记本 12.3英寸(i5 8G内存 256G存储)",
-			"keywords": "手机,iPhone",
-			"goods_desc": "",
-			"goods_thumb": "https://img-cdn-qiniu.dcloud.net.cn/uploads/example/product5.jpg",
-			"goods_banner_imgs": "",
-			"goods_price": "8888",
-			"remain_count": "999999",
-			"month_sell_count": "640",
-			"total_sell_count": "28512",
-			"comment_count": "12",
-			"is_real": true,
-			"is_on_sale": true,
-			"is_alone_sale": true,
-			"is_best": false,
-			"is_new": true,
-			"is_hot": false,
-			"add_date": "2020-8-26 09:37:21",
-			"last_modify_date": "2020-8-26 09:37:21",
-			"seller_note": "",
-			"shop_name": "京东商城",
-			"tag": ["手机", "iPhone"],
-			"goods_tip": "优惠"
-		}],
-		"schema": {
-			"bsonType": "object",
-			"required": [
-				"goods_sn",
-				"name",
-				"remain_count",
-				"month_sell_count",
-				"total_sell_count",
-				"comment_count",
-				"is_real",
-				"is_on_sale",
-				"is_alone_sale",
-				"is_best",
-				"is_new",
-				"is_hot"
-			],
-			"permission": {
-				"read": "doc.is_on_sale == true",
-				"create": false,
-				"update": false,
-				"delete": false
-			},
-			"properties": {
-				"_id": {
-					"description": "存储文档 ID(商品 ID),系统自动生成"
-				},
-				"category_id": {
-					"bsonType": "string",
-					"description": "分类 id,参考`opendb-mall-categories`表"
-				},
-				"goods_sn": {
-					"bsonType": "string",
-					"description": "商品的唯一货号",
-					"title": "货号"
-				},
-				"goods_price": {
-					"bsonType": "int",
-					"description": "商品价格"
-				},
-				"name": {
-					"bsonType": "string",
-					"description": "商品名称",
-					"title": "名称"
-				},
-				"keywords": {
-					"bsonType": "string",
-					"description": "商品关键字,为搜索引擎收录使用",
-					"title": "关键字"
-				},
-				"goods_desc": {
-					"bsonType": "string",
-					"description": "商品详细描述",
-					"title": "详细描述"
-				},
-				"goods_thumb": {
-					"bsonType": "string",
-					"description": "商品缩略图,用于在列表或搜索结果中预览显示",
-					"title": "缩略图地址",
-					"pattern": "^(http://|https://|/|./|@/)\\S"
-				},
-				"goods_banner_imgs": {
-					"bsonType": "array",
-					"description": "商品详情页的banner图地址"
-				},
-				"remain_count": {
-					"bsonType": "int",
-					"description": "库存数量",
-					"title": "库存数量"
-				},
-				"month_sell_count": {
-					"bsonType": "int",
-					"description": "月销量"
-				},
-				"total_sell_count": {
-					"bsonType": "int",
-					"description": "总销量"
-				},
-				"comment_count": {
-					"bsonType": "int",
-					"description": "累计评论数"
-				},
-				"is_real": {
-					"bsonType": "bool",
-					"description": "是否实物",
-					"title": "是否为实物"
-				},
-				"is_on_sale": {
-					"bsonType": "bool",
-					"description": "是否上架销售",
-					"title": "是否上架"
-				},
-				"is_alone_sale": {
-					"bsonType": "bool",
-					"description": "是否能单独销售;如果不能单独销售,则只能作为某商品的配件或者赠品销售"
-				},
-				"is_best": {
-					"bsonType": "bool",
-					"description": "是否精品"
-				},
-				"is_new": {
-					"bsonType": "bool",
-					"description": "是否新品",
-					"title": "是否新品"
-				},
-				"is_hot": {
-					"bsonType": "bool",
-					"description": "是否热销"
-				},
-				"add_date": {
-					"bsonType": "timestamp",
-					"description": "上架时间",
-					"defaultValue": {
-						"$env": "now"
-					}
-				},
-				"last_modify_date": {
-					"bsonType": "timestamp",
-					"description": "最后修改时间",
-					"defaultValue": {
-						"$env": "now"
-					}
-				},
-				"seller_note": {
-					"bsonType": "string",
-					"description": "商家备注,仅商家可见",
-					"permission": {
-						"read": false
-					}
-				},
-				"shop_name": {
-					"bsonType": "string",
-					"description": "店铺名"
-				},
-				"tag": {
-					"bsonType": "array",
-					"description": "商品标签"
-				},
-				"goods_tip": {
-					"bsonType": "string",
-					"description": "店铺标签"
-				}
-			}
-		}
-	}
-}

Einige Dateien werden nicht angezeigt, da zu viele Dateien in diesem Diff geändert wurden.