Merge remote-tracking branch 'origin/master'
| | |
| | | public static final String SHARES_FILE = "SHARES_FILE"; |
| | | public static final String NEWS_FILE = "NEWS_FILE"; |
| | | public static final String USER_LABEL = "USER_LABEL"; |
| | | public static final String USERS_MANAGE_CODE = "USERS_MANAGE_CODE"; |
| | | //发送会议开始 定时提前多少分钟发送 |
| | | |
| | | public static final String SYSTEM ="SYSTEM"; |
| | |
| | | } |
| | | |
| | | public static String desensitizationPhone(String phone) { |
| | | return phone.replaceAll("(d{3})d{4}(d{4})", "$1****$2"); |
| | | if (phone == null || phone.length() != 11) { |
| | | return phone; |
| | | } |
| | | return phone.substring(0, 3) + "****" + phone.substring(7); |
| | | } |
| | | |
| | | |
| | |
| | | @ApiModelProperty(value = "门店城市") |
| | | @TableField(exist = false) |
| | | private String shopCity; |
| | | @ApiModelProperty(value = "是否可管理门店") |
| | | @TableField(exist = false) |
| | | private Boolean manageShop; |
| | | |
| | | @ApiModelProperty(value = "C端用户手机号",notes = "用于查询用户绑定的导购",hidden = true) |
| | | @TableField(exist = false) |
| | |
| | | */ |
| | | AccountResponse wxLogin(String code,String iamId); |
| | | |
| | | AccountResponse testLogin(String openid); |
| | | |
| | | /** |
| | | * 获取手机号 |
| | | * @param wxPhoneRequest |
| | |
| | | model.setZtStatus(Constants.ONE); |
| | | model.setZtInfo("crm同步"); |
| | | model.setIamUserId(data.getUserId()); |
| | | model.setMemberId(member==null?null:member.getId()); |
| | | model.setUserId(user== null?null:user.getId()); |
| | | model.setCreationDate(data.getCreationDate()); |
| | | addList.add(model); |
| | |
| | | throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"获取openid失败!请联系管理员"); |
| | | } |
| | | // String openId = code; |
| | | Member member = memberMapper.selectOne(new QueryWrapper<Member>().eq("OPENID", openId).isNotNull("phone")); |
| | | Users users = new Users(); |
| | | Member member = memberMapper.selectOne(new QueryWrapper<Member>().eq("OPENID", openId).last(" limit 1 ")); |
| | | Users users = null; |
| | | if(StringUtils.isNotBlank(userId)){ |
| | | users = usersMapper.selectById(userId); |
| | | } |
| | |
| | | e.printStackTrace(); |
| | | } |
| | | throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"微信登录异常!请联系管理员"); |
| | | } |
| | | |
| | | |
| | | @Override |
| | | public AccountResponse testLogin(String openid){ |
| | | String openId = openid; |
| | | Member member = memberMapper.selectOne(new QueryWrapper<Member>().eq("OPENID", openId).isNotNull("phone")); |
| | | |
| | | if (member == null) { |
| | | member = new Member(); |
| | | member.setNickname("微信用户"+ CodeVerifyUtils.createVerificationCode(4)); |
| | | member.setCreateDate(new Date()); |
| | | member.setIsdeleted(Constants.ZERO); |
| | | member.setOpenid(openId); |
| | | member.setType(Constants.ZERO); |
| | | //如果绑定了导购 则直接使用已绑定导购信息 跳过手机号绑定的状态 |
| | | member.setAuthStatus(Constants.ZERO); |
| | | ZTUserGetTokenResponse ztUserGetTokenResponse = this.syncZhongTaiUser(member); |
| | | if(!Objects.isNull(ztUserGetTokenResponse)){ |
| | | member.setToken(ztUserGetTokenResponse.getToken()); |
| | | } |
| | | memberMapper.insert(member); |
| | | }else{ |
| | | ZTUserGetTokenResponse ztUserGetTokenResponse = this.syncZhongTaiUser(member); |
| | | if(!Objects.isNull(ztUserGetTokenResponse)){ |
| | | member.setToken(ztUserGetTokenResponse.getToken()); |
| | | memberMapper.updateById(member); |
| | | } |
| | | member = this.getMemberInfo(member.getId()); |
| | | } |
| | | String token = JwtTokenUtil.generateTokenForZb(member.getId(),ZTConstants.CUSTOMER, JSONObject.toJSON(member).toString(),redisTemplate); |
| | | AccountResponse accountResponse = new AccountResponse(); |
| | | accountResponse.setToken(token); |
| | | accountResponse.setMember(member); |
| | | return accountResponse; |
| | | } |
| | | |
| | | public static void saveCustomerUser(ZbomZhongTaiService zbomZhongTaiService,CustomerUserMapper customerUserMapper,Users users,Long memberId,String openId){ |
| | |
| | | Member memberDto = new Member(); |
| | | BeanUtils.copyProperties(editMemberRequest,memberDto); |
| | | memberDto.setOpenid(member.getOpenid()); |
| | | // ZTUserGetTokenResponse ztUserGetTokenResponse = this.syncZhongTaiUser(memberDto); |
| | | // if(Objects.isNull(ztUserGetTokenResponse)){ |
| | | // throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"中台服务调起失败!"); |
| | | // }else{ |
| | | // member.setToken(ztUserGetTokenResponse.getToken()); |
| | | // } |
| | | memberMapper.updateById(memberDto); |
| | | return this.getMemberInfo(member.getId()); |
| | | } |
| | |
| | | String prefix = systemDictDataBiz.queryByCode(Constants.OBJCET_STORAGE, Constants.RESOURCE_PATH).getCode() + |
| | | systemDictDataBiz.queryByCode(Constants.OBJCET_STORAGE, Constants.MEMBER).getCode(); |
| | | member.setPrefix(prefix); |
| | | if( customerUserMapper.selectCount(new QueryWrapper<CustomerUser>().lambda().eq(CustomerUser::getIsdeleted,Constants.ZERO).eq(CustomerUser::getMemberId,member.getId()))>0){ |
| | | if( customerUserMapper.selectCount(new QueryWrapper<CustomerUser>() |
| | | .lambda().eq(CustomerUser::getIsdeleted,Constants.ZERO).eq(CustomerUser::getMemberId,member.getId()))>0){ |
| | | member.setAuthStatus(Constants.TWO); |
| | | }else{ |
| | | if(StringUtils.isBlank(member.getPhone())){ |
| | |
| | | .eq(News::getType,Constants.ZERO) |
| | | .eq(News::getStatus,Constants.ZERO) |
| | | .eq(News::getFileType,Constants.ZERO) |
| | | .apply(" now() >= t.PUBLISH_DATE ") |
| | | .apply(" now() >= PUBLISH_DATE ") |
| | | .last( "limit 3" ) |
| | | .orderByDesc(News::getCreateDate) |
| | | ); |
| | |
| | | } |
| | | IPage<Shop> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity()); |
| | | MPJLambdaWrapper<Shop> queryWrapper = new MPJLambdaWrapper<>(); |
| | | queryWrapper.select("ID,NAME,ADDRESS,PROVINCE_NAME,CITY_NAME,AREA_NAME,TOWN,AREA_NAME,LEGAL_PHONE " + |
| | | queryWrapper.select("ID,NAME,LINK_PHONE,ADDRESS,PROVINCE_NAME,CITY_NAME,AREA_NAME,TOWN,AREA_NAME,LEGAL_PHONE " + |
| | | " , (6371 * ACOS(COS(RADIANS("+pageWrap.getModel().getLatitude()+")) * COS(RADIANS(latitude)) * COS(RADIANS(longitude) - RADIANS("+pageWrap.getModel().getLongitude()+")) + SIN(RADIANS("+pageWrap.getModel().getLatitude()+")) * SIN(RADIANS(latitude)) ) ) as distance " ) |
| | | .eq("isdeleted",Constants.ZERO) |
| | | .isNotNull("LATITUDE") |
| | |
| | | if(distanceM.compareTo(new BigDecimal(100))<0){ |
| | | shop.setDistanceStr("<100米"); |
| | | }else{ |
| | | shop.setDistanceStr(distanceM.divide(BigDecimal.valueOf(1)).setScale(2,BigDecimal.ROUND_HALF_UP) + "m"); |
| | | shop.setDistanceStr(distanceM.divide(BigDecimal.valueOf(1)).setScale(0,BigDecimal.ROUND_HALF_UP) + "m"); |
| | | } |
| | | }else{ |
| | | shop.setDistanceStr(shop.getDistance().divide(BigDecimal.valueOf(1)).setScale(2,BigDecimal.ROUND_HALF_UP) + "km"); |
| | |
| | | if(Objects.isNull(userShop)){ |
| | | return new ArrayList<>(); |
| | | } |
| | | Boolean manageShop = true; |
| | | if(users.getRoleCodes().indexOf(StringUtils.trimToNull(systemDictDataBiz.queryByCode(Constants.ZBOM_CUSTOMIZED,Constants.USERS_MANAGE_CODE).getCode()))>=0){ |
| | | users.setManageShop(false); |
| | | } |
| | | List<Shop> shopList = shopMapper.selectList(new QueryWrapper<Shop>() |
| | | .lambda() |
| | | .eq(Shop::getScode,userShop.getScode()) |
| | | .eq(Shop::getType,Constants.TWO) |
| | | .eq(Shop::getSecondType,Constants.THREE) |
| | | .apply(manageShop,"1=2") |
| | | ); |
| | | //查询经营范围信息 |
| | | List<CategorySeg> categorySegAllList = categorySegMapper.selectList(new QueryWrapper<CategorySeg>().lambda() |
| | |
| | | if(StringUtils.isBlank(users.getSlogans())){ |
| | | users.setSlogans(StringUtils.trimToNull(systemDictDataBiz.queryByCode(Constants.ZBOM_CUSTOMIZED,Constants.USER_LABEL).getCode())); |
| | | } |
| | | users.setManageShop(false); |
| | | if(StringUtils.isNotBlank(users.getRoleCodes())){ |
| | | if(users.getRoleCodes().indexOf(StringUtils.trimToNull(systemDictDataBiz.queryByCode(Constants.ZBOM_CUSTOMIZED,Constants.USERS_MANAGE_CODE).getCode()))>=0){ |
| | | users.setManageShop(true); |
| | | } |
| | | } |
| | | if(Objects.nonNull(users.getDepartmentId())){ |
| | | Shop shop = shopMapper.selectById(users.getDepartmentId()); |
| | | if(Objects.nonNull(shop)){ |
| | |
| | | return ApiResponse.success(memberService.wxLogin(code,iamId)); |
| | | } |
| | | |
| | | @ApiOperation(value = "test客户端小程序登陆", notes = "客户端小程序") |
| | | @GetMapping("/testWxLoginCustomer") |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(paramType = "query", dataType = "String", name = "openid", value = "微信code", required = true), |
| | | }) |
| | | public ApiResponse<AccountResponse> testWxLoginCustomer(@RequestParam String openid) { |
| | | return ApiResponse.success(memberService.testLogin(openid)); |
| | | } |
| | | |
| | | |
| | | @LoginRequired |
| | | @ApiOperation(value = "获取手机号", notes = "客户端小程序") |
| | |
| | | @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "用户token值", required = true), |
| | | }) |
| | | public ApiResponse<PageData<Shop>> shopPage (@RequestBody PageWrap<Shop> pageWrap) { |
| | | return ApiResponse.success(shopService.queryShopByLL(pageWrap)); |
| | | PageData<Shop> pageData = shopService.queryShopByLL(pageWrap); |
| | | if(Objects.nonNull(pageWrap.getModel().getLatitude())&&Objects.nonNull(pageWrap.getModel().getLongitude())){ |
| | | //更新人员经纬度信息 |
| | | EditMemberRequest editMemberRequest = new EditMemberRequest(); |
| | | editMemberRequest.setId(getMemberId()); |
| | | editMemberRequest.setLatitude(pageWrap.getModel().getLatitude()); |
| | | editMemberRequest.setLongitude(pageWrap.getModel().getLongitude()); |
| | | memberService.updMemberDetail(editMemberRequest); |
| | | } |
| | | return ApiResponse.success(pageData); |
| | | } |
| | | |
| | | |
| | |
| | | "permission": { |
| | | "scope.userLocation": { |
| | | "desc": "你的位置信息将用于小程序位置接口的效果展示" |
| | | }, |
| | | "scope.userInfo": { |
| | | "desc": "你的微信呢称将用于小程序呢称的效果展示" |
| | | } |
| | | }, |
| | | "componentFramework": "glass-easel", |
| | |
| | | current: 0, |
| | | id: '', |
| | | origin: '', |
| | | isFold: false, |
| | | info: {}, |
| | | member: {}, |
| | | showShare: false |
| | | }, |
| | | changeFold() { |
| | | this.setData({ isFold: !this.data.isFold }) |
| | | }, |
| | | onLoadLogin(options) { |
| | | this.getDetail(options.id, options.userId || '') |
| | | actionDo({ |
| | |
| | | .detail { |
| | | padding: 52rpx 40rpx 40rpx; |
| | | background-color: #fff; |
| | | |
| | | .fold{ |
| | | display: flex; |
| | | justify-content: center; |
| | | align-items: center; |
| | | height: 84rpx; |
| | | margin-top: 20rpx; |
| | | .icon{ |
| | | margin-left: 12rpx; |
| | | } |
| | | } |
| | | .title { |
| | | font-weight: 600; |
| | | font-size: 36rpx; |
| | |
| | | |
| | | .line { |
| | | display: flex; |
| | | margin-bottom: 20rpx; |
| | | padding: 24rpx 0 26rpx; |
| | | border-bottom: 1rpx dashed #E5E5E5; |
| | | .label { |
| | | width: 120rpx; |
| | | font-size: 24rpx; |
| | |
| | | </view> |
| | | <view class="detail"> |
| | | <view class="title">产品详情</view> |
| | | <view class="line" wx:for="{{ info.productParamList }}"> |
| | | <view class="label">{{ item.paramName }}:</view> |
| | | <view class="val">{{ item.paramValue }}</view> |
| | | <block wx:for="{{ info.productParamList }}"> |
| | | <view wx:if="{{ index < 5 || isFold }}" class="line" > |
| | | <view class="label">{{ item.paramName }}:</view> |
| | | <view class="val">{{ item.paramValue }}</view> |
| | | </view> |
| | | </block> |
| | | <view wx:if="{{ info.productParamList.length > 5 }}" class="fold" bindtap="changeFold"> |
| | | <text>{{ isFold ? '收起' : '展开' }}</text> |
| | | <van-icon class="icon" name="{{ isFold ? 'arrow-up' : 'arrow-down' }}" /> |
| | | </view> |
| | | </view> |
| | | <!-- 富文本 --> |
| | |
| | | padding: 52rpx 40rpx 40rpx; |
| | | background-color: #fff; |
| | | } |
| | | .detail .fold { |
| | | display: flex; |
| | | justify-content: center; |
| | | align-items: center; |
| | | height: 84rpx; |
| | | margin-top: 20rpx; |
| | | } |
| | | .detail .fold .icon { |
| | | margin-left: 12rpx; |
| | | } |
| | | .detail .title { |
| | | font-weight: 600; |
| | | font-size: 36rpx; |
| | |
| | | } |
| | | .detail .line { |
| | | display: flex; |
| | | margin-bottom: 20rpx; |
| | | padding: 24rpx 0 26rpx; |
| | | border-bottom: 1rpx dashed #E5E5E5; |
| | | } |
| | | .detail .line .label { |
| | | width: 120rpx; |
| | |
| | | } |
| | | } |
| | | } |
| | | .empty_wrap{ |
| | | padding-top: 100rpx; |
| | | } |
| | | .container{ |
| | | overflow: hidden; |
| | | height: 100%; |
| | |
| | | </view> |
| | | <view class="main_content"> |
| | | <view class="title">门店导购</view> |
| | | <scroll-view scroll-y class="list"> |
| | | <scroll-view scroll-y class="list"> |
| | | <view class="item" wx:for="{{ info.usersList }}"> |
| | | <image data-id="{{ item.iamId }}" bindtap="handleDetail" src="{{ item.imgurlFull ? item.imgurlFull : '../../static/images/default_avatar.png' }}" class="avatar"></image> |
| | | <view data-id="{{ item.iamId }}" bindtap="handleDetail" class="content"> |
| | |
| | | </view> |
| | | <view data-phone="{{ item.phone }}" bindtap="callPhone" class="btn">联系TA</view> |
| | | </view> |
| | | <view wx:if="{{ info.usersList.length == 0 }}" class="empty_wrap"> |
| | | <image class="default_empty" src="../../static/images/default_empty.png"></image> |
| | | </view> |
| | | </scroll-view> |
| | | </view> |
| | | </view> |
| | |
| | | color: var(--themeColor); |
| | | border: 1rpx solid var(--themeColor); |
| | | } |
| | | .empty_wrap { |
| | | padding-top: 100rpx; |
| | | } |
| | | .container { |
| | | overflow: hidden; |
| | | height: 100%; |
| | |
| | | uploadUrl, |
| | | editMember, |
| | | getMemberInfo, |
| | | getArea |
| | | getArea, |
| | | getWxMiniPhone |
| | | } from '../../api/index' |
| | | Page({ |
| | | |
| | |
| | | val5: '', |
| | | } |
| | | }, |
| | | onShow() { |
| | | onLoad() { |
| | | wx.getUserInfo({ |
| | | success: function(res) { |
| | | console.log('res', res); |
| | | var userInfo = res.userInfo |
| | | var nickName = userInfo.nickName |
| | | var avatarUrl = userInfo.avatarUrl |
| | | var gender = userInfo.gender //性别 0:未知、1:男、2:女 |
| | | var province = userInfo.province |
| | | var city = userInfo.city |
| | | var country = userInfo.country |
| | | } |
| | | }) |
| | | this.initData() |
| | | }, |
| | | onSubmit() { |
| | |
| | | title: '保存成功', |
| | | icon: 'none' |
| | | }) |
| | | setTimeout(() => { |
| | | wx.navigateBack() |
| | | }, 500) |
| | | }) |
| | | }, |
| | | initData() { |
| | |
| | | }) |
| | | } |
| | | }, |
| | | getPhoneNumber (e) { |
| | | const data = { ...e.detail } |
| | | getWxMiniPhone({ |
| | | encryptedData: data.encryptedData, |
| | | iv: data.iv, |
| | | sessionKey: wx.getStorageSync('sessionKey') || data.iv, |
| | | }).then(res => { |
| | | this.setData({ |
| | | phone: res.data |
| | | }) |
| | | }) |
| | | }, |
| | | getNickName(e) { |
| | | this.setData({ nikname: e.detail.value }) |
| | | }, |
| | |
| | | wx.chooseLocation({ |
| | | type: 'wgs84', |
| | | success: (res) => { |
| | | console.log('res', res); |
| | | this.setData({ |
| | | longitude: res.longitude, |
| | | latitude: res.latitude, |
| | | address: res.address, |
| | | }) |
| | | console.log('address', this.data.address); |
| | | } |
| | | }) |
| | | }, |
| | |
| | | font-size: 30rpx; |
| | | color: #777777; |
| | | } |
| | | .wechat_phone{ |
| | | width: 100%; |
| | | flex: 1; |
| | | color: #111111; |
| | | border-bottom: 1rpx solid #e5e5e5; |
| | | display: flex; |
| | | justify-content: space-between; |
| | | .btn{ |
| | | font-size: 30rpx; |
| | | color: #B08771; |
| | | } |
| | | } |
| | | .input{ |
| | | width: 100%; |
| | | flex: 1; |
| | | color: #111111; |
| | | border-bottom: 1rpx solid #e5e5e5; |
| | |
| | | </view> |
| | | <view class="line"> |
| | | <view class="label">电话</view> |
| | | <van-field type="number" border="{{ false }}" class="input" model:value="{{ phone }}" maxlength="{{ 11 }}" clearable /> |
| | | <view class="wechat_phone"> |
| | | <van-field type="number" border="{{ false }}" model:value="{{ phone }}" maxlength="{{ 11 }}" clearable /> |
| | | <button open-type="getPhoneNumber" bindgetphonenumber="getPhoneNumber" class="btn">微信授权</button> |
| | | </view> |
| | | </view> |
| | | <view class="line"> |
| | | <view class="label">城市</view> |
| | |
| | | </view> |
| | | <view class="line"> |
| | | <view class="label">面积</view> |
| | | <van-field type="number" border="{{ false }}" class="input" model:value="{{ housearea }}" maxlength="{{ 30 }}" clearable /> |
| | | <van-field custom-style="width: 100%" type="digit" border="{{ false }}" class="input" model:value="{{ housearea }}" maxlength="{{ 30 }}" clearable /> |
| | | <text>m²</text> |
| | | </view> |
| | | <view class="line"> |
| | |
| | | <view class="label">房屋户型</view> |
| | | <view class="val"> |
| | | <view class="item"> |
| | | <van-field data-str="val1" bind:blur="houseBlur" type="number" class="input" maxlength="{{ 3 }}" /> |
| | | <van-field value="{{ houseType.val1 }}" data-str="val1" bind:blur="houseBlur" type="number" class="input" maxlength="{{ 3 }}" /> |
| | | <view class="unit">室</view> |
| | | </view> |
| | | <view class="item"> |
| | | <van-field data-str="val2" bind:blur="houseBlur" type="number" class="input" maxlength="{{ 3 }}" /> |
| | | <van-field value="{{ houseType.val2 }}" data-str="val2" bind:blur="houseBlur" type="number" class="input" maxlength="{{ 3 }}" /> |
| | | <view class="unit">厅</view> |
| | | </view> |
| | | <view class="item"> |
| | | <van-field data-str="val3" bind:blur="houseBlur" type="number" class="input" maxlength="{{ 3 }}" /> |
| | | <van-field value="{{ houseType.val3 }}" data-str="val3" bind:blur="houseBlur" type="number" class="input" maxlength="{{ 3 }}" /> |
| | | <view class="unit">厨</view> |
| | | </view> |
| | | <view class="item"> |
| | | <van-field data-str="val4" bind:blur="houseBlur" type="number" class="input" maxlength="{{ 3 }}" /> |
| | | <van-field value="{{ houseType.val4 }}" data-str="val4" bind:blur="houseBlur" type="number" class="input" maxlength="{{ 3 }}" /> |
| | | <view class="unit">卫</view> |
| | | </view> |
| | | <view class="item"> |
| | | <van-field data-str="val5" bind:blur="houseBlur" type="number" class="input" maxlength="{{ 3 }}" /> |
| | | <van-field value="{{ houseType.val5 }}" data-str="val5" bind:blur="houseBlur" type="number" class="input" maxlength="{{ 3 }}" /> |
| | | <view class="unit">阳</view> |
| | | </view> |
| | | </view> |
| | |
| | | font-size: 30rpx; |
| | | color: #777777; |
| | | } |
| | | .list .line .wechat_phone { |
| | | width: 100%; |
| | | flex: 1; |
| | | color: #111111; |
| | | border-bottom: 1rpx solid #e5e5e5; |
| | | display: flex; |
| | | justify-content: space-between; |
| | | } |
| | | .list .line .wechat_phone .btn { |
| | | font-size: 30rpx; |
| | | color: #B08771; |
| | | } |
| | | .list .line .input { |
| | | width: 100%; |
| | | flex: 1; |
| | | color: #111111; |
| | | border-bottom: 1rpx solid #e5e5e5; |
| | |
| | | }, |
| | | { |
| | | "name": "", |
| | | "pathName": "pages/consult/detail", |
| | | "query": "id=1813577799402684418", |
| | | "pathName": "pages/userinfo/index", |
| | | "query": "", |
| | | "launchMode": "default", |
| | | "scene": null |
| | | } |
| | |
| | | info: {}, |
| | | member: {}, |
| | | showShare: false, |
| | | isFold: false, |
| | | enjoyList: [] |
| | | }, |
| | | onShow(){ |
| | |
| | | // this.setData({showShare: false}) |
| | | // }) |
| | | }, |
| | | changeFold() { |
| | | this.setData({ isFold: !this.data.isFold }) |
| | | }, |
| | | // onShareAppMessage: function () { |
| | | // // let { productDetail, userInfo } = this.data |
| | | // return { |
| | |
| | | .detail { |
| | | padding: 52rpx 40rpx 40rpx; |
| | | background-color: #fff; |
| | | |
| | | .fold{ |
| | | display: flex; |
| | | justify-content: center; |
| | | align-items: center; |
| | | height: 84rpx; |
| | | margin-top: 20rpx; |
| | | .icon{ |
| | | margin-left: 12rpx; |
| | | } |
| | | } |
| | | .title { |
| | | font-weight: 600; |
| | | font-size: 36rpx; |
| | |
| | | |
| | | .line { |
| | | display: flex; |
| | | margin-bottom: 20rpx; |
| | | padding: 24rpx 0 26rpx; |
| | | border-bottom: 1rpx dashed #E5E5E5; |
| | | .label { |
| | | width: auto; |
| | | width: 120rpx; |
| | | font-size: 24rpx; |
| | | color: #666666; |
| | | flex-shrink: 0; |
| | |
| | | </view> |
| | | </view> |
| | | </view> |
| | | <view class="detail"> |
| | | <view class="title" bind:tap="goTestPage">产品详情</view> |
| | | <view class="line" wx:for="{{ info.productParamList }}"> |
| | | <view class="label">{{ item.paramName }}:</view> |
| | | <view class="val">{{ item.paramValue }}</view> |
| | | <view class="detail"> |
| | | <view class="title">产品详情</view> |
| | | <block wx:for="{{ info.productParamList }}"> |
| | | <view wx:if="{{ index < 5 || isFold }}" class="line" > |
| | | <view class="label">{{ item.paramName }}:</view> |
| | | <view class="val">{{ item.paramValue }}</view> |
| | | </view> |
| | | </block> |
| | | <view wx:if="{{ info.productParamList.length > 5 }}" class="fold" bindtap="changeFold"> |
| | | <text>{{ isFold ? '收起' : '展开' }}</text> |
| | | <van-icon class="icon" name="{{ isFold ? 'arrow-up' : 'arrow-down' }}" /> |
| | | </view> |
| | | </view> |
| | | <!-- 富文本 --> |