1
0
Code Issues Pull Requests Packages Projects Releases Wiki Activity GitHub Gitee

微信小程序 提审时隐藏功能;微信小程序添加微信快捷登录、随便看看(登的user用户)

This commit is contained in:
程序员小墨 2023-04-17 02:36:04 +08:00
parent 62ed92029c
commit 0238251ab0
29 changed files with 1205 additions and 624 deletions

View File

@ -318,6 +318,18 @@ window.wsUrl = 'ws://127.0.0.1:80/access/websocket/1';
##### 配置小程序 APPID 与 APPSECRET
修改 `backend/microservice-provider-access-8002/src/main/java/com/cxyxiaomo/epp/access/service/WeChatTokenServiceImpl.java` 文件
```
// 小程序信息
final String APPID = "【⚠此处修改为你的小程序 APPID】";
final String APPSECRET = "【⚠此处修改为你的小程序 APPSECRET】";
```
#### nginx 代理配置(可选) #### nginx 代理配置(可选)
配置文件在 `nginx-conf` 目录下(不能直接拿来用,需要根据自己的实际情况来改) 配置文件在 `nginx-conf` 目录下(不能直接拿来用,需要根据自己的实际情况来改)

View File

@ -25,4 +25,5 @@ public class User implements Serializable {
private String doorplate; private String doorplate;
private String permission; private String permission;
private LocalDateTime permissionTime; private LocalDateTime permissionTime;
private String wxcode;
} }

View File

@ -3,6 +3,9 @@ package com.cxyxiaomo.epp.gateway.controller;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import java.util.HashMap;
import java.util.LinkedList;
@RestController @RestController
public class Controller { public class Controller {
@ -10,4 +13,35 @@ public class Controller {
public String error() { public String error() {
return "[ERROR] 500 Internal Server Error"; return "[ERROR] 500 Internal Server Error";
} }
/**
* 为了通过微信的小程序审核所特别处理的
*
* @return
*/
@RequestMapping("/getConfig")
public HashMap<String, Object> WxMiniProgramAuditSpecialHandle() {
boolean showCode = true;
boolean showShop = true;
LinkedList<String> tabbarItem = new LinkedList<>();
tabbarItem.push("pages/index/index");
if (showCode) tabbarItem.push("pages/residents/code");
tabbarItem.push("pages/residents/report");
if (showShop) tabbarItem.push("pages/shop/shop");
tabbarItem.push("pages/person/person");
LinkedList<String> indexItem = new LinkedList<>();
indexItem.push("/pages/index/login");
if (showCode) indexItem.push("/pages/residents/code");
if (showCode) indexItem.push("scanQRCode");
indexItem.push("/pages/residents/report");
if (showShop) indexItem.push("/pages/shop/shop");
indexItem.push("/pages/person/person");
indexItem.push("/pages/person/updpwd");
HashMap<String, Object> map = new HashMap<>();
map.put("tabbarItem", tabbarItem);
map.put("indexItem", indexItem);
return map;
}
} }

View File

@ -12,6 +12,8 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.ResponseBody;
import java.util.Objects;
@Controller @Controller
@RequestMapping("/access/wechat") @RequestMapping("/access/wechat")
public class WeChatTokenController { public class WeChatTokenController {
@ -47,4 +49,18 @@ public class WeChatTokenController {
return responseBody.bytes(); return responseBody.bytes();
} }
@GetMapping(value = "/rpc/getOpenIdFromApi")
@ResponseBody
@SneakyThrows
public Res getOpenIdFromApi(@RequestParam(value = "code", required = true) String code) {
if (Objects.isNull(code) || "".equals(code)) {
return Res.error("参数错误");
}
String openId = weChatTokenService.getOpenIdFromApi(code);
if (openId == null) {
return Res.error("微信OpenId接口调用失败请刷新重试");
}
return Res.success(openId);
}
} }

View File

@ -97,8 +97,8 @@ public class WeChatTokenServiceImpl implements WeChatTokenService {
params.put("check_path", unlimitedQRCodeParam.getCheckPath()); params.put("check_path", unlimitedQRCodeParam.getCheckPath());
params.put("env_version", unlimitedQRCodeParam.getEnvVersion()); params.put("env_version", unlimitedQRCodeParam.getEnvVersion());
params.put("width", unlimitedQRCodeParam.getWidth()); params.put("width", unlimitedQRCodeParam.getWidth());
params.put("auto_color",unlimitedQRCodeParam.getAutoColor()); params.put("auto_color", unlimitedQRCodeParam.getAutoColor());
params.put("is_hyaline",unlimitedQRCodeParam.getIsHyaline()); params.put("is_hyaline", unlimitedQRCodeParam.getIsHyaline());
String paramsString = JSON.toJSONString(params); String paramsString = JSON.toJSONString(params);
OkHttpClient okHttpClient = new OkHttpClient(); OkHttpClient okHttpClient = new OkHttpClient();
@ -108,11 +108,40 @@ public class WeChatTokenServiceImpl implements WeChatTokenService {
.post(RequestBody.create(paramsString, MediaType.parse("application/json; charset=utf-8"))) .post(RequestBody.create(paramsString, MediaType.parse("application/json; charset=utf-8")))
.build(); .build();
Response response = okHttpClient.newCall(request).execute(); Response response = okHttpClient.newCall(request).execute();
// String result = response.body()response.body().string(); // String result = response.body().string();
// System.out.println("headers: " + response.headers()); // System.out.println("headers: " + response.headers());
// System.out.println("body: " + response.body()); // System.out.println("body: " + response.body());
System.out.println("paramsString: " + paramsString); System.out.println("paramsString: " + paramsString);
return response.body(); return response.body();
} }
@SneakyThrows
public String getOpenIdFromApi(String code) {
// refer:
// https://developers.weixin.qq.com/miniprogram/dev/api/open-api/login/wx.login.html
// https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/user-login/code2Session.html
String url = String.format("https://api.weixin.qq.com/sns/jscode2session?" +
"appid=%s&secret=%s&js_code=%s&grant_type=authorization_code", APPID, APPSECRET, code);
OkHttpClient okHttpClient = new OkHttpClient();
Request request = new Request.Builder()
.url(url)
.get()
.build();
Response response = okHttpClient.newCall(request).execute();
ResponseBody body = response.body();
if (body != null) {
String jsonString = body.string();
// {"session_key":"7DnwgV6kUALcO+j65k5Gcw==","openid":"oFzuC4pvbPzY7vI6vmP6_57iTk-U","unionid":"oZxJH1kLie37EpC4FzslnCcWDEA4"}
JSONObject result = JSONObject.parseObject(jsonString);
String openId = result.getString("openid");
System.out.println("body: " + body + ", result: " + result);
return openId;
} else {
return null;
}
}
} }

View File

@ -82,6 +82,16 @@
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency> </dependency>
<!-- OpenFeign -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
<!-- 分页 --> <!-- 分页 -->
<dependency> <dependency>
<groupId>com.github.pagehelper</groupId> <groupId>com.github.pagehelper</groupId>

View File

@ -3,11 +3,13 @@ package com.cxyxiaomo.epp.user;
import org.springframework.boot.SpringApplication; import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient; import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
// 启动类 // 启动类
@SpringBootApplication @SpringBootApplication
@EnableDiscoveryClient @EnableDiscoveryClient
@EnableFeignClients
public class UserProvider { public class UserProvider {
public static void main(String[] args) { public static void main(String[] args) {
SpringApplication.run(UserProvider.class, args); SpringApplication.run(UserProvider.class, args);

View File

@ -15,6 +15,7 @@ import com.cxyxiaomo.epp.common.pojo.Role;
import com.cxyxiaomo.epp.common.pojo.User; import com.cxyxiaomo.epp.common.pojo.User;
import com.cxyxiaomo.epp.common.response.Res; import com.cxyxiaomo.epp.common.response.Res;
import com.cxyxiaomo.epp.common.vo.UserVO; import com.cxyxiaomo.epp.common.vo.UserVO;
import com.cxyxiaomo.epp.user.rpc.WeChatTokenServiceFeign;
import com.cxyxiaomo.epp.user.service.RoleService; import com.cxyxiaomo.epp.user.service.RoleService;
import com.cxyxiaomo.epp.user.service.UserService; import com.cxyxiaomo.epp.user.service.UserService;
import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageHelper;
@ -25,10 +26,7 @@ import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.Calendar; import java.util.*;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
@Controller @Controller
@RequestMapping("/user") @RequestMapping("/user")
@ -40,6 +38,9 @@ public class UserController {
@Resource @Resource
private RoleService roleService; private RoleService roleService;
@Resource
private WeChatTokenServiceFeign weChatTokenService;
/** /**
* 用户登录 * 用户登录
* *
@ -50,6 +51,12 @@ public class UserController {
@PostMapping("/login") @PostMapping("/login")
@ResponseBody @ResponseBody
public Res login(@RequestParam("username") String username, @RequestParam("password") String password) { public Res login(@RequestParam("username") String username, @RequestParam("password") String password) {
// 微信小程序 随便看看
if (Objects.equals(username, "#fastLogin#") && Objects.equals(password, "#fastLogin#")) {
username = "user";
password = "user";
}
User user = userService.getUserByUsername(username); User user = userService.getUserByUsername(username);
if (user != null) { if (user != null) {
String passwordHash = DigestUtils.sha512Hex(password); String passwordHash = DigestUtils.sha512Hex(password);
@ -65,6 +72,49 @@ public class UserController {
} }
} }
/**
* 微信小程序用户登录
*
* @param code
* @return
*/
@PostMapping("/wxlogin")
@ResponseBody
public Res wxlogin(@RequestParam("code") String code) {
// 微信小程序 登录页面 随便看看
if (Objects.isNull(code)) {
return Res.error("参数错误");
}
String jsonString = weChatTokenService.getOpenIdFromApi(code);
JSONObject jsonObject = JSONObject.parseObject(jsonString);
String openId = jsonObject.getString("data");
if (Objects.isNull(openId) || "".equals(openId)) {
return Res.error("微信接口异常,请重试");
}
User user = userService.getUserByWxcode(openId);
if (user == null) {
// 创建一个新用户
user = new User();
user.setId(null);
user.setUsername(UUID.randomUUID().toString().replace("-", "").substring(0, 10));
user.setPassword(UUID.randomUUID().toString());
user.setRealname("微信用户" + user.getUsername().substring(0, 5));
user.setRoleId(3);
user.setPermission("1");
user.setWxcode(openId);
userService.addUser(user);
// 添加之后 user.getId() 可以获取到用户id
// System.out.println("userId: " + user.getId());
}
// 完成登录
HashMap<String, Object> map = new HashMap<>();
map.put("userInfo", UserVO.convertFrom(user));
return Res.success(map);
}
/** /**
* 通过用户ID获取用户信息 * 通过用户ID获取用户信息
* *

View File

@ -19,6 +19,8 @@ public interface UserDao {
User getUserByUsername(String username); User getUserByUsername(String username);
User getUserByWxcode(String wxcode);
public List<User> getUserList(UserVO userVO); public List<User> getUserList(UserVO userVO);
public boolean deleteUserById(Integer userId); public boolean deleteUserById(Integer userId);

View File

@ -0,0 +1,16 @@
package com.cxyxiaomo.epp.user.rpc;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
@FeignClient("microservice-provider-access")
public interface WeChatTokenServiceFeign {
/**
* 返回值参数要对应方法名随意
* OpenFeign 中方法参数前如果没有注解默认添加 @RequestBody 注解最多只能存在一个不带注解的参数
* 普通表单参数必须添加 @Requestparam 注解如果变量名和参数名称对应可以不写name
*/
@GetMapping("/access/wechat/rpc/getOpenIdFromApi")
String getOpenIdFromApi(@RequestParam("code") String code);
}

View File

@ -18,6 +18,10 @@ public class UserService {
return userDao.getUserByUsername(username); return userDao.getUserByUsername(username);
} }
public User getUserByWxcode(String wxcode) {
return userDao.getUserByWxcode(wxcode);
}
public User getUserById(Integer id) { public User getUserById(Integer id) {
return userDao.getUserById(id); return userDao.getUserById(id);
} }

View File

@ -3,11 +3,11 @@
PUBLIC "-//mybatis.org//DTD Config 3.0//EN" PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.cxyxiaomo.epp.user.dao.UserDao"> <mapper namespace="com.cxyxiaomo.epp.user.dao.UserDao">
<insert id="addUser" parameterType="com.cxyxiaomo.epp.common.pojo.User"> <insert id="addUser" parameterType="com.cxyxiaomo.epp.common.pojo.User" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
INSERT INTO user (username, `password`, realname, id_number, phone_number, role_id, building_id, doorplate, INSERT INTO user (username, `password`, realname, id_number, phone_number, role_id, building_id, doorplate,
permission, permission_time) permission, permission_time, wx_code)
VALUES (#{username}, #{password}, #{realname}, #{idNumber}, #{phoneNumber}, #{roleId}, #{buildingId}, VALUES (#{username}, #{password}, #{realname}, #{idNumber}, #{phoneNumber}, #{roleId}, #{buildingId},
#{doorplate}, #{permission}, #{permissionTime}) #{doorplate}, #{permission}, #{permissionTime}, #{wxcode})
</insert> </insert>
<update id="updateUser" parameterType="com.cxyxiaomo.epp.common.pojo.User"> <update id="updateUser" parameterType="com.cxyxiaomo.epp.common.pojo.User">
UPDATE user UPDATE user
@ -42,6 +42,9 @@
<if test="permissionTime != null"> <if test="permissionTime != null">
permission_time = #{permissionTime}, permission_time = #{permissionTime},
</if> </if>
<if test="wxcode != null and wxcode != ''">
wx_code = #{doorplate},
</if>
</set> </set>
WHERE id = #{id} WHERE id = #{id}
</update> </update>
@ -55,6 +58,11 @@
from user from user
where username = #{username} where username = #{username}
</select> </select>
<select id="getUserByWxcode" resultType="com.cxyxiaomo.epp.common.pojo.User">
select *
from user
where wx_code = #{wxcode}
</select>
<select id="getUserList" resultType="com.cxyxiaomo.epp.common.pojo.User"> <select id="getUserList" resultType="com.cxyxiaomo.epp.common.pojo.User">
select * select *
from user from user

File diff suppressed because it is too large Load Diff

View File

@ -460,12 +460,40 @@
"response": [] "response": []
}, },
{ {
"name": "[线上] 小程序端 获取大门详情", "name": "[微服务] 小程序端 获取大门详情",
"request": { "request": {
"method": "GET", "method": "GET",
"header": [], "header": [],
"url": { "url": {
"raw": "https://epp.only4.work/guard-client/getGateList", "raw": "http://localhost:8002/access/gate/miniprogram/detail?id=261758638368624873480",
"protocol": "http",
"host": [
"localhost"
],
"port": "8002",
"path": [
"access",
"gate",
"miniprogram",
"detail"
],
"query": [
{
"key": "id",
"value": "261758638368624873480"
}
]
}
},
"response": []
},
{
"name": "[线上] 小程序端 获取大门详情 Copy",
"request": {
"method": "GET",
"header": [],
"url": {
"raw": "https://epp.only4.work/access/gate/miniprogram/detail?id=261758638368624873480",
"protocol": "https", "protocol": "https",
"host": [ "host": [
"epp", "epp",
@ -473,8 +501,44 @@
"work" "work"
], ],
"path": [ "path": [
"guard-client", "access",
"getGateList" "gate",
"miniprogram",
"detail"
],
"query": [
{
"key": "id",
"value": "261758638368624873480"
}
]
}
},
"response": []
},
{
"name": "[微服务RPC] 微信小程序登录获取openId",
"request": {
"method": "GET",
"header": [],
"url": {
"raw": "http://localhost:8002/access/wechat/rpc/getOpenIdFromApi?code=0f1meZZv3MRot03quH3w3Xnp744meZZu",
"protocol": "http",
"host": [
"localhost"
],
"port": "8002",
"path": [
"access",
"wechat",
"rpc",
"getOpenIdFromApi"
],
"query": [
{
"key": "code",
"value": "0f1meZZv3MRot03quH3w3Xnp744meZZu"
}
] ]
} }
}, },

View File

@ -1,20 +1,27 @@
// app.js // app.js
App({
onLaunch() {
// 展示本地存储能力
const logs = wx.getStorageSync('logs') || []
logs.unshift(Date.now())
wx.setStorageSync('logs', logs)
// 登录 const toggleCustomTabBar = require('./custom-tab-bar/toggleCustomTabBar')
wx.login({
success: res => { App({
// 发送 res.code 到后台换取 openId, sessionKey, unionId async onLaunch() {
}
}) // 获取下拉框信息
toggleCustomTabBar.updateConfig(this.globalData.baseUrl)
// // 展示本地存储能力
// const logs = wx.getStorageSync('logs') || []
// logs.unshift(Date.now())
// wx.setStorageSync('logs', logs)
// // 登录
// wx.login({
// success: res => {
// // 发送 res.code 到后台换取 openId, sessionKey, unionId
// }
// })
}, },
globalData: { globalData: {
debugMode: true, // 是否展示调试内容 // debugMode: true, // 是否展示调试内容
baseUrl: true ? // Api 请求域名 不带最后的 / baseUrl: true ? // Api 请求域名 不带最后的 /
"https://epp.only4.work" : "https://epp.only4.work" :
"http://localhost", "http://localhost",

View File

@ -19,10 +19,11 @@
"navigationBarTextStyle": "white" "navigationBarTextStyle": "white"
}, },
"tabBar": { "tabBar": {
"custom": false, "custom": true,
"color": "#000000", "————custom": false,
"backgroundColor": "#fff", "————color": "#000000",
"selectedColor": "#FF8966", "————backgroundColor": "#fff",
"————selectedColor": "#FF8966",
"list": [ "list": [
{ {
"pagePath": "pages/index/index", "pagePath": "pages/index/index",

View File

@ -0,0 +1,55 @@
Component({
data: {
selected: 0,
color: "#000000",
selectedColor: "#FF8966",
list: null, // 在 toggleCustomTabBar.js 中动态设置下面的菜单项
rawList: [
{
"pagePath": "pages/index/index",
"text": "首页",
"iconPath": "image/icon/_home.png",
"selectedIconPath": "image/icon/home.png"
},
{
"pagePath": "pages/residents/code",
"text": "进出码",
"iconPath": "image/icon/_code.png",
"selectedIconPath": "image/icon/code.png"
},
{
"pagePath": "pages/residents/report",
"text": "体温上报",
"iconPath": "image/icon/_report.png",
"selectedIconPath": "image/icon/report.png"
},
{
"pagePath": "pages/shop/shop",
"text": "生活物资",
"iconPath": "image/icon/_shopping.png",
"selectedIconPath": "image/icon/shopping.png"
},
{
"pagePath": "pages/person/person",
"text": "我",
"iconPath": "image/icon/_person.png",
"selectedIconPath": "image/icon/person.png"
}
]
},
onShow() {
console.log("[CustomTabBar] onLoad")
},
attached() {
},
methods: {
switchTab(e) {
const data = e.currentTarget.dataset
const url = '/' + data.path
wx.switchTab({ url })
this.setData({
selected: data.index
})
}
}
})

View File

@ -0,0 +1,4 @@
{
"component": true,
"usingComponents": {}
}

View File

@ -0,0 +1,8 @@
<!--miniprogram/custom-tab-bar/index.wxml-->
<cover-view class="tab-bar">
<cover-view class="tab-bar-border"></cover-view>
<cover-view wx:for="{{list}}" wx:key="index" class="tab-bar-item" data-path="{{item.pagePath}}" data-index="{{index}}" bindtap="switchTab">
<cover-image src="../{{selected === index ? item.selectedIconPath : item.iconPath}}"></cover-image>
<cover-view style="color: {{selected === index ? selectedColor : color}}">{{item.text}}</cover-view>
</cover-view>
</cover-view>

View File

@ -0,0 +1,38 @@
.tab-bar {
position: fixed;
bottom: 0;
left: 0;
right: 0;
height: 48px;
background: white;
display: flex;
padding-bottom: env(safe-area-inset-bottom);
}
.tab-bar-border {
background-color: rgba(0, 0, 0, 0.33);
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 1px;
transform: scaleY(0.5);
}
.tab-bar-item {
flex: 1;
text-align: center;
display: flex;
justify-content: center;
align-items: center;
flex-direction: column;
}
.tab-bar-item cover-image {
width: 27px;
height: 27px;
}
.tab-bar-item cover-view {
font-size: 10px;
}

View File

@ -0,0 +1,97 @@
var defaultTabbarItem = [
"pages/person/person",
"pages/residents/report",
"pages/index/index"
]
export function toggle(that) {
let pages = getCurrentPages()
let route = pages[pages.length - 1].route
console.log("[CustomTabBar] route", route)
if (!typeof that.getTabBar === 'function' || !that.getTabBar()) {
// wx.showModal({
// title: '版本太旧',
// content: '您的微信版本太旧,无法使用本小程序',
// showCancel: false,
// complete: (res) => {
// wx.exitMiniProgram()
// }
// })
return
}
// 找出要选择哪一项
let tabBar = that.getTabBar()
console.log("[CustomTabBar] tabBar", tabBar)
let data = tabBar.data
console.log("[CustomTabBar] data", data)
let showPagePathList = wx.getStorageSync('tabbarItem') || defaultTabbarItem
console.log("[CustomTabBar] showPagePathList", showPagePathList)
let list = tabBar.data.rawList.filter((page) => showPagePathList.includes(page.pagePath))
console.log("[CustomTabBar] tabBarList", list)
let selected = list ? list.indexOf(list.find(p => p.pagePath == route)) : -1
console.log("[CustomTabBar] selected", selected)
console.log("更新tabbar")
// 选中这一项
tabBar.setData({
selected: selected,
list: list
})
}
export function updateConfig(baseUrl) {
// 请求配置文件(用于审核时隐藏部分功能)
wx.request({
url: baseUrl + '/getConfig',
success(result) {
let data = result.data
if (data.tabbarItem) {
console.log("[CustomTabBar] tabbar数据拉取完毕")
wx.setStorageSync('tabbarItem', data.tabbarItem)
wx.setStorageSync('indexItem', data.indexItem)
const pages = getCurrentPages();
const indexPage = pages[0]
const currentPage = pages[pages.length - 1]
console.log("[CustomTabBar] indexPage", indexPage)
console.log("[CustomTabBar] currentPage", currentPage)
// // 更新tabbar
// toggle(currentPage)
// 刷新首页中包含了触发 toggle 的代码 此处不重复触发
// 刷新首页
indexPage && indexPage.onLoad()
// let tabBar = currentPage.getTabBar()
// tabBar.setData({
// list: tabBar.data.rawList.filter((page) => itemList.includes(page.pagePath))
// })
}
},
fail() {
wx.showModal({
title: '小程序启动失败',
content: '点击确认重试,若多次失败请检查网络连接',
complete: (res) => {
if (res.cancel) {
wx.exitMiniProgram()
}
if (res.confirm) {
wx.reLaunch({
url: 'pages/index/index',
})
}
}
})
}
})
}

View File

@ -1,6 +1,7 @@
// pages/index/index.js // pages/index/index.js
const menuItemDict = require('../../utils/menuList.js') const menuItemDict = require('../../utils/menuList.js')
const getUserGroupByRole = require('../../utils/getUserGroupByRole.js') const getUserGroupByRole = require('../../utils/getUserGroupByRole.js')
const toggleCustomTabBar = require('../../custom-tab-bar/toggleCustomTabBar')
import scanQRCode from '../../utils/scanQRCode' import scanQRCode from '../../utils/scanQRCode'
@ -22,6 +23,7 @@ Page({
* 生命周期函数--监听页面加载 * 生命周期函数--监听页面加载
*/ */
onLoad(options) { onLoad(options) {
toggleCustomTabBar.toggle(this)
console.log("index/index onLoad", options) console.log("index/index onLoad", options)
// console.log("wx.getLaunchOptionsSync()", wx.getLaunchOptionsSync()) // console.log("wx.getLaunchOptionsSync()", wx.getLaunchOptionsSync())
@ -39,7 +41,7 @@ Page({
debugText: JSON.stringify(options, null, 4), debugText: JSON.stringify(options, null, 4),
userInfo: userInfo, userInfo: userInfo,
userGroup: userGroup, userGroup: userGroup,
displayUsername: userInfo?.username ?? "请登录", displayUsername: userInfo ? (`${userInfo.realname} (${userInfo.username})`) : "请登录",
filterMenuItems: this.getFilterMenuItems(menuItemDict, userGroup) filterMenuItems: this.getFilterMenuItems(menuItemDict, userGroup)
}) })
console.log("menuItemDict", menuItemDict) console.log("menuItemDict", menuItemDict)
@ -82,6 +84,7 @@ Page({
* 生命周期函数--监听页面显示 * 生命周期函数--监听页面显示
*/ */
onShow() { onShow() {
toggleCustomTabBar.toggle(this)
console.log("index/index onShow") console.log("index/index onShow")
}, },
@ -122,8 +125,21 @@ Page({
getFilterMenuItems(menuItemDict, userGroup) { getFilterMenuItems(menuItemDict, userGroup) {
return Object.values(menuItemDict) let filterMenuItems = Object.values(menuItemDict)
.filter((item) => item.for.indexOf(userGroup) != -1) .filter((item) => item.for.indexOf(userGroup) != -1)
// 动态控制显示隐藏
let indexItem = wx.getStorageSync('indexItem') || [
"/pages/index/login",
"/pages/person/person"
]
filterMenuItems = filterMenuItems
.filter((item) => {
let a = indexItem.includes(item.url)
console.log("filterMenuItems -> filter", item.url, indexItem)
return a
})
return filterMenuItems
}, },

View File

@ -15,11 +15,11 @@ Page({
* 生命周期函数--监听页面加载 * 生命周期函数--监听页面加载
*/ */
onLoad(options) { onLoad(options) {
if (app.globalData.debugMode) { // if (app.globalData.debugMode) {
this.setData({ // this.setData({
debugMode: true, // debugMode: true,
}) // })
} // }
}, },
/** /**
@ -81,12 +81,54 @@ Page({
fastLogin() { fastLogin() {
this.setData({ this.setData({
username: "user", username: "#fastLogin#",
password: "user", password: "#fastLogin#",
}) })
this.login() this.login()
}, },
wxLogin() {
var that = this
wx.login({
success(res) {
if (res.code) {
wx.showLoading({
title: '加载中'
})
wx.request({
url: app.globalData.baseUrl + '/user/wxlogin',
method: "POST",
header: {
"Content-Type": "application/x-www-form-urlencoded" //用于post
},
data: {
code: res.code
},
success: function (d) {
wx.hideLoading()
that._loginSuccessCallback(d)
},
fail: function () {
wx.hideLoading()
wx.showToast({
title: "请求失败",
icon: 'error',
duration: 2000
})
}
})
} else {
console.log('登录失败!' + res.errMsg)
wx.showModal({
title: '登录失败',
content: '您点击了取消按钮' + res.errMsg,
showCancel: false
})
}
}
})
},
login() { login() {
console.log("login userInput", this.data.username, this.data.password) console.log("login userInput", this.data.username, this.data.password)
if (!this.data.username || !this.data.password) { if (!this.data.username || !this.data.password) {
@ -96,6 +138,7 @@ Page({
duration: 2000 duration: 2000
}) })
} else { } else {
var that = this
wx.showLoading({ wx.showLoading({
title: '加载中' title: '加载中'
}) })
@ -111,32 +154,7 @@ Page({
}, },
success: function (d) { success: function (d) {
wx.hideLoading() wx.hideLoading()
let result = d.data; that._loginSuccessCallback(d)
if (result.success) {
// 登录成功
if (![3, 4, 5, 6].includes(result.data.userInfo.roleId)) {
wx.showModal({
title: '你不是社区居民',
content: '管理员请前往网页版登录',
showCancel: false,
complete: (res) => {
//
}
})
return
}
wx.setStorageSync("userInfo", result.data.userInfo);
console.log("userInfo", wx.getStorageSync("userInfo"))
wx.switchTab({
url: '/pages/index/index'
})
} else {
wx.showToast({
title: result.msg,
icon: 'error',
duration: 2000
})
}
}, },
fail: function () { fail: function () {
wx.hideLoading() wx.hideLoading()
@ -148,5 +166,34 @@ Page({
} }
}) })
} }
},
_loginSuccessCallback(d) {
let result = d.data;
if (result.success) {
// 登录成功
if (![3, 4, 5, 6].includes(result.data.userInfo.roleId)) {
wx.showModal({
title: '你不是社区居民',
content: '管理员请前往网页版登录',
showCancel: false,
complete: (res) => {
//
}
})
return
}
wx.setStorageSync("userInfo", result.data.userInfo);
console.log("userInfo", wx.getStorageSync("userInfo"))
wx.switchTab({
url: '/pages/index/index'
})
} else {
wx.showToast({
title: result.msg,
icon: 'error',
duration: 2000
})
}
} }
}) })

View File

@ -12,9 +12,11 @@
</view> </view>
<view class="loginBtnView"> <view class="loginBtnView">
<!--按钮--> <!--按钮-->
<button wx:if="{{debugMode}}" class="loginBtn" type="warn" bindtap="fastLogin">DEBUG快速登录user</button> <!-- <button wx:if="{{debugMode}}" class="loginBtn" type="warn" bindtap="fastLogin">DEBUG快速登录user</button> -->
<button class="loginBtn" type="primary" bindtap="login">登录</button> <button class="loginBtn" type="primary" bindtap="login">密码登录</button>
<button class="loginBtn" type="secondary" bindtap="visitor">访客申请</button> <!-- <button class="loginBtn" type="secondary" bindtap="visitor">访客申请</button> -->
<button class="loginBtn" type="primary" bindtap="wxLogin">微信登录/注册</button>
<button class="loginBtn" type="secondary" bindtap="fastLogin">随便看看</button>
</view> </view>
</view> </view>
</view> </view>

View File

@ -1,5 +1,7 @@
// pages/person/person.js // pages/person/person.js
const toggleCustomTabBar = require('../../custom-tab-bar/toggleCustomTabBar')
const { const {
user user
} = require("../../utils/const") } = require("../../utils/const")
@ -16,7 +18,8 @@ Page({
avatarUrl: defaultAvatarUrl, avatarUrl: defaultAvatarUrl,
nickName: "请登录", nickName: "请登录",
displayUserId: "", displayUserId: "",
menuList: [ menuList: [],
menuListRaw: [
{ {
id: "myOrder", id: "myOrder",
title: "我的订单", title: "我的订单",
@ -26,14 +29,14 @@ Page({
color: 'red', color: 'red',
title: "退出登录", title: "退出登录",
} }
] ],
}, },
/** /**
* 生命周期函数--监听页面加载 * 生命周期函数--监听页面加载
*/ */
onLoad(options) { onLoad(options) {
toggleCustomTabBar.toggle(this)
}, },
/** /**
@ -47,6 +50,20 @@ Page({
* 生命周期函数--监听页面显示 * 生命周期函数--监听页面显示
*/ */
onShow() { onShow() {
toggleCustomTabBar.toggle(this)
// 是否隐藏 我的订单
let arr = wx.getStorageSync("indexItem")
if (!arr || !arr.includes("/pages/shop/shop")) {
this.setData({
menuList: this.data.menuListRaw.filter(i => i.id != 'myOrder')
})
} else {
this.setData({
menuList: this.data.menuListRaw
})
}
let userInfo = wx.getStorageSync("userInfo") let userInfo = wx.getStorageSync("userInfo")
if (!userInfo) { if (!userInfo) {
console.log("用户未登录") console.log("用户未登录")
@ -109,7 +126,6 @@ Page({
console.log("e", userInfo) console.log("e", userInfo)
this.setData({ this.setData({
avatarUrl: userInfo.avatarUrl, avatarUrl: userInfo.avatarUrl,
}) })
}, },

View File

@ -4,6 +4,7 @@ import utils from '../../utils/util'
// import drawQrcode from '../../utils/qrcode/index' // import drawQrcode from '../../utils/qrcode/index'
import drawQrcode from '../../utils/lib/weapp.qrcode.esm.js' import drawQrcode from '../../utils/lib/weapp.qrcode.esm.js'
import scanQRCode from '../../utils/scanQRCode' import scanQRCode from '../../utils/scanQRCode'
const toggleCustomTabBar = require('../../custom-tab-bar/toggleCustomTabBar')
const app = getApp(); const app = getApp();
@ -25,7 +26,7 @@ Page({
* 生命周期函数--监听页面加载 * 生命周期函数--监听页面加载
*/ */
onLoad(options) { onLoad(options) {
toggleCustomTabBar.toggle(this)
}, },
/** /**
@ -39,6 +40,7 @@ Page({
* 生命周期函数--监听页面显示 * 生命周期函数--监听页面显示
*/ */
onShow() { onShow() {
toggleCustomTabBar.toggle(this)
console.log('onShow') console.log('onShow')
// setTimeout(this.refershData, 100) // setTimeout(this.refershData, 100)
this.refershData() this.refershData()

View File

@ -1,6 +1,8 @@
// pages/residents/report.js // pages/residents/report.js
import utils from '../../utils/util' import utils from '../../utils/util'
const toggleCustomTabBar = require('../../custom-tab-bar/toggleCustomTabBar')
const app = getApp(); const app = getApp();
Page({ Page({
@ -32,6 +34,7 @@ Page({
* 生命周期函数--监听页面加载 * 生命周期函数--监听页面加载
*/ */
onLoad(options) { onLoad(options) {
toggleCustomTabBar.toggle(this)
console.log("residents/report onLoad") console.log("residents/report onLoad")
}, },
@ -46,6 +49,7 @@ Page({
* 生命周期函数--监听页面显示 * 生命周期函数--监听页面显示
*/ */
onShow() { onShow() {
toggleCustomTabBar.toggle(this)
console.log("residents/report onShow") console.log("residents/report onShow")
if (this.data.isSkipOnShowFunc) { if (this.data.isSkipOnShowFunc) {
this.setData({ this.setData({

View File

@ -1,5 +1,7 @@
// pages/shop/shop.js // pages/shop/shop.js
const toggleCustomTabBar = require('../../custom-tab-bar/toggleCustomTabBar')
const goodService = require("../../services/good") const goodService = require("../../services/good")
Page({ Page({
@ -62,6 +64,7 @@ Page({
* 生命周期函数--监听页面加载 * 生命周期函数--监听页面加载
*/ */
onLoad(options) { onLoad(options) {
toggleCustomTabBar.toggle(this)
this.loadPageData(); this.loadPageData();
}, },
@ -76,7 +79,7 @@ Page({
* 生命周期函数--监听页面显示 * 生命周期函数--监听页面显示
*/ */
onShow() { onShow() {
toggleCustomTabBar.toggle(this)
}, },
/** /**
@ -193,7 +196,7 @@ Page({
}) })
})(); })();
(async () => { (async () => {
let goodCategoryListPromise = goodService.getGoodCategoryList() let goodCategoryListPromise = goodService.getGoodCategoryList()
Promise.all([ Promise.all([

View File

@ -39,55 +39,55 @@ let menuItemDict = {
switchFunc: switchTab, switchFunc: switchTab,
url: '/pages/shop/shop' url: '/pages/shop/shop'
}, },
'apply-record': { // 'apply-record': {
for: ['visitor'], // for: ['visitor'],
title: "申请记录", // title: "申请记录",
image: "apply.png", // image: "apply.png",
switchFunc: switchTab, // switchFunc: switchTab,
url: '' // url: ''
}, // },
'apply-approval': { // 'apply-approval': {
for: ['admin'], // for: ['admin'],
title: "申请审批", // title: "申请审批",
image: "apply.png", // ApplyReplay // image: "apply.png", // ApplyReplay
switchFunc: switchTab, // switchFunc: switchTab,
url: '' // url: ''
}, // },
'visitor-apply': { // 'visitor-apply': {
for: ['admin'], // for: ['admin'],
title: "访客审批", // title: "访客审批",
image: "visitor.png", // image: "visitor.png",
switchFunc: switchTab, // switchFunc: switchTab,
url: '' // url: ''
}, // },
'abnormal': { // 'abnormal': {
for: ['admin'], // for: ['admin'],
title: "异常人员", // title: "异常人员",
image: "danger.png", // image: "danger.png",
switchFunc: switchTab, // switchFunc: switchTab,
url: '' // url: ''
}, // },
'feedback-submit': { // 'feedback-submit': {
for: ['visitor'], // for: ['visitor'],
title: "提交反馈", // title: "提交反馈",
image: "fk.png", // image: "fk.png",
switchFunc: switchTab, // switchFunc: switchTab,
url: '' // url: ''
}, // },
'feedback-list': { // 'feedback-list': {
for: ['visitor'], // for: ['visitor'],
title: "反馈查看", // title: "反馈查看",
image: "feedback.png", // image: "feedback.png",
switchFunc: switchTab, // switchFunc: switchTab,
url: '' // url: ''
}, // },
'feedback-reply': { // 'feedback-reply': {
for: ['admin'], // for: ['admin'],
title: "反馈回复", // title: "反馈回复",
image: "feedback.png", // image: "feedback.png",
switchFunc: switchTab, // switchFunc: switchTab,
url: '' // url: ''
}, // },
'person': { 'person': {
for: ['admin', 'user'], for: ['admin', 'user'],
title: "个人中心", title: "个人中心",
@ -100,22 +100,22 @@ let menuItemDict = {
title: "密码修改", title: "密码修改",
image: "updPwd.png", image: "updPwd.png",
switchFunc: switchTab, switchFunc: switchTab,
url: '' url: '/pages/person/updpwd'
}, },
'assign': { // 'assign': {
for: ['admin'], // for: ['admin'],
title: "分配账号", // title: "分配账号",
image: "count.png", // image: "count.png",
switchFunc: switchTab, // switchFunc: switchTab,
url: '' // url: ''
}, // },
'unfinish': { // 'unfinish': {
for: ['admin'], // for: ['admin'],
title: "今日未填", // RedList // title: "今日未填", // RedList
image: "_report.png", // image: "_report.png",
switchFunc: switchTab, // switchFunc: switchTab,
url: '' // url: ''
} // }
} }
let keys = Object.keys(menuItemDict); let keys = Object.keys(menuItemDict);
for (let key of keys) { for (let key of keys) {