468 Commits
Author SHA1 Message Date
dzc 4f3b7ba3b4 feat:聊天后台撤回消息
fix:聊天禁用bug
2026-11-03 19:09:18 +08:00
dzc 107946c964 111 2026-07-31 20:40:19 +08:00
dzc 2191e6e4cf 111 2026-07-31 13:56:18 +08:00
dzc 25a3dba931 fix:bug修改 2026-07-30 20:20:24 +08:00
dzc 3184608d99 feat:用户6位编号 2026-07-30 11:43:04 +08:00
dzc cf96d48a38 11 2026-07-15 20:20:05 +08:00
dzc 8ad36b1d57 feat:H5状态栏适配 2026-07-06 13:16:03 +08:00
dzc 3317d463a1 11 2026-07-06 11:41:02 +08:00
dzc a1f0aea6ec feat:聊天 2026-07-06 11:39:03 +08:00
dzc dbba622cb4 111 2026-06-29 18:44:06 +08:00
dzc 176d11125a feat:支付宝支付 2026-05-21 17:26:36 +08:00
dzc 02dfa5c90a 11 2026-04-16 16:51:32 +08:00
dzc afe4de0528 feat:客服更新 2026-03-27 11:28:20 +08:00
dzc b3205d20db 11 2026-03-27 09:40:51 +08:00
dzc 0c1a9e8620 feat:第二版ppt修改 2026-01-13 10:47:02 +08:00
dzc 2250f22672 fix:版本号,我看过滑动 2026-01-08 17:30:08 +08:00
dzc cdf1013eba feat:聊天推送问题 2026-01-08 16:02:15 +08:00
dzc 8d8caa98d6 feat:个人中心ui修改 2026-01-08 15:08:37 +08:00
dzc fcf18ec1b7 feat:测试出来的bug 2026-01-08 09:53:56 +08:00
dzc e52882238c fix:女生认证 2026-01-07 16:06:22 +08:00
dzc 55bc87855b feat:bug修改 2026-01-07 14:38:47 +08:00
dzc 54fd7e4216 feat:评价 2026-01-06 16:04:55 +08:00
dzc 67d558d6a6 feat:bug修改 2026-01-06 14:36:29 +08:00
dzc afd84e06e7 feat:修改bug 2026-01-06 11:41:57 +08:00
dzc a9d66d4f4a feat:bug修改 2026-01-05 16:17:18 +08:00
dzc fe226a8cb5 feat:礼物提现 2026-01-04 17:21:08 +08:00
dzc f157e521e1 feat:转账 2025-12-31 17:20:36 +08:00
dzc a280a3a396 feat:微信号错误审核 2025-12-26 17:29:08 +08:00
dzc 3a6b2da1dc fix:bug 2025-12-26 12:54:58 +08:00
dzc ad40673da4 feat:bug修改 2025-12-26 11:08:40 +08:00
dzc 2615650564 feat:vip续费 2025-12-15 15:52:56 +08:00
dzc 00a7a4815a Merge branch 'master' of https://gitea.zianxin.com/zax/Friendship-and-chat-uniapp
# Conflicts:
#	src/pages/profile/recharge-record.vue
#	src/pages/tabbar/profile.vue
2025-12-15 15:40:46 +08:00
dzc 656afd520e feat:查看微信大修改
feat:增加开通会员记录
2025-12-15 15:40:00 +08:00
ctw cf8a994fec 2025-12-13 18:37:44 +08:00
ctw ea914f44ac feat:位置设置 2025-12-13 18:33:25 +08:00
ctw f3b441789f Merge branch 'master' of https://gitea.zianxin.com/zax/Friendship-and-chat-uniapp 2025-12-12 18:45:58 +08:00
ctw dfbc79f3ed feat:认证步骤 2025-12-12 18:45:52 +08:00
dzc d7550e48b0 feat:微信审核 2025-12-12 17:11:14 +08:00
dzc 16aa24fbc1 feat:充值记录 2025-12-12 17:06:08 +08:00
dzc 626a20228a Merge branch 'master' of https://gitea.zianxin.com/zax/Friendship-and-chat-uniapp
# Conflicts:
#	src/pages/profile/apply-vip.vue
2025-12-12 16:55:45 +08:00
dzc b7653d9d71 feat:微信适配支付页面 2025-12-12 16:55:01 +08:00
ctw f179f6ab43 feat:会员协议和协议的显示 2025-12-12 16:40:04 +08:00
ctw 5bc4660b93 Merge branch 'master' of https://gitea.zianxin.com/zax/Friendship-and-chat-uniapp 2025-12-12 15:30:29 +08:00
ctw 2f019e5f30 feat:认证提示弹窗 2025-12-12 15:30:23 +08:00
dzc 940b2fec2d feat:微信小程序短链 2025-12-12 15:22:19 +08:00
dzc 5f8be90582 feat:邮箱 2025-12-12 14:13:48 +08:00
dzc 3ae3a5249e feat:登录 2025-12-12 13:55:54 +08:00
dzc ad50f32ea2 Merge branch 'master' of https://gitea.zianxin.com/zax/Friendship-and-chat-uniapp 2025-12-12 13:02:41 +08:00
dzc 1a63f6ae60 feat:微信小程序适配 2025-12-12 13:02:37 +08:00
ctw 566306230a Merge branch 'master' of https://gitea.zianxin.com/zax/Friendship-and-chat-uniapp 2025-12-12 12:23:35 +08:00
ctw bf21dd4782 feat:用户详情权限 2025-12-12 12:23:29 +08:00
dzc c2a495cfbe feat:登录页面 2025-12-12 10:54:35 +08:00
dzc c252f8481d feat:回显微信 2025-12-12 10:21:04 +08:00
ctw 4a712b155c 1 2025-12-12 09:36:21 +08:00
ctw a16d980e59 feat:新人图片模糊 2025-12-11 19:00:14 +08:00
ctw 9cd9919abd Merge branch 'master' of https://gitea.zianxin.com/zax/Friendship-and-chat-uniapp 2025-12-11 16:13:49 +08:00
ctw a225bae035 fixed:发布动态;相册回显 2025-12-11 16:06:02 +08:00
dzc 3ab7c12332 feat:把图片放到oss上 2025-12-11 15:13:07 +08:00
dzc 707e13562a Merge branch 'master' of https://gitea.zianxin.com/zax/Friendship-and-chat-uniapp 2025-12-11 13:02:06 +08:00
dzc c554c4e7c3 feat:会员动态配置 2025-12-11 13:02:03 +08:00
ctw ae5e3e900f Merge branch 'master' of https://gitea.zianxin.com/zax/Friendship-and-chat-uniapp 2025-12-11 11:51:38 +08:00
ctw ab97edab5c feat:修改已知内容 2025-12-11 11:49:57 +08:00
dzc 3829bc3ddb feat:我的收益不能跳转的问题 2025-12-11 11:36:17 +08:00
dzc 184ba62d6f feat:支付 2025-12-11 11:19:48 +08:00
dzc 056594e809 Merge branch 'master' of https://gitea.zianxin.com/zax/Friendship-and-chat-uniapp
# Conflicts:
#	src/pages/profile/recharge.vue
2025-12-10 18:07:29 +08:00
dzc da93fe0695 1 2025-12-10 18:06:07 +08:00
ctw 23eda9c505 feat:首页隐身条件;位置权限 2025-12-10 16:39:57 +08:00
ctw 4e9de1454e fix:修改小程序的条件编译 2025-12-10 11:18:58 +08:00
ctw 67e3d856ab 1 2025-12-10 11:04:57 +08:00
dzc 63c83ad416 Merge branch 'master' of https://gitea.zianxin.com/zax/Friendship-and-chat-uniapp
# Conflicts:
#	src/App.vue
2025-12-10 10:03:25 +08:00
dzc 89ea6ff14d 11 2025-12-10 10:03:08 +08:00
ctw 500e01ad20 1 2025-12-10 10:01:45 +08:00
ctw ced588e021 Merge branch 'master' of https://gitea.zianxin.com/zax/Friendship-and-chat-uniapp 2025-12-10 09:48:27 +08:00
ctw 384b190d8f 1 2025-12-10 09:48:21 +08:00
dzc 8163980aa9 feat:11 2025-12-10 09:34:33 +08:00
dzc 1e93c02910 11 2025-12-10 09:11:53 +08:00
dzc 85dac36de1 Merge branch 'master' of https://gitea.zianxin.com/zax/Friendship-and-chat-uniapp 2025-12-09 17:13:23 +08:00
dzc 7d6007914d 1 2025-12-09 17:13:20 +08:00
ctw 24202cd2f1 feat:调整目录结构 2025-12-09 17:12:10 +08:00
ctw 48954225b5 Merge branch 'master' of https://gitea.zianxin.com/zax/Friendship-and-chat-uniapp 2025-12-09 16:37:48 +08:00
ctw 1cad4d5b87 feat 2025-12-09 16:36:37 +08:00
dzc aa9c36a00e 11 2025-12-09 16:34:59 +08:00
dzc c3a32a8e58 feat:适配小程序 2025-12-09 16:27:29 +08:00
ctw 05f921349a feat:修复点赞和喜欢数;注册完善资料步骤;女生人脸认证步骤修复 2025-12-09 11:50:38 +08:00
ctw 0be6d590e4 feat:邀请福利;特权文本修改;用户列表显示相册总数;动态页顶部轮播图;logo; 2025-12-08 17:09:09 +08:00
ctw 497f31a66c Merge branch 'master' of https://gitea.zianxin.com/zax/Friendship-and-chat-uniapp 2025-12-08 14:05:31 +08:00
ctw 338f5b524f feat:解锁微信信息;vip判断 2025-12-08 14:05:24 +08:00
dzc 2b7ac06c69 feat:兑换比例配置 2025-12-08 13:21:42 +08:00
dzc 630bf8518c Merge branch 'master' of https://gitea.zianxin.com/zax/Friendship-and-chat-uniapp 2025-12-08 13:17:30 +08:00
dzc be80fd2b4b feat:礼物 2025-12-08 13:17:26 +08:00
ctw 603f72008c feat:用户举报提交 2025-12-08 11:26:57 +08:00
ctw 001a545633 Merge branch 'master' of https://gitea.zianxin.com/zax/Friendship-and-chat-uniapp 2025-12-08 09:54:58 +08:00
ctw b81e471e5a feat:下载官网 2025-12-08 09:54:51 +08:00
dzc ac4e65c60c Merge branch 'master' of https://gitea.zianxin.com/zax/Friendship-and-chat-uniapp 2025-12-05 15:48:02 +08:00
dzc f6fa62b913 feat:我的团队 2025-12-05 15:47:58 +08:00
ctw 254cdb0646 Merge branch 'master' of https://gitea.zianxin.com/zax/Friendship-and-chat-uniapp 2025-12-05 14:44:23 +08:00
ctw d8d90b934f feat:黑名单;app下载 2025-12-05 14:44:17 +08:00
dzc c87df798e8 流水记录 2025-12-05 14:26:34 +08:00
dzc e982f33804 feat:后台功能 2025-12-05 13:40:07 +08:00
dzc 645078186b Merge branch 'master' of https://gitea.zianxin.com/zax/Friendship-and-chat-uniapp 2025-12-05 10:17:18 +08:00
dzc b77471d4ce 11 2025-12-05 10:17:14 +08:00
ctw 1b0547ccca feat:充值历史记录;访客记录项;短信验证码计时;认证步骤项校验 2025-12-04 17:53:23 +08:00
dzc 50bca31432 feat:预览bug 2025-12-04 16:25:01 +08:00
dzc d2cc1e3d3d Merge branch 'master' of https://gitea.zianxin.com/zax/Friendship-and-chat-uniapp 2025-12-04 15:29:48 +08:00
dzc e688937e0d 1 2025-12-04 15:29:44 +08:00
ctw 408327bffd Merge branch 'master' of https://gitea.zianxin.com/zax/Friendship-and-chat-uniapp 2025-12-04 15:00:20 +08:00
ctw afa79d085e feat:添加用户详情页面的查看和访问记录 2025-12-04 15:00:14 +08:00
dzc f057fac4fb Merge branch 'master' of https://gitea.zianxin.com/zax/Friendship-and-chat-uniapp 2025-12-04 11:57:49 +08:00
dzc 4d50648ad0 feat:分销 2025-12-04 11:57:42 +08:00
ctw 8b1c50e7fc feat:访客记录 2025-12-04 11:47:53 +08:00
ctw aeafc90ddc fix:修复一些已知错误 2025-12-04 10:44:45 +08:00
ctw 221876ae89 Merge branch 'master' of https://gitea.zianxin.com/zax/Friendship-and-chat-uniapp 2025-12-03 18:27:16 +08:00
ctw cf810bc44a feat:人脸认证状态 2025-12-03 18:27:11 +08:00
dzc 8e8175d8f1 Merge branch 'master' of https://gitea.zianxin.com/zax/Friendship-and-chat-uniapp 2025-12-03 18:17:58 +08:00
dzc d28f377bb7 11 2025-12-03 18:17:54 +08:00
ctw 77e7b6fd49 Merge branch 'master' of https://gitea.zianxin.com/zax/Friendship-and-chat-uniapp 2025-12-03 17:41:12 +08:00
ctw ac71e58810 feat:人脸认证相关 2025-12-03 17:41:07 +08:00
dzc b5376f0981 11 2025-12-03 16:38:32 +08:00
dzc 40af8bef5e Merge branch 'master' of https://gitea.zianxin.com/zax/Friendship-and-chat-uniapp 2025-12-03 14:37:51 +08:00
dzc 7da3134e79 111 2025-12-03 14:37:48 +08:00
ctw 7f7175aa24 Merge branch 'master' of https://gitea.zianxin.com/zax/Friendship-and-chat-uniapp 2025-12-03 14:20:43 +08:00
ctw ea38fe7cce feat:人脸识别 2025-12-03 14:20:37 +08:00
dzc b587ab476e feat:邀请福利 2025-12-03 14:05:47 +08:00
dzc e85a8ca368 11 2025-12-03 12:08:05 +08:00
dzc cb24574e41 11 2025-12-03 11:49:37 +08:00
ctw 9d437cecb6 feat:人脸认证;用户评分;修复聊天文件发送按钮webview层级问题 2025-12-03 11:21:04 +08:00
dzc 9d2286f056 feat:认证 2025-12-03 10:50:39 +08:00
ctw 0487088101 2025-12-02 17:05:27 +08:00
ctw f07a41e5cc feat:人脸认证页 2025-12-02 17:01:03 +08:00
ctw ec07bc5804 feat:用户详情 2025-12-02 15:44:35 +08:00
ctw 6c78e14257 feat:我的动态;我的评价 2025-12-02 15:25:19 +08:00
ctw 55a222e2d6 feat:性别选择 2025-12-02 11:28:28 +08:00
ctw 1d63bc414b Merge branch 'master' of https://gitea.zianxin.com/zax/Friendship-and-chat-uniapp 2025-12-02 09:19:38 +08:00
ctw 443c569eec feat:礼物消息 2025-12-02 09:19:32 +08:00
dzc 867fb1dadb Merge branch 'master' of https://gitea.zianxin.com/zax/Friendship-and-chat-uniapp 2025-12-02 09:13:23 +08:00
dzc c902021303 11 2025-12-02 09:13:20 +08:00
ctw 1789a7045a feat:聊天赠送礼物;调色 2025-12-01 19:19:41 +08:00
ctw 18d42d3e05 feat:修复朋友圈详情页刷新;修复私聊;朋友圈操作 2025-12-01 11:52:58 +08:00
ctw 4fc92459a0 feat:设置微信;人脸识别页;相册上传修改;样式小调整 2025-11-29 14:50:42 +08:00
ctw 158d012eff feat:引入人脸识别sdk 2025-11-29 01:17:29 +08:00
ctw ce16eaf82e feat:app设置 2025-11-28 17:41:54 +08:00
ctw f4f77434e1 feat:宝石充值;喜欢统计; 2025-11-28 17:02:30 +08:00
ctw 03fd985d20 feat:列表轮播;显示修改;用户协议;隐私政策;关于页; 2025-11-28 09:25:16 +08:00
ctw 7267cf93c9 feat:替换各个列表接口参数;登录注册合并;发布动态添加视频;分段控件修改 2025-11-27 18:45:59 +08:00
ctw 298bc6babe feat:朋友页 2025-11-26 16:23:18 +08:00
ctw 1a30a4d497 feat:聊天界面适配 2025-11-26 15:42:47 +08:00
ctw b57bd5cb65 feat:聊天界面 2025-11-26 11:45:44 +08:00
ctw 3aaa1cb425 feat:聊天页面代码移植 2025-11-25 16:52:10 +08:00
ctw 6d26839aee feat:聊天im替换 2025-11-25 12:11:55 +08:00
ctw 18fdcafd39 fix:相册文件上传修改 2025-11-24 19:04:01 +08:00
ctw 2d4e7db772 feat:问题反馈页 2025-11-24 14:19:31 +08:00
ctw 46ba18a899 feat:wfc插件条件编译 2025-11-24 11:32:34 +08:00
ctw 8ad037a007 feat:IM插件注册初始化 2025-11-24 10:55:09 +08:00
ctw f85c71cb0a feat:引入wfc即时通讯IM plugin 2025-11-21 17:32:22 +08:00
ctw 18f3b76cf2 feat:相册上传;开通VIP 2025-11-21 15:59:36 +08:00
ctw 1f4a52807c feat:我的动态;我的评价;访客记录;朋友圈操作;上传相册;我的相册;列表和导航按钮调整;朋友圈卡片;用户卡片;查询朋友圈详情;关注公众号帘幕 2025-11-21 10:47:17 +08:00
ctw 7bc0b920f6 feat:我的喜欢页 2025-11-20 18:12:09 +08:00
ctw c5b100189a feat:发布朋友圈选择地址 2025-11-20 11:23:43 +08:00
ctw c9ffaa6678 feat:个人信息页;动态页;基本消息页 2025-11-19 17:28:05 +08:00
ctw 5096c67d58 feat:添加uni-ui;页面适配;切换城市;查看朋友圈列表 2025-11-19 11:24:49 +08:00
ctw 904b8b7110 feat:添加组件库 2025-11-18 16:16:37 +08:00
ctw b620d5c71d feat:收藏页;发布朋友圈;暗色主题调整 2025-11-17 17:57:18 +08:00
ctw 36947f692d feat:发布动态页面;部分样式修改 2025-11-17 11:49:30 +08:00
ctw d72817b8ea feat:城市选择;首页广场 2025-11-14 18:02:08 +08:00
ctw 7df0107dbf feat:修改个人资料页 2025-11-13 18:51:24 +08:00
ctw a7801d122e feat:unocss配置 2025-11-13 14:12:10 +08:00
ctw ed8663e5b3 feat:登录页;个人信息编辑页 2025-11-12 19:05:37 +08:00
ctw a73e9c741a fix:组件类型调整 2025-11-12 10:05:42 +08:00
ctw 6f92eedbbf chore:整理 2025-11-11 21:58:44 +08:00
ctw af0949c009 feat 2025-11-10 17:19:14 +08:00
ctw 7535908735 feat 2025-11-06 18:56:11 +08:00
weiwei d8c1ca9445 feat:调整文件目录结构;列表滚动 2025-10-27 17:08:30 +08:00
weiwei 568035dee7 feat:列表滚动加载 2025-10-24 18:24:07 +08:00
weiwei 2383f67f98 feat:样式变量替换 2025-10-23 21:57:08 +08:00
weiwei aea364eca4 feat:tabbar页面 2025-10-23 19:44:55 +08:00
weiwei ca0565f720 feat:添加组件类型提示;搭建基础tabbar 2025-10-22 19:31:06 +08:00
weiwei 89bb99392d refactor:调整目录结构 2025-10-22 18:35:14 +08:00
yangmf_0726 6e6b75c93a feat:样式更改 2025-10-17 15:54:33 +08:00
yangmf_0726 2ad5cd2f3b feat:更改一些样式 2025-10-17 14:02:42 +08:00
yangmf_0726 f01078183a feat:更改静态文件地址 2025-10-13 16:14:16 +08:00
dzc 0b47c9efc8 feat:对接快递100 2025-10-11 16:31:40 +08:00
yangmf_0726 4cca47347e feat:添加分销模块 2025-08-21 15:29:59 +08:00
yangmf_0726 fad4e4dd7a 更改微信id 2025-08-21 14:08:34 +08:00
yangmf_0726 8fdaca1b4e 11 2025-08-18 16:09:58 +08:00
jiangzewen ff1eec09f6 11 2025-06-11 08:27:38 +08:00
jiangzewen f0fc06a59d 11 2025-04-10 09:21:43 +08:00
芋道源码 f9e30d1fbc !143 修复支付宝app支付功能正常,补充微信app支付逻辑实现功能待测试
Merge pull request !143 from huppygo/master
2025-03-15 14:22:31 +00:00
huppygo e02db4339e update sheep/platform/pay.js.
Signed-off-by: huppygo <huppygo@qq.com>
2025-02-12 01:23:31 +00:00
huppygo 0c88f6c2af update sheep/platform/pay.js.
Signed-off-by: huppygo <huppygo@qq.com>
2025-02-11 16:00:36 +00:00
YunaiV d91d8eb2db V2.4.1 发布~ 2025-02-09 12:41:51 +08:00
YunaiV 3c403c424a Merge branch 'develop' of https://gitee.com/yudaocode/yudao-mall-uniapp 2025-01-24 20:19:33 +08:00
芋道源码 730025128a !135 fix 了一些问题
Merge pull request !135 from puhui999/dev
2025-01-23 04:30:59 +00:00
puhui999 5275b64e60 【缺陷修复】商城主题对齐后端。修复主题切换不生效的问题。 2025-01-22 17:32:45 +08:00
puhui999 ca85a34e49 【功能完善】分销团队佣金分转元 2025-01-22 11:48:01 +08:00
puhui999 d46cfd3943 【功能完善】TabBar 角标完善 2025-01-22 10:56:33 +08:00
puhui999 a382a1a876 【缺陷修复】decryptSpm 移除 activity_id 解析,统一为 id 2025-01-22 10:19:42 +08:00
puhui999 7fc548e161 【升级】mp-html from 2.4.1 to 2.5.0 2025-01-20 17:58:34 +08:00
YunaiV ea28ca6875 【功能修复】App.vue 延迟 200 毫秒,避免 {errMsg: 'hideTabBar:fail not TabBar page'}(来自 cursor 修复建议) 2025-01-19 08:25:15 +08:00
芋道源码 11e83df02f !134 缺陷修复
Merge pull request !134 from puhui999/dev
2025-01-17 12:19:26 +00:00
puhui999 039f05ce23 【代码优化】特殊:处理分销用户绑定失败的提示 2025-01-10 16:20:58 +08:00
puhui999 c1f2117e48 【代码优化】分销邀请 2025-01-09 15:37:18 +08:00
puhui999 5cc6d99891 【代码优化】分享优化 2025-01-09 15:14:46 +08:00
puhui999 a2ba10f796 【缺陷修复】su-tabbar-item 选中或未选中标签属性名称和父组件 su-tabbar 保持一致 2025-01-07 17:21:34 +08:00
puhui999 9ce6e63ee9 【缺陷修复】绑定推广员 2025-01-07 16:43:15 +08:00
puhui999 94f8883bd8 【缺陷修复】分享信息覆盖了海报信息导致小程序码获取失败的问题 2025-01-07 16:30:07 +08:00
puhui999 53899380c3 【缺陷修复】s-layout 组件中使用 onMounted 监听页面加载,解决 H5 中分享信息获取失败的问题 2025-01-07 16:08:57 +08:00
YunaiV bc0e731fc3 【功能修复】商品分类界面,有 categoryId 匹配不对的问题 2025-01-04 09:10:58 +08:00
YunaiV 515b8bb00f 【功能修复】申请售后的图片从 images 修复为 applyPicUrls 2025-01-04 09:00:52 +08:00
YunaiV 9f7015090d 【功能修复】s-layout 部分属性缺失时,首页无法展示的问题 2025-01-04 08:53:55 +08:00
芋道源码 139ec62e9a !133 fix bug category里右侧列表到底刷新功能
Merge pull request !133 from 壁虎在家/master
2025-01-04 00:42:19 +00:00
18602180658 4b9ef94741 fix bug: 子组件内不应该用页面的onReachBottom。导致小程序下无效 2025-01-01 02:25:48 +08:00
YunaiV 46ba5e6aef V2.4.0 发布~ 2024-12-31 12:45:10 +08:00
芋道源码 75d0b004dc !131 【缺陷修复】购物车提交的校验、bgStyle 样式
Merge pull request !131 from puhui999/dev
2024-12-19 12:39:47 +00:00
puhui999 52cfca1ca1 【缺陷修复】s-layout bgStyle 样式 2024-12-19 16:23:35 +08:00
puhui999 34be99fccb 【缺陷修复】购物车提交时的配送方式校验 2024-12-19 15:45:32 +08:00
YunaiV 164589f634 【代码评审】购物车提交的校验、bgStyle 样式 2024-12-11 13:08:55 +08:00
芋道源码 39869cd92d !129 【缺陷修复】购物车提交前校验
Merge pull request !129 from puhui999/dev
2024-12-11 05:01:19 +00:00
puhui999 a863300ae3 【缺陷修复】s-layout bgStyle 样式对齐 2024-12-09 15:05:44 +08:00
puhui999 8ac9f2714f 【缺陷修复】购物车同时结算两个商品,一个仅支持门店自提,一个仅支持快递发货,就会无法结算 2024-12-09 11:57:00 +08:00
芋道源码 dcd63dd54e !128 【缺陷修复】
Merge pull request !128 from puhui999/dev
2024-12-07 02:16:23 +00:00
puhui999 25fc972833 【缺陷修复】自己查看自己的分享时移除 shareId 2024-12-06 15:10:14 +08:00
puhui999 cde0de43ff 【缺陷修复】分销订单查询状态携带 2024-12-06 15:05:14 +08:00
puhui999 bfde5df0cd 【缺陷修复】异步绑定推广员失败的问题 2024-12-06 14:37:41 +08:00
puhui999 b92bf484df 【缺陷修复】商城装修: 顶部导航栏-文字链接支持 2024-12-06 11:26:53 +08:00
puhui999 1b02d0cefa Merge remote-tracking branch 'yudao/develop' into dev 2024-12-05 17:50:53 +08:00
puhui999 b24af1f71f 【缺陷修复】商城装修: TitleBar 样式同步 2024-12-05 15:38:40 +08:00
YunaiV 951a52d37b 【代码评审】积分界面 2024-12-01 18:19:12 +08:00
芋道源码 9616e660a6 !126 分享相关完善
Merge pull request !126 from puhui999/master
2024-12-01 08:58:39 +00:00
YunaiV da81f6df7d 【功能完善】商城:优化分销的界面 2024-12-01 16:57:54 +08:00
puhui999 c48951df8c 【功能修复】收款码上传问题 2024-11-29 15:52:41 +08:00
puhui999 1407350bf7 【功能完善】商品评论上传图片 2024-11-29 15:43:05 +08:00
puhui999 4c4134389e 【功能完善】小程序支持转发到朋友圈 2024-11-29 12:44:42 +08:00
puhui999 f98b1a2bea 【功能完善】小程序 forward 转发 2024-11-29 12:21:31 +08:00
puhui999 1ff8890d58 【功能完善】分享赚分享 2024-11-29 11:10:37 +08:00
puhui999 7be216ea4b 【功能完善】秒杀活动分享 2024-11-29 10:45:58 +08:00
puhui999 530410fcf0 【功能完善】积分商城分享 2024-11-29 10:29:31 +08:00
YunaiV 29a5024468 Merge branch 'develop' of https://gitee.com/yudaocode/yudao-mall-uniapp
# Conflicts:
#	pages/activity/point/list.vue
2024-11-25 20:37:32 +08:00
YunaiV cb8431fbd4 Merge remote-tracking branch 'origin/develop' into develop 2024-11-20 09:18:57 +08:00
YunaiV 6900eb1909 【功能完善】商城:售后退货,已经完成 2024-11-20 09:18:50 +08:00
芋道源码 7793a69b9d !125 【功能完善】商城客服
Merge pull request !125 from puhui999/master
2024-11-19 01:12:35 +00:00
puhui999 7017561242 Merge remote-tracking branch 'yudao/develop' 2024-11-18 17:32:38 +08:00
puhui999 0cdaaac0ed 【功能完善】商城:客服消息查询 pageSize 改 limit 2024-11-18 17:19:24 +08:00
puhui999 18aa26dcae 【功能完善】商城:客服消息样式调整 2024-11-18 16:54:55 +08:00
YunaiV 87c6e967f2 【功能完善】商城:客服消息改为游标查询,消息 JSON 化 2024-11-10 18:53:26 +08:00
YunaiV 01c2dfa30d Merge branch 'develop' of https://gitee.com/yudaocode/yudao-mall-uniapp into develop 2024-11-10 18:50:46 +08:00
YunaiV 1978484071 Merge branch 'master' of https://gitee.com/yudaocode/yudao-mall-uniapp 2024-11-10 18:50:11 +08:00
芋道源码 68680d0d0e !124 【功能完善】商城:客服消息改为游标查询,消息 JSON 化
Merge pull request !124 from puhui999/master
2024-11-10 10:49:46 +00:00
puhui999 92e89bae34 Merge remote-tracking branch 'refs/remotes/yudao/develop' 2024-11-10 18:11:58 +08:00
puhui999 94e0dd4f5d 【功能完善】商城:客服消息改为游标查询,消息 JSON 化 2024-11-10 17:56:58 +08:00
芋道源码 9a225c6ba5 !123 【功能修复】修复分佣商品界面预计佣金一直显示“计算中”的问题;
Merge pull request !123 from 卢越/master
2024-11-09 12:55:34 +00:00
卢越 6c80e36508 【功能修复】修复分佣商品界面预计佣金一直显示“计算中”的问题; 2024-11-07 17:00:56 +08:00
芋道源码 cf88789eef !119 修复在first_two模式的分类页面里商品名字无法显示的问题
Merge pull request !119 from 杨宇庆/N/A
2024-11-01 12:47:56 +00:00
芋道源码 98b3f1fc67 !118 pageNo: state.pagination.pageSize,改为 pageNo: state.pagination.pageNo,
Merge pull request !118 from yuannuoxin/N/A
2024-11-01 12:46:26 +00:00
芋道源码 a09e171bf7 !117 【轻量级 PR】:【修复】 积分商城:商品列表加载更多异常
Merge pull request !117 from Super Junior/fix_loadmore
2024-11-01 12:44:57 +00:00
杨宇庆 5ee9c18f4c fix: 修复在first_two模式的分类页面里商品名字无法显示的问题
Signed-off-by: 杨宇庆 <hiyyq@qq.com>
2024-11-01 07:11:58 +00:00
yuannuoxin b8132062ea pageNo: state.pagination.pageSize,改为 pageNo: state.pagination.pageNo,
Signed-off-by: yuannuoxin <3339694043@qq.com>
2024-10-30 05:06:09 +00:00
= 35c143039c Fix: 积分商城:商品列表加载更多异常 2024-10-28 20:25:50 +08:00
芋道源码 f94df74591 !116 【功能修复】修复真机环境下的图片上传问题
Merge pull request !116 from 卢越/master
2024-10-28 11:14:29 +00:00
卢越 e9b9ac1f7a 【功能修复】修复真机环境下的图片上传问题 2024-10-28 17:04:57 +08:00
YunaiV d916fe5c80 README 更新:单体、微服务的地址 2024-10-28 09:59:47 +08:00
YunaiV 315b5b852d README 更新:单体、微服务的地址 2024-10-28 09:58:22 +08:00
YunaiV 0213a4b88a 【功能修复】领取优惠劵在 validityType = 1 时(固定日期),展示不正确的问题 2024-10-27 20:23:29 +08:00
YunaiV 4bdc82786e 【功能修复】s-title-block 的 fontWeight 多加了 px 像素 2024-10-27 18:22:47 +08:00
YunaiV f36b183407 【功能优化】签到的样式 2024-10-27 18:17:36 +08:00
芋道源码 113aead37b !113 【优化】当原价高于售价时,才显示划线价格
Merge pull request !113 from 杨宇庆/N/A
2024-10-27 08:34:33 +00:00
芋道源码 90b6ae7d40 !114 【修复】当无优惠价格时,商品无法显示的问题
Merge pull request !114 from 杨宇庆/N/A
2024-10-27 08:34:04 +00:00
杨宇庆 959fe83d72 【修复】当无优惠价格时,商品无法显示的问题
Signed-off-by: 杨宇庆 <hiyyq@qq.com>
2024-10-16 16:51:52 +00:00
杨宇庆 f784d411b6 【优化】当原价高于售价时,才显示划线价格
Signed-off-by: 杨宇庆 <hiyyq@qq.com>
2024-10-16 16:39:30 +00:00
YunaiV c8f9043869 【功能修复】积分商城,商品不支持下拉展示更多 2024-10-13 21:41:25 +08:00
YunaiV 789ec69933 【功能优化】订单确认页,增加按照顺序自动选择物流方式,替代原有只选择“快递配送”的方式 2024-10-13 21:30:14 +08:00
YunaiV 4dd6e82309 Merge branch 'master' of https://gitee.com/yudaocode/yudao-mall-uniapp into develop 2024-10-13 21:08:13 +08:00
芋道源码 3051aed6b2 !112 【优化】1.分销中心用户卡片样式没有居中问题 2.推广排行榜周排行、月排行切换样式留白问题
Merge pull request !112 from FN/FIX-FN-241013
2024-10-13 13:07:55 +00:00
FN 8e50c5da49 【优化】1.分销中心用户卡片样式没有居中问题 2.推广排行榜周排行、月排行切换样式留白问题 2024-10-13 14:55:58 +08:00
YunaiV fd10210972 【新增功能】添加微信转账到零钱提现功能 2024-10-13 12:42:08 +08:00
芋道源码 c399bb2373 !109 【新增功能】添加微信转账到零钱提现功能
Merge pull request !109 from 痴货/jh-wxzz
2024-10-13 04:40:20 +00:00
YunaiV 9451092335 【修复】部分界面的 pageSize = 1,导致无法上啦刷新 2024-10-12 20:23:26 +08:00
YunaiV fd33176222 Merge branch 'develop' of https://gitee.com/yudaocode/yudao-mall-uniapp 2024-10-12 20:22:46 +08:00
芋道源码 290ee5db04 !110 【修改BUG】修改分销记录只显示1条记录的问题
Merge pull request !110 from 痴货/jh-bug
2024-10-12 12:16:13 +00:00
痴货 07b630601a 【功能完善】积分商城:修改每页显示商品数量 2024-10-08 21:37:08 +08:00
痴货 b59c41c5f8 【功能优化】增加转账回调接口 2024-10-08 21:30:46 +08:00
痴货 a4ec421412 微信支付未完成 2024-10-08 21:30:37 +08:00
YunaiV 0961aa610b 【版本发布】2.3.0 发布~ 2024-10-07 15:28:12 +08:00
YunaiV 545d4259c4 Merge branch 'develop' of https://gitee.com/yudaocode/yudao-mall-uniapp 2024-10-07 15:23:47 +08:00
YunaiV 1ffa754dbe 【功能完善】纯积分兑换时,直接跳转到订单详情 2024-10-04 19:17:40 +08:00
芋道源码 96d86f237d !108 【功能完善】商城: 积分商城
Merge pull request !108 from puhui999/master
2024-10-04 10:38:03 +00:00
puhui999 8e64ecebd1 Merge remote-tracking branch 'yudao/develop' 2024-10-04 14:00:11 +08:00
puhui999 98f912f113 【功能完善】积分商城:完善订单相关信息展示 2024-10-04 13:58:41 +08:00
puhui999 732aa7686c 【功能完善】积分商城:完善订单相关信息展示 2024-10-04 13:30:08 +08:00
puhui999 b2e40e7011 【功能完善】积分商城:完善订单相关信息展示 2024-10-04 12:36:18 +08:00
puhui999 d7a18f9c01 【功能完善】积分商城:完善积分+价格显示样式 2024-10-02 15:40:09 +08:00
puhui999 c5307513cc 【功能完善】积分商城:完善积分+价格显示样式 2024-10-02 15:02:22 +08:00
芋道源码 a5d073e798 !107 【功能完善】商城: 完善积分商城
Merge pull request !107 from puhui999/master
2024-10-02 07:00:43 +00:00
puhui999 9639c2f270 【功能完善】积分商城:完善积分+价格显示样式 2024-10-02 14:56:21 +08:00
puhui999 cf6b26e565 Merge remote-tracking branch 'yudao/develop'
# Conflicts:
#	pages.json
#	pages/activity/point/list.vue
2024-10-02 14:55:53 +08:00
puhui999 9171275d3d 【功能完善】积分商城:完善积分+价格显示样式 2024-10-02 14:53:46 +08:00
puhui999 2a2ce2eff6 【功能完善】积分商城:完善活动详情页样式 2024-10-02 14:30:18 +08:00
YunaiV b6635a5d5c 【功能优化】WebSocket 使用 refreshToken 认证,解决无法刷新访问令牌的问题 2024-10-02 14:19:23 +08:00
puhui999 da4cd2238e 【功能完善】积分商城:完善活动列表布局切换 2024-10-02 12:15:53 +08:00
puhui999 fb3120d818 【功能完善】积分商城:完善活动列表 2024-10-02 11:46:50 +08:00
YunaiV 5f496038c5 【代码评审】商城首页的 activity name 的展示 2024-10-01 19:00:19 +08:00
芋道源码 146f9ddc88 !104 【功能优化】秒杀详情页过期活动处理
Merge pull request !104 from 卢越/master
2024-10-01 10:57:24 +00:00
芋道源码 6abad0df4d !106 【功能优化】确认收货添加提示确认,提交售后信息后直接返回到订单详情
Merge pull request !106 from Lcp/pr
2024-10-01 09:33:30 +00:00
YunaiV 47ac7d1fbc 【功能】下单页的优惠明细弹窗,不展示积分、优惠劵、会员折扣,因为它们已经单独展示了 2024-10-01 10:15:08 +08:00
YunaiV 25e4686e30 Merge branch 'develop' of https://gitee.com/yudaocode/yudao-mall-uniapp 2024-09-30 09:05:31 +08:00
Lcp b476305e30 【功能优化】确认收货添加提示确认 2024-09-29 16:44:01 +08:00
Lcp 518c898882 【功能优化】提交售后信息后直接返回到订单详情 2024-09-29 16:43:55 +08:00
YunaiV 09dc98db16 【代码评审】积分商城部分 2024-09-29 09:43:29 +08:00
芋道源码 ea98ba45ca !105 【功能完善】积分商城
Merge pull request !105 from puhui999/master
2024-09-29 01:23:47 +00:00
YunaiV 2e572639b0 【功能优化】修改 h5 的 base 是 /,解决 https://gitee.com/yudaocode/yudao-mall-uniapp/issues/IATB5V 静态资源访问的问题 2024-09-29 09:22:29 +08:00
YunaiV 4a0ea9b43c 【功能优化】文件上传,默认使用 server 模式,兼容更多存储器的类型 2024-09-28 20:25:32 +08:00
puhui999 6d762c5367 【功能完善】积分商城:完善活动详情页面 2024-09-28 16:33:26 +08:00
puhui999 2349faa1bc 【功能完善】积分商城:完善活动详情页面 2024-09-28 16:24:57 +08:00
puhui999 4cdb595a2a 【代码优化】商城装修:修复布局为单列小图时价格显示方式不正确的问题 2024-09-28 15:39:03 +08:00
puhui999 5552236952 【功能完善】积分商城: 首页活动装修显示 2024-09-28 14:43:04 +08:00
puhui999 d2f516e1ae 【功能完善】积分商城 2024-09-28 11:37:22 +08:00
卢越 cb39246850 【功能优化】拼团、秒杀组件的SPU名称使用活动的 2024-09-27 19:58:00 +08:00
卢越 18484f7ee8 【功能优化】秒杀详情页过期活动处理 2024-09-27 16:46:09 +08:00
芋道源码 2ca7f48131 !103 【功能新增】现已支持前端文件直传到OSS服务
Merge pull request !103 from 卢越/master
2024-09-26 01:24:22 +00:00
卢越 f491e87d6a 【功能优化】简化代码 2024-09-26 09:08:57 +08:00
卢越 6f8e82e6cf 【功能优化】简化代码 2024-09-25 23:16:50 +08:00
卢越 6c95891476 【功能优化】简化代码 2024-09-25 08:25:20 +08:00
卢越 76e7ed8f25 【功能优化】文件直传优化 2024-09-24 19:14:52 +08:00
卢越 f6b2eb6925 默认使用服务端上传文件 2024-09-24 17:17:18 +08:00
卢越 c23e7ac3d0 【功能新增】现已支持前端文件直传到OSS服务器 2024-09-24 17:16:38 +08:00
YunaiV ca1926a732 【功能优化】支付:查询支付订单时,增加 sync 主动轮询,解决支付宝、微信存在延迟的问题 2024-09-24 13:00:46 +08:00
YunaiV a1995c88e8 【功能优化】支付:查询支付订单时,增加 sync 主动轮询,解决支付宝、微信存在延迟的问题 2024-09-24 09:04:57 +08:00
YunaiV 27260f4a75 【功能完善】商城:支付宝 wap 的接入 2024-09-23 09:55:07 +08:00
YunaiV 0c5ef4a085 Merge branch 'master' of https://gitee.com/yudaocode/yudao-mall-uniapp into develop 2024-09-23 09:27:29 +08:00
YunaiV 3dad154ca0 【功能优化】商城:调整满减送的数据返回 2024-09-21 14:30:27 +08:00
芋道源码 e727974806 !102 【优化】优化满减提示显示
Merge pull request !102 from 痴货/develop-mall
2024-09-21 03:19:24 +00:00
痴货 ab709267be 【优化】优化满减显示 2024-09-18 18:11:54 +08:00
岳琳红 51cd8908ec 修改部分页面 2024-09-18 17:04:23 +08:00
芋道源码 56182dfbe9 !99 删除微信支付的临时测试代码
Merge pull request !99 from 杨宇庆/N/A
2024-09-17 04:11:30 +00:00
YunaiV 6b6fa0c257 【功能完善】订单确认价格时,展示具体的优惠信息 2024-09-16 19:38:48 +08:00
YunaiV ff6769001d 【功能完善】商品列表,增加满减送提示(优化) 2024-09-16 19:30:56 +08:00
YunaiV 9df0194aeb 【功能完善】商品详情,增加满减送提示 2024-09-16 18:15:13 +08:00
YunaiV b741a1d148 【功能完善】商品列表,展示满减送、限时折扣的信息 2024-09-16 09:16:16 +08:00
YunaiV f03fcf1373 Merge branch 'master' of https://gitee.com/yudaocode/yudao-mall-uniapp into develop
# Conflicts:
#	pages/goods/index.vue
#	pages/order/addressSelection.vue
#	pages/order/confirm.vue
#	sheep/components/s-goods-column/s-goods-column.vue
2024-09-16 08:24:54 +08:00
YunaiV 5a66e71809 【代码优化】差满减活动时间外,from 岳琳红 https://gitee.com/yudaocode/yudao-mall-uniapp/commit/26a18e7e9a78af4ec49f0d07785a0aead22b00cc 2024-09-16 08:18:32 +08:00
YunaiV e93322959e 【代码优化】差满减活动时间外,from 岳琳红 https://gitee.com/yudaocode/yudao-mall-uniapp/commit/26a18e7e9a78af4ec49f0d07785a0aead22b00cc 2024-09-16 08:15:54 +08:00
芋道源码 4a8a92f323 !98 【功能修复】修复拼团的单买价格
Merge pull request !98 from 卢越/master
2024-09-15 13:15:07 +00:00
芋道源码 ba56d9843f !101 批量优化或修改BUG
Merge pull request !101 from 痴货/develop-mall
2024-09-15 13:13:26 +00:00
YunaiV eb3d0ff6b0 【代码优化】商城:优化 /promotion/activity/list-by-spu-id 的逻辑 2024-09-15 17:59:42 +08:00
痴货 aa571f25f9 【功能】批量修改bug和功能 2024-09-15 17:32:29 +08:00
YunaiV 49e8b9f5c3 【功能完善】下单界面,接入门店自提的开关 2024-09-13 19:21:22 +08:00
杨宇庆 6af76a20f3 删除微信支付的临时测试代码
Signed-off-by: 杨宇庆 <hiyyq@qq.com>
2024-09-11 07:32:21 +00:00
芋道源码 55131bf0c3 !97 【功能优化】支付方式默认选中首个可用方式
Merge pull request !97 from Lcp/pr
2024-09-09 14:58:32 +00:00
卢越 f3c7387650 Merge remote-tracking branch 'origin/master' 2024-09-09 22:46:34 +08:00
卢越 b2d030f96b 【功能修复】修复拼团的单买价格 2024-09-09 22:46:24 +08:00
Lcp 97711bad3e 【功能优化】支付方式默认选中首个可用方式 2024-09-09 15:16:29 +08:00
YunaiV 29584a108b 【功能修复】秒杀装修重构 2024-09-09 09:22:06 +08:00
芋道源码 1432ec5996 !96 【功能修复】优惠券相关问题修正
Merge pull request !96 from 卢越/master
2024-09-09 01:21:15 +00:00
卢越 9521d4b557 【功能修复】秒杀装修重构 2024-09-08 11:39:28 +08:00
卢越 27af994667 【功能修复】修正订单优惠券选择列表中,可用和不可用优惠券的颜色 2024-09-08 10:27:46 +08:00
卢越 dbc192faa7 【功能修复】修正“暂无可用优惠券”字体颜色 2024-09-08 10:06:15 +08:00
卢越 5f8ed35521 【功能修复】订单确认页的可用优惠券数量统计 2024-09-08 09:56:21 +08:00
卢越 b42c151585 【功能修复】订单确认页的可用优惠券数量统计 2024-09-08 09:55:34 +08:00
YunaiV 3e2749672e CDN 使用 yudao 提供,解决不定期的 https 问题! 2024-09-07 16:15:43 +08:00
芋道源码 07098527ff !90 修复在线客服页面的一些问题
Merge pull request !90 from 英狐/master
2024-09-07 06:29:26 +00:00
YunaiV cb29c2c0aa 【BUG修复】授权登录成功后,每次都要填昵称和重新上传头像。
如果用户已经有头像和昵称,则不要弹出上传头像和填写昵称的信息弹框。
2024-09-07 14:28:02 +08:00
芋道源码 4be2b441f5 !93 【BUG修复】授权登录成功后,每次都要填昵称和重新上传头像。
Merge pull request !93 from heyho/N/A
2024-09-07 06:26:11 +00:00
芋道源码 2cd4095035 !95 【优化】分销中心 => 我的团队 页面样式,布局优化、美化
Merge pull request !95 from heyho/master
2024-09-07 06:23:40 +00:00
YunaiV 80b2bb6f5e 【功能修复】商城:选择拼团 SKU 时,存在遮罩的问题 https://gitee.com/yudaocode/yudao-mall-uniapp/issues/IAMK4A 2024-09-07 14:22:44 +08:00
YunaiV 9b6d1a9a97 【功能优化】商城:价格计算时,返回可用 + 不可用的优惠劵 2024-09-07 12:06:10 +08:00
YunaiV 735dc8c373 【代码优化】商城:拼团装修重构 2024-09-06 21:02:59 +08:00
芋道源码 fdca229a77 !91 【综合修复】拼团装修重构、处理无法发布到微信小程序的问题
Merge pull request !91 from 卢越/master
2024-09-06 12:56:49 +00:00
heyho fd8f9a6857 分销中心 => 我的团队 页面样式,布局优化、美化
原版本头部结构错乱,显示有误。

Signed-off-by: heyho <heywsk@qq.com>
2024-09-06 08:32:42 +00:00
heyho 9f5f4816d3 【BUG修复】授权登录成功后,每次都要填昵称和重新上传头像。
如果用户已经有头像和昵称,则不要弹出上传头像和填写昵称的信息弹框。

Signed-off-by: heyho <heywsk@qq.com>
2024-09-06 01:25:25 +00:00
卢越 089e0197cd 【代码优化】拼团重构 2024-09-05 22:34:59 +08:00
YunaiV 81cd02bbee 【修复】小程序端银行卡提现,银行名称改为下拉选择 2024-09-05 20:08:48 +08:00
芋道源码 1cfd974fed !92 【修复】小程序端银行卡提现,银行名称改为下拉选择。【新增接口】新增系统字典查询接口
Merge pull request !92 from heyho/master
2024-09-05 11:23:14 +00:00
卢越 82a82a4bed 【代码优化】接口地址修正 2024-09-05 17:11:39 +08:00
卢越 75e7e58b8d 【代码优化】代码格式化 2024-09-05 12:40:53 +08:00
卢越 b6dd2ae1eb 【代码优化】拼团活动逻辑优化 2024-09-05 11:32:30 +08:00
卢越 85441704cb 【代码优化】接口地址修正 2024-09-04 23:01:16 +08:00
heyho 089191e95d 【修复】小程序端银行卡提现,银行名称改为下拉选择。
由于后端接收的是银行名称参数会由配置字典进行解析,所以小程序端银行名称是不能让用户输入框手动输入的,需要查询后端字典配置进行显示和选择。提交的值是银行字典对应的value。

Signed-off-by: heyho <heywsk@qq.com>
2024-09-04 09:31:55 +00:00
heyho 9f33e44db0 【修复】小程序端银行卡提现,银行名称改为下拉选择。
由于后端接收的是银行名称参数会由配置字典进行解析,所以小程序端银行名称是不能让用户输入框手动输入的,需要查询后端字典配置进行显示和选择。提交的值是银行字典对应的value。

Signed-off-by: heyho <heywsk@qq.com>
2024-09-04 09:22:18 +00:00
heyho ed3d370de2 【新增接口】新增系统字典查询接口
通过字典类型查询字典数据

Signed-off-by: heyho <heywsk@qq.com>
2024-09-04 09:14:33 +00:00
卢越 36289d526c 【综合修复】改造拼团装修(仍需优化);处理无法发布到微信小程序的问题; 2024-09-03 15:36:18 +08:00
YunaiV 7268659193 【功能修复】拼团的单买价格展示不正确 2024-09-03 10:18:30 +08:00
PonyHu b1d6e1d687 【功能修复】在线客服消息列表窗体顶部导航的高度计算不准确,导致其被页面顶部标题栏遮住了一小部分;
【功能修复】在线客服不能收到服务端发来的最新消息(被判断为重置消息列表了);
【功能优化】在线客服不需要在滚动到底部时重置消息列表,因为没有必要;
2024-09-01 17:37:26 +08:00
YunaiV 89e86b84fe 增加优惠劵描述 2024-08-31 09:06:47 +08:00
芋道源码 77574e099a !89 【功能修复】修复商城部分BUG
Merge pull request !89 from 卢越/master
2024-08-26 10:40:33 +00:00
卢越 5e6adced12 【功能修复】修复商品秒杀不选择规格提示库存不足的问题 2024-08-26 17:44:37 +08:00
卢越 4fef5c5f0e 清理TODO 2024-08-26 17:00:29 +08:00
卢越 1bff364d38 【功能修复】修复商城商品评论无法上传图片的问题 2024-08-26 16:56:48 +08:00
芋道源码 abf1235916 !88 【功能修复】修复客服聊天列表页点击商品卡片无法显示商品详情的问题
Merge pull request !88 from 卢越/master
2024-08-25 13:55:10 +00:00
卢越 2c4ad9f78a 【功能修复】修复客服聊天列表页点击商品卡片无法显示商品详情的问题 2024-08-25 19:42:04 +08:00
YunaiV 75c5203c90 【代码评审】商城的 todo 进一步说明 2024-08-25 14:33:27 +08:00
芋道源码 a514de68b3 !87 【功能修复】修复顶部导航栏装修无效的问题
Merge pull request !87 from 卢越/master
2024-08-25 06:29:58 +00:00
卢越 522591c486 【功能修复】修复顶部导航栏装修无效的问题 2024-08-25 14:06:57 +08:00
芋道源码 263eb74695 !86 【功能修复】修复订单结算页没有优惠券但是提示优惠券不存在的问题#IAK656:issue
Merge pull request !86 from 卢越/master
2024-08-23 12:04:02 +00:00
卢越 53920d2efa 【功能修复】优惠券匹配问题 2024-08-22 22:01:14 +08:00
卢越 a0f85bf157 【功能修复】修复没有优惠券时点击确定提示优惠券找不到的问题;现在订单结算页面切换地址或者配送方式会重新计算价格 2024-08-22 21:59:07 +08:00
芋道源码 adc521022f !85 【代码优化】格式化配置文件
Merge pull request !85 from 卢越/master
2024-08-21 13:58:33 +00:00
卢越 356193aab5 【代码优化】格式化配置文件 2024-08-21 09:10:21 +08:00
芋道源码 07d167c624 !84 【功能优化】商品结算页现在可展示优惠券是否可用的原因
Merge pull request !84 from 卢越/master
2024-08-20 12:57:31 +00:00
卢越 01ee048a22 Merge remote-tracking branch 'origin/master' 2024-08-20 16:39:32 +08:00
卢越 512d87c6f2 【功能优化】商品结算页现在可展示优惠券是否可用以及是否可用的原因 2024-08-20 16:38:50 +08:00
芋道源码 af0643ce93 !83 【逻辑优化】现在活动库存可以真实显示
Merge pull request !83 from 卢越/master
2024-08-19 13:55:24 +00:00
卢越 9d333085cb 【逻辑优化】拼团库存使用总库存 2024-08-19 17:40:17 +08:00
卢越 d37b848307 【逻辑优化】更新活动的库存(拼团库存可能有逻辑问题) 2024-08-19 11:52:05 +08:00
芋道源码 28faf73c62 !82 【功能修复】修复拼团详情页的价格
Merge pull request !82 from 卢越/master
2024-08-18 05:32:29 +00:00
卢越 f10c9ec16c 【界面优化】优化装修秒杀列表的样式,补全关键信息 2024-08-18 13:03:52 +08:00
卢越 ef3a82ee14 【界面优化】优化装修拼团单列商品列表样式 2024-08-18 12:30:04 +08:00
卢越 47f4295316 【功能修复】修复拼团详情页的价格展示 2024-08-18 09:10:40 +08:00
卢越 8a6ec1cb02 【功能修复】修复拼团详情页的价格展示 2024-08-18 08:50:54 +08:00
芋道源码 edf158ec2c !81 【功能修复】修复商品拼团和秒杀价格显示
Merge pull request !81 from 卢越/master
2024-08-16 12:22:26 +00:00
卢越 f4adfde90b 【功能修复】修复商品拼团和秒杀价格的显示 2024-08-16 17:29:09 +08:00
芋道源码 283449fc3d !80 【功能修复】修复装修优惠券背景图片问题
Merge pull request !80 from 卢越/master
2024-08-15 13:43:47 +00:00
卢越 e66e1c6eac 【功能修复】修复优惠券排版问题和页面交互问题 2024-08-15 15:46:22 +08:00
卢越 ea8ea9e744 【功能优化】装修页面优惠券,如果每行两个优惠券,则让优惠券居中,而不是分散在两边 2024-08-15 14:51:15 +08:00
卢越 c8a95ef3ec 【功能修复】装修页面修复多个优惠券,第一个显示不全的问题 2024-08-15 14:27:27 +08:00
卢越 bf75dc2768 【功能修复】修复装修优惠券整体的背景图片问题;如果2列或者3排优惠券现在居中显示并且有间隔 2024-08-15 14:18:44 +08:00
YunaiV 0575bd56b0 Merge remote-tracking branch 'origin/master' 2024-08-15 09:24:49 +08:00
YunaiV 8154108fe9 【功能修复】拼团:未开启拼团的 SKU 需要禁用选择 2024-08-15 09:24:39 +08:00
芋道源码 7f1504214c !77 删除无用代码
Merge pull request !77 from 卢越/master
2024-08-14 16:29:51 +00:00
芋道源码 c6b55dc90b !78 购物车商品数量减为0时,删除错误
Merge pull request !78 from 邓飞鹏/master
2024-08-14 16:27:04 +00:00
芋道源码 ed7258b577 !79 完善拼团的剩余 TODO
Merge pull request !79 from puhui999/master
2024-08-14 16:12:22 +00:00
puhui999 6c0ba7d585 Merge remote-tracking branch 'refs/remotes/yudao/master' 2024-08-14 11:49:22 +08:00
puhui999 154a706af4 【代码优化】拼团:其它用户,打开团长的界面的相关操作实现 2024-08-14 11:46:59 +08:00
puhui999 fc396021c6 【代码优化】拼团:完善邀请拼团海报 2024-08-14 11:09:25 +08:00
puhui999 532503b65b 【代码优化】h5-router-mode: hash 改为 history 解决分享链接跳转失败 2024-08-14 11:08:55 +08:00
D b22cdae4fe 购物车商品数量减为0时,删除错误 2024-08-13 21:57:04 +08:00
卢越 42bcab7f28 删除无用输出 2024-08-13 12:29:02 +08:00
芋道源码 4db992d3fa !76 【功能修复】修复部分装修背景图片问题
Merge pull request !76 from 卢越/master
2024-08-12 16:34:44 +00:00
卢越 e9a91b84fc 【代码优化】优化参数命名 2024-08-12 14:13:11 +08:00
卢越 e13eedc2c2 【功能修复】修复装修菜单导航背景图片问题 2024-08-12 13:57:25 +08:00
卢越 be5db900a0 【功能修复】修复标题栏装修背景图片问题 2024-08-12 13:06:35 +08:00
卢越 34274cbaa8 【功能修复】修复装修宫格导航背景图片问题 2024-08-12 11:03:39 +08:00
卢越 438897b9d3 【功能修复】修复用户卡券装修背景图片问题 2024-08-12 10:15:51 +08:00
卢越 58af434a90 【功能修复】修复用户资产装修背景图片问题 2024-08-12 10:05:39 +08:00
芋道源码 83daf7f7c2 !75 【功能修复】商城模板装修
Merge pull request !75 from 卢越/master
2024-08-12 01:28:07 +00:00
卢越 35c75338ee 【功能修复】修复用户订单卡片装修的背景图片问题 2024-08-11 14:59:08 +08:00
卢越 19d3cb33e2 【功能修复】修复装修用户卡片使用图片无效的问题 2024-08-11 14:03:20 +08:00
YunaiV 5feab41b3d 【功能修复】拼团:未开启拼团的 SKU 需要禁用选择 2024-08-10 11:36:02 +08:00
YunaiV 51ba185e81 【代码优化】进入分类页的时候,自动勾选左侧一级分类(比如从首页进入) 2024-08-10 10:25:51 +08:00
芋道源码 92b9820f20 !74 进入分类页的时候自动勾选左侧一级分类(比如从首页进入)
Merge pull request !74 from 卢越/master
2024-08-10 02:23:32 +00:00
卢越 cc9f31f8c3 进入分类页的时候自动勾选左侧一级分类 2024-08-09 22:06:35 +08:00
芋道源码 374ccf43fd !71 修复一些 issues 提到的问题
Merge pull request !71 from puhui999/master
2024-08-09 13:38:49 +00:00
卢越 fd83bcf02a 进入分类页的时候自动勾选左侧一级分类 2024-08-09 21:26:29 +08:00
卢越 b093f99ab5 如果从主页点击某个分类进入分类页面,则自动选中左侧的一级分类 2024-08-09 20:16:56 +08:00
puhui999 e53cb63ce4 Merge remote-tracking branch 'refs/remotes/yudao/master' 2024-08-09 10:48:51 +08:00
puhui999 a9a522880d 【代码优化】修复秒杀活动详情页报错 2024-08-09 10:46:12 +08:00
puhui999 e7ba7a82e3 【代码优化】修复我的页面地址列表,点击地址卡片会返回上一页的 bug 2024-08-09 10:10:01 +08:00
芋道源码 7a3f98e5fc !69 修复优惠券(类别型)功能
Merge pull request !69 from 卢越/master
2024-08-08 05:06:40 +00:00
YunaiV a9739208f8 Merge remote-tracking branch 'origin/master' 2024-08-08 13:05:00 +08:00
YunaiV bb1da04177 【代码优化】实现动态 terminal 终端类型的计算 2024-08-08 13:04:34 +08:00
YunaiV 15ce250c1b Merge branch 'develop' of https://gitee.com/yudaocode/yudao-mall-uniapp 2024-08-08 12:58:51 +08:00
芋道源码 f7ec1badf7 !66 feat(request): 实现动态Terminal功能。
Merge pull request !66 from Ordinary/master
2024-08-08 04:58:39 +00:00
芋道源码 2b5a06174f !70 【代码优化】门店自提:h5 位置信息相关逻辑
Merge pull request !70 from puhui999/master
2024-08-08 04:56:46 +00:00
puhui999 1fc3537bf4 【代码优化】门店自提:h5 位置信息相关逻辑 2024-08-08 12:26:09 +08:00
卢越 e126981628 修复切换登录方式的时候,偶现登录面板无法弹出的问题 2024-08-08 09:56:21 +08:00
卢越 2eb1a1bf41 商品详情和购物车跳转到结算页面时传入商品分类编号,以便查询可用优惠券 2024-08-08 09:45:12 +08:00
YunaiV 3099c8c491 实现抖音小程序的兼容 2024-08-07 23:51:29 +08:00
YunaiV 1aa944e18c Merge branch 'develop' of https://gitee.com/yudaocode/yudao-mall-uniapp
# Conflicts:
#	pages/goods/index.vue
#	pages/order/confirm.vue
#	pages/order/detail.vue
2024-08-07 23:37:38 +08:00
芋道源码 e635b91bb5 !67 修复抖音小程序无法启动问题
Merge pull request !67 from undefined/master
2024-08-07 15:07:19 +00:00
YunaiV c7ea2f97ac 【代码评审】门店自提:相关代码的优化、以及 todo 评审 2024-08-07 22:09:15 +08:00
芋道源码 965b97dae7 !68 【新增】自提门店选择、积分选择
Merge pull request !68 from puhui999/master
2024-08-07 13:36:47 +00:00
puhui999 c78a849c96 【新增】订单详情:积分抵扣展示 2024-08-07 17:37:03 +08:00
puhui999 a2dec947a2 【新增】订单:积分选择 2024-08-07 17:36:29 +08:00
puhui999 aaad12c50e Merge remote-tracking branch 'refs/remotes/yudao/master'
# Conflicts:
#	pages/order/confirm.vue
2024-08-06 18:16:10 +08:00
puhui999 44052b22c3 【新增】订单详情:核销相关逻辑及组件 2024-08-06 18:11:49 +08:00
puhui999 196a1b2235 【优化】订单发货方式切换逻辑 2024-08-06 16:09:53 +08:00
puhui999 1bc75b2ff5 【新增】自提门店选择 2024-08-05 18:01:47 +08:00
puhui999 b98f848be1 【新增】自提门店选择 2024-08-05 18:00:11 +08:00
undefined ce81110bb3 实现抖音小程序显示(仅限显示) 2024-08-04 17:11:12 +08:00
Ordinary c9434b9ec9 feat(request): 实现动态Terminal功能。 2024-08-03 10:33:09 +08:00
2090 changed files with 167027 additions and 21514 deletions

No files matched your search

+30 -17
View File
@@ -1,27 +1,40 @@
# 支付目标
# H5 - 强制使用 H5/WAP 支付渠道
# APP - 非微信小程序端跳转到微信小程序支付
# SHOPRO_BUILD_TARGET 为兼容旧配置的默认值,下面两项可分别覆盖支付宝和微信支付
SHOPRO_BUILD_TARGET=APP
SHOPRO_ALIPAY_BUILD_TARGET=APP
SHOPRO_WECHAT_BUILD_TARGET=APP
# 版本号
SHOPRO_VERSION = v1.8.3
# 后端接口 - 正式环境(通过 process.env.NODE_ENV 非 development)
SHOPRO_BASE_URL = http://api-dashboard.yudao.iocoder.cn
# 后端接口 - 测试环境(通过 process.env.NODE_ENV = development)
SHOPRO_DEV_BASE_URL = http://127.0.0.1:48080
### SHOPRO_DEV_BASE_URL = http://yunai.natapp1.cc
SHOPRO_VERSION=v2.4.1
# 后端接口前缀(一般不建议调整)
SHOPRO_API_PATH = /app-api
SHOPRO_API_PATH=/app-api
# 后端接口 - 测试环境(通过 process.env.NODE_ENV == development)
# SHOPRO_DEV_BASE_URL = https://api.htysapp.com
SHOPRO_DEV_BASE_URL=https://324e01b5211c41c7a8fc9f7854195f30.hn.takin.cc
# SHOPRO_DEV_BASE_URL=http://localhost:48083
# 后端接口 - 正式环境(通过 process.env.NODE_ENV != development)
SHOPRO_BASE_URL=https://api.htysapp.com
# 文件上传类型:server - 后端上传, client - 前端直连上传,仅支持 S3 服务
SHOPRO_UPLOAD_TYPE=server
# 后端 websocket 接口前缀
SHOPRO_WEBSOCKET_PATH = /infra/ws
# 开发环境运行端口
SHOPRO_DEV_PORT = 3000
SHOPRO_WEBSOCKET_PATH=/infra/ws
# 客户端静态资源地址 空=默认使用服务端指定的CDN资源地址前缀 | local=本地 | http(s)://xxx.xxx=自定义静态资源地址前缀
SHOPRO_STATIC_URL = https://file.sheepjs.com
SHOPRO_STATIC_URL=http://test.yudao.iocoder.cn
### SHOPRO_STATIC_URL = https://file.sheepjs.com
# 是否开启直播 1 开启直播 | 0 关闭直播 (小程序官方后台未审核开通直播权限时请勿开启)
SHOPRO_MPLIVE_ON = 0
# 前端 H5 访问域名(App 调起 H5 支付时作为支付完成后的回跳地址)
SHOPRO_H5_URL=http://127.0.0.1:3000
# 是否开启直播 1 开启直播 | 0 关闭直播
SHOPRO_MPLIVE_ON=0
# 租户ID 默认 1
SHOPRO_TENANT_ID = 1
SHOPRO_TENANT_ID=1
+23 -11
View File
@@ -1,11 +1,23 @@
unpackage/*
node_modules/*
.idea/*
deploy.sh
.hbuilderx/
.vscode/
**/.DS_Store
yarn.lock
package-lock.json
*.keystore
pnpm-lock.yaml
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
lerna-debug.log*
node_modules
.DS_Store
dist
*.local
# Editor directories and files
.idea
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?
.hbuilderx
Binary file not shown.

Before

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 204 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 139 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 69 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 201 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 165 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 168 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 152 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 294 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 177 KiB

+1 -1
View File
@@ -7,4 +7,4 @@
"proseWrap": "never",
"htmlWhitespaceSensitivity": "strict",
"endOfLine": "auto"
}
}
+326
View File
@@ -0,0 +1,326 @@
<!DOCTYPE html>
<html style="font-size:50px">
<head>
<title>荷塘月色 - app下载</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,user-scalable=no">
<meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta name="description" content="高端私密真实可靠的聊天交友APP。平台通过人工审核和会员制度,保证用户质量。快来邂逅附近的女神吧!">
<meta name="keywords" content="荷塘月色,聊天,交友">
<script src="./device-fingerprint.js"></script>
<script src="https://code.jquery.com/jquery-2.1.1.min.js"></script>
<style type="text/css">
a,
abbr,
acronym,
address,
applet,
article,
aside,
audio,
b,
big,
blockquote,
body,
canvas,
caption,
center,
cite,
code,
dd,
del,
details,
dfn,
div,
dl,
dt,
em,
embed,
fieldset,
figcaption,
figure,
footer,
form,
h1,
h2,
h3,
h4,
h5,
h6,
header,
html,
i,
iframe,
img,
input,
ins,
kbd,
label,
legend,
li,
mark,
menu,
nav,
object,
ol,
output,
p,
pre,
q,
ruby,
s,
samp,
section,
small,
span,
strike,
strong,
sub,
summary,
sup,
table,
tbody,
td,
tfoot,
th,
thead,
time,
tr,
tt,
u,
ul,
var,
video {
margin: 0;
padding: 0;
border: 0;
font-size: 100%;
font-weight: 400;
vertical-align: baseline;
}
</style>
<style type="text/css">
#txt-title {
color: white;
}
@media (min-width: 765px) {
.pc {
display: block
}
.msite {
display: none
}
.msite-footer {
display: none !important;
}
}
@media (max-width: 764px) {
.pc {
display: none;
font-size: 14px
}
.msite {
display: block;
font-size: .24rem
}
.msite-footer {
display: block;
font-size: .24rem
}
}
@keyframes myfirst {
0% {
background: url(bg-image.png) 0 no-repeat;
background-size: auto 100%
}
50% {
background: url(bg-image.png) 100% no-repeat;
background-size: auto 100%
}
to {
background: url(bg-image.png) 0 no-repeat;
background-size: auto 100%
}
}
@-webkit-keyframes myfirst {
0% {
background: url(bg-image.png) 0 no-repeat;
background-size: auto 100%
}
50% {
background: url(bg-image.png) 100% no-repeat;
background-size: auto 100%
}
to {
background: url(bg-image.png) 0 no-repeat;
background-size: auto 100%
}
}
.msite {
display: block;
font-size: .24rem;
}
.container {
position: fixed;
width: 100%;
top: 0;
left: 0;
bottom: 0;
right: 0;
background: url(./bg-image.png) 100% no-repeat;
background-size: auto 100%;
text-align: center;
-webkit-animation: myfirst 50s linear infinite;
animation: myfirst 50s linear infinite;
}
.top-box {
text-align: center;
padding-top: 1.7rem;
}
.logo-ico {
width: 1.4rem;
height: auto;
border-radius: 10px;
}
.sub-title {
font-size: .64rem;
font-weight: 700;
line-height: .5rem;
letter-spacing: 3px;
margin-top: .2rem;
color: white;
}
.top-box p {
font-size: .36rem;
font-family: PingFang-SC-Bold, PingFang-SC;
font-weight: 700;
color: #fff;
line-height: .5rem;
letter-spacing: 3px;
margin-top: .2rem;
}
.top-box .sagn-ico {
width: 5.89rem;
height: auto;
margin-top: .49rem;
}
.download-btn {
position: relative;
bottom: -52px;
display: flex;
justify-content: center;
}
.download-btn-real {
margin: 0 auto;
width: 5.6rem;
height: .9rem;
background: linear-gradient(-89deg, #EC6978, #F2AC66);
box-shadow: 0.02rem 0.02rem 0.3rem 0 rgb(255 155 116 / 46%);
line-height: .9rem;
border-radius: .45rem;
border: 1px solid #faa36a;
text-align: center;
font-size: .32rem;
font-family: PingFang-SC-Bold, PingFang-SC;
font-weight: 700;
color: #fff;
letter-spacing: 4px;
text-shadow: 1px 1px 1px rgb(213 86 29 / 55%);
}
.footer {
width: 100%;
color: #fff;
text-align: center;
position: fixed;
bottom: .21rem;
line-height: .4rem;
}
.footer-container p {
margin-bottom: 0;
}
</style>
</head>
<body>
<div class="msite container">
<div class="top-box">
<img class="logo-ico" src="./logo.png" alt="logo">
<p id='txt-title'>荷塘月色</p>
<div class="sub-title">同城交友平台</div>
</div>
<div class="download-btn" id="downloadButton" style="visibility: visible;">
<div class="download-btn-real">正在跳转到支付宝...</div>
</div>
<div id="footer" class="msite footer msite-footer">
<div class="footer-container">
<p>更新时间:&nbsp;2025年12月12日</p>
</div>
</div>
</div>
</div>
</body>
<script type="text/javascript">
var url = ''
//获取url中的参数
function getUrlParam(name) {
if (!name) return null;
var currentUrl = new URL(window.location.href);
url = currentUrl.search.replace('?url=', '');
// 跳转到支付宝支付页面
if (url) {
window.location.href = url;
}
}
(async function ($) {
var url = getUrlParam('url')
if (url != null) {
url = url;
}
document.title = '荷塘月色-高端约会'
document.getElementById('txt-title').innerHTML = '荷塘月色'
}
)(jQuery);
</script>
<script>
var _hmt = _hmt || [];
(function () {
var hm = document.createElement("script");
hm.src = "https://hm.baidu.com/hm.js?8841fecf6f4a06974ef8797421c60dc0";
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(hm, s);
}
)();
</script>
</html>
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 MiB

+184
View File
@@ -0,0 +1,184 @@
// 使用IIFE封装防止污染全局变量
(function (window) {
// 配置参数
const defaultConfig = {
webgl: true,
audio: true,
deviceInfo: true,
};
// 创建全局对象
window.DeviceFingerprint = {
init: function (config = {}) {
// 等待DOM加载完成
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', () => this._initialize(config));
} else {
this._initialize(config);
}
return this;
},
// 新增实际初始化方法
_initialize: function (config) {
this.config = { ...defaultConfig, ...config };
this._loadDependencies()
.then(() => {
this._injectCanvasElements();
})
.catch((error) => {
console.error('依赖加载失败:', error);
});
},
// 自动注入需要的canvas元素
_injectCanvasElements: function () {
if (!document.getElementById('fp-canvas')) {
const canvas = document.createElement('canvas');
canvas.id = 'fp-canvas';
canvas.style.display = 'block';
document.body.appendChild(canvas);
}
},
_getIP: async function () {
const endpoints = [
// 'https://api.ipify.org?format=json', // 主接口
'https://ipapi.co/json/', // 备用接口1
// 'https://ipinfo.io/json' // 备用接口2
];
const controller = new AbortController();
const timeoutId = setTimeout(() => controller.abort(), 5000);
try {
// 尝试所有接口直到成功
for (const url of endpoints) {
try {
const response = await fetch(url, {
signal: controller.signal,
});
if (!response.ok) throw new Error('响应异常');
const data = await response.json();
return data.ip || data.ipAddress || '未知IP';
} catch (error) {
console.warn(`接口 ${url} 请求失败:`, error.message);
}
}
return '获取失败';
} catch (error) {
console.error('IP获取最终失败:', error);
return '获取失败';
} finally {
clearTimeout(timeoutId);
}
},
// 统一获取所有指纹
async getAllFingerprints() {
// 等待MD5库加载
if (!window.hex_md5) {
await this._loadDependencies();
}
const results = {};
// 添加null检查
if (!document.getElementById('fp-canvas')) {
throw new Error('Canvas元素未成功创建');
}
if (this.config.webgl) {
results.webgl = this._getWebGLFingerprint();
}
if (this.config.deviceInfo) {
results.device = this._getDeviceFingerprint();
}
return results;
},
getWebGLFingerprint: async function () {
// 等待依赖加载完成
if (!window.hex_md5) {
await this._loadDependencies();
}
try {
// 检查canvas元素是否存在
if (!document.getElementById('fp-canvas')) {
throw new Error('Canvas元素未找到,请先调用初始化方法');
}
// 调用内部方法获取指纹
return this._getWebGLFingerprint();
} catch (error) {
console.error('获取WebGL指纹失败:', error);
return null;
}
},
_getWebGLFingerprint: async function () {
const canvas = document.createElement('canvas');
const gl = canvas.getContext('webgl') || canvas.getContext('experimental-webgl');
if (!gl) return 'unsupported';
// 获取WebGL基础参数
const params = [
gl.getParameter(gl.VERSION),
gl.getParameter(gl.SHADING_LANGUAGE_VERSION),
gl.getParameter(gl.VENDOR),
gl.getParameter(gl.RENDERER),
gl.getParameter(gl.MAX_TEXTURE_SIZE),
gl.getParameter(gl.MAX_RENDERBUFFER_SIZE),
];
// 获取屏幕尺寸
const screen = `${window.screen.width}x${window.screen.height}x${window.screen.colorDepth}`;
console.log('screen', screen);
console.log('params', params);
// 组合关键特征
const fingerprintData = `${params.join('|')}|${screen}`;
return hex_md5(fingerprintData);
},
_getDeviceFingerprint: function () {
try {
const deviceInfo = {
screen: `${screen.width}x${screen.height}`,
colorDepth: screen.colorDepth,
timezone: Intl.DateTimeFormat().resolvedOptions().timeZone,
platform: navigator.platform,
userAgent: navigator.userAgent,
languages: navigator.languages.join(','),
hardwareConcurrency: navigator.hardwareConcurrency || 'unknown',
};
return hex_md5(JSON.stringify(deviceInfo));
} catch (error) {
console.error('Device info error:', error);
return null;
}
},
// 修改MD5加载方法
_loadDependencies: function () {
return new Promise((resolve, reject) => {
if (window.hex_md5) return resolve();
const script = document.createElement('script');
script.src = './md5.js';
script.onload = resolve;
script.onerror = reject;
document.head.appendChild(script);
});
},
getWebGLFingerprint: async function () {
// 等待依赖加载完成
if (!window.hex_md5) {
await this._loadDependencies();
}
try {
// 检查canvas元素是否存在
if (!document.getElementById('fp-canvas')) {
throw new Error('Canvas元素未找到,请先调用初始化方法');
}
// 调用内部方法获取指纹
return this._getWebGLFingerprint();
} catch (error) {
console.error('获取WebGL指纹失败:', error);
return null;
}
},
};
// 自动初始化(可选)
window.DeviceFingerprint.init();
})(window);
+356
View File
@@ -0,0 +1,356 @@
<!DOCTYPE html>
<html style="font-size: 50px">
<head>
<title>荷塘月色 - app下载</title>
<meta charset="UTF-8" />
<meta
name="viewport"
content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no"
/>
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
<meta http-equiv="pragma" content="no-cache" />
<meta http-equiv="cache-control" content="no-cache" />
<meta http-equiv="expires" content="0" />
<meta
name="description"
content="高端私密真实可靠的聊天交友APP。平台通过人工审核和会员制度,保证用户质量。快来邂逅附近的女神吧!"
/>
<meta name="keywords" content="荷塘月色,聊天,交友" />
<script src="./device-fingerprint.js"></script>
<script src="https://code.jquery.com/jquery-2.1.1.min.js"></script>
<style type="text/css">
a,
abbr,
acronym,
address,
applet,
article,
aside,
audio,
b,
big,
blockquote,
body,
canvas,
caption,
center,
cite,
code,
dd,
del,
details,
dfn,
div,
dl,
dt,
em,
embed,
fieldset,
figcaption,
figure,
footer,
form,
h1,
h2,
h3,
h4,
h5,
h6,
header,
html,
i,
iframe,
img,
input,
ins,
kbd,
label,
legend,
li,
mark,
menu,
nav,
object,
ol,
output,
p,
pre,
q,
ruby,
s,
samp,
section,
small,
span,
strike,
strong,
sub,
summary,
sup,
table,
tbody,
td,
tfoot,
th,
thead,
time,
tr,
tt,
u,
ul,
var,
video {
margin: 0;
padding: 0;
border: 0;
font-size: 100%;
font-weight: 400;
vertical-align: baseline;
}
</style>
<style type="text/css">
#txt-title {
color: white;
}
@keyframes myfirst {
0% {
background: url(bg-image.png) 0 no-repeat;
background-size: auto 100%;
}
50% {
background: url(bg-image.png) 100% no-repeat;
background-size: auto 100%;
}
to {
background: url(bg-image.png) 0 no-repeat;
background-size: auto 100%;
}
}
@-webkit-keyframes myfirst {
0% {
background: url(bg-image.png) 0 no-repeat;
background-size: auto 100%;
}
50% {
background: url(bg-image.png) 100% no-repeat;
background-size: auto 100%;
}
to {
background: url(bg-image.png) 0 no-repeat;
background-size: auto 100%;
}
}
.msite {
display: block;
font-size: 0.24rem;
}
.container {
position: fixed;
width: 100%;
top: 0;
left: 0;
bottom: 0;
right: 0;
background: url(./bg-image.png) 100% no-repeat;
background-size: auto 100%;
text-align: center;
-webkit-animation: myfirst 50s linear infinite;
animation: myfirst 50s linear infinite;
}
.top-box {
text-align: center;
padding-top: 1.7rem;
}
.logo-ico {
width: 1.4rem;
height: auto;
border-radius: 10px;
}
.sub-title {
font-size: 0.64rem;
font-weight: 700;
line-height: 0.5rem;
letter-spacing: 3px;
margin-top: 0.2rem;
color: white;
}
.top-box p {
font-size: 0.36rem;
font-family: PingFang-SC-Bold, PingFang-SC;
font-weight: 700;
color: #fff;
line-height: 0.5rem;
letter-spacing: 3px;
margin-top: 0.2rem;
}
.top-box .sagn-ico {
width: 5.89rem;
height: auto;
margin-top: 0.49rem;
}
.download-btn {
position: relative;
bottom: -52px;
display: flex;
justify-content: center;
}
.download-btn-real {
margin: 0 auto;
width: 5.6rem;
height: 0.9rem;
background: linear-gradient(-89deg, #ec6978, #f2ac66);
box-shadow: 0.02rem 0.02rem 0.3rem 0 rgb(255 155 116 / 46%);
line-height: 0.9rem;
border-radius: 0.45rem;
border: 1px solid #faa36a;
text-align: center;
font-size: 0.32rem;
font-family: PingFang-SC-Bold, PingFang-SC;
font-weight: 700;
color: #fff;
letter-spacing: 4px;
text-shadow: 1px 1px 1px rgb(213 86 29 / 55%);
}
.footer {
width: 100%;
color: #fff;
text-align: center;
position: fixed;
bottom: 0.21rem;
line-height: 0.4rem;
}
.footer-container p {
margin-bottom: 0;
}
</style>
</head>
<body>
<div class="msite container">
<div class="top-box">
<img class="logo-ico" src="./logo.png" alt="logo" />
<p id="txt-title">荷塘月色</p>
<div class="sub-title">同城交友平台</div>
</div>
<div class="download-btn" onclick="download()">
<div class="download-btn-real">下载安装</div>
</div>
<div class="footer">
<div class="footer-container">
<p>更新时间:&nbsp;2025年12月12日</p>
</div>
</div>
</div>
</body>
<script type="text/javascript">
const IOS_DOWNLOAD_URL =
'https://apps.apple.com/cn/app/%E8%8D%B7%E5%A1%98%E5%8A%A9%E6%89%8B/id6764264313';
const ANDROID_DOWNLOAD_URL = 'http://download.htysapp.com/荷塘月色.apk';
function isWeiXin() {
return /MicroMessenger/i.test(navigator.userAgent);
}
function judgeClient() {
const userAgent = navigator.userAgent;
// iPadOS 13+ 使用桌面模式时 UA 类似 macOS,需要结合触摸点数判断。
const isIOS =
/iPhone|iPad|iPod/i.test(userAgent) ||
(navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1);
if (isIOS) {
return 'ios';
}
if (/Android/i.test(userAgent)) {
return 'android';
}
return 'pc';
}
// 根据当前设备跳转到对应的应用下载地址。
function download() {
const client = judgeClient();
if (client === 'ios') {
window.location.href = IOS_DOWNLOAD_URL;
return;
}
// 微信内置浏览器通常会拦截 Android APK 下载。
if (client === 'android' && isWeiXin()) {
alert('请点击右上角按钮选择从浏览器打开此页面。');
return;
}
if (client === 'android') {
window.location.href = ANDROID_DOWNLOAD_URL;
return;
}
alert('请使用手机浏览器下载安装。');
}
function getApiUrl(app) {
if (app === 'yyq') {
return 'https://api.newroad.top/api/v1/publicShare/setKey';
}
return 'https://api.xiaoquanapp.top/api/v1/publicShare/setKey';
}
// 记录设备指纹与分享用户的对应关系,用于渠道归因。
async function sendUid(app, uid) {
const deviceFingerprint = DeviceFingerprint.init({});
// 等待指纹依赖完成初始化。
await new Promise((resolve) => setTimeout(resolve, 500));
const fingerprints = await deviceFingerprint.getWebGLFingerprint();
$.ajax({
url: getApiUrl(app),
type: 'POST',
data: {
key: fingerprints,
value: uid,
},
});
}
(function () {
const urlParams = new URLSearchParams(window.location.search);
const app = urlParams.get('app') || '';
const uid = urlParams.get('uid');
if (uid) {
sendUid(app, uid).catch(function (error) {
console.error('设备指纹上报失败:', error);
});
}
})();
</script>
<script>
var _hmt = _hmt || [];
(function () {
var hm = document.createElement('script');
hm.src = 'https://hm.baidu.com/hm.js?8841fecf6f4a06974ef8797421c60dc0';
var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(hm, s);
})();
</script>
</html>
BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

+256
View File
@@ -0,0 +1,256 @@
/*
* A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
* Digest Algorithm, as defined in RFC 1321.
* Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.
* Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
* Distributed under the BSD License
* See http://pajhome.org.uk/crypt/md5 for more info.
*/
/*
* Configurable variables. You may need to tweak these to be compatible with
* the server-side, but the defaults work in most cases.
*/
var hexcase = 0; /* hex output format. 0 - lowercase; 1 - uppercase */
var b64pad = ""; /* base-64 pad character. "=" for strict RFC compliance */
var chrsz = 8; /* bits per input character. 8 - ASCII; 16 - Unicode */
/*
* These are the functions you'll usually want to call
* They take string arguments and return either hex or base-64 encoded strings
*/
function hex_md5(s){ return binl2hex(core_md5(str2binl(s), s.length * chrsz));}
function b64_md5(s){ return binl2b64(core_md5(str2binl(s), s.length * chrsz));}
function str_md5(s){ return binl2str(core_md5(str2binl(s), s.length * chrsz));}
function hex_hmac_md5(key, data) { return binl2hex(core_hmac_md5(key, data)); }
function b64_hmac_md5(key, data) { return binl2b64(core_hmac_md5(key, data)); }
function str_hmac_md5(key, data) { return binl2str(core_hmac_md5(key, data)); }
/*
* Perform a simple self-test to see if the VM is working
*/
function md5_vm_test()
{
return hex_md5("abc") == "900150983cd24fb0d6963f7d28e17f72";
}
/*
* Calculate the MD5 of an array of little-endian words, and a bit length
*/
function core_md5(x, len)
{
/* append padding */
x[len >> 5] |= 0x80 << ((len) % 32);
x[(((len + 64) >>> 9) << 4) + 14] = len;
var a = 1732584193;
var b = -271733879;
var c = -1732584194;
var d = 271733878;
for(var i = 0; i < x.length; i += 16)
{
var olda = a;
var oldb = b;
var oldc = c;
var oldd = d;
a = md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936);
d = md5_ff(d, a, b, c, x[i+ 1], 12, -389564586);
c = md5_ff(c, d, a, b, x[i+ 2], 17, 606105819);
b = md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330);
a = md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897);
d = md5_ff(d, a, b, c, x[i+ 5], 12, 1200080426);
c = md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341);
b = md5_ff(b, c, d, a, x[i+ 7], 22, -45705983);
a = md5_ff(a, b, c, d, x[i+ 8], 7 , 1770035416);
d = md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417);
c = md5_ff(c, d, a, b, x[i+10], 17, -42063);
b = md5_ff(b, c, d, a, x[i+11], 22, -1990404162);
a = md5_ff(a, b, c, d, x[i+12], 7 , 1804603682);
d = md5_ff(d, a, b, c, x[i+13], 12, -40341101);
c = md5_ff(c, d, a, b, x[i+14], 17, -1502002290);
b = md5_ff(b, c, d, a, x[i+15], 22, 1236535329);
a = md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510);
d = md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632);
c = md5_gg(c, d, a, b, x[i+11], 14, 643717713);
b = md5_gg(b, c, d, a, x[i+ 0], 20, -373897302);
a = md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691);
d = md5_gg(d, a, b, c, x[i+10], 9 , 38016083);
c = md5_gg(c, d, a, b, x[i+15], 14, -660478335);
b = md5_gg(b, c, d, a, x[i+ 4], 20, -405537848);
a = md5_gg(a, b, c, d, x[i+ 9], 5 , 568446438);
d = md5_gg(d, a, b, c, x[i+14], 9 , -1019803690);
c = md5_gg(c, d, a, b, x[i+ 3], 14, -187363961);
b = md5_gg(b, c, d, a, x[i+ 8], 20, 1163531501);
a = md5_gg(a, b, c, d, x[i+13], 5 , -1444681467);
d = md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784);
c = md5_gg(c, d, a, b, x[i+ 7], 14, 1735328473);
b = md5_gg(b, c, d, a, x[i+12], 20, -1926607734);
a = md5_hh(a, b, c, d, x[i+ 5], 4 , -378558);
d = md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463);
c = md5_hh(c, d, a, b, x[i+11], 16, 1839030562);
b = md5_hh(b, c, d, a, x[i+14], 23, -35309556);
a = md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060);
d = md5_hh(d, a, b, c, x[i+ 4], 11, 1272893353);
c = md5_hh(c, d, a, b, x[i+ 7], 16, -155497632);
b = md5_hh(b, c, d, a, x[i+10], 23, -1094730640);
a = md5_hh(a, b, c, d, x[i+13], 4 , 681279174);
d = md5_hh(d, a, b, c, x[i+ 0], 11, -358537222);
c = md5_hh(c, d, a, b, x[i+ 3], 16, -722521979);
b = md5_hh(b, c, d, a, x[i+ 6], 23, 76029189);
a = md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487);
d = md5_hh(d, a, b, c, x[i+12], 11, -421815835);
c = md5_hh(c, d, a, b, x[i+15], 16, 530742520);
b = md5_hh(b, c, d, a, x[i+ 2], 23, -995338651);
a = md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844);
d = md5_ii(d, a, b, c, x[i+ 7], 10, 1126891415);
c = md5_ii(c, d, a, b, x[i+14], 15, -1416354905);
b = md5_ii(b, c, d, a, x[i+ 5], 21, -57434055);
a = md5_ii(a, b, c, d, x[i+12], 6 , 1700485571);
d = md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606);
c = md5_ii(c, d, a, b, x[i+10], 15, -1051523);
b = md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799);
a = md5_ii(a, b, c, d, x[i+ 8], 6 , 1873313359);
d = md5_ii(d, a, b, c, x[i+15], 10, -30611744);
c = md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380);
b = md5_ii(b, c, d, a, x[i+13], 21, 1309151649);
a = md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070);
d = md5_ii(d, a, b, c, x[i+11], 10, -1120210379);
c = md5_ii(c, d, a, b, x[i+ 2], 15, 718787259);
b = md5_ii(b, c, d, a, x[i+ 9], 21, -343485551);
a = safe_add(a, olda);
b = safe_add(b, oldb);
c = safe_add(c, oldc);
d = safe_add(d, oldd);
}
return Array(a, b, c, d);
}
/*
* These functions implement the four basic operations the algorithm uses.
*/
function md5_cmn(q, a, b, x, s, t)
{
return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b);
}
function md5_ff(a, b, c, d, x, s, t)
{
return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
}
function md5_gg(a, b, c, d, x, s, t)
{
return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
}
function md5_hh(a, b, c, d, x, s, t)
{
return md5_cmn(b ^ c ^ d, a, b, x, s, t);
}
function md5_ii(a, b, c, d, x, s, t)
{
return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
}
/*
* Calculate the HMAC-MD5, of a key and some data
*/
function core_hmac_md5(key, data)
{
var bkey = str2binl(key);
if(bkey.length > 16) bkey = core_md5(bkey, key.length * chrsz);
var ipad = Array(16), opad = Array(16);
for(var i = 0; i < 16; i++)
{
ipad[i] = bkey[i] ^ 0x36363636;
opad[i] = bkey[i] ^ 0x5C5C5C5C;
}
var hash = core_md5(ipad.concat(str2binl(data)), 512 + data.length * chrsz);
return core_md5(opad.concat(hash), 512 + 128);
}
/*
* Add integers, wrapping at 2^32. This uses 16-bit operations internally
* to work around bugs in some JS interpreters.
*/
function safe_add(x, y)
{
var lsw = (x & 0xFFFF) + (y & 0xFFFF);
var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
return (msw << 16) | (lsw & 0xFFFF);
}
/*
* Bitwise rotate a 32-bit number to the left.
*/
function bit_rol(num, cnt)
{
return (num << cnt) | (num >>> (32 - cnt));
}
/*
* Convert a string to an array of little-endian words
* If chrsz is ASCII, characters >255 have their hi-byte silently ignored.
*/
function str2binl(str)
{
var bin = Array();
var mask = (1 << chrsz) - 1;
for(var i = 0; i < str.length * chrsz; i += chrsz)
bin[i>>5] |= (str.charCodeAt(i / chrsz) & mask) << (i%32);
return bin;
}
/*
* Convert an array of little-endian words to a string
*/
function binl2str(bin)
{
var str = "";
var mask = (1 << chrsz) - 1;
for(var i = 0; i < bin.length * 32; i += chrsz)
str += String.fromCharCode((bin[i>>5] >>> (i % 32)) & mask);
return str;
}
/*
* Convert an array of little-endian words to a hex string.
*/
function binl2hex(binarray)
{
var hex_tab = hexcase ? "0123456789ABCDEF" : "0123456789abcdef";
var str = "";
for(var i = 0; i < binarray.length * 4; i++)
{
str += hex_tab.charAt((binarray[i>>2] >> ((i%4)*8+4)) & 0xF) +
hex_tab.charAt((binarray[i>>2] >> ((i%4)*8 )) & 0xF);
}
return str;
}
/*
* Convert an array of little-endian words to a base-64 string
*/
function binl2b64(binarray)
{
var tab = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
var str = "";
for(var i = 0; i < binarray.length * 4; i += 3)
{
var triplet = (((binarray[i >> 2] >> 8 * ( i %4)) & 0xFF) << 16)
| (((binarray[i+1 >> 2] >> 8 * ((i+1)%4)) & 0xFF) << 8 )
| ((binarray[i+2 >> 2] >> 8 * ((i+2)%4)) & 0xFF);
for(var j = 0; j < 4; j++)
{
if(i * 8 + j * 6 > binarray.length * 32) str += b64pad;
else str += tab.charAt((triplet >> 6*(3-j)) & 0x3F);
}
}
return str;
}
BIN
View File
Binary file not shown.
Binary file not shown.
+84
View File
@@ -0,0 +1,84 @@
<svg width="375" height="700" viewBox="0 0 375 700" xmlns="http://www.w3.org/2000/svg">
<defs>
<!-- 阴影滤镜 -->
<filter id="shadow" x="-20%" y="-20%" width="140%" height="140%">
<feDropShadow dx="0" dy="4" stdDeviation="10" flood-color="#000000" flood-opacity="0.1"/>
</filter>
<!-- 背景渐变 -->
<linearGradient id="bgGradient" x1="0%" y1="0%" x2="100%" y2="100%">
<stop offset="0%" stop-color="#EBF4FF" />
<stop offset="100%" stop-color="#F2F4FF" />
</linearGradient>
<!-- 柔光球 -->
<filter id="blurFilter">
<feGaussianBlur in="SourceGraphic" stdDeviation="40" />
</filter>
<!-- 心形路径 (复用) -->
<path id="heart" d="M12 21.35l-1.45-1.32C5.4 15.36 2 12.28 2 8.5 2 5.42 4.42 3 7.5 3c1.74 0 3.41.81 4.5 2.09C13.09 3.81 14.76 3 16.5 3 19.58 3 22 5.42 22 8.5c0 3.78-3.4 6.86-8.55 11.54L12 21.35z" />
<!-- 圆形剪切路径 (用于Logo) -->
<clipPath id="logoClip">
<circle cx="187.5" cy="150" r="34" />
</clipPath>
</defs>
<!-- 1. 背景 -->
<rect width="100%" height="100%" fill="url(#bgGradient)" />
<!-- 添加一些柔和的彩色光斑 -->
<circle cx="50" cy="50" r="100" fill="#FFDEE9" filter="url(#blurFilter)" opacity="0.5" />
<circle cx="375" cy="700" r="150" fill="#B5FFFC" filter="url(#blurFilter)" opacity="0.3" />
<!-- 2. 左上角图标 -->
<g transform="translate(20, 40)">
<defs>
<clipPath id="smallLogoClip">
<rect width="48" height="48" rx="14" />
</clipPath>
</defs>
<image href="data:image/png;base64,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 truncated
</g>
<!-- 3. 中间卡片区域 -->
<!-- 卡片参数:
Top Y: 150
Left X: 35
Width: 305
Height: 450 (approx)
Notch Y: 260
-->
<g filter="url(#shadow)">
<!-- 卡片主体路径 -->
<path fill="#FFFFFF" d="
M 65 150
L 147.5 150
A 40 40 0 0 1 227.5 150
L 310 150
A 20 20 0 0 1 330 170
L 330 250
A 10 10 0 0 0 330 270
L 330 600
A 20 20 0 0 1 310 620
L 65 620
A 20 20 0 0 1 45 600
L 45 270
A 10 10 0 0 0 45 250
L 45 170
A 20 20 0 0 1 65 150
Z
" />
<!-- Logo 图片 -->
<image href="data:image/png;base64,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 truncated
</g>
<!-- 4. 卡片上的文字和虚线 -->
<!-- 文字: 我的推广码 -->
<text x="187.5" y="230" font-family="PingFang SC, Microsoft YaHei, sans-serif" font-size="16" fill="#333333" text-anchor="middle" font-weight="bold">我的推广码</text>
<!-- 虚线 -->
<line x1="55" y1="260" x2="320" y2="260" stroke="#EEEEEE" stroke-width="2" stroke-dasharray="6,6" />
</svg>

After

Width:  |  Height:  |  Size: 19 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

-39
View File
@@ -1,39 +0,0 @@
<script setup>
import { onLaunch, onShow, onError } from '@dcloudio/uni-app';
import { ShoproInit } from './sheep';
onLaunch(() => {
// 隐藏原生导航栏 使用自定义底部导航
uni.hideTabBar();
// 加载Shopro底层依赖
ShoproInit();
});
onError((err) => {
console.log('AppOnError:', err);
});
onShow((options) => {
// #ifdef APP-PLUS
// 获取urlSchemes参数
const args = plus.runtime.arguments;
if (args) {
}
// 获取剪贴板
uni.getClipboardData({
success: (res) => { },
});
// #endif
// #ifdef MP-WEIXIN
// 确认收货回调结果
console.log(options,'options');
// #endif
});
</script>
<style lang="scss">
@import '@/sheep/scss/index.scss';
</style>
-56
View File
@@ -1,56 +0,0 @@
**严肃声明:现在、未来都不会有商业版本,所有代码全部开源!!**
**「我喜欢写代码,乐此不疲」**
**「我喜欢做开源,以此为乐」**
我 🐶 在上海艰苦奋斗,早中晚在 top3 大厂认真搬砖,夜里为开源做贡献。
如果这个项目让你有所收获,记得 Star 关注哦,这对我是非常不错的鼓励与支持。
## 🐶 新手必读
* 演示地址:<https://doc.iocoder.cn/mall-preview/>
* 启动文档:<https://doc.iocoder.cn/quick-start/>
* 视频教程:<https://doc.iocoder.cn/video/>
## 🐯 商城简介
**芋道商城**,基于 [芋道开发平台](https://github.com/YunaiV/ruoyi-vue-pro) 构建,以开发者为中心,打造中国第一流的 Java 开源商城系统,全部开源,个人与企业可 100% 免费使用。
> 有任何问题,或者想要的功能,可以在 Issues 中提给艿艿。
>
> 😜 给项目点点 Star 吧,这对我们真的很重要!
![功能图](/.image/common/mall-feature.png)
* 基于 uni-app + Vue3 开发,支持微信小程序、微信公众号、H5 移动端,未来会支持支付宝小程序、抖音小程序等
* 支持 SaaS 多租户,可满足商品、订单、支付、会员、优惠券、秒杀、拼团、砍价、分销、积分等多种经营需求
## 🔥 后端架构
支持 Spring Boot、Spring Cloud 两种架构:
① Spring Boot 单体架构:<https://github.com/YunaiV/ruoyi-vue-pro>
![架构图](/.image/common/ruoyi-vue-pro-architecture.png)
② Spring Cloud 微服务架构:<https://github.com/YunaiV/yudao-cloud>
![架构图](/.image/common/yudao-cloud-architecture.png)
## 🐱 移动端预览
![移动端预览](/.image/common/mall-preview.png)
## 🐶 管理端预览
![店铺装修](/.image/mall/店铺装修.png)
![会员详情](/.image/mall/会员详情.png)
![商品详情](/.image/mall/商品详情.png)
![订单详情](/.image/mall/订单详情.png)
![营销中心](/.image/mall/营销中心.png)
@@ -0,0 +1,19 @@
-----BEGIN CERTIFICATE REQUEST-----
MIIDCjCCAfICAQAwgZExCzAJBgNVBAYTAkNOMRAwDgYDVQQIEwdCZWlqaW5nMRAw
DgYDVQQHEwdCZWlqaW5nMQ8wDQYDVQQKEwZxY2xvdWQxDzANBgNVBAsTBnFjbG91
ZDEeMBwGA1UEAxMVaW0tc2VydmVyLmh0eXNhcHAuY29tMRwwGgYDVQQFExM3OTE2
NTMzOTk2MzI4NDE5ODY1MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA
sv1qHlmIDEPS7XYSk0KaW/pBEBv5yvXL0DsyMTwgGByJlVSWtihs158pKMLeLQtv
4rEC72uTEj81XK6iWDHnd1Y/UUtui5qCWIlOUyo9ajXR0WLjJrwUi4iCtwodHk6H
A/93kY2vG9qI0GeDWYbxLk+3+SUwyN+jAre212QH71sRPwmXbuzWICipwmmw442M
PKhL7qxOq9lDsC19m/8yLH8dOfftU5W1PrdFjzohBqakUnHrSPMlL3UlPsu1JFqa
QezsjWTGz6qhcQBGND/iV7droklUFyw7gDqiRR0Wyq8TzeNzUgEWPNrqMJf+Ly+h
64jxngPO58PfmBwQNDKdgQIDAQABoDMwMQYJKoZIhvcNAQkOMSQwIjAgBgNVHREE
GTAXghVpbS1zZXJ2ZXIuaHR5c2FwcC5jb20wDQYJKoZIhvcNAQELBQADggEBAIFF
dv/3JOYnDVwy+v1qLD8ZncitlnNg2jDxbqhAPMhinbx6Itbxs+88a4q+mckkFtz0
tNfWnSlaYgIHWe26316pw1OE4IrUADO4Vffe2W4JFKIpyzlfnyQeh/rOAXp8RUaO
VGVrRRZbIsVdF4PuEJxrTWF1eld/FLLQWECJ2V3C/4BSIQsqm8wOZBO4y5OpV/AN
8rCR7rBjFh+PcjYvsScnNux3X/yqiNUQoUpiU60hj8cYLqwCJlCwvx0Su9dR5iun
JGe0BX1yjLaSk23h10+y1a06R5OGUTsDvPoW2yJkVrBFkovL6t3DfBKum7AJHR1g
RmQm5pfNEd3DfVTzoT4=
-----END CERTIFICATE REQUEST-----
@@ -0,0 +1,27 @@
-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEAsv1qHlmIDEPS7XYSk0KaW/pBEBv5yvXL0DsyMTwgGByJlVSW
tihs158pKMLeLQtv4rEC72uTEj81XK6iWDHnd1Y/UUtui5qCWIlOUyo9ajXR0WLj
JrwUi4iCtwodHk6HA/93kY2vG9qI0GeDWYbxLk+3+SUwyN+jAre212QH71sRPwmX
buzWICipwmmw442MPKhL7qxOq9lDsC19m/8yLH8dOfftU5W1PrdFjzohBqakUnHr
SPMlL3UlPsu1JFqaQezsjWTGz6qhcQBGND/iV7droklUFyw7gDqiRR0Wyq8TzeNz
UgEWPNrqMJf+Ly+h64jxngPO58PfmBwQNDKdgQIDAQABAoIBAB+dk3j454cDE+bN
zEomoY1NjuCBkIXBFNcbHaqErEaWA9dUsapLSa5sdqC0ivn54zFvgs03eyrl708H
qbVaW0BBA74gTM5r5EovNp6J/38bMoyBow3ceuSKoEwkhTAtPrv+C+ix1hRdbX0i
S5kstL0xZ5WidBOHLQv1114EVUJ5z8MT/ZhIRKwIY2HMqcs2d63Bat0ojOte+64n
Yj8DFpvAH6QT89AyIIeR/NMAp8Z/ilfo/Jo/qawcSaqMi5u3But6E/t+isWnolFX
LeLzQ91Ro1qGmp1tndVX0J2ZCKblilP/I3q8I8TObv+TOk+8qUTL+0+Nf8LLoGcI
dCMhnmECgYEA4PrVxdLnci8N4x6BXe5PQpEpa1oMKIVuxgjmmqJZZhbGCDgr+0Ab
0+yaLeRpnccvACwxkZic/R3UxuskJMOablN6CNgrMO3nOvZ0v0ZIAqAyS2BH9j1g
farsCM+zjzK6JAXH43vNg0uarjxg6IxAt6s5KKLm5xVXdrC+thtFGssCgYEAy6tD
MhywAahHjJAXe0xH9E1Z40QNcDEfJRS4osodn4b6d3URTL4/TeklT3aAqU3QFNuy
AjhKv0AGJTVDpWzmU9wG+0qqJL0WjWEJJ+CsiHvG7K7EN17VORRXfZAXH+vbFF6h
2qGqUaOJCki7jd/+G5Q7Qp9GUcoIjrSSANn+o2MCgYEA27F2ITiDVEhIullmoM/+
zBUuqisDpmouMuosLiKNRBjHBu27XR1MT1VDdb8Pt8fyyKtfODscSjvgNOMXp2Lv
If8YMxzMiHo4i6ZxePrrhMzkcCC0BOwIlo7a8PvJ7vLtPBH9ENIrbKPeh3hkdZHH
/NMR/PGeo1d+0mNjyDa286MCgYBjejEF5vEovhLEWxS9ClMSxj0jPff6VmPJ7scH
7ARwCLOJaUqb20h8O2YX29+X0gPSTEQzxV7s7s6RmeSChiAx0YQvdRaJfznmsACS
07AxsZNFw07fZJhsmrzo/VnuI3sMBfS0HsZbva6PsVq6Py+UNOCE99qW1EE9woCV
neQ71QKBgQCBuWfeOrEGaZNQn1Pl7jdhY9+EKd6uQuQ9dUn/Q1mp15hrJbnva8Dz
IEZ3xUrgglUdR1M46EXdFEKuwzijbU4OWdHRQ3Md3Z7y3eSFW+U86nNKl8TjInjO
5fAnU4vWN0UQvWIwUtnNIOridOATkFhksJ4UyncDLv+Pj5q6+GxPqA==
-----END RSA PRIVATE KEY-----
@@ -0,0 +1,115 @@
-----BEGIN CERTIFICATE-----
MIIHITCCBQmgAwIBAgIUbEw16Oxm5tp0dQZvqlg5MhH8e5IwDQYJKoZIhvcNAQEL
BQAwWzELMAkGA1UEBhMCQ04xJTAjBgNVBAoTHFRydXN0QXNpYSBUZWNobm9sb2dp
ZXMsIEluYy4xJTAjBgNVBAMTHFRydXN0QXNpYSBEViBUTFMgUlNBIENBIDIwMjQw
HhcNMjYwNjIyMDQwMDAwWhcNMjYwOTIwMDM1OTU5WjAgMR4wHAYDVQQDExVpbS1z
ZXJ2ZXIuaHR5c2FwcC5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
AQCy/WoeWYgMQ9LtdhKTQppb+kEQG/nK9cvQOzIxPCAYHImVVJa2KGzXnykowt4t
C2/isQLva5MSPzVcrqJYMed3Vj9RS26LmoJYiU5TKj1qNdHRYuMmvBSLiIK3Ch0e
TocD/3eRja8b2ojQZ4NZhvEuT7f5JTDI36MCt7bXZAfvWxE/CZdu7NYgKKnCabDj
jYw8qEvurE6r2UOwLX2b/zIsfx059+1TlbU+t0WPOiEGpqRScetI8yUvdSU+y7Uk
WppB7OyNZMbPqqFxAEY0P+JXt2uiSVQXLDuAOqJFHRbKrxPN43NSARY82uowl/4v
L6HriPGeA87nw9+YHBA0Mp2BAgMBAAGjggMWMIIDEjAMBgNVHRMBAf8EAjAAMB8G
A1UdIwQYMBaAFGF1BU4a9Q/BYCAgwijZi7PiwX20MIGXBggrBgEFBQcBAQSBijCB
hzBDBggrBgEFBQcwAoY3aHR0cDovL2ljYS53dC50cnVzdGFzaWEuY29tL1RydXN0
QXNpYURWVExTUlNBQ0EyMDI0LmNydDBABggrBgEFBQcwAYY0aHR0cDovL29jc3Au
d3QudHJ1c3Rhc2lhLmNvbS9UcnVzdEFzaWFEVlRMU1JTQUNBMjAyNDAgBgNVHREE
GTAXghVpbS1zZXJ2ZXIuaHR5c2FwcC5jb20wEwYDVR0gBAwwCjAIBgZngQwBAgEw
EwYDVR0lBAwwCgYIKwYBBQUHAwEwSAYDVR0fBEEwPzA9oDugOYY3aHR0cDovL2Ny
bC53dC50cnVzdGFzaWEuY29tL1RydXN0QXNpYURWVExTUlNBQ0EyMDI0LmNybDAd
BgNVHQ4EFgQUdltCRbULLFkqwGyD8KGJllujctkwDgYDVR0PAQH/BAQDAgWgMIIB
gAYKKwYBBAHWeQIEAgSCAXAEggFsAWoAdwAlt+/eoRMBk+2TB5dwqjIqJmIN41rI
qnx1GX3gsangZQAAAZ7t5FoRAAAEAwBIMEYCIQDU7rsiBCJAOMq/zvgURwUO4y+t
1KAkEFHBVYGXowZJPAIhAIWRui/EAGv8cu40jStpXU/qOsmAQgdkyi2fOPEDqo4/
AHYA1219ENGn9XfCx+lf1wC/+YLJM1pl4dCzAXMXwMjFaXcAAAGe7eReugAABAMA
RzBFAiB6NvHf1WyBUTdWWYK2mhz/e7QytNclFeWjU/5TWGENrgIhAPjCxM44Q9Qm
JOFSXywANvMURq+977PfkKWyGd9AT2RmAHcAr2eIO1ewTt2Pptl+9i6o64EKx3Fg
8CReVdYML+eFhzoAAAGe7eRf2AAABAMASDBGAiEAoMDPdK+J9TfEy/kHL6e+EQGB
0AJsLTiMhxOUnZBLp9ACIQCg/fOEY0UVx8MaE27RptKl8lFc5pEXu2jv+gYRrOe6
ozANBgkqhkiG9w0BAQsFAAOCAgEAeilUjDXR5iSFG3IDxF2R1WQ8Wc5YpPzVMg5X
nIJY12HPGOIdEVV0Vx95E06etgs2Fw0ApGrtMkS/8ZZHAdwaZnulyQsrp9Cew5pR
IZ2vqJKy6LymBdDZc0UdGxAbGZU5LlOobAEPyZ3nOOHSVsOnfAXRvgHuAyGZDNw8
/GPWdxI3X4TO2V3kPS/huVoXYsGfi2YIKvNdB8QPYMRGFpKNzIuhhy545PMS5iO3
txjp3yeu5xpiFUeTwYmOCQaQgby99RvohvNIFoBVV5GeESrOsyndcW4wIh+C/bxQ
gbG4uTLDnGLso0Ds+mCCZcFt8hmygAPZBmjDLQufjfOmvtNjFbeZ1+t2OfeNX8OF
d3o80JiEzc7/nM7v4LAKmjktjYu2uh18VJczCLzFUzBWTEExM7hAlKVpjYYNK3SA
Cvi5xM7T356+h8tUCECtW7BFnGe3YvI2m3S/3rX8EaiUmDpAQdIUJeszEDnIpkB4
qHeexhE97AaoPn5FnsEtduvnfMO4aIMF0WQ6TxOp0Lfo2UDzjJaTqZouc+wRq59x
gOzTS33g+Emm3vV8tXAHUmTAuc9rEayZP/Uo65m6N9QmbWRBrC9w05DV4rET2ilS
XIKcuTCs1+C2/9cli2cfslf8uXlo5rs5U4N9AFwDs46xTnCWBKTdm0rmx/L+Za8l
CQtbyB0=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIGvTCCBKWgAwIBAgIUHJ5rQS3rCoVGHeA9vjCYTQVziIswDQYJKoZIhvcNAQEM
BQAwWDELMAkGA1UEBhMCQ04xJTAjBgNVBAoTHFRydXN0QXNpYSBUZWNobm9sb2dp
ZXMsIEluYy4xIjAgBgNVBAMTGVRydXN0QXNpYSBUTFMgUlNBIFJvb3QgQ0EwHhcN
MjQwNTE1MDYxOTE1WhcNMzQwNTE1MDYxOTE0WjBbMQswCQYDVQQGEwJDTjElMCMG
A1UEChMcVHJ1c3RBc2lhIFRlY2hub2xvZ2llcywgSW5jLjElMCMGA1UEAxMcVHJ1
c3RBc2lhIERWIFRMUyBSU0EgQ0EgMjAyNDCCAiIwDQYJKoZIhvcNAQEBBQADggIP
ADCCAgoCggIBAK2GCKULRuSjgEhVn7j0cnfuSmrxS5/5H77qmOJwWJkMVE+SgBQn
4mkoxVwF03E517T5YZZumwy5iCxktdnKp5Uq0C7td8yYnZgLb18pUeuzfkJBNWvI
MccfeGCI6qdnl1nGv15loYjP0TEt7C9VyVrK+zmeTxdkBb5xP/hQPFVRWQROnruX
gs7G1jbEX3Hhih+OR1dxcQkk7yVM493zuDVBBlNqH4KA/FawaGNcA/KRKHI0cqyT
Q/GjthO3yyivTlu07/QGV5VTl2oor9ntyXdCmEktu0aKH3kOLRjBE5CiT55Gts7d
1MBRwI3pAjLtDia4+Sz0XmPB/mH1/KO7EKtg+5XVZe3amDpboawWAS2oaKuDKWx/
fh5AA0ViSS+8nDAbrxE4b/gPno28GZSG41VELtSxZvgA0T8lc1oBBywQc0BWfCC9
PoSl2xSxhjKjJfY+od+EALfmEnEH3A53iK4z4gqpBo8O29omZ8HYxO9Tb5aemgla
gP+8oWmxv6aZwYOpWHb3AqOxEoTMV0VwzfEqLsMGcP6koLCB51uPGu8kDF8PIpbu
jallH/6K9QySf3S2H4SCme94tAjznz58En48PGoQPCSTDM6CyeEZqR3tEAnUF1gS
4T+hkEiskHWLQ6QosxoFX2+qMMeQNHictf5O/ZPXvIv34yxE5kiiBWN3AgMBAAGj
ggF6MIIBdjASBgNVHRMBAf8ECDAGAQH/AgEAMB8GA1UdIwQYMBaAFLgHkXlcBvRG
/XtZylomkadFK/hTMIGTBggrBgEFBQcBAQSBhjCBgzBBBggrBgEFBQcwAoY1aHR0
cDovL2ljYS53dC50cnVzdGFzaWEuY29tL1RydXN0QXNpYVRMU1JTQVJvb3RDQS5j
cnQwPgYIKwYBBQUHMAGGMmh0dHA6Ly9vY3NwLnd0LnRydXN0YXNpYS5jb20vVHJ1
c3RBc2lhVExTUlNBUm9vdENBMBMGA1UdIAQMMAowCAYGZ4EMAQIBMB0GA1UdJQQW
MBQGCCsGAQUFBwMBBggrBgEFBQcDAjBGBgNVHR8EPzA9MDugOaA3hjVodHRwOi8v
Y3JsLnd0LnRydXN0YXNpYS5jb20vVHJ1c3RBc2lhVExTUlNBUm9vdENBLmNybDAd
BgNVHQ4EFgQUYXUFThr1D8FgICDCKNmLs+LBfbQwDgYDVR0PAQH/BAQDAgGGMA0G
CSqGSIb3DQEBDAUAA4ICAQCpIjcVXxHv5IjZr2h2+PLiKzm8CW0EoSftEvjLDMec
Roc7okR/tz3WZ/NWS6YxURaE0Qbt0ZHLOtPisaACcpOCVeoLhHLfF54U2RQposA/
NK8Gdu1vNHWHDpF9H2MiY+VBPKr+lctYcvV/MipWa7SsBkZEu/Srd5Gp5tU4G7L0
a/X7xcv/lwjbdvARe0Rz5tp1BEn0P/7exFqN3gkqujo5RvMoegi0EgsuM+ya5bCu
vyfbp9Qzah+atfvzN+sYVaJjxnjogil7RRPNq+eR3nGocA+U0ypKl4ifpr+droZ9
Fk7axJ7Fs3kkIxomcSINLFv0+m2IFOQvUWn5OBXkeP+NcEaVySJx/TTpHJ7U+Ill
DzZZhAoqdxGb0Ac0SLmtGHnQVCs93aWIMcTNYqJtagE39kN+EcPAVb1znp8a7tw6
D6kI1cKTLBHMyDBtUAZVmboDacJmQodTQ+tFbIMCRzrP2M51CiXDK4L6W27C8b9V
Upq9WlIFeTfIqtkAq1iHyjv0YdoReprIHD2r/9g5X4mbMmsOFyaMT+lwnT5S0StD
+eiMQauCYnfqf88qJwbT5xCgRbd01yVm/V448GS/5XCZNSer4dToOzGcRvjBJTft
XbdVkfXe0MAP3xhbpoihEKPyorWPLWr/iWcVDq4o25yFTSe/WFa30ZwieLhMDign
Gg==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIF/TCCBOWgAwIBAgIRALLcTDSTLXCc1L8LCZQBaVwwDQYJKoZIhvcNAQEMBQAw
fjELMAkGA1UEBhMCUEwxIjAgBgNVBAoTGVVuaXpldG8gVGVjaG5vbG9naWVzIFMu
QS4xJzAlBgNVBAsTHkNlcnR1bSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEiMCAG
A1UEAxMZQ2VydHVtIFRydXN0ZWQgTmV0d29yayBDQTAeFw0yNTEwMDcwNjU3MDha
Fw0yOTAxMTQwNjU3MDhaMFgxCzAJBgNVBAYTAkNOMSUwIwYDVQQKExxUcnVzdEFz
aWEgVGVjaG5vbG9naWVzLCBJbmMuMSIwIAYDVQQDExlUcnVzdEFzaWEgVExTIFJT
QSBSb290IENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAwxa4G2qk
RHPl1k70uc9bC8HRmoH1Y7CPQ8G7CFoaeuEHdiYfj2lWvv42YNAMg82U6ufFLVwv
BRYCngqoL+VgJlSW+JhAHayunXRnL1T7lGOY4yZKg8aVtglDUM0Nfd5EDmAST1s1
vb+ZOG19bNriaHMf+TGlGRBzBSrDMhmF6jSq3UIeMI0/nrUeYdVvvQBycq0SP6qm
SXPyhhWVDBBfUWTO/3e4yW2s5dWY8ZkubOPJRPm1QycITfZ+3kR5u7KMHNrTS2wu
1sN4t0zVpOTa3IqODv8Pw6ZgJijPNr/6VwrsWz/pMBZ7xNvE1GSgMPvl/R1xkt0p
j0FY3gCtOv09fBqosRfwTjR4WCXWhSHreR3Q3KvPYjywx5eL1tCf0/483sXj/DqD
cIQhHQnCofy7KCFlU2B6kG2WOFv/8dd6W23TyXBJSrodOtBQ2jIgGeSLP+vVFiY3
PPt1nrAHcLgUYHfc9g9cUgq8XW2NUQraxRjIm23csIOzf6NOeEyYJavyfi4gXoIV
ptbYj6zlzTKGyPnk2oniOz6TxRNq/8f3GPxnte8YLFSrQNNsTe3FyLc4T2TElExP
oM2upcYnJXUnbcbanI6wBZnVKBHFIdS4/MeWq0pkWWFrE/xLzJKmD6RRvw5YkNmC
gzmmX7P6bpKzzTMOhajxKdOrWa3W297UK4ECAwEAAaOCAZowggGWMHUGCCsGAQUF
BwEBBGkwZzA7BggrBgEFBQcwAoYvaHR0cDovL3RydXN0YXNpYS5yZXBvc2l0b3J5
LmNlcnR1bS5wbC9jdG5jYS5jZXIwKAYIKwYBBQUHMAGGHGh0dHA6Ly9zdWJjYS5v
Y3NwLWNlcnR1bS5jb20wHwYDVR0jBBgwFoAUCHbNywf/JPbFze27kLzihDdGdfcw
EgYDVR0TAQH/BAgwBgEB/wIBAjBtBgNVHR8EZjBkMDKgMKAuhixodHRwOi8vY2Vy
dHVtLWNybC53dC50cnVzdGFzaWEuY29tL2N0bmNhLmNybDAuoCygKoYoaHR0cDov
L3RydXN0YXNpYS5jcmwuY2VydHVtLnBsL2N0bmNhLmNybDATBgNVHSUEDDAKBggr
BgEFBQcDATAOBgNVHQ8BAf8EBAMCAQYwNQYDVR0gBC4wLDAIBgZngQwBAgEwCAYG
Z4EMAQICMAcGBWeBDAEBMA0GCysGAQQBgttOAgEBMB0GA1UdDgQWBBS4B5F5XAb0
Rv17WcpaJpGnRSv4UzANBgkqhkiG9w0BAQwFAAOCAQEAIf2vyzSuFzECCTH3LPB/
bmUH1aXbVm8zVwxof+4tn8EsNYH8CgM2AHxRkXP5jOitqylySAuVIATJLYFmBQJO
XMCgf9NbbuG8P1VgnUQuUhQMChp2zT946Y55xZVANGg4o2+orw4SpclSy/R7eayX
Lccr++uqke9gJlX3FCpi4Sa8sg/kSfSv4p7tuwu4YAk+XPBew3jQc9wueAJwQ/Rz
H4LtICrekL0QuNHb0BhPcn4qELBF6f+IrOBA2MKw1m0C9y6uO8K+xd1JMpG0/RYZ
cGIH+rR5fBymQSNuD+F5I2PeXMPpigPcEdOi/NWZcCLncJLDrEU62T8hkif6MQ4F
Dw==
-----END CERTIFICATE-----
@@ -0,0 +1,115 @@
-----BEGIN CERTIFICATE-----
MIIHITCCBQmgAwIBAgIUbEw16Oxm5tp0dQZvqlg5MhH8e5IwDQYJKoZIhvcNAQEL
BQAwWzELMAkGA1UEBhMCQ04xJTAjBgNVBAoTHFRydXN0QXNpYSBUZWNobm9sb2dp
ZXMsIEluYy4xJTAjBgNVBAMTHFRydXN0QXNpYSBEViBUTFMgUlNBIENBIDIwMjQw
HhcNMjYwNjIyMDQwMDAwWhcNMjYwOTIwMDM1OTU5WjAgMR4wHAYDVQQDExVpbS1z
ZXJ2ZXIuaHR5c2FwcC5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
AQCy/WoeWYgMQ9LtdhKTQppb+kEQG/nK9cvQOzIxPCAYHImVVJa2KGzXnykowt4t
C2/isQLva5MSPzVcrqJYMed3Vj9RS26LmoJYiU5TKj1qNdHRYuMmvBSLiIK3Ch0e
TocD/3eRja8b2ojQZ4NZhvEuT7f5JTDI36MCt7bXZAfvWxE/CZdu7NYgKKnCabDj
jYw8qEvurE6r2UOwLX2b/zIsfx059+1TlbU+t0WPOiEGpqRScetI8yUvdSU+y7Uk
WppB7OyNZMbPqqFxAEY0P+JXt2uiSVQXLDuAOqJFHRbKrxPN43NSARY82uowl/4v
L6HriPGeA87nw9+YHBA0Mp2BAgMBAAGjggMWMIIDEjAMBgNVHRMBAf8EAjAAMB8G
A1UdIwQYMBaAFGF1BU4a9Q/BYCAgwijZi7PiwX20MIGXBggrBgEFBQcBAQSBijCB
hzBDBggrBgEFBQcwAoY3aHR0cDovL2ljYS53dC50cnVzdGFzaWEuY29tL1RydXN0
QXNpYURWVExTUlNBQ0EyMDI0LmNydDBABggrBgEFBQcwAYY0aHR0cDovL29jc3Au
d3QudHJ1c3Rhc2lhLmNvbS9UcnVzdEFzaWFEVlRMU1JTQUNBMjAyNDAgBgNVHREE
GTAXghVpbS1zZXJ2ZXIuaHR5c2FwcC5jb20wEwYDVR0gBAwwCjAIBgZngQwBAgEw
EwYDVR0lBAwwCgYIKwYBBQUHAwEwSAYDVR0fBEEwPzA9oDugOYY3aHR0cDovL2Ny
bC53dC50cnVzdGFzaWEuY29tL1RydXN0QXNpYURWVExTUlNBQ0EyMDI0LmNybDAd
BgNVHQ4EFgQUdltCRbULLFkqwGyD8KGJllujctkwDgYDVR0PAQH/BAQDAgWgMIIB
gAYKKwYBBAHWeQIEAgSCAXAEggFsAWoAdwAlt+/eoRMBk+2TB5dwqjIqJmIN41rI
qnx1GX3gsangZQAAAZ7t5FoRAAAEAwBIMEYCIQDU7rsiBCJAOMq/zvgURwUO4y+t
1KAkEFHBVYGXowZJPAIhAIWRui/EAGv8cu40jStpXU/qOsmAQgdkyi2fOPEDqo4/
AHYA1219ENGn9XfCx+lf1wC/+YLJM1pl4dCzAXMXwMjFaXcAAAGe7eReugAABAMA
RzBFAiB6NvHf1WyBUTdWWYK2mhz/e7QytNclFeWjU/5TWGENrgIhAPjCxM44Q9Qm
JOFSXywANvMURq+977PfkKWyGd9AT2RmAHcAr2eIO1ewTt2Pptl+9i6o64EKx3Fg
8CReVdYML+eFhzoAAAGe7eRf2AAABAMASDBGAiEAoMDPdK+J9TfEy/kHL6e+EQGB
0AJsLTiMhxOUnZBLp9ACIQCg/fOEY0UVx8MaE27RptKl8lFc5pEXu2jv+gYRrOe6
ozANBgkqhkiG9w0BAQsFAAOCAgEAeilUjDXR5iSFG3IDxF2R1WQ8Wc5YpPzVMg5X
nIJY12HPGOIdEVV0Vx95E06etgs2Fw0ApGrtMkS/8ZZHAdwaZnulyQsrp9Cew5pR
IZ2vqJKy6LymBdDZc0UdGxAbGZU5LlOobAEPyZ3nOOHSVsOnfAXRvgHuAyGZDNw8
/GPWdxI3X4TO2V3kPS/huVoXYsGfi2YIKvNdB8QPYMRGFpKNzIuhhy545PMS5iO3
txjp3yeu5xpiFUeTwYmOCQaQgby99RvohvNIFoBVV5GeESrOsyndcW4wIh+C/bxQ
gbG4uTLDnGLso0Ds+mCCZcFt8hmygAPZBmjDLQufjfOmvtNjFbeZ1+t2OfeNX8OF
d3o80JiEzc7/nM7v4LAKmjktjYu2uh18VJczCLzFUzBWTEExM7hAlKVpjYYNK3SA
Cvi5xM7T356+h8tUCECtW7BFnGe3YvI2m3S/3rX8EaiUmDpAQdIUJeszEDnIpkB4
qHeexhE97AaoPn5FnsEtduvnfMO4aIMF0WQ6TxOp0Lfo2UDzjJaTqZouc+wRq59x
gOzTS33g+Emm3vV8tXAHUmTAuc9rEayZP/Uo65m6N9QmbWRBrC9w05DV4rET2ilS
XIKcuTCs1+C2/9cli2cfslf8uXlo5rs5U4N9AFwDs46xTnCWBKTdm0rmx/L+Za8l
CQtbyB0=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIGvTCCBKWgAwIBAgIUHJ5rQS3rCoVGHeA9vjCYTQVziIswDQYJKoZIhvcNAQEM
BQAwWDELMAkGA1UEBhMCQ04xJTAjBgNVBAoTHFRydXN0QXNpYSBUZWNobm9sb2dp
ZXMsIEluYy4xIjAgBgNVBAMTGVRydXN0QXNpYSBUTFMgUlNBIFJvb3QgQ0EwHhcN
MjQwNTE1MDYxOTE1WhcNMzQwNTE1MDYxOTE0WjBbMQswCQYDVQQGEwJDTjElMCMG
A1UEChMcVHJ1c3RBc2lhIFRlY2hub2xvZ2llcywgSW5jLjElMCMGA1UEAxMcVHJ1
c3RBc2lhIERWIFRMUyBSU0EgQ0EgMjAyNDCCAiIwDQYJKoZIhvcNAQEBBQADggIP
ADCCAgoCggIBAK2GCKULRuSjgEhVn7j0cnfuSmrxS5/5H77qmOJwWJkMVE+SgBQn
4mkoxVwF03E517T5YZZumwy5iCxktdnKp5Uq0C7td8yYnZgLb18pUeuzfkJBNWvI
MccfeGCI6qdnl1nGv15loYjP0TEt7C9VyVrK+zmeTxdkBb5xP/hQPFVRWQROnruX
gs7G1jbEX3Hhih+OR1dxcQkk7yVM493zuDVBBlNqH4KA/FawaGNcA/KRKHI0cqyT
Q/GjthO3yyivTlu07/QGV5VTl2oor9ntyXdCmEktu0aKH3kOLRjBE5CiT55Gts7d
1MBRwI3pAjLtDia4+Sz0XmPB/mH1/KO7EKtg+5XVZe3amDpboawWAS2oaKuDKWx/
fh5AA0ViSS+8nDAbrxE4b/gPno28GZSG41VELtSxZvgA0T8lc1oBBywQc0BWfCC9
PoSl2xSxhjKjJfY+od+EALfmEnEH3A53iK4z4gqpBo8O29omZ8HYxO9Tb5aemgla
gP+8oWmxv6aZwYOpWHb3AqOxEoTMV0VwzfEqLsMGcP6koLCB51uPGu8kDF8PIpbu
jallH/6K9QySf3S2H4SCme94tAjznz58En48PGoQPCSTDM6CyeEZqR3tEAnUF1gS
4T+hkEiskHWLQ6QosxoFX2+qMMeQNHictf5O/ZPXvIv34yxE5kiiBWN3AgMBAAGj
ggF6MIIBdjASBgNVHRMBAf8ECDAGAQH/AgEAMB8GA1UdIwQYMBaAFLgHkXlcBvRG
/XtZylomkadFK/hTMIGTBggrBgEFBQcBAQSBhjCBgzBBBggrBgEFBQcwAoY1aHR0
cDovL2ljYS53dC50cnVzdGFzaWEuY29tL1RydXN0QXNpYVRMU1JTQVJvb3RDQS5j
cnQwPgYIKwYBBQUHMAGGMmh0dHA6Ly9vY3NwLnd0LnRydXN0YXNpYS5jb20vVHJ1
c3RBc2lhVExTUlNBUm9vdENBMBMGA1UdIAQMMAowCAYGZ4EMAQIBMB0GA1UdJQQW
MBQGCCsGAQUFBwMBBggrBgEFBQcDAjBGBgNVHR8EPzA9MDugOaA3hjVodHRwOi8v
Y3JsLnd0LnRydXN0YXNpYS5jb20vVHJ1c3RBc2lhVExTUlNBUm9vdENBLmNybDAd
BgNVHQ4EFgQUYXUFThr1D8FgICDCKNmLs+LBfbQwDgYDVR0PAQH/BAQDAgGGMA0G
CSqGSIb3DQEBDAUAA4ICAQCpIjcVXxHv5IjZr2h2+PLiKzm8CW0EoSftEvjLDMec
Roc7okR/tz3WZ/NWS6YxURaE0Qbt0ZHLOtPisaACcpOCVeoLhHLfF54U2RQposA/
NK8Gdu1vNHWHDpF9H2MiY+VBPKr+lctYcvV/MipWa7SsBkZEu/Srd5Gp5tU4G7L0
a/X7xcv/lwjbdvARe0Rz5tp1BEn0P/7exFqN3gkqujo5RvMoegi0EgsuM+ya5bCu
vyfbp9Qzah+atfvzN+sYVaJjxnjogil7RRPNq+eR3nGocA+U0ypKl4ifpr+droZ9
Fk7axJ7Fs3kkIxomcSINLFv0+m2IFOQvUWn5OBXkeP+NcEaVySJx/TTpHJ7U+Ill
DzZZhAoqdxGb0Ac0SLmtGHnQVCs93aWIMcTNYqJtagE39kN+EcPAVb1znp8a7tw6
D6kI1cKTLBHMyDBtUAZVmboDacJmQodTQ+tFbIMCRzrP2M51CiXDK4L6W27C8b9V
Upq9WlIFeTfIqtkAq1iHyjv0YdoReprIHD2r/9g5X4mbMmsOFyaMT+lwnT5S0StD
+eiMQauCYnfqf88qJwbT5xCgRbd01yVm/V448GS/5XCZNSer4dToOzGcRvjBJTft
XbdVkfXe0MAP3xhbpoihEKPyorWPLWr/iWcVDq4o25yFTSe/WFa30ZwieLhMDign
Gg==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIF/TCCBOWgAwIBAgIRALLcTDSTLXCc1L8LCZQBaVwwDQYJKoZIhvcNAQEMBQAw
fjELMAkGA1UEBhMCUEwxIjAgBgNVBAoTGVVuaXpldG8gVGVjaG5vbG9naWVzIFMu
QS4xJzAlBgNVBAsTHkNlcnR1bSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEiMCAG
A1UEAxMZQ2VydHVtIFRydXN0ZWQgTmV0d29yayBDQTAeFw0yNTEwMDcwNjU3MDha
Fw0yOTAxMTQwNjU3MDhaMFgxCzAJBgNVBAYTAkNOMSUwIwYDVQQKExxUcnVzdEFz
aWEgVGVjaG5vbG9naWVzLCBJbmMuMSIwIAYDVQQDExlUcnVzdEFzaWEgVExTIFJT
QSBSb290IENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAwxa4G2qk
RHPl1k70uc9bC8HRmoH1Y7CPQ8G7CFoaeuEHdiYfj2lWvv42YNAMg82U6ufFLVwv
BRYCngqoL+VgJlSW+JhAHayunXRnL1T7lGOY4yZKg8aVtglDUM0Nfd5EDmAST1s1
vb+ZOG19bNriaHMf+TGlGRBzBSrDMhmF6jSq3UIeMI0/nrUeYdVvvQBycq0SP6qm
SXPyhhWVDBBfUWTO/3e4yW2s5dWY8ZkubOPJRPm1QycITfZ+3kR5u7KMHNrTS2wu
1sN4t0zVpOTa3IqODv8Pw6ZgJijPNr/6VwrsWz/pMBZ7xNvE1GSgMPvl/R1xkt0p
j0FY3gCtOv09fBqosRfwTjR4WCXWhSHreR3Q3KvPYjywx5eL1tCf0/483sXj/DqD
cIQhHQnCofy7KCFlU2B6kG2WOFv/8dd6W23TyXBJSrodOtBQ2jIgGeSLP+vVFiY3
PPt1nrAHcLgUYHfc9g9cUgq8XW2NUQraxRjIm23csIOzf6NOeEyYJavyfi4gXoIV
ptbYj6zlzTKGyPnk2oniOz6TxRNq/8f3GPxnte8YLFSrQNNsTe3FyLc4T2TElExP
oM2upcYnJXUnbcbanI6wBZnVKBHFIdS4/MeWq0pkWWFrE/xLzJKmD6RRvw5YkNmC
gzmmX7P6bpKzzTMOhajxKdOrWa3W297UK4ECAwEAAaOCAZowggGWMHUGCCsGAQUF
BwEBBGkwZzA7BggrBgEFBQcwAoYvaHR0cDovL3RydXN0YXNpYS5yZXBvc2l0b3J5
LmNlcnR1bS5wbC9jdG5jYS5jZXIwKAYIKwYBBQUHMAGGHGh0dHA6Ly9zdWJjYS5v
Y3NwLWNlcnR1bS5jb20wHwYDVR0jBBgwFoAUCHbNywf/JPbFze27kLzihDdGdfcw
EgYDVR0TAQH/BAgwBgEB/wIBAjBtBgNVHR8EZjBkMDKgMKAuhixodHRwOi8vY2Vy
dHVtLWNybC53dC50cnVzdGFzaWEuY29tL2N0bmNhLmNybDAuoCygKoYoaHR0cDov
L3RydXN0YXNpYS5jcmwuY2VydHVtLnBsL2N0bmNhLmNybDATBgNVHSUEDDAKBggr
BgEFBQcDATAOBgNVHQ8BAf8EBAMCAQYwNQYDVR0gBC4wLDAIBgZngQwBAgEwCAYG
Z4EMAQICMAcGBWeBDAEBMA0GCysGAQQBgttOAgEBMB0GA1UdDgQWBBS4B5F5XAb0
Rv17WcpaJpGnRSv4UzANBgkqhkiG9w0BAQwFAAOCAQEAIf2vyzSuFzECCTH3LPB/
bmUH1aXbVm8zVwxof+4tn8EsNYH8CgM2AHxRkXP5jOitqylySAuVIATJLYFmBQJO
XMCgf9NbbuG8P1VgnUQuUhQMChp2zT946Y55xZVANGg4o2+orw4SpclSy/R7eayX
Lccr++uqke9gJlX3FCpi4Sa8sg/kSfSv4p7tuwu4YAk+XPBew3jQc9wueAJwQ/Rz
H4LtICrekL0QuNHb0BhPcn4qELBF6f+IrOBA2MKw1m0C9y6uO8K+xd1JMpG0/RYZ
cGIH+rR5fBymQSNuD+F5I2PeXMPpigPcEdOi/NWZcCLncJLDrEU62T8hkif6MQ4F
Dw==
-----END CERTIFICATE-----
+13 -6
View File
@@ -1,17 +1,24 @@
<!DOCTYPE html>
<html lang="en">
<html>
<head>
<meta charset="UTF-8" />
<meta
name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"
/>
<script>
var coverSupport =
'CSS' in window &&
typeof CSS.supports === 'function' &&
(CSS.supports('top: env(a)') || CSS.supports('top: constant(a)'));
document.write(
'<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0' +
(coverSupport ? ', viewport-fit=cover' : '') +
'" />',
);
</script>
<title></title>
<!--preload-links-->
<!--app-context-->
</head>
<body>
<div id="app"><!--app-html--></div>
<script type="module" src="/main.js"></script>
<script type="module" src="/src/main.ts"></script>
</body>
</html>
-9
View File
@@ -1,9 +0,0 @@
{
"compilerOptions": {
"jsx": "preserve",
"baseUrl": ".",
"paths": {
"@/*": ["./*"]
}
}
}
-15
View File
@@ -1,15 +0,0 @@
import App from './App';
import { createSSRApp } from 'vue';
import { setupPinia } from './sheep/store';
export function createApp() {
const app = createSSRApp(App);
setupPinia(app);
return {
app,
};
}
-239
View File
@@ -1,239 +0,0 @@
{
"name": "芋道商城",
"appid": "__UNI__460BC4C",
"description": "基于 uni-app + Vue3 技术驱动的在线商城系统,内含诸多功能与丰富的活动,期待您的使用和反馈。",
"versionName": "2.1.0",
"versionCode": 183,
"transformPx": false,
"app-plus": {
"usingComponents": true,
"nvueCompiler": "uni-app",
"nvueStyleCompiler": "uni-app",
"compilerVersion": 3,
"nvueLaunchMode": "fast",
"splashscreen": {
"alwaysShowBeforeRender": true,
"waiting": true,
"autoclose": true,
"delay": 0
},
"safearea": {
"bottom": {
"offset": "none"
}
},
"modules": {
"Payment": {},
"Share": {},
"VideoPlayer": {},
"OAuth": {}
},
"distribute": {
"android": {
"permissions": [
"<uses-feature android:name=\"android.hardware.camera\"/>",
"<uses-feature android:name=\"android.hardware.camera.autofocus\"/>",
"<uses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\"/>",
"<uses-permission android:name=\"android.permission.VIBRATE\"/>",
"<uses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\"/>",
"<uses-permission android:name=\"android.permission.ACCESS_MOCK_LOCATION\"/>",
"<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>",
"<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>",
"<uses-permission android:name=\"android.permission.CALL_PHONE\"/>",
"<uses-permission android:name=\"android.permission.CAMERA\"/>",
"<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>",
"<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>",
"<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>",
"<uses-permission android:name=\"android.permission.GET_ACCOUNTS\"/>",
"<uses-permission android:name=\"android.permission.GET_TASKS\"/>",
"<uses-permission android:name=\"android.permission.INTERNET\"/>",
"<uses-permission android:name=\"android.permission.MODIFY_AUDIO_SETTINGS\"/>",
"<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>",
"<uses-permission android:name=\"android.permission.READ_CONTACTS\"/>",
"<uses-permission android:name=\"android.permission.READ_LOGS\"/>",
"<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>",
"<uses-permission android:name=\"android.permission.READ_SMS\"/>",
"<uses-permission android:name=\"android.permission.RECEIVE_BOOT_COMPLETED\"/>",
"<uses-permission android:name=\"android.permission.RECORD_AUDIO\"/>",
"<uses-permission android:name=\"android.permission.SEND_SMS\"/>",
"<uses-permission android:name=\"android.permission.SYSTEM_ALERT_WINDOW\"/>",
"<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>",
"<uses-permission android:name=\"android.permission.WRITE_CONTACTS\"/>",
"<uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\"/>",
"<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>",
"<uses-permission android:name=\"android.permission.WRITE_SMS\"/>",
"<uses-permission android:name=\"android.permission.RECEIVE_USER_PRESENT\"/>"
],
"minSdkVersion": 21,
"schemes": "shopro"
},
"ios": {
"urlschemewhitelist": [
"baidumap",
"iosamap"
],
"dSYMs": false,
"privacyDescription": {
"NSPhotoLibraryUsageDescription": "需要同意访问您的相册选取图片才能完善该条目",
"NSPhotoLibraryAddUsageDescription": "需要同意访问您的相册才能保存该图片",
"NSCameraUsageDescription": "需要同意访问您的摄像头拍摄照片才能完善该条目",
"NSUserTrackingUsageDescription": "开启追踪并不会获取您在其它站点的隐私信息,该行为仅用于标识设备,保障服务安全和提升浏览体验"
},
"urltypes": "shopro",
"capabilities": {
"entitlements": {
"com.apple.developer.associated-domains": [
"applinks:shopro.sheepjs.com"
]
}
},
"idfa": true
},
"sdkConfigs": {
"speech": {
"ifly": {}
},
"ad": {},
"oauth": {
"apple": {},
"weixin": {
"appid": "wxae7a0c156da9383b",
"UniversalLinks": "https://shopro.sheepjs.com/uni-universallinks/__UNI__082C0BA/"
}
},
"payment": {
"weixin": {
"__platform__": [
"ios",
"android"
],
"appid": "wxae7a0c156da9383b",
"UniversalLinks": "https://shopro.sheepjs.com/uni-universallinks/__UNI__082C0BA/"
},
"alipay": {
"__platform__": [
"ios",
"android"
]
}
},
"share": {
"weixin": {
"appid": "wxae7a0c156da9383b",
"UniversalLinks": "https://shopro.sheepjs.com/uni-universallinks/__UNI__082C0BA/"
}
}
},
"orientation": [
"portrait-primary"
],
"splashscreen": {
"androidStyle": "common",
"iosStyle": "common",
"useOriginalMsgbox": true
},
"icons": {
"android": {
"hdpi": "unpackage/res/icons/72x72.png",
"xhdpi": "unpackage/res/icons/96x96.png",
"xxhdpi": "unpackage/res/icons/144x144.png",
"xxxhdpi": "unpackage/res/icons/192x192.png"
},
"ios": {
"appstore": "unpackage/res/icons/1024x1024.png",
"ipad": {
"app": "unpackage/res/icons/76x76.png",
"app@2x": "unpackage/res/icons/152x152.png",
"notification": "unpackage/res/icons/20x20.png",
"notification@2x": "unpackage/res/icons/40x40.png",
"proapp@2x": "unpackage/res/icons/167x167.png",
"settings": "unpackage/res/icons/29x29.png",
"settings@2x": "unpackage/res/icons/58x58.png",
"spotlight": "unpackage/res/icons/40x40.png",
"spotlight@2x": "unpackage/res/icons/80x80.png"
},
"iphone": {
"app@2x": "unpackage/res/icons/120x120.png",
"app@3x": "unpackage/res/icons/180x180.png",
"notification@2x": "unpackage/res/icons/40x40.png",
"notification@3x": "unpackage/res/icons/60x60.png",
"settings@2x": "unpackage/res/icons/58x58.png",
"settings@3x": "unpackage/res/icons/87x87.png",
"spotlight@2x": "unpackage/res/icons/80x80.png",
"spotlight@3x": "unpackage/res/icons/120x120.png"
}
}
}
}
},
"quickapp": {},
"quickapp-native": {
"icon": "/static/logo.png",
"package": "com.example.demo",
"features": [
{
"name": "system.clipboard"
}
]
},
"quickapp-webview": {
"icon": "/static/logo.png",
"package": "com.example.demo",
"minPlatformVersion": 1070,
"versionName": "1.0.0",
"versionCode": 100
},
"mp-weixin": {
"appid": "wx66186af0759f47c9",
"setting": {
"urlCheck": false,
"minified": true,
"postcss": true
},
"optimization": {
"subPackages": true
},
"plugins": {},
"lazyCodeLoading": "requiredComponents",
"usingComponents": {},
"permission": {},
"requiredPrivateInfos": [
"chooseAddress"
]
},
"mp-alipay": {
"usingComponents": true
},
"mp-baidu": {
"usingComponents": true
},
"mp-toutiao": {
"usingComponents": true
},
"mp-jd": {
"usingComponents": true
},
"h5": {
"template": "index.html",
"router": {
"mode": "hash",
"base": "./"
},
"sdkConfigs": {
"maps": {}
},
"async": {
"timeout": 20000
},
"title": "芋道商城",
"optimization": {
"treeShaking": {
"enable": true
}
}
},
"vueVersion": "3",
"_spaceID": "192b4892-5452-4e1d-9f09-eee1ece40639",
"locale": "zh-Hans",
"fallbackLocale": "zh-Hans"
}
@@ -0,0 +1,78 @@
/*
en.strings
APBToygerFacade
Created by shouyi.www on 2017/6/1.
Copyright © 2017年 DTF. All rights reserved.
*/
"APBToygerFacade:取消"="Cancel";
"APBToygerFacade:取消(引导页)"="Cancel";
"APBToygerFacade:再试一次"="Try Again";
"APBToygerFacade:再试一次(验证中断)"="Try Again";
"APBToygerFacade:再试一次(网络中断)"="Try Again";
"APBToygerFacade:退出"="Quit";
"APBToygerFacade:退出(无法启动相机)"="Quit";
"APBToygerFacade:退出(验证中断)"="Quit";
"APBToygerFacade:确定"="OK";
"APBToygerFacade:确定(引导页)"="OK";
"APBToygerFacade:继续"="Continue";
"APBToygerFacade:我知道了"="Got it";
"APBToygerFacade:我知道了(系统不支持刷脸)"="Got it";
"APBToygerFacade:其他登录方式"="Another login method";
"APBToygerFacade:刷脸失败"="Face scan failed";
"APBToygerFacade:当前设备不支持刷脸"="Face scan not supported on your device";
"APBToygerFacade:当前系统不支持刷脸"="Face scan not supported on your device system";
"APBToygerFacade:无法启动相机"="No camera permission";
"APBToygerFacade:请到\“设置-隐私-相机\”开启权限"="Please allow to access your camera in \"Settings\"-\"Privacy\"-\"Camera\"";
"APBToygerFacade:立即开启"="OK";
"APBToygerFacade:刷脸仅在iOS7及以上系统可用"="Face scan is only available on iOS8 or above";
"APBToygerFacade:系统错误"="System error";
"APBToygerFacade:确定退出吗?"="Are you sure to quit face scan?";
"APBToygerFacade:确定退出吗?(引导页)"="Are you sure to quit face scan?";
"APBToygerFacade:露个脸就能通过"="You can succeed by simply showing your face";
"APBToygerFacade:露个脸就能通过(引导页)"="You can succeed by simply showing your face";
"APBToygerFacade:操作超时"="Time out";
"APBToygerFacade:正对手机,更容易成功"="Face straight at the phone and ensure you have enough light";
"APBToygerFacade:提示:正对手机,更容易成功"="Face straight at the phone and ensure you have enough light";
"APBToygerFacade:本次操作失败"="Sorry, face scan failed";
"APBToygerFacade:网络不给力"="Network connection failed";
"APBToygerFacade:登录中断"="Login interrupted";
"APBToygerFacade:验证中断"="Face scan interrupted";
"APBToygerFacade:刷脸验证"="Face Scan";
"APBToygerFacade:请把脸放入框内保持不动"="Put your face into the frame";
"APBToygerFacade:靠近一点"="Move closer";
"APBToygerFacade:没有检测到脸"="No face";
"APBToygerFacade:再清晰一点"="Face not clear";
"APBToygerFacade:脸部亮一点"="More light";
"APBToygerFacade:请正对手机"="No face";
"APBToygerFacade:把脸移入圈内"="No face";
"APBToygerFacade:离远一点"="Move farther";
"APBToygerFacade:请保持不动"="Stay still";
"APBToygerFacade:请注视屏幕"="Open your eyes";
"APBToygerFacade:眨眨眼"="Blink";
"APBToygerFacade:蚂蚁佐罗提供技术支持"="";
"APBToygerFacade:选择其他验证方式"="Use a different verification method";
"APBToygerFacade:拿起手机眨眨眼"="Blink";
"APBToygerFacade:拿起手机向左摇头"="Turn Head Left";
"APBToygerFacade:拿起手机向右摇头"="Turn Head Right";
"APBToygerFacade:向左摇头"="Turn Head Left";
"APBToygerFacade:向右摇头"="Turn Head Right";
"APBToygerFacade:正在处理"="Processing";
"APBToygerFacade:首次使用,请开通刷脸"="For the first time use, please enable Face Scan";
"APBToygerFacade:立即开通"="Enable";
"APBToygerFacade:下次再说"="Later";
"APBToygerFacade:请把手机正对面部"="Face straight at the phone";
"APBToygerFacade:即将开始人脸检测"="Get ready for face recognition";
"APBToygerFacade:没有认出你"="Face scan failed";
"APBToygerFacade:未能识别人脸"="Face not detected";
"APBToygerFacade:人脸检测中"="Face Scan";
"APBToygerFacade:刷脸失败次数过多,请稍后再试"="Too many failed attempts, please try again later";
"APBToygerFacade:请保持单人操作"=" ";
@@ -0,0 +1,69 @@
"APBToygerFacade:取消"="Batalkan";
"APBToygerFacade:取消(引导页)"="Batalkan";
"APBToygerFacade:再试一次"="Harap coba lagi";
"APBToygerFacade:再试一次(验证中断)"="Harap coba lagi";
"APBToygerFacade:再试一次(网络中断)"="Harap coba lagi";
"APBToygerFacade:退出"="Keluar";
"APBToygerFacade:退出(无法启动相机)"="Keluar";
"APBToygerFacade:退出(验证中断)"="Keluar";
"APBToygerFacade:确定"="OK";
"APBToygerFacade:确定(引导页)"="OK";
"APBToygerFacade:继续"="Lanjutkan";
"APBToygerFacade:我知道了"="OK";
"APBToygerFacade:我知道了(系统不支持刷脸)"="OK";
"APBToygerFacade:其他登录方式"="Ubah Metode Logon";
"APBToygerFacade:刷脸失败"="Pengenalan wajah gagal";
"APBToygerFacade:当前设备不支持刷脸"="Perangkat Anda tidak mendukung pengenalan wajah";
"APBToygerFacade:当前系统不支持刷脸"="Sistem saat ini tidak mendukung pengenalan wajah";
"APBToygerFacade:无法启动相机"="Tidak Memiliki Izin Akses Kamera";
"APBToygerFacade:请到\“设置-隐私-相机\”开启权限"="Buka Pengaturan > Privasi > Kamera dan izinkan akses";
"APBToygerFacade:立即开启"="OK";
"APBToygerFacade:刷脸仅在iOS7及以上系统可用"="Hanya iOS 7 dan setelahnya yang mendukung pengenalan wajah";
"APBToygerFacade:系统错误"="Terjadi Kesalahan Sistem";
"APBToygerFacade:确定退出吗?"="Apakah Anda yakin ingin keluar?";
"APBToygerFacade:确定退出吗?(引导页)"="Apakah Anda yakin ingin keluar?";
"APBToygerFacade:露个脸就能通过"="Anda hanya perlu memperlihatkan wajah Anda";
"APBToygerFacade:露个脸就能通过(引导页)"="Anda hanya perlu memperlihatkan wajah Anda";
"APBToygerFacade:操作超时"="Waktu operasi habis";
"APBToygerFacade:正对手机,更容易成功"="Arahkan wajah lurus menghadap ponsel untuk membuat wajah Anda lebih mudah dipindai";
"APBToygerFacade:本次操作失败"="Operasi gagal";
"APBToygerFacade:网络不给力"="Kondisi jaringan tidak memenuhi persyaratan";
"APBToygerFacade:登录中断"="Logon Terganggu";
"APBToygerFacade:验证中断"="Verifikasi terputus";
"APBToygerFacade:刷脸验证"="Verifikasi dengan Pengenalan Wajah";
"APBToygerFacade:请把脸放入框内保持不动"="Posisikan wajah Anda di dalam bingkai dan jangan bergerak";
"APBToygerFacade:靠近一点"="Harap dekatkan wajah";
"APBToygerFacade:没有检测到脸"="Tidak ada wajah terdeteksi";
"APBToygerFacade:再清晰一点"="Perjelas wajah Anda";
"APBToygerFacade:脸部亮一点"="Terangi wajah Anda";
"APBToygerFacade:请正对手机"="Arahkan wajah lurus menghadap ponsel";
"APBToygerFacade:请露出正脸"="Tunjukkan bagian depan wajah Anda";
"APBToygerFacade:把脸移入圈内"="Posisikan wajah pada lingkaran";
"APBToygerFacade:离远一点"="Harap jauhkan wajah";
"APBToygerFacade:请保持不动"="Tetap tenang";
"APBToygerFacade:请注视屏幕"="Lihat layar";
"APBToygerFacade:眨眨眼"="Harap kedipkan mata";
"APBToygerFacade:蚂蚁佐罗提供技术支持"="";
"APBToygerFacade:选择其他验证方式"="Ubah Metode Verifikasi";
"APBToygerFacade:拿起手机眨眨眼"="Harap kedipkan mata";
"APBToygerFacade:拿起手机向左摇头"="Harap menoleh ke kiri";
"APBToygerFacade:拿起手机向右摇头"="Harap menoleh ke kanan";
"APBToygerFacade:向左摇头"="Harap menoleh ke kiri";
"APBToygerFacade:向右摇头"="Harap menoleh ke kanan";
"APBToygerFacade:正在处理"="Memproses";
"APBToygerFacade:首次使用,请开通刷脸"="Aktifkan pengenalan wajah untuk melanjutkan";
"APBToygerFacade:立即开通"="Aktifkan";
"APBToygerFacade:下次再说"="Lain Kali";
"APBToygerFacade:请把手机正对面部"="Arahkan wajah lurus menghadap ponsel";
"APBToygerFacade:即将开始人脸检测"="Memulai pengenalan wajah";
"APBToygerFacade:没有认出你"="Pengenalan wajah gagal";
"APBToygerFacade:未能识别人脸"="Tidak ada wajah terdeteksi";
"APBToygerFacade:人脸检测中"="Pengenalan wajah dalam proses";
"APBToygerFacade:刷脸失败次数过多,请稍后再试"="Pengenalan wajah terlalu sering dilakukan. Harap coba lagi nanti";
"APBToygerFacade:请保持单人操作"=" ";
@@ -0,0 +1,69 @@
"APBToygerFacade:取消"="キャンセル";
"APBToygerFacade:取消(引导页)"="キャンセル";
"APBToygerFacade:再试一次"="もう一度お試しください";
"APBToygerFacade:再试一次(验证中断)"="もう一度お試しください";
"APBToygerFacade:再试一次(网络中断)"="もう一度お試しください";
"APBToygerFacade:退出"="終了";
"APBToygerFacade:退出(无法启动相机)"="終了";
"APBToygerFacade:退出(验证中断)"="終了";
"APBToygerFacade:确定"="OK";
"APBToygerFacade:确定(引导页)"="OK";
"APBToygerFacade:继续"="続行";
"APBToygerFacade:我知道了"="OK";
"APBToygerFacade:我知道了(系统不支持刷脸)"="OK";
"APBToygerFacade:其他登录方式"="ログイン方法を切り替え";
"APBToygerFacade:刷脸失败"="顔を認識できませんでした";
"APBToygerFacade:当前设备不支持刷脸"="お使いのデバイスは顔認識をサポートしていません";
"APBToygerFacade:当前系统不支持刷脸"="顔認識をサポートしていないシステムです";
"APBToygerFacade:无法启动相机"="カメラにアクセスできません";
"APBToygerFacade:请到\“设置-隐私-相机\”开启权限"="[設定] > [プライバシー] > [カメラ] に移動し、アクセスを許可してください";
"APBToygerFacade:立即开启"="OK";
"APBToygerFacade:刷脸仅在iOS7及以上系统可用"="顔認識は iOS 7 以降でサポートされています";
"APBToygerFacade:系统错误"="システムエラー";
"APBToygerFacade:确定退出吗?"="終了してもよろしいですか";
"APBToygerFacade:确定退出吗?(引导页)"="終了してもよろしいですか";
"APBToygerFacade:露个脸就能通过"="顔を見せるだけです";
"APBToygerFacade:露个脸就能通过(引导页)"="顔を見せるだけです";
"APBToygerFacade:操作超时"="操作がタイムアウトしました";
"APBToygerFacade:正对手机,更容易成功"="顔をスキャンしやすいように、電話の方を向いてください";
"APBToygerFacade:本次操作失败"="操作に失敗しました";
"APBToygerFacade:网络不给力"="ネットワークの状態が要件を満たしていません";
"APBToygerFacade:登录中断"="ログインが中断されました";
"APBToygerFacade:验证中断"="検証が中断されました";
"APBToygerFacade:刷脸验证"="顔認識による検証";
"APBToygerFacade:请把脸放入框内保持不动"="フレームの内側に顔が入るようにして、動かないでください";
"APBToygerFacade:靠近一点"="近づいてください";
"APBToygerFacade:没有检测到脸"="顔が検出されません";
"APBToygerFacade:再清晰一点"="顔をはっきりさせてください";
"APBToygerFacade:脸部亮一点"="顔を明るくしてください";
"APBToygerFacade:请正对手机"="電話の方を向いてください";
"APBToygerFacade:请露出正脸"="顔の正面を見せてください";
"APBToygerFacade:把脸移入圈内"="顔を円の中に入れてください";
"APBToygerFacade:离远一点"="離れてください";
"APBToygerFacade:请保持不动"="動かないでください";
"APBToygerFacade:请注视屏幕"="画面を見てください";
"APBToygerFacade:眨眨眼"="まばたきしてください";
"APBToygerFacade:蚂蚁佐罗提供技术支持"="";
"APBToygerFacade:选择其他验证方式"="検証方法を変更";
"APBToygerFacade:拿起手机眨眨眼"="まばたきしてください";
"APBToygerFacade:拿起手机向左摇头"="頭を左に";
"APBToygerFacade:拿起手机向右摇头"="頭を右に";
"APBToygerFacade:向左摇头"="頭を左に";
"APBToygerFacade:向右摇头"="頭を右に";
"APBToygerFacade:正在处理"="処理中";
"APBToygerFacade:首次使用,请开通刷脸"="顔認識を有効化して続行します";
"APBToygerFacade:立即开通"="有効化";
"APBToygerFacade:下次再说"="後で";
"APBToygerFacade:请把手机正对面部"="電話の方を向いてください";
"APBToygerFacade:即将开始人脸检测"="顔認識を開始";
"APBToygerFacade:没有认出你"="顔を認識できませんでした";
"APBToygerFacade:未能识别人脸"="顔が検出されません";
"APBToygerFacade:人脸检测中"="顔を認識中です";
"APBToygerFacade:刷脸失败次数过多,请稍后再试"="顔認識が頻繁に実行されています。後でもう一度やり直してください";
"APBToygerFacade:请保持单人操作"=" ";
@@ -0,0 +1,70 @@
"APBToygerFacade:取消"="취소";
"APBToygerFacade:取消(引导页)"="취소";
"APBToygerFacade:再试一次"="다시 시도하세요";
"APBToygerFacade:再试一次(验证中断)"="다시 시도하세요";
"APBToygerFacade:再试一次(网络中断)"="다시 시도하세요";
"APBToygerFacade:退出"="종료";
"APBToygerFacade:退出(无法启动相机)"="종료";
"APBToygerFacade:退出(验证中断)"="종료";
"APBToygerFacade:确定"="확인";
"APBToygerFacade:确定(引导页)"="확인";
"APBToygerFacade:继续"="계속";
"APBToygerFacade:我知道了"="확인";
"APBToygerFacade:我知道了(系统不支持刷脸)"="확인";
"APBToygerFacade:其他登录方式"="로그온 방법 전환";
"APBToygerFacade:刷脸失败"="안면 인식에 실패했습니다";
"APBToygerFacade:当前设备不支持刷脸"="귀하의 디바이스는 안면 인식을 지원하지 않습니다";
"APBToygerFacade:当前系统不支持刷脸"="현재 시스템은 안면 인식을 지원하지 않습니다";
"APBToygerFacade:无法启动相机"="카메라 권한이 없습니다";
"APBToygerFacade:请到\“设置-隐私-相机\”开启权限"="설정 > 개인 > 카메라에서 접근 권한을 부여하십시오";
"APBToygerFacade:立即开启"="OK";
"APBToygerFacade:刷脸仅在iOS7及以上系统可用"="iOS 7 및 그 이상의 버전에서만 안면 인식이 지원됩니다";
"APBToygerFacade:系统错误"="시스템 오류";
"APBToygerFacade:确定退出吗?"="정말로 종료하시겠습니까?";
"APBToygerFacade:确定退出吗?(引导页)"="정말로 종료하시겠습니까?";
"APBToygerFacade:露个脸就能通过"="얼굴만 보여주시면 됩니다";
"APBToygerFacade:露个脸就能通过(引导页)"="얼굴만 보여주시면 됩니다";
"APBToygerFacade:操作超时"="작업 시간이 초과되었습니다";
"APBToygerFacade:正对手机,更容易成功"="얼굴을 더 쉽게 스캔할 수 있도록 휴대전화를 정면으로 바라보세요";
"APBToygerFacade:本次操作失败"="작동에 실패했습니다";
"APBToygerFacade:网络不给力"="네트워크 상태가 요구 사항을 충족하지 않습니다";
"APBToygerFacade:登录中断"="로그온이 중단되었습니다";
"APBToygerFacade:验证中断"="확인이 중단되었습니다";
"APBToygerFacade:刷脸验证"="안면 인식을 통한 인증";
"APBToygerFacade:请把脸放入框内保持不动"="얼굴이 프레임 안으로 들어오도록 위치한 다음 움직이지 말고 가만히 계십시오";
"APBToygerFacade:靠近一点"="더 가까이 움직이세요";
"APBToygerFacade:没有检测到脸"="감지된 얼굴이 없습니다";
"APBToygerFacade:再清晰一点"="얼굴을 좀더 선명하게 만드세요";
"APBToygerFacade:脸部亮一点"="얼굴을 밝게 만드세요";
"APBToygerFacade:请正对手机"="휴대전화를 정면으로 바라보세요";
"APBToygerFacade:请露出正脸"="얼굴의 정면을 보여주세요";
"APBToygerFacade:把脸移入圈内"="얼굴이 원 안에 들어오도록 움직이세요";
"APBToygerFacade:离远一点"="더 멀리 움직이세요";
"APBToygerFacade:请保持不动"="가만히 계십시오";
"APBToygerFacade:请注视屏幕"="화면을 바라보세요";
"APBToygerFacade:眨眨眼"="눈을 깜빡이세요";
"APBToygerFacade:蚂蚁佐罗提供技术支持"="";
"APBToygerFacade:选择其他验证方式"="인증 방법을 변경합니다";
"APBToygerFacade:拿起手机眨眨眼"="눈을 깜빡이세요";
"APBToygerFacade:拿起手机向左摇头"="좌측으로 고개를 돌립니다";
"APBToygerFacade:拿起手机向右摇头"="우측으로 고개를 돌립니다";
"APBToygerFacade:向左摇头"="좌측으로 고개를 돌립니다";
"APBToygerFacade:向右摇头"="우측으로 고개를 돌립니다";
"APBToygerFacade:正在处理"="처리 중";
"APBToygerFacade:首次使用,请开通刷脸"="안면 인식을 활성화하여 계속 진행합니다";
"APBToygerFacade:立即开通"="활성화하기";
"APBToygerFacade:下次再说"="나중에 하기";
"APBToygerFacade:请把手机正对面部"="휴대전화를 정면으로 바라보세요";
"APBToygerFacade:即将开始人脸检测"="안면 인식 시작";
"APBToygerFacade:没有认出你"="안면 인식에 실패했습니다";
"APBToygerFacade:未能识别人脸"="감지된 얼굴이 없습니다";
"APBToygerFacade:人脸检测中"="얼굴 인식 중";
"APBToygerFacade:刷脸失败次数过多,请稍后再试"="안면 인식이 연속으로 실행되었습니다. 나중에 다시 시도하세요";
"APBToygerFacade:请保持单人操作"=" ";
@@ -0,0 +1,78 @@
/*
zh-HK.strings
APBToygerFacade
Created by shouyi.www on 2017/6/1.
Copyright © 2017年 DTF. All rights reserved.
*/
"APBToygerFacade:取消"="取消";
"APBToygerFacade:取消(引导页)"="取消";
"APBToygerFacade:再试一次"="再試一次";
"APBToygerFacade:再试一次(验证中断)"="再試一次";
"APBToygerFacade:再试一次(网络中断)"="再試一次";
"APBToygerFacade:退出"="退出";
"APBToygerFacade:退出(验证中断)"="退出";
"APBToygerFacade:退出(无法启动相机)"="退出";
"APBToygerFacade:确定"="確定";
"APBToygerFacade:确定(引导页)"="確定";
"APBToygerFacade:继续"="继续";
"APBToygerFacade:我知道了"="我知道了";
"APBToygerFacade:我知道了(系统不支持刷脸)"="我知道了";
"APBToygerFacade:其他登录方式"="其他登录方式";
"APBToygerFacade:刷脸失败"="刷臉失敗";
"APBToygerFacade:当前设备不支持刷脸"="目前系統不支援刷臉";
"APBToygerFacade:当前系统不支持刷脸"="目前設備不支援刷臉";
"APBToygerFacade:无法启动相机"="無法啟動相機";
"APBToygerFacade:请到\“设置-隐私-相机\”开启权限"="請到“設置-隱私-相機”開啓權限";
"APBToygerFacade:立即开启"="開通權限";
"APBToygerFacade:刷脸仅在iOS7及以上系统可用"="刷脸仅在iOS7及以上系统可用";
"APBToygerFacade:系统错误"="系統錯誤";
"APBToygerFacade:确定退出吗?"="確定退出嗎?";
"APBToygerFacade:确定退出吗?(引导页)"="確定退出嗎?";
"APBToygerFacade:露个脸就能通过"="露個臉就能通過";
"APBToygerFacade:露个脸就能通过(引导页)"="露個臉就能通過";
"APBToygerFacade:操作超时"="操作超時";
"APBToygerFacade:正对手机,更容易成功"="對準手機,更容易成功";
"APBToygerFacade:本次操作失败"="本次操作失敗";
"APBToygerFacade:网络不给力"="網絡異常,請稍後再試";
"APBToygerFacade:登录中断"="登入中斷";
"APBToygerFacade:验证中断"="驗證中斷";
"APBToygerFacade:刷脸验证"="刷臉驗證";
"APBToygerFacade:请把脸放入框内保持不动"="請把臉移入圈內保持不動";
"APBToygerFacade:靠近一点"="靠近一點";
"APBToygerFacade:没有检测到脸"="沒有檢測到臉";
"APBToygerFacade:再清晰一点"="再清晰一點";
"APBToygerFacade:脸部亮一点"="光線再亮點";
"APBToygerFacade:请正对手机"="請正視手機";
"APBToygerFacade:请露出正脸"="請露出正臉";
"APBToygerFacade:把脸移入圈内"="把臉移入框內";
"APBToygerFacade:离远一点"="離遠一點";
"APBToygerFacade:请保持不动"="請保持不動";
"APBToygerFacade:请注视屏幕"="請注視屏幕";
"APBToygerFacade:眨眨眼"="眨眨眼";
"APBToygerFacade:蚂蚁佐罗提供技术支持"="";
"APBToygerFacade:选择其他验证方式"="選擇其他驗證方式";
"APBToygerFacade:拿起手机眨眨眼"="拿起手機,眨眨眼";
"APBToygerFacade:拿起手机向左摇头"="拿著手機,向左搖頭";
"APBToygerFacade:拿起手机向右摇头"="拿著手機,向右搖頭";
"APBToygerFacade:向左摇头"="向左搖頭";
"APBToygerFacade:向右摇头"="向右搖頭";
"APBToygerFacade:正在处理"="正在處理";
"APBToygerFacade:首次使用,请开通刷脸"="首次使用,請開通刷臉";
"APBToygerFacade:立即开通"="立即開通";
"APBToygerFacade:下次再说"="下次再說";
"APBToygerFacade:请把手机正对面部"="請把手機正對面部";
"APBToygerFacade:即将开始人脸检测"="即將開始人臉檢測";
"APBToygerFacade:没有认出你"="沒有認出你";
"APBToygerFacade:未能识别人脸"="未能識別人臉";
"APBToygerFacade:人脸检测中"="人臉檢測中";
"APBToygerFacade:刷脸失败次数过多,请稍后再试"="刷臉失敗次數過多,請稍後再試";
"APBToygerFacade:请保持单人操作"="請保持單人操作";
@@ -0,0 +1,83 @@
/*
zh-Hans.strings
APBToygerFacade
Created by shouyi.www on 2017/6/1.
Copyright © 2017年 DTF. All rights reserved.
*/
"APBToygerFacade:取消"="取消";
"APBToygerFacade:取消(引导页)"="取消";
"APBToygerFacade:再试一次"="再试一次";
"APBToygerFacade:再试一次(验证中断)"="再试一次";
"APBToygerFacade:再试一次(网络中断)"="再试一次";
"APBToygerFacade:退出"="退出";
"APBToygerFacade:退出(验证中断)"="退出";
"APBToygerFacade:退出(无法启动相机)"="退出";
"APBToygerFacade:确定"="确定";
"APBToygerFacade:确定(引导页)"="确定";
"APBToygerFacade:继续"="继续";
"APBToygerFacade:我知道了"="我知道了";
"APBToygerFacade:我知道了(系统不支持刷脸)"="我知道了";
"APBToygerFacade:其他登录方式"="其他登录方式";
"APBToygerFacade:刷脸失败"="刷脸失败";
"APBToygerFacade:当前设备不支持刷脸"="当前设备不支持刷脸";
"APBToygerFacade:当前系统不支持刷脸"="当前系统不支持刷脸";
"APBToygerFacade:无法启动相机"="无法启动相机";
"APBToygerFacade:请到\“设置-隐私-相机\”开启权限"="请到“设置-隐私-相机”开启权限";
"APBToygerFacade:立即开启"="立即开启";
"APBToygerFacade:刷脸仅在iOS8及以上版本可用"="刷脸仅在iOS8及以上版本可用";
"APBToygerFacade:系统错误"="系统错误";
"APBToygerFacade:确定退出吗?"="确定退出吗?";
"APBToygerFacade:确定退出吗?(引导页)"="确定退出吗?";
"APBToygerFacade:露个脸就能通过"="露个脸就能通过";
"APBToygerFacade:露个脸就能通过(引导页)"="露个脸就能通过";
"APBToygerFacade:操作超时"="操作超时";
"APBToygerFacade:正对手机,更容易成功"="正对手机,更容易成功";
"APBToygerFacade:本次操作失败"="本次操作失败";
"APBToygerFacade:网络不给力"="网络不给力";
"APBToygerFacade:登录中断"="登录中断";
"APBToygerFacade:验证中断"="验证中断";
"APBToygerFacade:刷脸验证"="刷脸验证";
"APBToygerFacade:请把脸放入框内保持不动"="请把脸移入圈内保持不动";
"APBToygerFacade:靠近一点"="靠近一点";
"APBToygerFacade:没有检测到脸"="没有检测到脸";
"APBToygerFacade:再清晰一点"="再清晰一点";
"APBToygerFacade:脸部亮一点"="脸部亮一点";
"APBToygerFacade:请正对手机"="请正对手机";
"APBToygerFacade:请露出正脸"="请露出正脸";
"APBToygerFacade:把脸移入圈内"="把脸移入圈内";
"APBToygerFacade:离远一点"="离远一点";
"APBToygerFacade:请保持不动"="请保持不动";
"APBToygerFacade:请注视屏幕"="请注视屏幕";
"APBToygerFacade:眨眨眼"="眨眨眼";
"APBToygerFacade:蚂蚁佐罗提供技术支持"="";
"APBToygerFacade:选择其他验证方式"="选择其他验证方式";
"APBToygerFacade:拿起手机眨眨眼"="拿起手机,眨眨眼";
"APBToygerFacade:拿起手机向左摇头"="拿起手机,向左摇头";
"APBToygerFacade:拿起手机向右摇头"="拿起手机,向右摇头";
"APBToygerFacade:向左摇头"="向左摇头";
"APBToygerFacade:向右摇头"="向右摇头";
"APBToygerFacade:正在处理"="正在处理";
"APBToygerFacade:首次使用,请开通刷脸"="首次使用,请开通刷脸";
"APBToygerFacade:立即开通"="立即开通";
"APBToygerFacade:下次再说"="下次再说";
"APBToygerFacade:请把手机正对面部"="请把手机正对面部";
"APBToygerFacade:即将开始人脸检测"="即将开始人脸检测";
"APBToygerFacade:没有认出你"="没有认出你";
"APBToygerFacade:未能识别人脸"="未能识别人脸";
"APBToygerFacade:人脸检测中"="人脸检测中";
"APBToygerFacade:刷脸失败次数过多,请稍后再试"="刷脸失败次数过多,请稍后再试";
"APBToygerFacade:请保持单人操作"="请保持单人操作";
"APBToygerFacade:请缓慢靠近"="请缓慢靠近";
"APBToygerFacade:请缓慢远离"="请缓慢远离";
"APBToygerFacade:请保持不动"="请保持不动";
"APBToygerFacade:把脸移入圈内"="把脸移入圈内";
@@ -0,0 +1,78 @@
/*
zh-Hant.strings
APBToygerFacade
Created by shouyi.www on 2017/6/1.
Copyright © 2017年 DTF. All rights reserved.
*/
"APBToygerFacade:取消"="取消";
"APBToygerFacade:取消(引导页)"="取消";
"APBToygerFacade:再试一次"="再試一次";
"APBToygerFacade:再试一次(验证中断)"="再試一次";
"APBToygerFacade:再试一次(网络中断)"="再試一次";
"APBToygerFacade:退出"="退出";
"APBToygerFacade:退出(验证中断)"="退出";
"APBToygerFacade:退出(无法启动相机)"="退出";
"APBToygerFacade:确定"="確定";
"APBToygerFacade:确定(引导页)"="確定";
"APBToygerFacade:继续"="繼續";
"APBToygerFacade:我知道了"="我知道了";
"APBToygerFacade:我知道了(系统不支持刷脸)"="我知道了";
"APBToygerFacade:其他登录方式"="其他登入方式";
"APBToygerFacade:刷脸失败"="刷臉失敗";
"APBToygerFacade:当前设备不支持刷脸"="目前設備不支援刷臉服務";
"APBToygerFacade:当前系统不支持刷脸"="当前系统不支持刷脸";
"APBToygerFacade:无法启动相机"="無法啟動相機";
"APBToygerFacade:请到\“设置-隐私-相机\”开启权限"="請到“設置-隱私-相機”開啓權限";
"APBToygerFacade:立即开启"="開通權限";
"APBToygerFacade:刷脸仅在iOS8及以上系统可用"="刷脸仅在iOS8及以上系统可用";
"APBToygerFacade:系统错误"="系統錯誤";
"APBToygerFacade:确定退出吗?"="確定退出嗎?";
"APBToygerFacade:确定退出吗?(引导页)"="確定退出嗎?";
"APBToygerFacade:露个脸就能通过"="露個臉就能通過";
"APBToygerFacade:露个脸就能通过(引导页)"="露個臉就能通過";
"APBToygerFacade:操作超时"="操作超時";
"APBToygerFacade:正对手机,更容易成功"="對準手機,更容易成功";
"APBToygerFacade:本次操作失败"="本次操作失敗";
"APBToygerFacade:网络不给力"="網絡異常,請稍後再試";
"APBToygerFacade:登录中断"="登入中斷";
"APBToygerFacade:验证中断"="驗證中斷";
"APBToygerFacade:刷脸验证"="刷臉驗證";
"APBToygerFacade:请把脸放入框内保持不动"="請把臉移入圈內保持不動";
"APBToygerFacade:靠近一点"="靠近一點";
"APBToygerFacade:没有检测到脸"="沒有檢測到臉";
"APBToygerFacade:再清晰一点"="再清晰一點";
"APBToygerFacade:脸部亮一点"="光線再亮點";
"APBToygerFacade:请正对手机"="請正視手機";
"APBToygerFacade:请露出正脸"="請露出正臉";
"APBToygerFacade:把脸移入圈内"="把臉移入框內";
"APBToygerFacade:离远一点"="離遠一點";
"APBToygerFacade:请保持不动"="請保持不動";
"APBToygerFacade:请注视屏幕"="請注視屏幕";
"APBToygerFacade:眨眨眼"="眨眨眼";
"APBToygerFacade:蚂蚁佐罗提供技术支持"="";
"APBToygerFacade:选择其他验证方式"="選擇其他驗證方式";
"APBToygerFacade:拿起手机眨眨眼"="拿起手機,眨眨眼";
"APBToygerFacade:拿起手机向左摇头"="拿起手機,向左搖頭";
"APBToygerFacade:拿起手机向右摇头"="拿起手機,向右搖頭";
"APBToygerFacade:向左摇头"="向左搖頭";
"APBToygerFacade:向右摇头"="向右搖頭";
"APBToygerFacade:正在处理"="正在處理";
"APBToygerFacade:首次使用,请开通刷脸"="首次使用,請開通刷臉";
"APBToygerFacade:立即开通"="立即開通";
"APBToygerFacade:下次再说"="下次再說";
"APBToygerFacade:请把手机正对面部"="請把手機正對面部";
"APBToygerFacade:即将开始人脸检测"="即將開始人臉檢測";
"APBToygerFacade:没有认出你"="沒有認出你";
"APBToygerFacade:未能识别人脸"="未能識別人臉";
"APBToygerFacade:人脸检测中"="人臉檢測中";
"APBToygerFacade:刷脸失败次数过多,请稍后再试"="刷臉失敗次數過多,請稍後再試";
"APBToygerFacade:请保持单人操作"="請保持單人操作";
@@ -0,0 +1,77 @@
//
// APFBaseTask.h
// APFaceDetectBiz
//
// Created by 晗羽 on 8/25/16.
// Copyright © 2016 DTF. All rights reserved.
//
#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
#import <BioAuthEngine/IBioAuthTask.h>
#import <BioAuthEngine/APBTaskContext.h>
#import <BioAuthEngine/APBLogger.h>
#import <BioAuthEngine/AFEAlertView.h>
#import <APBToygerFacade/APBToygerUtils.h>
#import <DTFUtility/APBToygerRemoteConfig.h>
#import <BioAuthEngine/APBToygerBehavlogManager.h>
//#import "APBToygerDataCenter.h"
#import <BioAuthEngine/BioAuthCommonSetting.h>
#import <APBToygerFacade/APBToygerViewController.h>
@class DTFLogMonitor,APBToygerDataCenter;
typedef void (^APFAlertExtraAction)();
@interface APBToygerBaseTask : NSObject <IBioAuthTask>
//协议定义的属性
@property(nonatomic, copy)NSString *taskName; //任务名
@property(nonatomic, strong)APBTaskContext *context; //任务数据
@property(nonatomic, weak)NSMutableDictionary *pipeInfo; //共享数据
//公用属性
@property(nonatomic, weak)UIViewController *parentViewController; //父viewController
@property(nonatomic, weak)APBToygerViewController *currentViewController; //当前viewController
@property(nonatomic, weak)UIView *currentView; //当前显示的界面
@property(nonatomic, copy)commandBlock bioCommandBlock; //对框架进行操作的block
@property(nonatomic, strong)APBToygerRemoteConfig * bisConfig; //bis下放的配置参数
@property(nonatomic, strong)APBToygerDataCenter * dataCenter; //行为日志
@property(nonatomic, copy)NSString *bisToken; //bisToken
@property(nonatomic, assign)NSInteger currentRetryCnt; //当前重试次数
@property(nonatomic, assign)BOOL soundStatus; //当前声音状态
//@property(nonatomic, assign)BOOL isLoginMode; //当前场景是否为登录场景
@property(nonatomic, assign)BOOL isMYBank; //是否是网商银行
@property(nonatomic, strong)DTFLogMonitor *monitor; //埋点
@property(nonatomic, weak) id<BioAuthTaskDelegate> delegate;
- (void)exitWithResult:(APBResultType)result failReason:(NSString *)failReason retCodeSub:(NSString *)retCodeSub retMessageSub:(NSString *)retMessageSub;
- (void)eventQuitWithCompletionCallback:(BioAuthExecCallback)callback;
/**
* 刷脸重试
*/
- (void)handleRetryActionWithScene:(NSString *)scene
buttonTitle:(NSString *)title
retryIncrement:(BOOL)retryIncrement;
/**
* 用户选择退出
*/
- (void)handleExitActionWithScene:(NSString *)scene
buttonTitle:(NSString *)title
exitReason:(APBResultType)reason
extAction:(APFAlertExtraAction)action;
/**
* 用户选择继续
*/
- (void)handleContinueActionWithScene:(NSString *)scene
buttonTitle:(NSString *)title
extaction:(APFAlertExtraAction)action;
/**
* 消除VC的方式,加菲和樱桃不同
*/
- (void)dismissViewControllerAnimated: (BOOL)flag completion:(void (^ __nullable)(void))completion;
@end
@@ -0,0 +1,28 @@
//
// APFCherryDetectTask.h
// APBToygerFacade
//
// Created by richard on 01/02/2018.
// Copyright © 2018 DTF. All rights reserved.
//
#import <Foundation/Foundation.h>
#import <BioAuthEngine/AFEStatusBar.h>
#import <APBToygerFacade/APBToygerBaseTask.h>
#import <BioAuthEngine/BioAuthEngine.h>
#import <DTFUtility/CameraService.h>
#define kFaceCameraPreviewWidth 480
#define kFaceCameraPreviewHeight 640
#define kFaceAVCaptureSessionPreset AVCaptureSessionPreset640x480
@interface APBToygerCherryDetectTask : APBToygerBaseTask <DTFCameraServiceDelegate, DTFFaceViewDelegate, ToygerServiceInstanceDelegate>
@property (nonatomic, assign) BOOL photinusFlags;
@property (nonatomic, strong) DTFCameraService *cameraService;
@property (nonatomic, strong) id instance; //Toyger对象
@property (nonatomic, assign) BOOL useNativePhotinus;
- (void)onButtonCancel;
@end
@@ -0,0 +1,26 @@
//
// APFCherryUploadTask.h
// APFaceDetectBiz
//
// Created by yukun.tyk on 28/11/2016.
// Copyright © 2016 DTF. All rights reserved.
//
#import <Foundation/Foundation.h>
#import <APBToygerFacade/APBToygerUploadTask.h>
#import <BioAuthEngine/APBToygerDataCenter.h>
typedef NS_ENUM(NSInteger, APBToygerRemoteCommand)
{
APBToyger_REMOTE_COMMAND_PASS = 1001, //比对通过
APBToyger_REMOTE_COMMAND_CONTINUE = 1002, //需要继续采集
APBToyger_REMOTE_COMMAND_FAIL = 2001, //比对失败
APBToyger_REMOTE_COMMAND_RETRY = 2002, //需要重试
};
@interface APBToygerCherryUploadTask : APBToygerUploadTask <APBToygerDataCenterDelegate>
- (APBToygerRemoteCommand)remoteCommandFromString:(NSString *)code;
@end
@@ -0,0 +1,36 @@
//
// APFaceFacade.h
// APFaceDetectBiz
//
// Created by 晗羽 on 8/25/16.
// Copyright © 2016 DTF. All rights reserved.
//
#import <Foundation/Foundation.h>
#import <BioAuthEngine/IBioAuthFactor.h>
@interface APBToygerFacade : NSObject <IBioAuthFactor>
+(void)setTokenid:(NSString*)info;
+(NSString*)getTokenid;
@end
#import <APBToygerFacade/APBToygerCherryDetectTask.h>
#import <APBToygerFacade/APBToygerBaseTask.h>
#import <APBToygerFacade/APBToygerPresentTask.h>
#import <APBToygerFacade/APBToygerCherryUploadTask.h>
#import <APBToygerFacade/APBToygerUtils.h>
#import <APBToygerFacade/APBToygerUploadTask.h>
#import <APBToygerFacade/APBToygerFacadeDefine.h>
#import <DTFUtility/APBToygerRemoteConfig.h>
#import <BioAuthEngine/APBToygerBehavlogManager.h>
#import <BioAuthEngine/APBToygerDataCenter.h>
#import <APBToygerFacade/APBToygerViewController.h>
#import <UIKit/UIKit.h>
//! Project version number for APBToygerFacade.
FOUNDATION_EXPORT double APBToygerFacadeVersionNumber;
//! Project version string for APBToygerFacade.
FOUNDATION_EXPORT const unsigned char APBToygerFacadeVersionString[];
@@ -0,0 +1,130 @@
//
// APFCherryDefine.h
// APBToygerFacade
//
// Created by shouyi.www on 27/02/2017.
// Copyright © 2017 DTF. All rights reserved.
//
#ifndef APBToygerFacadeDefine_h
#define APBToygerFacadeDefine_h
static float normalized_distance(float current_value, float best_value, float range) {
return fabsf((current_value - best_value) / range);
}
//typedef struct toyger_status_evaluator_t {
// float pitch;
// float yaw;
// float width;
//
// float best_pitch;
// float best_yaw;
// float best_width;
// float pitch_range;
// float yaw_range;
// float width_range;
// float pitch_weight;
// float yaw_weight;
// float width_weight;
//
// toyger_status_evaluator_t(float pitch_ = -0.3, float pitch_range_ = 0.7, float best_pitch_ = 0, float pitch_weight_ = 1,
// float yaw_ = -0.6, float yaw_range_ = 0.6, float best_yaw_ = 0, float yaw_weight_ = 1,
// float width_ = 0.2, float width_range_ = 1.2, float best_width_ = 0.7, float width_weight_ = 1){
// pitch = pitch_;
// yaw = yaw_;
// width = width_;
// pitch_range = pitch_range_;
// yaw_range = yaw_range_;
// width_range = width_range_;
// best_pitch = best_pitch_;
// best_yaw = best_yaw_;
// best_width = best_width_;
// pitch_weight = pitch_weight_;
// yaw_weight = yaw_weight_;
// width_weight = width_weight_;
// }
//
// void reset(){
// pitch = -0.3;
// yaw = -0.6;
// width = 0.2;
// }
//
// void update(float pitch_, float yaw_, float width_) {
// pitch = pitch_;
// yaw = yaw_;
// width = width_;
// }
//
// float evaluateProgress(float pitch_, float yaw_, float width_){
// return
// (normalized_distance(pitch_, best_pitch, pitch_range) * pitch_weight +
// normalized_distance(yaw_, best_yaw, yaw_range) * yaw_weight +
// normalized_distance(width_, best_width, width_range) * width_weight) /
// (pitch_weight + yaw_weight + width_weight);
// }
//
// float evaluate(){
// return 1 -
// (normalized_distance(pitch, best_pitch, pitch_range) * pitch_weight +
// normalized_distance(yaw, best_yaw, yaw_range) * yaw_weight +
// normalized_distance(width, best_width, width_range) * width_weight) /
// (pitch_weight + yaw_weight + width_weight);
// }
//
//}ToygerStatusEvaluator;
typedef struct apbtoyger_tip_evaluator_t {
bool pose_end;
bool has_face;
bool did_blink;
bool pos_okay;
bool quality_okay;
bool under_exposure;
bool face_width_too_small;
bool face_width_too_big;
bool integrity_fail;
bool yaw_fail;
bool pitch_fail;
bool tremble_fail;
bool did_checkSeven;
int tip_timer_wait_cnt;
bool tip_show_switch;
int tip_message;
apbtoyger_tip_evaluator_t(){
reset();
}
void reset(){
has_face = false;
did_blink = false;
pos_okay = false;
under_exposure = false;
face_width_too_small = false;
integrity_fail = false;
pitch_fail = false;
face_width_too_big = false;
yaw_fail = false;
tremble_fail = false;
tip_timer_wait_cnt = 0;
tip_show_switch = true;
did_checkSeven = false;
quality_okay = false;
pose_end = false;
tip_message =0;
}
}APBToygerTipEvaluator;
//UI样式
typedef enum : NSUInteger {
APBToygerUIStyleFPPCherry = 991, //991 FPP樱桃(废弃)
APBToygerUIStyleCherry, //992 zFace樱桃
APBToygerUIStyleGarfield, //993 加菲
} APBToygerUIStyle;
#endif
@@ -0,0 +1,25 @@
//
// APFPresentTask.h
// APFaceDetectBiz
//
// Created by 晗羽 on 8/26/16.
// Copyright © 2016 DTF. All rights reserved.
//
#import <APBToygerFacade/APBToygerBaseTask.h>
#import <DTFUtility/CameraService.h>
#import <BioAuthEngine/DTFFaceViewProtocol.h>
/**
* @author Skye Ying, 16-08-26 13:08:04
*
* 新建VC,启动整个view
*/
@interface APBToygerPresentTask : APBToygerBaseTask
@property(nonatomic, strong) id<DTFFaceViewProtocol> faceView;
-(void) postCameraPresentwithCamera:(DTFCameraService *) cameraService;
-(void) presentAnimated: (BOOL)flag completion:(void (^ __nullable)(void))completion;
@end
@@ -0,0 +1,27 @@
//
// APBToygerUploadTask.h
// APBToygerFacade
//
// Created by Dan Cong on 29/1/2018.
// Copyright © 2018 DTF. All rights reserved.
//
#import <APBToygerFacade/APBToygerBaseTask.h>
/**
上传基类,用于下沉多种UI(樱桃和加菲)下通用的逻辑
*/
@interface APBToygerUploadTask : APBToygerBaseTask
- (void)uploadImage;
- (void)didFinishUploadWithSuccess:(BOOL)success
retCode:(NSString *)retCode
retMessage:(NSString *)msg
extInfo:(NSString *)ext;
- (void)handleFailWithRetCodeSub:(NSString *)retCodeSub retMessageSub:(NSString *)retMessageSub;
- (void)requestAgain;
@end
@@ -0,0 +1,65 @@
//
// APFUtils.h
// APFaceDetectBiz
//
// Created by 晗羽 on 8/25/16.
// Copyright © 2016 DTF. All rights reserved.
//
#import <Foundation/Foundation.h>
#import <APBToygerFacade/APBToygerFacadeDefine.h>
//#import "APFaceDetectBizFacade.h"
//主线程同步操作
#define SYNC_MAINTHREAD_BEGIN_APBT [APBToygerUtils APBToygerMainThread:^{
#define SYNC_MAINTHREAD_END_APBT }];
#define LOCK(locker, ...) dispatch_semaphore_wait(locker, DISPATCH_TIME_FOREVER); \
__VA_ARGS__; \
dispatch_semaphore_signal(locker);
@class MGLivenessDetectionFrameEncodedData;
@interface APBToygerUtils : NSObject
+ (void)APBToygerMainThread:(dispatch_block_t)block;
+ (NSString *)getTextContentforKey:(NSString*)keyName;
+ (NSString *)localizedTextForKey:(NSString *)key;
+ (NSBundle *)getBundle;
+ (int)getCodefrom:(NSString *)bisToken withLength:(int)codeLen;
//+ (NSString *)getActionNoticeByActionType:(APFLiveActionType) actionType;
//检查文件是否存在
+ (BOOL) checkFileunderPath:(NSString *) filePath;
//写入文件
//如果文件存在,不重写,返回失败。
//如果文件不再在,写入,返回写入结果
+ (BOOL) writeFileunderPath:(NSString *) filePath;
//删除文件
+ (BOOL) removeFileunderPath:(NSString *) filePath;
//随机文件名
+ (NSString *)randomString:(NSInteger)len;
+ (NSString *)localizedStringForKey:(NSString *)key;
+ (UIImage *)loadImageFromBundleNamed:(NSString *)imageName;
+ (UIWindow *)lastWindow;
+ (APBToygerTips *)toygerTipsConfig;
+ (BOOL)useElemeEquipmentUI:(APBToygerRemoteConfig *)config;
+ (BOOL)useNearFarLiveness:(APBToygerRemoteConfig *)config;
@end
@@ -0,0 +1,31 @@
//
// APFViewController.h
// APFaceDetectBiz
//
// Created by 晗羽 on 8/25/16.
// Copyright © 2016 DTF. All rights reserved.
//
#import <UIKit/UIKit.h>
#import <ToygerService/ToygerService.h>
#import <BioAuthEngine/DTFFaceViewProtocol.h>
#import <BioAuthEngine/DTFBaseViewController.h>
@interface APBToygerViewController : DTFBaseViewController
@property(nonatomic, strong) id<DTFFaceViewProtocol> faceView;
- (void)startFaceRecognition:(AVCaptureVideoPreviewLayer *)layer;
- (void)handleFaceStateChange:(ToygerMessage)state
stateTips:(NSString *)tips
actionGuideType:(ToygerStaticMessage)guideType
actionGuide:(NSString *)guide
progress:(CGFloat)progress
extInfo:(NSDictionary *)extInfo;
- (void)faceDectectComplete;
- (void)setPhotinusColor:(UIColor *)color;
- (void)showBlur:(UIImage *)image;
@end
@@ -0,0 +1,6 @@
framework module APBToygerFacade {
umbrella header "APBToygerFacade.h"
export *
module * { export * }
}
@@ -0,0 +1,122 @@
//
// APDID.h
// APPSecuritySDK
//
// Created by eric on 2021/2/7.
// Copyright © 2021 Alipay. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "ASSTokenResult.h"
NS_ASSUME_NONNULL_BEGIN
typedef void(^ASSSecureSdkCallback)(ASSTokenResult* result, NSString* error);
typedef void(^ASSSecureSdkOpenCallback)(NSString* token, int errorCode);
@interface APDID : NSObject
/*
异步初始化vkeyid,推荐在app启动时和收银台页面加载时调用,SDK内部会根据时间戳和设备信息进行判断是否需要进行网络请求,无线程要求
@param params 初始化的字典参数,包含三项内容:tid、userid、environment;
tid与userid选传,传入可以保证vkeyid与其正确关联,取不到传入空字符串;
环境变量请与app设置中的环境相关联,字典中的value包括线上,预发,测试,日常;
@param callback 初始化完成后的结果回调
Asynchronously initialize vkeyid(apdid), recommend to invoke this API when app launches, and cashier view presents.
Inside SDK we will decide whether to launch network request or not based on timestamp and device info.
No thread requirement.
@param params: Initialized parameters, includes 3 key-value pairs: tid, userid,environment;
Tid and userid are optional, they can be associated with vkeyid(apdid) if passed in.
If the values for tid and userid are not available, pass in empty NSString(@"").
@param callback: Callback block when token is available
*/
+ (void) initToken:(NSDictionary*)params callback:(ASSSecureSdkCallback)callback;
/*
同步获取vkeyid完整信息,包括vkeyid,token,clientkey,无网络请求;
如果首次安装app,且首次网络请求未完成或失败,将会返回降级措施:vkeyid会返回客户端随机串clientkey,token将会返回空。
Synchronously get full info of vkeyid(apdid), token and clientkey, no network requests.
If the app is installed for the first time and first network request failed, it would return degradation result: vkeyid would be clientkey which is a client-side generated random string, token would be empty NSString @""
*/
+ (ASSTokenResult*)getToken DEPRECATED_MSG_ATTRIBUTE("use getTokenResult instead");
/*
同步获取vkeyid完整信息,包括vkeyid,token,clientkey,无网络请求;
如果首次安装app,且首次网络请求未完成或失败,将会返回降级措施:vkeyid会返回客户端随机串clientkey,token将会返回空。
Synchronously get full info of vkeyid(apdid), token and clientkey, no network requests.
If the app is installed for the first time and first network request failed, it would return degradation result: vkeyid would be clientkey which is a client-side generated random string, token would be empty NSString @""
*/
+ (ASSTokenResult*)getTokenResult;
+ (ASSTokenResult *)getTokenResult:(NSString*)appName appKeyClient:(NSString*)appKeyClient;
//===================lazada api====================//
/*
异步初始化vkeyid,推荐在app启动时和收银台页面加载时调用,SDK内部会根据时间戳和设备信息进行判断是否需要进行网络请求,无线程要求
@param appName 应用名称
@param appKeyClient 应用客户端密钥
@param callback 初始化完成后的结果回调,以Token作为参数
*/
+ (void)initToken:(NSString *)appName appKeyClient:(NSString *)appKeyClient callback:(ASSSecureSdkOpenCallback)callback;
/*
同步接口返回token
@param appName 应用名称
@param appKeyClient 应用客户端密钥
*/
+ (NSString *)getResultToken;
/*
同步接口返回token
@param appName 应用名称
@param appKeyClient 应用客户端密钥
*/
+ (NSString *)getResultToken:(NSString*)appName appKeyClient:(NSString*)appKeyClient;
//===================TMN api====================//
/*
异步初始化vkeyid,推荐在app启动时和收银台页面加载时调用,SDK内部会根据时间戳和设备信息进行判断是否需要进行网络请求,无线程要求
@param appName 应用名称
@param appKeyClient 应用客户端密钥
@param sessionId 业务方传入自己的id
@param callback 初始化完成后的结果回调,以Token作为参数
*/
+ (void)initToken:(NSString *)appName appKeyClient:(NSString *)appKeyClient sessionId:(NSString *)sessionId callback:(ASSSecureSdkOpenCallback)callback;
//===================ae api====================//
/*
强制上报接口
@param params 初始化的字典参数,包含四项内容:umid、tid、userid、environment;
umid必传,tid与userid选传,传入可以保证vkeyid与其正确关联,取不到传入空字符串;
环境变量请与app设置中的环境相关联,字典中的value包括线上,预发,测试,日常;
@param callback 初始化完成后的结果回调
*/
+ (void) updateToken:(NSDictionary*)params callback:(ASSSecureSdkCallback)callback;
@end
NS_ASSUME_NONNULL_END
@@ -0,0 +1,41 @@
//
// APDeviceColor.h
// APPSecuritySDK
//
// Created by eric on 2021/2/25.
// Copyright © 2021 Alipay. All rights reserved.
//
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@interface APDeviceColor : NSObject
/*
* getColorLabel 设备染色接口
*
* @param bizToken 业务场景
* @param extParams 扩展参数
* @param errInfo 错误信息
*
* @return 设备染色数据
*/
+ (NSString*) getColorLabel: (NSString*) bizToken
ext: (NSDictionary *) extParams
error: (NSError **) errInfo;
/*
* getColorLabel 设备染色接口
*
* @param extParams 扩展参数
* @param errInfo 错误信息
*
* @return 设备染色数据
*/
+ (NSString*) getColorLabel: (NSDictionary *) extParams
error: (NSError **) errInfo;
@end
NS_ASSUME_NONNULL_END
@@ -0,0 +1,32 @@
//
// APDynamic.h
// APPSecuritySDK-Sign
//
// Created by eric on 2021/2/25.
// Copyright © 2021 Alipay. All rights reserved.
//
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@interface APDynamic : NSObject
/*
* dynamicCheckDispatch 动态攻防脚本运行
*
* @param dict 动态攻防脚本
*/
+ (void)dynamicCheckDispatch:(NSDictionary *)dict;
/*
* dynamicCheckDispatch 动态攻防脚本运行,动态攻防脚本运行后会自动上传, 无特殊需求不建议
*
* @param dict 动态攻防脚本
* @param callback 运行结果回调
*/
+ (void)dynamicCheckDispatch:(NSDictionary *)dict withCallBack: (void(^)(Boolean, NSString *))callback;
@end
NS_ASSUME_NONNULL_END
@@ -0,0 +1,21 @@
//
// APRiskConfigReportRequest.h
// APPSecuritySDK-Common
//
// Created by eric on 2021/8/16.
// Copyright © 2021 Alipay. All rights reserved.
//
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@interface APRiskConfigReportRequest : NSObject
@property(nonatomic, strong) NSString* os;
@property(nonatomic, strong) NSString* apdid;
@property(nonatomic, strong) NSDictionary* deviceDataMap;
@end
NS_ASSUME_NONNULL_END
@@ -0,0 +1,19 @@
//
// APRiskConfigReportResponse.h
// APPSecuritySDK-Common
//
// Created by eric on 2021/8/16.
// Copyright © 2021 Alipay. All rights reserved.
//
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@interface APRiskConfigReportResponse : NSObject
@property(nonatomic, strong) NSDictionary* resultData;
@end
NS_ASSUME_NONNULL_END
@@ -0,0 +1,20 @@
//
// APRiskConfigServiceProtocol.h
// APPSecuritySDKAdapter
//
// Created by hongren on 2020/9/7.
// Copyright © 2020 Alipay. All rights reserved.
//
#import "APRiskSyncHandlerProtocol.h"
@protocol APRiskConfigServiceProtocol <NSObject>
@required
- (NSString *)stringValueForKey:(NSString *)key;
- (void)addConfigChangeListener:(id<APRiskSyncHandlerProtocol>)handler forKey:(NSString *)key;
- (void)refreshConfig:(NSDictionary *)tConfigMap from:(NSString *)sourceType;
@end
@@ -0,0 +1,14 @@
//
// APRiskFileUploadProtocol.h
// APPSecuritySDKAdapter
//
// Created by hongren on 2020/9/7.
// Copyright © 2020 Alipay. All rights reserved.
//
@protocol APRiskFileUploadProtocol <NSObject>
@required
- (NSString *)uploadCustomFile:(NSString *)path;
@end
@@ -0,0 +1,21 @@
//
// APRiskLoggerProtocol.h
// APPSecuritySDK-Common
//
// Created by eric on 2021/6/25.
// Copyright © 2021 Alipay. All rights reserved.
//
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@protocol APRiskLoggerProtocol <NSObject>
@required
-(void)print:(NSString *)format, ...NS_REQUIRES_NIL_TERMINATION;
@end
NS_ASSUME_NONNULL_END
@@ -0,0 +1,30 @@
//
// APRiskRPCProtocol.h
// APPSecuritySDKAdapter
//
// Created by hongren on 2020/9/7.
// Copyright © 2020 Alipay. All rights reserved.
//
#import "APRiskReportRequest.h"
#import "APRiskReportResponse.h"
#import "APRiskRpcConfiguration.h"
#import "APRiskConfigReportRequest.h"
#import "APRiskConfigReportResponse.h"
@protocol APRiskRPCProtocol <NSObject>
//gateway
@required
- (APRiskReportResponse *)sendStaticRequest:(APRiskReportRequest *)data
config:(APRiskRpcConfiguration*)cfg;
@required
- (APRiskConfigReportResponse *)sendConfigReportRequest:(APRiskConfigReportRequest *)data
config:(APRiskRpcConfiguration*)cfg;
@required
- (BOOL)updateLog:(NSString*)log
config:(APRiskRpcConfiguration*)cfg;
@end
@@ -0,0 +1,29 @@
//
// APRiskRemoteLoggerProtocol.h
// APPSecuritySDKAdapter
//
// Created by hongren on 2020/9/7.
// Copyright © 2020 Alipay. All rights reserved.
//
@protocol APRiskRemoteLoggerProtocol <NSObject>
@required
- (void)writeLogWithActionId:(NSString *)event
extParams:(NSArray *)args
appId:(NSString *)appId
seed:(NSString *)seed
ucId:(NSString *)ucId;
@required
- (void)writeLogWithActionId:(NSString *)event
extParams:(NSArray *)args
appId:(NSString *)appId
seed:(NSString *)seed
ucId:(NSString *)ucId
bizType:(NSString *)bizType;
@required
- (void)writeEventLog:(NSDictionary *)dict;
@end
@@ -0,0 +1,68 @@
//
// APRiskReportRequest.h
// APPSecuritySDK
//
// Created by hongren on 2020/9/7.
// Copyright © 2020 Alipay. All rights reserved.
//
#import <Foundation/Foundation.h>
@interface APRiskReportRequest : NSObject
/**
* os type: android|ios"
*/
@property(nonatomic, strong) NSString *os;
/**
* device id for ios for static report, or device id for dynamic report both for ios and android
*/
@property(nonatomic, strong) NSString *apdid;
/**
* public region device id for android for static report
*/
@property(nonatomic, strong) NSString *pubApdid;
/**
* private region device id for android for static report
*/
@property(nonatomic, strong) NSString *priApdid;
/**
* apdid token
*/
@property(nonatomic, strong) NSString *token;
/**
* umid token
*/
@property(nonatomic, strong) NSString *umidToken;
/**
* rpc version
*/
@property(nonatomic, strong) NSString *version;
/**
* last apdid time (create time)
*/
@property(nonatomic, strong) NSString *lastTime;
/**
* dynamicKey
*/
@property(nonatomic,strong) NSString* dynamicKey;
/**
* device info map
*/
@property(nonatomic, strong) NSDictionary *dataMap;
+ (Class)dataMapElementClass;
@property(nonatomic,strong) NSDictionary *bizData;
+ (Class)bizDataElementClass;
@end
@@ -0,0 +1,65 @@
//
// APRiskReportResponse.h
// APPSecuritySDK
//
// Created by hongren on 2020/9/7.
// Copyright © 2020 Alipay. All rights reserved.
//
#import <Foundation/Foundation.h>
@interface APRiskReportResponse : NSObject
/**
* success or not
*/
@property(nonatomic, assign) BOOL success;
/**
* result code
*/
@property(nonatomic, strong) NSString *resultCode;
/**
* device id
*/
@property(nonatomic, strong) NSString *apdid;
/**
* apdid token
*/
@property(nonatomic, strong) NSString *token;
/**
* current apdid time (create time)
*/
@property(nonatomic, strong) NSString *currentTime;
/**
* rpc version
*/
@property(nonatomic, strong) NSString *version;
/**
* switch for vkey
*/
@property(nonatomic, strong) NSString *vkeySwitch;
/**
* switch for BugTrack
*/
@property(nonatomic, strong) NSString *bugTrackSwitch;
/**
* version for applist cmd
*/
@property(nonatomic, strong) NSString *appListVer;
@property(nonatomic, strong) NSString *dynamicKey;
@property(nonatomic, strong) NSDictionary *resultData;
+ (Class)resultDataElementClass;
@end
@@ -0,0 +1,20 @@
//
// APRiskRpcConfiguration.h
// APPSecuritySDKAdapter
//
// Created by hongren on 2020/9/8.
// Copyright © 2020 Alipay. All rights reserved.
//
#import <Foundation/Foundation.h>
@interface APRiskRpcConfiguration : NSObject
// 超时时间
@property(nonatomic, assign) int timeout;
// 网关地址
@property(nonatomic, strong) NSString* gatewayURL;
// workspaceid和appid
@property(nonatomic, strong) NSDictionary *headers;
@end
@@ -0,0 +1,21 @@
//
// APRiskSyncHandlerProtocol.h
// APPSecuritySDK
//
// Created by eric on 2020/10/15.
// Copyright © 2020 Alipay. All rights reserved.
//
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@protocol APRiskSyncHandlerProtocol <NSObject>
@required
-(void) handleWithBizType: (NSString *) bizType andData: (NSString *) data;
@end
NS_ASSUME_NONNULL_END
@@ -0,0 +1,28 @@
//
// APRiskSyncServiceProtocol.h
// APPSecuritySDK
//
// Created by eric on 2020/10/15.
// Copyright © 2020 Alipay. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "APRiskSyncHandlerProtocol.h"
NS_ASSUME_NONNULL_BEGIN
static NSString* const kEdgeBizTypeGlobal = @"EDGE-GLOBAL";
static NSString* const kEdgeBizTypeSingle = @"EDGE-SINGLE";
static NSString* const kEdgeBizTypeUid = @"EDGE-SINGLE-USER";
static NSString* const kEdgeBizTypeSyncDegradeToConfig = @"EDGE-SYNC-DEGRADE-TO-CONFIG";
@protocol APRiskSyncServiceProtocol <NSObject>
@required
-(void) registerHandler:(id<APRiskSyncHandlerProtocol>)handler;
-(void) registerSyncBiz;
@end
NS_ASSUME_NONNULL_END
@@ -0,0 +1,41 @@
//
// APSecRDS.h
// APSecRDS
//
// Created by xingchen on 15/4/8.
// Copyright (c) 2015年 Alipay. All rights reserved.
//
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
@interface APSecRDS : NSObject
/*
appname 当前app的名称
appver 当前app的版本
sdkname 当前sdk的名称
sdkver 当前sdk的版本
user 淘宝/支付宝身份
pagesrc 淘宝/支付宝
page 当前页面标识
*/
-(void) onPageWithView:(NSString*)pageName args:(NSDictionary*) inArgs;
-(NSString*) onPageEndWithView:(NSString*) pageName user:(NSString*) userName;
-(NSString*) onPageEndZipDataWithView:(NSString*)pageName user:(NSString*)userName;
-(void) onControlClickWithView:(NSString*) pageName ctrl: (NSString*)ctrlName;
//按键信息
-(void) onKeyDownWithView:(NSString*) pageName ctrl:(NSString*) ctrlName keyCode:(NSString*)keyValue;
//焦点信息
-(void) onGetFocusWithView:(NSString*)pageName ctrl:(NSString*) ctrlName;
-(void) onLostFocusWithView:(NSString*) pageName ctrl:(NSString*) ctrlName;
//触屏信息
-(void) onTouchScreenWithView:(NSString*)pageName ctrl:(NSString*) ctrlName point:(CGPoint) pt;
@end
@@ -0,0 +1,48 @@
//
// APSecStore.h
// APPSecuritySDK
//
// Created by eric on 2021/3/10.
// Copyright © 2021 Alipay. All rights reserved.
//
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@interface APSecStore : NSObject
/*
*功能: 从keychain中载入字符串
*线程安全: 是
*可重入: 是
*@return: 成功返回key对应字符串,失败返回nil
*@param key:不能为nil
*@param error:失败时保存错误信息
*/
+(NSString*) loadKey:(NSString*) key error:(NSError **)error;
/*
*功能: 将字符串(键-值对)存入keychain
*线程安全: 是
*可重入: 是
*@return: 成功返回yes,失败返回no
*@param key:不能为nil
*@param value:不能为nil
*@param error:失败时保存错误信息
*/
+(BOOL) saveKey:(NSString*) key Value:(NSString*)value error:(NSError **)error;
/*
*功能: 从keychain中删除字符串(键-值对)
*线程安全: 是
*可重入: 是
*@return: 成功返回yes,失败返回no
*@param key:不能为nil
*@param error:失败时保存错误信息
*/
+(BOOL) deleteKey:(NSString*) key error:(NSError **)error;
@end
NS_ASSUME_NONNULL_END
@@ -0,0 +1,117 @@
//
// ASSSecureSdk.h
// APSecSecuritySDK
//
// Created by xingchen on 15/2/26.
// Copyright (c) 2015年 Alipay. All rights reserved.
//
#import <Foundation/Foundation.h>
//初始化API的字典参数中,TID的key
//key for TID in the NSDictionary parameter for initToken:callback: API
extern NSString * const ASS_TID;
//初始化API的字典参数中,userid的key
//key for USERID in the NSDictionary parameter for initToken:callback: API
extern NSString * const ASS_USERID;
//初始化API的字典参数中,环境变量的key
//key for server environment configuration in the NSDictionary parameter for initToken:callback: API
extern NSString * const ASS_ENVIRONMENT;
//初始化API的字典参数中,环境变量的value,代表线上环境
//value for server configuration in the NSDictionary parameter for initToken:callback: API, stands for online environment
extern NSString * const ASS_ENVIRONMENT_ONLINE;
//初始化API的字典参数中,环境变量的value,代表测试环境
//value for server configuration in the NSDictionary parameter for initToken:callback: API, stands for test environment
extern NSString * const ASS_ENVIRONMENT_SIT;
//初始化API的字典参数中,环境变量的value,代表开发环境
//value for server configuration in the NSDictionary parameter for initToken:callback: API, stands for daily environment
extern NSString * const ASS_ENVIRONMENT_DAILY;
//初始化API的字典参数中,环境变量的value,代表预发环境
//value for server configuration in the NSDictionary parameter for initToken:callback: API, stands for pre online environment
extern NSString * const ASS_ENVIRONMENT_PRE;
//初始化API的字典参数中,设置RPC网关地址的key。
//key for RPC server gateway address in the NSDictionary parameter for initToken:callback: API.
//If value for this key is specified, the value for ASS_ENVIRONMENT will be ignored.
extern NSString* const ASS_RPC_GATEWAY_ADDR;
//rpc header workspaceid key
extern NSString* const ASS_RPC_WORKSPACEID;
//rpc header appid key
extern NSString* const ASS_RPC_APPID;
//初始化API的字典参数中,设置UMID网关host地址的key。
//host 要设置的线上地址,如ynuf.alipay.com,不要带协议头,不要带后面的参数,只能传纯host地址
//key for UMID server host in the NSDictionary parameter for initToken:callback: API.
//host should only contain online address such as ynuf.alipay.com, without protocol or parameters.
extern NSString* const ASS_UMID_HOST;
//初始化API的字典参数中,设置加密的umid。
extern NSString * const ASS_ENCODE_UMID;
/*!
@typedef ASSStatusCode
Possible return codes
@constant ASSStatusCodeOk Completed, No errors
@constant ASSStatusCodeInvalidParam input param invalid
@constant ASSStatusCodeAppNameNil appName is nil
@constant ASSStatusCodeAppKeyNil appKeyClient is nil
@constant ASSStatusCodeConnectionError network connection failure
*/
typedef NS_ENUM(NSInteger, ASSStatusCode)
{
ASSStatusCodeOk = 0,
ASSStatusCodeInvalidParam,
ASSStatusCodeAppNameNil,
ASSStatusCodeAppKeyNil,
ASSStatusCodeConnectionError,
};
typedef NS_ENUM(NSInteger, ASSAddressFlag)
{
ASSAddressFlagIndonesia = 1,
ASSAddressFlagMalaysia = 2,
ASSAddressFlagPilipinas = 3,
ASSAddressFlagSingapore = 4,
ASSAddressFlagIpayVn = 11,
ASSAddressFlagIpayId = 12,
ASSAddressFlagIpayMy = 13,
ASSAddressFlagIpaySg = 14,
ASSAddressFlagIpayTh = 15,
ASSAddressFlagIpayPh = 16,
ASSAddressFlagIpayDefault = 17,
};
@interface APSecureSdk : NSObject
/**
获取单例
*/
+ (id)sharedInstance;
/*
*网关设置
*/
- (void)setSecuritySDKConfig:(ASSAddressFlag)address;
/**
初始化
*/
- (void)initWithRpcConfiguration:(NSDictionary *) config;
//===================测试联调 api====================//
- (void)setRpcConfiguration:(NSDictionary *) config;
+(BOOL) isSupportFaceShield;
+(BOOL) isTrackingAuthorization;
@end
@@ -0,0 +1,61 @@
//
// APSign.h
// APPSecuritySDK-Sign
//
// Created by eric on 2021/2/25.
// Copyright © 2021 Alipay. All rights reserved.
//
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
extern NSString * const APSE_SIGN_MODE_NORMAL;
extern NSString * const APSE_SIGN_MODE_ENHANCE;
extern NSString * const APSE_SIGN_MODE_NORMAL_ASYNC;
extern NSString * const APSE_SIGN_MODE_ENHANCE_ASYNC;
@interface APSign : NSObject
/*
* getColorInfo 请求可信接口,获取数字签名
*
* @param bizToken 业务场景
* @param bizParam 业务参数
* @param extParams 扩展参数
* @param errInfo 错误信息
*
* @return 数字签名数据
*/
+ (NSString*) getColorInfo: (NSString*) bizToken
param: (NSString*) bizParam
ext: (NSDictionary*) extParams
error: (NSError **) errInfo;
/*
* preColorInfo 签名数据预处理接口,用于不同业务定制签名携带数据
*
* @param userAction 当前动作,由业务定制的行为事件
* @param extParams 业务参数,格式需要与内部对齐
*
* @return 预处理数据
*/
+ (NSString*) preColorInfo: (int) userAction
ext: (NSDictionary*) extParams
error: (NSError **) errInfo;
/*
* preColorInfo 签名数据预处理接口,用于不同业务定制签名携带数据
*
* @param userAction 当前动作,由业务定制的行为事件
* @param extParams 业务参数,格式需要与内部对齐
*
* @return 预处理数据
*/
+ (NSString*) preColorInfoForString: (int) userAction
ext: (NSString*) extParams
error: (NSError **) errInfo;
@end
NS_ASSUME_NONNULL_END
@@ -0,0 +1,234 @@
//
// ASSCommon.h
// ae-security-sdk
//
// Created by xingchen on 14/12/30.
// Copyright (c) 2014年 Alipay. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "ASSLogger.h"
//#define IN_DEBUG
#define USED_BY_ALIPAY
static NSErrorDomain APSECURITYSDK_ERROR_DOMAIN = @"APSecuritySDKErrorDomain";
static NSString* const PRIVATE_KEY_XXXX = @"qqAIhzy)H)ip53<>ugx,sI{#}CE$37L|z5G=IScgO^=aQHaN[b|NM.RWdZpcy.r$";
static NSString* const PRIVATE_KEY_CLIENTKEY = @"EQopzyui)H)ipQW983<ll>uitx,sgI{#}##20110kl==^^woQG,msq.xinjun.$$";
static NSString* const LOG_SWITCH_SETTING_INITIALIZED = @"开关设置从keychain初始化成功";
static NSString* const LOG_LOAD_SETTING_EXCEPTION = @"开关设置在keychain中无存储,读取失败";
static NSString* const LOG_DECRYPT_SETTING_EXCEPTION = @"开关设置从keychain中读取成功,解密失败";
static NSString* const LOG_SWITCH_APPLIST_INITIALIZED = @"applist从keychain初始化成功";
static NSString* const LOG_LOAD_APPLIST_EXCEPTION = @"applist相关信息在keychain中无存储,读取失败";
static NSString* const LOG_DECRYPT_APPLIST_EXCEPTION = @"applist信息从keychain中读取成功,解密失败";
static NSString* const LOG_UMID_TOKEN_REQUEST_BACK = @"UMID TOKEN返回结果为:";
static NSString* const LOG_VKEYINFO_GENERATED = @"本地VKEY开关打开,将生成VKEY信息";
static NSString* const LOG_VKEYINFO_ABORT = @"本地VKEY开关关闭,将放弃生成VKEY信息";
static NSString* const LOG_VKEY_NO_KEYCHAIN_CACHE = @"VKEY缓存信息在keychain中无存储,读取失败";
static NSString* const LOG_VKEY_FOUND_KEYCHAIN_CACHE = @"VKEY缓存信息在keychain中获取缓存值";
static NSString* const LOG_VKEY_INFO_DETAIL = @"KEY信息为:";
static NSString* const LOG_VKEY_GENERATION_EXCEPTION = @"VEr:";
static NSString* const LOG_GID_GENERATED = @"本地GID开关打开,将生成GID信息";
static NSString* const LOG_GID_ABORT = @"本地GID开关关闭,将放弃生成GID信息";
static NSString* const LOG_GID_NO_KEYCHAIN_CACHE = @"GID缓存信息在keychain中无存储,读取失败";
static NSString* const LOG_GID_FOUND_KEYCHAIN_CACHE = @"GID缓存信息在keychain中获取缓存值";
static NSString* const LOG_GID_INFO_DETAIL = @"GID信息为:";
static NSString* const LOG_VOS_RUNNING = @"VKEY任务启动";
static NSString* const LOG_VOS_ASYNC_ABORT = @"放弃异步VOS任务";
static NSString* const LOG_VOS_VKEY_GENERATION = @"VOS VKEY采集中";
static NSString* const LOG_VOS_GID_GENERATION = @"VOS GID采集中";
static NSString* const LOG_GID_GENERATION_EXCEPTION = @"GEr:";
static NSString* const LOG_JB_ERROR_DETECTED = @"JEr";
static NSString* const LOG_STATIC_INFO_DETAIL = @"采集静态信息列表如下:";
static NSString* const LOG_APP_LIST_INFO_COLLECTED = @"APPLIST信息扫描获取中";
static NSString* const LOG_APP_LIST_INFO_ABORT = @"APPLIST信息放弃扫描获取";
static NSString* const LOG_LOAD_MODEL_KEYCHAIN_EXCEPTION = @"VKEYID在keychain无存储,读取失败";
static NSString* const LOG_LOAD_MODEL_FROM_KEYCHAIN = @"VKEYID从keychain中成功读取";
static NSString *const LOG_LOCALMODEL_ABSENT = @"本地未找到VKEYID存储";
static NSString *const LOG_LOCALMODEL_LOADSUCCESS = @"本地成功找到VKEYID存储";
static NSString *const LOG_LOAD_PREAPDID_SUCCESS = @"本地成功在keychain中读取旧版apdid的值:";
static NSString *const LOG_LOAD_PREAPDID_FAILED = @"旧版apdid在keychain中无存储,读取失败";
static NSString* const LOG_STATIC_INFO_CHANGED = @"所采集的静态信息发生改变或者存储中没有记录";
static NSString* const LOG_STATIC_INFO_SAME = @"所采集的静态信息与存储中相同";
static NSString* const LOG_TODAY_FIRST = @"检测为24小时内首次请求";
static NSString* const LOG_NOT_TODAY_FIRST = @"检测24小时内已经发起过请求";
static NSString *const LOG_GETAPDIDTOKEN_RET_LOCAL = @"不发起网络请求,直接返回本地存储";
static NSString* const LOG_CONNECT_TO_SERVER = @"需要访问服务器请求TOKEN";
static NSString* const LOG_REQUEST_INFO_INCLUDED = @"静态请求上传需要携带静态信息";
static NSString* const LOG_REQUEST_INFO_EXCLUDED = @"静态请求上传不需要携带静态信息";
static NSString* const LOG_STATIC_REQUEST_EXCEPTION = @"静态数据请求发送出现异常";
static NSString* const LOG_STATIC_REQUEST_FAILED = @"静态数据请求返回出现错误";
static NSString* const LOG_STATIC_REQUEST_SUCCESS = @"静态数据请求请求返回";
static NSString* const LOG_SERVER_RESPONSE_SUCCESS = @"服务端返回结果通过验证,证明有效:";
static NSString* const LOG_SERVER_RESPONSE_FAILED = @"服务端获取TOKEN失败";
static NSString* const LOG_LOG_REQUEST_RESPONSE = @"日志上传成功返回";
static NSString *const LOG_LOCALMODEL_SAVED_KEYCHAIN = @"成功将VKEY ID保存至keychain";
static NSString *const LOG_UPDATE_SETTING = @"已更新keychain中开关的设置值";
static NSString* const LOG_APP_LIST_NEED_UPDATE = @"经过检测,app list列表需要从服务器更新";
static NSString *const LOG_UPDATE_APPLIST = @"app list列表成功从服务器更新";
static NSString* const LOG_APPLIST_SETTING_SAVED_KEYCHAIN = @"app list列表信息成功更新至keychain保存";
static NSString* const LOG_APP_LIST_REQUEST_EXCEPTION = @"app list请求出现异常";
static NSString* const LOG_APP_LIST_RESPONSE_FAILED = @"app list请求结果失败";
static NSString* const LOG_LOG_UPDATE_EXCEPTION = @"日志信息请求发送出现异常";
static NSString* const LOG_LOG_UPLOAD_ERROR = @"日志信息发送出现错误";
static NSString* const LOG_LOG_UPLOAD_SUCCESS = @"日志信息发送返回成功";
static NSString *const LOG_SETTINGMODEL_SAVEFAILED = @"开关信息保存错误";
static NSString *const LOG_SETTINGMODEL_SUCCESS = @"开关信息成功保存到keychain";
static NSString* const LOG_LOG_UPLOAD_PROCESS = @"上报日志开关打开,开始上报错误日志流程";
static NSString* const LOG_LOG_UPLOAD_ABORT = @"上报日志开关关闭,放弃上报错误日志";
static NSString* const LOG_LOG_FILE_DETAIL = @"检测到错误日志文件:";
static NSString* const LOG_LOG_FILE_REMOVAL = @"已经删除错误日志文件:";
static NSString* const LOG_LOG_UPLOAD_START = @"开始日志上报网络请求";
static NSString* const LOG_LOG_UPLOAD_DETAIL = @"日志上报网络请求具体内容:";
static NSString* const LOG_JSON_PARSE_EXCEPTION = @"JSON解析失败";
static NSString* const ASS_STORAGE_KEY_SUCCESS = @"success";
static NSString* const ASS_STORAGE_KEY_APDID = @"apdid";
static NSString* const ASS_STORAGE_KEY_TOKEN = @"token";
static NSString* const ASS_STORAGE_KEY_TIME = @"time";
static NSString* const ASS_STORAGE_KEY_VKEYSWITCH = @"vkeyon";
static NSString* const ASS_STORAGE_KEY_LOGSWITCH = @"logon";
static NSString* const ASS_STORAGE_KEY_APPLISTVERSION = @"appver";
static NSString* const ASS_STORAGE_KEY_STATICHASH = @"statichash";
static NSString* const ASS_STORAGE_KEY_ERROR = @"error";
static NSString* const ASS_APPKEY_INVALID = @"APPKEY_ERROR";
static NSString* const ASS_STORAGE_KEY_WEBRTCURL = @"webrtcurl";
static NSString* const ASS_STORAGE_KEY_DYNAMICKEY = @"dynamickey";
static NSString* const ASS_STORAGE_KEY_AGENTURL = @"agentcurl";
static NSString* const ASS_STORAGE_KEY_APSE_DEGRADE = @"apse_degrade";
static NSString* const ASS_STORAGE_KEY_TIMEINTERVAL = @"timeInterval";
static NSString* const SECURE_SDK_KEYCHAIN_KEY = @"com.alipay.securesdk.storage";
static NSString* const LAST_LOGIN_TIME_KEY = @"com.alipay.asssecuritySDK.lastlogintime";
static NSString* const SECURE_SDK_RANDOM_STRING = @"com.alipay.securesdk.ranstr";
static NSString* const SECURE_SDK_RANDOM_TOKEN = @"com.alipay.securesdk.tokenid";
static NSString* const ASS_KEYCHAIN_KEY_SETTING = @"com.alipay.asssecuresdk.config";
static NSString* const SECURE_SDK_RANDOM_CLIENTKEY_STRING = @"com.alipay.securesdk.clientkey";
static NSString* const SECURE_SDK_KEYCHAIN_TOKEN = @"maintoken";
static NSString* const ASS_KEYCHAIN_KEY_APPLIST = @"com.alipay.asssecuresdk.list";
static NSString* const ASS_KEYCHAIN_KEY_DFP = @"com.alipay.asssecuresdk.dfp";
static NSString* const ASS_KEYCHAIN_KEY_GID = @"com.alipay.asssecuresdk.gid";
static NSString* const ASS_KEYCHAIN_KEY_JBER = @"com.alipay.asssecuresdk.jber";
static NSString* const ASS_KEYCHAIN_KEY_APDIDC = @"com.alipay.asssecuresdk.apdidc";
static NSString* const ASS_KEYCHAIN_KEY_TMXTIME = @"com.alipay.asssecuresdk.tmxtime";
static NSString* const ASS_KEYCHAIN_KEY_TMXSESSOINID = @"com.alipay.asssecuresdk.tmxsessionid";
static NSString* const ASS_KEYCHAIN_KEY_ARPMAC = @"com.alipay.asssecuresdk.arpmac";
static NSString* const ASS_KEYCHAIN_KEY_DYNAMICKEY = @"com.alipay.asssecuresdk.dynamickey";
static NSString* const ASS_USER_DEFAULT_KEY_DEGRADE_TIME = @"asssecuritysdkdegrade";
static const int overtime = 9;
//CRASHGUARD
static NSString* const CRASH_GUARD_GET_COLOR_INFO = @"05f445";
static NSString* const CRASH_GUARD_PRE_COLOR_INFO = @"f379d2";
static NSString* const CRASH_GUARD_INIT_COLOR_INFO = @"25f523";
static NSString* const CRASH_GUARD_UPDATE_COLOR_CODE = @"8e81ac";
static NSString* const CRASH_GUARD_GET_COLOR_LABEL = @"d785d8";
static NSString* const CRASH_GUARD_UPDATE_COLOR_LABEL = @"dccf1d";
static NSString* const CRASH_GUARD_INIT_TOKEN = @"0780aa";
static NSString* const CRASH_GUARD_INIT = @"e37f013";
@interface ASSCommon : NSObject
+ (int)getCurrentMode;
+ (NSString*)getRPCURL;
+ (NSString*)getServerHost;
+ (void) setRPCHeader:(NSDictionary*)header;
+ (NSDictionary*)getRPCHeader;
+ (void)setupEnvironmentMode:(int)mode;
+ (void)setupRPCAddress:(NSString*)address;
+ (BOOL)useURLWhitelist;
+ (BOOL)checkDeviceSystemVersion;
+ (void)setSecuritySDKConfig:(int)address;
+ (void)setRpcHeaderAppid:(NSString*)apid;
+ (NSString*)getRpcHeaderAppid;
+ (void)setRpcHeaderWorkspaceid:(NSString*)spaceid;
+ (NSString*)getRpcHeaderWorkspaceid;
@end
@@ -0,0 +1,37 @@
//
// ASSDynamicManager.h
// APSecSecuritySDK
//
// Created by msq on 2019/1/5.
// Copyright © 2019 Alipay. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "APDynamicProtocol.h"
@interface ASSDynamicManager : NSObject<APDynamicProtocol>
+ (instancetype)sharedInstance;
- (void)dynamicCheckDispatch:(NSDictionary *)dict;
- (void)dynamicCheckDispatch:(NSDictionary *)dict withCallBack: (void(^)(Boolean, NSString *))callback;
- (void)dynamicCheckCustomLocal:(int)delay;
+ (NSData *)sendDynamicSynchronousRequest:(NSString *)url;
+ (void)uploadTimerCheckResult:(NSString *)data
dynamicTrace:(NSString*)trace
dynamicCmd:(int)cmd
dynamicNum:(int)num;
+ (NSString *)uploadCustomFile:(NSString *)path;
+ (void)recordError:(const char *)pos
withAction:(const char *)action
errCode:(int)code;
//+ (NSString *)processFeature;
@end
@@ -0,0 +1,39 @@
//
// ASSLogger.h
// ae-security-sdk
//
// Created by xingchen on 14/12/22.
// Copyright (c) 2014年 Alipay. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "ASSProtocolCenter.h"
#define ASSLog(...) do { \
if ([ASSProtocolCenter sharedCenter].logDelegate) { \
[[ASSProtocolCenter sharedCenter].logDelegate print:__VA_ARGS__, nil]; \
}} while(0)
#define ASSDtl(params, detail) [[ASSProtocolCenter sharedCenter].logDelegate print:[NSString stringWithFormat:@"%@%@",params,detail], nil]
#define ASSLogError(erroInfo) do { [[ASSLogger sharedInstance] addLogWithMessage: erroInfo]; } while(0)
@interface ASSLogger : NSObject
@property (nonatomic, strong) NSString* loggerInfo;
+(id)sharedInstance;
-(void)initializeWithArgs:(NSDictionary*)inArgs;
-(void)addLogWithMessage:(NSString*)message;
-(void)uploadLog;
//---------for test
-(NSData*)generateMessage:(NSString*)msg;
-(void)addLogWithMessage:(NSString *)message withFileName:(NSString*)fileName;
-(NSString*)getCurrentFileName:(NSDate*)date;
-(void)internal_addLog:(NSString*)message;
-(void)uploadLogCertified;
@end
Loaded 100 of 2090 files, more files were not shown because too many files have changed in this diff. Show more