Merge remote-tracking branch 'origin/feature-20240104' into feature-20240104

master
elliott 2 years ago
commit 8e4f2bc1c1

@ -60,5 +60,15 @@ public class CacheConstants
/**
* session_key
*/
public static final String wx_session_key_cache = "wx_session_key:";
public static final String WX_SESSION_KEY_CACHE = "wx_session_key:";
/**
* access_token
*/
public static final String WX_ACCESS_TOKEN_CACHE = "wx_access_token_cache:";
/**
* access_token
*/
public static final long WX_ACCESS_TOKEN_EXPIRATION = 120;
}

@ -52,7 +52,7 @@ public class WxUserMember extends BaseEntity {
private String openid;
/**
* $column.columnComment
* unionid
*/
@Excel(name = "unionid")
private String unionid;
@ -75,18 +75,6 @@ public class WxUserMember extends BaseEntity {
@Excel(name = "手机")
private String mobile;
/**
*
*/
@Excel(name = "密码")
private String password;
/**
*
*/
@Excel(name = "个人二维码")
private String userQr;
/**
* id
*/
@ -131,13 +119,13 @@ public class WxUserMember extends BaseEntity {
private Date birthday;
/**
* 12
* 12
*/
@Excel(name = "1可以2不可以")
private Integer clock;
/**
* 12
* 12
*/
@Excel(name = "1可以2不可以")
private Integer activity;
@ -148,11 +136,6 @@ public class WxUserMember extends BaseEntity {
@Excel(name = "微信号")
private String wechat;
/**
*
*/
@Excel(name = "应该是邀请码来的")
private String code;
/**
* 1 2 3
@ -160,17 +143,16 @@ public class WxUserMember extends BaseEntity {
@Excel(name = "1 未对接到中控 2已经对接 3对接失败")
private Integer isAbutment;
/**
* $column.columnComment
* 0 1
*/
@Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
private BigDecimal collagenDay;
private Integer isCompleteInformation;
/**
* $column.columnComment
*
*/
@Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
private BigDecimal collagenMount;
private Integer devicesNum;
/**
*
@ -265,22 +247,6 @@ public class WxUserMember extends BaseEntity {
return mobile;
}
public void setPassword(String password) {
this.password = password;
}
public String getPassword() {
return password;
}
public void setUserQr(String userQr) {
this.userQr = userQr;
}
public String getUserQr() {
return userQr;
}
public void setProvince(String province) {
this.province = province;
}
@ -337,13 +303,6 @@ public class WxUserMember extends BaseEntity {
return wechat;
}
public void setCode(String code) {
this.code = code;
}
public String getCode() {
return code;
}
public void setIsAbutment(Integer isAbutment) {
this.isAbutment = isAbutment;
@ -353,22 +312,6 @@ public class WxUserMember extends BaseEntity {
return isAbutment;
}
public void setCollagenDay(BigDecimal collagenDay) {
this.collagenDay = collagenDay;
}
public BigDecimal getCollagenDay() {
return collagenDay;
}
public void setCollagenMount(BigDecimal collagenMount) {
this.collagenMount = collagenMount;
}
public BigDecimal getCollagenMount() {
return collagenMount;
}
public void setLoginTime(Date loginTime) {
this.loginTime = loginTime;
}
@ -409,10 +352,26 @@ public class WxUserMember extends BaseEntity {
this.areaId = areaId;
}
public Integer getIsCompleteInformation() {
return isCompleteInformation;
}
public void setIsCompleteInformation(Integer isCompleteInformation) {
this.isCompleteInformation = isCompleteInformation;
}
public Integer getDevicesNum() {
return devicesNum;
}
public void setDevicesNum(Integer devicesNum) {
this.devicesNum = devicesNum;
}
public WxUserMember() {
}
public WxUserMember(Long id, String nickname, String headimg, String username, BigDecimal credit, String openid, String unionid, Integer userType, Integer level, String mobile, String password, String userQr, String provinceId, String province, String cityId, String city, String areaId, String area, Date birthday, Integer clock, Integer activity, String wechat, String code, Integer isAbutment, BigDecimal collagenDay, BigDecimal collagenMount, Date loginTime, Integer status) {
public WxUserMember(Long id, String nickname, String headimg, String username, BigDecimal credit, String openid, String unionid, Integer userType, Integer level, String mobile, String provinceId, String province, String cityId, String city, String areaId, String area, Date birthday, Integer clock, Integer activity, String wechat, Integer isAbutment, Integer isCompleteInformation, Integer devicesNum, Date loginTime, Integer status) {
this.id = id;
this.nickname = nickname;
this.headimg = headimg;
@ -423,8 +382,6 @@ public class WxUserMember extends BaseEntity {
this.userType = userType;
this.level = level;
this.mobile = mobile;
this.password = password;
this.userQr = userQr;
this.provinceId = provinceId;
this.province = province;
this.cityId = cityId;
@ -435,45 +392,10 @@ public class WxUserMember extends BaseEntity {
this.clock = clock;
this.activity = activity;
this.wechat = wechat;
this.code = code;
this.isAbutment = isAbutment;
this.collagenDay = collagenDay;
this.collagenMount = collagenMount;
this.isCompleteInformation = isCompleteInformation;
this.devicesNum = devicesNum;
this.loginTime = loginTime;
this.status = status;
}
@Override
public String toString() {
return "WxUserMember{" +
"id=" + id +
", nickname='" + nickname + '\'' +
", headimg='" + headimg + '\'' +
", username='" + username + '\'' +
", credit=" + credit +
", openid='" + openid + '\'' +
", unionid='" + unionid + '\'' +
", userType=" + userType +
", level=" + level +
", mobile='" + mobile + '\'' +
", password='" + password + '\'' +
", userQr='" + userQr + '\'' +
", provinceId='" + provinceId + '\'' +
", province='" + province + '\'' +
", cityId='" + cityId + '\'' +
", city='" + city + '\'' +
", areaId='" + areaId + '\'' +
", area='" + area + '\'' +
", birthday=" + birthday +
", clock=" + clock +
", activity=" + activity +
", wechat='" + wechat + '\'' +
", code='" + code + '\'' +
", isAbutment=" + isAbutment +
", collagenDay=" + collagenDay +
", collagenMount=" + collagenMount +
", loginTime=" + loginTime +
", status=" + status +
'}';
}
}

@ -0,0 +1,203 @@
package com.flossom.common.core.domain.req;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.flossom.common.core.annotation.Excel;
import com.flossom.common.core.web.domain.BaseEntity;
import java.math.BigDecimal;
import java.util.Date;
/**
*
*
* @author flossom
* @date 2023-12-08
*/
public class WxUserMemberVm {
/**
*
*/
private Long id;
/**
*
*/
@Excel(name = "会员昵称")
private String nickname;
/**
*
*/
@Excel(name = "积分")
private Integer creditStart;
/**
*
*/
private Integer creditEnd;
/**
* 0 1
*/
@Excel(name = "用户类型0游客 1会员")
private Integer userType;
/**
*
*/
@Excel(name = "手机")
private String mobile;
/**
* id
*/
@Excel(name = "省id")
private String provinceId;
/**
* id
*/
@Excel(name = "市id")
private String cityId;
/**
* id
*/
@Excel(name = "区id")
private String areaId;
/**
*
*/
@JsonFormat(pattern = "yyyy-MM-dd")
private Date birthday;
/**
*
*/
private Date createTimeStart;
/**
*
*/
private Date createTimeEnd;
public WxUserMemberVm() {
}
public WxUserMemberVm(Long id, String nickname, Integer creditStart, Integer creditEnd, Integer userType, String mobile, String provinceId, String cityId, String areaId, Date birthday, Date createTimeStart, Date createTimeEnd) {
this.id = id;
this.nickname = nickname;
this.creditStart = creditStart;
this.creditEnd = creditEnd;
this.userType = userType;
this.mobile = mobile;
this.provinceId = provinceId;
this.cityId = cityId;
this.areaId = areaId;
this.birthday = birthday;
this.createTimeStart = createTimeStart;
this.createTimeEnd = createTimeEnd;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getNickname() {
return nickname;
}
public void setNickname(String nickname) {
this.nickname = nickname;
}
public Integer getCreditStart() {
return creditStart;
}
public void setCreditStart(Integer creditStart) {
this.creditStart = creditStart;
}
public Integer getCreditEnd() {
return creditEnd;
}
public void setCreditEnd(Integer creditEnd) {
this.creditEnd = creditEnd;
}
public Integer getUserType() {
return userType;
}
public void setUserType(Integer userType) {
this.userType = userType;
}
public String getMobile() {
return mobile;
}
public void setMobile(String mobile) {
this.mobile = mobile;
}
public String getProvinceId() {
return provinceId;
}
public void setProvinceId(String provinceId) {
this.provinceId = provinceId;
}
public String getCityId() {
return cityId;
}
public void setCityId(String cityId) {
this.cityId = cityId;
}
public String getAreaId() {
return areaId;
}
public void setAreaId(String areaId) {
this.areaId = areaId;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public Date getCreateTimeStart() {
return createTimeStart;
}
public void setCreateTimeStart(Date createTimeStart) {
this.createTimeStart = createTimeStart;
}
public Date getCreateTimeEnd() {
return createTimeEnd;
}
public void setCreateTimeEnd(Date createTimeEnd) {
this.createTimeEnd = createTimeEnd;
}
}

@ -1,6 +1,7 @@
package com.flossom.common.core.mapper;
import com.flossom.common.core.domain.entity.WxUserIntegralLog;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@ -59,4 +60,6 @@ public interface WxUserIntegralLogMapper
* @return
*/
public int deleteWxUserIntegralLogByIds(Long[] ids);
List<WxUserIntegralLog> obtainUserIntegral(@Param("userId") Long userId);
}

@ -2,6 +2,7 @@ package com.flossom.common.core.mapper;
import com.flossom.common.core.domain.entity.WxUserMember;
import com.flossom.common.core.domain.req.WxUserMemberVm;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@ -72,4 +73,6 @@ public interface WxUserMemberMapper {
WxUserMember selectWxUserMemberByOpenId(@Param("openid") String openid);
void upgradeMember(@Param("phoneNumber") String phoneNumber, @Param("id") Integer id);
List<WxUserMember> selectWxUserMemberListByVm(WxUserMemberVm wxUserMemberVm);
}

@ -39,6 +39,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
where id = #{id}
</select>
<select id="obtainUserIntegral" resultType="com.flossom.common.core.domain.entity.WxUserIntegralLog">
<include refid="selectWxUserIntegralLogVo"/>
WHERE
user_id = #{userId}
ORDER BY
create_time DESC
</select>
<insert id="insertWxUserIntegralLog" parameterType="WxUserIntegralLog" useGeneratedKeys="true" keyProperty="id">
insert into wx_user_integral_log
<trim prefix="(" suffix=")" suffixOverrides=",">

@ -15,8 +15,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="userType" column="user_type" />
<result property="level" column="level" />
<result property="mobile" column="mobile" />
<result property="password" column="password" />
<result property="userQr" column="user_qr" />
<result property="provinceId" column="province_id" />
<result property="cityId" column="city_id" />
<result property="areaId" column="area_id" />
@ -27,10 +25,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="clock" column="clock" />
<result property="activity" column="activity" />
<result property="wechat" column="wechat" />
<result property="code" column="code" />
<result property="isAbutment" column="is_abutment" />
<result property="collagenDay" column="collagen_day" />
<result property="collagenMount" column="collagen_mount" />
<result property="isCompleteInformation" column="is_complete_information" />
<result property="devicesNum" column="devices_num" />
<result property="loginTime" column="login_time" />
<result property="status" column="status" />
<result property="createBy" column="create_by" />
@ -41,7 +38,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</resultMap>
<sql id="selectWxUserMemberVo">
select id, nickname, headimg, username, credit, openid, unionid, user_type, level, mobile, password, user_qr, province_id, city_id, area_id, province, city, area, birthday, clock, activity, wechat, code, is_abutment, collagen_day, collagen_mount, login_time, status, create_by, create_time, update_by, update_time, remark from wx_user_member
select id, nickname, headimg, username, credit, openid, unionid, user_type, level, mobile, province_id, city_id, area_id, province, city, area, birthday, clock, activity, wechat, is_abutment, login_time, is_complete_information, devices_num, status, create_by, create_time, update_by, update_time, remark from wx_user_member
</sql>
<select id="selectWxUserMemberList" parameterType="WxUserMember" resultMap="WxUserMemberResult">
@ -56,8 +53,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="userType != null "> and user_type = #{userType}</if>
<if test="level != null "> and level = #{level}</if>
<if test="mobile != null and mobile != ''"> and mobile = #{mobile}</if>
<if test="password != null and password != ''"> and password = #{password}</if>
<if test="userQr != null and userQr != ''"> and user_qr = #{userQr}</if>
<if test="provinceId != null and provinceId != ''"> and province = #{provinceId}</if>
<if test="cityId != null and cityId != ''"> and city = #{cityId}</if>
<if test="areaId != null and areaId != ''"> and area = #{areaId}</if>
@ -68,11 +63,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="clock != null "> and clock = #{clock}</if>
<if test="activity != null "> and activity = #{activity}</if>
<if test="wechat != null and wechat != ''"> and wechat = #{wechat}</if>
<if test="code != null and code != ''"> and code = #{code}</if>
<if test="isAbutment != null "> and is_abutment = #{isAbutment}</if>
<if test="collagenDay != null "> and collagen_day = #{collagenDay}</if>
<if test="collagenMount != null "> and collagen_mount = #{collagenMount}</if>
<if test="loginTime != null "> and login_time = #{loginTime}</if>
<if test="isCompleteInformation != null "> and is_complete_information = #{isCompleteInformation}</if>
<if test="devicesNum != null "> and devices_num = #{devicesNum}</if>
<if test="status != null "> and status = #{status}</if>
</where>
</select>
@ -87,6 +81,22 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
WHERE openid = #{openid}
</select>
<select id="selectWxUserMemberListByVm" parameterType="WxUserMemberVm" resultMap="WxUserMemberResult">
<include refid="selectWxUserMemberVo"/>
<where>
<if test="id != null" >id = #{id}</if>
<if test="nickname != null and nickname != ''"> and nickname like concat('%', #{nickname}, '%')</if>
<if test="creditStart != null and creditEnd != null"> and credit &gt;= #{creditStart} and credit &lt;= #{creditEnd}</if>
<if test="userType != null "> and user_type = #{userType}</if>
<if test="mobile != null and mobile != ''"> and mobile = #{mobile}</if>
<if test="provinceId != null and provinceId != ''"> and province = #{provinceId}</if>
<if test="cityId != null and cityId != ''"> and city = #{cityId}</if>
<if test="areaId != null and areaId != ''"> and area = #{areaId}</if>
<if test="birthday != null "> and birthday = #{birthday}</if>
and status = 0
</where>
</select>
<insert id="insertWxUserMember" parameterType="WxUserMember" useGeneratedKeys="true" keyProperty="id">
insert into wx_user_member
<trim prefix="(" suffix=")" suffixOverrides=",">
@ -99,8 +109,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="userType != null">user_type,</if>
<if test="level != null">level,</if>
<if test="mobile != null">mobile,</if>
<if test="password != null">password,</if>
<if test="userQr != null">user_qr,</if>
<if test="provinceId != null">province_id,</if>
<if test="cityId != null">city_id,</if>
<if test="areaId != null">area_id,</if>
@ -111,10 +119,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="clock != null">clock,</if>
<if test="activity != null">activity,</if>
<if test="wechat != null">wechat,</if>
<if test="code != null">code,</if>
<if test="isAbutment != null">is_abutment,</if>
<if test="collagenDay != null">collagen_day,</if>
<if test="collagenMount != null">collagen_mount,</if>
<if test="isCompleteInformation != null">is_complete_information,</if>
<if test="devicesNum != null">devices_num,</if>
<if test="loginTime != null">login_time,</if>
<if test="status != null">status,</if>
<if test="createBy != null">create_by,</if>
@ -133,8 +140,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="userType != null">#{userType},</if>
<if test="level != null">#{level},</if>
<if test="mobile != null">#{mobile},</if>
<if test="password != null">#{password},</if>
<if test="userQr != null">#{userQr},</if>
<if test="provinceId != null">#{provinceId},</if>
<if test="cityId != null">#{cityId},</if>
<if test="areaId != null">#{areaId},</if>
@ -145,10 +150,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="clock != null">#{clock},</if>
<if test="activity != null">#{activity},</if>
<if test="wechat != null">#{wechat},</if>
<if test="code != null">#{code},</if>
<if test="isAbutment != null">#{isAbutment},</if>
<if test="collagenDay != null">#{collagenDay},</if>
<if test="collagenMount != null">#{collagenMount},</if>
<if test="isCompleteInformation != null">#{isCompleteInformation},</if>
<if test="devicesNum != null">#{devicesNum},</if>
<if test="loginTime != null">#{loginTime},</if>
<if test="status != null">#{status},</if>
<if test="createBy != null">#{createBy},</if>
@ -171,8 +175,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="userType != null">user_type = #{userType},</if>
<if test="level != null">level = #{level},</if>
<if test="mobile != null">mobile = #{mobile},</if>
<if test="password != null">password = #{password},</if>
<if test="userQr != null">user_qr = #{userQr},</if>
<if test="provinceId != null">province_id = #{provinceId},</if>
<if test="cityId != null">city_id = #{cityId},</if>
<if test="areaId != null">area_id = #{areaId},</if>
@ -183,11 +185,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="clock != null">clock = #{clock},</if>
<if test="activity != null">activity = #{activity},</if>
<if test="wechat != null">wechat = #{wechat},</if>
<if test="code != null">code = #{code},</if>
<if test="isAbutment != null">is_abutment = #{isAbutment},</if>
<if test="collagenDay != null">collagen_day = #{collagenDay},</if>
<if test="collagenMount != null">collagen_mount = #{collagenMount},</if>
<if test="loginTime != null">login_time = #{loginTime},</if>
<if test="isCompleteInformation != null">is_complete_information = #{isCompleteInformation},</if>
<if test="devicesNum != null">devices_num = #{devicesNum},</if>
<if test="status != null">status = #{status},</if>
<if test="createBy != null">create_by = #{createBy},</if>
<if test="createTime != null">create_time = #{createTime},</if>

@ -5,6 +5,7 @@ import java.util.Map;
import java.util.concurrent.TimeUnit;
import javax.servlet.http.HttpServletRequest;
import com.flossom.common.core.domain.entity.WxUserMember;
import com.flossom.common.security.utils.SecurityUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -151,6 +152,10 @@ public class TokenService
if (expireTime - currentTime <= MILLIS_MINUTE_TEN)
{
refreshToken(loginUser);
// 判断是否是微信用户
if(loginUser.getWxUserMember() != null) {
refreshSessionKey(loginUser);
}
}
}
@ -168,6 +173,21 @@ public class TokenService
redisService.setCacheObject(userKey, loginUser, expireTime, TimeUnit.MINUTES);
}
/**
* session_key
*
* @param loginUser
*/
public void refreshSessionKey(LoginUser loginUser)
{
WxUserMember wxUserMember = loginUser.getWxUserMember();
String sessionKey = redisService.getCacheObject(CacheConstants.WX_SESSION_KEY_CACHE + wxUserMember.getOpenid());
if(StringUtils.isNotBlank(sessionKey)) {
redisService.setCacheObject(CacheConstants.WX_SESSION_KEY_CACHE + wxUserMember.getOpenid(),
sessionKey, CacheConstants.EXPIRATION, TimeUnit.MINUTES);
}
}
private String getTokenKey(String token)
{
return ACCESS_TOKEN + token;

@ -91,6 +91,17 @@
<version>4.5.2</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>

@ -25,6 +25,9 @@ public class WxConfig {
*/
private String obtainPhoneUrl;
private String accessTokenUrl;
public String getLoginUrl() {
return loginUrl;
}
@ -40,4 +43,12 @@ public class WxConfig {
public void setObtainPhoneUrl(String obtainPhoneUrl) {
this.obtainPhoneUrl = obtainPhoneUrl;
}
public String getAccessTokenUrl() {
return accessTokenUrl;
}
public void setAccessTokenUrl(String accessTokenUrl) {
this.accessTokenUrl = accessTokenUrl;
}
}

@ -36,8 +36,7 @@ public class UserMemberController extends BaseController {
*/
@PostMapping("/upgradeMember")
public AjaxResult upgradeMember(@RequestParam(value = "code") String code) throws Exception {
wxUserMemberService.upgradeMember(code);
return AjaxResult.success();
return AjaxResult.success("获取成功", wxUserMemberService.upgradeMember(code));
}
/**

@ -0,0 +1,39 @@
package com.flossom.miniProgram.controller;
import com.flossom.common.core.domain.entity.WxUserIntegralLog;
import com.flossom.common.core.web.controller.BaseController;
import com.flossom.common.core.web.domain.AjaxResult;
import com.flossom.common.core.web.page.TableDataInfo;
import com.flossom.miniProgram.service.IWxUserIntegralService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* Controller
*
* @author flossom
* @date 2023-12-14
*/
@RestController
@RequestMapping("/integralLog")
public class WxUserIntegraController extends BaseController {
@Autowired
private IWxUserIntegralService wxUserIntegralLogService;
/**
*
*
* @return
*/
@GetMapping("/obtainUserIntegral")
public TableDataInfo obtainUserIntegral() {
startPage();
List<WxUserIntegralLog> list = wxUserIntegralLogService.obtainUserIntegral();
return getDataTable(list);
}
}

@ -0,0 +1,64 @@
package com.flossom.miniProgram.domain.vo;
/**
*
*/
public class WxAccessTokenRet {
private String access_token;
private String expires_in;
private Integer errcode;
private String errmsg;
public WxAccessTokenRet() {
}
public WxAccessTokenRet(String access_token, String expires_in, Integer errcode, String errmsg) {
this.access_token = access_token;
this.expires_in = expires_in;
this.errcode = errcode;
this.errmsg = errmsg;
}
public String getAccess_token() {
return access_token;
}
public void setAccess_token(String access_token) {
this.access_token = access_token;
}
public String getExpires_in() {
return expires_in;
}
public void setExpires_in(String expires_in) {
this.expires_in = expires_in;
}
public Integer getErrcode() {
return errcode;
}
public void setErrcode(Integer errcode) {
this.errcode = errcode;
}
public String getErrmsg() {
return errmsg;
}
public void setErrmsg(String errmsg) {
this.errmsg = errmsg;
}
@Override
public String toString() {
return "WxAccessTokenRet{" +
"access_token='" + access_token + '\'' +
", expires_in='" + expires_in + '\'' +
", errcode=" + errcode +
", errmsg='" + errmsg + '\'' +
'}';
}
}

@ -5,25 +5,25 @@ package com.flossom.miniProgram.domain.vo;
*/
public class WxCode2PhoneRet {
private PhoneInfo phoneInfo;
private PhoneInfo phone_info;
private Integer errcode;
private String errmsg;
public WxCode2PhoneRet() {
}
public WxCode2PhoneRet(PhoneInfo phoneInfo, Integer errcode, String errmsg) {
this.phoneInfo = phoneInfo;
public WxCode2PhoneRet(PhoneInfo phone_info, Integer errcode, String errmsg) {
this.phone_info = phone_info;
this.errcode = errcode;
this.errmsg = errmsg;
}
public PhoneInfo getPhoneInfo() {
return phoneInfo;
return phone_info;
}
public void setPhoneInfo(PhoneInfo phoneInfo) {
this.phoneInfo = phoneInfo;
this.phone_info = phoneInfo;
}
public Integer getErrcode() {
@ -41,4 +41,13 @@ public class WxCode2PhoneRet {
public void setErrmsg(String errmsg) {
this.errmsg = errmsg;
}
@Override
public String toString() {
return "WxCode2PhoneRet{" +
"phoneInfo=" + phone_info +
", errcode=" + errcode +
", errmsg='" + errmsg + '\'' +
'}';
}
}

@ -0,0 +1,11 @@
package com.flossom.miniProgram.service;
import com.flossom.common.core.domain.entity.WxUserIntegralLog;
import java.util.List;
public interface IWxUserIntegralService {
List<WxUserIntegralLog> obtainUserIntegral();
}

@ -8,7 +8,7 @@ public interface IWxUserMemberService {
LoginUserVo login(String code) throws Exception;
void upgradeMember(String code) throws Exception;
String upgradeMember(String code) throws Exception;
void updateUser(UserMemberUpdateVo userMemberUpdateVo);
}

@ -0,0 +1,25 @@
package com.flossom.miniProgram.service.impl;
import com.flossom.common.core.domain.entity.WxUserIntegralLog;
import com.flossom.common.core.domain.entity.WxUserMember;
import com.flossom.common.core.mapper.WxUserIntegralLogMapper;
import com.flossom.common.security.utils.SecurityUtils;
import com.flossom.miniProgram.service.IWxUserIntegralService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class WxUserIntegralServiceImpl implements IWxUserIntegralService {
@Autowired
private WxUserIntegralLogMapper wxUserIntegralLogMapper;
@Override
public List<WxUserIntegralLog> obtainUserIntegral() {
WxUserMember wxUserMember = SecurityUtils.getLoginUser().getWxUserMember();
return wxUserIntegralLogMapper.obtainUserIntegral(wxUserMember.getId());
}
}

@ -1,29 +1,21 @@
package com.flossom.miniProgram.service.impl;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.flossom.common.core.constant.CacheConstants;
import com.flossom.common.core.constant.UserConstants;
import com.flossom.common.core.domain.LoginBody;
import com.flossom.common.core.domain.R;
import com.flossom.common.core.domain.RegisterBody;
import com.flossom.common.core.domain.entity.WxUserMember;
import com.flossom.common.core.exception.ServiceException;
import com.flossom.common.core.mapper.WxUserMemberMapper;
import com.flossom.common.core.utils.DateUtils;
import com.flossom.common.core.web.domain.AjaxResult;
import com.flossom.common.core.utils.StringUtils;
import com.flossom.common.redis.service.RedisService;
import com.flossom.common.security.utils.SecurityUtils;
import com.flossom.miniProgram.domain.vo.LoginUserVo;
import com.flossom.miniProgram.domain.vo.UserMemberUpdateVo;
import com.flossom.miniProgram.domain.vo.WxCode2PhoneRet;
import com.flossom.miniProgram.domain.vo.WxCode2SessionRet;
import com.flossom.miniProgram.domain.vo.*;
import com.flossom.miniProgram.service.IWxUserMemberService;
import com.flossom.miniProgram.utils.MiniProgramUtils;
import com.flossom.system.api.RemoteAuthService;
import com.flossom.system.api.RemoteUserService;
import org.apache.commons.codec.digest.DigestUtils;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils;
@ -50,13 +42,15 @@ public class WxUserMemberServiceImpl implements IWxUserMemberService {
@Override
public LoginUserVo login(String code) throws Exception {
// 1、使用临时凭证 code 获取 appi + appsecret + unionid
WxCode2SessionRet wxCode2SessionRet = JSON.parseObject(MiniProgramUtils.getSessionKeyAndOpenId(code), WxCode2SessionRet.class);
String result = MiniProgramUtils.getSessionKeyAndOpenId(code);
logger.info("请求微信服务器获取openid和unionid返回结果{}", result);
WxCode2SessionRet wxCode2SessionRet = JSON.parseObject(result, WxCode2SessionRet.class);
if (wxCode2SessionRet.getErrcode() != null) {
logger.error(wxCode2SessionRet.getErrmsg());
throw new ServiceException("校验失败");
}
logger.info("openid", wxCode2SessionRet.getOpenid());
logger.info("unionid", wxCode2SessionRet.getUnionid());
logger.info("openid = {}", wxCode2SessionRet.getOpenid());
logger.info("unionid = {}", wxCode2SessionRet.getUnionid());
// 2、根据 openid 查询用户信息
WxUserMember wxUserMember = wxUserMemberMapper.selectWxUserMemberByOpenId(wxCode2SessionRet.getOpenid());
@ -68,9 +62,9 @@ public class WxUserMemberServiceImpl implements IWxUserMemberService {
wxUserMember.setUnionid(wxCode2SessionRet.getUnionid());
wxUserMember.setLoginTime(DateUtils.getNowDate());
wxUserMember.setCreateTime(DateUtils.getNowDate());
// 3.2、微信用户表注册
// 2.2、微信用户表注册
wxUserMemberMapper.insertWxUserMember(wxUserMember);
// 3.3、系统表注册
// 2.3、系统表注册
RegisterBody registerBody = new RegisterBody();
registerBody.setUsername(wxUserMember.getOpenid());
registerBody.setPassword(UserConstants.WX_SYSTEM_USER_PASSWORD);
@ -87,29 +81,40 @@ public class WxUserMemberServiceImpl implements IWxUserMemberService {
logger.error("获取token失败{}", loginResult.getMsg());
throw new ServiceException(loginResult.getMsg());
}
/**
* TODO: session_keyredis
* TODO: session_key redis session_key 使
* 使wx.checkSession()
* 1 session_key
* 2security120session_key{@link com.flossom.common.security.service.TokenService#refreshSessionKey}
*/
redisService.setCacheObject(CacheConstants.wx_session_key_cache + wxUserMember.getOpenid(),
redisService.setCacheObject(CacheConstants.WX_SESSION_KEY_CACHE + wxUserMember.getOpenid(),
wxCode2SessionRet.getSession_key(), CacheConstants.EXPIRATION, TimeUnit.MINUTES);
// 4、返回登录信息
LoginUserVo loginUserVo = new LoginUserVo();
BeanUtils.copyProperties(wxUserMember, loginUserVo);
loginUserVo.setToken(loginResult.getData().get("access_token"));
logger.info("登录用户信息id = {}, username = {}", loginUserVo.getId(), loginUserVo.getUsername());
logger.info("登录用户信息id = {}, username = {}, token={}", loginUserVo.getId(), loginUserVo.getUsername(), loginUserVo.getToken());
return loginUserVo;
}
@Override
public void upgradeMember(String code) throws Exception {
WxCode2PhoneRet wxCode2PhoneRet = JSON.parseObject(MiniProgramUtils.getPhone(code), WxCode2PhoneRet.class);
if (wxCode2PhoneRet.getErrcode() != 200) {
logger.error("获取用户手机号码失败: ", wxCode2PhoneRet.getErrmsg());
public String upgradeMember(String code) throws Exception {
String accessToken = MiniProgramUtils.getAccessToken(SecurityUtils.getLoginUser().getWxUserMember().getOpenid());
if (StringUtils.isBlank(accessToken)) {
throw new ServiceException("获取用户手机号码失败");
}
// 获取手机号
String result = MiniProgramUtils.getPhone(code, accessToken);
logger.info("请求微信服务器获取手机号码返回结果:{}", result);
WxCode2PhoneRet wxCode2PhoneRet = JSON.parseObject(result, WxCode2PhoneRet.class);
if (wxCode2PhoneRet.getErrcode() != 0) {
logger.error("获取用户手机号码失败: {}", wxCode2PhoneRet.getErrmsg());
throw new ServiceException("获取用户手机号码失败");
}
wxUserMemberMapper.upgradeMember(wxCode2PhoneRet.getPhoneInfo().getPhoneNumber(), SecurityUtils.getWxUserId().intValue());
return wxCode2PhoneRet.getPhoneInfo().getPhoneNumber();
}
@Override

@ -1,13 +1,21 @@
package com.flossom.miniProgram.utils;
import com.alibaba.fastjson.JSON;
import com.flossom.common.core.constant.CacheConstants;
import com.flossom.common.core.domain.entity.WxParameterSetting;
import com.flossom.common.core.mapper.WxParameterSettingMapper;
import com.flossom.common.core.utils.StringUtils;
import com.flossom.common.redis.service.RedisService;
import com.flossom.miniProgram.config.properties.WxConfig;
import com.flossom.miniProgram.domain.vo.WxAccessTokenRet;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;
/**
*
@ -15,12 +23,17 @@ import java.util.Map;
@Component
public class MiniProgramUtils {
protected final static Logger logger = LoggerFactory.getLogger(MiniProgramUtils.class);
private static WxConfig wxConfig;
private static WxParameterSettingMapper wxParameterSettingMapper;
private static RedisService redisService;
/**
* mapper appIdappKey
*
* @param wxParameterSettingMapper
*/
@Autowired
@ -28,8 +41,14 @@ public class MiniProgramUtils {
MiniProgramUtils.wxParameterSettingMapper = wxParameterSettingMapper;
}
@Autowired
public void setRedisService(RedisService redisService) {
MiniProgramUtils.redisService = redisService;
}
/**
* nacos
*
* @param wxConfig
*/
@Autowired
@ -85,11 +104,38 @@ public class MiniProgramUtils {
* purePhoneNumber string
* countryCode string
*/
public static String getPhone(String code) throws Exception {
public static String getPhone(String code, String accessToken) throws Exception {
Map<String, String> params = new HashMap();
params.put("code", code);
return HttpClientUtils.postParameters(wxConfig.getObtainPhoneUrl(), params);
return HttpClientUtils.postParameters(wxConfig.getObtainPhoneUrl() + "?access_token=" + accessToken, JSON.toJSONString(params));
}
public static String getAccessToken(String openid) throws Exception {
/**
* TODO: access_token redis access_token 2使
* 1 redis access_token access_token
*/
String accessToken = redisService.getCacheObject(CacheConstants.WX_ACCESS_TOKEN_CACHE + openid);
if (StringUtils.isBlank(accessToken)) {
// 获取 access_token
Map<String, String> params = new HashMap();
WxParameterSetting wxParameterSetting = wxParameterSettingMapper.selectWxParameterSettingById(1L);
params.put("appid", wxParameterSetting.getAppid());
params.put("secret", wxParameterSetting.getAppkey());
params.put("grant_type", "client_credential");
String result = HttpClientUtils.getParameters(wxConfig.getAccessTokenUrl(), params);
logger.info("请求微信服务器获取access_token返回结果{}", result);
WxAccessTokenRet wxAccessTokenRet = JSON.parseObject(result, WxAccessTokenRet.class);
if (wxAccessTokenRet.getErrcode() != null) {
logger.error("获取 access_token 失败: {}", wxAccessTokenRet.getErrmsg());
return null;
}
// 保存缓存
redisService.setCacheObject(CacheConstants.WX_ACCESS_TOKEN_CACHE + openid,
wxAccessTokenRet.getAccess_token(), CacheConstants.WX_ACCESS_TOKEN_EXPIRATION, TimeUnit.MINUTES);
return wxAccessTokenRet.getAccess_token();
}
return accessToken;
}
}

@ -3,6 +3,7 @@ package com.flossom.system.controller;
import javax.servlet.http.HttpServletResponse;
import com.flossom.common.core.domain.entity.WxUserMember;
import com.flossom.common.core.domain.req.WxUserMemberVm;
import com.flossom.common.core.utils.poi.ExcelUtil;
import com.flossom.common.core.web.controller.BaseController;
import com.flossom.common.core.web.domain.AjaxResult;
@ -31,8 +32,7 @@ import java.util.List;
*/
@RestController
@RequestMapping("/member")
public class WxUserMemberController extends BaseController
{
public class WxUserMemberController extends BaseController {
@Autowired
private IWxUserMemberService wxUserMemberService;
@ -41,10 +41,9 @@ public class WxUserMemberController extends BaseController
*/
@RequiresPermissions("system:member:list")
@GetMapping("/list")
public TableDataInfo list(WxUserMember wxUserMember)
{
public TableDataInfo list(WxUserMemberVm wxUserMemberVm) {
startPage();
List<WxUserMember> list = wxUserMemberService.selectWxUserMemberList(wxUserMember);
List<WxUserMember> list = wxUserMemberService.selectWxUserMemberList(wxUserMemberVm);
return getDataTable(list);
}
@ -54,8 +53,7 @@ public class WxUserMemberController extends BaseController
@RequiresPermissions("system:member:export")
@Log(title = "用户", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(HttpServletResponse response, WxUserMember wxUserMember)
{
public void export(HttpServletResponse response, WxUserMember wxUserMember) {
List<WxUserMember> list = wxUserMemberService.selectWxUserMemberList(wxUserMember);
ExcelUtil<WxUserMember> util = new ExcelUtil<WxUserMember>(WxUserMember.class);
util.exportExcel(response, list, "用户数据");
@ -66,8 +64,7 @@ public class WxUserMemberController extends BaseController
*/
@RequiresPermissions("system:member:query")
@GetMapping(value = "/{id}")
public AjaxResult getInfo(@PathVariable("id") Long id)
{
public AjaxResult getInfo(@PathVariable("id") Long id) {
return success(wxUserMemberService.selectWxUserMemberById(id));
}
@ -77,8 +74,7 @@ public class WxUserMemberController extends BaseController
@RequiresPermissions("system:member:add")
@Log(title = "用户", businessType = BusinessType.INSERT)
@PostMapping
public AjaxResult add(@RequestBody WxUserMember wxUserMember)
{
public AjaxResult add(@RequestBody WxUserMember wxUserMember) {
return toAjax(wxUserMemberService.insertWxUserMember(wxUserMember));
}
@ -88,8 +84,7 @@ public class WxUserMemberController extends BaseController
@RequiresPermissions("system:member:edit")
@Log(title = "用户", businessType = BusinessType.UPDATE)
@PutMapping
public AjaxResult edit(@RequestBody WxUserMember wxUserMember)
{
public AjaxResult edit(@RequestBody WxUserMember wxUserMember) {
return toAjax(wxUserMemberService.updateWxUserMember(wxUserMember));
}
@ -98,9 +93,8 @@ public class WxUserMemberController extends BaseController
*/
@RequiresPermissions("system:member:remove")
@Log(title = "用户", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public AjaxResult remove(@PathVariable Long[] ids)
{
@DeleteMapping("/{ids}")
public AjaxResult remove(@PathVariable Long[] ids) {
return toAjax(wxUserMemberService.deleteWxUserMemberByIds(ids));
}
}

@ -2,6 +2,7 @@ package com.flossom.system.service;
import com.flossom.common.core.domain.entity.WxUserMember;
import com.flossom.common.core.domain.req.WxUserMemberVm;
import java.util.List;
@ -29,6 +30,14 @@ public interface IWxUserMemberService
*/
public List<WxUserMember> selectWxUserMemberList(WxUserMember wxUserMember);
/**
*
*
* @param wxUserMemberVm
* @return
*/
public List<WxUserMember> selectWxUserMemberList(WxUserMemberVm wxUserMemberVm);
/**
*
*

@ -3,6 +3,7 @@ package com.flossom.system.service.impl;
import java.util.List;
import com.flossom.common.core.domain.entity.WxUserMember;
import com.flossom.common.core.domain.req.WxUserMemberVm;
import com.flossom.common.core.mapper.WxUserMemberMapper;
import com.flossom.common.core.utils.DateUtils;
import org.springframework.beans.factory.annotation.Autowired;
@ -45,6 +46,18 @@ public class WxUserMemberServiceImpl implements IWxUserMemberService
return wxUserMemberMapper.selectWxUserMemberList(wxUserMember);
}
/**
*
*
* @param wxUserMemberVm
* @return
*/
@Override
public List<WxUserMember> selectWxUserMemberList(WxUserMemberVm wxUserMemberVm)
{
return wxUserMemberMapper.selectWxUserMemberListByVm(wxUserMemberVm);
}
/**
*
*

@ -5,7 +5,7 @@
"author": "花至",
"license": "MIT",
"scripts": {
"dev": "vue-cli-service serve",
"dev": "set NODE_OPTIONS=--openssl-legacy-provider & vue-cli-service serve",
"build:prod": "vue-cli-service build",
"build:stage": "vue-cli-service build --mode staging",
"preview": "node build/index.js --preview",

@ -1,182 +1,82 @@
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="昵称" prop="nickname">
<el-input
v-model="queryParams.nickname"
placeholder="请输入昵称"
clearable
@keyup.enter.native="handleQuery"
/>
<el-form-item label="用户类型" prop="userType">
<el-select v-model="queryParams.userType" @keyup.enter.native="handleQuery">
<el-option label="全部" value=""></el-option>
<el-option label="会员" value="0"></el-option>
<el-option label="游客" value="1"></el-option>
</el-select>
</el-form-item>
<el-form-item label="头像" prop="headimg">
<el-form-item label="会员昵称" prop="nickname">
<el-input
v-model="queryParams.headimg"
placeholder="请输入头像"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="姓名" prop="username">
<el-input
v-model="queryParams.username"
placeholder="请输入姓名"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="积分" prop="credit">
<el-input
v-model="queryParams.credit"
placeholder="请输入积分"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="openid" prop="openid">
<el-input
v-model="queryParams.openid"
placeholder="请输入openid"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="unionid" prop="unionid">
<el-input
v-model="queryParams.unionid"
placeholder="请输入unionid"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="会员等级0 不是会员1以上为会员" prop="level">
<el-input
v-model="queryParams.level"
placeholder="请输入会员等级0 不是会员1以上为会员"
v-model="queryParams.nickname"
placeholder="请输入单个会员昵称进行搜索"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="手机" prop="mobile">
<el-form-item label="手机号码" prop="mobile">
<el-input
v-model="queryParams.mobile"
placeholder="请输入手机"
placeholder="搜索多个请用英文逗号隔开"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="密码" prop="password">
<el-form-item label="用户编号" prop="id">
<el-input
v-model="queryParams.password"
placeholder="请输入密码"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="个人二维码" prop="userQr">
<el-input
v-model="queryParams.userQr"
placeholder="请输入个人二维码"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="省" prop="province">
<el-input
v-model="queryParams.province"
placeholder="请输入省"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="市" prop="city">
<el-input
v-model="queryParams.city"
placeholder="请输入市"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="区" prop="area">
<el-input
v-model="queryParams.area"
placeholder="请输入区"
v-model="queryParams.id"
placeholder="搜索多个请用英文逗号隔开"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="生日" prop="birthday">
<el-date-picker clearable
v-model="queryParams.birthday"
type="date"
value-format="yyyy-MM-dd"
placeholder="请选择生日">
<el-date-picker
clearable
v-model="queryParams.birthday"
type="date"
value-format="yyyy-MM-dd"
placeholder="请选择生日">
</el-date-picker>
</el-form-item>
<el-form-item label="1可以2不可以" prop="clock">
<el-input
v-model="queryParams.clock"
placeholder="请输入1可以2不可以"
clearable
@keyup.enter.native="handleQuery"
/>
<el-form-item label="省" prop="provinceId">
<el-select v-model="queryParams.provinceId" @keyup.enter.native="handleQuery">
<el-option label="广东省" value="19"></el-option>
<el-option label="湖南省" value="18"></el-option>
</el-select>
</el-form-item>
<el-form-item label="1可以2不可以" prop="activity">
<el-input
v-model="queryParams.activity"
placeholder="请输入1可以2不可以"
clearable
@keyup.enter.native="handleQuery"
/>
<el-form-item label="市" prop="cityId">
<el-select v-model="queryParams.cityId" @keyup.enter.native="handleQuery">
<el-option label="广州市" value="234"></el-option>
<el-option label="珠海市" value="237"></el-option>
</el-select>
</el-form-item>
<el-form-item label="微信号" prop="wechat">
<el-input
v-model="queryParams.wechat"
placeholder="请输入微信号"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="应该是邀请码来的" prop="code">
<el-input
v-model="queryParams.code"
placeholder="请输入应该是邀请码来的"
clearable
@keyup.enter.native="handleQuery"
/>
<el-form-item label="区" prop="areaId">
<el-select v-model="queryParams.areaId" @keyup.enter.native="handleQuery">
<el-option label="天河区" value="2314"></el-option>
<el-option label="黄埔区" value="2317"></el-option>
</el-select>
</el-form-item>
<el-form-item label="1 未对接到中控 2已经对接 3对接失败" prop="isAbutment">
<el-input
v-model="queryParams.isAbutment"
placeholder="请输入1 未对接到中控 2已经对接 3对接失败"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="${comment}" prop="collagenDay">
<el-input
v-model="queryParams.collagenDay"
placeholder="请输入${comment}"
clearable
@keyup.enter.native="handleQuery"
/>
<el-form-item label="用户注册时间" prop="createTime">
<el-date-picker
v-model="queryParams.createTime"
type="datetimerange"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
align="right">
</el-date-picker>
</el-form-item>
<el-form-item label="${comment}" prop="collagenMount">
<el-form-item label="积分范围" prop="credit">
<el-input
v-model="queryParams.collagenMount"
placeholder="请输入${comment}"
v-model="queryParams.credit"
placeholder="请输入积分"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="登陆时间" prop="loginTime">
<el-date-picker clearable
v-model="queryParams.loginTime"
type="date"
value-format="yyyy-MM-dd"
placeholder="请选择登陆时间">
</el-date-picker>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery"></el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery"></el-button>
@ -231,40 +131,26 @@
<el-table v-loading="loading" :data="memberList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="${comment}" align="center" prop="id" />
<el-table-column label="昵称" align="center" prop="nickname" />
<el-table-column label="头像" align="center" prop="headimg" />
<el-table-column label="姓名" align="center" prop="username" />
<el-table-column label="积分" align="center" prop="credit" />
<el-table-column label="openid" align="center" prop="openid" />
<el-table-column label="${comment}" align="center" prop="unionid" />
<el-table-column label="用户类型1游客 2会员" align="center" prop="userType" />
<el-table-column label="会员等级0 不是会员1以上为会员" align="center" prop="level" />
<el-table-column label="手机" align="center" prop="mobile" />
<el-table-column label="密码" align="center" prop="password" />
<el-table-column label="个人二维码" align="center" prop="userQr" />
<el-table-column label="会员昵称" align="center" prop="nickname" />
<el-table-column label="用户编号" align="center" prop="id" />
<el-table-column label="手机号码" align="center" prop="mobile" />
<el-table-column label="生日" align="center" prop="birthday" />
<el-table-column label="省" align="center" prop="province" />
<el-table-column label="市" align="center" prop="city" />
<el-table-column label="区" align="center" prop="area" />
<el-table-column label="生日" align="center" prop="birthday" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.birthday, '{y}-{m}-{d}') }}</span>
</template>
</el-table-column>
<el-table-column label="1可以2不可以" align="center" prop="clock" />
<el-table-column label="1可以2不可以" align="center" prop="activity" />
<el-table-column label="微信号" align="center" prop="wechat" />
<el-table-column label="应该是邀请码来的" align="center" prop="code" />
<el-table-column label="1 未对接到中控 2已经对接 3对接失败" align="center" prop="isAbutment" />
<el-table-column label="${comment}" align="center" prop="collagenDay" />
<el-table-column label="${comment}" align="center" prop="collagenMount" />
<el-table-column label="登陆时间" align="center" prop="loginTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.loginTime, '{y}-{m}-{d}') }}</span>
</template>
</el-table-column>
<el-table-column label="状态" align="center" prop="status" />
<el-table-column label="${comment}" align="center" prop="remark" />
<el-table-column label="信息完善" align="center" prop="isCompleteInformation" />
<el-table-column label="用户注册时间" align="center" prop="createTime" />
<el-table-column label="仪器数量" align="center" prop="devicesNum" />
<el-table-column label="小程序标签" align="center" prop="" />
<el-table-column label="企微标签" align="center" prop="" />
<el-table-column label="是否对接" align="center" prop="is_abutment" />
<el-table-column label="积分" align="center" prop="credit" />
<el-table-column label="即将过期积分" align="center" prop="" />
<el-table-column label="用户类型" align="center" prop="userType" />
<el-table-column label="unionid" align="center" prop="unionid" />
<el-table-column label="用户权限" align="center" prop="" />
<el-table-column label="消息列表" align="center" prop="" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button
@ -281,6 +167,33 @@
@click="handleDelete(scope.row)"
v-hasPermi="['system:member:remove']"
>删除</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
v-hasPermi="['system:member:edit']"
>查看</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-edit"
>开启打卡</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-edit"
>开启活动</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-edit"
>个人信息同步</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-edit"
>积分同步</el-button>
</template>
</el-table-column>
</el-table>
@ -311,21 +224,25 @@
<el-form-item label="openid" prop="openid">
<el-input v-model="form.openid" placeholder="请输入openid" />
</el-form-item>
<el-form-item label="${comment}" prop="unionid">
<el-input v-model="form.unionid" placeholder="请输入${comment}" />
<el-form-item label="unionid" prop="unionid">
<el-input v-model="form.unionid" placeholder="请输入unionid" />
</el-form-item>
<el-form-item label="会员等级0 不是会员1以上为会员" prop="level">
<el-input v-model="form.level" placeholder="请输入会员等级0 不是会员1以上为会员" />
<el-form-item label="用户类型" prop="userType">
<el-radio v-model="form.userType" label="0"></el-radio>
<el-radio v-model="form.userType" label="1"></el-radio>
</el-form-item>
<el-form-item label="会员等级" prop="level">
<el-input-number v-model="form.level" :min="1" :max="100" label="会员等级"></el-input-number>
</el-form-item>
<el-form-item label="手机" prop="mobile">
<el-input v-model="form.mobile" placeholder="请输入手机" />
</el-form-item>
<el-form-item label="密码" prop="password">
<el-input v-model="form.password" placeholder="请输入密码" />
</el-form-item>
<el-form-item label="个人二维码" prop="userQr">
<el-input v-model="form.userQr" placeholder="请输入个人二维码" />
</el-form-item>
<!-- <el-form-item label="密码" prop="password">-->
<!-- <el-input v-model="form.password" placeholder="请输入密码" />-->
<!-- </el-form-item>-->
<!-- <el-form-item label="个人二维码" prop="userQr">-->
<!-- <el-input v-model="form.userQr" placeholder="请输入个人二维码" />-->
<!-- </el-form-item>-->
<el-form-item label="省" prop="province">
<el-input v-model="form.province" placeholder="请输入省" />
</el-form-item>
@ -343,37 +260,20 @@
placeholder="请选择生日">
</el-date-picker>
</el-form-item>
<el-form-item label="1可以2不可以" prop="clock">
<el-form-item label="参与打卡" prop="clock">
<el-input v-model="form.clock" placeholder="请输入1可以2不可以" />
</el-form-item>
<el-form-item label="1可以2不可以" prop="activity">
<el-form-item label="参与活动" prop="activity">
<el-input v-model="form.activity" placeholder="请输入1可以2不可以" />
</el-form-item>
<el-form-item label="微信号" prop="wechat">
<el-input v-model="form.wechat" placeholder="请输入微信号" />
</el-form-item>
<el-form-item label="应该是邀请码来的" prop="code">
<el-input v-model="form.code" placeholder="请输入应该是邀请码来的" />
</el-form-item>
<el-form-item label="1 未对接到中控 2已经对接 3对接失败" prop="isAbutment">
<el-input v-model="form.isAbutment" placeholder="请输入1 未对接到中控 2已经对接 3对接失败" />
</el-form-item>
<el-form-item label="${comment}" prop="collagenDay">
<el-input v-model="form.collagenDay" placeholder="请输入${comment}" />
</el-form-item>
<el-form-item label="${comment}" prop="collagenMount">
<el-input v-model="form.collagenMount" placeholder="请输入${comment}" />
</el-form-item>
<el-form-item label="登陆时间" prop="loginTime">
<el-date-picker clearable
v-model="form.loginTime"
type="date"
value-format="yyyy-MM-dd"
placeholder="请选择登陆时间">
</el-date-picker>
</el-form-item>
<el-form-item label="${comment}" prop="remark">
<el-input v-model="form.remark" placeholder="请输入${comment}" />
<el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" placeholder="请输入备注" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
@ -424,8 +324,11 @@ export default {
mobile: null,
password: null,
userQr: null,
provinceId: null,
province: null,
cityId: null,
city: null,
areaId: null,
area: null,
birthday: null,
clock: null,
@ -437,6 +340,7 @@ export default {
collagenMount: null,
loginTime: null,
status: null,
createTime: null,
},
//
form: {},

Loading…
Cancel
Save