Просмотр исходного кода

登录相关,修改个人信息相关

lijj 2 лет назад
Родитель
Сommit
705a1481e6
22 измененных файлов с 267 добавлено и 328 удалено
  1. 0 19
      admin/src/main/java/org/springblade/modules/member/controller/pc/MemberInfoController.java
  2. 1 1
      admin/src/main/java/org/springblade/modules/member/controller/wx/WXMemberInfoController.java
  3. 0 10
      admin/src/main/java/org/springblade/modules/member/entity/MemberAccountEntity.java
  4. 4 92
      admin/src/main/java/org/springblade/modules/member/entity/MemberEntity.java
  5. 0 7
      admin/src/main/java/org/springblade/modules/member/mapper/MemberAccountMapper.xml
  6. 0 18
      admin/src/main/java/org/springblade/modules/member/mapper/MemberMapper.xml
  7. 0 8
      admin/src/main/java/org/springblade/modules/member/service/IMemberInfoService.java
  8. 1 1
      admin/src/main/java/org/springblade/modules/member/service/impl/MemberAccountServiceImpl.java
  9. 1 22
      admin/src/main/java/org/springblade/modules/member/service/impl/MemberInfoServiceImpl.java
  10. 24 31
      admin/src/main/java/org/springblade/modules/member/wx/config/WxMaConfiguration.java
  11. 24 29
      admin/src/main/java/org/springblade/modules/member/wx/config/WxMaProperties.java
  12. 5 6
      admin/src/main/resources/application-dev.yml
  13. 2 6
      miniapp/App.vue
  14. 57 37
      miniapp/api/member.js
  15. 17 0
      miniapp/api/oss.js
  16. 3 3
      miniapp/common/setting.js
  17. 1 1
      miniapp/manifest.json
  18. 13 8
      miniapp/pages.json
  19. 0 2
      miniapp/pages/index.vue
  20. 4 4
      miniapp/pages/yuecai/usercenter/index.vue
  21. 107 0
      miniapp/pages/yuecai/usercenter/profile/index.vue
  22. 3 23
      miniapp/utils/func.js

+ 0 - 19
admin/src/main/java/org/springblade/modules/member/controller/pc/MemberInfoController.java

@@ -104,9 +104,6 @@ public class MemberInfoController extends BladeController {
 		if (Func.isEmpty(member_info.getPhone())) {
 			return R.fail("联系方式不能为空!");
 		}
-		if (Func.isEmpty(member_info.getMemberCode())) {
-			return R.fail("会员卡号不能为空!");
-		}
 
 		return R.status(memberInfoService.updateById(member_info));
 	}
@@ -124,9 +121,6 @@ public class MemberInfoController extends BladeController {
 		if (Func.isEmpty(memberInfoDTO.getPhone())) {
 			return R.fail("联系方式不能为空!");
 		}
-		if (Func.isEmpty(memberInfoDTO.getMemberCode())) {
-			return R.fail("会员卡号不能为空!");
-		}
 
 		//新增的时候判断,电话是否已存在
 		if (Func.isEmpty(memberInfoDTO.getId())) {//id为空则为新增
@@ -152,19 +146,6 @@ public class MemberInfoController extends BladeController {
 		return R.status(memberInfoService.deleteLogic(Func.toLongList(ids)));
 	}
 
-	/**
-	 * 根据会员卡号获取会员信息
-	 *
-	 * @param memberCode
-	 * @return
-	 */
-	@GetMapping("/get_mem_info_by_code")
-	@ApiOperationSupport(order = 8)
-	@ApiOperation(value = "根据会员卡号获取会员信息", notes = "")
-	public R getMemberInfo(@ApiParam(value = "会员卡号", required = true) @RequestParam String memberCode) {
-		return R.data(MemberInfoWrapper.build().entityVO(memberInfoService.getOneByMemberCode(memberCode)));
-	}
-
 	/**
 	 * 统计会员信息
 	 *

+ 1 - 1
admin/src/main/java/org/springblade/modules/member/controller/wx/WXMemberInfoController.java

@@ -49,7 +49,7 @@ public class WXMemberInfoController extends BladeController {
 	/**
 	 * 详情
 	 */
-	@PostMapping("/random/save")
+	@PostMapping("/update")
 	@ApiOperationSupport(order = 1)
 	@ApiOperation(value = "详情", notes = "")
 	public R<Boolean> saveNicknameAndAvatar(@RequestParam String name, @RequestParam String avatar) {

+ 0 - 10
admin/src/main/java/org/springblade/modules/member/entity/MemberAccountEntity.java

@@ -36,16 +36,6 @@ public class MemberAccountEntity extends TenantEntity {
 	 */
 	@ApiModelProperty(value = "账户类型(账号、手机、QQ、微信等)")
 	private String accountType;
-	/**
-	 * 登录密码
-	 */
-	@ApiModelProperty(value = "登录密码")
-	private String password;
-	/**
-	 * 密码盐
-	 */
-	@ApiModelProperty(value = "密码盐")
-	private String salt;
 	/**
 	 * 启用状态
 	 */

+ 4 - 92
admin/src/main/java/org/springblade/modules/member/entity/MemberEntity.java

@@ -24,27 +24,6 @@ public class MemberEntity extends TenantEntity {
 
 	private static final long serialVersionUID = 1L;
 
-	/**
-	 * 建档门店id
-	 */
-	@ApiModelProperty(value = "来源产品编号")
-	private String fromProductCode;
-
-	/**
-	 * 账号名称
-	 */
-//	@ApiModelProperty(value = "账号名称")
-//	private String name;
-	/**
-	 * 密码
-	 */
-//	@ApiModelProperty(value = "密码")
-//	private String password;
-	/**
-	 * 支付密码
-	 */
-	@ApiModelProperty(value = "支付密码")
-	private String payPassword;
 	/**
 	 * 注册IP
 	 */
@@ -85,11 +64,7 @@ public class MemberEntity extends TenantEntity {
 	 */
 	@ApiModelProperty(value = "固定电话")
 	private String tel;
-	/**
-	 * 会员级别ID
-	 */
-	@ApiModelProperty(value = "会员级别ID")
-	private Long levelId;
+
 	/**
 	 * 性别
 	 */
@@ -115,36 +90,14 @@ public class MemberEntity extends TenantEntity {
 	 */
 	@ApiModelProperty(value = "真实姓名")
 	private String realName;
-	/**
-	 * 会员卡号
-	 */
-	@ApiModelProperty(value = "会员卡号")
-	private String memberCode;
-	/**
-	 * 喜好的语言
-	 */
-	@ApiModelProperty(value = "喜好的语言")
-	private String favLang;
-	/**
-	 * 喜好的货币
-	 */
-	@ApiModelProperty(value = "喜好的货币")
-	private String favCurrency;
+
+
 	/**
 	 * 登录次数
 	 */
 	@ApiModelProperty(value = "登录次数")
 	private Integer loginCount;
-	/**
-	 * 消费次数
-	 */
-	@ApiModelProperty(value = "消费次数")
-	private Integer consumeCount;
-	/**
-	 * 商城下单次数
-	 */
-	@ApiModelProperty(value = "商城下单次数")
-	private Integer orderCount;
+
 	/**
 	 * 头像
 	 */
@@ -155,50 +108,9 @@ public class MemberEntity extends TenantEntity {
 	 */
 	@ApiModelProperty(value = "二维码")
 	private String qrcode;
-	/**
-	 * 积分
-	 */
-	@ApiModelProperty(value = "积分")
-	private Integer point;
-	/**
-	 * 预存款
-	 */
-	@ApiModelProperty(value = "预存款")
-	private BigDecimal deposit;
-	/**
-	 * 账户余额
-	 */
-	@ApiModelProperty(value = "账户余额")
-	private BigDecimal advances;
-	/**
-	 * 推荐码
-	 */
-	@ApiModelProperty(value = "推荐码")
-	private String referralCode;
-
-	/**
-	 * 距离下一级积分
-	 */
-	@ApiModelProperty(value = "距离下一级积分")
-	private Integer needPoint;
 	/**
 	 * 顺序
 	 */
 	@ApiModelProperty(value = "顺序")
 	private Integer sort;
-	/**
-	 * 有效期
-	 */
-	@ApiModelProperty(value = "有效期")
-	private Date termValidity;
-	/**
-	 * 是否永久有效
-	 */
-	@ApiModelProperty(value = "是否永久有效")
-	private Boolean isForever;
-	/**
-	 * 是否设置密码
-	 */
-	@ApiModelProperty(value = "是否设置密码")
-	private Boolean isSetPasswd;
 }

+ 0 - 7
admin/src/main/java/org/springblade/modules/member/mapper/MemberAccountMapper.xml

@@ -8,16 +8,9 @@
         <result column="account" property="account"/>
         <result column="append_account" property="appendAccount"/>
         <result column="account_type" property="accountType"/>
-        <result column="password" property="password"/>
-        <result column="salt" property="salt"/>
         <result column="is_enabled" property="isEnabled"/>
         <result column="member_id" property="memberId"/>
-        <result column="tenant_id" property="tenantId"/>
         <result column="sort" property="sort"/>
-        <result column="create_time" property="createTime"/>
-        <result column="update_time" property="updateTime"/>
-        <result column="status" property="status"/>
-        <result column="is_deleted" property="isDeleted"/>
     </resultMap>
 
 </mapper>

+ 0 - 18
admin/src/main/java/org/springblade/modules/member/mapper/MemberMapper.xml

@@ -5,10 +5,6 @@
     <!-- 通用查询映射结果 -->
     <resultMap id="member_infoResultMap" type="org.springblade.modules.member.entity.MemberEntity">
         <result column="id" property="id"/>
-        <result column="from_product_code" property="fromProductCode"/>
-<!--        <result column="account" property="account"/>-->
-<!--        <result column="password" property="password"/>-->
-        <result column="pay_password" property="payPassword"/>
         <result column="reg_ip" property="regIp"/>
         <result column="register_time" property="registerTime"/>
         <result column="audit_status" property="auditStatus"/>
@@ -17,26 +13,15 @@
         <result column="household_address" property="householdAddress"/>
         <result column="phone" property="phone"/>
         <result column="tel" property="tel"/>
-        <result column="level_id" property="levelId"/>
         <result column="sex" property="sex"/>
         <result column="birthday" property="birthday"/>
         <result column="email" property="email"/>
         <result column="nick_name" property="nickName"/>
         <result column="real_name" property="realName"/>
-        <result column="member_code" property="memberCode"/>
-        <result column="fav_lang" property="favLang"/>
-        <result column="fav_currency" property="favCurrency"/>
         <result column="login_count" property="loginCount"/>
-        <result column="consume_count" property="consumeCount"/>
-        <result column="order_count" property="orderCount"/>
         <result column="avator" property="avator"/>
         <result column="qrcode" property="qrcode"/>
         <result column="tenant_id" property="tenantId"/>
-        <result column="point" property="point"/>
-        <result column="deposit" property="deposit"/>
-        <result column="advances" property="advances"/>
-        <result column="referral_code" property="referralCode"/>
-        <result column="need_point" property="needPoint"/>
         <result column="sort" property="sort"/>
         <result column="create_user" property="createUser"/>
         <result column="create_dept" property="createDept"/>
@@ -45,9 +30,6 @@
         <result column="update_time" property="updateTime"/>
         <result column="status" property="status"/>
         <result column="is_deleted" property="isDeleted"/>
-        <result column="term_validity" property="termValidity"/>
-        <result column="is_forever" property="isForever"/>
-        <result column="is_set_passwd" property="isSetPasswd"/>
     </resultMap>
 
     <select id="getBirMemByDate" resultMap="member_infoResultMap">

+ 0 - 8
admin/src/main/java/org/springblade/modules/member/service/IMemberInfoService.java

@@ -47,14 +47,6 @@ public interface IMemberInfoService extends BaseService<MemberEntity> {
 	 */
 	List<MemberEntity> getBirMemByDate(String dateType);
 
-	/**
-	 * 根据会员编号获取会员信息
-	 *
-	 * @param memberCode
-	 * @return
-	 */
-	MemberEntity getOneByMemberCode(String memberCode);
-
 	/**
 	 * 根据手机号码获取会员信息
 	 *

+ 1 - 1
admin/src/main/java/org/springblade/modules/member/service/impl/MemberAccountServiceImpl.java

@@ -124,7 +124,7 @@ public class MemberAccountServiceImpl extends BaseServiceImpl<MemberAccountMappe
 			if(Func.isEmpty(clientDetail)) {
 				throw new ServiceException("应用id不存在");
 			}
-			final WxMaService wxService = WxMaConfiguration.getMaService(clientDetail.getClientId());
+			final WxMaService wxService = WxMaConfiguration.getMaService();
 			return wxService.getUserService().getSessionInfo(code);
 		} catch (WxErrorException e) {
 			throw new ServiceException("微信登录失败" + e.getMessage());

+ 1 - 22
admin/src/main/java/org/springblade/modules/member/service/impl/MemberInfoServiceImpl.java

@@ -51,7 +51,6 @@ public class MemberInfoServiceImpl extends BaseServiceImpl<MemberMapper, MemberE
 	@Override
 	public MemberEntity addMember(String fromProductCode, String tenantId) {
 		MemberEntity memberEntity = new MemberEntity();
-		memberEntity.setFromProductCode(fromProductCode);
 		memberEntity.setNickName(this.getRandomName());
 		memberEntity.setAvator(this.getRandomAvatar());
 		memberEntity.setRegIp(INetUtil.getHostIp());
@@ -104,18 +103,6 @@ public class MemberInfoServiceImpl extends BaseServiceImpl<MemberMapper, MemberE
 	@Override
 	public MemberEntity setMemberInfoEntity(MemberDTO memberInfoDTO) {
 		MemberEntity memberInfoEntity = BeanUtil.copy(memberInfoDTO, MemberEntity.class);
-		//密码
-		if (Func.isNotEmpty(memberInfoDTO.getPayPassword())) {
-			memberInfoEntity.setPayPassword(DigestUtil.hex(memberInfoDTO.getPayPassword()));//加密
-		} else {//密码为空的时候不改变原来的值
-			QueryWrapper<MemberEntity> wrapper = new QueryWrapper<>();
-			wrapper.eq("id", memberInfoEntity.getId());
-			MemberEntity entity = this.getOne(wrapper);
-			if (Func.isNotEmpty(entity)) {
-				memberInfoEntity.setPayPassword(entity.getPayPassword());
-			}
-		}
-
 		return memberInfoEntity;
 	}
 
@@ -148,15 +135,6 @@ public class MemberInfoServiceImpl extends BaseServiceImpl<MemberMapper, MemberE
 		return ceil;
 	}
 
-	@Override
-	public MemberEntity getOneByMemberCode(String memberCode) {
-		MemberEntity entity = new MemberEntity();
-		entity.setMemberCode(memberCode);
-		QueryWrapper<MemberEntity> wrapper = new QueryWrapper<>(entity);
-		wrapper.last("limit 1");
-		return this.getOne(wrapper);
-	}
-
 	@Override
 	public MemberEntity getMemberInfoByPhone(String phone) {
 		if (Func.isEmpty(phone)) {
@@ -168,6 +146,7 @@ public class MemberInfoServiceImpl extends BaseServiceImpl<MemberMapper, MemberE
 		wrapper.last("limit 1");
 		return this.getOne(wrapper);
 	}
+
 	@Override
 	public BigDecimal averageDailyIncrease(Boolean includeDel) {
 		QueryWrapper<MemberEntity> wrapper = new QueryWrapper<>();

+ 24 - 31
admin/src/main/java/org/springblade/modules/member/wx/config/WxMaConfiguration.java

@@ -28,50 +28,43 @@ import java.util.stream.Collectors;
 @Configuration
 @EnableConfigurationProperties(WxMaProperties.class)
 public class WxMaConfiguration {
-	private WxMaProperties properties;
+	private static WxMaProperties properties;
 
-	private static Map<String, WxMaMessageRouter> routers = Maps.newHashMap();
-	private static Map<String, WxMaService> maServices = Maps.newHashMap();
+	private static WxMaMessageRouter router;
+	private static WxMaService maService;
 
 	@Autowired
 	public WxMaConfiguration(WxMaProperties properties) {
 		this.properties = properties;
 	}
 
-	public static WxMaService getMaService(String appid) {
-		WxMaService wxService = maServices.get(appid);
-		if (wxService == null) {
-			throw new IllegalArgumentException(String.format("未找到对应appid=[%s]的配置,请核实!", appid));
+	@PostConstruct
+	public void init() {
+		if (properties == null) {
+			throw new RuntimeException("看下nacos是否有相关配置,注意别配错了!");
 		}
-
-		return wxService;
+		WxMaDefaultConfigImpl config = new WxMaDefaultConfigImpl();
+		config.setAppid(properties.getAppid());
+		config.setSecret(properties.getSecret());
+		config.setToken(properties.getToken());
+		config.setAesKey(properties.getAesKey());
+		config.setMsgDataFormat(properties.getMsgDataFormat());
+		maService = new WxMaServiceImpl();
+		maService.setWxMaConfig(config);
+		router = newRouter(maService);
 	}
 
-	public static WxMaMessageRouter getRouter(String appid) {
-		return routers.get(appid);
-	}
+	public static WxMaService getMaService() {
 
-	@PostConstruct
-	public void init() {
-		List<WxMaProperties.Config> configs = this.properties.getConfigs();
-		if (configs == null) {
-			throw new RuntimeException("看下nacos是否有相关配置,注意别配错了!");
+		if (maService == null) {
+			throw new IllegalArgumentException(String.format("未找到对应appid=[%s]的配置,请核实!", properties.getAppid()));
 		}
 
-		maServices = configs.stream()
-			.map(a -> {
-				WxMaDefaultConfigImpl config = new WxMaDefaultConfigImpl();
-				config.setAppid(a.getAppid());
-				config.setSecret(a.getSecret());
-				config.setToken(a.getToken());
-				config.setAesKey(a.getAesKey());
-				config.setMsgDataFormat(a.getMsgDataFormat());
-
-				WxMaService service = new WxMaServiceImpl();
-				service.setWxMaConfig(config);
-				routers.put(a.getAppid(), this.newRouter(service));
-				return service;
-			}).collect(Collectors.toMap(s -> s.getWxMaConfig().getAppid(), a -> a));
+		return maService;
+	}
+
+	public static WxMaMessageRouter getRouter(String appid) {
+		return router;
 	}
 
 	private WxMaMessageRouter newRouter(WxMaService service) {

+ 24 - 29
admin/src/main/java/org/springblade/modules/member/wx/config/WxMaProperties.java

@@ -12,34 +12,29 @@ import java.util.List;
 @ConfigurationProperties(prefix = "wx.miniapp")
 public class WxMaProperties {
 
-    private List<Config> configs;
-
-    @Data
-    public static class Config {
-        /**
-         * 设置微信小程序的appid
-         */
-        private String appid;
-
-        /**
-         * 设置微信小程序的Secret
-         */
-        private String secret;
-
-        /**
-         * 设置微信小程序消息服务器配置的token
-         */
-        private String token;
-
-        /**
-         * 设置微信小程序消息服务器配置的EncodingAESKey
-         */
-        private String aesKey;
-
-        /**
-         * 消息格式,XML或者JSON
-         */
-        private String msgDataFormat;
-    }
+	/**
+	 * 设置微信小程序的appid
+	 */
+	private String appid;
+
+	/**
+	 * 设置微信小程序的Secret
+	 */
+	private String secret;
+
+	/**
+	 * 设置微信小程序消息服务器配置的token
+	 */
+	private String token;
+
+	/**
+	 * 设置微信小程序消息服务器配置的EncodingAESKey
+	 */
+	private String aesKey;
+
+	/**
+	 * 消息格式,XML或者JSON
+	 */
+	private String msgDataFormat;
 
 }

+ 5 - 6
admin/src/main/resources/application-dev.yml

@@ -59,9 +59,8 @@ blade:
 # 小程序相关配置
 wx:
   miniapp:
-    configs:
-      - appid: wx4517e7bae4f224e5
-        secret: 3148c59a4dd9aba983cf3242684c37a1
-        token: #微信小程序消息服务器配置的token
-        aesKey: #微信小程序消息服务器配置的EncodingAESKey
-        msgDataFormat: JSON
+    appid: wx4517e7bae4f224e5
+    secret: 3148c59a4dd9aba983cf3242684c37a1
+    token: #微信小程序消息服务器配置的token
+    aesKey: #微信小程序消息服务器配置的EncodingAESKey
+    msgDataFormat: JSON

+ 2 - 6
miniapp/App.vue

@@ -139,12 +139,8 @@
 		onShow: function() {
 			// uni.hideTabBar()//需要手动隐藏原生的tabbar
 			console.log('App Show')
-			if (this.$u.func.checkLogin()) { //已登录
-				//原来是会员,但是现在过期了
-				if (this.userInfo.isVIP && !this.$u.func.checkVIP(this.userInfo.equityEffective)) {
-					console.log('会员过期,强制登出并且跳转到登录页')
-					this.$u.func.logout() //强制登出并且跳转到登录页
-				}
+			if (this.$u.func.checkLogin()) { 
+        //已登录
 			}
 		},
 		onThemeChange: function() {

+ 57 - 37
miniapp/api/member.js

@@ -1,55 +1,75 @@
 import http from '@/http/api.js'
-import {bizConst} from './biz/biz.js'
-import {clientId,tenantId} from '@/common/setting'
+import {
+  bizConst
+} from './biz/biz.js'
+import {
+  clientId,
+  tenantId
+} from '@/common/setting'
 
 // 获取token
 const wxUserLogin = (code) => {
-	let tenantId = '000000'
-	return http.request({
-		url: bizConst.memberPrefix + '/login/miniapp',//?clientCode=' + clientId + '&code=' + code,
-		method: 'POST',
-		header: {
-			'Tenant-Id': tenantId
-		},
-		params: {
-			clientCode: clientId,
-			code,
-		},
-	})
+  let tenantId = '000000'
+  return http.request({
+    url: bizConst.memberPrefix + '/login/miniapp', //?clientCode=' + clientId + '&code=' + code,
+    method: 'POST',
+    header: {
+      'Tenant-Id': tenantId
+    },
+    params: {
+      clientCode: clientId,
+      code,
+    },
+  })
 }
 
 //刷新token
 const refreshToken = (refreshToken) => {
+  return http.request({
+    url: bizConst.memberPrefix + '/login/refresh',
+    method: 'POST',
+    params: {
+      refreshToken,
+    },
+  })
+}
+
+//保存昵称和头像
+const saveNicknameAndAvatar = (name, avatar) => {
 	return http.request({
-		url: bizConst.memberPrefix + '/login/refresh',
+		url: bizConst.memberPrefix + '/update',
 		method: 'POST',
 		params: {
-			refreshToken,
+			name,
+			avatar,
 		},
 	})
 }
 
 const getUserInfo = () => {
-	return http.request({
-		url: bizConst.memberPrefix + '/info',
-		method: 'GET',
-		header: {
-			'Tenant-Id': tenantId
-		},
-		params: {},
-	})
-} 
+  return http.request({
+    url: bizConst.memberPrefix + '/info',
+    method: 'GET',
+    header: {
+      'Tenant-Id': tenantId
+    },
+    params: {},
+  })
+}
 const updateUserInfo = () => {
-	return http.request({
-		url: bizConst.memberPrefix + '/update',
-		method: 'GET',
-		header: {
-			'Tenant-Id': tenantId
-		},
-		params: {},
-	})
-} 
-export default {
-	getUserInfo,
-  updateUserInfo
+  return http.request({
+    url: bizConst.memberPrefix + '/update',
+    method: 'GET',
+    header: {
+      'Tenant-Id': tenantId
+    },
+    params: {},
+  })
 }
+export default {
+  wxUserLogin,
+  refreshToken,
+  getUserInfo,
+  updateUserInfo,
+  saveNicknameAndAvatar
+}

+ 17 - 0
miniapp/api/oss.js

@@ -0,0 +1,17 @@
+import http from '@/http/api.js'
+import {bizConst} from './biz/biz.js'
+
+// 上传文件
+const putFile = (filePath) => {
+	// console.log("putt", data)
+	//console.log("http api", http)
+	return http.upload(bizConst.resourcePrefix + '/oss/endpoint/put-file', {
+		name: 'file',
+		filePath: filePath,
+	})
+}
+
+//上传文件
+export default {
+	putFile
+}

+ 3 - 3
miniapp/common/setting.js

@@ -21,11 +21,11 @@ module.exports = {
 	// 登录失效code
 	invalidCode: 401,
 	// 客户端ID
-	clientId: 'yuecai',
+	clientId: 'yuecai_mini',
 	// 客户端密钥
-	clientSecret: 'yuecai_secret',
+	clientSecret: 'yuecai_mini_secret',
 	// 是否mock数据
 	isMockData: false,
 	// 租户ID
-	tenantId: '940067',
+	tenantId: '000000',
 }

+ 1 - 1
miniapp/manifest.json

@@ -76,7 +76,7 @@
     "quickapp" : {},
     /* 小程序特有相关 */
     "mp-weixin" : {
-        "appid" : "wxcffc5049c0ccb9ef",
+        "appid" : "wx4517e7bae4f224e5",
         "setting" : {
             "urlCheck" : false,
             "postcss" : false,

+ 13 - 8
miniapp/pages.json

@@ -6,6 +6,12 @@
   // "requiredBackgroundModes": ["audio", "location"],
   "pages": [ //pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages
     {
+      "path": "pages/index",
+      "style": {
+        "navigationBarTitleText": "粤菜文化",
+        "enablePullDownRefresh": false
+      }
+    },{
       "path": "pages/yuecai/professional_style/index",
       "style": {
         "navigationBarTitleText": "专业风采",
@@ -59,19 +65,18 @@
         "navigationBarTitleText": "我的",
         "enablePullDownRefresh": false
       }
-    }, {
+    },  {
+			"path": "pages/yuecai/usercenter/profile/index",
+			"style": {
+				"navigationBarTitleText": "个人信息",
+				"enablePullDownRefresh": false
+			}
+		},{
       "path": "pages/yuecai/information/detail/index",
       "style": {
         "navigationBarTitleText": "资讯",
         "enablePullDownRefresh": false
       }
-    },
-    {
-      "path": "pages/index",
-      "style": {
-        "navigationBarTitleText": "粤菜文化",
-        "enablePullDownRefresh": false
-      }
     }
   ],
   "globalStyle": {

+ 0 - 2
miniapp/pages/index.vue

@@ -83,8 +83,6 @@
       this.isForcelogin = options.f == 1
       console.log("index onload")
       uni.$u.sleep(500).then(() => {
-        wx.hideLoading();
-        this.$u.func.toHome()
         if (this.$u.func.checkLogin()) {
           this.$u.func.toHome()
         } else {

+ 4 - 4
miniapp/pages/yuecai/usercenter/index.vue

@@ -13,13 +13,13 @@
 				<view v-for="(item,i) in allCells" :key="i" class="m-t-20">
 					<bt-cell :cells="item" />
 				</view>
-				<view class="flex-dir-row flex-x-between m-t-20 f-28">
+				<!-- <view class="flex-dir-row flex-x-between m-t-20 f-28">
 					<view class="flex-dir-row flex-x-center flex-y-center p-b-t-20 border-round-10 c-g-white width-100"
 						@click="toLogout">
 						<u--image src="/static/images/logout.png" width="20px" height="20px" />
 						<view class="m-l-10 col-info">退出登录</view>
 					</view>
-				</view>
+				</view> -->
 				<view class="f-24 col-info-m t-c width-100 m-t-40" @click.stop="clickVersion">当前版本:{{version}}</view>
 			</view>
 		</template>
@@ -79,7 +79,7 @@
 		methods: {
 			toProfile() { //个人信息
 				uni.navigateTo({
-					url: './profile',
+					url: './profile/index',
 				})
 			},
 			toQuestion() {
@@ -109,7 +109,7 @@
 				this.nickName = nickName
 			},
 		},
-		onLoad() {
+		onShow() {
 			this.face = this.userInfo.avatar || '/static/images/face.png'
 			this.nickName = this.userInfo.nick_name || '小机灵鬼'
 		},

+ 107 - 0
miniapp/pages/yuecai/usercenter/profile/index.vue

@@ -0,0 +1,107 @@
+<template>
+<view class="p-t-30">
+	<u-cell-group :customStyle="{backgroundColor:'white'}">
+		<u-cell title="头像">
+			<button slot="value" open-type="chooseAvatar" @chooseavatar="chooseAvatar">
+				<view class="flex-dir-row flex-y-center">
+					<u-avatar :src="face" size="60"/>
+					<view class="m-l-10">
+						<u-icon name="arrow-right" color="#c8c9cc"/>
+					</view>
+				</view>
+			</button>
+		</u-cell>
+		<u-cell title="昵称">
+			<view slot="value">
+				<u--input v-model="nickName" type="nickname" color="#c8c9cc" inputAlign="right" border="none"/>
+			</view>
+		</u-cell>
+		<!-- <u-cell>
+			<view slot="title">
+				<u-icon name="reload" :color="$u.color['primary']"
+					label="随机头像" :labelColor="$u.color['primary']" @click="randomFace"/>
+			</view>
+			<view slot="value">
+				<u-icon name="reload" :color="$u.color['primary']"
+					label="随机昵称" :labelColor="$u.color['primary']" @click="randomName"/>
+			</view>
+		</u-cell> -->
+	</u-cell-group>
+	<view class="width-100 k-btn">
+		<view class="p-30">
+			<u-button text="保存" :color="edited?'black':'#c8c9cc'" :disabled="!edited" shape="circle" @click="save"/>
+		</view>
+	</view>
+	<bt-timer ref="timer"/><!-- 一定要加ref=timer,mixins里会用到 -->
+</view>
+</template>
+
+<script>
+
+export default {
+	mixins: [],
+	data() {
+		return {
+			face: '',
+			nickName: '',
+			edited: false, //是否更改
+		}
+	},
+	watch: {//监听头像或昵称任何一个发生变动
+		face(newValue, oldValue) {
+			if (oldValue && newValue != oldValue) {
+				this.edited = true
+			}
+		},
+		nickName(newValue, oldValue) {
+			if (oldValue && newValue != oldValue) {
+				this.edited = true
+			}
+		},
+	},
+	methods: {
+		chooseAvatar(e) {
+			this.$u.api.putFile(e.detail.avatarUrl).then(res => {
+				this.face = res.data.link
+			})
+		},
+		randomName() {
+			this.$u.api.getRandomName().then(res => {
+				this.nickName = res.data
+			})
+		},
+		randomFace() {
+			this.$u.api.getRandomAvatar().then(res => {
+				this.face = res.data
+			})
+		}, 
+		save() {
+			if (!this.edited) {
+				return
+			}
+			this.$u.api.saveNicknameAndAvatar(this.nickName, this.face).then(res => {
+				this.$u.vuex('userInfo.avatar', this.face) //写入缓存
+				this.$u.vuex('userInfo.nick_name', this.nickName) //写入缓存
+				uni.$u.toast('保存成功')
+				this.edited = false
+				uni.$emit('refreshUser', this.face, this.nickName)//要特别调用父页面的方法,不然父页面不同步
+			})
+		},
+	},
+	onLoad() {
+		this.face = this.userInfo.avatar || '/static/images/face.png'
+		this.nickName = this.userInfo.nick_name || ''
+	},
+}
+</script>
+
+<style>
+.k-btn {
+	position: absolute;
+	bottom: 30%;
+}
+button[open-type=chooseAvatar] {
+	background-color: white;
+	padding: 0;
+}
+</style>

+ 3 - 23
miniapp/utils/func.js

@@ -135,7 +135,6 @@ const install = (Vue, vm) => {
 					//app.$uStore({ wxcode: wxCode})
 					that.$u.api.wxUserLogin(wxCode).then(res => {
 						let userInfo = res.data
-            debugger
 						if (userInfo.error_code == invalidCode) {//登录请求返回200,但是还是登录失败就走这里
 							uni.$u.toast(userInfo.error_description)
 							setTimeout(() => {
@@ -145,40 +144,22 @@ const install = (Vue, vm) => {
 							}, 800)
 							return
 						}
-						//使用fake openid 调试支付
-						//userInfo.account = "o5SDY5YblXOjWoUjsYKG2ZVjL-cU"
 						if (userInfo.hasOwnProperty('access_token')) {
 							userInfo['accessToken'] = userInfo.access_token
 							userInfo['isLogin'] = true
 						}
-						userInfo.isVIP = checkVIP(userInfo.equityEffective)
-
 						that.$u.vuex('userInfo', userInfo)
 						that.$u.vuex('accessToken', userInfo.access_token)
 						that.$u.vuex('isLogin', userInfo.isLogin)
 						that.$u.vuex('tokenExpire', new Date().getTime() + userInfo.expires_in * 1000)
-						
-						//业务逻辑
-						that.$u.api.initJiuhubData().then(res2 => {//不管是否第一次,都要调这个,返回分类和标签
-							res2.data.timer = {}
-							that.$u.vuex('jiuhub', res2.data)
-							that.$u.func.toHome()//要等到初始化之后才能跳页面,不然页面取不到标签等数据会报错
-						})
+            // 登录结束跳转首页
+            vm.$u.func.toHome()
 					})
 				}
 			}
 		})
 	}
 	
-	const checkVIP = (equityEffective) => {//根据过期时间检测是否会员
-		if (equityEffective) {//存在过期时间
-			//和当前日期判断,只精确到日期,不精确到时间
-			return nowDate() <= equityEffective.substr(0, 10)
-		} else {//为Null或空字符串
-			return false //不是会员
-		}
-	}
-
 	//同步调用版本的微信小程序登录 外部调用时候使用 await wxLoginSync()
 	const wxLoginSync = () => {
 		return new Promise((resolve, reject) => {
@@ -293,8 +274,7 @@ const install = (Vue, vm) => {
 		wxLoginSync,
 		biz: {
 			deepworkMode,
-		},
-		checkVIP,
+		}
 	}
 }
 export default {