Compare commits

..

208 Commits
wpf ... master

Author SHA1 Message Date
mkm
d3c0eece63 Merge pull request 'new' (#3) from new into master
Reviewed-on: #3
2024-01-28 21:31:00 +08:00
weipengfei
39390d232a 更新 2024-01-27 18:42:08 +08:00
weipengfei
eae451bf17 Merge branch 'new' of https://gitea.lihaink.cn/mkm/nk-shop2.0 into new 2024-01-27 18:31:03 +08:00
weipengfei
4a305a8284 更新 2024-01-27 18:30:56 +08:00
weipengfei
4dab876322 更新 2024-01-27 18:25:33 +08:00
zmj
b963704657 农户信息表单收集 2024-01-27 18:23:47 +08:00
weipengfei
cc453c8d4e 更新 2024-01-27 15:43:36 +08:00
weipengfei
0c97fe7020 更新 2024-01-26 18:46:15 +08:00
weipengfei
3d983049e8 更新 2024-01-26 14:45:28 +08:00
weipengfei
9363d3a413 更新 2024-01-26 13:58:33 +08:00
weipengfei
881dbcc501 更新 2024-01-26 10:38:57 +08:00
weipengfei
38de673847 更新 2024-01-25 18:16:14 +08:00
weipengfei
81e4daacd5 更新 2024-01-25 16:42:46 +08:00
weipengfei
06b92e8206 更新 2024-01-25 11:01:27 +08:00
weipengfei
08742b5870 更新 2024-01-24 18:22:31 +08:00
weipengfei
8b147d461c 更新 2024-01-24 18:14:40 +08:00
weipengfei
28537e7181 更新 2024-01-24 17:58:31 +08:00
weipengfei
c1c342d504 更新 2024-01-24 16:44:33 +08:00
weipengfei
bcd7e001c4 更新活动 2024-01-23 19:58:11 +08:00
weipengfei
61083bc7b1 新增两元专区功能 2024-01-23 11:36:51 +08:00
weipengfei
ebb0a5462f 更新 2024-01-23 11:36:17 +08:00
weipengfei
94377b4afd 更新 2024-01-22 18:51:10 +08:00
weipengfei
f2940b9c8a 更新 2024-01-22 17:28:31 +08:00
weipengfei
1958afbda0 更新 2024-01-22 00:33:59 +08:00
weipengfei
0c03d067db 更新 2024-01-21 23:52:59 +08:00
weipengfei
a1fa0c4f15 更新 2024-01-21 23:52:07 +08:00
weipengfei
faf1d479ab 更新 2024-01-21 23:40:10 +08:00
weipengfei
072cdd2cec 更新 2024-01-21 23:22:39 +08:00
weipengfei
0930807eff 更新 2024-01-21 20:39:54 +08:00
weipengfei
d3bd273bdd 更新 2024-01-21 20:05:53 +08:00
weipengfei
b19256d9c8 更新 2024-01-21 19:58:09 +08:00
weipengfei
51fc59d272 更新 2024-01-21 18:59:41 +08:00
weipengfei
0141fcc6b2 更新 2024-01-20 18:39:15 +08:00
weipengfei
4d258a0c2e 更新 2024-01-20 18:27:30 +08:00
weipengfei
5ab6141612 更新订单结算页面 2024-01-20 11:13:01 +08:00
weipengfei
4ce99e4abf 更新图片 2024-01-20 10:45:44 +08:00
weipengfei
b0663749e4 更新 2024-01-19 18:40:55 +08:00
weipengfei
2755927c6d 更新 2024-01-19 18:10:45 +08:00
weipengfei
69ddd11bf7 更新 2024-01-19 17:40:30 +08:00
weipengfei
1ff8f6c355 图片 2024-01-19 17:33:44 +08:00
weipengfei
c360adf281 更新 2024-01-19 17:33:27 +08:00
weipengfei
8555bf884a 更新 2024-01-18 17:45:52 +08:00
weipengfei
4739a33a9a 2024-01-15 20:38:01 +08:00
weipengfei
f36d6d553a 更新 2024-01-15 10:00:03 +08:00
weipengfei
40c21cef29 更新 2024-01-13 18:14:22 +08:00
weipengfei
2b3fc277f7 更新 2024-01-12 18:23:15 +08:00
weipengfei
289e68b756 新增个人入驻 2024-01-12 10:28:03 +08:00
weipengfei
6817d15b7e 修复定位精度问题, 全部采用系统定位 2024-01-10 17:48:02 +08:00
weipengfei
a23c9b3e46 更新 2024-01-09 16:33:07 +08:00
weipengfei
35958a4b26 更新 2024-01-04 19:20:35 +08:00
weipengfei
027e0a0856 更新 2024-01-04 18:55:15 +08:00
weipengfei
edf84fd9f4 更新 2024-01-02 18:01:54 +08:00
weipengfei
da7329c8b3 更新 2023-12-29 19:29:12 +08:00
weipengfei
710572e2a7 更新 2023-12-29 18:21:52 +08:00
weipengfei
bc87f30948 更新 2023-12-29 18:00:13 +08:00
weipengfei
dbe08640e9 更新 2023-12-28 18:04:37 +08:00
weipengfei
399b23d44f 更新 2023-12-27 17:29:55 +08:00
weipengfei
d73cd892ea 更新 2023-12-26 18:04:41 +08:00
weipengfei
1452292f81 更新 2023-12-25 18:56:44 +08:00
weipengfei
dbf2da56e4 更新 2023-12-25 16:25:03 +08:00
weipengfei
d94cf09c99 提交 2023-12-23 18:30:11 +08:00
weipengfei
28bfe2ace3 更新 2023-12-23 14:47:33 +08:00
weipengfei
1a05002050 更新 2023-12-23 10:01:16 +08:00
weipengfei
558e4844c6 更新 2023-12-22 18:34:17 +08:00
weipengfei
9dd0c2af11 更新 2023-12-20 15:06:52 +08:00
weipengfei
3176a0624a 更新 2023-12-16 09:58:35 +08:00
weipengfei
b0e2e385d0 更新 2023-12-15 18:40:50 +08:00
weipengfei
15265e8f87 更新 2023-12-14 11:32:24 +08:00
weipengfei
0e0cc53992 更新了订单状态显示错误的问题 2023-12-13 10:14:21 +08:00
weipengfei
591100a8b7 更新功能修复bug 2023-12-12 18:11:46 +08:00
weipengfei
6a74a4a33e 提升版本号 2023-12-11 10:46:36 +08:00
weipengfei
4b1d003905 更新优化定位, 推荐商品 2023-12-05 10:29:47 +08:00
weipengfei
c6a95fd7e2 更新地址选择 2023-12-04 18:34:47 +08:00
weipengfei
b561aac302 更新云市场 2023-12-04 16:42:18 +08:00
weipengfei
f9c2e90785 更新版本 2023-12-04 10:36:53 +08:00
weipengfei
78d4ad773a 修复选择位置后各个页面定位不统一的问题 2023-12-04 09:16:50 +08:00
weipengfei
de944d0ed9 修复了商户入驻时所在位置信息丢失bug 2023-12-02 16:18:31 +08:00
weipengfei
84e670a27b 更新 2023-11-30 13:35:52 +08:00
weipengfei
167354a8da 更新地图选择 2023-11-24 18:46:37 +08:00
weipengfei
102ee13e26 新增地图选择地址, 云商品地址全部使用新版地图选择 2023-11-24 17:17:31 +08:00
weipengfei
7dfa103d12 修复编辑商户入驻申请时没有合同的bug 2023-11-21 16:45:55 +08:00
weipengfei
33b08c8074 修复不同尺寸屏幕文字显示会被省略的问题 2023-11-21 11:10:09 +08:00
weipengfei
3227c7bf8a Merge branch 'old' of https://gitea.lihaink.cn/mkm/nk-shop2.0 into old 2023-11-21 10:56:02 +08:00
weipengfei
8cab22e4a6 修改商户入驻功能 2023-11-21 10:55:54 +08:00
jia
0712895bea Merge branch 'old' of https://gitea.lihaink.cn/mkm/nk-shop2.0 into old 2023-11-21 09:17:24 +08:00
jia
035badff12 oa 2023-11-21 09:16:05 +08:00
weipengfei
da010bf09d 更新了我的页面第一次进入缺少商家入驻 2023-11-20 18:37:58 +08:00
weipengfei
494427d94c 更新版本 2023-11-18 19:02:06 +08:00
weipengfei
9ac27fc4aa 优化APP打开速度, 新增启动页面 2023-11-18 15:13:10 +08:00
weipengfei
cc27ddd0f9 更新 2023-11-18 11:36:14 +08:00
weipengfei
875d740455 更新版本号 2023-11-17 19:32:04 +08:00
weipengfei
14b1036df8 添加商品分类 2023-11-17 15:39:45 +08:00
weipengfei
98b71c77b9 更新地址选择 2023-11-17 15:38:38 +08:00
weipengfei
2a7a95c5a7 更新商品购买多规格选择 2023-11-17 15:38:21 +08:00
weipengfei
62ca7da81b 新增定位页面 2023-11-16 19:09:57 +08:00
weipengfei
8beb5a3d8b 隐藏返回按钮悬浮球<home> 2023-11-16 09:45:29 +08:00
weipengfei
72d91272fb 更新商品卡片样式 2023-11-16 09:06:03 +08:00
weipengfei
f8f958e4a7 新增核销过的核销码无法使用 2023-11-15 19:09:02 +08:00
weipengfei
22962e3dcd 优化开发票功能 2023-11-15 17:58:30 +08:00
weipengfei
cfbf1f93a7 更新功能,修复bug 2023-11-15 17:05:21 +08:00
weipengfei
3852b76375 优化页面效果 2023-11-14 18:42:29 +08:00
weipengfei
fbb2cfbdb4 新增市级供应链入驻无需阅读协议 2023-11-14 16:07:02 +08:00
weipengfei
b55a573aa8 新增邀请码 2023-11-14 14:48:41 +08:00
weipengfei
e19212c632 更新 2023-11-14 11:12:17 +08:00
weipengfei
4b0dbfddc4 更新优化 2023-11-14 10:11:26 +08:00
weipengfei
1ee574eb6e 更新版本 2023-11-14 10:11:11 +08:00
weipengfei
1f99af550c 更新功能 2023-11-13 18:42:30 +08:00
weipengfei
6abc6ef833 修复bug 2023-11-13 17:58:03 +08:00
weipengfei
9126f44765 更新功能 2023-11-11 18:40:57 +08:00
weipengfei
2df7fe1658 调整云市场, 云商品功能 2023-11-10 18:02:22 +08:00
weipengfei
b5d9be778e 更新 2023-11-10 18:02:00 +08:00
weipengfei
d87a8929a9 云市场按地址排序 2023-11-10 10:04:25 +08:00
weipengfei
61abdaa696 新增点击检查版本更新 2023-11-10 10:03:54 +08:00
weipengfei
7eb567e1af 隐藏农业智能感知平台, 里海直播 2023-11-10 09:23:58 +08:00
weipengfei
9842f44f76 更新优化 2023-11-09 19:19:34 +08:00
weipengfei
7a0ab4e936 更新版本号 2023-11-09 16:00:26 +08:00
weipengfei
60da2c5088 优化websockt连接地址 2023-11-09 16:00:10 +08:00
weipengfei
0f201d3269 修复页面背景色不一样的问题 2023-11-09 15:59:44 +08:00
weipengfei
cda3a1cbc3 优化页面没有云商品时的提示 2023-11-08 16:34:42 +08:00
weipengfei
a5b11d545d 更新供销店铺和商品的推荐逻辑,优化页面效果 2023-11-08 16:30:19 +08:00
weipengfei
f43ef06ff0 更新优化 2023-11-08 12:00:24 +08:00
weipengfei
f63e22e9ba 更新优化,修复bug 2023-11-08 10:56:26 +08:00
weipengfei
228e515985 修复bug 2023-11-08 09:31:10 +08:00
weipengfei
6480227fd3 更新优化 2023-11-07 18:46:26 +08:00
weipengfei
44421c4ded 更新部分功能 2023-11-07 09:23:38 +08:00
weipengfei
f94284f460 修复bug 2023-11-06 16:40:08 +08:00
weipengfei
55f27158dc 修复bug 2023-11-06 16:00:12 +08:00
weipengfei
ed7686a99c 更新定位的的经纬度精度 2023-11-06 09:38:59 +08:00
weipengfei
160fae671e 修复供销页面月份错误的问题 2023-11-06 09:30:10 +08:00
wpf
b00e2cd3c6 更新版本号 2023-11-05 20:40:51 +08:00
wpf
f7313b878e Merge branch 'old' of https://gitea.lihaink.cn/mkm/nk-shop2.0 into old 2023-11-05 20:26:07 +08:00
wpf
d2236131e5 云仓接口添加经纬度参数 2023-11-05 20:21:32 +08:00
shengchanzhe
889e553cc2 更新 2023-11-05 18:48:36 +08:00
shengchanzhe
57ef10088c 更新 2023-11-05 16:12:52 +08:00
wpf
c0b9dc0c68 更新 2023-11-05 11:09:34 +08:00
weipengfei
ff1f7e3728 更新 2023-11-04 20:05:33 +08:00
weipengfei
4d0999b7ee Merge branch 'zmj' of https://gitea.lihaink.cn/mkm/nk-shop2.0 into old 2023-11-04 19:25:26 +08:00
weipengfei
8105e633d4 修复bug 2023-11-04 19:24:57 +08:00
zmj
16cd0a9ad4 Merge branch 'old' of https://gitea.lihaink.cn/mkm/nk-shop2.0 into zmj 2023-11-04 19:19:33 +08:00
zmj
f752d2cc21 更新 2023-11-04 19:18:29 +08:00
weipengfei
b2ca9716b7 更新设置收货地址 2023-11-03 11:48:12 +08:00
zmj
e3850dd2f9 拉取old 2023-11-02 16:16:29 +08:00
weipengfei
b15ec15437 新增图片 2023-11-02 10:25:40 +08:00
weipengfei
6461af639d Merge branch 'old' of https://gitea.lihaink.cn/mkm/nk-shop2.0 into old 2023-11-01 17:47:50 +08:00
weipengfei
5cedc225bc 更新小程序部分功能 2023-11-01 17:47:43 +08:00
jia
6c7f2902c5 Merge branch 'old' of https://gitea.lihaink.cn/mkm/nk-shop2.0 into old 2023-10-31 20:42:34 +08:00
jia
12a0c23dbd 直播修改 2023-10-31 20:41:15 +08:00
weipengfei
4a1e214501 Merge branch 'old' of https://gitea.lihaink.cn/mkm/nk-shop2.0 into old 2023-10-31 16:08:20 +08:00
weipengfei
536bce88af 更新 2023-10-31 16:08:08 +08:00
jia
48494458d2 直播界面及bug修改 2023-10-30 19:23:46 +08:00
jia
7e8b29b9b8 直播 2023-10-28 21:00:49 +08:00
weipengfei
d1050cc01d 修复店铺商品加载错误的问题 2023-10-28 17:43:43 +08:00
weipengfei
b8245eb162 供销综合云市场新增镇供应链,取消镇店铺框框显示 2023-10-27 20:25:03 +08:00
weipengfei
e412551130 商品编号修改为商品条码 2023-10-27 17:42:58 +08:00
weipengfei
3a547b90cd 修复定位不到时无法推荐的问题 2023-10-27 15:58:26 +08:00
weipengfei
1b9a98da38 供销新增区域无商品时推荐 2023-10-27 15:23:05 +08:00
weipengfei
3dd0926ae1 优化了商品详情页面图片压缩,展示有白边的问题 2023-10-27 15:22:06 +08:00
weipengfei
62f64fff63 更新 2023-10-26 18:43:31 +08:00
weipengfei
1415912ff7 Merge branch 'old' of https://gitea.lihaink.cn/mkm/nk-shop2.0 into old 2023-10-23 18:10:06 +08:00
weipengfei
80ca1eae29 更新页面配置 2023-10-23 18:09:14 +08:00
jia
5001e20329 api处理 2023-10-23 08:54:52 +08:00
weipengfei
ee95890478 修复bug 2023-10-20 18:45:05 +08:00
weipengfei
d238f98e66 更新H5访问域名设置 2023-10-19 16:39:44 +08:00
zmj
4683324b34 农业感知平台 2023-10-19 15:43:26 +08:00
weipengfei
73abf9c7d3 更新 2023-10-17 16:45:45 +08:00
weipengfei
7042cec438 新增根据角色类型判断是否显示AI大屏控制小程序 2023-10-16 18:09:12 +08:00
weipengfei
db89bc4bc5 覆盖 2023-10-16 14:52:00 +08:00
weipengfei
c8d5d2f0aa Merge branch 'old' of https://gitea.lihaink.cn/mkm/nk-shop2.0 into old 2023-10-16 14:49:03 +08:00
weipengfei
5cb13ccc8a 新增大屏控制 2023-10-16 14:48:56 +08:00
weipengfei
75ffe4f6af 修复app白屏bug 2023-10-16 14:48:33 +08:00
weipengfei
7f80e857d1 更新 2023-10-16 11:24:19 +08:00
jia
fbcd367cc6 协议更新 2023-10-13 18:35:37 +08:00
jia
b1afe0e384 协议修改 2023-10-13 18:12:34 +08:00
weipengfei
11bff270b3 Merge branch 'old' of https://gitea.lihaink.cn/mkm/nk-shop2.0 into old 2023-10-10 10:31:51 +08:00
weipengfei
2d85706baf 修复编辑商品数据回显有误的bug 2023-10-10 10:31:43 +08:00
jia
96ae908f11 api以及商户设置修改 2023-10-09 19:36:17 +08:00
weipengfei
7322947eca 修复了切换类型时图片有概率不更新的bug 2023-10-09 19:13:50 +08:00
weipengfei
2429f37789 修复无法分页与商品列表返回错误的bug 2023-10-09 18:19:42 +08:00
jia
83d548fd58 界面优化 2023-10-08 18:36:35 +08:00
weipengfei
c2dee85054 更新搜索框样式 2023-10-08 16:25:06 +08:00
jia
26d7bd0d67 登录界面修改 2023-10-08 09:36:36 +08:00
jia
95ab97bd23 修改进货管理页面 2023-10-08 09:19:46 +08:00
weipengfei
9d9b6e9278 Merge branch 'old' of https://gitea.lihaink.cn/mkm/nk-shop2.0 into old 2023-10-08 09:18:36 +08:00
weipengfei
f9a27e46d7 更新提示 2023-10-08 09:18:17 +08:00
weipengfei
f4858dcf1a 优化调整 2023-10-08 09:17:24 +08:00
jia
a6ac36d738 屏蔽功能 2023-10-08 09:11:15 +08:00
jia
836a2a3b0f 还原配置 2023-10-07 19:49:27 +08:00
jia
574c7caa2e 评论 、生产 、以及供应界面加入小程序修改 2023-10-07 19:16:47 +08:00
weipengfei
3918c3bbbf 修复商品详情显示的bug 2023-10-07 18:17:18 +08:00
weipengfei
c0af6e22ac Merge branch 'old' of https://gitea.lihaink.cn/mkm/nk-shop2.0 into old 2023-10-07 15:05:35 +08:00
weipengfei
3514231ffa 修复bug 2023-10-07 15:05:28 +08:00
jia
9fa25106c1 文章中心处理 2023-10-07 11:54:54 +08:00
jia
4529f209ca app视频处理 2023-10-07 11:41:00 +08:00
jia
11c8d1fdd1 h5视频处理及客服聊天界面优化 2023-10-07 11:36:08 +08:00
jia
635a166bf5 搜索优化 2023-10-07 09:49:22 +08:00
jia
39a7183def 评论更新 2023-10-07 09:37:28 +08:00
shengchanzhe
9e3fe4896c 前端修复 2023-10-02 15:36:52 +08:00
jia
00d5ba822b 商户拒绝 2023-09-28 18:37:43 +08:00
jia
547e71d4ee 商城字体文件 2023-09-28 17:40:47 +08:00
jia
0d7a893e59 订单核销功能处理 2023-09-28 17:18:39 +08:00
weipengfei
3420bbbe48 调整页面图片大小 2023-09-28 17:16:08 +08:00
weipengfei
e7f374c5b6 提交 2023-09-28 17:04:46 +08:00
weipengfei
25a31e754c Merge branch 'old' of https://gitea.lihaink.cn/mkm/nk-shop2.0 into old 2023-09-28 17:03:04 +08:00
weipengfei
7ed74b2f7d 修改云仓背景图片大小 2023-09-28 17:01:38 +08:00
weipengfei
9ec1b283a1 修复bug 2023-09-28 17:01:10 +08:00
THK3121
9ee9d2af52 bug 2023-09-28 15:41:02 +08:00
jia
e532b9e288 支付失败提示 2023-09-28 14:33:43 +08:00
jia
495e2a20dc 生产 2023-09-28 14:12:10 +08:00
206 changed files with 37365 additions and 6807 deletions

32
App.vue
View File

@ -74,16 +74,23 @@
...uni.getStorageSync('GLOBAL_DATA') || {}
},
onLaunch: function(option) {
// #ifdef H5
uni.setTabBarItem({
index: 1,
visible: false
})
// #endif
this.globalData.statusBarHeight = uni.getSystemInfoSync().statusBarHeight + 'px';
this.globalData.uid = this.$store.state.app.uid;
let appkey = uni.getStorage({
key: 'launchFlag'
})
if (appkey) {
setTimeout(() => {
// let appkey = uni.getStorage({
// key: 'launchFlag'
// })
// if (appkey) {
// setTimeout(() => {
// this.$store.dispatch('INIT_CONFIG');
// }, 6000)
// }
this.$store.dispatch('INIT_CONFIG');
}, 6000)
}
// #ifdef APP-PLUS
//uniMP
@ -161,7 +168,7 @@
jpushModule.initJPushService()
jpushModule.addConnectEventListener(result => {
let connectEnable = result.connectEnable
console.log("jpush连接", connectEnable)
// console.log("jpush", connectEnable)
})
@ -219,7 +226,6 @@
},
onShow() {
@ -350,9 +356,9 @@
});
},
//
setOpenShare: function(data) {
// #ifdef H5
let that = this;
let href = location.href;
href = href.indexOf("?") === -1 ? href + "?spid=" + this.globalData.uid : href + "&spid=" + this
@ -368,6 +374,7 @@
that.$wechat.wechatEvevt(["updateAppMessageShareData", "updateTimelineShareData"],
configAppMessage);
}
// #endif
},
//
getConfigData() {
@ -419,7 +426,7 @@
this.setOpenShare(res.data);
// #endif
}).catch(err => {});
}
},
},
onHide: function() {
//console.log('App Hide')
@ -427,12 +434,14 @@
watch: {
// H5
$route(n) {
// #ifdef H5
if (this.$store.state.app.token) {
//
history({
page: location.pathname + location.search,
}).then(() => {});
}
// #endif
},
}
}
@ -444,6 +453,7 @@
@import 'static/iconfont/iconfont.css';
@import 'static/iconfont/iconlihai.css';
@import 'static/iconfont/icontan.css';
@import 'static/iconfont/demo.css';
@import 'static/css/style.scss';

View File

@ -262,3 +262,52 @@ export function spuTopList(data) {
noAuth: true
});
}
// 活动列表
export function consumption(data) {
return request.get(`storeActivity/consumption`, data, {
noAuth: true
});
}
// 参加活动
export function chooseConsumption(data) {
return request.post(`storeActivity/choose`, data);
}
// 拉新红包活动完成状态
export function storeActivityStatus(data) {
return request.get(`storeActivity/status`, data);
}
// 领取红包
export function storeActivityReceive(data) {
return request.post(`storeActivity/receive`, data);
}
// 拉新红包活动完成状态
export function storeActivityRecord(data) {
return request.get(`storeActivity/record`, data);
}
// 红包余额统计
export function storeActivityTotal(data) {
return request.get(`storeActivity/total`, data);
}
// 生成二维码
export function storeActivityQrcode(data) {
return request.get(`qrcode`, data);
}
// 活动商品专区
export function storeActivityProduct(data) {
return request.get(`storeActivity/product`, data, {
noAuth: true
});
}
// 活动区域列表
export function storeActivityDistrict(data) {
return request.get(`storeActivity/district`, data);
}

View File

@ -7,6 +7,15 @@ import request from "@/utils/request.js";
export function cloudWarehouse(data) {
return request.get("store/product/cloudWarehouse", data, { noAuth: true });
}
/**
* 为你推荐
*
*/
export function spuRecommend(data) {
return request.get("product/spu/recommend", data, { noAuth: true });
}
/**
* 获取云仓分类
*
@ -293,20 +302,20 @@ export function brigade(data) {
}
/*
生产 -- 获取商户保证金信息支付接口
生产 -- 获取商户金信息支付接口
*/
export function paymerchant() {
return request.post(`user/margin`,{});
}
/*
生产 -- 获取商户保证金信息接口
生产 -- 获取商户金信息接口
*/
export function merchant(data) {
return request.get(`store/merchant/margin`, data);
}
//获取保证金缴纳列表
//获取金缴纳列表
export function marginlist(data) {
return request.get(`user/margin/list`,data);
}

151
api/live.js Normal file
View File

@ -0,0 +1,151 @@
import request from "@/utils/requestc.js";
import requesta from "@/utils/request.js";
/**
* 直播列表
*/
export function live(data) {
return request.get("zhibo/live" ,data);
}
/**
* 直播详情
*/
export function liveDetail(data) {
return request.get("zhibo/liveDetail" ,data);
}
/**
* 获取直播详情接口
*/
/**
* 创建直播间
*/
export function createPushLive(data) {
return request.post("zhibo/createPushLive", data);
}
/**
* 关闭直播间
*/
export function stopPushLive(data) {
return request.post("zhibo/stopPushLive", data);
}
/**
* 绑定用户client客户
*/
export function bindUser(data) {
return request.post("zhibo/bindUser", data);
}
/**
* 加入直播间聊天室
*/
export function joinChatRoom(data) {
return request.post("zhibo/joinChatRoom", data);
}
/**
* 直播间聊天室发言
*/
export function sendGroupMessage(data) {
return request.post("zhibo/sendGroupMessage", data);
}
//商品列表
export function good(data) {
return requesta.get("product/spu/lst", data);
}
/**
* 获取用户信息
*
*/
export function getUserInfo() {
return request.get('user');
}
//关注
export function getfans(id,data) {
return requesta.post('community/fans/'+id,data);
}
//我关注的人
export function getfocuslst(data) {
return requesta.post('community/focus/lst',data);
}
//关注我的人
export function getfanslst(data) {
return requesta.get('community/fans/lst',data);
}
//用户送礼
export function reward(data) {
return request.post('zhibo/reward',data);
}
//获取礼物
export function rewardList(data) {
return requesta.get('zhibo/rewardList',data);
}
//获取礼物
export function giftList(data) {
return request.get('zhibo/giftList',data);
}
//获取房间人数
export function liveAudience(data) {
return request.get('zhibo/liveAudience',data);
}
//获取用户余额
export function getuser(data) {
return requesta.get('user',data);
}
//送礼
export function sendGift(data) {
return request.post('zhibo/sendGift',data);
}
//获取主播关注人数
export function fansNum(data) {
return requesta.get('zhibo/fansNum',data);
}
/**
* 充值金额选择
*/
export function getRechargeApi() {
return requesta.get("common/recharge_quota");
}
//历史直播记录
export function playbackList(data) {
return request.get("zhibo/playbackList",data);
}
//获取直播回放详情
export function playbackDetail(data) {
return request.get("zhibo/playbackDetail",data);
}
//获取观众关注主播状态
export function getAjuser(id) {
return requesta.get(`community/user/info/${id}`);
}

View File

@ -142,3 +142,11 @@ export function getNavigation(data) {
noAuth: true
});
}
/*
小程序 -- 小程序列表
*/
export function applet(data) {
return request.get(`applet`, data);
}

View File

@ -3,9 +3,16 @@ import request from "@/utils/requesta.js";
export function getCityCloundShop(data) {
return request.get("city/get_cloud_shop", data);
}
export function getCategoryListLevel(data) {
return request.get("category/list_level", data);
}
export function cloudWarehouse(data) {
return request.get("store/product/cloudWarehouse", data);
}
export function townCloud(data) {
return request.get("store/product/town_cloud", data);
}
/**
* 供销市场标签
* @returns {*}

View File

@ -373,6 +373,14 @@ export function getHotBanner(type) {
export function create(data) {
return request.post("intention/create", data);
}
/**
* 个人入驻表单
* @returns {*}
*/
export function personalStore(data) {
return request.post("intention/personal_store", data);
}
/**
* 商户入驻短信验证码
* @returns {*}
@ -583,3 +591,21 @@ export function agreeiness(data) {
noAuth: true
});
}
/*
上传图片识别文字
*/
export function merchantLicenseIdentify(data) {
return request.post(`merchant_license_identify`, data, {
noAuth: true
});
}
/*
从供销平台获取村店铺负责人,联系电话
*/
export function getVillageInfo(data) {
return requestb.get(`shop_call/getVillageCompany`, data, {
noAuth: true
});
}

View File

@ -730,3 +730,8 @@ export function getBillDetil() {
export function merstreet(data) {
return request1.get(`company/street_company`, data);
}
//填写邀请码
export function bindPromotionCode(data) {
return request.post(`user/change/bind_promotion_code`, data)
}

95
components/Loading.vue Normal file
View File

@ -0,0 +1,95 @@
<template>
<div class="popup" v-if="isShow">
<div class="box">
<div class="loading"></div>
<p>{{str}}</p>
</div>
</div>
</template>
<script>
export default {
name: 'Loading',
data() {
return {
isShow: false,
str: '初始化中',
timer: null
};
},
mounted() {
uni.$on('showLoading', (type, str) => {
if (type == true) {
this.isShow = true;
this.str = str;
} else {
this.isShow = false;
}
})
},
methods: {
clickTow(){
}
},
};
</script>
<style scoped lang="scss">
.popup-enter-active,
.popup-leave-active {
transition: opacity 0.3s ease-in-out;
}
.popup-enter,
.popup-leave-to {
opacity: 0;
}
.popup {
position: fixed;
top: 0;
left: 0;
bottom: 0;
right: 0;
z-index: 99999999;
display: flex;
align-items: center;
justify-content: center;
flex-direction: column;
background-color: rgba(0, 0, 0, 0.2);
.box{
display: flex;
align-items: center;
justify-content: center;
flex-direction: column;
background-color: rgba(0, 0, 0, 0.5);
color: #eee;
height: 300rpx;
width: 300rpx;
border-radius: 20rpx;
box-sizing: border-box;
overflow: hidden;
}
}
.loading {
width: 80rpx;
height: 80rpx;
border: 6rpx solid #eee;
border-top-color: transparent;
border-radius: 100%;
margin-bottom: 30rpx;
animation: circle infinite 0.75s linear;
}
@keyframes circle {
0% {
transform: rotate(0);
}
100% {
transform: rotate(360deg);
}
}
</style>

View File

@ -0,0 +1,195 @@
<template>
<view :class="'wf-page wf-page'+type">
<!-- left -->
<view>
<view id="left" v-if="leftList.length">
<view v-for="(item,index) in leftList" :key="index"
class="wf-item" @tap="itemTap(item)">
<WaterfallsFlowItemp :item="item" :isStore="isStore" :type="type" @goShop="goShop"/>
</view>
</view>
</view>
<!-- right -->
<view>
<view id="right" v-if="rightList.length">
<view v-for="(item,index) in rightList" :key="index"
class="wf-item" @tap="itemTap(item)">
<WaterfallsFlowItemp :item="item" :isStore="isStore" :type="type" @goShop="goShop"/>
</view>
</view>
</view>
</view>
</template>
<script>
import WaterfallsFlowItemp from '../WaterfallsFlowItem/WaterfallsFlowItemp.vue'
export default {
components: {
WaterfallsFlowItemp
},
props: {
//
wfList: {
type: Array,
require: true
},
updateNum: {
type: Number,
default: 10
},
type: {
type: Number,
default: 0
},
isStore: {
type: [String, Number],
default: '1'
},
},
data() {
return {
allList: [], //
leftList: [], //
rightList: [], //
mark: 0, //
boxHeight: [], // 01
};
},
watch: {
//
wfList: {
handler(nVal,oVal){
// 使
if (!this.wfList.length ||
(this.wfList.length === this.updateNum && this.wfList.length <= this.allList.length)) {
this.allList = [];
this.leftList = [];
this.rightList = [];
this.boxHeight = [];
this.mark = 0;
}
// waterfall
if (this.wfList.length) {
this.allList = this.wfList;
this.leftList = [];
this.rightList = [];
this.boxHeight = [];
this.allList.forEach((v, i) => {
if(this.allList.length < 3 || (this.allList.length <= 7 && this.allList.length - i > 1) || (this.allList.length > 7 && this.allList.length - i > 2)) {
if(i % 2){
this.rightList.push(v);
}else{
this.leftList.push(v);
}
}
});
if(this.allList.length < 3){
this.mark = this.allList.length+1;
}else if(this.allList.length <= 7){
this.mark = this.allList.length - 1;
}else{
this.mark = this.allList.length - 2;
}
if(this.mark < this.allList.length){
this.waterFall()
}
}
},
immediate: true,
deep:true
},
mounted(){
},
// item
mark() {
const len = this.allList.length;
if (this.mark < len && this.mark !== 0 && this.boxHeight.length) {
this.waterFall();
}
}
},
methods: {
//
waterFall() {
const i = this.mark;
if (i == 0) {
//
this.leftList.push(this.allList[i]);
//
this.getViewHeight(0);
} else if (i == 1) {
// item
this.rightList.push(this.allList[i]);
//
this.getViewHeight(1);
} else {
// item
if(!this.boxHeight.length){
this.rightList.length < this.leftList.length
? this.rightList.push(this.allList[i])
: this.leftList.push(this.allList[i]);
} else {
const leftOrRight = this.boxHeight[0] > this.boxHeight[1] ? 1 : 0;
if (leftOrRight) {
this.rightList.push(this.allList[i])
} else {
this.leftList.push(this.allList[i])
}
}
//
this.getViewHeight();
}
},
//
getViewHeight() {
// 使nextTick
this.$nextTick(() => {
setTimeout(()=>{
uni.createSelectorQuery().in(this).select('#right').boundingClientRect(res => {
res ? this.boxHeight[1] = res.height : '';
uni.createSelectorQuery().in(this).select('#left').boundingClientRect(res => {
res ? this.boxHeight[0] = res.height : '';
this.mark = this.mark + 1;
}).exec();
}).exec();
},100)
})
},
// item
itemTap(item) {
this.$emit('itemTap', item)
},
// item
goShop(item) {
this.$emit('goShop', item)
}
}
}
</script>
<style lang="scss" scoped>
$page-padding: 10px;
$grid-gap: 10px;
.wf-page {
display: grid;
grid-template-columns: 1fr 1fr;
grid-gap: $grid-gap;
}
.wf-item {
width: calc((100vw - 2 * #{$page-padding} - #{$grid-gap}) / 2);
padding-bottom: $grid-gap;
}
.wf-page1 .wf-item{
margin-top: 20rpx;
background-color: #fff;
border-radius: 20rpx;
padding-bottom: 0;
}
.wf-item-page{
padding-bottom: 20rpx;
}
</style>

View File

@ -49,7 +49,7 @@
<text class="tags_item ticket" v-if="item.issetCoupon">领券</text>
<text class="tags_item delivery" v-if="item.delivery_free == 1">包邮</text>
</view>
<view class="score">{{item.rate}}评分 {{item.reply_count}}条评论</view>
<view class="score">{{item.rate}}评分 {{item.reply_count}}条评论<text v-if="item.merchant" style="margin-left: 10rpx;">{{item.merchant.street_name}}</text></view>
<view class="company" v-if="item.merchant" @click.stop="goShop(item.merchant.mer_id)">
<text class="line1">{{item.merchant.mer_name}}</text>
<view class="flex" v-if="isStore != '1'">

View File

@ -25,18 +25,24 @@
<view class="relase-two">
{{item.reply_count}}评论
</view>
<view class="relase-two">
{{item.merchant&&item.merchant.distance}}
</view>
<view class="relase-two">
{{item.merchant&&item.merchant.street_name}}
</view>
</view>
<view class="price">
<span></span>{{item.price.split('.')[0]}}.<text>{{item.price.split('.')[1]}}</text>
</view>
<view class="item-info">
<!-- <view class="item-info">
<view class="info-title" style="margin-right: 10rpx;">
{{item.merchant.mer_name}}
</view>
<view class="info-img">
<image src="@/static/images/you.png" mode="aspectFit"></image>
</view>
</view>
</view> -->
</view>
</template>
@ -87,7 +93,8 @@
font-family: PingFang SC-Medium, PingFang SC;
font-weight: 500;
color: #333333;
margin: 12px 0;
margin: 14rpx 0;
margin-bottom: 0;
padding-right: 12rpx;
width: 100%;
overflow: hidden;
@ -144,9 +151,10 @@
.relase {
display: flex;
flex-wrap: wrap;
margin-left: 21rpx;
margin-top: 12rpx;
height: 26rpx;
min-height: 26rpx;
line-height: 26rpx;
.relase-one {
@ -156,7 +164,6 @@
font-family: SF Pro Display-Regular Italic, SF Pro Display;
font-weight: 600;
color: #FF6D20;
}
.relase-two {
@ -170,7 +177,7 @@
.price {
margin-left: 21rpx;
margin-bottom: 10rpx;
// margin-bottom: 10rpx;
color: #F84221;
font-size: 44rpx;
font-weight: 600;

View File

@ -0,0 +1,347 @@
<template>
<view v-if="type == 0" class="wf-item-page wf-page0" :style="viewColor">
<view class='pictrue'>
<easy-loadimage mode="widthFix" :image-src="item.image"></easy-loadimage>
<view v-if="item.stock == 0" class="sell_out">已售罄</view>
<view v-if="item.border_pic" :style="{ backgroundImage: `url(${item.border_pic})` }" class="border-picture"></view>
</view>
<view class="text">
<view class='name line2'>{{item.store_name}}</view>
<view class="acea-row row-middle">
<view class='money'><text class='num'>{{item.price}}</text></view>
</view>
<view v-if="item.show_svip_info && item.show_svip_info.show_svip_price && item.svip_price" class="acea-row row-middle svip">
<text class='vip-money'>{{item.svip_price}}</text>
<view class="vipImg">
<image src="/static/images/svip.png"></image>
</view>
</view>
<view class="item_tags">
<!-- <text v-if="item.product_type == 0 && item.merchant.type_name" class="font-bg-red b-color">{{item.merchant.type_name}}</text>
<text v-else-if="item.product_type == 0 && item.merchant.is_trader" class="font-bg-red b-color">自营</text> -->
<text v-if="item.product_type != 0" :class="'font_bg-red type'+item.product_type">{{item.product_type == 1 ? "秒杀" : item.product_type == 2 ? "预售" : item.product_type == 3 ? "助力" : item.product_type == 4 ? "拼团" : ""}}</text>
<text class="tags_item ticket" v-if="item.issetCoupon">领券</text>
<!-- <text class="tags_item delivery" v-if="item.delivery_free == 1">包邮</text> -->
</view>
</view>
</view>
<view v-else-if="type == 1" class="wf-page1" :style="viewColor">
<view class='pictrue'>
<easy-loadimage mode="widthFix" :image-src="item.image"></easy-loadimage>
<view v-if="item.stock == 0" class="sell_out">已售罄</view>
<view v-if="item.border_pic" :style="{ backgroundImage: `url(${item.border_pic})` }" class="border-picture"></view>
</view>
<view class='text'>
<view class='name line2'>{{item.store_name}}</view>
<view class='money'>
<text class='num'>{{item.price}}</text>
</view>
<view v-if="item.show_svip_info.show_svip && item.show_svip_info.show_svip_price" class="acea-row row-middle svip">
<text class='vip-money'>{{item.svip_price}}</text>
<view class="vipImg">
<image src="/static/images/svip.png"></image>
</view>
</view>
<view class="item_tags acea-row">
<!-- <text v-if="item.merchant.type_name && item.product_type == 0" class="font-bg-red b-color">{{item.merchant.type_name}}</text>
<text v-else-if="item.merchant.is_trader && item.product_type == 0" class="font-bg-red b-color">自营</text> -->
<text v-if="item.product_type != 0" :class="'font_bg-red type'+item.product_type">{{item.product_type == 1 ? "秒杀" : item.product_type == 2 ? "预售" : item.product_type == 3 ? "助力" : item.product_type == 4 ? "拼团" : ""}}</text>
<text class="tags_item ticket" v-if="item.issetCoupon">领券</text>
<!-- <text class="tags_item delivery" v-if="item.delivery_free == 1">包邮</text> -->
</view>
<view class="score">{{item.rate}}评分 {{item.reply_count}}条评论<text v-if="item.merchant" style="margin-left: 10rpx;">{{item.merchant.street_name}}</text></view>
<view class="company" v-if="item.merchant" @click.stop="goShop(item.merchant.mer_id)">
<text class="line1">{{item.merchant.village_name}}</text>
<!-- <view class="flex" v-if="isStore != '1'">
进店
<text class="iconfont icon-xiangyou"></text>
</view> -->
</view>
</view>
<!-- 返佣 -->
<block v-if="item.max_extension>0 && (item.product_type == 0 || item.product_type == 2)">
<view class="foot-bar">
<text class="iconfont icon-fenxiang"></text>
最高赚 ¥{{item.max_extension}}
</view>
</block>
</view>
</template>
<script>
import easyLoadimage from '@/components/easy-loadimage/easy-loadimage.vue'
import {mapGetters} from "vuex";
export default {
components:{easyLoadimage},
computed: mapGetters(['viewColor']),
props: {
item: {
type: Object,
require: true
},
type: {
type: Number|String,
default: 0
},
isStore: {
type: [String, Number],
default: '1'
},
isLogin: {
type: Boolean,
require: false
}
},
data(){
return {
}
},
methods: {
goShop(id) {
this.$emit('goShop', id);
},
authOpen(){
this.$emit('authOpen');
},
followToggle(item){
this.$emit('followToggle', item);
}
}
}
</script>
<style lang="scss" scoped>
.wf-item-page {
background: #fff;
overflow: hidden;
border-radius: 16rpx;
padding-bottom: 20rpx;
}
.wf-page0 .coupon{
background:rgba(255,248,247,1);
border:1px solid rgba(233,51,35,1);
border-radius:4rpx;
font-size:20rpx;
margin-left: 18rpx;
padding: 1rpx 4rpx;
}
.wf-page0 .pictrue{
width: 100%!important;
height: 345rpx;
position: relative;
/deep/image,/deep/.easy-loadimage,uni-image{
height: 345rpx;
border-radius: 16rpx 16rpx 0 0;
}
.border-picture {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
border-radius: 16rpx 16rpx 0 0;
background: center/cover no-repeat;
}
}
.loadfail-img{
width: 100%;
height: 360rpx;
}
.svip{
margin: 5rpx 0 15rpx;
}
.vip-money {
color: #282828;
font-size: 22rpx;
margin-left: 6rpx;
font-weight: bold;
}
.vipImg {
width: 65rpx;
height: 28rpx;
margin-left: 4rpx;
image {
width: 100%;
height: 100%;
display: block;
}
}
.wf-page0 .name {
color: #282828;
margin: 20rpx 0 10rpx 0;
font-size: 13px;
overflow:hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
text-align: left;
}
.wf-page0 .text{
padding: 0 20rpx;
}
.wf-page0 .money {
font-size: 20rpx;
font-weight: bold;
color: var(--view-priceColor);
}
.b-color {
background-color: var(--view-theme);
border: 1px solid var(--view-theme);
}
.wf-page0 .money .num {
font-size: 34rpx;
}
.wf-page1 .wf-item{
.name{
font-size: 13px;
overflow:hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
text-align: left;
}
}
.wf-page1 .pictrue {
position: relative;
height: 345rpx;
width: 100%!important;
/deep/image,/deep/.easy-loadimage,uni-image{
height: 345rpx;
border-radius: 20rpx 20rpx 0 0;
}
.border-picture {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
border-radius: 20rpx 20rpx 0 0;
background: center/cover no-repeat;
}
}
.sell_out {
display: flex;
width: 150rpx;
height: 150rpx;
align-items: center;
justify-content: center;
border-radius: 100%;
background: rgba(0,0,0,.6);
color: #fff;
font-size: 30rpx;
position: absolute;
top: 50%;
left: 50%;
margin: -75rpx 0 0 -75rpx;
&::before{
content: "";
display: block;
width: 140rpx;
height: 140rpx;
border-radius: 100%;
border: 1px dashed #fff;
position: absolute;
top: 5rpx;
left: 5rpx;
}
}
.loading-img{
height: 345rpx;
max-height: 360rpx;
}
.wf-page1 .text {
padding: 20rpx 17rpx 26rpx 17rpx;
font-size: 30rpx;
color: #222;
}
.wf-page1 .text .money {
display: flex;
align-items: center;
font-size: 26rpx;
font-weight: bold;
margin-top: 8rpx;
color: var(--view-priceColor);
}
.wf-page1 .text .money .num {
font-size: 34rpx;
}
.item_tags{
margin-top: 8rpx;
display: flex;
}
.item_tags .tags_item {
display: flex;
font-size: 20rpx;
text-align: center;
border-radius: 5rpx;
padding: 0 4rpx;
height: 28rpx;
align-items: center;
justify-content: center;
margin-right: 8rpx;
}
.item_tags .tags_item.ticket{
color: var(--view-theme);
border: 1px solid var(--view-theme);
}
.item_tags .tags_item.delivery{
color: #FF9000;
border: 1px solid #FF9000;
}
.wf-page1 .text .money .ticket-big {
display: flex;
align-items: center;
justify-content: center;
max-width: 163rpx;
padding: 0 6rpx;
height: 28rpx;
margin-left: 10rpx;
background-image: url(~static/images/yh.png);
background-size: 100% 100%;
font-size: 20rpx;
font-weight: normal;
}
.wf-page1 .text .score {
margin-top: 10rpx;
color: #737373;
font-size: 20rpx;
}
.wf-page1 .text .company {
display: flex;
align-items: center;
color: #737373;
font-size: 20rpx;
margin-top: 10rpx;
.line1{
// max-width: 200rpx;
}
.flex {
display: flex;
align-items: center;
margin-left: 10rpx;
color: #282828;
.iconfont {
font-size: 16rpx;
margin-top: 4rpx;
}
}
}
.foot-bar {
width: 100%;
height: 52rpx;
display: flex;
align-items: center;
justify-content: center;
background-image: linear-gradient(-90deg, var(--view-bntColor21) 0%, var(--view-bntColor22) 100%);
border-radius: 0px 0px 16rpx 16rpx;
color: #fff;
font-size: 24rpx;
.icon-fenxiang {
font-size: 24rpx;
margin-right: 10rpx;
}
}
</style>

102
components/activityCard.vue Normal file
View File

@ -0,0 +1,102 @@
<template>
<view class="a_c_home">
<view class="c_card">
<view class="c_content">
<scroll-view style="height: 100%;" scroll-y>
<view v-if="info.content" v-html="info.content.content"></view>
</scroll-view>
</view>
<view class="btn_box">
<image class="btn_img" @click="open()" src="https://lihai001.oss-cn-chengdu.aliyuncs.com/public/uploads/new_activity/card_btn1.webp"></image>
<image class="btn_img" @click="open()" src="https://lihai001.oss-cn-chengdu.aliyuncs.com/public/uploads/new_activity/card_btn2.webp"></image>
</view>
</view>
<image class="head_img" src="https://lihai001.oss-cn-chengdu.aliyuncs.com/public/uploads/new_activity/card_head.webp" info="活动标题"></image>
<image class="close_img" @click="close" src="https://lihai001.oss-cn-chengdu.aliyuncs.com/public/uploads/new_activity/close.png" info="关闭按钮"></image>
</view>
</template>
<script>
import { getArticleList } from "@/api/api.js"
export default {
data(){
return {
info: ''
}
},
created() {
this.getArticleList();
},
methods:{
close(){
this.$emit('close');
},
open(){
uni.navigateTo({
url: '/pages/newActivity/activityDetail/activityDetail'
})
},
getArticleList(){
getArticleList(25).then(res=>{
this.info = res.data.list[0]
})
}
}
}
</script>
<style lang="scss">
.a_c_home{
width: 600rpx;
height: 90vh;
// border: 1px solid red;
position: relative;
.head_img{
width: 568rpx;
height: 207rpx;
position: absolute;
top: 0;
left: 50%;
transform: translate(-50%);
}
.c_card{
height: calc(100% - 300rpx);
width: 100%;
background-color: #fff;
position: absolute;
border-radius: 50rpx;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
padding: 30rpx;
padding-top: 70rpx;
display: flex;
flex-direction: column;
justify-content: space-between;
align-items: center;
.c_content{
height: calc(100% - 220rpx);
width: 100%;
// background-color: #eee;
}
.btn_box{
display: flex;
flex-direction: column;
justify-content: space-between;
align-items: center;
.btn_img{
width: 461rpx;
height: 100rpx;
}
}
}
.close_img{
position: absolute;
bottom: 60rpx;
left: 50%;
transform: translate(-50%);
width: 60rpx;
height: 60rpx;
}
}
</style>

View File

@ -0,0 +1,62 @@
<template>
<view class="a_h_home">
<view class="a_h_body" v-if="show">
<image @click.stop="open()" class="a_h_bg" mode="widthFix" src="https://lihai001.oss-cn-chengdu.aliyuncs.com/public/uploads/new_activity/tow_price_card.webp"></image>
<image v-if="showClose" @click.stop="close()" class="a_h_close" src="../static/images/wt_close.png"></image>
</view>
</view>
</template>
<script>
export default {
props:{
showClose: {
type: Boolean,
default: true
}
},
data(){
return {
show: true
}
},
methods:{
open(){
this.$emit('click');
},
close(){
this.show = false;
}
}
}
</script>
<style lang="scss">
.a_h_home{
position: fixed;
bottom: 25vh;
right: 30rpx;
z-index: 10;
width: 180rpx;
// height: 150rpx;
.a_h_bg{
height: 100%;
width: 100%;
}
.a_h_body{
width: 100%;
height: 100%;
// background-color: #eee;
position: relative;
.a_h_close{
position: absolute;
right: 5rpx;
top: 5rpx;
width: 30rpx;
height: 30rpx;
background-color: rgba(#000, 0.4);
border-radius: 50%;
}
}
}
</style>

View File

@ -1,5 +1,5 @@
<template>
<view :style="viewColor">
<view :style="viewColor" @touchmove.stop.prevent="()=>{}">
<view class="add_invoicing" :class="invoice.invoice==true?'on':''">
<view class='title'>选择发票<text class='iconfont icon-guanbi' @tap='close'></text></view>
<form @submit="formSubmit" report-submit="true">
@ -302,10 +302,14 @@
this.popupTitle = false;
},
changeHeader(e) {
console.log(e);
this.receipt_title_type = e.detail.value;
if(e.detail.value == 1){
this.receipt_type = 1;
this.typeName = '增值税电子普通发票'
}else {
this.receipt_type = 2;
this.typeName = '增值税专用发票'
}
this.receipt_type
},

View File

@ -18,7 +18,7 @@
<image src='../../static/images/noAddress.png'></image>
<view>暂无地址</view>
</view>
<view class='addressBnt' @tap='goAddressPages'>添加地址</view>
<view class='addressBnt' @tap='goAddressPages'>添加/编辑地址</view>
</view>
<view class='mask' catchtouchmove="true" :hidden='address.address==false' @tap='close'></view>
</view>

View File

@ -0,0 +1,169 @@
<template>
<view class="men-ban box " v-if ='isShow' @touchmove.stop.prevent="">
<view class="box_next">
<view class="box_next_title">
<text class="box_next_title_z">{{title}}</text>
</view>
<slot></slot>
<view class="box_next_but_d" v-if="isBut">
<view @click='show' class="box_next_but_d_but">
<text class="box_next_but_d_but_text">{{nName}}</text>
</view>
</view>
<view class="box_next_but_s" v-else>
<view class="box_next_but_s_lbut" @click="lEvent">
<text class="box_next_but_d_but_text">{{lName}}</text>
</view>
<view @click="rEvent" class="box_next_but_s_rbut" hover-class="zcolor-while1">
<text class="box_next_but_d_but_text">{{rName}}</text>
</view>
</view>
</view>
</view>
</template>
<script>
export default {
props: {
title: {
type: String,
default: "温馨提示"
},
isShow: {
type: Boolean,
default: true
},
nName: String,
lName: String,
rName: String,
isBut: {
type: Boolean,
default: true
}
},
methods: {
show() {
this.$emit('show');
},
lEvent() {
this.$emit('lEvent');
},
rEvent() {
this.$emit('rEvent');
},
}
}
</script>
<style scoped>
.men-ban {
position: fixed;
bottom: 0;
right: 0;
left: 0;
top: 0;
z-index: 999999;
background-color: rgba(0, 0, 0, 0);
}
.box {
/* #ifndef APP-NVUE */
display: flex;
/* #endif */
flex-direction: row;
justify-content: center;
align-items: center;
}
.box_next {
background-color: #ffffff;
width: 550rpx;
border-radius: 30rpx;
}
.box_next_title {
padding: 30rpx 30rpx 0 30rpx;
}
.box_next_title_z {
font-size: 31rpx;
font-weight: bold;
}
.box_next_but_d {
width: 550rpx;
/* #ifndef APP-NVUE */
display: flex;
/* #endif */
flex-direction: row;
justify-content: center;
align-items: center;
height: 130rpx;
}
.box_next_but_d_but {
width: 500rpx;
/* #ifndef APP-NVUE */
display: flex;
/* #endif */
flex-direction: row;
justify-content: center;
align-items: center;
height: 80rpx;
border-radius: 50rpx;
background-color: #fee610;
}
.box_next_but_d_but_text {
font-size: 30rpx;
font-weight: bold;
}
.box_next_but_s {
width: 550rpx;
/* #ifndef APP-NVUE */
display: flex;
/* #endif */
flex-direction: row;
justify-content: space-around;
align-items: center;
height: 130rpx;
}
.box_next_but_s_lbut {
width: 200rpx;
background-color: #f1f1f1;
/* #ifndef APP-NVUE */
display: flex;
/* #endif */
flex-direction: row;
justify-content: center;
align-items: center;
height: 80rpx;
border-radius: 50rpx;
}
.box_next_but_s_rbut {
width: 200rpx;
background-color: #fee610;
/* #ifndef APP-NVUE */
display: flex;
/* #endif */
flex-direction: row;
justify-content: center;
align-items: center;
height: 80rpx;
border-radius: 50rpx;
}
</style>

View File

@ -0,0 +1,183 @@
<template>
<view class="msg-view">
<scroll-view class="msg-view-p" scroll-y="true" :scroll-top="msgPanelScrollTop">
<view id="chatArea">
<view class="chat-area-line" v-for="(item,index) in msgList">
<view class="system-msg"
:style="{'flex-direction':((item.userName.length + item.content.length)<15?'row':'')}"
v-if="item.msg_type == 'system'">
<view class="system-msg-detail ">
<text class="system-msg-detail-username " v-for="i in item.userName">{{i}}</text>
<text class="system-msg-detail-content " v-for="i in ':'">{{i}}</text>
<text class="system-msg-detail-content " v-for="i in item.content">{{i}}</text>
</view>
</view>
<view class="user-msg"
:style="{'flex-direction':((item.userName.length + item.content.length)<15?'row':'')}" v-else>
<view class="user-msg-detail">
<view class="user-msg-detail-tag">
<!-- <text style="text-align: center;font-size: 20px;color: #DD524D;">1</text> -->
<!-- 这里可以根据用户等级显示图片 -->
<image :src="item.avatar" class="user-msg-detail-tag"></image>
</view>
<text class="user-msg-detail-username" v-for="i in item.userName"
@click="test(item.userName)">{{i}}</text>
<text class="user-msg-detail-content" v-for="i in ':'">{{i}}</text>
<text class="user-msg-detail-content" v-for="i in item.content">{{i}}</text>
</view>
</view>
</view>
</view>
</scroll-view>
</view>
</template>
<script>
export default {
name: 'MhMsgList',
props: {
msgList: {
type: [Object, Array],
default: [{
userName: "系统通知",
content: "直播倡导绿色直播,严禁发布涉黄涉毒涉赌,严禁发布涉政、违法及低俗违规内容。健康直播,文明互动",
cmd: "say",
msg_type: "system"
}, ]
},
msgPanelScrollTop: {
type: [Number, String],
default: 0
}
},
mounted() {
},
methods: {
test(e) {
uni.showToast({
title: e,
icon: 'none'
})
},
setMsgPanelScroll() {
var that = this;
setTimeout(function() {
const query = uni.createSelectorQuery().in(that);
query.select('#chatArea').boundingClientRect(data => {
that.msgPanelScrollTop = data.height - 200;
}).exec();
}, 50)
},
}
}
</script>
<style lang="scss" scoped>
.msg-view-p {
display: flex;
width: 550rpx;
height: 550rpx;
}
.chat-area-line {
width: 550upx;
flex-direction: row;
margin-bottom: 5upx;
}
.system-msg {
width: 550upx;
margin-bottom: 5upx;
}
.system-msg-detail {
// max-width: 550upx;
padding: 10upx;
border-radius: 30upx;
background-color: rgba($color: #000000, $alpha: 0.4);
flex-direction: row;
flex-wrap: wrap;
margin-right: 14upx;
>.system-msg-detail-username {
color: red;
font-size: 32upx;
font-weight: 400;
line-height: 40upx;
}
>.system-msg-detail-content {
font-size: 32upx;
font-weight: 400;
line-height: 40upx;
color: #A0CFFF;
}
}
.user-line {
// max-width: 530upx;
padding: 10upx;
color: #FFFFFF;
flex-direction: row;
border-radius: 30upx;
background-color: rgba($color: #000000, $alpha: 0.4);
margin-right: 14upx;
font-size: 28upx;
font-weight: 400;
line-height: 40upx;
}
.user-msg {
width: 530upx;
margin-bottom: 5upx;
}
.user-msg-detail-tag {
width: 40upx;
height: 40upx;
border-radius: 50%;
}
.user-msg-detail {
padding: 10upx;
border-radius: 30upx;
background-color: rgba($color: #000000, $alpha: 0.4);
flex-direction: row;
flex-wrap: wrap;
margin-right: 14upx;
>.user-msg-detail-username {
color: #A0CFFF;
font-size: 32upx;
font-weight: 400;
line-height: 40upx;
}
>.user-msg-detail-content {
font-size: 32upx;
font-weight: 400;
line-height: 40upx;
color: #fff;
}
}
</style>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

518
components/shortPopup.vue Normal file
View File

@ -0,0 +1,518 @@
<template>
<view>
<uni-popup ref="popupRef" type="bottom" @change="changeShow">
<view class="pop">
<scroll-view scroll-y class="scroll">
<view class="image">
<swiper class="swiper" :current="current" autoplay style="width: 100%;height: 100%;" @change="changeCurrent">
<block v-if="product.slider_image && product.slider_image.length>0">
<swiper-item v-for="(item,index) in product.slider_image" :key="index">
<image class="img" :src="item"></image>
</swiper-item>
</block>
<swiper-item v-else>
<image class="img" :src="datas.image||defualtImg"></image>
</swiper-item>
</swiper>
<view class="current">{{current+1}}/{{product.slider_image && product.slider_image.length||1}}</view>
<image class="close" src="@/static/images/icon/close.png" @click="close()"></image>
<view class="border"></view>
</view>
<view class="white_card">
<view class="flex flex_end">
<view class="price"><text class="pro">{{leftPrice}}.</text>{{rightPrice}}
</view>
<!-- <view>订货价</view> -->
</view>
<view class="short_name">{{datas.store_name}}</view>
<view class="flex">
<view class="shop_name">
<image class="icon" src="@/static/images/icon/short.png"></image>
<view>{{datas.merchant.mer_name}}</view>
</view>
</view>
<u-line></u-line>
<block name="规格选中" v-for="(att, indexw) in attr" :key="indexw">
<view class="m_title">{{att.attr_name}}</view>
<view class="flex" style="flex-wrap: wrap;">
<view class="attr" :class="{'attr_active': item.check}"
v-for="(item, indexn) in att.attr_value" :key="indexn"
@click="changeAttr(indexw, indexn)">
{{item.attr}}
</view>
</view>
</block>
<view class="m_title num">
<view>购买数量</view>
<view class="input">
<view class="input_item sub" @click="subCartNum">-</view>
<input class="input_item input_view" v-model="cart_num" type="number" @input="inputCartNum" />
<view class="input_item plus" @click="plusCartNum">+</view>
</view>
</view>
<view>
商品库存 <text style="margin-left: 20rpx;">{{(sku[changeSkuKey] && sku[changeSkuKey].stock)||change.stock}}</text>
</view>
</view>
</scroll-view>
<view class="button">
<view class="b_icon" @click="navgoCart()">
<image src="@/static/images/icon/car.png"></image>
<view>购物车</view>
<view class="badge" v-if="goodsNum">{{goodsNum}}</view>
</view>
<view class="btn" @click.stop="$u.throttle(addcart, 1500)"> {{isBuy?'立即购买':'加入购物车'}} </view>
</view>
</view>
</uni-popup>
</view>
</template>
<script>
import {
postCartAdd,
getProductDetail
} from '@/api/store.js';
export default {
name: "shortPopup",
props: {
source:{
type: Number,
default: null
},
isBuy: {
type: Boolean,
default: false
}
},
data() {
return {
isShow: false, //
defualtImg: 'https://lihai001.oss-cn-chengdu.aliyuncs.com/uploads/20230130/00ebcfdf75684f5494c0193075055d1.png',
datas: {
image: '',
store_name: '',
merchant: {
mer_name: ''
},
price: '',
},
product: {},
attrValue: [],
attr: [], //
changeSkuKey: '', //key
sku: {}, //
sku_key_list: [], //
changeSkuKey: '', //
change: {
stock: ''
},
cart_num: 1, //
goodsNum: 0, //
current: 0, //
};
},
mounted() {},
computed:{
leftPrice(){
return this.sku[this.changeSkuKey]?.price?.split('.')[0]||'0';
},
rightPrice(){
return this.sku[this.changeSkuKey]?.price?.split('.')[1]||'00';
}
},
methods: {
// ,
setDatas(datas, goodsNum) {
getProductDetail(datas.product_id).then((res)=>{
this.attr = res.data.attr;
if(this.attr.length>0) this.attr.forEach((item, index)=>{
this.changeAttr(index, 0);
})
else this.changeSkuKey = '';
})
this.goodsNum = goodsNum;
this.datas = datas;
this.product = datas.product;
this.attrValue = datas.product?.attrValue;
this.change = this.attrValue[0];
this.cart_num = 1;
this.sku = datas.sku||{};
this.sku_key_list = Object.keys(this.sku);
},
//
inputCartNum(e) {
if(this.sku){
if (+e.detail.value > this.sku[this.changeSkuKey].stock) {
uni.showToast({
icon: 'none',
title: '不能超出库存哦'
})
this.$nextTick(() => {
this.cart_num = this.sku[this.changeSkuKey].stock;
})
}
}else if (this.change.stock <= this.cart_num) {
uni.showToast({
icon: 'none',
title: '不能超出库存哦'
})
this.$nextTick(() => {
this.cart_num = this.change.stock;
})
}
},
//
subCartNum() {
if (this.cart_num <= 1) {
return uni.showToast({
icon: 'none',
title: '最少要买一件哦'
})
}
this.cart_num--;
},
//
plusCartNum() {
if(this.sku){
if (this.sku[this.changeSkuKey].stock <= this.cart_num) {
return uni.showToast({
icon: 'none',
title: '不能超出库存哦'
})
}
}else if (this.change.stock <= this.cart_num) {
return uni.showToast({
icon: 'none',
title: '不能超出库存哦'
})
}
this.cart_num++;
},
changeAttr: function(indexw, indexn) {
let that = this;
this.$set(this.attr[indexw], 'index', this.attr[indexw].attr_values[indexn]);
this.attr[indexw].attr_value.forEach((item, index)=>{
if(index==indexn)item.check = true;
else item.check = false;
})
let value = that.getCheckedValue().join(",");
this.changeSkuKey = value;
},
//
getCheckedValue: function() {
let productAttr = this.attr;
let value = [];
for (let i = 0; i < productAttr.length; i++) {
for (let j = 0; j < productAttr[i].attr_values.length; j++) {
if (productAttr[i].index === productAttr[i].attr_values[j]) {
value.push(productAttr[i].attr_values[j]);
}
}
}
return value;
},
//
addcart() {
if (this.sku[this.changeSkuKey]) {
if (this.cart_num > this.sku[this.changeSkuKey].stock) return uni.showToast({
icon: 'none',
title: '不能超出库存哦'
})
let data = {
cart_num: this.cart_num,
is_new: 0,
product_attr_unique: this.sku[this.changeSkuKey].unique,
product_id: this.datas.product_id,
product_type: this.datas.product_type,
source: this.source,
spread_id: "",
}
let that = this
let res = postCartAdd({
...data
}).then((res, err) => {
uni.showToast({
title: "加入成功",
duration: 1000,
})
this.$emit('addCart');
this.close();
if(this.isBuy){
this.navgoCart();
}
}).catch(err => {
uni.showToast({
title: err,
icon: "none",
duration: 1000,
})
})
} else {
uni.showToast({
icon: 'none',
title: '商品规格不存在'
})
}
},
//
changeCurrent(e){
this.current = e.detail.current;
},
navgoCart(url=null) {
if(!url) {
if(this.source) url = '/pages/order_addcart/order_addcart?source='+this.source;
else url = '/pages/order_addcart/order_addcart';
}
uni.navigateTo({
url
})
},
open() {
this.$refs.popupRef.open();
},
close() {
this.$refs.popupRef.close();
},
changeShow(e) {
this.isShow = e.show;
}
}
}
</script>
<style lang="scss">
.pop {
background-color: #fff;
border-radius: 31.54rpx 31.54rpx 0rpx 0rpx;
overflow: hidden;
position: relative;
.scroll{
height: calc(90vh - 150rpx);
}
.flex_end {
align-items: flex-end;
}
.image {
height: 750rpx;
width: 750rpx;
position: relative;
.current{
position: absolute;
bottom: 70rpx;
left: 30rpx;
width: 67rpx;
height: 37rpx;
background: rgba(#333, 0.2);
border-radius: 11rpx 11rpx 11rpx 11rpx;
text-align: center;
color: #fff;
font-size: 26rpx;
font-family: PingFang SC-Regular, PingFang SC;
font-weight: 400;
}
.img {
width: 100%;
height: 100%;
border-radius: 31.54rpx 31.54rpx 0rpx 0rpx;
overflow: hidden;
}
.close {
position: absolute;
top: 30rpx;
right: 30rpx;
width: 50.82rpx;
height: 50.82rpx;
}
.border {
position: absolute;
bottom: -1rpx;
left: 0;
background-color: #fff;
height: 40rpx;
width: 100%;
border-radius: 40rpx 40rpx 0 0;
}
}
.white_card {
border-radius: 31.54rpx 31.54rpx 0rpx 0rpx;
background-color: #fff;
margin: 0 28rpx;
padding-bottom: 30rpx;
color: #737373;
font-size: 26.29rpx;
.price {
font-size: 35rpx;
font-family: SF Pro Display-Semibold, SF Pro Display;
font-weight: 600;
color: #F84221;
padding-right: 30rpx;
.pro {
font-size: 49.07rpx;
}
}
.short_name {
font-size: 33rpx;
font-family: PingFang SC-Semibold, PingFang SC;
font-weight: 600;
color: #333333;
}
.shop_name {
display: flex;
background: #FEF5F3;
padding: 0 16rpx;
border-radius: 26rpx 26rpx 26rpx 26rpx;
margin-top: 30rpx;
margin-bottom: 20rpx;
align-items: center;
.icon {
width: 31.54rpx;
height: 31.54rpx;
margin-right: 10rpx;
}
}
.m_title {
font-size: 30rpx;
font-family: PingFang SC-Medium, PingFang SC;
font-weight: 500;
color: #333333;
margin-top: 31rpx;
margin-bottom: 21rpx;
}
.attr {
opacity: 1;
border: 1rpx solid #F84221;
color: #333333;
padding: 15rpx 30rpx;
margin-right: 20rpx;
height: 63rpx;
line-height: 60rpx;
border-radius: 63rpx;
display: flex;
align-items: center;
justify-content: center;
}
.attr_active{
// background-color: #FEF5F3;
// color: #F84221;
background-color: #F84221;
color: #fff;
}
.num {
display: flex;
justify-content: space-between;
align-items: center;
.input {
display: flex;
align-items: center;
height: 48rpx;
.input_item {
width: 44rpx;
height: 44rpx;
text-align: center;
line-height: 40rpx;
border: 2rpx solid #fff;
font-size: 26rpx;
color: #333;
}
.input_view {
width: 60rpx;
}
.sub {
border: 2rpx solid #FCB9AD;
border-radius: 7rpx 0rpx 0rpx 7rpx;
background: #FFFFFF;
font-size: 26rpx;
color: #B3B3B3;
}
.plus {
border: 2rpx solid #FCB9AD;
border-radius: 0rpx 7rpx 7rpx 0rpx;
background: #FFFFFF;
font-size: 26rpx;
color: #B3B3B3;
}
}
}
}
.button {
padding: 28rpx;
margin-bottom: 28rpx;
background-color: #fff;
display: flex;
justify-content: space-around;
padding-bottom: constant(safe-area-inset-bottom); /// IOS<11.2/
padding-bottom: env(safe-area-inset-bottom); /// IOS>11.2/
padding-bottom: constant(safe-area-inset-bottom); /// IOS<11.2/
padding-bottom: env(safe-area-inset-bottom); /// IOS>11.2/
.b_icon {
display: flex;
flex-direction: column;
align-items: center;
font-size: 19rpx;
font-weight: 400;
color: #333333;
position: relative;
image {
width: 50.82rpx;
height: 50.82rpx;
}
.badge {
position: absolute;
top: -5rpx;
right: -10rpx;
color: #fff;
min-width: 28rpx;
height: 28rpx;
text-align: center;
line-height: 24rpx;
background: #F84221;
border-radius: 16rpx 16rpx 16rpx 16rpx;
border: 2rpx solid #FFFFFF;
}
}
.btn {
width: 575rpx;
height: 84rpx;
background: linear-gradient(270deg, #FF6D20 0%, #F84221 100%);
border-radius: 42rpx 42rpx 42rpx 42rpx;
display: flex;
justify-content: center;
align-items: center;
font-size: 30rpx;
font-family: PingFang SC-Medium, PingFang SC;
font-weight: 500;
color: #FFFFFF;
}
}
}
</style>

View File

@ -0,0 +1,534 @@
<template>
<view>
<uni-popup ref="popupRef" type="bottom" @change="changeShow">
<view class="pop">
<scroll-view scroll-y class="scroll">
<view class="image">
<swiper class="swiper" :current="current" autoplay style="width: 100%;height: 100%;" @change="changeCurrent">
<block v-if="product.slider_image && product.slider_image.length>0">
<swiper-item v-for="(item,index) in product.slider_image" :key="index">
<image class="img" :src="item"></image>
</swiper-item>
</block>
<swiper-item v-else>
<image class="img" :src="datas.image||defualtImg"></image>
</swiper-item>
</swiper>
<view class="current">{{current+1}}/{{product.slider_image && product.slider_image.length||1}}</view>
<image class="close" src="@/static/images/icon/close.png" @click="close()"></image>
<view class="border"></view>
</view>
<view class="white_card">
<view class="flex flex_end">
<block v-if="datas.limited_price">
<view class="price"><text class="pro">{{leftPrice2}}.</text>{{rightPrice2}}
</view>
<view class="price" style="text-decoration: line-through;color: #999;font-weight: 400;font-size: 28rpx;">原价: <text>{{leftPrice}}.</text>{{rightPrice}}</view>
</block>
<view v-else class="price"><text>{{leftPrice}}.</text>{{rightPrice}}</view>
<!-- <view>订货价</view> -->
</view>
<view class="short_name">{{datas.store_name}}</view>
<view class="flex">
<view class="shop_name">
<image class="icon" src="@/static/images/icon/short.png"></image>
<view>{{datas.merchant.mer_name}}</view>
</view>
</view>
<u-line></u-line>
<block name="规格选中" v-for="(att, indexw) in attr" :key="indexw">
<view class="m_title">{{att.attr_name}}</view>
<view class="flex" style="flex-wrap: wrap;">
<view class="attr" :class="{'attr_active': item.check}"
v-for="(item, indexn) in att.attr_value" :key="indexn"
@click="changeAttr(indexw, indexn)">
{{item.attr}}
</view>
</view>
</block>
<view class="m_title num">
<view>购买数量</view>
<view class="input">
<view class="input_item sub" @click="subCartNum">-</view>
<input class="input_item input_view" v-model="cart_num" type="number" @input="inputCartNum" />
<view class="input_item plus" @click="plusCartNum">+</view>
</view>
</view>
<view>
商品库存 <text style="margin-left: 20rpx;">{{(sku[changeSkuKey] && sku[changeSkuKey].stock)||change.stock}}</text>
</view>
</view>
</scroll-view>
<view class="button">
<!-- <view class="b_icon" @click="navgoCart()">
<image src="@/static/images/icon/car.png"></image>
<view>购物车</view>
<view class="badge" v-if="goodsNum">{{goodsNum}}</view>
</view> -->
<view class="btn" @click.stop="$u.throttle(addcart, 1500)"> {{isBuy?'立即购买':'加入购物车'}} </view>
</view>
</view>
</uni-popup>
</view>
</template>
<script>
import {
postCartAdd,
getProductDetail
} from '@/api/store.js';
import { Toast } from '../libs/uniApi';
import { data } from '../uni_modules/uview-ui/libs/mixin/mixin';
export default {
name: "shortPopup",
props: {
source:{
type: Number,
default: null
},
isBuy: {
type: Boolean,
default: false
}
},
data() {
return {
isShow: false, //
defualtImg: 'https://lihai001.oss-cn-chengdu.aliyuncs.com/uploads/20230130/00ebcfdf75684f5494c0193075055d1.png',
datas: {
image: '',
store_name: '',
merchant: {
mer_name: ''
},
price: '',
},
product: {},
attrValue: [],
attr: [], //
changeSkuKey: '', //key
sku: {}, //
sku_key_list: [], //
changeSkuKey: '', //
change: {
stock: ''
},
cart_num: 1, //
goodsNum: 0, //
current: 0, //
};
},
mounted() {},
computed:{
leftPrice(){
return this.sku[this.changeSkuKey]?.price?.split('.')[0]||'0';
},
rightPrice(){
return this.sku[this.changeSkuKey]?.price?.split('.')[1]||'00';
},
leftPrice2(){
return this.datas.limited_price.split('.')[0]||'0';
},
rightPrice2(){
return this.datas.limited_price.split('.')[1]||'00';
}
},
methods: {
// ,
setDatas(datas, goodsNum) {
getProductDetail(datas.product_id).then((res)=>{
this.attr = res.data.attr;
if(this.attr.length>0) this.attr.forEach((item, index)=>{
this.changeAttr(index, 0);
})
else this.changeSkuKey = '';
})
this.goodsNum = goodsNum;
this.datas = datas;
this.product = datas.product;
this.attrValue = datas.product?.attrValue;
this.change = this.attrValue[0];
this.cart_num = 1;
this.sku = datas.sku||{};
this.sku_key_list = Object.keys(this.sku);
},
//
inputCartNum(e) {
if(this.sku){
if (+e.detail.value > this.sku[this.changeSkuKey].stock) {
uni.showToast({
icon: 'none',
title: '不能超出库存哦'
})
this.$nextTick(() => {
this.cart_num = this.sku[this.changeSkuKey].stock;
})
}
}else if (this.change.stock <= this.cart_num) {
uni.showToast({
icon: 'none',
title: '不能超出库存哦'
})
this.$nextTick(() => {
this.cart_num = this.change.stock;
})
}
},
//
subCartNum() {
if (this.cart_num <= 1) {
return uni.showToast({
icon: 'none',
title: '最少要买一件哦'
})
}
this.cart_num--;
},
//
plusCartNum() {
return Toast('最多购买一件哦');
if(this.sku){
if (this.sku[this.changeSkuKey].stock <= this.cart_num) {
return uni.showToast({
icon: 'none',
title: '不能超出库存哦'
})
}
}else if (this.change.stock <= this.cart_num) {
return uni.showToast({
icon: 'none',
title: '不能超出库存哦'
})
}
this.cart_num++;
},
changeAttr: function(indexw, indexn) {
let that = this;
this.$set(this.attr[indexw], 'index', this.attr[indexw].attr_values[indexn]);
this.attr[indexw].attr_value.forEach((item, index)=>{
if(index==indexn)item.check = true;
else item.check = false;
})
let value = that.getCheckedValue().join(",");
this.changeSkuKey = value;
},
//
getCheckedValue: function() {
let productAttr = this.attr;
let value = [];
for (let i = 0; i < productAttr.length; i++) {
for (let j = 0; j < productAttr[i].attr_values.length; j++) {
if (productAttr[i].index === productAttr[i].attr_values[j]) {
value.push(productAttr[i].attr_values[j]);
}
}
}
return value;
},
//
addcart() {
if (this.sku[this.changeSkuKey]) {
if (this.cart_num > this.sku[this.changeSkuKey].stock) return uni.showToast({
icon: 'none',
title: '不能超出库存哦'
})
let data = {
cart_num: this.cart_num,
is_new: 0,
product_attr_unique: this.sku[this.changeSkuKey].unique,
product_id: this.datas.product_id,
product_type: this.datas.product_type,
source: this.source,
spread_id: "",
}
let that = this
let res = postCartAdd({
...data
}).then((res, err) => {
if(this.isBuy) return uni.navigateTo({
url: `/pages/users/order_confirm/index?cartId=${res.data.cart_id}&type_id=${this.datas.merchant.type_id}&source=${this.source}`
});
uni.showToast({
title: "加入成功",
duration: 1000,
})
this.$emit('addCart');
this.close();
if(this.isBuy){
this.navgoCart();
}
}).catch(err => {
uni.showToast({
title: err,
icon: "none",
duration: 1000,
})
})
} else {
uni.showToast({
icon: 'none',
title: '商品规格不存在'
})
}
},
//
changeCurrent(e){
this.current = e.detail.current;
},
navgoCart(url=null) {
if(!url) {
if(this.source) url = '/pages/order_addcart/order_addcart?source='+this.source;
else url = '/pages/order_addcart/order_addcart';
}
uni.navigateTo({
url
})
},
open() {
this.$refs.popupRef.open();
},
close() {
this.$refs.popupRef.close();
},
changeShow(e) {
this.isShow = e.show;
}
}
}
</script>
<style lang="scss">
.pop {
background-color: #fff;
border-radius: 31.54rpx 31.54rpx 0rpx 0rpx;
overflow: hidden;
position: relative;
.scroll{
height: calc(90vh - 150rpx);
}
.flex_end {
align-items: flex-end;
}
.image {
height: 750rpx;
width: 750rpx;
position: relative;
.current{
position: absolute;
bottom: 70rpx;
left: 30rpx;
width: 67rpx;
height: 37rpx;
background: rgba(#333, 0.2);
border-radius: 11rpx 11rpx 11rpx 11rpx;
text-align: center;
color: #fff;
font-size: 26rpx;
font-family: PingFang SC-Regular, PingFang SC;
font-weight: 400;
}
.img {
width: 100%;
height: 100%;
border-radius: 31.54rpx 31.54rpx 0rpx 0rpx;
overflow: hidden;
}
.close {
position: absolute;
top: 30rpx;
right: 30rpx;
width: 50.82rpx;
height: 50.82rpx;
}
.border {
position: absolute;
bottom: -1rpx;
left: 0;
background-color: #fff;
height: 40rpx;
width: 100%;
border-radius: 40rpx 40rpx 0 0;
}
}
.white_card {
border-radius: 31.54rpx 31.54rpx 0rpx 0rpx;
background-color: #fff;
margin: 0 28rpx;
padding-bottom: 30rpx;
color: #737373;
font-size: 26.29rpx;
.price {
font-size: 35rpx;
font-family: SF Pro Display-Semibold, SF Pro Display;
font-weight: 600;
color: #F84221;
padding-right: 30rpx;
.pro {
font-size: 49.07rpx;
}
}
.short_name {
font-size: 33rpx;
font-family: PingFang SC-Semibold, PingFang SC;
font-weight: 600;
color: #333333;
}
.shop_name {
display: flex;
background: #FEF5F3;
padding: 0 16rpx;
border-radius: 26rpx 26rpx 26rpx 26rpx;
margin-top: 30rpx;
margin-bottom: 20rpx;
align-items: center;
.icon {
width: 31.54rpx;
height: 31.54rpx;
margin-right: 10rpx;
}
}
.m_title {
font-size: 30rpx;
font-family: PingFang SC-Medium, PingFang SC;
font-weight: 500;
color: #333333;
margin-top: 31rpx;
margin-bottom: 21rpx;
}
.attr {
opacity: 1;
border: 1rpx solid #F84221;
color: #333333;
padding: 15rpx 30rpx;
margin-right: 20rpx;
height: 63rpx;
line-height: 60rpx;
border-radius: 63rpx;
display: flex;
align-items: center;
justify-content: center;
}
.attr_active{
// background-color: #FEF5F3;
// color: #F84221;
background-color: #F84221;
color: #fff;
}
.num {
display: flex;
justify-content: space-between;
align-items: center;
.input {
display: flex;
align-items: center;
height: 48rpx;
.input_item {
width: 44rpx;
height: 44rpx;
text-align: center;
line-height: 40rpx;
border: 2rpx solid #fff;
font-size: 26rpx;
color: #333;
}
.input_view {
width: 60rpx;
}
.sub {
border: 2rpx solid #FCB9AD;
border-radius: 7rpx 0rpx 0rpx 7rpx;
background: #FFFFFF;
font-size: 26rpx;
color: #B3B3B3;
}
.plus {
border: 2rpx solid #FCB9AD;
border-radius: 0rpx 7rpx 7rpx 0rpx;
background: #FFFFFF;
font-size: 26rpx;
color: #B3B3B3;
}
}
}
}
.button {
padding: 28rpx;
margin-bottom: 28rpx;
background-color: #fff;
display: flex;
justify-content: space-around;
padding-bottom: constant(safe-area-inset-bottom); /// IOS<11.2/
padding-bottom: env(safe-area-inset-bottom); /// IOS>11.2/
padding-bottom: constant(safe-area-inset-bottom); /// IOS<11.2/
padding-bottom: env(safe-area-inset-bottom); /// IOS>11.2/
.b_icon {
display: flex;
flex-direction: column;
align-items: center;
font-size: 19rpx;
font-weight: 400;
color: #333333;
position: relative;
image {
width: 50.82rpx;
height: 50.82rpx;
}
.badge {
position: absolute;
top: -5rpx;
right: -10rpx;
color: #fff;
min-width: 28rpx;
height: 28rpx;
text-align: center;
line-height: 24rpx;
background: #F84221;
border-radius: 16rpx 16rpx 16rpx 16rpx;
border: 2rpx solid #FFFFFF;
}
}
.btn {
width: 575rpx;
height: 84rpx;
background: linear-gradient(270deg, #FF6D20 0%, #F84221 100%);
border-radius: 42rpx 42rpx 42rpx 42rpx;
display: flex;
justify-content: center;
align-items: center;
font-size: 30rpx;
font-family: PingFang SC-Medium, PingFang SC;
font-weight: 500;
color: #FFFFFF;
}
}
}
</style>

View File

@ -0,0 +1,241 @@
<template>
<view v-if="showPopup" class="uni-popup" @touchmove.stop.prevent="clear">
<uni-transition :mode-class="['fade']" :styles="maskClass" :show="showTrans" @click="onTap" />
<uni-transition :mode-class="ani" :styles="transClass" :show="showTrans" @click="onTap">
<view class="uni-popup__wrapper-box" @click.stop="clear">
<slot />
</view>
</uni-transition>
</view>
</template>
<script>
export default {
props: {
//
animation: {
type: Boolean,
default: true
},
// top: bottomcenter
type: {
type: String,
default: 'center'
},
// maskClick
maskClick: {
type: Boolean,
default: true
}
},
data() {
return {
ani: [],
showPopup: false,
showTrans: false,
maskClass: {
'position': 'fixed',
'bottom': 0,
'top': 0,
'left': 0,
'right': 0,
'backgroundColor': 'rgba(0, 0, 0, 0)'
},
transClass: {
'position': 'fixed',
'left': 0,
'right': 0,
}
}
},
watch: {
type: {
handler: function(newVal) {
switch (this.type) {
case 'top':
this.ani = ['slide-top']
this.transClass = {
'position': 'fixed',
'left': 0,
'right': 0,
}
break
case 'bottom':
this.ani = ['slide-bottom']
this.transClass = {
'position': 'fixed',
'left': 0,
'right': 0,
'bottom': 0
}
console.log('直播调用弹窗')
break
case 'center':
this.ani = ['zoom-out', 'fade']
this.transClass = {
'position': 'fixed',
/* #ifndef APP-NVUE */
'display': 'flex',
'flexDirection': 'column',
/* #endif */
'bottom': 0,
'left': 0,
'right': 0,
'top': 0,
'justifyContent': 'center',
'alignItems': 'center'
}
break
}
},
immediate: true
}
},
created() {},
methods: {
clear(e) {
// TODO nvue
e.stopPropagation()
},
open() {
this.showPopup = true
this.$nextTick(() => {
setTimeout(() => {
this.showTrans = true
}, 0);
})
this.$emit('change', {
show: true
})
},
close(type) {
this.showTrans = false
this.$nextTick(() => {
clearTimeout(this.timer)
this.timer = setTimeout(() => {
this.$emit('change', {
show: false
})
this.showPopup = false
}, 0)
})
},
onTap() {
if (!this.maskClick) return
this.close()
}
}
}
</script>
<style scoped>
.uni-popup {
position: fixed;
/* #ifdef H5 */
top: var(--window-top);
/* #endif */
/* #ifndef H5 */
top: 0;
/* #endif */
bottom: 0;
left: 0;
right: 0;
/* #ifndef APP-NVUE */
z-index: 99;
/* #endif */
}
.uni-popup__mask {
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
background-color: rgba(0, 0, 0, 0.4);
opacity: 0;
}
.mask-ani {
transition-property: opacity;
transition-duration: 0.2s;
}
.uni-top-mask {
opacity: 1;
}
.uni-bottom-mask {
opacity: 1;
}
.uni-center-mask {
opacity: 1;
}
.uni-popup__wrapper {
/* #ifndef APP-NVUE */
display: block;
/* #endif */
position: absolute;
}
.top {
top: 0;
left: 0;
right: 0;
transform: translateY(-500px);
}
.bottom {
bottom: 0;
left: 0;
right: 0;
transform: translateY(500px);
}
.center {
/* #ifndef APP-NVUE */
display: flex;
flex-direction: column;
/* #endif */
bottom: 0;
left: 0;
right: 0;
top: 0;
justify-content: center;
align-items: center;
transform: scale(1.2);
opacity: 0;
}
.uni-popup__wrapper-box {
/* #ifndef APP-NVUE */
display: block;
/* #endif */
position: relative;
}
.content-ani {
/* transition: transform 0.3s;
*/
transition-property: transform, opacity;
transition-duration: 0.2s;
}
.uni-top-content {
transform: translateY(0);
}
.uni-bottom-content {
transform: translateY(0);
}
.uni-center-content {
transform: scale(1);
opacity: 1;
}
</style>

View File

@ -0,0 +1,241 @@
<template>
<view v-if="showPopup" class="uni-popup" @touchmove.stop.prevent="clear">
<uni-transition :mode-class="['fade']" :styles="maskClass" :show="showTrans" @click="onTap" />
<uni-transition :mode-class="ani" :styles="transClass" :show="showTrans" @click="onTap">
<view class="uni-popup__wrapper-box" @click.stop="clear">
<slot />
</view>
</uni-transition>
</view>
</template>
<script>
export default {
props: {
//
animation: {
type: Boolean,
default: true
},
// top: bottomcenter
type: {
type: String,
default: 'center'
},
// maskClick
maskClick: {
type: Boolean,
default: true
}
},
data() {
return {
ani: [],
showPopup: false,
showTrans: false,
maskClass: {
'position': 'fixed',
'bottom': 0,
'top': 0,
'left': 0,
'right': 0,
'backgroundColor': 'rgba(0, 0, 0, 0.4)'
},
transClass: {
'position': 'fixed',
'left': 0,
'right': 0,
}
}
},
watch: {
type: {
handler: function(newVal) {
switch (this.type) {
case 'top':
this.ani = ['slide-top']
this.transClass = {
'position': 'fixed',
'left': 0,
'right': 0,
}
break
case 'bottom':
this.ani = ['slide-bottom']
this.transClass = {
'position': 'fixed',
'left': 0,
'right': 0,
'bottom': 0
}
console.log('底部条用')
console.log(this.type)
break
case 'center':
this.ani = ['zoom-out', 'fade']
this.transClass = {
'position': 'fixed',
/* #ifndef APP-NVUE */
'display': 'flex',
'flexDirection': 'column',
/* #endif */
'bottom': 0,
'left': 0,
'right': 0,
'top': 0,
'justifyContent': 'center',
'alignItems': 'center'
}
break
}
},
immediate: true
}
},
created() {},
methods: {
clear(e) {
// TODO nvue
e.stopPropagation()
},
open() {
this.showPopup = true
this.$nextTick(() => {
setTimeout(() => {
this.showTrans = true
}, 50);
})
this.$emit('change', {
show: true
})
},
close(type) {
this.showTrans = false
this.$nextTick(() => {
clearTimeout(this.timer)
this.timer = setTimeout(() => {
this.$emit('change', {
show: false
})
this.showPopup = false
}, 300)
})
},
onTap() {
if (!this.maskClick) return
this.close()
}
}
}
</script>
<style scoped>
.uni-popup {
position: fixed;
/* #ifdef H5 */
top: var(--window-top);
/* #endif */
/* #ifndef H5 */
top: 0;
/* #endif */
bottom: 0;
left: 0;
right: 0;
/* #ifndef APP-NVUE */
z-index: 99;
/* #endif */
}
.uni-popup__mask {
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
background-color: rgba(0, 0, 0, 0.4);
opacity: 0;
}
.mask-ani {
transition-property: opacity;
transition-duration: 0.2s;
}
.uni-top-mask {
opacity: 1;
}
.uni-bottom-mask {
opacity: 1;
}
.uni-center-mask {
opacity: 1;
}
.uni-popup__wrapper {
/* #ifndef APP-NVUE */
display: block;
/* #endif */
position: absolute;
}
.top {
top: 0;
left: 0;
right: 0;
transform: translateY(-500px);
}
.bottom {
bottom: 0;
left: 0;
right: 0;
transform: translateY(500px);
}
.center {
/* #ifndef APP-NVUE */
display: flex;
flex-direction: column;
/* #endif */
bottom: 0;
left: 0;
right: 0;
top: 0;
justify-content: center;
align-items: center;
transform: scale(1.2);
opacity: 0;
}
.uni-popup__wrapper-box {
/* #ifndef APP-NVUE */
display: block;
/* #endif */
position: relative;
}
.content-ani {
/* transition: transform 0.3s;
*/
transition-property: transform, opacity;
transition-duration: 0.2s;
}
.uni-top-content {
transform: translateY(0);
}
.uni-bottom-content {
transform: translateY(0);
}
.uni-center-content {
transform: scale(1);
opacity: 1;
}
</style>

View File

@ -37,8 +37,8 @@
</block>
</swiper>
</view>
<u-picker :defaultIndex="defaInd" :show="showPicker" ref="uPicker" :columns="columnData" @confirm="confirm"
@cancel="showPicker = false" @change="changeHandler" keyName="name"></u-picker>
<!-- <u-picker :defaultIndex="defaInd" :show="showPicker" ref="uPicker" :columns="columnData" @confirm="confirm"
@cancel="showPicker = false" @change="changeHandler" keyName="name"></u-picker> -->
</view>
</template>
@ -108,7 +108,7 @@
created() {
this.getBanner()
this.Area()
// this.Area()
},
@ -120,11 +120,6 @@
});
},
onShow() {
this.getBanner()
this.Area()
},
methods: {
swiperClick(item) {
const url = item.info[1].value
@ -236,7 +231,7 @@
width: 102%;
height: 133px;
border-radius: 30px 30px 0 0;
background-color: #fff;
background-color: #f8f8f8;
}
.bg-img {
@ -294,7 +289,7 @@
.search_content {
margin: 0 auto;
width: 724rpx;
height: 74rpx;
height: 64rpx;
padding: 2px 2px 2px 21.05rpx;
border-radius: 175rpx;
background: #fff;
@ -312,8 +307,8 @@
.search_btn {
color: #fff;
width: 105.26rpx;
height: 52.63rpx;
line-height: 52.63rpx;
height: 56rpx;
line-height: 56rpx;
background: #f84221;
border-radius: 100px;
font-size: 28.07rpx;

View File

@ -7,6 +7,9 @@ let httpApi
let httpApiTwo
let httpApiThree
let httpApiFour
let httpApiFive
let httpApiSix
let wsApi
// 在打包之前请检查当前环境是否正确
const env = 'dev'; // 开发
@ -19,26 +22,33 @@ switch (env) {
httpApiTwo = 'https://nk.lihaink.cn'
httpApiThree = 'http://ceshi-oa.lihaink.cn'
httpApiFour = 'https://worker-task.lihaink.cn'
httpApiSix = 'https://new-worker.lihaink.cn'
wsApi = 'wss://shop.lihaink.cn'
break;
case 'prew':
httpApi = 'https://test.shop.lihaink.cn' //预发布环境
httpApiTwo = "https://nk.lihaink.cn"
httpApiThree = 'http://ceshi-oa.lihaink.cn'
httpApiFour = 'https://preview-worker-task.lihaink.cn'
httpApiSix = 'https://ceshi-new-wokr.lihaink.cn'
wsApi = 'wss://test.shop.lihaink.cn'
break;
default:
httpApi = "https://crmeb-test.shop.lihaink.cn" // 测试
httpApiTwo = "https://nk.lihaink.cn"
httpApiThree = 'http://ceshi-oa.lihaink.cn'
httpApiFour = 'https://ceshi-worker-task.lihaink.cn'
httpApiFive = 'https://ceshi-zhibo.lihaink.cn'
httpApiSix = 'https://ceshi-new-wokr.lihaink.cn'
wsApi = 'wss://crmeb-test.shop.lihaink.cn'
}
const ossUrl = 'https://lihai001.oss-cn-chengdu.aliyuncs.com/public'
// httpApi=''
// 聊天接口修改此字符 小程序聊天要求wss 例如wss://mer.crmeb.net
// let wsApi = 'ws://192.168.3.20:8324'
let wsApi = 'wss://shop.lihaink.cn'
// wsApi = 'ws://192.168.1.17:8324'
let wsApi_one = 'wss://ceshi-zhibo.lihaink.cn/chat_room'
module.exports = {
// 请求域名 格式: https://您的域名
@ -48,18 +58,27 @@ module.exports = {
HTTP_REQUEST_URL_TWO: httpApiTwo,
HTTP_REQUEST_URL_THREE: httpApiThree,
HTTP_REQUEST_URL_FOUR: httpApiFour,
HTTP_REQUEST_URL_FIVE: httpApiFive,
HTTP_REQUEST_URL_SIX: httpApiSix,
VUE_APP_WS_URL: `${wsApi}?type=user`,
VUE_APP_WS_URL_ONE:wsApi_one,
// #endif
// #ifdef H5
//H5接口是浏览器地址
HTTP_REQUEST_URL_FOUR: httpApiFour|| window.location.protocol + "//" + window.location.host,
HTTP_REQUEST_URL: httpApi || window.location.protocol + "//" + window.location.host,
HTTP_REQUEST_URL_TWO: httpApiTwo || window.location.protocol + "//" + window.location.host,
HTTP_REQUEST_URL: process.env.NODE_ENV == 'development'? httpApi : window.location.protocol + "//" + window.location.host,
HTTP_REQUEST_URL_TWO: httpApiTwo,
HTTP_REQUEST_URL_FIVE: httpApiFive,
HTTP_REQUEST_URL_SIX: httpApiSix,
HTTP_REQUEST_URL_FOUR: window.location.host == 'shop.lihaink.cn' ?'https://worker-task.lihaink.cn':window.location.host == 'test.shop.lihaink.cn'?'https://preview-worker-task.lihaink.cn':'https://ceshi-worker-task.lihaink.cn',
// 聊天长连接地址
VUE_APP_WS_URL: wsApi ? `${wsApi}?type=user` : VUE_APP_WS_URL,
// #endif
openPlantGrass: openPlantGrass,
ENV: env,
OSS_URL: ossUrl,
HEADER: {
'content-type': 'application/json',
//#ifdef H5

View File

@ -17,10 +17,14 @@ import {
} from '@/config/app';
import skeleton from './components/skeleton/index.vue'
import BaseMoney from './components/BaseMoney.vue';
import Loading from './components/Loading.vue';
import activityHome from './components/activityHome.vue';
import uView from '@/uni_modules/uview-ui'
Vue.use(uView)
Vue.component('skeleton', skeleton)
Vue.component('BaseMoney', BaseMoney)
Vue.component('Loading', Loading)
Vue.component('activityHome', activityHome)
Vue.prototype.$util = util;
Vue.prototype.$Cache = Cache;
Vue.prototype.$eventHub = new Vue();

View File

@ -2,8 +2,8 @@
"name" : "惠农生活",
"appid" : "__UNI__3A527D1",
"description" : "",
"versionName" : "1.4.7",
"versionCode" : 147,
"versionName" : "1.8.0",
"versionCode" : 180,
"transformPx" : false,
/* 5+App */
"app-plus" : {
@ -12,8 +12,11 @@
"nvueCompiler" : "uni-app",
"nvueStyleCompiler" : "uni-app",
"compilerVersion" : 3,
"compatible" : {
"ignoreVersion" : true //trueHBuilderX1.9.0
},
"splashscreen" : {
"alwaysShowBeforeRender" : true,
"alwaysShowBeforeRender" : false,
"waiting" : true,
"autoclose" : true,
"delay" : 0
@ -32,7 +35,9 @@
"description" : "uni小程序"
},
"Maps" : {},
"Push" : {}
"Push" : {},
"LivePusher" : {},
"Record" : {}
},
"safearea" : {
"bottom" : {
@ -45,6 +50,8 @@
"android" : {
"resizeableActivity" : true,
"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.ACCESS_FINE_LOCATION\"/>",
"<uses-permission android:name=\"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS\"/>",
@ -58,17 +65,17 @@
"<uses-permission android:name=\"android.permission.CHANGE_CONFIGURATION\"/>",
"<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.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_LOGS\"/>",
"<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>",
"<uses-permission android:name=\"android.permission.RECORD_AUDIO\"/>",
"<uses-permission android:name=\"android.permission.VIBRATE\"/>",
"<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>",
"<uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\"/>",
"<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>",
"<uses-permission android:name=\"android.permission.BLUETOOTH\"/>",
"<uses-permission android:name=\"android.permission.BLUETOOTH_ADMIN\"/>"
"<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>"
],
"abiFilters" : [ "armeabi-v7a", "arm64-v8a", "x86" ],
"permissionExternalStorage" : {
@ -77,7 +84,9 @@
},
"permissionPhoneState" : {
"request" : "none" //
}
},
"targetSdkVersion" : 30,
"minSdkVersion" : 23
},
/* ios */
"ios" : {
@ -87,7 +96,8 @@
"NSCameraUsageDescription" : "上传用户头像保存分享海报",
"NSLocationWhenInUseUsageDescription" : "根据客户地理位置推荐最近门店",
"NSLocationAlwaysUsageDescription" : "根据客户地理位置推荐最近门店",
"NSLocationAlwaysAndWhenInUseUsageDescription" : "根据客户地理位置推荐最近门店"
"NSLocationAlwaysAndWhenInUseUsageDescription" : "根据客户地理位置推荐最近门店",
"NSMicrophoneUsageDescription" : "根据用户录音进行语音识别转文字"
},
"idfa" : false,
"dSYMs" : false
@ -97,7 +107,8 @@
"maps" : {
"amap" : {
"appkey_ios" : "82af93ec51139c712c4118d84ba684ee",
"appkey_android" : "0799f37420c0784f1e6cba230a68bdb1"
"appkey_android" : "0799f37420c0784f1e6cba230a68bdb1",
"name" : "amap_18982406440DFVLElaO"
}
},
"payment" : {
@ -117,7 +128,8 @@
"amap" : {
"__platform__" : [ "ios", "android" ],
"appkey_ios" : "82af93ec51139c712c4118d84ba684ee",
"appkey_android" : "0799f37420c0784f1e6cba230a68bdb1"
"appkey_android" : "0799f37420c0784f1e6cba230a68bdb1",
"name" : "amap_18982406440DFVLElaO"
}
},
"oauth" : {},
@ -157,7 +169,17 @@
}
},
"splashscreen" : {
"useOriginalMsgbox" : true
"useOriginalMsgbox" : true,
"androidStyle" : "default",
"iosStyle" : "common",
"ios" : {
"storyboard" : "C:/Users/ghf/Downloads/CustomStoryboard.zip"
},
"android" : {
"hdpi" : "",
"xhdpi" : "",
"xxhdpi" : "static/images/guide.png"
}
}
},
"nativePlugins" : {
@ -328,8 +350,10 @@
"domain" : "",
"sdkConfigs" : {
"maps" : {
"qqmap" : {
"key" : "SMJBZ-WCHK4-ZPZUA-DSIXI-XDDVQ-XWFX7"
"amap" : {
"key" : "275cd3601b1b2d6414f6c988e7911664",
"securityJsCode" : "d2d7c56801819e8bdf71b8a71846f235",
"serviceHost" : ""
}
}
},

109
package-lock.json generated
View File

@ -1,24 +1,23 @@
{
"requires": true,
"name": "e-select下拉选择器",
"version": "1.0.7",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
"ansi-regex": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
"integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
"dev": true
"integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
},
"ansi-styles": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
"integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
"dev": true
"integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
},
"babel-code-frame": {
"version": "6.26.0",
"resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
"integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
"dev": true,
"requires": {
"chalk": "^1.1.3",
"esutils": "^2.0.2",
@ -29,7 +28,6 @@
"version": "6.26.3",
"resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.3.tgz",
"integrity": "sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==",
"dev": true,
"requires": {
"babel-code-frame": "^6.26.0",
"babel-generator": "^6.26.0",
@ -56,7 +54,6 @@
"version": "6.26.1",
"resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz",
"integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==",
"dev": true,
"requires": {
"babel-messages": "^6.23.0",
"babel-runtime": "^6.26.0",
@ -72,7 +69,6 @@
"version": "6.24.1",
"resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz",
"integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=",
"dev": true,
"requires": {
"babel-runtime": "^6.22.0",
"babel-template": "^6.24.1"
@ -82,7 +78,6 @@
"version": "6.23.0",
"resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",
"integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
"dev": true,
"requires": {
"babel-runtime": "^6.22.0"
}
@ -91,7 +86,6 @@
"version": "6.26.0",
"resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz",
"integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=",
"dev": true,
"requires": {
"babel-core": "^6.26.0",
"babel-runtime": "^6.26.0",
@ -106,7 +100,6 @@
"version": "6.26.0",
"resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
"integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
"dev": true,
"requires": {
"core-js": "^2.4.0",
"regenerator-runtime": "^0.11.0"
@ -116,7 +109,6 @@
"version": "6.26.0",
"resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz",
"integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=",
"dev": true,
"requires": {
"babel-runtime": "^6.26.0",
"babel-traverse": "^6.26.0",
@ -129,7 +121,6 @@
"version": "6.26.0",
"resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz",
"integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=",
"dev": true,
"requires": {
"babel-code-frame": "^6.26.0",
"babel-messages": "^6.23.0",
@ -146,7 +137,6 @@
"version": "6.26.0",
"resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
"integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
"dev": true,
"requires": {
"babel-runtime": "^6.26.0",
"esutils": "^2.0.2",
@ -157,20 +147,17 @@
"babylon": {
"version": "6.18.0",
"resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz",
"integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==",
"dev": true
"integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ=="
},
"balanced-match": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
"integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
"dev": true
"integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
},
"brace-expansion": {
"version": "1.1.11",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
"dev": true,
"requires": {
"balanced-match": "^1.0.0",
"concat-map": "0.0.1"
@ -180,7 +167,6 @@
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
"integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
"dev": true,
"requires": {
"ansi-styles": "^2.2.1",
"escape-string-regexp": "^1.0.2",
@ -192,14 +178,12 @@
"concat-map": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
"integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
"dev": true
"integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
},
"convert-source-map": {
"version": "1.7.0",
"resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz",
"integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==",
"dev": true,
"requires": {
"safe-buffer": "~5.1.1"
}
@ -207,14 +191,12 @@
"core-js": {
"version": "2.6.11",
"resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz",
"integrity": "sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==",
"dev": true
"integrity": "sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg=="
},
"debug": {
"version": "2.6.9",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
"dev": true,
"requires": {
"ms": "2.0.0"
}
@ -223,7 +205,6 @@
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz",
"integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=",
"dev": true,
"requires": {
"repeating": "^2.0.0"
}
@ -231,26 +212,22 @@
"escape-string-regexp": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
"integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
"dev": true
"integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
},
"esutils": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
"integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
"dev": true
"integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g=="
},
"globals": {
"version": "9.18.0",
"resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz",
"integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==",
"dev": true
"integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ=="
},
"has-ansi": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
"integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
"dev": true,
"requires": {
"ansi-regex": "^2.0.0"
}
@ -259,7 +236,6 @@
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz",
"integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=",
"dev": true,
"requires": {
"os-homedir": "^1.0.0",
"os-tmpdir": "^1.0.1"
@ -269,7 +245,6 @@
"version": "2.2.4",
"resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
"integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
"dev": true,
"requires": {
"loose-envify": "^1.0.0"
}
@ -277,38 +252,32 @@
"is-finite": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz",
"integrity": "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==",
"dev": true
"integrity": "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w=="
},
"js-tokens": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
"integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
"dev": true
"integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls="
},
"jsesc": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz",
"integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=",
"dev": true
"integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s="
},
"json5": {
"version": "0.5.1",
"resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz",
"integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=",
"dev": true
"integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE="
},
"lodash": {
"version": "4.17.15",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
"integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==",
"dev": true
"integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A=="
},
"loose-envify": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
"integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
"dev": true,
"requires": {
"js-tokens": "^3.0.0 || ^4.0.0"
}
@ -317,7 +286,6 @@
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
"integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
"dev": true,
"requires": {
"brace-expansion": "^1.1.7"
}
@ -325,14 +293,12 @@
"minimist": {
"version": "1.2.5",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
"integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
"dev": true
"integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw=="
},
"mkdirp": {
"version": "0.5.5",
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
"integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
"dev": true,
"requires": {
"minimist": "^1.2.5"
}
@ -340,44 +306,37 @@
"ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
"dev": true
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
},
"os-homedir": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
"integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
"dev": true
"integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M="
},
"os-tmpdir": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
"integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
"dev": true
"integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ="
},
"path-is-absolute": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
"integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
"dev": true
"integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
},
"private": {
"version": "0.1.8",
"resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz",
"integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==",
"dev": true
"integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg=="
},
"regenerator-runtime": {
"version": "0.11.1",
"resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
"integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
"dev": true
"integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg=="
},
"repeating": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
"integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
"dev": true,
"requires": {
"is-finite": "^1.0.0"
}
@ -385,26 +344,22 @@
"safe-buffer": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
"dev": true
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
},
"slash": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz",
"integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=",
"dev": true
"integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU="
},
"source-map": {
"version": "0.5.7",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
"integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
"dev": true
"integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
},
"source-map-support": {
"version": "0.4.18",
"resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz",
"integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==",
"dev": true,
"requires": {
"source-map": "^0.5.6"
}
@ -413,7 +368,6 @@
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
"integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
"dev": true,
"requires": {
"ansi-regex": "^2.0.0"
}
@ -421,20 +375,17 @@
"supports-color": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
"integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
"dev": true
"integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
},
"to-fast-properties": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz",
"integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=",
"dev": true
"integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc="
},
"trim-right": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz",
"integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=",
"dev": true
"integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM="
}
}
}

View File

@ -12,5 +12,6 @@
"前端组件",
"通用组件"
]
}
},
"dependencies": {}
}

View File

@ -1,5 +1,31 @@
{
"pages": [
//pageshttps://uniapp.dcloud.io/collocation/pages
{
"path": "pages/index/index",
"style": {
"navigationBarTitleText": "首页",
"navigationStyle": "custom",
"enablePullDownRefresh": true,
"onReachBottomDistance": 300,
// #ifdef APP-PLUS
"enablePullDownRefresh": true,
// #endif
"app-plus": {
"scrollIndicator": false //
}
}
},
{
"path": "pages/supply_chains/supply_chains",
"style": {
"navigationBarTitleText": "供应",
"enablePullDownRefresh": true,
"navigationStyle": "custom",
"onReachBottomDistance": 300
}
},
//#ifdef APP-PLUS
//
{
@ -27,21 +53,6 @@
}
},
// #endif
//pageshttps://uniapp.dcloud.io/collocation/pages
{
"path": "pages/index/index",
"style": {
"navigationBarTitleText": "首页",
"navigationStyle": "custom",
"enablePullDownRefresh": true,
// #ifdef APP-PLUS
"enablePullDownRefresh": true,
// #endif
"app-plus": {
"scrollIndicator": false //
}
}
},
{
"path": "pages/gather/gather",
"style": {
@ -64,6 +75,27 @@
"navigationBarTitleText": "购物车"
}
},
{
"path": "pages/room/index",
"style": {
"navigationBarTitleText": "直播列表",
"enablePullDownRefresh": true
}
},
{
"path": "pages/room/spectator",
"style": {
"navigationStyle": "custom",
"navigationBarTitleText": "直播间"
}
}
,{
"path": "pages/room/histroyroom",
"style": {
"navigationBarTitleText": "历史直播间",
"navigationStyle": "custom"
}
},
{
"path": "pages/plant_grass/index",
"style": {
@ -113,15 +145,8 @@
"style": {
"navigationBarTitleText": "支付提示"
}
}, {
"path": "pages/supply_chains/supply_chains",
"style": {
"navigationBarTitleText": "供应",
"enablePullDownRefresh": true,
"navigationStyle": "custom"
}
}, {
},
{
"path": "pages/moreProject/moreProject",
"style": {
"navigationBarTitleText": "商户平台",
@ -151,10 +176,142 @@
"path" : "pages/margin/margin",
"style" :
{
"navigationBarTitleText":"缴纳保证金",
"navigationBarTitleText":"缴纳金",
"enablePullDownRefresh": false
}
},
{
"path" : "pages/select_address/select_address",
"style" :
{
"navigationBarTitleText" : "选择位置",
"enablePullDownRefresh" : false
}
},
{
"path" : "pages/select_address/select_address_n",
"style" :
{
"navigationBarTitleText" : "选择位置",
"enablePullDownRefresh" : false
}
},
{
"path" : "pages/newActivity/activityDetail/activityDetail",
"style" :
{
"navigationBarTitleText": "活动",
"enablePullDownRefresh": true,
"navigationStyle": "custom",
"onReachBottomDistance": 300
}
},
{
"path" : "pages/newActivity/subsidy/subsidy",
"style" :
{
"navigationBarTitleText": "补贴记录",
"enablePullDownRefresh": true,
"navigationStyle": "custom",
"onReachBottomDistance": 300
}
},
{
"path" : "pages/newActivity/invitation/invitation",
"style" :
{
"navigationBarTitleText": "拉新活动",
"enablePullDownRefresh": true,
"navigationStyle": "custom",
"onReachBottomDistance": 300
}
},
{
"path" : "pages/redpacket/redpacket",
"style" :
{
"navigationBarTitleText" : "红包",
"enablePullDownRefresh" : false
}
},
{
"path" : "pages/redpacket/redpack_type",
"style" :
{
"navigationBarTitleText" : "红包余额",
"enablePullDownRefresh": false,
"navigationStyle": "custom",
"onReachBottomDistance": 300
}
},
{
"path" : "pages/newActivity/subsidy/subsidy2",
"style" :
{
"navigationBarTitleText" : "实物通用红包",
"enablePullDownRefresh": false,
"navigationStyle": "custom",
"onReachBottomDistance": 300
}
},
{
"path" : "pages/newActivity/subsidy/subsidy3",
"style" :
{
"navigationBarTitleText" : "现金抵扣红包",
"enablePullDownRefresh": false,
"navigationStyle": "custom",
"onReachBottomDistance": 300
}
},
{
"path" : "pages/newActivity/towPrice/towPrice",
"style" :
{
"navigationBarTitleText" : "两元专区",
"enablePullDownRefresh": false,
"navigationStyle": "custom",
"onReachBottomDistance": 300
}
},
{
"path" : "pages/order_addcart/order_addcart_t",
"style" :
{
"navigationBarTitleText" : "购物车",
"enablePullDownRefresh" : false
}
},
{
"path" : "pages/newActivity/giftBag/giftBag",
"style" :
{
"navigationBarTitleText" : "新人礼包",
"enablePullDownRefresh": false,
"navigationStyle": "custom",
"onReachBottomDistance": 300
}
},
{
"path" : "pages/helpPeople/helpPeople",
"style" :
{
"navigationBarTitleText" : "",
"enablePullDownRefresh": false,
"navigationStyle": "custom",
"onReachBottomDistance": 300
}
},
{
"path" : "pages/helpPeople/formTable",
"style" :
{
"navigationBarTitleText" : "信息收集",
"enablePullDownRefresh": false,
"navigationStyle": "custom",
"onReachBottomDistance": 300
}
}
],
"subPackages": [{
@ -179,6 +336,15 @@
"navigationBarTextStyle": "#fff"
// #endif
}
},{
"path": "index_v",
"style": {
"navigationStyle": "custom"
// #ifdef MP || APP-PLUS
,
"navigationBarTextStyle": "#fff"
// #endif
}
}]
},
{
@ -271,6 +437,17 @@
"navigationStyle": "custom"
}
},
{
"path": "supply_chain/supplierB",
"style": {
"enablePullDownRefresh": true,
"navigationBarTitleText": "",
"navigationBarBackgroundColor": "#e93323",
"navigationStyle": "custom",
"onReachBottomDistance": 300
}
},
{
"path": "supply_chain/suppliers",
@ -326,6 +503,22 @@
"enablePullDownRefresh": true
}
}, {
"path": "cloud_entrepot/indexb",
"style": {
"navigationStyle": "custom",
"navigationBarTitleText": "里海云仓",
"enablePullDownRefresh": true
}
},{
"path": "cloud_entrepot/indexh",
"style": {
"navigationStyle": "custom",
"navigationBarTitleText": "里海云仓",
"enablePullDownRefresh": true
}
}, {
"path": "teach_video/teach_video",
"style": {
@ -342,6 +535,14 @@
"navigationStyle": "custom"
}
},{
"path": "specialty/short_index",
"style": {
"navigationBarTitleText": "集体店铺",
"enablePullDownRefresh": false,
"navigationStyle": "custom"
}
}, {
"path": "specialty/indexa",
"style": {
@ -467,6 +668,14 @@
"navigationBarTitleText": "我的账户"
}
},
{
"path" : "user_money/money",
"style" :
{
"navigationBarTitleText" : "我的余额",
"enablePullDownRefresh" : false
}
},
{
"path": "user_bill/index",
"style": {
@ -995,11 +1204,25 @@
"navigationBarTitleText": "商家入驻"
}
}, {
},
{
"path": "settled/unit",
"style": {
"navigationStyle": "custom",
"navigationBarTitleText": "个人入驻"
}
},
{
"path": "applicationRecord/index",
"style": {
"navigationBarTitleText": "申请记录"
}
}, {
"path": "applicationRecord/unit",
"style": {
"navigationBarTitleText": "申请记录"
}
}, {
"path": "merchantDetails/index",
"style": {
@ -1617,39 +1840,47 @@
"selectedColor": "#E93323",
"borderStyle": "white",
"backgroundColor": "#ffffff",
"iconWidth": "36",
"list": [{
"list": [
// {
// "pagePath": "pages/supply_chains/supply_chains",
// "iconPath": "static/tabbar_icon/d.png",
// "selectedIconPath": "static/tabbar_icon/d-a.png",
// "text": "供销"
// },
{
"pagePath": "pages/index/index",
"iconPath": "static/tabbar_icon/a.png",
"selectedIconPath": "static/tabbar_icon/a-a.png",
"text": "泸州"
"selectedIconPath": "static/tabbar_icon/a-a.png"
// "text": "泸州"
// "text": "供销"
},
{
"pagePath": "pages/gather/gather",
"iconPath": "static/tabbar_icon/b.png",
"selectedIconPath": "static/tabbar_icon/b-a.png",
"text": "生产"
"selectedIconPath": "static/tabbar_icon/b-a.png"
// "text": "生产"
},
{
"pagePath": "pages/plant_release/index",
"iconPath": "static/tabbar_icon/c.png",
"selectedIconPath": "static/tabbar_icon/c-a.png",
"text": "发布"
// {
// "pagePath": "pages/plant_release/index",
// "iconPath": "static/tabbar_icon/c.png",
// "selectedIconPath": "static/tabbar_icon/c-a.png",
// "text": "发布"
},
// },
{
"pagePath": "pages/supply_chains/supply_chains",
"pagePath": "pages/order_addcart/order_addcart_t",
"iconPath": "static/tabbar_icon/d.png",
"selectedIconPath": "static/tabbar_icon/d-a.png",
"text": "供销"
"selectedIconPath": "static/tabbar_icon/d-a.png"
// "text": "购物车"
},
{
"pagePath": "pages/user/index",
"iconPath": "static/tabbar_icon/e.png",
"selectedIconPath": "static/tabbar_icon/e-a.png",
"text": "我的"
"selectedIconPath": "static/tabbar_icon/e-a.png"
// "text": "我的"
}
]

View File

@ -6,10 +6,11 @@
<view class="iconfont icon-xiangzuo"></view>
</view>
<view class='input acea-row row-between-wrapper'><text class='iconfont icon-sousuo'></text>
<input placeholder='搜索店铺名称' placeholder-class='placeholder' confirm-type='search' name="search" :value='sotreParam.keyword'
@confirm="searchSubmit"></input>
<input placeholder='搜索店铺名称' placeholder-class='placeholder' confirm-type='search' name="search"
:value='sotreParam.keyword' @confirm="searchSubmit"></input>
</view>
<view v-if="mer_location == 1" style="text-align: right;" class='iconfont search-right' @click='showMaoLocation(latitude,longitude)'>
<view v-if="mer_location == 1" style="text-align: right;" class='iconfont search-right'
@click='showMaoLocation(latitude,longitude)'>
<view class="iconfont icon-dingwei"></view>
<view class="right-text" v-if="recommend_address">
{{recommend_address}}
@ -19,7 +20,8 @@
</view>
<view class="nav-wrapper">
<view class='nav acea-row row-middle'>
<view v-for="item in downMenus" :key="item.key" class='item' :class="{'font-colors':firstKey == item.key}" @click='set_where(item.key)'>
<view v-for="item in downMenus" :key="item.key" class='item'
:class="{'font-colors':firstKey == item.key}" @click='set_where(item.key)'>
<view>
{{item.title}}
</view>
@ -30,7 +32,7 @@
</view>
<!-- 店铺 -->
<block>
<view class="mer-box"v-if="storeList.length > 0">
<view class="mer-box" v-if="storeList.length > 0">
<view class="mer-item" v-for="(item,index) in storeList" :key='index'>
<view class="mer-hd" @click="goStore(item.mer_id)">
<image :src="item.mini_banner?item.mini_banner:item.mer_banner"></image>
@ -47,7 +49,8 @@
{{item.care_count<10000 ? item.care_count : (item.care_count/10000).toFixed(2)+''}}人关注
</view>
<view class="line" v-if="item.distance"></view>
<view class="distance" v-if="item.distance" @click.stop="showStoreLocation(item)">
<view class="distance" v-if="item.distance"
@click.stop="showStoreLocation(item)">
<view class="">
{{item.distance}}
</view>
@ -58,8 +61,9 @@
</view>
</view>
<view class="pro-box">
<navigator :url="`/pages/goods_details/index?id=${itemn.product_id}`" hover-class="none" class="pro-item" v-for="(itemn,indexn) in item.recommend"
:key='indexn' v-if="item.recommend.length<=3">
<navigator :url="`/pages/goods_details/index?id=${itemn.product_id}`" hover-class="none"
class="pro-item" v-for="(itemn,indexn) in item.recommend" :key='indexn'
v-if="item.recommend.length<=3">
<image :src="itemn.image" mode=""></image>
<view class="price">
<text></text>{{itemn.price}}
@ -103,7 +107,8 @@
} from "vuex";
import {
goShopDetail
} from '@/libs/order.js'
} from '@/libs/order.js';
import { wgsToGcj } from "@/utils/wgs.js";
const app = getApp();
export default {
data() {
@ -215,10 +220,10 @@
this.$wechat.seeLocation({
latitude: Number(lat),
longitude: Number(long)
}).then(res=>{
}).then(res => {
// console.log('success');
})
}else{
} else {
//#endif
uni.openLocation({
latitude: parseFloat(lat),
@ -243,18 +248,18 @@
latitude: Number(item.lat),
longitude: Number(item.long),
name: item.mer_name,
address: item.mer_address ? item.mer_address: '',
}).then(res=>{
address: item.mer_address ? item.mer_address : '',
}).then(res => {
// console.log('success');
})
}else{
} else {
//#endif
uni.openLocation({
latitude: parseFloat(item.lat),
longitude: parseFloat(item.long),
scale: 8,
name: item.mer_name,
address: item.mer_address ? item.mer_address: '',
address: item.mer_address ? item.mer_address : '',
success: function(res) {
// console.log(res)
},
@ -265,9 +270,11 @@
},
selfLocation() {
let self = this
if (uni.getStorageSync('RejectTarget')) return
uni.getLocation({
type: 'gcj02',
success: (res) => {
res = wgsToGcj(res);
let latitude, longitude;
latitude = res.latitude.toString();
longitude = res.longitude.toString();
@ -279,8 +286,9 @@
}).then(res => {
// console.log(res)
this.detaile_address = res.data.address;
this.recommend_address = res.data.address.length > 4 ? res.data.address.slice(0,4) + '...' : res.data.address
uni.setStorageSync('adress_location',res.data.address)
this.recommend_address = res.data.address.length > 4 ? res.data.address
.slice(0, 4) + '...' : res.data.address
uni.setStorageSync('adress_location', res.data.address)
})
},
fail: (res) => {
@ -379,6 +387,7 @@
display: flex;
flex-wrap: nowrap;
background: var(--view-theme);
.search-right {
display: flex;
align-items: center;
@ -387,6 +396,7 @@
flex: 1;
padding-left: 20rpx;
}
.right-text {
overflow: hidden;
text-overflow: ellipsis;
@ -397,12 +407,14 @@
color: #fff;
padding: 0 10rpx;
}
.icon-xiangyou,
.icon-dingwei {
font-size: 30rpx;
color: #fff;
}
}
.productList .search .back {
display: flex;
align-items: center;
@ -414,6 +426,7 @@
font-size: 36rpx;
}
}
.productList .search .input {
flex: 1;
// width: 540rpx;
@ -423,19 +436,23 @@
padding: 0 20rpx;
box-sizing: border-box;
}
.productList .search .input input {
flex: 1;
height: 100%;
font-size: 26rpx;
margin-left: 10rpx;
}
.productList .search .input .placeholder {
color: #999;
}
.productList .search .input .iconfont {
font-size: 35rpx;
color: #555;
}
.productList .search .icon-pailie,
.productList .search .icon-tupianpailie {
color: #fff;
@ -444,6 +461,7 @@
height: 86rpx;
line-height: 86rpx;
}
.productList .nav-wrapper {
z-index: 9;
position: fixed;
@ -452,9 +470,11 @@
width: 100%;
margin-top: 86rpx;
background-color: $theme-color;
.tab-bar {
display: flex;
align-items: center;
.tab-item {
position: relative;
flex: 1;
@ -465,6 +485,7 @@
color: #fff;
font-size: 28rpx;
font-weight: bold;
&::after {
content: ' ';
position: absolute;
@ -475,6 +496,7 @@
background: transparent;
transform: translateX(-50%);
}
&.on {
&::after {
background: #fff;
@ -483,6 +505,7 @@
}
}
}
.productList .nav {
height: 86rpx;
color: #454545;
@ -492,6 +515,7 @@
justify-content: space-between;
padding: 0 28rpx;
}
.productList .nav .item {
display: flex;
align-items: center;
@ -500,10 +524,12 @@
color: #FFFFFF;
flex: 1;
}
.productList .nav .item.font-colors {
font-weight: 500;
color: #FFFFFF;
}
.productList .nav .item .font-line {
height: 4rpx;
background-color: #fff;
@ -517,26 +543,32 @@
-o-animation: line 0.3s;
/* Opera */
}
@keyframes line {
from {
width: 0rpx;
}
to {
width: 28rpx;
}
}
.productList .nav .item image {
width: 15rpx;
height: 19rpx;
margin-left: 10rpx;
}
.mer-box {
padding: 20rpx 20rpx;
margin-top: 168rpx;
.mer-item {
margin-bottom: 20rpx;
background-color: #fff;
border-radius: 16rpx;
.mer-hd {
position: relative;
width: 100%;
@ -544,10 +576,12 @@
border-radius: 16rpx 16rpx 0 0;
overflow: hidden;
display: flex;
image {
width: 100%;
height: 100%;
}
.mer-name {
position: absolute;
left: 20rpx;
@ -555,6 +589,7 @@
display: flex;
align-items: center;
padding: 0 10rpx;
image {
width: 79rpx;
height: 79rpx;
@ -562,6 +597,7 @@
border-radius: 50%;
margin-right: 10rpx;
}
.mer-top {
display: flex;
align-items: center;
@ -569,6 +605,7 @@
font-size: 28rpx;
font-weight: bold;
margin-bottom: 6rpx;
.font-bg-red {
margin-left: 20rpx;
font-size: 18rpx;
@ -579,60 +616,72 @@
width: auto;
}
}
.mer-btn {
color: rgba($color: #fff, $alpha: 0.7);
font-size: 24rpx;
display: flex;
align-items: center;
.line {
width: 2rpx;
height: 18rpx;
color: rgba($color: #fff, $alpha: 0.7);
margin: 0 12rpx;
}
.distance {
display: flex;
align-items: center;
font-size: 24rpx;
color: rgba($color: #fff, $alpha: 0.7);
.iconfont {
font-size: 24rpx;
line-height: 24rpx;
}
}
}
.txt {
flex: 1;
}
}
}
.pro-box {
display: flex;
align-items: center;
padding: 20rpx 20rpx 30rpx;
.pro-item {
width: 218rpx;
margin-right: 14rpx;
image {
width: 100%;
height: 214rpx;
border-radius: 8rpx;
}
.price {
margin-top: 5rpx;
font-size: 28rpx;
color: var(--view-priceColor);
font-weight: bold;
text {
font-size: 28rpx;
}
}
&:last-child {
margin-right: 0;
}
}
}
}
.more-shop {
display: flex;
align-items: center;
@ -653,6 +702,7 @@
background-color: #fff;
padding-bottom: calc(100% - 40rpx);
padding-top: 200rpx;
.pictrue {
display: flex;
flex-direction: column;

View File

@ -91,6 +91,7 @@
import authorize from '@/components/Authorize';
import emptyPage from '@/components/emptyPage.vue'
import { configMap } from '@/utils';
import { navigateBack } from '../../../libs/uniApi';
const app = getApp();
export default {
components: {
@ -198,6 +199,14 @@
that.$util.Tips({
title: res.message
});
if(res.status==200){
// uni.redirectTo({
// url:'/admin/orderList/index?types=4&merId='+that.mer_id
// })
uni.navigateBack({
delta:2
})
}
that.getOrderData();
})
.catch(res => {

View File

@ -54,7 +54,7 @@
</view>
<view class="bottom" @click="navTo('/subpkg/orderDetail/orderDetail')">
<view class="item">
<view>履约保证金额()</view>
<view>履约金额()</view>
<view class="num" v-show="eyeType">{{
userInfo.deposit || 0.0
}}</view>

View File

@ -264,14 +264,22 @@
</view>
<view class='product-intro' id="past3">
<view class='title'>产品介绍</view>
<jyf-parser v-if="description.type == 0" :domain='domain' :html="description.content.replace(/<br\/>/ig, '')"
ref="article" :tag-style="tagStyle"></jyf-parser>
<!-- #ifndef APP-PLUS -->
<jyf-parser v-if="description.type == 0 && typeof description.content == 'string'" :domain='domain'
:html="description.content.replace(/<br\/>/ig, '')" ref="article"
:tag-style="tagStyle"></jyf-parser>
<!-- #endif -->
<!-- #ifdef APP-PLUS -->
<view v-if="description.type == 0 && typeof description.content == 'string'" class="description"
v-html="description.content.replace(/<br\/>/ig, '')"></view>
<!-- #endif -->
<view v-else class="product_content">
<view v-if="description.content && description.content.title" class="title">{{description.content.title}}
</view>
<view v-if="description.content && description.content.image" class="pictures">
<image v-for="(item,index) in description.content.image" :key="index" :src="item"></image>
<view v-if="description.content && description.content.title" class="product_content_title">{{description.content.title}}
</view>
<block v-if="description.content && description.content.image">
<image v-for="(item,index) in description.content.image" :key="index" :src="item" mode="widthFix" style="background-color: #fff;width: 100vw;">
</image>
</block>
</view>
</view>
<view style='height:120rpx;'></view>
@ -558,6 +566,23 @@
}
that.$set(that, 'storeInfo', storeInfo);
that.$set(that, 'description', storeInfo.content);
if(typeof that.description.content == 'string'){
try{
that.description.content = JSON.parse(that.description.content);
}catch(e){
console.log(e);
}
}
if (that.description.type == 0 && typeof that.description.content == 'string') {
that.description.content = that.description.content.replace(
/<img/gi,
'<img style="max-width:100%;height:auto;float:left;display:block" '
);
that.description.content = that.description.content.replace(
/<video/gi,
'<video style="width:100%;height:300px;display:block" '
);
}
that.$set(that, 'reply', res.data.topReply ? [res.data.topReply] : []);
that.$set(that.attr, 'productAttr', res.data.attr);
that.$set(that, 'productValue', res.data.sku);
@ -608,6 +633,23 @@
}
that.$set(that, 'storeInfo', storeInfo);
that.$set(that, 'description', storeInfo.content);
if(typeof that.description.content == 'string'){
try{
that.description.content = JSON.parse(that.description.content);
}catch(e){
console.log(e);
}
}
if (that.description.type == 0 && typeof that.description.content == 'string') {
that.description.content = that.description.content.replace(
/<img/gi,
'<img style="max-width:100%;height:auto;float:left;display:block" '
);
that.description.content = that.description.content.replace(
/<video/gi,
'<video style="width:100%;height:300px;display:block" '
);
}
that.$set(that.description, 'type', storeInfo.content.type || 0);
that.$set(that, 'reply', res.data.topReply ? [res.data.topReply] : []);
that.$set(that.attr, 'productAttr', res.data.attr);
@ -1592,4 +1634,19 @@
}
}
}
.product_content{
background-color: #fff;
&_title{
width: 100%;
height: auto;
line-height: 50rpx;
padding: 28rpx;
word-wrap: break-word;
text-align: center;
}
image{
width: 750rpx;
// height: 750rpx;
}
}
</style>

View File

@ -293,6 +293,9 @@
this.merId = option.merId;
this.getIndex();
},
onShow(){
this.getIndex();
},
methods: {
//
popUpClose() {

View File

@ -134,11 +134,15 @@
})
}
}
let params = {
status: that.status,
fail_message: that.fail_message
}
if(that.orderInfo.refund_type == 2){
if(that.orderInfo.refund_type == 2 && that.status != -1){
if (!that.refundInfo.mer_delivery_user) {
return that.$util.Tips({
title: '请填写收货人姓名'

View File

@ -122,6 +122,7 @@
},
//
scanCode() {
var self = this;
// #ifdef MP || APP-PLUS
wx.scanCode({
@ -129,15 +130,14 @@
success(res) {
self.verify_code = res.result
// console.log(self.verify_code);
console.log('111',self.mer_id,self.verify_code)
verifierOrder(self.mer_id,self.verify_code)
.then(res => {
// uni.navigateTo({
// url: '/pages/admin/cancellate_result/index?code='+self.verify_code+'&mer_id='+self.mer_id
// });
uni.navigateTo({
url: '/pages/admin/orderList/index?types=2'+'&mer_id='+self.mer_id
url: '/pages/admin/cancellate_result/index?code='+self.verify_code+'&mer_id='+self.mer_id
});
})
.catch(res => {
self.verify_code = ''
@ -165,12 +165,11 @@
scanType: ["qrCode", "barCode"]
}).then(res=>{
this.verify_code = res.resultStr
// uni.navigateTo({
// url: '/pages/admin/cancellate_result/index?code='+self.verify_code+'&mer_id='+self.mer_id
// });
uni.navigateTo({
url: '/pages/admin/orderList/index?types=2'+'&mer_id='+self.mer_id
url: '/pages/admin/cancellate_result/index?code='+self.verify_code+'&mer_id='+self.mer_id
});
// this.codeChange();
}).catch(res => {
this.$util.Tips({

View File

@ -24,7 +24,8 @@
<view>积分</view>
</view>
<view class="item">
<view class="num">{{ info.level_info.discount ? parseFloat(info.level_info.discount)/10 : '0'}}</view>
<view class="num">{{ info.level_info.discount ? parseFloat(info.level_info.discount)/10 : '0'}}
</view>
<view>折扣</view>
</view>
</view>
@ -45,13 +46,15 @@
附近门店
</view>
<view class="acea-row" @click="goMap">
<view class="storeName line1">{{storeList[0].name}}</view> {{storeList[0].range}}km<text class="iconfont icon-gengduo3"></text></view>
<view class="storeName line1">{{storeList[0].name}}</view> {{storeList[0].range}}km<text
class="iconfont icon-gengduo3"></text></view>
</view>
<home v-if="navigation"></home>
</view>
</template>
<script>
import home from '@/components/home/index.vue'
import { wgsToGcj } from "@/utils/wgs.js";
import {
getlevelInfo,
@ -66,13 +69,13 @@
},
data() {
return {
info:{},
info: {},
codeList: [{
name: '付款码'
}, {
name: '核销码'
}],
codeIndex:0,
codeIndex: 0,
config: {
qrc: {
code: '',
@ -111,7 +114,7 @@
}
},
methods: {
goMap(){
goMap() {
uni.navigateTo({
url: '/pages/store/map/index'
})
@ -129,9 +132,11 @@
})
} else {
// #endif
if (uni.getStorageSync('RejectTarget')) return
uni.getLocation({
type: 'wgs84',
success: (res) => {
res = wgsToGcj(res);
try {
this.user_latitude = res.latitude;
this.user_longitude = res.longitude;
@ -174,10 +179,10 @@
return this.$util.Tips(err);
})
},
levelInfo(){
getlevelInfo().then(res=>{
levelInfo() {
getlevelInfo().then(res => {
this.info = res.data;
}).catch(err=>{
}).catch(err => {
return this.$util.Tips({
title: err
});
@ -192,65 +197,71 @@
this.config.qrc.code = code;
}
},
hello(res) {
hello(res) {},
},
},
onReachBottom() {
}
onReachBottom() {}
}
</script>
<style lang="scss">
page{
page {
background: linear-gradient(121deg, #F5EBE1 0%, #FFDFBE 100%);
}
.vipGrade{
.headerBg{
.vipGrade {
.headerBg {
background: url('../static/big-bg.png') no-repeat;
background-size: 100% 100%;
width: 100%;
height: 476rpx;
padding-top: 1rpx;
.header{
.header {
background: url('../static/grade-bg.png') no-repeat;
background-size: 100% 100%;
width: 690rpx;
height: 286rpx;
margin: 26rpx auto;
padding: 28rpx 28rpx 0 28rpx;
.top{
.pictrue{
.top {
.pictrue {
width: 92rpx;
height: 92rpx;
border: 1px solid #FFFFFF;
margin-right: 20rpx;
border-radius: 50%;
image{
image {
border-radius: 50%;
width:100%;
width: 100%;
height: 100%;
}
}
.text{
.text {
width: 400rpx;
.name{
.nameCon{
.name {
.nameCon {
color: #EDCAAC;
font-size: 28rpx;
max-width: 332rpx;
margin-right: 10rpx;
}
.num{
.num {
border-radius: 4px;
border: 1px solid #EDCAAC;
background: rgba(215,177,144,0.2);
background: rgba(215, 177, 144, 0.2);
font-size: 20rpx;
font-weight: 400;
color: #EDCAAC;
padding: 0 4rpx;
}
}
.idNum{
.idNum {
font-weight: 400;
color: #EDCAAC;
font-size: 24rpx;
@ -259,27 +270,32 @@
}
}
}
.list{
.list {
margin-top: 46rpx;
.item{
.item {
color: #EDCAAC;
font-size: 22rpx;
text-align: center;
.num{
.num {
font-size: 40rpx;
margin-bottom: 15rpx;
}
}
}
}
.qrCode{
.qrCode {
width: 690rpx;
height: 700rpx;
background: #FFFFFF;
border-radius: 18rpx;
margin: -134rpx auto 0 auto;
padding-top: 60rpx;
.header{
.header {
width: 330rpx;
height: 60rpx;
border-radius: 30rpx;
@ -287,6 +303,7 @@
color: #333333;
font-size: 30rpx;
margin: 0 auto;
.title {
width: 146rpx;
height: 100%;
@ -308,7 +325,8 @@
}
}
}
.store{
.store {
width: 690rpx;
height: 100rpx;
background: linear-gradient(90deg, #FFAE49 0%, #FCC887 100%);
@ -318,17 +336,20 @@
color: #fff;
font-weight: 500;
font-size: 28rpx;
.iconfont{
.iconfont {
margin-right: 20rpx;
font-size: 38rpx;
}
.icon-gengduo3{
.icon-gengduo3 {
font-size: 24rpx;
margin-left: 5rpx;
margin-right: 0;
margin-top: 6rpx;
}
.storeName{
.storeName {
display: inline-block;
max-width: 284rpx;
vertical-align: middle;

View File

@ -53,7 +53,8 @@
</div>
<div class="broadcast_details_picBox noPad">
<div class="broadcast_details_tit">
{{val.product.cart_info.product.store_name}}</div>
{{val.product.cart_info.product.store_name}}
</div>
<div class="broadcast_details_pic">
{{ item.refundOrder.refund_price }}
</div>
@ -89,7 +90,8 @@
</div>
<div class="broadcast_details_picBox noPad">
<div class="broadcast_details_tit">
{{val.cart_info.product.store_name}}</div>
{{val.cart_info.product.store_name}}
</div>
<div class="broadcast_details_pic">
{{ item.orderInfo.pay_price }}
</div>
@ -114,7 +116,8 @@
{{ item.product.price }}
</div>
<div class="broadcast_details_tit_no line1">
{{item.product.store_name}}</div>
{{item.product.store_name}}
</div>
</div>
</navigator>
</div>
@ -135,7 +138,8 @@
{{ item.presell.price }}
</div>
<div class="broadcast_details_tit_no line1">
{{item.presell.store_name}}</div>
{{item.presell.store_name}}
</div>
</div>
</navigator>
</div>
@ -143,7 +147,7 @@
<!--拼团商品链接-->
<div class="conter acea-row row-middle"
v-if="item.msn_type === 8 && item.productGroup && item.productGroup.product">
<div class=" noPad">
<div class="noPad">
<navigator class="acea-row row-column-around noPad"
v-if="item.productGroup.product_group_id"
:url="`/pages/activity/combination_details/index?id=${item.productGroup.product_group_id}`"
@ -156,7 +160,8 @@
{{ item.productGroup.product.price }}
</div>
<div class="broadcast_details_tit_no line1">
{{item.productGroup.product.store_name}}</div>
{{item.productGroup.product.store_name}}
</div>
</div>
</navigator>
</div>
@ -207,7 +212,8 @@
</div>
<div class="broadcast_details_picBox noPad">
<div class="broadcast_details_tit">
{{val.product.cart_info.product.store_name}}</div>
{{val.product.cart_info.product.store_name}}
</div>
<div class="broadcast_details_pic">
{{ item.refundOrder.refund_price }}
</div>
@ -216,6 +222,7 @@
</div>
</div>
</navigator>
<!--订单链接-->
<div v-if="item.msn_type === 5 && item.orderInfo.order_id">
<div class="broadcast-details_num acea-row row-middle">
@ -243,7 +250,8 @@
</div>
<div class="broadcast_details_picBox noPad">
<div class="broadcast_details_tit">
{{val.cart_info.product.store_name}}</div>
{{val.cart_info.product.store_name}}
</div>
<div class="broadcast_details_pic">
{{ item.orderInfo.pay_price }}
</div>
@ -267,7 +275,8 @@
{{ item.product.price }}
</div>
<div class="broadcast_details_tit_no line1">
{{item.product.store_name}}</div>
{{item.product.store_name}}
</div>
</div>
</navigator>
</div>
@ -288,7 +297,8 @@
{{ item.presell.price }}
</div>
<div class="broadcast_details_tit_no line1">
{{item.presell.store_name}}</div>
{{item.presell.store_name}}
</div>
</div>
</navigator>
</div>
@ -309,7 +319,8 @@
{{ item.productGroup.product.price }}
</div>
<div class="broadcast_details_tit_no line1">
{{item.productGroup.product.store_name}}</div>
{{item.productGroup.product.store_name}}
</div>
</div>
</navigator>
</div>
@ -358,6 +369,7 @@
<block v-for="(items,index) in history" v-if="userId == 0" :key="items.time">
<div class="create_time">{{items.time}}</div>
<block v-for="(item,j) in items.children" :key="item.service_log_id">
<!-- 左边 -->
<div class="item acea-row row-top" v-if="item.send_type == 1">
<div v-if="item.msn_type !== 100" class="pictrue">
@ -388,7 +400,8 @@
</div>
<div class="broadcast_details_picBox noPad">
<div class="broadcast_details_tit">
{{val.product.cart_info.product.store_name}}</div>
{{val.product.cart_info.product.store_name}}
</div>
<div class="broadcast_details_pic">
{{ val.product.cart_info.productAttr.price }}
</div>
@ -425,7 +438,8 @@
</div>
<div class="broadcast_details_picBox noPad">
<div class="broadcast_details_tit">
{{val.cart_info.product.store_name}}</div>
{{val.cart_info.product.store_name}}
</div>
<div class="broadcast_details_pic">
{{ item.orderInfo.pay_price }}
</div>
@ -450,7 +464,8 @@
{{ item.product.price }}
</div>
<div class="broadcast_details_tit_no line1">
{{item.product.store_name}}</div>
{{item.product.store_name}}
</div>
</div>
</navigator>
</div>
@ -471,7 +486,8 @@
{{ item.presell.price }}
</div>
<div class="broadcast_details_tit_no line1">
{{item.presell.store_name}}</div>
{{item.presell.store_name}}
</div>
</div>
</navigator>
</div>
@ -492,7 +508,8 @@
{{ item.productGroup.product.price }}
</div>
<div class="broadcast_details_tit_no line1">
{{item.productGroup.product.store_name}}</div>
{{item.productGroup.product.store_name}}
</div>
</div>
</navigator>
</div>
@ -534,7 +551,8 @@
</div>
<div class="broadcast_details_picBox noPad">
<div class="broadcast_details_tit">
{{val.product.cart_info.product.store_name}}</div>
{{val.product.cart_info.product.store_name}}
</div>
<div class="broadcast_details_pic">
{{item.refundOrder.refund_num}}件商品
合计 {{ item.refundOrder.refund_price }}
@ -571,7 +589,8 @@
</div>
<div class="broadcast_details_picBox noPad">
<div class="broadcast_details_tit">
{{val.cart_info.product.store_name}}</div>
{{val.cart_info.product.store_name}}
</div>
<div class="broadcast_details_pic">
{{ item.orderInfo.pay_price }}
</div>
@ -596,7 +615,8 @@
{{ item.product.price }}
</div>
<div class="broadcast_details_tit_no line1">
{{item.product.store_name}}</div>
{{item.product.store_name}}
</div>
</div>
</navigator>
</div>
@ -617,7 +637,8 @@
{{ item.presell.price }}
</div>
<div class="broadcast_details_tit_no line1">
{{item.presell.store_name}}</div>
{{item.presell.store_name}}
</div>
</div>
</navigator>
</div>
@ -638,7 +659,8 @@
{{ item.productGroup.product.price }}
</div>
<div class="broadcast_details_tit_no line1">
{{item.productGroup.product.store_name}}</div>
{{item.productGroup.product.store_name}}
</div>
</div>
</navigator>
</div>
@ -758,6 +780,7 @@
</div>
</div>
<div :style=" active === true ? 'height:' + footerConH + 'rem;' : 'height:' + footerH + 'rem;'"></div>
<div :style=" active === true ? 'height: 0;' : 'height: 2rem;'"></div>
</scroll-view>
</view>
<view style="height: 100rpx;"></view>
@ -771,14 +794,14 @@
{{ speak }}
</div>
<view class="input_count">
<input type="text" placeholder-class='placeholder' placeholder="输入内容" class="input" ref="input"
<input type="text" placeholder-class='placeholder' :disabled="active" placeholder="输入内容" class="input" ref="input"
v-show="!voice" @input="bindInput" @keyup="keyup" @focus="focus" cursor-spacing="20"
v-model="textCon">
v-model="textCon" @click="handleClick">
<div class="send iconfont icon-fasong" :style="'color:'+iconColor" @click="sendTest"></div>
</view>
</div>
</form>
<div class="banner slider-banner">
<div class="banner slider-banner" >
<swiper class="swiper-wrapper" :autoplay="autoplay" :circular="circular" :interval="interval"
:duration="duration" v-if="emojiGroup.length > 0">
<block v-for="(emojiList, index) in emojiGroup" :key="index">
@ -788,6 +811,7 @@
</swiper-item>
</block>
</swiper>
</div>
</div>
@ -1212,8 +1236,7 @@
let self = this
self.$util.uploadImageOne('upload/image', function(res) {
if (res.status == 200) {
self.sendMsg(res.data.path, 3
)
self.sendMsg(res.data.path, 3)
}
});
},
@ -1379,9 +1402,14 @@
});
});
},
focus: function() {
focus: async function() {
this.active = false;
},
handleClick(){
if(this.active){
this.active = false;
}
},
keyup: function() {
if (this.$refs.input.value.length > 0) {
this.sendColor = true;
@ -1537,7 +1565,7 @@
self.scrollTop = parseInt(scrollTop) + 100
}
}).exec()
}, 1000)
}, 200)
},
//
bindScroll() {
@ -1603,7 +1631,8 @@
margin-top: 20rpx;
width: 710rpx;
position: fixed;
bottom: 120rpx;
bottom: 180rpx;
bottom: calc(160rpx + env(safe-area-inset-bottom)); /* 适应底部安全距离 */
left: 20rpx;
.broadcast-details_box,
@ -1790,6 +1819,7 @@
.broadcast-details .chat .item .text {
margin-left: 20rpx;
}
.broadcast-details .chat .item .text.textR {
@ -1943,19 +1973,22 @@
transition: all 0.005s cubic-bezier(0.25, 0.5, 0.5, 0.9);
background-color: #fff;
position: fixed;
bottom: 0;
// bottom:var(--status-bar-height);
bottom: 20rpx;
bottom: calc(20rpx + env(safe-area-inset-bottom) );
left: 0;
margin-bottom: var(--status-bar-height);;
}
.broadcast-details .footerCon.on {
position: relative;
top: -300rpx;
top: -360rpx;
transform: translate3d(0, 0, 0) !important;
}
.broadcast-details .footerCon .banner {
background: #fff;
padding-top: var(--status-bar-height);
}
.broadcast-details .footerCon .banner .swiper-slide {
@ -1971,7 +2004,7 @@
display: block;
width: 50rpx;
height: 50rpx;
margin: 40rpx 0 0 50rpx;
margin: 20rpx 0 0 40rpx;
}
.broadcast-details .footerCon .banner .swiper-container-horizontal>.swiper-pagination-bullets {
@ -1980,6 +2013,10 @@
.broadcast-details .footerCon .slider-banner .swiper-pagination-bullet-active {
background-color: #999;
}
.broadcast-details .recording {
@ -2036,6 +2073,8 @@
padding: 0 80rpx 0 30rpx;
height: 76rpx;
position: relative;
}
.broadcast-details .footer .placeholder {
@ -2064,7 +2103,9 @@
display: inline-block;
width: 50rpx;
height: 50rpx;
margin: 40rpx 0 0 50rpx;
margin: 20rpx 0 0 40rpx;
}
.emoji-outer {

View File

@ -97,10 +97,12 @@
hotSearchBox: false,
isAuto: false, //
isShowAuth: false, //
back: false
};
},
onLoad(options) {
this.searchValue = options.searchVal || ''
this.searchValue = options.searchVal || '';
if(options.back)this.back = true;
},
onShow: function() {
try {
@ -167,6 +169,7 @@
this.$set(this, 'searchValue', event.detail.value);
},
searchBut: function() {
if(this.back) return this.navigatorBack();
if(/^(\/@[1-9]{1}).*\*\//.test(this.searchValue)){
uni.showLoading({
title: '加载中',
@ -209,7 +212,6 @@
this.searchValue = ""
});
}else{
let status = false
this.tempStorage.forEach((el, index) => {
if (el == this.searchValue) {
@ -226,9 +228,16 @@
uni.navigateTo({
url: '/pages/columnGoods/goods_search_con/index?searchValue=' + this.searchValue
})
}
},
navigatorBack(){
if(this.searchValue!==undefined&&this.searchValue!==null){
uni.navigateBack({
success:()=> {
uni.$emit('searchValue', this.searchValue);
}
});
}
}
}
}

View File

@ -5,9 +5,10 @@
<view class="back" @click='set_where(1)'>
<view class="iconfont icon-xiangzuo"></view>
</view>
<view class='input acea-row row-between-wrapper'><text class='iconfont icon-sousuo'></text>
<view class='input acea-row row-between-wrapper'>
<text class='iconfont icon-sousuo'></text>
<input placeholder='搜索商品名称' placeholder-class='placeholder' confirm-type='search' name="search"
:value='where.keyword' @confirm="searchSubmit" @input="inputChange"></input>
:value='where.keyword' @confirm="searchSubmit" @input="inputChange">
</view>
<view style="text-align: right;" v-if="tabIndex==1" class='iconfont'
:class='is_switch==true?"icon-pailie":"icon-tupianpailie"' @click='Changswitch'></view>
@ -20,7 +21,7 @@
<view class="tab-item" :class="{on:tabIndex==2}" @click="tabIndex = 2">店铺</view>
</view>
<block v-if="tabIndex==1">
<view class='nav acea-row row-middle' >
<view class='nav acea-row row-middle'>
<view class='item' @click="downStatus = !downStatus"
:class="{'t-color':downKey>0 && firstKey == 0}">
{{downMenu[downKey].title}}
@ -97,7 +98,7 @@
<text class="tags_item delivery" v-if="item.delivery_free == 1">包邮</text>
<!-- <view class="ticket-big" v-if="!is_switch && item.issetCoupon">领券满{{item.issetCoupon.use_min_price}}{{item.issetCoupon.coupon_price}}</view> -->
</view>
<view class="score">{{item.rate}}评分 {{item.reply_count}}条评论</view>
<view class="score">{{item.rate}}评分 {{item.reply_count}}条评论 <text v-if="item.merchant">{{item.merchant.street_name}}</text></view>
<view class="company" v-if="item.merchant && hide_mer_status==0">
<text class='name line1'>{{item.merchant.mer_name}}</text>
@ -156,27 +157,31 @@
<view class="avater">
<image :src="item.mer_avatar" mode=""></image>
</view>
<view class=" text">
<view class="text_one">
<view class="">
<view class="text">
<view class="text_one text_flex">
<view class="text_flex">
<image src="@/static/images/phone.png" mode=""></image>
{{item.service_phone}}
</view>
<view class="text_one_r">
<view class="text_one_r text_flex">
<image src="@/static/images/clock.png" mode=""></image>
{{item.mer_take_time[0]}}-{{item.mer_take_time[1]}}
</view>
</view>
<view class="text_two">
<view class="text_two text_flex">
<image src="@/static/images/shangpu.png" mode=""></image>
<view class="text_tip">
{{item.mer_info}}
</view>
<view class="text_three">
</view>
<view class="text_three text_flex">
<image src="@/static/images/dingwei.png" mode=""></image>
<view class="text_tip">
{{item.mer_address}}
</view>
</view>
</view>
</view>
</view>
@ -234,6 +239,7 @@
storeMerchantList,
getGeocoder
} from '@/api/store.js';
import { wgsToGcj } from "@/utils/wgs.js";
import {
initiateAssistApi
} from '@/api/activity.js';
@ -469,9 +475,11 @@
//
selfLocation() {
let self = this
if (uni.getStorageSync('RejectTarget')) return
uni.getLocation({
type: 'gcj02',
type: 'wgs84',
success: (res) => {
res = wgsToGcj(res);
// console.log(res)
let latitude, longitude;
latitude = res.latitude.toString();
@ -779,7 +787,7 @@
uni.showToast({
title: '推荐商品,加载完毕',
duration: 2000, //
icon:'none'
icon: 'none'
})
}
});
@ -962,7 +970,7 @@
width: 62rpx;
font-size: 40rpx;
height: 86rpx;
line-height: 86rpx ;
line-height: 86rpx;
}
.productList .nav-wrapper {
@ -1202,6 +1210,12 @@
}
}
.text_flex{
display: flex;
align-items: center;
}
.productList .list .item .text .money {
display: flex;
align-items: center;
@ -1519,11 +1533,12 @@
margin-left: 20px;
.avater {
width: 60px;
width: 80px;
height: 80px;
flex-shrink: 0;
image {
width: 60px;
width: 80px;
height: 80px;
}
}
@ -1539,10 +1554,13 @@
width: 20px;
height: 20px;
margin-right: 10px;
flex-shrink: 0;
}
.text_one_r {
flex: 1;
margin-left: 10px;
}
}
@ -1551,14 +1569,17 @@
height: 30px;
line-height: 30px;
padding-left: 10px;
.text_tip{
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
image {
width: 20px;
height: 20px;
margin-right: 10px;
flex-shrink: 0;
}
}
@ -1567,9 +1588,11 @@
height: 30px;
line-height: 30px;
padding-left: 10px;
.text_tip{
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
image {
width: 20px;

View File

@ -14,9 +14,11 @@
</view>
<view class="" v-if="!isFshow">
<view class="site-box1 flex_a_c_j_sb">
<view class="place_wrapper flex_a_c" @click="selectLocation">
<view class="place_wrapper flex_a_c" @click="changeMap">
<view class="iconfont icon-weizhi"></view>
<view class="town_name">{{ street }}</view>
<view class="town_name">{{street||'定位中' }}</view>
<!-- <view class="town_name rotate-box" @click.stop="getPositionFn()"><uni-icons type="loop"
color="#fff"></uni-icons></view> -->
</view>
<navigator url="/pages/chat/customer_list/index?type=0" hover-class="none">
<view class="iconfont icon-xiaoxi" style="color: #fff"> </view>
@ -37,9 +39,9 @@
<block v-if="nowMenuList.length > 0">
<u-transition v-for="(item, index) in nowMenuList" :key="item.name" show>
<view class="examine" @click="
editFlag ? removeMenu(item) : clickMenu(item.type, item.data)
editFlag ? removeMenu(item) : clickMenu(item)
">
<image class="icon_img" :src="item.icon" mode="aspectFit">
<image class="icon_img" :src="item.pic" mode="aspectFit">
</image>
<u-icon v-if="editFlag" class="icon" name="minus-circle-fill" color="red"></u-icon>
<text class="text">{{ item.name }}</text>
@ -58,14 +60,18 @@
<view class="content">
<u-transition v-for="(item, index) in AllMenuList" :key="item.name" show>
<view class="examine" @click="pushMenu(item)">
<image class="icon_img" :src="item.icon" mode="aspectFit"> </image>
<image class="icon_img" :src="item.pic" mode="aspectFit"> </image>
<u-icon class="icon" name="plus-circle-fill"></u-icon>
<text class="text">{{ item.name }}</text>
</view>
</u-transition>
</view>
</view>
<view class="location" v-if="isshow">
<view class="locationa"> 位置权限使用说明 </view>
<view class="locationb"> 用于向你推荐最近门店 </view>
<view class="locationx" @click.stop="isshow=false">x</view>
</view>
<u-picker :defaultIndex="[0, 0]" :show="showPicker" ref="uPicker" :columns="columnData" @confirm="confirm"
@cancel="showPicker = false" @change="changeHandler" keyName="name"></u-picker>
<!-- <m-tabbar native>
@ -75,13 +81,14 @@
</view>
</template>
</m-tabbar> -->
<Loading></Loading>
</view>
</template>
<script>
import Cache from '@/utils/cache';
import { wgsToGcj } from "@/utils/wgs.js";
import mTabbar from '@/components/m-tabbar/m-tabbar.vue'
import zbpSwiper from '@/components/zbpSwiper'
import {
getArea,
@ -110,6 +117,12 @@
import {
getDiy
} from '@/api/api.js';
import {
applet
} from '@/api/public.js';
import {
ENV
} from "@/config/app.js"
// #ifdef APP-PLUS
import uniMP from '@/utils/uniMP.js';
// #endif
@ -118,11 +131,11 @@
components: {
mTabbar,
zbpSwiper
},
data() {
return {
locationArr: ({}),
isshow: false,
emptyText: '暂无可用应用',
jurisdiction: false, //
mer_id: '',
@ -138,79 +151,11 @@
//
editFlag: false,
//
AllMenuList: [{
name: '商户平台',
icon: '/static/applet/shop_app.png',
// data: "__UNI__1EE148C",
data: '/pages/moreProject/moreProject',
type: 2,
},
{
name: '供销平台',
icon: '/static/applet/gx_app.png',
data: '__UNI__B5B1EDD',
type: 1,
},
{
name: '农业咨询',
icon: '/static/applet/ny.png',
data: {
id: '__UNI__9620511',
url: 'https://ceshi-worker-task.lihaink.cn/api/common/getMiniProgramInfo?name=nongye',
},
type: 3,
},
{
name: '教育咨询',
icon: '/static/applet/jy.png',
data: {
id: '__UNI__7AA205C',
url: 'https://ceshi-worker-task.lihaink.cn/api/common/getMiniProgramInfo?name=jiaoyu',
},
type: 3,
},
{
name: '法律咨询',
icon: '/static/applet/fl.png',
data: {
id: '__UNI__358D505',
url: 'https://ceshi-worker-task.lihaink.cn/api/common/getMiniProgramInfo?name=falv',
},
type: 3,
},
{
name: '情感咨询',
icon: '/static/applet/qg.png',
data: {
id: '__UNI__8080F14',
url: 'https://ceshi-worker-task.lihaink.cn/api/common/getMiniProgramInfo?name=qinggan',
},
type: 3,
},
{
name: '种植分析',
icon: '/static/applet/zz.png',
data: {
id: '__UNI__9EDFE40',
url: 'https://ceshi-worker-task.lihaink.cn/api/common/getMiniProgramInfo?name=zhongzhi',
},
type: 3,
},
{
name: '养殖分析',
icon: '/static/applet/yz.png',
data: {
id: '__UNI__EEA7DC9',
url: 'https://ceshi-worker-task.lihaink.cn/api/common/getMiniProgramInfo?name=yangzhi',
},
type: 3,
}
],
AllMenuList: [],
nowMenuList: [],
street: '',
showPicker: false,
columnData: [],
isFshow: false,
backColor: 'rgba(252, 252, 252, 0)'
};
@ -220,20 +165,18 @@
},
created() {},
onLoad() {
this.Area()
this.initMenu();
this.Area();
},
onShow() {
if (this.isLogin) {
this.emptyText = '暂无可用应用'
this.jurisdiction = false
this.initAllAppLet();
} else {
this.emptyText = '请登录'
this.jurisdiction = true
}
this.getUserInfo()
this.getUserInfo();
},
onPullDownRefresh() {
@ -246,7 +189,7 @@
},
mounted() {
if (this.street.length <= 0) {
this.appLocation()
this.selfLocation()
}
// #ifdef H5
//
@ -274,8 +217,20 @@
}
},
// #endif
onHide() {
uni.$emit('showLoading', false);
},
methods: {
getPositionFn() {
this.street = '定位中'
this.$store.commit('setLocation', {
lat: null,
long: null
})
uni.removeStorageSync('RejectTarget')
this.selfLocation()
},
scrolling() {
//
let scrollTop =
@ -317,20 +272,53 @@
},
//
initMenu() {
let now = uni.getStorageSync('gatherNowMenuList');
try {
this.nowMenuList = JSON.parse(now);
this.AllMenuList = this.AllMenuList.filter((item) => {
return this.nowMenuList.find(t => t.name == item.name)?.name != item.name;
initAllAppLet(){
applet().then(res=>{
this.AllMenuList = res.data;
this.initMenu();
// this.showControllerAllLet();
}).catch(e=>{
console.log(e);
})
},
//
showControllerAllLet() {
let user;
if (typeof this.$store.state.app.userInfo == 'string') {
user = JSON.parse(this.$store.state.app.userInfo)
} else user = JSON.parse(JSON.stringify(this.$store.state.app.userInfo))
if (user?.show_controller_applet) {
this.AllMenuList.push({
name: '大屏控制',
icon: '/static/applet/dp.png',
data: {
id: '__UNI__83ABA97',
url: 'https://ceshi-worker-task.lihaink.cn/uploads/files/20231016/20231016112144fac6d9128.wgt',
},
type: 4,
})
} catch (e) {
this.nowMenuList = [];
}
},
clickMenu(e, data) {
this.getUniMp(e, data);
//
initMenu() {
let nowMenu = uni.getStorageSync('gatherMenuList');
try {
let list = JSON.parse(nowMenu||'[]');
let now = [];
let all = [];
this.AllMenuList.forEach((item) => {
if(list.find(t => t.name == item.name)?.name != item.name) all.push(item);
else now.push(item)
})
this.AllMenuList = all;
this.nowMenuList = now;
} catch (e) {
this.nowMenuList = [];
console.log(e);
}
},
clickMenu(data) {
this.getUniMp(data);
},
//
pushMenu(data) {
@ -349,35 +337,42 @@
//
editComfirm() {
this.editFlag = false;
uni.setStorageSync('gatherNowMenuList', JSON.stringify(this.nowMenuList));
uni.setStorageSync('gatherMenuList', JSON.stringify(this.nowMenuList));
},
getUniMp(type, data) {
// #ifdef APP-PLUS
switch (type) {
case 1:
uniMP.loadMP(data);
break;
// case 2: uniMP.loadMPx(data); break;
case 2:
this.navigator(data);
break;
getUniMp(data) {
let that = this;
// #ifdef APP-PLUS
if(data.version) return uniMP.loadAppletMP(data);
else switch (data.type) {
case 1:
uniMP.loadMP(data.data);
break;
case 2:
uniMP.loadMPx(data.data);
break;
case 3:
uniMP.loadMPurl(data);
uniMP.loadMPurl(data.data);
break;
case 4:
uniMP.loadMPdns(data.data);
break;
}
return;
// #endif
// #ifdef H5
if (type == 2) {
this.navigator(data);
} else {
// if (type == 2) {
// this.navigator(`/pages/moreProject/moreProject`);
// } else {
// uni.showToast({
// icon: 'none',
// title: 'H5'
// })
// }
uni.showToast({
icon: 'none',
title: 'H5不支持打开小程序'
})
}
// #endif
},
@ -425,23 +420,23 @@
})
this.showPicker = false
},
appLocation() {
uni.getLocation({
type: 'wgs84',
timeout: '10',
success: (res) => {
// console.log(res)
selfLocation() {
if (uni.getStorageSync('RejectTarget')) return;
if (uni.getStorageSync('loction') == true) {
this.isshow = false
} else {
this.isshow = true
uni.setStorageSync('loction', true);
}
if (this.$store?.state?.storage?.location?.lat) {
this.isshow = false
let latitude, longitude;
latitude = res.latitude.toString();
longitude = res.longitude.toString();
getGeocoder({
lat: latitude,
long: longitude
lat: this.$store.state.storage.location.lat,
long: this.$store.state.storage.location.long
}).then(res => {
let town = res.data.address_reference.town.title
let street_id = res.data.address_reference.town.id
this.street = res.data.address_component.street
this.street = res.data.address_reference.town.title;
this.$nextTick(() => {
this.$bus.$emit('value-updated', this.street + ',' +
street_id);
@ -455,10 +450,47 @@
icon: 'none'
})
})
} else uni.getLocation({
type: 'wgs84',
timeout: '10',
success: (res) => {
res = wgsToGcj(res);
// console.log(res)
this.isshow = false
let latitude, longitude;
latitude = res.latitude.toString();
longitude = res.longitude.toString();
this.$store.commit('setLocation', {
lat: res.latitude.toFixed(6),
long: res.longitude.toFixed(6),
});
getGeocoder({
lat: latitude,
long: longitude
}).then(res => {
let town = res.data.address_reference.town.title
let street_id = res.data.address_reference.town.id
this.street = res.data.address_reference.town.title;
this.$nextTick(() => {
this.$bus.$emit('value-updated', this.street + ',' +
street_id);
})
}).catch(err => {
this.isshow = false
uni.showToast({
title: err,
icon: 'none'
})
this.street = '定位失败'
})
},
fail: (err) => {
this.isshow = false
uni.setStorageSync("RejectTarget", true)
Toast('定位失败,请检查定位权限是否开启')
this.street = '定位失败'
}
});
},
@ -489,6 +521,27 @@
}
// console.log(that.userInfoData);
});
},
//
changeMap(){
uni.navigateTo({
url: `/pages/select_address/select_address_n`,
success:()=> {
uni.$once('changeAddress', (e)=>{
// this.street_id = e.street.code;
// this.street = e.street.name;
if (e.longitude) {
this.longitude = e.longitude;
this.latitude = e.latitude;
this.$store.commit('setLocation', {
lat: e.latitude,
long: e.longitude,
});
}
this.$bus.$emit('value-updated', e.street.name + ',' + e.street.code);
})
}
})
}
}
};
@ -703,4 +756,47 @@
background-color: #fff;
padding-top: 28rpx;
}
.rotate-box {
transform: rotate(0deg);
transition: transform .5s ease-out;
}
.rotate-box:active {
transform: rotate(360deg);
}
.location {
background-color: #f6f6f6;
width: 680rpx;
height: 150rpx;
position: absolute;
top: 0;
z-index: 9999;
border-radius: 20rpx;
left: 50%;
margin-left: -340rpx;
margin-top: 80rpx;
padding-left: 20rpx;
.locationa {
font-size: 28rpx;
color: #000;
font-weight: 500;
margin-top: 30rpx;
margin-bottom: 15rpx;
}
.locationb {
font-size: 20rpx;
color: #5a5a5a;
}
.locationx {
color: #000;
position: absolute;
top: 10rpx;
right: 20rpx;
}
}
</style>

View File

@ -278,22 +278,22 @@
<view class='title'>产品介绍</view>
<view class='conter' v-if="description" style="min-height:50rpx;">
<!-- #ifndef APP-PLUS -->
<jyf-parser v-if="description.type == 0" :domain='domain'
<jyf-parser v-if="description.type == 0 && typeof description.content == 'string'" :domain='domain'
:html="description.content.replace(/<br\/>/ig, '')" ref="article"
:tag-style="tagStyle"></jyf-parser>
<!-- #endif -->
<!-- #ifdef APP-PLUS -->
<view v-if="description.type == 0" class="description"
<view v-if="description.type == 0 && typeof description.content == 'string'" class="description"
v-html="description.content.replace(/<br\/>/ig, '')"></view>
<!-- #endif -->
<view v-else class="product_content">
<view v-if="description.content && description.content.title" class="title">
<view v-if="description.content && description.content.title" class="product_content_title">
{{description.content.title}}
</view>
<view v-if="description.content && description.content.image" class="pictures" style="background-color: #fff;">
<image v-for="(item,index) in description.content.image" :key="index" :src="item" mode="aspectFit">
<block v-if="description.content && description.content.image">
<image v-for="(item,index) in description.content.image" :key="index" :src="item" mode="widthFix" style="background-color: #fff;width: 100vw;">
</image>
</view>
</block>
</view>
</view>
<!-- 价格说明 -->
@ -787,6 +787,7 @@
title: res.message
})
}).catch(err => {
console.log(err);
//
return that.$util.Tips({
title: err
@ -994,6 +995,7 @@
ChangeAttr: function(res) {
let productSelect = this.productValue[res];
if (productSelect) this.$set(this, "uniqueValue", productSelect.unique);
// console.log(productSelect, this.storeInfo);
if (productSelect && productSelect.stock > 0) {
this.$set(this.attr.productSelect, "image", productSelect.image ? productSelect.image : this
.storeInfo
@ -1059,7 +1061,14 @@
}
that.$set(that, 'storeInfo', storeInfo);
that.$set(that, 'description', storeInfo.content);
if (that.description.type == 0) {
if(that.description?.content && typeof that.description.content == 'string'){
try{
that.description.content = JSON.parse(that.description.content);
}catch(e){
console.log(e);
}
}
if (that.description?.content && that.description?.type == 0 && typeof that.description?.content == 'string') {
that.description.content = that.description.content.replace(
/<img/gi,
'<img style="max-width:100%;height:auto;float:left;display:block" '
@ -1114,6 +1123,7 @@
that.getCouponList();
})
}).catch(err => {
console.log(err);
//
return that.$util.Tips({
title: err
@ -2520,4 +2530,21 @@
}
}
}
.product_content{
background-color: #fff;
&_title{
width: 100%;
height: auto;
line-height: 50rpx;
padding: 28rpx;
word-wrap: break-word;
text-align: center;
}
image{
width: 750rpx;
// height: auto;
// height: 750rpx;
}
}
</style>

File diff suppressed because it is too large Load Diff

View File

@ -35,8 +35,8 @@
data() {
return {
//,
imageList: [{
imageList: [
{
src: '/static/images/guide.png'
}

View File

@ -15,7 +15,6 @@
var launchFlag = uni.getStorageSync('launchFlag');
// console.log("launchFlag:" + launchFlag);
if (launchFlag) { //
uni.switchTab({
url:'/pages/index/index'
})

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,84 @@
<template>
<view class="box" style="position: relative;">
<image @click="back" class="bg_back"
src="https://lihai001.oss-cn-chengdu.aliyuncs.com/public/uploads/new_activity/back.png"></image>
<view class="li" @click="navSw('/pages/index/index')">
<u--image src="https://lihai001.oss-cn-chengdu.aliyuncs.com/def/edf53202401271436507555.png" width="690rpx"
height="200rpx" style="position: absolute;" />
<view class="btn">
我是居民用户
</view>
</view>
<view class="li" style="margin-top: 50rpx;" @click="navgo('/pages/helpPeople/formTable')">
<u--image src="https://lihai001.oss-cn-chengdu.aliyuncs.com/def/8489c202401271437055619.png" width="690rpx"
height="200rpx" style="position: absolute;" />
<view class="btn">
我是农民用户
</view>
</view>
</view>
</template>
<script>
export default {
methods: {
back(){
uni.navigateBack();
},
navgo(url) {
uni.navigateTo({
url
})
},
navSw(url){
uni.switchTab({
url:url
})
}
}
}
</script>
<style lang='scss' scoped>
.box {
width: 750rpx;
height: 1624rpx;
background-image: url('https://lihai001.oss-cn-chengdu.aliyuncs.com/def/9c4b4202401271437449183.png');
background-size: 100% 100%;
padding-top: 500rpx;
}
.li {
margin: 0rpx auto;
width: 690rpx;
height: 200rpx;
background-size: 100% 100%;
position: relative;
.btn {
z-index: 999;
position: absolute;
width: 287rpx;
height: 76rpx;
border-radius: 40rpx 40rpx 40rpx 40rpx;
opacity: 1;
border: 2rpx solid #FF5E0C;
text-align: center;
line-height: 76rpx;
color: #FF5E0C;
font-size: 34rpx;
right: 50rpx;
bottom: 50rpx;
}
}
.bg_back {
height: 34rpx;
width: 20rpx;
position: absolute;
top: calc(var(--status-bar-height) + 30rpx);
left: 30rpx;
}
</style>

View File

@ -52,6 +52,7 @@
<script>
import mTabbar from '@/components/m-tabbar/m-tabbar.vue'
import { wgsToGcj } from "@/utils/wgs.js";
import zbpSwiper from '@/components/zbpSwiper'
import {
getSlideAPI
@ -224,8 +225,9 @@
},
selfLocation() {
uni.getLocation({
type: 'gcj02',
type: 'wgs84',
success: (res) => {
res = wgsToGcj(res);
let latitude, longitude;
latitude = res.latitude.toString();
longitude = res.longitude.toString();

File diff suppressed because it is too large Load Diff

1413
pages/index/index_old.vue Normal file

File diff suppressed because it is too large Load Diff

View File

@ -3,13 +3,13 @@
<view class="info">
<view class="bg"></view>
<view class="card">
<view class="title">店铺保证金信息</view>
<view class="title">店铺金信息</view>
<view class="item">
<text>已缴纳保证</text>
<text>已缴纳</text>
<text>{{merchant_Data.paid_margin}}</text>
</view>
<view class="item">
<text>剩余缴纳保证</text>
<text>剩余缴纳</text>
<text>{{merchant_Data.unpaid_margin}}</text>
</view>
<view class="item">
@ -107,28 +107,23 @@
});
},
//
//
decimal() {
merchant({
id: this.mer_id
}).then((res) => {
this.merchant_Data = res.data
});
},
//
//
paydecimal() {
let that = this
uni.showModal({
title: '提示',
content: '商户' + this.merchant_Data.mer_name + '是否同意缴纳保证金',
content: '商户' + this.merchant_Data.mer_name + '是否同意缴纳金',
success: (res) => {
if (res.confirm) {
// console.log('');
paymerchant().then((res) => {
uni.requestPayment({
provider: 'wxpay',
orderInfo: res.data
@ -144,14 +139,13 @@
that.$util.Tips({
title: '支付失败'
});
console.log('fail:' + JSON.stringify(err));
}
});
}).catch((err) => {
console.log(err)
this.$util.Tips(()=>{
that.$util.Tips({
title: err
})
})
} else if (res.cancel) {

View File

@ -39,11 +39,11 @@
<image class="icon_img" :src="`${prefix}zsgl.png`" mode="aspectFill"></image>
<text class="text">在售管理</text>
</view>
<!-- <view class="examine"
<view class="examine"
@click="navigator(`/pages/admin/order/index?mer_id=${mer_id}&product_type=98&type_id=${userInfoData.mer_info.type_id}`)">
<image class="icon_img" :src="`${prefix}cwgl.png`" mode="aspectFill"></image>
<text class="text">财务管理</text>
</view> -->
</view>
<!-- <view class="examine"
@click="navigator(`/pages/admin/financial_management/index?mer_id=${mer_id}&product_type=98&type_id=${userInfoData.mer_info.type_id}`)">
<image class="icon_img" :src="`${prefix}cwgl.png`" mode="aspectFill"></image>
@ -54,6 +54,7 @@
<image class="icon_img" :src="`${prefix}ddgl.png`" mode="aspectFill"></image>
<text class="text">订单管理</text>
</view> -->
<view class="examine"
@click="navigator(`/pages/nongKe/gather/select_warehouse?mer_id=${mer_id}&stype=1`)">
<image class="icon_img" :src="`${prefix}rkgl.png`" mode="aspectFill">
@ -62,7 +63,7 @@
</view>
<view class="examine"
@click="navigator(`/pages/product/basicSet?mer_id=${mer_id}&product_type=98`, '商户设置')">
@click="buyserset">
<image class="icon_img" :src="`${prefix}shsz.png`" mode="aspectFill"></image>
<text class="text">商户设置</text>
</view>
@ -83,10 +84,10 @@
</image>
<text class="text">订单核销</text>
</view>
<view class="examine" @click="navigator(`/pages/margin/margin`)">
<view class="examine" @click="margin(`/pages/margin/margin`)">
<image class="icon_img" src="@/static/images/jy.png">
</image>
<text class="text">缴纳保证</text>
<text class="text">缴纳</text>
</view>
<!-- <view class="examine"
@click="navigator(`/pages/commissionedSales/index/index?mer_id=${mer_id}`)">
@ -194,7 +195,7 @@
<text class="text">商品管理</text>
</view>
<view class="examine"
@click="navigator(`/pages/product/basicSet?mer_id=${mer_id}`, '商户设置')">
@click="buyserset">
<image class="icon_img" :src="`${prefix}shsz.png`" mode="aspectFill">
</image>
<text class="text">商户设置</text>
@ -202,13 +203,13 @@
<view class="examine" @click="margin(`/pages/margin/margin`)">
<image class="icon_img" src="@/static/images/jy.png">
</image>
<text class="text">缴纳保证</text>
<text class="text">缴纳</text>
</view>
<view class="examine"
<!-- <view class="examine"
@click="navigator(`/pages/admin/financial_management/index?mer_id=${mer_id}&product_type=98&type_id=${userInfoData.mer_info.type_id}`)">
<image class="icon_img" :src="`${prefix}cwgl.png`" mode="aspectFill"></image>
<text class="text">财务管理</text>
</view>
</view> -->
<!-- <view class="examine"
@click="navigator(`/pages/users/trading_hall/index?mer_id=${mer_id}`)">
<image class="icon_img" src="@/static/images/diaohuo.png" mode="aspectFill">
@ -317,16 +318,16 @@
<text class="text">商品管理</text>
</view>
<view class="examine"
@click="navigator(`/pages/product/basicSet?mer_id=${mer_id}`, '商户设置')">
@click="buyserset">
<image class="icon_img" :src="`${prefix}shsz.png`" mode="aspectFill">
</image>
<text class="text">商户设置</text>
</view>
<view class="examine" @click="navigator(`/pages/margin/margin`)">
<view class="examine" @click="margin(`/pages/margin/margin`)">
<image class="icon_img" src="@/static/images/jy.png">
</image>
<text class="text">缴纳保证</text>
<text class="text">缴纳</text>
</view>
<!-- <view class="examine" @click="navigator(`/pages/users/user_invoice_Finance/index?mer_id=${mer_id}`)">
<image class="icon_img" src="@/static/images/cwgk.png" mode="aspectFill">
@ -389,15 +390,15 @@
<text class="text">商品管理</text>
</view>
<view class="examine"
@click="navigator(`/pages/product/basicSet?mer_id=${mer_id}`, '商户设置')">
@click="buyserset">
<image class="icon_img" :src="`${prefix}shsz.png`" mode="aspectFill">
</image>
<text class="text">商户设置</text>
</view>
<view class="examine" @click="navigator(`/pages/margin/margin`)">
<view class="examine" @click="margin(`/pages/margin/margin`)">
<image class="icon_img" src="@/static/images/jy.png">
</image>
<text class="text">缴纳保证</text>
<text class="text">缴纳</text>
</view>
</view>
</view>
@ -847,7 +848,7 @@
}
},
//
//
margin(url) {
if (this.userInfoData.mer_info.mer_settlement_agree_status == 0) {
@ -873,12 +874,13 @@
}
},
//
logout() {
uni.switchTab({
url: '/pages/gather/gather'
})
},
//
buyserset() {
uni.navigateTo({
@ -886,10 +888,7 @@
})
},
navigator(url, t) {
if (this.userInfoData.mer_info.mer_settlement_agree_status == 0) {
if (this.codenote.length == 0) {
this.isFshow = true
this.countDown()
@ -904,7 +903,6 @@
}
}
} else {
uni.navigateTo({
url: url
})

View File

@ -0,0 +1,195 @@
<template>
<view>
<view class="bg">
<image class="bg_img" mode="widthFix"
src="https://lihai001.oss-cn-chengdu.aliyuncs.com/public/uploads/new_activity/detail.webp"></image>
<image @click="back" class="bg_back"
src="https://lihai001.oss-cn-chengdu.aliyuncs.com/public/uploads/new_activity/back.png"></image>
<view class="b_body">
<view class="b_content">
<view v-if="info.content" v-html="info.content.content"></view>
</view>
</view>
</view>
<view class="btn_box">
<image v-if="show_a1" @click="changeA(show_a1)" class="btn_image" mode="widthFix"
src="https://lihai001.oss-cn-chengdu.aliyuncs.com/public/uploads/new_activity/detail_btn1.webp"></image>
<image v-if="show_a2" @click="changeA(show_a2)" class="btn_image" mode="widthFix"
src="https://lihai001.oss-cn-chengdu.aliyuncs.com/public/uploads/new_activity/detail_btn2.webp"></image>
</view>
<u-modal :show="show" :closeOnClickOverlay="true" :title="`[${activity.title}]`"
content="选择活动后只有完成活动任务后才可参加另一个活动, 确定要参与这个活动吗" cancelText="我再想想" confirmText="参加活动" confirmColor="#e54841"
@cancel="show = false" @confirm="joinA()" showCancelButton></u-modal>
<authorize @onLoadFun="onLoadFun" :isAuto="isAuto" :isShowAuth="isShowAuth" @authColse="authColse"
:isGoIndex="false"></authorize>
</view>
</template>
<script>
import { consumption, chooseConsumption } from "@/api/activity.js"
import { getArticleList } from "@/api/api.js"
import { Toast } from "../../../libs/uniApi";
import authorize from "@/components/Authorize.vue";
import { getUserInfo } from '@/api/user.js';
export default {
components: {
authorize
},
data() {
return {
info: {},
userInfo: {},
Alist: [],
activity: {
title: ''
},
show: false,
isAuto: false, //
isShowAuth: false, //
is_join_activity: 0, //
}
},
onLoad() {
this.getArticleList();
this.is_join_activity = uni.getStorageSync('is_join_activity');
},
onShow() {
this.getUserInfo();
this.consumption();
},
computed: {
show_a1() { //
return this.Alist.find(item => item.title == '用户消费补贴活动')
},
show_a2() { //
return this.Alist.find(item => item.title == '用户推荐拉新活动')
}
},
methods: {
consumption() {
consumption().then(res => {
this.Alist = res.data;
})
},
back() {
uni.navigateBack()
},
changeA(item) {
if (!this.userInfo.account) return this.openAuto();
this.activity = item;
if (this.is_join_activity) return this.joinA();
this.show = true;
},
getArticleList() {
getArticleList(25).then(res => {
this.info = res.data.list[0]
})
},
//
joinA() {
chooseConsumption({
coupon_id: this.activity.coupon_id,
activity_id: 1, //1
}).then(res => {
this.show = false;
let url = '';
if (this.activity.title == '用户消费补贴活动') url = "/pages/redpacket/redpack_type?type=1";
if (this.activity.title == '用户推荐拉新活动') url = "/pages/newActivity/invitation/invitation";
if (url) uni.navigateTo({
url: url
})
}).catch(err => {
this.show = false;
this.$nextTick(() => {
Toast('您正在参与活动,暂时不支持切换');
})
})
uni.setStorageSync('is_join_activity', 1);
this.is_join_activity = 1;
},
getUserInfo() {
getUserInfo().then(res => {
this.userInfo = res.data;
}).catch(err => {
console.log(err);
})
},
//
onLoadFun(data) {
this.getUserInfo();
this.isShowAuth = false;
},
//
openAuto() {
// console.log('hajhcdsohjcosvjco')
this.isAuto = true;
this.isShowAuth = true
},
//
authColse: function(e) {
this.isShowAuth = e
},
},
onPullDownRefresh() {
uni.stopPullDownRefresh()
}
}
</script>
<style lang="scss">
page {
background-color: #fff5dd;
}
.bg {
position: relative;
padding-bottom: 300rpx;
.bg_img {
width: 750rpx;
height: 652rpx;
position: absolute;
top: 0;
left: 0;
}
.bg_back {
height: 34rpx;
width: 20rpx;
position: absolute;
top: calc(var(--status-bar-height) + 30rpx);
left: 30rpx;
}
.b_body {
width: 710rpx;
margin-left: 21rpx;
margin-right: 19rpx;
height: auto;
background-color: #fff;
border-radius: 0 0 60rpx 60rpx;
padding: 28rpx;
padding-top: 680rpx;
margin-bottom: 30rpx;
.b_content {
width: 100%;
// height: 800rpx;
// background-color: #eee;
}
}
}
.btn_box {
position: fixed;
bottom: 30rpx;
left: 50%;
transform: translate(-50%);
width: 710rpx;
.btn_image {
width: 100%;
}
}
</style>

View File

@ -0,0 +1,909 @@
<template>
<view class="m_body">
<view class="bg">
<view class="bg_box">
<image class="bg_img" mode="widthFix"
src="https://lihai001.oss-cn-chengdu.aliyuncs.com/public/uploads/new_activity/recharge.webp"></image>
<view class="bg_border"></view>
</view>
<image @click="back" class="bg_back"
src="https://lihai001.oss-cn-chengdu.aliyuncs.com/public/uploads/new_activity/back.png"></image>
<view class="body_card">
<view class="card1">
<view class="change_list">
<view class="change_item" @click="changeItem(item, index)"
v-for="(item, index) in changeList" :key="index">
<image class="item_pic" :src="item.pic"></image>
<view class="item_content">
<view class="top">
<view class="top_left"><text class="c_icon">¥</text> <text class="c_content">{{item.count}}</text> <text class="tips">现在购买礼包即送</text></view>
<view class="top_right">
<text>数量: </text>
<view @click="reduce(item)">- </view>
<view>{{item.num}} </view>
<view @click="append(item)">+ </view>
</view>
</view>
<view class="bottom">
<view class="bottom_item">
<image src="https://lihai001.oss-cn-chengdu.aliyuncs.com/public/uploads/new_activity/re_redpacket.webp"></image>
<view class="text">{{tipType[red_type].red1}}</view>
</view>
<view class="bottom_item">
<image src="https://lihai001.oss-cn-chengdu.aliyuncs.com/public/uploads/new_activity/re_redpacket.webp"></image>
<view class="text">{{tipType[red_type].red2}}</view>
</view>
</view>
</view>
</view>
</view>
</view>
</view>
</view>
<view class="footer">
<view class="f_tip">
总计购买礼包金额:
<view class="price">
<text>{{total}}</text>
</view>
</view>
<view class="primary_btn" @click="$u.throttle(submitSub, 1500)">立即购买</view>
</view>
<uni-popup ref="redTipsRef">
<view class="ref_ref">
<view class="ref_top">
购买礼包金额达到
<text v-if="red_type==0">100-2000</text>
<text v-if="red_type==1">2001-4000</text>
<text v-if="red_type==2">4001-20000</text>
!
</view>
<view class="ref_center">
赠送红包变为
</view>
<view class="ref_bottom">
<view class="bottom_item">
<image src="https://lihai001.oss-cn-chengdu.aliyuncs.com/public/uploads/new_activity/re_redpacket.webp"></image>
<view class="text">{{tipType[red_type].red1}}</view>
</view>
<view class="bottom_item">
<image src="https://lihai001.oss-cn-chengdu.aliyuncs.com/public/uploads/new_activity/re_redpacket.webp"></image>
<view class="text">{{tipType[red_type].red2}}</view>
</view>
</view>
</view>
</uni-popup>
<payment :payMode="payMode" :order_id="rechar_id" :pay_close="pay_close" :is-call="true" @onChangeFun="onChangeFun"
:totalPrice="totalPrice"></payment>
<authorize @onLoadFun="onLoadFun" :isAuto="isAuto" :isShowAuth="isShowAuth" @authColse="authColse"></authorize>
</view>
</template>
<script>
import { getCommissionInfo } from "@/api/user.js"
import { Toast } from "../../../libs/uniApi";
import {
mapGetters
} from "vuex";
import {
getUserInfo,
spreadInfo,
rechargeWechat
} from '@/api/user.js';
import authorize from '@/components/Authorize';
import payment from '@/components/payment';
export default {
components: {
authorize,
payment
},
data() {
return {
userInfo: {},
curNow: 0,
list1: [{
name: '余额购买'
}, {
name: '购买记录'
}],
changeList: [
{
count: 100, //
pic: 'https://lihai001.oss-cn-chengdu.aliyuncs.com/public/uploads/new_activity/a_re_item1.webp',
num: 0, //
},
{
count: 200,
pic: 'https://lihai001.oss-cn-chengdu.aliyuncs.com/public/uploads/new_activity/a_re_item2.webp',
num: 0, //
},
{
count: 500,
pic: 'https://lihai001.oss-cn-chengdu.aliyuncs.com/public/uploads/new_activity/a_re_item3.webp',
num: 0, //
},
{
count: 1000,
pic: 'https://lihai001.oss-cn-chengdu.aliyuncs.com/public/uploads/new_activity/a_re_item4.webp',
num: 0, //
}
],
nowChange: 0,
nowPrice: 0,
priceCount: 1,
isAuto: false, //
isShowAuth: false, //
recordList: [],
tipType: [
{
red1: '8%无门槛红包',
red2: '42%现金抵扣红包'
},
{
red1: '12%无门槛红包',
red2: '68%现金抵扣红包'
},
{
red1: '15%无门槛红包',
red2: '85%现金抵扣红包'
},
],
red_type: 0,
where: {
page: 1,
limit: 15,
type: 2
},
otherValue: '其他',
now_money: 0,
navRecharge: ['账户购买', '佣金转入'],
active: 0,
number: '',
from: '',
placeholder: "0.00",
picList: [],
activePic: 0,
money: "",
numberPic: '',
rechar_id: '0',
rechargeAttention: [],
pay_close: false,
totalPrice: '0',
payMode: [{
name: '微信支付',
icon: 'icon-weixinzhifu',
// #ifdef H5
value: 'h5',
// #endif
// #ifdef MP
value: 'routine',
// #endif
// #ifdef APP-PLUS
value: 'weixin',
// #endif
title: '微信快捷支付',
payStatus: true
}],
}
},
onLoad() {
if (this.isLogin) {
this.getUserInfo()
} else {
this.isAuto = true;
this.isShowAuth = true
}
},
onShow() {
},
computed: {
...mapGetters(['isLogin', 'viewColor', 'keyColor']),
total() {
return this.changeList.reduce((t, obj)=>{
return t + (obj.count * obj.num);
}, 0);
}
},
onReachBottom() {
this.getCommissionInfo();
},
methods: {
back(){
uni.navigateBack();
},
clickTab1(e) {
this.curNow = e.index;
if (e.index == 1) {
this.recordList = [];
this.where.page = 1;
this.getCommissionInfo();
}
},
changeItem(e, index) {
this.nowPrice = e;
this.nowChange = index;
if (this.priceCount * this.nowPrice > 20000) {
this.priceCount = Math.floor(20000 / this.nowPrice);
return Toast('不可超过2万元');
}
},
append(item) {
if(this.total + item.count >=2001 && this.total + item.count <=4000 && this.red_type != 1){
this.red_type = 1;
this.$refs.redTipsRef.open();
}else if(this.total + item.count >=4001 && this.total + item.count <=20000 && this.red_type != 2){
this.red_type = 2;
this.$refs.redTipsRef.open();
}
if (this.total + item.count > 20000 || this.total>=20000) {
return Toast('不可超过2万元');
} else item.num++;
},
reduce(item) {
if(this.total - item.count >=100 && this.total - item.count <=2000 && this.red_type != 0){
this.red_type = 0;
this.$refs.redTipsRef.open();
}else if(this.total - item.count >=2001 && this.total - item.count <=4000 && this.red_type != 1){
this.red_type = 1;
this.$refs.redTipsRef.open();
}
if (this.total==0||item.num==0) return Toast('不能再少啦');
else item.num--;
},
getCommissionInfo() {
getCommissionInfo(this.where).then((res) => {
if (res.data.list.length > 0) {
this.recordList = [...this.recordList, ...res.data.list];
if (res.data.list.length >= 15) this.where.page++;
}
})
},
/**
* 选择金额
*/
picCharge(idx, item) {
this.activePic = idx;
if (item === undefined) {
this.rechar_id = '0';
this.numberPic = "";
this.otherValue = ''
} else {
this.otherValue = '其他'
this.total = "";
this.rechar_id = item.id.toString();
this.numberPic = item.data.price;
}
},
/**
* 购买额度选择
*/
getRecharge() {
getRechargeApi()
.then(res => {
this.picList = res.data.recharge_quota;
if (this.picList[0]) {
this.rechar_id = this.picList[0].id.toString();
this.numberPic = this.picList[0].data.price;
}
this.rechargeAttention = res.data.recharge_attention || [];
})
.catch(res => {
this.$dialog.toast({
mes: res
});
});
},
onLoadFun: function() {
this.isShowAuth = false;
this.getUserInfo();
this.getRecharge();
},
//
authColse: function(e) {
this.isShowAuth = e
},
navRecharges: function(index) {
this.active = index;
},
/**
* 获取用户信息
*/
getUserInfo: function() {
let that = this;
spreadInfo().then(res => {
that.$set(that, 'userInfo', res.data);
})
},
payClose: function() {
this.pay_close = false;
},
payCheck: function(type) {
this.createOrder(type);
},
/*
* 用户购买
*/
submitSub: function(e) {
let that = this
let value = this.total;
//
if (that.active) {
if (parseFloat(value) < 0 || parseFloat(value) == NaN || value == undefined || value == "") {
return that.$util.Tips({
title: '请输入金额'
});
}
uni.showModal({
title: '转入余额',
content: '转入余额后无法再次转出,确认是否转入余额',
success(res) {
if (res.confirm) {
rechargeBrokerage({
brokerage: parseFloat(value),
}).then(res => {
// that.$set(that, 'userInfo.now_money', that.$util.$h.Add(value, that.userInfo.now_money))
uni.showToast({
icon: 'success',
title: '转入成功'
})
// return that.$util.Tips({
// title: '',
// icon: 'success'
// }, {
// tab: 5,
// url: '/pages/users/user_money/index'
// });
}).catch(err => {
return that.$util.Tips({
title: err
})
});
} else if (res.cancel) {
return that.$util.Tips({
title: '已取消'
});
}
},
})
} else {
if (this.rechar_id == 0) {
if (parseFloat(that.total) === 0) {
return that.$util.Tips({
title: '购买金额金额不能为0'
});
}
if (!that.total) {
return that.$util.Tips({
title: '请填写购买金额!'
});
}
if (!Number(that.total)) {
return that.$util.Tips({
title: '请填写正确的金额!'
});
}
}
this.pay_close = true
}
},
createOrder(type) {
let that = this;
let query = {
price: that.rechar_id == 0 ? that.total : that.numberPic,
recharge_id: that.rechar_id,
type: type,
// #ifdef H5
return_url: location.port ? location.protocol + '//' + location.hostname + ':' + location.port +
'/pages/users/user_money/money' : location.protocol + '//' + location.hostname +
'/pages/users/user_money/money'
// #endif
};
// #ifdef MP
// openPaySubscribe().then(() => {
rechargeWechat(query).then(res => {
that.callPay(res);
}).catch(err => {
uni.showToast({
title: err,
icon: 'none'
});
});
// });
// #endif
// #ifndef MP
rechargeWechat(query).then(res => {
console.log('res', res);
that.callPay(res);
}).catch(err => {
console.log('err', err);
uni.showToast({
title: err,
icon: 'none'
});
});
// #endif
},
//
callPay(res) {
let that = this,
status = res.data.type,
orderId = res.data.recharge_id,
callback_key = res.data.pay_key,
jsConfig = res.data.config,
goPages = '/pages/users/user_money/money';
switch (status) {
case 'ORDER_EXIST':
case 'EXTEND_ORDER':
case 'PAY_ERROR':
case 'error':
uni.hideLoading();
Toast(res.message)
// return that.$util.Tips({
// title: res.message
// }, {
// tab: 5,
// url: goPages
// });
break;
case 'success':
uni.hideLoading();
uni.showToast({
icon: 'success',
title: res.message
})
// if (that.seckillId)
// return that.$util.Tips({
// title: res.message,
// icon: 'success'
// }, {
// tab: 4,
// url: goPages
// });
// return that.$util.Tips({
// title: res.message,
// icon: 'success'
// }, {
// tab: 5,
// url: goPages
// });
break;
case 'alipay':
case "alipayQr":
uni.hideLoading();
that.$emit('onChangeFun', {
action: 'payClose'
});
uni.navigateTo({
url: '/pages/order_pay_back/index?keyCode=' + callback_key + '&url=' + jsConfig + '&type=10'
})
return;
break;
// #ifndef MP
case "wechat":
case "weixin":
case "weixinApp":
jsConfig.timeStamp = jsConfig.timestamp;
// #ifndef APP-PLUS
that.$wechat.pay(jsConfig).then(res => {
uni.showToast({
icon: 'success',
title: res.message
})
// return that.$util.Tips({
// title: res.message,
// icon: 'success'
// }, {
// tab: 4,
// url: goPages
// });
}).catch(res => {
uni.showToast({
icon: 'success',
title: '取消支付'
})
// if (res.errMsg == 'chooseWXPay:cancel') return that.$util.Tips({
// title: ''
// }, {
// tab: 5,
// url: goPages
// });
})
// #endif
// #ifdef APP-PLUS
let mp_pay_name = ''
if (uni.requestOrderPayment) {
mp_pay_name = 'requestOrderPayment'
} else {
mp_pay_name = 'requestPayment'
}
uni[mp_pay_name]({
provider: 'wxpay',
orderInfo: jsConfig,
success: (e) => {
this.getUserInfo()
uni.showToast({
icon: 'success',
title: '支付成功'
})
// let url = '/pages/users/user_money/money';
// return that.$util.Tips({
// title: '',
// icon: 'success'
// }, {
// tab: 4,
// url: url
// });
},
fail: (e) => {
console.log(e);
uni.showModal({
content: "支付失败",
showCancel: false,
success: function(res) {
}
})
},
complete: () => {
uni.hideLoading();
},
});
// #endif
break;
// #endif
// #ifdef MP
case "routine":
jsConfig.timeStamp = jsConfig.timestamp;
let mp_pay_name = ''
if (uni.requestOrderPayment) {
mp_pay_name = 'requestOrderPayment'
} else {
mp_pay_name = 'requestPayment'
}
uni[mp_pay_name]({
...jsConfig,
success: function(res) {
uni.hideLoading();
that.getUserInfo();
that.getRecharge();
// console.log('12323424')
uni.showToast({
icon: 'success',
title: '支付成功'
})
// return that.$util.Tips({
// title: '',
// icon: 'success'
// }, {
// tab: 5,
// url: goPages
// });
},
fail: function(e) {
uni.hideLoading();
Toast('取消支付')
// return that.$util.Tips({
// title: ''
// }, {
// tab: 5,
// url: goPages
// });
},
})
break;
// #endif
case "balance":
uni.hideLoading();
//
Toast(res.msg)
// return that.$util.Tips({
// title: res.msg
// }, {
// tab: 5,
// url: goPages
// });
break;
// #ifdef H5
case 'h5':
let host = window.location.protocol + "//" + window.location.host;
let url = `${host}/pages/users/user_money/money`
let eUrl = encodeURIComponent(url)
let jsurl = jsConfig.mweb_url || jsConfig.h5_url
let locations = `${jsurl}&redirect_url=${eUrl}`
setTimeout(() => {
location.href = locations;
}, 100);
break;
// #endif
// #ifdef APP-PLUS
case 'alipayApp':
uni.requestPayment({
provider: 'alipay',
orderInfo: jsConfig,
success: (e) => {
this.getUserInfo()
uni.showToast({
icon: 'success',
title: '支付成功'
})
// return that.$util.Tips({
// title: '',
// icon: 'success'
// }, {
// tab: 5,
// url: goPages
// });
},
fail: (e) => {
uni.showModal({
content: "支付失败",
showCancel: false,
success: function(res) {
uni.redirectTo({
url: goPages
})
}
})
},
complete: () => {
uni.hideLoading();
},
});
break;
// #endif
}
},
onChangeFun: function(e) {
let opt = e;
let action = opt.action || null;
let value = opt.value != undefined ? opt.value : null;
action && this[action] && this[action](value);
},
},
onPullDownRefresh() {
uni.stopPullDownRefresh()
}
}
</script>
<style lang="scss">
page {
background-color: #fff;
}
.bg {
position: relative;
padding-bottom: 300rpx;
.bg_box{
height: 486rpx;
position: relative;
overflow: hidden;
.bg_img {
width: 750rpx;
height: 652rpx;
position: absolute;
top: 0;
left: 0;
}
.bg_border{
position: absolute;
bottom: 0;
left: 0;
width: 100%;
height: 30rpx;
border-radius: 60rpx 60rpx 0 0;
background-color: #fff;
}
}
.bg_back {
height: 34rpx;
width: 20rpx;
position: absolute;
top: calc(var(--status-bar-height) + 30rpx);
left: 30rpx;
}
.body_card {
color: #333;
.card1 {
background-color: #fff;
.change_list {
width: 700rpx;
margin: 0 auto;
display: flex;
flex-direction: column;
.change_item {
width: 700rpx;
height: 172rpx;
text-align: center;
background-color: #f7f7f7;
border-radius: 20rpx 20rpx 20rpx 20rpx;
font-size: 40rpx;
position: relative;
margin-bottom: 30rpx;
.item_pic{
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 100%;
}
.item_content{
padding: 26rpx;
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 100%;
display: flex;
flex-direction: column;
justify-content: space-between;
.top{
display: flex;
justify-content: space-between;
align-items: center;
height: 70rpx;
.top_left{
font-size: 58rpx;
color: #ffc53d;
display: flex;
align-content: center;
.tips{
font-size: 24rpx;
border: 5rpx solid #ffc53d;
margin-left: 20rpx;
padding: 5rpx 15rpx;
border-radius: 60rpx;
color: #7C5906;
}
.c_content{
padding-top: 10rpx;
}
.c_icon {
padding-top: 15rpx;
font-size: 36rpx;
}
}
.top_right{
display: flex;
align-items: center;
color: #FF3A32;
text{
font-size: 28rpx;
}
view{
height: 60rpx;
width: 40rpx;
text-align: center;
line-height: 60rpx;
}
}
}
.bottom{
font-size: 28rpx;
display: flex;
align-items: center;
color: #FF3A32;
.bottom_item{
flex: 1;
display: flex;
align-items: center;
image{
width: 32rpx;
height: 40rpx;
}
.text{
padding-left: 15rpx;
}
}
}
}
}
.change_item_active {
background: rgba(#FF8056, 0.2);
border: 5rpx solid #FF8056;
color: #FF8056;
}
}
}
}
}
.m_body {
.footer {
position: fixed;
left: 0;
bottom: 0;
height: 120rpx;
width: 100vw;
background-color: #fff;
display: flex;
justify-content: space-between;
align-items: center;
padding: 0 20rpx;
.f_tip {
display: flex;
align-items: flex-end;
font-style: 26rpx;
.price {
color: #FF8056;
text {
font-size: 44rpx;
margin-left: 20rpx;
margin-right: 5rpx;
}
}
}
.primary_btn {
background-color: #fa8147;
height: 80rpx;
border-radius: 80rpx;
width: 180rpx;
color: #fff;
line-height: 80rpx;
text-align: center;
}
}
}
.ref_ref{
width: 630rpx;
height: 200rpx;
background-color: #fff;
border-radius: 20rpx;
padding: 20rpx 10rpx;
display: flex;
flex-direction: column;
justify-content: space-between;
align-items: center;
.ref_top{
color: #ffc53d;
}
.ref_center{
font-size: 24rpx;
border: 5rpx solid #ffc53d;
margin-left: 20rpx;
padding: 5rpx 15rpx;
border-radius: 60rpx;
color: #7C5906;
}
.ref_bottom{
font-size: 28rpx;
display: flex;
align-items: center;
justify-content: space-between;
color: #FF3A32;
.bottom_item{
width: 280rpx;
display: flex;
align-items: center;
image{
width: 32rpx;
height: 40rpx;
}
.text{
padding-left: 15rpx;
}
}
}
}
</style>

View File

@ -0,0 +1,384 @@
<template>
<view>
<view class="bg">
<image class="bg_img" mode="widthFix" src="https://lihai001.oss-cn-chengdu.aliyuncs.com/public/uploads/new_activity/invitation.webp"></image>
<image @click="back" class="bg_back" src="https://lihai001.oss-cn-chengdu.aliyuncs.com/public/uploads/new_activity/back.png"></image>
<view class="bg_body">
<view class="b_qr">
<view class="qr_body">
<view class="qr_code">
<image :src="qr_img"></image>
</view>
<view class="qr_text">扫一扫红包正在路上</view>
<view class="qr_tips">温馨提示邀请新用户才有机会获得红包哦</view>
</view>
</view>
<view class="b_user">
<view class="users">
<image v-for="(item, index) in info.user_info" :key="item.uid" class="avatar" :src="item.avatar||'/static/images/f.png'"></image>
<block v-if="info.user_info.length<4">
<view v-for="item in 4-info.user_info.length" :key="item+'n'" class="avatar_no">
<u-icon name="plus" color="#fff" size="40rpx"></u-icon>
</view>
</block>
</view>
<view class="u_tips">邀请新用户消费达目标金额有机会领取红包哦~</view>
<view class="u_btn">
<image v-if="status==0" class="btn_image" @click="open" mode="widthFix" src="https://lihai001.oss-cn-chengdu.aliyuncs.com/public/uploads/new_activity/ibtn1.webp"></image>
<image v-if="status==1" class="btn_image" @click="open" mode="widthFix" src="https://lihai001.oss-cn-chengdu.aliyuncs.com/public/uploads/new_activity/ibtn2.webp"></image>
<image v-if="status==2" class="btn_image" @click="opened" mode="widthFix" src="https://lihai001.oss-cn-chengdu.aliyuncs.com/public/uploads/new_activity/ibtn3.webp"></image>
</view>
<uni-popup ref="redPacket">
<view class="red_packet">
<block v-if="status==0">
<view class="packet_img">
<image class="img" mode="widthFix" src="https://lihai001.oss-cn-chengdu.aliyuncs.com/public/uploads/new_activity/red_packet1.webp"></image>
<view class="p_text">
<view class="big">抱歉</view>
<view class="smoll">有好友消费未达目标金额</view>
<view class="smoll">无法领红包哦~</view>
</view>
</view>
<image @click="close()" class="close_img" mode="widthFix" src="https://lihai001.oss-cn-chengdu.aliyuncs.com/public/uploads/new_activity/close.png"></image>
</block>
<block v-if="status==1">
<view class="packet_img" @click="openRedPacket()">
<image class="img" mode="widthFix" src="https://lihai001.oss-cn-chengdu.aliyuncs.com/public/uploads/new_activity/red_packet2.webp"></image>
<view class="p_text">
<view class="big">恭喜</view>
<view class="smoll">成功获得实物通用红包</view>
<view class="smoll">赶快打开吧~</view>
</view>
</view>
<image @click="close()" class="close_img" mode="widthFix" src="https://lihai001.oss-cn-chengdu.aliyuncs.com/public/uploads/new_activity/close.png"></image>
</block>
<block v-if="status==2">
<view class="packet_img">
<image class="img" mode="widthFix" src="https://lihai001.oss-cn-chengdu.aliyuncs.com/public/uploads/new_activity/red_packet3.webp"></image>
<view class="p_text" style="bottom: 60rpx;">
<view class="smoll">恭喜你成功获得</view>
<view class="smoll red_count"><text class="count">{{red_packet.amount}}</text></view>
<view class="big2">购买指定商品可直接抵扣使用</view>
<view class="smoll">{{red_packet.end_time}}过期</view>
<image @click="close()" class="btn_img" mode="widthFix" src="https://lihai001.oss-cn-chengdu.aliyuncs.com/public/uploads/new_activity/put.webp"></image>
</view>
</view>
<image @click="close()" class="close_img" mode="widthFix" src="https://lihai001.oss-cn-chengdu.aliyuncs.com/public/uploads/new_activity/close.png"></image>
</block>
</view>
</uni-popup>
</view>
<view class="b_in_list">
<image class="body_head_img" mode="widthFix" src="https://lihai001.oss-cn-chengdu.aliyuncs.com/public/uploads/new_activity/irecoed.webp"></image>
<view class="b_head">
<view style="width: 120rpx;"></view>
<view class="head_title" style="width: 200rpx;">名称</view>
<view class="head_title" style="width: 130rpx;">ID</view>
<view class="head_title" style="width: 120rpx;">目标金额</view>
<view class="head_title" style="width: 120rpx;">状态</view>
</view>
<view class="b_content">
<view class="content_list" v-for="(item, index) in info.user_info" :key="item.uid">
<image class="avatar" :src="item.avatar||'/static/images/f.png'"></image>
<view class="content_item" style="width: 180rpx;margin: 0 10rpx;">{{item.nickname}}</view>
<view class="content_item" style="width: 130rpx;">{{item.uid}}</view>
<view class="content_item" style="width: 120rpx;">{{item.target_amount}}<text class="mall"></text></view>
<view class="content_item" style="width: 120rpx;">
<text v-if="item.is_finish" style="color: #18CE61;">已完成</text>
<text v-else style="color: #FA5A29;">未完成</text>
</view>
</view>
<!-- <view class="mall none">暂无记录</view> -->
</view>
</view>
</view>
</view>
</view>
</template>
<script>
import { storeActivityStatus, storeActivityReceive, storeActivityQrcode } from "@/api/activity.js"
import { Toast } from "../../../libs/uniApi";
import { getUserInfo } from '@/api/user.js';
export default {
data() {
return {
info: {
user_info: []
},
red_packet: {
amount: '0.00',
end_time: ''
},
status: 0, //0 1 2
qr_img: ''
}
},
onLoad() {},
onShow() {
this.storeActivityQrcode();
this.loadInfo();
},
methods: {
back(){
uni.navigateBack()
},
loadInfo(){
storeActivityStatus().then(res=>{
this.info = res.data;
if(res.data.allow_receive) this.status = 1;
})
},
opened(){
Toast('已经领取过啦!');
},
open(){
this.$refs.redPacket.open();
},
close(){
this.$refs.redPacket.close();
},
storeActivityQrcode(){
storeActivityQrcode().then(res=>{
this.qr_img = res.data.url;
})
},
//
async openRedPacket(){
this.$refs.redPacket.close();
try{
let {data} = await storeActivityReceive();
this.$nextTick(()=>{
this.red_packet = data;
this.$u.sleep(800).then(()=>{
this.status = 2;
this.$u.sleep(100).then(()=>{
this.open();
})
})
})
}catch(e){
Toast(e)
}
}
},
onPullDownRefresh() {
uni.stopPullDownRefresh()
}
}
</script>
<style lang="scss">
page{
background-color: #ff864d;
}
.bg{
position: relative;
height: auto;
.bg_img{
width: 750rpx;
position: absolute;
top: 0;
left: 0;
}
.bg_back{
height: 34rpx;
width: 20rpx;
position: absolute;
top: calc(var(--status-bar-height) + 30rpx);
left: 30rpx;
}
.bg_body{
position: absolute;
top: 414rpx;
left: 0;
.b_qr{
width: 710rpx;
height: 750rpx;
margin: 0 20rpx;
// background: linear-gradient(to top, #FFE3AE 0%, #FFF6EB 100%);
background: #FFF6EB;
border-radius: 50rpx;
padding: 20rpx;
.qr_body{
width: 100%;
height: 100%;
border: 5rpx solid #ffd588;
border-radius: 50rpx;
text-align: center;
display: flex;
justify-content: space-evenly;
flex-direction: column;
.qr_code{
width: 510rpx;
height: 510rpx;
// background-color: #f8962e;
margin: 0 auto;
image{
width: 100%;
height: 100%;
}
}
.qr_text{
font-size: 36rpx;
color: #C44100;
font-weight: 500;
}
.qr_tips{
font-size: 26rpx;
color: #C44100;
}
}
}
.b_user{
margin-top: 30rpx;
.users{
display: flex;
justify-content: center;
.avatar{
height: 100rpx;
width: 100rpx;
border-radius: 50%;
margin: 15rpx;
}
.avatar_no{
height: 100rpx;
width: 100rpx;
font-weight: 200;
border-radius: 50%;
border: 2rpx dashed #fff;
margin: 15rpx;
background-color: rgba(#fff, 0.3);
display: flex;
justify-content: center;
align-items: center;
}
}
.u_tips{
color: #FFE5B3;
font-size: 26rpx;
text-align: center;
}
.u_btn{
margin-top: 30rpx;
margin-bottom: 20rpx;
display: flex;
justify-content: center;
.btn_image{
width: 403rpx;
height: 113rpx;
}
}
.red_packet{
display: flex;
flex-direction: column;
align-items: center;
.packet_img{
width: 750rpx;
position: relative;
.img{
width: 100%;
}
.p_text{
position: absolute;
bottom: 120rpx;
width: 100%;
text-align: center;
color: #fff;
.big{
font-size: 38rpx;
font-weight: 500;
margin-bottom: 30rpx;
}
.smoll{
font-size: 28rpx;
margin-bottom: 20rpx;
}
.big2{
font-size: 32rpx;
font-weight: 500;
margin-bottom: 30rpx;
}
.btn_img{
width: 310rpx;
}
.red_count{
margin-top: 80rpx;
margin-bottom: 40rpx;
.count{
font-size: 80rpx;
}
}
}
}
.close_img{
width: 60rpx;
height: 60rpx;
}
}
}
.b_in_list{
width: 710rpx;
margin: 0 20rpx;
height: auto;
background-color: #fff;
border-radius: 50rpx;
padding: 20rpx;
margin-bottom: 30rpx;
display: flex;
flex-direction: column;
align-content: center;
.body_head_img{
width: 253rpx;
margin: 0 auto;
}
.b_head{
background-color: #fff2ed;
border-radius: 20rpx;
color: #854116;
display: flex;
margin-top: 28rpx;
text-align: center;
.head_title{
width: 150rpx;
padding: 20rpx 0;
font-size: 28rpx;
}
}
.b_content{
.mall{
font-size: 26rpx;
}
.content_list{
background-color: #FFF6E9;
border-radius: 20rpx;
color: #C44100;
padding-top: 20rpx;
margin-top: 20rpx;
font-size: 28rpx;
display: flex;
align-items: center;
padding-bottom: 20rpx;
text-align: center;
.content_item{
overflow: hidden;
}
.avatar{
width: 100rpx;
height: 100rpx;
border-radius: 50%;
margin-left: 16rpx;
}
}
.none{
text-align: center;
padding: 20rpx;
}
}
}
}
}
</style>

View File

@ -0,0 +1,182 @@
<template>
<view>
<view style="height: var(--status-bar-height);background-color: #e54841;"></view>
<view class="bg">
<image class="bg_img" mode="widthFix" src="https://lihai001.oss-cn-chengdu.aliyuncs.com/public/uploads/new_activity/subsidy.webp"></image>
<image @click="back" class="bg_back" src="https://lihai001.oss-cn-chengdu.aliyuncs.com/public/uploads/new_activity/back.png"></image>
<view class="bg_title">补贴记录</view>
<view class="b_title">
<view>总计获得</view> <view class="count">{{total_amount}}</view> <view>元补贴红包</view>
</view>
<view class="b_body">
<image class="body_head_img" mode="widthFix" src="https://lihai001.oss-cn-chengdu.aliyuncs.com/public/uploads/new_activity/srecord.webp"></image>
<view class="b_head">
<view class="head_title">消费金额</view>
<view class="head_title">补贴金额</view>
<view class="head_title2">红包获得时间</view>
</view>
<view class="b_content">
<view class="content_list" v-for="(item, index) in list" :key="index">
<view class="content_item">{{item.order_amount}}<text class="mall"></text></view>
<view class="content_item">{{item.coupon_price}}<text class="mall"></text></view>
<view class="content_item2"><text class="mall">{{item.create_time}}</text></view>
</view>
<view class="mall none" style="padding-top: 0;" v-if="list.length==0" @click="navTo">{{'暂无记录, 去消费领补贴 >>'}}</view>
</view>
</view>
</view>
</view>
</template>
<script>
import { storeActivityRecord } from "@/api/activity.js"
import { Toast } from "../../../libs/uniApi";
import { getUserInfo } from '@/api/user.js';
export default {
data() {
return {
total_amount: '0.00',
list: []
}
},
onLoad() {},
onShow() {
this.storeActivityRecord();
},
methods: {
back(){
uni.navigateBack()
},
storeActivityRecord(){
storeActivityRecord().then(res=>{
this.list = res.data.record;
this.total_amount = res.data.total_amount || "0.00"
})
},
navTo(){
uni.switchTab({
url:'/pages/index/index'
})
}
},
onPullDownRefresh() {
uni.stopPullDownRefresh()
}
}
</script>
<style lang="scss">
page{
background-color: #ffe3bd;
}
.bg{
position: relative;
height: auto;
.bg_img{
width: 750rpx;
position: absolute;
top: 0;
left: 0;
}
.bg_back{
height: 34rpx;
width: 20rpx;
position: absolute;
top: 30rpx;
left: 30rpx;
}
.bg_title{
font-size: 32rpx;
color: #fff;
font-weight: 500;
position: absolute;
top: 30rpx;
left: 50%;
transform: translate(-50%);
}
.b_title{
position: absolute;
width: 100%;
height: 70rpx;
top: 225rpx;
left: 0;
text-align: center;
font-size: 36rpx;
color: #F1503F;
display: flex;
justify-content: center;
align-items: flex-end;
.count{
// height: 100%;
font-size: 66rpx;
font-weight: bold;
margin: 10rpx 20rpx;
}
}
.b_body{
position: absolute;
width: 710rpx;
margin-left: 21rpx;
margin-right: 19rpx;
height: auto;
background-color: #fff;
top: 534rpx;
left: 0;
border-radius: 50rpx;
padding: 28rpx;
margin-bottom: 30rpx;
display: flex;
flex-direction: column;
align-content: center;
.body_head_img{
width: 253rpx;
margin: 0 auto;
}
.b_head{
background-color: #FFF2E0;
border-radius: 20rpx;
color: #C44100;
display: flex;
margin-top: 28rpx;
font-size: 28rpx;
padding: 20rpx 0;
.head_title{
padding-left: 20rpx;
width: 190rpx;
}
.head_title2{
padding-left: 20rpx;
width: 280rpx;
}
}
.b_content{
background-color: #fff2ed;
border-radius: 20rpx;
color: #FF5A3A;
padding-top: 20rpx;
margin-top: 28rpx;
font-size: 32rpx;
.mall{
font-size: 26rpx;
}
.content_list{
display: flex;
padding-bottom: 20rpx;
.content_item{
padding-left: 20rpx;
width: 190rpx;
}
.content_item2{
padding-left: 20rpx;
width: 280rpx;
}
}
.none{
text-align: center;
padding: 20rpx;
}
}
}
}
</style>

View File

@ -0,0 +1,183 @@
<template>
<view>
<view class="bg">
<image class="bg_img" mode="widthFix" src="https://lihai001.oss-cn-chengdu.aliyuncs.com/public/uploads/new_activity/subsidy.webp"></image>
<image @click="back" class="bg_back" src="https://lihai001.oss-cn-chengdu.aliyuncs.com/public/uploads/new_activity/back.png"></image>
<view class="bg_title">无门槛实物通用红包</view>
<view class="b_title">
<view>总计剩余</view> <view class="count">{{total_amount}}</view> <view>元通用红包</view>
</view>
<view class="b_body">
<image class="body_head_img" mode="widthFix" src="https://lihai001.oss-cn-chengdu.aliyuncs.com/public/uploads/new_activity/srecord.webp"></image>
<view class="b_head">
<view class="head_title">消费金额</view>
<view class="head_title">补贴金额</view>
<view class="head_title2">红包获得时间</view>
</view>
<view class="b_content">
<view class="content_list" v-for="(item, index) in list" :key="index">
<view class="content_item">{{item.order_amount}}<text class="mall"></text></view>
<view class="content_item">{{item.coupon_price}}<text class="mall"></text></view>
<view class="content_item2"><text class="mall">{{item.create_time}}</text></view>
</view>
<view class="mall none" style="padding-top: 0;" v-if="list.length==0" @click="navTo">{{'暂无记录, 去消费领补贴 >>'}}</view>
</view>
</view>
</view>
</view>
</template>
<script>
import { storeActivityRecord } from "@/api/activity.js"
import { Toast } from "../../../libs/uniApi";
import { getUserInfo } from '@/api/user.js';
export default {
data() {
return {
total_amount: '0.00',
list: []
}
},
onLoad() {},
onShow() {
this.storeActivityRecord();
},
methods: {
back(){
uni.navigateBack()
},
storeActivityRecord(){
storeActivityRecord({
type: 1
}).then(res=>{
this.list = res.data.record;
this.total_amount = res.data.total_amount || "0.00"
})
},
navTo(){
uni.switchTab({
url:'/pages/index/index'
})
}
},
onPullDownRefresh() {
uni.stopPullDownRefresh()
}
}
</script>
<style lang="scss">
page{
background-color: #ffe3bd;
}
.bg{
position: relative;
height: auto;
.bg_img{
width: 750rpx;
position: absolute;
top: 0;
left: 0;
}
.bg_back{
height: 34rpx;
width: 20rpx;
position: absolute;
top: calc(var(--status-bar-height) + 30rpx);
left: 30rpx;
}
.bg_title{
font-size: 32rpx;
color: #fff;
font-weight: 500;
position: absolute;
top: calc(var(--status-bar-height) + 30rpx);
left: 50%;
transform: translate(-50%);
}
.b_title{
position: absolute;
width: 100%;
height: 70rpx;
top: 225rpx;
left: 0;
text-align: center;
font-size: 36rpx;
color: #F1503F;
display: flex;
justify-content: center;
align-items: flex-end;
.count{
// height: 100%;
font-size: 66rpx;
font-weight: bold;
margin: 10rpx 20rpx;
}
}
.b_body{
position: absolute;
width: 710rpx;
margin-left: 21rpx;
margin-right: 19rpx;
height: auto;
background-color: #fff;
top: 534rpx;
left: 0;
border-radius: 50rpx;
padding: 28rpx;
margin-bottom: 30rpx;
display: flex;
flex-direction: column;
align-content: center;
.body_head_img{
width: 253rpx;
margin: 0 auto;
}
.b_head{
background-color: #FFF2E0;
border-radius: 20rpx;
color: #C44100;
display: flex;
margin-top: 28rpx;
font-size: 28rpx;
padding: 20rpx 0;
.head_title{
padding-left: 20rpx;
width: 190rpx;
}
.head_title2{
padding-left: 20rpx;
width: 280rpx;
}
}
.b_content{
background-color: #fff2ed;
border-radius: 20rpx;
color: #FF5A3A;
padding-top: 20rpx;
margin-top: 28rpx;
font-size: 32rpx;
.mall{
font-size: 26rpx;
}
.content_list{
display: flex;
padding-bottom: 20rpx;
.content_item{
padding-left: 20rpx;
width: 190rpx;
}
.content_item2{
padding-left: 20rpx;
width: 280rpx;
}
}
.none{
text-align: center;
padding: 20rpx;
}
}
}
}
</style>

View File

@ -0,0 +1,183 @@
<template>
<view>
<view class="bg">
<image class="bg_img" mode="widthFix" src="https://lihai001.oss-cn-chengdu.aliyuncs.com/public/uploads/new_activity/subsidy.webp"></image>
<image @click="back" class="bg_back" src="https://lihai001.oss-cn-chengdu.aliyuncs.com/public/uploads/new_activity/back.png"></image>
<view class="bg_title">现金抵扣红包</view>
<view class="b_title">
<view>总计剩余</view> <view class="count">{{total_amount}}</view> <view>元抵扣红包</view>
</view>
<view class="b_body">
<image class="body_head_img" mode="widthFix" src="https://lihai001.oss-cn-chengdu.aliyuncs.com/public/uploads/new_activity/srecord.webp"></image>
<view class="b_head">
<view class="head_title">消费金额</view>
<view class="head_title">补贴金额</view>
<view class="head_title2">红包获得时间</view>
</view>
<view class="b_content">
<view class="content_list" v-for="(item, index) in list" :key="index">
<view class="content_item">{{item.order_amount}}<text class="mall"></text></view>
<view class="content_item">{{item.coupon_price}}<text class="mall"></text></view>
<view class="content_item2"><text class="mall">{{item.create_time}}</text></view>
</view>
<view class="mall none" style="padding-top: 0;" v-if="list.length==0" @click="navTo">{{'暂无记录, 去消费领补贴 >>'}}</view>
</view>
</view>
</view>
</view>
</template>
<script>
import { storeActivityRecord } from "@/api/activity.js"
import { Toast } from "../../../libs/uniApi";
import { getUserInfo } from '@/api/user.js';
export default {
data() {
return {
total_amount: '0.00',
list: []
}
},
onLoad() {},
onShow() {
this.storeActivityRecord();
},
methods: {
back(){
uni.navigateBack()
},
storeActivityRecord(){
storeActivityRecord({
type: 2
}).then(res=>{
this.list = res.data.record;
this.total_amount = res.data.total_amount || "0.00"
})
},
navTo(){
uni.switchTab({
url:'/pages/index/index'
})
}
},
onPullDownRefresh() {
uni.stopPullDownRefresh()
}
}
</script>
<style lang="scss">
page{
background-color: #ffe3bd;
}
.bg{
position: relative;
height: auto;
.bg_img{
width: 750rpx;
position: absolute;
top: 0;
left: 0;
}
.bg_back{
height: 34rpx;
width: 20rpx;
position: absolute;
top: calc(var(--status-bar-height) + 30rpx);
left: 30rpx;
}
.bg_title{
font-size: 32rpx;
color: #fff;
font-weight: 500;
position: absolute;
top: calc(var(--status-bar-height) + 30rpx);
left: 50%;
transform: translate(-50%);
}
.b_title{
position: absolute;
width: 100%;
height: 70rpx;
top: 225rpx;
left: 0;
text-align: center;
font-size: 36rpx;
color: #F1503F;
display: flex;
justify-content: center;
align-items: flex-end;
.count{
// height: 100%;
font-size: 66rpx;
font-weight: bold;
margin: 10rpx 20rpx;
}
}
.b_body{
position: absolute;
width: 710rpx;
margin-left: 21rpx;
margin-right: 19rpx;
height: auto;
background-color: #fff;
top: 534rpx;
left: 0;
border-radius: 50rpx;
padding: 28rpx;
margin-bottom: 30rpx;
display: flex;
flex-direction: column;
align-content: center;
.body_head_img{
width: 253rpx;
margin: 0 auto;
}
.b_head{
background-color: #FFF2E0;
border-radius: 20rpx;
color: #C44100;
display: flex;
margin-top: 28rpx;
font-size: 28rpx;
padding: 20rpx 0;
.head_title{
padding-left: 20rpx;
width: 190rpx;
}
.head_title2{
padding-left: 20rpx;
width: 280rpx;
}
}
.b_content{
background-color: #fff2ed;
border-radius: 20rpx;
color: #FF5A3A;
padding-top: 20rpx;
margin-top: 28rpx;
font-size: 32rpx;
.mall{
font-size: 26rpx;
}
.content_list{
display: flex;
padding-bottom: 20rpx;
.content_item{
padding-left: 20rpx;
width: 190rpx;
}
.content_item2{
padding-left: 20rpx;
width: 280rpx;
}
}
.none{
text-align: center;
padding: 20rpx;
}
}
}
}
</style>

View File

@ -0,0 +1,336 @@
<template>
<view>
<view class="bg">
<image class="bg_img" mode="widthFix"
src="https://lihai001.oss-cn-chengdu.aliyuncs.com/public/uploads/new_activity/tow_price_bg.webp"></image>
<image @click="back" class="bg_back"
src="https://lihai001.oss-cn-chengdu.aliyuncs.com/public/uploads/new_activity/back.png"></image>
<view class="b_body">
<view class="b_content">
<view style="padding-bottom: 16rpx;">
<picker :range="addressList" range-key="street_name" @change="changeAddress">
<block v-if="address.street_id">
当前活动区域为 <text style="color: #f84221;margin-left: 5rpx;">[ {{address.townName}} ] , 点击切换</text>
</block>
<block v-else>
<text style="color: #f84221;margin-left: 5rpx;">当前区域 [ {{address.townName}} ] 没有活动 , 点击切换</text>
</block>
</picker>
</view>
<block v-if="goodsList.length>0">
<view v-if="item.product" v-for="(item, index) in goodsList" class="short_item" @click="clickProduct(item)">
<image class="image" :src="item.product.image"></image>
<view class="short_item_right">
<view class="r_name">
<text v-if="item.mer_labels_name" class="mer-labels">{{item.mer_labels_name}}</text>{{item.product.store_name}}
</view>
<view style="display: flex;justify-content: flex-start;margin-top: 5rpx;">
<view class="r_street" v-if="item.merchant">{{item.merchant.street_name}}</view>
<view class="r_type" v-if="item.product.store_info||getSkuName(item)||item.unit_name">
<view v-if="getSkuName(item)">{{getSkuName(item)}}</view>
<view v-else-if="item.unit_name">{{item.unit_name}}</view>
</view>
</view>
<view class="r_btn" v-if="item.product && item.product.price">
<view style="color: #7f7f7f;"><text style="font-size: 33rpx;">{{ item.product.price.split('.')[0] }}.</text>{{item.product.price.split('.')[1]}} 限时特惠</view>
<view class="qiang" :class="{'no_qiang': !can_buy}">{{item.limited_price}} </view>
<!-- <image src="@/static/images/icon/plus.png" style="width: 40rpx;height: 40rpx;border-radius: 40rpx;"></image> -->
</view>
</view>
</view>
</block>
<block v-else>
<image style="width: 100%;" mode="widthFix" src="/static/img/no_short.f2ffcd1c.png"></image>
<view style="text-align: center;color: #999;">此区域没有找到活动商品切换其他地方试试呢</view>
</block>
</view>
</view>
</view>
<shortPopupActive ref="shortPopupRef" @addCart="loadCart" :source="105" isBuy></shortPopupActive>
<u-modal :show="show" :closeOnClickOverlay="true" :title="`[${activity.title}]`"
content="选择活动后只有完成活动任务后才可参加另一个活动, 确定要参与这个活动吗" cancelText="我再想想" confirmText="参加活动" confirmColor="#e54841"
@cancel="show = false" @confirm="joinA()" showCancelButton></u-modal>
<authorize @onLoadFun="onLoadFun" :isAuto="isAuto" :isShowAuth="isShowAuth" @authColse="authColse"
:isGoIndex="false"></authorize>
</view>
</template>
<script>
import { getArticleList } from "@/api/api.js"
import { Toast } from "../../../libs/uniApi";
import authorize from "@/components/Authorize.vue";
import { getUserInfo } from '@/api/user.js';
import shortPopupActive from "@/components/shortPopupActive.vue"
import { storeActivityProduct, storeActivityDistrict } from "@/api/activity.js"
import {
cloudWarehouse
} from '@/api/requesta.js'
import {
getCartCounts,
getCartList,
} from '@/api/requesta.js';
export default {
components: {
authorize,
shortPopupActive
},
data() {
return {
info: {},
userInfo: {},
Alist: [],
activity: {
title: ''
},
address: {
townName: '',
street_id: ''
},
show: false,
isAuto: false, //
isShowAuth: false, //
addressList: [],
goodsList: [],
goodsNum: 0,
can_buy: 0, // , 0, 1
}
},
onLoad(options) {
this.address = {
street_id: options.street_id,
townName: options.townName
}
},
onShow() {
this.getUserInfo();
this.loadList();
this.cartFn();
this.loadAddressList();
},
methods: {
changeAddress(e){
this.address = {
street_id: this.addressList[e.detail.value].street_code,
townName: this.addressList[e.detail.value].street_name
}
this.loadList();
},
back() {
uni.navigateBack()
},
getUserInfo() {
getUserInfo().then(res => {
this.userInfo = res.data;
}).catch(err => {
console.log(err);
})
},
loadList(){
let location = '';
if(this.$store.state.storage.location.lat) location = this.$store.state.storage.location.lat + ',' + this.$store.state.storage.location.long;
storeActivityProduct({
street_code: this.address.street_id,
activity_id: 2, //2
location: location,
source: 105
}).then(res => {
this.can_buy = res.data.can_buy;
this.goodsList = res.data.list;
}).catch(e=>{
Toast(e.msg||e.message||e)
})
},
loadAddressList(){
storeActivityDistrict().then(res=>{
this.addressList = res.data;
if(!this.addressList.find(item=>item.street_code==this.address.street_id)){
this.address.street_id = ''
}
})
},
//
getSkuName(item){
return Object.keys(item.sku).join('/')||null;
},
//
clickProduct(data){
if(!this.address.townName) return Toast('请先选择活动区域')
if(!this.can_buy){
return Toast('活动限购一件, 您已经买过了哦~')
}
this.$refs.shortPopupRef.setDatas(data, this.goodsNum);
this.$refs.shortPopupRef.open();
},
//
loadCart(){
this.cartFn();
},
//
cartFn() {
getCartCounts({
source: 105,
// product_type: 98
}).then(res => {
this.goodsNum = res.data[0].count
})
},
//
onLoadFun(data) {
this.getUserInfo();
this.isShowAuth = false;
},
//
openAuto() {
// console.log('hajhcdsohjcosvjco')
this.isAuto = true;
this.isShowAuth = true
},
//
authColse: function(e) {
this.isShowAuth = e
},
},
onPullDownRefresh() {
uni.stopPullDownRefresh()
}
}
</script>
<style lang="scss">
page {
background-color: #fff5dd;
}
.bg {
position: relative;
padding-bottom: 30rpx;
.bg_img {
width: 750rpx;
height: 652rpx;
position: absolute;
top: 0;
left: 0;
}
.bg_back {
height: 34rpx;
width: 20rpx;
position: absolute;
top: calc(var(--status-bar-height) + 30rpx);
left: 30rpx;
}
.b_body {
width: 710rpx;
margin-left: 21rpx;
margin-right: 19rpx;
height: auto;
background-color: #fff;
border-radius: 0 0 60rpx 60rpx;
padding: 28rpx;
padding-top: 680rpx;
margin-bottom: 30rpx;
.b_content {
width: 100%;
// height: 800rpx;
// background-color: #eee;
.short_item {
// padding: 20rpx;
padding-bottom: 30rpx;
display: flex;
justify-content: space-between;
.image {
height: 200rpx;
width: 200rpx;
border-radius: 21.03rpx 21.03rpx 21.03rpx 21.03rpx;
margin-right: 20rpx;
flex-shrink: 0;
}
.short_item_right {
width: 430rpx;
display: flex;
flex-direction: column;
justify-content: space-between;
.r_name {
width: 100%;
height: 80rpx;
font-size: 28rpx;
line-height: 40rpx;
text-overflow: ellipsis;
display: -webkit-box; /* 使用弹性盒子布局 */
-webkit-box-orient: vertical; /* 设置为垂直方向布局 */
overflow: hidden; /* 隐藏超出部分 */
-webkit-line-clamp: 2; /* 限制显示两行文本 */
.mer-labels{
background-color: #f84221;
color: #fff;
font-size: 18rpx;
padding: 4rpx 8rpx;
border-radius: 5rpx;
margin-right: 8rpx;
}
}
.r_type {
font-size: 22.78rpx;
color: #737373;
flex: 1;
overflow: hidden;
display: flex;
view {
height: 39rpx;
line-height: 39rpx;
background: #FEF5F3;
padding: 0 16rpx;
border-radius: 39rpx;
text-overflow: ellipsis;
}
}
.r_btn {
display: flex;
justify-content: space-between;
font-size: 22.78rpx;
color: #F84221;
align-items: center;
background-color: rgba(#F84221, 0.1);
padding-left: 15rpx;
border-radius: 0 60rpx 60rpx 0;
.qiang{
width: 160rpx;
height: 60rpx;
display: flex;
justify-content: center;
align-items: center;
background-color: #F84221;
color: #fff;
border-radius: 60rpx;
font-weight: bold;
font-size: 28rpx;
}
.no_qiang{
background-color: #7f7f7f;
}
}
.r_street{
font-size: 24rpx;
height: 39rpx;
line-height: 39rpx;
color: #7f7f7f;
padding-right: 10rpx;
}
}
}
}
}
}
</style>

View File

@ -1,176 +1,174 @@
<template>
<view class="">
<view class="">
<view class="">
<view v-if="showtit">
<view :class="{'head':true,'show':showtit}" style="padding-top: var(--status-bar-height);">
<view style="display: flex;align-items: center;">
<view :class="{ head: true, show: showtit }" style="padding-top: var(--status-bar-height)">
<view style="display: flex; align-items: center">
<!-- <u--image :showLoading="true" v-if="cloudList.length>0" src="/static/images/LHYC/FH.png"
width="50.82rpx" height="50.82rpx" @click='goBack'></u--image>
<u--image v-else :showLoading="true" src="/static/images/LHYC/PFH.png" width="50.82rpx"
height="50.82rpx" @click='goBack'></u--image> -->
<i class="iconfont icon-xiangzuo" v-if="cloudList.length>0"
style="font-size: 40rpx;text-align: left;" @click='goBack'></i>
<i class="iconfont icon-xiangzuo" v-else style="font-size: 40rpx;text-align: left;"
@click='goBack'></i>
<i class="iconfont icon-xiangzuo" v-if="cloudList.length > 0" style="font-size: 40rpx; text-align: left"
@click="goBack"></i>
<i class="iconfont icon-xiangzuo" v-else style="font-size: 40rpx; text-align: left" @click="goBack"></i>
<view class="head_tit" v-if="cloudList.length"
style="font-size: 40rpx;transform: skewX(-10deg);font-weight: bold;"
:style="{color:cloudList.length>0?'':'black'}">
{{town}}里海云仓
<view class="head_tit" v-if="cloudList.length" style="
font-size: 40rpx;
transform: skewX(-10deg);
font-weight: bold;
" :style="{ color: cloudList.length > 0 ? '' : 'black' }">
{{ town }}里海云仓
</view>
</view>
<view class="" style="display: flex;align-items: center;">
<view class="head_r" @click="showPop=true" v-if="cloudList.length>0">
<u--image v-if="cloudList.length>0" :showLoading="true" src="/static/images/LHYC/QB.png"
<view class="" style="display: flex; align-items: center">
<view class="head_r" @click="showPop = true" v-if="cloudList.length > 0">
<u--image v-if="cloudList.length > 0" :showLoading="true" src="/static/images/LHYC/QB.png"
width="50.82rpx" height="50.82rpx"></u--image>
<u--image v-else :showLoading="true" src="/static/images/LHYC/QB1.png" width="50.82rpx"
height="50.82rpx"></u--image>
</view>
</view>
</view>
</view>
<!-- 滚动 -->
<view :class="{'heads':true,'show':!showtit}" style="padding-top: var(--status-bar-height);">
<view style="align-items: center;display: flex;justify-content: space-between;">
<view class="" style="display: flex;align-items: center;">
<view class="back" style="margin-right: 17rpx;">
<view :class="{ heads: true, show: !showtit }" style="padding-top: var(--status-bar-height)">
<view style="
align-items: center;
display: flex;
justify-content: space-between;
">
<view class="" style="display: flex; align-items: center">
<view class="back" style="margin-right: 17rpx">
<!-- <u--image :showLoading="true" src="/static/images/LHYC/FH.png" width="50.82rpx"
height="50.82rpx" @click='goBack'></u--image> -->
<i class="iconfont icon-xiangzuo" style="font-size: 40rpx;text-align: left;"
@click='goBack'></i>
<i class="iconfont icon-xiangzuo" style="font-size: 40rpx; text-align: left" @click="goBack"></i>
</view>
<!-- <view class="" style="font-size: 40rpx;transform: skewX(-10deg);font-weight: 700;">
{town}}
</view> -->
<view class="head_tit" v-if="cloudList.length"
style="font-size: 40rpx;transform: skewX(-10deg);font-weight: bold;"
:style="{color:cloudList.length>0?'':'black'}">
{{town}}里海云仓
<view class="head_tit" v-if="cloudList.length" style="
font-size: 40rpx;
transform: skewX(-10deg);
font-weight: bold;
" :style="{ color: cloudList.length > 0 ? '' : 'black' }">
{{ town }}里海云仓
</view>
</view>
<view style="position: relative;width: 289.14rpx;">
<u-search borderColor="#FF6D20" bgColor="white" :showAction="false" placeholder="请输入..."
v-model="keyword" class="serch_cls"></u-search>
<view style="position: relative; width: 289.14rpx">
<u-search borderColor="#FF6D20" bgColor="white" :showAction="false" placeholder="请输入..." v-model="keyword"
class="serch_cls"></u-search>
<!-- <u--image class="img_cls" :showLoading="true" src="/static/images/GXSC/SSBT.png"
width="115.65rpx" height="56.82rpx" @click="serch"></u--image> -->
<view class="serchbtn img_cls" @click="serch">搜索</view>
</view>
<view class='head_r' @click="showPop=true">
<view class="head_r" @click="showPop = true">
<u--image :showLoading="true" src="/static/images/LHYC/QB.png" width="50.82rpx"
height="50.82rpx"></u--image>
<text class="" style="height: 5px;"></text>
<view class="flags">
</view>
<text class="" style="height: 5px"></text>
<view class="flags"> </view>
</view>
</view>
</view>
<view class="box" v-if="cloudList.length>0">
<view class="box" v-if="cloudList.length > 0">
<view :class="act_swiper">
<swiper :autoplay="false" :active-class="activeClass" :interval="3000" class="swipers"
:circular="true" previous-margin='0rpx' next-margin='0rpx' :current="current"
:disable-touch="true">
<swiper-item v-for="(item,index) in cloudList">
<swiper :autoplay="false" :active-class="activeClass" :interval="3000" class="swipers" :circular="true"
previous-margin="0rpx" next-margin="0rpx" :current="current" :disable-touch="true">
<swiper-item v-for="(item, index) in cloudList">
<u--image :showLoading="true" :src="item.cover" :class="act_img" width="750rpx"
height="718.46rpx"></u--image>
</swiper-item>
</swiper>
</view>
<view class="" style="height:989.46rpx;" v-if="act_swiper">
<view class="" style="height: 718.46rpx" v-if="act_swiper"> </view>
</view>
<view class="menu" v-if="showtit" style="transition: 1s;">
<swiper :autoplay="false" :active-class="activeClass" :interval="3000" class="swiper"
:circular="true" previous-margin='280rpx' next-margin='280rpx' :current="current"
@change="test">
<swiper-item v-for="(item,index) in cloudList" :key="index" @click="clickSwiperFn(index)">
<view class="swiper_item" :class="{'swiper_item_act':index==current, 'swiper_item_act2':index==current-1||index==current+1}">
<u--image :showLoading="true" :src="item.background" class="swiper_b"
width="140.19rpx" height="140.19rpx"></u--image>
<view class="menu" v-if="showtit" style="transition: 1s">
<swiper :autoplay="false" :active-class="activeClass" :interval="3000" class="swiper" :circular="true"
previous-margin="280rpx" next-margin="280rpx" :current="current" @change="test">
<swiper-item v-for="(item, index) in cloudList" :key="index" @click="clickSwiperFn(index)">
<view class="swiper_item" :class="{
swiper_item_act: index == current,
swiper_item_act2:
index == current - 1 || index == current + 1,
}">
<u--image :showLoading="true" :src="item.background" class="swiper_b" width="140.19rpx"
height="140.19rpx"></u--image>
</view>
</swiper-item>
</swiper>
</view>
<!-- 商品列表 -->
<view class="content">
<view class="content_sift" :style="{position:pocls,top:(headtop)+'px'}" v-if="!showtit">
<view :class="{act:item.act,price_sift:true}" v-for="item,index in actList" :key="index"
@click="screenGoods(item.screen,index)">
{{item.tit}}
<view class="" v-if="index==2" style="margin-left: 10rpx;">
<u-icon name="arrow-up" :color="item.price&&item.act?'#FF6D20':'black'"
size="10"></u-icon>
<u-icon name="arrow-down" :color="!item.price&&item.act?'#FF6D20':'black'"
size="10"></u-icon>
<view class="content_sift" :style="{ position: pocls, top: headtop + 'px' }" v-if="!showtit">
<view :class="{ act: item.act, price_sift: true }" v-for="(item, index) in actList" :key="index"
@click="screenGoods(item.screen, index)">
{{ item.tit }}
<view class="" v-if="index == 2" style="margin-left: 10rpx">
<u-icon name="arrow-up" :color="item.price && item.act ? '#FF6D20' : 'black'" size="10"></u-icon>
<u-icon name="arrow-down" :color="!item.price && item.act ? '#FF6D20' : 'black'" size="10"></u-icon>
</view>
</view>
</view>
<view class="goods_list" v-if="goodsList.length>0">
<view class="empty" v-if='showLoading'>
<u-loading-icon v-if='showLoading' text="加载中" textSize="18"></u-loading-icon>
<view class="goods_list" v-if="goodsList.length > 0">
<view class="empty" v-if="showLoading">
<u-loading-icon v-if="showLoading" text="加载中" textSize="18"></u-loading-icon>
</view>
<view class="goods" @click="goodDetail(item)" v-else v-for="item,index in goodsList">
<view class="goods" @click="goodDetail(item)" v-else v-for="(item, index) in goodsList">
<view class="left">
<u--image :showLoading="true" :src="item.image" width="192.76rpx"
height="192.76rpx"></u--image>
<!-- <u--image :showLoading="true" :src="item.image" width="192.76rpx" height="192.76rpx"></u--image> -->
<image lazy-load style="height: 192.76rpx;width: 192.76rpx;" :src="item.image"></image>
</view>
<view class="right">
<view class="tit">
<!-- 亿福馒头粉纯天然无添加小麦粉加工 1000g/ -->
{{item.store_info}}
{{ item.store_name || item.store_info }}
</view>
<view class="">
<view class="good_score">
<text style="margin-right: 10rpx;color: #F84221;">{{item.rate}}</text>
<text>{{item.reply_count}}评论</text>
<text style="margin-right: 10rpx; color: #f84221">{{
item.rate
}}</text>
<text>{{ item.reply_count }}评论</text>
<text v-if="item.merchant.distance" style="margin-left: 10rpx;">{{item.merchant.distance}}</text>
</view>
<view class="good_price">
<view class="good_price_l">
<view class=""
style="color: #F84221;font-size: 22.78rpx;font-weight: bold;">
<text style="font-size: 30rpx;">{{item.price}}</text>
</view>
<view class="old_price">
30.00
<view class="" style="
color: #f84221;
font-size: 22.78rpx;
font-weight: bold;
">
<text style="font-size: 30rpx">{{
item.price
}}</text>
</view>
<!-- <view class="old_price"> 30.00 </view> -->
</view>
<view class="good_price_r">
<view :class="{x_tra:trnList[index].bottom }"
:style="`transform:translateY(${trnList[index].bottom}px);transition:${trnList[index].bottom?1:0}s cubic-bezier(0.4, -0.9, 0.75, 1);`"
@click.stop="addcart(item,index)">
<u--image :class="'act_class'+index"
:style="`transform:translateX(${trnList[index].left}px);transition:${trnList[index].bottom?1:0}s `"
src="/static/images/LHYC/J.png" width="49.07rpx"
height="49.07rpx"></u--image>
</view>
</view>
<view :class="{ x_tra: trnList[index]?trnList[index].bottom:0 }" :style="`transform:translateY(${
trnList[index]?trnList[index].bottom:0
}px);transition:${
trnList[index]?trnList[index].bottom:0 ? 1 : 0
}s cubic-bezier(0.4, -0.9, 0.75, 1);`" @click.stop="addcart(item, index)">
<u--image :class="'act_class' + index" :style="`transform:translateX(${
trnList[index]?trnList[index].left:0
}px);transition:${trnList[index]?trnList[index].bottom:0 ? 1 : 0}s `"
src="/static/images/LHYC/J.png" width="49.07rpx" height="49.07rpx"></u--image>
</view>
</view>
</view>
</view>
<view style="height: 100rpx;">
</view>
</view>
<view style="height: 180rpx">
<u-loadmore :status="status" />
</view>
</view>
@ -180,108 +178,82 @@
<view class="info">
<u--image :showLoading="true" src="/static/images/noCart.png" width="400.09rpx"
height="400.09rpx"></u--image>
<view class="" style="text-align: center;color:#999">
<view class="" style="text-align: center; color: #999">
暂无商品
</view>
</view>
</view>
</view>
<!-- 购物车 -->
<view class="card" :style="`bottom:${appInfo.bottom}px`"
@click="navgo('/pages/order_addcart/order_addcart')">
<view class="card" :style="`bottom:${appInfo.bottom+10}px`"
@click="navgo('/pages/order_addcart/order_addcart?product_type=98&source='+source)">
<view class="left">
<view class="cart" :class="{act_cart:act_cart}"
style="position: relative;z-index: 9999999;">
<view class="cart" :class="{ act_cart: act_cart }" style="position: relative; z-index: 9999999">
<u--image :showLoading="true" src="/static/images/LHYC/GWC.png" width="63.09rpx"
height="63.09rpx"></u--image>
<view class="badge" v-show="goodsNum">
{{goodsNum}}
{{ goodsNum }}
</view>
</view>
<view class="tot_price">
<view class="">
{{totalMoney}}
</view>
<view class="">
支持配送 售后无忧
<view class=""> {{ totalMoney }} </view>
<view class=""> 支持配送 售后无忧 </view>
</view>
</view>
</view>
<view class="right">
去结算
<view class="right"> 去结算 </view>
</view>
</view>
</view>
</view>
</view>
<!-- 组件 -->
<view class="" v-if="showPop">
<u-popup mode="right" :show="showPop" @close="showPop=false" @open="showPop=true">
<u-popup mode="right" :show="showPop" @close="showPop = false" @open="showPop = true">
<view class="pop">
<view style="height: var(--status-bar-height);"></view>
<view class="pop_head" style="display: flex;">
<u--image :showLoading="true" src="/static/images/LHYC/PFH.png" width="50.82rpx"
height="50.82rpx" @click='showPop=false'></u--image>
<view class="head_tit">
里海云仓
</view>
<view style="height: var(--status-bar-height)"></view>
<view class="pop_head" style="display: flex">
<u--image :showLoading="true" src="/static/images/LHYC/PFH.png" width="50.82rpx" height="50.82rpx"
@click="showPop = false"></u--image>
<view class="head_tit"> 里海云仓 </view>
</view>
<view class="pop_content" v-if="cloudList.length">
<view class="pop_li" @click="all(index)" v-for="item,index in cloudList" :key="index">
<u--image :showLoading="true" :src="item.background" width="84.11rpx"
height="84.11rpx"></u--image>
<view class="" style="margin-left: 20rpx;">
<view style="font-size: 33.29rpx;color: black;">
{{item.category_name}}云仓服务
<view class="pop_li" @click="all(index)" v-for="(item, index) in cloudList" :key="index">
<u--image :showLoading="true" :src="item.background" width="84.11rpx" height="84.11rpx"></u--image>
<view class="" style="margin-left: 20rpx">
<view style="font-size: 33.29rpx; color: black">
{{ item.category_name }}云仓服务
</view>
<view class="" style="font-size: 22.78rpx;">
{{item.description}}
<view class="" style="font-size: 22.78rpx">
{{ item.description }}
</view>
</view>
</view>
</view>
<view v-else>
<!-- <u--image :showLoading="true" src="/static/images/LHYC/PFH.png" width="50.82rpx" height="50.82rpx"
@click='goBack'></u--image>
</view> -->
<view class="yuncangempty">
<u--image :showLoading="true" src="/static/images/noCart.png" width="400.09rpx"
height="400.09rpx"></u--image>
<view class="" style="text-align: center;color:#999">
<view class="" style="text-align: center; color: #999">
当前区域暂无云仓
</view>
</view>
</view>
</view>
</u-popup>
</view>
</view>
</view>
<view class="empty" style="" v-if="cloudList.length<=0">
<view style="height: var(--status-bar-height);"></view>
<view style="padding: 10rpx;">
<view class="empty" style="" v-if="cloudList.length <= 0">
<view style="height: var(--status-bar-height)"></view>
<view style="padding: 10rpx">
<view class="info">
<u--image :showLoading="true" src="/static/images/noCart.png" width="400.09rpx"
height="400.09rpx"></u--image>
<view class="" style="text-align: center;color:#999">
<u--image :showLoading="true" src="/static/images/noCart.png" width="400.09rpx" height="400.09rpx"></u--image>
<view class="" style="text-align: center; color: #999">
当前区域暂无云仓
</view>
</view>
@ -289,18 +261,10 @@
<!-- 多规格购物车 -->
<authorize @onLoadFun="onLoadFun" :isAuto="isAuto" :isShowAuth="isShowAuth" @authColse="authColse">
</authorize>
<view class="" :style="`height:${appInfo.bottom}px;`">
<view class="" :style="`height:${appInfo.bottom+10}px;`"> </view>
</view>
</view>
<view class="">
<u-picker :defaultIndex="defaInd" :show="showPicker" ref="uPicker" :columns="columnData" @confirm="confirm"
@ -311,52 +275,38 @@
<view class="sku">
<view class="sku_head">
<view class="sku_head_l">
<u--image :showLoading="true" :src="skuform.image" width="200.09rpx"
height="200.09rpx"></u--image>
<u--image :showLoading="true" :src="skuform.image" width="200.09rpx" height="200.09rpx"></u--image>
</view>
<view class="sku_head_r">
<view class="sku_goods_tit">
{{skuform.store_info}}
{{ skuform.store_info }}
</view>
<view class="">
<view class="sku_goods_price">
{{skuform.price}}
</view>
<view class="sku_goods_price"> {{ skuform.price }} </view>
<view class="sku_goods_num" v-if="this.skusize">
库存:{{skuform.sku[this.skusize].stock}}
库存:{{ skuform.sku[this.skusize].stock }}
</view>
</view>
</view>
</view>
<view class="sku_size">
<view class="" style="margin-bottom: 10rpx;">
尺码
</view>
<view class="" style="margin-bottom: 10rpx"> 尺码 </view>
<view class="">
<text class="size_li" :class="{act_size_li:item.sku==skusize}"
v-for="(item,index) in skuform.sku" @click="skusizechange(item.sku)">{{item.sku}}</text>
<text class="size_li" :class="{ act_size_li: item.sku == skusize }" v-for="(item, index) in skuform.sku"
@click="skusizechange(item.sku)">{{ item.sku }}</text>
</view>
</view>
<view class="sku_num">
<view class="">
数量
</view>
<view class=""> 数量 </view>
<view class="">
<u-number-box v-model="skuNumber" @change="valChange"></u-number-box>
</view>
</view>
<view class="skuaddcart" @click="skuaddcart">
确定
</view>
<view class="skuaddcart" @click="skuaddcart"> 确定 </view>
</view>
</u-popup>
</view>
</view>
</template>
<script>
@ -407,6 +357,8 @@
let src = 'https://lihai001.oss-cn-chengdu.aliyuncs.com/public/kk/luzhou/static4/13';
return {
skuform: {},
location: null,
source: null,
defaInd: [0, 0],
showPicker: false,
columnData: [],
@ -469,6 +421,8 @@
// ...mapGetters(['isLogin', 'viewColor', 'uid']),
onLoad(e) {
// this.cartFn()
this.location = e.location;
this.source = e.source;
this.appInfo = this.$appInfo.safeAreaInsets
this.winHeight = this.$appInfo.windowHeight
this.street_code = e.street
@ -492,10 +446,9 @@
.boundingClientRect(rect => {
// console.log(this.cartTagInfo, 6666)
that.cartTagInfo = rect
// console.log(rect)
})
.exec();
console.log(that.headtop)
}, 500)
// console.log(this.appInfo, "")
@ -509,25 +462,25 @@
if (this.flag || !this.goodsList.length) return
this.status = "loading"
this.page_num += 1
this.flag = true
// this.flag = true
cloudWarehouse({
street_code: this.street_code,
category_id: this.cloudList[this.current]?.category_id || "",
order: this.type,
keyword: this.keyword,
page_num: this.page_num
page: this.page_num,
location: this.location
}).then(res => {
// console.log(res.data.list[0].product_id, this.goodsList[0].product_id)
if (res.data.list[0].product_id == this.goodsList[0].product_id) {
this.status = "nomore"
this.flag = false
} else {
if (res.data.list.length == 0) {
this.status = "nomore"
this.flag = true
return
}
this.goodsList = this.goodsList.concat(res.data.list)
if (res.data.list[0].product_id == this.goodsList[0].product_id) {
this.status = "nomore"
this.flag = true
} else {
this.goodsList = this.goodsList.concat(res.data.list);
}
})
// this.getList().then(res => {
@ -552,7 +505,6 @@
.in(this)
.select('.content')
.boundingClientRect(rect => {
console.log(rect);
if (rect.top <= (this.headtop)) {
this.pocls = 'fixed'
this.act_swiper = 'act_swiper'
@ -684,6 +636,7 @@
product_id: this.skuform.product_id,
product_type: this.skuform.product_type,
spread_id: "",
source: this.source
}).then((res, err) => {
this.cartFn()
uni.showToast({
@ -737,31 +690,35 @@
})
this.totalMoney = this.totalMoney.toFixed(2)
})
getCartCounts().then(res => {
getCartCounts({product_type: 98}).then(res => {
this.goodsNum = res.data[0].count
})
},
goodDetail(item) {
goShopDetail(item, this.uid).then(res => {
if (this.isLogin) {
initiateAssistApi(item.activity_id).then(res => {
let id = res.data.product_assist_set_id;
uni.hideLoading();
uni.navigateTo({
url: '/pages/activity/assist_detail/index?id=' + id
});
}).catch((err) => {
uni.showToast({
title: err,
icon: 'none'
url: `/pages/goods_details/index?id=${item.product_id}`
})
});
} else {
this.isAuto = true;
this.isShowAuth = true
}
// goShopDetail(item, this.uid).then(res => {
// if (this.isLogin) {
// console.log(res);
// initiateAssistApi(item.activity_id).then(res => {
// let id = res.data.product_assist_set_id;
// uni.hideLoading();
// uni.navigateTo({
// url: '/pages/activity/assist_detail/index?id=' + id
// });
// }).catch((err) => {
// uni.showToast({
// title: err,
// icon: 'none'
// })
// });
// } else {
// this.isAuto = true;
// this.isShowAuth = true
// }
})
// })
},
serch() {
this.getList()
@ -792,16 +749,19 @@
getList() {
this.showLoading = true
this.status = "loading"
this.page_num = 1;
cloudWarehouse({
street_code: this.street_code,
category_id: this.cloudList[this.current]?.category_id || "",
order: this.type,
keyword: this.keyword,
page_num: this.page_num
page: this.page_num,
location: this.location
}).then(res => {
this.goodsList = res.data.list
this.showLoading = false
this.goodsList = res.data.list;
this.showLoading = false;
if (res.data.list.length < 10) this.status = 'nomore';
else this.status = 'loadmore';
this.goodsList.forEach(item => {
this.trnList.push({
left: 0,
@ -826,12 +786,13 @@
product_id: item.product_id,
product_type: item.product_type,
spread_id: "",
source: this.source
}
let that = this
uni.createSelectorQuery().in(this).select(`.act_class${i}`).boundingClientRect(data1 => {
that.trnList[i].left = that.cartTagInfo.left - data1.left;
that.trnList[i].bottom = that.cartTagInfo.top - data1.top;
that.trnList[i].left = that.cartTagInfo?.left - data1.left;
that.trnList[i].bottom = that.cartTagInfo?.top - data1.top;
let timer = setTimeout(() => {
that.trnList[i].left = 0
@ -894,7 +855,8 @@
this.cloudList = data
cloudWarehouse({
street_code: this.street_code,
category_id: this.cloudList[this.current].category_id
category_id: this.cloudList[this.current].category_id,
location: this.location
}).then(res => {
this.trnList = []
this.goodsList = res.data.list
@ -914,14 +876,15 @@
@keyframes addcart {
from {
// background-color: red;
opacity: 1,
opacity: 1;
}
to {
// background-color: yellow;
opacity: 0,
opacity: 0;
}
}
.serchbtn {
// position: absolute;
// right: 5rpx;
@ -932,8 +895,9 @@
text-align: center;
line-height: 50rpx;
// background-color: #FEAB00;
background: linear-gradient(to right, #F84221, #FF6D20);
background: linear-gradient(to right, #f84221, #ff6d20);
}
.selected-list {
padding: 24rpx 14rpx;
border-radius: 10.51rpx 10.51rpx 10.51rpx 10.51rpx;
@ -946,8 +910,6 @@
opacity: 0;
transition: 0.5s;
.triangle-up {
width: 0;
height: 0;
@ -960,13 +922,12 @@
.selected-li {
margin-top: 35rpx;
color: #F84221;
color: #f84221;
display: flex;
align-items: center;
}
}
.sku {
padding: 20rpx;
@ -1008,16 +969,15 @@
margin-right: 20rpx;
text-align: center;
color: black;
border: 1px solid #EBECEE;
border: 1px solid #ebecee;
// height: 2;
}
.act_size_li {
background-color: #FF5C2D;
background-color: #ff5c2d;
color: white;
border: #FF5C2D 1px solid;
border: #ff5c2d 1px solid;
}
}
@ -1028,7 +988,7 @@
.skuaddcart {
width: 50vw;
background-color: #FEAB00;
background-color: #feab00;
margin: 20rpx auto;
height: 80rpx;
line-height: 80rpx;
@ -1047,7 +1007,7 @@
.swiper_item {
display: flex;
justify-content: space-around;
transition: .5s;
transition: 0.5s;
padding: 40rpx;
// transform: scale(1.2);
}
@ -1055,13 +1015,13 @@
.swiper_item_act {
transform: scale(1.2);
}
.swiper_item_act2 {
transform: scale(1.1);
}
// .swiper_item:hover {}
// .swiper_item {
// transform: scale(1.2);
// }
@ -1092,26 +1052,21 @@
z-index: 9999;
background-color: white;
// padding: 0 10rpx;
}
.active_swiper {
transform: scale(1.3);
// transform: translateX() translateY();
}
.pictrue {
position: relative;
width: 100%;
height: 345rpx;
}
.act {
color: #FF6D20;
color: #ff6d20;
}
.act_content {
@ -1119,7 +1074,7 @@
// position: absolute;
// top: 965rpx;
z-index: 99;
background-color: #F4F4F4;
background-color: #f4f4f4;
padding: 0 10rpx;
// transition: opt\ linear;
@ -1134,14 +1089,12 @@
transform: scale(2);
}
.content_act {
width: 100vw;
position: absolute;
top: 165rpx;
z-index: 99;
background-color: #F4F4F4;
background-color: #f4f4f4;
padding: 0 10rpx;
}
}
@ -1149,7 +1102,6 @@
.fade-enter-active,
.fade-leave-active {
transition: opacity 0.5s;
}
.fade-enter,
@ -1171,7 +1123,6 @@
top: 50%;
right: 5rpx;
transform: translateY(-50%);
}
.pop {
@ -1181,7 +1132,7 @@
.pop_content {
width: 559rpx;
height: 80vh;
background-color: #F4F4F4;
background-color: #f4f4f4;
padding: 28rpx;
border-radius: 21.03rpx 21.03rpx 0rpx 0rpx;
margin-top: 47rpx;
@ -1195,8 +1146,6 @@
margin-bottom: 52rpx;
}
}
}
.head_tit {
@ -1213,7 +1162,6 @@
// transform: skewX(-10deg);
}
.act {
color: red;
}
@ -1227,10 +1175,7 @@
width: 100%;
padding: 0 20rpx;
align-items: center;
transition: .5s;
transition: 0.5s;
}
.heads {
@ -1256,7 +1201,6 @@
// height: 140.19rpx;
// box-shadow: 0 0 100px 100px rgba(255, 255, 255, 0.5);
// box-shadow: 0 0 100rpx 30rpx rgba(255, 255, 255, 0.9);
}
.town_name {
@ -1298,12 +1242,11 @@
font-size: 29.79rpx;
color: black;
font-weight: bold;
}
.good_score {
font-size: 26rpx;
color: #B3B3B3;
color: #b3b3b3;
margin-bottom: 15rpx;
}
@ -1321,14 +1264,13 @@
display: flex;
.old_price {
color: #B3B3B3;
color: #b3b3b3;
text-decoration: line-through;
font-size: 26.29rpx;
margin-left: 15rpx;
}
}
}
}
// color: greenyellow;
@ -1349,11 +1291,10 @@
.act_img {
// transition:t;
transform: translateY(-840rpx);
transform: translateY(-580rpx);
/* #ifdef APP-PLUS */
transform: translateY(-800rpx);
transform: translateY(-540rpx);
/* #endif */
}
// .act_swiper2 {
@ -1372,8 +1313,6 @@
z-index: 99;
box-sizing: border-box;
margin-bottom: 20rpx;
}
.swipers {
@ -1414,7 +1353,7 @@
.right {
font-size: 33.29rpx;
line-height: 50px;
background: linear-gradient(to right, #F84221, #FF6D20);
background: linear-gradient(to right, #f84221, #ff6d20);
width: 140.19rpx;
text-align: center;
}
@ -1424,7 +1363,7 @@
position: absolute;
top: 0;
right: 0;
background-color: #F84221;
background-color: #f84221;
transform: translate(50%, -50%);
// padding: 10rpx 10rpx;
border-radius: 35rpx;
@ -1477,7 +1416,6 @@
// }
// }
// .body-wrapper {
// width: 694.74rpx;
// display: flex;
@ -1531,7 +1469,7 @@
.info {
position: absolute;
top: 50%;
top: 20%;
left: 50%;
transform: translate(-50%, -50%);
}
@ -1579,13 +1517,12 @@
.actSel {
opacity: 1;
// transform: translateX(100rpx);
}
.yuncangempty {
margin: 20vh 0;
display: flex;
flex-direction: column;
align-items: center
align-items: center;
}
</style>

View File

@ -19,17 +19,15 @@
<view class="">
<view class="">
<view v-if="showtit">
<view :class="{'head':true,'show':showtit}"
style="padding-top: var(--status-bar-height);display: block;">
<view :class="{'head':true,'show':showtit}" style="padding-top: var(--status-bar-height);display: block;">
<view style="display: flex;align-items: center;">
<!-- <u--image :showLoading="true" v-if="cloudList.length>0" src="/static/images/LHYC/FH.png"
width="50.82rpx" height="50.82rpx" @click='goBack'></u--image>
<u--image v-else :showLoading="true" src="/static/images/LHYC/PFH.png" width="50.82rpx"
height="50.82rpx" @click='goBack'></u--image> -->
<i class="iconfont icon-xiangzuo" v-if="cloudList.length>0"
style="font-size: 40rpx;text-align: left;" @click='goBack'></i>
<i class="iconfont icon-xiangzuo" v-else style="font-size: 40rpx;text-align: left;"
<i class="iconfont icon-xiangzuo" v-if="cloudList.length>0" style="font-size: 40rpx;text-align: left;"
@click='goBack'></i>
<i class="iconfont icon-xiangzuo" v-else style="font-size: 40rpx;text-align: left;" @click='goBack'></i>
<view class="head_tit" style="font-size: 36.8rpx;font-weight: 700;transform: skewX(-10deg);"
:style="{color:cloudList.length>0?'':'black'}"
@ -80,16 +78,16 @@
<view class="dw_cls" @click="showFn" :style="`top:${headTop1+5}px`">
<view class="dw_text">
<u--image :showLoading="true" v-if="cloudList.length>0" src="/static/images/LHYC/DWB.png"
width="50.82rpx" height="50.82rpx"></u--image>
<u--image :showLoading="true" v-if="cloudList.length>0" src="/static/images/LHYC/DWB.png" width="50.82rpx"
height="50.82rpx"></u--image>
<u--image :showLoading="true" v-else src="/static/images/LHYC/DWB1.png" width="50.82rpx"
height="50.82rpx"></u--image>
<view class="town_name" :style="{color:cloudList.length>0?'':'black'}" @click="showpick">
{{street}}
</view>
<view class="sl" :class="{actsl:showSelect}">
<u--image :showLoading="true" style="transform: rotate(180deg);"
src="/static/images/GXSC/XL.png" width="31.54rpx" height="31.54rpx"></u--image>
<u--image :showLoading="true" style="transform: rotate(180deg);" src="/static/images/GXSC/XL.png"
width="31.54rpx" height="31.54rpx"></u--image>
</view>
</view>
</view>
@ -117,8 +115,7 @@
<!-- <u--image :showLoading="true" src="/static/images/LHYC/FH.png" width="50.82rpx"
height="50.82rpx" @click='goBack'></u--image> -->
<i class="iconfont icon-xiangzuo" style="font-size: 40rpx;text-align: left;"
@click='goBack'></i>
<i class="iconfont icon-xiangzuo" style="font-size: 40rpx;text-align: left;" @click='goBack'></i>
</view>
<view class="" style="font-size: 40rpx;transform: skewX(-10deg);">
供销综合云商品
@ -126,8 +123,8 @@
</view>
<view style="position: relative;width: 289.14rpx;">
<u-search borderColor="#FF6D20" bgColor="white" :showAction="false" placeholder="请输入..."
v-model="keyword" class="serch_cls" style="height: 56.82rpx;"></u-search>
<u-search borderColor="#FF6D20" bgColor="white" :showAction="false" placeholder="请输入..." v-model="keyword"
class="serch_cls" style="height: 56.82rpx;"></u-search>
<!-- <u--image class="img_cls" :showLoading="true" src="/static/images/GXSC/SSBT.png"
width="115.65rpx" height="56.82rpx" @click="serch"></u--image> -->
<view class="serchbtn img_cls" @click="serch">搜索</view>
@ -146,28 +143,26 @@
<view class="box" v-if="cloudList.length>0">
<view :class="act_swiper">
<swiper :autoplay="false" :active-class="activeClass" :interval="3000" class="swipers"
:circular="true" previous-margin='0rpx' next-margin='0rpx' :current="current"
:disable-touch="true">
<swiper :autoplay="false" :active-class="activeClass" :interval="3000" class="swipers" :circular="true"
previous-margin='0rpx' next-margin='0rpx' :current="current" :disable-touch="true">
<swiper-item v-for="(item,index) in cloudList">
<u--image :showLoading="true" :src="item.cover" :class="act_img" width="750rpx"
height="998.83rpx"></u--image>
height="718.46rpx"></u--image>
</swiper-item>
</swiper>
</view>
<view class="" style="height:998.83rpx;" v-if="act_swiper">
<view class="" style="height:718.46rpx;" v-if="act_swiper">
</view>
<view class="menu" v-if="showtit" style="transition: 1s;">
<swiper :autoplay="false" :active-class="activeClass" :interval="3000" class="swiper"
:circular="true" previous-margin='270rpx' next-margin='270rpx' :current="current"
@change="test">
<swiper :autoplay="false" :active-class="activeClass" :interval="3000" class="swiper" :circular="true"
previous-margin='280rpx' next-margin='280rpx' :current="current" @change="test">
<swiper-item v-for="(item,index) in cloudList" :key="index" @click="clickSwiperFn(index)">
<view class="swiper_item" :class="{swiper_item_act:index==current}">
<u--image :showLoading="true" :src="item.background" class="swiper_b"
width="175.23rpx" height="175.23rpx"></u--image>
<u--image :showLoading="true" :src="item.background" class="swiper_b" width="140.19rpx"
height="140.19rpx"></u--image>
</view>
</swiper-item>
@ -180,10 +175,8 @@
@click="screenGoods(item.screen,index)">
{{item.tit}}
<view class="" v-if="index==2" style="margin-left: 10rpx;">
<u-icon name="arrow-up" :color="item.price&&item.act?'#FF6D20':'black'"
size="10"></u-icon>
<u-icon name="arrow-down" :color="!item.price&&item.act?'#FF6D20':'black'"
size="10"></u-icon>
<u-icon name="arrow-up" :color="item.price&&item.act?'#FF6D20':'black'" size="10"></u-icon>
<u-icon name="arrow-down" :color="!item.price&&item.act?'#FF6D20':'black'" size="10"></u-icon>
</view>
</view>
</view>
@ -193,37 +186,38 @@
</view>
<view class="goods" @click="goodDetail(item)" v-else v-for="item,index in goodsList">
<view class="left">
<u--image :showLoading="true" :src="item.image" width="192.76rpx"
height="192.76rpx"></u--image>
<!-- <u--image :showLoading="true" :src="item.image" width="192.76rpx"
height="192.76rpx"></u--image> -->
<image lazy-load style="height: 192.76rpx;width: 192.76rpx;" :src="item.image"></image>
</view>
<view class="right">
<view class="tit">
<!-- 亿福馒头粉纯天然无添加小麦粉加工 1000g/ -->
{{item.store_info}}
{{ item.store_name || item.store_info }}
</view>
<view class="">
<view class="good_score">
<text style="margin-right: 10rpx;color: #F84221;">{{item.rate}}</text>
<text>{{item.reply_count}}评论</text>
<text v-if="item.merchant.distance">{{item.merchant.distance}}</text>
</view>
<view class="good_price">
<view class="good_price_l">
<view class=""
style="color: #F84221;font-size: 22.78rpx;font-weight: bold;">
<view class="" style="color: #F84221;font-size: 22.78rpx;font-weight: bold;">
<text style="font-size: 30rpx;">{{item.price}}</text>
</view>
<view class="old_price">
<!-- <view class="old_price">
30.00
</view>
</view> -->
</view>
<view class="good_price_r">
<view :class="{x_tra:trnList[index].bottom }"
:style="`transform:translateY(${trnList[index].bottom}px);transition:${trnList[index].bottom?1:0}s cubic-bezier(0.4, -0.9, 0.75, 1);`"
<view :class="{x_tra:trnList[index]?trnList[index].bottom:0 }"
:style="`transform:translateY(${trnList[index]?trnList[index].bottom:0}px);transition:${trnList[index]?trnList[index].bottom:0?1:0}s cubic-bezier(0.4, -0.9, 0.75, 1);`"
@click.stop="addcart(item,index)">
<u--image :class="'act_class'+index"
:style="`transform:translateX(${trnList[index].left}px);transition:${trnList[index].bottom?1:0}s `"
src="/static/images/LHYC/J.png" width="49.07rpx"
height="49.07rpx"></u--image>
:style="`transform:translateX(${trnList[index]?trnList[index].left:0}px);transition:${trnList[index]?trnList[index].bottom:0?1:0}s `"
src="/static/images/LHYC/J.png" width="49.07rpx" height="49.07rpx"></u--image>
</view>
</view>
@ -232,7 +226,7 @@
</view>
</view>
</view>
<view style="height: 100rpx;">
<view style="height: 180rpx;">
<!-- <u-loadmore :status="status" /> -->
</view>
</view>
@ -249,11 +243,10 @@
</view>
</view>
<!-- 购物车 -->
<view class="card" :style="`bottom:${appInfo.bottom}px`"
<view class="card" :style="`bottom:${appInfo.bottom+10}px`"
@click="navgo('/pages/order_addcart/order_addcart')">
<view class="left">
<view class="cart" :class="{act_cart:act_cart}"
style="position: relative;z-index: 9999999;">
<view class="cart" :class="{act_cart:act_cart}" style="position: relative;z-index: 9999999;">
<u--image :showLoading="true" src="/static/images/LHYC/GWC.png" width="63.09rpx"
height="63.09rpx"></u--image>
@ -285,16 +278,15 @@
<view class="pop">
<view style="height: var(--status-bar-height);"></view>
<view class="pop_head" style="display: flex;">
<u--image :showLoading="true" src="/static/images/LHYC/PFH.png" width="50.82rpx"
height="50.82rpx" @click='showPop=false'></u--image>
<u--image :showLoading="true" src="/static/images/LHYC/PFH.png" width="50.82rpx" height="50.82rpx"
@click='showPop=false'></u--image>
<view class="head_tit">
里海云仓
</view>
</view>
<view class="pop_content" v-if="cloudList.length">
<view class="pop_li" @click="all(index)" v-for="item,index in cloudList" :key="index">
<u--image :showLoading="true" :src="item.background" width="84.11rpx"
height="84.11rpx"></u--image>
<u--image :showLoading="true" :src="item.background" width="84.11rpx" height="84.11rpx"></u--image>
<view class="" style="margin-left: 20rpx;">
<view style="font-size: 33.29rpx;color: black;">
{{item.category_name}}云仓服务
@ -333,8 +325,7 @@
<view style="padding: 10rpx;">
<view class="info">
<u--image :showLoading="true" src="/static/images/noCart.png" width="400.09rpx"
height="400.09rpx"></u--image>
<u--image :showLoading="true" src="/static/images/noCart.png" width="400.09rpx" height="400.09rpx"></u--image>
<view class="" style="text-align: center;color:#999">
当前区域暂无云仓
</view>
@ -361,8 +352,7 @@
<view class="sku">
<view class="sku_head">
<view class="sku_head_l">
<u--image :showLoading="true" :src="skuform.image" width="200.09rpx"
height="200.09rpx"></u--image>
<u--image :showLoading="true" :src="skuform.image" width="200.09rpx" height="200.09rpx"></u--image>
</view>
<view class="sku_head_r">
<view class="sku_goods_tit">
@ -383,8 +373,8 @@
尺码
</view>
<view class="">
<text class="size_li" :class="{act_size_li:item.sku==skusize}"
v-for="(item,index) in skuform.sku" @click="skusizechange(item.sku)">{{item.sku}}</text>
<text class="size_li" :class="{act_size_li:item.sku==skusize}" v-for="(item,index) in skuform.sku"
@click="skusizechange(item.sku)">{{item.sku}}</text>
</view>
</view>
@ -404,7 +394,7 @@
</u-popup>
</view>
<authorize @onLoadFun="onLoadFun" :isAuto="isAuto" :isShowAuth="isShowAuth" @authColse="authColse">
<authorize @onLoadFun="onLoadFun" :isAuto="isAuto" :isShowAuth="isShowAuth" @authColse="authColse">
</authorize>
</view>
@ -412,7 +402,7 @@
<script>
import {
cloudWarehouse,
townCloud,
getCityCloundShop
} from '@/api/requesta.js'
import {
@ -458,6 +448,7 @@
let src = 'https://lihai001.oss-cn-chengdu.aliyuncs.com/public/kk/luzhou/static4/13';
return {
skuform: {},
location: null,
defaInd: [0, 0],
showPicker: false,
columnData: [],
@ -522,6 +513,7 @@
// ...mapGetters(['isLogin', 'viewColor', 'uid']),
onLoad(e) {
// this.cartFn()
this.location = e.location
this.appInfo = this.$appInfo.safeAreaInsets
this.winHeight = this.$appInfo.windowHeight
this.street_code = e.street
@ -531,8 +523,6 @@
this.Area()
let that = this
setTimeout(() => {
uni.createSelectorQuery()
.in(this)
.select('.flags1')
@ -556,27 +546,28 @@
},
//
onReachBottom() {
if (this.flag || !this.goodsList.length) return
if (this.flag || !this.goodsList.length) return;
this.status = "loading"
this.page_num += 1
this.flag = true
cloudWarehouse({
// this.flag = true
townCloud({
street_code: this.street_code,
category_id: this.cloudList[this.current]?.category_id || "",
order: this.type,
keyword: this.keyword,
page_num: this.page_num
page: this.page_num,
location: this.location
}).then(res => {
if (res.data.list[0].product_id == this.goodsList[0].product_id) {
this.status = "nomore"
this.flag = false
} else {
if (res.data.list.length == 0) {
this.status = "nomore"
this.flag = true
return
}
this.goodsList = this.goodsList.concat(res.data.list)
if (res.data.list[0].product_id == this.goodsList[0].product_id) {
this.status = "nomore"
this.flag = true
} else {
this.goodsList = this.goodsList.concat(res.data.list);
}
})
@ -589,7 +580,7 @@
.select('.flags')
.boundingClientRect(rect => {
this.headtop = rect.top
console.log(rect.top)
// console.log(rect.top)
})
.exec();
uni.createSelectorQuery()
@ -840,13 +831,14 @@
getList() {
this.showLoading = true
this.status = "loading"
cloudWarehouse({
this.page_num = 1;
townCloud({
street_code: this.street_code,
category_id: this.cloudList[this.current]?.category_id || "",
order: this.type,
keyword: this.keyword,
page_num: this.page_num
page: this.page_num,
location: this.location,
}).then(res => {
this.goodsList = res.data.list
this.showLoading = false
@ -930,7 +922,7 @@
test(e) {
// (e.target.current)
this.current = e.target.current
// (e)
this.getList()
},
@ -941,9 +933,10 @@
street_code: this.street_code
})
this.cloudList = data
cloudWarehouse({
townCloud({
street_code: this.street_code,
category_id: this.cloudList[this.current].category_id
category_id: this.cloudList[this.current].category_id,
location: this.location
}).then(res => {
this.trnList = []
this.goodsList = res.data.list
@ -1301,11 +1294,11 @@
.menu {
position: absolute;
top: 748rpx;
top: 490rpx;
width: 750rpx;
// background-color: rgba(255, 255, 255, 0.7);
height: 250rpx;
// height: 175.23rpx;
// height: 140.19rpx;
// box-shadow: 0 0 100px 100px rgba(255, 255, 255, 0.5);
// box-shadow: 0 0 100rpx 30rpx rgba(255, 255, 255, 0.9);
@ -1400,9 +1393,9 @@
.act_img {
// transition:t;
transform: translateY(-840rpx);
transform: translateY(-580rpx);
/* #ifdef APP-PLUS */
transform: translateY(-800rpx);
transform: translateY(-540rpx);
/* #endif */
}
@ -1429,7 +1422,7 @@
.swipers {
width: 750rpx;
height: 998.83rpx;
height: 718.46rpx;
}
.card {
@ -1466,7 +1459,7 @@
font-size: 33.29rpx;
line-height: 50px;
background: linear-gradient(to right, #F84221, #FF6D20);
width: 175.23rpx;
width: 140.19rpx;
text-align: center;
}
}
@ -1582,7 +1575,7 @@
.info {
position: absolute;
top: 50%;
top: 20%;
left: 50%;
transform: translate(-50%, -50%);
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -11,8 +11,7 @@
<view class="back" @click='backjJump()' style="margin-right:17rpx ;">
<!-- <u--image :showLoading="true" src="/static/images/LHYC/PFH.png" width="50.82rpx"
height="50.82rpx"></u--image> -->
<i class="iconfont icon-xiangzuo" style="font-size: 40rpx;text-align: left;"
></i>
<i class="iconfont icon-xiangzuo" style="font-size: 40rpx;text-align: left;"></i>
</view>
<view style="font-size: 40rpx;">
<!-- {{titName}} -->
@ -534,10 +533,12 @@
//#endif
},
selfLocation() {
if (uni.getStorageSync('RejectTarget')) return
let self = this
uni.getLocation({
type: 'gcj02',
type: 'wgs84',
success: (res) => {
res = wgsToGcj(res);
let latitude, longitude;
latitude = res.latitude.toString();
longitude = res.longitude.toString();
@ -704,7 +705,8 @@
margin: 0;
padding: 0;
}
.serchbtn {
.serchbtn {
// position: absolute;
// right: 5rpx;
// top: 5rpx;
@ -717,6 +719,7 @@
color: #fff;
background: linear-gradient(to right, #F84221, #FF6D20);
}
.com_name {
font-size: 32rpx;
// background-color: red;

View File

@ -12,7 +12,8 @@
<view class="list-box listA" :class="goods.length > 0 ? 'fadeIn on' : ''">
<view class="item" v-for="(item, index) in goods" :key="index">
<view class="pictrue">
<easy-loadimage mode="widthFix" :image-src="item.image"></easy-loadimage>
<!-- <easy-loadimage mode="widthFix" :image-src="item.image"></easy-loadimage> -->
<image :src="item.image" :lazy-load="true"></image>
</view>
<view class="text-info">
<view class="title">{{ item.store_name }}</view>
@ -24,7 +25,7 @@
<u-popup :show="editGoodsShow" @close="editGoodsClose" :round="18" mode="center">
<view class="edit_goods_box">
<view class="edit_name flex_a_c edit_name_no">
<text>商品编号</text><input type="text" disabled placeholder="请输入商品名称" v-model="editGoodsCode">
<text>商品条码</text><input type="text" disabled placeholder="请输入商品条码" v-model="editGoodsCode">
</view>
<view class="edit_name flex_a_c edit_name_no">
<text>商品名称</text> <input type="text" disabled placeholder="请输入商品名称" v-model="editGoodsName">
@ -43,8 +44,25 @@
</view>
</view>
</u-popup>
<u-modal :show="addGoodsShow" content='是否添加到你的仓库中?' @cancel="addGoodsclose()" @close="addGoodsclose()"
@confirm="addGoodsopen()" :closeOnClickOverlay="true" :showCancelButton="true"></u-modal>
<!-- <u-modal :show="addGoodsShow" content='是否添加到你的仓库中?' @cancel="addGoodsclose()" @close="addGoodsclose()"
@confirm="addGoodsopen()" :closeOnClickOverlay="true" :showCancelButton="true"></u-modal> -->
<u-popup :show="addGoodsShow" @close="searchGoodsClose" :round="18" mode="center">
<view class="search_goods_box">
<view style="text-align: center;font-weight: bold;">是否添加到你的仓库中?</view>
<view style="display: flex;align-items: center;margin-top: 16rpx;">
<view style="margin-right: 20rpx;">价格:</view>
<input style="flex: 1;" type="text" v-model="putGoods.price" class="putGoods" :placeholder="`请设置商品价格`">
</view>
<view style="display: flex;align-items: center;margin-top: 16rpx;">
<view style="margin-right: 20rpx;">库存:</view>
<input style="flex: 1;" type="text" v-model="putGoods.stock" class="putGoods" placeholder="请输入商品库存">
</view>
<view class="search_goods_btn">
<view class="cancel edit_btn" @click="addGoodsclose()">取消</view>
<view class="search edit_btn" @click="addGoodsopen()">确定</view>
</view>
</view>
</u-popup>
<u-popup :show="searchGoodsShow" @close="searchGoodsClose" :round="18" mode="center">
<view class="search_goods_box">
<input type="text" v-model="searchGoodsName" class="searchGoods" placeholder="请输入商品名称">
@ -68,7 +86,7 @@
} from '@/api/store.js'
import {
seachBarCodeAPI,
post_product_import
micro_product_import
} from '@/api/api.js'
import {
Toast
@ -77,7 +95,7 @@
data() {
return {
goodsData: [{
name: '',
name: '商品名称添加',
type: 1,
src: 'https://lihai001.oss-cn-chengdu.aliyuncs.com/public/kk/luzhou/static4/mingcheng.png'
},
@ -96,7 +114,24 @@
mer_id: 0,
searchGoodsShow: false,
searchGoodsName: '',
goods: [],
goods: [
// {
// "id": 5,
// "store_name": "260 170X118X2605",
// "bar_code": "6940074914381",
// "unit_name": "",
// "price": "0.00",
// "cost": "0.00",
// "ot_price": "0.00",
// "stock": 9999999,
// "image": "127.0.0.1:8324/uploads/img/2023-11-01/1698809432.jpg"
// }
],
putGoods: {
id: '',
price: '',
stock: '',
},
item: [],
addGoodsShow: false,
stype: '',
@ -104,28 +139,32 @@
},
onLoad(e) {
this.mer_id = e.mer_id
this.stype = e.stype
if (this.stype == 1) {
return this.goodsData[0].name = '商品添加'
}
if (this.stype == 2) {
return this.goodsData[0].name = '商品名称添加'
}
// this.stype = e.stype
this.stype = 2
// if (this.stype == 1) {
// return this.goodsData[0].name = ''
// }
// if (this.stype == 2) {
// return this.goodsData[0].name = ''
// }
},
onShow() {
},
methods: {
addGoods(item) {
this.putGoods.id = item.id;
this.addGoodsShow = true
this.item = item
},
addGoodsopen() {
if (this.item) {
post_product_import(this.item.product_id).then(e => {
if (this.putGoods.id) {
console.log('开始');
micro_product_import(this.putGoods).then(e => {
if (e.status == 200) {
Toast(e.data.msg)
this.addGoodsShow = false
this.putGoods = {};
} else {
// console.log(e);
Toast(e.message)
@ -149,6 +188,8 @@
},
openSearch() {},
async searchGoodsClose() {
console.log('搜索', this.searchGoodsName);
if(this.searchGoodsName=='') return Toast('请输入商品名称');
const rq = {
mer_id: this.mer_id,
name: this.searchGoodsName
@ -221,6 +262,7 @@
code: code,
mer_id: this.mer_id
}).then(res => {
console.log(res);
if (!res.data) {
uni.showToast({
title: res.message,
@ -312,6 +354,13 @@
margin: 21.05rpx 0;
}
.putGoods {
height: 87.72rpx;
border: 1px solid #f5f5f5;
border-radius: 8px;
padding: 12px;
}
.search_goods_btn {
margin-top: 28.07rpx;
display: flex;

View File

@ -4,15 +4,14 @@
<view class='productList' :style="viewColor">
<!-- 顶部 -->
<view class="top">
<view style="height: 10px;">
</view>
<!-- <view style="height: 10px;">
</view> -->
<view class="head_tit">
<view class="" style="display: flex;align-items: center;">
<view class="back" @click='backjJump()' style="margin-right: 17rpx;">
<!-- <u--image :showLoading="true" src="/static/images/LHYC/PFH.png" width="50.82rpx"
height="50.82rpx"></u--image> -->
<i class="iconfont icon-xiangzuo" style="font-size: 40rpx;text-align: left;"
></i>
<i class="iconfont icon-xiangzuo" style="font-size: 40rpx;text-align: left;"></i>
</view>
<view style="font-size: 40rpx;">
@ -25,243 +24,29 @@
</view>
<view style="position: relative;">
<!-- <text class='iconfont icon-sousuo'></text>
<input placeholder='搜索店铺名称' placeholder-class='placeholder' confirm-type='search' name="search"
:value='sotreParam.keyword' @confirm="searchSubmit"></input> -->
<u-search borderColor="#FF6D20" bgColor="white" :showAction="false" placeholder="搜索店铺名称"
<u-search borderColor="#FF6D20" bgColor="white" :showAction="false" placeholder="搜索商品名称"
v-model="sotreParam.keyword" class="serch_cls"></u-search>
<view class="serchbtn img_cls" @tap="searchSubmit">搜索</view>
<!-- <u--image @tap="searchSubmit" class="img_cls" :showLoading="true"
src="/static/images/GXSC/SSBT.png" width="115.65rpx" height="56.82rpx"></u--image> -->
</view>
</view>
</view>
<view class="content">
<view class="hot_serch">
<!-- <text>热搜:</text> <text>热a搜商品</text> <text>热搜商品</text>
<text>热搜sasas商品</text> -->
</view>
<!-- <view class="menu_cls">
<u-scroll-list>
<view class="menu_li" @click="navGo(item.merchant_category_id)" v-for="item,index in menuList"
:key="index">
<u--image :showLoading="true" :src="imgList[index]" width="94.63rpx" height="99.63rpx"
style="margin-bottom: 20rpx;"></u--image>
<text style="display: block; width: 15vw;">{{item.category_name}}</text>
</view>
</u-scroll-list>
</view> -->
<view class="goods_list">
<view class="goods_card" @click="goStore(item.mer_id)" v-for="(item,index) in storeList"
:key="index">
<view class="left">
<u--image :showLoading="true" :src="item.mer_avatar" width="157.71rpx"
height="157.71rpx"></u--image>
</view>
<view class="right">
<view class="li head" style="display: flex;">
<text class="com_name">{{item.mer_name}}</text>
<text
style="font-weight: normal;font-size: 19.28rpx;color: red;padding:0 10rpx; border-radius: 10rpx; border: 1px solid red;">{{item.type_name}}</text>
</view>
<view class="li">
<u--image v-for="item,index in [1,1,,1,1,1]" :key="index" :showLoading="true"
src="/static/images/GXSC/PF.png" width="20.85rpx" height="19.85rpx"></u--image>
<text style="margin-left: 20rpx;color: #FF6D20; ">5.0</text>
<text>月销2000+</text>
</view>
<view class="li" style="align-items: center;">
<u--image :showLoading="true" src="/static/images/GXSC/DH.png" width="33.85rpx"
height="33.85rpx"></u--image>
<text> {{item.service_phone}}</text>
</view>
<view class="li" style="align-items: center;">
<u--image :showLoading="true" src="/static/images/GXSC/SJ.png" width="33.85rpx"
height="33.85rpx"></u--image>
<text>{{item.mer_take_time[0]}}-{{item.mer_take_time[1]}}</text>
</view>
<view class="li" style="align-items: center;">
<u--image :showLoading="true" src="/static/images/GXSC/DW.png" width="33.85rpx"
height="33.85rpx"></u--image>
<text class="address">{{item.mer_address}}</text>
</view>
</view>
</view>
</view>
</view>
<!-- 热搜 -->
<!-- <view class="nav-wrapper" :class="'styleType'+store_street_theme">
<view class='nav acea-row row-middle' :class="'styleType'+store_street_theme">
<view v-for="item in downMenus" :key="item.key" class='item'
:class="{'font-colors':firstKey == item.key}" @click='set_where(item.key)'>
<view class="">
{{item.title}}
</view>
<view class="line" :class="{'font-line':firstKey == item.key}">
</view>
</view>
</view>
<view class="goodslist">
<WaterfallsFlowp :wfList="storeList" @itemTap="itemTap" :type="1" />
</view>
-->
<!-- 店铺 -->
<!--
<block>
<view class="store-wrapper">
<view class="store-item" v-for="(item,index) in storeList" :key="index">
<view class="head">
<view class="bgc_img" :style="{ backgroundImage: `url(${item.mini_banner})`}">
</view>
<view class="zhezhao">
</view>
<view class="zhezhao1" @click="goStore(item.mer_id)">
<view class="title">
<view>{{item.mer_name}}
</view>
<span>
{{item.type_name}}
</span>
</view>
<view class="coent">
<view class="avater">
<image :src="item.mer_avatar" mode=""></image>
</view>
<view class=" text">
<view class="text_one">
<view class="">
<image src="@/static/images/phone.png" mode=""></image>
{{item.service_phone}}
</view>
<view class="text_one_r">
<image src="@/static/images/clock.png" mode=""></image>
{{item.mer_take_time[0]}}-{{item.mer_take_time[1]}}
</view>
</view>
<view class="text_two">
<image src="@/static/images/shangpu.png" mode=""></image>
{{item.mer_info}}
</view>
<view class="text_three">
<image src="@/static/images/dingwei.png" mode=""></image>
{{item.mer_address}}
</view>
</view>
</view>
</view>
</view>
</view>
</view>
</block>
<block v-if="store_street_theme == 2">
<view class="mer-item2" v-for="(item,index) in storeList" :key='index'>
<view class="mer-hd mer-shop-count" @click="goStore(item.mer_id)">
<image class="mer-avatar" :src="item.mer_avatar"></image>
<view class="mer-shop-right">
<view class="mer-count">
<view class="mer-top">
<view class="txt line1">{{item.mer_name}}</view>
<text v-if="item.type_name" class="font-bg-red ml8">{{item.type_name}}</text>
<text v-else-if="item.is_trader" class="font-bg-red ml8">自营</text>
</view>
<view class="mer-btn">
<view class="">
{{item.care_count<10000 ? item.care_count : (item.care_count/10000).toFixed(2)+''}}人关注
</view>
<view class="line" v-if="item.distance"></view>
<view class="distance" v-if="item.distance" @click.stop="showStoreLocation(item)">
<view class="">
{{item.distance}}
</view>
<view class="iconfont icon-xiangyou"></view>
</view>
</view>
</view>
<view class="pro-box">
<navigator :url="`/pages/goods_details/index?id=${itemn.product_id}`" hover-class="none"
class="pro-item" v-for="(itemn,indexn) in item.recommend" :key='indexn'>
<view class="picture">
<easy-loadimage mode="widthFix" :image-src="itemn.image"></easy-loadimage>
<view v-if="itemn.border_pic"
:style="{ backgroundImage: `url(${itemn.border_pic})` }"
class="border-picture"></view>
</view>
<view class="price">
<text></text>{{itemn.price}}
</view>
</navigator>
</view>
</view>
</view>
</view>
</block>
<block v-if="store_street_theme == 3">
<view class="mer-item mer-item3" v-for="(item,index) in storeList" :key='index'
:style="'background-image:url('+item.mini_banner+')'">
<view class="mer-hd" @click="goStore(item.mer_id)">
<view class="mer-name">
<image :src="item.mer_avatar"></image>
<view class="">
<view class="mer-top">
<view class="txt line1">{{item.mer_name}}</view>
<text v-if="item.type_name" class="font-bg-red ml8">{{item.type_name}}</text>
<text v-else-if="item.is_trader" class="font-bg-red ml8">自营</text>
</view>
<view class="mer-btn">
<view class="">
{{item.care_count<10000 ? item.care_count : (item.care_count/10000).toFixed(2)+''}}人关注
</view>
<view class="line" v-if="item.distance"></view>
<view class="distance" v-if="item.distance" @click.stop="showStoreLocation(item)">
<view class="">
{{item.distance}}
</view>
<view class="iconfont icon-xiangyou"></view>
</view>
</view>
</view>
</view>
</view>
<view class="pro-box" :class="'styleType'+store_street_theme">
<view class="pro-item" v-for="(itemn,indexn) in item.recommend" :key='indexn' v-if="indexn<=2">
<view @click="go_details(itemn.product_type,itemn.product_id)">
<view class="picture">
<image :src="itemn.image"></image>
<view v-if="itemn.border_pic"
:style="{ backgroundImage: `url(${itemn.border_pic})` }" class="border-picture">
</view>
</view>
<view class="price">
<text></text>{{itemn.price}}
</view>
</view>
</view>
</view>
</view>
</block>
<view class='loadingicon acea-row row-center-wrapper' v-if="loading">
<text class='loading iconfont icon-jiazai' :hidden='loading==false'></text>{{loadTitle}}
</view>
-->
</view>
<view class='no-shop' v-if="!storeList.length && !loading && !loadingIcon" v-cloak>
<view class='pictrue' style="margin: 0 auto;background-color: #F0F2F5;">
<image src='../../../static/images/noCart.png'></image>
<text>暂无店铺快去搜索其他店铺</text>
<text>暂无商品快去搜索其他商品吧</text>
</view>
</view>
</block>
@ -277,10 +62,12 @@
<script>
import {
storeMerchantList,
getProductslist,
getGeocoder,
supMenuApi,
supAgoodsApi
} from '@/api/store.js';
import { wgsToGcj } from "@/utils/wgs.js";
import {
merClassifly,
@ -296,10 +83,12 @@
configMap
} from '@/utils';
import easyLoadimage from '@/components/easy-loadimage/easy-loadimage.vue';
import WaterfallsFlowp from '@/components/WaterfallsFlow/WaterfallsFlowp.vue'
const app = getApp();
export default {
components: {
easyLoadimage
easyLoadimage,
WaterfallsFlowp
},
data() {
return {
@ -356,6 +145,7 @@
category_id: '',
type_id: '',
street_id: '',
village_id: '',
type_code: '',
},
@ -371,7 +161,7 @@
latitude: "",
longitude: "",
count: 0,
storeTypeArr: [], //
storeTypeArr: [], //
merList: [], //
product_type: 0,
show: false,
@ -380,7 +170,9 @@
};
},
onLoad(options) {
this.sotreParam.type_code = options.type_code
this.sotreParam.type_code = options.type_code;
this.sotreParam.street_id = options.street_id || null;
this.sotreParam.village_id = options.village_id || null;
this.storeList = [];
if (this.mer_location == 1) {
this.selfLocation()
@ -416,6 +208,14 @@
url: `/pages/nongKe/supply_chain/supplierA?type_id=10&?merchant_category_id=${id}`
})
},
itemTap(item){
uni.navigateTo({
url: '/pages/goods_details/index_v?id=' + item.product_id,
fail: (err) => {
console.log(err);
}
})
},
go_details: function(product_type, product_id) {
if (product_type == 98) {
uni.navigateTo({
@ -456,7 +256,7 @@
});
});
},
//
//
getStoreType: function() {
let temp = []
getStoreTypeApi().then(res => {
@ -539,9 +339,11 @@
},
selfLocation() {
let self = this
if (uni.getStorageSync('RejectTarget')) return
uni.getLocation({
type: 'gcj02',
type: 'wgs84',
success: (res) => {
res = wgsToGcj(res);
let latitude, longitude;
latitude = res.latitude.toString();
longitude = res.longitude.toString();
@ -573,7 +375,7 @@
},
});
},
//
//
storeMerchantList() {
if (this.loading) return
this.loading = true
@ -586,10 +388,16 @@
if (this.latitude) {
rqData.location = this.latitude + ',' + this.longitude
}
if(this.sotreParam.street_id){
rqData.street_id = this.sotreParam.street_id;
}
if(this.sotreParam.village_id){
rqData.village_id = this.sotreParam.village_id;
}
// console.log(rqData)
storeMerchantList(rqData).then(res => {
getProductslist(rqData).then(res => {
this.count = res.data.count
this.storeList = this.storeList.concat(res.data.list)
this.storeList = this.storeList.concat(res.data.list);
this.loading = false
this.loadingIcon = false
// this.titName = this.storeList[0].mer_info
@ -717,6 +525,7 @@
color: #fff;
background: linear-gradient(to right, #F84221, #FF6D20);
}
* {
margin: 0;
padding: 0;
@ -869,12 +678,12 @@
color: #B3B3B3;
display: flex;
justify-content: space-around;
margin: 20rpx 0;
margin: 0;
flex-wrap: wrap;
// margin-top: 50rpx;
padding-top: 50rpx;
/* #ifdef H5 */
padding-top: 100rpx;
padding-top: 80rpx;
/* #endif */
text {
@ -1326,4 +1135,35 @@
transform: translateY(-50%);
}
.goodslist {
margin: 0 auto;
width: 725rpx;
.no-more {
text-align: center;
padding-top: 18rpx;
}
.pictrue_tips {
color: $uni-nothing-text;
}
.common-hd {
display: flex;
align-items: center;
justify-content: center;
height: 118rpx;
.title {
padding: 0 80rpx;
font-size: 34rpx;
color: $theme-color;
font-weight: bold;
background-image: url("~@/static/images/index-title.png");
background-repeat: no-repeat;
background-size: 100% auto;
background-position: left center;
}
}
}
</style>

File diff suppressed because it is too large Load Diff

View File

@ -1,5 +1,5 @@
<template>
<view style="background-color: #F0F2F5;">
<view style="background-color: #f5f5f5;">
<!-- <view style="height: var(--status-bar-height);background-color: red;height: 10vh;">dsfdsfsdfds</view> -->
<view class='productList' :style="viewColor">
<!-- 顶部 -->
@ -10,13 +10,14 @@
<view class="" style="display: flex;align-items: center;">
<!-- <u--image :showLoading="true" src="/static/images/LHYC/PFH.png" width="50.82rpx"
height="50.82rpx" @click='backjJump'></u--image> -->
<i class="iconfont icon-xiangzuo" style="font-size: 40rpx;text-align: left;" @click='backjJump'></i>
<i class="iconfont icon-xiangzuo" style="font-size: 40rpx;text-align: left;"
@click='backjJump'></i>
<view class=""
style="font-size: 36.8rpx;font-weight: 700;transform: skewX(-10deg);margin-left: 20rpx;color: #F84221;">
供销综合云市场
</view>
<view class=""
@click="navGoto(`/pages/nongKe/cloud_entrepot/indexa?street=${street_id}&town=${street}`)"
@click="navGoto(`/pages/nongKe/cloud_entrepot/indexa?street=${street_id}&town=${street}&location=${latitude},${longitude}`)"
style="font-size: 36.8rpx;font-weight: 700;transform: skewX(-10deg);margin-left: 60rpx;">
供销综合云商品
</view>
@ -30,7 +31,7 @@
<!-- 搜索框 -->
<!-- <view style="position: relative;width: 289.14rpx;" v-if="showSerch">
<u-search borderColor="#FF6D20" bgColor="white" @change="test" :showAction="false"
placeholder="请输入..." v-model="sotreParam.keyword" @search="onInputConfirm"
placeholder="请输入..." v-model="storeParam.keyword" @search="onInputConfirm"
class="serch_cls"></u-search>
<u--image @tap="searchSubmit" class="img_cls" :showLoading="true"
src="/static/images/GXSC/SSBT.png" width="115.65rpx" height="56.82rpx"></u--image>
@ -48,7 +49,7 @@
<view class="sswz">
<view style="position: relative;width: 501.17rpx;">
<u-search borderColor="#FF6D20" bgColor="white" @change="test" :showAction="false"
placeholder="搜索店铺或者名称" v-model="sotreParam.keyword" @search="onInputConfirm"
placeholder="搜索店铺或者名称" v-model="storeParam.keyword" @search="onInputConfirm"
class="serch_cls"></u-search>
<u--image @tap="searchSubmit" class="img_cls" :showLoading="true"
src="/static/images/GXSC/SSBT.png" width="115.65rpx" height="56.82rpx"></u--image>
@ -94,14 +95,26 @@
<view class="menu_li" @click="navGo(item.merchant_category_id)" v-for="item,index in menuList"
:key="index">
<!-- {{item.merchant_category_id}} -->
<u--image :showLoading="true" :src="imgList[index]" width="94.63rpx" height="99.63rpx"
style="margin-bottom: 20rpx;"></u--image>
<u--image :showLoading="true" :src="item.background" width="94.63rpx" height="99.63rpx"
></u--image>
<text
style="display: block;font-size: 26.29rpx; width: 15vw;">{{item.category_name}}</text>
style="display: block;font-size: 26.29rpx;">{{item.category_name}}</text>
</view>
</u-scroll-list>
</view>
<view class='no-shop' v-if="storeParam.is_recommend && !loading && !loadingIcon" v-cloak>
<view class='pictrue' style="margin: 0 auto;background-color: #F5F5F5;">
<!-- <image src='../../../static/images/noCart.png'></image> -->
<image src='@/static/images/no_short.png'></image>
<text>暂无店铺切换其他位置试试</text>
</view>
</view>
<block v-if="storeParam.is_recommend">
<view class="common-hd">
<view class="title">为你推荐</view>
</view>
</block>
<view class="goods_list">
<view class="goods_card" @click="goStore(item.mer_id)" v-for="(item,index) in storeList"
:key="index">
@ -112,19 +125,32 @@
<view class="right">
<view class="li head">
<text class="com_name">{{item.mer_name}}</text>
<text
<text v-if="item.type_id==17"
style="font-weight: normal;font-size: 19.28rpx;color: red;padding:0 10rpx; border-radius: 10rpx; border: 1px solid red;">{{item.type_name}}</text>
</view>
<view class="li">
<u--image v-for="item,index in [1,1,,1,1,1]" :key="index" :showLoading="true"
src="/static/images/GXSC/PF.png" width="20.85rpx" height="19.85rpx"></u--image>
<text style="margin-left: 20rpx;color: #FF6D20; ">5.0</text>
<!-- <u--image v-for="item,index in [1,1,1,1,1]" :key="index" :showLoading="true"
src="/static/images/GXSC/PF.png" width="20.85rpx" height="19.85rpx"></u--image> -->
<view class="score">
<view class="star">
<view
:style="{width: `${(item.service_score / 5 * 100).toFixed(0)}%`, backgroundImage: `url(${domain}/static/diy/score1${keyColor}.png)`}">
</view>
</view>
</view>
<text style="margin-left: 20rpx;color: #FF6D20; ">{{item.service_score}}</text>
<text>月销{{item.sales}}</text>
<text v-if="item.distance" style="font-size: 24rpx;color: #aaa;">{{item.distance}}</text>
</view>
<view class="li" style="align-items: center;">
<u--image :showLoading="true" src="/static/images/GXSC/DH.png" width="33.85rpx"
height="33.85rpx"></u--image>
<text> {{item.service_phone}}</text>
<!-- <image src="../../../static/images/MYTC/SJicon.png"></image> -->
<u--image :showLoading="true" src="/static/images/address.png" width="33.85rpx"
height="33.85rpx"></u--image>
<view >{{item.street_name}}</view>
</view>
<view class="li" style="align-items: center;">
<u--image :showLoading="true" src="/static/images/GXSC/SJ.png" width="33.85rpx"
@ -142,7 +168,6 @@
</view>
<u-loadmore :status="status" />
</view>
<!-- 热搜 -->
@ -306,12 +331,7 @@
</view>
<view class='no-shop' v-if="!storeList.length && !loading && !loadingIcon" v-cloak>
<view class='pictrue' style="margin: 0 auto;background-color: #F5F5F5;">
<image src='../../../static/images/noCart.png'></image>
<text>暂无店铺快去搜索其他店铺吧</text>
</view>
</view>
<u-loadmore v-if="storeParam.is_recommend==false && storeList.length != 0 || (storeParam.is_recommend==true)" :status="status" />
</block>
<u-popup class="pop" :show="show" @close="close" mode="center" bgColor='transparent'>
<image :src="image"></image>
@ -332,6 +352,7 @@
storeMerchantList,
getGeocoder,
} from '@/api/store.js';
import { wgsToGcj } from "@/utils/wgs.js";
import {
supMenuApi
} from '@/api/requesta.js';
@ -360,7 +381,9 @@
getDiy
} from '@/api/api.js'
import {
HTTP_REQUEST_URL
} from '@/config/app';
import Cache from '@/utils/cache';
const app = getApp();
@ -372,6 +395,7 @@
},
data() {
return {
domain: HTTP_REQUEST_URL,
defaInd: [0, 0],
columnData: [],
showSerch: false,
@ -442,14 +466,15 @@
firstKey: 0,
//
storeList: [],
sotreParam: {
storeParam: {
keyword: '',
page: 1,
limit: 10,
order: '',
order: 'location',
category_id: '',
type_id: '',
street_id: ''
street_id: '',
is_recommend: false, //
},
storeKey: 0,
storeScroll: true,
@ -476,13 +501,17 @@
this.street_id = options.street_id
this.street = options.townName
this.product_type = options.product_type ?? 0
if(this.$store.state.storage?.location?.lat){
this.latitude = this.$store.state.storage.location.lat;
this.longitude = this.$store.state.storage.location.long;
}
if (options.street_id != undefined) {
this.sotreParam.street_id = options.street_id
this.storeParam.street_id = options.street_id
}
this.credit_buy = options.credit_buy
this.sotreParam.type_id = options.type_id
this.sotreParam.type_id = options.type_id && options.type_id.split(',').toString() || ''
this.sotreParam.category_id = options.cate_id && options.cate_id.split(',').toString() || ''
this.storeParam.type_id = options.type_id
this.storeParam.type_id = options.type_id && options.type_id.split(',').toString() || ''
this.storeParam.category_id = options.cate_id && options.cate_id.split(',').toString() || ''
this.storeList = [];
if (this.mer_location == 1) {
this.selfLocation()
@ -524,7 +553,7 @@
mer_location: 0,
store_street_theme: 1,
hide_mer_status: '',
}, mapGetters(['viewColor'])),
}, mapGetters(['viewColor', 'keyColor'])),
},
methods: {
selectLocation() {
@ -540,7 +569,7 @@
this.$bus.$emit('value-updated', e.value[1].name + ',' + e.value[1].code);
})
this.sotreParam.street_id = e.value[1].code
this.storeParam.street_id = e.value[1].code
this.street_id = e.value[1].code
this.storeMerchantList()
},
@ -621,14 +650,14 @@
},
test() {
// if (this.sotreParam.keyword.length > 3) {
// this.sotreParam.keyword.slice(0, 3)
// this.sotreParam.keyword = this.sotreParam.keyword.slice(0, 3) + "..."
// if (this.storeParam.keyword.length > 3) {
// this.storeParam.keyword.slice(0, 3)
// this.storeParam.keyword = this.storeParam.keyword.slice(0, 3) + "..."
// }
// console.log(this.sotreParam.keyword.length)
// console.log(this.storeParam.keyword.length)
},
hotSerchFn(keywords) {
this.sotreParam.keyword = keywords
this.storeParam.keyword = keywords
this.searchSubmit()
},
goMap(url) {
@ -643,7 +672,7 @@
},
navGo(id) {
uni.navigateTo({
url: `/pages/nongKe/supply_chain/supplierA?type_id=10&merchant_category_id=${id}&street_id=${this.street_id}`
url: `/pages/nongKe/supply_chain/supplierA?type_id=10,17&merchant_category_id=${id}&street_id=${this.street_id}`
})
},
go_details: function(product_type, product_id) {
@ -669,8 +698,8 @@
check: false
}
})
if (this.sotreParam.category_id.length > 0) {
this.sotreParam.category_id.forEach((ids, index) => {
if (this.storeParam.category_id.length > 0) {
this.storeParam.category_id.forEach((ids, index) => {
temp.forEach(el => {
if (ids == el.merchant_category_id) {
el.check = true
@ -691,7 +720,7 @@
let temp = []
getStoreTypeApi().then(res => {
res.data.forEach(item => {
if (item.mer_type_id == this.sotreParam.type_id) {
if (item.mer_type_id == this.storeParam.type_id) {
temp.push({
...item,
check: true
@ -769,14 +798,41 @@
},
selfLocation() {
let self = this
uni.getLocation({
type: 'gcj02',
if (uni.getStorageSync('RejectTarget')) return;
if(this.$store?.state?.storage?.location?.lat){
this.latitude = this.$store?.state?.storage?.location?.lat;
this.longitude = this.$store?.state?.storage?.location?.long;
getGeocoder({
lat: this.latitude,
long: this.longitude
}).then(res => {
// console.log(res)
this.detaile_address = res.data.address;
this.location_address = res.data.address;
this.recommend_address = res.data.address.length > 4 ? res.data.address
.slice(0, 4) + '...' :
res.data.address
}).catch(err => {
uni.showToast({
title: err,
icon: 'none'
})
})
}
else uni.getLocation({
type: 'wgs84',
success: (res) => {
console.log('定位');
res = wgsToGcj(res);
let latitude, longitude;
latitude = res.latitude.toString();
longitude = res.longitude.toString();
this.latitude = res.latitude
this.longitude = res.longitude
this.latitude = res.latitude.toFixed(6);
this.longitude = res.longitude.toFixed(6);
this.$store.commit('setLocation', {
lat: res.latitude.toFixed(6),
long: res.longitude.toFixed(6),
});
getGeocoder({
lat: latitude,
long: longitude
@ -808,20 +864,51 @@
if (this.loading) return
this.loading = true
let rqData = {
keyword: this.sotreParam.keyword,
page: this.sotreParam.page,
keyword: this.storeParam.keyword,
page: this.storeParam.page,
limit: 10,
order: this.sotreParam.order,
category_id: this.sotreParam.category_id,
type_id: this.sotreParam.type_id,
street_id: this.sotreParam.street_id,
credit_buy: this.credit_buy
order: this.storeParam.order,
category_id: this.storeParam.category_id,
type_id: this.storeParam.type_id,
credit_buy: this.credit_buy,
}
rqData.street_id = this.storeParam.street_id
if (this.latitude) {
rqData.location = this.latitude + ',' + this.longitude
}
// console.log(rqData)
storeMerchantList(rqData).then(res => {
if (res.data.list.length < rqData.limit) {
this.status = "nomore"
}
this.count = res.data.count
this.storeList = (res.data.list)
this.loading = false
this.loadingIcon = false
//
if(rqData.page==1 && res.data.count==0){
this.storeMerchantList2();
}else this.storeParam.is_recommend = false;
})
},
//
storeMerchantList2() {
if (this.loading) return
this.loading = true
let rqData = {
keyword: this.storeParam.keyword,
page: this.storeParam.page,
limit: 10,
order: this.storeParam.order,
category_id: this.storeParam.category_id,
type_id: this.storeParam.type_id,
credit_buy: this.credit_buy,
}
if (this.latitude) {
rqData.location = this.latitude + ',' + this.longitude
}
storeMerchantList(rqData).then(res => {
this.storeParam.is_recommend = true;
this.count = res.data.count
this.storeList = (res.data.list)
this.loading = false
@ -830,7 +917,7 @@
},
//
goStore(id) {
if (this.sotreParam.type_id == 12) {
if (this.storeParam.type_id == 12) {
uni.navigateTo({
url: `/pages/nongKe/supply_chain/merchant?id=${id}`
})
@ -844,13 +931,13 @@
},
searchSubmit: function() {
let that = this;
that.$set(that.sotreParam, 'keyword', this.sotreParam.keyword);
that.$set(that.storeParam, 'keyword', this.storeParam.keyword);
this.set_where(this.firstKey)
this.showSerch = false
},
//
bindRight() {
this.sotreParam.page = 1
this.storeParam.page = 1
this.rightBox = true
},
//
@ -858,24 +945,24 @@
let arr1 = [],
arr2 = []
if (data.storeTypeArr.length == 0) {
// this.sotreParam.type_id = ''
// this.storeParam.type_id = ''
} else {
data.storeTypeArr.forEach(item => {
arr1.push(item.mer_type_id)
})
this.sotreParam.type_id = arr1.toString();
this.storeParam.type_id = arr1.toString();
}
if (data.merList.length == 0) {
this.sotreParam.category_id = ''
this.storeParam.category_id = ''
} else {
data.merList.forEach(item => {
arr2.push(item.merchant_category_id)
})
this.sotreParam.category_id = arr2.toString();
this.storeParam.category_id = arr2.toString();
}
this.rightBox = data.status
this.loadend = false;
this.$set(this.sotreParam, 'page', 1)
this.$set(this.storeParam, 'page', 1)
this.storeList = [];
this.storeMerchantList();
},
@ -889,8 +976,9 @@
if (this.loading) return
this.storeList = []
this.firstKey = e
this.sotreParam.page = 1
this.sotreParam.order = this.downMenu[e].order
this.storeParam.page = 1
// this.storeParam.order = this.downMenu[e].order
this.storeParam.order = 'location' //使
this.storeMerchantList();
},
backjJump() {
@ -922,16 +1010,16 @@
},
//
onReachBottom() {
this.sotreParam.page += 1
this.storeParam.page += 1
let rqData = {
keyword: this.sotreParam.keyword,
page: this.sotreParam.page,
keyword: this.storeParam.keyword,
page: this.storeParam.page,
limit: 10,
order: this.sotreParam.order,
category_id: this.sotreParam.category_id,
type_id: this.sotreParam.type_id,
street_id: this.sotreParam.street_id,
order: this.storeParam.order,
category_id: this.storeParam.category_id,
type_id: this.storeParam.type_id,
street_id: this.storeParam.street_id,
credit_buy: this.credit_buy
}
if (this.latitude) {
@ -939,16 +1027,13 @@
}
// console.log(rqData)
storeMerchantList(rqData).then(res => {
if (res.data.list == 0) {
console.log(res.data.list.length);
if (res.data.list.length < rqData.limit) {
this.status = "nomore"
return
}
this.count = res.data.count
this.storeList.push(...res.data.list)
})
}
}
@ -959,6 +1044,9 @@
margin: 0;
padding: 0;
}
page{
background-color: #f5f5f5;
}
.com_name {
font-size: 33.29rpx;
@ -992,7 +1080,8 @@
padding-top: var(--status-bar-height);
// padding-top: 80rpx;
background-color: #F0F2F5;
background-color: #f5f5f5;
// background-color: #F0F2F5;
position: fixed;
z-index: 999;
width: 100%;
@ -1013,7 +1102,11 @@
.menu_li {
margin-right: 50rpx;
// background-color: red;
width: 50vw;
// width: 50vw;
display: flex;
flex-direction: column;
align-items: center;
min-width: 15vw;
// width: 120rpx;
// display: inline-block;
}
@ -1021,6 +1114,25 @@
}
.common-hd {
display: flex;
align-items: center;
justify-content: center;
height: 60rpx;
margin-top: 30rpx;
.title {
padding: 0 80rpx;
font-size: 34rpx;
color: $theme-color;
font-weight: bold;
background-image: url("~@/static/images/index-title.png");
background-repeat: no-repeat;
background-size: 100% auto;
background-position: left center;
}
}
.goods_list {
margin-top: 20rpx;
@ -1042,6 +1154,7 @@
}
.right {
flex: 1;
.head {
font-weight: bold;
// color: red;
@ -1049,6 +1162,7 @@
}
.li {
width: 100%;
display: flex;
font-size: 26.29rpx;
margin-bottom: 10rpx;
@ -1585,8 +1699,8 @@
color: $uni-nothing-text;
image {
width: 414rpx;
height: 380rpx;
width: 500rpx;
height: 180rpx;
}
}
}
@ -1616,4 +1730,42 @@
box-sizing: border-box;
padding: 0 20rpx;
}
.score {
display: flex;
align-items: center;
font-weight: 500;
font-size: 24rpx;
line-height: 1;
color: #000;
.score-title {
margin-right: 15rpx;
}
.score_text{
color: #fd5d2e;
}
.star {
position: relative;
width: 111rpx;
height: 19rpx;
margin-right: 10rpx;
background: url(../../columnGoods/images/star.png) left top/100% 100% no-repeat;
overflow: hidden;
view {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: url(../../columnGoods/images/star_active.png) left top/111rpx 19rpx no-repeat;
&.star_purple {
background: url(../../columnGoods/images/star_active_purple.png) left top/111rpx 19rpx no-repeat;
}
}
}
}
</style>

View File

@ -59,14 +59,20 @@
<view class="right">
<view class="li head" style="display: flex;">
<text class="com_name">{{item.mer_name}}</text>
<text
<text v-if="item.type_id==17"
style="font-weight: normal;font-size: 19.28rpx;color: red;padding:0 10rpx; border-radius: 10rpx; border: 1px solid red;">{{item.type_name}}</text>
</view>
<view class="li">
<u--image v-for="item,index in [1,1,,1,1,1]" :key="index" :showLoading="true"
src="/static/images/GXSC/PF.png" width="20.85rpx" height="19.85rpx"></u--image>
<text style="margin-left: 20rpx;color: #FF6D20; ">5.0</text>
<text>月销2000+</text>
<view class="score">
<view class="star">
<view
:style="{width: `${(item.service_score / 5 * 100).toFixed(0)}%`, backgroundImage: `url(${domain}/static/diy/score1${keyColor}.png)`}">
</view>
</view>
</view>
<text style="margin-left: 20rpx;color: #FF6D20; ">{{item.service_score}}</text>
<text>月销{{item.sales}}</text>
<text v-if="item.distance" style="font-size: 24rpx;color: #aaa;">{{item.distance}}</text>
</view>
<view class="li" style="align-items: center;">
<u--image :showLoading="true" src="/static/images/GXSC/DH.png" width="33.85rpx"
@ -278,6 +284,7 @@
supAgoodsApi
} from '@/api/store.js';
import { wgsToGcj } from "@/utils/wgs.js";s
import {
supMenuApi,
} from '@/api/requesta.js';
@ -290,6 +297,9 @@
import {
mapGetters
} from "vuex";
import {
HTTP_REQUEST_URL
} from '@/config/app';
import {
goShopDetail
} from '@/libs/order.js'
@ -306,8 +316,8 @@
},
data() {
return {
titName: "坝坝宴",
domain: HTTP_REQUEST_URL,
titName: "",
price: 0,
stock: 0,
nows: false,
@ -385,7 +395,10 @@
if (options.street_id != undefined) {
this.sotreParam.street_id = options.street_id
}
if(this.$store.state.storage?.location?.lat){
this.latitude = this.$store.state.storage.location.lat;
this.longitude = this.$store.state.storage.location.long;
}
this.credit_buy = options.credit_buy
this.sotreParam.type_id = options.type_id
this.sotreParam.type_id = options.type_id && options.type_id.split(',').toString() || ''
@ -432,7 +445,7 @@
mer_location: 0,
store_street_theme: 1,
hide_mer_status: '',
}, mapGetters(['viewColor'])),
}, mapGetters(['viewColor', 'keyColor'])),
},
methods: {
navGo(id) {
@ -563,14 +576,40 @@
},
selfLocation() {
let self = this
uni.getLocation({
type: 'gcj02',
if (uni.getStorageSync('RejectTarget')) return;
if(this.$store?.state?.storage?.location?.lat){
this.latitude = this.$store?.state?.storage?.location?.lat;
this.longitude = this.$store?.state?.storage?.location?.long;
getGeocoder({
lat: this.latitude,
long: this.longitude
}).then(res => {
// console.log(res)
this.detaile_address = res.data.address;
this.location_address = res.data.address;
this.recommend_address = res.data.address.length > 4 ? res.data.address
.slice(0, 4) + '...' :
res.data.address
}).catch(err => {
uni.showToast({
title: err,
icon: 'none'
})
})
}
else uni.getLocation({
type: 'wgs84',
success: (res) => {
res = wgsToGcj(res);
let latitude, longitude;
latitude = res.latitude.toString();
longitude = res.longitude.toString();
this.latitude = res.latitude
this.longitude = res.longitude
this.latitude = res.latitude;
this.longitude = res.longitude;
this.$store.commit('setLocation', {
lat: res.latitude.toFixed(6),
long: res.longitude.toFixed(6),
});
getGeocoder({
lat: latitude,
long: longitude
@ -1341,4 +1380,42 @@
transform: translateY(-50%);
}
.score {
display: flex;
align-items: center;
font-weight: 500;
font-size: 24rpx;
line-height: 1;
color: #000;
.score-title {
margin-right: 15rpx;
}
.score_text{
color: #fd5d2e;
}
.star {
position: relative;
width: 111rpx;
height: 19rpx;
margin-right: 10rpx;
background: url(../../columnGoods/images/star.png) left top/100% 100% no-repeat;
overflow: hidden;
view {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: url(../../columnGoods/images/star_active.png) left top/111rpx 19rpx no-repeat;
&.star_purple {
background: url(../../columnGoods/images/star_active_purple.png) left top/111rpx 19rpx no-repeat;
}
}
}
}
</style>

File diff suppressed because it is too large Load Diff

View File

@ -197,6 +197,7 @@
storeMerchantList,
getGeocoder
} from '@/api/store.js';
import { wgsToGcj } from "@/utils/wgs.js";
import recommend from './component/recommend';
import rightSlider from './component/rightSlider';
import {
@ -460,8 +461,9 @@
selfLocation() {
let self = this
uni.getLocation({
type: 'gcj02',
type: 'wgs84',
success: (res) => {
res = wgsToGcj(res);
let latitude, longitude;
latitude = res.latitude.toString();
longitude = res.longitude.toString();

View File

@ -11,8 +11,7 @@
<view class="back" @click='backjJump()' style="margin-right: 17rpx;">
<!-- <u--image :showLoading="true" src="/static/images/LHYC/PFH.png" width="50.82rpx"
height="50.82rpx"></u--image> -->
<i class="iconfont icon-xiangzuo" style="font-size: 40rpx;text-align: left;"
></i>
<i class="iconfont icon-xiangzuo" style="font-size: 40rpx;text-align: left;"></i>
</view>
<view style="font-size: 40rpx;">
<!-- {{titName}} -->
@ -280,6 +279,7 @@
supMenuApi,
supAgoodsApi
} from '@/api/store.js';
import { wgsToGcj } from "@/utils/wgs.js";
import {
merClassifly,
@ -536,9 +536,11 @@
},
selfLocation() {
let self = this
if (uni.getStorageSync('RejectTarget')) return
uni.getLocation({
type: 'gcj02',
type: 'wgs84',
success: (res) => {
res = wgsToGcj(res);
let latitude, longitude;
latitude = res.latitude.toString();
longitude = res.longitude.toString();
@ -705,7 +707,8 @@
margin: 0;
padding: 0;
}
.serchbtn {
.serchbtn {
// position: absolute;
// right: 5rpx;
// top: 5rpx;
@ -718,6 +721,7 @@
color: #fff;
background: linear-gradient(to right, #F84221, #FF6D20);
}
.com_name {
font-size: 32rpx;
// background-color: red;

View File

@ -219,6 +219,8 @@
loading: false, //
loadend: false, //
loadTitle: '加载更多', //
product_type: 0,
source: null, //(103)
isFooter: false,
cartCount: 0,
goodsHidden: true,
@ -251,7 +253,6 @@
productSelect: {}
},
isOpen: false, //
source: '',
attrImage: '',
isCart: true,
cart_id: '',
@ -272,7 +273,8 @@
onReady() {},
mounted: function() {},
onLoad: function(options) {
this.product_type = options.product_type || 0;
this.source = options.source || null;
},
onShow: function() {
this.appInfo = this.$appInfo.safeAreaInsets
@ -577,8 +579,10 @@
})
})
if (selectValue.length > 0) {
let url = '/pages/users/order_confirm/index?cartId=' + selectValue.join(',') + '&product_type=' + this.product_type;
if(this.source) url = url + '&source=' + this.source;
uni.navigateTo({
url: '/pages/users/order_confirm/index?cartId=' + selectValue.join(',')
url: url
});
} else {
return this.$util.Tips({
@ -672,14 +676,21 @@
},
getCartNum: function() {
let that = this;
getCartCounts().then(res => {
let params = {};
if(this.product_type) params.product_type = this.product_type;
if(this.source) params.source = this.source;
getCartCounts(params).then(res => {
that.cartTotalCount = res.data[0].count || 0;
});
},
//
getCartList: function(isChange) {
let that = this;
getCartList().then(res => {
let query = {
product_type: this.product_type,
}
if(this.source) query.source = this.source;
getCartList(query).then(res => {
res.data.list.forEach((item, index) => {
item.allCheck = true
item.list.forEach((goods, j) => {

File diff suppressed because it is too large Load Diff

View File

@ -83,7 +83,7 @@
</view>
<view class='iconfont'
:class='(orderInfo.status == 3 ? "icon-webicon318":"icon-yuandianxiao") + " " +(orderInfo.status > 3 && orderInfo.status != 9 ? "t-color":"")'
:class='(orderInfo.status == 1 ? "icon-webicon318":"icon-yuandianxiao") + " " +(orderInfo.status >=1 && orderInfo.status != 9 ? "t-color":"")'
v-if="orderInfo.order_type == 0"></view>
@ -306,7 +306,7 @@
<view class="content-clip"></view>
<view class='footer acea-row row-right row-middle' v-if="isGoodsReturn==false">
<!-- <view class='bnt cancel' @click="cancelSales">取消售后</view> -->
<view v-if="!orderInfo.receipt && !isGoodsReturn" class='bnt cancel' @click="applyInvoice">申请开票</view>
<view v-if="!orderInfo.receipt && !isGoodsReturn && orderInfo.status!=0" class='bnt cancel' @click="applyInvoice">申请开票</view>
<view v-if="orderInfo.activity_type == 2 && (orderInfo.status == 10 || orderInfo.status == 11)"
class=" acea-row row-right row-middle">
<view v-if="orderInfo.presellOrder.activeStatus == 0" class='bnt b-color btn_auto'>
@ -397,10 +397,11 @@
</view>
<view class="grayBg">
<view class="pictrue">
<image :src="codeUrl"></image>
<image class="image" :class="{'used-white': orderInfo.order_status!=7}" :src="codeUrl"></image>
<image v-if="orderInfo.order_status!=7" class="used-img" src="@/static/images/used.png"></image>
</view>
</view>
<view class="num">{{orderInfo.verify_code}}</view>
<view class="num" :class="{'used-white': orderInfo.order_status!=7}">{{orderInfo.verify_code}}</view>
</view>
</uni-popup>
<u-popup :show="show" bgColor='transparent' mode='center'>
@ -778,7 +779,7 @@
showMaoLocation: function() {
if (!this.orderInfo.take.mer_take_location[0] || !this.orderInfo.take.mer_take_location[1]) return this
.$util.Tips({
title: '请设置允许商城访问您的位置'
title: '商家未设置具体位置!请联系商家'
});
let that = this,
lat = parseFloat(that.orderInfo.take.mer_take_location[0]),
@ -1522,9 +1523,21 @@
width: 290rpx;
height: 290rpx;
margin: 0 auto;
position: relative;
.used-img{
width: 175.23rpx;
height: 175.23rpx;
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
}
}
.used-white{
opacity: 0.2;
}
.grayBg .pictrue image {
.grayBg .pictrue .image {
width: 100%;
height: 100%;
display: block;
@ -1666,6 +1679,22 @@
border-radius: 16rpx 16rpx 0 0;
position: relative;
.used{
position: absolute;
bottom: 0;
left: 0;
width: 100%;
height: 450rpx;
background-color: rgba(255, 255, 255, 0.8);
display: flex;
justify-content: center;
align-items: center;
image{
width: 175.23rpx;
height: 175.23rpx;
}
}
.iconfont {
font-size: 24rpx;
color: #939393;

View File

@ -157,7 +157,7 @@
<view>商品总额</view>
<view class='conter'>{{orderInfo.total_price}}</view>
</view>
<view class='item acea-row row-between' v-if="orderInfo.orderList[0].merchant.settle_cycle">
<view class='item acea-row row-between' v-if="orderInfo.orderList && orderInfo.orderList[0].merchant.settle_cycle">
<view>支付方式</view>
<view class='conter' v-if="orderInfo.pay_type==0">余额支付</view>
<view class='conter' v-if="orderInfo.pay_type==4 || orderInfo.pay_type==5">支付宝支付</view>
@ -273,7 +273,7 @@
openOrderRefundSubscribe
} from '@/utils/SubscribeMessage.js';
import {
getUserInfo
getUserInfo as getUserInfos
} from '@/api/user.js';
import payment from '@/components/payment';
import orderGoods from "@/components/orderGoods";
@ -519,7 +519,7 @@
*/
getUserInfo: function() {
let that = this;
getUserInfo().then(res => {
getUserInfos().then(res => {
that.payMode[2].number = res.data.now_money;
that.$set(that, 'payMode', that.payMode);
})
@ -539,10 +539,10 @@
that.$set(that, 'orderInfo', res.data);
this.pay_type = this.orderInfo.pay_type
if (this.orderInfo.interest !== null) {
this.moerTime(this.orderInfo.interest.start_time)
this.moerTime(this.orderInfo.interest.start_time, this.orderInfo.cancel_unix)
} else {
this.isSelfOrder = true
this.moerTime(this.orderInfo.create_time)
this.moerTime(this.orderInfo.create_time, this.orderInfo.cancel_unix)
// console.log(this.orderInfo.create_time)
}
@ -593,16 +593,17 @@
});
},
//
moerTime(autoTime) {
moerTime(autoTime, c_time) {
if (this.isSelfOrder) {
let limitPayTime = 60 //
let curData = new Date(autoTime);
curData.setSeconds(curData.getSeconds() + (60 * limitPayTime));
// console.log(new Date(autoTime), new Date(c_time*1000));
// let limitPayTime = 60 //
// let curData = new Date(autoTime);
let curData = new Date(c_time*1000 || new Date(autoTime).getSeconds() + (60*30)); // 使, 30
// curData.setSeconds(curData.getSeconds() + (60 * limitPayTime));
this.be_overdue = curData.getFullYear() + '-' + (curData.getMonth() + 1) + '-' + curData.getDate() +
' ' +
curData.getHours() + ':' +
(curData.getMinutes() > 10 ? curData.getMinutes() : "0" + curData.getMinutes())
(curData.getMinutes() > 9 ? curData.getMinutes() : "0" + curData.getMinutes())
return
}

View File

@ -139,7 +139,7 @@
text: '展开更多',
timer: null,
product_type: '',
source: null
};
},
computed: mapGetters(['isLogin', 'viewColor', 'keyColor']),
@ -152,6 +152,7 @@
});
this.orderId = options.order_id;
this.order_type = options.order_type;
this.source = options.source || null;
this.status = options.status || 0;
this.msg = options.msg || '';
this.product_type = options.product_type
@ -221,10 +222,10 @@
*/
goOrderDetails: function(val) {
let that = this;
if (this.product_type == 98) {
if (this.product_type == 98 && this.source!=103) {
if(val==1){
uni.navigateTo({
url: `/pages/users/order_list/indexCopy?status=1&product_type=${this.product_type}`
url: `/pages/users/order_list/indexCopy?status=2&product_type=${this.product_type}`
})
}else{
uni.navigateTo({
@ -232,10 +233,10 @@
})
}
} else if (this.product_type == 99) {
} else if (this.product_type == 99 && this.source!=103) {
if(val==1){
uni.navigateTo({
url: `/pages/users/order_list/relase?status=1&product_type=${this.product_type}`
url: `/pages/users/order_list/relase?status=2&product_type=${this.product_type}`
})
}else{
uni.navigateTo({
@ -246,7 +247,7 @@
} else {
if(val==1){
uni.navigateTo({
url: '/pages/users/order_list/index?status=1&product_type=0'
url: '/pages/users/order_list/index?status=2&product_type=0'
})
}else{
uni.navigateTo({

View File

@ -264,7 +264,8 @@
<image src="../static/images/no_content.png"></image>
<text>内容不存在可能被删除了哦~</text>
<navigator class="btn" :open-type="open_grass ? 'switchTab' : 'navigate'"
url="/pages/plant_grass/index">返回首页</navigator>
url="/pages/index/index">返回首页</navigator>
</view>
</view>
<!-- 他提到的宝贝弹窗 -->
@ -532,9 +533,9 @@
that.followDetail = null
that.loadData = false
uni.hideLoading()
return that.$util.Tips({
title: err
});
// return that.$util.Tips({
// title: err
// });
})
},
/*获取评论*/

View File

@ -4,11 +4,6 @@
<view class="content_list">
<view class="content_list_item">
<view>商品详情</view>
<!-- <view class="content_list_item_han">
<span v-if="disModel" style="color: #000000">去修改</span>
<span v-else>设置详情</span>
<span class="iconfont">&#xe6bd;</span>
</view> -->
</view>
<input-goods-detils class="input-goods-detils" @getProductContent="getProductContent" :title="store_name" :prodectContent="goodsDis" :maxLength="200"></input-goods-detils>
<block v-if="!moreThanFlag">
@ -224,11 +219,11 @@
if (this.product_id) {
// editGoodsDetils = getStorage('editGoodsDetils');
editGoodsDetils = this.$store.state.storage.storage;
console.log(editGoodsDetils);
// console.log('ss',editGoodsDetils.content);
// editGoodsDetils = getStorage('editGoodsDetils');
// console.log('',editGoodsDetils);
Object.keys(this.addGoodsSecoundData).forEach(item => {
console.log(item, editGoodsDetils[item]);
// console.log(item, editGoodsDetils[item]);
this.addGoodsSecoundData[item] = editGoodsDetils[item];
});

View File

@ -3,7 +3,7 @@
<view class="step_one" v-if="step == 1">
<view class="input_content">
<view class="bar-code" v-if="bar_code_dis">
<view>商品</view>
<view>商品</view>
<!-- <view>{{ singleSpecification.bar_code }}</view> -->
<input type="number" placeholder="请手动添加条码" v-model="code" :disabled="bar_code_dis"
placeholder-class="inputPlaceHolder" />
@ -11,14 +11,16 @@
<view class="input_content_textarea">
<textarea v-model="setFormData.store_name" placeholder="请输入商品名称" placeholder-class="placeholderStyle"
maxlength="60" />
<view class="flex" style="justify-content: space-between;color: #999999;">
<view>(品牌,名称,规格,口味)</view>
<view>
<text v-if="setFormData.store_name">{{ setFormData.store_name.length }}</text>
<text v-else>0</text>
/60
<text v-else>0</text>/60
</view>
</view>
</view>
<view class="photo_count">
<text class="photo_size">建议图片尺寸为750*750px</text>
<text class="photo_size" style="color: #e93323;">建议图片尺寸为750*750px, 上传2张以上</text>
<view class="input_content_photo">
<view class="input_content_photo_adPh" v-for="(item, index) in setFormData.imageList" :key="index">
<image :src="item" class="myimg2 photos" @click="pop(item)"></image>
@ -84,7 +86,7 @@
</view>
</view>
<priceComponent :product_id="product_id" v-if="showCommodity"></priceComponent>
<priceComponent :product_id="product_id" :bar_code="code" @updateCode = "updateCode" v-if="showCommodity"></priceComponent>
<!-- <view class="popup_group">
<view class="radio">
@ -168,15 +170,15 @@
</commodityComponent>
<view class="popup_group">
<view class="popup_group_item" @click="showMoreInfo=!showMoreInfo">
<!-- <view class="popup_group_item" @click="showMoreInfo=!showMoreInfo">
<view class="popup_group_item_label">更多信息</view>
<view class="popup_group_item_value" :class="showMoreInfo?'icon_bottom':'icon_top'">
<view><span class="iconfont">&#xe6bd;</span></view>
</view>
</view>
<block v-if="showMoreInfo">
</view> -->
<block >
<view class="input_content">
<view class="input_content_describe" style="border-top: none">
<!-- <view class="input_content_describe" style="border-top: none">
<view class="input_content_describe_title">
<view class="input_content_describe_title_msg">商品简介</view>
<view class="input_content_describe_title_num">
@ -189,7 +191,7 @@
<textarea v-model="setFormData.store_info" value="" placeholder="请填写商品简介"
placeholderClass="placeholderClass" maxlength="200" />
</view>
</view>
</view> -->
<view class="input_content_keyword">
<view class="input_content_keyword_label">关键字</view>
@ -437,6 +439,8 @@
// this.getDeliveryType();
if (this.product_id) {
this.initDataEditData();
}else {
setStorage('editCommodity',{});
}
},
onBackPress() {
@ -584,6 +588,7 @@
}
productDetail(this.merId, this.product_id).then(res => {
setStorage('editGoodsDetils', res.data);
if(res.data.content_arr.length>0) res.data.content = res.data.content_arr;
this.$store.commit('setStorage', res.data);
let editGoodsDetils = res.data;
Object.keys(this.setFormData).forEach(item => {
@ -627,7 +632,6 @@
let that = this;
that.$util.uploadImageOne('upload/image', function(res) {
that.setFormData.imageList.push(res.data.path);
});
},
clk() {
@ -797,6 +801,10 @@
return;
}
},
//
updateCode(e){
this.code = e + '';
},
//
// switch
switchChange(value, item) {

View File

@ -40,8 +40,8 @@
<view v-if="item.more_thanFlag">
<view class="multiSpecifica_container_item">
<view class="multiSpecifica_container_item_label flex-start">商品编号</view>
<view class="multiSpecifica_container_item_value"><input v-model="item.bar_code" type="text" placeholder="请填写商品编号" /></view>
<view class="multiSpecifica_container_item_label flex-start">商品条码</view>
<view class="multiSpecifica_container_item_value"><input v-model="item.bar_code" type="text" placeholder="请填写商品条码" /></view>
</view>
<view class="multiSpecifica_container_item">
@ -114,7 +114,7 @@
<view v-if="popupOpenModel">
<view class="changePopup_container_content_item">
<view class="changePopup_container_content_item_label">商品编号</view>
<view class="changePopup_container_content_item_label">商品条码</view>
<view class="changePopup_container_content_item_value"><input v-model="batchData.bar_code" type="text" placeholder="0.00" /></view>
</view>
@ -171,7 +171,7 @@ export default {
price: '', //
cost: '', //
ot_price: '', //
bar_code: '', //
bar_code: '', //
weight: '', //
volume: '', //
extension_one: '', //

View File

@ -22,15 +22,15 @@
components: {
selectForm
},
props: ['product_id'],
props: ['product_id', 'bar_code'],
data() {
return {
singleSpecification: {
price: '', //
cost: '', //
stock: '', //
ot_price: '', //
bar_code: '', //
ot_price: '', //
bar_code: '', //
weight: '', //
volume: '', //
image: '',
@ -43,49 +43,56 @@
label: '售价',
type: 'digit',
model: 'price',
holder: '请填写售价'
holder: '请填写售价',
require: true,
}, {
id: 10,
label: '库存',
type: 'digit',
model: 'stock',
holder: '请填写库存',
disable: true
}],
moreThanList: [{
disable: true,
require: true,
}, {
id: 2,
label: '成本价',
type: 'digit',
holder: '请填写成本价',
model: 'cost'
model: 'cost',
require: true,
},
{
id: 3,
label: '价',
label: '批发价',
type: 'digit',
holder: '请填写原价',
model: 'ot_price'
},
{
id: 5,
label: '商品编号',
type: 'input',
holder: '请填写商品编号',
model: 'bar_code'
},
{
holder: '请填写批发价',
model: 'ot_price',
require: true,
}
],
moreThanList: [{
id: 6,
label: '重量',
type: 'digit',
holder: '请输入重量',
model: 'weight'
model: 'weight',
require: false,
},
{
id: 7,
label: '体积',
type: 'digit',
holder: '请输入体积',
model: 'volume'
model: 'volume',
require: false,
},
{
id: 5,
label: '商品条码',
type: 'input',
holder: '请填写商品条码',
model: 'bar_code',
require: false,
},
// {
// id: 8,
@ -108,12 +115,13 @@
watch: {
singleSpecification: {
handler(val) {
handler(val, old) {
this.singleSpecification = val;
this.saveSingleSpecification();
this.$emit('updateCode', val.bar_code);
},
deep: true
}
},
},
// onLoad(option) {
// console.log(option);
@ -148,6 +156,7 @@
}
})
}
this.singleSpecification.bar_code = this.$props.bar_code + '';
// if (!this.$props.product_id) {
// this.formList.push({
// id: 10,
@ -170,7 +179,7 @@
spliceMoreThan() {
this.moreThanFlag = true;
// this.formList.splice(!this.$props.product_id ? 2 : 1, this.formList.length);
this.formList.splice(2, this.formList.length);
this.formList.splice(4, this.formList.length);
},
input(val) {
this.singleSpecification = val

View File

@ -263,16 +263,18 @@
Object.keys(info).forEach(key=>{
postData[key]=info[key];
})
postData.stock = postData.attrValue[0].stock;
console.log(postData);
if(postData.store_name.trim().length<=0)return Toast('请输入商品名称');
if(postData.imageList.length<=0)return Toast('请上传商品图片');
if(postData.cate_name.trim().length<=0)return Toast('请选择平台分类');
if(postData.unit_name.trim().length<=0)return Toast('请输入商品单位');
if(!postData.attrValue[0].price||postData.attrValue[0].price<0)return Toast('价格不能小于0');
postData.stock = postData.attrValue[0]?.stock;
// console.log(postData);
if(!postData.store_name||postData.store_name?.trim().length<=0)return Toast('请输入商品名称');
if(!postData.imageList||postData.imageList?.length<2)return Toast('请上传2张以上商品图片');
if(!postData.cate_name||postData.cate_name?.trim().length<=0)return Toast('请选择平台分类');
if(!postData.unit_name||postData.unit_name?.trim().length<=0)return Toast('请输入商品单位');
if(!postData.attrValue[0]?.price||postData.attrValue[0]?.price<0)return Toast('价格不能小于0');
if(!postData.stock||postData.stock<0)return Toast('库存不能小于0');
if(postData.content.title.trim().length<=0)return Toast('请输入商品详情');
if(postData.content.image.length<=0)return Toast('请上传商品图片');
if(!postData.attrValue[0]?.cost||postData.attrValue[0]?.cost<0)return Toast('成本价不能小于0');
if(!postData.attrValue[0]?.ot_price||postData.attrValue[0]?.ot_price<0)return Toast('批发价不能小于0');
// if(!postData.content.title||postData.content.title?.trim().length<=0)return Toast('');
// if(!postData.content.image||postData.content.image?.length<=0)return Toast('');
// return Toast('');
if (getStorage('addGoodsFormData').spec_type == 0) {
// postData.attr = [getStorage('singleSpecification')];

View File

@ -26,7 +26,7 @@
price: '', //
cost: '', //
ot_price: '', //
bar_code: '', //
bar_code: '', //
weight: '', //
volume: '', //
image: '',
@ -60,9 +60,9 @@
moreThanList: [
{
id: 5,
label: '商品编号',
label: '商品条码',
type: 'input',
holder: '请填写商品编号',
holder: '请填写商品条码',
model: 'bar_code'
},
{

View File

@ -9,8 +9,8 @@
<block v-if="images[0].img">
<!-- <u--image :showLoading="true" :src="images[0].img" width="388px" height="210.53rpx" radius="4px"
@click="delImg(0)" mode="aspectFit"></u--image> -->
<u--image :showLoading="true" :src="images[0].img" width="360px" height="210.53rpx" radius="4px"
@click="delImg(2)"></u--image>
<u--image :showLoading="true" :src="images[0].img" width="680rpx" height="210.53rpx" radius="4px"
@click="delImg(0)"></u--image>
</block>
<view v-else class="upload" @click="seleckImage(0)">
<view class="iconfont icon-tupian1"></view>
@ -56,7 +56,7 @@
<view class="street_bg">
<view class="text flex_a_c"> <i class="iconfont icon-xinghao"></i> 店铺街背景图</view>
<block v-if="images[2].img">
<u--image :showLoading="true" :src="images[2].img" width="360px" height="210.53rpx" radius="4px"
<u--image :showLoading="true" :src="images[2].img" width="680rpx" height="210.53rpx" radius="4px"
@click="delImg(2)"></u--image>
</block>
<view v-else class="street_img flex_a_c" @click="seleckImage(2)">
@ -74,9 +74,11 @@
<view class="flex_a_c">
<text class="sub_title">配送方式</text>
<view class="flex">
<checkbox-group name="" @change="checkboxChange" >
<checkbox disabled='true' :checked="isZiti" :value="check.ziti" /><text class="text ziti">到店自提(加入供应链)</text>
<checkbox disabled='true' :checked="isKuaidi" :value="check.kuaidi" /><text class="text">快递配送</text>
<checkbox-group name="" @change="checkboxChange">
<checkbox disabled='true' :checked="isZiti" :value="check.ziti" /><text
class="text ziti">到店自提(加入供应链)</text>
<checkbox disabled='true' :checked="isKuaidi" :value="check.kuaidi" /><text
class="text">快递配送</text>
</checkbox-group>
</view>
</view>
@ -110,10 +112,12 @@
<view class="sub_title flex_a_c"><i class="iconfont icon-xinghao"></i>店铺营业时间:</view>
<view class="bus_time flex_a_c">
<view class="select" @click="beginTimeShow = true">
{{ mer_take_time[0] ? mer_take_time[0] : '选择开始时间' }}</view>
{{ mer_take_time[0] ? mer_take_time[0] : '选择开始时间' }}
</view>
<view class="select" @click="overTimeShow = true">
{{ mer_take_time[1] ? mer_take_time[1] : '选择结束时间' }}</view>
{{ mer_take_time[1] ? mer_take_time[1] : '选择结束时间' }}
</view>
</view>
</block>
</view>
@ -178,6 +182,7 @@
Toast
} from '@/libs/uniApi.js'
import { wgsToGcj } from "@/utils/wgs.js";
import {
merchantUpdateAPI,
merchantInfoAPI
@ -221,7 +226,7 @@
},
isZiti: false,
isKuaidi: false,
delivery_way: [1,2],
delivery_way: [1, 2],
takeName: '',
takePhone: '',
servicePhone: '',
@ -271,8 +276,8 @@
credit_buy: false, //
interest_rate: '', //
settle_cycle: '', //
mer_name:'',
type_code:''
mer_name: '',
type_code: ''
}
},
onLoad(e) {
@ -288,7 +293,7 @@
merchantInfoAPI({
id
}).then(res => {
this.mer_name= res.data.mer_name
this.mer_name = res.data.mer_name
this.images[0].img = res.data.mer_banner
this.images[1].img = res.data.mer_avatar
this.images[2].img = res.data.mini_banner
@ -305,7 +310,7 @@
res.data.mer_take_day.forEach((item, i) => {
this.dateWeek[Number(item) - 1].isCheck = true
})
this.type_code= res.data.type_code
this.type_code = res.data.type_code
this.mer_take_time = res.data.mer_take_time
this.intro = res.data.mer_info
this.cruxText = res.data.mer_keyword
@ -374,7 +379,7 @@
mer_avatar: this.images[1].img,
mini_banner: this.images[2].img,
mer_certificate: this.images[3].img,
delivery_way: [1,2],
delivery_way: [1, 2],
mer_take_name: this.takeName,
mer_take_phone: this.takePhone,
mer_take_address: this.detailSite,
@ -408,7 +413,7 @@
// url:'/pages/moreProject/moreProject'
// })
uni.redirectTo({
url:'/pages/moreProject/moreProject'
url: '/pages/moreProject/moreProject'
})
}, 1000)
@ -421,6 +426,7 @@
uni.getLocation({
type: 'wgs84',
success: (res) => {
res = wgsToGcj(res);
// console.log(res);
this.latitude = res.latitude.toString();
this.longitude = res.longitude.toString();

View File

@ -111,7 +111,7 @@
}
},
mounted() {
console.log(this.$props.prodectContent);
// console.log(this.$props.prodectContent);
},
methods: {
handleChooseImage() {
@ -143,10 +143,11 @@
[TOKENNAME]: 'Bearer ' + store.state.app.token
},
success: (uploadFileRes) => {
// console.log(uploadFileRes.data);
// console.log(JSON.parse(uploadFileRes.data));
let imgData = JSON.parse(uploadFileRes.data)
// that.prodectContent.imageList.push(imgData.data.path)
that.prodectContent = { imageList: [...that.prodectContent.imageList, imgData.data.path] ,store_name:this.upstore}
if(!that.prodectContent.imageList)that.prodectContent.imageList=[];
that.prodectContent = { imageList: [...that.prodectContent.imageList, imgData.data.path] ,store_name:this.upstore};
},
complete(res) {
// console.log(res)

View File

@ -490,7 +490,6 @@
that.loading = false;
that.loaded = res.data.list.length < that.where.limit;
that.productList.push.apply(that.productList, res.data.list);
that.where.page = that.where.page + 1;
},

View File

@ -0,0 +1,220 @@
<template>
<view class="red_body">
<view class="bg">
<image mode="widthFix" src="/static/active/redpack_type_img.webp"></image>
<view class="border"></view>
</view>
<view class="bg_back">
<image @click="back" class="bc_image" src="https://lihai001.oss-cn-chengdu.aliyuncs.com/public/uploads/new_activity/back.png"></image>
<view class="title">红包余额</view>
</view>
<view class="r_list" v-for="(item, index) in list" :key="index">
<view class="r_item" @click="navgo(item)">
<image class="r_bg" src="/static/active/red_packet.webp"></image>
<view class="r_body">
<view class="r_count">
<view class="rc_count">
<text class="rc_icon"></text>{{item.total_amount}}
</view>
</view>
<view class="r_content">
<view class="r_name">{{item.type_cn}}</view>
</view>
<view class="r_btn">
查看
</view>
</view>
</view>
</view>
<view style="width: 100%;height: 260rpx;"></view>
<view class="activity">
<image mode="widthFix" @click="navTo()" src="https://lihai001.oss-cn-chengdu.aliyuncs.com/public/uploads/new_activity/activity1.webp"></image>
</view>
</view>
</template>
<script>
import { storeActivityTotal } from "@/api/activity.js"
export default {
data() {
return {
list: []
}
},
onLoad() {},
onShow() {
this.storeActivityTotal();
},
methods: {
storeActivityTotal(){
storeActivityTotal().then(res=>{
this.list = res.data;
})
},
back(){
uni.navigateBack();
},
navgo(item){
if(item.type==1) uni.navigateTo({
url: '/pages/newActivity/subsidy/subsidy2'
})
else if(item.type==2) uni.navigateTo({
url: '/pages/newActivity/subsidy/subsidy3'
})
},
navTo(){
let address = this.$store.state.storage.address;
let location = this.$store.state.storage.location;
if(address.street_id){
uni.navigateTo({
url: `/pages/nongKe/cloud_entrepot/indexh?street_id=${address.street_id}&townName=${address.townName}&source=103&location=${location.lat},${location.long}`
})
}else uni.navigateTo({
url: `/pages/nongKe/cloud_entrepot/indexh`
})
}
},
onPullDownRefresh() {
uni.stopPullDownRefresh()
}
}
</script>
<style lang="scss">
.red_body{
position: relative;
background: linear-gradient(to top, rgb(255,231,185), rgb(255,249,231) 480rpx);
min-height: calc(100vh);
.bg{
width: 750rpx;
height: 480rpx;
overflow: hidden;
position: relative;
image{
width: 100%;
height: 100%;
}
.border{
position: absolute;
bottom: 0;
left: 0;
width: 100%;
height: 30rpx;
border-radius: 30rpx 30rpx 0 0;
background-color: rgb(255,249,231);
}
}
.bg_back{
position: absolute;
top: var(--status-bar-height);
left: 0;
width: 100%;
padding: 30rpx;
color: #fff;
display: flex;
text-align: center;
.bc_image{
height: 34rpx;
width: 20rpx;
}
.title{
position: absolute;
top: 30rpx;
left: 50%;
transform: translate(-50%);
}
}
}
.r_list {
padding: 0 20rpx 20rpx 20rpx;
.r_item {
height: 156rpx;
width: 710rpx;
position: relative;
.r_bg {
width: 100%;
height: 100%;
}
.r_body {
position: absolute;
top: 0;
left: 0;
bottom: 0;
right: 0;
display: flex;
align-items: center;
.r_count {
flex: 2;
display: flex;
justify-content: center;
align-items: center;
color: #A46F32;
font-size: 44rpx;
font-weight: bold;
.rc_count {
display: flex;
align-items: flex-end;
}
.rc_icon {
font-size: 28rpx;
font-weight: 500;
margin-bottom: 8rpx;
}
}
.r_content {
flex: 4;
color: #FFF3CC;
font-size: 24rpx;
padding: 18rpx 10rpx 18rpx 40rpx;
display: flex;
flex-direction: column;
justify-content: center;
.r_name {
font-size: 32rpx;
font-weight: 500;
margin-bottom: 10rpx;
}
view {
width: 100%;
overflow: hidden;
/* 隐藏超出宽度的文本 */
white-space: nowrap;
/* 不换行 */
text-overflow: ellipsis;
/* 文本末尾显示省略号 */
}
}
.r_btn {
flex: 1;
display: flex;
justify-content: center;
align-items: center;
color: #FFF3CC;
height: 59rpx;
border-radius: 28rpx 28rpx 28rpx 28rpx;
opacity: 1;
border: 1rpx solid #FFF3CC;
margin-right: 20rpx;
}
}
}
}
.activity{
position: fixed;
bottom: 100rpx;
padding: 20rpx;
image{
width: 710rpx;
}
}
</style>

View File

@ -0,0 +1,313 @@
<template>
<view class="">
<!-- <block v-for="(item, index) in info">
<block v-if="item.type==1">
<view class="type_name">无门槛实物通用红包<text class="n_count">(2)</text></view>
<view class="r_list" v-for="(e, i) in item.list">
<view class="r_item" @click="change(index, i)">
<image class="r_bg" src="/static/active/red_packet.webp"></image>
<view class="r_body">
<view class="r_count">
<view class="rc_count">
<text class="rc_icon"></text>240
</view>
</view>
<view class="r_content">
<view class="r_name">现金抵扣红包</view>
<view>仅限平台指定商家商品可使用</view>
<view>有效期至 2026.01.15 24:00:00</view>
</view>
<view class="r_icon">
<u-icon v-if="changeRed.type == index && changeRed.id == i" name="checkmark-circle-fill" color="#FFF3CC" size="56rpx"></u-icon>
<u-icon v-else name="checkmark-circle" color="#FFF3CC" size="56rpx"></u-icon>
</view>
</view>
</view>
</view>
</block>
<block v-if="item.type==2">
<view class="type_name">不可使用红包<text class="n_count">(2)</text></view>
<view class="none_list" v-for="(e, i) in item.list">
<view class="r_body">
<view class="r_count">
<view class="rc_count">
<text class="rc_icon"></text>200
</view>
</view>
<view class="r_content">
<view class="r_name">现金抵扣红包</view>
<view>仅限平台指定商家商品可使用</view>
<view>有效期至 2026.01.15 24:00:00</view>
</view>
</view>
<u-line dashed color="#999999"></u-line>
<view class="n_tips">本单不可用原因未在平台指定店铺使用</view>
</view>
</block>
</block> -->
<view style="height: 30rpx;"></view>
<view class="r_list" v-for="(item, i) in list" :key="i">
<view class="r_item" @click="change(item)">
<image class="r_bg" src="/static/active/red_packet.webp"></image>
<view class="r_body">
<view class="r_count">
<view class="rc_count">
<text class="rc_icon"></text>{{item.balance}}
</view>
</view>
<view class="r_content">
<view class="r_name">{{item.coupon_title}}</view>
<view>{{item.describe}}</view>
<view>有效期至 {{item.end_time}}</view>
</view>
<view class="r_icon">
<u-icon v-if="changeRed&&changeRed.coupon_user_id==item.coupon_user_id" name="checkmark-circle-fill" color="#FFF3CC" size="56rpx"></u-icon>
<!-- <u-icon v-else name="checkmark-circle" color="#FFF3CC" size="56rpx"></u-icon> -->
<view v-else style="height: 50rpx;width: 50rpx;border-radius: 50%;border: 5rpx solid #FFF3CC;"></view>
</view>
</view>
</view>
</view>
<view class="footer">
<view>
<text>已选 {{ changeRed?1:0 }} </text>
<view v-if="changeRed&&changeRed.coupon_title.includes('抵扣红包')" style="font-size: 24rpx;margin-left: 10rpx;color: #ed4c3a;">(使用红包后此订单将不参与任何补贴活动)</view>
<view v-if="changeRed&&changeRed.coupon_title.includes('通用红包')" style="font-size: 24rpx;margin-left: 10rpx;color: #ed4c3a;">(使用红包后此订单将不参与用户消费补贴活动)</view>
<!-- , 可减 <text class="red_i">¥</text> <text class="red_c">0</text> -->
</view>
<view class="btn" @click="comfirm">确定</view>
</view>
</view>
</template>
<script>
export default {
data() {
return {
info: [
{
type: 1, // 使
name: '无门槛实物通用红包',
list: [1, 2]
},
{
type: 1, // 使
name: '现金抵扣红包',
list: [1,2,3]
},
{
type: 2, // 使, 2使
name: '不可使用红包',
list: [1]
}
],
list: [],
changeRed: null,
}
},
onLoad(option) {
const eventChannel = this.getOpenerEventChannel();
// acceptDataFromOpenerPageeventChannel
eventChannel.on('changeRedPacketInfo', (data) => {
console.log(data);
this.list = data;
})
},
onShow() {},
methods: {
change(e, i) {
console.log(e, i);
if(this.changeRed&&this.changeRed.coupon_user_id==e.coupon_user_id)this.changeRed = null;
else this.changeRed = e;
},
comfirm(){
uni.$emit('changeRedPacket', this.changeRed?.coupon_user_id||'');
uni.navigateBack()
}
},
onPullDownRefresh() {
uni.stopPullDownRefresh()
}
}
</script>
<style lang="scss">
page{
background-color: #fff;
}
.type_name{
padding: 20rpx;
font-size: 28rpx;
.n_count{
color: #7A7A7A;
font-size: 24rpx;
margin-left: 10rpx;
}
}
.r_list {
padding: 0 20rpx 20rpx 20rpx;
.r_item {
height: 156rpx;
width: 710rpx;
position: relative;
.r_bg {
width: 100%;
height: 100%;
}
.r_body {
position: absolute;
top: 0;
left: 0;
bottom: 0;
right: 0;
display: flex;
.r_count {
flex: 2;
display: flex;
justify-content: center;
align-items: center;
color: #A46F32;
font-size: 44rpx;
font-weight: bold;
.rc_count {
display: flex;
align-items: flex-end;
}
.rc_icon {
font-size: 28rpx;
font-weight: 500;
margin-bottom: 8rpx;
}
}
.r_content {
flex: 4;
color: #FFF3CC;
font-size: 24rpx;
padding: 18rpx 10rpx 18rpx 40rpx;
display: flex;
flex-direction: column;
justify-content: space-between;
.r_name {
font-size: 32rpx;
font-weight: 500;
margin-bottom: 10rpx;
}
view{
width: 100%;
overflow: hidden; /* 隐藏超出宽度的文本 */
white-space: nowrap; /* 不换行 */
text-overflow: ellipsis; /* 文本末尾显示省略号 */
}
}
.r_icon {
flex: 1;
display: flex;
align-items: center;
}
}
}
}
.none_list{
margin: 0 20rpx 20rpx 20rpx;
background-color: #E2E2E2;
border-radius: 20rpx;
.r_body {
height: 156rpx;
width: 710rpx;
display: flex;
.r_count {
flex: 2;
display: flex;
justify-content: center;
align-items: center;
color: #333;
font-size: 44rpx;
font-weight: bold;
.rc_count {
display: flex;
align-items: flex-end;
}
.rc_icon {
font-size: 28rpx;
font-weight: 500;
margin-bottom: 8rpx;
}
}
.r_content {
flex: 5;
color: #333;
font-size: 24rpx;
padding: 18rpx 10rpx 18rpx 40rpx;
display: flex;
flex-direction: column;
justify-content: space-between;
.r_name {
font-size: 32rpx;
font-weight: 500;
margin-bottom: 10rpx;
}
view{
width: 100%;
overflow: hidden; /* 隐藏超出宽度的文本 */
white-space: nowrap; /* 不换行 */
text-overflow: ellipsis; /* 文本末尾显示省略号 */
}
}
}
.n_tips{
padding: 10rpx 30rpx 20rpx 30rpx;
color: #333;
font-size: 24rpx;
}
}
.footer{
height: 130rpx;
padding: 30rpx;
width: 100%;
position: fixed;
bottom: 0;
left: 0;
background-color: #F6F6F6;
display: flex;
justify-content: space-between;
align-items: center;
font-size: 28rpx;
.red_i{
color: #FF421D;
margin-left: 20rpx;
}
.red_c{
color: #FF421D;
font-size: 44rpx;
}
.btn{
width: 128rpx;
height: 68rpx;
background-color: #EC693F;
border-radius: 34rpx;
display: flex;
justify-content: center;
align-items: center;
color: #fff;
}
}
</style>

104
pages/room/histroyroom.nvue Normal file
View File

@ -0,0 +1,104 @@
<template>
<view class="container">
<view :style="'width: '+ windowWidth +'px; height: '+ boxStyle.height +'px;z-inde:-1;'">
<!--
1.这里的 swiper 不是用来控制视频滑动的,而是用来控制左右滑动的,如果不需要的可以改成 view
2.为了 视频无限加载,已经把 21 行的 appear 去掉了,加上了 loadmore 方法第10行
3.由于方法比较多,可以采取下面的方式查看代码:
1Mac按住 option 键,然后点击方法名,即可跳转到方法
2windows按住 Alt 键,然后鼠标左击,即可跳转到方法
-->
<view class="root">
<video ref="videoPlayer" :src="currentSrc" controls @ended="playNext" :object-fit="object_fit" :style="'width: '+ windowWidth +'px; height: '+ boxStyle.height +'px;z-inde:-1;'"></video>
</view>
<sd-float-page :room='room' :msgList='msgList'
:style="'width: '+ windowWidth +'px; height: '+ boxStyle.height +'px;position: absolute;' "></sd-float-page>
</view>
</view>
</template>
<script>
import sdFloatPage from '@/components/sd-live-page/histroy.nvue';
import {
playbackDetail
} from '@/api/live.js'
export default {
components: {
sdFloatPage
},
data() {
return {
rtmpSources: [],
currentIndex: 0,
room: {},
wHeight: 0, //获取的屏幕高度🌟💗
boxStyle: { //视频,图片封面样式🌟💗
'height': 0,
'width': 0,
},
object_fit: 'cover', //视频样式默认包含🌟💗
}
},
computed: {
currentSrc() {
return this.rtmpSources[this.currentIndex];
}
},
onLoad(options) {
this.room = JSON.parse(decodeURIComponent(options.data));
this.platform = uni.getSystemInfoSync().platform
this.windowWidth = uni.getSystemInfoSync().screenWidth //获取屏幕宽度
this.boxStyle.width = this.windowWidth + 'px' //给宽度加px
this.wHeight = uni.getSystemInfoSync().screenHeight; //获取屏幕高度
this.boxStyle.height = this.wHeight; //改变视频高度
this.get()
},
mounted() {
// 初始化时播放第一个源
this.playCurrent();
},
methods: {
playCurrent() {
this.$refs.videoPlayer.load();
this.$refs.videoPlayer.play();
},
playNext() {
this.currentIndex++;
if (this.currentIndex >= this.rtmpSources.length) {
this.currentIndex = 0; // 回到第一个源
}
this.playCurrent();
},
get() {
let that = this
// console.log(this.room)
playbackDetail({
app_name: 'shop',
live_stream_id: this.room.live_stream_id
}).then((res) => {
console.log(res.data, '1111')
this.rtmpSources = res.data.playback_url;
})
},
},
}
</script>
<style lang="scss" scoped>
</style>

508
pages/room/index.vue Normal file
View File

@ -0,0 +1,508 @@
<template>
<view class="view_body">
<view>
<view class="search_content flex_a_c_j_sb">
<view class="flex_a_c">
<view class="iconfont icon-sousuo" style="font-size: 39rpx;"></view>
<input type="text" v-model="keyword" placeholder="搜索主播或关键字" placeholder-style="font-size: 30rpx;"
@input="change">
</view>
<button class="search_btn" @click="search">搜索</button>
</view>
<view class="banner">
<view class="banner-detail" v-for="(item,i) in list" :key='i' @click="zhisort(i)">
<view class="banner-name">
{{item.name}}
</view>
<view class="banner-t" v-if="isindex==i">
</view>
</view>
</view>
<scroll-view scroll-top="0" scroll-y="true" class="goods_body_scroll" v-if="isindex==0">
<view class="roomsbox">
<view class="roomblock" v-for="(room,index) in roomList" :key="index" @click="jump(room)"
style="border: 1px solid #e1d9d4;">
<image :src="room.cover" mode="aspectFill" v-if="room.cover"></image>
<image src="/static/lw/6.gif" mode="aspectFill" v-else></image>
<view class="livetitle">{{room.live_name}}</view>
<view class="roomstatus-d" v-if="room.status==1" style="background-color: #09BB07;">
</view>
<view class="roomstatus-d" v-else style="background-color: #fa2306;">
</view>
<view class="roomstatus" style="color: #00B26A;" v-if="room.status==1">直播中
</view>
<view class="roomstatus" style="color: #fa2306;" v-else>已停播
</view>
</view>
</view>
</scroll-view>
<scroll-view scroll-top="0" scroll-y="true" class="goods_body_scroll" v-if="isindex==1">
<view v-for="(pp,index) in dataList" :key="index">
<view class="roomsbox-a">
<view class="roomsbox-title">
{{pp.date}}
</view>
<view class="roomsbox">
<view class="roomblock" style="border: 1px solid #e1d9d4;" v-for="(room,j) in pp.records"
:key="j" @click="hsitroyjump(room)">
<image :src="room.cover" mode="aspectFill" v-if="room.cover"></image>
<image src="/static/lw/6.gif" mode="aspectFill" v-else></image>
<view class="livetitle">{{room.live_name}}</view>
<view class="roomstatus-d" v-if="room.status==1" style="background-color: #09BB07;">
</view>
<view class="roomstatus-d" v-else style="background-color: #fa2306;">
</view>
<view class="roomstatus-d" v-if="room.status==3" style="background-color: #e1d9d4;">
</view>
<view class="roomstatus" style="color: #00B26A;" v-if="room.status==1">直播中
</view>
<view class="roomstatus" style="color: #fa2306;" v-else>已停播
</view>
</view>
</view>
</view>
</view>
</scroll-view>
<view class="noshuju" v-if="roomList.length==0&&isindex==0">
<emptyPage title="暂无房间信息"></emptyPage>
</view>
<view class="noshuju" v-if="dataList.length==0&&isindex==1">
<emptyPage title="暂无房间信息"></emptyPage>
</view>
</view>
</view>
</template>
<script>
import emptyPage from '@/components/emptyPage.vue';
import {
live,
playbackList
} from '@/api/live.js'
export default {
components: {
emptyPage
},
data() {
return {
keyword: '',
device_height: 380,
page: 1,
dataindex: 1,
page_data: true,
list: [{
name: '直播精选'
},
{
name: '历史直播'
},
],
roomList: [],
dataList:[],
user: [],
index: 0,
isGetLoginInfo: true,
isindex: 0,
};
},
onLoad() {
},
mounted() {
this.getRoomList()
this.getbackList()
},
onShow() {},
onReachBottom() {
this.getRoomList()
},
onPullDownRefresh: function() {
console.log('下拉刷新')
this.getRoomList()
this.getbackList()
},
methods: {
//
change(e) {
// console.log(e)
if (e.detail.value.length <= 0) {
this.page = 1
this.getRoomList()
}
},
//
search() {
this.page = 1
this.roomList=[]
this.dataList=[]
if (this.isindex == 0) {
this.getRoomList()
} else {
this.getbackList()
}
},
//
zhisort(i) {
this.isindex = i
this.page = 1
this.keyword=''
this.roomList=[]
this.dataList=[]
if (i == 0) {
this.getRoomList()
} else {
this.getbackList()
}
},
getbackList: function() {
playbackList({
page_size: 100,
page: this.page,
app_name: 'shop',
keyword: this.keyword
}).then(res => {
if (res.data.lists.length > 0) {
//
let result = [];
//
for (let i = 0; i < res.data.lists.length; i++) {
let record = res.data.lists[i];
let date = record.date;
//
let group = result.find((item) => item.date === date);
//
if (!group) {
group = {
date: date,
records: []
};
result.push(group);
}
//
group.records.push(record);
}
this.dataList = result
//
}
})
},
/**
* 拉取房间列表
* @return {[type]}
* [description]
*/
getRoomList() {
live({
page_size: 10,
page: this.page,
app_name: 'shop',
keyword: this.keyword
}).then(res => {
if (res.data.code = 1) {
uni.hideLoading()
if (res.data.lists.length > 0) {
let list = res.data.lists;
let productList = this.$util.SplitArray(list, this.roomList);
setTimeout(() => {
this.$set(this, 'roomList', productList);
}, 500)
this.page = this.page + 1
}
}else{
uni.showModal({
title:res.msg
})
}
})
},
//
hsitroyjump: function(e) {
uni.navigateTo({
url: '/pages/room/histroyroom'+'?data=' + encodeURIComponent(JSON.stringify(e))
})
},
jump: function(e) {
uni.navigateTo({
url: '/pages/room/spectator' + '?data=' + encodeURIComponent(JSON.stringify(e))
});
},
}
}
</script>
<style lang="scss">
page {
background-color: #FFFFFF;
}
.goods_body_scroll {
margin-top: 50rpx;
}
.search_content {
margin: 0 auto;
width: 724rpx;
height: 64rpx;
padding: 2px 2px 2px 21.05rpx;
border-radius: 175rpx;
background: #fff;
margin-bottom: 21rpx;
position: relative;
box-sizing: border-box;
border: 2rpx solid #FCB9AD;
margin-top: 30rpx;
.icon-sousuo {
font-size: 26.32rpx;
font-weight: bold;
color: #c8c7c6;
margin-right: 17.54rpx;
}
.search_btn {
color: #fff;
width: 105.26rpx;
height: 56rpx;
line-height: 56rpx;
background: #f84221;
border-radius: 100px;
font-size: 28.07rpx;
}
}
.banner {
display: flex;
padding-left: 28rpx;
}
.banner-detail {
width: 133rpx;
margin-right: 30rpx;
}
.banner-name {
font-size: 33rpx;
font-family: PingFang SC-Medium, PingFang SC;
font-weight: 500;
color: #333333;
margin-bottom: 10rpx;
}
.banner-t {
width: 46px;
height: 0rpx;
opacity: 1;
border: 2rpx solid #F84221;
margin: 0 auto;
}
.noshuju {
height: 760upx;
}
.mico-18 {
margin-top: 10upx;
color: #666666;
}
.view_body {
width: 100%;
height: 100%;
background-color: #FFFFFF;
}
.roomsbox-title {
font-size: 30rpx;
font-family: PingFang SC-Medium, PingFang SC;
font-weight: 500;
color: #333333;
margin-bottom: 30rpx;
margin-left: 20rpx;
}
.roomstatus-d {
width: 20upx;
height: 20upx;
border-radius: 20upx;
position: absolute;
left: 20upx;
top: 20upx;
}
.roomstatus {
position: absolute;
left: 40upx;
top: 10upx;
font-size: 28upx;
}
.livetitle {
position: absolute;
bottom: 20upx;
width: 100%;
text-align: center;
height: 70upx;
line-height: 70upx;
color: #FFFFFF;
}
.top {
display: flex;
padding: 20upx;
top: 0;
position: fixed;
left: 0;
width: 95%;
background-color: #FFFFFF;
z-index: 9999;
}
.top_li {
font-size: 32upx;
padding: 0 20upx;
display: table-cell;
/* vertical-align:bottom; */
padding-top: 10upx;
color: #666666;
}
.top-lable-box {
/* #ifdef APP-PLUS */
/* flex: 1; */
/* #endif */
width: 80%;
}
.active {
font-size: 40upx;
font-weight: 800;
color: #333333;
padding-top: 0;
}
image {
width: 100%;
}
.roomsbox {
display: flex;
flex-wrap: wrap;
}
.roomblock {
width: 45%;
height: 300upx;
border-radius: 10upx;
overflow: hidden;
margin-bottom: 20upx;
position: relative;
margin-left: 2.5%;
background-color: #fff;
}
.right_top_scroll {
white-space: nowrap;
overflow: hidden;
width: 100%;
}
::-webkit-scrollbar {
width: 0;
height: 0;
color: transparent;
}
.scroll-view {
display: inline-block;
margin-right: 30rpx;
text-align: center;
font-size: 32rpx;
height: 60rpx;
line-height: 60rpx;
box-sizing: border-box;
padding: 0 10rpx;
}
.view_body {
background: #FFFFFF;
width: 100%;
overflow: hidden;
}
.mico-14 {
margin-right: 4upx;
}
.noshuju {
height: 750upx;
}
.noshuju_ico {
width: 120upx;
height: 80upx;
margin: 0 auto;
margin-top: 300rpx;
}
.noshuju_ico image {
width: 100%;
height: 100%;
}
.mico-18 {
margin-top: 10upx;
color: #666666;
}
.create-but {
background-color: #1ce0c5;
width: 120upx;
height: 60upx;
line-height: 60upx;
color: #FFFFFF;
text-align: center;
border-radius: 10upx;
/* #ifdef MP-WEIXIN */
margin-left: 40upx;
/* #endif */
margin-top: 4upx;
}
</style>

358
pages/room/spectator.nvue Normal file
View File

@ -0,0 +1,358 @@
<template>
<view class="container">
<view :style="'width: '+ windowWidth +'px; height: '+ boxStyle.height +'px;z-inde:-1;'">
<!--
1.这里的 swiper 不是用来控制视频滑动的,而是用来控制左右滑动的,如果不需要的可以改成 view
2.为了 视频无限加载,已经把 21 行的 appear 去掉了,加上了 loadmore 方法第10行
3.由于方法比较多,可以采取下面的方式查看代码:
1Mac按住 option 键,然后点击方法名,即可跳转到方法
2windows按住 Alt 键,然后鼠标左击,即可跳转到方法
-->
<list @loadmore="getData" @scroll="scrolls" :loadmoreoffset="wHeight*1" :show-scrollbar="false"
ref="listBox" :pagingEnabled="true" :scrollable="true">
<!-- 循环数据 -->
<cell v-for="(item,i) in dataList" :key="i">
<!-- 用div把视频模组套起来 -->
<div :style="'width: '+ windowWidth +'px; height: '+ boxStyle.height +'px;'">
<!-- <view v-if="Math.abs(k-i)<=1"> -->
<view v-if="Math.abs(k-i)<=1">
<view class="root">
<video :ref="'item'+i" :id="item.id" :loop="true" :autoplay="i == k"
:src="item.pull_url" :muted="item.isplay" :enable-progress-gesture="false"
:page-gesture="false" :controls="false" :show-loading="true" :is-live='true'
@error='vedioerr' :show-fullscreen-btn="false" :show-center-play-btn="false"
:style="boxStyle" :object-fit="object_fit" @timeupdate="timeupdate($event,i)">
</video>
<!-- {{item}} {{i}} -->
</view>
<sd-float-page :room='room' :msgList='msgList' :heightG='boxStyle.height'
:style="'width: '+ windowWidth +'px; height: '+ boxStyle.height +'px;position: absolute;' "></sd-float-page>
</view>
</div>
</cell>
</list>
</view>
</view>
</template>
<script>
import list from '@/uni_modules/uview-ui/libs/config/props/list';
import sdFloatPage from '@/components/sd-live-page/livepage.nvue';
import {
VUE_APP_WS_URL
} from '@/config/app';
export default {
components: {
sdFloatPage
},
data() {
return {
imgHost: '',
//下面打🌟号的是必须要的基础字段
//下面打💗号的是拥有滑动条的必须字段
dataList: [
'rtmp://live.lihaink.cn/ceshi/ceshi?auth_key=1697453509-0-0-c086ad0c4d8c581e26438a7a99a9f40f',
'rtmp://live.lihaink.cn/ceshi/ceshi?auth_key=1697453509-0-0-c086ad0c4d8c581e26438a7a99a9f40f'
], //用于数据循环的列表🌟💗
wHeight: 0, //获取的屏幕高度🌟💗
boxStyle: { //视频,图片封面样式🌟💗
'height': 0,
'width': 0,
},
k: 0, //默认为0🌟💗
max: 2,
playIngIds: [], //正在播放的视频id列队列队用于处理滑动过快导致的跳频问题🌟💗
ready: false, //可忽略
isDragging: false, //false代表停止滑动🌟💗
refreshing: true, //用于下拉刷新🌟💗
windowWidth: 0, //获取屏幕宽度🌟💗
windowHeight: 0,
dex: [0, 0], //用于判断是上滑还是下滑第一个存旧值第二个存新值【目前在1.0.7已经废弃】
currents: 0, //用于左右滑动0代表视频界面1代表右滑界面🌟💗
platform: '', //用于获取操作系统ios、android🌟💗
playIng: false, //用于视频初始化时是否播放,默认不播放🌟💗
videoTime: '', //视频总时长,这个主要用来截取时间数值💗
videoTimes: '', //视频时长用这个来获取时间值例如00:30这个时间值💗
changeTime: '', //显示滑动进度条时变化的时间💗
isShowimage: false, //是否显示封面【1.0.4已废弃,但是意思需要记住】
currenttimes: 0, //当前时间💗
isShowProgressBarTime: false, //是否拖动进度条如果拖动true则显示进度条时间否则不显示false【1.0.4已废弃,但是意思需要记住】
ProgressBarOpacity: 0.7, //进度条不拖动时的默认值,就是透明的💗
dotWidth: 0, //播放的小圆点,默认没有💗
deleteHeight: 0, //测试高度🌟💗
percent: 0, //百分小数💗
currentPosition: 0, //滑块当前位置💗//2.0已弃用,现已用于后端参数
currentPositions: 0, //滑块当前位置的副本💗//2.0已弃用,现已用于后端参数
newTime: 0, //跟手滑动后的最新时间💗
timeNumber: 0, //🌟💗
ProgressBarBottom: 20, //进度条离底部的距离💗
object_fit: 'cover', //视频样式默认包含🌟💗
mode: 'aspectFit', //图片封面样式🌟💗
timeout: "", //🌟用来阻止 setTimeout()方法
voice: "", //🌟用来阻止 setTimeout()方法
oldVideo: "",
isAutoplay: false, //是否开启自动播放(默认不开启)
autoplayText: "开启自动播放",
msgList: [],
room: {},
socketTask: null,
userName: '',
}
},
watch: {
async k(new_k, old_k) { //监听 k 值的变化,可以控制视频的播放与暂停
const max = new_k + 2;
if (this.max < max) {
this.max = max;
}
// if (this.oldCurrent != this.currentNav) {
// this.oldCurrent = this.currentNav
// return false
// }
this.dataList[old_k].playIng = false //如果视频暂停,就加载封面
this.dataList[old_k].isplay = true
this.dataList[old_k].state = 'pause'
// console.log('预留第' + (old_k) + '个视频:' + this.dataList[old_k].community_id)
// 2.0版本已经去掉了下面这一句,视频不用暂停,只需要把声音禁止就行
uni.createVideoContext(this.dataList[old_k].community_id, this)
.pause() //如果视频暂停那么旧视频停止这里的this.dataList[old_k].id + '' + old_k后面加 old_k 是为了每一个视频的 id 值不同,这样就可以大程度的避免串音问题
// console.log('已经暂停 --> 第' + (old_k) + '个视频~') //提示
this.dataList[new_k].state = 'play'
this.dataList[new_k].isplay = false
this.dataList[new_k].playIng = true
uni.createVideoContext(this.dataList[new_k].community_id, this).play()
}
},
onShow() {
uni.hideLoading();
// console.log('回到前台' + this.dataList.length);
if (this.dataList.length !== 0) {
this.dataList[this.k].state = 'play';
setTimeout(() => {
uni.createVideoContext(this.dataList[this.k].id, this).play()
}, 250)
}
},
onHide() {
this.dataList[this.k].state = 'pause'; //界面隐藏也要停止播放视频
setTimeout(() => {
uni.createVideoContext(this.dataList[this.k].community_id, this).pause(); //暂停以后继续播放
}, 250)
// console.log('到后台');
},
onLoad(options) {
this.platform = uni.getSystemInfoSync().platform
this.windowWidth = uni.getSystemInfoSync().screenWidth //获取屏幕宽度
this.boxStyle.width = this.windowWidth + 'px' //给宽度加px
this.wHeight = uni.getSystemInfoSync().screenHeight; //获取屏幕高度
this.boxStyle.height = this.wHeight; //改变视频高度
console.log(this.boxStyle.height)
this.room = JSON.parse(decodeURIComponent(options.data));
this.get()
},
mounted() {
},
Ready() {},
methods: {
autoPlay() {
this.isAutoplay = !this.isAutoplay;
if (!this.isAutoplay) {
this.autoplayText = "开启自动播放"
uni.showToast({
title: "关闭自动播放",
icon: 'none',
duration: 3000
})
} else {
this.autoplayText = "关闭自动播放"
uni.showToast({
title: "开启自动播放",
icon: 'none',
duration: 3000
})
}
},
getData() {
// 这里就是数据加载完以后再向后端发送数据的地方,
},
vedioerr(e) {
let timer = null
if (e.tye = 'error') {
timer = setInterval((res) => {
uni.createVideoContext('myVideo', this).play()
console.log('重新连接', '1111111111')
}, 600000)
} else {
timer = null
}
},
touchstart(event) {
this.dataList[this.k].isShowimage = true //刚触摸的时候就要显示预览视频图片了
this.dataList[this.k].isShowProgressBarTime = true //显示时间线
this.ProgressBarOpacity = 1 //让滑块显示起来更明显一点
this.dotWidth = 10 //让点显示起来更明显一点
},
touchend() { //当手松开后,跳到最新时间
uni.createVideoContext(this.dataList[this.k].community_id, this).seek(this.newTime)
if (this.dataList[this.k].state == 'pause') {
this.dataList[this.k].state = 'play'
uni.createVideoContext(this.dataList[this.k].community_id, this).play()
}
this.dataList[this.k].isShowProgressBarTime = false //触摸结束后,隐藏时间线
this.dataList[this.k].isShowimage = false //触摸结束后,隐藏时间预览
this.ProgressBarOpacity = 0.5 //隐藏起来进度条,不那么明显了
this.dotWidth = 0 //隐藏起来进度条,不那么明显了
},
touchmove(event) { //当手移动滑块时,计算位置、百分小数、新的时间
var msg = []
if (this.videoTime !== '') {
msg = this.videoTime.split(':')
}
var timeNumber = Number(msg[0]) * 60 + Number(msg[1])
this.currentPositions = event.changedTouches[0].screenX
this.percent = this.currentPositions / this.windowWidth
this.newTime = this.percent * timeNumber
this.currenttimes = parseInt(this.newTime)
let theTime = this.newTime
let middle = 0; // 分
if (theTime > 60) {
middle = parseInt(theTime / 60);
theTime = parseInt(theTime % 60);
}
this.changeTime =
`${Math.round(middle)>9?Math.round(middle):'0'+Math.round(middle)}:${Math.round(theTime)>9?Math.round(theTime):'0'+Math.round(theTime)}`
},
timeupdate(event, index) { //计算滑块当前位置,计算当前百分小数
if (index == this.k) {
var currenttime = event.detail.currentTime
this.timeNumber = Math.round(event.detail.duration)
this.getTime()
this.percent = currenttime / this.timeNumber
this.currentPosition = this.windowWidth * this.percent
let theTime = currenttime
let middle = 0; // 分
if (theTime > 60) {
middle = parseInt(theTime / 60);
theTime = parseInt(theTime % 60);
}
this.changeTime =
`${Math.round(middle)>9?Math.round(middle):'0'+Math.round(middle)}:${Math.round(theTime)>9?Math.round(theTime):'0'+Math.round(theTime)}`
//自动切换视频
if (this.isAutoplay) { //true,代表自动播放
if (Math.round(currenttime) == this.timeNumber - 1) {
const dom = uni.requireNativePlugin('dom')
let doms = 'item' + (this.k + 1)
setTimeout(() => {
let el = this.$refs[doms][0]
dom.scrollToElement(el, {
offset: 0,
animated: true
})
}, 500)
}
}
}
},
getTime() { //得到时间函数
this.videoTime = this.formatSeconds(this.timeNumber);
var msg = []
if (this.videoTime !== '') {
msg = this.videoTime.split(':')
}
this.videoTimes = `${msg[0]>9?msg[0]:'0'+msg[0]}:${msg[1]>9?msg[1]:'0'+msg[1]}`;
},
formatSeconds(value) { //获取时间函数
let theTime = parseInt(value); // 秒
let middle = 0; // 分
if (theTime > 60) {
middle = parseInt(theTime / 60);
theTime = parseInt(theTime % 60);
}
return `${middle>9?middle:middle}:${theTime>9?theTime:theTime}`;
},
moreVideo(index) {
},
toVideo(index) {
},
scrolls(event) {
this.showManage = false;
this.isDragging = event.isDragging;
if (!event.isDragging) { //isDragging判断用户是不是在滑动滑动true停止滑动false。我们要用户停止滑动时才给 k 赋值,这样就可以避免很多麻烦
var i = Math.round(Math.abs(event.contentOffset.y) / (this.wHeight - this.deleteHeight +
1)) //先用绝对值取出滑动的距离,然后除以屏幕高度,取一个整,就知道你现在滑动到哪一个视频了
if (i !== this.k) { //这里加判断是因为这个方法会执行很多次,会造成重复请求,所以这里写一个限制
if (uni.getSystemInfoSync().platform == 'ios') {
this.k = i //判断了用户没有滑动,确认了用户的确是在看这个视频,然后就赋值啦
this.dataList[this.k].state = 'play'
// console.log('正在播放 --> 第' + (this.k + 1) + '个视频~')
} else {
clearTimeout(this.timers);
this.timers = setTimeout(() => {
this.k = i //判断了用户没有滑动,确认了用户的确是在看这个视频,然后就赋值啦
this.dataList[this.k].state = 'play'
// console.log('正在播放 --> 第' + (this.k + 1) + '个视频~')
}, 80)
}
}
}
},
get() {
let that = this
var msg = [this.room];
// console.log(this.room)
for (let i = 0; i < msg.length; i++) {
msg[i]['isMore'] = false
msg[i]['playIng'] = false
msg[i]['state'] = false
msg[i]['isplay'] = false
msg[i]['loading'] = false
msg[i]['id'] = msg[i]['live_stream_id'].toString()
}
this.dataList = msg;
if (this.dataList.length !== 0) {
this.dataList[this.k].state = 'play';
uni.createVideoContext(this.dataList[this.k].id, this).play()
this.page = that.page + 1
}
},
onpullingdown() {
this.refreshing = true
},
onrefresh() {
setTimeout(() => {
this.refreshing = false
}, 1000)
},
},
onReachBottom() {
uni.$emit('onReachBottom');
},
}
</script>
<style lang="scss" scoped>
</style>

View File

@ -0,0 +1,346 @@
<template>
<view class="">
<u-sticky customNavHeight="0">
<view class="head_top">
<u-search placeholder="搜索小区、办公楼等" :showAction="false"></u-search>
<view style="height: 20rpx;"></view>
<u-tabs :list="tabsList" itemStyle="font-size: 32rpx;height: 74rpx;" :current="current" @change="changeCurrent"
lineColor="#FF6D20" lineWidth="105rpx" height="7rpx"></u-tabs>
</u-tabs>
</view>
</u-sticky>
<view style="background-color: #f4f4f4;height: 30rpx;"></view>
<view class="address-box" v-if="current==0" style="padding: 0;">
<map
style="width: 750rpx;height: 750rpx;"
:longitude="longitude"
:latitude="latitude"
show-location
@controltap="handleMapTap"
></map>
<!-- <Amap></Amap> -->
<view class="head_item" style="padding: 20rpx;">
<view class="re-location">
<view class="re-title">当前位置: </view>
<view>{{street}}</view>
</view>
<view class="re-btn" @click="reGetLocation">
<image class="re-address-img" src="@/static/images/re_address.png"></image>重新定位
</view>
</view>
</view>
<view class="address-box" v-if="current==1">
<view class="head_item_tips">
<view>泸州区县</view>
</view>
<view class="area">
<view class="area-item" :class="{'area-item-on': item.code==area_change}" v-for="(item, index) in areaList"
:key="index" @click="changeArea(item)">
{{item.name}}
</view>
</view>
<view class="head_item_tips">
<view>选择街道/</view>
</view>
<view class="street">
<view class="letter-item" v-for="key in mapKey" :key="key">
<view class="letter">{{key}}</view>
<view class="item-box">
<view class="street-item" v-for="item in mapList[key]" :key="item.code" @click="changeStreet(item)">
{{item.name}}
</view>
</view>
</view>
</view>
</view>
</view>
</template>
<script>
import {
getGeocoder,
merClassifly,
getProductslist
} from '@/api/store.js';
import { wgsToGcj } from "@/utils/wgs.js";
import {
getArea,
getStreet
} from "@/api/article.js";
import { Toast } from '@/libs/uniApi';
// import Amap from "./map.nvue";
export default {
// components:{
// Amap
// },
data() {
return {
tabsList: [{
name: '地图定位',
}, {
name: '泸州区县',
}, ],
current: 0,
latitude: '28.87',
longitude: '105.44',
town: '',
street_id: '',
street: '',
areaList: [],
streetList: [],
mapList: {},
area_change: '',
street_change: '',
}
},
onLoad() {
this.getLoaction();
this.loadArea();
},
onShow() {},
computed: {
mapKey() {
return Object.keys(this.mapList).sort()
}
},
methods: {
changeCurrent(e) {
this.current = e.index;
},
getLoaction() {
this.street = '定位中'
uni.getLocation({
type: 'wgs84',
timeout: '10',
success: (res) => {
res = wgsToGcj(res);
let latitude, longitude;
latitude = res.latitude.toString();
longitude = res.longitude.toString();
this.latitude = res.latitude.toFixed(6);
this.longitude = res.longitude.toFixed(6);
this.$store.commit('setLocation', {
lat: res.latitude.toFixed(6),
long: res.longitude.toFixed(6),
});
getGeocoder({
lat: latitude,
long: longitude
}).then(res => {
this.town = res.data.address_reference.town.title
this.street_id = res.data.address_reference.town.id
this.street = res.data.address_reference.town.title;
}).catch(err => {
uni.showToast({
title: err,
icon: 'none'
})
this.street = '定位失败'
})
},
fail: (err) => {
console.log('定位失败');
this.isshow = false
uni.setStorageSync("RejectTarget", true)
Toast('定位失败,请检查定位权限是否开启')
this.street = '定位失败'
// uni.showToast({
// title: "",
// icon: 'none',
// duration: 2000
// });
}
});
},
reGetLocation() {
this.getLoaction()
},
loadArea() {
getArea({
city_code: 510500
}).then((res) => {
this.areaList = res.data;
this.changeArea(this.areaList[0]);
})
},
loadStreet(area_code) {
this.street_change = '';
getStreet({
area_code
}).then((res) => {
this.streetList = res.data;
this.initPinyin();
})
},
initPinyin() {
this.mapList = {};
this.streetList.forEach((item) => {
let str = item.pinyin?.toUpperCase();
str = str ? str : '#';
if (this.mapList[str]) {
this.mapList[str].push(item);
} else {
this.mapList[str] = [];
this.mapList[str].push(item)
}
})
},
changeArea(item) {
this.area_change = item.code;
this.loadStreet(this.area_change);
},
//
changeStreet(item){
uni.navigateBack({
success: () => {
uni.$emit('changeAddress', {
area: this.area_change,
street: item
})
}
})
},
//
handleMapTap(e){
console.log('点击', e);
}
},
onPullDownRefresh() {
uni.stopPullDownRefresh()
}
}
</script>
<style lang="scss">
page {
background-color: #fff;
}
.head_top {
background-color: #fff;
padding: 28rpx;
}
.address-box {
// background-color: red;
border-radius: 21rpx 21rpx 0rpx 0rpx;
padding: 30rpx 28rpx;
.head_item {
display: flex;
justify-content: space-between;
align-items: center;
padding-bottom: 28rpx;
font-size: 28rpx;
font-family: PingFang SC-Regular, PingFang SC;
font-weight: 400;
color: #333333;
.re-location {
display: flex;
.re-title {
flex-shrink: 0;
padding-right: 14rpx;
}
}
.re-address-img {
width: 38.55rpx;
height: 38.55rpx;
margin-right: 14rpx;
}
.re-btn {
display: flex;
align-items: center;
flex-shrink: 0;
padding-left: 14rpx;
}
}
.head_item_tips {
height: 44rpx;
font-size: 32rpx;
font-family: PingFang SC-Regular, PingFang SC;
font-weight: 400;
color: #737373;
}
.address-list {
font-size: 28rpx;
font-family: PingFang SC-Regular, PingFang SC;
font-weight: 400;
color: #333333;
height: 80rpx;
line-height: 75rpx;
border-bottom: 1rpx solid rgba(0, 0, 0, 0.1);
}
.area {
display: flex;
flex-wrap: wrap;
padding-top: 30rpx;
.area-item {
// width: 158rpx;
height: 64rpx;
// background: #F4F4F4;
background-color: #fff;
border-radius: 11rpx 11rpx 11rpx 11rpx;
border: 2rpx solid #B3B3B3;
display: flex;
align-items: center;
justify-content: center;
padding: 0 20rpx;
font-size: 28rpx;
font-family: PingFang SC-Medium, PingFang SC;
font-weight: 500;
color: #737373;
margin-bottom: 22rpx;
margin-right: 22rpx;
}
.area-item-on {
// background-color: #F4F4F4;
color: #ff6d20;
// font-weight: bold;
border: 2rpx solid #ff6d20;
}
}
.street {
padding-top: 28rpx;
.letter-item {
display: flex;
.letter {
flex-shrink: 0;
margin-right: 28rpx;
font-size: 25rpx;
font-family: PingFang SC, PingFang SC;
font-weight: 400;
width: 40rpx;
text-align: center;
color: #737373;
}
.item-box {
flex: 1;
.street-item {
width: 100%;
padding-bottom: 28rpx;
font-size: 28rpx;
font-family: PingFang SC, PingFang SC;
font-weight: 400;
color: #333333;
}
}
}
}
}
</style>

View File

@ -0,0 +1,413 @@
<template>
<view class="" style="background-color: #fff;">
<u-sticky customNavHeight="0">
<view class="head_top">
<!-- <u-search placeholder="搜索小区、办公楼等" @custom="searchMap"></u-search>
<view style="height: 20rpx;"></view> -->
<u-tabs :list="tabsList" itemStyle="font-size: 32rpx;height: 74rpx;" :current="current" @change="changeCurrent"
lineColor="#FF6D20" lineWidth="105rpx" height="7rpx"></u-tabs>
</u-tabs>
</view>
</u-sticky>
<view style="background-color: #f4f4f4;height: 30rpx;"></view>
<view class="address-box" v-if="current==0" style="padding: 0;">
<map style="width: 750rpx;height: 750rpx;" :longitude="longitude" :latitude="latitude" :markers="[markers]"
show-location @tap="handleMapTap"></map>
<view class="head_item" style="padding: 10rpx 20rpx;">
<view class="re-location">
<view style="width: 120rpx;"><text class="text">当前位置: </text></view>
<view style="flex: 1;">
<text
class="text">{{locationInfo.formatted_addresses?locationInfo.formatted_addresses.recommend:locationInfo.address}}</text>
</view>
</view>
<view class="re-btn" @click="reGetLocation">
<image class="re-address-img" src="@/static/images/re_address.png"></image><text class="text">重新定位</text>
</view>
</view>
<u-button text="确认" @click="submitAddress"></u-button>
</view>
<view class="address-box" v-if="current==1">
<view class="head_item_tips">
<view><text class="text">泸州区县</text></view>
</view>
<view class="area">
<view class="area-item" :class="{'area-item-on': item.code==area_change}" v-for="(item, index) in areaList"
:key="index" @click="changeArea(item)">
<text class="text">{{item.name}}</text>
</view>
</view>
<view class="head_item_tips">
<view><text class="text">选择街道/镇</text></view>
</view>
<view class="street">
<view class="letter-item" v-for="key in mapKey" :key="key">
<view class="letter"><text class="text">{{key}}</text></view>
<view class="item-box">
<view class="street-item" v-for="item in mapList[key]" :key="item.code" @click="changeStreet(item)">
<text class="text">{{item.name}}</text>
</view>
</view>
</view>
</view>
</view>
</view>
</template>
<script>
import {
getGeocoder,
merClassifly,
getProductslist
} from '@/api/store.js';
import {
getArea,
getStreet
} from "@/api/article.js";
import { Toast } from '@/libs/uniApi';
import { wgsToGcj } from "@/utils/wgs.js";
export default {
data() {
return {
tabsList: [{
name: '地图定位',
}, {
name: '泸州区县',
}],
current: 0,
latitude: '28.87',
longitude: '105.44',
markers: {
id: 1,
longitude: '28.87',
latitude: '105.44',
iconPath: 'https://lihai001.oss-cn-chengdu.aliyuncs.com/def/cbbd5202311241523412538.png',
width: 28,
height: 28
},
locationInfo: {},
town: '',
street_id: '',
street: '',
areaList: [],
streetList: [],
mapList: {},
area_change: '',
street_change: '',
}
},
onLoad(options) {
this.getLoaction();
this.loadArea();
},
onShow() {},
computed: {
mapKey() {
return Object.keys(this.mapList).sort()
}
},
methods: {
changeCurrent(e) {
this.current = e.index;
},
getLoaction() {
this.street = '定位中'
this.locationInfo = {};
this.locationInfo.formatted_addresses = {};
this.locationInfo.formatted_addresses.recommend = '定位中'
uni.getLocation({
type: 'wgs84',
success: (res) => {
res = wgsToGcj(res);
let latitude, longitude;
latitude = res.latitude.toString();
longitude = res.longitude.toString();
this.latitude = res.latitude.toFixed(6);
this.longitude = res.longitude.toFixed(6);
this.$store.commit('setLocation', {
lat: res.latitude.toFixed(6),
long: res.longitude.toFixed(6),
});
getGeocoder({
lat: latitude,
long: longitude
}).then(res => {
this.locationInfo = res.data;
this.town = res.data.address_reference.town.title
this.street_id = res.data.address_reference.town.id
this.street = res.data.address_reference.town.title;
}).catch(err => {
uni.showToast({
title: err,
icon: 'none'
})
this.street = '定位失败'
})
},
fail: (err) => {
console.log('定位失败');
this.isshow = false
Toast('定位失败,请检查定位权限是否开启')
this.street = '定位失败'
this.locationInfo.formatted_addresses.recommend = '定位失败'
// uni.showToast({
// title: "获取定位超时",
// icon: 'none',
// duration: 2000
// });
}
});
},
reGetLocation() {
this.getLoaction()
},
loadArea() {
getArea({
city_code: 510500
}).then((res) => {
this.areaList = res.data;
this.changeArea(this.areaList[0]);
})
},
loadStreet(area_code) {
this.street_change = '';
getStreet({
area_code
}).then((res) => {
this.streetList = res.data;
this.initPinyin();
})
},
initPinyin() {
this.mapList = {};
this.streetList.forEach((item) => {
let str = item.pinyin?.toUpperCase();
str = str ? str : '#';
if (this.mapList[str]) {
this.mapList[str].push(item);
} else {
this.mapList[str] = [];
this.mapList[str].push(item)
}
})
},
changeArea(item) {
this.area_change = item.code;
this.loadStreet(this.area_change);
},
// 选择位置
changeStreet(item) {
uni.navigateBack({
success: () => {
uni.$emit('changeAddress', {
area: this.area_change,
street: item
})
}
})
},
// 点击地图
handleMapTap(e) {
// console.log('点击地图', e);
// #ifdef H5
return Toast('H5暂不支持选择坐标');
// #endif
let longitude = e.detail.longitude;
let latitude = e.detail.latitude;
this.markers.longitude = longitude;
this.markers.latitude = latitude;
// console.log('修改成功', this.markers);
getGeocoder({
lat: latitude,
long: longitude
}).then(res => {
// console.log(res);
this.locationInfo = res.data;
}).catch(err => {
uni.showToast({
title: err,
icon: 'none'
})
this.locationInfo = {};
this.locationInfo.formatted_addresses = {};
this.locationInfo.formatted_addresses.recommend = '定位失败'
})
},
submitAddress() {
console.log(this.locationInfo);
try {
this.town = this.locationInfo.address_reference.town.title;
this.street_id = this.locationInfo.address_reference.town.id;
this.street = this.locationInfo.address_reference.town.title;
let obj = {
area: this.locationInfo.ad_info.adcode,
street: {
name: this.street,
code: this.street_id
},
latitude: this.latitude,
longitude: this.longitude
}
console.log({...obj});
uni.navigateBack({
success: () => {
uni.$emit('changeAddress', obj)
}
})
} catch (e) {
return Toast('地址有误,请重新选择')
}
},
searchMap(){
uni.request({
url: 'https://restapi.amap.com/v3/place/text?keywords=北京大学&city=beijing&offset=20&page=1&key=0799f37420c0784f1e6cba230a68bdb1&extensions=all',
success: (res) => {
console.log(res);
},
fail: (e) => {
console.log(e);
}
})
}
},
onPullDownRefresh() {
uni.stopPullDownRefresh()
}
}
</script>
<style>
/* page {
background-color: #fff;
} */
.text {
font-size: 28rpx;
white-space: normal;
}
.head_top {
background-color: #fff;
padding: 28rpx;
}
.address-box {
border-radius: 21rpx 21rpx 0rpx 0rpx;
padding: 30rpx 28rpx;
width: 750rpx;
}
.head_item {
width: 750rpx;
flex-direction: row;
justify-content: space-between;
padding-bottom: 28rpx;
font-size: 28rpx;
font-family: PingFang SC-Regular, PingFang SC;
font-weight: 400;
color: #333333;
}
.re-location {
flex-direction: row;
flex-wrap: nowrap;
width: 480rpx;
align-items: center;
}
.re-address-img {
width: 38.55rpx;
height: 38.55rpx;
margin-right: 10rpx;
}
.re-btn {
flex-direction: row;
padding-left: 10rpx;
width: 200rpx;
height: 100rpx;
align-items: center;
}
.head_item_tips {
height: 44rpx;
font-size: 32rpx;
font-family: PingFang SC-Regular, PingFang SC;
font-weight: 400;
color: #737373;
}
.address-list {
font-size: 28rpx;
font-family: PingFang SC-Regular, PingFang SC;
font-weight: 400;
color: #333333;
height: 80rpx;
line-height: 75rpx;
border-bottom: 1rpx solid rgba(0, 0, 0, 0.1);
}
.area {
flex-direction: row;
flex-wrap: wrap;
padding-top: 30rpx;
justify-content: flex-start;
}
.area-item {
height: 64rpx;
/* width: 100px; */
background-color: #fff;
border-radius: 11rpx 11rpx 11rpx 11rpx;
border: 2rpx solid #B3B3B3;
flex-direction: row;
align-items: center;
justify-content: center;
padding: 0 20rpx;
font-size: 28rpx;
font-family: PingFang SC-Medium, PingFang SC;
font-weight: 500;
color: #737373;
margin-bottom: 22rpx;
margin-right: 22rpx;
}
.area-item-on {
color: #ff6d20;
border: 2rpx solid #ff6d20;
}
.street {
padding-top: 28rpx;
}
.letter-item {
flex-direction: row;
}
.letter {
margin-right: 28rpx;
font-size: 25rpx;
font-family: PingFang SC, PingFang SC;
font-weight: 400;
width: 40rpx;
text-align: center;
color: #737373;
}
.item-box {
flex: 1;
}
.street-item {
width: 100%;
padding-bottom: 28rpx;
font-size: 28rpx;
font-family: PingFang SC, PingFang SC;
font-weight: 400;
color: #333333;
}
</style>

View File

@ -226,7 +226,8 @@
<text class="count">{{item.relevance.length}}</text>
</view>
</view>
<view v-if="showManage == item.author.uid || showManage " class="manage" :style="{'margin-top':item.relevance.length>0?'-115rpx':'0px'}">
<view v-if="showManage == item.author.uid || showManage " class="manage"
:style="{'margin-top':item.relevance.length>0?'-115rpx':'0px'}">
<view class="manage-gou"></view>
<navigator hover-class="none"
:url="'/pages/plantGrass/plant_release/index?id='+item.community_id+'&type=2'"
@ -309,10 +310,10 @@
</view>
</uni-popup>
<!-- 他提到的宝贝弹窗 -->
<uni-popup type="bottom" ref="pinglunMentioned" >
<uni-popup type="bottom" ref="pinglunMentioned">
<mentioned ref="mentioned" @close="closePopup" :list="moreList" :uid="authorUid" ></mentioned>
<mentioned ref="mentioned" @close="closePopup" :list="moreList" :uid="authorUid"></mentioned>
</uni-popup>
<authorize @onLoadFun="onLoadFun" :isAuto="isAuto" :isShowAuth="isShowAuth" @authColse="authColse"></authorize>
@ -361,6 +362,7 @@
import {
navigateBack
} from '../../../libs/uniApi';
import list from '../../../uni_modules/uview-ui/libs/config/props/list';
export default {
computed: configMap({
statusBarHeight: 0,
@ -725,7 +727,6 @@
id: this.videoID
}).then(res => {
console.log(res.data,'1')
that.getVideoData(res.data.list);
})
@ -898,11 +899,43 @@
// if(!this.loadVideo) return
this.loadVideo = true
// 这个方法主要就是用来第一次进入视频播放时用来处理
deoList(this.videoID).then(async (res) => {
// deoList(this.videoID).then(async (res) => {
// this.loadVideo = false
// this.userUid = res.data.uid
// this.page = 1;
// var msg = [res.data];
// for (let i = 0; i < msg.length; i++) {
// msg[i]['isMore'] = false
// msg[i]['playIng'] = false
// msg[i]['state'] = false
// msg[i]['isplay'] = false
// msg[i]['loading'] = false
// msg[i]['community_id'] = msg[i]['community_id'].toString()
// }
// this.dataList = msg;
// if (this.dataList.length !== 0) {
// this.dataList[this.k].state = 'play';
// uni.createVideoContext(this.dataList[this.k].community_id, this).play()
// }
// }).catch(err => {
// return uni.showToast({
// title: err,
// icon: 'none',
// duration: 2000
// });
// })
videoList({
page: this.page,
limit: this.limit,
id: this.videoID
}).then(async (res) => {
this.loadVideo = false
this.userUid = res.data.uid
this.page = 1;
var msg = [res.data];
var msg =res.data.list;
for (let i = 0; i < msg.length; i++) {
msg[i]['isMore'] = false
msg[i]['playIng'] = false
@ -916,6 +949,7 @@
if (this.dataList.length !== 0) {
this.dataList[this.k].state = 'play';
uni.createVideoContext(this.dataList[this.k].community_id, this).play()
this.page = that.page + 1
}
}).catch(err => {
return uni.showToast({
@ -926,7 +960,6 @@
})
// this.isUser ?
// myVideoList(this.userUid, {
// page: this.page,
@ -1115,7 +1148,6 @@
}
</script>
<style lang="scss" scoped>
// .video-list{
// padding: 200rpx 28.07rpx 0 28.07rpx;
// display: flex;
@ -1270,6 +1302,7 @@
color: #ffffff;
}
padding-right: 30rpx;
}

View File

@ -190,6 +190,9 @@
uni.hideKeyboard();
}else{
that.getUserInfo();
}
},
/**
@ -227,7 +230,8 @@
let reply_id = that.reply_id ? that.reply_id : 0
replyCreateApi(that.id,{content: that.content,reply_id: reply_id}).then(res => {
// console.log(res.message)
if(res.status == 1){
// console.log(res)
if(res.status == 200){
if(that.isChild){
if(that.list[that.index]['children']){
that.list[that.index]['children'].push(res.data)
@ -472,7 +476,7 @@
.send{
font-size: 26rpx;
color: #ffffff;
padding: 12rpx 30rpx;
padding: 15rpx 30rpx;
background: #E93323;
border-radius: 30rpx;
text-align: center;

View File

@ -435,7 +435,9 @@
},
watch: {
k(new_k, old_k) {
const max = new_k + 2;
if (this.max < max) {
this.max = max;
}
@ -451,7 +453,7 @@
uni.createVideoContext(this.dataList[old_k].community_id + '' + old_k, this)
.pause() //如果视频暂停那么旧视频停止这里的this.dataList[old_k].id + '' + old_k后面加 old_k 是为了每一个视频的 id 值不同,这样就可以大程度的避免串音问题
// console.log('已经暂停 --> 第' + (old_k + 1) + '个视频~') //提示
// #ifdef MP
this.dataList[new_k].state = 'play'
this.dataList[new_k].isplay = false
this.dataList[new_k].playIng = true
@ -461,7 +463,7 @@
}, 250)
}
this.videoShare(this.dataList[new_k])
// #endif
}
},
onLoad(options) {
@ -504,7 +506,7 @@
}
})
},
//#ifdef MP
videoShare(item) {
if (item && item.status == 1) {
let uid = this.uid ? this.uid : 0;
@ -520,7 +522,7 @@
uni.hideShareMenu()
}
},
// #endif
goBack: function() {
uni.navigateBack();
},
@ -752,21 +754,21 @@
let that = this
// 1.这里引入后端请求数据
if (that.videoshow) {
deoList(this.videoID).then(res => {
that.videoData([res.data])
if (res.data.list.length < that.limit) {
this.loadMore = false;
}
}).catch(err => {
return uni.showToast({
title: err,
icon: 'none',
duration: 2000
});
})
this.videoshow = false
} else {
// if (that.videoshow) {
// deoList(this.videoID).then(res => {
// that.videoData([res.data])
// if (res.data.list.length < that.limit) {
// this.loadMore = false;
// }
// }).catch(err => {
// return uni.showToast({
// title: err,
// icon: 'none',
// duration: 2000
// });
// })
// this.videoshow = false
// } else {
// videoList().then(res=>{
// that.videoData(res.data.list);
// })
@ -788,7 +790,7 @@
duration: 2000
});
})
}
// }
// that.isUser ?
// myVideoList(that.userUid, {
@ -851,7 +853,9 @@
this.communityId = list[0]['community_id']
if (list.length == 0) return
let that = this;
that.page = that.page + 1;
var msg = list
// 2.这里把视频添加到视频列表
for (let i = 0; i < msg.length; i++) {
@ -861,15 +865,21 @@
msg[i]['isplay'] = true
msg[i]['loading'] = false
that.dataList.push(msg[i])
//#ifndef H5
console.log(i, that.k)
if (i == 0 && that.k == 0) {
this.dataList[0].isplay = false
this.dataList[0].playIng = true
this.dataList[0].state = 'play'
this.dataList[0].loading = false
setTimeout(() => {
uni.createVideoContext(that.dataList[0].community_id + '' + 0, that).play()
// uni.createVideoContext(this.dataList[new_k].community_id + '' + new_k, this).play()
}, 250)
}
//#endif
}
//#ifdef MP
if (this.k == 0) {

Some files were not shown because too many files have changed in this diff Show More